diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index da32523a..71b5145e 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1 @@ patreon: wheremyfoodat -ko_fi: wheremyfoodat \ No newline at end of file diff --git a/.github/gles.patch b/.github/gles.patch deleted file mode 100644 index b16733b5..00000000 --- a/.github/gles.patch +++ /dev/null @@ -1,253 +0,0 @@ -diff --git a/src/host_shaders/opengl_fragment_shader.frag b/src/host_shaders/opengl_fragment_shader.frag -index 9f07df0b..96a35afa 100644 ---- a/src/host_shaders/opengl_fragment_shader.frag -+++ b/src/host_shaders/opengl_fragment_shader.frag -@@ -1,4 +1,5 @@ --#version 410 core -+#version 300 es -+precision mediump float; - - in vec4 v_quaternion; - in vec4 v_colour; -@@ -41,8 +42,8 @@ vec3 normal; - const uint samplerEnabledBitfields[2] = uint[2](0x7170e645u, 0x7f013fefu); - - bool isSamplerEnabled(uint environment_id, uint lut_id) { -- uint index = 7 * environment_id + lut_id; -- uint arrayIndex = (index >> 5); -+ uint index = 7u * environment_id + lut_id; -+ uint arrayIndex = (index >> 5u); - return (samplerEnabledBitfields[arrayIndex] & (1u << (index & 31u))) != 0u; - } - -@@ -166,11 +167,17 @@ float lutLookup(uint lut, int index) { - return texelFetch(u_tex_luts, ivec2(index, int(lut)), 0).r; - } - -+// some gles versions have bitfieldExtractCompat and complain if you redefine it, some don't and compile error, using this instead -+uint bitfieldExtractCompat(uint val, int off, int size) { -+ uint mask = uint((1 << size) - 1); -+ return uint(val >> off) & mask; -+} -+ - vec3 regToColor(uint reg) { - // Normalization scale to convert from [0...255] to [0.0...1.0] - const float scale = 1.0 / 255.0; - -- return scale * vec3(float(bitfieldExtract(reg, 20, 8)), float(bitfieldExtract(reg, 10, 8)), float(bitfieldExtract(reg, 00, 8))); -+ return scale * vec3(float(bitfieldExtractCompat(reg, 20, 8)), float(bitfieldExtractCompat(reg, 10, 8)), float(bitfieldExtractCompat(reg, 00, 8))); - } - - // Convert an arbitrary-width floating point literal to an f32 -@@ -201,7 +208,7 @@ float lightLutLookup(uint environment_id, uint lut_id, uint light_id, vec3 light - // These are the spotlight attenuation LUTs - bit_in_config1 = 8 + int(light_id & 7u); - lut_index = 8u + light_id; -- } else if (lut_id <= 6) { -+ } else if (lut_id <= 6u) { - bit_in_config1 = 16 + int(lut_id); - lut_index = lut_id; - } else { -@@ -210,16 +217,16 @@ float lightLutLookup(uint environment_id, uint lut_id, uint light_id, vec3 light - - bool current_sampler_enabled = isSamplerEnabled(environment_id, lut_id); // 7 luts per environment - -- if (!current_sampler_enabled || (bitfieldExtract(GPUREG_LIGHTING_CONFIG1, bit_in_config1, 1) != 0u)) { -+ if (!current_sampler_enabled || (bitfieldExtractCompat(GPUREG_LIGHTING_CONFIG1, bit_in_config1, 1) != 0u)) { - return 1.0; - } - -- uint scale_id = bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_SCALE, int(lut_id) << 2, 3); -+ uint scale_id = bitfieldExtractCompat(GPUREG_LIGHTING_LUTINPUT_SCALE, int(lut_id) << 2, 3); - float scale = float(1u << scale_id); - if (scale_id >= 6u) scale /= 256.0; - - float delta = 1.0; -- uint input_id = bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_SELECT, int(lut_id) << 2, 3); -+ uint input_id = bitfieldExtractCompat(GPUREG_LIGHTING_LUTINPUT_SELECT, int(lut_id) << 2, 3); - switch (input_id) { - case 0u: { - delta = dot(normal, normalize(half_vector)); -@@ -243,9 +250,9 @@ float lightLutLookup(uint environment_id, uint lut_id, uint light_id, vec3 light - - // Sign extend them. Normally bitfieldExtract would do that but it's missing on some versions - // of GLSL so we do it manually -- int se_x = bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_LOW, 0, 13); -- int se_y = bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_LOW, 16, 13); -- int se_z = bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_HIGH, 0, 13); -+ int se_x = int(bitfieldExtractCompat(uint(GPUREG_LIGHTi_SPOTDIR_LOW), 0, 13)); -+ int se_y = int(bitfieldExtractCompat(uint(GPUREG_LIGHTi_SPOTDIR_LOW), 16, 13)); -+ int se_z = int(bitfieldExtractCompat(uint(GPUREG_LIGHTi_SPOTDIR_HIGH), 0, 13)); - - if ((se_x & 0x1000) == 0x1000) se_x |= 0xffffe000; - if ((se_y & 0x1000) == 0x1000) se_y |= 0xffffe000; -@@ -272,9 +279,9 @@ float lightLutLookup(uint environment_id, uint lut_id, uint light_id, vec3 light - } - - // 0 = enabled -- if (bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_ABS, 1 + (int(lut_id) << 2), 1) == 0u) { -+ if (bitfieldExtractCompat(GPUREG_LIGHTING_LUTINPUT_ABS, 1 + (int(lut_id) << 2), 1) == 0u) { - // Two sided diffuse -- if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) { -+ if (bitfieldExtractCompat(GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) { - delta = max(delta, 0.0); - } else { - delta = abs(delta); -@@ -298,7 +305,7 @@ vec3 rotateVec3ByQuaternion(vec3 v, vec4 q) { - // Implements the following algorthm: https://mathb.in/26766 - void calcLighting(out vec4 primary_color, out vec4 secondary_color) { - uint GPUREG_LIGHTING_ENABLE = readPicaReg(0x008Fu); -- if (bitfieldExtract(GPUREG_LIGHTING_ENABLE, 0, 1) == 0u) { -+ if (bitfieldExtractCompat(GPUREG_LIGHTING_ENABLE, 0, 1) == 0u) { - primary_color = secondary_color = vec4(0.0); - return; - } -@@ -315,7 +322,7 @@ void calcLighting(out vec4 primary_color, out vec4 secondary_color) { - GPUREG_LIGHTING_LUTINPUT_ABS = readPicaReg(0x01D0u); - GPUREG_LIGHTING_LUTINPUT_SELECT = readPicaReg(0x01D1u); - -- uint bump_mode = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 28, 2); -+ uint bump_mode = bitfieldExtractCompat(GPUREG_LIGHTING_CONFIG0, 28, 2); - - // Bump mode is ignored for now because it breaks some games ie. Toad Treasure Tracker - switch (bump_mode) { -@@ -328,15 +335,15 @@ void calcLighting(out vec4 primary_color, out vec4 secondary_color) { - vec4 diffuse_sum = vec4(0.0, 0.0, 0.0, 1.0); - vec4 specular_sum = vec4(0.0, 0.0, 0.0, 1.0); - -- uint environment_id = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 4, 4); -- bool clamp_highlights = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 27, 1) == 1u; -+ uint environment_id = bitfieldExtractCompat(GPUREG_LIGHTING_CONFIG0, 4, 4); -+ bool clamp_highlights = bitfieldExtractCompat(GPUREG_LIGHTING_CONFIG0, 27, 1) == 1u; - - uint light_id; - vec3 light_vector; - vec3 half_vector; - - for (uint i = 0u; i < GPUREG_LIGHTING_NUM_LIGHTS; i++) { -- light_id = bitfieldExtract(GPUREG_LIGHTING_LIGHT_PERMUTATION, int(i) << 2, 3); -+ light_id = bitfieldExtractCompat(GPUREG_LIGHTING_LIGHT_PERMUTATION, int(i) << 2, 3); - - uint GPUREG_LIGHTi_SPECULAR0 = readPicaReg(0x0140u + (light_id << 4u)); - uint GPUREG_LIGHTi_SPECULAR1 = readPicaReg(0x0141u + (light_id << 4u)); -@@ -348,12 +355,12 @@ void calcLighting(out vec4 primary_color, out vec4 secondary_color) { - - float light_distance; - vec3 light_position = vec3( -- decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_LOW, 0, 16), 5u, 10u), decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_LOW, 16, 16), 5u, 10u), -- decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_HIGH, 0, 16), 5u, 10u) -+ decodeFP(bitfieldExtractCompat(GPUREG_LIGHTi_VECTOR_LOW, 0, 16), 5u, 10u), decodeFP(bitfieldExtractCompat(GPUREG_LIGHTi_VECTOR_LOW, 16, 16), 5u, 10u), -+ decodeFP(bitfieldExtractCompat(GPUREG_LIGHTi_VECTOR_HIGH, 0, 16), 5u, 10u) - ); - - // Positional Light -- if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 0, 1) == 0u) { -+ if (bitfieldExtractCompat(GPUREG_LIGHTi_CONFIG, 0, 1) == 0u) { - light_vector = light_position + v_view; - } - -@@ -369,23 +376,23 @@ void calcLighting(out vec4 primary_color, out vec4 secondary_color) { - float NdotL = dot(normal, light_vector); // N dot Li - - // Two sided diffuse -- if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) -+ if (bitfieldExtractCompat(GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) - NdotL = max(0.0, NdotL); - else - NdotL = abs(NdotL); - - float geometric_factor; -- bool use_geo_0 = bitfieldExtract(GPUREG_LIGHTi_CONFIG, 2, 1) == 1u; -- bool use_geo_1 = bitfieldExtract(GPUREG_LIGHTi_CONFIG, 3, 1) == 1u; -+ bool use_geo_0 = bitfieldExtractCompat(GPUREG_LIGHTi_CONFIG, 2, 1) == 1u; -+ bool use_geo_1 = bitfieldExtractCompat(GPUREG_LIGHTi_CONFIG, 3, 1) == 1u; - if (use_geo_0 || use_geo_1) { - geometric_factor = dot(half_vector, half_vector); - geometric_factor = geometric_factor == 0.0 ? 0.0 : min(NdotL / geometric_factor, 1.0); - } - - float distance_attenuation = 1.0; -- if (bitfieldExtract(GPUREG_LIGHTING_CONFIG1, 24 + int(light_id), 1) == 0u) { -- uint GPUREG_LIGHTi_ATTENUATION_BIAS = bitfieldExtract(readPicaReg(0x014Au + (light_id << 4u)), 0, 20); -- uint GPUREG_LIGHTi_ATTENUATION_SCALE = bitfieldExtract(readPicaReg(0x014Bu + (light_id << 4u)), 0, 20); -+ if (bitfieldExtractCompat(GPUREG_LIGHTING_CONFIG1, 24 + int(light_id), 1) == 0u) { -+ uint GPUREG_LIGHTi_ATTENUATION_BIAS = bitfieldExtractCompat(readPicaReg(0x014Au + (light_id << 4u)), 0, 20); -+ uint GPUREG_LIGHTi_ATTENUATION_SCALE = bitfieldExtractCompat(readPicaReg(0x014Bu + (light_id << 4u)), 0, 20); - - float distance_attenuation_bias = decodeFP(GPUREG_LIGHTi_ATTENUATION_BIAS, 7u, 12u); - float distance_attenuation_scale = decodeFP(GPUREG_LIGHTi_ATTENUATION_SCALE, 7u, 12u); -@@ -430,8 +437,8 @@ void calcLighting(out vec4 primary_color, out vec4 secondary_color) { - specular_sum.rgb += light_factor * clamp_factor * (specular0 + specular1); - } - -- uint fresnel_output1 = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 2, 1); -- uint fresnel_output2 = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 3, 1); -+ uint fresnel_output1 = bitfieldExtractCompat(GPUREG_LIGHTING_CONFIG0, 2, 1); -+ uint fresnel_output2 = bitfieldExtractCompat(GPUREG_LIGHTING_CONFIG0, 3, 1); - // Uses parameters from the last light as Fresnel is only applied to the last light - float fresnel_factor; - -diff --git a/src/host_shaders/opengl_vertex_shader.vert b/src/host_shaders/opengl_vertex_shader.vert -index 057f9a88..dc735ced 100644 ---- a/src/host_shaders/opengl_vertex_shader.vert -+++ b/src/host_shaders/opengl_vertex_shader.vert -@@ -1,4 +1,6 @@ --#version 410 core -+#version 300 es -+precision mediump float; -+precision mediump int; - - layout(location = 0) in vec4 a_coords; - layout(location = 1) in vec4 a_quaternion; -@@ -18,7 +20,7 @@ out vec2 v_texcoord2; - flat out vec4 v_textureEnvColor[6]; - flat out vec4 v_textureEnvBufferColor; - --out float gl_ClipDistance[2]; -+// out float gl_ClipDistance[2]; - - // TEV uniforms - uniform uint u_textureEnvColor[6]; -@@ -81,8 +83,8 @@ void main() { - ); - - // There's also another, always-on clipping plane based on vertex z -- gl_ClipDistance[0] = -a_coords.z; -- gl_ClipDistance[1] = dot(clipData, a_coords); -+ // gl_ClipDistance[0] = -a_coords.z; -+ // gl_ClipDistance[1] = dot(clipData, a_coords); - - v_quaternion = a_quaternion; - } -diff --git a/third_party/opengl/opengl.hpp b/third_party/opengl/opengl.hpp -index 607815fa..cbfcc096 100644 ---- a/third_party/opengl/opengl.hpp -+++ b/third_party/opengl/opengl.hpp -@@ -602,22 +602,22 @@ namespace OpenGL { - static void disableScissor() { glDisable(GL_SCISSOR_TEST); } - static void enableBlend() { glEnable(GL_BLEND); } - static void disableBlend() { glDisable(GL_BLEND); } -- static void enableLogicOp() { glEnable(GL_COLOR_LOGIC_OP); } -- static void disableLogicOp() { glDisable(GL_COLOR_LOGIC_OP); } -+ static void enableLogicOp() { /* glEnable(GL_COLOR_LOGIC_OP); */ } -+ static void disableLogicOp() { /* glDisable(GL_COLOR_LOGIC_OP); */ } - static void enableDepth() { glEnable(GL_DEPTH_TEST); } - static void disableDepth() { glDisable(GL_DEPTH_TEST); } - static void enableStencil() { glEnable(GL_STENCIL_TEST); } - static void disableStencil() { glDisable(GL_STENCIL_TEST); } - -- static void enableClipPlane(GLuint index) { glEnable(GL_CLIP_DISTANCE0 + index); } -- static void disableClipPlane(GLuint index) { glDisable(GL_CLIP_DISTANCE0 + index); } -+ static void enableClipPlane(GLuint index) { /* glEnable(GL_CLIP_DISTANCE0 + index); */ } -+ static void disableClipPlane(GLuint index) { /* glDisable(GL_CLIP_DISTANCE0 + index); */ } - - static void setDepthFunc(DepthFunc func) { glDepthFunc(static_cast(func)); } - static void setColourMask(GLboolean r, GLboolean g, GLboolean b, GLboolean a) { glColorMask(r, g, b, a); } - static void setDepthMask(GLboolean mask) { glDepthMask(mask); } - - // TODO: Add a proper enum for this -- static void setLogicOp(GLenum op) { glLogicOp(op); } -+ static void setLogicOp(GLenum op) { /* glLogicOp(op); */ } - - enum Primitives { - Triangle = GL_TRIANGLES, diff --git a/.github/linux-appimage-qt.sh b/.github/linux-appimage-qt.sh deleted file mode 100644 index 075379fc..00000000 --- a/.github/linux-appimage-qt.sh +++ /dev/null @@ -1,9 +0,0 @@ -# Prepare Tools for building the AppImage -wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage -wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage - -chmod a+x linuxdeploy-x86_64.AppImage -chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage - -# Build AppImage -QMAKE=/usr/lib/qt6/bin/qmake ./linuxdeploy-x86_64.AppImage --appdir AppDir -d ./.github/Alber.desktop -e ./build/Alber -i ./docs/img/Alber.png --plugin qt --output appimage diff --git a/.github/mac-bundle-qt.sh b/.github/mac-bundle-qt.sh deleted file mode 100755 index aed59d60..00000000 --- a/.github/mac-bundle-qt.sh +++ /dev/null @@ -1,64 +0,0 @@ -# Taken from pcsx-redux create-app-bundle.sh -# For Plist buddy -PATH="$PATH:/usr/libexec" - -# Construct the app iconset. -mkdir alber.iconset - -# Create a mask for rounding our icon. We don't want it to be square, as most MacOS icons are rounded -convert -size 1024x1024 xc:none -draw "roundrectangle 0,0,1024,1024,220,220" rounded_mask.png -convert docs/img/mac_icon.ico -alpha on -background none -resize 1024x1024 PNG32:temp.png -# Apply the mask to our icon -convert temp.png rounded_mask.png -compose DstIn -composite temp.png - -# Normal icons -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 16x16 alber.iconset/icon_16x16.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 32x32 alber.iconset/icon_32x32.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 64x64 alber.iconset/icon_64x64.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 128x128 alber.iconset/icon_128x128.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 256x256 alber.iconset/icon_256x256.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 512x512 alber.iconset/icon_512x512.png - -# High DPI icons -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 32x32 alber.iconset/icon_16x16@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 64x64 alber.iconset/icon_32x32@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 128x128 alber.iconset/icon_64x64@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 256x256 alber.iconset/icon_128x128@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 512x512 alber.iconset/icon_256x256@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 1024x1024 alber.iconset/icon_512x512@2x.png - -iconutil --convert icns alber.iconset -rm rounded_mask.png temp.png - -# Set up the .app directory -mkdir -p Alber.app/Contents/MacOS/Libraries -mkdir Alber.app/Contents/Resources - -# Copy binary into App -cp ./build/Alber Alber.app/Contents/MacOS/Alber -chmod a+x Alber.app/Contents/Macos/Alber - -# Copy icons into App -cp alber.icns Alber.app/Contents/Resources/AppIcon.icns - -# Fix up Plist stuff -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundleDisplayName string Alber" -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundleIconName string AppIcon" -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundleIconFile string AppIcon" -PlistBuddy Alber.app/Contents/Info.plist -c "add NSHighResolutionCapable bool true" -PlistBuddy Alber.app/Contents/version.plist -c "add ProjectName string Alber" - -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundleExecutable string Alber" -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundleDevelopmentRegion string en" -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundleInfoDictionaryVersion string 6.0" -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundleName string Panda3DS" -PlistBuddy Alber.app/Contents/Info.plist -c "add CFBundlePackageType string APPL" -PlistBuddy Alber.app/Contents/Info.plist -c "add NSHumanReadableCopyright string Copyright 2023 Panda3DS Team" - -PlistBuddy Alber.app/Contents/Info.plist -c "add LSMinimumSystemVersion string 10.15" - -# Bundle dylibs -ruby .github/mac-libs.rb ./build/ - -# relative rpath -install_name_tool -add_rpath @loader_path/../Frameworks Alber.app/Contents/MacOS/Alber diff --git a/.github/mac-bundle.sh b/.github/mac-bundle.sh index 274f1115..314b30f7 100755 --- a/.github/mac-bundle.sh +++ b/.github/mac-bundle.sh @@ -2,38 +2,26 @@ # For Plist buddy PATH="$PATH:/usr/libexec" + # Construct the app iconset. mkdir alber.iconset - -# Create a mask for rounding our icon. We don't want it to be square, as most MacOS icons are rounded -convert -size 1024x1024 xc:none -draw "roundrectangle 0,0,1024,1024,220,220" rounded_mask.png -convert docs/img/mac_icon.ico -alpha on -background none -resize 1024x1024 PNG32:temp.png -# Apply the mask to our icon -convert temp.png rounded_mask.png -compose DstIn -composite temp.png - -# Normal icons -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 16x16 alber.iconset/icon_16x16.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 32x32 alber.iconset/icon_32x32.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 64x64 alber.iconset/icon_64x64.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 128x128 alber.iconset/icon_128x128.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 256x256 alber.iconset/icon_256x256.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 72 -resize 512x512 alber.iconset/icon_512x512.png - -# High DPI icons -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 32x32 alber.iconset/icon_16x16@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 64x64 alber.iconset/icon_32x32@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 128x128 alber.iconset/icon_64x64@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 256x256 alber.iconset/icon_128x128@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 512x512 alber.iconset/icon_256x256@2x.png -convert temp.png -alpha on -background none -units PixelsPerInch -density 144 -resize 1024x1024 alber.iconset/icon_512x512@2x.png - +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 72 -resize 16x16 alber.iconset/icon_16x16.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 144 -resize 32x32 alber.iconset/icon_16x16@2x.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 72 -resize 32x32 alber.iconset/icon_32x32.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 144 -resize 64x64 alber.iconset/icon_32x32@2x.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 72 -resize 128x128 alber.iconset/icon_128x128.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 144 -resize 256x256 alber.iconset/icon_128x128@2x.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 72 -resize 256x256 alber.iconset/icon_256x256.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 144 -resize 512x512 alber.iconset/icon_256x256@2x.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 72 -resize 512x512 alber.iconset/icon_512x512.png +convert docs/img/alber-icon.ico -alpha on -background none -units PixelsPerInch -density 144 -resize 1024x1024 alber.iconset/icon_512x512@2x.png iconutil --convert icns alber.iconset -rm rounded_mask.png temp.png # Set up the .app directory mkdir -p Alber.app/Contents/MacOS/Libraries mkdir Alber.app/Contents/Resources + # Copy binary into App cp ./build/Alber Alber.app/Contents/MacOS/Alber chmod a+x Alber.app/Contents/Macos/Alber diff --git a/.github/mac-libs.rb b/.github/mac-libs.rb deleted file mode 100644 index d0c83a5b..00000000 --- a/.github/mac-libs.rb +++ /dev/null @@ -1,255 +0,0 @@ -#!/usr/bin/env ruby - -require "open3" -require "fileutils" - -$app_name = "Alber" -$build_dmg = false -$build_dir = "" -$bundle = "" -$fallback_rpaths = [] - -def frameworks_dir - File.join($bundle, "Contents", "Frameworks") -end - -def executable - File.join($bundle, "Contents", "MacOS", $app_name) -end - -def get_rpaths(lib) - out, _ = Open3.capture2("otool", "-l", lib) - out = out.split("\n") - rpaths = [] - - out.each_with_index do |line, i| - if line.match(/^ *cmd LC_RPATH$/) - rpaths << out[i + 2].strip.split(" ")[1] - end - end - - return rpaths -end - -def get_load_libs(lib) - out, _ = Open3.capture2("otool", "-L", lib) - out.split("\n") - .drop(1) - .map { |it| it.strip.gsub(/ \(.*/, "") } -end - -def expand_load_path(lib, path) - if path.match(/@(rpath|loader_path|executable_path)/) - path_type = $1 - file_name = path.gsub(/^@#{path_type}\//, "") - - case path_type - when "rpath" - get_rpaths(lib).each do |rpath| - file = File.join(rpath, file_name) - return file, :rpath if File.exist? file - if rpath.match(/^@executable_path(.*)/) != nil - relative = rpath.sub(/^@executable_path/, "") - return "#{$bundle}/Contents/MacOS#{relative}/#{file_name}", :executable_path - end - end - file = $fallback_rpaths - .map { |it| File.join(it, file_name) } - .find { |it| File.exist? it } - if file == nil - path = File.join(File.dirname(lib), file_name) - file = path if File.exist? path - end - return file, :rpath if file - when "executable_path" - file = File.join(File.dirname(executable), file_name) - return file, :executable_path if File.exist? file - when "loader_path" - file = File.join(File.dirname(lib), file_name) - return file, :loader_path if File.exist? file - else - throw "Unknown @path type" - end - else - return File.absolute_path(path), :absolute - end - - return nil -end - -def system_path?(path) - path.match(/^\/usr\/lib|^\/System/) != nil -end - -def system_lib?(lib) - system_path? File.dirname(lib) -end - -def install_name_tool(exec, action, path1, path2 = nil) - args = ["-#{action.to_s}", path1] - args << path2 if path2 != nil - - Open3.popen3("install_name_tool", *args, exec) do |stdin, stdout, stderr, thread| - print stdout.read - err = stderr.read - unless err.match? "code signature" - print err - end - end -end - -def strip(lib) - out, _ = Open3.capture2("strip", "-no_code_signature_warning", "-Sx", lib) - print out -end - -def fixup_libs(prog, orig_path) - throw "fixup_libs: #{prog} doesn't exist" unless File.exist? prog - - libs = get_load_libs(prog).map { |it| expand_load_path(orig_path, it) }.select { |it| not system_lib? it[0] } - - FileUtils.chmod("u+w", prog) - strip prog - - libs.each do |lib| - libpath, libtype = lib - if File.basename(libpath) == File.basename(prog) - if libtype == :absolute - install_name_tool prog, :change, libpath, File.join("@rpath", File.basename(libpath)) - end - next - end - - framework = libpath.match(/(.*).framework/) - framework = framework.to_s if framework - - if framework - fwlib = libpath.sub(framework + "/", "") - fwname = File.basename(framework) - - unless libtype == :rpath - install_name_tool prog, :change, libpath, File.join("@rpath", fwname, fwlib) - end - - next if File.exist? File.join(frameworks_dir, fwname) - expath, _ = expand_load_path(orig_path, framework) - FileUtils.cp_r(expath, frameworks_dir, preserve: true) - FileUtils.chmod_R("u+w", File.join(frameworks_dir, fwname)) - fixup_libs File.join(frameworks_dir, fwname, fwlib), libpath - else - libname = File.basename(libpath) - dest = File.join(frameworks_dir, libname) - - if libtype == :absolute - install_name_tool prog, :change, libpath, File.join("@rpath", libname) - end - - next if File.exist? dest - expath, _ = expand_load_path(orig_path, libpath) - FileUtils.copy expath, frameworks_dir - FileUtils.chmod("u+w", dest) - fixup_libs dest, libpath - end - end -end - -if ARGV[0] == "--dmg" - $build_dmg = true - ARGV.shift -end - -if ARGV.length != 1 - puts "Usage: #{Process.argv0} [--dmg] " - return -end - -$build_dir = ARGV[0] -unless File.exist? $build_dir - puts "#{$build_dir} doesn't exist" -end - - -$bundle = "#{$app_name}.app" - -unless File.exist? $bundle and File.exist? File.join($build_dir, "CMakeCache.txt") - puts "#{$build_dir} doesn't look like a valid build directory" - exit 1 -end - -File.read(File.join($build_dir, "CMakeCache.txt")) - .split("\n") - .find { |it| it.match /Qt(.)_DIR:PATH=(.*)/ } - -qt_major = $1 -qt_dir = $2 -qt_dir = File.absolute_path("#{qt_dir}/../../..") - -for lib in get_load_libs(executable) do - next if system_lib? lib - - path = File.dirname(lib) - - if path.match? ".framework" - path = path.sub(/\/[^\/]+\.framework.*/, "") - end - - $fallback_rpaths << path unless $fallback_rpaths.include? path -end - -$fallback_rpaths << File.join(qt_dir, "lib") - -plugin_paths = [ - File.join(qt_dir, "libexec", "qt#{qt_major}", "plugins"), - File.join(qt_dir, "plugins"), - File.join(qt_dir, "share", "qt", "plugins") -] - -qt_plugins = plugin_paths.find { |file| File.exist? file } - -if qt_plugins == nil - puts "Couldn't find Qt plugins, tried looking for:" - plugin_paths.each { |path| puts " - #{path}" } - exit 1 -end - -FileUtils.mkdir_p(frameworks_dir) -fixup_libs(executable, executable) - -bundle_plugins = File.join($bundle, "Contents", "PlugIns") - -want_plugins = ["styles/libqmacstyle.dylib", "platforms/libqcocoa.dylib", "imageformats/libqsvg.dylib"] -want_plugins.each do |plug| - destdir = File.join(bundle_plugins, File.dirname(plug)) - FileUtils.mkdir_p(destdir) - FileUtils.copy(File.join(qt_plugins, plug), destdir) - fixup_libs File.join(bundle_plugins, plug), File.join(qt_plugins, plug) -end - -want_rpath = "@executable_path/../Frameworks" -exec_rpaths = get_rpaths(executable) -exec_rpaths.select { |path| path != want_rpath }.each do |path| - install_name_tool executable, :delete_rpath, path -end - -unless exec_rpaths.include? want_rpath - install_name_tool executable, :add_rpath, want_rpath -end - -exec_rpaths = get_rpaths(executable) - -Dir.glob("#{frameworks_dir}/**/Headers").each do |dir| - FileUtils.rm_rf dir -end - -out, _ = Open3.capture2("codesign", "-s", "-", "-f", "--deep", $bundle) -print out - -if $build_dmg - dmg_dir = File.join($build_dir, "dmg") - FileUtils.mkdir_p(dmg_dir) - FileUtils.cp_r($bundle, dmg_dir, preserve: true) - FileUtils.ln_s("/Applications", File.join(dmg_dir, "Applications")) - - `hdiutil create -fs HFS+ -volname melonDS -srcfolder "#{dmg_dir}" -ov -format UDBZ "#{$build_dir}/melonDS.dmg"` - FileUtils.rm_rf(dmg_dir) -end diff --git a/.github/workflows/Android_Build.yml b/.github/workflows/Android_Build.yml deleted file mode 100644 index 37a5eb45..00000000 --- a/.github/workflows/Android_Build.yml +++ /dev/null @@ -1,145 +0,0 @@ -name: Android Build - -on: - push: - branches: - - master - pull_request: - -jobs: - x64: - runs-on: ubuntu-24.04 - - strategy: - matrix: - build_type: - - release - - steps: - - name: Set BUILD_TYPE variable - run: echo "BUILD_TYPE=${{ matrix.build_type }}" >> $GITHUB_ENV - - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Setup CCache - uses: hendrikmuhs/ccache-action@v1.2 - - - name: Set up gradle caches - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-pandroid-x86_64-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-pandroid-x86_64- - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: 'zulu' - java-version: '17' - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DBUILD_HYDRA_CORE=1 -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DANDROID_ABI=x86_64 -DENABLE_VULKAN=0 -DENABLE_USER_BUILD=ON -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache - - - name: Build - run: | - # Apply patch for GLES compatibility - git apply ./.github/gles.patch - # Build the project with CMake - cmake --build ${{github.workspace}}/build --config ${{ env.BUILD_TYPE }} - - # Strip the generated library and move it to the appropriate location - ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip --strip-unneeded ./build/libAlber.so - mv ./build/libAlber.so ./src/pandroid/app/src/main/jniLibs/x86_64/ - - # Build the Android app with Gradle - cd src/pandroid - ./gradlew assemble${{ env.BUILD_TYPE }} - cd ../.. - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: Android APKs (x86-64) - path: | - ./src/pandroid/app/build/outputs/apk/${{ env.BUILD_TYPE }}/app-${{ env.BUILD_TYPE }}.apk - - arm64: - runs-on: ubuntu-24.04 - - strategy: - matrix: - build_type: - - release - - steps: - - name: Set BUILD_TYPE variable - run: echo "BUILD_TYPE=${{ matrix.build_type }}" >> $GITHUB_ENV - - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Setup CCache - uses: hendrikmuhs/ccache-action@v1.2 - - - name: Set up gradle caches - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-pandroid-arm64-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-pandroid-arm64- - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: 'zulu' - java-version: '17' - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DBUILD_HYDRA_CORE=1 -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DENABLE_VULKAN=0 -DENABLE_USER_BUILD=ON -DCMAKE_CXX_FLAGS="-march=armv8-a+crypto" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache - - - name: Build - run: | - # Apply patch for GLES compatibility - git apply ./.github/gles.patch - # Build the project with CMake - cmake --build ${{github.workspace}}/build --config ${{ env.BUILD_TYPE }} - - # Strip the generated library and move it to the appropriate location - ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip --strip-unneeded ./build/libAlber.so - mv ./build/libAlber.so ./src/pandroid/app/src/main/jniLibs/arm64-v8a/ - - # Build the Android app with Gradle - cd src/pandroid - ./gradlew assemble${{ env.BUILD_TYPE }} - ls -R app/build/outputs - cd ../.. - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: Android APKs (arm64) - path: | - ./src/pandroid/app/build/outputs/apk/${{ env.BUILD_TYPE }}/app-${{ env.BUILD_TYPE }}.apk diff --git a/.github/workflows/HTTP_Build.yml b/.github/workflows/HTTP_Build.yml index 11bf27eb..24cd19bc 100644 --- a/.github/workflows/HTTP_Build.yml +++ b/.github/workflows/HTTP_Build.yml @@ -16,30 +16,24 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v2 - name: Fetch submodules run: git submodule update --init --recursive - - - name: Install newer Clang - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x ./llvm.sh - sudo ./llvm.sh 17 - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main + uses: humbletim/setup-vulkan-sdk@v1.2.0 with: vulkan-query-version: latest vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang + vulkan-components: Vulkan-Headers, Vulkan-Loader, Glslang - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DENABLE_HTTP_SERVER=ON + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_USER_BUILD=ON -DENABLE_HTTP_SERVER=ON - name: Build # Build your program with the given configuration diff --git a/.github/workflows/Hydra_Build.yml b/.github/workflows/Hydra_Build.yml deleted file mode 100644 index 66cd2e27..00000000 --- a/.github/workflows/Hydra_Build.yml +++ /dev/null @@ -1,244 +0,0 @@ -name: Hydra Core Build - -on: - push: - branches: - - master - pull_request: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - Windows: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_HYDRA_CORE=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Upload Hydra core - uses: actions/upload-artifact@v4 - with: - name: Windows Hydra core - path: '${{github.workspace}}/build/${{ env.BUILD_TYPE }}/Alber.dll' - - - name: Configure CMake (Again) - run: | - rm -r -fo ${{github.workspace}}/build - cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON - - - name: Build (Again) - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Upload Libretro core - uses: actions/upload-artifact@v4 - with: - name: Windows Libretro core - path: | - ${{github.workspace}}/build/${{ env.BUILD_TYPE }}/panda3ds_libretro.dll - ${{github.workspace}}/docs/libretro/panda3ds_libretro.info - - MacOS: - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_HYDRA_CORE=ON -DCMAKE_OSX_ARCHITECTURE=x86_64 - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Upload core - uses: actions/upload-artifact@v4 - with: - name: MacOS Hydra core - path: '${{github.workspace}}/build/libAlber.dylib' - - - name: Configure CMake (Again) - run: | - rm -rf ${{github.workspace}}/build - cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON -DCMAKE_OSX_ARCHITECTURE=x86_64 - - - name: Build (Again) - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} && ls -R ${{github.workspace}}/build - - - name: Upload Libretro core - uses: actions/upload-artifact@v4 - with: - name: MacOS Libretro core - path: | - ${{github.workspace}}/build/panda3ds_libretro.dylib - ${{github.workspace}}/docs/libretro/panda3ds_libretro.info - - Linux: - runs-on: ubuntu-24.04 - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Install misc packages - run: | - sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev - - - name: Install newer Clang - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x ./llvm.sh - sudo ./llvm.sh 17 - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DBUILD_HYDRA_CORE=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Upload core - uses: actions/upload-artifact@v4 - with: - name: Linux Hydra core - path: '${{github.workspace}}/build/libAlber.so' - - - name: Configure CMake (Again) - run: | - rm -rf ${{github.workspace}}/build - cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON - - - name: Build (Again) - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Upload Libretro core - uses: actions/upload-artifact@v4 - with: - name: Linux Libretro core - path: | - ${{github.workspace}}/build/panda3ds_libretro.so - ${{github.workspace}}/docs/libretro/panda3ds_libretro.info - - Android-x64: - runs-on: ubuntu-24.04 - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Install misc packages - run: | - sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DANDROID_ABI=x86_64 -DBUILD_HYDRA_CORE=1 -DENABLE_VULKAN=0 - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Upload core - uses: actions/upload-artifact@v4 - with: - name: Android Hydra core - path: '${{github.workspace}}/build/libAlber.so' - - ARM-Libretro: - runs-on: ubuntu-24.04-arm - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Install misc packages - run: | - sudo apt-get update && sudo apt install libx11-dev libxext-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev - - - name: Install newer Clang - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x ./llvm.sh - sudo ./llvm.sh 17 - - - name: Configure CMake - run: | - cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON -DENABLE_VULKAN=OFF -DCRYPTOPP_OPT_DISABLE_ASM=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Upload Libretro core - uses: actions/upload-artifact@v4 - with: - name: Linux arm64 Libretro core - path: | - ${{github.workspace}}/build/panda3ds_libretro.so - ${{github.workspace}}/docs/libretro/panda3ds_libretro.info - - ARM-Libretro-Android: - runs-on: ubuntu-24.04 - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DBUILD_LIBRETRO_CORE=1 -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DENABLE_VULKAN=0 -DENABLE_USER_BUILD=ON -DCMAKE_CXX_FLAGS="-march=armv8-a+crypto" - - - name: Build - run: | - # Apply patch for GLES compatibility - git apply ./.github/gles.patch - # Build the project with CMake - cmake --build ${{github.workspace}}/build --config ${{ env.BUILD_TYPE }} - - # Strip the generated library - ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip --strip-unneeded ./build/panda3ds_libretro.so - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: Android arm64 Libretro core - path: | - ${{github.workspace}}/build/panda3ds_libretro.so - ${{github.workspace}}/docs/libretro/panda3ds_libretro.info diff --git a/.github/workflows/Linux_AppImage_Build.yml b/.github/workflows/Linux_AppImage_Build.yml index 9e46072f..0a304109 100644 --- a/.github/workflows/Linux_AppImage_Build.yml +++ b/.github/workflows/Linux_AppImage_Build.yml @@ -16,33 +16,41 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-24.04 + runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v2 - name: Fetch submodules run: git submodule update --init --recursive - name: Install misc packages - run: sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev + run: sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev libfuse2 - name: Install newer Clang run: | wget https://apt.llvm.org/llvm.sh chmod +x ./llvm.sh - sudo ./llvm.sh 17 + sudo ./llvm.sh 16 + + - name: Install newer CMake + run: | + sudo curl -s https://apt.kitware.com/keys/kitware-archive-latest.asc | gpg --dearmor | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 42D5A192B819C5DA + sudo add-apt-repository -y 'deb https://apt.kitware.com/ubuntu/ focal main' + sudo apt-get update + sudo apt-get install cmake - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang + run: | + wget -qO - http://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add - + sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-focal.list http://packages.lunarg.com/vulkan/lunarg-vulkan-focal.list + sudo apt update + sudo apt install vulkan-sdk - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-16 -DCMAKE_CXX_COMPILER=clang++-16 -DENABLE_USER_BUILD=ON - name: Build # Build your program with the given configuration @@ -52,7 +60,7 @@ jobs: run: ./.github/linux-appimage.sh - name: Upload executable - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: Linux executable path: './Alber-x86_64.AppImage' diff --git a/.github/workflows/Linux_Build.yml b/.github/workflows/Linux_Build.yml index d0ddfecf..bbc79d81 100644 --- a/.github/workflows/Linux_Build.yml +++ b/.github/workflows/Linux_Build.yml @@ -16,40 +16,34 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v2 - name: Fetch submodules run: git submodule update --init --recursive - name: Install misc packages - run: sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libwayland-dev - - - name: Install newer Clang - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x ./llvm.sh - sudo ./llvm.sh 17 + run: sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main + uses: humbletim/setup-vulkan-sdk@v1.2.0 with: vulkan-query-version: latest vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang + vulkan-components: Vulkan-Headers, Vulkan-Loader, Glslang - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_USER_BUILD=ON - name: Build # Build your program with the given configuration run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - name: Upload executable - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: Linux executable path: './build/Alber' diff --git a/.github/workflows/MacOS_Build.yml b/.github/workflows/MacOS_Build.yml index a405e788..7e54c5a5 100644 --- a/.github/workflows/MacOS_Build.yml +++ b/.github/workflows/MacOS_Build.yml @@ -12,29 +12,28 @@ env: jobs: build: - strategy: - matrix: - arch: [x86_64, arm64] - - name: MacOS-${{ matrix.arch }} + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix runs-on: macos-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v2 - name: Fetch submodules run: git submodule update --init --recursive - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main + uses: humbletim/setup-vulkan-sdk@v1.2.0 with: vulkan-query-version: latest vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang + vulkan-components: Vulkan-Headers, Vulkan-Loader, Glslang - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON - name: Build # Build your program with the given configuration @@ -50,45 +49,10 @@ jobs: run: codesign --force -s - -vvvv Alber.app - name: Zip it up - run: zip -r Alber-${{ matrix.arch }} Alber.app + run: zip -r Alber Alber.app - name: Upload MacOS App - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: - name: MacOS Alber App Bundle (${{ matrix.arch }}) - path: Alber-${{ matrix.arch }}.zip - - MacOS-Universal: - name: MacOS-Universal - needs: [build] - runs-on: macos-latest - - steps: - - name: Download x86_64 - uses: actions/download-artifact@v4 - with: - name: MacOS Alber App Bundle (x86_64) - path: x86_64 - - name: Download ARM64 - uses: actions/download-artifact@v4 - with: - name: MacOS Alber App Bundle (arm64) - path: arm64 - - name: Combine app bundles - shell: bash - run: | - set -x - unzip x86_64/*.zip -d x86_64 - unzip arm64/*.zip -d arm64 - lipo {x86_64,arm64}/Alber.app/Contents/MacOS/Alber -create -output Alber - cp -v -a arm64/Alber.app Alber.app - cp -v Alber Alber.app/Contents/MacOS/Alber - # Mix in x86_64 files that do not appear in the ARM64 build (e.g. libvulkan) - cp -v -R -n x86_64/Alber.app/* Alber.app/ || true - codesign --force -s - -vvvv Alber.app - zip -r -y Alber-universal.zip Alber.app - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: MacOS Alber App Bundle (universal) - path: Alber-universal.zip + name: MacOS Alber App Bundle + path: 'Alber.zip' diff --git a/.github/workflows/Qt_Build.yml b/.github/workflows/Qt_Build.yml deleted file mode 100644 index 3db1e4f3..00000000 --- a/.github/workflows/Qt_Build.yml +++ /dev/null @@ -1,186 +0,0 @@ -name: Qt Build - -on: - push: - branches: - - master - pull_request: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - Windows: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Setup Qt - uses: jurplel/install-qt-action@v3 - with: - arch: win64_msvc2019_64 - version: 6.2.0 - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DENABLE_QT_GUI=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Deploy - run: | - mkdir upload - move build/Release/Alber.exe upload - windeployqt --dir upload upload/Alber.exe - - - name: Upload executable - uses: actions/upload-artifact@v4 - with: - name: Windows executable - path: upload - - MacOS: - strategy: - matrix: - arch: [x86_64, arm64] - - name: MacOS-${{ matrix.arch }} - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Install bundle dependencies - run: | - brew install dylibbundler imagemagick - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - aqtversion: '==3.1.*' - version: '6.8.1' - host: 'mac' - target: 'desktop' - arch: 'clang_64' - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DENABLE_QT_GUI=ON -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Run bundle script - run: | - chmod +x .github/mac-bundle-qt.sh - ./.github/mac-bundle-qt.sh - - - name: Sign the App - run: codesign --force -s - -vvvv Alber.app - - - name: Zip it up - run: zip -r Alber-${{ matrix.arch }} Alber.app - - - name: Upload MacOS App - uses: actions/upload-artifact@v4 - with: - name: MacOS Alber App Bundle (${{ matrix.arch }}) - path: Alber-${{ matrix.arch }}.zip - - MacOS-Universal: - name: MacOS-Universal - needs: [MacOS] - runs-on: macos-latest - - steps: - - name: Download x86_64 - uses: actions/download-artifact@v4 - with: - name: MacOS Alber App Bundle (x86_64) - path: x86_64 - - name: Download ARM64 - uses: actions/download-artifact@v4 - with: - name: MacOS Alber App Bundle (arm64) - path: arm64 - - name: Combine app bundles - shell: bash - run: | - set -x - unzip x86_64/*.zip -d x86_64 - unzip arm64/*.zip -d arm64 - lipo {x86_64,arm64}/Alber.app/Contents/MacOS/Alber -create -output Alber - cp -v -a arm64/Alber.app Alber.app - cp -v Alber Alber.app/Contents/MacOS/Alber - # Mix in x86_64 files that do not appear in the ARM64 build (e.g. libvulkan) - cp -v -R -n x86_64/Alber.app/* Alber.app/ || true - codesign --force -s - -vvvv Alber.app - zip -r -y Alber-universal.zip Alber.app - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: MacOS Alber App Bundle (universal) - path: Alber-universal.zip - - Linux: - runs-on: ubuntu-24.04 - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Install misc packages - run: | - sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev libgl1-mesa-dev - sudo apt update - sudo apt install qt6-base-dev qt6-base-private-dev qt6-tools-dev - - - name: Install newer Clang - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x ./llvm.sh - sudo ./llvm.sh 17 - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DENABLE_QT_GUI=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Run AppImage packaging script - run: | - chmod +x .github/linux-appimage-qt.sh - ./.github/linux-appimage-qt.sh - - - name: Upload executable - uses: actions/upload-artifact@v4 - with: - name: Linux executable - path: './Alber-x86_64.AppImage' diff --git a/.github/workflows/Test_Build.yml b/.github/workflows/Test_Build.yml deleted file mode 100644 index edfa9fa9..00000000 --- a/.github/workflows/Test_Build.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Hardware Test Build - -on: - push: - branches: - - master - pull_request: - -jobs: - build: - runs-on: ubuntu-latest - container: devkitpro/devkitarm - - steps: - - uses: actions/checkout@v4 - - - name: Install and update packages - run: | - apt-get -y install python3 python3-pip python3-venv p7zip-full libarchive13 - python3 --version - python3 -m venv venv - . ./venv/bin/activate - python3 -m pip install --upgrade pip setuptools - - - name: Compile tests - run: | - make -C tests/AppCpuTimeLimit - make -C tests/DetectEmulator - make -C tests/HelloWorldSVC - make -C tests/ImmediateModeTriangles - make -C tests/PICA_LITP - make -C tests/SimplerTri - - - name: Clone and compile 3ds-examples - run: | - git clone --recursive https://github.com/devkitPro/3ds-examples tests/3ds-examples - make -C tests/3ds-examples - - - name: Upload binaries - uses: actions/upload-artifact@v4 - with: - name: Source & Binaries - path: tests - diff --git a/.github/workflows/Windows_Build.yml b/.github/workflows/Windows_Build.yml index caa3d806..653692f3 100644 --- a/.github/workflows/Windows_Build.yml +++ b/.github/workflows/Windows_Build.yml @@ -19,16 +19,16 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v2 - name: Fetch submodules run: git submodule update --init --recursive - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main + uses: humbletim/setup-vulkan-sdk@v1.2.0 with: vulkan-query-version: latest vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang + vulkan-components: Vulkan-Headers, Vulkan-Loader, Glslang - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. @@ -40,7 +40,7 @@ jobs: run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - name: Upload executable - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: Windows executable - path: './build/${{ env.BUILD_TYPE }}/Alber.exe' + path: './build/Release/Alber.exe' diff --git a/.github/workflows/iOS_Build.yml b/.github/workflows/iOS_Build.yml deleted file mode 100644 index 7d7e604b..00000000 --- a/.github/workflows/iOS_Build.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: iOS Simulator Build - -on: - push: - branches: - - master - pull_request: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - name: Fetch submodules - run: git submodule update --init --recursive - - - name: Update Xcode - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: latest - - - name: Setup Vulkan SDK - uses: humbletim/setup-vulkan-sdk@main - with: - vulkan-query-version: latest - vulkan-use-cache: true - vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang - - - name: Build core and frontend - run: cd src/pandios && ./build.sh diff --git a/.gitignore b/.gitignore index 5fdf525d..ee5f1331 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ build/ .vs/ .vscode/*.log -.cache/ + ipch/ *.aps *.ncb @@ -58,24 +58,9 @@ fb.bat *.3ds *.3dsx *.app -*.cia *.cci *.cxi *.elf *.smdh -# Compiled Metal shader files -*.ir -*.metallib - -config.toml -CMakeSettings.json - -# IDE files - -# KDevelop files -*.kdev4 -# IDEA/Clion files -.idea/ -# VSC files -/.vscode/ \ No newline at end of file +config.toml \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 5fb1065c..00000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,138 +0,0 @@ -# DESCRIPTION: GitLab CI/CD for libRetro (NOT FOR GitLab-proper) - -############################################################################## -################################# BOILERPLATE ################################ -############################################################################## - -# Core definitions -.core-defs: - variables: - GIT_SUBMODULE_STRATEGY: recursive - CORENAME: panda3ds - BASE_CORE_ARGS: -DBUILD_LIBRETRO_CORE=ON -DENABLE_USER_BUILD=ON -DENABLE_VULKAN=OFF -DENABLE_LUAJIT=OFF -DENABLE_DISCORD_RPC=OFF -DENABLE_METAL=OFF - CORE_ARGS: ${BASE_CORE_ARGS} - -# Inclusion templates, required for the build to work - -include: - ################################## DESKTOPS ################################ - # Linux - - project: 'libretro-infrastructure/ci-templates' - file: '/linux-cmake.yml' - - # Windows - - project: 'libretro-infrastructure/ci-templates' - file: '/windows-cmake-mingw.yml' - - # MacOS - - project: 'libretro-infrastructure/ci-templates' - file: 'osx-cmake-x86.yml' - - # MacOS - - project: 'libretro-infrastructure/ci-templates' - file: 'osx-cmake-arm64.yml' - - ################################## CELLULAR ################################ - # Android - - project: 'libretro-infrastructure/ci-templates' - file: '/android-cmake.yml' - - # iOS - - project: 'libretro-infrastructure/ci-templates' - file: '/ios-cmake.yml' - -# Stages for building -stages: - - build-prepare - - build-static - - build-shared - -############################################################################## -#################################### STAGES ################################## -############################################################################## -# -################################### DESKTOPS ################################# -# Linux 64-bit -libretro-build-linux-x64: - image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-amd64-ubuntu:latest - before_script: - - export NUMPROC=$(($(nproc)/5)) - - sudo apt-get update -qy - - sudo apt-get install -qy software-properties-common - - sudo add-apt-repository -y ppa:savoury1/build-tools - - sudo add-apt-repository -y ppa:savoury1/gcc-defaults-12 - - sudo apt-get update -qy - - sudo apt-get install -qy cmake gcc-12 g++-12 - variables: - CC: /usr/bin/gcc-12 - CXX: /usr/bin/g++-12 - extends: - - .libretro-linux-cmake-x86_64 - - .core-defs - -# Windows 64-bit -libretro-build-windows-x64: - extends: - - .libretro-windows-cmake-x86_64 - - .core-defs - -# MacOS 64-bit -libretro-build-osx-x64: - tags: - - mac-apple-silicon - variables: - CORE_ARGS: ${BASE_CORE_ARGS} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCRYPTOPP_AMD64=1 - extends: - - .libretro-osx-cmake-x86 - - .core-defs - -# MacOS arm 64-bit -libretro-build-osx-arm64: - tags: - - mac-apple-silicon - extends: - - .libretro-osx-cmake-arm64 - - .core-defs - -################################### CELLULAR ################################# -# Android ARMv7a -#android-armeabi-v7a: -# extends: -# - .libretro-android-cmake-armeabi-v7a -# - .core-defs - -# Android ARMv8a -android-arm64-v8a: - extends: - - .libretro-android-cmake-arm64-v8a - - .core-defs - before_script: - - export NUMPROC=$(($(nproc)/5)) - - export ANDROID_NDK_VERSION=26.2.11394342 - - export NDK_ROOT=/android-sdk-linux/ndk/$ANDROID_NDK_VERSION - - /android-sdk-linux/cmdline-tools/latest/bin/sdkmanager "ndk;$ANDROID_NDK_VERSION" - - /android-sdk-linux/cmdline-tools/latest/bin/sdkmanager "cmake;3.30.3" - - export PATH=/android-sdk-linux/cmake/3.30.3/bin:$PATH - -# Android 64-bit x86 -# android-x86_64: -# extends: -# - .libretro-android-cmake-x86_64 -# - .core-defs - -# Android 32-bit x86 -# android-x86: -# extends: -# - .libretro-android-cmake-x86 -# - .core-defs - -# iOS -# libretro-build-ios-arm64: -# extends: -# - .libretro-ios-cmake-arm64 -# - .core-defs -# variables: -# CORE_ARGS: -DBUILD_LIBRETRO_CORE=ON -DBUILD_PLAY=OFF -DENABLE_AMAZON_S3=off -DBUILD_TESTS=OFF -DCMAKE_TOOLCHAIN_FILE=deps/Dependencies/cmake-ios/ios.cmake -DTARGET_IOS=ON -# LIBNAME: ${CORENAME}_libretro_ios.dylib - -################################### CONSOLES ################################# diff --git a/.gitmodules b/.gitmodules index c8ced6e4..af704c7d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,15 @@ [submodule "third_party/elfio"] path = third_party/elfio url = https://github.com/serge1/ELFIO +[submodule "third_party/dynarmic"] + path = third_party/dynarmic + url = https://github.com/merryhime/dynarmic +[submodule "third_party/SDL2"] + path = third_party/SDL2 + url = https://github.com/libsdl-org/SDL +[submodule "third_party/boost"] + path = third_party/boost + url = https://github.com/citra-emu/ext-boost [submodule "third_party/cryptopp/cryptopp"] path = third_party/cryptopp/cryptopp url = https://github.com/weidai11/cryptopp @@ -25,61 +34,3 @@ [submodule "third_party/discord-rpc"] path = third_party/discord-rpc url = https://github.com/Panda3DS-emu/discord-rpc -[submodule "third_party/LuaJIT"] - path = third_party/LuaJIT - url = https://github.com/Panda3DS-emu/LuaJIT -[submodule "third_party/mio"] - path = third_party/mio - url = https://github.com/vimpunk/mio -[submodule "third_party/hydra_core"] - path = third_party/hydra_core - url = https://github.com/hydra-emu/core -[submodule "third_party/zep"] - path = third_party/zep - url = https://github.com/Panda3DS-emu/zep -[submodule "third_party/luv"] - path = third_party/luv - url = https://github.com/luvit/luv -[submodule "third_party/libuv"] - path = third_party/libuv - url = https://github.com/libuv/libuv -[submodule "third_party/miniaudio"] - path = third_party/miniaudio - url = https://github.com/mackron/miniaudio -[submodule "third_party/teakra"] - path = third_party/teakra - url = https://github.com/wwylele/teakra -[submodule "third_party/boost"] - path = third_party/boost - url = https://github.com/Panda3DS-emu/ext-boost -[submodule "third_party/dynarmic"] - path = third_party/dynarmic - url = https://github.com/Panda3DS-emu/dynarmic -[submodule "third_party/nihstro"] - path = third_party/nihstro - url = https://github.com/neobrain/nihstro.git -[submodule "third_party/Catch2"] - path = third_party/Catch2 - url = https://github.com/catchorg/Catch2.git -[submodule "third_party/capstone"] - path = third_party/capstone - url = https://github.com/capstone-engine/capstone -[submodule "third_party/hips"] - path = third_party/hips - url = https://github.com/wheremyfoodat/Hips -[submodule "third_party/metal-cpp"] - path = third_party/metal-cpp - url = https://github.com/Panda3DS-emu/metal-cpp -[submodule "third_party/fmt"] - path = third_party/fmt - url = https://github.com/fmtlib/fmt -[submodule "third_party/fdk-aac"] - path = third_party/fdk-aac - url = https://github.com/Panda3DS-emu/fdk-aac/ -[submodule "third_party/oaknut"] - path = third_party/oaknut - url = https://github.com/panda3ds-emu/oaknut -[submodule "third_party/SDL2"] - path = third_party/SDL2 - url = https://github.com/libsdl-org/SDL - branch = SDL2 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e8e9428..d0ac2804 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,9 @@ -# We need to be able to use enable_language(OBJC) on Mac, so we need CMake 3.16 vs the 3.11 we use otherwise. Blame Apple. +# We need to be able to use enable_language(OBJC) on Mac, so we need CMake 3.16 vs the 3.10 we use otherwise. Blame Apple. if (APPLE) set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version") cmake_minimum_required(VERSION 3.16) else() - cmake_minimum_required(VERSION 3.11) + cmake_minimum_required(VERSION 3.10) endif() set(CMAKE_CXX_STANDARD 20) @@ -19,175 +19,57 @@ endif() project(Alber) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") if(APPLE) enable_language(OBJC) endif() -# Enable RC support in order to use resource files for application icons -if(WIN32) - enable_language(RC) - set(APP_RESOURCES docs/img/windows_icon.rc) -endif() - if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format-nonliteral -Wno-format-security -Wno-invalid-offsetof") -endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format-nonliteral -Wno-format-security") +endif() -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-interference-size") -endif() - -if(ANDROID) - set(DEFAULT_OPENGL_PROFILE OpenGLES) -else() - set(DEFAULT_OPENGL_PROFILE OpenGL) -endif() - -option(DISABLE_PANIC_DEV "Make a build with fewer and less intrusive asserts" ON) +option(DISABLE_PANIC_DEV "Make a build with fewer and less intrusive asserts" OFF) option(GPU_DEBUG_INFO "Enable additional GPU debugging info" OFF) option(ENABLE_OPENGL "Enable OpenGL rendering backend" ON) option(ENABLE_VULKAN "Enable Vulkan rendering backend" ON) -option(ENABLE_METAL "Enable Metal rendering backend (if available)" ON) -option(ENABLE_WAYLAND "Enable Wayland support on Linux platforms" ON) option(ENABLE_LTO "Enable link-time optimization" OFF) -option(ENABLE_TESTS "Compile unit-tests" OFF) option(ENABLE_USER_BUILD "Make a user-facing build. These builds have various assertions disabled, LTO, and more" OFF) option(ENABLE_HTTP_SERVER "Enable HTTP server. Used for Discord bot support" OFF) option(ENABLE_DISCORD_RPC "Compile with Discord RPC support (disabled by default)" ON) -option(ENABLE_LUAJIT "Enable scripting with the Lua programming language" ON) -option(ENABLE_QT_GUI "Enable the Qt GUI. If not selected then the emulator uses a minimal SDL-based UI instead" OFF) -option(USE_SYSTEM_SDL2 "Use the system's SDL2 package" OFF) -option(ENABLE_GIT_VERSIONING "Enables querying git for the emulator version" ON) -option(BUILD_HYDRA_CORE "Build a Hydra core" OFF) -option(BUILD_LIBRETRO_CORE "Build a Libretro core" OFF) -option(ENABLE_RENDERDOC_API "Build with support for Renderdoc's capture API for graphics debugging" ON) -option(DISABLE_SSE4 "Build with SSE4 instructions disabled, may reduce performance" OFF) -option(USE_LIBRETRO_AUDIO "Enable to use the LR audio device with the LR core. Otherwise our own device is used" OFF) -option(IOS_SIMULATOR_BUILD "Compiling for IOS simulator (Set to off if compiling for a real iPhone)" ON) - -# Discord RPC & LuaJIT are currently not supported on iOS -if(IOS) - set(ENABLE_DISCORD_RPC OFF) - set(ENABLE_LUAJIT OFF) -endif() - -set(OPENGL_PROFILE ${DEFAULT_OPENGL_PROFILE} CACHE STRING "OpenGL profile to use if OpenGL is enabled. Valid values are 'OpenGL' and 'OpenGLES'.") -set_property(CACHE OPENGL_PROFILE PROPERTY STRINGS OpenGL OpenGLES) - -if(ENABLE_OPENGL AND (OPENGL_PROFILE STREQUAL "OpenGLES")) - message(STATUS "Building with OpenGLES support") - add_compile_definitions(USING_GLES) -endif() - -if(BUILD_HYDRA_CORE) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() - -if(BUILD_LIBRETRO_CORE) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - add_compile_definitions(__LIBRETRO__) - - if(USE_LIBRETRO_AUDIO) - add_compile_definitions(USE_LIBRETRO_AUDIO_DEVICE) - endif() -endif() - -if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND ENABLE_USER_BUILD) - # Disable stack buffer overflow checks in user builds - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS-") -endif() - -# Generate versioning files -find_package(Git) -set(PANDA3DS_VERSION "0.9") - -if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/version.hpp.in) - file(WRITE ${CMAKE_BINARY_DIR}/include/version.hpp.in "#define PANDA3DS_VERSION \"\${PANDA3DS_VERSION}\"") -endif() - -if(GIT_FOUND AND ENABLE_GIT_VERSIONING) - execute_process( - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0 - OUTPUT_VARIABLE git_version_tag OUTPUT_STRIP_TRAILING_WHITESPACE - ) - execute_process( - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD - OUTPUT_VARIABLE git_version_rev OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(NOT git_version_tag STREQUAL "") - set(PANDA3DS_VERSION "${git_version_tag}") - execute_process( - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --tags - OUTPUT_VARIABLE git_version_desc OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(git_version_tag STREQUAL git_version_desc) - set(git_version_rev "") - endif() - unset(git_version_desc) - endif() - if(NOT git_version_rev STREQUAL "") - set(PANDA3DS_VERSION "${PANDA3DS_VERSION}.${git_version_rev}") - endif() - string(REGEX REPLACE "^v" "" PANDA3DS_VERSION "${PANDA3DS_VERSION}") - unset(git_version_tag) - unset(git_version_rev) -endif() -configure_file(${CMAKE_BINARY_DIR}/include/version.hpp.in ${CMAKE_BINARY_DIR}/include/version.hpp) -include_directories(${CMAKE_BINARY_DIR}/include/) - -add_library(AlberCore STATIC) include_directories(${PROJECT_SOURCE_DIR}/include/) include_directories(${PROJECT_SOURCE_DIR}/include/kernel) -include_directories(${FMT_INCLUDE_DIR}) +include_directories (${FMT_INCLUDE_DIR}) include_directories(third_party/boost/) include_directories(third_party/elfio/) -include_directories(third_party/hips/include/) include_directories(third_party/imgui/) include_directories(third_party/dynarmic/src) +include_directories(third_party/cryptopp/) include_directories(third_party/cityhash/include) include_directories(third_party/result/include) include_directories(third_party/xxhash/include) include_directories(third_party/httplib) include_directories(third_party/stb) include_directories(third_party/opengl) -include_directories(third_party/miniaudio) -include_directories(third_party/mio/single_include) add_compile_definitions(NOMINMAX) # Make windows.h not define min/max macros because third-party deps don't like it add_compile_definitions(WIN32_LEAN_AND_MEAN) # Make windows.h not include literally everything add_compile_definitions(SDL_MAIN_HANDLED) -if(ENABLE_WAYLAND) - add_compile_definitions(WAYLAND_ENABLED) -endif() - if(ENABLE_DISCORD_RPC AND NOT ANDROID) add_subdirectory(third_party/discord-rpc) include_directories(third_party/discord-rpc/include) endif() -if (NOT ANDROID) - if (USE_SYSTEM_SDL2) - find_package(SDL2 CONFIG REQUIRED) - target_link_libraries(AlberCore PUBLIC SDL2::SDL2) - else() - set(SDL_STATIC ON CACHE BOOL "" FORCE) - set(SDL_SHARED OFF CACHE BOOL "" FORCE) - set(SDL_TEST OFF CACHE BOOL "" FORCE) - add_subdirectory(third_party/SDL2) - target_link_libraries(AlberCore PUBLIC SDL2-static) - endif() -endif() +set(SDL_STATIC ON CACHE BOOL "" FORCE) +set(SDL_SHARED OFF CACHE BOOL "" FORCE) +set(SDL_TEST OFF CACHE BOOL "" FORCE) +add_subdirectory(third_party/SDL2) -add_subdirectory(third_party/fmt) add_subdirectory(third_party/toml11) +include_directories(${SDL2_INCLUDE_DIR}) include_directories(third_party/toml11) include_directories(third_party/glm) -include_directories(third_party/renderdoc) -include_directories(third_party/duckstation) add_subdirectory(third_party/cmrc) @@ -199,109 +81,27 @@ add_compile_definitions(BOOST_NO_CXX98_FUNCTION_BASE) # Forbid Boost from using add_library(boost INTERFACE) target_include_directories(boost SYSTEM INTERFACE ${Boost_INCLUDE_DIR}) -if(ANDROID) - set(CRYPTOPP_OPT_DISABLE_ASM ON CACHE BOOL "" FORCE) - target_sources(AlberCore PRIVATE src/jni_driver.cpp) - target_link_libraries(AlberCore PRIVATE EGL log) -endif() - +set(CRYPTOPP_BUILD_TESTING OFF) +add_subdirectory(third_party/cryptopp) add_subdirectory(third_party/glad) -# Cryptopp doesn't support compiling under clang-cl, so we have to include it as a prebuilt MSVC static library -if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND MSVC) - add_subdirectory(third_party/cryptoppwin) - include_directories(third_party/cryptoppwin/include) - target_link_libraries(AlberCore PRIVATE cryptoppwin) - - # Also silence some of clang-cl's more... intrusive warnings - set(WARNING_FLAGS "/W1 -Wno-unused-function -Wno-unused-but-set-variable -Wno-reorder-ctor") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}") -else() - set(CRYPTOPP_BUILD_TESTING OFF) - - add_subdirectory(third_party/cryptopp) - include_directories(third_party/cryptopp) - target_link_libraries(AlberCore PRIVATE cryptopp) -endif() - -if(ENABLE_LUAJIT) - add_subdirectory(third_party/LuaJIT luajit) - include_directories(third_party/LuaJIT/src ${CMAKE_BINARY_DIR}/luajit) - set_target_properties(luajit PROPERTIES EXCLUDE_FROM_ALL 1) - - if(MSVC) - target_compile_definitions(libluajit PRIVATE _CRT_SECURE_NO_WARNINGS) - target_compile_definitions(minilua PRIVATE _CRT_SECURE_NO_WARNINGS) - target_compile_definitions(buildvm PRIVATE _CRT_SECURE_NO_WARNINGS) - endif() - - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_LUA=1") - target_link_libraries(AlberCore PRIVATE libluajit) -endif() - -# Detect target architecture -if (NOT APPLE OR "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "") - # Normal target detection - if (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86-64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +# Check for x64 +if (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86-64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") set(HOST_X64 TRUE) - else() - set(HOST_X64 FALSE) - endif() - - if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") - set(HOST_ARM64 TRUE) - else() - set(HOST_ARM64 FALSE) - endif() -else() - # Apple target detection - if("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES) - set(HOST_X64 TRUE) - else() - set(HOST_X64 FALSE) - endif() - - if("arm64" IN_LIST CMAKE_OSX_ARCHITECTURES) - set(HOST_ARM64 TRUE) - else() - set(HOST_ARM64 FALSE) - endif() - - if (HOST_ARM64 AND HOST_X64) - message(FATAL_ERROR "Universal builds not supported like this! Please compile separately and stitch together") - endif() -endif() - -if (HOST_X64) add_subdirectory(third_party/xbyak) # Add xbyak submodule for x86 JITs include_directories(third_party/xbyak) add_compile_definitions(PANDA3DS_DYNAPICA_SUPPORTED) add_compile_definitions(PANDA3DS_X64_HOST) +else() + set(HOST_X64 FALSE) endif() -if (HOST_ARM64) - add_subdirectory(third_party/oaknut) # Add Oaknut submodule for arm64 JITs - include_directories(third_party/oaknut/include) - add_compile_definitions(PANDA3DS_DYNAPICA_SUPPORTED) +# Check for arm64 +if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") + set(HOST_ARM64 TRUE) add_compile_definitions(PANDA3DS_ARM64_HOST) -endif() - -# Enable SSE4.1 if it's not explicitly disabled -# Annoyingly, we can't easily do this if we're using MSVC cause there's no SSE4.1 flag, only SSE4.1 -if(NOT MSVC OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT DISABLE_SSE4 AND HOST_X64) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1") -elseif(MSVC AND NOT DISABLE_SSE4) - # Tell our SIMD code to use SSE4.1 by defining the relevant macros. - # Clang defines these macros, MSVC does not. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D__SSE3__ /D__SSE4_1__") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D__SSE3__ /D__SSE4_1__") -endif() - -if(ENABLE_RENDERDOC_API) - find_package(RenderDoc 1.6.0 MODULE REQUIRED) - add_compile_definitions(PANDA3DS_ENABLE_RENDERDOC) +else() + set(HOST_ARM64 FALSE) endif() if(HOST_X64 OR HOST_ARM64) @@ -314,21 +114,11 @@ else() message(FATAL_ERROR "Currently unsupported CPU architecture") endif() -add_subdirectory(third_party/teakra) -add_subdirectory(third_party/fdk-aac) - -set(CAPSTONE_ARCHITECTURE_DEFAULT OFF) -set(CAPSTONE_ARM_SUPPORT ON) -set(CAPSTONE_BUILD_MACOS_THIN ON) -add_subdirectory(third_party/capstone) -include_directories(third_party/capstone/include) - -set(SOURCE_FILES src/emulator.cpp src/io_file.cpp src/config.cpp - src/core/CPU/cpu_dynarmic.cpp src/core/CPU/dynarmic_cycles.cpp - src/core/memory.cpp src/renderer.cpp src/core/renderer_null/renderer_null.cpp - src/http_server.cpp src/stb_image_write.c src/core/cheats.cpp src/core/action_replay.cpp - src/discord_rpc.cpp src/lua.cpp src/memory_mapped_file.cpp src/renderdoc.cpp - src/frontend_settings.cpp src/miniaudio/miniaudio.cpp src/core/screen_layout.cpp +set(SOURCE_FILES src/main.cpp src/emulator.cpp src/io_file.cpp src/config.cpp + src/core/CPU/cpu_dynarmic.cpp src/core/CPU/dynarmic_cycles.cpp + src/core/memory.cpp src/renderer.cpp src/core/renderer_null/renderer_null.cpp + src/http_server.cpp src/stb_image_write.c src/core/cheats.cpp src/core/action_replay.cpp + src/discord_rpc.cpp ) set(CRYPTO_SOURCE_FILES src/core/crypto/aes_engine.cpp) set(KERNEL_SOURCE_FILES src/core/kernel/kernel.cpp src/core/kernel/resource_limits.cpp @@ -346,35 +136,24 @@ set(SERVICE_SOURCE_FILES src/core/services/service_manager.cpp src/core/services src/core/services/frd.cpp src/core/services/nim.cpp src/core/services/mcu/mcu_hwc.cpp src/core/services/y2r.cpp src/core/services/cam.cpp src/core/services/ldr_ro.cpp src/core/services/act.cpp src/core/services/nfc.cpp src/core/services/dlp_srvr.cpp - src/core/services/ir/ir_user.cpp src/core/services/http.cpp src/core/services/soc.cpp - src/core/services/ssl.cpp src/core/services/news_u.cpp src/core/services/amiibo_device.cpp - src/core/services/csnd.cpp src/core/services/nwm_uds.cpp src/core/services/fonts.cpp - src/core/services/ns.cpp src/core/services/ir/circlepad_pro.cpp src/core/services/ir/crc8.cpp + src/core/services/ir_user.cpp src/core/services/http.cpp src/core/services/soc.cpp + src/core/services/ssl.cpp src/core/services/news_u.cpp ) set(PICA_SOURCE_FILES src/core/PICA/gpu.cpp src/core/PICA/regs.cpp src/core/PICA/shader_unit.cpp src/core/PICA/shader_interpreter.cpp src/core/PICA/dynapica/shader_rec.cpp src/core/PICA/dynapica/shader_rec_emitter_x64.cpp src/core/PICA/pica_hash.cpp - src/core/PICA/dynapica/shader_rec_emitter_arm64.cpp src/core/PICA/shader_gen_glsl.cpp - src/core/PICA/shader_decompiler.cpp src/core/PICA/draw_acceleration.cpp ) set(LOADER_SOURCE_FILES src/core/loader/elf.cpp src/core/loader/ncsd.cpp src/core/loader/ncch.cpp src/core/loader/3dsx.cpp src/core/loader/lz77.cpp) set(FS_SOURCE_FILES src/core/fs/archive_self_ncch.cpp src/core/fs/archive_save_data.cpp src/core/fs/archive_sdmc.cpp src/core/fs/archive_ext_save_data.cpp src/core/fs/archive_ncch.cpp src/core/fs/romfs.cpp - src/core/fs/ivfc.cpp src/core/fs/archive_user_save_data.cpp src/core/fs/archive_system_save_data.cpp - src/core/fs/archive_twl_photo.cpp src/core/fs/archive_twl_sound.cpp src/core/fs/archive_card_spi.cpp + src/core/fs/ivfc.cpp src/core/fs/archive_user_save_data.cpp ) -set(APPLET_SOURCE_FILES src/core/applets/applet.cpp src/core/applets/mii_selector.cpp src/core/applets/software_keyboard.cpp src/core/applets/applet_manager.cpp - src/core/applets/error_applet.cpp -) -set(AUDIO_SOURCE_FILES src/core/audio/dsp_core.cpp src/core/audio/null_core.cpp src/core/audio/teakra_core.cpp - src/core/audio/miniaudio_device.cpp src/core/audio/hle_core.cpp src/core/audio/aac_decoder.cpp - src/core/audio/audio_interpolation.cpp -) +set(APPLET_SOURCE_FILES src/core/applets/applet.cpp src/core/applets/mii_selector.cpp src/core/applets/software_keyboard.cpp src/core/applets/applet_manager.cpp) set(RENDERER_SW_SOURCE_FILES src/core/renderer_sw/renderer_sw.cpp) -set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/input_mappings.hpp +set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/cpu.hpp include/cpu_dynarmic.hpp include/memory.hpp include/renderer.hpp include/kernel/kernel.hpp include/dynarmic_cp15.hpp include/kernel/resource_limits.hpp include/kernel/kernel_types.hpp include/kernel/config_mem.hpp include/services/service_manager.hpp include/services/apt.hpp @@ -389,7 +168,7 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/services/mic.hpp include/services/cecd.hpp include/services/ac.hpp include/services/am.hpp include/services/boss.hpp include/services/frd.hpp include/services/nim.hpp include/fs/archive_ext_save_data.hpp include/fs/archive_ncch.hpp include/services/mcu/mcu_hwc.hpp - include/colour.hpp include/services/y2r.hpp include/services/cam.hpp include/services/ssl.hpp + include/colour.hpp include/services/y2r.hpp include/services/cam.hpp include/services/ssl.hpp include/services/ldr_ro.hpp include/ipc.hpp include/services/act.hpp include/services/nfc.hpp include/system_models.hpp include/services/dlp_srvr.hpp include/PICA/dynapica/pica_recs.hpp include/PICA/dynapica/x64_regs.hpp include/PICA/dynapica/vertex_loader_rec.hpp include/PICA/dynapica/shader_rec.hpp @@ -397,42 +176,18 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/result/result_common.hpp include/result/result_fs.hpp include/result/result_fnd.hpp include/result/result_gsp.hpp include/result/result_kernel.hpp include/result/result_os.hpp include/crypto/aes_engine.hpp include/metaprogramming.hpp include/PICA/pica_vertex.hpp - include/config.hpp include/services/ir/ir_user.hpp include/http_server.hpp include/cheats.hpp + include/config.hpp include/services/ir_user.hpp include/http_server.hpp include/cheats.hpp include/action_replay.hpp include/renderer_sw/renderer_sw.hpp include/compiler_builtins.hpp include/fs/romfs.hpp include/fs/ivfc.hpp include/discord_rpc.hpp include/services/http.hpp include/result/result_cfg.hpp - include/applets/applet.hpp include/applets/mii_selector.hpp include/math_util.hpp include/services/soc.hpp + include/applets/applet.hpp include/applets/mii_selector.hpp include/math_util.hpp include/services/soc.hpp include/services/news_u.hpp include/applets/software_keyboard.hpp include/applets/applet_manager.hpp include/fs/archive_user_save_data.hpp - include/services/amiibo_device.hpp include/services/nfc_types.hpp include/swap.hpp include/services/csnd.hpp include/services/nwm_uds.hpp - include/fs/archive_system_save_data.hpp include/lua_manager.hpp include/memory_mapped_file.hpp include/hydra_icon.hpp - include/PICA/dynapica/shader_rec_emitter_arm64.hpp include/scheduler.hpp include/applets/error_applet.hpp include/PICA/shader_gen.hpp - include/audio/dsp_core.hpp include/audio/null_core.hpp include/audio/teakra_core.hpp - include/audio/miniaudio_device.hpp include/ring_buffer.hpp include/bitfield.hpp include/audio/dsp_shared_mem.hpp - include/audio/hle_core.hpp include/capstone.hpp include/audio/aac.hpp include/PICA/pica_frag_config.hpp - include/PICA/pica_frag_uniforms.hpp include/PICA/shader_gen_types.hpp include/PICA/shader_decompiler.hpp - include/PICA/pica_vert_config.hpp include/sdl_sensors.hpp include/PICA/draw_acceleration.hpp include/renderdoc.hpp - include/align.hpp include/audio/aac_decoder.hpp include/PICA/pica_simd.hpp include/services/fonts.hpp - include/audio/audio_interpolation.hpp include/audio/hle_mixer.hpp include/audio/dsp_simd.hpp - include/services/dsp_firmware_db.hpp include/frontend_settings.hpp include/fs/archive_twl_photo.hpp - include/fs/archive_twl_sound.hpp include/fs/archive_card_spi.hpp include/services/ns.hpp include/audio/audio_device.hpp - include/audio/audio_device_interface.hpp include/audio/libretro_audio_device.hpp include/services/ir/ir_types.hpp - include/services/ir/ir_device.hpp include/services/ir/circlepad_pro.hpp include/services/service_intercept.hpp - include/screen_layout.hpp include/services/service_map.hpp include/audio/dsp_binary.hpp ) -if(IOS) - set(SOURCE_FILES ${SOURCE_FILES} src/miniaudio/miniaudio.m) - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_IOS=1") - - if (IOS_SIMULATOR_BUILD) - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_IOS_SIMULATOR=1") - endif() -endif() - cmrc_add_resource_library( - resources_console_fonts - NAMESPACE ConsoleFonts - WHENCE "src/core/services/fonts/" - "src/core/services/fonts/SharedFontReplacement.bin" + resources_console_fonts + NAMESPACE ConsoleFonts + WHENCE "src/core/services/fonts/" + "src/core/services/fonts/CitraSharedFontUSRelocated.bin" ) set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp @@ -444,38 +199,6 @@ set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp third_party/cityhash/cityhash.cpp third_party/xxhash/xxhash.c ) - -if(ENABLE_LUAJIT AND NOT ANDROID) - # Build luv and libuv for Lua TCP server usage if we're not on Android - include_directories(third_party/luv/src) - include_directories(third_party/luv/deps/lua-compat-5.3/c-api) - include_directories(third_party/libuv/include) - set(THIRD_PARTY_SOURCE_FILES ${THIRD_PARTY_SOURCE_FILES} third_party/luv/src/luv.c) - set(LIBUV_BUILD_SHARED OFF) - - add_subdirectory(third_party/libuv) - target_link_libraries(AlberCore PRIVATE uv_a) -endif() - -set(GL_CONTEXT_SOURCE_FILES "") - -if(ENABLE_QT_GUI) - set(GL_CONTEXT_SOURCE_FILES ${GL_CONTEXT_SOURCE_FILES} third_party/duckstation/window_info.cpp third_party/duckstation/gl/context.cpp) - - if(APPLE) - set(GL_CONTEXT_SOURCE_FILES ${GL_CONTEXT_SOURCE_FILES} third_party/duckstation/gl/context_agl.mm) - elseif(WIN32) - set(GL_CONTEXT_SOURCE_FILES ${GL_CONTEXT_SOURCE_FILES} third_party/duckstation/gl/context_wgl.cpp) - else() - set(GL_CONTEXT_SOURCE_FILES ${GL_CONTEXT_SOURCE_FILES} third_party/duckstation/gl/context_egl.cpp third_party/duckstation/gl/context_egl_x11.cpp - third_party/duckstation/gl/context_glx.cpp third_party/duckstation/gl/x11_window.cpp) - - if(ENABLE_WAYLAND) - set(GL_CONTEXT_SOURCE_FILES ${GL_CONTEXT_SOURCE_FILES} third_party/duckstation/gl/context_egl_wayland.cpp) - endif() - endif() -endif() - source_group("Source Files\\Core" FILES ${SOURCE_FILES}) source_group("Source Files\\Core\\Crypto" FILES ${CRYPTO_SOURCE_FILES}) source_group("Source Files\\Core\\Filesystem" FILES ${FS_SOURCE_FILES}) @@ -484,392 +207,152 @@ source_group("Source Files\\Core\\Loader" FILES ${LOADER_SOURCE_FILES}) source_group("Source Files\\Core\\Services" FILES ${SERVICE_SOURCE_FILES}) source_group("Source Files\\Core\\Applets" FILES ${APPLET_SOURCE_FILES}) source_group("Source Files\\Core\\PICA" FILES ${PICA_SOURCE_FILES}) -source_group("Source Files\\Core\\Audio" FILES ${AUDIO_SOURCE_FILES}) source_group("Source Files\\Core\\Software Renderer" FILES ${RENDERER_SW_SOURCE_FILES}) -source_group("Source Files\\Third Party" FILES ${THIRD_PARTY_SOURCE_FILES} ${GL_CONTEXT_SOURCE_FILES}) +source_group("Source Files\\Third Party" FILES ${THIRD_PARTY_SOURCE_FILES}) set(RENDERER_GL_SOURCE_FILES "") # Empty by default unless we are compiling with the GL renderer set(RENDERER_VK_SOURCE_FILES "") # Empty by default unless we are compiling with the VK renderer if(ENABLE_OPENGL) # This may look weird but opengl.hpp is our header even if it's in the third_party folder - set(RENDERER_GL_INCLUDE_FILES third_party/opengl/opengl.hpp - include/renderer_gl/renderer_gl.hpp include/renderer_gl/textures.hpp - include/renderer_gl/surfaces.hpp include/renderer_gl/surface_cache.hpp - include/renderer_gl/gl_state.hpp include/renderer_gl/gl_driver.hpp - ) + set(RENDERER_GL_INCLUDE_FILES third_party/opengl/opengl.hpp + include/renderer_gl/renderer_gl.hpp include/renderer_gl/textures.hpp + include/renderer_gl/surfaces.hpp include/renderer_gl/surface_cache.hpp + include/renderer_gl/gl_state.hpp + ) - set(RENDERER_GL_SOURCE_FILES src/core/renderer_gl/renderer_gl.cpp + set(RENDERER_GL_SOURCE_FILES src/core/renderer_gl/renderer_gl.cpp src/core/renderer_gl/textures.cpp src/core/renderer_gl/etc1.cpp - src/core/renderer_gl/gl_state.cpp src/host_shaders/opengl_display.vert - src/host_shaders/opengl_display.frag src/host_shaders/opengl_es_display.vert - src/host_shaders/opengl_es_display.frag src/host_shaders/opengl_vertex_shader.vert + src/core/renderer_gl/gl_state.cpp src/host_shaders/opengl_display.frag + src/host_shaders/opengl_display.vert src/host_shaders/opengl_vertex_shader.vert src/host_shaders/opengl_fragment_shader.frag - ) - - set(THIRD_PARTY_SOURCE_FILES ${THIRD_PARTY_SOURCE_FILES} third_party/duckstation/gl/stream_buffer.cpp) + ) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_GL_INCLUDE_FILES}) source_group("Source Files\\Core\\OpenGL Renderer" FILES ${RENDERER_GL_SOURCE_FILES}) - cmrc_add_resource_library( - resources_renderer_gl - NAMESPACE RendererGL - WHENCE "src/host_shaders/" - "src/host_shaders/opengl_display.vert" - "src/host_shaders/opengl_display.frag" - "src/host_shaders/opengl_es_display.vert" - "src/host_shaders/opengl_es_display.frag" - "src/host_shaders/opengl_vertex_shader.vert" - "src/host_shaders/opengl_fragment_shader.frag" - ) - - target_sources(AlberCore PRIVATE ${RENDERER_GL_SOURCE_FILES}) - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_OPENGL=1") - target_link_libraries(AlberCore PRIVATE resources_renderer_gl) + cmrc_add_resource_library( + resources_renderer_gl + NAMESPACE RendererGL + WHENCE "src/host_shaders/" + "src/host_shaders/opengl_display.frag" + "src/host_shaders/opengl_display.vert" + "src/host_shaders/opengl_vertex_shader.vert" + "src/host_shaders/opengl_fragment_shader.frag" + ) endif() if(ENABLE_VULKAN) - find_package( - Vulkan REQUIRED - COMPONENTS glslang - ) + find_package( + Vulkan 1.3.206 REQUIRED + COMPONENTS glslangValidator + ) - set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp - include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp - include/renderer_vk/vk_descriptor_heap.hpp - include/renderer_vk/vk_descriptor_update_batch.hpp - include/renderer_vk/vk_sampler_cache.hpp - include/renderer_vk/vk_memory.hpp include/renderer_vk/vk_pica.hpp - ) + set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp + include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp + include/renderer_vk/vk_descriptor_heap.hpp + include/renderer_vk/vk_descriptor_update_batch.hpp + include/renderer_vk/vk_sampler_cache.hpp + include/renderer_vk/vk_memory.hpp include/renderer_vk/vk_pica.hpp + ) - set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp - src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp - src/core/renderer_vk/vk_descriptor_heap.cpp - src/core/renderer_vk/vk_descriptor_update_batch.cpp - src/core/renderer_vk/vk_sampler_cache.cpp - src/core/renderer_vk/vk_memory.cpp src/core/renderer_vk/vk_pica.cpp - ) + set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp + src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp + src/core/renderer_vk/vk_descriptor_heap.cpp + src/core/renderer_vk/vk_descriptor_update_batch.cpp + src/core/renderer_vk/vk_sampler_cache.cpp + src/core/renderer_vk/vk_memory.cpp src/core/renderer_vk/vk_pica.cpp + ) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES}) source_group("Source Files\\Core\\Vulkan Renderer" FILES ${RENDERER_VK_SOURCE_FILES}) - set(RENDERER_VK_HOST_SHADERS_SOURCE - "src/host_shaders/vulkan_display.frag" - "src/host_shaders/vulkan_display.vert" - ) - set(RENDERER_VK_HOST_SHADERS_FLAGS -e main --target-env vulkan1.1) + set(RENDERER_VK_HOST_SHADERS_SOURCE + "src/host_shaders/vulkan_display.frag" + "src/host_shaders/vulkan_display.vert" + ) + + + set( RENDERER_VK_HOST_SHADERS_FLAGS -e main --target-env vulkan1.1) if(GPU_DEBUG_INFO) # generate nonsemantic shader debug information with source - set(RENDERER_VK_HOST_SHADERS_FLAGS ${RENDERER_VK_HOST_SHADERS_FLAGS} -gVS) + set( RENDERER_VK_HOST_SHADERS_FLAGS ${RENDERER_VK_HOST_SHADERS_FLAGS} -gVS) else() - set(RENDERER_VK_HOST_SHADERS_FLAGS ${RENDERER_VK_HOST_SHADERS_FLAGS} -g0) + set( RENDERER_VK_HOST_SHADERS_FLAGS ${RENDERER_VK_HOST_SHADERS_FLAGS} -g0) endif() # Compile each vulkan shader into an .spv file foreach( HOST_SHADER_SOURCE ${RENDERER_VK_HOST_SHADERS_SOURCE} ) - get_filename_component( FILE_NAME ${HOST_SHADER_SOURCE} NAME ) - set( HOST_SHADER_SPIRV "${PROJECT_BINARY_DIR}/host_shaders/${FILE_NAME}.spv" ) - add_custom_command( - OUTPUT ${HOST_SHADER_SPIRV} - COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/host_shaders/" - COMMAND glslang ${RENDERER_VK_HOST_SHADERS_FLAGS} -V "${PROJECT_SOURCE_DIR}/${HOST_SHADER_SOURCE}" -o ${HOST_SHADER_SPIRV} - DEPENDS ${HOST_SHADER_SOURCE} - ) - list( APPEND RENDERER_VK_HOST_SHADERS_SPIRV ${HOST_SHADER_SPIRV} ) + get_filename_component( FILE_NAME ${HOST_SHADER_SOURCE} NAME ) + set( HOST_SHADER_SPIRV "${PROJECT_BINARY_DIR}/host_shaders/${FILE_NAME}.spv" ) + add_custom_command( + OUTPUT ${HOST_SHADER_SPIRV} + COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/host_shaders/" + COMMAND Vulkan::glslangValidator ${RENDERER_VK_HOST_SHADERS_FLAGS} -V "${PROJECT_SOURCE_DIR}/${HOST_SHADER_SOURCE}" -o ${HOST_SHADER_SPIRV} + DEPENDS ${HOST_SHADER_SOURCE} + ) + list( APPEND RENDERER_VK_HOST_SHADERS_SPIRV ${HOST_SHADER_SPIRV} ) endforeach() - cmrc_add_resource_library( - resources_renderer_vk - NAMESPACE RendererVK - WHENCE "${PROJECT_BINARY_DIR}/host_shaders/" - ${RENDERER_VK_HOST_SHADERS_SPIRV} - ) - - target_sources(AlberCore PRIVATE ${RENDERER_VK_SOURCE_FILES}) - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_VULKAN=1") - target_link_libraries(AlberCore PRIVATE Vulkan::Vulkan resources_renderer_vk) -endif() - -if(ENABLE_METAL AND APPLE) - set(RENDERER_MTL_INCLUDE_FILES include/renderer_mtl/renderer_mtl.hpp - include/renderer_mtl/mtl_depth_stencil_cache.hpp - include/renderer_mtl/mtl_blit_pipeline_cache.hpp - include/renderer_mtl/mtl_draw_pipeline_cache.hpp - include/renderer_mtl/mtl_render_target.hpp - include/renderer_mtl/mtl_texture.hpp - include/renderer_mtl/mtl_vertex_buffer_cache.hpp - include/renderer_mtl/mtl_lut_texture.hpp - include/renderer_mtl/mtl_command_encoder.hpp - include/renderer_mtl/mtl_common.hpp - include/renderer_mtl/pica_to_mtl.hpp - include/renderer_mtl/objc_helper.hpp - include/renderer_mtl/texture_decoder.hpp - ) - - set(RENDERER_MTL_SOURCE_FILES src/core/renderer_mtl/metal_cpp_impl.cpp - src/core/renderer_mtl/renderer_mtl.cpp - src/core/renderer_mtl/mtl_texture.cpp - src/core/renderer_mtl/mtl_lut_texture.cpp - src/core/renderer_mtl/pica_to_mtl.cpp - src/core/renderer_mtl/objc_helper.mm - src/core/renderer_mtl/texture_decoder.cpp - src/host_shaders/metal_shaders.metal - src/host_shaders/metal_blit.metal - #src/host_shaders/metal_copy_to_lut_texture.metal - ) - - set(HEADER_FILES ${HEADER_FILES} ${RENDERER_MTL_INCLUDE_FILES}) - source_group("Source Files\\Core\\Metal Renderer" FILES ${RENDERER_MTL_SOURCE_FILES}) - - set(RENDERER_MTL_HOST_SHADERS_SOURCES) - function (add_metal_shader SHADER) - set(SHADER_SOURCE "${CMAKE_SOURCE_DIR}/src/host_shaders/${SHADER}.metal") - set(SHADER_IR "${CMAKE_SOURCE_DIR}/src/host_shaders/${SHADER}.ir") - set(SHADER_METALLIB "${CMAKE_SOURCE_DIR}/src/host_shaders/${SHADER}.metallib") - - # MacOS, iOS and the iOS simulator all use different compilation options for shaders - set(MetalSDK "macosx") - if(IOS) - if (IOS_SIMULATOR_BUILD) - set(MetalSDK "iphonesimulator") - else() - set(MetalSDK "iphoneos") - endif() - endif() - - # TODO: only include sources in debug builds - add_custom_command( - OUTPUT ${SHADER_IR} - COMMAND xcrun -sdk ${MetalSDK} metal -gline-tables-only -frecord-sources -o ${SHADER_IR} -c ${SHADER_SOURCE} - DEPENDS ${SHADER_SOURCE} - VERBATIM) - add_custom_command( - OUTPUT ${SHADER_METALLIB} - COMMAND xcrun -sdk ${MetalSDK} metallib -o ${SHADER_METALLIB} ${SHADER_IR} - DEPENDS ${SHADER_IR} - VERBATIM) - set(RENDERER_MTL_HOST_SHADERS_SOURCES ${RENDERER_MTL_HOST_SHADERS_SOURCES} ${SHADER_METALLIB}) - endfunction() - - add_metal_shader(metal_shaders) - add_metal_shader(metal_blit) - #add_metal_shader(metal_copy_to_lut_texture) - - add_custom_target( - compile_msl_shaders - DEPENDS ${RENDERER_MTL_HOST_SHADERS_SOURCES} - ) - - cmrc_add_resource_library( - resources_renderer_mtl - NAMESPACE RendererMTL - WHENCE "src/host_shaders/" - "src/host_shaders/metal_shaders.metallib" - "src/host_shaders/metal_blit.metallib" - #"src/host_shaders/metal_copy_to_lut_texture.metallib" - ) - add_dependencies(resources_renderer_mtl compile_msl_shaders) - - target_sources(AlberCore PRIVATE ${RENDERER_MTL_SOURCE_FILES}) - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_METAL=1") - target_include_directories(AlberCore PUBLIC third_party/metal-cpp) - # TODO: check if all of them are needed - target_link_libraries(AlberCore PUBLIC "-framework Metal" "-framework Foundation" "-framework QuartzCore" resources_renderer_mtl) + cmrc_add_resource_library( + resources_renderer_vk + NAMESPACE RendererVK + WHENCE "${PROJECT_BINARY_DIR}/host_shaders/" + ${RENDERER_VK_HOST_SHADERS_SPIRV} + ) endif() source_group("Header Files\\Core" FILES ${HEADER_FILES}) -set(ALL_SOURCES ${SOURCE_FILES} ${FS_SOURCE_FILES} ${CRYPTO_SOURCE_FILES} ${KERNEL_SOURCE_FILES} - ${LOADER_SOURCE_FILES} ${SERVICE_SOURCE_FILES} ${APPLET_SOURCE_FILES} ${RENDERER_SW_SOURCE_FILES} ${PICA_SOURCE_FILES} ${THIRD_PARTY_SOURCE_FILES} - ${AUDIO_SOURCE_FILES} ${HEADER_FILES} ${FRONTEND_HEADER_FILES}) -target_sources(AlberCore PRIVATE ${ALL_SOURCES}) +set(ALL_SOURCES ${SOURCE_FILES} ${FS_SOURCE_FILES} ${CRYPTO_SOURCE_FILES} ${KERNEL_SOURCE_FILES} ${LOADER_SOURCE_FILES} ${SERVICE_SOURCE_FILES} + ${APPLET_SOURCE_FILES} ${RENDERER_SW_SOURCE_FILES} ${PICA_SOURCE_FILES} ${THIRD_PARTY_SOURCE_FILES} ${HEADER_FILES}) -target_link_libraries(AlberCore PRIVATE dynarmic glad resources_console_fonts fdk-aac) -target_link_libraries(AlberCore PUBLIC glad capstone fmt::fmt teakra) +if(ENABLE_OPENGL) + # Add the OpenGL source files to ALL_SOURCES + set(ALL_SOURCES ${ALL_SOURCES} ${RENDERER_GL_SOURCE_FILES}) +endif() + +if(ENABLE_VULKAN) + # Add the Vulkan source files to ALL_SOURCES + set(ALL_SOURCES ${ALL_SOURCES} ${RENDERER_VK_SOURCE_FILES}) +endif() + +add_executable(Alber ${ALL_SOURCES}) + +if(ENABLE_LTO OR ENABLE_USER_BUILD) + set_target_properties(Alber PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) +endif() + +target_link_libraries(Alber PRIVATE dynarmic SDL2-static cryptopp glad resources_console_fonts) if(ENABLE_DISCORD_RPC AND NOT ANDROID) - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_DISCORD_RPC=1") - target_link_libraries(AlberCore PRIVATE discord-rpc) + target_compile_definitions(Alber PUBLIC "PANDA3DS_ENABLE_DISCORD_RPC=1") + target_link_libraries(Alber PRIVATE discord-rpc) +endif() + +if(ENABLE_OPENGL) + target_compile_definitions(Alber PUBLIC "PANDA3DS_ENABLE_OPENGL=1") + target_link_libraries(Alber PRIVATE resources_renderer_gl) +endif() + +if(ENABLE_VULKAN) + target_compile_definitions(Alber PUBLIC "PANDA3DS_ENABLE_VULKAN=1") + target_link_libraries(Alber PRIVATE Vulkan::Vulkan resources_renderer_vk) endif() if(GPU_DEBUG_INFO) - target_compile_definitions(AlberCore PRIVATE GPU_DEBUG_INFO=1) + target_compile_definitions(Alber PRIVATE GPU_DEBUG_INFO=1) endif() if(ENABLE_USER_BUILD) - target_compile_definitions(AlberCore PRIVATE PANDA3DS_USER_BUILD=1) + target_compile_definitions(Alber PRIVATE PANDA3DS_USER_BUILD=1) endif() if(ENABLE_USER_BUILD OR DISABLE_PANIC_DEV) - target_compile_definitions(AlberCore PRIVATE PANDA3DS_LIMITED_PANICS=1) + target_compile_definitions(Alber PRIVATE PANDA3DS_LIMITED_PANICS=1) endif() if(ENABLE_HTTP_SERVER) - target_compile_definitions(AlberCore PRIVATE PANDA3DS_ENABLE_HTTP_SERVER=1) -endif() - -# Configure frontend - -if(ENABLE_QT_GUI) - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_FRONTEND_QT=1") -else() - target_compile_definitions(AlberCore PUBLIC "PANDA3DS_FRONTEND_SDL=1") -endif() - -if(NOT BUILD_HYDRA_CORE AND NOT BUILD_LIBRETRO_CORE) - add_executable(Alber) - - if(ENABLE_QT_GUI) - find_package(Qt6 REQUIRED COMPONENTS Widgets LinguistTools) - if(NOT ENABLE_OPENGL) - message(FATAL_ERROR "Qt frontend requires OpenGL") - endif() - - option(GENERATE_QT_TRANSLATION "Generate Qt translation file" OFF) - set(QT_LANGUAGES docs/translations) - - set(FRONTEND_SOURCE_FILES src/panda_qt/main.cpp src/panda_qt/main_window.cpp src/panda_qt/about_window.cpp - src/panda_qt/config_window.cpp src/panda_qt/zep.cpp src/panda_qt/text_editor.cpp src/panda_qt/cheats_window.cpp src/panda_qt/mappings.cpp - src/panda_qt/patch_window.cpp src/panda_qt/elided_label.cpp src/panda_qt/shader_editor.cpp src/panda_qt/translations.cpp - src/panda_qt/thread_debugger.cpp src/panda_qt/cpu_debugger.cpp src/panda_qt/dsp_debugger.cpp src/panda_qt/input_window.cpp - src/panda_qt/screen/screen.cpp src/panda_qt/screen/screen_gl.cpp src/panda_qt/screen/screen_mtl.cpp - ) - - set(FRONTEND_HEADER_FILES include/panda_qt/main_window.hpp include/panda_qt/about_window.hpp - include/panda_qt/config_window.hpp include/panda_qt/text_editor.hpp include/panda_qt/cheats_window.hpp - include/panda_qt/patch_window.hpp include/panda_qt/elided_label.hpp include/panda_qt/shader_editor.hpp - include/panda_qt/thread_debugger.hpp include/panda_qt/cpu_debugger.hpp include/panda_qt/dsp_debugger.hpp - include/panda_qt/disabled_widget_overlay.hpp include/panda_qt/input_window.hpp include/panda_qt/screen/screen.hpp - include/panda_qt/screen/screen_gl.hpp include/panda_qt/screen/screen_mtl.hpp - ) - - if (APPLE AND ENABLE_METAL) - set(FRONTEND_SOURCE_FILES ${FRONTEND_SOURCE_FILES} src/panda_qt/screen/metal_context.mm) - endif() - - source_group("Source Files\\Qt" FILES ${FRONTEND_SOURCE_FILES}) - source_group("Header Files\\Qt" FILES ${FRONTEND_HEADER_FILES}) - include_directories(${Qt6Gui_PRIVATE_INCLUDE_DIRS}) - - include_directories(third_party/zep/include) # Include zep for text editor usage - configure_file(third_party/zep/cmake/config_app.h.cmake ${CMAKE_BINARY_DIR}/zep_config/config_app.h) - include_directories(${CMAKE_BINARY_DIR}/zep_config) - - target_compile_definitions(Alber PUBLIC "ZEP_QT=1") - target_compile_definitions(Alber PUBLIC "ZEP_FEATURE_CPP_FILE_SYSTEM=1") - target_link_libraries(Alber PRIVATE Qt6::Widgets) - - # We can't use qt_standard_project_setup since it's Qt 6.3+ and we don't need to set the minimum that high - set_target_properties(Alber PROPERTIES AUTOMOC ON) - set_target_properties(Alber PROPERTIES AUTORCC ON) - set_target_properties(Alber PROPERTIES AUTOUIC ON) - - if(LINUX OR FREEBSD) - find_package(X11 REQUIRED) - target_link_libraries(Alber PRIVATE ${X11_LIBRARIES}) - - if(ENABLE_OPENGL) - find_package(OpenGL REQUIRED COMPONENTS OpenGL EGL GLX) - target_link_libraries(Alber PRIVATE OpenGL::OpenGL OpenGL::EGL OpenGL::GLX) - endif() - endif() - - # Generates an en.ts file for translations - # To update the file, use cmake --build --target Alber_lupdate - if(GENERATE_QT_TRANSLATION) - find_package(Qt6 REQUIRED COMPONENTS LinguistTools) - qt_add_lupdate(Alber TS_FILES ${QT_LANGUAGES}/en.ts - SOURCES ${FRONTEND_SOURCE_FILES} - INCLUDE_DIRECTORIES ${FRONTEND_HEADER_FILES} - NO_GLOBAL_TARGET - ) - endif() - - qt_add_resources(AlberCore "app_images" - PREFIX "/" - FILES - docs/img/rsob_icon.png docs/img/rstarstruck_icon.png docs/img/rpog_icon.png docs/img/rsyn_icon.png - docs/img/settings_icon.png docs/img/display_icon.png docs/img/speaker_icon.png - docs/img/sparkling_icon.png docs/img/battery_icon.png docs/img/sdcard_icon.png - docs/img/rnap_icon.png docs/img/rcow_icon.png docs/img/skyemu_icon.png docs/img/runpog_icon.png - docs/img/gamepad_icon.png - ) - - # Translation files in Qt's .ts format. Will be converted into binary files and embedded into the executable - set(TRANSLATIONS_TS docs/translations/en.ts docs/translations/el.ts docs/translations/es.ts docs/translations/pt_br.ts docs/translations/nl.ts - docs/translations/sv.ts - ) - - set_source_files_properties(${TRANSLATIONS_TS} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations") - qt_add_translation(TRANSLATIONS_QM ${TRANSLATIONS_TS}) - - set(TRANSLATIONS_QRC ${CMAKE_CURRENT_BINARY_DIR}/translations/translations.qrc) - file(WRITE ${TRANSLATIONS_QRC} "\n") - foreach (QM ${TRANSLATIONS_QM}) - message("${QM}") - get_filename_component(QM_FILE ${QM} NAME) - file(APPEND ${TRANSLATIONS_QRC} "${QM_FILE}\n") - endforeach (QM) - file(APPEND ${TRANSLATIONS_QRC} "") - - qt_add_resources(TRANSLATIONS ${TRANSLATIONS_QRC}) - set(APP_RESOURCES ${APP_RESOURCES} ${TRANSLATIONS}) - else() - set(FRONTEND_SOURCE_FILES src/panda_sdl/main.cpp src/panda_sdl/frontend_sdl.cpp src/panda_sdl/mappings.cpp) - set(FRONTEND_HEADER_FILES "include/panda_sdl/frontend_sdl.hpp") - endif() - - target_link_libraries(Alber PRIVATE AlberCore) - target_sources(Alber PRIVATE ${FRONTEND_SOURCE_FILES} ${FRONTEND_HEADER_FILES} ${GL_CONTEXT_SOURCE_FILES} ${APP_RESOURCES}) -elseif(BUILD_HYDRA_CORE) - target_compile_definitions(AlberCore PRIVATE PANDA3DS_HYDRA_CORE=1) - include_directories(third_party/hydra_core/include) - - set(SHARED_SOURCE_FILES src/hydra_core.cpp) - if(IOS) - set(SHARED_SOURCE_FILES ${SHARED_SOURCE_FILES} src/ios_driver.mm) - endif() - - add_library(Alber SHARED ${SHARED_SOURCE_FILES}) - target_link_libraries(Alber PUBLIC AlberCore) -elseif(BUILD_LIBRETRO_CORE) - include_directories(third_party/libretro/include) - add_library(panda3ds_libretro SHARED src/libretro_core.cpp) - target_link_libraries(panda3ds_libretro PUBLIC AlberCore) - set_target_properties(panda3ds_libretro PROPERTIES PREFIX "") -endif() - -if(ENABLE_LTO OR ENABLE_USER_BUILD) - if (NOT BUILD_LIBRETRO_CORE) - set_target_properties(Alber PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) - else() - set_target_properties(panda3ds_libretro PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) - endif() -endif() - -if(ENABLE_TESTS) - enable_testing() - - find_package(Catch2 3) - if(NOT Catch2_FOUND) - add_subdirectory(third_party/Catch2) - endif() - - add_library(nihstro-headers INTERFACE) - target_include_directories(nihstro-headers SYSTEM INTERFACE ./third_party/nihstro/include) - - add_executable(AlberTests - tests/shader.cpp - ) - target_link_libraries( - AlberTests - PRIVATE - Catch2::Catch2WithMain - AlberCore - nihstro-headers - ) - - add_test(AlberTests AlberTests) + target_compile_definitions(Alber PRIVATE PANDA3DS_ENABLE_HTTP_SERVER=1) endif() diff --git a/cmake/FindRenderDoc.cmake b/cmake/FindRenderDoc.cmake deleted file mode 100644 index c00a0888..00000000 --- a/cmake/FindRenderDoc.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later - -set(RENDERDOC_INCLUDE_DIR third_party/renderdoc) - -if (RENDERDOC_INCLUDE_DIR AND EXISTS "${RENDERDOC_INCLUDE_DIR}/renderdoc_app.h") - file(STRINGS "${RENDERDOC_INCLUDE_DIR}/renderdoc_app.h" RENDERDOC_VERSION_LINE REGEX "typedef struct RENDERDOC_API") - string(REGEX REPLACE ".*typedef struct RENDERDOC_API_([0-9]+)_([0-9]+)_([0-9]+).*" "\\1.\\2.\\3" RENDERDOC_VERSION "${RENDERDOC_VERSION_LINE}") - unset(RENDERDOC_VERSION_LINE) -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(RenderDoc - REQUIRED_VARS RENDERDOC_INCLUDE_DIR - VERSION_VAR RENDERDOC_VERSION -) - -if (RenderDoc_FOUND AND NOT TARGET RenderDoc::API) - add_library(RenderDoc::API INTERFACE IMPORTED) - set_target_properties(RenderDoc::API PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${RENDERDOC_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(RENDERDOC_INCLUDE_DIR) \ No newline at end of file diff --git a/docs/3ds/accelerometer_readings/readings_flat_1.png b/docs/3ds/accelerometer_readings/readings_flat_1.png deleted file mode 100644 index b7a425fc..00000000 Binary files a/docs/3ds/accelerometer_readings/readings_flat_1.png and /dev/null differ diff --git a/docs/3ds/accelerometer_readings/readings_flat_2.png b/docs/3ds/accelerometer_readings/readings_flat_2.png deleted file mode 100644 index b23c1102..00000000 Binary files a/docs/3ds/accelerometer_readings/readings_flat_2.png and /dev/null differ diff --git a/docs/3ds/accelerometer_readings/readings_shaking_1.png b/docs/3ds/accelerometer_readings/readings_shaking_1.png deleted file mode 100644 index 91279149..00000000 Binary files a/docs/3ds/accelerometer_readings/readings_shaking_1.png and /dev/null differ diff --git a/docs/3ds/accelerometer_readings/readings_shaking_2.png b/docs/3ds/accelerometer_readings/readings_shaking_2.png deleted file mode 100644 index 551e7d2e..00000000 Binary files a/docs/3ds/accelerometer_readings/readings_shaking_2.png and /dev/null differ diff --git a/docs/3ds/lighting.md b/docs/3ds/lighting.md deleted file mode 100644 index 8b6b9885..00000000 --- a/docs/3ds/lighting.md +++ /dev/null @@ -1,79 +0,0 @@ -## Info on the lighting implementation - -### Missing shadow attenuation -Shadow attenuation samples a texture unit, and that likely needs render to texture for most games so that they can construct -their shadow map. As such the colors are not multiplied by the shadow attenuation value, so there's no shadows. - -### Missing bump mapping -Bump mapping also samples a texture unit, most likely doesn't need render to texture however may need better texture sampling -implementation (such as GPUREG_TEXUNITi_BORDER_COLOR, GPUREG_TEXUNITi_BORDER_PARAM). Bump mapping would work for some things, -namely the 3ds-examples bump mapping demo, but would break others such as Toad Treasure Tracker with a naive `texture` implementation. - -Also the CP configuration is missing, because it needs a tangent map implementation. It is currently marked with error_unimpl. - -### samplerEnabledBitfields -Holds the enabled state of the lighting samples for various PICA configurations -As explained in https://www.3dbrew.org/wiki/GPU/Internal_Registers#GPUREG_LIGHTING_CONFIG0 - -```c -const bool samplerEnabled[9 * 7] = bool[9 * 7]( - // D0 D1 SP FR RB RG RR - true, false, true, false, false, false, true, // Configuration 0: D0, SP, RR - false, false, true, true, false, false, true, // Configuration 1: FR, SP, RR - true, true, false, false, false, false, true, // Configuration 2: D0, D1, RR - true, true, false, true, false, false, false, // Configuration 3: D0, D1, FR - true, true, true, false, true, true, true, // Configuration 4: All except for FR - true, false, true, true, true, true, true, // Configuration 5: All except for D1 - true, true, true, true, false, false, true, // Configuration 6: All except for RB and RG - false, false, false, false, false, false, false, // Configuration 7: Unused - true, true, true, true, true, true, true // Configuration 8: All -); -``` - -The above has been condensed to two uints for performance reasons. -You can confirm they are the same by running the following: -```c -const uint samplerEnabledBitfields[2] = { 0x7170e645u, 0x7f013fefu }; -for (int i = 0; i < 9 * 7; i++) { - unsigned arrayIndex = (i >> 5); - bool b = (samplerEnabledBitfields[arrayIndex] & (1u << (i & 31))) != 0u; - if (samplerEnabled[i] == b) { - printf("%d: happy\n", i); - } else { - printf("%d: unhappy\n", i); - } -} -``` - -### lightLutLookup -lut_id is one of these values -0 D0 -1 D1 -2 SP -3 FR -4 RB -5 RG -6 RR - -lut_index on the other hand represents the actual index of the LUT in the texture -u_tex_luts has 24 LUTs for lighting and they are used like so: -0 D0 -1 D1 -2 is missing because SP uses LUTs 8-15 -3 FR -4 RB -5 RG -6 RR -8-15 SP0-7 -16-23 DA0-7, but this is not handled in this function as the lookup is a bit different - -The light environment configuration controls which LUTs are available for use -If a LUT is not available in the selected configuration, its value will always read a constant 1.0 regardless of the enable state in GPUREG_LIGHTING_CONFIG1 -If RR is enabled but not RG or RB, the output of RR is used for the three components; Red, Green and Blue. - -### Distance attenuation -Distance attenuation is computed differently from the other factors, for example -it doesn't store its scale in GPUREG_LIGHTING_LUTINPUT_SCALE and it doesn't use -GPUREG_LIGHTING_LUTINPUT_SELECT. Instead, it uses the distance from the light to the -fragment and the distance attenuation scale and bias to calculate where in the LUT to look up. -See: https://www.3dbrew.org/wiki/GPU/Internal_Registers#GPUREG_LIGHTi_ATTENUATION_SCALE \ No newline at end of file diff --git a/docs/img/KirbyAndroid.png b/docs/img/KirbyAndroid.png deleted file mode 100644 index 05e8b466..00000000 Binary files a/docs/img/KirbyAndroid.png and /dev/null differ diff --git a/docs/img/mac_icon.ico b/docs/img/alber-icon.ico similarity index 100% rename from docs/img/mac_icon.ico rename to docs/img/alber-icon.ico diff --git a/docs/img/battery_icon.png b/docs/img/battery_icon.png deleted file mode 100644 index 5768a928..00000000 Binary files a/docs/img/battery_icon.png and /dev/null differ diff --git a/docs/img/display_icon.png b/docs/img/display_icon.png deleted file mode 100644 index cf6a68be..00000000 Binary files a/docs/img/display_icon.png and /dev/null differ diff --git a/docs/img/gamepad_icon.png b/docs/img/gamepad_icon.png deleted file mode 100644 index e4a59f1f..00000000 Binary files a/docs/img/gamepad_icon.png and /dev/null differ diff --git a/docs/img/rcow_icon.png b/docs/img/rcow_icon.png deleted file mode 100644 index 5facb301..00000000 Binary files a/docs/img/rcow_icon.png and /dev/null differ diff --git a/docs/img/rnap_icon.png b/docs/img/rnap_icon.png deleted file mode 100644 index 7967102b..00000000 Binary files a/docs/img/rnap_icon.png and /dev/null differ diff --git a/docs/img/rpog_icon.png b/docs/img/rpog_icon.png deleted file mode 100644 index b5426aed..00000000 Binary files a/docs/img/rpog_icon.png and /dev/null differ diff --git a/docs/img/rsob_icon.png b/docs/img/rsob_icon.png deleted file mode 100644 index 4cabd3fb..00000000 Binary files a/docs/img/rsob_icon.png and /dev/null differ diff --git a/docs/img/rstarstruck_icon.png b/docs/img/rstarstruck_icon.png deleted file mode 100644 index 2b4aab06..00000000 Binary files a/docs/img/rstarstruck_icon.png and /dev/null differ diff --git a/docs/img/rsyn_icon.png b/docs/img/rsyn_icon.png deleted file mode 100644 index 684c19b6..00000000 Binary files a/docs/img/rsyn_icon.png and /dev/null differ diff --git a/docs/img/runpog_icon.png b/docs/img/runpog_icon.png deleted file mode 100644 index 6ef33f4a..00000000 Binary files a/docs/img/runpog_icon.png and /dev/null differ diff --git a/docs/img/sdcard_icon.png b/docs/img/sdcard_icon.png deleted file mode 100644 index 07ed3fce..00000000 Binary files a/docs/img/sdcard_icon.png and /dev/null differ diff --git a/docs/img/settings_icon.png b/docs/img/settings_icon.png deleted file mode 100644 index bf21c417..00000000 Binary files a/docs/img/settings_icon.png and /dev/null differ diff --git a/docs/img/skyemu_icon.png b/docs/img/skyemu_icon.png deleted file mode 100644 index d5f3b9d4..00000000 Binary files a/docs/img/skyemu_icon.png and /dev/null differ diff --git a/docs/img/sparkling_icon.png b/docs/img/sparkling_icon.png deleted file mode 100644 index 4a46d8d8..00000000 Binary files a/docs/img/sparkling_icon.png and /dev/null differ diff --git a/docs/img/speaker_icon.png b/docs/img/speaker_icon.png deleted file mode 100644 index 06adcfb3..00000000 Binary files a/docs/img/speaker_icon.png and /dev/null differ diff --git a/docs/img/windows_alt_icon.ico b/docs/img/windows_alt_icon.ico deleted file mode 100644 index aa3593c3..00000000 Binary files a/docs/img/windows_alt_icon.ico and /dev/null differ diff --git a/docs/img/windows_icon.ico b/docs/img/windows_icon.ico deleted file mode 100644 index 340f251e..00000000 Binary files a/docs/img/windows_icon.ico and /dev/null differ diff --git a/docs/img/windows_icon.rc b/docs/img/windows_icon.rc deleted file mode 100644 index 22dc105e..00000000 --- a/docs/img/windows_icon.rc +++ /dev/null @@ -1 +0,0 @@ -AlberIcon ICON "windows_icon.ico" \ No newline at end of file diff --git a/docs/libretro/panda3ds_libretro.info b/docs/libretro/panda3ds_libretro.info deleted file mode 100644 index de1be2f6..00000000 --- a/docs/libretro/panda3ds_libretro.info +++ /dev/null @@ -1,34 +0,0 @@ -# Software Information -display_name = "Nintendo - 3DS (Panda3DS)" -authors = "Panda3DS Authors (tm)" -supported_extensions = "3ds|3dsx|elf|axf|cci|cxi|app|ncch" -corename = "Panda3DS" -categories = "Emulator" -license = "GPLv3" -permissions = "" -display_version = "Git" - -# Hardware Information -manufacturer = "Nintendo" -systemname = "3DS" -systemid = "3ds" - -# Libretro Information -database = "Nintendo - Nintendo 3DS" -supports_no_game = "false" -savestate = "true" -savestate_features = "basic" -cheats = "false" -input_descriptors = "true" -memory_descriptors = "false" -libretro_saves = "true" -core_options = "true" -core_options_version = "1.0" -load_subsystem = "false" -hw_render = "true" -required_hw_api = "OpenGL Core >= 4.1" -needs_fullpath = "true" -disk_control = "false" -is_experimental = "true" - -description = "Panda3DS !" diff --git a/docs/translations/el.ts b/docs/translations/el.ts deleted file mode 100644 index 0368d8bd..00000000 --- a/docs/translations/el.ts +++ /dev/null @@ -1,763 +0,0 @@ - - - AboutWindow - - - About Panda3DS - Σχετικά με το Panda3DS - - - - Panda3DS is a free and open source Nintendo 3DS emulator, for Windows, MacOS and Linux - Τo Panda3DS είναι ένας δωρεάν και open source εξομοιωτής του Nintendo 3DS, για Windows, MacOS και Linux - - - - Visit panda3ds.com for help with Panda3DS and links to our official support sites. - Επισκεφτείται το panda3ds.com για βοήθεια με το Panda3DS και συνδέσμους στις επίσημες σελίδες υποστήριξης μας. - - - - Panda3DS is developed by volunteers in their spare time. Below is a list of some of these volunteers who've agreed to be listed here, in no particular order.<br>If you think you should be listed here too, please inform us<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - - - - - CheatEditDialog - - - Edit Cheat - Επεξεργασία Κωδικού - - - - Cheat name - Όνομα κωδικού - - - - CheatEntryWidget - - - Edit - Επεξεργασία - - - - CheatsWindow - - - Cheats - Κωδικοί - - - - Add - Προσθήκη - - - - Remove - Αφαίρεση - - - - ConfigWindow - - - Configuration - Ρυθμίσεις - - - - Interface Settings - Ρυθμίσεις Διεπαφής - - - - System - Σύστημα - - - - Light - Φωτεινό - - - - Dark - Σκοτεινό - - - - Greetings Cat - Γεια Σου Γάτα - - - - Cream - Κρέμα - - - - Color theme - Χρώματα - - - - Happy panda - Χαρούμενο Πάντα - - - - Happy panda (colourful) - Χαρούμενο Πάντα (χρωματιστό) - - - - Sleepy panda - Πάντα που νυστάζει - - - - Cow panda - Αγελάδα πάντα - - - - The penguin from SkyEmu - Ο πιγκουίνος από το SkyEmu - - - - Window icon - Εικονίδιο Παραθύρου - - - - Language - Γλώσσα - - - - Show version on window title - Εμφάνιση έκδοσης στον τίτλο του παραθύρου - - - - Alber v%1 - Αλβέρτος v%1 - - - - Alber - Αλβέρτος - - - - Remember window position - Αποθήκευση θέσης παραθύρου - - - - General Settings - Γενικές Ρυθμίσεις - - - - Browse... - Περιήγηση - - - - Select Directory - Επιλογή φακέλου - - - - Default ROMs path - Προεπιλεγμένος φάκελος ROM - - - - Enable Discord RPC - Ενεργοποίηση Discord RPC - - - - Use portable build - Ενεργοποίηση φορητής εγκατάστασης - - - - Print version in console output - Εκτύπωση έκδοσης στην κονσόλα - - - - Graphics Settings - Ρυθμίσεις Γραφικών - - - - - Null - Κανένα - - - - OpenGL - - - - - Vulkan - - - - - GPU renderer - Πυρήνας GPU - - - - Enable Renderdoc - Ενεργοποίηση Renderdoc - - - - Enable shader JIT - Ενεργοποίηση μεταγλωττιστή shaders - - - - Enable VSync - Ενεργοποίηση VSync - - - - Use ubershaders (No stutter, maybe slower) - Χρήση ubershaders (Χωρίς stutter, ίσως πιο αργό) - - - - Accurate shader multiplication - Ακριβής πολλαπλασιασμός στα shaders - - - - Accelerate shaders - Επιτάχυνση shaders - - - - Force shadergen when rendering lights - Εξαναγκασμός shadergen όταν υπάρχουν φώτα - - - - Light threshold for forcing shadergen - Αριθμός φωτών για εξαναγκασμό shadergen - - - - Audio Settings - Ρυθμίσεις Ήχου - - - - LLE - - - - - HLE - - - - - DSP emulation - Εξομοίωση DSP - - - - Enable audio - Ενεργοποίηση ήχου - - - - Enable AAC audio - Ενεργοποίηση ήχου AAC - - - - Print DSP firmware - Εκτύπωση λογισμικού DSP - - - - Mute audio device - Σίγαση συσκευής ήχου - - - - Cubic - Κυβική - - - - Linear - Γραμμική - - - - Volume curve - Κλίμακα ήχου - - - - Audio device volume - Ένταση ήχου - - - - Battery Settings - Ρυθμίσεις μπαταρίας - - - - Battery percentage - Ποσοστό μπαταρίας - - - - Charger plugged - Φορτιστής - - - - SD Card Settings - Ρυθμίσης κάρτας SD - - - - Enable virtual SD card - Ενεργοποίηση εικονικής SD - - - - Write protect virtual SD card - Προστασία της SD από εγγραφή - - - - Interface - Διεπαφή - - - - User Interface settings - Ρυθμίσεις διεπαφής - - - - General - Γενικά - - - - General emulator settings - Γενικές ρυθμίσεις εξομοιωτή - - - - Graphics - Γραφικά - - - - Graphics emulation and output settings - Ρυθμίσεις εξομοίωσης γραφικών - - - - Audio - Ήχος - - - - Audio emulation and output settings - Ρυθμίσεις εξομοίωσης ήχου - - - - Battery - Μπαταρία - - - - Battery emulation settings - Ρυθμίσεις εξομοίωσης μπαταρίας - - - - SD Card - Κάρτα SD - - - - SD Card emulation settings - Ρυθμίσεις εξομοίωσης κάρτας SD - - - - Language change successful - Επιτυχία αλλαγής γλώσσας - - - - Restart Panda3DS for the new language to be used. - Επανεκκινήστε το Panda3DS για να εφαρμοστεί η νέα γλώσσα. - - - - Language change failed - Αποτυχία αλλαγής γλώσσας - - - - The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code... - Το Panda3DS δεν υποστηρίζει τον γλώσσα που επιλέξατε. Αν το βλέπετε αυτό, κάποιος έκανε λάθος στον κώδικα, κατηγορήστε τον Πάρη... - - - - MainWindow - - - Alber - Αλβέρτος - - - - File - Αρχεία - - - - Emulation - Εξομοίωση - - - - Tools - Εργαλεία - - - - About - Σχετικά - - - - Load game - Φόρτωση παιχνιδιού - - - - Load Lua script - Φόρτωση αρχείου Lua - - - - Open Panda3DS folder - Άνοιγμα φακέλου Panda3DS - - - - Pause - Παύση - - - - Resume - Συνέχεια - - - - Reset - Επανέναρξη - - - - Configure - Ρύθμιση - - - - Dump RomFS - - - - - Open Lua Editor - Άνοιγμα Lua Editor - - - - Open Cheats Editor - Άνοιγμα Editor κωδικών - - - - Open Patch Window - Άνοιγμα παραθύρου για patching - - - - Open Shader Editor - - - - - Dump loaded DSP firmware - - - - - About Panda3DS - Σχετικά με το Panda3DS - - - - Select 3DS ROM to load - Επιλέξτε 3DS ROM για να φορτώσετε - - - - Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - - - - - Select Lua script to load - Επιλέξτε αρχείο Lua για να φορτώσετε - - - - Lua scripts (*.lua *.txt) - - - - - Select folder to dump RomFS files to - - - - - Invalid format for RomFS dumping - - - - - The currently loaded app is not in a format that supports RomFS - - - - - - - OK - ΟΚ - - - - No RomFS found - Δεν βρέθηκε RomFS - - - - No RomFS partition was found in the loaded app - Δεν βρέθηκε RomFS στην εφαρμογή που έχει φορτωθεί - - - - Select file - Επιλέξτε αρχείο - - - - DSP firmware file (*.cdc) - - - - - No DSP firmware loaded - Δεν έχει φορτωθεί DSP firmware - - - - The currently loaded app has not uploaded a firmware to the DSP - - - - - Failed to open output file - Αποτυχία ανοίγματος του αρχείου εξόδου - - - - The currently loaded DSP firmware could not be written to the selected file. Please make sure you have permission to access this file - - - - - PatchWindow - - - ROM patcher - - - - - Select input file - Επιλογή αρχείου εισόδου - - - - - Select - Επιλέξτε - - - - - Select patch file - Επιλογή αρχείου patch - - - - Apply patch - Εφαρμογή patch - - - - Select file to patch - Επιλέξτε αρχείο να κάνετε patch - - - - - All files (*.*) - Όλα τα αρχεία (*.*) - - - - Patch files (*.ips *.ups *.bps) - - - - - Paths not provided correctly - - - - - Please provide paths for both the input file and the patch file - Παρακαλούμε διαλέξτε και αρχείο εισόδου και αρχείο patch - - - - Select file - Επιλογή αρχείου - - - - No output path - Δεν επιλέχθηκε φάκελος εξόδου - - - - No path was provided for the output file, no patching was done - Δεν επιλέχθηκε αρχείο εξόδου. Δεν έγινε patching - - - - Unknown patch format - Άγνωστο είδος patch - - - - Unknown format for patch file. Currently IPS, UPS and BPS are supported - Άγνωστο είδος αρχείου patch. Υποστηρίζονται αρχεία IPS, UPS και BPS - - - - Failed to open input files - Αποτυχία ανοίγματος των αρχείων εισόδου - - - - Make sure they're in a directory Panda3DS has access to - Βεβαιωθείτε ότι είναι σε φάκελο που έχει πρόσβαση το Panda3DS - - - - Patching Success - Επιτυχής Εφαρμογή Patch - - - - Your file was patched successfully. - To αρχείο σας έγινε patch με επιτυχία - - - - Checksum mismatch - - - - - Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct - Το patch εφαρμόστηκε με επιτυχία αλλά ανιχνεύτηκε σφάλμα στο checksum. Ενδέχεται τα αρχεία εισόδου η εξόδου να είναι λανθασμένα - - - - Patching error - Σφάλμα στο patching - - - - An error occured while patching - Προέκυψε σφάλμα στο patching - - - - PatchWindow::PatchWindow - - - OK - ΟΚ - - - - ShaderEditorWindow - - - Reload shader - Επαναφόρτωση shader - - - - TextEditorWindow - - - Lua Editor - - - - - Load script - Φόρτωση αρχείου - - - \ No newline at end of file diff --git a/docs/translations/en.ts b/docs/translations/en.ts deleted file mode 100644 index 4a70fabb..00000000 --- a/docs/translations/en.ts +++ /dev/null @@ -1,766 +0,0 @@ - - - - - AboutWindow - - - About Panda3DS - - - - - Panda3DS is a free and open source Nintendo 3DS emulator, for Windows, MacOS and Linux - - - - - Visit panda3ds.com for help with Panda3DS and links to our official support sites. - - - - - Panda3DS is developed by volunteers in their spare time. Below is a list of some of these volunteers who've agreed to be listed here, in no particular order.<br>If you think you should be listed here too, please inform us<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - - - - - CheatEditDialog - - - Edit Cheat - - - - - Cheat name - - - - - CheatEntryWidget - - - Edit - - - - - CheatsWindow - - - Cheats - - - - - Add - - - - - Remove - - - - - ConfigWindow - - - Configuration - - - - - Interface Settings - - - - - System - - - - - Light - - - - - Dark - - - - - Greetings Cat - - - - - Cream - - - - - Color theme - - - - - Happy panda - - - - - Happy panda (colourful) - - - - - Sleepy panda - - - - - Cow panda - - - - - The penguin from SkyEmu - - - - - Window icon - - - - - Language - - - - - Show version on window title - - - - - - Alber v%1 - - - - - Alber - - - - - Remember window position - - - - - General Settings - - - - - Browse... - - - - - Select Directory - - - - - Default ROMs path - - - - - Enable Discord RPC - - - - - Use portable build - - - - - Print version in console output - - - - - Graphics Settings - - - - - - Null - - - - - OpenGL - - - - - Vulkan - - - - - GPU renderer - - - - - Enable Renderdoc - - - - - Enable shader JIT - - - - - Enable VSync - - - - - Use ubershaders (No stutter, maybe slower) - - - - - Accurate shader multiplication - - - - - Accelerate shaders - - - - - Force shadergen when rendering lights - - - - - Light threshold for forcing shadergen - - - - - Audio Settings - - - - - LLE - - - - - HLE - - - - - DSP emulation - - - - - Enable audio - - - - - Enable AAC audio - - - - - Print DSP firmware - - - - - Mute audio device - - - - - Cubic - - - - - Linear - - - - - Volume curve - - - - - Audio device volume - - - - - Battery Settings - - - - - Battery percentage - - - - - Charger plugged - - - - - SD Card Settings - - - - - Enable virtual SD card - - - - - Write protect virtual SD card - - - - - Interface - - - - - User Interface settings - - - - - General - - - - - General emulator settings - - - - - Graphics - - - - - Graphics emulation and output settings - - - - - Audio - - - - - Audio emulation and output settings - - - - - Battery - - - - - Battery emulation settings - - - - - SD Card - - - - - SD Card emulation settings - - - - - Language change successful - - - - - Restart Panda3DS for the new language to be used. - - - - - Language change failed - - - - - The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code... - - - - - MainWindow - - - Alber - - - - - File - - - - - Emulation - - - - - Tools - - - - - About - - - - - Load game - - - - - Load Lua script - - - - - Open Panda3DS folder - - - - - Pause - - - - - Resume - - - - - Reset - - - - - Configure - - - - - Dump RomFS - - - - - Open Lua Editor - - - - - Open Cheats Editor - - - - - Open Patch Window - - - - - Open Shader Editor - - - - - Dump loaded DSP firmware - - - - - About Panda3DS - - - - - Select 3DS ROM to load - - - - - Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - - - - - Select Lua script to load - - - - - Lua scripts (*.lua *.txt) - - - - - Select folder to dump RomFS files to - - - - - Invalid format for RomFS dumping - - - - - The currently loaded app is not in a format that supports RomFS - - - - - - - OK - - - - - No RomFS found - - - - - No RomFS partition was found in the loaded app - - - - - Select file - - - - - DSP firmware file (*.cdc) - - - - - No DSP firmware loaded - - - - - The currently loaded app has not uploaded a firmware to the DSP - - - - - Failed to open output file - - - - - The currently loaded DSP firmware could not be written to the selected file. Please make sure you have permission to access this file - - - - - PatchWindow - - - ROM patcher - - - - - Select input file - - - - - - Select - - - - - - Select patch file - - - - - Apply patch - - - - - Select file to patch - - - - - - All files (*.*) - - - - - Patch files (*.ips *.ups *.bps) - - - - - Paths not provided correctly - - - - - Please provide paths for both the input file and the patch file - - - - - Select file - - - - - No output path - - - - - No path was provided for the output file, no patching was done - - - - - Unknown patch format - - - - - Unknown format for patch file. Currently IPS, UPS and BPS are supported - - - - - Failed to open input files - - - - - Make sure they're in a directory Panda3DS has access to - - - - - Patching Success - - - - - Your file was patched successfully. - - - - - Checksum mismatch - - - - - Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct - - - - - Patching error - - - - - An error occured while patching - - - - - PatchWindow::PatchWindow - - - OK - - - - - ShaderEditorWindow - - - Reload shader - - - - - TextEditorWindow - - - Lua Editor - - - - - Load script - - - - diff --git a/docs/translations/es.ts b/docs/translations/es.ts deleted file mode 100644 index 6f345261..00000000 --- a/docs/translations/es.ts +++ /dev/null @@ -1,763 +0,0 @@ - - - AboutWindow - - - About Panda3DS - Acerca de Panda3DS - - - - Panda3DS is a free and open source Nintendo 3DS emulator, for Windows, MacOS and Linux - Panda3DS es un emulador libre y de código abierto de Nintendo 3DS para Windows, MacOS y Linux - - - - Visit panda3ds.com for help with Panda3DS and links to our official support sites. - Visita panda3ds.com para obtener ayuda con Panda3DS y los links a nuestras páginas oficiales de soporte. - - - - Panda3DS is developed by volunteers in their spare time. Below is a list of some of these volunteers who've agreed to be listed here, in no particular order.<br>If you think you should be listed here too, please inform us<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - Panda3DS es desarrollado por voluntarios en su tiempo libre. Debajo se encuentran los voluntarios que están de acuerdo con ser listados aquí, en ningún orden en particular.<br>Si piensas que deberías ser listado, por favor infórmanos<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - - - - CheatEditDialog - - - Edit Cheat - Editar Truco - - - - Cheat name - Nombre del truco - - - - CheatEntryWidget - - - Edit - Editar - - - - CheatsWindow - - - Cheats - Trucos - - - - Add - Añadir - - - - Remove - Quitar - - - - ConfigWindow - - - Configuration - Configuración - - - - Interface Settings - Configuración de Interfaz - - - - System - Sistema - - - - Light - Claro - - - - Dark - Oscuro - - - - Greetings Cat - - - - - Cream - - - - - Color theme - Tema de color - - - - Happy panda - Panda feliz - - - - Happy panda (colourful) - Panda feliz (colorido) - - - - Sleepy panda - Panda somnoliento - - - - Cow panda - Panda vaca - - - - The penguin from SkyEmu - El pungüino de SkyEmu - - - - Window icon - Icono de ventana - - - - Language - Idioma - - - - Show version on window title - Mostrar versión en la barra de título de la ventana - - - - Alber v%1 - Alber v%1 - - - - Alber - Alber - - - - Remember window position - Recordar posición de la ventana - - - - General Settings - Configuración General - - - - Browse... - Examinar... - - - - Select Directory - Seleccionar Directorio - - - - Default ROMs path - Ruta predeterminada de ROMs - - - - Enable Discord RPC - Activar Discord RPC - - - - Use portable build - Usar build portable - - - - Print version in console output - Imprimir versión en consola - - - - Graphics Settings - Configuración de Gráficos - - - - - Null - Nulo - - - - OpenGL - OpenGL - - - - Vulkan - Vulkan - - - - GPU renderer - Renderizador GPU - - - - Enable Renderdoc - Activar Renderdoc - - - - Enable shader JIT - Activar JIT de shaders - - - - Enable VSync - Activar VSync - - - - Use ubershaders (No stutter, maybe slower) - Usar ubershaders (No stuttering, puede ser más lento) - - - - Accurate shader multiplication - Multiplicación precisa de shaders - - - - Accelerate shaders - Acelerar shaders - - - - Force shadergen when rendering lights - Forzar shadergen al renderizar luces - - - - Light threshold for forcing shadergen - Umbral de luz para forzar shadergen - - - - Audio Settings - Configuración de Audio - - - - LLE - LLE - - - - HLE - HLE - - - - DSP emulation - Emulación de DSP - - - - Enable audio - Activar audio - - - - Enable AAC audio - Activar audio AAC - - - - Print DSP firmware - Imprimir firmware DSP - - - - Mute audio device - Silenciar dispositivo de audio - - - - Cubic - Cúbico - - - - Linear - Linear - - - - Volume curve - Curva del volumen - - - - Audio device volume - Volumen del dispositivo de audio - - - - Battery Settings - Configuración de Batería - - - - Battery percentage - Porcentaje de batería - - - - Charger plugged - Cargador conectado - - - - SD Card Settings - Configuración de Tarjeta SD - - - - Enable virtual SD card - Activar tarjeta SD virtual - - - - Write protect virtual SD card - Proteger tarjeta SD de escritura - - - - Interface - Interfaz - - - - User Interface settings - Configuración de Interfaz de Usuario - - - - General - General - - - - General emulator settings - Configuración general del emulador - - - - Graphics - Gráficos - - - - Graphics emulation and output settings - Configuración de emulación de gráficos y salida de vídeo - - - - Audio - Audio - - - - Audio emulation and output settings - Configuración de emulación y salida de audio - - - - Battery - Batería - - - - Battery emulation settings - Configuración de emulación de la batería - - - - SD Card - Tarjeta SD - - - - SD Card emulation settings - Configuración de emulación de la tarjeta SD - - - - Language change successful - Idioma cambiado correctamente - - - - Restart Panda3DS for the new language to be used. - Reinicie Panda3DS para utilizar el nuevo idioma. - - - - Language change failed - Cambio de idioma fallido - - - - The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code... - El idioma que ha seleccionado no está incluido en Panda3DS. Si está viendo esto, alguien cometió un error en el código... - - - - MainWindow - - - Alber - Alber - - - - File - Archivo - - - - Emulation - Emulación - - - - Tools - Herramientas - - - - About - Acerca de - - - - Load game - Cargar juego - - - - Load Lua script - Cargar script Lua - - - - Open Panda3DS folder - Abrir carpeta Panda3DS - - - - Pause - Pausar - - - - Resume - Reanudar - - - - Reset - Reiniciar - - - - Configure - Configurar - - - - Dump RomFS - Volcar RomFS - - - - Open Lua Editor - Abrir Editor Lua - - - - Open Cheats Editor - Abrir Editor de Trucos - - - - Open Patch Window - Abrir Ventana de Parches - - - - Open Shader Editor - Abrir Editor de Shaders - - - - Dump loaded DSP firmware - Volcar firmware DSP cargado - - - - About Panda3DS - Acerca de Panda3DS - - - - Select 3DS ROM to load - Seleccione el ROM de 3DS a cargar - - - - Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - ROMs de Nintendo 3DS (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - - - - Select Lua script to load - Seleccione el script Lua a cargar - - - - Lua scripts (*.lua *.txt) - Scripts Lua (*.lua *.txt) - - - - Select folder to dump RomFS files to - Seleccione la carpeta donde volcar los archivos del RomFS - - - - Invalid format for RomFS dumping - Formato inváido para volcado de RomFS - - - - The currently loaded app is not in a format that supports RomFS - La aplicación cargada no tiene un formato que soporta RomFS - - - - - - OK - OK - - - - No RomFS found - RomFS no encontrado - - - - No RomFS partition was found in the loaded app - No se encontró una partición RomFS en la aplicación cargada - - - - Select file - Seleccionar archivo - - - - DSP firmware file (*.cdc) - Archivo de firmware DSP (*.cdc) - - - - No DSP firmware loaded - Firmware DSP no cargado - - - - The currently loaded app has not uploaded a firmware to the DSP - La aplicación cargada no ha subido un firmware al DSP - - - - Failed to open output file - Error al abrir el archivo de salida - - - - The currently loaded DSP firmware could not be written to the selected file. Please make sure you have permission to access this file - No se pudo escribir el firmware DSP cargado al archivo seleccionado. Por favor asegure que tiene los permisos necesarios para acceder a este archivo - - - - PatchWindow - - - ROM patcher - Parcheador de ROM - - - - Select input file - Seleccione el archivo de entrada - - - - - Select - Seleccionar - - - - - Select patch file - Seleccione el archivo de parche - - - - Apply patch - Aplicar parche - - - - Select file to patch - Seleccione el archivo a parchear - - - - - All files (*.*) - Todos los archivos (*.*) - - - - Patch files (*.ips *.ups *.bps) - Archivos de parche (*.ips *.ups *.bps) - - - - Paths not provided correctly - Rutas no proporcionadas correctamente - - - - Please provide paths for both the input file and the patch file - Por favor proporcione rutas para el archivo de entrada y el parche - - - - Select file - Seleccionar archivo - - - - No output path - No hay archivo de salida - - - - No path was provided for the output file, no patching was done - No se ha proporcionado una ruta para el archivo de salida, no se ha aplicado el parche - - - - Unknown patch format - Formato del parche desconocido - - - - Unknown format for patch file. Currently IPS, UPS and BPS are supported - Formato desconocido del archivo de parche. Actualmente son soportados IPS, UPS y BPS - - - - Failed to open input files - Error al abrir archivos de entrada - - - - Make sure they're in a directory Panda3DS has access to - Asegure que estén en un directorio al que Panda3DS tenga acceso - - - - Patching Success - Parche exitoso - - - - Your file was patched successfully. - Su archivo fue parcheado con éxito. - - - - Checksum mismatch - Discrepancia en la suma de verificación - - - - Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct - El parche se aplicó con éxito pero se detectó una discrepancia en la suma de verificación. Los archivos de entrada o salida pueden no ser correctos - - - - Patching error - Error de parcheo - - - - An error occured while patching - Ha ocurrido un error en el parcheo - - - - PatchWindow::PatchWindow - - - OK - OK - - - - ShaderEditorWindow - - - Reload shader - Recargar shader - - - - TextEditorWindow - - - Lua Editor - Editor Lua - - - - Load script - Cargar script - - - \ No newline at end of file diff --git a/docs/translations/nl.ts b/docs/translations/nl.ts deleted file mode 100644 index 4e6d3e9e..00000000 --- a/docs/translations/nl.ts +++ /dev/null @@ -1,763 +0,0 @@ - - - AboutWindow - - - About Panda3DS - Over Panda3DS - - - - Panda3DS is a free and open source Nintendo 3DS emulator, for Windows, MacOS and Linux - Panda3DS is een gratis, open source Nintendo 3DS-emulator voor Windows, MacOS en Linux - - - - Visit panda3ds.com for help with Panda3DS and links to our official support sites. - Bezoek panda3ds.com voor ondersteuning van Panda3DS en links naar onze officiële ondersteuningskanalen. - - - - Panda3DS is developed by volunteers in their spare time. Below is a list of some of these volunteers who've agreed to be listed here, in no particular order.<br>If you think you should be listed here too, please inform us<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - Panda3DS wordt ontwikkeld door vrijwilligers in hun vrije tijd. Hieronder een lijst van sommige van deze vrijwilligers die akkoord zijn met een vermelding, in willekeurige volgorde.<br>Als jij vindt dat je op deze lijst zou moeten staan, laat het ons dan weten<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - - - - CheatEditDialog - - - Edit Cheat - Cheat bewerken - - - - Cheat name - Cheatnaam - - - - CheatEntryWidget - - - Edit - Bewerken - - - - CheatsWindow - - - Cheats - Cheats - - - - Add - Toevoegen - - - - Remove - Verwijderen - - - - ConfigWindow - - - Configuration - Instellingen - - - - Interface Settings - Interfaceinstellingen - - - - System - Systeem - - - - Light - Licht - - - - Dark - Donker - - - - Greetings Cat - Begroetingskat - - - - Cream - Crème - - - - Color theme - Kleurenthema - - - - Happy panda - Blije panda - - - - Happy panda (colourful) - Blije panda (kleurrijk) - - - - Sleepy panda - Slaperige panda - - - - Cow panda - Koeienpanda - - - - The penguin from SkyEmu - De pinguïn van SkyEmu - - - - Window icon - Venstericoon - - - - Language - Taal - - - - Show version on window title - Toon versie in venstertitel - - - - Alber v%1 - Alber v%1 - - - - Alber - Alber - - - - Remember window position - Vensterpositie onthouden - - - - General Settings - Algemene instellingen - - - - Browse... - Bladeren... - - - - Select Directory - Kies map - - - - Default ROMs path - Standaard pad voor ROMs - - - - Enable Discord RPC - Discord RPC inschakelen - - - - Use portable build - Portable build gebruiken - - - - Print version in console output - Versie afdrukken in consoleuitvoer - - - - Graphics Settings - Grafische instellingen - - - - - Null - Null - - - - OpenGL - OpenGL - - - - Vulkan - Vulkan - - - - GPU renderer - Renderen op videokaart - - - - Enable Renderdoc - Renderdoc inschakelen - - - - Enable shader JIT - Shader JIT inschakelen - - - - Enable VSync - VSync inschakelen - - - - Use ubershaders (No stutter, maybe slower) - Ubershaders gebruiken (geen haperingen, mogelijk langzamer) - - - - Accurate shader multiplication - Nauwkeurige vermenigvuldigen in shaders - - - - Accelerate shaders - Shaders versnellen - - - - Force shadergen when rendering lights - Shadergen afdwingen bij tekenen licht - - - - Light threshold for forcing shadergen - Lichtgrens voor afdwingen shadergen - - - - Audio Settings - Audioinstellingen - - - - LLE - LLE - - - - HLE - HLE - - - - DSP emulation - DSP-emulatie - - - - Enable audio - Audio inschakelen - - - - Enable AAC audio - AAC-audio inschakelen - - - - Print DSP firmware - DSP-firmware afdrukken - - - - Mute audio device - Audioapparaat dempen - - - - Cubic - Kubiek - - - - Linear - Lineair - - - - Volume curve - Volumecurve - - - - Audio device volume - Volume audioapparaat - - - - Battery Settings - Batterij-instellingen - - - - Battery percentage - Batterijpercentage - - - - Charger plugged - Oplader aangesloten - - - - SD Card Settings - Instellingen SD-kaart - - - - Enable virtual SD card - Virtuele SD-kaart inschakelen - - - - Write protect virtual SD card - Virtuele SD-kaart schrijfbeveiligen - - - - Interface - Interface - - - - User Interface settings - Instellingen gebruikersinterface - - - - General - Algemeen - - - - General emulator settings - Algemene emulatorinstellingen - - - - Graphics - Weergave - - - - Graphics emulation and output settings - Instellingen grafische emulatie en weergave - - - - Audio - Audio - - - - Audio emulation and output settings - Instellingen audioemulatie en weergave - - - - Battery - Batterij - - - - Battery emulation settings - Instellingen batterijemulatie - - - - SD Card - SD-kaart - - - - SD Card emulation settings - Instellingen SD-kaart-emulatie - - - - Language change successful - Taal succesvol ingesteld - - - - Restart Panda3DS for the new language to be used. - Herstart Panda3DS om de nieuw gekozen taal te gebruiken. - - - - Language change failed - Wijzigen van taal mislukt - - - - The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code... - De gekozen taal is niet beschikbaar in Panda3DS. Als je dit leest heeft iemand de taalcode verprutst... - - - - MainWindow - - - Alber - Alber - - - - File - Bestand - - - - Emulation - Emulatie - - - - Tools - Hulpmiddelen - - - - About - Over - - - - Load game - Spel laden - - - - Load Lua script - LUA-script laden - - - - Open Panda3DS folder - Open Panda3DS-map - - - - Pause - Pauzeren - - - - Resume - Hervatten - - - - Reset - Reset - - - - Configure - Instellingen - - - - Dump RomFS - RomFS dumpen - - - - Open Lua Editor - Open LUA-editor - - - - Open Cheats Editor - Open cheats-editor - - - - Open Patch Window - Open patchvenster - - - - Open Shader Editor - Open shader-editor - - - - Dump loaded DSP firmware - Geladen DSP-firmware dumpen - - - - About Panda3DS - Over Panda3DS - - - - Select 3DS ROM to load - Kies 3DS ROM om te laden - - - - Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - - - - Select Lua script to load - Kies LUA-script om te laden - - - - Lua scripts (*.lua *.txt) - LUA-scripts (*.lua *.txt) - - - - Select folder to dump RomFS files to - Kies map om RomFS-bestanden heen te dumpen - - - - Invalid format for RomFS dumping - Ongeldig formaat voor RomFS dump - - - - The currently loaded app is not in a format that supports RomFS - Het formaat van de momenteel geladen applicatie ondersteunt geen RomFS - - - - - - OK - OK - - - - No RomFS found - Geen RomFS gevonden - - - - No RomFS partition was found in the loaded app - Geen RomFS-partitie gevonden in de geladen applicatie - - - - Select file - Selecteer bestand - - - - DSP firmware file (*.cdc) - DSP-firmware-bestand (*.cdc) - - - - No DSP firmware loaded - Geen DSP-firmware geladen - - - - The currently loaded app has not uploaded a firmware to the DSP - De momenteel geladen applicatie heeft geen firmware geüpload naar de DSP - - - - Failed to open output file - Uitvoerbestand openen mislukt - - - - The currently loaded DSP firmware could not be written to the selected file. Please make sure you have permission to access this file - De momenteel geladen DSP-firmware kan niet worden geschreven naar het gekozen bestand. Controleer de permissies van het gekozen bestand - - - - PatchWindow - - - ROM patcher - ROM-patcher - - - - Select input file - Kies invoerbestand - - - - - Select - Kies - - - - - Select patch file - Kies patchbestand - - - - Apply patch - Patch toepassen - - - - Select file to patch - Kies bestand om te patchen - - - - - All files (*.*) - Alle bestanden (*.*) - - - - Patch files (*.ips *.ups *.bps) - Patch-bestanden (*.ips *.ups *.bps) - - - - Paths not provided correctly - Paden incorrect meegegeven - - - - Please provide paths for both the input file and the patch file - Geef paden van invoerbestand en patchbestand op - - - - Select file - Kies bestand - - - - No output path - Geen uitvoerpad - - - - No path was provided for the output file, no patching was done - Geen pad opgegeven voor uitvoerbestand, patch niet toegepast - - - - Unknown patch format - Onbekend patchformaat - - - - Unknown format for patch file. Currently IPS, UPS and BPS are supported - Ongeldig formaat van patchbestand. Momenteel wordt IPS, UPS en BPS ondersteund - - - - Failed to open input files - Openen van invoerbestanden mislukt - - - - Make sure they're in a directory Panda3DS has access to - Zorg ervoor dat ze in een map staan waar Panda3DS toegang toe heeft - - - - Patching Success - Patch succesvol - - - - Your file was patched successfully. - Het bestand is succesvol gepatcht. - - - - Checksum mismatch - Checksum komt niet overeen - - - - Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct - Patch is succesvol toegepast maar de checksum komt niet overeen. Invoer- of uitvoerbestand is mogelijk ongeldig - - - - Patching error - Fout tijdens patchen - - - - An error occured while patching - Er is bij het patchen een fout opgetreden - - - - PatchWindow::PatchWindow - - - OK - OK - - - - ShaderEditorWindow - - - Reload shader - Shader herladen - - - - TextEditorWindow - - - Lua Editor - LUA-editor - - - - Load script - Script laden - - - \ No newline at end of file diff --git a/docs/translations/pt_br.ts b/docs/translations/pt_br.ts deleted file mode 100644 index e2afe3a9..00000000 --- a/docs/translations/pt_br.ts +++ /dev/null @@ -1,764 +0,0 @@ - - - AboutWindow - - - About Panda3DS - Sobre o Panda3DS - - - - Panda3DS is a free and open source Nintendo 3DS emulator, for Windows, MacOS and Linux - Panda3DS é um emulador gratuito e open-source para Windows, MacOS e Linux - - - - Visit panda3ds.com for help with Panda3DS and links to our official support sites. - Visite panda3ds.com para obter ajuda e links de suporte oficial. - - - - Panda3DS is developed by volunteers in their spare time. Below is a list of some of these volunteers who've agreed to be listed here, in no particular order.<br>If you think you should be listed here too, please inform us<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - Panda3DS é desenvolvido por voluntários em seu tempo livre. Abaixo a lista de alguns volutário<br>(Lista sem nenhuma ordem específica)<br>Se acha que seu nome deveria estar listado aqui por favor informe-nos<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - - - - CheatEditDialog - - - Edit Cheat - Editar Trapaças - - - - Cheat name - Nome da trapaça - - - - CheatEntryWidget - - - Edit - Editar - - - - CheatsWindow - - - Cheats - Trapaça - - - - Add - Adicionar - - - - Remove - Sair - - - - ConfigWindow - - - Configuration - Configurações - - - - Interface Settings - Configurações da interface - - - - System - Sistema - - - - Light - Claro - - - - Dark - Escuro - - - - Greetings Cat - - - - - Cream - - - - - Color theme - Tema de color - - - - Happy panda - Panda feliz - - - - Happy panda (colourful) - Panda feliz (colorido) - - - - Sleepy panda - Panda sonolento - - - - Cow panda - Panda vaca - - - - The penguin from SkyEmu - O pinguim do SkyEmu - - - - Window icon - Icone da janela - - - - Language - Idioma - - - - Show version on window title - Mostrar versão na barra de título - - - - Alber v%1 - Alber v%1 - - - - Alber - Alber - - - - Remember window position - Lembrar posição da janela - - - - General Settings - Configurações gerais - - - - Browse... - Navegar... - - - - Select Directory - Selecionar o diretório - - - - Default ROMs path - Diretório padrão das ROMs - - - - Enable Discord RPC - Ativar Discord RPC - - - - Use portable build - Usar build portatil - - - - Print version in console output - Imprimir versão no console - - - - Graphics Settings - Configurações gráficas - - - - - Null - Nulo - - - - OpenGL - OpenGL - - - - Vulkan - Vulkan - - - - GPU renderer - Renderizador GPU - - - - Enable Renderdoc - Ativar Renderdoc - - - - Enable shader JIT - Ativar JIT de shaders - - - - Enable VSync - Ativar VSync - - - - Use ubershaders (No stutter, maybe slower) - Usar ubershaders (No stuttering, puede ser más lento) - - - - Accurate shader multiplication - Multiplicação precisa de shaders - - - - Accelerate shaders - Graficos acelerados - - - - Force shadergen when rendering lights - Forçar shadergen ao renderizar luzes. - - - - Light threshold for forcing shadergen - Limear de luzes para forçar shadergen - - - - Audio Settings - Configurações de audio - - - - LLE - LLE - - - - HLE - HLE - - - - DSP emulation - Emulação DSP - - - - Enable audio - Ativar audio - - - - Enable AAC audio - Ativar audio AAC - - - - Print DSP firmware - Imprimir firmware DSP - - - - Mute audio device - Silenciar dispositivo de audio - - - - Cubic - Cúbico - - - - Linear - Linear - - - - Volume curve - Curva de volume - - - - Audio device volume - Volume do dispositivo de audio - - - - Battery Settings - Configurações de bateria - - - - Battery percentage - Porcentagem da bateria - - - - Charger plugged - Carregador conectado - - - - SD Card Settings - Configurações do cartão de memoria - - - - Enable virtual SD card - Ativar cartão de memoria virtual - - - - Write protect virtual SD card - Proteger cartão de memoria virtual contra escrita - - - - Interface - Interface - - - - User Interface settings - Configurações da interface de usuario - - - - General - Geral - - - - General emulator settings - Configurações gerais do emulador - - - - Graphics - Gráficos - - - - Graphics emulation and output settings - Configurações da emulação e saida de video - - - - Audio - Audio - - - - Audio emulation and output settings - Configurações da emulação e saida de audio - - - - Battery - Bateria - - - - Battery emulation settings - Configuração da emulação da bateria - - - - SD Card - Cartão de memoria - - - - SD Card emulation settings - Configurar a emulação do cartão de memoria - - - - Language change successful - Idioma alterado com sucesso - - - - Restart Panda3DS for the new language to be used. - Para aplicar o novo idioma feche e abra o emulador. - - - - Language change failed - A mudaça de idioma falhou - - - - The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code... - O idioma selecionado não existe no Panda3DS. Se você esta vendo esse erro existe um erro no codigo... - - - - MainWindow - - - Alber - Alber - - - - File - Arquivo - - - - Emulation - Emulação - - - - Tools - Ferramentas - - - - About - Sobre - - - - Load game - Carregar jogo - - - - Load Lua script - Carregar Script Lua - - - - Open Panda3DS folder - Abrir pasta do Panda3DS - - - - Pause - Pausar - - - - Resume - Continuar - - - - Reset - Reiniciar - - - - Configure - Configurar - - - - Dump RomFS - Extrair RomFS - - - - Open Lua Editor - Abrir editor Lua - - - - Open Cheats Editor - Abrir editor de trapaças - - - - Open Patch Window - Abrir janela de trapaças - - - - Open Shader Editor - Abrir editor de shaders - - - - Dump loaded DSP firmware - Extrair firmware DSP carregado - - - - About Panda3DS - Sobre o Panda3DS - - - - Select 3DS ROM to load - Selecione uma ROM de 3DS para carregar - - - - Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - ROMs de Nintendo 3DS (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - - - - Select Lua script to load - Selecione uma ROM de 3DS para carregar - - - - Lua scripts (*.lua *.txt) - Scripts Lua (*.lua *.txt) - - - - Select folder to dump RomFS files to - Selecione onde a RomFS será extraida - - - - Invalid format for RomFS dumping - Formato de RomFS inválido - - - - The currently loaded app is not in a format that supports RomFS - O aplicativo carregado não suporta RomFS - - - - - - OK - OK - - - - No RomFS found - RomFS no encontrado - - - - No RomFS partition was found in the loaded app - A partição RomFS não foi encontrada no aplicativo - - - - Select file - Selecionar arquivo - - - - DSP firmware file (*.cdc) - Arquivo do firmware DSP (*.cdc) - - - - No DSP firmware loaded - Nenhum firmware DSP carregado - - - - The currently loaded app has not uploaded a firmware to the DSP - A aplicação não carregou um firmware DSP - - - - Failed to open output file - Erro ao abrir arquvio de destino - - - - The currently loaded DSP firmware could not be written to the selected file. Please make sure you have permission to access this file - O firmware DSP carregado não pode escrever no arquivo selecionado. Porfavor veja se você tem permissão para modificalo-lo. - - - - PatchWindow - - - ROM patcher - Editor de ROM - - - - Select input file - Selecione o arquivo de entrada - - - - - Select - Selecionar - - - - - Select patch file - Seleciona um arquivo de patch - - - - Apply patch - Aplicar patch - - - - Select file to patch - Selecione um arquivo para editar - - - - - All files (*.*) - Todos os arquivos (*.*) - - - - Patch files (*.ips *.ups *.bps) - Arquivos de patch (*.ips *.ups *.bps) - - - - Paths not provided correctly - Diretórios não fornecidos corretamente - - - - Please provide paths for both the input file and the patch file - Por favor selecione os diretórios tanto para o arquivo de origem como para o patch - - - - Select file - Selecionar arquivo - - - - No output path - Sem diretório de saida - - - - No path was provided for the output file, no patching was done - Nenhum diretorio de destino foi fornecido, patch não aplicado. - - - - Unknown patch format - Formato de patch desconhecido - - - - Unknown format for patch file. Currently IPS, UPS and BPS are supported - Arquivo de patch inválido. Atualmete são suportado patches nos formatos IPS, UPS e BPS - - - - Failed to open input files - Falha ao abrir os arquivos - - - - Make sure they're in a directory Panda3DS has access to - Certifique-se de que eles estejam em um diretório ao qual o Panda3DS tenha acesso - - - - Patching Success - Patch aplicado - - - - Your file was patched successfully. - O patch foi aplicado com sucesso ao arquivo - - - - Checksum mismatch - Checagem inválido - - - - Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct - O patch foi aplicado com sucesso porem a checagem falhou. O arquivo de origem ou destino pode não estar correto. - - - - Patching error - Erro de patch - - - - An error occured while patching - Um erro ocorreu ao aplicar o patch - - - - PatchWindow::PatchWindow - - - OK - OK - - - - ShaderEditorWindow - - - Reload shader - Recargar shader - - - - TextEditorWindow - - - Lua Editor - Editor Lua - - - - Load script - Cargar script - - - - diff --git a/docs/translations/sv.ts b/docs/translations/sv.ts deleted file mode 100644 index 21f573dc..00000000 --- a/docs/translations/sv.ts +++ /dev/null @@ -1,774 +0,0 @@ - - - - sv - - Daniel Nylander <github@danielnylander.se> - - - - Poedit 3.5 - Project-Id-Version,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,Language,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Qt-Contexts,X-Generator - - AboutWindow - - - About Panda3DS - Om Panda3DS - - - - Panda3DS is a free and open source Nintendo 3DS emulator, for Windows, MacOS and Linux - Panda3DS är en Nintendo 3DS-emulator med fri och öppen källkod för Windows, MacOS och Linux - - - - Visit panda3ds.com for help with Panda3DS and links to our official support sites. - Besök panda3ds.com för att få hjälp med Panda3DS och länkar till våra officiella supportwebbplatser. - - - - Panda3DS is developed by volunteers in their spare time. Below is a list of some of these volunteers who've agreed to be listed here, in no particular order.<br>If you think you should be listed here too, please inform us<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - Panda3DS utvecklas av volontärer på deras fritid. Nedan finns en lista över några av dessa volontärer som har gått med på att listas här, utan någon särskild ordning.<br>Om du tycker att du också borde listas här, informera oss<br><br>- Peach (wheremyfoodat)<br>- noumidev<br>- liuk707<br>- Wunk<br>- marysaka<br>- Sky<br>- merryhime<br>- TGP17<br>- Shadow<br> - - - - CheatEditDialog - - - Edit Cheat - Redigera fusk - - - - Cheat name - Fusknamn - - - - CheatEntryWidget - - - Edit - Redigera - - - - CheatsWindow - - - Cheats - Fusk - - - - Add - Lägg till - - - - Remove - Ta bort - - - - ConfigWindow - - - Configuration - Konfiguration - - - - Interface Settings - Inställningar för gränssnitt - - - - System - System - - - - Light - Ljus - - - - Dark - Mörk - - - - Greetings Cat - Hälsningskatt - - - - Cream - Grädde - - - - Color theme - Färgtema - - - - Happy panda - Glad panda - - - - Happy panda (colourful) - Glad panda (färgglad) - - - - Sleepy panda - Sömnig panda - - - - Cow panda - Ko-panda - - - - The penguin from SkyEmu - Pingvinen från SkyEmu - - - - Window icon - Fönsterikon - - - - Language - Språk - - - - Show version on window title - Visa version på fönstertitel - - - - - Alber v%1 - Alber v%1 - - - - Alber - Alber - - - - Remember window position - Kom ihåg fönstrets position - - - - General Settings - Allmänna inställningar - - - - Browse... - Bläddra... - - - - Select Directory - Välj katalog - - - - Default ROMs path - Standardsökväg för ROMar - - - - Enable Discord RPC - Aktivera Discord RPC - - - - Use portable build - Använd portabelt bygge - - - - Print version in console output - Skriv ut versionen i konsolutmatningen - - - - Graphics Settings - Grafikinställningar - - - - - Null - Null - - - - OpenGL - OpenGL - - - - Vulkan - Vulkan - - - - GPU renderer - GPU-rendering - - - - Enable Renderdoc - Aktivera Renderdoc - - - - Enable shader JIT - Aktivera shader JIT - - - - Enable VSync - Aktivera VSync - - - - Use ubershaders (No stutter, maybe slower) - Använda ubershaders (inga hackningar, kanske långsammare) - - - - Accurate shader multiplication - Korrekt multiplicering av shaders - - - - Accelerate shaders - Snabbare shaders - - - - Force shadergen when rendering lights - Tvinga fram shadergen vid rendering av ljus - - - - Light threshold for forcing shadergen - Ljuströskel för att tvinga shadergen - - - - Audio Settings - Ljudinställningar - - - - LLE - LLE - - - - HLE - HLE - - - - DSP emulation - DSP-emulering - - - - Enable audio - Aktivera ljud - - - - Enable AAC audio - Aktivera AAC-ljud - - - - Print DSP firmware - Skriv ut firmware för DSP - - - - Mute audio device - Stäng av ljudet på audioenheten - - - - Cubic - Kubisk - - - - Linear - Linjär - - - - Volume curve - Volymkurva - - - - Audio device volume - Ljudenhetens volym - - - - Battery Settings - Batteriinställningar - - - - Battery percentage - Batteriprocent - - - - Charger plugged - Laddaren är ansluten - - - - SD Card Settings - Inställningar för SD-kort - - - - Enable virtual SD card - Aktivera virtuellt SD-kort - - - - Write protect virtual SD card - Skrivskydd för virtuellt SD-kort - - - - Interface - Gränssnitt - - - - User Interface settings - Inställningar för användargränssnitt - - - - General - Allmänt - - - - General emulator settings - Allmänna inställningar för emulatorn - - - - Graphics - Grafik - - - - Graphics emulation and output settings - Inställningar för grafikemulering och utdata - - - - Audio - Ljud - - - - Audio emulation and output settings - Inställningar för ljudemulering och utdata - - - - Battery - Batteri - - - - Battery emulation settings - Inställningar för batteriemulering - - - - SD Card - SD-kort - - - - SD Card emulation settings - Inställningar för emulering av SD-kort - - - - Language change successful - Språkändringen lyckades - - - - Restart Panda3DS for the new language to be used. - Starta om Panda3DS för att det nya språket ska kunna användas. - - - - Language change failed - Språkändringen misslyckades - - - - The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code... - Det språk du valde ingår inte i Panda3DS. Om du ser detta, har någon rört till koden för språkgränssnittet... - - - - MainWindow - - - Alber - Alber - - - - File - Arkiv - - - - Emulation - Emulering - - - - Tools - Verktyg - - - - About - Om - - - - Load game - Läs in spel - - - - Load Lua script - Läs in Lua-skript - - - - Open Panda3DS folder - Öppna Panda3DS-mappen - - - - Pause - Pausa - - - - Resume - Återuppta - - - - Reset - Starta om - - - - Configure - Konfigurera - - - - Dump RomFS - Dumpa RomFS - - - - Open Lua Editor - Öppna Lua-redigeraren - - - - Open Cheats Editor - Öppna fuskredigeraren - - - - Open Patch Window - Öppna patchfönstret - - - - Open Shader Editor - Öppna shader-redigeraren - - - - Dump loaded DSP firmware - Dumpa inläst DSP-firmware - - - - About Panda3DS - Om Panda3DS - - - - Select 3DS ROM to load - Välj 3DS ROM att läsa in - - - - Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - Nintendo 3DS ROM (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf) - - - - Select Lua script to load - Välj Lua-skript som ska läsas in - - - - Lua scripts (*.lua *.txt) - Lua-skript (*.lua *.txt) - - - - Select folder to dump RomFS files to - Välj mapp för att dumpa RomFS-filer till - - - - Invalid format for RomFS dumping - Ogiltigt format för RomFS-dumpning - - - - The currently loaded app is not in a format that supports RomFS - Den aktuella appen är inte i ett format som stöder RomFS - - - - - - OK - Ok - - - - No RomFS found - Ingen RomFS hittades - - - - No RomFS partition was found in the loaded app - Ingen RomFS-partition hittades i den inlästa appen - - - - Select file - Välj fil - - - - DSP firmware file (*.cdc) - DSP firmware-fil (*.cdc) - - - - No DSP firmware loaded - Ingen firmware för DSP inläst - - - - The currently loaded app has not uploaded a firmware to the DSP - Den aktuella appen har inte skickat upp någon firmware till DSP:n - - - - Failed to open output file - Misslyckades med att öppna utdatafilen - - - - The currently loaded DSP firmware could not be written to the selected file. Please make sure you have permission to access this file - Den aktuella DSP-firmware som lästes in kunde inte skrivas till den valda filen. Kontrollera att du har behörighet att komma åt den här filen - - - - PatchWindow - - - ROM patcher - ROM-patchare - - - - Select input file - Välj inmatningsfil - - - - - Select - Välj - - - - - Select patch file - Välj patchfil - - - - Apply patch - Applicera patch - - - - Select file to patch - Välj fil som ska patchas - - - - - All files (*.*) - Alla filer (*.*) - - - - Patch files (*.ips *.ups *.bps) - Patch-filer (*.ips *.ups *.bps) - - - - Paths not provided correctly - Sökvägar anges inte korrekt - - - - Please provide paths for both the input file and the patch file - Ange sökvägar för både indatafilen och patchfilen - - - - Select file - Välj fil - - - - No output path - Ingen sökväg för utmatning - - - - No path was provided for the output file, no patching was done - Ingen sökväg angavs för utdatafilen, ingen patchning gjordes - - - - Unknown patch format - Okänt patchformat - - - - Unknown format for patch file. Currently IPS, UPS and BPS are supported - Okänt format för patchfil. För närvarande stöds IPS, UPS och BPS - - - - Failed to open input files - Misslyckades med att öppna indatafiler - - - - Make sure they're in a directory Panda3DS has access to - Se till att de finns i en katalog som Panda3DS har tillgång till - - - - Patching Success - Patchning lyckades - - - - Your file was patched successfully. - Din fil patchades. - - - - Checksum mismatch - Kontrollsumman stämmer inte överens - - - - Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct - Patchen applicerades men en avvikelse i kontrollsumman upptäcktes. Inmatnings- eller utdatafilerna kanske inte är korrekta - - - - Patching error - Fel vid patchning - - - - An error occured while patching - Ett fel uppstod vid patchning - - - - PatchWindow::PatchWindow - - - OK - Ok - - - - ShaderEditorWindow - - - Reload shader - Läs om shader - - - - TextEditorWindow - - - Lua Editor - Lua-redigerare - - - - Load script - Läs in skript - - - diff --git a/include/PICA/draw_acceleration.hpp b/include/PICA/draw_acceleration.hpp deleted file mode 100644 index 6a66cdc1..00000000 --- a/include/PICA/draw_acceleration.hpp +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -#include - -#include "helpers.hpp" - -namespace PICA { - struct DrawAcceleration { - static constexpr u32 maxAttribCount = 16; - static constexpr u32 maxLoaderCount = 12; - - struct AttributeInfo { - u32 offset; - u32 stride; - - u8 type; - u8 componentCount; - - std::array fixedValue; // For fixed attributes - }; - - struct Loader { - // Data to upload for this loader - u8* data; - usize size; - }; - - u8* indexBuffer; - - // Minimum and maximum index in the index buffer for a draw call - u16 minimumIndex, maximumIndex; - u32 totalAttribCount; - u32 totalLoaderCount; - u32 enabledAttributeMask; - u32 fixedAttributes; - u32 vertexDataSize; - - std::array attributeInfo; - std::array loaders; - - bool canBeAccelerated; - bool indexed; - bool useShortIndices; - }; -} // namespace PICA \ No newline at end of file diff --git a/include/PICA/dynapica/pica_recs.hpp b/include/PICA/dynapica/pica_recs.hpp index eb0cf404..acfd226e 100644 --- a/include/PICA/dynapica/pica_recs.hpp +++ b/include/PICA/dynapica/pica_recs.hpp @@ -2,7 +2,7 @@ #include "helpers.hpp" #include "vertex_loader_rec.hpp" -// Common file for our PICA JITs (From PICA shader -> CPU assembly) +// Common file for our PICA JITs (From vertex config -> CPU assembly and from PICA shader -> CPU assembly) namespace Dynapica { #ifdef PANDA3DS_DYNAPICA_SUPPORTED diff --git a/include/PICA/dynapica/shader_rec.hpp b/include/PICA/dynapica/shader_rec.hpp index a242d02f..e8b6afed 100644 --- a/include/PICA/dynapica/shader_rec.hpp +++ b/include/PICA/dynapica/shader_rec.hpp @@ -1,15 +1,13 @@ #pragma once #include "PICA/shader.hpp" -#if defined(PANDA3DS_DYNAPICA_SUPPORTED) && (defined(PANDA3DS_X64_HOST) || defined(PANDA3DS_ARM64_HOST)) +#if defined(PANDA3DS_DYNAPICA_SUPPORTED) && defined(PANDA3DS_X64_HOST) #define PANDA3DS_SHADER_JIT_SUPPORTED #include #include #ifdef PANDA3DS_X64_HOST #include "shader_rec_emitter_x64.hpp" -#elif defined(PANDA3DS_ARM64_HOST) -#include "shader_rec_emitter_arm64.hpp" #endif #endif @@ -22,11 +20,8 @@ class ShaderJIT { ShaderCache cache; #endif - bool accurateMul = false; public: - void setAccurateMul(bool value) { accurateMul = value; } - #ifdef PANDA3DS_SHADER_JIT_SUPPORTED // Call this before starting to process a batch of vertices // This will read the PICA config (uploaded shader and shader operand descriptors) and search if we've already compiled this shader @@ -39,11 +34,11 @@ class ShaderJIT { static constexpr bool isAvailable() { return true; } #else void prepare(PICAShader& shaderUnit) { - Helpers::panic("Shader JIT: Tried to run ShaderJIT::Prepare on platform that does not support shader jit"); + Helpers::panic("Vertex Loader JIT: Tried to run ShaderJIT::Prepare on platform that does not support shader jit"); } void run(PICAShader& shaderUnit) { - Helpers::panic("Shader JIT: Tried to run ShaderJIT::Run on platform that does not support shader jit"); + Helpers::panic("Vertex Loader JIT: Tried to run ShaderJIT::Run on platform that does not support shader jit"); } // Define dummy callback. This should never be called if the shader JIT is not supported diff --git a/include/PICA/dynapica/shader_rec_emitter_arm64.hpp b/include/PICA/dynapica/shader_rec_emitter_arm64.hpp deleted file mode 100644 index 9351f383..00000000 --- a/include/PICA/dynapica/shader_rec_emitter_arm64.hpp +++ /dev/null @@ -1,137 +0,0 @@ -#pragma once - -// Only do anything if we're on an x64 target with JIT support enabled -#if defined(PANDA3DS_DYNAPICA_SUPPORTED) && defined(PANDA3DS_ARM64_HOST) -#include -#include -#include - -#include "PICA/shader.hpp" -#include "helpers.hpp" -#include "logger.hpp" - -class ShaderEmitter : private oaknut::CodeBlock, public oaknut::CodeGenerator { - static constexpr size_t executableMemorySize = PICAShader::maxInstructionCount * 96; // How much executable memory to alloc for each shader - // Allocate some extra space as padding for security purposes in the extremely unlikely occasion we manage to overflow the above size - static constexpr size_t allocSize = executableMemorySize + 0x1000; - - // If the swizzle field is this value then the swizzle pattern is .xyzw so we don't need a shuffle - static constexpr uint noSwizzle = 0x1B; - - using f24 = Floats::f24; - using vec4f = std::array; - - // An array of labels (incl pointers) to each compiled (to x64) PICA instruction - std::array instructionLabels; - // A vector of PCs that can potentially return based on the state of the PICA callstack. - // Filled before compiling a shader by scanning the code for call instructions - std::vector returnPCs; - - // An array of 128-bit masks for blending registers together to perform masked writes. - // Eg for writing only the x and y components, the mask is 0x00000000'00000000'FFFFFFFF'FFFF - oaknut::Label blendMasks; - - u32 recompilerPC = 0; // PC the recompiler is currently recompiling @ - u32 loopLevel = 0; // The current loop nesting level (0 = not in a loop) - - // Shows whether the loaded shader has any log2 and exp2 instructions - bool codeHasLog2 = false; - bool codeHasExp2 = false; - // Whether to compile this shader using accurate, safe, non-IEEE multiplication (slow) or faster but less accurate mul - bool useSafeMUL = false; - - oaknut::Label log2Func, exp2Func; - oaknut::Label emitLog2Func(); - oaknut::Label emitExp2Func(); - - // Emit a PICA200-compliant multiplication that handles "0 * inf = 0" - void emitSafeMUL(oaknut::QReg src1, oaknut::QReg src2, oaknut::QReg scratch0); - - template - T getLabelPointer(const oaknut::Label& label) { - auto pointer = reinterpret_cast(oaknut::CodeBlock::ptr()) + label.offset(); - return reinterpret_cast(pointer); - } - - // Compile all instructions from [current recompiler PC, end) - void compileUntil(const PICAShader& shaderUnit, u32 endPC); - // Compile instruction "instr" - void compileInstruction(const PICAShader& shaderUnit); - - bool isCall(u32 instruction) { - const u32 opcode = instruction >> 26; - return (opcode == ShaderOpcodes::CALL) || (opcode == ShaderOpcodes::CALLC) || (opcode == ShaderOpcodes::CALLU); - } - - // Scan the shader code for call instructions to fill up the returnPCs vector before starting compilation - // We also scan for log2/exp2 instructions to see whether to emit the relevant functions - void scanCode(const PICAShader& shaderUnit); - - // Load register with number "srcReg" indexed by index "idx" into the arm64 register "reg" - template - void loadRegister(oaknut::QReg dest, const PICAShader& shader, u32 src, u32 idx, u32 operandDescriptor); - void storeRegister(oaknut::QReg source, const PICAShader& shader, u32 dest, u32 operandDescriptor); - - const vec4f& getSourceRef(const PICAShader& shader, u32 src); - const vec4f& getDestRef(const PICAShader& shader, u32 dest); - - // Check the value of the cmp register for instructions like ifc and callc - // Result is returned in the zero flag. If the comparison is true then zero == 1, else zero == 0 - void checkCmpRegister(const PICAShader& shader, u32 instruction); - - // Check the value of the bool uniform for instructions like ifu and callu - // Result is returned in the zero flag. If the comparison is true then zero == 0, else zero == 1 (Opposite of checkCmpRegister) - void checkBoolUniform(const PICAShader& shader, u32 instruction); - - // Instruction recompilation functions - void recADD(const PICAShader& shader, u32 instruction); - void recCALL(const PICAShader& shader, u32 instruction); - void recCALLC(const PICAShader& shader, u32 instruction); - void recCALLU(const PICAShader& shader, u32 instruction); - void recCMP(const PICAShader& shader, u32 instruction); - void recDP3(const PICAShader& shader, u32 instruction); - void recDP4(const PICAShader& shader, u32 instruction); - void recDPH(const PICAShader& shader, u32 instruction); - void recEMIT(const PICAShader& shader, u32 instruction); - void recEND(const PICAShader& shader, u32 instruction); - void recEX2(const PICAShader& shader, u32 instruction); - void recFLR(const PICAShader& shader, u32 instruction); - void recIFC(const PICAShader& shader, u32 instruction); - void recIFU(const PICAShader& shader, u32 instruction); - void recJMPC(const PICAShader& shader, u32 instruction); - void recJMPU(const PICAShader& shader, u32 instruction); - void recLG2(const PICAShader& shader, u32 instruction); - void recLOOP(const PICAShader& shader, u32 instruction); - void recMAD(const PICAShader& shader, u32 instruction); - void recMAX(const PICAShader& shader, u32 instruction); - void recMIN(const PICAShader& shader, u32 instruction); - void recMOVA(const PICAShader& shader, u32 instruction); - void recMOV(const PICAShader& shader, u32 instruction); - void recMUL(const PICAShader& shader, u32 instruction); - void recRCP(const PICAShader& shader, u32 instruction); - void recRSQ(const PICAShader& shader, u32 instruction); - void recSETEMIT(const PICAShader& shader, u32 instruction); - void recSGE(const PICAShader& shader, u32 instruction); - void recSLT(const PICAShader& shader, u32 instruction); - - MAKE_LOG_FUNCTION(log, shaderJITLogger) - - public: - // Callback type used for instructions - using InstructionCallback = const void (*)(PICAShader& shaderUnit); - // Callback type used for the JIT prologue. This is what the caller will call - using PrologueCallback = const void (*)(PICAShader& shaderUnit, InstructionCallback cb); - - PrologueCallback prologueCb = nullptr; - - // Initialize our emitter with "allocSize" bytes of memory allocated for the code buffer - ShaderEmitter(bool useSafeMUL) : oaknut::CodeBlock(allocSize), oaknut::CodeGenerator(oaknut::CodeBlock::ptr()), useSafeMUL(useSafeMUL) {} - - // PC must be a valid entrypoint here. It doesn't have that much overhead in this case, so we use std::array<>::at() to assert it does - InstructionCallback getInstructionCallback(u32 pc) { return getLabelPointer(instructionLabels.at(pc)); } - - PrologueCallback getPrologueCallback() { return prologueCb; } - void compile(const PICAShader& shaderUnit); -}; - -#endif // arm64 recompiler check diff --git a/include/PICA/dynapica/shader_rec_emitter_x64.hpp b/include/PICA/dynapica/shader_rec_emitter_x64.hpp index 85c85bf8..0338911c 100644 --- a/include/PICA/dynapica/shader_rec_emitter_x64.hpp +++ b/include/PICA/dynapica/shader_rec_emitter_x64.hpp @@ -29,11 +29,9 @@ class ShaderEmitter : public Xbyak::CodeGenerator { std::vector returnPCs; // Vector value of (-0.0, -0.0, -0.0, -0.0) for negating vectors via pxor - Xbyak::Label negateVector; + Label negateVector; // Vector value of (1.0, 1.0, 1.0, 1.0) for SLT(i)/SGE(i) - Xbyak::Label onesVector; - // Vector value of (0xFF, 0xFF, 0xFF, 0) for setting the w component to 0 in DP3 - Xbyak::Label dp3Vector; + Label onesVector; u32 recompilerPC = 0; // PC the recompiler is currently recompiling @ u32 loopLevel = 0; // The current loop nesting level (0 = not in a loop) @@ -45,17 +43,12 @@ class ShaderEmitter : public Xbyak::CodeGenerator { // Shows whether the loaded shader has any log2 and exp2 instructions bool codeHasLog2 = false; bool codeHasExp2 = false; - // Whether to compile this shader using accurate, safe, non-IEEE multiplication (slow) or faster but less accurate mul - bool useSafeMUL = false; - + Xbyak::Label log2Func, exp2Func; Xbyak::Label emitLog2Func(); Xbyak::Label emitExp2Func(); Xbyak::util::Cpu cpuCaps; - // Emit a PICA200-compliant multiplication that handles "0 * inf = 0" - void emitSafeMUL(Xbyak::Xmm src1, Xbyak::Xmm src2, Xbyak::Xmm scratch); - // Compile all instructions from [current recompiler PC, end) void compileUntil(const PICAShader& shaderUnit, u32 endPC); // Compile instruction "instr" @@ -72,8 +65,8 @@ class ShaderEmitter : public Xbyak::CodeGenerator { // Load register with number "srcReg" indexed by index "idx" into the xmm register "reg" template - void loadRegister(Xbyak::Xmm dest, const PICAShader& shader, u32 src, u32 idx, u32 operandDescriptor); - void storeRegister(Xbyak::Xmm source, const PICAShader& shader, u32 dest, u32 operandDescriptor); + void loadRegister(Xmm dest, const PICAShader& shader, u32 src, u32 idx, u32 operandDescriptor); + void storeRegister(Xmm source, const PICAShader& shader, u32 dest, u32 operandDescriptor); const vec4f& getSourceRef(const PICAShader& shader, u32 src); const vec4f& getDestRef(const PICAShader& shader, u32 dest); @@ -132,7 +125,7 @@ class ShaderEmitter : public Xbyak::CodeGenerator { PrologueCallback prologueCb = nullptr; // Initialize our emitter with "allocSize" bytes of RWX memory - ShaderEmitter(bool useSafeMUL) : Xbyak::CodeGenerator(allocSize), useSafeMUL(useSafeMUL) { + ShaderEmitter() : Xbyak::CodeGenerator(allocSize) { cpuCaps = Xbyak::util::Cpu(); haveSSE4_1 = cpuCaps.has(Xbyak::util::Cpu::tSSE41); diff --git a/include/PICA/dynapica/x64_regs.hpp b/include/PICA/dynapica/x64_regs.hpp index e4450870..16bc7ca3 100644 --- a/include/PICA/dynapica/x64_regs.hpp +++ b/include/PICA/dynapica/x64_regs.hpp @@ -2,37 +2,39 @@ #ifdef PANDA3DS_X64_HOST #include "xbyak/xbyak.h" +using namespace Xbyak; +using namespace Xbyak::util; #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) #define PANDA3DS_MS_ABI -constexpr Xbyak::Reg32 arg1 = Xbyak::util::ecx; // register where first arg is stored -constexpr Xbyak::Reg32 arg2 = Xbyak::util::edx; // register where second arg is stored -constexpr Xbyak::Reg32 arg3 = Xbyak::util::r8d; // register where third arg is stored -constexpr Xbyak::Reg32 arg4 = Xbyak::util::r9d; // register where fourth arg is stored +constexpr Reg32 arg1 = ecx; // register where first arg is stored +constexpr Reg32 arg2 = edx; // register where second arg is stored +constexpr Reg32 arg3 = r8d; // register where third arg is stored +constexpr Reg32 arg4 = r9d; // register where fourth arg is stored // Similar for floating point and vector arguemnts. -constexpr Xbyak::Xmm arg1f = Xbyak::util::xmm0; -constexpr Xbyak::Xmm arg2f = Xbyak::util::xmm1; -constexpr Xbyak::Xmm arg3f = Xbyak::util::xmm2; -constexpr Xbyak::Xmm arg4f = Xbyak::util::xmm3; +constexpr Xmm arg1f = xmm0; +constexpr Xmm arg2f = xmm1; +constexpr Xmm arg3f = xmm2; +constexpr Xmm arg4f = xmm3; constexpr bool isWindows() { return true; } #else // System V calling convention #define PANDA3DS_SYSV_ABI -constexpr Xbyak::Reg32 arg1 = Xbyak::util::edi; -constexpr Xbyak::Reg32 arg2 = Xbyak::util::esi; -constexpr Xbyak::Reg32 arg3 = Xbyak::util::edx; -constexpr Xbyak::Reg32 arg4 = Xbyak::util::ecx; +constexpr Reg32 arg1 = edi; +constexpr Reg32 arg2 = esi; +constexpr Reg32 arg3 = edx; +constexpr Reg32 arg4 = ecx; -constexpr Xbyak::Xmm arg1f = Xbyak::util::xmm0; -constexpr Xbyak::Xmm arg2f = Xbyak::util::xmm1; -constexpr Xbyak::Xmm arg3f = Xbyak::util::xmm2; -constexpr Xbyak::Xmm arg4f = Xbyak::util::xmm3; -constexpr Xbyak::Xmm arg5f = Xbyak::util::xmm4; -constexpr Xbyak::Xmm arg6f = Xbyak::util::xmm5; -constexpr Xbyak::Xmm arg7f = Xbyak::util::xmm6; -constexpr Xbyak::Xmm arg8f = Xbyak::util::xmm7; +constexpr Xmm arg1f = xmm0; +constexpr Xmm arg2f = xmm1; +constexpr Xmm arg3f = xmm2; +constexpr Xmm arg4f = xmm3; +constexpr Xmm arg5f = xmm4; +constexpr Xmm arg6f = xmm5; +constexpr Xmm arg7f = xmm6; +constexpr Xmm arg8f = xmm7; constexpr bool isWindows() { return false; } #endif diff --git a/include/PICA/float_types.hpp b/include/PICA/float_types.hpp index fcc92917..3012ac74 100644 --- a/include/PICA/float_types.hpp +++ b/include/PICA/float_types.hpp @@ -6,125 +6,156 @@ #include #include - #include "helpers.hpp" namespace Floats { - /** - * Template class for converting arbitrary Pica float types to IEEE 754 32-bit single-precision - * floating point. - * - * When decoding, format is as follows: - * - The first `M` bits are the mantissa - * - The next `E` bits are the exponent - * - The last bit is the sign bit - * - * @todo Verify on HW if this conversion is sufficiently accurate. - */ - template - struct Float { - public: - static Float fromFloat32(float val) { - Float ret; - ret.value = val; - return ret; - } + /** + * Template class for converting arbitrary Pica float types to IEEE 754 32-bit single-precision + * floating point. + * + * When decoding, format is as follows: + * - The first `M` bits are the mantissa + * - The next `E` bits are the exponent + * - The last bit is the sign bit + * + * @todo Verify on HW if this conversion is sufficiently accurate. + */ + template + struct Float { + public: + static Float fromFloat32(float val) { + Float ret; + ret.value = val; + return ret; + } - static Float fromRaw(u32 hex) { - Float res; + static Float fromRaw(u32 hex) { + Float res; - const int width = M + E + 1; - const int bias = 128 - (1 << (E - 1)); - int exponent = (hex >> M) & ((1 << E) - 1); - const unsigned mantissa = hex & ((1 << M) - 1); - const unsigned sign = (hex >> (E + M)) << 31; + const int width = M + E + 1; + const int bias = 128 - (1 << (E - 1)); + int exponent = (hex >> M) & ((1 << E) - 1); + const unsigned mantissa = hex & ((1 << M) - 1); + const unsigned sign = (hex >> (E + M)) << 31; - if (hex & ((1 << (width - 1)) - 1)) { - if (exponent == (1 << E) - 1) - exponent = 255; - else - exponent += bias; - hex = sign | (mantissa << (23 - M)) | (exponent << 23); - } else { - hex = sign; - } + if (hex & ((1 << (width - 1)) - 1)) { + if (exponent == (1 << E) - 1) + exponent = 255; + else + exponent += bias; + hex = sign | (mantissa << (23 - M)) | (exponent << 23); + } + else { + hex = sign; + } - std::memcpy(&res.value, &hex, sizeof(float)); + std::memcpy(&res.value, &hex, sizeof(float)); - return res; - } + return res; + } - static Float zero() { return fromFloat32(0.f); } + static Float zero() { + return fromFloat32(0.f); + } - // Not recommended for anything but logging - float toFloat32() const { return value; } + // Not recommended for anything but logging + float toFloat32() const { + return value; + } - double toFloat64() const { return static_cast(value); } + double toFloat64() const { + return static_cast(value); + } - operator float() { return toFloat32(); } + operator float() { + return toFloat32(); + } - operator double() { return toFloat64(); } + operator double() { + return toFloat64(); + } - Float operator*(const Float& flt) const { - float result = value * flt.toFloat32(); - // PICA gives 0 instead of NaN when multiplying by inf - if (std::isnan(result)) - if (!std::isnan(value) && !std::isnan(flt.toFloat32())) result = 0.f; - return Float::fromFloat32(result); - } + Float operator*(const Float& flt) const { + float result = value * flt.toFloat32(); + // PICA gives 0 instead of NaN when multiplying by inf + if (std::isnan(result)) + if (!std::isnan(value) && !std::isnan(flt.toFloat32())) + result = 0.f; + return Float::fromFloat32(result); + } - Float operator/(const Float& flt) const { return Float::fromFloat32(toFloat32() / flt.toFloat32()); } + Float operator/(const Float& flt) const { + return Float::fromFloat32(toFloat32() / flt.toFloat32()); + } - Float operator+(const Float& flt) const { return Float::fromFloat32(toFloat32() + flt.toFloat32()); } + Float operator+(const Float& flt) const { + return Float::fromFloat32(toFloat32() + flt.toFloat32()); + } - Float operator-(const Float& flt) const { return Float::fromFloat32(toFloat32() - flt.toFloat32()); } + Float operator-(const Float& flt) const { + return Float::fromFloat32(toFloat32() - flt.toFloat32()); + } - Float& operator*=(const Float& flt) { - value = operator*(flt).value; - return *this; - } + Float& operator*=(const Float& flt) { + value = operator*(flt).value; + return *this; + } - Float& operator/=(const Float& flt) { - value /= flt.toFloat32(); - return *this; - } + Float& operator/=(const Float& flt) { + value /= flt.toFloat32(); + return *this; + } - Float& operator+=(const Float& flt) { - value += flt.toFloat32(); - return *this; - } + Float& operator+=(const Float& flt) { + value += flt.toFloat32(); + return *this; + } - Float& operator-=(const Float& flt) { - value -= flt.toFloat32(); - return *this; - } + Float& operator-=(const Float& flt) { + value -= flt.toFloat32(); + return *this; + } - Float operator-() const { return Float::fromFloat32(-toFloat32()); } + Float operator-() const { + return Float::fromFloat32(-toFloat32()); + } - bool operator<(const Float& flt) const { return toFloat32() < flt.toFloat32(); } + bool operator<(const Float& flt) const { + return toFloat32() < flt.toFloat32(); + } - bool operator>(const Float& flt) const { return toFloat32() > flt.toFloat32(); } + bool operator>(const Float& flt) const { + return toFloat32() > flt.toFloat32(); + } - bool operator>=(const Float& flt) const { return toFloat32() >= flt.toFloat32(); } + bool operator>=(const Float& flt) const { + return toFloat32() >= flt.toFloat32(); + } - bool operator<=(const Float& flt) const { return toFloat32() <= flt.toFloat32(); } + bool operator<=(const Float& flt) const { + return toFloat32() <= flt.toFloat32(); + } - bool operator==(const Float& flt) const { return toFloat32() == flt.toFloat32(); } + bool operator==(const Float& flt) const { + return toFloat32() == flt.toFloat32(); + } - bool operator!=(const Float& flt) const { return toFloat32() != flt.toFloat32(); } + bool operator!=(const Float& flt) const { + return toFloat32() != flt.toFloat32(); + } - private: - static constexpr unsigned MASK = (1 << (M + E + 1)) - 1; - static constexpr unsigned MANTISSA_MASK = (1 << M) - 1; - static constexpr unsigned EXPONENT_MASK = (1 << E) - 1; + private: + static constexpr unsigned MASK = (1 << (M + E + 1)) - 1; + static constexpr unsigned MANTISSA_MASK = (1 << M) - 1; + static constexpr unsigned EXPONENT_MASK = (1 << E) - 1; - // Stored as a regular float, merely for convenience - // TODO: Perform proper arithmetic on this! - float value; - }; + // Stored as a regular float, merely for convenience + // TODO: Perform proper arithmetic on this! + float value; + }; - using f24 = Float<16, 7>; - using f20 = Float<12, 7>; - using f16 = Float<10, 5>; + using f24 = Float<16, 7>; + using f20 = Float<12, 7>; + using f16 = Float<10, 5>; -} // namespace Floats +} // namespace Floats diff --git a/include/PICA/gpu.hpp b/include/PICA/gpu.hpp index e62f41b3..e84c259c 100644 --- a/include/PICA/gpu.hpp +++ b/include/PICA/gpu.hpp @@ -1,25 +1,17 @@ #pragma once #include -#include "PICA/draw_acceleration.hpp" #include "PICA/dynapica/shader_rec.hpp" #include "PICA/float_types.hpp" #include "PICA/pica_vertex.hpp" #include "PICA/regs.hpp" #include "PICA/shader_unit.hpp" -#include "compiler_builtins.hpp" #include "config.hpp" #include "helpers.hpp" #include "logger.hpp" #include "memory.hpp" #include "renderer.hpp" -enum class ShaderExecMode { - Interpreter, // Interpret shaders on the CPU - JIT, // Recompile shaders to CPU machine code - Hardware, // Recompiler shaders to host shaders and run them on the GPU -}; - class GPU { static constexpr u32 regNum = 0x300; static constexpr u32 extRegNum = 0x1000; @@ -43,16 +35,10 @@ class GPU { std::array immediateModeAttributes; // Vertex attributes uploaded via immediate mode submission std::array immediateModeVertices; - - // Pointers for the output registers as arranged after GPUREG_VSH_OUTMAP_MASK is applied - std::array vsOutputRegisters; - // Previous value for GPUREG_VSH_OUTMAP_MASK - u32 oldVsOutputMask; - uint immediateModeVertIndex; uint immediateModeAttrIndex; // Index of the immediate mode attribute we're uploading - template + template void drawArrays(); // Silly method of avoiding linking problems. TODO: Change to something less silly @@ -88,8 +74,6 @@ class GPU { std::unique_ptr renderer; PICA::Vertex getImmediateModeVertex(); - void getAcceleratedDrawInfo(PICA::DrawAcceleration& accel, bool indexed); - public: // 256 entries per LUT with each LUT as its own row forming a 2D image 256 * LUT_COUNT // Encoded in PICA native format @@ -101,15 +85,10 @@ class GPU { // Set to false by the renderer when the lighting_lut is uploaded ot the GPU bool lightingLUTDirty = false; - bool fogLUTDirty = false; - std::array fogLUT; - GPU(Memory& mem, EmulatorConfig& config); + void initGraphicsContext(SDL_Window* window) { renderer->initGraphicsContext(window); } void display() { renderer->display(); } void screenshot(const std::string& name) { renderer->screenshot(name); } - void deinitGraphicsContext() { renderer->deinitGraphicsContext(); } - - void initGraphicsContext(void* context) { renderer->initGraphicsContext(context); } void fireDMA(u32 dest, u32 source, u32 size); void reset(); @@ -129,11 +108,6 @@ class GPU { u32 readInternalReg(u32 index); void writeInternalReg(u32 index, u32 value, u32 mask); - // Used for setting the size of the window we'll be outputting graphics to - void setOutputSize(u32 width, u32 height) { renderer->setOutputSize(width, height); } - // Used for notifying the renderer the screen layout has changed - void reloadScreenLayout() { renderer->reloadScreenLayout(); } - // TODO: Emulate the transfer engine & its registers // Then this can be emulated by just writing the appropriate values there void clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) { renderer->clearBuffer(startAddress, endAddress, value, control); } @@ -174,40 +148,13 @@ class GPU { u32 index = paddr - PhysicalAddrs::VRAM; return (T*)&vram[index]; } else [[unlikely]] { - Helpers::warn("[GPU] Tried to access unknown physical address: %08X", paddr); - return nullptr; + Helpers::panic("[GPU] Tried to access unknown physical address: %08X", paddr); } } - Renderer* getRenderer() { return renderer.get(); } - private: // GPU external registers // We have them in the end of the struct for cache locality reasons. Tl;dr we want the more commonly used things to be packed in the start // Of the struct, instead of externalRegs being in the middle ExternalRegisters externalRegs; - - ALWAYS_INLINE void setVsOutputMask(u32 val) { - val &= 0xffff; - - // Avoid recomputing this if not necessary - if (oldVsOutputMask != val) [[unlikely]] { - oldVsOutputMask = val; - - uint count = 0; - // See which registers are actually enabled and ignore the disabled ones - for (int i = 0; i < 16; i++) { - if (val & 1) { - vsOutputRegisters[count++] = &shaderUnit.vs.outputs[i][0]; - } - - val >>= 1; - } - - // For the others, map the index to a vs output directly (TODO: What does hw actually do?) - for (; count < 16; count++) { - vsOutputRegisters[count] = &shaderUnit.vs.outputs[count][0]; - } - } - } }; diff --git a/include/PICA/pica_frag_config.hpp b/include/PICA/pica_frag_config.hpp deleted file mode 100644 index 7b63a7b5..00000000 --- a/include/PICA/pica_frag_config.hpp +++ /dev/null @@ -1,257 +0,0 @@ -#pragma once -#include -#include -#include -#include - -#include "PICA/pica_hash.hpp" -#include "PICA/regs.hpp" -#include "bitfield.hpp" -#include "helpers.hpp" - -namespace PICA { - struct OutputConfig { - union { - u32 raw{}; - // Merge the enable + compare function into 1 field to avoid duplicate shaders - // enable == off means a CompareFunction of Always - BitField<0, 3, CompareFunction> alphaTestFunction; - BitField<3, 1, u32> depthMapEnable; - BitField<4, 4, LogicOpMode> logicOpMode; - }; - }; - - struct TextureConfig { - u32 texUnitConfig; - u32 texEnvUpdateBuffer; - - // There's 6 TEV stages, and each one is configured via 4 word-sized registers - // (+ the constant color register, which we don't include here, otherwise we'd generate too many shaders) - std::array tevConfigs; - }; - - struct FogConfig { - union { - u32 raw{}; - - BitField<0, 3, FogMode> mode; - BitField<3, 1, u32> flipDepth; - }; - }; - - struct Light { - union { - u16 raw; - BitField<0, 3, u16> num; - BitField<3, 1, u16> directional; - BitField<4, 1, u16> twoSidedDiffuse; - BitField<5, 1, u16> distanceAttenuationEnable; - BitField<6, 1, u16> spotAttenuationEnable; - BitField<7, 1, u16> geometricFactor0; - BitField<8, 1, u16> geometricFactor1; - BitField<9, 1, u16> shadowEnable; - }; - }; - - struct LightingLUTConfig { - union { - u32 raw; - BitField<0, 1, u32> enable; - BitField<1, 1, u32> absInput; - BitField<2, 3, u32> type; - BitField<5, 3, u32> scale; - }; - }; - - struct LightingConfig { - union { - u32 raw{}; - BitField<0, 1, u32> enable; - BitField<1, 4, u32> lightNum; - BitField<5, 2, u32> bumpMode; - BitField<7, 2, u32> bumpSelector; - BitField<9, 1, u32> bumpRenorm; - BitField<10, 1, u32> clampHighlights; - BitField<11, 4, u32> config; - BitField<15, 1, u32> enablePrimaryAlpha; - BitField<16, 1, u32> enableSecondaryAlpha; - BitField<17, 1, u32> enableShadow; - BitField<18, 1, u32> shadowPrimary; - BitField<19, 1, u32> shadowSecondary; - BitField<20, 1, u32> shadowInvert; - BitField<21, 1, u32> shadowAlpha; - BitField<22, 2, u32> shadowSelector; - }; - - std::array luts{}; - - std::array lights{}; - - LightingConfig(const std::array& regs) { - // Ignore lighting registers if it's disabled - if ((regs[InternalRegs::LightingEnable] & 1) == 0) { - return; - } - - const u32 config0 = regs[InternalRegs::LightConfig0]; - const u32 config1 = regs[InternalRegs::LightConfig1]; - const u32 totalLightCount = Helpers::getBits<0, 3>(regs[InternalRegs::LightNumber]) + 1; - - enable = 1; - lightNum = totalLightCount; - - enableShadow = Helpers::getBit<0>(config0); - if (enableShadow) [[unlikely]] { - shadowPrimary = Helpers::getBit<16>(config0); - shadowSecondary = Helpers::getBit<17>(config0); - shadowInvert = Helpers::getBit<18>(config0); - shadowAlpha = Helpers::getBit<19>(config0); - shadowSelector = Helpers::getBits<24, 2>(config0); - } - - enablePrimaryAlpha = Helpers::getBit<2>(config0); - enableSecondaryAlpha = Helpers::getBit<3>(config0); - config = Helpers::getBits<4, 4>(config0); - - bumpSelector = Helpers::getBits<22, 2>(config0); - clampHighlights = Helpers::getBit<27>(config0); - bumpMode = Helpers::getBits<28, 2>(config0); - bumpRenorm = Helpers::getBit<30>(config0) ^ 1; // 0 = enable so flip it with xor - - for (int i = 0; i < totalLightCount; i++) { - auto& light = lights[i]; - light.num = (regs[InternalRegs::LightPermutation] >> (i * 4)) & 0x7; - - const u32 lightConfig = regs[InternalRegs::Light0Config + 0x10 * light.num]; - light.directional = Helpers::getBit<0>(lightConfig); - light.twoSidedDiffuse = Helpers::getBit<1>(lightConfig); - light.geometricFactor0 = Helpers::getBit<2>(lightConfig); - light.geometricFactor1 = Helpers::getBit<3>(lightConfig); - - light.shadowEnable = ((config1 >> light.num) & 1) ^ 1; // This also does 0 = enabled - light.spotAttenuationEnable = ((config1 >> (8 + light.num)) & 1) ^ 1; // Same here - light.distanceAttenuationEnable = ((config1 >> (24 + light.num)) & 1) ^ 1; // Of course same here - } - - LightingLUTConfig& d0 = luts[Lights::LUT_D0]; - LightingLUTConfig& d1 = luts[Lights::LUT_D1]; - LightingLUTConfig& sp = luts[spotlightLutIndex]; - LightingLUTConfig& fr = luts[Lights::LUT_FR]; - LightingLUTConfig& rb = luts[Lights::LUT_RB]; - LightingLUTConfig& rg = luts[Lights::LUT_RG]; - LightingLUTConfig& rr = luts[Lights::LUT_RR]; - - d0.enable = Helpers::getBit<16>(config1) == 0; - d1.enable = Helpers::getBit<17>(config1) == 0; - fr.enable = Helpers::getBit<19>(config1) == 0; - rb.enable = Helpers::getBit<20>(config1) == 0; - rg.enable = Helpers::getBit<21>(config1) == 0; - rr.enable = Helpers::getBit<22>(config1) == 0; - sp.enable = 1; - - const u32 lutAbs = regs[InternalRegs::LightLUTAbs]; - const u32 lutSelect = regs[InternalRegs::LightLUTSelect]; - const u32 lutScale = regs[InternalRegs::LightLUTScale]; - - if (d0.enable) { - d0.absInput = Helpers::getBit<1>(lutAbs) == 0; - d0.type = Helpers::getBits<0, 3>(lutSelect); - d0.scale = Helpers::getBits<0, 3>(lutScale); - } - - if (d1.enable) { - d1.absInput = Helpers::getBit<5>(lutAbs) == 0; - d1.type = Helpers::getBits<4, 3>(lutSelect); - d1.scale = Helpers::getBits<4, 3>(lutScale); - } - - sp.absInput = Helpers::getBit<9>(lutAbs) == 0; - sp.type = Helpers::getBits<8, 3>(lutSelect); - sp.scale = Helpers::getBits<8, 3>(lutScale); - - if (fr.enable) { - fr.absInput = Helpers::getBit<13>(lutAbs) == 0; - fr.type = Helpers::getBits<12, 3>(lutSelect); - fr.scale = Helpers::getBits<12, 3>(lutScale); - } - - if (rb.enable) { - rb.absInput = Helpers::getBit<17>(lutAbs) == 0; - rb.type = Helpers::getBits<16, 3>(lutSelect); - rb.scale = Helpers::getBits<16, 3>(lutScale); - } - - if (rg.enable) { - rg.absInput = Helpers::getBit<21>(lutAbs) == 0; - rg.type = Helpers::getBits<20, 3>(lutSelect); - rg.scale = Helpers::getBits<20, 3>(lutScale); - } - - if (rr.enable) { - rr.absInput = Helpers::getBit<25>(lutAbs) == 0; - rr.type = Helpers::getBits<24, 3>(lutSelect); - rr.scale = Helpers::getBits<24, 3>(lutScale); - } - } - }; - - // Config used for identifying unique fragment pipeline configurations - struct FragmentConfig { - OutputConfig outConfig; - TextureConfig texConfig; - FogConfig fogConfig; - LightingConfig lighting; - - bool operator==(const FragmentConfig& config) const { - // Hash function and equality operator required by std::unordered_map - return std::memcmp(this, &config, sizeof(FragmentConfig)) == 0; - } - - FragmentConfig(const std::array& regs) : lighting(regs) { - auto alphaTestConfig = regs[InternalRegs::AlphaTestConfig]; - auto alphaTestFunction = Helpers::getBits<4, 3>(alphaTestConfig); - - outConfig.alphaTestFunction = - (alphaTestConfig & 1) ? static_cast(alphaTestFunction) : PICA::CompareFunction::Always; - outConfig.depthMapEnable = regs[InternalRegs::DepthmapEnable] & 1; - - // Shows if blending is enabled. If it is not enabled, then logic ops are enabled instead - const bool blendingEnabled = (regs[InternalRegs::ColourOperation] & (1 << 8)) != 0; - outConfig.logicOpMode = blendingEnabled ? LogicOpMode::Copy : LogicOpMode(Helpers::getBits<0, 4>(regs[InternalRegs::LogicOp])); - - texConfig.texUnitConfig = regs[InternalRegs::TexUnitCfg]; - texConfig.texEnvUpdateBuffer = regs[InternalRegs::TexEnvUpdateBuffer]; - - // Set up TEV stages. Annoyingly we can't just memcpy as the TEV registers are arranged like - // {Source, Operand, Combiner, Color, Scale} and we want to skip the color register since it's uploaded via UBO -#define setupTevStage(stage) \ - std::memcpy(&texConfig.tevConfigs[stage * 4], ®s[InternalRegs::TexEnv##stage##Source], 3 * sizeof(u32)); \ - texConfig.tevConfigs[stage * 4 + 3] = regs[InternalRegs::TexEnv##stage##Source + 4]; - - setupTevStage(0); - setupTevStage(1); - setupTevStage(2); - setupTevStage(3); - setupTevStage(4); - setupTevStage(5); -#undef setupTevStage - - fogConfig.mode = (FogMode)Helpers::getBits<0, 3>(regs[InternalRegs::TexEnvUpdateBuffer]); - - if (fogConfig.mode == FogMode::Fog) { - fogConfig.flipDepth = Helpers::getBit<16>(regs[InternalRegs::TexEnvUpdateBuffer]); - } - } - }; - - static_assert( - std::has_unique_object_representations() && std::has_unique_object_representations() && - std::has_unique_object_representations() && std::has_unique_object_representations() - ); -} // namespace PICA - -// Override std::hash for our fragment config class -template <> -struct std::hash { - std::size_t operator()(const PICA::FragmentConfig& config) const noexcept { return PICAHash::computeHash((const char*)&config, sizeof(config)); } -}; \ No newline at end of file diff --git a/include/PICA/pica_frag_uniforms.hpp b/include/PICA/pica_frag_uniforms.hpp deleted file mode 100644 index 781fdcd3..00000000 --- a/include/PICA/pica_frag_uniforms.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -#include -#include -#include - -#include "helpers.hpp" - -namespace PICA { - struct LightUniform { - using vec3 = std::array; - - // std140 requires vec3s be aligned to 16 bytes - alignas(16) vec3 specular0; - alignas(16) vec3 specular1; - alignas(16) vec3 diffuse; - alignas(16) vec3 ambient; - alignas(16) vec3 position; - alignas(16) vec3 spotlightDirection; - - float distanceAttenuationBias; - float distanceAttenuationScale; - }; - - struct FragmentUniforms { - using vec3 = std::array; - using vec4 = std::array; - static constexpr usize tevStageCount = 6; - - s32 alphaReference; - float depthScale; - float depthOffset; - - alignas(16) vec4 constantColors[tevStageCount]; - alignas(16) vec4 tevBufferColor; - alignas(16) vec4 clipCoords; - - // Note: We upload these as a u32 and decode on GPU. - // Particularly the fog colour since fog is really uncommon and it doesn't matter if we decode on GPU. - u32 globalAmbientLight; - u32 fogColor; - // NOTE: THIS MUST BE LAST so that if lighting is disabled we can potentially omit uploading it - LightUniform lightUniforms[8]; - }; - - // Assert that lightUniforms is the last member of the structure - static_assert(offsetof(FragmentUniforms, lightUniforms) + 8 * sizeof(LightUniform) == sizeof(FragmentUniforms)); -} // namespace PICA \ No newline at end of file diff --git a/include/PICA/pica_simd.hpp b/include/PICA/pica_simd.hpp deleted file mode 100644 index efb00d43..00000000 --- a/include/PICA/pica_simd.hpp +++ /dev/null @@ -1,275 +0,0 @@ -#pragma once -#include -#include -#include - -#include "compiler_builtins.hpp" -#include "helpers.hpp" - -#if defined(_M_AMD64) || defined(__x86_64__) -#define PICA_SIMD_X64 -#include -#elif defined(_M_ARM64) || defined(__aarch64__) -#define PICA_SIMD_ARM64 -#include -#endif - -// Optimized functions for analyzing PICA index buffers (Finding minimum and maximum index values inside them) -namespace PICA::IndexBuffer { - // Non-SIMD, portable algorithm - template - std::pair analyzePortable(u8* indexBuffer, u32 vertexCount) { - u16 minimumIndex = std::numeric_limits::max(); - u16 maximumIndex = 0; - - // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them - if constexpr (useShortIndices) { - u16* indexBuffer16 = reinterpret_cast(indexBuffer); - - for (u32 i = 0; i < vertexCount; i++) { - u16 index = indexBuffer16[i]; - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - } - } else { - for (u32 i = 0; i < vertexCount; i++) { - u16 index = u16(indexBuffer[i]); - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - } - } - - return {minimumIndex, maximumIndex}; - } - -#ifdef PICA_SIMD_ARM64 - template - ALWAYS_INLINE std::pair analyzeNEON(u8* indexBuffer, u32 vertexCount) { - // We process 16 bytes per iteration, which is 8 vertices if we're using u16 indices or 16 vertices if we're using u8 indices - constexpr u32 vertsPerLoop = (useShortIndices) ? 8 : 16; - - if (vertexCount < vertsPerLoop) { - return analyzePortable(indexBuffer, vertexCount); - } - - u16 minimumIndex, maximumIndex; - - if constexpr (useShortIndices) { - // 16-bit indices - uint16x8_t minima = vdupq_n_u16(0xffff); - uint16x8_t maxima = vdupq_n_u16(0); - - while (vertexCount >= vertsPerLoop) { - const uint16x8_t data = vld1q_u16(reinterpret_cast(indexBuffer)); - minima = vminq_u16(data, minima); - maxima = vmaxq_u16(data, maxima); - - indexBuffer += 16; - vertexCount -= vertsPerLoop; - } - - // Do horizontal min/max operations to get the actual minimum and maximum from all the vertices we processed with SIMD - // We want to gather the actual minimum and maximum in the line bottom lane of the minima/maxima vectors - // uint16x4_t foldedMinima1 = vmin_u16(vget_high_u16(minima), vget_low_u16(minima)); - // uint16x4_t foldedMaxima1 = vmax_u16(vget_high_u16(maxima), vget_low_u16(maxima)); - - uint16x8_t foldedMinima1 = vpminq_u16(minima, minima); - uint16x8_t foldedMinima2 = vpminq_u16(foldedMinima1, foldedMinima1); - uint16x8_t foldedMinima3 = vpminq_u16(foldedMinima2, foldedMinima2); - - uint16x8_t foldedMaxima1 = vpmaxq_u16(maxima, maxima); - uint16x8_t foldedMaxima2 = vpmaxq_u16(foldedMaxima1, foldedMaxima1); - uint16x8_t foldedMaxima3 = vpmaxq_u16(foldedMaxima2, foldedMaxima2); - - minimumIndex = vgetq_lane_u16(foldedMinima3, 0); - maximumIndex = vgetq_lane_u16(foldedMaxima3, 0); - } else { - // 8-bit indices - uint8x16_t minima = vdupq_n_u8(0xff); - uint8x16_t maxima = vdupq_n_u8(0); - - while (vertexCount >= vertsPerLoop) { - uint8x16_t data = vld1q_u8(indexBuffer); - minima = vminq_u8(data, minima); - maxima = vmaxq_u8(data, maxima); - - indexBuffer += 16; - vertexCount -= vertsPerLoop; - } - - // Do a similar horizontal min/max as in the u16 case, except now we're working uint8x16 instead of uint16x4 so we need 4 folds - uint8x16_t foldedMinima1 = vpminq_u8(minima, minima); - uint8x16_t foldedMinima2 = vpminq_u8(foldedMinima1, foldedMinima1); - uint8x16_t foldedMinima3 = vpminq_u8(foldedMinima2, foldedMinima2); - uint8x16_t foldedMinima4 = vpminq_u8(foldedMinima3, foldedMinima3); - - uint8x16_t foldedMaxima1 = vpmaxq_u8(maxima, maxima); - uint8x16_t foldedMaxima2 = vpmaxq_u8(foldedMaxima1, foldedMaxima1); - uint8x16_t foldedMaxima3 = vpmaxq_u8(foldedMaxima2, foldedMaxima2); - uint8x16_t foldedMaxima4 = vpmaxq_u8(foldedMaxima3, foldedMaxima3); - - minimumIndex = u16(vgetq_lane_u8(foldedMinima4, 0)); - maximumIndex = u16(vgetq_lane_u8(foldedMaxima4, 0)); - } - - // If any indices could not be processed cause the buffer size is not 16-byte aligned, process them the naive way - // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them - while (vertexCount > 0) { - if constexpr (useShortIndices) { - u16 index = *reinterpret_cast(indexBuffer); - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - indexBuffer += 2; - } else { - u16 index = u16(*indexBuffer++); - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - } - - vertexCount -= 1; - } - - return {minimumIndex, maximumIndex}; - } -#endif - -#if defined(PICA_SIMD_X64) && (defined(__SSE4_1__) || defined(__AVX__)) - template - ALWAYS_INLINE std::pair analyzeSSE4_1(u8* indexBuffer, u32 vertexCount) { - // We process 16 bytes per iteration, which is 8 vertices if we're using u16 - // indices or 16 vertices if we're using u8 indices - constexpr u32 vertsPerLoop = (useShortIndices) ? 8 : 16; - - if (vertexCount < vertsPerLoop) { - return analyzePortable(indexBuffer, vertexCount); - } - - u16 minimumIndex, maximumIndex; - - if constexpr (useShortIndices) { - // Calculate the horizontal minimum/maximum value across an SSE vector of 16-bit unsigned integers. - // Based on https://stackoverflow.com/a/22259607 - auto horizontalMin16 = [](__m128i vector) -> u16 { return u16(_mm_cvtsi128_si32(_mm_minpos_epu16(vector))); }; - - auto horizontalMax16 = [](__m128i vector) -> u16 { - // We have an instruction to compute horizontal minimum but not maximum, so we use it. - // To use it, we have to subtract each value from 0xFFFF (which we do with an xor), then execute a horizontal minimum - __m128i flipped = _mm_xor_si128(vector, _mm_set_epi32(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu)); - u16 min = u16(_mm_cvtsi128_si32(_mm_minpos_epu16(flipped))); - return u16(min ^ 0xffff); - }; - - // 16-bit indices - // Initialize the minima vector to all FFs (So 0xFFFF for each 16-bit lane) - // And the maxima vector to all 0s (0 for each 16-bit lane) - __m128i minima = _mm_set_epi32(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu); - __m128i maxima = _mm_set_epi32(0, 0, 0, 0); - - while (vertexCount >= vertsPerLoop) { - const __m128i data = _mm_loadu_si128(reinterpret_cast(indexBuffer)); - minima = _mm_min_epu16(data, minima); - maxima = _mm_max_epu16(data, maxima); - - indexBuffer += 16; - vertexCount -= vertsPerLoop; - } - - minimumIndex = u16(horizontalMin16(minima)); - maximumIndex = u16(horizontalMax16(maxima)); - } else { - // Calculate the horizontal minimum/maximum value across an SSE vector of 8-bit unsigned integers. - // Based on https://stackoverflow.com/a/22259607 - auto horizontalMin8 = [](__m128i vector) -> u8 { - vector = _mm_min_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(3, 2, 3, 2))); - vector = _mm_min_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(1, 1, 1, 1))); - vector = _mm_min_epu8(vector, _mm_shufflelo_epi16(vector, _MM_SHUFFLE(1, 1, 1, 1))); - vector = _mm_min_epu8(vector, _mm_srli_epi16(vector, 8)); - return u8(_mm_cvtsi128_si32(vector)); - }; - - auto horizontalMax8 = [](__m128i vector) -> u8 { - vector = _mm_max_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(3, 2, 3, 2))); - vector = _mm_max_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(1, 1, 1, 1))); - vector = _mm_max_epu8(vector, _mm_shufflelo_epi16(vector, _MM_SHUFFLE(1, 1, 1, 1))); - vector = _mm_max_epu8(vector, _mm_srli_epi16(vector, 8)); - return u8(_mm_cvtsi128_si32(vector)); - }; - - // 8-bit indices - // Initialize the minima vector to all FFs (So 0xFF for each 8-bit lane) - // And the maxima vector to all 0s (0 for each 8-bit lane) - __m128i minima = _mm_set_epi32(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu); - __m128i maxima = _mm_set_epi32(0, 0, 0, 0); - - while (vertexCount >= vertsPerLoop) { - const __m128i data = _mm_loadu_si128(reinterpret_cast(indexBuffer)); - minima = _mm_min_epu8(data, minima); - maxima = _mm_max_epu8(data, maxima); - - indexBuffer += 16; - vertexCount -= vertsPerLoop; - } - - minimumIndex = u16(horizontalMin8(minima)); - maximumIndex = u16(horizontalMax8(maxima)); - } - - // If any indices could not be processed cause the buffer size - // is not 16-byte aligned, process them the naive way - // Calculate the minimum and maximum indices used in the index - // buffer, so we'll only upload them - while (vertexCount > 0) { - if constexpr (useShortIndices) { - u16 index = *reinterpret_cast(indexBuffer); - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - indexBuffer += 2; - } else { - u16 index = u16(*indexBuffer++); - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - } - - vertexCount -= 1; - } - - return {minimumIndex, maximumIndex}; - } -#endif - - // Analyzes a PICA index buffer to get the minimum and maximum indices in the - // buffer, and returns them in a pair in the form [min, max]. Takes a template - // parameter to decide whether the indices in the buffer are u8 or u16 - template - std::pair analyze(u8* indexBuffer, u32 vertexCount) { -#if defined(PICA_SIMD_ARM64) - return analyzeNEON(indexBuffer, vertexCount); -#elif defined(PICA_SIMD_X64) && (defined(__SSE4_1__) || defined(__AVX__)) - // Annoyingly, MSVC refuses to define __SSE4_1__ even when we're building with AVX - return analyzeSSE4_1(indexBuffer, vertexCount); -#else - return analyzePortable(indexBuffer, vertexCount); -#endif - } - - // In some really unfortunate scenarios (eg Android Studio emulator), we don't have access to glDrawRangeElementsBaseVertex - // So we need to subtract the base vertex index from every index in the index buffer ourselves - // This is not really common, so we do it without SIMD for the moment, just to be able to run on Android Studio - template - void subtractBaseIndex(u8* indexBuffer, u32 indexCount, u16 baseIndex) { - // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them - if constexpr (useShortIndices) { - u16* indexBuffer16 = reinterpret_cast(indexBuffer); - - for (u32 i = 0; i < indexCount; i++) { - indexBuffer16[i] -= baseIndex; - } - } else { - u8 baseIndex8 = u8(baseIndex); - - for (u32 i = 0; i < indexCount; i++) { - indexBuffer[i] -= baseIndex8; - } - } - } -} // namespace PICA::IndexBuffer diff --git a/include/PICA/pica_vert_config.hpp b/include/PICA/pica_vert_config.hpp deleted file mode 100644 index 4300e454..00000000 --- a/include/PICA/pica_vert_config.hpp +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include - -#include "PICA/pica_hash.hpp" -#include "PICA/regs.hpp" -#include "PICA/shader.hpp" -#include "bitfield.hpp" -#include "helpers.hpp" - -namespace PICA { - // Configuration struct used - struct VertConfig { - PICAHash::HashType shaderHash; - PICAHash::HashType opdescHash; - u32 entrypoint; - - // PICA registers for configuring shader output->fragment semantic mapping - std::array outmaps{}; - u16 outputMask; - u8 outputCount; - bool usingUbershader; - - // Pad to 56 bytes so that the compiler won't insert unnecessary padding, which in turn will affect our unordered_map lookup - // As the padding will get hashed and memcmp'd... - u32 pad{}; - - bool operator==(const VertConfig& config) const { - // Hash function and equality operator required by std::unordered_map - return std::memcmp(this, &config, sizeof(VertConfig)) == 0; - } - - VertConfig(PICAShader& shader, const std::array& regs, bool usingUbershader) : usingUbershader(usingUbershader) { - shaderHash = shader.getCodeHash(); - opdescHash = shader.getOpdescHash(); - entrypoint = shader.entrypoint; - - outputCount = regs[PICA::InternalRegs::ShaderOutputCount] & 7; - outputMask = regs[PICA::InternalRegs::VertexShaderOutputMask]; - for (int i = 0; i < outputCount; i++) { - // Mask out unused bits - outmaps[i] = regs[PICA::InternalRegs::ShaderOutmap0 + i] & 0x1F1F1F1F; - } - } - }; -} // namespace PICA - -static_assert(sizeof(PICA::VertConfig) == 56); - -// Override std::hash for our vertex config class -template <> -struct std::hash { - std::size_t operator()(const PICA::VertConfig& config) const noexcept { return PICAHash::computeHash((const char*)&config, sizeof(config)); } -}; \ No newline at end of file diff --git a/include/PICA/pica_vertex.hpp b/include/PICA/pica_vertex.hpp index bbb32edb..800dff9a 100644 --- a/include/PICA/pica_vertex.hpp +++ b/include/PICA/pica_vertex.hpp @@ -1,7 +1,6 @@ #pragma once -#include - #include "PICA/float_types.hpp" +#include namespace PICA { // A representation of the output vertex as it comes out of the vertex shader, with padding and all diff --git a/include/PICA/regs.hpp b/include/PICA/regs.hpp index 3185d350..70cecf7b 100644 --- a/include/PICA/regs.hpp +++ b/include/PICA/regs.hpp @@ -51,18 +51,6 @@ namespace PICA { #undef defineTexEnv // clang-format on - // Fog registers - FogColor = 0xE1, - FogLUTIndex = 0xE6, - FogLUTData0 = 0xE8, - FogLUTData1 = 0xE9, - FogLUTData2 = 0xEA, - FogLUTData3 = 0xEB, - FogLUTData4 = 0xEC, - FogLUTData5 = 0xED, - FogLUTData6 = 0xEE, - FogLUTData7 = 0xEF, - // Framebuffer registers ColourOperation = 0x100, BlendFunc = 0x101, @@ -79,29 +67,7 @@ namespace PICA { ColourBufferLoc = 0x11D, FramebufferSize = 0x11E, - // Lighting registers - LightingEnable = 0x8F, - Light0Specular0 = 0x140, - Light0Specular1 = 0x141, - Light0Diffuse = 0x142, - Light0Ambient = 0x143, - Light0XY = 0x144, - Light0Z = 0x145, - Light0SpotlightXY = 0x146, - Light0SpotlightZ = 0x147, - Light0Config = 0x149, - Light0AttenuationBias = 0x14A, - Light0AttenuationScale = 0x14B, - - LightGlobalAmbient = 0x1C0, - LightNumber = 0x1C2, - LightConfig0 = 0x1C3, - LightConfig1 = 0x1C4, - LightPermutation = 0x1D9, - LightLUTAbs = 0x1D0, - LightLUTSelect = 0x1D1, - LightLUTScale = 0x1D2, - + //LightingRegs LightingLUTIndex = 0x01C5, LightingLUTData0 = 0x01C8, LightingLUTData1 = 0x01C9, @@ -177,7 +143,6 @@ namespace PICA { VertexIntUniform3 = 0x2B4, VertexShaderEntrypoint = 0x2BA, - VertexShaderOutputMask = 0x2BD, VertexShaderTransferEnd = 0x2BF, VertexFloatUniformIndex = 0x2C0, VertexFloatUniformData0 = 0x2C1, @@ -265,8 +230,7 @@ namespace PICA { enum : u32 { LUT_D0 = 0, LUT_D1, - // LUT 2 is not used, the emulator internally uses it for referring to the current source's spotlight in shaders - LUT_FR = 0x3, + LUT_FR, LUT_RB, LUT_RG, LUT_RR, @@ -290,11 +254,6 @@ namespace PICA { }; } - // There's actually 8 different LUTs (SP0-SP7), one for each light with different indices (8-15) - // We use an unused LUT value for "this light source's spotlight" instead and figure out which light source to use in compileLutLookup - // This is particularly intuitive in several places, such as checking if a LUT is enabled - static constexpr int spotlightLutIndex = 2; - enum class TextureFmt : u32 { RGBA8 = 0x0, RGB8 = 0x1, @@ -385,156 +344,4 @@ namespace PICA { GeometryPrimitive = 3, }; - enum class CompareFunction : u32 { - Never = 0, - Always = 1, - Equal = 2, - NotEqual = 3, - Less = 4, - LessOrEqual = 5, - Greater = 6, - GreaterOrEqual = 7, - }; - - enum class LogicOpMode : u32 { - Clear = 0, - And = 1, - ReverseAnd = 2, - Copy = 3, - Set = 4, - InvertedCopy = 5, - Nop = 6, - Invert = 7, - Nand = 8, - Or = 9, - Nor = 10, - Xor = 11, - Equiv = 12, - InvertedAnd = 13, - ReverseOr = 14, - InvertedOr = 15, - }; - - enum class FogMode : u32 { - Disabled = 0, - Fog = 5, - Gas = 7, - }; - - struct TexEnvConfig { - enum class Source : u8 { - PrimaryColor = 0x0, - PrimaryFragmentColor = 0x1, - SecondaryFragmentColor = 0x2, - Texture0 = 0x3, - Texture1 = 0x4, - Texture2 = 0x5, - Texture3 = 0x6, - // TODO: Inbetween values are unknown - PreviousBuffer = 0xD, - Constant = 0xE, - Previous = 0xF, - }; - - enum class ColorOperand : u8 { - SourceColor = 0x0, - OneMinusSourceColor = 0x1, - SourceAlpha = 0x2, - OneMinusSourceAlpha = 0x3, - SourceRed = 0x4, - OneMinusSourceRed = 0x5, - // TODO: Inbetween values are unknown - SourceGreen = 0x8, - OneMinusSourceGreen = 0x9, - // Inbetween values are unknown - SourceBlue = 0xC, - OneMinusSourceBlue = 0xD, - }; - - enum class AlphaOperand : u8 { - SourceAlpha = 0x0, - OneMinusSourceAlpha = 0x1, - SourceRed = 0x2, - OneMinusSourceRed = 0x3, - SourceGreen = 0x4, - OneMinusSourceGreen = 0x5, - SourceBlue = 0x6, - OneMinusSourceBlue = 0x7, - }; - - enum class Operation : u8 { - Replace = 0, - Modulate = 1, - Add = 2, - AddSigned = 3, - Lerp = 4, - Subtract = 5, - Dot3RGB = 6, - Dot3RGBA = 7, - MultiplyAdd = 8, - AddMultiply = 9, - }; - - // RGB sources - Source colorSource1, colorSource2, colorSource3; - // Alpha sources - Source alphaSource1, alphaSource2, alphaSource3; - - // RGB operands - ColorOperand colorOperand1, colorOperand2, colorOperand3; - // Alpha operands - AlphaOperand alphaOperand1, alphaOperand2, alphaOperand3; - - // Texture environment operations for this stage - Operation colorOp, alphaOp; - - u32 constColor; - - private: - // These are the only private members since their value doesn't actually reflect the scale - // So we make them public so we'll always use the appropriate member functions instead - u8 colorScale; - u8 alphaScale; - - public: - // Create texture environment object from TEV registers - TexEnvConfig(u32 source, u32 operand, u32 combiner, u32 color, u32 scale) : constColor(color) { - colorSource1 = Helpers::getBits<0, 4, Source>(source); - colorSource2 = Helpers::getBits<4, 4, Source>(source); - colorSource3 = Helpers::getBits<8, 4, Source>(source); - - alphaSource1 = Helpers::getBits<16, 4, Source>(source); - alphaSource2 = Helpers::getBits<20, 4, Source>(source); - alphaSource3 = Helpers::getBits<24, 4, Source>(source); - - colorOperand1 = Helpers::getBits<0, 4, ColorOperand>(operand); - colorOperand2 = Helpers::getBits<4, 4, ColorOperand>(operand); - colorOperand3 = Helpers::getBits<8, 4, ColorOperand>(operand); - - alphaOperand1 = Helpers::getBits<12, 3, AlphaOperand>(operand); - alphaOperand2 = Helpers::getBits<16, 3, AlphaOperand>(operand); - alphaOperand3 = Helpers::getBits<20, 3, AlphaOperand>(operand); - - colorOp = Helpers::getBits<0, 4, Operation>(combiner); - alphaOp = Helpers::getBits<16, 4, Operation>(combiner); - - colorScale = Helpers::getBits<0, 2>(scale); - alphaScale = Helpers::getBits<16, 2>(scale); - } - - u32 getColorScale() { return (colorScale <= 2) ? (1 << colorScale) : 1; } - u32 getAlphaScale() { return (alphaScale <= 2) ? (1 << alphaScale) : 1; } - - bool isPassthroughStage() { - // clang-format off - // Thank you to the Citra dev that wrote this out - return ( - colorOp == Operation::Replace && alphaOp == Operation::Replace && - colorSource1 == Source::Previous && alphaSource1 == Source::Previous && - colorOperand1 == ColorOperand::SourceColor && alphaOperand1 == AlphaOperand::SourceAlpha && - getColorScale() == 1 && getAlphaScale() == 1 - ); - // clang-format on - } - }; } // namespace PICA diff --git a/include/PICA/shader.hpp b/include/PICA/shader.hpp index 3ef11114..63b59914 100644 --- a/include/PICA/shader.hpp +++ b/include/PICA/shader.hpp @@ -1,8 +1,6 @@ #pragma once #include #include -#include -#include #include #include "PICA/float_types.hpp" @@ -23,7 +21,7 @@ namespace ShaderOpcodes { DST = 0x04, EX2 = 0x05, LG2 = 0x06, - LITP = 0x07, + LIT = 0x07, MUL = 0x08, SGE = 0x09, SLT = 0x0A, @@ -38,10 +36,8 @@ namespace ShaderOpcodes { DSTI = 0x19, SGEI = 0x1A, SLTI = 0x1B, - BREAK = 0x20, NOP = 0x21, END = 0x22, - BREAKC = 0x23, CALL = 0x24, CALLC = 0x25, CALLU = 0x26, @@ -58,10 +54,6 @@ namespace ShaderOpcodes { }; } -namespace PICA::ShaderGen { - class ShaderDecompiler; -}; - // Note: All PICA f24 vec4 registers must have the alignas(16) specifier to make them easier to access in SSE/NEON code in the JIT class PICAShader { using f24 = Floats::f24; @@ -96,23 +88,15 @@ class PICAShader { public: // These are placed close to the temp registers and co because it helps the JIT generate better code u32 entrypoint = 0; // Initial shader PC - - // We want these registers in this order & with this alignment for uploading them directly to a UBO - // When emulating shaders on the GPU. Plus this alignment for float uniforms is necessary for doing SIMD in the shader->CPU recompilers. - alignas(16) std::array floatUniforms; - alignas(16) std::array, 4> intUniforms; u32 boolUniform; + std::array, 4> intUniforms; + alignas(16) std::array floatUniforms; alignas(16) std::array fixedAttributes; // Fixed vertex attributes alignas(16) std::array inputs; // Attributes passed to the shader alignas(16) std::array outputs; alignas(16) vec4f dummy = vec4f({f24::zero(), f24::zero(), f24::zero(), f24::zero()}); // Dummy register used by the JIT - // We use a hashmap for matching 3DS shaders to their equivalent compiled code in our shader cache in the shader JIT - // We choose our hash type to be a 64-bit integer by default, as the collision chance is very tiny and generating it is decently optimal - // Ideally we want to be able to support multiple different types of hash depending on compilation settings, but let's get this working first - using Hash = PICAHash::HashType; - protected: std::array operandDescriptors; alignas(16) std::array tempRegisters; // General purpose registers the shader can use for temp values @@ -130,20 +114,20 @@ class PICAShader { std::array callInfo; ShaderType type; + // We use a hashmap for matching 3DS shaders to their equivalent compiled code in our shader cache in the shader JIT + // We choose our hash type to be a 64-bit integer by default, as the collision chance is very tiny and generating it is decently optimal + // Ideally we want to be able to support multiple different types of hash depending on compilation settings, but let's get this working first + using Hash = PICAHash::HashType; + Hash lastCodeHash = 0; // Last hash computed for the shader code (Used for the JIT caching mechanism) Hash lastOpdescHash = 0; // Last hash computed for the operand descriptors (Also used for the JIT) - public: - bool uniformsDirty = false; - - protected: bool codeHashDirty = false; bool opdescHashDirty = false; // Add these as friend classes for the JIT so it has access to all important state friend class ShaderJIT; friend class ShaderEmitter; - friend class PICA::ShaderGen::ShaderDecompiler; vec4f getSource(u32 source); vec4f& getDest(u32 dest); @@ -165,7 +149,6 @@ class PICAShader { void jmpc(u32 instruction); void jmpu(u32 instruction); void lg2(u32 instruction); - void litp(u32 instruction); void loop(u32 instruction); void mad(u32 instruction); void madi(u32 instruction); @@ -234,10 +217,14 @@ class PICAShader { public: static constexpr size_t maxInstructionCount = 4096; - std::array loadedShader; // Currently loaded & active shader + std::array loadedShader; // Currently loaded & active shader + std::array bufferedShader; // Shader to be transferred when the SH_CODETRANSFER_END reg gets written to PICAShader(ShaderType type) : type(type) {} + // Theese functions are in the header to be inlined more easily, though with LTO I hope I'll be able to move them + void finalize() { std::memcpy(&loadedShader[0], &bufferedShader[0], 4096 * sizeof(u32)); } + void setBufferIndex(u32 index) { bufferIndex = index & 0xfff; } void setOpDescriptorIndex(u32 index) { opDescriptorIndex = index & 0x7f; } @@ -246,7 +233,7 @@ class PICAShader { Helpers::panic("o no, shader upload overflew"); } - loadedShader[bufferIndex++] = word; + bufferedShader[bufferIndex++] = word; bufferIndex &= 0xfff; codeHashDirty = true; // Signal the JIT if necessary that the program hash has potentially changed @@ -267,15 +254,13 @@ class PICAShader { void uploadFloatUniform(u32 word) { floatUniformBuffer[floatUniformWordCount++] = word; + if (floatUniformIndex >= 96) { + Helpers::panic("[PICA] Tried to write float uniform %d", floatUniformIndex); + } if ((f32UniformTransfer && floatUniformWordCount >= 4) || (!f32UniformTransfer && floatUniformWordCount >= 3)) { - floatUniformWordCount = 0; - - // Check if the program tries to upload to a non-existent uniform, and empty the queue without writing in that case - if (floatUniformIndex >= 96) [[unlikely]] { - return; - } vec4f& uniform = floatUniforms[floatUniformIndex++]; + floatUniformWordCount = 0; if (f32UniformTransfer) { uniform[0] = f24::fromFloat32(*(float*)&floatUniformBuffer[3]); @@ -288,7 +273,6 @@ class PICAShader { uniform[2] = f24::fromRaw(((floatUniformBuffer[0] & 0xff) << 16) | (floatUniformBuffer[1] >> 16)); uniform[3] = f24::fromRaw(floatUniformBuffer[0] >> 8); } - uniformsDirty = true; } } @@ -300,12 +284,6 @@ class PICAShader { u[1] = getBits<8, 8>(word); u[2] = getBits<16, 8>(word); u[3] = getBits<24, 8>(word); - uniformsDirty = true; - } - - void uploadBoolUniform(u32 value) { - boolUniform = value; - uniformsDirty = true; } void run(); @@ -313,13 +291,4 @@ class PICAShader { Hash getCodeHash(); Hash getOpdescHash(); - - // Returns how big the PICA uniforms are combined. Used for hw accelerated shaders where we upload the uniforms to our GPU. - static constexpr usize totalUniformSize() { return sizeof(floatUniforms) + sizeof(intUniforms) + sizeof(boolUniform); } - void* getUniformPointer() { return static_cast(&floatUniforms); } -}; - -static_assert( - offsetof(PICAShader, intUniforms) == offsetof(PICAShader, floatUniforms) + 96 * sizeof(float) * 4 && - offsetof(PICAShader, boolUniform) == offsetof(PICAShader, intUniforms) + 4 * sizeof(u8) * 4 -); \ No newline at end of file +}; \ No newline at end of file diff --git a/include/PICA/shader_decompiler.hpp b/include/PICA/shader_decompiler.hpp deleted file mode 100644 index 4a5cdc13..00000000 --- a/include/PICA/shader_decompiler.hpp +++ /dev/null @@ -1,131 +0,0 @@ -#pragma once -#include - -#include -#include -#include -#include -#include -#include - -#include "PICA/shader.hpp" -#include "PICA/shader_gen_types.hpp" - -struct EmulatorConfig; - -namespace PICA::ShaderGen { - // Control flow analysis is partially based on - // https://github.com/PabloMK7/citra/blob/d0179559466ff09731d74474322ee880fbb44b00/src/video_core/shader/generator/glsl_shader_decompiler.cpp#L33 - struct ControlFlow { - // A continuous range of addresses - struct AddressRange { - u32 start, end; - AddressRange(u32 start, u32 end) : start(start), end(end) {} - - // Use lexicographic comparison for functions in order to sort them in a set - bool operator<(const AddressRange& other) const { return std::tie(start, end) < std::tie(other.start, other.end); } - }; - - struct Function { - using Labels = std::set; - - enum class ExitMode { - Unknown, // Can't guarantee whether we'll exit properly, fall back to CPU shaders (can happen with jmp shenanigans) - AlwaysReturn, // All paths reach the return point. - Conditional, // One or more code paths reach the return point or an END instruction conditionally. - AlwaysEnd, // All paths reach an END instruction. - }; - - u32 start; // Starting PC of the function - u32 end; // End PC of the function - Labels outLabels{}; // Labels this function can "goto" (jump) to - ExitMode exitMode = ExitMode::Unknown; - - explicit Function(u32 start, u32 end) : start(start), end(end) {} - bool operator<(const Function& other) const { return AddressRange(start, end) < AddressRange(other.start, other.end); } - - std::string getIdentifier() const { return fmt::format("fn_{}_{}", start, end); } - // To handle weird control flow, we have to return from each function a bool that indicates whether or not the shader reached an end - // instruction and should thus terminate. This is necessary for games like Rayman and Gravity Falls, which have "END" instructions called - // from within functions deep in the callstack - std::string getForwardDecl() const { return fmt::format("bool fn_{}_{}();\n", start, end); } - std::string getCallStatement() const { return fmt::format("fn_{}_{}()", start, end); } - }; - - std::set functions{}; - std::map exitMap{}; - - // Tells us whether analysis of the shader we're trying to compile failed, in which case we'll need to fail back to shader emulation - // On the CPU - bool analysisFailed = false; - - // This will recursively add all functions called by the function too, as analyzeFunction will call addFunction on control flow instructions - const Function* addFunction(const PICAShader& shader, u32 start, u32 end) { - auto searchIterator = functions.find(Function(start, end)); - if (searchIterator != functions.end()) { - return &(*searchIterator); - } - - // Add this function and analyze it if it doesn't already exist - Function function(start, end); - function.exitMode = analyzeFunction(shader, start, end, function.outLabels); - - // This function could not be fully analyzed, report failure - if (function.exitMode == Function::ExitMode::Unknown) { - analysisFailed = true; - return nullptr; - } - - // Add function to our function list - auto [it, added] = functions.insert(std::move(function)); - return &(*it); - } - - void analyze(const PICAShader& shader, u32 entrypoint); - Function::ExitMode analyzeFunction(const PICAShader& shader, u32 start, u32 end, Function::Labels& labels); - }; - - class ShaderDecompiler { - using AddressRange = ControlFlow::AddressRange; - using Function = ControlFlow::Function; - - ControlFlow controlFlow{}; - - PICAShader& shader; - EmulatorConfig& config; - std::string decompiledShader; - - u32 entrypoint; - - API api; - Language language; - bool compilationError = false; - - void compileInstruction(u32& pc, bool& finished); - // Compile range "range" and returns the end PC or if we're "finished" with the program (called an END instruction) - std::pair compileRange(const AddressRange& range); - void callFunction(const Function& function); - const Function* findFunction(const AddressRange& range); - - void writeAttributes(); - - std::string getSource(u32 source, u32 index) const; - std::string getDest(u32 dest) const; - std::string getSwizzlePattern(u32 swizzle) const; - std::string getDestSwizzle(u32 destinationMask) const; - const char* getCondition(u32 cond, u32 refX, u32 refY); - - void setDest(u32 operandDescriptor, const std::string& dest, const std::string& value); - // Returns if the instruction uses the typical register encodings most instructions use - // With some exceptions like MAD/MADI, and the control flow instructions which are completely different - bool usesCommonEncoding(u32 instruction) const; - - public: - ShaderDecompiler(PICAShader& shader, EmulatorConfig& config, u32 entrypoint, API api, Language language) - : shader(shader), entrypoint(entrypoint), config(config), api(api), language(language), decompiledShader("") {} - - std::string decompile(); - }; - - std::string decompileShader(PICAShader& shader, EmulatorConfig& config, u32 entrypoint, API api, Language language); -} // namespace PICA::ShaderGen \ No newline at end of file diff --git a/include/PICA/shader_gen.hpp b/include/PICA/shader_gen.hpp deleted file mode 100644 index b6751e05..00000000 --- a/include/PICA/shader_gen.hpp +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once -#include - -#include "PICA/gpu.hpp" -#include "PICA/pica_frag_config.hpp" -#include "PICA/pica_vert_config.hpp" -#include "PICA/regs.hpp" -#include "PICA/shader_gen_types.hpp" -#include "helpers.hpp" - -namespace PICA::ShaderGen { - class FragmentGenerator { - API api; - Language language; - - void compileTEV(std::string& shader, int stage, const PICA::FragmentConfig& config); - void getSource(std::string& shader, PICA::TexEnvConfig::Source source, int index, const PICA::FragmentConfig& config); - void getColorOperand(std::string& shader, PICA::TexEnvConfig::Source source, PICA::TexEnvConfig::ColorOperand color, int index, const PICA::FragmentConfig& config); - void getAlphaOperand(std::string& shader, PICA::TexEnvConfig::Source source, PICA::TexEnvConfig::AlphaOperand alpha, int index, const PICA::FragmentConfig& config); - void getColorOperation(std::string& shader, PICA::TexEnvConfig::Operation op); - void getAlphaOperation(std::string& shader, PICA::TexEnvConfig::Operation op); - - void applyAlphaTest(std::string& shader, const PICA::FragmentConfig& config); - void compileLights(std::string& shader, const PICA::FragmentConfig& config); - void compileLUTLookup(std::string& shader, const PICA::FragmentConfig& config, u32 lightIndex, u32 lutID); - bool isSamplerEnabled(u32 environmentID, u32 lutID); - - void compileFog(std::string& shader, const PICA::FragmentConfig& config); - void compileLogicOps(std::string& shader, const PICA::FragmentConfig& config); - - public: - FragmentGenerator(API api, Language language) : api(api), language(language) {} - std::string generate(const PICA::FragmentConfig& config, void* driverInfo = nullptr); - std::string getDefaultVertexShader(); - // For when PICA shader is acceleration is enabled. Turn the PICA shader source into a proper vertex shader - std::string getVertexShaderAccelerated(const std::string& picaSource, const PICA::VertConfig& vertConfig, bool usingUbershader); - - void setTarget(API api, Language language) { - this->api = api; - this->language = language; - } - }; -}; // namespace PICA::ShaderGen \ No newline at end of file diff --git a/include/PICA/shader_gen_types.hpp b/include/PICA/shader_gen_types.hpp deleted file mode 100644 index b069f71f..00000000 --- a/include/PICA/shader_gen_types.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -namespace PICA::ShaderGen { - // Graphics API this shader is targetting - enum class API { GL, GLES, Vulkan, Metal }; - - // Shading language to use - enum class Language { GLSL, MSL }; -} // namespace PICA::ShaderGen diff --git a/include/PICA/shader_unit.hpp b/include/PICA/shader_unit.hpp index 80e01346..d8d93160 100644 --- a/include/PICA/shader_unit.hpp +++ b/include/PICA/shader_unit.hpp @@ -2,9 +2,10 @@ #include "PICA/shader.hpp" class ShaderUnit { - public: - PICAShader vs; // Vertex shader - PICAShader gs; // Geometry shader + +public: + PICAShader vs; // Vertex shader + PICAShader gs; // Geometry shader ShaderUnit() : vs(ShaderType::Vertex), gs(ShaderType::Geometry) {} void reset(); diff --git a/include/align.hpp b/include/align.hpp deleted file mode 100644 index 8ce50bb2..00000000 --- a/include/align.hpp +++ /dev/null @@ -1,100 +0,0 @@ -// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin -// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) - -#pragma once - -#include - -#include "compiler_builtins.hpp" -#include "helpers.hpp" - -#ifdef _WIN32 -#include -#endif - -namespace Common { - template - constexpr bool isAligned(T value, unsigned int alignment) { - return (value % static_cast(alignment)) == 0; - } - - template - constexpr T alignUp(T value, unsigned int alignment) { - return (value + static_cast(alignment - 1)) / static_cast(alignment) * static_cast(alignment); - } - - template - constexpr T alignDown(T value, unsigned int alignment) { - return value / static_cast(alignment) * static_cast(alignment); - } - - template - constexpr bool isAlignedPow2(T value, unsigned int alignment) { - return (value & static_cast(alignment - 1)) == 0; - } - - template - constexpr T alignUpPow2(T value, unsigned int alignment) { - return (value + static_cast(alignment - 1)) & static_cast(~static_cast(alignment - 1)); - } - - template - constexpr T alignDownPow2(T value, unsigned int alignment) { - return value & static_cast(~static_cast(alignment - 1)); - } - - template - constexpr bool isPow2(T value) { - return (value & (value - 1)) == 0; - } - - template - constexpr T previousPow2(T value) { - if (value == static_cast(0)) return 0; - - value |= (value >> 1); - value |= (value >> 2); - value |= (value >> 4); - if constexpr (sizeof(T) >= 16) value |= (value >> 8); - if constexpr (sizeof(T) >= 32) value |= (value >> 16); - if constexpr (sizeof(T) >= 64) value |= (value >> 32); - return value - (value >> 1); - } - - template - constexpr T nextPow2(T value) { - // https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 - if (value == static_cast(0)) return 0; - - value--; - value |= (value >> 1); - value |= (value >> 2); - value |= (value >> 4); - if constexpr (sizeof(T) >= 16) value |= (value >> 8); - if constexpr (sizeof(T) >= 32) value |= (value >> 16); - if constexpr (sizeof(T) >= 64) value |= (value >> 32); - value++; - return value; - } - - ALWAYS_INLINE static void* alignedMalloc(size_t size, size_t alignment) { -#ifdef _WIN32 - return _aligned_malloc(size, alignment); -#else - // Unaligned sizes are slow on macOS. -#ifdef __APPLE__ - if (isPow2(alignment)) size = (size + alignment - 1) & ~(alignment - 1); -#endif - void* ret = nullptr; - return (posix_memalign(&ret, alignment, size) == 0) ? ret : nullptr; -#endif - } - - ALWAYS_INLINE static void alignedFree(void* ptr) { -#ifdef _MSC_VER - _aligned_free(ptr); -#else - free(ptr); -#endif - } -} // namespace Common diff --git a/include/android_utils.hpp b/include/android_utils.hpp deleted file mode 100644 index 0e1a016a..00000000 --- a/include/android_utils.hpp +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -namespace AndroidUtils { - int openDocument(const char* directory, const char* mode); -} \ No newline at end of file diff --git a/include/applets/applet.hpp b/include/applets/applet.hpp index 48f20b03..0c3ab519 100644 --- a/include/applets/applet.hpp +++ b/include/applets/applet.hpp @@ -1,9 +1,6 @@ #pragma once -#include - #include "helpers.hpp" -#include "kernel/kernel_types.hpp" #include "memory.hpp" #include "result/result.hpp" @@ -68,27 +65,24 @@ namespace Applets { }; struct Parameter { - u32 senderID; // ID of the parameter sender - u32 destID; // ID of the app to receive parameter - u32 signal; // Signal type (eg request) - u32 object; // Some applets will also respond with shared memory handles for transferring data between the sender and called - std::vector data; // Misc data + u32 senderID; + u32 destID; + APTSignal signal; + std::vector data; }; class AppletBase { - protected: Memory& mem; - std::optional& nextParameter; public: virtual const char* name() = 0; // Called by APT::StartLibraryApplet and similar - virtual Result::HorizonResult start(const MemoryBlock* sharedMem, const std::vector& parameters, u32 appID) = 0; + virtual Result::HorizonResult start() = 0; // Transfer parameters from application -> applet - virtual Result::HorizonResult receiveParameter(const Parameter& parameter) = 0; + virtual Result::HorizonResult receiveParameter() = 0; virtual void reset() = 0; - AppletBase(Memory& mem, std::optional& nextParam) : mem(mem), nextParameter(nextParam) {} + AppletBase(Memory& mem) : mem(mem) {} }; } // namespace Applets \ No newline at end of file diff --git a/include/applets/applet_manager.hpp b/include/applets/applet_manager.hpp index d8cfff12..95b54009 100644 --- a/include/applets/applet_manager.hpp +++ b/include/applets/applet_manager.hpp @@ -1,7 +1,3 @@ -#pragma once -#include - -#include "applets/error_applet.hpp" #include "applets/mii_selector.hpp" #include "applets/software_keyboard.hpp" #include "helpers.hpp" @@ -12,15 +8,10 @@ namespace Applets { class AppletManager { MiiSelectorApplet miiSelector; SoftwareKeyboardApplet swkbd; - ErrorApplet error; - std::optional nextParameter = std::nullopt; public: AppletManager(Memory& mem); void reset(); AppletBase* getApplet(u32 id); - - Applets::Parameter glanceParameter(); - Applets::Parameter receiveParameter(); }; } // namespace Applets \ No newline at end of file diff --git a/include/applets/error_applet.hpp b/include/applets/error_applet.hpp deleted file mode 100644 index 4dcc319d..00000000 --- a/include/applets/error_applet.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#include "applets/applet.hpp" - -namespace Applets { - class ErrorApplet final : public AppletBase { - public: - virtual const char* name() override { return "Error/EULA Agreement"; } - virtual Result::HorizonResult start(const MemoryBlock* sharedMem, const std::vector& parameters, u32 appID) override; - virtual Result::HorizonResult receiveParameter(const Applets::Parameter& parameter) override; - virtual void reset() override; - - ErrorApplet(Memory& memory, std::optional& nextParam) : AppletBase(memory, nextParam) {} - }; -} // namespace Applets \ No newline at end of file diff --git a/include/applets/mii_selector.hpp b/include/applets/mii_selector.hpp index 36f9fe79..e40547fb 100644 --- a/include/applets/mii_selector.hpp +++ b/include/applets/mii_selector.hpp @@ -1,83 +1,13 @@ -#include - #include "applets/applet.hpp" -#include "swap.hpp" namespace Applets { - struct MiiConfig { - u8 enableCancelButton; - u8 enableGuestMii; - u8 showOnTopScreen; - std::array pad1; - std::array title; - std::array pad2; - u8 showGuestMiis; - std::array pad3; - u32 initiallySelectedIndex; - std::array guestMiiWhitelist; - std::array userMiiWhitelist; - std::array pad4; - u32 magicValue; - }; - static_assert(sizeof(MiiConfig) == 0x104, "Mii config size is wrong"); - - // Some members of this struct are not properly aligned so we need pragma pack -#pragma pack(push, 1) - struct MiiData { - u8 version; - u8 miiOptions; - u8 miiPos; - u8 consoleID; - - u64_be systemID; - u32_be miiID; - std::array creatorMAC; - u16 padding; - - u16_be miiDetails; - std::array miiName; - u8 height; - u8 width; - - u8 faceStyle; - u8 faceDetails; - u8 hairStyle; - u8 hairDetails; - u32_be eyeDetails; - u32_be eyebrowDetails; - u16_be noseDetails; - u16_be mouthDetails; - u16_be moustacheDetails; - u16_be beardDetails; - u16_be glassesDetails; - u16_be moleDetails; - - std::array authorName; - }; -#pragma pack(pop) - static_assert(sizeof(MiiData) == 0x5C, "MiiData structure has incorrect size"); - - struct MiiResult { - u32_be returnCode; - u32_be isGuestMiiSelected; - u32_be selectedGuestMiiIndex; - MiiData selectedMiiData; - u16_be unknown1; - u16_be miiChecksum; - std::array guestMiiName; - }; - static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size"); - class MiiSelectorApplet final : public AppletBase { public: virtual const char* name() override { return "Mii Selector"; } - virtual Result::HorizonResult start(const MemoryBlock* sharedMem, const std::vector& parameters, u32 appID) override; - virtual Result::HorizonResult receiveParameter(const Applets::Parameter& parameter) override; + virtual Result::HorizonResult start() override; + virtual Result::HorizonResult receiveParameter() override; virtual void reset() override; - MiiResult output; - MiiConfig config; - MiiResult getDefaultMii(); - MiiSelectorApplet(Memory& memory, std::optional& nextParam) : AppletBase(memory, nextParam) {} + MiiSelectorApplet(Memory& memory) : AppletBase(memory) {} }; } // namespace Applets \ No newline at end of file diff --git a/include/applets/software_keyboard.hpp b/include/applets/software_keyboard.hpp index f753566d..1fb721a1 100644 --- a/include/applets/software_keyboard.hpp +++ b/include/applets/software_keyboard.hpp @@ -1,162 +1,13 @@ -#include - #include "applets/applet.hpp" -#include "swap.hpp" namespace Applets { - // Software keyboard definitions adapted from libctru/Citra - // Keyboard input filtering flags. Allows the caller to specify what input is explicitly not allowed - namespace SoftwareKeyboardFilter { - enum Filter : u32 { - Digits = 1, // Disallow the use of more than a certain number of digits (0 or more) - At = 1 << 1, // Disallow the use of the @ sign. - Percent = 1 << 2, // Disallow the use of the % sign. - Backslash = 1 << 3, // Disallow the use of the \ sign. - Profanity = 1 << 4, // Disallow profanity using Nintendo's profanity filter. - Callback = 1 << 5, // Use a callback in order to check the input. - }; - } // namespace SoftwareKeyboardFilter - - // Keyboard features. - namespace SoftwareKeyboardFeature { - enum Feature { - Parental = 1, // Parental PIN mode. - DarkenTopScreen = 1 << 1, // Darken the top screen when the keyboard is shown. - PredictiveInput = 1 << 2, // Enable predictive input (necessary for Kanji input in JPN systems). - Multiline = 1 << 3, // Enable multiline input. - FixedWidth = 1 << 4, // Enable fixed-width mode. - AllowHome = 1 << 5, // Allow the usage of the HOME button. - AllowReset = 1 << 6, // Allow the usage of a software-reset combination. - AllowPower = 1 << 7, // Allow the usage of the POWER button. - DefaultQWERTY = 1 << 9, // Default to the QWERTY page when the keyboard is shown. - }; - } // namespace SoftwareKeyboardFeature - class SoftwareKeyboardApplet final : public AppletBase { public: - static constexpr int MAX_BUTTON = 3; // Maximum number of buttons that can be in the keyboard. - static constexpr int MAX_BUTTON_TEXT_LEN = 16; // Maximum button text length, in UTF-16 code units. - static constexpr int MAX_HINT_TEXT_LEN = 64; // Maximum hint text length, in UTF-16 code units. - static constexpr int MAX_CALLBACK_MSG_LEN = 256; // Maximum filter callback error message length, in UTF-16 code units. - - // Keyboard types - enum class SoftwareKeyboardType : u32 { - Normal, // Normal keyboard with several pages (QWERTY/accents/symbol/mobile) - QWERTY, // QWERTY keyboard only. - NumPad, // Number pad. - Western, // On JPN systems, a text keyboard without Japanese input capabilities, otherwise same as SWKBD_TYPE_NORMAL. - }; - - // Keyboard dialog buttons. - enum class SoftwareKeyboardButtonConfig : u32 { - SingleButton, // Ok button - DualButton, // Cancel | Ok buttons - TripleButton, // Cancel | I Forgot | Ok buttons - NoButton, // No button (returned by swkbdInputText in special cases) - }; - - // Accepted input types. - enum class SoftwareKeyboardValidInput : u32 { - Anything, // All inputs are accepted. - NotEmpty, // Empty inputs are not accepted. - NotEmptyNotBlank, // Empty or blank inputs (consisting solely of whitespace) are not accepted. - NotBlank, // Blank inputs (consisting solely of whitespace) are not accepted, but empty inputs are. - FixedLen, // The input must have a fixed length (specified by maxTextLength in swkbdInit) - }; - - // Keyboard password modes. - enum class SoftwareKeyboardPasswordMode : u32 { - None, // Characters are not concealed. - Hide, // Characters are concealed immediately. - HideDelay, // Characters are concealed a second after they've been typed. - }; - - // Keyboard filter callback return values. - enum class SoftwareKeyboardCallbackResult : u32 { - OK, // Specifies that the input is valid. - Close, // Displays an error message, then closes the keyboard. - Continue, // Displays an error message and continues displaying the keyboard. - }; - - // Keyboard return values. - enum class SoftwareKeyboardResult : s32 { - None = -1, // Dummy/unused. - InvalidInput = -2, // Invalid parameters to swkbd. - OutOfMem = -3, // Out of memory. - - D0Click = 0, // The button was clicked in 1-button dialogs. - D1Click0, // The left button was clicked in 2-button dialogs. - D1Click1, // The right button was clicked in 2-button dialogs. - D2Click0, // The left button was clicked in 3-button dialogs. - D2Click1, // The middle button was clicked in 3-button dialogs. - D2Click2, // The right button was clicked in 3-button dialogs. - - HomePressed = 10, // The HOME button was pressed. - ResetPressed, // The soft-reset key combination was pressed. - PowerPressed, // The POWER button was pressed. - - ParentalOK = 20, // The parental PIN was verified successfully. - ParentalFail, // The parental PIN was incorrect. - - BannedInput = 30, // The filter callback returned SoftwareKeyboardCallback::CLOSE. - }; - - struct SoftwareKeyboardConfig { - enum_le type; - enum_le numButtonsM1; - enum_le validInput; - enum_le passwordMode; - s32_le isParentalScreen; - s32_le darkenTopScreen; - u32_le filterFlags; - u32_le saveStateFlags; - u16_le maxTextLength; - u16_le dictWordCount; - u16_le maxDigits; - std::array, MAX_BUTTON> buttonText; - std::array numpadKeys; - std::array hintText; // Text to display when asking the user for input - bool predictiveInput; - bool multiline; - bool fixedWidth; - bool allowHome; - bool allowReset; - bool allowPower; - bool unknown; - bool defaultQwerty; - std::array buttonSubmitsText; - u16_le language; - - u32_le initialTextOffset; // Offset of the default text in the output SharedMemory - u32_le dictOffset; - u32_le initialStatusOffset; - u32_le initialLearningOffset; - u32_le sharedMemorySize; // Size of the SharedMemory - u32_le version; - - enum_le returnCode; - - u32_le statusOffset; - u32_le learningOffset; - - u32_le textOffset; // Offset in the SharedMemory where the output text starts - u16_le textLength; // Length in characters of the output text - - enum_le callbackResult; - std::array callbackMessage; - bool skipAtCheck; - std::array pad; - }; - static_assert(sizeof(SoftwareKeyboardConfig) == 0x400, "Software keyboard config size is wrong"); - virtual const char* name() override { return "Software Keyboard"; } - virtual Result::HorizonResult start(const MemoryBlock* sharedMem, const std::vector& parameters, u32 appID) override; - virtual Result::HorizonResult receiveParameter(const Applets::Parameter& parameter) override; + virtual Result::HorizonResult start() override; + virtual Result::HorizonResult receiveParameter() override; virtual void reset() override; - SoftwareKeyboardApplet(Memory& memory, std::optional& nextParam) : AppletBase(memory, nextParam) {} - void closeKeyboard(u32 appID); - - SoftwareKeyboardConfig config; + SoftwareKeyboardApplet(Memory& memory) : AppletBase(memory) {} }; } // namespace Applets \ No newline at end of file diff --git a/include/audio/aac.hpp b/include/audio/aac.hpp deleted file mode 100644 index 389ecc04..00000000 --- a/include/audio/aac.hpp +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once -#include -#include - -#include "helpers.hpp" -#include "swap.hpp" - -namespace Audio::AAC { - namespace ResultCode { - enum : u32 { - Success = 0, - }; - } - - // Enum values and struct definitions based off Citra - namespace Command { - enum : u16 { - Init = 0, // Initialize encoder/decoder - EncodeDecode = 1, // Encode/Decode AAC - Shutdown = 2, // Shutdown encoder/decoder - LoadState = 3, - SaveState = 4, - }; - } - - namespace SampleRate { - enum : u32 { - Rate48000 = 0, - Rate44100 = 1, - Rate32000 = 2, - Rate24000 = 3, - Rate22050 = 4, - Rate16000 = 5, - Rate12000 = 6, - Rate11025 = 7, - Rate8000 = 8, - }; - } - - namespace Mode { - enum : u16 { - None = 0, - Decode = 1, - Encode = 2, - }; - } - - struct DecodeResponse { - u32_le sampleRate; - u32_le channelCount; - u32_le size; - u32_le unknown1; - u32_le unknown2; - u32_le sampleCount; - }; - - struct DecodeRequest { - u32_le address; // Address of input AAC stream - u32_le size; // Size of input AAC stream - u32_le destAddrLeft; // Output address for left channel samples - u32_le destAddrRight; // Output address for right channel samples - u32_le unknown1; - u32_le unknown2; - }; - - struct Message { - u16_le mode = Mode::None; // Encode or decode AAC? - u16_le command = Command::Init; - u32_le resultCode = ResultCode::Success; - - // Info on the AAC request - union { - std::array commandData{}; - - DecodeResponse decodeResponse; - DecodeRequest decodeRequest; - }; - }; - - static_assert(sizeof(Message) == 32); - static_assert(std::is_trivially_copyable()); -} // namespace Audio::AAC diff --git a/include/audio/aac_decoder.hpp b/include/audio/aac_decoder.hpp deleted file mode 100644 index 8964e1f2..00000000 --- a/include/audio/aac_decoder.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include - -#include "audio/aac.hpp" -#include "helpers.hpp" - -struct AAC_DECODER_INSTANCE; - -namespace Audio::AAC { - class Decoder { - using DecoderHandle = AAC_DECODER_INSTANCE*; - using PaddrCallback = std::function; - - DecoderHandle decoderHandle = nullptr; - - bool isInitialized() { return decoderHandle != nullptr; } - void initialize(); - - public: - // Decode function. Takes in a reference to the AAC response & request, and a callback for paddr -> pointer conversions - // We also allow for optionally muting the AAC output (setting all of it to 0) instead of properly decoding it, for debug/research purposes - void decode(AAC::Message& response, const AAC::Message& request, PaddrCallback paddrCallback, bool enableAudio = true); - ~Decoder(); - }; -} // namespace Audio::AAC \ No newline at end of file diff --git a/include/audio/audio_device.hpp b/include/audio/audio_device.hpp deleted file mode 100644 index 966fd667..00000000 --- a/include/audio/audio_device.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#if defined(__LIBRETRO__) && defined(USE_LIBRETRO_AUDIO_DEVICE) -#include "audio/libretro_audio_device.hpp" -using AudioDevice = LibretroAudioDevice; -#else -#include "audio/miniaudio_device.hpp" -using AudioDevice = MiniAudioDevice; -#endif \ No newline at end of file diff --git a/include/audio/audio_device_interface.hpp b/include/audio/audio_device_interface.hpp deleted file mode 100644 index de70c77a..00000000 --- a/include/audio/audio_device_interface.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#include - -#include "config.hpp" -#include "helpers.hpp" -#include "ring_buffer.hpp" - -class AudioDeviceInterface { - protected: - static constexpr usize maxFrameCount = 0x2000; - - using Samples = Common::RingBuffer; - using RenderBatchCallback = usize (*)(const s16*, usize); - - Samples* samples = nullptr; - - const AudioDeviceConfig& audioSettings; - // Store the last stereo sample we output. We play this when underruning to avoid pops. - std::array lastStereoSample{}; - - public: - AudioDeviceInterface(Samples* samples, const AudioDeviceConfig& audioSettings) : samples(samples), audioSettings(audioSettings) {} - - bool running = false; - Samples* getSamples() { return samples; } - - // If safe is on, we create a null audio device - virtual void init(Samples& samples, bool safe = false) = 0; - virtual void close() = 0; - - virtual void start() = 0; - virtual void stop() = 0; - - // Only used for audio devices that render multiple audio frames in one go, eg the libretro audio device. - virtual void renderBatch(RenderBatchCallback callback) {} -}; \ No newline at end of file diff --git a/include/audio/audio_interpolation.hpp b/include/audio/audio_interpolation.hpp deleted file mode 100644 index 8a87cbcd..00000000 --- a/include/audio/audio_interpolation.hpp +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#pragma once - -#include -#include - -#include "audio/hle_mixer.hpp" -#include "helpers.hpp" - -namespace Audio::Interpolation { - // A variable length buffer of signed PCM16 stereo samples. - using StereoBuffer16 = std::deque>; - using StereoFrame16 = Audio::DSPMixer::StereoFrame; - - struct State { - // Two historical samples. - std::array xn1 = {}; //< x[n-1] - std::array xn2 = {}; //< x[n-2] - // Current fractional position. - u64 fposition = 0; - }; - - /** - * No interpolation. This is equivalent to a zero-order hold. There is a two-sample predelay. - * @param state Interpolation state. - * @param input Input buffer. - * @param rate Stretch factor. Must be a positive non-zero value. - * rate > 1.0 performs decimation and rate < 1.0 performs upsampling. - * @param output The resampled audio buffer. - * @param outputi The index of output to start writing to. - */ - void none(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, usize& outputi); - - /** - * Linear interpolation. This is equivalent to a first-order hold. There is a two-sample predelay. - * @param state Interpolation state. - * @param input Input buffer. - * @param rate Stretch factor. Must be a positive non-zero value. - * rate > 1.0 performs decimation and rate < 1.0 performs upsampling. - * @param output The resampled audio buffer. - * @param outputi The index of output to start writing to. - */ - void linear(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, usize& outputi); - - /** - * Polyphase interpolation. This is currently stubbed to just perform linear interpolation - * @param state Interpolation state. - * @param input Input buffer. - * @param rate Stretch factor. Must be a positive non-zero value. - * rate > 1.0 performs decimation and rate < 1.0 performs upsampling. - * @param output The resampled audio buffer. - * @param outputi The index of output to start writing to. - */ - void polyphase(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, usize& outputi); -} // namespace Audio::Interpolation \ No newline at end of file diff --git a/include/audio/dsp_binary.hpp b/include/audio/dsp_binary.hpp deleted file mode 100644 index 6345903a..00000000 --- a/include/audio/dsp_binary.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include "helpers.hpp" - -struct Dsp1 { - // All sizes are in bytes unless otherwise specified - u8 signature[0x100]; - u8 magic[4]; - u32 size; - u8 codeMemLayout; - u8 dataMemLayout; - u8 pad[3]; - u8 specialType; - u8 segmentCount; - u8 flags; - u32 specialStart; - u32 specialSize; - u64 zeroBits; - - struct Segment { - u32 offs; // Offset of the segment data - u32 dspAddr; // Start of the segment in 16-bit units - u32 size; - u8 pad[3]; - u8 type; - u8 hash[0x20]; - }; - - Segment segments[10]; -}; diff --git a/include/audio/dsp_core.hpp b/include/audio/dsp_core.hpp deleted file mode 100644 index c2016569..00000000 --- a/include/audio/dsp_core.hpp +++ /dev/null @@ -1,84 +0,0 @@ -#pragma once -#include -#include -#include - -#include "helpers.hpp" -#include "logger.hpp" -#include "ring_buffer.hpp" -#include "scheduler.hpp" - -// The DSP core must have access to the DSP service to be able to trigger interrupts properly -class DSPService; -class Memory; -struct EmulatorConfig; - -namespace Audio { - // There are 160 stereo samples in 1 audio frame, so 320 samples total - static constexpr u64 samplesInFrame = 160; - // 1 frame = 4096 DSP cycles = 8192 ARM11 cycles - static constexpr u64 cyclesPerFrame = samplesInFrame * 8192; - // For LLE DSP cores, we run the DSP for N cycles at a time, every N*2 arm11 cycles since the ARM11 runs twice as fast - static constexpr u64 lleSlice = 16384; - - class DSPCore { - // 0x2000 stereo (= 2 channel) samples - using Samples = Common::RingBuffer; - - protected: - Memory& mem; - Scheduler& scheduler; - DSPService& dspService; - EmulatorConfig& settings; - - Samples sampleBuffer; - bool audioEnabled = false; - - MAKE_LOG_FUNCTION(log, dspLogger) - - public: - enum class Type { Null, Teakra, HLE }; - DSPCore(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& settings) - : mem(mem), scheduler(scheduler), dspService(dspService), settings(settings) {} - virtual ~DSPCore() {} - - virtual void reset() = 0; - virtual void runAudioFrame(u64 eventTimestamp) = 0; - virtual u8* getDspMemory() = 0; - - virtual u16 recvData(u32 regId) = 0; - virtual bool recvDataIsReady(u32 regId) = 0; - virtual void setSemaphore(u16 value) = 0; - virtual void writeProcessPipe(u32 channel, u32 size, u32 buffer) = 0; - virtual std::vector readPipe(u32 channel, u32 peer, u32 size, u32 buffer) = 0; - virtual void loadComponent(std::vector& data, u32 programMask, u32 dataMask) = 0; - virtual void unloadComponent() = 0; - virtual void setSemaphoreMask(u16 value) = 0; - - static Audio::DSPCore::Type typeFromString(std::string inString); - static const char* typeToString(Audio::DSPCore::Type type); - - Samples& getSamples() { return sampleBuffer; } - virtual void setAudioEnabled(bool enable) { audioEnabled = enable; } - - virtual Type getType() = 0; - virtual void* getRegisters() { return nullptr; } - - // Read a word from program memory. By default, just perform a regular DSP RAM read for the HLE cores - // The LLE cores translate the address, accounting for the way Teak memory is mapped - virtual u16 readProgramWord(u32 address) { - u8* dspRam = getDspMemory(); - - auto readByte = [&](u32 addr) { - if (addr >= 256_KB) return u8(0); - return dspRam[addr]; - }; - - u16 lsb = u16(readByte(address)); - u16 msb = u16(readByte(address + 1)); - return u16(lsb | (msb << 8)); - } - }; - - std::unique_ptr makeDSPCore(EmulatorConfig& config, Memory& mem, Scheduler& scheduler, DSPService& dspService); -} // namespace Audio \ No newline at end of file diff --git a/include/audio/dsp_shared_mem.hpp b/include/audio/dsp_shared_mem.hpp deleted file mode 100644 index 272edf7e..00000000 --- a/include/audio/dsp_shared_mem.hpp +++ /dev/null @@ -1,534 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#pragma once - -#include -#include -#include -#include - -#include "bitfield.hpp" -#include "helpers.hpp" -#include "swap.hpp" - -namespace Audio::HLE { - // The application-accessible region of DSP memory consists of two parts. Both are marked as IO and - // have Read/Write permissions. - - // First Region: 0x1FF50000 (Size: 0x8000) - // Second Region: 0x1FF70000 (Size: 0x8000) - - // The DSP reads from each region alternately based on the frame counter for each region much like a - // double-buffer. The frame counter is located as the very last u16 of each region and is - // incremented each audio tick. - - constexpr u32 region0Offset = 0x50000; - constexpr u32 region1Offset = 0x70000; - - // Number of DSP voices - constexpr u32 sourceCount = 24; - // There are 160 stereo samples in 1 audio frame, so 320 samples total - static constexpr u64 samplesInFrame = 160; - - /** - * The DSP is native 16-bit. The DSP also appears to be big-endian. When reading 32-bit numbers from - * its memory regions, the higher and lower 16-bit halves are swapped compared to the little-endian - * layout of the ARM11. Hence from the ARM11's point of view the memory space appears to be - * middle-endian. - * - * Unusually this does not appear to be an issue for floating point numbers. The DSP makes the more - * sensible choice of keeping that little-endian. There are also some exceptions such as the - * IntermediateMixSamples structure, which is little-endian. - * - * This struct implements the conversion to and from this middle-endianness. - */ - struct u32_dsp { - u32_dsp() = default; - operator u32() const { return Convert(storage); } - void operator=(u32 newValue) { storage = Convert(newValue); } - - private: - static constexpr u32 Convert(u32 value) { return (value << 16) | (value >> 16); } - u32_le storage; - }; - static_assert(std::is_trivially_copyable::value, "u32_dsp isn't trivially copyable"); - - // There are 15 structures in each memory region. A table of them in the order they appear in memory - // is presented below: - // # First Region DSP Address Purpose Control - // 5 0x8400 DSP Status DSP - // 9 0x8410 DSP Debug Info DSP - // 6 0x8540 Final Mix Samples DSP - // 2 0x8680 Source Status [24] DSP - // 8 0x8710 Compressor Table Application - // 4 0x9430 DSP Configuration Application - // 7 0x9492 Intermediate Mix Samples DSP + App - // 1 0x9E92 Source Configuration [24] Application - // 3 0xA792 Source ADPCM Coefficients [24] Application - // 10 0xA912 Surround Sound Related - // 11 0xAA12 Surround Sound Related - // 12 0xAAD2 Surround Sound Related - // 13 0xAC52 Surround Sound Related - // 14 0xAC5C Surround Sound Related - // 0 0xBFFF Frame Counter Application - // - // #: This refers to the order in which they appear in the DspPipe::Audio DSP pipe. - // See also: HLE::PipeRead. - // - // Note that the above addresses do vary slightly between audio firmwares observed; the addresses - // are not fixed in stone. The addresses above are only an examplar; they're what this - // implementation does and provides to applications. - // - // Application requests the DSP service to convert DSP addresses into ARM11 virtual addresses using - // the ConvertProcessAddressFromDspDram service call. Applications seem to derive the addresses for - // the second region via: - // second_region_dsp_addr = first_region_dsp_addr | 0x10000 - // - // Applications maintain most of its own audio state, the memory region is used mainly for - // communication and not storage of state. - // - // In the documentation below, filter and effect transfer functions are specified in the z domain. - // (If you are more familiar with the Laplace transform, z = exp(sT). The z domain is the digital - // frequency domain, just like how the s domain is the analog frequency domain.) - -#define ASSERT_DSP_STRUCT(name, size) \ - static_assert(std::is_standard_layout::value, "DSP structure " #name " doesn't use standard layout"); \ - static_assert(std::is_trivially_copyable::value, "DSP structure " #name " isn't trivially copyable"); \ - static_assert(sizeof(name) == (size), "Unexpected struct size for DSP structure " #name) - - struct SourceConfiguration { - struct Configuration { - /// These dirty flags are set by the application when it updates the fields in this struct. - /// The DSP clears these each audio frame. - union { - u32_le dirtyRaw; - - BitField<0, 1, u32> formatDirty; - BitField<1, 1, u32> monoOrStereoDirty; - BitField<2, 1, u32> adpcmCoefficientsDirty; - /// Tends to be set when a looped buffer is queued. - BitField<3, 1, u32> partialEmbeddedBufferDirty; - BitField<4, 1, u32> partialResetFlag; - - BitField<16, 1, u32> enableDirty; - BitField<17, 1, u32> interpolationDirty; - BitField<18, 1, u32> rateMultiplierDirty; - BitField<19, 1, u32> bufferQueueDirty; - BitField<20, 1, u32> loopRelatedDirty; - /// Tends to also be set when embedded buffer is updated. - BitField<21, 1, u32> playPositionDirty; - BitField<22, 1, u32> filtersEnabledDirty; - BitField<23, 1, u32> simpleFilterDirty; - BitField<24, 1, u32> biquadFilterDirty; - BitField<25, 1, u32> gain0Dirty; - BitField<26, 1, u32> gain1Dirty; - BitField<27, 1, u32> gain2Dirty; - BitField<28, 1, u32> syncCountDirty; - BitField<29, 1, u32> resetFlag; - BitField<30, 1, u32> embeddedBufferDirty; - }; - - // Gain control - - /** - * Gain is between 0.0-1.0. This determines how much will this source appear on each of the - * 12 channels that feed into the intermediate mixers. Each of the three intermediate mixers - * is fed two left and two right channels. - */ - float_le gain[3][4]; - - // Interpolation - - /// Multiplier for sample rate. Resampling occurs with the selected interpolation method. - float_le rateMultiplier; - - enum class InterpolationMode : u8 { - Polyphase = 0, - Linear = 1, - None = 2, - }; - - InterpolationMode interpolationMode; - u8 pad; ///< Interpolation related - - // Filters - - /** - * This is the simplest normalized first-order digital recursive filter. - * The transfer function of this filter is: - * H(z) = b0 / (1 - a1 z^-1) - * Note the feedbackward coefficient is negated. - * Values are signed fixed point with 15 fractional bits. - */ - struct SimpleFilter { - s16_le b0; - s16_le a1; - }; - - /** - * This is a normalised biquad filter (second-order). - * The transfer function of this filter is: - * H(z) = (b0 + b1 z^-1 + b2 z^-2) / (1 - a1 z^-1 - a2 z^-2) - * Nintendo chose to negate the feedbackward coefficients. This differs from standard - * notation as in: https://ccrma.stanford.edu/~jos/filters/Direct_Form_I.html - * Values are signed fixed point with 14 fractional bits.simple_filter_enabled - */ - struct BiquadFilter { - s16_le a2; - s16_le a1; - s16_le b2; - s16_le b1; - s16_le b0; - }; - - union { - u16_le filters_enabled; - BitField<0, 1, u16> simpleFilterEnabled; - BitField<1, 1, u16> biquadFilterEnabled; - }; - - SimpleFilter simpleFilter; - BiquadFilter biquadFilter; - - // Buffer Queue - - /// A buffer of audio data from the application, along with metadata about it. - struct Buffer { - /// Physical memory address of the start of the buffer - u32_dsp physicalAddress; - - /// This is length in terms of samples. - /// Note that in different buffer formats a sample takes up different number of bytes. - u32_dsp length; - - /// ADPCM Predictor (4 bits) and Scale (4 bits) - union { - u16_le adpcm_ps; - BitField<0, 4, u16> adpcmScale; - BitField<4, 4, u16> adpcmPredictor; - }; - - /// ADPCM Historical Samples (y[n-1] and y[n-2]) - u16_le adpcm_yn[2]; - - /// This is non-zero when the ADPCM values above are to be updated. - u8 adpcmDirty; - - /// Is a looping buffer. - u8 isLooping; - - /// This value is shown in SourceStatus::previous_buffer_id when this buffer has - /// finished. This allows the emulated application to tell what buffer is currently - /// playing. - u16_le bufferID; - - u16 pad; - }; - - u16_le buffersDirty; ///< Bitmap indicating which buffers are dirty (bit i -> buffers[i]) - Buffer buffers[4]; ///< Queued Buffers - - // Playback controls - u32_dsp loopRelated; - u8 enable; - u8 pad1; - u16_le syncCount; ///< Application-side sync count (See also: SourceStatus::sync_count) - u32_dsp playPosition; ///< Position. (Units: number of samples) - u16 pad2[2]; - - // Embedded Buffer - // This buffer is often the first buffer to be used when initiating audio playback, - // after which the buffer queue is used. - - u32_dsp physicalAddress; - - /// This is length in terms of samples. - /// Note a sample takes up different number of bytes in different buffer formats. - u32_dsp length; - - enum class MonoOrStereo : u16_le { - Mono = 1, - Stereo = 2, - }; - - enum class Format : u16_le { - PCM8 = 0, - PCM16 = 1, - ADPCM = 2, - }; - - union { - u16_le flags1Raw; - BitField<0, 2, MonoOrStereo> monoOrStereo; - BitField<2, 2, Format> format; - BitField<5, 1, u16> fadeIn; - }; - - /// ADPCM Predictor (4 bit) and Scale (4 bit) - union { - u16_le adpcm_ps; - BitField<0, 4, u16> adpcmScale; - BitField<4, 4, u16> adpcmPredictor; - }; - - /// ADPCM Historical Samples (y[n-1] and y[n-2]) - u16_le adpcm_yn[2]; - - union { - u16_le flags2Raw; - BitField<0, 1, u16> adpcmDirty; ///< Has the ADPCM info above been changed? - BitField<1, 1, u16> isLooping; ///< Is this a looping buffer? - }; - - /// Buffer id of embedded buffer (used as a buffer id in SourceStatus to reference this - /// buffer). - u16_le bufferID; - }; - - Configuration config[sourceCount]; - }; - ASSERT_DSP_STRUCT(SourceConfiguration::Configuration, 192); - ASSERT_DSP_STRUCT(SourceConfiguration::Configuration::Buffer, 20); - - struct SourceStatus { - struct Status { - u8 enabled; ///< Is this channel enabled? (Doesn't have to be playing anything.) - u8 currentBufferIDDirty; ///< Non-zero when current_buffer_id changes - u16_le syncCount; ///< Is set by the DSP to the value of SourceConfiguration::sync_count - u32_dsp samplePosition; ///< Number of samples into the current buffer - u16_le currentBufferID; ///< Updated when a buffer finishes playing - u16_le previousBufferID; ///< Updated when all buffers in the queue finish playing - }; - - Status status[sourceCount]; - }; - ASSERT_DSP_STRUCT(SourceStatus::Status, 12); - - struct DspConfiguration { - /// These dirty flags are set by the application when it updates the fields in this struct. - /// The DSP clears these each audio frame. - union { - u32_le dirtyRaw; - - BitField<6, 1, u32> auxFrontBypass0Dirty; - BitField<7, 1, u32> auxFrontBypass1Dirty; - BitField<8, 1, u32> auxBusEnable0Dirty; - BitField<9, 1, u32> auxBusEnable1Dirty; - BitField<10, 1, u32> delayEffect0Dirty; - BitField<11, 1, u32> delayEffect1Dirty; - BitField<12, 1, u32> reverbEffect0Dirty; - BitField<13, 1, u32> reverbEffect1Dirty; - - BitField<15, 1, u32> outputBufferCountDirty; - BitField<16, 1, u32> masterVolumeDirty; - - BitField<24, 1, u32> auxVolume0Dirty; - BitField<25, 1, u32> auxVolume1Dirty; - BitField<26, 1, u32> outputFormatDirty; - BitField<27, 1, u32> clippingModeDirty; - BitField<28, 1, u32> headphonesConnectedDirty; - BitField<29, 1, u32> surroundDepthDirty; - BitField<30, 1, u32> surroundSpeakerPositionDirty; - BitField<31, 1, u32> rearRatioDirty; - }; - - /// The DSP has three intermediate audio mixers. This controls the volume level (0.0-1.0) for - /// each at the final mixer. - float_le masterVolume; - std::array auxVolumes; - - u16_le outputBufferCount; - u16 pad1[2]; - - enum class OutputFormat : u16_le { - Mono = 0, - Stereo = 1, - Surround = 2, - }; - - OutputFormat outputFormat; - - u16_le clippingMode; ///< Not sure of the exact gain equation for the limiter. - u16_le headphonesConnected; ///< Application updates the DSP on headphone status. - - u16_le surroundDepth; - u16_le surroundSpeakerPosition; - u16 pad2; ///< TODO: Surround sound related - u16_le rearRatio; - std::array auxFrontBypass; - std::array auxBusEnable; - - /** - * This is delay with feedback. - * Transfer function: - * H(z) = a z^-N / (1 - b z^-1 + a g z^-N) - * where - * N = frameCount * samplesInFrame - * g, a and b are fixed point with 7 fractional bits - */ - struct DelayEffect { - /// These dirty flags are set by the application when it updates the fields in this struct. - /// The DSP clears these each audio frame. - union { - u16_le dirtyRaw; - BitField<0, 1, u16> enableDirty; - BitField<1, 1, u16> workBufferAddressDirty; - BitField<2, 1, u16> otherDirty; ///< Set when anything else has been changed - }; - - u16_le enable; - u16 pad3; - u16_le outputs; - /// The application allocates a block of memory for the DSP to use as a work buffer. - u32_dsp workBufferAddress; - /// Frames to delay by - u16_le frameCount; - - // Coefficients - s16_le g; ///< Fixed point with 7 fractional bits - s16_le a; ///< Fixed point with 7 fractional bits - s16_le b; ///< Fixed point with 7 fractional bits - }; - - DelayEffect delayEffect[2]; - struct ReverbEffect { - u16 pad[26]; ///< TODO - }; - - ReverbEffect reverbEffect[2]; - - u16_le syncMode; - u16 pad3; - union { - u32_le dirtyRaw2; - - BitField<16, 1, u32> syncModeDirty; - }; - }; - ASSERT_DSP_STRUCT(DspConfiguration, 196); - ASSERT_DSP_STRUCT(DspConfiguration::DelayEffect, 20); - ASSERT_DSP_STRUCT(DspConfiguration::ReverbEffect, 52); - static_assert(offsetof(DspConfiguration, syncMode) == 0xBC); - static_assert(offsetof(DspConfiguration, dirtyRaw2) == 0xC0); - - struct AdpcmCoefficients { - /// Coefficients are signed fixed point with 11 fractional bits. - /// Each source has 16 coefficients associated with it. - s16_le coeff[sourceCount][16]; - }; - ASSERT_DSP_STRUCT(AdpcmCoefficients, 768); - - struct DspStatus { - u16_le unknown; - u16_le droppedFrames; - u16 pad0[0xE]; - }; - ASSERT_DSP_STRUCT(DspStatus, 32); - - /// Final mixed output in PCM16 stereo format, what you hear out of the speakers. - /// When the application writes to this region it has no effect. - struct FinalMixSamples { - s16_le pcm16[samplesInFrame][2]; - }; - ASSERT_DSP_STRUCT(FinalMixSamples, 640); - - /// DSP writes output of intermediate mixers 1 and 2 here. - /// Writes to this region by the application edits the output of the intermediate mixers. - /// This seems to be intended to allow the application to do custom effects on the ARM11. - /// Values that exceed s16 range will be clipped by the DSP after further processing. - struct IntermediateMixSamples { - struct Samples { - s32_le pcm32[4][samplesInFrame]; ///< Little-endian as opposed to DSP middle-endian. - }; - - Samples mix1; - Samples mix2; - }; - ASSERT_DSP_STRUCT(IntermediateMixSamples, 5120); - - /// Compressor table - struct Compressor { - u16 pad[0xD20]; ///< TODO - }; - - /// There is no easy way to implement this in a HLE implementation. - struct DspDebug { - u16 pad[0x130]; - }; - ASSERT_DSP_STRUCT(DspDebug, 0x260); - - struct SharedMemory { - /// Padding - u16 pad[0x400]; - - DspStatus dspStatus; - DspDebug dspDebug; - FinalMixSamples finalSamples; - SourceStatus sourceStatuses; - - Compressor compressor; - DspConfiguration dspConfiguration; - IntermediateMixSamples intermediateMixSamples; - SourceConfiguration sourceConfigurations; - AdpcmCoefficients adpcmCoefficients; - - struct { - u16 pad[0x100]; - } unknown10; - - struct { - u16 pad[0xC0]; - } unknown11; - - struct { - u16 pad[0x180]; - } unknown12; - - struct { - u16 pad[0xA]; - } unknown13; - - struct { - u16 pad[0x13A3]; - } unknown14; - - u16_le frameCounter; - }; - ASSERT_DSP_STRUCT(SharedMemory, 0x8000); - - union DspMemory { - std::array rawMemory{}; - struct { - u8 unused0[0x50000]; - SharedMemory region0; - u8 unused1[0x18000]; - SharedMemory region1; - u8 unused2[0x8000]; - }; - }; - static_assert(offsetof(DspMemory, region0) == region0Offset, "DSP region 0 is at the wrong offset"); - static_assert(offsetof(DspMemory, region1) == region1Offset, "DSP region 1 is at the wrong offset"); - - // Structures must have an offset that is a multiple of two. - static_assert(offsetof(SharedMemory, frameCounter) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, sourceConfigurations) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, sourceStatuses) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, adpcmCoefficients) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, dspConfiguration) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, dspStatus) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, finalSamples) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, intermediateMixSamples) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, compressor) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, dspDebug) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, unknown10) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, unknown11) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, unknown12) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, unknown13) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - static_assert(offsetof(SharedMemory, unknown14) % 2 == 0, "Structures in HLE::SharedMemory must be 2-byte aligned"); - -#undef INSERT_PADDING_DSPWORDS -#undef ASSERT_DSP_STRUCT - -} // namespace Audio::HLE \ No newline at end of file diff --git a/include/audio/dsp_simd.hpp b/include/audio/dsp_simd.hpp deleted file mode 100644 index 9a0e723a..00000000 --- a/include/audio/dsp_simd.hpp +++ /dev/null @@ -1,78 +0,0 @@ -#pragma once - -#include "audio/hle_mixer.hpp" -#include "compiler_builtins.hpp" -#include "helpers.hpp" - -#if defined(_M_AMD64) || defined(__x86_64__) -#define DSP_SIMD_X64 -#include -#elif defined(_M_ARM64) || defined(__aarch64__) -#define DSP_SIMD_ARM64 -#include -#endif - -// Optimized SIMD functions for mixing the stereo output of a DSP voice into a quadraphonic intermediate mix -namespace DSP::MixIntoQuad { - using IntermediateMix = Audio::DSPMixer::IntermediateMix; - using StereoFrame16 = Audio::DSPMixer::StereoFrame; - - // Non-SIMD, portable algorithm - ALWAYS_INLINE static void mixPortable(IntermediateMix& mix, StereoFrame16& frame, const float* gains) { - for (usize sampleIndex = 0; sampleIndex < Audio::samplesInFrame; sampleIndex++) { - // Mono samples are in the format: (l, r) - // When converting to quad, gain0 and gain2 are applied to the left sample, gain1 and gain3 to the right one - mix[sampleIndex][0] += s32(frame[sampleIndex][0] * gains[0]); - mix[sampleIndex][1] += s32(frame[sampleIndex][1] * gains[1]); - mix[sampleIndex][2] += s32(frame[sampleIndex][0] * gains[2]); - mix[sampleIndex][3] += s32(frame[sampleIndex][1] * gains[3]); - } - } - -#if defined(DSP_SIMD_X64) && (defined(__SSE4_1__) || defined(__AVX__)) - ALWAYS_INLINE static void mixSSE4_1(IntermediateMix& mix, StereoFrame16& frame, const float* gains) { - __m128 gains_ = _mm_load_ps(gains); - - for (usize sampleIndex = 0; sampleIndex < Audio::samplesInFrame; sampleIndex++) { - // The stereo samples, repeated every 4 bytes inside the vector register - __m128i stereoSamples = _mm_castps_si128(_mm_load1_ps((float*)&frame[sampleIndex][0])); - - __m128 currentFrame = _mm_cvtepi32_ps(_mm_cvtepi16_epi32(stereoSamples)); - __m128i offset = _mm_cvttps_epi32(_mm_mul_ps(currentFrame, gains_)); - __m128i intermediateMixPrev = _mm_load_si128((__m128i*)&mix[sampleIndex][0]); - __m128i result = _mm_add_epi32(intermediateMixPrev, offset); - _mm_store_si128((__m128i*)&mix[sampleIndex][0], result); - } - } -#endif - -#ifdef DSP_SIMD_ARM64 - ALWAYS_INLINE static void mixNEON(IntermediateMix& mix, StereoFrame16& frame, const float* gains) { - float32x4_t gains_ = vld1q_f32(gains); - - for (usize sampleIndex = 0; sampleIndex < Audio::samplesInFrame; sampleIndex++) { - // Load l and r samples and repeat them every 4 bytes - int32x4_t stereoSamples = vld1q_dup_s32((s32*)&frame[sampleIndex][0]); - // Expand the bottom 4 s16 samples into an int32x4 with sign extension, then convert them to float32x4 - float32x4_t currentFrame = vcvtq_f32_s32(vmovl_s16(vget_low_s16(vreinterpretq_s16_s32(stereoSamples)))); - - // Multiply samples by their respective gains, truncate the result, and add it into the intermediate mix buffer - int32x4_t offset = vcvtq_s32_f32(vmulq_f32(currentFrame, gains_)); - int32x4_t intermediateMixPrev = vld1q_s32((s32*)&mix[sampleIndex][0]); - int32x4_t result = vaddq_s32(intermediateMixPrev, offset); - vst1q_s32((s32*)&mix[sampleIndex][0], result); - } - } -#endif - - // Mixes the stereo output of a DSP voice into a quadraphonic intermediate mix - static void mix(IntermediateMix& mix, StereoFrame16& frame, const float* gains) { -#if defined(DSP_SIMD_ARM64) - return mixNEON(mix, frame, gains); -#elif defined(DSP_SIMD_X64) && (defined(__SSE4_1__) || defined(__AVX__)) - return mixSSE4_1(mix, frame, gains); -#else - return mixPortable(mix, frame, gains); -#endif - } -} // namespace DSP::MixIntoQuad \ No newline at end of file diff --git a/include/audio/hle_core.hpp b/include/audio/hle_core.hpp deleted file mode 100644 index f04ed6c2..00000000 --- a/include/audio/hle_core.hpp +++ /dev/null @@ -1,230 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include - -#include "audio/aac.hpp" -#include "audio/aac_decoder.hpp" -#include "audio/audio_interpolation.hpp" -#include "audio/dsp_core.hpp" -#include "audio/dsp_shared_mem.hpp" -#include "audio/hle_mixer.hpp" -#include "memory.hpp" - -namespace Audio { - struct DSPSource { - // Audio buffer information - // https://www.3dbrew.org/wiki/DSP_Memory_Region - struct Buffer { - u32 paddr; // Physical address of the buffer - u32 sampleCount; // Total number of samples - u8 adpcmScale; // ADPCM predictor/scale - u8 pad1; // Unknown - - std::array previousSamples; // ADPCM y[n-1] and y[n-2] - bool adpcmDirty; - bool looping; - u16 bufferID; - u8 pad2; - - u32 playPosition = 0; // Current position in the buffer - SampleFormat format; - SourceType sourceType; - - bool fromQueue = false; // Is this buffer from the buffer queue or an embedded buffer? - bool hasPlayedOnce = false; // Has the buffer been played at least once before? - - bool operator<(const Buffer& other) const { - // Lower ID = Higher priority - // If this buffer ID is greater than the other one, then this buffer has a lower priority - return this->bufferID > other.bufferID; - } - }; - - // Buffer of decoded PCM16 samples. TODO: Are there better alternatives to use over deque? - using SampleBuffer = std::deque>; - using BufferQueue = std::priority_queue; - using InterpolationMode = HLE::SourceConfiguration::Configuration::InterpolationMode; - using InterpolationState = Audio::Interpolation::State; - - // The samples this voice output for this audio frame. - // Aligned to 4 for SIMD purposes. - alignas(4) DSPMixer::StereoFrame currentFrame; - BufferQueue buffers; - - SampleFormat sampleFormat = SampleFormat::ADPCM; - SourceType sourceType = SourceType::Stereo; - InterpolationMode interpolationMode = InterpolationMode::Linear; - InterpolationState interpolationState; - - // There's one gain configuration for each of the 3 intermediate mixing stages - // And each gain configuration is composed of 4 gain values, one for each sample in a quad-channel sample - // Aligned to 16 for SIMD purposes - alignas(16) std::array, 3> gains; - // Of the 3 intermediate mix stages, typically only the first one is actually enabled and the other ones do nothing - // Ie their gain is vec4(0.0). We track which stages are disabled (have a gain of all 0s) using this bitfield and skip them - // In order to save up on CPU time. - uint enabledMixStages = 0; - - u32 samplePosition; // Sample number into the current audio buffer - u32 currentBufferPaddr; // Physical address of current audio buffer - - float rateMultiplier; - u16 syncCount; - u16 currentBufferID; - u16 previousBufferID; - - bool enabled; // Is the source enabled? - bool isBufferIDDirty = false; // Did we change buffers? - - // ADPCM decoding info: - // An array of fixed point S5.11 coefficients. These provide "weights" for the history samples - // The system describing how an ADPCM output sample is generated is - // y[n] = x[n] + 0.5 + coeff1 * y[n-1] + coeff2 * y[n-2] - // Where y[n] is the output sample we're generating, x[n] is the ADPCM "differential" of the current sample - // And coeff1/coeff2 are the coefficients from this array that are used for weighing the history samples - std::array adpcmCoefficients; - s16 history1; // y[n-1], the previous output sample - s16 history2; // y[n-2], the previous previous output sample - - SampleBuffer currentSamples; - int index = 0; // Index of the voice in [0, 23] for debugging - - void reset(); - - // Push a buffer to the buffer queue - void pushBuffer(const Buffer& buffer) { buffers.push(buffer); } - - // Pop a buffer from the buffer queue and return it - Buffer popBuffer() { - assert(!buffers.empty()); - - Buffer ret = buffers.top(); - buffers.pop(); - - return ret; - } - - DSPSource() { reset(); } - }; - - class HLE_DSP : public DSPCore { - // The audio frame types are public in case we want to use them for unit tests - public: - template - using Sample = DSPMixer::Sample; - - template - using Frame = DSPMixer::Frame; - - template - using MonoFrame = DSPMixer::MonoFrame; - - template - using StereoFrame = DSPMixer::StereoFrame; - - template - using QuadFrame = DSPMixer::QuadFrame; - - using Source = Audio::DSPSource; - using SampleBuffer = Source::SampleBuffer; - using IntermediateMix = DSPMixer::IntermediateMix; - - private: - enum class DSPState : u32 { - Off, - On, - Slep, - }; - - // Number of DSP pipes - static constexpr size_t pipeCount = 8; - DSPState dspState; - - std::array, pipeCount> pipeData; // The data of each pipe - std::array sources; // DSP voices - Audio::HLE::DspMemory dspRam; - - Audio::DSPMixer mixer; - std::unique_ptr aacDecoder; - - void resetAudioPipe(); - bool loaded = false; // Have we loaded a component? - - // Get the index for the current region we'll be reading. Returns the region with the highest frame counter - // Accounting for whether one of the frame counters has wrapped around - usize readRegionIndex() const { - const auto counter0 = dspRam.region0.frameCounter; - const auto counter1 = dspRam.region1.frameCounter; - - // Handle wraparound cases first - if (counter0 == 0xffff && counter1 != 0xfffe) { - return 1; - } else if (counter1 == 0xffff && counter0 != 0xfffe) { - return 0; - } else { - return (counter0 > counter1) ? 0 : 1; - } - } - - // DSP shared memory is double buffered; One region is being written to while the other one is being read from - Audio::HLE::SharedMemory& readRegion() { return readRegionIndex() == 0 ? dspRam.region0 : dspRam.region1; } - Audio::HLE::SharedMemory& writeRegion() { return readRegionIndex() == 0 ? dspRam.region1 : dspRam.region0; } - - // Get a pointer of type T* to the data starting from physical address paddr - template - T* getPointerPhys(u32 paddr, u32 size = 0) { - if (paddr >= PhysicalAddrs::FCRAM && paddr + size <= PhysicalAddrs::FCRAMEnd) { - u8* fcram = mem.getFCRAM(); - u32 index = paddr - PhysicalAddrs::FCRAM; - - return (T*)&fcram[index]; - } else if (paddr >= PhysicalAddrs::DSP_RAM && paddr + size <= PhysicalAddrs::DSP_RAM_End) { - u32 index = paddr - PhysicalAddrs::DSP_RAM; - return (T*)&dspRam.rawMemory[index]; - } else [[unlikely]] { - Helpers::warn("[DSP] Tried to access unknown physical address: %08X", paddr); - return nullptr; - } - } - - void handleAACRequest(const AAC::Message& request); - void updateSourceConfig(Source& source, HLE::SourceConfiguration::Configuration& config, s16_le* adpcmCoefficients); - void updateMixerConfig(HLE::SharedMemory& sharedMem); - void generateFrame(StereoFrame& frame); - void generateFrame(DSPSource& source); - void outputFrame(); - // Perform the final mix, mixing the quadraphonic samples from all voices into the output audio frame - void performMix(Audio::HLE::SharedMemory& readRegion, Audio::HLE::SharedMemory& writeRegion); - - // Decode an entire buffer worth of audio - void decodeBuffer(DSPSource& source); - - SampleBuffer decodePCM8(const u8* data, usize sampleCount, Source& source); - SampleBuffer decodePCM16(const u8* data, usize sampleCount, Source& source); - SampleBuffer decodeADPCM(const u8* data, usize sampleCount, Source& source); - - public: - HLE_DSP(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& config); - ~HLE_DSP() override {} - - void reset() override; - void runAudioFrame(u64 eventTimestamp) override; - - u8* getDspMemory() override { return dspRam.rawMemory.data(); } - DSPCore::Type getType() override { return DSPCore::Type::HLE; } - - u16 recvData(u32 regId) override; - bool recvDataIsReady(u32 regId) override { return true; } // Treat data as always ready - void writeProcessPipe(u32 channel, u32 size, u32 buffer) override; - std::vector readPipe(u32 channel, u32 peer, u32 size, u32 buffer) override; - - void loadComponent(std::vector& data, u32 programMask, u32 dataMask) override; - void unloadComponent() override; - void setSemaphore(u16 value) override {} - void setSemaphoreMask(u16 value) override {} - }; -} // namespace Audio diff --git a/include/audio/hle_mixer.hpp b/include/audio/hle_mixer.hpp deleted file mode 100644 index ed8b4a09..00000000 --- a/include/audio/hle_mixer.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once -#include - -#include "audio/dsp_shared_mem.hpp" -#include "helpers.hpp" - -namespace Audio { - using SampleFormat = HLE::SourceConfiguration::Configuration::Format; - using SourceType = HLE::SourceConfiguration::Configuration::MonoOrStereo; - - class DSPMixer { - public: - template - using Sample = std::array; - - template - using Frame = std::array, 160>; - - template - using MonoFrame = Frame; - - template - using StereoFrame = Frame; - - template - using QuadFrame = Frame; - - // Internally the DSP uses four channels when mixing. - // Neatly, QuadFrame means that every sample is a uint32x4 value, which is particularly nice for SIMD mixing - using IntermediateMix = QuadFrame; - - private: - using ChannelFormat = HLE::DspConfiguration::OutputFormat; - // The audio from each DSP voice is converted to quadraphonic and then fed into 3 intermediate mixing stages - // Two of these intermediate mixers (second and third) are used for effects, including custom effects done on the CPU - static constexpr usize mixerStageCount = 3; - - public: - ChannelFormat channelFormat = ChannelFormat::Stereo; - std::array volumes; - std::array enableAuxStages; - - void reset() { - channelFormat = ChannelFormat::Stereo; - - volumes.fill(0.0); - enableAuxStages.fill(false); - } - }; -} // namespace Audio \ No newline at end of file diff --git a/include/audio/libretro_audio_device.hpp b/include/audio/libretro_audio_device.hpp deleted file mode 100644 index 9c6d19f8..00000000 --- a/include/audio/libretro_audio_device.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once -#include - -#include "audio/audio_device_interface.hpp" - -class LibretroAudioDevice final : public AudioDeviceInterface { - bool initialized = false; - - public: - LibretroAudioDevice(const AudioDeviceConfig& audioSettings) : AudioDeviceInterface(nullptr, audioSettings), initialized(false) { - running = false; - } - - void init(Samples& samples, bool safe = false) override { - this->samples = &samples; - - initialized = true; - running = false; - } - - void close() override { - initialized = false; - running = false; - }; - - void start() override { running = true; } - void stop() override { running = false; }; - - void renderBatch(RenderBatchCallback callback) override { - if (running) { - static constexpr usize sampleRate = 32768; // 3DS samples per second - static constexpr usize frameCount = sampleRate / 60; // 3DS samples per video frame - static constexpr usize channelCount = 2; - static s16 audioBuffer[frameCount * channelCount]; - - usize samplesWritten = 0; - samplesWritten += samples->pop(audioBuffer, frameCount * channelCount); - - // Get the last sample for underrun handling - if (samplesWritten != 0) { - std::memcpy(&lastStereoSample[0], &audioBuffer[(samplesWritten - 1) * 2], sizeof(lastStereoSample)); - } - - // If underruning, copy the last output sample - { - s16* pointer = &audioBuffer[samplesWritten * 2]; - s16 l = lastStereoSample[0]; - s16 r = lastStereoSample[1]; - - for (usize i = samplesWritten; i < frameCount; i++) { - *pointer++ = l; - *pointer++ = r; - } - } - - callback(audioBuffer, sizeof(audioBuffer) / (channelCount * sizeof(s16))); - } - } - - bool isInitialized() const { return initialized; } -}; diff --git a/include/audio/miniaudio_device.hpp b/include/audio/miniaudio_device.hpp deleted file mode 100644 index 5cf7c801..00000000 --- a/include/audio/miniaudio_device.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once -#include -#include -#include - -#include "audio/audio_device_interface.hpp" -#include "miniaudio.h" - -class MiniAudioDevice final : public AudioDeviceInterface { - static constexpr ma_uint32 sampleRate = 32768; // 3DS sample rate - static constexpr ma_uint32 channelCount = 2; // Audio output is stereo - - bool initialized = false; - - ma_device device; - ma_context context; - ma_device_config deviceConfig; - - // Store the last stereo sample we output. We play this when underruning to avoid pops. - std::vector audioDevices; - - public: - MiniAudioDevice(const AudioDeviceConfig& audioSettings); - - // If safe is on, we create a null audio device - void init(Samples& samples, bool safe = false) override; - void close() override; - - void start() override; - void stop() override; - - bool isInitialized() const { return initialized; } -}; \ No newline at end of file diff --git a/include/audio/null_core.hpp b/include/audio/null_core.hpp deleted file mode 100644 index a67c1d9d..00000000 --- a/include/audio/null_core.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -#include - -#include "audio/dsp_core.hpp" -#include "memory.hpp" - -namespace Audio { - class NullDSP : public DSPCore { - enum class DSPState : u32 { - Off, - On, - Slep, - }; - - // Number of DSP pipes - static constexpr size_t pipeCount = 8; - DSPState dspState; - - std::array, pipeCount> pipeData; // The data of each pipe - std::array dspRam; - - void resetAudioPipe(); - bool loaded = false; // Have we loaded a component? - - public: - NullDSP(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& config) : DSPCore(mem, scheduler, dspService, config) {} - ~NullDSP() override {} - - void reset() override; - void runAudioFrame(u64 eventTimestamp) override; - - u8* getDspMemory() override { return dspRam.data(); } - DSPCore::Type getType() override { return DSPCore::Type::Null; } - - u16 recvData(u32 regId) override; - bool recvDataIsReady(u32 regId) override { return true; } // Treat data as always ready - void writeProcessPipe(u32 channel, u32 size, u32 buffer) override; - std::vector readPipe(u32 channel, u32 peer, u32 size, u32 buffer) override; - - // NOPs for null DSP core - void loadComponent(std::vector& data, u32 programMask, u32 dataMask) override; - void unloadComponent() override; - void setSemaphore(u16 value) override {} - void setSemaphoreMask(u16 value) override {} - }; - -} // namespace Audio \ No newline at end of file diff --git a/include/audio/teakra_core.hpp b/include/audio/teakra_core.hpp deleted file mode 100644 index 46cf7c00..00000000 --- a/include/audio/teakra_core.hpp +++ /dev/null @@ -1,107 +0,0 @@ -#pragma once -#include - -#include "audio/dsp_core.hpp" -#include "memory.hpp" -#include "swap.hpp" -#include "teakra/teakra.h" - -namespace Audio { - class TeakraDSP : public DSPCore { - Teakra::Teakra teakra; - u32 pipeBaseAddr; - bool running; // Is the DSP running? - bool loaded; // Have we finished loading a binary with LoadComponent? - bool signalledData; - bool signalledSemaphore; - - uint audioFrameIndex = 0; // Index in our audio frame - std::array audioFrame; - - // Get a pointer to a data memory address - u8* getDataPointer(u32 address) { return getDspMemory() + Memory::DSP_DATA_MEMORY_OFFSET + address; } - - enum class PipeDirection { - DSPtoCPU = 0, - CPUtoDSP = 1, - }; - - // A lot of Teakra integration code, especially pipe stuff is based on Citra's integration here: - // https://github.com/citra-emu/citra/blob/master/src/audio_core/lle/lle.cpp - struct PipeStatus { - // All addresses and sizes here refer to byte values, NOT 16-bit values. - u16_le address; - u16_le byteSize; - u16_le readPointer; - u16_le writePointer; - u8 slot; - u8 flags; - - static constexpr u16 wrapBit = 0x8000; - static constexpr u16 pointerMask = 0x7FFF; - - bool isFull() const { return (readPointer ^ writePointer) == wrapBit; } - bool isEmpty() const { return (readPointer ^ writePointer) == 0; } - - // isWrapped: Are read and write pointers in different memory passes. - // true: xxxx]----[xxxx (data is wrapping around the end of memory) - // false: ----[xxxx]---- - bool isWrapped() const { return (readPointer ^ writePointer) >= wrapBit; } - }; - static_assert(sizeof(PipeStatus) == 10, "Teakra: Pipe Status size is wrong"); - static constexpr u8 pipeToSlotIndex(u8 pipe, PipeDirection direction) { return (pipe * 2) + u8(direction); } - - PipeStatus getPipeStatus(u8 pipe, PipeDirection direction) { - PipeStatus ret; - const u8 index = pipeToSlotIndex(pipe, direction); - - std::memcpy(&ret, getDataPointer(pipeBaseAddr * 2 + index * sizeof(PipeStatus)), sizeof(PipeStatus)); - return ret; - } - - void updatePipeStatus(const PipeStatus& status) { - u8 slot = status.slot; - u8* statusAddress = getDataPointer(pipeBaseAddr * 2 + slot * sizeof(PipeStatus)); - - if (slot % 2 == 0) { - std::memcpy(statusAddress + 4, &status.readPointer, sizeof(u16)); - } else { - std::memcpy(statusAddress + 6, &status.writePointer, sizeof(u16)); - } - } - // Run 1 slice of DSP instructions - void runSlice() { - if (running) { - teakra.Run(Audio::lleSlice); - } - } - - public: - TeakraDSP(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& config); - ~TeakraDSP() override {} - - void reset() override; - - // Run 1 slice of DSP instructions and schedule the next audio frame - void runAudioFrame(u64 eventTimestamp) override { - runSlice(); - scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::lleSlice * 2); - } - - void setAudioEnabled(bool enable) override; - u8* getDspMemory() override { return teakra.GetDspMemory().data(); } - void* getRegisters() override; - DSPCore::Type getType() override { return DSPCore::Type::Teakra; } - u16 readProgramWord(u32 address) override { return teakra.ProgramRead(address); } - - u16 recvData(u32 regId) override { return teakra.RecvData(regId); } - bool recvDataIsReady(u32 regId) override { return teakra.RecvDataIsReady(regId); } - void setSemaphore(u16 value) override { teakra.SetSemaphore(value); } - void setSemaphoreMask(u16 value) override { teakra.MaskSemaphore(value); } - - void writeProcessPipe(u32 channel, u32 size, u32 buffer) override; - std::vector readPipe(u32 channel, u32 peer, u32 size, u32 buffer) override; - void loadComponent(std::vector& data, u32 programMask, u32 dataMask) override; - void unloadComponent() override; - }; -} // namespace Audio diff --git a/include/bitfield.hpp b/include/bitfield.hpp deleted file mode 100644 index d98b4e53..00000000 --- a/include/bitfield.hpp +++ /dev/null @@ -1,413 +0,0 @@ -// Copyright 2014 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -// Copyright 2014 Tony Wasserka -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the owner nor the names of its contributors may -// be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#pragma once - -#include -#include -#include -#include - -#include "compiler_builtins.hpp" -/* - * Abstract bitfield class - * - * Allows endianness-independent access to individual bitfields within some raw - * integer value. The assembly generated by this class is identical to the - * usage of raw bitfields, so it's a perfectly fine replacement. - * - * For BitField, X is the distance of the bitfield to the LSB of the - * raw value, Y is the length in bits of the bitfield. Z is an integer type - * which determines the sign of the bitfield. Z must have the same size as the - * raw integer. - * - * - * General usage: - * - * Create a new union with the raw integer value as a member. - * Then for each bitfield you want to expose, add a BitField member - * in the union. The template parameters are the bit offset and the number - * of desired bits. - * - * Changes in the bitfield members will then get reflected in the raw integer - * value and vice-versa. - * - * - * Sample usage: - * - * union SomeRegister - * { - * u32 hex; - * - * BitField<0,7,u32> first_seven_bits; // unsigned - * BitField<7,8,u32> next_eight_bits; // unsigned - * BitField<3,15,s32> some_signed_fields; // signed - * }; - * - * This is equivalent to the little-endian specific code: - * - * union SomeRegister - * { - * u32 hex; - * - * struct - * { - * u32 first_seven_bits : 7; - * u32 next_eight_bits : 8; - * }; - * struct - * { - * u32 : 3; // padding - * s32 some_signed_fields : 15; - * }; - * }; - * - * - * Caveats: - * - * 1) - * BitField provides automatic casting from and to the storage type where - * appropriate. However, when using non-typesafe functions like printf, an - * explicit cast must be performed on the BitField object to make sure it gets - * passed correctly, e.g.: - * printf("Value: %d", (s32)some_register.some_signed_fields); - * Note that this does not apply when using fmt, as a formatter is provided that - * handles this conversion automatically. - * - * 2) - * Not really a caveat, but potentially irritating: This class is used in some - * packed structures that do not guarantee proper alignment. Therefore we have - * to use #pragma pack here not to pack the members of the class, but instead - * to break GCC's assumption that the members of the class are aligned on - * sizeof(StorageType). - * TODO(neobrain): Confirm that this is a proper fix and not just masking - * symptoms. - */ -#pragma pack(1) -template < - std::size_t position, std::size_t bits, typename T, - // StorageType is T for non-enum types and the underlying type of T if - // T is an enumeration. Note that T is wrapped within an enable_if in the - // former case to workaround compile errors which arise when using - // std::underlying_type::type directly. - typename StorageType = typename std::conditional_t::value, std::underlying_type, std::enable_if>::type> -struct BitField { - private: - // This constructor might be considered ambiguous: - // Would it initialize the storage or just the bitfield? - // Hence, delete it. Use the assignment operator to set bitfield values! - BitField(T val) = delete; - - public: - // Force default constructor to be created - // so that we can use this within unions - constexpr BitField() = default; - - // We explicitly delete the copy assignment operator here, because the - // default copy assignment would copy the full storage value, rather than - // just the bits relevant to this particular bit field. - // Ideally, we would just implement the copy assignment to copy only the - // relevant bits, but we're prevented from doing that because the savestate - // code expects that this class is trivially copyable. - BitField& operator=(const BitField&) = delete; - - ALWAYS_INLINE BitField& operator=(T val) { - storage = (storage & ~GetMask()) | ((static_cast(val) << position) & GetMask()); - return *this; - } - - constexpr T Value() const { return Value(std::is_signed()); } - constexpr operator T() const { return Value(); } - static constexpr bool IsSigned() { return std::is_signed(); } - static constexpr std::size_t StartBit() { return position; } - static constexpr std::size_t NumBits() { return bits; } - - private: - // Unsigned version of StorageType - using StorageTypeU = std::make_unsigned_t; - - constexpr T Value(std::true_type) const { - const size_t shift_amount = 8 * sizeof(StorageType) - bits; - return static_cast((storage << (shift_amount - position)) >> shift_amount); - } - - constexpr T Value(std::false_type) const { return static_cast((storage & GetMask()) >> position); } - - static constexpr StorageType GetMask() { return (std::numeric_limits::max() >> (8 * sizeof(StorageType) - bits)) << position; } - - StorageType storage; - - static_assert(bits + position <= 8 * sizeof(StorageType), "Bitfield out of range"); - static_assert(sizeof(T) <= sizeof(StorageType), "T must fit in StorageType"); - - // And, you know, just in case people specify something stupid like bits=position=0x80000000 - static_assert(position < 8 * sizeof(StorageType), "Invalid position"); - static_assert(bits <= 8 * sizeof(T), "Invalid number of bits"); - static_assert(bits > 0, "Invalid number of bits"); -}; -#pragma pack() - -// Language limitations require the following to make these formattable -// (formatter::Ref> is not legal) -template -class BitFieldArrayConstRef; -template -class BitFieldArrayRef; -template -class BitFieldArrayConstIterator; -template -class BitFieldArrayIterator; - -#pragma pack(1) -template < - std::size_t position, std::size_t bits, std::size_t size, typename T, - // StorageType is T for non-enum types and the underlying type of T if - // T is an enumeration. Note that T is wrapped within an enable_if in the - // former case to workaround compile errors which arise when using - // std::underlying_type::type directly. - typename StorageType = typename std::conditional_t::value, std::underlying_type, std::enable_if>::type> -struct BitFieldArray { - using Ref = BitFieldArrayRef; - using ConstRef = BitFieldArrayConstRef; - using Iterator = BitFieldArrayIterator; - using ConstIterator = BitFieldArrayConstIterator; - - private: - // This constructor might be considered ambiguous: - // Would it initialize the storage or just the bitfield? - // Hence, delete it. Use the assignment operator to set bitfield values! - BitFieldArray(T val) = delete; - - public: - // Force default constructor to be created - // so that we can use this within unions - constexpr BitFieldArray() = default; - - // We explicitly delete the copy assignment operator here, because the - // default copy assignment would copy the full storage value, rather than - // just the bits relevant to this particular bit field. - // Ideally, we would just implement the copy assignment to copy only the - // relevant bits, but we're prevented from doing that because the savestate - // code expects that this class is trivially copyable. - BitFieldArray& operator=(const BitFieldArray&) = delete; - - public: - constexpr bool IsSigned() const { return std::is_signed(); } - constexpr std::size_t StartBit() const { return position; } - constexpr std::size_t NumBits() const { return bits; } - constexpr std::size_t Size() const { return size; } - constexpr std::size_t TotalNumBits() const { return bits * size; } - - constexpr T Value(size_t index) const { return Value(std::is_signed(), index); } - void SetValue(size_t index, T value) { - const size_t pos = position + bits * index; - storage = (storage & ~GetElementMask(index)) | ((static_cast(value) << pos) & GetElementMask(index)); - } - Ref operator[](size_t index) { return Ref(this, index); } - constexpr const ConstRef operator[](size_t index) const { return ConstRef(this, index); } - - constexpr Iterator begin() { return Iterator(this, 0); } - constexpr Iterator end() { return Iterator(this, size); } - constexpr ConstIterator begin() const { return ConstIterator(this, 0); } - constexpr ConstIterator end() const { return ConstIterator(this, size); } - constexpr ConstIterator cbegin() const { return begin(); } - constexpr ConstIterator cend() const { return end(); } - - private: - // Unsigned version of StorageType - using StorageTypeU = std::make_unsigned_t; - - constexpr T Value(std::true_type, size_t index) const { - const size_t pos = position + bits * index; - const size_t shift_amount = 8 * sizeof(StorageType) - bits; - return static_cast((storage << (shift_amount - pos)) >> shift_amount); - } - - constexpr T Value(std::false_type, size_t index) const { - const size_t pos = position + bits * index; - return static_cast((storage & GetElementMask(index)) >> pos); - } - - static constexpr StorageType GetElementMask(size_t index) { - const size_t pos = position + bits * index; - return (std::numeric_limits::max() >> (8 * sizeof(StorageType) - bits)) << pos; - } - - StorageType storage; - - static_assert(bits * size + position <= 8 * sizeof(StorageType), "Bitfield array out of range"); - static_assert(sizeof(T) <= sizeof(StorageType), "T must fit in StorageType"); - - // And, you know, just in case people specify something stupid like bits=position=0x80000000 - static_assert(position < 8 * sizeof(StorageType), "Invalid position"); - static_assert(bits <= 8 * sizeof(T), "Invalid number of bits"); - static_assert(bits > 0, "Invalid number of bits"); - static_assert(size <= 8 * sizeof(StorageType), "Invalid size"); - static_assert(size > 0, "Invalid size"); -}; -#pragma pack() - -template -class BitFieldArrayConstRef { - friend struct BitFieldArray; - friend class BitFieldArrayConstIterator; - - public: - constexpr T Value() const { return m_array->Value(m_index); }; - constexpr operator T() const { return Value(); } - - private: - constexpr BitFieldArrayConstRef(const BitFieldArray* array, size_t index) : m_array(array), m_index(index) {} - - const BitFieldArray* const m_array; - const size_t m_index; -}; - -template -class BitFieldArrayRef { - friend struct BitFieldArray; - friend class BitFieldArrayIterator; - - public: - constexpr T Value() const { return m_array->Value(m_index); }; - constexpr operator T() const { return Value(); } - T operator=(const BitFieldArrayRef& value) const { - m_array->SetValue(m_index, value); - return value; - } - T operator=(T value) const { - m_array->SetValue(m_index, value); - return value; - } - - private: - constexpr BitFieldArrayRef(BitFieldArray* array, size_t index) : m_array(array), m_index(index) {} - - BitFieldArray* const m_array; - const size_t m_index; -}; - -// Satisfies LegacyOutputIterator / std::output_iterator. -// Does not satisfy LegacyInputIterator / std::input_iterator as std::output_iterator_tag does not -// extend std::input_iterator_tag. -// Does not satisfy LegacyForwardIterator / std::forward_iterator, as that requires use of real -// references instead of proxy objects. -// This iterator allows use of BitFieldArray in range-based for loops, and with fmt::join. -template -class BitFieldArrayIterator { - friend struct BitFieldArray; - - public: - using iterator_category = std::output_iterator_tag; - using value_type = T; - using difference_type = ptrdiff_t; - using pointer = void; - using reference = BitFieldArrayRef; - - private: - constexpr BitFieldArrayIterator(BitFieldArray* array, size_t index) : m_array(array), m_index(index) {} - - public: - // Required by std::input_or_output_iterator - constexpr BitFieldArrayIterator() = default; - // Required by LegacyIterator - constexpr BitFieldArrayIterator(const BitFieldArrayIterator& other) = default; - // Required by LegacyIterator - BitFieldArrayIterator& operator=(const BitFieldArrayIterator& other) = default; - // Move constructor and assignment operators, explicitly defined for completeness - constexpr BitFieldArrayIterator(BitFieldArrayIterator&& other) = default; - BitFieldArrayIterator& operator=(BitFieldArrayIterator&& other) = default; - - public: - BitFieldArrayIterator& operator++() { - m_index++; - return *this; - } - BitFieldArrayIterator operator++(int) { - BitFieldArrayIterator other(*this); - ++*this; - return other; - } - constexpr reference operator*() const { return reference(m_array, m_index); } - constexpr bool operator==(BitFieldArrayIterator other) const { return m_index == other.m_index; } - constexpr bool operator!=(BitFieldArrayIterator other) const { return m_index != other.m_index; } - - private: - BitFieldArray* m_array; - size_t m_index; -}; - -// Satisfies LegacyInputIterator / std::input_iterator. -// Does not satisfy LegacyForwardIterator / std::forward_iterator, as that requires use of real -// references instead of proxy objects. -// This iterator allows use of BitFieldArray in range-based for loops, and with fmt::join. -template -class BitFieldArrayConstIterator { - friend struct BitFieldArray; - - public: - using iterator_category = std::input_iterator_tag; - using value_type = T; - using difference_type = ptrdiff_t; - using pointer = void; - using reference = BitFieldArrayConstRef; - - private: - constexpr BitFieldArrayConstIterator(const BitFieldArray* array, size_t index) : m_array(array), m_index(index) {} - - public: - // Required by std::input_or_output_iterator - constexpr BitFieldArrayConstIterator() = default; - // Required by LegacyIterator - constexpr BitFieldArrayConstIterator(const BitFieldArrayConstIterator& other) = default; - // Required by LegacyIterator - BitFieldArrayConstIterator& operator=(const BitFieldArrayConstIterator& other) = default; - // Move constructor and assignment operators, explicitly defined for completeness - constexpr BitFieldArrayConstIterator(BitFieldArrayConstIterator&& other) = default; - BitFieldArrayConstIterator& operator=(BitFieldArrayConstIterator&& other) = default; - - public: - BitFieldArrayConstIterator& operator++() { - m_index++; - return *this; - } - BitFieldArrayConstIterator operator++(int) { - BitFieldArrayConstIterator other(*this); - ++*this; - return other; - } - constexpr reference operator*() const { return reference(m_array, m_index); } - constexpr bool operator==(BitFieldArrayConstIterator other) const { return m_index == other.m_index; } - constexpr bool operator!=(BitFieldArrayConstIterator other) const { return m_index != other.m_index; } - - private: - const BitFieldArray* m_array; - size_t m_index; -}; diff --git a/include/capstone.hpp b/include/capstone.hpp deleted file mode 100644 index 14dd44b5..00000000 --- a/include/capstone.hpp +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once -#include - -#include -#include - -#include "helpers.hpp" - -namespace Common { - class CapstoneDisassembler { - csh handle; // Handle to our disassembler object - cs_insn* instructions = nullptr; // Pointer to instruction object - bool initialized = false; - - public: - bool isInitialized() { return initialized; } - void init(cs_arch arch, cs_mode mode) { initialized = (cs_open(arch, mode, &handle) == CS_ERR_OK); } - - CapstoneDisassembler() {} - CapstoneDisassembler(cs_arch arch, cs_mode mode) { init(arch, mode); } - - // Returns the number of instructions successfully disassembled - // pc: program counter of the instruction to disassemble - // bytes: Byte representation of instruction - // buffer: text buffer to output the disassembly too - usize disassemble(std::string& buffer, u32 pc, std::span bytes, u64 offset = 0) { - if (!initialized) { - buffer = "Capstone was not properly initialized"; - return 0; - } - - usize count = cs_disasm(handle, bytes.data(), bytes.size(), pc, offset, &instructions); - if (count == 0) { - // Error in disassembly, quit early and return empty string - buffer = "Error disassembling instructions with Capstone"; - return 0; - } - - buffer = ""; - for (usize i = 0; i < count; i++) { - buffer += std::string(instructions[i].mnemonic) + " " + std::string(instructions[i].op_str); - - if (i < count - 1) { - // Append newlines between instructions, sans the final instruction - buffer += "\n"; - } - } - - cs_free(instructions, count); - return count; - } - }; -} // namespace Common diff --git a/include/cheats.hpp b/include/cheats.hpp index b90c080b..c8d7c763 100644 --- a/include/cheats.hpp +++ b/include/cheats.hpp @@ -12,31 +12,25 @@ class Memory; class Cheats { public: enum class CheatType { - None, // Cheat has been removed by the frontend or is invalid ActionReplay, // CTRPF cheats + // TODO: Other cheat devices and standards? }; struct Cheat { - bool enabled = true; - CheatType type = CheatType::ActionReplay; + CheatType type; std::vector instructions; }; Cheats(Memory& mem, HIDService& hid); - u32 addCheat(const Cheat& cheat); - u32 addCheat(const u8* data, size_t size); - void removeCheat(u32 id); - void enableCheat(u32 id); - void disableCheat(u32 id); + void addCheat(const Cheat& cheat); void reset(); void run(); void clear(); bool haveCheats() const { return cheatsLoaded; } - static constexpr u32 badCheatHandle = 0xFFFFFFFF; private: ActionReplay ar; // An ActionReplay cheat machine for executing CTRPF codes std::vector cheats; bool cheatsLoaded = false; -}; +}; \ No newline at end of file diff --git a/include/config.hpp b/include/config.hpp index 7030a8e3..8398bb22 100644 --- a/include/config.hpp +++ b/include/config.hpp @@ -1,130 +1,22 @@ #pragma once #include -#include -#include "screen_layout.hpp" -#include "audio/dsp_core.hpp" -#include "frontend_settings.hpp" #include "renderer.hpp" -#include "services/region_codes.hpp" - -struct AudioDeviceConfig { - // Audio curve to use for volumes between 0-100 - enum class VolumeCurve : int { - Cubic = 0, // Samples are scaled by volume ^ 3 - Linear = 1, // Samples are scaled by volume - }; - - float volumeRaw = 1.0f; - VolumeCurve volumeCurve = VolumeCurve::Cubic; - - bool muteAudio = false; - - float getVolume() const { - if (muteAudio) { - return 0.0f; - } - - return volumeRaw; - } - - static VolumeCurve volumeCurveFromString(std::string inString); - static const char* volumeCurveToString(VolumeCurve curve); -}; // Remember to initialize every field here to its default value otherwise bad things will happen struct EmulatorConfig { - // Only enable the shader JIT by default on platforms where it's completely tested -#if defined(PANDA3DS_X64_HOST) || defined(PANDA3DS_ARM64_HOST) - static constexpr bool shaderJitDefault = true; -#else - static constexpr bool shaderJitDefault = false; -#endif - - // For now, use specialized shaders by default on MacOS as M1 drivers are buggy when using the ubershader, and on Android since mobile GPUs are - // horrible. On other platforms we default to ubershader + shadergen fallback for lights -#if defined(__ANDROID__) || defined(__APPLE__) - static constexpr bool ubershaderDefault = false; -#else - static constexpr bool ubershaderDefault = true; -#endif - static constexpr bool accelerateShadersDefault = true; - static constexpr bool audioEnabledDefault = true; - - // We default to OpenGL on all platforms other than iOS -#if defined(PANDA3DS_IOS) - static constexpr RendererType rendererDefault = RendererType::Metal; -#else - static constexpr RendererType rendererDefault = RendererType::OpenGL; -#endif - - static constexpr bool hashTexturesDefault = false; - - bool shaderJitEnabled = shaderJitDefault; - bool useUbershaders = ubershaderDefault; - bool accelerateShaders = accelerateShadersDefault; - bool hashTextures = hashTexturesDefault; - - ScreenLayout::Layout screenLayout = ScreenLayout::Layout::Default; - float topScreenSize = 0.5; - - bool accurateShaderMul = false; + bool shaderJitEnabled = true; bool discordRpcEnabled = false; - - // Toggles whether to force shadergen when there's more than N lights active and we're using the ubershader, for better performance - bool forceShadergenForLights = true; - int lightShadergenThreshold = 1; - - RendererType rendererType = rendererDefault; - Audio::DSPCore::Type dspType = Audio::DSPCore::Type::HLE; + RendererType rendererType = RendererType::OpenGL; bool sdCardInserted = true; bool sdWriteProtected = false; - bool circlePadProEnabled = true; - bool usePortableBuild = false; - - bool audioEnabled = audioEnabledDefault; - bool vsyncEnabled = true; - bool aacEnabled = true; // Enable AAC audio? - - bool enableRenderdoc = false; - bool printAppVersion = true; - bool printDSPFirmware = false; bool chargerPlugged = true; // Default to 3% battery to make users suffer int batteryPercentage = 3; - LanguageCodes systemLanguage = LanguageCodes::English; - - // Default ROM path to open in Qt and misc frontends - std::filesystem::path defaultRomPath = ""; - std::filesystem::path filePath; - - // Frontend window settings - struct WindowSettings { - static constexpr int defaultX = 200; - static constexpr int defaultY = 200; - static constexpr int defaultWidth = 800; - static constexpr int defaultHeight = 240 * 2; - - bool rememberPosition = false; // Remember window position & size - bool showAppVersion = false; - - int x = defaultX; - int y = defaultY; - int width = defaultHeight; - int height = defaultHeight; - }; - - WindowSettings windowSettings; - AudioDeviceConfig audioDeviceConfig; - FrontendSettings frontendSettings; - EmulatorConfig(const std::filesystem::path& path); - void load(); - void save(); - - static LanguageCodes languageCodeFromString(std::string inString); - static const char* languageCodeToString(LanguageCodes code); -}; + void load(const std::filesystem::path& path); + void save(const std::filesystem::path& path); +}; \ No newline at end of file diff --git a/include/cpu_dynarmic.hpp b/include/cpu_dynarmic.hpp index 24358533..cb7e5627 100644 --- a/include/cpu_dynarmic.hpp +++ b/include/cpu_dynarmic.hpp @@ -9,17 +9,15 @@ #include "helpers.hpp" #include "kernel.hpp" #include "memory.hpp" -#include "scheduler.hpp" -class Emulator; class CPU; class MyEnvironment final : public Dynarmic::A32::UserCallbacks { - public: - u64 ticksLeft = 0; - Memory& mem; - Kernel& kernel; - Scheduler& scheduler; +public: + u64 ticksLeft = 0; + u64 totalTicks = 0; + Memory& mem; + Kernel& kernel; u64 getCyclesForInstruction(bool isThumb, u32 instruction); @@ -78,56 +76,54 @@ class MyEnvironment final : public Dynarmic::A32::UserCallbacks { std::terminate(); } - void CallSVC(u32 swi) override { - kernel.serviceSVC(swi); - } + void CallSVC(u32 swi) override { + kernel.serviceSVC(swi); + } - void ExceptionRaised(u32 pc, Dynarmic::A32::Exception exception) override { - switch (exception) { - case Dynarmic::A32::Exception::UnpredictableInstruction: - Helpers::panic("Unpredictable instruction at pc = %08X", pc); - break; + void ExceptionRaised(u32 pc, Dynarmic::A32::Exception exception) override { + switch (exception) { + case Dynarmic::A32::Exception::UnpredictableInstruction: + Helpers::panic("Unpredictable instruction at pc = %08X", pc); + break; - default: Helpers::panic("Fired exception oops"); - } - } + default: Helpers::panic("Fired exception oops"); + } + } - void AddTicks(u64 ticks) override { - scheduler.currentTimestamp += ticks; + void AddTicks(u64 ticks) override { + totalTicks += ticks; - if (ticks > ticksLeft) { - ticksLeft = 0; - return; - } - ticksLeft -= ticks; - } + if (ticks > ticksLeft) { + ticksLeft = 0; + return; + } + ticksLeft -= ticks; + } - u64 GetTicksRemaining() override { - return ticksLeft; - } + u64 GetTicksRemaining() override { + return ticksLeft; + } - u64 GetTicksForCode(bool isThumb, u32 vaddr, u32 instruction) override { - return getCyclesForInstruction(isThumb, instruction); - } + u64 GetTicksForCode(bool isThumb, u32 vaddr, u32 instruction) override { + return getCyclesForInstruction(isThumb, instruction); + } - MyEnvironment(Memory& mem, Kernel& kernel, Scheduler& scheduler) : mem(mem), kernel(kernel), scheduler(scheduler) {} + MyEnvironment(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} }; class CPU { - std::unique_ptr jit; - std::shared_ptr cp15; + std::unique_ptr jit; + std::shared_ptr cp15; - // Make exclusive monitor with only 1 CPU core - Dynarmic::ExclusiveMonitor exclusiveMonitor{1}; - MyEnvironment env; - Memory& mem; - Scheduler& scheduler; - Emulator& emu; + // Make exclusive monitor with only 1 CPU core + Dynarmic::ExclusiveMonitor exclusiveMonitor{1}; + MyEnvironment env; + Memory& mem; - public: - static constexpr u64 ticksPerSec = Scheduler::arm11Clock; +public: + static constexpr u64 ticksPerSec = 268111856; - CPU(Memory& mem, Kernel& kernel, Emulator& emu); + CPU(Memory& mem, Kernel& kernel); void reset(); void setReg(int index, u32 value) { @@ -166,22 +162,20 @@ class CPU { } u64 getTicks() { - return scheduler.currentTimestamp; + return env.totalTicks; } // Get reference to tick count. Memory needs access to this u64& getTicksRef() { - return scheduler.currentTimestamp; + return env.totalTicks; } - Scheduler& getScheduler() { - return scheduler; - } + void runFrame() { + env.ticksLeft = ticksPerSec / 60; - void addTicks(u64 ticks) { env.AddTicks(ticks); } - - void clearCache() { jit->ClearCache(); } - void clearCacheRange(u32 start, u32 size) { jit->InvalidateCacheRange(start, size); } - - void runFrame(); + const auto exitReason = jit->Run(); + if (static_cast(exitReason) != 0) [[unlikely]] { + Helpers::panic("Exit reason: %d\nPC: %08X", static_cast(exitReason), getReg(15)); + } + } }; \ No newline at end of file diff --git a/include/crypto/aes_engine.hpp b/include/crypto/aes_engine.hpp index c96b36d3..324f4adf 100644 --- a/include/crypto/aes_engine.hpp +++ b/include/crypto/aes_engine.hpp @@ -1,29 +1,20 @@ #pragma once #include -#include -#include #include +#include +#include #include #include -#include #include "helpers.hpp" -#include "io_file.hpp" -#include "swap.hpp" namespace Crypto { - constexpr usize AesKeySize = 0x10; + constexpr std::size_t AesKeySize = 0x10; using AESKey = std::array; - struct Seed { - u64_le titleID; - AESKey seed; - std::array pad; - }; - - template - static std::array rolArray(const std::array& value, usize bits) { + template + static std::array rolArray(const std::array& value, std::size_t bits) { const auto bitWidth = N * CHAR_BIT; bits %= bitWidth; @@ -33,18 +24,18 @@ namespace Crypto { std::array result; - for (usize i = 0; i < N; i++) { + for (std::size_t i = 0; i < N; i++) { result[i] = ((value[(i + byteShift) % N] << bitShift) | (value[(i + byteShift + 1) % N] >> (CHAR_BIT - bitShift))) & UINT8_MAX; } return result; } - template + template static std::array addArray(const std::array& a, const std::array& b) { std::array result; - usize sum = 0; - usize carry = 0; + std::size_t sum = 0; + std::size_t carry = 0; for (std::int64_t i = N - 1; i >= 0; i--) { sum = a[i] + b[i] + carry; @@ -55,11 +46,11 @@ namespace Crypto { return result; } - template + template static std::array xorArray(const std::array& a, const std::array& b) { std::array result; - for (usize i = 0; i < N; i++) { + for (std::size_t i = 0; i < N; i++) { result[i] = a[i] ^ b[i]; } @@ -72,7 +63,7 @@ namespace Crypto { } AESKey rawKey; - for (usize i = 0; i < rawKey.size(); i++) { + for (std::size_t i = 0; i < rawKey.size(); i++) { rawKey[i] = static_cast(std::stoi(hex.substr(i * 2, 2), 0, 16)); } @@ -85,7 +76,7 @@ namespace Crypto { std::optional normalKey = std::nullopt; }; - enum KeySlotId : usize { + enum KeySlotId : std::size_t { NCCHKey0 = 0x2C, NCCHKey1 = 0x25, NCCHKey2 = 0x18, @@ -93,17 +84,14 @@ namespace Crypto { }; class AESEngine { - private: - constexpr static usize AesKeySlotCount = 0x40; + private: + constexpr static std::size_t AesKeySlotCount = 0x40; std::optional m_generator = std::nullopt; std::array m_slots; bool keysLoaded = false; - std::vector seeds; - IOFile seedDatabase; - - constexpr void updateNormalKey(usize slotId) { + constexpr void updateNormalKey(std::size_t slotId) { if (m_generator.has_value() && hasKeyX(slotId) && hasKeyY(slotId)) { auto& keySlot = m_slots.at(slotId); AESKey keyX = keySlot.keyX.value(); @@ -113,17 +101,13 @@ namespace Crypto { } } - public: + public: AESEngine() {} void loadKeys(const std::filesystem::path& path); - void setSeedPath(const std::filesystem::path& path); - // Returns true on success, false on failure - bool loadSeeds(); - bool haveKeys() { return keysLoaded; } bool haveGenerator() { return m_generator.has_value(); } - constexpr bool hasKeyX(usize slotId) { + constexpr bool hasKeyX(std::size_t slotId) { if (slotId >= AesKeySlotCount) { return false; } @@ -131,16 +115,18 @@ namespace Crypto { return m_slots.at(slotId).keyX.has_value(); } - constexpr AESKey getKeyX(usize slotId) { return m_slots.at(slotId).keyX.value_or(AESKey{}); } + constexpr AESKey getKeyX(std::size_t slotId) { + return m_slots.at(slotId).keyX.value_or(AESKey{}); + } - constexpr void setKeyX(usize slotId, const AESKey& key) { + constexpr void setKeyX(std::size_t slotId, const AESKey &key) { if (slotId < AesKeySlotCount) { m_slots.at(slotId).keyX = key; updateNormalKey(slotId); } } - constexpr bool hasKeyY(usize slotId) { + constexpr bool hasKeyY(std::size_t slotId) { if (slotId >= AesKeySlotCount) { return false; } @@ -148,16 +134,18 @@ namespace Crypto { return m_slots.at(slotId).keyY.has_value(); } - constexpr AESKey getKeyY(usize slotId) { return m_slots.at(slotId).keyY.value_or(AESKey{}); } + constexpr AESKey getKeyY(std::size_t slotId) { + return m_slots.at(slotId).keyY.value_or(AESKey{}); + } - constexpr void setKeyY(usize slotId, const AESKey& key) { + constexpr void setKeyY(std::size_t slotId, const AESKey &key) { if (slotId < AesKeySlotCount) { m_slots.at(slotId).keyY = key; updateNormalKey(slotId); } } - constexpr bool hasNormalKey(usize slotId) { + constexpr bool hasNormalKey(std::size_t slotId) { if (slotId >= AesKeySlotCount) { return false; } @@ -165,14 +153,14 @@ namespace Crypto { return m_slots.at(slotId).normalKey.has_value(); } - constexpr AESKey getNormalKey(usize slotId) { return m_slots.at(slotId).normalKey.value_or(AESKey{}); } + constexpr AESKey getNormalKey(std::size_t slotId) { + return m_slots.at(slotId).normalKey.value_or(AESKey{}); + } - constexpr void setNormalKey(usize slotId, const AESKey& key) { + constexpr void setNormalKey(std::size_t slotId, const AESKey &key) { if (slotId < AesKeySlotCount) { m_slots.at(slotId).normalKey = key; } } - - std::optional getSeedFromDB(u64 titleID); }; -} // namespace Crypto +} \ No newline at end of file diff --git a/include/discord_rpc.hpp b/include/discord_rpc.hpp index 62bd0c6b..9b244faf 100644 --- a/include/discord_rpc.hpp +++ b/include/discord_rpc.hpp @@ -17,8 +17,6 @@ namespace Discord { void init(); void update(RPCStatus status, const std::string& title); void stop(); - - bool running() const { return enabled; } }; } // namespace Discord diff --git a/include/emulator.hpp b/include/emulator.hpp index 366f86f2..770d78df 100644 --- a/include/emulator.hpp +++ b/include/emulator.hpp @@ -1,35 +1,24 @@ #pragma once +#include + #include #include -#include #include -#include #include "PICA/gpu.hpp" -#include "audio/audio_device.hpp" -#include "audio/dsp_core.hpp" #include "cheats.hpp" #include "config.hpp" #include "cpu.hpp" #include "crypto/aes_engine.hpp" #include "discord_rpc.hpp" -#include "fs/romfs.hpp" #include "io_file.hpp" -#include "lua_manager.hpp" #include "memory.hpp" -#include "scheduler.hpp" #ifdef PANDA3DS_ENABLE_HTTP_SERVER #include "http_server.hpp" #endif -#ifdef PANDA3DS_FRONTEND_QT -#include "gl/context.h" -#endif - -struct SDL_Window; - enum class ROMType { None, ELF, @@ -44,20 +33,34 @@ class Emulator { GPU gpu; Memory memory; Kernel kernel; - std::unique_ptr dsp; - Scheduler scheduler; - Crypto::AESEngine aesEngine; - AudioDevice audioDevice; Cheats cheats; - public: + SDL_Window* window; + +#ifdef PANDA3DS_ENABLE_OPENGL + SDL_GLContext glContext; +#endif + + SDL_GameController* gameController = nullptr; + int gameControllerID; + + // Variables to keep track of whether the user is controlling the 3DS analog stick with their keyboard + // This is done so when a gamepad is connected, we won't automatically override the 3DS analog stick settings with the gamepad's state + // And so the user can still use the keyboard to control the analog + bool keyboardAnalogX = false; + bool keyboardAnalogY = false; + + // For tracking whether to update gyroscope + // We bind gyro to right click + mouse movement + bool holdingRightClick = false; + static constexpr u32 width = 400; static constexpr u32 height = 240 * 2; // * 2 because 2 screens ROMType romType = ROMType::None; - bool running = false; // Is the emulator running a game? + bool running = false; // Is the emulator running a game? + bool programRunning = false; // Is the emulator program itself running? - private: #ifdef PANDA3DS_ENABLE_HTTP_SERVER HttpServer httpServer; friend struct HttpServer; @@ -74,7 +77,6 @@ class Emulator { NCSD loadedNCSD; std::optional romPath = std::nullopt; - LuaManager lua; public: // Decides whether to reload or not reload the ROM when resetting. We use enum class over a plain bool for clarity. @@ -82,65 +84,24 @@ class Emulator { // change ROMs. If Reload is selected, the emulator will reload its selected ROM. This is useful for eg a "reset" button that keeps the current // ROM and just resets the emu enum class ReloadOption { NoReload, Reload }; - // Used in CPU::runFrame - bool frameDone = false; Emulator(); ~Emulator(); void step(); + void render(); void reset(ReloadOption reload); + void run(); void runFrame(); - // Poll the scheduler for events - void pollScheduler(); void resume(); // Resume the emulator void pause(); // Pause the emulator void togglePause(); - void setAudioEnabled(bool enable); - bool loadAmiibo(const std::filesystem::path& path); bool loadROM(const std::filesystem::path& path); bool loadNCSD(const std::filesystem::path& path, ROMType type); bool load3DSX(const std::filesystem::path& path); bool loadELF(const std::filesystem::path& path); bool loadELF(std::ifstream& file); - - // For passing the SDL Window, GL context, etc from the frontend to the renderer - void initGraphicsContext(void* context) { gpu.initGraphicsContext(context); } - - RomFS::DumpingResult dumpRomFS(const std::filesystem::path& path); - void setOutputSize(u32 width, u32 height) { gpu.setOutputSize(width, height); } - void reloadScreenLayout() { gpu.reloadScreenLayout(); } - - void deinitGraphicsContext() { gpu.deinitGraphicsContext(); } - - // Reloads some settings that require special handling, such as audio enable - void reloadSettings(); - - CPU& getCPU() { return cpu; } - Memory& getMemory() { return memory; } - Kernel& getKernel() { return kernel; } - Scheduler& getScheduler() { return scheduler; } - Audio::DSPCore* getDSP() { return dsp.get(); } - - EmulatorConfig& getConfig() { return config; } - Cheats& getCheats() { return cheats; } - ServiceManager& getServiceManager() { return kernel.getServiceManager(); } - LuaManager& getLua() { return lua; } - AudioDeviceInterface& getAudioDevice() { return audioDevice; } - - RendererType getRendererType() const { return config.rendererType; } - Renderer* getRenderer() { return gpu.getRenderer(); } - u64 getTicks() { return cpu.getTicks(); } - - std::filesystem::path getConfigPath(); - std::filesystem::path getAndroidAppPath(); - // Get the root path for the emulator's app data - std::filesystem::path getAppDataRoot(); - - std::span getSMDH(); - - private: - void loadRenderdoc(); + void initGraphicsContext(); }; diff --git a/include/frontend_settings.hpp b/include/frontend_settings.hpp deleted file mode 100644 index 083b8c7d..00000000 --- a/include/frontend_settings.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#include - -// Some UI settings that aren't fully frontend-dependent. Note: Not all frontends will support the same settings. -// Note: Any enums should ideally be ordered in the same order we want to show them in UI dropdown menus, so that we can cast indices to enums -// directly. -struct FrontendSettings { - enum class Theme : int { - System = 0, - Light = 1, - Dark = 2, - GreetingsCat = 3, - Cream = 4, - Oled = 5, - }; - - // Different panda-themed window icons - enum class WindowIcon : int { - Rpog = 0, - Rsyn = 1, - Rnap = 2, - Rcow = 3, - SkyEmu = 4, - Runpog = 5, - }; - - Theme theme = Theme::Dark; - WindowIcon icon = WindowIcon::Rpog; - std::string language = "en"; - - static Theme themeFromString(std::string inString); - static const char* themeToString(Theme theme); - - static WindowIcon iconFromString(std::string inString); - static const char* iconToString(WindowIcon icon); -}; diff --git a/include/fs/archive_base.hpp b/include/fs/archive_base.hpp index 074f1ccd..c782f6a6 100644 --- a/include/fs/archive_base.hpp +++ b/include/fs/archive_base.hpp @@ -7,7 +7,6 @@ #include #include #include - #include "helpers.hpp" #include "memory.hpp" #include "result.hpp" @@ -16,13 +15,13 @@ using Result::HorizonResult; namespace PathType { - enum : u32 { - Invalid = 0, - Empty = 1, - Binary = 2, - ASCII = 3, - UTF16 = 4, - }; + enum : u32 { + Invalid = 0, + Empty = 1, + Binary = 2, + ASCII = 3, + UTF16 = 4, + }; } namespace ArchiveID { @@ -35,103 +34,91 @@ namespace ArchiveID { SDMC = 9, SDMCWriteOnly = 0xA, - CardSPI = 0x12345679, SavedataAndNcch = 0x2345678A, // 3DBrew: This is the same as the regular SaveData archive, except with this the savedata ID and mediatype is loaded from the input archive // lowpath. UserSaveData1 = 0x567890B2, // 3DBrew: Similar to 0x567890B2 but can only access Accessible Save specified in exheader? UserSaveData2 = 0x567890B4, - - TwlPhoto = 0x567890AC, - TwlSound = 0x567890AD, }; - static std::string toString(u32 id) { - switch (id) { - case SelfNCCH: return "SelfNCCH"; - case SaveData: return "SaveData"; - case ExtSaveData: return "ExtSaveData"; - case SharedExtSaveData: return "SharedExtSaveData"; - case SystemSaveData: return "SystemSaveData"; - case SDMC: return "SDMC"; - case SDMCWriteOnly: return "SDMC (Write-only)"; - case SavedataAndNcch: return "Savedata & NCCH (archive 0x2345678A)"; - case TwlPhoto: return "TWL_PHOTO"; - case TwlSound: return "TWL_SOUND"; - default: return "Unknown archive"; - } - } -} // namespace ArchiveID + static std::string toString(u32 id) { + switch (id) { + case SelfNCCH: return "SelfNCCH"; + case SaveData: return "SaveData"; + case ExtSaveData: return "ExtSaveData"; + case SharedExtSaveData: return "SharedExtSaveData"; + case SystemSaveData: return "SystemSaveData"; + case SDMC: return "SDMC"; + case SDMCWriteOnly: return "SDMC (Write-only)"; + case SavedataAndNcch: return "Savedata & NCCH (archive 0x2345678A)"; + default: return "Unknown archive"; + } + } +} struct FSPath { - u32 type = PathType::Invalid; + u32 type = PathType::Invalid; - std::vector binary; // Path data for binary paths - std::string string; // Path data for ASCII paths - std::u16string utf16_string; + std::vector binary; // Path data for binary paths + std::string string; // Path data for ASCII paths + std::u16string utf16_string; - FSPath() {} + FSPath() {} - FSPath(u32 type, const std::vector& vec) : type(type) { - switch (type) { - case PathType::Binary: binary = std::move(vec); break; + FSPath(u32 type, const std::vector& vec) : type(type) { + switch (type) { + case PathType::Binary: + binary = std::move(vec); + break; - case PathType::ASCII: - string.resize(vec.size() - 1); // -1 because of the null terminator - std::memcpy(string.data(), vec.data(), vec.size() - 1); // Copy string data - break; + case PathType::ASCII: + string.resize(vec.size() - 1); // -1 because of the null terminator + std::memcpy(string.data(), vec.data(), vec.size() - 1); // Copy string data + break; - case PathType::UTF16: { - const size_t size = vec.size() / sizeof(u16) - 1; // Character count. -1 because null terminator here too - utf16_string.resize(size); - std::memcpy(utf16_string.data(), vec.data(), size * sizeof(u16)); - break; - }; - } - } - - bool isUTF16() const { return type == PathType::UTF16; } - bool isASCII() const { return type == PathType::ASCII; } - bool isBinary() const { return type == PathType::Binary; } - // This is not called "isEmpty()" to make obvious that we're talking about an empty-type path, NOT an empty text path - bool isEmptyType() const { return type == PathType::Empty; } - - bool isTextPath() const { return isUTF16() || isASCII(); } + case PathType::UTF16: { + const size_t size = vec.size() / sizeof(u16) - 1; // Character count. -1 because null terminator here too + utf16_string.resize(size); + std::memcpy(utf16_string.data(), vec.data(), size * sizeof(u16)); + break; + } +; } + } }; struct FilePerms { - u32 raw; + u32 raw; - FilePerms(u32 val) : raw(val) {} - bool read() const { return (raw & 1) != 0; } - bool write() const { return (raw & 2) != 0; } - bool create() const { return (raw & 4) != 0; } + FilePerms(u32 val) : raw(val) {} + bool read() const { return (raw & 1) != 0; } + bool write() const { return (raw & 2) != 0; } + bool create() const { return (raw & 4) != 0; } }; class ArchiveBase; struct FileSession { - ArchiveBase* archive = nullptr; - FILE* fd = nullptr; // File descriptor for file sessions that require them. - FSPath path; - FSPath archivePath; - u32 priority = 0; // TODO: What does this even do - bool isOpen; + ArchiveBase* archive = nullptr; + FILE* fd = nullptr; // File descriptor for file sessions that require them. + FSPath path; + FSPath archivePath; + u32 priority = 0; // TODO: What does this even do + bool isOpen; - FileSession(ArchiveBase* archive, const FSPath& filePath, const FSPath& archivePath, FILE* fd, bool isOpen = true) - : archive(archive), path(filePath), archivePath(archivePath), fd(fd), isOpen(isOpen), priority(0) {} + FileSession(ArchiveBase* archive, const FSPath& filePath, const FSPath& archivePath, FILE* fd, bool isOpen = true) : + archive(archive), path(filePath), archivePath(archivePath), fd(fd), isOpen(isOpen), priority(0) {} - // For cloning a file session - FileSession(const FileSession& other) - : archive(other.archive), path(other.path), archivePath(other.archivePath), fd(other.fd), isOpen(other.isOpen), priority(other.priority) {} + // For cloning a file session + FileSession(const FileSession& other) : archive(other.archive), path(other.path), + archivePath(other.archivePath), fd(other.fd), isOpen(other.isOpen), priority(other.priority) {} }; struct ArchiveSession { - ArchiveBase* archive = nullptr; - FSPath path; - bool isOpen; + ArchiveBase* archive = nullptr; + FSPath path; + bool isOpen; - ArchiveSession(ArchiveBase* archive, const FSPath& filePath, bool isOpen = true) : archive(archive), path(filePath), isOpen(isOpen) {} + ArchiveSession(ArchiveBase* archive, const FSPath& filePath, bool isOpen = true) : archive(archive), path(filePath), isOpen(isOpen) {} }; struct DirectoryEntry { @@ -169,125 +156,101 @@ struct DirectorySession { using FileDescriptor = std::optional; class ArchiveBase { - public: - struct FormatInfo { - u32 size; // Archive size - u32 numOfDirectories; // Number of directories - u32 numOfFiles; // Number of files - bool duplicateData; // Whether to duplicate data or not - }; +public: + struct FormatInfo { + u32 size; // Archive size + u32 numOfDirectories; // Number of directories + u32 numOfFiles; // Number of files + bool duplicateData; // Whether to duplicate data or not + }; - protected: - using Handle = u32; +protected: + using Handle = u32; - static constexpr FileDescriptor NoFile = nullptr; - static constexpr FileDescriptor FileError = std::nullopt; - Memory& mem; + static constexpr FileDescriptor NoFile = nullptr; + static constexpr FileDescriptor FileError = std::nullopt; + Memory& mem; - // Returns if a specified 3DS path in UTF16 or ASCII format is safe or not - // A 3DS path is considered safe if its first character is '/' which means we're not trying to access anything outside the root of the fs - // And if it doesn't contain enough instances of ".." (Indicating "climb up a folder" in filesystems) to let the software climb up the directory - // tree And access files outside of the emulator's app data folder - template - bool isPathSafe(const FSPath& path) { - static_assert(format == PathType::ASCII || format == PathType::UTF16); - using String = typename std::conditional::type; // String type for the path - using Char = typename String::value_type; // Char type for the path + // Returns if a specified 3DS path in UTF16 or ASCII format is safe or not + // A 3DS path is considered safe if its first character is '/' which means we're not trying to access anything outside the root of the fs + // And if it doesn't contain enough instances of ".." (Indicating "climb up a folder" in filesystems) to let the software climb up the directory tree + // And access files outside of the emulator's app data folder + template + bool isPathSafe(const FSPath& path) { + static_assert(format == PathType::ASCII || format == PathType::UTF16); + using String = typename std::conditional::type; // String type for the path + using Char = typename String::value_type; // Char type for the path - String pathString, dots; - if constexpr (std::is_same()) { - pathString = path.utf16_string; - dots = u".."; - } else { - pathString = path.string; - dots = ".."; - } + String pathString, dots; + if constexpr (std::is_same()) { + pathString = path.utf16_string; + dots = u".."; + } else { + pathString = path.string; + dots = ".."; + } - // If the path string doesn't begin with / then that means it's accessing outside the FS root, which is invalid & unsafe - if (pathString[0] != Char('/')) return false; + // If the path string doesn't begin with / then that means it's accessing outside the FS root, which is invalid & unsafe + if (pathString[0] != Char('/')) return false; - // Counts how many folders sans the root our file is nested under. - // If it's < 0 at any point of parsing, then the path is unsafe and tries to crawl outside our file sandbox. - // If it's 0 then this is the FS root. - // If it's > 0 then we're in a subdirectory of the root. - int level = 0; + // Counts how many folders sans the root our file is nested under. + // If it's < 0 at any point of parsing, then the path is unsafe and tries to crawl outside our file sandbox. + // If it's 0 then this is the FS root. + // If it's > 0 then we're in a subdirectory of the root. + int level = 0; - // Split the string on / characters and see how many of the substrings are ".." - size_t pos = 0; - while ((pos = pathString.find(Char('/'))) != String::npos) { - String token = pathString.substr(0, pos); - pathString.erase(0, pos + 1); + // Split the string on / characters and see how many of the substrings are ".." + size_t pos = 0; + while ((pos = pathString.find(Char('/'))) != String::npos) { + String token = pathString.substr(0, pos); + pathString.erase(0, pos + 1); - if (token == dots) { - level--; - if (level < 0) return false; - } else { - level++; - } - } + if (token == dots) { + level--; + if (level < 0) return false; + } else { + level++; + } + } - return true; - } + return true; + } - public: - virtual std::string name() = 0; - virtual u64 getFreeBytes() = 0; - virtual HorizonResult createFile(const FSPath& path, u64 size) = 0; - virtual HorizonResult deleteFile(const FSPath& path) = 0; +public: + virtual std::string name() = 0; + virtual u64 getFreeBytes() = 0; + virtual HorizonResult createFile(const FSPath& path, u64 size) = 0; + virtual HorizonResult deleteFile(const FSPath& path) = 0; - virtual Rust::Result getFormatInfo(const FSPath& path) { - Helpers::panic("Unimplemented GetFormatInfo for %s archive", name().c_str()); - // Return a dummy struct just to avoid the UB of not returning anything, even if we panic - return Ok(FormatInfo{.size = 0, .numOfDirectories = 0, .numOfFiles = 0, .duplicateData = false}); - } + virtual Rust::Result getFormatInfo(const FSPath& path) { + Helpers::panic("Unimplemented GetFormatInfo for %s archive", name().c_str()); + // Return a dummy struct just to avoid the UB of not returning anything, even if we panic + return Ok(FormatInfo{ .size = 0, .numOfDirectories = 0, .numOfFiles = 0, .duplicateData = false }); + } - virtual HorizonResult createDirectory(const FSPath& path) { - Helpers::panic("Unimplemented CreateDirectory for %s archive", name().c_str()); - return Result::FS::AlreadyExists; - } + virtual HorizonResult createDirectory(const FSPath& path) { + Helpers::panic("Unimplemented CreateDirectory for %s archive", name().c_str()); + return Result::FS::AlreadyExists; + } - // Returns nullopt if opening the file failed, otherwise returns a file descriptor to it (nullptr if none is needed) - virtual FileDescriptor openFile(const FSPath& path, const FilePerms& perms) = 0; - virtual Rust::Result openArchive(const FSPath& path) = 0; + // Returns nullopt if opening the file failed, otherwise returns a file descriptor to it (nullptr if none is needed) + virtual FileDescriptor openFile(const FSPath& path, const FilePerms& perms) = 0; + virtual Rust::Result openArchive(const FSPath& path) = 0; - virtual Rust::Result openDirectory(const FSPath& path) { - Helpers::panic("Unimplemented OpenDirectory for %s archive", name().c_str()); - return Err(Result::FS::FileNotFoundAlt); - } + virtual Rust::Result openDirectory(const FSPath& path) { + Helpers::panic("Unimplemented OpenDirectory for %s archive", name().c_str()); + return Err(Result::FS::FileNotFoundAlt); + } - virtual void format(const FSPath& path, const FormatInfo& info) { Helpers::panic("Unimplemented Format for %s archive", name().c_str()); } + virtual void format(const FSPath& path, const FormatInfo& info) { + Helpers::panic("Unimplemented Format for %s archive", name().c_str()); + } - virtual HorizonResult renameFile(const FSPath& oldPath, const FSPath& newPath) { - Helpers::panic("Unimplemented RenameFile for %s archive", name().c_str()); - return Result::Success; - } + // Read size bytes from a file starting at offset "offset" into a certain buffer in memory + // Returns the number of bytes read, or nullopt if the read failed + virtual std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) = 0; - // Read size bytes from a file starting at offset "offset" into a certain buffer in memory - // Returns the number of bytes read, or nullopt if the read failed - virtual std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) = 0; - - ArchiveBase(Memory& mem) : mem(mem) {} - - bool isSafeTextPath(const FSPath& path) { - if (path.type == PathType::UTF16) { - return isPathSafe(path); - } else if (path.type == PathType::ASCII) { - return isPathSafe(path); - } - - Helpers::panic("ArchiveBase::IsSafeTextPath: Invalid path"); - } - - // Appends a 3DS path to an std::filesystem::path - void appendPath(std::filesystem::path& diskPath, const FSPath& guestPath) { - if (guestPath.type == PathType::UTF16) { - diskPath += std::filesystem::path(guestPath.utf16_string).make_preferred(); - } else if (guestPath.type == PathType::ASCII) { - diskPath += std::filesystem::path(guestPath.string).make_preferred(); - } else [[unlikely]] { - Helpers::panic("ArchiveBase::AppendPath: Invalid 3DS path"); - } - } + ArchiveBase(Memory& mem) : mem(mem) {} }; struct ArchiveResource { diff --git a/include/fs/archive_card_spi.hpp b/include/fs/archive_card_spi.hpp deleted file mode 100644 index fefa9933..00000000 --- a/include/fs/archive_card_spi.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include "archive_base.hpp" -#include "result/result.hpp" - -using Result::HorizonResult; - -class CardSPIArchive : public ArchiveBase { - public: - CardSPIArchive(Memory& mem) : ArchiveBase(mem) {} - std::string name() override { return "Card SPI"; } - - u64 getFreeBytes() override { - Helpers::warn("Unimplemented GetFreeBytes for Card SPI archive"); - return 0_MB; - } - - HorizonResult createDirectory(const FSPath& path) override; - HorizonResult createFile(const FSPath& path, u64 size) override; - HorizonResult deleteFile(const FSPath& path) override; - - Rust::Result openArchive(const FSPath& path) override; - Rust::Result openDirectory(const FSPath& path) override; - - FileDescriptor openFile(const FSPath& path, const FilePerms& perms) override; - - std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override { - Helpers::panic("Unimplemented ReadFile for Card SPI archive"); - return {}; - }; -}; \ No newline at end of file diff --git a/include/fs/archive_ext_save_data.hpp b/include/fs/archive_ext_save_data.hpp index d2e3d974..fec923b4 100644 --- a/include/fs/archive_ext_save_data.hpp +++ b/include/fs/archive_ext_save_data.hpp @@ -2,34 +2,26 @@ #include "archive_base.hpp" class ExtSaveDataArchive : public ArchiveBase { - public: - ExtSaveDataArchive(Memory& mem, const std::string& folder, bool isShared = false) : ArchiveBase(mem), isShared(isShared), backingFolder(folder) {} +public: + ExtSaveDataArchive(Memory& mem, const std::string& folder, bool isShared = false) : ArchiveBase(mem), + isShared(isShared), backingFolder(folder) {} - u64 getFreeBytes() override { - Helpers::panic("ExtSaveData::GetFreeBytes unimplemented"); - return 0; - } + u64 getFreeBytes() override { Helpers::panic("ExtSaveData::GetFreeBytes unimplemented"); return 0; } std::string name() override { return "ExtSaveData::" + backingFolder; } HorizonResult createDirectory(const FSPath& path) override; HorizonResult createFile(const FSPath& path, u64 size) override; HorizonResult deleteFile(const FSPath& path) override; - HorizonResult renameFile(const FSPath& oldPath, const FSPath& newPath) override; Rust::Result openArchive(const FSPath& path) override; Rust::Result openDirectory(const FSPath& path) override; FileDescriptor openFile(const FSPath& path, const FilePerms& perms) override; std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override; - Rust::Result getFormatInfo(const FSPath& path) override { - Helpers::warn("Stubbed ExtSaveData::GetFormatInfo"); - return Ok(FormatInfo{.size = 1_GB, .numOfDirectories = 255, .numOfFiles = 255, .duplicateData = false}); - } - // Takes in a binary ExtSaveData path, outputs a combination of the backing folder with the low and high save entries of the path // Used for identifying the archive format info files std::string getExtSaveDataPathFromBinary(const FSPath& path); bool isShared = false; - std::string backingFolder; // Backing folder for the archive. Can be NAND, Gamecard or SD depending on the archive path. + std::string backingFolder; // Backing folder for the archive. Can be NAND, Gamecard or SD depending on the archive path. }; \ No newline at end of file diff --git a/include/fs/archive_ncch.hpp b/include/fs/archive_ncch.hpp index fb79b2fe..275bcd20 100644 --- a/include/fs/archive_ncch.hpp +++ b/include/fs/archive_ncch.hpp @@ -2,13 +2,10 @@ #include "archive_base.hpp" class NCCHArchive : public ArchiveBase { - public: +public: NCCHArchive(Memory& mem) : ArchiveBase(mem) {} - u64 getFreeBytes() override { - Helpers::panic("NCCH::GetFreeBytes unimplemented"); - return 0; - } + u64 getFreeBytes() override { Helpers::panic("NCCH::GetFreeBytes unimplemented"); return 0; } std::string name() override { return "NCCH"; } HorizonResult createFile(const FSPath& path, u64 size) override; diff --git a/include/fs/archive_save_data.hpp b/include/fs/archive_save_data.hpp index 27f8a22b..5b1ba489 100644 --- a/include/fs/archive_save_data.hpp +++ b/include/fs/archive_save_data.hpp @@ -2,7 +2,7 @@ #include "archive_base.hpp" class SaveDataArchive : public ArchiveBase { - public: +public: SaveDataArchive(Memory& mem) : ArchiveBase(mem) {} u64 getFreeBytes() override { return 32_MB; } @@ -27,6 +27,6 @@ class SaveDataArchive : public ArchiveBase { // Returns whether the cart has save data or not bool cartHasSaveData() { auto cxi = mem.getCXI(); - return (cxi != nullptr && cxi->hasSaveData()); // We need to have a CXI file with more than 0 bytes of save data + return (cxi != nullptr && cxi->hasSaveData()); // We need to have a CXI file with more than 0 bytes of save data } }; \ No newline at end of file diff --git a/include/fs/archive_sdmc.hpp b/include/fs/archive_sdmc.hpp index f63731c4..a8d9e259 100644 --- a/include/fs/archive_sdmc.hpp +++ b/include/fs/archive_sdmc.hpp @@ -5,21 +5,16 @@ using Result::HorizonResult; class SDMCArchive : public ArchiveBase { - bool isWriteOnly = false; // There's 2 variants of the SDMC archive: Regular one (Read/Write) and write-only +public: + SDMCArchive(Memory& mem) : ArchiveBase(mem) {} - public: - SDMCArchive(Memory& mem, bool writeOnly = false) : ArchiveBase(mem), isWriteOnly(writeOnly) {} - - u64 getFreeBytes() override { return 1_GB; } + u64 getFreeBytes() override { Helpers::panic("SDMC::GetFreeBytes unimplemented"); return 0; } std::string name() override { return "SDMC"; } HorizonResult createFile(const FSPath& path, u64 size) override; HorizonResult deleteFile(const FSPath& path) override; - HorizonResult createDirectory(const FSPath& path) override; Rust::Result openArchive(const FSPath& path) override; - Rust::Result openDirectory(const FSPath& path) override; - FileDescriptor openFile(const FSPath& path, const FilePerms& perms) override; std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override; }; \ No newline at end of file diff --git a/include/fs/archive_self_ncch.hpp b/include/fs/archive_self_ncch.hpp index c8c96c22..ed882a7d 100644 --- a/include/fs/archive_self_ncch.hpp +++ b/include/fs/archive_self_ncch.hpp @@ -2,7 +2,7 @@ #include "archive_base.hpp" class SelfNCCHArchive : public ArchiveBase { - public: +public: SelfNCCHArchive(Memory& mem) : ArchiveBase(mem) {} u64 getFreeBytes() override { return 0; } diff --git a/include/fs/archive_system_save_data.hpp b/include/fs/archive_system_save_data.hpp deleted file mode 100644 index c4526bec..00000000 --- a/include/fs/archive_system_save_data.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once -#include "archive_base.hpp" - -class SystemSaveDataArchive : public ArchiveBase { - public: - SystemSaveDataArchive(Memory& mem) : ArchiveBase(mem) {} - - u64 getFreeBytes() override { - Helpers::warn("Unimplemented GetFreeBytes for SystemSaveData archive"); - return 32_MB; - } - - std::string name() override { return "SystemSaveData"; } - - HorizonResult createDirectory(const FSPath& path) override; - HorizonResult createFile(const FSPath& path, u64 size) override; - HorizonResult deleteFile(const FSPath& path) override; - - Rust::Result openArchive(const FSPath& path) override; - Rust::Result openDirectory(const FSPath& path) override; - - FileDescriptor openFile(const FSPath& path, const FilePerms& perms) override; - - std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override { - Helpers::panic("Unimplemented ReadFile for SystemSaveData archive"); - return {}; - }; -}; \ No newline at end of file diff --git a/include/fs/archive_twl_photo.hpp b/include/fs/archive_twl_photo.hpp deleted file mode 100644 index 23111e2b..00000000 --- a/include/fs/archive_twl_photo.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include "archive_base.hpp" -#include "result/result.hpp" - -using Result::HorizonResult; - -class TWLPhotoArchive : public ArchiveBase { - public: - TWLPhotoArchive(Memory& mem) : ArchiveBase(mem) {} - std::string name() override { return "TWL_PHOTO"; } - - u64 getFreeBytes() override { - Helpers::warn("Unimplemented GetFreeBytes for TWLPhoto archive"); - return 32_MB; - } - - HorizonResult createDirectory(const FSPath& path) override; - HorizonResult createFile(const FSPath& path, u64 size) override; - HorizonResult deleteFile(const FSPath& path) override; - - Rust::Result openArchive(const FSPath& path) override; - Rust::Result openDirectory(const FSPath& path) override; - - FileDescriptor openFile(const FSPath& path, const FilePerms& perms) override; - - std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override { - Helpers::panic("Unimplemented ReadFile for TWL_PHOTO archive"); - return {}; - }; -}; \ No newline at end of file diff --git a/include/fs/archive_twl_sound.hpp b/include/fs/archive_twl_sound.hpp deleted file mode 100644 index cc8fc866..00000000 --- a/include/fs/archive_twl_sound.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include "archive_base.hpp" -#include "result/result.hpp" - -using Result::HorizonResult; - -class TWLSoundArchive : public ArchiveBase { - public: - TWLSoundArchive(Memory& mem) : ArchiveBase(mem) {} - std::string name() override { return "TWL_SOUND"; } - - u64 getFreeBytes() override { - Helpers::warn("Unimplemented GetFreeBytes for TWLSound archive"); - return 32_MB; - } - - HorizonResult createDirectory(const FSPath& path) override; - HorizonResult createFile(const FSPath& path, u64 size) override; - HorizonResult deleteFile(const FSPath& path) override; - - Rust::Result openArchive(const FSPath& path) override; - Rust::Result openDirectory(const FSPath& path) override; - - FileDescriptor openFile(const FSPath& path, const FilePerms& perms) override; - - std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override { - Helpers::panic("Unimplemented ReadFile for TWL_SOUND archive"); - return {}; - }; -}; \ No newline at end of file diff --git a/include/fs/archive_user_save_data.hpp b/include/fs/archive_user_save_data.hpp index 26662a6f..56e2c0f6 100644 --- a/include/fs/archive_user_save_data.hpp +++ b/include/fs/archive_user_save_data.hpp @@ -3,7 +3,6 @@ class UserSaveDataArchive : public ArchiveBase { u32 archiveID; - public: UserSaveDataArchive(Memory& mem, u32 archiveID) : ArchiveBase(mem), archiveID(archiveID) {} diff --git a/include/fs/bad_word_list.hpp b/include/fs/bad_word_list.hpp index 84c0c91c..752721b7 100644 --- a/include/fs/bad_word_list.hpp +++ b/include/fs/bad_word_list.hpp @@ -1,69 +1,132 @@ // Generated with https://github.com/B3n30/citra_system_archives #pragma once -constexpr unsigned char BAD_WORD_LIST_DATA[] = { - 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xec, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x8c, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe4, 0x01, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x3c, 0x02, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xb8, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x33, 0x00, - 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x74, 0x00, - 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x0a, 0x00, 0x00, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x34, 0x00, 0x2e, 0x00, - 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdc, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x02, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x0a, 0x00, 0x00, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x02, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x20, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, 0x76, 0x00, 0x65, 0x00, - 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, - 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, - 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, - 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, - 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, - 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00 +const unsigned char BAD_WORD_LIST_DATA[] = { + 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, + 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xec, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0xc0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x8c, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xe4, 0x01, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x3c, 0x02, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xb8, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x0a, 0x00, 0x00, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x74, 0x00, + 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x74, 0x00, + 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x0a, 0x00, 0x00, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x34, 0x00, 0x2e, 0x00, + 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x02, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x0a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdc, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x2e, 0x00, + 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x02, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x0a, 0x00, 0x00, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x02, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x20, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, 0x76, 0x00, 0x65, 0x00, + 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2e, 0x00, + 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, + 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, + 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, + 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, + 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, + 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x5e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, + 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x5e, 0x00, + 0x62, 0x00, 0x61, 0x00, 0x64, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x64, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00 }; const unsigned int BAD_WORD_LIST_DATA_len = 1508; \ No newline at end of file diff --git a/include/fs/country_list.hpp b/include/fs/country_list.hpp index f2ff9924..b2e8ead3 100644 --- a/include/fs/country_list.hpp +++ b/include/fs/country_list.hpp @@ -1,9133 +1,18260 @@ // Generated with https://github.com/B3n30/citra_system_archives #pragma once -constexpr unsigned char COUNTRY_LIST_DATA[] = { - 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x0c, 0x02, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x58, 0x1a, 0x00, 0x00, 0x70, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x48, 0x0e, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xb4, 0x0e, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x24, 0x0f, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x53, 0x00, 0xe0, 0x15, 0x00, 0x00, - 0xb4, 0x17, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xa0, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x16, 0x00, 0x00, - 0x10, 0x15, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0xb4, 0x04, 0x00, 0x00, 0x34, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xe8, 0x0e, 0x00, 0x00, 0xa4, 0x13, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x9c, 0x11, 0x00, 0x00, 0x64, 0x0a, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x08, 0x00, 0x00, 0x54, 0x19, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x94, 0x09, 0x00, 0x00, 0xf4, 0x07, 0x00, 0x00, - 0x14, 0x16, 0x00, 0x00, 0xe8, 0x17, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0xd4, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe4, 0x16, 0x00, 0x00, 0xb8, 0x18, 0x00, 0x00, 0x18, 0x17, 0x00, 0x00, 0xa4, 0x0d, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x68, 0x0b, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x12, 0x00, 0x00, 0xd8, 0x13, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x05, 0x00, 0x00, - 0xec, 0x19, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, 0x14, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0xf8, 0x08, 0x00, 0x00, - 0x88, 0x19, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8, 0x09, 0x00, 0x00, - 0x28, 0x08, 0x00, 0x00, 0x48, 0x16, 0x00, 0x00, 0x1c, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x18, 0x00, 0x00, 0x4c, 0x17, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x07, 0x00, 0x00, 0xd4, 0x12, 0x00, 0x00, 0x0c, 0x14, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xec, 0x05, 0x00, 0x00, 0xbc, 0x19, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0x14, 0x00, 0x00, 0x3c, 0x13, 0x00, 0x00, - 0x2c, 0x09, 0x00, 0x00, 0x9c, 0x0b, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x5c, 0x08, 0x00, 0x00, 0x7c, 0x16, 0x00, 0x00, 0x50, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0x15, 0x00, 0x00, 0x80, 0x17, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x6c, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x24, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x40, 0x14, 0x00, 0x00, - 0x74, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x1a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x70, 0x13, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0xd0, 0x0b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x08, 0x00, 0x00, 0x20, 0x19, 0x00, 0x00, 0x84, 0x18, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, - 0x58, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x18, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x1c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x31, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xc0, 0x4a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, - 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, - 0xb0, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0x20, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0xd0, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x80, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x0b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x60, 0x62, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, - 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, - 0xc0, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x78, 0x02, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x34, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x30, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0xe0, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x70, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x10, 0xa8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, - 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x7c, 0x03, 0x00, 0x00, - 0xe0, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, - 0xb0, 0x03, 0x00, 0x00, 0x90, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x34, 0x00, 0x00, 0x00, 0xe4, 0x03, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x80, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x10, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0xa0, 0xab, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, - 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xb4, 0x04, 0x00, 0x00, - 0x40, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, - 0xe8, 0x04, 0x00, 0x00, 0xd0, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x1c, 0x05, 0x00, 0x00, 0x60, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0xe0, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x84, 0x05, 0x00, 0x00, 0x80, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xb8, 0x05, 0x00, 0x00, 0x10, 0xaf, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, - 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xec, 0x05, 0x00, 0x00, - 0xd0, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x20, 0x06, 0x00, 0x00, 0x50, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x54, 0x06, 0x00, 0x00, 0xf0, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x88, 0x06, 0x00, 0x00, 0x30, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xbc, 0x06, 0x00, 0x00, 0xe0, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0xa0, 0xc5, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x24, 0x07, 0x00, 0x00, - 0x00, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x58, 0x07, 0x00, 0x00, 0x90, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x8c, 0x07, 0x00, 0x00, 0xe0, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x70, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xf4, 0x07, 0x00, 0x00, 0x80, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x28, 0x08, 0x00, 0x00, 0x10, 0xdd, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb6, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x30, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x5c, 0x08, 0x00, 0x00, - 0xd0, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x90, 0x08, 0x00, 0x00, 0xa0, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0xc4, 0x08, 0x00, 0x00, 0x40, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x00, 0x00, 0x10, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x20, 0x0b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0xc0, 0x0b, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x86, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x36, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x94, 0x09, 0x00, 0x00, - 0x50, 0x1a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0xc8, 0x09, 0x00, 0x00, 0x20, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0xfc, 0x09, 0x00, 0x00, 0xc0, 0x36, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x50, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x64, 0x0a, 0x00, 0x00, 0x40, 0x4b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x98, 0x0a, 0x00, 0x00, 0xf0, 0x4b, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x32, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xcc, 0x0a, 0x00, 0x00, - 0x50, 0x57, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0xa0, 0x63, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x34, 0x0b, 0x00, 0x00, 0x50, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x68, 0x0b, 0x00, 0x00, 0x90, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x9c, 0x0b, 0x00, 0x00, 0x30, 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdf, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xd0, 0x0b, 0x00, 0x00, 0x10, 0x6e, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x03, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, - 0xc0, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x0c, 0x00, 0x00, 0xd0, 0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x04, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x6c, 0x0c, 0x00, 0x00, 0x50, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x05, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xa0, 0x0c, 0x00, 0x00, 0xf0, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xd4, 0x0c, 0x00, 0x00, 0x90, 0x71, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x08, 0x0d, 0x00, 0x00, 0x20, 0x72, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xea, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x34, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x3c, 0x0d, 0x00, 0x00, - 0x10, 0x79, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x70, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0xa4, 0x0d, 0x00, 0x00, 0x70, 0x8a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xd8, 0x0d, 0x00, 0x00, 0x50, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0c, 0x0e, 0x00, 0x00, 0xc0, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xaf, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x06, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, - 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, 0xf0, 0xd7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0x50, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x40, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xe8, 0x0e, 0x00, 0x00, 0xb0, 0xe7, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0d, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x33, 0x00, - 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x30, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0x88, 0x00, 0x00, 0x00, 0x58, 0x0f, 0x00, 0x00, 0xf0, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x88, 0x00, 0x00, 0x00, 0x8c, 0x0f, 0x00, 0x00, 0x60, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x0e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x5f, 0x00, - 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x88, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xf0, 0xfa, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, - 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x88, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x70, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, 0xe0, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x64, 0x10, 0x00, 0x00, 0xe0, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x98, 0x10, 0x00, 0x00, 0x50, 0x09, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xcc, 0x10, 0x00, 0x00, - 0xe0, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x70, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0x34, 0x11, 0x00, 0x00, 0xe0, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x0a, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x68, 0x11, 0x00, 0x00, 0x80, 0x0d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x9c, 0x11, 0x00, 0x00, 0x40, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x9b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x00, 0xe0, 0x17, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, - 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, - 0xb0, 0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x38, 0x12, 0x00, 0x00, 0xb0, 0x28, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x0d, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0x6c, 0x12, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xa0, 0x12, 0x00, 0x00, 0x70, 0x31, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, - 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xd4, 0x12, 0x00, 0x00, 0x00, 0x32, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x10, 0x3b, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x39, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x3c, 0x13, 0x00, 0x00, - 0x10, 0x3c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0e, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x70, 0x13, 0x00, 0x00, 0x70, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x06, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0xa4, 0x13, 0x00, 0x00, 0x70, 0x54, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xd8, 0x13, 0x00, 0x00, 0xa0, 0x57, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0c, 0x14, 0x00, 0x00, 0x40, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x35, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0x00, 0x80, 0x67, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x35, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, - 0xe0, 0x72, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0xa8, 0x14, 0x00, 0x00, 0x20, 0x79, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x10, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0xdc, 0x14, 0x00, 0x00, 0x20, 0x7a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x10, 0x15, 0x00, 0x00, 0xb0, 0x7a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x44, 0x15, 0x00, 0x00, 0x50, 0x7b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf2, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x78, 0x15, 0x00, 0x00, 0x50, 0x85, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x31, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xac, 0x15, 0x00, 0x00, - 0xd0, 0x8c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x06, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0xe0, 0x15, 0x00, 0x00, 0x70, 0x91, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0x14, 0x16, 0x00, 0x00, 0x90, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x07, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x48, 0x16, 0x00, 0x00, 0xb0, 0x9f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x07, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x7c, 0x16, 0x00, 0x00, 0x50, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xb0, 0x16, 0x00, 0x00, 0x00, 0xb0, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x37, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xe4, 0x16, 0x00, 0x00, - 0x90, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x18, 0x17, 0x00, 0x00, 0xd0, 0xb1, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0x4c, 0x17, 0x00, 0x00, 0xf0, 0xb9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xcc, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x17, 0x00, 0x00, 0x70, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xb4, 0x17, 0x00, 0x00, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xe8, 0x17, 0x00, 0x00, 0x60, 0xd1, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x33, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x1c, 0x18, 0x00, 0x00, - 0x70, 0xd9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x50, 0x18, 0x00, 0x00, 0x30, 0xda, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0x84, 0x18, 0x00, 0x00, 0x80, 0xdb, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xb8, 0x18, 0x00, 0x00, 0xc0, 0xdf, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xec, 0x18, 0x00, 0x00, 0x00, 0xe6, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, - 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x20, 0x19, 0x00, 0x00, 0x30, 0xe7, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x35, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x39, 0x00, - 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x54, 0x19, 0x00, 0x00, - 0x70, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x88, 0x19, 0x00, 0x00, 0x80, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x03, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x35, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0xbc, 0x19, 0x00, 0x00, 0x20, 0x0b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x03, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x35, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xec, 0x19, 0x00, 0x00, 0xd0, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcc, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x1c, 0x1a, 0x00, 0x00, 0x60, 0x17, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x1a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, - 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x58, 0x1d, 0x01, 0x11, 0x1f, 0x00, 0x00, 0x30, 0x01, 0xa0, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x62, 0x1c, 0xcc, 0x52, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x17, 0x53, 0xac, 0x4e, 0x02, 0x40, 0x5e, 0x06, 0x98, 0x1b, 0x42, 0x00, 0x65, 0x00, - 0x69, 0x00, 0x44, 0x6a, 0x20, 0x03, 0x6e, 0x00, 0x67, 0x06, 0x28, 0xa2, 0x50, 0x00, 0x1b, 0xe9, 0x00, 0x6b, 0x40, 0x7d, 0x06, 0x59, 0x1f, 0x50, - 0x20, 0xff, 0x50, 0x7f, 0xc5, 0x06, 0x30, 0xfd, 0x50, 0x7f, 0x63, 0x00, 0x68, 0x41, 0x7f, 0x6f, 0x06, 0x80, 0xff, 0x60, 0xed, 0x06, 0x81, 0x7f, - 0x06, 0xf2, 0xff, 0xa0, 0xbc, 0x74, 0xc7, 0xd5, 0x41, 0xc9, 0x0e, 0xb3, 0x7f, 0x65, 0x00, 0x71, 0x00, 0x75, 0x24, 0x03, 0x40, 0x6d, 0x06, 0x4c, - 0xa0, 0x1f, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x0e, 0x38, 0x04, 0x3d, 0x04, 0x0e, 0x52, 0x7f, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x01, 0x60, - 0x01, 0xd0, 0x01, 0x58, 0x17, 0x03, 0xa0, 0xcd, 0x91, 0x76, 0x55, 0x61, 0x06, 0xb8, 0x17, 0x43, 0x26, 0x93, 0x6f, 0x48, 0x13, 0x71, 0x06, 0x48, - 0x1b, 0x84, 0x10, 0x0e, 0xf0, 0x7f, 0xcd, 0x91, 0x86, 0x5e, 0x06, 0xbb, 0x17, 0xa9, 0xcd, 0x22, 0x6d, 0xce, 0x06, 0xbf, 0xb1, 0x54, 0x00, 0x73, - 0x2b, 0x95, 0x6f, 0xf1, 0x2b, 0x9d, 0x3b, 0x97, 0x06, 0x1a, 0xa1, 0x06, 0xf3, 0xff, 0x27, 0x04, 0x43, 0x28, 0x13, 0x64, 0x46, 0x06, 0x88, 0x19, - 0x10, 0x16, 0xf5, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x0c, 0x15, 0x00, 0xa3, 0x4b, 0x00, 0x00, 0x04, 0xa0, 0x0a, 0x4e, 0x2b, 0x77, 0x6d, 0x06, 0xbd, - 0x2f, 0x53, 0x2e, 0xab, 0x61, 0x4f, 0x2d, 0x30, 0x07, 0x58, 0x69, 0x10, 0x0e, 0xc0, 0x7f, 0xe1, 0x06, 0x21, 0xff, 0x06, 0xf2, 0xff, 0xc1, 0xc0, - 0x58, 0x15, 0xd5, 0x74, 0xc7, 0x06, 0xb3, 0x7f, 0x6a, 0x06, 0xc3, 0x7f, 0x58, 0x63, 0xfd, 0xc5, 0x06, 0x33, 0xfb, 0x3f, 0xff, 0x28, 0x04, 0x30, - 0x28, 0x17, 0x45, 0x20, 0x05, 0x64, 0x39, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf5, 0x7f, 0x03, 0x03, 0xd0, 0x01, 0x38, 0x16, 0x00, 0x61, 0x56, 0x00, - 0x00, 0x05, 0xa0, 0x29, 0x59, 0x5b, 0x25, 0x06, 0xc8, 0x17, 0x54, 0x2f, 0xa5, 0x38, 0x17, 0x6a, 0x4f, 0xad, 0x10, 0x06, 0x50, 0x7f, 0xbc, 0x3e, - 0x2b, 0x74, 0x2e, 0x37, 0x06, 0x31, 0x81, 0x06, 0xf1, 0xff, 0x06, 0xf2, 0xff, 0x88, 0xd1, 0x31, 0xc4, 0xc9, 0x06, 0x9e, 0x2d, 0x0f, 0x13, 0x7f, - 0x22, 0x04, 0x4f, 0x28, 0x17, 0x01, 0x4c, 0x04, 0x46, 0x04, 0x37, 0x04, 0x38, 0x40, 0x09, 0xe4, 0x0d, 0xd2, 0x7f, 0x10, 0x07, 0x35, 0x7f, 0x06, - 0xb6, 0xff, 0x04, 0x04, 0xd0, 0x01, 0xd7, 0x1b, 0x00, 0x54, 0x53, 0x00, 0x00, 0x06, 0xa0, 0x89, 0x5b, 0x0a, 0xbd, 0x5f, 0x01, 0x77, 0x06, 0x9d, - 0x2f, 0x41, 0x2f, 0xab, 0x68, 0x38, 0x00, 0x75, 0x06, 0x6c, 0x2d, 0x10, 0x0f, 0x10, 0x7f, 0x06, 0xf2, 0xff, 0x48, 0xc5, 0xc4, 0x01, 0xd6, 0x74, - 0xc7, 0x20, 0x00, 0x31, 0xc1, 0x10, 0x06, 0x53, 0x7f, 0x41, 0x10, 0x48, 0x15, 0x45, 0x04, 0x3e, 0x04, 0x39, 0x05, 0xe8, 0x11, 0xc8, 0x07, 0x52, - 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x05, 0x05, 0xd0, 0x01, 0xb5, 0x16, 0x6c, 0x81, 0x28, 0x17, 0x07, 0xa0, 0x8f, 0x79, 0xfa, 0x5e, 0x06, 0xb8, 0x17, - 0x7c, 0x46, 0x28, 0x13, 0x3f, 0xab, 0x3f, 0xb3, 0x10, 0x16, 0x30, 0x7f, 0x06, 0xf2, 0xff, 0x78, 0xd4, 0x30, 0x20, 0xc8, 0x06, 0x98, 0x15, 0x0f, - 0x13, 0x7f, 0x24, 0x04, 0x43, 0x04, 0x07, 0x46, 0x04, 0x37, 0x04, 0x4f, 0x48, 0x1f, 0x0e, 0x12, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x20, 0x06, 0x06, - 0xd0, 0x01, 0x8c, 0x12, 0xd5, 0x54, 0x00, 0x01, 0x00, 0x08, 0xa0, 0x18, 0x75, 0x9b, 0x7c, 0x06, 0xbd, 0x2f, 0x58, 0x47, 0x48, 0x11, 0x73, 0x2f, - 0xb1, 0x10, 0x16, 0x50, 0x7f, 0x18, 0x75, 0x83, 0x43, 0x80, 0x06, 0xbd, 0xaf, 0x04, 0xac, 0x64, 0xc4, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x16, - 0x13, 0x04, 0x30, 0x48, 0x11, 0x41, 0x28, 0x1f, 0x06, 0x52, 0x7f, 0x85, 0xc8, 0x06, 0xc2, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x07, 0x07, 0xd0, 0x01, - 0x9f, 0x19, 0xc7, 0x00, 0x49, 0x00, 0x00, 0x09, 0xa0, 0x83, 0x5e, 0x71, 0x50, 0x67, 0x06, 0xd8, 0x17, 0x75, 0x4f, 0xab, 0x67, 0x00, 0x64, 0x00, - 0x68, 0x6f, 0x40, 0x07, 0x10, 0x0d, 0xd0, 0x7f, 0x43, 0x4e, 0xa9, 0x74, 0x00, 0xf3, 0x84, 0x06, 0x6e, 0xaf, 0x7f, 0x5e, 0x1c, 0x4e, 0x06, 0xbd, - 0xaf, 0x11, 0xad, 0x36, 0x65, 0xb4, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, 0x13, 0x28, 0x0f, 0x38, 0x19, 0x34, 0xa9, 0x28, 0x17, 0x3d, 0x06, 0x28, - 0x19, 0xe3, 0x10, 0x16, 0xe5, 0x7f, 0x08, 0x08, 0xd0, 0x01, 0x00, 0x6d, 0x10, 0x6d, 0x50, 0x00, 0x00, 0x0a, 0xa0, 0x08, 0xb4, 0x8c, 0xde, 0x5d, - 0x06, 0xf8, 0x17, 0x69, 0x00, 0x7a, 0x39, 0x00, 0x68, 0x28, 0x15, 0x06, 0x3f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x35, 0x8d, 0x06, 0xd2, 0xff, 0x00, - 0x6c, 0xad, 0x74, 0xc7, 0x00, 0xc8, 0xb0, 0xc6, 0xe0, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x39, 0x04, 0x47, 0x04, 0x36, 0x39, 0x04, - 0x3e, 0x28, 0x21, 0x06, 0x1f, 0xb7, 0x10, 0x16, 0xf5, 0x7f, 0x09, 0x09, 0xd0, 0x01, 0x00, 0xe4, 0x12, 0xdd, 0x4b, 0x00, 0x00, 0x0b, 0xa0, 0x0a, - 0x77, 0x6d, 0x57, 0x53, 0x06, 0xbd, 0x2f, 0x48, 0x2f, 0xad, 0x69, 0xf0, 0x2f, 0xaf, 0x3f, 0xb3, 0x10, 0x16, 0x30, 0x7f, 0x06, 0xf2, 0xff, 0x58, - 0xd5, 0x74, 0xc7, 0x31, 0x9c, 0xb0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x25, 0x04, 0x30, 0x28, 0x17, 0x46, 0x3d, 0x20, 0x05, 0x3d, 0x04, 0x4c, - 0x06, 0x28, 0x17, 0x10, 0x16, 0xf5, 0x7f, 0x0a, 0x40, 0x0a, 0xd0, 0x01, 0x48, 0x0e, 0x75, 0x4e, 0x00, 0x00, 0x04, 0x0c, 0xa0, 0xb3, 0x6c, 0x17, - 0x06, 0xe8, 0x17, 0x65, 0x00, 0x58, 0x62, 0x20, 0x03, 0x69, 0x10, 0x16, 0x60, 0x7f, 0x06, 0xf2, 0xff, 0xc8, 0xd5, 0xa0, 0x18, 0xbc, 0x74, 0xc7, - 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x25, 0x04, 0x4d, 0x2e, 0x04, 0x31, 0x20, 0x03, 0x39, 0x06, 0x28, 0x13, 0x07, 0x32, 0x7f, 0x10, 0x0e, 0xf5, - 0x7f, 0x0b, 0x40, 0x0b, 0xd0, 0x01, 0x0e, 0x1b, 0x66, 0x51, 0x00, 0x00, 0x00, 0x0d, 0xa0, 0xd2, 0x9e, 0x8d, 0x9f, 0x5f, 0x6c, 0xc1, 0x06, 0x9d, - 0x31, 0x38, 0x17, 0x69, 0x00, 0x6c, 0x00, 0x6f, 0x2f, 0xb3, 0x1a, 0x67, 0x00, 0x6a, 0x2f, 0xbb, 0x3f, 0xb9, 0x67, 0x10, 0x15, 0x80, 0x7f, 0xd1, - 0x20, 0x9e, 0x99, 0x06, 0xc2, 0xff, 0xe4, 0xd5, 0x74, 0xc7, 0xfd, 0x3c, 0xb8, 0xa5, 0x06, 0x88, 0x19, 0x07, 0xf3, 0x7f, 0x05, 0xd3, 0xfd, 0x58, - 0x17, 0x39, 0x04, 0x00, 0x3b, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x46, 0x04, 0x1a, 0x37, 0x04, 0x4f, 0x20, 0x07, 0x05, 0xbf, 0xbd, 0xd1, 0x10, 0x16, - 0xe5, 0x7f, 0x0c, 0x40, 0x0c, 0xd0, 0x01, 0x8b, 0x20, 0x19, 0x5a, 0x00, 0x00, 0x05, 0x0e, 0xa0, 0xb3, 0x6c, 0x57, 0x07, 0x0a, 0xaf, 0x6e, 0x48, - 0x0b, 0xc3, 0x10, 0x16, 0x50, 0x7f, 0x06, 0xf2, 0xff, 0xc8, 0xd5, 0x9c, 0xb0, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x8b, 0x38, 0x17, 0x3d, 0x04, - 0x30, 0x28, 0x15, 0x4c, 0x05, 0xc8, 0x0f, 0x07, 0x72, 0x7f, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x0d, 0x0d, 0xd0, 0x01, 0x9a, 0x18, 0xce, 0x50, 0x01, - 0x00, 0x00, 0x0f, 0xa0, 0x56, 0x6e, 0x17, 0x06, 0xe8, 0x17, 0x1c, 0x75, 0x00, 0x62, 0x4f, 0xb3, 0x10, 0x16, 0x50, 0x7f, 0x06, 0xf2, 0xff, 0xc4, - 0xd6, 0x0c, 0xa0, 0xbc, 0x74, 0xc7, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x17, 0x43, 0x04, 0x31, 0x28, 0x1b, 0x39, 0x06, 0x48, 0x15, - 0x07, 0x12, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x20, 0x0e, 0x0e, 0xd0, 0x01, 0xbf, 0x15, 0x4a, 0x51, 0x00, 0x35, 0x00, 0x10, 0x28, 0x17, 0x06, 0xfa, - 0xaf, 0xfa, 0x2f, 0xaf, 0xe1, 0x06, 0xaf, 0xaf, 0x70, 0x75, 0x06, 0xef, 0xaf, 0x10, 0x06, 0xd0, 0x7f, 0x06, 0xf2, 0xff, 0xc4, 0xd6, 0x9c, 0xb0, - 0xe2, 0x06, 0x98, 0x15, 0x0f, 0x12, 0xff, 0x38, 0x17, 0x3d, 0x04, 0x30, 0x20, 0x03, 0x4c, 0xe4, 0x06, 0x48, 0x19, 0x0f, 0x15, 0x7f, 0x10, 0x06, - 0xd0, 0x7f, 0x0f, 0x0f, 0xd0, 0x01, 0x0a, 0x14, 0x00, 0x57, 0x50, 0x00, 0x00, 0x11, 0xa0, 0x5f, 0x6c, 0x2c, 0x07, 0x86, 0x06, 0xbd, 0x2f, 0x4a, - 0x2f, 0xa9, 0x37, 0x95, 0x67, 0x00, 0x61, 0x73, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, 0x5f, 0x6c, 0xcf, 0x82, 0x06, 0xbd, 0xaf, 0x0c, 0xa5, 0xc7, - 0x64, 0xc4, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x26, 0x04, 0x17, 0x37, 0x04, 0x4f, 0x28, 0x19, 0x41, 0x28, 0x1f, 0x06, 0x3f, 0xb5, 0x10, 0x16, - 0xf5, 0x7f, 0x20, 0x10, 0x10, 0xd0, 0x01, 0xc7, 0x16, 0x80, 0x54, 0x00, 0x25, 0x00, 0x12, 0x28, 0x17, 0x7f, 0x89, 0x07, 0x58, 0x17, 0x78, 0x28, - 0x21, 0xc3, 0x10, 0x16, 0x10, 0x7f, 0x06, 0xf2, 0xff, 0xa5, 0xc7, 0xdc, 0xc2, 0x07, 0x58, 0x17, 0x0e, 0x53, 0x7f, 0xb2, 0x98, 0x17, 0x38, 0x06, - 0x68, 0x17, 0x10, 0x16, 0xd5, 0x7f, 0x11, 0x11, 0xd0, 0x01, 0x5c, 0x00, 0x14, 0x71, 0x52, 0x00, 0x00, 0x13, 0xa0, 0x09, 0x15, 0x54, 0x97, 0x67, - 0x06, 0xfa, 0xaf, 0x6c, 0x2f, 0xb3, 0x6e, 0x10, 0x16, 0x60, 0x7f, 0x86, 0x06, 0xf2, 0xff, 0xc0, 0xc9, 0xb0, 0xb9, 0x06, 0xf8, 0x17, 0x0e, 0xb3, - 0x7f, 0x13, 0xae, 0x28, 0x0f, 0x40, 0x28, 0x13, 0x3d, 0x06, 0x48, 0x15, 0x07, 0x12, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x12, 0x40, 0x12, 0xd0, 0x01, - 0x37, 0x1f, 0x17, 0x59, 0x00, 0x00, 0x02, 0x14, 0xa0, 0x7c, 0x90, 0xe7, 0x5b, 0x06, 0xbd, 0x2f, 0x4c, 0xb4, 0x4f, 0xaf, 0x6f, 0x2f, 0xb1, 0x38, - 0x1b, 0x67, 0x10, 0x16, 0x00, 0x7f, 0xbd, 0x8f, 0x40, 0x81, 0x06, 0xc2, 0xff, 0xb4, 0xb7, 0x24, 0xc6, 0xdd, 0xb2, 0xc1, 0x06, 0x98, 0x19, 0x0e, - 0xf3, 0x7f, 0x1b, 0x04, 0x4f, 0x04, 0x3e, 0x28, 0x15, 0xc8, 0x06, 0x78, 0x19, 0x10, 0x16, 0xf5, 0x7f, 0x13, 0x13, 0xd0, 0x01, 0xb9, 0x1d, 0xbd, - 0x00, 0x57, 0x00, 0x00, 0x15, 0xa0, 0x52, 0x97, 0x77, 0x55, 0x6d, 0x06, 0xbd, 0x2f, 0x51, 0x68, 0x0f, 0x68, 0x28, 0x1d, 0x69, 0x10, 0x16, 0x20, - 0x7f, 0x81, 0x06, 0xf2, 0xff, 0x6d, 0xce, 0x58, 0xd5, 0x74, 0xc7, 0x06, 0x98, 0x17, 0xa0, 0x0e, 0xf3, 0x7f, 0x26, 0x48, 0x11, 0x45, 0x04, 0x30, - 0x04, 0x39, 0xc8, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf5, 0x7f, 0x14, 0x14, 0xd0, 0x01, 0x06, 0x1a, 0x79, 0x00, 0x48, 0x00, 0x00, 0x16, 0xa0, 0x5d, - 0x96, 0x7f, 0x51, 0x89, 0x06, 0xbd, 0x2f, 0x53, 0x48, 0x11, 0x6e, 0x00, 0x78, 0x06, 0x48, 0x15, 0xe8, 0x70, 0x7f, 0x06, 0x90, 0x81, 0x10, 0x06, - 0xf0, 0x7f, 0x55, 0x06, 0xe2, 0xff, 0xb0, 0xc0, 0xdc, 0x62, 0xc2, 0x06, 0x98, 0x15, 0x0f, 0x12, 0xff, 0x28, 0x04, 0x4d, 0x28, 0x17, 0x4c, 0x3c, - 0x04, 0x41, 0x28, 0x1f, 0x06, 0x3f, 0xb5, 0x0f, 0x55, 0x7f, 0x10, 0x06, 0x90, 0x7f, 0x15, 0x15, 0x80, 0xd0, 0x01, 0x5e, 0x18, 0x70, 0x4d, 0x00, - 0x00, 0x17, 0x04, 0xa0, 0x71, 0x5c, 0x71, 0x67, 0x07, 0x38, 0x17, 0x64, 0x00, 0x61, 0x6f, 0x4f, 0xb7, 0x10, 0x15, 0xf0, 0x7f, 0x71, 0x5c, 0x1c, - 0x4e, 0x06, 0xd8, 0x17, 0x31, 0x65, 0xb4, 0x07, 0x18, 0x17, 0x0e, 0x93, 0x7f, 0x28, 0x04, 0x30, 0x48, 0x17, 0x1c, 0x34, 0x04, 0x43, 0x28, 0x1f, - 0x06, 0x1f, 0xb7, 0x10, 0x16, 0xf5, 0x7f, 0x16, 0x16, 0x80, 0xd0, 0x01, 0x1c, 0x1a, 0x36, 0x53, 0x00, 0x00, 0x18, 0xf0, 0x28, 0x17, 0x10, 0x16, - 0xda, 0xaf, 0x06, 0xfc, 0xaf, 0x06, 0xf2, 0xff, 0xb0, 0xc0, 0xdc, 0xc2, 0xe3, 0x07, 0x38, 0x17, 0x0e, 0x7e, 0x2f, 0x78, 0x17, 0x41, 0x04, 0x38, - 0x06, 0x28, 0x15, 0x07, 0x12, 0x7f, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x17, 0x17, 0xd0, 0x01, 0xe7, 0x1a, 0x00, 0x50, 0x00, 0x00, 0x00, 0x19, 0xa0, - 0xdb, 0x56, 0xdd, 0x5d, 0x8b, 0x06, 0xda, 0xaf, 0x69, 0x00, 0x63, 0x2f, 0xb3, 0x75, 0x4f, 0xb5, 0x10, 0x16, 0x10, 0x7f, 0x86, 0x06, 0xf2, 0xff, - 0xf0, 0xc4, 0x28, 0xcd, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, 0x21, 0x03, 0x04, 0x4b, 0x04, 0x47, 0x04, 0x43, 0x68, 0x1d, 0x0e, 0x12, 0x7f, 0x90, - 0x10, 0x0e, 0xf5, 0x7f, 0x18, 0x18, 0xd0, 0x01, 0xc8, 0x15, 0x09, 0x4a, 0x00, 0x00, 0x00, 0x1a, 0xa0, 0xf2, 0x96, 0x57, 0x53, 0xae, 0x06, 0xbd, - 0x2f, 0x59, 0x28, 0x11, 0x6e, 0x2f, 0xaf, 0x06, 0x58, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x91, 0x43, 0x4e, 0x06, 0xd2, 0xff, 0x08, 0xc7, 0x9c, 0xb0, - 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x59, 0x2e, 0x48, 0x0f, 0x3d, 0x06, 0x88, 0x17, 0x10, 0x16, 0xf5, 0x7f, 0x19, 0x19, 0xd0, 0x01, 0x00, 0xd3, - 0x11, 0x04, 0x49, 0x00, 0x00, 0x1b, 0xa0, 0x0a, 0x59, 0x6d, 0x5f, 0x6c, 0x06, 0xbd, 0x2f, 0x5a, 0x2f, 0xab, 0x65, 0x36, 0x00, 0x6a, 0x2f, 0xb5, - 0x3f, 0xaf, 0x67, 0x10, 0x16, 0x00, 0x7f, 0x06, 0xf2, 0xff, 0x00, 0x18, 0xc8, 0xa5, 0xc7, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x27, 0x04, 0x36, - 0x00, 0x04, 0x4d, 0x04, 0x46, 0x04, 0x37, 0x04, 0x4f, 0xe4, 0x28, 0x21, 0x06, 0x2d, 0x17, 0x10, 0x16, 0xe5, 0x7f, 0x1a, 0x1a, 0xd0, 0x01, 0x8b, - 0x15, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x1d, 0xa0, 0x83, 0x5e, 0x00, 0x7f, 0x89, 0xc1, 0x30, 0xef, 0x30, 0xf3, 0x30, 0x00, 0xcf, 0x65, 0xea, 0x81, - 0xbb, 0x6c, 0x3a, 0x53, 0xb5, 0x05, 0xdf, 0xb6, 0x47, 0x2f, 0xaf, 0x58, 0x11, 0x78, 0x28, 0x1b, 0x2d, 0x48, 0x27, 0xbd, 0x70, 0x11, 0x7a, 0x2f, - 0xcb, 0x05, 0xd0, 0x7f, 0x06, 0x1f, 0xb2, 0x07, 0xd0, 0x7f, 0x20, 0xc1, 0x7f, 0xa6, 0x0d, 0x30, 0xff, 0x7f, 0x22, 0xff, 0xee, 0x58, 0x06, 0x52, - 0xfb, 0x3f, 0xff, 0x11, 0x00, 0xad, 0xdc, 0xc2, 0xa1, 0xc8, 0x20, 0x00, 0x71, 0x81, 0x20, 0x03, 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x0e, 0xb2, - 0x7f, 0x82, 0x06, 0x1f, 0xaf, 0x13, 0x04, 0x43, 0x04, 0x30, 0x28, 0x11, 0x41, 0x0d, 0x04, 0x38, 0x04, 0x2d, 0x48, 0x25, 0x70, 0x0f, 0x3a, 0x20, - 0x11, 0x00, 0x39, 0x04, 0x20, 0x00, 0x30, 0x04, 0x32, 0x04, 0x11, 0x42, 0x04, 0x3e, 0x28, 0x35, 0x3e, 0x04, 0x3c, 0x28, 0x3b, 0x56, 0x4b, 0x40, - 0x15, 0x40, 0x20, 0x35, 0x39, 0x40, 0x15, 0x02, 0xdf, 0xeb, 0xe3, 0xae, 0x25, 0x7f, 0xef, 0x62, 0x7f, 0x40, 0x06, 0x22, 0x7f, 0x07, 0xd5, 0x7f, - 0x10, 0x06, 0x10, 0x7f, 0x1b, 0x40, 0x1b, 0xd0, 0x01, 0x3c, 0x10, 0x06, 0x4d, 0x00, 0x00, 0x04, 0x1e, 0xa0, 0x85, 0x51, 0xe2, 0x28, 0x13, 0xb4, - 0x30, 0x2d, 0xeb, 0x30, 0x06, 0x55, 0x19, 0x4e, 0x2f, 0xad, 0x38, 0x0f, 0x4d, 0x2f, 0xb5, 0xb1, 0x3f, 0xaf, 0x67, 0x05, 0x28, 0x0b, 0xbf, 0xff, - 0x4d, 0x00, 0x6f, 0x4f, 0xa7, 0x15, 0x6f, 0x00, 0x6c, 0x2f, 0xb3, 0x65, 0x27, 0x19, 0x49, 0x2f, 0xb7, 0x05, 0x74, 0x00, 0xe9, 0x00, 0x72, 0x40, - 0x0f, 0x75, 0x20, 0x07, 0x6d, 0x65, 0x04, 0xaf, 0xc5, 0x30, 0x6d, 0x6e, 0x2f, 0xb1, 0x30, 0x65, 0x20, 0xc0, 0x8d, 0xdb, 0x31, 0x17, 0x05, 0xf0, - 0xff, 0x61, 0x80, 0xff, 0x30, 0x91, 0x6e, 0x2f, 0xc3, 0x06, 0xb0, 0x7f, 0x50, 0x69, 0x21, 0x9b, 0x72, 0x04, 0xef, 0xca, 0x85, 0x51, 0x99, 0x84, - 0x20, 0xe4, 0x53, 0x06, 0x78, 0x15, 0x00, 0x00, 0x24, 0xb1, 0x74, 0x04, 0xc7, 0x4d, 0xba, 0x6c, 0xad, 0x06, 0x58, 0x15, 0x00, 0x00, 0x6d, 0x42, - 0x2f, 0xa9, 0x52, 0x81, 0x6e, 0x43, 0x85, 0xb3, 0x0d, 0xeb, 0x05, 0xa3, 0x7f, 0x74, 0xf3, 0x82, 0x7f, 0x30, 0x8f, 0x05, 0x91, 0xff, 0x10, 0x00, - 0xe7, 0xf5, 0x20, 0x00, 0x51, 0x12, 0x28, 0x35, 0x43, 0x28, 0x19, 0x40, 0x04, 0x35, 0x28, 0x3f, 0x11, 0x3d, 0x04, 0x4f, 0x20, 0x01, 0x20, 0x00, - 0x1c, 0x48, 0x29, 0x55, 0x33, 0x28, 0x2f, 0x3b, 0x28, 0x51, 0x4f, 0x02, 0x88, 0x1d, 0x67, 0x82, 0x7f, 0xe4, 0x06, 0x38, 0x15, 0x07, 0x15, 0x7f, - 0x10, 0x06, 0xf0, 0x7f, 0x1c, 0x1c, 0xd0, 0x01, 0x06, 0x1d, 0x00, 0x5f, 0x4f, 0x00, 0x00, 0x1f, 0xa0, 0xe7, 0x5b, 0x0b, 0x0f, 0x59, 0xde, 0x56, - 0x06, 0x9d, 0x2f, 0x4e, 0x44, 0x97, 0x5f, 0xad, 0x6f, 0x61, 0x2a, 0xaf, 0x3e, 0xad, 0x69, 0x05, 0x4a, 0xa9, 0x00, 0x30, 0x7f, 0x06, 0xf0, 0xff, - 0x06, 0xf1, 0x7f, 0x1a, 0x20, 0x00, 0x48, 0x41, 0x7f, 0x0d, 0x90, 0xff, 0x81, 0x06, 0xe2, 0xff, 0xdd, 0x00, 0xb2, 0xe4, 0xc0, 0xc4, 0xd6, 0x74, - 0xc7, 0x20, 0x1a, 0x00, 0x71, 0xc8, 0x06, 0x38, 0x1b, 0x0e, 0xf2, 0xff, 0x1d, 0x27, 0xd5, 0x3d, 0x22, 0x04, 0x41, 0x27, 0xed, 0x2d, 0x00, 0x25, - 0x27, 0xff, 0x4d, 0x8d, 0x28, 0x17, 0x41, 0x04, 0x3a, 0x27, 0xeb, 0x38, 0x1f, 0x30, 0x00, 0xe8, 0x35, 0xf9, 0x03, 0x1f, 0xdf, 0xb5, 0x7f, 0x06, - 0x38, 0x19, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x1d, 0x1d, 0xd0, 0x01, 0x00, 0x60, 0x1b, 0x9a, 0x4b, 0x00, 0x00, 0x20, 0xa0, 0x00, 0xb0, - 0x65, 0x86, 0x75, 0xa6, 0x30, 0xa4, 0x30, 0x0a, 0xb0, 0x30, 0xeb, 0x30, 0x06, 0x3d, 0x35, 0x58, 0x4c, 0xaf, 0x6a, 0xc5, 0x4e, 0xab, 0x3f, 0xb7, - 0x2d, 0x00, 0x57, 0x4f, 0x29, 0x77, 0x2f, 0xa9, 0x5e, 0x27, 0x4f, 0x47, 0x2d, 0x04, 0xc8, 0x25, 0xf0, 0x7f, 0x05, 0xfe, 0x33, 0x07, 0xf0, 0x7f, - 0x20, 0x0f, 0x00, 0x55, 0x00, 0x79, 0x4c, 0x35, 0x04, 0xff, 0xa9, 0x07, 0x51, 0x7f, 0x32, 0xff, 0x02, 0xf4, 0x7e, 0x3e, 0x54, 0x14, 0x5c, 0x06, - 0x5b, 0x19, 0xe0, 0x00, 0xc2, 0xa5, 0xc7, 0xe8, 0xc6, 0x74, 0xc7, 0xb0, 0x1a, 0xc6, 0xbc, 0xc5, 0x06, 0x38, 0x17, 0x0e, 0xf2, 0xff, 0x21, 0x48, - 0x17, 0x4c, 0x0a, 0x04, 0x46, 0x04, 0x37, 0x2f, 0xf5, 0x3d, 0x28, 0x1d, 0x23, 0xac, 0x28, 0x19, 0x33, 0x28, 0x21, 0x40, 0x05, 0x48, 0x1f, 0x35, - 0x7f, 0xad, 0x7d, 0x0e, 0x3e, 0x54, 0x3e, 0x72, 0x06, 0x58, 0x19, 0x07, 0xf5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x1e, 0x42, 0x1e, 0xd0, 0x01, 0x22, - 0x1f, 0x48, 0x3e, 0x23, 0x15, 0xa0, 0x01, 0xc1, 0x30, 0xd9, 0x30, 0xc3, 0x30, 0xc8, 0x06, 0x48, 0x13, 0xb5, 0x78, 0x17, 0x7a, 0x06, 0x67, 0x93, - 0x3f, 0xff, 0x54, 0x2f, 0xaf, 0x62, 0x28, 0x89, 0x68, 0x74, 0x06, 0x40, 0x7d, 0x0f, 0x30, 0x7f, 0xed, 0x06, 0xc1, 0x7f, 0x7f, 0x89, 0xcf, 0x60, - 0x85, 0x06, 0x72, 0xfb, 0x3f, 0xff, 0xf0, 0xd2, 0xa0, 0xbc, 0xb8, 0x6a, 0xd2, 0x06, 0x38, 0x11, 0x07, 0xf2, 0xff, 0x65, 0x06, 0x43, 0xff, 0x22, - 0x28, 0x17, 0x31, 0x3f, 0x04, 0x35, 0x27, 0xf5, 0x05, 0x38, 0x05, 0x00, 0x92, 0x7f, 0x06, 0x18, 0x11, 0x07, 0x55, 0x7f, 0x10, 0x06, 0xf0, 0x7f, - 0x20, 0x1f, 0x1f, 0xd0, 0x01, 0x18, 0x15, 0xd4, 0x40, 0x03, 0x80, 0x4f, 0xff, 0x1c, 0xa0, 0xf0, 0x53, 0x7e, 0x6e, 0x01, 0x6e, 0x77, 0x06, 0x67, - 0x18, 0x47, 0x9b, 0x61, 0x4a, 0xa1, 0x3f, 0xb1, 0x10, 0x0e, 0xb0, 0x7f, 0xe1, 0xc0, 0x06, 0x61, 0xff, 0x06, 0xf2, 0xff, 0xc0, 0xd0, 0x74, 0xc7, - 0x44, 0xc6, 0x0a, 0x20, 0x00, 0x31, 0xc1, 0x10, 0x06, 0x53, 0x7f, 0x22, 0x4f, 0xf7, 0x32, 0x8c, 0x2f, 0xfd, 0x3d, 0x04, 0x4c, 0x03, 0xc7, 0xf5, - 0x01, 0x72, 0x7f, 0x63, 0x70, 0x90, 0x10, 0x16, 0xb5, 0x7f, 0x1b, 0x1b, 0xd0, 0x01, 0xcd, 0x11, 0x67, 0x56, 0x80, 0x2b, 0x31, 0xa0, 0xde, 0x30, - 0xab, 0x30, 0xaa, 0x30, 0xaa, 0x06, 0x98, 0x17, 0x4d, 0x2a, 0xaf, 0x63, 0x2a, 0xb3, 0x6f, 0x0e, 0xe0, 0x7f, 0x75, 0x80, 0x10, 0x06, 0x61, 0x7f, - 0xb3, 0x6f, 0xe8, 0x95, 0x79, 0x72, 0x2b, 0x02, 0x52, 0x4c, 0x88, 0x3f, 0x65, 0x3a, 0x06, 0x2d, 0xb7, 0xc8, 0x07, 0xb9, 0x74, 0xce, 0x24, 0xc6, - 0x07, 0x13, 0x7f, 0x06, 0xf2, 0x7f, 0x06, 0x72, 0xff, 0x56, 0x1c, 0x28, 0x17, 0x3a, 0x28, 0x1b, 0x3e, 0x06, 0x28, 0x13, 0x52, 0x7f, 0x80, 0xae, - 0x22, 0x7f, 0x25, 0x42, 0x7f, 0x40, 0x06, 0x22, 0x7f, 0x0f, 0x75, 0x7f, 0x0e, 0x76, 0x7f, 0x21, 0x40, 0x21, 0xd0, 0x01, 0xcc, 0x0f, 0xc8, 0x50, - 0x00, 0x00, 0x01, 0x23, 0xa0, 0xdb, 0x30, 0xf3, 0x30, 0xb3, 0x20, 0x03, 0xa0, 0x06, 0x7d, 0x31, 0x48, 0x28, 0x11, 0x6e, 0x00, 0x67, 0x00, 0x20, - 0x36, 0x00, 0x4b, 0x60, 0x09, 0x0e, 0x50, 0x7f, 0x6b, 0x06, 0x40, 0xfd, 0x0f, 0x11, 0x7f, 0x99, 0x10, 0x99, 0x2f, 0x6e, 0x06, 0xb8, 0x17, 0x4d, - 0xd6, 0x69, 0xcf, 0xd6, 0x06, 0x9e, 0x2d, 0x0f, 0x12, 0x7f, 0x13, 0x28, 0x11, 0x3d, 0x28, 0x19, 0x30, 0x05, 0x33, 0xf9, 0x06, 0x28, 0x1b, 0x52, - 0x7f, 0x06, 0x98, 0x17, 0x0f, 0x75, 0x7f, 0x0e, 0x76, 0x7f, 0x22, 0x22, 0xd0, 0x01, 0x09, 0xf9, 0x0f, 0x47, 0x51, 0xff, 0xff, 0x01, 0x01, 0xd0, - 0x01, 0x24, 0x02, 0x02, 0xd0, 0x01, 0x03, 0x03, 0xd0, 0x01, 0x04, 0x04, 0x92, 0xd0, 0x01, 0x05, 0x05, 0xd0, 0x01, 0x06, 0x06, 0xd0, 0x01, 0x07, - 0x49, 0x07, 0xd0, 0x01, 0x08, 0x08, 0xd0, 0x01, 0x09, 0x09, 0xd0, 0x01, 0x24, 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0xd0, 0x01, 0x0c, 0x0c, 0x92, - 0xd0, 0x01, 0x0d, 0x0d, 0xd0, 0x01, 0x0e, 0x0e, 0xd0, 0x01, 0x0f, 0x49, 0x0f, 0xd0, 0x01, 0x10, 0x10, 0xd0, 0x01, 0x11, 0x11, 0xd0, 0x01, 0x24, - 0x12, 0x12, 0xd0, 0x01, 0x13, 0x13, 0xd0, 0x01, 0x14, 0x14, 0x92, 0xd0, 0x01, 0x15, 0x15, 0xd0, 0x01, 0x16, 0x16, 0xd0, 0x01, 0x17, 0x49, 0x17, - 0xd0, 0x01, 0x18, 0x18, 0xd0, 0x01, 0x19, 0x19, 0xd0, 0x01, 0x24, 0x1a, 0x1a, 0xd0, 0x01, 0x1c, 0x1c, 0xd0, 0x01, 0x1d, 0x1d, 0x92, 0xd0, 0x01, - 0x1e, 0x1e, 0xd0, 0x01, 0x1f, 0x1f, 0xd0, 0x01, 0x20, 0x60, 0x20, 0xd0, 0x01, 0x7f, 0xff, 0x00, 0x11, 0x94, 0x10, 0x00, 0x12, 0x01, 0x00, 0x00, - 0x30, 0x01, 0xa0, 0x1f, 0x50, 0x07, 0x00, 0x0c, 0x2d, 0x4e, 0xfd, 0x56, 0x60, 0x0a, 0x06, 0x40, 0x06, 0x43, 0x00, 0x01, 0x68, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x61, 0x06, 0xe0, 0x7f, 0x78, 0x65, 0x0e, 0x80, 0xff, 0x06, 0xb1, 0x7d, 0x07, 0x11, 0xff, 0x06, 0xf2, 0xff, 0x11, 0xc9, 0x6d, 0x60, - 0xad, 0x0f, 0x33, 0x7f, 0x06, 0x73, 0xff, 0x1a, 0x04, 0x38, 0x04, 0x42, 0x04, 0x04, 0x30, 0x04, 0x39, 0x04, 0x06, 0x72, 0x7f, 0x0b, 0x57, 0xf6, - 0x10, 0x06, 0xb1, 0xff, 0x0e, 0xf2, 0xff, 0x01, 0xf7, 0xfb, 0x78, 0x3f, 0x22, 0x10, 0x72, 0x68, 0x3f, 0x00, 0x3f, 0xe6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x34, 0xad, 0x02, 0x11, 0x53, 0x00, 0x00, 0x30, 0x01, 0x64, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xa8, 0x27, 0xbf, 0x1a, 0x00, 0x00, 0x00, 0x09, 0x64, 0xe2, 0x30, 0xb9, 0x30, 0xaf, 0x04, - 0x30, 0xef, 0x30, 0x02, 0x5e, 0x06, 0x58, 0x1f, 0x4d, 0x00, 0x04, 0x6f, 0x00, 0x73, 0x00, 0x63, 0x20, 0x05, 0x77, 0x00, 0x00, 0x20, 0x00, 0x43, - 0x00, 0x69, 0x00, 0x74, 0x00, 0x51, 0x79, 0x06, 0x40, 0x7f, 0x75, 0x20, 0x7f, 0x28, 0x00, 0x76, 0x20, 0x81, 0x44, 0x6c, 0x20, 0x01, 0x65, 0x00, - 0x29, 0x05, 0xa0, 0xff, 0x6b, 0x00, 0x51, 0x61, 0x60, 0x7f, 0x53, 0x20, 0xff, 0x61, 0x00, 0x64, 0x21, 0x05, 0xbb, 0x05, 0xb0, 0x7f, 0x63, 0x20, - 0x7f, 0x06, 0x5a, 0x1f, 0x31, 0xf1, 0x75, 0x20, 0xef, 0x30, 0xf3, 0x5a, 0x20, 0x20, 0xf7, 0x65, 0x22, 0x05, 0x72, 0x13, 0xfa, 0x05, 0x2a, 0xb2, - 0xab, 0x06, 0x83, 0xaf, 0x65, 0xd1, 0x79, 0x06, 0x72, 0xfd, 0x23, 0x87, 0xba, 0x03, 0xa4, 0xc2, 0x6c, 0xd0, 0x14, 0xbc, 0x06, 0x7b, 0x9d, 0x72, - 0x7f, 0xbb, 0x72, 0xff, 0x73, 0x62, 0x7f, 0x05, 0x52, 0xfd, 0xb3, 0xff, 0x76, 0x24, 0x09, 0x33, 0x81, 0x70, 0x63, 0x24, 0x03, 0x52, 0x0f, 0x05, - 0x33, 0x83, 0x1c, 0x04, 0x3e, 0x04, 0x00, 0x41, 0x04, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, 0xc0, 0x0e, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x01, - 0x2b, 0x29, 0x06, 0x05, 0x01, 0x02, 0x01, 0x01, 0x2c, 0x2b, 0x1e, 0x2b, 0x20, 0x06, 0x01, 0x80, 0x58, 0x17, 0x0a, 0x64, 0xa2, 0x30, 0xc7, 0x30, - 0xa3, 0x00, 0x30, 0xb2, 0x30, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x51, 0x56, 0x06, 0x1f, 0xbb, 0x41, 0x27, 0x03, 0x79, 0x00, 0x67, 0x27, 0x87, 0xc6, - 0x05, 0xb8, 0x0d, 0x00, 0x10, 0x7f, 0x75, 0x00, 0xe9, 0x28, 0x0b, 0x06, 0x1f, 0xbb, 0x52, 0xaa, 0x28, 0x81, 0x70, 0x28, 0x93, 0x62, 0x28, 0x8d, - 0x69, 0x28, 0x1f, 0x20, 0xbe, 0xa1, 0x11, 0x6a, 0x05, 0x27, 0xad, 0x90, 0x7f, 0x50, 0x81, 0x38, 0x21, 0x37, 0x9f, 0x69, 0xab, 0x60, 0x89, 0x69, - 0x21, 0x9b, 0x68, 0x29, 0x25, 0x7a, 0x29, 0xb1, 0x04, 0x38, 0x3b, 0xbb, 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0x38, 0x1d, 0x70, 0x7d, 0x75, 0x42, 0x1b, - 0x04, 0x78, 0xb7, 0x02, 0x3f, 0x96, 0xea, 0x8f, 0x3c, 0x68, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x00, 0x44, 0xc5, 0x14, 0xb5, 0x8c, 0xac, 0x7c, 0x00, - 0xc5, 0x20, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0x46, 0xad, 0x06, 0x73, 0x7f, 0x69, 0x00, 0xeb, 0x06, 0x83, 0x7f, 0x51, 0xe5, 0xe9, 0xec, 0x2c, - 0x1f, 0x32, 0x63, 0x3b, 0x9d, 0x72, 0x00, 0x02, 0x15, 0x04, 0x7b, 0xa5, 0x20, 0x04, 0x40, 0x35, 0x28, 0x17, 0x3f, 0x04, 0x43, 0x04, 0x31, 0x04, - 0x10, 0x3b, 0x04, 0x38, 0x28, 0x21, 0x30, 0x04, 0x20, 0x00, 0x01, 0x10, 0x04, 0x34, 0x04, 0x4b, 0x04, 0x33, 0x20, 0x1b, 0x70, 0x4f, 0x04, 0xe8, - 0x2d, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x02, 0x01, 0x01, 0x3e, 0x10, 0x3c, 0x35, 0x02, 0x20, 0x06, 0x2c, 0x01, 0x02, 0x02, 0x00, 0x02, - 0x02, 0xb7, 0x1f, 0x80, 0x1c, 0x00, 0x00, 0x41, 0x0b, 0x28, 0x17, 0xeb, 0x30, 0xbf, 0x30, 0xa4, 0x06, 0x88, 0x17, 0x45, 0x47, 0x2f, 0xaf, 0x72, - 0x00, 0x6e, 0x2f, 0xb5, 0x2d, 0x28, 0x23, 0x75, 0x6c, 0x4f, 0x2d, 0x05, 0xbb, 0x2f, 0x70, 0x73, 0xef, 0x64, 0x8f, 0xe9, 0xa7, 0xa5, 0x7b, 0x71, - 0x46, 0x93, 0x04, 0xdf, 0xb7, 0x00, 0x38, 0x17, 0x51, 0x05, 0x69, 0x05, 0xe8, 0x97, 0xf7, 0x99, 0x57, 0x6c, 0x28, 0xa9, 0x27, 0x81, 0x93, 0x6a, - 0x04, 0xc9, 0x17, 0x00, 0x58, 0x17, 0x32, 0x0d, 0x40, 0xe1, 0x04, 0xe1, 0x07, 0x3f, 0x96, 0x14, 0x5c, 0xf0, 0x6c, 0x80, 0x06, 0x98, 0x17, 0xe0, - 0xac, 0x74, 0xb9, 0x78, 0xb1, 0x4c, 0x07, 0xc5, 0xc0, 0xd0, 0x74, 0xc7, 0x06, 0x38, 0x1b, 0x91, 0xdf, 0x97, 0x8f, 0xbe, 0x7a, 0xa5, 0x65, 0x2a, - 0xa7, 0x04, 0xff, 0xb1, 0x92, 0xed, 0x05, 0xd8, 0x0f, 0x00, 0xf8, 0x17, 0x3b, 0x2e, 0x04, 0x42, 0x28, 0x21, 0x39, 0x04, 0xe8, 0x15, 0x07, 0x14, - 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x00, 0x0f, 0x03, 0x3f, 0x3a, 0x36, 0x03, 0x03, 0x03, 0x10, 0x02, 0x2d, 0x0f, 0x20, 0x05, 0x03, 0xf1, 0x24, - 0x21, 0x08, 0x3d, 0x00, 0x00, 0x0c, 0x88, 0x17, 0x30, 0x57, 0xb9, 0xef, 0x06, 0x3f, 0x2e, 0x06, 0x48, 0x0b, 0x00, 0x98, 0x17, 0x6b, 0x2c, 0xa9, - 0x38, 0x23, 0x04, 0xf5, 0x0d, 0xdf, 0xaf, 0xba, 0x3d, 0xad, 0x6f, 0x29, 0x1b, 0x05, 0xf8, 0x13, 0x3f, 0xfe, 0x54, 0x2f, 0xaf, 0x72, 0xbf, 0x2d, - 0x9f, 0x69, 0x29, 0x91, 0x39, 0xa1, 0x30, 0x89, 0x05, 0xb8, 0x17, 0x00, 0x90, 0x7f, 0x05, 0x58, 0x19, 0x81, 0x58, 0x17, 0xb9, 0x8f, 0x86, 0x75, - 0x3a, 0x53, 0x06, 0x3f, 0x30, 0x87, 0x78, 0x11, 0xc0, 0xc9, 0x29, 0xbc, 0x06, 0xb3, 0x7f, 0x58, 0x17, 0x52, 0xff, 0x6b, 0x6a, 0x05, 0xa2, 0xff, - 0xd8, 0x17, 0x74, 0xa2, 0x8d, 0xf3, 0x62, 0x8d, 0x04, 0xdb, 0x97, 0xa8, 0x98, 0x01, 0x41, 0x28, 0x13, 0x38, 0x28, 0x09, 0x20, 0x00, 0x3a, 0x38, - 0x04, 0x40, 0x05, 0x48, 0x13, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x04, 0x02, 0x02, 0x00, 0x35, 0x4c, 0x4b, 0x04, 0x04, 0x02, 0x03, 0x01, - 0x00, 0x02, 0x04, 0x04, 0x04, 0x04, 0xf0, 0x25, 0x8e, 0x08, 0x3b, 0x00, 0x00, 0x0d, 0x28, 0x17, 0xe0, 0x30, 0xfc, 0x95, 0x28, 0x1b, 0xde, 0x5d, - 0x06, 0x77, 0x97, 0x6d, 0x2f, 0x9f, 0x72, 0x06, 0x68, 0x15, 0xa8, 0x50, 0x7f, 0x6f, 0x06, 0xa0, 0x81, 0x4f, 0x4f, 0xa7, 0x61, 0x00, 0x73, 0xff, - 0x2f, 0x95, 0x3f, 0x23, 0x05, 0xf1, 0x0d, 0xb8, 0x97, 0x3f, 0xa5, 0xb8, 0x11, 0x05, 0x31, 0x99, 0x79, 0x17, 0x70, 0xf3, 0x49, 0x17, 0x78, 0x0f, - 0x05, 0x92, 0x13, 0x3f, 0x96, 0x46, 0x7a, 0x20, 0x14, 0x5c, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x44, 0xc5, 0x34, 0x01, 0xbb, 0x74, 0xb9, 0x20, 0x00, - 0xfc, 0xc8, 0x06, 0xb2, 0xff, 0xeb, 0x3a, 0x1b, 0x06, 0xd3, 0xff, 0x3b, 0x95, 0x72, 0x6b, 0x23, 0xe3, 0x05, 0x08, 0x0d, 0xb8, 0x17, 0x18, 0x3c, - 0x04, 0x43, 0x28, 0x07, 0x38, 0x15, 0x30, 0x04, 0x4f, 0x8a, 0x28, 0x15, 0x3e, 0x04, 0x31, 0x28, 0x2b, 0x30, 0x28, 0x27, 0x42, 0x38, 0x04, 0x4c, - 0x05, 0x08, 0x1b, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x05, 0x03, 0x04, 0x04, 0x07, 0x07, 0x07, 0x05, 0x05, 0x38, 0x19, 0x05, 0x05, 0x00, - 0x05, 0x05, 0xd0, 0x23, 0xad, 0x5a, 0x00, 0x00, 0x40, 0x0e, 0x28, 0x17, 0xeb, 0x30, 0xcf, 0x30, 0xf3, 0x30, 0x01, 0xb2, 0x30, 0xea, 0x30, 0xb9, - 0x30, 0xaf, 0x06, 0x08, 0x1f, 0x45, 0x41, 0x2f, 0xa1, 0x6b, 0x00, 0x68, 0x2f, 0xb1, 0x6e, 0x2f, 0x37, 0xae, 0x3e, 0xa5, 0x27, 0x27, 0x23, 0x6b, - 0x06, 0xa0, 0x7f, 0x05, 0xb0, 0x7d, 0x00, 0x18, 0x17, 0x72, 0x3e, 0x00, 0x63, 0x05, 0xc0, 0x8d, 0x00, 0x18, 0x17, 0x3d, 0xb9, 0x50, 0x87, 0x91, - 0x93, 0x6f, 0xaa, 0x05, 0xe8, 0x17, 0x72, 0x2e, 0xbf, 0xe1, 0x42, 0x11, 0x75, 0x04, 0xe1, 0x93, 0x3f, 0x00, 0x96, 0x14, 0x5c, 0x49, 0x6c, 0x3c, - 0x68, 0x14, 0x04, 0x5c, 0xaf, 0x65, 0x4b, 0x51, 0x06, 0x1b, 0x1d, 0x44, 0xc5, 0x00, 0x74, 0xb9, 0x5c, 0xd5, 0x94, 0xac, 0xa4, 0xc2, 0x3d, 0x6c, - 0xd0, 0x06, 0x38, 0x1d, 0x06, 0x12, 0x71, 0x01, 0x33, 0x7f, 0x05, 0x98, 0x25, 0x10, 0x28, 0x13, 0x41, 0x45, 0x28, 0x11, 0x3d, 0x04, 0x33, 0x04, - 0x35, 0x28, 0x0f, 0x70, 0x4c, 0x05, 0xe8, 0x21, 0x08, 0x14, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x06, 0x04, 0x05, 0x08, 0x04, 0x08, 0x08, 0x06, 0x06, - 0x05, 0x28, 0x20, 0x06, 0x06, 0x00, 0x06, 0x06, 0xe3, 0x2d, 0xd2, 0x1c, 0x00, 0x00, 0x41, 0x0f, 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x30, 0xe9, 0x48, - 0x1b, 0xad, 0x06, 0x3d, 0x35, 0x41, 0x4f, 0x29, 0x72, 0x2f, 0x31, 0x78, 0x1d, 0x27, 0x06, 0xe0, 0x7f, 0xff, 0x05, 0xde, 0x39, 0xf8, 0x17, 0x71, - 0x0d, 0x78, 0x1d, 0x04, 0xff, 0x34, 0x00, 0x78, 0x17, 0xf0, 0x87, 0x04, 0x71, 0x95, 0xf0, 0x00, 0x58, 0x17, 0x91, 0x05, 0x38, 0x1d, 0x04, 0xbf, - 0xcb, 0x3f, 0x96, 0xaf, 0x65, 0x03, 0x79, 0x72, 0xc9, 0x62, 0x55, 0x7f, 0x06, 0x32, 0xfd, 0x38, 0x17, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x7c, 0xb7, - 0x5c, 0xd5, 0xf7, 0x06, 0x38, 0x15, 0xb3, 0x7f, 0x05, 0x72, 0x71, 0x00, 0x90, 0x7f, 0xe3, 0x05, 0xa8, 0x0f, 0x98, 0x17, 0x37, 0xf5, 0x7c, 0x40, - 0x28, 0x19, 0x58, 0x1d, 0x05, 0xd8, 0x15, 0x08, 0x34, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x07, 0x05, 0x01, 0x06, 0x09, 0x09, 0x09, 0x07, 0x07, 0x06, - 0x28, 0x20, 0x00, 0x07, 0x07, 0x07, 0x07, 0xf5, 0x20, 0x2b, 0x22, 0x80, 0x2b, 0x2d, 0x64, 0xd0, 0x30, 0xb7, 0x30, 0xb3, 0x30, 0x44, 0xeb, 0x28, - 0x1b, 0xb9, 0x30, 0xbf, 0x28, 0x1b, 0x71, 0x51, 0x0a, 0x8c, 0x54, 0xfd, 0x56, 0x05, 0x9f, 0x30, 0x42, 0x4f, 0x2b, 0x68, 0xaf, 0x2f, 0xb3, 0x6f, - 0x2f, 0xb9, 0x74, 0x2e, 0xb7, 0x3f, 0x39, 0x05, 0x97, 0x9f, 0x30, 0x7f, 0xab, 0x3f, 0xa1, 0x6b, 0x2f, 0x33, 0x72, 0x2f, 0x37, 0x65, 0x05, 0xee, - 0x30, 0x3f, 0xaf, 0x6f, 0x70, 0x2f, 0x15, 0x38, 0x1d, 0x69, 0x4d, 0x29, 0x51, 0x11, 0x50, 0x93, 0x05, 0x11, 0x13, 0xda, 0x90, 0x7f, 0x50, 0x81, - 0x63, 0x2e, 0x39, 0x5f, 0xb7, 0x6c, 0x60, 0x8b, 0x61, 0x6f, 0x01, 0x04, 0xb1, 0x9b, 0x50, 0xff, 0xfa, 0x00, 0x00, 0x7d, 0x71, 0x07, 0xd2, 0x17, - 0x04, 0x18, 0x25, 0x00, 0xf4, 0x5d, 0xc0, 0x4e, 0xd1, 0x79, 0x14, 0x5c, 0x02, 0x58, 0x62, 0xaf, 0x65, 0x66, 0x57, 0x05, 0xf2, 0xfd, 0x00, 0x00, - 0x00, 0x14, 0xbc, 0xdc, 0xc2, 0xa4, 0xd0, 0x74, 0x00, 0xb9, 0x20, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0x6e, 0xad, 0x05, 0xfb, 0x99, 0x53, 0x7f, - 0x6a, 0x62, 0xff, 0x05, 0xf3, 0x7d, 0x73, 0xff, 0x71, 0xbe, 0x23, 0x01, 0xed, 0x43, 0x7f, 0x32, 0x7d, 0x58, 0x1b, 0xd2, 0x15, 0x04, 0x78, 0x21, - 0x20, 0x22, 0x04, 0x35, 0x28, 0x19, 0x3f, 0x04, 0x43, 0x48, 0x05, 0x38, 0x8a, 0x48, 0x15, 0x20, 0x00, 0x11, 0x28, 0x27, 0x48, 0x28, 0x21, 0x3e, - 0xbe, 0x28, 0x31, 0x42, 0x20, 0x05, 0x38, 0x3b, 0x38, 0x35, 0x0c, 0x54, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x08, 0x00, 0x06, 0x07, 0x40, 0x37, 0x37, - 0x08, 0x08, 0x07, 0x00, 0x07, 0x2e, 0x06, 0x08, 0x08, 0x08, 0x08, 0xee, 0x22, 0x26, 0xcc, 0x2f, 0x98, 0x11, 0x64, 0xd9, 0x28, 0x13, 0xb4, 0x05, - 0x30, 0xed, 0x30, 0xc9, 0x30, 0x06, 0x5d, 0x2f, 0x42, 0x46, 0x81, 0x5b, 0x67, 0x48, 0x15, 0x6f, 0x2e, 0xad, 0x0d, 0xf0, 0x7f, 0x4f, 0x48, 0x11, - 0x39, 0x1b, 0x76, 0x74, 0x48, 0x13, 0x05, 0xf1, 0x0d, 0x7f, 0xaf, 0x6f, 0x2f, 0xaf, 0x3f, 0xab, 0x64, 0xed, 0x2f, 0xbb, 0x05, 0xb0, 0x87, 0x70, - 0x7f, 0xf3, 0x2e, 0xa9, 0x98, 0x11, 0xe9, 0x05, 0x82, 0x13, 0x00, 0x2b, 0x52, 0x14, 0x5c, 0xe5, 0x54, 0x57, 0x7f, 0x20, 0xb7, 0x5f, 0x06, 0x52, - 0xff, 0xa8, 0xbc, 0xe0, 0xac, 0x5c, 0x01, 0xb8, 0xb8, 0xd2, 0x20, 0x00, 0xfc, 0xc8, 0x0f, 0x33, 0x7f, 0xdd, 0x78, 0x15, 0x32, 0x93, 0xe3, 0x2c, - 0x2b, 0x04, 0x78, 0x0f, 0x7f, 0xff, 0x11, 0x28, 0x17, 0x11, 0x3b, 0x04, 0x33, 0x48, 0x01, 0x3e, 0x04, 0x34, 0x28, 0x23, 0xaa, 0x38, 0x19, 0x4f, - 0x28, 0x1b, 0x3e, 0x48, 0x29, 0x30, 0x48, 0x13, 0x4c, 0xe0, 0x04, 0x28, 0x11, 0x0f, 0x54, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x09, 0x07, 0x08, 0x0a, - 0x0a, 0x00, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x05, 0x07, 0x09, 0x00, 0x09, 0x09, 0x09, 0xfb, 0x23, 0x06, 0x1a, 0x00, 0x00, 0x00, 0x12, 0x64, 0xd6, - 0x30, 0xea, 0x30, 0xe3, 0x02, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0xaf, 0x06, 0x48, 0x19, 0x42, 0xbf, 0x2f, 0xa5, 0x79, 0x4f, 0x0b, 0x3e, 0x1b, 0x06, - 0x50, 0x7f, 0x3c, 0xa5, 0x06, 0x70, 0x7f, 0xf8, 0x17, 0x7e, 0x72, 0x2d, 0xbb, 0x05, 0xb1, 0x0d, 0x00, 0x78, 0x17, 0x05, 0x70, 0x87, 0x00, 0x58, - 0x17, 0x05, 0x91, 0x93, 0x03, 0x01, 0x5e, 0x6f, 0x82, 0xaf, 0x65, 0x4b, 0x51, 0x06, 0x5b, 0x15, 0x00, 0x00, 0x00, 0x0c, 0xbe, 0xb8, 0xb7, 0xa4, - 0xc2, 0x3e, 0x6c, 0xd0, 0x06, 0x98, 0x17, 0x05, 0xf2, 0x71, 0x00, 0xb3, 0x7f, 0x05, 0xf8, 0x15, 0x38, 0x17, 0x40, 0xb8, 0x28, 0x05, 0x3d, 0x06, - 0x08, 0x0f, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x0a, 0x08, 0x0a, 0x14, 0x0b, 0x0b, 0x0b, 0x38, 0x1a, 0x06, 0x38, 0x20, 0x0a, 0xdd, 0x02, - 0x25, 0x70, 0x18, 0x00, 0x00, 0x13, 0x48, 0x17, 0xe4, 0x00, 0x30, 0xfc, 0x30, 0xc8, 0x30, 0x71, 0x51, 0x8c, 0x15, 0x54, 0xfd, 0x56, 0x06, 0x1f, - 0xaf, 0x75, 0x68, 0x19, 0x74, 0x06, 0x45, 0x98, 0x75, 0x42, 0x2f, 0x9b, 0x30, 0x81, 0x38, 0x1b, 0x74, 0x2f, 0x37, 0x65, 0x05, 0xee, 0x34, 0xb7, - 0x3f, 0xaf, 0x70, 0x21, 0x03, 0x38, 0x1d, 0x69, 0x45, 0x19, 0x51, 0x11, 0x38, 0x1d, 0xb7, 0x50, 0x8f, 0x6e, 0x05, 0x60, 0x7f, 0x50, 0x81, 0x63, - 0x29, 0xa3, 0x98, 0x1d, 0x71, 0x19, 0x6f, 0x7a, 0x49, 0x3b, 0x04, 0x90, 0xff, 0xfa, 0xe0, 0x7d, 0x58, 0x1d, 0xb1, 0x97, 0x04, 0x50, 0x7d, 0x81, - 0x38, 0x17, 0xcc, 0x91, 0x9a, 0x4e, 0x79, 0x72, 0x06, 0x52, 0xfd, 0x00, 0x00, 0x00, 0x80, 0xbd, 0xb4, 0xb7, 0xb8, 0xd2, 0x00, 0x20, 0x00, 0xf5, - 0xac, 0x54, 0xd6, 0x6d, 0xad, 0xa8, 0x06, 0x52, 0xff, 0x65, 0xa2, 0x6f, 0xeb, 0x06, 0x43, 0xff, 0x69, 0x00, 0xe1, 0xf8, 0x22, 0x79, 0x3b, 0x9f, - 0x78, 0x19, 0xd2, 0x13, 0x04, 0x98, 0x1f, 0x20, 0x04, 0x35, 0x8a, 0x28, 0x13, 0x3f, 0x04, 0x43, 0x48, 0x0d, 0x38, 0x48, 0x1d, 0x20, 0xab, 0x28, - 0x2d, 0x43, 0x48, 0x2f, 0x42, 0x20, 0x11, 0x4f, 0x04, 0xc8, 0x1b, 0x07, 0x14, 0xff, 0x80, 0x10, 0x0e, 0xd0, 0x7f, 0x0b, 0x09, 0x09, 0x41, 0x3d, - 0x38, 0x0b, 0x04, 0x0b, 0x09, 0x0a, 0x2f, 0x09, 0x28, 0x20, 0x0b, 0xdb, 0x00, 0x24, 0x83, 0x4c, 0x00, 0x00, 0x14, 0x64, 0xc1, 0x14, 0x30, 0xa7, - 0x30, 0x30, 0x03, 0xf3, 0x06, 0x68, 0x17, 0x43, 0x00, 0x56, 0x68, 0x2e, 0xb1, 0x63, 0x20, 0x05, 0x6e, 0x4b, 0x37, 0x05, 0xff, 0xb2, 0x54, 0xb6, - 0x40, 0x7b, 0xe9, 0x2f, 0xad, 0x50, 0x07, 0x6e, 0x05, 0xe8, 0x1b, 0x00, 0x18, 0x17, 0x54, 0xdf, 0x2f, 0xa3, 0x31, 0x0f, 0x65, 0x29, 0x29, 0x70, - 0x09, 0x50, 0x95, 0x04, 0x38, 0x21, 0x00, 0x58, 0x17, 0x7f, 0x43, 0x41, 0x93, 0x38, 0x93, 0x04, 0xf1, 0x91, 0x00, 0x98, 0x17, 0x92, 0x19, 0x50, - 0xff, 0x04, 0x58, 0x97, 0x0c, 0x66, 0x8f, 0xe3, 0x81, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xb4, 0xcc, 0x37, 0xb8, 0xcc, 0x06, 0x98, 0x15, 0x32, 0xff, - 0x73, 0x2a, 0x83, 0x52, 0x6b, 0x30, 0x07, 0xfa, 0x32, 0xff, 0x05, 0xb8, 0x1b, 0x93, 0xff, 0x53, 0x7b, 0x05, 0xf8, 0x19, 0x27, 0x28, 0x17, 0x47, - 0xb5, 0x28, 0x1b, 0x3d, 0x28, 0x1d, 0x38, 0x13, 0x4f, 0x28, 0x15, 0x40, 0x00, 0x28, 0x2b, 0xc0, 0x0c, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, - 0x0a, 0x47, 0x4f, 0x35, 0x3a, 0x00, 0x0c, 0x0c, 0x4c, 0x0f, 0x4f, 0x0a, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0xcd, 0x1e, 0x7c, 0x20, 0x00, 0x00, 0x41, - 0x15, 0x48, 0x17, 0xea, 0x30, 0xe3, 0x30, 0xd3, 0x28, 0x19, 0x02, 0xb9, 0x30, 0xaf, 0x30, 0xde, 0x5d, 0x06, 0x38, 0x17, 0x6c, 0xab, 0x4b, 0x31, - 0x62, 0x2f, 0xb5, 0x6e, 0x27, 0x15, 0x6b, 0x06, 0x08, 0x17, 0x30, 0x81, 0xd5, 0x3f, 0x17, 0x06, 0x10, 0x81, 0x4f, 0x4f, 0xa7, 0x61, 0x28, 0x0b, - 0x74, 0xc8, 0x13, 0x75, 0x6c, 0x4d, 0xc1, 0x05, 0x11, 0x11, 0x3f, 0xaf, 0x67, 0x2f, 0xa9, 0x6f, 0x29, 0x97, 0xa1, 0x3f, 0xa5, 0x64, 0x2f, 0xb5, - 0x20, 0x00, 0x0c, 0x01, 0x05, 0x70, 0x81, 0xba, 0x70, 0x7f, 0xf3, 0x2a, 0x17, 0xd8, 0x11, 0x3e, 0x2b, 0xe1, 0x05, 0x02, 0x13, 0x66, 0x00, 0x8f, - 0xcc, 0x91, 0xc5, 0x96, 0xbe, 0x5b, 0xaf, 0x18, 0x65, 0x4b, 0x51, 0x05, 0xf2, 0xfb, 0x3f, 0xff, 0xbc, 0xcc, 0xb4, 0x00, 0xb7, 0x48, 0xbe, 0xa4, - 0xc2, 0x6c, 0xd0, 0x20, 0x1f, 0x00, 0xfc, 0xc8, 0x06, 0x98, 0x17, 0x05, 0x72, 0x6f, 0x01, 0x53, 0xff, 0x78, 0x1b, 0x32, 0x99, 0x75, 0xe3, 0x22, - 0x9b, 0x04, 0x78, 0x15, 0x58, 0x17, 0x3b, 0x28, 0x0d, 0x31, 0x27, 0xff, 0xa8, 0xb8, 0x1b, 0x3e, 0x48, 0x13, 0x30, 0x28, 0x2d, 0x42, 0x04, 0x4c, - 0xe0, 0x04, 0x88, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x0b, 0x46, 0x2d, 0x0c, 0x00, 0x0c, 0x0d, 0x0d, 0x4b, 0x10, 0x4e, 0x0b, - 0x0d, 0x00, 0x0d, 0x0d, 0x0d, 0x3a, 0x27, 0xa9, 0x2b, 0x00, 0x28, 0x00, 0x16, 0x28, 0x17, 0xe5, 0x28, 0x0d, 0xc1, 0x30, 0xea, 0x01, 0x81, 0xbb, - 0x6c, 0xa1, 0x7b, 0x3a, 0x53, 0x06, 0x3a, 0xaf, 0x5d, 0x75, 0x2f, 0x27, 0x6f, 0x2f, 0xb1, 0x06, 0x5d, 0x2f, 0x3f, 0x9b, 0x6f, 0x80, 0x83, 0x54, - 0x6b, 0x05, 0xeb, 0xb3, 0x41, 0x2f, 0xab, 0x74, 0x47, 0x95, 0x6f, 0x00, 0x55, 0x6d, 0x2f, 0xbb, 0x72, 0x2f, 0xad, 0x4b, 0x4d, 0x2f, 0x69, 0x2d, - 0xc9, 0xfe, 0x5f, 0x3b, 0x30, 0x13, 0x78, 0x31, 0x31, 0x2b, 0x3d, 0xdb, 0x7f, 0x47, 0x03, 0x1d, 0xaf, 0x69, 0xaa, 0x2d, 0x9d, 0x63, 0x48, 0x17, - 0x64, 0x2f, 0xad, 0x72, 0x48, 0x23, 0x20, 0xf5, 0xe0, 0x97, 0x30, 0x11, 0x78, 0x31, 0x03, 0xd1, 0x29, 0x44, 0x40, 0xe7, 0x74, 0x40, 0x77, 0xbf, - 0x31, 0x07, 0x20, 0x2e, 0x31, 0x31, 0x11, 0x38, 0x27, 0x90, 0x79, 0x78, 0x2d, 0x04, 0x11, 0xa5, 0x03, 0x5a, 0x69, 0xd1, 0x79, 0x47, 0x59, 0x32, - 0xfd, 0x06, 0x12, 0xfb, 0x80, 0x3f, 0xff, 0x95, 0xcd, 0x58, 0xce, 0x20, 0x00, 0x90, 0x06, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x06, 0x52, 0xff, 0x38, - 0x17, 0x6f, 0xff, 0x2f, 0xb3, 0x06, 0x52, 0xff, 0xf1, 0xd5, 0x38, 0x11, 0x3a, 0x9b, 0xb2, 0x13, 0x04, 0x98, 0x15, 0x38, 0x17, 0x58, 0x43, 0x28, - 0x0b, 0x3e, 0x27, 0xfd, 0x38, 0x13, 0x38, 0x04, 0x39, 0x8a, 0x28, 0x13, 0x30, 0x04, 0x32, 0x28, 0x0d, 0x3e, 0x28, 0x27, 0x3e, 0x2a, 0x04, 0x3c, - 0x28, 0x2d, 0x4b, 0x40, 0x15, 0x3e, 0x28, 0x33, 0x40, 0xb8, 0x20, 0x2d, 0x33, 0x03, 0xc8, 0x25, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0e, - 0x0c, 0x48, 0x00, 0x04, 0x02, 0x02, 0x0e, 0x0e, 0x4d, 0x11, 0x51, 0x00, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x08, 0x2e, 0x3b, 0x08, 0x7e, 0x00, 0x00, - 0x17, 0x48, 0x17, 0xf4, 0x30, 0xa1, 0x00, 0x30, 0xb7, 0x30, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x57, 0x56, 0x06, 0x58, 0x17, 0x76, 0x4f, 0x31, 0x68, - 0x06, 0xc8, 0x17, 0x30, 0x83, 0x3f, 0xab, 0x75, 0x69, 0x2f, 0xad, 0x05, 0x9e, 0x37, 0x3f, 0xaf, 0x70, 0x29, 0x19, 0x62, 0x4f, 0x1f, 0xdf, 0x3d, - 0x29, 0x98, 0x01, 0x77, 0x41, 0x15, 0x70, 0x93, 0x03, 0x18, 0x03, 0x00, 0xd0, 0x7f, 0x50, 0x81, 0x77, 0x63, 0x45, 0x9b, 0x38, 0x2d, 0x71, 0x95, - 0x63, 0x2f, 0xcd, 0x04, 0x99, 0x2b, 0x50, 0xff, 0x78, 0xfa, 0xc0, 0x7d, 0xb8, 0x07, 0x52, 0x19, 0x04, 0x90, 0x81, 0x5a, 0x69, 0xe6, 0x18, 0x74, - 0xc0, 0x4e, 0x06, 0x52, 0xfb, 0x3f, 0xff, 0x94, 0xcd, 0x14, 0x00, 0xbc, 0xdc, 0xc2, 0x20, 0x00, 0xf5, 0xac, 0x54, 0x3a, 0xd6, 0x6d, 0x06, 0x28, - 0x19, 0x98, 0x17, 0x53, 0x83, 0x6a, 0x2f, 0xb3, 0xeb, 0xbf, 0x06, 0x23, 0xff, 0xe1, 0x63, 0x7b, 0x58, 0x19, 0x3b, 0x17, 0xd2, 0x15, 0x04, 0x78, - 0x1b, 0x38, 0x17, 0x04, 0x32, 0x04, 0x30, 0x04, 0x48, 0x48, 0x17, 0x30, 0x04, 0x45, 0x4f, 0x28, 0x17, 0x40, 0x04, 0x35, 0x28, 0x25, 0x3f, 0x28, - 0x31, 0x1e, 0x31, 0x04, 0x3b, 0x28, 0x2b, 0x30, 0x17, 0x0c, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0f, 0x00, 0x0d, 0x49, 0x50, 0x36, 0x3b, 0x0f, - 0x0f, 0x4e, 0x00, 0x12, 0x50, 0x0d, 0x0f, 0x0f, 0x0f, 0x0f, 0xea, 0x00, 0x27, 0x96, 0x21, 0x00, 0x00, 0x18, 0x64, 0xc0, 0x00, 0x30, 0xb2, 0x30, - 0xb9, 0x30, 0xbf, 0x30, 0xf3, 0xad, 0x06, 0x68, 0x17, 0x44, 0x2f, 0x9f, 0x67, 0x2f, 0x27, 0x3e, 0x33, 0x61, 0x04, 0x66, 0xfb, 0xbe, 0x01, 0x10, - 0x7f, 0x75, 0x06, 0x80, 0x81, 0x00, 0x18, 0x17, 0x05, 0xd1, 0x11, 0x00, 0x58, 0x17, 0x3f, 0xa1, 0x6c, 0xe8, 0x05, 0x40, 0x8b, 0x00, 0x98, 0x17, - 0xd1, 0x99, 0xe1, 0x04, 0x69, 0x17, 0xbe, 0x8f, 0x09, 0x04, 0x54, 0xaf, 0x65, 0x66, 0x57, 0x06, 0x78, 0x19, 0xe4, 0xb2, 0x03, 0x8c, 0xac, 0xa4, - 0xc2, 0xc4, 0xd0, 0x06, 0x78, 0x19, 0x07, 0xd3, 0x7f, 0x68, 0xe3, 0x2f, 0x37, 0x05, 0xd8, 0x17, 0x20, 0x00, 0x28, 0x03, 0x20, 0x00, 0x14, 0xab, - 0x28, 0x29, 0x33, 0x48, 0x1d, 0x42, 0x28, 0x33, 0x3d, 0x04, 0x88, 0x15, 0x07, 0x74, 0xff, 0x80, 0x10, 0x0e, 0x90, 0x7f, 0x10, 0x0e, 0x0c, 0x43, - 0x38, 0x3c, 0x10, 0x00, 0x10, 0x0e, 0x13, 0x30, 0x0e, 0x10, 0x10, 0x10, 0x08, 0x10, 0x8d, 0x1e, 0xc7, 0x28, 0x17, 0x19, 0x64, 0xa4, 0x82, 0x28, - 0x11, 0xb0, 0x30, 0xfc, 0x30, 0xb7, 0x06, 0x68, 0x17, 0x49, 0xee, 0x2f, 0x07, 0x37, 0x97, 0x3b, 0x2d, 0x65, 0x28, 0x1b, 0x04, 0xbe, 0x9b, 0x00, - 0x90, 0x7f, 0x6f, 0xfd, 0x2f, 0xb1, 0x7f, 0x97, 0x06, 0xf8, 0x17, 0x91, 0x11, 0x3d, 0x41, 0x51, 0x13, 0x65, 0x04, 0x89, 0x31, 0xa3, 0x00, 0x78, - 0x17, 0x69, 0xe0, 0x89, 0x65, 0x00, 0x7a, 0x04, 0x4f, 0xb5, 0x00, 0x98, 0x17, 0xc0, 0x92, 0x19, 0x04, 0xb2, 0x17, 0x70, 0x53, 0xe4, 0x53, 0xc0, - 0x4e, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x78, 0xc7, 0x6c, 0xad, 0xdc, 0x75, 0xc2, 0x06, 0x78, 0x15, 0x92, 0xff, 0x3b, 0x99, 0x6a, 0x63, 0x81, - 0xeb, 0x06, 0x03, 0xff, 0x7a, 0xfa, 0x63, 0x7d, 0x3a, 0x93, 0x05, 0xb8, 0x15, 0x00, 0x78, 0x17, 0x18, 0x28, 0x0b, 0x33, 0xab, 0x28, 0x2b, 0x48, - 0x28, 0x35, 0x42, 0x28, 0x2d, 0x4f, 0x04, 0x88, 0x19, 0x07, 0x54, 0xff, 0x80, 0x10, 0x0e, 0x90, 0x7f, 0x11, 0x10, 0x0f, 0x44, 0x41, 0x3d, 0x11, - 0x00, 0x11, 0x0f, 0x15, 0x31, 0x10, 0x11, 0x11, 0x11, 0x00, 0x11, 0xb2, 0x1e, 0xde, 0x1f, 0x00, 0x00, 0x1a, 0x8a, 0x28, 0x17, 0xeb, 0x30, 0xaf, - 0x28, 0x17, 0xc4, 0x20, 0x05, 0xde, 0x55, 0x5d, 0x06, 0x34, 0x97, 0x72, 0x2f, 0x25, 0x75, 0x2f, 0xab, 0x73, 0x2f, 0x2d, 0xeb, 0x06, 0x70, 0x7f, - 0x38, 0x17, 0x06, 0x50, 0x81, 0x4f, 0x4f, 0xa7, 0x61, 0x4f, 0x91, 0x38, 0x13, 0xd7, 0x05, 0xf1, 0x0d, 0x3f, 0xaf, 0x67, 0x2f, 0xa9, 0x6f, 0x2f, - 0x8f, 0x3f, 0xa5, 0x78, 0x11, 0xdc, 0x05, 0x71, 0x95, 0x70, 0x7f, 0xf3, 0x2e, 0xab, 0x98, 0x11, 0x05, 0x92, 0x13, 0x0a, 0x4f, 0x00, 0x14, 0x5c, - 0x93, 0x5e, 0x28, 0x83, 0x4b, 0x51, 0x80, 0x06, 0x32, 0xfd, 0x00, 0x00, 0x74, 0xc7, 0x74, 0xb9, 0xe0, 0x00, 0xcf, 0x20, 0xce, 0x6c, 0xd0, 0x20, - 0x00, 0xfc, 0x7e, 0xc8, 0x06, 0x92, 0xff, 0x3b, 0x93, 0x06, 0x33, 0x81, 0xd3, 0xff, 0x78, 0x15, 0x32, 0x91, 0xe3, 0xe2, 0x2b, 0xad, 0x04, 0x98, - 0x0f, 0x7f, 0xff, 0x18, 0x04, 0x40, 0x28, 0x0b, 0x43, 0xaa, 0x27, 0xfd, 0x41, 0x48, 0x13, 0x4f, 0x28, 0x15, 0x3e, 0x48, 0x23, 0x30, 0x8e, 0x28, - 0x2f, 0x42, 0x04, 0x4c, 0x04, 0x88, 0x11, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x12, 0x00, 0x11, 0x10, 0x0c, 0x0d, 0x0d, 0x12, 0x12, 0x10, - 0x00, 0x16, 0x0e, 0x11, 0x12, 0x12, 0x12, 0x12, 0x2d, 0x02, 0x25, 0x2b, 0x4a, 0x00, 0x00, 0x1b, 0x28, 0x17, 0xf4, 0x0a, 0x30, 0xa1, 0x30, 0xce, - 0x20, 0x05, 0xa9, 0x06, 0x68, 0x17, 0x76, 0xae, 0x2e, 0xa1, 0x6e, 0x2f, 0xb1, 0x76, 0x2f, 0xb5, 0x0e, 0x10, 0x7f, 0xf8, 0x17, 0x77, 0xbc, 0x61, - 0x0d, 0x77, 0x05, 0x61, 0x0d, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0x00, 0x58, 0x17, 0x76, 0x00, 0x40, 0xe1, 0x05, 0x62, 0x13, 0x0a, 0x4f, 0x07, - 0x4e, 0xfa, 0x8b, 0x30, 0x83, 0x6c, 0x06, 0x58, 0x15, 0x38, 0x17, 0x14, 0xbc, 0x78, 0xb1, 0x3a, 0xf4, 0xbc, 0x06, 0x58, 0x15, 0x07, 0xf3, 0x7f, - 0x06, 0x38, 0x17, 0x32, 0x28, 0x0d, 0x3d, 0x3c, 0x04, 0x3e, 0x20, 0x07, 0x06, 0x38, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x13, 0x12, - 0x00, 0x11, 0x0d, 0x0e, 0x0e, 0x13, 0x13, 0x11, 0x17, 0x00, 0x0d, 0x12, 0x13, 0x13, 0x13, 0x13, 0x87, 0x28, 0x00, 0x24, 0x1d, 0x00, 0x00, 0x1c, - 0x64, 0xab, 0x30, 0x01, 0xd0, 0x30, 0xeb, 0x30, 0xc0, 0x30, 0xfb, 0x40, 0x07, 0x40, 0xab, 0x20, 0x0b, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x56, 0xaa, - 0x05, 0x7f, 0xba, 0x4b, 0x2f, 0x2b, 0x62, 0x2f, 0x2f, 0x72, 0x4e, 0xa9, 0x6e, 0x0b, 0x00, 0x2d, 0x00, 0x42, 0x2f, 0x3d, 0x6c, 0x2f, 0xc3, 0x30, - 0x13, 0xad, 0x06, 0x10, 0x7f, 0x6f, 0xe0, 0x81, 0x69, 0x2f, 0x4f, 0x04, 0xff, 0xaf, 0x70, 0x2f, 0x99, 0xb6, 0x38, 0x1d, 0x69, 0x4d, 0x31, 0x01, - 0x30, 0x91, 0x6e, 0x04, 0x20, 0x7f, 0x50, 0x81, 0x63, 0xdd, 0x29, 0xa5, 0x78, 0x1d, 0x43, 0x00, 0x81, 0x1b, 0x30, 0x25, 0x31, 0x1b, 0x61, 0x03, - 0x60, 0xff, 0x78, 0xfa, 0xe0, 0x7d, 0x38, 0xa1, 0x01, 0x11, 0x99, 0x03, 0x10, 0x7d, 0x00, 0x00, 0x61, 0x00, 0x53, 0xf4, 0x5d, 0x14, 0x5c, 0xbe, - 0x8f, 0x2d, 0x42, 0x00, 0x30, 0x07, 0x61, 0x53, 0x14, 0x5c, 0x05, 0xd2, 0xff, 0x74, 0x00, 0xce, 0x14, 0xbc, 0x74, 0xb9, 0x14, 0xb5, 0x78, 0x00, - 0xb1, 0x1c, 0xbc, 0x74, 0xce, 0x74, 0xb9, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x53, 0x7f, 0x5a, 0xeb, 0x00, 0x02, 0xfd, - 0xeb, 0x04, 0xef, 0xb1, 0x52, 0x63, 0xe1, 0x63, 0xff, 0x61, 0xfd, 0xa2, 0x61, 0x30, 0x13, 0x32, 0x61, 0x78, 0x2b, 0xd2, 0x25, 0x03, 0x78, 0x31, - 0x1a, 0x28, 0x15, 0x41, 0x31, 0x28, 0x19, 0x40, 0x04, 0x34, 0x04, 0x38, 0x48, 0x1f, 0x15, 0x2d, 0x00, 0x11, 0x28, 0x29, 0x3b, 0x48, 0x23, 0x40, - 0xa8, 0x2b, 0x11, 0x40, 0x04, 0x35, 0x28, 0x39, 0x3f, 0x04, 0x43, 0x48, 0x33, 0x70, 0x38, 0x48, 0x43, 0x0c, 0x14, 0xff, 0x10, 0x0d, 0xf0, 0x7f, - 0x14, 0x13, 0x12, 0x45, 0x00, 0x3e, 0x3f, 0x14, 0x14, 0x16, 0x0b, 0x0f, 0x13, 0x00, 0x14, 0x14, 0x14, 0x14, 0xeb, 0x1e, 0x04, 0x1f, 0x10, 0x00, - 0x00, 0x1d, 0x28, 0x17, 0xea, 0x30, 0xfc, 0x30, 0x01, 0xcb, 0x30, 0xf3, 0x30, 0xb0, 0x30, 0xe9, 0x20, 0x09, 0x3a, 0xc9, 0x30, 0x05, 0xdd, 0x39, - 0x38, 0x17, 0x37, 0x11, 0x6e, 0x48, 0x15, 0x67, 0xb4, 0x2c, 0x2d, 0x61, 0x2e, 0xb3, 0x0d, 0x90, 0x7f, 0x4f, 0x48, 0x11, 0x61, 0x00, 0x1d, 0x73, - 0x00, 0x74, 0x68, 0x13, 0x05, 0xd1, 0x0d, 0x7f, 0xaf, 0x6f, 0x2f, 0xaf, 0xf7, 0x3f, 0xab, 0x58, 0x11, 0x05, 0x91, 0x95, 0x70, 0x7f, 0xf3, 0x2e, - 0xb3, 0xb8, 0x11, 0x00, 0x12, 0x13, 0x80, 0x04, 0x5e, 0xcd, 0xa0, 0x52, 0xcc, 0x91, 0x81, 0x5b, 0x3c, 0x18, 0x68, 0xd2, 0x52, 0x05, 0xd2, 0xf7, - 0x7f, 0xff, 0x7c, 0xce, 0xac, 0x00, 0xb9, 0xcc, 0xb2, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0x06, 0xb4, 0x20, 0x00, 0xfc, 0xc8, 0x05, 0xff, 0xb2, 0x08, - 0x53, 0x7f, 0x6f, 0xde, 0x88, 0x0d, 0x32, 0x9b, 0xe3, 0x2f, 0x4d, 0x03, 0x78, 0x07, 0x00, 0x38, 0x17, 0x37, 0xe5, 0x3d, 0xad, 0x48, 0x15, 0x33, - 0x28, 0x1f, 0x30, 0x28, 0x21, 0x98, 0x0d, 0x3e, 0x48, 0x05, 0x47, 0x30, 0x28, 0x1f, 0x42, 0x04, 0x4c, 0x03, 0x28, 0x07, 0x0f, 0xf4, 0xff, 0x10, - 0x06, 0xf0, 0xff, 0x00, 0x15, 0x14, 0x13, 0x0f, 0x10, 0x0f, 0x15, 0x15, 0x00, 0x17, 0x18, 0x10, 0x14, 0x15, 0x15, 0x15, 0x15, 0x01, 0xe8, 0x26, - 0x96, 0x0e, 0x00, 0x00, 0x1e, 0x28, 0x17, 0x00, 0xeb, 0x30, 0xe0, 0x30, 0xa4, 0x30, 0xaf, 0x30, 0xc7, 0x05, 0xdd, 0x27, 0xd8, 0x17, 0x6d, 0x00, - 0x79, 0x2f, 0x9f, 0x06, 0x35, 0x97, 0x70, 0x7f, 0x5e, 0x6f, 0x2f, 0xb3, 0x6b, 0x4f, 0x8b, 0x05, 0xd6, 0x1d, 0x9f, 0xaf, 0x3f, 0xad, 0x6b, 0x8d, - 0x88, 0x1b, 0x6d, 0x00, 0xfc, 0x2f, 0xbb, 0x50, 0x91, 0x6e, 0x05, 0x40, 0x7f, 0xf4, 0xdf, 0xb1, 0x38, 0x1d, 0x3d, 0xcb, 0x31, 0x9b, 0x75, 0x2f, - 0xc7, 0x63, 0x00, 0x7f, 0x68, 0x03, 0x6f, 0xa1, 0x00, 0x30, 0xff, 0xbe, 0x09, 0xd8, 0x1d, 0x30, 0x7d, 0x31, 0x97, 0x04, 0x10, 0x79, 0x80, 0x5f, - 0xff, 0x61, 0x53, 0x14, 0x5c, 0x85, 0x68, 0x4b, 0x60, 0x51, 0x06, 0x52, 0xfd, 0x38, 0x17, 0xf8, 0xbb, 0x6c, 0xd0, 0x20, 0x01, 0x00, 0xf5, 0xac, - 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x92, 0xff, 0xd8, 0x32, 0xfd, 0x32, 0xff, 0xeb, 0x05, 0xe9, 0x1c, 0x72, 0x63, 0xfa, 0x00, 0x71, 0xf8, 0x23, 0x81, - 0x32, 0x61, 0x78, 0x11, 0xd2, 0x15, 0x04, 0x78, 0x17, 0x20, 0x04, 0x35, 0x8a, 0x28, 0x05, 0x3f, 0x04, 0x43, 0x47, 0xff, 0x38, 0x48, 0x0f, 0x20, - 0x8b, 0x68, 0x2d, 0x3c, 0x04, 0x4b, 0x28, 0x1f, 0x38, 0x28, 0x1f, 0x0d, 0x14, 0xff, 0x80, 0x10, 0x0e, 0x70, 0x7f, 0x16, 0x15, 0x14, 0x46, 0x3f, - 0x40, 0x16, 0x00, 0x16, 0x18, 0x0d, 0x32, 0x15, 0x16, 0x16, 0x16, 0x00, 0x16, 0xef, 0x20, 0x7a, 0x1f, 0x00, 0x00, 0x1f, 0x86, 0x48, 0x17, 0xfc, - 0x30, 0xac, 0x30, 0x06, 0x5d, 0x2d, 0x7f, 0xaf, 0x75, 0xfa, 0x2f, 0xa9, 0x04, 0x75, 0xf9, 0x01, 0x3d, 0x2f, 0x38, 0x15, 0x06, 0x50, 0x81, 0x4f, - 0x48, 0x11, 0x61, 0x0e, 0x00, 0x73, 0x00, 0x74, 0x8f, 0xa7, 0x05, 0xb1, 0x0d, 0x7f, 0xaf, 0x6f, 0xfb, 0x2f, 0xaf, 0x3f, 0xab, 0x58, 0x11, 0x05, - 0x91, 0x95, 0x70, 0x7f, 0xf3, 0x2e, 0xb1, 0xd8, 0x11, 0x81, 0x05, 0x52, 0x13, 0x61, 0x53, 0x62, 0x53, 0xa0, 0x52, 0x06, 0x72, 0xfd, 0x80, 0x38, - 0x17, 0xe8, 0xb8, 0x00, 0xac, 0x20, 0x00, 0xfc, 0x5f, 0xc8, 0x06, 0xb3, 0x7f, 0x6f, 0x4f, 0x99, 0x06, 0x33, 0x81, 0xb3, 0xff, 0x78, 0x11, 0x32, - 0x8f, 0x78, 0xe3, 0x2b, 0xa9, 0x04, 0x78, 0x0b, 0xbf, 0xf5, 0x58, 0x01, 0x43, 0x04, 0x36, 0xd5, 0x28, 0x1d, 0x38, 0x13, 0x4f, 0x28, 0x15, 0x3e, - 0x48, 0x23, 0x30, 0x28, 0x2f, 0x1c, 0x42, 0x04, 0x4c, 0x04, 0xa8, 0x13, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x17, 0x16, 0x00, 0x15, 0x10, - 0x11, 0x10, 0x17, 0x17, 0x19, 0x19, 0x00, 0x11, 0x16, 0x17, 0x17, 0x17, 0x17, 0xca, 0x26, 0x30, 0xcd, 0x19, 0x2b, 0x2d, 0x28, 0x17, 0xe0, 0x30, - 0xc1, 0x30, 0x00, 0xe3, 0x30, 0xc4, 0x30, 0xab, 0x30, 0x30, 0x57, 0x6a, 0xb9, 0x05, 0xff, 0x2e, 0x4f, 0xaf, 0x6d, 0x4e, 0x8d, 0x61, 0x27, 0x19, - 0x6b, 0xde, 0x06, 0x08, 0x1d, 0x50, 0x7f, 0x74, 0x06, 0x80, 0x81, 0xb7, 0x97, 0x5f, 0x23, 0x30, 0x8d, 0x73, 0xaa, 0x05, 0x81, 0x11, 0x54, 0x2f, - 0xaf, 0x72, 0x2d, 0x9f, 0x69, 0x28, 0x97, 0x6f, 0xac, 0x40, 0x07, 0x6f, 0x6f, 0xb1, 0x6c, 0x48, 0xaf, 0x70, 0x93, 0x0d, 0x01, 0xf0, 0x04, 0x51, - 0x9f, 0x00, 0x90, 0x7f, 0x71, 0x0d, 0x04, 0xd2, 0x1b, 0xd8, 0x52, 0xdf, 0x5b, 0x00, 0xa0, 0x52, 0xb9, 0x8f, 0x86, 0x75, 0x3a, 0x53, 0x80, 0x06, - 0x3d, 0xb0, 0x84, 0xce, 0x28, 0xcc, 0x74, 0xce, 0x20, 0x06, 0x00, 0xc0, 0xc9, 0x29, 0xbc, 0x06, 0x7e, 0x2f, 0x52, 0x71, 0x6a, 0xeb, 0x06, 0x43, - 0x81, 0x00, 0x13, 0xff, 0x38, 0x1d, 0x74, 0xa2, 0x95, 0xf3, 0x62, 0x95, 0x04, 0x58, 0x25, 0x8a, 0x38, 0x17, 0x3c, 0x04, 0x47, 0x28, 0x1d, 0x42, - 0x48, 0x19, 0x38, 0x22, 0x04, 0x39, 0x28, 0x19, 0x3a, 0x04, 0x40, 0x28, 0x2f, 0x39, 0xe0, 0x04, 0xe8, 0x13, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x90, - 0x7f, 0x18, 0x17, 0x16, 0x37, 0x4d, 0x00, 0x4d, 0x18, 0x18, 0x1a, 0x1a, 0x12, 0x17, 0x18, 0x00, 0x18, 0x18, 0x18, 0xb3, 0x25, 0xd1, 0x70, 0x00, - 0x28, 0x00, 0x21, 0x28, 0x17, 0xe9, 0x48, 0x17, 0xa4, 0x30, 0xfb, 0x80, 0x28, 0x1f, 0xa7, 0x30, 0xeb, 0x30, 0xb1, 0x30, 0xb9, 0x01, 0x30, 0x71, - 0x51, 0x8c, 0x54, 0xfd, 0x56, 0x05, 0x7f, 0xaf, 0x60, 0x72, 0x2f, 0xb3, 0x58, 0x19, 0x79, 0x00, 0x2d, 0x00, 0x43, 0xd7, 0x28, 0x23, 0x36, 0xab, - 0x6b, 0x2e, 0xc9, 0x73, 0x2f, 0x47, 0x05, 0x50, 0x7f, 0x78, 0x19, 0x05, 0xef, 0x00, 0xe9, 0x00, 0x76, 0x2f, 0x3d, 0x2d, 0x27, 0x31, 0xda, 0x38, - 0xad, 0xb0, 0x89, 0x69, 0x2f, 0x5b, 0x04, 0x3f, 0xaf, 0x70, 0x2f, 0x99, 0x62, 0xbd, 0x2f, 0x9f, 0x69, 0x29, 0x17, 0x5f, 0xab, 0x50, 0x91, 0x78, - 0x1d, 0x69, 0x40, 0x8d, 0xdb, 0x58, 0x2b, 0xf0, 0x8f, 0x6e, 0x03, 0x80, 0x7f, 0x50, 0x81, 0x63, 0x88, 0x0b, 0x31, 0x95, 0xb3, 0x38, 0x0d, 0x6a, - 0x2f, 0xd1, 0x51, 0x11, 0x0c, 0x01, 0xd1, 0x0d, 0x03, 0x3f, 0xcd, 0xbb, 0x50, 0xff, 0xfa, 0xc0, 0x7d, 0x98, 0x15, 0x72, 0x19, 0xe1, 0x22, 0x19, - 0x70, 0x85, 0xc0, 0xd2, 0x1f, 0x02, 0xf0, 0x85, 0x61, 0x53, 0xc9, 0x62, 0x70, 0x60, 0x00, 0x36, 0x80, 0x2b, 0x59, 0x2d, 0x00, 0x07, 0x52, 0x02, - 0x14, 0x5c, 0x4b, 0x51, 0xaf, 0x65, 0x05, 0x92, 0xfd, 0x00, 0x00, 0x00, 0x74, 0xce, 0x7c, 0xb7, 0x28, 0xcc, 0x08, 0x00, 0xc6, 0xf4, 0xbc, 0xb4, - 0xcc, 0x74, 0xb9, 0x00, 0x10, 0xcf, 0xa4, 0xc2, 0x20, 0x11, 0xc5, 0x20, 0x00, 0xf5, 0x06, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x05, 0x93, 0x7f, 0x78, - 0x19, 0x6a, 0xed, 0x62, 0x6b, 0x31, 0xf5, 0xb2, 0xf9, 0xeb, 0x06, 0x83, 0xff, 0x38, 0x27, 0x72, 0x00, 0x02, 0x25, 0xf0, 0x03, 0x78, 0x25, 0x38, - 0x17, 0x38, 0x03, 0x38, 0x19, 0x35, 0x04, 0x32, 0x04, 0x05, 0x3e, 0x04, 0x2d, 0x00, 0x27, 0x20, 0x09, 0x40, 0x28, 0x23, 0x62, 0x35, 0x28, 0x29, - 0x38, 0x2b, 0x30, 0x04, 0x4f, 0x28, 0x2b, 0x40, 0x80, 0x40, 0x0f, 0x3f, 0x04, 0x43, 0x04, 0x31, 0x04, 0x3b, 0xf0, 0x28, 0x3f, 0x30, 0x17, 0x0b, - 0x94, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x19, 0x18, 0x17, 0x47, 0x00, 0x48, 0x41, 0x19, 0x19, 0x1b, 0x1b, 0x13, 0x18, 0x00, 0x19, 0x19, 0x19, 0x19, - 0x71, 0x1f, 0xe6, 0x1d, 0x10, 0x00, 0x00, 0x22, 0x28, 0x17, 0xec, 0x30, 0xea, 0x30, 0x7d, 0xa2, 0x05, 0xa8, 0x09, 0x00, 0x38, 0x17, 0x3e, 0x9d, - 0x03, 0x56, 0x67, 0x01, 0xff, 0xec, 0x43, 0x48, 0x97, 0x7e, 0xe9, 0x47, 0x95, 0x04, 0x17, 0xf5, 0x02, 0x98, 0x17, 0x51, 0x11, 0x03, 0x17, 0xf7, - 0x02, 0x58, 0x17, 0x64, 0xbe, 0x2f, 0xbf, 0x20, 0x61, 0x1b, 0x04, 0xd1, 0x9b, 0x00, 0x98, 0x17, 0x05, 0x30, 0x7d, 0x38, 0x17, 0x2f, 0x04, 0x7d, - 0x29, 0x52, 0x3f, 0x96, 0x06, 0x72, 0xff, 0x74, 0xce, 0x0f, 0x10, 0xb8, 0xac, 0xb9, 0x05, 0xb8, 0x09, 0x00, 0x93, 0x7f, 0x04, 0x77, 0xfb, 0x01, - 0x73, 0x7f, 0xea, 0x3a, 0x91, 0x04, 0xb8, 0x03, 0x00, 0x3f, 0xfd, 0x20, 0x00, 0x27, 0xed, 0x20, 0x68, 0x2d, 0x35, 0xb8, 0x47, 0xff, 0x4f, 0x03, - 0x27, 0xfd, 0x08, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x19, 0x0b, 0x00, 0x48, 0x40, 0x39, 0x1a, 0x1a, 0x1c, 0x0e, 0x33, 0x00, 0x19, 0x1a, - 0x1a, 0x1a, 0x1a, 0xef, 0x2b, 0x6a, 0x00, 0x18, 0x00, 0x00, 0x23, 0x64, 0xb1, 0x30, 0xe1, 0x00, 0x30, 0xed, 0x30, 0xf4, 0x30, 0xa9, 0x30, 0xde, - 0x62, 0x5d, 0x06, 0x27, 0x96, 0x2f, 0xaf, 0x65, 0x00, 0x6d, 0x4f, 0x95, 0x6f, 0xd5, 0x4f, 0xa7, 0x0d, 0xf0, 0x7f, 0x4f, 0x4f, 0xa7, 0x61, 0x2f, - 0xff, 0x74, 0x4f, 0xa7, 0xb5, 0x91, 0x0d, 0x77, 0x05, 0x41, 0x0d, 0x3f, 0xaf, 0x67, 0x2f, 0xfb, 0x6f, 0x28, 0x81, 0xf6, 0x3f, 0xa5, 0x58, 0x11, - 0x05, 0x91, 0x95, 0x70, 0x7f, 0xf3, 0x29, 0x01, 0x78, 0x11, 0x4b, 0xc0, 0x29, 0xa7, 0x05, 0x72, 0x13, 0x4b, 0x51, 0xa6, 0x9e, 0x57, 0x7f, 0x30, - 0x83, 0x6c, 0x06, 0x52, 0xfd, 0x2f, 0xff, 0xcf, 0x54, 0xba, 0x5c, 0x01, 0xb8, 0xf4, 0xbc, 0x20, 0x00, 0xfc, 0xc8, 0x0f, 0x33, 0x7f, 0xde, 0x78, - 0x19, 0x32, 0x93, 0xe3, 0x24, 0x13, 0x04, 0xb8, 0x13, 0x45, 0x17, 0x28, 0x17, 0x3c, 0x83, 0x28, 0x1b, 0x40, 0x04, 0x3e, 0x04, 0x32, 0x28, 0x21, - 0x38, 0x17, 0x54, 0x4f, 0x28, 0x19, 0x3e, 0x48, 0x27, 0x30, 0x28, 0x33, 0x42, 0x04, 0x70, 0x4c, 0x04, 0xa8, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, - 0xf0, 0xff, 0x1b, 0x1a, 0x18, 0x11, 0x00, 0x12, 0x11, 0x1b, 0x1b, 0x1d, 0x1c, 0x14, 0x1a, 0x00, 0x1b, 0x1b, 0x1b, 0x1b, 0x5e, 0x27, 0x38, 0x3d, - 0x01, 0x00, 0x00, 0x24, 0x64, 0xcf, 0x30, 0xd0, 0x28, 0x17, 0x00, 0xd5, 0x30, 0xb9, 0x30, 0xaf, 0x30, 0x30, 0x57, 0x45, 0xb9, 0x06, 0x0f, 0x32, - 0x4b, 0x00, 0x68, 0x2f, 0xb1, 0x62, 0x4f, 0xb5, 0xbe, 0x38, 0x19, 0x73, 0x2f, 0x33, 0x0d, 0xb0, 0x7f, 0xb7, 0x97, 0x3f, 0xa1, 0xb1, 0x0d, 0x77, - 0xab, 0x05, 0x21, 0x0d, 0x54, 0x49, 0x93, 0x72, 0x2f, 0xab, 0x74, 0x29, 0x99, 0x30, 0x07, 0xfd, 0x35, 0x9b, 0x58, 0x1d, 0xd0, 0x8d, 0x04, 0x51, - 0x9b, 0x00, 0x70, 0x7f, 0x38, 0xa3, 0x4a, 0x42, 0x19, 0x40, 0xe1, 0x04, 0xc2, 0x19, 0xc8, 0x54, 0xf4, 0x5d, 0x57, 0x7f, 0x00, 0x2b, 0x59, 0xaf, - 0x65, 0x4b, 0x51, 0xb9, 0x8f, 0x08, 0x86, 0x75, 0x3a, 0x53, 0x05, 0xdf, 0xb1, 0x58, 0xd5, 0x14, 0x00, 0xbc, 0x6d, 0xb8, 0xa4, 0xc2, 0x6c, 0xd0, - 0x20, 0x07, 0x00, 0xc0, 0xc9, 0x29, 0xbc, 0x06, 0x1f, 0xaf, 0x08, 0x13, 0x7f, 0x38, 0x1b, 0x5a, 0x74, 0xa2, 0x97, 0xf3, 0x62, 0x97, 0x04, 0x38, - 0x23, 0x25, 0x28, 0x07, 0x31, 0xc5, 0x28, 0x0b, 0x98, 0x17, 0x38, 0x04, 0x39, 0x28, 0x17, 0x3a, 0x28, 0x29, 0x70, 0x30, 0x20, 0x09, 0x10, 0x04, - 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x1c, 0x1b, 0x19, 0x36, 0x00, 0x4f, 0x4c, 0x1c, 0x1c, 0x0b, 0x1d, 0x4c, 0x1b, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, - 0x7a, 0x22, 0x0c, 0x60, 0xd0, 0x23, 0x15, 0x28, 0x17, 0xab, 0x28, 0x13, 0x71, 0x51, 0x8c, 0x54, 0x35, 0xfd, 0x56, 0x06, 0x5c, 0xaf, 0x38, 0x17, - 0x6b, 0x4f, 0x31, 0x73, 0x2e, 0xb7, 0x71, 0x61, 0x06, 0xe0, 0x7f, 0x05, 0xf9, 0x18, 0x3f, 0xaf, 0x70, 0x00, 0x75, 0x29, 0x19, 0x7b, 0x6c, 0x2f, - 0xb5, 0x35, 0x13, 0x58, 0x1b, 0xb0, 0x91, 0x6e, 0x05, 0x40, 0x7f, 0x50, 0x81, 0x7b, 0x63, 0x29, 0xa5, 0x78, 0x17, 0x05, 0x31, 0x9b, 0x50, 0xff, - 0xfa, 0xe0, 0x7d, 0x78, 0x15, 0xc0, 0x52, 0x17, 0x04, 0xb2, 0x15, 0xc8, 0x54, 0x61, 0x53, 0xaf, 0x65, 0x80, 0x06, 0x92, 0xff, 0x58, 0xd5, 0x74, - 0xce, 0xa4, 0xc2, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x13, 0x81, 0xab, 0xf2, 0x6d, 0xeb, 0x06, 0x08, 0x97, 0x61, 0x22, - 0x73, 0xe1, 0x83, 0xfd, 0x38, 0x13, 0x71, 0x72, 0x00, 0x02, 0x13, 0x04, 0x38, 0x11, 0x5f, 0xff, 0x20, 0x04, 0x35, 0x28, 0x0d, 0x15, 0x3f, 0x04, - 0x43, 0x28, 0x1d, 0x3b, 0x28, 0x13, 0x3a, 0x28, 0x27, 0x6b, 0x20, 0x48, 0x2d, 0x30, 0x09, 0x41, 0x28, 0x25, 0x4f, 0x04, 0xc8, 0x1b, 0x07, 0xf4, - 0xff, 0x80, 0x10, 0x0d, 0xf0, 0x7f, 0x1d, 0x1c, 0x1a, 0x42, 0x42, 0x3e, 0x1d, 0x00, 0x1d, 0x0c, 0x0c, 0x3b, 0x1c, 0x1d, 0x1d, 0x1d, 0x00, 0x1d, - 0x32, 0x26, 0x01, 0x41, 0x00, 0x00, 0x26, 0x80, 0x28, 0x17, 0xf3, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0xfb, 0x20, 0x30, 0xde, 0x20, 0x09, 0xb7, 0x30, - 0xea, 0x81, 0xbb, 0x1a, 0x6c, 0xa1, 0x7b, 0x05, 0x9d, 0x35, 0x5f, 0xaf, 0x6e, 0x2e, 0xad, 0x79, 0x0d, 0x00, 0x2d, 0x00, 0x4d, 0x40, 0x0b, 0x38, - 0x1f, 0x79, 0x06, 0x20, 0x7f, 0x56, 0x73, 0xc0, 0x81, 0x73, 0x05, 0x4e, 0x38, 0x41, 0x28, 0x13, 0x3f, 0xa9, 0x6e, 0xbf, 0x2f, 0xad, 0x6d, 0x4f, - 0xbb, 0x37, 0x8f, 0x35, 0x19, 0x30, 0x81, 0x5f, 0x39, 0x30, 0x13, 0xea, 0x5f, 0xbb, 0x31, 0x27, 0x38, 0x27, 0x20, 0x28, 0x49, 0x6e, 0x2f, 0xd5, - 0x20, 0xd6, 0x81, 0x31, 0x02, 0x78, 0x3d, 0x43, 0x2f, 0xa9, 0x72, 0x28, 0x0d, 0x30, 0x81, 0x64, 0xff, 0x4e, 0x35, 0x5f, 0xb1, 0xd0, 0x97, 0x5f, - 0xc3, 0x38, 0x2b, 0x90, 0x87, 0x39, 0xc3, 0xb1, 0xb1, 0xad, 0x02, 0x59, 0xd1, 0x44, 0x41, 0x69, 0x74, 0x6e, 0x19, 0x30, 0x79, 0x61, 0x41, 0x11, - 0x7c, 0xf3, 0xc0, 0x79, 0x78, 0x27, 0x50, 0x77, 0xb2, 0x27, 0x02, 0xff, 0xdd, 0x49, 0x6c, 0x00, 0x79, 0x72, 0x2d, 0x00, 0xfc, 0x66, 0x7f, 0x89, - 0xe0, 0x32, 0xf9, 0x05, 0x92, 0xf7, 0x7f, 0xff, 0x5c, 0xd5, 0xf0, 0xd2, 0xcc, 0x20, 0xb9, 0xdc, 0x28, 0x19, 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xde, - 0x06, 0x08, 0x19, 0x92, 0x57, 0x6f, 0xc3, 0x7f, 0x05, 0x78, 0x1f, 0x06, 0xf3, 0xff, 0x38, 0x01, 0x3d, 0x00, 0x04, 0x42, 0x04, 0x4b, 0x04, 0x2d, - 0x00, 0x1c, 0xd4, 0x40, 0x0b, 0x38, 0x0b, 0x39, 0x28, 0x2b, 0x3a, 0x40, 0x07, 0x20, 0x00, 0x14, 0x30, 0x04, 0x32, 0x20, 0x1f, 0x3e, 0x20, 0x25, - 0x3e, 0x04, 0x55, 0x3c, 0x20, 0x2b, 0x4b, 0x40, 0x15, 0x3e, 0x28, 0x41, 0x40, 0x28, 0x4d, 0x70, 0x33, 0x02, 0xe8, 0x35, 0x07, 0xb4, 0xff, 0x10, - 0x0e, 0x30, 0x7f, 0x1e, 0x1d, 0x1b, 0x01, 0x00, 0x01, 0x03, 0x1e, 0x1e, 0x0d, 0x1e, 0x4d, 0x1d, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x60, 0x2b, 0x11, - 0x31, 0x00, 0x00, 0x00, 0x27, 0x64, 0xad, 0x30, 0xfc, 0x30, 0x03, 0xed, 0x30, 0xd5, 0x30, 0xde, 0x5d, 0x06, 0x3d, 0x2d, 0x3f, 0xaf, 0x8d, 0x36, - 0x97, 0x6f, 0x00, 0x76, 0x06, 0x50, 0x7e, 0x07, 0x00, 0x7f, 0x4f, 0x4f, 0xa7, 0xb6, 0x3f, 0x91, 0x74, 0x4f, 0xa1, 0x51, 0x0d, 0x77, 0x05, 0x8e, - 0xba, 0x3f, 0xaf, 0x67, 0xbf, 0x48, 0x0b, 0x6e, 0x4f, 0xa5, 0x57, 0xfd, 0x05, 0x91, 0x95, 0x70, 0x7f, 0x38, 0x07, 0x78, 0x01, 0x10, 0x4b, 0x00, - 0xed, 0x05, 0x82, 0x13, 0xfa, 0x57, 0x1b, 0x6d, 0x20, 0x2b, 0x59, 0x06, 0x72, 0xfd, 0x00, 0x00, 0xa4, 0xd0, 0x5c, 0x01, 0xb8, 0x04, 0xd5, 0x20, - 0x00, 0xfc, 0xc8, 0x06, 0x73, 0x7f, 0xc6, 0x05, 0x91, 0x6b, 0x00, 0xd3, 0xff, 0x20, 0x00, 0x28, 0x4b, 0x0f, 0x32, 0x8d, 0xe3, 0xaa, 0x2b, 0x29, - 0x29, 0x05, 0x4f, 0x39, 0x1a, 0x28, 0x05, 0x40, 0x27, 0xf5, 0x32, 0x88, 0x48, 0x09, 0x30, 0x04, 0x4f, 0x47, 0xf3, 0x31, 0x04, 0x3b, 0xae, 0x28, - 0x2f, 0x41, 0x28, 0x2f, 0x4c, 0x02, 0xe7, 0xf7, 0x10, 0x00, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x1f, 0x00, 0x1e, 0x1c, 0x12, 0x13, 0x12, 0x1f, - 0x1f, 0x1e, 0x00, 0x1f, 0x15, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0xab, 0x00, 0x29, 0x4e, 0x23, 0x00, 0x00, 0x28, 0x64, 0xb3, 0x00, 0x30, 0xdf, 0x30, - 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x7b, 0x56, 0x06, 0x78, 0x17, 0x3f, 0x27, 0x03, 0x1d, 0xf7, 0x02, 0xf0, 0x7f, 0x73, 0x06, 0x68, 0x97, 0x37, 0x97, - 0x63, 0x70, 0x2f, 0xfd, 0x38, 0x1d, 0x69, 0x00, 0x6b, 0x48, 0x1b, 0x05, 0xb1, 0x11, 0xde, 0x90, 0x7f, 0x50, 0x81, 0x63, 0x2f, 0xff, 0x98, 0x1d, - 0x05, 0x11, 0x9b, 0x50, 0xff, 0xfa, 0xe1, 0xe0, 0x7d, 0x58, 0x1d, 0x05, 0x32, 0x19, 0xd1, 0x79, 0x73, 0x7c, 0x06, 0xb2, 0xff, 0x00, 0x54, 0xcf, - 0xf8, 0xbb, 0x20, 0x00, 0xf5, 0xac, 0x0f, 0x54, 0xd6, 0x6d, 0xad, 0x0e, 0xb3, 0x7f, 0x78, 0x15, 0xd2, 0x0b, 0x05, 0x18, 0x1b, 0x16, 0x20, 0x04, - 0x35, 0x28, 0x11, 0x3f, 0x2f, 0xf9, 0x38, 0x0b, 0x38, 0xa3, 0x48, 0x1b, 0x20, 0x28, 0x2d, 0x3e, 0x04, 0x3c, 0x28, 0x31, 0x0d, 0x94, 0xff, 0x80, - 0x10, 0x0e, 0x70, 0x7f, 0x20, 0x1f, 0x1d, 0x49, 0x43, 0x42, 0x20, 0x00, 0x20, 0x21, 0x20, 0x34, 0x1f, 0x20, 0x20, 0x20, 0x00, 0x20, 0xda, 0x2b, - 0x22, 0x24, 0x00, 0x00, 0x29, 0x80, 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x30, 0xed, 0x30, 0xde, 0x7b, 0x30, 0x06, 0x5d, 0x33, 0x38, 0x17, 0x3f, 0x2b, - 0x3f, 0xb3, 0x6d, 0x2f, 0x37, 0x0d, 0xf0, 0x7f, 0x5e, 0x4f, 0x48, 0x11, 0x61, 0x41, 0x03, 0x58, 0x13, 0x05, 0xd1, 0x0d, 0x7f, 0xaf, 0x6f, 0xfb, - 0x2f, 0xaf, 0x3f, 0xab, 0x98, 0x11, 0x05, 0x51, 0x95, 0x70, 0x7f, 0xf3, 0x20, 0x7f, 0xb8, 0x11, 0xa0, 0x92, 0x13, 0xe1, 0x04, 0xe8, 0x17, 0xaf, - 0x65, 0x79, 0x72, 0x57, 0x10, 0x7f, 0x6c, 0x9a, 0x06, 0x52, 0xff, 0x54, 0xcf, 0xa4, 0xc2, 0x00, 0xb8, 0xd2, 0x5c, 0xb8, 0xc8, 0xb9, 0x20, 0x00, - 0x3b, 0xfc, 0xc8, 0x0f, 0x13, 0x7f, 0x78, 0x1f, 0x32, 0x93, 0xe3, 0x2f, 0x47, 0x04, 0xf8, 0x19, 0x82, 0x38, 0x01, 0x41, 0x04, 0x42, 0x04, 0x40, - 0x48, 0x09, 0x41, 0xaa, 0x48, 0x17, 0x4f, 0x28, 0x19, 0x3e, 0x48, 0x27, 0x30, 0x40, 0x1b, 0x4c, 0xe0, 0x04, 0xa8, 0x1f, 0x0e, 0xf4, 0xff, 0x10, - 0x06, 0xf0, 0xff, 0x21, 0x20, 0x1e, 0x13, 0x14, 0x00, 0x13, 0x21, 0x21, 0x22, 0x21, 0x16, 0x20, 0x21, 0x00, 0x21, 0x21, 0x21, 0x14, 0x29, 0x1b, - 0x1d, 0x00, 0x02, 0x00, 0x2a, 0x64, 0xaf, 0x30, 0xe9, 0x28, 0x19, 0xce, 0x00, 0x30, 0xc0, 0x30, 0xfc, 0x30, 0xeb, 0x30, 0x30, 0x15, 0x57, 0xb9, - 0x65, 0x05, 0xff, 0xaf, 0x72, 0x47, 0x15, 0x6e, 0x2f, 0xb7, 0x5f, 0x64, 0x2e, 0xab, 0x72, 0x06, 0x0d, 0x2f, 0x06, 0xd0, 0x7f, 0xb7, 0x97, 0x3f, - 0xa1, 0x05, 0xf1, 0x0d, 0x55, 0x54, 0x2f, 0xaf, 0x72, 0x2d, 0xa9, 0x69, 0x29, 0x9b, 0x6f, 0x40, 0x07, 0x7c, 0x6f, 0xa8, 0x1d, 0x05, 0x11, 0x9b, - 0x00, 0x70, 0x7f, 0x58, 0x1f, 0x05, 0x12, 0x1b, 0x4b, 0x51, 0x00, 0xc9, 0x62, 0xaf, 0x65, 0xfa, 0x8b, 0xbe, 0x8f, 0x00, 0x14, 0x5c, 0xb9, 0x8f, - 0x86, 0x75, 0x3a, 0x53, 0x80, 0x05, 0xdf, 0xb5, 0x6c, 0xd0, 0x7c, 0xb7, 0xa4, 0xc2, 0x78, 0x08, 0xb1, 0xe4, 0xb2, 0x74, 0x28, 0x19, 0xc0, 0xc9, - 0x29, 0x6b, 0xbc, 0x0e, 0xf3, 0x7f, 0x38, 0x19, 0x74, 0xa2, 0x95, 0xf3, 0x62, 0x95, 0x04, 0x58, 0x21, 0x6a, 0x1a, 0x28, 0x11, 0x37, 0xfd, 0x3d, - 0x28, 0x1f, 0x34, 0x28, 0x13, 0x40, 0x8a, 0x48, 0x1b, 0x38, 0x04, 0x39, 0x28, 0x1b, 0x3a, 0x40, 0x1b, 0x39, 0xe0, 0x04, 0xa8, 0x15, 0x0f, 0x14, - 0xff, 0x10, 0x06, 0xf0, 0xff, 0x22, 0x21, 0x21, 0x38, 0x50, 0x00, 0x4e, 0x22, 0x22, 0x23, 0x22, 0x17, 0x21, 0x22, 0x00, 0x22, 0x22, 0x22, 0x06, - 0x20, 0xb5, 0x1b, 0x00, 0x28, 0x00, 0x2b, 0x88, 0x17, 0xe4, 0x28, 0x15, 0xb9, 0x30, 0xaf, 0xd1, 0x06, 0x08, 0x19, 0xb8, 0x17, 0x79, 0x48, 0x17, - 0x73, 0x00, 0x6b, 0x06, 0x68, 0x97, 0x6f, 0xef, 0x06, 0x20, 0x7f, 0x00, 0x98, 0x17, 0x6a, 0x05, 0x41, 0x0d, 0x01, 0x78, 0x17, 0x04, 0x70, 0x8d, - 0x01, 0x78, 0x17, 0xc0, 0x04, 0x72, 0x1b, 0x78, 0x17, 0x9a, 0x4e, 0x14, 0x5c, 0xaf, 0x65, 0x30, 0x4b, 0x51, 0x05, 0xf8, 0x1b, 0x78, 0x17, 0x7c, - 0xc5, 0x74, 0xb9, 0x0f, 0xa4, 0xc2, 0x6c, 0xd0, 0x05, 0xf8, 0x1b, 0x06, 0x12, 0x71, 0x01, 0x33, 0xff, 0x05, 0x98, 0x1b, 0xb8, 0xb8, 0x17, 0x4f, - 0x06, 0x08, 0x15, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x23, 0x22, 0x22, 0x00, 0x39, 0x51, 0x4f, 0x23, 0x23, 0x24, 0x23, 0x18, 0x00, 0x22, - 0x23, 0x23, 0x23, 0x23, 0xd2, 0x27, 0x0d, 0x08, 0x42, 0x00, 0x00, 0x2c, 0x28, 0x17, 0xeb, 0x30, 0xac, 0x06, 0x30, 0xf3, 0x30, 0xde, 0x5d, 0x05, - 0xef, 0xa8, 0x8f, 0xaf, 0x75, 0xaa, 0x2f, 0xb1, 0x67, 0x2f, 0xb3, 0x6e, 0x06, 0x60, 0x7f, 0x6f, 0x06, 0xc0, 0x81, 0x4f, 0x0b, 0x00, 0x62, 0x00, - 0x6c, 0x4f, 0x95, 0x74, 0x4f, 0xa1, 0x05, 0xf1, 0x0d, 0xfb, 0xb8, 0x97, 0x3f, 0xa3, 0x78, 0x11, 0x05, 0x71, 0x95, 0x79, 0x17, 0xf3, 0x49, 0x17, - 0x78, 0x0f, 0xa0, 0x52, 0x13, 0xe1, 0x05, 0x22, 0x13, 0x93, 0x5e, 0x14, 0x5c, 0x72, 0x40, 0x5e, 0x06, 0x72, 0xfd, 0x00, 0x00, 0xe0, 0xcf, 0x74, - 0xb9, 0x02, 0x04, 0xac, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x73, 0x7f, 0x6f, 0xf5, 0x4f, 0x9b, 0x06, 0x73, 0x81, 0xb3, 0xff, 0x38, 0x0d, 0x72, 0x6b, - 0x27, 0xe3, 0x04, 0x48, 0x05, 0xaa, 0x00, 0x38, 0x17, 0x43, 0x28, 0x19, 0x33, 0x28, 0x1b, 0x3d, 0x48, 0x13, 0x30, 0x80, 0x28, 0x1d, 0x20, 0x00, - 0x3e, 0x04, 0x31, 0x04, 0x3b, 0x8e, 0x48, 0x2f, 0x42, 0x04, 0x4c, 0x04, 0xc8, 0x19, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x24, 0x00, 0x23, - 0x1f, 0x14, 0x15, 0x14, 0x24, 0x24, 0x1f, 0x00, 0x24, 0x19, 0x23, 0x24, 0x24, 0x24, 0x24, 0x71, 0x02, 0x27, 0x78, 0x2e, 0x00, 0x00, 0x2d, 0x48, - 0x17, 0xb9, 0x3f, 0x30, 0xaf, 0x06, 0xe8, 0x17, 0x05, 0xdf, 0xa3, 0x00, 0x38, 0x17, 0x06, 0x70, 0x81, 0x00, 0x38, 0x17, 0x05, 0xbd, 0xb1, 0xf8, - 0x00, 0xb8, 0x17, 0x05, 0x3e, 0x39, 0x00, 0x98, 0x17, 0x05, 0x5e, 0xb7, 0x38, 0x17, 0xaf, 0x65, 0x4b, 0x61, 0x51, 0x06, 0x7b, 0x17, 0x38, 0x17, - 0xa4, 0xc2, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0xff, 0x78, 0x17, 0x06, 0x73, 0x81, 0x93, 0xff, 0x06, 0x38, 0x15, 0x78, 0x17, 0x06, 0x38, 0x11, 0x07, - 0x74, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x25, 0x24, 0x20, 0x15, 0x16, 0x15, 0x25, 0x25, 0x00, 0x20, 0x25, 0x1a, 0x24, 0x25, 0x25, 0x25, 0x25, - 0x00, 0xc6, 0x24, 0xba, 0x19, 0x00, 0x00, 0x2e, 0x64, 0x00, 0xec, 0x30, 0xcb, 0x30, 0xf3, 0x30, 0xb0, 0x30, 0x05, 0xe9, 0x30, 0xfc, 0x30, 0xc9, - 0x06, 0x28, 0x1d, 0x4c, 0x2e, 0xaf, 0x55, 0x6e, 0x2e, 0xaf, 0x6e, 0x2f, 0xb1, 0x72, 0x2f, 0xb3, 0x64, 0x06, 0x00, 0x7f, 0x7d, 0xe9, 0x06, 0xc0, - 0x7f, 0xd8, 0x17, 0x06, 0x11, 0x0d, 0x00, 0x58, 0x17, 0x00, 0x11, 0x95, 0x6f, 0x05, 0xa8, 0x17, 0x80, 0x05, 0x90, 0x7d, 0x00, 0x00, 0x17, 0x52, - 0x81, 0x5b, 0x3c, 0x10, 0x68, 0xd2, 0x52, 0x06, 0x7b, 0x17, 0x08, 0xb8, 0xcc, 0xb2, 0x03, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0xb4, 0x06, 0x58, 0x19, - 0x07, 0x13, 0x7f, 0xf0, 0x73, 0xff, 0x3a, 0x9f, 0x72, 0x6b, 0x05, 0x98, 0x23, 0x1b, 0x04, 0x35, 0x04, 0x14, 0x3d, 0x04, 0x38, 0x20, 0x03, 0x33, - 0x28, 0x1f, 0x30, 0x04, 0x70, 0x34, 0x05, 0xe8, 0x23, 0x07, 0x91, 0x7f, 0x10, 0x0e, 0x50, 0x7f, 0x26, 0x25, 0x23, 0x16, 0x00, 0x17, 0x16, 0x26, - 0x26, 0x25, 0x26, 0x1b, 0x25, 0x00, 0x26, 0x26, 0x26, 0x26, 0xa1, 0x2a, 0x8e, 0x15, 0x00, 0x00, 0x00, 0x2f, 0x64, 0xea, 0x30, 0xda, 0x30, 0x18, - 0xc4, 0x30, 0xaf, 0x06, 0x28, 0x11, 0x78, 0x17, 0x69, 0x00, 0x70, 0xbd, 0x2e, 0xb3, 0x74, 0x06, 0x6f, 0xb1, 0x06, 0xf0, 0x7f, 0xf8, 0x17, 0x51, - 0x0d, 0x7a, 0x05, 0x8d, 0xbd, 0xda, 0x00, 0x78, 0x17, 0x51, 0x95, 0x63, 0x05, 0x0f, 0xb3, 0x00, 0x58, 0x17, 0xed, 0x05, 0x82, 0x13, 0x29, 0x01, - 0x52, 0x69, 0x4f, 0x28, 0x83, 0x4b, 0x51, 0x06, 0x78, 0x17, 0x00, 0xac, 0xb9, 0x98, 0xd3, 0x20, 0xce, 0x6c, 0xd0, 0xf1, 0x06, 0x58, 0x15, 0x07, - 0xf3, 0x7f, 0x05, 0x98, 0x0f, 0x98, 0x17, 0x38, 0x04, 0x3f, 0x28, 0x1b, 0x70, 0x46, 0x05, 0xc8, 0x0d, 0x0f, 0x94, 0xff, 0x10, 0x06, 0xf0, 0xff, - 0x27, 0x26, 0x24, 0x17, 0x00, 0x18, 0x17, 0x27, 0x27, 0x26, 0x27, 0x1c, 0x26, 0x00, 0x27, 0x27, 0x27, 0x27, 0x6a, 0x25, 0x28, 0x1c, 0x00, 0x00, - 0x00, 0x30, 0x64, 0xde, 0x30, 0xac, 0x30, 0x15, 0xc0, 0x30, 0xf3, 0x06, 0x88, 0x17, 0x4d, 0x2f, 0xa3, 0x67, 0x4f, 0xa7, 0x7f, 0x61, 0x2f, 0xb7, - 0x0e, 0x10, 0x7f, 0xd8, 0x17, 0x06, 0x11, 0x0d, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x00, 0x38, 0x17, 0xa0, 0x92, 0x13, 0xe1, 0x05, 0x02, 0x13, - 0x6c, 0x9a, 0xa0, 0x52, 0x39, 0x40, 0x4e, 0x06, 0x7b, 0x15, 0x00, 0x00, 0xc8, 0xb9, 0x00, 0xac, 0x3d, 0xe8, 0xb2, 0x06, 0x78, 0x15, 0x07, 0xb3, - 0x7f, 0x38, 0x07, 0x06, 0x18, 0x17, 0x1c, 0x28, 0x0d, 0x57, 0x33, 0x28, 0x11, 0x34, 0x28, 0x15, 0x3d, 0x28, 0x0b, 0x05, 0xf8, 0x1d, 0x0e, 0xf4, - 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x28, 0x27, 0x25, 0x18, 0x19, 0x18, 0x28, 0x00, 0x28, 0x27, 0x28, 0x1d, 0x27, 0x28, 0x28, 0x28, 0x0a, 0x28, - 0x5b, 0x2a, 0x3c, 0x2f, 0x9e, 0x31, 0x28, 0x17, 0xea, 0x00, 0x30, 0xfb, 0x30, 0xa8, 0x30, 0xeb, 0x30, 0x71, 0x05, 0x51, 0x8c, 0x54, 0xfd, 0x56, - 0x06, 0x38, 0x17, 0x72, 0x2f, 0xb3, 0x06, 0x79, 0x00, 0x2d, 0x00, 0x45, 0x2f, 0x39, 0x06, 0x70, 0x7f, 0x73, 0xc5, 0x06, 0x66, 0x18, 0x3f, 0xaf, - 0x70, 0x00, 0x75, 0x48, 0x1d, 0x69, 0x4d, 0x31, 0xbb, 0x71, 0x11, 0x20, 0x05, 0x41, 0x0f, 0x90, 0x7f, 0x50, 0x81, 0x63, 0x29, 0xa7, 0xb8, 0x1d, - 0xef, 0x31, 0x9b, 0x04, 0xb1, 0x99, 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0x78, 0x1d, 0x04, 0xf0, 0x7d, 0x38, 0x17, 0x00, 0xcc, 0x91, 0x2d, 0x00, 0xc3, - 0x57, 0x14, 0x5c, 0x80, 0x06, 0x52, 0xff, 0xc8, 0xb9, 0xac, 0xb9, 0x10, 0xc6, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x5b, - 0x97, 0xf8, 0x05, 0x92, 0x6d, 0x00, 0xf0, 0x7f, 0x78, 0x17, 0xd2, 0x11, 0x04, 0xb8, 0x1d, 0x20, 0x04, 0x35, 0x8a, 0x28, 0x0d, 0x3f, 0x04, 0x43, - 0x48, 0x07, 0x38, 0x48, 0x17, 0x20, 0xab, 0x48, 0x2d, 0x40, 0x20, 0x0d, 0x39, 0x28, 0x21, 0x2d, 0x28, 0x1f, 0x0d, 0x14, 0xff, 0x80, 0x10, 0x0e, - 0x70, 0x7f, 0x29, 0x28, 0x26, 0x4a, 0x44, 0x43, 0x29, 0x00, 0x29, 0x28, 0x29, 0x35, 0x28, 0x29, 0x29, 0x29, 0x00, 0x29, 0x45, 0x28, 0x09, 0x22, - 0x00, 0x00, 0x32, 0x20, 0x64, 0xe2, 0x28, 0x11, 0xc9, 0x30, 0xf4, 0x30, 0xa3, 0x2a, 0x30, 0xa2, 0x06, 0x48, 0x19, 0x4d, 0x2e, 0xa9, 0x72, 0x2f, - 0xad, 0x6f, 0x2d, 0x00, 0x76, 0x2e, 0xb5, 0x61, 0x06, 0x2d, 0x2f, 0xb0, 0x7f, 0x65, 0x07, 0x48, 0x17, 0xaf, 0x51, 0x11, 0x77, 0x2f, 0xc5, 0x6e, - 0x40, 0x93, 0x04, 0xbf, 0xb1, 0x00, 0xd8, 0x17, 0x05, 0x11, 0x9b, 0xc0, 0x00, 0xb8, 0x17, 0x05, 0x32, 0x19, 0xab, 0x83, 0x14, 0x5c, 0x1a, 0x59, - 0x00, 0xe6, 0x74, 0x3e, 0x79, 0x1a, 0x4f, 0x3b, 0x4e, 0x20, 0x49, 0x4e, 0x05, 0xfb, 0x1d, 0xa8, 0xba, 0x74, 0xb9, 0xc4, 0x1a, 0xb3, 0x14, 0xbc, - 0x06, 0x78, 0x19, 0xd3, 0x7f, 0xeb, 0x06, 0x83, 0x7f, 0xf3, 0xea, 0x63, 0xff, 0x05, 0xf8, 0x19, 0x00, 0x78, 0x17, 0x3e, 0x28, 0x17, 0x34, 0x20, - 0x05, 0x32, 0xb8, 0x28, 0x2b, 0x4f, 0x04, 0xc8, 0x17, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x2a, 0x29, 0x27, 0x00, 0x4b, 0x45, 0x44, 0x2a, - 0x2a, 0x2a, 0x2a, 0x36, 0x40, 0x29, 0x30, 0x05, 0x87, 0x26, 0x21, 0x20, 0x00, 0x00, 0x40, 0x33, 0x28, 0x17, 0xb9, 0x30, 0xaf, 0x30, 0xef, 0x30, - 0x35, 0xde, 0x5d, 0x06, 0x5f, 0x30, 0x38, 0x17, 0x73, 0x2e, 0xa5, 0x6f, 0x27, 0x07, 0xaa, 0x06, 0xd0, 0x7f, 0x75, 0x4c, 0xad, 0x6f, 0x4f, 0xb9, - 0x61, 0x20, 0x93, 0x74, 0xda, 0x04, 0xcc, 0xa7, 0x7f, 0xff, 0x4f, 0xa0, 0x6f, 0x58, 0x13, 0x73, 0x28, 0x1d, 0x61, 0xd7, 0x2f, 0xc1, 0x05, 0x98, - 0x97, 0x67, 0x2f, 0xa9, 0x6f, 0x28, 0x83, 0x3f, 0xa5, 0x98, 0x11, 0xee, 0x31, 0x95, 0x05, 0x19, 0xa7, 0x70, 0x7f, 0xf3, 0x29, 0x03, 0xb8, 0x11, - 0x32, 0x13, 0xfa, 0x81, 0x05, 0x2f, 0xbc, 0xab, 0x83, 0xaf, 0x65, 0xd1, 0x79, 0x06, 0x72, 0xfd, 0x84, 0x38, 0x17, 0xa4, 0xc2, 0x6c, 0xd0, 0x38, - 0x17, 0xfc, 0xc8, 0xb7, 0x06, 0x93, 0x7f, 0x6b, 0x06, 0x82, 0xff, 0x93, 0xff, 0x76, 0x2c, 0x21, 0x78, 0x15, 0x32, 0x91, 0x77, 0xe3, 0x2c, 0x31, - 0x05, 0x13, 0x81, 0x38, 0x01, 0x41, 0x28, 0x0d, 0x38, 0x01, 0x30, 0x07, 0x45, 0x30, 0x28, 0x05, 0x20, 0x00, 0x3e, 0x48, 0x25, 0x30, 0x28, 0x31, - 0x1c, 0x42, 0x04, 0x4c, 0x04, 0xa8, 0x15, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x2b, 0x2a, 0x00, 0x28, 0x19, 0x1a, 0x19, 0x2b, 0x2b, 0x2b, - 0x2c, 0x20, 0x1f, 0x2a, 0x20, 0x05, 0x2b, 0xa8, 0x27, 0xbf, 0x1a, 0x00, 0x00, 0x00, 0x34, 0x64, 0xe0, 0x30, 0xeb, 0x30, 0x1a, 0xde, 0x30, 0xf3, - 0x48, 0x1d, 0x06, 0x38, 0x1b, 0x4d, 0x2f, 0x2b, 0x72, 0x2f, 0x00, 0x6d, 0x2e, 0xa5, 0x6e, 0x47, 0x11, 0x06, 0x3d, 0x2f, 0x06, 0xb0, 0x81, 0xf8, - 0x17, 0xf4, 0x05, 0xf1, 0x0d, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0x00, 0x58, 0x17, 0xfa, 0x05, 0x82, 0x13, 0x69, 0x64, 0x00, 0x14, 0x5c, 0xfc, - 0x66, 0xaf, 0x65, 0x4b, 0x51, 0x81, 0x06, 0x5b, 0x19, 0x34, 0xbb, 0x74, 0xb9, 0xcc, 0xb9, 0x38, 0x1b, 0xdc, 0x06, 0x58, 0x19, 0x3f, 0xaf, 0x65, - 0x06, 0xa3, 0x81, 0xf3, 0xff, 0x05, 0xf8, 0x19, 0x1c, 0x04, 0x05, 0x43, 0x04, 0x40, 0x04, 0x3c, 0x28, 0x0f, 0x3d, 0x06, 0x68, 0x17, 0xc0, 0x06, - 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x2c, 0x2c, 0x2a, 0x1a, 0x1b, 0x1a, 0x01, 0x2c, 0x2c, 0x29, 0x2d, 0x20, 0x2c, 0x2c, 0x20, 0x01, 0x00, 0x0a, - 0x31, 0x86, 0x17, 0x00, 0x00, 0x35, 0x64, 0x00, 0xcd, 0x30, 0xcd, 0x30, 0xc4, 0x30, 0xea, 0x81, 0x02, 0xbb, 0x6c, 0xa1, 0x7b, 0x3a, 0x53, 0x06, - 0x1f, 0xb2, 0x4e, 0xd8, 0x2e, 0xaf, 0x3e, 0xa9, 0x74, 0x2f, 0xb5, 0x06, 0x3d, 0xb3, 0x4e, 0x00, 0xe9, 0xad, 0x2f, 0x29, 0xe9, 0x40, 0x7f, 0x69, - 0x2f, 0x3b, 0x05, 0xfe, 0x37, 0x41, 0x2d, 0xa7, 0x58, 0x74, 0x4f, 0xad, 0x6f, 0x29, 0x1d, 0x35, 0xa1, 0x20, 0x00, 0x4b, 0xbd, 0x4d, 0x33, 0x69, - 0x2f, 0xb1, 0x5f, 0x41, 0x30, 0x13, 0x51, 0x27, 0x7a, 0x41, 0x2d, 0xaa, 0x03, 0xbf, 0xc4, 0x43, 0x2f, 0xab, 0x72, 0x4d, 0xaf, 0x6e, 0x2f, 0xad, - 0x61, 0xde, 0x2d, 0xad, 0x38, 0x23, 0x20, 0xe0, 0x97, 0x3d, 0xc9, 0x58, 0x31, 0x71, 0xaf, 0x63, 0xad, 0x03, 0x6f, 0xcb, 0x44, 0x40, 0xe7, 0x74, - 0x40, 0x77, 0x31, 0x07, 0x20, 0x2e, 0xab, 0xfb, 0x31, 0x11, 0x38, 0x27, 0x90, 0x79, 0x38, 0xb1, 0xb2, 0x29, 0x69, 0x2e, 0xd1, 0x03, 0x5f, 0xe1, - 0x03, 0x85, 0x6d, 0x85, 0x6d, 0x28, 0x83, 0x32, 0xff, 0x06, 0x32, 0xfd, 0x00, 0x00, 0x00, 0x24, 0xb1, 0x24, 0xb1, 0x20, 0xce, 0x00, 0x20, 0x00, - 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x8b, 0x06, 0xd3, 0x7f, 0x69, 0x00, 0xeb, 0x06, 0xe0, 0x7f, 0x61, 0x48, 0x17, 0x3a, 0x9b, 0xc4, 0xb2, 0x13, - 0x04, 0xb8, 0x1b, 0x1d, 0x04, 0x35, 0x28, 0x11, 0x35, 0x04, 0x44, 0x46, 0x28, 0x13, 0x38, 0x04, 0x39, 0x28, 0x13, 0x30, 0x04, 0x54, 0x32, 0x28, - 0x0d, 0x3e, 0x28, 0x27, 0x3e, 0x28, 0x2f, 0x3d, 0x04, 0x55, 0x4b, 0x40, 0x15, 0x3e, 0x28, 0x33, 0x40, 0x28, 0x43, 0x33, 0x03, 0xe8, 0x25, 0xc0, - 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x2d, 0x2d, 0x2b, 0x03, 0x03, 0x04, 0x04, 0x2d, 0x2d, 0x2d, 0x2e, 0x21, 0x20, 0x04, 0x2d, 0x2d, 0x00, - 0x18, 0x30, 0xb9, 0x25, 0x00, 0x00, 0x36, 0x64, 0x00, 0xcb, 0x30, 0xb8, 0x30, 0xcb, 0x30, 0xfb, 0x30, 0x00, 0xce, 0x30, 0xf4, 0x30, 0xb4, 0x30, - 0xed, 0x30, 0x28, 0xc9, 0x30, 0x05, 0xdd, 0x37, 0x4e, 0x2e, 0xab, 0x7a, 0x00, 0x68, 0xad, 0x4e, 0xb5, 0x6f, 0x2f, 0xb7, 0x6f, 0x2e, 0xb1, 0x05, - 0xf0, 0x7f, 0x6a, 0x2f, 0x9d, 0x88, 0x56, 0xf3, 0x6f, 0x00, 0x76, 0x05, 0xe0, 0x87, 0x4f, 0x00, 0x62, 0x3d, 0x00, 0x6c, 0x2f, 0x97, 0x37, 0x1b, - 0x37, 0xfd, 0x38, 0x0d, 0x63, 0x21, 0x0f, 0xbe, 0x90, 0x91, 0x77, 0x04, 0xc1, 0x19, 0x7f, 0xaf, 0x38, 0x99, 0x3f, 0xab, 0x77, 0xfd, 0x69, 0x17, - 0x00, 0x7e, 0x01, 0x31, 0x15, 0x6a, 0x04, 0xe1, 0x17, 0x70, 0x7f, 0x38, 0x07, 0xe8, 0x98, 0x01, 0x52, 0x13, 0x71, 0x95, 0xf3, 0x04, 0xa1, 0x95, - 0x0b, 0x4e, 0xfa, 0x00, 0x8b, 0x2b, 0x59, 0xe5, 0x54, 0x57, 0x7f, 0xb7, 0x60, 0x5f, 0x05, 0xd2, 0xf9, 0x5f, 0xff, 0xc8, 0xb2, 0x1c, 0xc8, 0xe0, - 0x00, 0xac, 0x5c, 0xb8, 0xdc, 0xb4, 0x20, 0x00, 0xfc, 0x7f, 0xc8, 0x06, 0x3b, 0x97, 0x33, 0x7f, 0x06, 0x93, 0x01, 0x00, 0x33, 0xff, 0x38, 0x1b, - 0x3b, 0x19, 0x32, 0x97, 0x45, 0xe3, 0x05, 0x08, 0x17, 0x38, 0x04, 0x36, 0x28, 0x1b, 0x33, 0x28, 0x09, 0x44, 0x40, 0x28, 0x0d, 0x34, 0x04, 0x41, - 0x28, 0x21, 0x30, 0x04, 0x45, 0x4f, 0x48, 0x0b, 0x31, 0x04, 0x3b, 0x20, 0x0b, 0x41, 0x28, 0x27, 0x70, 0x4c, 0x03, 0xe8, 0x0f, 0x07, 0xb4, 0xff, - 0x10, 0x0e, 0xb0, 0x7f, 0x2e, 0x2e, 0x2c, 0x1b, 0x01, 0x1c, 0x1b, 0x2e, 0x2e, 0x2e, 0x2f, 0x22, 0x20, 0x04, 0x00, 0x2e, 0x2e, 0x0f, 0x28, 0x49, - 0x1f, 0x00, 0x00, 0x3f, 0x37, 0x64, 0x06, 0x78, 0x0f, 0x9f, 0xaf, 0x06, 0x17, 0x8b, 0x07, 0xb0, 0x7f, 0xf8, 0x17, 0x04, 0xf8, 0x07, 0xfc, 0x01, - 0x78, 0x17, 0x05, 0x79, 0x21, 0x00, 0x58, 0x17, 0x04, 0xb8, 0x09, 0xdf, 0xff, 0x06, 0xd8, 0x15, 0x00, 0x00, 0x0f, 0x78, 0xb1, 0x0c, 0xbe, 0x06, - 0xd8, 0x17, 0x07, 0xd3, 0x7f, 0x05, 0xb8, 0x13, 0x58, 0x17, 0x1c, 0x3e, 0x04, 0x32, 0x06, 0x88, 0x15, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xf0, 0xff, - 0x2f, 0x30, 0x00, 0x2d, 0x1c, 0x1d, 0x1c, 0x2f, 0x2f, 0x30, 0x30, 0x00, 0x23, 0x30, 0x2f, 0x2f, 0x2f, 0x2f, 0xa2, 0x29, 0x04, 0x3e, 0x16, 0x00, - 0x00, 0x38, 0x48, 0x17, 0xa9, 0x30, 0x00, 0xb7, 0x30, 0xd3, 0x30, 0xeb, 0x30, 0xb9, 0x30, 0x6a, 0xaf, 0x06, 0x08, 0x1d, 0x5f, 0xa3, 0x6f, 0x2f, - 0x2f, 0x69, 0x2f, 0x39, 0x69, 0x8f, 0x2f, 0xa9, 0x73, 0x00, 0x6b, 0x06, 0x40, 0x7f, 0x06, 0x50, 0x81, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x0d, 0xf0, - 0x00, 0xb8, 0x17, 0x05, 0x31, 0x95, 0x00, 0x58, 0x17, 0x05, 0x92, 0x13, 0xb0, 0x65, 0x7f, 0x89, 0x02, 0x2f, 0x4f, 0x29, 0x52, 0x9a, 0x4e, 0x06, - 0x78, 0x17, 0xf4, 0x00, 0xbc, 0xdc, 0xc2, 0x44, 0xbe, 0x74, 0xb9, 0xa4, 0x1f, 0xc2, 0x6c, 0xd0, 0x06, 0x18, 0x1b, 0x07, 0x93, 0x7f, 0xb3, 0xff, - 0x05, 0x98, 0x1d, 0x58, 0x17, 0x57, 0x3e, 0x28, 0x0f, 0x38, 0x28, 0x07, 0x38, 0x28, 0x1d, 0x05, 0xd8, 0x19, 0x08, 0x51, 0x7f, 0x80, 0x10, 0x0d, - 0x90, 0x7f, 0x30, 0x31, 0x2e, 0x1d, 0x1e, 0x1d, 0x30, 0x00, 0x30, 0x31, 0x31, 0x24, 0x31, 0x30, 0x30, 0x30, 0x00, 0x30, 0x1f, 0x27, 0xf9, 0x3a, - 0x00, 0x00, 0x39, 0x0d, 0x64, 0xaa, 0x30, 0xe0, 0x06, 0x48, 0x0f, 0x9f, 0x2f, 0x6d, 0x05, 0xe8, 0x09, 0xfe, 0x07, 0xf0, 0x7f, 0xb8, 0x17, 0x06, - 0x11, 0x0d, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x00, 0x38, 0x17, 0x05, 0xb2, 0x13, 0x02, 0x01, 0x91, 0x28, 0x67, 0xaf, 0x65, 0x4b, 0x51, 0x06, - 0x72, 0xff, 0x3c, 0x34, 0xc6, 0x06, 0x58, 0x0f, 0x07, 0xf3, 0x7f, 0x05, 0x98, 0x09, 0xdf, 0xf9, 0x1e, 0x04, 0x70, 0x3c, 0x05, 0xe8, 0x09, 0x0f, - 0xf4, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x31, 0x32, 0x30, 0x1e, 0x00, 0x1f, 0x1e, 0x31, 0x31, 0x34, 0x32, 0x25, 0x32, 0x00, 0x31, 0x31, 0x31, 0x31, - 0x19, 0x27, 0x2b, 0x34, 0x10, 0x00, 0x00, 0x3a, 0x28, 0x17, 0xec, 0x30, 0xf3, 0x30, 0x15, 0xd6, 0x30, 0xeb, 0x06, 0x68, 0x1b, 0x4f, 0x4c, 0x17, - 0x6e, 0x2f, 0xa9, 0x57, 0x75, 0x2f, 0xa9, 0x67, 0x06, 0xa0, 0x7f, 0x6f, 0x06, 0x40, 0x81, 0xf8, 0x17, 0x05, 0xf1, 0x0d, 0xf5, 0x00, 0x78, 0x17, - 0x05, 0x71, 0x95, 0x00, 0x58, 0x17, 0x3e, 0x2b, 0x6d, 0x82, 0x13, 0x6f, 0x04, 0xaf, 0xc8, 0x02, 0x65, 0x59, 0x26, 0x4f, 0x21, 0x58, 0x06, 0x7b, - 0x15, 0x00, 0x00, 0x00, 0x24, 0xc6, 0x0c, 0xb8, 0x80, 0xbd, 0x74, 0x78, 0xb9, 0x06, 0x78, 0x1b, 0x07, 0x53, 0x7f, 0xb1, 0xeb, 0x05, 0xd8, 0x21, - 0x1e, 0x04, 0x40, 0x0a, 0x04, 0x35, 0x04, 0x3d, 0x28, 0x0f, 0x43, 0x20, 0x09, 0x33, 0xe0, 0x06, 0x08, 0x23, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x50, - 0x7f, 0x32, 0x34, 0x32, 0x1f, 0x21, 0x00, 0x1f, 0x32, 0x32, 0x35, 0x34, 0x26, 0x34, 0x32, 0x00, 0x32, 0x32, 0x32, 0xd2, 0x24, 0x2e, 0x27, 0x00, - 0x20, 0x00, 0x3b, 0x28, 0x17, 0xea, 0x30, 0xe7, 0x30, 0xfc, 0xee, 0x28, 0x17, 0x06, 0x5d, 0x31, 0x58, 0x17, 0x6c, 0x06, 0xaf, 0xaf, 0x06, 0xf0, - 0x7f, 0xf8, 0x17, 0x6a, 0xef, 0x2f, 0xbb, 0x05, 0x91, 0x0f, 0x00, 0x98, 0x17, 0xeb, 0x05, 0x41, 0x95, 0x00, 0x78, 0x17, 0x38, 0xa9, 0x05, 0x32, - 0x15, 0x02, 0x65, 0x59, 0xd6, 0x5e, 0x14, 0x5c, 0x06, 0xb8, 0x17, 0xd4, 0x7e, 0xb8, 0x06, 0x58, 0x11, 0x9b, 0x97, 0x05, 0xd2, 0x71, 0x00, 0x53, - 0xff, 0x05, 0xd8, 0x0d, 0xd8, 0x17, 0x3b, 0x0e, 0x04, 0x3e, 0x04, 0x32, 0x06, 0x08, 0x11, 0x0f, 0x74, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x33, 0x00, - 0x33, 0x31, 0x20, 0x20, 0x20, 0x33, 0x33, 0x36, 0x08, 0x33, 0x27, 0x33, 0x33, 0x20, 0x01, 0xaa, 0x25, 0xa5, 0x00, 0x19, 0x00, 0x00, 0x3c, 0x64, - 0xda, 0x30, 0xf3, 0x35, 0x30, 0xb6, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x50, 0x4f, 0xad, 0x7a, 0x2f, 0x31, 0xef, 0x0e, 0x50, 0x7f, 0xd8, 0x17, 0x51, - 0x0d, 0x73, 0x05, 0xa1, 0x0d, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x00, 0x38, 0x17, 0x84, 0x05, 0xb2, 0x13, 0x54, 0x59, 0x28, 0x84, 0x06, 0x98, - 0x15, 0x00, 0x00, 0x0e, 0x9c, 0xd3, 0x90, 0xc7, 0x06, 0xb8, 0x17, 0x07, 0x93, 0x7f, 0x06, 0x58, 0x19, 0x1f, 0x03, 0x04, 0x35, 0x04, 0x3d, 0x04, - 0x37, 0x40, 0x05, 0x06, 0x38, 0x19, 0xc0, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x34, 0x35, 0x36, 0x21, 0x22, 0x21, 0x00, 0x34, 0x34, 0x37, - 0x36, 0x28, 0x35, 0x34, 0x34, 0x00, 0x34, 0x34, 0xd4, 0x25, 0x03, 0x20, 0x00, 0x00, 0x40, 0x3d, 0x28, 0x17, 0xeb, 0x30, 0xdf, 0x30, 0x30, 0x57, - 0x20, 0xb9, 0x65, 0x06, 0x98, 0x17, 0x72, 0x00, 0x6d, 0x00, 0x27, 0xfd, 0x06, 0xa8, 0x97, 0x30, 0x7f, 0x06, 0x7e, 0x2f, 0xbf, 0xaf, 0x58, 0x17, - 0x05, 0xd0, 0x8d, 0x54, 0x41, 0x7f, 0xbf, 0x3f, 0x9f, 0x74, 0x2f, 0xa1, 0x5f, 0xa7, 0xb8, 0x1d, 0x04, 0xf1, 0x9b, 0x00, 0x70, 0x7f, 0x78, 0x1f, - 0x80, 0x04, 0xf1, 0x9b, 0x7c, 0x5f, 0x14, 0x5c, 0xc6, 0x59, 0xb9, 0x04, 0x8f, 0x86, 0x75, 0x3a, 0x53, 0x06, 0x3f, 0xb3, 0x98, 0xd3, 0x00, 0x84, - 0xb9, 0x20, 0x00, 0xc0, 0xc9, 0x29, 0xbc, 0xeb, 0x0e, 0x52, 0xff, 0x73, 0xff, 0x38, 0x15, 0x74, 0xa2, 0x8b, 0xf3, 0x62, 0x8b, 0x04, 0xf8, 0x1d, - 0x88, 0x38, 0x17, 0x40, 0x04, 0x3c, 0x48, 0x13, 0x38, 0x04, 0x39, 0xae, 0x28, 0x13, 0x3a, 0x20, 0x0f, 0x30, 0x20, 0x09, 0x0d, 0xd4, 0xff, 0x10, - 0x0e, 0x70, 0x7f, 0x35, 0x00, 0x36, 0x37, 0x3a, 0x52, 0x50, 0x35, 0x35, 0x38, 0x00, 0x37, 0x29, 0x36, 0x35, 0x35, 0x35, 0x35, 0x3e, 0x00, 0x29, - 0x0c, 0x28, 0x00, 0x00, 0x3e, 0x64, 0xbf, 0x1d, 0x6c, 0x77, 0x6d, 0x06, 0x98, 0x15, 0x3f, 0xaf, 0x36, 0x93, 0x6d, 0x46, 0x93, 0x1b, 0x27, 0x00, - 0x79, 0x2f, 0xbd, 0x06, 0x90, 0x7f, 0x69, 0x06, 0x00, 0x7d, 0x00, 0x18, 0x17, 0xb5, 0x91, 0x0d, 0x6a, 0x05, 0x41, 0x0b, 0x00, 0x97, 0x97, 0x6c, - 0x2f, 0xbf, 0x4c, 0x88, 0x2f, 0x78, 0x61, 0x20, 0x0f, 0x04, 0x3a, 0x3a, 0x00, 0xd8, 0x17, 0x05, 0x11, 0x9b, 0xe8, 0x6e, 0x77, 0x40, 0x6d, 0x06, - 0x98, 0x15, 0x00, 0x00, 0x04, 0xd5, 0xac, 0xb9, 0x00, 0xa8, 0xba, 0x74, 0xb9, 0xa4, 0xc2, 0xa4, 0xd0, 0xc7, 0x06, 0x38, 0x1f, 0xb3, 0x7f, 0x73, - 0x00, 0x6b, 0x2f, 0xab, 0x06, 0xd3, 0x7f, 0x05, 0xf8, 0x1f, 0x57, 0x1f, 0x28, 0x15, 0x38, 0x28, 0x17, 0x3e, 0x28, 0x1d, 0x06, 0x38, 0x1b, 0x07, - 0xb4, 0xff, 0x80, 0x10, 0x0e, 0x30, 0x7f, 0x36, 0x37, 0x38, 0x3b, 0x4b, 0x51, 0x36, 0x00, 0x36, 0x39, 0x38, 0x2a, 0x37, 0x36, 0x36, 0x36, 0x00, - 0x36, 0xac, 0x1e, 0xcb, 0x5d, 0x00, 0x00, 0x3f, 0x00, 0x64, 0xd7, 0x30, 0xb9, 0x30, 0xb3, 0x30, 0xd5, 0x38, 0x30, 0xde, 0x20, 0x0d, 0x06, 0x5f, - 0xaf, 0x34, 0x8d, 0x6f, 0x00, 0x76, 0xc5, 0x06, 0x8c, 0xaf, 0x06, 0xd0, 0x7f, 0x4f, 0x00, 0x62, 0x27, 0x81, 0x61, 0x25, 0x93, 0x6d, 0x74, 0x4f, - 0xa1, 0x51, 0x0d, 0x77, 0x06, 0x48, 0x97, 0x3f, 0xa3, 0x64, 0x2f, 0xb9, 0xee, 0x90, 0x87, 0x05, 0x11, 0x95, 0x79, 0x17, 0xf3, 0x49, 0x17, 0x78, - 0x0f, 0x05, 0x92, 0x13, 0x6e, 0x01, 0x66, 0xaf, 0x65, 0xd1, 0x79, 0x2b, 0x59, 0x06, 0x72, 0xff, 0x00, 0x04, 0xd5, 0xa4, 0xc2, 0x54, 0xcf, 0x04, - 0xd5, 0x0d, 0x20, 0x00, 0x80, 0xbd, 0x0e, 0xd3, 0x7f, 0x38, 0x11, 0x72, 0x6b, 0x25, 0x71, 0xe3, 0x04, 0xa8, 0x09, 0xf8, 0x17, 0x38, 0x0d, 0x3e, - 0x04, 0x32, 0x48, 0x15, 0x10, 0x30, 0x04, 0x4f, 0x28, 0x15, 0x3e, 0x04, 0x31, 0x04, 0x41, 0x3b, 0x28, 0x17, 0x41, 0x04, 0x42, 0x04, 0x4c, 0x04, - 0xe8, 0x1b, 0xc0, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x37, 0x38, 0x39, 0x22, 0x23, 0x22, 0x00, 0x37, 0x37, 0x3a, 0x39, 0x2b, 0x38, 0x37, - 0x37, 0x00, 0x37, 0x37, 0x1d, 0x29, 0x25, 0x14, 0x00, 0x00, 0x15, 0x40, 0x64, 0xed, 0x28, 0x17, 0xc8, 0x06, 0xa8, 0x17, 0x52, 0x2f, 0xa9, 0xff, - 0x37, 0x13, 0x06, 0x78, 0x19, 0x06, 0xf0, 0x7f, 0xd8, 0x17, 0x91, 0x0d, 0x05, 0x78, 0x19, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0xc0, 0x00, 0x38, - 0x17, 0x05, 0xb2, 0x13, 0x57, 0x7f, 0xaf, 0x65, 0x58, 0x62, 0x81, 0x06, 0x98, 0x17, 0x5c, 0xb8, 0xa4, 0xc2, 0xa0, 0xd1, 0x38, 0x17, 0x37, 0xfc, - 0xc8, 0x0e, 0xf3, 0x7f, 0x06, 0x38, 0x19, 0x20, 0x28, 0x13, 0x37, 0xff, 0x06, 0x78, 0x19, 0xc0, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x38, - 0x39, 0x3b, 0x24, 0x25, 0x24, 0x00, 0x38, 0x38, 0x3c, 0x3c, 0x3c, 0x39, 0x38, 0x38, 0x00, 0x38, 0x38, 0x96, 0x21, 0x3b, 0x1c, 0x00, 0x00, 0x00, - 0x41, 0x64, 0xea, 0x30, 0xe3, 0x30, 0xb6, 0x30, 0x54, 0xf3, 0x06, 0xa8, 0x17, 0x79, 0x2f, 0x2d, 0x7a, 0x2f, 0x31, 0x6e, 0x00, 0x5b, 0x27, 0x06, - 0x48, 0x97, 0x69, 0x80, 0x7f, 0x07, 0x38, 0x17, 0x6a, 0x48, 0x23, 0x05, 0x90, 0x8d, 0xfa, 0x00, 0x78, 0x17, 0x30, 0x87, 0x05, 0x31, 0x95, 0x00, - 0x58, 0x17, 0x51, 0x93, 0xe1, 0x05, 0x21, 0x93, 0x81, 0x18, 0x68, 0x5e, 0x8d, 0x06, 0x7b, 0x13, 0x3f, 0xff, 0xb4, 0xb7, 0x94, 0x7e, 0xc7, 0x06, - 0x78, 0x13, 0x5b, 0x97, 0x91, 0xe9, 0x06, 0x5c, 0x17, 0x93, 0x7f, 0x06, 0x58, 0x17, 0x4f, 0x2e, 0x04, 0x37, 0x28, 0x0d, 0x3d, 0x06, 0x48, 0x15, - 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x39, 0x00, 0x3a, 0x3a, 0x23, 0x24, 0x23, 0x39, 0x39, 0x3b, 0x00, 0x3b, 0x3d, 0x3a, 0x39, 0x39, 0x39, - 0x39, 0xd3, 0x40, 0x26, 0x38, 0x17, 0x42, 0x64, 0xb5, 0x30, 0xcf, 0x30, 0x02, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x56, 0x06, 0x5d, 0x2f, 0x53, 0x8e, - 0x2f, 0x2b, 0x6b, 0x00, 0x68, 0x2f, 0x31, 0x06, 0xf0, 0x7f, 0x3c, 0xad, 0x49, 0x8b, 0x40, 0x8d, 0x6f, 0x00, 0x75, 0x2f, 0xbd, 0x69, 0x2f, 0x49, - 0x05, 0x1c, 0xb1, 0xb5, 0x3f, 0xaf, 0x70, 0x20, 0x6f, 0x38, 0x1d, 0x69, 0x21, 0x09, 0x20, 0x41, 0x11, 0x5b, 0x63, 0x80, 0x91, 0x4a, 0x41, 0x1f, - 0x70, 0x8f, 0x6e, 0x04, 0x0d, 0x43, 0x90, 0x7f, 0xba, 0x50, 0x81, 0x63, 0x41, 0x09, 0x58, 0x1d, 0x00, 0x10, 0x89, 0x63, 0x21, 0x19, 0x7a, 0xee, - 0x49, 0x49, 0x03, 0x7d, 0xcb, 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0x38, 0xa1, 0x32, 0x19, 0x6a, 0xdc, 0x28, 0x1b, 0x3e, 0x45, 0x59, 0xa1, 0x05, 0x03, - 0x90, 0x7b, 0x3f, 0xff, 0x28, 0x84, 0x20, 0xc8, 0x54, 0x06, 0xb2, 0xff, 0xac, 0xc0, 0x58, 0xd5, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, - 0xad, 0x06, 0x3f, 0xb0, 0xb6, 0x52, 0x5f, 0x6f, 0x2f, 0xa5, 0x32, 0xf1, 0xeb, 0x06, 0x0e, 0xb3, 0x33, 0x71, 0x63, 0xf8, 0x21, 0xff, 0x51, 0xd9, - 0x78, 0x19, 0xd2, 0x11, 0x04, 0xb8, 0x1f, 0x20, 0x04, 0x35, 0x8a, 0x28, 0x11, 0x3f, 0x04, 0x43, 0x48, 0x0b, 0x38, 0x48, 0x1b, 0x20, 0x28, 0x00, - 0x21, 0x28, 0x29, 0x45, 0x40, 0x09, 0x28, 0x00, 0x2f, 0xaf, 0x28, 0x2f, 0x43, 0x28, 0x21, 0x38, 0x28, 0x41, 0x04, 0x18, 0xa9, 0x07, 0x94, 0xff, - 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x3a, 0x3b, 0x3d, 0x4d, 0x46, 0x46, 0x3a, 0x3a, 0x00, 0x12, 0x14, 0x37, 0x3b, 0x3a, 0x3a, 0x3a, 0x3a, 0x01, 0x1c, - 0x2c, 0x41, 0x5c, 0x00, 0x00, 0x43, 0x48, 0x17, 0x0f, 0xea, 0x30, 0xf3, 0x30, 0x06, 0x7d, 0x33, 0x98, 0x17, 0x37, 0x17, 0x06, 0x1f, 0xb3, 0xa8, - 0xf0, 0x7f, 0x65, 0x05, 0xee, 0x3a, 0x4f, 0x48, 0x11, 0x61, 0x00, 0x73, 0xf7, 0x28, 0x89, 0xb8, 0x13, 0x05, 0x71, 0x0d, 0x7f, 0xaf, 0x6f, 0x40, - 0xfb, 0x00, 0x18, 0x11, 0x04, 0xf1, 0x95, 0xbb, 0x70, 0x7f, 0xf3, 0x4e, 0x2f, 0xb8, 0x11, 0x32, 0x11, 0xed, 0x05, 0x0e, 0xc5, 0x38, 0x17, 0x30, - 0x97, 0x67, 0x06, 0x72, 0xfd, 0x38, 0x17, 0x60, 0xd5, 0xb0, 0xb9, 0x0f, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x9b, 0x97, 0x05, 0xd2, 0x71, 0x00, 0x30, - 0x7f, 0x73, 0xfd, 0xde, 0x98, 0x19, 0x32, 0x93, 0xe3, 0x2b, 0xa1, 0x04, 0xfb, 0x99, 0x78, 0x01, 0x38, 0x13, 0x3d, 0xd5, 0x28, 0x21, 0x38, 0x17, - 0x4f, 0x28, 0x19, 0x3e, 0x48, 0x27, 0x30, 0x28, 0x33, 0x0c, 0x42, 0x04, 0x4c, 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x3b, 0x3c, 0x00, - 0x3e, 0x25, 0x26, 0x25, 0x3b, 0x3b, 0x3d, 0x3d, 0x00, 0x41, 0x3c, 0x3b, 0x3b, 0x3b, 0x3b, 0xb6, 0x23, 0x51, 0xb0, 0x27, 0x02, 0x44, 0x28, 0x17, - 0xde, 0x30, 0xe9, 0x06, 0x88, 0x15, 0xaf, 0x5f, 0xaf, 0x6d, 0x2f, 0xb3, 0x72, 0x06, 0x6b, 0x31, 0x06, 0xf0, 0x7f, 0x00, 0x18, 0x17, 0x05, 0xd1, - 0x0d, 0xf0, 0x00, 0x98, 0x17, 0x05, 0x51, 0x95, 0x00, 0x78, 0x17, 0x05, 0x72, 0x13, 0x28, 0x84, 0x6c, 0x9a, 0x21, 0xc9, 0x62, 0x06, 0xb8, 0x17, - 0xc8, 0xb9, 0x7c, 0xb7, 0x06, 0xd8, 0x17, 0xeb, 0x07, 0x73, 0x7f, 0x05, 0xf8, 0x13, 0x78, 0x17, 0x3c, 0x28, 0x1b, 0x40, 0x06, 0x28, 0x13, 0x0f, - 0x34, 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x3c, 0x3d, 0x3f, 0x26, 0x27, 0x26, 0x3c, 0x00, 0x3c, 0x3e, 0x3e, 0x3e, 0x3d, 0x3c, 0x3c, 0x3c, 0x00, - 0x3c, 0xda, 0x25, 0xac, 0x23, 0x00, 0x00, 0x45, 0x80, 0x28, 0x17, 0xf3, 0x30, 0xaf, 0x30, 0xc8, 0x30, 0xda, 0x02, 0x30, 0xc6, 0x30, 0xeb, 0x30, - 0xd6, 0x20, 0x03, 0xaf, 0x11, 0x30, 0x02, 0x5e, 0x05, 0xbf, 0xaf, 0x74, 0x00, 0x2e, 0x2f, 0x29, 0x54, 0x50, 0x2f, 0xa9, 0x74, 0x2f, 0xad, 0x72, - 0x2f, 0x39, 0x62, 0x00, 0x58, 0x75, 0x2c, 0x33, 0x67, 0x05, 0x8d, 0x2f, 0x3f, 0x99, 0x74, 0x00, 0x2d, 0xad, 0x20, 0x83, 0xe9, 0xa0, 0x83, 0x6f, - 0x05, 0x40, 0x85, 0x3f, 0x99, 0x6e, 0x2c, 0x31, 0xf5, 0x38, 0x15, 0x06, 0x31, 0x03, 0x50, 0x7f, 0x31, 0x7f, 0x69, 0x41, 0x81, 0x72, 0x2d, 0xa3, - 0xbc, 0x71, 0x7f, 0x6f, 0x05, 0x6e, 0xaf, 0x50, 0x7f, 0x00, 0x11, 0xff, 0x05, 0x30, 0x7f, 0x23, 0x57, 0x03, 0x7c, 0x5f, 0x97, 0x5f, 0x21, 0x58, - 0x05, 0xb2, 0xf3, 0xbf, 0xff, 0x00, 0xc1, 0xc0, 0xb8, 0xd2, 0x98, 0xd3, 0x4c, 0xd1, 0x00, 0x74, 0xb9, 0x80, 0xbd, 0x74, 0xb9, 0x6c, 0xd0, 0xb7, - 0x05, 0xf8, 0x21, 0x53, 0xa2, 0xfd, 0x06, 0x33, 0x81, 0x53, 0x48, 0x01, 0x06, 0x91, 0xff, 0x38, 0x17, 0x40, 0x3d, 0x28, 0x11, 0x42, 0x04, 0x2d, - 0x00, 0x1f, 0x04, 0x51, 0x35, 0x28, 0x09, 0x35, 0x28, 0x23, 0x31, 0x04, 0x43, 0x28, 0x29, 0x70, 0x33, 0x04, 0xe8, 0x13, 0x07, 0x54, 0xff, 0x10, - 0x0e, 0xd0, 0x7f, 0x3d, 0x40, 0x3c, 0x53, 0x00, 0x4a, 0x4a, 0x3d, 0x3d, 0x40, 0x3f, 0x3f, 0x40, 0x00, 0x3d, 0x3d, 0x3d, 0x3d, 0xa1, 0x2a, 0x8e, - 0x15, 0x14, 0x00, 0x00, 0x46, 0x28, 0x17, 0xe9, 0x28, 0x15, 0xd5, 0x30, 0xea, 0x06, 0x7d, 0x31, 0x3f, 0xaf, 0x3f, 0xab, 0x74, 0x2e, 0xb1, 0x76, - 0x0e, 0x20, 0x7f, 0x4f, 0xad, 0x29, 0x05, 0x6c, 0x2f, 0x9d, 0x73, 0x48, 0x19, 0xb1, 0x0d, 0x77, 0x05, 0x4e, 0xc2, 0xb7, 0x7f, 0xaf, 0x6f, 0x2f, - 0xaf, 0x3f, 0xab, 0x64, 0x2f, 0xbb, 0xd0, 0x87, 0x04, 0xd1, 0x95, 0xad, 0x70, 0x7f, 0xf3, 0x48, 0x9d, 0x64, 0x40, 0x83, 0x52, 0x13, 0xe1, 0x05, - 0x42, 0x13, 0x00, 0x28, 0x84, 0xc9, 0x62, 0x58, 0x62, 0x2b, 0x59, 0x80, 0x06, 0x72, 0xff, 0xac, 0xc0, 0x7c, 0xb7, 0xa0, 0xd1, 0x04, 0x63, 0xd5, - 0x05, 0xf8, 0x0f, 0x08, 0x53, 0x7f, 0x20, 0x00, 0x28, 0x2f, 0x39, 0x52, 0x91, 0xa8, 0x38, 0x2f, 0x29, 0x05, 0x48, 0x17, 0x40, 0x28, 0x1b, 0x42, - 0x04, 0x3e, 0x08, 0x04, 0x32, 0x04, 0x41, 0x28, 0x21, 0x30, 0x04, 0x4f, 0x0a, 0x04, 0x20, 0x00, 0x3e, 0x28, 0x1b, 0x3b, 0x28, 0x33, 0x41, 0xb8, - 0x28, 0x31, 0x4c, 0x04, 0xa8, 0x1f, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x3e, 0x3e, 0x40, 0x00, 0x27, 0x28, 0x27, 0x3e, 0x3e, 0x3f, 0x40, - 0x40, 0x20, 0x3e, 0x3e, 0x20, 0x01, 0xa5, 0x24, 0xb9, 0x20, 0x00, 0x00, 0x00, 0x47, 0x64, 0x17, 0x53, 0xaa, 0x30, 0xbb, 0x00, 0x30, 0xc1, 0x30, - 0xa2, 0x30, 0x71, 0x51, 0x8c, 0x15, 0x54, 0xfd, 0x56, 0x05, 0xfd, 0x35, 0x4e, 0x2f, 0x97, 0x72, 0x2f, 0xad, 0x55, 0x68, 0x2f, 0x2f, 0x4f, 0x2f, - 0xa7, 0x73, 0x4f, 0x33, 0x69, 0x2f, 0xc5, 0xd5, 0x05, 0x77, 0x97, 0x30, 0x73, 0xe9, 0x40, 0x73, 0x65, 0x2d, 0x35, 0x64, 0x2f, 0xa7, 0x55, 0x2d, - 0x60, 0x95, 0x64, 0x2d, 0x45, 0x41, 0x47, 0xb5, 0x6e, 0x4f, 0x4d, 0xb1, 0x04, 0x77, 0x97, 0x70, 0x2f, 0x9f, 0x38, 0x1d, 0x69, 0x00, 0x6b, 0x2f, - 0xb9, 0xad, 0x70, 0x7b, 0x6f, 0xa1, 0x0d, 0x65, 0x2f, 0xd3, 0xd0, 0x8b, 0x6e, 0x04, 0x00, 0x7f, 0xb5, 0x50, 0x81, 0x63, 0x2f, 0xbf, 0x57, 0x9f, - 0x6c, 0x28, 0xaf, 0x27, 0x81, 0x93, 0x7d, 0x7a, 0x41, 0x93, 0x38, 0xb9, 0x3f, 0xd7, 0x3f, 0xd9, 0x3e, 0x65, 0x72, 0x68, 0x51, 0x7d, 0x61, 0x28, - 0xdb, 0x31, 0x3d, 0x91, 0x2d, 0x01, 0x71, 0xbf, 0x50, 0xff, 0xfa, 0x00, 0x00, 0x7d, 0xfe, 0x52, 0x0d, 0x72, 0x0b, 0x70, 0x91, 0x71, 0x1d, 0x3e, - 0xd7, 0x02, 0x30, 0x6d, 0x00, 0x1f, 0xff, 0x17, 0x00, 0x53, 0x65, 0x59, 0x5e, 0x58, 0xaf, 0x68, 0x2d, 0x00, 0x00, 0x3f, 0x96, 0x70, 0x51, 0x3e, - 0x79, 0x1a, 0x04, 0x4f, 0x3b, 0x4e, 0x49, 0x4e, 0x05, 0x93, 0x0b, 0x81, 0xbd, 0x00, 0x24, 0xc6, 0x38, 0xc1, 0xf0, 0xd2, 0x7c, 0xc5, 0x00, 0x20, - 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0xea, 0x06, 0x13, 0x7f, 0x72, 0xeb, 0xb3, 0x7f, 0xeb, 0x06, 0x23, 0x7f, 0x61, 0x63, 0x6f, 0xe2, 0xde, - 0x62, 0x41, 0x3a, 0xa5, 0x6f, 0xc1, 0xf3, 0x78, 0x37, 0xd2, 0x31, 0x02, 0xb8, 0x3d, 0x20, 0x22, 0x04, 0x35, 0x28, 0x0d, 0x3f, 0x04, 0x43, 0x48, - 0x07, 0x38, 0xaa, 0x48, 0x17, 0x20, 0x28, 0x2d, 0x35, 0x28, 0x25, 0x35, 0x28, 0x31, 0x3d, 0xaa, 0x68, 0x27, 0x1e, 0x28, 0x33, 0x35, 0x28, 0x3d, - 0x38, 0x28, 0x35, 0x2d, 0x2e, 0x00, 0x10, 0x48, 0x33, 0x3d, 0x40, 0x0d, 0x0a, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, 0x00, 0x2f, 0x33, 0x4c, - 0x3b, 0x45, 0x3f, 0x3f, 0x2f, 0x00, 0x35, 0x38, 0x2f, 0x3f, 0x3f, 0x3f, 0x3f, 0x96, 0x00, 0x1e, 0xc0, 0x1f, 0x00, 0x00, 0x48, 0x64, 0xb9, 0x00, - 0x30, 0xe2, 0x30, 0xec, 0x30, 0xf3, 0x30, 0xb9, 0x11, 0x30, 0xaf, 0x30, 0x06, 0x3d, 0x33, 0x53, 0x00, 0x6d, 0x2f, 0xa9, 0xaa, 0x36, 0x55, 0x6e, - 0x2f, 0x33, 0x6b, 0x0e, 0x00, 0x7f, 0x4f, 0x48, 0x11, 0x61, 0xbe, 0x29, 0x11, 0x74, 0x4f, 0xa7, 0x05, 0xf1, 0x0d, 0x7f, 0xaf, 0x37, 0xdd, 0x3f, - 0xab, 0x64, 0xee, 0x2f, 0xbb, 0x05, 0xb0, 0x87, 0x70, 0x7f, 0xf3, 0x29, 0x7b, 0x78, 0x11, 0x05, 0xb2, 0x13, 0xaf, 0x00, 0x65, 0x69, 0x64, 0xf1, - 0x68, 0xaf, 0x65, 0x4b, 0x40, 0x51, 0x06, 0x32, 0xfd, 0x00, 0x00, 0xa4, 0xc2, 0xb0, 0xba, 0x00, 0x0c, 0xb8, 0xa4, 0xc2, 0x6c, 0xd0, 0x20, 0x00, - 0x3b, 0xfc, 0xc8, 0x0f, 0x13, 0x7f, 0x77, 0xf9, 0x32, 0x93, 0xe3, 0x2f, 0x43, 0x02, 0xb7, 0xf3, 0x82, 0x01, 0x3f, 0xe5, 0x21, 0x04, 0x3c, 0x04, - 0x3e, 0x28, 0x11, 0x35, 0xb5, 0x28, 0x01, 0x41, 0x48, 0x15, 0x38, 0x05, 0x3e, 0x48, 0x25, 0x30, 0x28, 0x31, 0x1c, 0x42, 0x04, 0x4c, 0x02, 0xe7, - 0xf9, 0x10, 0x00, 0xd4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x40, 0x3f, 0x00, 0x41, 0x28, 0x29, 0x28, 0x40, 0x40, 0x41, 0x41, 0x00, 0x43, 0x3f, 0x40, - 0x40, 0x40, 0x40, 0xf5, 0x26, 0x04, 0xca, 0x16, 0x00, 0x00, 0x49, 0x28, 0x17, 0xbf, 0x30, 0x00, 0xf4, 0x30, 0xed, 0x30, 0xdd, 0x30, 0xea, 0x30, - 0x1a, 0x30, 0x57, 0xb9, 0x04, 0x5f, 0x14, 0x00, 0xc8, 0x17, 0x74, 0x2f, 0x8f, 0x76, 0xb7, 0x2f, 0x9d, 0x6f, 0x2f, 0x37, 0x38, 0x21, 0x27, 0x06, - 0xe0, 0x7f, 0x05, 0xdd, 0xaf, 0xb7, 0x97, 0xd5, 0x3f, 0x8d, 0x31, 0x0d, 0x77, 0x05, 0xa0, 0x8d, 0x54, 0x2f, 0xff, 0x72, 0x4f, 0xf7, 0x7e, 0x74, - 0x4f, 0x89, 0x3f, 0xff, 0x98, 0x1d, 0x05, 0x11, 0x9b, 0x00, 0x70, 0x7f, 0x58, 0x1f, 0x74, 0x20, 0x00, 0xe1, 0x04, 0xe1, 0x9b, 0xaf, 0x65, 0x54, - 0x58, 0x2b, 0x00, 0x59, 0x57, 0x7f, 0xe2, 0x6c, 0x14, 0x5c, 0xb9, 0x04, 0x8f, 0x86, 0x75, 0x3a, 0x53, 0x05, 0xf8, 0x17, 0xc0, 0xd0, 0x00, 0x0c, - 0xbe, 0x5c, 0xb8, 0xf4, 0xd3, 0x20, 0x00, 0x0e, 0xc0, 0xc9, 0x29, 0xbc, 0x07, 0x13, 0x7f, 0x06, 0xf3, 0xff, 0x38, 0x19, 0x74, 0xb4, 0xa2, 0x95, - 0xf3, 0x62, 0x95, 0x04, 0x58, 0x21, 0x21, 0x27, 0xf9, 0x30, 0x04, 0x15, 0x32, 0x04, 0x40, 0x28, 0x1d, 0x3f, 0x48, 0x21, 0x4c, 0x48, 0x1f, 0x15, - 0x38, 0x04, 0x39, 0x28, 0x1f, 0x3a, 0x20, 0x17, 0x30, 0x20, 0x09, 0xc0, 0x0d, 0xb4, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x41, 0x41, 0x42, 0x3c, 0x53, - 0x52, 0x84, 0x20, 0x05, 0x42, 0x44, 0x41, 0x41, 0x20, 0x01, 0x09, 0x20, 0x04, 0xda, 0x1d, 0x00, 0x00, 0x4a, 0x28, 0x17, 0xf4, 0x30, 0x04, 0xa7, - 0x30, 0xeb, 0x30, 0xc9, 0x28, 0x1b, 0xd5, 0x30, 0x0b, 0xb9, 0x30, 0xaf, 0x30, 0x05, 0xdd, 0x37, 0x53, 0x28, 0x13, 0x36, 0x99, 0x5c, 0x64, 0x2f, - 0xb3, 0x6f, 0x28, 0x1f, 0x05, 0xff, 0xb3, 0x06, 0xf0, 0x7f, 0x4f, 0x00, 0x55, 0x62, 0x2f, 0x97, 0x61, 0x2f, 0x95, 0x74, 0x4f, 0xa7, 0x77, 0xa1, - 0x0d, 0x7e, 0x77, 0x05, 0x2d, 0xc1, 0xb8, 0x97, 0x3f, 0xab, 0x78, 0x11, 0x05, 0x71, 0x95, 0x79, 0x17, 0xf3, 0xe0, 0x49, 0x17, 0x78, 0x0f, 0x05, - 0x92, 0x13, 0xaf, 0x65, 0xf4, 0x7e, 0x14, 0x00, 0x5c, 0xb7, 0x5f, 0x1b, 0x6d, 0x2b, 0x59, 0xaf, 0x18, 0x65, 0x4b, 0x51, 0x05, 0xd2, 0xfd, 0x38, - 0x17, 0xa0, 0xbc, 0x74, 0x00, 0xb9, 0xe4, 0xb4, 0x6d, 0xb8, 0xa4, 0xc2, 0x6c, 0x07, 0xd0, 0x20, 0x00, 0xfc, 0xc8, 0x05, 0xff, 0xaf, 0x08, 0x13, - 0x7f, 0x38, 0x19, 0x58, 0x72, 0x6b, 0x2f, 0xe3, 0x04, 0x88, 0x11, 0x78, 0x17, 0x32, 0x04, 0x35, 0xac, 0x28, 0x15, 0x34, 0x28, 0x11, 0x3e, 0x28, - 0x1f, 0x38, 0x13, 0x30, 0x04, 0x45, 0x4f, 0x28, 0x13, 0x3e, 0x04, 0x31, 0x28, 0x25, 0x30, 0x28, 0x25, 0x70, 0x42, 0x28, 0x2b, 0x10, 0x04, 0x74, - 0xff, 0x10, 0x06, 0xf0, 0xff, 0x42, 0x42, 0x43, 0x29, 0x22, 0x2a, 0x29, 0x20, 0x05, 0x43, 0x42, 0x42, 0x30, 0x01, 0x6a, 0x00, 0x28, 0x14, 0x2b, - 0x00, 0x00, 0x4b, 0x64, 0xbf, 0x0e, 0x30, 0xf3, 0x30, 0xdc, 0x28, 0x11, 0x05, 0xf5, 0x0f, 0x9e, 0xaf, 0x61, 0x3e, 0x00, 0x6d, 0x27, 0x1b, 0x38, - 0x13, 0x0e, 0x30, 0x7f, 0xd8, 0x17, 0x91, 0x0d, 0x77, 0xf8, 0x05, 0x6e, 0xb6, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x00, 0x38, 0x17, 0x05, 0xb2, - 0x13, 0x66, 0x57, 0xe2, 0x10, 0x6c, 0x2b, 0x59, 0x06, 0x72, 0xfd, 0x00, 0x00, 0xd0, 0xd0, 0x0f, 0xf4, 0xbc, 0x04, 0xd5, 0x06, 0x18, 0x0f, 0x08, - 0x33, 0x7f, 0x05, 0xb8, 0x0f, 0x7f, 0xff, 0x5e, 0x22, 0x28, 0x05, 0x3c, 0x28, 0x01, 0x06, 0x38, 0x13, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, - 0x43, 0x04, 0x43, 0x44, 0x2a, 0x2b, 0x2a, 0x20, 0x05, 0x44, 0x45, 0x20, 0x43, 0x43, 0x20, 0x01, 0x7c, 0x25, 0x76, 0x1d, 0x00, 0x20, 0x00, 0x4c, - 0x28, 0x17, 0xbf, 0x30, 0xfc, 0x30, 0xeb, 0x20, 0x30, 0xb9, 0x20, 0x07, 0xf3, 0x30, 0x71, 0x51, 0x8c, 0x15, 0x54, 0xfd, 0x56, 0x05, 0xf8, 0x17, - 0x74, 0x2f, 0x2f, 0x72, 0x4f, 0x31, 0x78, 0x61, 0x2e, 0xb5, 0x06, 0x18, 0x97, 0x06, 0xb0, 0x7f, 0x3f, 0xaf, 0x70, 0x00, 0x75, 0xbd, 0x48, 0x1d, - 0x69, 0x4d, 0x2b, 0x05, 0xd1, 0x11, 0x90, 0x7f, 0x50, 0x81, 0x63, 0x29, 0xa7, 0xb6, 0x5f, 0xb7, 0x6c, 0x05, 0x40, 0x8b, 0x50, 0xff, 0xfa, 0x00, - 0x00, 0x7d, 0x59, 0x23, 0x72, 0xa8, 0x62, 0x1b, 0x69, 0x49, 0x37, 0xe1, 0x04, 0x22, 0x1d, 0x91, 0x97, 0x7c, 0x06, 0x97, 0xaf, 0x65, 0x66, 0x57, - 0x06, 0x12, 0xf9, 0x5f, 0xff, 0xc0, 0x00, 0xd0, 0xc0, 0xd0, 0x74, 0xb9, 0x20, 0x00, 0xf5, 0x06, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x5b, 0x97, - 0x71, 0x63, 0x6a, 0xef, 0x2f, 0xb9, 0x06, 0x3c, 0x17, 0x31, 0xe5, 0xe1, 0x41, 0xe5, 0x32, 0x7b, 0x58, 0x1b, 0xd2, 0x13, 0x88, 0x04, 0x98, 0x21, - 0x20, 0x04, 0x35, 0x28, 0x0f, 0x3f, 0x04, 0x43, 0xaa, 0x48, 0x09, 0x38, 0x48, 0x19, 0x20, 0x48, 0x2d, 0x42, 0x28, 0x31, 0x40, 0x8f, 0x48, 0x19, - 0x30, 0x04, 0x3d, 0x04, 0x88, 0x1b, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x28, 0x0f, 0x10, 0x4e, 0x39, 0x47, 0x28, 0x15, 0x45, 0x39, 0x44, - 0x44, 0x80, 0x20, 0x01, 0xab, 0x27, 0xf6, 0x22, 0x00, 0x00, 0x4d, 0x09, 0x64, 0xc8, 0x30, 0xe0, 0x28, 0x13, 0xaf, 0x30, 0x06, 0x7d, 0x31, 0x56, - 0x54, 0x2f, 0xa9, 0x6d, 0x2f, 0x2d, 0x6b, 0x06, 0x6d, 0xb0, 0x06, 0xf0, 0x7f, 0x4f, 0xbd, 0x48, 0x11, 0x61, 0x49, 0x15, 0x3f, 0xa7, 0x05, 0xf1, - 0x0d, 0x7f, 0xaf, 0x6f, 0x2f, 0xaf, 0xbb, 0x3f, 0xab, 0x64, 0x2f, 0xbb, 0x05, 0xb0, 0x87, 0x70, 0x7f, 0xf3, 0x2a, 0x11, 0x98, 0x11, 0x80, 0x05, - 0x92, 0x13, 0x58, 0x62, 0x28, 0x67, 0xaf, 0x65, 0x4b, 0x40, 0x51, 0x06, 0x72, 0xff, 0xb0, 0xd1, 0xa4, 0xc2, 0x6c, 0xd0, 0x0e, 0x20, 0x00, 0xfc, - 0xc8, 0x0e, 0xf3, 0x7f, 0x78, 0x11, 0x32, 0x8d, 0xe3, 0xe0, 0x2f, 0x3f, 0x04, 0x98, 0x0b, 0xbf, 0xff, 0x22, 0x04, 0x3e, 0x04, 0x3c, 0xd5, 0x28, - 0x19, 0x38, 0x0f, 0x4f, 0x28, 0x11, 0x3e, 0x48, 0x1f, 0x30, 0x48, 0x0f, 0x70, 0x4c, 0x04, 0x88, 0x0d, 0x0f, 0x94, 0xff, 0x10, 0x06, 0xf0, 0xff, - 0x45, 0x45, 0x4b, 0x2c, 0x00, 0x2d, 0x2c, 0x45, 0x45, 0x49, 0x47, 0x47, 0x45, 0x40, 0x45, 0x20, 0x01, 0x2d, 0x28, 0x6b, 0x3c, 0x00, 0x00, 0x41, - 0x4e, 0x28, 0x17, 0xa5, 0x30, 0xfc, 0x30, 0xe9, 0x06, 0xa8, 0x17, 0x7f, 0x75, 0x47, 0x17, 0x06, 0x68, 0x16, 0x48, 0x97, 0x06, 0xb0, 0x81, 0xf8, - 0x17, 0x05, 0xf1, 0x0d, 0x00, 0x78, 0x17, 0xe1, 0x05, 0x71, 0x95, 0x00, 0x58, 0x17, 0x05, 0x92, 0x13, 0xfe, 0x56, 0xc9, 0x62, 0x06, 0x7b, 0x13, - 0x86, 0x3f, 0xff, 0x34, 0xd2, 0x7c, 0xb7, 0x06, 0x98, 0x15, 0x5b, 0x97, 0x65, 0xf5, 0x06, 0xa3, 0x81, 0x73, 0xff, 0x06, 0x58, 0x15, 0x38, 0x17, - 0x43, 0x28, 0x07, 0x4c, 0x06, 0x88, 0x19, 0xc0, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x46, 0x46, 0x4c, 0x2e, 0x2e, 0x2d, 0x01, 0x46, 0x46, - 0x47, 0x49, 0x48, 0x46, 0x46, 0x20, 0x01, 0x0c, 0x8a, 0x26, 0xbf, 0x1a, 0x2e, 0xad, 0x28, 0x17, 0xf4, 0x30, 0x14, 0xa7, 0x30, 0xea, 0x06, 0xa8, - 0x17, 0x76, 0x2e, 0xb1, 0x72, 0x00, 0x7b, 0x27, 0x06, 0x8c, 0xaf, 0x50, 0x7f, 0x06, 0x78, 0x98, 0xf8, 0x17, 0x77, 0x05, 0xe0, 0x8d, 0x00, 0x78, - 0x17, 0xe0, 0x05, 0x71, 0x15, 0x00, 0x58, 0x17, 0x05, 0x91, 0x93, 0x79, 0x72, 0xf4, 0x7e, 0x14, 0x40, 0x5c, 0x06, 0x98, 0x19, 0xb8, 0xd2, 0xa0, - 0xbc, 0xac, 0xb9, 0xf0, 0x06, 0x98, 0x19, 0x06, 0xf2, 0xff, 0x73, 0xff, 0x06, 0x98, 0x17, 0x32, 0x04, 0x35, 0x04, 0x70, 0x40, 0x06, 0xa8, 0x17, - 0x07, 0x54, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x47, 0x48, 0x4f, 0x2f, 0x00, 0x2f, 0x2e, 0x47, 0x47, 0x4f, 0x4b, 0x46, 0x48, 0x00, 0x47, 0x47, 0x47, - 0x47, 0x6e, 0x28, 0x8a, 0x19, 0x00, 0x00, 0x00, 0x50, 0x64, 0xc1, 0x30, 0xe5, 0x30, 0x15, 0xe1, 0x30, 0xcb, 0x06, 0xa8, 0x17, 0x79, 0x2f, 0xaf, - 0x6d, 0x2e, 0xb5, 0x5d, 0x6e, 0x06, 0x48, 0x1b, 0x54, 0x4f, 0x2b, 0x70, 0x81, 0x07, 0x18, 0x17, 0x6a, 0x05, 0xe0, 0x8b, 0xf5, 0x00, 0x78, 0x17, - 0x90, 0x87, 0x04, 0xd9, 0xb1, 0x00, 0x58, 0x17, 0x69, 0x42, 0x13, 0xe9, 0x05, 0x21, 0x91, 0x08, 0xcb, 0x79, 0x0e, 0x66, 0x06, 0x98, 0x15, 0x00, - 0x00, 0x9c, 0x1a, 0xd2, 0x58, 0xba, 0x06, 0x98, 0x15, 0x3f, 0xaf, 0x6a, 0x2f, 0x9d, 0x65, 0xf0, 0x06, 0x82, 0xff, 0x71, 0xeb, 0x33, 0xff, 0x06, - 0x38, 0x1b, 0x22, 0x04, 0x4e, 0x04, 0x5c, 0x3c, 0x28, 0x19, 0x3d, 0x06, 0x68, 0x19, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x48, 0x49, 0x00, - 0x4a, 0x2b, 0x2c, 0x2b, 0x48, 0x48, 0x46, 0x46, 0x00, 0x49, 0x49, 0x48, 0x48, 0x48, 0x48, 0xa3, 0x28, 0x00, 0x99, 0x2e, 0x00, 0x00, 0x51, 0x64, - 0xc8, 0x30, 0x00, 0xa5, 0x30, 0xf4, 0x30, 0xa1, 0x30, 0x71, 0x51, 0x0a, 0x8c, 0x54, 0xfd, 0x56, 0x06, 0x3f, 0xaf, 0x75, 0x2f, 0xb1, 0x61, 0xf6, - 0x06, 0xac, 0xaf, 0x38, 0x15, 0x06, 0x90, 0x81, 0x3f, 0xaf, 0x70, 0x29, 0x19, 0x38, 0x1d, 0x69, 0x23, 0x00, 0x6b, 0x4f, 0xab, 0x75, 0x00, 0x77, - 0x05, 0x81, 0x11, 0x90, 0x7f, 0xbd, 0x50, 0x81, 0x63, 0x28, 0xa3, 0x98, 0x1d, 0x05, 0x11, 0x9b, 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0xd0, 0x58, 0x1d, - 0x32, 0x19, 0xe1, 0x04, 0xef, 0xc8, 0x79, 0x72, 0xe6, 0x74, 0xc0, 0x06, 0x72, 0xfb, 0x3f, 0xff, 0x2c, 0xd2, 0x14, 0xbc, 0x20, 0x00, 0x02, 0xf5, - 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x72, 0xff, 0x65, 0xfa, 0x06, 0xa3, 0x81, 0x73, 0xff, 0x78, 0x13, 0xd2, 0x0b, 0x05, 0x18, 0x19, 0x20, 0x28, - 0x13, 0x41, 0x0a, 0x04, 0x3f, 0x04, 0x43, 0x48, 0x0b, 0x38, 0x48, 0x1b, 0x20, 0x8e, 0x28, 0x2d, 0x4b, 0x04, 0x32, 0x28, 0x25, 0x0d, 0x34, 0xff, - 0x10, 0x0e, 0xd0, 0x7f, 0x49, 0x04, 0x47, 0x4d, 0x51, 0x47, 0x48, 0x28, 0x13, 0x4a, 0x3a, 0x00, 0x47, 0x49, 0x49, 0x49, 0x49, 0xc6, 0x24, 0x2a, - 0x40, 0x43, 0x2e, 0x2d, 0x64, 0xa6, 0x30, 0xc9, 0x30, 0xe0, 0x0a, 0x30, 0xeb, 0x30, 0xc8, 0x06, 0x68, 0x19, 0x55, 0x2e, 0xa1, 0x6d, 0xb7, 0x2f, - 0xaf, 0x72, 0x2f, 0x2f, 0x06, 0x3d, 0xb5, 0x4f, 0x2f, 0x9f, 0x30, 0x81, 0x38, 0x1d, 0xbf, 0x30, 0x83, 0x69, 0x2f, 0xab, 0x06, 0xd8, 0x17, 0xb1, - 0x11, 0x30, 0x8d, 0x04, 0xdf, 0x33, 0x00, 0x58, 0x17, 0xf0, 0xb1, 0x95, 0x06, 0x78, 0x17, 0xd1, 0x07, 0x04, 0x7a, 0x39, 0x4c, 0x4e, 0xb7, 0x5f, - 0x02, 0x46, 0x7a, 0x14, 0x5c, 0x79, 0x72, 0x06, 0x5b, 0x19, 0xb0, 0x00, 0xc6, 0xdc, 0xb4, 0x34, 0xbb, 0x74, 0xb9, 0xb8, 0x5a, 0xd2, 0x06, 0x58, - 0x1d, 0x4f, 0x2f, 0xa9, 0x52, 0xff, 0x65, 0x62, 0xff, 0xeb, 0xb0, 0x06, 0x23, 0xff, 0xfa, 0x81, 0xe5, 0x05, 0xf8, 0x1f, 0x23, 0x04, 0x34, 0x04, - 0x46, 0x3c, 0x28, 0x15, 0x40, 0x04, 0x42, 0x28, 0x1f, 0x38, 0x15, 0x4f, 0xb8, 0x28, 0x17, 0x40, 0x00, 0x28, 0x2d, 0x0c, 0x54, 0xff, 0x10, 0x0e, - 0xf0, 0x7f, 0x4a, 0x4a, 0x34, 0x00, 0x52, 0x49, 0x49, 0x4a, 0x4a, 0x32, 0x4c, 0x4a, 0x40, 0x4a, 0x30, 0x01, 0x6a, 0x28, 0xd1, 0x25, 0x00, 0x00, - 0x40, 0x53, 0x28, 0x17, 0xea, 0x30, 0xe4, 0x30, 0xce, 0x30, 0x00, 0xd5, 0x30, 0xb9, 0x30, 0xaf, 0x30, 0xde, 0x5d, 0x82, 0x06, 0x18, 0x17, 0x6c, - 0x00, 0x27, 0x00, 0x79, 0x2f, 0xaf, 0x6e, 0x8f, 0x2f, 0xb9, 0x76, 0x00, 0x73, 0x2f, 0x33, 0x05, 0xf8, 0x17, 0x3f, 0xa9, 0x06, 0x90, 0x7f, 0xa8, - 0x3f, 0xa7, 0x61, 0x20, 0xf7, 0x74, 0x48, 0x13, 0x6c, 0x00, 0x6a, 0xb5, 0x61, 0x0b, 0x77, 0x05, 0x41, 0x0b, 0x3f, 0xaf, 0x67, 0x2f, 0xa9, 0x6f, - 0x28, 0x7f, 0xb7, 0x3f, 0xa5, 0x64, 0x2f, 0xb5, 0x50, 0x87, 0x27, 0x80, 0x89, 0x04, 0xb1, 0x95, 0x70, 0x7f, 0x74, 0xf3, 0x28, 0xff, 0x98, 0x11, - 0x3e, 0x2f, 0xe1, 0x05, 0x42, 0x11, 0x4c, 0x4e, 0x00, 0xcc, 0x91, 0x6c, 0x62, 0xfa, 0x8b, 0x2b, 0x59, 0x08, 0xaf, 0x65, 0x4b, 0x51, 0x06, 0x12, - 0xff, 0xb8, 0xc6, 0xac, 0x00, 0xb9, 0x7c, 0xc5, 0x89, 0xb1, 0xa4, 0xc2, 0x6c, 0x05, 0xd0, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x1b, 0x17, 0x65, 0xa2, - 0x73, 0xfb, 0x06, 0x13, 0x7f, 0x51, 0xeb, 0xb3, 0xfd, 0x78, 0x19, 0x32, 0x95, 0xe3, 0x2b, 0xaf, 0x04, 0x98, 0x13, 0x88, 0x58, 0x17, 0x3b, 0x04, - 0x4c, 0x28, 0x0b, 0x3d, 0x04, 0x3e, 0x2a, 0x04, 0x32, 0xa8, 0x19, 0x3e, 0x48, 0x11, 0x30, 0x28, 0x2b, 0x42, 0xe0, 0x20, 0x1f, 0x0c, 0x94, 0xff, - 0x10, 0x0e, 0xf0, 0x7f, 0x4b, 0x4b, 0x35, 0x30, 0x30, 0x01, 0x2f, 0x4b, 0x4b, 0x33, 0x4d, 0x4b, 0x4b, 0x30, 0x01, 0x00, 0xa0, 0x26, 0x64, 0x22, - 0x00, 0x00, 0x54, 0x64, 0x00, 0xf4, 0x30, 0xe9, 0x30, 0xb8, 0x30, 0xfc, 0x30, 0x11, 0xdf, 0x30, 0xeb, 0x06, 0x28, 0x15, 0x00, 0x00, 0x56, 0x47, - 0x15, 0xad, 0x36, 0x8d, 0x6d, 0x2f, 0xab, 0x72, 0x0e, 0x00, 0x7f, 0xd8, 0x17, 0x57, 0x06, 0x01, 0x0d, 0xf4, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, - 0x00, 0x38, 0x17, 0x72, 0x13, 0xed, 0x05, 0x22, 0x13, 0x17, 0x5f, 0x00, 0xc9, 0x62, 0xfa, 0x57, 0x73, 0x7c, 0x14, 0x5c, 0x80, 0x06, 0x32, 0xfd, - 0x00, 0x00, 0x14, 0xbe, 0x7c, 0xb7, 0x14, 0x07, 0xb5, 0xf8, 0xbb, 0x74, 0xb9, 0x06, 0x38, 0x15, 0x08, 0x13, 0x7f, 0x05, 0xd8, 0x15, 0x10, 0x00, - 0x00, 0x12, 0x47, 0xfd, 0x34, 0x04, 0x38, 0x04, 0x5c, 0x3c, 0x20, 0x03, 0x40, 0x06, 0x08, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x4c, - 0x4c, 0x08, 0x50, 0x31, 0x31, 0x30, 0x20, 0x05, 0x4e, 0x07, 0x4c, 0x43, 0x4c, 0x20, 0x01, 0xed, 0x27, 0xbd, 0x1c, 0x2f, 0xad, 0x28, 0x17, 0x44, - 0xa9, 0x28, 0x11, 0xb4, 0x30, 0xb0, 0x28, 0x1f, 0xfc, 0x30, 0x55, 0xc9, 0x06, 0x08, 0x1b, 0x56, 0x2f, 0xa5, 0x6c, 0x2e, 0xb1, 0x6f, 0x2e, 0xb5, - 0x7f, 0x72, 0x48, 0x21, 0x0d, 0xd0, 0x7f, 0xf8, 0x17, 0x05, 0xf1, 0x0d, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0x00, 0x58, 0x17, 0xa0, 0xf2, 0x13, - 0x6f, 0x04, 0x8f, 0xc6, 0x0f, 0x4f, 0x14, 0x5c, 0xa0, 0x04, 0x52, 0x3c, 0x68, 0xd2, 0x52, 0x06, 0x58, 0x17, 0xfc, 0xbc, 0x00, 0xe0, 0xac, 0xf8, - 0xad, 0x7c, 0xb7, 0xdc, 0xb4, 0xe8, 0x06, 0x58, 0x17, 0x06, 0x12, 0x71, 0x00, 0xf3, 0xff, 0x6f, 0x05, 0xc8, 0x1b, 0x12, 0x04, 0x3e, 0xaf, 0x28, - 0x19, 0x33, 0x20, 0x05, 0x33, 0x28, 0x15, 0x38, 0x21, 0x05, 0xd8, 0x19, 0x0e, 0xf4, 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x4d, 0x4d, 0x51, 0x32, - 0x32, 0x31, 0x4d, 0x02, 0x4d, 0x53, 0x4f, 0x08, 0x4d, 0x4d, 0x20, 0x01, 0xa1, 0x1a, 0x22, 0xa8, 0x1f, 0x2f, 0xad, 0x48, 0x17, 0xed, 0x28, 0x15, - 0xc0, 0xef, 0x06, 0x08, 0x11, 0xb8, 0x17, 0x38, 0x15, 0x64, 0x2f, 0xb7, 0x0e, 0x10, 0x7f, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x0d, 0xe8, 0x00, 0xb8, - 0x17, 0x05, 0x31, 0x95, 0x00, 0x58, 0x17, 0xf3, 0x05, 0x82, 0x13, 0x83, 0x6c, 0x1b, 0x06, 0x6d, 0x3c, 0x68, 0xbe, 0x8f, 0x06, 0x58, 0x15, 0x38, - 0x17, 0x5c, 0x07, 0xb8, 0xf8, 0xad, 0xe4, 0xb2, 0x06, 0x58, 0x15, 0x07, 0xf3, 0x7f, 0x05, 0xb8, 0x11, 0xdc, 0xb8, 0x17, 0x38, 0x15, 0x3e, 0x06, - 0x08, 0x13, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x4e, 0x4e, 0x00, 0x52, 0x33, 0x33, 0x32, 0x4e, 0x4e, 0x51, 0x50, 0x10, 0x09, 0x4e, 0x4e, - 0x20, 0x01, 0x1c, 0x2a, 0x5f, 0x1c, 0xc5, 0x2c, 0x2d, 0x68, 0x17, 0xcd, 0x30, 0xb8, 0x06, 0xa8, 0x17, 0x72, 0x6e, 0xad, 0x16, 0x7a, 0x00, 0x68, - 0x06, 0xc0, 0x7f, 0x6a, 0x07, 0x48, 0x17, 0x71, 0x0d, 0x73, 0x39, 0x00, 0x63, 0x05, 0x21, 0x0f, 0x00, 0x98, 0x17, 0x71, 0x95, 0x7e, 0x01, 0x06, - 0x18, 0x17, 0xe0, 0x32, 0x13, 0x38, 0x29, 0x05, 0x12, 0x13, 0x83, 0x6c, 0x57, 0x7f, 0x85, 0x14, 0x6d, 0xc0, 0x4e, 0x06, 0x78, 0x17, 0xf4, 0x28, - 0x17, 0x24, 0xb1, 0x3f, 0xdc, 0xc2, 0x06, 0xb8, 0x17, 0x93, 0x7f, 0x06, 0x13, 0x01, 0xf3, 0xff, 0x05, 0xf8, 0x19, 0x38, 0x17, 0x41, 0x40, 0x28, - 0x1b, 0x3d, 0x04, 0x35, 0x04, 0x36, 0x06, 0x68, 0x17, 0xc0, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x4f, 0x4f, 0x53, 0x34, 0x34, 0x33, 0x01, - 0x4f, 0x4f, 0x52, 0x51, 0x0a, 0x4f, 0x4f, 0x20, 0x01, 0x00, 0xbe, 0x24, 0xe2, 0x1b, 0x00, 0x00, 0x58, 0x64, 0x14, 0xe4, 0x30, 0xde, 0x28, 0x17, - 0xfb, 0x28, 0x19, 0xcd, 0x30, 0x00, 0xc4, 0x30, 0xea, 0x81, 0xbb, 0x6c, 0xa1, 0x7b, 0x2a, 0x3a, 0x53, 0x05, 0x9f, 0xb8, 0x59, 0x2f, 0xa5, 0x6d, - 0x2f, 0xa9, 0x6c, 0x0d, 0x00, 0x2d, 0x00, 0x4e, 0x2e, 0xbb, 0x3e, 0xb5, 0x74, 0x2f, 0x3d, 0xac, 0x05, 0x7f, 0xba, 0x49, 0x80, 0x7f, 0x69, 0x2f, - 0x39, 0x06, 0x1e, 0x33, 0x41, 0x00, 0x6a, 0x75, 0x28, 0x11, 0x3f, 0xad, 0x6f, 0x21, 0x07, 0x65, 0x2d, 0x2d, 0x20, 0x2e, 0x00, 0x4b, 0x4d, 0x33, - 0x69, 0x28, 0x2b, 0x5f, 0x41, 0x30, 0x13, 0x4a, 0xb5, 0x00, 0x01, 0x27, 0x7a, 0x41, 0x2d, 0x02, 0xff, 0xcc, 0x43, 0x2f, 0xab, 0x72, 0x28, 0x81, - 0xd7, 0x39, 0x99, 0x3f, 0x9d, 0x72, 0x48, 0x23, 0x20, 0xe0, 0x97, 0x30, 0x11, 0x90, 0x81, 0x55, 0x6f, 0xa1, 0xab, 0x63, 0x02, 0xef, 0xcf, 0x44, - 0x40, 0xe7, 0x74, 0x40, 0x77, 0xbf, 0x31, 0x07, 0x20, 0x2e, 0xb5, 0x31, 0x11, 0x38, 0x27, 0x70, 0x79, 0x58, 0x2d, 0x92, 0x29, 0xa0, 0x50, 0x7f, - 0xe9, 0x03, 0x42, 0x2b, 0x9a, 0x4e, 0x6c, 0x9a, 0x14, 0x00, 0x5c, 0x2d, 0x00, 0x85, 0x6d, 0x85, 0x6d, 0x28, 0x60, 0x83, 0x32, 0xff, 0x05, 0xb2, - 0xfd, 0x00, 0x00, 0x7c, 0xc5, 0xd0, 0x40, 0xb9, 0x38, 0x19, 0x24, 0xb1, 0x20, 0xce, 0x20, 0x00, 0x03, 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x05, - 0xbf, 0xb6, 0x92, 0x57, 0x18, 0x69, 0x00, 0xeb, 0x06, 0x2e, 0xaf, 0x06, 0xf3, 0xff, 0x2f, 0x04, 0x3c, 0xa3, 0x28, 0x09, 0x3b, 0x28, 0x1d, 0x2d, - 0x00, 0x1d, 0x28, 0x1b, 0x38, 0x1f, 0x44, 0x46, 0x28, 0x1d, 0x38, 0x04, 0x39, 0x28, 0x1d, 0x30, 0x04, 0x68, 0x32, 0x28, 0x17, 0x38, 0x35, 0x3e, - 0x20, 0x27, 0x3d, 0x04, 0x4b, 0xa0, 0x40, 0x15, 0x3e, 0x28, 0x3d, 0x40, 0x04, 0x43, 0x04, 0x33, 0xe0, 0x03, 0x28, 0x2f, 0x06, 0xf4, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x50, 0x50, 0x0d, 0x02, 0x04, 0x00, 0x05, 0x50, 0x50, 0x13, 0x52, 0x52, 0x50, 0x50, 0x8c, 0x30, 0x01, 0x2f, 0x5c, 0x2f, 0x27, - 0x95, 0x28, 0x17, 0xed, 0x30, 0x00, 0xb9, 0x30, 0xe9, 0x30, 0xf4, 0x30, 0xea, 0x30, 0xea, 0x06, 0x3d, 0x33, 0x38, 0x17, 0x3f, 0xaf, 0x73, 0x4f, - 0x35, 0x76, 0x2f, 0x3b, 0x27, 0xf3, 0x05, 0xcf, 0xb5, 0x38, 0x17, 0xd0, 0x7f, 0x05, 0xe9, 0xaf, 0x00, 0x62, 0x40, 0xf9, 0x37, 0x1b, 0xde, 0x57, - 0xfd, 0x91, 0x0d, 0x77, 0x05, 0x20, 0x8d, 0x7f, 0xaf, 0x5e, 0x31, 0x3f, 0xb1, 0x69, 0xfc, 0x00, 0x00, 0x87, 0x04, 0xb1, 0x95, 0x70, 0x7f, 0x38, - 0x07, 0xb8, 0x01, 0x05, 0x71, 0x93, 0xc5, 0x96, 0x00, 0x57, 0x7f, 0xaf, 0x65, 0xc9, 0x62, 0x2b, 0x59, 0x20, 0x14, 0x5c, 0x06, 0x32, 0xff, 0x7c, - 0xc5, 0x5c, 0xb8, 0xac, 0x00, 0xc2, 0x7c, 0xb7, 0x14, 0xbe, 0x20, 0x00, 0xfc, 0x71, 0xc8, 0x06, 0x1a, 0x98, 0x00, 0x11, 0xe9, 0x06, 0xf3, 0xff, - 0x20, 0x00, 0x28, 0x4b, 0x17, 0xaa, 0x32, 0x95, 0xe3, 0x2f, 0x4d, 0x29, 0x04, 0xe8, 0x17, 0x40, 0x28, 0x13, 0x41, 0xd1, 0x28, 0x19, 0x38, 0x03, - 0x41, 0x28, 0x11, 0x30, 0x04, 0x4f, 0x47, 0xfb, 0x57, 0x31, 0x40, 0x13, 0x41, 0x28, 0x17, 0x4c, 0x03, 0x27, 0xff, 0x08, 0x74, 0xff, 0x10, 0x0e, - 0xf0, 0x7f, 0x00, 0x51, 0x51, 0x0e, 0x0e, 0x0f, 0x34, 0x51, 0x51, 0x04, 0x14, 0x53, 0x53, 0x51, 0x51, 0x20, 0x01, 0xf8, 0x28, 0x00, 0x56, 0x1c, - 0x00, 0x00, 0x5a, 0x64, 0xe6, 0x30, 0x0e, 0xc0, 0x30, 0xe4, 0x30, 0x3d, 0x27, 0x06, 0x38, 0x15, 0x3c, 0x2f, 0x65, 0xde, 0x28, 0x0d, 0x3f, 0x1f, - 0x79, 0x06, 0x30, 0x7e, 0xe7, 0x97, 0x5e, 0xab, 0x9f, 0xbd, 0x20, 0x22, 0x00, 0x6a, 0x2f, 0xcf, 0x69, 0x00, 0x66, 0x04, 0xad, 0xaf, 0xfc, 0xab, - 0x47, 0x8b, 0x73, 0x2f, 0xb3, 0x68, 0x2f, 0x83, 0x73, 0x00, 0x0f, 0xab, 0x50, 0x13, 0x5e, 0x47, 0x2f, 0x9f, 0x62, 0x2f, 0xdb, 0x3f, 0x21, 0x04, - 0xb8, 0x17, 0xd0, 0x7b, 0x61, 0xaa, 0x2f, 0xbf, 0x45, 0x28, 0xb9, 0x72, 0x2f, 0xc5, 0x69, 0x20, 0xa1, 0x61, 0xf7, 0x04, 0xe8, 0x17, 0x50, 0xf9, - 0x38, 0x23, 0x70, 0x7d, 0x48, 0x40, 0xf7, 0x36, 0x27, 0x04, 0x10, 0x7b, 0x84, 0x3f, 0xff, 0xb9, 0x72, 0x2a, 0x59, 0x06, 0x92, 0xfd, 0x00, 0x00, - 0x00, 0x20, 0xc7, 0xdc, 0xd0, 0x78, 0xc7, 0x20, 0x00, 0x0a, 0x90, 0xc7, 0x58, 0xce, 0x06, 0x58, 0x17, 0x6f, 0x2b, 0x95, 0x64, 0xfe, 0x2f, 0xa1, - 0x00, 0x11, 0xfd, 0x3a, 0x27, 0xba, 0xb7, 0x04, 0xba, 0x97, 0x38, 0x01, 0x00, 0x31, 0xff, 0x4a, 0xa2, 0x23, 0x91, 0x64, 0x04, 0x82, 0x7d, 0x00, - 0x00, 0x15, 0x28, 0x0d, 0x40, 0x0d, 0x04, 0x35, 0x04, 0x39, 0xa8, 0x13, 0x38, 0x21, 0x42, 0x28, 0x2d, 0x5e, 0x3d, 0x28, 0x31, 0x3c, 0x20, 0x05, - 0x04, 0xb8, 0x29, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x52, 0x00, 0x52, 0x2f, 0x05, 0x06, 0x06, 0x52, 0x52, 0x15, 0x08, 0x3a, 0x0b, 0x52, - 0x52, 0x20, 0x01, 0xb0, 0x22, 0x87, 0x00, 0x5e, 0x00, 0x00, 0x5b, 0x64, 0xb6, 0x30, 0xd0, 0x00, 0x30, 0xa4, 0x30, 0xab, 0x30, 0xea, 0x30, 0xa8, - 0x05, 0x30, 0x30, 0x57, 0xb9, 0x65, 0x05, 0xfd, 0x31, 0x5a, 0x2f, 0xaf, 0x46, 0x62, 0x2f, 0xb3, 0x79, 0x00, 0x6b, 0x2f, 0xb9, 0x3e, 0x97, 0x79, - 0xd6, 0x2e, 0xc1, 0x05, 0x9f, 0xb4, 0x54, 0x46, 0xf3, 0x6e, 0x2f, 0xaf, 0x30, 0x85, 0xef, 0xf5, 0x60, 0x85, 0x37, 0x7f, 0x05, 0x61, 0x97, 0xaf, - 0xaf, 0x20, 0xe0, 0x8d, 0x69, 0xa0, 0x8d, 0x57, 0x6e, 0x04, 0x80, 0xff, 0x65, 0x2f, 0x9b, 0x72, 0x2f, 0xb1, 0x39, 0x0f, 0x30, 0x07, 0xdb, 0x35, - 0x9f, 0x3f, 0xb7, 0x6c, 0x4f, 0xad, 0xf0, 0x93, 0x6a, 0x81, 0x21, 0x03, 0x58, 0x23, 0xb8, 0x00, 0x90, 0x7f, 0x20, 0x82, 0x1b, 0xb1, 0x07, 0x03, - 0xff, 0xd1, 0x16, 0x59, 0x1d, 0x00, 0x8d, 0xa0, 0x52, 0x14, 0x5c, 0xb9, 0x8f, 0x86, 0x10, 0x75, 0x3a, 0x53, 0x06, 0x1f, 0xaf, 0x90, 0xc7, 0x14, - 0xbc, 0x00, 0x74, 0xc7, 0x7c, 0xce, 0x20, 0x00, 0xc0, 0xc9, 0x3c, 0x29, 0xbc, 0x06, 0x1b, 0x99, 0x00, 0x52, 0x71, 0x06, 0xf0, 0x7f, 0x32, 0x5d, - 0x20, 0x00, 0x6a, 0x28, 0x2b, 0xab, 0x92, 0x9d, 0xf3, 0x62, 0x9d, 0x29, 0x03, 0xcf, 0xbc, 0x17, 0xab, 0x28, 0x0b, 0x31, 0x28, 0x0f, 0x39, 0x48, - 0x15, 0x3b, 0x27, 0xf1, 0x38, 0x1f, 0x47, 0x38, 0x28, 0x27, 0x20, 0x00, 0x3a, 0x28, 0x31, 0x30, 0x19, 0x0c, 0xb4, 0xff, 0x80, 0x10, 0x0e, 0xf0, - 0x7f, 0x53, 0x53, 0x4e, 0x3d, 0x4e, 0x53, 0x53, 0x08, 0x53, 0x4a, 0x48, 0x0c, 0x20, 0x05, 0x53, 0x53, 0x03, 0x10, 0x25, 0xb6, 0x50, 0x00, 0x3f, - 0xff, 0x01, 0x2b, 0x29, 0x06, 0x00, 0x05, 0x01, 0x01, 0x01, 0x2c, 0x2b, 0x1e, 0x2b, 0x80, 0x20, 0x06, 0x01, 0x02, 0x01, 0x01, 0x3e, 0x3c, 0x35, - 0x40, 0x02, 0x20, 0x06, 0x2c, 0x01, 0x02, 0x02, 0x02, 0x02, 0x00, 0x03, 0x0f, 0x03, 0x3f, 0x3a, 0x36, 0x03, 0x03, 0x08, 0x03, 0x02, 0x2d, 0x0f, - 0x20, 0x05, 0x03, 0x04, 0x02, 0x00, 0x02, 0x35, 0x4c, 0x4b, 0x04, 0x04, 0x02, 0x03, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x05, 0x03, 0x02, - 0x04, 0x07, 0x07, 0x07, 0x05, 0x05, 0x30, 0x11, 0x05, 0x00, 0x05, 0x05, 0x05, 0x06, 0x04, 0x05, 0x08, 0x08, 0x08, 0x08, 0x06, 0x06, 0x05, 0x20, - 0x18, 0x06, 0x06, 0x06, 0x00, 0x06, 0x07, 0x05, 0x06, 0x09, 0x09, 0x09, 0x07, 0x30, 0x07, 0x06, 0x20, 0x18, 0x20, 0x28, 0x07, 0x08, 0x06, 0x07, - 0x00, 0x40, 0x37, 0x37, 0x08, 0x08, 0x07, 0x07, 0x2e, 0x40, 0x06, 0x20, 0x28, 0x08, 0x09, 0x07, 0x08, 0x0a, 0x0a, 0x01, 0x0a, 0x09, 0x09, 0x08, - 0x08, 0x05, 0x07, 0x20, 0x28, 0x01, 0x09, 0x0a, 0x08, 0x0a, 0x0b, 0x0b, 0x0b, 0x30, 0x12, 0x40, 0x06, 0x30, 0x18, 0x0a, 0x0b, 0x09, 0x09, 0x41, - 0x3d, 0x01, 0x38, 0x0b, 0x0b, 0x09, 0x0a, 0x2f, 0x09, 0x20, 0x18, 0x00, 0x0b, 0x0c, 0x0a, 0x47, 0x4f, 0x35, 0x3a, 0x0c, 0x00, 0x0c, 0x4c, 0x0f, - 0x4f, 0x0a, 0x0c, 0x0c, 0x0c, 0x04, 0x0c, 0x0d, 0x0b, 0x46, 0x2d, 0x20, 0x05, 0x0d, 0x4b, 0x00, 0x10, 0x4e, 0x0b, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, - 0x20, 0x0c, 0x48, 0x20, 0xa2, 0x0e, 0x0e, 0x4d, 0x11, 0x51, 0x00, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0d, 0x49, 0x00, 0x50, 0x36, 0x3b, 0x0f, - 0x0f, 0x4e, 0x12, 0x50, 0x00, 0x0d, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x0e, 0x0c, 0x00, 0x43, 0x38, 0x3c, 0x10, 0x10, 0x0e, 0x13, 0x30, 0x00, 0x0e, - 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x0f, 0x00, 0x44, 0x41, 0x3d, 0x11, 0x11, 0x0f, 0x15, 0x31, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11, 0x12, 0x11, - 0x10, 0x80, 0x20, 0x4d, 0x12, 0x12, 0x10, 0x16, 0x0e, 0x11, 0x12, 0x00, 0x12, 0x12, 0x12, 0x13, 0x12, 0x11, 0x0d, 0x0e, 0x00, 0x0e, 0x13, 0x13, - 0x11, 0x17, 0x0d, 0x12, 0x13, 0x00, 0x13, 0x13, 0x13, 0x14, 0x13, 0x12, 0x45, 0x3e, 0x00, 0x3f, 0x14, 0x14, 0x16, 0x0b, 0x0f, 0x13, 0x14, 0x00, - 0x14, 0x14, 0x14, 0x15, 0x14, 0x13, 0x0f, 0x10, 0x00, 0x0f, 0x15, 0x15, 0x17, 0x18, 0x10, 0x14, 0x15, 0x00, 0x15, 0x15, 0x15, 0x16, 0x15, 0x14, - 0x46, 0x3f, 0x00, 0x40, 0x16, 0x16, 0x18, 0x0d, 0x32, 0x15, 0x16, 0x02, 0x16, 0x16, 0x16, 0x17, 0x16, 0x15, 0x20, 0x63, 0x17, 0x00, 0x17, 0x19, - 0x19, 0x11, 0x16, 0x17, 0x17, 0x17, 0x00, 0x17, 0x18, 0x17, 0x16, 0x37, 0x4d, 0x4d, 0x18, 0x00, 0x18, 0x1a, 0x1a, 0x12, 0x17, 0x18, 0x18, 0x18, - 0x00, 0x18, 0x19, 0x18, 0x17, 0x47, 0x48, 0x41, 0x19, 0x00, 0x19, 0x1b, 0x1b, 0x13, 0x18, 0x19, 0x19, 0x19, 0x00, 0x19, 0x1a, 0x19, 0x0b, 0x48, - 0x40, 0x39, 0x1a, 0x00, 0x1a, 0x1c, 0x0e, 0x33, 0x19, 0x1a, 0x1a, 0x1a, 0x08, 0x1a, 0x1b, 0x1a, 0x18, 0x20, 0x93, 0x1b, 0x1b, 0x1d, 0x00, 0x1c, - 0x14, 0x1a, 0x1b, 0x1b, 0x1b, 0x1b, 0x1c, 0x00, 0x1b, 0x19, 0x36, 0x4f, 0x4c, 0x1c, 0x1c, 0x0b, 0x00, 0x1d, 0x4c, 0x1b, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1d, 0x00, 0x1c, 0x1a, 0x42, 0x42, 0x3e, 0x1d, 0x1d, 0x0c, 0x00, 0x0c, 0x3b, 0x1c, 0x1d, 0x1d, 0x1d, 0x1d, 0x1e, 0x00, 0x1d, 0x1b, 0x01, 0x01, - 0x03, 0x1e, 0x1e, 0x0d, 0x00, 0x1e, 0x4d, 0x1d, 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x20, 0x1e, 0x1c, 0x20, 0xc3, 0x1f, 0x1f, 0x1e, 0x1f, 0x15, 0x00, - 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x20, 0x1f, 0x1d, 0x00, 0x49, 0x43, 0x42, 0x20, 0x20, 0x21, 0x20, 0x34, 0x14, 0x1f, 0x20, 0x20, 0x30, 0x07, 0x1e, - 0x20, 0xd3, 0x21, 0x21, 0x02, 0x22, 0x21, 0x16, 0x20, 0x21, 0x21, 0x30, 0x07, 0x21, 0x00, 0x38, 0x50, 0x4e, 0x22, 0x22, 0x23, 0x22, 0x17, 0x10, - 0x21, 0x22, 0x22, 0x30, 0x07, 0x22, 0x39, 0x51, 0x4f, 0x00, 0x23, 0x23, 0x24, 0x23, 0x18, 0x22, 0x23, 0x23, 0xa0, 0x30, 0x07, 0x1f, 0x20, 0xf3, - 0x24, 0x24, 0x1f, 0x24, 0x19, 0x00, 0x23, 0x24, 0x24, 0x24, 0x24, 0x25, 0x24, 0x20, 0x80, 0x20, 0xf3, 0x25, 0x25, 0x20, 0x25, 0x1a, 0x24, 0x25, - 0x02, 0x25, 0x25, 0x25, 0x26, 0x25, 0x23, 0x20, 0xf3, 0x26, 0x00, 0x26, 0x25, 0x26, 0x1b, 0x25, 0x26, 0x26, 0x26, 0x08, 0x26, 0x27, 0x26, 0x24, - 0x20, 0xf3, 0x27, 0x27, 0x26, 0x00, 0x27, 0x1c, 0x26, 0x27, 0x27, 0x27, 0x27, 0x28, 0x20, 0x27, 0x25, 0x20, 0xf3, 0x28, 0x28, 0x27, 0x28, 0x1d, - 0x00, 0x27, 0x28, 0x28, 0x28, 0x28, 0x29, 0x28, 0x26, 0x00, 0x4a, 0x44, 0x43, 0x29, 0x29, 0x28, 0x29, 0x35, 0x00, 0x28, 0x29, 0x29, 0x29, 0x29, - 0x2a, 0x29, 0x27, 0x00, 0x4b, 0x45, 0x44, 0x2a, 0x2a, 0x2a, 0x2a, 0x36, 0x44, 0x29, 0x30, 0x05, 0x2b, 0x2a, 0x28, 0x21, 0x13, 0x2b, 0x2b, 0x08, - 0x2b, 0x2c, 0x1f, 0x2a, 0x20, 0x05, 0x2b, 0x2c, 0x2c, 0x40, 0x2a, 0x21, 0x13, 0x2c, 0x2c, 0x29, 0x2d, 0x20, 0x2c, 0x44, 0x2c, 0x20, 0x01, 0x2d, - 0x2d, 0x2b, 0x22, 0x94, 0x2d, 0x2d, 0x19, 0x2d, 0x2e, 0x21, 0x20, 0x04, 0x20, 0x06, 0x2e, 0x2c, 0x21, 0x23, 0x06, 0x2e, 0x2e, 0x2e, 0x2f, 0x22, - 0x20, 0x04, 0x20, 0x06, 0x30, 0x40, 0x2d, 0x21, 0x23, 0x2f, 0x2f, 0x30, 0x30, 0x23, 0x30, 0x24, 0x2f, 0x2f, 0x20, 0x07, 0x31, 0x2e, 0x21, 0x23, - 0x30, 0x30, 0x02, 0x31, 0x31, 0x24, 0x31, 0x30, 0x30, 0x20, 0x07, 0x32, 0x40, 0x30, 0x21, 0x23, 0x31, 0x31, 0x34, 0x32, 0x25, 0x32, 0x00, 0x31, - 0x31, 0x31, 0x31, 0x32, 0x34, 0x32, 0x1f, 0x00, 0x21, 0x1f, 0x32, 0x32, 0x35, 0x34, 0x26, 0x34, 0x01, 0x32, 0x32, 0x32, 0x32, 0x33, 0x33, 0x31, - 0x21, 0x26, 0x01, 0x33, 0x33, 0x36, 0x33, 0x27, 0x33, 0x33, 0x20, 0x01, 0x10, 0x34, 0x35, 0x36, 0x21, 0x2b, 0x34, 0x34, 0x37, 0x36, 0x04, 0x28, - 0x35, 0x34, 0x34, 0x34, 0x20, 0x0e, 0x37, 0x3a, 0x00, 0x52, 0x50, 0x35, 0x35, 0x38, 0x37, 0x29, 0x36, 0x10, 0x35, 0x35, 0x35, 0x20, 0x0e, 0x38, - 0x3b, 0x4b, 0x51, 0x00, 0x36, 0x36, 0x39, 0x38, 0x2a, 0x37, 0x36, 0x36, 0x50, 0x36, 0x20, 0x0e, 0x39, 0x21, 0x4b, 0x37, 0x37, 0x3a, 0x39, 0x05, - 0x2b, 0x38, 0x37, 0x37, 0x37, 0x20, 0x0e, 0x3b, 0x21, 0x33, 0x00, 0x38, 0x38, 0x3c, 0x3c, 0x3c, 0x39, 0x38, 0x38, 0x04, 0x38, 0x38, 0x39, 0x3a, - 0x3a, 0x21, 0x5b, 0x39, 0x39, 0x00, 0x3b, 0x3b, 0x3d, 0x3a, 0x39, 0x39, 0x39, 0x39, 0x00, 0x3a, 0x3b, 0x3d, 0x4d, 0x46, 0x46, 0x3a, 0x3a, 0x00, - 0x12, 0x14, 0x37, 0x3b, 0x3a, 0x3a, 0x3a, 0x3a, 0x18, 0x3b, 0x3c, 0x3e, 0x21, 0x53, 0x20, 0x1d, 0x3d, 0x41, 0x3c, 0x01, 0x3b, 0x3b, 0x3b, 0x3b, - 0x3c, 0x3d, 0x3f, 0x21, 0x53, 0x02, 0x3c, 0x3c, 0x3e, 0x3e, 0x3e, 0x3d, 0x20, 0x43, 0x3c, 0x00, 0x3d, 0x40, 0x3c, 0x53, 0x4a, 0x4a, 0x3d, 0x3d, - 0x00, 0x40, 0x3f, 0x3f, 0x40, 0x3d, 0x3d, 0x3d, 0x3d, 0x10, 0x3e, 0x3e, 0x40, 0x21, 0x63, 0x3e, 0x3e, 0x3f, 0x40, 0x60, 0x40, 0x20, 0x22, 0x20, - 0x07, 0x2f, 0x33, 0x4c, 0x3b, 0x45, 0x00, 0x3f, 0x3f, 0x2f, 0x35, 0x38, 0x2f, 0x3f, 0x3f, 0x90, 0x20, 0x24, 0x3f, 0x41, 0x21, 0x73, 0x40, 0x40, - 0x41, 0x41, 0x61, 0x43, 0x20, 0x22, 0x30, 0x07, 0x42, 0x3c, 0x53, 0x52, 0x20, 0x05, 0x08, 0x42, 0x44, 0x41, 0x41, 0x20, 0x01, 0x42, 0x42, 0x43, - 0xc4, 0x21, 0x83, 0x20, 0x05, 0x43, 0x42, 0x42, 0x30, 0x01, 0x43, 0x43, 0x61, 0x44, 0x21, 0x83, 0x20, 0x05, 0x44, 0x45, 0x43, 0x43, 0x20, 0x01, - 0x88, 0x20, 0x07, 0x4e, 0x39, 0x47, 0x20, 0x0d, 0x45, 0x39, 0x44, 0x40, 0x44, 0x20, 0x01, 0x45, 0x45, 0x4b, 0x2c, 0x2d, 0x2c, 0x01, 0x45, 0x45, - 0x49, 0x47, 0x47, 0x45, 0x45, 0x20, 0x01, 0x00, 0x46, 0x46, 0x4c, 0x2e, 0x2e, 0x2d, 0x46, 0x46, 0x04, 0x47, 0x49, 0x48, 0x46, 0x46, 0x20, 0x01, - 0x47, 0x48, 0x00, 0x4f, 0x2f, 0x2f, 0x2e, 0x47, 0x47, 0x4f, 0x4b, 0x00, 0x46, 0x48, 0x47, 0x47, 0x47, 0x47, 0x48, 0x49, 0x04, 0x4a, 0x2b, 0x2c, - 0x2b, 0x48, 0x20, 0x1c, 0x49, 0x49, 0x00, 0x48, 0x48, 0x48, 0x48, 0x49, 0x47, 0x4d, 0x51, 0x80, 0x20, 0x14, 0x49, 0x48, 0x4a, 0x3a, 0x47, 0x49, - 0x49, 0x02, 0x49, 0x49, 0x4a, 0x4a, 0x34, 0x52, 0x30, 0x05, 0x32, 0x10, 0x4c, 0x4a, 0x4a, 0x30, 0x01, 0x4b, 0x4b, 0x35, 0x30, 0x00, 0x30, 0x2f, - 0x4b, 0x4b, 0x33, 0x4d, 0x4b, 0x4b, 0x81, 0x30, 0x01, 0x4c, 0x4c, 0x50, 0x31, 0x31, 0x30, 0x20, 0x05, 0x08, 0x4e, 0x07, 0x4c, 0x4c, 0x20, 0x01, - 0x4d, 0x4d, 0x51, 0x00, 0x32, 0x32, 0x31, 0x4d, 0x4d, 0x53, 0x4f, 0x08, 0x20, 0x4d, 0x4d, 0x20, 0x01, 0x4e, 0x4e, 0x52, 0x33, 0x33, 0x00, 0x32, - 0x4e, 0x4e, 0x51, 0x50, 0x09, 0x4e, 0x4e, 0x80, 0x20, 0x01, 0x4f, 0x4f, 0x53, 0x34, 0x34, 0x33, 0x4f, 0x02, 0x4f, 0x52, 0x51, 0x0a, 0x4f, 0x4f, - 0x20, 0x01, 0x50, 0x00, 0x50, 0x0d, 0x02, 0x04, 0x05, 0x50, 0x50, 0x13, 0x09, 0x52, 0x52, 0x50, 0x50, 0x20, 0x01, 0x51, 0x51, 0x24, 0x23, 0x00, - 0x34, 0x51, 0x51, 0x14, 0x53, 0x53, 0x51, 0x51, 0xf0, 0x20, 0x01, 0xfd, 0x4f, 0xf5, 0x47, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x65, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe1, 0x1f, 0x91, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x65, 0xbb, 0x30, 0xeb, 0x30, 0xd3, 0x00, - 0x30, 0xa2, 0x30, 0xfb, 0x30, 0xb3, 0x30, 0xbd, 0x04, 0x30, 0xf4, 0x30, 0xa9, 0x30, 0x05, 0xd8, 0x27, 0x53, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, - 0x62, 0x00, 0x69, 0x00, 0x11, 0x61, 0x00, 0x20, 0x20, 0x03, 0x6e, 0x00, 0x64, 0x20, 0x07, 0x05, 0x4b, 0x00, 0x6f, 0x00, 0x73, 0x20, 0x03, 0x76, - 0x20, 0x07, 0xa3, 0x05, 0x70, 0x7f, 0x65, 0x20, 0x7f, 0x65, 0x00, 0x74, 0x05, 0xc0, 0x7d, 0xd0, 0x7f, 0x5f, 0x6e, 0x21, 0x01, 0x75, 0x05, 0xe1, - 0x01, 0xd1, 0x7f, 0x31, 0x03, 0x05, 0xb0, 0xfd, 0xf1, 0xff, 0x40, 0x79, 0x06, 0x00, 0x7f, 0x5e, 0x58, 0x14, 0x5c, 0xf4, 0x7e, 0x00, 0x9a, 0x4e, - 0xca, 0x53, 0xd1, 0x79, 0x22, 0x7d, 0x20, 0x83, 0x6c, 0x05, 0xfb, 0x25, 0x38, 0xc1, 0x74, 0xb9, 0x44, 0x00, 0xbe, 0x44, 0xc5, 0x20, 0x00, 0x54, - 0xcf, 0x8c, 0x1a, 0xc1, 0xf4, 0xbc, 0x05, 0xfb, 0xa5, 0x53, 0x7f, 0x76, 0x23, 0x7f, 0xeb, 0xec, 0x42, 0xff, 0x32, 0x83, 0x05, 0xd2, 0xff, 0xe9, - 0x60, 0x7f, 0x06, 0x52, 0x7f, 0x21, 0x04, 0x00, 0x35, 0x04, 0x40, 0x04, 0x31, 0x04, 0x38, 0x04, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x38, 0x20, 0x03, - 0x1a, 0x04, 0x17, 0x3e, 0x04, 0x41, 0x20, 0x03, 0x32, 0x20, 0x07, 0x0d, 0xb4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, - 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x11, 0x74, 0x49, 0x00, 0x11, 0x08, 0x00, 0x00, 0x30, 0x01, 0x66, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x3d, 0x22, 0x2d, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x66, 0xd6, 0x30, 0xe9, 0x30, 0xc6, 0x09, - 0x30, 0xa3, 0x30, 0xb9, 0x20, 0x07, 0xd0, 0x30, 0x06, 0x18, 0x23, 0x00, 0x42, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x05, 0x69, 0x00, 0x73, - 0x00, 0x6c, 0x20, 0x09, 0x76, 0x20, 0x0d, 0x80, 0x10, 0x15, 0xb0, 0x7f, 0x03, 0x5e, 0xc9, 0x62, 0xea, 0x8f, 0xaf, 0x01, 0x65, 0xc9, 0x62, 0xd1, - 0x53, 0xde, 0x5d, 0x06, 0x1b, 0x23, 0x00, 0x0c, 0xbe, 0x7c, 0xb7, 0xf0, 0xd2, 0xac, 0xc2, 0x0c, 0x7c, 0xb7, 0x14, 0xbc, 0x06, 0x3b, 0xa1, 0x0e, - 0xf3, 0x7f, 0x11, 0x04, 0x00, 0x40, 0x04, 0x30, 0x04, 0x42, 0x04, 0x38, 0x04, 0x15, 0x41, 0x04, 0x3b, 0x20, 0x09, 0x32, 0x20, 0x07, 0x3a, 0x20, - 0x0d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3a, 0x40, 0x1b, 0x39, 0x04, 0x8a, 0x10, 0x1c, 0xb4, 0xff, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x40, 0x06, - 0x01, 0x10, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x66, 0xd0, 0x30, 0x41, 0xf3, 0x28, 0x13, 0xab, 0x30, 0xfb, 0x30, 0xd3, 0x28, 0x1b, 0x01, 0xc8, - 0x30, 0xea, 0x30, 0xc4, 0x30, 0xa1, 0x05, 0xa8, 0x1f, 0x50, 0x42, 0x28, 0x15, 0x6e, 0x28, 0x13, 0x6b, 0x00, 0xe1, 0x00, 0x54, 0x20, 0x28, 0x25, - 0x79, 0x28, 0x1f, 0x74, 0x28, 0x2b, 0x69, 0x00, 0x60, 0x63, 0x05, 0x48, 0x21, 0x10, 0x0e, 0xf0, 0x7f, 0xed, 0x73, 0xaf, 0x65, 0x61, 0x00, 0x53, - 0x2d, 0x00, 0xd4, 0x6b, 0xaf, 0x65, 0x79, 0x04, 0x72, 0xcc, 0x91, 0xdf, 0x5b, 0x05, 0xd8, 0x1d, 0x18, 0xbc, 0x00, 0xa4, 0xc2, 0x74, 0xce, 0x44, - 0xbe, 0xa4, 0xc2, 0x03, 0xb8, 0xd2, 0xac, 0xb9, 0x28, 0xcc, 0x06, 0x1b, 0x97, 0x0e, 0xd3, 0x7f, 0x51, 0x11, 0x28, 0x15, 0x3d, 0x48, 0x0b, 0x3e, - 0x04, 0x31, 0x48, 0x1d, 0x47, 0x42, 0x28, 0x29, 0x38, 0x04, 0x46, 0x05, 0x68, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x48, 0x0c, 0xc0, 0x28, 0x1c, 0x50, - 0x05, 0x02, 0x02, 0xa6, 0x22, 0x9d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x66, 0xb3, 0x30, 0xb7, 0x28, 0x09, 0x60, 0xa7, 0x05, 0xa8, 0x09, 0xdf, 0xff, - 0x4b, 0x00, 0x6f, 0x00, 0x61, 0x50, 0x01, 0x38, 0x05, 0x65, 0x10, 0x16, 0x40, 0x7f, 0xd1, 0x79, 0x0c, 0x5e, 0x30, 0x56, 0x7b, 0x05, 0xd8, 0x0b, - 0xbf, 0xff, 0x54, 0xcf, 0xdc, 0xc2, 0x6b, 0xb4, 0x06, 0x08, 0x0d, 0x0f, 0x93, 0x7f, 0x1a, 0x28, 0x0f, 0x48, 0x05, 0xa8, 0x07, 0x10, 0x17, 0xf4, - 0xff, 0x28, 0x03, 0x03, 0x70, 0x01, 0x04, 0x40, 0x0a, 0xa5, 0x22, 0x1d, 0x00, 0x0f, 0x00, 0x00, 0x05, 0x66, 0x8c, 0x4e, 0xc8, 0x23, 0x30, 0xe9, - 0x06, 0x88, 0x15, 0x00, 0x00, 0x4e, 0x2f, 0x99, 0x3f, 0x9f, 0xc0, 0x05, 0x3f, 0x9b, 0x10, 0x10, 0x30, 0x7f, 0x3c, 0x5c, 0x79, 0x72, 0xc9, 0x62, - 0x81, 0x06, 0x98, 0x17, 0xc8, 0xb2, 0xb8, 0xd2, 0x7c, 0xb7, 0x10, 0x06, 0x93, 0x7f, 0x51, 0x1d, 0x28, 0x13, 0x42, 0x48, 0x09, 0x3d, 0x04, 0x41, - 0x06, 0x28, 0x1b, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0x70, 0x01, 0x05, 0x40, 0x0a, 0x59, 0x22, 0x00, 0xda, 0x0c, 0x00, 0x00, 0x06, 0x66, - 0xd7, 0x30, 0x01, 0xec, 0x30, 0xb7, 0x30, 0xe7, 0x30, 0xd5, 0x06, 0x68, 0x1b, 0x51, 0x50, 0x28, 0x13, 0x65, 0x2f, 0xb1, 0x6f, 0x00, 0x76, 0x10, - 0x16, 0x40, 0x7f, 0x00, 0x6e, 0x66, 0xf7, 0x96, 0xcd, 0x7e, 0x2b, 0x59, 0x80, 0x06, 0x78, 0x19, 0x04, 0xd5, 0x08, 0xb8, 0xfc, 0xc1, 0x04, 0x68, - 0xd5, 0x06, 0x7b, 0x99, 0x0e, 0xf3, 0x7f, 0x1f, 0x28, 0x13, 0x35, 0x04, 0x48, 0x0c, 0x04, 0x3e, 0x04, 0x32, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, - 0xff, 0x05, 0x05, 0xa0, 0x70, 0x01, 0x06, 0x40, 0x0a, 0xd2, 0x22, 0x1d, 0x0f, 0x00, 0x08, 0x00, 0x07, 0x66, 0xc8, 0x28, 0x17, 0xf3, 0x30, 0xc1, - 0x34, 0x30, 0xfc, 0x20, 0x05, 0x06, 0x3f, 0xb2, 0x54, 0x48, 0x17, 0x6e, 0x00, 0x19, 0x63, 0x00, 0xed, 0x20, 0x05, 0x06, 0x90, 0x7f, 0x0d, 0x01, - 0x10, 0x0e, 0x50, 0x7f, 0x02, 0x79, 0x72, 0x26, 0x4f, 0xa6, 0x94, 0x06, 0x78, 0x15, 0x00, 0x01, 0x00, 0xb8, 0xd2, 0x0c, 0xb8, 0x5c, 0xce, 0x06, - 0x78, 0x15, 0xb4, 0x07, 0x92, 0xff, 0x63, 0x2f, 0x37, 0x06, 0x33, 0xff, 0x22, 0x48, 0x17, 0x3d, 0x04, 0x5c, 0x47, 0x28, 0x11, 0x3d, 0x06, 0x28, - 0x19, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x06, 0x06, 0xa0, 0x70, 0x01, 0x07, 0x40, 0x0a, 0xc4, 0x22, 0xd6, 0x0c, 0x00, 0x20, 0x00, 0x08, - 0x28, 0x17, 0xeb, 0x30, 0xca, 0x30, 0xd0, 0xc5, 0x06, 0x48, 0x13, 0x78, 0x17, 0x6e, 0x00, 0x61, 0x2f, 0xad, 0x61, 0x10, 0x16, 0x40, 0x7f, 0x00, - 0x79, 0x72, 0x14, 0x5c, 0xb3, 0x7e, 0xe6, 0x74, 0x80, 0x06, 0x78, 0x19, 0xb8, 0xd2, 0x74, 0xb9, 0x98, 0xb0, 0x14, 0x6b, 0xbc, 0x10, 0x06, 0x73, - 0x7f, 0x38, 0x17, 0x3d, 0x28, 0x01, 0x32, 0x06, 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, 0x28, 0x07, 0x07, 0x70, 0x01, 0x08, 0x40, 0x0a, 0x66, 0x22, - 0x7f, 0x83, 0x28, 0x17, 0x09, 0x66, 0xb8, 0x30, 0xea, 0x28, 0x17, 0x06, 0x9c, 0xaf, 0x07, 0x7d, 0x01, 0x69, 0x00, 0x6c, 0x4c, 0x2b, 0x06, 0x58, - 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0xe5, 0x65, 0x29, 0x52, 0xb3, 0x7e, 0x06, 0x78, 0x15, 0x00, 0x0d, 0x00, 0xc8, 0xc9, 0xac, 0x28, 0x17, 0x0e, - 0x93, 0x7f, 0x5a, 0x23, 0xfb, 0xab, 0x06, 0xb3, 0xff, 0x16, 0x28, 0x0b, 0x3b, 0x28, 0x0f, 0x3d, 0x06, 0x68, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x28, - 0x08, 0x08, 0x70, 0x01, 0x03, 0x40, 0x0a, 0x00, 0x23, 0x51, 0x45, 0x0d, 0x00, 0x3f, 0xff, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x40, 0x06, 0x3c, - 0x01, 0x01, 0x20, 0x07, 0x30, 0x04, 0x20, 0x14, 0x50, 0x05, 0x02, 0x02, 0x2a, 0x03, 0x03, 0x70, 0x01, 0x04, 0x50, 0x05, 0x04, 0x70, 0x01, 0x05, - 0xaa, 0x50, 0x05, 0x05, 0x70, 0x01, 0x06, 0x50, 0x05, 0x06, 0x70, 0x01, 0x07, 0xf0, 0x50, 0x05, 0xe8, 0x9f, 0x00, 0x00, 0x97, 0x2f, 0xff, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x67, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xbf, 0x20, 0x50, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x67, 0xb9, 0x30, 0xed, 0x30, 0xd9, 0x04, 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x58, 0x1f, - 0x53, 0x00, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x65, 0x00, 0x05, 0x6e, 0x00, 0x69, 0x00, 0x61, 0x06, 0x80, 0x7f, 0xe9, 0x40, 0x7f, 0x5c, - 0x65, 0x06, 0x60, 0xff, 0x77, 0x60, 0xff, 0x31, 0x05, 0x0d, 0xd1, 0x7f, 0x45, 0x00, 0x40, 0x73, 0x06, 0xc2, 0x01, 0xaf, 0x65, 0x1b, 0x6d, 0x87, - 0x65, 0x08, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x5b, 0x1f, 0xac, 0xc2, 0x5c, 0x01, 0xb8, 0xa0, 0xbc, 0xc8, 0xb2, 0x44, 0xc5, 0x07, 0x33, 0x7f, 0x70, - 0xeb, 0x06, 0xa1, 0xff, 0x53, 0x81, 0x05, 0xf4, 0x01, 0x21, 0x04, 0x3b, 0x04, 0x00, 0x3e, 0x04, 0x32, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x0c, 0x38, - 0x04, 0x4f, 0x04, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x9c, 0x51, 0x00, 0x11, 0x09, 0x00, 0x00, 0x30, 0x01, 0x68, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x69, 0xed, 0xf2, 0x13, 0x00, 0x00, 0x00, 0x02, 0x68, 0xcf, 0x30, 0xa6, 0x30, 0xc6, 0x04, - 0x30, 0xf3, 0x30, 0xde, 0x5d, 0x06, 0x58, 0x1f, 0x47, 0x00, 0x00, 0x61, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x10, 0x6e, 0x00, 0x67, 0x10, - 0x16, 0x20, 0x7f, 0x6a, 0x8c, 0x7b, 0x76, 0x20, 0x01, 0x77, 0x06, 0x9b, 0x1b, 0x58, 0xd5, 0xb0, 0xc6, 0x61, 0x04, 0xd1, 0x20, 0x00, 0xfc, 0xc8, - 0x10, 0x06, 0x53, 0x7f, 0x13, 0x04, 0x00, 0x30, 0x04, 0x43, 0x04, 0x42, 0x04, 0x35, 0x04, 0x04, 0x3d, 0x04, 0x33, 0x04, 0xa0, 0x10, 0x1e, 0x04, - 0xff, 0x01, 0x03, 0x00, 0x05, 0x02, 0x04, 0x05, 0x01, 0x01, 0x01, 0x05, 0x28, 0x02, 0x03, 0x20, 0x05, 0x01, 0x58, 0x17, 0x03, 0x68, 0xa6, 0x02, - 0x30, 0xa7, 0x30, 0xb9, 0x30, 0xbf, 0x28, 0x19, 0xfb, 0x02, 0x30, 0xb1, 0x30, 0xfc, 0x30, 0xd7, 0x05, 0xe8, 0x21, 0x57, 0xa8, 0x28, 0x11, 0x73, - 0x48, 0x17, 0x72, 0x28, 0x19, 0x20, 0x00, 0x43, 0xb8, 0x28, 0x27, 0x70, 0x28, 0x25, 0x05, 0x7f, 0xc5, 0x50, 0x6f, 0x2d, 0x00, 0x4f, 0x22, 0x00, - 0x63, 0x20, 0x01, 0x69, 0x00, 0x64, 0x48, 0xa1, 0x74, 0xae, 0x28, 0xad, 0x6c, 0x05, 0xc0, 0xff, 0x6b, 0x40, 0xf7, 0x06, 0x1f, 0xbb, 0x51, 0x6f, - 0x6f, 0xf6, 0x21, 0x79, 0x00, 0x31, 0x01, 0x05, 0x11, 0x87, 0x31, 0xef, 0x62, 0x00, 0x80, 0x7f, 0x05, 0x1f, 0xcb, 0x7f, 0x04, 0x89, 0x00, 0x5f, - 0x6e, 0x66, 0x06, 0x98, 0x19, 0xe8, 0xc6, 0x00, 0xa4, 0xc2, 0x34, 0xd1, 0x00, 0xcf, 0x74, 0xc7, 0x31, 0x04, 0xd5, 0x06, 0x38, 0x1d, 0x73, 0x7f, - 0x2d, 0x00, 0x4b, 0x2b, 0xa1, 0xea, 0x06, 0x12, 0x83, 0xd1, 0xff, 0x06, 0x13, 0x7f, 0x17, 0x28, 0x17, 0x3f, 0x28, 0x1b, 0x34, 0x82, 0x28, 0x17, - 0x3e, 0x04, 0x2d, 0x00, 0x1a, 0x40, 0x0f, 0x41, 0x20, 0x04, 0x3a, 0x28, 0x2f, 0x4f, 0x04, 0x20, 0x00, 0x3f, 0x22, 0x04, 0x40, 0x20, 0x17, 0x32, - 0x04, 0x38, 0x28, 0x37, 0x46, 0x98, 0x20, 0x05, 0x4f, 0x04, 0x0b, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x09, 0x02, 0x08, 0x09, 0x01, 0x01, - 0x02, 0x20, 0x06, 0x03, 0x09, 0x02, 0x00, 0x02, 0x02, 0x02, 0xe1, 0xe7, 0x1a, 0x0d, 0x00, 0x0a, 0x00, 0x04, 0x68, 0xce, 0x28, 0x0b, 0xb6, 0x06, - 0x88, 0x15, 0x00, 0x2b, 0x00, 0x4e, 0x26, 0x93, 0x72, 0x2f, 0xaf, 0x68, 0x06, 0x68, 0x19, 0x78, 0x17, 0x55, 0x64, 0x2f, 0xb5, 0x2d, 0x60, 0x8d, - 0x64, 0x06, 0x00, 0xff, 0x64, 0x07, 0x28, 0x17, 0x55, 0x53, 0x2f, 0xb3, 0x74, 0x6f, 0xb9, 0x74, 0x29, 0xa5, 0x69, 0x28, 0x2d, 0x76, 0x6e, 0x05, - 0x08, 0x1d, 0x98, 0x17, 0x30, 0x7f, 0x70, 0x00, 0x40, 0x7f, 0x04, 0xc6, 0x17, 0x53, 0x87, 0x06, 0xd8, 0x17, 0x78, 0xb1, 0x58, 0xb3, 0x06, 0x98, - 0x15, 0x53, 0x7f, 0x52, 0xf3, 0xdc, 0x06, 0x58, 0x19, 0x9a, 0x17, 0x64, 0x4a, 0x9d, 0x74, 0x0f, 0x05, 0x7c, 0x19, 0x21, 0x04, 0x5e, 0x35, 0x27, - 0xf5, 0x35, 0x47, 0xfd, 0x06, 0x18, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x00, 0x08, 0x01, 0x06, 0x03, 0x03, 0x03, 0x03, 0x05, - 0x10, 0x01, 0x08, 0x08, 0x30, 0x07, 0x90, 0xeb, 0x9e, 0x11, 0x04, 0x00, 0x00, 0x05, 0x68, 0xa4, 0x28, 0x17, 0xb9, 0x30, 0x5d, 0xbf, 0x06, 0x88, - 0x19, 0x45, 0x2f, 0xaf, 0x06, 0xbb, 0x2f, 0x78, 0x17, 0x4f, 0x47, 0x09, 0xdf, 0x05, 0xdc, 0xab, 0x3f, 0xff, 0x4f, 0x4d, 0xad, 0x06, 0x78, 0x15, - 0xb8, 0x17, 0xf1, 0x01, 0x05, 0x5c, 0xb3, 0xc8, 0xbe, 0x2f, 0x06, 0x31, 0x81, 0x1c, 0x4e, 0x06, 0xd8, 0x17, 0x74, 0xc7, 0xa4, 0x17, 0xc2, 0x34, - 0xd1, 0x06, 0x98, 0x19, 0x4f, 0x2f, 0xab, 0x3e, 0xaf, 0x06, 0x58, 0x15, 0xa2, 0x07, 0x11, 0xff, 0x12, 0x28, 0x0f, 0x41, 0x04, 0x42, 0x28, 0x15, - 0x47, 0xf0, 0x27, 0xfb, 0x06, 0x18, 0x1b, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x01, 0x03, 0x08, 0x00, 0x02, 0x02, 0x04, 0x04, 0x07, - 0x03, 0x01, 0x01, 0x00, 0x04, 0x04, 0x04, 0x04, 0xa0, 0xe8, 0x79, 0x13, 0x00, 0x00, 0x00, 0x06, 0x68, 0xaf, 0x30, 0xef, 0x30, 0x51, 0xba, 0x28, - 0x1b, 0xeb, 0x28, 0x1f, 0xfb, 0x30, 0xca, 0x28, 0x21, 0xc5, 0x30, 0x0b, 0x05, 0x98, 0x1b, 0x4b, 0x00, 0x77, 0x2f, 0xb1, 0x5a, 0x2f, 0xad, 0x58, - 0x6c, 0x6f, 0xb1, 0x61, 0x05, 0xc7, 0x99, 0x10, 0x0e, 0xf0, 0x7f, 0x38, 0x59, 0x56, 0x00, 0x79, 0x81, 0x9c, 0x2d, 0x00, 0xb3, 0x7e, 0x54, 0x10, - 0x58, 0x14, 0x5c, 0x06, 0x18, 0x1f, 0x70, 0xcf, 0x04, 0xc9, 0x03, 0xe8, 0xb8, 0x98, 0xb0, 0xc8, 0xd0, 0x06, 0x38, 0x15, 0x93, 0x7f, 0x5d, 0x6f, - 0x2f, 0xa1, 0x6c, 0x40, 0x05, 0x05, 0xd3, 0x83, 0x06, 0xf3, 0xff, 0x1a, 0x27, 0xf1, 0x01, 0x30, 0x04, 0x37, 0x04, 0x43, 0x04, 0x3b, 0x20, 0x03, - 0x15, 0x2d, 0x00, 0x1d, 0x28, 0x15, 0x42, 0x28, 0x19, 0x3b, 0x03, 0xc7, 0xfd, 0x80, 0x10, 0x18, 0x94, 0xff, 0x05, 0x04, 0x06, 0x03, 0x05, 0x06, - 0x05, 0x00, 0x05, 0x02, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x00, 0x05, 0xf4, 0xea, 0x9b, 0x15, 0x00, 0x00, 0x07, 0x08, 0x68, 0xd5, 0x30, 0xea, - 0x48, 0x11, 0xb9, 0x30, 0xc6, 0xb5, 0x28, 0x1d, 0xc8, 0x05, 0xa8, 0x11, 0x5f, 0xff, 0x46, 0x2f, 0xa7, 0x65, 0x2f, 0xa7, 0x1d, 0x20, 0x00, 0x53, - 0x4f, 0xa9, 0x3b, 0x39, 0x05, 0xbf, 0x38, 0xc9, 0x60, 0x75, 0x16, 0x2d, 0x00, 0x4c, 0x2f, 0x2d, 0x62, 0x40, 0x8d, 0x06, 0x10, 0xff, 0x69, 0xdf, - 0x4d, 0xb3, 0x3d, 0xaf, 0x74, 0x05, 0xee, 0xb8, 0x71, 0x75, 0x3f, 0xb1, 0x51, 0x01, 0x3c, 0xb9, 0x6c, 0x6f, 0x05, 0xac, 0xaf, 0x50, 0xf9, 0x64, - 0xa0, 0x81, 0x05, 0xb1, 0x83, 0xea, 0x81, 0x0c, 0x31, 0x75, 0xa6, 0x90, 0x06, 0x18, 0x0f, 0x8b, 0xaf, 0xd5, 0xac, 0x00, 0xb9, 0xa4, 0xc2, 0x4c, - 0xd1, 0x74, 0xc7, 0xb8, 0x56, 0xd2, 0x06, 0x38, 0x19, 0x56, 0x4f, 0xa5, 0x6a, 0x06, 0x82, 0x7f, 0x00, 0x11, 0xff, 0x76, 0x82, 0x05, 0xc3, 0x83, - 0x24, 0x04, 0x40, 0x04, 0x38, 0x28, 0x0f, 0x21, 0x8e, 0x28, 0x0d, 0x35, 0x04, 0x39, 0x28, 0x13, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, - 0x00, 0x02, 0x04, 0x01, 0x09, 0x04, 0x06, 0x06, 0x08, 0x00, 0x04, 0x09, 0x02, 0x06, 0x06, 0x06, 0x06, 0x4c, 0x00, 0xeb, 0xa5, 0x12, 0x00, 0x00, - 0x08, 0x68, 0xce, 0xa3, 0x28, 0x15, 0xb9, 0x28, 0x17, 0xa6, 0x30, 0xa7, 0x28, 0x1b, 0x06, 0x18, 0x17, 0x55, 0x4e, 0x2c, 0xa9, 0x72, 0x2f, 0xa1, - 0x68, 0x28, 0x19, 0x57, 0x2c, 0xb3, 0xd6, 0x37, 0x1f, 0x06, 0x10, 0x7f, 0x64, 0x2f, 0xa9, 0x4f, 0x2f, 0xb3, 0x06, 0x90, 0x7f, 0x77, 0xd4, 0x06, - 0x20, 0xfb, 0x3f, 0xff, 0x50, 0x48, 0x05, 0x76, 0x29, 0x13, 0x6e, 0x00, 0x55, 0x63, 0x29, 0x19, 0x61, 0x29, 0xa1, 0x64, 0x4e, 0x3b, 0x20, 0x81, - 0x1b, 0xfe, 0x30, 0x1f, 0x04, 0x71, 0x99, 0x51, 0xff, 0x3e, 0xad, 0x39, 0x19, 0x05, 0xda, 0x13, 0x3f, 0xff, 0x7f, 0x10, 0x89, 0x17, 0x53, 0x06, - 0x98, 0x15, 0x00, 0x00, 0x78, 0xb1, 0x03, 0xa4, 0xc2, 0xe8, 0xc6, 0xa4, 0xc2, 0x06, 0x58, 0x15, 0x53, 0x7f, 0xd4, 0x06, 0xb2, 0x81, 0x06, 0xf1, - 0xff, 0x21, 0x28, 0x0d, 0x32, 0x28, 0x11, 0x40, 0x04, 0x41, 0x3e, 0x28, 0x1d, 0x17, 0x04, 0x30, 0x04, 0x3f, 0x20, 0x03, 0x10, 0x34, 0x04, 0x3d, - 0x20, 0x09, 0x4f, 0x04, 0x20, 0x00, 0x51, 0x3f, 0x40, 0x19, 0x32, 0x28, 0x3b, 0x3d, 0x04, 0x46, 0x28, 0x41, 0x70, 0x4f, 0x03, 0xe8, 0x37, 0x07, - 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x07, 0x07, 0x09, 0x07, 0x06, 0x08, 0x09, 0x07, 0x07, 0x06, 0x20, 0x03, 0x30, 0x01, 0x9e, 0x20, 0xed, 0x3d, - 0x28, 0x17, 0x09, 0x68, 0xe0, 0x30, 0xd7, 0x00, 0x30, 0xde, 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xac, 0xc5, 0x06, 0x08, 0x13, 0x3f, 0xff, 0x4d, 0x00, - 0x70, 0x27, 0x8f, 0x6d, 0x2f, 0xb3, 0x46, 0x6c, 0x2f, 0xb7, 0x6e, 0x00, 0x67, 0x2f, 0xbd, 0x10, 0x15, 0xb0, 0x7f, 0x6e, 0x01, 0x66, 0x6c, 0x9a, - 0x70, 0x51, 0xa0, 0x52, 0x06, 0x78, 0x1b, 0x00, 0x4c, 0xc7, 0x78, 0xd4, 0xd0, 0xb9, 0x91, 0xb7, 0x34, 0x00, 0xac, 0x06, 0x58, 0x17, 0x0e, 0xf3, - 0x7f, 0x1c, 0x28, 0x07, 0x43, 0x04, 0x51, 0x3c, 0x28, 0x0f, 0x3b, 0x28, 0x13, 0x3d, 0x04, 0x33, 0x28, 0x19, 0x80, 0x10, 0x1d, 0xb4, 0xff, 0x08, - 0x06, 0x08, 0x05, 0x07, 0x08, 0x08, 0x04, 0x08, 0x04, 0x08, 0x06, 0x06, 0x20, 0x06, 0x08, 0xe5, 0x00, 0xed, 0x08, 0x16, 0x00, 0x00, 0x0a, 0x68, - 0xea, 0xbd, 0x28, 0x11, 0xdd, 0x20, 0x01, 0x06, 0x38, 0x13, 0x45, 0x17, 0x2e, 0xa9, 0x6d, 0x28, 0x1b, 0x60, 0x6f, 0x40, 0x03, 0x10, 0x16, 0x10, - 0x7f, 0x97, 0x67, 0xe2, 0x6c, 0xe2, 0x40, 0x6c, 0x06, 0x78, 0x15, 0x00, 0x00, 0xbc, 0xb9, 0xec, 0xd3, 0x31, 0x78, 0xd4, 0x06, 0x58, 0x13, 0x0f, - 0x33, 0x7f, 0x1b, 0x04, 0x38, 0x28, 0x15, 0x18, 0x3f, 0x04, 0x3e, 0x40, 0x03, 0x10, 0x1e, 0x14, 0xff, 0x09, 0x05, 0x07, 0x00, 0x04, 0x06, 0x07, - 0x09, 0x09, 0x03, 0x07, 0x05, 0x11, 0x05, 0x09, 0x09, 0x20, 0x07, 0xef, 0xef, 0x14, 0x00, 0x3f, 0xff, 0x00, 0x01, 0x03, 0x05, 0x02, 0x04, 0x05, - 0x01, 0x01, 0x08, 0x01, 0x05, 0x02, 0x03, 0x20, 0x05, 0x01, 0x02, 0x09, 0x30, 0x02, 0x09, 0x20, 0x05, 0x20, 0x06, 0x03, 0x09, 0x02, 0x02, 0x00, - 0x02, 0x02, 0x03, 0x08, 0x01, 0x06, 0x03, 0x03, 0x02, 0x03, 0x03, 0x05, 0x01, 0x08, 0x08, 0x30, 0x07, 0x04, 0x00, 0x01, 0x03, 0x08, 0x02, 0x02, - 0x04, 0x04, 0x07, 0x80, 0x20, 0x2d, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x06, 0x01, 0x03, 0x05, 0x06, 0x05, 0x05, 0x02, 0x06, 0x20, 0x0b, 0x00, - 0x05, 0x05, 0x05, 0x06, 0x02, 0x04, 0x01, 0x09, 0x40, 0x04, 0x28, 0x8b, 0x04, 0x09, 0x02, 0x06, 0x06, 0x06, 0x00, 0x06, 0x07, 0x07, 0x09, 0x07, - 0x08, 0x09, 0x07, 0x3e, 0x07, 0x06, 0x20, 0x03, 0x30, 0x01, 0xf8, 0xaf, 0xf0, 0xa7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x2c, 0xa3, 0x00, 0x11, 0x13, 0x00, 0x00, 0x30, 0x01, 0x69, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xbd, 0x1c, 0x5e, 0xfd, 0x00, 0x00, 0x00, 0x02, 0x69, 0xde, 0x30, 0xc9, 0x30, 0xea, 0x24, 0x30, 0xfc, 0x20, 0x05, 0xde, 0x5d, 0x06, 0x38, - 0x21, 0x4d, 0x00, 0x01, 0x61, 0x00, 0x64, 0x00, 0x72, 0x00, 0x69, 0x20, 0x05, 0x80, 0x10, 0x16, 0x30, 0x7f, 0x6c, 0x9a, 0xb7, 0x5f, 0xcc, 0x91, - 0xea, 0x04, 0x81, 0xbb, 0x6c, 0x3a, 0x53, 0x06, 0x3b, 0x21, 0xc8, 0xb9, 0x10, 0xdc, 0xb4, 0xac, 0x20, 0x03, 0x20, 0x00, 0xfc, 0xc8, 0x80, 0x10, - 0x06, 0x33, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x34, 0x04, 0x40, 0x30, 0x04, 0x38, 0x20, 0x05, 0x10, 0x1e, 0x34, 0xff, 0x01, 0x0e, 0x0e, 0x0f, 0x00, - 0x0e, 0x0f, 0x01, 0x01, 0x0f, 0x0e, 0x0c, 0x0e, 0x08, 0x01, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x69, 0xa2, 0x00, 0x30, 0xf3, 0x30, 0xc0, 0x30, - 0xeb, 0x30, 0xb7, 0xa2, 0x28, 0x1b, 0xa2, 0x06, 0x28, 0x1b, 0x41, 0x00, 0x6e, 0x28, 0x17, 0x61, 0x02, 0x00, 0x6c, 0x00, 0x75, 0x00, 0x73, 0x28, - 0x1d, 0x61, 0xab, 0x06, 0x80, 0x7f, 0x6f, 0x60, 0x81, 0x65, 0x06, 0xc0, 0xff, 0x65, 0x21, 0x0f, 0x0e, 0x51, 0x7f, 0x04, 0x75, 0x00, 0x63, 0x00, - 0xed, 0x06, 0x01, 0xff, 0x89, 0x5b, 0x00, 0xbe, 0x8f, 0x62, 0x53, 0x7f, 0x89, 0x9a, 0x4e, 0x80, 0x06, 0x58, 0x1b, 0x48, 0xc5, 0xec, 0xb2, 0xe8, - 0xb8, 0xdc, 0x1a, 0xc2, 0x44, 0xc5, 0x06, 0x58, 0x19, 0xf3, 0x7f, 0xeb, 0x06, 0xa3, 0xff, 0x7a, 0x88, 0x06, 0x23, 0xff, 0x10, 0x04, 0x3d, 0x28, - 0x17, 0x30, 0x04, 0x3b, 0x0b, 0x04, 0x43, 0x04, 0x41, 0x28, 0x1d, 0x4f, 0x05, 0xe8, 0x1d, 0x07, 0xb3, 0x7f, 0xa4, 0x10, 0x0e, 0x30, 0x7f, 0x02, - 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x00, 0x02, 0x02, 0x95, 0x1a, 0xbc, 0xfb, 0x00, 0x00, 0x47, 0x04, 0x28, 0x17, 0xe9, 0x30, 0xb4, - 0x28, 0x1b, 0x06, 0x18, 0x11, 0x78, 0x17, 0x5f, 0x72, 0x2f, 0xb1, 0x67, 0x27, 0x95, 0x05, 0xd7, 0x0f, 0x08, 0x30, 0x7f, 0x06, 0x18, 0x15, 0xd1, - 0x7f, 0xd0, 0x05, 0xf9, 0x93, 0xb1, 0xff, 0xf3, 0x06, 0x61, 0xff, 0x3f, 0x96, 0xc9, 0x62, 0x30, 0x21, 0x8d, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x44, - 0xc5, 0x7c, 0xb7, 0x3b, 0xe4, 0xac, 0x06, 0x58, 0x13, 0x07, 0x31, 0x7f, 0x73, 0xff, 0xe3, 0x2b, 0x97, 0x06, 0x3f, 0xaf, 0x11, 0x10, 0x04, 0x40, - 0x28, 0x15, 0x33, 0x04, 0x3e, 0x28, 0x1f, 0xd2, 0x10, 0x06, 0xf4, 0xff, 0x10, 0x06, 0x36, 0x7f, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, - 0x00, 0x03, 0x03, 0x03, 0x9e, 0x1d, 0x62, 0xff, 0x00, 0x20, 0x00, 0x05, 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x30, 0xa5, 0x06, 0x30, 0xfc, 0x30, 0xea, - 0x30, 0x30, 0x0b, 0x05, 0xf8, 0x1f, 0x50, 0xaa, 0x28, 0x17, 0x69, 0x2f, 0xb3, 0x63, 0x2f, 0xa9, 0x70, 0x4f, 0xb7, 0x69, 0x02, 0x00, 0x74, 0x00, - 0x79, 0x00, 0x20, 0x2f, 0xbf, 0x66, 0xad, 0x20, 0x05, 0x41, 0x2f, 0xc3, 0x74, 0x2f, 0xc9, 0x30, 0x25, 0x61, 0x2f, 0xcf, 0xde, 0x04, 0x1f, 0xaf, - 0x90, 0x5f, 0x65, 0x04, 0x20, 0x5f, 0x01, 0xd0, 0x7f, 0x06, 0x19, 0x1b, 0xf1, 0x7f, 0x74, 0xab, 0x29, 0xa1, 0x20, 0x2f, 0xc1, 0x65, 0x2f, 0xc1, - 0x6c, 0x28, 0xa7, 0xd1, 0x81, 0x70, 0x65, 0x04, 0xc1, 0x7f, 0x04, 0x31, 0xdf, 0x01, 0x18, 0x17, 0xaf, 0x65, 0xfe, 0x56, 0x02, 0x29, 0x52, 0x9a, - 0x4e, 0xaf, 0x65, 0x06, 0x38, 0x1d, 0x44, 0x01, 0xc5, 0xa4, 0xc2, 0x2c, 0xd2, 0xac, 0xb9, 0x30, 0x07, 0xda, 0x06, 0x38, 0x1d, 0xb3, 0x5f, 0xeb, - 0x06, 0x4c, 0x17, 0x33, 0xdf, 0xfa, 0x06, 0x81, 0xff, 0x10, 0x02, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x28, 0x1d, 0x38, 0x38, 0x04, 0x4f, 0x06, - 0x28, 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x12, 0x03, 0x04, 0x03, 0x13, 0x03, 0x04, 0x04, 0x28, 0x13, 0x12, 0x04, 0x00, 0x04, - 0x04, 0x04, 0xd6, 0x1e, 0xda, 0xfb, 0x00, 0x02, 0x00, 0x06, 0x69, 0xd0, 0x30, 0xec, 0x28, 0x0f, 0xfc, 0x81, 0x20, 0x05, 0xb9, 0x30, 0xf8, 0x8a, - 0xf6, 0x5c, 0x05, 0xff, 0xb4, 0x5a, 0x42, 0x48, 0x0b, 0x65, 0x2f, 0xb3, 0x38, 0x1f, 0x63, 0x28, 0x0f, 0x49, 0xad, 0x28, 0x09, 0x6c, 0x2f, 0xc3, - 0x6e, 0x26, 0x9d, 0x05, 0x17, 0xa7, 0xce, 0x46, 0xfd, 0x6e, 0x73, 0x28, 0x87, 0x50, 0x89, 0xe9, 0x40, 0x89, 0x05, 0x98, 0x21, 0xd0, 0xff, 0x73, - 0xab, 0x29, 0x1f, 0x68, 0x47, 0x8d, 0x49, 0x2f, 0xbf, 0x73, 0x47, 0x9d, 0x04, 0xdf, 0x47, 0xde, 0xd1, 0x7f, 0x06, 0x1f, 0xb2, 0x49, 0x68, 0x7f, - 0x91, 0x81, 0x52, 0x0b, 0x05, 0x79, 0xa1, 0xf4, 0x01, 0x5d, 0x29, 0x52, 0x3f, 0x96, 0xcc, 0x91, 0x06, 0x38, 0x13, 0x80, 0x3f, 0xff, 0x1c, 0xbc, - 0x08, 0xb8, 0x44, 0xc5, 0x08, 0x43, 0xb8, 0x38, 0x15, 0x1c, 0xc8, 0xc4, 0xb3, 0x06, 0xb3, 0x7f, 0x06, 0x3a, 0x97, 0xb8, 0x31, 0xff, 0x68, 0x4b, - 0xf1, 0xd1, 0xff, 0x05, 0x7b, 0xa3, 0x11, 0x04, 0x30, 0x0a, 0x04, 0x3b, 0x04, 0x35, 0x20, 0x05, 0x40, 0x28, 0x21, 0x3a, 0x82, 0x28, 0x1d, 0x35, - 0x04, 0x20, 0x00, 0x3e, 0x48, 0x2d, 0x40, 0x0e, 0x04, 0x3e, 0x04, 0x32, 0x20, 0x1f, 0x0c, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x00, 0x03, - 0x0b, 0x04, 0x03, 0x0d, 0x05, 0x05, 0x04, 0x00, 0x0c, 0x04, 0x03, 0x05, 0x05, 0x05, 0x05, 0x23, 0x00, 0x1c, 0xe0, 0x01, 0x00, 0x00, 0x07, 0x69, - 0xab, 0x0e, 0x30, 0xca, 0x30, 0xea, 0x28, 0x19, 0x06, 0x38, 0x13, 0x3f, 0xfc, 0x43, 0xff, 0x48, 0x01, 0x38, 0x15, 0x3b, 0x23, 0x05, 0xd8, 0x13, - 0xd8, 0x17, 0x90, 0x89, 0x3f, 0xb9, 0x05, 0x7e, 0xb9, 0x7e, 0x4b, 0xa0, 0x75, 0x06, 0x18, 0x15, 0xb1, 0x7f, 0x30, 0xf5, 0x06, 0xb1, 0xff, 0x06, - 0x5e, 0x2f, 0xa0, 0x04, 0x52, 0xa3, 0x90, 0x29, 0x52, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x74, 0xce, 0x98, 0xb0, 0xac, 0xb9, 0x44, 0xc5, 0xef, - 0x06, 0x58, 0x15, 0xd1, 0xff, 0x9a, 0x95, 0x45, 0x2f, 0xbd, 0x7b, 0x9b, 0x04, 0xd8, 0x2d, 0x53, 0xff, 0x57, 0xe1, 0x06, 0x81, 0xff, 0x1a, 0x28, - 0x17, 0x3d, 0x06, 0x88, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x06, 0x05, 0x0c, 0x09, 0x04, 0x04, 0x06, 0x06, 0x08, 0x06, 0x04, - 0x07, 0x05, 0x20, 0x05, 0x06, 0xff, 0x13, 0x04, 0x07, 0xf5, 0x00, 0x00, 0x08, 0x28, 0x17, 0xf3, 0x30, 0x12, 0xbf, 0x30, 0xd6, 0x48, 0x1b, 0xde, - 0x5d, 0x06, 0x78, 0x17, 0x74, 0xbf, 0x2f, 0xab, 0x62, 0x66, 0x1b, 0x06, 0xd0, 0x7f, 0x05, 0xf7, 0x1b, 0x58, 0x17, 0xb0, 0x7f, 0x05, 0xdd, 0xb3, - 0xc0, 0x07, 0xf1, 0x7f, 0x05, 0xf1, 0xff, 0x4e, 0x57, 0x54, 0x58, 0x03, 0x5e, 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x58, 0x1b, 0x78, 0xce, 0xc0, - 0x12, 0xd0, 0x0c, 0xbe, 0x58, 0x19, 0xfc, 0xc8, 0x07, 0x13, 0x7f, 0xeb, 0xb5, 0x06, 0x63, 0xff, 0xe1, 0x06, 0x63, 0xff, 0x58, 0x17, 0x42, 0x28, - 0x1d, 0x31, 0x28, 0x1b, 0x1c, 0x38, 0x04, 0x4f, 0x04, 0xe8, 0x07, 0x0f, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x07, 0x06, 0x00, 0x04, 0x0a, 0x05, - 0x05, 0x07, 0x07, 0x07, 0x05, 0x20, 0x08, 0x06, 0x20, 0x05, 0x07, 0xe8, 0x1e, 0x4c, 0xfd, 0x10, 0x00, 0x00, 0x09, 0x28, 0x17, 0xb9, 0x30, 0xc6, - 0x30, 0x10, 0xa3, 0x30, 0xfc, 0x28, 0x19, 0xe3, 0x30, 0xfb, 0x30, 0x56, 0xe9, 0x20, 0x03, 0xde, 0x28, 0x2b, 0xc1, 0x20, 0x0d, 0x05, 0x7e, 0x2f, - 0x73, 0xc1, 0x28, 0x17, 0x3c, 0x9f, 0x65, 0x00, 0x2d, 0x00, 0x4c, 0x2f, 0xb5, 0x1f, 0x20, 0x00, 0x4d, 0x4f, 0xbb, 0x3f, 0x3d, 0x04, 0xf8, 0x27, - 0xb0, 0x7f, 0x00, 0x50, 0x81, 0xfd, 0x04, 0xdf, 0x45, 0x38, 0x17, 0x70, 0xff, 0x58, 0x15, 0x05, 0xd1, 0x03, 0x91, 0x7f, 0x67, 0x40, 0x81, 0x70, - 0x61, 0x06, 0x80, 0x7f, 0x31, 0x7f, 0x05, 0xf0, 0x7d, 0x00, 0x00, 0x61, 0x53, 0x08, 0xaf, 0x65, 0x82, 0x84, 0x38, 0x17, 0x2d, 0x00, 0xc9, 0x04, - 0x62, 0xfc, 0x66, 0x70, 0x60, 0x05, 0xd8, 0x1f, 0x74, 0xce, 0x00, 0xa4, 0xc2, 0xf0, 0xd2, 0x7c, 0xc5, 0x7c, 0xb7, 0x0d, 0xcc, 0xb9, 0x28, 0xcc, - 0x06, 0x5b, 0x97, 0x92, 0x7f, 0xeb, 0x06, 0x03, 0x81, 0xb4, 0x73, 0xff, 0x65, 0x06, 0x41, 0xfd, 0x58, 0x17, 0x41, 0x28, 0x17, 0x38, 0x04, 0x44, - 0x3b, 0x48, 0x15, 0x2d, 0x00, 0x1b, 0x28, 0x29, 0x2d, 0x00, 0x5c, 0x1c, 0x48, 0x2f, 0x47, 0x28, 0x35, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, - 0x08, 0x07, 0x00, 0x06, 0x0b, 0x06, 0x06, 0x08, 0x08, 0x08, 0x06, 0x21, 0x09, 0x07, 0x20, 0x05, 0x08, 0x57, 0x1c, 0x24, 0x28, 0x17, 0x47, 0x0a, - 0x00, 0x08, 0x17, 0xec, 0x30, 0xaa, 0x28, 0x15, 0x06, 0x54, 0x97, 0x36, 0x17, 0x15, 0x20, 0x00, 0x79, 0x28, 0x17, 0x4c, 0x2f, 0xb7, 0xf3, 0x05, - 0x4f, 0x39, 0xbf, 0x00, 0x18, 0x17, 0x65, 0x2f, 0xbd, 0x38, 0x9f, 0x05, 0x50, 0x81, 0x00, 0x58, 0x17, 0x05, 0x70, 0xfd, 0x00, 0x38, 0x17, 0x78, - 0x20, 0x29, 0x9f, 0x05, 0x91, 0x81, 0x06, 0xf1, 0xff, 0xb8, 0x17, 0xb1, 0x83, 0x02, 0x60, 0x66, 0x05, 0xd8, 0x15, 0x98, 0x17, 0x74, 0xc7, 0x08, - 0xb8, 0x28, 0x6e, 0xc6, 0x07, 0x18, 0x17, 0x31, 0xfd, 0x6e, 0x06, 0x21, 0xff, 0x58, 0x17, 0x92, 0x7b, 0xe3, 0x31, 0x00, 0x6f, 0x05, 0x4f, 0xb8, - 0xf8, 0x17, 0x20, 0x00, 0x38, 0x20, 0x03, 0x07, 0x1b, 0x04, 0x35, 0x04, 0x3e, 0x28, 0x17, 0x0d, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x00, 0x09, - 0x08, 0x05, 0x0c, 0x07, 0x07, 0x09, 0x09, 0x08, 0x09, 0x07, 0x0a, 0x08, 0x20, 0x05, 0x09, 0x9c, 0x1d, 0x04, 0xa5, 0xfc, 0x00, 0x00, 0x0b, 0x28, - 0x17, 0xbf, 0x30, 0x5d, 0xeb, 0x28, 0x15, 0xcb, 0x28, 0x15, 0x06, 0x1c, 0xad, 0x5f, 0xaf, 0x74, 0x2f, 0xb3, 0x5a, 0x6c, 0x24, 0x07, 0x6e, 0x4e, - 0xaf, 0x06, 0x90, 0x7f, 0x67, 0x2f, 0xad, 0x65, 0xfc, 0x05, 0xed, 0xb2, 0x38, 0x17, 0xb0, 0xff, 0x38, 0x19, 0x06, 0xb0, 0xff, 0x06, 0x91, 0x7f, - 0x75, 0x00, 0x40, 0xf1, 0x06, 0x01, 0xfd, 0x00, 0x00, 0xa0, 0x52, 0xf0, 0x6c, 0x03, 0x57, 0x7f, 0x3c, 0x5c, 0x9a, 0x4e, 0x05, 0xf8, 0x11, 0x78, - 0x17, 0x03, 0xc8, 0xd0, 0xe8, 0xb8, 0xd0, 0xb0, 0x06, 0x33, 0x7b, 0x00, 0x33, 0x7f, 0x5a, 0xeb, 0x06, 0xa1, 0xff, 0x6e, 0x05, 0x2f, 0x1f, 0x00, - 0x38, 0x17, 0x42, 0x28, 0x1b, 0x3b, 0xf0, 0x48, 0x07, 0x38, 0x19, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x0a, 0x09, 0x07, 0x0d, 0x00, 0x08, - 0x08, 0x0a, 0x0a, 0x0a, 0x08, 0x0b, 0x09, 0x80, 0x20, 0x05, 0x0a, 0x6d, 0x1d, 0x8b, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x69, 0xd0, 0x30, 0xec, 0x30, - 0xf3, 0x30, 0x02, 0xb7, 0x30, 0xa2, 0x30, 0xde, 0x5d, 0x06, 0x38, 0x17, 0x56, 0xde, 0x48, 0x13, 0x3f, 0x27, 0x63, 0x06, 0x28, 0x15, 0xd0, 0x7f, - 0x05, 0xf8, 0x13, 0x07, 0x30, 0xff, 0x43, 0xab, 0x2d, 0x97, 0x6d, 0x45, 0x93, 0x69, 0x2f, 0xb5, 0xe0, 0x2f, 0xaf, 0xf1, 0x91, 0xf0, 0x04, 0xd8, - 0x2b, 0xd0, 0x7f, 0x3a, 0x23, 0x05, 0xd0, 0x81, 0xf4, 0x5d, 0x26, 0x4f, 0x20, 0x7f, 0x89, 0x06, 0x78, 0x15, 0x00, 0x00, 0x1c, 0xbc, 0x0c, 0x00, - 0xb8, 0xdc, 0xc2, 0x44, 0xc5, 0x20, 0x00, 0xfc, 0x55, 0xc8, 0x0e, 0x93, 0x7f, 0xea, 0x06, 0x83, 0xff, 0x12, 0x48, 0x13, 0x35, 0x28, 0x13, 0x70, - 0x41, 0x06, 0x28, 0x15, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x0b, 0x13, 0x13, 0x13, 0x10, 0x0a, 0x0a, 0x0b, 0x20, 0x06, 0x05, 0x13, 0x0b, - 0x0b, 0x00, 0x0b, 0x0b, 0x11, 0x1c, 0xbe, 0xff, 0x00, 0x00, 0x01, 0x0d, 0x69, 0xa8, 0x30, 0xb9, 0x30, 0xc8, 0x28, 0x1b, 0x00, 0xde, 0x30, 0xc9, - 0x30, 0xa5, 0x30, 0xfc, 0x30, 0x22, 0xe9, 0x30, 0x05, 0xdf, 0xb0, 0x45, 0x00, 0x78, 0x2f, 0xaf, 0x72, 0xaa, 0x2f, 0xa7, 0x6d, 0x2f, 0xb9, 0x64, - 0x2e, 0x35, 0x72, 0x05, 0xce, 0xb3, 0x45, 0x2f, 0x00, 0x73, 0x40, 0x7f, 0xe9, 0xa0, 0x7f, 0x05, 0xb8, 0x1f, 0x07, 0x70, 0xff, 0x06, 0x91, 0x7f, - 0x80, 0x06, 0xd1, 0xff, 0xc3, 0x57, 0xaf, 0x65, 0x79, 0x72, 0xf7, 0x01, 0x96, 0x6c, 0x9a, 0x5c, 0x67, 0xc9, 0x62, 0x06, 0x18, 0x1d, 0x00, 0xd0, - 0xc5, 0xa4, 0xc2, 0xb8, 0xd2, 0x08, 0xb8, 0x03, 0xc8, 0xb9, 0x50, 0xb4, 0x7c, 0xb7, 0x06, 0x1b, 0x99, 0x0e, 0xf2, 0x7f, 0x45, 0x2d, 0x28, 0x0f, - 0x42, 0x04, 0x40, 0x28, 0x19, 0x3c, 0x28, 0x21, 0x17, 0x34, 0x04, 0x43, 0x20, 0x0b, 0x30, 0x05, 0xa8, 0x1d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, - 0x7f, 0x00, 0x0c, 0x0b, 0x09, 0x07, 0x0b, 0x0b, 0x0c, 0x0c, 0x10, 0x0c, 0x0a, 0x13, 0x30, 0x05, 0x0c, 0xac, 0x1b, 0x7e, 0x00, 0xfb, 0x00, 0x00, - 0x0e, 0x69, 0xac, 0x30, 0xea, 0x8d, 0x28, 0x0d, 0xb7, 0x30, 0xa2, 0x05, 0xe8, 0x0f, 0x7f, 0xff, 0x47, 0x4f, 0xaf, 0x7e, 0x69, 0x06, 0x6f, 0x2d, - 0xb0, 0x7f, 0x05, 0xb8, 0x0d, 0x00, 0x50, 0xff, 0x3f, 0xa3, 0x06, 0x71, 0x7f, 0x7a, 0xc0, 0x07, 0x01, 0x7f, 0x06, 0x51, 0xff, 0xa0, 0x52, 0x29, - 0x52, 0x7f, 0x89, 0x30, 0x9a, 0x4e, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x08, 0xac, 0xac, 0xb9, 0x0d, 0xdc, 0xc2, 0x44, 0xc5, 0x06, 0x53, 0x7d, 0xd3, - 0x7f, 0xeb, 0x06, 0xa3, 0xff, 0x44, 0x7a, 0x06, 0x43, 0xfd, 0x00, 0x00, 0x13, 0x28, 0x0d, 0x3b, 0x04, 0x47, 0x38, 0x28, 0x1d, 0x38, 0x04, 0x4f, - 0x05, 0xa8, 0x0f, 0x08, 0x14, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x0d, 0x0c, 0x0a, 0x08, 0x0c, 0x0c, 0x0d, 0x0d, 0x10, 0x0d, 0x0b, 0x06, 0x30, - 0x05, 0x0d, 0x7d, 0x1e, 0xed, 0x00, 0xf9, 0x00, 0x00, 0x0f, 0x69, 0xe0, 0x30, 0xeb, 0x97, 0x48, 0x15, 0xde, 0x5d, 0x06, 0x58, 0x17, 0x4d, 0x4f, - 0xa1, 0x06, 0x78, 0x15, 0xb0, 0x7f, 0xe1, 0x06, 0x58, 0x17, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x46, 0x7a, 0x14, 0x5c, 0x06, 0xb8, 0x17, 0x10, - 0x34, 0xbb, 0x74, 0x48, 0x17, 0x20, 0x00, 0xfc, 0xc8, 0xa0, 0x0e, 0x53, 0x7f, 0xfa, 0x06, 0xc3, 0xff, 0x1c, 0x04, 0x43, 0x04, 0x40, 0xe0, 0x06, - 0x88, 0x15, 0x10, 0x07, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x0e, 0x10, 0x10, 0x11, 0x10, 0x00, 0x11, 0x0e, 0x0e, 0x11, 0x10, 0x0e, 0x10, 0x0e, 0x00, - 0x0e, 0x0e, 0x0e, 0x02, 0x1b, 0x34, 0xff, 0x00, 0x00, 0x00, 0x10, 0x69, 0xca, 0x30, 0xd0, 0x30, 0xfc, 0x2a, 0x30, 0xe9, 0x06, 0x88, 0x17, 0x4e, - 0x2f, 0xaf, 0x76, 0x2f, 0xb3, 0x72, 0xf8, 0x28, 0x1d, 0x06, 0x3f, 0xb1, 0x07, 0xb0, 0x7f, 0x06, 0x3f, 0xaf, 0x0e, 0xf0, 0x7f, 0xb3, 0x7e, 0xe6, - 0x10, 0x74, 0xc9, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x98, 0xb0, 0x0c, 0x14, 0xbc, 0x7c, 0xb7, 0x06, 0x78, 0x15, 0x0f, 0x12, 0x7f, 0x1d, 0x04, - 0x15, 0x30, 0x04, 0x32, 0x20, 0x03, 0x40, 0x28, 0x1d, 0x30, 0x06, 0x28, 0x19, 0xc0, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x30, 0xff, 0x0f, 0x11, 0x11, - 0x12, 0x11, 0x12, 0x00, 0x0f, 0x0f, 0x12, 0x11, 0x0f, 0x11, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x72, 0x1e, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x11, 0x69, - 0xd0, 0x30, 0xb9, 0x30, 0xaf, 0x30, 0xd1, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x42, 0x2f, 0x27, 0x73, 0x00, 0x71, 0x2f, 0xb5, 0x01, 0x65, 0x00, 0x20, - 0x00, 0x43, 0x00, 0x6f, 0x2f, 0xbf, 0x15, 0x6e, 0x00, 0x74, 0x2f, 0xc3, 0x79, 0x05, 0x4f, 0xbf, 0x50, 0x2f, 0xa7, 0x46, 0x79, 0x20, 0x81, 0x20, - 0x00, 0x62, 0xa0, 0x89, 0x05, 0xf0, 0xff, 0x6b, 0x88, 0x29, 0x13, 0x6e, 0x00, 0x6c, 0x2f, 0xb3, 0x6e, 0x00, 0x64, 0xd6, 0x05, 0xcf, 0xb7, 0x30, - 0xff, 0x65, 0x21, 0x81, 0x69, 0x21, 0x7d, 0x51, 0x8b, 0x63, 0x35, 0x00, 0x68, 0x2f, 0xbd, 0x05, 0xb0, 0x7f, 0xed, 0x41, 0x7f, 0x56, 0x60, 0x7d, - 0x40, 0x6f, 0x05, 0xcf, 0xb4, 0xf4, 0x5d, 0xaf, 0x65, 0x4b, 0x51, 0x81, 0x06, 0x98, 0x17, 0x14, 0xbc, 0xa4, 0xc2, 0x6c, 0xd0, 0x06, 0xf3, 0x7f, - 0xf1, 0x06, 0xd2, 0x7f, 0x51, 0xff, 0x72, 0x7d, 0x05, 0xd1, 0xff, 0x21, 0x04, 0x42, 0x48, 0x11, 0x44, 0x3d, 0x28, 0x1f, 0x20, 0x00, 0x11, 0x28, - 0x25, 0x41, 0x04, 0x1c, 0x3a, 0x04, 0x3e, 0x28, 0x2b, 0x0d, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x10, 0x04, 0x00, 0x12, 0x05, 0x12, 0x13, 0x10, - 0x10, 0x05, 0x12, 0x00, 0x12, 0x04, 0x10, 0x10, 0x10, 0x10, 0x78, 0x1e, 0x40, 0x1a, 0x28, 0x17, 0x12, 0x69, 0xe9, 0x30, 0xfb, 0x30, 0x00, 0xea, - 0x30, 0xaa, 0x30, 0xcf, 0x30, 0xde, 0x5d, 0xa2, 0x06, 0x3d, 0x2f, 0x4c, 0x2f, 0xaf, 0x20, 0x00, 0x52, 0x26, 0x97, 0x6f, 0x30, 0x00, 0x6a, 0x06, - 0x2f, 0x31, 0x10, 0x0e, 0xf0, 0x7f, 0xc9, 0x62, 0xcc, 0x91, 0x08, 0x65, 0x59, 0xc8, 0x54, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0xac, 0x06, 0xb9, 0x24, - 0xc6, 0x58, 0xd5, 0x06, 0x7b, 0x99, 0x0e, 0xf3, 0x7f, 0x20, 0x2e, 0x04, 0x38, 0x28, 0x05, 0x45, 0x28, 0x19, 0x10, 0x06, 0x51, 0x7f, 0x10, 0x06, - 0xf5, 0xff, 0x11, 0x00, 0x0d, 0x0d, 0x0e, 0x0d, 0x0e, 0x11, 0x11, 0x0e, 0x00, 0x0d, 0x10, 0x0d, 0x11, 0x11, 0x11, 0x11, 0x32, 0x20, 0x1e, 0x42, - 0x28, 0x17, 0x13, 0x69, 0xbb, 0x30, 0xa6, 0x15, 0x30, 0xbf, 0x30, 0x06, 0x9c, 0xaf, 0x43, 0x2f, 0x9d, 0x75, 0x2b, 0x1f, 0xc2, 0x06, 0x18, 0x11, - 0x10, 0x0f, 0x50, 0x7f, 0x11, 0x4f, 0xbe, 0x8f, 0x06, 0x9f, 0xad, 0x00, 0x01, 0x00, 0x38, 0xc1, 0xb0, 0xc6, 0xc0, 0xd0, 0x10, 0x06, 0x93, 0x7f, - 0x01, 0x21, 0x04, 0x35, 0x04, 0x43, 0x04, 0x42, 0x06, 0x88, 0x17, 0x80, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x0a, 0x08, 0x06, 0x09, 0x09, 0x12, 0x00, - 0x12, 0x0b, 0x09, 0x11, 0x0a, 0x12, 0x12, 0x12, 0x00, 0x12, 0x84, 0x19, 0x39, 0xfc, 0x00, 0x00, 0x14, 0x02, 0x69, 0xe1, 0x30, 0xea, 0x30, 0xe9, - 0x06, 0xa8, 0x17, 0x4d, 0xae, 0x28, 0x17, 0x6c, 0x2f, 0xad, 0x6c, 0x20, 0x05, 0x06, 0x38, 0x1b, 0x10, 0x0e, 0xf0, 0x7f, 0x85, 0x01, 0x68, 0x29, - 0x52, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x7f, 0xaf, 0x02, 0x5c, 0xba, 0xac, 0xb9, 0x7c, 0xc5, 0x10, 0x06, 0x93, 0x7f, 0x1c, 0x88, 0x28, 0x17, 0x3b, - 0x04, 0x38, 0x20, 0x03, 0x4c, 0x04, 0x4f, 0xc0, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x13, 0x0f, 0x0f, 0x10, 0x0f, 0x10, 0x00, 0x13, 0x13, - 0x10, 0x0f, 0x0d, 0x0f, 0x13, 0x13, 0x02, 0x13, 0x13, 0x1a, 0x19, 0xe7, 0xfd, 0x00, 0x3f, 0xff, 0x01, 0x00, 0x0e, 0x0e, 0x0f, 0x0e, 0x0f, 0x01, - 0x01, 0x0f, 0x00, 0x0e, 0x0c, 0x0e, 0x01, 0x01, 0x01, 0x01, 0x02, 0x90, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x48, 0x03, - 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x00, 0x03, 0x04, 0x12, 0x03, 0x03, 0x13, 0x03, 0x04, 0x40, 0x04, 0x20, 0x0b, 0x12, 0x04, - 0x04, 0x04, 0x04, 0x05, 0x00, 0x03, 0x0b, 0x04, 0x03, 0x0d, 0x05, 0x05, 0x04, 0x00, 0x0c, 0x04, 0x03, 0x05, 0x05, 0x05, 0x05, 0x06, 0x00, 0x05, - 0x0c, 0x09, 0x04, 0x04, 0x06, 0x06, 0x06, 0x10, 0x04, 0x07, 0x05, 0x20, 0x05, 0x06, 0x07, 0x06, 0x04, 0x00, 0x0a, 0x05, 0x05, 0x07, 0x07, 0x07, - 0x05, 0x08, 0x40, 0x06, 0x20, 0x05, 0x07, 0x08, 0x07, 0x06, 0x0b, 0x06, 0x14, 0x06, 0x08, 0x08, 0x28, 0xb5, 0x07, 0x20, 0x05, 0x08, 0x09, 0x00, - 0x08, 0x05, 0x0c, 0x07, 0x07, 0x09, 0x09, 0x09, 0x10, 0x07, 0x0a, 0x08, 0x20, 0x05, 0x09, 0x0a, 0x09, 0x07, 0x00, 0x0d, 0x08, 0x08, 0x0a, 0x0a, - 0x0a, 0x08, 0x0b, 0x4e, 0x09, 0x20, 0x05, 0x0a, 0x0b, 0x20, 0xbc, 0x20, 0x05, 0x20, 0x06, 0x05, 0x00, 0x13, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, - 0x09, 0x42, 0x07, 0x20, 0x05, 0x0c, 0x0c, 0x0a, 0x13, 0x30, 0x05, 0x0c, 0x08, 0x0d, 0x0c, 0x0a, 0x08, 0x20, 0x05, 0x0d, 0x0d, 0x0b, 0x40, 0x06, - 0x30, 0x05, 0x0d, 0x0e, 0x10, 0x10, 0x11, 0x10, 0x00, 0x11, 0x0e, 0x0e, 0x11, 0x10, 0x0e, 0x10, 0x0e, 0x40, 0x0e, 0x20, 0xdc, 0x11, 0x11, 0x12, - 0x11, 0x12, 0x0f, 0x01, 0x0f, 0x12, 0x11, 0x0f, 0x11, 0x0f, 0x0f, 0x21, 0x14, 0x00, 0x04, 0x12, 0x05, 0x12, 0x13, 0x10, 0x10, 0x05, 0x06, 0x12, - 0x12, 0x04, 0x10, 0x10, 0x20, 0x2c, 0x20, 0x32, 0x0d, 0x00, 0x0e, 0x11, 0x11, 0x0e, 0x0d, 0x10, 0x0d, 0x11, 0x78, 0x11, 0x20, 0x2c, 0xe9, 0x4f, - 0xf1, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0xd4, 0x28, 0x00, 0x11, 0x04, 0x00, 0x00, 0x30, 0x01, 0x6a, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x49, 0xed, 0x24, 0x16, 0x00, 0x01, 0x00, 0x02, 0x6a, 0xdb, 0x30, 0xdb, 0x30, 0x06, 0xb8, - 0x19, 0x07, 0x48, 0x00, 0x68, 0x00, 0x6f, 0x20, 0x03, 0x30, 0x05, 0x10, 0x16, 0x30, 0x7f, 0x02, 0x0d, 0x97, 0x0d, 0x97, 0x3a, 0x53, 0x06, 0x9b, - 0x1b, 0x38, 0x10, 0xd6, 0x38, 0xd6, 0x10, 0x06, 0xb3, 0x7f, 0x25, 0x04, 0x3e, 0x04, 0x65, 0x45, 0x20, 0x03, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x01, - 0x70, 0x01, 0x03, 0x40, 0x0a, 0x80, 0x58, 0x17, 0x03, 0x6a, 0xeb, 0x30, 0xdc, 0x30, 0xf3, 0xc1, 0x20, 0x03, 0x06, 0x7f, 0xb5, 0x4c, 0x00, 0x75, - 0x00, 0x62, 0x28, 0x19, 0x60, 0x6d, 0x40, 0x05, 0x10, 0x16, 0x10, 0x7f, 0x62, 0x53, 0xa6, 0x90, 0x5a, 0x40, 0x53, 0x06, 0x98, 0x19, 0x5c, 0xb8, - 0x24, 0xbc, 0x14, 0xbc, 0xc1, 0x06, 0x9f, 0xb3, 0x0e, 0xf3, 0x7f, 0x1b, 0x04, 0x43, 0x04, 0x31, 0x28, 0x1b, 0x65, 0x3c, 0x40, 0x05, 0x10, 0x1e, - 0x14, 0xff, 0x02, 0x02, 0x70, 0x01, 0x01, 0x40, 0x0a, 0x11, 0x31, 0xed, 0xb8, 0x28, 0x17, 0x04, 0x6a, 0xde, 0x28, 0x15, 0x10, 0xb8, 0x30, 0xcb, - 0x06, 0x88, 0x17, 0x4d, 0x00, 0x61, 0x00, 0x05, 0x6e, 0x00, 0x7a, 0x00, 0x69, 0x20, 0x05, 0x69, 0x10, 0x16, 0x20, 0x7f, 0x02, 0xfc, 0x66, 0x50, - 0x9f, 0x3c, 0x5c, 0x06, 0x98, 0x17, 0xcc, 0x06, 0xb9, 0xc0, 0xc9, 0xc8, 0xb2, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x00, 0x04, 0x30, 0x04, - 0x3d, 0x04, 0x37, 0x04, 0x38, 0xb2, 0x20, 0x05, 0x38, 0x06, 0x28, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x03, 0x70, 0x01, 0x02, 0x88, 0x40, 0x0a, - 0x2a, 0xed, 0x51, 0x28, 0x17, 0x05, 0x6a, 0xb7, 0x00, 0x30, 0xbb, 0x30, 0xeb, 0x30, 0xa6, 0x30, 0xa7, 0x88, 0x06, 0x68, 0x1b, 0x53, 0x00, 0x68, - 0x28, 0x13, 0x73, 0x00, 0x65, 0x0e, 0x00, 0x6c, 0x00, 0x77, 0x20, 0x05, 0x05, 0xf8, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x01, 0x5e, 0x5e, 0x58, - 0x62, 0x53, 0xe6, 0x97, 0x06, 0x78, 0x1b, 0x03, 0xdc, 0xc2, 0x40, 0xc1, 0xe8, 0xc6, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x40, 0x28, 0x28, 0x11, - 0x41, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x72, 0x32, 0x20, 0x05, 0x06, 0x18, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0xd0, 0x01, 0xba, 0x32, 0xec, - 0x30, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x01, 0x70, 0x01, 0x03, 0x9f, 0x40, 0x0a, 0x02, 0x02, 0x70, 0x01, 0x50, 0x0a, 0xf8, 0x5f, 0xf0, 0x57, - 0x3f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x7c, 0xb3, 0x00, 0x11, 0x15, 0x00, 0x00, 0x30, 0x01, 0x6b, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x28, 0x2a, 0xda, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x6b, 0xb9, 0x30, 0xc8, 0x30, 0xc3, 0x00, - 0x30, 0xaf, 0x30, 0xdb, 0x30, 0xeb, 0x30, 0xe0, 0x10, 0x30, 0xde, 0x5d, 0x05, 0xf8, 0x25, 0x53, 0x00, 0x74, 0x00, 0x01, 0x6f, 0x00, 0x63, 0x00, - 0x6b, 0x00, 0x68, 0x20, 0x07, 0x01, 0x6c, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x43, 0x20, 0x11, 0x16, 0x75, 0x00, 0x6e, 0x20, 0x19, 0x79, 0x06, 0x20, - 0x7f, 0x06, 0xf0, 0xff, 0x73, 0x8d, 0x21, 0x01, 0x6c, 0x00, 0xe4, 0x20, 0xff, 0x05, 0xb1, 0x7f, 0x63, 0x61, 0x7d, 0x5d, 0x61, 0x05, 0xea, 0x26, - 0x45, 0x20, 0xef, 0x52, 0x01, 0x51, 0xfd, 0x6f, 0x05, 0xea, 0xa6, 0x00, 0xaf, 0x65, 0xb7, 0x5f, 0xe5, 0x54, 0x14, 0x5c, 0x08, 0x69, 0x64, 0x01, - 0x77, 0x06, 0x3b, 0x21, 0xa4, 0xc2, 0xa1, 0x00, 0xd1, 0x40, 0xd6, 0x84, 0xb9, 0x20, 0x00, 0xfc, 0x70, 0xc8, 0x06, 0x3b, 0xa1, 0x06, 0xf2, 0x7f, - 0x06, 0xf1, 0xff, 0x1b, 0x04, 0x35, 0x04, 0x00, 0x3d, 0x04, 0x20, 0x00, 0x21, 0x04, 0x42, 0x04, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x33, 0x20, 0x05, - 0x3b, 0x04, 0x0c, 0x4c, 0x04, 0x3c, 0x04, 0x0e, 0x74, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x01, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x04, 0x01, 0x01, 0x0f, - 0x04, 0x02, 0x11, 0x0f, 0x01, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x83, 0x28, 0x17, 0xb3, 0x30, 0xfc, 0x30, 0xcd, 0x06, 0x28, 0x11, 0x78, 0x17, - 0x17, 0x6b, 0x00, 0xe5, 0x28, 0x03, 0x65, 0x05, 0xe8, 0x0f, 0x00, 0x10, 0x7f, 0x07, 0x10, 0xff, 0xd1, 0x05, 0x98, 0x0d, 0xb9, 0x97, 0x63, 0x28, - 0x0b, 0x6e, 0x00, 0x69, 0x06, 0x08, 0x11, 0xc0, 0x98, 0x17, 0x06, 0xb0, 0x81, 0xaf, 0x65, 0xd1, 0x79, 0x10, 0x80, 0xc3, 0x06, 0x58, 0x13, 0x58, - 0x17, 0x54, 0xcf, 0x24, 0xb1, 0x06, 0x78, 0x15, 0x07, 0x12, 0x7f, 0xb5, 0x51, 0xff, 0xe2, 0x06, 0x82, 0x81, 0x98, 0x17, 0x3a, 0x28, 0x17, 0x3d, - 0x28, 0x25, 0xc0, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x02, 0x0d, 0x0d, 0x0d, 0x0d, 0x03, 0x00, 0x02, 0x02, 0x0d, 0x03, 0x10, 0x0d, 0x02, - 0x02, 0x00, 0x02, 0x02, 0x89, 0x27, 0x3e, 0x09, 0x00, 0x00, 0x00, 0x04, 0x6b, 0xf4, 0x30, 0xa7, 0x30, 0xb9, 0x30, 0x01, 0xc8, 0x30, 0xe9, 0x30, - 0xfb, 0x30, 0xa4, 0x20, 0x0b, 0x11, 0xfc, 0x30, 0xbf, 0x20, 0x0b, 0xf3, 0x30, 0xc9, 0x05, 0x68, 0x29, 0x68, 0x56, 0x2f, 0x19, 0x3e, 0x31, 0x72, - 0x2e, 0xa9, 0x20, 0x00, 0x47, 0x2d, 0x00, 0xf6, 0x2f, 0xbf, 0x61, 0x2f, 0xb7, 0x36, 0xab, 0x64, 0x05, 0x2b, 0x3b, 0xf8, 0x00, 0xd0, 0x7f, 0x06, - 0xf0, 0xff, 0x05, 0x1d, 0xbb, 0x08, 0xd0, 0xff, 0x05, 0x1f, 0xc1, 0x7f, 0x89, 0xa6, 0x04, 0x7e, 0x79, 0x72, 0x70, 0x51, 0x06, 0x78, 0x19, 0xa0, - 0xbc, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x7c, 0xb7, 0x08, 0xc6, 0x03, 0xc8, 0xd0, 0x80, 0xb7, 0xdc, 0xb4, 0x05, 0xf8, 0x21, 0x0e, 0xf2, 0x7f, 0xa0, - 0x78, 0x17, 0x12, 0x28, 0x1f, 0x41, 0x04, 0x42, 0x04, 0x40, 0x00, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x13, 0x04, 0x51, 0x88, 0x20, 0x0b, 0x30, 0x04, - 0x3b, 0x20, 0x0d, 0x3d, 0x04, 0x34, 0xe2, 0x04, 0xa8, 0x2b, 0x08, 0xd4, 0xff, 0x10, 0x0d, 0x10, 0x7f, 0x03, 0x15, 0x15, 0x20, 0x01, 0x03, 0xa0, - 0x20, 0x06, 0x07, 0x20, 0x05, 0x03, 0x03, 0x09, 0x29, 0x83, 0x02, 0x08, 0x00, 0x00, 0x05, 0x6b, 0xa8, 0x28, 0x15, 0xc6, 0x3d, 0x30, 0xeb, 0x48, - 0x13, 0x38, 0x1d, 0x05, 0x98, 0x11, 0x5f, 0xff, 0xd6, 0x48, 0x15, 0x5f, 0x65, 0x28, 0x17, 0x67, 0x48, 0x13, 0x05, 0x98, 0x11, 0x00, 0xd0, 0x7f, - 0x06, 0xf0, 0xff, 0x05, 0x18, 0x11, 0xc8, 0x08, 0xd0, 0xff, 0x05, 0x7f, 0xbf, 0x1c, 0x4e, 0x06, 0xd8, 0x17, 0x78, 0xc6, 0xa4, 0x00, 0xc2, 0x4c, - 0xd1, 0x74, 0xb9, 0x08, 0xc6, 0xc0, 0x75, 0xd2, 0x06, 0x38, 0x17, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x2d, 0x48, 0x15, 0x35, 0x28, 0x17, 0x78, 0x33, - 0x48, 0x13, 0x05, 0x18, 0x11, 0x08, 0xd4, 0xff, 0x10, 0x0d, 0x70, 0x7f, 0x04, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x0e, 0x04, 0x04, 0x0c, 0x0e, 0x15, - 0x00, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x87, 0x29, 0x1e, 0x00, 0x0b, 0x00, 0x00, 0x06, 0x6b, 0xbb, 0x30, 0xfc, 0x2c, 0x30, 0xc7, 0x28, 0x17, 0xde, - 0x28, 0x11, 0x06, 0x18, 0x15, 0x00, 0x00, 0x57, 0x53, 0x2f, 0xa1, 0x64, 0x48, 0x17, 0x6d, 0x4f, 0xa3, 0x05, 0xf8, 0x17, 0x00, 0x70, 0x7f, 0xf0, - 0x06, 0xf0, 0xff, 0x05, 0x78, 0x17, 0x08, 0x70, 0xff, 0x05, 0x7f, 0xbd, 0x57, 0x53, 0xfc, 0x66, 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0xe0, 0xc1, - 0x70, 0xb3, 0x74, 0x1d, 0xb9, 0xcc, 0xb9, 0x06, 0x38, 0x13, 0x0f, 0x32, 0x7f, 0x78, 0x17, 0x21, 0x28, 0x0d, 0x5e, 0x34, 0x48, 0x17, 0x3c, 0x48, - 0x11, 0x05, 0x78, 0x17, 0x08, 0x74, 0xff, 0x10, 0x0d, 0x70, 0x7f, 0x05, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x05, 0x05, 0x0e, 0x00, 0x0f, 0x0f, - 0x0e, 0x05, 0x05, 0x05, 0x05, 0xc8, 0x00, 0x29, 0x19, 0x0c, 0x00, 0x00, 0x07, 0x6b, 0xd9, 0xb7, 0x28, 0x13, 0xe0, 0x06, 0x48, 0x11, 0x5f, 0xff, - 0x56, 0x2f, 0x13, 0x38, 0x13, 0x05, 0xfb, 0x27, 0xf8, 0x00, 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x7d, 0xa7, 0x08, 0x70, 0xff, 0x05, 0xff, 0xb5, - 0xe6, 0x97, 0xc6, 0x47, 0x59, 0x06, 0xb8, 0x17, 0xa0, 0xbc, 0x84, 0x06, 0x88, 0x13, 0x0f, 0x32, 0x7f, 0x78, 0x17, 0x78, 0x12, 0x68, 0x13, 0x05, - 0x78, 0x0f, 0x08, 0x74, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x06, 0x11, 0x11, 0xa8, 0x20, 0x01, 0x06, 0x20, 0x06, 0x03, 0x20, 0x05, 0x06, 0x06, 0x3b, - 0x00, 0x2a, 0x9a, 0x09, 0x00, 0x00, 0x08, 0x6b, 0xa6, 0x0e, 0x30, 0xd7, 0x30, 0xb5, 0x28, 0x17, 0x06, 0x38, 0x13, 0x3f, 0xff, 0x55, 0x2f, 0x00, - 0x70, 0x20, 0x01, 0x73, 0x2f, 0xab, 0x3f, 0xa9, 0x05, 0xf8, 0x15, 0xf0, 0x7f, 0xf0, 0x07, 0x10, 0xff, 0x05, 0xb8, 0x13, 0x08, 0x10, 0xff, 0x06, - 0x1f, 0xb5, 0x4c, 0x4e, 0x6e, 0x66, 0x08, 0x28, 0x84, 0xc9, 0x62, 0x06, 0x78, 0x19, 0xc1, 0xc6, 0xb4, 0x1c, 0xc0, 0x7c, 0xb7, 0x06, 0x78, 0x15, - 0x0f, 0x12, 0x7f, 0x78, 0x17, 0x23, 0x04, 0x5e, 0x3f, 0x20, 0x01, 0x41, 0x28, 0x15, 0x38, 0x19, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x07, - 0x2a, 0x10, 0x10, 0x20, 0x01, 0x07, 0x20, 0x06, 0x12, 0x20, 0x05, 0x07, 0x00, 0x07, 0x90, 0x2a, 0x8a, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x6b, 0xa4, - 0x30, 0xa7, 0x30, 0xfc, 0x30, 0xd6, 0x02, 0x30, 0xec, 0x30, 0xdc, 0x30, 0xea, 0x06, 0x28, 0x1d, 0x47, 0xa2, 0x2f, 0xaf, 0x76, 0x2f, 0xad, 0x65, - 0x00, 0x62, 0x2b, 0x27, 0x72, 0x3f, 0x00, 0x67, 0x05, 0xeb, 0x31, 0x00, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xdd, 0xb1, 0x08, 0x10, 0xff, 0x05, - 0xdf, 0xb9, 0x00, 0x36, 0x80, 0x2b, 0x59, 0xd2, 0x52, 0x21, 0x58, 0x80, 0x06, 0x78, 0x17, 0x08, 0xc6, 0x14, 0xbe, 0x08, 0xb8, 0xf4, 0x1c, 0xbc, - 0xac, 0xb9, 0x06, 0x58, 0x1b, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x15, 0x04, 0x40, 0x32, 0x28, 0x11, 0x35, 0x04, 0x31, 0x04, 0x3e, 0x04, 0x1c, 0x40, - 0x04, 0x33, 0x05, 0x88, 0x19, 0x08, 0x14, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x08, 0x03, 0x00, 0x03, 0x03, 0x03, 0x05, 0x08, 0x08, 0x03, 0x05, 0x00, - 0x09, 0x03, 0x08, 0x08, 0x08, 0x08, 0x25, 0x2b, 0x40, 0x38, 0x28, 0x17, 0x0a, 0x6b, 0xd9, 0x30, 0xb9, 0x30, 0x15, 0xc6, 0x30, 0xeb, 0x28, 0x15, - 0xc3, 0x20, 0x07, 0xf3, 0x06, 0x08, 0x19, 0x56, 0x56, 0x2f, 0x1f, 0x73, 0x2b, 0x1d, 0x65, 0x28, 0x13, 0x38, 0x19, 0x74, 0xbf, 0x40, 0x0b, 0x6e, - 0x05, 0x8b, 0x39, 0x00, 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x78, 0x1d, 0x08, 0x70, 0xff, 0x05, 0x7f, 0xbd, 0x02, 0x7f, 0x89, 0x5a, 0x53, 0xd5, - 0x6e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xa0, 0xbc, 0xa4, 0xc2, 0x4c, 0xd1, 0x74, 0x07, 0xb9, 0xf4, 0xbc, 0x50, 0xd1, 0x06, 0x38, 0x19, 0x0e, - 0xf2, 0x7f, 0x78, 0x17, 0x45, 0x12, 0x28, 0x1f, 0x41, 0x04, 0x42, 0x28, 0x25, 0x40, 0x48, 0x1b, 0x5c, 0x42, 0x40, 0x0b, 0x3d, 0x05, 0x08, 0x1f, - 0x08, 0x74, 0xff, 0x10, 0x0d, 0x70, 0x7f, 0x09, 0x12, 0x54, 0x12, 0x20, 0x01, 0x09, 0x20, 0x06, 0x04, 0x20, 0x05, 0x09, 0x09, 0x00, 0x62, 0x2d, - 0x66, 0x0e, 0x00, 0x00, 0x0b, 0x6b, 0x6f, 0xce, 0x06, 0xa8, 0x13, 0x3f, 0xff, 0x4e, 0x4f, 0xa5, 0x06, 0x58, 0x13, 0x00, 0x70, 0x7f, 0x06, 0xf0, - 0xff, 0xe4, 0x05, 0xbd, 0xb1, 0x08, 0x30, 0xff, 0x05, 0xbf, 0xb9, 0x17, 0x53, 0x06, 0xd8, 0x17, 0x78, 0xb1, 0xeb, 0x06, 0x98, 0x13, 0x0f, 0x32, - 0x7f, 0x78, 0x17, 0x1d, 0x28, 0x0b, 0x40, 0x05, 0xe8, 0x13, 0x08, 0x74, 0xff, 0x95, 0x10, 0x0d, 0xb0, 0x7f, 0x0a, 0x0a, 0x20, 0x01, 0x0c, 0x30, - 0x03, 0x0e, 0x40, 0x0a, 0x00, 0xa2, 0x2e, 0xcc, 0x0f, 0x00, 0x00, 0x0c, 0x6b, 0x05, 0xb4, 0x30, 0xc8, 0x30, 0xe9, 0x28, 0x13, 0xc9, 0x06, 0x48, - 0x15, 0x11, 0x00, 0x00, 0x47, 0x4f, 0xa3, 0x6c, 0x00, 0x61, 0x2f, 0xa3, 0x5f, 0x64, 0x2f, 0x23, 0x49, 0x2f, 0xbd, 0x70, 0x0d, 0x06, 0x10, 0x7f, - 0x06, 0xf0, 0xff, 0x3d, 0xa5, 0x70, 0x49, 0x05, 0x68, 0x11, 0x08, 0x30, 0xff, 0x06, 0x1f, 0xb5, 0xe5, 0x54, 0x97, 0x5f, 0x20, 0x70, 0x51, 0x06, - 0x98, 0x17, 0xe0, 0xac, 0xc0, 0xd2, 0x80, 0x1e, 0xb7, 0xdc, 0xb4, 0x06, 0x78, 0x17, 0x00, 0x12, 0x7f, 0x05, 0x7a, 0x91, 0x07, 0x53, 0x7f, 0x13, - 0x8b, 0x48, 0x07, 0x3b, 0x04, 0x30, 0x28, 0x1d, 0x34, 0x05, 0x48, 0x09, 0x08, 0xb4, 0xff, 0x80, 0x10, 0x0e, 0x10, 0x7f, 0x0b, 0x04, 0x04, 0x04, - 0x04, 0x06, 0x0b, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x04, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0xfc, 0x28, 0x01, 0x0d, 0x00, 0x00, 0x0d, 0x02, 0x6b, 0xa4, - 0x30, 0xa7, 0x30, 0xe0, 0x06, 0xa8, 0x1b, 0x4a, 0xbf, 0x2f, 0x17, 0x6d, 0xc8, 0x19, 0x05, 0x9b, 0x2b, 0x00, 0x30, 0x7f, 0x06, 0xf0, 0xff, 0x05, - 0xf5, 0x99, 0x07, 0xf0, 0xff, 0x81, 0x05, 0xff, 0xb7, 0x36, 0x80, 0xc6, 0x59, 0x79, 0x72, 0x06, 0x98, 0x19, 0x31, 0x18, 0xc6, 0x06, 0xd8, 0x17, - 0x0e, 0xf2, 0x7f, 0x1b, 0x04, 0x35, 0x28, 0x11, 0x07, 0x20, 0x00, 0x15, 0x04, 0x3c, 0x06, 0x48, 0x1f, 0x07, 0xf4, 0xff, 0x10, 0x0d, 0xf0, 0x7f, - 0x00, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x08, 0x0c, 0x0c, 0x00, 0x06, 0x08, 0x0a, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0xeb, 0x2c, 0x6b, 0x0a, 0x00, - 0x00, 0x0e, 0x6b, 0x16, 0xc0, 0x30, 0xfc, 0x28, 0x13, 0xca, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x44, 0xd7, 0x2f, 0xa9, 0x3f, 0xad, 0x72, 0x2f, 0xaf, - 0x61, 0x06, 0x08, 0x15, 0xf0, 0x7f, 0x06, 0xf0, 0xff, 0xe0, 0x06, 0x1d, 0xaf, 0x07, 0xd0, 0xff, 0x06, 0x1f, 0xb5, 0xbe, 0x8f, 0xc9, 0x62, 0xb3, - 0x40, 0x7e, 0x06, 0x78, 0x15, 0x00, 0x00, 0xec, 0xb2, 0x7c, 0xb7, 0x0c, 0x74, 0xb9, 0x98, 0xb0, 0x06, 0x78, 0x17, 0x07, 0x52, 0x7f, 0x65, 0x00, - 0x46, 0x63, 0x44, 0x03, 0x6c, 0x00, 0x69, 0x05, 0xe3, 0x85, 0x78, 0x17, 0x14, 0xd7, 0x28, 0x11, 0x38, 0x15, 0x40, 0x28, 0x25, 0x30, 0x05, 0xa8, - 0x17, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x15, 0x0d, 0x02, 0x02, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x08, 0x20, 0x05, 0x00, 0x0d, 0x0d, 0x1a, - 0x2b, 0x20, 0x0b, 0x00, 0x00, 0x04, 0x0f, 0x6b, 0xd6, 0x30, 0xec, 0x28, 0x19, 0xad, 0x30, 0x15, 0xf3, 0x30, 0xb2, 0x06, 0x48, 0x1b, 0x42, 0x44, - 0x15, 0x6b, 0x24, 0x0f, 0x1f, 0x6e, 0x00, 0x67, 0x24, 0x1f, 0x05, 0xfb, 0x2f, 0xf0, 0x7f, 0x07, 0x10, 0xff, 0x05, 0xd8, 0x17, 0xc0, 0x07, 0xf0, - 0xff, 0x05, 0xff, 0xb5, 0x03, 0x5e, 0xb1, 0x83, 0xd1, 0x91, 0x20, 0x84, 0x53, 0x06, 0x78, 0x19, 0x14, 0xbe, 0x08, 0xb8, 0xb9, 0x1d, 0xd0, 0xd0, - 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x11, 0x28, 0x15, 0x05, 0x35, 0x04, 0x3a, 0x04, 0x38, 0x28, 0x25, 0x33, 0x28, 0x2b, 0xc5, - 0x0e, 0x74, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x0e, 0x01, 0x01, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x41, 0x02, 0x20, 0x05, 0x0e, 0x0e, 0xf1, 0x27, 0x15, - 0x28, 0x17, 0x11, 0x10, 0x6b, 0xa8, 0x28, 0x17, 0xd6, 0x30, 0xeb, 0x28, 0x1b, 0x88, 0x06, 0x38, 0x15, 0x00, 0x00, 0xd6, 0x2f, 0xa9, 0x65, 0x00, - 0x62, 0xbf, 0x2f, 0xaf, 0x6f, 0x06, 0x2b, 0x2d, 0xd0, 0x7f, 0x07, 0x10, 0xff, 0x05, 0xdd, 0xab, 0x07, 0xf0, 0xff, 0x06, 0x3f, 0xb3, 0x00, 0x84, - 0x53, 0xd2, 0x52, 0x03, 0x5e, 0x81, 0x9c, 0x80, 0x06, 0x78, 0x17, 0x78, 0xc6, 0x08, 0xb8, 0x0c, 0xbe, 0x5c, 0x71, 0xb8, 0x06, 0x78, 0x17, 0x0e, - 0xf2, 0x7f, 0x78, 0x17, 0x2d, 0x04, 0x40, 0x28, 0x21, 0x5c, 0x31, 0x20, 0x05, 0x43, 0x05, 0x88, 0x13, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x30, 0x7f, - 0x0f, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x0d, 0x0f, 0x0f, 0x0b, 0x0d, 0x00, 0x14, 0x0b, 0x0f, 0x0f, 0x0f, 0x0f, 0x26, 0x2a, 0x00, 0xd3, 0x0a, 0x00, - 0x00, 0x11, 0x6b, 0xd9, 0x30, 0x14, 0xb9, 0x30, 0xc6, 0x28, 0x17, 0xce, 0x28, 0x1b, 0xe9, 0x30, 0x15, 0xf3, 0x30, 0xc9, 0x05, 0xe8, 0x1f, 0x56, - 0x2f, 0x1d, 0x73, 0x2b, 0x1b, 0x54, 0x65, 0x28, 0x1f, 0x6e, 0x2b, 0x29, 0x72, 0x28, 0x27, 0x6c, 0x00, 0x5d, 0x61, 0x2f, 0xbd, 0x64, 0x05, 0x4b, - 0x3b, 0x00, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x73, 0x05, 0x2d, 0xbd, 0xc0, 0x08, 0xb0, 0xff, 0x05, 0x3f, 0xc1, 0x7f, 0x89, 0xfa, 0x8b, 0x14, 0x5c, - 0x20, 0x70, 0x51, 0x06, 0x78, 0x17, 0xa0, 0xbc, 0xa4, 0xc2, 0x4c, 0x00, 0xd1, 0x74, 0xb9, 0x78, 0xb1, 0x7c, 0xb9, 0x80, 0x1d, 0xb7, 0xdc, 0xb4, - 0x05, 0xf8, 0x1f, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x12, 0x28, 0x1f, 0x15, 0x41, 0x04, 0x42, 0x28, 0x25, 0x40, 0x28, 0x27, 0x3e, 0x28, 0x25, 0x05, - 0x40, 0x04, 0x3b, 0x04, 0x30, 0x28, 0x33, 0x34, 0x04, 0xc8, 0x27, 0xc5, 0x08, 0xb4, 0xff, 0x10, 0x0d, 0x30, 0x7f, 0x10, 0x13, 0x13, 0x20, 0x01, - 0x10, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, 0x10, 0x10, 0x89, 0x2c, 0xc0, 0x0c, 0x01, 0x00, 0x00, 0x12, 0x6b, 0xa4, 0x30, 0xa7, 0x28, 0x0d, 0x54, - 0xc1, 0x20, 0x05, 0xd4, 0x28, 0x15, 0xb0, 0x05, 0xe8, 0x15, 0x00, 0x00, 0x14, 0x4a, 0x00, 0xf6, 0x2f, 0x21, 0x6b, 0x20, 0x05, 0x70, 0x00, 0x5f, - 0x69, 0x2f, 0x2b, 0x67, 0x05, 0xeb, 0x35, 0x00, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x38, 0x0d, 0x08, 0xb0, 0xff, 0x81, 0x05, 0xdf, 0xb7, 0xf6, - 0x5e, 0xea, 0x96, 0x73, 0x5e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x0c, 0xc6, 0x70, 0xc1, 0x51, 0xd5, 0xe2, 0x05, 0xf8, 0x0d, 0x0f, 0x92, 0x7f, - 0x78, 0x17, 0x19, 0x04, 0x51, 0x28, 0x1f, 0x47, 0x8b, 0x20, 0x05, 0x3f, 0x04, 0x38, 0x28, 0x29, 0x33, 0x04, 0xc8, 0x0d, 0x08, 0xb4, 0xff, 0x80, - 0x10, 0x0d, 0xd0, 0x7f, 0x11, 0x07, 0x07, 0x07, 0x07, 0x09, 0x11, 0x00, 0x11, 0x07, 0x09, 0x0b, 0x07, 0x11, 0x11, 0x11, 0x00, 0x11, 0x15, 0x29, - 0x13, 0x0a, 0x00, 0x00, 0x13, 0x00, 0x6b, 0xaf, 0x30, 0xed, 0x30, 0xce, 0x30, 0xd9, 0x35, 0x30, 0xea, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x4b, 0x2f, - 0xa7, 0x6f, 0x4f, 0xa9, 0x7f, 0x62, 0x4f, 0xb3, 0x05, 0xf8, 0x17, 0x00, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xd8, 0x17, 0x08, 0x10, 0xff, 0x05, - 0xe2, 0x7f, 0x00, 0x51, 0x81, 0x9c, 0xaa, 0x52, 0x1d, 0x8d, 0xcc, 0x40, 0x91, 0x06, 0x58, 0x1b, 0x6c, 0xd0, 0x5c, 0xb8, 0x78, 0xb1, 0x0e, 0xa0, - 0xbc, 0xac, 0xb9, 0x06, 0x58, 0x1b, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x1a, 0x08, 0x04, 0x40, 0x04, 0x43, 0x28, 0x21, 0x43, 0x04, 0x31, 0xb8, 0x28, - 0x29, 0x40, 0x05, 0x88, 0x17, 0x08, 0x14, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x12, 0x09, 0x09, 0x00, 0x09, 0x09, 0x0b, 0x12, 0x12, 0x09, 0x0b, 0x0d, - 0x00, 0x09, 0x12, 0x12, 0x12, 0x12, 0x73, 0x28, 0x89, 0x80, 0x28, 0x17, 0x14, 0x6b, 0xab, 0x30, 0xeb, 0x30, 0xde, 0xea, 0x30, 0x03, 0x06, 0x48, - 0x15, 0x38, 0x17, 0x61, 0x2f, 0x1d, 0x6d, 0x20, 0x05, 0x72, 0xfc, 0x05, 0xeb, 0x29, 0x00, 0x10, 0x7f, 0x07, 0x10, 0xff, 0x05, 0x9d, 0xa7, 0x08, - 0x30, 0xff, 0x06, 0x3f, 0xb3, 0x61, 0x53, 0x0c, 0x14, 0x5c, 0x6c, 0x9a, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x7c, 0xce, 0x1c, 0xc8, 0xb9, 0x74, 0x06, - 0x68, 0x13, 0x0f, 0x32, 0x7f, 0x98, 0x17, 0x30, 0x04, 0x05, 0x3b, 0x04, 0x4c, 0x04, 0x3c, 0x20, 0x07, 0x40, 0x05, 0x68, 0x13, 0xc0, 0x07, 0xf4, - 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x13, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x00, 0x13, 0x13, 0x08, 0x0a, 0x0c, 0x08, 0x13, 0x13, 0x00, 0x13, 0x13, 0x4b, - 0x28, 0xa3, 0x0b, 0x00, 0x00, 0x01, 0x15, 0x6b, 0xd9, 0x30, 0xb9, 0x30, 0xc8, 0x28, 0x19, 0x15, 0xf3, 0x30, 0xe9, 0x20, 0x03, 0xc9, 0x06, 0x08, - 0x1f, 0x56, 0x2f, 0x19, 0x6d, 0x73, 0x2b, 0x19, 0x38, 0x19, 0x6e, 0x2f, 0x27, 0x30, 0x05, 0x64, 0x05, 0xab, 0x33, 0xf8, 0x00, 0x50, 0x7f, 0x06, - 0xf0, 0xff, 0x05, 0x9d, 0xb3, 0x08, 0x50, 0xff, 0x05, 0x9f, 0xb9, 0x7f, 0x89, 0xfc, 0x10, 0x66, 0x70, 0x51, 0x06, 0x98, 0x17, 0xa0, 0xbc, 0xa4, - 0xc2, 0x00, 0xb8, 0xd2, 0xcc, 0xb9, 0x80, 0xb7, 0xdc, 0xb4, 0xe8, 0x06, 0x38, 0x1d, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x12, 0x28, 0x1f, 0x41, 0x04, - 0x42, 0xb7, 0x48, 0x17, 0x3d, 0x28, 0x21, 0x30, 0x05, 0x34, 0x05, 0x28, 0x1f, 0x08, 0x54, 0xff, 0x10, 0x0d, 0x90, 0x7f, 0x28, 0x14, 0x14, 0x70, - 0x01, 0x06, 0x40, 0x0a, 0x64, 0x2a, 0xc5, 0x8d, 0x28, 0x17, 0x16, 0x6b, 0xcf, 0x06, 0x68, 0x0f, 0x7f, 0xff, 0x48, 0x4f, 0xaf, 0xfc, 0x06, 0x18, - 0x0f, 0x00, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x98, 0x0f, 0x08, 0x50, 0xff, 0x06, 0x1f, 0xb5, 0xc8, 0x54, 0x87, 0x06, 0xb8, 0x15, 0x00, 0x00, - 0x60, 0xd5, 0x06, 0x78, 0x11, 0x0f, 0x52, 0x7f, 0x78, 0x17, 0x5c, 0x25, 0x28, 0x0f, 0x3b, 0x05, 0xa8, 0x0f, 0x08, 0x54, 0xff, 0x10, 0x0e, 0x10, - 0x7f, 0x15, 0x05, 0x00, 0x05, 0x05, 0x05, 0x07, 0x15, 0x15, 0x05, 0x07, 0x00, 0x13, 0x05, 0x15, 0x15, 0x15, 0x15, 0x4a, 0x28, 0x20, 0x25, 0x09, - 0x00, 0x3f, 0xff, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x04, 0x01, 0x01, 0x0f, 0x04, 0x11, 0x0f, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x0d, 0x0d, - 0x0d, 0x0d, 0x00, 0x03, 0x02, 0x02, 0x0d, 0x03, 0x10, 0x0d, 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x30, 0x3c, 0x15, 0x03, 0x20, 0x06, 0x40, 0x07, - 0x20, 0x05, 0x03, 0x03, 0x04, 0x0c, 0x0c, 0x0c, 0x00, 0x0c, 0x0e, 0x04, 0x04, 0x0c, 0x0e, 0x15, 0x0c, 0x00, 0x04, 0x04, 0x04, 0x04, 0x05, 0x0e, - 0x0e, 0x0e, 0x00, 0x0e, 0x0f, 0x05, 0x05, 0x0e, 0x0f, 0x0f, 0x0e, 0x8a, 0x30, 0x72, 0x06, 0x11, 0x11, 0x20, 0x01, 0x06, 0x20, 0x06, 0x03, 0x82, - 0x20, 0x05, 0x06, 0x06, 0x07, 0x10, 0x10, 0x20, 0x01, 0x07, 0xa2, 0x20, 0x06, 0x12, 0x20, 0x05, 0x07, 0x07, 0x08, 0x30, 0x44, 0x05, 0x00, 0x08, - 0x08, 0x03, 0x05, 0x09, 0x03, 0x08, 0x08, 0x05, 0x08, 0x08, 0x09, 0x12, 0x12, 0x20, 0x01, 0x09, 0x20, 0x06, 0x42, 0x04, 0x20, 0x05, 0x09, 0x09, - 0x0a, 0x0a, 0x20, 0x01, 0x0c, 0xa8, 0x30, 0x03, 0x0e, 0x40, 0x0a, 0x0b, 0x30, 0x64, 0x06, 0x0b, 0x0b, 0x00, 0x04, 0x06, 0x01, 0x04, 0x0b, 0x0b, - 0x0b, 0x0b, 0x40, 0x0c, 0x30, 0x54, 0x08, 0x0c, 0x0c, 0x06, 0x08, 0x0a, 0x71, 0x06, 0x30, 0x8a, 0x40, 0xa4, 0x20, 0xb4, 0x02, 0x02, 0x08, 0x40, - 0xba, 0x4b, 0x0e, 0x30, 0xc4, 0x01, 0x0e, 0x20, 0x06, 0x02, 0x20, 0x05, 0x20, 0x9a, 0x80, 0x30, 0x34, 0x0d, 0x0f, 0x0f, 0x0b, 0x0d, 0x14, 0x0b, - 0x8a, 0x30, 0xea, 0x10, 0x13, 0x13, 0x20, 0x01, 0x10, 0x20, 0x06, 0x05, 0x88, 0x20, 0x05, 0x10, 0x10, 0x11, 0x30, 0x94, 0x09, 0x11, 0x11, 0x0d, - 0x07, 0x09, 0x0b, 0x07, 0x30, 0xba, 0x40, 0x84, 0x0b, 0x20, 0x91, 0x28, 0x0b, 0x0d, 0x40, 0x9a, 0x13, 0x30, 0xa4, 0x0a, 0x13, 0x13, 0x0f, 0x08, - 0x0a, 0x0c, 0x08, 0x30, 0x3a, 0xf9, 0x6f, 0xf1, 0x67, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0xdc, 0x00, 0x11, 0x1a, 0x00, 0x00, - 0x30, 0x01, 0x6c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x63, 0x21, 0x46, 0x05, 0x00, 0x00, 0x00, - 0x02, 0x6c, 0xd9, 0x30, 0xeb, 0x30, 0xf3, 0x10, 0x30, 0xde, 0x5d, 0x06, 0x78, 0x1d, 0x42, 0x00, 0x65, 0x00, 0x1a, 0x72, 0x00, 0x6e, 0x06, 0x88, - 0x9c, 0x70, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x61, 0x81, 0x0e, 0x60, 0x7f, 0x2f, 0x4f, 0x14, 0x5c, 0x3c, 0x5c, 0x06, 0x92, 0xff, 0x00, 0xa0, 0xbc, - 0x78, 0xb9, 0x20, 0x00, 0xfc, 0xc8, 0xc0, 0x0e, 0xf3, 0x7f, 0x06, 0x72, 0x7f, 0x11, 0x04, 0x35, 0x04, 0x40, 0x04, 0x30, 0x3d, 0x04, 0x0e, 0xf4, - 0xff, 0x10, 0x0e, 0x70, 0xff, 0x01, 0x06, 0x06, 0x06, 0x10, 0x06, 0x05, 0x01, 0x40, 0x06, 0x01, 0x01, 0x01, 0x01, 0x82, 0x58, 0x17, 0x04, 0x6c, - 0xa2, 0x30, 0xfc, 0x28, 0x19, 0xac, 0x28, 0x30, 0xa6, 0x06, 0x68, 0x1b, 0x41, 0x26, 0x91, 0x72, 0x00, 0x67, 0xa8, 0x26, 0x97, 0x75, 0x06, 0x4f, - 0xb8, 0x41, 0x40, 0x7d, 0x6f, 0x00, 0x76, 0x3c, 0x00, 0x69, 0x06, 0x48, 0x1b, 0x07, 0xb0, 0xff, 0x06, 0x38, 0x1b, 0x06, 0xf0, 0x7f, 0x3f, 0x96, - 0x08, 0x14, 0x5c, 0xd8, 0x9a, 0x06, 0x9b, 0x17, 0x44, 0xc5, 0x74, 0x06, 0xb9, 0x00, 0xac, 0xb0, 0xc6, 0x06, 0x78, 0x1b, 0x07, 0x53, 0x7f, 0xf3, - 0x8a, 0x06, 0x82, 0x7f, 0x10, 0x04, 0x30, 0x28, 0x17, 0x33, 0x20, 0x05, 0x43, 0xe0, 0x06, 0x48, 0x1b, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, - 0x02, 0x01, 0x03, 0x01, 0x03, 0x20, 0x03, 0x02, 0x30, 0x06, 0x01, 0x02, 0x02, 0x02, 0x02, 0x11, 0xb3, 0x21, 0xb8, 0x28, 0x17, 0x05, 0x6c, 0xd0, - 0x28, 0x17, 0x40, 0xbc, 0x28, 0x19, 0x1d, 0xff, 0xb7, 0x30, 0xe5, 0x30, 0x00, 0xbf, 0x30, 0xc3, 0x30, 0xc8, 0x30, 0x96, 0x6e, 0xa8, 0x05, 0x9d, - 0x3f, 0x42, 0x2e, 0xa9, 0x73, 0x2f, 0xb3, 0x6c, 0x00, 0x2d, 0x22, 0x00, 0x43, 0x27, 0x9b, 0x74, 0x00, 0x79, 0x05, 0xef, 0xaf, 0xe2, 0xab, 0x20, - 0x7b, 0x65, 0x20, 0x7d, 0x56, 0x28, 0x19, 0x6c, 0x40, 0x0b, 0x05, 0xdf, 0xaf, 0xa3, 0x90, 0xff, 0x53, 0x20, 0xfd, 0x61, 0x00, 0x64, 0x21, 0x03, - 0x05, 0xf0, 0x7f, 0xa8, 0x30, 0xf9, 0x65, 0x2f, 0xb3, 0x20, 0x61, 0x83, 0x74, 0x00, 0xe0, 0xda, 0x05, 0x6f, 0xbf, 0x31, 0xf3, 0x75, 0x20, 0xf3, - 0x30, 0xf7, 0x20, 0x20, 0xfb, 0x65, 0xe0, 0x20, 0x83, 0xd0, 0x93, 0x04, 0xdf, 0xc9, 0xf4, 0x5d, 0x5e, 0x58, 0x14, 0x46, 0x5c, 0x06, 0x98, 0x17, - 0x14, 0xbc, 0x24, 0x06, 0x48, 0x0f, 0xb3, 0x7f, 0x7a, 0xf4, 0xe2, 0x7f, 0x06, 0x12, 0xff, 0x52, 0x7f, 0x06, 0x3a, 0x99, 0x11, 0x28, 0x17, 0x37, - 0x04, 0x07, 0x35, 0x04, 0x3b, 0x04, 0x4c, 0x06, 0x48, 0x17, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x03, 0x04, 0x05, 0x05, 0x05, 0x06, - 0x03, 0x03, 0x00, 0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x10, 0xce, 0x21, 0x65, 0x28, 0x17, 0x06, 0x6c, 0xd5, 0x30, 0x12, 0xea, 0x30, - 0xd6, 0x28, 0x1b, 0xeb, 0x30, 0x06, 0x5d, 0x33, 0x46, 0x8b, 0x2f, 0xaf, 0x69, 0x00, 0x62, 0x2f, 0xb1, 0x75, 0x4f, 0xb9, 0x0e, 0x30, 0x7f, 0xb4, - 0x35, 0x11, 0x62, 0x06, 0xe0, 0xff, 0x51, 0x7d, 0x6f, 0x0e, 0x00, 0x7f, 0x17, 0x5f, 0x08, 0xcc, 0x91, 0x21, 0x58, 0x06, 0x98, 0x17, 0x04, 0xd5, - 0xac, 0x00, 0xb9, 0x80, 0xbd, 0x74, 0xb9, 0x20, 0x00, 0xfc, 0xe0, 0x06, 0x48, 0x1f, 0x07, 0x73, 0x7f, 0x06, 0x72, 0x7f, 0x24, 0x04, 0x40, 0x04, - 0x38, 0x0e, 0x04, 0x31, 0x04, 0x43, 0x20, 0x07, 0x10, 0x06, 0x74, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x04, 0x2a, 0x07, 0x07, 0x20, 0x01, 0x04, 0x20, - 0x06, 0x15, 0x20, 0x05, 0x04, 0x08, 0x04, 0x48, 0x21, 0x17, 0x28, 0x17, 0x07, 0x6c, 0xb8, 0x0a, 0x30, 0xe5, 0x30, 0xcd, 0x28, 0x17, 0xf4, 0x06, - 0x68, 0x17, 0x47, 0xad, 0x2f, 0xab, 0x6e, 0x2f, 0xaf, 0x76, 0x06, 0x2c, 0x2b, 0x90, 0x7f, 0xe8, 0x20, 0x7f, 0x56, 0x65, 0x06, 0xa0, 0x7f, 0x66, - 0x06, 0x8e, 0x32, 0x47, 0x2f, 0xaf, 0x51, 0x7f, 0x72, 0xd0, 0x06, 0x41, 0x81, 0x70, 0x7f, 0x62, 0x06, 0x60, 0x7f, 0xe5, 0x65, 0x85, 0x51, 0x20, - 0xe6, 0x74, 0x06, 0x98, 0x17, 0x1c, 0xc8, 0x24, 0xb1, 0x14, 0x70, 0xbc, 0x06, 0x78, 0x15, 0x07, 0x72, 0xff, 0x06, 0x91, 0xff, 0x16, 0x04, 0x35, - 0x04, 0x47, 0x3d, 0x20, 0x03, 0x32, 0x04, 0x30, 0x06, 0x48, 0x17, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x15, 0x05, 0x08, 0x08, 0x20, 0x01, - 0x05, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x04, 0x05, 0x05, 0xda, 0x20, 0x63, 0x2b, 0x1f, 0x08, 0x6c, 0x11, 0xb0, 0x30, 0xe9, 0x28, 0x15, 0xeb, 0x30, - 0xb9, 0x06, 0x88, 0x17, 0x56, 0x6c, 0x28, 0x11, 0x72, 0x2f, 0xad, 0x73, 0x06, 0x68, 0x17, 0x50, 0x7f, 0x69, 0xdc, 0x06, 0xe0, 0x7f, 0x06, 0xf0, - 0xff, 0x6f, 0x29, 0x9d, 0x06, 0x58, 0x17, 0x06, 0xd1, 0x7f, 0x3c, 0x68, 0x02, 0xc9, 0x62, 0x81, 0x9c, 0xaf, 0x65, 0x06, 0x88, 0x19, 0xae, 0x03, - 0x7c, 0xb7, 0xe8, 0xb8, 0xa4, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x10, 0x13, 0x04, 0x3b, 0x28, 0x11, 0x40, 0x04, 0x43, 0x04, 0x70, 0x41, - 0x06, 0x68, 0x17, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x06, 0x09, 0x09, 0x09, 0x18, 0x0a, 0x09, 0x06, 0x30, 0x06, 0x20, 0x05, 0x06, 0x06, - 0x72, 0x02, 0x21, 0x73, 0x06, 0x00, 0x00, 0x09, 0x48, 0x17, 0xa6, 0x00, 0x30, 0xd3, 0x30, 0xe5, 0x30, 0xf3, 0x30, 0xc7, 0xd5, 0x20, 0x03, 0x05, - 0xfd, 0x39, 0x47, 0x4e, 0xa7, 0x75, 0x2e, 0x2f, 0xfc, 0x2f, 0xb7, 0x7e, 0x64, 0x4f, 0xbd, 0x05, 0xf0, 0x7f, 0x38, 0x13, 0x37, 0x17, 0x06, 0x38, - 0x99, 0x07, 0x50, 0xff, 0x67, 0xda, 0x2f, 0xb5, 0x38, 0x19, 0x69, 0x06, 0x40, 0xff, 0x71, 0x7f, 0x65, 0x06, 0x2a, 0x1b, 0x3c, 0x01, 0x68, 0xb3, - 0x52, 0xbe, 0x5b, 0x7b, 0x76, 0x06, 0x78, 0x17, 0x00, 0xf8, 0xad, 0x7c, 0xb7, 0xb0, 0xc6, 0xd8, 0xbd, 0x35, 0x74, 0xb3, 0x06, 0x58, 0x19, 0x0e, - 0xf3, 0x7f, 0x13, 0x28, 0x13, 0x30, 0x28, 0x15, 0x00, 0x31, 0x04, 0x4e, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x70, 0x35, 0x20, 0x05, 0x0d, 0xf4, 0xff, - 0x10, 0x0e, 0xb0, 0x7f, 0x07, 0x0a, 0x0a, 0x0a, 0x18, 0x0b, 0x0a, 0x07, 0x30, 0x06, 0x20, 0x05, 0x07, 0x07, 0x52, 0x22, 0x21, 0xc8, 0x28, 0x17, - 0x0a, 0x6c, 0xb8, 0x28, 0x11, 0xe9, 0xdd, 0x06, 0x08, 0x0d, 0x9f, 0xff, 0x4a, 0x2f, 0x29, 0x38, 0x19, 0x10, 0x06, 0x70, 0x7f, 0x47, 0x2f, 0xa9, - 0xc2, 0x06, 0xb1, 0x81, 0x06, 0xf1, 0xff, 0x5d, 0x6c, 0xc9, 0x62, 0x06, 0x92, 0xfd, 0x00, 0x06, 0x00, 0x50, 0xc9, 0x7c, 0xb7, 0x06, 0x58, 0x11, - 0x0f, 0x53, 0x7f, 0x2e, 0xf0, 0x48, 0x17, 0x06, 0x91, 0xff, 0x10, 0x06, 0xf4, 0xff, 0x0e, 0xf6, 0x7f, 0x08, 0x0b, 0x0b, 0x0b, 0x14, 0x09, 0x0b, - 0x08, 0x20, 0x06, 0x1a, 0x20, 0x05, 0x08, 0x08, 0x00, 0xae, 0x21, 0x39, 0x05, 0x00, 0x00, 0x0b, 0x6c, 0x00, 0xeb, 0x30, 0xc4, 0x30, 0xa7, 0x30, - 0xeb, 0x30, 0x55, 0xf3, 0x06, 0x68, 0x1b, 0x4c, 0x2f, 0x2b, 0x7a, 0x2f, 0x25, 0x72, 0x05, 0xef, 0x27, 0xae, 0xb0, 0x7f, 0x63, 0x60, 0x7f, 0x65, - 0x0e, 0xe0, 0xff, 0x06, 0x39, 0x9d, 0x06, 0xf0, 0x7f, 0x62, 0x04, 0x53, 0x5e, 0x58, 0x69, 0x60, 0x06, 0x9b, 0x17, 0xe8, 0xb8, 0x0c, 0xb4, 0xcc, - 0x78, 0xb9, 0x06, 0x98, 0x19, 0x0e, 0xf2, 0x7f, 0x1b, 0x04, 0x05, 0x4e, 0x04, 0x46, 0x04, 0x35, 0x28, 0x1d, 0x3d, 0x06, 0x48, 0x1d, 0xc5, 0x07, - 0x34, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x09, 0x0c, 0x0c, 0x20, 0x01, 0x09, 0x20, 0x06, 0x41, 0x0d, 0x20, 0x05, 0x09, 0x09, 0x75, 0x21, 0xe8, 0x28, - 0x17, 0x00, 0x0c, 0x6c, 0xcc, 0x30, 0xb7, 0x30, 0xe3, 0x30, 0x6c, 0xc6, 0x28, 0x19, 0x06, 0x5d, 0x35, 0x4e, 0x28, 0x13, 0x37, 0x99, 0x68, 0x00, - 0x15, 0xe2, 0x00, 0x74, 0x28, 0x1f, 0x6c, 0x0e, 0x40, 0x7f, 0x65, 0x29, 0x15, 0x50, 0x62, 0x4f, 0xb7, 0x67, 0x10, 0x05, 0xe1, 0x7f, 0xb3, 0x7e, - 0x99, 0x6c, 0x08, 0xf0, 0x6c, 0x14, 0x5c, 0x06, 0x78, 0x19, 0xcc, 0xb1, 0xe4, 0x18, 0xc0, 0x54, 0xd1, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, - 0x04, 0x51, 0x00, 0x04, 0x32, 0x04, 0x48, 0x04, 0x30, 0x04, 0x42, 0x8e, 0x28, 0x1d, 0x3b, 0x04, 0x4c, 0x05, 0xe8, 0x1d, 0x0f, 0x54, 0xff, 0x10, - 0x06, 0x90, 0xff, 0x0a, 0x2a, 0x0d, 0x0d, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x0a, 0x08, 0x0a, 0x63, 0x21, 0xee, 0x2b, 0x1f, 0x0d, - 0x6c, 0xaa, 0x08, 0x30, 0xd7, 0x30, 0xd0, 0x28, 0x15, 0xc7, 0x30, 0xf3, 0x15, 0x30, 0x96, 0x6e, 0x06, 0x1d, 0x37, 0x4f, 0x27, 0x0f, 0x77, 0x2e, - 0xa9, 0x1e, 0x6c, 0x00, 0x64, 0x47, 0x1d, 0x06, 0xb0, 0x7f, 0x06, 0x3f, 0xb0, 0x07, 0x30, 0xff, 0x76, 0xa0, 0x61, 0x7f, 0x6f, 0x0e, 0x20, 0xff, - 0x0a, 0x4e, 0xe6, 0x74, 0x14, 0x04, 0x5c, 0x7b, 0x76, 0x4a, 0x53, 0x06, 0x5b, 0x17, 0x35, 0xc6, 0x0c, 0x1c, 0xbc, 0x74, 0xb3, 0x06, 0x98, 0x17, - 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x55, 0x31, 0x28, 0x17, 0x30, 0x48, 0x11, 0x34, 0x28, 0x19, 0x3d, 0x05, 0xe8, 0x17, 0xc5, 0x07, 0xb4, 0xff, 0x10, - 0x0e, 0x30, 0x7f, 0x0b, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x40, 0x10, 0x20, 0x05, 0x0b, 0x0b, 0x57, 0x21, 0xdb, 0x05, 0x04, 0x00, 0x00, - 0x0e, 0x6c, 0xb6, 0x28, 0x0f, 0xaf, 0x30, 0x01, 0xc8, 0x30, 0xfb, 0x30, 0xac, 0x30, 0xec, 0x28, 0x1b, 0xa0, 0x05, 0xfd, 0x37, 0x53, 0x2f, 0xa5, - 0x2e, 0x00, 0x20, 0x00, 0x47, 0xaa, 0x48, 0x1b, 0x6c, 0x06, 0x08, 0x1b, 0x53, 0x28, 0x93, 0x69, 0x2f, 0xad, 0x74, 0x31, 0x00, 0x2d, 0x80, 0x83, - 0x05, 0xf0, 0x7f, 0x6e, 0x00, 0x6b, 0x2f, 0xab, 0xf8, 0x06, 0x51, 0x03, 0x50, 0x7f, 0x91, 0x7f, 0x05, 0xf8, 0x1b, 0x06, 0xf0, 0xff, 0x23, 0x57, - 0xa0, 0x18, 0x52, 0xd1, 0x4e, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xa5, 0xc7, 0x6c, 0x01, 0xd0, 0xb8, 0xd2, 0x08, 0xac, 0x0c, 0xb8, 0x06, 0x58, 0x1b, - 0xd0, 0x07, 0x32, 0x7f, 0x06, 0xb3, 0x7f, 0x21, 0x28, 0x13, 0x3d, 0x04, 0x3a, 0x04, 0x05, 0x42, 0x04, 0x2d, 0x00, 0x13, 0x48, 0x1f, 0x3b, 0x05, - 0xc8, 0x1d, 0xc0, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x0c, 0x13, 0x10, 0x10, 0x10, 0x10, 0x00, 0x0c, 0x0c, 0x10, 0x10, 0x11, 0x13, 0x0c, - 0x0c, 0x00, 0x0c, 0x0c, 0xb9, 0x21, 0xaa, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x6c, 0xb7, 0x30, 0xe3, 0x30, 0xd5, 0x30, 0x06, 0xcf, 0x30, 0xa6, 0x30, - 0xbc, 0x06, 0x28, 0x15, 0x38, 0x17, 0x63, 0x2c, 0x00, 0x68, 0x2f, 0xaf, 0x66, 0x20, 0x01, 0x30, 0x07, 0x75, 0x00, 0x6d, 0x73, 0x05, 0xe7, 0x17, - 0xb0, 0x7f, 0x6f, 0x60, 0x7f, 0x0d, 0xd0, 0xff, 0x69, 0x61, 0x7f, 0xa0, 0x31, 0x7b, 0x61, 0x0d, 0xe1, 0xff, 0x99, 0x6c, 0x2b, 0x59, 0x6a, 0x10, - 0x8c, 0xee, 0x68, 0x06, 0x78, 0x19, 0xe4, 0xc0, 0x04, 0xd5, 0x03, 0x58, 0xd5, 0xb0, 0xc6, 0x20, 0xc8, 0x06, 0x78, 0x17, 0x07, 0xb3, 0x7f, 0xaa, - 0x06, 0x13, 0xff, 0x28, 0x28, 0x17, 0x44, 0x20, 0x01, 0x45, 0x28, 0x1f, 0x43, 0x38, 0x04, 0x37, 0x05, 0xc8, 0x13, 0x0f, 0x31, 0x7f, 0x10, 0x06, - 0xf0, 0xff, 0x0d, 0x10, 0x11, 0x00, 0x11, 0x11, 0x11, 0x0d, 0x0d, 0x11, 0x11, 0x18, 0x00, 0x10, 0x0d, 0x0d, 0x0d, 0x0d, 0xeb, 0x21, 0x23, 0xa0, - 0x28, 0x17, 0x10, 0x28, 0x17, 0xe5, 0x30, 0xd3, 0x30, 0xfc, 0x30, 0x30, 0xc4, 0x06, 0x28, 0x13, 0x98, 0x17, 0x77, 0x00, 0x79, 0x00, 0x6d, 0x7a, - 0x06, 0x4d, 0xb2, 0x90, 0x7f, 0x74, 0x06, 0x40, 0x81, 0x07, 0x10, 0xff, 0x76, 0x2d, 0xaf, 0x58, 0x74, 0x2f, 0xaf, 0x6f, 0x06, 0xe1, 0x7f, 0x06, - 0x51, 0xff, 0xbd, 0x65, 0xf4, 0x10, 0x7e, 0x28, 0x83, 0x06, 0x78, 0x15, 0x00, 0x00, 0x88, 0xc2, 0x0e, 0x44, 0xbe, 0x20, 0xce, 0x06, 0x58, 0x13, - 0x07, 0xd3, 0x7f, 0x06, 0x53, 0xff, 0x28, 0x03, 0x04, 0x32, 0x04, 0x38, 0x04, 0x46, 0x05, 0xc8, 0x0b, 0x0f, 0xb1, 0x7f, 0x80, 0x10, 0x06, 0xf0, - 0xff, 0x0e, 0x11, 0x12, 0x12, 0x13, 0x12, 0x0e, 0x00, 0x0e, 0x12, 0x12, 0x19, 0x11, 0x0e, 0x0e, 0x0e, 0x08, 0x0e, 0x75, 0x21, 0x20, 0x28, 0x17, - 0x11, 0x6c, 0xbe, 0x80, 0x28, 0x13, 0xed, 0x30, 0xc8, 0x30, 0xa5, 0x30, 0xeb, 0x2a, 0x30, 0xf3, 0x06, 0x28, 0x1b, 0x53, 0x2f, 0xa3, 0x6c, 0x2f, - 0xa7, 0x74, 0x8d, 0x2f, 0xb5, 0x75, 0x00, 0x72, 0x05, 0xaf, 0x29, 0xb0, 0x7f, 0x65, 0x40, 0x7b, 0x77, 0x65, 0x06, 0x49, 0x17, 0x07, 0x50, 0xff, - 0x38, 0x19, 0x61, 0x06, 0x80, 0xff, 0x51, 0x7f, 0x06, 0x30, 0x7f, 0x00, 0x22, 0x7d, 0x1b, 0x6d, 0xfe, 0x56, 0x69, 0x60, 0x80, 0x06, 0x78, 0x19, - 0x78, 0xc8, 0x5c, 0xb8, 0x2c, 0xd2, 0x78, 0x70, 0xb9, 0x06, 0x78, 0x19, 0x07, 0xb3, 0x7f, 0x06, 0x32, 0x7f, 0x17, 0x04, 0x3e, 0x04, 0x40, 0x3b, - 0x20, 0x03, 0x42, 0x04, 0x43, 0x04, 0x40, 0x04, 0x70, 0x3d, 0x06, 0x08, 0x1f, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0f, 0x12, 0x13, 0x13, - 0x00, 0x12, 0x13, 0x0f, 0x0f, 0x13, 0x13, 0x0c, 0x12, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x92, 0x21, 0x5c, 0x05, 0x0a, 0x00, 0x00, 0x12, 0x6c, 0x38, - 0x11, 0xfc, 0x28, 0x13, 0xac, 0x22, 0x30, 0xa6, 0x06, 0x28, 0x15, 0x00, 0x00, 0x54, 0x68, 0x0f, 0x67, 0xb7, 0x26, 0x95, 0x75, 0x06, 0x2f, 0xaf, - 0x90, 0x7f, 0x6f, 0x4f, 0x39, 0x05, 0xf8, 0x1b, 0x07, 0x10, 0xff, 0xe0, 0xb0, 0xfd, 0x06, 0x18, 0x19, 0x06, 0xf0, 0x7f, 0xfe, 0x56, 0x14, 0x5c, - 0xd8, 0x40, 0x9a, 0x06, 0x78, 0x15, 0x00, 0x00, 0x2c, 0xd2, 0x74, 0xb9, 0x0d, 0x00, 0xac, 0xb0, 0xc6, 0x06, 0x78, 0x17, 0x07, 0x72, 0x7f, 0xf3, - 0x06, 0x62, 0x7f, 0x47, 0x22, 0x48, 0x0f, 0x33, 0x04, 0x30, 0x28, 0x17, 0x0e, 0x51, 0x7f, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x10, 0x14, 0x15, 0x15, - 0x15, 0x15, 0x10, 0x20, 0x06, 0x00, 0x13, 0x14, 0x10, 0x10, 0x10, 0x10, 0xd1, 0x21, 0x00, 0x52, 0x06, 0x00, 0x00, 0x13, 0x6c, 0xc6, 0x30, 0x16, - 0xa3, 0x30, 0xc1, 0x28, 0x19, 0xce, 0x06, 0x48, 0x15, 0x38, 0x17, 0x69, 0x2c, 0x00, 0x63, 0x27, 0x8f, 0x6e, 0x2f, 0xb7, 0x06, 0x55, 0x17, 0x65, - 0x00, 0x7c, 0x73, 0x20, 0x01, 0x30, 0x81, 0x0e, 0x50, 0x7f, 0x07, 0x31, 0x7f, 0x06, 0x91, 0xff, 0xd0, 0x63, 0x08, 0x51, 0x59, 0xfa, 0x8b, 0x06, - 0x98, 0x17, 0xf0, 0xd2, 0x58, 0x1c, 0xce, 0x78, 0xb1, 0x06, 0x78, 0x15, 0x07, 0xd3, 0x7f, 0x06, 0x34, 0x01, 0x22, 0x04, 0x11, 0x38, 0x04, 0x47, - 0x20, 0x03, 0x3d, 0x04, 0x3e, 0x06, 0x68, 0x17, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x11, 0x15, 0x14, 0x14, 0x14, 0x14, 0x40, 0x11, - 0x20, 0x06, 0x12, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0xd9, 0x20, 0x6a, 0x28, 0x17, 0x14, 0x6c, 0xa6, 0x28, 0x13, 0x6b, 0xea, 0x06, 0x68, 0x13, - 0x3f, 0xff, 0x55, 0x2f, 0xab, 0x69, 0x06, 0x7d, 0xac, 0x10, 0x0f, 0x20, 0x7f, 0x08, 0x4c, 0x4e, 0xcc, 0x91, 0x06, 0x98, 0x15, 0x00, 0x00, 0xb0, - 0x18, 0xc6, 0xac, 0xb9, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x23, 0x04, 0x40, 0xe2, 0x28, 0x19, 0x10, 0x16, 0x94, 0x7f, 0x06, 0xf6, 0xff, 0x12, - 0x16, 0x16, 0x20, 0x01, 0x12, 0xa0, 0x20, 0x06, 0x14, 0x20, 0x05, 0x12, 0x12, 0x53, 0x21, 0x24, 0x83, 0x28, 0x17, 0x15, 0x6c, 0xd0, 0x30, 0xec, - 0x28, 0x19, 0x06, 0x9d, 0x2f, 0x05, 0x56, 0x00, 0x61, 0x00, 0x6c, 0x20, 0x03, 0x69, 0x2f, 0xb5, 0xaa, 0x0e, 0x30, 0x7f, 0x57, 0x40, 0xff, 0x6c, - 0x06, 0xe0, 0xff, 0x6c, 0x4f, 0xb5, 0x65, 0x84, 0x0e, 0x21, 0xff, 0xe6, 0x74, 0xb1, 0x83, 0x06, 0xb8, 0x17, 0x1c, 0xbc, 0x38, 0x08, 0xb8, 0x06, - 0xb8, 0x17, 0x07, 0x52, 0x7f, 0x06, 0x93, 0xff, 0x12, 0x04, 0x30, 0x0e, 0x04, 0x3b, 0x04, 0x35, 0x06, 0x88, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, - 0xf0, 0xff, 0x13, 0x00, 0x17, 0x17, 0x18, 0x17, 0x17, 0x13, 0x13, 0x18, 0x20, 0x17, 0x07, 0x20, 0x05, 0x13, 0x13, 0xe1, 0x20, 0x3b, 0x03, 0x05, - 0x00, 0x00, 0x16, 0x6c, 0xdc, 0x06, 0xc8, 0x15, 0x58, 0x17, 0x1a, 0x75, 0x00, 0x64, 0x0e, 0x80, 0x7f, 0x38, 0x17, 0x61, 0x20, 0xff, 0x74, 0x90, - 0x10, 0x06, 0x61, 0x7f, 0x83, 0x6c, 0x06, 0xb8, 0x15, 0x00, 0x00, 0xf4, 0xbc, 0xc7, 0x06, 0xb8, 0x15, 0x0f, 0x13, 0x7f, 0x12, 0x04, 0x3e, 0x06, - 0x88, 0x13, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x00, 0x14, 0x18, 0x18, 0x17, 0x18, 0x18, 0x14, 0x14, 0x10, 0x17, 0x18, 0x08, 0x20, 0x05, - 0x14, 0x14, 0x15, 0x21, 0x45, 0xb6, 0x2b, 0x23, 0x17, 0x6c, 0xc4, 0x28, 0x17, 0xaf, 0x06, 0xa8, 0x19, 0x51, 0x5a, 0x28, 0x15, 0x67, 0x06, 0xa5, - 0x98, 0x5a, 0x00, 0x6f, 0x06, 0xc0, 0x81, 0xd1, 0x07, 0x10, 0xff, 0x31, 0x7f, 0x6f, 0x0e, 0x90, 0xff, 0x69, 0x3c, 0x68, 0x06, 0xbb, 0x17, 0x0e, - 0x94, 0xcd, 0x6c, 0xd0, 0x06, 0xb8, 0x19, 0x07, 0x52, 0x7f, 0x06, 0x9c, 0x97, 0x26, 0x0e, 0x04, 0x43, 0x04, 0x33, 0x06, 0xa8, 0x19, 0x0e, 0xf1, - 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x15, 0x2a, 0x19, 0x19, 0x20, 0x01, 0x15, 0x20, 0x06, 0x16, 0x20, 0x05, 0x15, 0x00, 0x15, 0x8c, 0x21, 0x0c, 0x06, - 0x00, 0x00, 0x18, 0x08, 0x6c, 0xc1, 0x30, 0xe5, 0x28, 0x19, 0xea, 0x30, 0xd2, 0xc0, 0x06, 0x68, 0x1b, 0x38, 0x17, 0x72, 0x00, 0x69, 0x00, 0x63, - 0x00, 0x6c, 0x68, 0x06, 0x88, 0x97, 0x06, 0xd0, 0x7f, 0xfc, 0x07, 0x40, 0xff, 0x06, 0x78, 0x1b, 0x5a, 0x00, 0x40, 0xfa, 0x06, 0xc1, 0xff, 0xcf, - 0x82, 0xce, 0x9e, 0x16, 0x4e, 0x81, 0x06, 0x9b, 0x17, 0xe8, 0xcd, 0xac, 0xb9, 0x88, 0xd7, 0x06, 0x98, 0x19, 0xa8, 0x07, 0x72, 0x7f, 0x71, 0x2f, - 0x35, 0x65, 0x06, 0x48, 0x17, 0x4e, 0x04, 0x40, 0x0e, 0x04, 0x38, 0x04, 0x45, 0x06, 0x68, 0x1b, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x16, - 0x2a, 0x1a, 0x1a, 0x20, 0x01, 0x16, 0x20, 0x06, 0x17, 0x20, 0x05, 0x16, 0x08, 0x16, 0xb3, 0x21, 0x12, 0x28, 0x17, 0x19, 0x6c, 0xa2, 0x00, 0x30, - 0xc3, 0x30, 0xda, 0x30, 0xf3, 0x30, 0xc4, 0x00, 0x30, 0xa7, 0x30, 0xeb, 0x30, 0xfb, 0x30, 0xa2, 0x0a, 0x30, 0xa6, 0x30, 0xb5, 0x28, 0x29, 0xed, - 0x28, 0x2d, 0xc7, 0x91, 0x20, 0x17, 0x96, 0x6e, 0x04, 0xdd, 0x4d, 0x41, 0x00, 0x70, 0x20, 0x01, 0x05, 0x65, 0x00, 0x6e, 0x00, 0x7a, 0x24, 0x17, - 0x6c, 0x20, 0x01, 0x15, 0x20, 0x00, 0x4f, 0x2f, 0xc1, 0x74, 0x24, 0x25, 0x72, 0x20, 0x0b, 0x45, 0x52, 0x28, 0x2f, 0x6f, 0x00, 0x64, 0x24, 0x33, - 0x73, 0x05, 0x80, 0x7f, 0x82, 0xb0, 0x73, 0x2d, 0x00, 0x45, 0x00, 0x78, 0x20, 0x8d, 0xe9, 0xba, 0x48, 0xbd, 0x65, 0x48, 0xc5, 0x03, 0xb0, 0x8b, - 0x00, 0x30, 0xff, 0x41, 0x2f, 0xc3, 0x73, 0xd5, 0x20, 0xef, 0x31, 0x01, 0x72, 0x80, 0xff, 0x6e, 0x05, 0x61, 0x7f, 0x6f, 0x21, 0x81, 0x6e, 0x45, - 0x21, 0x6d, 0x51, 0x81, 0x6e, 0x04, 0xe8, 0x2f, 0x00, 0x51, 0x7f, 0x31, 0xf1, 0x61, 0xf7, 0x21, 0xf1, 0x30, 0x89, 0x31, 0x7d, 0x32, 0x0b, 0x69, - 0x28, 0xb9, 0x03, 0xd1, 0x7b, 0x43, 0x17, 0x00, 0x59, 0x3f, 0x96, 0x6d, 0x5f, 0x56, 0x7b, 0x14, 0x10, 0x5c, 0x4a, 0x53, 0x06, 0x3b, 0x19, 0x44, - 0xc5, 0x9c, 0xd3, 0x00, 0xbc, 0xcc, 0x44, 0xc5, 0xb0, 0xc6, 0x1c, 0xc1, 0x0e, 0x5c, 0xb8, 0x74, 0xb3, 0x05, 0xf8, 0x21, 0x08, 0x12, 0x7f, 0x05, - 0xd1, 0xff, 0x10, 0x20, 0x04, 0x3f, 0x20, 0x01, 0x35, 0x04, 0x3d, 0x04, 0x46, 0xa2, 0x20, 0x05, 0x3b, 0x20, 0x01, 0x4c, 0x04, 0x2d, 0x20, 0x15, - 0x43, 0x28, 0x04, 0x41, 0x20, 0x01, 0x35, 0x28, 0x33, 0x40, 0x04, 0x3e, 0x38, 0x04, 0x34, 0x40, 0x21, 0x0d, 0x74, 0xff, 0x10, 0x0d, 0xb0, 0x7f, - 0x17, 0x03, 0x01, 0x00, 0x02, 0x01, 0x01, 0x17, 0x17, 0x02, 0x01, 0x02, 0x00, 0x03, 0x17, 0x17, 0x17, 0x17, 0xb1, 0x21, 0x96, 0xaa, 0x28, 0x17, - 0x1a, 0x00, 0x08, 0x17, 0xa4, 0x28, 0x23, 0xca, 0x06, 0xe8, 0x17, 0x49, 0xbf, 0x28, 0x25, 0x6e, 0x07, 0x88, 0x17, 0x30, 0x8d, 0x05, 0xd8, 0x17, - 0x90, 0xff, 0x04, 0xf8, 0x15, 0x00, 0x78, 0x17, 0xf2, 0x50, 0xf3, 0x07, 0x38, 0x17, 0x90, 0x89, 0x04, 0x58, 0x17, 0x85, 0x51, 0x07, 0x38, 0x17, - 0x74, 0x1e, 0xc7, 0x08, 0xb1, 0x06, 0x38, 0x15, 0x08, 0x32, 0x7f, 0x05, 0xd1, 0xff, 0x00, 0x58, 0x17, 0x18, 0xb8, 0x28, 0x27, 0x3d, 0x05, 0x28, - 0x15, 0x08, 0x54, 0xff, 0x10, 0x0d, 0xb0, 0x7f, 0x18, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x18, 0x18, 0x03, 0x20, 0x06, 0x18, 0x02, 0x18, 0x18, - 0x18, 0xa8, 0x21, 0xb2, 0x28, 0x17, 0x1b, 0x28, 0x6c, 0xd0, 0x28, 0x03, 0xbc, 0x28, 0x11, 0x1d, 0xff, 0xe9, 0xb6, 0x28, 0x1d, 0xc8, 0x05, 0x08, - 0x07, 0xff, 0xf4, 0x42, 0x4e, 0x17, 0x3f, 0xa9, 0x2d, 0x28, 0x00, 0x4c, 0x2e, 0x23, 0x6e, 0x2f, 0xa7, 0x73, 0x00, 0x63, 0x8d, 0x2f, 0xb1, 0x61, - 0x00, 0x66, 0x2f, 0xa7, 0x05, 0x10, 0x7f, 0xe2, 0x2f, 0xa5, 0x54, 0x65, 0x27, 0xff, 0x43, 0x2e, 0xa1, 0x6d, 0x2f, 0xbd, 0x61, 0x00, 0x75, 0x67, - 0x48, 0x95, 0x0d, 0x70, 0xff, 0x3f, 0x97, 0x69, 0x41, 0x03, 0x61, 0x2f, 0xab, 0xb1, 0xd1, 0x05, 0x61, 0x05, 0xe0, 0x7f, 0x91, 0x85, 0x69, 0x00, - 0xf1, 0x05, 0x20, 0x7d, 0x00, 0x00, 0x00, 0xf4, 0x5d, 0x5e, 0x58, 0x14, 0x5c, 0x08, 0x61, 0x4e, 0x51, 0x67, 0x06, 0x58, 0x17, 0x14, 0xbc, 0x24, - 0x06, 0xc8, 0x80, 0xb7, 0xb8, 0xd2, 0x06, 0x18, 0x11, 0x08, 0x12, 0x7f, 0x69, 0xad, 0x42, 0x81, 0x28, 0x23, 0xfd, 0x69, 0x4a, 0x17, 0x3f, 0x25, - 0x29, 0x04, 0xe9, 0xaa, 0x06, 0x11, 0x04, 0x30, 0x04, 0x37, 0x48, 0x11, 0x38, 0x0f, 0x1b, 0xb8, 0x20, 0x0d, 0x3d, 0x28, 0x07, 0x0d, 0xf1, 0x7f, - 0x10, 0x0e, 0x90, 0x7f, 0x19, 0x05, 0x04, 0x00, 0x04, 0x04, 0x04, 0x19, 0x19, 0x04, 0x05, 0x05, 0x00, 0x05, 0x19, 0x19, 0x19, 0x19, 0xc1, 0x21, - 0x7f, 0x02, 0x05, 0x00, 0x00, 0x1c, 0x6c, 0xcb, 0x28, 0x0b, 0xd0, 0xba, 0x28, 0x17, 0xc7, 0x28, 0x15, 0x05, 0xf8, 0x13, 0x3f, 0xff, 0x4e, 0x44, - 0x03, 0x77, 0xbd, 0x2e, 0x1d, 0x6c, 0x04, 0xcf, 0x17, 0x01, 0x50, 0x7f, 0x06, 0x1e, 0x2f, 0x07, 0x50, 0xff, 0x76, 0x61, 0x7f, 0x40, 0x6f, 0x0e, - 0x00, 0xff, 0x0b, 0x4e, 0xe6, 0x74, 0x14, 0x5c, 0x20, 0x7b, 0x76, 0x06, 0x58, 0x15, 0x00, 0x00, 0xc8, 0xb2, 0xb8, 0x06, 0xd2, 0x1c, 0xbc, 0x74, - 0xb3, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x2d, 0x04, 0x38, 0x28, 0x07, 0x32, 0x28, 0x1d, 0x38, 0x19, 0x34, 0x28, 0x21, 0x71, 0x3d, 0x05, - 0xa8, 0x15, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x1a, 0x0e, 0x0e, 0x20, 0x01, 0x50, 0x1a, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x1a, 0x1a, 0x62, - 0x21, 0x60, 0xf0, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x06, 0x06, 0x06, 0x06, 0x20, 0x05, 0x01, 0x40, 0x06, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, - 0x01, 0x03, 0x01, 0x03, 0x03, 0x02, 0x30, 0x06, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x38, 0x58, 0x06, 0x03, 0x40, 0x03, 0x38, 0x66, 0x03, - 0x03, 0x03, 0x03, 0x04, 0x07, 0x54, 0x07, 0x20, 0x01, 0x04, 0x20, 0x06, 0x15, 0x20, 0x05, 0x04, 0x04, 0x15, 0x05, 0x08, 0x08, 0x20, 0x01, 0x05, - 0x20, 0x06, 0x0b, 0x20, 0x05, 0x81, 0x20, 0x2a, 0x09, 0x09, 0x09, 0x0a, 0x09, 0x06, 0x30, 0x06, 0x80, 0x20, 0x05, 0x06, 0x06, 0x07, 0x0a, 0x0a, - 0x0a, 0x0b, 0x30, 0x0a, 0x07, 0x30, 0x06, 0x20, 0x05, 0x07, 0x07, 0x08, 0x0b, 0x09, 0x0b, 0x0b, 0x09, 0x0b, 0x20, 0x2d, 0x0b, 0x1a, 0x20, 0x05, - 0x05, 0x08, 0x08, 0x09, 0x0c, 0x0c, 0x20, 0x01, 0x09, 0x20, 0x06, 0x65, 0x0d, 0x20, 0x05, 0x20, 0x3b, 0x0d, 0x0d, 0x20, 0x01, 0x0a, 0x20, 0x06, - 0x65, 0x0e, 0x20, 0x05, 0x20, 0x3b, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x40, 0x10, 0x20, 0x05, 0x0b, 0x0b, 0x0c, 0x13, 0x10, 0x10, 0x00, - 0x10, 0x10, 0x0c, 0x0c, 0x10, 0x10, 0x11, 0x13, 0x80, 0x30, 0x3a, 0x0d, 0x10, 0x11, 0x11, 0x11, 0x11, 0x0d, 0x04, 0x0d, 0x11, 0x11, 0x18, 0x10, - 0x30, 0x3a, 0x0e, 0x11, 0x00, 0x12, 0x12, 0x13, 0x12, 0x0e, 0x0e, 0x12, 0x12, 0x20, 0x19, 0x11, 0x31, 0x02, 0x0f, 0x12, 0x13, 0x13, 0x12, 0x01, - 0x13, 0x0f, 0x0f, 0x13, 0x13, 0x0c, 0x12, 0x30, 0x4a, 0x01, 0x10, 0x14, 0x15, 0x15, 0x15, 0x15, 0x10, 0x20, 0x06, 0x20, 0x13, 0x14, 0x30, 0x49, - 0x11, 0x15, 0x14, 0x14, 0x14, 0x24, 0x14, 0x11, 0x20, 0x06, 0x12, 0x15, 0x30, 0x49, 0x12, 0x16, 0x56, 0x16, 0x20, 0x01, 0x12, 0x20, 0x06, 0x14, - 0x20, 0x05, 0x20, 0x4b, 0x17, 0x00, 0x17, 0x18, 0x17, 0x17, 0x13, 0x13, 0x18, 0x17, 0x40, 0x07, 0x20, 0x05, 0x13, 0x13, 0x14, 0x18, 0x18, 0x17, - 0x01, 0x18, 0x18, 0x14, 0x14, 0x17, 0x18, 0x08, 0x20, 0x05, 0x12, 0x14, 0x14, 0x15, 0x39, 0x74, 0x19, 0x15, 0x20, 0x06, 0x16, 0x89, 0x20, 0x05, - 0x15, 0x15, 0x16, 0x31, 0x6c, 0x1a, 0x16, 0x20, 0x06, 0x42, 0x17, 0x20, 0x05, 0x16, 0x16, 0x17, 0x03, 0x21, 0x52, 0x01, 0x00, 0x17, 0x17, 0x02, - 0x01, 0x02, 0x03, 0x17, 0x17, 0xc1, 0x20, 0x4c, 0x21, 0x52, 0x02, 0x02, 0x18, 0x18, 0x03, 0x20, 0x06, 0x0e, 0x18, 0x18, 0x18, 0x18, 0xf9, 0xbf, - 0xf1, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xe4, 0x9c, 0x02, 0x11, 0x51, 0x00, 0x00, - 0x30, 0x01, 0x6d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x64, 0x1c, 0x5c, 0x17, 0x00, 0x00, 0x00, - 0x02, 0x6d, 0xa2, 0x30, 0xf3, 0x30, 0xab, 0x04, 0x30, 0xe9, 0x30, 0x0c, 0x77, 0x06, 0x58, 0x1f, 0x41, 0x00, 0x01, 0x6e, 0x00, 0x6b, 0x00, 0x61, - 0x00, 0x72, 0x20, 0x03, 0x80, 0x10, 0x16, 0x30, 0x7f, 0x89, 0x5b, 0x61, 0x53, 0xc9, 0x62, 0x01, 0x80, 0x06, 0x62, 0xfd, 0x00, 0x00, 0x59, 0xc5, - 0x74, 0xce, 0x7c, 0x05, 0xb7, 0x20, 0x00, 0xfc, 0xc8, 0x0e, 0x93, 0x7f, 0x63, 0x06, 0xa3, 0xff, 0x00, 0x10, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x30, - 0x04, 0x60, 0x40, 0x20, 0x03, 0x10, 0x1e, 0x34, 0xff, 0x01, 0x07, 0x07, 0x07, 0x08, 0x32, 0x07, 0x01, 0x30, 0x06, 0x20, 0x05, 0x01, 0x01, 0x58, - 0x17, 0x03, 0x02, 0x6d, 0xa4, 0x30, 0xb9, 0x30, 0xbf, 0x28, 0x1b, 0xd6, 0x20, 0x30, 0xeb, 0x06, 0x48, 0x1b, 0x30, 0x01, 0x73, 0x00, 0x74, 0x80, - 0x28, 0x17, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6c, 0x95, 0x10, 0x06, 0x00, 0x7f, 0x49, 0x00, 0x06, 0xd1, 0x7f, 0x45, 0x60, 0x7f, 0x6d, 0x06, - 0x61, 0xff, 0x00, 0x0a, 0x4f, 0xaf, 0x65, 0x66, 0x57, 0x03, 0x5e, 0x20, 0x14, 0x5c, 0x06, 0x58, 0x1b, 0x74, 0xc7, 0xa4, 0xc2, 0xc4, 0x18, 0xd0, - 0x88, 0xbd, 0x06, 0x78, 0x19, 0xb1, 0xff, 0x6f, 0x00, 0x65, 0xe2, 0x06, 0x03, 0x81, 0x72, 0x7f, 0x06, 0x71, 0xff, 0x21, 0x04, 0x42, 0x28, 0x15, - 0x3c, 0x03, 0x04, 0x31, 0x04, 0x43, 0x04, 0x3b, 0x06, 0x28, 0x19, 0x10, 0x06, 0xf4, 0xff, 0x80, 0x0e, 0xf6, 0x7f, 0x02, 0x28, 0x28, 0x28, 0x28, - 0x21, 0x02, 0x80, 0x20, 0x06, 0x3d, 0x28, 0x02, 0x02, 0x02, 0x02, 0x2a, 0x02, 0x1d, 0x9a, 0x14, 0x00, 0x00, 0x04, 0x28, 0x17, 0xba, 0x35, 0x30, - 0xdf, 0x06, 0x68, 0x13, 0x58, 0x17, 0x7a, 0x26, 0x13, 0x69, 0x2f, 0xaf, 0xac, 0x10, 0x06, 0x50, 0x7f, 0x53, 0x61, 0x7d, 0x6e, 0x26, 0x13, 0x0e, - 0x31, 0xff, 0x0a, 0x4f, 0x0c, 0x79, 0x51, 0xc6, 0x5b, 0x06, 0x78, 0x15, 0x38, 0x17, 0x88, 0xc9, 0x0c, 0xf8, 0xbb, 0x74, 0xb9, 0x06, 0x78, 0x17, - 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x47, 0x37, 0x28, 0x15, 0x38, 0x04, 0x40, 0x06, 0x28, 0x13, 0x10, 0x07, 0x34, 0xff, 0x0e, 0xf6, 0x7f, 0x01, 0x03, - 0x29, 0x29, 0x29, 0x48, 0x29, 0x03, 0x20, 0x06, 0x40, 0x1e, 0x20, 0x05, 0x03, 0x03, 0x52, 0x1b, 0x4a, 0x13, 0x05, 0x00, 0x00, 0x05, 0x6d, 0xd6, - 0x28, 0x13, 0xb5, 0x06, 0x88, 0x15, 0x15, 0x00, 0x00, 0x42, 0x2f, 0xa5, 0x72, 0x2e, 0xb3, 0x61, 0x10, 0x16, 0x60, 0x7f, 0x02, 0x03, 0x5e, 0x14, - 0x5c, 0x28, 0x84, 0x06, 0x78, 0x15, 0x00, 0x01, 0x00, 0x80, 0xbd, 0x74, 0xb9, 0xac, 0xc0, 0x06, 0x78, 0x15, 0x88, 0x0f, 0x13, 0x7f, 0x11, 0x04, - 0x43, 0x28, 0x13, 0x41, 0x04, 0x30, 0xc5, 0x06, 0x68, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x15, 0x15, 0x20, 0x01, 0x04, 0x40, 0x06, 0x00, 0x04, - 0x04, 0x04, 0x04, 0x93, 0x1c, 0xab, 0x14, 0x00, 0x00, 0x00, 0x06, 0x6d, 0xa2, 0x30, 0xc0, 0x30, 0x45, 0xca, 0x06, 0xa8, 0x17, 0x41, 0x00, 0x64, - 0x28, 0x13, 0x6e, 0x06, 0x88, 0x17, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, 0x96, 0xbe, 0x8f, 0xb3, 0x7e, 0x06, 0x98, 0x17, 0x03, 0x44, 0xc5, 0xe4, - 0xb2, 0x98, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x16, 0x10, 0x04, 0x34, 0x28, 0x13, 0x3d, 0x06, 0x88, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x05, - 0x03, 0x01, 0x01, 0x01, 0x02, 0x01, 0x05, 0x20, 0x06, 0x30, 0x05, 0x00, 0x05, 0x05, 0x4f, 0x1a, 0x1e, 0x19, 0x00, 0x00, 0x00, 0x07, 0x6d, 0xac, - 0x30, 0xb8, 0x30, 0xa2, 0x30, 0x05, 0xf3, 0x30, 0xc6, 0x30, 0xd7, 0x06, 0x48, 0x1d, 0x47, 0x2f, 0xa9, 0x10, 0x7a, 0x00, 0x69, 0x48, 0x1b, 0x74, - 0x00, 0x65, 0x00, 0x40, 0x70, 0x10, 0x15, 0xe0, 0x7f, 0xa0, 0x52, 0x4e, 0x6d, 0x89, 0x5b, 0x08, 0xf0, 0x6c, 0x6e, 0x66, 0x06, 0x68, 0x1b, 0xac, - 0xc0, 0xc9, 0x03, 0x48, 0xc5, 0x4c, 0xd1, 0x04, 0xd5, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x44, 0x13, 0x28, 0x15, 0x37, 0x04, 0x38, 0x48, 0x1b, - 0x42, 0x04, 0x18, 0x35, 0x04, 0x3f, 0x05, 0xe8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x21, 0x21, 0x08, 0x21, 0x21, 0x22, 0x06, 0x20, 0x06, 0x17, - 0x21, 0x06, 0x00, 0x06, 0x06, 0x06, 0x5b, 0x1a, 0x95, 0x1a, 0x00, 0x00, 0x00, 0x08, 0x6d, 0xb3, 0x30, 0xcb, 0x30, 0xe4, 0xc5, 0x06, 0x48, 0x11, - 0x5f, 0xff, 0x4b, 0x00, 0x6f, 0x2f, 0xad, 0x79, 0x06, 0x8f, 0xaf, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0xd1, 0x79, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x68, - 0x13, 0x81, 0x2f, 0xff, 0x54, 0xcf, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0x58, 0x13, 0x88, 0x0f, 0x33, 0x7f, 0x1a, 0x04, 0x3e, 0x28, 0x11, 0x4c, 0x04, - 0x4f, 0xc0, 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x07, 0x35, 0x35, 0x35, 0x34, 0x35, 0x50, 0x07, 0x20, 0x06, 0x28, 0x20, 0x05, 0x07, 0x07, - 0xed, 0x1a, 0x00, 0x19, 0x17, 0x00, 0x00, 0x09, 0x6d, 0xa2, 0x30, 0x05, 0xf3, 0x30, 0xbf, 0x30, 0xea, 0x06, 0x88, 0x1b, 0x41, 0x4f, 0xa7, 0x1b, - 0x61, 0x00, 0x6c, 0x06, 0x68, 0x1b, 0x0f, 0x10, 0x7f, 0x64, 0x41, 0x7d, 0x3f, 0xb1, 0x81, 0x0e, 0x31, 0xff, 0x89, 0x5b, 0x54, 0x58, 0x29, 0x52, - 0x06, 0x98, 0x19, 0x03, 0x48, 0xc5, 0xc8, 0xd0, 0xac, 0xb9, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x41, 0x10, 0x28, 0x15, 0x42, 0x04, 0x30, 0x04, - 0x3b, 0x06, 0x68, 0x1b, 0xc1, 0x10, 0x07, 0x14, 0xff, 0x0e, 0xd6, 0x7f, 0x08, 0x08, 0x08, 0x08, 0x01, 0x30, 0x04, 0x80, 0x60, 0x03, 0x3d, 0x1a, - 0xd1, 0x15, 0x00, 0x00, 0x0a, 0x08, 0x6d, 0xc7, 0x30, 0xa3, 0x28, 0x13, 0xeb, 0x30, 0xd0, 0x36, 0x30, 0xaf, 0x20, 0x05, 0x06, 0x18, 0x1b, 0x44, - 0x26, 0x91, 0x3f, 0xad, 0x72, 0x20, 0x00, 0x62, 0x2f, 0xb3, 0x6b, 0x00, 0x31, 0x01, 0x72, 0x80, 0x10, 0x15, 0xc0, 0x7f, 0xea, 0x8f, 0x9a, 0x4e, - 0xf4, 0x5d, 0x4b, 0x10, 0x51, 0x14, 0x5c, 0x06, 0x58, 0x19, 0x14, 0xb5, 0x7c, 0xc5, 0x00, 0x74, 0xb9, 0x14, 0xbc, 0xa4, 0xd0, 0x74, 0xb9, 0xc4, - 0x06, 0x38, 0x1b, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x38, 0x28, 0x0f, 0x40, 0x04, 0x46, 0x31, 0x28, 0x1b, 0x3a, 0x04, 0x4b, 0x20, 0x09, 0x10, 0x1d, - 0xd4, 0xff, 0x09, 0x2a, 0x1a, 0x1a, 0x20, 0x01, 0x09, 0x20, 0x06, 0x1b, 0x20, 0x05, 0x09, 0x00, 0x09, 0x02, 0x1b, 0x98, 0x1c, 0x00, 0x00, 0x0b, - 0x23, 0x6d, 0xe1, 0x28, 0x13, 0xb7, 0x30, 0xf3, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x15, 0x4d, 0x00, 0x65, 0x28, 0x13, 0x73, 0x2e, 0xaf, 0x6e, 0x10, - 0x16, 0x40, 0x7f, 0x03, 0x85, 0x68, 0x14, 0x5c, 0x9b, 0x8f, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x03, 0x54, 0xba, 0x74, 0xb9, 0xe0, 0xc2, 0x06, 0x38, - 0x11, 0x0f, 0x53, 0x7f, 0x15, 0x1c, 0x04, 0x35, 0x28, 0x15, 0x41, 0x28, 0x1d, 0x3d, 0x05, 0xe8, 0x11, 0x80, 0x10, 0x17, 0x54, 0xff, 0x0a, 0x3a, - 0x3a, 0x3a, 0x39, 0x3a, 0x0a, 0xa0, 0x20, 0x06, 0x30, 0x20, 0x05, 0x0a, 0x0a, 0x2b, 0x1a, 0xa0, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x6d, 0xab, 0x30, - 0xa4, 0x0a, 0x30, 0xbb, 0x30, 0xea, 0x06, 0x88, 0x17, 0x4b, 0x2f, 0xab, 0x79, 0xd0, 0x28, 0x17, 0x38, 0x1d, 0x69, 0x10, 0x16, 0x20, 0x7f, 0x00, - 0x5f, 0x5e, 0x58, 0x20, 0x29, 0x52, 0x06, 0x98, 0x17, 0x74, 0xce, 0x74, 0xc7, 0x38, 0x18, 0xc1, 0xac, 0xb9, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, - 0x1a, 0x04, 0x30, 0x36, 0x04, 0x39, 0x28, 0x17, 0x38, 0x1d, 0x38, 0x06, 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x02, 0x2f, 0x2f, 0x2f, 0x2e, - 0x2f, 0x0b, 0x20, 0x06, 0x20, 0x80, 0x20, 0x05, 0x0b, 0x0b, 0x8b, 0x1b, 0x3b, 0x19, 0x00, 0x00, 0x00, 0x0e, 0x6d, 0xb7, 0x30, 0xe3, 0x30, 0xf3, - 0x08, 0x30, 0xeb, 0x30, 0xa6, 0x20, 0x03, 0xd5, 0x30, 0xa1, 0x88, 0x06, 0x08, 0x1f, 0x5e, 0x01, 0x61, 0x2f, 0xa9, 0x6c, 0x00, 0x31, 0x2c, 0x01, - 0x75, 0x2f, 0xb7, 0x66, 0x28, 0x25, 0x10, 0x15, 0xd0, 0x7f, 0x1a, 0x5c, 0x00, 0x29, 0x52, 0x4c, 0x4e, 0x14, 0x5c, 0xd5, 0x6c, 0x80, 0x06, 0x58, - 0x1b, 0xe8, 0xc0, 0xac, 0xb9, 0xb0, 0xc6, 0x74, 0x1a, 0xb9, 0x0c, 0xd3, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x28, 0x28, 0x17, 0x3d, 0x02, 0x04, - 0x3b, 0x04, 0x4b, 0x04, 0x43, 0x28, 0x19, 0x44, 0xc0, 0x28, 0x25, 0x10, 0x1d, 0xd4, 0xff, 0x0c, 0x44, 0x44, 0x44, 0x43, 0x44, 0x50, 0x0c, 0x20, - 0x06, 0x48, 0x20, 0x05, 0x0c, 0x0c, 0x6a, 0x1a, 0x00, 0x97, 0x1b, 0x00, 0x00, 0x0f, 0x6d, 0xde, 0x30, 0x01, 0xe9, 0x30, 0xc6, 0x30, 0xa3, 0x30, - 0xe4, 0x06, 0x08, 0x11, 0xab, 0x5f, 0xff, 0x4d, 0x2f, 0xaf, 0x6c, 0x2f, 0xb3, 0x74, 0x2f, 0xb5, 0x05, 0xf8, 0x13, 0x80, 0x10, 0x0f, 0x30, 0x7f, - 0x6c, 0x9a, 0xc9, 0x62, 0x82, 0x84, 0x9a, 0x40, 0x4e, 0x06, 0x58, 0x15, 0x00, 0x00, 0xd0, 0xb9, 0x7c, 0xb7, 0x0d, 0xf0, 0xd2, 0x44, 0xc5, 0x06, - 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x17, 0x41, 0x3b, 0x28, 0x1b, 0x42, 0x04, 0x4c, 0x04, 0x4f, 0x05, 0xe8, 0x13, 0x80, 0x10, 0x17, 0x34, - 0xff, 0x0d, 0x37, 0x37, 0x37, 0x36, 0x37, 0x0d, 0xa0, 0x20, 0x06, 0x2d, 0x20, 0x05, 0x0d, 0x0d, 0x45, 0x1b, 0x3e, 0x80, 0x28, 0x17, 0x10, 0x6d, - 0xa8, 0x30, 0xeb, 0x30, 0xba, 0xa9, 0x20, 0x03, 0xe0, 0x06, 0x68, 0x17, 0x45, 0x2f, 0xa5, 0x7a, 0x00, 0x3f, 0xab, 0x10, 0x75, 0x00, 0x6d, 0x10, - 0x16, 0x20, 0x7f, 0xc3, 0x57, 0x14, 0x5c, 0x02, 0x56, 0x79, 0x81, 0x9c, 0xc6, 0x59, 0x06, 0x58, 0x19, 0xd0, 0x01, 0xc5, 0x74, 0xb9, 0xfc, 0xc8, - 0xf8, 0xb8, 0x06, 0x78, 0x17, 0x80, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x40, 0x04, 0x37, 0x04, 0x43, 0x8c, 0x20, 0x05, 0x43, 0x04, 0x3c, 0x06, 0x28, - 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x1f, 0x54, 0x1f, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x4f, 0x20, 0x05, 0x0e, 0x0e, 0x00, 0x5f, 0x1c, 0x58, 0x1d, - 0x00, 0x00, 0x11, 0x6d, 0x44, 0xb5, 0x28, 0x11, 0xb9, 0x30, 0xf3, 0x06, 0x68, 0x15, 0x00, 0x00, 0x45, 0x53, 0x2f, 0xaf, 0x6d, 0x00, 0x73, 0x28, - 0x19, 0x6e, 0x10, 0x16, 0x40, 0x7f, 0x03, 0x28, 0x84, 0xc6, 0x59, 0x7e, 0x67, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x0c, 0xbc, 0xc0, 0x1c, 0xc2, 0x06, - 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x21, 0x04, 0x56, 0x30, 0x28, 0x0f, 0x41, 0x28, 0x19, 0x3d, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0f, 0x02, - 0x43, 0x43, 0x43, 0x42, 0x43, 0x0f, 0x20, 0x06, 0x39, 0x80, 0x20, 0x05, 0x0f, 0x0f, 0x5c, 0x1d, 0xd6, 0x19, 0x00, 0x0d, 0x00, 0x12, 0x6d, 0xef, - 0x06, 0xa8, 0x13, 0x3f, 0xff, 0x56, 0x28, 0x17, 0xcc, 0x06, 0x58, 0x11, 0x10, 0x0f, 0x50, 0x7f, 0xe1, 0x51, 0x06, 0x98, 0x13, 0x3f, 0xff, 0x18, - 0xbc, 0xdc, 0x06, 0xb8, 0x15, 0x0f, 0x13, 0x7f, 0x12, 0x28, 0x17, 0x06, 0x58, 0x11, 0x10, 0x17, 0x54, 0xff, 0x10, 0x4e, 0x54, 0x4e, 0x20, 0x01, - 0x10, 0x20, 0x06, 0x16, 0x20, 0x05, 0x10, 0x10, 0x00, 0x5f, 0x1b, 0xd9, 0x1e, 0x00, 0x00, 0x13, 0x6d, 0x01, 0xab, 0x30, 0xd5, 0x30, 0xe9, 0x30, - 0xde, 0x28, 0x1d, 0x45, 0xde, 0x20, 0x07, 0xb7, 0x30, 0xe5, 0x05, 0xe8, 0x25, 0x4b, 0x2f, 0xaf, 0x1e, 0x68, 0x00, 0x72, 0x4f, 0xb5, 0x38, 0x21, - 0x30, 0x05, 0x30, 0x0d, 0x5f, 0x40, 0x01, 0x10, 0x15, 0x50, 0x7f, 0x61, 0x53, 0x6b, 0x8d, 0xc9, 0x62, 0x00, 0xfc, 0x66, 0x6c, 0x9a, 0xc9, 0x62, - 0xc0, 0x4e, 0x80, 0x06, 0x18, 0x23, 0x74, 0xce, 0x7c, 0xb7, 0xcc, 0xb9, 0xc8, 0x06, 0xb9, 0x7c, 0xb7, 0x88, 0xc2, 0x06, 0x38, 0x21, 0x0e, 0xf3, - 0x7f, 0x1a, 0x8b, 0x28, 0x17, 0x45, 0x04, 0x40, 0x28, 0x1d, 0x3c, 0x48, 0x21, 0x30, 0x05, 0xb0, 0x30, 0x0d, 0x48, 0x05, 0x68, 0x2b, 0x10, 0x16, - 0xf4, 0xff, 0x11, 0x2a, 0x2a, 0x2a, 0x14, 0x29, 0x2a, 0x11, 0x20, 0x06, 0x25, 0x20, 0x05, 0x11, 0x11, 0x00, 0xb9, 0x1a, 0x43, 0x1a, 0x00, 0x00, - 0x14, 0x6d, 0x01, 0xc7, 0x30, 0xcb, 0x30, 0xba, 0x30, 0xea, 0x05, 0xe8, 0x0d, 0x88, 0x9f, 0xff, 0x44, 0x00, 0x65, 0x2f, 0xaf, 0x69, 0x00, 0x7a, - 0x30, 0x00, 0x6c, 0x20, 0x05, 0x10, 0x16, 0x10, 0x7f, 0xe3, 0x4e, 0x3c, 0x5c, 0x0c, 0x79, 0x51, 0x29, 0x52, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x70, - 0xb3, 0x03, 0xc8, 0xb2, 0x90, 0xc9, 0xac, 0xb9, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x14, 0x04, 0x35, 0x28, 0x0d, 0x38, 0x04, 0x37, 0x04, - 0x62, 0x3b, 0x20, 0x05, 0x10, 0x1e, 0x14, 0xff, 0x12, 0x19, 0x19, 0x20, 0x01, 0x12, 0xa0, 0x20, 0x06, 0x1a, 0x20, 0x05, 0x12, 0x12, 0xdb, 0x1a, - 0xae, 0x00, 0x14, 0x00, 0x00, 0x15, 0x6d, 0xd0, 0x30, 0xc8, 0x0a, 0x30, 0xde, 0x30, 0xf3, 0x06, 0x88, 0x17, 0x42, 0x2f, 0xaf, 0x74, 0xc0, 0x6f, - 0xab, 0x10, 0x16, 0x30, 0x7f, 0xf4, 0x5d, 0x79, 0x72, 0xfc, 0x66, 0xc3, 0x06, 0x78, 0x15, 0x2b, 0x99, 0xbc, 0xb8, 0xd2, 0xcc, 0x06, 0x88, 0x15, - 0x0f, 0x13, 0x7f, 0x01, 0x11, 0x04, 0x30, 0x04, 0x42, 0x04, 0x3c, 0x20, 0x05, 0x62, 0x3d, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x13, 0x0e, - 0x0e, 0x20, 0x01, 0x13, 0xa0, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x13, 0x13, 0xf0, 0x1a, 0x3d, 0x00, 0x1d, 0x00, 0x00, 0x16, 0x6d, 0xa8, 0x30, 0xe9, - 0x0a, 0x30, 0xba, 0x30, 0xfc, 0x06, 0x88, 0x17, 0x45, 0x2f, 0xa7, 0x61, 0x85, 0x2f, 0xad, 0x31, 0x01, 0x1f, 0x01, 0x10, 0x06, 0x70, 0x7f, 0xe2, - 0x0e, 0xa1, 0x7f, 0x02, 0xc3, 0x57, 0xc9, 0x62, 0xfd, 0x6c, 0x06, 0x98, 0x17, 0xd8, 0x06, 0xc5, 0x7c, 0xb7, 0xc0, 0xc9, 0x06, 0x98, 0x17, 0x0e, - 0xf3, 0x7f, 0x2d, 0x00, 0x04, 0x3b, 0x04, 0x4f, 0x04, 0x37, 0x04, 0x4b, 0x38, 0x04, 0x33, 0x06, 0x48, 0x17, 0x10, 0x07, 0x34, 0xff, 0x0e, 0xb6, - 0x7f, 0x14, 0x1d, 0x1d, 0xa8, 0x20, 0x01, 0x14, 0x20, 0x06, 0x4d, 0x20, 0x05, 0x14, 0x14, 0x82, 0x00, 0x1b, 0xe3, 0x1b, 0x00, 0x00, 0x17, 0x6d, - 0xb5, 0x02, 0x30, 0xab, 0x30, 0xea, 0x30, 0xe4, 0x06, 0x88, 0x17, 0x53, 0xa3, 0x2f, 0xaf, 0x6b, 0x2f, 0xb3, 0x72, 0x00, 0x79, 0x2f, 0xb9, 0x10, - 0x16, 0x10, 0x7f, 0x00, 0x28, 0x84, 0x61, 0x53, 0xcc, 0x91, 0x9a, 0x4e, 0x80, 0x06, 0x78, 0x19, 0xac, 0xc0, 0x74, 0xce, 0xac, 0xb9, 0x44, 0x60, - 0xc5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x04, 0x3a, 0x8c, 0x20, 0x03, 0x40, 0x04, 0x4c, 0x28, 0x1f, 0x10, 0x1e, 0x14, 0xff, - 0x15, 0x42, 0x05, 0x42, 0x42, 0x41, 0x42, 0x15, 0x20, 0x06, 0x38, 0x20, 0x05, 0x00, 0x15, 0x15, 0x00, 0x1d, 0x9e, 0x15, 0x00, 0x00, 0x00, 0x18, - 0x6d, 0xb3, 0x30, 0xb8, 0x30, 0xe3, 0x30, 0x60, 0xa8, 0x28, 0x1b, 0x06, 0x58, 0x19, 0x4b, 0x00, 0x6f, 0x00, 0x63, 0xa8, 0x2f, 0xb1, 0x65, 0x2f, - 0xb7, 0x69, 0x10, 0x16, 0x20, 0x7f, 0xd1, 0x79, 0x3e, 0x04, 0x8d, 0xc3, 0x57, 0x29, 0x52, 0x06, 0x78, 0x17, 0x54, 0xcf, 0x03, 0x90, 0xc7, 0xd8, - 0xc5, 0xac, 0xb9, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x01, 0x1a, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x36, 0x28, 0x1d, 0x06, 0x4d, 0x04, 0x3b, 0x04, - 0x38, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x16, 0x02, 0x34, 0x34, 0x34, 0x33, 0x34, 0x16, 0x20, 0x06, 0x27, 0x82, 0x20, 0x05, 0x16, 0x16, - 0xfd, 0x1c, 0x46, 0x28, 0x17, 0x19, 0x03, 0x6d, 0xb7, 0x30, 0xef, 0x30, 0xb9, 0x06, 0x68, 0x13, 0x5f, 0xaf, 0x14, 0x69, 0x00, 0x76, 0x2f, 0xb3, - 0x73, 0x10, 0x16, 0x60, 0x7f, 0x21, 0x95, 0x08, 0xe6, 0x74, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0xdc, 0x07, 0xc2, 0x14, 0xbc, 0xa4, 0xc2, - 0x06, 0x78, 0x15, 0x0f, 0x21, 0xff, 0x28, 0x0b, 0x58, 0x32, 0x28, 0x15, 0x41, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x17, 0x48, 0x48, 0x0a, - 0x48, 0x47, 0x48, 0x17, 0x20, 0x06, 0x3a, 0x20, 0x05, 0x17, 0x04, 0x17, 0x44, 0x1c, 0x52, 0x1a, 0x2b, 0x2d, 0x6d, 0xde, 0x0a, 0x30, 0xcb, 0x30, - 0xb5, 0x06, 0xa8, 0x17, 0x4d, 0x2f, 0xab, 0x6e, 0xb0, 0x2f, 0xa9, 0x73, 0x2f, 0xb3, 0x10, 0x16, 0x30, 0x7f, 0x6c, 0x9a, 0x3c, 0x5c, 0x20, 0x28, - 0x84, 0x06, 0x98, 0x17, 0xc8, 0xb9, 0xc8, 0xb2, 0xac, 0x6a, 0xc0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x13, 0x3d, 0x28, 0x1b, 0x41, - 0xc0, 0x28, 0x1b, 0x10, 0x1e, 0x34, 0xff, 0x18, 0x38, 0x38, 0x38, 0x37, 0x38, 0x50, 0x18, 0x20, 0x06, 0x2e, 0x20, 0x05, 0x18, 0x18, 0x75, 0x1b, - 0x00, 0x80, 0x13, 0x00, 0x00, 0x1b, 0x6d, 0xc8, 0x30, 0x01, 0xe9, 0x30, 0xd6, 0x30, 0xbe, 0x30, 0xf3, 0x06, 0x68, 0x1b, 0x10, 0x54, 0x00, 0x72, - 0x2f, 0xad, 0x62, 0x00, 0x7a, 0x00, 0x6e, 0x6f, 0x28, 0x1f, 0x10, 0x06, 0x50, 0x7f, 0x65, 0x21, 0x7f, 0x39, 0x99, 0x31, 0x81, 0x64, 0xc0, 0x05, - 0xe9, 0x9f, 0x06, 0xf1, 0xff, 0x79, 0x72, 0xc9, 0x62, 0x03, 0x5e, 0x20, 0x97, 0x5b, 0x06, 0x78, 0x19, 0xb8, 0xd2, 0x7c, 0xb7, 0x0c, 0x18, 0xbe, - 0x74, 0xc8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0x04, 0x40, 0x83, 0x28, 0x19, 0x31, 0x04, 0x37, 0x04, 0x3e, 0x28, 0x1f, 0x10, 0x0e, 0x54, - 0xff, 0x8a, 0x0e, 0xb6, 0x7f, 0x19, 0x4b, 0x4b, 0x20, 0x01, 0x19, 0x20, 0x06, 0x40, 0x81, 0x20, 0x05, 0x19, 0x19, 0x27, 0x1d, 0x41, 0x1c, 0x2b, - 0x2d, 0x00, 0x6d, 0xd0, 0x30, 0xeb, 0x30, 0xb1, 0x30, 0xb7, 0xd0, 0x20, 0x05, 0x06, 0x58, 0x17, 0x42, 0x2f, 0xaf, 0x6c, 0x00, 0x31, 0x01, 0x54, - 0x6b, 0x26, 0x9d, 0x73, 0x2f, 0xb7, 0x72, 0x10, 0x15, 0xe0, 0x7f, 0xf4, 0x5d, 0x00, 0xd2, 0x52, 0x4b, 0x51, 0xc3, 0x57, 0x7f, 0x89, 0x20, 0x14, - 0x5c, 0x06, 0x38, 0x1b, 0x1c, 0xbc, 0xac, 0xb9, 0x00, 0x06, 0xcf, 0xdc, 0xc2, 0x74, 0xb9, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x11, 0x80, 0x28, - 0x15, 0x3b, 0x04, 0x4b, 0x04, 0x3a, 0x04, 0x35, 0x0c, 0x04, 0x41, 0x04, 0x38, 0x28, 0x25, 0x10, 0x1d, 0xd4, 0xff, 0x1a, 0x0c, 0x54, 0x0c, 0x20, - 0x01, 0x1a, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x1a, 0x1a, 0x00, 0x31, 0x1c, 0xd3, 0x13, 0x00, 0x00, 0x1d, 0x6d, 0x00, 0xa2, 0x30, 0xc7, 0x30, 0xa3, - 0x30, 0xe4, 0x30, 0x14, 0xde, 0x30, 0xf3, 0x06, 0x48, 0x19, 0x41, 0x2e, 0xa1, 0x31, 0x01, 0x5c, 0x79, 0x2f, 0xb3, 0x6d, 0x2f, 0xb7, 0x06, 0x1f, - 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, 0x96, 0x03, 0xb7, 0x5f, 0x9a, 0x4e, 0xfc, 0x66, 0x06, 0x38, 0x13, 0x3f, 0xff, 0x01, 0x44, 0xc5, 0x14, 0xb5, - 0x7c, 0xc5, 0xcc, 0x06, 0x68, 0x15, 0x88, 0x0f, 0x13, 0x7f, 0x10, 0x04, 0x34, 0x28, 0x15, 0x4f, 0x04, 0x3c, 0xb0, 0x28, 0x1f, 0x3d, 0x05, 0xe8, - 0x13, 0x10, 0x17, 0x34, 0xff, 0x1b, 0x02, 0x02, 0x02, 0x18, 0x03, 0x02, 0x1b, 0x20, 0x06, 0x30, 0x05, 0x1b, 0x1b, 0xda, 0x00, 0x1a, 0x37, 0x1b, - 0x00, 0x00, 0x1e, 0x6d, 0xc6, 0x00, 0x30, 0xad, 0x30, 0xeb, 0x30, 0xc0, 0x30, 0xfc, 0x8a, 0x06, 0x48, 0x15, 0x00, 0x00, 0x54, 0x2f, 0xa7, 0x6b, - 0x4f, 0xa7, 0x64, 0x90, 0x2f, 0xb9, 0x1f, 0x01, 0x10, 0x15, 0xf0, 0x7f, 0xf0, 0x6c, 0xfa, 0x57, 0x08, 0x14, 0x5c, 0xbe, 0x8f, 0x06, 0x78, 0x17, - 0x4c, 0xd1, 0xa4, 0x06, 0xd0, 0x74, 0xb9, 0xe4, 0xb2, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x22, 0x00, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x38, 0x04, - 0x40, 0x8c, 0x28, 0x1f, 0x30, 0x04, 0x33, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x1c, 0x49, 0x54, 0x49, 0x20, 0x01, 0x1c, 0x20, 0x06, 0x3e, - 0x20, 0x05, 0x1c, 0x1c, 0x00, 0x24, 0x1d, 0x91, 0x13, 0x00, 0x00, 0x1f, 0x6d, 0x41, 0xaf, 0x28, 0x15, 0xc3, 0x30, 0xab, 0x30, 0xec, 0x06, 0x68, - 0x17, 0x54, 0x4b, 0x2f, 0xad, 0x72, 0x2f, 0xb1, 0x6b, 0x28, 0x1d, 0x61, 0x00, 0x60, 0x6c, 0x28, 0x25, 0x10, 0x15, 0xe0, 0x7f, 0x51, 0xd2, 0x52, - 0x4b, 0x51, 0x08, 0x61, 0x53, 0xb1, 0x83, 0x06, 0x58, 0x19, 0xa4, 0xd0, 0xac, 0x06, 0xb9, 0x7c, 0xce, 0x08, 0xb8, 0x06, 0x78, 0x17, 0x0e, 0xf3, - 0x7f, 0x1a, 0x2a, 0x04, 0x4b, 0x28, 0x13, 0x4b, 0x28, 0x1b, 0x3a, 0x28, 0x17, 0x3b, 0xc0, 0x28, 0x25, 0x10, 0x1d, 0xd4, 0xff, 0x1d, 0x31, 0x31, - 0x31, 0x30, 0x31, 0x50, 0x1d, 0x20, 0x06, 0x2b, 0x20, 0x05, 0x1d, 0x1d, 0x56, 0x1c, 0x00, 0xd2, 0x17, 0x00, 0x00, 0x20, 0x6d, 0xaa, 0x30, 0x01, - 0xb9, 0x30, 0xde, 0x30, 0xcb, 0x30, 0xa8, 0x06, 0x68, 0x17, 0x05, 0x4f, 0x00, 0x73, 0x00, 0x6d, 0x2f, 0xa9, 0x6e, 0x2f, 0xb3, 0x60, 0x79, 0x06, - 0x08, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x65, 0x59, 0xaf, 0x65, 0xfc, 0x08, 0x66, 0x3c, 0x5c, 0xf2, 0x06, 0x68, 0x17, 0x24, 0xc6, 0xa4, 0x01, 0xc2, - 0xc8, 0xb9, 0xc8, 0xb2, 0x08, 0xc6, 0x06, 0x58, 0x19, 0x82, 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x41, 0x04, 0x3c, 0x28, 0x11, 0x3d, 0x30, 0x04, 0x38, - 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x1e, 0x40, 0x40, 0x40, 0x14, 0x3f, 0x40, 0x1e, 0x20, 0x06, 0x36, 0x20, 0x05, 0x1e, 0x1e, 0x00, 0x5e, - 0x1a, 0xc7, 0x19, 0x00, 0x00, 0x21, 0x6d, 0x00, 0xad, 0x30, 0xe5, 0x30, 0xbf, 0x30, 0xfc, 0x30, 0x41, 0xe4, 0x06, 0x68, 0x17, 0x4b, 0x00, 0xfc, - 0x00, 0x74, 0x2f, 0xa9, 0x50, 0x68, 0x28, 0x15, 0x61, 0x10, 0x16, 0x20, 0x7f, 0x48, 0x5c, 0x54, 0x58, 0x08, 0x0c, 0x5e, 0x9a, 0x4e, 0x06, 0x58, - 0x15, 0x00, 0x00, 0x34, 0x01, 0xd0, 0xc0, 0xd0, 0x88, 0xd7, 0x44, 0xc5, 0x06, 0x58, 0x15, 0x82, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x4e, 0x04, 0x42, - 0x28, 0x17, 0x45, 0x0c, 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x28, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x1f, 0x36, 0x05, 0x36, 0x36, 0x35, 0x36, 0x1f, 0x20, - 0x06, 0x2c, 0x20, 0x05, 0x00, 0x1f, 0x1f, 0x07, 0x1c, 0x52, 0x15, 0x00, 0x00, 0x00, 0x22, 0x6d, 0xc1, 0x30, 0xe7, 0x30, 0xeb, 0x30, 0x40, 0xe0, - 0x06, 0x68, 0x15, 0x00, 0x00, 0xc7, 0x00, 0x6f, 0x00, 0x18, 0x72, 0x00, 0x75, 0x2f, 0xb3, 0x10, 0x16, 0x50, 0x7f, 0x54, 0x4e, 0x81, 0x10, 0x9c, - 0xc6, 0x59, 0x06, 0x78, 0x15, 0x00, 0x00, 0x08, 0xcd, 0x30, 0xf8, 0xb8, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x27, 0x04, 0x3e, 0x04, 0x06, 0x40, - 0x04, 0x43, 0x04, 0x3c, 0x06, 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, 0x20, 0x2a, 0x18, 0x18, 0x20, 0x01, 0x20, 0x20, 0x06, 0x47, 0x20, 0x05, 0x20, - 0x00, 0x20, 0xd6, 0x1c, 0xdb, 0x18, 0x00, 0x00, 0x23, 0x02, 0x6d, 0xa4, 0x30, 0xb9, 0x30, 0xd1, 0x28, 0x19, 0xbf, 0x82, 0x06, 0x68, 0x19, 0x49, - 0x00, 0x73, 0x00, 0x70, 0x2f, 0xaf, 0x72, 0xc0, 0x4f, 0xb5, 0x10, 0x16, 0x10, 0x7f, 0x0a, 0x4f, 0xaf, 0x65, 0x15, 0x5e, 0x08, 0x14, 0x5c, 0x54, - 0x58, 0x06, 0x58, 0x1b, 0x74, 0xc7, 0xa4, 0x01, 0xc2, 0x0c, 0xd3, 0x74, 0xb9, 0xc0, 0xd0, 0x06, 0x58, 0x1d, 0x80, 0x0e, 0xf3, 0x7f, 0x2b, 0x04, - 0x41, 0x04, 0x3f, 0x04, 0x30, 0xb0, 0x28, 0x1b, 0x42, 0x20, 0x05, 0x10, 0x1e, 0x14, 0xff, 0x21, 0x27, 0x27, 0x27, 0x10, 0x27, 0x28, 0x21, 0x20, - 0x06, 0x4b, 0x27, 0x21, 0x21, 0x00, 0x21, 0x21, 0xdb, 0x1a, 0xb9, 0x15, 0x00, 0x00, 0x00, 0x24, 0x6d, 0xa2, 0x30, 0xa4, 0x30, 0xc9, 0x30, 0x10, - 0xa5, 0x30, 0xf3, 0x06, 0x68, 0x17, 0x41, 0x00, 0x79, 0x00, 0x06, 0x64, 0x00, 0x31, 0x01, 0x6e, 0x06, 0x6f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x7e, - 0x18, 0x82, 0x7b, 0x76, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x44, 0xc5, 0x74, 0x18, 0xc7, 0x18, 0xb5, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x04, - 0x39, 0x03, 0x04, 0x34, 0x04, 0x4b, 0x04, 0x3d, 0x06, 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, 0x15, 0x22, 0x0b, 0x0b, 0x20, 0x01, 0x22, 0x20, 0x06, - 0x04, 0x20, 0x05, 0x00, 0x22, 0x22, 0xe9, 0x1a, 0xcd, 0x13, 0x00, 0x00, 0x07, 0x25, 0x6d, 0xcf, 0x30, 0xbf, 0x28, 0x19, 0x06, 0x58, 0x13, 0x3f, - 0xff, 0x68, 0x48, 0x2f, 0xab, 0x3f, 0xa9, 0x79, 0x10, 0x16, 0x60, 0x7f, 0xc8, 0x54, 0x54, 0x10, 0x58, 0x0a, 0x4f, 0x06, 0x98, 0x19, 0x58, 0xd5, - 0xc0, 0xd0, 0x30, 0x74, 0xc7, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x30, 0x04, 0x58, 0x42, 0x20, 0x03, 0x39, 0x06, 0x68, 0x17, 0x10, - 0x16, 0xf4, 0xff, 0x23, 0x25, 0x25, 0x08, 0x25, 0x25, 0x26, 0x23, 0x20, 0x06, 0x44, 0x25, 0x23, 0x00, 0x23, 0x23, 0x23, 0xbe, 0x19, 0xb4, 0x19, - 0x00, 0x00, 0x00, 0x26, 0x6d, 0xde, 0x30, 0xeb, 0x30, 0xc7, 0x0a, 0x30, 0xa3, 0x30, 0xf3, 0x06, 0x68, 0x1b, 0x4d, 0x28, 0x17, 0x72, 0x98, 0x2f, - 0xb1, 0x69, 0x00, 0x06, 0x5f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x6c, 0x9a, 0x14, 0x10, 0x5c, 0x01, 0x4e, 0x06, 0x98, 0x17, 0xc8, 0xb9, 0x74, 0xb9, - 0x34, 0x18, 0xb5, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x17, 0x40, 0x04, 0x06, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x06, 0x48, 0x19, 0x10, - 0x16, 0xf4, 0xff, 0x24, 0x02, 0x39, 0x39, 0x39, 0x38, 0x39, 0x24, 0x20, 0x06, 0x2f, 0x80, 0x20, 0x05, 0x24, 0x24, 0x89, 0x1a, 0xf8, 0x1c, 0x00, - 0x00, 0x00, 0x27, 0x6d, 0xa2, 0x30, 0xaf, 0x30, 0xb5, 0x08, 0x30, 0xe9, 0x30, 0xa4, 0x06, 0x68, 0x17, 0x41, 0x00, 0x6b, 0x38, 0x00, 0x73, 0x48, - 0x1b, 0x06, 0x5f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, 0x96, 0x4b, 0x04, 0x51, 0x28, 0x84, 0x56, 0x8d, 0x06, 0x78, 0x19, 0x45, 0xc5, 0x03, 0xac, - 0xc0, 0x7c, 0xb7, 0x74, 0xc7, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x04, 0x10, 0x04, 0x3a, 0x04, 0x41, 0x48, 0x1b, 0x30, 0x04, 0x60, 0x39, 0x06, - 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x25, 0x05, 0x05, 0x05, 0x06, 0x30, 0x05, 0x25, 0x30, 0x06, 0x20, 0x05, 0x25, 0x25, 0x49, 0x1b, 0x04, 0x32, - 0x18, 0x00, 0x00, 0x28, 0x28, 0x17, 0xd5, 0x30, 0x01, 0xa3, 0x30, 0xe8, 0x30, 0xf3, 0x30, 0xab, 0x28, 0x1d, 0x44, 0xd2, 0x28, 0x23, 0xfc, 0x30, - 0xeb, 0x05, 0xa8, 0x23, 0x41, 0x00, 0x55, 0x66, 0x28, 0x0f, 0x6f, 0x2f, 0xad, 0x6b, 0x68, 0x1d, 0x68, 0x2f, 0xbb, 0xc0, 0x58, 0x29, 0x10, 0x15, - 0x30, 0x7f, 0x3f, 0x96, 0xf2, 0x83, 0x38, 0x6c, 0x00, 0x61, 0x53, 0xc9, 0x62, 0x0c, 0x5e, 0x28, 0x84, 0x20, 0x14, 0x5c, 0x05, 0xf8, 0x1f, 0x44, - 0xc5, 0x3c, 0xd5, 0x28, 0x00, 0xc6, 0x74, 0xce, 0x7c, 0xb7, 0x88, 0xd7, 0xac, 0x18, 0xc0, 0x74, 0xb9, 0x05, 0xf8, 0x1f, 0x0e, 0xf3, 0x7f, 0x10, - 0x04, 0x44, 0x03, 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x3d, 0x28, 0x1f, 0x58, 0x1d, 0x18, 0x45, 0x04, 0x38, 0x68, 0x29, 0x10, 0x1d, 0x34, 0xff, 0x26, - 0x03, 0x03, 0x0a, 0x03, 0x04, 0x03, 0x26, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x26, 0x00, 0x26, 0x8f, 0x1b, 0xb7, 0x15, 0x00, 0x00, 0x29, 0x2d, 0x6d, - 0xc8, 0x28, 0x0f, 0xc8, 0x05, 0xa8, 0x07, 0xff, 0xff, 0x54, 0x28, 0x13, 0xa0, 0x38, 0x11, 0x74, 0x10, 0x16, 0x60, 0x7f, 0x58, 0x62, 0x61, 0x53, - 0x79, 0x60, 0x72, 0x05, 0xf8, 0x0d, 0x9f, 0xff, 0xa0, 0xd1, 0x74, 0xce, 0xb8, 0x6d, 0xd2, 0x05, 0xf8, 0x0d, 0x0f, 0x93, 0x7f, 0x22, 0x28, 0x13, - 0x38, 0x11, 0x42, 0x05, 0x48, 0x05, 0x8a, 0x10, 0x18, 0x14, 0xff, 0x27, 0x4a, 0x4a, 0x20, 0x01, 0x27, 0x20, 0x06, 0x3f, 0x80, 0x20, 0x05, 0x27, - 0x27, 0xab, 0x1c, 0xfd, 0x19, 0x00, 0x00, 0x00, 0x2a, 0x6d, 0xa8, 0x30, 0xc7, 0x30, 0xa3, 0x08, 0x30, 0xeb, 0x30, 0xcd, 0x06, 0x68, 0x1b, 0x45, - 0x00, 0x64, 0xac, 0x2f, 0x9f, 0x72, 0x2f, 0xaf, 0x65, 0x06, 0x48, 0x9a, 0x10, 0x0e, 0xf0, 0x7f, 0xc3, 0x57, 0x02, 0xea, 0x8f, 0x14, 0x5c, 0x85, - 0x51, 0x06, 0x78, 0x19, 0xd0, 0x01, 0xc5, 0x14, 0xb5, 0x74, 0xb9, 0x24, 0xb1, 0x06, 0x78, 0x19, 0x80, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x34, 0x04, - 0x38, 0x04, 0x40, 0x0c, 0x04, 0x3d, 0x04, 0x35, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x1c, 0x54, 0x1c, 0x20, 0x01, 0x28, 0x20, 0x06, - 0x4c, 0x20, 0x05, 0x28, 0x28, 0x00, 0xa1, 0x1d, 0xe4, 0x12, 0x00, 0x00, 0x2b, 0x6d, 0x01, 0xab, 0x30, 0xe9, 0x30, 0xde, 0x30, 0xf3, 0x06, 0x68, - 0x15, 0x15, 0x00, 0x00, 0x4b, 0x2f, 0xab, 0x72, 0x2f, 0xaf, 0x6d, 0x2f, 0xb3, 0x40, 0x6e, 0x10, 0x16, 0x20, 0x7f, 0x61, 0x53, 0xc9, 0x62, 0xfc, - 0x66, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x74, 0xce, 0x7c, 0xb7, 0xcc, 0x62, 0xb9, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x30, 0x28, - 0x15, 0x30, 0x2c, 0x04, 0x3c, 0x20, 0x07, 0x3d, 0x06, 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x29, 0x2c, 0x05, 0x2c, 0x2c, 0x2b, 0x2c, 0x29, 0x20, - 0x06, 0x22, 0x20, 0x05, 0x00, 0x29, 0x29, 0x70, 0x1a, 0x9e, 0x17, 0x00, 0x00, 0x00, 0x2c, 0x6d, 0xaa, 0x30, 0xeb, 0x30, 0xc9, 0x30, 0x51, 0xa5, - 0x06, 0x88, 0x17, 0x4f, 0x2f, 0xab, 0x64, 0x00, 0x75, 0x06, 0x75, 0x96, 0x81, 0x10, 0x0f, 0x00, 0x7f, 0x65, 0x59, 0x14, 0x5c, 0x5c, 0x67, 0x06, - 0x98, 0x17, 0x03, 0x24, 0xc6, 0x74, 0xb9, 0x50, 0xb4, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x46, 0x1e, 0x28, 0x15, 0x34, 0x04, 0x43, 0x06, 0x28, - 0x11, 0x10, 0x17, 0x54, 0xff, 0x2a, 0x02, 0x3f, 0x3f, 0x3f, 0x3e, 0x3f, 0x2a, 0x20, 0x06, 0x35, 0x80, 0x20, 0x05, 0x2a, 0x2a, 0x24, 0x1d, 0xf0, - 0x1a, 0x00, 0x02, 0x00, 0x2d, 0x6d, 0xb7, 0x30, 0xa4, 0x28, 0x19, 0xc8, 0x88, 0x06, 0x88, 0x17, 0x53, 0x00, 0x69, 0x20, 0x01, 0x72, 0x00, 0x74, - 0xc0, 0x06, 0x6d, 0xb0, 0x10, 0x0e, 0xf0, 0x7f, 0x21, 0x95, 0x14, 0x5c, 0x79, 0x72, 0x80, 0x06, 0x98, 0x17, 0xdc, 0xc2, 0x74, 0xc7, 0x74, 0xb9, - 0xb8, 0x64, 0xd2, 0x06, 0x78, 0x19, 0x0f, 0x01, 0xff, 0x04, 0x38, 0x20, 0x01, 0x40, 0x04, 0x60, 0x42, 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, - 0x2b, 0x45, 0x45, 0x45, 0x44, 0x28, 0x45, 0x2b, 0x20, 0x06, 0x3b, 0x20, 0x05, 0x2b, 0x2b, 0xf9, 0x00, 0x1a, 0xd4, 0x1d, 0x00, 0x00, 0x2e, 0x6d, - 0xa8, 0x8b, 0x28, 0x15, 0xb8, 0x30, 0xf3, 0x20, 0x03, 0xe3, 0x20, 0x05, 0x06, 0x18, 0x1d, 0x50, 0x45, 0x2f, 0xaf, 0x7a, 0x28, 0x1b, 0x6e, 0x00, - 0x63, 0x00, 0x60, 0x61, 0x20, 0x05, 0x10, 0x15, 0xf0, 0x7f, 0xc3, 0x57, 0x14, 0x5c, 0x25, 0x10, 0x6d, 0x79, 0x8a, 0x06, 0x78, 0x19, 0xd0, 0xc5, - 0x74, 0xb9, 0x0d, 0xc4, 0xc9, 0x94, 0xc7, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x2d, 0x28, 0x13, 0x40, 0x37, 0x28, 0x1b, 0x3d, 0x04, 0x34, 0x04, - 0x36, 0x04, 0x62, 0x30, 0x20, 0x07, 0x10, 0x1d, 0xd4, 0xff, 0x2c, 0x1e, 0x1e, 0x20, 0x01, 0x2c, 0xa0, 0x20, 0x06, 0x4e, 0x20, 0x05, 0x2c, 0x2c, - 0x44, 0x1c, 0x16, 0x02, 0x1c, 0x00, 0x00, 0x2f, 0x6d, 0xc1, 0x48, 0x0f, 0xaf, 0xe8, 0x28, 0x1d, 0x06, 0x18, 0x13, 0x3f, 0xff, 0xc7, 0x48, 0x0d, - 0x6b, 0x00, 0x31, 0x30, 0x01, 0x72, 0x20, 0x03, 0x10, 0x16, 0x10, 0x7f, 0x0c, 0x66, 0x4b, 0x51, 0x20, 0xd2, 0x52, 0x06, 0x78, 0x15, 0x00, 0x00, - 0x3d, 0xcc, 0xa4, 0x1a, 0xd0, 0xac, 0xb9, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x27, 0x48, 0x0b, 0x3a, 0x2c, 0x04, 0x4b, 0x28, 0x1f, 0x4b, 0x05, - 0xe8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x2d, 0x17, 0x54, 0x17, 0x20, 0x01, 0x2d, 0x20, 0x06, 0x46, 0x20, 0x05, 0x2d, 0x2d, 0x00, 0xdf, 0x1c, 0xe7, - 0x17, 0x00, 0x00, 0x30, 0x6d, 0x56, 0xbe, 0x28, 0x15, 0xb0, 0x28, 0x15, 0xc0, 0x28, 0x1b, 0x06, 0x38, 0x19, 0x5a, 0x20, 0x00, 0x6f, 0x2f, 0xab, - 0x67, 0x00, 0x75, 0x00, 0x6c, 0x28, 0x00, 0x64, 0x2f, 0xb1, 0x6b, 0x10, 0x15, 0xe0, 0x7f, 0x97, 0x5b, 0xe4, 0x01, 0x53, 0x14, 0x5c, 0xbe, 0x8f, - 0x4b, 0x51, 0x06, 0x58, 0x1b, 0x00, 0x85, 0xc8, 0x74, 0xad, 0xe4, 0xb2, 0x6c, 0xd0, 0xc4, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x17, 0x04, 0x3e, - 0x28, 0x17, 0x33, 0x04, 0x05, 0x43, 0x04, 0x3b, 0x04, 0x34, 0x28, 0x23, 0x3a, 0x05, 0xe8, 0x1b, 0x8a, 0x10, 0x16, 0xf4, 0xff, 0x2e, 0x51, 0x51, - 0x20, 0x01, 0x2e, 0x20, 0x06, 0x1d, 0x80, 0x20, 0x05, 0x2e, 0x2e, 0x79, 0x1d, 0x99, 0x16, 0x00, 0x00, 0x00, 0x31, 0x6d, 0xe8, 0x30, 0xba, 0x30, - 0xac, 0x35, 0x30, 0xc8, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x59, 0x28, 0x17, 0x7a, 0x28, 0x17, 0x10, 0x61, 0x00, 0x74, 0x10, 0x16, 0x40, 0x7f, 0xa6, - 0x7e, 0x79, 0x51, 0x08, 0xa0, 0x52, 0x79, 0x72, 0x06, 0x58, 0x15, 0x00, 0x00, 0x94, 0x01, 0xc6, 0x88, 0xc9, 0x00, 0xac, 0xb8, 0xd2, 0x06, 0x78, - 0x17, 0xa8, 0x0e, 0xf3, 0x7f, 0x19, 0x28, 0x17, 0x37, 0x28, 0x17, 0x30, 0x04, 0x42, 0xc5, 0x05, 0xe8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x2f, 0x50, - 0x50, 0x20, 0x01, 0x2f, 0x20, 0x06, 0x40, 0x1f, 0x20, 0x05, 0x2f, 0x2f, 0x51, 0x1c, 0xbf, 0x18, 0x00, 0x00, 0x00, 0x32, 0x6d, 0xa6, 0x30, 0xb7, - 0x30, 0x10, 0xe3, 0x30, 0xaf, 0x06, 0x88, 0x17, 0x55, 0x00, 0x5f, 0x01, 0xc0, 0x06, 0x1f, 0xa5, 0x10, 0x0f, 0x90, 0x7f, 0x4c, 0x4e, 0x28, 0x84, - 0x4b, 0x51, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0xb0, 0xc6, 0xe4, 0xc0, 0x6c, 0x62, 0xd0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x23, 0x04, 0x48, - 0x28, 0x13, 0x3a, 0xc5, 0x06, 0x48, 0x13, 0x10, 0x17, 0x34, 0xff, 0x30, 0x4d, 0x4d, 0x20, 0x01, 0x30, 0x20, 0x06, 0x40, 0x42, 0x20, 0x05, 0x30, - 0x30, 0x82, 0x1b, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x33, 0x6d, 0xa2, 0x30, 0xfc, 0x30, 0x40, 0xeb, 0x06, 0x88, 0x15, 0x00, 0x00, 0x41, 0x00, 0x1f, - 0x01, 0x08, 0x72, 0x00, 0x31, 0x01, 0x10, 0x16, 0x70, 0x7f, 0x3f, 0x96, 0xd2, 0x40, 0x52, 0x06, 0x98, 0x15, 0x00, 0x00, 0x44, 0xc5, 0xac, 0xb9, - 0xc0, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x10, 0x04, 0x33, 0x04, 0x40, 0x04, 0x60, 0x4b, 0x06, 0x88, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x31, 0x04, - 0x04, 0x04, 0x05, 0x28, 0x04, 0x31, 0x20, 0x06, 0x01, 0x20, 0x05, 0x31, 0x31, 0x3f, 0x02, 0x1c, 0x9e, 0x1e, 0x00, 0x00, 0x34, 0x28, 0x17, 0xde, - 0x08, 0x30, 0xb7, 0x30, 0xe4, 0x06, 0x88, 0x19, 0x41, 0x00, 0x6d, 0x03, 0x00, 0x61, 0x00, 0x73, 0x00, 0x79, 0x20, 0x05, 0x10, 0x16, 0x30, 0x7f, - 0x00, 0x3f, 0x96, 0x6c, 0x9a, 0x7f, 0x89, 0x9a, 0x4e, 0x80, 0x06, 0x78, 0x1b, 0x44, 0xc5, 0xc8, 0xb9, 0xdc, 0xc2, 0x44, 0x60, 0xc5, 0x06, 0x78, - 0x1b, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x3c, 0x04, 0x30, 0x03, 0x04, 0x41, 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x48, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x01, - 0x32, 0x06, 0x06, 0x06, 0x07, 0x06, 0x32, 0x30, 0x06, 0x80, 0x20, 0x05, 0x32, 0x32, 0xe8, 0x1c, 0x7b, 0x19, 0x00, 0x20, 0x00, 0x35, 0x28, 0x17, - 0xeb, 0x30, 0xc0, 0x30, 0xcf, 0x20, 0x30, 0xf3, 0x06, 0x68, 0x19, 0x41, 0x00, 0x72, 0x00, 0x64, 0xa8, 0x28, 0x19, 0x68, 0x28, 0x1d, 0x6e, 0x10, - 0x16, 0x20, 0x7f, 0x3f, 0x96, 0x14, 0x04, 0x5c, 0xbe, 0x8f, 0x55, 0x7f, 0x06, 0x98, 0x17, 0x74, 0xb9, 0x0c, 0xe4, 0xb2, 0x5c, 0xd5, 0x06, 0x98, - 0x17, 0x0e, 0xd3, 0x7f, 0x10, 0x04, 0x15, 0x40, 0x04, 0x34, 0x28, 0x19, 0x45, 0x28, 0x1d, 0x3d, 0x06, 0x28, 0x19, 0x8a, 0x10, 0x16, 0xf4, 0xff, - 0x33, 0x09, 0x09, 0x20, 0x01, 0x33, 0x40, 0x06, 0x33, 0x00, 0x33, 0x33, 0x33, 0x3d, 0x1d, 0x5d, 0x1e, 0x00, 0x20, 0x00, 0x36, 0x48, 0x17, 0xc8, - 0x30, 0xa6, 0x30, 0xa3, 0xc1, 0x06, 0x68, 0x19, 0x38, 0x17, 0x74, 0x00, 0x76, 0x00, 0x69, 0x06, 0x48, 0x15, 0xc2, 0x10, 0x0f, 0x10, 0x7f, 0x38, - 0x17, 0x79, 0x72, 0x29, 0x6e, 0x06, 0xb8, 0x17, 0xb8, 0x1c, 0xd2, 0x48, 0xbe, 0x06, 0xb8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x42, 0x04, 0x18, - 0x32, 0x04, 0x38, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x34, 0x0a, 0x0a, 0xa0, 0x20, 0x01, 0x34, 0x40, 0x06, 0x34, 0x34, 0x34, 0x34, 0x49, - 0x00, 0x1d, 0xbc, 0x1d, 0x00, 0x00, 0x37, 0x6d, 0xd0, 0xa3, 0x48, 0x17, 0xa5, 0x06, 0x68, 0x15, 0x00, 0x00, 0x42, 0x2f, 0xab, 0x38, 0x19, 0x30, - 0x31, 0x01, 0x06, 0x58, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x5d, 0x14, 0x5c, 0x20, 0x7e, 0x81, 0x06, 0x78, 0x15, 0x00, 0x00, 0x14, 0xbc, 0x74, - 0x18, 0xb9, 0xf4, 0xd2, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x11, 0x04, 0x30, 0xb1, 0x48, 0x19, 0x4b, 0x06, 0x68, 0x17, 0x10, 0x16, 0xf4, 0xff, - 0x35, 0x0d, 0x0d, 0x20, 0x01, 0x50, 0x35, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x35, 0x35, 0x9b, 0x1d, 0x04, 0xfe, 0x16, 0x00, 0x00, 0x38, 0x28, 0x17, - 0xa4, 0x30, 0x60, 0xd6, 0x48, 0x1b, 0x06, 0x98, 0x17, 0x79, 0x00, 0x62, 0x00, 0x75, 0xc0, 0x4f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0xf4, 0x5d, 0x0a, - 0x4f, 0x03, 0x5e, 0x0c, 0x14, 0x5c, 0x79, 0x72, 0x06, 0x58, 0x1b, 0x28, 0x17, 0xc7, 0x80, 0x0e, 0xbd, 0x74, 0xb9, 0xb8, 0x06, 0x68, 0x1b, 0x0e, - 0xf3, 0x7f, 0x38, 0x17, 0x39, 0x0c, 0x04, 0x31, 0x04, 0x43, 0x48, 0x1d, 0x10, 0x1e, 0x14, 0xff, 0x36, 0x0f, 0x54, 0x0f, 0x20, 0x01, 0x36, 0x20, - 0x06, 0x0c, 0x20, 0x05, 0x36, 0x36, 0x00, 0x9f, 0x1c, 0x99, 0x1c, 0x00, 0x00, 0x39, 0x6d, 0x01, 0xd3, 0x30, 0xec, 0x30, 0xb8, 0x30, 0xaf, 0x06, - 0x68, 0x15, 0x80, 0x3f, 0xaf, 0x69, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x63, 0xa0, 0x20, 0x07, 0x6b, 0x10, 0x16, 0x20, 0x7f, 0xd4, 0x6b, 0xb1, 0x83, - 0x09, 0x10, 0x54, 0x4b, 0x51, 0x06, 0x58, 0x15, 0x00, 0x00, 0x4c, 0xbe, 0x03, 0x08, 0xb8, 0xc0, 0xc9, 0x6c, 0xd0, 0x06, 0x58, 0x15, 0x0f, 0x13, - 0x7f, 0x00, 0x11, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x16, 0x34, 0x04, 0x36, 0x20, 0x09, 0x3a, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, - 0x37, 0x28, 0x10, 0x10, 0x20, 0x01, 0x37, 0x40, 0x06, 0x37, 0x37, 0x37, 0x00, 0x37, 0x8b, 0x1c, 0x51, 0x15, 0x00, 0x00, 0x3a, 0x80, 0x28, 0x17, - 0xf3, 0x30, 0xae, 0x30, 0xe7, 0x30, 0xeb, 0xc1, 0x06, 0x68, 0x19, 0x38, 0x17, 0x6e, 0x00, 0x67, 0x00, 0xf6, 0x28, 0x1d, 0x81, 0x10, 0x16, 0x30, - 0x7f, 0xbe, 0x5b, 0x3c, 0x68, 0x14, 0x5c, 0x06, 0x78, 0x15, 0x03, 0x00, 0x00, 0x59, 0xbe, 0x3c, 0xad, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x82, - 0x38, 0x17, 0x3d, 0x04, 0x33, 0x04, 0x51, 0x28, 0x1d, 0x4c, 0xc5, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x38, 0x11, 0x11, 0x20, 0x01, 0x38, - 0x40, 0x06, 0x00, 0x38, 0x38, 0x38, 0x38, 0xa6, 0x1b, 0xcc, 0x1c, 0x10, 0x00, 0x00, 0x3b, 0x28, 0x17, 0xc8, 0x30, 0xea, 0x30, 0x68, 0xb9, 0x06, - 0x68, 0x15, 0x5f, 0xaf, 0x74, 0x2f, 0xb1, 0x69, 0x00, 0x73, 0x80, 0x10, 0x16, 0x40, 0x7f, 0xd4, 0x6b, 0x79, 0x72, 0x29, 0x52, 0xaf, 0x40, 0x65, - 0x06, 0x78, 0x19, 0x44, 0xbe, 0xc0, 0xd2, 0xac, 0xb9, 0x3a, 0xa4, 0xc2, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x42, 0x28, 0x13, 0x38, - 0x31, 0x04, 0x41, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x39, 0x12, 0x12, 0x20, 0x01, 0x40, 0x39, 0x40, 0x06, 0x39, 0x39, 0x39, 0x39, 0x4e, - 0x1b, 0x00, 0xf3, 0x1d, 0x00, 0x00, 0x3c, 0x6d, 0xdc, 0x30, 0x6a, 0xeb, 0x06, 0x88, 0x13, 0x5f, 0xaf, 0x6f, 0x2f, 0xa9, 0x75, 0x10, 0x16, 0x80, - 0x7f, 0x5a, 0x18, 0x53, 0x62, 0x53, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xfc, 0xbc, 0xe8, 0x62, 0xb8, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x11, 0x04, - 0x3e, 0x28, 0x15, 0x43, 0xc5, 0x06, 0x48, 0x13, 0x10, 0x17, 0x34, 0xff, 0x3a, 0x13, 0x13, 0x20, 0x01, 0x3a, 0x40, 0x06, 0x00, 0x3a, 0x3a, 0x3a, - 0x3a, 0xf7, 0x1c, 0x78, 0x16, 0x04, 0x00, 0x00, 0x3d, 0x6d, 0xd6, 0x28, 0x17, 0xc9, 0x30, 0x51, 0xa5, 0x06, 0x88, 0x1d, 0x42, 0x28, 0x13, 0x72, - 0x00, 0x64, 0x40, 0x05, 0x80, 0x10, 0x16, 0x30, 0x7f, 0x03, 0x5e, 0x14, 0x5c, 0x5c, 0x67, 0x14, 0x40, 0x5c, 0x06, 0x78, 0x1b, 0x80, 0xbd, 0x74, - 0xb9, 0x50, 0xb4, 0x34, 0x74, 0xb9, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x11, 0x28, 0x13, 0x40, 0x04, 0x62, 0x34, 0x40, 0x05, 0x10, 0x1e, 0x34, - 0xff, 0x3b, 0x14, 0x14, 0x20, 0x01, 0x3b, 0x80, 0x40, 0x06, 0x3b, 0x3b, 0x3b, 0x3b, 0xd2, 0x1a, 0x8a, 0x00, 0x15, 0x00, 0x00, 0x3e, 0x6d, 0xc1, - 0x30, 0xe3, 0x00, 0x30, 0xca, 0x30, 0xc3, 0x30, 0xab, 0x30, 0xec, 0x82, 0x06, 0x48, 0x19, 0xc7, 0x00, 0x61, 0x00, 0x6e, 0x20, 0x03, 0x6b, 0xa8, - 0x20, 0x01, 0x61, 0x2f, 0xb9, 0x65, 0x10, 0x15, 0xe0, 0x7f, 0x70, 0x60, 0xb3, 0x04, 0x7e, 0x61, 0x53, 0xb1, 0x83, 0x06, 0x78, 0x17, 0x28, 0xcc, - 0x03, 0x98, 0xb0, 0x7c, 0xce, 0x08, 0xb8, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x05, 0x27, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x3a, 0x20, 0x01, - 0x06, 0x30, 0x04, 0x3b, 0x04, 0x35, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x3c, 0x2a, 0x16, 0x16, 0x20, 0x01, 0x3c, 0x20, 0x06, 0x45, 0x20, - 0x05, 0x3c, 0x00, 0x3c, 0x8d, 0x1c, 0xc5, 0x12, 0x00, 0x00, 0x3f, 0x00, 0x6d, 0xc7, 0x30, 0xe5, 0x30, 0xba, 0x30, 0xb8, 0x20, 0x30, 0xa7, 0x06, - 0x48, 0x15, 0x00, 0x00, 0x44, 0x00, 0xfc, 0x0c, 0x00, 0x7a, 0x00, 0x63, 0x06, 0x08, 0x0f, 0x10, 0x0f, 0x70, 0x7f, 0xea, 0x8f, 0x08, 0x79, 0x51, - 0x70, 0x67, 0x06, 0x78, 0x15, 0x00, 0x00, 0xa4, 0x06, 0xb4, 0x88, 0xc9, 0x1c, 0xc8, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x14, 0x00, 0x04, 0x4e, - 0x04, 0x37, 0x04, 0x34, 0x04, 0x36, 0xc5, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x3d, 0x1b, 0x1b, 0x20, 0x01, 0x3d, 0x20, 0x06, 0x40, 0x1c, - 0x20, 0x05, 0x3d, 0x3d, 0x09, 0x1d, 0x26, 0x16, 0x00, 0x00, 0x00, 0x40, 0x6d, 0xa8, 0x30, 0xb9, 0x30, 0x11, 0xad, 0x30, 0xb7, 0x28, 0x17, 0xd2, - 0x30, 0xeb, 0x06, 0x28, 0x1b, 0x10, 0x45, 0x00, 0x73, 0x2f, 0xab, 0x69, 0x00, 0x5f, 0x01, 0x14, 0x65, 0x00, 0x68, 0x20, 0x07, 0x72, 0x10, 0x15, - 0xe0, 0x7f, 0xc3, 0x57, 0x00, 0xaf, 0x65, 0xfa, 0x57, 0x22, 0x8c, 0x0c, 0x5e, 0x20, 0x14, 0x5c, 0x06, 0x38, 0x1d, 0xd0, 0xc5, 0xa4, 0xc2, 0xa4, - 0x01, 0xd0, 0x70, 0xc1, 0x88, 0xd7, 0x74, 0xb9, 0x06, 0x38, 0x1d, 0x80, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x41, 0x04, 0x3a, 0x04, 0x38, 0x2b, 0x04, - 0x48, 0x28, 0x17, 0x45, 0x20, 0x07, 0x40, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x3e, 0x20, 0x20, 0x20, 0x01, 0x3e, 0x20, 0x06, 0x50, - 0x20, 0x05, 0x00, 0x3e, 0x3e, 0x49, 0x1c, 0xb4, 0x15, 0x00, 0x00, 0x05, 0x41, 0x6d, 0xae, 0x30, 0xec, 0x28, 0x19, 0xf3, 0x06, 0x28, 0x11, 0xa8, - 0x5f, 0xff, 0x47, 0x48, 0x0b, 0x65, 0x28, 0x1d, 0x75, 0x00, 0x6e, 0x81, 0x10, 0x16, 0x20, 0x7f, 0x09, 0x54, 0xf7, 0x96, 0x7e, 0x67, 0x06, 0x38, - 0x11, 0x81, 0x5f, 0xff, 0x30, 0xae, 0x08, 0xb8, 0x1c, 0xc2, 0x06, 0x38, 0x11, 0xa8, 0x0f, 0x53, 0x7f, 0x13, 0x48, 0x0b, 0x35, 0x28, 0x1d, 0x43, - 0x04, 0x3d, 0xc0, 0x05, 0xe8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x3f, 0x22, 0x22, 0x22, 0x22, 0x23, 0x40, 0x3f, 0x20, 0x06, 0x18, 0x22, 0x3f, 0x3f, - 0x3f, 0x3f, 0x01, 0x15, 0x1d, 0x51, 0x1b, 0x00, 0x00, 0x42, 0x28, 0x17, 0x14, 0xe5, 0x30, 0xdf, 0x20, 0x03, 0xb7, 0x20, 0x07, 0xcf, 0x30, 0x10, - 0xfc, 0x30, 0xcd, 0x05, 0xe8, 0x21, 0x47, 0x00, 0xfc, 0x00, 0x41, 0x6d, 0x20, 0x03, 0x5f, 0x01, 0x68, 0x00, 0x61, 0x28, 0x19, 0x60, 0x65, 0x06, - 0x08, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0x45, 0x5c, 0x73, 0x7c, 0xc0, 0x04, 0x4e, 0xc8, 0x54, 0x85, 0x51, 0x06, 0x58, 0x1b, 0xc0, 0xad, 0x03, 0x88, - 0xbb, 0xe4, 0xc0, 0x24, 0xb1, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x04, 0x13, 0x04, 0x4e, 0x04, 0x3c, 0x20, 0x03, 0x48, 0x04, 0x16, 0x45, 0x04, - 0x30, 0x28, 0x19, 0x35, 0x05, 0xe8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x40, 0x02, 0x23, 0x23, 0x23, 0x23, 0x24, 0x40, 0x20, 0x06, 0x19, 0x00, 0x23, - 0x40, 0x40, 0x40, 0x40, 0xc5, 0x1c, 0x13, 0x00, 0x1c, 0x00, 0x00, 0x43, 0x6d, 0xcf, 0x30, 0xc3, 0x03, 0x30, 0xad, 0x30, 0xe3, 0x30, 0xea, 0x05, - 0xe8, 0x0f, 0x7f, 0xff, 0x55, 0x48, 0x28, 0x0d, 0x6b, 0x20, 0x01, 0x61, 0x2f, 0xb5, 0x69, 0x0e, 0xa0, 0x7f, 0x60, 0xe2, 0x0e, 0xe0, 0x7f, 0x06, - 0x71, 0xff, 0xc8, 0x54, 0x61, 0x53, 0xcc, 0x60, 0x91, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x58, 0xd5, 0x74, 0xce, 0xac, 0x6a, 0xb9, 0x06, 0x78, 0x15, - 0x0f, 0x11, 0xff, 0x25, 0x28, 0x0d, 0x3a, 0x20, 0x01, 0x4f, 0x0e, 0x04, 0x40, 0x04, 0x38, 0x05, 0xe8, 0x13, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x70, - 0xff, 0x41, 0x02, 0x24, 0x24, 0x24, 0x24, 0x25, 0x41, 0x20, 0x06, 0x43, 0x00, 0x24, 0x41, 0x41, 0x41, 0x41, 0xb9, 0x1a, 0x19, 0x00, 0x1f, 0x00, - 0x00, 0x44, 0x6d, 0xa6, 0x30, 0xfc, 0x02, 0x30, 0xc9, 0x30, 0xa5, 0x30, 0xeb, 0x06, 0x68, 0x17, 0x49, 0x00, 0x00, 0x1f, 0x01, 0x64, 0x00, 0x31, - 0x01, 0x72, 0xc0, 0x06, 0x65, 0x98, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x4f, 0xea, 0x8f, 0x14, 0x5c, 0x83, 0x06, 0x98, 0x17, 0x74, 0xc7, 0x14, 0xb5, - 0x74, 0x06, 0xa8, 0x17, 0x0e, 0xf3, 0x7f, 0x01, 0x2b, 0x04, 0x33, 0x04, 0x34, 0x04, 0x4b, 0x28, 0x15, 0xc0, 0x10, 0x16, 0x54, 0x7f, 0x06, 0xf6, - 0xff, 0x42, 0x26, 0x26, 0x26, 0x26, 0x27, 0x40, 0x42, 0x20, 0x06, 0x4a, 0x26, 0x42, 0x42, 0x42, 0x42, 0x10, 0x62, 0x1c, 0x50, 0x28, 0x17, 0x45, - 0x6d, 0xab, 0x30, 0x00, 0xe9, 0x30, 0xd3, 0x30, 0xe5, 0x30, 0xc3, 0x30, 0x50, 0xaf, 0x06, 0x48, 0x19, 0x4b, 0x4f, 0xa9, 0x61, 0x00, 0x62, 0x00, - 0x60, 0xfc, 0x2f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x61, 0x53, 0xc9, 0x62, 0xd4, 0x10, 0x6b, 0x4b, 0x51, 0x06, 0x78, 0x19, 0x74, 0xce, 0x7c, 0xb7, - 0x0c, 0xd4, 0xbd, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x40, 0x30, 0x28, 0x13, 0x30, 0x04, 0x31, 0x04, 0x4e, 0x04, 0x60, - 0x3a, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x43, 0x2b, 0x2b, 0x2b, 0x2a, 0x28, 0x2b, 0x43, 0x20, 0x06, 0x21, 0x20, 0x05, 0x43, 0x43, 0x4c, - 0x02, 0x1d, 0x34, 0x17, 0x00, 0x00, 0x46, 0x28, 0x17, 0xeb, 0x36, 0x30, 0xb9, 0x06, 0x48, 0x11, 0xb8, 0x17, 0x73, 0x06, 0x7d, 0xae, 0x10, 0x0f, - 0x00, 0x7f, 0x61, 0x06, 0x53, 0x14, 0x5c, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x38, 0x17, 0x74, 0x1d, 0xb9, 0xa4, 0xc2, 0x06, 0x78, 0x15, 0x0f, 0x13, - 0x7f, 0x58, 0x17, 0x41, 0x06, 0x28, 0x11, 0x80, 0x10, 0x17, 0x54, 0xff, 0x44, 0x2d, 0x2d, 0x2d, 0x2c, 0x2d, 0x44, 0xa0, 0x20, 0x06, 0x23, 0x20, - 0x05, 0x44, 0x44, 0xe2, 0x1c, 0xa6, 0x08, 0x1e, 0x00, 0x00, 0x47, 0x28, 0x17, 0xb9, 0x30, 0xbf, 0x0c, 0x30, 0xe2, 0x30, 0xcc, 0x06, 0x68, 0x1b, - 0x3f, 0xaf, 0x73, 0x00, 0x40, 0x74, 0x2f, 0xb5, 0x6d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x40, 0x75, 0x10, 0x15, 0xe0, 0x7f, 0x61, 0x53, 0xaf, 0x65, - 0x54, 0x58, 0x08, 0xab, 0x83, 0xaa, 0x52, 0x06, 0x58, 0x1b, 0x74, 0xce, 0xa4, 0x01, 0xc2, 0xc0, 0xd0, 0xa8, 0xba, 0x04, 0xb2, 0x06, 0x58, 0x1b, - 0xc4, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x41, 0x04, 0x42, 0x28, 0x1d, 0x3c, 0x04, 0x06, 0x3e, 0x04, 0x3d, 0x04, 0x43, 0x05, 0xe8, 0x21, 0x10, 0x16, - 0xf4, 0xff, 0x45, 0x02, 0x2e, 0x2e, 0x2e, 0x2d, 0x2e, 0x45, 0x20, 0x06, 0x24, 0x80, 0x20, 0x05, 0x45, 0x45, 0x6b, 0x1d, 0x03, 0x18, 0x00, 0x03, - 0x00, 0x48, 0x6d, 0xad, 0x30, 0xea, 0x28, 0x19, 0x06, 0x58, 0x13, 0x8e, 0x5f, 0xaf, 0x69, 0x00, 0x6c, 0x20, 0x03, 0x06, 0x7f, 0xb1, 0x10, 0x0e, - 0xf0, 0x7f, 0xfa, 0x06, 0x57, 0x29, 0x52, 0xaf, 0x65, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xac, 0x06, 0xd0, 0xac, 0xb9, 0xa4, 0xc2, 0x06, 0x58, 0x13, - 0x0f, 0x33, 0x7f, 0x1a, 0x0b, 0x04, 0x38, 0x04, 0x3b, 0x20, 0x03, 0x41, 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x01, 0x46, 0x30, 0x30, 0x30, - 0x2f, 0x30, 0x46, 0x20, 0x06, 0x40, 0x26, 0x20, 0x05, 0x46, 0x46, 0x1b, 0x1a, 0x64, 0x1a, 0x00, 0x00, 0x00, 0x49, 0x6d, 0xaf, 0x30, 0xeb, 0x30, - 0x01, 0xaf, 0x30, 0xe9, 0x30, 0xfc, 0x30, 0xec, 0x28, 0x21, 0x80, 0x06, 0x18, 0x1f, 0x4b, 0x00, 0x31, 0x01, 0x72, 0x00, 0x6b, 0x83, 0x28, 0x1b, - 0x61, 0x00, 0x72, 0x00, 0x65, 0x48, 0x23, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0xef, 0x67, 0x4b, 0x51, 0xc9, 0x62, 0xf7, 0x96, 0x20, 0x29, 0x52, 0x06, - 0x58, 0x1b, 0xa4, 0xd0, 0x74, 0xb9, 0x74, 0x01, 0xd0, 0x7c, 0xb7, 0x10, 0xb8, 0xac, 0xb9, 0x06, 0x38, 0x1d, 0x80, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, - 0x4b, 0x04, 0x40, 0x04, 0x3a, 0xac, 0x28, 0x1b, 0x30, 0x20, 0x07, 0x35, 0x48, 0x23, 0x10, 0x1d, 0xb4, 0xff, 0x47, 0x32, 0x05, 0x32, 0x32, 0x31, - 0x32, 0x47, 0x20, 0x06, 0x29, 0x20, 0x05, 0x00, 0x47, 0x47, 0xad, 0x1d, 0x5a, 0x13, 0x00, 0x00, 0x41, 0x4a, 0x48, 0x17, 0xb7, 0x30, 0xa7, 0x30, - 0xd2, 0x28, 0x1f, 0xc1, 0x06, 0x18, 0x15, 0x78, 0x17, 0x5f, 0x01, 0x65, 0x00, 0x68, 0x2f, 0xb9, 0x40, 0x72, 0x10, 0x16, 0x10, 0x7f, 0x51, 0x14, - 0x5c, 0x22, 0x8c, 0x0c, 0x10, 0x5e, 0x14, 0x5c, 0x06, 0x98, 0x17, 0x70, 0xc1, 0x88, 0xd7, 0x75, 0x74, 0x06, 0x48, 0x15, 0x0f, 0x13, 0x7f, 0x58, - 0x17, 0x48, 0x28, 0x11, 0x45, 0x28, 0x11, 0x60, 0x40, 0x05, 0xc8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x48, 0x33, 0x33, 0x33, 0x32, 0x28, 0x33, 0x48, - 0x20, 0x06, 0x2a, 0x20, 0x05, 0x48, 0x48, 0xd7, 0x10, 0x1b, 0x4b, 0x18, 0x2f, 0xad, 0x6d, 0xe0, 0x30, 0xfc, 0x30, 0x30, 0xe9, 0x06, 0x48, 0x11, - 0x5f, 0xff, 0x4d, 0x00, 0x75, 0x00, 0x30, 0x1f, 0x01, 0x3f, 0xad, 0x10, 0x16, 0x50, 0x7f, 0x46, 0x7a, 0xc9, 0x62, 0xc3, 0x06, 0x58, 0x11, 0x5f, - 0xff, 0x3c, 0xbb, 0x7c, 0xb7, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x00, 0x1c, 0x04, 0x43, 0x04, 0x33, 0x04, 0x3b, 0x04, 0x60, 0x30, 0x06, 0x08, - 0x11, 0x10, 0x17, 0x54, 0xff, 0x49, 0x3b, 0x3b, 0x3b, 0x3a, 0x28, 0x3b, 0x49, 0x20, 0x06, 0x31, 0x20, 0x05, 0x49, 0x49, 0x76, 0x02, 0x1a, 0x2b, - 0x14, 0x00, 0x00, 0x4c, 0x28, 0x17, 0xb7, 0x26, 0x30, 0xe5, 0x06, 0xe8, 0x17, 0x5f, 0x01, 0x06, 0x95, 0x97, 0x10, 0x0e, 0xf0, 0x7f, 0x46, 0x10, - 0x7a, 0xc0, 0x4e, 0x06, 0xb8, 0x17, 0x34, 0xbb, 0x88, 0xc2, 0xec, 0x06, 0xf8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x48, 0x06, 0x68, 0x13, 0x10, - 0x17, 0x34, 0xff, 0x4a, 0x3c, 0x05, 0x3c, 0x3c, 0x3b, 0x3c, 0x4a, 0x20, 0x06, 0x32, 0x20, 0x05, 0x02, 0x4a, 0x4a, 0x8e, 0x1b, 0x82, 0x1d, 0x2f, - 0xad, 0x6d, 0x10, 0xcd, 0x30, 0xf4, 0x28, 0x19, 0xa7, 0x30, 0xd2, 0x30, 0x41, 0xeb, 0x06, 0x48, 0x1d, 0x4e, 0x00, 0x65, 0x00, 0x76, 0x28, 0x19, - 0x01, 0x65, 0x00, 0x68, 0x00, 0x69, 0x00, 0x72, 0x10, 0x16, 0x00, 0x7f, 0x00, 0x85, 0x51, 0x2b, 0x59, 0x22, 0x8c, 0x0c, 0x5e, 0x20, 0x14, 0x5c, - 0x06, 0x58, 0x1d, 0x24, 0xb1, 0x0c, 0xbe, 0x70, 0x06, 0xc1, 0x88, 0xd7, 0x74, 0xb9, 0x06, 0x58, 0x1d, 0x0e, 0xf3, 0x7f, 0x1d, 0x08, 0x04, 0x35, - 0x04, 0x32, 0x28, 0x19, 0x35, 0x04, 0x45, 0x0c, 0x04, 0x38, 0x04, 0x40, 0x06, 0x08, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x4b, 0x3d, 0x05, 0x3d, 0x3d, - 0x3c, 0x3d, 0x4b, 0x20, 0x06, 0x33, 0x20, 0x05, 0x02, 0x4b, 0x4b, 0x77, 0x1b, 0xaf, 0x18, 0x27, 0x95, 0x6d, 0x06, 0xcb, 0x30, 0xfc, 0x30, 0xc7, - 0x06, 0x48, 0x11, 0x78, 0x17, 0x69, 0x0c, 0x00, 0x1f, 0x01, 0x64, 0x28, 0x1d, 0x10, 0x16, 0x50, 0x7f, 0x3c, 0x5c, 0x30, 0xe3, 0x4e, 0x06, 0x58, - 0x11, 0x5f, 0xff, 0xc8, 0xb2, 0x70, 0xb3, 0xd1, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x1d, 0x28, 0x0d, 0x33, 0x04, 0x34, 0x28, 0x1d, 0x80, 0x10, - 0x1e, 0x54, 0xff, 0x4c, 0x3e, 0x3e, 0x3e, 0x3d, 0x3e, 0x4c, 0xa0, 0x20, 0x06, 0x34, 0x20, 0x05, 0x4c, 0x4c, 0xff, 0x1a, 0xa9, 0x82, 0x28, 0x17, - 0x4f, 0x6d, 0xea, 0x30, 0xbc, 0x06, 0xa8, 0x15, 0x00, 0x2c, 0x00, 0x52, 0x2f, 0xa5, 0x7a, 0x06, 0x88, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0xcc, 0x91, - 0x21, 0xfd, 0x6c, 0x06, 0xb8, 0x17, 0xac, 0xb9, 0x1c, 0xc8, 0x06, 0xb8, 0x17, 0xac, 0x0e, 0xf3, 0x7f, 0x20, 0x28, 0x17, 0x37, 0x06, 0x88, 0x15, - 0x10, 0x17, 0x14, 0xff, 0x4d, 0x41, 0x05, 0x41, 0x41, 0x40, 0x41, 0x4d, 0x20, 0x06, 0x37, 0x20, 0x05, 0x00, 0x4d, 0x4d, 0x2a, 0x1d, 0xcf, 0x1c, - 0x00, 0x00, 0x01, 0x50, 0x6d, 0xb7, 0x30, 0xce, 0x30, 0xd7, 0x06, 0xa8, 0x19, 0x41, 0x53, 0x2f, 0xaf, 0x6e, 0x00, 0x6f, 0x00, 0x70, 0x10, 0x07, - 0x00, 0x7f, 0xc0, 0x06, 0x5f, 0xb1, 0x06, 0xf1, 0xff, 0x21, 0x95, 0xfa, 0x8b, 0x6e, 0x66, 0x81, 0x06, 0x98, 0x19, 0xdc, 0xc2, 0x78, 0xb1, 0x04, - 0xd5, 0x06, 0x98, 0x19, 0xa0, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x17, 0x3d, 0x04, 0x3e, 0x04, 0x3f, 0xe0, 0x06, 0x68, 0x19, 0x10, 0x07, 0x94, 0xff, - 0x0e, 0x56, 0xff, 0x4e, 0x46, 0x46, 0x46, 0x45, 0x28, 0x46, 0x4e, 0x20, 0x06, 0x3c, 0x20, 0x05, 0x4e, 0x4e, 0xe3, 0x02, 0x1d, 0xfe, 0x18, 0x00, - 0x00, 0x51, 0x28, 0x17, 0xe5, 0x02, 0x30, 0xeb, 0x30, 0xca, 0x30, 0xaf, 0x06, 0x68, 0x1b, 0x5e, 0x08, 0x01, 0x31, 0x01, 0x72, 0x28, 0x19, 0x61, - 0x00, 0x6b, 0xc0, 0x06, 0x4f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x21, 0x95, 0x14, 0x5c, 0xb3, 0x7e, 0x20, 0x4b, 0x51, 0x06, 0x78, 0x19, 0xdc, 0xc2, - 0x74, 0xb9, 0x98, 0x1a, 0xb0, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x28, 0x28, 0x17, 0x40, 0x8c, 0x28, 0x19, 0x30, 0x04, 0x3a, 0x06, - 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x4f, 0x47, 0x05, 0x47, 0x47, 0x46, 0x47, 0x4f, 0x20, 0x06, 0x49, 0x20, 0x05, 0x00, 0x4f, 0x4f, 0xad, 0x1a, - 0x31, 0x1e, 0x00, 0x00, 0x00, 0x52, 0x6d, 0xc8, 0x30, 0xa5, 0x30, 0xf3, 0x30, 0x04, 0xb8, 0x30, 0xa7, 0x30, 0xea, 0x06, 0x48, 0x19, 0x54, 0x00, - 0x56, 0x75, 0x2f, 0xaf, 0x63, 0x2e, 0xad, 0x6c, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, 0x1a, 0x04, 0x90, 0x70, 0x67, 0x29, 0x52, 0x06, 0x78, 0x15, - 0x00, 0x00, 0x03, 0x30, 0xd2, 0x24, 0xc8, 0xac, 0xb9, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x10, 0x22, 0x04, 0x43, 0x28, 0x15, 0x34, 0x04, 0x36, - 0x04, 0x18, 0x35, 0x04, 0x3b, 0x28, 0x23, 0x10, 0x1d, 0xf4, 0xff, 0x50, 0x4c, 0x4c, 0xa8, 0x20, 0x01, 0x50, 0x20, 0x06, 0x41, 0x20, 0x05, 0x50, - 0x50, 0xd0, 0x00, 0x1b, 0x1f, 0x1c, 0x00, 0x00, 0x53, 0x6d, 0xe4, 0x0d, 0x30, 0xed, 0x30, 0xef, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x59, 0x2f, 0xa9, - 0x06, 0x6c, 0x00, 0x6f, 0x00, 0x76, 0x2f, 0xb1, 0x10, 0x16, 0x30, 0x7f, 0x9a, 0x04, 0x4e, 0x57, 0x7f, 0xd5, 0x6c, 0x06, 0x98, 0x17, 0x84, 0xc5, - 0x0d, 0x5c, 0xb8, 0x14, 0xbc, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x2f, 0x28, 0x0d, 0x06, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x06, 0x08, 0x11, 0x10, - 0x17, 0x54, 0xff, 0x51, 0x2a, 0x4f, 0x4f, 0x20, 0x01, 0x51, 0x20, 0x06, 0x51, 0x20, 0x05, 0x51, 0x04, 0x51, 0xe8, 0x1c, 0xcf, 0x14, 0x00, 0x3f, - 0xff, 0x01, 0x07, 0x06, 0x07, 0x07, 0x08, 0x07, 0x01, 0x30, 0x06, 0x20, 0x05, 0x01, 0x00, 0x01, 0x02, 0x28, 0x28, 0x28, 0x28, 0x21, 0x02, 0x80, - 0x20, 0x06, 0x3d, 0x28, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x29, 0x29, 0x29, 0x48, 0x29, 0x03, 0x20, 0x06, 0x1e, 0x82, 0x20, 0x05, 0x03, 0x03, - 0x04, 0x15, 0x15, 0x20, 0x01, 0x04, 0x82, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x30, 0x33, 0x01, 0x60, 0x05, 0x20, 0x06, 0x30, 0x05, 0x05, - 0x05, 0x06, 0x21, 0x21, 0x08, 0x21, 0x21, 0x22, 0x06, 0x20, 0x06, 0x17, 0x21, 0x06, 0x00, 0x06, 0x06, 0x06, 0x07, 0x35, 0x35, 0x35, 0x34, 0x2c, - 0x35, 0x07, 0x20, 0x06, 0x28, 0x20, 0x05, 0x20, 0x6b, 0x08, 0x08, 0x31, 0x08, 0x01, 0x30, 0x04, 0x60, 0x03, 0x09, 0x1a, 0x1a, 0x20, 0x01, 0x50, - 0x09, 0x20, 0x06, 0x1b, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x3a, 0x05, 0x3a, 0x3a, 0x39, 0x3a, 0x0a, 0x20, 0x06, 0x30, 0x20, 0x05, 0x00, 0x0a, 0x0a, - 0x0b, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x50, 0x0b, 0x20, 0x06, 0x20, 0x20, 0x05, 0x0b, 0x0b, 0x0c, 0x44, 0x05, 0x44, 0x44, 0x43, 0x44, 0x0c, 0x20, - 0x06, 0x48, 0x20, 0x05, 0x00, 0x0c, 0x0c, 0x0d, 0x37, 0x37, 0x37, 0x36, 0x37, 0x50, 0x0d, 0x20, 0x06, 0x2d, 0x20, 0x05, 0x0d, 0x0d, 0x0e, 0x1f, - 0x54, 0x1f, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x4f, 0x20, 0x05, 0x0e, 0x0e, 0x01, 0x0f, 0x43, 0x43, 0x43, 0x42, 0x43, 0x0f, 0x20, 0x06, 0x41, 0x39, - 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x4e, 0x4e, 0x20, 0x01, 0x50, 0x10, 0x20, 0x06, 0x16, 0x20, 0x05, 0x10, 0x10, 0x11, 0x2a, 0x05, 0x2a, 0x2a, 0x29, - 0x2a, 0x11, 0x20, 0x06, 0x25, 0x20, 0x05, 0x05, 0x11, 0x11, 0x12, 0x19, 0x19, 0x20, 0x01, 0x12, 0x20, 0x06, 0x44, 0x1a, 0x20, 0x05, 0x12, 0x12, - 0x13, 0x30, 0x44, 0x0e, 0x13, 0xa0, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x13, 0x13, 0x14, 0x1d, 0x1d, 0xa8, 0x20, 0x01, 0x14, 0x20, 0x06, 0x4d, 0x20, - 0x05, 0x14, 0x14, 0x15, 0x02, 0x42, 0x42, 0x42, 0x41, 0x42, 0x15, 0x20, 0x06, 0x38, 0x80, 0x20, 0x05, 0x15, 0x15, 0x16, 0x34, 0x34, 0x34, 0x33, - 0x28, 0x34, 0x16, 0x20, 0x06, 0x27, 0x20, 0x05, 0x16, 0x16, 0x17, 0x02, 0x48, 0x48, 0x48, 0x47, 0x48, 0x17, 0x20, 0x06, 0x3a, 0x80, 0x20, 0x05, - 0x17, 0x17, 0x18, 0x38, 0x38, 0x38, 0x37, 0x28, 0x38, 0x18, 0x20, 0x06, 0x2e, 0x20, 0x05, 0x18, 0x18, 0x19, 0x2b, 0x4b, 0x4b, 0x20, 0x01, 0x19, - 0x20, 0x06, 0x40, 0x20, 0x05, 0x20, 0x75, 0x97, 0x30, 0xd4, 0x0c, 0x1a, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x21, 0x15, 0x31, 0x83, 0x30, 0x02, 0x1b, - 0x20, 0x06, 0x30, 0x05, 0x1b, 0x1b, 0x1c, 0x49, 0x54, 0x49, 0x20, 0x01, 0x1c, 0x20, 0x06, 0x3e, 0x20, 0x05, 0x1c, 0x1c, 0x01, 0x1d, 0x31, 0x31, - 0x31, 0x30, 0x31, 0x1d, 0x20, 0x06, 0x40, 0x2b, 0x20, 0x05, 0x1d, 0x1d, 0x1e, 0x40, 0x40, 0x40, 0x14, 0x3f, 0x40, 0x1e, 0x20, 0x06, 0x36, 0x20, - 0x05, 0x1e, 0x1e, 0x01, 0x1f, 0x36, 0x36, 0x36, 0x35, 0x36, 0x1f, 0x20, 0x06, 0x44, 0x2c, 0x20, 0x05, 0x1f, 0x1f, 0x20, 0x30, 0x74, 0x18, 0x20, - 0xa0, 0x20, 0x06, 0x47, 0x20, 0x05, 0x20, 0x20, 0x21, 0x27, 0x27, 0x09, 0x27, 0x27, 0x28, 0x21, 0x20, 0x06, 0x4b, 0x27, 0x41, 0xba, 0x94, 0x31, - 0x64, 0x0b, 0x22, 0x20, 0x06, 0x04, 0x20, 0x05, 0x22, 0x22, 0x01, 0x23, 0x25, 0x25, 0x25, 0x25, 0x26, 0x23, 0x20, 0x06, 0x00, 0x44, 0x25, 0x23, - 0x23, 0x23, 0x23, 0x24, 0x39, 0x05, 0x39, 0x39, 0x38, 0x39, 0x24, 0x20, 0x06, 0x2f, 0x20, 0x05, 0x13, 0x24, 0x24, 0x25, 0x31, 0xf3, 0x05, 0x25, - 0x30, 0x06, 0x20, 0x05, 0xca, 0x20, 0x2a, 0x32, 0x23, 0x03, 0x26, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x26, 0x0a, 0x26, 0x27, 0x4a, 0x4a, 0x20, 0x01, - 0x27, 0x20, 0x06, 0x3f, 0xe5, 0x20, 0x05, 0x20, 0x6a, 0x30, 0xb4, 0x1c, 0x28, 0x20, 0x06, 0x4c, 0x20, 0x05, 0x00, 0x28, 0x28, 0x29, 0x2c, 0x2c, - 0x2c, 0x2b, 0x2c, 0x50, 0x29, 0x20, 0x06, 0x22, 0x20, 0x05, 0x29, 0x29, 0x2a, 0x3f, 0x05, 0x3f, 0x3f, 0x3e, 0x3f, 0x2a, 0x20, 0x06, 0x35, 0x20, - 0x05, 0x00, 0x2a, 0x2a, 0x2b, 0x45, 0x45, 0x45, 0x44, 0x45, 0x51, 0x2b, 0x20, 0x06, 0x3b, 0x20, 0x05, 0x2b, 0x2b, 0x2c, 0x30, 0xd4, 0x28, 0x1e, - 0x2c, 0x20, 0x06, 0x4e, 0x20, 0x05, 0x2c, 0x2c, 0x2d, 0x94, 0x31, 0x54, 0x17, 0x2d, 0x20, 0x06, 0x46, 0x20, 0x05, 0x2d, 0x2d, 0x4a, 0x2e, 0x32, - 0xec, 0x51, 0x2e, 0x20, 0x06, 0x1d, 0x20, 0x05, 0x2e, 0x25, 0x2e, 0x2f, 0x3b, 0x14, 0x50, 0x2f, 0x20, 0x06, 0x1f, 0x20, 0x05, 0x05, 0x2f, 0x2f, - 0x30, 0x4d, 0x4d, 0x20, 0x01, 0x30, 0x20, 0x06, 0x44, 0x42, 0x20, 0x05, 0x30, 0x30, 0x31, 0x32, 0xc3, 0x04, 0x31, 0xa2, 0x20, 0x06, 0x01, 0x20, - 0x05, 0x31, 0x31, 0x32, 0x32, 0xb3, 0x06, 0x62, 0x32, 0x30, 0x06, 0x20, 0x05, 0x32, 0x32, 0x33, 0x32, 0x94, 0x09, 0x41, 0x33, 0x40, 0x06, 0x33, - 0x33, 0x33, 0x33, 0x34, 0x32, 0x94, 0x32, 0x0a, 0x34, 0x40, 0x06, 0x21, 0xea, 0x34, 0x35, 0x32, 0x74, 0x0d, 0x51, 0x35, 0x20, 0x06, 0x0e, 0x20, - 0x05, 0x35, 0x35, 0x36, 0x32, 0x64, 0x28, 0x0f, 0x36, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x36, 0x36, 0x37, 0x99, 0x32, 0x64, 0x10, 0x37, 0x40, 0x06, - 0x22, 0xaa, 0x37, 0x38, 0x32, 0x64, 0x32, 0x11, 0x38, 0x40, 0x06, 0x22, 0x0a, 0x38, 0x39, 0x32, 0x64, 0x12, 0x64, 0x39, 0x40, 0x06, 0x21, 0x5a, - 0x39, 0x3a, 0x32, 0x64, 0x13, 0x3a, 0xc9, 0x40, 0x06, 0x23, 0x0a, 0x3a, 0x3b, 0x32, 0x64, 0x14, 0x3b, 0x40, 0x06, 0x04, 0x3b, 0x3b, 0x3b, 0x3b, - 0x3c, 0x32, 0x54, 0x16, 0x3c, 0xa2, 0x20, 0x06, 0x45, 0x20, 0x05, 0x3c, 0x3c, 0x3d, 0x32, 0x14, 0x1b, 0x51, 0x3d, 0x20, 0x06, 0x1c, 0x20, 0x05, - 0x3d, 0x3d, 0x3e, 0x31, 0xd4, 0x28, 0x20, 0x3e, 0x20, 0x06, 0x50, 0x20, 0x05, 0x3e, 0x3e, 0x3f, 0xa4, 0x41, 0xc4, 0x3f, 0x20, 0x06, 0x18, 0x22, - 0x21, 0x5a, 0x3f, 0x40, 0xa4, 0x41, 0xc4, 0x40, 0x20, 0x06, 0x19, 0x23, 0x22, 0x2a, 0x40, 0x41, 0xa0, 0x41, 0xc4, 0x41, 0x20, 0x06, 0x43, 0x24, - 0x41, 0x41, 0x41, 0x29, 0x41, 0x42, 0x41, 0xb4, 0x42, 0x20, 0x06, 0x4a, 0x26, 0x22, 0xda, 0x22, 0x42, 0x43, 0x21, 0x74, 0x2a, 0x2b, 0x43, 0x20, - 0x06, 0x21, 0x88, 0x20, 0x05, 0x43, 0x43, 0x44, 0x21, 0x64, 0x2c, 0x2d, 0x44, 0xa2, 0x20, 0x06, 0x23, 0x20, 0x05, 0x44, 0x44, 0x45, 0x21, 0x64, - 0x2d, 0x28, 0x2e, 0x45, 0x20, 0x06, 0x24, 0x20, 0x05, 0x45, 0x45, 0x46, 0x8a, 0x21, 0x54, 0x2f, 0x30, 0x46, 0x20, 0x06, 0x26, 0x20, 0x05, 0x46, - 0x22, 0x46, 0x47, 0x21, 0x44, 0x31, 0x32, 0x47, 0x20, 0x06, 0x29, 0x88, 0x20, 0x05, 0x47, 0x47, 0x48, 0x21, 0x44, 0x32, 0x33, 0x48, 0xa2, 0x20, - 0x06, 0x2a, 0x20, 0x05, 0x48, 0x48, 0x49, 0x20, 0xd4, 0x3a, 0x28, 0x3b, 0x49, 0x20, 0x06, 0x31, 0x20, 0x05, 0x49, 0x49, 0x4a, 0x8a, 0x20, 0xd4, - 0x3b, 0x3c, 0x4a, 0x20, 0x06, 0x32, 0x20, 0x05, 0x4a, 0x22, 0x4a, 0x4b, 0x20, 0xd4, 0x3c, 0x3d, 0x4b, 0x20, 0x06, 0x33, 0x88, 0x20, 0x05, 0x4b, - 0x4b, 0x4c, 0x20, 0xd4, 0x3d, 0x3e, 0x4c, 0xa2, 0x20, 0x06, 0x34, 0x20, 0x05, 0x4c, 0x4c, 0x4d, 0x20, 0xb4, 0x40, 0x28, 0x41, 0x4d, 0x20, 0x06, - 0x37, 0x20, 0x05, 0x4d, 0x4d, 0x4e, 0x8a, 0x20, 0x74, 0x45, 0x46, 0x4e, 0x20, 0x06, 0x3c, 0x20, 0x05, 0x4e, 0x22, 0x4e, 0x4f, 0x20, 0x74, 0x46, - 0x47, 0x4f, 0x20, 0x06, 0x49, 0x9c, 0x20, 0x05, 0x4f, 0x4f, 0xfd, 0x2f, 0xf5, 0x27, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xac, 0x71, 0x00, 0x11, 0x04, 0x00, 0x00, 0x30, 0x01, 0x6e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xa0, 0x24, 0xeb, 0xff, 0x00, 0x00, 0x00, 0x02, 0x6e, 0xa4, 0x30, 0xf3, 0x30, 0xb0, 0x24, 0x30, 0xe9, 0x20, 0x05, 0xc9, 0x30, 0x06, 0x38, - 0x21, 0x45, 0x00, 0x01, 0x6e, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x61, 0x20, 0x07, 0x51, 0x64, 0x06, 0x28, 0xa2, 0x41, 0x60, 0x7f, 0x65, 0x00, 0x74, - 0x20, 0x03, 0x54, 0x72, 0x20, 0x01, 0x65, 0x0d, 0xc0, 0xff, 0x49, 0x41, 0x7f, 0x68, 0x00, 0x6e, 0x69, 0x21, 0x83, 0x71, 0x01, 0x61, 0x06, 0x00, - 0x7f, 0x31, 0xff, 0x06, 0x30, 0x7d, 0x00, 0x01, 0x00, 0xf1, 0x82, 0x3c, 0x68, 0x70, 0x51, 0x06, 0x9b, 0x1b, 0x00, 0x89, 0xc7, 0x00, 0xae, 0x9c, - 0xb7, 0xdc, 0xb4, 0xd8, 0x06, 0x7b, 0x9d, 0x53, 0x7f, 0x65, 0x06, 0x83, 0x81, 0x06, 0xf1, 0xff, 0x10, 0x04, 0x3d, 0x00, 0x04, 0x33, 0x04, 0x3b, - 0x04, 0x38, 0x04, 0x4f, 0xe0, 0x6d, 0x2a, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x02, 0x64, 0x03, 0x30, 0x04, 0x30, - 0x09, 0x01, 0x01, 0x58, 0x17, 0x04, 0x6e, 0x01, 0xb9, 0x30, 0xb3, 0x30, 0xc3, 0x30, 0xc8, 0x06, 0x88, 0x19, 0x06, 0x53, 0x00, 0x63, 0x00, 0x6f, - 0x27, 0x93, 0x06, 0x78, 0x19, 0xc9, 0xbb, 0x40, 0x7f, 0x73, 0x20, 0x01, 0x05, 0xd8, 0x0f, 0xb0, 0xff, 0x68, 0x41, 0x01, 0x06, 0x51, 0x03, 0xba, - 0x51, 0x7f, 0x7a, 0x28, 0x17, 0x05, 0xd7, 0x8f, 0x9a, 0x17, 0x73, 0x42, 0x01, 0x63, 0xa0, 0x06, 0x60, 0x81, 0xcf, 0x06, 0xe8, 0x17, 0xa4, 0xc2, - 0x54, 0xcf, 0xc0, 0x7a, 0xd2, 0x06, 0x98, 0x19, 0x92, 0x7f, 0x06, 0x5b, 0x9b, 0x51, 0xff, 0xf3, 0x06, 0x81, 0xff, 0x28, 0x0a, 0x04, 0x3e, 0x04, - 0x42, 0x28, 0x17, 0x30, 0x28, 0x1f, 0x34, 0xe0, 0x06, 0x28, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x03, 0x02, 0x03, 0x04, 0x20, - 0x01, 0x02, 0x28, 0x1a, 0x04, 0x03, 0x02, 0x02, 0x02, 0x00, 0x02, 0xca, 0x27, 0xb9, 0xfd, 0x00, 0x00, 0x05, 0x00, 0x6e, 0xa6, 0x30, 0xa7, 0x30, - 0xfc, 0x30, 0xeb, 0x36, 0x30, 0xba, 0x06, 0x28, 0x13, 0x3f, 0xff, 0x57, 0x2f, 0x29, 0x3f, 0xad, 0x73, 0xaa, 0x06, 0x6d, 0xb2, 0x50, 0x2f, 0xa9, - 0x79, 0x28, 0x17, 0x20, 0x2f, 0xad, 0x65, 0xbf, 0x20, 0x05, 0x47, 0x40, 0x8f, 0x05, 0x90, 0x91, 0x06, 0xf0, 0xff, 0x05, 0xf0, 0xef, 0x00, 0x50, - 0x7f, 0x06, 0x91, 0xff, 0x02, 0x01, 0x5a, 0x14, 0x5c, 0xeb, 0x58, 0x06, 0x98, 0x17, 0xe8, 0x06, 0xc6, 0x7c, 0xc7, 0x88, 0xc9, 0x06, 0x98, 0x97, - 0x07, 0x33, 0x7f, 0xed, 0xc4, 0x00, 0x03, 0x7f, 0x05, 0x94, 0x0f, 0x23, 0x04, 0x4d, 0x28, 0x15, 0x4c, 0x04, 0x71, 0x41, 0x05, 0xe8, 0x0f, 0x07, - 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x04, 0x04, 0x28, 0x16, 0x40, 0x03, 0x20, 0x06, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x10, 0x9b, 0x24, - 0xbe, 0x28, 0x17, 0x06, 0x6e, 0x17, 0x53, 0x10, 0xa2, 0x30, 0xa4, 0x28, 0x17, 0xe9, 0x30, 0xf3, 0x30, 0x55, 0xc9, 0x06, 0x28, 0x1b, 0x4e, 0x2f, - 0xad, 0x72, 0x2f, 0x2d, 0x68, 0x2f, 0xaf, 0x45, 0x72, 0x2f, 0x2d, 0x20, 0x00, 0x49, 0x20, 0x0f, 0x65, 0x05, 0x8f, 0x3b, 0xe3, 0x30, 0x6d, 0x7f, - 0xa7, 0x38, 0x17, 0x64, 0x00, 0x75, 0x28, 0x23, 0x50, 0x95, 0xdd, 0x05, 0x3f, 0xb9, 0x70, 0x69, 0x69, 0xa0, 0x87, 0x05, 0xbf, 0xb8, 0xb0, 0xff, - 0x61, 0x69, 0x1d, 0x6c, 0x6c, 0x05, 0xa1, 0x01, 0x00, 0xd0, 0x7f, 0x74, 0x2a, 0x31, 0x04, 0xdf, 0xcb, 0x17, 0x53, 0x02, 0x31, 0x72, 0x14, 0x5c, - 0x70, 0x51, 0x06, 0x78, 0x19, 0x81, 0x00, 0xbd, 0x44, 0xc5, 0x7c, 0xc7, 0x9c, 0xb7, 0xdc, 0x77, 0xb4, 0x06, 0x5b, 0x97, 0x33, 0x7f, 0x52, 0xeb, - 0x2d, 0x23, 0x79, 0x33, 0x83, 0x05, 0xde, 0xb9, 0xa0, 0x00, 0x12, 0x7f, 0x6f, 0x05, 0xa1, 0xfd, 0x00, 0x00, 0x21, 0x04, 0x35, 0x20, 0x04, 0x32, - 0x20, 0x03, 0x40, 0x04, 0x3d, 0x04, 0x30, 0x02, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x18, 0x20, 0x0b, 0x3b, 0x83, 0x20, 0x0b, 0x3d, 0x04, 0x34, 0x04, - 0x38, 0x20, 0x11, 0x0c, 0xd4, 0xff, 0x86, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x02, 0x03, 0x02, 0x38, 0x1b, 0x20, 0x06, 0x02, 0x81, 0x28, 0x22, 0x04, - 0xd1, 0x26, 0xcd, 0xfb, 0x09, 0x4f, 0xff, 0x16, 0x07, 0x6e, 0xed, 0x48, 0x13, 0xf3, 0x06, 0x28, 0x15, 0x5f, 0xff, 0x4c, 0xfe, 0x28, 0x1b, 0x38, - 0x03, 0x30, 0x05, 0x06, 0xb0, 0x7f, 0x38, 0x8f, 0x06, 0x3f, 0xb7, 0x07, 0x90, 0xff, 0x61, 0x8c, 0x0e, 0x41, 0x7f, 0x26, 0x4f, 0x66, 0x05, 0x16, - 0x80, 0x00, 0xaf, 0xff, 0xf0, 0xb7, 0x34, 0x58, 0xb3, 0x06, 0xb0, 0x7f, 0x73, 0x7f, 0x65, 0x0e, 0x63, 0x7f, 0x1b, 0x04, 0x78, 0x3e, 0x48, 0x05, - 0x30, 0x05, 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x02, 0x04, 0x05, 0x10, 0x04, 0x05, 0x06, 0x28, 0x17, 0x05, 0x06, 0x04, 0x02, 0x00, 0x02, - 0x02, 0x02, 0xa0, 0x24, 0xeb, 0xff, 0x00, 0x00, 0x00, 0x08, 0x6e, 0x57, 0x53, 0x7f, 0x89, 0xe8, 0x0a, 0x90, 0x30, 0x57, 0xb9, 0x06, 0x65, 0x1d, - 0x53, 0x2f, 0x9d, 0x75, 0x8a, 0x4b, 0x33, 0x20, 0x00, 0x57, 0x47, 0x9b, 0x74, 0x05, 0xe0, 0x7f, 0x75, 0xba, 0x4d, 0x2f, 0x4f, 0x20, 0x85, 0x06, - 0x10, 0x7d, 0x07, 0x70, 0xff, 0x20, 0x20, 0xff, 0x76, 0xac, 0x06, 0x60, 0xff, 0x75, 0x2e, 0xb1, 0x6f, 0x61, 0xf9, 0x06, 0x17, 0xa2, 0x7f, 0x89, - 0x00, 0x57, 0x53, 0xf1, 0x82, 0x3c, 0x68, 0x70, 0x51, 0x80, 0x06, 0x5f, 0xb3, 0xac, 0xc0, 0xb0, 0xc6, 0xa4, 0xc2, 0xe8, 0x98, 0x20, 0x03, 0xb8, - 0xd2, 0x0e, 0x93, 0x7f, 0x06, 0x91, 0xff, 0x2e, 0x04, 0x33, 0x80, 0x28, 0x19, 0x2d, 0x00, 0x17, 0x04, 0x30, 0x04, 0x3f, 0xa0, 0x20, 0x03, 0x34, - 0x28, 0x25, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x0b, 0x00, 0x40, 0x04, 0x35, 0x20, 0x1b, 0x38, 0x04, 0xe8, 0x31, 0x07, 0x14, 0xff, 0x80, 0x10, 0x0e, - 0xd0, 0x7f, 0x06, 0x0a, 0x0c, 0x0a, 0x0c, 0x0c, 0x06, 0x80, 0x20, 0x06, 0x0d, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x96, 0x00, 0x24, 0x2a, 0xfe, 0x00, - 0x00, 0x09, 0x6e, 0xa6, 0x00, 0x30, 0xa7, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0xfb, 0x00, 0x30, 0xdf, 0x30, 0xc3, 0x30, 0xc9, 0x30, 0xe9, 0x38, 0x30, - 0xf3, 0x20, 0x05, 0x05, 0x98, 0x27, 0x78, 0x0b, 0x20, 0x00, 0x4d, 0x2f, 0x00, 0x69, 0x2f, 0xb7, 0x6c, 0x2e, 0xb7, 0x3f, 0xbf, 0x05, 0x7f, 0xbb, - 0xf0, 0x75, 0x56, 0x20, 0x4d, 0x3b, 0x20, 0x20, 0x87, 0x27, 0x05, 0x48, 0x2b, 0x08, 0x10, 0xff, 0x4f, 0x3a, 0x00, 0x63, 0x20, 0x01, 0x31, 0x8b, - 0x3e, 0x43, 0x74, 0x21, 0x8f, 0x6c, 0xe0, 0x21, 0x99, 0x06, 0xd0, 0x7f, 0x04, 0x9e, 0x4b, 0x7f, 0x89, 0x73, 0x7c, 0xb7, 0x0c, 0x5f, 0x70, 0x51, - 0x79, 0x06, 0x68, 0x17, 0x58, 0x11, 0xf8, 0xbb, 0x03, 0xe4, 0xb4, 0x9c, 0xb7, 0x88, 0xc9, 0x06, 0x1f, 0xb2, 0x08, 0x52, 0x7f, 0xb4, 0xb2, 0x7d, - 0x69, 0x04, 0xc4, 0x0b, 0x00, 0x18, 0x0f, 0x1c, 0x28, 0x0b, 0x34, 0x04, 0x5c, 0x3b, 0x28, 0x15, 0x3d, 0x28, 0x25, 0x0c, 0xf4, 0xff, 0x10, 0x0e, - 0xf0, 0x7f, 0x07, 0x0c, 0x04, 0x07, 0x0c, 0x06, 0x07, 0x07, 0x20, 0x04, 0x04, 0x0c, 0x84, 0x20, 0x06, 0x07, 0x52, 0x25, 0xa8, 0x28, 0x17, 0x0a, - 0x6e, 0x03, 0x17, 0x53, 0x7f, 0x89, 0xe8, 0x90, 0x05, 0x98, 0x07, 0xff, 0xff, 0x58, 0x4e, 0x2f, 0x2f, 0x72, 0x06, 0xaf, 0x2f, 0x50, 0x7f, 0x64, - 0x00, 0x2d, 0xec, 0x05, 0x48, 0x05, 0x08, 0x90, 0xff, 0x38, 0x0f, 0x76, 0x06, 0x81, 0x7f, 0x06, 0x9e, 0x2f, 0x7f, 0x89, 0x01, 0x17, 0x53, 0xf1, - 0x82, 0x3c, 0x68, 0x70, 0x06, 0x68, 0x17, 0x0e, 0x78, 0xb1, 0xa4, 0xc2, 0x58, 0x1b, 0x0e, 0xb3, 0x7f, 0x06, 0x91, 0xff, 0x21, 0xa0, 0x27, 0xff, - 0x32, 0x28, 0x03, 0x40, 0x04, 0x3e, 0x04, 0x2d, 0xab, 0x00, 0x28, 0x25, 0x40, 0x28, 0x1f, 0x33, 0x28, 0x29, 0x3e, 0x28, 0x37, 0x0c, 0x94, 0xff, - 0x80, 0x10, 0x0e, 0x90, 0x7f, 0x08, 0x06, 0x09, 0x07, 0x09, 0x0a, 0x08, 0x00, 0x08, 0x07, 0x09, 0x09, 0x06, 0x08, 0x08, 0x08, 0x0a, 0x08, 0x05, - 0x26, 0x6a, 0x28, 0x17, 0x0b, 0x28, 0x17, 0x71, 0x5b, 0x67, 0x07, 0x78, 0x17, 0x45, 0x2f, 0xb5, 0x06, 0x98, 0x17, 0x45, 0x06, 0x08, 0x93, 0x07, - 0xb0, 0xff, 0xe1, 0x31, 0x7d, 0x06, 0x90, 0xff, 0x06, 0x78, 0x15, 0x00, 0x00, 0x1c, 0x4e, 0x07, 0x18, 0x17, 0x3a, 0x74, 0xc7, 0x07, 0x58, 0x17, - 0x06, 0xb3, 0x7f, 0x07, 0x58, 0x17, 0x12, 0x28, 0x1d, 0x41, 0x2e, 0x04, 0x42, 0x28, 0x23, 0x47, 0x05, 0x68, 0x19, 0x07, 0x54, 0xff, 0x10, 0x0e, - 0x90, 0x7f, 0x09, 0x05, 0x05, 0x08, 0x06, 0x08, 0x09, 0x48, 0x14, 0x05, 0x20, 0x06, 0x08, 0x09, 0x17, 0x27, 0xdb, 0x28, 0x17, 0x0c, 0x6e, 0xe8, - 0x00, 0x30, 0xfc, 0x30, 0xaf, 0x30, 0xb7, 0x30, 0xe3, 0x80, 0x20, 0x07, 0xfb, 0x30, 0xa2, 0x30, 0xf3, 0x30, 0xc9, 0xab, 0x20, 0x07, 0xb6, 0x20, - 0x0b, 0xcf, 0x20, 0x0b, 0xd0, 0x20, 0x1d, 0x04, 0xd8, 0x33, 0x51, 0x59, 0x4f, 0xaf, 0x6b, 0x2f, 0xa7, 0x68, 0x00, 0x69, 0x46, 0x21, 0x5d, 0x20, - 0x28, 0x1d, 0x6e, 0x4e, 0xc1, 0x3f, 0x45, 0x30, 0x0f, 0x48, 0x2f, 0xc9, 0x15, 0x6d, 0x00, 0x62, 0x2f, 0xcd, 0x72, 0x05, 0x40, 0x7f, 0x65, 0x2f, - 0xbf, 0xf4, 0x04, 0xd0, 0x75, 0x08, 0xf0, 0xff, 0x05, 0x70, 0xfd, 0x00, 0x51, 0xff, 0x79, 0x05, 0xa0, 0x7f, 0xa6, 0x7e, 0x00, 0x4b, 0x51, 0xe1, - 0x90, 0x2d, 0x00, 0xa8, 0x4e, 0x20, 0x2f, 0x4f, 0x06, 0x3f, 0xb1, 0x94, 0xc6, 0x6c, 0xd0, 0x54, 0x01, 0xc1, 0x2d, 0x00, 0xd8, 0xd5, 0x84, 0xbc, - 0x06, 0x3b, 0x99, 0xa0, 0x0e, 0xf2, 0x7f, 0x19, 0x28, 0x0f, 0x40, 0x04, 0x3a, 0x04, 0x48, 0xa8, 0x27, 0xf9, 0x40, 0x28, 0x05, 0x38, 0x28, 0x09, - 0x25, 0x04, 0x30, 0x0e, 0x04, 0x3c, 0x04, 0x31, 0x48, 0x2d, 0x0e, 0x31, 0x7f, 0x10, 0x0d, 0xb0, 0x7f, 0x0a, 0x2a, 0x0d, 0x0d, 0x20, 0x01, 0x0a, - 0x20, 0x06, 0x05, 0x20, 0x05, 0x0a, 0x08, 0x0a, 0x41, 0x26, 0xe6, 0x28, 0x17, 0x0d, 0x6e, 0xa4, 0x88, 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x28, 0x13, - 0xdf, 0x30, 0xc3, 0xbc, 0x28, 0x13, 0xe9, 0x48, 0x19, 0x04, 0xd8, 0x0b, 0xbf, 0xff, 0x7f, 0x23, 0x20, 0x00, 0x45, 0x4d, 0x28, 0x17, 0x64, 0x00, - 0x6c, 0x68, 0x15, 0x73, 0x05, 0x6f, 0xb9, 0xab, 0xf0, 0x75, 0x20, 0x4c, 0xbb, 0x20, 0x20, 0x87, 0x27, 0x05, 0x4f, 0x41, 0x08, 0x10, 0xff, 0x55, - 0x4f, 0x2f, 0xbf, 0x69, 0x2f, 0xc1, 0x6e, 0x2f, 0xc1, 0x61, 0x21, 0x8f, 0x70, 0x69, 0x06, 0xe0, 0x7f, 0x3e, 0x49, 0x04, 0x9f, 0xcb, 0x1c, 0x4e, - 0x73, 0x7c, 0x02, 0xb7, 0x5f, 0x70, 0x51, 0x79, 0x51, 0x06, 0x5f, 0xaf, 0x74, 0x00, 0xc7, 0xa4, 0xc2, 0xb8, 0xd2, 0xf8, 0xbb, 0xe4, 0x06, 0xb4, - 0x9c, 0xb7, 0x88, 0xc9, 0x06, 0x18, 0x99, 0x08, 0xf2, 0x7f, 0x69, 0xa2, 0x04, 0xe4, 0x09, 0x12, 0x28, 0x17, 0x41, 0x04, 0x42, 0x28, 0x1d, 0x47, - 0x02, 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x39, 0x28, 0x1b, 0x1c, 0x8b, 0x28, 0x23, 0x34, 0x04, 0x3b, 0x28, 0x17, 0x3d, 0x20, 0x07, 0x0c, 0xd4, 0xff, - 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x0b, 0x01, 0x06, 0x01, 0x07, 0x08, 0x0b, 0x00, 0x0b, 0x01, 0x07, 0x02, 0x01, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x6d, - 0x25, 0x31, 0xff, 0x00, 0x00, 0x0e, 0x88, 0x28, 0x17, 0xf3, 0x30, 0xb0, 0x68, 0x0d, 0x71, 0x67, 0xe8, 0x62, 0x90, 0x05, 0x98, 0x11, 0xf8, 0x17, - 0x6f, 0x00, 0x66, 0x2f, 0xab, 0x45, 0xbe, 0x2f, 0x2b, 0x67, 0x88, 0x1d, 0x05, 0x38, 0x97, 0x05, 0x17, 0xfb, 0x09, 0x10, 0xff, 0x59, 0x0d, 0x6c, - 0xb6, 0x49, 0x0d, 0x49, 0x41, 0x81, 0x3f, 0xbd, 0x6c, 0x2e, 0x31, 0x3f, 0xaf, 0x72, 0xff, 0x2e, 0x41, 0x04, 0xd1, 0x7f, 0x3e, 0xa5, 0x59, 0x8f, - 0x50, 0x7d, 0x3a, 0x1d, 0x05, 0x10, 0x7b, 0x58, 0x17, 0x06, 0xf1, 0x82, 0x3c, 0x68, 0x70, 0x06, 0x68, 0x15, 0x78, 0x17, 0x24, 0x00, 0xc6, 0x0c, - 0xbe, 0x89, 0xc7, 0x00, 0xae, 0x9c, 0x1d, 0xb7, 0xdc, 0xb4, 0x0e, 0x32, 0x7f, 0x06, 0x91, 0xff, 0x00, 0x38, 0x17, 0x40, 0x28, 0x11, 0x5c, 0x33, - 0x28, 0x1b, 0x3e, 0x28, 0x29, 0x0d, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x0c, 0x02, 0x01, 0x03, 0x02, 0x01, 0x02, 0x0c, 0x0c, 0x02, 0x20, 0x07, - 0x01, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x25, 0xec, 0x2f, 0xff, 0x0d, 0x0f, 0x6e, 0x57, 0x53, 0x06, 0x38, 0x0d, 0x9f, 0xff, 0x53, 0x28, 0x0f, 0x5d, - 0x75, 0x2f, 0x95, 0x68, 0x48, 0x13, 0x5f, 0x3b, 0x05, 0xd0, 0x7f, 0x75, 0x2f, 0xa5, 0x7a, 0x2d, 0x06, 0x88, 0x1f, 0x07, 0x50, 0xff, 0x39, 0x8f, - 0x06, 0x70, 0xff, 0x75, 0x2e, 0x1f, 0x65, 0xc2, 0x68, 0x1d, 0x06, 0x1f, 0xb3, 0x1c, 0x4e, 0x57, 0x53, 0x06, 0xb8, 0x19, 0xac, 0x07, 0xc0, 0xb0, - 0xc6, 0xa4, 0xc2, 0x58, 0x1d, 0x0e, 0x93, 0x7f, 0x06, 0x91, 0xff, 0x47, 0x2e, 0x28, 0x01, 0x3e, 0x04, 0x2d, 0x06, 0x88, 0x1f, 0x07, 0x14, 0xff, - 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x0d, 0x09, 0x0b, 0x09, 0x0b, 0x0b, 0x0d, 0x20, 0x06, 0x00, 0x0c, 0x09, 0x0d, 0x0d, 0x0d, 0x0d, 0x27, 0x24, 0x20, - 0xe9, 0xff, 0xff, 0xff, 0x01, 0x03, 0x01, 0x03, 0x03, 0x34, 0x04, 0x01, 0x20, 0x04, 0x20, 0x09, 0x01, 0x20, 0x07, 0x08, 0x02, 0x20, 0x08, 0x0a, - 0x20, 0x12, 0x08, 0x01, 0x0b, 0x08, 0x03, 0x40, 0x03, 0x20, 0x1a, 0x0b, 0x0a, 0x0b, 0x02, 0x03, 0x04, 0x80, 0x20, 0x06, 0x0a, 0x0b, 0x04, 0x04, - 0x04, 0x04, 0x05, 0x00, 0x07, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x14, 0x04, 0x07, 0x07, 0x30, 0x06, 0x02, 0x2f, 0xff, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x6f, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x0a, 0xf5, 0x1c, 0x14, 0x00, 0x00, 0x00, 0x01, 0x6f, 0xb6, 0x30, 0xf3, 0x30, 0xd3, 0x10, 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x5a, 0x00, - 0x61, 0x00, 0x06, 0x6d, 0x00, 0x62, 0x00, 0x69, 0x20, 0x07, 0x06, 0xd0, 0x7f, 0x65, 0xb0, 0x06, 0x49, 0x20, 0x53, 0x07, 0x80, 0xff, 0x0e, 0x50, - 0x7f, 0x5e, 0x8d, 0xd4, 0x6b, 0x20, 0x9a, 0x4e, 0x06, 0x9b, 0x1b, 0xa0, 0xc7, 0x44, 0xbe, 0x44, 0x68, 0xc5, 0x06, 0x9b, 0x9b, 0x07, 0x13, 0x7f, - 0xe2, 0x06, 0xc3, 0xff, 0x17, 0x04, 0x30, 0x00, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x38, 0x04, 0x4f, 0x67, 0x04, 0x10, 0x06, 0x33, 0x7f, 0x10, 0x06, - 0xf0, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x80, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x70, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x54, 0xf3, 0x14, 0x16, 0x00, 0x00, 0x00, 0x01, 0x70, 0xb8, 0x30, 0xf3, 0x30, 0xd0, 0x04, 0x30, 0xd6, 0x30, 0xa8, 0x30, 0x06, 0x58, 0x1f, - 0x5a, 0x00, 0x01, 0x69, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x61, 0x20, 0x03, 0x16, 0x77, 0x00, 0x65, 0x0e, 0x00, 0x7f, 0x53, 0x0e, 0xe0, 0xff, 0xb1, - 0xff, 0x75, 0x80, 0x06, 0x21, 0xff, 0x25, 0x6d, 0xf4, 0x5d, 0x03, 0x5e, 0xe6, 0x40, 0x97, 0x06, 0x7b, 0x1d, 0xd0, 0xc9, 0x14, 0xbc, 0x0c, 0xbe, - 0x34, 0xe8, 0xc6, 0x06, 0x7b, 0x9d, 0x07, 0xd1, 0xff, 0xe9, 0x06, 0x0c, 0xa4, 0x17, 0x04, 0x01, 0x38, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x30, 0x20, - 0x03, 0x0c, 0x32, 0x04, 0x35, 0x04, 0x10, 0x05, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, - 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x71, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xb6, 0x1c, 0x7a, 0x23, 0x00, 0x00, 0x00, - 0x01, 0x71, 0xa2, 0x30, 0xbc, 0x30, 0xeb, 0x00, 0x30, 0xd0, 0x30, 0xa4, 0x30, 0xb8, 0x30, 0xe3, 0x10, 0x30, 0xf3, 0x30, 0x05, 0xf8, 0x25, 0x41, - 0x00, 0x7a, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x62, 0x00, 0x61, 0x00, 0x14, 0x69, 0x00, 0x6a, 0x20, 0x05, 0x6e, 0x06, 0x80, 0x7f, 0xef, 0x00, - 0x45, 0x64, 0x06, 0x00, 0x81, 0x41, 0x00, 0x73, 0xa0, 0xff, 0x64, 0x20, 0x0d, 0x1b, 0x63, 0x00, 0x68, 0x05, 0xa1, 0x05, 0xd1, 0x7f, 0x67, 0x21, - 0x83, 0x05, 0xf0, 0xff, 0x88, 0xb1, 0xff, 0x79, 0x00, 0xe1, 0x05, 0xe1, 0xff, 0x3f, 0x96, 0x5e, 0x04, 0x58, 0xdc, 0x62, 0x86, 0x75, 0x06, 0x7b, - 0x1d, 0x44, 0xc5, 0x00, 0x1c, 0xc8, 0x74, 0xb9, 0x14, 0xbc, 0x74, 0xc7, 0x35, 0x94, 0xc7, 0x06, 0x3b, 0xa1, 0x93, 0x7f, 0x65, 0x42, 0x7f, 0x7a, - 0x05, 0xe3, 0x83, 0x88, 0xf3, 0xff, 0xe3, 0x00, 0x6f, 0x05, 0xcc, 0xa8, 0x10, 0x04, 0x37, 0x00, 0x04, 0x35, 0x04, 0x40, 0x04, 0x31, 0x04, 0x30, - 0x02, 0x04, 0x39, 0x04, 0x34, 0x04, 0x36, 0x20, 0x07, 0x3d, 0x67, 0x04, 0x0e, 0x54, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, - 0x17, 0x01, 0x10, 0x27, 0x80, 0x3f, 0xff, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x72, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xdf, 0x0c, 0xa9, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x72, 0xe2, 0x30, 0xfc, 0x30, 0xea, 0x01, - 0x30, 0xbf, 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, 0x00, 0x61, 0x00, 0x75, 0x00, 0x72, 0x00, 0x15, 0x69, 0x00, 0x74, 0x20, - 0x09, 0x6e, 0x20, 0x07, 0x61, 0x06, 0xe0, 0x7f, 0x56, 0x65, 0x06, 0x40, 0xff, 0x65, 0xa0, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x05, 0xd1, 0xff, 0xdb, - 0x00, 0x6b, 0xcc, 0x91, 0x54, 0x58, 0x3c, 0x5c, 0x9a, 0x40, 0x4e, 0x06, 0x5b, 0x1f, 0xa8, 0xba, 0xac, 0xb9, 0xc0, 0xd0, 0x35, 0xc8, 0xb2, 0x06, - 0x7b, 0x9d, 0x00, 0x13, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe2, 0x06, 0x23, 0xff, 0x00, 0x1c, 0x04, 0x30, 0x04, 0x32, 0x04, 0x40, 0x04, 0x14, 0x38, - 0x04, 0x42, 0x20, 0x09, 0x3d, 0x20, 0x07, 0x4f, 0x04, 0xcf, 0x0e, 0xd4, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, - 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x73, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xfe, 0x08, 0x50, 0xfa, 0x00, 0x01, 0x00, - 0x01, 0x73, 0xde, 0x30, 0xea, 0x30, 0x06, 0xb8, 0x19, 0x01, 0x4d, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x69, 0x10, 0x0e, 0xe0, 0x7f, 0x42, 0xed, 0x06, - 0x8a, 0x9c, 0x6c, 0x9a, 0xcc, 0x91, 0x06, 0xbb, 0x19, 0xd0, 0x10, 0xb9, 0xac, 0xb9, 0x10, 0x06, 0xb3, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x0c, 0x3b, - 0x04, 0x38, 0x04, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x96, 0xff, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x74, 0x14, 0x20, 0x50, 0x08, 0xe2, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9d, 0x09, 0x7f, 0x28, 0x1a, 0x01, 0x00, 0x74, 0xcb, 0x30, 0xb8, 0x30, 0xa7, 0x30, 0xfc, - 0x10, 0x30, 0xeb, 0x30, 0x06, 0x58, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x06, 0x67, 0x00, 0x65, 0x00, 0x72, 0x06, 0x68, 0x9e, 0x10, 0x07, 0x10, 0x7f, - 0xed, 0x81, 0x06, 0xc1, 0xff, 0x3c, 0x5c, 0xe5, 0x65, 0x14, 0x5c, 0x06, 0x9b, 0x1b, 0x03, 0xc8, 0xb2, 0x1c, 0xc8, 0x74, 0xb9, 0x06, 0x9b, 0x9b, - 0x0e, 0xf1, 0xff, 0x00, 0x1d, 0x04, 0x38, 0x04, 0x33, 0x04, 0x35, 0x04, 0x33, 0x40, 0x04, 0x10, 0x16, 0x74, 0xff, 0x06, 0xd6, 0xff, 0x01, 0x01, - 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x75, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9c, 0x08, 0xb1, 0x0a, 0x00, 0x00, 0x00, - 0x01, 0x75, 0xc1, 0x30, 0xe3, 0x30, 0xc9, 0x40, 0x30, 0x06, 0x98, 0x1b, 0x43, 0x00, 0x68, 0x00, 0x61, 0x00, 0x44, 0x64, 0x06, 0x88, 0x9c, 0x54, - 0x00, 0x63, 0x06, 0xc0, 0x81, 0x54, 0x00, 0x46, 0x73, 0x06, 0xc0, 0x81, 0x43, 0x00, 0x69, 0x06, 0xc1, 0x7f, 0x06, 0xf1, 0xff, 0x4d, 0x10, 0x4e, - 0x97, 0x5f, 0x06, 0xbb, 0x19, 0x28, 0xcc, 0xdc, 0xb4, 0xdd, 0x06, 0xbb, 0x99, 0x32, 0x7f, 0x6a, 0x23, 0x81, 0x06, 0x92, 0x7f, 0x53, 0xff, 0x65, - 0x06, 0x6c, 0x9e, 0x03, 0x27, 0x04, 0x30, 0x04, 0x34, 0x04, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, - 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x76, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x1d, 0x0b, 0x22, 0x17, 0x00, 0x00, 0x00, - 0x01, 0x76, 0xb9, 0x30, 0xfc, 0x30, 0xc0, 0x10, 0x30, 0xf3, 0x30, 0x06, 0x78, 0x1d, 0x53, 0x00, 0x75, 0x00, 0x05, 0x64, 0x00, 0x61, 0x00, 0x6e, - 0x06, 0x80, 0x7f, 0x6f, 0x06, 0xc0, 0x81, 0xd0, 0x07, 0x10, 0xff, 0x07, 0x30, 0x7f, 0xe1, 0x06, 0x81, 0xff, 0xcf, 0x82, 0x39, 0x4e, 0x86, 0x06, - 0xbb, 0x19, 0x18, 0xc2, 0xe8, 0xb2, 0x06, 0xbb, 0x99, 0x32, 0xff, 0x65, 0xb0, 0x07, 0x02, 0xff, 0xe3, 0x23, 0x85, 0x06, 0x5c, 0x9f, 0x21, 0x04, - 0x43, 0x04, 0x03, 0x34, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0e, 0xb3, 0x7f, 0x10, 0x0e, 0x90, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, - 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x77, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe7, 0x0a, 0xaf, 0x1b, 0x00, 0x00, 0x00, - 0x01, 0x77, 0xa8, 0x30, 0xea, 0x30, 0xc8, 0x90, 0x20, 0x03, 0xa2, 0x30, 0x06, 0x58, 0x1f, 0x45, 0x00, 0x72, 0x00, 0x11, 0x69, 0x00, 0x74, 0x20, - 0x05, 0x65, 0x00, 0x61, 0x06, 0x28, 0xa2, 0x55, 0xc9, 0x20, 0x7f, 0x79, 0x20, 0x7f, 0x68, 0x20, 0x87, 0xe9, 0x20, 0x83, 0xc0, 0x0d, 0xf0, 0xff, - 0x0e, 0xf0, 0x7f, 0x84, 0x53, 0xcb, 0x7a, 0x79, 0x72, 0x08, 0xcc, 0x91, 0x9a, 0x4e, 0x06, 0x5b, 0x1f, 0xd0, 0xc5, 0xac, 0x01, 0xb9, 0xb8, 0xd2, - 0x08, 0xb8, 0x44, 0xc5, 0x0e, 0x53, 0x7f, 0xa0, 0xb3, 0xff, 0x69, 0x06, 0x24, 0x01, 0x2d, 0x04, 0x40, 0x04, 0x38, 0x21, 0x04, 0x42, 0x20, 0x05, - 0x35, 0x04, 0x4f, 0x04, 0x10, 0x06, 0x13, 0x7f, 0x9e, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x78, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x3d, 0x08, 0xae, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x78, 0xb8, 0x30, 0xd6, 0x30, 0xc1, 0x40, - 0x30, 0x06, 0x98, 0x1b, 0x44, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x01, 0x62, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x20, 0x09, 0x83, 0x0e, 0x10, 0x7f, - 0x73, 0x00, 0x63, 0x00, 0x68, 0x41, 0x03, 0x06, 0x31, 0x01, 0x68, 0x47, 0x06, 0x80, 0x79, 0x5a, 0x98, 0x59, 0x06, 0xe0, 0x7f, 0x09, 0x54, 0x03, - 0x10, 0x5e, 0xd0, 0x63, 0x06, 0x9b, 0x1b, 0xc0, 0xc9, 0x80, 0xbd, 0x20, 0xf0, 0xd2, 0x10, 0x06, 0x93, 0x7f, 0x14, 0x04, 0x36, 0x04, 0x38, 0x03, - 0x04, 0x31, 0x04, 0x43, 0x04, 0x42, 0x20, 0x07, 0x10, 0x06, 0x34, 0xff, 0x9e, 0x10, 0x06, 0xd0, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, - 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x79, 0x14, 0x20, 0x50, 0x08, 0xe2, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x72, 0x01, 0x3f, 0x28, 0x11, 0x01, 0x00, 0x79, 0xbd, 0x30, 0xde, 0x30, 0xea, 0x30, 0xa2, - 0x40, 0x30, 0x06, 0x78, 0x1d, 0x53, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x06, 0x61, 0x00, 0x6c, 0x00, 0x69, 0x20, 0x05, 0x06, 0xd0, 0x7f, 0x65, 0xc0, - 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0x22, 0x7d, 0x6c, 0x9a, 0xcc, 0x91, 0x80, 0x06, 0x9b, 0x1b, 0x8c, 0xc1, 0xd0, 0xb9, 0xac, 0xb9, 0x44, 0x54, - 0xc5, 0x07, 0x33, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x06, 0x83, 0xff, 0x21, 0x04, 0x00, 0x3e, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x33, - 0x38, 0x04, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7a, 0x14, 0x20, 0x50, 0x08, 0xe2, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x38, 0x1e, 0x11, 0x28, 0x1a, 0x01, 0x00, 0x7a, 0xa2, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0xe9, - 0x40, 0x30, 0x06, 0x78, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x15, 0x6f, 0x00, 0x72, 0x20, 0x01, 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x0e, 0xe0, - 0xff, 0x81, 0x0e, 0x30, 0x7f, 0x89, 0x5b, 0x53, 0x90, 0x14, 0x5c, 0x06, 0x9b, 0x1b, 0x03, 0x48, 0xc5, 0xc4, 0xb3, 0x7c, 0xb7, 0x06, 0x9b, 0x9b, - 0x0e, 0xf2, 0x7f, 0x00, 0x10, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x3e, 0x04, 0x4c, 0x40, 0x20, 0x01, 0x30, 0x04, 0x10, 0x0e, 0x13, 0xff, 0x0e, 0xf5, - 0x7f, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x7b, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xb1, 0x19, 0x33, 0xfc, 0x00, 0x00, 0x00, - 0x01, 0x7b, 0xb8, 0x30, 0xd6, 0x30, 0xe9, 0x0c, 0x30, 0xeb, 0x30, 0xbf, 0x20, 0x03, 0x06, 0x38, 0x21, 0x47, 0x00, 0x00, 0x69, 0x00, 0x62, 0x00, - 0x72, 0x00, 0x61, 0x00, 0x15, 0x6c, 0x00, 0x74, 0x20, 0x05, 0x72, 0x10, 0x06, 0x40, 0x7f, 0x69, 0x41, 0x7d, 0x70, 0x65, 0x21, 0x87, 0x31, 0x89, - 0x0d, 0xb1, 0xff, 0xf4, 0x76, 0x03, 0x5e, 0x08, 0x57, 0x7f, 0x40, 0x96, 0x06, 0x7b, 0x1d, 0xc0, 0xc9, 0x0c, 0x06, 0xbe, 0x64, 0xb8, 0x30, 0xd1, - 0x06, 0x7b, 0x9d, 0x0e, 0xf3, 0x7f, 0x13, 0x00, 0x04, 0x38, 0x04, 0x31, 0x04, 0x40, 0x04, 0x30, 0x09, 0x04, 0x3b, 0x04, 0x42, 0x20, 0x05, 0x40, - 0x04, 0x10, 0x0e, 0x34, 0xff, 0x9e, 0x0e, 0x96, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7c, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2a, 0x23, 0x30, 0xfe, 0x00, 0x00, 0x00, 0x01, 0x7c, 0xac, 0x30, 0xfc, 0x30, 0xf3, 0x24, - 0x30, 0xb8, 0x20, 0x05, 0xf6, 0x5c, 0x06, 0x38, 0x21, 0x47, 0x00, 0x00, 0x75, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x57, 0x73, 0x20, 0x07, - 0x79, 0x06, 0xa0, 0x7f, 0x65, 0x06, 0x40, 0x81, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x08, 0x39, 0x68, 0x7f, 0x89, 0x06, 0xbb, 0x19, 0x74, 0xac, - 0xc0, 0x06, 0xc9, 0x20, 0x00, 0x2c, 0xc1, 0x06, 0x7b, 0x9d, 0x0e, 0xf2, 0x7f, 0x13, 0x00, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3d, 0x04, 0x41, 0x19, - 0x04, 0x38, 0x04, 0x10, 0x06, 0x31, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7d, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x84, 0x26, 0xd0, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xde, 0x30, 0xf3, 0x30, 0xf6, 0x40, - 0x5c, 0x06, 0x98, 0x1b, 0x49, 0x00, 0x73, 0x00, 0x6c, 0x00, 0x01, 0x65, 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x20, 0x05, 0x05, 0x4d, 0x00, 0x61, - 0x00, 0x6e, 0x05, 0xa8, 0xaa, 0xce, 0x60, 0x7d, 0x7a, 0x64, 0x40, 0x83, 0x05, 0xf0, 0x7d, 0x07, 0x10, 0xff, 0x31, 0x7f, 0x6f, 0x21, 0x81, 0x61, - 0xbc, 0x41, 0x03, 0x69, 0x06, 0x01, 0x81, 0x51, 0xff, 0x50, 0x7d, 0x06, 0x31, 0x81, 0x6c, 0x9a, 0x10, 0x69, 0x60, 0x9b, 0x06, 0xa2, 0xff, 0xe8, - 0xb9, 0x20, 0x00, 0x38, 0x2c, 0xc1, 0x06, 0x9b, 0x9b, 0x06, 0x12, 0xf1, 0xf3, 0xff, 0x6c, 0x00, 0x68, 0x80, 0x06, 0xa1, 0xff, 0x1c, 0x04, 0x4d, - 0x04, 0x3d, 0x04, 0x20, 0x00, 0x00, 0x28, 0x00, 0x3e, 0x04, 0x41, 0x04, 0x42, 0x00, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x29, 0xcf, 0x0d, - 0xc3, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7e, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xfa, 0x22, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xb8, 0x30, 0xe3, 0x30, 0xfc, 0x24, - 0x30, 0xb8, 0x20, 0x03, 0xf6, 0x5c, 0x06, 0x38, 0x21, 0x4a, 0x00, 0x05, 0x65, 0x00, 0x72, 0x00, 0x73, 0x20, 0x05, 0x79, 0x06, 0x48, 0xa0, 0x84, - 0x10, 0x0e, 0xf0, 0x7f, 0xfd, 0x6c, 0x7f, 0x89, 0x06, 0xcb, 0x19, 0xc8, 0xc0, 0x06, 0xc9, 0x20, 0x00, 0x2c, 0xc1, 0x06, 0x7b, 0x9d, 0x07, 0x13, - 0x7f, 0xe9, 0x88, 0x43, 0xff, 0x69, 0x00, 0x61, 0x06, 0x5c, 0x97, 0x04, 0x36, 0x04, 0x00, 0x35, 0x04, 0x40, 0x04, 0x41, 0x04, 0x38, 0x04, 0x9e, - 0x10, 0x1e, 0x34, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x7f, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x16, 0x1f, 0x46, 0x05, 0x00, 0x00, 0x00, - 0x01, 0x7f, 0xe2, 0x30, 0xca, 0x30, 0xb3, 0x40, 0x30, 0x06, 0x98, 0x1b, 0x4d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x18, 0x61, 0x00, 0x63, 0x20, 0x07, - 0x10, 0x06, 0xf0, 0x7f, 0x20, 0x00, 0x28, 0x02, 0x00, 0x50, 0x00, 0x72, 0x00, 0x69, 0x21, 0x91, 0x63, 0xaa, 0x20, 0x05, 0x70, 0x21, 0x97, 0x74, - 0x40, 0x17, 0x64, 0x20, 0x13, 0x29, 0xa0, 0x04, 0x61, 0xff, 0xf3, 0x06, 0xc1, 0xff, 0x69, 0x64, 0xb3, 0x7e, 0xe5, 0x40, 0x54, 0x06, 0x9b, 0x1b, - 0xa8, 0xba, 0x98, 0xb0, 0x54, 0xcf, 0xc0, 0x0e, 0xb3, 0x7f, 0x06, 0xd1, 0xff, 0x1c, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x1c, 0x30, 0x04, 0x3a, 0x20, - 0x07, 0x10, 0x0e, 0xf4, 0xff, 0x0e, 0x36, 0xff, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x88, 0x1d, 0x01, 0x11, 0x22, 0x00, 0x00, 0x30, 0x01, 0xa9, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x56, 0x14, 0xe5, 0x36, 0x00, 0x00, 0x00, 0x02, 0xa9, 0xc7, 0x30, 0xea, 0x30, 0xfc, 0x40, - 0x30, 0x06, 0x98, 0x1b, 0x44, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x10, 0x68, 0x00, 0x69, 0x10, 0x16, 0x60, 0x7f, 0xb7, 0x5f, 0xcc, 0x91, 0x00, 0x2d, - 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, 0x8f, 0x21, 0x3a, 0x53, 0x06, 0x1b, 0x23, 0x78, 0xb3, 0xac, 0xb9, 0x06, 0xbb, 0x99, 0xe0, 0x07, 0x53, 0x7f, - 0x06, 0x73, 0xfd, 0x2c, 0x97, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x20, 0x38, 0x04, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x09, 0x09, 0x09, 0x0a, 0x32, 0x09, - 0x01, 0x30, 0x06, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x00, 0xa9, 0xa2, 0x30, 0xf3, 0x30, 0xc0, 0x30, 0xde, 0x80, 0x20, 0x05, 0xfb, 0x30, - 0xcb, 0x30, 0xb3, 0x30, 0xd0, 0x01, 0x30, 0xeb, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x05, 0x7f, 0xc5, 0x00, 0x41, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x61, - 0x00, 0x45, 0x6d, 0x20, 0x03, 0x6e, 0x00, 0x20, 0x40, 0x05, 0x64, 0x20, 0x07, 0x41, 0x4e, 0x28, 0x29, 0x63, 0x00, 0x6f, 0x00, 0x62, 0x20, 0x1b, - 0x46, 0x72, 0x20, 0x17, 0x49, 0x00, 0x73, 0x28, 0x3f, 0x50, 0x1d, 0x73, 0xaa, 0x03, 0xaf, 0xe2, 0xce, 0x28, 0x95, 0x65, 0x20, 0x5b, 0x20, 0xe0, - 0x89, 0x2d, 0xba, 0x28, 0xaf, 0x74, 0x20, 0x05, 0xd0, 0x87, 0x04, 0xf0, 0xff, 0x65, 0x41, 0x03, 0x75, 0xbb, 0xa1, 0x03, 0x6b, 0x81, 0x03, 0x30, - 0x1b, 0x05, 0x10, 0x7f, 0x20, 0x40, 0x03, 0xd1, 0x7d, 0x75, 0x65, 0x04, 0xaf, 0xd2, 0x71, 0xd7, 0xd1, 0x81, 0xe1, 0x42, 0x0b, 0x79, 0x00, 0x02, - 0x07, 0x80, 0x04, 0x1f, 0xdb, 0x89, 0x5b, 0xbe, 0x8f, 0xfc, 0x66, 0x8c, 0x00, 0x54, 0x3c, 0x5c, 0xd1, 0x79, 0xf4, 0x5d, 0xa4, 0x10, 0x7f, 0x9b, - 0x5c, 0x05, 0xd8, 0x25, 0x48, 0xc5, 0xe4, 0xb2, 0x00, 0xcc, 0xb9, 0x20, 0x00, 0xc8, 0xb2, 0x54, 0xcf, 0x10, 0x14, 0xbc, 0x74, 0x20, 0x09, 0x1c, - 0xc8, 0xc4, 0xb3, 0xff, 0x05, 0x9f, 0xc3, 0x00, 0x32, 0x7f, 0x52, 0x85, 0xf2, 0x03, 0x04, 0x32, 0x7d, 0x31, 0xff, 0x3c, 0x15, 0xf1, 0xff, 0x70, - 0xe3, 0x23, 0xf9, 0x00, 0x32, 0x89, 0x04, 0x1f, 0xdb, 0x10, 0x04, 0x3d, 0x04, 0x04, 0x34, 0x04, 0x30, 0x04, 0x3c, 0x20, 0x03, 0x3d, 0x04, 0x10, - 0x41, 0x04, 0x3a, 0x28, 0x23, 0x35, 0x04, 0x20, 0x00, 0x50, 0x38, 0x20, 0x03, 0x1d, 0x28, 0x2f, 0x3a, 0x04, 0x3e, 0x04, 0x55, 0x31, 0x20, 0x1f, - 0x40, 0xa0, 0x1b, 0x3e, 0x20, 0x27, 0x42, 0x20, 0x11, 0x1c, 0x3e, 0x04, 0x32, 0x20, 0x39, 0x0a, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x01, - 0x04, 0x0e, 0x01, 0x01, 0x0e, 0x02, 0x40, 0x06, 0x02, 0x02, 0x00, 0x02, 0x02, 0x4b, 0x08, 0xf4, 0x41, 0x00, 0x00, 0x51, 0x04, 0x28, 0x17, 0xfc, - 0x28, 0x19, 0xc9, 0x30, 0xe9, 0x28, 0x17, 0x50, 0xd7, 0x20, 0x05, 0xc7, 0x20, 0x0f, 0xb7, 0x30, 0xe5, 0x30, 0x2a, 0xde, 0x5d, 0x05, 0xb8, 0x17, - 0x68, 0x27, 0xfb, 0x61, 0x28, 0x15, 0x50, 0xa8, 0x40, 0x07, 0x64, 0x47, 0xa9, 0x68, 0x10, 0x15, 0x40, 0x7f, 0x89, 0x5b, 0x97, 0x04, 0x5f, 0xc9, - 0x62, 0xa6, 0x90, 0x06, 0x7f, 0xb3, 0x48, 0xc5, 0x00, 0xdc, 0xb4, 0x7c, 0xb7, 0x04, 0xd5, 0x7c, 0xb7, 0x00, 0x70, 0xb3, 0xdc, 0xc2, 0x20, 0x00, - 0xfc, 0xc8, 0xe8, 0x05, 0xdf, 0xb8, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x45, 0x27, 0xf7, 0x30, 0x04, 0x2d, 0x2b, 0x00, 0x1f, 0x40, 0x07, 0x34, 0x28, - 0x19, 0x48, 0x02, 0xe7, 0xef, 0x10, 0x19, 0x74, 0xff, 0x24, 0x03, 0x02, 0x28, 0x0e, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, 0x03, 0x5b, - 0x0c, 0xcd, 0x37, 0x00, 0x00, 0x41, 0x05, 0x28, 0x17, 0xc3, 0x30, 0xb5, 0x30, 0xe0, 0x05, 0x88, 0x07, 0xb8, 0x00, 0x1f, 0x2f, 0x73, 0x2f, 0xff, - 0x3f, 0xa5, 0x10, 0x16, 0x50, 0x7f, 0x3f, 0x96, 0x28, 0x10, 0x84, 0xc6, 0x59, 0x06, 0x98, 0x17, 0x44, 0xc5, 0xbc, 0xc0, 0xd5, 0x06, 0x18, 0x0d, - 0x0f, 0x93, 0x7f, 0x10, 0x2f, 0xfb, 0x41, 0x2f, 0xf5, 0x3c, 0x05, 0x68, 0x07, 0x92, 0x10, 0x17, 0xf4, 0xff, 0x04, 0x03, 0x28, 0x0e, 0x02, 0x04, - 0x40, 0x06, 0x04, 0x00, 0x04, 0x04, 0x04, 0x91, 0x12, 0x4d, 0x41, 0x00, 0x00, 0x00, 0x06, 0xa9, 0xc1, 0x30, 0xe3, 0x30, 0xf3, 0x00, 0x30, 0xc7, - 0x30, 0xa3, 0x30, 0xfc, 0x30, 0xac, 0x2a, 0x30, 0xeb, 0x06, 0x08, 0x1f, 0x43, 0x2f, 0xab, 0x61, 0x4f, 0xb3, 0x2b, 0x2c, 0x01, 0x67, 0x2f, 0xb3, - 0x72, 0x05, 0x6f, 0xa7, 0x00, 0x10, 0x7f, 0x69, 0x00, 0x80, 0x10, 0x0e, 0x30, 0x7f, 0x0c, 0x66, 0xea, 0x8f, 0xa0, 0x52, 0x14, 0x00, 0x5c, 0x2d, - 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, 0x10, 0x8f, 0x3a, 0x53, 0x05, 0xdf, 0xaf, 0x2c, 0xcc, 0x14, 0xb5, 0x0d, 0x00, 0xac, 0x74, 0xb9, 0x06, 0x78, - 0x1b, 0x0e, 0xf2, 0xff, 0x27, 0x28, 0x13, 0x01, 0x3d, 0x04, 0x34, 0x04, 0x38, 0x04, 0x33, 0x28, 0x1d, 0x1c, 0x40, 0x04, 0x45, 0x05, 0xe8, 0x1f, - 0x07, 0x94, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x05, 0x05, 0x12, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x20, 0x40, 0x05, 0xdb, 0x00, 0x15, 0x9a, 0x36, - 0x00, 0x00, 0x07, 0xa9, 0xc0, 0x00, 0x30, 0xc9, 0x30, 0xe9, 0x30, 0xca, 0x53, 0x73, 0x20, 0x30, 0xca, 0x48, 0x17, 0xfb, 0x30, 0xa2, 0x30, 0xd9, - 0x00, 0x30, 0xea, 0x30, 0x23, 0x90, 0xa6, 0x90, 0xf4, 0x06, 0x76, 0x44, 0x8f, 0x30, 0x57, 0x04, 0xed, 0x2f, 0x2f, 0xab, 0x64, 0x88, 0x28, 0x0d, - 0x61, 0x00, 0x20, 0x68, 0x1f, 0x20, 0x00, 0x4e, 0xc4, 0x2f, 0xbf, 0x58, 0x23, 0x20, 0x00, 0x48, 0x2f, 0xcb, 0x76, 0x00, 0x18, 0x65, 0x00, 0x6c, - 0x27, 0xb7, 0x04, 0xf0, 0x7f, 0x65, 0x00, 0x74, 0xdd, 0x05, 0xe0, 0x7d, 0xd0, 0xff, 0x75, 0x07, 0x00, 0xff, 0x05, 0xf0, 0xfd, 0xd1, 0xff, 0x79, - 0x06, 0x20, 0x7f, 0x00, 0xbe, 0x8f, 0xb7, 0x5f, 0xc9, 0x62, 0x8c, 0x54, 0x20, 0xb3, 0x7e, 0x38, 0x1d, 0xc8, 0x54, 0xf4, 0x7e, 0x29, 0x40, 0x52, - 0x05, 0xb8, 0x23, 0xe4, 0xb2, 0xdc, 0xb4, 0x7c, 0xb7, 0x20, 0x98, 0xb0, 0x38, 0x1b, 0x58, 0xd5, 0xa8, 0xbc, 0xac, 0x80, 0x28, 0x21, 0xf0, 0xc5, - 0x29, 0xbc, 0xc1, 0xc9, 0x60, 0x6d, 0xd5, 0x05, 0x38, 0x29, 0xd2, 0xff, 0x6e, 0x06, 0xc2, 0xff, 0x06, 0x32, 0x7f, 0x14, 0x28, 0x17, 0x41, 0x34, - 0x28, 0x0f, 0x30, 0x04, 0x20, 0x00, 0x38, 0x20, 0x03, 0x62, 0x1d, 0x28, 0x27, 0x58, 0x21, 0x2d, 0x00, 0x25, 0x28, 0x33, 0x32, 0x0e, 0x04, 0x35, - 0x04, 0x3b, 0x28, 0x35, 0x0d, 0x34, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x06, 0x03, 0x07, 0x07, 0x07, 0x08, 0x07, 0x06, 0x30, 0x06, 0x20, 0x05, 0x00, - 0x06, 0x06, 0x69, 0x0e, 0xec, 0x33, 0x00, 0x00, 0x01, 0x08, 0xa9, 0xb0, 0x30, 0xb8, 0x30, 0xe3, 0x28, 0x19, 0x02, 0xfc, 0x30, 0xc8, 0x30, 0xde, - 0x5d, 0x06, 0x1c, 0xb1, 0x47, 0xa3, 0x27, 0x0d, 0x6a, 0x4f, 0xa7, 0x01, 0x01, 0x74, 0x06, 0x2d, 0x30, 0x90, 0x7f, 0x60, 0x61, 0x28, 0x15, 0x10, - 0x0e, 0x10, 0x7f, 0xe4, 0x53, 0x09, 0x54, 0xc9, 0x04, 0x62, 0x79, 0x72, 0xa6, 0x90, 0x06, 0x3f, 0xad, 0x00, 0x00, 0x00, 0x6c, 0xad, 0x90, 0xc7, - 0x7c, 0xb7, 0xb8, 0xd2, 0x31, 0x20, 0x00, 0x05, 0x38, 0x05, 0x10, 0x00, 0x12, 0xff, 0x13, 0x04, 0x43, 0x28, 0x17, 0x47, 0x36, 0x48, 0x09, 0x30, - 0x04, 0x42, 0x04, 0x87, 0xff, 0x09, 0x14, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x01, 0x07, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x07, 0x20, 0x06, 0x41, 0x06, - 0x20, 0x05, 0x07, 0x07, 0x84, 0x10, 0xaa, 0x28, 0x17, 0x01, 0x09, 0xa9, 0xcf, 0x30, 0xea, 0x30, 0xe4, 0x28, 0x15, 0x74, 0xca, 0x28, 0x19, 0x06, - 0x38, 0x17, 0x3f, 0x91, 0x72, 0x2e, 0x29, 0x01, 0x01, 0x78, 0x6e, 0x2f, 0xb9, 0x06, 0x90, 0x7f, 0x3b, 0xab, 0x10, 0x0e, 0x30, 0x7f, 0xc8, 0x54, - 0xcc, 0x04, 0x91, 0x9a, 0x4e, 0xb3, 0x7e, 0x06, 0x78, 0x17, 0x58, 0xd5, 0x03, 0xac, 0xb9, 0x44, 0xc5, 0x98, 0xb0, 0x06, 0x78, 0x17, 0x0e, 0xf2, - 0xff, 0x41, 0x25, 0x48, 0x11, 0x4c, 0x04, 0x4f, 0x04, 0x3d, 0x28, 0x1b, 0xc0, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x08, 0x0c, 0x0c, 0x0c, - 0x0d, 0x0c, 0x50, 0x08, 0x20, 0x06, 0x1e, 0x20, 0x05, 0x08, 0x08, 0xda, 0x15, 0x00, 0x99, 0x36, 0x00, 0x00, 0x0a, 0xa9, 0xd2, 0x30, 0x40, 0xde, - 0x28, 0x15, 0xc1, 0x30, 0xe3, 0x30, 0xeb, 0x30, 0x01, 0xfb, 0x30, 0xd7, 0x30, 0xe9, 0x30, 0xc7, 0x28, 0x25, 0x10, 0xb7, 0x30, 0xe5, 0x05, 0x68, - 0x25, 0x48, 0x00, 0x69, 0x00, 0x44, 0x6d, 0x2f, 0xaf, 0x63, 0x00, 0x68, 0x2f, 0xb5, 0x6c, 0x00, 0x10, 0x20, 0x00, 0x50, 0x4f, 0xbb, 0x64, 0x00, - 0x65, 0x00, 0x60, 0x73, 0x20, 0x13, 0x10, 0x14, 0xf0, 0x7f, 0x9c, 0x55, 0x6c, 0x9a, 0x55, 0x10, 0x50, 0x14, 0x5c, 0x06, 0x78, 0x17, 0x88, 0xd7, - 0xc8, 0xb9, 0x00, 0x30, 0xcc, 0x04, 0xd5, 0x7c, 0xb7, 0x70, 0xb3, 0x30, 0xdc, 0xc2, 0x06, 0x18, 0x1d, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x38, 0x04, - 0x50, 0x3c, 0x28, 0x1b, 0x47, 0x28, 0x1f, 0x3b, 0x04, 0x2d, 0x00, 0x40, 0x1f, 0x28, 0x25, 0x30, 0x04, 0x34, 0x04, 0x35, 0x04, 0x60, 0x48, 0x05, - 0x48, 0x25, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x0d, 0x0d, 0x0d, 0x0e, 0x28, 0x0d, 0x09, 0x20, 0x06, 0x1f, 0x20, 0x05, 0x09, 0x09, 0x1d, 0x22, 0x16, - 0xdf, 0x28, 0x17, 0x0c, 0xa9, 0xb1, 0x28, 0x15, 0xe9, 0xed, 0x28, 0x0d, 0x05, 0x58, 0x05, 0x00, 0x1f, 0xff, 0x4b, 0x27, 0xff, 0x38, 0x07, 0x6c, - 0x06, 0x4f, 0xad, 0x81, 0x10, 0x0f, 0x10, 0x7f, 0x80, 0x55, 0xc9, 0x62, 0xc9, 0x62, 0x06, 0x78, 0x15, 0x83, 0x2f, 0xff, 0xcf, 0x84, 0xb7, 0x7c, - 0xb7, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x6c, 0x1a, 0x28, 0x01, 0x38, 0x09, 0x3b, 0x28, 0x1b, 0x10, 0x1e, 0x34, 0xff, 0x0a, 0x10, 0x04, 0x11, - 0x10, 0x11, 0x11, 0x0a, 0x20, 0x06, 0x0d, 0x10, 0x01, 0x0a, 0x0a, 0x0a, 0x0a, 0x08, 0x06, 0xb2, 0x28, 0x17, 0x00, 0x0d, 0xa9, 0xe9, 0x30, 0xaf, - 0x30, 0xb7, 0x30, 0x01, 0xe3, 0x30, 0xc9, 0x30, 0xa6, 0x30, 0xa3, 0x28, 0x23, 0x2b, 0xd7, 0x30, 0x05, 0xdd, 0x37, 0x4c, 0x2f, 0xab, 0x6b, 0x4f, - 0x99, 0x3f, 0xa3, 0x45, 0x77, 0x2f, 0xa5, 0x65, 0x00, 0x70, 0x10, 0x05, 0xe0, 0x7f, 0x63, 0x2f, 0xad, 0x8c, 0x3f, 0xa1, 0x69, 0x00, 0x76, 0x2f, - 0xa5, 0x0d, 0xd1, 0xff, 0xc9, 0x62, 0x00, 0x4b, 0x51, 0x99, 0x6c, 0xa4, 0x7f, 0x9b, 0x5c, 0x00, 0x2d, 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, 0x8f, - 0x20, 0x3a, 0x53, 0x05, 0xbf, 0xb1, 0x7d, 0xb7, 0xe4, 0xc0, 0xdc, 0x06, 0xb4, 0x04, 0xc7, 0x04, 0xd5, 0x06, 0x5b, 0x97, 0x00, 0x11, 0xff, 0x6e, - 0x8d, 0x06, 0x03, 0xff, 0x71, 0x00, 0x75, 0x2f, 0x1d, 0x52, 0x7f, 0x61, 0x2f, 0x25, 0xa2, 0x05, 0xbc, 0xa1, 0x1b, 0x28, 0x13, 0x3a, 0x04, 0x48, - 0x28, 0x19, 0x34, 0x03, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3f, 0x05, 0xe8, 0x1d, 0x10, 0x07, 0x34, 0xff, 0x80, 0x0e, 0xb6, 0x7f, 0x0b, 0x11, 0x12, - 0x11, 0x12, 0x12, 0x0b, 0x80, 0x20, 0x06, 0x0e, 0x11, 0x0b, 0x0b, 0x0b, 0x0b, 0x83, 0x00, 0x07, 0xa3, 0x33, 0x00, 0x00, 0x0e, 0xa9, 0xde, 0x28, - 0x30, 0xcf, 0x28, 0x0d, 0xe9, 0x28, 0x11, 0xb7, 0x30, 0xe5, 0x25, 0x30, 0xc8, 0x20, 0x09, 0xde, 0x5d, 0x05, 0xbf, 0xb8, 0x4d, 0x2f, 0xab, 0x06, - 0x68, 0x00, 0x01, 0x01, 0x72, 0x20, 0x03, 0x38, 0x1d, 0x74, 0xd8, 0x4f, 0xbd, 0x05, 0xf0, 0x7f, 0x61, 0x4f, 0xb3, 0x10, 0x0e, 0x30, 0x7f, 0x6c, - 0x9a, 0xc8, 0x00, 0x54, 0xc9, 0x62, 0xbd, 0x65, 0x79, 0x72, 0xc9, 0x10, 0x62, 0xa6, 0x90, 0x06, 0x1f, 0xb3, 0xc8, 0xb9, 0x58, 0xd5, 0x00, 0x7c, - 0xb7, 0x88, 0xc2, 0xb8, 0xd2, 0x7c, 0xb7, 0x0d, 0x20, 0x00, 0xfc, 0xc8, 0x05, 0xff, 0xb4, 0x0e, 0xf2, 0xff, 0x1c, 0x28, 0x17, 0x51, 0x45, 0x28, - 0x1b, 0x40, 0x28, 0x1f, 0x48, 0x04, 0x42, 0x40, 0x07, 0xc0, 0x0e, 0x14, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0c, 0x13, 0x14, 0x13, 0x14, 0x14, 0x40, - 0x0c, 0x20, 0x06, 0x11, 0x13, 0x0c, 0x0c, 0x0c, 0x0c, 0x14, 0x7e, 0x0d, 0xc9, 0x28, 0x17, 0x0f, 0x28, 0x17, 0xcb, 0x30, 0x1a, 0xd7, 0x30, 0xeb, - 0x05, 0xe8, 0x0d, 0xd8, 0x17, 0x6e, 0x2e, 0xa9, 0x70, 0xa0, 0x2c, 0x33, 0x72, 0x10, 0x16, 0x20, 0x7f, 0xfc, 0x66, 0x3c, 0x5c, 0x6e, 0x18, 0x66, - 0x14, 0x5c, 0x06, 0x38, 0x13, 0x58, 0x17, 0xc8, 0xb2, 0x78, 0x1c, 0xd4, 0x74, 0xb9, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x3d, 0x04, - 0x06, 0x38, 0x04, 0x3f, 0x04, 0x43, 0x28, 0x1b, 0x10, 0x1e, 0x14, 0xff, 0x0d, 0x02, 0x14, 0x15, 0x14, 0x15, 0x15, 0x0d, 0x20, 0x06, 0x10, 0x00, - 0x14, 0x0d, 0x0d, 0x0d, 0x0d, 0xa5, 0x11, 0xcf, 0x00, 0x42, 0x00, 0x00, 0x10, 0xa9, 0xe1, 0x30, 0xac, 0x08, 0x30, 0xe9, 0x30, 0xe4, 0x06, 0xa8, - 0x17, 0x65, 0x00, 0x67, 0xac, 0x4b, 0x31, 0x6c, 0x2f, 0xb9, 0x79, 0x05, 0xcf, 0xab, 0xb0, 0x7f, 0x61, 0x00, 0x80, 0x10, 0x0e, 0x50, 0x7f, 0x85, - 0x68, 0xa0, 0x52, 0xc9, 0x62, 0x9a, 0x40, 0x4e, 0x06, 0x78, 0x17, 0x54, 0xba, 0x08, 0xac, 0x7c, 0xb7, 0x30, 0x7c, 0xc5, 0x06, 0x98, 0x17, 0x0e, - 0xd2, 0xff, 0x1c, 0x04, 0x35, 0x04, 0x15, 0x33, 0x04, 0x45, 0x28, 0x1d, 0x3b, 0x28, 0x21, 0x4f, 0x06, 0x08, 0x19, 0xc0, 0x07, 0x74, 0xff, 0x10, - 0x0e, 0x70, 0x7f, 0x0e, 0x15, 0x16, 0x15, 0x16, 0x16, 0x40, 0x0e, 0x20, 0x06, 0x12, 0x15, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x2e, 0x12, 0x56, 0x41, - 0x00, 0x00, 0x11, 0xa9, 0x00, 0xab, 0x30, 0xeb, 0x30, 0xca, 0x30, 0xfc, 0x30, 0x15, 0xbf, 0x30, 0xab, 0x06, 0x48, 0x1b, 0x4b, 0x2f, 0xaf, 0x72, - 0x2f, 0xb1, 0x16, 0x01, 0x01, 0x74, 0x2f, 0xb9, 0x6b, 0x06, 0x08, 0x17, 0x70, 0x7f, 0x61, 0x40, 0x00, 0x10, 0x0e, 0x50, 0x7f, 0x61, 0x53, 0xb3, - 0x7e, 0x54, 0x58, 0x20, 0x4b, 0x51, 0x06, 0x78, 0x17, 0x74, 0xce, 0x74, 0xb9, 0x98, 0x06, 0xb0, 0xc0, 0xd0, 0x74, 0xce, 0x06, 0x58, 0x19, 0x0e, - 0xf2, 0xff, 0x1a, 0x8a, 0x28, 0x11, 0x40, 0x04, 0x3d, 0x28, 0x17, 0x42, 0x28, 0x1b, 0x3a, 0xe0, 0x28, 0x1f, 0x0e, 0x54, 0xff, 0x10, 0x0e, 0x70, - 0x7f, 0x0f, 0x0f, 0x10, 0x0f, 0x10, 0x28, 0x10, 0x0f, 0x20, 0x06, 0x0c, 0x20, 0x04, 0x0f, 0x0f, 0x3b, 0x01, 0x09, 0x2b, 0x37, 0x00, 0x00, 0x12, - 0xa9, 0x38, 0x13, 0x41, 0xac, 0x28, 0x17, 0xe9, 0x30, 0xf3, 0x30, 0xc9, 0x06, 0x28, 0x19, 0x51, 0x4e, 0x2b, 0x29, 0x67, 0x6b, 0x2d, 0x6e, 0x00, - 0x64, 0x06, 0x0d, 0xb4, 0x58, 0x4e, 0x2f, 0xa9, 0x67, 0x6f, 0xad, 0x10, 0x0e, 0x30, 0x7f, 0xa3, 0x90, 0xa0, 0x20, 0x52, 0x70, 0x06, 0x88, 0x15, - 0x00, 0x00, 0x98, 0xb0, 0x08, 0x06, 0xac, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x58, 0x15, 0x0f, 0x12, 0xff, 0x1d, 0xa2, 0x28, 0x17, 0x33, 0x28, 0x1b, - 0x3b, 0x04, 0x35, 0x28, 0x1d, 0x34, 0xe0, 0x05, 0xe8, 0x15, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x10, 0x17, 0x18, 0x17, 0x18, 0x20, 0x18, - 0x10, 0x20, 0x06, 0x14, 0x17, 0x10, 0x10, 0x10, 0x00, 0x10, 0x40, 0x12, 0xed, 0x42, 0x00, 0x00, 0x13, 0x00, 0xa9, 0xaa, 0x30, 0xea, 0x30, 0xc3, - 0x30, 0xb5, 0xd0, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x4f, 0x28, 0x0b, 0x69, 0x00, 0x73, 0x00, 0x60, 0x68, 0x06, 0x0f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, - 0x65, 0x59, 0xcc, 0x91, 0x28, 0x40, 0x84, 0x06, 0x98, 0x17, 0x24, 0xc6, 0xac, 0xb9, 0xac, 0xc0, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1e, - 0x04, 0x40, 0x04, 0x38, 0x04, 0x58, 0x41, 0x20, 0x01, 0x30, 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x11, 0x18, 0x19, 0x08, 0x18, 0x19, 0x19, - 0x11, 0x20, 0x06, 0x15, 0x18, 0x11, 0x00, 0x11, 0x11, 0x11, 0x63, 0x0e, 0x09, 0x3d, 0x00, 0x00, 0x00, 0x14, 0xa9, 0xdd, 0x30, 0xf3, 0x30, 0xc7, - 0x02, 0x30, 0xa3, 0x30, 0xb7, 0x30, 0xa7, 0x28, 0x21, 0xfc, 0x44, 0x30, 0x05, 0xff, 0xb0, 0x50, 0x00, 0x75, 0x2f, 0xa5, 0x75, 0x00, 0x45, 0x63, - 0x28, 0x19, 0x65, 0x00, 0x72, 0x20, 0x01, 0x79, 0x05, 0xe0, 0x7f, 0x57, 0x6f, 0x4f, 0xa7, 0x69, 0x40, 0x81, 0xe9, 0x06, 0x20, 0x7f, 0x07, 0xb0, - 0xff, 0x06, 0x11, 0x81, 0x80, 0x06, 0xf1, 0xff, 0x2c, 0x67, 0x30, 0x57, 0xbb, 0x6c, 0xcc, 0x00, 0x91, 0x2d, 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, - 0x10, 0x8f, 0x3a, 0x53, 0x05, 0xdf, 0xb5, 0x01, 0xd4, 0x14, 0xb5, 0x0e, 0x70, 0xc1, 0xac, 0xb9, 0x06, 0x78, 0x97, 0x07, 0x11, 0xff, 0x06, 0xd2, - 0x7f, 0x1f, 0x02, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x34, 0x28, 0x1b, 0x48, 0x38, 0x04, 0x35, 0x48, 0x23, 0x0d, 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, - 0x12, 0x19, 0x1b, 0x00, 0x19, 0x1a, 0x1a, 0x12, 0x12, 0x19, 0x1a, 0x17, 0x00, 0x19, 0x12, 0x12, 0x12, 0x12, 0x7b, 0x08, 0xc4, 0x02, 0x38, 0x00, - 0x00, 0x15, 0xa9, 0xd1, 0x28, 0x17, 0xb8, 0x21, 0x30, 0xe3, 0x28, 0x11, 0xd6, 0x30, 0xde, 0x5d, 0x06, 0x34, 0x97, 0x55, 0x75, 0x27, 0x97, 0x6a, - 0x2f, 0xad, 0x62, 0x06, 0x65, 0x17, 0x65, 0x06, 0xe0, 0x7f, 0xd0, 0x06, 0xf0, 0xff, 0x07, 0x30, 0x7f, 0x79, 0x06, 0x81, 0xff, 0xc1, 0x65, 0x6e, - 0x90, 0x08, 0x6e, 0x66, 0xa6, 0x90, 0x06, 0x77, 0x97, 0x80, 0xd3, 0x90, 0x01, 0xc7, 0x0c, 0xbe, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x78, 0x17, 0xb0, - 0x0e, 0xd2, 0x7f, 0x1f, 0x28, 0x0d, 0x38, 0x17, 0x36, 0x04, 0x30, 0x04, 0x70, 0x31, 0x05, 0xe8, 0x13, 0x0f, 0x93, 0xff, 0x10, 0x06, 0x95, 0x7f, - 0x13, 0x1a, 0x1a, 0x1a, 0x00, 0x1b, 0x1b, 0x13, 0x13, 0x1a, 0x1b, 0x16, 0x1a, 0x00, 0x13, 0x13, 0x13, 0x13, 0xdb, 0x15, 0x9a, 0x36, 0x06, 0x00, - 0x00, 0x16, 0xa9, 0xe9, 0x28, 0x11, 0x38, 0x17, 0xb9, 0x28, 0x30, 0xbf, 0x28, 0x1b, 0xf3, 0x06, 0x08, 0x1b, 0x52, 0x00, 0x01, 0x44, 0x01, 0x38, - 0x15, 0x73, 0x00, 0x74, 0x2f, 0xaf, 0x01, 0x01, 0x5b, 0x6e, 0x05, 0xed, 0x38, 0x52, 0x28, 0x91, 0x90, 0x7f, 0x61, 0x2f, 0x3b, 0x10, 0x06, 0x90, - 0x7f, 0x40, 0xe1, 0x06, 0x01, 0x7d, 0x00, 0x00, 0xc9, 0x62, 0x3e, 0x8d, 0x08, 0xaf, 0x65, 0x66, 0x57, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0x90, 0x06, - 0xc7, 0xa4, 0xc2, 0xc4, 0xd0, 0x06, 0x78, 0x19, 0x07, 0xb2, 0xff, 0xe3, 0x2c, 0x00, 0x6f, 0x06, 0x0c, 0x98, 0x20, 0x28, 0x0f, 0x58, 0x15, 0x41, - 0x04, 0x17, 0x42, 0x04, 0x45, 0x28, 0x1d, 0x3d, 0x05, 0xc8, 0x1d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x14, 0x1b, 0x1c, 0x1b, 0x1c, - 0x1c, 0x14, 0x20, 0x06, 0x00, 0x18, 0x1b, 0x14, 0x14, 0x14, 0x14, 0x24, 0x13, 0x00, 0xea, 0x35, 0x00, 0x00, 0x17, 0xa9, 0xbf, 0x30, 0x01, 0xdf, - 0x30, 0xeb, 0x30, 0xfb, 0x30, 0xca, 0x28, 0x1f, 0x14, 0xc9, 0x30, 0xa5, 0x06, 0x08, 0x17, 0x54, 0x2f, 0xa9, 0x6d, 0x00, 0x01, 0x69, 0x00, 0x6c, - 0x00, 0x20, 0x00, 0x4e, 0x2f, 0xb5, 0x60, 0x64, 0x2f, 0x3f, 0x10, 0x15, 0xb0, 0x7f, 0xf0, 0x6c, 0x73, 0x7c, 0x14, 0x04, 0x5c, 0xb3, 0x7e, 0xb7, - 0x5f, 0x06, 0x58, 0x19, 0xc0, 0xd0, 0x03, 0x00, 0xbc, 0x98, 0xb0, 0x50, 0xb4, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x40, 0x22, 0x28, 0x17, 0x3c, - 0x04, 0x38, 0x04, 0x3b, 0x04, 0x16, 0x2d, 0x00, 0x1d, 0x48, 0x23, 0x43, 0x05, 0xc8, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x02, 0x1d, 0x1e, 0x1d, - 0x1e, 0x1e, 0x15, 0x20, 0x06, 0x1a, 0x00, 0x1d, 0x15, 0x15, 0x15, 0x15, 0x4d, 0x09, 0x17, 0x00, 0x39, 0x00, 0x00, 0x18, 0xa9, 0xc8, 0x30, 0xea, - 0x0d, 0x30, 0xd7, 0x30, 0xe9, 0x06, 0x08, 0x0f, 0x98, 0x17, 0x72, 0x28, 0x15, 0x58, 0x70, 0x28, 0x0d, 0x72, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, - 0x79, 0x72, 0xcc, 0x04, 0x91, 0x6e, 0x66, 0xc9, 0x62, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0xb8, 0xd2, 0xac, 0xb9, 0x04, 0xd5, 0x7c, 0xb7, 0xc5, - 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x22, 0x04, 0x40, 0x28, 0x15, 0x3f, 0x28, 0x0d, 0x60, 0x40, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x16, 0x1e, - 0x1f, 0x1e, 0x1f, 0x20, 0x1f, 0x16, 0x20, 0x06, 0x1b, 0x1e, 0x16, 0x16, 0x16, 0x00, 0x16, 0xf3, 0x10, 0xe8, 0x40, 0x00, 0x00, 0x19, 0x00, 0xa9, - 0x7f, 0x89, 0xd9, 0x30, 0xf3, 0x30, 0xac, 0x20, 0x30, 0xeb, 0x06, 0x68, 0x19, 0x57, 0x00, 0x65, 0x00, 0x73, 0x28, 0x00, 0x74, 0x2f, 0xad, 0x42, - 0x20, 0x09, 0x6e, 0x00, 0x67, 0xb0, 0x2f, 0xbf, 0x6c, 0x05, 0xaf, 0xb1, 0xb0, 0x75, 0x65, 0x00, 0x2d, 0x00, 0x16, 0x4f, 0x00, 0x63, 0x20, 0x01, - 0x69, 0x2f, 0xb7, 0x30, 0x8d, 0x74, 0xd5, 0x05, 0x00, 0x8d, 0x70, 0xff, 0x62, 0xc0, 0x87, 0x6e, 0x06, 0x40, 0xff, 0x61, 0x2f, 0xb3, 0xb0, 0x00, - 0x30, 0xff, 0x65, 0x06, 0xe0, 0x7f, 0x04, 0xbf, 0xc7, 0x7f, 0x89, 0x5f, 0x5b, 0x20, 0xa0, 0x52, 0x06, 0x98, 0x17, 0x1c, 0xc1, 0xb5, 0xbc, 0xe8, - 0x6f, 0xac, 0x06, 0x78, 0x15, 0x93, 0x7f, 0x2d, 0xe3, 0x09, 0x05, 0x72, 0x81, 0x00, 0x32, 0x7f, 0x05, 0x93, 0x7d, 0x14, 0x00, 0x00, 0x17, 0x28, - 0x0d, 0x3f, 0x28, 0x11, 0x34, 0x04, 0x40, 0x3d, 0x28, 0x17, 0x4f, 0x04, 0x20, 0x00, 0x11, 0x04, 0x55, 0x35, 0x20, 0x0b, 0x33, 0x28, 0x25, 0x3b, - 0x28, 0x31, 0x4f, 0x04, 0xe8, 0x2b, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x17, 0x21, 0x03, 0x21, 0x04, 0x03, 0x40, 0x17, 0x20, 0x06, - 0x0b, 0x21, 0x17, 0x17, 0x17, 0x17, 0x00, 0x0c, 0x10, 0xd7, 0x3e, 0x00, 0x00, 0x1a, 0xa9, 0x01, 0xb7, 0x30, 0xc3, 0x30, 0xad, 0x30, 0xe0, 0x06, - 0x68, 0x15, 0x14, 0x00, 0x00, 0x53, 0x2f, 0xad, 0x6b, 0x20, 0x01, 0x69, 0x00, 0x43, 0x6d, 0x10, 0x16, 0x40, 0x7f, 0x21, 0x95, 0xd1, 0x91, 0x06, - 0x78, 0x13, 0x3f, 0xff, 0x0e, 0xdc, 0xc2, 0xb4, 0xd0, 0x06, 0x98, 0x15, 0x0f, 0x21, 0xff, 0x27, 0xfb, 0x3a, 0x8c, 0x20, 0x01, 0x38, 0x04, 0x3c, - 0x04, 0xe8, 0x01, 0x10, 0x18, 0x54, 0xff, 0x18, 0x1c, 0x04, 0x1d, 0x1c, 0x1d, 0x1d, 0x18, 0x20, 0x06, 0x19, 0x1c, 0x00, 0x18, 0x18, 0x18, 0x18, - 0x6f, 0x13, 0x04, 0x3f, 0x81, 0x2c, 0xad, 0xa9, 0xdf, 0x30, 0xbe, 0x30, 0xe9, 0x06, 0xa8, 0x17, 0x41, 0x4d, 0x2f, 0x9b, 0x7a, 0x00, 0x6f, 0x00, - 0x72, 0x2f, 0xb1, 0xc0, 0x06, 0x38, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x73, 0x7c, 0x50, 0x4f, 0xc9, 0x62, 0x20, 0xc6, 0x59, 0x06, 0x78, 0x1b, 0xf8, - 0xbb, 0x70, 0xc8, 0x8c, 0x68, 0xb7, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x17, 0x37, 0x04, 0x3e, 0x0c, 0x04, 0x40, 0x04, 0x30, 0x06, - 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x16, 0x04, 0x17, 0x16, 0x17, 0x17, 0x19, 0x20, 0x06, 0x13, 0x16, 0x00, 0x19, 0x19, 0x19, 0x19, 0xe0, - 0x10, 0xee, 0x41, 0x00, 0x00, 0x00, 0x1d, 0xa9, 0xc0, 0x30, 0xde, 0x30, 0x00, 0xf3, 0x30, 0xfb, 0x30, 0xc7, 0x30, 0xa3, 0x30, 0x00, 0xa6, 0x30, - 0xf4, 0x76, 0x44, 0x8f, 0x30, 0x57, 0xa0, 0x05, 0xbf, 0xb8, 0x44, 0x48, 0x0f, 0x61, 0x00, 0x6e, 0x00, 0x20, 0xaa, 0x40, 0x05, 0x64, 0x20, 0x07, - 0x44, 0x2f, 0xc3, 0x75, 0x06, 0x20, 0x7f, 0x65, 0x37, 0x00, 0x74, 0x05, 0xe0, 0x7d, 0xd0, 0xff, 0x75, 0x07, 0x00, 0xff, 0x05, 0xf0, 0xfd, 0x71, - 0xff, 0x50, 0xe1, 0x41, 0xff, 0x79, 0x06, 0x20, 0x7f, 0xbe, 0x8f, 0xfc, 0x66, 0x00, 0x8c, 0x54, 0x2c, 0x7b, 0x4c, 0x4e, 0x2d, 0x4e, 0x00, 0x2e, - 0x59, 0xf4, 0x76, 0x96, 0x8f, 0x3a, 0x53, 0x80, 0x05, 0xbf, 0xbb, 0xe4, 0xb2, 0xcc, 0xb9, 0x14, 0xb5, 0xb0, 0x00, 0xc6, 0x20, 0x00, 0xf0, 0xc5, - 0x29, 0xbc, 0xc1, 0x1e, 0xc9, 0x60, 0xd5, 0x05, 0xd8, 0x21, 0xd2, 0xff, 0x33, 0x85, 0x06, 0x32, 0xff, 0xe3, 0xd0, 0x2c, 0x19, 0x06, 0x52, 0x7f, - 0x14, 0x48, 0x0f, 0x30, 0x04, 0x3d, 0x04, 0x15, 0x20, 0x00, 0x38, 0x20, 0x03, 0x14, 0x28, 0x27, 0x43, 0x05, 0xa8, 0x1f, 0xc0, 0x07, 0xb4, 0xff, - 0x10, 0x0e, 0x30, 0x7f, 0x1a, 0x08, 0x08, 0x08, 0x09, 0x08, 0x60, 0x1a, 0x30, 0x06, 0x20, 0x05, 0x1a, 0x1a, 0x84, 0x0e, 0xcd, 0x00, 0x33, 0x00, - 0x00, 0x1e, 0xa9, 0xb4, 0x30, 0xa2, 0x1a, 0x30, 0xde, 0x5d, 0x06, 0x5d, 0x2b, 0x3f, 0xff, 0x47, 0x2f, 0xab, 0x61, 0xc0, 0x06, 0x90, 0x7e, 0x10, - 0x0f, 0x00, 0x7f, 0x9c, 0x67, 0x3f, 0x96, 0xa6, 0x90, 0x81, 0x06, 0x92, 0xff, 0xe0, 0xac, 0x44, 0xc5, 0x20, 0x00, 0x05, 0xd8, 0x0b, 0x8c, 0x0f, - 0xb3, 0x7f, 0x13, 0x04, 0x3e, 0x28, 0x19, 0x10, 0x1e, 0x94, 0xff, 0x1b, 0x0a, 0x05, 0x0a, 0x0a, 0x0b, 0x0a, 0x1b, 0x20, 0x06, 0x05, 0x20, 0x05, - 0x00, 0x1b, 0x1b, 0x02, 0x0b, 0x80, 0x34, 0x00, 0x00, 0x00, 0x1f, 0xa9, 0xd3, 0x30, 0xcf, 0x30, 0xfc, 0x30, 0x50, 0xeb, 0x06, 0x88, 0x1b, 0x42, - 0x2f, 0x9d, 0x68, 0x00, 0x01, 0x01, 0x64, 0x72, 0x06, 0x68, 0x9a, 0x50, 0x7f, 0x61, 0x00, 0x10, 0x0e, 0x70, 0x7f, 0xd4, 0x6b, 0x08, 0xc8, 0x54, - 0x14, 0x5c, 0x06, 0x98, 0x19, 0x44, 0xbe, 0x58, 0x18, 0xd5, 0x74, 0xb9, 0x06, 0x98, 0x19, 0x0e, 0xf2, 0xff, 0x11, 0x04, 0x38, 0x2e, 0x04, 0x45, - 0x28, 0x19, 0x40, 0x06, 0x68, 0x1b, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x1c, 0x03, 0x04, 0x04, 0x04, 0x05, 0x04, 0x1c, 0x30, 0x06, 0x20, - 0x05, 0x00, 0x1c, 0x1c, 0x34, 0x12, 0x87, 0x3c, 0x00, 0x00, 0x00, 0x20, 0xa9, 0xde, 0x30, 0xc7, 0x30, 0xa3, 0x30, 0x01, 0xe4, 0x30, 0xfb, 0x30, - 0xd7, 0x30, 0xe9, 0x20, 0x0b, 0x05, 0xfc, 0x30, 0xb7, 0x30, 0xe5, 0x05, 0xa8, 0x25, 0x4d, 0x2f, 0xad, 0x51, 0x64, 0x28, 0x19, 0x79, 0x2f, 0xb5, - 0x20, 0x00, 0x50, 0x27, 0x9f, 0x8c, 0x30, 0x0f, 0x65, 0x00, 0x73, 0x28, 0x2d, 0x10, 0x15, 0x30, 0x7f, 0x2d, 0x4e, 0x20, 0x2e, 0x59, 0x06, 0x98, - 0x15, 0x00, 0x00, 0xc8, 0xb9, 0x14, 0x00, 0xb5, 0x44, 0xc5, 0x04, 0xd5, 0x7c, 0xb7, 0x70, 0x1a, 0xb3, 0xdc, 0xc2, 0x06, 0x18, 0x1f, 0x0e, 0xf3, - 0x7f, 0x1c, 0x28, 0x13, 0x34, 0x80, 0x28, 0x19, 0x4c, 0x04, 0x4f, 0x04, 0x2d, 0x00, 0x1f, 0xc6, 0x28, 0x1f, 0x30, 0x0f, 0x35, 0x04, 0x48, 0x05, - 0x68, 0x27, 0x10, 0x16, 0xf4, 0xff, 0x1d, 0x02, 0x12, 0x13, 0x12, 0x13, 0x13, 0x1d, 0x20, 0x06, 0x0f, 0x00, 0x12, 0x1d, 0x1d, 0x1d, 0x1d, 0x8b, - 0x10, 0x0a, 0x00, 0x37, 0x00, 0x00, 0x21, 0xa9, 0xa6, 0x30, 0xc3, 0x08, 0x30, 0xbf, 0x30, 0xeb, 0x06, 0x88, 0x17, 0x55, 0x00, 0x74, 0xf0, 0x20, - 0x01, 0x3f, 0xaf, 0x06, 0x38, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x17, 0x53, 0xb9, 0x65, 0x81, 0x06, 0xb8, 0x17, 0xb0, 0xc6, 0xc0, 0xd0, 0x74, 0xb9, - 0x06, 0x98, 0x17, 0x8b, 0x0e, 0xf3, 0x7f, 0x23, 0x04, 0x42, 0x20, 0x01, 0x30, 0x28, 0x0f, 0x06, 0x38, 0x15, 0x80, 0x10, 0x17, 0x14, 0xff, 0x1e, - 0x1f, 0x20, 0x1f, 0x20, 0x20, 0x1e, 0x80, 0x20, 0x06, 0x1c, 0x1f, 0x1e, 0x1e, 0x1e, 0x1e, 0x17, 0x00, 0x13, 0x8a, 0x39, 0x00, 0x00, 0x22, 0xa9, - 0xc1, 0x22, 0x30, 0xe3, 0x28, 0x19, 0xc6, 0x30, 0xa3, 0x28, 0x11, 0xb9, 0x3a, 0x30, 0xac, 0x28, 0x21, 0x05, 0x98, 0x13, 0x3f, 0xff, 0x43, 0x2f, - 0xab, 0x68, 0xc1, 0x2f, 0xb3, 0x38, 0x1d, 0x2b, 0x01, 0x73, 0x00, 0x67, 0x48, 0x23, 0xd8, 0x05, 0x78, 0x15, 0xd0, 0x7f, 0x69, 0x2f, 0xa5, 0x10, - 0x0d, 0xf0, 0x7f, 0xe5, 0x67, 0x82, 0x01, 0x84, 0xaf, 0x65, 0xa0, 0x52, 0x14, 0x5c, 0x06, 0x58, 0x1d, 0x00, 0x28, 0xcc, 0xf0, 0xd2, 0xa4, 0xc2, - 0x00, 0xac, 0x31, 0x74, 0xb9, 0x06, 0x18, 0x13, 0x0f, 0x32, 0xff, 0x27, 0x04, 0x45, 0x28, 0x15, 0x82, 0x38, 0x1b, 0x38, 0x04, 0x41, 0x04, 0x33, - 0x48, 0x21, 0x45, 0xe0, 0x05, 0x88, 0x15, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x1f, 0x06, 0x06, 0x06, 0x07, 0x28, 0x06, 0x1f, 0x20, 0x06, - 0x21, 0x20, 0x05, 0x1f, 0x1f, 0x19, 0x12, 0x0f, 0x0c, 0x3a, 0x2b, 0x2d, 0xa9, 0xb8, 0x28, 0x17, 0xfc, 0x83, 0x28, 0x0d, 0xab, 0x30, 0xf3, 0x30, - 0xc9, 0x05, 0xe8, 0x13, 0x3f, 0xff, 0x45, 0x4a, 0x48, 0x15, 0x72, 0x00, 0x6b, 0x48, 0x1d, 0x6e, 0x2f, 0xad, 0x81, 0x10, 0x15, 0xd0, 0x7f, 0x3e, - 0x8d, 0x4e, 0x57, 0xb7, 0x5f, 0x06, 0x58, 0x13, 0x80, 0x3f, 0xff, 0x90, 0xc7, 0x74, 0xb9, 0x78, 0xce, 0xdc, 0x62, 0xb4, 0x06, 0x58, 0x15, 0x0f, - 0x13, 0x7f, 0x14, 0x04, 0x36, 0x48, 0x0b, 0x3a, 0x8c, 0x48, 0x1f, 0x3d, 0x04, 0x34, 0x05, 0xa8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x20, 0x0e, 0x04, - 0x0f, 0x0e, 0x0f, 0x0f, 0x20, 0x20, 0x06, 0x0a, 0x0e, 0x00, 0x20, 0x20, 0x20, 0x20, 0x9c, 0x10, 0xad, 0x3c, 0x00, 0x00, 0x00, 0x24, 0xa9, 0xa6, - 0x30, 0xc3, 0x30, 0x1b, 0xbf, 0x30, 0xe9, 0x28, 0x1b, 0x06, 0x58, 0x19, 0x55, 0x4f, 0xa9, 0x3f, 0xa3, 0x60, 0x61, 0x06, 0x48, 0x1b, 0x10, 0x0e, - 0xf0, 0x7f, 0x4c, 0x4e, 0x54, 0x58, 0xc9, 0x40, 0x62, 0x06, 0x98, 0x1b, 0xb0, 0xc6, 0xc0, 0xd0, 0x7c, 0xb7, 0xc6, 0x06, 0x98, 0x19, 0x0e, 0xf3, - 0x7f, 0x23, 0x04, 0x42, 0x20, 0x01, 0x38, 0x19, 0x30, 0xc9, 0x06, 0x48, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x21, 0x20, 0x20, 0x01, 0x21, 0x21, 0x20, - 0x06, 0x40, 0x1d, 0x40, 0x07, 0x8e, 0x15, 0x7d, 0x37, 0x00, 0x00, 0x00, 0x25, 0xa9, 0x5d, 0x30, 0x6e, 0x30, 0xd6, 0x4e, 0x88, 0x06, 0x7d, 0x2d, - 0x00, 0x00, 0x4f, 0x28, 0x17, 0x68, 0x00, 0x65, 0xc5, 0x2f, 0xb1, 0x06, 0x5d, 0xb1, 0x41, 0x00, 0x75, 0x28, 0x99, 0x72, 0x20, 0x81, 0x8a, 0x06, - 0x5e, 0x31, 0x53, 0x00, 0x6f, 0x2f, 0xa5, 0x73, 0x29, 0x1d, 0x69, 0x22, 0x00, 0x67, 0x06, 0x20, 0x85, 0x41, 0x00, 0x6c, 0x40, 0xff, 0x6f, 0xb4, - 0x06, 0x6f, 0x30, 0x28, 0x42, 0x01, 0x3a, 0x15, 0x29, 0x06, 0x4f, 0xb2, 0x76, 0x51, 0x81, 0x06, 0xb2, 0xfd, 0x00, 0x00, 0x30, 0xae, 0xc0, 0xd0, - 0x06, 0xb0, 0x7f, 0x1e, 0x4f, 0x00, 0x76, 0x43, 0x7d, 0x32, 0x7d, 0x06, 0x53, 0xff, 0x53, 0x7f, 0x61, 0x88, 0x06, 0x64, 0x82, 0x1e, 0x04, 0x41, - 0x48, 0x17, 0x3b, 0x04, 0x4c, 0x8e, 0x28, 0x11, 0x4b, 0x04, 0x35, 0x05, 0xa8, 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x22, 0x42, 0x22, - 0xd0, 0x01, 0x56, 0x14, 0xe5, 0x36, 0x00, 0x3f, 0xff, 0x01, 0x00, 0x09, 0x0a, 0x09, 0x0b, 0x0a, 0x01, 0x01, 0x09, 0x00, 0x09, 0x09, 0x09, 0x01, - 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x0f, 0x01, 0x02, 0x0f, 0x02, 0x02, 0x01, 0x40, 0x0e, 0x20, 0x0b, 0x02, 0x02, 0x02, 0x03, 0x02, 0x01, 0xb1, - 0x20, 0x03, 0x03, 0x30, 0x06, 0x20, 0x05, 0x03, 0x03, 0x04, 0x20, 0x0c, 0x18, 0x04, 0x03, 0x04, 0x30, 0x06, 0x20, 0x05, 0x04, 0x04, 0x05, 0x00, - 0x05, 0x06, 0x05, 0x07, 0x06, 0x05, 0x05, 0x05, 0x20, 0x05, 0x21, 0x30, 0x04, 0x05, 0x06, 0x07, 0x08, 0x07, 0x00, 0x09, 0x08, 0x06, 0x06, 0x07, - 0x07, 0x07, 0x07, 0x20, 0x06, 0x06, 0x20, 0x07, 0x0b, 0x0c, 0x0b, 0x0d, 0x0c, 0x02, 0x07, 0x07, 0x0b, 0x0b, 0x06, 0x0b, 0x30, 0x13, 0x08, 0x00, - 0x0c, 0x0d, 0x0c, 0x0e, 0x0d, 0x08, 0x08, 0x0c, 0x00, 0x0c, 0x1f, 0x0c, 0x08, 0x08, 0x08, 0x08, 0x09, 0x00, 0x0d, 0x0e, 0x0d, 0x0f, 0x0e, 0x09, - 0x09, 0x0d, 0x10, 0x0d, 0x20, 0x0d, 0x30, 0x83, 0x0a, 0x10, 0x12, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0a, 0x10, 0x11, 0x0d, 0x10, 0x00, 0x0a, 0x0a, - 0x0a, 0x0a, 0x0b, 0x11, 0x13, 0x11, 0x00, 0x13, 0x13, 0x0b, 0x0b, 0x11, 0x12, 0x0e, 0x11, 0x00, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x13, 0x15, 0x13, - 0x00, 0x15, 0x15, 0x0c, 0x0c, 0x13, 0x14, 0x11, 0x13, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x14, 0x16, 0x14, 0x00, 0x16, 0x16, 0x0d, 0x0d, 0x14, - 0x15, 0x10, 0x14, 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x15, 0x17, 0x15, 0x00, 0x17, 0x17, 0x0e, 0x0e, 0x15, 0x16, 0x12, 0x15, 0x00, 0x0e, 0x0e, - 0x0e, 0x0e, 0x0f, 0x0f, 0x11, 0x0f, 0x01, 0x11, 0x11, 0x0f, 0x0f, 0x0f, 0x10, 0x0c, 0x20, 0x04, 0x80, 0x20, 0x06, 0x17, 0x19, 0x17, 0x19, 0x19, - 0x10, 0x10, 0x00, 0x17, 0x18, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x11, 0x18, 0x1a, 0x18, 0x1a, 0x1a, 0x11, 0x11, 0x00, 0x18, 0x19, 0x15, - 0x18, 0x11, 0x11, 0x11, 0x11, 0x00, 0x12, 0x1a, 0x1c, 0x19, 0x1b, 0x1b, 0x12, 0x12, 0x00, 0x1a, 0x1b, 0x18, 0x1a, 0x12, 0x12, 0x12, 0x12, 0x00, - 0x13, 0x1b, 0x1b, 0x1a, 0x1c, 0x1c, 0x13, 0x13, 0x00, 0x1b, 0x1c, 0x17, 0x1b, 0x13, 0x13, 0x13, 0x13, 0x01, 0x14, 0x1c, 0x1d, 0x1b, 0x1d, 0x1d, - 0x14, 0x20, 0x06, 0x00, 0x19, 0x1c, 0x14, 0x14, 0x14, 0x14, 0x15, 0x1e, 0x04, 0x1f, 0x1e, 0x1f, 0x1f, 0x15, 0x20, 0x06, 0x1b, 0x1e, 0x00, 0x15, - 0x15, 0x15, 0x15, 0x16, 0x1f, 0x20, 0x1f, 0x10, 0x20, 0x20, 0x16, 0x20, 0x06, 0x1c, 0x1f, 0x16, 0x16, 0x00, 0x16, 0x16, 0x17, 0x22, 0x04, 0x22, - 0x05, 0x04, 0x00, 0x17, 0x17, 0x22, 0x03, 0x0b, 0x22, 0x17, 0x17, 0x00, 0x17, 0x17, 0x18, 0x1d, 0x1e, 0x1c, 0x1e, 0x1e, 0x40, 0x18, 0x20, 0x06, - 0x1a, 0x1d, 0x18, 0x18, 0x18, 0x18, 0x08, 0x19, 0x16, 0x18, 0x16, 0x20, 0x05, 0x19, 0x16, 0x17, 0x00, 0x13, 0x16, 0x19, 0x19, 0x19, 0x19, 0x1a, - 0x08, 0x02, 0x09, 0x08, 0x0a, 0x09, 0x1a, 0x1a, 0x31, 0x1b, 0x1a, 0x00, 0x1a, 0x1a, 0x1a, 0x1b, 0x0a, 0x0b, 0x0a, 0x0c, 0x00, 0x0b, 0x1b, 0x1b, - 0x0a, 0x0a, 0x05, 0x0a, 0x1b, 0x00, 0x1b, 0x1b, 0x1b, 0x1c, 0x04, 0x05, 0x04, 0x06, 0x10, 0x05, 0x1c, 0x1c, 0x31, 0x7b, 0x1c, 0x1c, 0x1c, 0x1c, - 0x00, 0x1d, 0x12, 0x14, 0x12, 0x14, 0x14, 0x1d, 0x1d, 0x00, 0x12, 0x13, 0x0f, 0x12, 0x1d, 0x1d, 0x1d, 0x1d, 0x50, 0x1e, 0x4a, 0x0f, 0x1e, 0x20, - 0x06, 0x1d, 0x20, 0x1e, 0x1e, 0x00, 0x1e, 0x1e, 0x1f, 0x06, 0x07, 0x06, 0x08, 0x07, 0x00, 0x1f, 0x1f, 0x06, 0x06, 0x22, 0x06, 0x1f, 0x1f, 0x00, - 0x1f, 0x1f, 0x20, 0x0e, 0x10, 0x0e, 0x10, 0x10, 0x00, 0x20, 0x20, 0x0e, 0x0f, 0x0a, 0x0e, 0x20, 0x20, 0x42, 0x20, 0x2a, 0x3b, 0x22, 0x21, 0x22, - 0x22, 0x2a, 0x41, 0x22, 0x40, 0x1e, 0x3a, 0x46, 0x21, 0x22, 0x19, 0x03, 0x1d, 0x01, 0x01, 0x01, 0x22, 0x22, 0x19, 0x1a, 0x16, 0x19, 0x32, 0x43, - 0x04, 0xff, 0xff, 0xff, 0xff, 0x07, 0x2f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0xb8, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x3d, 0x1f, 0xd7, 0x08, 0x00, 0x00, 0x00, - 0x01, 0xb8, 0xb5, 0x30, 0xf3, 0x30, 0xde, 0x04, 0x30, 0xea, 0x30, 0xce, 0x30, 0x06, 0x58, 0x1f, 0x53, 0x00, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, - 0x00, 0x4d, 0x20, 0x07, 0x16, 0x72, 0x00, 0x69, 0x20, 0x0b, 0x6f, 0x06, 0x00, 0x7f, 0x30, 0x75, 0x74, 0x38, 0x00, 0x2d, 0xa0, 0x83, 0x0d, 0xd0, - 0xff, 0x0e, 0xb0, 0x7f, 0x23, 0x57, 0x6c, 0x04, 0x9a, 0x9b, 0x52, 0xfa, 0x8b, 0x06, 0x7b, 0x1d, 0xb0, 0xc0, 0x03, 0xc8, 0xb9, 0xac, 0xb9, 0x78, - 0xb1, 0x06, 0x7b, 0x9d, 0x07, 0x13, 0x7f, 0x68, 0xe3, 0x23, 0xf1, 0xb3, 0xff, 0x68, 0x05, 0xc4, 0x01, 0x21, 0x04, 0x30, 0x02, 0x04, 0x3d, 0x04, - 0x2d, 0x00, 0x1c, 0x20, 0x07, 0x40, 0x26, 0x04, 0x38, 0x20, 0x0b, 0x3e, 0x04, 0x10, 0x05, 0xb3, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x78, 0x01, - 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0xb9, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xcb, 0x1d, 0xda, 0x08, 0x00, 0x00, 0x00, 0x01, 0xb9, 0xd0, 0x30, 0xc1, 0x30, 0xab, 0x10, 0x30, 0xf3, 0x30, 0x06, 0x78, 0x1d, 0x56, 0x00, - 0x61, 0x00, 0x04, 0x74, 0x00, 0x69, 0x00, 0x63, 0x20, 0x07, 0x6e, 0x00, 0x11, 0x20, 0x00, 0x43, 0x20, 0x0b, 0x74, 0x00, 0x79, 0x06, 0x60, 0x7f, - 0xa8, 0x06, 0x90, 0xff, 0x6b, 0x40, 0xff, 0x73, 0x21, 0x0b, 0x61, 0x00, 0x64, 0xd4, 0x21, 0x11, 0x06, 0x51, 0x7f, 0x6f, 0x21, 0x81, 0x28, 0x61, - 0x83, 0x74, 0x00, 0x40, 0xe0, 0x21, 0x8f, 0x64, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x60, 0x29, 0x05, 0x80, 0x7f, 0x05, 0xfa, 0xa5, 0xb5, 0x68, 0x82, - 0x84, 0x88, 0x41, 0x51, 0x06, 0xab, 0x17, 0xbc, 0xf0, 0xd2, 0x78, 0xce, 0x06, 0x9b, 0x9b, 0xea, 0xb3, 0x7f, 0xb2, 0x81, 0x06, 0xb2, 0x7f, 0x63, - 0x24, 0x0f, 0x64, 0x43, 0x07, 0x65, 0xc0, 0x04, 0xa2, 0x79, 0x5d, 0x18, 0x12, 0x04, 0x30, 0x04, 0x42, 0x04, 0x13, 0x38, 0x04, 0x3a, 0x20, 0x07, - 0x3d, 0x04, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x11, 0x14, 0x6a, 0x00, 0x11, 0x0c, 0x00, 0x00, 0x30, 0x01, 0x40, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x63, 0x1d, 0x19, 0x0e, 0x00, 0x00, 0x00, 0x02, 0x40, 0xc6, 0x30, 0xa3, 0x30, 0xe9, 0x04, 0x30, 0xca, 0x30, 0xde, 0x5d, 0x06, 0x58, 0x1f, - 0x54, 0x00, 0x01, 0x69, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x20, 0x03, 0x81, 0x10, 0x16, 0x30, 0x7f, 0x30, 0x57, 0xc9, 0x62, 0xa3, 0x90, 0x06, - 0x72, 0xfd, 0x00, 0x00, 0x00, 0xf0, 0xd2, 0x7c, 0xb7, 0x98, 0xb0, 0x08, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x53, 0x7f, 0x22, 0x04, 0x38, 0x03, - 0x04, 0x40, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x10, 0x1e, 0x34, 0xff, 0x15, 0x01, 0x0b, 0x0b, 0x20, 0x01, 0x01, 0x20, 0x06, 0x09, 0x20, 0x05, - 0x22, 0x01, 0x01, 0x58, 0x17, 0x03, 0x40, 0xd9, 0x28, 0x15, 0xc8, 0x82, 0x06, 0x88, 0x15, 0x00, 0x00, 0x42, 0x00, 0x65, 0x48, 0x17, 0x74, 0xa4, - 0x10, 0x16, 0x60, 0x7f, 0xf9, 0x28, 0x17, 0x79, 0x72, 0x06, 0x98, 0x17, 0xa0, 0xbc, 0x0c, 0x7c, 0xb7, 0xb8, 0xd2, 0x06, 0x98, 0x17, 0x0e, 0xf3, - 0x7f, 0x11, 0x04, 0x5a, 0x35, 0x48, 0x17, 0x42, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x02, 0x28, 0x0c, 0x03, 0x30, 0x01, 0x02, 0x30, 0x06, - 0x20, 0x05, 0x02, 0x02, 0xf2, 0x1c, 0x40, 0x33, 0x28, 0x17, 0x04, 0x40, 0xc7, 0x30, 0xa3, 0x30, 0x68, 0xd6, 0x28, 0x1b, 0x06, 0x7d, 0x31, 0x44, - 0x2f, 0xaf, 0x62, 0x00, 0xeb, 0xf0, 0x2f, 0xb3, 0x0e, 0xb0, 0x7f, 0x3f, 0xb1, 0x10, 0x06, 0x51, 0x7f, 0xea, 0x8f, 0xc3, 0x52, 0x20, 0xc9, 0x62, - 0x06, 0x9b, 0x17, 0x14, 0xb5, 0x0c, 0xbe, 0x7c, 0x60, 0xb7, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x38, 0x04, 0x31, 0xe8, 0x48, 0x19, - 0x10, 0x06, 0xb4, 0xff, 0x10, 0x06, 0x90, 0xff, 0x03, 0x28, 0x0c, 0x05, 0x02, 0x03, 0xa0, 0x20, 0x06, 0x04, 0x20, 0x05, 0x03, 0x03, 0xa4, 0x1d, - 0x89, 0xaa, 0x28, 0x17, 0x05, 0x28, 0x17, 0xe5, 0x28, 0x15, 0xb9, 0x06, 0xa8, 0x17, 0x75, 0xa8, 0x2f, 0xaf, 0x72, 0x28, 0x19, 0x73, 0x10, 0x06, - 0xa0, 0x7f, 0x61, 0x00, 0x7a, 0xa0, 0x20, 0x01, 0x6f, 0x0e, 0x21, 0xff, 0xfd, 0x90, 0xc9, 0x62, 0xaf, 0x40, 0x65, 0x06, 0x98, 0x17, 0x50, 0xb4, - 0xec, 0xb7, 0xa4, 0xc2, 0xc4, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x14, 0x04, 0x43, 0x28, 0x15, 0x40, 0x04, 0x1d, 0x35, 0x04, 0x41, 0x06, 0x48, - 0x19, 0x10, 0x07, 0x54, 0xff, 0x0e, 0x96, 0x7f, 0x04, 0x28, 0x0c, 0x14, 0x06, 0x03, 0x04, 0x20, 0x06, 0x05, 0x20, 0x05, 0x04, 0x04, 0x00, 0x62, - 0x1d, 0xd5, 0x0d, 0x00, 0x00, 0x06, 0x40, 0x00, 0xa8, 0x30, 0xeb, 0x30, 0xd0, 0x30, 0xb5, 0x30, 0x45, 0xf3, 0x06, 0x68, 0x19, 0x45, 0x00, 0x6c, - 0x2f, 0xaf, 0x61, 0x28, 0x15, 0x10, 0x61, 0x00, 0x6e, 0x10, 0x16, 0x20, 0x7f, 0x31, 0x72, 0x14, 0x5c, 0x08, 0xf4, 0x5d, 0x51, 0x68, 0x06, 0x7b, - 0x17, 0xd8, 0xc5, 0x14, 0x18, 0xbc, 0xb0, 0xc0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x3b, 0x02, 0x04, 0x4c, 0x04, 0x31, 0x04, 0x30, - 0x28, 0x17, 0x30, 0x34, 0x04, 0x3d, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x05, 0x28, 0x0c, 0x07, 0x04, 0x50, 0x05, 0x20, 0x06, 0x0c, 0x20, - 0x05, 0x05, 0x05, 0x30, 0x1d, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x07, 0x40, 0xd5, 0x30, 0x30, 0xa3, 0x30, 0x38, 0x1b, 0x06, 0x7d, 0x31, 0x46, 0x00, - 0x69, 0x00, 0x70, 0x65, 0x2f, 0xb1, 0x06, 0x7d, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x39, 0x8d, 0xcc, 0x91, 0xc0, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x3c, - 0xd5, 0xd0, 0xc5, 0x74, 0xb9, 0xc0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x24, 0x04, 0x38, 0x04, 0x35, 0x04, 0x68, 0x40, 0x20, 0x05, 0x10, 0x1e, - 0x54, 0xff, 0x06, 0x28, 0x0c, 0x08, 0x05, 0x06, 0xa0, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x06, 0x06, 0xf5, 0x1c, 0xea, 0x00, 0x0d, 0x00, 0x00, 0x08, - 0x40, 0xae, 0x30, 0xed, 0x00, 0x30, 0xab, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0xe9, 0x88, 0x06, 0x48, 0x1b, 0x47, 0x00, 0x6a, 0x28, 0x19, 0x72, 0x00, - 0x6f, 0x23, 0x00, 0x6b, 0x4f, 0xb5, 0x74, 0x00, 0xeb, 0x05, 0xc8, 0x25, 0x08, 0x10, 0x7f, 0x6a, 0x72, 0x2f, 0xbd, 0x05, 0x9f, 0xb8, 0x41, 0x29, - 0x93, 0x67, 0x61, 0x81, 0x63, 0xa0, 0x80, 0x81, 0x6f, 0x0d, 0x80, 0xff, 0x09, 0x54, 0xfa, 0x8b, 0x61, 0x04, 0x53, 0xaf, 0x65, 0x79, 0x72, 0x06, - 0x5b, 0x19, 0xc0, 0xc9, 0x00, 0x5c, 0xb8, 0x74, 0xce, 0xa4, 0xc2, 0x30, 0xd1, 0xd0, 0x06, 0x58, 0x1d, 0x0e, 0xf2, 0xff, 0x13, 0x28, 0x17, 0x40, - 0x04, 0x3e, 0x04, 0x01, 0x3a, 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x28, 0x21, 0x74, 0x30, 0x05, 0xc8, 0x21, 0x10, 0x00, 0x14, 0xff, 0x10, 0x05, - 0xd0, 0xff, 0x07, 0x28, 0x0c, 0x02, 0x06, 0x50, 0x07, 0x20, 0x06, 0x03, 0x20, 0x05, 0x07, 0x07, 0x7f, 0x1c, 0x20, 0x53, 0x0e, 0x25, 0x15, 0x40, - 0xb3, 0x30, 0xeb, 0x30, 0x1a, 0xc1, 0x30, 0xe3, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x4b, 0x28, 0x11, 0x72, 0x3d, 0x00, 0xe7, 0x28, 0x0d, 0x0e, 0xd0, - 0x7f, 0x05, 0xb8, 0x0b, 0xbf, 0xff, 0x43, 0x41, 0x7f, 0x18, 0x69, 0x00, 0x7a, 0x06, 0x60, 0x81, 0x06, 0xf1, 0xff, 0xd1, 0x79, 0x14, 0x10, 0x5c, - 0xdf, 0x5b, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x54, 0xcf, 0x0d, 0x74, 0xb9, 0x98, 0xcc, 0x06, 0x38, 0x11, 0x0f, 0x53, 0x7f, 0x1a, 0x28, 0x13, 0x1d, - 0x40, 0x04, 0x47, 0x05, 0xe8, 0x0d, 0x10, 0x00, 0x14, 0xff, 0x10, 0x06, 0x70, 0xff, 0x08, 0x28, 0x0c, 0x14, 0x04, 0x07, 0x08, 0x20, 0x06, 0x06, - 0x20, 0x05, 0x08, 0x08, 0x10, 0xe2, 0x1c, 0xc8, 0x28, 0x17, 0x0a, 0x40, 0xaf, 0x30, 0x1a, 0xb1, 0x30, 0xb9, 0x06, 0x88, 0x15, 0x38, 0x17, 0x75, - 0x2f, 0xa9, 0xeb, 0xc0, 0x2f, 0xa9, 0x10, 0x16, 0x50, 0x7f, 0x93, 0x5e, 0x4b, 0x51, 0xaf, 0x65, 0x81, 0x06, 0x98, 0x17, 0xe0, 0xcf, 0xe4, 0xce, - 0xa4, 0xc2, 0x06, 0xb8, 0x17, 0x80, 0x0e, 0xd3, 0x7f, 0x1a, 0x04, 0x43, 0x04, 0x3a, 0x04, 0x35, 0x34, 0x04, 0x41, 0x06, 0x88, 0x17, 0x10, 0x16, - 0xd4, 0xff, 0x09, 0x28, 0x0c, 0x09, 0x08, 0x50, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, 0x09, 0x09, 0xec, 0x1d, 0x40, 0x87, 0x28, 0x17, 0x0b, 0x40, - 0xec, 0x30, 0xb8, 0x30, 0x45, 0xe3, 0x06, 0xa8, 0x17, 0x4c, 0x00, 0x65, 0x2e, 0xab, 0x68, 0x06, 0x8f, 0xaf, 0xc1, 0x07, 0x70, 0x7f, 0x06, 0x5f, - 0xad, 0x00, 0x00, 0x41, 0x00, 0x6c, 0x21, 0x81, 0x58, 0x73, 0x29, 0x97, 0x69, 0x2f, 0xb9, 0x0e, 0x11, 0xff, 0xb1, 0x83, 0xc0, 0x63, 0x4e, 0x06, - 0x9b, 0x15, 0x2b, 0xaf, 0xb8, 0x00, 0xc8, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x47, 0x1b, 0x28, 0x13, 0x36, 0x04, 0x30, 0x06, 0x68, 0x15, 0x0f, - 0x94, 0xff, 0x10, 0x06, 0x70, 0xff, 0x45, 0x0a, 0x28, 0x0c, 0x01, 0x09, 0x0a, 0x20, 0x06, 0x08, 0x20, 0x05, 0x00, 0x0a, 0x0a, 0xb6, 0x1d, 0xf9, - 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x40, 0xb7, 0x30, 0xe5, 0x30, 0xb3, 0x30, 0x15, 0xc9, 0x30, 0xe9, 0x06, 0x68, 0x1b, 0x53, 0x28, 0x13, 0x6b, 0x26, - 0x91, 0x54, 0x64, 0x2f, 0xb3, 0x72, 0x0e, 0xc0, 0x7f, 0x72, 0x06, 0x48, 0x1b, 0x53, 0x00, 0x56, 0x63, 0x2f, 0xb1, 0x74, 0x28, 0x97, 0x72, 0x28, - 0x19, 0x0e, 0x11, 0xff, 0xaf, 0x04, 0x65, 0x93, 0x5e, 0xf0, 0x53, 0x06, 0x9b, 0x17, 0x88, 0xc2, 0x03, 0x54, 0xcf, 0x54, 0xb3, 0x74, 0xb9, 0x06, - 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x01, 0x28, 0x04, 0x3a, 0x04, 0x3e, 0x04, 0x34, 0x28, 0x1d, 0x74, 0x40, 0x06, 0x48, 0x1b, 0x0f, 0x94, 0xff, 0x10, - 0x06, 0x50, 0xff, 0x0b, 0x38, 0x0c, 0x0a, 0x0b, 0xa0, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x0b, 0x0b, 0xeb, 0x1d, 0xe2, 0x83, 0x28, 0x17, 0x0d, 0x40, - 0xf4, 0x30, 0xed, 0x06, 0x88, 0x13, 0x3f, 0xff, 0x5f, 0x56, 0x2e, 0xaf, 0x6f, 0x28, 0x11, 0x06, 0x7f, 0xaf, 0x07, 0x70, 0x7f, 0x06, 0x38, 0x13, - 0x51, 0x7f, 0x58, 0x61, 0x41, 0x81, 0x6e, 0x06, 0x60, 0x81, 0x06, 0xf1, 0xff, 0xd1, 0x53, 0x57, 0x10, 0x7f, 0xc9, 0x62, 0x06, 0x98, 0x17, 0x14, - 0xbe, 0x5c, 0xb8, 0x30, 0xec, 0xb7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x12, 0x04, 0x3b, 0x04, 0x5c, 0x51, 0x28, 0x13, 0x30, 0x06, 0x48, 0x15, - 0x0f, 0x94, 0xff, 0x10, 0x06, 0x70, 0xff, 0x0c, 0x0c, 0xa3, 0x70, 0x01, 0x02, 0x40, 0x0a, 0xc7, 0x1c, 0xdb, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x4a, - 0x01, 0x38, 0x34, 0x0b, 0x01, 0x20, 0x06, 0x09, 0x20, 0x05, 0x01, 0x23, 0x01, 0x02, 0x20, 0x04, 0x03, 0x01, 0x02, 0x30, 0x06, 0x20, 0x05, 0x11, - 0x02, 0x02, 0x03, 0x20, 0x04, 0x05, 0x02, 0x03, 0x20, 0x06, 0x44, 0x04, 0x20, 0x05, 0x03, 0x03, 0x04, 0x20, 0x04, 0x06, 0x03, 0x51, 0x04, 0x20, - 0x06, 0x05, 0x20, 0x05, 0x04, 0x04, 0x05, 0x20, 0x04, 0x14, 0x07, 0x04, 0x05, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x05, 0x05, 0x45, 0x06, 0x20, 0x04, - 0x08, 0x05, 0x06, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x11, 0x06, 0x06, 0x07, 0x20, 0x04, 0x02, 0x06, 0x07, 0x20, 0x06, 0x44, 0x03, 0x20, 0x05, 0x07, - 0x07, 0x08, 0x20, 0x04, 0x04, 0x07, 0x51, 0x08, 0x20, 0x06, 0x06, 0x20, 0x05, 0x08, 0x08, 0x09, 0x40, 0x03, 0x51, 0x09, 0x20, 0x06, 0x07, 0x20, - 0x05, 0x09, 0x09, 0x0a, 0x20, 0x04, 0x17, 0x01, 0x09, 0x0a, 0x20, 0x06, 0x08, 0x20, 0x05, 0x38, 0xd5, 0xd8, 0xdf, 0xc0, 0xf0, 0xd7, 0x3f, 0xf2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x74, 0x49, 0x00, 0x11, 0x08, 0x00, 0x00, 0x30, 0x01, 0x41, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe7, 0xe7, 0x8c, 0x6b, 0x00, 0x00, 0x00, 0x02, 0x41, 0xaa, 0x30, 0xfc, 0x30, 0xb9, 0x00, - 0x30, 0xc8, 0x30, 0xe9, 0x30, 0xea, 0x30, 0xa2, 0x00, 0x30, 0x96, 0x99, 0xfd, 0x90, 0x79, 0x72, 0x25, 0x04, 0x52, 0x30, 0x57, 0xdf, 0x57, 0x05, - 0x58, 0x2f, 0x41, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x04, 0x61, 0x00, 0x6c, 0x00, 0x69, 0x20, 0x05, 0x6e, 0x00, 0x15, - 0x20, 0x00, 0x43, 0x20, 0x0d, 0x70, 0x20, 0x0d, 0x74, 0x40, 0x15, 0x05, 0x20, 0x00, 0x54, 0x00, 0x65, 0x20, 0x21, 0x72, 0x40, 0x11, 0x5a, 0x6f, - 0x20, 0x2b, 0x79, 0x03, 0x88, 0xcc, 0xd0, 0x59, 0x69, 0x20, 0x87, 0x65, 0xa8, 0x20, 0x7f, 0x64, 0x40, 0x05, 0x6c, 0x20, 0x93, 0x20, 0x00, 0x63, - 0xd5, 0xc0, 0x8b, 0x30, 0x1d, 0x61, 0xe0, 0xb3, 0x65, 0x20, 0xb3, 0x6e, 0x20, 0xa1, 0xaa, 0x03, 0x30, 0xff, 0x73, 0x20, 0x6f, 0x68, 0x20, 0xed, - 0x73, 0x21, 0x05, 0x48, 0xb5, 0x40, 0x69, 0x70, 0x21, 0x1d, 0x31, 0x21, 0x61, 0x20, 0x95, 0x74, 0x21, 0x29, 0xad, 0xd1, 0x09, 0x69, 0x21, 0x3f, - 0x6d, 0x03, 0x80, 0xff, 0x31, 0x61, 0x6f, 0x60, 0xff, 0x7b, 0x6c, 0x60, 0xff, 0xd1, 0x8b, 0x31, 0x1d, 0x00, 0x31, 0xb3, 0x61, 0x04, 0x00, 0x7f, - 0x71, 0x7f, 0xc0, 0xf2, 0x0b, 0x03, 0xb0, 0x7d, 0x00, 0x00, 0xb3, 0x6f, 0x27, 0x59, 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x32, 0xf9, 0xf4, 0x76, 0x96, - 0x10, 0x8f, 0x3a, 0x53, 0x05, 0xdb, 0x27, 0x24, 0xc6, 0xa4, 0xc2, 0x00, 0xb8, 0xd2, 0x08, 0xb8, 0x7c, 0xc7, 0xac, 0xb9, 0x00, 0x44, 0xc5, 0x90, - 0xce, 0x3c, 0xd5, 0x38, 0xd1, 0x07, 0x4c, 0xd1, 0xac, 0xb9, 0xa0, 0x20, 0x03, 0x06, 0x33, 0x7f, 0x52, 0x7f, 0xad, 0x32, 0x7b, 0x6f, 0x23, 0x69, - 0x66, 0x23, 0x09, 0x33, 0x9d, 0x65, 0x62, 0x11, 0x07, 0x69, 0x00, 0x6a, 0x00, 0x6b, 0x00, 0x23, 0x8f, 0x02, 0x92, 0x85, 0xb3, 0xd9, 0x70, 0xf3, - 0xa2, 0x7f, 0x05, 0x11, 0xf9, 0x5d, 0x18, 0x10, 0x04, 0x32, 0x04, 0x00, 0x41, 0x04, 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x05, 0x3b, 0x04, 0x38, - 0x04, 0x39, 0x20, 0x0d, 0x3a, 0x20, 0x0b, 0x34, 0x4f, 0x04, 0x22, 0xe7, 0x20, 0x17, 0x3e, 0x40, 0x15, 0x47, 0x04, 0x45, 0x3d, 0x60, 0x13, 0x42, - 0x04, 0x35, 0x20, 0x2b, 0x40, 0x20, 0x29, 0xcc, 0x30, 0x1b, 0x30, 0x07, 0x4f, 0x04, 0x0a, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0x06, - 0x06, 0x01, 0x07, 0x06, 0x01, 0x30, 0x06, 0x20, 0x04, 0x01, 0x00, 0x01, 0xdd, 0xe6, 0xfc, 0x69, 0x00, 0x00, 0x03, 0x08, 0x41, 0xcb, 0x30, 0xe5, - 0x28, 0x19, 0xb5, 0x30, 0xa6, 0x88, 0x28, 0x1d, 0xa6, 0x30, 0xa7, 0x28, 0x25, 0xeb, 0x30, 0xba, 0x15, 0x30, 0xde, 0x5d, 0x05, 0x7f, 0xc5, 0x4e, - 0x27, 0xf1, 0x77, 0x28, 0x09, 0x5a, 0x53, 0x27, 0xef, 0x75, 0x28, 0x1f, 0x34, 0x93, 0x57, 0x67, 0x81, 0x73, 0xd0, 0x05, 0x40, 0x7f, 0x30, 0x77, - 0x76, 0x67, 0x07, 0x65, 0x00, 0x2d, 0x00, 0x75, 0x47, 0x48, 0xa1, 0x50, 0x7f, 0x38, 0x21, 0x75, 0x40, 0x9d, 0x75, 0x28, 0x2b, 0xd6, 0x04, 0x70, - 0xff, 0x39, 0x19, 0xfc, 0x28, 0x8b, 0x77, 0x05, 0xa0, 0xf7, 0x91, 0x7f, 0x75, 0xbe, 0x29, 0x69, 0x76, 0x48, 0x0d, 0xf0, 0xf9, 0x38, 0x1b, 0x04, - 0xb0, 0xfb, 0x70, 0x7f, 0x65, 0xf4, 0x21, 0x7f, 0x39, 0x81, 0x51, 0x79, 0x00, 0x10, 0x7d, 0x72, 0x04, 0xaf, 0xd2, 0xb0, 0x65, 0x00, 0x57, 0x53, - 0x01, 0x5a, 0x14, 0x5c, 0xeb, 0x58, 0xc1, 0x05, 0x92, 0xf3, 0xbf, 0xff, 0x74, 0xb2, 0xac, 0xc0, 0xb0, 0x28, 0x1b, 0x00, 0xe8, 0xc6, 0x7c, 0xc7, - 0xa4, 0xc2, 0x20, 0x00, 0x2a, 0xfc, 0xc8, 0x05, 0xdf, 0xbf, 0x4e, 0x4a, 0xd7, 0x75, 0x23, 0x83, 0x2d, 0x2b, 0x00, 0x5a, 0x2b, 0xa3, 0x69, 0x2b, - 0x13, 0x2d, 0x05, 0xa3, 0x81, 0x33, 0x7f, 0xea, 0x00, 0x31, 0xfd, 0x3a, 0x9d, 0x33, 0x75, 0x6c, 0x04, 0xef, 0xce, 0x1d, 0x27, 0xf9, 0x32, 0x20, - 0x04, 0x4b, 0x28, 0x0f, 0x20, 0x00, 0x2e, 0x04, 0x36, 0xc5, 0x27, 0xff, 0x50, 0x0b, 0x23, 0x04, 0x4d, 0x28, 0x27, 0x4c, 0x28, 0x33, 0xc0, 0x0c, - 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x50, 0x02, 0x20, 0x06, 0x05, 0x20, 0x04, 0x02, 0x02, 0xe7, 0xe7, 0x01, - 0x8c, 0x6b, 0x00, 0x00, 0x04, 0x41, 0xce, 0x28, 0x15, 0x00, 0xb6, 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xea, 0x30, 0x4f, 0xc8, 0x20, 0x03, 0xfc, 0x30, - 0x05, 0xf4, 0x97, 0x3f, 0xff, 0x38, 0x0f, 0x3f, 0xb7, 0xef, 0x3b, 0x2b, 0x04, 0x9b, 0x1b, 0x01, 0x1f, 0x2f, 0x69, 0x2f, 0xb7, 0x3f, 0x11, 0x58, - 0x0d, 0x50, 0x9b, 0xdf, 0x04, 0x97, 0x13, 0x59, 0x17, 0xf6, 0x40, 0x63, 0x3f, 0x77, 0x3d, 0xa9, 0x58, 0x8d, 0x03, 0x9d, 0x8f, 0xfc, 0x02, 0x9f, - 0xaf, 0x3f, 0x9b, 0x05, 0x11, 0x01, 0x01, 0x30, 0x7f, 0x3e, 0xaf, 0x04, 0x7f, 0xc5, 0x17, 0x53, 0x03, 0xe8, 0x90, 0x30, 0x57, 0x3a, 0x53, 0x06, - 0x38, 0x13, 0x3f, 0xff, 0x00, 0x78, 0xb1, 0x58, 0xb3, 0x4c, 0xd1, 0xac, 0xb9, 0x7c, 0xa0, 0x20, 0x03, 0x06, 0x18, 0x15, 0x5b, 0x17, 0x52, 0xe5, - 0x3b, 0x19, 0x69, 0x00, 0x17, 0x6a, 0x00, 0x6b, 0x06, 0x82, 0x7f, 0xf3, 0xa2, 0x7f, 0x3a, 0xa7, 0x05, 0x11, 0xfd, 0x15, 0x00, 0x00, 0x21, 0x2f, - 0xff, 0x32, 0x20, 0x03, 0x40, 0x28, 0x11, 0x44, 0x30, 0x2f, 0xfb, 0x20, 0x00, 0x42, 0x40, 0x0d, 0x40, 0x04, 0x1b, 0x38, 0x04, 0x42, 0x28, 0x33, - 0x30, 0x07, 0x4f, 0x04, 0xa8, 0x1b, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x03, 0x07, 0x03, 0x06, 0x07, 0x03, 0xa0, 0x20, 0x06, - 0x06, 0x20, 0x04, 0x03, 0x03, 0x29, 0xf7, 0x0b, 0x82, 0x2d, 0x1f, 0x05, 0x41, 0xaf, 0x30, 0xa3, 0x28, 0x19, 0xf3, 0x09, 0x30, 0xba, 0x30, 0xe9, - 0x28, 0x1d, 0xc9, 0x30, 0x05, 0xfd, 0x35, 0x55, 0x51, 0x4e, 0x2f, 0x65, 0x28, 0x11, 0x73, 0x2f, 0xb1, 0x61, 0x28, 0x19, 0xc0, 0x04, 0xd7, 0x87, - 0x10, 0x0f, 0xf0, 0x7f, 0x06, 0x66, 0xeb, 0x58, 0x70, 0x51, 0xc0, 0x05, 0xf2, 0xf5, 0x9f, 0xff, 0x38, 0xd0, 0x90, 0xc9, 0x9c, 0xb7, 0x35, 0xdc, - 0xb4, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x1a, 0x28, 0x15, 0x38, 0x28, 0x13, 0x11, 0x41, 0x04, 0x3b, 0x28, 0x21, 0x3d, 0x04, 0x34, 0x04, 0xa8, - 0x03, 0x90, 0x10, 0x18, 0x34, 0xff, 0x04, 0x04, 0xd0, 0x01, 0x7b, 0xec, 0xd1, 0x6c, 0x84, 0x25, 0x15, 0x41, 0x57, 0x53, 0xaa, 0x28, 0x17, 0xb9, - 0x30, 0x45, 0xc8, 0x28, 0x17, 0xea, 0x30, 0xa2, 0x06, 0x08, 0x17, 0x53, 0x2f, 0xa5, 0x45, 0x75, 0x4b, 0x2f, 0x20, 0x00, 0x41, 0x2f, 0xa5, 0x73, - 0x2f, 0xb7, 0x6c, 0x72, 0x28, 0x1f, 0x3f, 0x3f, 0x61, 0x05, 0x2d, 0xc4, 0xf0, 0x73, 0x65, 0x00, 0x05, 0x2d, 0x00, 0x4d, 0x00, 0xe9, 0x4f, 0xab, - 0x64, 0x4f, 0x3d, 0x62, 0x6e, 0x40, 0x8d, 0x04, 0x7e, 0xb1, 0x53, 0x00, 0xfc, 0x2f, 0x9d, 0x61, 0xb7, 0x00, 0x00, 0x85, 0x6e, 0x05, 0x6e, 0xc0, - 0x00, 0x11, 0x73, 0x20, 0x20, 0xff, 0x3f, 0xc3, 0x05, 0x50, 0xff, 0xc0, 0x01, 0x70, 0x7f, 0x04, 0x7f, 0xcf, 0x57, 0x53, 0xb3, 0x6f, 0x27, 0x59, - 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x58, 0x1b, 0xac, 0xc0, 0xb0, 0x08, 0xc6, 0xa4, 0xc2, 0x24, 0x20, 0x03, 0xb8, 0xd2, 0x08, 0x01, 0xb8, 0x7c, - 0xc7, 0xac, 0xb9, 0x44, 0xc5, 0x05, 0xb8, 0x23, 0x6a, 0x5a, 0x2b, 0x97, 0x32, 0xe9, 0x2d, 0x00, 0x03, 0x7d, 0xeb, 0x05, 0xe2, 0x7f, 0xe1, 0x88, - 0x06, 0x41, 0xff, 0x2e, 0x04, 0x36, 0x28, 0x15, 0x30, 0x04, 0x4f, 0x08, 0x04, 0x20, 0x00, 0x10, 0x28, 0x23, 0x41, 0x04, 0x42, 0x2b, 0x04, 0x40, - 0x20, 0x0f, 0x3b, 0x28, 0x2d, 0x4f, 0x05, 0x28, 0x23, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05, - 0x02, 0x05, 0x08, 0x01, 0x08, 0x05, 0x05, 0x20, 0x01, 0x2c, 0x00, 0xe7, 0x91, 0x62, 0x00, 0x00, 0x07, 0x41, 0xbf, 0x8d, 0x28, 0x13, 0xde, 0x30, - 0xcb, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x54, 0x2f, 0xa3, 0x1f, 0x73, 0x00, 0x6d, 0x4f, 0xa9, 0x05, 0x58, 0x09, 0x00, 0xb0, 0x7f, 0x04, 0x77, 0xfd, - 0x01, 0x90, 0x7f, 0xe0, 0x05, 0x78, 0x0f, 0x08, 0x51, 0x7f, 0x06, 0x21, 0xff, 0x58, 0xaf, 0x65, 0x6c, 0x9a, 0x20, 0x3c, 0x5c, 0x06, 0x78, 0x17, - 0xdc, 0xd0, 0x88, 0xc9, 0x54, 0x07, 0xba, 0x74, 0xc7, 0xc8, 0xb2, 0x05, 0xd8, 0x0f, 0x00, 0x53, 0x7f, 0x05, 0x58, 0x0b, 0xa8, 0x00, 0x33, 0xff, - 0xe2, 0x06, 0x63, 0xff, 0x22, 0x28, 0x13, 0x41, 0x04, 0x3c, 0xb8, 0x28, 0x19, 0x3d, 0x05, 0x68, 0x09, 0x0f, 0xe3, 0x7f, 0x10, 0x06, 0xe0, 0xff, - 0x06, 0x06, 0x05, 0x10, 0x06, 0x05, 0x05, 0x20, 0x05, 0x05, 0x07, 0x06, 0x06, 0x80, 0x20, 0x01, 0x88, 0xe1, 0xbd, 0x68, 0x00, 0x00, 0x08, 0x00, - 0x41, 0xf4, 0x30, 0xa3, 0x30, 0xaf, 0x30, 0xc8, 0x2a, 0x30, 0xea, 0x06, 0x68, 0x19, 0x56, 0x2f, 0xa3, 0x63, 0x2f, 0xaf, 0x6f, 0xe0, 0x4f, 0xa1, - 0x06, 0x18, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x7e, 0x1a, 0x59, 0x29, 0x40, 0x52, 0x06, 0x78, 0x15, 0x00, 0x00, 0x45, 0xbe, 0xa0, 0xd1, 0x34, - 0xac, 0xb9, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x12, 0x28, 0x0d, 0x3a, 0x04, 0x06, 0x42, 0x04, 0x3e, 0x04, 0x40, 0x06, 0x48, 0x17, 0x10, 0x16, - 0xf4, 0xff, 0x07, 0x00, 0x07, 0x08, 0x07, 0x08, 0x08, 0x07, 0x07, 0x06, 0x08, 0x08, 0x02, 0x07, 0x07, 0x20, 0x01, 0x1d, 0xe5, 0x16, 0x00, 0x67, - 0x00, 0x00, 0x09, 0x41, 0x7f, 0x89, 0xaa, 0x0a, 0x30, 0xfc, 0x30, 0xb9, 0x28, 0x19, 0xe9, 0x06, 0x48, 0x1b, 0x57, 0xa8, 0x2f, 0xa3, 0x73, 0x28, - 0x17, 0x65, 0x28, 0x17, 0x6e, 0x00, 0x20, 0x0a, 0x00, 0x41, 0x00, 0x75, 0x40, 0x0f, 0x72, 0x2f, 0xc7, 0x6c, 0xc1, 0x05, 0x2e, 0xc1, 0xf0, 0x6f, - 0x65, 0x00, 0x2d, 0x00, 0x4f, 0x28, 0xa9, 0x55, 0x63, 0x2f, 0xbd, 0x64, 0x4f, 0xbf, 0x74, 0x40, 0x89, 0x65, 0x04, 0xe0, 0xff, 0x5b, 0x61, 0x00, - 0x00, 0x87, 0x6e, 0x05, 0x4f, 0xbb, 0x00, 0x11, 0x6f, 0x20, 0x05, 0xc0, 0xff, 0x01, 0x70, 0x7f, 0x82, 0x04, 0x7f, 0xcb, 0x7f, 0x89, 0xb3, 0x6f, - 0x27, 0x06, 0xa8, 0x19, 0xe8, 0x02, 0xc6, 0xa4, 0xc2, 0x34, 0xd1, 0x24, 0x20, 0x05, 0xb8, 0x06, 0xd2, 0x08, 0xb8, 0x7c, 0xc7, 0x05, 0xf8, 0x23, - 0x73, 0x7f, 0x2d, 0xac, 0x00, 0x03, 0x79, 0xeb, 0x05, 0xe2, 0x7f, 0xe1, 0xc2, 0x7f, 0x05, 0x51, 0xfd, 0x00, 0x00, 0x04, 0x17, 0x04, 0x30, 0x04, - 0x3f, 0x20, 0x03, 0x34, 0x04, 0x40, 0x3d, 0x20, 0x09, 0x4f, 0x04, 0x20, 0x00, 0x10, 0x04, 0x15, 0x32, 0x04, 0x41, 0x28, 0x29, 0x40, 0x20, 0x19, - 0x3b, 0x05, 0x08, 0x2b, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x08, 0x02, 0x08, 0x02, 0x02, 0x84, 0x28, 0x19, 0x02, 0x03, 0x08, - 0x08, 0x20, 0x01, 0x4b, 0xe9, 0x20, 0x64, 0x52, 0x00, 0x3f, 0xff, 0x01, 0x01, 0x06, 0x01, 0x07, 0x30, 0x06, 0x01, 0x30, 0x06, 0x20, 0x04, 0x01, - 0x01, 0x02, 0x02, 0x05, 0x03, 0x02, 0x03, 0x03, 0x02, 0x20, 0x06, 0x05, 0x20, 0x04, 0x81, 0x20, 0x0d, 0x03, 0x07, 0x03, 0x06, 0x07, 0x03, 0x20, - 0x06, 0x42, 0x06, 0x20, 0x04, 0x03, 0x03, 0x04, 0x04, 0xd0, 0x01, 0x05, 0x00, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05, 0x05, 0x08, 0x08, 0x01, 0x08, - 0x05, 0x05, 0x20, 0x01, 0x06, 0x06, 0x05, 0x43, 0x06, 0x40, 0x05, 0x05, 0x07, 0x06, 0x06, 0x20, 0x01, 0xf8, 0x9f, 0xc0, 0xf0, 0x97, 0x3f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x9c, 0x51, 0x00, 0x11, 0x09, 0x00, 0x00, 0x30, 0x01, 0x42, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x47, 0x22, 0xa4, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x42, 0xa6, 0x30, 0xa3, 0x30, 0xfc, 0x10, - 0x30, 0xf3, 0x30, 0x06, 0x78, 0x1d, 0x56, 0x00, 0x69, 0x00, 0x15, 0x65, 0x00, 0x6e, 0x20, 0x01, 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x06, 0x49, 0x20, - 0x70, 0x57, 0x60, 0xff, 0x0e, 0xf1, 0x7f, 0x06, 0x51, 0xfd, 0x00, 0x00, 0xf4, 0x7e, 0x02, 0x5f, 0x4e, 0xb3, 0x7e, 0xde, 0x5d, 0x06, 0x7b, 0x1d, - 0x48, 0x5c, 0xbe, 0x06, 0xdb, 0x97, 0x57, 0x43, 0x7d, 0x06, 0x92, 0x81, 0x06, 0xf1, 0xff, 0x12, 0x04, 0x03, 0x35, 0x04, 0x3d, 0x04, 0x30, 0x04, - 0x0f, 0x14, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x01, 0x08, 0x08, 0x09, 0x08, 0x08, 0x01, 0x01, 0x12, 0x09, 0x08, 0x02, 0x20, 0x05, 0x01, 0x01, - 0x58, 0x17, 0x03, 0x02, 0x42, 0xd6, 0x30, 0xeb, 0x30, 0xb2, 0x28, 0x17, 0xe9, 0x90, 0x28, 0x1b, 0xc8, 0x30, 0x06, 0x15, 0x1f, 0x42, 0x00, 0x75, - 0x00, 0x14, 0x72, 0x00, 0x67, 0x48, 0x1b, 0x6c, 0x28, 0x1b, 0x6e, 0x00, 0x40, 0x64, 0x10, 0x15, 0xc0, 0x7f, 0x03, 0x5e, 0x14, 0x5c, 0x39, 0x68, - 0x20, 0x70, 0x51, 0x06, 0x78, 0x19, 0x80, 0xbd, 0x74, 0xb9, 0x90, 0x00, 0xac, 0x80, 0xb7, 0xb8, 0xd2, 0x20, 0x00, 0xfc, 0x60, 0xc8, 0x06, 0x1f, - 0xbb, 0x0e, 0xf3, 0x7f, 0x11, 0x04, 0x43, 0x04, 0x40, 0x28, 0x04, 0x33, 0x48, 0x1d, 0x3b, 0x28, 0x1f, 0x3d, 0x04, 0x34, 0xc0, 0x05, 0xc8, 0x23, - 0x10, 0x16, 0xf4, 0xff, 0x02, 0x01, 0x02, 0x01, 0x03, 0x03, 0x40, 0x02, 0x20, 0x04, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x11, 0x06, 0x22, 0xbe, - 0x28, 0x17, 0x04, 0x42, 0xb1, 0x28, 0x17, 0x1a, 0xf3, 0x30, 0xc6, 0x28, 0x19, 0x06, 0x5d, 0x33, 0x43, 0x2e, 0xa7, 0x72, 0x83, 0x2f, 0xb3, 0x6e, - 0x00, 0x74, 0x00, 0x68, 0x2f, 0xbb, 0x05, 0xfe, 0xb5, 0xa3, 0xf0, 0x7f, 0x65, 0x05, 0xef, 0xb9, 0x4b, 0x00, 0xe4, 0x29, 0x17, 0x30, 0xfd, 0xdc, - 0x06, 0x5d, 0xb3, 0x91, 0x7f, 0x7a, 0x06, 0x21, 0x7d, 0xd1, 0xff, 0x06, 0x30, 0x7f, 0x4b, 0x51, 0x0c, 0x69, 0x60, 0x7f, 0x98, 0x06, 0x78, 0x15, - 0x2f, 0xff, 0xcf, 0x78, 0x1d, 0xb9, 0x50, 0xd1, 0x06, 0x58, 0x13, 0x52, 0x7f, 0xd3, 0x7f, 0xeb, 0x06, 0x43, 0xff, 0x51, 0xed, 0x06, 0x81, 0xff, - 0x1a, 0x28, 0x0b, 0x40, 0x04, 0x38, 0x28, 0x15, 0x5c, 0x42, 0x20, 0x05, 0x4f, 0x05, 0xc8, 0x13, 0x08, 0x34, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x03, - 0x02, 0x08, 0x03, 0x02, 0x04, 0x04, 0x28, 0x19, 0x04, 0x05, 0x02, 0x00, 0x03, 0x03, 0x03, 0x03, 0x26, 0x21, 0x2b, 0x0a, 0x00, 0x00, 0x00, 0x05, - 0x42, 0xcb, 0x30, 0xfc, 0x30, 0x40, 0xc0, 0x20, 0x03, 0xfb, 0x30, 0xa8, 0x30, 0xb9, 0x30, 0x41, 0xbf, 0x20, 0x0d, 0xe9, 0x30, 0xa4, 0x30, 0xd2, - 0x05, 0x88, 0x25, 0x04, 0x4c, 0x00, 0x6f, 0x00, 0x77, 0x2f, 0xad, 0x72, 0x00, 0x17, 0x20, 0x00, 0x41, 0x2f, 0xbb, 0x73, 0x28, 0x1f, 0x38, 0x27, - 0x05, 0x78, 0x1f, 0x51, 0x42, 0x2f, 0xa3, 0x73, 0x20, 0x75, 0x65, 0x00, 0x2d, 0x40, 0x7f, 0xb5, 0x50, 0x7d, 0x63, 0x28, 0xa3, 0x05, 0x58, 0x21, - 0x4e, 0x48, 0x8b, 0x64, 0x41, 0x01, 0x6e, 0xf6, 0x40, 0xfd, 0x31, 0x0b, 0x72, 0x2f, 0xbf, 0x50, 0x85, 0x05, 0x70, 0xff, 0x61, 0xa0, 0x06, 0xa1, - 0x7f, 0x6a, 0x06, 0x80, 0x7d, 0x00, 0x00, 0x0b, 0x4e, 0x65, 0x04, 0x59, 0x30, 0x57, 0x29, 0x52, 0x06, 0x78, 0x19, 0xc8, 0xb2, 0x00, 0x54, 0xb3, - 0x78, 0xc6, 0xa4, 0xc2, 0x30, 0xd1, 0x02, 0x7c, 0xb7, 0x74, 0xc7, 0x88, 0xd7, 0x05, 0xf8, 0x21, 0x4e, 0x8d, 0x82, 0x7d, 0x2d, 0x00, 0x4f, 0x23, - 0x8b, 0x52, 0x81, 0x6e, 0x4b, 0xab, 0x11, 0x6a, 0x00, 0x6b, 0x05, 0x43, 0x7f, 0x69, 0x00, 0x78, 0x42, 0x7f, 0x55, 0xc1, 0x06, 0x23, 0xff, 0x1d, - 0x28, 0x13, 0x36, 0x28, 0x15, 0x4f, 0x28, 0x13, 0x01, 0x20, 0x00, 0x10, 0x04, 0x32, 0x04, 0x41, 0x28, 0x21, 0xf0, 0x38, 0x29, 0x05, 0x58, 0x23, - 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x03, 0x01, 0x03, 0x40, 0x02, 0x38, 0x19, 0x02, 0x06, 0x03, 0x04, 0x04, 0x04, 0x00, 0x04, 0x46, - 0x22, 0x1b, 0x0b, 0x00, 0x00, 0x06, 0x28, 0x42, 0xaa, 0x28, 0x17, 0xd0, 0x06, 0xa8, 0x17, 0x55, 0x00, 0x70, 0xdc, 0x20, 0x01, 0x06, 0x98, 0x17, - 0x48, 0x2f, 0x2f, 0x38, 0x0d, 0x06, 0x78, 0x17, 0x4f, 0x00, 0x63, 0x62, 0x06, 0x88, 0x13, 0x3f, 0xff, 0x41, 0x00, 0x6c, 0x2f, 0xa9, 0x06, 0x97, - 0x97, 0xa1, 0x06, 0xf0, 0x7f, 0x0a, 0x06, 0xe8, 0x17, 0x24, 0xc6, 0x84, 0xbc, 0x06, 0xb8, 0x17, 0x78, 0x4f, 0x83, 0x7f, 0x06, 0x58, 0x17, 0x92, - 0x7f, 0x06, 0x38, 0x15, 0x00, 0x00, 0x12, 0x2e, 0x04, 0x35, 0x28, 0x05, 0x45, 0x06, 0x88, 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, - 0x00, 0x07, 0x04, 0x04, 0x01, 0x01, 0x05, 0x05, 0x04, 0x00, 0x01, 0x03, 0x07, 0x05, 0x05, 0x05, 0x05, 0x58, 0x00, 0x22, 0x29, 0x0a, 0x00, 0x00, - 0x07, 0x42, 0xb6, 0x02, 0x30, 0xeb, 0x30, 0xc4, 0x30, 0xd6, 0x20, 0x05, 0xaf, 0xd1, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x53, 0x2f, 0xaf, 0x6c, 0x00, - 0x7a, 0x27, 0x1d, 0x56, 0x75, 0x2f, 0xa9, 0x67, 0x06, 0xa0, 0x7f, 0x6f, 0x06, 0x40, 0x81, 0x07, 0x50, 0xff, 0x69, 0xed, 0x2f, 0xa9, 0x71, 0x81, - 0x39, 0x11, 0x73, 0x05, 0x69, 0x15, 0x00, 0x11, 0xff, 0x6f, 0x05, 0xef, 0xb6, 0x00, 0x28, 0x84, 0x14, 0x5c, 0x28, 0x83, 0x21, 0x58, 0x80, 0x06, - 0x78, 0x17, 0x98, 0xc7, 0x20, 0xce, 0x80, 0xbd, 0x74, 0x1c, 0xb9, 0x6c, 0xd0, 0x05, 0xf8, 0x11, 0x07, 0xf3, 0x7f, 0x06, 0x51, 0xff, 0x17, 0x04, - 0x00, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x46, 0x04, 0x17, 0x31, 0x04, 0x43, 0x28, 0x21, 0x33, 0x05, 0x28, 0x0b, 0x08, 0xb1, 0x7f, 0x10, 0x0d, - 0xf0, 0x7f, 0x20, 0x06, 0x04, 0x28, 0x0d, 0x06, 0x06, 0x06, 0x05, 0x06, 0x20, 0x04, 0x04, 0x20, 0x06, 0x06, 0xfd, 0x21, 0x44, 0x09, 0x00, 0x00, - 0x00, 0x08, 0x42, 0xb7, 0x30, 0xe5, 0x30, 0x00, 0xbf, 0x30, 0xa4, 0x30, 0xa2, 0x30, 0xfc, 0x30, 0x57, 0xde, 0x06, 0x28, 0x1d, 0x53, 0x2f, 0xab, - 0x79, 0x05, 0xee, 0xa3, 0x00, 0x50, 0x7f, 0x05, 0x77, 0x09, 0xa2, 0x00, 0x10, 0xff, 0x65, 0x40, 0x7d, 0x72, 0x00, 0x6d, 0x2f, 0xb7, 0x72, 0xd6, - 0x05, 0x2d, 0xa3, 0xf1, 0x7f, 0x69, 0x06, 0xa1, 0x7f, 0x45, 0x4e, 0xa1, 0x06, 0x90, 0x81, 0xbd, 0x01, 0x65, 0x82, 0x84, 0x29, 0x52, 0x9a, 0x4e, - 0x06, 0x78, 0x17, 0x00, 0x88, 0xc2, 0xc0, 0xd0, 0x74, 0xc7, 0xb4, 0xc5, 0x38, 0xc8, 0xb9, 0x06, 0x58, 0x1b, 0x51, 0xff, 0xb2, 0x7d, 0x65, 0x00, - 0x6e, 0xa0, 0x06, 0x01, 0xff, 0xed, 0x06, 0x84, 0x01, 0x28, 0x04, 0x42, 0x04, 0x38, 0x8e, 0x28, 0x0f, 0x38, 0x04, 0x4f, 0x05, 0xe8, 0x11, 0x07, - 0xf4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x07, 0x82, 0x48, 0x14, 0x07, 0x07, 0x06, 0x05, 0x09, 0x20, 0x05, 0x07, 0x00, 0x07, 0x78, 0x21, 0xfa, 0x0a, - 0x00, 0x00, 0x09, 0x03, 0x42, 0xc6, 0x30, 0xa3, 0x30, 0xed, 0x28, 0x0f, 0x06, 0x7d, 0x2f, 0x5f, 0x54, 0x48, 0x15, 0x6f, 0x2f, 0xb3, 0x0e, 0x70, - 0x7f, 0x37, 0x95, 0x07, 0x30, 0x7f, 0x05, 0xff, 0xa9, 0x81, 0x07, 0x50, 0xff, 0x82, 0x84, 0x57, 0x7f, 0x14, 0x5c, 0x06, 0x78, 0x15, 0x03, 0x00, - 0x00, 0xf0, 0xd2, 0x64, 0xb8, 0x06, 0x18, 0x0d, 0x08, 0x32, 0x7f, 0xa0, 0x06, 0x59, 0x97, 0x22, 0x48, 0x15, 0x3e, 0x04, 0x3b, 0x04, 0x4c, 0xe4, - 0x06, 0x48, 0x17, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x08, 0x06, 0x38, 0x0d, 0x08, 0x08, 0x80, 0x28, 0x13, 0x06, 0x08, 0x08, 0x08, 0x08, - 0x9c, 0x21, 0x00, 0x18, 0x08, 0x00, 0x00, 0x0a, 0x42, 0xd5, 0x30, 0x15, 0xa9, 0x30, 0xa2, 0x20, 0x01, 0xfc, 0x28, 0x1b, 0xd9, 0x28, 0x1f, 0x54, - 0xaf, 0x05, 0xe8, 0x21, 0x56, 0x28, 0x13, 0x72, 0x4f, 0x27, 0x6c, 0x00, 0x58, 0x62, 0x4f, 0x35, 0x67, 0x05, 0xcf, 0xb7, 0x10, 0x0e, 0xf0, 0x7f, - 0x8f, 0x79, 0xc9, 0x01, 0x62, 0x14, 0x5c, 0x1d, 0x8d, 0x3c, 0x68, 0x06, 0x5b, 0x19, 0x00, 0xec, 0xd3, 0xb4, 0xc5, 0x44, 0xc5, 0x7c, 0xb9, 0x03, - 0xa0, 0xbc, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x18, 0x21, 0x0e, 0xf3, 0x7f, 0x46, 0x24, 0x28, 0x13, 0x40, 0x04, 0x30, 0x28, 0x1b, 0x38, 0x19, 0x31, - 0x2c, 0x04, 0x35, 0x28, 0x25, 0x33, 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x09, 0x38, 0x09, 0x08, 0x20, 0x03, 0x20, 0x04, 0x40, 0x06, - 0x09, 0xc7, 0x21, 0x24, 0xee, 0x06, 0x00, 0x3f, 0xff, 0x01, 0x08, 0x20, 0x21, 0x08, 0x01, 0x08, 0x01, 0x09, 0x08, 0x02, 0x20, 0x05, 0x01, 0x01, - 0x02, 0x8c, 0x20, 0x01, 0x03, 0x03, 0x02, 0x20, 0x04, 0x20, 0x0b, 0x02, 0x02, 0x24, 0x02, 0x03, 0x20, 0x01, 0x04, 0x04, 0x20, 0x11, 0x04, 0x05, - 0x00, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x01, 0xc0, 0x20, 0x1d, 0x20, 0x11, 0x02, 0x06, 0x03, 0x04, 0x04, 0x04, 0x00, 0x04, 0x05, 0x07, - 0x04, 0x04, 0x01, 0x01, 0x05, 0x00, 0x05, 0x04, 0x01, 0x03, 0x07, 0x05, 0x05, 0x05, 0x12, 0x05, 0x06, 0x04, 0x30, 0x04, 0x06, 0x06, 0x20, 0x08, - 0x04, 0x99, 0x20, 0x06, 0x06, 0x07, 0x40, 0x0c, 0x28, 0x9c, 0x05, 0x09, 0x20, 0x05, 0xf0, 0x28, 0xa9, 0xe8, 0xaf, 0xf0, 0xa7, 0x3f, 0xff, 0x00, - 0x11, 0xac, 0x20, 0x00, 0x11, 0x03, 0x00, 0x00, 0x30, 0x01, 0x43, 0x14, 0x20, 0x50, 0x08, 0xe2, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x27, 0x24, 0x1b, 0x28, 0x1a, 0x02, 0x00, 0x43, 0xd6, 0x30, 0xea, 0x30, 0xe5, 0x30, 0xc3, 0x00, 0x30, 0xbb, 0x30, 0xeb, 0x30, 0x96, 0x99, - 0xfd, 0x01, 0x90, 0x30, 0x57, 0xdf, 0x57, 0x0f, 0x57, 0x05, 0x98, 0x2b, 0x01, 0x42, 0x00, 0x72, 0x00, 0x75, 0x00, 0x73, 0x20, 0x01, 0x11, 0x65, - 0x00, 0x6c, 0x20, 0x07, 0x20, 0x00, 0x52, 0x20, 0x09, 0x01, 0x67, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x05, 0x28, 0xb2, 0x11, 0x52, 0x00, 0xe9, - 0x80, 0x6d, 0x20, 0x00, 0x64, 0x20, 0x85, 0x54, 0x20, 0x60, 0x93, 0x78, 0x40, 0x91, 0x6c, 0x20, 0x97, 0x73, 0x00, 0x01, 0x2d, 0x00, 0x43, 0x00, - 0x61, 0x00, 0x70, 0x20, 0x95, 0x7d, 0x74, 0x20, 0x07, 0x30, 0x13, 0x03, 0x90, 0x7f, 0x90, 0xed, 0x50, 0x79, 0xfc, 0x81, 0x0d, 0x15, 0x2d, 0x00, - 0x48, 0x20, 0x75, 0x75, 0x20, 0x77, 0x74, 0x21, 0x21, 0xbd, 0x30, 0x79, 0x64, 0x20, 0x7f, 0x03, 0xf0, 0xff, 0x91, 0x6d, 0x30, 0xfb, 0x64, 0x21, - 0x79, 0xed, 0x00, 0x31, 0x01, 0x04, 0x91, 0x7f, 0x51, 0xed, 0xf3, 0x00, 0x01, 0x7f, 0x52, 0x11, 0x61, 0x00, 0x21, 0x7d, 0x80, 0x03, 0xba, 0xc9, - 0x03, 0x5e, 0x81, 0x9c, 0x5e, 0x58, 0x14, 0x42, 0x5c, 0x32, 0xfb, 0x27, 0x59, 0x3a, 0x53, 0x05, 0xfb, 0x25, 0x0c, 0x00, 0xbe, 0x3c, 0xb9, 0x40, - 0xc1, 0x20, 0x00, 0xc0, 0x1a, 0xc9, 0xed, 0xc5, 0x06, 0x3b, 0xa1, 0x00, 0x13, 0x7f, 0x48, 0x23, 0x79, 0x6f, 0x35, 0x00, 0x66, 0x23, 0x0b, 0x32, - 0x73, 0x65, 0x43, 0x13, 0x6c, 0x23, 0x8f, 0x15, 0x6a, 0x00, 0x6b, 0x23, 0x9d, 0x47, 0x23, 0xa7, 0x77, 0x43, 0x13, 0xdd, 0x03, 0x52, 0x89, 0x73, - 0xed, 0xe3, 0x23, 0xef, 0x00, 0x33, 0x7f, 0x31, 0xff, 0x20, 0x23, 0x7f, 0x40, 0x20, 0x04, 0x62, 0x03, 0x11, 0x04, 0x40, 0x04, 0x4e, 0x04, 0x41, - 0x41, 0x20, 0x01, 0x35, 0x04, 0x3b, 0x04, 0x4c, 0x20, 0x09, 0x00, 0x3a, 0x04, 0x38, 0x04, 0x39, 0x04, 0x20, 0x00, 0x04, 0x41, 0x04, 0x42, 0x04, - 0x3e, 0x20, 0x13, 0x38, 0x04, 0x05, 0x47, 0x04, 0x3d, 0x04, 0x4b, 0x40, 0x13, 0x3e, 0x20, 0x1d, 0x03, 0x40, 0x04, 0x43, 0x04, 0x33, 0x04, 0x0b, - 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x01, 0x01, 0x01, 0x02, 0x02, 0x20, 0x04, 0x01, 0x40, 0x04, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x43, - 0xd5, 0x30, 0xe9, 0x03, 0x30, 0xf3, 0x30, 0xc7, 0x30, 0xec, 0x20, 0x05, 0x05, 0xf8, 0x13, 0xab, 0x3f, 0xff, 0x46, 0x45, 0xfb, 0x6e, 0x47, 0x91, - 0x72, 0x04, 0xa6, 0x7f, 0x01, 0x58, 0x17, 0x5e, 0x66, 0x46, 0x89, 0x6d, 0x80, 0x91, 0x05, 0xf0, 0xff, 0x05, 0x39, 0x09, 0xf1, 0x7f, 0x69, 0xbc, - 0x61, 0x7f, 0x72, 0x05, 0x40, 0xef, 0x01, 0x38, 0x17, 0xb2, 0x13, 0x04, 0xf2, 0x11, 0x5b, 0x4f, 0x0c, 0x70, 0x51, 0xb7, 0x5f, 0x06, 0x38, 0x11, - 0x68, 0x17, 0xd5, 0x91, 0x05, 0xb7, 0xdc, 0xb4, 0x74, 0xb9, 0x06, 0x78, 0x19, 0x56, 0x49, 0x7b, 0xbd, 0x93, 0x81, 0x65, 0x05, 0xe2, 0x83, 0x93, - 0xff, 0x32, 0x7f, 0x06, 0x13, 0xff, 0x24, 0x28, 0x0d, 0x11, 0x30, 0x04, 0x3c, 0x20, 0x03, 0x3d, 0x04, 0x34, 0xa8, 0x15, 0x57, 0x40, 0x28, 0x27, - 0x33, 0x28, 0x21, 0x3e, 0x28, 0x13, 0x0c, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x62, 0x02, 0x38, 0x15, 0x20, 0x04, 0x02, 0x01, 0x03, 0x30, 0x05, - 0x02, 0x83, 0x58, 0x17, 0x04, 0x43, 0xef, 0x30, 0xed, 0x06, 0x68, 0x11, 0x5f, 0xff, 0x5d, 0x57, 0x4f, 0x7f, 0x6c, 0x4f, 0xaf, 0x36, 0xa1, 0x06, - 0xd8, 0x17, 0x77, 0xa0, 0x8d, 0xff, 0x3f, 0x3f, 0x05, 0xf0, 0xff, 0x05, 0xf5, 0x95, 0x36, 0x17, 0x06, 0xf1, 0x7f, 0x00, 0x18, 0x17, 0x50, 0x93, - 0x05, 0x52, 0x11, 0x08, 0xe6, 0x74, 0x86, 0x96, 0x06, 0x98, 0x15, 0x00, 0x00, 0x48, 0x1b, 0xc6, 0x71, 0xb8, 0x06, 0x78, 0x13, 0x00, 0x13, 0x7f, - 0xeb, 0x06, 0x28, 0x97, 0x3f, 0xfd, 0xc5, 0x3a, 0x15, 0x06, 0x33, 0xfd, 0x00, 0x00, 0x12, 0x28, 0x15, 0x3b, 0x28, 0x1b, 0xf2, 0x37, 0xff, 0x06, - 0x18, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x03, 0x70, 0x01, 0x02, 0x8d, 0x40, 0x0a, 0xe3, 0x23, 0x75, 0x28, 0x17, 0x00, 0x1f, - 0xff, 0x01, 0x38, 0x3d, 0xbe, 0x20, 0x04, 0x01, 0x40, 0x04, 0x48, 0x4a, 0xc8, 0x4f, 0xf0, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xac, 0x20, 0x00, 0x11, 0x03, 0x00, 0x00, 0x30, 0x01, 0x44, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2f, 0x1f, 0x17, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x44, 0xdc, 0x30, 0xb9, 0x30, 0xcb, 0x00, - 0x30, 0xa2, 0x30, 0xfb, 0x30, 0xd8, 0x30, 0xeb, 0x00, 0x30, 0xc4, 0x30, 0xa7, 0x30, 0xb4, 0x30, 0xd3, 0x01, 0x30, 0xca, 0x30, 0x23, 0x90, 0xa6, - 0x90, 0x05, 0x38, 0x31, 0x04, 0x46, 0x00, 0x65, 0x00, 0x64, 0x20, 0x03, 0x72, 0x00, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x15, - 0x6e, 0x00, 0x20, 0x20, 0x05, 0x66, 0x20, 0x05, 0x42, 0x20, 0x0d, 0x55, 0x73, 0x20, 0x0f, 0x69, 0x20, 0x1b, 0x20, 0x20, 0x1f, 0x6e, 0x20, 0x29, - 0x15, 0x20, 0x00, 0x48, 0x40, 0x2d, 0x7a, 0x20, 0x37, 0x67, 0x20, 0x2d, 0x5a, 0x76, 0x20, 0x33, 0x6e, 0x20, 0x3b, 0x02, 0x90, 0x7f, 0xe9, 0x20, - 0x7f, 0xe9, 0xe2, 0xe0, 0x7f, 0x30, 0x91, 0xb0, 0x7f, 0x65, 0x00, 0x2d, 0x80, 0x77, 0xe9, 0xae, 0xa0, 0x77, 0x65, 0x03, 0x20, 0xff, 0xf6, 0x00, - 0x20, 0xff, 0xb0, 0x79, 0x31, 0x0f, 0x75, 0xb6, 0x00, 0x40, 0xfb, 0x77, 0x02, 0xe0, 0xfb, 0xf1, 0x7f, 0x7a, 0x61, 0x7f, 0x30, 0xfb, 0x64, 0xc6, - 0x21, 0x8b, 0xd1, 0x81, 0x2d, 0x00, 0x45, 0x03, 0xa1, 0x77, 0x00, 0x31, 0xff, 0x63, 0xbc, 0x21, 0xff, 0xf3, 0x00, 0x41, 0x7f, 0x30, 0x7d, 0x03, - 0xd1, 0xf7, 0x7b, 0x0d, 0xe2, 0x6c, 0x0c, 0xd1, 0x9e, 0x54, 0x80, 0x05, 0x52, 0xeb, 0x00, 0x3b, 0x81, 0xf4, 0xbc, 0x00, 0xa4, 0xc2, 0xc8, 0xb2, - 0x44, 0xc5, 0xe4, 0xd5, 0x00, 0x74, 0xb9, 0xb4, 0xcc, 0xe0, 0xac, 0x44, 0xbe, 0x00, 0x98, 0xb0, 0x20, 0x00, 0xf0, 0xc5, 0x29, 0xbc, 0xaa, 0x05, - 0x5b, 0xaf, 0x4d, 0x43, 0x63, 0x6c, 0x23, 0x79, 0x6d, 0x22, 0xe3, 0x4b, 0xab, 0x23, 0x87, 0x6f, 0x63, 0x89, 0x73, 0x21, 0x8f, 0x68, 0x43, 0x07, - 0xf3, 0xa3, 0xc7, 0x03, 0x12, 0xf5, 0x00, 0x53, 0xff, 0xe7, 0x00, 0xe3, 0x23, 0xff, 0x33, 0x7d, 0x33, 0xef, 0x60, 0x42, 0x22, 0x0b, 0x04, 0xf1, - 0xfd, 0x00, 0x00, 0x24, 0x04, 0x35, 0x20, 0x04, 0x34, 0x20, 0x03, 0x40, 0x04, 0x30, 0x04, 0x46, 0x00, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x20, 0x00, - 0x11, 0x02, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x3d, 0x20, 0x0d, 0x38, 0xd5, 0x20, 0x0d, 0x30, 0x03, 0x13, 0x40, 0x21, 0x46, 0x20, 0x2b, 0x33, 0x20, - 0x1b, 0x43, 0x32, 0x20, 0x27, 0x3d, 0x04, 0x4b, 0x04, 0x0b, 0x54, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x15, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x20, - 0x06, 0x03, 0x20, 0x05, 0x22, 0x01, 0x01, 0x58, 0x17, 0x03, 0x44, 0xbb, 0x28, 0x0d, 0xd3, 0x80, 0x28, 0x17, 0xba, 0x4e, 0x71, 0x51, 0x8c, 0x54, - 0xfd, 0x55, 0x56, 0x05, 0xff, 0xbd, 0x52, 0x28, 0x17, 0x70, 0x26, 0xf7, 0x62, 0x44, 0x9b, 0x57, 0x6b, 0x48, 0x01, 0x53, 0x28, 0x25, 0x70, 0x28, - 0x11, 0x30, 0x0d, 0x05, 0x10, 0x7f, 0x5a, 0xe9, 0xa0, 0x7f, 0x71, 0x27, 0x81, 0x38, 0x11, 0x73, 0x48, 0xa9, 0x62, 0xef, 0x67, 0x21, 0xf8, 0x23, - 0x03, 0xbf, 0xe1, 0x53, 0x60, 0x69, 0xb5, 0x87, 0xf1, 0x13, 0x05, 0x51, 0x7f, 0xbe, 0x51, 0x81, 0x63, 0x61, 0x81, 0x50, 0xff, 0x39, 0x8f, 0x04, - 0xd8, 0x21, 0x51, 0xff, 0xfa, 0xc3, 0xe0, 0x7d, 0x05, 0x91, 0xff, 0x5e, 0x58, 0xcf, 0x65, 0x06, 0x52, 0xf9, 0x5f, 0xff, 0x00, 0xa4, 0xc2, 0x85, - 0xb9, 0xa4, 0xc2, 0x74, 0xce, 0x00, 0x20, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0xf7, 0x05, 0xff, 0xbd, 0x52, 0x7f, 0x3b, 0x5d, 0x00, 0x72, - 0x7f, 0x65, 0x04, 0xc2, 0x81, 0x00, 0x51, 0xff, 0x3b, 0xa7, 0xd0, 0x3b, 0xf1, 0x05, 0x13, 0xff, 0x20, 0x28, 0x17, 0x41, 0x04, 0x3f, 0x04, 0x05, - 0x43, 0x04, 0x31, 0x04, 0x3b, 0x28, 0x17, 0x3a, 0x28, 0x1f, 0x16, 0x20, 0x00, 0x21, 0x48, 0x29, 0x31, 0x28, 0x1d, 0x30, 0x0f, 0x4f, 0xe3, 0x03, - 0x48, 0x01, 0x08, 0x74, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x02, 0x03, 0x03, 0x20, 0x01, 0x28, 0x15, 0x60, 0x03, 0x28, 0x18, 0x28, 0x23, 0xd6, 0x1f, - 0x3a, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x44, 0xd6, 0x28, 0x17, 0xc1, 0x30, 0xe5, 0x14, 0x30, 0xb3, 0x30, 0x06, 0x5d, 0x31, 0x42, 0x2f, 0xfb, 0x0d, - 0x01, 0x56, 0x6b, 0x4c, 0x27, 0x44, 0x4c, 0xa5, 0x74, 0x2f, 0xbb, 0x36, 0x9f, 0x74, 0xb5, 0x06, 0x00, 0x7f, 0x28, 0x4f, 0x25, 0xb0, 0x81, 0x29, - 0x05, 0xa0, 0xff, 0x2d, 0xc0, 0xff, 0x6b, 0x6b, 0x05, 0x60, 0xff, 0x91, 0x73, 0x65, 0x2e, 0x25, 0x74, 0x6d, 0xaf, 0x58, 0x09, 0xde, 0x71, 0x99, - 0x05, 0x50, 0x7f, 0x69, 0x80, 0x7d, 0x59, 0x87, 0x05, 0x30, 0x7d, 0x2b, 0x19, 0x5e, 0x00, 0x14, 0x5c, 0x47, 0x59, 0xd1, 0x79, 0x79, 0x72, 0x20, - 0x3a, 0x53, 0x06, 0x38, 0x19, 0x0c, 0xbe, 0x74, 0xb9, 0x58, 0x1e, 0xce, 0x54, 0xcf, 0x06, 0x58, 0x95, 0xb3, 0x7f, 0x06, 0x59, 0x17, 0x06, 0xf1, - 0xff, 0x1e, 0xaa, 0x28, 0x09, 0x40, 0x28, 0x15, 0x33, 0x28, 0x0d, 0x11, 0x28, 0x0b, 0x47, 0xb8, 0x28, 0x19, 0x3e, 0x04, 0xa8, 0x07, 0x08, 0xb4, - 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x03, 0x01, 0x01, 0xb0, 0x20, 0x01, 0x03, 0x40, 0x06, 0x38, 0x22, 0xe8, 0x1f, 0x5f, 0x0d, 0xa5, 0x00, 0x3f, 0xff, - 0x01, 0x38, 0x34, 0x02, 0x01, 0x20, 0x06, 0x03, 0x20, 0x05, 0xf0, 0x20, 0x07, 0xe8, 0x4f, 0xf0, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x45, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x79, 0xee, 0x6b, 0x12, 0x00, 0x00, 0x00, 0x01, 0x45, 0xdc, 0x30, 0xc4, 0x30, 0xef, 0x10, 0x30, 0xca, 0x30, 0x06, 0x78, 0x1d, 0x42, 0x00, - 0x6f, 0x00, 0x00, 0x74, 0x00, 0x73, 0x00, 0x77, 0x00, 0x61, 0x00, 0x68, 0x6e, 0x20, 0x03, 0x0e, 0x70, 0x7f, 0x75, 0x10, 0x06, 0x60, 0xff, 0x5a, - 0x53, 0x28, 0x04, 0x83, 0xe6, 0x74, 0xb3, 0x7e, 0x06, 0x7b, 0x1d, 0xf4, 0xbc, 0x03, 0x20, 0xce, 0x40, 0xc6, 0x98, 0xb0, 0x0e, 0xf3, 0x7f, 0x06, - 0x72, 0xff, 0x00, 0x11, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x41, 0x04, 0x07, 0x32, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x10, 0x06, 0x74, 0xff, 0x10, - 0x06, 0x70, 0xff, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x94, 0xec, 0x00, 0x11, 0x1c, 0x00, 0x00, 0x30, 0x01, 0x46, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x5e, 0x1e, 0x92, 0x10, 0x00, 0x00, 0x00, 0x02, 0x46, 0xbd, 0x30, 0xd5, 0x30, 0xa3, 0x04, 0x30, 0xa2, 0x30, 0x02, 0x5e, 0x06, 0x58, 0x1f, - 0x53, 0x00, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x69, 0x00, 0x61, 0x00, 0x11, 0x20, 0x00, 0x43, 0x20, 0x07, 0x74, 0x00, 0x79, 0x06, 0x80, 0x7f, 0x14, - 0x28, 0x00, 0x76, 0x20, 0x89, 0x6c, 0x20, 0x01, 0x65, 0x00, 0x51, 0x29, 0x06, 0x40, 0x7f, 0x53, 0x20, 0xff, 0x61, 0x00, 0x64, 0x21, 0x05, 0xed, - 0x06, 0x10, 0x7f, 0x06, 0x5a, 0x1f, 0x31, 0xf3, 0x75, 0x20, 0xf1, 0x30, 0xf5, 0x20, 0x20, 0xf9, 0x68, 0x65, 0x22, 0x07, 0x52, 0x13, 0xed, 0x05, - 0x40, 0x93, 0x22, 0x7d, 0x5e, 0x10, 0x97, 0x9a, 0x4e, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x8c, 0xc1, 0x0d, 0x3c, 0xd5, 0x44, 0xc5, 0x06, 0x9b, 0x9b, - 0xd2, 0xff, 0x73, 0x62, 0x7f, 0xd7, 0x05, 0x72, 0xfd, 0x33, 0xff, 0xf3, 0xa3, 0x7f, 0x63, 0x24, 0x09, 0x52, 0x0b, 0x05, 0x73, 0x81, 0x00, 0x21, - 0x04, 0x3e, 0x04, 0x44, 0x04, 0x38, 0x04, 0x30, 0x4f, 0x04, 0x0f, 0x14, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x14, 0x15, 0x16, 0x00, 0x16, 0x03, - 0x01, 0x01, 0x16, 0x15, 0x17, 0x14, 0x0a, 0x01, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x88, 0x17, 0xde, 0x46, 0x5d, 0x07, 0x18, 0x17, 0x50, 0x00, - 0x72, 0x28, 0x25, 0x37, 0x9b, 0x6e, 0xa2, 0x24, 0x21, 0x65, 0x06, 0x28, 0x17, 0x6f, 0x00, 0x62, 0x28, 0x17, 0x61, 0xea, 0x45, 0x1f, 0x05, 0x58, - 0x19, 0xd8, 0x97, 0x52, 0x28, 0x91, 0x67, 0x29, 0x25, 0x6f, 0xf7, 0x21, 0x01, 0x05, 0x58, 0x99, 0xb0, 0x71, 0x37, 0x93, 0x64, 0x29, 0xa3, 0x77, - 0x99, 0x05, 0x38, 0x2d, 0xfc, 0xd1, 0xf3, 0x5a, 0x1f, 0x05, 0xb8, 0x1d, 0x58, 0x17, 0x06, 0x72, 0xfd, 0x78, 0x17, 0x20, 0x00, 0x3b, 0xfc, 0xc8, - 0x07, 0x38, 0x17, 0x06, 0x12, 0xff, 0x73, 0xf3, 0xed, 0x00, 0x21, 0xff, 0x78, 0x31, 0x80, 0x05, 0x38, 0x17, 0x39, 0x04, 0x41, 0x04, 0x3a, 0x04, - 0x30, 0x80, 0x28, 0x1f, 0x20, 0x00, 0x3e, 0x04, 0x31, 0x04, 0x3b, 0x83, 0x20, 0x0b, 0x41, 0x04, 0x42, 0x04, 0x4c, 0x04, 0xe8, 0x2f, 0x07, 0xb4, - 0xff, 0x80, 0x10, 0x0e, 0x30, 0x7f, 0x02, 0x15, 0x14, 0x15, 0x10, 0x0f, 0x02, 0x00, 0x02, 0x15, 0x0e, 0x16, 0x15, 0x02, 0x02, 0x02, 0x40, 0x02, - 0x58, 0x17, 0x04, 0x46, 0xd6, 0x30, 0xe9, 0x30, 0x01, 0xb4, 0x30, 0xa8, 0x30, 0xd6, 0x30, 0xb0, 0x20, 0x09, 0x55, 0xc8, 0x06, 0x08, 0x1f, 0x42, - 0x47, 0x87, 0x67, 0x2f, 0xb5, 0x65, 0x2f, 0xad, 0x76, 0x67, 0x28, 0x19, 0x3f, 0x2f, 0x0e, 0x50, 0x7f, 0x77, 0x0e, 0xe0, 0xff, 0x06, 0x31, 0xff, - 0x03, 0x00, 0x5e, 0xc9, 0x62, 0x3c, 0x68, 0x36, 0x80, 0x2b, 0x04, 0x59, 0x3c, 0x68, 0xd2, 0x52, 0x06, 0x1b, 0x1d, 0x14, 0xbe, 0x00, 0x7c, 0xb7, - 0xe0, 0xac, 0x08, 0xc6, 0x0c, 0xbe, 0x03, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0xb4, 0x05, 0xf8, 0x21, 0x93, 0x7f, 0x54, 0xeb, 0x0e, 0x43, 0x7f, 0x11, - 0x48, 0x01, 0x33, 0x28, 0x1d, 0x35, 0x04, 0x57, 0x32, 0x20, 0x07, 0x40, 0x28, 0x1b, 0x34, 0x04, 0xe8, 0x0b, 0x10, 0x00, 0x74, 0xff, 0x10, 0x06, - 0x30, 0xff, 0x14, 0x03, 0x01, 0x01, 0x20, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x04, 0x03, 0x03, 0xe1, 0x1d, 0x6d, 0x28, 0x17, 0x05, 0x46, 0x01, - 0xd7, 0x30, 0xec, 0x30, 0xd9, 0x30, 0xf3, 0x06, 0x08, 0x0f, 0xad, 0x9e, 0x2f, 0x6c, 0x48, 0x11, 0x65, 0x2f, 0x21, 0x0e, 0x90, 0x7f, 0x77, 0x0e, - 0xe0, 0xff, 0x81, 0x06, 0x91, 0xff, 0x6e, 0x66, 0x17, 0x52, 0x87, 0x65, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x00, 0x0c, 0xd5, 0x08, 0xb8, 0xa4, 0xbc, - 0xd8, 0x05, 0xf8, 0x0d, 0x0f, 0x93, 0x7f, 0x1f, 0x28, 0x17, 0x38, 0x11, 0x35, 0x04, 0x3d, 0xe0, 0x05, 0xa8, 0x0d, 0x0f, 0xf4, 0xff, 0x10, 0x06, - 0x90, 0xff, 0x04, 0x0c, 0x0d, 0x0d, 0x0d, 0x00, 0x0d, 0x04, 0x04, 0x0d, 0x0c, 0x0f, 0x0c, 0x04, 0x00, 0x04, 0x04, 0x04, 0xe0, 0x1e, 0x82, 0x11, - 0x00, 0x00, 0x00, 0x06, 0x46, 0xd3, 0x30, 0xc7, 0x30, 0xa3, 0x8b, 0x06, 0xa8, 0x17, 0x56, 0x00, 0x69, 0x2f, 0x9f, 0x69, 0x06, 0x68, 0x15, 0x07, - 0x10, 0x7f, 0x61, 0x57, 0x0e, 0xe0, 0xff, 0x06, 0xf1, 0xff, 0xf4, 0x7e, 0x01, 0x4e, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0x44, 0xbe, 0x18, 0xb5, - 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x07, 0x12, 0x04, 0x38, 0x04, 0x34, 0x20, 0x03, 0x06, 0x58, 0x15, 0x0f, 0x14, 0xff, 0x80, 0x10, 0x06, 0xf0, - 0xff, 0x05, 0x1a, 0x1a, 0x1b, 0x1b, 0x1a, 0x05, 0x60, 0x05, 0x20, 0x03, 0x20, 0x05, 0x05, 0x05, 0x48, 0x1f, 0x44, 0x00, 0x10, 0x00, 0x00, 0x07, - 0x46, 0xd0, 0x30, 0xeb, 0x31, 0x30, 0xca, 0x06, 0x88, 0x15, 0x38, 0x17, 0x61, 0x00, 0x72, 0x2f, 0xab, 0x58, 0x61, 0x0e, 0x60, 0x7f, 0x57, 0x0e, - 0xe0, 0xff, 0x06, 0xf1, 0xff, 0xe6, 0x74, 0x14, 0x10, 0x5c, 0xb3, 0x7e, 0x06, 0x98, 0x19, 0x14, 0xbc, 0x74, 0xb9, 0x30, 0x98, 0xb0, 0x06, 0x98, - 0x19, 0x0e, 0xf3, 0x7f, 0x12, 0x04, 0x30, 0x04, 0x5c, 0x40, 0x28, 0x15, 0x30, 0x06, 0x88, 0x17, 0x10, 0x06, 0xd3, 0xff, 0x0e, 0xf6, 0x7f, 0x06, - 0x18, 0x00, 0x18, 0x19, 0x19, 0x18, 0x06, 0x06, 0x19, 0x18, 0x40, 0x03, 0x20, 0x05, 0x06, 0x06, 0xb9, 0x1e, 0xd7, 0x13, 0x04, 0x00, 0x00, 0x08, - 0x46, 0xd6, 0x28, 0x17, 0xac, 0x30, 0x45, 0xb9, 0x06, 0x88, 0x19, 0x42, 0x00, 0x75, 0x28, 0x17, 0x67, 0x28, 0x1d, 0x5c, 0x73, 0x06, 0x60, 0x7f, - 0x6f, 0x06, 0xc0, 0x81, 0x07, 0x10, 0xff, 0x0e, 0xd0, 0x7f, 0x03, 0x5e, 0x02, 0x14, 0x5c, 0xa0, 0x52, 0xaf, 0x65, 0x06, 0x7b, 0x19, 0x80, 0x01, - 0xbd, 0x74, 0xb9, 0x00, 0xac, 0xa4, 0xc2, 0x06, 0x78, 0x19, 0xa2, 0x32, 0xff, 0x65, 0x0e, 0xa2, 0xff, 0x11, 0x04, 0x43, 0x28, 0x17, 0x33, 0xb8, - 0x28, 0x1d, 0x41, 0x06, 0x48, 0x19, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x07, 0x02, 0x02, 0xa0, 0x20, 0x01, 0x07, 0x40, 0x06, 0x07, 0x07, - 0x07, 0x07, 0x3d, 0x20, 0x1e, 0x86, 0x28, 0x17, 0x09, 0x46, 0xc9, 0x30, 0xd6, 0x0a, 0x30, 0xea, 0x30, 0xc1, 0x06, 0x88, 0x17, 0x44, 0x27, 0x97, - 0x62, 0x82, 0x2f, 0xb1, 0x69, 0x00, 0x63, 0x00, 0x68, 0x06, 0xc0, 0x7f, 0x74, 0xdc, 0x06, 0x40, 0x81, 0xb0, 0x7f, 0x73, 0x06, 0x21, 0x03, 0x07, - 0x91, 0x7f, 0x06, 0x51, 0xff, 0x1a, 0x59, 0x02, 0x03, 0x5e, 0xcc, 0x91, 0x47, 0x59, 0x06, 0x7b, 0x17, 0xc4, 0x01, 0xb3, 0x0c, 0xbe, 0xac, 0xb9, - 0x58, 0xce, 0x06, 0x78, 0x17, 0xb0, 0xd2, 0x7f, 0x6a, 0x06, 0xc3, 0xff, 0x06, 0x3f, 0xb1, 0x14, 0x04, 0x3e, 0x04, 0x47, 0x31, 0x28, 0x19, 0x38, - 0x04, 0x47, 0x06, 0x48, 0x17, 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x00, 0x08, 0x03, 0x04, 0x04, 0x03, 0x04, 0x08, 0x08, 0x00, 0x04, 0x03, - 0x08, 0x03, 0x08, 0x08, 0x08, 0x08, 0x11, 0xfc, 0x1e, 0xcb, 0x28, 0x17, 0x0a, 0x46, 0xac, 0x28, 0x17, 0x16, 0xed, 0x30, 0xdc, 0x06, 0x88, 0x17, - 0x47, 0x2f, 0xa7, 0x38, 0x17, 0x6f, 0x36, 0x00, 0x76, 0x2f, 0xb9, 0x0e, 0xb0, 0x7f, 0x77, 0x0e, 0xe0, 0xff, 0x06, 0x51, 0xff, 0xa0, 0x01, 0x52, - 0x03, 0x5e, 0x57, 0x7f, 0x83, 0x6c, 0x06, 0x7b, 0x17, 0x00, 0x00, 0xac, 0x0c, 0xbe, 0x5c, 0xb8, 0xf4, 0xbc, 0xc4, 0x06, 0x78, 0x17, 0x0e, 0xf3, - 0x7f, 0x13, 0x04, 0x30, 0x48, 0x17, 0x3e, 0x04, 0x70, 0x32, 0x28, 0x21, 0x10, 0x06, 0xb4, 0xff, 0x10, 0x06, 0x50, 0xff, 0x09, 0x04, 0x05, 0x05, - 0x00, 0x04, 0x05, 0x09, 0x09, 0x05, 0x04, 0x07, 0x04, 0x00, 0x09, 0x09, 0x09, 0x09, 0x80, 0x1e, 0xff, 0x11, 0x00, 0x00, 0x00, 0x0b, 0x46, 0xcf, - 0x30, 0xb9, 0x30, 0x51, 0xb3, 0x06, 0xa8, 0x17, 0x48, 0x28, 0x17, 0x73, 0x00, 0x6b, 0x06, 0x88, 0x17, 0x6f, 0x4b, 0x2f, 0xa1, 0x06, 0xb0, 0x81, - 0x43, 0xa0, 0x7f, 0x06, 0x38, 0x19, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x02, 0xc8, 0x54, 0xaf, 0x65, 0xd1, 0x79, 0x06, 0x98, 0x17, 0x58, 0x07, - 0xd5, 0xa4, 0xc2, 0x54, 0xcf, 0x06, 0x98, 0x17, 0xb2, 0x7f, 0x06, 0x3b, 0x99, 0xa3, 0x06, 0xf3, 0xff, 0x25, 0x28, 0x17, 0x41, 0x04, 0x3a, 0x06, - 0x88, 0x17, 0x0e, 0xf3, 0x7f, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x0a, 0x05, 0x07, 0x03, 0x05, 0x06, 0x0a, 0x00, 0x0a, 0x03, 0x05, 0x1a, 0x05, 0x0a, - 0x0a, 0x0a, 0x00, 0x0a, 0xd2, 0x1d, 0x2c, 0x12, 0x00, 0x00, 0x0c, 0x0a, 0x46, 0xe4, 0x30, 0xf3, 0x28, 0x15, 0xeb, 0x06, 0x88, 0x17, 0x59, 0xa2, - 0x2f, 0xaf, 0x6d, 0x2f, 0xb1, 0x6f, 0x00, 0x6c, 0x0e, 0x40, 0x7f, 0x4a, 0xc0, 0x0e, 0xe0, 0x7f, 0x06, 0xf1, 0xff, 0x6c, 0x62, 0x5a, 0x53, 0x14, - 0x5c, 0x83, 0x06, 0x7b, 0x15, 0x00, 0x00, 0x8c, 0xc5, 0xfc, 0x06, 0x88, 0x13, 0x0f, 0x31, 0xff, 0x05, 0x2f, 0x04, 0x3c, 0x04, 0x31, 0x28, 0x15, - 0x3b, 0x06, 0x28, 0x13, 0xc0, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x0b, 0x1c, 0x1c, 0x06, 0x06, 0x1c, 0x04, 0x0b, 0x0b, 0x06, 0x1c, 0x1c, - 0x20, 0x05, 0x0b, 0x0b, 0x11, 0x36, 0x1e, 0xdb, 0x28, 0x17, 0x0d, 0x46, 0xaf, 0x28, 0x13, 0x05, 0xb8, 0x30, 0xe3, 0x30, 0xea, 0x06, 0x68, 0x19, - 0x4b, 0x2f, 0xad, 0x04, 0x72, 0x00, 0x64, 0x00, 0x7a, 0x4f, 0xb7, 0x6c, 0x00, 0x58, 0x69, 0x06, 0x60, 0x7f, 0x6a, 0x06, 0x40, 0x7d, 0x90, 0xff, - 0x73, 0x00, 0x63, 0xe0, 0x06, 0x41, 0x01, 0x07, 0x71, 0x7f, 0x06, 0x81, 0xff, 0x51, 0x14, 0x5c, 0x3e, 0x8d, 0x20, 0x29, 0x52, 0x06, 0x7b, 0x17, - 0xe0, 0xcf, 0x74, 0xb9, 0x98, 0x1e, 0xc7, 0xac, 0xb9, 0x06, 0x78, 0x1b, 0x93, 0x7f, 0x06, 0x53, 0x01, 0x06, 0xf3, 0xff, 0x1a, 0x00, 0x04, 0x4b, - 0x04, 0x40, 0x04, 0x34, 0x04, 0x36, 0x2e, 0x04, 0x30, 0x28, 0x1b, 0x38, 0x06, 0x08, 0x1d, 0x0f, 0x03, 0x7f, 0x10, 0x06, 0xe0, 0xff, 0x0c, 0x00, - 0x06, 0x06, 0x07, 0x07, 0x07, 0x0c, 0x0c, 0x07, 0x00, 0x06, 0x09, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x9c, 0x20, 0x1d, 0x0c, 0x28, 0x17, 0x0e, 0x46, - 0xad, 0x30, 0xe5, 0x00, 0x30, 0xb9, 0x30, 0xc6, 0x30, 0xf3, 0x30, 0xc7, 0x30, 0x30, 0xa3, 0x28, 0x23, 0x05, 0xfd, 0x39, 0x4b, 0x00, 0x79, 0x00, - 0x41, 0x75, 0x27, 0x15, 0x74, 0x00, 0x65, 0x00, 0x6e, 0x28, 0x1f, 0x6b, 0x69, 0x05, 0xef, 0xb7, 0x30, 0x7f, 0x6f, 0x06, 0xa0, 0x81, 0x4b, 0x28, - 0x91, 0x06, 0xd0, 0xff, 0xc0, 0x06, 0xf0, 0x7f, 0x06, 0xd1, 0xff, 0x18, 0x4e, 0xaf, 0x65, 0xd5, 0x6e, 0x08, 0xea, 0x8f, 0x14, 0x5c, 0x06, 0x5b, - 0x17, 0x50, 0xd0, 0xa4, 0x05, 0xc2, 0x50, 0xd1, 0x1c, 0xb5, 0x06, 0x98, 0x17, 0x6a, 0x2f, 0xab, 0x60, 0x65, 0x06, 0xa2, 0xff, 0x06, 0xd3, 0xff, - 0x1a, 0x04, 0x4e, 0x04, 0x41, 0x02, 0x04, 0x42, 0x04, 0x35, 0x04, 0x3d, 0x28, 0x1d, 0x38, 0xe0, 0x28, 0x1b, 0x0e, 0x14, 0xff, 0x10, 0x0e, 0xb0, - 0x7f, 0x0d, 0x07, 0x08, 0x08, 0x08, 0x00, 0x08, 0x0d, 0x0d, 0x08, 0x07, 0x0a, 0x07, 0x0d, 0x00, 0x0d, 0x0d, 0x0d, 0x12, 0x1e, 0x22, 0x10, 0x00, - 0x00, 0x00, 0x0f, 0x46, 0xed, 0x30, 0xd9, 0x30, 0xc1, 0xd7, 0x06, 0x08, 0x0d, 0x9f, 0xff, 0x4c, 0x27, 0x95, 0x76, 0x28, 0x13, 0x3f, 0x2d, 0x06, - 0xb0, 0x7f, 0x6b, 0x74, 0x06, 0x60, 0x81, 0x30, 0xff, 0x77, 0x40, 0x7f, 0x73, 0x06, 0x41, 0x03, 0x07, 0x71, 0x7f, 0x81, 0x06, 0x71, 0xff, 0x1b, - 0x6d, 0xf4, 0x7e, 0x47, 0x59, 0x06, 0x92, 0xff, 0x03, 0x5c, 0xb8, 0xa0, 0xbc, 0x58, 0xce, 0x06, 0x78, 0x15, 0xb2, 0xff, 0x61, 0x73, 0x2a, 0xa1, - 0x0e, 0x21, 0xff, 0x04, 0x3e, 0x04, 0x32, 0x28, 0x15, 0x70, 0x47, 0x05, 0xe8, 0x0f, 0x0f, 0x73, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0e, 0x08, 0x09, - 0x09, 0x00, 0x09, 0x09, 0x0e, 0x0e, 0x09, 0x08, 0x0b, 0x08, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0xac, 0x1e, 0x93, 0x11, 0x00, 0x00, 0x00, 0x10, 0x46, - 0xe2, 0x30, 0xf3, 0x30, 0x15, 0xbf, 0x30, 0xca, 0x06, 0x88, 0x19, 0x4d, 0x2f, 0xad, 0x6e, 0x2f, 0xab, 0x50, 0x61, 0x2f, 0xab, 0x61, 0x10, 0x16, - 0x20, 0x7f, 0x99, 0x84, 0x54, 0x58, 0x20, 0xb3, 0x7e, 0x06, 0x9b, 0x17, 0xac, 0xba, 0xc0, 0xd0, 0x98, 0x68, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf3, - 0x7f, 0x1c, 0x28, 0x17, 0x3d, 0x04, 0x42, 0x2c, 0x04, 0x30, 0x20, 0x05, 0x30, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x0f, 0x09, 0x00, 0x0a, - 0x0a, 0x0a, 0x0a, 0x0f, 0x0f, 0x0a, 0x09, 0x00, 0x0c, 0x09, 0x0f, 0x0f, 0x0f, 0x0f, 0xdf, 0x1e, 0x00, 0x86, 0x10, 0x00, 0x00, 0x11, 0x46, 0xd1, - 0x30, 0x01, 0xb6, 0x30, 0xeb, 0x30, 0xb8, 0x30, 0xaf, 0x06, 0x68, 0x19, 0x51, 0x50, 0x28, 0x11, 0x7a, 0x28, 0x15, 0x72, 0x00, 0x64, 0x20, 0x07, - 0x05, 0x68, 0x00, 0x69, 0x00, 0x6b, 0x06, 0x80, 0x7f, 0x6a, 0x06, 0x00, 0x7d, 0xaf, 0x50, 0xff, 0x73, 0x60, 0xff, 0x73, 0x4f, 0xb5, 0x05, 0xd1, - 0x01, 0x07, 0xb1, 0x7f, 0x06, 0x31, 0xff, 0x00, 0x15, 0x5e, 0x4e, 0x62, 0x14, 0x5c, 0x09, 0x54, 0x20, 0x4b, 0x51, 0x06, 0x5b, 0x19, 0x0c, 0xd3, - 0x90, 0xc7, 0x74, 0x07, 0xb9, 0xc0, 0xc9, 0x6c, 0xd0, 0x06, 0x58, 0x1b, 0xd3, 0x7f, 0x06, 0x13, 0x01, 0xa8, 0x06, 0xf3, 0xff, 0x1f, 0x28, 0x11, - 0x37, 0x28, 0x15, 0x40, 0x04, 0x34, 0x03, 0x04, 0x36, 0x04, 0x38, 0x04, 0x3a, 0x05, 0xe8, 0x1b, 0x0e, 0xf3, 0x7f, 0x80, 0x10, 0x06, 0xf0, 0xff, - 0x10, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x10, 0x00, 0x10, 0x0b, 0x0a, 0x0d, 0x0a, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x1e, 0x4e, 0x11, 0x00, 0x00, - 0x12, 0x2d, 0x46, 0xda, 0x28, 0x15, 0xcb, 0x06, 0x88, 0x15, 0x38, 0x17, 0x65, 0x28, 0x13, 0x60, 0x6e, 0x06, 0x27, 0x91, 0x10, 0x0f, 0x50, 0x7f, - 0x69, 0x4f, 0x14, 0x5c, 0x3c, 0x40, 0x5c, 0x06, 0x78, 0x15, 0x00, 0x00, 0x98, 0xd3, 0x74, 0xb9, 0x31, 0xc8, 0xb2, 0x06, 0x78, 0x15, 0x0f, 0x13, - 0x7f, 0x1f, 0x04, 0x35, 0x28, 0x13, 0x60, 0x3d, 0x06, 0x28, 0x11, 0x10, 0x17, 0x54, 0xff, 0x11, 0x0b, 0x0c, 0x0c, 0x0c, 0x00, 0x0c, 0x11, 0x11, - 0x0c, 0x0b, 0x0e, 0x0b, 0x11, 0x00, 0x11, 0x11, 0x11, 0x48, 0x1e, 0x5c, 0x10, 0x00, 0x00, 0x00, 0x13, 0x46, 0xd7, 0x30, 0xed, 0x30, 0xd6, 0x02, - 0x30, 0xc7, 0x30, 0xa3, 0x30, 0xd5, 0x06, 0x48, 0x1b, 0x50, 0x02, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x76, 0x2f, 0xad, 0x69, 0xd6, 0x20, 0x05, 0x0e, - 0x70, 0x7f, 0x77, 0x40, 0xff, 0x77, 0x0e, 0x80, 0xff, 0x06, 0x91, 0xff, 0x6e, 0x00, 0x66, 0x57, 0x7f, 0x2b, 0x59, 0xea, 0x8f, 0x2b, 0x40, 0x59, - 0x06, 0x5b, 0x19, 0x0c, 0xd5, 0x5c, 0xb8, 0x0c, 0xbe, 0x0c, 0x14, 0xb5, 0x0c, 0xbe, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x01, 0x3b, - 0x04, 0x3e, 0x04, 0x32, 0x04, 0x34, 0x28, 0x19, 0x70, 0x32, 0x06, 0x28, 0x19, 0x0f, 0x54, 0xff, 0x10, 0x06, 0x90, 0xff, 0x12, 0x0d, 0x0e, 0x0e, - 0x00, 0x0e, 0x0e, 0x12, 0x12, 0x0e, 0x0d, 0x10, 0x0d, 0x00, 0x12, 0x12, 0x12, 0x12, 0xf6, 0x1d, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x14, 0x46, 0xe9, - 0x30, 0xba, 0x30, 0x04, 0xb0, 0x30, 0xe9, 0x30, 0xc9, 0x06, 0x48, 0x15, 0x00, 0x00, 0x01, 0x52, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x67, 0x2f, 0xb3, - 0x6c, 0x61, 0x28, 0x1b, 0x0e, 0x50, 0x7f, 0x73, 0x0e, 0xe0, 0xff, 0x06, 0xb1, 0xff, 0xc9, 0x62, 0x02, 0x79, 0x51, 0x3c, 0x68, 0xd2, 0x52, 0x06, - 0x58, 0x15, 0x00, 0x00, 0x00, 0x7c, 0xb7, 0x88, 0xc9, 0xf8, 0xad, 0x7c, 0x18, 0xb7, 0xdc, 0xb4, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x20, 0x04, - 0x30, 0x02, 0x04, 0x37, 0x04, 0x33, 0x04, 0x40, 0x20, 0x07, 0x34, 0xe0, 0x06, 0x28, 0x17, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x13, 0x0e, - 0x0f, 0x0f, 0x0f, 0x00, 0x10, 0x13, 0x13, 0x0f, 0x0f, 0x11, 0x0e, 0x13, 0x00, 0x13, 0x13, 0x13, 0xf5, 0x1e, 0xde, 0x12, 0x00, 0x03, 0x00, 0x15, - 0x46, 0xeb, 0x30, 0xbb, 0x06, 0x68, 0x11, 0x78, 0x17, 0x54, 0x75, 0x27, 0x17, 0x65, 0x06, 0xa0, 0x7f, 0x6f, 0x40, 0x81, 0x73, 0x00, 0x78, 0xe9, - 0x06, 0xa0, 0xff, 0x06, 0x91, 0x01, 0x07, 0x11, 0x7f, 0x06, 0xd1, 0xff, 0x81, 0x9c, 0x5e, 0x43, 0x58, 0x06, 0xb2, 0xff, 0xe8, 0xb8, 0x38, 0xc1, - 0x06, 0x58, 0x11, 0x92, 0xff, 0x40, 0x65, 0x0e, 0xa2, 0x7f, 0x20, 0x04, 0x43, 0x04, 0x41, 0x04, 0x70, 0x35, 0x06, 0x28, 0x11, 0x0f, 0x53, 0x7f, - 0x10, 0x06, 0xf0, 0xff, 0x14, 0x0f, 0x10, 0x10, 0x00, 0x11, 0x11, 0x14, 0x14, 0x10, 0x10, 0x12, 0x0f, 0x01, 0x14, 0x14, 0x14, 0x14, 0x2e, 0x1f, - 0x77, 0x28, 0x17, 0x00, 0x16, 0x46, 0xb7, 0x30, 0xea, 0x30, 0xb9, 0x30, 0x10, 0xc8, 0x30, 0xe9, 0x06, 0x68, 0x1d, 0x53, 0x00, 0x69, 0x00, 0x46, - 0x6c, 0x20, 0x03, 0x73, 0x00, 0x74, 0x4f, 0xb3, 0x10, 0x15, 0xf0, 0x7f, 0x21, 0x00, 0x95, 0x29, 0x52, 0xaf, 0x65, 0x79, 0x72, 0xc9, 0x40, 0x62, - 0x06, 0x5b, 0x1d, 0xe4, 0xc2, 0xac, 0xb9, 0xa4, 0xc2, 0x0c, 0xb8, 0xd2, 0x7c, 0xb7, 0x06, 0x58, 0x1d, 0x0f, 0x01, 0xff, 0x04, 0x38, 0x20, 0x04, - 0x3b, 0x20, 0x03, 0x41, 0x04, 0x42, 0x04, 0x40, 0x30, 0x04, 0x30, 0x06, 0x08, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x11, 0x11, 0x12, 0x08, 0x13, - 0x13, 0x15, 0x15, 0x20, 0x05, 0x11, 0x15, 0x15, 0x00, 0x15, 0x15, 0x59, 0x1f, 0x61, 0x13, 0x00, 0x00, 0x11, 0x17, 0x46, 0xb9, 0x28, 0x17, 0xd9, - 0x30, 0xf3, 0x06, 0x68, 0x15, 0xd5, 0x38, 0x17, 0x38, 0x15, 0x76, 0x2f, 0x2f, 0x6e, 0x0e, 0xa0, 0x7f, 0x77, 0x0e, 0xe0, 0xff, 0x81, 0x06, 0x91, - 0xff, 0xaf, 0x65, 0x29, 0x52, 0x87, 0x65, 0x06, 0x72, 0xfd, 0x16, 0x00, 0x00, 0xac, 0x38, 0x17, 0xbc, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x21, - 0x83, 0x48, 0x15, 0x32, 0x04, 0x35, 0x04, 0x3d, 0x06, 0x08, 0x13, 0x0f, 0x94, 0xff, 0x80, 0x10, 0x06, 0x90, 0xff, 0x16, 0x12, 0x12, 0x13, 0x14, - 0x14, 0x16, 0x00, 0x16, 0x13, 0x13, 0x14, 0x12, 0x16, 0x16, 0x16, 0x00, 0x16, 0x5b, 0x1e, 0xb9, 0x12, 0x00, 0x00, 0x18, 0xa8, 0x28, 0x17, 0xe2, - 0x28, 0x19, 0xe3, 0x06, 0x88, 0x19, 0x53, 0x00, 0x6d, 0x2e, 0x00, 0x6f, 0x2f, 0xb1, 0x79, 0x2f, 0xab, 0x06, 0x38, 0x19, 0x07, 0x70, 0x7f, 0x6a, - 0xc0, 0x0e, 0xe0, 0x7f, 0x06, 0x71, 0xff, 0xaf, 0x65, 0xab, 0x83, 0x81, 0x68, 0x81, 0x06, 0x98, 0x17, 0xa4, 0xc2, 0xb0, 0xba, 0xb8, 0xb7, 0x06, - 0xb8, 0x17, 0x82, 0x0e, 0xd1, 0xff, 0x21, 0x04, 0x3c, 0x04, 0x3e, 0x28, 0x1b, 0x4f, 0xe8, 0x06, 0x88, 0x17, 0x0f, 0x54, 0xff, 0x10, 0x06, 0x70, - 0xff, 0x17, 0x28, 0x10, 0x15, 0x15, 0x17, 0x00, 0x17, 0x14, 0x14, 0x15, 0x13, 0x17, 0x17, 0x17, 0x00, 0x17, 0x92, 0x1d, 0x90, 0x11, 0x00, 0x00, - 0x19, 0x80, 0x28, 0x17, 0xbf, 0x30, 0xe9, 0x30, 0xfb, 0x30, 0xb6, 0x31, 0x30, 0xb4, 0x20, 0x07, 0x06, 0x1d, 0x37, 0x53, 0x00, 0x74, 0x28, 0x11, - 0x45, 0x72, 0x28, 0x15, 0x20, 0x00, 0x5a, 0x28, 0x1b, 0x67, 0x28, 0x25, 0xd8, 0x30, 0x0d, 0x0e, 0x30, 0x7f, 0x53, 0x0e, 0xe0, 0xff, 0x06, 0x31, - 0xff, 0xe7, 0x65, 0x4e, 0x04, 0x62, 0x08, 0x62, 0xc9, 0x62, 0x06, 0x78, 0x19, 0xa4, 0xc2, 0x00, 0xc0, 0xd0, 0x7c, 0xb7, 0x90, 0xc7, 0xe0, 0xac, - 0x60, 0x7c, 0x06, 0x48, 0x1d, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x42, 0x04, 0x30, 0x22, 0x04, 0x40, 0x20, 0x03, 0x2d, 0x00, 0x17, 0x20, 0x09, 0x33, - 0xf0, 0x28, 0x25, 0x30, 0x0d, 0x10, 0x06, 0x34, 0xff, 0x10, 0x06, 0x30, 0xff, 0x18, 0x16, 0x16, 0x17, 0x0c, 0x17, 0x16, 0x18, 0x18, 0x20, 0x03, - 0x20, 0x05, 0x18, 0x18, 0x00, 0x2b, 0x1e, 0x3b, 0x12, 0x00, 0x00, 0x1a, 0x46, 0x01, 0xb7, 0x30, 0xe5, 0x30, 0xe1, 0x30, 0xf3, 0x06, 0x28, 0x11, - 0x8a, 0x7f, 0xaf, 0x68, 0x00, 0x75, 0x2f, 0xb3, 0x65, 0x06, 0x4f, 0xad, 0x00, 0x28, 0x00, 0x43, 0x20, 0x7f, 0x6f, 0x06, 0xa0, 0x81, 0x53, 0x00, - 0x63, 0xe1, 0x06, 0xc1, 0x01, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x12, 0x82, 0xe8, 0x95, 0x06, 0x78, 0x13, 0x86, 0x3f, 0xff, 0x88, 0xc2, 0x58, - 0xba, 0x06, 0x38, 0x0f, 0x9f, 0xaf, 0x6a, 0xa0, 0x2f, 0xaf, 0x65, 0x0e, 0x82, 0x7f, 0x28, 0x04, 0x43, 0x04, 0x3c, 0x0e, 0x04, 0x35, 0x04, 0x3d, - 0x05, 0x88, 0x09, 0x0f, 0xd3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x19, 0x00, 0x10, 0x03, 0x11, 0x12, 0x12, 0x19, 0x19, 0x12, 0x00, 0x11, 0x1b, 0x10, - 0x19, 0x19, 0x19, 0x19, 0xc5, 0x00, 0x1e, 0x25, 0x13, 0x00, 0x00, 0x1b, 0x46, 0xc8, 0x00, 0x30, 0xa5, 0x30, 0xeb, 0x30, 0xb4, 0x30, 0xd3, 0x56, - 0x30, 0x38, 0x21, 0xc6, 0x06, 0x08, 0x1f, 0x54, 0x4f, 0xad, 0x3f, 0xa5, 0x76, 0x0b, 0x00, 0x69, 0x00, 0x73, 0x28, 0x25, 0x74, 0x28, 0x23, 0x06, - 0x70, 0x7f, 0xde, 0x37, 0xa3, 0x06, 0x70, 0x7f, 0x77, 0x40, 0xff, 0x05, 0xf0, 0x81, 0x07, 0xd1, 0x7f, 0x06, 0x11, 0xff, 0x79, 0x00, 0x72, 0x14, - 0x5c, 0x08, 0x62, 0xf4, 0x7e, 0xc0, 0x10, 0x4e, 0x79, 0x72, 0x06, 0x3b, 0x1b, 0x2c, 0xd2, 0x74, 0xb9, 0x00, 0xe0, 0xac, 0x44, 0xbe, 0x88, 0xc2, - 0x4c, 0xd1, 0xd0, 0x06, 0x38, 0x1f, 0xf3, 0x7f, 0x6a, 0x0d, 0xe1, 0xff, 0x22, 0x04, 0x4b, 0x04, 0x00, 0x40, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x32, - 0x04, 0x07, 0x38, 0x04, 0x48, 0x04, 0x42, 0x28, 0x23, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x00, 0x1a, 0x17, 0x17, 0x18, 0x18, 0x17, 0x1a, - 0x1a, 0x10, 0x18, 0x17, 0x19, 0x20, 0x05, 0x1a, 0x1a, 0xc1, 0x1e, 0x00, 0xe5, 0x12, 0x00, 0x00, 0x1c, 0x46, 0xd9, 0x30, 0x02, 0xea, 0x30, 0xb3, - 0x30, 0xfb, 0x30, 0x58, 0x1f, 0xce, 0x2a, 0x30, 0xdc, 0x05, 0xe8, 0x19, 0x56, 0x2f, 0xa7, 0x6c, 0x28, 0x11, 0x6b, 0xaa, 0x2f, 0xb5, 0x20, 0x68, - 0x25, 0x6e, 0x48, 0x25, 0x6f, 0x0d, 0x40, 0x7f, 0x57, 0xb2, 0x00, 0x60, 0xff, 0x77, 0x0d, 0x60, 0xff, 0x06, 0xf1, 0xff, 0x27, 0x59, 0x38, 0x19, - 0xfa, 0x10, 0x8b, 0x83, 0x6c, 0x06, 0x38, 0x15, 0x00, 0x00, 0xa8, 0xbc, 0x08, 0xac, 0xb9, 0x54, 0xcf, 0x38, 0x1d, 0x78, 0xb1, 0xf4, 0x6a, 0xbc, - 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x07, 0x3b, 0x28, 0x11, 0x3a, 0xab, 0x28, 0x19, 0x2d, 0x68, 0x25, 0x3d, 0x48, 0x25, 0x3e, 0x05, - 0x48, 0x1f, 0x0e, 0xf4, 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x1b, 0x19, 0x19, 0x1a, 0x1a, 0x19, 0x1b, 0x08, 0x1b, 0x1a, 0x19, 0x04, 0x20, 0x05, - 0x1b, 0x1b, 0xa3, 0x20, 0x1e, 0x3a, 0x28, 0x17, 0x1d, 0x46, 0xd6, 0x30, 0xe9, 0x0d, 0x30, 0xc4, 0x30, 0xa1, 0x05, 0xe8, 0x0d, 0xb8, 0x17, 0x72, - 0x2f, 0xb1, 0x55, 0x74, 0x2f, 0x29, 0x61, 0x0e, 0x40, 0x7f, 0x57, 0x40, 0xff, 0x7a, 0x06, 0x60, 0xfd, 0x81, 0x0f, 0x11, 0x7f, 0x17, 0x5f, 0xc9, - 0x62, 0xdf, 0x5b, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x00, 0x0c, 0xbe, 0x7c, 0xb7, 0x28, 0xcc, 0xd1, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x12, 0x28, - 0x07, 0x30, 0x04, 0x46, 0x20, 0x03, 0xc1, 0x10, 0x06, 0x54, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x1c, 0x1b, 0x1b, 0x1c, 0x1c, 0x20, 0x02, 0x10, 0x1c, - 0x1b, 0x06, 0x30, 0x05, 0x1c, 0xb9, 0x1e, 0xbf, 0x40, 0x10, 0x00, 0x3f, 0xff, 0x01, 0x14, 0x15, 0x16, 0x16, 0x03, 0x00, 0x01, 0x01, 0x16, 0x15, - 0x17, 0x14, 0x01, 0x01, 0x00, 0x01, 0x01, 0x02, 0x15, 0x14, 0x15, 0x10, 0x0f, 0x00, 0x02, 0x02, 0x15, 0x0e, 0x16, 0x15, 0x02, 0x02, 0x34, 0x02, - 0x02, 0x20, 0x1a, 0x20, 0x16, 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, 0x03, 0x04, 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x04, 0x04, 0x0d, 0x0c, - 0x0f, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x1a, 0x1a, 0x28, 0x7c, 0x05, 0x05, 0xc0, 0x20, 0x03, 0x20, 0x05, 0x05, 0x05, 0x06, 0x18, 0x18, - 0x19, 0x01, 0x19, 0x18, 0x06, 0x06, 0x19, 0x18, 0x03, 0x20, 0x05, 0x12, 0x06, 0x06, 0x07, 0x30, 0x44, 0x02, 0x07, 0x40, 0x06, 0x07, 0x00, 0x07, - 0x07, 0x07, 0x08, 0x03, 0x04, 0x04, 0x03, 0x00, 0x04, 0x08, 0x08, 0x04, 0x03, 0x08, 0x03, 0x08, 0x00, 0x08, 0x08, 0x08, 0x09, 0x04, 0x05, 0x05, - 0x04, 0x00, 0x05, 0x09, 0x09, 0x05, 0x04, 0x07, 0x04, 0x09, 0x00, 0x09, 0x09, 0x09, 0x0a, 0x05, 0x07, 0x03, 0x05, 0x08, 0x06, 0x0a, 0x0a, 0x03, - 0x20, 0x4e, 0x0a, 0x0a, 0x0a, 0x00, 0x0a, 0x0b, 0x1c, 0x1c, 0x06, 0x06, 0x1c, 0x0b, 0x20, 0x0b, 0x06, 0x20, 0xca, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, - 0x80, 0x20, 0x52, 0x07, 0x07, 0x0c, 0x0c, 0x07, 0x06, 0x09, 0x01, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x07, 0x30, 0x45, 0x02, 0x0d, 0x0d, 0x08, - 0x07, 0x0a, 0x07, 0x30, 0x99, 0x0e, 0x40, 0x08, 0x30, 0x45, 0x0e, 0x0e, 0x09, 0x08, 0x0b, 0x08, 0x02, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x09, 0x30, - 0x45, 0x0f, 0x00, 0x0f, 0x0a, 0x09, 0x0c, 0x09, 0x0f, 0x0f, 0x0f, 0x10, 0x0f, 0x10, 0x0a, 0x30, 0x45, 0x10, 0x10, 0x0b, 0x0a, 0x00, 0x0d, 0x0a, - 0x10, 0x10, 0x10, 0x10, 0x11, 0x0b, 0x80, 0x30, 0x45, 0x11, 0x11, 0x0c, 0x0b, 0x0e, 0x0b, 0x11, 0x04, 0x11, 0x11, 0x11, 0x12, 0x0d, 0x30, 0x35, - 0x12, 0x12, 0x00, 0x0e, 0x0d, 0x10, 0x0d, 0x12, 0x12, 0x12, 0x12, 0x20, 0x13, 0x0e, 0x30, 0x34, 0x13, 0x13, 0x0f, 0x0f, 0x11, 0x01, 0x0e, 0x13, - 0x13, 0x13, 0x13, 0x14, 0x0f, 0x20, 0x33, 0x00, 0x11, 0x14, 0x14, 0x10, 0x10, 0x12, 0x0f, 0x14, 0x08, 0x14, 0x14, 0x14, 0x15, 0x20, 0x32, 0x13, - 0x13, 0x15, 0x40, 0x15, 0x20, 0x05, 0x11, 0x15, 0x15, 0x15, 0x15, 0x16, 0x84, 0x20, 0x32, 0x14, 0x14, 0x16, 0x16, 0x20, 0x29, 0x12, 0x16, 0x08, - 0x16, 0x16, 0x16, 0x17, 0x20, 0x32, 0x15, 0x15, 0x17, 0x40, 0x17, 0x20, 0x29, 0x13, 0x17, 0x17, 0x17, 0x17, 0x18, 0x87, 0x20, 0x12, 0x17, 0x16, - 0x18, 0x18, 0x20, 0x03, 0x20, 0x05, 0x21, 0x2c, 0x00, 0x10, 0x03, 0x11, 0x12, 0x12, 0x19, 0x19, 0x12, 0x06, 0x11, 0x1b, 0x10, 0x19, 0x19, 0x29, - 0xcc, 0x20, 0x22, 0x18, 0x03, 0x17, 0x1a, 0x1a, 0x18, 0x17, 0x19, 0x20, 0x05, 0x21, 0x5c, 0xe0, 0xe9, 0xdf, 0xf1, 0xd7, 0x3f, 0xe4, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x7c, 0xb3, 0x00, 0x11, 0x15, 0x00, 0x00, 0x30, 0x01, 0x47, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x94, 0x20, 0x5d, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x47, 0xb6, 0x30, 0xb0, 0x30, 0xec, 0x00, - 0x30, 0xd6, 0x30, 0xf4, 0x76, 0x44, 0x8f, 0x02, 0x40, 0x5e, 0x06, 0x18, 0x23, 0x5a, 0x00, 0x61, 0x00, 0x67, 0x00, 0x06, 0x72, 0x00, 0x65, 0x00, - 0x62, 0x06, 0x48, 0xa0, 0xb0, 0x7f, 0x20, 0x00, 0x00, 0x28, 0x00, 0x76, 0x00, 0x69, 0x00, 0x6c, 0x88, 0x20, 0x01, 0x65, 0x00, 0x29, 0x06, 0x40, - 0x7f, 0x53, 0x00, 0x74, 0xb5, 0x21, 0x11, 0x64, 0x20, 0x05, 0x05, 0xb0, 0x7f, 0x61, 0x21, 0x7d, 0x72, 0x20, 0xf9, 0x56, 0x61, 0x06, 0x0a, 0x24, - 0x43, 0x21, 0x6f, 0x75, 0x20, 0xef, 0x30, 0xf3, 0x20, 0xb0, 0x20, 0xf7, 0x65, 0x21, 0x85, 0x05, 0xb2, 0x13, 0x28, 0x84, 0x3c, 0x68, 0x0c, 0xd2, - 0x52, 0x03, 0x5e, 0x06, 0x32, 0xfb, 0x3b, 0x9a, 0x90, 0xc7, 0x03, 0xf8, 0xad, 0x08, 0xb8, 0x0c, 0xbe, 0x06, 0x7b, 0x9d, 0xf2, 0xff, 0x77, 0x73, - 0x62, 0x7f, 0x05, 0x52, 0xfd, 0x00, 0x13, 0x7f, 0x63, 0x23, 0x7f, 0x52, 0x0d, 0x05, 0x53, 0x81, 0x00, 0x17, 0x04, 0x30, 0x04, 0x33, 0x04, 0x40, - 0x04, 0x0c, 0x35, 0x04, 0x31, 0x04, 0x06, 0xf4, 0x7f, 0x10, 0x16, 0x30, 0x7f, 0x01, 0x14, 0x00, 0x15, 0x15, 0x15, 0x01, 0x01, 0x01, 0x15, 0x14, - 0x28, 0x07, 0x14, 0x20, 0x06, 0x01, 0x58, 0x17, 0x07, 0x47, 0xd3, 0x00, 0x30, 0xa7, 0x30, 0xed, 0x30, 0xf4, 0x30, 0xa1, 0x02, 0x30, 0xeb, 0x30, - 0x1d, 0xff, 0xd3, 0x20, 0x0b, 0xb4, 0x04, 0x30, 0xe9, 0x30, 0xe1, 0x90, 0x05, 0x7f, 0xc5, 0x42, 0x00, 0x45, 0x6a, 0x28, 0x13, 0x6c, 0x00, 0x6f, - 0x27, 0x91, 0x61, 0x28, 0x1f, 0x6a, 0x2d, 0x20, 0x11, 0x37, 0x99, 0x6f, 0x28, 0x2d, 0x6f, 0x28, 0x2f, 0x61, 0xa2, 0x27, 0xad, 0x43, 0x20, 0x1d, - 0x75, 0x00, 0x6e, 0x27, 0x31, 0x79, 0xea, 0x06, 0x20, 0x7f, 0x06, 0xf0, 0xff, 0x04, 0xdf, 0xcf, 0x52, 0x29, 0x91, 0x67, 0x29, 0x0b, 0x6f, 0xd5, - 0x21, 0x5f, 0x37, 0x93, 0x64, 0x29, 0x17, 0x20, 0x00, 0x01, 0x95, 0x20, 0x60, 0x1b, 0xba, 0x31, 0xa9, 0x6c, 0x41, 0x93, 0x03, 0x71, 0x25, 0x31, - 0xdb, 0x6e, 0x68, 0x17, 0x6f, 0xc0, 0x88, 0x19, 0x05, 0x91, 0x95, 0x2b, 0x52, 0x1b, 0x6d, 0xe6, 0x74, 0x00, 0x14, 0x5c, 0x2d, 0x00, 0xd4, 0x6b, - 0x1b, 0x6d, 0x02, 0x08, 0x62, 0xc9, 0x62, 0xbf, 0x53, 0x05, 0xbf, 0xc1, 0xa8, 0x00, 0xbc, 0x5c, 0xb8, 0x14, 0xbc, 0x74, 0xb9, 0x2d, 0x00, 0x00, - 0x4c, 0xbe, 0x5c, 0xb8, 0xe0, 0xac, 0x7c, 0x07, 0xb7, 0x20, 0x00, 0x70, 0xad, 0x05, 0x9f, 0xc3, 0x09, 0x12, 0xff, 0x58, 0x2d, 0xd0, 0xb2, 0x25, - 0x03, 0xbb, 0xb1, 0x11, 0x28, 0x11, 0x3b, 0x04, 0x3e, 0x04, 0x41, 0x32, 0x28, 0x1f, 0x40, 0x04, 0x41, 0x04, 0x3a, 0x20, 0x0b, 0x56, 0x2d, 0x20, - 0x15, 0x38, 0x40, 0x15, 0x33, 0x20, 0x19, 0x50, 0x15, 0x30, 0x00, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x36, 0x04, 0x43, 0x2b, 0x04, 0x3f, 0x28, 0x49, - 0x3d, 0x20, 0x1f, 0x4f, 0x03, 0x48, 0x47, 0x09, 0x14, 0xff, 0xa2, 0x10, 0x0c, 0xd0, 0x7f, 0x02, 0x28, 0x13, 0x03, 0x02, 0x02, 0x30, 0x06, 0x01, - 0x84, 0x20, 0x06, 0x02, 0xa3, 0x20, 0xf8, 0x28, 0x17, 0x08, 0x47, 0x51, 0xd6, 0x28, 0x15, 0xc9, 0x28, 0x11, 0xdd, 0x30, 0xb5, 0x28, 0x1d, 0x1a, - 0xa3, 0x30, 0xca, 0x05, 0xa8, 0x13, 0x58, 0x17, 0x72, 0x28, 0x13, 0x64, 0xad, 0x28, 0x0f, 0x50, 0x28, 0x1b, 0x73, 0x2f, 0xbd, 0x3f, 0xb1, 0x6e, - 0x05, 0x08, 0x0f, 0xff, 0x01, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x5f, 0xba, 0x00, 0x78, 0x17, 0x51, 0x95, 0x00, 0x18, 0x0f, 0x03, 0xf1, 0x25, - 0x00, 0x78, 0x17, 0x80, 0x05, 0x71, 0x95, 0x03, 0x5e, 0x57, 0x7f, 0xb7, 0x5f, 0x2d, 0x00, 0x00, 0xe2, 0x6c, 0x28, 0x84, 0xf4, 0x7e, 0xb3, 0x44, - 0x7e, 0x05, 0xd8, 0x15, 0x00, 0x00, 0x0c, 0x28, 0x0d, 0xdc, 0xb4, 0x00, 0x2d, 0x00, 0xec, 0xd3, 0xac, 0xc0, 0x44, 0xbe, 0x3d, 0x98, 0xb0, 0x05, - 0xd8, 0x15, 0x08, 0xb2, 0xff, 0x04, 0xd8, 0x0f, 0x98, 0x17, 0x40, 0x28, 0x15, 0x55, 0x34, 0x88, 0x11, 0x1f, 0x28, 0x23, 0x41, 0x28, 0x23, 0x32, - 0x04, 0xc8, 0x0d, 0xe2, 0x09, 0x34, 0xff, 0x10, 0x0d, 0x50, 0x7f, 0x38, 0x13, 0x04, 0x03, 0x03, 0x38, 0x1a, 0x02, 0x80, 0x20, 0x06, 0x03, 0x1e, - 0x20, 0xcf, 0x0c, 0x00, 0x00, 0x02, 0x09, 0x47, 0xc9, 0x30, 0xa5, 0x30, 0x38, 0x1b, 0xf4, 0x08, 0x30, 0xcb, 0x30, 0xaf, 0x28, 0x1f, 0xcd, 0x30, - 0xec, 0x2a, 0x30, 0xc8, 0x28, 0x21, 0xa1, 0x05, 0x68, 0x1f, 0x44, 0x2b, 0x09, 0x62, 0xa2, 0x48, 0x1b, 0x76, 0x2e, 0xb1, 0x69, 0x00, 0x6b, 0x2f, - 0xb1, 0x4e, 0xaf, 0x2f, 0xc1, 0x72, 0x2f, 0xc5, 0x74, 0x4f, 0xc3, 0x04, 0xdb, 0x2f, 0x01, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0xaa, 0x05, 0xd8, 0x17, - 0x52, 0x2f, 0xfb, 0x67, 0x2c, 0x9d, 0x73, 0x2f, 0xb7, 0x6f, 0xd7, 0x41, 0x8b, 0x3f, 0xaf, 0x65, 0x4c, 0xad, 0x61, 0x04, 0x29, 0x2f, 0x00, 0x58, - 0x17, 0x05, 0x91, 0x95, 0x20, 0x5c, 0x67, 0x38, 0x19, 0x2b, 0x59, 0xaf, 0x65, 0x4b, 0x00, 0x51, 0x2d, 0x00, 0x85, 0x51, 0xf7, 0x96, 0x79, 0x12, - 0x72, 0xe6, 0x74, 0x05, 0x98, 0x1d, 0x50, 0xb4, 0x38, 0x19, 0x0c, 0x00, 0xbe, 0xc8, 0xb2, 0x6c, 0xd0, 0x2d, 0x00, 0x24, 0x01, 0xb1, 0x08, 0xb8, - 0xb8, 0xd2, 0x14, 0xbc, 0x05, 0x98, 0x1d, 0xd5, 0x09, 0x12, 0xff, 0x04, 0xd8, 0x1f, 0x14, 0x27, 0xf3, 0x31, 0x48, 0x1b, 0x32, 0x47, 0xf7, 0x44, - 0x46, 0x68, 0x1f, 0x1d, 0x04, 0x35, 0x28, 0x31, 0x35, 0x04, 0x7e, 0x42, 0x28, 0x21, 0x38, 0x11, 0x04, 0x78, 0x25, 0x09, 0x14, 0xff, 0x10, 0x0c, - 0xd0, 0x7f, 0x38, 0x13, 0x11, 0x24, 0x04, 0x04, 0x28, 0x1a, 0x06, 0x03, 0x20, 0x06, 0x04, 0x52, 0x20, 0x1e, 0xe0, 0x28, 0x17, 0x0a, 0x47, 0xa4, - 0x30, 0xb9, 0xb5, 0x28, 0x07, 0xe9, 0x05, 0x68, 0x05, 0x00, 0x1f, 0xf6, 0x49, 0x2f, 0xa3, 0x74, 0x2f, 0xb3, 0x6f, 0x69, 0x05, 0x8b, 0x21, 0x00, - 0x70, 0x7f, 0x65, 0x06, 0xe0, 0xff, 0x37, 0x7b, 0x06, 0x11, 0x83, 0xf8, 0x17, 0xf8, 0xb1, 0x8f, 0x05, 0x3e, 0x35, 0x00, 0x58, 0x17, 0xb2, 0x15, - 0x04, 0xdf, 0xbf, 0x0a, 0x4f, 0xaf, 0x06, 0x65, 0x79, 0x72, 0xc9, 0x62, 0x05, 0x98, 0x09, 0xdf, 0xff, 0x74, 0x01, 0xc7, 0xa4, 0xc2, 0xb8, 0xd2, - 0x7c, 0xb7, 0x05, 0x98, 0x09, 0xba, 0x00, 0x73, 0x7f, 0xeb, 0x07, 0x23, 0xff, 0x04, 0xb8, 0x01, 0x00, 0x5f, 0xe7, 0x18, 0x27, 0xf1, 0x42, 0x8e, - 0x28, 0x17, 0x38, 0x04, 0x39, 0x04, 0x87, 0xfb, 0x09, 0x54, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x05, 0x89, 0x28, 0x13, 0x0f, 0x05, 0x05, 0x20, 0x06, - 0x0a, 0x04, 0x20, 0x06, 0x00, 0x05, 0x2a, 0x20, 0xe8, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x47, 0xab, 0x30, 0xeb, 0x30, 0xed, 0x30, 0xf4, 0x0a, 0x30, - 0xa1, 0x30, 0xc4, 0x06, 0x48, 0x1b, 0x4b, 0x4e, 0x8f, 0x6c, 0xbe, 0x4f, 0xaf, 0x61, 0x2c, 0x17, 0x05, 0xf8, 0x1b, 0xf0, 0x7f, 0x06, 0xf0, 0xff, - 0x06, 0xf8, 0x17, 0x64, 0xb8, 0x2f, 0x9d, 0x20, 0x05, 0xa1, 0x15, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x61, 0x53, 0x14, 0x01, 0x5c, 0x1b, 0x6d, - 0xe6, 0x74, 0x28, 0x83, 0x06, 0x58, 0x19, 0x00, 0x74, 0xce, 0x7c, 0xb9, 0x5c, 0xb8, 0x14, 0xbc, 0x3a, 0x20, 0xce, 0x06, 0x58, 0x19, 0x07, 0xf2, - 0xff, 0x05, 0xf8, 0x1b, 0x1a, 0x2f, 0xf9, 0x40, 0x02, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x32, 0x28, 0x13, 0x46, 0xe9, 0x06, 0x08, 0x19, 0x07, 0xf4, - 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x06, 0x38, 0x0c, 0x06, 0x06, 0x20, 0x06, 0x40, 0x0b, 0x30, 0x06, 0x06, 0x57, 0x20, 0x0e, 0x0b, 0x00, 0x00, 0x00, - 0x0c, 0x47, 0xb3, 0x30, 0xd7, 0x30, 0xea, 0xa0, 0x28, 0x17, 0xcb, 0x28, 0x17, 0xa1, 0x30, 0x1d, 0xff, 0xaf, 0x88, 0x20, 0x0d, 0xb8, 0x30, 0xa7, - 0x28, 0x29, 0xc4, 0x30, 0xa3, 0xaa, 0x05, 0x28, 0x29, 0x4b, 0x2e, 0xa9, 0x70, 0x4f, 0xaf, 0x76, 0x2f, 0x2f, 0x69, 0x8c, 0x2c, 0x2f, 0x61, 0x00, - 0x2d, 0x28, 0x2d, 0x3f, 0xc1, 0x7e, 0x01, 0x5f, 0x65, 0x28, 0x2d, 0x63, 0x46, 0xa9, 0x04, 0x7b, 0x49, 0x01, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x06, - 0x18, 0x17, 0xbc, 0x00, 0x11, 0x95, 0x20, 0x67, 0xb1, 0x03, 0xd1, 0x19, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0xd1, 0x79, 0x00, 0x6e, 0x66, 0xcc, - 0x91, 0x2b, 0x59, 0x3c, 0x5c, 0x20, 0xdf, 0x5b, 0x22, 0x77, 0x51, 0xcc, 0x91, 0xed, 0x70, 0x08, 0x2b, 0x59, 0x50, 0x9f, 0x05, 0x78, 0x25, 0x54, - 0xcf, 0x04, 0x00, 0xd5, 0xac, 0xb9, 0x0c, 0xbe, 0xc8, 0xb2, 0x28, 0x00, 0xcc, 0x2d, 0x00, 0x6c, 0xd0, 0xac, 0xb9, 0x1c, 0x0e, 0xc8, 0x0c, 0xbe, - 0x58, 0x05, 0x88, 0x25, 0x09, 0x52, 0xff, 0x04, 0x98, 0x2d, 0x1a, 0xae, 0x28, 0x11, 0x3f, 0x28, 0x19, 0x38, 0x28, 0x17, 0x38, 0x03, 0x38, 0x19, - 0x3e, 0x31, 0x04, 0x2d, 0x28, 0x2f, 0x30, 0x13, 0x36, 0x04, 0x35, 0x04, 0xe8, 0x2f, 0xd2, 0x09, 0x54, 0xff, 0x10, 0x0c, 0x90, 0x7f, 0x07, 0x38, - 0x0c, 0x07, 0x07, 0x20, 0x06, 0x0c, 0x84, 0x30, 0x06, 0x07, 0xd1, 0x20, 0xf5, 0x28, 0x17, 0x0d, 0x47, 0x01, 0xaf, 0x30, 0xe9, 0x30, 0xd4, 0x30, - 0xca, 0x28, 0x11, 0x16, 0xb6, 0x30, 0xb4, 0x28, 0x21, 0xa8, 0x05, 0x28, 0x0b, 0xdf, 0xaf, 0x72, 0xaa, 0x2f, 0xb1, 0x70, 0x2e, 0xb1, 0x6e, 0x48, - 0x11, 0x5a, 0x2f, 0xbf, 0x67, 0x8f, 0x2f, 0xbd, 0x72, 0x00, 0x6a, 0x4e, 0xbf, 0x04, 0xfb, 0x3d, 0x00, 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0xfa, 0x05, - 0x1e, 0xc1, 0x00, 0x78, 0x17, 0xb1, 0x95, 0x58, 0x11, 0x3f, 0xc9, 0x6c, 0x4f, 0xc3, 0x20, 0xe0, 0x03, 0xa1, 0x25, 0x00, 0x78, 0x17, 0x05, 0x71, - 0x95, 0x4b, 0x51, 0xc9, 0x62, 0xae, 0x00, 0x76, 0xb3, 0x7e, 0x2d, 0x00, 0x4e, 0x62, 0x08, 0x18, 0x62, 0x17, 0x52, 0x05, 0x78, 0x0f, 0x7f, 0xff, - 0x6c, 0xd0, 0x7c, 0x00, 0xb7, 0x3c, 0xd5, 0x98, 0xb0, 0x2d, 0x00, 0x90, 0x07, 0xc7, 0xe0, 0xac, 0x40, 0xb8, 0x05, 0x78, 0x0f, 0x09, 0x52, 0xff, - 0x04, 0x98, 0x0f, 0xa8, 0x98, 0x17, 0x40, 0x27, 0xf7, 0x3f, 0x28, 0x17, 0x3d, 0x04, 0x41, 0xab, 0x68, 0x13, 0x17, 0x28, 0x09, 0x33, 0x28, 0x2f, - 0x40, 0x40, 0x11, 0x04, 0x58, 0x0f, 0xd2, 0x09, 0x54, 0xff, 0x10, 0x0d, 0x10, 0x7f, 0x08, 0x38, 0x0c, 0x08, 0x08, 0x20, 0x06, 0x0d, 0x84, 0x30, - 0x06, 0x08, 0xd4, 0x20, 0x4b, 0x28, 0x17, 0x0e, 0x47, 0x11, 0xea, 0x30, 0xab, 0x28, 0x13, 0xbb, 0x30, 0xcb, 0x05, 0xe8, 0x0f, 0xaa, 0x7f, 0xf4, - 0x4c, 0x2f, 0xa9, 0x6b, 0x4f, 0xa3, 0x53, 0x2e, 0xb9, 0x6e, 0xff, 0x28, 0x0d, 0x05, 0x18, 0x0b, 0x00, 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xd6, - 0x97, 0x00, 0x18, 0x17, 0x57, 0xfd, 0x38, 0x0d, 0xf7, 0x71, 0x9b, 0x78, 0x17, 0x3d, 0xb7, 0x31, 0xa5, 0x67, 0x49, 0xc3, 0x03, 0x5f, 0x4f, 0x00, - 0x58, 0x17, 0x80, 0x05, 0x91, 0x95, 0x29, 0x52, 0x61, 0x53, 0x2d, 0x00, 0x5e, 0x18, 0x58, 0x3c, 0x5c, 0x05, 0xf8, 0x11, 0x5f, 0xff, 0xac, 0xb9, - 0x74, 0x07, 0xce, 0x2d, 0x00, 0x3c, 0xc1, 0x05, 0xf8, 0x0f, 0x08, 0x92, 0xff, 0x05, 0x18, 0x0b, 0xa8, 0xbf, 0xe5, 0x1b, 0x2f, 0xf7, 0x46, 0x68, - 0x0f, 0x21, 0x04, 0x35, 0xba, 0x28, 0x1d, 0x4c, 0x05, 0x28, 0x0d, 0x08, 0xb4, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x09, 0x28, 0x13, 0x02, 0x24, 0x09, - 0x09, 0x20, 0x06, 0x0e, 0x08, 0x20, 0x06, 0x09, 0xac, 0x00, 0x1f, 0xee, 0x0a, 0x00, 0x00, 0x0f, 0x47, 0xe1, 0x00, 0x30, 0xb8, 0x30, 0xe0, 0x30, - 0xea, 0x30, 0xa7, 0xa0, 0x06, 0x68, 0x17, 0x4d, 0x2f, 0x95, 0x11, 0x01, 0x69, 0x00, 0x6d, 0xfe, 0x2b, 0x15, 0x05, 0x7b, 0x23, 0x00, 0xd0, 0x7f, - 0x06, 0x10, 0xff, 0x3f, 0xa3, 0x06, 0x70, 0x7f, 0x00, 0x58, 0x17, 0x20, 0xb8, 0x60, 0x97, 0x6a, 0x05, 0x00, 0x99, 0x00, 0x58, 0x17, 0x05, 0x91, - 0x15, 0x85, 0x68, 0x09, 0x04, 0x54, 0x46, 0x7a, 0x17, 0x52, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x54, 0xba, 0xc0, 0xc9, 0x34, 0xbb, 0x40, 0xb8, - 0xf4, 0x06, 0x78, 0x17, 0x06, 0xf2, 0x7f, 0x00, 0x12, 0xff, 0x05, 0xd8, 0x17, 0x1c, 0x28, 0x0b, 0x34, 0x04, 0x57, 0x36, 0x28, 0x1d, 0x3c, 0x28, - 0x03, 0x40, 0x05, 0xc8, 0x13, 0x08, 0x54, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x44, 0x0a, 0x28, 0x13, 0x01, 0x0a, 0x0a, 0x20, 0x06, 0x0f, 0x09, 0x80, - 0x20, 0x06, 0x0a, 0xfc, 0x20, 0xaf, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x47, 0xaa, 0x30, 0xb7, 0x30, 0xa8, 0x30, 0x00, 0xaf, 0x30, 0x1d, 0xff, 0xd0, - 0x30, 0xe9, 0x30, 0x11, 0xcb, 0x30, 0xe3, 0x05, 0xe8, 0x1f, 0x4f, 0x00, 0x73, 0x2f, 0xb1, 0xab, 0x38, 0x0f, 0x6b, 0x2f, 0xb3, 0x42, 0x2f, 0xb9, - 0x72, 0x2f, 0xbd, 0x3f, 0xb7, 0xfb, 0x3e, 0xb1, 0x05, 0x1b, 0x39, 0x00, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x06, 0x58, 0x17, 0x69, 0x2f, 0xb5, 0xb1, - 0x95, 0x5e, 0x20, 0xa8, 0x2f, 0x6c, 0x41, 0x95, 0x03, 0xb1, 0x25, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x65, 0x00, 0x59, 0x7f, 0x89, 0x36, 0x80, - 0x4b, 0x51, 0x2d, 0x00, 0x00, 0xf4, 0x5d, 0xc9, 0x62, 0x3c, 0x5c, 0x9a, 0x40, 0x4e, 0x05, 0xd8, 0x21, 0x24, 0xc6, 0xdc, 0xc2, 0x08, 0xc6, 0x00, - 0x6c, 0xd0, 0x2d, 0x00, 0x14, 0xbc, 0x7c, 0xb7, 0x3a, 0xd0, 0xb0, 0x05, 0xf8, 0x1f, 0x08, 0xb2, 0xff, 0x05, 0x38, 0x21, 0x1e, 0x28, 0x09, 0x38, - 0xa0, 0x28, 0x1b, 0x46, 0x28, 0x0f, 0x3e, 0x04, 0x2d, 0x00, 0x11, 0xae, 0x28, 0x15, 0x40, 0x48, 0x0d, 0x4c, 0x05, 0x48, 0x23, 0x08, 0xb4, 0xff, - 0x10, 0x0d, 0x30, 0x7f, 0x0b, 0x89, 0x28, 0x13, 0x08, 0x0b, 0x0b, 0x20, 0x06, 0x10, 0x0a, 0x20, 0x06, 0x00, 0x0b, 0x65, 0x20, 0x48, 0x0d, 0x00, - 0x00, 0x11, 0x00, 0x47, 0xdd, 0x30, 0xb8, 0x30, 0xa7, 0x30, 0xac, 0xa2, 0x28, 0x17, 0xb9, 0x28, 0x17, 0xf4, 0x30, 0xa9, 0x28, 0x1b, 0xa2, 0xa5, - 0x05, 0xa8, 0x1b, 0x50, 0x2e, 0xa9, 0x7e, 0x01, 0x3e, 0xb3, 0x61, 0x28, 0x17, 0x57, 0x53, 0x46, 0x79, 0x76, 0x4e, 0xbd, 0x69, 0x05, 0x48, 0x19, - 0x00, 0xb0, 0x7f, 0x05, 0x3f, 0xbb, 0xaf, 0x00, 0x30, 0xff, 0x77, 0x80, 0x7f, 0x6e, 0x06, 0x68, 0x17, 0xb1, 0x95, 0x00, 0x18, 0x17, 0xf1, 0xa5, - 0xdc, 0x04, 0x18, 0x17, 0xd2, 0x15, 0x45, 0x2a, 0x3b, 0x03, 0x90, 0x71, 0xdf, 0xff, 0xe2, 0x6c, 0x00, 0xed, 0x70, 0xa0, 0x52, 0x2d, 0x00, 0xaf, - 0x65, 0x08, 0xc9, 0x62, 0x83, 0x6c, 0x06, 0x18, 0x17, 0xec, 0xd3, 0x1c, 0x00, 0xc8, 0x00, 0xac, 0x2d, 0x00, 0xac, 0xc2, 0x7c, 0x01, 0xb7, 0xf4, - 0xbc, 0xc8, 0xb2, 0x44, 0xc5, 0x05, 0xd8, 0x19, 0xae, 0x00, 0xb3, 0x7f, 0xeb, 0x05, 0x63, 0xff, 0x7a, 0x4a, 0x9b, 0x00, 0x53, 0xff, 0x04, 0xf8, - 0x19, 0x1f, 0xac, 0x28, 0x0d, 0x36, 0x28, 0x17, 0x36, 0x48, 0x05, 0x38, 0x19, 0x21, 0x04, 0x57, 0x3b, 0x28, 0x1b, 0x32, 0x28, 0x25, 0x3d, 0x05, - 0x28, 0x19, 0x08, 0xb4, 0xff, 0x10, 0x0d, 0x30, 0x7f, 0x44, 0x0c, 0x28, 0x13, 0x09, 0x0c, 0x0c, 0x20, 0x06, 0x11, 0x0b, 0x80, 0x20, 0x06, 0x0c, - 0x3d, 0x20, 0x94, 0x0c, 0x00, 0x00, 0x01, 0x12, 0x47, 0xd7, 0x30, 0xea, 0x30, 0xe2, 0x20, 0x03, 0x40, 0xa7, 0x28, 0x19, 0xb4, 0x30, 0xeb, 0x30, - 0xb9, 0x30, 0x01, 0xad, 0x30, 0xfb, 0x30, 0xb3, 0x30, 0xbf, 0x20, 0x0b, 0xa2, 0x05, 0x38, 0x1d, 0x50, 0x2f, 0x9f, 0x69, 0x00, 0x6d, 0x2e, 0xaf, - 0x72, 0x8b, 0x4f, 0xb5, 0x2d, 0x00, 0x47, 0x40, 0x0b, 0x73, 0x2f, 0xbf, 0x3e, 0xb9, 0x5e, 0x4b, 0x2e, 0xc9, 0x74, 0x4f, 0xc5, 0x04, 0x5b, 0x3d, - 0x01, 0x90, 0x7f, 0x06, 0x50, 0xff, 0x6b, 0xd6, 0x04, 0xe0, 0x7f, 0xf8, 0x17, 0x4c, 0x2f, 0xa7, 0x74, 0x41, 0x8d, 0x3f, 0x9f, 0x65, 0x8d, 0x2f, - 0xcd, 0x2d, 0x00, 0x4d, 0x4f, 0xd3, 0x31, 0x85, 0x6e, 0x04, 0x0f, 0xaf, 0xc0, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0xe8, 0x6e, 0x77, 0x6d, 0x8c, - 0x54, 0x0c, 0x71, 0x5c, 0x3a, 0x53, 0x05, 0xd8, 0x0f, 0x7f, 0xff, 0x04, 0xd5, 0x00, 0xac, 0xb9, 0xa8, 0xba, 0x40, 0xb8, 0x2d, 0x00, 0x00, 0xe0, - 0xac, 0x74, 0xb9, 0xa4, 0xc2, 0xa4, 0xd0, 0x03, 0x54, 0xcf, 0xc0, 0xd0, 0x74, 0xb9, 0x05, 0x78, 0x1d, 0x08, 0xf2, 0xff, 0xc5, 0xb3, 0xff, 0x04, - 0x38, 0x23, 0x1f, 0x04, 0x40, 0x27, 0xe9, 0x3c, 0x28, 0x1d, 0x5f, 0x40, 0x88, 0x19, 0x13, 0x40, 0x0d, 0x38, 0x03, 0x05, 0x38, 0x17, 0x09, 0x74, - 0xff, 0x10, 0x0c, 0x50, 0x7f, 0x44, 0x0d, 0x28, 0x13, 0x10, 0x0d, 0x0d, 0x20, 0x06, 0x12, 0x0c, 0x80, 0x20, 0x06, 0x0d, 0x39, 0x20, 0x40, 0x0a, - 0x00, 0x00, 0x01, 0x13, 0x47, 0xb7, 0x30, 0xb5, 0x30, 0xaf, 0x28, 0x13, 0x40, 0xe2, 0x28, 0x11, 0xe9, 0x30, 0xf4, 0x30, 0xa3, 0x30, 0x6a, 0xca, - 0x05, 0x48, 0x0f, 0x7f, 0xfc, 0x53, 0x2f, 0x97, 0x73, 0x2f, 0xab, 0x6b, 0xdf, 0x66, 0x7f, 0x7e, 0x19, 0x69, 0x46, 0x83, 0x05, 0x1b, 0x2f, 0x00, - 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x1e, 0xb9, 0xb5, 0xf8, 0x17, 0x64, 0x49, 0x8d, 0x91, 0x95, 0x20, 0x60, 0x15, 0x65, 0x2f, 0xb1, 0xb8, 0x3f, - 0xb3, 0x20, 0x03, 0xe1, 0x25, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x21, 0x95, 0x28, 0x00, 0x84, 0x4b, 0x51, 0x2d, 0x00, 0xab, 0x83, 0xaf, 0x01, - 0x65, 0xc9, 0x62, 0xf4, 0x7e, 0xb3, 0x7e, 0x05, 0xd8, 0x1f, 0x00, 0xdc, 0xc2, 0xac, 0xc0, 0x6c, 0xd0, 0x2d, 0x00, 0x00, 0xa8, 0xba, 0xac, 0xc2, - 0x7c, 0xb7, 0x44, 0xbe, 0x3e, 0x98, 0xb0, 0x05, 0x78, 0x11, 0x09, 0x32, 0xff, 0x04, 0x58, 0x0b, 0xc1, 0xff, 0x2f, 0xff, 0x41, 0xa8, 0x28, 0x03, - 0x46, 0x68, 0x13, 0x1c, 0x28, 0x21, 0x41, 0x04, 0x3b, 0xbc, 0x28, 0x15, 0x32, 0x28, 0x2f, 0x05, 0x18, 0x19, 0x08, 0xd4, 0xff, 0x10, 0x0d, 0x10, - 0x7f, 0x0e, 0x0e, 0x0a, 0x0e, 0x0e, 0x0b, 0x0f, 0x30, 0x05, 0x13, 0x30, 0x0a, 0x0e, 0x00, 0x54, 0x20, 0xa6, 0x0b, 0x00, 0x00, 0x14, 0x47, 0x01, - 0xb9, 0x30, 0xd7, 0x30, 0xea, 0x30, 0xc8, 0x28, 0x19, 0x00, 0xc0, 0x30, 0xeb, 0x30, 0xde, 0x30, 0xc1, 0x30, 0x58, 0xa2, 0x05, 0xe8, 0x17, 0x70, - 0x28, 0x09, 0x3e, 0xa3, 0x2d, 0x00, 0x44, 0xab, 0x2f, 0x97, 0x6c, 0x2f, 0xbb, 0x61, 0x2f, 0xa1, 0x69, 0x05, 0x48, 0x15, 0x00, 0xb0, 0x7f, 0x5f, - 0x65, 0x06, 0xe0, 0xff, 0x65, 0x2f, 0xc1, 0x06, 0x18, 0x17, 0x31, 0x8f, 0x31, 0x85, 0x51, 0x83, 0x7d, 0x6e, 0x2f, 0xcd, 0xd1, 0x97, 0x03, 0xf9, - 0x2b, 0x00, 0x78, 0x17, 0x00, 0x32, 0x15, 0x63, 0x42, 0x15, 0x80, 0x03, 0xdf, 0xd5, 0xaf, 0x65, 0x6e, 0x66, 0x29, 0x52, 0x79, 0x00, 0x72, 0x2d, - 0x00, 0xbe, 0x8f, 0x14, 0x5c, 0x6c, 0x04, 0x9a, 0xd0, 0x63, 0x9a, 0x4e, 0x05, 0xb8, 0x19, 0xa4, 0xc2, 0x00, 0x0c, 0xd5, 0xac, 0xb9, 0xb8, 0xd2, - 0x2d, 0x00, 0x00, 0xec, 0xb2, 0xc8, 0xb9, 0xf0, 0xd2, 0x44, 0xc5, 0xd7, 0x05, 0xf8, 0x17, 0x00, 0x73, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x61, - 0xe9, 0x05, 0x18, 0x15, 0x38, 0x17, 0x46, 0x3f, 0x28, 0x05, 0x38, 0x04, 0x42, 0x48, 0x01, 0x38, 0x19, 0x14, 0x8b, 0x28, 0x25, 0x3b, 0x04, 0x3c, - 0x28, 0x2b, 0x42, 0x05, 0x28, 0x19, 0x08, 0x94, 0xff, 0x81, 0x10, 0x0d, 0x50, 0x7f, 0x0f, 0x0f, 0x0f, 0x0f, 0x12, 0x10, 0x30, 0x05, 0x42, 0x14, - 0x30, 0x0a, 0x0f, 0xee, 0x1e, 0xaf, 0x28, 0x17, 0x15, 0x00, 0x47, 0xb7, 0x30, 0xd9, 0x30, 0xcb, 0x30, 0xaf, 0xac, 0x28, 0x17, 0xaf, 0x20, 0x07, - 0xf3, 0x05, 0xc8, 0x13, 0x3f, 0xff, 0x60, 0x01, 0x15, 0x69, 0x00, 0x62, 0x47, 0x03, 0x69, 0x4f, 0xb3, 0x4b, 0x40, 0x09, 0x7d, 0x6e, 0x05, 0x48, - 0x13, 0x00, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x7e, 0xb3, 0xf8, 0x17, 0x64, 0x2f, 0xa9, 0xb5, 0x3f, 0xaf, 0x65, 0x81, 0x95, 0x3d, 0xaf, 0x20, - 0x4f, 0xc5, 0x54, 0x61, 0xa7, 0xe0, 0x03, 0xb8, 0xaf, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x0c, 0x5e, 0x1d, 0x8d, 0x3c, 0x11, 0x5c, 0x4b, 0x51, - 0x22, 0x79, 0x51, 0x81, 0x5b, 0x05, 0xb8, 0x11, 0x80, 0x5f, 0xff, 0xdc, 0xc2, 0xa0, 0xbc, 0xc8, 0xb2, 0x6c, 0x01, 0xd0, 0x2d, 0x00, 0x6c, 0xd0, - 0xcc, 0xb2, 0x05, 0xd8, 0x13, 0xe8, 0x08, 0xb2, 0xff, 0x05, 0x38, 0x13, 0x3f, 0xf3, 0x28, 0x2f, 0xfd, 0x31, 0x04, 0x35, 0xde, 0x67, 0xff, 0x38, - 0x17, 0x1a, 0x47, 0xf7, 0x04, 0xf8, 0x0f, 0x08, 0xf4, 0xff, 0x10, 0x0d, 0x70, 0x7f, 0x10, 0x02, 0x0d, 0x0d, 0x0d, 0x0a, 0x0e, 0x10, 0x20, 0x06, - 0x15, 0x00, 0x0d, 0x10, 0x10, 0x10, 0x10, 0x19, 0x1f, 0x4c, 0x80, 0x28, 0x17, 0x16, 0x47, 0xf4, 0x30, 0xa1, 0x30, 0xe9, 0x00, 0x30, 0xb8, 0x30, - 0xe5, 0x30, 0xc7, 0x30, 0xa3, 0xa9, 0x06, 0x28, 0x17, 0x56, 0x2f, 0xa3, 0x72, 0x2f, 0xa7, 0x7e, 0x01, 0x36, 0x91, 0xfd, 0x05, 0x98, 0x0f, 0x00, - 0x70, 0x7f, 0x05, 0xf6, 0x17, 0x06, 0xf0, 0x7f, 0x00, 0x58, 0x17, 0x71, 0x95, 0x73, 0x48, 0x27, 0x78, 0x6e, 0x2f, 0xd3, 0x04, 0x7f, 0x41, 0x00, - 0x58, 0x17, 0x05, 0x91, 0x95, 0xe6, 0x74, 0xc9, 0x06, 0x62, 0xe5, 0x65, 0x01, 0x4e, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x14, 0x01, 0xbc, 0x7c, 0xb7, - 0xfc, 0xc8, 0x18, 0xb5, 0x06, 0x18, 0x11, 0xea, 0x08, 0x52, 0xff, 0x05, 0x78, 0x0f, 0x7f, 0xed, 0x12, 0x2f, 0xff, 0x40, 0x27, 0xff, 0x36, 0x3a, - 0x04, 0x34, 0x05, 0xa8, 0x0d, 0x08, 0x94, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x11, 0x28, 0x0c, 0x0c, 0x24, 0x11, 0x11, 0x20, 0x06, 0x03, 0x10, 0x20, - 0x06, 0x11, 0xec, 0x28, 0x20, 0x9d, 0x28, 0x17, 0x17, 0x28, 0x17, 0xa3, 0x30, 0xed, 0x54, 0x30, 0x30, 0x05, 0xc6, 0x28, 0x17, 0xc4, 0x28, 0x25, - 0x1d, 0xff, 0x1a, 0xdd, 0x30, 0xc9, 0x28, 0x2b, 0x30, 0x19, 0xca, 0x05, 0x08, 0x27, 0x56, 0xaa, 0x2f, 0xa7, 0x72, 0x2e, 0xad, 0x76, 0x2f, 0xaf, - 0x74, 0x4e, 0x9d, 0x61, 0xad, 0x2f, 0xb5, 0x50, 0x2e, 0xbf, 0x64, 0x48, 0x2f, 0x30, 0x17, 0x6e, 0x2e, 0x4d, 0xfa, 0x04, 0x7b, 0x3f, 0x01, 0x70, - 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xf8, 0x17, 0x00, 0x11, 0x95, 0x20, 0x68, 0x37, 0x65, 0x3e, 0x00, 0x6c, 0x20, 0x01, 0x31, 0x91, 0x03, 0x31, 0x25, - 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0xf4, 0x00, 0x7e, 0x57, 0x7f, 0xf4, 0x7e, 0x82, 0x84, 0xdf, 0x00, 0x5b, 0x2d, 0x00, 0xe2, 0x6c, 0xb7, 0x5f, - 0xc9, 0x04, 0x62, 0xf4, 0x7e, 0xb3, 0x7e, 0x05, 0x98, 0x25, 0x44, 0xbe, 0x00, 0x5c, 0xb8, 0x44, 0xbe, 0xf0, 0xd2, 0x28, 0xcc, 0x00, 0x2d, 0x00, - 0xec, 0xd3, 0xdc, 0xb4, 0x7c, 0xb7, 0x0e, 0x44, 0xbe, 0x98, 0xb0, 0x05, 0x98, 0x25, 0x09, 0x72, 0xff, 0x04, 0x78, 0x2f, 0x12, 0x82, 0x28, 0x0d, - 0x40, 0x04, 0x3e, 0x04, 0x32, 0x28, 0x15, 0x42, 0xa0, 0x28, 0x19, 0x46, 0x28, 0x17, 0x3e, 0x04, 0x2d, 0x00, 0x1f, 0xae, 0x20, 0x13, 0x34, 0x48, - 0x31, 0x32, 0x04, 0xc8, 0x2b, 0x09, 0x74, 0xff, 0x10, 0x0c, 0x70, 0x7f, 0x12, 0x89, 0x28, 0x13, 0x0d, 0x12, 0x12, 0x20, 0x06, 0x04, 0x11, 0x20, - 0x06, 0x00, 0x12, 0x97, 0x20, 0x5c, 0x0c, 0x00, 0x00, 0x18, 0xa2, 0x28, 0x17, 0xb3, 0x28, 0x15, 0xa1, 0x30, 0xeb, 0x28, 0x0f, 0xb9, 0x00, 0x30, - 0xea, 0x30, 0xa4, 0x30, 0xa7, 0x30, 0xe0, 0xc6, 0x05, 0x08, 0x0d, 0xbf, 0xaf, 0x75, 0x00, 0x6b, 0x48, 0x17, 0x3f, 0xb7, 0x2d, 0x23, 0x00, 0x53, - 0x2b, 0x25, 0x72, 0x00, 0x6d, 0x2f, 0xbb, 0x04, 0x98, 0x0b, 0xaa, 0x01, 0x50, 0x7f, 0x65, 0x06, 0x60, 0xff, 0x72, 0x2f, 0xbd, 0x6a, 0x2f, 0xc5, - 0x6d, 0xf7, 0x05, 0x4e, 0xc0, 0x00, 0x78, 0x17, 0xb1, 0x95, 0x00, 0x18, 0x11, 0x53, 0x49, 0xcd, 0x51, 0xa5, 0x02, 0xdf, 0xcc, 0xc0, 0x00, 0x78, - 0x17, 0x05, 0x71, 0x15, 0x66, 0x6b, 0xd1, 0x79, 0xe6, 0x74, 0x00, 0x14, 0x5c, 0x2d, 0x00, 0xaf, 0x65, 0xcc, 0x91, 0x0c, 0x36, 0x80, 0xc6, 0x59, - 0x05, 0x98, 0x13, 0x3f, 0xff, 0x80, 0xbd, 0x00, 0x54, 0xcf, 0x14, 0xbc, 0x74, 0xb9, 0x2d, 0x00, 0x00, 0xdc, 0xc2, 0x74, 0xb9, 0xf8, 0xbb, 0x44, - 0xc5, 0xfa, 0x05, 0x98, 0x13, 0x07, 0x32, 0x7f, 0x00, 0xb2, 0xff, 0x04, 0x78, 0x0b, 0xd8, 0x17, 0x43, 0x48, 0x09, 0x32, 0xb4, 0x28, 0x01, 0x40, - 0x48, 0x01, 0x38, 0x15, 0x21, 0x28, 0x2b, 0x35, 0x04, 0x74, 0x3c, 0x04, 0xc8, 0x11, 0x08, 0xf4, 0xff, 0x10, 0x0d, 0x50, 0x7f, 0x13, 0x28, 0x13, - 0x0e, 0x13, 0x48, 0x13, 0x20, 0x06, 0x05, 0x12, 0x20, 0x06, 0x13, 0x3f, 0x20, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x19, 0x47, 0xb6, 0x30, 0x77, 0xc0, - 0x28, 0x13, 0x05, 0x98, 0x07, 0xff, 0xea, 0x5a, 0x4e, 0x29, 0x56, 0x7d, 0x05, 0x18, 0x05, 0xff, 0x00, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x06, 0x51, - 0x81, 0xf8, 0x17, 0x31, 0x8f, 0x3f, 0x91, 0x3f, 0xa5, 0x04, 0xbe, 0x27, 0xc0, 0x00, 0xd8, 0x17, 0x05, 0x91, 0x95, 0x4e, 0x62, 0xbe, 0x8f, 0x14, - 0x5c, 0xc0, 0x05, 0xd8, 0x0b, 0xbf, 0xff, 0x90, 0xc7, 0xe4, 0xb2, 0x74, 0xb9, 0xf5, 0x05, 0xd8, 0x0b, 0x08, 0x52, 0xff, 0x05, 0x38, 0x05, 0x00, - 0x1f, 0xe1, 0x17, 0x2f, 0xfd, 0x34, 0x88, 0x13, 0xe8, 0x04, 0xd8, 0x03, 0x08, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x14, 0x28, 0x13, 0x14, 0x14, - 0x14, 0xa0, 0x20, 0x06, 0x09, 0x40, 0x07, 0x5e, 0x1f, 0xd4, 0x0a, 0x00, 0x20, 0x00, 0x1a, 0x28, 0x17, 0xb0, 0x30, 0xec, 0x30, 0xd6, 0xd1, 0x06, - 0x88, 0x19, 0x38, 0x17, 0x67, 0x2f, 0xa9, 0x65, 0x00, 0x62, 0x06, 0x48, 0x19, 0xef, 0xd0, 0x7f, 0x5c, 0x9f, 0x3f, 0x07, 0x74, 0x47, 0x1b, 0x05, - 0x14, 0x99, 0xb0, 0xff, 0x07, 0x78, 0x17, 0x57, 0x67, 0x2f, 0xbd, 0x62, 0x41, 0x93, 0x73, 0x2f, 0xbd, 0x06, 0x78, 0x17, 0x05, 0x51, 0x15, 0x00, - 0x28, 0x84, 0x3c, 0x68, 0xd2, 0x52, 0x03, 0x5e, 0x80, 0x06, 0x78, 0x19, 0x90, 0xc7, 0xf8, 0xad, 0x08, 0xb8, 0x0c, 0x6e, 0xbe, 0x06, 0x78, 0x19, - 0xf2, 0xff, 0x70, 0x2f, 0xb5, 0x3f, 0xbd, 0x3a, 0x15, 0x63, 0xbe, 0x2f, 0xb9, 0x65, 0x04, 0xe7, 0x9d, 0xb3, 0xff, 0x3a, 0x97, 0x05, 0xf8, 0x1b, - 0x38, 0x17, 0x33, 0x8e, 0x28, 0x15, 0x35, 0x04, 0x31, 0x06, 0x48, 0x19, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x15, 0x52, 0x15, 0x28, 0x13, - 0x15, 0x20, 0x05, 0x15, 0x08, 0x20, 0x05, 0x15, 0x04, 0x15, 0x94, 0x20, 0x5d, 0x0b, 0x00, 0x3f, 0xff, 0x01, 0x14, 0x80, 0x20, 0x24, 0x01, 0x01, - 0x01, 0x15, 0x14, 0x07, 0x14, 0x91, 0x20, 0x06, 0x01, 0x02, 0x20, 0x0b, 0x03, 0x02, 0x02, 0x30, 0x06, 0x51, 0x01, 0x20, 0x06, 0x02, 0x30, 0x0b, - 0x04, 0x03, 0x03, 0x30, 0x12, 0x51, 0x02, 0x20, 0x06, 0x03, 0x30, 0x0b, 0x11, 0x04, 0x04, 0x20, 0x12, 0x24, 0x06, 0x03, 0x20, 0x06, 0x04, 0x05, - 0x20, 0x0b, 0x0f, 0x05, 0x49, 0x05, 0x20, 0x06, 0x0a, 0x04, 0x20, 0x06, 0x05, 0x06, 0x40, 0x04, 0x52, 0x06, 0x20, 0x06, 0x0b, 0x30, 0x06, 0x06, - 0x07, 0x40, 0x04, 0x07, 0xa5, 0x20, 0x06, 0x0c, 0x30, 0x06, 0x07, 0x08, 0x40, 0x04, 0x08, 0x20, 0x06, 0x48, 0x0d, 0x30, 0x06, 0x08, 0x09, 0x20, - 0x0b, 0x02, 0x09, 0x09, 0x92, 0x20, 0x06, 0x0e, 0x08, 0x20, 0x06, 0x09, 0x0a, 0x20, 0x0b, 0x01, 0x24, 0x0a, 0x0a, 0x20, 0x06, 0x0f, 0x09, 0x20, - 0x06, 0x0a, 0x0b, 0x89, 0x20, 0x0b, 0x08, 0x0b, 0x0b, 0x20, 0x06, 0x10, 0x0a, 0x20, 0x06, 0x22, 0x0b, 0x0c, 0x20, 0x0b, 0x09, 0x0c, 0x0c, 0x20, - 0x06, 0x11, 0x48, 0x0b, 0x20, 0x06, 0x0c, 0x0d, 0x20, 0x0b, 0x10, 0x0d, 0x0d, 0x90, 0x20, 0x06, 0x12, 0x0c, 0x20, 0x06, 0x0d, 0x0e, 0x0e, 0x0e, - 0x14, 0x0e, 0x0b, 0x0f, 0x30, 0x05, 0x13, 0x30, 0x0a, 0x0e, 0x0f, 0x05, 0x0f, 0x0f, 0x0f, 0x12, 0x10, 0x30, 0x05, 0x14, 0x30, 0x0a, 0x44, 0x0f, - 0x30, 0x2b, 0x0a, 0x0e, 0x10, 0x20, 0x32, 0x15, 0x0d, 0x04, 0x10, 0x10, 0x10, 0x10, 0x11, 0x20, 0x04, 0x0c, 0x11, 0x49, 0x11, 0x20, 0x06, 0x03, - 0x10, 0x20, 0x06, 0x11, 0x12, 0x20, 0x0b, 0x12, 0x0d, 0x12, 0x12, 0x20, 0x06, 0x04, 0x11, 0x20, 0x06, 0x12, 0x50, 0x13, 0x20, 0x0b, 0x0e, 0x29, - 0x63, 0x12, 0x12, 0x05, 0x12, 0xb8, 0x29, 0x6a, 0x13, 0xf9, 0x6f, 0xf1, 0x67, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x48, 0x14, 0x20, 0x50, 0x08, 0xe1, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x01, 0x19, 0xbb, 0x17, 0x20, 0x05, 0x00, 0x48, 0xad, 0x30, 0xd7, 0x30, 0xed, 0x30, 0xb9, 0x40, 0x30, 0x06, 0x78, 0x1d, 0x43, 0x00, 0x79, - 0x00, 0x70, 0x00, 0x05, 0x72, 0x00, 0x75, 0x00, 0x73, 0x06, 0x60, 0x7f, 0x68, 0x60, 0x81, 0x55, 0x65, 0x06, 0x49, 0x20, 0x5a, 0x40, 0xff, 0x65, - 0x21, 0x01, 0x6e, 0x06, 0x61, 0x7f, 0x56, 0x69, 0x41, 0x7f, 0x6f, 0x06, 0x81, 0xff, 0x68, 0x60, 0x81, 0x06, 0x51, 0x7f, 0x5e, 0x03, 0x58, 0x66, - 0x6d, 0xef, 0x8d, 0xaf, 0x06, 0x51, 0xfc, 0x2b, 0x9b, 0x00, 0xa4, 0xd0, 0x04, 0xd5, 0x5c, 0xb8, 0xa4, 0xc2, 0xc0, 0x0e, 0xb3, 0x7f, 0x06, 0xb1, - 0xff, 0x1a, 0x04, 0x38, 0x04, 0x3f, 0x04, 0x33, 0x40, 0x04, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x01, 0xe0, 0x01, 0x48, 0x17, 0xc0, - 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, 0x11, 0x0e, 0x00, 0x00, - 0x30, 0x01, 0x49, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9b, 0x23, 0x43, 0x0a, 0x00, 0x00, 0x00, - 0x02, 0x49, 0xd7, 0x30, 0xe9, 0x30, 0xcf, 0x40, 0x30, 0x06, 0x98, 0x1b, 0x50, 0x00, 0x72, 0x00, 0x61, 0x00, 0x06, 0x67, 0x00, 0x75, 0x00, 0x65, - 0x0e, 0xc0, 0x7f, 0x06, 0xf1, 0x7f, 0x61, 0x80, 0x0e, 0x60, 0x7f, 0x03, 0x5e, 0xc9, 0x62, 0x3c, 0x68, 0x02, 0x40, 0x5e, 0x06, 0x7b, 0x1d, 0x04, - 0xd5, 0x7c, 0xb7, 0x58, 0xd5, 0xe0, 0x06, 0xf3, 0x7f, 0x06, 0x92, 0x81, 0x06, 0xf2, 0x7f, 0x1f, 0x04, 0x40, 0x04, 0x30, 0x38, 0x04, 0x33, 0x20, - 0x03, 0x10, 0x06, 0xd4, 0xff, 0x10, 0x06, 0x70, 0xff, 0x01, 0x09, 0x05, 0x00, 0x02, 0x04, 0x01, 0x01, 0x01, 0x09, 0x0b, 0x0a, 0x50, 0x09, 0x20, - 0x06, 0x01, 0x58, 0x17, 0x03, 0x49, 0x2d, 0x4e, 0x00, 0xe8, 0x90, 0xdc, 0x30, 0xd8, 0x30, 0xdf, 0x30, 0x05, 0xa2, 0x30, 0x30, 0x57, 0xb9, 0x06, - 0x07, 0x9c, 0x43, 0x28, 0x0f, 0x10, 0x6e, 0x00, 0x74, 0x48, 0x1d, 0x6c, 0x00, 0x20, 0x00, 0x04, 0x42, 0x00, 0x6f, 0x00, 0x68, 0x28, 0x23, 0x6d, - 0x00, 0x55, 0x69, 0x28, 0x2f, 0x6e, 0x20, 0x11, 0x52, 0x28, 0x31, 0x67, 0x20, 0x0d, 0x75, 0x6f, 0x20, 0x27, 0x04, 0x1f, 0xdb, 0x50, 0x6f, 0xea, - 0x20, 0x6f, 0x65, 0x20, 0x7d, 0x6a, 0x63, 0xc0, 0x8d, 0x05, 0x38, 0xa9, 0x4d, 0x20, 0xe7, 0x74, 0x20, 0xff, 0x65, 0x8d, 0x20, 0xfd, 0x62, 0x00, - 0xf6, 0x20, 0xfb, 0x30, 0xf9, 0x73, 0x20, 0x89, 0xf7, 0x31, 0x05, 0x04, 0xf0, 0xfd, 0x50, 0xff, 0x71, 0x6d, 0x20, 0xe1, 0x8d, 0x05, 0x39, 0xa9, - 0x71, 0xdd, 0x5e, 0xf3, 0x41, 0xeb, 0x64, 0x41, 0x85, 0xd2, 0x03, 0xf0, 0x95, 0x03, 0xdf, 0xdf, 0x2d, 0x01, 0x4e, 0x77, 0x63, 0x4b, 0x51, 0xde, - 0x5d, 0x06, 0x7f, 0xb5, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x74, 0xb9, 0x1c, 0xc8, 0x00, 0xc4, 0xb3, 0xb4, 0xcc, 0xa4, 0xc2, 0xa4, 0xd0, 0x03, 0x20, - 0x00, 0xc0, 0xc9, 0x29, 0xbc, 0x05, 0x9f, 0xc3, 0x32, 0x7f, 0x47, 0x64, 0x41, 0x77, 0x6e, 0x00, 0x2d, 0xa3, 0x7d, 0x33, 0x95, 0x05, 0x3f, 0xc9, - 0xa3, 0x33, 0xef, 0xe9, 0x00, 0x62, 0x7f, 0x20, 0x00, 0x28, 0x2c, 0x35, 0x53, 0xfd, 0x54, 0xe3, 0x24, 0x17, 0x29, 0x04, 0x2f, 0xda, 0x21, 0x28, - 0x17, 0x35, 0x04, 0x14, 0x34, 0x04, 0x3d, 0x20, 0x05, 0x47, 0x20, 0x09, 0x48, 0x04, 0x00, 0x41, 0x04, 0x3a, 0x04, 0x38, 0x04, 0x39, 0x04, 0x17, - 0x20, 0x00, 0x3a, 0x48, 0x33, 0x39, 0x04, 0xc8, 0x31, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x4a, 0x02, 0x38, 0x0c, 0x02, 0x02, 0x28, 0x1b, - 0x0b, 0x30, 0x06, 0x02, 0x84, 0x58, 0x17, 0x04, 0x49, 0x57, 0x53, 0x06, 0xb8, 0x15, 0x00, 0x00, 0x56, 0x53, 0x28, 0x07, 0x75, 0x28, 0x17, 0x68, - 0x06, 0x28, 0x13, 0x00, 0x18, 0x17, 0x64, 0xad, 0x2b, 0xb7, 0x20, 0x20, 0x93, 0x75, 0x26, 0xa1, 0x05, 0x70, 0xff, 0xfc, 0x27, 0x0d, 0xd7, 0x06, - 0x38, 0x11, 0x00, 0x38, 0x17, 0x4d, 0x2c, 0xb5, 0x72, 0x46, 0x29, 0x59, 0x87, 0x05, 0x19, 0x1d, 0xe4, 0x01, 0x38, 0x17, 0x00, 0x30, 0x95, 0x03, - 0x7f, 0xdf, 0x57, 0x53, 0x06, 0xd8, 0x17, 0x74, 0xc7, 0x37, 0x38, 0xd6, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x5a, 0x2e, 0xa9, 0x38, 0x19, 0x06, 0x38, - 0x13, 0xb8, 0x00, 0x18, 0x17, 0x64, 0x2c, 0x15, 0x53, 0x7f, 0x05, 0x58, 0x15, 0x00, 0x00, 0x2e, 0x2e, 0x04, 0x36, 0x28, 0x13, 0x3e, 0x06, 0x48, - 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x00, 0x0a, 0x02, 0x0d, 0x02, 0x03, 0x03, 0x03, 0x0d, 0x10, 0x02, 0x0e, 0x0a, 0x20, 0x06, - 0x03, 0xd3, 0x22, 0x4a, 0x80, 0x28, 0x17, 0x05, 0x49, 0xd7, 0x30, 0xeb, 0x30, 0xbc, 0x22, 0x30, 0xcb, 0x06, 0x68, 0x15, 0x00, 0x00, 0x50, 0x2f, - 0x97, 0x7a, 0x9b, 0x2f, 0xab, 0x48, 0x01, 0x05, 0x77, 0x09, 0xfe, 0xaf, 0xe9, 0x8f, 0x8f, 0x7e, 0xaf, 0x5f, 0x50, 0x2f, 0xc3, 0x6c, 0x2f, 0xb3, - 0x05, 0x3d, 0x33, 0xbc, 0x0d, 0x05, 0xd0, 0x79, 0x00, 0x10, 0x7f, 0xb3, 0x59, 0x19, 0x69, 0x41, 0x01, 0x50, 0xff, 0x48, 0x01, 0x05, 0x70, 0xff, - 0xb8, 0x17, 0x81, 0x05, 0xb1, 0x7f, 0xd4, 0x6b, 0x14, 0x5c, 0xee, 0x68, 0x06, 0x98, 0x17, 0x0f, 0x0c, 0xd5, 0x20, 0xc8, 0x06, 0x58, 0x11, 0x73, - 0x7f, 0x05, 0xf2, 0x71, 0x00, 0x53, 0xff, 0xe0, 0x3f, 0x19, 0x05, 0x38, 0x07, 0xff, 0xfb, 0x1f, 0x04, 0x3b, 0x04, 0x4c, 0x2e, 0x04, 0x37, 0x28, - 0x15, 0x3d, 0x06, 0x28, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x00, 0x08, 0x0c, 0x09, 0x0b, 0x0b, 0x04, 0x04, 0x08, 0x00, 0x0a, - 0x09, 0x08, 0x04, 0x04, 0x04, 0x04, 0x5e, 0x00, 0x23, 0x82, 0x09, 0x00, 0x00, 0x06, 0x49, 0xab, 0x22, 0x30, 0xfc, 0x28, 0x19, 0xb9, 0x30, 0xd0, - 0x20, 0x07, 0xc8, 0xa8, 0x06, 0x28, 0x1d, 0x4b, 0x2e, 0xa7, 0x72, 0x2e, 0x95, 0x6f, 0x00, 0x76, 0x2f, 0x00, 0x79, 0x2f, 0xb1, 0x56, 0x40, 0x0f, - 0x30, 0x09, 0x05, 0x5f, 0x2f, 0x00, 0x38, 0x17, 0xe2, 0x00, 0x70, 0x93, 0x05, 0x18, 0x17, 0x71, 0x0d, 0x73, 0x00, 0x62, 0x2f, 0xbf, 0x64, 0xf0, - 0x06, 0x88, 0x17, 0x05, 0x91, 0x01, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x7f, 0x61, 0x53, 0x57, 0x7f, 0x02, 0xf4, 0x7e, 0xd1, 0x53, 0x29, 0x52, 0x06, - 0x58, 0x1b, 0x74, 0x00, 0xce, 0x7c, 0xb9, 0x5c, 0xb8, 0x44, 0xbe, 0x14, 0x1e, 0xbc, 0xac, 0xb9, 0x06, 0x38, 0x1f, 0x06, 0x12, 0x71, 0x01, 0x73, - 0xff, 0x05, 0x58, 0x25, 0x1a, 0xa3, 0x27, 0xff, 0x40, 0x28, 0x1b, 0x3e, 0x04, 0x32, 0x40, 0x09, 0x05, 0xf8, 0x1b, 0xc0, 0x06, 0xf4, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x05, 0x03, 0x09, 0x04, 0x06, 0x05, 0x02, 0x05, 0x05, 0x02, 0x04, 0x02, 0x03, 0x20, 0x06, 0x05, 0x11, 0xb7, 0x23, 0x27, 0x28, - 0x17, 0x07, 0x49, 0xa6, 0x28, 0x17, 0x10, 0xb9, 0x30, 0xc1, 0x28, 0x1d, 0xfb, 0x30, 0xca, 0x30, 0x41, 0xc9, 0x20, 0x05, 0xe9, 0x30, 0xd9, 0x30, - 0xe0, 0x05, 0x88, 0x21, 0x45, 0xda, 0x2f, 0x97, 0x74, 0x00, 0xed, 0x2f, 0xab, 0x6e, 0x47, 0x09, 0x15, 0x20, 0x00, 0x4c, 0x28, 0x29, 0x62, 0x2f, - 0xb7, 0x6d, 0x05, 0x48, 0x1b, 0xbf, 0xf8, 0x17, 0x27, 0x00, 0xc0, 0x91, 0x04, 0xf8, 0x17, 0x71, 0x0d, 0x05, 0x9e, 0xbd, 0x00, 0x58, 0x17, 0x05, - 0x91, 0x03, 0xc0, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x81, 0xc9, 0x62, 0x1d, 0x8d, 0xb3, 0x6c, 0x00, 0x54, 0x75, 0x4c, 0x4e, 0xaf, 0x65, 0x63, 0x5b, - 0x80, 0x06, 0x18, 0x1b, 0xb0, 0xc6, 0xa4, 0xc2, 0xf0, 0xd2, 0x98, 0x01, 0xb0, 0xb8, 0xd2, 0x7c, 0xb7, 0xb0, 0xbc, 0x06, 0x18, 0x19, 0xe8, 0x05, - 0xd2, 0xed, 0x01, 0xf3, 0xff, 0x05, 0x18, 0x1b, 0x23, 0x28, 0x09, 0x42, 0x04, 0x35, 0x38, 0x04, 0x46, 0x05, 0xe8, 0x0f, 0x07, 0x74, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x06, 0x0c, 0x07, 0x06, 0x0a, 0x0c, 0x0c, 0x06, 0x06, 0x20, 0x04, 0x20, 0x05, 0x06, 0x00, 0x06, 0x08, 0x24, 0x04, 0x0a, 0x00, - 0x00, 0x08, 0x23, 0x49, 0xea, 0x28, 0x05, 0xec, 0x30, 0xc4, 0x05, 0x88, 0x07, 0xff, 0xfa, 0x77, 0x4c, 0x2f, 0xab, 0x38, 0x05, 0x3c, 0x1b, 0x63, - 0x05, 0x8b, 0x25, 0x00, 0x98, 0x17, 0x3f, 0x33, 0xfe, 0xd0, 0x93, 0x05, 0x9f, 0xaf, 0x05, 0xd0, 0x79, 0x00, 0xb8, 0x17, 0x05, 0x91, 0x01, 0x00, - 0x38, 0x17, 0x05, 0xb1, 0x7f, 0x29, 0x01, 0x52, 0x1d, 0x8d, 0xf7, 0x96, 0x4b, 0x51, 0x06, 0x18, 0x11, 0x80, 0x5f, 0xff, 0xac, 0xb9, 0xa0, 0xbc, - 0x08, 0xb8, 0x20, 0x7d, 0xce, 0x06, 0x18, 0x11, 0x00, 0x33, 0x7f, 0x07, 0x13, 0xff, 0x05, 0x18, 0x09, 0xdf, 0xff, 0x1b, 0x28, 0x0d, 0x5c, 0x31, - 0x28, 0x17, 0x40, 0x06, 0x68, 0x1b, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x07, 0x04, 0x00, 0x0a, 0x05, 0x07, 0x06, 0x07, 0x07, 0x03, 0x05, - 0x00, 0x05, 0x04, 0x07, 0x07, 0x07, 0x07, 0x18, 0x24, 0x40, 0xb2, 0x28, 0x17, 0x09, 0x49, 0xd5, 0x30, 0xe9, 0x30, 0x45, 0xc7, 0x28, 0x17, 0xfb, - 0x30, 0xaf, 0x20, 0x09, 0xed, 0x28, 0x25, 0xba, 0x05, 0xd8, 0x21, 0x48, 0x2c, 0x11, 0x3f, 0x95, 0x58, 0x15, 0x4b, 0x2c, 0x1f, 0xe1, 0x2f, 0x00, - 0x6c, 0x2f, 0xbd, 0x76, 0x2f, 0xc7, 0x05, 0x3b, 0x2f, 0x00, 0x38, 0x17, 0x00, 0xb0, 0x93, 0xfc, 0x04, 0xd8, 0x17, 0x05, 0xb0, 0x79, 0x00, 0xb8, - 0x17, 0x05, 0x91, 0x01, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x7f, 0x6b, 0x8d, 0x00, 0xc9, 0x62, 0xb7, 0x5f, 0x28, 0x83, 0x2d, 0x00, 0x00, 0x4b, 0x51, - 0xc9, 0x62, 0x1b, 0x6d, 0xe6, 0x97, 0x80, 0x05, 0xd8, 0x21, 0x50, 0xd7, 0x7c, 0xb7, 0x70, 0xb3, 0x20, 0x00, 0xce, 0x6c, 0xd0, 0x84, 0xb7, 0x5c, - 0xb8, 0xa0, 0x7a, 0xbc, 0x05, 0xf8, 0x1f, 0x06, 0x12, 0x71, 0x01, 0xb3, 0xff, 0x05, 0x18, 0x25, 0x1a, 0x48, 0x01, 0x3b, 0x0a, 0x04, 0x3e, 0x04, - 0x32, 0x28, 0x1d, 0x33, 0x48, 0x0f, 0x34, 0xe0, 0x05, 0xa8, 0x23, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x02, 0x08, 0x03, 0x05, 0x00, - 0x04, 0x08, 0x08, 0x01, 0x03, 0x04, 0x02, 0x08, 0x00, 0x08, 0x08, 0x08, 0xb3, 0x23, 0x3d, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x49, 0xd1, 0x30, 0xeb, - 0x30, 0xc9, 0x0b, 0x30, 0xa5, 0x30, 0xd3, 0x28, 0x1b, 0xa7, 0x05, 0xe8, 0x13, 0x45, 0x17, 0xab, 0x28, 0x15, 0x72, 0x2f, 0xa7, 0x75, 0x2f, 0xa1, - 0x69, 0x2f, 0x9d, 0x3f, 0xaf, 0xff, 0x05, 0xbb, 0x33, 0x00, 0x38, 0x17, 0x00, 0x10, 0x93, 0x05, 0x5f, 0xaf, 0x05, 0xd0, 0x79, 0x00, 0xb8, 0x17, - 0x05, 0x91, 0x01, 0x00, 0x38, 0x17, 0x80, 0x05, 0xb1, 0x7f, 0x15, 0x5e, 0x14, 0x5c, 0x5c, 0x67, 0xd4, 0x18, 0x6b, 0xc7, 0x91, 0x05, 0xd8, 0x0f, - 0x7f, 0xff, 0x0c, 0xd3, 0x74, 0x01, 0xb9, 0x50, 0xb4, 0x44, 0xbe, 0xb4, 0xcc, 0x05, 0xf8, 0x11, 0xf5, 0x00, 0x73, 0x7f, 0x07, 0x13, 0xff, 0x05, - 0x18, 0x0d, 0x9f, 0xff, 0x1f, 0x28, 0x15, 0x40, 0x28, 0x09, 0x1e, 0x43, 0x04, 0x31, 0x28, 0x07, 0x05, 0x78, 0x0d, 0x07, 0x94, 0xff, 0x10, 0x0e, - 0xf0, 0x7f, 0x09, 0x00, 0x07, 0x0b, 0x08, 0x0a, 0x0a, 0x09, 0x09, 0x07, 0x00, 0x09, 0x08, 0x07, 0x09, 0x09, 0x09, 0x09, 0x92, 0x20, 0x23, 0x36, - 0x28, 0x17, 0x0b, 0x49, 0xaa, 0x30, 0xed, 0x0e, 0x30, 0xe2, 0x30, 0xa6, 0x28, 0x15, 0x06, 0x18, 0x13, 0x3f, 0xff, 0x4f, 0xae, 0x4f, 0x89, 0x6d, - 0x2f, 0xaf, 0x75, 0x4f, 0x9d, 0x05, 0xb8, 0x13, 0x00, 0x38, 0x17, 0x27, 0xd0, 0xe0, 0x91, 0x05, 0xb7, 0x97, 0x20, 0x41, 0x0d, 0x6d, 0x00, 0xfc, - 0x00, 0x1f, 0x74, 0x00, 0x7a, 0x05, 0x6e, 0xb4, 0x00, 0x58, 0x17, 0x05, 0x91, 0x03, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x81, 0x00, 0x65, 0x59, 0x1b, - 0x6d, 0x46, 0x7a, 0x28, 0x83, 0x80, 0x06, 0x58, 0x15, 0x00, 0x00, 0x2c, 0xc6, 0x5c, 0xb8, 0xa8, 0x07, 0xba, 0xb0, 0xc6, 0x20, 0xce, 0x06, 0x58, - 0x17, 0x05, 0xd2, 0xed, 0x01, 0x13, 0xff, 0xc0, 0x05, 0xb8, 0x13, 0x3f, 0xff, 0x1e, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x5c, 0x3c, 0x20, 0x03, 0x43, - 0x06, 0x28, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x06, 0x40, 0x06, 0x28, 0x0f, 0x0a, 0x0a, 0x06, 0x08, 0x07, 0x06, 0x00, 0x0a, - 0x0a, 0x0a, 0x0a, 0x43, 0x23, 0x45, 0x0c, 0x80, 0x2c, 0xad, 0x49, 0xe2, 0x30, 0xe9, 0x30, 0xd3, 0x30, 0x00, 0xa2, 0x30, 0xfb, 0x30, 0xb7, 0x30, - 0xec, 0x30, 0x6a, 0xb8, 0x20, 0x09, 0x05, 0xd8, 0x1f, 0x4d, 0x2f, 0xa9, 0x72, 0x2f, 0x9f, 0x76, 0xa2, 0x2f, 0xb3, 0x61, 0x2f, 0xb3, 0x2d, 0x00, - 0x53, 0x2f, 0xbd, 0x6c, 0xba, 0x2f, 0xb7, 0x73, 0x60, 0x11, 0x04, 0xdb, 0x3f, 0xb0, 0x7f, 0x65, 0x80, 0x7d, 0xe9, 0xe0, 0x40, 0x7d, 0x05, 0x3d, - 0x3b, 0xd8, 0x17, 0x4d, 0x00, 0xe4, 0x00, 0x68, 0xaf, 0x2f, 0xa9, 0x69, 0x20, 0xfd, 0x63, 0x20, 0x09, 0x31, 0x0d, 0x30, 0x07, 0x71, 0x0f, 0x7f, - 0x65, 0x04, 0x0c, 0x41, 0x00, 0x58, 0x17, 0xd1, 0x95, 0x31, 0x93, 0x91, 0x91, 0x05, 0x18, 0x17, 0x00, 0x10, 0x7d, 0xc0, 0xb2, 0x11, 0x03, 0xdf, - 0xd5, 0x69, 0x64, 0xc9, 0x62, 0xf4, 0x7e, 0x00, 0x9a, 0x4e, 0x2d, 0x00, 0x7f, 0x89, 0xcc, 0x91, 0x08, 0x7f, 0x89, 0x9a, 0x4e, 0x05, 0xd8, 0x21, - 0xa8, 0xba, 0x7c, 0x00, 0xb7, 0x44, 0xbe, 0x44, 0xc5, 0xe4, 0xc2, 0x08, 0x06, 0xb8, 0xc0, 0xc9, 0x44, 0xc5, 0x05, 0xf8, 0x1d, 0xb3, 0x7f, 0xeb, - 0xb6, 0xa3, 0x7d, 0x7a, 0x40, 0x0f, 0x05, 0x73, 0xff, 0xe1, 0xe1, 0xeb, 0x53, 0x7f, 0x61, 0xb1, 0x05, 0x28, 0x27, 0x1c, 0x28, 0x15, 0x38, 0x03, - 0x32, 0x04, 0x41, 0x28, 0x15, 0x51, 0x3e, 0x20, 0x05, 0x38, 0x28, 0x29, 0x35, 0x04, 0x37, 0x40, 0x0f, 0xe2, 0x05, 0x18, 0x25, 0x07, 0xb4, 0xff, - 0x10, 0x0e, 0x30, 0x7f, 0x0b, 0x05, 0x03, 0x28, 0x12, 0x0b, 0x00, 0x0b, 0x05, 0x06, 0x06, 0x05, 0x0b, 0x0b, 0x0b, 0x08, 0x0b, 0x6d, 0x23, 0xfb, - 0x28, 0x17, 0x0d, 0x49, 0x57, 0x75, 0x53, 0x78, 0x19, 0x05, 0xd8, 0x0f, 0x7f, 0xff, 0x53, 0x4f, 0x97, 0x74, 0x27, 0x0d, 0xf5, 0xf6, 0x8d, 0x04, - 0xf8, 0x11, 0x00, 0x38, 0x17, 0x3f, 0x2f, 0x75, 0x2f, 0xb7, 0x53, 0x2f, 0x27, 0x57, 0x64, 0x05, 0x60, 0xff, 0xfc, 0x2f, 0xa3, 0x6d, 0xe8, 0x0f, - 0x3f, 0xb9, 0x05, 0x5c, 0x39, 0xdd, 0xd9, 0x97, 0x38, 0x99, 0x65, 0x48, 0x97, 0x38, 0x1f, 0x3c, 0xb3, 0x61, 0x49, 0xa3, 0xf3, 0x05, 0x19, 0x17, - 0x00, 0x98, 0x17, 0x00, 0x50, 0x93, 0x03, 0x7f, 0xdd, 0x57, 0x53, 0x78, 0x19, 0x05, 0xd8, 0x0f, 0x84, 0x7f, 0xff, 0x74, 0xc7, 0x38, 0xd6, 0x38, - 0x1b, 0x04, 0xd5, 0x08, 0xa4, 0xc2, 0xa4, 0xd0, 0x05, 0xf8, 0x15, 0x00, 0x00, 0x5a, 0xde, 0x2f, 0xa7, 0x31, 0xed, 0x2d, 0xe8, 0x21, 0x05, 0xdc, - 0x17, 0x78, 0x17, 0x3a, 0x97, 0x6f, 0xa0, 0x63, 0x7f, 0x6c, 0x05, 0x28, 0x15, 0x00, 0x00, 0x2e, 0x04, 0x36, 0x2f, 0x04, 0x3d, 0x28, 0x1b, 0x3c, - 0xc8, 0x1f, 0x05, 0x18, 0x0f, 0x07, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x0c, 0x0b, 0x04, 0x0e, 0x03, 0x08, 0x0c, 0x0c, 0x00, 0x0e, 0x07, - 0x0d, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0xfc, 0x22, 0xcf, 0x0b, 0x00, 0x00, 0x0e, 0x49, 0x06, 0xba, 0x30, 0xea, 0x30, 0xf3, 0x06, 0x68, 0x13, - 0x54, 0x97, 0x6c, 0x37, 0x00, 0xed, 0x05, 0x68, 0x03, 0x00, 0x5f, 0xaf, 0xe9, 0xaf, 0xaf, 0x5e, 0xaf, 0x70, 0x93, 0xee, 0x05, 0x50, 0x7f, 0x9f, - 0xaf, 0x50, 0x79, 0x69, 0x05, 0xe0, 0xff, 0x9c, 0x8b, 0x59, 0x17, 0x69, 0xe1, 0x05, 0xc1, 0x01, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x7f, 0x79, 0x51, - 0x97, 0x67, 0x06, 0x58, 0x11, 0x87, 0x5f, 0xff, 0x90, 0xc9, 0xb0, 0xb9, 0x06, 0x18, 0x0d, 0x00, 0x13, 0x7f, 0x06, 0x71, 0x01, 0xe2, 0x93, 0xff, - 0x05, 0x18, 0x03, 0x00, 0x3f, 0xef, 0x17, 0x04, 0x3b, 0x28, 0x05, 0x3d, 0xe0, 0x05, 0xe8, 0x0d, 0x07, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, - 0x0e, 0x0d, 0x0c, 0x0e, 0x28, 0x0e, 0x0d, 0x20, 0x04, 0x01, 0x20, 0x05, 0x0d, 0x0d, 0x00, 0x00, 0x23, 0x8d, 0x0c, 0x00, 0x00, 0x0f, 0x49, 0xf4, - 0x00, 0x30, 0xa3, 0x30, 0xbd, 0x30, 0xc1, 0x30, 0xca, 0x88, 0x06, 0x68, 0x1b, 0x56, 0x00, 0x79, 0x2f, 0x23, 0x6f, 0x00, 0x0d, 0x7f, 0x01, 0x37, - 0x0f, 0x3e, 0xb1, 0x05, 0xd8, 0x1f, 0xf0, 0x7f, 0x05, 0xfe, 0x33, 0xd8, 0x17, 0x06, 0x10, 0x8d, 0xf0, 0x00, 0x58, 0x17, 0x05, 0x91, 0x15, 0x00, - 0x38, 0x17, 0x05, 0xb1, 0x93, 0xf4, 0x7e, 0x22, 0x7d, 0x08, 0xfa, 0x57, 0xb3, 0x7e, 0x06, 0x78, 0x1b, 0x44, 0xbe, 0x8c, 0x07, 0xc1, 0x58, 0xce, - 0x98, 0xb0, 0x06, 0x78, 0x1b, 0x06, 0xf2, 0xff, 0x00, 0x13, 0xff, 0xa0, 0x05, 0xd8, 0x1f, 0x1a, 0x68, 0x05, 0x20, 0x00, 0x12, 0x04, 0x4b, 0x8b, - 0x28, 0x1d, 0x3e, 0x04, 0x47, 0x48, 0x27, 0x30, 0x05, 0x68, 0x17, 0x07, 0xf4, 0xff, 0x80, 0x10, 0x0d, 0xf0, 0x7f, 0x0e, 0x0d, 0x0e, 0x0b, 0x0d, - 0x0d, 0x0e, 0xa0, 0x20, 0x04, 0x03, 0x20, 0x05, 0x0e, 0x0e, 0x1f, 0x23, 0x15, 0x40, 0x0b, 0x00, 0x3f, 0xff, 0x01, 0x09, 0x05, 0x02, 0x04, 0x01, - 0x02, 0x01, 0x01, 0x09, 0x0b, 0x0a, 0x09, 0x20, 0x06, 0x01, 0x54, 0x02, 0x40, 0x04, 0x02, 0x20, 0x13, 0x0b, 0x30, 0x06, 0x02, 0x03, 0x00, 0x0a, - 0x02, 0x0d, 0x02, 0x03, 0x03, 0x03, 0x0d, 0x10, 0x02, 0x0e, 0x0a, 0x20, 0x06, 0x03, 0x04, 0x08, 0x0c, 0x00, 0x09, 0x0b, 0x0b, 0x04, 0x04, 0x08, - 0x0a, 0x09, 0x00, 0x08, 0x04, 0x04, 0x04, 0x04, 0x05, 0x03, 0x09, 0x09, 0x04, 0x06, 0x05, 0x05, 0x20, 0x44, 0x02, 0x03, 0x20, 0x06, 0x00, 0x05, - 0x06, 0x0c, 0x07, 0x0a, 0x0c, 0x0c, 0x06, 0x60, 0x06, 0x20, 0x04, 0x20, 0x05, 0x06, 0x06, 0x07, 0x04, 0x0a, 0x04, 0x05, 0x07, 0x06, 0x07, 0x07, - 0x20, 0x1c, 0x04, 0x07, 0x00, 0x07, 0x07, 0x07, 0x08, 0x02, 0x08, 0x03, 0x05, 0x00, 0x04, 0x08, 0x08, 0x01, 0x03, 0x04, 0x02, 0x08, 0x00, 0x08, - 0x08, 0x08, 0x09, 0x07, 0x0b, 0x08, 0x0a, 0x00, 0x0a, 0x09, 0x09, 0x07, 0x09, 0x08, 0x07, 0x09, 0x0c, 0x09, 0x09, 0x09, 0x0a, 0x20, 0x32, 0x20, - 0x05, 0x0a, 0x06, 0x00, 0x08, 0x07, 0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x20, 0x05, 0x03, 0x20, 0x0a, 0x0b, 0x0b, 0x05, 0x06, 0x06, 0x00, 0x05, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x04, 0x00, 0x0e, 0x03, 0x08, 0x0c, 0x0c, 0x0e, 0x07, 0x0d, 0x5c, 0x0b, 0x20, 0x62, 0x0c, 0xf8, 0xff, 0xf0, - 0xf7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x4c, 0x41, 0x00, 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0x4a, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xc6, 0x27, 0xc2, 0x08, 0x00, 0x00, 0x00, 0x12, 0x4a, 0xb0, 0x30, 0xea, 0x30, 0xfc, 0x09, - 0x30, 0xf3, 0x30, 0xe9, 0x20, 0x03, 0xc9, 0x30, 0x06, 0x18, 0x23, 0x04, 0x47, 0x00, 0x72, 0x00, 0x65, 0x20, 0x01, 0x6e, 0x00, 0x15, 0x6c, 0x00, - 0x61, 0x20, 0x05, 0x64, 0x06, 0x20, 0x7f, 0x6f, 0x06, 0xe0, 0x7f, 0x6c, 0xf6, 0x06, 0x80, 0xfd, 0x00, 0x30, 0xff, 0x69, 0x21, 0x87, 0x0d, 0x90, - 0x7f, 0x3c, 0x68, 0x08, 0x75, 0x96, 0x70, 0x51, 0x06, 0x9b, 0x1b, 0xf8, 0xad, 0xb0, 0x06, 0xb9, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x7b, 0x9d, 0x07, - 0x32, 0xff, 0x6f, 0xa8, 0x23, 0xfd, 0x65, 0x23, 0xff, 0xe2, 0x06, 0x22, 0x7f, 0x13, 0x04, 0x40, 0x00, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x3b, 0x04, - 0x30, 0x81, 0x20, 0x05, 0x34, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0d, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xb0, 0x7f, 0x01, 0x04, 0x02, 0x02, 0x01, 0x02, - 0x01, 0x40, 0x01, 0x20, 0x05, 0x04, 0x01, 0x01, 0x01, 0x01, 0xa4, 0x12, 0x2d, 0x39, 0xdb, 0x23, 0x15, 0x4a, 0xc7, 0x28, 0x13, 0xde, 0x80, 0x28, - 0x19, 0xaf, 0x30, 0x96, 0x99, 0xfd, 0x90, 0x30, 0x15, 0x57, 0xdf, 0x57, 0x05, 0xdf, 0xbf, 0x43, 0x28, 0x0d, 0x70, 0x26, 0x8b, 0x41, 0x74, 0x28, - 0x15, 0x6c, 0x00, 0x20, 0x00, 0x52, 0x28, 0x25, 0x6a, 0x67, 0x26, 0x9b, 0x34, 0x2b, 0x20, 0x27, 0xb1, 0x66, 0x20, 0x13, 0x44, 0xa2, 0x48, 0x37, - 0x6d, 0x28, 0x37, 0x72, 0x00, 0x6b, 0x03, 0xef, 0xde, 0x48, 0xa2, 0x28, 0x15, 0x76, 0x28, 0x99, 0x64, 0x00, 0x73, 0x40, 0x83, 0x64, 0xd5, 0x48, - 0xa3, 0x05, 0x9f, 0xc3, 0x48, 0x29, 0x0d, 0x75, 0x21, 0x01, 0x74, 0x80, 0x7f, 0x7e, 0x74, 0x49, 0x29, 0x71, 0x03, 0x05, 0x10, 0x7f, 0x06, 0xf0, - 0xff, 0x06, 0xd1, 0x7f, 0x32, 0xf5, 0x27, 0x10, 0x59, 0x3a, 0x53, 0x06, 0x7f, 0xb5, 0x74, 0xb3, 0xc8, 0xb9, 0x00, 0x6c, 0xd0, 0x20, 0x00, 0x18, - 0xc2, 0xc4, 0xb3, 0x00, 0x8c, 0xad, 0x20, 0x00, 0xc0, 0xc9, 0xed, 0xc5, 0xc1, 0x05, 0xbf, 0xc1, 0x0e, 0xf1, 0xff, 0x21, 0x04, 0x42, 0x04, 0x3e, - 0x28, 0x15, 0x14, 0x38, 0x04, 0x47, 0x28, 0x1d, 0x30, 0x28, 0x15, 0x20, 0x00, 0x15, 0x3e, 0x04, 0x31, 0x48, 0x27, 0x41, 0x20, 0x1b, 0x4c, 0x04, - 0xe8, 0x25, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x01, 0x03, 0x03, 0x02, 0x03, 0x04, 0x02, 0x02, 0x03, 0x03, 0x04, 0x28, 0x1b, - 0x02, 0x02, 0x00, 0xc6, 0x27, 0xc2, 0x08, 0x00, 0x00, 0x14, 0x4a, 0x01, 0x2d, 0x4e, 0x2e, 0x59, 0xe6, 0x30, 0xe9, 0x28, 0x1d, 0xff, 0x06, 0x18, - 0x13, 0x58, 0x17, 0x3f, 0xab, 0x37, 0x0b, 0x58, 0x17, 0xd8, 0x03, 0xd8, 0x27, 0x04, 0x3f, 0xca, 0x56, 0x4a, 0x27, 0x95, 0x74, 0x8f, 0xad, 0x2d, - 0xe0, 0x8f, 0x05, 0x1f, 0xbe, 0x4d, 0xa3, 0x49, 0x13, 0x74, 0x4d, 0x2f, 0x6a, 0x00, 0xfc, 0xa0, 0x8b, 0x05, 0x5f, 0xb4, 0xaf, 0xd0, 0xff, 0x20, - 0xe1, 0x8f, 0x65, 0x05, 0xe0, 0x7f, 0x3e, 0x2b, 0xf0, 0x83, 0x04, 0xdf, 0xcb, 0x00, 0x2d, 0x4e, 0xe5, 0x65, 0xb7, 0x5f, 0x70, 0x51, 0x83, 0x06, - 0x78, 0x1b, 0x11, 0xc9, 0x80, 0xbd, 0x20, 0x88, 0x1d, 0x05, 0xf8, 0x15, 0xad, 0x52, 0x7f, 0x64, 0x6b, 0x0d, 0x2d, 0xe3, 0x0d, 0x05, 0xb2, 0x7f, - 0xe2, 0x06, 0x61, 0xff, 0x11, 0x26, 0x04, 0x35, 0x28, 0x0f, 0x42, 0x04, 0x40, 0x28, 0x13, 0x6c, 0x3b, 0x28, 0x05, 0x78, 0x1b, 0x2e, 0x28, 0x2f, - 0x38, 0x1b, 0x3d, 0x04, 0x5c, 0x34, 0x28, 0x33, 0x4f, 0x04, 0x88, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x02, 0x09, 0x05, 0x04, - 0x04, 0x05, 0x28, 0x15, 0x05, 0x06, 0x28, 0x1b, 0x00, 0x03, 0x03, 0x24, 0x28, 0xaf, 0x06, 0x00, 0x00, 0x08, 0x15, 0x4a, 0x17, 0x53, 0x06, 0xb8, - 0x15, 0x00, 0x00, 0x4e, 0xad, 0x2f, 0xaf, 0x72, 0x2f, 0xa9, 0x68, 0x06, 0x28, 0x13, 0x00, 0x38, 0x17, 0x64, 0x2f, 0xbd, 0x7d, 0x2d, 0x60, 0x95, - 0x05, 0x37, 0x9b, 0x70, 0x69, 0x06, 0x38, 0x13, 0x00, 0x38, 0x17, 0x53, 0x2f, 0xbb, 0xfd, 0x58, 0xa7, 0x59, 0xad, 0x5c, 0xb9, 0x04, 0x98, 0x23, - 0x00, 0x38, 0x17, 0x30, 0x83, 0x70, 0x00, 0x40, 0x83, 0x93, 0x04, 0x1f, 0xd5, 0x17, 0x53, 0x06, 0xd8, 0x17, 0x81, 0xbd, 0x06, 0xd8, 0x17, 0x33, - 0x7f, 0xeb, 0x52, 0xeb, 0x06, 0x38, 0x15, 0x00, 0x58, 0x17, 0x64, 0x2f, 0x2d, 0x20, 0x84, 0x19, 0x04, 0xda, 0x9b, 0x57, 0x21, 0x28, 0x17, 0x32, - 0x28, 0x1b, 0x40, 0x06, 0x08, 0x11, 0x07, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x89, 0x28, 0x0f, 0x05, 0x05, 0x06, 0x28, 0x1a, 0x06, 0x03, 0x28, - 0x20, 0x00, 0x04, 0x04, 0x91, 0x28, 0x0d, 0x07, 0x00, 0x00, 0x06, 0x16, 0x4a, 0xb7, 0x30, 0xa7, 0x06, 0xc8, 0x17, 0xbb, 0x0f, 0x20, 0x38, 0x00, - 0x5a, 0x2f, 0xad, 0x3f, 0xa7, 0x05, 0x9f, 0x31, 0x5a, 0x00, 0xe9, 0xb6, 0x8f, 0xa1, 0x65, 0x06, 0x28, 0x17, 0x37, 0x87, 0x65, 0x06, 0x28, 0x0f, - 0x90, 0x7f, 0x6a, 0x3e, 0x00, 0xe6, 0x2f, 0xaf, 0x06, 0x70, 0x81, 0x38, 0x87, 0xb8, 0x15, 0x05, 0xff, 0xb3, 0x7f, 0x61, 0x89, 0x06, 0x98, 0x13, - 0x3f, 0xff, 0x78, 0xc1, 0x80, 0xb7, 0x06, 0x38, 0x0f, 0xf7, 0x07, 0x72, 0x7f, 0x33, 0xf1, 0xb8, 0x15, 0x05, 0xfc, 0x9b, 0x17, 0x28, 0x17, 0x05, - 0x98, 0x05, 0x08, 0x14, 0xff, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x07, 0x07, 0x06, 0x06, 0x07, 0x28, 0x1a, 0x20, 0x07, 0x02, 0x20, 0x05, 0x05, - 0x05, 0x6b, 0x27, 0x39, 0x42, 0x08, 0x2d, 0x2d, 0x4a, 0x57, 0x53, 0xc7, 0x28, 0x15, 0xde, 0x0c, 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x48, 0x1b, 0xd8, - 0x17, 0x6f, 0x00, 0x55, 0x66, 0x4e, 0xb3, 0x6f, 0x4f, 0xc5, 0x68, 0x2e, 0xbb, 0x72, 0x48, 0x2f, 0xd6, 0xdb, 0x49, 0x03, 0xbf, 0xc6, 0x44, 0x4f, - 0xa1, 0x65, 0x8b, 0xa5, 0x78, 0x19, 0x53, 0xd1, 0x2f, 0x47, 0x05, 0x58, 0x17, 0xfc, 0x2f, 0xa7, 0x64, 0x00, 0xe4, 0xc0, 0x85, 0xbd, 0x05, 0xb8, - 0x17, 0x79, 0x40, 0x7f, 0x3f, 0xaf, 0x06, 0x10, 0x7d, 0x31, 0x7f, 0x69, 0x2e, 0x9d, 0x55, 0x61, 0x6d, 0x25, 0x63, 0x4e, 0x2f, 0x4d, 0x41, 0xf7, - 0x69, 0x4e, 0x3f, 0xe0, 0x3d, 0x2b, 0x3a, 0x29, 0x04, 0x7f, 0xcb, 0x57, 0x53, 0x39, 0x4e, 0xa6, 0x40, 0x9e, 0x06, 0x98, 0x19, 0xa8, 0xb0, 0x80, - 0xbd, 0x20, 0x00, 0x02, 0x74, 0xb3, 0xc8, 0xb9, 0x6c, 0xd0, 0x06, 0x38, 0x1f, 0x5a, 0xde, 0x2f, 0xaf, 0x31, 0x69, 0x2d, 0x6e, 0xad, 0x93, 0x09, - 0x3e, 0xbb, 0x06, 0x51, 0xff, 0x64, 0xd8, 0x2f, 0x43, 0x34, 0x05, 0x75, 0x04, 0xa1, 0xf7, 0x7f, 0xff, 0x2e, 0x04, 0x36, 0xa3, 0x28, 0x13, 0x30, - 0x28, 0x11, 0x20, 0x00, 0x14, 0x48, 0x1f, 0x05, 0xd8, 0x1d, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, 0x06, 0x01, 0x07, 0x07, 0x01, - 0xb0, 0x28, 0x1a, 0x01, 0x28, 0x1f, 0x20, 0x01, 0x9e, 0x27, 0xc7, 0x06, 0x00, 0x00, 0x00, 0x18, 0x4a, 0xd5, 0x30, 0xa7, 0x30, 0x42, 0xed, 0x28, - 0x15, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x3d, 0x33, 0x46, 0xa0, 0x47, 0xeb, 0x6f, 0x2f, 0xab, 0x20, 0x00, 0x49, 0x00, 0x73, 0xaa, 0x8f, 0xbb, 0x73, - 0x05, 0x6f, 0x3b, 0xce, 0x2f, 0xab, 0x65, 0x20, 0x77, 0x20, 0xaa, 0x20, 0x89, 0xe9, 0x40, 0x89, 0xe9, 0x05, 0xe0, 0xff, 0xe4, 0x28, 0xfb, 0xf6, - 0xed, 0x49, 0x01, 0x06, 0x3e, 0xb3, 0x31, 0x73, 0x6f, 0x41, 0x03, 0x31, 0x01, 0xe6, 0x29, 0x87, 0x1f, 0x20, 0x00, 0xd8, 0x05, 0xa0, 0x8d, 0x71, - 0xf3, 0x51, 0x81, 0x3a, 0x07, 0x32, 0x0b, 0x80, 0x05, 0x9f, 0xbd, 0xd5, 0x6c, 0x57, 0x7f, 0xa4, 0x7f, 0x9b, 0xc0, 0x06, 0x42, 0xfb, 0x3f, 0xff, - 0x98, 0xd3, 0x5c, 0xb8, 0x20, 0x00, 0x0f, 0x1c, 0xc8, 0xc4, 0xb3, 0x06, 0x58, 0x97, 0x33, 0x7f, 0x3b, 0x7d, 0x06, 0x72, 0x81, 0x5d, 0x49, 0x2f, - 0x1d, 0x68, 0x81, 0xff, 0x54, 0x0b, 0x05, 0xb3, 0x81, 0x24, 0x28, 0x13, 0x11, 0x40, 0x04, 0x35, 0x20, 0x03, 0x41, 0x04, 0x3a, 0x28, 0x13, 0x54, - 0x35, 0x28, 0x1f, 0x3e, 0x20, 0x0b, 0x42, 0x20, 0x15, 0x3e, 0x04, 0x70, 0x32, 0x28, 0x31, 0x0c, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x07, 0x03, - 0x04, 0x01, 0x20, 0x03, 0x04, 0x28, 0x1a, 0x04, 0x05, 0x03, 0x07, 0x07, 0x02, 0x07, 0x07, 0x18, 0x2c, 0x31, 0xfb, 0x00, 0x3f, 0xff, 0x01, 0x01, - 0x04, 0x02, 0x02, 0x01, 0x02, 0x01, 0x01, 0x20, 0x05, 0x10, 0x04, 0x01, 0x01, 0x20, 0x07, 0x01, 0x03, 0x03, 0x02, 0x09, 0x03, 0x02, 0x02, 0x03, - 0x20, 0x3f, 0x02, 0x02, 0x20, 0x07, 0x10, 0x02, 0x05, 0x04, 0x20, 0x42, 0x03, 0x04, 0x05, 0x06, 0xc4, 0x20, 0x13, 0x40, 0x07, 0x05, 0x05, 0x06, - 0x20, 0x12, 0x06, 0x03, 0xd4, 0x20, 0x18, 0x20, 0x1a, 0x07, 0x28, 0x77, 0x07, 0x20, 0x12, 0x07, 0x02, 0xf8, 0x20, 0x05, 0x20, 0x1a, 0xe8, 0x8f, - 0xf0, 0x87, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x4b, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x43, 0x2a, 0x96, 0x11, 0x00, 0x00, 0x00, 0x01, 0x4b, 0xa8, 0x30, 0xb9, 0x30, 0xc8, 0x04, - 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x58, 0x1f, 0x45, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x15, 0x69, 0x00, 0x61, 0x06, - 0xe0, 0x7f, 0x65, 0x06, 0x80, 0xff, 0x6c, 0x20, 0xfb, 0x18, 0x6e, 0x00, 0x64, 0x0e, 0xe1, 0x7f, 0x06, 0x31, 0xff, 0x31, 0x72, 0x99, 0x04, 0x6c, - 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0xd0, 0xc5, 0x00, 0xa4, 0xc2, 0xa0, 0xd1, 0xc8, 0xb2, 0x44, 0xc5, 0xd0, 0x06, 0xb3, 0x7f, 0x06, 0xf2, - 0x7f, 0xf3, 0x06, 0x83, 0xff, 0x2d, 0x04, 0x41, 0x04, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x33, 0x4f, 0x04, 0x10, 0x06, 0x13, - 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, 0x30, 0x01, 0x4c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xc9, 0x2a, 0xbb, 0x11, 0x00, 0x00, 0x00, 0x08, 0x4c, 0xa6, 0x30, 0xfc, 0x30, 0xb7, 0x24, 0x30, 0xde, 0x20, 0x05, 0x0c, 0x77, 0x06, 0x38, - 0x21, 0x55, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x44, 0x61, 0x20, 0x01, 0x20, 0x00, 0x2f, 0x20, 0x03, 0x4e, 0x00, 0x11, - 0x79, 0x00, 0x6c, 0x20, 0x0f, 0x6e, 0x00, 0x64, 0x05, 0xe0, 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x10, 0x7f, 0xb0, 0x65, 0x30, 0x57, 0x3a, - 0x53, 0x80, 0x06, 0x9b, 0x1b, 0xb0, 0xc6, 0xdc, 0xc2, 0xc8, 0xb9, 0x20, 0x18, 0x00, 0xfc, 0xc8, 0x06, 0x5b, 0x9f, 0x0e, 0xf2, 0xff, 0x23, 0x04, - 0x43, 0x00, 0x04, 0x41, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x30, 0xe0, 0x20, 0x01, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x01, 0x13, 0x12, 0x13, - 0x13, 0x02, 0x13, 0x01, 0x01, 0x10, 0x13, 0x0f, 0x20, 0x05, 0x01, 0x40, 0x01, 0x58, 0x17, 0x09, 0x4c, 0xe9, 0x30, 0xc3, 0x30, 0x0a, 0xd4, 0x30, - 0xde, 0x5d, 0x06, 0x7f, 0xb5, 0x4c, 0x28, 0x0f, 0x70, 0xbd, 0x20, 0x01, 0x69, 0x68, 0x13, 0x50, 0x0f, 0x05, 0x78, 0x15, 0x70, 0x7f, 0x6f, 0x28, - 0x83, 0x1f, 0x69, 0x00, 0x65, 0x06, 0xa0, 0xff, 0x05, 0x90, 0xf1, 0x00, 0x51, 0x7f, 0x51, 0x01, 0x06, 0x19, 0x19, 0xd5, 0xb1, 0x7f, 0x3a, 0x17, - 0x66, 0x2a, 0x23, 0x6e, 0x8a, 0x15, 0x65, 0x2a, 0x33, 0x80, 0x04, 0xd9, 0xad, 0xc9, 0x62, 0x6e, 0x66, 0x70, 0x51, 0x01, 0xc3, 0x06, 0x4b, 0x13, - 0x3f, 0xff, 0x7c, 0xb7, 0x3c, 0xd5, 0x06, 0x98, 0x15, 0x73, 0x7f, 0xd1, 0x06, 0x72, 0x7d, 0x73, 0xff, 0xf3, 0x06, 0x62, 0x7d, 0x00, 0x00, 0x1b, - 0x28, 0x0f, 0x11, 0x3f, 0x04, 0x3b, 0x28, 0x15, 0x3d, 0x04, 0x34, 0x28, 0x1f, 0x70, 0x4f, 0x05, 0xe8, 0x1b, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, - 0x7f, 0x02, 0x0b, 0x08, 0x05, 0x00, 0x09, 0x08, 0x02, 0x02, 0x07, 0x08, 0x06, 0x0b, 0x00, 0x02, 0x02, 0x02, 0x02, 0x49, 0x2f, 0x4c, 0x12, 0x00, - 0x00, 0x00, 0x0a, 0x4c, 0x17, 0x53, 0xdd, 0x30, 0x00, 0xd5, 0x30, 0xe4, 0x30, 0xf3, 0x30, 0xde, 0x30, 0x14, 0xfc, 0x30, 0x0c, 0x06, 0x05, 0x1f, - 0x50, 0x27, 0x93, 0x68, 0x00, 0x57, 0x6a, 0x27, 0x99, 0x69, 0x2f, 0xb7, 0x2d, 0x80, 0x0f, 0x3b, 0x2d, 0xdb, 0x43, 0x10, 0x6f, 0x00, 0x72, 0x20, - 0x01, 0x61, 0x00, 0xa0, 0x00, 0x51, 0xd6, 0x2f, 0xe1, 0x74, 0x27, 0xc5, 0x72, 0x00, 0x62, 0x27, 0xd1, 0x55, 0x74, 0x40, 0x0b, 0x6e, 0x02, 0x6f, - 0xeb, 0x4f, 0x40, 0x4b, 0x72, 0x28, 0x19, 0xd7, 0x50, 0x4b, 0x58, 0x1f, 0x20, 0x2b, 0xa9, 0x75, 0x80, 0x75, 0x04, 0xbb, 0xb5, 0x70, 0x61, 0x77, - 0xf6, 0x03, 0xa0, 0xd3, 0x02, 0xf0, 0xff, 0x3c, 0xb7, 0x53, 0x29, 0x25, 0x71, 0x59, 0x31, 0x1f, 0x5d, 0x69, 0x49, 0x3b, 0x61, 0x2c, 0xc7, 0x03, - 0xd9, 0x3d, 0xf1, 0x7f, 0x68, 0x88, 0x21, 0xb8, 0x38, 0x15, 0x6c, 0x81, 0xf9, 0x31, 0xef, 0x04, 0x3f, 0xd5, 0x17, 0x53, 0x5a, 0x04, 0x53, 0xd5, - 0x6e, 0x3a, 0x53, 0x06, 0x7b, 0x17, 0x81, 0xbd, 0x00, 0x24, 0xc6, 0xa4, 0xc2, 0xb8, 0xd2, 0x5c, 0xb8, 0x00, 0xf4, 0xbc, 0xb8, 0xd2, 0xc8, 0xb2, - 0x44, 0xc5, 0xed, 0x05, 0xd8, 0x25, 0x33, 0x57, 0x52, 0xe3, 0x2d, 0x03, 0xc3, 0x57, 0x02, 0x33, 0x7f, 0xf3, 0xa2, 0x7f, 0x70, 0x64, 0x2b, 0xab, - 0x04, 0xf1, 0xfb, 0x3f, 0xff, 0x21, 0x04, 0x35, 0x04, 0x54, 0x32, 0x20, 0x03, 0x40, 0x28, 0x17, 0x30, 0x28, 0x15, 0x20, 0x00, 0x04, 0x1e, 0x04, - 0x41, 0x04, 0x42, 0x20, 0x0f, 0x3e, 0x04, 0x5d, 0x31, 0x20, 0x03, 0x42, 0x28, 0x2f, 0x04, 0xb8, 0x2d, 0x02, 0x14, 0xff, 0x20, 0x03, 0xc4, 0xff, - 0xc0, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x03, 0x10, 0x0b, 0x09, 0x0d, 0x0b, 0x00, 0x03, 0x03, 0x09, 0x0b, 0x0c, 0x10, 0x03, 0x03, 0x04, - 0x03, 0x03, 0x3b, 0x2e, 0x1c, 0x28, 0x17, 0x0b, 0x4c, 0x06, 0xab, 0x30, 0xa4, 0x30, 0xcc, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x4b, 0xdf, 0x2f, 0xaf, - 0x3e, 0x21, 0x75, 0x47, 0x87, 0x3b, 0x31, 0x30, 0x11, 0x58, 0x17, 0x36, 0x85, 0xf0, 0x04, 0xff, 0x45, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, - 0x30, 0x7f, 0xef, 0x51, 0xaa, 0x52, 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0x74, 0xce, 0x74, 0xc7, 0x04, 0x6a, 0xb2, 0x05, 0xd8, 0x0b, 0x0f, 0xb2, - 0xff, 0x1a, 0x28, 0x0d, 0x39, 0x28, 0x13, 0x43, 0xe0, 0x20, 0x01, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x04, 0x06, 0x06, 0x02, 0x06, 0x02, - 0x04, 0x04, 0x04, 0x04, 0x06, 0x03, 0x40, 0x06, 0xab, 0x00, 0x2d, 0xb8, 0x13, 0x00, 0x00, 0x0c, 0x4c, 0x17, 0x00, 0x53, 0xab, 0x30, 0xec, 0x30, - 0xea, 0x30, 0xa2, 0xef, 0x06, 0x68, 0x19, 0xfb, 0x2f, 0x38, 0x27, 0x72, 0x4b, 0x2f, 0x38, 0x13, 0x00, 0x1a, 0xab, 0x50, 0x1f, 0xd5, 0x3e, 0x49, - 0x03, 0x5f, 0x4f, 0x43, 0x40, 0x6f, 0xe9, 0x2f, 0x07, 0x69, 0x2f, 0xad, 0xfb, 0x3e, 0xa5, 0x38, 0x9f, 0x7f, 0xc5, 0x05, 0x5d, 0xaf, 0x3d, 0xad, - 0x6b, 0x80, 0xd7, 0x30, 0x87, 0xf7, 0x04, 0xfd, 0xa5, 0xf0, 0xff, 0x50, 0x77, 0x3f, 0xa5, 0x53, 0x2f, 0xa5, 0x7e, 0x29, 0x3f, 0xc7, 0x7f, 0x69, - 0x2f, 0xc9, 0x59, 0xa1, 0x04, 0x5f, 0xaf, 0x91, 0xcf, 0x7e, 0x27, 0x31, 0xdb, 0x05, 0x3e, 0x29, 0x80, 0x5f, 0xff, 0x17, 0x53, 0x61, 0x53, 0x2f, - 0x7d, 0x29, 0x10, 0x52, 0x3f, 0x96, 0x06, 0x58, 0x1d, 0x81, 0xbd, 0x74, 0xce, 0x03, 0x10, 0xb8, 0xac, 0xb9, 0x44, 0xc5, 0x06, 0x58, 0x1b, 0x3f, - 0x91, 0xee, 0x52, 0xeb, 0x73, 0x7b, 0x52, 0x83, 0xeb, 0x05, 0xc2, 0x7f, 0x53, 0x7f, 0x51, 0xff, 0x6f, 0x80, 0x05, 0xa1, 0xfd, 0x00, 0x00, 0x21, - 0x04, 0x35, 0x04, 0x32, 0xa0, 0x20, 0x03, 0x40, 0x28, 0x1b, 0x30, 0x04, 0x4f, 0x04, 0x20, 0xa3, 0x48, 0x29, 0x40, 0x20, 0x15, 0x3b, 0x04, 0x38, - 0x20, 0x0f, 0x07, 0xd4, 0xff, 0xf0, 0x5d, 0x35, 0x03, 0xb4, 0xff, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x05, 0x0f, 0x02, 0x08, 0x00, 0x02, - 0x05, 0x05, 0x05, 0x08, 0x01, 0x0b, 0x0f, 0x80, 0x20, 0x06, 0x05, 0x83, 0x2c, 0x27, 0x15, 0x00, 0x00, 0x41, 0x0d, 0x28, 0x17, 0xb5, 0x30, 0xf4, - 0x30, 0xa9, 0x06, 0x68, 0x15, 0xaf, 0x00, 0x18, 0x17, 0x53, 0x2f, 0xbf, 0x76, 0x44, 0x1b, 0xf8, 0x11, 0x70, 0x19, 0x3b, 0x43, 0x6b, 0x78, 0x03, - 0x8f, 0xdb, 0x70, 0x6f, 0x6e, 0x06, 0xe8, 0x17, 0x73, 0x60, 0xf7, 0x05, 0xff, 0xb4, 0xf0, 0x91, 0x6f, 0x05, 0xf8, 0x11, 0x00, 0x11, 0x7f, 0x06, - 0x58, 0x17, 0x28, 0x84, 0x83, 0x6c, 0xc3, 0x06, 0x58, 0x13, 0x58, 0x17, 0xac, 0xc0, 0xf4, 0xbc, 0x06, 0x58, 0x13, 0xf8, 0x17, 0xda, 0x73, 0x7b, - 0x06, 0x12, 0x7f, 0xf3, 0xa1, 0xff, 0x06, 0x98, 0x17, 0x3e, 0x28, 0x23, 0x20, 0xaf, 0x28, 0x29, 0x30, 0x28, 0x29, 0x3e, 0x05, 0x08, 0x11, 0x01, - 0xd4, 0xff, 0x3b, 0xb1, 0x04, 0x34, 0xff, 0xc0, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x06, 0x11, 0x10, 0x0a, 0x12, 0x10, 0x00, 0x06, 0x06, - 0x0a, 0x10, 0x0d, 0x11, 0x06, 0x06, 0x00, 0x06, 0x06, 0xb9, 0x2c, 0xae, 0x13, 0x00, 0x00, 0x14, 0x0e, 0x4c, 0x57, 0x06, 0xe8, 0x17, 0x45, 0x4e, - 0x9b, 0x6c, 0x00, 0x47, 0xe4, 0x00, 0x08, 0x13, 0x53, 0x00, 0xf6, 0x2f, 0xbd, 0x04, 0xb8, 0x13, 0x00, 0x98, 0x17, 0x76, 0x53, 0x28, 0x1d, 0x05, - 0x38, 0x15, 0x38, 0x97, 0xfc, 0x06, 0xa8, 0x15, 0xb8, 0x17, 0x4d, 0xdd, 0x2f, 0xb5, 0x38, 0x0d, 0x64, 0x05, 0x68, 0x11, 0x00, 0xd8, 0x17, 0x31, - 0x81, 0x72, 0x05, 0x2f, 0xc0, 0x4b, 0x57, 0x06, 0xe8, 0x17, 0xa8, 0xb0, 0x06, 0xd8, 0x17, 0x5a, 0x2b, 0x07, 0x31, 0xf3, 0xe8, 0x06, 0x58, 0x15, - 0x00, 0x78, 0x17, 0x33, 0x7f, 0x6c, 0x05, 0x4c, 0xa8, 0x2e, 0x04, 0x36, 0xf8, 0x06, 0x68, 0x11, 0x01, 0x94, 0xff, 0x04, 0x78, 0x13, 0x07, 0x35, - 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x07, 0x04, 0x11, 0x00, 0x12, 0x11, 0x11, 0x07, 0x07, 0x14, 0x11, 0x14, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, 0xdd, - 0x2b, 0x63, 0xa0, 0x28, 0x17, 0x0f, 0x28, 0x17, 0xdd, 0x30, 0xd5, 0x30, 0xe4, 0x03, 0x30, 0xf3, 0x30, 0xde, 0x30, 0xfc, 0x06, 0x28, 0x1d, 0xb8, - 0x17, 0xae, 0x7b, 0x3b, 0x61, 0x2f, 0xbd, 0x6d, 0x2f, 0xc7, 0x3e, 0x3f, 0xf8, 0x21, 0xd6, 0xc7, 0x2f, 0x59, 0x3e, 0xd3, 0x72, 0x00, 0x62, 0x2f, - 0xe5, 0x7e, 0xdf, 0x02, 0x9f, 0xd8, 0x5e, 0x4f, 0x40, 0x4f, 0x72, 0x2f, 0xb5, 0x50, 0x4f, 0x05, 0xf8, 0x1f, 0x58, 0x17, 0xf6, 0xfa, 0x03, 0xe0, - 0xd5, 0x02, 0xd0, 0xff, 0x3f, 0xb7, 0x05, 0x78, 0x25, 0xf1, 0x7f, 0x68, 0x05, 0xe8, 0x21, 0x57, 0x04, 0x53, 0x5a, 0x53, 0xd5, 0x6e, 0x06, 0xb8, - 0x17, 0x24, 0xc6, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x5c, 0xb8, 0xf4, 0xbc, 0x03, 0xb8, 0xd2, 0xc8, 0xb2, 0x44, 0xc5, 0x05, 0xd8, 0x23, 0x98, 0x17, - 0xdc, 0x03, 0xf3, 0x59, 0x02, 0x13, 0x7f, 0xf3, 0xa2, 0x7f, 0x05, 0x78, 0x1f, 0x58, 0x17, 0x30, 0x04, 0x40, 0x4f, 0x28, 0x17, 0x1e, 0x04, 0x41, - 0x04, 0x42, 0x04, 0x55, 0x40, 0x28, 0x25, 0x31, 0x28, 0x29, 0x42, 0x28, 0x2f, 0x38, 0x20, 0x17, 0xb8, 0x07, 0xb4, 0xff, 0x20, 0x04, 0x04, 0xff, - 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x08, 0x03, 0x0c, 0x00, 0x11, 0x0c, 0x0c, 0x08, 0x08, 0x13, 0x0c, 0x13, 0x00, 0x03, 0x08, 0x08, 0x08, - 0x08, 0xa6, 0x2c, 0x3e, 0x05, 0x10, 0x00, 0x00, 0x10, 0x4c, 0x06, 0xd8, 0x15, 0x00, 0x00, 0x88, 0x0b, 0xff, 0x05, 0x74, 0xa5, 0x00, 0x58, 0x17, - 0x05, 0x9f, 0xb8, 0x06, 0x55, 0x8d, 0x00, 0xf8, 0x17, 0x06, 0x90, 0x7f, 0x78, 0x17, 0x05, 0x8f, 0x2f, 0x9f, 0x06, 0xc8, 0x15, 0x00, 0x00, 0x06, - 0xd8, 0x15, 0x07, 0xd2, 0x7f, 0x98, 0x17, 0x05, 0x9f, 0xb1, 0x06, 0x38, 0x0b, 0xc0, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x0e, 0x09, - 0x0b, 0x0a, 0x09, 0x02, 0x09, 0x09, 0x0c, 0x09, 0x07, 0x0e, 0x20, 0x06, 0x09, 0x00, 0xdd, 0x2c, 0x27, 0x0f, 0x00, 0x00, 0x11, 0x4c, 0x05, 0xd4, - 0x30, 0xeb, 0x30, 0xab, 0x06, 0xc8, 0x17, 0x69, 0x2f, 0xfb, 0x57, 0x6b, 0x00, 0x0b, 0x23, 0x42, 0x80, 0x17, 0x6c, 0x4b, 0x3f, 0x04, 0x7f, 0xb5, - 0x00, 0x10, 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xd0, 0x7f, 0xae, 0x76, 0x14, 0x5c, 0x61, 0x53, 0x80, 0x06, 0x98, 0x19, 0x3c, 0xd5, 0x74, - 0xb9, 0x78, 0xce, 0xc8, 0x68, 0xb9, 0x05, 0xf8, 0x0f, 0x0f, 0x72, 0xff, 0x1f, 0x28, 0x07, 0x40, 0x04, 0x3a, 0x2b, 0x04, 0x30, 0x28, 0x11, 0x3c, - 0x20, 0x05, 0x30, 0x05, 0xa8, 0x13, 0x08, 0x54, 0xff, 0x80, 0x10, 0x0d, 0xd0, 0x7f, 0x0a, 0x0d, 0x0e, 0x0e, 0x0f, 0x0e, 0x0a, 0x00, 0x0a, 0x0e, - 0x0e, 0x08, 0x0d, 0x0a, 0x0a, 0x0a, 0x00, 0x0a, 0xbb, 0x2b, 0xe6, 0x10, 0x00, 0x00, 0x12, 0x02, 0x4c, 0xb5, 0x30, 0xbf, 0x30, 0xaf, 0x28, 0x17, - 0xbf, 0x8a, 0x06, 0x48, 0x15, 0x00, 0x00, 0x53, 0x2e, 0x9d, 0x74, 0x2e, 0xa1, 0x6b, 0x3d, 0x00, 0x75, 0x2f, 0xab, 0x30, 0x09, 0x5b, 0x2f, 0xd0, - 0x17, 0x64, 0x04, 0x8e, 0xc3, 0xe0, 0x00, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xd0, 0x7f, 0x28, 0x84, 0x54, 0x58, 0x06, 0x10, 0x66, 0x54, - 0x58, 0x06, 0x78, 0x19, 0xac, 0xc0, 0xc0, 0xd0, 0x0d, 0xe4, 0xcf, 0xc0, 0xd0, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0xff, 0x21, 0x28, 0x11, 0x47, 0x42, - 0x28, 0x15, 0x3a, 0x04, 0x43, 0x28, 0x19, 0x30, 0x09, 0x0e, 0xf4, 0xff, 0x80, 0x10, 0x0d, 0xd0, 0x7f, 0x0b, 0x12, 0x0f, 0x0f, 0x10, 0x0f, 0x0b, - 0x00, 0x0b, 0x0f, 0x0f, 0x0a, 0x12, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0xb8, 0x2b, 0x80, 0x0f, 0x00, 0x00, 0x13, 0x00, 0x4c, 0x2d, 0x4e, 0xe8, 0x90, - 0xdd, 0x30, 0xd5, 0x22, 0x30, 0xe4, 0x28, 0x1b, 0xde, 0x30, 0xfc, 0x06, 0x08, 0x1d, 0x4b, 0x08, 0x00, 0x65, 0x00, 0x73, 0x2f, 0xaf, 0x69, 0x00, - 0x2d, 0x82, 0x2f, 0xbb, 0x6f, 0x00, 0x68, 0x00, 0x6a, 0x00, 0x0b, 0x3b, 0x4d, 0xaa, 0x20, 0x23, 0x6c, 0x2b, 0x37, 0x65, 0x2f, 0xd9, 0x73, 0x48, - 0x45, 0xa0, 0x35, 0x00, 0xd6, 0x40, 0x09, 0x30, 0x11, 0x62, 0x20, 0x35, 0x74, 0x40, 0x0b, 0x56, 0x6e, 0x02, 0x2f, 0xeb, 0x4f, 0x40, 0x51, 0x72, - 0x20, 0x79, 0x50, 0x47, 0x6e, 0xae, 0x2f, 0xbf, 0x65, 0x20, 0x8b, 0x43, 0x40, 0x4f, 0x30, 0x19, 0x3b, 0xb1, 0x65, 0xb1, 0x04, 0x8f, 0xc5, 0x4d, - 0x2f, 0xaf, 0x50, 0xbd, 0x6c, 0x00, 0xf6, 0x03, 0x60, 0xd3, 0xf6, 0x02, 0xf0, 0xff, 0x3c, 0xb3, 0x05, 0x70, 0xff, 0xf1, 0x7f, 0x68, 0x00, 0x60, - 0x81, 0x04, 0x7f, 0xcf, 0x2d, 0x04, 0x4e, 0x5a, 0x53, 0xd5, 0x6e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x11, 0xc9, 0x59, 0xc5, 0x24, 0xc6, 0xa4, - 0xc2, 0x00, 0xb8, 0xd2, 0x5c, 0xb8, 0xf4, 0xbc, 0xb8, 0xd2, 0x0e, 0xc8, 0xb2, 0x44, 0xc5, 0x05, 0xb8, 0x23, 0xb2, 0xe7, 0x3e, 0x9b, 0x2d, 0xd8, - 0x03, 0x83, 0x59, 0x02, 0x13, 0x7f, 0xf3, 0x00, 0x82, 0x7f, 0x04, 0x9f, 0xc3, 0x26, 0x04, 0x35, 0xa2, 0x48, 0x0f, 0x40, 0x28, 0x1f, 0x3b, 0x04, - 0x4c, 0x28, 0x1b, 0x30, 0x00, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x1e, 0x04, 0x41, 0x8a, 0x40, 0x15, 0x3e, 0x04, 0x31, 0x20, 0x03, 0x42, 0x28, 0x33, - 0x38, 0xdc, 0x20, 0x17, 0x07, 0x74, 0xff, 0x20, 0x03, 0x84, 0xff, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x0c, 0x08, 0x00, 0x0a, 0x07, 0x0b, - 0x0a, 0x0c, 0x0c, 0x03, 0x0a, 0x00, 0x10, 0x08, 0x0c, 0x0c, 0x0c, 0x0c, 0x65, 0x2d, 0x04, 0x73, 0x10, 0x00, 0x00, 0x14, 0x28, 0x17, 0x2e, 0x59, - 0x06, 0xb9, 0x30, 0xaa, 0x30, 0xdf, 0x06, 0x08, 0x11, 0x00, 0x18, 0x17, 0x53, 0xaa, 0x2f, 0xb3, 0x6f, 0x28, 0x11, 0x69, 0x00, 0xa8, 0x0f, 0x46, - 0x28, 0x41, 0x6e, 0xde, 0x28, 0x25, 0x38, 0x3b, 0x64, 0x03, 0x2f, 0xdb, 0xd0, 0x4f, 0x05, 0xb8, 0x11, 0x00, 0x18, 0x17, 0x66, 0xfc, 0x40, 0xdb, - 0x03, 0xb0, 0xdd, 0x01, 0xf0, 0xff, 0x05, 0xd8, 0x13, 0x01, 0x50, 0x7f, 0x04, 0xdf, 0xc7, 0x2d, 0x4e, 0x08, 0xac, 0x82, 0x70, 0x51, 0x06, 0x98, - 0x17, 0x00, 0xcf, 0xa4, 0x00, 0xc2, 0xa4, 0xd0, 0x18, 0xc2, 0x24, 0xc6, 0xf8, 0x7b, 0xbb, 0x05, 0xb8, 0x0f, 0x00, 0x98, 0x17, 0x03, 0xf3, 0x61, - 0x01, 0x53, 0x7f, 0xe2, 0x06, 0x61, 0xff, 0x00, 0x78, 0x17, 0x55, 0x24, 0x28, 0x07, 0x3d, 0x28, 0x29, 0x4f, 0x28, 0x35, 0x34, 0x04, 0x68, 0x13, - 0xb8, 0x02, 0x14, 0xff, 0x20, 0x04, 0x04, 0xff, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x0d, 0x09, 0x04, 0x00, 0x06, 0x03, 0x01, 0x0d, 0x0d, - 0x02, 0x03, 0x11, 0x00, 0x09, 0x0d, 0x0d, 0x0d, 0x0d, 0x42, 0x2c, 0x4e, 0x00, 0x12, 0x00, 0x00, 0x15, 0x4c, 0xf4, 0x30, 0xa1, 0x00, 0x30, 0xeb, - 0x30, 0xb7, 0x30, 0xca, 0x30, 0xa4, 0x05, 0x30, 0xb9, 0x30, 0x3d, 0x00, 0x05, 0xf8, 0x23, 0x56, 0x2f, 0xfd, 0xd4, 0x3b, 0x05, 0x37, 0xed, 0x61, - 0x2f, 0xab, 0x73, 0x00, 0x28, 0x1f, 0x45, 0x00, 0x56, 0x67, 0x6f, 0xbd, 0x6c, 0x2f, 0xcd, 0x67, 0x03, 0xc8, 0x1f, 0xf8, 0x17, 0x20, 0x3f, 0x00, - 0x70, 0x4f, 0x3d, 0x30, 0x05, 0x04, 0xf8, 0x13, 0x01, 0x10, 0xff, 0x06, 0x58, 0x17, 0x39, 0x9f, 0x45, 0x64, 0x2e, 0x39, 0x4f, 0x00, 0x63, 0x20, - 0x01, 0x69, 0x49, 0x2f, 0xee, 0x3f, 0xb9, 0x04, 0x39, 0x27, 0x00, 0x38, 0x97, 0x50, 0x61, 0x81, 0x3e, 0x39, 0x04, 0xff, 0xc7, 0x7f, 0x10, 0x89, - 0x57, 0x53, 0x06, 0xb8, 0x19, 0x14, 0xbc, 0x74, 0xb9, 0x00, 0xdc, 0xc2, 0x98, 0xb0, 0x74, 0xc7, 0xa4, 0xc2, 0xf6, 0x06, 0x38, 0x1d, 0x07, 0x72, - 0x7f, 0xb8, 0x17, 0x31, 0xff, 0xf3, 0x43, 0x87, 0x05, 0x12, 0x01, 0x21, 0x02, 0x04, 0x3e, 0x04, 0x31, 0x04, 0x41, 0x28, 0x19, 0x32, 0xbf, 0x48, - 0x21, 0x3d, 0x20, 0x0f, 0x05, 0x98, 0x15, 0x02, 0x74, 0xff, 0x03, 0x98, 0x1f, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0x0e, 0x14, 0x05, - 0x14, 0x04, 0x02, 0x0e, 0x0e, 0x00, 0x11, 0x04, 0x0e, 0x14, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0xfc, 0x2a, 0xd5, 0x0f, 0x00, 0x00, 0x16, 0x4c, 0x00, - 0x57, 0x53, 0xab, 0x30, 0xec, 0x30, 0xea, 0x30, 0x6a, 0xa2, 0x05, 0xa8, 0x0b, 0xbf, 0xe6, 0x45, 0x6f, 0x2b, 0xe4, 0x2f, 0xa9, 0x4b, 0xb8, 0x48, - 0x23, 0x6a, 0x4f, 0xa7, 0x3e, 0xb7, 0x3b, 0x33, 0x53, 0x00, 0xf6, 0xdf, 0x2f, 0xc7, 0x3f, 0xbb, 0xa0, 0x60, 0x1f, 0x3f, 0x59, 0x3f, 0xd1, 0x03, - 0x7d, 0x2f, 0x38, 0x97, 0x6e, 0xe9, 0x48, 0x71, 0x38, 0x15, 0x64, 0x2b, 0xb3, 0x77, 0x19, 0x05, 0x3f, 0xb0, 0x53, 0x2f, 0x00, 0xfc, 0x2f, 0xa7, - 0x6b, 0x80, 0xd9, 0x30, 0x85, 0x03, 0x70, 0xdb, 0x01, 0x90, 0xff, 0xfb, 0x50, 0x79, 0x3f, 0xab, 0x3c, 0xa3, 0x35, 0x8f, 0x3f, 0xbb, 0x6f, 0x49, - 0xab, 0x04, 0x18, 0x0b, 0xea, 0xdd, 0x2f, 0xd0, 0x7f, 0x39, 0x9b, 0x6c, 0x68, 0x9b, 0x72, 0x05, 0x2f, 0xc4, 0x57, 0x00, 0x53, 0x61, 0x53, 0x2f, - 0x7d, 0x29, 0x52, 0x3f, 0x40, 0x96, 0x06, 0x58, 0x19, 0xa8, 0xb0, 0x74, 0xce, 0x10, 0xb8, 0x0d, 0xac, 0xb9, 0x44, 0xc5, 0x05, 0xd8, 0x0f, 0x7f, - 0xff, 0x5a, 0x2e, 0xa3, 0xee, 0x39, 0xf9, 0x73, 0x7d, 0x52, 0x83, 0xeb, 0x05, 0xe2, 0x7f, 0x53, 0x7f, 0x51, 0xff, 0x6f, 0xa2, 0x6a, 0x99, 0x6c, - 0x05, 0x4c, 0x9a, 0x2e, 0x04, 0x36, 0x28, 0x0d, 0x30, 0x8a, 0x28, 0x01, 0x20, 0x00, 0x1a, 0x20, 0x07, 0x40, 0x28, 0x1d, 0x3b, 0xdc, 0x04, 0xc8, - 0x09, 0x02, 0x74, 0xff, 0x20, 0x04, 0x44, 0xff, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x0f, 0x02, 0x00, 0x03, 0x10, 0x01, 0x06, 0x0f, 0x0f, - 0x12, 0x02, 0x00, 0x12, 0x02, 0x0f, 0x0f, 0x0f, 0x0f, 0x6c, 0x2b, 0x00, 0x0a, 0x14, 0x00, 0x00, 0x17, 0x4c, 0xd1, 0x30, 0x00, 0xa4, 0x30, 0xe4, - 0x30, 0xc8, 0x30, 0x3d, 0x00, 0x15, 0xcf, 0x30, 0xe1, 0x06, 0x28, 0x1b, 0x50, 0x28, 0x11, 0x69, 0x28, 0x0b, 0x45, 0xe4, 0x2e, 0x8f, 0x2d, 0x00, - 0x48, 0x28, 0x1f, 0x6d, 0x4f, 0xb5, 0xd5, 0x3b, 0x27, 0x90, 0x1b, 0x6e, 0x2f, 0xd3, 0x65, 0x2a, 0xa5, 0x54, 0x2f, 0xd7, 0x5f, 0x76, 0x2f, 0xdb, - 0x73, 0x4b, 0x3b, 0x02, 0xfb, 0x2b, 0x00, 0x90, 0x7f, 0x06, 0xf0, 0xff, 0x0e, 0x30, 0x7f, 0xb0, 0x51, 0xe3, 0x20, 0xc1, 0xe3, 0x05, 0x1e, 0x2f, - 0x3e, 0x6d, 0x9a, 0x4e, 0x02, 0x79, 0x72, 0x77, 0x6d, 0x85, 0x68, 0x06, 0x58, 0x17, 0x0c, 0x00, 0xd3, 0x74, 0xc7, 0x8f, 0xc5, 0x58, 0xd5, 0x54, - 0x6a, 0xba, 0x06, 0x58, 0x17, 0x0e, 0xf1, 0xff, 0x1f, 0x28, 0x11, 0x39, 0x28, 0x15, 0x42, 0x0b, 0x04, 0x2d, 0x00, 0x25, 0x28, 0x1d, 0x3c, 0x28, - 0x17, 0x08, 0x74, 0xff, 0xf0, 0xd3, 0x1b, 0x04, 0xb4, 0xff, 0x06, 0xf5, 0x7f, 0x10, 0x05, 0x90, 0x7f, 0x10, 0x0c, 0x0d, 0x0d, 0x00, 0x0e, 0x0d, - 0x10, 0x10, 0x0d, 0x0d, 0x09, 0x0c, 0x00, 0x10, 0x10, 0x10, 0x10, 0x5d, 0x2b, 0x3d, 0x12, 0x00, 0x00, 0x00, 0x18, 0x4c, 0xab, 0x30, 0xf3, 0x30, - 0x6a, 0xbf, 0x06, 0x88, 0x15, 0x5e, 0x2f, 0x6e, 0x2b, 0x33, 0x61, 0x00, 0x08, 0x15, 0x45, 0x37, 0x00, 0x67, 0x4f, 0x3b, 0x38, 0x01, 0x69, 0x20, - 0x0b, 0x3a, 0xb1, 0x04, 0x18, 0x17, 0xfa, 0x00, 0x30, 0x7f, 0x06, 0xf0, 0xff, 0x0d, 0xb0, 0x7f, 0xf8, 0x05, 0x3a, 0x0d, 0x72, 0x2e, 0x33, 0x70, - 0xc2, 0x05, 0x28, 0x13, 0x3f, 0xff, 0x4e, 0x57, 0x54, 0x58, 0x06, 0x98, 0x15, 0x00, 0x06, 0x00, 0x78, 0xce, 0xc0, 0xd0, 0x06, 0x98, 0x15, 0x08, - 0x71, 0xff, 0xf3, 0xa0, 0x21, 0xff, 0x72, 0x05, 0x42, 0x01, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0xbe, 0x28, 0x15, 0x30, 0x06, 0x68, 0x17, 0x01, 0xb4, - 0xff, 0x04, 0x38, 0x17, 0x08, 0x35, 0x7f, 0x10, 0x05, 0xb0, 0x7f, 0x11, 0x00, 0x07, 0x07, 0x03, 0x07, 0x12, 0x11, 0x11, 0x05, 0x00, 0x12, 0x04, - 0x07, 0x11, 0x11, 0x11, 0x11, 0x60, 0x00, 0x2b, 0x66, 0x11, 0x00, 0x00, 0x19, 0x4c, 0x71, 0x00, 0x67, 0xa6, 0x30, 0xfc, 0x30, 0xb7, 0x30, 0xde, - 0xd4, 0x20, 0x05, 0x06, 0x38, 0x17, 0x49, 0x2f, 0xf9, 0xe4, 0x2f, 0xa9, 0x55, 0x00, 0x56, 0x75, 0x2e, 0x21, 0x69, 0x2f, 0xad, 0x61, 0x46, 0x1d, - 0x3b, 0x2f, 0xd6, 0xa3, 0x4e, 0x33, 0x72, 0x48, 0x11, 0x4e, 0x00, 0x79, 0x03, 0x6b, 0x21, 0xdf, 0xff, 0xa3, 0xf0, 0x77, 0x64, 0x4e, 0xb3, 0x6c, - 0x00, 0x27, 0x28, 0x97, 0x3e, 0xb1, 0xae, 0x04, 0xff, 0xba, 0x4f, 0x4f, 0x17, 0x75, 0xc0, 0xfd, 0x05, 0xbe, 0xb7, 0xf1, 0x77, 0x4f, 0xde, 0x45, - 0x8f, 0x59, 0x8f, 0x61, 0x2c, 0x93, 0x04, 0xfe, 0x3b, 0x00, 0xf0, 0x7f, 0x04, 0xff, 0xc3, 0x1c, 0x04, 0x4e, 0xb0, 0x65, 0x30, 0x57, 0x06, 0x78, - 0x15, 0x00, 0x00, 0x00, 0xd9, 0xb3, 0xb0, 0xc6, 0xdc, 0xc2, 0xc8, 0xb9, 0xbd, 0x06, 0x78, 0x17, 0x4f, 0x29, 0x83, 0x3f, 0x99, 0xf3, 0x81, 0x06, - 0x72, 0x7f, 0x64, 0x2a, 0x13, 0x1c, 0x20, 0x00, 0x4c, 0x2f, 0x33, 0x3f, 0x13, 0x05, 0x1b, 0xa3, 0x12, 0x04, 0x11, 0x3e, 0x04, 0x41, 0x28, 0x17, - 0x3e, 0x04, 0x47, 0x28, 0x1f, 0x41, 0x30, 0x28, 0x19, 0x20, 0x00, 0x23, 0x04, 0x43, 0x20, 0x13, 0x5b, 0x38, 0x28, 0x23, 0x30, 0x28, 0x35, 0x07, - 0x34, 0xff, 0x20, 0x04, 0x84, 0xff, 0x06, 0xf5, 0x7f, 0x80, 0x10, 0x06, 0xf0, 0x7f, 0x12, 0x05, 0x13, 0x0c, 0x14, 0x14, 0x12, 0x00, 0x12, 0x0b, - 0x14, 0x02, 0x05, 0x12, 0x12, 0x12, 0x04, 0x12, 0xf2, 0x2a, 0x3f, 0x12, 0x2b, 0x2d, 0x4c, 0xad, 0x00, 0x30, 0xe5, 0x30, 0xe1, 0x30, 0xf3, 0x30, - 0xe9, 0x8b, 0x28, 0x1d, 0xaf, 0x30, 0xbd, 0x06, 0x08, 0x1b, 0x4b, 0x27, 0xef, 0x3f, 0xa3, 0x47, 0x6e, 0x4f, 0xff, 0x61, 0x00, 0x6b, 0x2e, 0x39, - 0x34, 0x19, 0x3b, 0x31, 0xda, 0x50, 0x1b, 0x50, 0x1d, 0x65, 0x2b, 0x19, 0x56, 0xa7, 0x6e, 0x03, 0xcf, 0xcf, 0x56, 0x8f, 0x46, 0xfd, 0x6c, 0x00, - 0xe9, 0x4b, 0xa7, 0x78, 0x15, 0x3e, 0xb7, 0x50, 0x99, 0x70, 0x69, 0x06, 0x40, 0xff, 0x06, 0xf1, 0x7f, 0x0d, 0x90, 0x7f, 0x48, 0x5c, 0x73, 0x7c, - 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0x34, 0xd0, 0x58, 0xba, 0x7d, 0x18, 0xb7, 0x8c, 0xc1, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x1a, 0x04, 0x4e, - 0xaa, 0x27, 0xff, 0x35, 0x28, 0x13, 0x3b, 0x48, 0x05, 0x3a, 0x28, 0x25, 0x3e, 0xe0, 0x04, 0xe8, 0x0b, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, - 0x13, 0x0a, 0x14, 0x04, 0x08, 0x00, 0x07, 0x13, 0x13, 0x06, 0x07, 0x05, 0x0a, 0x13, 0x02, 0x13, 0x13, 0x13, 0x48, 0x2b, 0xfd, 0x28, 0x17, 0x1b, - 0x00, 0x4c, 0xa2, 0x30, 0xcf, 0x30, 0xd9, 0x30, 0xca, 0xa4, 0x28, 0x19, 0xde, 0x28, 0x19, 0xde, 0x5d, 0x05, 0xfd, 0x37, 0x41, 0x00, 0x1d, 0x68, - 0x00, 0x76, 0x4e, 0x9f, 0x3b, 0x0b, 0xbb, 0x2d, 0xc5, 0x04, 0x4b, 0x1f, 0xef, 0xff, 0xff, 0x05, 0x50, 0x65, 0x08, 0x90, 0x7f, 0x49, 0x49, 0x87, - 0x39, 0x6f, 0x05, 0x71, 0x71, 0x00, 0x10, 0x7f, 0xb0, 0x3d, 0x07, 0x73, 0x89, 0x95, 0x05, 0xd1, 0x91, 0x65, 0x59, 0x70, 0x51, 0x02, 0x9b, 0x5c, - 0xea, 0x81, 0xbb, 0x6c, 0x06, 0x58, 0x1d, 0x44, 0x01, 0xc5, 0xa0, 0xbc, 0x9c, 0xb0, 0xc8, 0xb9, 0x06, 0x78, 0x17, 0xb4, 0x07, 0x12, 0x7f, 0x6c, - 0x24, 0x01, 0x06, 0x91, 0xff, 0x10, 0x48, 0x0f, 0x3d, 0x04, 0x44, 0x34, 0x28, 0x0f, 0x3a, 0x04, 0x38, 0x28, 0x21, 0x20, 0x00, 0x45, 0x3e, 0x28, - 0x1b, 0x42, 0x04, 0x40, 0x28, 0x1f, 0x32, 0x28, 0x2b, 0xc0, 0x0c, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x14, 0x01, 0x01, 0x01, 0x05, 0x03, 0x00, - 0x14, 0x14, 0x01, 0x05, 0x01, 0x01, 0x14, 0x14, 0x02, 0x14, 0x14, 0xbb, 0x2a, 0x2d, 0x0e, 0x00, 0x3f, 0xff, 0x01, 0x20, 0x13, 0x12, 0x28, 0x36, - 0x01, 0x01, 0x10, 0x13, 0x0f, 0x80, 0x20, 0x05, 0x01, 0x01, 0x02, 0x0b, 0x08, 0x05, 0x09, 0x00, 0x08, 0x02, 0x02, 0x07, 0x08, 0x06, 0x0b, 0x02, - 0x00, 0x02, 0x02, 0x02, 0x03, 0x10, 0x0b, 0x09, 0x0d, 0x00, 0x0b, 0x03, 0x03, 0x09, 0x0b, 0x0c, 0x10, 0x03, 0x00, 0x03, 0x03, 0x03, 0x04, 0x06, - 0x06, 0x02, 0x06, 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, 0x03, 0x40, 0x06, 0x05, 0x00, 0x0f, 0x02, 0x08, 0x02, 0x05, 0x05, 0x05, 0x08, 0x10, 0x01, - 0x0b, 0x0f, 0x20, 0x06, 0x05, 0x06, 0x11, 0x10, 0x00, 0x0a, 0x12, 0x10, 0x06, 0x06, 0x0a, 0x10, 0x0d, 0x00, 0x11, 0x06, 0x06, 0x06, 0x06, 0x07, - 0x04, 0x11, 0x00, 0x12, 0x11, 0x11, 0x07, 0x07, 0x14, 0x11, 0x14, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, 0x08, 0x03, 0x0c, 0x00, 0x11, 0x0c, 0x0c, - 0x08, 0x08, 0x13, 0x0c, 0x13, 0x00, 0x03, 0x08, 0x08, 0x08, 0x08, 0x09, 0x0e, 0x09, 0x00, 0x0b, 0x0a, 0x09, 0x09, 0x09, 0x0c, 0x09, 0x07, 0x40, - 0x0e, 0x20, 0x06, 0x09, 0x0a, 0x0d, 0x0e, 0x0e, 0x0f, 0x00, 0x0e, 0x0a, 0x0a, 0x0e, 0x0e, 0x08, 0x0d, 0x0a, 0x00, 0x0a, 0x0a, 0x0a, 0x0b, 0x12, - 0x0f, 0x0f, 0x10, 0x00, 0x0f, 0x0b, 0x0b, 0x0f, 0x0f, 0x0a, 0x12, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x0c, 0x08, 0x0a, 0x07, 0x0b, 0x00, 0x0a, 0x0c, - 0x0c, 0x03, 0x0a, 0x10, 0x08, 0x0c, 0x04, 0x0c, 0x0c, 0x0c, 0x0d, 0x09, 0x20, 0x89, 0x01, 0x0d, 0x00, 0x0d, 0x02, 0x03, 0x11, 0x09, 0x0d, 0x0d, - 0x0d, 0x00, 0x0d, 0x0e, 0x14, 0x05, 0x14, 0x04, 0x02, 0x0e, 0x01, 0x0e, 0x11, 0x04, 0x0e, 0x14, 0x0e, 0x0e, 0x20, 0x4b, 0x80, 0x20, 0xc1, 0x01, - 0x06, 0x0f, 0x0f, 0x12, 0x02, 0x12, 0x14, 0x02, 0x0f, 0x0f, 0x20, 0x4b, 0x0c, 0x20, 0x23, 0x0d, 0x10, 0x00, 0x10, 0x0d, 0x0d, 0x09, 0x0c, 0x10, - 0x10, 0x10, 0x48, 0x10, 0x20, 0x9a, 0x03, 0x07, 0x20, 0xa1, 0x05, 0x12, 0x04, 0x00, 0x07, 0x11, 0x11, 0x11, 0x11, 0x12, 0x05, 0x13, 0x00, 0x0c, - 0x14, 0x14, 0x12, 0x12, 0x0b, 0x14, 0x02, 0x06, 0x05, 0x12, 0x12, 0x12, 0x12, 0xf9, 0x5f, 0xf1, 0x57, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0xe4, 0x00, 0x11, 0x1a, 0x00, 0x00, 0x30, 0x01, 0x4d, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xbd, 0x22, 0xab, 0x01, 0x00, 0x00, 0x00, 0x02, 0x4d, 0xa4, 0x30, 0xfc, 0x30, 0xeb, 0x08, - 0x30, 0xfb, 0x30, 0xc9, 0x20, 0x03, 0xd5, 0x30, 0xe9, 0x04, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0x05, 0xb8, 0x29, 0xce, 0x00, 0x01, 0x6c, 0x00, 0x65, - 0x00, 0x2d, 0x00, 0x64, 0x40, 0x05, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x63, 0x20, 0x13, 0x10, 0x0d, 0x50, 0x7f, 0x49, - 0x00, 0x73, 0x22, 0x01, 0x61, 0x2b, 0x00, 0x20, 0x42, 0x01, 0x20, 0xa2, 0x01, 0x69, 0x22, 0x09, 0x05, 0x1a, 0xb3, 0x00, 0xd5, 0x6c, 0x70, 0x51, - 0x7f, 0x89, 0x9b, 0x5c, 0x08, 0x27, 0x59, 0x3a, 0x53, 0x06, 0x3b, 0x21, 0x7c, 0xc7, 0xdc, 0x01, 0xb4, 0x04, 0xd5, 0x91, 0xb7, 0xa4, 0xc2, 0x06, - 0x5b, 0x9f, 0x8a, 0x07, 0x11, 0xff, 0x6c, 0x00, 0x68, 0x00, 0x21, 0xff, 0xe7, 0x05, 0x41, 0xfd, 0x00, 0x00, 0x00, 0x18, 0x04, 0x3b, 0x04, 0x4c, - 0x04, 0x2d, 0x08, 0x00, 0x34, 0x04, 0x35, 0x20, 0x05, 0x24, 0x04, 0x40, 0x01, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x41, 0x04, 0x10, 0x15, 0x74, 0xff, - 0x80, 0x06, 0xf6, 0xff, 0x01, 0x0c, 0x0e, 0x0d, 0x0e, 0x0e, 0x01, 0x00, 0x01, 0x0d, 0x0e, 0x07, 0x0c, 0x01, 0x01, 0x01, 0x45, 0x01, 0x58, 0x17, - 0x03, 0x4d, 0xa2, 0x28, 0x15, 0xb6, 0x05, 0xe8, 0x0b, 0xae, 0xbf, 0xff, 0x41, 0x28, 0x17, 0x73, 0x28, 0x0b, 0x05, 0x98, 0x09, 0x07, 0xd0, 0x7f, - 0x45, 0xb7, 0x60, 0xff, 0x73, 0x27, 0x1f, 0x06, 0xb1, 0x7f, 0x7a, 0x05, 0x67, 0x87, 0x00, 0x91, 0xff, 0x06, 0x50, 0x7f, 0x00, 0x3f, 0x96, 0x14, - 0x5c, 0x28, 0x84, 0xaf, 0x65, 0x86, 0x06, 0x78, 0x17, 0x4c, 0xc5, 0x90, 0xc7, 0x06, 0x78, 0x13, 0x72, 0x7f, 0x7a, 0xd5, 0x42, 0x7f, 0x06, 0xb3, - 0xff, 0xe1, 0x06, 0x81, 0xff, 0x2d, 0x48, 0x17, 0x37, 0x28, 0x0d, 0xe0, 0x05, 0x98, 0x0b, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x01, - 0x01, 0x08, 0x01, 0x02, 0x01, 0x02, 0x02, 0x08, 0x01, 0x19, 0x20, 0x05, 0x02, 0x00, 0x02, 0x8c, 0x22, 0x81, 0x05, 0x00, 0x00, 0x04, 0x80, 0x28, - 0x17, 0xad, 0x30, 0xc6, 0x30, 0xfc, 0x30, 0xcc, 0x82, 0x06, 0x68, 0x19, 0x41, 0x00, 0x71, 0x00, 0x75, 0x2e, 0x1b, 0x74, 0xba, 0x2f, 0xa7, 0x69, - 0x2f, 0xa9, 0x05, 0xf8, 0x1d, 0x07, 0xb0, 0x7f, 0x6e, 0x2f, 0x23, 0x65, 0xf0, 0x2f, 0xad, 0x06, 0xb0, 0x7f, 0x05, 0xf8, 0x1b, 0x06, 0xf0, 0x7f, - 0x3f, 0x96, 0xfa, 0x57, 0x20, 0x66, 0x57, 0x06, 0x78, 0x15, 0x00, 0x00, 0x44, 0xc5, 0xa4, 0x1a, 0xd0, 0x50, 0xd1, 0x06, 0x98, 0x17, 0xf2, 0x7f, - 0xeb, 0x06, 0x83, 0xff, 0xe2, 0x80, 0x06, 0x42, 0x7f, 0x10, 0x04, 0x3a, 0x04, 0x32, 0x04, 0x38, 0x2b, 0x04, 0x42, 0x28, 0x19, 0x3d, 0x20, 0x07, - 0x4f, 0x05, 0xe8, 0x1d, 0x0f, 0xb4, 0xff, 0x80, 0x10, 0x06, 0x30, 0xff, 0x03, 0x02, 0x02, 0x01, 0x04, 0x03, 0x03, 0x04, 0x03, 0x01, 0x03, 0x01, - 0x02, 0x20, 0x06, 0x03, 0xe2, 0x00, 0x1f, 0x96, 0xff, 0x00, 0x00, 0x05, 0x4d, 0xaa, 0x80, 0x28, 0x13, 0xd9, 0x30, 0xeb, 0x30, 0xcb, 0x30, 0xe5, - 0xa8, 0x06, 0x48, 0x19, 0x41, 0x28, 0x15, 0x76, 0x2f, 0xab, 0x72, 0x00, 0x67, 0xde, 0x06, 0x28, 0x15, 0x0f, 0x30, 0x7f, 0x6c, 0x61, 0x7f, 0x06, - 0x38, 0x15, 0xb1, 0xff, 0x06, 0x50, 0x7f, 0x65, 0x04, 0x59, 0x17, 0x5f, 0x85, 0x6d, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x03, 0xa0, 0xbc, 0x74, 0xb9, - 0x74, 0xb2, 0x06, 0x98, 0x17, 0x07, 0x33, 0x7f, 0x51, 0xe9, 0x06, 0x82, 0x7f, 0x1e, 0x28, 0x15, 0x35, 0x04, 0x40, 0x28, 0x13, 0x78, 0x4c, 0x05, - 0xe8, 0x11, 0x10, 0x07, 0x74, 0xff, 0x0e, 0xd6, 0x7f, 0x28, 0x13, 0x02, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x0f, 0x30, 0x06, 0x04, 0x8d, - 0x00, 0x20, 0x31, 0x02, 0x00, 0x00, 0x06, 0x4d, 0xd0, 0x02, 0x30, 0xb9, 0x30, 0xfb, 0x30, 0xce, 0x28, 0x19, 0xde, 0x02, 0x30, 0xf3, 0x30, 0xc7, - 0x30, 0xa3, 0x05, 0xe8, 0x1d, 0x4c, 0x08, 0x00, 0x6f, 0x00, 0x77, 0x48, 0x17, 0x20, 0x00, 0x4e, 0x88, 0x20, 0x0b, 0x72, 0x00, 0x6d, 0x4f, 0x39, - 0x64, 0x00, 0x79, 0xa8, 0x05, 0x4f, 0xb9, 0x42, 0x2f, 0xa7, 0x73, 0x20, 0x01, 0x65, 0x00, 0x2d, 0xee, 0xe0, 0x7f, 0x3f, 0xbb, 0x0d, 0x90, 0x7f, - 0x61, 0x00, 0x01, 0x7f, 0x05, 0x5f, 0xbb, 0x31, 0x7f, 0x6a, 0xa0, 0x00, 0x20, 0x7d, 0xed, 0x05, 0x6e, 0x39, 0x0b, 0x4e, 0xfa, 0x8b, 0xfc, 0x10, - 0x66, 0x95, 0x5e, 0x06, 0x78, 0x19, 0x14, 0xbc, 0xa4, 0xc2, 0x00, 0x78, 0xb1, 0x74, 0xb9, 0xdd, 0xb9, 0x14, 0xb5, 0xad, 0x06, 0x3b, 0x97, 0x4c, - 0x2f, 0xa1, 0x61, 0x2b, 0x93, 0x00, 0x12, 0xfd, 0xeb, 0x05, 0x83, 0x7f, 0x10, 0x69, 0x00, 0x78, 0x06, 0x82, 0x7f, 0x1d, 0x04, 0x38, 0x04, 0x55, - 0x36, 0x28, 0x15, 0x4f, 0x20, 0x01, 0x20, 0x20, 0x0d, 0x3e, 0x28, 0x23, 0x15, 0x3c, 0x04, 0x30, 0x28, 0x27, 0x34, 0x20, 0x19, 0x4f, 0x05, 0x08, - 0x2b, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x10, 0x04, 0x03, 0x05, 0x05, 0x02, 0x05, 0x05, 0x0e, 0x05, 0x0d, 0x10, 0x30, 0x07, - 0xf9, 0x00, 0x22, 0xbf, 0xff, 0x00, 0x00, 0x07, 0x4d, 0xd6, 0x80, 0x28, 0x11, 0xb4, 0x30, 0xfc, 0x30, 0xcb, 0x30, 0xe5, 0xd6, 0x05, 0xe8, 0x11, - 0x77, 0x97, 0x75, 0x4f, 0xab, 0x75, 0x05, 0xa8, 0x0b, 0xd8, 0x17, 0x6f, 0xbf, 0x60, 0x81, 0x6f, 0x06, 0x4f, 0xb1, 0xd0, 0xff, 0x06, 0x31, 0x7f, - 0x39, 0x8b, 0x70, 0xfd, 0x06, 0x1f, 0xaf, 0xa0, 0x90, 0x7f, 0xf1, 0x06, 0x2e, 0x2d, 0x00, 0x00, 0xc3, 0x52, 0x6e, 0x10, 0x82, 0x2c, 0x7b, 0x06, - 0x78, 0x15, 0x00, 0x00, 0x80, 0xbd, 0x03, 0x74, 0xb9, 0xe0, 0xac, 0x74, 0xb2, 0x06, 0x50, 0x7d, 0xd2, 0xff, 0xc4, 0x05, 0xb8, 0x0f, 0x00, 0x12, - 0x7f, 0x6e, 0x00, 0x68, 0x06, 0x22, 0x7f, 0x11, 0x04, 0x5e, 0x43, 0x28, 0x09, 0x33, 0x20, 0x05, 0x05, 0x78, 0x09, 0x07, 0xf4, 0xff, 0x10, 0x0e, - 0xd0, 0x7f, 0x06, 0x80, 0x28, 0x14, 0x06, 0x06, 0x06, 0x06, 0x03, 0x06, 0x03, 0x80, 0x40, 0x07, 0xa6, 0x21, 0x95, 0x03, 0x00, 0x00, 0x08, 0xab, - 0x48, 0x17, 0xbf, 0x06, 0xc8, 0x17, 0x72, 0x2f, 0x99, 0x74, 0x20, 0x01, 0x3f, 0xa5, 0xbf, 0x06, 0x38, 0x17, 0x72, 0x2f, 0xab, 0x30, 0x7d, 0x06, - 0x38, 0x15, 0x07, 0xf0, 0x7f, 0x06, 0x38, 0x17, 0x71, 0x7f, 0x80, 0x06, 0x58, 0x17, 0x03, 0x5e, 0x17, 0x52, 0x54, 0x58, 0x3c, 0x40, 0x5c, 0x06, - 0x78, 0x19, 0x0c, 0xbe, 0x74, 0xb9, 0xc0, 0xd0, 0xe0, 0x06, 0xb8, 0x17, 0x07, 0x72, 0xff, 0x06, 0x78, 0x17, 0x40, 0x04, 0x35, 0x04, 0x42, 0x2e, - 0x04, 0x30, 0x28, 0x17, 0x4c, 0x05, 0xe8, 0x13, 0x07, 0x74, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x07, 0x00, 0x04, 0x06, 0x04, 0x07, 0x07, 0x07, 0x07, - 0x04, 0x20, 0x07, 0x02, 0x40, 0x07, 0x36, 0x22, 0xce, 0xfe, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xb5, 0x30, 0xf3, 0x30, 0xc8, 0xd7, 0x28, 0x1b, 0x06, - 0x7c, 0xaf, 0x43, 0x2f, 0xa1, 0x6e, 0x28, 0x17, 0x37, 0x9d, 0x10, 0x06, 0xd0, 0x7f, 0x43, 0x6f, 0x0e, 0x40, 0x7f, 0x2d, 0x4e, 0x2e, 0x59, 0x06, - 0x78, 0x13, 0x3f, 0xff, 0x03, 0xc1, 0xc0, 0xb8, 0xd2, 0x74, 0xb9, 0x06, 0x78, 0x15, 0x0f, 0x12, 0x7f, 0x57, 0x26, 0x28, 0x15, 0x3d, 0x28, 0x17, - 0x40, 0x06, 0x28, 0x13, 0x10, 0x07, 0xd4, 0xff, 0x0e, 0x56, 0x7f, 0x00, 0x08, 0x06, 0x07, 0x06, 0x08, 0x08, 0x08, 0x08, 0x10, 0x05, 0x08, 0x17, - 0x40, 0x07, 0x10, 0x22, 0x5a, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x4d, 0xb7, 0x30, 0xe3, 0x28, 0x19, 0x00, 0xd1, 0x30, 0xfc, 0x30, 0xcb, 0x30, 0xe5, - 0x30, 0x15, 0xfb, 0x30, 0xa2, 0x28, 0x23, 0xc7, 0x28, 0x2b, 0xcc, 0x05, 0x68, 0x29, 0x44, 0x43, 0x4c, 0x25, 0x6d, 0x00, 0x70, 0x8f, 0xb1, 0x2d, - 0x00, 0x5d, 0x41, 0x2f, 0xc3, 0x64, 0x48, 0x2f, 0x05, 0x1f, 0xc1, 0x10, 0x07, 0xb0, 0x7f, 0xf1, 0x2e, 0xb5, 0x88, 0xb1, 0xfd, 0x61, 0x00, 0x73, - 0x05, 0x0f, 0xc2, 0x99, 0x99, 0xdf, 0x01, 0x69, 0x2d, 0x00, 0x3f, 0x96, 0x7b, 0x76, 0x06, 0x58, 0x1d, 0x00, 0xf9, 0xc0, 0x0c, 0xd3, 0x74, 0xb2, - 0x44, 0xc5, 0x0d, 0x74, 0xb9, 0x74, 0xb3, 0x06, 0x5b, 0x97, 0x00, 0xf3, 0x7f, 0x6e, 0x05, 0x83, 0xff, 0x60, 0x6e, 0x44, 0x0b, 0x05, 0xd2, 0x01, - 0x28, 0x04, 0x30, 0x04, 0x3c, 0x20, 0x04, 0x3f, 0x20, 0x05, 0x3d, 0x04, 0x4c, 0x04, 0x2d, 0x28, 0x00, 0x10, 0x28, 0x21, 0x34, 0x48, 0x2b, 0x3d, - 0x04, 0x4b, 0xe0, 0x05, 0x28, 0x2b, 0x10, 0x0f, 0xb4, 0xff, 0x06, 0x36, 0xff, 0x09, 0x07, 0x08, 0x07, 0x09, 0x02, 0x09, 0x09, 0x09, 0x06, 0x09, - 0x18, 0x40, 0x07, 0xd1, 0x00, 0x22, 0x1a, 0x03, 0x00, 0x00, 0x0b, 0x4d, 0xb3, 0x8d, 0x28, 0x07, 0xb7, 0x30, 0xab, 0x05, 0x68, 0x05, 0x00, 0x3f, - 0xaf, 0x6f, 0x2f, 0xab, 0x07, 0x73, 0x00, 0x69, 0x00, 0x63, 0x28, 0x1f, 0x06, 0x90, 0x7f, 0x06, 0x5f, 0xad, 0x16, 0x00, 0x00, 0x4b, 0x80, 0xff, - 0x6b, 0x06, 0xc0, 0xff, 0x06, 0x91, 0x7f, 0xf3, 0xa8, 0x2e, 0xab, 0x63, 0x2e, 0xb5, 0x67, 0x06, 0x41, 0xff, 0xd1, 0x79, 0x7f, 0x18, 0x89, 0x09, - 0x56, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x54, 0xcf, 0x74, 0x1e, 0xb9, 0xa4, 0xc2, 0x06, 0x73, 0x7d, 0x07, 0x71, 0xff, 0x33, 0x7f, 0x06, 0x51, 0xff, - 0x1a, 0x20, 0x04, 0x3e, 0x28, 0x09, 0x41, 0x04, 0x38, 0x04, 0x3a, 0xe0, 0x28, 0x21, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x0a, 0x08, 0x09, - 0x0e, 0x0a, 0x01, 0x0a, 0x0a, 0x0a, 0x07, 0x0a, 0x08, 0x08, 0x30, 0x07, 0x00, 0xcf, 0x1d, 0x36, 0x06, 0x00, 0x00, 0x0c, 0x4d, 0x04, 0xd5, 0x30, - 0xe9, 0x30, 0xf3, 0x28, 0x19, 0xe5, 0x30, 0x15, 0xfb, 0x30, 0xb3, 0x20, 0x09, 0xc6, 0x05, 0xe8, 0x21, 0x46, 0x2f, 0x9b, 0xb8, 0x3c, 0x29, 0x63, - 0x2f, 0xb7, 0x3f, 0xab, 0x38, 0x27, 0x6d, 0x00, 0x74, 0x22, 0x00, 0xe9, 0x10, 0x06, 0x00, 0x7f, 0x61, 0x00, 0x20, 0x49, 0xa5, 0x6e, 0xb5, 0x21, - 0x7d, 0x65, 0x05, 0x89, 0xa3, 0x91, 0xff, 0x6f, 0x80, 0x7f, 0x64, 0x2e, 0xc1, 0x60, 0x64, 0x2a, 0x2f, 0x05, 0x3f, 0xbd, 0x17, 0x5f, 0x17, 0x67, - 0xc0, 0x04, 0x4e, 0x54, 0x5b, 0xf0, 0x6c, 0x06, 0x58, 0x1b, 0x04, 0xd5, 0x00, 0x91, 0xb7, 0x88, 0xc2, 0x69, 0xcf, 0x4c, 0xd1, 0xe8, 0x06, 0x5b, - 0x99, 0x07, 0x93, 0x7f, 0x06, 0x51, 0xff, 0x24, 0x28, 0x15, 0x30, 0x04, 0x3d, 0x08, 0x04, 0x48, 0x04, 0x2d, 0x48, 0x23, 0x3d, 0x04, 0x42, 0x38, - 0x04, 0x35, 0x05, 0xa8, 0x1f, 0x10, 0x07, 0x94, 0xff, 0x0e, 0x56, 0x7f, 0x0b, 0x09, 0x0a, 0x00, 0x09, 0x0b, 0x0b, 0x0b, 0x0b, 0x09, 0x0b, 0x16, - 0x88, 0x40, 0x07, 0x97, 0x21, 0x47, 0x2b, 0x1d, 0x0d, 0x4d, 0xaa, 0x08, 0x30, 0xfc, 0x30, 0xc8, 0x28, 0x13, 0xce, 0x30, 0xeb, 0x22, 0x30, 0xde, - 0x28, 0x21, 0xc7, 0x30, 0xa3, 0x05, 0xc8, 0x19, 0x55, 0x28, 0x00, 0x70, 0x20, 0x01, 0x65, 0x2f, 0xb3, 0x20, 0x00, 0x4e, 0xa2, 0x4f, 0xbb, 0x6d, - 0x48, 0x27, 0x64, 0x00, 0x79, 0x05, 0x4f, 0xc1, 0x48, 0xab, 0x2f, 0xa5, 0x75, 0x47, 0x09, 0x2d, 0xe0, 0x7f, 0x69, 0x2e, 0xc3, 0x0d, 0x10, 0x7f, - 0x1f, 0x41, 0x00, 0x6c, 0x29, 0x85, 0x38, 0x13, 0xf0, 0xfd, 0x05, 0x5f, 0xbd, 0x00, 0x70, 0x7f, 0x40, 0xed, 0x05, 0x6e, 0xbd, 0x0a, 0x4e, 0xfa, - 0x8b, 0xfc, 0x66, 0x30, 0x95, 0x5e, 0x06, 0x58, 0x15, 0x26, 0x97, 0xc6, 0xb8, 0xd2, 0x78, 0x01, 0xb1, 0x74, 0xb9, 0xdd, 0xb9, 0x14, 0xb5, 0x06, - 0x38, 0x19, 0x5b, 0x48, 0x2e, 0xaf, 0x6f, 0x2f, 0xab, 0x00, 0x12, 0xfd, 0xeb, 0x06, 0xc1, 0xff, 0x05, 0x72, 0x7f, 0x45, 0x12, 0x28, 0x05, 0x40, - 0x04, 0x45, 0x28, 0x19, 0x4f, 0x20, 0x01, 0x11, 0x20, 0x00, 0x1d, 0x28, 0x1b, 0x40, 0x04, 0x3c, 0x48, 0x2b, 0x1c, 0x34, 0x04, 0x38, 0x20, 0x15, - 0x0c, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x1a, 0x00, 0x0d, 0x0c, 0x02, 0x02, 0x0c, 0x0c, 0x0c, 0x02, 0x21, 0x04, 0x1a, 0x20, 0x05, 0x0c, - 0x28, 0x23, 0xc8, 0x2f, 0xff, 0x10, 0x0e, 0x4d, 0xe9, 0x28, 0x0b, 0xb0, 0x30, 0xc9, 0x30, 0x10, 0xc3, 0x30, 0xaf, 0x28, 0x1d, 0xeb, 0x30, 0xb7, - 0x30, 0x6a, 0xe8, 0x28, 0x1d, 0x05, 0x9d, 0x37, 0x4c, 0x4f, 0xad, 0x67, 0x27, 0x9b, 0x65, 0xa8, 0x4e, 0x23, 0x63, 0x2f, 0xb3, 0x52, 0x2f, 0xb3, - 0x75, 0x00, 0x73, 0xad, 0x20, 0x01, 0x69, 0x26, 0xb5, 0x6c, 0x4e, 0xc3, 0x10, 0x04, 0x90, 0x7f, 0x69, 0x61, 0x7f, 0xba, 0x5f, 0xa3, 0x63, 0x2f, - 0xbd, 0x51, 0x81, 0x51, 0x7f, 0x67, 0x28, 0x37, 0x69, 0xed, 0x4f, 0xc5, 0x04, 0x59, 0x25, 0x00, 0x71, 0xff, 0x73, 0x2e, 0xbd, 0x31, 0xfb, 0xf3, - 0x04, 0xa1, 0xfb, 0x80, 0x3f, 0xff, 0x17, 0x67, 0x3c, 0x68, 0x1a, 0x59, 0x4b, 0x00, 0x51, 0x2d, 0x00, 0x81, 0x9c, 0x7f, 0x89, 0x38, 0x40, 0x6c, - 0x05, 0xf8, 0x1f, 0x91, 0xb7, 0xf8, 0xad, 0xc4, 0xb3, 0x00, 0x6c, 0xd0, 0xe8, 0xb8, 0xdc, 0xc2, 0xa9, 0xc6, 0xda, 0x06, 0x18, 0x99, 0x07, 0xf3, - 0x7f, 0x71, 0x44, 0x09, 0xb2, 0x81, 0x6c, 0x2f, 0x49, 0xe3, 0xd5, 0x2f, 0x45, 0x04, 0x5f, 0xc3, 0x1b, 0x48, 0x01, 0x33, 0x28, 0x1d, 0x34, 0x28, - 0x11, 0x00, 0x3a, 0x04, 0x2d, 0x00, 0x20, 0x04, 0x43, 0x04, 0x41, 0x41, 0x20, 0x01, 0x38, 0x04, 0x3b, 0x04, 0x4c, 0x28, 0x25, 0x70, 0x3d, 0x04, - 0xc8, 0x19, 0x10, 0x07, 0x14, 0xff, 0x0e, 0xd6, 0x7f, 0x0d, 0x0d, 0x0f, 0x0f, 0x00, 0x10, 0x0f, 0x0d, 0x0d, 0x10, 0x0f, 0x09, 0x0d, 0x40, 0x0d, - 0x20, 0x01, 0x02, 0x1f, 0xc1, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x4d, 0xea, 0x30, 0xe0, 0x30, 0xfc, 0x30, 0x6f, 0xb6, 0x05, 0xc8, 0x0b, 0xf6, 0x97, - 0x6d, 0x68, 0x07, 0x36, 0xa1, 0x10, 0x06, 0x70, 0x7f, 0x51, 0x7d, 0xd4, 0x04, 0x75, 0x7d, 0x00, 0xba, 0x17, 0x65, 0x60, 0x7f, 0xed, 0x06, 0x21, - 0xfd, 0x00, 0x00, 0x03, 0x29, 0x52, 0x46, 0x7a, 0x5e, 0x8d, 0x05, 0xf8, 0x0d, 0x9f, 0xff, 0x03, 0xac, 0xb9, 0x34, 0xbb, 0xc1, 0xc7, 0x06, 0x53, - 0x7b, 0x07, 0x93, 0x7f, 0xd5, 0x73, 0xfd, 0x06, 0x12, 0x7f, 0x1b, 0x27, 0xff, 0x3c, 0x28, 0x09, 0x37, 0x28, 0x19, 0xe0, 0x04, 0xd8, 0x01, 0x10, - 0x08, 0xd4, 0xff, 0x0e, 0x76, 0x7f, 0x0e, 0x0e, 0x10, 0x10, 0x0f, 0x00, 0x10, 0x0e, 0x0e, 0x11, 0x10, 0x0a, 0x0e, 0x0e, 0x88, 0x20, 0x01, 0x97, - 0x20, 0xe4, 0x2f, 0xff, 0x10, 0x4d, 0xed, 0x2c, 0x30, 0xec, 0x28, 0x17, 0xcc, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6f, 0x00, 0x5d, 0x72, 0x20, 0x01, - 0x61, 0x4e, 0xb7, 0x04, 0x5e, 0x93, 0x08, 0xf0, 0x7f, 0x74, 0x2d, 0x11, 0x5d, 0x72, 0x6f, 0xb7, 0x65, 0x05, 0xe9, 0x1b, 0x51, 0x7f, 0x30, 0x75, - 0x61, 0x06, 0xa1, 0xff, 0x84, 0x06, 0x90, 0x7f, 0x1b, 0x6d, 0x97, 0x67, 0x06, 0x98, 0x15, 0x00, 0x00, 0x0d, 0x5c, 0xb8, 0x0c, 0xb8, 0x06, 0x98, - 0x15, 0x92, 0x7f, 0x61, 0x06, 0x62, 0x81, 0x80, 0x07, 0x01, 0xff, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x30, 0x04, 0x45, 0x40, 0x28, 0x1f, 0x3d, 0x04, - 0x33, 0x28, 0x25, 0x4f, 0x05, 0xc8, 0x1d, 0xc0, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x0f, 0x0f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0f, 0x0f, - 0x12, 0x11, 0x0b, 0x0f, 0x0f, 0x20, 0x01, 0x10, 0xed, 0x22, 0x63, 0x2b, 0x1d, 0x11, 0x4d, 0xdf, 0x30, 0x01, 0xc7, 0x30, 0xa3, 0x30, 0xfb, 0x30, - 0xd4, 0x28, 0x1f, 0x6a, 0xcd, 0x28, 0x21, 0x05, 0xff, 0xb0, 0x4d, 0x2f, 0xaf, 0x64, 0x2f, 0xb3, 0x2d, 0x0a, 0x00, 0x50, 0x00, 0x79, 0x28, 0x21, - 0xe9, 0x2f, 0xb3, 0xe9, 0xa2, 0x2e, 0x43, 0x73, 0x10, 0x05, 0x80, 0x7f, 0x65, 0x00, 0x7a, 0x20, 0x01, 0x6f, 0xba, 0x28, 0x93, 0x69, 0x49, 0xa3, - 0x3d, 0xb5, 0x31, 0x8d, 0x69, 0x68, 0x2f, 0x65, 0xeb, 0x2e, 0x51, 0x04, 0xd0, 0x7f, 0x31, 0xff, 0x6f, 0x22, 0x05, 0xed, 0x2a, 0x1d, 0x70, 0x79, - 0xa0, 0x5a, 0x25, 0x6f, 0x05, 0x02, 0x07, 0x57, 0x53, 0xe8, 0x90, 0x2d, 0x00, 0x00, 0xd4, 0x6b, 0x29, 0x52, 0x5b, 0x72, 0xaf, 0x40, 0x65, 0x06, - 0x18, 0x21, 0xf8, 0xbb, 0x14, 0xb5, 0x3c, 0xd5, 0x0b, 0x08, 0xb8, 0x24, 0xb1, 0x06, 0x5b, 0x99, 0x5a, 0x2f, 0xab, 0x33, 0x81, 0x11, 0x2d, 0x00, - 0x46, 0x4b, 0x9d, 0x6e, 0x00, 0x6b, 0x4a, 0xa3, 0x71, 0x6a, 0x20, 0x07, 0x73, 0x93, 0x52, 0x05, 0x65, 0x00, 0xeb, 0x04, 0x2e, 0xcf, 0x6b, 0x4d, - 0x23, 0xf1, 0x51, 0xff, 0x20, 0xa2, 0x73, 0xe9, 0x4f, 0x3f, 0x05, 0x3f, 0xbd, 0x44, 0x2e, 0x28, 0x0b, 0x2d, 0x00, 0x1f, 0x28, 0x15, 0x40, 0x04, - 0x5c, 0x35, 0x28, 0x19, 0x35, 0x28, 0x1f, 0x10, 0x0d, 0xd4, 0xff, 0x0e, 0xd6, 0x7f, 0x10, 0x12, 0x00, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x1a, - 0x13, 0x00, 0x1a, 0x12, 0x10, 0x10, 0x10, 0x10, 0x01, 0x1f, 0x01, 0x05, 0x01, 0x00, 0x00, 0x12, 0x4d, 0xce, 0x28, 0x0b, 0x55, 0xeb, 0x28, 0x17, - 0xd1, 0x28, 0x1b, 0xc9, 0x28, 0x1f, 0xab, 0x28, 0x1f, 0xb5, 0x05, 0xb8, 0x1d, 0x4e, 0x4f, 0xaf, 0x34, 0x97, 0x50, 0x2f, 0xb3, 0x73, 0x28, 0x1f, - 0x45, 0x64, 0x2f, 0xb5, 0x2d, 0x00, 0x43, 0x2f, 0xc1, 0x6c, 0x4f, 0xc5, 0xd6, 0x04, 0xd8, 0x21, 0xf0, 0x7f, 0x20, 0x40, 0x7f, 0x20, 0x06, 0x80, - 0x7f, 0x06, 0xf0, 0xff, 0x73, 0xf7, 0x45, 0xa1, 0x39, 0xa9, 0x05, 0x51, 0x03, 0x51, 0xff, 0x74, 0x41, 0xf3, 0x52, 0x01, 0x50, 0x7f, 0xa0, 0x05, - 0x71, 0x83, 0x17, 0x48, 0x17, 0xa0, 0x52, 0x65, 0x67, 0x77, 0x10, 0x6d, 0xe1, 0x5c, 0x06, 0x18, 0x17, 0x78, 0xb1, 0x74, 0xb9, 0x00, 0x0c, 0xd3, - 0xdc, 0xb4, 0x7c, 0xce, 0x08, 0xb8, 0xe8, 0x06, 0x3f, 0x30, 0x33, 0x7f, 0x73, 0x81, 0x4e, 0x2f, 0xb3, 0x75, 0x00, 0x77, 0xbe, 0x27, 0xa1, 0x76, - 0x48, 0x21, 0x05, 0x33, 0x05, 0x91, 0xff, 0x38, 0x17, 0x06, 0x13, 0x81, 0x1d, 0x35, 0x04, 0x3e, 0x28, 0x11, 0x38, 0x19, 0x30, 0x28, 0x1f, 0x34, - 0x28, 0x1b, 0x17, 0x2d, 0x00, 0x1a, 0x20, 0x0b, 0x3b, 0x28, 0x25, 0x0e, 0x34, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x00, 0x11, 0x13, 0x14, 0x14, 0x14, - 0x14, 0x11, 0x11, 0x00, 0x14, 0x14, 0x0e, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x01, 0x24, 0x2d, 0x02, 0x00, 0x00, 0x13, 0x4d, 0x14, 0xda, 0x30, - 0xa4, 0x68, 0x11, 0xe9, 0x28, 0x1d, 0xed, 0x30, 0x76, 0xef, 0x48, 0x27, 0x05, 0x9d, 0x33, 0x38, 0x0d, 0x79, 0xa7, 0x8f, 0x38, 0x0b, 0x20, 0x3f, - 0x00, 0x4c, 0x2e, 0xbf, 0x5e, 0xaf, 0x10, 0x05, 0x30, 0x7f, 0x3c, 0x9d, 0x38, 0x07, 0x39, 0x91, 0x57, 0x6c, 0xe1, 0x81, 0x61, 0x05, 0x21, 0xff, - 0xed, 0x2e, 0x1b, 0x3d, 0x21, 0x70, 0x81, 0x80, 0x05, 0x90, 0x7d, 0x00, 0x00, 0x62, 0x53, 0xe6, 0x74, 0x14, 0x06, 0x5c, 0xb3, 0x6c, 0x30, 0x57, - 0x05, 0xf8, 0x11, 0x5f, 0xff, 0x98, 0x10, 0xd3, 0x74, 0xc7, 0x28, 0x15, 0xb7, 0xe8, 0xb8, 0x44, 0x17, 0xc5, 0x74, 0xb9, 0x06, 0x18, 0x19, 0x4c, - 0x48, 0x01, 0x3b, 0x8b, 0x38, 0x07, 0xff, 0x78, 0x0f, 0x5b, 0x1b, 0x05, 0x33, 0x85, 0x71, 0xff, 0x3b, 0x8f, 0x3a, 0x91, 0x05, 0x93, 0xf9, 0x6a, - 0x17, 0xa0, 0x28, 0x09, 0x3c, 0x28, 0x05, 0x38, 0x04, 0x20, 0x00, 0x1b, 0x23, 0x04, 0x43, 0x28, 0x1d, 0x40, 0x04, 0x4b, 0x05, 0x48, 0x11, 0x10, - 0x07, 0x94, 0xff, 0x80, 0x0e, 0xb6, 0x7f, 0x12, 0x14, 0x15, 0x15, 0x15, 0x15, 0x12, 0x00, 0x12, 0x0f, 0x15, 0x06, 0x14, 0x12, 0x12, 0x12, 0x00, - 0x12, 0x93, 0x21, 0xe6, 0xfe, 0x00, 0x00, 0x14, 0x08, 0x4d, 0xd4, 0x30, 0xab, 0x28, 0x07, 0xc7, 0x30, 0xa3, 0xd6, 0x28, 0x0f, 0x06, 0x3c, 0xaf, - 0x50, 0x2f, 0x91, 0x63, 0x2f, 0xa9, 0x3f, 0xb3, 0x79, 0xbe, 0x06, 0xe0, 0x7f, 0x69, 0x05, 0x84, 0x8d, 0x07, 0xf0, 0x7f, 0x91, 0x01, 0x05, 0x17, - 0x89, 0x00, 0x91, 0xff, 0xed, 0x80, 0x06, 0x00, 0x7d, 0x00, 0x00, 0xae, 0x76, 0x61, 0x53, 0x2c, 0x10, 0x7b, 0x27, 0x59, 0x06, 0x58, 0x15, 0x00, - 0x00, 0x3c, 0xd5, 0x03, 0x74, 0xce, 0x74, 0xb9, 0x14, 0xb5, 0x06, 0x50, 0x7d, 0xf2, 0xff, 0x6a, 0xeb, 0x06, 0xe3, 0x7f, 0x06, 0x11, 0xff, 0x1f, - 0x28, 0x11, 0x3a, 0x48, 0x0d, 0x34, 0xb8, 0x28, 0x1b, 0x4f, 0x05, 0xa8, 0x11, 0x08, 0x14, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x13, 0x15, 0x16, 0x08, - 0x16, 0x16, 0x16, 0x13, 0x20, 0x06, 0x10, 0x15, 0x13, 0x00, 0x13, 0x13, 0x13, 0x79, 0x23, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x15, 0x4d, 0xdd, 0x30, - 0xef, 0x30, 0xc8, 0x20, 0x30, 0xa5, 0x28, 0x15, 0xfb, 0x30, 0xb7, 0x30, 0xe3, 0x0e, 0x30, 0xe9, 0x30, 0xf3, 0x20, 0x0f, 0x05, 0xbb, 0x2f, 0x3f, - 0x99, 0x74, 0x80, 0x2f, 0x9f, 0x75, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x68, 0xd8, 0x48, 0x23, 0x3c, 0xbd, 0x74, 0x4e, 0xc7, 0x10, 0x14, 0xf0, 0x7f, - 0x6e, 0x66, 0xe6, 0x00, 0x74, 0xfe, 0x56, 0x2d, 0x00, 0x0f, 0x59, 0x17, 0x10, 0x67, 0xb7, 0x5f, 0x06, 0x18, 0x1f, 0x78, 0xd4, 0x44, 0xc5, 0x00, - 0x2c, 0xd2, 0xe4, 0xc0, 0x91, 0xb7, 0xb8, 0xd2, 0xc5, 0x06, 0x5b, 0x97, 0x0e, 0xd3, 0x7f, 0x1f, 0x04, 0x43, 0x28, 0x15, 0x42, 0x20, 0x05, 0x11, - 0x2d, 0x00, 0x28, 0x48, 0x1f, 0x30, 0x04, 0x3d, 0x20, 0x0f, 0x60, 0x30, 0x05, 0x68, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x14, 0x16, 0x17, 0x17, 0x17, - 0x20, 0x17, 0x14, 0x20, 0x06, 0x12, 0x16, 0x14, 0x14, 0x14, 0x08, 0x14, 0x20, 0x21, 0x3d, 0x2f, 0xff, 0x16, 0x4d, 0xd7, 0x02, 0x30, 0xed, 0x30, - 0xf4, 0x30, 0xa1, 0x28, 0x0d, 0xb9, 0x82, 0x28, 0x19, 0xa2, 0x30, 0xeb, 0x30, 0xd7, 0x28, 0x21, 0xb3, 0xa0, 0x28, 0x27, 0xc8, 0x28, 0x29, 0xc0, - 0x30, 0xb8, 0x30, 0xe5, 0xa8, 0x28, 0x33, 0xeb, 0x04, 0x88, 0x29, 0x50, 0x2f, 0xa9, 0x6f, 0x00, 0x76, 0xa0, 0x48, 0x09, 0x63, 0x2f, 0xaf, 0x2d, - 0x00, 0x41, 0x00, 0x6c, 0x35, 0x00, 0x70, 0x48, 0x13, 0x38, 0x27, 0xf4, 0x48, 0x1f, 0x20, 0x2f, 0xcd, 0x55, 0x27, 0x20, 0x19, 0x7a, 0x28, 0x3d, - 0x72, 0x10, 0x04, 0x80, 0x7f, 0x7a, 0x2f, 0xb7, 0xaa, 0x71, 0x7f, 0x69, 0x49, 0xa5, 0x6f, 0x29, 0x99, 0x74, 0x2f, 0xcd, 0x20, 0xde, 0x41, 0x7b, - 0x51, 0x7d, 0x72, 0x03, 0xcf, 0xd5, 0x00, 0x70, 0x7f, 0x71, 0xff, 0xd0, 0x81, 0x75, 0xc0, 0x22, 0x1b, 0x03, 0xf8, 0x17, 0x57, 0x7f, 0xfa, 0x65, - 0xaf, 0x65, 0x00, 0x2d, 0x00, 0x3f, 0x96, 0x14, 0x5c, 0x51, 0x53, 0x80, 0x30, 0x09, 0xdd, 0x84, 0x72, 0x82, 0x77, 0x6d, 0xb8, 0x40, 0x5c, 0x05, - 0x38, 0x25, 0x04, 0xd5, 0x5c, 0xb8, 0x29, 0xbc, 0x00, 0xa4, 0xc2, 0x4c, 0xc5, 0x04, 0xd5, 0x54, 0xcf, 0x00, 0xb8, 0xd2, 0xe4, 0xb2, 0x50, 0xc9, - 0x74, 0xb9, 0xd5, 0x05, 0xbf, 0xaf, 0x00, 0x73, 0x7f, 0x6e, 0x06, 0x03, 0x7f, 0xe7, 0x06, 0x21, 0xff, 0x1f, 0x28, 0x09, 0x14, 0x3e, 0x04, 0x32, - 0x48, 0x0d, 0x41, 0x28, 0x1b, 0x10, 0x04, 0x01, 0x3b, 0x04, 0x4c, 0x04, 0x3f, 0x04, 0x4b, 0x28, 0x27, 0x54, 0x1b, 0x28, 0x31, 0x37, 0x28, 0x37, - 0x40, 0x28, 0x29, 0x4b, 0x04, 0x01, 0x39, 0x04, 0x20, 0x00, 0x11, 0x04, 0x35, 0x28, 0x39, 0x1c, 0x35, 0x04, 0x33, 0x03, 0x88, 0x35, 0x10, 0x07, - 0xb4, 0xff, 0x0e, 0x36, 0x7f, 0x15, 0x17, 0x04, 0x18, 0x18, 0x18, 0x18, 0x15, 0x20, 0x06, 0x11, 0x17, 0x00, 0x15, 0x15, 0x15, 0x15, 0xc9, 0x1e, - 0xd2, 0x03, 0x05, 0x00, 0x00, 0x17, 0x4d, 0xed, 0x28, 0x01, 0xcc, 0x88, 0x11, 0xae, 0x06, 0x1c, 0xb1, 0x52, 0x2f, 0xa1, 0xf4, 0x2f, 0x9d, 0xd8, - 0x11, 0x10, 0x05, 0xb0, 0x7f, 0x6f, 0xad, 0x29, 0x73, 0x61, 0x2f, 0x9f, 0x6f, 0xa8, 0x13, 0x05, 0xb1, 0xff, 0xf3, 0x00, 0x00, 0x7f, 0x87, 0x05, - 0xb2, 0x01, 0x57, 0x7f, 0xb7, 0x8b, 0x98, 0x13, 0x05, 0x38, 0x09, 0xdf, 0xff, 0x3a, 0x60, 0xb8, 0x38, 0x11, 0x06, 0x13, 0x77, 0x00, 0xb3, 0x7f, - 0x6e, 0x0d, 0xa1, 0xff, 0x20, 0xbc, 0x28, 0x15, 0x3d, 0x28, 0x15, 0xb8, 0x11, 0x10, 0x0d, 0xd4, 0xff, 0x0e, 0xd6, 0x7f, 0x16, 0x19, 0x04, 0x1a, - 0x1a, 0x1a, 0x1a, 0x16, 0x20, 0x06, 0x14, 0x19, 0x01, 0x16, 0x16, 0x16, 0x16, 0x89, 0x20, 0x6f, 0x28, 0x17, 0x15, 0x18, 0x4d, 0xb0, 0x28, 0x11, - 0xc9, 0x28, 0x13, 0xfc, 0x06, 0x48, 0x15, 0x15, 0x00, 0x00, 0x47, 0x2f, 0x81, 0x61, 0x2f, 0x8d, 0x65, 0x2f, 0xa5, 0x76, 0x6f, 0x2f, 0x8d, 0x3f, - 0xa9, 0x10, 0x06, 0x30, 0x7f, 0x61, 0x2f, 0xa5, 0x31, 0x7d, 0x61, 0xe0, 0x06, 0x61, 0xff, 0x70, 0x7f, 0x05, 0xd1, 0xfd, 0x00, 0x00, 0xdc, 0x74, - 0xb7, 0x01, 0x5f, 0x57, 0x7f, 0x6e, 0x66, 0x01, 0x77, 0x06, 0x57, 0x9b, 0x03, 0xfc, 0xac, 0xe4, 0xb4, 0xe8, 0xb8, 0x06, 0x98, 0x19, 0x07, 0xf2, - 0x7f, 0x88, 0x05, 0xf1, 0xff, 0x13, 0x04, 0x32, 0x28, 0x15, 0x34, 0x04, 0x35, 0xae, 0x28, 0x15, 0x43, 0x28, 0x15, 0x30, 0x05, 0xc8, 0x15, 0x10, - 0x07, 0x94, 0xff, 0x0e, 0x76, 0x7f, 0x17, 0x00, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x17, 0x17, 0x0b, 0x00, 0x0c, 0x05, 0x0b, 0x17, 0x17, 0x17, 0x17, - 0x60, 0x00, 0x0b, 0x1d, 0xd4, 0x00, 0x00, 0x19, 0x4d, 0xde, 0x8a, 0x28, 0x13, 0xc1, 0x30, 0xcb, 0x28, 0x17, 0xaf, 0x06, 0x48, 0x17, 0x4d, 0x8a, - 0x2e, 0xab, 0x72, 0x00, 0x74, 0x2e, 0xa3, 0x6e, 0x2e, 0xa7, 0x71, 0xec, 0x28, 0x25, 0x05, 0xd8, 0x17, 0x0f, 0xd0, 0x7f, 0x63, 0x06, 0x08, 0x17, - 0x06, 0xf0, 0x7f, 0x6c, 0x9a, 0x02, 0xd0, 0x63, 0x3c, 0x5c, 0x4b, 0x51, 0x06, 0x78, 0x17, 0xc8, 0x00, 0xb9, 0x74, 0xb9, 0xf0, 0xd2, 0xc8, 0xb2, - 0x6c, 0x68, 0xd0, 0x06, 0x58, 0x97, 0x0e, 0xf2, 0x7f, 0x1c, 0x28, 0x15, 0x40, 0x04, 0x42, 0x0b, 0x04, 0x38, 0x04, 0x3d, 0x20, 0x03, 0x3a, 0x06, - 0x08, 0x17, 0x10, 0x07, 0xd4, 0xff, 0x80, 0x0e, 0x16, 0x7f, 0x18, 0x11, 0x12, 0x12, 0x12, 0x12, 0x18, 0x00, 0x18, 0x13, 0x12, 0x0c, 0x11, 0x18, - 0x18, 0x18, 0x08, 0x18, 0x62, 0x0a, 0x92, 0x28, 0x17, 0x1a, 0x4d, 0xd5, 0x00, 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0x18, 0x02, 0x98, 0xae, - 0x30, 0xa2, 0x30, 0xca, 0x06, 0x08, 0x1b, 0x46, 0xa0, 0x28, 0x15, 0x65, 0x28, 0x13, 0x63, 0x00, 0x68, 0x00, 0x20, 0xad, 0x4f, 0xbd, 0x69, 0x2f, - 0xbf, 0x6e, 0x05, 0x8e, 0xb7, 0x3f, 0xaf, 0x79, 0x40, 0x71, 0xe0, 0x05, 0xfe, 0xa9, 0x90, 0xff, 0x30, 0xef, 0x7a, 0x00, 0xf6, 0x00, 0x73, 0xaf, - 0x29, 0x1d, 0x73, 0x41, 0x09, 0x2d, 0x6f, 0xc7, 0x50, 0x99, 0x04, 0xbf, 0xc3, 0x90, 0xff, 0x6b, 0x61, 0x21, 0x7f, 0x70, 0x8d, 0x63, 0x2f, 0xb7, - 0x73, 0x05, 0x4f, 0xbb, 0xd0, 0xe7, 0xc0, 0xf0, 0x81, 0x05, 0x18, 0xa5, 0xd5, 0x6c, 0x5e, 0x5c, 0x2d, 0x57, 0x08, 0x9a, 0x4e, 0xa3, 0x90, 0x06, - 0x58, 0x19, 0x04, 0xd5, 0x91, 0x00, 0xb7, 0xa4, 0xc2, 0x39, 0xb8, 0x20, 0x00, 0x30, 0x05, 0xae, 0x44, 0xc5, 0x98, 0xb0, 0x06, 0x72, 0x7f, 0x73, - 0x62, 0x73, 0xf1, 0x05, 0x12, 0x71, 0x00, 0x1f, 0x2f, 0x73, 0xf1, 0x06, 0x11, 0xfd, 0x00, 0x00, 0x24, 0x28, 0x15, 0x40, 0x30, 0x28, 0x13, 0x46, - 0x04, 0x43, 0x04, 0x37, 0x04, 0x40, 0x41, 0x48, 0x19, 0x4f, 0x04, 0x20, 0x00, 0x13, 0x04, 0x7c, 0x32, 0x28, 0x2b, 0x30, 0x19, 0x04, 0xd8, 0x29, - 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x19, 0x0a, 0x00, 0x0c, 0x0a, 0x0d, 0x0d, 0x19, 0x19, 0x0a, 0x0d, 0x00, 0x15, 0x0a, 0x19, 0x19, 0x19, - 0x19, 0x82, 0x03, 0x00, 0xca, 0xda, 0x00, 0x00, 0x1b, 0x4d, 0xec, 0x30, 0x06, 0xe6, 0x30, 0xcb, 0x30, 0xaa, 0x28, 0x1b, 0x06, 0x5d, 0x2f, 0x52, - 0x36, 0x00, 0xe9, 0x2f, 0xa3, 0x3f, 0xab, 0x6f, 0x2f, 0xb1, 0x10, 0x06, 0x30, 0x7f, 0x69, 0xda, 0xa1, 0x7f, 0x06, 0x19, 0x1b, 0x52, 0x2e, 0x9f, - 0x51, 0xff, 0xf3, 0x06, 0x41, 0xff, 0x59, 0x06, 0x75, 0x3c, 0x5c, 0x6a, 0x6c, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x08, 0x01, 0xb8, 0x04, 0xc7, 0xc8, - 0xb2, 0x39, 0xc6, 0x06, 0x70, 0x7f, 0xd8, 0x07, 0x13, 0x7f, 0x71, 0xff, 0xe3, 0x24, 0x01, 0x06, 0x1b, 0x9a, 0x20, 0x04, 0x35, 0x23, 0x04, 0x4e, - 0x28, 0x17, 0x4c, 0x04, 0x3e, 0x28, 0x1d, 0x10, 0x0e, 0x34, 0xff, 0x94, 0x0e, 0xd6, 0x7f, 0x1a, 0x18, 0x38, 0x0d, 0x1a, 0x20, 0x06, 0x13, 0x18, - 0x00, 0x1a, 0x1a, 0x1a, 0x1a, 0x28, 0xf1, 0x6e, 0x27, 0x40, 0x01, 0x4f, 0xff, 0x1c, 0x4d, 0xde, 0x30, 0xe8, 0x30, 0x02, 0xc3, 0x30, 0xc8, 0x30, - 0xf6, 0x5c, 0x06, 0x58, 0x1b, 0x4d, 0x8e, 0x4f, 0x19, 0x6f, 0x00, 0x74, 0x20, 0x01, 0x06, 0x3f, 0xb5, 0x10, 0x0e, 0xf0, 0x7f, 0x6c, 0x04, 0x9a, - 0xa6, 0x7e, 0x79, 0x72, 0x06, 0x98, 0x1b, 0xc8, 0xb9, 0x0f, 0x94, 0xc6, 0xb8, 0xd2, 0x06, 0x78, 0x99, 0x07, 0x53, 0x7f, 0x3c, 0x17, 0x06, 0x53, - 0xfd, 0x85, 0x25, 0x01, 0x04, 0x30, 0x04, 0x39, 0x28, 0x17, 0x42, 0x20, 0x01, 0x60, 0x30, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x1b, 0x12, - 0x13, 0x13, 0x13, 0x00, 0x13, 0x1b, 0x1b, 0x14, 0x12, 0x0c, 0x12, 0x1b, 0x01, 0x1b, 0x1b, 0x1b, 0xea, 0xf6, 0x29, 0x20, 0xff, 0xff, 0x00, 0x01, - 0x0c, 0x0e, 0x0d, 0x0e, 0x0e, 0x01, 0x01, 0x00, 0x0d, 0x0e, 0x07, 0x0c, 0x01, 0x01, 0x01, 0x01, 0x08, 0x02, 0x01, 0x01, 0x08, 0x20, 0x05, 0x02, - 0x08, 0x01, 0x40, 0x1a, 0x20, 0x05, 0x02, 0x02, 0x03, 0x02, 0x02, 0x01, 0x00, 0x04, 0x03, 0x03, 0x03, 0x01, 0x03, 0x01, 0x02, 0xa0, 0x20, 0x06, - 0x03, 0x20, 0x0b, 0x02, 0x03, 0x04, 0x04, 0x04, 0x10, 0x02, 0x04, 0x10, 0x30, 0x06, 0x04, 0x05, 0x10, 0x04, 0x00, 0x03, 0x05, 0x05, 0x05, 0x05, - 0x0e, 0x05, 0x0e, 0x50, 0x10, 0x30, 0x07, 0x06, 0x30, 0x03, 0x06, 0x06, 0x06, 0x03, 0x20, 0x06, 0x03, 0x40, 0x07, 0x07, 0x04, 0x06, 0x04, 0x07, - 0x02, 0x07, 0x07, 0x07, 0x04, 0x07, 0x02, 0x40, 0x07, 0x08, 0x00, 0x06, 0x07, 0x06, 0x08, 0x08, 0x08, 0x08, 0x05, 0x20, 0x08, 0x18, 0x40, 0x07, - 0x09, 0x07, 0x08, 0x07, 0x09, 0x02, 0x09, 0x09, 0x09, 0x06, 0x09, 0x19, 0x40, 0x07, 0x0a, 0x00, 0x08, 0x09, 0x0e, 0x0a, 0x0a, 0x0a, 0x0a, 0x07, - 0x10, 0x0a, 0x08, 0x08, 0x30, 0x07, 0x0b, 0x09, 0x0a, 0x09, 0x01, 0x0b, 0x0b, 0x0b, 0x0b, 0x09, 0x0b, 0x17, 0x40, 0x07, 0x00, 0x0c, 0x1b, 0x0d, - 0x0c, 0x02, 0x02, 0x0c, 0x0c, 0x08, 0x0c, 0x02, 0x04, 0x1b, 0x20, 0x05, 0x0c, 0x0d, 0x0d, 0x00, 0x0f, 0x0f, 0x10, 0x0f, 0x0d, 0x0d, 0x10, 0x0f, - 0x10, 0x09, 0x0d, 0x0d, 0x20, 0x01, 0x0e, 0x0e, 0x10, 0x10, 0x00, 0x0f, 0x10, 0x0e, 0x0e, 0x11, 0x10, 0x0a, 0x0e, 0x40, 0x0e, 0x20, 0x01, 0x0f, - 0x0f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0f, 0x0f, 0x12, 0x11, 0x0b, 0x0f, 0x0f, 0x20, 0x01, 0x00, 0x10, 0x13, 0x14, 0x14, 0x14, 0x14, 0x10, 0x10, - 0x00, 0x1b, 0x14, 0x1b, 0x13, 0x10, 0x10, 0x10, 0x10, 0x00, 0x11, 0x14, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x08, 0x15, 0x15, 0x0f, 0x14, 0x30, - 0x29, 0x12, 0x15, 0x16, 0x00, 0x16, 0x16, 0x16, 0x12, 0x12, 0x0f, 0x16, 0x06, 0x00, 0x15, 0x12, 0x12, 0x12, 0x12, 0x13, 0x16, 0x17, 0x09, 0x17, - 0x17, 0x17, 0x13, 0x20, 0x06, 0x11, 0x16, 0x31, 0x4d, 0x01, 0x14, 0x17, 0x18, 0x18, 0x18, 0x18, 0x14, 0x20, 0x06, 0x2a, 0x13, 0x17, 0x30, 0x49, - 0x15, 0x49, 0x7f, 0x15, 0x20, 0x06, 0x12, 0x4a, 0x18, 0x30, 0x49, 0x16, 0x1a, 0x31, 0x69, 0x16, 0x20, 0x06, 0x15, 0x50, 0x1a, 0x30, 0x49, 0x17, - 0x30, 0xb3, 0x0c, 0x17, 0x17, 0x0b, 0x12, 0x0c, 0x05, 0x0b, 0x30, 0x49, 0x18, 0x11, 0x30, 0x55, 0x18, 0x04, 0x18, 0x13, 0x13, 0x0d, 0x11, 0x30, - 0x49, 0x19, 0x0a, 0x00, 0x0c, 0x0a, 0x0d, 0x0d, 0x19, 0x19, 0x0a, 0x0d, 0x38, 0x16, 0x0a, 0x49, 0xc9, 0x29, 0xcb, 0x39, 0xc7, 0x19, 0x1a, 0x14, - 0xc0, 0x40, 0x09, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x11, 0xb4, 0x8a, 0x00, 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x4e, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x59, 0x25, 0x88, 0x09, 0x00, 0x00, 0x00, 0x02, 0x4e, 0xd9, 0x30, 0xeb, 0x30, 0xea, 0x10, - 0x30, 0xf3, 0x30, 0x06, 0x78, 0x1d, 0x42, 0x00, 0x65, 0x00, 0x01, 0x72, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x6e, 0x10, 0x07, 0x00, 0x7f, 0x50, 0x6f, - 0x06, 0xa1, 0xff, 0xed, 0x06, 0x61, 0xff, 0xcf, 0x67, 0x97, 0x67, 0x20, 0x02, 0x5e, 0x06, 0x9b, 0x1b, 0xa0, 0xbc, 0x7c, 0xb9, 0xb0, 0x6d, 0xb9, - 0x06, 0x9b, 0x9b, 0x93, 0x7f, 0x6a, 0x06, 0x43, 0x81, 0x93, 0xff, 0x6d, 0x06, 0x4c, 0xa0, 0x00, 0x11, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3b, 0x04, - 0x0c, 0x38, 0x04, 0x3d, 0x04, 0x10, 0x0e, 0xf4, 0xff, 0x0e, 0x36, 0xff, 0x01, 0x03, 0x04, 0x04, 0x03, 0x06, 0x04, 0x01, 0x30, 0x06, 0x03, 0x01, - 0x10, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x4e, 0xd8, 0x30, 0x12, 0xc3, 0x30, 0xbb, 0x28, 0x17, 0xde, 0x5d, 0x06, 0x5f, 0xb7, 0x48, 0xae, 0x28, - 0x17, 0x73, 0x20, 0x01, 0x65, 0x06, 0x6f, 0xb6, 0x07, 0x90, 0x7f, 0x06, 0x59, 0x17, 0x41, 0x88, 0x41, 0x7d, 0x69, 0x00, 0x61, 0x0e, 0x61, 0x7f, - 0xd1, 0x9e, 0xee, 0x60, 0x68, 0x06, 0x72, 0xfb, 0x3f, 0xff, 0xe4, 0xd5, 0x3c, 0xc1, 0x20, 0x1d, 0x00, 0xfc, 0xc8, 0x06, 0x7f, 0xb5, 0x06, 0xf2, - 0x7f, 0x06, 0xf3, 0xff, 0x13, 0x28, 0x17, 0x5c, 0x41, 0x20, 0x01, 0x35, 0x06, 0x68, 0x17, 0x0f, 0x94, 0xff, 0x10, 0x06, 0x56, 0x7f, 0x02, 0x07, - 0x04, 0x08, 0x07, 0x02, 0x08, 0x02, 0x30, 0x06, 0x07, 0x02, 0x00, 0x02, 0x02, 0x02, 0x9b, 0x23, 0xdb, 0x05, 0x00, 0x00, 0x00, 0x04, 0x4e, 0xd0, - 0x30, 0xfc, 0x30, 0xc7, 0x80, 0x28, 0x17, 0xfb, 0x30, 0xd3, 0x30, 0xe5, 0x30, 0xeb, 0x2a, 0x30, 0xc6, 0x28, 0x23, 0xd9, 0x20, 0x07, 0xaf, 0x05, - 0x68, 0x29, 0x42, 0xa0, 0x26, 0x91, 0x64, 0x47, 0x15, 0x2d, 0x00, 0x57, 0x00, 0xfc, 0xaa, 0x2f, 0xbb, 0x74, 0x20, 0x01, 0x65, 0x2c, 0x3d, 0x62, - 0x4f, 0xc9, 0x67, 0xdf, 0x05, 0x60, 0x7f, 0x30, 0x7d, 0x75, 0x40, 0x7d, 0x05, 0x90, 0x7b, 0x07, 0xb0, 0xff, 0x07, 0x50, 0x7f, 0x06, 0x11, 0x81, - 0x00, 0xf4, 0x5d, 0x7b, 0x76, 0x2d, 0x00, 0x26, 0x7b, 0x08, 0x7e, 0x81, 0x21, 0x58, 0x06, 0x3b, 0x1b, 0x14, 0xbc, 0x74, 0x00, 0xb3, 0xd4, 0xbd, - 0x74, 0xb9, 0x5c, 0xd1, 0xa0, 0x06, 0xbc, 0x74, 0xb9, 0x6c, 0xd0, 0x05, 0xf8, 0x23, 0x0e, 0xf2, 0x7f, 0x11, 0x08, 0x04, 0x30, 0x04, 0x34, 0x48, - 0x15, 0x2d, 0x00, 0x12, 0x02, 0x04, 0x4e, 0x04, 0x40, 0x04, 0x42, 0x28, 0x29, 0x3c, 0x23, 0x04, 0x31, 0x28, 0x2f, 0x40, 0x04, 0x33, 0x05, 0x08, - 0x2b, 0x0f, 0xd3, 0xff, 0x80, 0x10, 0x06, 0x10, 0xff, 0x03, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03, 0xa0, 0x20, 0x06, 0x02, 0x20, 0x05, 0x03, 0x03, - 0xae, 0x22, 0x86, 0x08, 0x06, 0x00, 0x00, 0x05, 0x28, 0x17, 0xa4, 0x30, 0xa8, 0xb5, 0x28, 0x0f, 0xf3, 0x05, 0x68, 0x07, 0x00, 0x38, 0x17, 0x76, - 0x2e, 0xad, 0x72, 0x06, 0x6e, 0xb3, 0x8e, 0x50, 0x7f, 0x69, 0x00, 0xe8, 0x28, 0x91, 0x06, 0x3e, 0xb3, 0x39, 0x17, 0x79, 0xfc, 0x49, 0x01, 0x06, - 0x5d, 0xaf, 0x70, 0xff, 0x39, 0x83, 0x06, 0xb1, 0x7f, 0x06, 0x70, 0x7f, 0xf4, 0x5d, 0x03, 0x10, 0x4f, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x52, 0xfd, - 0x48, 0x17, 0x06, 0xc7, 0xd0, 0xc5, 0x78, 0xb9, 0x05, 0xf8, 0x0f, 0x9b, 0x97, 0x65, 0xf4, 0x61, 0xfd, 0x3b, 0x9b, 0x0e, 0x12, 0x7f, 0x38, 0x17, - 0x32, 0x28, 0x1b, 0x40, 0x04, 0x1c, 0x38, 0x04, 0x4f, 0x05, 0x08, 0x05, 0x08, 0x74, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x04, 0x02, 0x04, 0x03, 0x02, - 0x05, 0x03, 0x04, 0x20, 0x06, 0x01, 0x02, 0x00, 0x04, 0x04, 0x04, 0x04, 0x3a, 0x22, 0x37, 0x08, 0x01, 0x00, 0x00, 0x06, 0x4e, 0xd6, 0x30, 0xe9, - 0x28, 0x13, 0x55, 0xc7, 0x28, 0x17, 0xd6, 0x28, 0x1d, 0xaf, 0x06, 0x08, 0x1d, 0x42, 0x46, 0x8f, 0x5c, 0x6e, 0x6f, 0x33, 0x62, 0x4f, 0xb3, 0x05, - 0x3f, 0xa7, 0x00, 0x30, 0x7f, 0x62, 0x00, 0x74, 0x6f, 0x06, 0xc0, 0x7f, 0x07, 0x10, 0xff, 0x51, 0x7d, 0x6f, 0x0d, 0xa0, 0x7f, 0xc3, 0x52, 0x02, - 0x70, 0x51, 0x7b, 0x76, 0x21, 0x58, 0x06, 0x78, 0x17, 0x0c, 0x00, 0xbe, 0x80, 0xb7, 0x74, 0xb3, 0x80, 0xbd, 0x74, 0x1a, 0xb9, 0x6c, 0xd0, 0x06, - 0x38, 0x1b, 0x0e, 0xf2, 0x7f, 0x11, 0x28, 0x11, 0x30, 0x02, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x35, 0x20, 0x05, 0x31, 0x2e, 0x04, 0x43, 0x28, 0x21, - 0x33, 0x05, 0xa8, 0x1f, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x05, 0x02, 0x04, 0x05, 0x04, 0x07, 0x05, 0x05, 0x30, 0x06, 0x04, 0x80, 0x20, - 0x06, 0x05, 0x41, 0x25, 0x45, 0x09, 0x00, 0x00, 0x41, 0x07, 0x28, 0x17, 0xec, 0x30, 0xfc, 0x30, 0xe1, 0x28, 0x1b, 0xc6, 0x06, 0x5d, 0x2f, 0x38, - 0x17, 0x65, 0x00, 0x6d, 0x06, 0x6c, 0xad, 0x58, 0x97, 0xea, 0xf8, 0x40, 0x7f, 0x0e, 0x90, 0xff, 0x31, 0x7f, 0x06, 0x3f, 0xab, 0x07, 0x31, 0xff, - 0x0d, 0x4e, 0x65, 0x06, 0x67, 0x85, 0x68, 0x02, 0x5e, 0x06, 0x61, 0xfe, 0x28, 0x17, 0x08, 0x1e, 0xb8, 0x58, 0xba, 0x06, 0x38, 0x11, 0x07, 0xd2, - 0x7f, 0x06, 0x73, 0xff, 0x38, 0x17, 0x35, 0x38, 0x04, 0x3c, 0x48, 0x15, 0x10, 0x06, 0x31, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x06, 0x05, 0x06, 0x0a, - 0x05, 0x08, 0x06, 0x06, 0x30, 0x06, 0x05, 0x20, 0x06, 0x06, 0x00, 0xbc, 0x25, 0x43, 0x06, 0x00, 0x00, 0x08, 0x4e, 0x41, 0xcf, 0x28, 0x11, 0xd6, - 0x30, 0xeb, 0x30, 0xaf, 0x06, 0x68, 0x17, 0x5b, 0x48, 0x2f, 0xad, 0x6d, 0x06, 0x2f, 0x27, 0xf0, 0x7f, 0x6f, 0x06, 0x60, 0x81, 0x06, 0xf0, 0xff, - 0x78, 0x41, 0xa1, 0x7d, 0x05, 0xbf, 0xa7, 0x00, 0x51, 0xff, 0x06, 0x10, 0x81, 0x49, 0x6c, 0x21, 0x40, 0x58, 0x06, 0x98, 0x15, 0x00, 0x00, 0x68, - 0xd5, 0x80, 0xbd, 0x0e, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0x07, 0x73, 0x7f, 0x06, 0x72, 0x81, 0x13, 0x22, 0x04, 0x30, 0x28, 0x15, 0x31, - 0x04, 0x43, 0x28, 0x1f, 0x33, 0xe0, 0x06, 0x28, 0x19, 0x07, 0xd1, 0x7f, 0x10, 0x0e, 0x10, 0xff, 0x07, 0x06, 0x07, 0x06, 0x01, 0x28, 0x07, 0x07, - 0x30, 0x06, 0x06, 0x20, 0x06, 0x07, 0x14, 0x26, 0x01, 0x1a, 0x07, 0x00, 0x00, 0x09, 0x4e, 0xe1, 0x28, 0x11, 0x40, 0xec, 0x88, 0x1b, 0xfb, 0x30, - 0xd5, 0x30, 0xa9, 0x30, 0x14, 0xa2, 0x30, 0xdd, 0x28, 0x2d, 0xe1, 0x28, 0x2d, 0xf3, 0x30, 0x28, 0xde, 0x5d, 0x04, 0xdf, 0xc6, 0x4d, 0x2f, 0xa9, - 0x63, 0x00, 0x6b, 0x31, 0x00, 0x6c, 0x4f, 0x31, 0x78, 0x1f, 0x2d, 0x00, 0x56, 0x27, 0xa9, 0x15, 0x72, 0x00, 0x70, 0x27, 0xaf, 0x6d, 0x4f, 0xcd, - 0x72, 0x04, 0x6f, 0x4f, 0xc5, 0xb0, 0x7f, 0xb8, 0x1f, 0x2d, 0x00, 0x50, 0x40, 0x7b, 0xe9, 0x2f, 0xcf, 0x55, 0x61, 0x2f, 0xcb, 0x69, 0x2f, 0xd5, - 0x20, 0x40, 0x09, 0x74, 0x40, 0x13, 0xdf, 0x30, 0x0f, 0x38, 0xcb, 0x65, 0x0b, 0x40, 0xff, 0x70, 0xfd, 0x78, 0x1f, 0x70, 0xfd, 0x31, 0x77, 0xad, - 0x50, 0xfd, 0x61, 0x20, 0xfd, 0x41, 0x40, 0xfd, 0x31, 0x8b, 0x69, 0x41, 0x9d, 0xea, 0x02, 0xf0, 0xfb, 0x00, 0x31, 0x7f, 0x00, 0xd0, 0x81, 0x4f, - 0x22, 0x2b, 0x63, 0x21, 0x8b, 0x64, 0xa8, 0x4e, 0xdf, 0x74, 0x2a, 0x53, 0x6c, 0x02, 0xef, 0xe8, 0x85, 0x68, 0x4b, 0x00, 0x51, 0x26, 0x4f, 0x21, - 0x58, 0x2d, 0x00, 0x4d, 0x01, 0x52, 0xe2, 0x6c, 0xab, 0x83, 0x5e, 0x74, 0x04, 0xf2, 0xf1, 0x81, 0xdf, 0xff, 0x54, 0xba, 0x74, 0xd0, 0x0c, 0xb8, - 0x58, 0x1b, 0x00, 0xec, 0xd3, 0xb4, 0xc5, 0xec, 0xd3, 0x54, 0xba, 0x3f, 0x78, 0xb9, 0x05, 0x98, 0x25, 0x00, 0xb3, 0x7f, 0x33, 0x81, 0x73, 0x07, - 0x53, 0x83, 0x04, 0x1f, 0xd5, 0xb0, 0x01, 0x31, 0xff, 0xe2, 0xc1, 0xff, 0x03, 0xb1, 0xfd, 0x00, 0x00, 0x1c, 0x04, 0x05, 0x35, 0x04, 0x3a, 0x04, - 0x3b, 0x20, 0x05, 0x3d, 0x88, 0x1d, 0x15, 0x2d, 0x00, 0x1f, 0x20, 0x15, 0x40, 0x20, 0x19, 0x34, 0x20, 0x15, 0x56, 0x4f, 0x20, 0x01, 0x20, 0x20, - 0x11, 0x3e, 0x28, 0x3f, 0x30, 0x15, 0x30, 0xb8, 0x20, 0x29, 0x38, 0x20, 0x15, 0x0c, 0x14, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x08, 0x09, 0x09, 0x98, - 0x30, 0x02, 0x08, 0x08, 0x20, 0x06, 0x20, 0x05, 0x08, 0x20, 0x26, 0x00, 0x1e, 0x08, 0x00, 0x00, 0x0a, 0x4e, 0xcb, 0x30, 0x15, 0xfc, 0x30, 0xc0, - 0x20, 0x03, 0xb6, 0x28, 0x1f, 0xbb, 0x05, 0x28, 0x07, 0xa8, 0xff, 0xff, 0x4c, 0x2f, 0xa9, 0x77, 0x47, 0xf7, 0x20, 0x00, 0x53, 0xa2, 0x2f, 0xbb, - 0x78, 0x2f, 0xb9, 0x6e, 0x00, 0x79, 0x05, 0x8f, 0xb7, 0x42, 0xaf, 0x2f, 0xaf, 0x73, 0x20, 0x01, 0x65, 0x28, 0x8b, 0x50, 0x7f, 0x03, 0x36, 0xed, - 0x01, 0x9f, 0xf8, 0x6a, 0x4e, 0x48, 0x71, 0x36, 0xe7, 0x72, 0x20, 0x87, 0x61, 0x29, 0x23, 0x68, 0xff, 0x40, 0x8d, 0x04, 0x59, 0x05, 0x00, 0x90, - 0xff, 0x37, 0xf7, 0x31, 0x7f, 0x31, 0x0b, 0x31, 0x81, 0x38, 0x09, 0xac, 0x05, 0x71, 0x7f, 0x6a, 0x80, 0x7d, 0x6a, 0x05, 0xc0, 0x7b, 0x3f, 0xff, - 0x0b, 0x4e, 0x03, 0x28, 0x84, 0x4b, 0x51, 0xee, 0x68, 0x05, 0xf2, 0xf7, 0x7f, 0xff, 0x00, 0xc8, 0xb2, 0x54, 0xb3, 0x91, 0xc7, 0x3c, 0xc1, 0xed, - 0x05, 0x98, 0x09, 0xf2, 0x7f, 0xb2, 0x7d, 0x6b, 0x05, 0xc2, 0x7b, 0x73, 0x7f, 0x69, 0x23, 0xf5, 0x8a, 0x72, 0x7f, 0x78, 0x00, 0xf3, 0x05, 0xc2, - 0x01, 0x1d, 0x27, 0xe3, 0x36, 0xa3, 0x87, 0xfd, 0x21, 0x27, 0xf5, 0x3a, 0x04, 0x41, 0x28, 0x03, 0x03, 0xb7, 0xfb, 0xc0, 0x08, 0xb4, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x09, 0x08, 0x02, 0x09, 0x04, 0x02, 0x08, 0x09, 0x09, 0x09, 0x02, 0x38, 0x1f, 0x09, 0x09, 0x3d, 0x10, 0x25, 0xec, 0x06, 0x35, - 0x15, 0xce, 0x30, 0xeb, 0x30, 0x04, 0xc8, 0x30, 0xe9, 0x30, 0xa4, 0x28, 0x13, 0xfb, 0x30, 0x04, 0xa6, 0x30, 0xa7, 0x30, 0xb9, 0x20, 0x0f, 0xd5, - 0x30, 0x55, 0xa1, 0x28, 0x2f, 0xec, 0x05, 0x28, 0x27, 0x4e, 0x4f, 0x17, 0x74, 0x27, 0x0d, 0x16, 0x20, 0x00, 0x52, 0x27, 0x13, 0x69, 0x2f, 0x9b, - 0x37, 0xa3, 0x57, 0xaf, 0x2f, 0xc7, 0x73, 0x2f, 0x9b, 0x70, 0x27, 0x27, 0x3e, 0x15, 0x04, 0x76, 0xa7, 0x30, 0x73, 0x75, 0xe9, 0x2f, 0xa9, 0x5f, - 0x15, 0x38, 0x1d, 0x64, 0x2f, 0xb3, 0x2d, 0x60, 0x97, 0x75, 0x64, 0x00, 0x40, 0x89, 0x03, 0xb8, 0x39, 0x70, 0x67, 0x72, 0x28, 0x0f, 0x65, 0x40, - 0xfd, 0xb6, 0x90, 0xfb, 0x66, 0x4f, 0x0f, 0x04, 0xd8, 0x23, 0x52, 0x4f, 0x79, 0x9f, 0x91, 0x53, 0xb7, 0x2f, 0xbf, 0x74, 0x2f, 0x89, 0x5f, 0x8f, - 0x72, 0x2f, 0xa7, 0x39, 0xa7, 0x50, 0x87, 0xfb, 0x3e, 0x45, 0xb0, 0x99, 0x03, 0x38, 0x3b, 0xf0, 0x7f, 0x3e, 0x0b, 0x6c, 0x2e, 0x19, 0x72, 0x17, - 0xe0, 0xb2, 0x0b, 0x03, 0x90, 0x75, 0x9f, 0xff, 0x17, 0x53, 0xb1, 0x83, 0x35, 0x00, 0x83, 0x2d, 0x00, 0x01, 0x5a, 0xaf, 0x65, 0x79, 0x04, 0x72, - 0xd5, 0x6c, 0x26, 0x4f, 0x05, 0xdb, 0x19, 0x78, 0xb1, 0x00, 0x74, 0xb9, 0xb8, 0xd2, 0x7c, 0xb7, 0x78, 0xc7, 0x00, 0xa0, 0xbc, 0xa4, 0xc2, 0xb8, - 0xd2, 0x14, 0xd3, 0x3a, 0x0c, 0xb8, 0x05, 0xb8, 0x23, 0x33, 0x7f, 0x72, 0xe9, 0x52, 0x2f, 0x95, 0x6a, 0xbd, 0x2f, 0x9b, 0x6c, 0x43, 0x0d, 0xb2, - 0xfb, 0x04, 0x92, 0x89, 0x52, 0x7f, 0xe2, 0xa1, 0xff, 0x6a, 0x6f, 0xe1, 0xfd, 0x72, 0x73, 0x65, 0x23, 0x0f, 0xe1, 0x04, 0x04, 0x09, 0x21, 0x0a, - 0x04, 0x35, 0x04, 0x32, 0x20, 0x03, 0x40, 0x28, 0x1b, 0x4b, 0x2a, 0x04, 0x39, 0x28, 0x1b, 0x20, 0x20, 0x11, 0x39, 0x28, 0x29, 0x2d, 0x20, 0x00, - 0x12, 0x20, 0x1b, 0x41, 0x04, 0x42, 0x04, 0x44, 0xb8, 0x28, 0x2d, 0x3b, 0x04, 0x68, 0x27, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x0a, - 0x0a, 0x14, 0x0a, 0x0b, 0x0b, 0x30, 0x04, 0x0e, 0x30, 0x0a, 0x0a, 0x70, 0x25, 0x24, 0xd1, 0x2b, 0x0d, 0x0c, 0x4e, 0x58, 0x11, 0xe9, 0x28, 0x15, - 0x63, 0xc8, 0x28, 0x17, 0x38, 0x0f, 0xeb, 0x30, 0xc4, 0x05, 0x08, 0x0d, 0xd7, 0x97, 0xd7, 0x58, 0x0b, 0x94, 0x8d, 0x50, 0x48, 0x09, 0x61, 0x28, - 0x2d, 0x38, 0x25, 0x30, 0x07, 0xfe, 0x04, 0x9f, 0xc3, 0x00, 0x18, 0x17, 0x00, 0x10, 0x7d, 0x04, 0xf0, 0xff, 0x58, 0x0f, 0xb0, 0xff, 0x58, 0x11, - 0x7a, 0xef, 0x05, 0x41, 0x7f, 0xb8, 0x17, 0x00, 0x31, 0x7b, 0x6f, 0x06, 0xc0, 0x7f, 0x36, 0x27, 0x04, 0xbf, 0xc9, 0x38, 0x15, 0x00, 0x70, 0x51, - 0x2d, 0x00, 0x6e, 0x66, 0xd5, 0x6c, 0x09, 0x14, 0x5c, 0x28, 0x83, 0x05, 0xd8, 0x15, 0x00, 0x00, 0x38, 0x11, 0x27, 0x80, 0xb7, 0x38, 0x0f, 0x20, - 0xce, 0x05, 0xb8, 0x0f, 0x9b, 0x17, 0xf8, 0x0b, 0xbe, 0x53, 0x7d, 0x74, 0x2b, 0x95, 0x05, 0x53, 0xff, 0xb8, 0x17, 0x06, 0x11, 0xff, 0x78, 0x05, - 0x3b, 0x8a, 0x27, 0xfb, 0x3d, 0x04, 0x34, 0x28, 0x0d, 0x1f, 0x68, 0x07, 0x4c, 0x39, 0x04, 0x46, 0x04, 0x28, 0x07, 0x08, 0x34, 0xff, 0x10, 0x0e, - 0xb0, 0x7f, 0x0b, 0x0b, 0x38, 0x15, 0x80, 0x70, 0x04, 0x0b, 0x0b, 0x8e, 0x23, 0xdf, 0x05, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0xb6, 0x30, 0xfc, 0x28, - 0x09, 0x58, 0x17, 0xd7, 0x05, 0xf5, 0x13, 0x3f, 0xff, 0x53, 0x2f, 0xa9, 0x61, 0x2f, 0x99, 0x7c, 0xa3, 0x06, 0x30, 0x7f, 0x78, 0x72, 0x2f, 0xb1, - 0x04, 0x98, 0x79, 0x09, 0x10, 0xff, 0x0e, 0xb1, 0x7f, 0x28, 0x84, 0x14, 0x61, 0x5c, 0x06, 0x32, 0xf7, 0x7f, 0xff, 0x90, 0xc7, 0x7c, 0xb9, 0x38, - 0x17, 0xd1, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x21, 0x28, 0x0f, 0x30, 0x04, 0x40, 0x05, 0x28, 0x01, 0xca, 0x10, 0x00, 0x93, 0xff, 0x10, 0x06, - 0xb0, 0xff, 0x0c, 0x0c, 0x20, 0x01, 0x0e, 0x30, 0x05, 0x0b, 0x8a, 0x40, 0x0a, 0x02, 0x23, 0xfa, 0x2b, 0x0d, 0x0e, 0x28, 0x17, 0xaf, 0x3a, 0x30, - 0xbb, 0x28, 0x15, 0x06, 0x75, 0x1b, 0x38, 0x17, 0x78, 0x2e, 0x93, 0x6e, 0x3a, 0x00, 0x79, 0x06, 0xa0, 0x7f, 0x06, 0x78, 0x15, 0x59, 0x17, 0x63, - 0x2c, 0x33, 0x73, 0xde, 0x4f, 0xb7, 0x06, 0x59, 0x97, 0x73, 0x2e, 0x1b, 0x31, 0x81, 0x3f, 0xb1, 0x06, 0x3a, 0x17, 0x6a, 0xc2, 0x06, 0x80, 0x7d, - 0x38, 0x17, 0x4b, 0x51, 0xee, 0x68, 0x06, 0x98, 0x19, 0x91, 0x1b, 0xc7, 0x3c, 0xc1, 0x06, 0x78, 0x13, 0x7b, 0x97, 0x6b, 0x06, 0x82, 0x7d, 0x73, - 0xff, 0x60, 0xf3, 0x06, 0x81, 0xff, 0x38, 0x17, 0x3a, 0x04, 0x41, 0x04, 0x3e, 0x03, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x08, 0x1f, 0x07, - 0x54, 0xff, 0x94, 0x10, 0x0e, 0x90, 0x7f, 0x0d, 0x0d, 0x20, 0x01, 0x0c, 0x80, 0x04, 0x0d, 0x4a, 0x02, 0x24, 0xc4, 0x09, 0x00, 0x00, 0x0f, 0x88, - 0x17, 0xfb, 0x20, 0x30, 0xa2, 0x28, 0x1d, 0xcf, 0x30, 0xeb, 0x30, 0xc8, 0xc5, 0x05, 0xc8, 0x23, 0xb8, 0x17, 0x2d, 0x00, 0x41, 0x2f, 0x33, 0x68, - 0x2f, 0xc1, 0x1f, 0x6c, 0x00, 0x74, 0x05, 0xe8, 0x17, 0x06, 0x30, 0x7b, 0x00, 0x18, 0x17, 0x06, 0x11, 0x01, 0xf8, 0x17, 0xf0, 0x05, 0xf1, 0x83, - 0xd8, 0x17, 0x06, 0x12, 0x01, 0x58, 0x17, 0x2d, 0x00, 0x89, 0x5b, 0x0c, 0xc8, 0x54, 0x79, 0x72, 0x06, 0x1b, 0x1d, 0x38, 0x17, 0x48, 0xc5, 0x0f, - 0x60, 0xd5, 0xb8, 0xd2, 0x06, 0x58, 0x1d, 0xb8, 0x17, 0x06, 0x93, 0x7f, 0x78, 0x17, 0xc5, 0x06, 0x14, 0x01, 0xf8, 0x17, 0x2d, 0x00, 0x10, 0x28, - 0x21, 0x45, 0x28, 0x2d, 0x07, 0x3b, 0x04, 0x4c, 0x04, 0x42, 0x05, 0x08, 0x27, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x28, 0x0e, 0x0e, 0x20, - 0x01, 0x0d, 0x80, 0x04, 0x0e, 0x11, 0x25, 0x00, 0x42, 0x08, 0x00, 0x00, 0x10, 0x4e, 0xb7, 0x30, 0x00, 0xe5, 0x30, 0xec, 0x30, 0xb9, 0x30, 0xd3, - 0x30, 0x58, 0xd2, 0x28, 0x1b, 0xdb, 0x28, 0x17, 0x30, 0x11, 0xbf, 0x30, 0xa4, 0xd4, 0x28, 0x2b, 0x05, 0x3d, 0x45, 0x53, 0x4f, 0x2d, 0x6c, 0x2f, - 0xb1, 0x73, 0x00, 0x55, 0x77, 0x2e, 0xb1, 0x67, 0x28, 0x1d, 0x48, 0x2e, 0xbd, 0x6c, 0x2f, 0x41, 0x58, 0x74, 0x2f, 0xc7, 0x69, 0x04, 0xef, 0x45, - 0x10, 0x0e, 0xf0, 0x7f, 0xf3, 0x77, 0xd2, 0x02, 0x52, 0xcf, 0x82, 0xca, 0x76, 0x3c, 0x28, 0x1b, 0x77, 0x00, 0x83, 0x14, 0x5c, 0xaf, 0x65, 0xf0, - 0x6c, 0xe0, 0x40, 0x56, 0x05, 0x9b, 0x19, 0x90, 0xc2, 0x08, 0xb8, 0xa4, 0xc2, 0x00, 0x44, 0xbe, 0x88, 0xd7, 0x40, 0xd6, 0x88, 0xc2, 0x0b, 0xc0, - 0xd0, 0x78, 0xc7, 0x05, 0xd8, 0x1f, 0x53, 0x43, 0x7b, 0x73, 0x7d, 0x68, 0x6a, 0x28, 0x23, 0x0d, 0xd3, 0x7f, 0x28, 0x27, 0xff, 0x35, 0x04, 0x37, - 0x2b, 0x04, 0x32, 0x28, 0x15, 0x33, 0x28, 0x15, 0x13, 0x28, 0x21, 0x38, 0x11, 0x46, 0x48, 0x28, 0x13, 0x35, 0x04, 0x39, 0x28, 0x2d, 0x10, 0x1c, - 0xd4, 0xff, 0x0f, 0x50, 0x0f, 0x70, 0x01, 0x10, 0x40, 0x0a, 0xa0, 0x26, 0x32, 0x07, 0x04, 0x00, 0x00, 0x11, 0x4e, 0xc6, 0x28, 0x17, 0xfc, 0x30, - 0x5a, 0xea, 0x28, 0x05, 0xb2, 0x05, 0x68, 0x09, 0xdf, 0xff, 0x54, 0x2f, 0xa3, 0x75, 0x2d, 0x00, 0x72, 0x47, 0xff, 0x67, 0x4e, 0xb1, 0x06, 0xb0, - 0x7f, 0x65, 0x06, 0x0d, 0xb0, 0xbe, 0x30, 0xff, 0xfc, 0xa0, 0x7f, 0x04, 0xd9, 0x05, 0x00, 0x31, 0x7f, 0x06, 0xb1, 0x7d, 0x07, 0x10, 0x7f, 0xfe, - 0x06, 0x56, 0x97, 0x67, 0x39, 0x68, 0x06, 0x12, 0xf7, 0x7f, 0xff, 0x80, 0x06, 0xd2, 0xc1, 0xb9, 0x90, 0xac, 0x05, 0xd8, 0x0b, 0x08, 0x12, 0x7f, - 0xed, 0x82, 0x06, 0x82, 0x7f, 0x22, 0x04, 0x4e, 0x04, 0x40, 0x28, 0x13, 0x3d, 0x8e, 0x28, 0x15, 0x38, 0x04, 0x4f, 0x04, 0xe8, 0x05, 0x08, 0xf4, - 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x10, 0x51, 0x10, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x3f, 0x24, 0xd6, 0x28, 0x17, 0x80, 0x00, 0x1f, 0xff, 0x01, 0x03, - 0x04, 0x03, 0x06, 0x04, 0x01, 0x80, 0x30, 0x06, 0x03, 0x01, 0x01, 0x01, 0x01, 0x02, 0x07, 0x04, 0x08, 0x07, 0x02, 0x08, 0x02, 0x30, 0x06, 0x07, - 0x02, 0x12, 0x02, 0x02, 0x02, 0x30, 0x14, 0x03, 0x01, 0x30, 0x1b, 0x02, 0x80, 0x20, 0x05, 0x03, 0x03, 0x04, 0x02, 0x03, 0x02, 0x05, 0x20, 0x03, - 0x04, 0x20, 0x06, 0x01, 0x02, 0x04, 0x04, 0x04, 0x22, 0x04, 0x05, 0x20, 0x01, 0x07, 0x05, 0x05, 0x30, 0x06, 0x04, 0x91, 0x20, 0x06, 0x05, 0x06, - 0x20, 0x01, 0x08, 0x06, 0x06, 0x30, 0x06, 0x48, 0x05, 0x20, 0x06, 0x06, 0x07, 0x20, 0x01, 0x01, 0x07, 0x07, 0xa1, 0x30, 0x06, 0x06, 0x20, 0x06, - 0x07, 0x08, 0x09, 0x09, 0x30, 0x02, 0x38, 0x08, 0x08, 0x20, 0x06, 0x20, 0x05, 0x20, 0x06, 0x02, 0x09, 0x04, 0x04, 0x02, 0x09, 0x09, 0x09, 0x02, - 0x30, 0x17, 0x09, 0x09, 0x02, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x30, 0x04, 0x0e, 0xf0, 0x30, 0x0a, 0x20, 0x0b, 0x30, 0x0d, 0x70, 0x04, 0x0b, - 0x0b, 0x0c, 0x0c, 0xb3, 0x20, 0x01, 0x0e, 0x30, 0x05, 0x50, 0x0a, 0x0d, 0x0d, 0x20, 0x01, 0x40, 0x05, 0x9f, 0x50, 0x0a, 0x0e, 0x0e, 0x20, 0x01, - 0x40, 0x05, 0x50, 0x0a, 0xf9, 0x1f, 0xf1, 0x17, 0x80, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, - 0x30, 0x01, 0x4f, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x01, 0x1b, 0xde, 0x10, 0x00, 0x00, 0x00, - 0x02, 0x4f, 0xa2, 0x30, 0xc3, 0x30, 0xc6, 0x04, 0x30, 0xa3, 0x30, 0xab, 0x30, 0x06, 0x58, 0x1f, 0x41, 0x00, 0x41, 0x74, 0x20, 0x01, 0x69, 0x00, - 0x63, 0x00, 0x61, 0x06, 0xc0, 0x7f, 0x05, 0x71, 0x00, 0x75, 0x00, 0x65, 0x06, 0xa0, 0xff, 0x6b, 0x06, 0xe0, 0xff, 0xa0, 0x06, 0x71, 0x7f, 0xc1, - 0x06, 0xc1, 0xfd, 0x00, 0x00, 0x3f, 0x96, 0xd0, 0x01, 0x63, 0x61, 0x53, 0x27, 0x59, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0x03, 0x44, 0xc5, 0xf0, 0xd2, - 0x74, 0xce, 0x06, 0x9b, 0x9b, 0x06, 0xf2, 0x7f, 0x88, 0x06, 0xf1, 0xff, 0x10, 0x04, 0x42, 0x20, 0x01, 0x38, 0x04, 0x3a, 0x19, 0x04, 0x30, 0x04, - 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x01, 0xe0, 0x01, 0x80, 0x48, 0x17, 0x03, 0x4f, 0x2d, 0x4e, 0x2e, 0x59, 0xae, 0x02, 0x30, 0xea, - 0x30, 0xb7, 0x30, 0xe3, 0x06, 0x48, 0x19, 0x43, 0xa8, 0x27, 0x8d, 0x6e, 0x28, 0x1b, 0x72, 0x28, 0x17, 0x6c, 0x00, 0x20, 0x2b, 0x00, 0x47, 0x20, - 0x09, 0x65, 0x27, 0xa1, 0x63, 0x05, 0x67, 0xa5, 0x30, 0x6f, 0x5b, 0xe8, 0x40, 0x6d, 0x2d, 0xe0, 0x8b, 0x05, 0x58, 0x25, 0x4d, 0x29, 0x13, 0x39, - 0x19, 0x55, 0x65, 0x20, 0xfd, 0x67, 0x21, 0x05, 0x69, 0x40, 0xfb, 0x68, 0x41, 0x15, 0x46, 0x6c, 0x29, 0x2b, 0x6e, 0x00, 0x64, 0x05, 0x00, 0xff, - 0x31, 0x6d, 0x69, 0xb8, 0x29, 0x97, 0x20, 0x06, 0x21, 0x01, 0x00, 0xb0, 0x7f, 0x05, 0x3f, 0xc9, 0x2d, 0x4e, 0x0c, 0x10, 0x5e, 0x4a, 0x81, 0x06, - 0x98, 0x17, 0x11, 0xc9, 0x80, 0xbd, 0x00, 0x20, 0x00, 0xf8, 0xad, 0xac, 0xb9, 0xa4, 0xc2, 0xdb, 0x06, 0xf3, 0x7f, 0x33, 0x81, 0x2d, 0x43, 0x81, - 0x32, 0x85, 0x6b, 0x05, 0x42, 0x83, 0x33, 0xef, 0x41, 0xe9, 0x06, 0xa1, 0xff, 0x26, 0x04, 0x35, 0x04, 0x3d, 0x28, 0x1b, 0x44, 0x40, 0x28, 0x17, - 0x3b, 0x04, 0x4c, 0x20, 0x0b, 0x30, 0x04, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x13, 0x20, 0x11, 0x35, 0x04, 0x5c, 0x46, 0x28, 0x31, 0x4f, 0x04, 0xc8, - 0x2f, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x02, 0x05, 0x06, 0x05, 0x06, 0x06, 0x02, 0x20, 0x06, 0x0a, 0x20, 0x04, 0x00, 0x02, 0x02, - 0xa8, 0x1b, 0xf3, 0x0f, 0x00, 0x00, 0x40, 0x04, 0x48, 0x17, 0xde, 0x30, 0xb1, 0x30, 0xc9, 0x30, 0x1b, 0xcb, 0x30, 0xa2, 0x06, 0x28, 0x19, 0xf8, - 0x17, 0x4d, 0x2f, 0x37, 0x38, 0x13, 0x1e, 0x64, 0x00, 0x6f, 0x28, 0x2f, 0x36, 0xad, 0x04, 0xf7, 0x97, 0x30, 0x6f, 0xe9, 0xb5, 0x40, 0x6f, 0x69, - 0x28, 0xa1, 0x05, 0xf8, 0x1f, 0x5a, 0xc9, 0x17, 0x6d, 0x2f, 0xb5, 0xff, 0x35, 0x8f, 0x70, 0xfd, 0x39, 0x33, 0x05, 0x30, 0xff, 0xb1, 0x6f, 0x05, - 0xd8, 0x1d, 0x01, 0x10, 0x7f, 0x04, 0xf8, 0x17, 0x03, 0x6c, 0x9a, 0x76, 0x51, 0x7f, 0x98, 0x06, 0x78, 0x19, 0x58, 0x17, 0x00, 0xc8, 0xb9, 0x00, - 0xcf, 0xc4, 0xb3, 0xc8, 0xb2, 0x35, 0x44, 0xc5, 0x07, 0x18, 0x17, 0xf3, 0x81, 0xeb, 0x05, 0x62, 0x7f, 0xf3, 0x06, 0x41, 0xff, 0xa8, 0x00, 0x78, - 0x17, 0x1c, 0x28, 0x27, 0x3a, 0x28, 0x33, 0x34, 0x04, 0x3e, 0xf0, 0x28, 0x37, 0x04, 0x98, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, - 0x03, 0x09, 0x0d, 0x14, 0x09, 0x09, 0x03, 0x20, 0x06, 0x0b, 0x20, 0x04, 0x03, 0x03, 0x00, 0xe2, 0x1c, 0x55, 0x10, 0x00, 0x00, 0x05, 0x4f, 0x07, - 0xaf, 0x30, 0xec, 0x30, 0xbf, 0x06, 0x28, 0x0f, 0x9c, 0xaf, 0x3e, 0xaf, 0xd7, 0x3f, 0x2f, 0x06, 0x90, 0x7f, 0xe8, 0x06, 0xa0, 0x7f, 0x4b, 0x60, - 0xff, 0x04, 0xf8, 0xff, 0x00, 0xf1, 0x7f, 0x81, 0x0e, 0x70, 0x7f, 0x4b, 0x51, 0xcc, 0x91, 0x79, 0x72, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x6c, - 0xd0, 0x08, 0xb8, 0xc0, 0xd0, 0xd7, 0x06, 0x93, 0x7f, 0x0e, 0xf2, 0x7f, 0x1a, 0x28, 0x11, 0x38, 0x28, 0x17, 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0xb0, - 0x7f, 0x00, 0x04, 0x04, 0x02, 0x04, 0x02, 0x02, 0x04, 0x04, 0x04, 0x06, 0x02, 0x06, 0x04, 0x04, 0x20, 0x01, 0x20, 0x19, 0x00, 0xdf, 0x11, 0x00, - 0x00, 0x06, 0x4f, 0x71, 0x67, 0x00, 0xde, 0x30, 0xb1, 0x30, 0xc9, 0x30, 0xcb, 0x30, 0x00, 0xa2, 0x30, 0xfb, 0x30, 0xc8, 0x30, 0xe9, 0x30, 0x6b, - 0xad, 0x20, 0x09, 0x05, 0x9d, 0x39, 0x45, 0x2f, 0xaf, 0x73, 0x2f, 0x9b, 0x00, 0x3b, 0x29, 0x50, 0x20, 0x2f, 0xcb, 0x6e, 0x2f, 0xc9, 0x20, 0x00, - 0x54, 0x00, 0x75, 0x68, 0x4f, 0xbd, 0x3e, 0xd9, 0x04, 0x3f, 0x2f, 0xe9, 0x4f, 0xa1, 0x69, 0x2f, 0xb9, 0x5e, 0x65, 0x2d, 0x31, 0x4f, 0x2f, 0xbd, - 0x5f, 0xab, 0x37, 0xaf, 0x3f, 0x31, 0x2d, 0xaa, 0x48, 0xbb, 0x2d, 0x04, 0x20, 0x87, 0x4f, 0x40, 0xfd, 0x6d, 0x2f, 0xb5, 0x6b, 0xc5, 0xaf, 0xb5, - 0x3f, 0xaf, 0x20, 0x00, 0x75, 0xe0, 0xfd, 0x6b, 0x60, 0x95, 0xd7, 0x04, 0xff, 0xaf, 0x00, 0x10, 0xff, 0x20, 0x40, 0x03, 0x54, 0x61, 0x83, 0x03, - 0xbc, 0xc5, 0x01, 0x30, 0x7f, 0x10, 0x20, 0x00, 0x79, 0x04, 0x60, 0x7d, 0x00, 0x00, 0x1c, 0x4e, 0x00, 0x6c, 0x9a, 0x76, 0x51, 0x7f, 0x98, 0x8c, - 0x54, 0x02, 0x72, 0x82, 0xf7, 0x96, 0xaf, 0x65, 0x05, 0xf8, 0x21, 0xd9, 0x00, 0xb3, 0x80, 0xbd, 0x20, 0x00, 0xc8, 0xb9, 0x00, 0x00, 0xcf, 0xc4, - 0xb3, 0xc8, 0xb2, 0x44, 0xc5, 0xb8, 0x01, 0xd2, 0x7c, 0xb7, 0xa4, 0xd0, 0x44, 0xc5, 0x05, 0x7b, 0xa9, 0x6b, 0x4f, 0x2e, 0x97, 0x33, 0x7f, 0x2d, - 0x00, 0x0e, 0xa9, 0xeb, 0x41, 0xf5, 0x32, 0x87, 0xf6, 0x93, 0x7d, 0x30, 0x15, 0x04, 0x33, 0x7f, 0x3f, 0x1f, 0xf3, 0x00, 0xa1, 0xff, 0x72, 0x7d, - 0xe1, 0x82, 0x04, 0x01, 0xff, 0x12, 0x04, 0x3e, 0x04, 0x41, 0x28, 0x17, 0x3e, 0x00, 0x04, 0x47, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x4f, 0x08, 0x04, - 0x20, 0x00, 0x1c, 0x20, 0x07, 0x3a, 0x04, 0x35, 0x2d, 0x04, 0x34, 0x20, 0x1b, 0x3d, 0x28, 0x35, 0x30, 0x13, 0x38, 0x20, 0x17, 0x7c, 0x24, 0x28, - 0x43, 0x30, 0x19, 0x30, 0x11, 0x0b, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x05, 0x00, 0x0b, 0x07, 0x0b, 0x0b, 0x05, 0x05, 0x08, 0x0b, 0x10, - 0x02, 0x05, 0x05, 0x20, 0x01, 0x3e, 0x1d, 0x13, 0x12, 0x00, 0x00, 0x00, 0x07, 0x4f, 0xa4, 0x30, 0xd4, 0x30, 0x1a, 0xed, 0x30, 0xb9, 0x05, 0xa8, - 0x09, 0xf8, 0x17, 0x70, 0x28, 0x03, 0x72, 0xaf, 0x27, 0x03, 0x73, 0x06, 0x4f, 0xb1, 0xc9, 0x60, 0x7f, 0x06, 0x7b, 0xaf, 0x06, 0xf0, 0xff, 0x71, - 0x7f, 0x60, 0x6f, 0x06, 0xe1, 0xff, 0x06, 0x70, 0x7f, 0x0a, 0x4f, 0x87, 0x5e, 0x81, 0x60, 0x9c, 0x06, 0x18, 0x0f, 0x7f, 0xff, 0xd0, 0xc5, 0x3c, - 0xd5, 0xe8, 0x18, 0xb8, 0xa4, 0xc2, 0x0e, 0x73, 0x7f, 0x06, 0xf2, 0x7f, 0x2d, 0x04, 0x3f, 0xb8, 0x27, 0xf9, 0x40, 0x03, 0x87, 0xe7, 0x0a, 0x73, - 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x06, 0x06, 0x05, 0x80, 0x28, 0x10, 0x06, 0x06, 0x04, 0x05, 0x0c, 0x06, 0x06, 0x80, 0x20, 0x01, 0x32, 0x1c, 0xd3, - 0x0e, 0x00, 0x00, 0x08, 0x82, 0x28, 0x17, 0xaa, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x88, 0x17, 0x49, 0xd6, 0x8e, 0xa7, 0x3f, 0x21, 0x49, 0x2f, 0x3d, - 0x6c, 0x6b, 0x25, 0x05, 0x58, 0x27, 0xce, 0xb6, 0x4f, 0x0f, 0x73, 0x40, 0x7b, 0x9f, 0xab, 0x6e, 0x40, 0x13, 0x05, 0xb0, 0xff, 0x73, 0xaa, 0x2f, - 0xb5, 0x68, 0x4f, 0x99, 0x49, 0x2f, 0xb7, 0x73, 0x2f, 0xc1, 0x6c, 0xdf, 0x2f, 0xbf, 0x05, 0x31, 0x7f, 0x73, 0x2f, 0xa9, 0x31, 0x03, 0xb1, 0x01, - 0x05, 0xb1, 0xff, 0x51, 0xf1, 0xac, 0x31, 0x81, 0x4a, 0x6e, 0x33, 0x63, 0x4d, 0x43, 0x05, 0x5f, 0xb5, 0x31, 0x72, 0x00, 0x65, 0x59, 0x3c, 0x5c, - 0x9a, 0x4e, 0xa4, 0x7f, 0x20, 0x9b, 0x5c, 0x06, 0x38, 0x1b, 0x74, 0xc7, 0x24, 0xc6, 0xc8, 0x11, 0xb2, 0x44, 0xc5, 0x2e, 0xa5, 0xc8, 0xc4, 0xb3, - 0x06, 0x93, 0x7f, 0xbd, 0x92, 0x7f, 0x45, 0x2f, 0xb5, 0x73, 0x83, 0x3f, 0xb3, 0x04, 0xf3, 0xff, 0x6c, 0x2f, 0x0b, 0x82, 0x06, 0x91, 0xff, 0x18, - 0x04, 0x3e, 0x04, 0x3d, 0x28, 0x19, 0x47, 0x02, 0x04, 0x35, 0x04, 0x41, 0x04, 0x3a, 0x28, 0x23, 0x35, 0x0a, 0x04, 0x20, 0x00, 0x3e, 0x20, 0x0b, - 0x42, 0x28, 0x2d, 0x3e, 0x0e, 0x04, 0x32, 0x04, 0x30, 0x04, 0xc8, 0x33, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x07, 0x00, 0x07, 0x08, 0x03, - 0x08, 0x08, 0x07, 0x07, 0x05, 0x08, 0x08, 0x05, 0x07, 0x07, 0x20, 0x01, 0x2c, 0x1c, 0x29, 0x80, 0x28, 0x17, 0x09, 0x4f, 0x17, 0x53, 0xa8, 0x30, - 0xfc, 0x28, 0x30, 0xb2, 0x06, 0x88, 0x17, 0x4e, 0x2e, 0xa9, 0x72, 0x00, 0x74, 0x8b, 0x27, 0x13, 0x20, 0x00, 0x41, 0x2f, 0xb5, 0x67, 0x2f, 0xb9, - 0x38, 0x23, 0xa8, 0x05, 0x7f, 0xbe, 0xc9, 0x20, 0x71, 0xe9, 0x28, 0x19, 0x2d, 0x00, 0x53, 0xb5, 0x28, 0x1f, 0x70, 0x20, 0x89, 0x38, 0x17, 0x74, - 0x2f, 0xc1, 0x69, 0x48, 0xb1, 0x6b, 0x61, 0x48, 0x37, 0x04, 0xb0, 0xff, 0xf6, 0x2f, 0xad, 0x64, 0x29, 0x0d, 0x37, 0x0f, 0xae, 0x58, 0x19, 0xc4, - 0x21, 0x05, 0xe4, 0x48, 0x2b, 0x05, 0x3f, 0xaf, 0x31, 0x71, 0x6f, 0xde, 0x29, 0x93, 0x30, 0xff, 0x74, 0x06, 0x00, 0xff, 0xd0, 0x7f, 0x00, 0x51, - 0x7f, 0x04, 0xbf, 0xc7, 0x17, 0x01, 0x53, 0x31, 0x72, 0x34, 0x74, 0x77, 0x6d, 0x06, 0x38, 0x13, 0x80, 0x3f, 0xff, 0x81, 0xbd, 0x80, 0xbd, 0x20, - 0x00, 0xd0, 0x1b, 0xc5, 0x8c, 0xac, 0x06, 0x93, 0x7f, 0x33, 0x81, 0x64, 0x23, 0x01, 0x52, 0x0b, 0x6c, 0xef, 0x05, 0xc8, 0x23, 0x52, 0x7f, 0x75, - 0x82, 0x7f, 0x05, 0xd1, 0xfd, 0x00, 0x00, 0x55, 0x21, 0x28, 0x0f, 0x32, 0x28, 0x13, 0x40, 0x28, 0x1d, 0x4b, 0x48, 0x13, 0x17, 0x2d, 0x04, 0x33, - 0x28, 0x23, 0x39, 0x05, 0x68, 0x25, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x08, 0x08, 0x04, 0x06, 0x04, 0x04, 0x28, 0x19, 0x20, 0x03, - 0x80, 0x30, 0x01, 0xce, 0x1b, 0xe1, 0x12, 0x00, 0x00, 0x0a, 0x00, 0x4f, 0xda, 0x30, 0xed, 0x30, 0xdd, 0x30, 0xcd, 0x0a, 0x30, 0xbd, 0x30, 0xb9, - 0x06, 0x48, 0x1b, 0x50, 0x4f, 0x19, 0x6f, 0xf6, 0x27, 0x91, 0x3f, 0xad, 0x5f, 0xa7, 0x05, 0xbe, 0xaf, 0x50, 0x28, 0x15, 0xb0, 0x7f, 0xe8, 0xec, - 0x06, 0x00, 0x7f, 0x00, 0x10, 0xff, 0x06, 0xf1, 0x7f, 0x6f, 0x06, 0x81, 0xff, 0x05, 0xf0, 0x7d, 0x00, 0x00, 0x00, 0x2f, 0x4f, 0x57, 0x7f, 0x54, - 0x59, 0x3c, 0x5c, 0x20, 0x92, 0x64, 0x06, 0x58, 0x19, 0xa0, 0xd3, 0x5c, 0xb8, 0xf0, 0x01, 0xd3, 0x24, 0xb1, 0x8c, 0xc1, 0xa4, 0xc2, 0x07, 0x73, - 0x7f, 0x6a, 0x6f, 0x05, 0xa2, 0x83, 0x06, 0xf1, 0xff, 0x1f, 0x28, 0x17, 0x3b, 0x27, 0xf1, 0x3f, 0xae, 0x27, 0xf5, 0x3d, 0x28, 0x1b, 0x35, 0x28, - 0x0f, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x09, 0x02, 0x09, 0x0c, 0x08, 0x0c, 0x0c, 0x09, 0x20, 0x06, 0x07, 0x80, 0x20, 0x04, 0x09, 0x09, - 0xab, 0x1a, 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x0b, 0x4f, 0x57, 0x53, 0xa8, 0x30, 0xfc, 0x35, 0x30, 0xb2, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x53, 0x2f, - 0x95, 0x75, 0x06, 0xab, 0x2f, 0x51, 0xc9, 0x2f, 0x9b, 0xe9, 0x2f, 0xa5, 0x2d, 0x00, 0x4d, 0x28, 0x21, 0xb5, 0x3f, 0x25, 0x64, 0x05, 0x6f, 0x29, - 0x70, 0xff, 0xfc, 0x2d, 0xab, 0x6c, 0x2f, 0x9d, 0xae, 0x7d, 0xa3, 0xc4, 0x2f, 0xc1, 0xe4, 0x2f, 0xad, 0x05, 0x58, 0x1f, 0x9f, 0xaf, 0x4d, 0xf0, - 0x2f, 0xb7, 0x06, 0x10, 0xff, 0x00, 0xd0, 0x7f, 0x05, 0x1f, 0xc1, 0x57, 0x53, 0x31, 0x72, 0x08, 0x34, 0x74, 0x77, 0x6d, 0x06, 0x58, 0x15, 0x00, - 0x00, 0xa8, 0x00, 0xb0, 0x80, 0xbd, 0x20, 0x00, 0xd0, 0xc5, 0x8c, 0x5a, 0xac, 0x06, 0x53, 0x81, 0x5a, 0x2f, 0xab, 0x32, 0xf3, 0x2d, 0x6f, 0xb9, - 0xef, 0xd5, 0x2b, 0x97, 0x72, 0x89, 0x45, 0x2f, 0xb5, 0x6c, 0x4e, 0xbd, 0x64, 0x4f, 0xc7, 0xa2, 0x04, 0x92, 0x7f, 0x75, 0x06, 0x81, 0xff, 0x2e, - 0x04, 0x36, 0x28, 0x0f, 0x4b, 0x82, 0x28, 0x1d, 0x20, 0x00, 0x2d, 0x04, 0x33, 0x28, 0x25, 0x39, 0x8a, 0x28, 0x19, 0x3a, 0x04, 0x38, 0x40, 0x11, - 0x3e, 0x28, 0x25, 0x42, 0x23, 0x04, 0x40, 0x28, 0x37, 0x32, 0x04, 0x30, 0x04, 0x48, 0x2f, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, - 0x0a, 0x03, 0x09, 0x03, 0x03, 0x0a, 0x02, 0x0a, 0x0d, 0x03, 0x0d, 0x0a, 0x0a, 0x20, 0x01, 0xe9, 0x00, 0x19, 0x11, 0x14, 0x00, 0x00, 0x0c, 0x4f, - 0xc6, 0x02, 0x30, 0xc3, 0x30, 0xb5, 0x30, 0xea, 0x28, 0x1b, 0xa2, 0xad, 0x06, 0x48, 0x1b, 0x54, 0x47, 0x0d, 0x73, 0x2f, 0xa5, 0x37, 0x87, 0x79, - 0x06, 0xe0, 0x7f, 0x7d, 0x69, 0x05, 0xcb, 0xab, 0x00, 0x50, 0x7f, 0x05, 0x99, 0x13, 0x51, 0x7f, 0x71, 0x7d, 0x67, 0x48, 0x9d, 0x7c, 0x61, 0x06, - 0x01, 0xff, 0x3e, 0xa1, 0x51, 0x7b, 0x05, 0xf0, 0x7b, 0x3f, 0xff, 0x72, 0x82, 0x08, 0x28, 0x84, 0x29, 0x52, 0x06, 0x78, 0x15, 0x00, 0x00, 0x4c, - 0x01, 0xd1, 0xb4, 0xc0, 0xac, 0xb9, 0x44, 0xc5, 0x06, 0x7b, 0x97, 0xa2, 0xf2, 0xff, 0xeb, 0x06, 0x41, 0xff, 0x73, 0x00, 0xe1, 0x06, 0x62, 0x01, - 0x24, 0xa2, 0x28, 0x11, 0x41, 0x28, 0x09, 0x30, 0x04, 0x3b, 0x28, 0x0b, 0x4f, 0xe0, 0x04, 0x47, 0xfb, 0x09, 0x94, 0xff, 0x10, 0x0e, 0x10, 0x7f, - 0x0b, 0x0b, 0x0d, 0x0a, 0x0d, 0x00, 0x0d, 0x0b, 0x0b, 0x0a, 0x0d, 0x09, 0x0b, 0x0b, 0x80, 0x20, 0x01, 0x2f, 0x1c, 0xf1, 0x0f, 0x00, 0x00, 0x0d, - 0x08, 0x4f, 0x7f, 0x89, 0xae, 0x28, 0x15, 0xb7, 0x30, 0xe3, 0xea, 0x06, 0x48, 0x15, 0x2d, 0xaf, 0x48, 0x15, 0x74, 0x2f, 0x27, 0x47, 0x2f, 0xad, - 0x65, 0xb4, 0x2f, 0xb9, 0x63, 0x05, 0xc7, 0x9b, 0x30, 0x75, 0xe8, 0x40, 0x73, 0x2d, 0x00, 0x5b, 0x4f, 0x2f, 0xb3, 0x63, 0x4f, 0x31, 0x3d, 0x1d, - 0x74, 0x05, 0x4f, 0x31, 0x70, 0xff, 0x77, 0x67, 0x4f, 0xab, 0x30, 0xfd, 0x3d, 0xab, 0x6e, 0x8d, 0xa7, 0x05, 0x30, 0xff, 0x31, 0x73, 0xb8, 0x38, - 0x11, 0x20, 0x06, 0x21, 0x01, 0x01, 0x10, 0x7f, 0x04, 0xdf, 0xc5, 0x7f, 0x89, 0x0c, 0x10, 0x5e, 0x4a, 0x81, 0x06, 0x98, 0x17, 0x1c, 0xc1, 0x80, - 0xbd, 0x00, 0x20, 0x00, 0xf8, 0xad, 0xac, 0xb9, 0xa4, 0xc2, 0xb5, 0x06, 0xb3, 0x7f, 0x2d, 0x43, 0x7f, 0x3b, 0x17, 0x6b, 0x06, 0x02, 0x7f, 0xe9, - 0xc2, 0x7f, 0x8a, 0x05, 0xb1, 0xfd, 0x00, 0x00, 0x17, 0x28, 0x11, 0x3f, 0x28, 0x15, 0x34, 0x20, 0x04, 0x3d, 0x28, 0x1b, 0x4f, 0x04, 0x20, 0x00, - 0x13, 0x2e, 0x04, 0x40, 0x28, 0x2b, 0x46, 0x05, 0x68, 0x25, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x00, 0x0c, 0x07, 0x0b, 0x07, 0x07, - 0x0c, 0x0c, 0x0b, 0x08, 0x07, 0x03, 0x0c, 0x0c, 0x20, 0x01, 0x30, 0x1b, 0x75, 0xa0, 0x28, 0x17, 0x0e, 0x28, 0x17, 0xde, 0x30, 0xb1, 0x30, 0xc9, - 0x0d, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x48, 0x19, 0x98, 0x17, 0x4d, 0x2f, 0xb1, 0x8e, 0x38, 0x13, 0x64, 0x00, 0x6f, 0x2f, 0x33, 0x05, 0x7e, 0xb9, - 0x50, 0x75, 0xe9, 0xbb, 0x40, 0x75, 0x69, 0x2f, 0xab, 0x05, 0xf8, 0x1f, 0x79, 0x17, 0x6d, 0x2f, 0xb1, 0x35, 0x91, 0xfe, 0x70, 0xfd, 0x38, 0x99, - 0x05, 0x90, 0xff, 0xb1, 0x75, 0x05, 0xd8, 0x1d, 0x01, 0x70, 0x7f, 0x04, 0x98, 0x17, 0x6c, 0x06, 0x9a, 0x76, 0x51, 0x7f, 0x98, 0x06, 0x78, 0x19, - 0x58, 0x17, 0xc8, 0x00, 0xb9, 0x00, 0xcf, 0xc4, 0xb3, 0xc8, 0xb2, 0x44, 0x6b, 0xc5, 0x06, 0x98, 0x17, 0xf3, 0x7f, 0xeb, 0x05, 0xe2, 0x7f, 0xf3, - 0xc2, 0x7f, 0x05, 0x7a, 0x1b, 0xa8, 0x00, 0x18, 0x17, 0x1c, 0x28, 0x29, 0x3a, 0x28, 0x19, 0x34, 0x04, 0x3e, 0xf0, 0x28, 0x2b, 0x04, 0xf8, 0x1d, - 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x0d, 0x0a, 0x0c, 0x00, 0x0a, 0x0a, 0x0d, 0x0d, 0x0c, 0x0a, 0x04, 0x0d, 0x46, 0x0d, 0x20, 0x01, - 0xaa, 0x1c, 0x80, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x40, 0x01, 0xd0, 0x01, 0x02, 0x02, 0x06, 0x05, 0x06, 0x06, 0x50, 0x02, 0x20, 0x06, 0x0a, - 0x20, 0x04, 0x02, 0x02, 0x03, 0x03, 0x05, 0x09, 0x0d, 0x09, 0x09, 0x03, 0x20, 0x06, 0x0b, 0x20, 0x04, 0x00, 0x03, 0x03, 0x04, 0x04, 0x02, 0x04, - 0x02, 0x02, 0x01, 0x04, 0x04, 0x06, 0x02, 0x06, 0x04, 0x04, 0x20, 0x01, 0x00, 0x05, 0x05, 0x0b, 0x07, 0x0b, 0x0b, 0x05, 0x05, 0x04, 0x08, 0x0b, - 0x02, 0x05, 0x05, 0x20, 0x01, 0x06, 0x06, 0x40, 0x05, 0x20, 0x08, 0x06, 0x06, 0x04, 0x05, 0x0c, 0x06, 0x40, 0x06, 0x20, 0x01, 0x07, 0x07, 0x08, - 0x03, 0x08, 0x08, 0x01, 0x07, 0x07, 0x05, 0x08, 0x05, 0x07, 0x07, 0x20, 0x01, 0x1e, 0x08, 0x08, 0x04, 0x20, 0x38, 0x20, 0x11, 0x20, 0x03, 0x30, - 0x01, 0x09, 0x02, 0x09, 0x0c, 0x08, 0x0c, 0x0c, 0x09, 0x20, 0x06, 0x07, 0x83, 0x20, 0x04, 0x09, 0x09, 0x0a, 0x0a, 0x03, 0x20, 0x6d, 0x20, 0xb9, - 0x08, 0x03, 0x0d, 0x0a, 0x0a, 0x20, 0x01, 0x0b, 0x0b, 0x0d, 0x80, 0x20, 0xc5, 0x0b, 0x0b, 0x0a, 0x0d, 0x09, 0x0b, 0x0b, 0xf0, 0x20, 0x01, 0xf8, - 0xef, 0xf0, 0xe7, 0x3f, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, - 0x30, 0x01, 0x50, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xc5, 0x21, 0x91, 0x0d, 0x00, 0x00, 0x00, - 0x02, 0x50, 0xd6, 0x30, 0xc0, 0x30, 0xda, 0x04, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0x06, 0x58, 0x1f, 0x42, 0x00, 0x00, 0x75, 0x00, 0x64, 0x00, 0x61, - 0x00, 0x70, 0x00, 0x04, 0x65, 0x00, 0x73, 0x00, 0x74, 0x10, 0x16, 0x00, 0x7f, 0x03, 0x5e, 0x00, 0xbe, 0x8f, 0x69, 0x4f, 0xaf, 0x65, 0x02, 0x5e, - 0x80, 0x06, 0x5b, 0x1f, 0x80, 0xbd, 0xe4, 0xb2, 0x98, 0xd3, 0xa4, 0x17, 0xc2, 0xb8, 0xd2, 0x06, 0x73, 0x7f, 0x6f, 0x23, 0x79, 0x06, 0x93, 0x81, - 0xf3, 0xff, 0x40, 0x65, 0x05, 0xec, 0xa6, 0x11, 0x04, 0x43, 0x04, 0x34, 0x04, 0x00, 0x30, 0x04, 0x3f, 0x04, 0x35, 0x04, 0x48, 0x04, 0x22, 0x42, - 0x04, 0x10, 0x1d, 0xf4, 0xff, 0x01, 0x05, 0x05, 0x20, 0x01, 0x01, 0x24, 0x01, 0x04, 0x40, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x50, 0x00, 0xd0, - 0x30, 0xfc, 0x30, 0xc1, 0x30, 0xfb, 0x30, 0x00, 0xad, 0x30, 0xb7, 0x30, 0xe5, 0x30, 0xaf, 0x30, 0x08, 0xf3, 0x30, 0xde, 0x5d, 0x05, 0xd8, 0x17, - 0xe1, 0x00, 0x63, 0x82, 0x28, 0x11, 0x2d, 0x00, 0x4b, 0x00, 0x69, 0x28, 0x19, 0x6b, 0x83, 0x28, 0x27, 0x6e, 0x00, 0x20, 0x00, 0x43, 0x24, 0xaf, - 0x30, 0x09, 0x1c, 0x74, 0x00, 0x79, 0x06, 0x20, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x05, 0x90, 0x7f, 0xf4, 0x5d, 0x00, 0x47, 0x59, 0x2d, 0x00, 0xfa, - 0x57, 0xc0, 0x4e, 0x30, 0x54, 0x5b, 0x05, 0xd2, 0xf9, 0x6f, 0xaf, 0xbc, 0x58, 0xce, 0xa4, 0x00, 0xd0, 0x88, 0xc2, 0xe4, 0xcf, 0x20, 0x00, 0xfc, - 0x62, 0xc8, 0x06, 0x3b, 0x97, 0x08, 0x32, 0xff, 0x20, 0x00, 0x28, 0x24, 0x15, 0x6f, 0xd4, 0x24, 0x09, 0x3c, 0x33, 0x64, 0x28, 0xbb, 0x29, 0x04, - 0x88, 0x17, 0x30, 0x04, 0x01, 0x47, 0x04, 0x2d, 0x00, 0x1a, 0x04, 0x38, 0x28, 0x17, 0x5d, 0x3a, 0x28, 0x25, 0x3d, 0x05, 0xc8, 0x1b, 0x08, 0x54, - 0xff, 0x10, 0x0d, 0x90, 0x7f, 0x02, 0x38, 0x0c, 0x28, 0x01, 0x02, 0x20, 0x06, 0x02, 0x20, 0x05, 0x02, 0x02, 0x5a, 0x02, 0x21, 0x00, 0x0e, 0x00, - 0x00, 0x04, 0x28, 0x17, 0xe9, 0x0c, 0x30, 0xcb, 0x30, 0xe3, 0x05, 0xe8, 0x0d, 0xbf, 0xaf, 0x61, 0x00, 0x57, 0x72, 0x2f, 0xaf, 0x6e, 0x27, 0xff, - 0x61, 0x05, 0xa8, 0x0f, 0x00, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x80, 0x10, 0x06, 0x10, 0x7f, 0xf4, 0x5d, 0x70, 0x51, 0x3c, 0x5c, 0x9a, 0x40, 0x4e, - 0x06, 0x72, 0xff, 0x84, 0xbc, 0xec, 0xb7, 0x40, 0xb1, 0xf4, 0x06, 0x58, 0x13, 0x08, 0x12, 0xff, 0x05, 0x98, 0x0f, 0xb8, 0x17, 0x40, 0x28, 0x1b, - 0x3d, 0x04, 0x1d, 0x4c, 0x04, 0x4f, 0x05, 0xc8, 0x11, 0x08, 0x34, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x03, 0x38, 0x0c, 0x28, 0x02, 0x03, 0x20, 0x06, - 0x01, 0x20, 0x05, 0x03, 0x03, 0xc3, 0x00, 0x20, 0xf4, 0x0c, 0x00, 0x00, 0x05, 0x50, 0xd9, 0x08, 0x30, 0xfc, 0x30, 0xb1, 0x20, 0x03, 0xb7, 0x30, - 0xe5, 0x8b, 0x06, 0x48, 0x1b, 0x42, 0x00, 0xe9, 0x2f, 0xa3, 0xe9, 0x2f, 0xb1, 0x06, 0x18, 0x13, 0xe0, 0xd0, 0x7f, 0x06, 0x79, 0x17, 0x10, 0x06, - 0xd0, 0x7f, 0x1d, 0x8d, 0xef, 0x51, 0xc0, 0x80, 0x06, 0x88, 0x15, 0x00, 0x00, 0xa0, 0xbc, 0x00, 0xcf, 0xdc, 0x78, 0xc2, 0x06, 0xb8, 0x17, 0x07, - 0x72, 0xff, 0x06, 0x18, 0x13, 0x58, 0x17, 0x35, 0x04, 0x3a, 0xba, 0x20, 0x03, 0x48, 0x06, 0x28, 0x13, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, - 0x04, 0x38, 0x0c, 0x03, 0x40, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x30, 0x21, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x06, 0x50, 0xdc, 0x30, 0x40, - 0xeb, 0x28, 0x13, 0xe7, 0x30, 0xc9, 0x30, 0xfb, 0x30, 0x05, 0xa2, 0x30, 0xd0, 0x30, 0xa6, 0x28, 0x27, 0xa4, 0x20, 0x0b, 0x01, 0xbc, 0x30, 0xf3, - 0x30, 0xd7, 0x30, 0xec, 0x28, 0x35, 0x55, 0xf3, 0x04, 0xc8, 0x2f, 0x42, 0x2c, 0x1d, 0x72, 0x28, 0x15, 0x6f, 0x2c, 0x21, 0x04, 0x2d, 0x00, 0x41, - 0x00, 0x62, 0x2f, 0xbf, 0xfa, 0x00, 0x40, 0x6a, 0x20, 0x0b, 0x5a, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x17, 0x70, 0x00, 0x6c, 0x28, 0x39, 0x6e, 0x04, - 0x8b, 0x49, 0x01, 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x80, 0x10, 0x04, 0x70, 0x7f, 0x05, 0x53, 0x14, 0x5c, 0xcd, 0x7e, 0xb7, 0x00, 0x5f, 0x2d, 0x00, - 0x65, 0x59, 0x05, 0x53, 0x4c, 0x00, 0x4e, 0x0a, 0x4f, 0x2d, 0x00, 0xfe, 0x66, 0x6e, 0x10, 0x66, 0x26, 0x4f, 0x05, 0x5b, 0x25, 0xf4, 0xbc, 0x74, - 0xb9, 0x00, 0xfc, 0xc1, 0xdc, 0xb4, 0xb4, 0xc5, 0x84, 0xbc, 0x00, 0xb0, 0xc6, 0x74, 0xc7, 0x2c, 0xc8, 0x0c, 0xd5, 0x38, 0x0c, 0xb8, 0x05, 0x98, - 0x27, 0x09, 0x72, 0xff, 0x04, 0x78, 0x35, 0x11, 0x04, 0x3e, 0x20, 0x04, 0x40, 0x28, 0x15, 0x3e, 0x04, 0x34, 0x04, 0x2d, 0x00, 0x00, 0x10, 0x04, - 0x31, 0x04, 0x30, 0x04, 0x43, 0x28, 0x04, 0x39, 0x20, 0x0b, 0x17, 0x28, 0x31, 0x3c, 0x04, 0x3f, 0x2e, 0x04, 0x3b, 0x28, 0x39, 0x3d, 0x04, 0x88, - 0x35, 0x09, 0x74, 0xff, 0x10, 0x0c, 0x70, 0x7f, 0x05, 0x8c, 0x38, 0x0c, 0x04, 0x05, 0x05, 0x30, 0x07, 0x20, 0x05, 0x05, 0x34, 0x00, 0x22, 0xc8, - 0x0e, 0x00, 0x00, 0x07, 0x50, 0xc1, 0x82, 0x28, 0x13, 0xf3, 0x30, 0xb0, 0x30, 0xe9, 0x28, 0x0f, 0xc9, 0xd1, 0x04, 0xc8, 0x01, 0x00, 0x5f, 0xff, - 0x43, 0x48, 0x13, 0x6e, 0x00, 0x67, 0x28, 0x1d, 0x7c, 0xe1, 0x2c, 0x29, 0x05, 0xfb, 0x35, 0xf0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xf0, 0x7f, - 0x3c, 0x74, 0x03, 0x3c, 0x68, 0xc9, 0x62, 0xb7, 0x5f, 0x06, 0x12, 0xf9, 0x5f, 0xff, 0x00, 0x0c, 0xcd, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0xb4, 0xf4, - 0x05, 0x98, 0x09, 0x08, 0xd2, 0xff, 0x04, 0x77, 0xff, 0x00, 0x7f, 0xff, 0x27, 0x28, 0x17, 0x3d, 0x04, 0x5e, 0x33, 0x28, 0x1b, 0x30, 0x28, 0x19, - 0x07, 0x11, 0x7f, 0x06, 0xf4, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x06, 0x51, 0x06, 0x70, 0x01, 0x12, 0x40, 0x0a, 0xe4, 0x20, 0x55, 0x28, 0x17, 0x01, - 0x08, 0x50, 0xd5, 0x30, 0xa7, 0x30, 0xa4, 0x20, 0x03, 0x11, 0xfc, 0x30, 0xeb, 0x06, 0x28, 0x15, 0x00, 0x00, 0x46, 0x2f, 0x95, 0x5e, 0x6a, 0x2f, - 0x91, 0x72, 0x06, 0x08, 0x11, 0xf0, 0x7f, 0x06, 0x56, 0x17, 0x10, 0x06, 0xf0, 0x7f, 0x39, 0x04, 0x8d, 0x36, 0x80, 0x14, 0x5c, 0x06, 0x78, 0x15, - 0x00, 0x00, 0x03, 0x98, 0xd3, 0x08, 0xc6, 0x74, 0xb9, 0x06, 0x78, 0x15, 0x07, 0xb2, 0xff, 0xc1, 0x05, 0xf8, 0x11, 0x5f, 0xff, 0x24, 0x04, 0x35, - 0x04, 0x39, 0x20, 0x03, 0x72, 0x40, 0x06, 0x28, 0x13, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x07, 0x07, 0x70, 0x01, 0x0f, 0x80, 0x40, 0x0a, - 0x90, 0x21, 0x16, 0x0d, 0x00, 0x00, 0x09, 0x20, 0x50, 0xb8, 0x68, 0x13, 0xfb, 0x30, 0xe2, 0x30, 0xb7, 0x0c, 0x30, 0xe7, 0x30, 0xf3, 0x20, 0x09, - 0x30, 0x07, 0xd7, 0x30, 0x68, 0xed, 0x20, 0x0b, 0x05, 0x1d, 0x45, 0x47, 0x2b, 0x15, 0x51, 0x01, 0x72, 0x0c, 0x00, 0x2d, 0x00, 0x4d, 0x2f, 0xb7, - 0x5f, 0xbb, 0x2d, 0x00, 0x5f, 0x53, 0x2f, 0xc3, 0x70, 0x2f, 0xc1, 0x3f, 0xc9, 0x04, 0xdb, 0x41, 0x01, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x80, 0x10, - 0x04, 0xd0, 0x7f, 0x70, 0x67, 0x14, 0x5c, 0x2d, 0x00, 0xab, 0x00, 0x83, 0x7e, 0x67, 0x2d, 0x00, 0x96, 0x80, 0x6e, 0x10, 0x66, 0x17, 0x67, 0x05, - 0xdb, 0x1d, 0xc4, 0xc8, 0x74, 0xb9, 0x00, 0xa8, 0xba, 0x00, 0xc2, 0xfc, 0xc1, 0x04, 0xd5, 0x37, 0x60, 0xb8, 0x06, 0x18, 0x1f, 0x07, 0x32, 0xff, - 0x6f, 0x2f, 0x2b, 0x00, 0xb3, 0xff, 0x04, 0xb8, 0x2f, 0x04, 0x14, 0x04, 0x4c, 0x04, 0x51, 0x28, 0x15, 0x2d, 0x00, 0x05, 0x1c, 0x04, 0x3e, 0x04, - 0x48, 0x20, 0x03, 0x3d, 0x20, 0x0b, 0x5e, 0x28, 0x20, 0x0b, 0x3f, 0x28, 0x2b, 0x30, 0x0d, 0x0e, 0xf4, 0xff, 0x10, 0x0c, 0xd0, 0x7f, 0x08, 0x40, - 0x08, 0xd0, 0x01, 0xe7, 0x21, 0x8a, 0x0c, 0x00, 0x00, 0x00, 0x0a, 0x50, 0xcf, 0x30, 0xa4, 0x30, 0xc9, 0x30, 0x41, 0xa5, 0x28, 0x1b, 0xfb, 0x30, - 0xd2, 0x30, 0xd0, 0x28, 0x21, 0xaa, 0x05, 0xdd, 0x3b, 0x48, 0x2c, 0x1b, 0x6a, 0x2c, 0x21, 0xfa, 0x28, 0x19, 0x42, 0x0f, 0x00, 0x69, 0x00, 0x68, - 0x2c, 0x2b, 0x05, 0xbb, 0x3b, 0x00, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x82, 0x10, 0x05, 0x90, 0x7f, 0x6a, 0x8c, 0x0a, 0x4f, 0x5c, 0x28, 0x13, 0xd4, - 0x06, 0x6b, 0x6a, 0x8c, 0x14, 0x5c, 0x05, 0xd8, 0x13, 0x3f, 0xff, 0xc8, 0x00, 0xd5, 0x74, 0xc7, 0x50, 0xb4, 0x20, 0x00, 0x44, 0x5e, 0xbe, 0x20, - 0x09, 0xb9, 0x06, 0x18, 0x17, 0x08, 0x52, 0xff, 0x04, 0xd8, 0x0b, 0xbf, 0xff, 0x25, 0x00, 0x04, 0x30, 0x04, 0x39, 0x04, 0x34, 0x04, 0x43, 0x82, - 0x28, 0x19, 0x11, 0x04, 0x38, 0x04, 0x45, 0x20, 0x0f, 0x40, 0xe5, 0x04, 0xe8, 0x0b, 0x09, 0x14, 0xff, 0x10, 0x0d, 0x90, 0x7f, 0x09, 0x09, 0x70, - 0x01, 0x10, 0x40, 0x0a, 0x00, 0xcd, 0x21, 0x60, 0x0f, 0x00, 0x00, 0x0b, 0x50, 0x00, 0xd8, 0x30, 0xf4, 0x30, 0xa7, 0x30, 0xb7, 0x30, 0x62, 0xe5, - 0x05, 0xe8, 0x0f, 0x98, 0x17, 0x65, 0x00, 0x76, 0x20, 0x03, 0x73, 0xf0, 0x05, 0xa8, 0x0b, 0x00, 0x50, 0x7f, 0x06, 0x30, 0xfd, 0x10, 0x07, 0x10, - 0x7f, 0x6b, 0x8d, 0xf4, 0x7e, 0x30, 0xc0, 0x4e, 0x06, 0x52, 0xfb, 0x3f, 0xff, 0xe4, 0xd5, 0xa0, 0xbc, 0x3c, 0xdc, 0xc2, 0x06, 0x18, 0x0f, 0x08, - 0x12, 0xff, 0x05, 0x98, 0x0b, 0xd8, 0x17, 0x35, 0x04, 0x5c, 0x32, 0x20, 0x03, 0x48, 0x05, 0xa8, 0x0b, 0x08, 0x54, 0xff, 0x10, 0x0e, 0x50, 0x7f, - 0x0a, 0x0a, 0xa0, 0x70, 0x01, 0x11, 0x40, 0x0a, 0x0f, 0x22, 0x7e, 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x50, 0xe4, 0x30, 0xfc, 0x30, 0xb9, 0x00, 0x30, - 0xfb, 0x30, 0xca, 0x30, 0xc1, 0x30, 0xaf, 0x20, 0x30, 0xf3, 0x20, 0x09, 0xbd, 0x30, 0xeb, 0x30, 0xce, 0xc5, 0x20, 0x0b, 0x05, 0x5d, 0x3b, 0x4a, - 0x00, 0xe1, 0x28, 0x13, 0x7a, 0x2f, 0xad, 0x54, 0x4e, 0x2f, 0xb9, 0x67, 0x2b, 0x1d, 0x6b, 0x4b, 0x27, 0x2d, 0x00, 0x45, 0x53, 0x20, 0x15, 0x6f, - 0x00, 0x6c, 0x2c, 0x33, 0x6f, 0x20, 0x13, 0xf0, 0x04, 0x7b, 0x41, 0x01, 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x04, 0x70, 0x7f, 0xa0, 0x52, 0x79, - 0x51, 0x00, 0x2d, 0x00, 0xb3, 0x7e, 0x70, 0x67, 0x54, 0x5b, 0x00, 0x2d, 0x00, 0x22, 0x7d, 0x14, 0x5c, 0xfa, 0x8b, 0x20, 0x4b, 0x51, 0x05, 0x9b, - 0x23, 0x7c, 0xc5, 0xa4, 0xc2, 0x08, 0x00, 0xb1, 0xc0, 0xc9, 0xe4, 0xcf, 0x94, 0xc1, 0x78, 0x1c, 0xb1, 0x6c, 0xd0, 0x05, 0xf8, 0x21, 0x09, 0x72, - 0xff, 0x04, 0x78, 0x35, 0x2f, 0x04, 0x00, 0x41, 0x04, 0x2d, 0x00, 0x1d, 0x04, 0x30, 0x04, 0x00, 0x34, 0x04, 0x4c, 0x04, 0x3a, 0x04, 0x43, 0x04, - 0x41, 0x3d, 0x20, 0x0f, 0x21, 0x04, 0x3e, 0x04, 0x3b, 0x20, 0x0f, 0x5c, 0x3d, 0x20, 0x07, 0x3a, 0x04, 0xc8, 0x31, 0x09, 0x74, 0xff, 0x10, 0x0c, - 0x70, 0x7f, 0x0b, 0x0b, 0xa2, 0x70, 0x01, 0x14, 0x40, 0x0a, 0x8b, 0x21, 0x5a, 0x28, 0x17, 0x0d, 0x08, 0x50, 0xb3, 0x30, 0xde, 0x28, 0x19, 0xed, - 0x30, 0xe0, 0xab, 0x28, 0x1b, 0xa8, 0x28, 0x21, 0xc6, 0x28, 0x15, 0xb4, 0x20, 0x0d, 0x05, 0x7d, 0x41, 0x54, 0x4b, 0x2c, 0x21, 0x6d, 0x28, 0x1b, - 0x72, 0x40, 0x07, 0x2d, 0x00, 0x57, 0x45, 0x48, 0x25, 0x74, 0x2f, 0xc5, 0x72, 0x28, 0x25, 0x30, 0x1b, 0x04, 0xdb, 0x47, 0xe0, 0x01, 0x10, 0x7f, - 0x06, 0xf0, 0xff, 0x10, 0x04, 0xd0, 0x7f, 0xd1, 0x79, 0x6c, 0x9a, 0x57, 0x00, 0x7f, 0xc6, 0x59, 0x2d, 0x00, 0xc3, 0x57, 0xaf, 0x00, 0x65, 0xf0, - 0x6c, 0x14, 0x5c, 0x08, 0x62, 0xc6, 0x40, 0x59, 0x05, 0x98, 0x17, 0x54, 0xcf, 0xc8, 0xb9, 0x6c, 0xb8, 0x40, 0xd0, 0x28, 0x1d, 0x4c, 0xd1, 0x74, - 0xb9, 0xf0, 0xac, 0xf5, 0x05, 0xf8, 0x17, 0x09, 0x12, 0xff, 0x04, 0x78, 0x11, 0x5f, 0xff, 0x1a, 0x28, 0x01, 0x3c, 0x28, 0x15, 0x44, 0x40, 0x40, - 0x07, 0x2d, 0x00, 0x2d, 0x28, 0x27, 0x42, 0x04, 0x5c, 0x35, 0x20, 0x0f, 0x33, 0x40, 0x19, 0x0f, 0x14, 0xff, 0x10, 0x0c, 0xd0, 0x7f, 0x0c, 0x0c, - 0xa0, 0x70, 0x01, 0x0a, 0x40, 0x0a, 0xd0, 0x21, 0x1c, 0x0d, 0x00, 0x08, 0x00, 0x0e, 0x50, 0xce, 0x28, 0x15, 0xb0, 0x30, 0xe9, 0xb1, 0x28, 0x1b, - 0xc9, 0x05, 0x88, 0x0b, 0xbf, 0xee, 0x4e, 0x00, 0xf3, 0x2f, 0xa5, 0x5e, 0x72, 0x2f, 0xb5, 0x64, 0x04, 0xe8, 0x01, 0x01, 0x10, 0x7f, 0x06, 0x10, - 0xfd, 0x10, 0x07, 0x10, 0x7f, 0xfa, 0x01, 0x8b, 0x3c, 0x68, 0xc9, 0x62, 0xb7, 0x5f, 0x06, 0x32, 0xfb, 0x80, 0x3f, 0xff, 0x78, 0xb1, 0xf8, 0xad, - 0x7c, 0xb7, 0xdc, 0x7a, 0xb4, 0x05, 0xf8, 0x0f, 0x08, 0x32, 0xff, 0x04, 0xd8, 0x01, 0x00, 0x5f, 0xf5, 0x1d, 0x28, 0x17, 0x33, 0x8e, 0x28, 0x15, - 0x30, 0x04, 0x34, 0x05, 0x08, 0x03, 0x08, 0xf4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x0d, 0x50, 0x0d, 0x70, 0x01, 0x0b, 0x40, 0x0a, 0x35, 0x22, 0x17, - 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x50, 0xda, 0x30, 0xb7, 0x30, 0x1a, 0xe5, 0x30, 0xc8, 0x06, 0x48, 0x13, 0x3f, 0xfc, 0x50, 0x2f, 0x99, 0x73, 0xf8, - 0x2f, 0x9f, 0x06, 0x38, 0x13, 0xb0, 0x7f, 0x06, 0x56, 0x15, 0x10, 0x07, 0x10, 0x7f, 0x69, 0x4f, 0xaf, 0x60, 0x65, 0x06, 0x78, 0x13, 0x3f, 0xff, - 0x98, 0xd3, 0x88, 0xc2, 0xb8, 0x78, 0xd2, 0x06, 0x78, 0x15, 0x07, 0x92, 0xff, 0x06, 0x38, 0x13, 0x3f, 0xff, 0x1f, 0x04, 0x35, 0x0e, 0x04, 0x48, - 0x04, 0x42, 0x06, 0x48, 0x13, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x0e, 0x50, 0x0e, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0xc5, 0x21, 0x91, 0x0d, - 0x00, 0x00, 0x00, 0x10, 0x50, 0xb7, 0x30, 0xe7, 0x30, 0x15, 0xe2, 0x30, 0xb8, 0x06, 0x88, 0x17, 0x53, 0x2c, 0x1f, 0x6d, 0x2c, 0x23, 0x7c, 0x67, - 0x2b, 0x21, 0x06, 0x3b, 0x2f, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x30, 0x7f, 0xcd, 0x7e, 0x08, 0xab, 0x83, 0x09, 0x54, 0x06, 0x98, 0x19, - 0xfc, 0xc1, 0xa8, 0x1c, 0xba, 0xc0, 0xc9, 0x06, 0x98, 0x17, 0x07, 0xb2, 0xff, 0x06, 0x38, 0x1b, 0x28, 0x04, 0x11, 0x3e, 0x04, 0x3c, 0x20, 0x03, - 0x34, 0x04, 0x4c, 0x06, 0x48, 0x1b, 0xca, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x0f, 0x0f, 0x70, 0x01, 0x13, 0x40, 0x0a, 0xf6, 0x00, 0x20, - 0xa6, 0x0c, 0x00, 0x00, 0x11, 0x50, 0xb5, 0x00, 0x30, 0xdc, 0x30, 0xeb, 0x30, 0xc1, 0x30, 0xfb, 0x00, 0x30, 0xb5, 0x30, 0xc8, 0x30, 0xde, 0x30, - 0xfc, 0x80, 0x20, 0x0d, 0xfb, 0x30, 0xd9, 0x30, 0xec, 0x30, 0xb0, 0x8a, 0x05, 0x48, 0x2b, 0x53, 0x00, 0x7a, 0x2c, 0x1f, 0x62, 0x2c, 0x29, 0x6c, - 0x8a, 0x2c, 0x2f, 0x73, 0x00, 0x2d, 0x60, 0x11, 0x74, 0x28, 0x2d, 0xe1, 0x2a, 0x00, 0x72, 0x20, 0x0f, 0x42, 0x2f, 0xd1, 0x72, 0x2f, 0xd5, 0x67, - 0xf0, 0x04, 0x4b, 0x53, 0x01, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x04, 0x30, 0x7f, 0x22, 0x7d, 0x5a, 0x53, 0x04, 0x14, 0x5c, 0x47, 0x59, 0x2d, - 0x20, 0x09, 0x79, 0x72, 0x00, 0x6c, 0x9a, 0x14, 0x5c, 0x2d, 0x00, 0x1d, 0x8d, 0x08, 0xc9, 0x62, 0x3c, 0x68, 0x05, 0x5b, 0x29, 0x1c, 0xc1, 0xfc, - 0x00, 0xbc, 0x20, 0xce, 0x1c, 0xc1, 0xb8, 0xd2, 0xc8, 0x00, 0xb9, 0x74, 0xb9, 0xa0, 0xbc, 0x08, 0xb8, 0xf8, 0x70, 0xad, 0x05, 0xb8, 0x25, 0x09, - 0xb2, 0xff, 0x04, 0x38, 0x37, 0x21, 0x04, 0x30, 0x04, 0x51, 0x31, 0x28, 0x1b, 0x3b, 0x28, 0x17, 0x47, 0x04, 0x2d, 0x40, 0x0f, 0x44, 0x42, 0x28, - 0x29, 0x30, 0x04, 0x40, 0x20, 0x0d, 0x11, 0x04, 0x47, 0x35, 0x20, 0x07, 0x35, 0x04, 0x33, 0x04, 0x88, 0x33, 0x09, 0xb4, 0xff, 0x10, 0x0c, 0x30, - 0x7f, 0x28, 0x10, 0x10, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x1a, 0x22, 0x72, 0x02, 0x0f, 0x00, 0x00, 0x12, 0x50, 0xc8, 0x28, 0x15, 0xca, 0xd7, 0x05, - 0x48, 0x01, 0x00, 0x5f, 0xff, 0x54, 0x48, 0x11, 0x6e, 0x2c, 0x1f, 0x06, 0x3b, 0x2d, 0xb0, 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x50, 0x7f, - 0x58, 0x62, 0x14, 0x5c, 0x59, 0x74, 0x87, 0x06, 0x92, 0xff, 0xa8, 0xd1, 0x08, 0xb1, 0x05, 0xb8, 0x07, 0x08, 0x92, 0xff, 0x04, 0x37, 0xf5, 0xdc, - 0x01, 0x2a, 0x17, 0x68, 0x13, 0x3d, 0x28, 0x1f, 0x0e, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x11, 0x11, 0xa0, 0x70, 0x01, 0x0e, 0x40, 0x0a, 0xf5, - 0x20, 0x4d, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x50, 0xf4, 0x30, 0xa1, 0x30, 0xb7, 0x2b, 0x30, 0xe5, 0x06, 0x88, 0x19, 0x56, 0x2f, 0xad, 0x73, 0x06, - 0x68, 0x13, 0x90, 0x7f, 0xc2, 0x06, 0x79, 0x15, 0x10, 0x07, 0x10, 0x7f, 0x83, 0x6c, 0xc0, 0x4e, 0x06, 0x9b, 0x15, 0x00, 0x07, 0x00, 0x84, 0xbc, - 0xdc, 0xc2, 0x06, 0xb8, 0x17, 0x07, 0x52, 0xff, 0x06, 0x58, 0x13, 0xae, 0x3f, 0xff, 0x12, 0x28, 0x0f, 0x48, 0x06, 0x48, 0x11, 0x07, 0xb4, 0xff, - 0x10, 0x0e, 0x90, 0x7f, 0x12, 0x50, 0x12, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x96, 0x21, 0xd2, 0x0b, 0x00, 0x00, 0x00, 0x14, 0x50, 0xd9, 0x30, 0xb9, - 0x30, 0x01, 0xd7, 0x30, 0xec, 0x30, 0xfc, 0x30, 0xe0, 0x06, 0x48, 0x1b, 0x10, 0x56, 0x00, 0x65, 0x28, 0x17, 0x7a, 0x00, 0x70, 0x00, 0x07, 0x72, - 0x00, 0xe9, 0x00, 0x6d, 0x06, 0x0b, 0x35, 0xf0, 0x7f, 0x06, 0xf0, 0xff, 0x80, 0x10, 0x05, 0xf0, 0x7f, 0xf4, 0x7e, 0xaf, 0x65, 0x6e, 0x66, 0xf7, - 0x10, 0x96, 0xc6, 0x59, 0x06, 0x5b, 0x19, 0xa0, 0xbc, 0xa4, 0xc2, 0x0e, 0x04, 0xd5, 0x18, 0xb8, 0x06, 0x78, 0x1b, 0x07, 0xf2, 0xff, 0x05, 0xf8, - 0x21, 0x12, 0x00, 0x04, 0x35, 0x04, 0x41, 0x04, 0x3f, 0x04, 0x40, 0xb9, 0x20, 0x07, 0x3c, 0x06, 0x28, 0x1f, 0x07, 0xf4, 0xff, 0x10, 0x0d, 0xf0, - 0x7f, 0x13, 0x13, 0x70, 0x01, 0x40, 0x07, 0x40, 0x0a, 0x7e, 0x21, 0xbd, 0x0c, 0x00, 0x00, 0x06, 0x15, 0x50, 0xb6, 0x30, 0xe9, 0x06, 0x48, 0x0f, - 0x7f, 0xff, 0x5a, 0xbe, 0x2f, 0xaf, 0x6c, 0x2f, 0xb3, 0x06, 0x7b, 0x31, 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x70, 0x7f, 0x50, 0x10, 0x4f, - 0x1b, 0x6d, 0x06, 0xb2, 0xff, 0x08, 0xc8, 0xec, 0xb7, 0xf0, 0x06, 0x78, 0x13, 0x07, 0xb2, 0xff, 0x05, 0xf8, 0x0f, 0x7f, 0xff, 0x17, 0x04, 0x30, - 0x04, 0x72, 0x3b, 0x20, 0x03, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x14, 0x14, 0x70, 0x01, 0x09, 0x84, 0x40, 0x0a, 0x4f, 0x21, 0xf9, 0x0b, - 0x00, 0x3f, 0xff, 0x01, 0x05, 0x44, 0x05, 0x20, 0x01, 0x01, 0x01, 0x04, 0x40, 0x05, 0x01, 0x01, 0x4a, 0x02, 0x30, 0x04, 0x01, 0x02, 0x20, 0x06, - 0x02, 0x20, 0x05, 0x02, 0x25, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x01, 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, - 0x40, 0x06, 0x04, 0x0e, 0x04, 0x04, 0x04, 0x05, 0x30, 0x04, 0x30, 0x3c, 0x50, 0x05, 0x05, 0x29, 0x06, 0x06, 0x70, 0x01, 0x12, 0x40, 0x0a, 0x07, - 0x07, 0x70, 0x01, 0x49, 0x0f, 0x40, 0x0a, 0x08, 0x08, 0xd0, 0x01, 0x09, 0x09, 0x70, 0x01, 0x4a, 0x10, 0x40, 0x0a, 0x0a, 0x0a, 0x70, 0x01, 0x11, - 0x40, 0x0a, 0x0b, 0x52, 0x0b, 0x70, 0x01, 0x14, 0x40, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x0a, 0x94, 0x40, 0x0a, 0x0d, 0x0d, 0x70, 0x01, 0x0b, 0x40, - 0x0a, 0x0e, 0x0e, 0xa5, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x0f, 0x0f, 0x70, 0x01, 0x13, 0x40, 0x0a, 0x29, 0x10, 0x10, 0x70, 0x01, 0x0d, 0x40, 0x0a, - 0x11, 0x11, 0x70, 0x01, 0x4b, 0x0e, 0x40, 0x0a, 0x12, 0x12, 0x70, 0x01, 0x06, 0x40, 0x0a, 0xf9, 0x5f, 0xc0, 0xf1, 0x57, 0x3f, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x51, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9b, 0x2d, 0x6f, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x51, 0xa2, 0x30, 0xa4, 0x30, 0xb9, 0x01, - 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0x06, 0x38, 0x21, 0x00, 0x49, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x05, 0x61, 0x00, 0x6e, 0x00, - 0x64, 0x06, 0x40, 0x7f, 0x73, 0x80, 0x7d, 0x75, 0x65, 0x06, 0xe0, 0x7f, 0x06, 0x51, 0x7f, 0x90, 0xff, 0x61, 0x06, 0xe1, 0x7f, 0x69, 0x06, 0x20, - 0x81, 0x08, 0xb0, 0x51, 0x9b, 0x5c, 0x06, 0xbb, 0x19, 0x44, 0xc5, 0x74, 0x01, 0xc7, 0xac, 0xc2, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x5b, 0x9f, 0x1a, - 0x49, 0x00, 0x4a, 0x06, 0xc2, 0x81, 0x53, 0x7f, 0xe2, 0x06, 0x81, 0xff, 0x18, 0x00, 0x04, 0x41, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x3d, 0x01, 0x04, - 0x34, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0e, 0x14, 0xff, 0x9e, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0xdc, 0x00, 0x11, 0x1a, 0x00, 0x00, - 0x30, 0x01, 0x52, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xee, 0x25, 0x8d, 0xfb, 0x00, 0x00, 0x00, - 0x02, 0x52, 0xc0, 0x30, 0xd6, 0x30, 0xea, 0x04, 0x30, 0xf3, 0x30, 0xde, 0x5d, 0x06, 0x58, 0x1f, 0x44, 0x00, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c, - 0x00, 0x69, 0x00, 0x54, 0x6e, 0x10, 0x07, 0x00, 0x7f, 0x6f, 0x06, 0xa1, 0xff, 0xed, 0x06, 0x61, 0xff, 0xfd, 0x90, 0x00, 0xcf, 0x67, 0x97, 0x67, - 0x30, 0x57, 0x3a, 0x53, 0x81, 0x06, 0x5b, 0x1f, 0x54, 0xb3, 0x14, 0xbe, 0xb0, 0xb9, 0x06, 0x9b, 0x9b, 0x80, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x43, - 0x04, 0x31, 0x04, 0x3b, 0x06, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x10, 0x0e, 0xf4, 0xff, 0x0e, 0x36, 0xff, 0x01, 0x00, 0x1a, 0x06, 0x06, 0x06, 0x06, - 0x01, 0x01, 0x06, 0x01, 0x06, 0x03, 0x1a, 0x01, 0x01, 0x01, 0x01, 0x58, 0x17, 0x00, 0x0a, 0x52, 0xab, 0x30, 0xfc, 0x30, 0xed, 0x30, 0x54, 0xa6, - 0x06, 0x88, 0x17, 0x43, 0x26, 0x8d, 0x75, 0x28, 0x13, 0x74, 0x00, 0x11, 0x79, 0x00, 0x20, 0x20, 0x0d, 0x61, 0x00, 0x72, 0x28, 0x25, 0x1c, 0x6f, - 0x00, 0x77, 0x05, 0x80, 0x7f, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x61, 0x53, 0x08, 0x1b, 0x6d, 0xe1, 0x90, 0x06, 0x9f, 0xb3, 0x7c, 0xce, - 0x5c, 0x01, 0xb8, 0xb0, 0xc6, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x73, 0x7f, 0x82, 0x07, 0x92, 0xff, 0x20, 0x00, 0x28, 0x00, 0x63, 0x2a, 0x9d, 0x6e, - 0x2a, 0x00, 0x64, 0x24, 0x07, 0x64, 0x2a, 0xa7, 0x29, 0x05, 0x0f, 0xcc, 0x1a, 0x0b, 0x04, 0x30, 0x04, 0x40, 0x28, 0x17, 0x3e, 0x28, 0x1f, 0x0e, - 0x54, 0xff, 0xa5, 0x10, 0x0e, 0xd0, 0x7f, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x20, 0x06, 0x05, 0x20, 0x05, 0x04, 0x02, 0x02, 0x91, 0x25, 0x13, 0x28, - 0x17, 0x0b, 0x52, 0x01, 0xad, 0x30, 0xe3, 0x30, 0xd0, 0x30, 0xf3, 0x07, 0xa8, 0x17, 0x78, 0x76, 0x28, 0x1b, 0x05, 0x9f, 0xbb, 0x06, 0x10, 0x71, - 0x10, 0x07, 0xd0, 0x7f, 0x61, 0x53, 0x87, 0x43, 0x65, 0x06, 0xb8, 0x17, 0x90, 0xce, 0x88, 0xbc, 0x06, 0x98, 0x15, 0x07, 0xb2, 0xff, 0xd7, 0x06, - 0x38, 0x15, 0x58, 0x17, 0x32, 0x28, 0x1b, 0x3d, 0x06, 0x48, 0x15, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x4a, 0x03, 0x38, 0x0c, 0x02, 0x03, - 0x20, 0x06, 0x04, 0x20, 0x05, 0x03, 0x00, 0x03, 0x64, 0x26, 0xc5, 0xfa, 0x00, 0x00, 0x0c, 0x03, 0x52, 0xaf, 0x30, 0xec, 0x30, 0xa2, 0x06, 0x88, - 0x15, 0x00, 0x1b, 0x2f, 0x5c, 0x6c, 0x4f, 0xbf, 0x65, 0x05, 0xaf, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x4b, 0x51, 0x08, 0xb1, 0x83, - 0x14, 0x5c, 0x06, 0x98, 0x19, 0x74, 0xd0, 0x08, 0x1c, 0xb8, 0xb4, 0xc5, 0x06, 0x98, 0x19, 0x07, 0x92, 0xff, 0x06, 0x78, 0x17, 0x3b, 0x04, 0x1d, - 0x4d, 0x04, 0x40, 0x06, 0x68, 0x15, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x04, 0x38, 0x0c, 0x28, 0x03, 0x04, 0x20, 0x06, 0x09, 0x20, 0x05, - 0x04, 0x04, 0x94, 0x00, 0x25, 0x9e, 0xf9, 0x00, 0x00, 0x0d, 0x52, 0xb3, 0x0a, 0x30, 0xfc, 0x30, 0xaf, 0x07, 0xa8, 0x17, 0x6f, 0x28, 0x15, 0x6b, - 0xe1, 0x05, 0xeb, 0xaf, 0x05, 0xd0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xd1, 0x79, 0x4b, 0x51, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0x54, 0xcf, 0x6c, - 0xd0, 0x06, 0x98, 0x15, 0x07, 0x92, 0xff, 0xd7, 0x06, 0x58, 0x15, 0x38, 0x17, 0x3e, 0x28, 0x15, 0x3a, 0x07, 0x88, 0x17, 0x06, 0x34, 0xff, 0x10, - 0x0e, 0xb0, 0x7f, 0x4a, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x05, 0x08, 0x05, 0xe7, 0x24, 0xfb, 0x28, 0x17, 0x0e, 0x52, - 0xc9, 0x0b, 0x30, 0xcb, 0x30, 0xb4, 0x28, 0x1b, 0xeb, 0x06, 0x68, 0x1b, 0xdb, 0x2f, 0x45, 0x44, 0x4c, 0x2f, 0x65, 0x00, 0x67, 0x2f, 0xc3, 0x6c, - 0x05, 0x4f, 0xc1, 0xc0, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x1a, 0x59, 0x85, 0x51, 0xa0, 0x52, 0x20, 0x14, 0x5c, 0x06, 0x78, 0x1b, 0xc4, - 0xb3, 0xc8, 0xb2, 0xe8, 0x74, 0xac, 0x06, 0x98, 0x19, 0x07, 0xd2, 0xff, 0x06, 0x18, 0x1d, 0x14, 0x28, 0x17, 0x3d, 0x04, 0x17, 0x35, 0x04, 0x33, - 0x28, 0x1f, 0x3b, 0x06, 0x28, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x4a, 0x06, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x02, 0x20, 0x05, - 0x06, 0x00, 0x06, 0xfe, 0x26, 0xaf, 0xfa, 0x00, 0x00, 0x0f, 0x41, 0x52, 0x58, 0x13, 0xa6, 0x30, 0xa7, 0x30, 0xa4, 0x06, 0x48, 0x19, 0xab, 0xdb, - 0x2f, 0x47, 0x48, 0x0f, 0x77, 0x2c, 0x31, 0x79, 0x05, 0x6f, 0xc1, 0x06, 0x10, 0x71, 0x81, 0x10, 0x07, 0xd0, 0x7f, 0x08, 0x62, 0x14, 0x5c, 0xe6, - 0x97, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xe8, 0xac, 0xe8, 0xc6, 0x74, 0xc7, 0xe2, 0x06, 0x98, 0x17, 0x07, 0xb2, 0xff, 0x06, 0x18, 0x15, 0x00, - 0x00, 0x13, 0x48, 0x0f, 0x43, 0x0e, 0x04, 0x4d, 0x04, 0x39, 0x06, 0x28, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x07, 0x14, 0x06, 0x07, - 0x07, 0x50, 0x01, 0x01, 0x40, 0x09, 0xe2, 0x25, 0x00, 0x92, 0xf9, 0x00, 0x00, 0x10, 0x52, 0xb1, 0x30, 0x75, 0xea, 0x28, 0x19, 0x06, 0x38, 0x11, - 0x00, 0x3b, 0x2f, 0x4b, 0x2f, 0xb9, 0x72, 0x20, 0x01, 0xe1, 0x05, 0x97, 0xa3, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xef, 0x51, 0xcc, 0x91, - 0x06, 0x98, 0x15, 0x8e, 0x2f, 0xff, 0xcf, 0xac, 0xb9, 0x06, 0x98, 0x15, 0x07, 0xb2, 0xff, 0x06, 0x38, 0x15, 0x00, 0x02, 0x00, 0x1a, 0x04, 0x35, - 0x04, 0x40, 0x20, 0x01, 0x38, 0xe1, 0x06, 0x48, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x07, 0x08, 0x08, 0x50, 0x01, 0x44, 0x06, - 0x40, 0x09, 0x2b, 0x25, 0x1b, 0x28, 0x17, 0x11, 0x52, 0x01, 0xad, 0x30, 0xeb, 0x30, 0xc7, 0x30, 0xa2, 0x06, 0x88, 0x19, 0xb7, 0xf8, 0x17, 0x69, - 0x2f, 0xbd, 0x3c, 0x2d, 0x72, 0x28, 0x21, 0x05, 0x58, 0x17, 0x05, 0xf0, 0x71, 0x80, 0x10, 0x07, 0xd0, 0x7f, 0xfa, 0x57, 0x14, 0x5c, 0xe3, 0x4e, - 0x14, 0x40, 0x5c, 0x06, 0x78, 0x1b, 0xac, 0xd0, 0x70, 0xb3, 0xb4, 0xc5, 0xe8, 0x06, 0x98, 0x19, 0x07, 0xd2, 0xff, 0x06, 0x18, 0x1b, 0x1a, 0x28, - 0x11, 0x3b, 0x04, 0x34, 0x38, 0x04, 0x4d, 0x28, 0x1d, 0x0e, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x08, 0x09, 0x50, 0x09, 0x50, 0x01, 0x07, - 0x40, 0x09, 0xd7, 0x25, 0x43, 0xfb, 0x10, 0x00, 0x00, 0x12, 0x48, 0x17, 0xb1, 0x30, 0xcb, 0x30, 0x6b, 0xfc, 0x06, 0x68, 0x19, 0x00, 0x38, 0x17, - 0x6b, 0x2f, 0xc3, 0x6e, 0x2c, 0x37, 0x05, 0x3f, 0xc3, 0xe2, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x38, 0x17, 0xaf, 0x80, 0x3c, 0x06, 0xa8, - 0x17, 0x00, 0x1e, 0xcf, 0xc8, 0xb2, 0x06, 0xf8, 0x17, 0x07, 0x92, 0xff, 0x05, 0xf8, 0x19, 0x58, 0x17, 0x3a, 0x0b, 0x04, 0x35, 0x04, 0x3d, 0x20, - 0x01, 0x38, 0x06, 0x08, 0x1b, 0x06, 0xf4, 0xff, 0x85, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x09, 0x0a, 0x0a, 0x50, 0x01, 0x08, 0x40, 0x09, 0x00, 0x70, - 0x25, 0xd8, 0xfa, 0x00, 0x00, 0x13, 0x52, 0x46, 0xea, 0x28, 0x11, 0xb7, 0x30, 0xe5, 0x06, 0x68, 0x15, 0xfb, 0x2f, 0x4c, 0xae, 0x2f, 0xb7, 0x6f, - 0x2f, 0xc1, 0x73, 0x05, 0x8f, 0xb9, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xb1, 0x06, 0x83, 0x0a, 0x4f, 0xc0, 0x4e, 0x06, 0x78, 0x15, 0x28, - 0x17, 0xb9, 0x3d, 0xdc, 0xc2, 0x06, 0x98, 0x15, 0x07, 0xb2, 0xff, 0x05, 0xf8, 0x11, 0x5f, 0xff, 0x1b, 0x28, 0x17, 0x07, 0x38, 0x04, 0x48, 0x04, - 0x4c, 0x06, 0x08, 0x11, 0x07, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x0b, 0x0a, 0x0b, 0x0b, 0x50, 0x01, 0x0c, 0x40, 0x09, 0xb5, 0x28, 0x25, - 0xcf, 0x28, 0x17, 0x14, 0x48, 0x17, 0xc8, 0x30, 0xea, 0x34, 0x30, 0xe0, 0x06, 0x68, 0x19, 0xf8, 0x17, 0x65, 0x2f, 0xbf, 0x74, 0x00, 0x5c, 0x72, - 0x2f, 0xc5, 0x6d, 0x05, 0x68, 0x17, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x29, 0x52, 0x02, 0x79, 0x72, 0xcc, 0x91, 0xc6, 0x59, 0x06, 0x78, - 0x19, 0xac, 0x07, 0xb9, 0xb8, 0xd2, 0xbc, 0xb9, 0x06, 0x98, 0x19, 0x07, 0xd2, 0xff, 0x06, 0x18, 0x1b, 0x8b, 0x38, 0x17, 0x42, 0x04, 0x40, 0x28, - 0x1d, 0x3c, 0x06, 0x48, 0x19, 0x06, 0xf4, 0xff, 0x85, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x0b, 0x0c, 0x0c, 0x50, 0x01, 0x0e, 0x40, 0x09, 0x15, 0x5c, - 0x26, 0x40, 0x28, 0x17, 0x15, 0x28, 0x17, 0xe0, 0x28, 0x15, 0x1a, 0xc3, 0x30, 0xaf, 0x07, 0x68, 0x17, 0x38, 0x0f, 0x65, 0x48, 0x17, 0x63, 0x38, - 0x00, 0x6b, 0x05, 0x4f, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x29, 0x52, 0xd8, 0x04, 0x9e, 0xcc, 0x91, 0x4b, 0x51, 0x06, 0x98, 0x17, - 0x38, 0xba, 0x78, 0xad, 0x06, 0xc8, 0x17, 0x07, 0xd2, 0xff, 0x05, 0xf8, 0x19, 0x38, 0x17, 0x3c, 0x04, 0x35, 0xb8, 0x48, 0x19, 0x3a, 0x06, 0x28, - 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x0c, 0x0d, 0x60, 0x0d, 0x60, 0x01, 0x40, 0x09, 0x73, 0x25, 0xdf, 0xf9, 0x00, 0x00, 0x00, - 0x16, 0x52, 0xed, 0x30, 0xf3, 0x30, 0xb0, 0x00, 0x30, 0xd5, 0x30, 0xa9, 0x30, 0xfc, 0x30, 0xc9, 0xe2, 0x06, 0x28, 0x1b, 0xfb, 0x2f, 0x3c, 0x2b, - 0x67, 0x00, 0x66, 0x2c, 0x33, 0x72, 0xf0, 0x2c, 0x33, 0x05, 0x3f, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x17, 0x67, 0x8f, 0x79, 0x20, - 0xb7, 0x5f, 0x06, 0x78, 0x15, 0x00, 0x00, 0x71, 0xb8, 0x7c, 0x1c, 0xd3, 0xdc, 0xb4, 0x06, 0xb8, 0x17, 0x07, 0xd2, 0xff, 0x06, 0x18, 0x17, 0x3e, - 0x04, 0x04, 0x3d, 0x04, 0x33, 0x04, 0x44, 0x20, 0x07, 0x40, 0x04, 0x70, 0x34, 0x06, 0x08, 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0e, - 0x0d, 0x0e, 0x0e, 0xa1, 0x50, 0x01, 0x0f, 0x40, 0x09, 0x34, 0x26, 0x75, 0xfa, 0x25, 0x15, 0x03, 0x52, 0xe9, 0x30, 0xa6, 0x30, 0xb9, 0x06, 0x28, - 0x0f, 0x00, 0x98, 0x17, 0x5c, 0x75, 0x2b, 0x3b, 0x68, 0x05, 0xc7, 0x97, 0x05, 0xd0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xb3, 0x52, 0x20, 0xaf, 0x65, - 0x06, 0x98, 0x15, 0x00, 0x00, 0x7c, 0xb7, 0xb0, 0x1e, 0xc6, 0xa4, 0xc2, 0x06, 0xd8, 0x17, 0x07, 0x52, 0xff, 0x05, 0xf8, 0x11, 0x78, 0x17, 0x30, - 0x0e, 0x04, 0x43, 0x04, 0x42, 0x06, 0x08, 0x0f, 0x07, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0f, 0x14, 0x0e, 0x0f, 0x0f, 0x50, 0x01, 0x0b, 0x40, - 0x09, 0x68, 0x26, 0x00, 0x73, 0xfb, 0x00, 0x00, 0x18, 0x52, 0xe1, 0x30, 0x06, 0xa4, 0x30, 0xe8, 0x30, 0xfc, 0x06, 0x88, 0x19, 0xdb, 0x2f, 0x4d, - 0xbc, 0x2c, 0x23, 0x79, 0x2f, 0xc1, 0x05, 0x9f, 0xb6, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x85, 0x68, 0x20, 0x65, 0x59, 0x06, 0xb8, 0x17, - 0x54, 0xba, 0x74, 0xc7, 0x24, 0x70, 0xc6, 0x06, 0x98, 0x17, 0x07, 0x72, 0xff, 0x06, 0x58, 0x15, 0x00, 0x00, 0x1c, 0x04, 0x07, 0x35, 0x04, 0x39, - 0x04, 0x3e, 0x07, 0x68, 0x17, 0x06, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x10, 0x0f, 0x10, 0x10, 0x60, 0x01, 0x40, 0x09, 0x4d, 0x26, 0x01, - 0x64, 0xf9, 0x00, 0x00, 0x19, 0x52, 0xdf, 0x28, 0x13, 0x6f, 0xb9, 0x06, 0x88, 0x15, 0x00, 0x18, 0x17, 0x65, 0x2c, 0x2b, 0x05, 0xbf, 0xbd, 0x06, - 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x08, 0x73, 0x7c, 0xaf, 0x65, 0x06, 0xb8, 0x17, 0xf8, 0xbb, 0xa4, 0x70, 0xc2, 0x06, 0x98, 0x15, 0x07, 0xb2, - 0xff, 0x06, 0x58, 0x19, 0x1c, 0x04, 0x38, 0x04, 0x70, 0x42, 0x06, 0x88, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x11, 0x10, 0x11, 0x11, - 0xc0, 0x60, 0x01, 0x40, 0x09, 0x27, 0x26, 0x40, 0xfb, 0x00, 0x00, 0x00, 0x1a, 0x52, 0xe2, 0x30, 0xca, 0x30, 0xcf, 0x30, 0x71, 0xf3, 0x06, 0x88, - 0x19, 0xfb, 0x2f, 0x3c, 0x31, 0x61, 0x00, 0x67, 0x28, 0x19, 0x78, 0x61, 0x2c, 0x3b, 0x05, 0x3f, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, - 0xab, 0x83, 0xb3, 0x10, 0x7e, 0xa8, 0x4e, 0x06, 0x98, 0x19, 0xa8, 0xba, 0x08, 0xb1, 0x38, 0x78, 0xd5, 0x06, 0x98, 0x19, 0x07, 0xf2, 0xff, 0x05, - 0xf8, 0x1d, 0x1c, 0x04, 0x3e, 0x02, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x45, 0x20, 0x03, 0x3d, 0xe1, 0x06, 0x28, 0x1f, 0x06, 0xf4, 0xff, 0x10, 0x0e, - 0xf0, 0x7f, 0x12, 0x11, 0x12, 0x12, 0x60, 0x01, 0x88, 0x40, 0x09, 0x93, 0x26, 0x0c, 0x28, 0x17, 0x1b, 0x52, 0xaa, 0x00, 0x30, 0xd5, 0x30, 0xa1, - 0x30, 0xea, 0x30, 0xfc, 0xc4, 0x06, 0x68, 0x19, 0xdb, 0x2f, 0x4f, 0x00, 0x66, 0x20, 0x01, 0x61, 0x00, 0x78, 0x6c, 0x2b, 0x3d, 0x05, 0x5f, 0xc0, - 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x65, 0x59, 0xd5, 0x10, 0x6c, 0x29, 0x52, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x84, 0xd3, 0x3c, 0xac, 0xb9, - 0x06, 0x98, 0x17, 0x07, 0xb2, 0xff, 0x05, 0xf8, 0x13, 0x3f, 0xff, 0x1e, 0x04, 0x41, 0x44, 0x20, 0x01, 0x30, 0x04, 0x3b, 0x04, 0x38, 0x06, 0x28, - 0x15, 0xc3, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x13, 0x12, 0x13, 0x13, 0x60, 0x01, 0x40, 0x09, 0x08, 0xe0, 0x25, 0xab, 0xfa, 0x2b, 0x2d, - 0x52, 0xed, 0x30, 0x01, 0xb9, 0x30, 0xb3, 0x30, 0xe2, 0x30, 0xf3, 0x07, 0x48, 0x17, 0x57, 0x52, 0x2f, 0xbd, 0x73, 0x4c, 0x2f, 0x6d, 0x20, 0x01, - 0x3f, 0xc9, 0x04, 0xff, 0xc0, 0xc0, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x57, 0x7f, 0xaf, 0x65, 0xb7, 0x5e, 0x20, 0x92, 0x82, 0x06, 0x78, - 0x19, 0x5c, 0xb8, 0xa4, 0xc2, 0x54, 0x1c, 0xcf, 0x3c, 0xba, 0x06, 0x78, 0x19, 0x08, 0x12, 0xff, 0x05, 0xd8, 0x1d, 0x20, 0x04, 0x05, 0x3e, 0x04, - 0x41, 0x04, 0x3a, 0x20, 0x05, 0x3c, 0x20, 0x01, 0x1c, 0x3e, 0x04, 0x3d, 0x05, 0xe8, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x14, 0x13, - 0x31, 0x14, 0x14, 0x60, 0x01, 0x40, 0x09, 0x23, 0x26, 0x2f, 0x28, 0x17, 0x00, 0x1d, 0x52, 0xb9, 0x30, 0xe9, 0x30, 0xa4, 0x30, 0x68, 0xb4, 0x06, - 0x68, 0x15, 0xfb, 0x2f, 0x53, 0x2f, 0xb7, 0x69, 0x00, 0x67, 0xf0, 0x2c, 0x33, 0x05, 0x7f, 0xbc, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xaf, - 0x65, 0xb1, 0x83, 0x20, 0x08, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0xac, 0xc2, 0x7c, 0x07, 0xb7, 0x74, 0xc7, 0xe0, 0xac, 0x06, 0x78, 0x17, 0x07, - 0x92, 0xff, 0x05, 0xd8, 0x0f, 0x80, 0x7f, 0xff, 0x21, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x39, 0x38, 0x04, 0x33, 0x28, 0x1f, 0x0e, 0x34, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x15, 0x14, 0x15, 0x60, 0x15, 0x60, 0x01, 0x40, 0x09, 0x96, 0x26, 0xf8, 0xf9, 0x00, 0x00, 0x00, 0x1e, 0x52, 0xc6, 0x30, 0xa3, - 0x30, 0xda, 0x8d, 0x28, 0x1b, 0xea, 0x30, 0xfc, 0x06, 0x48, 0x1b, 0xdb, 0x2f, 0x54, 0x28, 0x15, 0x45, 0x70, 0x20, 0x01, 0x65, 0x00, 0x72, 0x2c, - 0x2b, 0x72, 0x2b, 0x43, 0xe0, 0x04, 0xff, 0xbe, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x82, 0x84, 0xc0, 0x73, 0xf7, 0x10, 0x96, 0xcc, 0x91, - 0x06, 0x78, 0x19, 0xf0, 0xd2, 0x7c, 0xd3, 0x0e, 0x08, 0xb8, 0xac, 0xb9, 0x06, 0x78, 0x17, 0x08, 0x12, 0xff, 0x05, 0xd8, 0x1f, 0x22, 0x08, 0x04, - 0x38, 0x04, 0x3f, 0x20, 0x01, 0x35, 0x04, 0x40, 0x2e, 0x04, 0x4d, 0x20, 0x03, 0x38, 0x05, 0xe8, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, - 0x16, 0x18, 0x15, 0x16, 0x16, 0x60, 0x01, 0x40, 0x09, 0x73, 0x25, 0x6e, 0x00, 0xfa, 0x00, 0x00, 0x1f, 0x52, 0xa6, 0x30, 0xa9, 0xab, 0x28, 0x11, - 0xbf, 0x28, 0x15, 0xd5, 0x40, 0x09, 0xc9, 0x05, 0xe8, 0x1d, 0xdb, 0x2f, 0x55, 0x57, 0x2c, 0x29, 0x74, 0x48, 0x15, 0x66, 0x2f, 0xc1, 0x72, 0x2c, - 0x39, 0xe0, 0x04, 0xff, 0xc6, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x83, 0x6c, 0x79, 0x72, 0x8f, 0x10, 0x79, 0xb7, 0x5f, 0x06, 0x78, 0x17, - 0xcc, 0xc6, 0x30, 0xd1, 0x0e, 0x7c, 0xd3, 0xdc, 0xb4, 0x06, 0x78, 0x17, 0x08, 0x12, 0xff, 0x05, 0xd8, 0x17, 0x23, 0x0a, 0x04, 0x3e, 0x04, 0x42, - 0x48, 0x15, 0x44, 0x20, 0x09, 0x40, 0x38, 0x04, 0x34, 0x06, 0xc8, 0x17, 0x06, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x17, 0x16, 0x17, 0x51, 0x17, - 0x50, 0x01, 0x18, 0x40, 0x09, 0x09, 0x25, 0x92, 0x28, 0x17, 0x40, 0x20, 0x28, 0x17, 0xa7, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0x58, 0xdf, 0x28, 0x1d, - 0xb9, 0x05, 0xe8, 0x13, 0x00, 0x38, 0x17, 0x65, 0x00, 0x73, 0xb7, 0x2b, 0x3b, 0x6d, 0x2f, 0xbf, 0x38, 0x21, 0x68, 0x05, 0x28, 0x17, 0x05, 0xf0, - 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x02, 0x7f, 0x89, 0x73, 0x7c, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xe8, 0xc6, 0xa4, 0xc2, 0xb8, 0xd2, - 0xf8, 0x1c, 0xbb, 0xa4, 0xc2, 0x06, 0x58, 0x19, 0x08, 0x12, 0xff, 0x05, 0xf8, 0x17, 0x4d, 0x04, 0x47, 0x41, 0x28, 0x19, 0x3c, 0x04, 0x38, 0x28, - 0x1f, 0x06, 0x1a, 0x1b, 0x06, 0xf4, 0xff, 0x85, 0x10, 0x0e, 0xf0, 0x7f, 0x18, 0x17, 0x18, 0x18, 0x50, 0x01, 0x1a, 0x40, 0x09, 0x14, 0x0f, 0x26, - 0xc9, 0x28, 0x17, 0x21, 0x48, 0x17, 0xc3, 0x30, 0x45, 0xaf, 0x28, 0x1b, 0xd5, 0x30, 0xa9, 0x28, 0x1b, 0xc9, 0x05, 0xe8, 0x1b, 0xb8, 0x00, 0x18, - 0x17, 0x78, 0x05, 0xcf, 0xb9, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xe6, 0x97, 0x4b, 0x01, 0x51, 0xaf, 0x65, 0x8f, 0x79, 0xb7, 0x5f, 0x06, - 0x58, 0x1b, 0x43, 0xe9, 0x28, 0x17, 0x7c, 0xd3, 0xdc, 0xb4, 0x06, 0x58, 0x15, 0x07, 0xf2, 0xff, 0xd0, 0x05, 0xd8, 0x13, 0x78, 0x17, 0x3a, 0x28, - 0x19, 0x44, 0x04, 0x3e, 0x04, 0x1c, 0x40, 0x04, 0x34, 0x06, 0x08, 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x19, 0x18, 0x30, 0x19, 0x19, - 0x60, 0x01, 0x40, 0x09, 0x37, 0x25, 0x69, 0xfb, 0x15, 0x00, 0x00, 0x22, 0x28, 0x17, 0xa3, 0x48, 0x17, 0xed, 0x28, 0x13, 0xd1, 0x05, 0xd8, 0x11, - 0x00, 0x5b, 0x2f, 0x69, 0x2c, 0x2b, 0x6b, 0x00, 0x6c, 0x2c, 0x2f, 0x70, 0x77, 0x05, 0x6f, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x01, - 0x5a, 0x4b, 0x51, 0x30, 0x1b, 0x6d, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x04, 0xc7, 0x74, 0xd0, 0x3a, 0x5c, 0xb8, 0x06, 0x78, 0x15, 0x07, 0xf2, 0xff, - 0x06, 0x38, 0x17, 0x38, 0x28, 0x17, 0x3b, 0xb8, 0x28, 0x15, 0x43, 0x06, 0x08, 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x19, 0x1a, - 0x51, 0x1a, 0x50, 0x01, 0x17, 0x40, 0x09, 0xac, 0x25, 0xb5, 0x28, 0x17, 0x80, 0x00, 0x25, 0x27, 0x1a, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x00, - 0x06, 0x06, 0x03, 0x1a, 0x01, 0x01, 0x01, 0x01, 0x4a, 0x02, 0x30, 0x04, 0x01, 0x02, 0x20, 0x06, 0x05, 0x20, 0x05, 0x02, 0x25, 0x02, 0x03, 0x30, - 0x04, 0x02, 0x03, 0x20, 0x06, 0x04, 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0x20, 0x06, 0x09, 0x89, 0x20, 0x05, 0x04, 0x04, - 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x44, 0x0a, 0x20, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, 0xa0, 0x20, 0x06, 0x02, 0x20, 0x05, - 0x06, 0x06, 0x07, 0x06, 0x07, 0x50, 0x07, 0x50, 0x01, 0x01, 0x40, 0x09, 0x08, 0x07, 0x08, 0x08, 0xa1, 0x50, 0x01, 0x06, 0x40, 0x09, 0x09, 0x08, - 0x09, 0x09, 0x50, 0x01, 0x42, 0x07, 0x40, 0x09, 0x0a, 0x09, 0x0a, 0x0a, 0x50, 0x01, 0x08, 0x85, 0x40, 0x09, 0x0b, 0x0a, 0x0b, 0x0b, 0x50, 0x01, - 0x0c, 0x40, 0x09, 0x0a, 0x0c, 0x0b, 0x0c, 0x0c, 0x50, 0x01, 0x0e, 0x40, 0x09, 0x0d, 0x18, 0x0c, 0x0d, 0x0d, 0x60, 0x01, 0x40, 0x09, 0x0e, 0x0d, - 0x0e, 0x50, 0x0e, 0x50, 0x01, 0x0f, 0x40, 0x09, 0x0f, 0x0e, 0x0f, 0x0f, 0xa1, 0x50, 0x01, 0x0b, 0x40, 0x09, 0x10, 0x0f, 0x10, 0x10, 0x60, 0x01, - 0x86, 0x40, 0x09, 0x11, 0x10, 0x11, 0x11, 0x60, 0x01, 0x40, 0x09, 0x12, 0x18, 0x11, 0x12, 0x12, 0x60, 0x01, 0x40, 0x09, 0x13, 0x12, 0x13, 0x61, - 0x13, 0x60, 0x01, 0x40, 0x09, 0x14, 0x13, 0x14, 0x14, 0x60, 0x01, 0x86, 0x40, 0x09, 0x15, 0x14, 0x15, 0x15, 0x60, 0x01, 0x40, 0x09, 0x16, 0x18, - 0x15, 0x16, 0x16, 0x60, 0x01, 0x40, 0x09, 0x17, 0x16, 0x17, 0x50, 0x17, 0x50, 0x01, 0x18, 0x40, 0x09, 0x18, 0x17, 0x18, 0x18, 0xbc, 0x50, 0x01, - 0x1a, 0x40, 0x09, 0xf9, 0xbf, 0xf1, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, 0x30, 0x01, 0x53, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xca, 0x1d, 0xe1, 0x08, 0x00, 0x00, 0x00, 0x02, 0x53, 0xe9, 0x30, 0xc4, 0x30, 0xa3, 0x04, 0x30, 0xaa, 0x30, 0xde, 0x5d, 0x06, 0x58, 0x1f, - 0x4c, 0x00, 0x01, 0x61, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6f, 0x06, 0x68, 0x9e, 0xa3, 0x30, 0x7f, 0x74, 0x20, 0x7f, 0x75, 0x00, 0x6d, 0x0e, 0x80, - 0x7f, 0x06, 0xf1, 0x7f, 0x40, 0x63, 0x06, 0xa1, 0xff, 0xc9, 0x62, 0x50, 0x9f, 0x65, 0x59, 0x08, 0x27, 0x59, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0x7c, - 0xb7, 0x58, 0x01, 0xce, 0x24, 0xc6, 0x20, 0x00, 0xfc, 0xc8, 0x0e, 0x73, 0x7f, 0x40, 0xe1, 0x06, 0xc1, 0xff, 0x1b, 0x04, 0x30, 0x04, 0x46, 0x04, - 0x0c, 0x38, 0x04, 0x3e, 0x04, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x01, 0x09, 0x41, 0x07, 0x20, 0x01, 0x01, 0x01, 0x08, 0x08, 0x08, 0x20, - 0x05, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x53, 0xd0, 0x30, 0xc3, 0x02, 0x30, 0xec, 0x30, 0xfb, 0x30, 0xc0, 0x28, 0x1b, 0xb9, 0x2a, 0x30, 0xbf, - 0x06, 0x08, 0x1f, 0x41, 0x28, 0x11, 0x73, 0x27, 0x99, 0x61, 0x0a, 0x00, 0x20, 0x00, 0x56, 0x28, 0x23, 0x6c, 0x20, 0x01, 0x65, 0x34, 0x00, 0x79, - 0x05, 0x8f, 0xc4, 0x70, 0x73, 0xe9, 0x20, 0x75, 0x20, 0x00, 0x16, 0x64, 0x00, 0x27, 0x80, 0x91, 0x65, 0x05, 0xe0, 0xff, 0x31, 0x03, 0x6c, 0xee, - 0x06, 0x0f, 0xbc, 0x91, 0x73, 0xd0, 0xfd, 0x61, 0x06, 0x40, 0x7f, 0x31, 0x83, 0x05, 0xd0, 0x81, 0xe6, 0x00, 0x74, 0xb1, 0x83, 0x2d, 0x00, 0xbe, - 0x8f, 0x65, 0x04, 0x59, 0xaf, 0x65, 0x54, 0x58, 0x06, 0x18, 0x1f, 0x1c, 0xbc, 0x00, 0x08, 0xb8, 0xe4, 0xb2, 0x24, 0xc6, 0xa4, 0xc2, 0x38, 0xc0, - 0xd0, 0x06, 0x38, 0x1d, 0x07, 0x51, 0xff, 0x06, 0x71, 0xfd, 0x00, 0x00, 0x12, 0xa0, 0x28, 0x17, 0x3b, 0x20, 0x01, 0x35, 0x04, 0x2d, 0x00, 0x34, - 0x08, 0x04, 0x19, 0x20, 0x10, 0x28, 0x21, 0x41, 0x04, 0x42, 0xe0, 0x28, 0x2d, 0x0d, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x02, 0x13, 0x02, - 0x13, 0x42, 0x13, 0x20, 0x05, 0x13, 0x04, 0x02, 0x02, 0x20, 0x01, 0x85, 0x00, 0x20, 0x33, 0x05, 0x00, 0x00, 0x04, 0x53, 0xd4, 0x00, 0x30, 0xa8, - 0x30, 0xe2, 0x30, 0xf3, 0x30, 0xc6, 0xd5, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x50, 0x2f, 0xab, 0x65, 0x27, 0x8f, 0x6d, 0x2e, 0xb1, 0x6f, 0x6e, 0x2f, - 0xb9, 0x06, 0x30, 0x7f, 0xe9, 0x06, 0x80, 0x7d, 0x70, 0xff, 0x07, 0x70, 0x7f, 0x05, 0x59, 0x0b, 0xa0, 0xf1, 0xff, 0x61, 0x06, 0xa0, 0x7f, 0xae, - 0x76, 0xc3, 0x57, 0x99, 0x18, 0x84, 0x79, 0x72, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x3c, 0xd5, 0xd0, 0x06, 0xc5, 0xac, 0xba, 0x4c, 0xd1, 0x06, 0x38, - 0x13, 0x73, 0x7f, 0xeb, 0x8a, 0x0e, 0xa2, 0x7f, 0x1f, 0x04, 0x4c, 0x28, 0x13, 0x3c, 0x28, 0x0d, 0x3d, 0xe0, 0x28, 0x0d, 0x0e, 0x54, 0xff, 0x10, - 0x0e, 0xb0, 0x7f, 0x03, 0x0e, 0x0d, 0x0e, 0x0c, 0x03, 0x0e, 0x03, 0x03, 0x0d, 0x0d, 0x0d, 0x20, 0x05, 0x20, 0x07, 0x20, 0x20, 0x75, 0x28, 0x17, - 0x05, 0x53, 0xea, 0x30, 0xb0, 0x08, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x68, 0x15, 0x00, 0x00, 0x4c, 0x83, 0x28, 0x17, 0x67, 0x00, 0x75, 0x00, 0x72, - 0x46, 0x1f, 0x06, 0xd0, 0x7f, 0xd8, 0x06, 0x17, 0x15, 0xf0, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x31, 0xff, 0x29, 0x52, 0xe4, 0x04, 0x53, 0xcc, - 0x91, 0x9a, 0x4e, 0x06, 0x78, 0x17, 0xac, 0xb9, 0x03, 0x6c, 0xad, 0xac, 0xb9, 0x44, 0xc5, 0x06, 0x78, 0x17, 0xb3, 0x7f, 0x50, 0xeb, 0x06, 0x83, - 0xff, 0xfa, 0x06, 0x83, 0xff, 0x1b, 0x04, 0x38, 0x04, 0x05, 0x33, 0x04, 0x43, 0x04, 0x40, 0x20, 0x07, 0x4f, 0x06, 0x28, 0x17, 0xc0, 0x0e, 0xf3, - 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x04, 0x0a, 0x08, 0x0a, 0x08, 0x0b, 0x00, 0x04, 0x04, 0x09, 0x09, 0x09, 0x0a, 0x04, 0x04, 0x00, 0x04, 0x04, 0x93, - 0x1f, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x06, 0x53, 0xed, 0x30, 0xf3, 0x30, 0xd0, 0x30, 0x05, 0xeb, 0x30, 0xc7, 0x30, 0xa3, 0x06, 0x48, 0x1d, 0x4c, - 0x2f, 0xa9, 0x15, 0x6d, 0x00, 0x62, 0x2e, 0x33, 0x72, 0x2b, 0x35, 0x79, 0x06, 0x28, 0x97, 0xef, 0xb0, 0x7f, 0x06, 0x18, 0x1b, 0xd0, 0xff, 0x65, - 0x2f, 0xbd, 0x06, 0xd0, 0xff, 0x05, 0xf9, 0x9b, 0xd1, 0xff, 0x40, 0xed, 0x06, 0x0a, 0x1b, 0x26, 0x4f, 0xf4, 0x5d, 0x2c, 0x7b, 0x80, 0x06, 0x78, - 0x15, 0x00, 0x00, 0x6c, 0xb8, 0x14, 0xbc, 0x74, 0x1b, 0xb9, 0x14, 0xb5, 0x06, 0x78, 0x19, 0xf2, 0xff, 0x6a, 0x05, 0xef, 0xb3, 0x06, 0xf2, 0x7f, - 0x00, 0x1b, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x5c, 0x30, 0x28, 0x19, 0x34, 0x06, 0x28, 0x1b, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, - 0x05, 0x0b, 0x00, 0x09, 0x0b, 0x09, 0x0c, 0x05, 0x05, 0x0a, 0x0a, 0x00, 0x0a, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x55, 0x20, 0x41, 0x88, 0x28, 0x17, - 0x07, 0x53, 0xc8, 0x30, 0xec, 0x28, 0x19, 0x44, 0xc6, 0x28, 0x15, 0xce, 0x30, 0xfb, 0x28, 0x19, 0xeb, 0x30, 0x62, 0xc8, 0x40, 0x07, 0x38, 0x27, - 0xb8, 0x30, 0xa7, 0x05, 0x08, 0x29, 0x54, 0xd4, 0x2f, 0xa9, 0x3f, 0x27, 0x74, 0x2f, 0xb7, 0x6e, 0x28, 0x23, 0x2d, 0x00, 0x11, 0x41, 0x00, 0x6c, - 0x20, 0x0d, 0x6f, 0x00, 0x20, 0x20, 0x09, 0xb1, 0x37, 0xa9, 0x67, 0x04, 0xcf, 0xc7, 0xd0, 0x7f, 0x2d, 0x00, 0x48, 0x2f, 0x35, 0x78, 0x75, 0x20, - 0x8d, 0x30, 0x87, 0x05, 0x10, 0x7d, 0x00, 0x30, 0xff, 0x53, 0x00, 0xfc, 0xd7, 0x29, 0x21, 0x31, 0x0f, 0x72, 0x29, 0x33, 0x6c, 0x04, 0xef, 0xc3, - 0x07, 0xd1, 0x7f, 0x00, 0x51, 0xff, 0x60, 0x69, 0x2a, 0x3b, 0x04, 0x7f, 0xcb, 0x79, 0x72, 0x26, 0x4f, 0x82, 0x00, 0x84, 0xfa, 0x8b, 0x2d, 0x00, - 0x0a, 0x4e, 0x3f, 0x04, 0x96, 0xea, 0x8f, 0x70, 0x67, 0x05, 0xd8, 0x23, 0xb8, 0xd2, 0x00, 0x0c, 0xb8, 0xf0, 0xd2, 0x78, 0xb1, 0x4c, 0xc5, 0x00, - 0xa0, 0xd1, 0x44, 0xc5, 0x14, 0xb5, 0x1c, 0xc8, 0xd5, 0x05, 0xd8, 0x1f, 0x00, 0x13, 0x7f, 0x5a, 0x2e, 0xbd, 0x69, 0x2b, 0xa3, 0x2d, 0x23, 0x9b, - 0xd4, 0x05, 0x12, 0x83, 0x00, 0xb3, 0xff, 0xc1, 0x05, 0x23, 0xff, 0x22, 0x28, 0x0f, 0x35, 0x04, 0x14, 0x3d, 0x04, 0x42, 0x28, 0x13, 0x3d, 0x28, - 0x23, 0x2d, 0x00, 0x07, 0x10, 0x04, 0x3b, 0x04, 0x4c, 0x20, 0x0f, 0x50, 0x0b, 0x38, 0x2b, 0x1c, 0x34, 0x04, 0x36, 0x20, 0x23, 0x0e, 0x93, 0x7f, - 0x10, 0x0c, 0xb0, 0x7f, 0x06, 0x11, 0x00, 0x12, 0x12, 0x11, 0x11, 0x06, 0x06, 0x11, 0x11, 0x80, 0x30, 0x05, 0x06, 0x06, 0xc2, 0x20, 0xe8, 0x07, - 0x00, 0x03, 0x00, 0x08, 0x53, 0xd9, 0x30, 0xcd, 0x28, 0x09, 0x04, 0xf7, 0xfd, 0xad, 0x00, 0x9f, 0xff, 0x56, 0x48, 0x15, 0x65, 0x48, 0x09, 0x06, - 0x50, 0x7f, 0xe9, 0x28, 0x95, 0x7b, 0xe9, 0x48, 0x97, 0x05, 0xdd, 0x29, 0xf0, 0xff, 0x30, 0x7f, 0x6e, 0x0e, 0x61, 0x7f, 0x06, 0x91, 0xff, 0x03, - 0x01, 0x5a, 0x3c, 0x5c, 0x58, 0x62, 0x05, 0xd8, 0x0b, 0xbf, 0xff, 0x03, 0xa0, 0xbc, 0x24, 0xb1, 0xa0, 0xd1, 0x05, 0xd8, 0x0b, 0x07, 0xd3, 0x7f, - 0xae, 0x06, 0xd3, 0xff, 0x12, 0x48, 0x15, 0x35, 0x48, 0x07, 0x10, 0x06, 0x31, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x07, 0x2a, 0x14, 0x14, 0x20, 0x01, - 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x00, 0x07, 0x4e, 0x20, 0xc5, 0x08, 0x00, 0x00, 0x09, 0x02, 0x53, 0xd5, 0x30, 0xea, 0x30, 0xa6, 0x20, - 0x03, 0xfb, 0x44, 0x30, 0x38, 0x21, 0xc1, 0x30, 0xa2, 0x20, 0x09, 0xb8, 0x30, 0x55, 0xe5, 0x20, 0x15, 0xa2, 0x05, 0x48, 0x2d, 0x46, 0x2f, 0xaf, - 0x69, 0x2f, 0xa1, 0x55, 0x6c, 0x2f, 0xaf, 0x20, 0x88, 0x25, 0x7a, 0x2f, 0xbd, 0x61, 0x2e, 0xb1, 0x55, 0x47, 0x80, 0x1b, 0x61, 0x04, 0xc0, 0x7f, - 0x6f, 0x40, 0x81, 0x2d, 0xe8, 0x25, 0x1e, 0x20, 0x00, 0x6a, 0x60, 0x99, 0x3f, 0xd1, 0x38, 0xbd, 0x04, 0x70, 0xff, 0x61, 0xa0, 0x60, 0x7f, 0x4a, - 0x61, 0x09, 0x73, 0x00, 0x63, 0x00, 0x68, 0xfd, 0xa1, 0x0f, 0x04, 0x98, 0x35, 0xb1, 0x7f, 0x30, 0xff, 0x06, 0x51, 0x7f, 0xf0, 0x7f, 0x63, 0x61, - 0xff, 0xc0, 0x71, 0x0f, 0x04, 0x71, 0xfd, 0x00, 0x00, 0x17, 0x5f, 0x59, 0x75, 0x10, 0x29, 0x52, 0x2d, 0x48, 0x1f, 0xaf, 0x65, 0x31, 0x67, 0x08, - 0x29, 0x52, 0x9a, 0x4e, 0x05, 0xb8, 0x25, 0x04, 0xd5, 0xac, 0x04, 0xb9, 0xb8, 0xc6, 0xac, 0xb9, 0x38, 0x1f, 0x58, 0xce, 0x00, 0x44, 0xc5, 0x04, - 0xc9, 0xac, 0xb9, 0x44, 0xc5, 0xea, 0x05, 0x98, 0x27, 0x07, 0x91, 0xff, 0x72, 0x7d, 0xe9, 0x00, 0x21, 0xfd, 0x6e, 0x04, 0x83, 0xff, 0x24, 0x00, - 0x04, 0x40, 0x04, 0x38, 0x04, 0x43, 0x04, 0x3b, 0xaa, 0x20, 0x05, 0x2d, 0x88, 0x25, 0x46, 0x20, 0x13, 0x4f, 0x20, 0x0f, 0x14, 0x2e, 0x04, 0x36, - 0x60, 0x1b, 0x4f, 0x04, 0x68, 0x35, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x08, 0x00, 0x08, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x07, 0x20, - 0x07, 0x13, 0x20, 0x05, 0x08, 0x08, 0x74, 0x20, 0xca, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x53, 0xa8, 0x30, 0xdf, 0x80, 0x48, 0x03, 0xfb, 0x30, 0xed, - 0x30, 0xde, 0x30, 0xfc, 0x0c, 0x30, 0xcb, 0x30, 0xe3, 0x05, 0x48, 0x0f, 0x7f, 0xff, 0x45, 0x00, 0x62, 0x6d, 0x2f, 0xa9, 0x57, 0xf9, 0x2d, 0x00, - 0x52, 0x2e, 0xb5, 0x6d, 0xb5, 0x28, 0x11, 0x67, 0x04, 0xa4, 0x09, 0xdf, 0xff, 0xc9, 0x80, 0x7f, 0x65, 0xe0, 0x7f, 0xe8, 0x04, 0x38, 0x05, 0x08, - 0x10, 0xff, 0x08, 0x50, 0x7f, 0xf1, 0x05, 0x61, 0xfd, 0x00, 0x00, 0x7e, 0x10, 0x82, 0x73, 0x7c, 0x38, 0x0b, 0x2d, 0x00, 0x57, 0x7f, 0x0c, 0x6c, - 0x9a, 0x85, 0x6d, 0x05, 0xb8, 0x13, 0x3f, 0xff, 0xd0, 0xc5, 0x20, 0x00, 0xbc, 0x38, 0x09, 0x5c, 0xb8, 0xc8, 0xb9, 0xd0, 0x6c, 0xb0, 0x05, 0x98, - 0x0f, 0x07, 0xb2, 0x7f, 0xed, 0x00, 0x03, 0xff, 0x05, 0x73, 0xfd, 0x00, 0x00, 0x18, 0x2d, 0x04, 0x3c, 0x28, 0x17, 0x57, 0xf9, 0x2d, 0x00, 0x20, - 0x2b, 0x04, 0x3e, 0x20, 0x0f, 0x30, 0x28, 0x1b, 0x4c, 0x04, 0x88, 0x09, 0x10, 0x01, 0x33, 0xff, 0x80, 0x10, 0x05, 0x90, 0xff, 0x09, 0x07, 0x05, - 0x05, 0x05, 0x07, 0x09, 0x08, 0x09, 0x06, 0x06, 0x14, 0x20, 0x05, 0x09, 0x09, 0xa5, 0x00, 0x1f, 0x0f, 0x08, 0x00, 0x00, 0x0b, 0x53, 0xc8, 0x03, - 0x30, 0xb9, 0x30, 0xab, 0x30, 0xca, 0x05, 0xc8, 0x0b, 0xbf, 0xfa, 0x75, 0x54, 0x2f, 0xa9, 0x3f, 0x1d, 0x3c, 0x13, 0x79, 0x06, 0x40, 0x7f, 0x6f, - 0x80, 0x7f, 0xdc, 0x05, 0x58, 0x09, 0x00, 0x30, 0x7f, 0x6b, 0x05, 0xc5, 0x0b, 0x00, 0x70, 0xff, 0x0e, 0x30, 0x7f, 0x58, 0x62, 0x03, 0xaf, 0x65, - 0x61, 0x53, 0xb3, 0x7e, 0x05, 0xf8, 0x0f, 0x7f, 0xff, 0x01, 0xa0, 0xd1, 0xa4, 0xc2, 0x74, 0xce, 0x98, 0x06, 0x28, 0x11, 0x8e, 0x07, 0xb2, 0xff, - 0x63, 0x00, 0xe2, 0x2f, 0x27, 0x04, 0x9f, 0x15, 0x00, 0x9f, 0xeb, 0x22, 0x8b, 0x28, 0x09, 0x41, 0x04, 0x3a, 0x48, 0x0b, 0x30, 0x05, 0x48, 0x09, - 0x07, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xd0, 0x7f, 0x0a, 0x12, 0x11, 0x11, 0x10, 0x10, 0x0a, 0x00, 0x0a, 0x10, 0x10, 0x10, 0x12, 0x0a, 0x0a, 0x0a, - 0x08, 0x0a, 0x21, 0x1f, 0x00, 0x28, 0x17, 0x0c, 0x53, 0xa6, 0x00, 0x30, 0xf3, 0x30, 0xd6, 0x30, 0xea, 0x30, 0xa2, 0xa3, 0x06, 0x68, 0x19, 0x55, - 0x2f, 0xaf, 0x62, 0x00, 0x72, 0x06, 0x44, 0x13, 0x3f, 0xff, 0x77, 0x4f, 0x80, 0x7f, 0x06, 0x38, 0x15, 0xb0, 0xff, 0x65, 0x2f, 0xa3, 0x0e, 0x11, - 0x7f, 0x71, 0xff, 0x40, 0xed, 0x06, 0x61, 0xff, 0xc1, 0x7f, 0x03, 0x5e, 0xcc, 0x91, 0x20, 0x9a, 0x4e, 0x06, 0x78, 0x17, 0xc0, 0xc6, 0x0c, 0xbe, - 0xac, 0x1a, 0xb9, 0x44, 0xc5, 0x06, 0x78, 0x17, 0x93, 0x7f, 0xeb, 0x06, 0x4c, 0x18, 0xda, 0x80, 0x06, 0xe3, 0xff, 0x23, 0x04, 0x3c, 0x04, 0x31, - 0x04, 0x40, 0x0e, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x28, 0x15, 0x07, 0x93, 0x7f, 0x10, 0x0e, 0x70, 0x7f, 0x0b, 0x00, 0x13, 0x0c, 0x13, 0x12, 0x12, - 0x0b, 0x0b, 0x12, 0x00, 0x12, 0x12, 0x13, 0x0b, 0x0b, 0x0b, 0x0b, 0xa8, 0x20, 0x1e, 0xce, 0x28, 0x17, 0x0d, 0x53, 0xde, 0x30, 0xeb, 0x35, 0x30, - 0xb1, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x4d, 0x2f, 0xa9, 0x72, 0x2f, 0xaf, 0x6b, 0x68, 0x06, 0x67, 0x97, 0xb0, 0x7f, 0x73, 0x06, 0x80, 0xff, 0x6b, - 0x06, 0x68, 0x15, 0x07, 0x11, 0x7f, 0x47, 0x4c, 0x2e, 0xa9, 0x73, 0x00, 0x20, 0x82, 0x07, 0x30, 0x0d, 0x05, 0xbf, 0xb7, 0x02, 0x6c, 0x9a, 0x14, - 0x5c, 0xef, 0x51, 0x06, 0x78, 0x15, 0x00, 0x01, 0x00, 0xc8, 0xb9, 0x74, 0xb9, 0x00, 0xcf, 0x06, 0x78, 0x15, 0xc4, 0x07, 0xd3, 0x7f, 0x06, 0x3c, - 0x97, 0x1c, 0x04, 0x30, 0x28, 0x15, 0x3a, 0x04, 0x70, 0x35, 0x06, 0x48, 0x15, 0x0f, 0x11, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0c, 0x0c, 0x0a, 0x0c, - 0x09, 0x0a, 0x0a, 0x0c, 0x0c, 0x28, 0x13, 0x0c, 0x0c, 0x20, 0x01, 0x00, 0x04, 0x1f, 0x9b, 0x09, 0x00, 0x00, 0x0e, 0x53, 0x10, 0xa2, 0x30, 0xd6, - 0x28, 0x19, 0xc3, 0x30, 0xc4, 0x30, 0x51, 0xa3, 0x06, 0x48, 0x1d, 0x41, 0x4f, 0xad, 0x75, 0x00, 0x7a, 0x20, 0x01, 0x7e, 0x6f, 0x06, 0x2f, 0xb1, - 0xb0, 0x7f, 0x06, 0x38, 0x19, 0xd0, 0x7f, 0x06, 0x18, 0x1b, 0x07, 0x91, 0x7f, 0x6f, 0x80, 0x06, 0x49, 0x97, 0x3f, 0x96, 0x03, 0x5e, 0x81, 0x9c, - 0x50, 0x40, 0x4f, 0x06, 0x78, 0x19, 0x44, 0xc5, 0x0c, 0xbe, 0xe8, 0xb8, 0x38, 0x08, 0xcd, 0x06, 0x78, 0x19, 0x07, 0x92, 0x7f, 0x06, 0x33, 0xfd, - 0x00, 0x00, 0x10, 0x22, 0x04, 0x31, 0x28, 0x17, 0x43, 0x04, 0x46, 0x20, 0x01, 0x3e, 0xe2, 0x06, 0x28, 0x1b, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, - 0x7f, 0x0d, 0x01, 0x01, 0x20, 0x01, 0x0d, 0x80, 0x40, 0x06, 0x0d, 0x0d, 0x0d, 0x0d, 0x1d, 0x1e, 0x85, 0x80, 0x28, 0x17, 0x0f, 0x53, 0xe2, 0x30, - 0xea, 0x30, 0xfc, 0x30, 0x30, 0xbc, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x6f, 0x00, 0x6c, 0x00, 0x70, 0x69, 0x2f, 0xab, 0x06, 0x7c, 0xaf, 0x10, 0x0e, - 0xd0, 0x7f, 0xab, 0x83, 0x29, 0x52, 0x20, 0x5e, 0x58, 0x06, 0x78, 0x15, 0x00, 0x00, 0xb0, 0xba, 0xac, 0x1a, 0xb9, 0x38, 0xc1, 0x06, 0x78, 0x15, - 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x0d, 0x3b, 0x03, 0x04, 0x38, 0x04, 0x37, 0x04, 0x35, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x10, 0x0e, 0x0d, - 0x0b, 0x20, 0x01, 0x0e, 0x0e, 0x0c, 0x0c, 0x40, 0x0c, 0x20, 0x05, 0x0e, 0x0e, 0x8d, 0x1d, 0x6c, 0x0a, 0x80, 0x2b, 0x2d, 0x53, 0xab, 0x30, 0xf3, - 0x30, 0xd1, 0x30, 0x10, 0xcb, 0x30, 0xa2, 0x06, 0x68, 0x19, 0x43, 0x00, 0x61, 0x00, 0x15, 0x6d, 0x00, 0x70, 0x20, 0x05, 0x6e, 0x28, 0x1d, 0x61, - 0x06, 0xe0, 0x7f, 0xbc, 0x06, 0x18, 0x9b, 0x4b, 0xe0, 0x7f, 0x05, 0xfd, 0xb1, 0x07, 0xd1, 0x7f, 0x06, 0x11, 0xff, 0x4e, 0x57, 0x02, 0x15, 0x5e, - 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x78, 0x19, 0x84, 0x01, 0xce, 0x0c, 0xd3, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0x78, 0x19, 0xa8, 0xd3, 0x7f, 0xeb, 0x06, - 0x83, 0xff, 0xe2, 0x06, 0x63, 0xff, 0x1a, 0x04, 0x30, 0x0a, 0x04, 0x3c, 0x04, 0x3f, 0x20, 0x05, 0x3d, 0x28, 0x1d, 0x4f, 0xe0, 0x06, 0x08, 0x1b, - 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0f, 0x06, 0x04, 0x08, 0x04, 0x00, 0x05, 0x0f, 0x0f, 0x05, 0x05, 0x07, 0x06, 0x0f, 0x02, 0x0f, 0x0f, - 0x0f, 0x0a, 0x1d, 0x22, 0x28, 0x17, 0x11, 0x02, 0x53, 0xd7, 0x30, 0xfc, 0x30, 0xea, 0x06, 0x88, 0x15, 0x00, 0x2e, 0x00, 0x41, 0x28, 0x13, 0x75, - 0x4f, 0xb1, 0x06, 0x18, 0x13, 0x3f, 0xff, 0x50, 0xab, 0x2f, 0xaf, 0x75, 0x2f, 0xaf, 0x6c, 0x2f, 0xb5, 0x65, 0x2f, 0xb5, 0x06, 0x90, 0xff, 0xc6, - 0x06, 0x18, 0x13, 0x50, 0xff, 0x75, 0x00, 0x67, 0x06, 0xa1, 0x7f, 0x06, 0xf1, 0xff, 0x6e, 0x10, 0x66, 0x29, 0x52, 0x06, 0x98, 0x15, 0x00, 0x00, - 0x80, 0xd4, 0x3d, 0xac, 0xb9, 0x06, 0x98, 0x15, 0xb3, 0x7f, 0x06, 0x18, 0x13, 0x73, 0xff, 0xfa, 0x06, 0xa3, 0xff, 0x47, 0x10, 0x28, 0x13, 0x43, - 0x04, 0x3b, 0x06, 0x48, 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x10, 0x03, 0x0e, 0x03, 0x0d, 0x02, 0x10, 0x10, 0x00, 0x02, 0x02, - 0x02, 0x03, 0x10, 0x10, 0x10, 0x10, 0x00, 0x3d, 0x1d, 0xfd, 0x0b, 0x00, 0x00, 0x12, 0x53, 0x15, 0xd0, 0x30, 0xb8, 0x28, 0x17, 0xab, 0x28, 0x1d, - 0xbf, 0x06, 0x48, 0x1b, 0x51, 0x42, 0x2f, 0xaf, 0x73, 0x47, 0x97, 0x69, 0x00, 0x63, 0x2f, 0xbb, 0x6b, 0x74, 0x05, 0xee, 0xb3, 0x00, 0x10, 0x7f, - 0x65, 0x06, 0x80, 0xff, 0x6b, 0x07, 0x40, 0xff, 0x0d, 0xd0, 0x7f, 0x00, 0xf4, 0x5d, 0x7f, 0x89, 0x29, 0x52, 0x61, 0x53, 0x20, 0x54, 0x58, 0x06, - 0x58, 0x1b, 0x14, 0xbc, 0xe4, 0xc2, 0xac, 0x06, 0xb9, 0x74, 0xce, 0xc0, 0xd0, 0x06, 0x58, 0x1b, 0x0e, 0xf1, 0xff, 0x11, 0x0d, 0x04, 0x30, 0x04, - 0x37, 0x28, 0x15, 0x38, 0x19, 0x3a, 0x20, 0x0b, 0x70, 0x42, 0x20, 0x0f, 0x10, 0x05, 0xb3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x11, 0x04, 0x02, 0x04, - 0x00, 0x02, 0x03, 0x11, 0x11, 0x03, 0x03, 0x03, 0x04, 0x01, 0x11, 0x11, 0x11, 0x11, 0xe5, 0x1c, 0x3a, 0x28, 0x17, 0x01, 0x13, 0x53, 0xab, 0x30, - 0xe9, 0x30, 0xd6, 0x28, 0x19, 0x45, 0xa2, 0x06, 0x48, 0x15, 0x00, 0x00, 0x43, 0x2e, 0xa7, 0x6c, 0x2e, 0xab, 0x1e, 0x62, 0x00, 0x72, 0x06, 0x4e, - 0xb3, 0xb0, 0x7f, 0x05, 0xd8, 0x11, 0x5f, 0xff, 0x4b, 0x8c, 0xc0, 0xff, 0x65, 0x00, 0x6e, 0x0e, 0xa1, 0x7f, 0x06, 0x3e, 0x33, 0x61, 0x53, 0x00, - 0xc9, 0x62, 0x03, 0x5e, 0xcc, 0x91, 0x9a, 0x4e, 0x80, 0x06, 0x58, 0x17, 0x7c, 0xce, 0x7c, 0xb7, 0x0c, 0xbe, 0xac, 0x1a, 0xb9, 0x44, 0xc5, 0x06, - 0x58, 0x17, 0xd3, 0x7f, 0xeb, 0x06, 0x63, 0xff, 0xe1, 0xa8, 0x06, 0x83, 0xff, 0x1a, 0x28, 0x17, 0x3b, 0x28, 0x1b, 0x31, 0x04, 0x40, 0xb8, 0x28, - 0x1d, 0x4f, 0x05, 0xc8, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x12, 0x05, 0x03, 0x00, 0x07, 0x03, 0x04, 0x12, 0x12, 0x04, 0x04, 0x06, - 0x00, 0x05, 0x12, 0x12, 0x12, 0x12, 0xa9, 0x1b, 0xcc, 0x82, 0x28, 0x17, 0x14, 0x53, 0xb7, 0x30, 0xc1, 0x06, 0xa8, 0x15, 0x00, 0x37, 0x00, 0x53, - 0x4f, 0xa7, 0x3f, 0xaf, 0x79, 0x06, 0xe0, 0x7f, 0x06, 0x38, 0x15, 0x50, 0xff, 0x7c, 0x7a, 0x6f, 0xaf, 0x06, 0x18, 0x15, 0xb1, 0x7f, 0x06, 0x39, - 0x95, 0x07, 0x10, 0x7f, 0x7f, 0x89, 0x0c, 0x7f, 0x89, 0xcc, 0x91, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xdc, 0xc2, 0x3d, 0x60, 0xce, 0x06, 0x98, 0x15, - 0xd1, 0xff, 0x06, 0x18, 0x15, 0x73, 0xff, 0xed, 0x06, 0x82, 0x7f, 0x57, 0x21, 0x28, 0x0d, 0x46, 0x28, 0x11, 0x3b, 0x06, 0x48, 0x15, 0x07, 0xb4, - 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x13, 0x10, 0x10, 0x10, 0x0f, 0x0f, 0x13, 0x13, 0x00, 0x0f, 0x0f, 0x0f, 0x10, 0x13, 0x13, 0x13, 0x13, 0x00, - 0x1b, 0x1b, 0x7f, 0x09, 0x00, 0x00, 0x15, 0x53, 0x00, 0xb5, 0x30, 0xeb, 0x30, 0xc7, 0x30, 0xfc, 0x30, 0x14, 0xcb, 0x30, 0xe3, 0x06, 0x48, 0x1b, - 0x53, 0x2f, 0xaf, 0x72, 0x00, 0x5a, 0x64, 0x2f, 0x2b, 0x6e, 0x06, 0x4e, 0xaf, 0x70, 0x7f, 0x61, 0x2f, 0xad, 0x67, 0xfb, 0x2f, 0xad, 0x05, 0xf8, - 0x1d, 0xd0, 0xff, 0x06, 0x18, 0x19, 0x71, 0x7f, 0x65, 0x40, 0xfd, 0x06, 0x3c, 0xaf, 0x50, 0x65, 0x60, 0x7f, 0xf1, 0x06, 0x48, 0x97, 0x92, 0x64, - 0x01, 0x4e, 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0xac, 0xc0, 0x74, 0xb9, 0x70, 0x1e, 0xb3, 0xd0, 0xb0, 0x06, 0x98, 0x17, 0xb3, 0x7f, 0x06, 0x18, - 0x19, 0x92, 0x7f, 0x6e, 0x20, 0x00, 0x68, 0x06, 0x2f, 0x2f, 0x21, 0x04, 0x30, 0x04, 0x40, 0x2e, 0x04, 0x34, 0x28, 0x1d, 0x3d, 0x06, 0x48, 0x19, - 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x14, 0x80, 0x28, 0x10, 0x0e, 0x06, 0x14, 0x14, 0x0e, 0x0e, 0x0e, 0x00, 0x0f, 0x14, 0x14, 0x14, 0x14, - 0xe3, 0x1b, 0x79, 0x44, 0x06, 0x00, 0x3f, 0xff, 0x01, 0x09, 0x07, 0x20, 0x01, 0x01, 0x01, 0x10, 0x08, 0x08, 0x08, 0x20, 0x05, 0x01, 0x01, 0x02, - 0x02, 0x08, 0x13, 0x02, 0x13, 0x13, 0x20, 0x05, 0x13, 0x04, 0x02, 0x40, 0x02, 0x20, 0x01, 0x03, 0x0e, 0x0d, 0x0e, 0x0c, 0x0e, 0x04, 0x03, 0x03, - 0x0d, 0x0d, 0x0d, 0x20, 0x05, 0x03, 0x03, 0x00, 0x04, 0x0a, 0x08, 0x0a, 0x08, 0x0b, 0x04, 0x04, 0x00, 0x09, 0x09, 0x09, 0x0a, 0x04, 0x04, 0x04, - 0x04, 0x00, 0x05, 0x0b, 0x09, 0x0b, 0x09, 0x0c, 0x05, 0x05, 0x00, 0x0a, 0x0a, 0x0a, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x00, 0x06, 0x11, 0x12, 0x12, - 0x11, 0x11, 0x06, 0x06, 0x22, 0x11, 0x11, 0x30, 0x05, 0x06, 0x06, 0x07, 0x30, 0x7c, 0x14, 0x50, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x07, - 0x08, 0x08, 0xc6, 0x20, 0x15, 0x20, 0x6c, 0x07, 0x07, 0x13, 0x20, 0x72, 0x20, 0x74, 0x07, 0x81, 0x20, 0x35, 0x07, 0x09, 0x09, 0x06, 0x06, 0x14, - 0x20, 0x05, 0xc2, 0x20, 0x54, 0x20, 0x3d, 0x10, 0x10, 0x0a, 0x0a, 0x28, 0xd6, 0x12, 0x80, 0x20, 0x53, 0x0a, 0x0b, 0x13, 0x0c, 0x13, 0x12, 0x12, - 0x00, 0x0b, 0x0b, 0x12, 0x12, 0x12, 0x13, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0c, 0x0c, 0x0a, 0x0c, 0x0a, 0x0a, 0x34, 0x0c, 0x0c, 0x40, 0x0a, 0x20, - 0x01, 0x0d, 0x30, 0xb4, 0x01, 0x0d, 0xc2, 0x40, 0x06, 0x20, 0xa3, 0x0d, 0x0e, 0x0d, 0x0b, 0x20, 0x01, 0x0e, 0x60, 0x0e, 0x30, 0x1a, 0x20, 0xfb, - 0x0e, 0x0f, 0x06, 0x04, 0x08, 0x0a, 0x04, 0x05, 0x0f, 0x0f, 0x20, 0x64, 0x06, 0x29, 0x23, 0x0f, 0x00, 0x10, 0x03, 0x0e, 0x03, 0x0d, 0x02, 0x10, - 0x10, 0xc0, 0x30, 0xda, 0x29, 0x3a, 0x10, 0x11, 0x04, 0x02, 0x04, 0x02, 0x18, 0x03, 0x11, 0x11, 0x30, 0xda, 0x30, 0xb3, 0x12, 0x05, 0x03, 0x00, - 0x07, 0x03, 0x04, 0x12, 0x12, 0x04, 0x04, 0x06, 0x5c, 0x05, 0x20, 0x73, 0x12, 0xf9, 0x5f, 0xf1, 0x57, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x54, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x7f, 0x28, 0x20, 0x11, 0x00, 0x00, 0x00, 0x01, 0x54, 0xe9, 0x30, 0xc8, 0x30, 0xd3, 0x10, - 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x4c, 0x00, 0x61, 0x00, 0x06, 0x74, 0x00, 0x76, 0x00, 0x69, 0x20, 0x07, 0x06, 0x50, 0x7f, 0x65, 0x82, 0x20, - 0x7f, 0x74, 0x00, 0x6f, 0x00, 0x6e, 0x20, 0x83, 0x65, 0xa3, 0x06, 0x80, 0x7f, 0x6c, 0x21, 0x07, 0x6e, 0x00, 0x64, 0x06, 0xe0, 0xff, 0x06, 0x11, - 0x83, 0xc0, 0x51, 0x7f, 0x06, 0x70, 0x7d, 0x00, 0x00, 0xc9, 0x62, 0x31, 0x81, 0x08, 0xf4, 0x7e, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0x7c, 0xb7, 0xb8, - 0x07, 0xd2, 0x44, 0xbe, 0x44, 0xc5, 0x06, 0x93, 0x7f, 0x32, 0xff, 0x06, 0x72, 0x7d, 0xa0, 0x73, 0x7f, 0xf3, 0x06, 0x81, 0xff, 0x1b, 0x04, 0x30, - 0x04, 0x42, 0x01, 0x04, 0x32, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0e, 0x54, 0xff, 0x9e, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, - 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, - 0x30, 0x01, 0x55, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x27, 0xeb, 0x88, 0x13, 0x00, 0x00, 0x00, - 0x02, 0x55, 0xde, 0x30, 0xbb, 0x30, 0xeb, 0x10, 0x30, 0x0c, 0x77, 0x06, 0x78, 0x1d, 0x4d, 0x00, 0x61, 0x00, 0x01, 0x73, 0x00, 0x65, 0x00, 0x72, - 0x00, 0x75, 0x10, 0x16, 0x40, 0x7f, 0x00, 0x6c, 0x9a, 0x5e, 0x58, 0x62, 0x53, 0x3a, 0x53, 0x80, 0x06, 0x7b, 0x1d, 0xc8, 0xb9, 0x38, 0xc1, 0xe8, - 0xb8, 0x20, 0x10, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x53, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x00, 0x41, 0x04, 0x35, 0x04, 0x40, 0x04, 0x43, 0x04, 0x8a, - 0x10, 0x1e, 0x34, 0xff, 0x01, 0x05, 0x05, 0x20, 0x01, 0x01, 0x20, 0x06, 0x04, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x55, 0x79, 0x30, - 0x15, 0xec, 0x30, 0xa2, 0x06, 0xa8, 0x17, 0x42, 0x48, 0x13, 0x65, 0x28, 0x1d, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x2f, 0x4f, 0xcc, 0x91, 0x9a, 0x4e, - 0x06, 0x98, 0x17, 0x03, 0xa0, 0xbc, 0x08, 0xb8, 0x44, 0xc5, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x5a, 0x11, 0x48, 0x13, 0x35, 0x28, 0x1d, 0x10, - 0x1e, 0x54, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x40, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x46, 0xeb, 0x40, 0xba, 0x28, 0x17, 0x04, 0x55, 0xd6, - 0x30, 0xfc, 0x30, 0x0a, 0xbf, 0x30, 0xfb, 0x30, 0x30, 0x07, 0xc6, 0x06, 0x28, 0x1f, 0x42, 0x8a, 0x2f, 0xa7, 0x74, 0x00, 0x68, 0x2f, 0xb5, 0x2d, - 0x80, 0x0b, 0x65, 0x80, 0x10, 0x15, 0xa0, 0x7f, 0x03, 0x5e, 0x54, 0x58, 0x03, 0x5e, 0xf0, 0x40, 0x6c, 0x06, 0x78, 0x19, 0x80, 0xbd, 0xc0, 0xd0, - 0x80, 0xbd, 0x30, 0x4c, 0xd1, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x11, 0x04, 0x43, 0x04, 0x57, 0x42, 0x28, 0x15, 0x2d, 0x60, 0x09, 0x35, 0x05, - 0xe8, 0x1f, 0x10, 0x17, 0x04, 0xff, 0x38, 0x0c, 0x20, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x8b, 0x00, 0xeb, 0x18, 0x14, 0x00, 0x00, - 0x05, 0x55, 0xec, 0x0d, 0x30, 0xea, 0x30, 0xd9, 0x06, 0x28, 0x0f, 0x7f, 0xff, 0x4c, 0x4f, 0xaf, 0x18, 0x69, 0x00, 0x62, 0x05, 0xc8, 0x0d, 0x10, - 0x0f, 0x90, 0x7f, 0xb1, 0x83, 0xcc, 0x10, 0x91, 0x1d, 0x8d, 0x06, 0x78, 0x15, 0x00, 0x00, 0x08, 0xb8, 0x0d, 0xac, 0xb9, 0xa0, 0xbc, 0x06, 0x78, - 0x15, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x09, 0x06, 0x40, 0x04, 0x38, 0x04, 0x31, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x04, 0x90, 0x38, 0x0c, - 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x00, 0x77, 0xeb, 0xf3, 0x13, 0x00, 0x00, 0x06, 0x55, 0x00, 0xde, 0x30, 0xd5, 0x30, 0xa7, 0x30, - 0xc6, 0x30, 0x15, 0xf3, 0x30, 0xb0, 0x06, 0x48, 0x1d, 0x4d, 0x2f, 0xa9, 0x66, 0x2f, 0xa1, 0x44, 0x74, 0x2f, 0xa5, 0x6e, 0x00, 0x67, 0x10, 0x16, - 0x00, 0x7f, 0x6c, 0x9a, 0x08, 0x39, 0x8d, 0xd5, 0x6e, 0x06, 0x98, 0x17, 0xc8, 0xb9, 0x98, 0x18, 0xd3, 0x61, 0xd1, 0x06, 0x98, 0x17, 0x0e, 0xf3, - 0x7f, 0x1c, 0x04, 0x30, 0x28, 0x04, 0x44, 0x28, 0x1b, 0x42, 0x28, 0x1f, 0x3d, 0x04, 0x33, 0xd2, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x05, - 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x05, 0x82, 0x20, 0x05, 0x05, 0x05, 0xcc, 0xea, 0x5e, 0x28, 0x17, 0x07, 0x00, 0x55, 0xe2, 0x30, 0xcf, 0x30, - 0xfc, 0x30, 0xec, 0x22, 0x30, 0xb9, 0x28, 0x1f, 0xfc, 0x30, 0xaf, 0x06, 0x08, 0x1b, 0x4d, 0x0a, 0x00, 0x6f, 0x00, 0x68, 0x28, 0x1b, 0x6c, 0x2f, - 0xb7, 0x27, 0x02, 0x00, 0x73, 0x00, 0x20, 0x00, 0x48, 0x20, 0x11, 0x65, 0x20, 0x00, 0x6b, 0x10, 0x15, 0x60, 0x7f, 0xab, 0x83, 0xc8, 0x54, 0xb1, - 0x01, 0x83, 0xaf, 0x65, 0xe1, 0x80, 0x4b, 0x51, 0x06, 0x38, 0x1d, 0x00, 0xa8, 0xba, 0x60, 0xd5, 0x08, 0xb8, 0xa4, 0xc2, 0x0c, 0xc4, 0xd6, 0x6c, - 0xd0, 0x06, 0x38, 0x1d, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x14, 0x3e, 0x04, 0x45, 0x28, 0x1b, 0x3b, 0x28, 0x1b, 0x41, 0x04, 0x01, 0x2d, 0x00, 0x25, - 0x04, 0x43, 0x04, 0x3a, 0x05, 0xa8, 0x1d, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x06, 0x70, 0x01, 0x07, 0x40, 0x0a, 0x8f, 0xea, 0x50, 0x88, 0x28, - 0x17, 0x08, 0x28, 0x17, 0xb3, 0x30, 0xc8, 0x30, 0x06, 0xed, 0x30, 0xf3, 0x30, 0xb0, 0x06, 0x08, 0x13, 0x78, 0x17, 0x6b, 0xae, 0x28, 0x19, 0x6f, - 0x2f, 0xb1, 0x6c, 0x28, 0x23, 0x05, 0xff, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0xab, 0x01, 0x83, 0x0d, 0x97, 0x79, 0x72, 0x86, 0x96, 0x06, 0x38, 0x13, - 0x81, 0x58, 0x17, 0x54, 0xcf, 0xc0, 0xd2, 0x71, 0xb8, 0x06, 0x38, 0x13, 0xd1, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x3a, 0x28, 0x19, 0x3e, 0x04, 0x42, - 0x28, 0x1b, 0x06, 0x3e, 0x04, 0x3d, 0x04, 0x33, 0x05, 0xa8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x07, 0x50, 0x07, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x2d, - 0xeb, 0xab, 0x14, 0x00, 0x00, 0x00, 0x09, 0x55, 0xaf, 0x30, 0xa1, 0x30, 0x00, 0xaf, 0x30, 0xcf, 0x30, 0xb9, 0x30, 0xcd, 0x30, 0x6b, 0xc3, 0x20, - 0x09, 0x05, 0xf8, 0x1b, 0x51, 0x2f, 0xab, 0x63, 0x4f, 0xb1, 0x5f, 0xad, 0x60, 0x4e, 0x05, 0xaf, 0xab, 0x10, 0x0f, 0x30, 0x7f, 0xa0, 0x52, 0xe5, - 0x67, 0xaf, 0x04, 0x65, 0x85, 0x51, 0x4b, 0x51, 0x06, 0x58, 0x19, 0x74, 0xce, 0x03, 0x28, 0xcc, 0xa4, 0xc2, 0x25, 0xb1, 0x06, 0x78, 0x17, 0x0e, - 0xf3, 0x7f, 0x44, 0x26, 0x28, 0x07, 0x30, 0x04, 0x47, 0x20, 0x03, 0x41, 0x04, 0x06, 0x2d, 0x00, 0x1d, 0x04, 0x35, 0x28, 0x25, 0x10, 0x1d, 0xb4, - 0xff, 0x08, 0x51, 0x08, 0x70, 0x01, 0x09, 0x40, 0x0a, 0x94, 0xea, 0x69, 0x28, 0x17, 0x40, 0x0a, 0x28, 0x17, 0xc6, 0x30, 0xa3, 0x30, 0xf3, 0x30, - 0x68, 0xb0, 0x06, 0x08, 0x11, 0x78, 0x17, 0x75, 0x2f, 0xa9, 0x68, 0x00, 0x69, 0xc3, 0x06, 0x0f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xe4, 0x53, 0xf7, - 0x5e, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x0e, 0xe0, 0xcf, 0x05, 0xd3, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x43, 0x03, 0x04, 0x42, 0x04, - 0x38, 0x04, 0x3d, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x28, 0x09, 0x09, 0x70, 0x01, 0x0a, 0x40, 0x0a, 0x61, 0xea, 0xb4, 0x00, 0x13, 0x00, 0x00, - 0x0b, 0x55, 0xbf, 0x30, 0xfc, 0x00, 0x30, 0xd0, 0x30, 0xfb, 0x30, 0xc4, 0x30, 0xa7, 0xaa, 0x20, 0x09, 0xab, 0x06, 0x08, 0x1d, 0x54, 0x4f, 0xab, - 0x62, 0x2f, 0xb5, 0x2d, 0xa8, 0x20, 0x0b, 0x73, 0x4f, 0xad, 0x61, 0x10, 0x15, 0xb0, 0x7f, 0x58, 0xf4, 0x5d, 0x08, 0xc7, 0x91, 0x61, 0x53, 0x06, - 0x78, 0x1b, 0xc0, 0xd0, 0x14, 0x06, 0xbc, 0xb4, 0xcc, 0x74, 0xce, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x22, 0x0a, 0x04, 0x30, 0x04, 0x31, 0x20, - 0x03, 0x2d, 0x28, 0x21, 0x35, 0x32, 0x04, 0x3a, 0x20, 0x0d, 0x10, 0x1d, 0xd4, 0xff, 0x0a, 0x0a, 0x70, 0x01, 0x08, 0x84, 0x40, 0x0a, 0x03, 0xeb, - 0x57, 0x14, 0x00, 0x3f, 0xff, 0x01, 0x05, 0x54, 0x05, 0x20, 0x01, 0x01, 0x20, 0x06, 0x04, 0x20, 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, - 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x24, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, - 0x04, 0x40, 0x06, 0x04, 0x0b, 0x04, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x20, 0x3d, 0x20, 0x09, 0x95, 0x30, 0x4a, 0x06, 0x06, 0x70, 0x01, 0x07, - 0x50, 0x05, 0x07, 0x70, 0x01, 0x97, 0x50, 0x0a, 0x08, 0x08, 0x70, 0x01, 0x09, 0x50, 0x05, 0xe8, 0xbf, 0xf0, 0xb7, 0x80, 0x3f, 0xff, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x56, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x85, 0x21, 0xc5, 0x06, 0x00, 0x00, 0x00, 0x01, 0x56, 0xea, 0x30, 0xd2, 0x30, 0xc6, 0x00, 0x30, 0xf3, 0x30, 0xb7, 0x30, 0xe5, 0x30, 0xbf, - 0x30, 0x30, 0xa4, 0x20, 0x09, 0x05, 0xd8, 0x27, 0x4c, 0x00, 0x69, 0x00, 0x01, 0x65, 0x00, 0x63, 0x00, 0x68, 0x00, 0x74, 0x20, 0x07, 0x16, 0x6e, - 0x00, 0x73, 0x40, 0x07, 0x69, 0x20, 0x09, 0x10, 0x15, 0x50, 0x7f, 0x17, 0x00, 0x52, 0x2f, 0x65, 0x66, 0x65, 0xeb, 0x58, 0x7b, 0x40, 0x76, 0x06, - 0x5b, 0x1f, 0xac, 0xb9, 0x88, 0xd7, 0x50, 0xd1, 0x03, 0x88, 0xc2, 0xc0, 0xd0, 0x78, 0xc7, 0x06, 0x3b, 0xa1, 0x0e, 0xf3, 0x7f, 0x00, 0x1b, 0x04, - 0x38, 0x04, 0x45, 0x04, 0x42, 0x04, 0x05, 0x35, 0x04, 0x3d, 0x04, 0x48, 0x40, 0x07, 0x39, 0x20, 0x09, 0x9e, 0x10, 0x1d, 0x94, 0xff, 0x01, 0x01, - 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, - 0x30, 0x01, 0x57, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe2, 0x26, 0xfa, 0x11, 0x00, 0x00, 0x00, - 0x02, 0x57, 0xf4, 0x30, 0xa3, 0x30, 0xea, 0x00, 0x30, 0xcb, 0x30, 0xe5, 0x30, 0xb9, 0x30, 0xde, 0x40, 0x5d, 0x06, 0x18, 0x23, 0x56, 0x00, 0x69, - 0x00, 0x6c, 0x00, 0x46, 0x6e, 0x20, 0x05, 0x75, 0x00, 0x73, 0x06, 0x28, 0xa2, 0x10, 0x06, 0xf0, 0x7f, 0x43, 0x22, 0x00, 0x6f, 0x21, 0xfd, 0x64, - 0x00, 0x61, 0x20, 0x03, 0x6f, 0x2d, 0x00, 0x20, 0x20, 0x09, 0x65, 0x20, 0x05, 0x72, 0x15, 0x61, 0x05, 0x0a, 0xb4, 0x00, 0xf4, 0x7e, 0x14, 0x5c, - 0xbd, 0x7e, 0xaf, 0x65, 0x20, 0xbf, 0x53, 0x06, 0x5b, 0x1f, 0x4c, 0xbe, 0x74, 0xb2, 0xa4, 0x07, 0xc2, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x5b, 0x9f, - 0x07, 0x73, 0x7f, 0x05, 0x11, 0xe9, 0x80, 0x00, 0x5c, 0xff, 0x12, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x4c, 0x01, 0x04, 0x3d, 0x04, 0x4e, 0x04, 0x41, - 0x04, 0x10, 0x16, 0x14, 0xff, 0x8a, 0x06, 0xf6, 0xff, 0x01, 0x0a, 0x0a, 0x20, 0x01, 0x01, 0x20, 0x06, 0x02, 0x91, 0x20, 0x05, 0x01, 0x01, 0x58, - 0x17, 0x03, 0x57, 0xa2, 0x28, 0x15, 0x05, 0xfc, 0x30, 0xc8, 0x30, 0xa5, 0x06, 0x68, 0x17, 0x41, 0x28, 0x15, 0x1e, 0x79, 0x00, 0x74, 0x06, 0x68, - 0x15, 0x10, 0x07, 0x10, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x3f, 0x04, 0x96, 0x29, 0x52, 0xfe, 0x56, 0x06, 0xa8, 0x17, 0xc5, 0xac, 0x1a, - 0xb9, 0x2c, 0xd2, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x10, 0x28, 0x15, 0x38, 0x0e, 0x04, 0x42, 0x04, 0x43, 0x06, 0x48, 0x15, 0x10, 0x0f, 0x14, - 0xff, 0x06, 0xf6, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x10, 0xac, 0x26, 0x1a, 0x28, 0x17, 0x04, 0x57, - 0xab, 0x30, 0x1a, 0xa6, 0x30, 0xca, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x4b, 0x2e, 0x29, 0x75, 0xf8, 0x4e, 0x19, 0x06, 0x58, 0x17, 0x10, 0x06, 0xf0, - 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x03, 0x80, 0xb3, 0x40, 0x7e, 0x06, 0x98, 0x15, 0x00, 0x00, 0x74, 0xce, 0xb0, 0xc6, 0x31, 0x98, 0xb0, - 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x30, 0x28, 0x13, 0x7a, 0x3d, 0x20, 0x05, 0x06, 0x58, 0x17, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, - 0xff, 0x03, 0x38, 0x0c, 0x02, 0x50, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x08, 0x27, 0x40, 0x02, 0x28, 0x17, 0x05, 0x57, 0xaf, 0x30, - 0xe9, 0x30, 0x05, 0xa4, 0x30, 0xda, 0x30, 0xc0, 0x06, 0x68, 0x19, 0x4b, 0x2f, 0xaf, 0x00, 0x61, 0x00, 0x69, 0x00, 0x70, 0x00, 0x17, 0x01, 0xf0, - 0x3e, 0x35, 0x10, 0x0d, 0xf0, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x15, 0x4b, 0x51, 0xb1, 0x83, 0x08, 0x69, 0x4f, 0xbe, 0x8f, 0x06, 0x78, 0x19, - 0x74, 0xd0, 0x7c, 0x01, 0xb7, 0x74, 0xc7, 0x98, 0xd3, 0xe4, 0xb2, 0x06, 0x58, 0x19, 0x88, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x3b, 0x28, 0x19, 0x39, - 0x04, 0x3f, 0x0e, 0x04, 0x35, 0x04, 0x34, 0x28, 0x23, 0x10, 0x15, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x04, 0x94, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, - 0x04, 0x20, 0x05, 0x04, 0x04, 0x00, 0x9e, 0x27, 0x07, 0x0f, 0x00, 0x00, 0x06, 0x57, 0x00, 0xde, 0x30, 0xea, 0x30, 0xe4, 0x30, 0xf3, 0x30, 0x15, - 0xdd, 0x30, 0xec, 0x06, 0x48, 0x19, 0x4d, 0x2f, 0xaf, 0x72, 0x28, 0x17, 0x54, 0x6a, 0x2f, 0xb7, 0x6d, 0x28, 0x1d, 0x6f, 0x28, 0x27, 0x17, 0x01, - 0xe0, 0x10, 0x0d, 0x90, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x6c, 0x9a, 0xcc, 0x91, 0x6c, 0x04, 0x62, 0xca, 0x6c, 0x17, 0x52, 0x06, 0x58, - 0x19, 0xc8, 0xb9, 0x00, 0xac, 0xb9, 0x8c, 0xc5, 0xf4, 0xd3, 0x08, 0xb8, 0xd0, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x15, 0x40, 0x04, - 0x38, 0x04, 0x15, 0x4f, 0x04, 0x3c, 0x28, 0x1b, 0x3e, 0x28, 0x25, 0x35, 0x05, 0xc8, 0x1b, 0xd2, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x05, - 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x05, 0x80, 0x20, 0x05, 0x05, 0x05, 0xca, 0x26, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x07, 0x57, 0xd1, 0x30, 0xcd, - 0x30, 0xd9, 0x08, 0x30, 0xb8, 0x30, 0xb9, 0x06, 0x48, 0x15, 0x00, 0x00, 0x50, 0xa8, 0x2f, 0xad, 0x6e, 0x2e, 0x23, 0x76, 0x2f, 0xaf, 0x7e, 0x01, - 0x79, 0x38, 0x00, 0x73, 0x10, 0x0d, 0xe0, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x15, 0x5e, 0x85, 0x01, 0x6d, 0xe6, 0x97, 0xe5, 0x65, 0xaf, - 0x65, 0x06, 0x58, 0x17, 0x00, 0x0c, 0xd3, 0x24, 0xb1, 0xa0, 0xbc, 0xc0, 0xc9, 0x35, 0xa4, 0xc2, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x28, - 0x17, 0x3d, 0x28, 0x0b, 0x57, 0x32, 0x28, 0x0f, 0x36, 0x28, 0x1f, 0x41, 0x05, 0xc8, 0x15, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x4a, 0x06, - 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x00, 0x06, 0xa1, 0x27, 0x54, 0x11, 0x00, 0x00, 0x08, 0x00, 0x57, 0xb7, 0x30, 0xe3, - 0x30, 0xa6, 0x30, 0xec, 0x22, 0x30, 0xa4, 0x06, 0x68, 0x17, 0x60, 0x01, 0x69, 0x2f, 0xb1, 0x75, 0xdc, 0x2f, 0xa5, 0x30, 0x07, 0x69, 0x10, 0x0e, - 0x00, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x0c, 0x5e, 0x02, 0x65, 0x59, 0x29, 0x52, 0x7e, 0x82, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0xe4, - 0xc0, 0xb8, 0xc6, 0xb4, 0xb7, 0x74, 0x60, 0xc7, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x28, 0x04, 0x4f, 0x04, 0x43, 0x2e, 0x04, 0x3b, 0x20, 0x05, - 0x39, 0x05, 0xe8, 0x11, 0x10, 0x0f, 0x54, 0xff, 0x06, 0xf6, 0xff, 0x07, 0x94, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x07, 0x07, - 0x00, 0xc6, 0x27, 0x93, 0x10, 0x00, 0x00, 0x09, 0x57, 0x44, 0xbf, 0x28, 0x15, 0xe9, 0x30, 0xb2, 0x06, 0x68, 0x15, 0x00, 0x00, 0x56, 0x54, 0x48, - 0x15, 0x72, 0x2f, 0xb5, 0x67, 0x2f, 0xb5, 0x06, 0xd0, 0x7f, 0x17, 0x70, 0x01, 0x10, 0x06, 0x10, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x76, - 0x96, 0xc9, 0x62, 0x20, 0x3c, 0x68, 0x06, 0x78, 0x15, 0x00, 0x00, 0xc0, 0xd0, 0xb0, 0x06, 0xc6, 0x7c, 0xb7, 0x8c, 0xac, 0x06, 0x78, 0x17, 0x0e, - 0xf2, 0xff, 0x22, 0x28, 0x04, 0x30, 0x28, 0x17, 0x40, 0x20, 0x05, 0x33, 0x04, 0x35, 0xe9, 0x06, 0x28, 0x19, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, - 0x7f, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x40, 0x06, 0x00, 0x08, 0x08, 0x08, 0x08, 0x49, 0x27, 0xd9, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x57, 0xc6, 0x30, - 0xeb, 0x30, 0x05, 0xb7, 0x30, 0xa7, 0x30, 0xa4, 0x06, 0x68, 0x19, 0x54, 0x2e, 0x1f, 0x1f, 0x6c, 0x00, 0x61, 0x4f, 0xb5, 0x06, 0x1f, 0xad, 0x10, - 0x07, 0x10, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x15, 0x00, 0x79, 0x72, 0x14, 0x5c, 0x0c, 0x5e, 0x7e, 0x82, 0x81, 0x06, 0x78, 0x19, 0x54, 0xd1, - 0xe4, 0xc0, 0x74, 0xc7, 0x06, 0x78, 0x15, 0xa0, 0x0f, 0x13, 0x7f, 0x22, 0x28, 0x0d, 0x3b, 0x04, 0x4c, 0x04, 0x48, 0x0e, 0x04, 0x4f, 0x04, 0x39, - 0x06, 0x48, 0x17, 0x10, 0x0e, 0xd4, 0xff, 0x06, 0xf6, 0xff, 0x09, 0x90, 0x38, 0x0c, 0x08, 0x09, 0x40, 0x06, 0x09, 0x09, 0x09, 0x09, 0x10, 0xcf, - 0x27, 0xd2, 0x28, 0x17, 0x0b, 0x57, 0xa6, 0x30, 0x18, 0xc6, 0x30, 0xca, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x55, 0x00, 0x74, 0xbc, 0x2e, 0x21, 0x6e, - 0x2f, 0xb5, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x4c, 0x4e, 0x08, 0x30, 0x75, 0xb3, 0x7e, 0x06, 0x78, 0x15, 0x00, 0x00, - 0xb0, 0x06, 0xc6, 0x4c, 0xd1, 0x98, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x23, 0x23, 0x04, 0x42, 0x28, 0x19, 0x3d, 0x04, 0x30, 0x06, 0x28, - 0x13, 0x10, 0x0f, 0x34, 0xff, 0xa4, 0x06, 0xf6, 0xff, 0x0a, 0x38, 0x0c, 0x09, 0x0a, 0x40, 0x06, 0x0a, 0x0a, 0x02, 0x0a, 0x0a, 0x76, 0x27, 0x35, - 0x12, 0x00, 0x3f, 0xff, 0x01, 0x94, 0x30, 0x1c, 0x0a, 0x01, 0x20, 0x06, 0x02, 0x20, 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, - 0x06, 0x02, 0x02, 0x02, 0x25, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, - 0x20, 0x06, 0x04, 0x89, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x44, 0x05, 0x20, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, - 0x05, 0x06, 0xa2, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, 0x51, 0x07, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x07, 0x07, 0x08, - 0x30, 0x04, 0x3e, 0x07, 0x08, 0x40, 0x06, 0x48, 0xb9, 0xe8, 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x58, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x47, 0x23, 0x5b, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x58, 0xeb, 0x30, 0xaf, 0x30, 0xbb, 0x06, 0x30, 0xf3, 0x30, 0xd6, 0x30, 0x30, 0x09, 0x06, 0x18, 0x23, 0x4c, 0x00, 0x00, 0x75, 0x00, 0x78, - 0x00, 0x65, 0x00, 0x6d, 0x08, 0x00, 0x62, 0x00, 0x6f, 0x20, 0x0b, 0x72, 0x00, 0x67, 0xed, 0x0e, 0x80, 0x7f, 0x06, 0x10, 0xfd, 0x51, 0x7f, 0x73, - 0x20, 0x01, 0xb0, 0x81, 0x6f, 0x06, 0xc0, 0xff, 0x80, 0x05, 0xb0, 0x7d, 0x00, 0x00, 0x62, 0x53, 0xee, 0x68, 0x21, 0x40, 0x58, 0x06, 0x9b, 0x1b, - 0xe9, 0xb8, 0x48, 0xc1, 0x80, 0xbd, 0x0e, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x5b, 0x9f, 0x07, 0x32, 0x7f, 0x06, 0xb1, 0xff, 0x1b, 0x00, 0x04, 0x4e, - 0x04, 0x3a, 0x04, 0x41, 0x04, 0x35, 0x00, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x43, 0x04, 0x40, 0x39, 0x04, 0x33, 0x25, 0x17, 0x10, 0x06, 0x54, 0xff, - 0x10, 0x06, 0x30, 0xff, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x59, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xdd, 0x1d, 0x3d, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x59, 0xde, 0x30, 0xb1, 0x30, 0xc9, 0x04, 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x58, 0x1f, - 0x4d, 0x00, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x64, 0x00, 0x04, 0x6f, 0x00, 0x6e, 0x00, 0x69, 0x20, 0x0d, 0x20, 0x00, 0x10, 0x28, 0x00, - 0x52, 0x20, 0x11, 0x70, 0x00, 0x75, 0x00, 0x14, 0x62, 0x00, 0x6c, 0x20, 0x13, 0x63, 0x20, 0x13, 0x6f, 0x00, 0x15, 0x66, 0x00, 0x29, 0x04, 0x80, - 0x7f, 0xe9, 0x40, 0x7f, 0x69, 0x20, 0x81, 0x55, 0x65, 0x60, 0x7f, 0xe9, 0xa0, 0x7f, 0x71, 0x20, 0x89, 0x65, 0x04, 0x40, 0x7d, 0xad, 0x50, 0xff, - 0x7a, 0xa0, 0xff, 0x65, 0x21, 0x05, 0x00, 0x11, 0x01, 0x6b, 0x04, 0x60, 0x7d, 0xee, 0x01, 0x11, 0x7f, 0x71, 0x81, 0x31, 0x97, 0x64, 0x21, 0x9f, - 0x03, 0xf1, 0x83, 0x00, 0xb1, 0xff, 0xfa, 0xc0, 0xa0, 0x7d, 0x04, 0x70, 0xff, 0x6c, 0x9a, 0x76, 0x51, 0x7f, 0x98, 0x80, 0x06, 0x9b, 0x1b, 0xc8, - 0xb9, 0x00, 0xcf, 0xc4, 0xb3, 0xc8, 0x00, 0xb2, 0x44, 0xc5, 0x20, 0x00, 0xf5, 0xac, 0x54, 0x15, 0xd6, 0x6d, 0xad, 0x06, 0xd3, 0x7f, 0xeb, 0x06, - 0x83, 0xff, 0xf3, 0x06, 0x41, 0xff, 0x00, 0x1c, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x35, 0x04, 0x00, 0x34, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x38, 0x04, - 0x28, 0x4f, 0x04, 0x34, 0x7f, 0x20, 0x20, 0x11, 0x41, 0x04, 0x3f, 0x02, 0x04, 0x43, 0x04, 0x31, 0x04, 0x3b, 0x20, 0x15, 0x3a, 0xf3, 0x20, 0x25, - 0x04, 0x93, 0xff, 0x07, 0x14, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x5a, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x87, 0x19, 0x52, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x5a, 0xde, 0x30, 0xeb, 0x30, 0xbf, 0x40, - 0x30, 0x06, 0x98, 0x1b, 0x4d, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x6c, 0x74, 0x20, 0x05, 0x06, 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x70, 0x7f, - 0x6c, 0x9a, 0x08, 0x33, 0x80, 0xd6, 0x4e, 0x06, 0x9b, 0x1b, 0xb0, 0xba, 0xc0, 0x60, 0xd0, 0x06, 0xbb, 0x99, 0x0e, 0xf2, 0x7f, 0x1c, 0x04, 0x30, - 0x04, 0x3b, 0x0e, 0x04, 0x4c, 0x04, 0x42, 0x20, 0x07, 0x10, 0x0e, 0x33, 0xff, 0x0e, 0xf5, 0x7f, 0x01, 0x78, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, - 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x5b, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2d, 0x1e, 0xb3, 0x0d, 0x00, 0x00, 0x00, - 0x01, 0x5b, 0xe2, 0x30, 0xf3, 0x30, 0xc6, 0x01, 0x30, 0xcd, 0x30, 0xb0, 0x30, 0xed, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x6e, - 0x00, 0x74, 0x00, 0x41, 0x65, 0x20, 0x05, 0x65, 0x00, 0x67, 0x00, 0x72, 0x20, 0x0f, 0xae, 0x06, 0x30, 0x7f, 0xe9, 0x20, 0x85, 0xe9, 0x06, 0xa0, - 0x7f, 0x06, 0xf0, 0xff, 0x0e, 0x70, 0x7f, 0xd1, 0x10, 0x9e, 0x71, 0x5c, 0x06, 0xbb, 0x19, 0xac, 0xba, 0x4c, 0xd1, 0x03, 0x24, 0xb1, 0xf8, 0xad, - 0x5c, 0xb8, 0x06, 0x5b, 0x9f, 0x0e, 0xf2, 0x7f, 0x00, 0x27, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3d, 0x04, 0x10, 0x3e, 0x04, 0x33, 0x20, 0x03, 0x40, - 0x04, 0x38, 0x04, 0x33, 0x4f, 0x04, 0x10, 0x0d, 0xb3, 0xff, 0x0e, 0xf5, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x5c, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x89, 0xed, 0x28, 0x17, 0x00, 0x00, 0x00, 0x01, 0x5c, 0xe2, 0x30, 0xb6, 0x30, 0xf3, 0x01, - 0x30, 0xd3, 0x30, 0xfc, 0x30, 0xaf, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x6d, 0x00, 0x62, 0x00, - 0x69, 0x00, 0x71, 0x00, 0x15, 0x75, 0x00, 0x65, 0x0e, 0x00, 0x7f, 0x73, 0x80, 0xff, 0x6b, 0x06, 0xe1, 0x7f, 0x60, 0x63, 0x21, 0x8d, 0x0d, 0xd1, - 0xff, 0xab, 0x83, 0x51, 0x68, 0xd4, 0x10, 0x6b, 0x4b, 0x51, 0x06, 0x7b, 0x1d, 0xa8, 0xba, 0xa0, 0xc7, 0x0d, 0x44, 0xbe, 0x6c, 0xd0, 0x06, 0x7b, - 0x9d, 0x07, 0x33, 0x7f, 0xe7, 0x06, 0xa3, 0xff, 0x00, 0x1c, 0x04, 0x3e, 0x04, 0x37, 0x04, 0x30, 0x04, 0x00, 0x3c, 0x04, 0x31, 0x04, 0x38, 0x04, - 0x3a, 0x04, 0xcf, 0x10, 0x06, 0x34, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x5d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xf7, 0xef, 0x25, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x5d, 0xca, 0x30, 0xdf, 0x30, 0xd3, 0x10, 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x4e, 0x00, - 0x61, 0x00, 0x05, 0x6d, 0x00, 0x69, 0x00, 0x62, 0x20, 0x03, 0x61, 0x06, 0xe0, 0x7f, 0x60, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0xb3, 0x7e, - 0x73, 0x7c, 0xd4, 0x10, 0x6b, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0x98, 0xb0, 0xf8, 0xbb, 0x0a, 0x44, 0xbe, 0x44, 0xc5, 0x07, 0x33, 0x7f, 0xeb, 0x06, - 0x83, 0xff, 0xed, 0x80, 0x06, 0x83, 0xff, 0x1d, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x38, 0x26, 0x04, 0x31, 0x20, 0x03, 0x4f, 0x04, 0x10, 0x0e, 0x13, - 0xff, 0x0e, 0xf5, 0x7f, 0x01, 0x78, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x14, 0x6a, 0x00, 0x11, 0x0c, 0x00, 0x00, 0x30, 0x01, 0x5e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x3d, 0x25, 0x79, 0x03, 0x00, 0x00, 0x00, 0x02, 0x5e, 0xce, 0x30, 0xfc, 0x30, 0xeb, 0x00, 0x30, 0xc8, 0x30, 0xfb, 0x30, 0xdb, 0x30, 0xe9, - 0x24, 0x30, 0xf3, 0x20, 0x09, 0xde, 0x5d, 0x05, 0xb8, 0x29, 0x4e, 0x00, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x68, 0x00, 0x14, 0x20, 0x00, - 0x48, 0x20, 0x0b, 0x6c, 0x20, 0x01, 0x61, 0x00, 0x18, 0x6e, 0x00, 0x64, 0x05, 0x68, 0xae, 0xd0, 0x73, 0x65, 0x00, 0x2d, 0x2a, 0x00, 0x53, 0x20, - 0x05, 0x70, 0x20, 0x91, 0x65, 0x20, 0x85, 0x74, 0xab, 0x20, 0x9b, 0x69, 0x20, 0xa1, 0x6e, 0x20, 0x93, 0x6c, 0x20, 0x1d, 0x04, 0x70, 0xff, 0x75, - 0x64, 0x20, 0xff, 0x06, 0x10, 0xfb, 0x3a, 0x1a, 0x4f, 0x81, 0x6f, 0x61, 0x21, 0x81, 0xbe, 0x30, 0xfb, 0x74, 0x05, 0x80, 0xfb, 0x91, 0x7f, 0xd0, - 0x81, 0x00, 0x51, 0x7d, 0x04, 0x5a, 0xbf, 0x17, 0x01, 0x53, 0x77, 0x83, 0x70, 0x51, 0x01, 0x77, 0x06, 0x7b, 0x1d, 0x00, 0x78, 0xb1, 0x74, 0xb9, - 0xb8, 0xd2, 0x40, 0xd6, 0x00, 0x80, 0xb7, 0xb8, 0xd2, 0x20, 0x00, 0xfc, 0xc8, 0xee, 0x05, 0xfb, 0xa5, 0x33, 0x7f, 0x52, 0x81, 0x2d, 0x06, 0xa3, - 0x7f, 0xf2, 0x81, 0x05, 0x71, 0xfd, 0x00, 0x02, 0x00, 0x21, 0x04, 0x35, 0x04, 0x32, 0x20, 0x03, 0x40, 0x00, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x4f, - 0x04, 0x20, 0x02, 0x00, 0x13, 0x04, 0x3e, 0x04, 0x3b, 0x20, 0x01, 0x30, 0x8e, 0x20, 0x11, 0x34, 0x04, 0x38, 0x20, 0x13, 0x0c, 0xb4, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x01, 0x02, 0x08, 0x08, 0x08, 0x09, 0x08, 0x01, 0x20, 0x06, 0x07, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x5e, 0xc9, - 0x30, 0x5b, 0xec, 0x28, 0x0d, 0xc6, 0x05, 0xe8, 0x0d, 0x9f, 0xff, 0x44, 0x28, 0x15, 0x57, 0x81, 0x70, 0x68, 0x04, 0x86, 0x7b, 0x10, 0x09, 0x50, - 0x7f, 0x06, 0x31, 0xfd, 0x00, 0x00, 0xb7, 0x5f, 0x08, 0x26, 0x4f, 0x79, 0x72, 0x06, 0x98, 0x17, 0xdc, 0xb4, 0x0c, 0x1a, 0xb8, 0x30, 0xd1, 0x06, - 0x38, 0x11, 0x0f, 0x51, 0xff, 0x14, 0x28, 0x11, 0x35, 0xb9, 0x28, 0x13, 0x42, 0x28, 0x1f, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x56, 0xff, 0x02, 0x01, - 0x20, 0x01, 0x28, 0x02, 0x02, 0x20, 0x06, 0x03, 0x40, 0x07, 0xae, 0x25, 0xa9, 0x88, 0x2b, 0x07, 0x04, 0x5e, 0xd5, 0x28, 0x17, 0xdc, 0x30, 0xe9, - 0xab, 0x28, 0x1b, 0xc8, 0x06, 0x48, 0x1b, 0x46, 0x4f, 0x87, 0x76, 0xae, 0x35, 0x10, 0x15, 0xd0, 0x7f, 0x00, 0x17, 0x5f, 0xb1, 0x83, 0x8f, 0x79, - 0x70, 0x51, 0x80, 0x06, 0x78, 0x19, 0x0c, 0xd5, 0x08, 0xb8, 0xfc, 0xbc, 0x80, 0x18, 0xb7, 0xb8, 0xd2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x24, - 0x04, 0x3b, 0x8a, 0x28, 0x17, 0x32, 0x04, 0x3e, 0x20, 0x07, 0x30, 0x28, 0x1f, 0x34, 0xc9, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x02, - 0x20, 0x01, 0x03, 0x03, 0x20, 0x06, 0x40, 0x0a, 0x40, 0x07, 0x56, 0x25, 0xe3, 0x03, 0x00, 0x00, 0x41, 0x05, 0x28, 0x17, 0xea, 0x30, 0xfc, 0x30, - 0xb9, 0x06, 0x88, 0x19, 0x56, 0x46, 0x2f, 0xaf, 0x69, 0x2f, 0xb1, 0x73, 0x06, 0x88, 0x17, 0x30, 0x7f, 0x73, 0xdc, 0x06, 0x6e, 0xad, 0x07, 0x90, - 0xff, 0x69, 0x29, 0x95, 0x06, 0x90, 0xff, 0x06, 0x90, 0x7f, 0x17, 0x5f, 0x08, 0xcc, 0x91, 0xaf, 0x65, 0x06, 0x98, 0x17, 0x04, 0xd5, 0xac, 0x1a, - 0xb9, 0xac, 0xc2, 0x06, 0xb8, 0x17, 0x07, 0x13, 0x7f, 0xed, 0x06, 0xa2, 0x7f, 0x24, 0x02, 0x04, 0x40, 0x04, 0x38, 0x04, 0x41, 0x88, 0x15, 0x38, - 0x39, 0x04, 0x4f, 0x05, 0xc8, 0x19, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x04, 0x03, 0x20, 0x01, 0x28, 0x04, 0x04, 0x20, 0x06, 0x0b, 0x40, - 0x07, 0xd3, 0x25, 0x1d, 0x80, 0x2b, 0x19, 0x06, 0x5e, 0xd8, 0x30, 0xeb, 0x30, 0xc7, 0xd5, 0x28, 0x13, 0x06, 0x78, 0x17, 0x47, 0x2f, 0xad, 0x6c, - 0x2f, 0xa5, 0x65, 0x28, 0x1f, 0x8b, 0x06, 0x3f, 0xb1, 0x47, 0x00, 0x75, 0x60, 0x81, 0x72, 0x06, 0x48, 0x1b, 0x07, 0x10, 0xff, 0x62, 0x68, 0x80, - 0xff, 0x06, 0x38, 0x1b, 0x47, 0x00, 0xfc, 0xa1, 0x7f, 0x73, 0x81, 0x06, 0x0f, 0xb4, 0x77, 0x6d, 0x14, 0x5c, 0xb7, 0x5f, 0x06, 0x98, 0x17, 0x03, - 0xec, 0xd5, 0x70, 0xb3, 0x7c, 0xb9, 0x06, 0x98, 0x17, 0x07, 0xd3, 0x7f, 0x8a, 0x06, 0x11, 0xff, 0x13, 0x04, 0x35, 0x28, 0x13, 0x34, 0x20, 0x05, - 0x40, 0xe0, 0x88, 0x1b, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x05, 0x04, 0x06, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x06, 0x01, 0x04, 0x05, - 0x05, 0x05, 0x08, 0x05, 0xf7, 0x24, 0x33, 0x2b, 0x17, 0x07, 0x5e, 0xd5, 0x02, 0x30, 0xed, 0x30, 0xfc, 0x30, 0xcb, 0x28, 0x19, 0xb2, 0xc5, 0x28, - 0x1d, 0x06, 0x38, 0x17, 0x72, 0x00, 0x6f, 0x2f, 0x27, 0x69, 0x2f, 0x2b, 0x5f, 0x67, 0x2f, 0xb5, 0x6e, 0x06, 0xc0, 0x7f, 0x38, 0x23, 0x0e, 0xb0, - 0xff, 0x06, 0x38, 0x17, 0x06, 0xd0, 0x7f, 0x00, 0x3c, 0x68, 0x57, 0x7f, 0x81, 0x5b, 0x39, 0x68, 0x80, 0x06, 0x78, 0x17, 0x50, 0xd7, 0x5c, 0xb8, - 0xdd, 0xb2, 0xb8, 0x6a, 0xc5, 0x06, 0x58, 0x15, 0x0f, 0x12, 0x7f, 0x13, 0x28, 0x0f, 0x3e, 0x28, 0x0d, 0x38, 0xaf, 0x28, 0x11, 0x33, 0x28, 0x23, - 0x3d, 0x05, 0xc8, 0x15, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x28, 0x12, 0xa8, 0x28, 0x16, 0x06, 0x28, 0x19, 0x02, 0x20, 0x05, 0x06, 0x06, - 0xd8, 0x22, 0x25, 0xac, 0x2b, 0x17, 0x08, 0x5e, 0xea, 0x28, 0x11, 0xd3, 0x02, 0x30, 0xe5, 0x30, 0xeb, 0x30, 0xd5, 0x06, 0x28, 0x15, 0x00, 0x22, - 0x00, 0x4c, 0x2e, 0xa5, 0x6d, 0x00, 0x62, 0x2f, 0xb5, 0x72, 0xdd, 0x28, 0x17, 0x06, 0x90, 0x7f, 0x6f, 0x06, 0x60, 0x81, 0x07, 0x70, 0xff, 0x51, - 0x7f, 0x6f, 0x0e, 0x00, 0x7f, 0x0c, 0x97, 0x67, 0x21, 0x58, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xbc, 0xb9, 0x03, 0xd4, 0xbd, 0x74, 0xb9, 0x50, 0xd7, - 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x41, 0x1b, 0x28, 0x11, 0x3c, 0x04, 0x31, 0x04, 0x43, 0x28, 0x1f, 0xe0, 0x3d, 0x29, 0x0e, 0xd3, 0xff, 0x10, - 0x0e, 0x10, 0xff, 0x07, 0x06, 0x09, 0x06, 0x07, 0x20, 0x09, 0x07, 0x20, 0x06, 0x05, 0x06, 0x07, 0x07, 0x07, 0x08, 0x07, 0x29, 0x24, 0x09, 0x2b, - 0x19, 0x09, 0x5e, 0xce, 0x20, 0x30, 0xfc, 0x28, 0x13, 0xc8, 0x30, 0xfb, 0x30, 0xd6, 0x0a, 0x30, 0xe9, 0x30, 0xd0, 0x28, 0x25, 0xc8, 0x05, 0xc8, - 0x1f, 0x4e, 0x80, 0x2f, 0xad, 0x72, 0x00, 0x74, 0x00, 0x68, 0x00, 0x20, 0x2a, 0x00, 0x42, 0x2f, 0xbb, 0x61, 0x28, 0x23, 0x61, 0x2f, 0xbf, 0x74, - 0xc5, 0x05, 0x6f, 0xb7, 0xd0, 0x73, 0x2d, 0x00, 0x53, 0x2f, 0xb3, 0x70, 0x20, 0x8f, 0xa8, 0x3f, 0xb9, 0x74, 0x2f, 0xcb, 0x69, 0x4f, 0xcd, 0x61, - 0x00, 0x6c, 0xbb, 0x04, 0xc0, 0xff, 0x64, 0x29, 0x19, 0x06, 0x10, 0xfb, 0x00, 0x10, 0xff, 0x65, 0x21, 0x85, 0x31, 0x01, 0x58, 0x74, 0x00, 0x41, - 0x01, 0x65, 0x05, 0x80, 0x7f, 0x05, 0x91, 0x81, 0x17, 0x53, 0x03, 0x01, 0x5e, 0xc9, 0x62, 0xed, 0x73, 0x79, 0x72, 0x06, 0x58, 0x1d, 0x00, 0x78, - 0xb1, 0x74, 0xb9, 0xb8, 0xd2, 0x0c, 0xbe, 0x03, 0x7c, 0xb7, 0x18, 0xbc, 0xb8, 0xd2, 0x06, 0x18, 0x1d, 0x33, 0x7f, 0xb8, 0x52, 0x81, 0x2d, 0x07, - 0x23, 0x7f, 0x92, 0x7f, 0x05, 0x73, 0x7f, 0x21, 0x04, 0x35, 0x20, 0x04, 0x32, 0x20, 0x03, 0x40, 0x04, 0x3d, 0x04, 0x4b, 0x02, 0x04, 0x39, 0x04, - 0x20, 0x00, 0x11, 0x28, 0x21, 0x30, 0xae, 0x28, 0x29, 0x30, 0x20, 0x11, 0x42, 0x05, 0x08, 0x29, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x08, - 0x02, 0x07, 0x01, 0x07, 0x01, 0x01, 0x08, 0x20, 0x06, 0x08, 0x00, 0x07, 0x08, 0x08, 0x08, 0x08, 0xc2, 0x24, 0xc7, 0x02, 0x03, 0x00, 0x00, 0x0a, - 0x5e, 0xaa, 0x28, 0x17, 0xd9, 0x83, 0x28, 0x19, 0xa2, 0x30, 0xa4, 0x30, 0xbb, 0x28, 0x21, 0x05, 0xb8, 0x13, 0x8c, 0x3f, 0xff, 0x4f, 0x00, 0x76, - 0x27, 0x89, 0x37, 0x7f, 0x6a, 0x00, 0x58, 0x73, 0x20, 0x01, 0x65, 0x04, 0x87, 0x81, 0x10, 0x10, 0x50, 0x7f, 0x0a, 0x4e, 0x7e, 0x04, 0x82, 0x5f, - 0x74, 0x14, 0x5c, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x24, 0xc6, 0x84, 0xbc, 0x08, 0xb8, 0x74, 0xc7, 0x35, 0x24, 0xc1, 0x06, 0x18, 0x13, 0x0f, - 0x33, 0x7f, 0x1e, 0x68, 0x15, 0x4d, 0x28, 0x13, 0x58, 0x41, 0x28, 0x23, 0x3b, 0x05, 0x08, 0x09, 0x10, 0x17, 0xd4, 0xff, 0x09, 0x09, 0x0a, 0x0a, - 0x09, 0x0a, 0x0a, 0x09, 0x20, 0x06, 0x06, 0x20, 0x04, 0x09, 0x08, 0x09, 0x57, 0x25, 0x54, 0x2b, 0x0b, 0x0b, 0x5e, 0xbe, 0x80, 0x28, 0x0f, 0xc8, - 0x30, 0xfb, 0x30, 0xdb, 0x30, 0xe9, 0x35, 0x30, 0xf3, 0x20, 0x09, 0x05, 0xf8, 0x17, 0x53, 0x2f, 0x8f, 0x75, 0x6b, 0x2f, 0x5b, 0x48, 0x2f, 0x9b, - 0x6c, 0x2f, 0x99, 0x3f, 0xbb, 0x64, 0x05, 0x6f, 0x33, 0xd0, 0x73, 0x45, 0x65, 0x2d, 0x35, 0x4d, 0x00, 0xe9, 0x4f, 0x25, 0x64, 0x04, 0xef, 0x29, - 0xae, 0x70, 0xff, 0xfc, 0x2d, 0xab, 0x68, 0x06, 0x20, 0xf9, 0x79, 0x97, 0x71, 0x6f, 0x61, 0xbe, 0x2f, 0xab, 0x4d, 0x69, 0xa3, 0x05, 0x50, 0xfb, - 0x91, 0x7f, 0x00, 0xd0, 0x81, 0x04, 0xbf, 0xc7, 0x57, 0x04, 0x53, 0x77, 0x83, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x90, 0xc7, 0x04, - 0xc7, 0xb8, 0xd2, 0x40, 0xd6, 0x0b, 0x80, 0xb7, 0xb8, 0xd2, 0x06, 0x38, 0x19, 0x5a, 0x23, 0x7d, 0x32, 0xeb, 0x60, 0x2d, 0x06, 0x43, 0x7d, 0x07, - 0x11, 0xff, 0x2e, 0x04, 0x36, 0x04, 0x3d, 0x00, 0x04, 0x30, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x13, 0x28, 0x04, 0x3e, 0x28, 0x17, 0x3b, 0x20, 0x0d, - 0x3d, 0x04, 0x34, 0x38, 0x04, 0x38, 0x20, 0x13, 0x0d, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x0a, 0x07, 0x00, 0x0a, 0x08, 0x07, 0x0a, 0x0a, - 0x0c, 0x07, 0x0c, 0x20, 0x0a, 0x0a, 0x20, 0x01, 0x09, 0x25, 0x11, 0x03, 0x00, 0x08, 0x00, 0x0c, 0x5e, 0xe6, 0x28, 0x15, 0xec, 0x30, 0xd2, 0xd5, - 0x06, 0x28, 0x11, 0x5f, 0xff, 0x55, 0x28, 0x13, 0x72, 0x2f, 0xb1, 0x63, 0x28, 0x19, 0x40, 0x74, 0x10, 0x16, 0x20, 0x7f, 0x4c, 0x4e, 0x97, 0x5f, - 0xd2, 0x52, 0x30, 0x2f, 0x65, 0x06, 0x78, 0x19, 0x38, 0x15, 0x08, 0xb8, 0x50, 0xd7, 0xc0, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x23, 0x04, 0x42, - 0x04, 0x40, 0x04, 0x19, 0x35, 0x04, 0x45, 0x20, 0x07, 0x10, 0x1e, 0x34, 0xff, 0x0b, 0x0b, 0x50, 0x01, 0x12, 0x0a, 0x0b, 0x09, 0x50, 0x07, 0x25, - 0xa2, 0x28, 0x17, 0x0d, 0x00, 0x5e, 0xbc, 0x30, 0xfc, 0x30, 0xe9, 0x30, 0xf3, 0xad, 0x06, 0x88, 0x17, 0x5a, 0x2f, 0xa3, 0x65, 0x06, 0x4f, 0x29, - 0x7d, 0x2f, 0xe9, 0x8f, 0xa7, 0xe8, 0x04, 0xdf, 0x19, 0x08, 0x70, 0xff, 0x91, 0x7d, 0x61, 0x0e, 0x20, 0x7f, 0xfd, 0x6c, 0x70, 0x60, 0x51, 0x06, - 0x78, 0x13, 0x3f, 0xff, 0x1c, 0xc8, 0x7c, 0xc7, 0x80, 0x6a, 0xb7, 0x06, 0x78, 0x15, 0x07, 0x72, 0x7f, 0xe2, 0x4f, 0x21, 0x69, 0x06, 0x22, 0x81, - 0x17, 0x80, 0x28, 0x13, 0x3b, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x34, 0x0e, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x08, 0x1b, 0x07, 0x33, 0xff, 0x10, 0x0e, - 0xb0, 0x7f, 0x0c, 0x44, 0x0c, 0x50, 0x01, 0x0b, 0x0c, 0x04, 0x40, 0x0a, 0x9f, 0x24, 0x20, 0x91, 0x02, 0x00, 0x3f, 0xff, 0x01, 0x08, 0x08, 0x08, - 0x09, 0x28, 0x08, 0x01, 0x20, 0x06, 0x07, 0x20, 0x05, 0x01, 0x01, 0x02, 0x95, 0x30, 0x01, 0x02, 0x02, 0x20, 0x06, 0x03, 0x40, 0x07, 0x03, 0x30, - 0x01, 0x2a, 0x03, 0x03, 0x20, 0x06, 0x0a, 0x40, 0x07, 0x04, 0x30, 0x01, 0x04, 0x50, 0x04, 0x20, 0x06, 0x0b, 0x40, 0x07, 0x05, 0x04, 0x06, 0x04, - 0x10, 0x05, 0x06, 0x05, 0x20, 0x06, 0x01, 0x04, 0x05, 0x05, 0x6a, 0x05, 0x30, 0x0a, 0x20, 0x0e, 0x06, 0x20, 0x11, 0x02, 0x20, 0x05, 0x06, 0x00, - 0x06, 0x07, 0x06, 0x09, 0x06, 0x07, 0x09, 0x07, 0x80, 0x20, 0x06, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x16, 0x07, 0x01, 0x07, 0x40, 0x6d, - 0x01, 0x20, 0x70, 0x30, 0x7b, 0x09, 0x05, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x20, 0x06, 0x06, 0x20, 0x04, 0x80, 0x20, 0x0d, 0x0a, 0x07, 0x0a, 0x08, - 0x07, 0x0a, 0x0a, 0x07, 0x0c, 0x07, 0x0c, 0x0a, 0x0a, 0x20, 0x01, 0xf8, 0xdf, 0xf0, 0xd7, 0x80, 0x3f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xb4, 0x8a, 0x00, 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x5f, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xc4, 0xe5, 0x46, 0x7c, 0x00, 0x00, 0x00, 0x02, 0x5f, 0xa6, 0x30, 0xa7, 0x30, 0xea, 0x0c, 0x30, 0xf3, 0x30, 0xc8, 0x20, 0x03, 0x06, 0x38, - 0x21, 0x57, 0x00, 0x10, 0x65, 0x00, 0x6c, 0x20, 0x01, 0x69, 0x00, 0x6e, 0x00, 0x06, 0x67, 0x00, 0x74, 0x00, 0x6f, 0x20, 0x07, 0x10, 0x0d, 0xb0, - 0x7f, 0x52, 0xa8, 0x21, 0xff, 0x67, 0x21, 0xfd, 0xf3, 0x21, 0xff, 0x20, 0x00, 0x64, 0xa0, 0x22, 0x0d, 0x20, 0x05, 0xc2, 0x13, 0xe0, 0x60, 0x75, - 0x70, 0x7f, 0x04, 0x98, 0x27, 0x59, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0xf0, 0xc6, 0x0c, 0xc1, 0xb9, 0x34, 0xd1, 0x06, 0x9b, 0x9b, 0x0e, 0xf3, 0x7f, - 0x12, 0x04, 0x10, 0x35, 0x04, 0x3b, 0x20, 0x01, 0x38, 0x04, 0x3d, 0x04, 0x07, 0x33, 0x04, 0x42, 0x04, 0x3e, 0x20, 0x07, 0x10, 0x15, 0xb4, 0xff, - 0x06, 0xf6, 0xff, 0x00, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x0c, 0x01, 0x01, 0x00, 0x0f, 0x10, 0x02, 0x0f, 0x01, 0x01, 0x01, 0x01, 0x10, 0x9f, 0xe2, - 0x4a, 0x28, 0x17, 0x03, 0x5f, 0xaa, 0x30, 0x05, 0xfc, 0x30, 0xaf, 0x30, 0xe9, 0x28, 0x19, 0xc9, 0x06, 0x48, 0x17, 0x01, 0x41, 0x00, 0x75, 0x00, - 0x63, 0x00, 0x6b, 0x28, 0x1b, 0x5c, 0x61, 0x28, 0x19, 0x64, 0x10, 0x0e, 0x00, 0x7f, 0x00, 0x38, 0x17, 0x05, 0xb2, 0x13, 0x65, 0x59, 0x08, 0x4b, - 0x51, 0x70, 0x51, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x74, 0x06, 0xd0, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x7f, 0xb5, 0x0e, 0xf3, 0x7f, 0x1e, 0x2b, 0x04, - 0x3a, 0x28, 0x17, 0x35, 0x28, 0x15, 0x34, 0x05, 0xc8, 0x0f, 0x10, 0x0f, 0x74, 0xff, 0xa4, 0x06, 0xf6, 0xff, 0x02, 0x38, 0x0c, 0x0a, 0x02, 0x20, - 0x06, 0x09, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0xc4, 0xe5, 0x46, 0x28, 0x17, 0x00, 0x04, 0x5f, 0xd9, 0x30, 0xa4, 0x30, 0xfb, 0x30, 0x11, 0xaa, - 0x30, 0xd6, 0x20, 0x05, 0xd7, 0x30, 0xec, 0x28, 0x1f, 0x15, 0xc6, 0x30, 0xa3, 0x05, 0xa8, 0x21, 0x42, 0x28, 0x0f, 0x79, 0x2e, 0x29, 0x15, 0x6f, - 0x00, 0x66, 0x2e, 0x2f, 0x50, 0x2f, 0xbb, 0x65, 0x2f, 0xb9, 0x63, 0x74, 0x20, 0x13, 0x10, 0x0d, 0x90, 0x7f, 0x68, 0x00, 0xed, 0x2a, 0x15, 0x78, - 0x15, 0x80, 0x05, 0xd2, 0x03, 0x6e, 0x66, 0x26, 0x4f, 0x82, 0x84, 0x7e, 0x40, 0x6e, 0x06, 0x78, 0x19, 0xa0, 0xbc, 0x74, 0xc7, 0x24, 0xc6, 0x00, - 0x0c, 0xbe, 0x0c, 0xd5, 0x0c, 0xb8, 0xf0, 0xd2, 0xd0, 0x06, 0x1b, 0x99, 0x0e, 0xf3, 0x7f, 0x11, 0x28, 0x13, 0x39, 0x04, 0x2d, 0x00, 0x14, 0x3e, - 0x04, 0x44, 0x20, 0x05, 0x1f, 0x68, 0x23, 0x42, 0x04, 0x74, 0x38, 0x05, 0x68, 0x25, 0x10, 0x0f, 0x34, 0xff, 0x06, 0xb6, 0xff, 0x03, 0x38, 0x0c, - 0x02, 0x03, 0xa0, 0x20, 0x06, 0x01, 0x20, 0x05, 0x03, 0x03, 0x35, 0xe5, 0x46, 0x02, 0x7d, 0x00, 0x00, 0x05, 0x5f, 0xab, 0x28, 0x09, 0xbf, 0x03, - 0x30, 0xd9, 0x30, 0xea, 0x30, 0xfc, 0x05, 0xa8, 0x0d, 0x9f, 0xff, 0x51, 0x43, 0x4f, 0xa7, 0x74, 0x2e, 0x35, 0x72, 0x00, 0x62, 0x2f, 0xbb, 0x60, - 0x72, 0x05, 0x88, 0x11, 0x10, 0x0f, 0x50, 0x7f, 0x4e, 0x57, 0x79, 0x72, 0x2f, 0x10, 0x4f, 0xf7, 0x96, 0x06, 0x78, 0x17, 0x94, 0xce, 0x30, 0xd1, - 0x0d, 0xa0, 0xbc, 0xac, 0xb9, 0x06, 0x3e, 0xab, 0x0f, 0x33, 0x7f, 0x1a, 0x68, 0x07, 0x07, 0x35, 0x04, 0x40, 0x04, 0x31, 0x40, 0x05, 0x05, 0x78, - 0x11, 0x10, 0x17, 0x54, 0xff, 0x4a, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x00, 0x04, 0x0c, 0xe1, 0xc4, 0x7a, 0x00, - 0x00, 0x06, 0x0b, 0x5f, 0xc0, 0x30, 0xcb, 0x28, 0x11, 0xc7, 0x28, 0x1d, 0x06, 0x54, 0x99, 0x46, 0x4f, 0x2f, 0x9b, 0x61, 0x00, 0x67, 0x2f, 0xaf, - 0x10, 0x16, 0x50, 0x7f, 0x65, 0x04, 0x59, 0x54, 0x58, 0x08, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x03, 0x24, 0xc6, 0xc0, 0xd0, 0xe0, 0xac, 0x06, - 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x41, 0x1e, 0x28, 0x13, 0x30, 0x04, 0x33, 0x04, 0x3e, 0x05, 0xc8, 0x0d, 0x80, 0x10, 0x17, 0x94, 0xff, 0x05, 0x0a, - 0x0a, 0x0a, 0x0a, 0x09, 0x05, 0x00, 0x05, 0x0a, 0x0b, 0x0a, 0x0a, 0x05, 0x05, 0x05, 0x08, 0x05, 0x60, 0xdf, 0x39, 0x2f, 0x98, 0x07, 0x5f, 0xdb, - 0x80, 0x28, 0x15, 0xaf, 0x30, 0xb9, 0x30, 0xd9, 0x30, 0xa4, 0xa2, 0x06, 0x48, 0x19, 0x48, 0x2f, 0xaf, 0x77, 0x00, 0x6b, 0x2f, 0xaf, 0x27, 0x03, - 0x00, 0x73, 0x00, 0x20, 0x00, 0x42, 0x2f, 0xbf, 0x05, 0xbf, 0xb1, 0xc4, 0x10, 0x06, 0xf0, 0x7f, 0x31, 0xef, 0x68, 0x00, 0xed, 0x2e, 0xb5, 0x20, - 0x00, 0x58, 0x64, 0x2e, 0xb5, 0x20, 0xa2, 0x11, 0x05, 0x3f, 0xbf, 0x0d, 0x97, 0x4b, 0x10, 0x51, 0x7e, 0x6e, 0x06, 0x98, 0x17, 0x38, 0xd6, 0x6c, - 0xd0, 0x03, 0xa4, 0xc2, 0xa0, 0xbc, 0x74, 0xc7, 0x06, 0x5b, 0x97, 0x0e, 0xf3, 0x7f, 0x40, 0x25, 0x28, 0x11, 0x3a, 0x04, 0x41, 0x04, 0x2d, 0x00, - 0x07, 0x11, 0x04, 0x35, 0x04, 0x39, 0x06, 0x08, 0x1d, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x40, 0x06, 0x38, 0x0c, 0x01, 0x06, 0x06, 0x05, - 0x06, 0x10, 0x00, 0x05, 0x06, 0x06, 0x06, 0x06, 0xea, 0xe3, 0xc9, 0x00, 0x7d, 0x00, 0x00, 0x08, 0x5f, 0xde, 0x30, 0xca, 0x02, 0x30, 0xef, 0x30, - 0xc4, 0x30, 0xfb, 0x20, 0x05, 0xf3, 0x0a, 0x30, 0xac, 0x30, 0xcc, 0x05, 0xe8, 0x1f, 0x4d, 0x2f, 0xad, 0x6e, 0xa0, 0x48, 0x1b, 0x61, 0x2f, 0xb9, - 0x75, 0x00, 0x2d, 0x00, 0x57, 0xa2, 0x40, 0x11, 0x67, 0x40, 0x17, 0x75, 0x00, 0x69, 0x10, 0x14, 0xe0, 0x7f, 0x9b, 0x00, 0x73, 0xb3, 0x7e, 0xe6, - 0x74, 0xfe, 0x56, 0x2d, 0x00, 0x00, 0xfa, 0x65, 0x3c, 0x68, 0xaa, 0x52, 0x0a, 0x40, 0x4f, 0x05, 0xd8, 0x23, 0xc8, 0xb9, 0x08, 0xb1, 0x40, 0xc6, - 0x00, 0x2c, 0xd2, 0x2d, 0x00, 0x55, 0xc6, 0x70, 0xac, 0x30, 0x04, 0xb2, 0x05, 0xf8, 0x1f, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x51, 0x3d, - 0x20, 0x03, 0x32, 0x20, 0x07, 0x42, 0x04, 0x43, 0x28, 0x1f, 0x51, 0x23, 0x40, 0x11, 0x33, 0x40, 0x17, 0x43, 0x04, 0x38, 0x04, 0xe8, 0x29, 0xa1, - 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x07, 0x06, 0x20, 0x08, 0x00, 0x07, 0x07, 0x07, 0x07, 0x4d, 0xe3, 0xe2, 0x7c, 0x00, 0x00, - 0x00, 0x09, 0x5f, 0xcd, 0x30, 0xeb, 0x30, 0x41, 0xbd, 0x28, 0x11, 0xfb, 0x30, 0xde, 0x30, 0xfc, 0x20, 0x0b, 0x15, 0xdc, 0x30, 0xed, 0x05, 0xc8, - 0x17, 0x4e, 0x2f, 0xa9, 0x6c, 0x2f, 0xa9, 0x75, 0x6f, 0x28, 0x1d, 0x06, 0x3d, 0xb1, 0x10, 0x06, 0xf0, 0x7f, 0x52, 0x2e, 0xa9, 0x67, 0x29, 0xfd, - 0x45, 0xf3, 0x2a, 0x1d, 0x20, 0x00, 0x64, 0x2e, 0xb7, 0x20, 0x05, 0xc2, 0x13, 0x03, 0xb3, 0x7e, 0x14, 0x5c, 0x0a, 0x90, 0x05, 0xb8, 0x09, 0xdf, - 0xff, 0x00, 0x2c, 0xb1, 0xa8, 0xc2, 0x2d, 0x00, 0xd0, 0xb9, 0x08, 0x84, 0xbc, 0xec, 0xb7, 0x10, 0x06, 0x32, 0xff, 0x1d, 0x04, 0x35, 0x00, 0x04, - 0x3b, 0x04, 0x4c, 0x04, 0x41, 0x04, 0x3e, 0xe5, 0x28, 0x1f, 0x10, 0x0e, 0x14, 0x7f, 0x0e, 0xf6, 0x7f, 0x08, 0x08, 0x20, 0x01, 0x0b, 0x20, 0x05, - 0x20, 0x09, 0x07, 0x40, 0x0a, 0xa3, 0xe2, 0x32, 0x7b, 0x00, 0x08, 0x00, 0x0a, 0x5f, 0xce, 0x28, 0x0d, 0xb9, 0x30, 0xe9, 0xb1, 0x28, 0x19, 0xc9, - 0x05, 0xc8, 0x0f, 0x98, 0x17, 0x6f, 0x00, 0x72, 0x2f, 0xa9, 0x68, 0x68, 0x28, 0x1d, 0x3f, 0xb9, 0x64, 0x10, 0x15, 0xe0, 0x7f, 0x17, 0x53, 0x30, - 0x10, 0x57, 0x27, 0x59, 0x06, 0x98, 0x17, 0x78, 0xb1, 0xa4, 0xc2, 0x0d, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x78, 0x97, 0x0e, 0xf3, 0x7f, 0x1d, 0x28, - 0x0f, 0x15, 0x40, 0x04, 0x42, 0x28, 0x1b, 0x35, 0x28, 0x17, 0x34, 0x06, 0x08, 0x19, 0x95, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x09, 0x20, 0x01, 0x08, - 0x20, 0x05, 0x0a, 0x30, 0x04, 0x04, 0x09, 0x09, 0x9a, 0xe6, 0xf5, 0x28, 0x17, 0x0c, 0x5f, 0x15, 0xb5, 0x30, 0xa6, 0x06, 0xc8, 0x17, 0x53, 0x2f, - 0xa9, 0x75, 0x06, 0xa8, 0x17, 0xa1, 0x10, 0x0e, 0xf0, 0x7f, 0x57, 0x06, 0xe8, 0x17, 0xac, 0xc0, 0xb0, 0xc6, 0x06, 0xb8, 0x19, 0x83, 0x0e, 0xf3, - 0x7f, 0x21, 0x04, 0x30, 0x04, 0x43, 0x06, 0xa8, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x00, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0d, 0x0a, 0x0a, 0x00, 0x0b, - 0x0c, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0xff, 0xde, 0xbb, 0x77, 0x00, 0x00, 0x0d, 0x5f, 0x46, 0xbf, 0x28, 0x13, 0xca, 0x30, 0xad, 0x06, - 0x48, 0x13, 0x3f, 0xff, 0x54, 0xa0, 0x2f, 0xa5, 0x72, 0x4f, 0xa9, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x81, 0x10, 0x16, 0x10, 0x7f, 0x58, 0xc9, 0x62, - 0xb3, 0x7e, 0xfa, 0x06, 0x88, 0x1b, 0x00, 0xc0, 0xd0, 0x7c, 0xb7, 0x98, 0xb0, 0xa4, 0xd0, 0xaa, 0x10, 0x06, 0x73, 0x7f, 0x22, 0x28, 0x17, 0x40, - 0x28, 0x1b, 0x3d, 0x28, 0x1f, 0x3a, 0x30, 0x04, 0x38, 0x06, 0x08, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x0c, 0x0c, 0x0c, 0x01, 0x0c, 0x0e, 0x0b, - 0x0b, 0x0c, 0x0d, 0x0c, 0x28, 0x19, 0x00, 0x0b, 0x0b, 0x38, 0xe4, 0xc9, 0x7b, 0x00, 0x00, 0x00, 0x0e, 0x5f, 0xef, 0x30, 0xa4, 0x30, 0xab, 0x30, - 0x55, 0xc8, 0x06, 0x88, 0x17, 0x57, 0x2f, 0xa5, 0x69, 0x28, 0x11, 0x61, 0x2f, 0xb3, 0x40, 0x6f, 0x10, 0x16, 0x20, 0x7f, 0x00, 0x60, 0x61, 0x53, - 0x58, 0x62, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x40, 0xc6, 0x74, 0xc7, 0x74, 0x15, 0xce, 0xa0, 0xd1, 0x10, 0x06, 0x73, 0x7f, 0x23, 0x28, 0x17, - 0x38, 0x28, 0x11, 0x06, 0x30, 0x04, 0x42, 0x04, 0x3e, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0c, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x10, 0x28, - 0x1a, 0x0f, 0x0e, 0x40, 0x0e, 0x38, 0x22, 0x23, 0xe5, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x5f, 0xae, 0x30, 0xba, 0x30, 0xdc, 0x30, 0x14, 0xfc, - 0x30, 0xf3, 0x06, 0x68, 0x19, 0x47, 0x2f, 0xa3, 0x73, 0x00, 0x54, 0x62, 0x28, 0x13, 0x72, 0x2f, 0xb3, 0x65, 0x10, 0x16, 0x00, 0x7f, 0x09, 0x54, - 0x02, 0xaf, 0x65, 0x2f, 0x4f, 0x69, 0x60, 0x06, 0x78, 0x19, 0x30, 0x06, 0xae, 0x88, 0xc9, 0x88, 0xbc, 0x06, 0x7b, 0x95, 0x0f, 0x13, 0x7f, 0x13, - 0x88, 0x28, 0x15, 0x41, 0x04, 0x31, 0x28, 0x13, 0x40, 0x04, 0x3d, 0xc0, 0x06, 0x28, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x04, 0x04, 0x04, 0x04, - 0x05, 0x00, 0x0d, 0x0d, 0x04, 0x05, 0x03, 0x04, 0x0d, 0x0d, 0x00, 0x0d, 0x0d, 0x81, 0xe4, 0x97, 0x7e, 0x00, 0x00, 0x00, 0x10, 0x5f, 0xa6, 0x30, - 0xa7, 0x30, 0xb9, 0x30, 0x1d, 0xc8, 0x30, 0xb3, 0x28, 0x1b, 0x30, 0x07, 0x06, 0x1f, 0xaf, 0x65, 0x28, 0x17, 0x05, 0x74, 0x00, 0x20, 0x00, 0x43, - 0x2f, 0xaf, 0x61, 0x40, 0x0b, 0xeb, 0x10, 0x0d, 0xb0, 0x7f, 0x31, 0xf5, 0x31, 0xff, 0x61, 0x22, 0x01, 0x4f, 0x62, 0x0b, 0x05, 0xba, 0x1d, 0x0c, - 0x7f, 0x89, 0xb8, 0x5c, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xe8, 0xc6, 0x03, 0xa4, 0xc2, 0xb8, 0xd2, 0x54, 0xcf, 0x30, 0x05, 0x06, 0x3b, 0x99, 0x88, - 0x0e, 0xf1, 0xff, 0x23, 0x04, 0x4d, 0x28, 0x17, 0x42, 0x04, 0x2d, 0x3c, 0x00, 0x1a, 0x28, 0x1b, 0x30, 0x09, 0x10, 0x15, 0xd4, 0xff, 0x06, 0xf6, - 0xff, 0x0e, 0x10, 0x00, 0x10, 0x10, 0x10, 0x04, 0x0e, 0x0e, 0x10, 0x04, 0x00, 0x0f, 0x10, 0x0e, 0x0e, 0x0e, 0x0e, 0xd1, 0xe1, 0x01, 0xc0, 0x79, - 0x00, 0x00, 0x11, 0x5f, 0xde, 0x28, 0x0f, 0x06, 0xeb, 0x30, 0xdc, 0x30, 0xed, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x4d, 0x88, 0x28, 0x0b, 0x72, 0x00, - 0x6c, 0x6f, 0xb1, 0x6f, 0x00, 0x75, 0x08, 0x00, 0x67, 0x00, 0x68, 0x10, 0x15, 0xa0, 0x7f, 0x6c, 0x9a, 0x14, 0x04, 0x5c, 0x2f, 0x4f, 0xd2, 0x52, - 0x06, 0x78, 0x1b, 0xd0, 0xb9, 0x0c, 0x84, 0xbc, 0xec, 0xb7, 0x06, 0x78, 0x95, 0x0f, 0x13, 0x7f, 0x1c, 0x04, 0x01, 0x30, 0x04, 0x3b, 0x04, 0x4c, - 0x04, 0x31, 0x28, 0x15, 0x62, 0x40, 0x28, 0x19, 0x10, 0x1d, 0xf4, 0xff, 0x0f, 0x07, 0x07, 0x20, 0x01, 0x0f, 0x08, 0x0f, 0x07, 0x08, 0x05, 0x20, - 0x05, 0x0f, 0x0f, 0x7b, 0x00, 0xe2, 0xb4, 0x7b, 0x00, 0x00, 0x12, 0x5f, 0xbf, 0x02, 0x30, 0xb9, 0x30, 0xde, 0x30, 0xf3, 0x06, 0x68, 0x15, 0x00, - 0x2a, 0x00, 0x54, 0x4f, 0xa3, 0x6d, 0x2f, 0xa9, 0x6e, 0x10, 0x16, 0x50, 0x7f, 0x58, 0x08, 0xaf, 0x65, 0xfc, 0x66, 0x06, 0x78, 0x15, 0x00, 0x00, - 0xdc, 0x06, 0xd0, 0x88, 0xc9, 0x3c, 0xba, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x22, 0x8b, 0x28, 0x17, 0x41, 0x04, 0x3c, 0x28, 0x1d, 0x3d, 0x06, - 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x00, 0x10, 0x0d, 0x0d, 0x0d, 0x0d, 0x0f, 0x10, 0x10, 0x00, 0x0d, 0x0e, 0x0d, 0x0d, 0x10, 0x10, 0x10, 0x10, - 0x1a, 0x9a, 0xe2, 0x27, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x38, 0x34, 0x0c, 0x00, 0x01, 0x01, 0x0f, 0x10, 0x02, 0x0f, 0x01, 0x01, 0x12, 0x01, - 0x01, 0x02, 0x30, 0x04, 0x0a, 0x02, 0x20, 0x06, 0x09, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x51, 0x03, 0x20, 0x06, 0x01, - 0x20, 0x05, 0x03, 0x03, 0x04, 0x30, 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x05, 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, - 0x05, 0x05, 0x0a, 0x00, 0x0b, 0x0a, 0x0a, 0x05, 0x05, 0x05, 0x05, 0x06, 0x80, 0x30, 0x04, 0x01, 0x06, 0x06, 0x05, 0x06, 0x10, 0x05, 0x04, 0x06, - 0x06, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x65, 0x07, 0x30, 0x08, 0x38, 0xaa, 0x08, 0x08, 0x20, 0x01, 0x0b, 0x20, 0x05, 0x4d, 0x09, 0x50, - 0x0a, 0x09, 0x09, 0x20, 0x01, 0x30, 0x05, 0x0a, 0x50, 0x0a, 0x00, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0d, 0x0a, 0x0a, 0x18, 0x0b, 0x0c, 0x0b, 0x20, - 0x51, 0x30, 0x07, 0x0c, 0x0c, 0x0c, 0x03, 0x0e, 0x0b, 0x0b, 0x0c, 0x0d, 0x0c, 0x20, 0x11, 0x20, 0x07, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x10, 0x20, - 0x12, 0x0f, 0x0e, 0x50, 0x0e, 0x30, 0x1a, 0x0d, 0x40, 0x84, 0x0d, 0x0d, 0x04, 0x05, 0x2a, 0x03, 0x04, 0x30, 0xf2, 0x0e, 0x30, 0xec, 0x04, 0x20, - 0x22, 0x04, 0x3c, 0x0f, 0x10, 0x30, 0x2a, 0xf9, 0x1f, 0xf1, 0x17, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, - 0x30, 0x01, 0x60, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9f, 0x2a, 0x9d, 0x07, 0x00, 0x00, 0x00, - 0x07, 0x60, 0xaa, 0x30, 0xb9, 0x30, 0xed, 0x40, 0x30, 0x06, 0x98, 0x1b, 0x4f, 0x00, 0x73, 0x00, 0x6c, 0x00, 0x40, 0x6f, 0x10, 0x16, 0x80, 0x7f, - 0x65, 0x59, 0xaf, 0x65, 0x46, 0x96, 0x81, 0x06, 0x9b, 0x1b, 0x24, 0xc6, 0xac, 0xc2, 0x5c, 0xb8, 0x10, 0x06, 0x93, 0x7f, 0x00, 0x1e, 0x04, 0x41, - 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x80, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x01, 0xa4, 0x20, 0x06, 0x09, 0x20, 0x05, 0x01, - 0x01, 0x58, 0x17, 0x08, 0x60, 0x00, 0xa2, 0x30, 0xfc, 0x30, 0xb1, 0x30, 0xb7, 0x30, 0x10, 0xe5, 0x30, 0xd5, 0x20, 0x09, 0xb9, 0x30, 0x0c, 0x77, - 0x80, 0x05, 0xdf, 0xbf, 0x41, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x72, 0x8e, 0x28, 0x1d, 0x68, 0x00, 0x75, 0x28, 0x23, 0x05, 0xff, 0xbd, 0x10, 0x0e, - 0xf0, 0x7f, 0x3f, 0x00, 0x96, 0x4b, 0x51, 0xc0, 0x4e, 0xe1, 0x80, 0xaf, 0x10, 0x65, 0xe1, 0x90, 0x06, 0x3f, 0xb9, 0x44, 0xc5, 0x00, 0xcf, 0x00, - 0x74, 0xb9, 0xa4, 0xc2, 0xc4, 0xd6, 0xa4, 0xc2, 0x08, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x05, 0xf2, 0xff, 0x10, 0x04, 0x3a, 0x08, 0x04, 0x35, 0x04, - 0x40, 0x28, 0x1d, 0x45, 0x04, 0x43, 0xe9, 0x28, 0x23, 0x10, 0x15, 0xf4, 0x7f, 0x06, 0xf6, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x0a, - 0x02, 0x02, 0x02, 0x02, 0x58, 0x17, 0x09, 0x28, 0x17, 0xa6, 0x80, 0x28, 0x0d, 0xc8, 0x30, 0xfb, 0x30, 0xa2, 0x30, 0xb0, 0x0a, 0x30, 0xc7, 0x30, - 0xeb, 0x05, 0xe8, 0x19, 0x41, 0x48, 0x0d, 0x74, 0x23, 0x00, 0x2d, 0x28, 0x21, 0x67, 0x00, 0x64, 0x48, 0x23, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x1c, - 0x4e, 0x3f, 0x96, 0x3c, 0x68, 0xb7, 0x5f, 0x20, 0x14, 0x5c, 0x06, 0x58, 0x17, 0xd0, 0xc5, 0xb0, 0xc6, 0xa4, 0x00, 0xc2, 0xb8, 0xd2, 0x44, 0xc5, - 0xf8, 0xad, 0x70, 0x1a, 0xb3, 0x74, 0xb9, 0x05, 0xf8, 0x1b, 0x0e, 0xf3, 0x7f, 0x2d, 0x48, 0x0d, 0x42, 0x23, 0x04, 0x2d, 0x28, 0x21, 0x33, 0x04, - 0x34, 0x48, 0x23, 0x10, 0x1d, 0xb4, 0xff, 0x4a, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x20, 0x06, 0x14, 0x20, 0x05, 0x03, 0x00, 0x03, 0x96, 0x29, 0x3e, - 0x06, 0x00, 0x00, 0x0a, 0x2b, 0x60, 0xd6, 0x28, 0x15, 0xb1, 0x28, 0x0d, 0xfc, 0x05, 0xe8, 0x0f, 0x7f, 0xff, 0x6c, 0x42, 0x4f, 0xa5, 0x5f, 0xb3, - 0x75, 0x28, 0x17, 0x10, 0x15, 0xf0, 0x7f, 0x03, 0x5e, 0x02, 0xaf, 0x65, 0x4b, 0x51, 0x15, 0x54, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x80, 0xbd, - 0xa4, 0xc2, 0x00, 0xcf, 0xe8, 0x6a, 0xb8, 0x05, 0xf8, 0x0f, 0x0f, 0x73, 0x7f, 0x11, 0x48, 0x17, 0x3a, 0x48, 0x0f, 0x43, 0xd2, 0x28, 0x17, 0x10, - 0x1d, 0xf4, 0xff, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, 0x02, 0x80, 0x20, 0x05, 0x04, 0x04, 0x7a, 0x2a, 0x41, 0x07, 0x00, 0x00, 0x00, 0x0b, - 0x60, 0xd5, 0x30, 0xa3, 0x30, 0xf3, 0x28, 0x30, 0xde, 0x28, 0x19, 0xaf, 0x06, 0x48, 0x19, 0x46, 0x00, 0x69, 0x22, 0x00, 0x6e, 0x20, 0x01, 0x6d, - 0x00, 0x61, 0x2f, 0xa9, 0x6b, 0x81, 0x10, 0x16, 0x00, 0x7f, 0xac, 0x82, 0x6c, 0x9a, 0x4b, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x40, 0xd5, - 0xc8, 0xb9, 0x74, 0xb9, 0x30, 0x6c, 0xd0, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x24, 0x04, 0x38, 0x04, 0x45, 0x3d, 0x20, 0x01, 0x3c, 0x04, 0x30, - 0x28, 0x19, 0x3a, 0x06, 0x08, 0x17, 0xa5, 0x10, 0x16, 0xf4, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x00, 0x05, 0x05, - 0xd5, 0x31, 0x27, 0x15, 0x00, 0x00, 0x01, 0x0c, 0x60, 0xd8, 0x30, 0xfc, 0x30, 0xc9, 0x06, 0xa8, 0x17, 0x58, 0x48, 0x2f, 0xa9, 0x64, 0x06, 0x88, - 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x77, 0x6d, 0xb7, 0x43, 0x5f, 0x06, 0xb8, 0x19, 0xe4, 0xd5, 0xdc, 0xb4, 0x06, 0xb8, 0x19, 0x0e, 0xf3, 0x7f, 0x06, - 0x25, 0x04, 0x35, 0x04, 0x34, 0x06, 0x88, 0x15, 0x10, 0x17, 0x14, 0xff, 0x06, 0x94, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x10, 0x20, 0x05, 0x06, - 0x06, 0x00, 0x3c, 0x2b, 0xdc, 0x07, 0x00, 0x00, 0x0d, 0x60, 0x41, 0xdb, 0x28, 0x11, 0xc0, 0x30, 0xe9, 0x30, 0xf3, 0x06, 0x48, 0x15, 0xaa, 0x38, - 0x17, 0x6f, 0x2f, 0xa7, 0x64, 0x2f, 0xad, 0x6c, 0x2f, 0xb1, 0x6e, 0xc1, 0x28, 0x23, 0x10, 0x15, 0xd0, 0x7f, 0x0d, 0x97, 0xbe, 0x8f, 0x70, 0x06, - 0x88, 0x15, 0x00, 0x00, 0x00, 0x38, 0xd6, 0x74, 0xb9, 0xec, 0xb2, 0x31, 0x80, 0xb7, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x25, 0x04, 0x3e, 0x28, - 0x11, 0x56, 0x34, 0x28, 0x17, 0x3b, 0x28, 0x1b, 0x3d, 0x20, 0x01, 0x10, 0x1d, 0xd4, 0xff, 0x07, 0x94, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, 0x11, - 0x20, 0x05, 0x07, 0x07, 0x00, 0xf1, 0x2a, 0xca, 0x03, 0x00, 0x00, 0x0e, 0x60, 0x00, 0xe0, 0x30, 0xfc, 0x30, 0xec, 0x30, 0xfb, 0x30, 0x41, 0xaa, - 0x20, 0x03, 0xed, 0x30, 0xe0, 0x30, 0xb9, 0x28, 0x25, 0x62, 0xfc, 0x28, 0x2b, 0x05, 0x78, 0x25, 0x4d, 0x00, 0xf8, 0x2f, 0xa9, 0x65, 0x2a, 0x00, - 0x20, 0x28, 0x1f, 0x67, 0x20, 0x05, 0x52, 0x28, 0x27, 0x6d, 0x30, 0x00, 0x73, 0x68, 0x29, 0x10, 0x15, 0x10, 0x7f, 0xd8, 0x9e, 0xd2, 0x52, 0x00, - 0x2d, 0x00, 0x81, 0x9c, 0xc6, 0x59, 0xaf, 0x65, 0x08, 0xbe, 0x8f, 0x14, 0x5c, 0x05, 0xf8, 0x21, 0xfc, 0xba, 0x08, 0x00, 0xb8, 0x24, 0xc6, 0xf8, - 0xad, 0x6c, 0xb8, 0xa4, 0x18, 0xc2, 0xec, 0xb2, 0x06, 0x18, 0x1d, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x51, 0x80, 0x28, 0x17, 0x35, 0x04, 0x2d, 0x00, - 0x3e, 0x04, 0x33, 0x80, 0x20, 0x05, 0x20, 0x04, 0x43, 0x04, 0x3c, 0x04, 0x41, 0xd1, 0x68, 0x29, 0x10, 0x1d, 0x14, 0xff, 0x08, 0x28, 0x0c, 0x08, - 0x07, 0x08, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, 0x08, 0x08, 0xa0, 0x2c, 0x25, 0x05, 0x04, 0x00, 0x00, 0x0f, 0x60, 0xcc, 0x48, 0x05, 0xe9, 0x30, - 0x6e, 0xf3, 0x05, 0x88, 0x09, 0xdf, 0xff, 0x4e, 0x6f, 0xaf, 0x06, 0x5f, 0xad, 0x10, 0x0f, 0x10, 0x7f, 0xfa, 0x06, 0x8b, 0x14, 0x5c, 0x70, 0x51, - 0x05, 0xf8, 0x0d, 0x9f, 0xff, 0x78, 0x06, 0xb1, 0x7c, 0xb9, 0x80, 0xb7, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x1d, 0xa3, 0x28, 0x07, 0x40, 0x28, - 0x01, 0x30, 0x04, 0x3d, 0x20, 0x01, 0x10, 0x1e, 0x14, 0xff, 0x04, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x09, 0x07, 0x80, 0x40, 0x05, 0xd7, - 0x2f, 0x3e, 0x0a, 0x00, 0x00, 0x10, 0x82, 0x68, 0x17, 0xfb, 0x30, 0xc8, 0x30, 0xed, 0x28, 0x1b, 0xc7, 0x8c, 0x28, 0x21, 0xfc, 0x30, 0xb0, 0x05, - 0xa8, 0x23, 0x78, 0x17, 0x2d, 0x00, 0x55, 0x54, 0x2f, 0xb7, 0xf8, 0x48, 0x1b, 0x65, 0x48, 0x25, 0x67, 0x10, 0x15, 0x40, 0x7f, 0x00, 0x17, 0x53, - 0x79, 0x72, 0x26, 0x4f, 0xb7, 0x5f, 0x08, 0xc9, 0x62, 0x3c, 0x68, 0x06, 0x38, 0x1d, 0x78, 0xb1, 0x74, 0x00, 0xb9, 0xb8, 0xd2, 0xb0, 0xb8, 0x2c, - 0xb1, 0x7c, 0x1c, 0xb7, 0xf8, 0xad, 0x06, 0x18, 0x1f, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x2d, 0x00, 0x51, 0x22, 0x28, 0x1d, 0x51, 0x28, 0x1b, 0x34, - 0x04, 0x35, 0x48, 0x25, 0x60, 0x33, 0x05, 0x68, 0x23, 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x08, 0x08, 0x08, 0x09, 0x28, 0x08, 0x0a, 0x20, 0x06, 0x06, - 0x20, 0x05, 0x0a, 0x0a, 0x8d, 0x00, 0x2d, 0x55, 0x08, 0x00, 0x00, 0x11, 0x60, 0xaa, 0x0b, 0x30, 0xc3, 0x30, 0xd7, 0x28, 0x0d, 0xf3, 0x05, 0xa8, - 0x0b, 0xbf, 0xff, 0x1c, 0x4f, 0x00, 0x70, 0x20, 0x01, 0x06, 0x7f, 0xad, 0x10, 0x0f, 0x10, 0x7f, 0x65, 0x59, 0x0c, 0x6e, 0x66, 0x70, 0x51, 0x06, - 0x38, 0x11, 0x5f, 0xff, 0x24, 0xc6, 0x0c, 0x0c, 0xd5, 0x80, 0xb7, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x1e, 0x04, 0x6d, 0x3f, 0x20, 0x01, 0x38, - 0x09, 0x3d, 0x28, 0x15, 0x10, 0x1e, 0x14, 0xff, 0x0b, 0x28, 0x0c, 0x14, 0x0b, 0x0a, 0x0b, 0x20, 0x06, 0x08, 0x20, 0x05, 0x0b, 0x0b, 0x00, 0x78, - 0x2b, 0x6b, 0x07, 0x00, 0x00, 0x12, 0x60, 0x05, 0xed, 0x30, 0xfc, 0x30, 0xac, 0x06, 0xa8, 0x17, 0x52, 0x2f, 0xaf, 0x70, 0x67, 0x2f, 0x9d, 0x06, - 0x78, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x57, 0x7f, 0xa0, 0x52, 0x86, 0x06, 0xb8, 0x17, 0x5c, 0xb8, 0x08, 0xac, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, - 0x20, 0x0e, 0x04, 0x43, 0x04, 0x33, 0x28, 0x15, 0x06, 0x78, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0c, 0x02, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x0c, 0x20, - 0x06, 0x0a, 0x82, 0x20, 0x05, 0x0c, 0x0c, 0xed, 0x29, 0x11, 0x2b, 0x1d, 0x13, 0x08, 0x60, 0xbd, 0x30, 0xb0, 0x28, 0x13, 0xfb, 0x30, 0xaa, 0x82, - 0x20, 0x03, 0xd5, 0x30, 0xa3, 0x30, 0xe8, 0x28, 0x27, 0xe9, 0x28, 0x30, 0xcd, 0x05, 0x88, 0x25, 0x53, 0x48, 0x17, 0x6e, 0x00, 0x20, 0x82, 0x48, - 0x1f, 0x20, 0x00, 0x46, 0x00, 0x6a, 0x28, 0x29, 0x72, 0xd0, 0x2f, 0xbb, 0x3f, 0xc1, 0x65, 0x10, 0x15, 0x00, 0x7f, 0x7e, 0x67, 0x69, 0x60, 0x00, - 0x2d, 0x00, 0xf2, 0x83, 0x24, 0x5c, 0xc9, 0x62, 0x20, 0xb7, 0x8b, 0x06, 0x18, 0x1f, 0xa1, 0xc1, 0x78, 0xb1, 0x3c, 0x01, 0xd5, 0x24, 0xc6, 0x7c, - 0xb7, 0x24, 0xb1, 0x06, 0x38, 0x1d, 0x88, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x3e, 0x28, 0x17, 0x3d, 0x04, 0x2d, 0x40, 0x00, 0x30, 0x07, 0x2d, 0x00, - 0x24, 0x04, 0x4c, 0x04, 0x16, 0x4e, 0x04, 0x40, 0x48, 0x25, 0x35, 0x05, 0x28, 0x25, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x04, 0x0e, 0x0e, 0x0e, 0x0f, - 0x0e, 0x28, 0x1b, 0x0e, 0x0c, 0x82, 0x20, 0x05, 0x0d, 0x0d, 0x8a, 0x2b, 0xd4, 0x2b, 0x1b, 0x14, 0x88, 0x28, 0x17, 0xfc, 0x30, 0xeb, 0x28, 0x17, - 0xc8, 0x30, 0xed, 0xae, 0x28, 0x1f, 0xc7, 0x28, 0x13, 0xfc, 0x28, 0x29, 0x05, 0x78, 0x15, 0x38, 0x17, 0xf8, 0x8a, 0x28, 0x05, 0x2d, 0x00, 0x54, - 0x28, 0x0b, 0xf8, 0x4f, 0xb1, 0x65, 0xa0, 0x4f, 0xbb, 0x67, 0x10, 0x15, 0x60, 0x7f, 0x57, 0x53, 0x79, 0x72, 0x26, 0x01, 0x4f, 0xb7, 0x5f, 0xc9, - 0x62, 0x3c, 0x68, 0x06, 0x18, 0x15, 0x00, 0x00, 0x00, 0xe0, 0xc1, 0x74, 0xb9, 0xb8, 0xd2, 0x00, 0xb0, 0xb8, 0x2c, 0xb1, 0x7c, 0xb7, 0xf8, 0xad, - 0xc4, 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x51, 0x28, 0x05, 0x2d, 0x00, 0x55, 0x22, 0x28, 0x0b, 0x51, 0x28, 0x1f, 0x34, 0x28, 0x0d, - 0x3b, 0x28, 0x15, 0x60, 0x33, 0x05, 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0e, 0x0f, 0x0f, 0x0f, 0x10, 0x48, 0x0f, 0x28, 0x1b, 0x0f, 0x0b, 0x20, - 0x05, 0x0e, 0x0e, 0x1b, 0x00, 0x2d, 0x64, 0x07, 0x00, 0x00, 0x15, 0x60, 0xc6, 0x0b, 0x30, 0xec, 0x30, 0xde, 0x28, 0x19, 0xaf, 0x05, 0xa8, 0x0b, - 0xbf, 0xff, 0x44, 0x54, 0x48, 0x07, 0x65, 0x00, 0x6d, 0x2f, 0x9f, 0x72, 0x00, 0x40, 0x6b, 0x10, 0x16, 0x00, 0x7f, 0xf0, 0x6c, 0xd2, 0x52, 0x6c, - 0x9a, 0x30, 0x4b, 0x51, 0x06, 0x38, 0x13, 0x42, 0xff, 0xd1, 0x08, 0xb8, 0xc8, 0x06, 0xb9, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x18, 0x13, 0x0f, 0x33, - 0x7f, 0x22, 0x88, 0x48, 0x07, 0x35, 0x04, 0x3c, 0x28, 0x0b, 0x40, 0x04, 0x3a, 0xc5, 0x05, 0x68, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x0f, 0x11, 0x11, - 0x20, 0x01, 0x0f, 0x20, 0x06, 0x40, 0x0d, 0x20, 0x05, 0x0f, 0x0f, 0x1a, 0x2a, 0xcb, 0x06, 0x00, 0x00, 0x00, 0x16, 0x60, 0xc8, 0x30, 0xed, 0x30, - 0x18, 0xe0, 0x30, 0xb9, 0x06, 0x68, 0x15, 0x38, 0x17, 0x72, 0x00, 0x6f, 0xb0, 0x28, 0x15, 0x73, 0x06, 0x55, 0x96, 0x10, 0x0f, 0x00, 0x7f, 0x79, - 0x72, 0x57, 0x7f, 0x08, 0xc6, 0x59, 0xaf, 0x65, 0x06, 0x78, 0x17, 0xb8, 0xd2, 0x6c, 0x1a, 0xb8, 0xa4, 0xc2, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, - 0x22, 0x28, 0x0d, 0x3e, 0xb1, 0x28, 0x15, 0x41, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x10, 0x12, 0x12, 0x20, 0x01, 0x50, 0x10, 0x20, 0x06, - 0x0e, 0x20, 0x05, 0x10, 0x10, 0x8d, 0x31, 0x00, 0x78, 0x0d, 0x00, 0x00, 0x17, 0x60, 0xf4, 0x30, 0x40, 0xa7, 0x28, 0x15, 0xc8, 0x30, 0xfb, 0x30, - 0xa2, 0x30, 0x05, 0xb0, 0x30, 0xc7, 0x30, 0xeb, 0x05, 0xe8, 0x21, 0x56, 0x2f, 0xaf, 0x00, 0x73, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x16, - 0x67, 0x00, 0x64, 0x2f, 0xbd, 0x72, 0x05, 0xcf, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x7f, 0x00, 0x89, 0x3f, 0x96, 0x3c, 0x68, 0xb7, 0x5f, 0x14, 0x40, - 0x5c, 0x06, 0x58, 0x19, 0xa0, 0xbc, 0xa4, 0xc2, 0xb8, 0xd2, 0x00, 0x44, 0xc5, 0xf8, 0xad, 0x70, 0xb3, 0x74, 0xb9, 0xc4, 0x06, 0x18, 0x1f, 0x0e, - 0xf3, 0x7f, 0x12, 0x04, 0x35, 0x28, 0x13, 0x42, 0x04, 0x01, 0x2d, 0x00, 0x10, 0x04, 0x33, 0x04, 0x34, 0x20, 0x0d, 0x62, 0x40, 0x05, 0xc8, 0x21, - 0x10, 0x16, 0xf4, 0xff, 0x11, 0x13, 0x13, 0x20, 0x01, 0x11, 0xa0, 0x20, 0x06, 0x03, 0x20, 0x05, 0x11, 0x11, 0x5d, 0x29, 0xb1, 0x08, 0x05, 0x00, - 0x00, 0x18, 0x88, 0x17, 0xd5, 0x30, 0xa9, 0xd6, 0x06, 0x08, 0x13, 0xb8, 0x17, 0x66, 0x2f, 0xb5, 0x6c, 0x28, 0x17, 0x10, 0x15, 0xf0, 0x7f, 0x7f, - 0x19, 0x89, 0x8f, 0x79, 0x06, 0x78, 0x13, 0x98, 0x17, 0xf4, 0xd3, 0x06, 0x18, 0x11, 0xc1, 0x0f, 0x53, 0x7f, 0x78, 0x17, 0x44, 0x04, 0x3e, 0x04, - 0x3b, 0x20, 0x01, 0x8a, 0x10, 0x1d, 0xf4, 0xff, 0x12, 0x14, 0x14, 0x20, 0x01, 0x12, 0x20, 0x06, 0x04, 0x80, 0x20, 0x05, 0x12, 0x12, 0x2a, 0x2a, - 0x69, 0x07, 0x00, 0x08, 0x00, 0x19, 0x60, 0xa8, 0x06, 0xc8, 0x15, 0x00, 0x00, 0xd8, 0xc9, 0x06, 0xc8, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x1c, 0x4e, - 0x06, 0xd8, 0x17, 0x78, 0xc6, 0x06, 0xd8, 0x17, 0xb0, 0x0e, 0xf3, 0x7f, 0x2d, 0x06, 0xc8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x13, 0x0c, 0x0c, 0x0c, - 0x14, 0x0d, 0x0c, 0x13, 0x20, 0x06, 0x13, 0x20, 0x05, 0x13, 0x13, 0x10, 0x29, 0x2a, 0xe5, 0x28, 0x17, 0x1a, 0x60, 0xb9, 0x30, 0x05, 0xf4, 0x30, - 0xa1, 0x30, 0xfc, 0x28, 0x15, 0xd0, 0x28, 0x19, 0x08, 0xf8, 0x8a, 0xf6, 0x5c, 0x05, 0xdf, 0xb2, 0x53, 0x00, 0x76, 0x2b, 0x00, 0x61, 0x2f, 0xa9, - 0x62, 0x20, 0x05, 0x72, 0x06, 0x2f, 0xaf, 0x0e, 0xf0, 0x7f, 0x63, 0x49, 0x2f, 0xad, 0x3f, 0xa9, 0x65, 0x00, 0x20, 0x06, 0x41, 0x8b, 0x06, 0xf1, - 0xff, 0x00, 0xaf, 0x65, 0xe6, 0x74, 0x14, 0x5c, 0xf4, 0x5d, 0x18, 0xa4, 0x7f, 0x9b, 0x05, 0xe2, 0xf9, 0x5f, 0xff, 0xa4, 0xc2, 0x1c, 0x00, 0xbc, - 0x14, 0xbc, 0x74, 0xb9, 0x20, 0x00, 0x1c, 0x10, 0xc8, 0xc4, 0xb3, 0x06, 0x1b, 0x97, 0x53, 0x00, 0x70, 0x00, 0x55, 0x69, 0x2f, 0xaf, 0x73, 0x23, - 0x81, 0x65, 0x23, 0x81, 0x67, 0x2f, 0xbf, 0x40, 0x6e, 0x0d, 0xa3, 0xff, 0x28, 0x04, 0x3f, 0x04, 0x38, 0x04, 0x00, 0x46, 0x04, 0x31, 0x04, 0x35, - 0x04, 0x40, 0x04, 0x5c, 0x33, 0x20, 0x05, 0x3d, 0x05, 0xc8, 0x1d, 0x10, 0x06, 0xf4, 0xff, 0x0e, 0xf6, 0x7f, 0x14, 0x10, 0x05, 0x10, 0x10, 0x07, - 0x10, 0x14, 0x20, 0x06, 0x12, 0x20, 0x05, 0x02, 0x14, 0x14, 0x9e, 0x37, 0x0e, 0x0b, 0x00, 0x3f, 0xff, 0x01, 0x02, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, - 0x01, 0x20, 0x06, 0x09, 0x89, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, - 0x02, 0x03, 0xa2, 0x20, 0x06, 0x14, 0x20, 0x05, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x51, 0x04, 0x20, 0x06, 0x02, 0x20, 0x05, 0x04, 0x04, 0x05, - 0x30, 0x04, 0x28, 0x04, 0x05, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x05, 0x05, 0x06, 0x94, 0x30, 0x04, 0x05, 0x06, 0x20, 0x06, 0x10, 0x20, 0x05, 0x06, - 0x06, 0x4a, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x11, 0x20, 0x05, 0x07, 0x2a, 0x07, 0x08, 0x40, 0x03, 0x08, 0x20, 0x06, 0x05, 0x20, 0x05, - 0x08, 0x02, 0x08, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x09, 0x52, 0x07, 0x40, 0x05, 0x0a, 0x30, 0x13, 0x08, 0x0a, 0x20, 0x06, 0x06, 0x8a, - 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x40, 0x03, 0x0b, 0x20, 0x06, 0x08, 0xc1, 0x20, 0x05, 0x20, 0xab, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x28, 0xf3, 0x30, - 0x0d, 0x0a, 0x20, 0x05, 0x28, 0xfb, 0x0e, 0x0e, 0x0e, 0x0f, 0x4c, 0x0e, 0x20, 0x13, 0x0e, 0x0c, 0x20, 0x05, 0x20, 0x1b, 0x0f, 0x0f, 0x13, 0x0f, - 0x10, 0x0f, 0x20, 0x13, 0x0f, 0x0b, 0x20, 0x05, 0x20, 0x1b, 0x2b, 0x11, 0x11, 0x20, 0x01, 0x0f, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x20, 0x1b, 0x32, - 0x12, 0x12, 0x20, 0x01, 0x21, 0x15, 0x12, 0x0e, 0x20, 0x05, 0x10, 0x25, 0x10, 0x11, 0x39, 0x34, 0x13, 0x11, 0x20, 0x06, 0x03, 0x20, 0x05, 0x12, - 0x11, 0x11, 0x12, 0x31, 0x2c, 0x14, 0x12, 0x20, 0x06, 0x04, 0x9c, 0x20, 0x05, 0x12, 0x12, 0xf9, 0x5f, 0xf1, 0x57, 0x3f, 0xf2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb4, 0x8a, 0x00, 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x61, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x26, 0x25, 0xf0, 0x0e, 0x00, 0x00, 0x00, 0x02, 0x61, 0xde, 0x30, 0xbe, 0x30, 0xd5, 0x04, - 0x30, 0xb7, 0x30, 0xa7, 0x30, 0x06, 0x58, 0x1f, 0x4d, 0x00, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x6a, 0x69, 0x20, 0x09, 0x06, - 0x50, 0x7f, 0x7a, 0x60, 0x7f, 0x65, 0x06, 0xa0, 0xff, 0x77, 0xb0, 0x40, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x31, 0xff, 0x6c, 0x9a, 0x50, 0x4f, - 0x02, 0x2b, 0x59, 0x0d, 0x82, 0x01, 0x77, 0x06, 0x5b, 0x1f, 0xc8, 0x01, 0xb9, 0x70, 0xc8, 0x04, 0xd5, 0x70, 0xc1, 0x06, 0x7b, 0x9d, 0xa8, 0xb2, - 0xff, 0xeb, 0x06, 0x83, 0xff, 0xf3, 0x06, 0x83, 0xff, 0x1c, 0x04, 0x30, 0x00, 0x04, 0x37, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x35, 0x08, 0x04, 0x46, - 0x04, 0x3a, 0x20, 0x09, 0x35, 0x04, 0x20, 0x30, 0x00, 0x32, 0x40, 0x07, 0x30, 0x05, 0x34, 0x04, 0x41, 0x04, 0x70, 0x42, 0x40, 0x09, 0x0c, 0x94, - 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x01, 0x08, 0x08, 0x0a, 0x00, 0x07, 0x07, 0x01, 0x01, 0x08, 0x07, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x58, - 0x17, 0x03, 0x61, 0xc9, 0x00, 0x30, 0xeb, 0x30, 0xcc, 0x30, 0xa3, 0x30, 0xfb, 0x80, 0x28, 0x1b, 0xed, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0xaf, 0xa0, - 0x05, 0xc8, 0x21, 0x4c, 0x47, 0x13, 0x65, 0x00, 0x72, 0x00, 0x20, 0x2a, 0x00, 0x53, 0x28, 0x1b, 0x6c, 0x27, 0x9d, 0x73, 0x05, 0xa8, 0x23, 0x42, - 0xab, 0x48, 0x97, 0x73, 0x28, 0x13, 0x2d, 0x60, 0x7f, 0xe9, 0x40, 0x7f, 0x05, 0x78, 0x23, 0x50, 0x4e, 0x48, 0x8f, 0x64, 0x41, 0x01, 0x73, 0x00, - 0x63, 0x00, 0x77, 0x68, 0x81, 0x01, 0x05, 0x58, 0x25, 0x70, 0xff, 0x61, 0x41, 0x7f, 0x05, 0xf1, 0x7d, 0x51, 0x7f, 0x60, 0x6a, 0x60, 0x7d, 0x06, - 0x11, 0xfd, 0x00, 0x00, 0x0b, 0x4e, 0x7f, 0x01, 0x89, 0xcc, 0x91, 0x7f, 0x89, 0x9a, 0x4e, 0x06, 0x58, 0x19, 0x00, 0x58, 0xd5, 0x90, 0xc2, 0x08, - 0xb8, 0xc0, 0xc9, 0x2d, 0xd4, 0xc5, 0x06, 0x5f, 0xb7, 0x4e, 0x82, 0x7d, 0x72, 0xff, 0x65, 0x2b, 0x27, 0xc7, 0x05, 0x98, 0x23, 0x33, 0x7f, 0x69, - 0x00, 0x78, 0xa2, 0x01, 0x53, 0x7f, 0x05, 0x7c, 0x23, 0x01, 0x1d, 0x04, 0x38, 0x04, 0x36, 0x04, 0x3d, 0x28, 0x15, 0x57, 0x41, 0x20, 0x09, 0x3b, - 0x28, 0x1d, 0x37, 0x28, 0x09, 0x05, 0x98, 0x1f, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x05, 0x01, 0x0b, 0x01, 0x01, 0x02, 0x00, - 0x02, 0x09, 0x01, 0x0a, 0x05, 0x02, 0x02, 0x02, 0x00, 0x02, 0x59, 0x24, 0x1c, 0x0c, 0x00, 0x00, 0x04, 0x02, 0x61, 0xaf, 0x30, 0xe4, 0x30, 0xf4, - 0x48, 0x17, 0xdd, 0x00, 0x30, 0xe2, 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xa7, 0x83, 0x05, 0xc8, 0x17, 0x4b, 0x00, 0x75, 0x00, 0x79, 0x2f, 0xb3, 0x5e, - 0xaf, 0x57, 0x6e, 0x27, 0x9d, 0x50, 0x2f, 0xbd, 0x6d, 0x48, 0x29, 0x30, 0x0f, 0x50, 0x15, 0x15, 0x20, 0x00, 0x56, 0x2f, 0xd3, 0x69, 0x2f, 0xd5, - 0x6f, 0x47, 0x43, 0x45, 0x73, 0x27, 0x3f, 0x69, 0x00, 0x70, 0x03, 0x2f, 0xdf, 0x43, 0x20, 0x7f, 0xf7, 0x36, 0x97, 0x3f, 0x2f, 0x38, 0x1b, 0x50, - 0x7d, 0xe9, 0x80, 0x7d, 0x04, 0xf8, 0x1f, 0x30, 0xff, 0xbf, 0x37, 0x17, 0x77, 0x68, 0x09, 0x70, 0xff, 0x51, 0x01, 0x05, 0x18, 0x19, 0x30, 0xff, - 0x3f, 0xa9, 0xf5, 0x5f, 0xaf, 0x00, 0x31, 0x7d, 0x05, 0x10, 0x7f, 0x91, 0xff, 0x20, 0x22, 0x0b, 0x20, 0x05, 0xc0, 0x83, 0x00, 0x93, 0x5e, 0x9a, - 0x4e, 0xe6, 0x74, 0xe8, 0x6e, 0x20, 0x77, 0x6d, 0x06, 0x58, 0x17, 0xe0, 0xcf, 0x7c, 0xc5, 0x44, 0x00, 0xbe, 0x44, 0xc5, 0xec, 0xd3, 0x54, 0xba, - 0x7c, 0x0e, 0xb7, 0xc8, 0xb2, 0x44, 0x05, 0xe8, 0x1f, 0x72, 0x7f, 0x3f, 0xaf, 0xeb, 0xea, 0xe2, 0x7d, 0x05, 0x3a, 0x99, 0x53, 0x7f, 0xe1, 0x00, - 0x22, 0x7f, 0xe2, 0x05, 0x42, 0x7f, 0x1a, 0x0c, 0x04, 0x43, 0x04, 0x4f, 0x27, 0xf9, 0x58, 0x0b, 0x2d, 0x00, 0x57, 0x1f, 0x28, 0x11, 0x3c, 0x28, - 0x15, 0x40, 0x05, 0x68, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x03, 0x02, 0x03, 0x06, 0x02, 0x02, 0x03, 0x03, 0x10, 0x04, 0x02, - 0x04, 0x20, 0x05, 0x03, 0x03, 0xc5, 0x25, 0x41, 0xd2, 0x28, 0x17, 0x05, 0x61, 0xa6, 0x30, 0xc3, 0x28, 0x0b, 0xd8, 0x06, 0x5c, 0xab, 0x7b, 0x2f, - 0x64, 0x2c, 0xa1, 0x06, 0x70, 0x81, 0x41, 0x01, 0xf3, 0xa3, 0x30, 0x7f, 0x01, 0x06, 0xd0, 0xff, 0x73, 0x00, 0x63, 0x28, 0xe9, 0x0e, 0x90, 0xff, - 0x86, 0x06, 0x91, 0xff, 0x57, 0x7f, 0x79, 0x51, 0x06, 0x58, 0x11, 0x5f, 0xff, 0xb0, 0x1a, 0xc6, 0x58, 0xce, 0x06, 0x93, 0x7d, 0x0f, 0x11, 0xff, - 0x1b, 0x47, 0xed, 0x37, 0x0e, 0x04, 0x38, 0x04, 0x3d, 0x05, 0x68, 0x09, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x07, 0x04, 0x05, 0x08, - 0x05, 0x04, 0x20, 0x05, 0x20, 0x01, 0x20, 0x06, 0x00, 0x04, 0xd1, 0x24, 0xd8, 0x0d, 0x00, 0x00, 0x06, 0x00, 0x61, 0xeb, 0x30, 0xd6, 0x30, 0xea, - 0x30, 0xf3, 0xa3, 0x06, 0x88, 0x19, 0x4c, 0x2f, 0xaf, 0x62, 0x00, 0x6c, 0x2f, 0xfd, 0x05, 0x1f, 0x1b, 0xa0, 0x10, 0x00, 0xf0, 0x7f, 0x6f, 0x0e, - 0x21, 0xff, 0x62, 0x53, 0x03, 0x5e, 0x97, 0x40, 0x67, 0x06, 0x98, 0x19, 0xe8, 0xb8, 0x14, 0xbe, 0xb0, 0xb9, 0xc0, 0x06, 0xbb, 0x97, 0x0e, 0xd3, - 0x7f, 0x1b, 0x04, 0x4e, 0x04, 0x31, 0x04, 0x70, 0x3b, 0x06, 0xa8, 0x17, 0x10, 0x07, 0x94, 0xff, 0x0e, 0x36, 0xff, 0x05, 0x06, 0x06, 0x09, 0x06, - 0x06, 0x05, 0x05, 0x05, 0x06, 0x20, 0x08, 0x20, 0x06, 0x05, 0x01, 0x6f, 0x24, 0x0d, 0x10, 0x00, 0x00, 0x07, 0x48, 0x17, 0x17, 0xb7, 0x30, 0xe5, - 0x06, 0xe8, 0x17, 0x75, 0x2f, 0x31, 0x06, 0x5e, 0x33, 0x07, 0x10, 0x7f, 0x7c, 0x65, 0x60, 0xff, 0x06, 0x7f, 0xaf, 0x06, 0xf0, 0x7f, 0x71, 0xff, - 0x06, 0x5f, 0xb3, 0x81, 0x9c, 0x02, 0x03, 0x5e, 0xaf, 0x65, 0x61, 0x53, 0x06, 0x78, 0x19, 0xe8, 0x07, 0xb8, 0x80, 0xbd, 0x6c, 0xc2, 0x06, 0xf8, - 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x1c, 0x43, 0x04, 0x48, 0x06, 0x48, 0x15, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x06, 0x07, 0x01, 0x07, - 0x07, 0x04, 0x06, 0x06, 0x06, 0x07, 0x20, 0x08, 0x80, 0x20, 0x06, 0x06, 0x80, 0x25, 0xd5, 0x0a, 0x00, 0x00, 0x00, 0x08, 0x61, 0xde, 0x30, 0xa6, - 0x30, 0xa9, 0x30, 0x01, 0xdd, 0x30, 0xeb, 0x30, 0xb9, 0x30, 0xab, 0x06, 0x28, 0x1d, 0xa0, 0x37, 0x17, 0x73, 0x28, 0x15, 0x65, 0x00, 0x72, 0x00, - 0x20, 0x22, 0x00, 0x50, 0x2e, 0xb3, 0x6c, 0x00, 0x61, 0x2f, 0xbb, 0x64, 0xaa, 0x05, 0x6f, 0xbd, 0x50, 0x27, 0x97, 0x74, 0x2f, 0xad, 0x74, 0x27, - 0x9f, 0x2d, 0x8a, 0x60, 0x7f, 0x6f, 0x00, 0x67, 0x2f, 0xbd, 0x65, 0x05, 0x4f, 0xbf, 0x4b, 0xaa, 0x2f, 0xab, 0x65, 0x4f, 0xad, 0x70, 0x40, 0xfb, - 0x65, 0x05, 0xef, 0x37, 0x50, 0xba, 0x2f, 0xa9, 0x63, 0x20, 0x01, 0x51, 0x77, 0x71, 0x81, 0x6f, 0x2f, 0xbd, 0x69, 0xd1, 0x21, 0x87, 0x05, 0x51, - 0x7f, 0x71, 0x2e, 0xb3, 0x65, 0x00, 0xf1, 0x06, 0x40, 0x7f, 0x02, 0x0f, 0x5c, 0xe2, 0x6c, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x8c, - 0xc1, 0xf4, 0xd3, 0x80, 0xb7, 0xdc, 0x7d, 0xb4, 0x06, 0x7b, 0x97, 0x92, 0x7f, 0x72, 0xfd, 0x05, 0xd2, 0x81, 0x91, 0xff, 0x6e, 0xa2, 0x7f, 0x41, - 0xf3, 0x05, 0x82, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x3b, 0x28, 0x0f, 0x47, 0x3f, 0x28, 0x13, 0x3b, 0x04, 0x4c, 0x06, 0x08, 0x1d, 0x06, 0xf4, 0xff, - 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x07, 0x03, 0x0a, 0x05, 0x09, 0x09, 0x07, 0x07, 0x08, 0x03, 0x09, 0x09, 0x03, 0x28, 0x22, 0x07, 0x98, 0x23, 0x01, - 0x2e, 0x0e, 0x00, 0x00, 0x09, 0x61, 0xaa, 0x28, 0x13, 0x1b, 0xfc, 0x30, 0xec, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x4f, 0x87, 0x0f, 0x0e, 0x90, 0x7f, - 0x58, 0x70, 0x2f, 0xb3, 0x6c, 0x05, 0xe8, 0x0f, 0x0f, 0x71, 0x7f, 0x65, 0x59, 0xe2, 0x10, 0x6c, 0xb1, 0x83, 0x06, 0x98, 0x17, 0x24, 0xc6, 0xf4, - 0xd3, 0x37, 0x08, 0xb8, 0x06, 0x78, 0x95, 0x0f, 0x13, 0x7f, 0x1e, 0x06, 0x88, 0x11, 0x0f, 0x94, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x00, 0x08, 0x09, - 0x09, 0x0c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x08, 0x0b, 0x09, 0x30, 0x07, 0x07, 0x24, 0xbe, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x61, 0xdd, 0x30, - 0xc8, 0x00, 0x30, 0xab, 0x30, 0xeb, 0x30, 0xd1, 0x30, 0xc1, 0x2a, 0x30, 0xa7, 0x06, 0x28, 0x1d, 0x53, 0x2e, 0x2b, 0x62, 0x2e, 0xb1, 0x61, 0xa3, - 0x2b, 0x2f, 0x70, 0x2e, 0xb1, 0x74, 0x00, 0x68, 0x05, 0x6e, 0xa9, 0x5f, 0xff, 0x6b, 0x42, 0x2f, 0x25, 0x5b, 0xaf, 0x73, 0x2d, 0x31, 0x43, 0xa0, - 0x87, 0x3b, 0xc7, 0xc5, 0x05, 0x3d, 0xaf, 0xb0, 0x71, 0x6e, 0x00, 0x76, 0x2f, 0xb9, 0x72, 0x05, 0xac, 0x33, 0x56, 0x50, 0x2c, 0xa7, 0x65, 0xa1, - 0x7f, 0x7a, 0x05, 0xc1, 0x7d, 0x00, 0x11, 0xff, 0x63, 0x80, 0x05, 0xe0, 0x7f, 0x80, 0x55, 0x14, 0x5c, 0xf4, 0x5d, 0x21, 0x10, 0x96, 0x71, 0x5c, - 0x06, 0x58, 0x1b, 0x74, 0xce, 0x74, 0xb9, 0x03, 0x0c, 0xd3, 0xf0, 0xd2, 0x44, 0xc5, 0x06, 0x5b, 0x99, 0x53, 0x7f, 0x6a, 0x6b, 0xe2, 0x85, 0x06, - 0x73, 0xff, 0xe1, 0x06, 0x01, 0xff, 0x1f, 0x47, 0xfd, 0x3a, 0x0b, 0x04, 0x30, 0x04, 0x40, 0x28, 0x21, 0x30, 0x28, 0x05, 0x05, 0xd8, 0x1f, 0xc0, - 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x0d, 0x02, 0x04, 0x0d, 0x0f, 0x00, 0x09, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x09, 0x09, 0x00, 0x09, - 0x09, 0x95, 0x23, 0xa6, 0x0f, 0x00, 0x00, 0x41, 0x0b, 0x28, 0x17, 0xc9, 0x30, 0xe9, 0x30, 0xb7, 0x06, 0x48, 0x13, 0xb7, 0x56, 0x97, 0x6f, 0x26, - 0xff, 0x37, 0x07, 0x63, 0x05, 0xe8, 0x11, 0x00, 0x50, 0x7f, 0x05, 0xff, 0x37, 0xec, 0x00, 0x10, 0x7f, 0x05, 0xb5, 0x95, 0x07, 0xb1, 0x7f, 0x71, - 0x2a, 0x21, 0x06, 0x11, 0xff, 0xe2, 0x6c, 0x02, 0xb7, 0x5f, 0xc9, 0x62, 0xaf, 0x65, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0xec, 0xd3, 0xe4, 0xb4, - 0x7c, 0xb7, 0x70, 0x6b, 0xc1, 0x06, 0x6f, 0xae, 0x00, 0x03, 0x7f, 0xeb, 0x06, 0x63, 0xff, 0xe1, 0x06, 0x61, 0xff, 0x58, 0x17, 0x1c, 0x3b, 0x04, - 0x4f, 0x05, 0xe8, 0x0f, 0x08, 0x74, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x0a, 0x0a, 0x0a, 0x0b, 0x0d, 0x0a, 0x0a, 0x20, 0x05, 0x0a, 0x40, 0x06, 0x0a, - 0x01, 0xc9, 0x25, 0x77, 0x10, 0x00, 0x00, 0x0c, 0x28, 0x17, 0x05, 0xe2, 0x30, 0xfc, 0x30, 0xb8, 0x06, 0xc8, 0x17, 0x6d, 0x2f, 0xad, 0x63, 0x72, - 0x4f, 0x21, 0x06, 0x58, 0x17, 0x6d, 0x00, 0xe9, 0x80, 0x7f, 0x06, 0x38, 0x17, 0x78, 0x6d, 0x61, 0x01, 0x05, 0xd8, 0x11, 0x07, 0xb1, 0x7f, 0x06, - 0x91, 0xff, 0xe8, 0x6e, 0x77, 0x60, 0x6d, 0x06, 0x78, 0x13, 0x58, 0x17, 0x54, 0xba, 0x7c, 0xb7, 0xc8, 0x1e, 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, - 0x53, 0x81, 0x05, 0xfa, 0x93, 0xd3, 0xff, 0xe2, 0xd7, 0x06, 0x43, 0xff, 0x38, 0x17, 0x3c, 0x28, 0x1b, 0x40, 0x06, 0xa8, 0x17, 0x0e, 0xb3, 0x7f, - 0x10, 0x06, 0xf0, 0xff, 0x02, 0x0b, 0x0b, 0x0c, 0x0e, 0x0b, 0x0b, 0x20, 0x05, 0x0b, 0x80, 0x40, 0x06, 0x0b, 0xa7, 0x26, 0x40, 0x0d, 0x00, 0x00, - 0x01, 0x0d, 0x61, 0xb7, 0x30, 0xe5, 0x30, 0xec, 0x28, 0x17, 0x15, 0xa8, 0x30, 0xf3, 0x06, 0x48, 0x19, 0x53, 0x2f, 0xa3, 0x6c, 0x2f, 0xa5, 0x6f, - 0x73, 0x06, 0x2e, 0xab, 0x90, 0x7f, 0xe9, 0x40, 0x7f, 0x05, 0xf8, 0x13, 0x50, 0xff, 0x3f, 0xa7, 0xd8, 0x71, 0x01, 0x06, 0x15, 0x99, 0x53, 0x06, - 0xc1, 0x7d, 0x07, 0x11, 0xff, 0x7f, 0x89, 0xcc, 0x04, 0x91, 0x7f, 0x89, 0x9a, 0x4e, 0x06, 0x78, 0x1b, 0x90, 0xc2, 0x06, 0x08, 0xb8, 0xc0, 0xc9, - 0xd4, 0x06, 0x68, 0x15, 0x93, 0x7f, 0x7a, 0xb0, 0x2f, 0xab, 0xeb, 0x06, 0xe3, 0x7f, 0x06, 0x33, 0xff, 0x21, 0x04, 0x38, 0x04, 0x5c, 0x3b, 0x28, - 0x0d, 0x37, 0x06, 0x68, 0x17, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0c, 0x0c, 0x00, 0x0f, 0x0f, 0x0f, 0x0e, 0x0c, 0x0c, 0x0d, 0x0e, 0x11, - 0x10, 0x0c, 0x0c, 0x20, 0x01, 0xbf, 0x23, 0x85, 0x28, 0x17, 0x41, 0x0e, 0x28, 0x17, 0xd5, 0x30, 0xa3, 0x30, 0xa7, 0x28, 0x15, 0x45, 0xc6, 0x20, - 0x07, 0xaf, 0x30, 0xb7, 0x20, 0x01, 0xe5, 0x05, 0xa8, 0x21, 0x41, 0x5a, 0x2d, 0xac, 0x69, 0x00, 0x19, 0x01, 0x74, 0x2f, 0xb7, 0x45, 0x6b, 0x2f, - 0xb5, 0x7a, 0x00, 0x79, 0x28, 0x23, 0x6b, 0x05, 0x8f, 0xb9, 0x54, 0x53, 0x2f, 0x27, 0x69, 0x2f, 0xa9, 0x74, 0x2f, 0xb1, 0x2d, 0x00, 0x55, 0x43, - 0x2f, 0xb5, 0x6f, 0x2f, 0x35, 0x78, 0x05, 0x8f, 0xb9, 0x48, 0x2f, 0xab, 0x88, 0x39, 0x19, 0x69, 0x00, 0x67, 0x40, 0xff, 0x65, 0x00, 0x75, 0xea, - 0x25, 0xa3, 0x05, 0xb9, 0x97, 0x3f, 0xa7, 0x74, 0x2f, 0xad, 0x63, 0x40, 0xfb, 0x63, 0xd8, 0x05, 0xe9, 0x1d, 0x90, 0x7f, 0x20, 0x41, 0x7d, 0x05, - 0xd0, 0xfd, 0x00, 0x00, 0x23, 0x04, 0x57, 0x41, 0x53, 0x57, 0x5b, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xdc, 0xc2, 0x44, 0xbe, 0xe5, 0xc5, 0xa0, - 0xd1, 0x00, 0x6c, 0xd0, 0xdc, 0xc2, 0xa4, 0xc2, 0xa4, 0xd0, 0x6a, 0xd0, 0x05, 0xe8, 0x21, 0x93, 0x7f, 0x79, 0x21, 0x81, 0x4b, 0x63, 0x81, 0x7c, - 0x51, 0x01, 0x0d, 0x71, 0xff, 0x21, 0x27, 0xff, 0x35, 0x04, 0x3d, 0x27, 0xfd, 0x5e, 0x3e, 0x28, 0x17, 0x48, 0x28, 0x25, 0x05, 0xd8, 0x1f, 0x06, - 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x00, 0x0e, 0x0e, 0x03, 0x0e, 0x0d, 0x0d, 0x0d, 0x0f, 0x20, 0x0d, 0x0f, 0x30, 0x06, 0x0d, 0x2c, 0x24, - 0xaa, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x61, 0xf4, 0x30, 0xa1, 0x30, 0x00, 0xeb, 0x30, 0xdf, 0x30, 0xa2, 0x30, 0xfb, 0x30, 0x05, 0xde, 0x30, 0xb9, - 0x30, 0xfc, 0x20, 0x0d, 0xa3, 0x05, 0xa8, 0x17, 0x45, 0x57, 0x2e, 0xa7, 0x72, 0x00, 0x6d, 0x4e, 0xaf, 0x6e, 0x27, 0x99, 0x54, 0x4d, 0x2e, 0xb7, - 0x73, 0x27, 0x1b, 0x72, 0x60, 0x11, 0x20, 0x00, 0x55, 0x56, 0x47, 0xa9, 0x76, 0x28, 0x37, 0x64, 0x4f, 0x55, 0x68, 0x2f, 0xe1, 0x76, 0x70, 0x04, - 0x20, 0x7f, 0x38, 0x17, 0x30, 0x7d, 0x7a, 0x60, 0x7d, 0x05, 0x58, 0x97, 0x45, 0xab, 0x40, 0xfd, 0x6c, 0x47, 0x9d, 0x64, 0xc0, 0xff, 0x65, 0x28, - 0xad, 0x05, 0x1f, 0xc2, 0x7b, 0x56, 0xa1, 0x7f, 0xf1, 0x7d, 0x05, 0x3f, 0xbe, 0xb0, 0x7f, 0x20, 0x46, 0x9b, 0x05, 0xd0, 0x83, 0x00, 0xe6, 0x74, - 0x14, 0x5c, 0x73, 0x7c, 0x9a, 0x4e, 0x02, 0x6c, 0x9a, 0x56, 0x79, 0x14, 0x5c, 0x06, 0x18, 0x1f, 0x14, 0x00, 0xbc, 0x74, 0xb9, 0xf8, 0xbb, 0x44, - 0xc5, 0x20, 0x00, 0x00, 0xc8, 0xb9, 0x18, 0xc2, 0xac, 0xb9, 0x44, 0xea, 0x05, 0xe8, 0x17, 0x00, 0x32, 0x7f, 0x73, 0x01, 0xeb, 0x05, 0x42, 0x7f, - 0xe1, 0x00, 0x02, 0x7f, 0xfa, 0x80, 0x05, 0xa2, 0x7f, 0x12, 0x04, 0x30, 0x04, 0x40, 0x04, 0x3c, 0xa2, 0x28, 0x0f, 0x3d, 0x68, 0x11, 0x2d, 0x00, - 0x1c, 0x20, 0x13, 0x37, 0x3c, 0x04, 0x43, 0x20, 0x17, 0x05, 0x18, 0x23, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x0e, 0x0f, 0x00, 0x10, 0x01, - 0x10, 0x10, 0x0e, 0x0e, 0x01, 0x10, 0x00, 0x01, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x3d, 0x26, 0x51, 0x91, 0x28, 0x17, 0x10, 0x28, 0x17, 0xa3, 0x30, - 0xa7, 0x28, 0x19, 0x11, 0xb3, 0x30, 0xdd, 0x28, 0x1f, 0xb9, 0x30, 0xab, 0x05, 0xa8, 0x13, 0xaa, 0x3f, 0xff, 0x47, 0x4f, 0x23, 0x61, 0x4f, 0xaf, - 0x72, 0x2e, 0x33, 0x50, 0xfd, 0x2f, 0xaf, 0x77, 0x25, 0x05, 0x70, 0x7f, 0x57, 0x93, 0x38, 0x17, 0x50, 0x7d, 0x6f, 0x2f, 0xbb, 0x63, 0x6e, 0x05, - 0x6f, 0x37, 0x30, 0xff, 0x6f, 0x00, 0xdf, 0x28, 0xe9, 0x30, 0xf7, 0xef, 0x05, 0x58, 0x0b, 0x00, 0x70, 0xff, 0x71, 0x7d, 0x6f, 0x2f, 0xc1, 0x05, - 0x78, 0x17, 0x71, 0x7f, 0x06, 0x30, 0x7b, 0x81, 0x3f, 0xff, 0x27, 0x59, 0xe2, 0x6c, 0x70, 0x51, 0x06, 0x18, 0x0f, 0x80, 0x8f, 0xff, 0xb3, 0xf4, - 0xd3, 0x80, 0xb7, 0xdc, 0xb4, 0xde, 0x06, 0x70, 0x7f, 0x52, 0x7f, 0x6f, 0x2f, 0xb1, 0x72, 0xfd, 0x05, 0xd2, 0x83, 0x00, 0x32, 0x7f, 0xf3, 0xad, - 0x05, 0xa2, 0x7f, 0x12, 0x27, 0xf5, 0x3b, 0x28, 0x15, 0x38, 0x11, 0x3f, 0x28, 0x15, 0x1c, 0x3b, 0x04, 0x4c, 0x05, 0x28, 0x0d, 0x07, 0xd4, 0xff, - 0x10, 0x0e, 0xb0, 0x7f, 0x0f, 0x01, 0x00, 0x04, 0x02, 0x03, 0x03, 0x0f, 0x0f, 0x02, 0x03, 0x00, 0x02, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x41, 0x25, - 0x00, 0x01, 0x0c, 0x00, 0x00, 0x11, 0x61, 0x7f, 0x89, 0x01, 0xdd, 0x30, 0xe2, 0x30, 0xfc, 0x30, 0xb8, 0x28, 0x1d, 0xbb, 0x06, 0x35, 0x1b, 0x57, - 0x4b, 0x03, 0x58, 0x15, 0x76, 0x1d, 0x6d, 0x48, 0x23, 0x3f, 0x41, 0xd8, 0x05, 0x1e, 0xb5, 0x50, 0x6f, 0xe9, 0x80, 0x6f, 0x37, 0x1d, 0x6f, 0x00, - 0x63, 0xab, 0x20, 0x01, 0x69, 0x4b, 0x9f, 0x6e, 0x28, 0xb1, 0x61, 0x47, 0xb1, 0x04, 0xd0, 0xff, 0xb8, 0x38, 0x17, 0x6d, 0x60, 0xf9, 0x05, 0xb8, - 0x1b, 0x00, 0x11, 0x6f, 0x20, 0x00, 0x4f, 0xe0, 0x05, 0xa0, 0xff, 0x01, 0x70, 0x7f, 0x04, 0x7f, 0xc7, 0x7f, 0x89, 0xe8, 0x6e, 0x77, 0x40, 0x6d, - 0x06, 0x98, 0x17, 0x1c, 0xc1, 0xec, 0xd3, 0x54, 0xba, 0x03, 0x7c, 0xb7, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x5b, 0x13, 0xec, 0x72, 0x81, - 0x05, 0x9a, 0x9f, 0x93, 0xef, 0xe2, 0xc2, 0x7f, 0x05, 0x51, 0xfd, 0x00, 0x00, 0x15, 0x17, 0x04, 0x30, 0x28, 0x0f, 0x30, 0x27, 0xf7, 0x3d, 0x28, - 0x19, 0x15, 0x2d, 0x00, 0x1f, 0x28, 0x1f, 0x3c, 0x28, 0x23, 0x40, 0x05, 0x68, 0x1d, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x10, 0x10, - 0x0d, 0x10, 0x0c, 0x0c, 0x04, 0x10, 0x10, 0x10, 0x0c, 0x03, 0x20, 0x04, 0x10, 0x10, 0x08, 0xfe, 0x25, 0x59, 0x0a, 0x00, 0x3f, 0xff, 0x01, 0x08, - 0x08, 0x00, 0x0a, 0x07, 0x07, 0x01, 0x01, 0x08, 0x07, 0x08, 0x00, 0x08, 0x01, 0x01, 0x01, 0x01, 0x02, 0x05, 0x01, 0x40, 0x0b, 0x20, 0x05, 0x02, - 0x09, 0x01, 0x0a, 0x05, 0x02, 0x24, 0x02, 0x02, 0x28, 0x56, 0x03, 0x06, 0x20, 0x05, 0x03, 0x04, 0x60, 0x02, 0x38, 0x67, 0x20, 0x07, 0x04, 0x05, - 0x08, 0x05, 0x04, 0xe0, 0x20, 0x05, 0x20, 0x01, 0x20, 0x06, 0x04, 0x05, 0x06, 0x06, 0x09, 0x06, 0x06, 0x05, 0x05, 0x05, 0x06, 0x20, 0x08, 0x20, - 0x06, 0x05, 0x00, 0x06, 0x07, 0x07, 0x07, 0x04, 0x06, 0x06, 0x06, 0x60, 0x07, 0x20, 0x08, 0x20, 0x06, 0x06, 0x07, 0x03, 0x0a, 0x05, 0x00, 0x09, - 0x09, 0x07, 0x07, 0x03, 0x09, 0x09, 0x03, 0x80, 0x20, 0x1a, 0x07, 0x08, 0x09, 0x09, 0x0c, 0x08, 0x08, 0x88, 0x20, 0x74, 0x08, 0x0b, 0x09, 0x30, - 0x07, 0x09, 0x0d, 0x02, 0x00, 0x04, 0x0d, 0x0f, 0x09, 0x09, 0x0e, 0x0f, 0x0c, 0x00, 0x0d, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x14, 0x0d, - 0x0a, 0x0a, 0x20, 0x05, 0x0a, 0x40, 0x06, 0x0a, 0x0b, 0x05, 0x0b, 0x0c, 0x0e, 0x0b, 0x0b, 0x20, 0x05, 0x0b, 0x40, 0x06, 0x10, 0x0b, 0x0c, 0x0c, - 0x28, 0xe5, 0x0e, 0x0c, 0x0c, 0x0d, 0x60, 0x0e, 0x20, 0xde, 0x20, 0x01, 0x0d, 0x0e, 0x0e, 0x03, 0x0e, 0x02, 0x0d, 0x0d, 0x0d, 0x0f, 0x0d, 0x0f, - 0x30, 0x06, 0x0d, 0x00, 0x0e, 0x0f, 0x10, 0x01, 0x10, 0x10, 0x0e, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0xe0, 0xf9, 0x1f, - 0xf1, 0x17, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, 0x30, 0x01, 0x62, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x89, 0x1b, 0x80, 0xf9, 0x00, 0x00, 0x00, 0x02, 0x62, 0xea, 0x30, 0xb9, 0x30, 0xdc, 0x04, - 0x30, 0xf3, 0x30, 0x0c, 0x77, 0x06, 0x58, 0x1f, 0x4c, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x44, 0x6e, 0x07, 0x00, 0x7f, - 0x6e, 0x00, 0x65, 0x06, 0x60, 0xff, 0x73, 0x00, 0x6a, 0x61, 0x06, 0x61, 0x03, 0xb1, 0x7f, 0x61, 0x06, 0x2a, 0x22, 0x44, 0x41, 0xff, 0x74, 0x28, - 0x00, 0x72, 0x22, 0x07, 0x74, 0x22, 0x05, 0x20, 0x00, 0x64, 0xb0, 0x21, 0x85, 0x20, 0xa2, 0x17, 0x04, 0xd0, 0x95, 0xcc, 0x91, 0xaf, 0x65, 0x08, - 0x2c, 0x67, 0x3a, 0x53, 0x06, 0x7b, 0x1d, 0xac, 0xb9, 0xa4, 0x00, 0xc2, 0xf4, 0xbc, 0x44, 0xc5, 0x20, 0x00, 0xfc, 0x70, 0xc8, 0x06, 0x93, 0x7f, - 0x07, 0x32, 0x7f, 0x06, 0x32, 0x7d, 0x00, 0x00, 0x1b, 0x04, 0x10, 0x38, 0x04, 0x41, 0x20, 0x01, 0x30, 0x04, 0x31, 0x04, 0x0c, 0x3e, 0x04, 0x3d, - 0x04, 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x0c, 0x54, 0x0c, 0x20, 0x01, 0x01, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, - 0x17, 0x07, 0x62, 0xde, 0x30, 0xc7, 0x30, 0xa3, 0x00, 0x30, 0xe9, 0x30, 0xea, 0x81, 0xbb, 0x6c, 0xde, 0x5b, 0x5d, 0x06, 0x1f, 0xbb, 0x4d, 0x27, - 0x11, 0x36, 0x09, 0x69, 0x26, 0x19, 0x06, 0x36, 0x97, 0xbb, 0x50, 0x7f, 0xe8, 0x26, 0x97, 0x06, 0x18, 0x13, 0x07, 0x90, 0xff, 0x65, 0x06, 0x61, - 0x7d, 0x07, 0x11, 0xff, 0x03, 0x6c, 0x9a, 0xb7, 0x5f, 0xc9, 0x62, 0x32, 0xfd, 0x06, 0x58, 0x1b, 0x00, 0xc8, 0xb9, 0x70, 0xb3, 0x74, 0xc7, 0x7c, - 0xb7, 0xe8, 0x06, 0x78, 0x17, 0x07, 0x72, 0x7f, 0x06, 0x73, 0xff, 0x1c, 0x28, 0x11, 0x34, 0x04, 0x35, 0x0e, 0x04, 0x39, 0x04, 0x40, 0x28, 0x1b, - 0x10, 0x06, 0x11, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x02, 0x0d, 0x0d, 0x0d, 0x0d, 0x14, 0x02, 0x20, 0x06, 0x0e, 0x00, 0x0d, 0x02, 0x02, 0x02, - 0x02, 0x36, 0x17, 0xfa, 0x00, 0xf3, 0x00, 0x00, 0x08, 0x62, 0xa2, 0x30, 0xbd, 0x08, 0x30, 0xec, 0x30, 0xb9, 0x06, 0x88, 0x17, 0x41, 0x00, 0x7a, - 0xd1, 0x2f, 0xab, 0x37, 0x95, 0x73, 0x06, 0x4d, 0xb2, 0x41, 0x00, 0xe7, 0x06, 0xe0, 0x7f, 0xfc, 0x70, 0xff, 0x06, 0x5c, 0x2f, 0x31, 0x7f, 0x51, - 0x81, 0x06, 0x59, 0x19, 0x06, 0xf1, 0xff, 0x9a, 0x4e, 0x08, 0x1f, 0x90, 0x14, 0x5c, 0x06, 0x98, 0x17, 0x44, 0xc5, 0x8c, 0x07, 0xc1, 0x74, 0xb9, - 0xa4, 0xc2, 0x06, 0x78, 0x17, 0x07, 0x12, 0x7f, 0x06, 0xd3, 0x7f, 0x04, 0x10, 0x04, 0x37, 0x04, 0x3e, 0x28, 0x13, 0x41, 0x04, 0x11, 0x3a, 0x04, - 0x38, 0x28, 0x1f, 0x20, 0x00, 0x3e, 0x20, 0x0b, 0x47, 0x42, 0x28, 0x25, 0x3e, 0x04, 0x32, 0x05, 0x28, 0x29, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, - 0x7f, 0x01, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x03, 0x40, 0x06, 0x00, 0x03, 0x03, 0x03, 0x03, 0xd6, 0x1a, 0xc0, 0xed, 0x10, 0x00, 0x00, 0x09, - 0x28, 0x17, 0xf4, 0x30, 0xa7, 0x30, 0x02, 0xa4, 0x30, 0xed, 0x30, 0x0c, 0x77, 0x06, 0x57, 0x97, 0x76, 0xb4, 0x6f, 0x2d, 0x6f, 0x06, 0x68, 0x17, - 0x10, 0x06, 0xd0, 0x7f, 0x44, 0x2e, 0xa9, 0x73, 0x00, 0x51, 0x74, 0x2e, 0xad, 0x69, 0x20, 0x05, 0x6f, 0x00, 0x20, 0x4e, 0xbd, 0x40, 0x20, 0x05, - 0x82, 0x17, 0x3f, 0x96, 0x01, 0x5a, 0x57, 0x7f, 0xc0, 0x06, 0x58, 0x13, 0x58, 0x17, 0xa0, 0xbc, 0x74, 0xc7, 0xe8, 0xb8, 0xd1, 0x06, 0x98, 0x17, - 0x0e, 0xd3, 0x7f, 0x10, 0x27, 0xfd, 0x35, 0x04, 0x39, 0x28, 0x19, 0x70, 0x43, 0x05, 0x08, 0x03, 0x10, 0x10, 0x34, 0xff, 0x06, 0xf6, 0xff, 0x04, - 0x01, 0x02, 0x01, 0x10, 0x01, 0x02, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x00, 0xe6, 0x1c, 0xd9, 0xf9, 0x00, 0x00, 0x0a, 0x62, 0x01, 0xd9, - 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xe3, 0x06, 0x68, 0x15, 0x11, 0x00, 0x00, 0x42, 0x2f, 0xa9, 0x6a, 0x00, 0x61, 0x06, 0x75, 0x96, 0xe1, 0x10, 0x07, - 0x00, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0x1d, 0x8d, 0xc5, 0x96, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0xa0, 0xbc, 0x90, 0xc7, 0x06, 0x78, - 0x13, 0x0f, 0x33, 0x7f, 0x47, 0x11, 0x28, 0x15, 0x36, 0x04, 0x30, 0x06, 0x48, 0x13, 0x10, 0x0f, 0x34, 0xff, 0x06, 0xf6, 0xff, 0x14, 0x05, 0x03, - 0x03, 0x20, 0x01, 0x05, 0x40, 0x06, 0x05, 0x05, 0x00, 0x05, 0x05, 0x08, 0x1b, 0x69, 0xfa, 0x00, 0x00, 0x01, 0x0b, 0x62, 0xd6, 0x30, 0xe9, 0x30, - 0xac, 0x06, 0x88, 0x15, 0xaf, 0x38, 0x17, 0x72, 0x28, 0x15, 0x67, 0x06, 0x88, 0x19, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0x98, 0x17, 0x05, 0x52, 0x17, - 0x02, 0x03, 0x5e, 0xc9, 0x62, 0xa0, 0x52, 0x06, 0x98, 0x19, 0x0c, 0x06, 0xbe, 0x7c, 0xb7, 0x00, 0xac, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x11, - 0x2e, 0x04, 0x40, 0x28, 0x15, 0x33, 0x06, 0x88, 0x19, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x06, 0x28, 0x04, 0x04, 0x20, 0x01, 0x06, 0x40, - 0x06, 0x06, 0x06, 0x06, 0x0a, 0x06, 0x8c, 0x1d, 0x03, 0x28, 0x17, 0x0c, 0x68, 0x17, 0xf3, 0x31, 0x30, 0xb5, 0x06, 0x68, 0x1b, 0x98, 0x17, 0x6e, - 0x00, 0xe7, 0x06, 0x2f, 0xb7, 0xc6, 0x10, 0x06, 0xf0, 0x7f, 0x01, 0x18, 0x17, 0x6e, 0x00, 0x7a, 0x04, 0xae, 0xcf, 0x38, 0x17, 0x18, 0x18, 0x75, - 0x28, 0x84, 0x06, 0x78, 0x19, 0x38, 0x17, 0x04, 0xac, 0xac, 0x71, 0xc0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x98, 0x17, 0x3d, 0x04, 0x41, 0x06, - 0x28, 0x1d, 0xc5, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x07, 0x05, 0x05, 0x20, 0x01, 0x07, 0x40, 0x06, 0x00, 0x07, 0x07, 0x07, 0x07, 0xba, - 0x1d, 0x32, 0xfb, 0x00, 0x00, 0x00, 0x0d, 0x62, 0xab, 0x30, 0xb9, 0x30, 0x02, 0xc6, 0x30, 0xed, 0x30, 0xfb, 0x30, 0x38, 0x21, 0xf3, 0x2c, 0x30, - 0xb3, 0x05, 0xe8, 0x1f, 0x43, 0x2f, 0xad, 0x3e, 0x2f, 0x65, 0x00, 0x63, 0x6c, 0x4e, 0x2d, 0x5f, 0xbf, 0x6e, 0x00, 0x63, 0x2e, 0x3b, 0x10, 0x0d, - 0x30, 0x7f, 0xc0, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0x03, 0x5e, 0x17, 0x67, 0x93, 0x5e, 0x20, 0x21, 0x58, 0x06, 0x78, 0x17, 0x74, 0xce, 0xa4, - 0xc2, 0x54, 0x00, 0xd1, 0xe8, 0xb8, 0x0c, 0xbe, 0x91, 0xb7, 0xe0, 0x68, 0xcf, 0x06, 0x18, 0x1d, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x15, 0x48, 0x04, - 0x42, 0x00, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x43, 0x04, 0x2d, 0x8e, 0x68, 0x27, 0x3d, 0x04, 0x3a, 0x20, 0x0d, 0x10, 0x15, 0x34, 0xff, 0x06, 0xf6, - 0xff, 0x08, 0x2a, 0x06, 0x06, 0x20, 0x01, 0x08, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x08, 0x00, 0x08, 0x51, 0x1c, 0xad, 0xfa, 0x00, 0x00, 0x0e, 0x0f, - 0x62, 0xb3, 0x30, 0xa4, 0x28, 0x0d, 0x38, 0x13, 0x05, 0xd8, 0x0f, 0x98, 0x17, 0x47, 0x6f, 0x2e, 0x31, 0x6d, 0x00, 0x62, 0x4f, 0xb7, 0x10, 0x0e, - 0x10, 0x7f, 0x00, 0x98, 0x17, 0x10, 0x6f, 0x00, 0xed, 0x05, 0x22, 0x17, 0xd1, 0x79, 0xf1, 0x82, 0x08, 0x03, 0x5e, 0xc9, 0x62, 0x06, 0x78, 0x17, - 0x54, 0xcf, 0x84, 0x06, 0xc7, 0x0c, 0xbe, 0x7c, 0xb7, 0x06, 0x18, 0x11, 0x0f, 0x53, 0x7f, 0x1a, 0x00, 0x04, 0x3e, 0x04, 0x38, 0x04, 0x3c, 0x04, - 0x31, 0xe2, 0x48, 0x0f, 0x10, 0x16, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x09, 0x07, 0x07, 0x20, 0x01, 0x09, 0xa0, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, - 0x09, 0x98, 0x1c, 0x02, 0x80, 0x28, 0x17, 0x0f, 0x62, 0xa8, 0x30, 0xf4, 0x30, 0xa9, 0x83, 0x06, 0x88, 0x15, 0x00, 0x00, 0xc9, 0x00, 0x76, 0x2f, - 0xa7, 0x06, 0x58, 0x13, 0xe1, 0x10, 0x07, 0x30, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0xc3, 0x57, 0x66, 0x6b, 0x06, 0x98, 0x15, 0x03, 0x00, - 0x00, 0xd0, 0xc5, 0xf4, 0xbc, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1e, 0x2d, 0x04, 0x32, 0x28, 0x19, 0x06, 0x58, 0x13, 0x10, 0x0f, 0x34, 0xff, - 0x06, 0xf6, 0xff, 0x0a, 0x2a, 0x08, 0x08, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x14, 0x20, 0x05, 0x0a, 0x08, 0x0a, 0x6d, 0x1b, 0x61, 0x28, 0x17, 0x10, - 0x62, 0xd5, 0x02, 0x30, 0xa1, 0x30, 0xfc, 0x30, 0xed, 0x06, 0x88, 0x17, 0x46, 0xbe, 0x2f, 0xa5, 0x72, 0x2f, 0xb3, 0x06, 0x75, 0x97, 0x10, 0x06, - 0xf0, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0xd5, 0x10, 0x6c, 0x81, 0x9c, 0x06, 0x98, 0x15, 0x00, 0x00, 0x0c, 0xd3, 0x34, 0x5c, 0xb8, 0x06, - 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x24, 0x28, 0x11, 0x40, 0x04, 0x71, 0x43, 0x06, 0x68, 0x15, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x0b, 0x09, - 0x09, 0x20, 0x01, 0x50, 0x0b, 0x20, 0x06, 0x13, 0x20, 0x05, 0x0b, 0x0b, 0x52, 0x1a, 0x40, 0x5c, 0x28, 0x17, 0x11, 0x62, 0xb0, 0x30, 0xa2, 0x30, - 0x11, 0xeb, 0x30, 0xc0, 0x06, 0x88, 0x17, 0x47, 0x00, 0x75, 0x48, 0x19, 0x78, 0x64, 0x06, 0x6f, 0xb1, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0x78, 0x17, - 0x05, 0x72, 0x17, 0xdc, 0x74, 0xbe, 0x40, 0x8f, 0x06, 0xb8, 0x17, 0x6c, 0xad, 0x44, 0xc5, 0x74, 0xb9, 0x36, 0xe4, 0xb2, 0x06, 0x78, 0x1b, 0x0e, - 0xf3, 0x7f, 0x13, 0x28, 0x13, 0x38, 0x19, 0x34, 0xe2, 0x28, 0x1f, 0x10, 0x16, 0x34, 0xff, 0x06, 0xf6, 0xff, 0x0c, 0x0a, 0x0a, 0x20, 0x01, 0x0c, - 0xa0, 0x20, 0x06, 0x09, 0x20, 0x05, 0x0c, 0x0c, 0xd3, 0x1c, 0xd5, 0x80, 0x28, 0x17, 0x12, 0x62, 0xec, 0x30, 0xa4, 0x30, 0xea, 0xd7, 0x28, 0x1b, - 0x06, 0x78, 0x17, 0x4c, 0x2e, 0x1d, 0x69, 0x4e, 0x2d, 0x06, 0x58, 0x17, 0x10, 0x06, 0xf0, 0x7f, 0xc0, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0xb1, - 0x83, 0xcc, 0x91, 0x9a, 0x4e, 0x80, 0x06, 0x98, 0x19, 0x08, 0xb8, 0x74, 0xc7, 0xac, 0xb9, 0x44, 0x60, 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, - 0x1b, 0x04, 0x35, 0x04, 0x39, 0x8e, 0x28, 0x17, 0x38, 0x04, 0x4f, 0x06, 0x48, 0x17, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x0d, 0x2a, 0x0b, - 0x0b, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x0d, 0x04, 0x0d, 0x43, 0x1c, 0xbd, 0xf9, 0x2b, 0x2d, 0x62, 0xdd, 0x00, 0x30, 0xeb, 0x30, - 0xbf, 0x30, 0xec, 0x30, 0xb0, 0xd4, 0x20, 0x03, 0x06, 0x38, 0x1b, 0x50, 0x2e, 0x23, 0x72, 0x2e, 0x2f, 0x61, 0x00, 0x57, 0x6c, 0x2e, 0x27, 0x67, - 0x2f, 0xb9, 0x65, 0x10, 0x0d, 0xc0, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0x00, 0xe2, 0x6c, 0x54, 0x58, 0xb1, 0x83, 0x3c, 0x68, 0x20, 0xcc, - 0x91, 0x06, 0x58, 0x1b, 0xec, 0xd3, 0x74, 0xb9, 0xc8, 0x01, 0xd0, 0x08, 0xb8, 0xf8, 0xad, 0x74, 0xb9, 0x06, 0x38, 0x1b, 0x88, 0x0e, 0xf3, 0x7f, - 0x1f, 0x04, 0x3e, 0x28, 0x15, 0x42, 0x04, 0x30, 0x2b, 0x04, 0x3b, 0x28, 0x21, 0x33, 0x28, 0x21, 0x35, 0x05, 0xc8, 0x1f, 0x10, 0x0e, 0xf4, 0xff, - 0x94, 0x06, 0xf6, 0xff, 0x0e, 0x0e, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0xf0, 0x1b, 0x05, 0xb7, 0xfa, 0x00, 0x00, 0x14, 0x48, 0x17, 0xc8, 0x06, 0x48, - 0x11, 0xb1, 0xd8, 0x17, 0x6f, 0x10, 0x0e, 0x60, 0x7f, 0x00, 0x78, 0x17, 0x4f, 0x00, 0x70, 0x05, 0x42, 0x19, 0x03, 0xe2, 0x6c, 0x14, 0x5c, 0xfe, - 0x56, 0x06, 0x58, 0x13, 0x78, 0x17, 0x3b, 0x2c, 0xd2, 0x06, 0x38, 0x11, 0x0f, 0x53, 0x7f, 0x78, 0x17, 0x43, 0x05, 0xc8, 0x0d, 0x10, 0x0f, 0x94, - 0xff, 0x95, 0x06, 0xf6, 0xff, 0x0f, 0x0f, 0x20, 0x01, 0x0d, 0x30, 0x05, 0x10, 0x40, 0x0a, 0x00, 0x43, 0x1d, 0xe1, 0xf9, 0x00, 0x00, 0x15, 0x62, - 0x01, 0xb5, 0x30, 0xf3, 0x30, 0xbf, 0x30, 0xec, 0x20, 0x05, 0xa8, 0x06, 0x58, 0x1b, 0x53, 0x2f, 0xa9, 0x6e, 0x4f, 0xaf, 0x72, 0x00, 0xe9, 0x38, - 0x00, 0x6d, 0x10, 0x0e, 0x00, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0x23, 0x57, 0x54, 0x10, 0x58, 0x26, 0x4f, 0x06, 0x98, 0x17, 0xb0, 0xc0, - 0xc0, 0xd0, 0x30, 0x1d, 0xb8, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x04, 0x57, 0x3d, 0x28, 0x17, 0x30, 0x28, 0x1d, 0x35, 0x20, - 0x09, 0x10, 0x15, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x2a, 0x10, 0x10, 0x20, 0x01, 0x0f, 0x30, 0x05, 0x11, 0x40, 0x0a, 0xe6, 0x20, 0x1b, 0xd3, 0x28, - 0x17, 0x16, 0x62, 0xbb, 0x30, 0xc8, 0x00, 0x30, 0xa5, 0x30, 0xfc, 0x30, 0xd0, 0x30, 0xeb, 0xa0, 0x06, 0x48, 0x19, 0x53, 0x2e, 0x1d, 0x74, 0x00, - 0xfa, 0x00, 0x62, 0xbc, 0x28, 0x1f, 0x6c, 0x06, 0x48, 0x97, 0x10, 0x06, 0xd0, 0x7f, 0x00, 0x98, 0x17, 0x05, 0x52, 0x17, 0x5e, 0x58, 0x02, 0xfe, - 0x56, 0xf4, 0x5d, 0x14, 0x5c, 0x06, 0x78, 0x19, 0x38, 0x06, 0xc1, 0x2c, 0xd2, 0x1c, 0xbc, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x21, 0x82, 0x28, - 0x0d, 0x42, 0x04, 0x43, 0x04, 0x31, 0x28, 0x1f, 0x3b, 0xe5, 0x06, 0x08, 0x15, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x11, 0x11, 0x20, 0x01, - 0x10, 0x30, 0x05, 0x44, 0x12, 0x40, 0x0a, 0x65, 0x1b, 0xae, 0x28, 0x17, 0x17, 0x62, 0x00, 0xf4, 0x30, 0xa3, 0x30, 0xa2, 0x30, 0xca, 0x30, 0x10, - 0xfb, 0x30, 0xc9, 0x20, 0x03, 0xab, 0x30, 0xb9, 0x30, 0x16, 0xc6, 0x30, 0xed, 0x05, 0xa8, 0x21, 0x56, 0x2e, 0x2f, 0x3f, 0xb1, 0x61, 0xda, 0x4e, - 0x29, 0x3e, 0x2f, 0x43, 0x2f, 0xc1, 0x3e, 0x41, 0x65, 0x28, 0x27, 0x6f, 0xe0, 0x10, 0x0d, 0x00, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0xf4, - 0x7e, 0x9a, 0x4e, 0xb3, 0x10, 0x7e, 0x21, 0x58, 0x06, 0x78, 0x17, 0x44, 0xbe, 0x44, 0xc5, 0x00, 0x98, 0xb0, 0x50, 0xb4, 0x74, 0xce, 0xa4, 0xc2, - 0x0c, 0x54, 0xd1, 0xe8, 0xb8, 0x05, 0xf8, 0x21, 0x0e, 0xf3, 0x7f, 0x12, 0x04, 0x51, 0x38, 0x28, 0x11, 0x3d, 0x28, 0x15, 0x2d, 0x00, 0x34, 0x28, - 0x1f, 0x15, 0x2d, 0x00, 0x1a, 0x28, 0x21, 0x48, 0x28, 0x2b, 0x35, 0x28, 0x27, 0x75, 0x43, 0x05, 0x08, 0x29, 0x10, 0x0e, 0xf4, 0xff, 0x07, 0x02, - 0xff, 0x12, 0x20, 0x01, 0x11, 0x30, 0x05, 0x45, 0x06, 0x40, 0x0a, 0xa6, 0x1d, 0xb9, 0x28, 0x17, 0x18, 0x48, 0x17, 0x56, 0xe9, 0x28, 0x15, 0xec, - 0x28, 0x1d, 0xeb, 0x05, 0xa8, 0x0f, 0xb8, 0x17, 0x6c, 0xbe, 0x48, 0x15, 0x52, 0x2f, 0xb9, 0x06, 0x1f, 0xb3, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0xb8, - 0x17, 0x05, 0x32, 0x17, 0xf7, 0x01, 0x96, 0x3f, 0x96, 0x14, 0x5c, 0xce, 0x57, 0x06, 0x78, 0x17, 0x00, 0x4c, 0xbe, 0x7c, 0xb7, 0xe4, 0xd5, 0x4c, - 0xc5, 0xea, 0x05, 0xf8, 0x0f, 0x0f, 0x73, 0x7f, 0x38, 0x17, 0x3b, 0x48, 0x15, 0x20, 0x28, 0x09, 0x30, 0xe5, 0x28, 0x0b, 0x10, 0x15, 0xd4, 0xff, - 0x06, 0xf6, 0xff, 0x13, 0x13, 0x20, 0x01, 0x12, 0x30, 0x05, 0x40, 0x08, 0x40, 0x0a, 0x5d, 0x1d, 0x7e, 0xfa, 0x00, 0x00, 0x46, 0x19, 0x48, 0x17, - 0xbc, 0x30, 0xa6, 0x06, 0x28, 0x11, 0x9f, 0xaf, 0x73, 0xbc, 0x2f, 0x9b, 0x75, 0x06, 0x5d, 0xae, 0x10, 0x07, 0x00, 0x7f, 0x00, 0xb8, 0x17, 0x05, - 0x32, 0x17, 0xf4, 0x7e, 0x0c, 0x5e, 0x58, 0x4c, 0x4e, 0x06, 0x78, 0x15, 0x29, 0x17, 0xbe, 0x1c, 0x1d, 0xc8, 0xb0, 0xc6, 0x06, 0x78, 0x15, 0x0f, - 0x13, 0x7f, 0x38, 0x17, 0x37, 0x28, 0x11, 0x72, 0x43, 0x05, 0xe8, 0x0f, 0x10, 0x0f, 0x74, 0xff, 0x06, 0xf6, 0xff, 0x14, 0x14, 0x20, 0x01, 0x13, - 0xa3, 0x30, 0x05, 0x07, 0x40, 0x0a, 0xe9, 0x1c, 0x60, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x15, 0x01, 0x0c, 0x0c, 0x20, 0x01, 0x01, 0x20, 0x06, 0x0d, - 0x20, 0x05, 0x00, 0x01, 0x01, 0x02, 0x0d, 0x0d, 0x0d, 0x0d, 0x14, 0x40, 0x02, 0x20, 0x06, 0x0e, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x01, 0x03, 0x02, - 0x01, 0x02, 0x02, 0x01, 0x03, 0x40, 0x06, 0x01, 0x03, 0x03, 0x03, 0x03, 0x04, 0x01, 0x02, 0x20, 0x24, 0x41, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, - 0x04, 0x05, 0x30, 0x14, 0x20, 0x03, 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x06, 0x90, 0x30, 0x14, 0x04, 0x06, 0x40, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x48, 0x07, 0x30, 0x14, 0x05, 0x07, 0x40, 0x06, 0x07, 0x07, 0x07, 0x25, 0x07, 0x08, 0x30, 0x14, 0x06, 0x08, 0x20, 0x06, 0x0a, 0x20, 0x05, - 0x12, 0x08, 0x08, 0x09, 0x30, 0x14, 0x07, 0x09, 0x20, 0x06, 0x0b, 0x89, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x14, 0x08, 0x0a, 0x20, 0x06, 0x44, - 0x14, 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x30, 0x14, 0x09, 0x0b, 0xa2, 0x20, 0x06, 0x13, 0x20, 0x05, 0x0b, 0x0b, 0x0c, 0x30, 0x14, 0x0a, 0x5c, 0x0c, - 0x20, 0x06, 0x09, 0x20, 0x05, 0x20, 0xb5, 0x30, 0x14, 0x0b, 0x0d, 0xb5, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x20, 0xb5, 0x0e, 0x70, 0x01, 0x0f, 0x50, - 0x05, 0x54, 0x0f, 0x20, 0x01, 0x0d, 0x30, 0x05, 0x10, 0x40, 0x0a, 0x10, 0x10, 0xd3, 0x20, 0x01, 0x40, 0x05, 0x11, 0x40, 0x0a, 0x11, 0x11, 0x20, - 0x01, 0x40, 0x05, 0x4d, 0x12, 0x40, 0x0a, 0x12, 0x12, 0x20, 0x01, 0x40, 0x05, 0x06, 0x40, 0x0a, 0xe0, 0xf9, 0x5f, 0xf1, 0x57, 0x3f, 0xee, 0x00, - 0x11, 0xc8, 0x5e, 0x01, 0x11, 0x2a, 0x00, 0x00, 0x30, 0x01, 0x63, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x98, 0x1f, 0x8c, 0x12, 0x00, 0x00, 0x00, 0x02, 0x63, 0xd6, 0x30, 0xab, 0x30, 0xec, 0x01, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0xde, 0x5d, 0x06, - 0x38, 0x21, 0x00, 0x42, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x77, 0x74, 0x06, 0x40, - 0x7f, 0x06, 0x70, 0x7d, 0x50, 0xff, 0x6b, 0x06, 0xe0, 0x7f, 0x06, 0xf0, 0xff, 0x06, 0xb1, 0x7f, 0x00, 0x03, 0x5e, 0xa0, 0x52, 0xd2, 0x52, 0xaf, - 0x65, 0x08, 0x79, 0x72, 0x02, 0x5e, 0x06, 0x3b, 0x21, 0x80, 0xbd, 0xe0, 0x00, 0xcf, 0x08, 0xb8, 0x88, 0xc2, 0xf0, 0xd2, 0x20, 0x17, 0x00, 0xfc, - 0xc8, 0x06, 0x33, 0x7f, 0x6f, 0x23, 0x77, 0x06, 0x92, 0x81, 0xf3, 0x7f, 0x40, 0x65, 0x05, 0xec, 0xa6, 0x11, 0x04, 0x43, 0x04, 0x45, 0x04, 0x00, - 0x30, 0x04, 0x40, 0x04, 0x35, 0x04, 0x41, 0x04, 0x31, 0x42, 0x04, 0x0e, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x01, 0x0a, 0x0a, 0x20, 0x01, 0x04, - 0x01, 0x01, 0x07, 0x0a, 0x0b, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, 0x17, 0x03, 0x63, 0xa2, 0x30, 0xeb, 0x30, 0xd0, 0xc1, 0x06, 0x68, 0x13, 0x3f, - 0xff, 0x41, 0x00, 0x6c, 0x00, 0x62, 0x28, 0x15, 0x80, 0x10, 0x16, 0x70, 0x7f, 0x3f, 0x96, 0x14, 0x5c, 0xf4, 0x5d, 0xbf, 0x43, 0x53, 0x06, 0x7f, - 0xb5, 0x4c, 0xc5, 0x14, 0xbc, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x06, 0x10, 0x04, 0x3b, 0x04, 0x31, 0x28, 0x17, 0x10, 0x1e, 0x74, 0xff, 0x02, - 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x01, 0xc2, 0x20, 0xc2, 0x10, 0x00, 0x00, 0x04, 0x28, 0x17, 0x15, 0xe9, 0x30, - 0xc9, 0x06, 0xc8, 0x17, 0x72, 0x2f, 0xad, 0x64, 0x06, 0xa8, 0x17, 0x81, 0x10, 0x0e, 0xd0, 0x7f, 0x3f, 0x96, 0xc9, 0x62, 0xb7, 0x5f, 0x06, 0x98, - 0x17, 0x03, 0x44, 0xc5, 0x7c, 0xb7, 0xdc, 0xb4, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x16, 0x10, 0x04, 0x40, 0x28, 0x15, 0x34, 0x06, 0xa8, 0x17, - 0x10, 0x16, 0xd4, 0xff, 0x03, 0x90, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0xd7, 0x20, 0x28, 0x0f, 0x00, 0x00, 0x05, - 0x28, 0x17, 0x00, 0xeb, 0x30, 0xb8, 0x30, 0xa7, 0x30, 0xb7, 0x30, 0x60, 0xe5, 0x06, 0x48, 0x1d, 0x38, 0x17, 0x67, 0x00, 0x65, 0x00, 0x73, 0xc8, - 0x06, 0xa8, 0x97, 0x30, 0x7f, 0x5f, 0x01, 0x10, 0x0e, 0x50, 0x7f, 0x3f, 0x96, 0x14, 0x04, 0x5c, 0x70, 0x67, 0xc0, 0x4e, 0x06, 0x78, 0x19, 0x44, - 0xc5, 0x03, 0x74, 0xb9, 0x1c, 0xc8, 0x88, 0xc2, 0x06, 0x78, 0x19, 0x07, 0x72, 0xff, 0xc0, 0x06, 0x73, 0xff, 0x38, 0x17, 0x34, 0x04, 0x36, 0x04, - 0x35, 0x04, 0x74, 0x48, 0x06, 0x48, 0x1b, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x80, 0x40, 0x06, 0x04, 0x04, - 0x04, 0x04, 0xe4, 0x1f, 0xb1, 0x00, 0x11, 0x00, 0x00, 0x06, 0x63, 0xd0, 0x30, 0xab, 0x35, 0x30, 0xa6, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x42, 0x2f, - 0xad, 0x63, 0x2f, 0xb1, 0x48, 0x75, 0x06, 0xc0, 0x7f, 0x03, 0x01, 0x10, 0x0e, 0x70, 0x7f, 0xf4, 0x5d, 0x4b, 0x20, 0x51, 0x4c, 0x06, 0x88, 0x15, - 0x00, 0x00, 0x14, 0xbc, 0xe4, 0x18, 0xce, 0xb0, 0xc6, 0x06, 0x78, 0x15, 0x0f, 0x12, 0xff, 0x11, 0x04, 0x30, 0x03, 0x04, 0x3a, 0x04, 0x4d, 0x04, - 0x43, 0x06, 0x48, 0x15, 0x07, 0x74, 0xff, 0xa4, 0x10, 0x0e, 0x90, 0x7f, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x40, 0x06, 0x05, 0x05, 0x00, 0x05, 0x05, - 0x1d, 0x21, 0x24, 0x13, 0x00, 0x00, 0x01, 0x07, 0x63, 0xd3, 0x30, 0xdb, 0x30, 0xeb, 0x06, 0xc8, 0x17, 0x06, 0x69, 0x00, 0x68, 0x00, 0x6f, 0x2f, - 0xb5, 0x10, 0x16, 0x50, 0x7f, 0xd4, 0x04, 0x6b, 0x0d, 0x97, 0x14, 0x5c, 0x06, 0x98, 0x17, 0x44, 0xbe, 0x0c, 0x38, 0xd6, 0x74, 0xb9, 0x06, 0xb8, - 0x17, 0x0e, 0xd3, 0x7f, 0x11, 0x04, 0x01, 0x38, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x40, 0x06, 0x88, 0x17, 0xa5, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x38, - 0x0c, 0x05, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x00, 0x06, 0x06, 0x78, 0x21, 0x95, 0x0f, 0x00, 0x00, 0x40, 0x08, 0x28, 0x17, 0xb9, 0x30, 0xc8, - 0x30, 0xea, 0x30, 0x00, 0xc4, 0x30, 0xa1, 0x30, 0xfb, 0x30, 0xca, 0x30, 0x06, 0xb5, 0x30, 0xa6, 0x30, 0xc9, 0x05, 0xa8, 0x27, 0x38, 0x17, 0x73, - 0x28, 0x00, 0x74, 0x28, 0x17, 0x69, 0x20, 0x05, 0x61, 0x00, 0x2d, 0x2a, 0x00, 0x4e, 0x2f, 0xc1, 0x73, 0x4b, 0x41, 0x64, 0x06, 0x60, 0x7f, 0x03, - 0x30, 0x01, 0x73, 0x4f, 0xc1, 0x10, 0x0d, 0x30, 0x7f, 0xd4, 0x6b, 0xaf, 0x65, 0x00, 0x79, 0x72, 0xcc, 0x91, 0xdf, 0x5b, 0x2d, 0x00, 0x00, 0xb7, - 0x8b, 0x5f, 0x74, 0x4c, 0x4e, 0xb7, 0x5f, 0x80, 0x05, 0xb8, 0x25, 0x44, 0xbe, 0xa4, 0xc2, 0xb8, 0xd2, 0xac, 0x00, 0xb9, 0x28, 0xcc, 0x08, 0xb1, - 0x1c, 0xc1, 0xb0, 0x1c, 0xc6, 0xdc, 0xb4, 0x05, 0xd8, 0x23, 0x0e, 0xf2, 0xff, 0x38, 0x17, 0x41, 0x04, 0x40, 0x42, 0x28, 0x17, 0x38, 0x04, 0x46, - 0x04, 0x30, 0x04, 0x04, 0x2d, 0x00, 0x1d, 0x04, 0x4d, 0x20, 0x11, 0x4d, 0x04, 0x1d, 0x43, 0x04, 0x34, 0x05, 0x28, 0x2b, 0x08, 0x34, 0xff, 0x10, - 0x0d, 0xb0, 0x7f, 0x07, 0x38, 0x0c, 0x28, 0x06, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x07, 0x84, 0x00, 0x21, 0x6c, 0x11, 0x00, 0x00, 0x09, - 0x63, 0xdc, 0x83, 0x28, 0x15, 0xb7, 0x30, 0xe3, 0x30, 0xcb, 0x05, 0xa8, 0x0b, 0xdf, 0xaf, 0x56, 0x6f, 0x28, 0x15, 0x6f, 0x48, 0x09, 0x6e, 0x2f, - 0xbb, 0x06, 0x70, 0x7f, 0x5f, 0x40, 0x01, 0x10, 0x0e, 0x50, 0x7f, 0x5a, 0x53, 0x58, 0x62, 0x99, 0x6c, 0x30, 0x3c, 0x5c, 0x05, 0xb8, 0x0b, 0xbf, - 0xff, 0xf4, 0xbc, 0xa0, 0xd1, 0x0c, 0xe4, 0xc0, 0xc8, 0xb2, 0x05, 0xd8, 0x0d, 0x0f, 0x92, 0xff, 0x11, 0x04, 0x45, 0x3e, 0x28, 0x15, 0x3e, 0x04, - 0x48, 0x28, 0x13, 0x3d, 0x28, 0x23, 0xd1, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x08, 0x30, 0x07, 0x80, 0x20, - 0x05, 0x08, 0xf4, 0x21, 0xf6, 0x12, 0x00, 0x00, 0x01, 0x0a, 0x63, 0xd6, 0x30, 0xe9, 0x30, 0xa4, 0x20, 0x03, 0xd1, 0x06, 0x58, 0x15, 0x3f, 0xaf, - 0x72, 0x2f, 0xa5, 0x69, 0x00, 0x6c, 0x2f, 0xab, 0x90, 0x06, 0x70, 0x7f, 0x03, 0x01, 0x10, 0x0e, 0x90, 0x7f, 0x03, 0x5e, 0xd2, 0x52, 0x08, 0x0a, - 0x4f, 0xc9, 0x62, 0x06, 0x78, 0x17, 0x0c, 0xbe, 0xec, 0x06, 0xb7, 0x7c, 0xc7, 0x7c, 0xb7, 0x06, 0x98, 0x17, 0x0e, 0xd2, 0xff, 0x11, 0x0b, 0x04, - 0x40, 0x04, 0x4d, 0x28, 0x0f, 0x3b, 0x28, 0x17, 0x0e, 0x74, 0xff, 0xa0, 0x10, 0x0e, 0xb0, 0x7f, 0x09, 0x38, 0x0c, 0x08, 0x09, 0x09, 0x09, 0x08, - 0xc0, 0x20, 0x01, 0x20, 0x06, 0x33, 0x20, 0xe3, 0x13, 0x00, 0x00, 0x41, 0x0b, 0x48, 0x17, 0xb7, 0x30, 0xe7, 0x30, 0xf4, 0x06, 0x68, 0x19, 0xa9, - 0x58, 0x17, 0x73, 0x2f, 0xb5, 0x76, 0x06, 0xa8, 0x97, 0x5f, 0x01, 0x10, 0x0e, 0x70, 0x7f, 0x00, 0x03, 0x5e, 0xc9, 0x62, 0x22, 0x7d, 0x2b, 0x59, - 0x81, 0x06, 0x98, 0x17, 0x7c, 0xb7, 0xfc, 0xc1, 0x0c, 0xbe, 0x06, 0xb8, 0x17, 0xc0, 0x0e, 0xb2, 0xff, 0x38, 0x17, 0x30, 0x04, 0x48, 0x04, 0x3e, - 0x04, 0x74, 0x32, 0x06, 0xa8, 0x17, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0a, 0x38, 0x0c, 0x09, 0x0a, 0x30, 0x0a, 0x0a, 0x28, 0x18, 0x20, - 0x05, 0x0a, 0x76, 0x20, 0x37, 0x63, 0x12, 0x2c, 0xad, 0x28, 0x17, 0xb6, 0x30, 0xa6, 0x06, 0x68, 0x13, 0x5f, 0xaf, 0x14, 0x75, 0x00, 0x7a, 0x2f, - 0xab, 0x75, 0x06, 0xc0, 0x7f, 0x03, 0x01, 0x81, 0x10, 0x0e, 0x70, 0x7f, 0x03, 0x5e, 0xfd, 0x6c, 0x4c, 0x4e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, - 0x80, 0xbd, 0x00, 0xc8, 0xb0, 0xc6, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x12, 0xff, 0x11, 0x04, 0x43, 0x04, 0x37, 0x04, 0x72, 0x4d, 0x20, 0x05, 0x0e, - 0xb4, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0b, 0x0b, 0x70, 0x01, 0x0a, 0x80, 0x40, 0x0a, 0x1b, 0x20, 0x11, 0x13, 0x00, 0x00, 0x0d, 0x0a, 0x63, 0xab, - 0x30, 0xe9, 0x20, 0x01, 0xb7, 0x06, 0x88, 0x19, 0x43, 0xb4, 0x2f, 0xad, 0x6c, 0x2f, 0xb1, 0x5b, 0x35, 0x69, 0x06, 0x20, 0x7f, 0x03, 0x01, 0x70, - 0x6c, 0x28, 0x17, 0x5f, 0xb5, 0x10, 0x0e, 0x10, 0x7f, 0x4b, 0x51, 0xd2, 0x52, 0x08, 0xc9, 0x62, 0x0c, 0x5e, 0x06, 0x78, 0x19, 0xec, 0xce, 0xec, - 0x06, 0xb7, 0x7c, 0xb7, 0xdc, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf2, 0xff, 0x1a, 0xa0, 0x28, 0x13, 0x3b, 0x28, 0x17, 0x40, 0x04, 0x30, 0x04, 0x48, - 0x39, 0x04, 0x38, 0x06, 0x08, 0x1d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x0c, 0x0c, 0x70, 0x01, 0x45, 0x19, 0x40, 0x0a, 0x6e, 0x1f, 0x6f, - 0x28, 0x17, 0x0e, 0x48, 0x17, 0x00, 0xb7, 0x30, 0xe5, 0x30, 0xfb, 0x30, 0xbb, 0x30, 0x01, 0xf4, 0x30, 0xa7, 0x30, 0xea, 0x30, 0xf3, 0x05, 0xc8, - 0x23, 0xc0, 0x38, 0x17, 0x58, 0x13, 0x2d, 0x00, 0x53, 0x00, 0x65, 0x00, 0x54, 0x76, 0x20, 0x03, 0x72, 0x28, 0x1f, 0x6e, 0x05, 0xe0, 0x7f, 0x5f, - 0x01, 0x80, 0x10, 0x0e, 0x50, 0x7f, 0x61, 0x53, 0xc9, 0x62, 0xc0, 0x4e, 0x2d, 0x01, 0x00, 0x5e, 0x58, 0xf4, 0x7e, 0x97, 0x67, 0x06, 0x18, 0x1d, - 0x00, 0x74, 0xce, 0x7c, 0xb7, 0x88, 0xc2, 0x38, 0xc1, 0x0d, 0xa0, 0xbc, 0xb0, 0xb9, 0x06, 0x38, 0x1b, 0x0e, 0xf2, 0xff, 0x1a, 0x28, 0x0f, 0x80, - 0x58, 0x13, 0x2d, 0x00, 0x21, 0x04, 0x35, 0x04, 0x32, 0xae, 0x20, 0x03, 0x40, 0x28, 0x1f, 0x3d, 0x05, 0x68, 0x21, 0x07, 0x74, 0xff, 0x10, 0x0e, - 0x70, 0x7f, 0x0d, 0x50, 0x0d, 0x70, 0x01, 0x15, 0x40, 0x0a, 0x36, 0x20, 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x63, 0xaf, 0x30, 0xeb, 0x30, 0x1c, - 0xfc, 0x30, 0xb8, 0x28, 0x19, 0x05, 0xb8, 0x0d, 0xbf, 0xaf, 0x6c, 0x00, 0x18, 0x75, 0x00, 0x6a, 0x06, 0x5d, 0xac, 0x10, 0x0f, 0x20, 0x7f, 0x4b, - 0x51, 0x62, 0x18, 0x53, 0xe5, 0x65, 0x06, 0x18, 0x0f, 0x88, 0x17, 0xd0, 0xe8, 0xb8, 0x30, 0xc0, 0xc9, 0x06, 0x38, 0x11, 0x0f, 0x53, 0x7f, 0x1a, - 0x04, 0x3b, 0x04, 0x19, 0x43, 0x04, 0x36, 0x05, 0x68, 0x05, 0x10, 0x18, 0x14, 0xff, 0x0e, 0x0e, 0x70, 0x01, 0x40, 0x16, 0x40, 0x0a, 0x44, 0x21, - 0xc5, 0x10, 0x00, 0x00, 0x00, 0x10, 0x63, 0xb3, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0x44, 0xbf, 0x20, 0x05, 0xc4, 0x30, 0xa1, 0x06, 0x28, 0x1b, 0x43, - 0x00, 0x45, 0x6f, 0x2f, 0x9b, 0x73, 0x00, 0x74, 0x2f, 0xb7, 0x6e, 0x40, 0x05, 0xdc, 0x10, 0x06, 0x10, 0x7f, 0x71, 0x7d, 0x7a, 0x06, 0x01, 0x7d, - 0xf1, 0xff, 0x06, 0x10, 0x81, 0xb7, 0x5e, 0x02, 0xaf, 0x65, 0x66, 0x57, 0xdf, 0x5b, 0x06, 0x78, 0x19, 0x58, 0x01, 0xcf, 0xa4, 0xc2, 0xc4, 0xd0, - 0x28, 0xcc, 0x06, 0x78, 0x19, 0x80, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x41, 0x0b, 0x04, 0x42, 0x04, 0x30, 0x20, 0x07, 0x46, - 0x20, 0x05, 0x10, 0x0e, 0x14, 0xff, 0x94, 0x0e, 0xb6, 0x7f, 0x0f, 0x0f, 0x70, 0x01, 0x18, 0x40, 0x0a, 0x6b, 0x1f, 0x05, 0x5c, 0x14, 0x00, 0x00, - 0x11, 0x28, 0x17, 0xf4, 0x28, 0x0f, 0x1a, 0xb9, 0x30, 0xca, 0x06, 0x28, 0x13, 0x78, 0x17, 0x76, 0x28, 0x13, 0x73, 0xe0, 0x28, 0x1d, 0x06, 0x16, - 0x95, 0x10, 0x0f, 0x10, 0x7f, 0xd1, 0x79, 0xe6, 0x74, 0xaf, 0x10, 0x65, 0xb3, 0x7e, 0x06, 0x78, 0x17, 0x54, 0xcf, 0x14, 0xbc, 0x0e, 0xa4, 0xc2, - 0x98, 0xb0, 0x06, 0xb8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x32, 0xb9, 0x28, 0x13, 0x41, 0x28, 0x1d, 0x05, 0xf8, 0x13, 0x10, 0x17, 0x34, 0xff, - 0x10, 0x10, 0x70, 0x01, 0x40, 0x17, 0x40, 0x0a, 0x9d, 0x20, 0x58, 0x12, 0x00, 0x00, 0x00, 0x12, 0x63, 0xc9, 0x30, 0xa5, 0x30, 0xf3, 0x30, 0x06, - 0xdc, 0x30, 0xd3, 0x30, 0xc4, 0x28, 0x1f, 0x06, 0x18, 0x1b, 0x44, 0x02, 0x00, 0xe2, 0x00, 0x6d, 0x00, 0x62, 0x48, 0x1d, 0x69, 0xc0, 0x06, 0x2f, - 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x7b, 0x76, 0x5a, 0x53, 0xf4, 0x7e, 0x20, 0xdf, 0x5b, 0x06, 0x78, 0x17, 0xec, 0xb4, 0xf4, 0xbc, 0x44, 0x18, 0xbe, - 0x28, 0xcc, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x4b, 0x08, 0x04, 0x3c, 0x04, 0x31, 0x48, 0x1d, 0x38, 0x04, 0x46, 0xca, 0x06, 0x08, - 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x11, 0x11, 0x70, 0x01, 0x13, 0x40, 0x0a, 0xf4, 0x28, 0x1f, 0x1a, 0x28, 0x17, 0x13, 0x28, 0x17, 0xeb, 0x30, 0xb8, - 0x30, 0x30, 0xe5, 0x06, 0x28, 0x11, 0x78, 0x17, 0x6f, 0x00, 0x6c, 0x00, 0x60, 0x6a, 0x06, 0x5d, 0xac, 0x10, 0x0f, 0x20, 0x7f, 0x1a, 0x59, 0x14, - 0x5c, 0xe5, 0x40, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0xcc, 0xb3, 0xc0, 0xc9, 0xd1, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x14, 0x28, 0x11, 0x3b, - 0x04, 0x36, 0x05, 0xe8, 0x0d, 0x90, 0x10, 0x17, 0x94, 0xff, 0x12, 0x12, 0xd0, 0x01, 0x83, 0x1f, 0xef, 0x10, 0x80, 0x2b, 0x2d, 0x63, 0xac, 0x30, - 0xe9, 0x30, 0xc4, 0x30, 0x55, 0xa3, 0x06, 0x88, 0x17, 0x47, 0x2f, 0xa1, 0x6c, 0x2f, 0xa5, 0x74, 0x2f, 0xad, 0x81, 0x10, 0x16, 0x30, 0x7f, 0xa0, - 0x52, 0xc9, 0x62, 0x28, 0x83, 0x06, 0x98, 0x17, 0x03, 0x08, 0xac, 0x7c, 0xb7, 0x58, 0xce, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x11, 0x13, 0x04, - 0x30, 0x28, 0x17, 0x30, 0x04, 0x46, 0x06, 0x68, 0x19, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x13, 0x13, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x4e, 0x20, 0x00, - 0xef, 0x13, 0x00, 0x00, 0x15, 0x63, 0xb8, 0x30, 0x0d, 0xe5, 0x30, 0xeb, 0x30, 0x30, 0x05, 0x06, 0x58, 0x19, 0x47, 0x28, 0x0f, 0x06, 0x75, 0x00, - 0x72, 0x00, 0x67, 0x40, 0x07, 0x10, 0x16, 0x10, 0x7f, 0x45, 0x04, 0x4e, 0x14, 0x5c, 0x45, 0x4e, 0x06, 0x98, 0x17, 0xc0, 0xc9, 0x0e, 0xb0, 0xc6, - 0x74, 0xb9, 0x30, 0x05, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x14, 0x00, 0x04, 0x36, 0x04, 0x43, 0x04, 0x40, 0x04, 0x34, 0xca, 0x40, 0x07, 0x10, - 0x1e, 0x14, 0xff, 0x14, 0x14, 0x70, 0x01, 0x11, 0x40, 0x0a, 0x37, 0x00, 0x1f, 0x77, 0x12, 0x00, 0x00, 0x16, 0x63, 0xb4, 0xd6, 0x06, 0xc8, 0x15, - 0x3f, 0xaf, 0x6f, 0x28, 0x15, 0x6a, 0x06, 0x7d, 0xae, 0x10, 0x0f, 0x00, 0x7f, 0x08, 0x04, 0x62, 0x14, 0x5c, 0xe5, 0x65, 0x06, 0x98, 0x17, 0xe0, - 0xac, 0xe2, 0x38, 0x15, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x13, 0x04, 0x3e, 0x28, 0x15, 0x36, 0xca, 0x06, 0x28, 0x11, 0x10, 0x17, 0x54, 0xff, - 0x15, 0x15, 0x70, 0x01, 0x10, 0x40, 0x0a, 0x09, 0x00, 0x20, 0x8b, 0x10, 0x00, 0x00, 0x17, 0x63, 0xcf, 0x88, 0x28, 0x17, 0xae, 0x30, 0xbf, 0x06, - 0x88, 0x17, 0x48, 0x00, 0x61, 0xac, 0x4f, 0xad, 0x68, 0x2f, 0xb7, 0x74, 0x20, 0x0b, 0x10, 0x15, 0xf0, 0x7f, 0xc8, 0x54, 0x02, 0x14, 0x5c, 0x09, - 0x54, 0x54, 0x58, 0x06, 0x78, 0x19, 0x58, 0x01, 0xd5, 0x74, 0xb9, 0x30, 0xae, 0xc0, 0xd0, 0x06, 0x78, 0x19, 0x88, 0x0e, 0xf3, 0x7f, 0x25, 0x04, - 0x30, 0x28, 0x17, 0x33, 0x04, 0x38, 0x32, 0x04, 0x42, 0x20, 0x09, 0x10, 0x1e, 0x14, 0xff, 0x16, 0x16, 0x70, 0x01, 0x27, 0x80, 0x40, 0x0a, 0xf8, - 0x20, 0x58, 0x12, 0x00, 0x00, 0x18, 0x00, 0x63, 0xd5, 0x30, 0xcd, 0x30, 0xc9, 0x30, 0xa2, 0x20, 0x30, 0xe9, 0x06, 0x68, 0x19, 0x48, 0x00, 0x75, - 0x00, 0x6e, 0x0f, 0x00, 0x65, 0x00, 0x64, 0x2f, 0xb7, 0x38, 0x21, 0x05, 0xf8, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0xe1, 0x80, 0x85, 0x51, 0x1a, - 0x59, 0x3f, 0x96, 0x20, 0xc9, 0x62, 0x06, 0x58, 0x19, 0xc4, 0xd6, 0x24, 0xb1, 0xc4, 0x06, 0xb3, 0x44, 0xc5, 0x7c, 0xb7, 0x06, 0x58, 0x19, 0x0e, - 0xf3, 0x7f, 0x25, 0x00, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x39, 0x04, 0x3e, 0x48, 0x21, 0x05, 0xf8, 0x1b, 0x10, 0x16, 0xf4, 0xff, - 0x17, 0x17, 0x70, 0x01, 0x40, 0x28, 0x40, 0x0a, 0xa0, 0x20, 0x49, 0x10, 0x00, 0x00, 0x00, 0x19, 0x63, 0xe4, 0x30, 0xed, 0x30, 0xdf, 0x30, 0x15, - 0xc4, 0x30, 0xa1, 0x06, 0x68, 0x17, 0x49, 0x2f, 0xaf, 0x6c, 0x28, 0x13, 0x60, 0x6d, 0x06, 0x6f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xc5, 0x96, 0x1b, - 0x6d, 0x73, 0x10, 0x7c, 0xdf, 0x5b, 0x06, 0x58, 0x15, 0x00, 0x00, 0x74, 0xc7, 0x00, 0x4c, 0xc5, 0x5c, 0xb8, 0xf8, 0xbb, 0x28, 0xcc, 0xc4, 0x06, - 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x2f, 0x04, 0x3b, 0x28, 0x11, 0x3c, 0x04, 0x19, 0x38, 0x04, 0x46, 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x18, - 0x18, 0x70, 0x01, 0x40, 0x29, 0x40, 0x0a, 0xb1, 0x1f, 0x78, 0x13, 0x00, 0x00, 0x5b, 0x1a, 0x28, 0x17, 0xb7, 0x06, 0x68, 0x11, 0x98, 0x17, 0x73, - 0x28, 0x13, 0x06, 0xb0, 0x7f, 0x21, 0x5f, 0x01, 0x10, 0x0e, 0x90, 0x7f, 0xc5, 0x96, 0x7f, 0x89, 0x06, 0x78, 0x13, 0x87, 0x58, 0x17, 0x44, 0xc5, - 0xdc, 0xc2, 0x06, 0x58, 0x13, 0x07, 0x72, 0xff, 0x06, 0xb3, 0xff, 0x17, 0x2f, 0x04, 0x41, 0x20, 0x01, 0x4b, 0x06, 0x28, 0x11, 0x07, 0x94, 0xff, - 0x10, 0x0e, 0xb0, 0x7f, 0x28, 0x19, 0x19, 0x70, 0x01, 0x2a, 0x40, 0x0a, 0x8a, 0x21, 0x9a, 0x80, 0x28, 0x17, 0x1b, 0x63, 0xa4, 0x30, 0xeb, 0x30, - 0xdb, 0x2a, 0x30, 0xf4, 0x06, 0x88, 0x1b, 0x49, 0x2f, 0xad, 0x66, 0x2f, 0xaf, 0x76, 0xc0, 0x06, 0x88, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0x0a, 0x4f, - 0x14, 0x5c, 0x8f, 0x79, 0x20, 0x2b, 0x59, 0x06, 0x78, 0x1b, 0x7c, 0xc7, 0xec, 0xd3, 0x0c, 0x60, 0xbe, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x18, - 0x04, 0x3b, 0x04, 0x44, 0x0c, 0x04, 0x3e, 0x04, 0x32, 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x1a, 0x1a, 0xa0, 0x70, 0x01, 0x14, 0x40, 0x0a, - 0xb1, 0x1f, 0x74, 0x12, 0x00, 0x00, 0x00, 0x1c, 0x63, 0xde, 0x30, 0xe9, 0x30, 0xe0, 0x02, 0x30, 0xec, 0x30, 0xb7, 0x30, 0xe5, 0x06, 0x48, 0x1b, - 0x4d, 0xa2, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x6d, 0x00, 0x75, 0x20, 0x07, 0x65, 0xc8, 0x2c, 0x3b, 0x06, 0xd0, 0x7f, 0x5f, 0x01, 0x10, 0x0d, 0xd0, - 0x7f, 0x6c, 0x9a, 0xc9, 0x01, 0x62, 0x46, 0x7a, 0x17, 0x52, 0xc0, 0x4e, 0x06, 0x58, 0x19, 0x00, 0xc8, 0xb9, 0x7c, 0xb7, 0x34, 0xbb, 0x08, 0xb8, - 0x38, 0x88, 0xc2, 0x06, 0x58, 0x1b, 0x07, 0xf2, 0xff, 0x05, 0xf3, 0xff, 0x1c, 0x04, 0x30, 0x22, 0x04, 0x40, 0x20, 0x03, 0x3c, 0x04, 0x43, 0x20, - 0x07, 0x35, 0x39, 0x04, 0x48, 0x05, 0xe8, 0x1f, 0x07, 0xf4, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x1b, 0x1b, 0x70, 0x01, 0x40, 0x1a, 0x40, 0x0a, 0xe2, - 0x21, 0xc5, 0x10, 0x00, 0x00, 0x00, 0x1d, 0x63, 0xe1, 0x30, 0xd8, 0x30, 0xc7, 0x30, 0x06, 0xa3, 0x30, 0xf3, 0x30, 0xc4, 0x20, 0x05, 0x06, 0x18, - 0x19, 0x4d, 0xa0, 0x28, 0x0b, 0x68, 0x28, 0x0f, 0x64, 0x00, 0x69, 0x00, 0x6e, 0x30, 0x00, 0x74, 0x20, 0x05, 0x10, 0x15, 0xd0, 0x7f, 0x85, 0x68, - 0x6b, 0x8d, 0x08, 0x01, 0x4e, 0x28, 0x83, 0x06, 0x58, 0x15, 0x00, 0x00, 0x54, 0x01, 0xba, 0xe4, 0xd5, 0x18, 0xb5, 0x58, 0xce, 0x06, 0x58, 0x15, - 0xa8, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x0b, 0x45, 0x28, 0x0f, 0x34, 0x04, 0x38, 0x0c, 0x04, 0x3d, 0x04, 0x46, 0x20, 0x05, 0x10, 0x1d, 0xd4, 0xff, - 0x1c, 0x1c, 0xa2, 0x70, 0x01, 0x1b, 0x40, 0x0a, 0xbd, 0x1f, 0x1b, 0x28, 0x17, 0x1e, 0x00, 0x63, 0xe0, 0x30, 0xec, 0x30, 0xb7, 0x30, 0xe5, 0xfc, - 0x06, 0x28, 0x11, 0x7f, 0xaf, 0x06, 0x5c, 0x27, 0xf0, 0x7f, 0x05, 0xff, 0xa7, 0x10, 0x07, 0x70, 0x7f, 0x46, 0x7a, 0x08, 0x17, 0x52, 0xc0, 0x4e, - 0x06, 0x78, 0x15, 0x00, 0x00, 0x34, 0x07, 0xbb, 0x08, 0xb8, 0x88, 0xc2, 0x06, 0x78, 0x15, 0x07, 0x92, 0xff, 0x06, 0x73, 0xff, 0x05, 0x1c, 0x04, - 0x43, 0x04, 0x40, 0x28, 0x1b, 0x48, 0x05, 0xe8, 0x0f, 0xca, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x1d, 0x1d, 0x70, 0x01, 0x1c, 0x40, 0x0a, - 0x18, 0x00, 0x21, 0x75, 0x11, 0x00, 0x00, 0x1f, 0x63, 0xcd, 0x02, 0x30, 0xa2, 0x30, 0xe0, 0x30, 0xc4, 0x06, 0x88, 0x17, 0x4e, 0x8c, 0x2f, 0xaf, - 0x61, 0x00, 0x6d, 0x2f, 0xa9, 0x10, 0x16, 0x50, 0x7f, 0x3c, 0x5c, 0x02, 0x9a, 0x4e, 0xc6, 0x59, 0x28, 0x83, 0x06, 0x78, 0x19, 0x24, 0x06, 0xb1, - 0x54, 0xc5, 0x20, 0xce, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x03, 0x04, 0x4f, 0x04, 0x3c, 0x04, 0x46, 0x06, 0x68, 0x15, 0x10, 0x17, 0x14, - 0xff, 0x28, 0x1e, 0x1e, 0x70, 0x01, 0x1d, 0x40, 0x0a, 0x5f, 0x21, 0xbf, 0x00, 0x12, 0x00, 0x00, 0x20, 0x63, 0xaa, 0x30, 0xeb, 0x20, 0x30, 0xc8, - 0x06, 0x88, 0x15, 0x00, 0x00, 0x4f, 0x00, 0x6c, 0xc0, 0x06, 0x88, 0x13, 0x10, 0x0f, 0x30, 0x7f, 0x65, 0x59, 0x14, 0x5c, 0x79, 0x72, 0x81, 0x06, - 0x78, 0x15, 0x00, 0x00, 0x2c, 0xc6, 0xb8, 0xd2, 0x06, 0x98, 0x15, 0x83, 0x0f, 0x13, 0x7f, 0x1e, 0x04, 0x3b, 0x04, 0x42, 0x06, 0x88, 0x15, 0x10, - 0x17, 0x14, 0xff, 0x28, 0x1f, 0x1f, 0x70, 0x01, 0x1e, 0x40, 0x0a, 0x98, 0x1f, 0x50, 0x00, 0x11, 0x00, 0x00, 0x21, 0x63, 0xd7, 0x30, 0xe9, 0x02, - 0x30, 0xdb, 0x30, 0xf4, 0x30, 0xa1, 0x06, 0x68, 0x1b, 0x50, 0x20, 0x00, 0x72, 0x2f, 0xaf, 0x68, 0x00, 0x6f, 0x00, 0x76, 0xc0, 0x2f, 0xb7, 0x10, - 0x16, 0x10, 0x7f, 0x6e, 0x66, 0xc9, 0x62, 0x0d, 0x97, 0x20, 0xe6, 0x74, 0x06, 0x78, 0x19, 0x04, 0xd5, 0x7c, 0xb7, 0x38, 0x18, 0xd6, 0x14, 0xbc, - 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x40, 0x00, 0x04, 0x30, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x32, 0xca, 0x20, 0x07, 0x10, 0x1e, 0x14, - 0xff, 0x20, 0x20, 0x70, 0x01, 0x1f, 0x40, 0x0a, 0xf3, 0x00, 0x1f, 0x80, 0x12, 0x00, 0x00, 0x22, 0x63, 0xb5, 0x82, 0x28, 0x17, 0xfc, 0x30, 0xb8, - 0x30, 0xe5, 0x06, 0x68, 0x17, 0x53, 0xa8, 0x28, 0x15, 0x6c, 0x28, 0x19, 0x6a, 0x06, 0x6f, 0xb3, 0x53, 0x00, 0x03, 0x40, 0x01, 0x10, 0x0e, 0xb0, - 0x7f, 0x5f, 0x74, 0xc9, 0x62, 0xe5, 0x65, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x24, 0xc1, 0x7c, 0xb7, 0xc0, 0x70, 0xc9, 0x06, 0x78, 0x15, 0x07, - 0x32, 0xff, 0x06, 0xd3, 0xff, 0x21, 0x04, 0x4d, 0x04, 0x5c, 0x3b, 0x28, 0x19, 0x36, 0x06, 0x28, 0x13, 0x07, 0x54, 0xff, 0x10, 0x0e, 0xd0, 0x7f, - 0x21, 0x21, 0xa0, 0x70, 0x01, 0x23, 0x40, 0x0a, 0x8d, 0x21, 0x65, 0x10, 0x00, 0x20, 0x00, 0x23, 0x28, 0x17, 0xc8, 0x30, 0xa5, 0x30, 0xfb, 0x2c, - 0x30, 0xde, 0x28, 0x1d, 0xec, 0x06, 0x28, 0x1b, 0x38, 0x17, 0x74, 0x00, 0x04, 0x75, 0x00, 0x20, 0x00, 0x4d, 0x2f, 0xb7, 0x72, 0x00, 0x40, 0x65, - 0x10, 0x15, 0xe0, 0x7f, 0x28, 0x84, 0xfe, 0x56, 0x2d, 0x00, 0x08, 0x6c, 0x9a, 0xf7, 0x96, 0x06, 0x58, 0x1b, 0xac, 0xc0, 0x2c, 0x06, 0xd2, 0xc8, - 0xb9, 0x08, 0xb8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x80, 0x28, 0x13, 0x42, 0x04, 0x43, 0x04, 0x2d, 0x00, 0x1c, 0x8c, 0x28, 0x1d, 0x40, - 0x04, 0x35, 0x05, 0xe8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x22, 0x22, 0xa2, 0x70, 0x01, 0x20, 0x40, 0x0a, 0xfb, 0x21, 0x45, 0x28, 0x17, 0x24, 0x03, - 0x63, 0xb7, 0x30, 0xd3, 0x30, 0xa6, 0x06, 0x28, 0x0f, 0x9f, 0xaf, 0x14, 0x69, 0x00, 0x62, 0x20, 0x03, 0x75, 0x10, 0x16, 0x60, 0x7f, 0x21, 0x95, - 0x0c, 0xd4, 0x6b, 0x4c, 0x4e, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xdc, 0xc2, 0x0c, 0x44, 0xbe, 0xb0, 0xc6, 0x06, 0x78, 0x15, 0x0f, 0x21, 0xff, 0x04, - 0x38, 0x2c, 0x04, 0x31, 0x20, 0x03, 0x43, 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x23, 0x23, 0xa0, 0x70, 0x01, 0x21, 0x40, 0x0a, 0x8e, 0x20, - 0x2c, 0x11, 0x00, 0x00, 0x00, 0x25, 0x63, 0xb9, 0x30, 0xc1, 0x30, 0xe3, 0x0a, 0x30, 0xf4, 0x30, 0xa1, 0x06, 0x68, 0x1b, 0x53, 0x2f, 0xab, 0x63, - 0x8c, 0x2f, 0xa5, 0x61, 0x00, 0x76, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, 0xcf, 0x82, 0x08, 0x70, 0x60, 0xe6, 0x74, 0x06, 0x98, 0x17, 0x18, 0xc2, - 0xb4, 0x06, 0xcc, 0x44, 0xc5, 0x14, 0xbc, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x83, 0x28, 0x11, 0x47, 0x04, 0x30, 0x04, 0x32, 0x20, 0x03, - 0x10, 0x1e, 0x34, 0xff, 0x28, 0x24, 0x24, 0x70, 0x01, 0x22, 0x40, 0x0a, 0xe2, 0x21, 0xaa, 0x00, 0x12, 0x00, 0x00, 0x26, 0x63, 0xc6, 0x30, 0xec, - 0x00, 0x30, 0xaa, 0x30, 0xeb, 0x30, 0xde, 0x30, 0xf3, 0xa8, 0x06, 0x48, 0x19, 0x54, 0x28, 0x13, 0x6c, 0x28, 0x17, 0x6f, 0x00, 0x72, 0x28, 0x00, - 0x6d, 0x28, 0x1d, 0x6e, 0x10, 0x15, 0xe0, 0x7f, 0x79, 0x72, 0x17, 0x01, 0x52, 0x65, 0x59, 0x14, 0x5c, 0xfc, 0x66, 0x06, 0x58, 0x1b, 0x00, 0x54, - 0xd1, 0x08, 0xb8, 0x24, 0xc6, 0x74, 0xb9, 0x30, 0xcc, 0xb9, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0x04, 0x35, 0x04, 0x41, 0x3b, 0x20, 0x03, - 0x3e, 0x04, 0x40, 0x04, 0x3c, 0x28, 0x1f, 0x65, 0x3d, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x25, 0x25, 0x70, 0x01, 0x24, 0x40, 0x0a, 0x14, - 0x43, 0x1f, 0x03, 0x28, 0x17, 0x27, 0x28, 0x17, 0xa3, 0x30, 0x06, 0xdf, 0x30, 0xb7, 0x30, 0xe5, 0x06, 0x48, 0x15, 0x38, 0x17, 0x69, 0x8c, 0x28, - 0x0f, 0x69, 0x00, 0x73, 0x06, 0x6d, 0xb0, 0x70, 0x7f, 0x5f, 0x01, 0x81, 0x10, 0x0e, 0x50, 0x7f, 0x82, 0x84, 0x73, 0x7c, 0xc0, 0x4e, 0x06, 0x58, - 0x13, 0x81, 0x3f, 0xff, 0xf0, 0xd2, 0xf8, 0xbb, 0x88, 0xc2, 0x06, 0x58, 0x13, 0xc4, 0x07, 0xb2, 0xff, 0x06, 0x73, 0xff, 0x22, 0x04, 0x38, 0x28, - 0x0f, 0x38, 0x04, 0x72, 0x48, 0x05, 0xe8, 0x0f, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x26, 0x26, 0x70, 0x01, 0x25, 0x80, 0x40, 0x0a, 0x89, - 0x20, 0x17, 0x0f, 0x00, 0x00, 0x28, 0x00, 0x63, 0xc8, 0x30, 0xa5, 0x30, 0xeb, 0x30, 0xc1, 0x2a, 0x30, 0xe3, 0x06, 0x88, 0x17, 0x75, 0x2f, 0xaf, - 0x63, 0x2f, 0xb5, 0x61, 0xc0, 0x06, 0x68, 0x17, 0x10, 0x0e, 0xd0, 0x7f, 0xfe, 0x56, 0x14, 0x5c, 0x70, 0x60, 0x81, 0x06, 0x98, 0x17, 0x34, 0xd2, - 0xb4, 0xcc, 0x44, 0xc5, 0x06, 0xb8, 0x17, 0x80, 0x0e, 0xd3, 0x7f, 0x22, 0x04, 0x43, 0x04, 0x3b, 0x04, 0x47, 0x32, 0x04, 0x30, 0x06, 0x88, 0x17, - 0x10, 0x16, 0xd4, 0xff, 0x27, 0x27, 0x70, 0x01, 0x26, 0x80, 0x40, 0x0a, 0x1e, 0x20, 0x7a, 0x14, 0x00, 0x00, 0x29, 0x20, 0x63, 0xf4, 0x06, 0xc8, - 0x15, 0x00, 0x00, 0x56, 0x00, 0xe2, 0xc9, 0x06, 0xc8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x83, 0x6c, 0x06, 0xd8, 0x17, 0x14, 0xbe, 0x06, 0xd8, 0x17, - 0x8c, 0x0e, 0xf3, 0x7f, 0x12, 0x04, 0x4b, 0x06, 0xc8, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x28, 0xa0, 0x70, 0x01, 0x0e, 0x40, 0x0a, 0x13, 0x20, - 0x55, 0x11, 0x00, 0x22, 0x00, 0x2a, 0x28, 0x17, 0xa1, 0x30, 0xb9, 0x28, 0x1b, 0xa4, 0xa8, 0x06, 0x68, 0x19, 0x56, 0x2f, 0xa7, 0x73, 0x2f, 0xb1, - 0x75, 0x00, 0x69, 0xc0, 0x06, 0x68, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0xe6, 0x74, 0xaf, 0x65, 0x62, 0x53, 0x20, 0x0a, 0x4f, 0x06, 0x78, 0x19, 0x14, - 0xbc, 0xac, 0xc2, 0xe8, 0x1a, 0xb8, 0x74, 0xc7, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x11, 0x41, 0x8c, 0x28, 0x19, 0x43, 0x04, 0x39, - 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x29, 0x29, 0xa0, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x2a, 0x21, 0xb6, 0x13, 0x00, 0x00, 0x00, 0x2b, 0x63, - 0xd5, 0x30, 0xe9, 0x30, 0xf3, 0x02, 0x30, 0xc1, 0x30, 0xa7, 0x30, 0xa2, 0x06, 0x48, 0x19, 0x56, 0x2c, 0x00, 0x72, 0x2f, 0xa9, 0x6e, 0x06, 0x8f, - 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x17, 0x5f, 0x08, 0x17, 0x67, 0x70, 0x60, 0x06, 0x78, 0x15, 0x00, 0x00, 0x0c, 0x01, 0xbe, 0x80, 0xb7, 0xb4, 0xcc, - 0x44, 0xc5, 0x06, 0x98, 0x17, 0x88, 0x0e, 0xd3, 0x7f, 0x12, 0x04, 0x40, 0x28, 0x19, 0x3d, 0x04, 0x47, 0xe5, 0x28, 0x1f, 0x10, 0x06, 0x31, 0x7f, - 0x10, 0x06, 0xf5, 0xff, 0x2a, 0x2a, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x18, 0x7f, 0x20, 0x54, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x0a, 0x0a, 0x82, - 0x20, 0x01, 0x01, 0x01, 0x07, 0x0a, 0x0b, 0x20, 0x05, 0x01, 0x24, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x12, 0x02, 0x02, - 0x03, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x03, 0x09, 0x03, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x05, 0x30, 0x04, 0x04, 0x05, 0x82, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x51, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, - 0x06, 0x07, 0x30, 0x04, 0x28, 0x06, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x07, 0x08, 0x8c, 0x30, 0x04, 0x07, 0x08, 0x08, 0x30, 0x07, 0x20, - 0x05, 0x08, 0x09, 0x86, 0x30, 0x04, 0x08, 0x09, 0x09, 0x09, 0x20, 0x09, 0x20, 0x05, 0x09, 0x5c, 0x0a, 0x30, 0x04, 0x09, 0x20, 0x94, 0x20, 0x10, - 0x30, 0x9a, 0x0b, 0x0b, 0xca, 0x70, 0x01, 0x50, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x19, 0x40, 0x0a, 0x0d, 0x52, 0x0d, 0x70, 0x01, 0x15, 0x40, 0x0a, - 0x0e, 0x0e, 0x70, 0x01, 0x16, 0x94, 0x40, 0x0a, 0x0f, 0x0f, 0x70, 0x01, 0x18, 0x40, 0x0a, 0x10, 0x10, 0xa5, 0x70, 0x01, 0x17, 0x40, 0x0a, 0x11, - 0x11, 0x70, 0x01, 0x13, 0x40, 0x0a, 0x25, 0x12, 0x12, 0xd0, 0x01, 0x13, 0x13, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x29, 0x14, 0x14, 0x70, 0x01, 0x11, - 0x40, 0x0a, 0x15, 0x15, 0x70, 0x01, 0x4a, 0x10, 0x40, 0x0a, 0x16, 0x16, 0x70, 0x01, 0x27, 0x40, 0x0a, 0x17, 0x52, 0x17, 0x70, 0x01, 0x28, 0x40, - 0x0a, 0x18, 0x18, 0x70, 0x01, 0x29, 0x94, 0x40, 0x0a, 0x19, 0x19, 0x70, 0x01, 0x2a, 0x40, 0x0a, 0x1a, 0x1a, 0xa6, 0x70, 0x01, 0x14, 0x40, 0x0a, - 0x1b, 0x1b, 0x70, 0x01, 0x50, 0x0a, 0x1c, 0x66, 0x1c, 0x70, 0x01, 0x50, 0x0a, 0x1d, 0x1d, 0x70, 0x01, 0x50, 0x0a, 0x1e, 0x66, 0x1e, 0x70, 0x01, - 0x50, 0x0a, 0x1f, 0x1f, 0x70, 0x01, 0x50, 0x0a, 0x20, 0x65, 0x20, 0x70, 0x01, 0x50, 0x0a, 0x21, 0x21, 0x70, 0x01, 0x23, 0x40, 0x0a, 0x29, 0x22, - 0x22, 0x70, 0x01, 0x20, 0x40, 0x0a, 0x23, 0x23, 0x70, 0x01, 0x4a, 0x21, 0x40, 0x0a, 0x24, 0x24, 0x70, 0x01, 0x22, 0x40, 0x0a, 0x25, 0x66, 0x25, - 0x70, 0x01, 0x50, 0x0a, 0x26, 0x26, 0x70, 0x01, 0x50, 0x0a, 0x27, 0x65, 0x27, 0x70, 0x01, 0x50, 0x0a, 0x28, 0x28, 0x70, 0x01, 0x0e, 0x40, 0x0a, - 0xe0, 0x00, 0x0a, 0xbf, 0xe2, 0xb7, 0x7f, 0xff, 0x11, 0x70, 0x3c, 0x02, 0x12, 0x43, 0x00, 0x00, 0x30, 0x01, 0x40, 0x0c, 0x50, 0x07, 0x00, 0x00, - 0xa2, 0x30, 0xeb, 0x30, 0xd0, 0x30, 0xcb, 0x30, 0x30, 0xa2, 0x30, 0x60, 0x10, 0x05, 0xe0, 0x06, 0x41, 0x00, 0x6c, 0x00, 0x01, 0x62, 0x00, 0x61, - 0x00, 0x6e, 0x00, 0x69, 0x20, 0x05, 0xac, 0x06, 0xd0, 0x7f, 0x65, 0x07, 0x00, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x31, 0xff, 0x3f, 0x96, 0x00, - 0x14, 0x5c, 0xf4, 0x5d, 0x3c, 0x5c, 0x9a, 0x4e, 0x80, 0x06, 0x52, 0xff, 0x4c, 0xc5, 0x14, 0xbc, 0xc8, 0xb2, 0x44, 0x6a, 0xc5, 0x06, 0x53, 0x7d, - 0xd3, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe2, 0x06, 0x83, 0xff, 0x10, 0x00, 0x04, 0x3b, 0x04, 0x31, 0x04, 0x30, 0x04, 0x3d, 0x06, 0x04, 0x38, 0x04, - 0x4f, 0x04, 0x0e, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x00, 0x29, 0x00, 0x01, 0x60, 0x06, 0x03, 0x01, 0x78, 0x00, 0x42, 0x09, 0x68, 0x3b, 0x00, - 0xaa, 0x30, 0xfc, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0x40, 0xea, 0x06, 0x68, 0x3d, 0x41, 0x00, 0x75, 0x00, 0x73, 0x00, 0x14, 0x74, 0x00, 0x72, 0x06, - 0x88, 0x3b, 0x75, 0x60, 0x7d, 0x63, 0x00, 0x55, 0x68, 0x06, 0x28, 0x3d, 0xd6, 0x40, 0xfd, 0x65, 0x20, 0xff, 0x72, 0x28, 0xbb, 0xe0, 0x50, 0x85, - 0x0d, 0xf1, 0x7f, 0x06, 0xb1, 0xff, 0x65, 0x59, 0x30, 0x57, 0x29, 0x40, 0x52, 0x06, 0x77, 0xb9, 0x00, 0x00, 0x24, 0xc6, 0xa4, 0xc2, 0x08, 0xb8, - 0xd2, 0xac, 0xb9, 0x06, 0x78, 0x3d, 0x4f, 0x00, 0x6f, 0xa2, 0x62, 0x81, 0x6e, 0x43, 0x83, 0x6a, 0x00, 0x6b, 0x05, 0xcc, 0x44, 0xc1, 0x80, 0x06, - 0xe3, 0xff, 0x10, 0x04, 0x32, 0x04, 0x41, 0x04, 0x42, 0x38, 0x04, 0x40, 0x06, 0x88, 0x3b, 0x0e, 0xd3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x03, - 0x05, 0x00, 0x2a, 0x03, 0x04, 0x01, 0x01, 0x2c, 0x05, 0x01, 0x0d, 0x03, 0x01, 0x01, 0x01, 0x68, 0x48, 0x00, 0xcf, 0xff, 0x43, 0x78, 0x65, 0x06, - 0xd9, 0x30, 0xeb, 0x30, 0xae, 0x28, 0x3f, 0x06, 0x7c, 0xf7, 0x42, 0x88, 0x2f, 0xed, 0x6c, 0x00, 0x67, 0x2f, 0xf5, 0x75, 0x00, 0x6d, 0xbe, 0x06, - 0xc0, 0x7f, 0x71, 0x28, 0xc5, 0x06, 0x18, 0x3b, 0x90, 0xff, 0x35, 0xbd, 0x06, 0xb1, 0x7f, 0x6f, 0xa8, 0x06, 0x61, 0xff, 0xe9, 0x61, 0xff, 0x63, - 0x06, 0x4e, 0x77, 0xd4, 0x6b, 0x29, 0x30, 0x52, 0xf6, 0x06, 0x1a, 0x32, 0x8f, 0xff, 0xa8, 0xbc, 0x30, 0xae, 0x68, 0xd0, 0x06, 0x68, 0x37, 0xd3, - 0x7f, 0xeb, 0x0e, 0x41, 0xff, 0x11, 0x04, 0x35, 0x03, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x33, 0x06, 0x68, 0x3b, 0x07, 0x94, 0xff, 0x80, 0x10, 0x0e, - 0x50, 0x7f, 0x02, 0x05, 0x07, 0x04, 0x05, 0x06, 0x02, 0x00, 0x02, 0x04, 0x07, 0x05, 0x05, 0x02, 0x02, 0x02, 0x50, 0x02, 0x01, 0x2f, 0xff, 0x44, - 0x78, 0x3b, 0xdc, 0x30, 0xb9, 0x30, 0x01, 0xcb, 0x30, 0xa2, 0x30, 0xfb, 0x30, 0xd8, 0x28, 0x45, 0x00, 0xc4, 0x30, 0xa7, 0x30, 0xb4, 0x30, 0xd3, - 0x30, 0x55, 0xca, 0x05, 0x88, 0x4b, 0x42, 0x4c, 0xf7, 0x6e, 0x4e, 0xf5, 0x20, 0x2e, 0xf9, 0x15, 0x6e, 0x00, 0x64, 0x20, 0x07, 0x48, 0x4f, 0x89, - 0x7a, 0x2f, 0x8f, 0x56, 0x67, 0x2d, 0x17, 0x76, 0x2f, 0x8f, 0x6e, 0x04, 0x6f, 0x15, 0x90, 0x7f, 0x65, 0x2e, 0x00, 0x2d, 0x80, 0x77, 0xe9, 0xa0, - 0x77, 0x04, 0xd8, 0x4f, 0xb0, 0x7f, 0x6e, 0xd8, 0xa0, 0x81, 0x50, 0xf9, 0x77, 0x04, 0xa0, 0xf9, 0x00, 0x11, 0x7f, 0x2d, 0x00, 0x45, 0xf0, 0x05, - 0x61, 0x75, 0x00, 0x70, 0x7f, 0x05, 0x91, 0xf7, 0x7f, 0xff, 0xe2, 0x6c, 0xaf, 0x65, 0x00, 0x3c, 0x5c, 0x9a, 0x4e, 0x8c, 0x54, 0xd1, 0x9e, 0x00, - 0x5e, 0x58, 0xe5, 0x54, 0xf4, 0x7e, 0xa3, 0x90, 0x80, 0x05, 0xbf, 0xff, 0xf4, 0xbc, 0xa4, 0xc2, 0xc8, 0xb2, 0x44, 0x00, 0xc5, 0xe4, 0xd5, 0x74, - 0xb9, 0xb4, 0xcc, 0xe0, 0x06, 0xac, 0x44, 0xbe, 0x98, 0xb0, 0x05, 0xdb, 0xbb, 0x73, 0x7f, 0xeb, 0xf4, 0x23, 0x7f, 0x3a, 0xbf, 0x05, 0xb3, 0x7d, - 0x3c, 0x3b, 0xf3, 0x06, 0xc1, 0xff, 0x11, 0x04, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x3d, 0x48, 0x39, 0x20, 0x00, 0x51, 0x38, 0x20, 0x03, 0x13, 0x28, - 0x4d, 0x40, 0x04, 0x46, 0x28, 0x53, 0x51, 0x33, 0x20, 0x1b, 0x32, 0x28, 0x53, 0x3d, 0x04, 0x30, 0x04, 0x88, 0x55, 0xc0, 0x07, 0x94, 0xff, 0x10, - 0x0e, 0x50, 0x7f, 0x03, 0x06, 0x08, 0x05, 0x06, 0x07, 0x00, 0x03, 0x03, 0x05, 0x08, 0x07, 0x06, 0x03, 0x03, 0x64, 0x03, 0x78, 0x16, 0x00, 0xbf, - 0xff, 0x45, 0x01, 0x88, 0x3b, 0xc4, 0x30, 0x6b, 0xef, 0x05, 0xa8, 0x2b, 0x00, 0x38, 0x3b, 0x74, 0x28, 0x3d, 0x77, 0x48, 0x37, 0x06, 0x1e, 0x79, - 0xa0, 0x07, 0x70, 0x7f, 0x75, 0x10, 0x06, 0x60, 0xff, 0x5a, 0x53, 0x28, 0x83, 0xe6, 0x10, 0x74, 0xb3, 0x7e, 0x06, 0x7f, 0xf9, 0xf4, 0xbc, 0x20, - 0xce, 0x3a, 0x40, 0xc6, 0x05, 0xd8, 0x2f, 0x0f, 0xb2, 0xff, 0x38, 0x3b, 0x42, 0x28, 0x3d, 0x32, 0xf0, 0x28, 0x1f, 0x04, 0xb8, 0x23, 0x10, 0x00, - 0xf4, 0xff, 0x10, 0x06, 0x70, 0xff, 0x04, 0x07, 0x09, 0x06, 0x00, 0x07, 0x08, 0x04, 0x04, 0x06, 0x09, 0x08, 0x07, 0x12, 0x04, 0x04, 0x04, 0x01, - 0x3b, 0x23, 0x46, 0x1c, 0x6f, 0xff, 0xd6, 0x00, 0x30, 0xeb, 0x30, 0xac, 0x30, 0xea, 0x30, 0xa2, 0xab, 0x06, 0x68, 0x3d, 0x42, 0x27, 0x35, 0x6c, - 0x2f, 0xe5, 0x61, 0x2f, 0xef, 0x3e, 0xfb, 0xac, 0x06, 0xd0, 0x7f, 0x65, 0x07, 0x00, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x1a, 0x3b, 0xdd, 0x4f, - 0x02, 0xa0, 0x52, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x7b, 0x3b, 0x88, 0x01, 0xbd, 0x00, 0xac, 0xac, 0xb9, 0x44, 0xc5, 0x06, 0x9b, 0xbb, 0xb6, 0xb3, - 0x7f, 0x6a, 0x06, 0x03, 0x01, 0x73, 0xff, 0xe1, 0x06, 0x63, 0xff, 0x38, 0x3b, 0x3b, 0x20, 0x04, 0x33, 0x28, 0x39, 0x40, 0x04, 0x38, 0x04, 0x4f, - 0xe0, 0x06, 0x28, 0x3b, 0x0e, 0xd3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x05, 0x08, 0x0a, 0x07, 0x08, 0x00, 0x09, 0x05, 0x05, 0x07, 0x0a, 0x06, 0x08, - 0x05, 0x12, 0x05, 0x05, 0x05, 0x01, 0x2f, 0xff, 0x47, 0x15, 0x6f, 0xff, 0xaf, 0x2a, 0x30, 0xed, 0x28, 0x37, 0xc1, 0x06, 0x88, 0x3b, 0x43, 0x28, - 0x33, 0x6f, 0xb8, 0x2f, 0xf3, 0x74, 0x06, 0x48, 0x39, 0xd0, 0x7f, 0x06, 0x18, 0x39, 0x00, 0x00, 0x4b, 0xea, 0xc0, 0x7f, 0x05, 0xf8, 0x39, 0x91, - 0x7f, 0x7a, 0x06, 0xe1, 0x7f, 0x63, 0x06, 0x61, 0xff, 0x4b, 0x04, 0x51, 0x57, 0x7f, 0x30, 0x57, 0x06, 0x98, 0x3b, 0x6c, 0xd0, 0x03, 0x5c, 0xb8, - 0x44, 0xc5, 0xf0, 0xd2, 0x06, 0x78, 0x3d, 0xb2, 0x7f, 0x54, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x06, 0x81, 0xff, 0x25, 0x28, 0x3b, 0x40, 0x04, 0x5c, - 0x32, 0x28, 0x3b, 0x42, 0x06, 0x48, 0x3b, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x06, 0x0a, 0x00, 0x0c, 0x18, 0x0b, 0x0c, 0x06, 0x06, 0x19, - 0x0d, 0x02, 0x3a, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x01, 0x2f, 0xff, 0x48, 0x45, 0x01, 0x6f, 0xff, 0xad, 0x30, 0xd7, 0x28, 0x3d, 0xb9, 0x06, 0x68, - 0x39, 0x88, 0x38, 0x3b, 0x79, 0x00, 0x70, 0x2f, 0xf3, 0x75, 0x00, 0x73, 0xb1, 0x06, 0x68, 0xbb, 0x68, 0x60, 0x81, 0x06, 0x38, 0x39, 0x00, 0x00, - 0x5a, 0x40, 0xff, 0x75, 0x65, 0x2f, 0xf5, 0x06, 0x18, 0x37, 0x59, 0xbb, 0x69, 0x41, 0x7f, 0x6f, 0x06, 0x81, 0xff, 0x60, 0x68, 0x60, 0x81, 0x06, - 0x51, 0x7f, 0x5e, 0x58, 0x66, 0x6d, 0xef, 0x30, 0x8d, 0xaf, 0x06, 0x51, 0xfc, 0x2f, 0xff, 0xa4, 0xd0, 0x04, 0xd5, 0x0d, 0x5c, 0xb8, 0xa4, 0xc2, - 0x0e, 0xb3, 0x7f, 0x06, 0xb1, 0xff, 0x1a, 0x28, 0x31, 0x70, 0x3f, 0x28, 0x3d, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x07, 0x0b, 0x0b, 0x42, - 0x01, 0x0a, 0x0b, 0x07, 0x07, 0x08, 0x0c, 0x1a, 0x20, 0x05, 0x24, 0x07, 0x07, 0x01, 0x2f, 0xff, 0x49, 0x0e, 0x6f, 0xff, 0xc1, 0x30, 0x1a, 0xa7, - 0x30, 0xb3, 0x06, 0x88, 0x39, 0x3f, 0xf7, 0x7a, 0x2f, 0xef, 0x63, 0x8a, 0x27, 0xc1, 0x20, 0x00, 0x52, 0x2f, 0xf9, 0x70, 0x28, 0x45, 0x62, 0x28, - 0x00, 0x6c, 0x2f, 0x85, 0x63, 0x05, 0x4f, 0xff, 0x52, 0x00, 0xe9, 0xaa, 0xa0, 0x73, 0x71, 0x28, 0xc3, 0x65, 0x20, 0x89, 0x74, 0x40, 0x91, 0xe8, - 0xdd, 0x60, 0x0f, 0x04, 0xbf, 0xff, 0x54, 0x29, 0x33, 0x30, 0xfd, 0x51, 0x03, 0x69, 0x80, 0x0d, 0xba, 0xf1, 0x0d, 0x6b, 0x04, 0x80, 0xff, 0x71, - 0x73, 0x71, 0x75, 0x61, 0x21, 0x89, 0x43, 0xee, 0x41, 0x93, 0x05, 0x3e, 0x07, 0x51, 0xf3, 0xfa, 0xe0, 0x7d, 0x51, 0x0f, 0x05, 0x3e, 0x87, 0x77, - 0x00, 0x63, 0x4b, 0x51, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x43, 0x56, 0x06, 0x5f, 0xf7, 0xb4, 0xcc, 0x54, 0xcf, 0x06, 0x93, 0x7d, 0x52, 0x7f, 0x58, - 0x6a, 0x82, 0x7d, 0xeb, 0x06, 0x0f, 0xf9, 0x06, 0xf1, 0xff, 0x27, 0x04, 0x35, 0x00, 0x04, 0x48, 0x04, 0x41, 0x04, 0x3a, 0x04, 0x30, 0x02, 0x04, - 0x4f, 0x04, 0x20, 0x00, 0x20, 0x20, 0x0f, 0x41, 0x83, 0x28, 0x4d, 0x43, 0x04, 0x31, 0x04, 0x3b, 0x28, 0x57, 0x30, 0x17, 0xc0, 0x0c, 0xb4, 0xff, - 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x0c, 0x31, 0x3d, 0x30, 0x33, 0x00, 0x08, 0x08, 0x3a, 0x35, 0x3d, 0x0c, 0x08, 0x08, 0x28, 0x08, 0x08, 0x01, 0x2f, - 0xff, 0x4a, 0x78, 0x60, 0xc7, 0x30, 0xf3, 0x02, 0x30, 0xde, 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x68, 0x3f, 0x44, 0x8a, 0x2f, 0xef, 0x6e, 0x00, 0x6d, - 0x26, 0xb1, 0x72, 0x27, 0x1f, 0x20, 0x08, 0x00, 0x28, 0x00, 0x4b, 0x2f, 0x09, 0x6e, 0x00, 0x67, 0x28, 0x00, 0x64, 0x2f, 0x0b, 0x6d, 0x28, 0x51, - 0x6f, 0x00, 0x66, 0x2a, 0x00, 0x29, 0x04, 0xa0, 0x7f, 0x61, 0x2f, 0xf1, 0x65, 0xc0, 0x81, 0x52, 0xab, 0x2f, 0x85, 0x79, 0x27, 0x43, 0x75, 0x20, - 0x97, 0x65, 0x04, 0xa0, 0x7b, 0x50, 0xff, 0x45, 0xe4, 0x00, 0x00, 0x7f, 0x4b, 0x00, 0xf6, 0x21, 0x13, 0x69, 0x21, 0x03, 0xdb, 0x3f, 0x8d, 0x39, - 0x45, 0x68, 0x04, 0x81, 0x01, 0x50, 0xff, 0x69, 0x61, 0x81, 0x58, 0x39, 0xaa, 0x31, 0x01, 0x65, 0x21, 0x81, 0x6e, 0x21, 0x81, 0x20, 0x21, 0x87, - 0x69, 0xda, 0x04, 0xc1, 0x7f, 0x31, 0xed, 0x61, 0x00, 0x20, 0x7f, 0x32, 0x05, 0x6f, 0x04, 0xe1, 0x7d, 0x00, 0x04, 0x00, 0x39, 0x4e, 0xa6, 0x9e, - 0x06, 0xb7, 0xbb, 0x74, 0xb3, 0x0f, 0xc8, 0xb9, 0x6c, 0xd0, 0x06, 0x9b, 0xbb, 0x53, 0x7f, 0x92, 0xff, 0x33, 0x8d, 0xb5, 0x33, 0x85, 0x6b, 0x23, - 0x7d, 0x32, 0x83, 0x6e, 0x2a, 0xb5, 0x72, 0x2b, 0xc9, 0x75, 0x6a, 0x2a, 0xbd, 0x04, 0x33, 0x85, 0x06, 0xf1, 0xff, 0x14, 0x28, 0x33, 0x3d, 0x28, - 0x23, 0x80, 0x38, 0x37, 0x28, 0x00, 0x1a, 0x04, 0x3e, 0x04, 0x40, 0xaa, 0x20, 0x03, 0x3b, 0x28, 0x51, 0x32, 0x28, 0x51, 0x42, 0x20, 0x05, 0x3e, - 0x70, 0x04, 0x04, 0xb4, 0x01, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x09, 0x0d, 0x0d, 0x08, 0x01, 0x0c, 0x0d, 0x09, 0x09, 0x09, 0x0e, 0x10, - 0x30, 0x05, 0x48, 0x09, 0x01, 0x2f, 0xff, 0x4b, 0x01, 0x6f, 0xff, 0xa8, 0x30, 0xb9, 0x02, 0x30, 0xc8, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x68, 0x3b, - 0x45, 0xba, 0x2f, 0x77, 0x74, 0x64, 0xa7, 0x05, 0x3e, 0xe7, 0x00, 0xb0, 0x7f, 0x65, 0x06, 0x80, 0xff, 0x6c, 0xb0, 0x48, 0xc1, 0x64, 0x0e, 0xe1, - 0x7f, 0x06, 0x31, 0xff, 0x31, 0x72, 0x99, 0x6c, 0x08, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x7f, 0xfb, 0xd0, 0xc5, 0xa4, 0x01, 0xc2, 0xa0, 0xd1, 0xc8, - 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0xab, 0x06, 0xf2, 0x7f, 0xf3, 0x06, 0x83, 0xff, 0x2d, 0x48, 0x21, 0x3e, 0x68, 0x3f, 0x10, 0x06, 0x13, 0x7f, - 0x80, 0x10, 0x06, 0xf0, 0xff, 0x0a, 0x10, 0x11, 0x0c, 0x0e, 0x12, 0x0a, 0x00, 0x0a, 0x0d, 0x14, 0x41, 0x10, 0x0a, 0x0a, 0x0a, 0x48, 0x0a, 0x01, - 0x2f, 0xff, 0x4c, 0x14, 0x6f, 0xff, 0xd5, 0x30, 0xa3, 0x0a, 0x30, 0xf3, 0x30, 0xe9, 0x20, 0x03, 0xc9, 0x06, 0x48, 0x3d, 0x46, 0xff, 0x4e, 0x77, - 0x06, 0x97, 0x3b, 0xd0, 0x7f, 0x06, 0x18, 0x3d, 0x50, 0xff, 0x06, 0x91, 0x01, 0xd1, 0x7f, 0x06, 0x19, 0xbf, 0x84, 0x06, 0xf0, 0x7f, 0xac, 0x82, - 0x70, 0x51, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x03, 0x40, 0xd5, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x90, 0x81, 0x07, 0x73, 0x7f, 0x51, 0xe2, 0x06, 0x62, - 0x7f, 0x24, 0x28, 0x33, 0x3d, 0x04, 0x3b, 0x28, 0x37, 0x1c, 0x3d, 0x04, 0x34, 0x06, 0x28, 0x3f, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x0b, - 0x11, 0x00, 0x12, 0x0d, 0x0f, 0x13, 0x0b, 0x0b, 0x0e, 0x15, 0x02, 0x38, 0x11, 0x0b, 0x0b, 0x0b, 0x0b, 0x01, 0x2f, 0xff, 0x4d, 0x6d, 0x1a, 0x88, - 0x3b, 0x38, 0x37, 0xb9, 0x06, 0x48, 0x37, 0x58, 0x3b, 0x72, 0x4f, 0x73, 0x6a, 0x63, 0x06, 0x4f, 0xf5, 0x07, 0x90, 0x7f, 0x6b, 0x21, 0x07, 0x65, - 0x2f, 0xfb, 0x63, 0x38, 0x00, 0x68, 0x06, 0x61, 0x7f, 0x06, 0x5f, 0xf7, 0x06, 0xf0, 0x7f, 0xd5, 0x6c, 0xfd, 0x40, 0x56, 0x06, 0xb8, 0x3b, 0x04, - 0xd5, 0x91, 0xb7, 0xa4, 0xc2, 0xc6, 0x06, 0xb8, 0x3b, 0x92, 0x7f, 0x69, 0x00, 0x6a, 0x22, 0x87, 0x06, 0x53, 0xff, 0xe7, 0xc5, 0x06, 0x4f, 0x75, - 0x38, 0x3b, 0x40, 0x04, 0x30, 0x28, 0x3d, 0x46, 0x06, 0x28, 0x37, 0xc0, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x70, 0xff, 0x0c, 0x12, 0x13, 0x0e, 0x10, - 0x14, 0x00, 0x0c, 0x0c, 0x0f, 0x16, 0x39, 0x12, 0x0c, 0x0c, 0x24, 0x0c, 0x0c, 0x01, 0x2f, 0xff, 0x4e, 0x10, 0x6f, 0xff, 0xc9, 0x30, 0x11, 0xa4, - 0x30, 0xc4, 0x06, 0x88, 0x39, 0x00, 0x00, 0x47, 0x2f, 0xeb, 0x15, 0x72, 0x00, 0x6d, 0x4f, 0xf7, 0x79, 0x06, 0x2e, 0x00, 0x41, 0x2f, 0xf1, 0x6d, - 0x6c, 0x28, 0xb7, 0x30, 0x81, 0x67, 0x2f, 0xff, 0x05, 0xf8, 0xc1, 0x44, 0x29, 0x33, 0x07, 0x75, 0x00, 0x74, 0x00, 0x73, 0x48, 0x35, 0x06, 0x1d, - 0xff, 0xb1, 0x7f, 0xf2, 0x06, 0x38, 0x3d, 0x31, 0x7f, 0x51, 0x7d, 0x06, 0x50, 0x7f, 0xb7, 0x5f, 0x06, 0xd8, 0x3b, 0xc5, 0x15, 0xb3, 0x7c, 0xc7, - 0x06, 0xb8, 0xbb, 0x44, 0x22, 0x7d, 0x69, 0x42, 0x7f, 0xd1, 0x06, 0x5e, 0xfb, 0xb1, 0xff, 0x68, 0x06, 0x2a, 0xbd, 0x13, 0x04, 0x35, 0x28, 0x3d, - 0x78, 0x3c, 0x48, 0x3f, 0x06, 0x38, 0x3d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x13, 0x02, 0x00, 0x09, 0x11, 0x01, 0x0d, 0x0d, 0x0b, - 0x02, 0x0c, 0x05, 0x13, 0x0d, 0x0d, 0x0d, 0x0d, 0x01, 0x2f, 0xff, 0x4f, 0x70, 0x24, 0x01, 0xae, 0x30, 0xea, 0x30, 0xb7, 0x30, 0xe3, 0x06, 0x88, - 0x3d, 0x5b, 0x47, 0x4f, 0x6f, 0x65, 0x06, 0x8f, 0xf7, 0x30, 0x7f, 0xe8, 0x06, 0x8b, 0xf5, 0x50, 0xff, 0x57, 0x69, 0x40, 0xff, 0x68, 0x2c, 0x79, - 0x6e, 0x06, 0x08, 0x3d, 0x51, 0x7f, 0x06, 0x7f, 0xf5, 0x84, 0x07, 0x10, 0x7f, 0x0c, 0x5e, 0x4a, 0x81, 0x06, 0xb8, 0x3b, 0xf8, 0xad, 0x0d, 0xac, - 0xb9, 0xa4, 0xc2, 0x06, 0xbb, 0xbb, 0x52, 0x7f, 0x6b, 0x06, 0x42, 0x7d, 0xa8, 0x53, 0xff, 0xe9, 0x06, 0xa2, 0x7f, 0x13, 0x28, 0x39, 0x35, 0x04, - 0x46, 0xe0, 0x06, 0x48, 0x37, 0x07, 0x74, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x0e, 0x15, 0x15, 0x10, 0x14, 0x00, 0x16, 0x0e, 0x0e, 0x11, 0x18, 0x0f, - 0x15, 0x0e, 0x12, 0x0e, 0x0e, 0x0e, 0x01, 0x2f, 0xff, 0x50, 0x14, 0x6f, 0xff, 0xcf, 0x0a, 0x30, 0xf3, 0x30, 0xac, 0x28, 0x3f, 0xfc, 0x06, 0x68, - 0x3d, 0x48, 0xac, 0x2f, 0x75, 0x6e, 0x2f, 0xf1, 0x61, 0x2e, 0xfd, 0x06, 0x3b, 0x77, 0x48, 0x00, 0x75, 0x6f, 0x40, 0x7f, 0x57, 0xc1, 0x06, 0x1e, - 0x81, 0x55, 0x80, 0xfd, 0x6e, 0x06, 0x4e, 0xfe, 0xf8, 0x50, 0x7f, 0x38, 0xb7, 0x38, 0xc3, 0x06, 0x1f, 0xf7, 0x71, 0xff, 0x72, 0x00, 0xed, 0x81, - 0x06, 0x48, 0xbd, 0x08, 0x53, 0x59, 0x72, 0x29, 0x52, 0x06, 0x9f, 0xf9, 0x03, 0xdd, 0xd5, 0x00, 0xac, 0xac, 0xb9, 0x06, 0x98, 0xbd, 0x72, 0xff, - 0x8e, 0x33, 0x7f, 0x69, 0x00, 0x6a, 0x06, 0x0b, 0xc1, 0x91, 0xff, 0x06, 0x5a, 0xbd, 0x12, 0x8f, 0x28, 0x39, 0x3d, 0x04, 0x33, 0x28, 0x41, 0x06, - 0x58, 0x3d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x0f, 0x17, 0x17, 0x3f, 0x3f, 0x18, 0x0f, 0x0f, 0x00, 0x13, 0x1a, 0x0b, 0x17, 0x0f, - 0x0f, 0x0f, 0x0f, 0x90, 0x01, 0x2f, 0xff, 0x51, 0x01, 0x6f, 0xff, 0xa2, 0x30, 0xa4, 0x30, 0x15, 0xb9, 0x30, 0xe9, 0x28, 0x41, 0xc9, 0x06, 0x48, - 0x3d, 0x49, 0x4f, 0xf3, 0xdf, 0x06, 0x1c, 0xef, 0x90, 0x7f, 0x73, 0x8f, 0xeb, 0x06, 0x3b, 0xf9, 0xb0, 0x7f, 0x06, 0x51, 0x7f, 0x90, 0xff, 0xe1, - 0x06, 0x3f, 0xf9, 0xb1, 0x7f, 0x06, 0x3e, 0x7b, 0xb0, 0x51, 0x9b, 0x5c, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x00, 0x44, 0xc5, 0x74, 0xc7, 0xac, 0xc2, - 0x08, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x5b, 0xbb, 0x49, 0x00, 0x4a, 0xd0, 0x06, 0xc2, 0x81, 0x53, 0x7f, 0xe2, 0x06, 0x81, 0xff, 0x18, 0x04, 0x41, - 0x04, 0x17, 0x3b, 0x04, 0x30, 0x28, 0x3f, 0x34, 0x06, 0x48, 0x3d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x10, 0x18, 0x1b, 0x14, 0x18, - 0x1c, 0x10, 0x10, 0x00, 0x15, 0x1e, 0x17, 0x18, 0x10, 0x10, 0x10, 0x10, 0x95, 0x01, 0x2f, 0xff, 0x52, 0x1a, 0xa8, 0x3b, 0xeb, 0x06, 0xc8, 0x3b, - 0x72, 0x06, 0xe8, 0x3b, 0x7c, 0x72, 0x06, 0xe8, 0x3b, 0x90, 0x7f, 0x06, 0x71, 0x7f, 0x06, 0xd8, 0x3b, 0x06, 0xd0, 0x7f, 0x31, 0x72, 0x08, 0x14, - 0x5c, 0x70, 0x51, 0x06, 0xb8, 0x3b, 0x7c, 0xc7, 0x9c, 0xd8, 0x06, 0x88, 0x39, 0x3b, 0xbb, 0x65, 0x06, 0xc2, 0x81, 0x06, 0xf2, 0x7f, 0x18, 0x04, - 0x40, 0xe0, 0x06, 0xe8, 0x3b, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x11, 0x1a, 0x1a, 0x13, 0x17, 0x02, 0x1a, 0x11, 0x11, 0x14, 0x1d, 0x16, - 0x20, 0x05, 0x11, 0x48, 0x11, 0x01, 0x2f, 0xff, 0x53, 0x14, 0x6f, 0xff, 0xa4, 0x30, 0xbf, 0x0d, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x48, 0x37, 0x5f, - 0xf7, 0x74, 0x2f, 0xf5, 0x16, 0x6c, 0x00, 0x79, 0x06, 0xe0, 0x7f, 0x69, 0x06, 0x48, 0x39, 0xd0, 0x7f, 0x6e, 0xe0, 0x06, 0xc0, 0xff, 0x06, 0x38, - 0x39, 0x07, 0x10, 0x7f, 0x0f, 0x61, 0x27, 0x59, 0x29, 0x40, 0x52, 0x06, 0x98, 0x3b, 0x74, 0xc7, 0xc8, 0xd0, 0xac, 0xb9, 0x22, 0x44, 0xc5, 0x06, - 0xf3, 0x7f, 0x69, 0x00, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x8b, 0x06, 0xa2, 0x7f, 0x18, 0x04, 0x42, 0x28, 0x39, 0x3b, 0x06, 0x48, 0x37, 0x07, 0xb4, - 0xff, 0x80, 0x10, 0x0e, 0x70, 0x7f, 0x12, 0x1c, 0x1c, 0x16, 0x1a, 0x1d, 0x12, 0x00, 0x12, 0x17, 0x1f, 0x19, 0x1c, 0x12, 0x12, 0x12, 0x48, 0x12, - 0x01, 0x2f, 0xff, 0x54, 0x01, 0x6f, 0xff, 0xe9, 0x30, 0xc8, 0x28, 0x30, 0xd3, 0x06, 0xa8, 0x3b, 0x4c, 0x2f, 0xf3, 0x74, 0x00, 0x76, 0xab, 0x06, - 0x86, 0xbb, 0x4c, 0x2d, 0x77, 0x74, 0x28, 0xbf, 0x6f, 0x2f, 0xf9, 0x06, 0x38, 0x3f, 0xfc, 0x70, 0x7f, 0x06, 0x7d, 0xf9, 0xd0, 0xff, 0x06, 0x1f, - 0xf9, 0x51, 0x7f, 0x06, 0x70, 0x7d, 0x00, 0x00, 0x00, 0xc9, 0x62, 0x31, 0x81, 0xf4, 0x7e, 0x9a, 0x4e, 0x81, 0x06, 0x7f, 0xf7, 0x7c, 0xb7, 0xb8, - 0xd2, 0x44, 0xbe, 0x06, 0x98, 0x3b, 0xea, 0x52, 0xff, 0x06, 0x9e, 0xf7, 0x53, 0x7f, 0xf3, 0x06, 0x81, 0xff, 0x1b, 0x28, 0x39, 0x42, 0x38, 0x04, - 0x32, 0x06, 0x88, 0x3b, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x13, 0x1e, 0x1f, 0x00, 0x1a, 0x1d, 0x20, 0x13, 0x13, 0x1b, 0x22, 0x1b, 0x04, - 0x1e, 0x13, 0x13, 0x13, 0x13, 0x01, 0x2f, 0xff, 0x55, 0x0a, 0x8e, 0x6f, 0xff, 0xec, 0x30, 0xbd, 0x28, 0x3d, 0x06, 0x9d, 0x77, 0x37, 0xbb, 0x73, - 0x8e, 0x27, 0xb9, 0x74, 0x00, 0x68, 0x27, 0xbf, 0x10, 0x0e, 0xb0, 0x7f, 0x06, 0x31, 0xfd, 0x00, 0x01, 0x00, 0xb1, 0x83, 0x22, 0x7d, 0x58, 0x62, - 0x06, 0x92, 0xff, 0x03, 0x08, 0xb8, 0x8c, 0xc1, 0xa0, 0xd1, 0x0f, 0x33, 0x7f, 0x06, 0x51, 0xff, 0x01, 0x1b, 0x04, 0x35, 0x04, 0x41, 0x04, 0x3e, - 0x28, 0x3f, 0x70, 0x3e, 0x06, 0x68, 0x3b, 0x10, 0x0f, 0x74, 0xff, 0x06, 0x56, 0xff, 0x14, 0x1f, 0x1e, 0x19, 0x02, 0x1c, 0x1f, 0x14, 0x14, 0x1a, - 0x21, 0x30, 0x05, 0x14, 0x48, 0x14, 0x01, 0x2f, 0xff, 0x56, 0x01, 0x6f, 0xff, 0xea, 0x30, 0xd2, 0x00, 0x30, 0xc6, 0x30, 0xf3, 0x30, 0xb7, 0x30, - 0xe5, 0x0e, 0x30, 0xbf, 0x30, 0xa4, 0x20, 0x09, 0x05, 0xff, 0xf7, 0x3f, 0xed, 0x63, 0xad, 0x28, 0x39, 0x74, 0x2f, 0xf5, 0x6e, 0x28, 0x47, 0x30, - 0x07, 0x69, 0x2f, 0x83, 0x80, 0x10, 0x15, 0x50, 0x7f, 0x17, 0x52, 0x2f, 0x65, 0x66, 0x65, 0xeb, 0x10, 0x58, 0x7b, 0x76, 0x06, 0x5f, 0xf9, 0xac, - 0xb9, 0x88, 0xd7, 0x00, 0x50, 0xd1, 0x88, 0xc2, 0xc0, 0xd0, 0x78, 0xc7, 0xc1, 0x06, 0x5e, 0xf7, 0x0e, 0xd3, 0x7f, 0x1b, 0x04, 0x38, 0x04, 0x45, - 0x28, 0x39, 0x05, 0x35, 0x04, 0x3d, 0x04, 0x48, 0x40, 0x07, 0x39, 0x20, 0x09, 0x80, 0x10, 0x1d, 0x94, 0xff, 0x15, 0x20, 0x20, 0x1b, 0x1e, 0x21, - 0x15, 0x00, 0x15, 0x1c, 0x23, 0x1e, 0x20, 0x15, 0x15, 0x15, 0x48, 0x15, 0x01, 0x2f, 0xff, 0x57, 0x0a, 0x88, 0x3b, 0xc8, 0x30, 0xa2, 0x34, 0x30, - 0xcb, 0x20, 0x03, 0x06, 0x7c, 0xf7, 0x69, 0x4f, 0xf3, 0x75, 0x00, 0x5d, 0x61, 0x28, 0x39, 0x69, 0x20, 0x05, 0x06, 0x30, 0x7f, 0x70, 0x7d, 0x65, - 0x06, 0x60, 0xff, 0x7c, 0x61, 0x20, 0xff, 0x39, 0x39, 0x06, 0x71, 0x7f, 0x06, 0x71, 0x7d, 0x07, 0x10, 0x7f, 0xcb, 0x7a, 0x08, 0x76, 0x96, 0x9b, - 0x5b, 0x06, 0x9f, 0xf7, 0xac, 0xb9, 0x2c, 0x01, 0xd2, 0x44, 0xc5, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x5b, 0x6f, 0x23, 0x7f, 0x77, 0x06, - 0x42, 0x81, 0x73, 0x7f, 0xe2, 0x06, 0x62, 0x7f, 0x38, 0x3b, 0x07, 0x42, 0x04, 0x32, 0x04, 0x30, 0x05, 0xa8, 0x2f, 0x08, 0x14, 0xff, 0x10, 0x0e, - 0x90, 0x7f, 0x00, 0x16, 0x21, 0x21, 0x1c, 0x1f, 0x22, 0x16, 0x16, 0x00, 0x1d, 0x24, 0x1d, 0x21, 0x16, 0x16, 0x16, 0x16, 0x90, 0x01, 0x2f, 0xff, - 0x58, 0x01, 0x6f, 0xff, 0xeb, 0x30, 0xaf, 0x30, 0x03, 0xbb, 0x30, 0xf3, 0x30, 0xd6, 0x30, 0x30, 0x09, 0x06, 0x3c, 0xf7, 0x11, 0x75, 0x00, 0x78, - 0x2f, 0xf9, 0x6d, 0x00, 0x62, 0x44, 0xc1, 0x1d, 0x72, 0x00, 0x67, 0x0e, 0x80, 0x7f, 0x06, 0x10, 0xfd, 0x51, 0x7f, 0x73, 0x2f, 0xed, 0xb0, 0xb0, - 0x81, 0x6f, 0x06, 0xc0, 0xff, 0x05, 0xb0, 0x7d, 0x00, 0x00, 0x62, 0x53, 0x08, 0xee, 0x68, 0x21, 0x58, 0x06, 0x98, 0x3b, 0xe9, 0xb8, 0x48, 0x01, - 0xc1, 0x80, 0xbd, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x7b, 0xbb, 0xc0, 0x07, 0x12, 0x7f, 0x06, 0xb1, 0xff, 0x1b, 0x04, 0x4e, 0x04, 0x3a, 0x04, 0x00, - 0x41, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x07, 0x43, 0x04, 0x40, 0x04, 0x33, 0x05, 0xc8, 0x45, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x30, 0xff, - 0x00, 0x17, 0x22, 0x22, 0x1d, 0x20, 0x23, 0x17, 0x17, 0x00, 0x1e, 0x25, 0x1f, 0x22, 0x17, 0x17, 0x17, 0x17, 0xa0, 0x01, 0x2f, 0xff, 0x59, 0x78, - 0x3b, 0xde, 0x30, 0xb1, 0x30, 0xc9, 0x0d, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x28, 0x37, 0x3f, 0xff, 0x4d, 0x2f, 0xf1, 0x58, 0x63, 0x2f, 0xef, 0x64, - 0x2c, 0xfb, 0x5e, 0xf9, 0x20, 0x00, 0x28, 0x28, 0x00, 0x52, 0x2f, 0x85, 0x70, 0x2f, 0x8b, 0x62, 0x00, 0x6c, 0xa0, 0x2f, 0x97, 0x63, 0x20, 0x13, - 0x6f, 0x00, 0x66, 0x00, 0x29, 0xaa, 0x04, 0x80, 0x7f, 0xe9, 0x40, 0x7f, 0x69, 0x2f, 0xf9, 0x65, 0x60, 0x7f, 0xe9, 0xad, 0xa0, 0x7f, 0x71, 0x2f, - 0x97, 0x65, 0x04, 0x40, 0x7d, 0x50, 0xff, 0x7a, 0xa0, 0xff, 0xde, 0x3d, 0xfb, 0x00, 0x11, 0x01, 0x6b, 0x04, 0x60, 0x7d, 0x01, 0x11, 0x7f, 0x71, - 0x81, 0x31, 0x97, 0x64, 0xec, 0x2e, 0xa3, 0x03, 0xf1, 0x83, 0x00, 0xb1, 0xff, 0xfa, 0xa0, 0x7d, 0x04, 0x70, 0xff, 0x6c, 0x9a, 0x08, 0x76, 0x51, - 0x7f, 0x98, 0x06, 0x98, 0x3b, 0xc8, 0xb9, 0x00, 0x00, 0xcf, 0xc4, 0xb3, 0xc8, 0xb2, 0x44, 0xc5, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, - 0xad, 0x06, 0xd3, 0x7f, 0x51, 0xeb, 0x06, 0x83, 0xff, 0xf3, 0x06, 0x41, 0xff, 0x1c, 0x04, 0x30, 0x28, 0x3b, 0x00, 0x35, 0x04, 0x34, 0x04, 0x3e, - 0x04, 0x3d, 0x04, 0x0a, 0x38, 0x04, 0x4f, 0x04, 0x34, 0x7f, 0x20, 0x28, 0x4b, 0x41, 0x22, 0x04, 0x3f, 0x28, 0x4b, 0x31, 0x04, 0x3b, 0x20, 0x15, - 0x3a, 0xf0, 0x20, 0x25, 0x04, 0x93, 0xff, 0x07, 0x14, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x18, 0x23, 0x23, 0x21, 0x00, 0x21, 0x24, 0x18, 0x18, 0x1f, - 0x26, 0x21, 0x23, 0x0a, 0x18, 0x18, 0x18, 0x18, 0x01, 0x2f, 0xff, 0x5a, 0x98, 0x3b, 0xeb, 0x31, 0x30, 0xbf, 0x06, 0x68, 0x37, 0x78, 0x3b, 0x6c, - 0x00, 0x74, 0x28, 0x41, 0xb0, 0x06, 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x70, 0x7f, 0x6c, 0x9a, 0x33, 0x80, 0x21, 0xd6, 0x4e, 0x06, 0x98, - 0x3b, 0xb0, 0xba, 0xc0, 0xd0, 0x06, 0x98, 0xb9, 0xc1, 0x0f, 0x12, 0x7f, 0x38, 0x3b, 0x3b, 0x04, 0x4c, 0x04, 0x42, 0x28, 0x43, 0xc0, 0x10, 0x0e, - 0x33, 0xff, 0x0e, 0xf5, 0x7f, 0x19, 0x25, 0x25, 0x1f, 0x23, 0x26, 0x00, 0x19, 0x19, 0x21, 0x28, 0x23, 0x25, 0x19, 0x19, 0x28, 0x19, 0x19, 0x01, - 0x2f, 0xff, 0x5b, 0x78, 0x3b, 0xe2, 0x30, 0xf3, 0x00, 0x30, 0xc6, 0x30, 0xcd, 0x30, 0xb0, 0x30, 0xed, 0xb8, 0x06, 0x48, 0x41, 0x4d, 0x4f, 0x6f, - 0x37, 0xbb, 0x3f, 0xf3, 0x67, 0x00, 0x72, 0xd7, 0x2f, 0xff, 0x06, 0x30, 0x7f, 0xe9, 0x2f, 0xf5, 0xe9, 0x06, 0xa0, 0x7f, 0x06, 0xf0, 0xff, 0x0e, - 0x70, 0x7f, 0x08, 0xd1, 0x9e, 0x71, 0x5c, 0x06, 0xb7, 0xbb, 0xac, 0xba, 0x4c, 0x01, 0xd1, 0x24, 0xb1, 0xf8, 0xad, 0x5c, 0xb8, 0x06, 0x7b, 0xbb, - 0x80, 0x0e, 0xd2, 0x7f, 0x27, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3d, 0x08, 0x04, 0x3e, 0x04, 0x33, 0x20, 0x03, 0x40, 0x04, 0x38, 0x38, 0x04, 0x4f, - 0x05, 0xc8, 0x43, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x1a, 0x28, 0x28, 0x00, 0x23, 0x26, 0x29, 0x1a, 0x1a, 0x25, 0x2c, 0x3c, 0x05, 0x28, - 0x1a, 0x1a, 0x1a, 0x1a, 0x01, 0x2f, 0xff, 0x5c, 0x98, 0x3b, 0x41, 0xb6, 0x28, 0x3d, 0xd3, 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x88, 0x3b, 0x40, 0x7a, - 0x2f, 0xfb, 0x6d, 0x00, 0x62, 0x00, 0x69, 0x00, 0x1a, 0x71, 0x00, 0x75, 0x28, 0x45, 0x0d, 0xf0, 0x7f, 0x73, 0x80, 0xff, 0x6b, 0xb0, 0x06, 0xe1, - 0x7f, 0x63, 0x05, 0xe9, 0xb9, 0x07, 0x11, 0xff, 0xab, 0x83, 0x51, 0x68, 0x08, 0xd4, 0x6b, 0x4b, 0x51, 0x06, 0x7f, 0xfb, 0xa8, 0xba, 0xa0, 0x06, - 0xc7, 0x44, 0xbe, 0x6c, 0xd0, 0x06, 0x78, 0xbf, 0x07, 0x33, 0x7f, 0xe7, 0xa0, 0x06, 0xa3, 0xff, 0x1c, 0x28, 0x35, 0x37, 0x04, 0x30, 0x04, 0x3c, - 0x2e, 0x04, 0x31, 0x28, 0x37, 0x3a, 0x05, 0xc8, 0x37, 0x0f, 0x74, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x1b, 0x00, 0x29, 0x29, 0x24, 0x27, 0x2a, 0x1b, - 0x1b, 0x26, 0x01, 0x2a, 0x24, 0x29, 0x1b, 0x1b, 0x1b, 0x1b, 0x01, 0x2f, 0xff, 0x45, 0x5d, 0x78, 0x3b, 0xca, 0x30, 0xdf, 0x28, 0x39, 0xa2, 0x06, - 0x48, 0x37, 0xab, 0x3f, 0xff, 0x4e, 0x48, 0x37, 0x69, 0x48, 0x39, 0x61, 0x06, 0xe0, 0x7f, 0x05, 0xd8, 0xb5, 0xc0, 0x08, 0x10, 0xff, 0x0e, 0x30, - 0x7f, 0xb3, 0x7e, 0x73, 0x7c, 0xd4, 0x6b, 0x20, 0x9a, 0x4e, 0x06, 0x78, 0x3b, 0x98, 0xb0, 0xf8, 0xbb, 0x44, 0x15, 0xbe, 0x44, 0xc5, 0x07, 0x33, - 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xed, 0x06, 0x83, 0xff, 0x57, 0x1d, 0x48, 0x37, 0x38, 0x48, 0x39, 0x4f, 0x06, 0x08, 0x39, 0x10, 0x07, 0x13, 0xff, - 0x0e, 0xf5, 0x7f, 0x00, 0x1c, 0x2a, 0x2a, 0x25, 0x28, 0x2b, 0x1c, 0x1c, 0x00, 0x27, 0x2d, 0x27, 0x2a, 0x1c, 0x1c, 0x1c, 0x1c, 0x90, 0x01, 0x2f, - 0xff, 0x5e, 0x0c, 0x6f, 0xff, 0xaa, 0x30, 0xe9, 0x30, 0x10, 0xf3, 0x30, 0xc0, 0x06, 0xa8, 0x3b, 0x65, 0x00, 0x74, 0x00, 0x44, 0x68, 0x2f, 0xed, - 0x72, 0x00, 0x6c, 0x2f, 0xff, 0x6e, 0x00, 0x6a, 0x64, 0x2f, 0x87, 0x05, 0x9f, 0xfa, 0x50, 0x2f, 0xf3, 0x79, 0x2f, 0xf9, 0x2d, 0x3d, 0x00, 0x42, - 0x2f, 0xfd, 0x05, 0xb0, 0x79, 0x79, 0x3b, 0x38, 0xb3, 0x64, 0xc0, 0xff, 0xd1, 0x05, 0xbf, 0x79, 0x30, 0xff, 0x65, 0x21, 0x71, 0x69, 0x00, 0x20, - 0x61, 0x01, 0xdd, 0x30, 0x0b, 0x05, 0xd1, 0x7f, 0xed, 0x21, 0xf1, 0x30, 0x83, 0x50, 0x81, 0x6a, 0x2f, 0x09, 0x86, 0x05, 0x92, 0x01, 0x77, 0x83, - 0x70, 0x51, 0x06, 0x7f, 0xf3, 0x3f, 0xff, 0x24, 0x01, 0xb1, 0x5c, 0xb3, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0xb3, 0x7f, 0xe2, 0xd2, 0x7d, 0x05, 0xdf, - 0x79, 0x00, 0x11, 0xff, 0x69, 0x00, 0x78, 0x05, 0xa2, 0x01, 0x1d, 0x80, 0x28, 0x37, 0x34, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3b, 0xae, 0x28, 0x45, - 0x3d, 0x20, 0x0b, 0x4b, 0x05, 0xc8, 0x41, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1d, 0x00, 0x2b, 0x2e, 0x27, 0x2c, 0x2f, 0x1d, 0x1d, 0x28, - 0x01, 0x31, 0x29, 0x2b, 0x1d, 0x1d, 0x1d, 0x1d, 0x01, 0x2f, 0xff, 0x20, 0x60, 0x14, 0x6f, 0xff, 0xce, 0x30, 0xeb, 0x30, 0xa6, 0x0a, 0x30, 0xa7, - 0x30, 0xfc, 0x06, 0x68, 0x3d, 0x4e, 0x26, 0x29, 0x72, 0x30, 0x00, 0x77, 0x47, 0xc1, 0x06, 0x90, 0x7f, 0x76, 0x00, 0xe8, 0x00, 0x6b, 0x67, 0x05, - 0xc7, 0xb3, 0xf0, 0xff, 0x65, 0x40, 0x7f, 0x6e, 0x06, 0x80, 0xff, 0x30, 0x7f, 0xd8, 0x06, 0x3f, 0xf9, 0x51, 0xff, 0x75, 0x40, 0xff, 0x06, 0x3e, - 0x77, 0x2a, 0x63, 0x01, 0x40, 0x5a, 0x06, 0xb8, 0x3b, 0x78, 0xb1, 0x74, 0xb9, 0xe8, 0xc6, 0x2c, 0x74, 0xc7, 0x06, 0x9b, 0xbb, 0x6f, 0x06, 0xc2, - 0x81, 0x06, 0xf1, 0xff, 0x1d, 0x04, 0x55, 0x3e, 0x28, 0x37, 0x32, 0x28, 0x3d, 0x33, 0x28, 0x45, 0x4f, 0x05, 0xc8, 0x37, 0xc0, 0x07, 0x94, 0xff, - 0x10, 0x0e, 0x90, 0x7f, 0x1e, 0x2e, 0x2c, 0x29, 0x2a, 0x2d, 0x00, 0x1e, 0x1e, 0x2b, 0x2f, 0x2b, 0x2e, 0x1e, 0x1e, 0x25, 0x1e, 0x1e, 0x01, 0x2f, - 0xff, 0x61, 0x10, 0x6f, 0xff, 0xdd, 0x28, 0x35, 0x05, 0xe9, 0x30, 0xf3, 0x30, 0xc9, 0x06, 0x68, 0x3b, 0x50, 0x2e, 0x65, 0xd7, 0x06, 0x5c, 0xf1, - 0xb0, 0x7f, 0x6f, 0x28, 0x39, 0x6e, 0x06, 0x48, 0x3b, 0x50, 0xff, 0x06, 0x38, 0x35, 0xb0, 0xd0, 0xff, 0x6e, 0x06, 0x48, 0x39, 0x07, 0x10, 0x7f, - 0xe2, 0x6c, 0x70, 0x51, 0x81, 0x06, 0xb8, 0x3b, 0xf4, 0xd3, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x98, 0xbd, 0xa8, 0x07, 0x52, 0x7f, 0xf3, 0x06, 0x82, - 0x7f, 0x1f, 0x28, 0x3b, 0x3b, 0x04, 0x4c, 0x0e, 0x04, 0x48, 0x04, 0x30, 0x06, 0x08, 0x37, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x1f, 0x00, - 0x2f, 0x2f, 0x2b, 0x2d, 0x30, 0x1f, 0x1f, 0x2d, 0x01, 0x32, 0x2c, 0x2f, 0x1f, 0x1f, 0x1f, 0x1f, 0x01, 0x2f, 0xff, 0x20, 0x62, 0x14, 0x88, 0x3b, - 0xeb, 0x30, 0xc8, 0x30, 0xac, 0xc6, 0x20, 0x05, 0x06, 0x98, 0x3b, 0x72, 0x00, 0x74, 0x2e, 0x79, 0x3e, 0x77, 0x6c, 0xf8, 0x10, 0x06, 0x80, 0x7f, - 0x39, 0x3d, 0x31, 0x7f, 0x39, 0x47, 0x0d, 0xb1, 0xff, 0x61, 0x84, 0x04, 0x10, 0x84, 0x59, 0x72, 0x06, 0x98, 0x3d, 0xec, 0xd3, 0x74, 0xb9, 0x0e, - 0x2c, 0xd2, 0x08, 0xac, 0x06, 0xb8, 0x3b, 0x0e, 0xb3, 0x7f, 0x38, 0x3b, 0x40, 0x02, 0x04, 0x42, 0x04, 0x43, 0x04, 0x33, 0x28, 0x3d, 0x3b, 0x0e, - 0x04, 0x38, 0x04, 0x4f, 0x05, 0xc8, 0x43, 0x10, 0x07, 0x74, 0xff, 0x0e, 0x76, 0x7f, 0x20, 0x00, 0x30, 0x30, 0x2c, 0x2e, 0x31, 0x20, 0x20, 0x2e, - 0x01, 0x33, 0x2d, 0x30, 0x20, 0x20, 0x20, 0x20, 0x01, 0x2f, 0xff, 0x20, 0x63, 0x2a, 0x6f, 0xff, 0xeb, 0x30, 0xfc, 0x30, 0xde, 0x0a, 0x30, 0xcb, - 0x30, 0xa2, 0x06, 0x68, 0x3b, 0x52, 0x2f, 0xf7, 0x6d, 0xeb, 0x4b, 0x77, 0x06, 0x5e, 0xf7, 0x30, 0x7f, 0x75, 0x80, 0x81, 0x65, 0x06, 0x20, 0xff, - 0x30, 0x7d, 0x7a, 0xe4, 0x60, 0x7d, 0x06, 0x1d, 0xfd, 0x07, 0x11, 0x7f, 0x71, 0x7d, 0xed, 0x06, 0x4e, 0x77, 0x57, 0x01, 0x7f, 0x6c, 0x9a, 0x3c, - 0x5c, 0x9a, 0x4e, 0x06, 0x7f, 0xf9, 0x00, 0xe8, 0xb8, 0xc8, 0xb9, 0xc8, 0xb2, 0x44, 0xc5, 0xd8, 0x06, 0x78, 0xbd, 0x33, 0x7f, 0x65, 0x23, 0x81, - 0x32, 0x7b, 0x69, 0x00, 0xeb, 0xa8, 0x06, 0x63, 0xff, 0xe9, 0x06, 0x83, 0xff, 0x20, 0x28, 0x35, 0x3c, 0x04, 0x4b, 0x38, 0x04, 0x3d, 0x06, 0x08, - 0x35, 0x07, 0x94, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x21, 0x31, 0x32, 0x00, 0x2d, 0x31, 0x34, 0x21, 0x21, 0x2f, 0x36, 0x2f, 0x04, 0x31, 0x21, 0x21, - 0x21, 0x21, 0x01, 0x2f, 0xff, 0x64, 0x53, 0x8d, 0x6f, 0xff, 0xed, 0x30, 0xb7, 0x06, 0x88, 0x37, 0x77, 0x3b, 0x73, 0x20, 0x01, 0xf5, 0x06, 0x58, - 0x39, 0xb0, 0x7f, 0x06, 0x18, 0x37, 0xb0, 0xff, 0x6c, 0x49, 0x3f, 0x64, 0x0e, 0x61, 0x7f, 0x80, 0x06, 0x71, 0xfd, 0x00, 0x00, 0xc4, 0x4f, 0x57, - 0x7f, 0xaf, 0xc3, 0x06, 0x51, 0xfa, 0x4f, 0xff, 0xec, 0xb7, 0xdc, 0xc2, 0x06, 0x98, 0x39, 0x73, 0x7f, 0xd0, 0x06, 0x72, 0x7d, 0x3c, 0x3b, 0xfa, - 0x06, 0xc3, 0xff, 0x20, 0x04, 0x3e, 0x04, 0x78, 0x41, 0x20, 0x01, 0x06, 0x58, 0x39, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x22, 0x32, 0x34, - 0x00, 0x2e, 0x32, 0x35, 0x22, 0x22, 0x30, 0x37, 0x2e, 0x04, 0x32, 0x22, 0x22, 0x22, 0x22, 0x01, 0x2f, 0xff, 0x65, 0x01, 0x82, 0x6f, 0xff, 0xbb, - 0x30, 0xeb, 0x30, 0xd3, 0x28, 0x3d, 0xfb, 0x00, 0x30, 0xb3, 0x30, 0xbd, 0x30, 0xf4, 0x30, 0xa9, 0xa2, 0x05, 0xe8, 0x47, 0x53, 0x2f, 0xeb, 0x72, - 0x00, 0x62, 0x4e, 0xf5, 0x20, 0x8a, 0x67, 0x3f, 0x20, 0x00, 0x4b, 0x2f, 0x0d, 0x73, 0x2f, 0x11, 0x76, 0xd1, 0x2f, 0x15, 0x05, 0x70, 0x7f, 0x65, - 0x20, 0x7f, 0x65, 0x00, 0x74, 0x05, 0xc0, 0x7d, 0xaf, 0xd0, 0x7f, 0x6e, 0x21, 0x01, 0x75, 0x05, 0xe1, 0x01, 0xd1, 0x7f, 0x31, 0x03, 0x05, 0xb0, - 0xfd, 0xa0, 0xf1, 0xff, 0x79, 0x06, 0x00, 0x7f, 0x5e, 0x58, 0x14, 0x5c, 0xf4, 0x00, 0x7e, 0x9a, 0x4e, 0xca, 0x53, 0xd1, 0x79, 0x22, 0x10, 0x7d, - 0x83, 0x6c, 0x05, 0xff, 0xff, 0x38, 0xc1, 0x74, 0xb9, 0x00, 0x44, 0xbe, 0x44, 0xc5, 0x20, 0x00, 0x54, 0xcf, 0x0d, 0x8c, 0xc1, 0xf4, 0xbc, 0x05, - 0xff, 0xf8, 0x53, 0x7f, 0x76, 0x2f, 0xf5, 0x76, 0xeb, 0x42, 0xff, 0x32, 0x83, 0x05, 0xd2, 0xff, 0xe9, 0x60, 0x7f, 0x06, 0x52, 0x7f, 0x21, 0x02, - 0x04, 0x35, 0x04, 0x40, 0x04, 0x31, 0x48, 0x3b, 0x20, 0x28, 0x00, 0x38, 0x20, 0x03, 0x1a, 0x48, 0x4d, 0x3e, 0x04, 0x32, 0xe0, 0x28, 0x55, 0x0d, - 0xb4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x23, 0x34, 0x36, 0x33, 0x34, 0x00, 0x37, 0x23, 0x23, 0x32, 0x39, 0x32, 0x34, 0x23, 0x12, 0x23, 0x23, 0x23, - 0x01, 0x2f, 0xff, 0x66, 0x08, 0x6f, 0xff, 0xb9, 0x03, 0x30, 0xed, 0x30, 0xd0, 0x30, 0xad, 0x28, 0x3d, 0x06, 0x5d, 0xf8, 0x63, 0x53, 0x2f, 0x71, - 0x38, 0x23, 0x61, 0x00, 0x6b, 0x06, 0x4e, 0xfb, 0x90, 0x7f, 0x75, 0x71, 0x2f, 0x81, 0x38, 0x41, 0x06, 0x30, 0xff, 0x77, 0x40, 0xff, 0x65, 0x2f, - 0xfd, 0xab, 0x06, 0x91, 0x7f, 0x63, 0x20, 0x01, 0x68, 0x06, 0x0d, 0xff, 0x45, 0x4e, 0xf5, 0xb1, 0x81, 0x80, 0x05, 0xde, 0x7f, 0xaf, 0x65, 0x1b, - 0x6d, 0x10, 0x4f, 0x4b, 0x40, 0x51, 0x06, 0x7f, 0xf9, 0xac, 0xc2, 0x5c, 0xb8, 0x14, 0xbc, 0x0c, 0xa4, 0xd0, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x52, - 0x7f, 0x69, 0x00, 0x68, 0x6a, 0x06, 0x02, 0xff, 0x91, 0xff, 0xe1, 0x06, 0x41, 0xff, 0x21, 0x04, 0x3b, 0x8e, 0x48, 0x27, 0x30, 0x04, 0x3a, 0x48, - 0x3f, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x24, 0x00, 0x35, 0x37, 0x35, 0x35, 0x0f, 0x24, 0x24, 0x34, 0x01, 0x11, 0x33, 0x35, 0x24, 0x24, - 0x24, 0x24, 0x01, 0x2f, 0xff, 0x23, 0x67, 0x01, 0xa8, 0x3b, 0xd9, 0x30, 0xcb, 0x07, 0x08, 0x3b, 0x3f, 0x75, 0xbf, 0x06, 0xb8, 0x3b, 0xe9, 0x40, - 0x7f, 0x05, 0xf8, 0x39, 0x98, 0x3b, 0x50, 0xff, 0x3d, 0xf7, 0x0d, 0xd1, 0x7f, 0xe0, 0x98, 0x3b, 0x06, 0x52, 0x01, 0x38, 0x3b, 0x87, 0x65, 0x3c, - 0x5c, 0x9a, 0x43, 0x4e, 0x06, 0x98, 0x3b, 0xa0, 0xbc, 0xc8, 0xb2, 0x06, 0xd8, 0x3b, 0x73, 0x7f, 0x78, 0xeb, 0x06, 0xa1, 0xff, 0x53, 0x81, 0x05, - 0xfc, 0x3d, 0x78, 0x3b, 0x35, 0x04, 0x3d, 0xe0, 0x06, 0xc8, 0x3b, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x25, 0x36, 0x38, 0x36, 0x36, 0x00, - 0x10, 0x25, 0x25, 0x33, 0x12, 0x34, 0x36, 0x25, 0x12, 0x25, 0x25, 0x25, 0x01, 0x2f, 0xff, 0x68, 0x09, 0x6f, 0xff, 0x57, 0x00, 0x53, 0xa2, 0x30, - 0xd5, 0x30, 0xea, 0x30, 0xab, 0xa8, 0x06, 0x88, 0x3b, 0x6f, 0x2f, 0xef, 0x74, 0x2e, 0xf1, 0x20, 0x00, 0x41, 0x0b, 0x00, 0x66, 0x00, 0x72, 0x2f, - 0xfb, 0x63, 0x05, 0xae, 0xfb, 0x70, 0x73, 0xaa, 0x3e, 0xf3, 0x65, 0x20, 0x83, 0x64, 0x2e, 0xfb, 0x20, 0x2f, 0x8d, 0x75, 0xd5, 0x20, 0x09, 0x05, - 0x5f, 0xf7, 0xfc, 0x20, 0x73, 0x61, 0x60, 0xf9, 0x6b, 0x06, 0x0c, 0x79, 0xf4, 0x50, 0xe9, 0x70, 0x7f, 0x05, 0xb1, 0x79, 0xb0, 0x7f, 0xe1, 0x06, - 0x80, 0x7f, 0x57, 0x53, 0x30, 0x5e, 0x97, 0x06, 0x5f, 0xf1, 0x5f, 0xff, 0xa8, 0xb0, 0x44, 0xc5, 0x00, 0x04, 0xd5, 0xac, 0xb9, 0x74, 0xce, 0x20, - 0x00, 0x02, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x05, 0xdf, 0xf8, 0x5a, 0x8d, 0x4f, 0xeb, 0x64, 0x00, 0x2d, 0x83, 0x7d, 0x05, 0xd2, 0x83, 0xc1, - 0xa3, 0xf3, 0xa8, 0x33, 0x7d, 0x6f, 0x63, 0x7d, 0x6c, 0x05, 0x6f, 0xff, 0x2e, 0x04, 0x10, 0x38, 0x04, 0x20, 0x06, 0x08, 0x31, 0x07, 0x94, 0xff, - 0x10, 0x0e, 0xf0, 0x7f, 0x26, 0x38, 0x00, 0x00, 0x39, 0x39, 0x3a, 0x26, 0x26, 0x40, 0x00, 0x42, 0x04, 0x38, 0x26, 0x26, 0x26, 0x26, 0x01, 0x2f, - 0xff, 0x69, 0x13, 0x80, 0x6f, 0xff, 0xb9, 0x30, 0xda, 0x30, 0xa4, 0x30, 0xf3, 0xd7, 0x06, 0x68, 0x39, 0x3f, 0xf7, 0x70, 0x2e, 0xed, 0x69, 0x06, - 0x0f, 0x6f, 0xbe, 0xf7, 0x30, 0x81, 0x5f, 0x67, 0x2f, 0xf7, 0x65, 0x06, 0x80, 0xff, 0x3f, 0xf3, 0x3f, 0xf9, 0x06, 0x71, 0x7f, 0x30, 0xfd, 0xd0, - 0x06, 0x1c, 0xf3, 0xb1, 0x7f, 0xf1, 0x06, 0x60, 0x7f, 0x7f, 0x89, 0xed, 0x73, 0x20, 0x59, 0x72, 0x06, 0x98, 0x3d, 0xa4, 0xc2, 0x98, 0xd3, 0x78, - 0x6d, 0xc7, 0x06, 0xb6, 0xbb, 0x52, 0x7f, 0x6a, 0x06, 0x42, 0xfd, 0x93, 0x7f, 0x6e, 0x2c, 0x3d, 0x80, 0x06, 0x32, 0x81, 0x18, 0x04, 0x41, 0x04, - 0x3f, 0x04, 0x30, 0x03, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x28, 0x43, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x27, 0x39, 0x10, - 0x38, 0x38, 0x11, 0x27, 0x00, 0x27, 0x37, 0x13, 0x18, 0x39, 0x27, 0x27, 0x27, 0x50, 0x27, 0x01, 0x2f, 0xff, 0x6a, 0x7b, 0x6a, 0xb9, 0x30, 0xef, - 0x30, 0x14, 0xb8, 0x30, 0xe9, 0x28, 0x3d, 0xc9, 0x06, 0x48, 0x3f, 0x53, 0x00, 0x57, 0x77, 0x2f, 0x75, 0x7a, 0x2f, 0xf9, 0x6c, 0x47, 0x43, 0x05, - 0x5f, 0xed, 0x07, 0xf0, 0x7f, 0x54, 0x73, 0x0e, 0xa0, 0xff, 0x75, 0xe1, 0xff, 0x69, 0x05, 0xce, 0xf7, 0xaf, 0x65, 0x02, 0x01, 0x5a, 0xeb, 0x58, - 0x70, 0x51, 0x06, 0x98, 0x3b, 0x40, 0x01, 0xc6, 0xc8, 0xc9, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x7e, 0xf7, 0xa2, 0x07, 0x91, 0xff, 0xe2, 0x06, 0x21, - 0xff, 0x21, 0x04, 0x32, 0x28, 0x39, 0x37, 0x8b, 0x28, 0x39, 0x3b, 0x04, 0x35, 0x28, 0x41, 0x34, 0x05, 0xe8, 0x3f, 0x0f, 0x54, 0xff, 0x80, 0x10, - 0x06, 0x90, 0xff, 0x28, 0x3b, 0x3d, 0x3b, 0x3d, 0x39, 0x28, 0x00, 0x28, 0x38, 0x3b, 0x31, 0x3b, 0x28, 0x28, 0x28, 0x48, 0x28, 0x01, 0x2f, 0xff, - 0x6b, 0x15, 0x88, 0x3b, 0xa6, 0x30, 0xa7, 0x0d, 0x30, 0xfc, 0x30, 0xc7, 0x28, 0x3d, 0x06, 0x78, 0x3b, 0x65, 0x28, 0x31, 0xdb, 0x06, 0x5f, 0x75, - 0x56, 0xbb, 0xe8, 0x40, 0x7f, 0x06, 0x7d, 0xf7, 0x63, 0x2d, 0x71, 0x06, 0x91, 0x03, 0x1e, 0x53, 0x00, 0x76, 0x2e, 0x71, 0x39, 0xbb, 0x06, 0x5f, - 0xf7, 0x38, 0x3b, 0x65, 0xc6, 0x21, 0x03, 0x06, 0x70, 0x7f, 0x5e, 0x74, 0x78, 0x06, 0x88, 0x37, 0x58, 0x3b, 0xe8, 0x15, 0xc6, 0x74, 0xb3, 0x06, - 0x90, 0x81, 0x5a, 0x07, 0x23, 0x7f, 0xe9, 0x06, 0xa1, 0xff, 0x45, 0x28, 0x28, 0x3b, 0x35, 0x04, 0x46, 0x28, 0x3b, 0x4f, 0x05, 0xe8, 0x35, 0xc8, - 0x07, 0x74, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x29, 0x3c, 0x28, 0x34, 0x3c, 0x29, 0x29, 0x12, 0x41, 0x3d, 0x3f, 0x20, 0x05, 0x29, 0x29, 0x01, 0x2f, - 0xff, 0x6c, 0x46, 0x1a, 0x88, 0x3b, 0xa4, 0x30, 0xb9, 0x06, 0x48, 0x35, 0x9f, 0xf7, 0x69, 0x23, 0x00, 0x74, 0x2f, 0xf9, 0x65, 0x00, 0x72, 0x06, - 0x2f, 0xfb, 0x3e, 0xf7, 0x5b, 0x69, 0x2f, 0xf7, 0x73, 0x06, 0x68, 0x3d, 0x98, 0x3b, 0x69, 0x2f, 0xfd, 0x06, 0x3e, 0x77, 0x7b, 0x76, 0x40, 0x79, - 0x51, 0x7f, 0x06, 0x18, 0x3f, 0x51, 0x7f, 0x7a, 0x06, 0x68, 0xb9, 0x38, 0x3b, 0x21, 0xeb, 0x58, 0x06, 0xd8, 0x3b, 0x04, 0xc7, 0xa4, 0xc2, 0x06, - 0xd8, 0x3b, 0xe3, 0x33, 0x7f, 0x32, 0xff, 0x06, 0x73, 0x7f, 0xed, 0x00, 0xe7, 0x06, 0x81, 0xff, 0x58, 0x3b, 0x47, 0x39, 0x28, 0x3d, 0x30, 0x04, - 0x40, 0x06, 0x28, 0x41, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x2a, 0x3d, 0x3c, 0x32, 0x3c, 0x3d, 0x2a, 0x2a, 0x12, 0x42, 0x3e, 0x3e, - 0x20, 0x05, 0x2a, 0x2a, 0x01, 0x2f, 0xff, 0x6d, 0x82, 0x7d, 0x6c, 0xc8, 0x30, 0xeb, 0x30, 0xb3, 0x06, 0xa8, 0x3b, 0x54, 0x8a, 0x2f, 0xf7, 0x72, - 0x00, 0x6b, 0x2f, 0xf7, 0x79, 0x06, 0xa0, 0x7f, 0x71, 0xc5, 0x48, 0x41, 0x06, 0x38, 0x3d, 0x54, 0x00, 0xfc, 0x60, 0xff, 0x69, 0x06, 0xa1, 0x7f, - 0xe8, 0x38, 0xbf, 0x06, 0x5f, 0xf9, 0x91, 0x7f, 0xed, 0x06, 0x4e, 0x79, 0x1f, 0x57, 0x33, 0x30, 0x80, 0x76, 0x73, 0x0c, 0x06, 0x2f, 0xfe, 0x30, - 0xd1, 0xa4, 0xd0, 0xc7, 0x06, 0xb8, 0xbb, 0x73, 0x7f, 0x69, 0x00, 0x6a, 0x06, 0x62, 0xff, 0x93, 0x7f, 0x06, 0x3a, 0x3f, 0x17, 0x22, 0x04, 0x43, - 0x28, 0x33, 0x46, 0x06, 0x28, 0x35, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x00, 0x2b, 0x3e, 0x3f, 0x3e, 0x3e, 0x3e, 0x2b, 0x2b, 0x12, 0x3b, - 0x3f, 0x37, 0x20, 0x05, 0x2b, 0x2b, 0x01, 0x2f, 0xff, 0x6e, 0x80, 0x7b, 0x5e, 0xa4, 0x30, 0xae, 0x30, 0xea, 0x30, 0xb9, 0xb4, 0x06, 0x88, 0x3d, - 0x55, 0x2c, 0xe7, 0x3c, 0xf7, 0x65, 0x2c, 0xed, 0x20, 0x00, 0x44, 0x4b, 0x2f, 0x7d, 0x6e, 0x00, 0x67, 0x2c, 0xf9, 0x6f, 0x00, 0x55, 0x6d, 0x05, - 0x4f, 0xff, 0x52, 0x20, 0x69, 0x79, 0x2f, 0x6f, 0x75, 0x20, 0x6f, 0x1b, 0x65, 0x00, 0x2d, 0x60, 0x8f, 0x05, 0x9f, 0xff, 0x56, 0x4f, 0xef, 0x38, - 0x39, 0xab, 0x31, 0x07, 0x67, 0x41, 0x09, 0x73, 0x41, 0x09, 0xf6, 0x60, 0x11, 0x50, 0x1d, 0xd5, 0x37, 0xdd, 0x04, 0x50, 0xff, 0x65, 0x21, 0x6f, - 0x6e, 0x21, 0x6f, 0x20, 0x81, 0x8b, 0x7e, 0x6f, 0x05, 0xaf, 0xff, 0x30, 0x7f, 0x31, 0xf3, 0x90, 0x7f, 0x31, 0xfb, 0x05, 0x9f, 0xff, 0xf1, 0x10, - 0x82, 0xfd, 0x56, 0x06, 0xb7, 0xbb, 0x01, 0xc6, 0x6d, 0xad, 0xf5, 0x06, 0xb8, 0x3b, 0x72, 0x7f, 0x52, 0x7d, 0x53, 0x83, 0x6f, 0x43, 0x93, 0x6e, - 0x2b, 0xd1, 0x50, 0x72, 0x48, 0x53, 0x6b, 0x0c, 0xa1, 0xff, 0x12, 0x04, 0x35, 0x04, 0x41, 0x3b, 0x28, 0x39, 0x3a, 0x04, 0x3e, 0x04, 0x31, 0x28, - 0x45, 0x01, 0x38, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3d, 0x05, 0x88, 0x4b, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x2c, 0x3f, 0x33, 0x41, - 0x2f, 0x32, 0x00, 0x2c, 0x2c, 0x3d, 0x34, 0x0a, 0x3f, 0x2c, 0x2c, 0x24, 0x2c, 0x2c, 0x01, 0x2f, 0xff, 0x6f, 0x01, 0x6f, 0xff, 0xb6, 0x30, 0x05, - 0xf3, 0x30, 0xd3, 0x30, 0xa2, 0x06, 0x88, 0x3b, 0x5a, 0x2e, 0xed, 0x1c, 0x6d, 0x00, 0x62, 0x06, 0x6e, 0xf5, 0xb0, 0x7f, 0x06, 0x3d, 0x75, 0x00, - 0x00, 0x60, 0x53, 0x07, 0x80, 0xff, 0x0e, 0x50, 0x7f, 0x5e, 0x8d, 0xd4, 0x6b, 0x9a, 0x40, 0x4e, 0x06, 0x9f, 0xf9, 0xa0, 0xc7, 0x44, 0xbe, 0x44, - 0xc5, 0xd5, 0x06, 0x98, 0xbd, 0x07, 0x13, 0x7f, 0xe2, 0x06, 0xc3, 0xff, 0x17, 0x28, 0x29, 0x3c, 0x28, 0x35, 0xe0, 0x05, 0x78, 0x2b, 0x0f, 0xf3, - 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x2d, 0x41, 0x41, 0x2f, 0x41, 0x02, 0x41, 0x2d, 0x2d, 0x3e, 0x41, 0x13, 0x20, 0x05, 0x2d, 0x54, 0x2d, 0x01, 0x2f, - 0xff, 0x70, 0x78, 0x3b, 0xb8, 0x28, 0x3b, 0xd0, 0x30, 0x16, 0xd6, 0x30, 0xa8, 0x06, 0x68, 0x3d, 0x5a, 0x2f, 0xe5, 0x38, 0x3b, 0x61, 0xb6, 0x28, - 0x3f, 0x77, 0x06, 0x27, 0xbf, 0x06, 0xf0, 0x7f, 0x53, 0x0e, 0xe0, 0xff, 0xb1, 0xff, 0x75, 0x80, 0x06, 0x29, 0xbf, 0x25, 0x6d, 0xf4, 0x5d, 0x03, - 0x5e, 0xe6, 0x40, 0x97, 0x06, 0x7f, 0xfb, 0xd0, 0xc9, 0x14, 0xbc, 0x0c, 0xbe, 0x35, 0xe8, 0xc6, 0x06, 0x9b, 0xbb, 0x07, 0xb1, 0xff, 0xe9, 0x06, - 0x28, 0x3b, 0x38, 0x48, 0x3b, 0x47, 0x30, 0x28, 0x3f, 0x32, 0x04, 0x35, 0x06, 0x08, 0x3f, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x00, 0x2e, - 0x42, 0x42, 0x34, 0x42, 0x42, 0x2e, 0x2e, 0x12, 0x3f, 0x42, 0x14, 0x20, 0x05, 0x2e, 0x2e, 0x01, 0x2f, 0xff, 0x71, 0x82, 0x78, 0x3b, 0xa2, 0x30, - 0xbc, 0x30, 0xeb, 0x28, 0x3d, 0xa4, 0x0c, 0x30, 0xb8, 0x30, 0xe3, 0x28, 0x47, 0x05, 0xff, 0xfc, 0x41, 0x00, 0x51, 0x7a, 0x2f, 0xf1, 0x72, 0x48, - 0x3d, 0x69, 0x00, 0x6a, 0x2f, 0x85, 0x44, 0x6e, 0x06, 0x80, 0x7f, 0xef, 0x00, 0x64, 0x06, 0x00, 0x81, 0x41, 0x00, 0x51, 0x73, 0xa0, 0xff, 0x64, - 0x20, 0x0d, 0x63, 0x00, 0x68, 0x05, 0xa1, 0x05, 0xb8, 0xd1, 0x7f, 0x67, 0x4f, 0xff, 0x05, 0xd0, 0xff, 0xb1, 0xff, 0x79, 0x00, 0xe1, 0x80, 0x05, - 0xe1, 0xff, 0x3f, 0x96, 0x5e, 0x58, 0xdc, 0x62, 0x86, 0x40, 0x75, 0x06, 0x7f, 0xf9, 0x44, 0xc5, 0x1c, 0xc8, 0x74, 0xb9, 0x03, 0x14, 0xbc, 0x74, - 0xc7, 0x94, 0xc7, 0x06, 0x3f, 0xf8, 0x93, 0x7f, 0x58, 0x65, 0x42, 0x7f, 0x7a, 0x05, 0xe3, 0x83, 0xf3, 0xff, 0xe3, 0x00, 0x6f, 0x8a, 0x05, 0xcf, - 0xfe, 0x10, 0x04, 0x37, 0x28, 0x31, 0x40, 0x48, 0x3d, 0x39, 0x0b, 0x04, 0x34, 0x04, 0x36, 0x28, 0x45, 0x3d, 0x05, 0xa8, 0x41, 0x07, 0xb4, 0xff, - 0x80, 0x10, 0x0e, 0x30, 0x7f, 0x2f, 0x04, 0x06, 0x02, 0x04, 0x05, 0x2f, 0x21, 0x2f, 0x03, 0x20, 0x06, 0x2f, 0x2f, 0x2f, 0x2f, 0x01, 0x2f, 0xff, - 0x40, 0x72, 0x78, 0x3b, 0xe2, 0x30, 0xfc, 0x30, 0xea, 0x30, 0x06, 0xbf, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x08, 0x37, 0x3f, 0xff, 0x4d, 0xa3, 0x2f, - 0xf1, 0x75, 0x28, 0x3b, 0x69, 0x00, 0x74, 0x48, 0x37, 0x36, 0xbb, 0xef, 0x06, 0xd0, 0x7f, 0x05, 0xdf, 0xfb, 0x70, 0xff, 0x65, 0xa0, 0x7f, 0x05, - 0xb9, 0x3d, 0x08, 0x11, 0x7f, 0x05, 0xd1, 0xff, 0x00, 0xdb, 0x6b, 0xcc, 0x91, 0x54, 0x58, 0x3c, 0x5c, 0x20, 0x9a, 0x4e, 0x06, 0x5f, 0xf9, 0xa8, - 0xba, 0xac, 0xb9, 0xc0, 0x1a, 0xd0, 0xc8, 0xb2, 0x06, 0x78, 0xbb, 0x00, 0x13, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe2, 0xa8, 0x06, 0x23, 0xff, 0x1c, - 0x28, 0x33, 0x32, 0x28, 0x3b, 0x38, 0x04, 0x42, 0x8e, 0x48, 0x35, 0x38, 0x04, 0x4f, 0x05, 0xa8, 0x39, 0x0f, 0x13, 0x7f, 0x10, 0x06, 0xf0, 0xff, - 0x30, 0x00, 0x26, 0x26, 0x20, 0x24, 0x27, 0x30, 0x30, 0x23, 0x02, 0x29, 0x20, 0x26, 0x30, 0x30, 0x30, 0x01, 0x38, 0x03, 0x73, 0xbb, 0x78, 0x3b, - 0xde, 0x28, 0x39, 0x06, 0x7d, 0x73, 0x78, 0x3b, 0x6c, 0x2f, 0x71, 0x10, 0x0e, 0xd0, 0x7f, 0x42, 0xed, 0x06, 0x82, 0x82, 0x6c, 0x9a, 0xcc, 0x91, - 0x06, 0xb2, 0xff, 0xd0, 0x1b, 0xb9, 0xac, 0xb9, 0x10, 0x06, 0xb3, 0x7f, 0x38, 0x3b, 0x3b, 0x28, 0x39, 0x10, 0x16, 0xd4, 0xff, 0x80, 0x06, 0x96, - 0xff, 0x31, 0x24, 0x24, 0x1e, 0x22, 0x25, 0x31, 0x00, 0x31, 0x20, 0x27, 0x22, 0x24, 0x31, 0x31, 0x31, 0x50, 0x31, 0x01, 0x2f, 0xff, 0x74, 0x78, - 0x3b, 0xcb, 0x30, 0xb8, 0x30, 0x05, 0xa7, 0x30, 0xfc, 0x30, 0xeb, 0x06, 0x68, 0x41, 0x4e, 0x2f, 0xf1, 0x5a, 0x67, 0x2f, 0xeb, 0x72, 0x06, 0x6d, - 0x78, 0x10, 0x07, 0x10, 0x7f, 0xed, 0x06, 0xc1, 0xff, 0x3c, 0x04, 0x5c, 0xe5, 0x65, 0x14, 0x5c, 0x06, 0x9b, 0x3d, 0xc8, 0xb2, 0x1a, 0x1c, 0xc8, - 0x74, 0x06, 0xa8, 0x3d, 0x0e, 0xf1, 0xff, 0x1d, 0x28, 0x37, 0x33, 0x0e, 0x04, 0x35, 0x04, 0x40, 0x06, 0x68, 0x3d, 0x10, 0x0f, 0x14, 0xff, 0x06, - 0xd6, 0xff, 0x32, 0x00, 0x2d, 0x2b, 0x28, 0x29, 0x2c, 0x32, 0x32, 0x2a, 0x01, 0x2e, 0x28, 0x2d, 0x32, 0x32, 0x32, 0x32, 0x01, 0x2f, 0xff, 0x41, - 0x75, 0x78, 0x3b, 0xc1, 0x30, 0xe3, 0x30, 0xc9, 0x06, 0x68, 0x37, 0x8a, 0x3f, 0xff, 0x43, 0x00, 0x68, 0x2f, 0xf9, 0x64, 0x06, 0x8f, 0xf7, 0x54, - 0x22, 0x00, 0x63, 0x06, 0xc0, 0x81, 0x54, 0x00, 0x73, 0x06, 0xc0, 0x81, 0x43, 0xe1, 0x2e, 0x73, 0x06, 0xb1, 0x7f, 0x06, 0xf1, 0xff, 0x4d, 0x4e, - 0x97, 0x5f, 0x06, 0xbf, 0xf7, 0x0d, 0x28, 0xcc, 0xdc, 0xb4, 0x06, 0xb0, 0x7f, 0x32, 0x7f, 0x6a, 0x2f, 0xfb, 0xd0, 0x06, 0x92, 0x7f, 0x53, 0xff, - 0x65, 0x06, 0x6f, 0xf8, 0x27, 0x04, 0x30, 0x04, 0x70, 0x34, 0x06, 0x68, 0x37, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x33, 0x09, 0x3e, 0x3c, - 0x00, 0x09, 0x0a, 0x33, 0x33, 0x39, 0x0b, 0x3b, 0x09, 0x0a, 0x33, 0x33, 0x33, 0x33, 0x01, 0x2f, 0xff, 0x76, 0x78, 0x3b, 0xb9, 0x02, 0x30, 0xfc, - 0x30, 0xc0, 0x30, 0xf3, 0x06, 0x88, 0x3d, 0x53, 0x22, 0x00, 0x75, 0x28, 0x39, 0x61, 0x00, 0x6e, 0x06, 0x80, 0x7f, 0x6f, 0xe8, 0x06, 0xc0, 0x81, - 0x07, 0x10, 0xff, 0x07, 0x30, 0x7f, 0xe1, 0x06, 0x81, 0xff, 0xcf, 0x82, 0x39, 0x43, 0x4e, 0x06, 0xb8, 0x3b, 0x18, 0xc2, 0xe8, 0xb2, 0x06, 0xb8, - 0xbb, 0x32, 0xff, 0x58, 0x65, 0x07, 0x02, 0xff, 0xe3, 0x23, 0x85, 0x06, 0x5f, 0xf7, 0x21, 0x04, 0x43, 0x8e, 0x28, 0x3b, 0x30, 0x04, 0x3d, 0x06, - 0x68, 0x3f, 0x0f, 0x53, 0xff, 0x10, 0x06, 0x90, 0xff, 0x34, 0x00, 0x3a, 0x3a, 0x3a, 0x3a, 0x3b, 0x34, 0x34, 0x35, 0x01, 0x3c, 0x36, 0x3a, 0x34, - 0x34, 0x34, 0x34, 0x01, 0x2f, 0xff, 0x41, 0x77, 0x78, 0x3b, 0xa8, 0x30, 0xea, 0x30, 0xc8, 0x20, 0x03, 0x45, 0xa2, 0x06, 0x68, 0x3d, 0x45, 0x00, - 0x72, 0x2e, 0xf9, 0x74, 0x20, 0x05, 0x6a, 0x65, 0x2f, 0xfd, 0x06, 0x1f, 0xfc, 0xc9, 0x20, 0x7f, 0x79, 0x20, 0x7f, 0x68, 0xb8, 0x20, 0x87, 0xe9, - 0x06, 0x2c, 0xfd, 0x06, 0xf0, 0xff, 0x0e, 0xf0, 0x7f, 0x84, 0x53, 0xcb, 0x02, 0x7a, 0x79, 0x72, 0xcc, 0x91, 0x9a, 0x06, 0x68, 0x41, 0xd0, 0x00, - 0xc5, 0xac, 0xb9, 0xb8, 0xd2, 0x08, 0xb8, 0x44, 0x68, 0xc5, 0x0e, 0x53, 0x7f, 0xb3, 0xff, 0x69, 0x06, 0x24, 0x01, 0x2d, 0x04, 0x40, 0x08, 0x04, - 0x38, 0x04, 0x42, 0x20, 0x05, 0x35, 0x04, 0x4f, 0xe0, 0x06, 0x28, 0x3f, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x35, 0x0f, 0x0f, 0x0b, 0x0d, - 0x00, 0x0e, 0x35, 0x35, 0x0c, 0x10, 0x40, 0x0f, 0x35, 0x14, 0x35, 0x35, 0x35, 0x01, 0x2f, 0xff, 0x78, 0x78, 0x3b, 0xb8, 0x30, 0x18, 0xd6, 0x30, - 0xc1, 0x06, 0x68, 0x37, 0x3f, 0xff, 0x44, 0x00, 0x6a, 0xac, 0x28, 0x3b, 0x62, 0x4f, 0xfd, 0x74, 0x28, 0x45, 0x0e, 0x10, 0x7f, 0x73, 0x00, 0x76, - 0x63, 0x28, 0xb9, 0x31, 0x03, 0x06, 0x31, 0x01, 0x47, 0x06, 0x80, 0x79, 0x5f, 0xff, 0x59, 0x81, 0x06, 0xe0, 0x7f, 0x09, 0x54, 0x03, 0x5e, 0xd0, - 0x63, 0x06, 0x9f, 0xf9, 0x02, 0xc0, 0xc9, 0x80, 0xbd, 0xf0, 0xd2, 0x10, 0x06, 0x93, 0x7f, 0x14, 0x22, 0x04, 0x36, 0x28, 0x3b, 0x31, 0x04, 0x43, - 0x28, 0x3f, 0x38, 0xe0, 0x06, 0x28, 0x3b, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x36, 0x0e, 0x0e, 0x0a, 0x13, 0x00, 0x40, 0x36, 0x36, 0x0a, - 0x0f, 0x12, 0x0e, 0x36, 0x14, 0x36, 0x36, 0x36, 0x01, 0x2f, 0xff, 0x79, 0x78, 0x3b, 0xbd, 0x30, 0x05, 0xde, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x88, - 0x3d, 0x53, 0x28, 0x35, 0x5b, 0x6d, 0x2f, 0x71, 0x6c, 0x06, 0x4c, 0x75, 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0x02, 0x22, 0x7d, - 0x6c, 0x9a, 0xcc, 0x91, 0x06, 0x9b, 0x3b, 0x8c, 0x01, 0xc1, 0xd0, 0xb9, 0xac, 0xb9, 0x44, 0xc5, 0x07, 0x33, 0x7f, 0x50, 0xeb, 0x06, 0x83, 0xff, - 0xe1, 0x06, 0x83, 0xff, 0x21, 0x04, 0x3e, 0x04, 0x07, 0x3c, 0x04, 0x30, 0x04, 0x3b, 0x06, 0x48, 0x39, 0x10, 0x07, 0x13, 0xff, 0x0e, 0xf5, 0x7f, - 0x00, 0x37, 0x37, 0x39, 0x37, 0x37, 0x38, 0x37, 0x37, 0x06, 0x36, 0x3a, 0x35, 0x37, 0x37, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x7a, 0x80, 0x78, 0x3b, - 0xa2, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0xe9, 0x82, 0x06, 0x88, 0x3b, 0x41, 0x00, 0x6e, 0x00, 0x64, 0x2f, 0xf5, 0x72, 0xfc, 0x20, 0x01, 0x06, 0x38, - 0x3b, 0xb0, 0x7f, 0x06, 0x38, 0x3b, 0x07, 0xb0, 0xff, 0x0e, 0x30, 0x7f, 0x89, 0x5b, 0x08, 0x53, 0x90, 0x14, 0x5c, 0x06, 0x9f, 0xf7, 0x48, 0xc5, - 0xc4, 0x18, 0xb3, 0x7c, 0xb7, 0x06, 0x98, 0xbb, 0x0e, 0xf2, 0x7f, 0x10, 0x04, 0x3d, 0x2b, 0x04, 0x34, 0x28, 0x3f, 0x40, 0x20, 0x01, 0x30, 0x06, - 0x28, 0x3d, 0x10, 0x06, 0xf3, 0xff, 0x80, 0x0e, 0xf5, 0x7f, 0x38, 0x01, 0x03, 0x01, 0x01, 0x02, 0x38, 0x81, 0x20, 0x06, 0x04, 0x01, 0x38, 0x38, - 0x38, 0x38, 0x01, 0x2f, 0xff, 0x44, 0x7b, 0x78, 0x3b, 0xb8, 0x30, 0xd6, 0x28, 0x39, 0xeb, 0x30, 0x6a, 0xbf, 0x20, 0x03, 0x06, 0x3d, 0x7d, 0x47, - 0x2f, 0xef, 0x62, 0x48, 0x37, 0x6c, 0x2a, 0x00, 0x74, 0x2f, 0xff, 0x72, 0x10, 0x06, 0x40, 0x7f, 0x69, 0x41, 0x7d, 0x65, 0xc0, 0x06, 0x29, 0xc1, - 0x06, 0xf1, 0xff, 0xf4, 0x76, 0x03, 0x5e, 0x57, 0x7f, 0x20, 0x40, 0x96, 0x06, 0x7f, 0xf7, 0xc0, 0xc9, 0x0c, 0xbe, 0x64, 0x18, 0xb8, 0x30, 0xd1, - 0x06, 0x7b, 0xbb, 0x0e, 0xf3, 0x7f, 0x13, 0x04, 0x38, 0x22, 0x04, 0x31, 0x48, 0x37, 0x3b, 0x04, 0x42, 0x28, 0x3d, 0x40, 0xe0, 0x05, 0xe8, 0x3f, - 0x10, 0x07, 0x54, 0xff, 0x0e, 0x96, 0x7f, 0x39, 0x14, 0x14, 0x0f, 0x12, 0x00, 0x15, 0x39, 0x39, 0x10, 0x17, 0x0e, 0x14, 0x39, 0x14, 0x39, 0x39, - 0x39, 0x01, 0x2f, 0xff, 0x7c, 0x78, 0x3b, 0xac, 0x30, 0x05, 0xfc, 0x30, 0xf3, 0x30, 0xb8, 0x20, 0x05, 0xf6, 0x06, 0x4d, 0x7d, 0x11, 0x47, 0x00, - 0x75, 0x46, 0xb3, 0x6e, 0x00, 0x73, 0x2f, 0xf7, 0x5c, 0x79, 0x06, 0xa0, 0x7f, 0x65, 0x06, 0x40, 0x81, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x39, - 0x68, 0x20, 0x7f, 0x89, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x74, 0xac, 0xc0, 0x06, 0xc9, 0x20, 0x00, 0x2c, 0xc1, 0x06, 0x98, 0x3b, 0x0e, 0xd2, 0x7f, - 0x13, 0x23, 0x04, 0x35, 0x28, 0x39, 0x3d, 0x04, 0x41, 0x28, 0x43, 0x10, 0x06, 0x31, 0x7f, 0x80, 0x10, 0x06, 0xf4, 0xff, 0x3a, 0x16, 0x16, 0x11, - 0x15, 0x17, 0x3a, 0x00, 0x3a, 0x12, 0x19, 0x0d, 0x16, 0x3a, 0x3a, 0x3a, 0x57, 0x3a, 0x01, 0x2f, 0xff, 0x7d, 0x78, 0x3b, 0xde, 0x28, 0x39, 0x06, - 0x58, 0x35, 0x5f, 0xff, 0x50, 0x49, 0x28, 0x33, 0x6c, 0x2e, 0xf1, 0x20, 0x00, 0x6f, 0x00, 0x55, 0x66, 0x20, 0x05, 0x4d, 0x2f, 0xfb, 0x6e, 0x05, - 0xaf, 0xfb, 0xce, 0x60, 0x7d, 0x7a, 0x64, 0x40, 0x83, 0x05, 0xf0, 0x7d, 0x07, 0x10, 0xff, 0x31, 0x7f, 0x6f, 0x2f, 0xf3, 0x61, 0xbc, 0x41, 0x03, - 0x69, 0x06, 0x01, 0x81, 0x51, 0xff, 0x50, 0x7d, 0x06, 0x31, 0x81, 0x6c, 0x9a, 0x12, 0x69, 0x60, 0x9b, 0x06, 0xa2, 0xff, 0xe8, 0xb9, 0x06, 0xb8, - 0x39, 0x00, 0xc4, 0x06, 0x22, 0xf1, 0xf3, 0xff, 0x6c, 0x00, 0x68, 0x06, 0xa1, 0xff, 0x1c, 0x04, 0x41, 0x4d, 0x28, 0x39, 0x20, 0x00, 0x28, 0x00, - 0x3e, 0x28, 0x3f, 0x41, 0x42, 0x28, 0x47, 0x3e, 0x04, 0x32, 0x04, 0x29, 0x0d, 0xc3, 0xff, 0x80, 0x10, 0x0e, 0xb0, 0x7f, 0x3b, 0x1b, 0x18, 0x15, - 0x19, 0x1b, 0x3b, 0x09, 0x3b, 0x22, 0x1b, 0x26, 0x20, 0x05, 0x3b, 0x3b, 0x01, 0x2f, 0xff, 0x40, 0x7e, 0x78, 0x3b, 0xb8, 0x30, 0xe3, 0x30, 0xfc, - 0x30, 0x6e, 0xb8, 0x20, 0x03, 0x06, 0x58, 0x41, 0x4a, 0x4f, 0xf5, 0x06, 0x5f, 0x73, 0x10, 0x0f, 0x30, 0x7f, 0xfd, 0x10, 0x6c, 0x7f, 0x89, 0x06, - 0xa7, 0x3a, 0x00, 0x00, 0xc8, 0xc0, 0x6b, 0xc9, 0x06, 0xb8, 0x3d, 0x07, 0x13, 0x7f, 0xe9, 0x43, 0xff, 0x69, 0x2c, 0x33, 0x06, 0x3f, 0xf7, 0x04, - 0x14, 0x04, 0x36, 0x04, 0x35, 0x28, 0x31, 0x41, 0x04, 0x20, 0x38, 0x04, 0x10, 0x1e, 0x34, 0xff, 0x3c, 0x1d, 0x1d, 0x17, 0x1b, 0x00, 0x1e, 0x3c, - 0x3c, 0x18, 0x20, 0x11, 0x1d, 0x3c, 0x14, 0x3c, 0x3c, 0x3c, 0x01, 0x2f, 0xff, 0x7f, 0x78, 0x3b, 0xe2, 0x30, 0x0a, 0xca, 0x30, 0xb3, 0x30, 0x06, - 0xbc, 0xf7, 0x6f, 0x2f, 0xe9, 0x61, 0x3a, 0x00, 0x63, 0x2f, 0x77, 0x10, 0x06, 0xf0, 0x7f, 0x3d, 0x7d, 0x50, 0x29, 0xc9, 0x69, 0xaa, 0x2f, 0xf9, - 0x63, 0x25, 0xcd, 0x70, 0x2e, 0x93, 0x74, 0x40, 0x17, 0x64, 0xc4, 0x25, 0xdb, 0x04, 0x5d, 0x8b, 0x4d, 0x00, 0xf3, 0x06, 0xc1, 0xff, 0x69, 0x64, - 0x08, 0xb3, 0x7e, 0xe5, 0x54, 0x06, 0x9f, 0xf7, 0xa8, 0xba, 0x98, 0x18, 0xb0, 0x54, 0xcf, 0x0e, 0xb3, 0x7f, 0x06, 0xd1, 0xff, 0x1c, 0x04, 0x3e, - 0x03, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x3a, 0x20, 0x07, 0x10, 0x0e, 0xf4, 0xff, 0x80, 0x0e, 0x36, 0xff, 0x3d, 0x27, 0x27, 0x22, 0x25, 0x28, 0x3d, - 0x00, 0x3d, 0x24, 0x2b, 0x25, 0x27, 0x3d, 0x3d, 0x3d, 0x48, 0x3d, 0x01, 0x2f, 0xff, 0xa9, 0x22, 0x6f, 0xff, 0xa4, 0x30, 0xf3, 0x2f, 0x30, 0xc9, - 0x06, 0xa8, 0x3b, 0x49, 0x28, 0x39, 0x36, 0x99, 0x06, 0x5c, 0x75, 0x70, 0x7f, 0x5c, 0x65, 0x07, 0x00, 0xff, 0x65, 0x29, 0x41, 0x0e, 0x91, 0x7f, - 0x06, 0x91, 0xff, 0x70, 0x53, 0x20, 0xa6, 0x5e, 0x06, 0x9b, 0x39, 0x00, 0x00, 0x78, 0xc7, 0xc4, 0x6a, 0xb3, 0x06, 0xb0, 0x7f, 0x06, 0xf3, 0x7f, - 0xcd, 0x06, 0xe3, 0xff, 0x18, 0x28, 0x39, 0x34, 0x0e, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x48, 0x39, 0x0f, 0x13, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x3e, - 0x00, 0x19, 0x19, 0x12, 0x16, 0x19, 0x3e, 0x3e, 0x16, 0x24, 0x1c, 0x15, 0x20, 0x05, 0x3e, 0x3e, 0x01, 0x2f, 0xff, 0xb8, 0x01, 0xa0, 0x6f, 0xff, - 0xb5, 0x28, 0x3b, 0xde, 0x30, 0xea, 0x30, 0xce, 0xab, 0x06, 0x68, 0x3f, 0x53, 0x2f, 0xf3, 0x6e, 0x2e, 0xf1, 0x4d, 0x2f, 0xfb, 0x5e, 0xf1, 0xe3, - 0x05, 0xdf, 0xff, 0x30, 0x7f, 0x3f, 0x67, 0x74, 0x00, 0x2d, 0xa0, 0x83, 0x0d, 0xd0, 0xff, 0x80, 0x0e, 0xb0, 0x7f, 0x23, 0x57, 0x6c, 0x9a, 0x9b, - 0x52, 0xfa, 0x40, 0x8b, 0x06, 0x7f, 0xf9, 0xb0, 0xc0, 0xc8, 0xb9, 0xac, 0xb9, 0x36, 0x78, 0xb1, 0x06, 0x7b, 0xbd, 0x07, 0x13, 0x7f, 0xe3, 0x2f, - 0x79, 0xb3, 0xff, 0x68, 0x88, 0x05, 0xcf, 0x81, 0x21, 0x04, 0x30, 0x28, 0x3d, 0x2d, 0x00, 0x1c, 0xa3, 0x20, 0x07, 0x40, 0x28, 0x43, 0x3d, 0x04, - 0x3e, 0x05, 0xc8, 0x45, 0x10, 0x06, 0xf3, 0xff, 0x80, 0x0e, 0xf5, 0x7f, 0x3f, 0x33, 0x35, 0x30, 0x33, 0x36, 0x3f, 0x00, 0x3f, 0x31, 0x38, 0x30, - 0x33, 0x3f, 0x3f, 0x3f, 0x50, 0x3f, 0x01, 0x2f, 0xff, 0xb9, 0x78, 0x3b, 0xd0, 0x30, 0xc1, 0x30, 0x6a, 0xab, 0x28, 0x3f, 0x06, 0x7f, 0x78, 0x56, - 0x2e, 0xf1, 0x74, 0x2f, 0x77, 0x63, 0xa3, 0x68, 0x43, 0x43, 0x2f, 0x83, 0x74, 0x00, 0x79, 0x06, 0x60, 0x7f, 0x06, 0x90, 0xff, 0x55, 0x6b, 0x49, - 0x43, 0x73, 0x28, 0xc3, 0x61, 0x2f, 0x87, 0x74, 0x06, 0x61, 0x7f, 0xa2, 0x35, 0xc5, 0x28, 0x61, 0x83, 0x74, 0x00, 0xe0, 0x29, 0xd3, 0x64, 0x03, - 0x00, 0x65, 0x00, 0x6c, 0x00, 0x29, 0x05, 0x80, 0x7f, 0x05, 0xff, 0xff, 0x02, 0xb5, 0x68, 0x82, 0x84, 0x88, 0x51, 0x06, 0x9f, 0xf9, 0x14, 0x07, - 0xbc, 0xf0, 0xd2, 0x78, 0xce, 0x06, 0x90, 0x7f, 0xb3, 0x7f, 0xb2, 0x81, 0xab, 0x06, 0xb2, 0x7f, 0x63, 0x2f, 0x87, 0x64, 0x43, 0x07, 0x65, 0x04, - 0xa2, 0x79, 0x5f, 0xff, 0x57, 0x12, 0x28, 0x3b, 0x42, 0x28, 0x33, 0x3a, 0x48, 0x43, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x20, 0x40, 0x40, - 0x20, 0x01, 0x3f, 0x40, 0x40, 0x3c, 0x40, 0x64, 0x09, 0x40, 0x0a, 0x01, 0x2f, 0xff, 0x41, 0x08, 0x6f, 0xff, 0xaa, 0x30, 0x00, 0xfc, 0x30, 0xb9, - 0x30, 0xc8, 0x30, 0xe9, 0x30, 0x11, 0xea, 0x30, 0xa2, 0x06, 0x28, 0x41, 0x41, 0x00, 0x75, 0x47, 0x31, 0x55, 0x72, 0x2f, 0xff, 0x6c, 0x2f, 0xf3, - 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x07, 0x00, 0x7f, 0xe0, 0x05, 0xd8, 0xc1, 0x07, 0xf1, 0x7f, 0x05, 0xf1, 0xff, 0xb3, 0x6f, 0x27, 0x59, 0x29, 0x10, - 0x52, 0x9a, 0x4e, 0x06, 0x7f, 0xf7, 0x24, 0xc6, 0xa4, 0xc2, 0x00, 0xb8, 0xd2, 0x08, 0xb8, 0x7c, 0xc7, 0xac, 0xb9, 0x2a, 0x44, 0xc5, 0x07, 0x13, - 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x06, 0x43, 0xff, 0x10, 0x0a, 0x04, 0x32, 0x04, 0x41, 0x28, 0x3d, 0x40, 0x28, 0x43, 0x3b, 0xb8, 0x28, 0x43, - 0x4f, 0x05, 0xe8, 0x3f, 0x0e, 0xf3, 0x7f, 0x10, 0x07, 0x00, 0xff, 0x02, 0x04, 0x03, 0x10, 0x02, 0x03, 0x41, 0x20, 0x06, 0x00, 0x02, 0x41, 0x41, - 0x24, 0x41, 0x41, 0x01, 0x2f, 0xff, 0x5f, 0x10, 0x6f, 0xff, 0xcb, 0x30, 0x50, 0xe5, 0x28, 0x3d, 0xb8, 0x28, 0x41, 0xe9, 0x30, 0xf3, 0x30, 0x55, - 0xc9, 0x06, 0x08, 0x3d, 0x4e, 0x2e, 0xd7, 0x77, 0x2e, 0xed, 0x5a, 0x2e, 0xdf, 0xf5, 0x38, 0x3d, 0x3f, 0xfd, 0x05, 0x9c, 0xf5, 0x30, 0x7f, 0x6f, - 0x28, 0xbd, 0x76, 0x4f, 0x5d, 0x57, 0x6c, 0x2f, 0x63, 0x2d, 0x20, 0x89, 0xe9, 0x80, 0x87, 0x05, 0x18, 0x49, 0x30, 0xff, 0xba, 0x39, 0x3d, 0x65, - 0x4f, 0xdf, 0x05, 0xf0, 0xfd, 0x31, 0x7f, 0x75, 0x2f, 0xed, 0x76, 0xfa, 0x2f, 0xfd, 0x51, 0x83, 0x71, 0x81, 0x05, 0x79, 0xc3, 0x30, 0x7f, 0x65, - 0x06, 0xa0, 0x7f, 0xb0, 0x04, 0x65, 0x7f, 0x89, 0x70, 0x51, 0x06, 0x9f, 0xf7, 0x74, 0xb2, 0x02, 0xc8, 0xc9, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x78, - 0xbb, 0x4e, 0xbe, 0x4b, 0x2f, 0x75, 0x23, 0x83, 0x32, 0xf9, 0x06, 0x12, 0x85, 0x33, 0x7f, 0xb2, 0x7d, 0xe2, 0xc5, 0x43, 0xff, 0x05, 0x9c, 0x43, - 0x1d, 0x04, 0x3e, 0x28, 0x3d, 0x30, 0x28, 0x33, 0x04, 0x20, 0x00, 0x17, 0x04, 0x35, 0x28, 0x3f, 0x30, 0x04, 0x1c, 0x3d, 0x04, 0x34, 0x05, 0x88, - 0x45, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x42, 0x2c, 0x00, 0x2d, 0x26, 0x2b, 0x2e, 0x42, 0x42, 0x29, 0x30, 0x02, 0x2a, 0x2c, 0x42, 0x42, - 0x42, 0x42, 0x00, 0xff, 0xff, 0x02, 0x95, 0x5f, 0xff, 0x4d, 0x1b, 0x6f, 0xff, 0xd5, 0x48, 0x37, 0xb9, 0x06, 0x08, 0x37, 0xa3, 0x7f, 0xff, 0x46, - 0x4f, 0xf5, 0x6e, 0x00, 0x63, 0x06, 0x0f, 0xf5, 0x07, 0xd0, 0x7f, 0x51, 0x6b, 0x2f, 0xfd, 0x65, 0x2f, 0xfb, 0x63, 0x00, 0x68, 0x06, 0x61, 0x7f, - 0xc2, 0x06, 0x1f, 0xf7, 0x07, 0x30, 0x7f, 0xd5, 0x6c, 0xfd, 0x56, 0x06, 0x98, 0x3d, 0x00, 0x01, 0x00, 0x04, 0xd5, 0x91, 0xb7, 0xa4, 0xc2, 0x06, - 0x98, 0xbf, 0x8d, 0xb2, 0x7f, 0x69, 0x00, 0x6a, 0x22, 0x87, 0x06, 0x53, 0xff, 0xe7, 0x06, 0x42, 0x7d, 0x05, 0x00, 0x00, 0x24, 0x04, 0x40, 0x48, - 0x31, 0x46, 0x05, 0x88, 0x31, 0xc0, 0x10, 0x00, 0x54, 0xff, 0x10, 0x06, 0x70, 0xff, 0x0c, 0x12, 0x13, 0x0e, 0x10, 0x14, 0x00, 0x0c, 0x0c, 0x0f, - 0x16, 0x39, 0x12, 0x0c, 0x0c, 0x24, 0x0c, 0x0c, 0x01, 0x2f, 0xff, 0x6e, 0x0d, 0x6f, 0xff, 0xa4, 0x30, 0x14, 0xae, 0x30, 0xea, 0x06, 0xa8, 0x3b, - 0x55, 0x2f, 0xe3, 0x69, 0x00, 0x54, 0x74, 0x2f, 0xfb, 0x64, 0x2e, 0xfd, 0x4b, 0x2d, 0x09, 0x6e, 0x00, 0x45, 0x67, 0x2f, 0xf5, 0x6f, 0x00, 0x6d, - 0x05, 0x4f, 0x83, 0x52, 0x2f, 0x79, 0x57, 0x79, 0x2f, 0xf3, 0x75, 0x20, 0x6f, 0x65, 0x2d, 0x7f, 0x50, 0x8f, 0x05, 0x9f, 0xfe, 0x75, 0x56, 0x2f, - 0xef, 0x58, 0x35, 0x31, 0x07, 0x67, 0x41, 0x09, 0x73, 0x41, 0x09, 0x6a, 0xf6, 0x60, 0x11, 0x04, 0xd8, 0x53, 0x52, 0x2f, 0xf9, 0x67, 0x2f, 0xed, - 0x6f, 0xdf, 0x2f, 0xfb, 0x71, 0x8b, 0x6f, 0x05, 0xaf, 0x8a, 0x30, 0x7f, 0x31, 0xf3, 0x90, 0x7f, 0x31, 0xfb, 0x90, 0x05, 0x9f, 0xff, 0xf1, 0x82, - 0x06, 0xd8, 0x3b, 0x01, 0xc6, 0x6d, 0xad, 0xf7, 0x06, 0xb8, 0xbb, 0x72, 0x7f, 0x52, 0x7d, 0x53, 0x83, 0x6f, 0x43, 0x93, 0x05, 0x58, 0x4f, 0x06, - 0xf1, 0xff, 0x04, 0x12, 0x04, 0x35, 0x04, 0x3b, 0x28, 0x37, 0x3a, 0x04, 0x11, 0x3e, 0x04, 0x31, 0x28, 0x47, 0x38, 0x04, 0x42, 0x48, 0x4b, 0xe0, - 0x05, 0x78, 0x49, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x2c, 0x3f, 0x33, 0x41, 0x2f, 0x00, 0x32, 0x2c, 0x2c, 0x3d, 0x34, 0x0a, 0x3f, 0x2c, - 0x1a, 0x2c, 0x2c, 0x2c, 0x01, 0x24, 0xb1, 0x64, 0xb8, 0x03, 0x60, 0x06, 0x05, 0x00, 0x2a, 0x03, 0x04, 0x01, 0x01, 0x2c, 0x05, 0x01, 0x00, 0x03, - 0x01, 0x01, 0x01, 0x01, 0x02, 0x05, 0x07, 0x00, 0x04, 0x05, 0x06, 0x02, 0x02, 0x04, 0x07, 0x05, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x03, 0x06, - 0x08, 0x00, 0x05, 0x06, 0x07, 0x03, 0x03, 0x05, 0x08, 0x07, 0x00, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x07, 0x09, 0x00, 0x06, 0x07, 0x08, 0x04, - 0x04, 0x06, 0x09, 0x08, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x05, 0x08, 0x0a, 0x01, 0x07, 0x08, 0x09, 0x05, 0x05, 0x07, 0x0a, 0x20, 0x28, 0x00, - 0x05, 0x05, 0x05, 0x06, 0x0a, 0x0c, 0x18, 0x0b, 0x00, 0x0c, 0x06, 0x06, 0x19, 0x0d, 0x3a, 0x0a, 0x06, 0x00, 0x06, 0x06, 0x06, 0x07, 0x0b, 0x0b, - 0x42, 0x0a, 0x03, 0x0b, 0x07, 0x07, 0x08, 0x0c, 0x1a, 0x20, 0x05, 0x30, 0x07, 0x00, 0x31, 0x3d, 0x30, 0x33, 0x08, 0x08, 0x3a, 0x35, 0x00, 0x3d, - 0x0c, 0x08, 0x08, 0x08, 0x08, 0x09, 0x0d, 0x00, 0x0d, 0x08, 0x0c, 0x0d, 0x09, 0x09, 0x09, 0x0e, 0x40, 0x10, 0x30, 0x05, 0x09, 0x0a, 0x10, 0x11, - 0x0c, 0x0e, 0x00, 0x12, 0x0a, 0x0a, 0x0d, 0x14, 0x41, 0x10, 0x0a, 0x00, 0x0a, 0x0a, 0x0a, 0x0b, 0x11, 0x12, 0x0d, 0x0f, 0x00, 0x13, 0x0b, 0x0b, - 0x0e, 0x15, 0x38, 0x11, 0x0b, 0x10, 0x0b, 0x0b, 0x0b, 0xf9, 0x2b, 0x0d, 0x13, 0x02, 0x09, 0x00, 0x11, 0x01, 0x0d, 0x0d, 0x0b, 0x02, 0x0c, 0x13, - 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x15, 0x15, 0x10, 0x00, 0x14, 0x16, 0x0e, 0x0e, 0x11, 0x18, 0x0f, 0x15, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, - 0x17, 0x17, 0x3f, 0x00, 0x3f, 0x18, 0x0f, 0x0f, 0x13, 0x1a, 0x0b, 0x17, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x18, 0x1b, 0x14, 0x00, 0x18, 0x1c, - 0x10, 0x10, 0x15, 0x1e, 0x17, 0x18, 0x00, 0x10, 0x10, 0x10, 0x10, 0x11, 0x1a, 0x1a, 0x13, 0x01, 0x17, 0x1a, 0x11, 0x11, 0x14, 0x1d, 0x16, 0x20, - 0x05, 0x00, 0x11, 0x11, 0x12, 0x1c, 0x1c, 0x16, 0x1a, 0x1d, 0x00, 0x12, 0x12, 0x17, 0x1f, 0x19, 0x1c, 0x12, 0x12, 0x00, 0x12, 0x12, 0x13, 0x1e, - 0x1f, 0x1a, 0x1d, 0x20, 0x00, 0x13, 0x13, 0x1b, 0x22, 0x1b, 0x1e, 0x13, 0x13, 0x00, 0x13, 0x13, 0x14, 0x1f, 0x1e, 0x19, 0x1c, 0x1f, 0x08, 0x14, - 0x14, 0x1a, 0x21, 0x30, 0x05, 0x14, 0x14, 0x15, 0x00, 0x20, 0x20, 0x1b, 0x1e, 0x21, 0x15, 0x15, 0x1c, 0x00, 0x23, 0x1e, 0x20, 0x15, 0x15, 0x15, - 0x15, 0x16, 0x40, 0x21, 0x20, 0x18, 0x22, 0x16, 0x16, 0x1d, 0x24, 0x1d, 0x00, 0x21, 0x16, 0x16, 0x16, 0x16, 0x17, 0x22, 0x22, 0x00, 0x1d, 0x20, - 0x23, 0x17, 0x17, 0x1e, 0x25, 0x1f, 0x00, 0x22, 0x17, 0x17, 0x17, 0x17, 0x18, 0x23, 0x23, 0x00, 0x21, 0x21, 0x24, 0x18, 0x18, 0x1f, 0x26, 0x21, - 0x00, 0x23, 0x18, 0x18, 0x18, 0x18, 0x19, 0x25, 0x25, 0x00, 0x1f, 0x23, 0x26, 0x19, 0x19, 0x21, 0x28, 0x23, 0x00, 0x25, 0x19, 0x19, 0x19, 0x19, - 0x1a, 0x28, 0x28, 0x00, 0x23, 0x26, 0x29, 0x1a, 0x1a, 0x25, 0x2c, 0x3c, 0x00, 0x28, 0x1a, 0x1a, 0x1a, 0x1a, 0x1b, 0x29, 0x29, 0x00, 0x24, 0x27, - 0x2a, 0x1b, 0x1b, 0x26, 0x2a, 0x24, 0x00, 0x29, 0x1b, 0x1b, 0x1b, 0x1b, 0x1c, 0x2a, 0x2a, 0x00, 0x25, 0x28, 0x2b, 0x1c, 0x1c, 0x27, 0x2d, 0x27, - 0x00, 0x2a, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x2b, 0x2e, 0x00, 0x27, 0x2c, 0x2f, 0x1d, 0x1d, 0x28, 0x31, 0x29, 0x00, 0x2b, 0x1d, 0x1d, 0x1d, 0x1d, - 0x1e, 0x2e, 0x2c, 0x00, 0x29, 0x2a, 0x2d, 0x1e, 0x1e, 0x2b, 0x2f, 0x2b, 0x00, 0x2e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x2f, 0x2f, 0x00, 0x2b, 0x2d, - 0x30, 0x1f, 0x1f, 0x2d, 0x32, 0x2c, 0x00, 0x2f, 0x1f, 0x1f, 0x1f, 0x1f, 0x20, 0x30, 0x30, 0x00, 0x2c, 0x2e, 0x31, 0x20, 0x20, 0x2e, 0x33, 0x2d, - 0x00, 0x30, 0x20, 0x20, 0x20, 0x20, 0x21, 0x31, 0x32, 0x00, 0x2d, 0x31, 0x34, 0x21, 0x21, 0x2f, 0x36, 0x2f, 0x00, 0x31, 0x21, 0x21, 0x21, 0x21, - 0x22, 0x32, 0x34, 0x00, 0x2e, 0x32, 0x35, 0x22, 0x22, 0x30, 0x37, 0x2e, 0x00, 0x32, 0x22, 0x22, 0x22, 0x22, 0x23, 0x34, 0x36, 0x00, 0x33, 0x34, - 0x37, 0x23, 0x23, 0x32, 0x39, 0x32, 0x00, 0x34, 0x23, 0x23, 0x23, 0x23, 0x24, 0x35, 0x37, 0x00, 0x35, 0x35, 0x0f, 0x24, 0x24, 0x34, 0x11, 0x33, - 0x00, 0x35, 0x24, 0x24, 0x24, 0x24, 0x25, 0x36, 0x38, 0x00, 0x36, 0x36, 0x10, 0x25, 0x25, 0x33, 0x12, 0x34, 0x00, 0x36, 0x25, 0x25, 0x25, 0x25, - 0x26, 0x38, 0x00, 0x00, 0x39, 0x39, 0x3a, 0x26, 0x26, 0x40, 0x00, 0x42, 0x00, 0x38, 0x26, 0x26, 0x26, 0x26, 0x27, 0x39, 0x10, 0x00, 0x38, 0x38, - 0x11, 0x27, 0x27, 0x37, 0x13, 0x18, 0x00, 0x39, 0x27, 0x27, 0x27, 0x27, 0x28, 0x3b, 0x3d, 0x00, 0x3b, 0x3d, 0x39, 0x28, 0x28, 0x38, 0x3b, 0x31, - 0x01, 0x3b, 0x28, 0x28, 0x28, 0x28, 0x29, 0x3c, 0x20, 0x08, 0x02, 0x3c, 0x29, 0x29, 0x41, 0x3d, 0x3f, 0x20, 0x05, 0x29, 0x00, 0x29, 0x2a, 0x3d, - 0x3c, 0x32, 0x3c, 0x3d, 0x2a, 0x08, 0x2a, 0x42, 0x3e, 0x3e, 0x20, 0x05, 0x2a, 0x2a, 0x2b, 0x00, 0x3e, 0x3f, 0x3e, 0x3e, 0x3e, 0x2b, 0x2b, 0x3b, - 0x24, 0x3f, 0x37, 0x20, 0x05, 0x2b, 0x2b, 0xf2, 0xef, 0x2d, 0x41, 0x00, 0x41, 0x2f, 0x41, 0x41, 0x2d, 0x2d, 0x3e, 0x41, 0x40, 0x13, 0x20, 0x05, - 0x2d, 0x2d, 0x2e, 0x42, 0x42, 0x34, 0x01, 0x42, 0x42, 0x2e, 0x2e, 0x3f, 0x42, 0x14, 0x20, 0x05, 0x00, 0x2e, 0x2e, 0x2f, 0x04, 0x06, 0x02, 0x04, - 0x05, 0x10, 0x2f, 0x2f, 0x03, 0x20, 0x06, 0x2f, 0x2f, 0x2f, 0x2f, 0x00, 0x30, 0x26, 0x26, 0x20, 0x24, 0x27, 0x30, 0x30, 0x00, 0x23, 0x29, 0x20, - 0x26, 0x30, 0x30, 0x30, 0x30, 0x00, 0x31, 0x24, 0x24, 0x1e, 0x22, 0x25, 0x31, 0x31, 0x01, 0x20, 0x27, 0x22, 0x24, 0x31, 0x31, 0x31, 0x21, 0x0d, - 0x00, 0x2b, 0x28, 0x29, 0x2c, 0x32, 0x32, 0x2a, 0x2e, 0x00, 0x28, 0x2d, 0x32, 0x32, 0x32, 0x32, 0x33, 0x09, 0x00, 0x3e, 0x3c, 0x09, 0x0a, 0x33, - 0x33, 0x39, 0x0b, 0x00, 0x3b, 0x09, 0x33, 0x33, 0x33, 0x33, 0x34, 0x3a, 0x00, 0x3a, 0x3a, 0x3a, 0x3b, 0x34, 0x34, 0x35, 0x3c, 0x08, 0x36, 0x3a, - 0x34, 0x34, 0x20, 0x07, 0x0f, 0x0f, 0x0b, 0x00, 0x0d, 0x0e, 0x35, 0x35, 0x0c, 0x10, 0x40, 0x0f, 0x00, 0x35, 0x35, 0x35, 0x35, 0x36, 0x0e, 0x0e, - 0x0a, 0x00, 0x13, 0x40, 0x36, 0x36, 0x0a, 0x0f, 0x12, 0x0e, 0x00, 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x39, 0x37, 0x00, 0x37, 0x38, 0x37, 0x37, - 0x36, 0x3a, 0x35, 0x37, 0x52, 0x37, 0x20, 0x01, 0x38, 0x33, 0x66, 0x02, 0x38, 0x20, 0x06, 0x04, 0x00, 0x01, 0x38, 0x38, 0x38, 0x38, 0x39, 0x14, - 0x14, 0x00, 0x0f, 0x12, 0x15, 0x39, 0x39, 0x10, 0x17, 0x0e, 0x10, 0x14, 0x39, 0x39, 0x21, 0x3a, 0x16, 0x16, 0x11, 0x15, 0x01, 0x17, 0x3a, 0x3a, - 0x12, 0x19, 0x0d, 0x16, 0x40, 0x6a, 0x00, 0x1b, 0x18, 0x15, 0x19, 0x1b, 0x3b, 0x3b, 0x22, 0x20, 0x1b, 0x26, 0x20, 0x05, 0x3b, 0x3b, 0x3c, 0x1d, - 0x1d, 0x00, 0x17, 0x1b, 0x1e, 0x3c, 0x3c, 0x18, 0x20, 0x11, 0x00, 0x1d, 0x3c, 0x3c, 0x3c, 0x3c, 0x3d, 0x27, 0x27, 0x00, 0x22, 0x25, 0x28, 0x3d, - 0x3d, 0x24, 0x2b, 0x25, 0x00, 0x27, 0x3d, 0x3d, 0x3d, 0x3d, 0x3e, 0x19, 0x19, 0x00, 0x12, 0x16, 0x19, 0x3e, 0x3e, 0x16, 0x1c, 0x15, 0x80, 0x20, - 0x05, 0x3e, 0x3e, 0x3f, 0x33, 0x35, 0x30, 0x33, 0x00, 0x36, 0x3f, 0x3f, 0x31, 0x38, 0x30, 0x33, 0x3f, 0x06, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x20, - 0x01, 0x20, 0x05, 0x3c, 0x20, 0x40, 0x09, 0x40, 0x0a, 0x41, 0x02, 0x04, 0x03, 0x02, 0x20, 0x03, 0x41, 0x20, 0x06, 0x00, 0x02, 0x41, 0x41, 0x41, - 0x02, 0x41, 0x42, 0x2c, 0x2d, 0x26, 0x2b, 0x21, 0x44, 0x29, 0x01, 0x30, 0x2a, 0x2c, 0x42, 0x42, 0x42, 0x42, 0x6f, 0xff, 0x40, 0x40, 0x3f, 0xff, - 0x11, 0x90, 0x87, 0x01, 0x11, 0x2f, 0x00, 0x00, 0x30, 0x01, 0x01, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x60, 0x19, 0x63, 0x63, 0x00, 0x00, 0x00, 0x02, 0x01, 0x71, 0x67, 0xac, 0x4e, 0xfd, 0x40, 0x90, 0x06, 0x98, 0x1b, 0x54, 0x00, 0x6f, 0x00, - 0x6b, 0x00, 0x69, 0x79, 0x20, 0x05, 0x0e, 0xb0, 0x7f, 0x69, 0x10, 0x06, 0x80, 0xff, 0x1c, 0x4e, 0x06, 0xd2, 0xff, 0x07, 0xc4, 0xb3, 0xc4, 0xcf, - 0x20, 0x20, 0x05, 0x06, 0xd3, 0x7f, 0x06, 0xb2, 0x7f, 0x04, 0xf3, 0x00, 0x71, 0x00, 0x75, 0x06, 0x83, 0x01, 0x22, 0x04, 0x07, 0x3e, 0x04, 0x3a, - 0x04, 0x38, 0x20, 0x05, 0x06, 0x5d, 0x1f, 0x10, 0x07, 0x55, 0x7f, 0x98, 0x0e, 0x96, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x03, 0x01, 0x17, - 0x0a, 0x53, 0x77, 0x6d, 0x53, 0x06, 0xa8, 0x17, 0x48, 0x48, 0x17, 0x6b, 0x2e, 0x00, 0x61, 0x27, 0x1b, 0x64, 0x06, 0x28, 0x1d, 0x10, 0x07, 0x50, - 0x7f, 0x06, 0x71, 0xfd, 0x00, 0x40, 0x00, 0x06, 0xf2, 0xff, 0x4b, 0xd6, 0x74, 0xce, 0x74, 0xc7, 0xd0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x25, - 0x48, 0x17, 0x3a, 0x04, 0x30, 0x04, 0x19, 0x39, 0x04, 0x34, 0x06, 0x28, 0x1d, 0x10, 0x16, 0xf5, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x00, 0x9e, 0x1e, - 0x80, 0x64, 0x00, 0x00, 0x04, 0x01, 0x02, 0x52, 0x97, 0xee, 0x68, 0x0c, 0x77, 0x06, 0x9d, 0x2f, 0x41, 0xae, 0x2f, 0xaf, 0x6d, 0x2f, 0xb3, 0x72, - 0x2f, 0x33, 0x10, 0x16, 0x30, 0x7f, 0x32, 0xff, 0xbf, 0x40, 0x53, 0x06, 0x9d, 0xaf, 0x44, 0xc5, 0x24, 0xc6, 0xa8, 0xba, 0x02, 0xac, 0xb9, 0x20, - 0x00, 0x04, 0xd6, 0x10, 0x06, 0x33, 0x7f, 0x10, 0xa3, 0x28, 0x17, 0x3c, 0x28, 0x1b, 0x40, 0x04, 0x38, 0x06, 0x08, 0x13, 0x72, 0x7f, 0x24, 0x23, - 0x7e, 0x10, 0x16, 0x95, 0x7f, 0x03, 0x03, 0xd0, 0x01, 0x06, 0x1d, 0x40, 0x1a, 0x28, 0x17, 0x05, 0x01, 0xa9, 0x5c, 0x4b, 0x62, 0x88, 0x06, 0xb8, - 0x17, 0x49, 0x00, 0x77, 0x2f, 0xab, 0x74, 0x00, 0x65, 0xe0, 0x10, 0x16, 0x60, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x74, 0xc7, 0x40, 0xc6, 0x4c, - 0x60, 0xd1, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x18, 0x04, 0x32, 0x04, 0x30, 0x0f, 0x04, 0x42, 0x04, 0x4d, 0x06, 0x48, 0x15, 0x52, 0x7f, 0x06, - 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x04, 0x04, 0xd0, 0x01, 0x3a, 0x1c, 0x62, 0x28, 0x17, 0x06, 0x05, 0x01, 0xae, 0x5b, 0xce, 0x57, 0x06, - 0xb8, 0x17, 0x4d, 0x2f, 0xa7, 0x5b, 0x79, 0x28, 0x19, 0x67, 0x06, 0x6f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xab, 0x22, 0xff, 0x06, 0xb8, 0x17, 0x03, - 0xf8, 0xbb, 0x7c, 0xc5, 0x30, 0xae, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x01, 0x1c, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x33, 0x20, 0x05, 0xf2, 0x06, - 0x5f, 0xb3, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x05, 0x05, 0xd0, 0x01, 0x34, 0x20, 0x1b, 0x32, 0x28, 0x17, 0x07, 0x01, 0xcb, - 0x79, 0x30, 0x45, 0x75, 0x06, 0xb8, 0x17, 0x41, 0x00, 0x6b, 0x28, 0x19, 0x74, 0x2f, 0xb3, 0xe0, 0x10, 0x16, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, - 0x17, 0x44, 0xc5, 0xa4, 0xd0, 0xc0, 0x62, 0xd0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x3a, 0x28, 0x19, 0x42, 0x3c, 0x04, 0x30, 0x06, - 0x68, 0x17, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x06, 0x06, 0x80, 0xd0, 0x01, 0x3d, 0x1c, 0xa0, 0x63, 0x00, 0x00, 0x08, 0x05, - 0x01, 0x71, 0x5c, 0x62, 0x5f, 0x06, 0xb8, 0x17, 0x59, 0x2f, 0xab, 0x5e, 0x6d, 0x4f, 0xaf, 0x61, 0x06, 0x48, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0x32, - 0xff, 0x06, 0xb8, 0x17, 0x7c, 0x06, 0xc5, 0xc8, 0xb9, 0x00, 0xac, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x2f, 0x2f, 0x04, 0x3c, 0x28, 0x13, 0x33, - 0x28, 0x17, 0x06, 0x58, 0x1b, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x07, 0x07, 0xd0, 0x01, 0x33, 0x1b, 0xcd, 0x28, 0x17, - 0x02, 0x09, 0x01, 0x8f, 0x79, 0xf6, 0x5c, 0x06, 0xb8, 0x17, 0x46, 0x20, 0x00, 0x75, 0x2f, 0xb1, 0x75, 0x00, 0x73, 0x00, 0x68, 0xe1, 0x2f, 0xb7, - 0x38, 0x21, 0x10, 0x15, 0xd0, 0x7f, 0x8f, 0x79, 0x9b, 0x5c, 0x06, 0xb8, 0x17, 0x00, 0xc4, 0xd6, 0xe0, 0xcf, 0xdc, 0xc2, 0xc8, 0xb9, 0xc1, 0x06, - 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x24, 0x04, 0x43, 0x04, 0x3a, 0x20, 0x03, 0x1f, 0x41, 0x04, 0x38, 0x48, 0x21, 0x05, 0xff, 0xb9, 0x35, 0x7f, 0x06, - 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x08, 0x08, 0xd0, 0x01, 0xd9, 0x1a, 0xe4, 0x28, 0x17, 0x0a, 0x04, 0x01, 0x28, 0x83, 0xce, 0x57, 0x06, - 0xb8, 0x17, 0x49, 0x00, 0x57, 0x62, 0x2f, 0xb1, 0x72, 0x2f, 0xb5, 0x6b, 0x28, 0x17, 0x10, 0x16, 0x10, 0x7f, 0x32, 0xff, 0x80, 0x06, 0xb8, 0x17, - 0x74, 0xc7, 0x14, 0xbc, 0x7c, 0xb7, 0xa4, 0x62, 0xd0, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x31, 0x28, 0x0d, 0x40, 0xbc, 0x28, 0x11, - 0x3a, 0x28, 0x19, 0x06, 0x52, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x09, 0x09, 0x90, 0xd0, 0x01, 0xde, 0x19, 0x38, 0x17, 0x0b, 0x01, - 0x03, 0x68, 0x20, 0x28, 0x67, 0x06, 0xb8, 0x17, 0x54, 0x00, 0x6f, 0x00, 0x63, 0xb0, 0x4f, 0xab, 0x67, 0x06, 0x48, 0x17, 0x10, 0x0e, 0xf0, 0x7f, - 0xa5, 0x67, 0x28, 0x67, 0x81, 0x06, 0xb8, 0x17, 0xc4, 0xb3, 0x58, 0xce, 0x30, 0xae, 0x06, 0x78, 0x15, 0x82, 0x0f, 0x13, 0x7f, 0x22, 0x04, 0x3e, - 0x04, 0x42, 0x28, 0x11, 0x33, 0x8e, 0x06, 0x48, 0x15, 0x00, 0x00, 0x8b, 0x22, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x0a, 0x44, 0x0a, - 0xd0, 0x01, 0xfd, 0x19, 0x76, 0x28, 0x17, 0x0c, 0x01, 0x08, 0xa4, 0x7f, 0xac, 0x99, 0x06, 0xb8, 0x17, 0x47, 0x00, 0x75, 0x0c, 0x00, 0x6e, 0x00, - 0x6d, 0x2f, 0xb3, 0x10, 0x16, 0x50, 0x7f, 0xa4, 0x7f, 0x21, 0x6c, 0x9a, 0x06, 0xb8, 0x17, 0x70, 0xad, 0xc8, 0xb9, 0x06, 0x98, 0x15, 0x82, 0x0f, - 0x13, 0x7f, 0x13, 0x04, 0x43, 0x04, 0x3c, 0x20, 0x01, 0x30, 0xcc, 0x06, 0x48, 0x15, 0x32, 0x7f, 0xac, 0x99, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, - 0x7f, 0x0b, 0x0b, 0x80, 0xd0, 0x01, 0xe2, 0x19, 0xe4, 0x62, 0x00, 0x00, 0x0d, 0x05, 0x01, 0xfc, 0x57, 0x89, 0x73, 0x06, 0xb8, 0x17, 0x53, 0x28, - 0x11, 0x1c, 0x69, 0x00, 0x74, 0x28, 0x17, 0x06, 0x58, 0x1b, 0x10, 0x0e, 0xf0, 0x7f, 0x26, 0x74, 0x20, 0x89, 0x73, 0x06, 0xb8, 0x17, 0xac, 0xc0, - 0x74, 0xc7, 0xc0, 0x68, 0xd0, 0x06, 0x98, 0x1b, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x11, 0x39, 0x04, 0x42, 0xf9, 0x28, 0x17, 0x06, 0x58, 0x1b, 0x35, - 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x0c, 0x0c, 0xd0, 0x01, 0x00, 0x82, 0x19, 0x43, 0x63, 0x00, 0x00, 0x0e, 0x01, 0x08, 0x43, 0x53, - 0x49, 0x84, 0x06, 0xb8, 0x17, 0x43, 0x00, 0x68, 0xb1, 0x28, 0x17, 0x62, 0x06, 0x8f, 0xaf, 0x10, 0x0f, 0x00, 0x7f, 0x53, 0xf6, 0x53, 0x06, 0xb8, - 0x17, 0x0c, 0xc0, 0xc9, 0x14, 0xbc, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x22, 0x04, 0x19, 0x38, 0x04, 0x31, 0x06, 0x48, 0x11, 0x72, 0x7f, 0x49, - 0x84, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x0d, 0x0d, 0xd0, 0x01, 0x50, 0x19, 0xa1, 0x28, 0x17, 0x00, 0x0f, 0x01, 0x5e, 0x79, 0x48, - 0x59, 0xdd, 0x5d, 0xaa, 0x06, 0x98, 0x19, 0x4b, 0x2f, 0xaf, 0x6e, 0x2f, 0xb3, 0x67, 0x2f, 0xb7, 0x77, 0xf0, 0x06, 0x2f, 0xb1, 0x10, 0x0e, 0xf0, - 0x7f, 0x52, 0xff, 0x06, 0xa8, 0x19, 0xac, 0x98, 0xb0, 0x00, 0x1a, 0xac, 0x40, 0xc6, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x13, 0x3d, - 0xaf, 0x28, 0x17, 0x33, 0x28, 0x1b, 0x32, 0x06, 0x28, 0x1f, 0x55, 0x7f, 0x06, 0x98, 0x19, 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x0e, 0x0e, 0xd0, 0x01, - 0x33, 0x19, 0x4f, 0x28, 0x17, 0x10, 0x04, 0x01, 0xcc, 0x5b, 0x71, 0x5c, 0x06, 0x98, 0x15, 0x00, 0x00, 0x05, 0x54, 0x00, 0x6f, 0x00, 0x79, 0x2f, - 0xad, 0x6d, 0x06, 0x6f, 0xb1, 0xe0, 0x10, 0x0e, 0xf0, 0x7f, 0x32, 0xff, 0x06, 0xa8, 0x15, 0x00, 0xc4, 0xb3, 0x7c, 0xc5, 0x30, 0xc8, 0xb9, 0x06, - 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x22, 0x04, 0x3e, 0x04, 0x1e, 0x4f, 0x04, 0x3c, 0x06, 0x28, 0x11, 0x92, 0x7f, 0x06, 0x98, 0x15, 0x10, 0x0f, 0x15, - 0x7f, 0x0f, 0x44, 0x0f, 0xd0, 0x01, 0x1a, 0x1a, 0x91, 0x2f, 0x9c, 0x11, 0x01, 0x08, 0xf3, 0x77, 0xdd, 0x5d, 0x06, 0xb8, 0x17, 0x49, 0x00, 0x73, - 0x03, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6b, 0x06, 0x6f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xc0, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x74, 0xc7, 0xdc, 0xc2, - 0x74, 0xce, 0x30, 0x40, 0xc6, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x41, 0x04, 0x17, 0x38, 0x04, 0x3a, 0x28, 0x17, 0x32, 0x06, 0x48, - 0x1b, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x10, 0x10, 0xd0, 0x01, 0x04, 0x1a, 0x2a, 0x2f, 0xa0, 0x02, 0x12, 0x01, 0x8f, - 0x79, 0x95, 0x4e, 0x06, 0xb8, 0x17, 0x46, 0x2f, 0x00, 0x75, 0x28, 0x13, 0x75, 0x28, 0x19, 0x10, 0x16, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, - 0x03, 0xc4, 0xd6, 0xe0, 0xcf, 0x74, 0xc7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x17, 0x24, 0x04, 0x43, 0x28, 0x15, 0x43, 0x28, 0x1b, 0x06, 0x92, - 0x7f, 0x06, 0xb8, 0x17, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x11, 0x11, 0xd0, 0x01, 0xa3, 0x19, 0xdf, 0x60, 0x00, 0x00, 0x00, 0x13, 0x01, 0x71, 0x5c, - 0xa8, 0x68, 0xab, 0x06, 0xb8, 0x17, 0x59, 0x2f, 0xa7, 0x6d, 0x2f, 0xab, 0x6e, 0x2f, 0xaf, 0x5f, 0xb9, 0xe0, 0x10, 0x15, 0xd0, 0x7f, 0x32, 0xff, - 0x06, 0xb8, 0x17, 0x7c, 0xc5, 0xc8, 0xb9, 0x98, 0x18, 0xb0, 0xdc, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x2f, 0x04, 0x3c, 0x0b, 0x04, 0x30, - 0x04, 0x3d, 0x20, 0x03, 0x41, 0x06, 0x48, 0x1b, 0x35, 0x7f, 0xc8, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x12, 0x12, 0xd0, 0x01, 0x5c, 0x19, - 0x87, 0x00, 0x62, 0x00, 0x00, 0x14, 0x01, 0x77, 0x95, 0xce, 0x55, 0x91, 0x06, 0xb8, 0x17, 0x4e, 0x28, 0x17, 0x67, 0x48, 0x17, 0x6f, 0x10, 0x16, - 0x40, 0x7f, 0x60, 0x7f, 0x22, 0xff, 0x06, 0xb8, 0x17, 0x98, 0xb0, 0x00, 0xac, 0x78, 0x6a, 0xb1, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1d, 0x28, - 0x15, 0x33, 0x48, 0x19, 0x3e, 0x9c, 0x06, 0x28, 0x15, 0x00, 0x00, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x13, 0x13, 0x88, 0xd0, - 0x01, 0x11, 0x1a, 0x45, 0x28, 0x17, 0x15, 0x01, 0xb0, 0x16, 0x65, 0x5f, 0x6f, 0x06, 0xd8, 0x17, 0x69, 0x2f, 0xa3, 0x38, 0x19, 0x74, 0xc2, 0x2f, - 0xb9, 0x10, 0x16, 0x10, 0x7f, 0xb0, 0x65, 0xfb, 0x6c, 0x06, 0xb8, 0x17, 0xc8, 0x06, 0xb2, 0x00, 0xac, 0xc0, 0xd0, 0x06, 0xb8, 0x17, 0x0e, 0xd3, - 0x7f, 0x1d, 0x36, 0x04, 0x38, 0x20, 0x01, 0x38, 0x19, 0x42, 0x28, 0x21, 0x06, 0x32, 0x7f, 0x5f, 0x64, 0x6f, 0x06, 0xd8, 0x17, 0x10, 0x0e, 0xd5, - 0x7f, 0x14, 0x14, 0xd0, 0x01, 0xf5, 0x1a, 0x40, 0xe1, 0x28, 0x17, 0x16, 0x01, 0x90, 0x5c, 0x1c, 0x96, 0xa2, 0x06, 0xb8, 0x17, 0x47, 0x28, 0x17, - 0x66, 0x00, 0x75, 0x10, 0x16, 0x80, 0x7f, 0x67, 0x10, 0x6b, 0x1c, 0x96, 0x06, 0xb8, 0x17, 0x30, 0xae, 0xc4, 0xd6, 0xd1, 0x06, 0x98, 0x15, 0x0f, - 0x13, 0x7f, 0x13, 0x28, 0x17, 0x44, 0x04, 0x43, 0x06, 0x28, 0x11, 0xf2, 0x5f, 0xff, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x15, - 0x15, 0xd0, 0x01, 0x2b, 0x20, 0x19, 0x41, 0x2f, 0x9e, 0x17, 0x01, 0x59, 0x97, 0xa1, 0x45, 0x5c, 0x06, 0xb8, 0x17, 0x53, 0x00, 0x68, 0x2f, 0xb1, - 0x7a, 0x28, 0x19, 0x18, 0x6f, 0x00, 0x6b, 0x06, 0x2f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x59, 0x97, 0x88, 0x40, 0x51, 0x06, 0xb8, 0x17, 0xdc, 0xc2, - 0x88, 0xc9, 0x24, 0xc6, 0x34, 0x74, 0xce, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x17, 0x34, 0x04, 0x41, 0x37, 0x28, 0x19, 0x3e, 0x04, - 0x3a, 0x04, 0x30, 0x06, 0x08, 0x1f, 0x72, 0x5c, 0x25, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x16, 0x16, 0xd0, 0x01, 0xde, 0x00, 0x18, - 0x6c, 0x62, 0x00, 0x00, 0x18, 0x01, 0x1b, 0x15, 0x61, 0xe5, 0x77, 0x06, 0xb8, 0x17, 0x41, 0x2f, 0xaf, 0x63, 0x48, 0x1b, 0x84, 0x10, 0x16, 0x50, - 0x7f, 0x31, 0x72, 0xe5, 0x77, 0x06, 0xb8, 0x17, 0x44, 0xc5, 0x18, 0x74, 0xc7, 0x58, 0x06, 0x88, 0x15, 0x0f, 0x13, 0x7f, 0x10, 0x04, 0x39, 0x3e, - 0x04, 0x42, 0x28, 0x1b, 0x06, 0x7f, 0xb1, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x17, 0x44, 0x17, 0xd0, 0x01, 0x01, 0x19, 0x66, - 0x2f, 0x9c, 0x19, 0x01, 0x0a, 0x09, 0x4e, 0xcd, 0x91, 0x06, 0xb8, 0x17, 0x4d, 0x2f, 0xad, 0x65, 0xf0, 0x06, 0x9d, 0xae, 0x10, 0x0f, 0x00, 0x7f, - 0x32, 0xff, 0x06, 0xb8, 0x17, 0xf8, 0xbb, 0xd0, 0xc5, 0xd7, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x13, 0x4d, 0x06, 0x88, 0x15, 0x52, - 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x18, 0x18, 0xd0, 0x01, 0xb2, 0x18, 0x15, 0x28, 0x17, 0x02, 0x1a, 0x01, 0xcb, 0x6e, 0xc0, - 0x8c, 0x06, 0xb8, 0x17, 0x53, 0x98, 0x4f, 0xab, 0x67, 0x00, 0x28, 0xa4, 0x10, 0x16, 0x40, 0x7f, 0xcb, 0x6e, 0x3a, 0x43, 0x8d, 0x06, 0xb8, 0x17, - 0xdc, 0xc2, 0x00, 0xac, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x47, 0x21, 0x28, 0x17, 0x33, 0x04, 0x30, 0x06, 0x88, 0x19, 0x35, 0x7f, 0x06, 0xb8, - 0x17, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x19, 0x19, 0xd0, 0x01, 0xe1, 0x18, 0xa6, 0x60, 0x00, 0x00, 0x00, 0x1b, 0x01, 0xac, 0x4e, 0xfd, 0x90, 0x20, - 0x9c, 0x5e, 0x06, 0x9f, 0xb0, 0x4b, 0x00, 0x79, 0x00, 0x6f, 0x36, 0x00, 0x74, 0x20, 0x03, 0x10, 0x0e, 0x70, 0x7f, 0x69, 0x06, 0xc1, 0xff, 0x06, - 0xf2, 0xff, 0x50, 0x01, 0xad, 0xa0, 0xd1, 0x20, 0x00, 0x80, 0xbd, 0x0e, 0x73, 0x7f, 0x14, 0x51, 0x00, 0x75, 0x06, 0xc2, 0x01, 0x1a, 0x28, 0x17, - 0x3e, 0x04, 0x72, 0x42, 0x20, 0x03, 0x0e, 0x52, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x1a, 0x1a, 0xd0, 0x01, 0xe5, 0x20, 0x18, 0x85, 0x28, 0x17, 0x1c, - 0x01, 0x27, 0x59, 0x2a, 0x45, 0x96, 0x06, 0xb8, 0x17, 0x4f, 0x00, 0x73, 0x2f, 0xab, 0x6b, 0x06, 0x8f, 0xaf, 0xc0, 0x10, 0x0e, 0xf0, 0x7f, 0x06, - 0xf2, 0xff, 0x24, 0xc6, 0xac, 0xc0, 0x74, 0xce, 0xd0, 0x06, 0x98, 0x19, 0x07, 0x53, 0x7f, 0x63, 0x06, 0x8e, 0xaf, 0x1e, 0x04, 0x41, 0x04, 0x1c, - 0x30, 0x04, 0x3a, 0x20, 0x03, 0x0e, 0x52, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x1b, 0x1b, 0x88, 0xd0, 0x01, 0xa8, 0x18, 0x5f, 0x28, 0x17, 0x1d, 0x01, - 0x75, 0x05, 0x51, 0xab, 0x5e, 0x0c, 0x77, 0x06, 0x9d, 0x2f, 0x48, 0x4f, 0xaf, 0x78, 0x67, 0x06, 0x8f, 0xaf, 0x10, 0x07, 0x10, 0x7f, 0x3e, 0x2d, - 0x06, 0x91, 0xff, 0x75, 0x51, 0x93, 0x10, 0x5e, 0xbf, 0x53, 0x06, 0x9d, 0xaf, 0xa8, 0xd6, 0xe0, 0xac, 0x08, 0x20, 0x00, 0x04, 0xd6, 0x10, 0x06, - 0x73, 0x7f, 0x25, 0x04, 0x51, 0x0c, 0x04, 0x33, 0x04, 0x3e, 0x06, 0x68, 0x15, 0x32, 0x7f, 0xab, 0x5e, 0x24, 0x23, 0x7e, 0x10, 0x16, 0x95, 0x7f, - 0x1c, 0x1c, 0xd0, 0x01, 0xab, 0x18, 0x40, 0x27, 0x28, 0x17, 0x1e, 0x01, 0x48, 0x59, 0x6f, 0x82, 0xaf, 0x06, 0xb8, 0x17, 0x4e, 0x2f, 0xad, 0x72, - 0x06, 0x8f, 0xad, 0x10, 0x0f, 0x10, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x0c, 0x98, 0xb0, 0x7c, 0xb7, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, - 0x04, 0x1e, 0x30, 0x04, 0x40, 0x20, 0x03, 0x06, 0xb2, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x1d, 0x44, 0x1d, 0xd0, 0x01, 0xab, 0x18, - 0x97, 0x28, 0x17, 0x1f, 0x01, 0x02, 0x8c, 0x54, 0x4c, 0x6b, 0x71, 0x5c, 0x06, 0x98, 0x19, 0x57, 0xab, 0x28, 0x17, 0x6b, 0x28, 0x1b, 0x79, 0x28, - 0x1f, 0x6d, 0x06, 0x28, 0x1f, 0x10, 0x0e, 0xf0, 0x7f, 0xc0, 0x52, 0xff, 0x06, 0x98, 0x19, 0x40, 0xc6, 0x74, 0xce, 0x7c, 0xc5, 0x35, 0xc8, 0xb9, - 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x17, 0x3a, 0x28, 0x1b, 0x1e, 0x4f, 0x04, 0x3c, 0x06, 0x48, 0x1d, 0x55, 0x7f, 0x06, 0x98, 0x19, - 0x10, 0x0e, 0xf5, 0x7f, 0x1e, 0x44, 0x1e, 0xd0, 0x01, 0x56, 0x18, 0x1e, 0x28, 0x17, 0x20, 0x01, 0x08, 0xe5, 0x9c, 0xd6, 0x53, 0x06, 0x98, 0x15, - 0x00, 0x00, 0x54, 0x0a, 0x00, 0x6f, 0x00, 0x74, 0x20, 0x01, 0x6f, 0x2f, 0xb5, 0x69, 0xe2, 0x10, 0x0e, 0x80, 0x7f, 0x06, 0x71, 0xfd, 0x2b, 0x19, - 0x9e, 0xd6, 0x53, 0x06, 0x98, 0x15, 0x00, 0x03, 0x00, 0xd7, 0xb3, 0xa0, 0xd1, 0xac, 0x06, 0x88, 0x15, 0x0f, 0x13, 0x7f, 0x04, 0x22, 0x04, 0x3e, - 0x04, 0x42, 0x20, 0x01, 0x3e, 0x04, 0x1e, 0x40, 0x04, 0x38, 0x06, 0x28, 0x17, 0x35, 0x7f, 0x06, 0x98, 0x15, 0x10, 0x0f, 0x15, 0x7f, 0x1f, 0x40, - 0x1f, 0xd0, 0x01, 0x3b, 0x19, 0x75, 0x5f, 0x00, 0x00, 0x02, 0x21, 0x01, 0xf6, 0x5c, 0x39, 0x68, 0x06, 0xb8, 0x17, 0x53, 0x31, 0x00, 0x68, 0x28, - 0x0f, 0x3f, 0xa9, 0x6e, 0x00, 0x65, 0x10, 0x16, 0x20, 0x7f, 0x60, 0x9b, 0x22, 0xff, 0x06, 0xb8, 0x17, 0xdc, 0xc2, 0xc8, 0xb9, 0x24, 0x68, 0xb1, - 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x0d, 0x3c, 0x04, 0x30, 0x09, 0x04, 0x3d, 0x04, 0x4d, 0x06, 0x28, 0x15, 0x00, 0x00, 0x35, 0x7f, - 0xc8, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x20, 0x20, 0xd0, 0x01, 0x36, 0x19, 0xa0, 0x41, 0x5e, 0x2b, 0x2d, 0x01, 0xa1, 0x5c, 0x71, 0x5c, - 0x06, 0xb8, 0x17, 0x17, 0x4f, 0x00, 0x6b, 0x28, 0x13, 0x79, 0x28, 0x17, 0x38, 0x1b, 0x10, 0x16, 0x10, 0x7f, 0x08, 0x88, 0x51, 0x71, 0x5c, 0x06, - 0xb8, 0x17, 0x24, 0xc6, 0x74, 0x06, 0xce, 0x7c, 0xc5, 0xc8, 0xb9, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1e, 0x2f, 0x04, 0x3a, 0x28, 0x15, 0x4f, - 0x48, 0x1b, 0x06, 0x3f, 0xb5, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x21, 0x21, 0xd0, 0x01, 0xa5, 0x18, 0x3b, 0x5f, 0x01, - 0x00, 0x00, 0x23, 0x01, 0x83, 0x5e, 0xf6, 0x06, 0xc8, 0x17, 0x41, 0x48, 0x2f, 0xad, 0x72, 0x00, 0x6f, 0x00, 0x73, 0x8f, 0xb7, 0x88, 0x10, 0x15, - 0xd0, 0x7f, 0x7f, 0x5e, 0x9b, 0x06, 0xc8, 0x17, 0x88, 0xd7, 0x5c, 0x18, 0xb8, 0xdc, 0xc2, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x38, - 0x03, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x41, 0x20, 0x07, 0x06, 0x38, 0x1b, 0x72, 0xe3, 0x25, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x22, - 0x22, 0xd0, 0x01, 0x75, 0x10, 0x18, 0x32, 0x5e, 0x2c, 0xad, 0x01, 0x71, 0x5c, 0xe3, 0x50, 0x53, 0x06, 0xb8, 0x17, 0x59, 0x6f, 0xa9, 0x67, 0x00, - 0x75, 0x00, 0x78, 0x63, 0x48, 0x1b, 0x10, 0x15, 0xd0, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x7c, 0xc5, 0xc8, 0x06, 0xb9, 0x6c, 0xad, 0x58, 0xce, - 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x2f, 0x83, 0x48, 0x0d, 0x33, 0x04, 0x43, 0x04, 0x42, 0x28, 0x21, 0x06, 0x1f, 0xb7, 0xe4, 0x35, 0x7f, 0x06, - 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x23, 0x23, 0xd0, 0x01, 0x4a, 0x18, 0x20, 0x7b, 0x5d, 0x2b, 0x2d, 0x01, 0xb3, 0x5f, 0xf6, 0x5c, 0xae, 0x06, - 0xb8, 0x17, 0x54, 0x2f, 0xab, 0x6b, 0x28, 0x13, 0x06, 0x7f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xb7, 0x10, 0x5f, 0x9b, 0x5c, 0x06, 0xb8, 0x17, 0xc4, - 0xb3, 0xe0, 0xcf, 0x0c, 0xdc, 0xc2, 0xc8, 0xb9, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x22, 0x04, 0x17, 0x3e, 0x04, 0x3a, 0x28, 0x15, 0x41, 0x28, - 0x15, 0x38, 0x21, 0x05, 0xff, 0xb9, 0x72, 0xb7, 0x25, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x24, 0x24, 0xd0, 0x01, 0x39, 0x00, 0x18, - 0xb2, 0x5f, 0x00, 0x00, 0x26, 0x01, 0x99, 0x14, 0x99, 0xdd, 0x5d, 0x06, 0xb8, 0x17, 0x4b, 0x4f, 0xab, 0x61, 0x00, 0x78, 0x77, 0x06, 0x08, 0x11, - 0x10, 0x0f, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x00, 0xac, 0x00, 0x1a, 0xac, 0x40, 0xc6, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, - 0x0b, 0x33, 0xbc, 0x28, 0x0f, 0x32, 0x06, 0x28, 0x13, 0x72, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x25, 0x25, 0x88, 0xd0, 0x01, 0x66, - 0x18, 0x54, 0x28, 0x17, 0x27, 0x01, 0x1b, 0x15, 0x61, 0x9b, 0x5a, 0x06, 0xb8, 0x17, 0x45, 0x6f, 0xa7, 0x65, 0x10, 0x16, 0x60, 0x7f, 0x08, 0x31, - 0x72, 0x9b, 0x5a, 0x06, 0xb8, 0x17, 0xd0, 0xc5, 0x88, 0x18, 0xd7, 0x54, 0xba, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x45, 0x02, 0x04, - 0x38, 0x04, 0x3c, 0x04, 0x4d, 0x06, 0x48, 0x15, 0x00, 0x72, 0x00, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x26, 0x26, 0xd0, 0x01, - 0x10, 0x00, 0x18, 0x6b, 0x5e, 0x00, 0x00, 0x28, 0x01, 0xd8, 0x10, 0x9a, 0xe5, 0x77, 0x06, 0xb8, 0x17, 0x4b, 0x00, 0x6f, 0x00, 0x78, 0x63, 0x48, - 0x1b, 0x10, 0x16, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0xe0, 0xac, 0x58, 0x60, 0xce, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x3e, - 0x04, 0x42, 0xf9, 0x28, 0x19, 0x06, 0x7f, 0xb1, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x27, 0x27, 0xd0, 0x01, 0x10, 0xde, 0x17, - 0xf8, 0x28, 0x17, 0x29, 0x01, 0x8f, 0x79, 0x20, 0xa1, 0x5c, 0x06, 0xb8, 0x17, 0x46, 0x00, 0x75, 0x00, 0x6b, 0xa8, 0x20, 0x03, 0x6f, 0x20, 0x05, - 0x61, 0x10, 0x16, 0x20, 0x7f, 0x8f, 0x79, 0x88, 0x40, 0x51, 0x06, 0xb8, 0x17, 0xc4, 0xd6, 0xe0, 0xcf, 0x24, 0xc6, 0x60, 0x74, 0x06, 0x88, 0x1b, - 0x0e, 0xf3, 0x7f, 0x24, 0x04, 0x43, 0x04, 0x3a, 0xaf, 0x20, 0x03, 0x3e, 0x20, 0x05, 0x30, 0x06, 0x28, 0x1d, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, - 0x0e, 0xf5, 0x7f, 0x20, 0x28, 0x28, 0xd0, 0x01, 0xe1, 0x17, 0xb6, 0x5c, 0x00, 0x01, 0x00, 0x2a, 0x01, 0x50, 0x4f, 0xc0, 0x8c, 0x06, 0xb8, 0x17, - 0x58, 0x53, 0x28, 0x0d, 0x67, 0x06, 0x48, 0x11, 0x10, 0x0f, 0x50, 0x7f, 0x50, 0x4f, 0x3a, 0x43, 0x8d, 0x06, 0xb8, 0x17, 0xac, 0xc0, 0x00, 0xac, - 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x59, 0x21, 0x28, 0x0d, 0x33, 0x06, 0x48, 0x11, 0x72, 0x7f, 0xc0, 0x8c, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, - 0xf5, 0x7f, 0x29, 0x29, 0xd0, 0x01, 0xa3, 0x17, 0xa9, 0x28, 0x17, 0x02, 0x2b, 0x01, 0x77, 0x95, 0x0e, 0x5d, 0x06, 0xb8, 0x17, 0x4e, 0xa2, 0x68, - 0x17, 0x73, 0x2f, 0xad, 0x6b, 0x00, 0x69, 0x10, 0x16, 0x00, 0x7f, 0x7f, 0xc0, 0x22, 0xff, 0x06, 0xb8, 0x17, 0x98, 0xb0, 0x00, 0xac, 0xac, 0xc0, - 0x31, 0xa4, 0xd0, 0x06, 0x78, 0x1b, 0x07, 0x93, 0x7f, 0xe1, 0x00, 0x71, 0x2e, 0xbb, 0xa8, 0x05, 0xf4, 0x01, 0x1d, 0x68, 0x17, 0x41, 0x28, 0x1f, - 0x3a, 0x04, 0x38, 0xf2, 0x06, 0x08, 0x1f, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x2a, 0x2a, 0xd0, 0x01, 0x46, 0x20, 0x17, 0x5a, - 0x28, 0x17, 0x2c, 0x01, 0x8a, 0x71, 0x2c, 0x54, 0x67, 0x06, 0xb8, 0x17, 0x4b, 0x24, 0x0b, 0x6d, 0x2f, 0xb3, 0x6d, 0x00, 0x1e, 0x6f, 0x00, 0x74, - 0x20, 0x03, 0x10, 0x15, 0xf0, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x6c, 0x01, 0xad, 0xc8, 0xb9, 0xa8, 0xba, 0xa0, 0xd1, 0x06, 0x78, 0x17, 0x82, - 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x43, 0x04, 0x3c, 0x28, 0x1b, 0x3c, 0x0f, 0x04, 0x3e, 0x04, 0x42, 0x20, 0x03, 0x06, 0x32, 0x7f, 0x06, 0xb8, 0x17, - 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x2b, 0x2b, 0xd0, 0x01, 0x54, 0x17, 0xf3, 0x28, 0x17, 0x2d, 0x05, 0x01, 0x27, 0x59, 0x06, 0x52, 0x06, 0xb8, 0x17, - 0x4f, 0x2f, 0xa3, 0x78, 0x74, 0x2f, 0xb3, 0x10, 0x16, 0x70, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x24, 0xc6, 0x74, 0x18, 0xc7, 0xc0, 0xd0, 0x06, - 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1e, 0x04, 0x38, 0xbc, 0x28, 0x0f, 0x30, 0x06, 0x08, 0x0f, 0xb2, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, - 0x2c, 0x2c, 0x80, 0xd0, 0x01, 0xa1, 0x17, 0x98, 0x5d, 0x00, 0x00, 0x2e, 0x05, 0x01, 0xae, 0x5b, 0x0e, 0x5d, 0x06, 0xb8, 0x17, 0x4d, 0x28, 0x17, - 0x56, 0x79, 0x2f, 0xaf, 0x7a, 0x2f, 0xb3, 0x6b, 0x28, 0x23, 0x10, 0x15, 0xf0, 0x7f, 0xab, 0xc0, 0x22, 0xff, 0x06, 0xb8, 0x17, 0xf8, 0xbb, 0x7c, - 0xc5, 0x90, 0xc7, 0x68, 0xa4, 0x06, 0x88, 0x19, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x17, 0x4f, 0x04, 0x34, 0x2f, 0x04, 0x37, 0x28, 0x1b, 0x3a, 0x28, - 0x23, 0x05, 0xff, 0xb9, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x2d, 0x2d, 0xd0, 0x01, 0xb5, 0x16, 0x73, 0x28, 0x17, 0x00, - 0x2f, 0x01, 0x7f, 0x9e, 0x50, 0x51, 0xf6, 0x5c, 0xa0, 0x06, 0x98, 0x19, 0x4b, 0x2f, 0xab, 0x67, 0x00, 0x6f, 0x00, 0x73, 0x2c, 0x00, 0x68, 0x2f, - 0xb9, 0x6d, 0x06, 0x0f, 0xb9, 0x10, 0x0e, 0xf0, 0x7f, 0x7f, 0x9e, 0x08, 0x3f, 0x51, 0x9b, 0x5c, 0x06, 0xa8, 0x19, 0xac, 0xe0, 0xac, 0x0d, 0xdc, - 0xc2, 0xc8, 0xb9, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x0f, 0x05, 0x33, 0x04, 0x3e, 0x04, 0x41, 0x28, 0x1f, 0x3c, 0x28, 0x1b, 0x8e, - 0x05, 0xff, 0xb9, 0x7f, 0x9e, 0x52, 0x25, 0x7f, 0x06, 0x98, 0x19, 0x10, 0x0e, 0xf5, 0x7f, 0x2e, 0x40, 0x2e, 0xd0, 0x01, 0x6f, 0x16, 0xd6, 0x5c, - 0x00, 0x00, 0x02, 0x30, 0x01, 0x96, 0x6c, 0x04, 0x7e, 0x06, 0x98, 0x15, 0x00, 0x2b, 0x00, 0x4f, 0x4f, 0xa5, 0x6e, 0x2f, 0xb1, 0x77, 0x06, 0x08, - 0x13, 0x10, 0x0f, 0x30, 0x7f, 0x08, 0xb2, 0x51, 0xf3, 0x7e, 0x06, 0xa8, 0x15, 0x00, 0x24, 0xc6, 0x03, 0xa4, 0xd0, 0x98, 0xb0, 0x40, 0xc6, 0x06, - 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x15, 0x1e, 0x04, 0x3a, 0x28, 0x11, 0x3d, 0x28, 0x1d, 0x32, 0x06, 0x28, 0x15, 0x03, 0x00, 0x00, 0x96, 0x6c, 0x69, - 0x7e, 0x06, 0x98, 0x15, 0x10, 0x0f, 0x15, 0x7f, 0x21, 0x2f, 0x2f, 0xd0, 0x01, 0xa2, 0x12, 0xcc, 0x5a, 0x00, 0x3f, 0xff, 0x24, 0x01, 0x01, 0xd0, - 0x01, 0x02, 0x02, 0xd0, 0x01, 0x03, 0x03, 0x92, 0xd0, 0x01, 0x04, 0x04, 0xd0, 0x01, 0x05, 0x05, 0xd0, 0x01, 0x06, 0x49, 0x06, 0xd0, 0x01, 0x07, - 0x07, 0xd0, 0x01, 0x08, 0x08, 0xd0, 0x01, 0x24, 0x09, 0x09, 0xd0, 0x01, 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0x92, 0xd0, 0x01, 0x0c, 0x0c, 0xd0, - 0x01, 0x0d, 0x0d, 0xd0, 0x01, 0x0e, 0x49, 0x0e, 0xd0, 0x01, 0x0f, 0x0f, 0xd0, 0x01, 0x10, 0x10, 0xd0, 0x01, 0x24, 0x11, 0x11, 0xd0, 0x01, 0x12, - 0x12, 0xd0, 0x01, 0x13, 0x13, 0x92, 0xd0, 0x01, 0x14, 0x14, 0xd0, 0x01, 0x15, 0x15, 0xd0, 0x01, 0x16, 0x49, 0x16, 0xd0, 0x01, 0x17, 0x17, 0xd0, - 0x01, 0x18, 0x18, 0xd0, 0x01, 0x24, 0x19, 0x19, 0xd0, 0x01, 0x1a, 0x1a, 0xd0, 0x01, 0x1b, 0x1b, 0x92, 0xd0, 0x01, 0x1c, 0x1c, 0xd0, 0x01, 0x1d, - 0x1d, 0xd0, 0x01, 0x1e, 0x49, 0x1e, 0xd0, 0x01, 0x1f, 0x1f, 0xd0, 0x01, 0x20, 0x20, 0xd0, 0x01, 0x24, 0x21, 0x21, 0xd0, 0x01, 0x22, 0x22, 0xd0, - 0x01, 0x23, 0x23, 0x92, 0xd0, 0x01, 0x24, 0x24, 0xd0, 0x01, 0x25, 0x25, 0xd0, 0x01, 0x26, 0x49, 0x26, 0xd0, 0x01, 0x27, 0x27, 0xd0, 0x01, 0x28, - 0x28, 0xd0, 0x01, 0x24, 0x29, 0x29, 0xd0, 0x01, 0x2a, 0x2a, 0xd0, 0x01, 0x2b, 0x2b, 0x93, 0xd0, 0x01, 0x2c, 0x2c, 0xd0, 0x01, 0x2d, 0x2d, 0xd0, - 0x01, 0xfb, 0x0f, 0xc0, 0xf3, 0x07, 0x7f, 0xff, 0x11, 0x58, 0x08, 0x00, 0x12, 0x01, 0x00, 0x00, 0x30, 0x01, 0x01, 0x2f, 0x50, 0x07, 0x00, 0x0c, - 0xe5, 0x65, 0x2c, 0x67, 0x60, 0x0a, 0x06, 0x40, 0x06, 0x4a, 0x00, 0x15, 0x61, 0x00, 0x70, 0x20, 0x03, 0x6e, 0x06, 0xc0, 0x7f, 0x6f, 0x06, 0xe0, - 0x7f, 0x8d, 0x06, 0x90, 0xff, 0x47, 0x00, 0x69, 0x41, 0x81, 0x51, 0x03, 0x65, 0x06, 0x61, 0xff, 0x61, 0xf3, 0x06, 0x81, 0xff, 0x06, 0xf2, 0xff, - 0x7c, 0xc7, 0xf8, 0xbc, 0x0f, 0x13, 0x7f, 0x60, 0xe3, 0x23, 0x81, 0x06, 0x54, 0x85, 0x2f, 0x04, 0x3f, 0x04, 0x3e, 0x01, 0x04, 0x3d, 0x04, 0x38, - 0x04, 0x4f, 0x04, 0x0e, 0x32, 0x7f, 0xe0, 0x07, 0x55, 0x7f, 0x10, 0x06, 0x90, 0x7f, 0x03, 0x77, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xb4, 0x8a, 0x00, 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x88, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xaa, 0x1a, 0x4f, 0x5a, 0x00, 0x00, 0x00, 0x02, 0x88, 0xbd, 0x30, 0xa6, 0x30, 0xeb, 0x01, 0x30, 0x79, 0x72, 0x25, 0x52, 0x02, 0x5e, 0x06, - 0x38, 0x21, 0x00, 0x53, 0x00, 0x65, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x04, 0x6c, 0x00, 0x2d, 0x00, 0x74, 0x20, 0x0b, 0x75, 0x00, 0x04, 0x6b, 0x00, - 0x62, 0x00, 0x79, 0x40, 0x15, 0x6c, 0x00, 0x17, 0x73, 0x00, 0x69, 0x05, 0x00, 0x7f, 0xe9, 0x60, 0x7f, 0x06, 0x59, 0x1f, 0x90, 0xff, 0xa0, 0x0e, - 0x90, 0x7f, 0xfa, 0x06, 0x81, 0x7d, 0x00, 0x00, 0x96, 0x99, 0x14, 0x08, 0x5c, 0x79, 0x72, 0x2b, 0x06, 0x62, 0xfd, 0x00, 0x00, 0x1c, 0x00, 0xc1, - 0xb8, 0xc6, 0xb9, 0xd2, 0xc4, 0xbc, 0xdc, 0x60, 0xc2, 0x0e, 0x92, 0x7f, 0x06, 0x93, 0x7d, 0x00, 0x00, 0x21, 0x04, 0x35, 0x04, 0x04, 0x43, 0x04, - 0x3b, 0x04, 0x06, 0x92, 0x7f, 0x3e, 0x72, 0xe6, 0x06, 0x95, 0x7d, 0x07, 0x35, 0x7f, 0x10, 0x06, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, - 0x03, 0x00, 0x88, 0xd7, 0x30, 0xb5, 0x30, 0xf3, 0x30, 0x83, 0x14, 0x5e, 0xdf, 0x57, 0x06, 0x58, 0x17, 0x42, 0x28, 0x13, 0x73, 0x00, 0x11, 0x61, - 0x00, 0x6e, 0x28, 0x17, 0x67, 0x00, 0x77, 0x40, 0x09, 0x57, 0x67, 0x68, 0x17, 0x6b, 0x05, 0x28, 0x17, 0x50, 0x80, 0x7f, 0x06, 0x5f, 0xb7, 0x90, - 0xff, 0xa0, 0x0e, 0xb0, 0x7f, 0xe1, 0x06, 0x81, 0x7f, 0xdc, 0x91, 0x71, 0x5c, 0x7f, 0x80, 0x06, 0x82, 0xfd, 0x00, 0x00, 0x80, 0xbd, 0xb0, 0xc0, - 0x11, 0x1a, 0xad, 0xed, 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x1f, 0x28, 0x15, 0x41, 0x0d, 0x04, 0x30, 0x04, 0x3d, 0x06, 0x68, 0x19, 0x32, - 0x7f, 0xe3, 0x06, 0xa2, 0x7f, 0xc8, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0xf2, 0x18, 0xc1, 0x00, 0x5b, 0x00, 0x00, - 0x04, 0x88, 0xc6, 0x30, 0xb0, 0x8a, 0x06, 0xa8, 0x15, 0x00, 0x00, 0x44, 0x28, 0x13, 0x65, 0x28, 0x11, 0x75, 0xf0, 0x06, 0x68, 0x17, 0x90, 0x7f, - 0x06, 0xf0, 0xff, 0x10, 0x06, 0x50, 0x7f, 0x27, 0x59, 0xb1, 0x90, 0x86, 0x06, 0xb8, 0x17, 0x00, 0xb3, 0x6c, 0xad, 0x06, 0xb8, 0x17, 0x0e, 0xf2, - 0xff, 0x22, 0x0f, 0x04, 0x4d, 0x04, 0x33, 0x28, 0x1b, 0x06, 0x6c, 0x16, 0x42, 0x7f, 0x06, 0xb8, 0x17, 0xc8, 0x07, 0x95, 0x7f, 0x10, 0x06, 0x50, - 0x7f, 0x03, 0x03, 0xd0, 0x01, 0x7e, 0x19, 0x6f, 0x80, 0x28, 0x17, 0x05, 0x88, 0xa4, 0x30, 0xf3, 0x30, 0xc1, 0x34, 0x30, 0xe7, 0x20, 0x05, 0x06, - 0x58, 0x1d, 0x49, 0x2f, 0xa9, 0x63, 0x00, 0x7c, 0x68, 0x4a, 0x9f, 0x06, 0x3a, 0xb3, 0xd0, 0x7f, 0x06, 0x1f, 0xb4, 0x10, 0x06, 0xf0, 0x7f, 0xc1, - 0x4e, 0x21, 0xdd, 0x5d, 0x06, 0xb8, 0x17, 0x78, 0xc7, 0x9c, 0xcc, 0x06, 0xb8, 0x17, 0x80, 0x0e, 0xf2, 0xff, 0x18, 0x04, 0x3d, 0x04, 0x47, 0x04, - 0x45, 0x3f, 0x04, 0x3e, 0x20, 0x07, 0x06, 0x3f, 0xb1, 0x32, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x20, 0x04, 0x04, - 0xd0, 0x01, 0xaa, 0x1a, 0x0c, 0x5a, 0x00, 0x02, 0x00, 0x06, 0x88, 0xaf, 0x30, 0xa1, 0x28, 0x19, 0xb8, 0x2b, 0x30, 0xe5, 0x06, 0x68, 0x17, 0x47, - 0x8a, 0xa3, 0x6a, 0x06, 0x4a, 0xb3, 0xd0, 0x7f, 0xc4, 0x06, 0x1f, 0xb4, 0x10, 0x06, 0xf0, 0x7f, 0x49, 0x51, 0xde, 0x06, 0xc8, 0x17, 0x11, 0xad, - 0x30, 0xfc, 0xc8, 0x06, 0xb8, 0x17, 0x0e, 0xf2, 0xff, 0x1a, 0x04, 0x32, 0x04, 0x41, 0x30, 0x28, 0x1b, 0x34, 0x04, 0x36, 0x04, 0x43, 0x06, 0x28, - 0x19, 0xf2, 0x32, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x05, 0x05, 0xd0, 0x01, 0xf8, 0x22, 0x18, 0x37, 0x28, 0x17, - 0x07, 0x88, 0xc6, 0x28, 0x13, 0xe7, 0xc5, 0x28, 0x19, 0x06, 0x58, 0x15, 0x00, 0x00, 0x44, 0x2a, 0x9d, 0x65, 0x28, 0x13, 0xf0, 0x06, 0x7a, 0xaf, - 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x10, 0x7f, 0x27, 0x59, 0x30, 0x75, 0x8c, 0x06, 0xb8, 0x17, 0x00, 0xb3, 0x04, 0x06, 0xc8, 0x17, 0x0e, - 0xf2, 0xff, 0x22, 0x04, 0x5f, 0x4d, 0x48, 0x13, 0x3e, 0x28, 0x1b, 0x06, 0x3f, 0xb1, 0x32, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x91, 0x10, - 0x06, 0x10, 0x7f, 0x06, 0x06, 0xd0, 0x01, 0xd9, 0x19, 0x9e, 0x28, 0x17, 0x01, 0x08, 0x88, 0xa6, 0x30, 0xeb, 0x30, 0xb5, 0x06, 0xa8, 0x17, 0x1f, - 0x55, 0x00, 0x6c, 0x2a, 0x91, 0x3f, 0xb1, 0x06, 0x1a, 0xab, 0xd0, 0x7f, 0x06, 0x5e, 0x2f, 0x84, 0x10, 0x06, 0xf0, 0x7f, 0x1a, 0x85, 0x71, 0x5c, - 0x06, 0xb8, 0x17, 0xb8, 0xc6, 0x30, 0xb0, 0xc0, 0x06, 0xb8, 0x17, 0x0e, 0xf2, 0xff, 0x23, 0x04, 0x3b, 0x04, 0x07, 0x4c, 0x04, 0x41, 0x04, 0x30, - 0x06, 0x68, 0x17, 0x32, 0x7f, 0x06, 0xb8, 0x17, 0xc8, 0x07, 0x95, 0x7f, 0x10, 0x06, 0x50, 0x7f, 0x07, 0x07, 0xd0, 0x01, 0x41, 0x19, 0xfe, 0x00, - 0x5b, 0x00, 0x00, 0x09, 0x88, 0xad, 0x30, 0xe7, 0x85, 0x28, 0x15, 0xae, 0x30, 0x53, 0x90, 0x06, 0x5d, 0x2f, 0x47, 0x6a, 0x97, 0xa3, 0x3a, 0xa1, - 0x67, 0x2a, 0x99, 0x2d, 0x00, 0x64, 0x2f, 0xb9, 0x06, 0x90, 0x7f, 0xc3, 0x10, 0x06, 0xf0, 0xff, 0x05, 0xff, 0xb5, 0xac, 0x4e, 0x7f, 0x75, 0x06, - 0x72, 0xfb, 0x3f, 0xff, 0x03, 0xbd, 0xac, 0x30, 0xae, 0xc4, 0xb3, 0x06, 0x90, 0x7f, 0x0e, 0xf3, 0x7f, 0x10, 0x1a, 0x04, 0x51, 0x28, 0x11, 0x33, - 0x04, 0x38, 0x04, 0x1e, 0x34, 0x04, 0x3e, 0x06, 0x28, 0x19, 0x06, 0xf2, 0x7f, 0x07, 0xf5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x08, 0x40, 0x08, 0xd0, - 0x01, 0xaa, 0x1a, 0x4f, 0x5a, 0x00, 0x00, 0x11, 0x0a, 0x88, 0xab, 0x28, 0x15, 0xa6, 0x30, 0xa9, 0x28, 0x1b, 0xaf, 0x06, 0x58, 0x19, 0x47, 0x6a, - 0xa1, 0x77, 0x48, 0x1b, 0x05, 0xf8, 0x15, 0xf0, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x84, 0x06, 0x1f, 0xb3, 0x5f, 0x6c, 0x9f, 0x53, 0x06, 0xb8, 0x17, - 0x15, 0xac, 0x31, 0xd0, 0xc6, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, 0x1a, 0x04, 0x30, 0x28, 0x17, 0x5e, 0x32, 0x28, 0x13, 0x3d, 0x06, 0x48, 0x19, - 0x06, 0xf2, 0x7f, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x09, 0x44, 0x09, 0xd0, 0x01, 0xf9, 0x1a, 0xdb, 0x28, 0x17, 0x0b, 0x88, 0x11, 0xc1, - 0x30, 0xe5, 0x28, 0x19, 0xc1, 0x30, 0xe7, 0x28, 0x1f, 0x10, 0xd6, 0x30, 0xaf, 0x06, 0x08, 0x1d, 0x43, 0x00, 0x68, 0x00, 0x5a, 0x75, 0x4f, 0xad, - 0x63, 0x20, 0x09, 0x7f, 0xb9, 0x62, 0x20, 0x13, 0x6b, 0xd5, 0x05, 0x4f, 0x3b, 0x00, 0x50, 0x7f, 0x20, 0x2f, 0xb5, 0x75, 0x20, 0x05, 0x4e, 0x2f, - 0xc9, 0x6a, 0x72, 0x2f, 0xc1, 0x0e, 0x10, 0xff, 0x53, 0x2f, 0xc5, 0x74, 0x20, 0x01, 0x65, 0xa8, 0x2f, 0xc9, 0x74, 0x21, 0x03, 0x69, 0x4f, 0xd3, - 0x61, 0x00, 0x6c, 0xde, 0x2f, 0xdd, 0x05, 0x51, 0x7f, 0x65, 0x20, 0x6b, 0x71, 0x81, 0x30, 0x87, 0x04, 0x5f, 0xd3, 0xe0, 0x08, 0x5f, 0x05, 0x6e, - 0x17, 0x06, 0xa8, 0x19, 0xa9, 0xcd, 0xad, 0x1d, 0xcc, 0x81, 0xbd, 0x06, 0x98, 0x19, 0x32, 0xe1, 0x52, 0xe3, 0x2d, 0x00, 0x63, 0x8b, 0xa0, 0x06, - 0x73, 0x7f, 0x6f, 0x05, 0x21, 0xfd, 0x00, 0x00, 0x27, 0x04, 0x45, 0x2c, 0x04, 0x43, 0x28, 0x19, 0x47, 0x20, 0x07, 0x38, 0x1b, 0x2d, 0x00, 0x47, - 0x1f, 0x20, 0x0f, 0x3a, 0x04, 0x42, 0x05, 0x68, 0x23, 0x06, 0xf2, 0x7f, 0x08, 0x55, 0x7f, 0x91, 0x10, 0x05, 0x90, 0x7f, 0x0a, 0x0a, 0xd0, 0x01, - 0x49, 0x1a, 0xf0, 0x28, 0x17, 0x46, 0x0c, 0xc8, 0x17, 0xca, 0x30, 0xe0, 0x07, 0x68, 0x17, 0x36, 0x81, 0x6d, 0xbb, 0x07, 0x28, 0x17, 0x53, 0x28, - 0xb3, 0x04, 0xb8, 0x15, 0x08, 0x90, 0xff, 0x4d, 0x29, 0xa3, 0x38, 0x0d, 0x75, 0x64, 0x04, 0x88, 0x11, 0x01, 0x58, 0x17, 0x31, 0x81, 0x72, 0x04, - 0xe5, 0x97, 0x57, 0x06, 0xe8, 0x17, 0x2f, 0xa8, 0xb0, 0x06, 0x98, 0x17, 0x5a, 0x2b, 0x95, 0x31, 0xe5, 0x06, 0x58, 0x15, 0x00, 0xf8, 0x17, 0xb0, - 0x33, 0x7f, 0x6c, 0x04, 0xcf, 0xc2, 0x00, 0x18, 0x17, 0x1d, 0x04, 0x30, 0x04, 0x1e, 0x3c, 0x04, 0x34, 0x05, 0xa8, 0x17, 0x06, 0xb2, 0x7f, 0x08, - 0x55, 0x7f, 0x10, 0x05, 0x90, 0x7f, 0x0b, 0x45, 0x0b, 0xd0, 0x01, 0xd9, 0x19, 0x9e, 0x28, 0x17, 0x0d, 0x28, 0x17, 0x00, 0xe7, 0x30, 0xeb, 0x30, - 0xe9, 0x30, 0xd6, 0x30, 0x6a, 0xaf, 0x06, 0x08, 0x13, 0x3f, 0xff, 0x4a, 0x4f, 0xa3, 0x6c, 0x2e, 0x87, 0x61, 0xfd, 0x05, 0xaf, 0x25, 0x00, 0x50, - 0x7f, 0x78, 0x0d, 0x5e, 0xa3, 0x04, 0xd8, 0x0f, 0x08, 0x50, 0xff, 0x53, 0x2f, 0xb1, 0x5f, 0x74, 0x4f, 0x9d, 0x6e, 0x2f, 0xa3, 0x38, 0x17, 0x04, - 0xb8, 0x13, 0x00, 0x31, 0x7f, 0x58, 0x0d, 0xc2, 0x05, 0x1e, 0x27, 0x7f, 0xff, 0x68, 0x51, 0x57, 0x7f, 0x06, 0xbd, 0xaf, 0x04, 0x07, 0xc8, 0x7c, - 0xb7, 0x81, 0xbd, 0x06, 0x98, 0x17, 0x3f, 0x91, 0x52, 0xed, 0x7c, 0x2d, 0xc3, 0x8b, 0x06, 0x73, 0x7f, 0x38, 0x0d, 0x05, 0x91, 0xfd, 0x38, 0x17, - 0x3e, 0x04, 0x54, 0x3b, 0x20, 0x01, 0x30, 0x28, 0x11, 0x1f, 0x28, 0x21, 0x3a, 0x04, 0x6e, 0x42, 0x05, 0x68, 0x11, 0x72, 0x7f, 0x85, 0x06, 0xc2, - 0x7f, 0x07, 0xb5, 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x0c, 0x45, 0x0c, 0xd0, 0x01, 0x7e, 0x19, 0x5e, 0x28, 0x17, 0x0e, 0x88, 0x17, 0x1f, 0xca, 0x30, - 0xe0, 0x07, 0x08, 0x17, 0x05, 0x9f, 0x25, 0x00, 0xd8, 0x17, 0x3e, 0xa3, 0x05, 0x58, 0x15, 0xb7, 0x07, 0xf0, 0xff, 0x4d, 0x2f, 0xb1, 0x38, 0x0d, - 0x64, 0x05, 0x28, 0x11, 0x00, 0xb8, 0x17, 0x3e, 0x27, 0x4c, 0x72, 0x05, 0x65, 0x97, 0x57, 0x7f, 0x06, 0xbd, 0xaf, 0x38, 0x17, 0xa8, 0xb0, 0xbe, - 0x06, 0x98, 0x17, 0x5a, 0x2f, 0xad, 0x31, 0xef, 0x06, 0x58, 0x15, 0x00, 0x58, 0x17, 0x33, 0x7f, 0x6c, 0xd1, 0x05, 0x6f, 0x40, 0xb8, 0x17, 0x1d, - 0x28, 0x1d, 0x3c, 0x04, 0x34, 0x06, 0x08, 0x17, 0xe4, 0x06, 0xb2, 0x7f, 0x07, 0xb5, 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x0d, 0x0d, 0xd0, 0x01, 0xf8, - 0x18, 0x44, 0x37, 0x28, 0x17, 0x0f, 0x88, 0xad, 0x28, 0x17, 0xf3, 0x30, 0x44, 0xb5, 0x20, 0x03, 0xd6, 0x30, 0xaf, 0x06, 0x28, 0x19, 0x47, 0x00, - 0x41, 0x79, 0x4f, 0xb1, 0x6e, 0x00, 0x67, 0x00, 0x73, 0x48, 0x1b, 0x7e, 0x67, 0x05, 0xcf, 0x37, 0x00, 0x30, 0x7f, 0x78, 0x1f, 0x5e, 0xb5, 0x04, - 0xd8, 0x21, 0x08, 0x50, 0xff, 0x53, 0xaf, 0x2f, 0xc5, 0x74, 0x4f, 0xaf, 0x6e, 0x2f, 0xb5, 0x38, 0x29, 0x04, 0x78, 0x25, 0x00, 0x71, 0x7f, 0xc2, - 0x58, 0x1f, 0x05, 0x1e, 0x39, 0x86, 0x5e, 0x1a, 0x5c, 0x06, 0xbd, 0xaf, 0xbd, 0x07, 0xac, 0xc1, 0xc0, 0x81, 0xbd, 0x06, 0x98, 0x17, 0x3f, 0x9b, - 0x52, 0xe5, 0x78, 0x2d, 0x00, 0x43, 0x8b, 0x06, 0x73, 0x7f, 0x38, 0x1f, 0x05, 0x11, 0xfd, 0x00, 0x00, 0x1a, 0x02, 0x04, 0x51, 0x04, 0x3d, 0x04, - 0x41, 0x28, 0x17, 0x3d, 0x80, 0x28, 0x19, 0x1f, 0x04, 0x43, 0x04, 0x3a, 0x04, 0x42, 0x9c, 0x05, 0xa8, 0x19, 0x76, 0x61, 0x06, 0xd2, 0x7f, 0x08, - 0x35, 0x7f, 0x10, 0x05, 0xb0, 0x7f, 0x0e, 0x0e, 0x80, 0xd0, 0x01, 0x7e, 0x19, 0x6f, 0x5b, 0x00, 0x00, 0x10, 0x8f, 0xa8, 0x17, 0xca, 0x30, 0xe0, - 0x07, 0x68, 0x17, 0x05, 0xbf, 0x37, 0x00, 0xb8, 0x17, 0x3e, 0xb5, 0xdb, 0x04, 0xd8, 0x15, 0x08, 0x70, 0xff, 0x4d, 0x2f, 0xc5, 0x38, 0x0d, 0x64, - 0x04, 0xa8, 0x11, 0x01, 0x38, 0x17, 0xbc, 0x3e, 0x39, 0x72, 0x04, 0xcf, 0xca, 0x38, 0x17, 0x06, 0xbd, 0xaf, 0x38, 0x17, 0xa8, 0xb0, 0xbe, 0x06, - 0x98, 0x17, 0x5a, 0x2f, 0x9b, 0x31, 0xe7, 0x06, 0x58, 0x15, 0x00, 0xd8, 0x17, 0x33, 0x7f, 0x6c, 0xd1, 0x04, 0xef, 0xba, 0xd8, 0x17, 0x1d, 0x28, - 0x1f, 0x3c, 0x04, 0x34, 0x05, 0xe8, 0x17, 0xe4, 0x06, 0xb2, 0x7f, 0x08, 0x35, 0x7f, 0x10, 0x05, 0xb0, 0x7f, 0x0f, 0x0f, 0xd0, 0x01, 0x1a, 0x19, - 0x40, 0x7c, 0x28, 0x17, 0x11, 0x88, 0xc1, 0x30, 0xa7, 0x30, 0x00, 0xb8, 0x30, 0xe5, 0x30, 0x79, 0x72, 0x25, 0x52, 0x0a, 0xea, 0x81, 0xbb, 0x6c, - 0x05, 0xfd, 0x39, 0x4a, 0x2f, 0xad, 0x6a, 0xb5, 0x2f, 0x9d, 0x2d, 0x4e, 0x9d, 0x3f, 0x27, 0x62, 0x6f, 0xc1, 0x6c, 0x20, 0x17, 0x07, 0x61, 0x00, - 0x63, 0x00, 0x68, 0x46, 0x9f, 0x04, 0x7f, 0x39, 0x70, 0x7f, 0xf8, 0x06, 0x7e, 0x2f, 0x90, 0xff, 0x05, 0x3b, 0x9d, 0x08, 0x90, 0xff, 0x06, 0x8f, - 0x2f, 0x6d, 0xde, 0x5d, 0x18, 0x79, 0x72, 0x2b, 0x06, 0x42, 0xfb, 0x3f, 0xff, 0x1c, 0xc8, 0xfc, 0x00, 0xc8, 0xb9, 0xd2, 0xc4, 0xbc, 0x90, 0xc7, - 0x58, 0x62, 0xce, 0x06, 0x38, 0x1d, 0x0e, 0xf2, 0x7f, 0x27, 0x04, 0x35, 0x28, 0x07, 0x36, 0x33, 0x04, 0x43, 0x05, 0xc8, 0x0d, 0x9f, 0xff, 0xdf, - 0x6f, 0x32, 0x7f, 0x06, 0x55, 0x7b, 0xc8, 0x07, 0xb5, 0x7f, 0x10, 0x06, 0x70, 0x7f, 0x10, 0x10, 0xd0, 0x01, 0xd5, 0x17, 0xfa, 0x49, 0x59, 0x00, - 0x3f, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x02, 0x02, 0xd0, 0x01, 0x24, 0x03, 0x03, 0xd0, 0x01, 0x04, 0x04, 0xd0, 0x01, 0x05, 0x05, 0x92, 0xd0, 0x01, - 0x06, 0x06, 0xd0, 0x01, 0x07, 0x07, 0xd0, 0x01, 0x08, 0x49, 0x08, 0xd0, 0x01, 0x09, 0x09, 0xd0, 0x01, 0x0a, 0x0a, 0xd0, 0x01, 0x24, 0x0b, 0x0b, - 0xd0, 0x01, 0x0c, 0x0c, 0xd0, 0x01, 0x0d, 0x0d, 0x9e, 0xd0, 0x01, 0x0e, 0x0e, 0xd0, 0x01, 0xf9, 0x1f, 0xf1, 0x17, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x11, 0x58, 0x08, 0x00, 0x12, 0x01, 0x00, 0x00, 0x30, 0x01, 0x88, 0x10, 0x50, 0x07, 0x00, 0x0c, 0xd3, 0x97, 0xfd, 0x56, 0x60, 0x0a, 0x06, 0x40, - 0x06, 0x53, 0x00, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x68, 0x00, 0x10, 0x20, 0x00, 0x4b, 0x20, 0x0b, 0x72, 0x00, 0x65, 0x00, 0x54, 0x61, - 0x05, 0xa0, 0x90, 0x43, 0x40, 0x73, 0xe9, 0x20, 0x75, 0x20, 0x00, 0x56, 0x64, 0x20, 0x89, 0x20, 0x20, 0x91, 0x75, 0x20, 0x09, 0x05, 0x90, 0xff, - 0xfc, 0xbc, 0x20, 0x77, 0x6b, 0x06, 0x20, 0xf9, 0xb0, 0xff, 0x31, 0x73, 0x30, 0xff, 0x65, 0x00, 0x6a, 0x6c, 0x05, 0xe1, 0x01, 0x00, 0x70, 0x7f, - 0x72, 0x05, 0x62, 0x94, 0xe9, 0x06, 0xe2, 0xff, 0x00, 0x01, 0xb3, 0x5c, 0xd5, 0xfc, 0xbb, 0x6d, 0xad, 0x06, 0x73, 0x83, 0x56, 0x5a, 0x23, 0x7d, - 0x69, 0x22, 0xf9, 0x2d, 0x06, 0x43, 0x7d, 0x92, 0x7f, 0x69, 0xa8, 0x62, 0x81, 0x6f, 0x63, 0x81, 0x6c, 0x05, 0x64, 0x94, 0x2e, 0x04, 0x36, 0x00, - 0x04, 0x3d, 0x04, 0x30, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x00, 0x1a, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x35, 0xc3, 0x20, 0x0b, 0x05, 0x95, 0x11, 0xd3, - 0x97, 0x0b, 0x57, 0x0e, 0xb5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x80, 0x03, 0x77, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xec, 0xd3, 0x00, 0x11, 0x16, 0x00, 0x00, 0x30, 0x01, 0x80, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xcd, 0x11, 0x67, 0x56, 0x00, 0x00, 0x00, 0x02, 0x80, 0xf0, 0x53, 0x17, 0x53, 0x02, 0x40, 0x5e, 0x06, 0x98, 0x1b, 0x54, 0x00, 0x61, 0x00, - 0x69, 0x00, 0x11, 0x70, 0x00, 0x65, 0x20, 0x05, 0x20, 0x00, 0x43, 0x20, 0x0b, 0x1b, 0x74, 0x00, 0x79, 0x06, 0x60, 0x7f, 0x06, 0xd0, 0xff, 0x68, - 0x07, 0x01, 0x7f, 0x06, 0xb1, 0xff, 0x50, 0xe9, 0x06, 0x61, 0x7f, 0x2d, 0x06, 0xe3, 0x96, 0xc0, 0xd0, 0x74, 0xc7, 0x0c, 0xa0, 0xbc, 0x74, 0xc7, - 0x07, 0x33, 0x7f, 0x0e, 0x32, 0x7f, 0x22, 0x04, 0x01, 0x30, 0x04, 0x39, 0x04, 0x31, 0x04, 0x4d, 0x20, 0x05, 0x99, 0x06, 0x3d, 0x21, 0xfa, 0x81, - 0x0f, 0x95, 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x81, 0x58, 0x17, 0x03, 0x80, 0xd8, 0x9a, 0xc4, 0x96, 0x06, 0xb8, 0x17, 0x54, - 0x4b, 0x28, 0x17, 0x6f, 0x27, 0x13, 0x73, 0x28, 0x1d, 0x75, 0x00, 0x1e, 0x6e, 0x00, 0x67, 0x05, 0xe8, 0x1d, 0x00, 0x10, 0x7f, 0x06, 0xf0, 0xff, - 0x0d, 0xd0, 0x7f, 0x43, 0x8a, 0x21, 0xfd, 0x6e, 0x00, 0x64, 0x2a, 0x1d, 0x64, 0x22, 0x07, 0x20, 0xb8, 0x20, 0x09, 0x65, 0x2a, 0x1f, 0x05, 0x91, - 0x95, 0x06, 0xf8, 0x17, 0x00, 0xac, 0x24, 0x1a, 0xc6, 0x9d, 0xc2, 0x07, 0xb3, 0x7f, 0x0d, 0xd1, 0xff, 0x13, 0x28, 0x17, 0x3e, 0x03, 0x04, 0x41, - 0x04, 0x4e, 0x04, 0x3d, 0x06, 0x48, 0x17, 0x10, 0x00, 0x15, 0x7f, 0x90, 0x10, 0x05, 0xd0, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x12, 0x10, 0x88, 0x55, - 0x01, 0x00, 0x00, 0x04, 0x80, 0xfa, 0x57, 0x86, 0x06, 0xe8, 0x17, 0x5f, 0x65, 0x2f, 0xab, 0x6c, 0x06, 0x48, 0x13, 0x00, 0x10, 0x7f, 0x06, 0xf0, - 0xff, 0x10, 0x06, 0x10, 0x7f, 0x06, 0xf8, 0x17, 0x0a, 0xc0, 0xc9, 0xfd, 0xb8, 0x06, 0xb8, 0x9a, 0x43, 0x2b, 0x93, 0x69, 0x80, 0x0e, 0xa2, 0xff, - 0x1a, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x43, 0xb9, 0x28, 0x15, 0x33, 0x06, 0x48, 0x17, 0x0f, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x03, 0x03, 0xd0, - 0x01, 0x00, 0xdd, 0x11, 0x91, 0x56, 0x00, 0x00, 0x05, 0x80, 0x0a, 0xb0, 0x65, 0xf9, 0x7a, 0x06, 0xba, 0xaf, 0x48, 0x4f, 0xa9, 0x6e, 0x2f, 0x00, - 0x63, 0x2f, 0xb3, 0x75, 0x06, 0x28, 0x17, 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x10, 0x7f, 0x86, 0x06, 0xf8, 0x17, 0xe0, 0xc2, 0xfc, 0xc8, - 0x06, 0xb8, 0x9a, 0x0e, 0xf2, 0xff, 0x21, 0x80, 0x28, 0x17, 0x3d, 0x04, 0x4c, 0x04, 0x47, 0x04, 0x36, 0xf2, 0x28, 0x1d, 0x06, 0x1f, 0xb7, 0x0f, - 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x04, 0x04, 0xd0, 0x01, 0x95, 0x20, 0x11, 0x03, 0x28, 0x17, 0x06, 0x80, 0xf0, 0x53, 0x2d, 0x47, 0x4e, 0x06, - 0xba, 0xaf, 0x54, 0x00, 0x61, 0x2c, 0xaf, 0x58, 0x15, 0x06, 0x3a, 0xb1, 0xf0, 0xf0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xf0, 0x7f, 0x06, 0xf8, - 0x17, 0xc0, 0xd0, 0x74, 0xc7, 0x30, 0x11, 0xc9, 0x07, 0x93, 0x7f, 0x0d, 0xf2, 0xff, 0x22, 0x04, 0x30, 0x04, 0x53, 0x39, 0x68, 0x15, 0x3d, 0x06, - 0x28, 0x17, 0xfa, 0x81, 0x0f, 0xd5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x20, 0x05, 0x05, 0xd0, 0x01, 0x29, 0x11, 0xcb, 0x55, 0x00, 0x01, 0x00, 0x07, - 0x80, 0x09, 0x56, 0xa9, 0x7f, 0x06, 0xba, 0xaf, 0x57, 0x43, 0x2f, 0xa7, 0x69, 0x28, 0x1b, 0x79, 0x2f, 0xb5, 0x06, 0x1a, 0xad, 0xd0, 0x7f, 0xe1, - 0x06, 0xf0, 0xff, 0x10, 0x06, 0x30, 0x7f, 0x06, 0xf8, 0x17, 0x90, 0xc7, 0x74, 0xc7, 0x06, 0xb8, 0x9a, 0x80, 0x0e, 0xf2, 0xff, 0x26, 0x04, 0x37, - 0x04, 0x4f, 0x04, 0x38, 0xf2, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x0f, 0xb5, 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x06, 0x06, 0xd0, 0x01, 0xaf, 0x20, 0x10, - 0xa7, 0x28, 0x17, 0x08, 0x80, 0xf0, 0x53, 0x57, 0x57, 0x53, 0x07, 0x1a, 0xaf, 0x6e, 0x2f, 0xb5, 0x6e, 0x06, 0x48, 0x17, 0xb0, 0x7f, 0x06, 0xf0, - 0xff, 0xc0, 0x10, 0x06, 0x30, 0x7f, 0x06, 0xf8, 0x17, 0xc0, 0xd0, 0x74, 0xc7, 0x9c, 0xb0, 0xc0, 0x07, 0x53, 0x7f, 0x0e, 0x32, 0xff, 0x22, 0x04, - 0x30, 0x04, 0x39, 0x04, 0x44, 0x3d, 0x20, 0x05, 0x3d, 0x04, 0x4c, 0x06, 0x28, 0x1d, 0xfa, 0x81, 0xc8, 0x0f, 0x95, 0x7f, 0x10, 0x06, 0x30, 0x7f, - 0x07, 0x07, 0xd0, 0x01, 0x59, 0x10, 0x78, 0x82, 0x28, 0x17, 0x09, 0x80, 0xb0, 0x65, 0x17, 0x06, 0xc8, 0x17, 0x4e, 0x0d, 0x00, 0x65, 0x00, 0x77, - 0x2a, 0xa9, 0x58, 0x1f, 0x70, 0x20, 0x0d, 0x80, 0x05, 0xda, 0xb7, 0x4e, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x76, 0xba, 0x20, 0x85, 0x61, 0x20, 0x07, - 0xd0, 0x87, 0x05, 0x3f, 0xc0, 0x58, 0x49, 0x15, 0x62, 0xeb, 0x05, 0x80, 0x6f, 0x01, 0x31, 0x7f, 0x05, 0xd1, 0xff, 0x75, 0x22, 0x01, 0x76, 0x21, - 0x85, 0x92, 0x03, 0x60, 0xe9, 0x05, 0xae, 0xbb, 0x06, 0xf8, 0x17, 0xe0, 0xc2, 0xa0, 0xbc, 0x74, 0x56, 0xc7, 0x06, 0xb3, 0x7f, 0x69, 0x23, 0x81, - 0x75, 0x06, 0x82, 0x03, 0x33, 0x7f, 0x76, 0xc0, 0x2e, 0xaf, 0x06, 0x72, 0x81, 0x1d, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x51, 0x4b, 0x28, 0x1b, 0x20, - 0x68, 0x23, 0x31, 0x04, 0x4d, 0x28, 0x29, 0xe4, 0x05, 0x7f, 0xc1, 0x0f, 0x15, 0x7f, 0x10, 0x06, 0xd0, 0x7f, 0x08, 0x08, 0xd0, 0x01, 0xc3, 0x11, - 0x00, 0x5d, 0x56, 0x00, 0x00, 0x0a, 0x80, 0x43, 0x68, 0x2b, 0x12, 0x57, 0x06, 0xfa, 0xaf, 0x6f, 0x2a, 0xa1, 0x75, 0x06, 0x6a, 0xb1, 0xd0, 0x7f, - 0xe2, 0x06, 0xf0, 0xff, 0x0e, 0x10, 0x7f, 0x3c, 0xa1, 0x75, 0x00, 0x64, 0x2e, 0xb5, 0x64, 0xbc, 0x2c, 0xaf, 0x64, 0x2a, 0x25, 0x5a, 0x23, 0x05, - 0x71, 0x93, 0x06, 0xf8, 0x17, 0xc0, 0xd0, 0x03, 0x24, 0xc6, 0x04, 0xc7, 0x48, 0xc5, 0x07, 0x53, 0x7f, 0x06, 0x51, 0xff, 0xf1, 0x51, 0xfd, 0x31, - 0xf9, 0x06, 0x11, 0xff, 0x38, 0x0b, 0x3e, 0x04, 0x4e, 0x28, 0x11, 0x1e, 0x3d, 0x04, 0x4c, 0x05, 0x88, 0x0d, 0xa2, 0xff, 0x0f, 0xc5, 0x7f, 0x10, - 0x06, 0x10, 0x7f, 0x09, 0x44, 0x09, 0xd0, 0x01, 0xc2, 0x11, 0x40, 0x28, 0x17, 0x0b, 0x80, 0x02, 0xb0, 0x65, 0xf9, 0x7a, 0x0c, 0x77, 0x06, 0x9d, - 0x34, 0x48, 0x22, 0x00, 0x73, 0x4f, 0x31, 0x43, 0x00, 0x68, 0x4f, 0xaf, 0x43, 0xb5, 0x4f, 0xbf, 0x6e, 0x05, 0x88, 0x1b, 0x70, 0x7f, 0x63, 0x60, - 0x7f, 0x28, 0x20, 0x09, 0x15, 0x6f, 0x00, 0x6d, 0x2b, 0x2d, 0xe9, 0x66, 0xa7, 0x29, 0x04, 0xcf, 0xc7, 0x17, 0x4b, 0x00, 0x72, 0x4f, 0xa3, 0x73, - 0x2f, 0xb3, 0xd0, 0x8b, 0x05, 0x77, 0x97, 0x57, 0x6f, 0x41, 0x6d, 0x65, 0x4d, 0xb3, 0x64, 0x4c, 0x2d, 0xd1, 0x93, 0x05, 0x30, 0x7f, 0xb8, 0x58, - 0x17, 0x6f, 0x88, 0x19, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0xe0, 0xc2, 0xfc, 0x07, 0xc8, 0x20, 0x00, 0x04, 0xd6, 0x07, 0x53, 0x7f, 0x06, 0x3a, - 0x17, 0x06, 0xd1, 0xff, 0x10, 0x21, 0x04, 0x38, 0x48, 0x11, 0x47, 0x04, 0x36, 0x04, 0x20, 0x43, 0x04, 0x33, 0xff, 0x43, 0x04, 0x35, 0x04, 0x37, - 0x1c, 0x04, 0x34, 0x04, 0x04, 0xd3, 0xf7, 0x7f, 0xff, 0x35, 0x7f, 0x23, 0x7e, 0xc8, 0x0f, 0x15, 0x7f, 0x10, 0x06, 0x70, 0x7f, 0x0a, 0x0a, 0xd0, - 0x01, 0xa8, 0x11, 0x0b, 0x81, 0x28, 0x17, 0x0c, 0x80, 0xd7, 0x82, 0x17, 0x68, 0x06, 0xb8, 0x17, 0x6f, 0x4d, 0x2e, 0x2f, 0x3f, 0xb1, 0x6c, 0x46, - 0x91, 0x05, 0xf8, 0x15, 0xf0, 0x7f, 0x05, 0xf8, 0x15, 0xfa, 0xd8, 0x17, 0xb1, 0x0b, 0x05, 0xd5, 0x97, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x44, 0x49, - 0x13, 0x74, 0xf8, 0x29, 0x1d, 0x3c, 0xa7, 0x98, 0x19, 0x05, 0x71, 0x0b, 0x06, 0xf8, 0x17, 0x00, 0xba, 0x24, 0x1c, 0xc6, 0xac, 0xb9, 0x06, 0x98, - 0x19, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x1c, 0x04, 0x07, 0x4f, 0x04, 0x3e, 0x04, 0x3b, 0x28, 0x1d, 0x06, 0x18, 0x13, 0x3f, 0xff, 0xf2, 0x35, - 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x0b, 0x0b, 0xd0, 0x01, 0x72, 0x00, 0x11, 0xe6, 0x55, 0x00, 0x00, 0x0e, 0x80, - 0x70, 0x1a, 0x5f, 0x16, 0x53, 0x06, 0xb8, 0x17, 0x3e, 0x93, 0x61, 0x2f, 0xaf, 0x67, 0xff, 0x4f, 0xaf, 0x3e, 0xb3, 0x05, 0xda, 0xb1, 0x00, 0x10, - 0x7f, 0x05, 0xd8, 0x1b, 0xb8, 0x17, 0xf1, 0x0b, 0x06, 0x78, 0x17, 0xf0, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, - 0xa5, 0xc7, 0x54, 0xd6, 0xf0, 0x06, 0x98, 0x15, 0x00, 0x13, 0x7f, 0x06, 0x13, 0xff, 0x06, 0xd1, 0xff, 0x27, 0x04, 0x36, 0x04, 0x01, 0x30, 0x04, - 0x3d, 0x04, 0x45, 0x04, 0x43, 0x20, 0x07, 0xf9, 0x06, 0x18, 0x1b, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x08, 0x15, 0x7f, 0x10, 0x05, 0xd0, 0x7f, 0x0c, - 0x0c, 0xd0, 0x01, 0x10, 0x1d, 0x11, 0xb6, 0x28, 0x17, 0x0f, 0x80, 0x57, 0x53, 0x2d, 0x95, 0x62, 0x06, 0xb8, 0x17, 0x4e, 0x48, 0x15, 0x3e, 0x29, - 0x75, 0x06, 0x4a, 0xaf, 0xff, 0xd0, 0x7f, 0x05, 0xd8, 0x13, 0xf8, 0x17, 0xb1, 0x0b, 0x05, 0xd5, 0x97, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x58, - 0x17, 0xc0, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x9c, 0xb0, 0x30, 0xd1, 0xb0, 0xc6, 0xe8, 0x06, 0x98, 0x19, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, - 0x1d, 0x48, 0x15, 0x4c, 0x04, 0x42, 0x3f, 0x04, 0x3e, 0x28, 0x19, 0x06, 0x18, 0x17, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, - 0x10, 0x7f, 0x22, 0x0d, 0x0d, 0xd0, 0x01, 0xfe, 0x10, 0xd4, 0x28, 0x17, 0x10, 0x05, 0x80, 0xf2, 0x96, 0x97, 0x67, 0x06, 0xb8, 0x17, 0x59, 0x4a, - 0x9b, 0x5f, 0x6c, 0x2f, 0x31, 0x6e, 0x06, 0x48, 0x17, 0xd0, 0x7f, 0x06, 0xd8, 0x17, 0xb1, 0x0b, 0x06, 0xb8, 0x17, 0xf0, 0x05, 0xb0, 0x87, 0x00, - 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x08, 0xc7, 0xb0, 0xb9, 0xf4, 0x06, 0x98, 0x15, 0xd3, 0x7f, 0x07, 0x98, 0x17, 0x05, 0x93, 0x09, - 0x2e, 0x48, 0x15, 0x3b, 0x04, 0x7e, 0x38, 0x48, 0x1d, 0x06, 0x18, 0x17, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, - 0x0e, 0x44, 0x0e, 0xd0, 0x01, 0xd8, 0x10, 0xb5, 0x28, 0x17, 0x11, 0x80, 0x08, 0x09, 0x56, 0xa9, 0x7f, 0x06, 0xb8, 0x17, 0x43, 0x00, 0x68, 0xbf, - 0x2f, 0x2d, 0x61, 0x2a, 0x9f, 0x3e, 0xa9, 0x06, 0x1a, 0xaf, 0xd0, 0x7f, 0x06, 0xd8, 0x17, 0xb1, 0x0b, 0xf8, 0x06, 0xb8, 0x17, 0x05, 0xb0, 0x87, - 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x90, 0xc7, 0x74, 0x75, 0xc7, 0x06, 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x26, - 0x28, 0x03, 0x4f, 0x28, 0x15, 0x7e, 0xa0, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, - 0x0f, 0x44, 0x0f, 0xd0, 0x01, 0xaf, 0x10, 0xa7, 0x28, 0x17, 0x14, 0x80, 0x0a, 0x4f, 0x5c, 0x71, 0x67, 0x06, 0xb8, 0x17, 0x50, 0x4f, 0xa9, 0x67, - 0xdf, 0x2f, 0xa1, 0x3f, 0xb7, 0x67, 0x06, 0x0a, 0xb3, 0x00, 0x10, 0x7f, 0x05, 0xd8, 0x1b, 0xb8, 0x17, 0xf1, 0x0b, 0xf8, 0x06, 0x78, 0x17, 0x05, - 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x51, 0xd5, 0x65, 0x75, 0xb4, 0x06, 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, - 0xff, 0x1f, 0x28, 0x13, 0x3d, 0x28, 0x0b, 0x7f, 0x43, 0x20, 0x05, 0x3c, 0x17, 0x05, 0xf8, 0x1b, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x08, 0x15, 0x7f, - 0x10, 0x05, 0xd0, 0x7f, 0x22, 0x10, 0x10, 0xd0, 0x01, 0x1e, 0x10, 0xb0, 0x28, 0x17, 0x15, 0x05, 0x80, 0x9c, 0x5b, 0x2d, 0x86, 0x06, 0xb8, 0x17, - 0x59, 0x2f, 0xad, 0x51, 0x6c, 0x2f, 0xaf, 0x6e, 0x06, 0x4a, 0xad, 0x00, 0x00, 0x49, 0x80, 0x7d, 0xff, 0x05, 0xd8, 0x0f, 0x00, 0x38, 0x17, 0x91, - 0x0b, 0x05, 0xfd, 0xaf, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x87, 0x06, 0xf8, 0x17, 0x74, 0xc7, 0x80, 0xb7, 0x06, - 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x05, 0x18, 0x04, 0x3b, 0x04, 0x30, 0x28, 0x19, 0x4c, 0x06, 0x48, 0x15, 0x3c, 0x00, 0x00, 0x35, - 0x7f, 0x06, 0xb8, 0x17, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x11, 0x11, 0x80, 0xd0, 0x01, 0x9c, 0x11, 0x93, 0x56, 0x00, 0x00, 0x16, 0x05, - 0x80, 0xb1, 0x82, 0xee, 0x84, 0x06, 0xb8, 0x17, 0x48, 0x2f, 0xa7, 0x5f, 0x61, 0x28, 0x19, 0x69, 0x2f, 0x97, 0x06, 0x38, 0x1b, 0xf0, 0x7f, 0x05, - 0xf8, 0x1d, 0xb8, 0x17, 0xfc, 0xd1, 0x0b, 0x06, 0x98, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x54, 0xd6, - 0x38, 0x44, 0xb8, 0x06, 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x25, 0x04, 0x43, 0x8f, 0x28, 0x17, 0x3b, 0x04, 0x4f, 0x06, 0x68, 0x1b, - 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xf5, 0x7f, 0x91, 0x10, 0x05, 0xf0, 0x7f, 0x12, 0x12, 0xd0, 0x01, 0x0e, 0x11, 0x7e, 0x28, 0x17, 0x02, 0x17, - 0x80, 0xf0, 0x53, 0x71, 0x67, 0x06, 0xb8, 0x17, 0x54, 0xb7, 0x2f, 0xad, 0x69, 0x2f, 0xa3, 0x3a, 0xa7, 0x67, 0x06, 0x2a, 0xb3, 0xf0, 0x7f, 0x06, - 0xb8, 0x17, 0xfc, 0xd1, 0x0b, 0x06, 0x98, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0xc0, 0xd0, 0x0e, 0x74, - 0xc7, 0x65, 0xb4, 0x06, 0x98, 0x19, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x22, 0xac, 0x28, 0x15, 0x39, 0x28, 0x05, 0x43, 0x28, 0x17, 0x06, 0x18, - 0x15, 0x00, 0x00, 0x0e, 0xfa, 0x81, 0x71, 0x67, 0x06, 0xb8, 0x17, 0x07, 0xf5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x13, 0x44, 0x13, 0xd0, 0x01, 0x2e, - 0x10, 0x25, 0x28, 0x17, 0x18, 0x80, 0x0a, 0x8e, 0x6f, 0x56, 0x6e, 0x06, 0xb8, 0x17, 0x50, 0x4f, 0xa7, 0x67, 0x3f, 0x00, 0x68, 0x2f, 0xb7, 0x06, - 0x1a, 0xad, 0xf0, 0x7f, 0x05, 0xf8, 0x15, 0xd8, 0x17, 0xb1, 0x0b, 0xeb, 0x05, 0xdd, 0xaf, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x49, 0x29, 0x11, 0x6c, - 0x2e, 0xb1, 0x70, 0xff, 0x76, 0x73, 0x29, 0x97, 0x5e, 0x3b, 0x39, 0x2f, 0x73, 0x05, 0x0f, 0xcd, 0x06, 0xf8, 0x17, 0x91, 0x1d, 0xd3, 0xc4, 0xd6, - 0x06, 0x98, 0x15, 0xd3, 0x7f, 0x06, 0x3e, 0xb5, 0x49, 0x2e, 0xab, 0x45, 0x68, 0x06, 0xa1, 0xff, 0x1f, 0x04, 0x4d, 0x28, 0x11, 0x45, 0x28, 0x17, - 0x9e, 0x06, 0x38, 0x15, 0x00, 0x00, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x14, 0x40, 0x14, 0xd0, 0x01, 0xc2, - 0x10, 0x09, 0x55, 0x00, 0x00, 0x02, 0x19, 0x80, 0xd1, 0x91, 0x80, 0x95, 0x06, 0xb8, 0x17, 0x4b, 0xbf, 0x2f, 0xad, 0x6e, 0x2f, 0x9f, 0x38, 0x1d, - 0x06, 0x38, 0x17, 0xd0, 0x7f, 0x06, 0xd8, 0x17, 0xb1, 0x0b, 0xf8, 0x06, 0xb8, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, - 0xf8, 0x17, 0xc4, 0xc9, 0x3c, 0x75, 0xba, 0x06, 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x26, 0x28, 0x07, 0x38, 0x28, 0x19, 0x1f, 0x4c, - 0x04, 0x3c, 0x48, 0x21, 0x05, 0xf8, 0x1d, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x90, 0x10, 0x06, 0x10, 0x7f, 0x15, 0x15, 0xd0, 0x01, - 0x5f, 0x11, 0x25, 0x54, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x23, 0x90, 0x5f, 0x6c, 0xb5, 0x06, 0xb8, 0x17, 0x4c, 0x2f, 0x2b, 0x3f, 0xb1, 0x63, 0x2f, - 0xb1, 0x69, 0x2e, 0xb3, 0xff, 0x3f, 0xbb, 0x05, 0xba, 0xb7, 0x00, 0x50, 0x7f, 0x05, 0x98, 0x1f, 0xb8, 0x17, 0x00, 0x31, 0x0b, 0x06, 0x38, 0x17, - 0x05, 0xb0, 0x87, 0xe1, 0x00, 0x58, 0x17, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x44, 0xb8, 0xa5, 0xc7, 0x06, 0xb8, 0x17, 0xc5, 0x06, 0x32, 0x73, - 0x07, 0xb1, 0xff, 0x1b, 0x04, 0x4f, 0x48, 0x15, 0x46, 0x28, 0x1f, 0xfc, 0x30, 0x09, 0x05, 0xf8, 0x17, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x08, 0x55, - 0x7f, 0x10, 0x05, 0x90, 0x7f, 0x16, 0x16, 0x82, 0xd0, 0x01, 0x98, 0x12, 0x48, 0x55, 0x03, 0x4f, 0xff, 0x0d, 0x05, 0x80, 0xf0, 0x53, 0x2d, 0x4e, - 0x06, 0xb8, 0x1b, 0x54, 0x2e, 0xab, 0x7f, 0x69, 0x48, 0x19, 0x3a, 0xab, 0x05, 0xd8, 0x17, 0x00, 0x50, 0x7f, 0x05, 0x98, 0x17, 0xf8, 0x1b, 0xf1, - 0x0b, 0xfc, 0x05, 0x9d, 0xb3, 0xd8, 0x1b, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x33, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x1b, 0xc0, 0xd0, 0x0e, 0x74, 0xc7, - 0x11, 0xc9, 0x06, 0x98, 0x1d, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x22, 0x00, 0x04, 0x30, 0x04, 0x39, 0x04, 0x47, 0x04, 0x36, 0x39, 0x04, 0x43, - 0x06, 0x28, 0x19, 0x08, 0x34, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x0c, 0x0c, 0xd0, 0x01, 0x01, 0x39, 0x11, 0xd5, 0x55, 0x00, 0x00, 0x12, 0x28, 0x17, - 0x2f, 0x57, 0x53, 0x07, 0x18, 0x17, 0x6e, 0x4f, 0xad, 0x05, 0xf8, 0x13, 0x00, 0x10, 0x7f, 0x05, 0xd8, 0x13, 0xff, 0x00, 0x58, 0x17, 0x51, 0x0b, - 0x05, 0xdd, 0xb3, 0x00, 0x38, 0x17, 0x05, 0x50, 0x87, 0x00, 0xb8, 0x17, 0x05, 0x31, 0x09, 0x07, 0x38, 0x17, 0x3d, 0x9c, 0xb0, 0x06, 0xf8, 0x17, - 0x05, 0xd2, 0x73, 0x07, 0xb1, 0xff, 0x58, 0x17, 0x3d, 0x28, 0x1d, 0x1c, 0x3d, 0x04, 0x4c, 0x06, 0x88, 0x17, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x10, - 0x7f, 0x11, 0x11, 0x88, 0xd0, 0x01, 0x64, 0x10, 0x92, 0x28, 0x17, 0x13, 0x80, 0xd8, 0x15, 0x9a, 0xc4, 0x96, 0x06, 0xb8, 0x17, 0x4b, 0x2f, 0xaf, - 0x6f, 0x2f, 0xad, 0x7f, 0x73, 0x2f, 0xb5, 0x06, 0x3b, 0x31, 0x00, 0x30, 0x7f, 0x05, 0xb8, 0x1d, 0xb8, 0x17, 0x00, 0x11, 0x0b, 0x06, 0x58, 0x17, - 0xab, 0x05, 0xb0, 0x87, 0x44, 0x49, 0x13, 0x74, 0x29, 0x1d, 0x69, 0x2d, 0x21, 0x9e, 0x31, 0xc0, 0x05, 0x71, 0x0b, 0x06, 0xf8, 0x17, 0x00, 0xac, - 0x24, 0xc6, 0x9d, 0xc2, 0xe8, 0x06, 0x98, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x13, 0x28, 0x17, 0x3e, 0x04, 0x41, 0x3c, 0x04, 0x4e, 0x28, - 0x1b, 0x06, 0x18, 0x15, 0x08, 0x54, 0xff, 0x10, 0x0d, 0xb0, 0x7f, 0x12, 0x12, 0x8c, 0xd0, 0x01, 0x16, 0x10, 0x95, 0x28, 0x17, 0xdf, 0xff, 0x01, - 0x01, 0x92, 0xd0, 0x01, 0x02, 0x02, 0xd0, 0x01, 0x03, 0x03, 0xd0, 0x01, 0x04, 0x49, 0x04, 0xd0, 0x01, 0x05, 0x05, 0xd0, 0x01, 0x06, 0x06, 0xd0, - 0x01, 0x24, 0x07, 0x07, 0xd0, 0x01, 0x08, 0x08, 0xd0, 0x01, 0x09, 0x09, 0x92, 0xd0, 0x01, 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0xd0, 0x01, 0x0d, - 0x49, 0x0d, 0xd0, 0x01, 0x0e, 0x0e, 0xd0, 0x01, 0x0f, 0x0f, 0xd0, 0x01, 0x24, 0x10, 0x10, 0xd0, 0x01, 0x13, 0x13, 0xd0, 0x01, 0x14, 0x14, 0x92, - 0xd0, 0x01, 0x15, 0x15, 0xd0, 0x01, 0x16, 0x16, 0xd0, 0x01, 0x17, 0x49, 0x17, 0xd0, 0x01, 0x18, 0x18, 0xd0, 0x01, 0x19, 0x19, 0xd0, 0x01, 0x80, - 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x90, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xf9, 0x0f, 0x47, 0x51, 0x00, 0x00, 0x00, 0x01, 0x90, 0xdb, 0x30, 0xf3, 0x30, 0xb3, 0xc0, - 0x20, 0x03, 0x06, 0x78, 0x1d, 0x48, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x06, 0x67, 0x00, 0x20, 0x00, 0x4b, 0x60, 0x09, 0x0e, 0x50, 0x7f, 0x6b, 0xc0, - 0x06, 0x40, 0xfd, 0x0f, 0x11, 0x7f, 0x2d, 0x4e, 0xfd, 0x56, 0x20, 0x00, 0x08, 0x99, 0x99, 0x2f, 0x6e, 0x06, 0x5b, 0x1f, 0x4d, 0xd6, 0x69, 0x60, - 0xcf, 0x06, 0xbb, 0x99, 0x0e, 0xf2, 0x7f, 0x13, 0x04, 0x3e, 0x04, 0x3d, 0x27, 0x04, 0x3a, 0x40, 0x05, 0x33, 0x04, 0x06, 0x1d, 0x23, 0x06, 0x92, - 0x79, 0x0f, 0xd5, 0x7f, 0x9e, 0x0e, 0x76, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x4c, 0x10, 0x00, 0x23, 0x00, 0x00, 0x40, 0x01, 0x91, 0x14, 0x20, 0x60, 0x09, 0x06, 0x60, - 0x06, 0xc1, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xcc, 0x0f, 0xc8, 0x50, 0x01, 0x48, 0x1c, 0x00, 0x01, 0x91, 0xde, 0x30, 0xab, 0x30, 0xaa, 0x30, - 0x82, 0x06, 0x98, 0x1f, 0x4d, 0x00, 0x61, 0x00, 0x63, 0x20, 0x03, 0x6f, 0xa0, 0x0e, 0xe0, 0x7f, 0x75, 0x10, 0x06, 0x61, 0x7f, 0x2d, 0x4e, 0xfd, - 0x56, 0x20, 0x04, 0x00, 0xb3, 0x6f, 0xe8, 0x95, 0x06, 0x5b, 0x23, 0xc8, 0xb9, 0x0e, 0x74, 0xce, 0x24, 0xc6, 0x07, 0x13, 0x7f, 0x06, 0xf2, 0x7f, - 0x06, 0x72, 0xff, 0x1c, 0x09, 0x04, 0x30, 0x04, 0x3a, 0x20, 0x03, 0x3e, 0x04, 0x06, 0x5d, 0x23, 0x1c, 0xb3, 0x6f, 0x80, 0x06, 0x62, 0x79, 0x0f, - 0xd5, 0x7f, 0x0e, 0x76, 0x7f, 0x01, 0x01, 0xe0, 0xd0, 0x01, 0x38, 0x1b, 0x00, 0x3f, 0xff, 0x00, 0x11, 0x1c, 0x21, 0x00, 0x12, 0x02, 0x00, 0x00, - 0x30, 0x01, 0x80, 0x16, 0x50, 0x07, 0x00, 0x0c, 0xf0, 0x53, 0x7e, 0x6e, 0x60, 0x0a, 0x06, 0x40, 0x06, 0x54, 0x00, 0x07, 0x61, 0x00, 0x69, 0x00, - 0x77, 0x20, 0x05, 0x06, 0x50, 0x86, 0x30, 0x7f, 0x74, 0xef, 0x06, 0xe0, 0x7f, 0x06, 0xf0, 0xff, 0x07, 0x30, 0x7f, 0xe1, 0x06, 0x61, 0xff, 0x2d, - 0x4e, 0x10, 0xfd, 0x56, 0x20, 0x06, 0xa3, 0x05, 0xc0, 0xd0, 0x74, 0xc7, 0x30, 0x44, 0xc6, 0x0e, 0xd3, 0x7f, 0x06, 0xb3, 0xff, 0x22, 0x04, 0x30, - 0x04, 0x10, 0x39, 0x04, 0x32, 0x20, 0x05, 0x3d, 0x04, 0x4c, 0x04, 0x87, 0x06, 0x15, 0x09, 0xfa, 0x81, 0x63, 0x70, 0x0e, 0xf5, 0x7f, 0x10, 0x06, - 0xb0, 0x7f, 0x02, 0x27, 0xfb, 0x20, 0x90, 0x01, 0x68, 0x3b, 0xdb, 0x30, 0xf3, 0x30, 0xb3, 0xc4, 0x20, 0x03, 0x06, 0x78, 0x3f, 0x48, 0x00, 0x6f, - 0x28, 0x35, 0x67, 0x00, 0x1b, 0x20, 0x00, 0x4b, 0x60, 0x09, 0x0e, 0x50, 0x7f, 0x6b, 0x06, 0x40, 0xfd, 0x0f, 0x11, 0x7f, 0x88, 0x58, 0x3b, 0x99, - 0x99, 0x2f, 0x06, 0x6b, 0x41, 0x4d, 0xd6, 0x69, 0x62, 0xcf, 0x06, 0xbb, 0xbb, 0x0e, 0xf2, 0x7f, 0x13, 0x04, 0x3e, 0x28, 0x35, 0x3a, 0xbc, 0x40, - 0x05, 0x33, 0x06, 0x28, 0x3b, 0x06, 0x92, 0x79, 0x0f, 0xd5, 0x7f, 0x0e, 0x76, 0x7f, 0x01, 0x01, 0xd3, 0xd0, 0x01, 0x00, 0xff, 0xff, 0x02, 0x5f, - 0xff, 0x80, 0x19, 0x6f, 0xff, 0x06, 0x9d, 0x75, 0xae, 0x07, 0x9f, 0x7b, 0xef, 0x10, 0x07, 0x2b, 0x7b, 0xe1, 0x06, 0x6e, 0xfb, 0x58, 0x3f, 0x06, - 0x93, 0x05, 0xc0, 0x04, 0xd0, 0x74, 0xc7, 0x44, 0xc6, 0x10, 0x06, 0x9e, 0x7b, 0x22, 0x04, 0x04, 0x30, 0x04, 0x39, 0x04, 0x32, 0x20, 0x05, 0x3d, - 0x04, 0x43, 0x4c, 0x06, 0x28, 0x3f, 0xfa, 0x81, 0x63, 0x70, 0x0e, 0xf5, 0x7f, 0x10, 0x06, 0xb0, 0x7f, 0xa0, 0x02, 0x2f, 0xff, 0x91, 0x78, 0x64, - 0xde, 0x30, 0xab, 0x30, 0xaa, 0x55, 0x30, 0x06, 0x9c, 0xfd, 0x4d, 0x28, 0x3b, 0x63, 0x28, 0x3f, 0x6f, 0x0e, 0xe0, 0x7f, 0x61, 0x75, 0x10, 0x06, - 0x61, 0x7f, 0x58, 0x3b, 0xb3, 0x6f, 0xe8, 0x95, 0x06, 0x5f, 0xff, 0x07, 0xc8, 0xb9, 0x74, 0xce, 0x24, 0x06, 0xa8, 0x3b, 0x07, 0x72, 0x7f, 0x06, - 0x72, 0xff, 0x56, 0x1c, 0x28, 0x3b, 0x3a, 0x28, 0x3f, 0x3e, 0x06, 0x28, 0x37, 0x3f, 0xff, 0xb3, 0x39, 0x6f, 0x80, 0x06, 0x62, 0x79, 0x0f, 0xd5, - 0x7f, 0x0e, 0x76, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x98, 0x01, 0xff, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xf4, 0xcb, 0x00, 0x11, 0x18, 0x00, 0x00, 0x30, 0x01, 0x0a, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x68, 0xe7, 0x47, 0xd6, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x79, 0x72, 0x25, 0x52, 0x3a, 0x40, 0x53, 0x06, 0x98, 0x1b, 0x44, 0x00, 0x69, 0x00, - 0x73, 0x00, 0x10, 0x74, 0x00, 0x72, 0x20, 0x07, 0x74, 0x00, 0x6f, 0x00, 0x01, 0x20, 0x00, 0x46, 0x00, 0x65, 0x00, 0x64, 0x20, 0x03, 0x05, 0x72, - 0x00, 0x61, 0x00, 0x6c, 0x05, 0xc0, 0x7f, 0x63, 0x20, 0x87, 0xa8, 0x30, 0x7f, 0xe9, 0x20, 0x7f, 0xe9, 0x05, 0x60, 0x7f, 0x41, 0x00, 0x75, 0xa8, - 0x40, 0xf7, 0x6e, 0x20, 0xfb, 0x6d, 0x20, 0xf9, 0x20, 0x00, 0x53, 0xb5, 0x21, 0x0d, 0x61, 0x21, 0x01, 0x30, 0x8b, 0x42, 0x20, 0x1d, 0x65, 0x40, - 0x1b, 0x55, 0x73, 0x21, 0x19, 0x41, 0x21, 0x2b, 0x72, 0x21, 0x1d, 0x73, 0x03, 0xa9, 0xca, 0x5e, 0x43, 0x21, 0x65, 0x70, 0x41, 0x7b, 0x31, 0x6d, - 0x30, 0x7f, 0xd1, 0x7f, 0x65, 0xad, 0x04, 0xea, 0x36, 0x43, 0x21, 0xff, 0x75, 0x21, 0xef, 0x30, 0xf1, 0x20, 0x41, 0xf7, 0xc0, 0x05, 0x30, 0xf5, - 0x9b, 0x0b, 0x54, 0x80, 0xa6, 0x90, 0x96, 0x99, 0x20, 0xfd, 0x90, 0x06, 0x73, 0x03, 0x44, 0xc5, 0x74, 0xb9, 0xe8, 0x00, 0xd5, 0xf0, 0xd2, 0x98, - 0xb0, 0x20, 0x00, 0xf0, 0x07, 0xc5, 0x29, 0xbc, 0x6c, 0xad, 0x05, 0xdb, 0xa7, 0xb3, 0x6d, 0x33, 0x6f, 0x60, 0x20, 0x00, 0x03, 0x11, 0x0c, 0xd3, - 0xff, 0x24, 0x04, 0x35, 0x04, 0x34, 0x80, 0x20, 0x03, 0x40, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x00, 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x39, 0x04, - 0x20, 0x08, 0x00, 0x3e, 0x04, 0x3a, 0x20, 0x13, 0x43, 0x04, 0x33, 0x60, 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x07, 0x07, 0x01, - 0x02, 0x00, 0x04, 0x01, 0x01, 0x08, 0x07, 0x14, 0x07, 0x01, 0x10, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x0a, 0xd6, 0x30, 0x00, 0xa8, 0x30, 0xce, - 0x30, 0xb9, 0x30, 0xa2, 0x30, 0x13, 0xa4, 0x30, 0xec, 0x20, 0x07, 0xde, 0x5d, 0x05, 0xdf, 0xbf, 0x05, 0xb6, 0x03, 0xa2, 0x10, 0x08, 0x30, 0x7f, - 0x50, 0x2a, 0x11, 0x6f, 0x00, 0x76, 0x2a, 0x1d, 0x6e, 0xb0, 0x29, 0x97, 0x69, 0x2a, 0x0b, 0x05, 0xd8, 0x1d, 0x03, 0x5e, 0x9c, 0x5b, 0x00, 0xfa, - 0x8b, 0xaf, 0x65, 0x7e, 0x82, 0x29, 0x52, 0x08, 0xaf, 0x65, 0x01, 0x77, 0x05, 0xff, 0xbd, 0x80, 0xbd, 0xd0, 0x04, 0xc5, 0x78, 0xb1, 0xa4, 0xc2, - 0x28, 0x1f, 0xc7, 0x08, 0x01, 0xb8, 0xa4, 0xc2, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x05, 0xb3, 0x7f, 0x50, 0x11, 0x27, 0xfb, 0x4d, 0x28, 0x0d, 0x3e, - 0x04, 0x41, 0x04, 0x15, 0x2d, 0x00, 0x10, 0x28, 0x13, 0x40, 0x28, 0x29, 0x41, 0x04, 0xe8, 0x0d, 0xc0, 0x10, 0x0f, 0x94, 0xff, 0x06, 0xf6, 0xff, - 0x02, 0x01, 0x01, 0x02, 0x01, 0x0f, 0x60, 0x02, 0x20, 0x06, 0x20, 0x08, 0x02, 0x02, 0x02, 0x29, 0xe7, 0x40, 0xcb, 0x28, 0x17, 0x04, 0x0a, 0xab, - 0x30, 0xbf, 0x30, 0x07, 0xde, 0x30, 0xeb, 0x30, 0xab, 0x06, 0x08, 0x11, 0x9e, 0xaf, 0x3f, 0x1f, 0x54, 0x6d, 0x2f, 0x9d, 0x72, 0x2f, 0xb1, 0x61, - 0x10, 0x15, 0xe0, 0x7f, 0x61, 0x53, 0x03, 0x54, 0x58, 0x6c, 0x9a, 0x61, 0x53, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x00, 0x74, 0xce, 0xc0, 0xd0, 0xc8, - 0xb9, 0x74, 0xb9, 0x30, 0x74, 0xce, 0x05, 0xf8, 0x11, 0x0f, 0x53, 0x7f, 0x1a, 0x04, 0x30, 0x04, 0x51, 0x42, 0x20, 0x03, 0x3c, 0x20, 0x07, 0x40, - 0x04, 0x3a, 0x20, 0x0d, 0x80, 0x10, 0x1d, 0xd4, 0xff, 0x03, 0x02, 0x02, 0x03, 0x03, 0x01, 0x03, 0xc0, 0x30, 0x06, 0x20, 0x08, 0x03, 0x03, 0xc2, - 0xeb, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x05, 0x0a, 0xc1, 0x30, 0xe3, 0x30, 0x6b, 0xb3, 0x06, 0x68, 0x13, 0x58, 0x17, 0x68, 0x2e, 0x23, 0x63, 0x2f, - 0xaf, 0x10, 0x16, 0x50, 0x7f, 0x0c, 0xe5, 0x67, 0xd1, 0x79, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x28, 0xcc, 0x34, 0x54, 0xcf, 0x06, 0x58, 0x11, 0x0f, - 0x53, 0x7f, 0x27, 0x28, 0x17, 0x3a, 0x04, 0x60, 0x3e, 0x05, 0xe8, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x04, 0x03, 0x03, 0x04, 0x04, 0x28, 0x02, 0x04, - 0x20, 0x06, 0x16, 0x20, 0x08, 0x04, 0x04, 0x7b, 0x02, 0xec, 0x0f, 0xd6, 0x00, 0x00, 0x06, 0x28, 0x17, 0xe5, 0x0c, 0x30, 0xd6, 0x30, 0xc8, 0x06, - 0x88, 0x19, 0x38, 0x17, 0x75, 0x00, 0x50, 0x62, 0x20, 0x03, 0x74, 0x10, 0x16, 0x40, 0x7f, 0x18, 0x4e, 0x03, 0x5e, 0x20, 0x79, 0x72, 0x06, 0x98, - 0x19, 0x94, 0xcd, 0x80, 0xbd, 0xb8, 0x60, 0xd2, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x27, 0x04, 0x43, 0x04, 0x31, 0xb0, 0x20, 0x03, 0x42, 0x06, - 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x05, 0x04, 0x04, 0x05, 0x14, 0x05, 0x03, 0x05, 0x20, 0x06, 0x17, 0x20, 0x08, 0x05, 0x05, 0x00, 0x36, 0xe1, - 0xb5, 0xd1, 0x00, 0x00, 0x07, 0x0a, 0x01, 0xb3, 0x30, 0xeb, 0x30, 0xc9, 0x30, 0xd0, 0x06, 0xa8, 0x17, 0x05, 0xf3, 0x00, 0x72, 0x00, 0x64, 0x2f, - 0xaf, 0x62, 0x2f, 0xb7, 0x80, 0x10, 0x16, 0x10, 0x7f, 0xd1, 0x79, 0x14, 0x5c, 0x1a, 0x59, 0xe6, 0x40, 0x74, 0x06, 0x78, 0x19, 0x54, 0xcf, 0x74, - 0xb9, 0xc4, 0xb3, 0x34, 0x14, 0xbc, 0x06, 0x78, 0x19, 0x07, 0x93, 0x7f, 0x76, 0x06, 0x43, 0xff, 0x1a, 0x04, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x34, - 0x20, 0x05, 0x32, 0x04, 0x60, 0x30, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x05, 0x05, 0x06, 0x06, 0x90, 0x30, 0x02, 0x05, 0x04, 0x20, - 0x08, 0x06, 0x06, 0xac, 0xe9, 0x04, 0x5c, 0xd2, 0x00, 0x00, 0x08, 0x28, 0x17, 0xea, 0x30, 0x01, 0xa8, 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xb9, 0x06, - 0x48, 0x1b, 0x50, 0x43, 0x28, 0x11, 0x72, 0x28, 0x19, 0x69, 0x00, 0x65, 0x00, 0x44, 0x6e, 0x2f, 0xb3, 0x65, 0x00, 0x73, 0x10, 0x15, 0xc0, 0x7f, - 0xd1, 0x79, 0x02, 0xde, 0x8f, 0x79, 0x72, 0xaf, 0x65, 0x06, 0x98, 0x17, 0xac, 0x01, 0xb9, 0xd4, 0xc5, 0x4c, 0xd1, 0xa4, 0xc2, 0x06, 0x58, 0x19, - 0xc0, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x40, 0x04, 0x38, 0x04, 0x35, 0x04, 0x16, 0x3d, 0x04, 0x42, 0x20, 0x05, 0x41, 0x05, 0xc8, 0x1d, 0x10, 0x16, - 0xf4, 0xff, 0x07, 0x0c, 0x06, 0x06, 0x07, 0x07, 0x30, 0x02, 0x28, 0x1c, 0x07, 0x07, 0x00, 0x07, 0x07, 0x78, 0xec, 0x2a, 0xd6, 0x00, 0x00, 0x20, - 0x09, 0x0a, 0x38, 0x13, 0xc8, 0x30, 0xec, 0x30, 0xfb, 0xaa, 0x28, 0x1f, 0xaa, 0x06, 0x28, 0x1b, 0x45, 0x48, 0x0d, 0x72, 0x28, 0x15, 0x20, 0x0e, - 0x00, 0x52, 0x00, 0xed, 0x2f, 0xb7, 0x05, 0xd8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x69, 0x00, 0x60, 0x79, 0x72, 0xf7, 0x96, 0xcc, 0x91, 0x65, 0x40, - 0x59, 0x06, 0x58, 0x1b, 0xd4, 0xc5, 0xb8, 0xd2, 0x08, 0xb8, 0x0d, 0xac, 0xb9, 0x24, 0xc6, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x2d, 0x48, 0x0d, - 0x45, 0x40, 0x28, 0x15, 0x2d, 0x00, 0x20, 0x28, 0x1d, 0x3e, 0x05, 0xe8, 0x17, 0x95, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x08, 0x20, 0x01, 0x07, 0x30, - 0x02, 0x18, 0x40, 0x0a, 0x00, 0x70, 0xe9, 0xf5, 0xd4, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0xd5, 0x30, 0xa9, 0x30, 0xeb, 0x30, 0xe2, 0x30, 0x6a, 0xb5, - 0x06, 0x08, 0x11, 0x5f, 0xff, 0x46, 0x4f, 0xaf, 0x6d, 0x48, 0x0f, 0x61, 0x80, 0x10, 0x16, 0x20, 0x7f, 0x8f, 0x79, 0x14, 0x5c, 0x69, 0x64, 0x99, - 0x60, 0x6c, 0x06, 0x38, 0x13, 0x3f, 0xff, 0xec, 0xd3, 0x74, 0xb9, 0xa8, 0x1a, 0xba, 0xac, 0xc0, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x24, 0x28, - 0x09, 0x40, 0x2c, 0x04, 0x3c, 0x48, 0x0f, 0x30, 0x05, 0xc8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x09, 0x08, 0x20, 0x05, - 0x09, 0x15, 0x30, 0x04, 0x00, 0x09, 0x62, 0xed, 0xa1, 0xd6, 0x00, 0x00, 0x0b, 0x8c, 0x28, 0x17, 0xd5, 0x30, 0xa4, 0x06, 0x68, 0x13, 0x3f, 0xff, - 0x4a, 0x00, 0x14, 0x75, 0x00, 0x6a, 0x20, 0x03, 0x79, 0x10, 0x16, 0x60, 0x7f, 0xe1, 0x80, 0x08, 0xe1, 0x80, 0x0a, 0x4f, 0x06, 0x78, 0x15, 0x00, - 0x00, 0xc4, 0x06, 0xd6, 0xc4, 0xd6, 0x74, 0xc7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x16, 0x0b, 0x04, 0x43, 0x04, 0x36, 0x20, 0x03, 0x39, 0x06, - 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, 0x02, 0x0a, 0x0a, 0x0a, 0x0b, 0x0a, 0x09, 0x20, 0x05, 0x0a, 0x40, 0x02, 0x30, 0x04, 0x0a, 0xce, 0xee, 0x91, - 0xd1, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0xe9, 0x30, 0xfb, 0x30, 0xd1, 0x34, 0x30, 0xf3, 0x20, 0x03, 0x06, 0x58, 0x1b, 0x4c, 0x2f, 0xa5, 0x20, 0x00, - 0x46, 0x50, 0x2f, 0xab, 0x6d, 0x00, 0x70, 0x06, 0x2f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0xc9, 0x04, 0x62, 0x58, 0x6f, 0x15, 0x5e, 0x06, 0x98, 0x17, - 0x7c, 0xb7, 0x0c, 0x1c, 0xd3, 0x0c, 0xd3, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1b, 0x04, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x1f, 0x20, 0x05, 0x3c, - 0x04, 0x60, 0x3f, 0x20, 0x0b, 0x10, 0x1d, 0xf4, 0xff, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x48, 0x0a, 0x20, 0x05, 0x0b, 0x06, 0x30, 0x04, 0x0b, 0xf7, - 0xe5, 0x04, 0x4a, 0xd2, 0x00, 0x00, 0x0d, 0x48, 0x17, 0xea, 0x30, 0x10, 0xaa, 0x30, 0xcf, 0x06, 0xc8, 0x17, 0x52, 0x00, 0x69, 0x00, 0x70, 0x6f, - 0x2f, 0xb7, 0x06, 0x78, 0x17, 0x10, 0x0e, 0x90, 0x7f, 0xc9, 0x62, 0xcc, 0x91, 0x08, 0x65, 0x59, 0xc8, 0x54, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0xac, - 0x07, 0xb9, 0x24, 0xc6, 0x58, 0xd5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x01, 0x20, 0x04, 0x38, 0x04, 0x3e, 0x04, 0x45, 0x06, 0x88, - 0x17, 0x81, 0x10, 0x16, 0x94, 0xff, 0x0c, 0x0c, 0x0c, 0x0d, 0x0c, 0x0b, 0x20, 0x05, 0x20, 0x0c, 0x07, 0x30, 0x04, 0x0c, 0x12, 0xeb, 0x77, 0xd0, - 0x00, 0x00, 0x00, 0x0e, 0x0a, 0xe1, 0x30, 0xf3, 0x30, 0x04, 0xc9, 0x30, 0xfc, 0x30, 0xb5, 0x06, 0x68, 0x17, 0x4d, 0x00, 0x05, 0x65, 0x00, 0x6e, - 0x00, 0x64, 0x28, 0x15, 0x7a, 0x06, 0x2f, 0xad, 0x81, 0x10, 0x0f, 0x10, 0x7f, 0xe8, 0x95, 0x1a, 0x59, 0x28, 0x84, 0x06, 0x78, 0x15, 0x00, 0x00, - 0x00, 0x58, 0xba, 0xc4, 0xb3, 0xac, 0xc0, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1c, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x58, 0x34, 0x28, 0x15, - 0x41, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0d, 0x0d, 0x0d, 0x12, 0x0e, 0x0d, 0x0c, 0x20, 0x05, 0x0d, 0x08, 0x30, 0x04, 0x0d, 0x00, 0x9e, - 0xe8, 0x11, 0xcf, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0xdf, 0x30, 0xb7, 0x30, 0xaa, 0x30, 0xcd, 0x30, 0x45, 0xb9, 0x06, 0x88, 0x17, 0x69, 0x00, 0x73, - 0x4f, 0xad, 0x6e, 0x28, 0x21, 0x40, 0x73, 0x10, 0x16, 0x00, 0x7f, 0x73, 0x7c, 0x7f, 0x89, 0x65, 0x59, 0x08, 0x85, 0x51, 0xaf, 0x65, 0x06, 0x58, - 0x1b, 0xf8, 0xbb, 0xdc, 0x01, 0xc2, 0x24, 0xc6, 0x24, 0xb1, 0xa4, 0xc2, 0x06, 0x58, 0x1b, 0x8a, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x38, 0x28, 0x11, - 0x4c, 0x28, 0x17, 0x3d, 0xb0, 0x28, 0x21, 0x41, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x0e, 0x0e, 0x0f, 0x24, 0x0e, 0x0d, 0x20, 0x05, - 0x0e, 0x09, 0x30, 0x04, 0x0e, 0x88, 0x00, 0xec, 0x43, 0xd8, 0x00, 0x00, 0x10, 0x0a, 0xcd, 0x02, 0x30, 0xa6, 0x30, 0xb1, 0x30, 0xf3, 0x06, 0x68, - 0x15, 0x00, 0x22, 0x00, 0x4e, 0x2f, 0xaf, 0x75, 0x00, 0x71, 0x20, 0x03, 0xe9, 0xc0, 0x2f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x85, 0x51, 0x4c, 0x4e, - 0xaf, 0x80, 0xc0, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x24, 0xb1, 0xb0, 0xc6, 0x04, 0xcf, 0xd1, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x1d, 0x28, 0x0d, - 0x43, 0x04, 0x3a, 0x28, 0x13, 0x60, 0x3d, 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0f, 0x0f, 0x0f, 0x10, 0x0f, 0x48, 0x0e, 0x20, 0x05, 0x0f, - 0x0a, 0x30, 0x04, 0x0f, 0x4e, 0xe4, 0x00, 0x99, 0xcf, 0x00, 0x00, 0x11, 0x0a, 0xea, 0x30, 0x01, 0xaa, 0x30, 0xcd, 0x30, 0xb0, 0x30, 0xed, 0x06, - 0x68, 0x19, 0x14, 0x52, 0x00, 0xed, 0x2f, 0xab, 0x20, 0x48, 0x1f, 0x67, 0x00, 0x60, 0x72, 0x2f, 0xb7, 0x10, 0x15, 0xd0, 0x7f, 0xcc, 0x91, 0x65, - 0x59, 0x85, 0x04, 0x51, 0x3c, 0x68, 0x57, 0x7f, 0x06, 0x58, 0x1b, 0xac, 0xb9, 0x00, 0x24, 0xc6, 0x24, 0xb1, 0xf8, 0xad, 0x5c, 0xb8, 0xc0, 0x06, - 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x20, 0x04, 0x38, 0x04, 0x3e, 0x04, 0x46, 0x2d, 0x48, 0x1f, 0x33, 0x04, 0x40, 0x20, 0x0b, 0x10, 0x1d, 0xd4, 0xff, - 0x10, 0x1a, 0x10, 0x10, 0x11, 0x20, 0x03, 0x20, 0x06, 0x0c, 0x40, 0x06, 0xfd, 0x00, 0xe2, 0x34, 0xd3, 0x00, 0x00, 0x12, 0x0a, 0xb5, 0x0c, 0x30, - 0xeb, 0x30, 0xbf, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x53, 0x00, 0x06, 0x61, 0x00, 0x6c, 0x00, 0x74, 0x20, 0x05, 0x10, 0x16, 0x50, 0x7f, 0x28, 0x06, - 0x84, 0x14, 0x5c, 0x54, 0x58, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xb4, 0x18, 0xc0, 0xc0, 0xd0, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x21, 0x04, 0x30, - 0x03, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x42, 0x20, 0x07, 0x10, 0x1e, 0x34, 0xff, 0x0d, 0x11, 0x11, 0x11, 0x12, 0x20, 0x03, 0x20, 0x06, 0x0d, 0x40, - 0x06, 0x01, 0x61, 0xee, 0x7c, 0xd1, 0x00, 0x00, 0x13, 0x28, 0x17, 0x01, 0xf3, 0x30, 0xfb, 0x30, 0xd5, 0x30, 0xa2, 0x20, 0x07, 0xd1, 0x06, 0x38, - 0x1d, 0x38, 0x17, 0x6e, 0x2f, 0xaf, 0x4a, 0x00, 0x75, 0x40, 0x09, 0x81, 0x10, 0x15, 0xf0, 0x7f, 0x23, 0x57, 0xe1, 0x80, 0x89, 0x5b, 0x06, 0x98, - 0x17, 0x03, 0xb0, 0xc0, 0xc4, 0xd6, 0x48, 0xc5, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x80, 0x38, 0x17, 0x3d, 0x04, 0x2d, 0x00, 0x25, 0x04, 0x43, - 0xc3, 0x40, 0x09, 0x10, 0x1d, 0xf4, 0xff, 0x12, 0x12, 0x12, 0x13, 0x20, 0x03, 0x20, 0x06, 0x40, 0x0f, 0x40, 0x06, 0x93, 0xe9, 0x44, 0xcf, 0x00, - 0x00, 0x41, 0x14, 0x68, 0x17, 0xeb, 0x30, 0xa4, 0x30, 0xb9, 0x06, 0xc8, 0x17, 0x44, 0x4c, 0x28, 0x17, 0x69, 0x00, 0x73, 0x10, 0x16, 0x00, 0x7f, - 0x23, 0x57, 0x02, 0xef, 0x8d, 0x13, 0x66, 0xaf, 0x65, 0x06, 0x78, 0x19, 0xb0, 0x01, 0xc0, 0xe8, 0xb8, 0x74, 0xc7, 0xa4, 0xc2, 0x06, 0x78, 0x19, - 0xb4, 0x07, 0xb3, 0x7f, 0xed, 0x06, 0x23, 0xff, 0x78, 0x17, 0x1b, 0x28, 0x17, 0x38, 0x04, 0x61, 0x41, 0x06, 0x88, 0x17, 0x10, 0x16, 0x74, 0xff, - 0x13, 0x13, 0x13, 0x14, 0x20, 0x03, 0xa0, 0x20, 0x06, 0x0e, 0x40, 0x06, 0x52, 0xe8, 0xd2, 0xd0, 0x00, 0x2b, 0x00, 0x15, 0x48, 0x17, 0xbf, 0x28, - 0x19, 0xaf, 0x28, 0x1b, 0x06, 0x38, 0x19, 0xa0, 0x5f, 0xaf, 0x74, 0x2f, 0xb5, 0x20, 0x00, 0x43, 0x00, 0x72, 0xa0, 0x2f, 0xb5, 0x7a, 0x10, 0x15, - 0xc0, 0x7f, 0x23, 0x57, 0x4b, 0x51, 0x81, 0x40, 0x9c, 0x06, 0xb8, 0x17, 0xc0, 0xd0, 0x6c, 0xd0, 0xe8, 0xb8, 0xe8, 0x06, 0x78, 0x19, 0x0e, 0xf3, - 0x7f, 0x58, 0x17, 0x42, 0x28, 0x1d, 0x2d, 0x00, 0x1a, 0x38, 0x04, 0x40, 0x28, 0x1d, 0x05, 0xd8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x14, 0x14, 0x14, - 0x68, 0x15, 0x20, 0x03, 0x20, 0x06, 0x10, 0x40, 0x06, 0x49, 0xdb, 0xc8, 0x08, 0xce, 0x00, 0x00, 0x16, 0x88, 0x17, 0xd5, 0x30, 0xa7, 0xc4, 0x06, - 0x28, 0x15, 0xd8, 0x17, 0x46, 0x00, 0x65, 0x10, 0x16, 0x00, 0x7f, 0x23, 0x57, 0x33, 0xf2, 0x83, 0x06, 0x78, 0x13, 0x78, 0x17, 0x98, 0xd3, 0x06, - 0x58, 0x13, 0x08, 0x13, 0x7f, 0x63, 0xe9, 0x06, 0x0f, 0x2f, 0xb8, 0x17, 0x24, 0x04, 0x35, 0x05, 0xc8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0d, 0x15, - 0x15, 0x15, 0x16, 0x20, 0x03, 0x20, 0x06, 0x11, 0x40, 0x06, 0x01, 0x82, 0xe9, 0xd6, 0xd4, 0x00, 0x00, 0x17, 0x48, 0x17, 0x01, 0xc6, 0x30, 0xa3, - 0x30, 0xa2, 0x30, 0xb4, 0x28, 0x1d, 0x11, 0xc7, 0x30, 0xeb, 0x28, 0x23, 0xa8, 0x30, 0xb9, 0x20, 0x13, 0x68, 0xed, 0x05, 0x48, 0x27, 0x7f, 0xaf, - 0x69, 0x2f, 0xb7, 0x67, 0x00, 0x6f, 0xa8, 0x2f, 0xb5, 0x64, 0x28, 0x1d, 0x6c, 0x2f, 0xbd, 0x45, 0x00, 0x73, 0xa8, 0x2f, 0xc7, 0x65, 0x2f, 0xc3, - 0x6f, 0x10, 0x14, 0xa0, 0x7f, 0x23, 0x57, 0x30, 0x00, 0x57, 0x9a, 0x4e, 0xe5, 0x54, 0x2d, 0x00, 0xb7, 0x00, 0x5f, 0x14, 0x5c, 0xc3, 0x57, 0xaf, - 0x65, 0x79, 0x10, 0x72, 0x57, 0x7f, 0x05, 0x98, 0x29, 0xb0, 0xc0, 0xf0, 0xd2, 0x00, 0x44, 0xc5, 0xe0, 0xac, 0x78, 0xb3, 0xd0, 0xc5, 0x03, 0xa4, - 0xc2, 0x4c, 0xd1, 0x5c, 0xb8, 0x05, 0xd8, 0x23, 0x0e, 0xf3, 0x7f, 0x80, 0x78, 0x17, 0x4c, 0x04, 0x4f, 0x04, 0x33, 0x04, 0x3e, 0xa8, 0x28, 0x1d, - 0x34, 0x28, 0x1d, 0x3b, 0x20, 0x0f, 0x2d, 0x00, 0x2d, 0x23, 0x04, 0x41, 0x28, 0x31, 0x35, 0x04, 0x40, 0x20, 0x17, 0x10, 0x1c, 0x74, 0xff, 0x0d, - 0x16, 0x16, 0x16, 0x17, 0x20, 0x03, 0x20, 0x06, 0x12, 0x40, 0x06, 0x00, 0x3f, 0xec, 0x4d, 0xd2, 0x00, 0x00, 0x18, 0x0a, 0x8a, 0x38, 0x13, 0xa8, - 0x30, 0xe9, 0x88, 0x13, 0xd5, 0x28, 0x15, 0xb4, 0xdb, 0x05, 0x48, 0x11, 0x5f, 0xff, 0x54, 0x28, 0x11, 0x37, 0xfb, 0x72, 0x4f, 0xb1, 0x78, 0x13, - 0x1a, 0x46, 0x00, 0x75, 0x2f, 0xbb, 0x38, 0x27, 0x2c, 0x2f, 0xc7, 0x41, 0xb5, 0x4f, 0xd1, 0xe1, 0x28, 0x21, 0x38, 0x3f, 0x64, 0x4f, 0xdb, 0x65, - 0x2f, 0xdf, 0x55, 0x49, 0x28, 0x39, 0x6c, 0x2f, 0xef, 0x73, 0xa8, 0x4d, 0x41, 0x2f, 0xfb, 0x6a, 0x6c, 0x20, 0x2b, 0x58, 0x6b, 0x63, 0x48, 0x69, - 0x53, 0x20, 0x4d, 0x72, 0xfa, 0x00, 0x80, 0x7f, 0x50, 0x7d, 0x30, 0x4f, 0x38, 0x91, 0x5f, 0xb5, 0x75, 0xa0, 0x77, 0x61, 0xad, 0x28, 0x99, 0x63, - 0x48, 0xb9, 0x71, 0x40, 0x95, 0x30, 0x7b, 0x74, 0x2f, 0xdd, 0x54, 0xce, 0x28, 0xbd, 0x65, 0x80, 0x7b, 0x20, 0x28, 0xcb, 0x19, 0x20, 0xf7, 0x50, - 0x7d, 0x78, 0xe9, 0x70, 0x2f, 0x30, 0x7f, 0x64, 0x00, 0x6f, 0xff, 0x50, 0x6d, 0x38, 0xfd, 0xf7, 0x50, 0x37, 0x00, 0x70, 0x27, 0x04, 0x91, 0x7f, - 0x00, 0x51, 0x7d, 0x6f, 0x41, 0x3b, 0x07, 0x11, 0xff, 0x04, 0xff, 0xc9, 0x03, 0x6b, 0x70, 0x30, 0x57, 0x9b, 0x5c, 0x05, 0x98, 0x07, 0xff, 0xff, - 0x00, 0xf0, 0xd2, 0xd0, 0xc5, 0x7c, 0xb7, 0x78, 0xb3, 0x1d, 0x78, 0xd4, 0xd0, 0x28, 0x1d, 0x05, 0xd8, 0x13, 0x3f, 0xff, 0x56, 0x23, 0x69, 0xf6, - 0x33, 0x1d, 0x06, 0x52, 0x7d, 0xf2, 0x7f, 0x3c, 0x17, 0x46, 0x2c, 0x1d, 0x01, 0x13, 0xf9, 0x6c, 0x3a, 0x00, 0x68, 0x83, 0xf9, 0x3c, 0x4d, 0x53, - 0xf7, 0xe2, 0x00, 0x03, 0xf7, 0x6c, 0xaa, 0x00, 0xef, 0xff, 0x1e, 0x28, 0x0d, 0x3d, 0x28, 0x09, 0x3d, 0x28, 0x1d, 0x30, 0x8a, 0x28, 0x1b, 0x20, - 0x00, 0x17, 0x28, 0x17, 0x3c, 0x28, 0x19, 0x4f, 0xe1, 0x04, 0x88, 0x0b, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x17, 0x17, 0x17, 0x09, 0x20, - 0x03, 0x08, 0x17, 0x18, 0x17, 0x0b, 0x30, 0x06, 0x17, 0x08, 0xd9, 0x00, 0x6f, 0xcf, 0x00, 0x00, 0x19, 0x0a, 0xc8, 0x30, 0x01, 0xa5, 0x30, 0xaf, - 0x30, 0xde, 0x30, 0xf3, 0x05, 0xa8, 0x0b, 0xa3, 0xd8, 0x17, 0x75, 0x27, 0xbd, 0x75, 0x00, 0x6d, 0x47, 0xcb, 0x10, 0x16, 0x10, 0x7f, 0x02, 0xfe, - 0x56, 0x93, 0x5e, 0xfc, 0x66, 0x06, 0x98, 0x17, 0x2c, 0x06, 0xd2, 0xe0, 0xcf, 0xcc, 0xb9, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x22, 0x0a, 0x04, - 0x43, 0x04, 0x3a, 0x20, 0x03, 0x3c, 0x28, 0x15, 0x3d, 0xc8, 0x05, 0x48, 0x09, 0x10, 0x17, 0xd4, 0xff, 0x18, 0x18, 0x50, 0x01, 0x17, 0x18, 0x13, - 0x84, 0x40, 0x0a, 0xef, 0xec, 0xa0, 0xd1, 0x00, 0x3f, 0xff, 0x01, 0x07, 0x00, 0x07, 0x01, 0x02, 0x04, 0x01, 0x01, 0x08, 0x07, 0x01, 0x14, 0x07, - 0x01, 0x01, 0x01, 0x01, 0x02, 0x30, 0x02, 0x30, 0x0f, 0x02, 0x20, 0x06, 0x20, 0x0b, 0x02, 0x02, 0x02, 0x03, 0x8c, 0x20, 0x02, 0x03, 0x01, 0x03, - 0x30, 0x06, 0x20, 0x08, 0x03, 0x03, 0x45, 0x04, 0x20, 0x02, 0x04, 0x02, 0x04, 0x20, 0x06, 0x16, 0x20, 0x08, 0x11, 0x04, 0x04, 0x05, 0x20, 0x02, - 0x05, 0x03, 0x05, 0x20, 0x06, 0x45, 0x17, 0x20, 0x08, 0x05, 0x05, 0x06, 0x20, 0x02, 0x06, 0x30, 0x02, 0x22, 0x05, 0x04, 0x20, 0x08, 0x06, 0x06, - 0x07, 0x20, 0x02, 0x07, 0xc0, 0x30, 0x02, 0x20, 0x14, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0xc4, 0x20, 0x01, 0x20, 0x05, 0x07, 0x08, 0x18, 0x40, - 0x0a, 0x09, 0x09, 0x12, 0x09, 0x0a, 0x09, 0x30, 0x05, 0x09, 0x15, 0x30, 0x04, 0x09, 0x04, 0x0a, 0x0a, 0x0a, 0x0b, 0x0a, 0x30, 0x05, 0x0a, 0x02, - 0x81, 0x30, 0x04, 0x0a, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x30, 0x05, 0x20, 0x0b, 0x06, 0x30, 0x04, 0x0b, 0x0c, 0x0c, 0x0c, 0x0d, 0x48, 0x0c, 0x30, - 0x05, 0x0c, 0x07, 0x30, 0x04, 0x0c, 0x0d, 0x0d, 0x12, 0x0d, 0x0e, 0x0d, 0x30, 0x05, 0x0d, 0x08, 0x30, 0x04, 0x0d, 0x04, 0x0e, 0x0e, 0x0e, 0x0f, - 0x0e, 0x30, 0x05, 0x0e, 0x09, 0x81, 0x30, 0x04, 0x0e, 0x0f, 0x0f, 0x0f, 0x10, 0x0f, 0x30, 0x05, 0x20, 0x0f, 0x0a, 0x30, 0x04, 0x0f, 0x10, 0x10, - 0x10, 0x11, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0c, 0x40, 0x06, 0x11, 0x11, 0x11, 0x12, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0d, 0x40, 0x06, 0x12, 0x12, - 0x12, 0x13, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0f, 0x40, 0x06, 0x13, 0x13, 0x13, 0x14, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0e, 0x40, 0x06, 0x14, 0x14, - 0x14, 0x15, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x10, 0x40, 0x06, 0x15, 0x15, 0x15, 0x16, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x11, 0x40, 0x06, 0x16, 0x16, - 0x16, 0x17, 0xde, 0x20, 0x03, 0x20, 0x06, 0x12, 0x40, 0x06, 0xf9, 0x9f, 0xf1, 0x97, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x0b, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xe6, 0x08, 0x33, 0xce, 0x00, 0x00, 0x00, 0x01, 0x0b, 0xa2, 0x30, 0xeb, 0x30, 0xd0, 0x40, 0x30, 0x06, 0x98, 0x1b, 0x41, 0x00, 0x72, 0x00, - 0x75, 0x00, 0x10, 0x62, 0x00, 0x61, 0x10, 0x16, 0x60, 0x7f, 0x3f, 0x96, 0x81, 0x9c, 0x20, 0xf4, 0x5d, 0x06, 0x9b, 0x1b, 0x44, 0xc5, 0xe8, 0xb8, - 0x14, 0x40, 0xbc, 0x10, 0x06, 0x93, 0x7f, 0x10, 0x04, 0x40, 0x04, 0x43, 0x04, 0x09, 0x31, 0x04, 0x30, 0x04, 0x10, 0x1e, 0x54, 0xff, 0x01, 0x01, - 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x0c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd6, 0x11, 0xff, 0xc8, 0x00, 0x00, 0x00, - 0x01, 0x0c, 0xd0, 0x30, 0xcf, 0x30, 0xde, 0x41, 0x30, 0x06, 0x98, 0x1b, 0x42, 0x00, 0x61, 0x00, 0x68, 0x20, 0x03, 0x50, 0x6d, 0x20, 0x07, 0x73, - 0x10, 0x16, 0x20, 0x7f, 0xf4, 0x5d, 0xc8, 0x54, 0x20, 0x6c, 0x9a, 0x06, 0xab, 0x17, 0xbc, 0x58, 0xd5, 0xc8, 0xb9, 0xb0, 0x07, 0x53, 0x7f, 0x27, - 0x06, 0x23, 0x81, 0x06, 0xf3, 0xff, 0x11, 0x04, 0x30, 0x04, 0x40, 0x33, 0x20, 0x03, 0x3c, 0x04, 0x41, 0x04, 0x3a, 0x04, 0x01, 0x38, 0x04, 0x35, - 0x04, 0x20, 0x00, 0x3e, 0x20, 0x0b, 0x01, 0x42, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x32, 0x20, 0x1d, 0x9e, 0x10, 0x1c, 0xd4, 0xff, 0x01, 0x01, 0xd0, - 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x0d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x50, 0x09, 0x9c, 0xd5, 0x00, 0x00, 0x00, - 0x01, 0x0d, 0xd0, 0x30, 0xeb, 0x30, 0xd0, 0x04, 0x30, 0xc9, 0x30, 0xb9, 0x30, 0x06, 0x58, 0x1f, 0x42, 0x00, 0x04, 0x61, 0x00, 0x72, 0x00, 0x62, - 0x20, 0x05, 0x64, 0x00, 0x16, 0x6f, 0x00, 0x73, 0x06, 0xc0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0xf4, 0x03, 0x5d, 0xf4, 0x5d, 0x1a, - 0x59, 0xaf, 0x06, 0x31, 0xfa, 0x5b, 0x17, 0x00, 0xbc, 0xa0, 0xbc, 0x74, 0xc7, 0xc4, 0xb3, 0xa4, 0x60, 0xc2, 0x0f, 0x13, 0x7f, 0x06, 0x33, 0xff, - 0x11, 0x04, 0x30, 0x04, 0x40, 0x20, 0x04, 0x31, 0x20, 0x05, 0x34, 0x04, 0x3e, 0x04, 0x41, 0x67, 0x04, 0x10, 0x0d, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, - 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x80, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x24, 0x39, 0x00, 0x11, 0x06, 0x00, 0x00, - 0x30, 0x01, 0x0e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x44, 0x0c, 0xe1, 0xc0, 0x00, 0x00, 0x00, - 0x02, 0x0e, 0xab, 0x30, 0xe8, 0x30, 0xfc, 0x10, 0x30, 0xde, 0x5d, 0x06, 0x78, 0x1d, 0x43, 0x00, 0x61, 0x00, 0x18, 0x79, 0x00, 0x6f, 0x06, 0x88, - 0x9c, 0x10, 0x0e, 0xf0, 0x7f, 0x61, 0x53, 0xa6, 0x10, 0x7e, 0x3a, 0x53, 0x06, 0x9b, 0x1b, 0x74, 0xce, 0x94, 0xc6, 0x08, 0x20, 0x00, 0xfc, 0xc8, - 0x10, 0x06, 0x73, 0x7f, 0x1a, 0x04, 0x30, 0x04, 0x04, 0x39, 0x04, 0x3e, 0x04, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x02, 0x50, 0x02, 0x20, 0x01, 0x01, - 0x40, 0x06, 0x01, 0x01, 0x01, 0x01, 0x82, 0x58, 0x17, 0x03, 0x0e, 0xd9, 0x30, 0xea, 0x28, 0x17, 0xba, 0x80, 0x06, 0x88, 0x19, 0x42, 0x00, 0x65, - 0x00, 0x6c, 0x00, 0x69, 0x34, 0x00, 0x7a, 0x20, 0x07, 0x10, 0x0e, 0xb0, 0x7f, 0x63, 0x06, 0x61, 0xff, 0x2f, 0x4f, 0x02, 0x29, 0x52, 0x79, 0x51, - 0xce, 0x57, 0x06, 0x7f, 0xb5, 0xa8, 0x06, 0xbc, 0xac, 0xb9, 0x88, 0xc9, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x11, 0x00, 0x04, 0x35, 0x04, 0x3b, - 0x04, 0x38, 0x04, 0x37, 0xfc, 0x06, 0x68, 0x19, 0x10, 0x0f, 0x74, 0xff, 0x06, 0x76, 0xff, 0x48, 0x0c, 0x28, 0x1c, 0x50, 0x05, 0x02, 0x02, 0x00, - 0x6e, 0x0c, 0x4b, 0xc1, 0x00, 0x00, 0x04, 0x0e, 0x01, 0xb3, 0x30, 0xed, 0x30, 0xb5, 0x30, 0xeb, 0x06, 0x88, 0x17, 0x55, 0x43, 0x2f, 0xab, 0x72, - 0x2f, 0xaf, 0x7a, 0x2f, 0xb7, 0x6c, 0x10, 0x16, 0x20, 0x7f, 0x00, 0xd1, 0x79, 0x57, 0x7f, 0x28, 0x84, 0x14, 0x5c, 0x20, 0x3a, 0x53, 0x06, 0x5f, - 0xb1, 0x54, 0xcf, 0x5c, 0xb8, 0xb4, 0x60, 0xc0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x3e, 0x04, 0x40, 0x8c, 0x20, 0x03, 0x37, 0x04, - 0x30, 0x28, 0x1f, 0x10, 0x1e, 0x14, 0xff, 0x03, 0x03, 0x88, 0xd0, 0x01, 0x12, 0x0d, 0x27, 0x28, 0x17, 0x05, 0x0e, 0xaa, 0x00, 0x30, 0xec, 0x30, - 0xf3, 0x30, 0xb8, 0x30, 0xa6, 0x02, 0x30, 0xa9, 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x08, 0x1f, 0x4f, 0x82, 0x28, 0x15, 0x61, 0x00, 0x6e, 0x00, 0x67, - 0x2f, 0xb7, 0x20, 0x28, 0x00, 0x57, 0x48, 0x1d, 0x6b, 0x10, 0x15, 0xa0, 0x7f, 0x58, 0x6a, 0xed, 0x60, 0x56, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x24, - 0xc6, 0x0c, 0xb8, 0xc0, 0x06, 0xc9, 0xcc, 0xc6, 0x6c, 0xd0, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x1e, 0x80, 0x28, 0x15, 0x38, 0x04, 0x3d, 0x04, - 0x34, 0x04, 0x36, 0x08, 0x04, 0x20, 0x00, 0x23, 0x28, 0x25, 0x3b, 0x04, 0x3a, 0xc8, 0x05, 0xa8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0xd0, - 0x01, 0xd8, 0x0c, 0x08, 0x82, 0x28, 0x17, 0x06, 0x0e, 0xb9, 0x30, 0xbf, 0x28, 0x17, 0xaf, 0x20, 0x30, 0xea, 0x06, 0x48, 0x15, 0x00, 0x00, 0x53, - 0x00, 0x74, 0xab, 0x48, 0x17, 0x6e, 0x28, 0x15, 0x43, 0x2f, 0xb9, 0x65, 0x28, 0x1f, 0x05, 0xb8, 0x17, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0xaf, 0x65, - 0x66, 0x57, 0x2f, 0x6e, 0x06, 0x98, 0x19, 0x00, 0xa4, 0xc2, 0xe0, 0xd0, 0x6c, 0xd0, 0xac, 0xb9, 0xc1, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x21, - 0x04, 0x42, 0x04, 0x4d, 0x28, 0x17, 0x1c, 0x20, 0x00, 0x1a, 0x48, 0x21, 0x05, 0xb8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x05, 0x05, 0x88, 0xd0, 0x01, - 0x10, 0x0c, 0x45, 0x28, 0x17, 0x07, 0x0e, 0xc8, 0x0c, 0x30, 0xec, 0x30, 0xc9, 0x06, 0x28, 0x0f, 0x7f, 0xff, 0x54, 0x00, 0x46, 0x6f, 0x2f, 0xa1, - 0x65, 0x00, 0x64, 0x20, 0x07, 0x10, 0x16, 0x30, 0x7f, 0x58, 0x04, 0x62, 0xb1, 0x83, 0x1a, 0x59, 0x06, 0x98, 0x17, 0xa8, 0xd1, 0x0c, 0x08, 0xb8, - 0xc4, 0xb3, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x22, 0x04, 0x01, 0x3e, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x20, 0x07, 0x90, 0x10, 0x1e, 0x34, - 0xff, 0x06, 0x06, 0xd0, 0x01, 0x72, 0x0b, 0xdb, 0xc0, 0x8a, 0x00, 0x3f, 0xff, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x40, 0x06, 0x01, 0x78, 0x01, - 0x20, 0x07, 0x30, 0x04, 0x20, 0x14, 0x50, 0x05, 0x02, 0x02, 0x03, 0x4f, 0x03, 0xd0, 0x01, 0x04, 0x04, 0xd0, 0x01, 0xf8, 0x7f, 0xf0, 0x77, 0x3f, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x99, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xeb, 0x00, 0xda, 0x49, 0x00, 0x00, 0x00, - 0x01, 0x99, 0xb7, 0x30, 0xf3, 0x30, 0xac, 0x01, 0x30, 0xdd, 0x30, 0xfc, 0x30, 0xeb, 0x30, 0x06, 0x38, 0x21, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6e, - 0x00, 0x67, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x5f, 0x65, 0x06, 0xc0, 0x7f, 0x75, 0x20, 0x81, 0x06, 0x90, 0xff, 0x06, - 0x10, 0x7d, 0x07, 0xd1, 0x7f, 0x06, 0x30, 0xff, 0x02, 0xb0, 0x65, 0xa0, 0x52, 0x61, 0x57, 0x06, 0x9b, 0x1b, 0xf1, 0x01, 0xc2, 0x00, 0xac, 0xec, - 0xd3, 0x74, 0xb9, 0x06, 0x7b, 0x9d, 0xa0, 0x07, 0xf1, 0xff, 0x61, 0x05, 0xec, 0xa6, 0x21, 0x04, 0x38, 0x04, 0x3d, 0x00, 0x04, 0x33, 0x04, 0x30, - 0x04, 0x3f, 0x04, 0x43, 0x19, 0x04, 0x40, 0x04, 0x0e, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, - 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb4, 0x8a, 0x00, 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x9c, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x40, 0x02, 0x51, 0x48, 0x00, 0x00, 0x00, 0x02, 0x9c, 0xaf, 0x30, 0xa2, 0x30, 0xe9, 0x00, - 0x30, 0xfb, 0x30, 0xeb, 0x30, 0xf3, 0x30, 0xd7, 0x30, 0x30, 0xfc, 0x20, 0x07, 0x05, 0xd8, 0x27, 0x4b, 0x00, 0x75, 0x00, 0x11, 0x61, 0x00, 0x6c, - 0x20, 0x03, 0x20, 0x00, 0x4c, 0x20, 0x0b, 0x14, 0x6d, 0x00, 0x70, 0x20, 0x11, 0x72, 0x10, 0x15, 0x80, 0x7f, 0x09, 0x54, 0x00, 0x86, 0x96, 0x61, - 0x57, 0x54, 0x80, 0xa6, 0x90, 0x02, 0xf4, 0x76, 0x96, 0x8f, 0x3a, 0x53, 0x05, 0xfb, 0x25, 0xe0, 0x00, 0xcf, 0x4c, 0xc5, 0x7c, 0xb7, 0xf8, 0xb8, - 0x78, 0x18, 0xd4, 0x74, 0xb9, 0x06, 0x3b, 0xa1, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x43, 0x08, 0x04, 0x30, 0x04, 0x3b, 0x20, 0x03, 0x2d, 0x00, 0x1b, - 0x89, 0x20, 0x0b, 0x3c, 0x04, 0x3f, 0x20, 0x11, 0x40, 0x04, 0x10, 0x1d, 0x74, 0xff, 0x14, 0x01, 0x04, 0x04, 0x20, 0x01, 0x01, 0x40, 0x06, 0x01, - 0x01, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x9c, 0xb8, 0x30, 0xe7, 0x24, 0x30, 0xdb, 0x48, 0x0f, 0xde, 0x5d, 0x06, 0x3f, 0xb9, 0x4a, 0x00, 0x1c, - 0x6f, 0x00, 0x68, 0x20, 0x03, 0x05, 0x98, 0x09, 0x10, 0x0f, 0xd0, 0x7f, 0xd4, 0x67, 0x30, 0x5b, 0x4f, 0x06, 0x52, 0xf9, 0x5f, 0xff, 0x70, 0xc8, - 0x38, 0xd6, 0x02, 0x74, 0xb9, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x52, 0xff, 0x14, 0x03, 0x04, 0x36, 0x04, 0x3e, 0x04, 0x45, 0x20, 0x03, 0x05, - 0x98, 0x0b, 0xa4, 0x10, 0x17, 0xb4, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x00, 0x02, 0x02, 0x0a, 0x01, 0xc7, 0x49, 0x00, - 0x00, 0x06, 0x04, 0x9c, 0xb1, 0x30, 0xc0, 0x06, 0x68, 0x11, 0x7f, 0xaf, 0x65, 0x28, 0x00, 0x64, 0x2f, 0xb1, 0x68, 0x10, 0x16, 0x60, 0x7f, 0x09, - 0x54, 0x53, 0x43, 0x62, 0x06, 0xb8, 0x17, 0x00, 0xcf, 0xe4, 0xb2, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x01, 0x1a, 0x04, 0x35, 0x04, 0x34, 0x04, - 0x30, 0x28, 0x19, 0xa4, 0x10, 0x1e, 0x54, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, 0x03, 0x59, 0x04, 0x5f, 0x47, - 0x00, 0x00, 0x41, 0x05, 0x28, 0x17, 0xe9, 0x30, 0xf3, 0x30, 0xbf, 0x20, 0x03, 0xd1, 0x06, 0x5d, 0x35, 0x38, 0x17, 0x6c, 0x28, 0x17, 0x6e, 0x00, - 0x74, 0x40, 0x05, 0x81, 0x10, 0x15, 0xf0, 0x7f, 0x09, 0x54, 0x70, 0x51, 0x39, 0x4e, 0x06, 0x9b, 0x19, 0x03, 0x08, 0xcf, 0x80, 0xb7, 0xc4, 0xd0, - 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0xa3, 0x38, 0x17, 0x3b, 0x28, 0x17, 0x3d, 0x04, 0x42, 0x40, 0x05, 0x10, 0x1d, 0xf4, 0xff, 0x48, 0x04, 0x38, - 0x0c, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x00, 0x04, 0x5c, 0x04, 0xb6, 0x48, 0x00, 0x00, 0x06, 0x22, 0x9c, 0xde, 0x28, 0x17, 0xc3, 0x30, - 0xab, 0x06, 0x68, 0x15, 0x00, 0x2d, 0x00, 0x4d, 0x68, 0x17, 0x6b, 0x2f, 0xb3, 0x06, 0x50, 0x7f, 0x61, 0x48, 0x97, 0x77, 0x63, 0x20, 0x01, 0x06, - 0x30, 0x81, 0x70, 0x7f, 0x6b, 0x06, 0x61, 0x01, 0x07, 0x10, 0xff, 0x06, 0xd1, 0xff, 0x02, 0x6c, 0x9a, 0x6d, 0x51, 0x32, 0x75, 0x06, 0x98, 0x17, - 0xc8, 0x06, 0xbb, 0x7c, 0xb7, 0x74, 0xce, 0x06, 0x98, 0x17, 0x0e, 0xf2, 0x7f, 0x1c, 0xd7, 0x28, 0x13, 0x38, 0x17, 0x3a, 0x20, 0x01, 0x30, 0x06, - 0x08, 0x15, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x14, 0x05, 0x06, 0x06, 0x20, 0x01, 0x05, 0x40, 0x06, 0x05, 0x05, 0x04, 0x05, 0x05, 0x8f, - 0x01, 0xb5, 0x28, 0x17, 0x07, 0x9c, 0x00, 0xcc, 0x30, 0xb0, 0x30, 0xea, 0x30, 0xfb, 0x30, 0x05, 0xbb, 0x30, 0xf3, 0x30, 0xd3, 0x28, 0x23, 0xf3, - 0x05, 0xe8, 0x21, 0x50, 0x4e, 0x2f, 0xaf, 0x67, 0x2f, 0xb3, 0x72, 0x00, 0x69, 0x00, 0x11, 0x20, 0x00, 0x53, 0x2f, 0xbd, 0x6d, 0x00, 0x62, 0x20, - 0x0b, 0xc0, 0x5f, 0xc3, 0x10, 0x15, 0x10, 0x7f, 0xee, 0x68, 0x8e, 0x7f, 0x70, 0x51, 0x80, 0x06, 0x98, 0x17, 0x90, 0xb2, 0xf8, 0xad, 0xac, 0xb9, - 0xb4, 0x06, 0xc2, 0x4c, 0xbe, 0x80, 0xb7, 0x06, 0x38, 0x1d, 0x0e, 0xf3, 0x7f, 0x1d, 0x08, 0x04, 0x35, 0x04, 0x33, 0x20, 0x03, 0x40, 0x04, 0x38, - 0x08, 0x04, 0x2d, 0x00, 0x21, 0x20, 0x0d, 0x3c, 0x04, 0x31, 0xd8, 0x20, 0x13, 0x38, 0x2b, 0x3d, 0x05, 0x28, 0x27, 0x10, 0x16, 0xf4, 0xff, 0x06, - 0x07, 0x07, 0xb1, 0x20, 0x01, 0x06, 0x40, 0x06, 0x38, 0x22, 0xee, 0x01, 0x7c, 0x28, 0x17, 0x06, 0x08, 0x9c, 0xd1, 0x30, 0xcf, 0x06, 0x08, 0x0b, - 0xbf, 0xff, 0x50, 0xa8, 0x2f, 0xaf, 0x68, 0x48, 0x03, 0x67, 0x10, 0x16, 0x40, 0x7f, 0x6d, 0x5f, 0xa8, 0x40, 0x4e, 0x06, 0x98, 0x15, 0x00, 0x00, - 0x0c, 0xd3, 0x6d, 0xd5, 0xd5, 0x06, 0x38, 0x0f, 0x0f, 0x73, 0x7f, 0x1f, 0x27, 0xff, 0x45, 0x48, 0x03, 0x33, 0x05, 0x28, 0x05, 0x8b, 0x10, 0x18, - 0x14, 0xff, 0x07, 0x08, 0x08, 0x20, 0x01, 0x07, 0x40, 0x06, 0x38, 0x22, 0x00, 0xb3, 0x02, 0x7b, 0x49, 0x00, 0x00, 0x09, 0x9c, 0x1c, 0xda, 0x30, - 0xe9, 0x06, 0xa8, 0x15, 0x38, 0x17, 0x3f, 0xab, 0x61, 0x00, 0x42, 0x6b, 0x10, 0x16, 0x60, 0x7f, 0x39, 0x97, 0xf3, 0x96, 0x06, 0xb8, 0x17, 0x98, - 0x06, 0xd3, 0x7c, 0xb7, 0x6c, 0xd0, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x1f, 0x0b, 0x04, 0x35, 0x04, 0x40, 0x28, 0x1b, 0x3a, 0x06, 0x48, 0x15, - 0x10, 0x17, 0x14, 0xff, 0x15, 0x08, 0x0a, 0x0a, 0x20, 0x01, 0x08, 0x20, 0x06, 0x09, 0x20, 0x05, 0x00, 0x08, 0x08, 0x42, 0x03, 0xe1, 0x47, 0x00, - 0x00, 0x41, 0x0a, 0x28, 0x17, 0xeb, 0x30, 0xea, 0x30, 0xb9, 0x06, 0x88, 0x1b, 0x82, 0x58, 0x17, 0x6c, 0x00, 0x69, 0x00, 0x73, 0x10, 0x16, 0x40, - 0x7f, 0xbb, 0x06, 0x73, 0x83, 0x74, 0x02, 0x5e, 0x06, 0x9b, 0x19, 0x28, 0x17, 0xb9, 0x0e, 0xac, 0xb9, 0xa4, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, - 0x7f, 0x58, 0x17, 0x3b, 0x0c, 0x04, 0x38, 0x04, 0x41, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x0b, 0x54, 0x0b, 0x20, 0x01, 0x09, 0x20, - 0x06, 0x0a, 0x20, 0x05, 0x09, 0x09, 0x10, 0x93, 0x04, 0x40, 0x28, 0x17, 0x0b, 0x9c, 0xd4, 0x30, 0x1a, 0xca, 0x30, 0xf3, 0x06, 0x88, 0x15, 0x5f, - 0xaf, 0x6e, 0x2f, 0xaf, 0x6e, 0x20, 0x00, 0x67, 0x10, 0x16, 0x40, 0x7f, 0xdf, 0x69, 0x94, 0x69, 0x7f, 0x43, 0x5c, 0x06, 0x98, 0x17, 0x3c, 0xd5, - 0xad, 0xb0, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x15, 0x1f, 0x04, 0x43, 0x28, 0x15, 0x30, 0x20, 0x05, 0x2d, 0x28, 0x23, 0x11, 0x38, 0x04, 0x3d, - 0x20, 0x0b, 0x3d, 0x04, 0x33, 0x05, 0x88, 0x23, 0xa5, 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x38, 0x0c, 0x09, 0x0a, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x04, - 0x0a, 0x0a, 0xda, 0x03, 0x59, 0x28, 0x17, 0x0c, 0x9c, 0x01, 0xb5, 0x30, 0xe9, 0x30, 0xef, 0x30, 0xaf, 0x06, 0x88, 0x19, 0x55, 0x53, 0x28, 0x13, - 0x72, 0x28, 0x17, 0x77, 0x28, 0x1b, 0x6b, 0x10, 0x16, 0x20, 0x7f, 0x02, 0x99, 0x6c, 0x5e, 0x63, 0x8a, 0x8d, 0x06, 0x9b, 0x17, 0xac, 0x06, 0xc0, - 0x7c, 0xb7, 0x41, 0xc6, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0xab, 0x28, 0x13, 0x40, 0x28, 0x17, 0x32, 0x28, 0x1b, 0x3a, 0x05, 0x88, 0x0d, - 0x10, 0x17, 0x94, 0xff, 0x14, 0x0b, 0x0e, 0x0e, 0x20, 0x01, 0x0b, 0x40, 0x06, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x1a, 0x01, 0x75, 0x4e, 0x00, 0x00, - 0x10, 0x0d, 0x9c, 0xbb, 0x28, 0x17, 0xf3, 0x30, 0xb4, 0x30, 0x15, 0xfc, 0x30, 0xeb, 0x06, 0x48, 0x1b, 0x53, 0x2f, 0xaf, 0x6c, 0x6f, 0xaf, 0x60, - 0x6f, 0x28, 0x21, 0x10, 0x15, 0xf0, 0x7f, 0xea, 0x96, 0x70, 0x51, 0xaa, 0x40, 0x83, 0x06, 0x98, 0x17, 0x40, 0xc1, 0x91, 0xb7, 0xe0, 0xac, 0x30, - 0x74, 0xb9, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0x04, 0x41, 0x3b, 0x28, 0x1b, 0x3d, 0x04, 0x33, 0x04, 0x3e, 0x28, 0x21, 0x8a, - 0x10, 0x1d, 0xf4, 0xff, 0x0c, 0x0f, 0x0f, 0x20, 0x01, 0x0c, 0x40, 0x06, 0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0x31, 0x02, 0x33, 0x48, 0x00, 0x02, 0x00, - 0x0e, 0x9c, 0xc8, 0x30, 0xec, 0x28, 0x17, 0xac, 0x22, 0x30, 0xcc, 0x06, 0x48, 0x15, 0x00, 0x00, 0x54, 0x28, 0x17, 0x72, 0xd4, 0x28, 0x1b, 0x38, - 0x17, 0x67, 0x48, 0x1f, 0x75, 0x10, 0x15, 0xc0, 0x7f, 0x01, 0x4e, 0x08, 0xa0, 0x52, 0x74, 0x59, 0x06, 0x98, 0x17, 0xb8, 0xd2, 0x1d, 0x06, 0xb8, - 0x00, 0xac, 0x04, 0xb2, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x22, 0xb6, 0x28, 0x0b, 0x35, 0x48, 0x15, 0x38, 0x1b, 0x43, 0x06, 0x08, 0x17, 0x10, - 0x16, 0xf4, 0xff, 0x0d, 0x28, 0x10, 0x10, 0x20, 0x01, 0x0d, 0x40, 0x06, 0x0d, 0x0d, 0x0d, 0x00, 0x0d, 0xca, 0x03, 0x56, 0x49, 0x00, 0x00, 0x0f, - 0x03, 0x9c, 0xe9, 0x30, 0xd6, 0x30, 0xa2, 0x28, 0x19, 0x06, 0x7d, 0x2f, 0x5c, 0x4c, 0x2f, 0xab, 0x62, 0x28, 0x0b, 0x3f, 0xb1, 0x10, 0x16, 0x30, - 0x7f, 0xb3, 0x7e, 0x00, 0xfd, 0x95, 0x54, 0x80, 0xa6, 0x90, 0xf4, 0x76, 0x08, 0x96, 0x8f, 0x3a, 0x53, 0x06, 0x1f, 0xb1, 0x7c, 0xb7, 0x80, 0x1a, - 0xbd, 0x48, 0xc5, 0x06, 0x78, 0x95, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x0f, 0x31, 0xe2, 0x28, 0x0f, 0x38, 0x15, 0x10, 0x1e, 0x34, 0xff, 0x0e, 0x05, - 0x05, 0x20, 0x01, 0x0e, 0x80, 0x40, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0xc0, 0x03, 0xf3, 0x00, 0x51, 0x00, 0x00, 0x10, 0x9c, 0xb5, 0x30, 0xd0, 0x44, - 0x30, 0x06, 0x9d, 0x2d, 0x00, 0x00, 0x53, 0x48, 0x17, 0x61, 0x00, 0x42, 0x68, 0x10, 0x16, 0x60, 0x7f, 0x99, 0x6c, 0xf4, 0x5d, 0x06, 0xb2, 0xff, - 0xac, 0x01, 0xc0, 0x14, 0xbc, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x73, 0x7f, 0x46, 0x21, 0x48, 0x17, 0x30, 0x04, 0x45, 0x06, 0x48, 0x15, 0x10, - 0x17, 0x14, 0xff, 0x0f, 0x28, 0x0d, 0x0d, 0x20, 0x01, 0x0f, 0x40, 0x06, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x41, 0x04, 0x89, 0x52, 0x00, 0x00, 0x11, - 0x00, 0x9c, 0xd7, 0x30, 0xc8, 0x30, 0xe9, 0x30, 0xb8, 0x05, 0x30, 0xe3, 0x30, 0xe4, 0x30, 0x06, 0x3f, 0xb0, 0x50, 0x2f, 0xab, 0x15, 0x74, 0x00, - 0x72, 0x2f, 0xb5, 0x6a, 0x2f, 0xb9, 0x79, 0x2f, 0xbd, 0x80, 0x10, 0x15, 0xd0, 0x7f, 0x03, 0x5e, 0xce, 0x57, 0x54, 0x80, 0xa6, 0x01, 0x90, 0xf4, - 0x76, 0x96, 0x8f, 0x3a, 0x53, 0x06, 0x1f, 0xb7, 0x00, 0x78, 0xd4, 0xb8, 0xd2, 0x7c, 0xb7, 0x90, 0xc7, 0x30, 0x7c, 0xc5, 0x06, 0x5b, 0x9b, 0x0e, - 0xf3, 0x7f, 0x1f, 0x04, 0x43, 0x04, 0x11, 0x42, 0x04, 0x40, 0x28, 0x1d, 0x34, 0x04, 0x36, 0x28, 0x23, 0x62, 0x4f, 0x05, 0xe8, 0x1f, 0x10, 0x16, - 0xf4, 0xff, 0x10, 0x0c, 0x0c, 0x20, 0x01, 0x10, 0x80, 0x40, 0x06, 0x10, 0x10, 0x10, 0x10, 0x12, 0x02, 0x4b, 0x45, 0x48, 0x00, 0x3f, 0xff, 0x01, - 0x04, 0x04, 0x20, 0x01, 0x01, 0x40, 0x06, 0x04, 0x01, 0x01, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, - 0x03, 0x30, 0x04, 0x02, 0x41, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, 0x04, 0x31, 0x03, 0x04, 0x40, 0x06, 0x30, 0x3a, 0x05, 0x06, - 0x06, 0x20, 0x01, 0x49, 0x05, 0x40, 0x06, 0x05, 0x05, 0x20, 0x07, 0x07, 0x07, 0x20, 0x01, 0x62, 0x06, 0x40, 0x06, 0x30, 0x1a, 0x07, 0x08, 0x08, - 0x20, 0x01, 0x07, 0xc5, 0x40, 0x06, 0x30, 0x1a, 0x08, 0x0a, 0x0a, 0x20, 0x01, 0x08, 0x20, 0x06, 0x41, 0x09, 0x20, 0x05, 0x08, 0x08, 0x09, 0x0b, - 0x0b, 0x20, 0x01, 0x51, 0x09, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x48, 0x09, 0x20, 0x1d, 0x09, 0x0b, 0x20, 0x05, 0x0a, - 0x0a, 0x0b, 0x2d, 0x0e, 0x0e, 0x20, 0x01, 0x0b, 0x40, 0x06, 0x30, 0x2a, 0x0c, 0x38, 0xe4, 0x34, 0x0f, 0x0c, 0x40, 0x06, 0x30, 0xe2, 0x0d, 0x30, - 0xdc, 0x10, 0x0d, 0xd3, 0x40, 0x06, 0x39, 0x0a, 0x0e, 0x30, 0x84, 0x05, 0x0e, 0x40, 0x06, 0x30, 0x3a, 0xe0, 0xf9, 0x1f, 0xf1, 0x17, 0x3f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x9c, 0x51, 0x00, 0x11, 0x09, 0x00, 0x00, 0x30, 0x01, 0x0f, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x45, 0xf4, 0x8a, 0xcf, 0x00, 0x00, 0x00, 0x02, 0x0f, 0xe9, 0x30, 0xd1, 0x30, 0xb9, 0x10, - 0x30, 0x0c, 0x77, 0x06, 0x78, 0x1d, 0x4c, 0x00, 0x61, 0x00, 0x14, 0x20, 0x00, 0x50, 0x20, 0x05, 0x7a, 0x10, 0x16, 0x40, 0x7f, 0xc9, 0x62, 0x04, - 0xf4, 0x5d, 0xaf, 0x65, 0x01, 0x06, 0x82, 0xff, 0x7c, 0xb7, 0x00, 0x0c, 0xd3, 0xa4, 0xc2, 0x20, 0x00, 0xfc, 0xc8, 0x80, 0x10, 0x06, 0x53, 0x7f, - 0x1b, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x1f, 0x91, 0x20, 0x05, 0x41, 0x04, 0x10, 0x1e, 0x34, 0xff, 0x01, 0x04, 0x04, 0x20, 0x01, 0x52, 0x01, 0x20, - 0x06, 0x03, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x00, 0x0f, 0xc1, 0x30, 0xe5, 0x30, 0xad, 0x30, 0xb5, 0x20, 0x30, 0xab, 0x06, 0x68, 0x1b, - 0x43, 0x00, 0x68, 0x00, 0x75, 0x22, 0x00, 0x71, 0x20, 0x03, 0x69, 0x00, 0x73, 0x28, 0x23, 0x63, 0xc0, 0x28, 0x27, 0x10, 0x15, 0xb0, 0x7f, 0x18, - 0x4e, 0xfa, 0x57, 0x28, 0x84, 0x20, 0x61, 0x53, 0x06, 0x78, 0x19, 0x94, 0xcd, 0xa4, 0xd0, 0xac, 0x18, 0xc0, 0x74, 0xce, 0x06, 0x78, 0x19, 0x0e, - 0xf3, 0x7f, 0x27, 0x04, 0x43, 0x0a, 0x04, 0x3a, 0x04, 0x38, 0x28, 0x15, 0x30, 0x20, 0x07, 0x30, 0xc2, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, - 0x02, 0x01, 0x02, 0x02, 0x50, 0x03, 0x09, 0x80, 0x30, 0x09, 0x02, 0x76, 0xf2, 0x98, 0xd1, 0x00, 0x00, 0x00, 0x04, 0x0f, 0xb3, 0x30, 0xc1, 0x30, - 0xe3, 0x30, 0x18, 0xd0, 0x30, 0xf3, 0x20, 0x03, 0x06, 0x38, 0x19, 0x43, 0x00, 0x6f, 0xab, 0x28, 0x0b, 0x68, 0x2f, 0xb5, 0x62, 0x2f, 0xb9, 0x6d, - 0x40, 0x05, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0xd1, 0x79, 0x70, 0x60, 0xed, 0x73, 0xf4, 0x5d, 0x80, 0x06, 0x78, 0x17, 0x54, 0xcf, 0x28, 0xcc, 0x24, - 0xbc, 0x14, 0x60, 0xbc, 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x1a, 0x04, 0x3e, 0x04, 0x47, 0xac, 0x28, 0x13, 0x31, 0x28, 0x17, 0x3c, 0x40, 0x05, - 0x10, 0x1d, 0xd4, 0xff, 0x03, 0x02, 0x28, 0x03, 0x03, 0x50, 0x03, 0x02, 0x30, 0x09, 0x03, 0xa4, 0xf3, 0x00, 0xf6, 0xd0, 0x00, 0x00, 0x05, 0x0f, - 0xd9, 0x30, 0x60, 0xcb, 0x06, 0x48, 0x0f, 0x7f, 0xff, 0x45, 0x00, 0x6c, 0x00, 0x20, 0x03, 0x00, 0x42, 0x00, 0x65, 0x00, 0x6e, 0x2f, 0xb1, 0x06, - 0x1d, 0xb3, 0xe1, 0x06, 0x90, 0x79, 0x0f, 0x50, 0x7f, 0x06, 0xf1, 0xff, 0x1d, 0x8d, 0x3c, 0x5c, 0x06, 0x78, 0x13, 0x81, 0x3f, 0xff, 0xd8, 0xc5, - 0xa0, 0xbc, 0xc8, 0xb2, 0x06, 0x78, 0x15, 0x80, 0x0f, 0x11, 0xff, 0x11, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x38, 0xe0, 0x05, 0xe8, 0x0d, 0x07, 0x94, - 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x03, 0x01, 0x01, 0x01, 0x04, 0x03, 0x04, 0x04, 0x01, 0x03, 0x30, 0x05, 0x04, 0x04, 0x00, 0x74, 0xf5, 0xda, - 0xd1, 0x00, 0x00, 0x06, 0x0f, 0x04, 0xaa, 0x30, 0xeb, 0x30, 0xed, 0x06, 0xa8, 0x19, 0x4f, 0x00, 0x14, 0x72, 0x00, 0x75, 0x20, 0x03, 0x6f, 0x10, - 0x16, 0x60, 0x7f, 0x65, 0x59, 0x08, 0x81, 0x9c, 0x57, 0x7f, 0x06, 0x98, 0x19, 0x24, 0xc6, 0xe8, 0x18, 0xb8, 0x5c, 0xb8, 0x06, 0x98, 0x17, 0x0e, - 0xf3, 0x7f, 0x1e, 0x04, 0x40, 0x2c, 0x04, 0x43, 0x20, 0x03, 0x3e, 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x05, 0x05, 0xa0, 0x70, 0x01, 0x04, - 0x40, 0x0a, 0x37, 0xf3, 0x40, 0xd0, 0x00, 0x00, 0x00, 0x07, 0x0f, 0xd1, 0x30, 0xf3, 0x30, 0xc9, 0x8b, 0x06, 0xa8, 0x17, 0x50, 0x00, 0x61, 0x2f, - 0xaf, 0x64, 0x06, 0x88, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x58, 0x6f, 0x1a, 0x59, 0x06, 0x98, 0x15, 0x00, 0x00, 0x10, 0x18, 0xd3, 0xc4, 0xb3, - 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1f, 0x04, 0x30, 0x0c, 0x04, 0x3d, 0x04, 0x34, 0x06, 0x88, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x06, 0xa0, - 0x70, 0x01, 0x05, 0x40, 0x0a, 0x28, 0xf8, 0x20, 0xcf, 0x00, 0x00, 0x00, 0x08, 0x0f, 0xdd, 0x30, 0xc8, 0x30, 0xb7, 0x88, 0x06, 0xc8, 0x17, 0x6f, - 0x00, 0x74, 0x2f, 0xad, 0x73, 0x00, 0xed, 0x81, 0x10, 0x16, 0x40, 0x7f, 0xe2, 0x6c, 0x58, 0x62, 0x7f, 0x89, 0x06, 0x98, 0x19, 0x03, 0xec, 0xd3, - 0xa0, 0xd1, 0xdc, 0xc2, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x51, 0x1f, 0x28, 0x11, 0x42, 0x28, 0x15, 0x41, 0x04, 0x38, 0x06, 0x48, 0x19, 0x94, - 0x10, 0x16, 0xf4, 0xff, 0x07, 0x07, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x13, 0xf2, 0x00, 0x3f, 0xd1, 0x00, 0x00, 0x09, 0x0f, 0xb5, 0x30, 0x00, 0xf3, - 0x30, 0xbf, 0x30, 0xfb, 0x30, 0xaf, 0x30, 0x15, 0xeb, 0x30, 0xb9, 0x06, 0x28, 0x1f, 0x53, 0x4f, 0xaf, 0x74, 0x2f, 0xb5, 0x00, 0x20, 0x00, 0x43, - 0x00, 0x72, 0x00, 0x75, 0x00, 0x40, 0x7a, 0x10, 0x15, 0xc0, 0x7f, 0x23, 0x57, 0x4b, 0x51, 0x81, 0x9c, 0x20, 0xaf, 0x65, 0x06, 0x78, 0x19, 0xb0, - 0xc0, 0xc0, 0xd0, 0x6c, 0x0c, 0xd0, 0xe8, 0xb8, 0xa4, 0x06, 0x68, 0x1b, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x10, 0x30, 0x04, 0x3d, 0x28, 0x19, 0x30, - 0x04, 0x2d, 0x00, 0x06, 0x1a, 0x04, 0x40, 0x04, 0x43, 0x28, 0x21, 0x10, 0x1d, 0xb4, 0xff, 0x08, 0x50, 0x08, 0x70, 0x01, 0x07, 0x40, 0x0a, 0x58, - 0xf3, 0x15, 0xd3, 0x00, 0x00, 0x00, 0x0a, 0x0f, 0xbf, 0x30, 0xea, 0x30, 0x68, 0xcf, 0x06, 0x28, 0x0f, 0x7f, 0xff, 0x54, 0x28, 0x17, 0x72, 0x00, - 0x69, 0x30, 0x00, 0x6a, 0x28, 0x1f, 0x10, 0x16, 0x40, 0x7f, 0x58, 0xcc, 0x91, 0xc8, 0x40, 0x54, 0x06, 0x78, 0x15, 0x00, 0x00, 0xc0, 0xd0, 0xac, - 0xb9, 0x34, 0x58, 0xd5, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x22, 0x28, 0x17, 0x40, 0x04, 0x19, 0x38, 0x04, 0x45, 0x28, 0x1f, 0x10, 0x1e, 0x34, - 0xff, 0x09, 0x09, 0x70, 0x01, 0x42, 0x08, 0x40, 0x0a, 0xb4, 0xf0, 0xf5, 0xd1, 0x00, 0x3f, 0xff, 0x01, 0x2a, 0x04, 0x04, 0x20, 0x01, 0x01, 0x20, - 0x06, 0x03, 0x20, 0x05, 0x01, 0x05, 0x01, 0x02, 0x01, 0x02, 0x02, 0x50, 0x03, 0x09, 0x30, 0x09, 0x07, 0x02, 0x03, 0x02, 0x03, 0x03, 0x50, 0x03, - 0x20, 0x0b, 0x20, 0x0a, 0x2a, 0x04, 0x03, 0x20, 0x25, 0x03, 0x20, 0x31, 0x03, 0x30, 0x05, 0x04, 0x19, 0x04, 0x05, 0x05, 0x70, 0x01, 0x50, 0x0a, - 0x06, 0x06, 0x70, 0x01, 0x9f, 0x50, 0x0a, 0x07, 0x07, 0x70, 0x01, 0x50, 0x0a, 0xf8, 0xaf, 0xf0, 0xa7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x4c, 0x41, 0x00, 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0xa8, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x66, 0x11, 0xa9, 0x26, 0x00, 0x00, 0x00, 0x02, 0xa8, 0xa2, 0x30, 0xd6, 0x30, 0xc0, 0x10, 0x30, 0xd3, 0x30, 0x06, 0x78, 0x1d, 0x41, 0x00, - 0x62, 0x00, 0x00, 0x75, 0x00, 0x20, 0x00, 0x44, 0x00, 0x68, 0x00, 0x58, 0x61, 0x20, 0x0b, 0x69, 0x10, 0x0e, 0x80, 0x7f, 0x06, 0x31, 0xfd, 0x00, - 0x00, 0x3f, 0x01, 0x96, 0x03, 0x5e, 0x4e, 0x62, 0xd4, 0x6b, 0x06, 0x7b, 0x1d, 0x00, 0x44, 0xc5, 0x80, 0xbd, 0xe4, 0xb2, 0x44, 0xbe, 0xc0, 0x0f, - 0x13, 0x7f, 0x06, 0x51, 0xff, 0x10, 0x04, 0x31, 0x04, 0x43, 0x04, 0x04, 0x2d, 0x00, 0x14, 0x04, 0x30, 0x20, 0x09, 0x38, 0x04, 0xcd, 0x10, 0x16, - 0x94, 0xff, 0x06, 0x56, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x03, 0x28, 0x17, 0x01, 0xb8, 0x30, 0xe5, 0x30, 0xde, 0x30, 0xf3, 0x06, 0x68, - 0x19, 0x05, 0x41, 0x00, 0x6a, 0x00, 0x6d, 0x28, 0x11, 0x6e, 0x06, 0x88, 0x97, 0x83, 0x06, 0xf0, 0x7f, 0x64, 0x00, 0x73, 0x00, 0x63, 0x29, 0x15, - 0x06, 0x51, 0x05, 0xa0, 0x07, 0x51, 0x7f, 0xe1, 0x06, 0x81, 0xff, 0x3f, 0x96, 0xbb, 0x6c, 0xfc, 0x40, 0x66, 0x06, 0x9f, 0xb3, 0x44, 0xc5, 0xc0, - 0xc9, 0xcc, 0xb9, 0xc0, 0x06, 0x9f, 0xb3, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x34, 0x04, 0x36, 0x04, 0x5c, 0x3c, 0x28, 0x15, 0x3d, 0x06, 0x08, 0x13, - 0x0f, 0x54, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x02, 0x02, 0x80, 0xd0, 0x01, 0x11, 0x12, 0x6d, 0x27, 0x00, 0x00, 0x04, 0x02, 0xa8, 0xb7, 0x30, 0xe3, - 0x30, 0xeb, 0x28, 0x1b, 0xe3, 0xa2, 0x06, 0x88, 0x17, 0x73, 0x2f, 0xa9, 0x20, 0x00, 0x53, 0x4f, 0xaf, 0x72, 0xad, 0x2f, 0xaf, 0x71, 0x2f, 0xb7, - 0x68, 0x05, 0x8f, 0xb5, 0x70, 0x77, 0x6a, 0x05, 0xc0, 0x75, 0xf7, 0xb0, 0x7f, 0x38, 0x13, 0x30, 0xf9, 0x78, 0x1f, 0x61, 0x05, 0xe0, 0x7f, 0x06, - 0xf0, 0xff, 0x71, 0x7d, 0x84, 0x06, 0x5f, 0xb1, 0x99, 0x6c, 0xe6, 0x8f, 0x06, 0x98, 0x15, 0x00, 0x00, 0x03, 0xe4, 0xc0, 0x74, 0xb9, 0x90, 0xc7, - 0x06, 0x98, 0x97, 0x0e, 0xf1, 0xff, 0x57, 0x28, 0x28, 0x11, 0x40, 0x48, 0x1b, 0x30, 0x06, 0x68, 0x17, 0x06, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, - 0x00, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x00, 0x06, 0x06, 0x07, 0x04, 0x03, 0x03, 0x03, 0x03, 0x10, 0xc7, 0x11, 0xa4, 0x28, 0x17, - 0x05, 0xa8, 0xe9, 0x30, 0x05, 0xa2, 0x30, 0xb9, 0x30, 0xfb, 0x20, 0x05, 0xeb, 0x20, 0x05, 0x01, 0xab, 0x30, 0xa4, 0x30, 0xde, 0x30, 0xfc, 0x05, - 0xa8, 0x23, 0x50, 0x52, 0x2f, 0xab, 0x73, 0x28, 0x17, 0x61, 0x00, 0x6c, 0x00, 0x17, 0x2d, 0x00, 0x4b, 0x48, 0x1d, 0x69, 0x4f, 0xc1, 0x05, 0x58, - 0x1b, 0x00, 0x30, 0x7f, 0x5a, 0xef, 0x06, 0x80, 0x7f, 0x43, 0xa0, 0xff, 0x0d, 0xd1, 0x7f, 0x65, 0x21, 0xff, 0x20, 0x20, 0x00, 0x4a, 0x05, 0xe0, - 0xfd, 0x00, 0x00, 0xc8, 0x54, 0x0a, 0x04, 0x4f, 0x6c, 0x9a, 0xd2, 0x89, 0x06, 0x7f, 0xb1, 0x7c, 0xb7, 0x00, 0xa4, 0xc2, 0x4c, 0xc5, 0x74, 0xce, - 0x74, 0xc7, 0x34, 0xc8, 0xb9, 0x06, 0x3f, 0xb2, 0x0e, 0xf1, 0xff, 0x20, 0x28, 0x17, 0x41, 0x04, 0x00, 0x20, 0x00, 0x4d, 0x04, 0x3b, 0x04, 0x4c, - 0x04, 0x11, 0x2d, 0x00, 0x25, 0x28, 0x27, 0x39, 0x04, 0x3c, 0x05, 0x88, 0x25, 0xc0, 0x08, 0x34, 0xff, 0x10, 0x0d, 0xb0, 0x7f, 0x04, 0x06, 0x05, - 0x05, 0x05, 0x05, 0x20, 0x04, 0x04, 0x20, 0x03, 0x06, 0x04, 0x04, 0x04, 0x04, 0x10, 0x40, 0x12, 0xd2, 0x28, 0x17, 0x06, 0xa8, 0xc9, 0x30, 0x18, - 0xa5, 0x30, 0xd0, 0x28, 0x0d, 0x06, 0x7d, 0x33, 0x44, 0x00, 0x75, 0x36, 0x00, 0x62, 0x48, 0x0b, 0x06, 0xd0, 0x7f, 0xef, 0x0e, 0xe0, 0xff, 0x06, - 0xd1, 0x7f, 0xe1, 0x84, 0x06, 0x81, 0xff, 0xea, 0x8f, 0xdc, 0x62, 0x06, 0x9f, 0xad, 0x00, 0x00, 0x03, 0x50, 0xb4, 0x14, 0xbc, 0x74, 0xc7, 0x06, - 0x90, 0x81, 0x0e, 0xf2, 0x7f, 0x07, 0x14, 0x04, 0x43, 0x04, 0x31, 0x48, 0x0b, 0x10, 0x06, 0xb3, 0xff, 0x10, 0x06, 0x90, 0xff, 0x03, 0x05, 0x05, - 0x03, 0x03, 0x03, 0x03, 0x40, 0x05, 0x38, 0x20, 0x08, 0x05, 0xf5, 0x11, 0x4f, 0x28, 0x17, 0x07, 0xa8, 0xd5, 0x08, 0x30, 0xb8, 0x30, 0xe3, 0x28, - 0x17, 0xe9, 0x30, 0xfc, 0xaa, 0x06, 0x48, 0x1b, 0x41, 0x4e, 0x27, 0x46, 0x28, 0x1d, 0x6a, 0x2f, 0xb9, 0x79, 0x3b, 0x00, 0x72, 0x05, 0x8f, 0xa9, - 0x5f, 0xff, 0x70, 0x79, 0xef, 0x06, 0x00, 0x79, 0x90, 0x7f, 0x5f, 0x64, 0x2f, 0xb1, 0x63, 0x6f, 0xa9, 0x30, 0xff, 0x05, 0xf0, 0x7f, 0x06, 0x51, - 0x79, 0xd1, 0x7f, 0xc0, 0x06, 0x10, 0xf9, 0x5f, 0xff, 0xcc, 0x5b, 0xe5, 0x67, 0x0a, 0x4f, 0x40, 0xc9, 0x06, 0x88, 0x1b, 0x4c, 0xc5, 0x78, 0xd4, - 0x90, 0xc7, 0x0e, 0x74, 0xc7, 0x7c, 0xb7, 0x06, 0x5b, 0x99, 0xd1, 0x7f, 0x0e, 0x11, 0xff, 0x24, 0x82, 0x28, 0x17, 0x34, 0x04, 0x36, 0x04, 0x35, - 0x28, 0x19, 0x40, 0xe0, 0x28, 0x1f, 0x0d, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, 0x03, 0x04, 0x04, 0x04, 0x10, 0x04, 0x06, 0x06, 0x20, 0x03, - 0x03, 0x06, 0x06, 0x06, 0x00, 0x06, 0xdd, 0x11, 0x0f, 0x28, 0x00, 0x00, 0x08, 0x00, 0xa8, 0xa6, 0x30, 0xe0, 0x30, 0xfb, 0x30, 0xa2, 0x2a, 0x30, - 0xeb, 0x20, 0x05, 0xab, 0x28, 0x1f, 0xef, 0x28, 0x23, 0xf3, 0x8b, 0x05, 0xa8, 0x21, 0x55, 0x00, 0x6d, 0x20, 0x01, 0x20, 0x2f, 0xb1, 0x38, 0x1f, - 0x55, 0x51, 0x48, 0x1b, 0x77, 0x48, 0x21, 0x6e, 0x06, 0x00, 0x7f, 0x2d, 0x40, 0x7f, 0x51, 0x69, 0x40, 0x7f, 0x69, 0x10, 0x05, 0xa0, 0x7f, 0x20, - 0x00, 0x65, 0x4a, 0x1d, 0x60, 0x4b, 0x06, 0x01, 0x7d, 0x27, 0x97, 0x4e, 0xc6, 0x59, 0xd6, 0x76, 0x20, 0x07, 0x4e, 0x06, 0x7f, 0xb1, 0xc0, 0xc6, - 0x4c, 0xc5, 0x74, 0x01, 0xce, 0x74, 0xc7, 0x40, 0xc6, 0x78, 0xc7, 0x06, 0x3f, 0xb2, 0x88, 0x0e, 0xf1, 0xff, 0x23, 0x04, 0x3c, 0x20, 0x01, 0x20, - 0x00, 0x4d, 0x00, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x1a, 0x8b, 0x28, 0x1b, 0x39, 0x04, 0x32, 0x40, 0x05, 0x3d, 0x05, 0x28, 0x25, 0x07, - 0xb4, 0xff, 0x94, 0x10, 0x0e, 0x30, 0x7f, 0x07, 0x07, 0x70, 0x01, 0x05, 0x40, 0x0a, 0x22, 0x12, 0x24, 0xa4, 0x27, 0x00, 0x3f, 0xff, 0x01, 0x01, - 0xd0, 0x01, 0x02, 0x02, 0xa2, 0xd0, 0x01, 0x03, 0x28, 0x5b, 0x06, 0x06, 0x03, 0x28, 0x5b, 0x07, 0x08, 0x04, 0x03, 0x03, 0x03, 0x20, 0x0e, 0x05, - 0x05, 0x05, 0x1f, 0x05, 0x04, 0x04, 0x20, 0x03, 0x28, 0x73, 0x30, 0x07, 0x30, 0x15, 0x40, 0x05, 0xb8, 0x30, 0x18, 0x05, 0xf8, 0x8f, 0xf0, 0x87, - 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x6c, 0xe4, 0x00, 0x11, 0x1b, 0x00, 0x00, - 0x30, 0x01, 0x10, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xc7, 0xf4, 0xee, 0xdd, 0x00, 0x00, 0x00, - 0x02, 0x10, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, 0x30, 0xc8, 0x30, 0xea, 0x20, 0x03, 0xfb, 0x30, 0xd5, 0x00, 0x30, 0xa7, 0x30, 0xc7, 0x30, 0xe9, - 0x30, 0xeb, 0x10, 0x30, 0xde, 0x5d, 0x05, 0x58, 0x2f, 0x44, 0x00, 0x69, 0x00, 0x04, 0x73, 0x00, 0x74, 0x00, 0x72, 0x20, 0x07, 0x74, 0x00, 0x00, - 0x6f, 0x00, 0x20, 0x00, 0x46, 0x00, 0x65, 0x00, 0x41, 0x64, 0x20, 0x03, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x05, 0xc0, 0x7f, 0x6b, 0x63, 0x20, 0x87, - 0x30, 0x7f, 0xe9, 0x20, 0x7f, 0xe9, 0x06, 0x20, 0x7f, 0x06, 0xd0, 0xff, 0x68, 0x65, 0x21, 0x85, 0x00, 0x31, 0x81, 0x65, 0x0c, 0xc1, 0xff, 0x54, - 0x80, 0xa6, 0x10, 0x90, 0x3a, 0x53, 0x06, 0x9b, 0x1b, 0x0c, 0xbe, 0x7c, 0xb7, 0x00, 0xc8, 0xc9, 0x20, 0x00, 0xf0, 0xc5, 0x29, 0xbc, 0x3b, 0x6c, - 0xad, 0x06, 0x1b, 0xa3, 0xb3, 0x6d, 0x33, 0x6f, 0x20, 0x00, 0x03, 0x11, 0x0c, 0xd3, 0xff, 0x04, 0x24, 0x04, 0x35, 0x04, 0x34, 0x20, 0x03, 0x40, - 0x04, 0x00, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x3d, 0x04, 0x00, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x04, 0x43, 0x3a, 0x20, 0x13, 0x43, - 0x04, 0x33, 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x10, 0x01, 0x07, 0x07, 0x20, 0x01, 0x01, 0x01, 0x08, 0x07, 0x48, 0x1a, 0x20, 0x05, - 0x01, 0x01, 0x58, 0x17, 0x03, 0x10, 0xa2, 0x0d, 0x30, 0xaf, 0x30, 0xec, 0x05, 0x88, 0x05, 0x00, 0x1f, 0xff, 0x41, 0x27, 0x8d, 0xc0, 0x36, 0x93, - 0x10, 0x16, 0x70, 0x7f, 0x3f, 0x96, 0x4b, 0x51, 0xcc, 0x91, 0x80, 0x06, 0x92, 0xff, 0x44, 0xc5, 0x6c, 0xd0, 0xac, 0xb9, 0x20, 0x15, 0x00, 0xfc, - 0xc8, 0x10, 0x06, 0x53, 0x7f, 0x10, 0x47, 0xff, 0x38, 0x04, 0xe7, 0xfd, 0xa4, 0x10, 0x18, 0x94, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, - 0x02, 0x02, 0x00, 0x02, 0x02, 0xea, 0xf8, 0xca, 0xcf, 0x00, 0x00, 0x40, 0x04, 0x28, 0x17, 0xe9, 0x30, 0xb4, 0x30, 0xa2, 0x30, 0x51, 0xb9, 0x06, - 0x68, 0x1b, 0x41, 0x2f, 0x93, 0x61, 0x00, 0x67, 0x2f, 0x29, 0x60, 0x61, 0x2f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x3f, 0x96, 0xc9, 0x62, 0x08, 0x10, - 0x62, 0xaf, 0x65, 0x06, 0x7b, 0x19, 0x4c, 0xc5, 0x7c, 0xb7, 0x03, 0xe0, 0xac, 0x44, 0xc5, 0xa4, 0xc2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x00, - 0x10, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x33, 0x04, 0x5a, 0x3e, 0x20, 0x05, 0x41, 0x06, 0x28, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x02, - 0x40, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x21, 0xf9, 0x04, 0x9a, 0xe6, 0x00, 0x00, 0x05, 0x28, 0x17, 0xde, 0x30, 0x1a, 0xd1, 0x30, 0xfc, - 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6d, 0x28, 0x17, 0x70, 0x30, 0x00, 0xe1, 0x06, 0x8f, 0xaf, 0x10, 0x0e, 0xd0, 0x7f, 0x3f, 0x96, 0x6c, 0x9a, 0x20, - 0x15, 0x5e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x44, 0xc5, 0xc8, 0x18, 0xb9, 0x0c, 0xd3, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x04, 0x3c, 0xb4, - 0x28, 0x17, 0x3f, 0x28, 0x1b, 0x10, 0x1e, 0x54, 0xff, 0x04, 0x38, 0x0c, 0x03, 0x04, 0xa0, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x06, 0x00, - 0xb3, 0x08, 0xdb, 0x00, 0x00, 0x06, 0x48, 0x17, 0xbe, 0x30, 0xca, 0x35, 0x30, 0xb9, 0x06, 0x68, 0x19, 0x58, 0x17, 0x7a, 0x2f, 0xaf, 0x6e, 0x06, - 0x4f, 0xb1, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x9a, 0x4e, 0x6c, 0x9a, 0x59, 0x5b, 0x06, 0xd8, 0x17, 0x03, 0x70, 0xc8, 0x98, 0xb0, 0xa4, 0xc2, 0x06, - 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x82, 0x58, 0x17, 0x37, 0x04, 0x3e, 0x04, 0x3d, 0x28, 0x1f, 0x41, 0xd2, 0x06, 0x08, 0x1d, 0x10, 0x16, 0xf4, 0xff, - 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x03, 0x80, 0x20, 0x05, 0x05, 0x05, 0xca, 0xfd, 0x51, 0xd5, 0x00, 0x01, 0x00, 0x07, 0x10, 0xd0, 0x30, - 0xa4, 0x30, 0x28, 0x1b, 0xa3, 0x06, 0x8d, 0x2f, 0x42, 0x2f, 0xad, 0x68, 0x00, 0x69, 0x2f, 0xb3, 0x10, 0x0e, 0xb0, 0x7f, 0x40, 0xed, 0x06, 0x81, - 0xff, 0xf4, 0x5d, 0x0a, 0x4f, 0x9a, 0x4e, 0x81, 0x06, 0x98, 0x17, 0x14, 0xbc, 0x74, 0xc7, 0x44, 0xc5, 0x06, 0x58, 0x13, 0xa3, 0x0f, 0x33, 0x7f, - 0x11, 0x28, 0x15, 0x38, 0x04, 0x4f, 0x06, 0x08, 0x0f, 0x10, 0x0f, 0xd4, 0xff, 0xa4, 0x06, 0x96, 0xff, 0x06, 0x38, 0x0c, 0x05, 0x06, 0x40, 0x06, - 0x06, 0x06, 0x00, 0x06, 0x06, 0xc5, 0xf6, 0x9d, 0xe4, 0x00, 0x00, 0x14, 0x08, 0x10, 0xbb, 0x28, 0x15, 0xe9, 0x06, 0xa8, 0x17, 0x43, 0x00, 0x44, - 0x65, 0x2f, 0xaf, 0x72, 0x00, 0xe1, 0x10, 0x16, 0x60, 0x7f, 0x5e, 0x58, 0x08, 0x3f, 0x96, 0xc9, 0x62, 0x06, 0x9b, 0x17, 0x38, 0xc1, 0x44, 0x18, - 0xc5, 0x7c, 0xb7, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0xb4, 0x28, 0x19, 0x40, 0x28, 0x1d, 0x10, 0x1e, 0x54, 0xff, 0x07, 0x38, - 0x0c, 0x06, 0x07, 0xa0, 0x20, 0x06, 0x17, 0x20, 0x05, 0x07, 0x07, 0x52, 0xfd, 0x92, 0x80, 0x28, 0x17, 0x09, 0x10, 0xa8, 0x30, 0xb9, 0x30, 0xd4, - 0x00, 0x30, 0xea, 0x30, 0xc8, 0x30, 0xfb, 0x30, 0xb5, 0x30, 0x30, 0xf3, 0x20, 0x07, 0x05, 0xdd, 0x3b, 0x45, 0x00, 0x73, 0x00, 0x50, 0x70, 0x2e, - 0x2f, 0x72, 0x2f, 0xb3, 0x74, 0x00, 0x6f, 0x00, 0x16, 0x20, 0x00, 0x53, 0x2f, 0xc1, 0x6e, 0x40, 0x0b, 0x10, 0x15, 0x30, 0x7f, 0x23, 0x00, 0x57, - 0xc3, 0x57, 0xaf, 0x65, 0xae, 0x76, 0xcc, 0x10, 0x91, 0xfe, 0x56, 0x06, 0x3b, 0x1d, 0x74, 0xc7, 0xa4, 0xc2, 0x00, 0x3c, 0xd5, 0xac, 0xb9, 0x2c, - 0xd2, 0xb0, 0xc0, 0x30, 0x2c, 0xd2, 0x06, 0x18, 0x1f, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x41, 0x04, 0x10, 0x3f, 0x04, 0x38, 0x28, 0x19, 0x38, 0x04, - 0x42, 0x04, 0x11, 0x43, 0x04, 0x2d, 0x28, 0x29, 0x30, 0x04, 0x3d, 0x40, 0x0b, 0x91, 0x10, 0x1d, 0x34, 0xff, 0x08, 0x08, 0x50, 0x01, 0x07, 0x08, - 0x1b, 0x40, 0x0a, 0x00, 0x8e, 0xf1, 0x4f, 0xe3, 0x00, 0x00, 0x0a, 0x10, 0x11, 0xde, 0x30, 0xc3, 0x48, 0x13, 0xb0, 0x30, 0xed, 0x20, 0x09, 0x51, - 0xbd, 0x28, 0x1d, 0xc9, 0x28, 0x21, 0xb9, 0x30, 0xeb, 0x05, 0x68, 0x1f, 0x6a, 0x4d, 0x2f, 0xad, 0x58, 0x0f, 0x47, 0x2f, 0xb5, 0x6f, 0x28, 0x25, - 0x73, 0xa2, 0x48, 0x1d, 0x64, 0x68, 0x23, 0x75, 0x00, 0x6c, 0x10, 0x14, 0xc0, 0x7f, 0x57, 0x00, 0x53, 0x6c, 0x9a, 0x58, 0x62, 0x3c, 0x68, 0x57, - 0x14, 0x7f, 0x22, 0x7d, 0x06, 0x38, 0x17, 0xc8, 0x28, 0x11, 0xf8, 0xad, 0x00, 0x5c, 0xb8, 0x18, 0xc2, 0x50, 0xb4, 0x20, 0xc2, 0xda, 0x06, 0x18, - 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x05, 0x58, 0x0f, 0x13, 0x28, 0x1b, 0x3e, 0xd1, 0x28, 0x25, 0x38, 0x1b, 0x34, 0x68, 0x21, 0x43, 0x04, 0x3b, - 0x04, 0xe8, 0x1d, 0x80, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x0c, 0x0e, 0x0c, 0x0c, 0x0c, 0x09, 0x60, 0x09, 0x20, 0x03, 0x20, 0x05, 0x09, 0x09, 0x76, - 0xf1, 0x2a, 0x08, 0xd9, 0x00, 0x00, 0x0b, 0x28, 0x17, 0xe9, 0x30, 0xcb, 0x0d, 0x30, 0xe7, 0x30, 0xf3, 0x05, 0x68, 0x07, 0x00, 0x38, 0x17, 0x72, - 0x4f, 0xa1, 0x18, 0x68, 0x00, 0xe3, 0x05, 0x6f, 0xa3, 0x10, 0x0f, 0xb0, 0x7f, 0x6c, 0x9a, 0xc9, 0x06, 0x62, 0x3c, 0x5c, 0x02, 0x66, 0x06, 0x52, - 0xfd, 0x38, 0x17, 0x7c, 0x1d, 0xb7, 0xe5, 0xb0, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x38, 0x17, 0x40, 0x28, 0x1b, 0x06, 0x3d, 0x04, 0x4c, 0x04, - 0x4f, 0x20, 0x05, 0x10, 0x1d, 0xf4, 0xff, 0x0a, 0x0a, 0x0a, 0x0c, 0x0a, 0x0a, 0x40, 0x01, 0x07, 0x40, 0x07, 0x36, 0x02, 0xfe, 0x86, 0xe0, 0x00, - 0x00, 0x0c, 0x28, 0x17, 0xc3, 0x00, 0x30, 0xc8, 0x30, 0xfb, 0x30, 0xb0, 0x30, 0xed, 0xb8, 0x20, 0x09, 0xbd, 0x06, 0x08, 0x1d, 0x00, 0x5f, 0xaf, - 0x10, 0x15, 0x90, 0x7f, 0x6c, 0x9a, 0x58, 0x01, 0x62, 0x3c, 0x68, 0x57, 0x7f, 0x22, 0x7d, 0x06, 0x5b, 0x17, 0x00, 0xc8, 0xb9, 0x2c, 0xd2, 0xf8, - 0xad, 0x5c, 0xb8, 0x38, 0x18, 0xc2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x42, 0x04, 0x43, 0x08, 0x04, 0x2d, 0x00, 0x13, 0x28, 0x1f, - 0x3e, 0x04, 0x41, 0xc1, 0x20, 0x0b, 0x10, 0x1d, 0xb4, 0xff, 0x0b, 0x0b, 0x0d, 0x0b, 0x0b, 0x40, 0x01, 0x40, 0x08, 0x40, 0x07, 0xec, 0xf4, 0x1f, - 0xd8, 0x00, 0x00, 0x01, 0x0d, 0x10, 0xdf, 0x30, 0xca, 0x30, 0xb9, 0x28, 0x17, 0x01, 0xb8, 0x30, 0xa7, 0x30, 0xe9, 0x30, 0xa4, 0x20, 0x0b, 0x8b, - 0x05, 0xdd, 0x39, 0x4d, 0x00, 0x69, 0x2f, 0xab, 0x61, 0x28, 0x0f, 0x38, 0x19, 0x58, 0x65, 0x4f, 0xbb, 0x69, 0x28, 0x1d, 0x10, 0x15, 0x70, 0x7f, - 0x73, 0x7c, 0xb3, 0x00, 0x7e, 0xaf, 0x65, 0x09, 0x54, 0xc9, 0x62, 0xaf, 0x41, 0x65, 0x06, 0x38, 0x19, 0xf8, 0xbb, 0x98, 0xb0, 0xa4, 0x28, 0x13, - 0x03, 0x1c, 0xc8, 0x7c, 0xb7, 0x74, 0xc7, 0x30, 0x09, 0x05, 0xd8, 0x1d, 0x82, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x38, 0x04, 0x3d, 0x28, 0x1b, 0x41, - 0x88, 0x28, 0x19, 0x16, 0x04, 0x35, 0x28, 0x1b, 0x30, 0x04, 0x39, 0xc0, 0x28, 0x1d, 0x10, 0x1d, 0x74, 0xff, 0x0c, 0x0d, 0x0f, 0x0d, 0x0d, 0x0d, - 0x04, 0x0c, 0x0c, 0x0d, 0x0d, 0x0a, 0x20, 0x05, 0x0c, 0x0c, 0x00, 0xd7, 0xf1, 0xc3, 0xe0, 0x00, 0x00, 0x0e, 0x10, 0x5a, 0xd1, 0x28, 0x0d, 0xfc, - 0x05, 0xe8, 0x0b, 0xbf, 0xff, 0x50, 0x2f, 0xaf, 0x72, 0x30, 0x00, 0xe1, 0x06, 0x70, 0x7e, 0x10, 0x0f, 0x00, 0x7f, 0x15, 0x5e, 0xc9, 0x62, 0xc6, - 0x06, 0x92, 0xfd, 0x23, 0x97, 0xd3, 0x7c, 0xb7, 0x05, 0xf8, 0x0b, 0x0f, 0xb3, 0x7f, 0x1f, 0xe0, 0x28, 0x13, 0x38, 0x0b, 0x10, 0x1e, 0x74, 0xff, - 0x0d, 0x0e, 0x10, 0x0e, 0x0e, 0x02, 0x0e, 0x0d, 0x0d, 0x0e, 0x0e, 0x0b, 0x20, 0x05, 0x0d, 0x00, 0x0d, 0xf9, 0xfe, 0x86, 0xdd, 0x00, 0x00, 0x0f, - 0xac, 0x48, 0x17, 0xa4, 0x28, 0x19, 0xd0, 0x06, 0x68, 0x1b, 0x58, 0x17, 0x61, 0x00, 0x1c, 0xed, 0x00, 0x62, 0x2f, 0xb5, 0x10, 0x16, 0x10, 0x7f, - 0x38, 0x17, 0x0a, 0x4f, 0x30, 0xf4, 0x5d, 0x06, 0x7b, 0x19, 0x38, 0x17, 0x74, 0xc7, 0x14, 0xbc, 0xe3, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x78, - 0x17, 0x38, 0x04, 0x31, 0x06, 0x48, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x00, 0x0e, 0x0f, 0x11, 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x10, 0x0f, 0x0f, 0x0c, - 0x20, 0x05, 0x0e, 0x0e, 0xf1, 0xfa, 0x05, 0x35, 0xe7, 0x00, 0x00, 0x10, 0x48, 0x17, 0xca, 0x06, 0x68, 0x13, 0xb0, 0xb8, 0x17, 0x6e, 0x06, 0x6f, - 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x5d, 0xc9, 0x62, 0x33, 0xa3, 0x90, 0x06, 0x92, 0xff, 0x38, 0x17, 0x98, 0xb0, 0x06, 0x78, 0x15, 0x0f, 0x13, - 0x7f, 0xb0, 0x78, 0x17, 0x3d, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0f, 0x10, 0x12, 0x10, 0x01, 0x10, 0x10, 0x0f, 0x0f, 0x10, 0x10, 0x0d, - 0x20, 0x05, 0x00, 0x0f, 0x0f, 0xee, 0xed, 0xfb, 0xdc, 0x00, 0x00, 0x00, 0x11, 0x10, 0xd4, 0x30, 0xa2, 0x30, 0xa6, 0x30, 0x11, 0xa4, 0x30, 0xfc, - 0x06, 0x68, 0x1b, 0x50, 0x00, 0x69, 0x2f, 0xb1, 0x70, 0x75, 0x2f, 0xaf, 0x06, 0x78, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0xae, 0x76, 0x65, 0x59, 0x20, - 0x0a, 0x4f, 0x06, 0x9b, 0x17, 0x3c, 0xd5, 0x44, 0xc5, 0xb0, 0x18, 0xc6, 0x74, 0xc7, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x38, 0xb8, - 0x28, 0x19, 0x43, 0x20, 0x05, 0x10, 0x16, 0x54, 0x7f, 0x06, 0xf6, 0xff, 0x10, 0x12, 0x14, 0x22, 0x12, 0x12, 0x28, 0x1a, 0x12, 0x12, 0x0f, 0x38, - 0x20, 0x10, 0x10, 0x63, 0xfc, 0x8e, 0x2f, 0xa0, 0x12, 0x10, 0xea, 0x30, 0x04, 0xaa, 0x30, 0xfb, 0x30, 0xc7, 0x20, 0x03, 0xb8, 0x30, 0x15, 0xe3, - 0x30, 0xcd, 0x28, 0x21, 0xed, 0x05, 0xc8, 0x21, 0x52, 0x28, 0x17, 0x01, 0x6f, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x20, 0x05, 0x56, 0x4a, 0x4f, - 0xb9, 0x65, 0x28, 0x2b, 0x72, 0x20, 0x15, 0x05, 0x3f, 0xc0, 0xc9, 0x2f, 0x00, 0x74, 0x2f, 0xb1, 0x74, 0x80, 0x81, 0x05, 0xf0, 0x8f, 0x06, 0xf0, - 0xff, 0x07, 0x10, 0x7f, 0x40, 0xed, 0x06, 0xc1, 0xff, 0xcc, 0x91, 0xa6, 0x7e, 0xed, 0x70, 0x08, 0x85, 0x51, 0x62, 0x53, 0x06, 0x5b, 0x17, 0xac, - 0xb9, 0xb0, 0x00, 0xc6, 0x70, 0xb3, 0x90, 0xc7, 0x24, 0xb1, 0x74, 0x1a, 0xc7, 0xe8, 0xb8, 0x06, 0x18, 0x1d, 0x0e, 0xf2, 0x7f, 0x20, 0x28, 0x17, - 0x3e, 0x02, 0x04, 0x2d, 0x00, 0x34, 0x04, 0x35, 0x20, 0x05, 0x16, 0xa3, 0x28, 0x23, 0x3d, 0x20, 0x09, 0x39, 0x04, 0x40, 0x20, 0x15, 0x10, 0x05, - 0x31, 0x7f, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x11, 0x13, 0x09, 0x13, 0x13, 0x13, 0x11, 0x08, 0x11, 0x13, 0x13, 0x10, 0x20, 0x05, 0x11, 0x11, 0xb8, - 0x28, 0xef, 0x42, 0x28, 0x17, 0x13, 0x68, 0x17, 0xb0, 0x30, 0xe9, 0x28, 0x30, 0xf3, 0x48, 0x1d, 0xc9, 0x28, 0x25, 0xce, 0x30, 0xeb, 0x37, 0x30, - 0xc6, 0x05, 0x68, 0x1d, 0x78, 0x17, 0x47, 0x28, 0x09, 0x38, 0x13, 0x58, 0x1f, 0x55, 0x64, 0x48, 0x2b, 0x4e, 0x28, 0x31, 0x72, 0x27, 0xb7, 0x65, - 0x10, 0x14, 0xa0, 0x7f, 0x00, 0x17, 0x53, 0xcc, 0x91, 0x65, 0x59, 0x3c, 0x68, 0x08, 0x70, 0x51, 0xb7, 0x5f, 0x06, 0x38, 0x19, 0x88, 0xd7, 0xb0, - 0x00, 0xc6, 0xf8, 0xad, 0x80, 0xb7, 0xc0, 0xc9, 0x50, 0x01, 0xb4, 0x78, 0xb1, 0x74, 0xb9, 0x58, 0xce, 0x05, 0xd8, 0x1b, 0xd6, 0x0e, 0xf3, 0x7f, - 0x38, 0x17, 0x43, 0x28, 0x17, 0x13, 0x28, 0x09, 0x38, 0x13, 0x34, 0xe8, 0x28, 0x27, 0x38, 0x25, 0x30, 0x13, 0x1d, 0x28, 0x31, 0x40, 0x04, 0x42, - 0xc0, 0x28, 0x39, 0x10, 0x1c, 0x94, 0xff, 0x12, 0x14, 0x15, 0x14, 0x14, 0x14, 0x04, 0x12, 0x12, 0x14, 0x14, 0x11, 0x20, 0x05, 0x12, 0x12, 0x01, - 0xe4, 0xfb, 0xf6, 0xe6, 0x00, 0x00, 0x14, 0x00, 0x48, 0x17, 0x70, 0xb9, 0x28, 0x17, 0x05, 0x7d, 0x3d, 0x00, 0xb8, 0x17, 0x53, 0x00, 0x75, 0x00, - 0x53, 0x6c, 0x10, 0x14, 0xe0, 0x7f, 0x57, 0x07, 0xa8, 0x17, 0x20, 0xc2, 0x05, 0xd8, 0x13, 0x0f, 0x33, 0x7f, 0xac, 0x00, 0xb8, 0x17, 0x21, 0x28, - 0x31, 0x3b, 0x04, 0xa8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x13, 0x15, 0x00, 0x16, 0x15, 0x15, 0x15, 0x13, 0x13, 0x15, 0x15, 0x40, 0x12, 0x20, 0x05, - 0x13, 0x13, 0xa5, 0xea, 0x98, 0xdb, 0x04, 0x00, 0x00, 0x15, 0x10, 0xed, 0x28, 0x0f, 0xc9, 0x30, 0x1a, 0xcb, 0x30, 0xa2, 0x05, 0x88, 0x09, 0xff, - 0xaf, 0x6f, 0x4f, 0xa5, 0xf4, 0xb0, 0x2f, 0xab, 0x69, 0x2f, 0xb1, 0x10, 0x15, 0xf0, 0x7f, 0x17, 0x67, 0x1a, 0x59, 0x08, 0x3c, 0x5c, 0x9a, 0x4e, - 0x06, 0x52, 0xfd, 0x00, 0x00, 0x3c, 0x01, 0xd6, 0xc4, 0xb3, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0x18, 0x11, 0x8c, 0x0f, 0x53, 0x7f, 0x20, 0x04, 0x3e, - 0x48, 0x0d, 0x30, 0x05, 0x38, 0x04, 0x60, 0x4f, 0x04, 0xe8, 0x05, 0x10, 0x18, 0x14, 0xff, 0x14, 0x16, 0x17, 0x16, 0x16, 0x02, 0x16, 0x14, 0x14, - 0x16, 0x16, 0x13, 0x20, 0x05, 0x14, 0x00, 0x14, 0xc5, 0xf9, 0x90, 0xd2, 0x00, 0x00, 0x16, 0x83, 0x28, 0x17, 0xe9, 0x30, 0xa4, 0x30, 0xde, 0x06, - 0x68, 0x15, 0x58, 0x17, 0x8c, 0x3f, 0xa9, 0x69, 0x00, 0x6d, 0x06, 0x28, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x57, 0x7f, 0x08, 0x56, 0x8d, 0x6c, 0x9a, - 0x06, 0x78, 0x15, 0x00, 0x00, 0x38, 0x01, 0xd6, 0x7c, 0xb7, 0x74, 0xc7, 0xc8, 0xb9, 0x06, 0xb8, 0x17, 0xc0, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x40, - 0x04, 0x30, 0x04, 0x39, 0x04, 0x60, 0x3c, 0x20, 0x05, 0x10, 0x1e, 0x14, 0xff, 0x15, 0x17, 0x18, 0x17, 0x17, 0x02, 0x17, 0x15, 0x15, 0x17, 0x17, - 0x14, 0x20, 0x05, 0x15, 0x04, 0x15, 0x00, 0x02, 0xdc, 0xd4, 0x2d, 0x2d, 0x10, 0xb5, 0x00, 0x30, 0xf3, 0x30, 0xbf, 0x30, 0xfb, 0x30, 0xab, 0x82, - 0x20, 0x05, 0xea, 0x30, 0xfc, 0x30, 0xca, 0x05, 0xe8, 0x21, 0x53, 0x88, 0x2f, 0xa3, 0x6e, 0x00, 0x74, 0x2f, 0xa9, 0x20, 0x00, 0x43, 0xd6, 0x2f, - 0xaf, 0x30, 0x09, 0x72, 0x2f, 0xb9, 0x6e, 0x05, 0x6f, 0xbb, 0x10, 0x0e, 0xf0, 0x7f, 0x23, 0x00, 0x57, 0x61, 0x53, 0x54, 0x58, 0x33, 0x74, 0x1c, - 0x40, 0x5a, 0x06, 0x5b, 0x19, 0xb0, 0xc0, 0xc0, 0xd0, 0x74, 0xce, 0x03, 0xc0, 0xd0, 0xac, 0xb9, 0x98, 0xb0, 0x06, 0x38, 0x1b, 0x0e, 0xf3, 0x7f, - 0x44, 0x21, 0x28, 0x13, 0x3d, 0x04, 0x42, 0x28, 0x19, 0x2d, 0x00, 0x63, 0x1a, 0x28, 0x1f, 0x30, 0x09, 0x40, 0x04, 0x38, 0x20, 0x13, 0x05, 0x58, - 0x25, 0x88, 0x10, 0x16, 0xf4, 0xff, 0x16, 0x18, 0x19, 0x20, 0x01, 0x16, 0x16, 0x18, 0x20, 0x18, 0x16, 0x20, 0x05, 0x16, 0x16, 0x63, 0xec, 0x77, - 0x08, 0xdd, 0x00, 0x00, 0x18, 0x48, 0x17, 0xfb, 0x30, 0xd1, 0x0d, 0x30, 0xa6, 0x30, 0xed, 0x05, 0xe8, 0x11, 0x78, 0x17, 0xe3, 0x2f, 0xb1, 0x11, - 0x20, 0x00, 0x50, 0x2f, 0xb3, 0x75, 0x00, 0x6c, 0x2f, 0xbd, 0xa8, 0x05, 0xdf, 0xb4, 0xc9, 0x48, 0x93, 0x74, 0x28, 0x95, 0x64, 0x00, 0x65, 0xfb, - 0x28, 0x9b, 0x05, 0xf0, 0x8f, 0x06, 0xf0, 0xff, 0x59, 0x97, 0x51, 0x7f, 0x6f, 0x06, 0x40, 0x7f, 0x06, 0xd1, 0xff, 0x03, 0x23, 0x57, 0xdd, 0x4f, - 0x57, 0x7f, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x00, 0xc1, 0xc0, 0x0c, 0xd3, 0xb8, 0xc6, 0xe8, 0xb8, 0xf1, 0x06, 0x38, 0x13, 0x07, 0x52, 0x7f, 0x06, - 0xd3, 0xff, 0x58, 0x17, 0x2d, 0x00, 0x1f, 0x28, 0x1f, 0x1c, 0x43, 0x04, 0x3b, 0x20, 0x03, 0x10, 0x05, 0xd1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x17, - 0x19, 0x41, 0x0a, 0x28, 0x18, 0x17, 0x17, 0x19, 0x19, 0x15, 0x20, 0x05, 0x00, 0x17, 0x17, 0x44, 0xef, 0xda, 0xde, 0x00, 0x00, 0x00, 0x19, 0x10, - 0xbb, 0x30, 0xeb, 0x30, 0xb8, 0x30, 0x1a, 0xc3, 0x30, 0xda, 0x06, 0x48, 0x15, 0x3f, 0xaf, 0x65, 0x2f, 0x9f, 0x67, 0xb0, 0x2f, 0xa1, 0x70, 0x27, - 0x97, 0x10, 0x16, 0x10, 0x7f, 0x5e, 0x58, 0x14, 0x5c, 0x08, 0x0c, 0x5e, 0xf9, 0x57, 0x06, 0x78, 0x19, 0x38, 0xc1, 0x74, 0x06, 0xb9, 0xc0, 0xc9, - 0x3c, 0xd5, 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x21, 0x00, 0x04, 0x35, 0x04, 0x40, 0x04, 0x36, 0x04, 0x38, 0x31, 0x04, 0x3f, 0x20, 0x03, 0x10, - 0x1e, 0x14, 0xff, 0x18, 0x1a, 0x1a, 0x20, 0x01, 0x50, 0x18, 0x20, 0x06, 0x18, 0x20, 0x05, 0x18, 0x18, 0x3d, 0xf8, 0x00, 0xa5, 0xe5, 0x00, 0x00, - 0x1a, 0x10, 0xb4, 0x30, 0x04, 0xa4, 0x30, 0xa2, 0x30, 0xb9, 0x06, 0x68, 0x15, 0x00, 0x00, 0x41, 0x47, 0x2f, 0x9d, 0x69, 0x00, 0xe1, 0x00, 0x73, - 0x06, 0x6d, 0xb0, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x62, 0x9a, 0x4e, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xe0, 0xac, 0x74, 0xc7, - 0x44, 0xc5, 0x30, 0xa4, 0xc2, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x13, 0x04, 0x3e, 0x04, 0x18, 0x4f, 0x04, 0x41, 0x06, 0x28, 0x11, 0x10, 0x17, - 0x54, 0xff, 0x19, 0x09, 0x0b, 0x00, 0x09, 0x09, 0x09, 0x19, 0x19, 0x09, 0x09, 0x06, 0x80, 0x20, 0x05, 0x19, 0x19, 0x26, 0xf4, 0xf8, 0xdc, 0x00, - 0x00, 0x00, 0x1b, 0x10, 0xda, 0x30, 0xeb, 0x30, 0xca, 0x02, 0x30, 0xf3, 0x30, 0xd6, 0x30, 0xb3, 0x06, 0x48, 0x1b, 0x50, 0x80, 0x4f, 0xaf, 0x6e, - 0x00, 0x61, 0x00, 0x6d, 0x00, 0x62, 0x0d, 0x00, 0x75, 0x00, 0x63, 0x28, 0x27, 0x06, 0x90, 0x7f, 0x6f, 0x40, 0x81, 0xc0, 0x0e, 0x90, 0xff, 0x0e, - 0x10, 0x7f, 0x2f, 0x4f, 0x57, 0x53, 0x03, 0x5e, 0x20, 0xe5, 0x54, 0x06, 0x7b, 0x17, 0x98, 0xd3, 0x74, 0xb9, 0xa8, 0x06, 0xb0, 0x80, 0xbd, 0xe0, - 0xcf, 0x06, 0x58, 0x19, 0x0e, 0xf2, 0x7f, 0x1f, 0x00, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3d, 0x04, 0x30, 0x00, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x43, - 0x04, 0x3a, 0xe0, 0x20, 0x03, 0x10, 0x0d, 0xb3, 0xff, 0x0e, 0xf5, 0x7f, 0x1a, 0x11, 0x13, 0x11, 0x11, 0x02, 0x11, 0x1a, 0x1a, 0x11, 0x11, 0x0e, - 0x20, 0x05, 0x1a, 0x00, 0x1a, 0x47, 0xfa, 0x2f, 0xe7, 0x00, 0x00, 0x1c, 0x08, 0x10, 0xc8, 0x30, 0xab, 0x28, 0x15, 0xc6, 0x30, 0xa3, 0xaa, 0x28, - 0x1b, 0xb9, 0x06, 0x28, 0x19, 0x54, 0x2f, 0xaf, 0x63, 0x28, 0x15, 0x6e, 0x2c, 0x00, 0x74, 0x2f, 0xb7, 0x6e, 0x06, 0x0f, 0xb7, 0x10, 0x0e, 0xf0, - 0x7f, 0x58, 0x62, 0x02, 0x4e, 0x57, 0xf7, 0x5e, 0xaf, 0x65, 0x06, 0x78, 0x17, 0xa0, 0x01, 0xd1, 0x78, 0xce, 0x6d, 0xce, 0xa4, 0xc2, 0x06, 0x58, - 0x15, 0x8a, 0x0f, 0x13, 0x7f, 0x22, 0x04, 0x3e, 0x28, 0x0b, 0x30, 0x28, 0x19, 0x42, 0x2c, 0x04, 0x38, 0x28, 0x1f, 0x41, 0x05, 0xc8, 0x15, 0x10, - 0x17, 0x14, 0xff, 0x1b, 0x1b, 0xa1, 0x70, 0x01, 0x19, 0x40, 0x0a, 0xbc, 0xf8, 0xac, 0xdd, 0x00, 0x3f, 0xff, 0x10, 0x01, 0x07, 0x07, 0x20, 0x01, - 0x01, 0x01, 0x08, 0x07, 0x44, 0x1a, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, - 0x04, 0x02, 0x41, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x05, - 0x94, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x03, 0x20, 0x05, 0x05, 0x05, 0x48, 0x06, 0x30, 0x04, 0x05, 0x06, 0x40, 0x06, 0x06, 0x06, 0x06, 0x25, - 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x17, 0x20, 0x05, 0x08, 0x07, 0x07, 0x08, 0x08, 0x50, 0x01, 0x07, 0x08, 0x1b, 0x80, 0x40, 0x0a, - 0x09, 0x0c, 0x0e, 0x0c, 0x0c, 0x0c, 0x09, 0x60, 0x09, 0x20, 0x03, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x0a, 0x0c, 0x28, 0x0a, 0x0a, 0x40, 0x01, 0x07, - 0x40, 0x07, 0x0b, 0x0b, 0x0d, 0x28, 0x0b, 0x0b, 0x40, 0x01, 0x08, 0x40, 0x07, 0x0c, 0x0d, 0x0f, 0x00, 0x0d, 0x0d, 0x0d, 0x0c, 0x0c, 0x0d, 0x0d, - 0x0a, 0xc0, 0x20, 0x05, 0x20, 0x07, 0x0e, 0x10, 0x0e, 0x0e, 0x0e, 0x0d, 0x0c, 0x0d, 0x0e, 0x0e, 0x0b, 0x20, 0x05, 0x20, 0x07, 0x0f, 0x11, 0x00, - 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x0f, 0x0f, 0x0c, 0xc0, 0x20, 0x05, 0x20, 0x07, 0x10, 0x12, 0x10, 0x10, 0x10, 0x0f, 0x0c, 0x0f, 0x10, 0x10, 0x0d, - 0x20, 0x05, 0x20, 0x07, 0x12, 0x14, 0x22, 0x12, 0x12, 0x20, 0x12, 0x12, 0x12, 0x0f, 0x30, 0x18, 0x10, 0x04, 0x11, 0x13, 0x09, 0x13, 0x13, 0x29, - 0x42, 0x13, 0x13, 0x40, 0x10, 0x39, 0x48, 0x11, 0x12, 0x14, 0x15, 0x14, 0x14, 0x88, 0x20, 0x22, 0x14, 0x14, 0x11, 0x30, 0x28, 0x12, 0x13, 0x15, - 0x00, 0x16, 0x15, 0x15, 0x15, 0x13, 0x13, 0x15, 0x15, 0x40, 0x12, 0x20, 0x05, 0x13, 0x13, 0x14, 0x16, 0x17, 0x16, 0x01, 0x16, 0x16, 0x14, 0x14, - 0x16, 0x16, 0x13, 0x20, 0x05, 0x00, 0x14, 0x14, 0x15, 0x17, 0x18, 0x17, 0x17, 0x17, 0x04, 0x15, 0x15, 0x17, 0x17, 0x14, 0x20, 0x05, 0x15, 0x15, - 0x10, 0x16, 0x18, 0x19, 0x20, 0x01, 0x16, 0x16, 0x18, 0x18, 0x41, 0x16, 0x20, 0x05, 0x16, 0x16, 0x17, 0x19, 0x0a, 0x20, 0x10, 0x04, 0x17, 0x17, - 0x19, 0x19, 0x15, 0x20, 0x05, 0x17, 0x17, 0x4a, 0x18, 0x39, 0xa4, 0x1a, 0x18, 0x20, 0x06, 0x18, 0x20, 0x05, 0x18, 0x08, 0x18, 0x19, 0x09, 0x0b, - 0x20, 0xf6, 0x19, 0x19, 0x09, 0x27, 0x09, 0x06, 0x20, 0x05, 0x19, 0x19, 0xf9, 0xcf, 0xf1, 0xc7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, 0x30, 0x01, 0xae, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x85, 0x11, 0x42, 0x21, 0x00, 0x00, 0x00, 0x02, 0xae, 0xea, 0x30, 0xe4, 0x30, 0xc9, 0x10, - 0x30, 0xde, 0x5d, 0x06, 0x78, 0x1d, 0x41, 0x00, 0x72, 0x00, 0x00, 0x20, 0x00, 0x52, 0x00, 0x69, 0x00, 0x79, 0x00, 0x1f, 0x61, 0x00, 0x64, 0x06, - 0x08, 0xa4, 0x06, 0x90, 0x79, 0x90, 0x7f, 0x06, 0x90, 0x7d, 0x31, 0x7f, 0x18, 0x6c, 0x00, 0x2d, 0x06, 0xe1, 0x7f, 0x06, 0xb0, 0xff, 0x29, 0x52, - 0xc5, 0x01, 0x96, 0x97, 0x5f, 0x30, 0x57, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0x00, 0xac, 0xb9, 0x7c, 0xc5, 0xdc, 0xb4, 0x20, 0x00, 0x30, 0xfc, 0xc8, - 0x0e, 0x93, 0x7f, 0x06, 0xb2, 0xff, 0x2d, 0x04, 0x40, 0x04, 0x00, 0x2d, 0x00, 0x20, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x30, 0x34, 0x04, 0x0e, 0x14, - 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x07, 0x0c, 0x0c, 0x00, 0x06, 0x0c, 0x01, 0x01, 0x05, 0x0c, 0x0c, 0x07, 0x08, 0x01, 0x01, 0x01, 0x01, 0x58, - 0x17, 0x03, 0xae, 0xd0, 0x0a, 0x30, 0xfc, 0x30, 0xcf, 0x06, 0xc8, 0x17, 0x6c, 0x28, 0x17, 0x42, 0xb7, 0x28, 0x13, 0x68, 0x40, 0x03, 0x06, 0x70, - 0x7f, 0xe2, 0x06, 0x60, 0x7f, 0x70, 0xf9, 0x06, 0xd8, 0x17, 0xc2, 0x07, 0x11, 0x7f, 0x06, 0x71, 0xff, 0xf4, 0x5d, 0xc8, 0x54, 0x06, 0x98, 0x15, - 0x00, 0x01, 0x00, 0x4c, 0xc5, 0x14, 0xbc, 0x58, 0xd5, 0x06, 0xb8, 0x17, 0xc1, 0x06, 0xd3, 0x7f, 0x06, 0xf2, 0xff, 0x2d, 0x04, 0x3b, 0x04, 0x4c, - 0x28, 0x19, 0x07, 0x11, 0x04, 0x30, 0x04, 0x45, 0x20, 0x03, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x02, 0x02, 0x02, 0x01, 0x04, 0x02, 0x01, - 0x30, 0x05, 0x07, 0x20, 0x02, 0x02, 0x20, 0x01, 0x3b, 0x0e, 0x7c, 0x1d, 0x00, 0x00, 0x00, 0x04, 0xae, 0xe1, 0x30, 0xc7, 0x30, 0xa3, 0x34, 0x30, - 0xca, 0x06, 0x88, 0x19, 0x58, 0x17, 0x4d, 0x4f, 0xb1, 0x69, 0x00, 0x45, 0x6e, 0x06, 0x08, 0x1b, 0x4d, 0x00, 0xe9, 0x60, 0x79, 0x65, 0x06, 0x4f, - 0xb3, 0x70, 0x4d, 0x20, 0x77, 0x70, 0xf9, 0x10, 0x06, 0x30, 0x7f, 0xa6, 0x9e, 0x30, 0x57, 0x20, 0xa3, 0x90, 0x06, 0x98, 0x19, 0x54, 0xba, 0x14, - 0xb5, 0x98, 0x74, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x1c, 0x28, 0x17, 0x34, 0x04, 0x1c, 0x38, 0x04, 0x3d, 0x05, 0xe8, 0x1b, - 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x05, 0x00, 0x09, 0x08, 0x0b, 0x09, 0x03, 0x03, 0x0a, 0x09, 0x00, 0x0a, 0x05, 0x03, 0x03, 0x03, - 0x03, 0x20, 0x11, 0x00, 0x0e, 0x1b, 0x00, 0x00, 0x05, 0xae, 0x71, 0x67, 0x34, 0xe8, 0x90, 0x06, 0x78, 0x13, 0x5f, 0xaf, 0x73, 0x2f, 0xa9, 0x20, - 0x00, 0x45, 0x53, 0x4f, 0xaf, 0x72, 0x00, 0x71, 0x28, 0x1d, 0x79, 0x05, 0xaf, 0xb9, 0x45, 0x50, 0x20, 0x73, 0x6f, 0x00, 0x76, 0x48, 0x93, 0x63, - 0x28, 0x1b, 0x15, 0x20, 0x00, 0x45, 0x20, 0x91, 0x74, 0x05, 0xc0, 0xff, 0x63, 0x2f, 0xab, 0x7f, 0x2d, 0x21, 0x01, 0x30, 0x07, 0x91, 0x03, 0x31, - 0x05, 0x05, 0x71, 0x7f, 0x30, 0x7d, 0x06, 0x51, 0x7f, 0x54, 0x52, 0x29, 0x8f, 0x67, 0x2a, 0x11, 0xf3, 0x2a, 0x13, 0x20, 0x00, 0x55, 0x4f, 0x22, - 0x01, 0x69, 0x29, 0xa1, 0x6e, 0x21, 0x81, 0x61, 0x2e, 0xc9, 0x88, 0x05, 0x1f, 0xc5, 0x1c, 0x4e, 0xe8, 0x06, 0xa8, 0x15, 0x00, 0x00, 0xe4, 0x01, - 0xc0, 0x74, 0xb9, 0xa4, 0xd0, 0x7c, 0xc5, 0x06, 0x78, 0x19, 0xc5, 0x06, 0xf3, 0x7f, 0x06, 0xf3, 0xff, 0x2d, 0x04, 0x48, 0x28, 0x15, 0x28, 0x28, - 0x15, 0x11, 0x40, 0x04, 0x3a, 0x28, 0x17, 0x39, 0x04, 0x4f, 0x05, 0xe8, 0x17, 0xc0, 0x0e, 0xd1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x04, 0x08, 0x0b, - 0x02, 0x07, 0x0b, 0x00, 0x04, 0x04, 0x06, 0x02, 0x0d, 0x08, 0x04, 0x04, 0x00, 0x04, 0x04, 0xca, 0x12, 0xa3, 0x23, 0x00, 0x00, 0x00, 0x06, 0xae, - 0xab, 0x30, 0xb9, 0x30, 0xa3, 0x30, 0x0d, 0xfc, 0x30, 0xe0, 0x30, 0x06, 0x58, 0x1d, 0x5b, 0x2f, 0x51, 0x2f, 0x2d, 0x5d, 0x73, 0x2f, 0xb5, 0x6d, - 0x0e, 0x00, 0x7f, 0x06, 0x90, 0xf9, 0x9c, 0xaf, 0x2d, 0x0e, 0xa1, 0x7f, 0x02, 0x61, 0x53, 0x7f, 0x89, 0xc6, 0x59, 0x06, 0x98, 0x19, 0x74, 0x18, - 0xce, 0xec, 0xc2, 0x06, 0x78, 0x13, 0x0f, 0x32, 0xff, 0x2d, 0x04, 0x3b, 0x2a, 0x04, 0x4c, 0x28, 0x19, 0x1a, 0x28, 0x19, 0x41, 0x28, 0x17, 0x3c, - 0xe0, 0x05, 0xc8, 0x15, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x05, 0x06, 0x03, 0x0b, 0x05, 0x00, 0x03, 0x05, 0x05, 0x04, 0x0b, 0x09, 0x06, - 0x05, 0x00, 0x05, 0x05, 0x05, 0xb9, 0x12, 0x44, 0x1f, 0x00, 0x02, 0x00, 0x07, 0xae, 0xa2, 0x30, 0xb7, 0x28, 0x15, 0xeb, 0x8b, 0x06, 0x68, 0x15, - 0x00, 0x00, 0x27, 0x4f, 0x31, 0x69, 0x2f, 0xb5, 0x06, 0x77, 0x17, 0x78, 0x73, 0x07, 0x00, 0x7f, 0x06, 0x90, 0xfd, 0x07, 0x51, 0x7f, 0x06, 0xb0, - 0xff, 0x3f, 0x96, 0x7f, 0x10, 0x89, 0x14, 0x5c, 0x06, 0x98, 0x17, 0x44, 0xc5, 0xdc, 0xc2, 0x3a, 0x74, 0xb9, 0x06, 0x98, 0x19, 0x06, 0xf2, 0x7f, - 0x06, 0xf3, 0x7f, 0x10, 0x48, 0x0d, 0x40, 0xe0, 0x05, 0xe8, 0x0d, 0x07, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, 0x01, 0x04, 0x03, 0x01, 0x00, - 0x04, 0x06, 0x06, 0x07, 0x03, 0x01, 0x01, 0x06, 0x00, 0x06, 0x06, 0x06, 0xf4, 0x0c, 0x39, 0x1e, 0x00, 0x0a, 0x00, 0x08, 0xae, 0xcf, 0x28, 0x15, - 0xa4, 0x06, 0xa8, 0x17, 0x48, 0xad, 0x2f, 0xa9, 0x27, 0x2f, 0xa9, 0x6c, 0x06, 0x6f, 0x2f, 0x30, 0x7f, 0xef, 0x06, 0x80, 0x7d, 0xf0, 0x50, 0xff, - 0x06, 0x90, 0xfd, 0x07, 0x51, 0x7f, 0x06, 0xb0, 0xff, 0xc8, 0x54, 0x0a, 0x4f, 0x21, 0xd2, 0x52, 0x06, 0x98, 0x17, 0x58, 0xd5, 0x7c, 0xc7, 0x06, - 0x98, 0x15, 0x80, 0x0f, 0x11, 0xff, 0x25, 0x04, 0x30, 0x04, 0x19, 0x20, 0x38, 0x0e, 0x04, 0x3b, 0x04, 0x4c, 0x06, 0x48, 0x1b, 0x07, 0x34, 0xff, - 0x10, 0x0e, 0xb0, 0x7f, 0x07, 0x02, 0x09, 0x06, 0x07, 0x08, 0x06, 0x07, 0x20, 0x03, 0x06, 0x00, 0x09, 0x07, 0x07, 0x07, 0x07, 0x6f, 0x13, 0x95, - 0x00, 0x1d, 0x00, 0x00, 0x09, 0xae, 0xe1, 0x30, 0xc3, 0x22, 0x30, 0xab, 0x06, 0x88, 0x15, 0x00, 0x00, 0x4d, 0x28, 0x17, 0x6b, 0x8a, 0x20, 0x01, - 0x61, 0x00, 0x68, 0x06, 0x4f, 0xb1, 0x4c, 0x28, 0x97, 0x20, 0x80, 0x20, 0x85, 0x65, 0x00, 0x63, 0x00, 0x71, 0x00, 0x75, 0xdd, 0x20, 0x07, 0x05, - 0xf0, 0xff, 0x65, 0x60, 0xff, 0x06, 0x71, 0x7f, 0x30, 0xf9, 0x63, 0x06, 0x80, 0x7f, 0xc4, 0xb1, 0x7f, 0x06, 0x31, 0x03, 0xa6, 0x9e, 0xa0, 0x06, - 0xa8, 0x15, 0x00, 0x00, 0x0c, 0x54, 0xba, 0x74, 0xce, 0x06, 0xb8, 0x17, 0x0e, 0xf2, 0x7f, 0x1c, 0x04, 0x17, 0x35, 0x04, 0x3a, 0x20, 0x01, 0x30, - 0x06, 0x48, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x08, 0x0b, 0x08, 0x09, 0x0a, 0x08, 0x08, 0x20, 0x06, 0x20, 0x03, 0x0b, 0x20, - 0x06, 0x08, 0x3c, 0x0f, 0x52, 0x1c, 0x00, 0x00, 0x00, 0x0a, 0xae, 0x17, 0x53, 0xe8, 0x90, 0x0a, 0xfd, 0x56, 0x83, 0x58, 0x06, 0x78, 0x19, 0x41, - 0x2f, 0xab, 0x20, 0x8a, 0x2f, 0xb5, 0x75, 0x00, 0x64, 0x40, 0x03, 0x20, 0x2f, 0xbf, 0x73, 0x88, 0x28, 0x23, 0x20, 0x00, 0x53, 0x28, 0x29, 0x61, - 0x00, 0x6d, 0xa8, 0x2f, 0xcf, 0x6c, 0x2f, 0x51, 0x79, 0x04, 0x68, 0x39, 0x46, 0x00, 0x72, 0x02, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x2f, 0xb5, - 0xe8, 0xab, 0x20, 0x0b, 0x65, 0x28, 0x25, 0x4e, 0x20, 0x11, 0x72, 0x20, 0x8f, 0x05, 0x70, 0xff, 0x57, 0x2d, 0x00, 0x00, 0xff, 0x63, 0x29, 0x25, - 0x2d, 0x60, 0x07, 0xb1, 0x03, 0x31, 0x05, 0xef, 0x05, 0x30, 0x7f, 0x30, 0x7d, 0x05, 0xf1, 0x7f, 0x65, 0x21, 0x89, 0x39, 0xa3, 0x51, 0x7d, 0x30, - 0x0f, 0xc2, 0x05, 0x3f, 0xc1, 0x32, 0xff, 0xb9, 0x8f, 0x86, 0x75, 0x06, 0x78, 0x1b, 0x81, 0x00, 0xbd, 0x80, 0xbd, 0x20, 0x00, 0x6d, 0xad, 0xbd, - 0x6c, 0xac, 0x06, 0x58, 0x1d, 0x07, 0x93, 0x7f, 0x65, 0x2f, 0x35, 0x06, 0x12, 0x01, 0x2d, 0x04, 0x00, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x25, - 0x04, 0x19, 0x43, 0x04, 0x34, 0x40, 0x03, 0x2c, 0x25, 0x04, 0x48, 0x20, 0x11, 0x50, 0x28, 0x28, 0x2b, 0x3c, 0x28, 0x2f, 0x3b, 0x04, 0x38, 0x04, - 0x1c, 0x39, 0x04, 0x4f, 0x04, 0x68, 0x37, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x03, 0x00, 0x05, 0x01, 0x03, 0x05, 0x09, 0x09, 0x02, - 0x05, 0x00, 0x0b, 0x03, 0x09, 0x09, 0x09, 0x09, 0x08, 0x16, 0x00, 0x2b, 0x1d, 0x00, 0x00, 0x0b, 0xae, 0xca, 0x30, 0x00, 0xb8, 0x30, 0xe5, 0x30, - 0xe9, 0x30, 0xfc, 0x30, 0x2a, 0xf3, 0x30, 0x06, 0x38, 0x1b, 0x4e, 0x2f, 0xaf, 0x6a, 0x46, 0x11, 0x6e, 0xdc, 0x06, 0x4f, 0x31, 0x07, 0x30, 0x7f, - 0x64, 0x68, 0x09, 0x06, 0x31, 0x05, 0x0e, 0xf1, 0x7f, 0xb3, 0x7e, 0x08, 0x63, 0x5b, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x98, 0x06, 0xb0, - 0xc0, 0xc9, 0x80, 0xb7, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x1d, 0x82, 0x27, 0xfd, 0x34, 0x04, 0x36, 0x04, 0x40, 0x28, 0x05, 0x3d, 0xe3, 0x04, - 0x67, 0xfb, 0x10, 0x00, 0xf4, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x0a, 0x0c, 0x0a, 0x30, 0x02, 0x20, 0x06, 0x40, 0x04, 0x30, 0x06, 0x0a, 0x72, 0x0c, - 0x6b, 0x1f, 0x00, 0x0a, 0x00, 0x0c, 0xae, 0xb8, 0x28, 0x11, 0xb6, 0x06, 0x88, 0x15, 0x00, 0x2d, 0x00, 0x4a, 0x2f, 0xa7, 0x7a, 0x06, 0x88, 0x15, - 0x07, 0x10, 0x7f, 0x44, 0x68, 0x13, 0x61, 0x61, 0x06, 0x61, 0x07, 0x0e, 0xf1, 0x7f, 0x09, 0x54, 0x5e, 0x8d, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, - 0xc0, 0xc9, 0x94, 0xc7, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x47, 0x14, 0x28, 0x13, 0x38, 0x04, 0x37, 0x06, 0x68, 0x15, 0x0f, 0x14, 0xff, 0x10, - 0x06, 0xf0, 0xff, 0x00, 0x0b, 0x0a, 0x07, 0x05, 0x09, 0x07, 0x0b, 0x0b, 0x00, 0x09, 0x07, 0x02, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x02, 0x0c, - 0x42, 0x1e, 0x00, 0x00, 0x0d, 0xae, 0x14, 0xbf, 0x30, 0xd6, 0x28, 0x19, 0xaf, 0x06, 0x68, 0x15, 0x00, 0x00, 0x41, 0x54, 0x2f, 0xaf, 0x62, 0x00, - 0x75, 0x00, 0x6b, 0x06, 0x68, 0x17, 0xb8, 0x50, 0x7f, 0x6f, 0x06, 0x80, 0x81, 0x07, 0x50, 0xff, 0x0e, 0xa0, 0x7f, 0x58, 0x03, 0x5e, 0x20, 0x4b, - 0x51, 0x06, 0x98, 0x19, 0xc0, 0xd0, 0x80, 0xbd, 0x6c, 0x68, 0xd0, 0x06, 0x98, 0x19, 0x0e, 0xf2, 0x7f, 0x22, 0x28, 0x11, 0x31, 0x04, 0x43, 0x38, - 0x04, 0x3a, 0x06, 0x48, 0x15, 0x10, 0x07, 0x23, 0xff, 0x0e, 0xe5, 0x7f, 0x0c, 0x0d, 0x0d, 0xa8, 0x20, 0x01, 0x0c, 0x20, 0x06, 0x05, 0x20, 0x05, - 0x0c, 0x0c, 0x2f, 0x00, 0x14, 0x03, 0x1a, 0x00, 0x00, 0x0e, 0xae, 0xb8, 0x02, 0x30, 0xe3, 0x30, 0xa6, 0x30, 0xd5, 0x06, 0x88, 0x17, 0x41, 0x08, - 0x00, 0x6c, 0x00, 0x20, 0x2f, 0xb5, 0x61, 0x00, 0x77, 0x20, 0x00, 0x66, 0x06, 0x80, 0x7f, 0x44, 0x00, 0x6a, 0x00, 0xf4, 0x80, 0x06, 0x40, 0x7f, - 0x44, 0x00, 0x73, 0x00, 0x63, 0x00, 0x68, 0xab, 0x2f, 0xb1, 0x75, 0x06, 0x80, 0xff, 0x2d, 0x07, 0x01, 0x7f, 0x4a, 0x49, 0x99, 0x06, 0x31, 0xff, - 0x08, 0x31, 0x67, 0x2b, 0x59, 0x06, 0x98, 0x15, 0x00, 0x00, 0x90, 0x07, 0xc7, 0xb0, 0xc6, 0x04, 0xd5, 0x06, 0x98, 0x17, 0x07, 0x53, 0x7f, 0x06, - 0x91, 0xff, 0x00, 0x2d, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x11, 0x14, 0x04, 0x36, 0x28, 0x21, 0x43, 0x04, 0x44, 0x05, 0xe8, 0x1f, 0xc0, - 0x07, 0x71, 0x7f, 0x10, 0x0e, 0x70, 0x7f, 0x0d, 0x04, 0x02, 0x06, 0x04, 0x02, 0x02, 0x0d, 0x0d, 0x03, 0x01, 0x08, 0x04, 0x38, 0x22, 0x32, 0x10, - 0x15, 0x59, 0x1c, 0x00, 0x3f, 0xff, 0x01, 0x07, 0x0c, 0x0c, 0x00, 0x06, 0x0c, 0x01, 0x01, 0x05, 0x0c, 0x0c, 0x07, 0x00, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x01, 0x04, 0x44, 0x02, 0x40, 0x05, 0x07, 0x02, 0x02, 0x20, 0x01, 0x03, 0x05, 0x00, 0x09, 0x08, 0x0b, 0x09, 0x03, 0x03, 0x0a, 0x09, - 0x00, 0x0a, 0x05, 0x03, 0x03, 0x03, 0x03, 0x04, 0x08, 0x00, 0x0b, 0x02, 0x07, 0x0b, 0x04, 0x04, 0x06, 0x02, 0x00, 0x0d, 0x08, 0x04, 0x04, 0x04, - 0x04, 0x05, 0x06, 0x00, 0x03, 0x0b, 0x05, 0x03, 0x05, 0x05, 0x04, 0x0b, 0x00, 0x09, 0x06, 0x05, 0x05, 0x05, 0x05, 0x06, 0x01, 0x00, 0x04, 0x03, - 0x01, 0x04, 0x06, 0x06, 0x07, 0x03, 0x08, 0x01, 0x01, 0x06, 0x06, 0x20, 0x07, 0x09, 0x06, 0x07, 0x10, 0x08, 0x06, 0x07, 0x20, 0x03, 0x06, 0x09, - 0x07, 0x07, 0x81, 0x20, 0x07, 0x0b, 0x08, 0x09, 0x0a, 0x08, 0x08, 0x20, 0x06, 0x20, 0x03, 0x0b, 0x20, 0x06, 0x08, 0x09, 0x03, 0x05, 0x01, 0x80, - 0x20, 0x63, 0x09, 0x02, 0x05, 0x0b, 0x03, 0x09, 0x09, 0x06, 0x09, 0x09, 0x0a, 0x0c, 0x0a, 0x30, 0x02, 0x20, 0x06, 0x04, 0x80, 0x30, 0x06, 0x0a, - 0x0b, 0x0a, 0x07, 0x05, 0x09, 0x07, 0x00, 0x0b, 0x0b, 0x09, 0x07, 0x02, 0x0a, 0x0b, 0x0b, 0x38, 0x0b, 0x0b, 0xf8, 0xef, 0xf0, 0xe7, 0x3f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x11, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x18, 0x0d, 0x0d, 0xd2, 0x00, 0x00, 0x00, 0x01, 0x11, 0xf1, 0x82, 0x18, 0x98, 0xf4, 0x00, - 0x30, 0xa1, 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xf3, 0x04, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x05, 0xd8, 0x27, 0x42, 0x00, 0x04, 0x72, 0x00, 0x69, 0x00, - 0x74, 0x20, 0x03, 0x73, 0x00, 0x04, 0x68, 0x00, 0x20, 0x00, 0x56, 0x20, 0x0d, 0x72, 0x00, 0x54, 0x67, 0x20, 0x13, 0x6e, 0x20, 0x0d, 0x49, 0x20, - 0x15, 0x6c, 0x00, 0x5a, 0x61, 0x20, 0x0b, 0x64, 0x20, 0x1f, 0x04, 0x38, 0xc1, 0xce, 0x20, 0x5f, 0x65, 0xdb, 0x20, 0x7b, 0x50, 0x79, 0x65, 0x40, - 0x7b, 0x50, 0x0f, 0x62, 0x60, 0x99, 0x30, 0x7d, 0x46, 0x6e, 0x20, 0xa3, 0x71, 0x00, 0x75, 0x40, 0x29, 0x04, 0x90, 0xff, 0x63, 0xaa, 0x21, 0x01, - 0x65, 0x21, 0x03, 0x4a, 0x20, 0x69, 0x6e, 0x21, 0x03, 0x66, 0xd5, 0x40, 0x8f, 0x30, 0x7b, 0x6e, 0x21, 0x1d, 0x65, 0x21, 0x09, 0x6e, 0x04, 0x09, - 0xc4, 0xbd, 0x31, 0x61, 0x6f, 0x41, 0x03, 0x31, 0x7b, 0x50, 0xff, 0x31, 0x7b, 0x69, 0x21, 0x8b, 0xfd, 0x71, 0x9b, 0x71, 0x01, 0x50, 0x9f, 0x04, - 0x10, 0x7f, 0x31, 0xe1, 0x51, 0x81, 0xed, 0x61, 0x7f, 0x6e, 0x6e, 0x61, 0x93, 0x72, 0x1d, 0xe1, 0x60, 0x7f, 0x30, 0x27, 0x03, 0xda, 0xc7, 0xf1, - 0x00, 0x82, 0x5e, 0x5c, 0xf4, 0x7e, 0x14, 0x5c, 0xac, 0x0c, 0x4e, 0xa4, 0x7f, 0x9b, 0x05, 0xe2, 0xfb, 0x3b, 0x9a, 0x01, 0xc6, 0x00, 0x6d, 0xad, - 0x39, 0xb8, 0x20, 0x00, 0x84, 0xbc, 0x00, 0xc4, 0xc9, 0x44, 0xc5, 0x7c, 0xc7, 0x9c, 0xb7, 0x31, 0xdc, 0xb4, 0x06, 0x33, 0x7f, 0x32, 0x5f, 0x20, - 0x00, 0x4d, 0x23, 0x6b, 0x57, 0x61, 0x23, 0x7d, 0x64, 0x61, 0x83, 0x69, 0x83, 0x7d, 0x31, 0x93, 0x04, 0x3c, 0x41, 0x5e, 0x49, 0x23, 0xdf, 0x68, - 0x81, 0xff, 0x53, 0xfb, 0x31, 0xff, 0xb1, 0xfd, 0xe2, 0xc0, 0x04, 0x81, 0xfd, 0x2d, 0x18, 0x04, 0x40, 0x04, 0x38, 0x04, 0x42, 0x00, 0x04, 0x30, - 0x04, 0x3d, 0x04, 0x41, 0x04, 0x3a, 0x82, 0x20, 0x0b, 0x35, 0x04, 0x20, 0x00, 0x12, 0x20, 0x13, 0x40, 0x35, 0x04, 0x33, 0x20, 0x19, 0xb0, 0x15, - 0x3e, 0x20, 0x21, 0x42, 0x20, 0x2f, 0x1c, 0x3e, 0x04, 0x32, 0x20, 0x2f, 0x0b, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0xf0, 0xd0, 0x01, - 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0xba, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xfe, 0x16, 0xf5, 0xd1, 0x00, 0x00, 0x00, - 0x01, 0xba, 0xd0, 0x30, 0xfc, 0x30, 0xdf, 0x24, 0x30, 0xe5, 0x20, 0x05, 0xc0, 0x30, 0x06, 0x38, 0x21, 0x42, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, - 0x6d, 0x00, 0x75, 0x00, 0x11, 0x64, 0x00, 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x00, 0x73, 0x0e, 0xe0, 0xff, 0xc0, 0x06, 0xf1, 0xff, 0x06, 0x11, 0x7f, - 0x7e, 0x76, 0x55, 0x61, 0x27, 0x59, 0x81, 0x06, 0x9b, 0x1b, 0x84, 0xbc, 0xa4, 0xbb, 0xe4, 0xb2, 0x06, 0x9b, 0x9b, 0xc0, 0x07, 0xb3, 0x7f, 0x06, - 0x31, 0xff, 0x11, 0x04, 0x35, 0x04, 0x40, 0x04, 0x00, 0x3c, 0x04, 0x43, 0x04, 0x34, 0x04, 0x4b, 0x04, 0xcf, 0x0e, 0xf1, 0x7f, 0x10, 0x0e, 0x10, - 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, - 0x30, 0x01, 0x12, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x30, 0x20, 0x23, 0xca, 0x00, 0x00, 0x00, - 0x02, 0x12, 0xaa, 0x30, 0xf3, 0x30, 0xbf, 0x01, 0x30, 0xea, 0x30, 0xaa, 0x30, 0xde, 0x5d, 0x06, 0x38, 0x21, 0x00, 0x4f, 0x00, 0x6e, 0x00, 0x74, - 0x00, 0x61, 0x00, 0x04, 0x72, 0x00, 0x69, 0x00, 0x6f, 0x10, 0x16, 0x20, 0x7f, 0x89, 0x5b, 0x02, 0x27, 0x59, 0x65, 0x75, 0x01, 0x77, 0x06, 0x7b, - 0x1d, 0x28, 0x00, 0xc6, 0xc0, 0xd0, 0xac, 0xb9, 0x24, 0xc6, 0x20, 0x14, 0x00, 0xfc, 0xc8, 0x0e, 0x93, 0x7f, 0xe1, 0x06, 0x83, 0xff, 0x1e, 0x04, - 0x00, 0x3d, 0x04, 0x42, 0x04, 0x30, 0x04, 0x40, 0x04, 0x08, 0x38, 0x04, 0x3e, 0x04, 0x10, 0x1e, 0x14, 0xff, 0x01, 0x09, 0x07, 0x00, 0x09, 0x08, - 0x08, 0x01, 0x01, 0x09, 0x08, 0x09, 0x04, 0x09, 0x01, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x12, 0x01, 0xa2, 0x30, 0xeb, 0x30, 0xd0, 0x30, 0xfc, - 0x28, 0x1b, 0x80, 0x06, 0x58, 0x17, 0x41, 0x00, 0x6c, 0x00, 0x62, 0x00, 0x65, 0xe0, 0x28, 0x17, 0x38, 0x1d, 0x10, 0x16, 0x10, 0x7f, 0x7e, 0x82, - 0x2f, 0x4f, 0x54, 0x40, 0x58, 0x06, 0x98, 0x17, 0x68, 0xc5, 0x84, 0xbc, 0xc0, 0xd0, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x10, 0x04, 0x3b, - 0x04, 0x4c, 0x04, 0x1d, 0x31, 0x04, 0x35, 0x28, 0x19, 0x38, 0x1f, 0x10, 0x1d, 0xf4, 0xff, 0x02, 0x38, 0x0c, 0x20, 0x01, 0x02, 0x40, 0x06, 0x02, - 0x02, 0x02, 0x02, 0x14, 0x00, 0x26, 0x50, 0xaf, 0x00, 0x00, 0x04, 0x12, 0xd6, 0x00, 0x30, 0xea, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0xc3, 0x00, 0x30, - 0xb7, 0x30, 0xe5, 0x30, 0xfb, 0x30, 0xb3, 0x00, 0x30, 0xed, 0x30, 0xf3, 0x30, 0xd3, 0x30, 0xa2, 0xa8, 0x05, 0x68, 0x27, 0x42, 0x4f, 0xa9, 0x74, - 0x2f, 0xad, 0x73, 0x00, 0x68, 0x08, 0x00, 0x20, 0x00, 0x43, 0x2f, 0xb5, 0x6c, 0x00, 0x75, 0x2d, 0x00, 0x6d, 0x28, 0x2d, 0x69, 0x05, 0x28, 0x29, - 0x50, 0x6f, 0x6f, 0x60, 0x6f, 0x15, 0x65, 0x00, 0x2d, 0x80, 0x91, 0x61, 0x2f, 0xc9, 0x6e, 0x2f, 0xc5, 0x54, 0x71, 0x20, 0x8d, 0x65, 0x05, 0x40, - 0xff, 0x63, 0x21, 0x01, 0x2d, 0x00, 0x5d, 0x4b, 0xc1, 0x01, 0x65, 0x2f, 0xcf, 0x05, 0x10, 0xff, 0x91, 0x6f, 0x20, 0x00, 0x00, 0xff, 0x68, 0x63, - 0x04, 0xc9, 0xaf, 0x00, 0x90, 0x7f, 0xe1, 0x05, 0x20, 0x7d, 0x00, 0x00, 0x0d, 0x00, 0x4e, 0x17, 0x52, 0xa0, 0x98, 0xe5, 0x54, 0x26, 0x04, 0x4f, - 0xd4, 0x6b, 0x9a, 0x4e, 0x06, 0x18, 0x1f, 0x0c, 0xbe, 0x00, 0xac, 0xb9, 0xf0, 0xd2, 0xdc, 0xc2, 0xec, 0xce, 0x03, 0xfc, 0xb7, 0x44, 0xbe, 0x44, - 0xc5, 0x05, 0xf8, 0x21, 0x73, 0x7f, 0x75, 0x73, 0x22, 0xf9, 0x05, 0xf3, 0x7b, 0x93, 0x7f, 0xfa, 0x00, 0x22, 0x7f, 0xe2, 0x05, 0x41, 0xff, 0x50, - 0x11, 0x28, 0x0f, 0x38, 0x48, 0x11, 0x3d, 0x04, 0x41, 0x04, 0x40, 0x3a, 0x28, 0x19, 0x4f, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x45, 0x3e, 0x28, 0x2f, - 0x43, 0x04, 0x3c, 0x28, 0x31, 0x38, 0x20, 0x11, 0xd2, 0x0c, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, - 0x00, 0x03, 0x03, 0x03, 0x70, 0x22, 0x46, 0xa8, 0x00, 0x00, 0x00, 0x05, 0x12, 0xde, 0x30, 0xcb, 0x30, 0xc8, 0x36, 0x30, 0xd0, 0x05, 0x68, 0x05, - 0x00, 0x1f, 0xff, 0x4d, 0x47, 0x7f, 0x38, 0x19, 0x6f, 0xe0, 0x2f, 0xb7, 0x06, 0x1f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x6c, 0x9a, 0x3c, 0x5c, 0x58, - 0x18, 0x62, 0xf4, 0x5d, 0x06, 0x18, 0x11, 0x5f, 0xff, 0xe4, 0xb9, 0xc8, 0x06, 0xb2, 0xa0, 0xd1, 0x14, 0xbc, 0x05, 0xf8, 0x0f, 0x0f, 0x73, 0x7f, - 0x1c, 0xd6, 0x48, 0x11, 0x38, 0x19, 0x3e, 0x28, 0x03, 0x30, 0x04, 0xa8, 0x01, 0x10, 0x18, 0x54, 0xff, 0x04, 0x4c, 0x03, 0x20, 0x01, 0x04, 0x04, - 0x30, 0x04, 0x40, 0x07, 0x79, 0x23, 0x00, 0xeb, 0xba, 0x00, 0x00, 0x06, 0x12, 0xcb, 0x30, 0x00, 0xe5, 0x30, 0xfc, 0x30, 0xfb, 0x30, 0xd6, 0x30, - 0x00, 0xe9, 0x30, 0xf3, 0x30, 0xba, 0x30, 0xa6, 0x30, 0x05, 0xa3, 0x30, 0xc3, 0x30, 0xaf, 0x05, 0x88, 0x27, 0x4e, 0x2f, 0xa3, 0x56, 0x77, 0x6e, - 0xa5, 0x75, 0x2f, 0xa1, 0x73, 0x20, 0x0d, 0x3e, 0xa3, 0x6b, 0xa2, 0x05, 0x6d, 0xb8, 0x4e, 0x2f, 0x9d, 0x75, 0x00, 0x76, 0x2f, 0x97, 0x61, 0xb5, - 0x2f, 0xa3, 0x2d, 0x06, 0x00, 0x87, 0x30, 0xff, 0x75, 0x2f, 0xab, 0x72, 0x40, 0x7f, 0xa8, 0x30, 0xff, 0x63, 0x2c, 0x37, 0x77, 0x21, 0x15, 0x69, - 0x00, 0x67, 0xae, 0x05, 0x41, 0x7f, 0x75, 0x2f, 0xb1, 0x76, 0x2f, 0xb5, 0x06, 0x51, 0x83, 0x30, 0x7f, 0x65, 0x80, 0x06, 0xa0, 0x7f, 0xb0, 0x65, - 0x0d, 0x4e, 0x26, 0x4f, 0x5e, 0x10, 0x74, 0x4b, 0x51, 0x06, 0x58, 0x19, 0x74, 0xb2, 0x0c, 0xbe, 0x02, 0xf0, 0xb7, 0x88, 0xc9, 0x05, 0xc7, 0x06, - 0x58, 0x19, 0x4e, 0xd6, 0x2f, 0xa5, 0x32, 0x81, 0x77, 0x00, 0x02, 0xfb, 0x6a, 0x05, 0x61, 0xff, 0x32, 0x7d, 0x61, 0x80, 0x06, 0x84, 0x01, 0x1d, - 0x04, 0x4c, 0x04, 0x4e, 0x04, 0x2d, 0x08, 0x00, 0x11, 0x04, 0x40, 0x48, 0x21, 0x41, 0x04, 0x43, 0xb8, 0x28, 0x25, 0x3a, 0x05, 0x88, 0x1f, 0x07, - 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x05, 0x04, 0x05, 0x00, 0x04, 0x07, 0x06, 0x05, 0x05, 0x05, 0x05, 0x07, 0x40, 0x04, 0x30, 0x05, 0xac, 0x20, - 0x98, 0xd0, 0x00, 0x00, 0x45, 0x07, 0x68, 0x17, 0xd5, 0x30, 0xa1, 0x28, 0x15, 0xc9, 0x48, 0x1b, 0x55, 0xc9, 0x28, 0x25, 0xe9, 0x48, 0x27, 0xc9, - 0x28, 0x31, 0xeb, 0x04, 0xe8, 0x21, 0xa0, 0x58, 0x17, 0x66, 0x47, 0x9d, 0x6e, 0x00, 0x64, 0x00, 0x6c, 0xb6, 0x4f, 0xbf, 0x64, 0x28, 0x29, 0x70, - 0x07, 0x4c, 0x2f, 0xd1, 0x57, 0x37, 0x64, 0xaa, 0x2f, 0xd3, 0x72, 0x03, 0xef, 0xd1, 0x54, 0x28, 0x97, 0x72, 0x28, 0x93, 0x65, 0xeb, 0x28, 0x13, - 0x57, 0xa3, 0x38, 0x23, 0x20, 0x28, 0xad, 0x74, 0x05, 0x00, 0x7b, 0x98, 0x17, 0x7f, 0x66, 0x00, 0x00, 0xfd, 0x51, 0x0d, 0x05, 0x10, 0x81, 0x70, - 0xff, 0x3f, 0xb5, 0x75, 0xa1, 0x30, 0xff, 0xd0, 0x05, 0x10, 0xf9, 0x00, 0x90, 0x7f, 0x79, 0x05, 0xa0, 0x7f, 0xbd, 0x7e, 0xac, 0x82, 0x00, 0x70, - 0x51, 0x0e, 0x4e, 0xc9, 0x62, 0x03, 0x5e, 0x08, 0xc9, 0x62, 0x1a, 0x59, 0x05, 0xf8, 0x1d, 0x74, 0xb2, 0x80, 0x00, 0xd3, 0xe4, 0xb4, 0x9c, 0xb7, - 0xdc, 0xb4, 0x98, 0x01, 0xb7, 0x0c, 0xbe, 0x7c, 0xb7, 0xc4, 0xb3, 0x05, 0xd8, 0x1f, 0xba, 0x00, 0x93, 0x7f, 0x65, 0x2f, 0xc7, 0x0d, 0x12, 0x7f, - 0x58, 0x17, 0x44, 0x28, 0x13, 0x43, 0x82, 0x28, 0x15, 0x34, 0x04, 0x3b, 0x04, 0x35, 0x40, 0x07, 0x20, 0x2a, 0x00, 0x38, 0x20, 0x03, 0x1b, 0x28, - 0x2b, 0x31, 0x48, 0x31, 0x34, 0x38, 0x04, 0x3e, 0x28, 0x39, 0x0c, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, 0x05, 0x0a, 0x00, 0x05, 0x0b, 0x0b, - 0x06, 0x06, 0x04, 0x0b, 0x08, 0x00, 0x05, 0x06, 0x06, 0x06, 0x06, 0xd3, 0x21, 0x81, 0x00, 0xda, 0x00, 0x00, 0x08, 0x12, 0xce, 0x30, 0xd0, 0x80, - 0x28, 0x07, 0xb9, 0x30, 0xb3, 0x30, 0xb7, 0x30, 0xa2, 0xd5, 0x04, 0xe8, 0x03, 0x00, 0xdc, 0x2f, 0x53, 0x2f, 0x9d, 0x6f, 0x27, 0x8d, 0x69, 0x2f, - 0xb9, 0xda, 0x05, 0xd0, 0x7f, 0x58, 0x0b, 0x6c, 0x28, 0x93, 0x38, 0x1d, 0xc9, 0x40, 0x87, 0x73, 0xa8, 0x2f, 0xb9, 0x65, 0x05, 0x6c, 0x2f, 0x75, - 0x2f, 0xa1, 0x63, 0x00, 0x68, 0xb5, 0x40, 0xfd, 0x74, 0x89, 0x19, 0x05, 0x7e, 0x2f, 0x75, 0xe1, 0x81, 0x7a, 0x05, 0xc1, 0x81, 0xab, 0x30, 0x7f, - 0x65, 0x6e, 0x31, 0x45, 0x41, 0x07, 0x6f, 0x2e, 0x2b, 0x05, 0x92, 0x03, 0x00, 0xb0, 0x65, 0xaf, 0x65, 0xd1, 0x79, 0x0d, 0x82, 0xc0, 0x05, 0xf8, - 0x0f, 0x7f, 0xff, 0x78, 0xb1, 0x14, 0xbc, 0xa4, 0xc2, 0x0e, 0x54, 0xcf, 0xe4, 0xc0, 0x05, 0xd8, 0x0f, 0x07, 0xb3, 0x7f, 0xb1, 0xfd, 0xf3, 0xc5, - 0x05, 0xc1, 0xfd, 0x38, 0x17, 0x3e, 0x04, 0x32, 0x28, 0x15, 0x4f, 0x28, 0x09, 0x55, 0x28, 0x27, 0xfb, 0x42, 0x28, 0x19, 0x30, 0x48, 0x21, 0x38, - 0x20, 0x13, 0xc9, 0x0d, 0xb1, 0x7f, 0x10, 0x0e, 0x50, 0x7f, 0x07, 0x07, 0x28, 0x0d, 0x05, 0x07, 0x20, 0x06, 0x80, 0x30, 0x04, 0x07, 0x07, 0xed, - 0x1f, 0xd9, 0xd2, 0x00, 0x00, 0x00, 0x09, 0x12, 0xd7, 0x30, 0xea, 0x30, 0xf3, 0x80, 0x28, 0x17, 0xfb, 0x30, 0xa8, 0x30, 0xc9, 0x30, 0xef, 0x28, - 0x30, 0xfc, 0x20, 0x05, 0xfb, 0x28, 0x21, 0xa4, 0x30, 0xe9, 0xaa, 0x20, 0x17, 0xc9, 0x05, 0x08, 0x29, 0x50, 0x2f, 0xad, 0x69, 0x2f, 0x2b, 0x63, - 0xaa, 0x4f, 0xa5, 0x45, 0x2f, 0x97, 0x77, 0x2f, 0xa3, 0x72, 0x4f, 0x33, 0x49, 0xd5, 0x27, 0x9d, 0x04, 0xf7, 0x25, 0xce, 0x68, 0x0d, 0x64, 0x2f, - 0xb5, 0x2d, 0xc0, 0x8d, 0xdb, 0x38, 0x21, 0x3f, 0xa3, 0x75, 0x60, 0x8f, 0x04, 0xd0, 0xff, 0x7a, 0x28, 0x91, 0xb0, 0xfd, 0x56, 0x2d, 0x20, 0xfd, - 0x6e, 0x48, 0x9b, 0x6c, 0x04, 0xce, 0xc0, 0x31, 0x63, 0x6f, 0xb4, 0x4e, 0x25, 0x20, 0x2f, 0x99, 0x39, 0x1d, 0x20, 0xa1, 0x93, 0x69, 0x00, 0x56, - 0x70, 0x81, 0x97, 0x6f, 0x61, 0x97, 0x6f, 0x04, 0x00, 0x7f, 0x00, 0x10, 0x7d, 0xed, 0xe0, 0x00, 0x00, 0x7d, 0x71, 0x85, 0x03, 0xd0, 0x7d, 0x00, - 0x00, 0x31, 0x72, 0xb7, 0x00, 0x5f, 0x4e, 0x53, 0x8b, 0x73, 0x50, 0x5b, 0x9b, 0x40, 0x5c, 0x06, 0x38, 0x1b, 0x04, 0xd5, 0xb0, 0xb9, 0xa4, 0xc2, - 0x00, 0xd0, 0xc5, 0xdc, 0xb4, 0xcc, 0xc6, 0xdc, 0xb4, 0x00, 0x44, 0xc5, 0x7c, 0xc7, 0x9c, 0xb7, 0xdc, 0xb4, 0xd6, 0x05, 0x98, 0x23, 0x73, 0x7f, - 0x73, 0xe3, 0x7d, 0x65, 0x2b, 0x9f, 0x05, 0x3a, 0xa1, 0x49, 0xa8, 0x2f, 0x21, 0x68, 0x62, 0x7d, 0x6f, 0x06, 0x01, 0xfd, 0x00, 0x00, 0x1e, 0x28, - 0x04, 0x41, 0x28, 0x0b, 0x40, 0x48, 0x1d, 0x20, 0x00, 0x1f, 0xa8, 0x20, 0x09, 0x38, 0x28, 0x15, 0x46, 0x28, 0x29, 0x20, 0x00, 0x2d, 0xab, 0x28, - 0x1d, 0x43, 0x28, 0x33, 0x40, 0x28, 0x25, 0x30, 0x04, 0x68, 0x23, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x0a, 0x03, 0x0a, 0x03, - 0x03, 0x08, 0x80, 0x30, 0x06, 0x0a, 0x08, 0x08, 0x08, 0x08, 0xe1, 0x20, 0x00, 0x1b, 0xd3, 0x00, 0x00, 0x0a, 0x12, 0xb1, 0x30, 0x06, 0xd9, 0x30, - 0xc3, 0x30, 0xaf, 0x05, 0x07, 0xff, 0x00, 0x7f, 0xff, 0x51, 0xab, 0x4e, 0x2f, 0x62, 0x2f, 0xaf, 0x63, 0x06, 0x80, 0x7f, 0xe9, 0x10, 0x06, 0xe0, - 0x7f, 0x06, 0xb1, 0xff, 0x03, 0x41, 0x9b, 0x17, 0x53, 0x4b, 0x51, 0x06, 0x38, 0x11, 0x5f, 0xff, 0x0d, 0x18, 0xd0, 0xa1, 0xbc, 0x05, 0x98, 0x05, - 0x08, 0xb1, 0xff, 0x71, 0x44, 0x09, 0xa2, 0x05, 0xf9, 0x99, 0x1a, 0x28, 0x0f, 0x35, 0x04, 0x31, 0x20, 0x03, 0x3a, 0xe0, 0x04, 0x67, 0xf9, 0x09, - 0x14, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x09, 0x0b, 0x08, 0x0b, 0x09, 0x02, 0x09, 0x09, 0x09, 0x0b, 0x09, 0x03, 0x40, 0x07, 0x48, 0x00, 0x21, 0x5d, - 0xcd, 0x00, 0x00, 0x0b, 0x12, 0xb5, 0x00, 0x30, 0xb9, 0x30, 0xab, 0x30, 0xc1, 0x30, 0xe5, 0x0a, 0x30, 0xef, 0x30, 0xf3, 0x06, 0x28, 0x1d, 0x53, - 0x2f, 0x8d, 0x73, 0x2b, 0x00, 0x6b, 0x2f, 0x93, 0x74, 0x2f, 0xa5, 0x68, 0x2f, 0xbb, 0x3f, 0x31, 0x40, 0x6e, 0x10, 0x15, 0x80, 0x7f, 0x28, 0x84, - 0xaf, 0x65, 0x80, 0x55, 0x08, 0x7b, 0x5f, 0x29, 0x6e, 0x06, 0x58, 0x1b, 0x1c, 0xc1, 0xa4, 0x01, 0xc2, 0x90, 0xce, 0x98, 0xcc, 0xd0, 0xc6, 0x06, - 0x58, 0x1d, 0x82, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x04, 0x41, 0x28, 0x13, 0x30, 0x2b, 0x04, 0x47, 0x28, 0x1f, 0x32, 0x20, 0x0d, 0x3d, 0x05, - 0xc8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x00, 0x0a, 0x0c, 0x09, 0x0c, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x0c, 0x0a, 0x0b, 0x40, 0x07, 0xe0, 0x23, 0x9b, - 0xb5, 0x00, 0x00, 0x00, 0x0c, 0x12, 0xe6, 0x30, 0xfc, 0x30, 0x4d, 0xb3, 0x28, 0x11, 0x96, 0x6e, 0x06, 0x18, 0x13, 0x3f, 0xff, 0x59, 0x2f, 0xaf, - 0x1a, 0x6b, 0x00, 0x6f, 0x05, 0xa8, 0x09, 0xdf, 0xff, 0x54, 0x2f, 0xa9, 0x72, 0xaa, 0x20, 0x01, 0x69, 0x28, 0x97, 0x6f, 0x20, 0x05, 0x72, 0x2f, - 0xb9, 0x20, 0x2e, 0x00, 0x64, 0x2f, 0xc5, 0x20, 0x05, 0x40, 0x9b, 0x06, 0xf0, 0xff, 0x07, 0x50, 0x7f, 0xf3, 0x80, 0x06, 0x81, 0xff, 0xb2, 0x80, - 0x7a, 0x7a, 0x30, 0x57, 0x3a, 0x40, 0x53, 0x06, 0x7f, 0xaf, 0x20, 0xc7, 0x58, 0xcf, 0x20, 0x00, 0x35, 0x00, 0xc9, 0x06, 0x38, 0x13, 0x0f, 0x32, - 0x7f, 0x2e, 0x28, 0x13, 0x3e, 0x05, 0xe8, 0x0b, 0xc0, 0x10, 0x00, 0x13, 0xff, 0x10, 0x06, 0x90, 0xff, 0x0b, 0x0d, 0x0c, 0x0d, 0x0d, 0x0d, 0x30, - 0x0b, 0x0b, 0x20, 0x04, 0x20, 0x05, 0x0b, 0x0b, 0x2d, 0x2b, 0x01, 0xf7, 0x9f, 0x00, 0x00, 0x0d, 0x12, 0xce, 0x28, 0x17, 0x05, 0xb9, 0x30, 0xa6, - 0x30, 0xa7, 0x20, 0x05, 0xc8, 0x06, 0x28, 0x1d, 0x55, 0x4e, 0x28, 0x13, 0x72, 0x2f, 0xab, 0x68, 0x2f, 0xa7, 0x65, 0x2f, 0xb9, 0x7d, 0x74, 0x27, - 0x95, 0xd7, 0xab, 0x37, 0xb3, 0x30, 0x19, 0x05, 0x98, 0x17, 0x73, 0x88, 0x19, 0x83, 0x50, 0x9d, 0x64, 0x00, 0x2d, 0x00, 0x4f, 0x28, 0xbf, 0x50, - 0x9f, 0xaf, 0x04, 0x30, 0xff, 0x64, 0x80, 0xfd, 0x2d, 0x00, 0x40, 0xfd, 0x04, 0x9f, 0xbf, 0x00, 0x11, 0x6b, 0x39, 0x15, 0x16, 0x65, 0x00, 0x6c, - 0xe0, 0xfd, 0x76, 0x04, 0x40, 0xfd, 0x00, 0x30, 0x7f, 0x6f, 0xd4, 0x61, 0x7f, 0xb0, 0x83, 0x6f, 0x62, 0x1b, 0x65, 0x04, 0x0f, 0xd2, 0x7f, 0x89, - 0x20, 0x17, 0x53, 0x06, 0xb8, 0x17, 0x78, 0xb1, 0xa4, 0xc2, 0xe8, 0x06, 0xc6, 0xa4, 0xc2, 0xb8, 0xd2, 0x06, 0x58, 0x1d, 0x07, 0xb3, 0x7f, 0xf3, - 0xa0, 0xc1, 0xff, 0x6f, 0x05, 0x21, 0xfd, 0x00, 0x00, 0x21, 0x04, 0x35, 0x28, 0x04, 0x32, 0x20, 0x03, 0x40, 0x28, 0x1d, 0x2d, 0x00, 0x17, 0x0a, - 0x04, 0x30, 0x04, 0x3f, 0x20, 0x03, 0x34, 0x28, 0x29, 0x4b, 0x88, 0x20, 0x19, 0x20, 0x00, 0x42, 0x40, 0x1b, 0x40, 0x04, 0x38, 0x37, 0x04, 0x42, - 0x28, 0x3f, 0x30, 0x07, 0x38, 0x03, 0xc8, 0x43, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x0c, 0x06, 0x0d, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, - 0x40, 0x06, 0x40, 0x02, 0x0c, 0x0c, 0x69, 0x2c, 0xaf, 0xae, 0x00, 0x00, 0x00, 0x0e, 0x12, 0xcc, 0x30, 0xca, 0x30, 0x6a, 0xd6, 0x06, 0x48, 0x11, - 0x78, 0x17, 0x75, 0x2f, 0x8f, 0x61, 0x26, 0x77, 0x75, 0xfc, 0x04, 0x26, 0x75, 0x02, 0x58, 0x17, 0x98, 0x15, 0x05, 0x10, 0x9b, 0x06, 0xf0, 0xff, - 0x0e, 0xf0, 0x7f, 0xaa, 0x52, 0x02, 0xb3, 0x7e, 0xf4, 0x7e, 0x79, 0x72, 0x06, 0x78, 0x1b, 0x04, 0x06, 0xb2, 0x98, 0xb0, 0x80, 0xbd, 0x06, 0x78, - 0x15, 0x0f, 0x12, 0x7f, 0x1d, 0x2b, 0x04, 0x43, 0x28, 0x03, 0x30, 0x28, 0x1b, 0x43, 0x27, 0xf9, 0x10, 0x06, 0x13, 0x7f, 0x80, 0x10, 0x06, 0xf4, - 0xff, 0x0d, 0x08, 0x0b, 0x08, 0x05, 0x07, 0x0d, 0x00, 0x0d, 0x08, 0x07, 0x06, 0x08, 0x0d, 0x0d, 0x0d, 0x04, 0x0d, 0x55, 0x2d, 0x48, 0xcf, 0x00, - 0x3f, 0xff, 0x01, 0x09, 0x00, 0x07, 0x09, 0x08, 0x08, 0x01, 0x01, 0x09, 0x08, 0x01, 0x09, 0x09, 0x01, 0x01, 0x01, 0x01, 0x02, 0x30, 0x04, 0x20, - 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x90, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x4d, 0x04, 0x30, 0x01, - 0x04, 0x04, 0x30, 0x04, 0x40, 0x07, 0x05, 0x20, 0x01, 0x00, 0x07, 0x06, 0x05, 0x05, 0x05, 0x05, 0x07, 0x04, 0x80, 0x30, 0x05, 0x06, 0x05, 0x0a, - 0x05, 0x0b, 0x0b, 0x06, 0x20, 0x06, 0x04, 0x20, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x07, 0x4c, 0x07, 0x20, 0x05, 0x05, 0x07, 0x20, 0x06, 0x30, 0x04, - 0x07, 0x07, 0x01, 0x08, 0x0a, 0x03, 0x0a, 0x03, 0x03, 0x08, 0x30, 0x06, 0x00, 0x0a, 0x08, 0x08, 0x08, 0x08, 0x09, 0x0b, 0x08, 0x00, 0x0b, 0x09, - 0x09, 0x09, 0x09, 0x0b, 0x09, 0x03, 0x80, 0x40, 0x07, 0x0a, 0x0c, 0x09, 0x0c, 0x0a, 0x0a, 0x0a, 0x08, 0x0a, 0x0c, 0x0a, 0x0b, 0x40, 0x07, 0x0b, - 0x0d, 0x0c, 0x90, 0x20, 0xbe, 0x0b, 0x0b, 0x30, 0xc3, 0x0b, 0x0b, 0x0b, 0x0b, 0xe0, 0xf8, 0xef, 0xf0, 0xe7, 0x3f, 0xde, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x13, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xb9, 0x0d, 0x21, 0xc6, 0x00, 0x00, 0x00, 0x01, 0x13, 0xb1, 0x30, 0xa4, 0x30, 0xde, 0x01, - 0x30, 0xf3, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x38, 0x21, 0x01, 0x43, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6d, 0x20, 0x05, 0x00, 0x6e, 0x00, 0x20, - 0x00, 0x49, 0x00, 0x73, 0x00, 0x5a, 0x6c, 0x40, 0x0b, 0x64, 0x20, 0x09, 0x05, 0x38, 0xb1, 0xce, 0x20, 0x6f, 0x65, 0xae, 0x20, 0x75, 0x20, 0x40, - 0x89, 0xef, 0x60, 0x89, 0x05, 0x50, 0x7b, 0x39, 0x9a, 0x4b, 0xaa, 0x20, 0xff, 0x69, 0x60, 0xff, 0x69, 0x40, 0x79, 0x65, 0x21, 0x01, 0x6e, 0xdf, - 0x05, 0x89, 0xac, 0x31, 0x71, 0x6f, 0x41, 0x03, 0x51, 0x01, 0x71, 0x8b, 0x05, 0xb0, 0x7f, 0x31, 0xf1, 0xd0, 0x71, 0x81, 0x31, 0x0b, 0xe1, 0x05, - 0xa0, 0xff, 0x00, 0x5f, 0xfc, 0x66, 0x18, 0xa4, 0x7f, 0x9b, 0x06, 0x42, 0xfb, 0x4b, 0x9a, 0xcf, 0x74, 0xc7, 0x00, 0xe8, 0xb9, 0x20, 0x00, 0x1c, - 0xc8, 0xc4, 0xb3, 0xed, 0x06, 0x3b, 0xa1, 0x32, 0x7f, 0x92, 0x81, 0x65, 0x22, 0x8b, 0x73, 0x7f, 0x65, 0x05, 0x42, 0x85, 0x56, 0x49, 0x23, 0xef, - 0x68, 0xe1, 0xff, 0xe3, 0x22, 0x91, 0x05, 0x7c, 0xad, 0x1a, 0x02, 0x04, 0x30, 0x04, 0x39, 0x04, 0x3c, 0x20, 0x05, 0x3d, 0x00, 0x04, 0x3e, 0x04, - 0x32, 0x04, 0x4b, 0x04, 0x20, 0x00, 0x00, 0x3e, 0x04, 0x41, 0x04, 0x42, 0x04, 0x40, 0x99, 0x40, 0x0f, 0x30, 0x04, 0x0c, 0xd4, 0xff, 0x10, 0x0e, - 0xf0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, 0x30, 0x01, 0x14, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x37, 0xe8, 0xc0, 0xcd, 0x00, 0x00, 0x00, 0x02, 0x14, 0xec, 0x30, 0xb8, 0x30, 0xe7, 0x00, 0x30, 0xf3, 0x30, 0xfb, 0x30, 0xe1, 0x30, 0xc8, - 0x00, 0x30, 0xed, 0x30, 0xdd, 0x30, 0xea, 0x30, 0xbf, 0x04, 0x30, 0xca, 0x30, 0xde, 0x5d, 0x05, 0x58, 0x2f, 0x52, 0x00, 0x00, 0x65, 0x00, 0x67, - 0x00, 0x69, 0x00, 0xf3, 0x00, 0x04, 0x6e, 0x00, 0x20, 0x00, 0x4d, 0x20, 0x0d, 0x74, 0x00, 0x05, 0x72, 0x00, 0x6f, 0x00, 0x70, 0x20, 0x03, 0x6c, - 0x20, 0x17, 0x15, 0x74, 0x00, 0x61, 0x20, 0x19, 0x61, 0x04, 0xa0, 0x7f, 0xe9, 0x40, 0x7f, 0x55, 0x6f, 0x60, 0x7f, 0xe9, 0x00, 0x20, 0x7f, 0x69, - 0x20, 0x9b, 0x65, 0x20, 0x9d, 0x55, 0x64, 0x40, 0x05, 0x53, 0x40, 0x91, 0x74, 0x20, 0xb3, 0x61, 0x20, 0xb9, 0x7e, 0x6f, 0x0b, 0x00, 0xff, 0x51, - 0x7f, 0x30, 0xff, 0x30, 0xe3, 0x00, 0x91, 0x81, 0x30, 0xff, 0x69, 0x80, 0x0c, 0x00, 0xff, 0x23, 0x57, 0x30, 0x57, 0x9a, 0x4e, 0xe5, 0x01, 0x54, - 0x96, 0x99, 0xfd, 0x90, 0x3a, 0x53, 0x06, 0x1b, 0x23, 0x00, 0xb0, 0xc0, 0xf0, 0xd2, 0x44, 0xc5, 0xe0, 0xac, 0x00, 0x20, 0x00, 0x18, 0xc2, 0xc4, - 0xb3, 0xfc, 0xc8, 0xd8, 0x05, 0xfb, 0xa5, 0x07, 0x72, 0x7f, 0xe3, 0x23, 0xf3, 0x06, 0x33, 0xff, 0x21, 0x04, 0x42, 0x00, 0x04, 0x3e, 0x04, 0x3b, - 0x04, 0x38, 0x04, 0x47, 0x00, 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x00, 0x3e, 0x04, 0x3a, 0x04, 0x40, 0x04, 0x43, 0x18, 0x04, - 0x33, 0x04, 0x0d, 0x91, 0x7f, 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x0b, 0x0b, 0xa9, 0x20, 0x01, 0x01, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x01, 0x01, 0x58, - 0x17, 0x00, 0x03, 0x14, 0xd0, 0x30, 0xeb, 0x30, 0xd1, 0x30, 0x06, 0xe9, 0x30, 0xa4, 0x30, 0xbd, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x56, 0xa8, 0x27, - 0xf7, 0x6c, 0x28, 0x05, 0x61, 0x28, 0x0d, 0x61, 0x00, 0xed, 0x36, 0x00, 0x73, 0x03, 0x07, 0x69, 0x02, 0xb0, 0x7f, 0x69, 0x06, 0xe0, 0x7f, 0x50, - 0xff, 0x20, 0x2b, 0x00, 0x28, 0xc7, 0xaf, 0x20, 0x21, 0x25, 0x29, 0x0d, 0x41, 0x7f, 0x06, 0x11, 0xff, 0x00, 0xe6, 0x74, 0x14, 0x5c, 0x15, 0x5e, - 0xb1, 0x83, 0x08, 0x22, 0x7d, 0x27, 0x59, 0x06, 0x38, 0x17, 0x1c, 0xbc, 0x0c, 0x00, 0xd3, 0x7c, 0xb7, 0x74, 0xc7, 0x8c, 0xc1, 0x20, 0x62, 0x00, - 0x06, 0x18, 0x15, 0x0f, 0x11, 0xff, 0x12, 0x04, 0x30, 0x28, 0x15, 0x4c, 0x28, 0x04, 0x3f, 0x20, 0x07, 0x40, 0x20, 0x0b, 0x38, 0x04, 0x41, 0xe2, - 0x28, 0x27, 0x10, 0x05, 0x91, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x0d, 0x0d, 0x20, 0x01, 0x02, 0xa0, 0x20, 0x06, 0x06, 0x20, 0x05, 0x02, 0x02, - 0x80, 0xe8, 0x16, 0x88, 0x28, 0x17, 0x04, 0x14, 0xa2, 0x28, 0x11, 0xbb, 0x30, 0xf3, 0x08, 0x30, 0xfb, 0x30, 0xc7, 0x28, 0x21, 0xfb, 0x30, 0x27, - 0x08, 0xff, 0xfb, 0x30, 0xab, 0x28, 0x2b, 0xed, 0x30, 0xb9, 0x80, 0x20, 0x13, 0xa4, 0x30, 0xd0, 0x30, 0xcb, 0x30, 0xa7, 0xd5, 0x40, 0x0b, 0x50, - 0x1f, 0xab, 0x20, 0x2b, 0xdd, 0x03, 0xa8, 0x41, 0x41, 0x47, 0x8b, 0x6b, 0xe9, 0x4f, 0xad, 0x3f, 0x8f, 0x6c, 0x2f, 0xb5, 0x47, 0x2f, 0x9d, 0x3f, - 0xa1, 0xd5, 0x38, 0x29, 0x30, 0x0f, 0x43, 0x48, 0x35, 0x6c, 0x2f, 0xd3, 0x73, 0x2f, 0xd3, 0x01, 0x49, 0x00, 0x62, 0x00, 0xe1, 0x00, 0xf1, 0x2f, - 0xc1, 0x6e, 0x7a, 0xa0, 0x33, 0x30, 0x23, 0x6d, 0x4f, 0xe5, 0x0a, 0x90, 0x7f, 0xf8, 0x0d, 0x58, 0xe0, 0x20, 0xeb, 0x04, 0x78, 0x0f, 0x0f, 0x71, - 0x7f, 0x0a, 0x4f, 0xe6, 0x74, 0x85, 0x00, 0x6d, 0xaf, 0x65, 0x06, 0x5c, 0x9b, 0x51, 0x84, 0x04, 0x76, 0x7e, 0x82, 0xee, 0x68, 0x05, 0xd8, 0x1f, - 0x44, 0xc5, 0x1a, 0x74, 0xc7, 0x3c, 0x06, 0x68, 0x13, 0x53, 0x7f, 0x79, 0x0e, 0xc3, 0x7f, 0x10, 0x23, 0x04, 0x39, 0x28, 0x09, 0x35, 0x04, 0x3d, - 0x05, 0xa8, 0x0b, 0x10, 0x00, 0x74, 0xff, 0x88, 0x10, 0x06, 0x30, 0xff, 0x03, 0x01, 0x01, 0x20, 0x01, 0x03, 0x03, 0x04, 0x80, 0x40, 0x05, 0x03, - 0x03, 0x99, 0xdf, 0xc1, 0xcc, 0x00, 0x20, 0x00, 0x05, 0x28, 0x17, 0xf3, 0x30, 0xc8, 0x30, 0xd5, 0x0b, 0x30, 0xa1, 0x30, 0xac, 0x28, 0x09, 0xbf, - 0x03, 0xa7, 0xf1, 0x01, 0x78, 0x17, 0x15, 0x6e, 0x00, 0x74, 0x2f, 0xa3, 0x66, 0x2f, 0xb7, 0x67, 0x2f, 0xbb, 0x5b, 0x73, 0x20, 0x0d, 0x61, 0x0f, - 0x00, 0x7f, 0x00, 0x18, 0x23, 0x49, 0x04, 0x68, 0x23, 0x0e, 0xf1, 0x7f, 0x00, 0x89, 0x5b, 0x58, 0x62, 0xd5, 0x6c, 0xa0, 0x52, 0x0c, 0xaf, 0x65, - 0x54, 0x58, 0x05, 0xd8, 0x11, 0x5f, 0xff, 0x48, 0xc5, 0x00, 0xa0, 0xd1, 0x0c, 0xd3, 0x00, 0xac, 0xa4, 0xc2, 0x34, 0xc0, 0xd0, 0x06, 0x38, 0x1d, - 0x0e, 0xf3, 0x7f, 0x10, 0x28, 0x11, 0x42, 0x04, 0x01, 0x3e, 0x04, 0x44, 0x04, 0x30, 0x04, 0x33, 0x20, 0x03, 0x5c, 0x41, 0x20, 0x0d, 0x30, 0x05, - 0xa8, 0x23, 0x10, 0x00, 0x54, 0xff, 0x10, 0x05, 0x96, 0x7f, 0x04, 0x02, 0x44, 0x02, 0x20, 0x01, 0x04, 0x04, 0x01, 0x40, 0x05, 0x04, 0x04, 0x01, - 0x2f, 0xef, 0xf1, 0xcd, 0x00, 0x00, 0x06, 0x28, 0x17, 0x00, 0xe9, 0x30, 0xa6, 0x30, 0xab, 0x30, 0xcb, 0x30, 0x71, 0xa2, 0x06, 0x08, 0x13, 0x5f, - 0xaf, 0x3f, 0x95, 0x75, 0x00, 0x63, 0x2f, 0xef, 0x1b, 0x6e, 0x00, 0xed, 0x05, 0xc8, 0x13, 0x00, 0x10, 0x7f, 0x69, 0x2f, 0xfd, 0x06, 0x50, 0xff, - 0x77, 0x6b, 0x80, 0x7f, 0x3f, 0xb9, 0x00, 0x18, 0x15, 0x58, 0x04, 0x48, 0x15, 0x07, 0xf1, 0x7f, 0x06, 0x11, 0xff, 0x00, 0x3f, 0x96, 0xb3, 0x52, - 0x61, 0x53, 0x3c, 0x5c, 0x20, 0x9a, 0x4e, 0x06, 0x38, 0x15, 0x00, 0x00, 0x44, 0xc5, 0x7c, 0x00, 0xb7, 0xb0, 0xc6, 0x74, 0xce, 0xc8, 0xb2, 0x44, - 0x62, 0xc5, 0x06, 0x58, 0x17, 0x0e, 0xd1, 0xff, 0x10, 0x04, 0x40, 0x28, 0x11, 0x43, 0x20, 0x04, 0x3a, 0x28, 0x17, 0x3d, 0x04, 0x38, 0x04, 0x4f, - 0xe2, 0x05, 0xa8, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x05, 0x03, 0x03, 0x20, 0x01, 0x05, 0x20, 0x05, 0x02, 0x40, 0x05, 0x05, 0x05, - 0x75, 0xe4, 0x60, 0x0a, 0xcc, 0x00, 0x00, 0x07, 0x28, 0x17, 0xbf, 0x28, 0x15, 0xde, 0xf7, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x3f, 0x9f, 0x38, 0x15, - 0x6d, 0x06, 0x08, 0x13, 0x08, 0x10, 0x7f, 0x00, 0x38, 0x11, 0xe0, 0x30, 0x01, 0x04, 0x58, 0x13, 0x0f, 0x31, 0x7f, 0x3f, 0x96, 0x54, 0x58, 0x61, - 0x19, 0x53, 0x6c, 0x9a, 0x06, 0x58, 0x15, 0x38, 0x17, 0xc0, 0xd0, 0x28, 0x15, 0x63, 0xb9, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x04, 0x42, - 0x28, 0x17, 0x38, 0x15, 0x71, 0x3c, 0x28, 0x1f, 0x10, 0x06, 0xf4, 0xff, 0x10, 0x06, 0x16, 0x7f, 0x06, 0x04, 0x04, 0x20, 0x01, 0x10, 0x06, 0x06, - 0x03, 0x40, 0x05, 0x06, 0x06, 0x8b, 0xec, 0x00, 0xfd, 0xcd, 0x00, 0x00, 0x08, 0x14, 0xd3, 0x30, 0x34, 0xaa, 0x30, 0x30, 0x03, 0x06, 0x78, 0x17, - 0x42, 0x2e, 0xa3, 0x6f, 0x00, 0x77, 0x2d, 0x60, 0x07, 0x06, 0x30, 0x7f, 0x3f, 0x93, 0x62, 0x06, 0x60, 0x7d, 0xf0, 0xff, 0x00, 0x18, 0x17, 0x70, - 0x56, 0x04, 0xe8, 0x19, 0x07, 0xd0, 0xff, 0x06, 0x1f, 0xaf, 0xd4, 0x6b, 0x65, 0x59, 0xc7, 0x30, 0x03, 0x06, 0x88, 0x17, 0xbe, 0x24, 0xc6, 0x30, - 0x03, 0x06, 0x78, 0x17, 0x07, 0x53, 0x7f, 0xe0, 0x33, 0xff, 0x3b, 0x09, 0x06, 0x1c, 0x9b, 0x11, 0x04, 0x38, 0x04, 0x3e, 0x38, 0x04, 0x2d, 0x60, - 0x07, 0x0e, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x07, 0x05, 0x05, 0xa0, 0x20, 0x01, 0x07, 0x40, 0x06, 0x07, 0x07, 0x07, 0x07, 0xcf, 0x00, 0xe5, - 0x0e, 0xcc, 0x00, 0x00, 0x09, 0x14, 0xb3, 0x02, 0x30, 0xad, 0x30, 0xf3, 0x30, 0xdc, 0x06, 0x88, 0x17, 0x43, 0x8b, 0x2f, 0x17, 0x71, 0x00, 0x75, - 0x2f, 0x1f, 0x6d, 0x27, 0x9d, 0x06, 0x18, 0x19, 0xdc, 0x07, 0xf0, 0x7f, 0x00, 0x18, 0x19, 0x49, 0x28, 0x1b, 0x04, 0x78, 0x15, 0x0f, 0x11, 0x7f, - 0xd1, 0x79, 0x08, 0xd1, 0x91, 0x5a, 0x53, 0x06, 0x78, 0x15, 0x00, 0x00, 0x54, 0x06, 0xcf, 0xb4, 0xd0, 0xf4, 0xbc, 0x06, 0x78, 0x15, 0x0f, 0x13, - 0x7f, 0x1a, 0xa3, 0x28, 0x15, 0x3a, 0x28, 0x1b, 0x3c, 0x04, 0x31, 0x06, 0x48, 0x17, 0x0f, 0xf4, 0xff, 0x8a, 0x10, 0x05, 0xf6, 0x7f, 0x08, 0x06, - 0x06, 0x20, 0x01, 0x08, 0x20, 0x06, 0x07, 0x80, 0x20, 0x05, 0x08, 0x08, 0xb4, 0xea, 0x45, 0xcd, 0x00, 0x00, 0x00, 0x0a, 0x14, 0x4c, 0x00, 0xfb, - 0x30, 0xd9, 0x08, 0x30, 0xeb, 0x30, 0xca, 0x20, 0x03, 0xc9, 0x30, 0xfb, 0x02, 0x30, 0xaa, 0x30, 0xd2, 0x30, 0xae, 0x28, 0x29, 0xb9, 0xa8, 0x05, - 0x68, 0x29, 0x4c, 0x2f, 0xaf, 0x62, 0x2f, 0x21, 0x72, 0x00, 0x74, 0x0a, 0x00, 0x61, 0x00, 0x64, 0x2f, 0xbb, 0x72, 0x2f, 0x35, 0x47, 0xa2, 0x2f, - 0x33, 0x6e, 0x40, 0x15, 0x61, 0x00, 0x6c, 0x2f, 0x45, 0x42, 0xa8, 0x40, 0x21, 0x6e, 0x20, 0x21, 0x72, 0x40, 0x23, 0x20, 0x00, 0x4f, 0x0a, 0x00, - 0x27, 0x00, 0x48, 0x2f, 0xeb, 0x67, 0x4f, 0x5b, 0x6e, 0x37, 0x00, 0x73, 0x0f, 0x00, 0x7f, 0x00, 0x18, 0x51, 0x56, 0x28, 0x53, 0x00, 0xf8, 0x51, - 0x0e, 0xf1, 0x7f, 0x00, 0x65, 0x59, 0x0a, 0x4f, 0xd1, 0x91, 0xaf, 0x65, 0x00, 0x06, 0x5c, 0x9b, 0x51, 0xe3, 0x89, 0x3e, 0x65, 0x20, 0x05, 0x80, - 0x05, 0xd8, 0x23, 0x24, 0xc6, 0x74, 0xc7, 0x34, 0x18, 0xae, 0xa4, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x19, 0x28, 0x20, 0x25, - 0x28, 0x17, 0x33, 0x20, 0x01, 0x38, 0x04, 0x3d, 0x38, 0x04, 0x41, 0x05, 0xe8, 0x1b, 0x10, 0x03, 0x94, 0xff, 0x10, 0x02, 0x56, 0x7f, 0x09, 0x07, - 0x07, 0xa8, 0x20, 0x01, 0x09, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, 0x09, 0xb5, 0x22, 0xe7, 0xb1, 0x28, 0x17, 0x0b, 0x14, 0xed, 0x28, 0x01, 0xfb, - 0x0d, 0x30, 0xe9, 0x30, 0xb4, 0x05, 0x88, 0x09, 0xf8, 0x17, 0x6f, 0x46, 0xd3, 0x5d, 0x4c, 0x28, 0x15, 0x67, 0x40, 0x0b, 0x0e, 0xf0, 0x7f, 0x00, - 0x17, 0xdf, 0x58, 0x01, 0x07, 0xdd, 0x98, 0x10, 0x02, 0x91, 0x7f, 0x56, 0x6e, 0x05, 0xd8, 0x07, 0xff, 0xff, 0x5c, 0xb8, 0xa4, 0x06, 0xc2, 0x7c, - 0xb7, 0xe0, 0xac, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1b, 0x2b, 0x04, 0x3e, 0x28, 0x0b, 0x2d, 0x20, 0x07, 0x30, 0x28, 0x1b, 0x30, 0x0b, 0xc5, - 0x10, 0x06, 0xf4, 0xff, 0x10, 0x05, 0xd6, 0x7f, 0x0a, 0x08, 0x08, 0x20, 0x01, 0x0a, 0x40, 0x06, 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x83, 0xe2, 0x23, - 0xcc, 0x00, 0x00, 0x00, 0x0c, 0x14, 0xde, 0x30, 0xac, 0x30, 0x05, 0xea, 0x30, 0xe3, 0x30, 0xcd, 0x06, 0x68, 0x17, 0x4d, 0x48, 0x0f, 0xba, 0x3f, - 0x95, 0x6c, 0x2f, 0xaf, 0x3f, 0xa3, 0x3e, 0xf9, 0x79, 0x2f, 0xb3, 0x41, 0x88, 0x2f, 0xb1, 0x74, 0x00, 0xe1, 0x4f, 0xc9, 0x69, 0x00, 0x63, 0x82, - 0x2f, 0xcd, 0x20, 0x00, 0x43, 0x00, 0x68, 0x2f, 0xdf, 0x6c, 0xaa, 0x4f, 0xcd, 0x61, 0x03, 0xa0, 0x7f, 0x65, 0x80, 0x7f, 0x20, 0x2f, 0xbb, 0x74, - 0xd1, 0x80, 0x7d, 0x3f, 0x9f, 0x63, 0x40, 0x7f, 0x71, 0x00, 0x75, 0x2f, 0xd5, 0xbd, 0x90, 0x81, 0x69, 0x4f, 0xd1, 0x3f, 0xd3, 0x04, 0x30, 0xff, - 0x00, 0x18, 0x19, 0x49, 0x4f, 0xfb, 0x5a, 0x20, 0x20, 0x85, 0x6e, 0x2f, 0xd5, 0xd1, 0x09, 0x69, 0x2f, 0xad, 0x63, 0xef, 0x21, 0x19, 0x30, 0x9f, - 0x90, 0xb7, 0x6b, 0x41, 0x37, 0x00, 0xff, 0xc7, 0xf0, 0xff, 0x30, 0xe3, 0xdc, 0xd0, 0x47, 0x31, 0x7d, 0x64, 0x60, 0xfb, 0x03, 0xd1, 0x7b, 0x07, - 0x31, 0xff, 0xa6, 0x9e, 0x00, 0xf2, 0x54, 0x26, 0x4f, 0x2d, 0x00, 0x7a, 0x66, 0x02, 0x29, 0x52, 0x57, 0x53, 0x81, 0x67, 0x05, 0xf8, 0x25, 0xc8, - 0x01, 0xb9, 0x00, 0xac, 0x7c, 0xc5, 0x24, 0xb1, 0x06, 0x78, 0x17, 0xf8, 0x00, 0x93, 0x7f, 0x51, 0xf3, 0x33, 0x95, 0x04, 0xb3, 0x8b, 0x93, 0xff, - 0x68, 0x00, 0xe3, 0xe2, 0x63, 0xfd, 0x92, 0xc7, 0x04, 0xf3, 0xfd, 0x00, 0x00, 0x1c, 0x48, 0x0f, 0x30, 0x00, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x4f, - 0x04, 0x3d, 0x22, 0x04, 0x35, 0x28, 0x25, 0x20, 0x00, 0x38, 0x20, 0x03, 0x27, 0x22, 0x04, 0x38, 0x20, 0x15, 0x38, 0x04, 0x39, 0x28, 0x37, 0x3a, - 0xaa, 0x28, 0x35, 0x4f, 0x20, 0x17, 0x10, 0x20, 0x21, 0x42, 0x28, 0x41, 0x40, 0xbc, 0x20, 0x11, 0x42, 0x20, 0x1f, 0x30, 0x17, 0x0b, 0x34, 0xff, - 0x10, 0x0e, 0x90, 0x7f, 0x0b, 0x09, 0x50, 0x09, 0x20, 0x01, 0x0b, 0x40, 0x06, 0x0b, 0x0b, 0x0b, 0x0b, 0x01, 0x35, 0xda, 0x93, 0xcd, 0x00, 0x00, - 0x0d, 0x28, 0x17, 0x1b, 0xa6, 0x30, 0xec, 0x06, 0x48, 0x11, 0x98, 0x17, 0x75, 0x47, 0xe9, 0x0e, 0xf0, 0x7f, 0xb0, 0x00, 0x18, 0x0d, 0x56, 0x68, - 0x0d, 0x10, 0x04, 0xb1, 0x7f, 0x6c, 0x9a, 0x4c, 0x4e, 0x30, 0xb1, 0x83, 0x05, 0xf8, 0x0d, 0xb8, 0x17, 0xb8, 0xc6, 0x08, 0xb8, 0xeb, 0x06, 0x58, - 0x13, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x43, 0x28, 0x15, 0x35, 0x02, 0xe7, 0xdf, 0x10, 0x03, 0x14, 0xff, 0x8a, 0x10, 0x06, 0x56, 0x7f, 0x0c, 0x0a, - 0x0a, 0x20, 0x01, 0x0c, 0x40, 0x06, 0x0c, 0x02, 0x0c, 0x0c, 0x0c, 0xce, 0xe6, 0x0a, 0x28, 0x17, 0x0e, 0x00, 0x14, 0xbf, 0x30, 0xe9, 0x30, 0xd1, - 0x30, 0xab, 0xa2, 0x06, 0x88, 0x19, 0x54, 0x4f, 0x93, 0x61, 0x00, 0x70, 0x2f, 0xff, 0x63, 0xf8, 0x2e, 0x1d, 0x0e, 0xf0, 0x7f, 0x00, 0x18, 0x1d, - 0x04, 0xd8, 0x19, 0x0f, 0x01, 0x7f, 0x58, 0xc9, 0x62, 0x08, 0x15, 0x5e, 0x61, 0x53, 0x06, 0x78, 0x19, 0xc0, 0xd0, 0x7c, 0x06, 0xb7, 0x0c, 0xd3, - 0x74, 0xce, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0x8f, 0x4f, 0xfd, 0x30, 0x04, 0x3f, 0x2f, 0xf9, 0x03, 0x1f, 0xfd, 0x10, 0x03, 0x14, 0xff, - 0x10, 0x05, 0xf6, 0x7f, 0x4a, 0x0d, 0x38, 0x0c, 0x0c, 0x0d, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0d, 0x04, 0x0d, 0xa0, 0xf1, 0x1b, 0xce, 0x00, 0x3f, - 0xff, 0x01, 0x0b, 0x54, 0x0b, 0x20, 0x01, 0x01, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x01, 0x01, 0x4a, 0x02, 0x30, 0x2c, 0x0d, 0x02, 0x20, 0x06, 0x06, - 0x20, 0x05, 0x02, 0x21, 0x02, 0x03, 0x30, 0x14, 0x01, 0x03, 0x03, 0x04, 0x40, 0x05, 0xc2, 0x20, 0x07, 0x30, 0x14, 0x02, 0x04, 0x04, 0x01, 0x40, - 0x05, 0x04, 0x21, 0x04, 0x05, 0x30, 0x14, 0x03, 0x05, 0x05, 0x02, 0x40, 0x05, 0x10, 0x05, 0x05, 0x06, 0x30, 0x14, 0x04, 0x06, 0x06, 0x03, 0x89, - 0x40, 0x05, 0x06, 0x06, 0x07, 0x30, 0x14, 0x05, 0x07, 0x40, 0x06, 0x04, 0x07, 0x07, 0x07, 0x07, 0x08, 0x30, 0x14, 0x06, 0x08, 0xa2, 0x20, 0x06, - 0x07, 0x20, 0x05, 0x08, 0x08, 0x09, 0x30, 0x14, 0x07, 0x51, 0x09, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x14, 0x34, 0x08, 0x0a, - 0x40, 0x06, 0x38, 0xda, 0x0b, 0x30, 0x14, 0x09, 0x0b, 0xf8, 0x40, 0x06, 0x30, 0xaa, 0xf8, 0xef, 0xf0, 0xe7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x60, 0x15, 0x01, 0x11, 0x21, 0x00, 0x00, 0x30, 0x01, 0x15, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x05, 0x03, 0x40, 0xcb, 0x00, 0x00, 0x00, 0x02, 0x15, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, - 0x30, 0xc8, 0x30, 0xea, 0x20, 0x03, 0xfb, 0x30, 0xad, 0x00, 0x30, 0xe3, 0x30, 0xd4, 0x30, 0xbf, 0x30, 0xeb, 0x40, 0x30, 0x05, 0x78, 0x2d, 0x44, - 0x00, 0x69, 0x00, 0x73, 0x00, 0x10, 0x74, 0x00, 0x72, 0x20, 0x07, 0x74, 0x00, 0x6f, 0x00, 0x01, 0x20, 0x00, 0x43, 0x00, 0x61, 0x00, 0x70, 0x40, - 0x0d, 0x16, 0x61, 0x00, 0x6c, 0x05, 0xc0, 0x7f, 0x63, 0x20, 0x87, 0xf0, 0x7f, 0x20, 0x0a, 0x00, 0x64, 0x00, 0x65, 0x20, 0x95, 0x53, 0x20, 0x95, - 0x6e, 0x8d, 0x40, 0x93, 0x20, 0x00, 0x46, 0x40, 0x11, 0x50, 0x17, 0x42, 0x20, 0xb3, 0x46, 0x67, 0x20, 0xb7, 0x74, 0x00, 0xe1, 0x02, 0x49, 0x60, - 0xb0, 0x3f, 0x20, 0xad, 0x21, 0x0d, 0x2e, 0x20, 0xff, 0x2e, 0x05, 0xa9, 0xaa, 0x91, 0x7f, 0x65, 0x21, 0x85, 0xa0, 0x00, 0x31, 0x81, 0x65, 0x0c, - 0xc1, 0xff, 0xe2, 0x6c, 0xe5, 0x54, 0x27, 0x01, 0x59, 0x96, 0x99, 0xfd, 0x90, 0x3a, 0x53, 0x06, 0x3b, 0x21, 0x00, 0x5c, 0xcf, 0x6c, 0xb8, 0x44, - 0xbe, 0x44, 0xc5, 0x00, 0x20, 0x00, 0x18, 0xc2, 0xc4, 0xb3, 0xfc, 0xc8, 0xa3, 0x05, 0xfb, 0xa5, 0x48, 0x23, 0x73, 0x6f, 0x00, 0x66, 0x22, 0xe5, - 0x33, 0x85, 0x51, 0x65, 0x42, 0xed, 0x6c, 0x23, 0x93, 0x6a, 0x00, 0x6b, 0x42, 0x8f, 0xc0, 0xd3, 0x1d, 0x0c, 0x13, 0xff, 0x21, 0x04, 0x42, 0x04, - 0x3e, 0x04, 0x00, 0x3b, 0x04, 0x38, 0x04, 0x47, 0x04, 0x3d, 0x04, 0x00, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x04, 0x00, 0x3a, 0x04, 0x40, - 0x04, 0x43, 0x04, 0x33, 0x04, 0xc0, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x10, 0x0f, 0x05, 0x0f, 0x10, 0x04, 0x01, 0x01, 0x12, 0x10, - 0x1d, 0x20, 0x05, 0x01, 0x01, 0x81, 0x58, 0x17, 0x03, 0x15, 0xaf, 0x30, 0xf3, 0x30, 0x38, 0x1b, 0x10, 0xca, 0x30, 0xde, 0x28, 0x0d, 0xab, 0x30, - 0x0c, 0x77, 0x8a, 0x05, 0xdf, 0xbf, 0x43, 0x00, 0x75, 0x27, 0x6f, 0x64, 0x28, 0x1d, 0x6e, 0xaa, 0x28, 0x0f, 0x6d, 0x28, 0x13, 0x72, 0x27, 0x9f, - 0x61, 0x10, 0x15, 0x80, 0x7f, 0x06, 0x00, 0x66, 0xea, 0x8f, 0xb3, 0x7e, 0x6c, 0x9a, 0x61, 0x30, 0x53, 0x01, 0x05, 0xe2, 0xf9, 0x5f, 0xff, 0xe4, - 0xcf, 0x14, 0xb5, 0x00, 0x98, 0xb0, 0xc8, 0xb9, 0x74, 0xb9, 0x74, 0xce, 0x34, 0x20, 0x00, 0x06, 0x18, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x27, 0xff, - 0x3d, 0x04, 0x41, 0x34, 0x28, 0x17, 0x3d, 0x04, 0x30, 0x04, 0x3c, 0x20, 0x03, 0x58, 0x40, 0x28, 0x15, 0x30, 0x05, 0x28, 0x11, 0x10, 0x17, 0x54, - 0xff, 0x02, 0x0f, 0x0e, 0x82, 0x20, 0x01, 0x02, 0x02, 0x0e, 0x0f, 0x13, 0x20, 0x05, 0x02, 0x08, 0x02, 0x45, 0x03, 0x52, 0x28, 0x17, 0x04, 0x15, - 0xa2, 0xad, 0x28, 0x0f, 0xbd, 0x28, 0x15, 0xb9, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x41, 0x48, 0x0b, 0x6f, 0x7a, 0x2f, 0x75, 0x38, 0x17, 0x73, 0x06, - 0xc0, 0x7f, 0x04, 0xdf, 0x19, 0x09, 0x10, 0xff, 0x0e, 0x30, 0x7f, 0x03, 0x9a, 0x4e, 0x6c, 0x9a, 0x59, 0x5b, 0x06, 0x58, 0x13, 0x4f, 0x2f, 0x00, - 0xc5, 0xc8, 0xb9, 0x8c, 0xc1, 0x98, 0xb0, 0xa4, 0x68, 0xc2, 0x06, 0x38, 0x15, 0x0f, 0x12, 0x7f, 0x10, 0x48, 0x0b, 0x37, 0x04, 0x3e, 0xb8, 0x48, - 0x17, 0x41, 0x05, 0x88, 0x0f, 0x10, 0x07, 0x73, 0xff, 0x0e, 0xf5, 0x7f, 0x03, 0x01, 0x01, 0xa4, 0x20, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x20, - 0x07, 0xfd, 0x44, 0x08, 0xce, 0x00, 0x00, 0x05, 0x28, 0x17, 0xf3, 0x30, 0xc6, 0x00, 0x30, 0xa3, 0x30, 0xaa, 0x30, 0xad, 0x30, 0xa2, 0xa8, 0x06, - 0x28, 0x1b, 0x41, 0x2f, 0xad, 0x74, 0x2f, 0xad, 0x6f, 0x00, 0x71, 0xb0, 0x2f, 0xb9, 0x69, 0x05, 0xaf, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0x89, 0x5b, - 0xd0, 0x63, 0x02, 0x65, 0x59, 0xfa, 0x57, 0x9a, 0x4e, 0x06, 0x58, 0x1b, 0x48, 0x00, 0xc5, 0xf0, 0xd2, 0x24, 0xc6, 0xa4, 0xd0, 0x44, 0x68, 0xc5, - 0x06, 0x78, 0x17, 0x0e, 0xd3, 0x7f, 0x10, 0x28, 0x0f, 0x42, 0x04, 0x38, 0xac, 0x28, 0x17, 0x3a, 0x20, 0x05, 0x4f, 0x06, 0x28, 0x17, 0x10, 0x16, - 0xd4, 0xff, 0x04, 0x02, 0x50, 0x02, 0x20, 0x01, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x01, 0x79, 0x04, 0x4a, 0xca, 0x00, 0x00, 0x06, 0x28, - 0x17, 0x06, 0xe9, 0x30, 0xa6, 0x30, 0xab, 0x06, 0x28, 0x11, 0x7f, 0xaf, 0x72, 0x8c, 0x2f, 0xaf, 0x75, 0x00, 0x63, 0x06, 0x08, 0x11, 0x10, 0x0f, - 0x50, 0x7f, 0x3f, 0x96, 0x0c, 0xb3, 0x52, 0x61, 0x53, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x44, 0xc5, 0x03, 0x7c, 0xb7, 0xb0, 0xc6, 0x74, 0xce, 0x06, - 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x01, 0x10, 0x04, 0x40, 0x04, 0x30, 0x04, 0x43, 0x28, 0x15, 0x62, 0x30, 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, - 0x05, 0x03, 0x03, 0x20, 0x01, 0x05, 0x80, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x0a, 0x05, 0xaf, 0x0a, 0xcd, 0x00, 0x00, 0x07, 0x28, 0x17, 0xc8, - 0x28, 0x19, 0xf3, 0x02, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0xb3, 0x06, 0x28, 0x1d, 0x41, 0x8b, 0x2f, 0xad, 0x6c, 0x00, 0xe1, 0x6f, 0xb5, 0x63, 0x2f, - 0xb7, 0x06, 0x30, 0x7f, 0x6c, 0x61, 0x6f, 0xb5, 0x3f, 0xb3, 0x65, 0x0e, 0x20, 0xff, 0x0e, 0x90, 0x7f, 0x27, 0x59, 0x08, 0x7f, 0x89, 0x0b, 0x6d, - 0x06, 0xb8, 0x17, 0xc0, 0xd2, 0x80, 0x06, 0xb7, 0xf0, 0xd2, 0x54, 0xcf, 0x06, 0x58, 0x19, 0x0e, 0xf2, 0x7f, 0x10, 0x0a, 0x04, 0x42, 0x04, 0x3b, - 0x28, 0x19, 0x3d, 0x20, 0x07, 0x38, 0xb8, 0x28, 0x1d, 0x3e, 0x05, 0xe8, 0x1d, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x06, 0x05, 0x04, 0x01, - 0x04, 0x04, 0x05, 0x06, 0x06, 0x04, 0x05, 0x30, 0x05, 0x00, 0x06, 0x06, 0xcb, 0x07, 0xd0, 0xca, 0x00, 0x00, 0x00, 0x08, 0x15, 0xdc, 0x30, 0xea, - 0x30, 0xfc, 0x30, 0x1a, 0xd0, 0x30, 0xeb, 0x06, 0x28, 0x13, 0x3f, 0xff, 0x42, 0x28, 0x09, 0x6c, 0x0a, 0x00, 0xed, 0x00, 0x76, 0x2f, 0xb5, 0x72, - 0x10, 0x16, 0x20, 0x7f, 0xbb, 0x01, 0x73, 0x29, 0x52, 0xe6, 0x74, 0x14, 0x5c, 0x06, 0x78, 0x19, 0x00, 0xfc, 0xbc, 0xac, 0xb9, 0x14, 0xbc, 0x74, - 0xb9, 0xd5, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x11, 0x28, 0x09, 0x3b, 0x28, 0x11, 0x32, 0x28, 0x1b, 0x62, 0x40, 0x05, 0xe8, 0x13, 0x10, 0x17, - 0x34, 0xff, 0x07, 0x06, 0x05, 0x20, 0x01, 0x07, 0x41, 0x07, 0x50, 0x05, 0x07, 0x07, 0x65, 0x07, 0x4e, 0x28, 0x17, 0x46, 0x09, 0x28, 0x17, 0xe4, - 0x30, 0xab, 0x06, 0x68, 0x13, 0x78, 0x17, 0x79, 0xb0, 0x2f, 0xaf, 0x63, 0x2f, 0x33, 0x10, 0x16, 0x30, 0x7f, 0x5a, 0x53, 0x9a, 0x4e, 0x20, 0x61, - 0x53, 0x06, 0x78, 0x15, 0x00, 0x00, 0xf4, 0xbc, 0x7c, 0x1c, 0xc5, 0x74, 0xce, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x38, 0x17, 0x4f, 0x04, 0x62, - 0x3a, 0x28, 0x15, 0x10, 0x1e, 0x54, 0xff, 0x08, 0x07, 0x06, 0x20, 0x01, 0x08, 0x40, 0x08, 0x50, 0x05, 0x08, 0x08, 0xef, 0x03, 0xd4, 0xcb, 0x00, - 0x00, 0x00, 0x0a, 0x15, 0xab, 0x30, 0xeb, 0x30, 0x14, 0xc0, 0x30, 0xb9, 0x06, 0x88, 0x19, 0x43, 0x2f, 0xa7, 0x6c, 0x00, 0x50, 0x64, 0x2f, 0xad, - 0x73, 0x10, 0x16, 0x40, 0x7f, 0x61, 0x53, 0x14, 0x5c, 0x08, 0xbe, 0x8f, 0xaf, 0x65, 0x06, 0x78, 0x19, 0x7c, 0xce, 0xe4, 0x1a, 0xb2, 0xa4, 0xc2, - 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x11, 0x3b, 0x2c, 0x04, 0x34, 0x28, 0x17, 0x41, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x09, - 0x08, 0x41, 0x07, 0x20, 0x01, 0x09, 0x09, 0x07, 0x08, 0x0e, 0x20, 0x05, 0x00, 0x09, 0x09, 0x9a, 0x03, 0x4c, 0xca, 0x00, 0x00, 0x46, 0x0b, 0x28, - 0x17, 0xb1, 0x30, 0xbf, 0x06, 0x88, 0x15, 0x58, 0x17, 0x71, 0x03, 0x00, 0x75, 0x00, 0x65, 0x00, 0x74, 0x06, 0x4f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, - 0x02, 0x61, 0x53, 0x4b, 0x51, 0x54, 0x58, 0x06, 0x78, 0x15, 0x00, 0x01, 0x00, 0x74, 0xce, 0x00, 0xcf, 0xc0, 0xd0, 0x06, 0xd8, 0x17, 0xc0, 0x0e, - 0xb3, 0x7f, 0x38, 0x17, 0x3a, 0x04, 0x4c, 0x04, 0x35, 0x04, 0x62, 0x42, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x0a, 0x09, 0x08, 0x20, 0x01, 0x0a, - 0x08, 0x0a, 0x08, 0x09, 0x0d, 0x20, 0x05, 0x0a, 0x0a, 0x26, 0x28, 0x01, 0x3b, 0x28, 0x17, 0x0c, 0x28, 0x17, 0xa6, 0x30, 0xab, 0x8c, 0x06, 0xe8, - 0x17, 0x75, 0x00, 0x63, 0x2f, 0xb5, 0x10, 0x16, 0x50, 0x7f, 0x03, 0x80, 0x30, 0x61, 0x53, 0x06, 0x98, 0x15, 0x38, 0x17, 0xb0, 0xc6, 0x74, 0xce, - 0xee, 0x06, 0xd8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x43, 0x28, 0x19, 0x06, 0x38, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0b, 0x34, 0x0b, 0x0a, 0x20, - 0x01, 0x30, 0x05, 0x10, 0x20, 0x05, 0x0b, 0x0b, 0x00, 0xc4, 0x01, 0x8b, 0xc9, 0x00, 0x00, 0x0d, 0x15, 0x04, 0xbb, 0x30, 0xb5, 0x30, 0xeb, 0x06, - 0xc8, 0x17, 0x65, 0x00, 0x50, 0x73, 0x2f, 0xb3, 0x72, 0x10, 0x16, 0x60, 0x7f, 0x5e, 0x58, 0x28, 0x84, 0x20, 0x14, 0x5c, 0x06, 0x98, 0x19, 0x38, - 0xc1, 0xac, 0xc0, 0x74, 0x60, 0xb9, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x21, 0x04, 0x35, 0x04, 0x41, 0xb1, 0x28, 0x1b, 0x40, 0x06, 0x88, 0x17, - 0x10, 0x16, 0xd4, 0xff, 0x0c, 0x0c, 0x0b, 0x20, 0x01, 0xa0, 0x30, 0x05, 0x1c, 0x20, 0x05, 0x0c, 0x0c, 0x73, 0x07, 0xea, 0x00, 0xcb, 0x00, 0x00, - 0x0e, 0x15, 0xc1, 0x30, 0xe7, 0x22, 0x30, 0xb3, 0x06, 0xc8, 0x17, 0x68, 0x00, 0x6f, 0x2f, 0xaf, 0xf3, 0x84, 0x10, 0x16, 0x60, 0x7f, 0x54, 0x4e, - 0xd1, 0x79, 0x06, 0x98, 0x15, 0x00, 0x00, 0x0c, 0x08, 0xcd, 0x54, 0xcf, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x27, 0x04, 0x18, 0x3e, 0x04, 0x3a, - 0x20, 0x03, 0x10, 0x1e, 0x74, 0xff, 0x0d, 0x0d, 0x0c, 0xd8, 0x20, 0x01, 0x30, 0x05, 0x21, 0x20, 0x05, 0x20, 0x0d, 0x04, 0x7d, 0xc9, 0x00, 0x00, - 0x00, 0x0f, 0x15, 0xb3, 0x30, 0xeb, 0x30, 0x14, 0xc9, 0x30, 0xd0, 0x06, 0x88, 0x19, 0x43, 0x28, 0x11, 0x72, 0x00, 0x58, 0x64, 0x28, 0x1b, 0x62, - 0x2f, 0xb5, 0x10, 0x16, 0x10, 0x7f, 0xd1, 0x79, 0x14, 0x04, 0x5c, 0x1a, 0x59, 0xe6, 0x74, 0x06, 0x78, 0x1b, 0x54, 0xcf, 0x03, 0x74, 0xb9, 0xc4, - 0xb3, 0x14, 0xbc, 0x06, 0x78, 0x1b, 0x07, 0x13, 0x7f, 0x54, 0x6f, 0x63, 0xff, 0x76, 0x06, 0x43, 0xff, 0x1a, 0x28, 0x17, 0x40, 0x04, 0x46, 0x34, - 0x28, 0x1d, 0x31, 0x04, 0x30, 0x06, 0x28, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x34, 0x0e, 0x0d, 0x20, 0x01, 0x30, 0x05, 0x12, 0x20, 0x05, 0x0e, - 0x0e, 0x00, 0x3a, 0x06, 0x09, 0xca, 0x00, 0x00, 0x10, 0x15, 0x05, 0xb0, 0x30, 0xa2, 0x30, 0xd3, 0x20, 0x03, 0xec, 0x06, 0x68, 0x19, 0x11, 0x47, - 0x00, 0x75, 0x28, 0x0f, 0x76, 0x00, 0x69, 0x28, 0x15, 0x10, 0x72, 0x00, 0x65, 0x10, 0x16, 0x00, 0x7f, 0xdc, 0x74, 0xf4, 0x7e, 0x08, 0x9a, 0x4e, - 0xf7, 0x96, 0x06, 0x78, 0x17, 0xfc, 0xac, 0x44, 0x06, 0xbe, 0x44, 0xc5, 0x08, 0xb8, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x13, 0x22, 0x04, 0x43, - 0x28, 0x0f, 0x32, 0x04, 0x38, 0x28, 0x15, 0x40, 0x30, 0x04, 0x35, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0f, 0x12, 0x11, 0x11, 0x01, 0x11, - 0x12, 0x0f, 0x0f, 0x11, 0x12, 0x0a, 0x20, 0x05, 0x00, 0x0f, 0x0f, 0xd3, 0x01, 0x58, 0xcc, 0x00, 0x00, 0x46, 0x11, 0x48, 0x17, 0xa4, 0x30, 0xcb, - 0x28, 0x1d, 0x06, 0xb8, 0x17, 0x69, 0x0c, 0x00, 0x6e, 0x00, 0xed, 0x06, 0x4f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0x02, 0x0a, 0x4f, 0x3c, - 0x5c, 0x9a, 0x4e, 0x06, 0x98, 0x17, 0x74, 0x07, 0xc7, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0xd8, 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x01, 0x38, 0x04, - 0x3d, 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x08, 0x15, 0x84, 0x10, 0x17, 0x14, 0xff, 0x10, 0x11, 0x10, 0x10, 0x30, 0x03, 0x0f, 0x11, 0x40, 0x0b, 0x30, - 0x09, 0x10, 0xbf, 0x02, 0xb3, 0xcf, 0x00, 0x00, 0x00, 0x12, 0x15, 0xa6, 0x30, 0xa3, 0x30, 0xe9, 0xd1, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x48, 0x2f, - 0xaf, 0x69, 0x00, 0x6c, 0x06, 0x48, 0x13, 0x81, 0x10, 0x0f, 0x30, 0x7f, 0x4c, 0x4e, 0x0a, 0x4f, 0xc9, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, - 0xb0, 0xc6, 0x7c, 0xc7, 0x7c, 0xb7, 0xd6, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x23, 0x28, 0x13, 0x3b, 0x28, 0x19, 0x10, 0x1e, 0x74, 0xff, 0x11, - 0x00, 0x13, 0x12, 0x12, 0x12, 0x13, 0x11, 0x11, 0x13, 0x20, 0x13, 0x20, 0x20, 0x05, 0x11, 0x11, 0x15, 0x02, 0x6f, 0x40, 0xca, 0x2b, 0x2d, 0x15, - 0xb0, 0x30, 0xa2, 0x30, 0xd2, 0x2a, 0x30, 0xfc, 0x06, 0x88, 0x1b, 0x4c, 0x2f, 0xad, 0x20, 0x6f, 0xb5, 0x6a, 0xb0, 0x2f, 0xb7, 0x72, 0x05, 0xef, - 0xb5, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0x0c, 0x5e, 0x81, 0x06, 0xb8, 0x17, 0x7c, 0xb7, 0xfc, 0xac, 0x88, 0xd7, 0x06, 0x98, 0x19, 0xc5, 0x06, - 0x93, 0x79, 0x07, 0x53, 0xff, 0x13, 0x04, 0x43, 0x28, 0x15, 0x45, 0x28, 0x1d, 0x60, 0x40, 0x06, 0x48, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x14, - 0x14, 0x13, 0x13, 0x02, 0x14, 0x12, 0x12, 0x10, 0x14, 0x0c, 0x20, 0x05, 0x12, 0x00, 0x12, 0x35, 0x08, 0x28, 0xcc, 0x00, 0x00, 0x14, 0x00, 0x15, - 0xde, 0x30, 0xb0, 0x30, 0xc0, 0x30, 0xec, 0xa8, 0x28, 0x19, 0xca, 0x06, 0x48, 0x19, 0x4d, 0x2f, 0xa9, 0x67, 0x00, 0x64, 0x83, 0x2f, 0xaf, 0x6c, - 0x00, 0x65, 0x00, 0x6e, 0x06, 0x0f, 0xb7, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x6c, 0x9a, 0x3c, 0x68, 0xbe, 0x8f, 0xf7, 0x96, 0x20, 0xa3, 0x90, 0x06, - 0x58, 0x1b, 0xc8, 0xb9, 0xf8, 0xad, 0xec, 0x06, 0xb2, 0x08, 0xb8, 0x98, 0xb0, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1c, 0x88, 0x28, 0x15, 0x33, - 0x04, 0x34, 0x28, 0x1b, 0x3b, 0x04, 0x35, 0x30, 0x04, 0x3d, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x13, 0x15, 0x15, 0x14, 0x28, 0x14, 0x15, - 0x28, 0x1a, 0x15, 0x30, 0x05, 0x13, 0x13, 0xff, 0x00, 0x07, 0x3c, 0xcb, 0x00, 0x00, 0x15, 0x15, 0xe1, 0x31, 0x30, 0xbf, 0x06, 0x48, 0x0f, 0x98, - 0x17, 0x65, 0x00, 0x74, 0x06, 0x4c, 0xa9, 0x86, 0x10, 0x0f, 0x50, 0x7f, 0x85, 0x68, 0x54, 0x58, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x54, 0x1a, 0xba, - 0xc0, 0xd0, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x1c, 0x28, 0x0d, 0x42, 0xc0, 0x06, 0x08, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x14, 0x16, 0x16, 0x15, - 0x15, 0x16, 0xa0, 0x28, 0x1a, 0x16, 0x30, 0x05, 0x14, 0x14, 0xf4, 0x02, 0xa4, 0x80, 0x28, 0x17, 0x16, 0x15, 0xca, 0x30, 0xea, 0x30, 0xfc, 0x0a, - 0x30, 0xcb, 0x30, 0xe7, 0x06, 0x68, 0x1d, 0x4e, 0x2f, 0xaf, 0x72, 0x03, 0x00, 0x69, 0x00, 0xf1, 0x00, 0x6f, 0x06, 0x48, 0x9c, 0x10, 0x0e, 0xf0, - 0x7f, 0x00, 0xb3, 0x7e, 0xcc, 0x91, 0x3c, 0x5c, 0x65, 0x59, 0x81, 0x06, 0x78, 0x1b, 0x98, 0xb0, 0xac, 0xb9, 0xe8, 0xb1, 0x06, 0x98, 0x19, 0xa0, - 0x0e, 0xf3, 0x7f, 0x1d, 0x28, 0x13, 0x40, 0x04, 0x38, 0x04, 0x3d, 0x0c, 0x04, 0x4c, 0x04, 0x3e, 0x06, 0x28, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x15, - 0x17, 0x0a, 0x17, 0x16, 0x16, 0x17, 0x28, 0x1a, 0x17, 0x30, 0x05, 0x15, 0x00, 0x15, 0xdc, 0x00, 0x0c, 0xc9, 0x00, 0x00, 0x17, 0x00, 0x15, 0xce, - 0x30, 0xeb, 0x30, 0xc6, 0x30, 0xfb, 0x20, 0x30, 0xc7, 0x20, 0x03, 0xb5, 0x30, 0xf3, 0x30, 0xbf, 0xb5, 0x20, 0x03, 0xc7, 0x20, 0x13, 0x05, 0x78, - 0x25, 0x4e, 0x28, 0x0f, 0x72, 0x2f, 0xb1, 0x05, 0x65, 0x00, 0x20, 0x00, 0x64, 0x40, 0x05, 0x53, 0x2f, 0xbd, 0x54, 0x6e, 0x4f, 0xc3, 0x6e, 0x40, - 0x11, 0x72, 0x10, 0x14, 0xc0, 0x7f, 0x17, 0x53, 0x02, 0x51, 0x68, 0x66, 0x57, 0xb7, 0x5f, 0x06, 0x78, 0x17, 0x78, 0x00, 0xb1, 0x74, 0xb9, 0x4c, - 0xd1, 0x70, 0xb3, 0xb0, 0x01, 0xc0, 0xc4, 0xd0, 0x70, 0xb3, 0x74, 0xb9, 0x05, 0xf8, 0x21, 0xa0, 0x0e, 0xf3, 0x7f, 0x1d, 0x28, 0x0d, 0x40, 0x04, - 0x42, 0x04, 0x35, 0x0a, 0x04, 0x2d, 0x00, 0x34, 0x40, 0x05, 0x21, 0x28, 0x29, 0x3d, 0xec, 0x20, 0x11, 0x30, 0x05, 0x30, 0x11, 0x40, 0x04, 0xc8, - 0x2d, 0x10, 0x16, 0xf4, 0xff, 0x16, 0x18, 0x0a, 0x18, 0x17, 0x17, 0x18, 0x28, 0x1a, 0x18, 0x30, 0x05, 0x16, 0x00, 0x16, 0x9b, 0x05, 0x71, 0xcc, - 0x00, 0x00, 0x18, 0x00, 0x15, 0xd7, 0x30, 0xc8, 0x30, 0xa5, 0x30, 0xde, 0x0c, 0x30, 0xa4, 0x30, 0xaa, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x50, 0x00, - 0x45, 0x75, 0x28, 0x15, 0x75, 0x00, 0x6d, 0x2f, 0xb7, 0x79, 0x06, 0x2f, 0xb3, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x6e, 0x66, 0xfe, 0x56, 0x6c, 0x9a, - 0xa6, 0x40, 0x7e, 0x06, 0x88, 0x17, 0xd4, 0x2c, 0xd2, 0xc8, 0xb9, 0x94, 0x62, 0xc6, 0x05, 0xf8, 0x0f, 0x0f, 0x73, 0x7f, 0x1f, 0x04, 0x43, 0x28, - 0x15, 0x43, 0x2c, 0x04, 0x3c, 0x28, 0x0d, 0x39, 0x28, 0x23, 0x10, 0x1d, 0xf4, 0xff, 0x17, 0x19, 0x0a, 0x19, 0x18, 0x18, 0x19, 0x28, 0x1a, 0x19, - 0x30, 0x05, 0x17, 0x00, 0x17, 0xd1, 0x00, 0x7f, 0xc9, 0x00, 0x00, 0x19, 0x00, 0x15, 0xad, 0x30, 0xf3, 0x30, 0xc7, 0x30, 0xa3, 0x8a, 0x06, 0x68, - 0x15, 0x00, 0x00, 0x51, 0x28, 0x17, 0x69, 0x4f, 0x99, 0xed, 0xc0, 0x06, 0x28, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0xd1, 0x91, 0xea, 0x8f, 0x65, 0x59, - 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0xa8, 0xd0, 0x14, 0xb5, 0x24, 0xc0, 0x06, 0x88, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x38, 0x04, 0x3d, 0x04, - 0x70, 0x34, 0x20, 0x05, 0x06, 0x18, 0x13, 0x10, 0x17, 0x34, 0xff, 0x18, 0x1a, 0x1a, 0x19, 0x24, 0x19, 0x1a, 0x28, 0x1a, 0x1a, 0x11, 0x20, 0x05, - 0x18, 0x18, 0x08, 0x39, 0x03, 0x2f, 0xca, 0x23, 0x15, 0x15, 0xea, 0x30, 0x01, 0xb5, 0x30, 0xe9, 0x30, 0xeb, 0x30, 0xc0, 0x06, 0x68, 0x17, 0x55, - 0x52, 0x28, 0x15, 0x73, 0x2f, 0xab, 0x72, 0x2f, 0xaf, 0x6c, 0x28, 0x1d, 0x40, 0x61, 0x10, 0x15, 0xe0, 0x7f, 0x29, 0x52, 0x28, 0x84, 0xc9, 0x62, - 0x08, 0x14, 0x5c, 0xbe, 0x8f, 0x06, 0x58, 0x1b, 0xac, 0xb9, 0xac, 0x06, 0xc0, 0x84, 0xb7, 0xe4, 0xb2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x20, - 0x82, 0x28, 0x17, 0x41, 0x04, 0x30, 0x04, 0x40, 0x20, 0x03, 0x3b, 0x2c, 0x04, 0x4c, 0x28, 0x21, 0x30, 0x05, 0xc8, 0x1f, 0x10, 0x16, 0xf4, 0xff, - 0x19, 0x1b, 0x09, 0x1b, 0x1a, 0x1a, 0x1b, 0x28, 0x1a, 0x1b, 0x19, 0x20, 0x05, 0x04, 0x19, 0x19, 0x6c, 0x03, 0x2c, 0x28, 0x17, 0x1b, 0x15, 0x01, - 0xb5, 0x30, 0xf3, 0x30, 0xfb, 0x30, 0xa2, 0x20, 0x05, 0x05, 0xc9, 0x30, 0xec, 0x30, 0xb9, 0x20, 0x0b, 0xa4, 0x20, 0x0f, 0x01, 0xd7, 0x30, 0xed, - 0x30, 0xd3, 0x30, 0xc7, 0x20, 0x1b, 0x68, 0xb7, 0x20, 0x1b, 0x04, 0xb8, 0x31, 0x41, 0x28, 0x11, 0x63, 0x00, 0x68, 0xa8, 0x2f, 0xb3, 0x70, 0x2f, - 0xb7, 0xe9, 0x28, 0x1b, 0x61, 0x00, 0x67, 0xaa, 0x2f, 0xb9, 0x20, 0x2f, 0xc1, 0x65, 0x20, 0x05, 0x53, 0x28, 0x33, 0x6e, 0xa8, 0x20, 0x0d, 0x41, - 0x4f, 0xd3, 0x72, 0x20, 0x21, 0x73, 0x00, 0x2c, 0xa3, 0x20, 0x1d, 0x50, 0x28, 0x49, 0x6f, 0x00, 0x76, 0x2f, 0xeb, 0x30, 0x27, 0x51, 0x6e, 0x20, - 0x43, 0x69, 0x28, 0x5d, 0x20, 0x00, 0x79, 0x80, 0x33, 0x5b, 0x74, 0x40, 0x0f, 0x43, 0x28, 0x73, 0x30, 0x09, 0x6c, 0x4f, 0x95, 0x00, 0x18, 0x75, - 0x5b, 0xce, 0x28, 0x8d, 0x65, 0x28, 0x99, 0x02, 0x70, 0x6f, 0x65, 0x20, 0x67, 0x00, 0xb0, 0x71, 0x6f, 0x65, 0x00, 0xef, 0xff, 0x00, 0x30, 0xdf, - 0x20, 0x2f, 0xc3, 0x3f, 0xc1, 0x00, 0x70, 0xe5, 0x03, 0xbf, 0xd6, 0xf0, 0x00, 0x50, 0x7f, 0x31, 0x79, 0x05, 0x10, 0x7b, 0x07, 0x31, 0xff, 0x23, - 0x57, 0x89, 0x5b, 0x00, 0xb7, 0x5f, 0xc8, 0x70, 0xaf, 0x65, 0x2d, 0x00, 0x00, 0x6e, 0x66, 0x57, 0x7f, 0xf4, 0x7e, 0x7b, 0x76, 0x08, 0x7f, 0x89, - 0x9a, 0x4e, 0x05, 0x78, 0x25, 0xb0, 0xc0, 0x48, 0x00, 0xc5, 0xdc, 0xb4, 0x08, 0xb8, 0xa4, 0xc2, 0x20, 0x00, 0x00, 0x74, 0xc7, 0x20, 0x00, 0x04, - 0xd5, 0x5c, 0x00, 0xb8, 0x44, 0xbe, 0x74, 0xb3, 0xdc, 0xc2, 0x44, 0x7d, 0xc5, 0x05, 0x38, 0x2b, 0x00, 0x71, 0xff, 0x33, 0x73, 0x05, 0x32, 0x01, - 0x33, 0xff, 0x71, 0x4f, 0x33, 0x44, 0x70, 0x06, 0x23, 0xfd, 0x00, 0x00, 0x21, 0x28, 0x13, 0x3d, 0x04, 0x15, 0x2d, 0x00, 0x10, 0x20, 0x05, 0x34, - 0x28, 0x1d, 0x35, 0x28, 0x25, 0x14, 0x2d, 0x00, 0x38, 0x20, 0x11, 0x1f, 0x28, 0x2b, 0x3e, 0x04, 0x51, 0x32, 0x28, 0x37, 0x34, 0x20, 0x15, 0x3d, - 0x04, 0x46, 0x28, 0x41, 0x70, 0x4f, 0x04, 0x08, 0x33, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x04, 0x13, 0x1b, 0x24, 0x1b, 0x04, 0x28, - 0x1a, 0x04, 0x1a, 0x20, 0x05, 0x1a, 0x1a, 0x01, 0xf2, 0x08, 0xe7, 0xc5, 0x00, 0x00, 0x1c, 0x48, 0x17, 0x47, 0xbf, 0x28, 0x1b, 0xc7, 0x30, 0xeb, - 0x04, 0xc7, 0xff, 0x00, 0xd7, 0x17, 0x37, 0xc3, 0xb0, 0x37, 0xf7, 0x65, 0x2f, 0xb7, 0x10, 0x15, 0xd0, 0x7f, 0x51, 0x68, 0x66, 0x57, 0x30, 0xb7, - 0x5f, 0x05, 0x78, 0x05, 0x00, 0x38, 0x17, 0xc4, 0xd0, 0x70, 0xb3, 0x3b, 0x74, 0xb9, 0x05, 0x38, 0x03, 0x10, 0x00, 0x33, 0x7f, 0x58, 0x17, 0x42, - 0x48, 0x1d, 0x37, 0xff, 0x62, 0x40, 0x04, 0x07, 0xf9, 0x10, 0x18, 0xd4, 0xff, 0x1b, 0x1c, 0x1c, 0x20, 0x01, 0x1b, 0xa0, 0x20, 0x06, 0x1b, 0x20, - 0x05, 0x1b, 0x1b, 0x11, 0x05, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x1d, 0x15, 0xb9, 0x30, 0xaf, 0x35, 0x30, 0xec, 0x06, 0x48, 0x11, 0x7f, 0x2f, 0x75, - 0x2f, 0xeb, 0x72, 0x01, 0x0f, 0x57, 0x81, 0x10, 0x14, 0x70, 0x7f, 0xcf, 0x82, 0x4b, 0x51, 0xf7, 0x96, 0x06, 0x98, 0x17, 0x03, 0x18, 0xc2, 0x6c, - 0xd0, 0x08, 0xb8, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x05, 0x21, 0x04, 0x43, 0x04, 0x3a, 0x28, 0x0d, 0x35, 0x05, 0xe8, 0x0f, 0x8a, 0x10, 0x17, - 0x74, 0xff, 0x1c, 0x1d, 0x1d, 0x20, 0x01, 0x1c, 0x20, 0x06, 0x1e, 0x80, 0x20, 0x05, 0x1c, 0x1c, 0x9d, 0x06, 0x63, 0xca, 0x00, 0x00, 0x00, 0x1e, - 0x15, 0xc8, 0x30, 0xea, 0x30, 0xde, 0x80, 0x06, 0xa8, 0x17, 0x54, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x69, 0x30, 0x00, 0x6d, 0x2f, 0xb7, 0x10, 0x16, - 0x30, 0x7f, 0x58, 0x62, 0x29, 0x52, 0x20, 0x6c, 0x9a, 0x06, 0x98, 0x17, 0xa8, 0xd1, 0xac, 0xb9, 0xc8, 0x60, 0xb9, 0x06, 0x98, 0x17, 0x0e, 0xf3, - 0x7f, 0x22, 0x04, 0x3e, 0x04, 0x3b, 0x03, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x30, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x1d, 0x1e, 0x1e, - 0x20, 0x01, 0x28, 0x15, 0x1e, 0x1f, 0x20, 0x05, 0x04, 0x1d, 0x1d, 0x28, 0x03, 0x81, 0x28, 0x17, 0x1f, 0x15, 0x00, 0xd0, 0x30, 0xb8, 0x30, 0xa7, - 0x30, 0xfb, 0x30, 0x11, 0xc7, 0x30, 0xeb, 0x20, 0x05, 0xab, 0x30, 0xa6, 0x20, 0x03, 0xa8, 0x05, 0xb8, 0x25, 0x56, 0x28, 0x0f, 0x6c, 0x28, 0x19, - 0x65, 0x00, 0x20, 0x2b, 0x00, 0x64, 0x2f, 0xb5, 0x6c, 0x20, 0x07, 0x43, 0x28, 0x23, 0x3f, 0xc5, 0xc0, 0x05, 0x38, 0x29, 0x10, 0x0e, 0xf0, 0x7f, - 0x03, 0x80, 0x61, 0x53, 0x71, 0x5c, 0x20, 0x37, 0x8c, 0x06, 0x78, 0x19, 0x14, 0xbc, 0x08, 0xc6, 0x78, 0x01, 0xb3, 0x74, 0xce, 0xb0, 0xc6, 0x74, - 0xce, 0x06, 0x38, 0x1d, 0xa0, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x0f, 0x3b, 0x04, 0x4c, 0x04, 0x35, 0x0c, 0x04, 0x2d, 0x00, 0x34, 0x20, 0x05, 0x30, - 0x0b, 0x2d, 0x00, 0x46, 0x1a, 0x28, 0x25, 0x43, 0x04, 0x3a, 0x05, 0x28, 0x2b, 0x10, 0x16, 0xf4, 0xff, 0x1e, 0x32, 0x1f, 0x1f, 0x20, 0x01, 0x28, - 0x15, 0x1f, 0x07, 0x20, 0x05, 0x1e, 0x00, 0x1e, 0x71, 0x02, 0x96, 0xc9, 0x00, 0x00, 0x20, 0x83, 0x28, 0x17, 0xa6, 0x30, 0xda, 0x30, 0xb9, 0x05, - 0xc8, 0x0b, 0xf8, 0x17, 0x01, 0x75, 0x00, 0x70, 0x00, 0xe9, 0x00, 0x73, 0x10, 0x16, 0x40, 0x7f, 0x03, 0x83, 0x6c, 0x69, 0x4f, 0xaf, 0x65, 0x06, - 0x78, 0x15, 0x38, 0x17, 0x03, 0xb0, 0xc6, 0x98, 0xd3, 0xa4, 0xc2, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x8b, 0x38, 0x17, 0x43, 0x04, 0x3f, 0x28, - 0x17, 0x41, 0x05, 0x08, 0x03, 0x10, 0x18, 0x34, 0xff, 0x15, 0x1f, 0x20, 0x20, 0x20, 0x01, 0x1f, 0x20, 0x06, 0x08, 0x20, 0x05, 0x00, 0x1f, 0x1f, - 0xda, 0x00, 0x1a, 0xce, 0x00, 0x00, 0x00, 0x21, 0x15, 0xd3, 0x30, 0xc1, 0x30, 0xe3, 0x30, 0x55, 0xc0, 0x06, 0xa8, 0x17, 0x69, 0x2f, 0x99, 0x68, - 0x2f, 0xb5, 0x64, 0x05, 0x4f, 0x9f, 0x81, 0x10, 0x0f, 0xf0, 0x7f, 0xf4, 0x7e, 0xe5, 0x67, 0xbe, 0x8f, 0x06, 0x98, 0x17, 0x03, 0x44, 0xbe, 0x28, - 0xcc, 0xe4, 0xb2, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x05, 0x12, 0x04, 0x38, 0x04, 0x47, 0x28, 0x1b, 0x34, 0x28, 0x1f, 0x8a, 0x10, 0x1e, 0x34, - 0xff, 0x20, 0x21, 0x21, 0x20, 0x01, 0x20, 0x20, 0x06, 0x09, 0x80, 0x20, 0x05, 0x20, 0x20, 0x66, 0x04, 0x05, 0xd0, 0x00, 0x00, 0x00, 0x22, 0x15, - 0xab, 0x30, 0xb5, 0x30, 0xca, 0x2a, 0x30, 0xec, 0x06, 0x88, 0x17, 0x43, 0x2f, 0xaf, 0x73, 0x2f, 0xb3, 0x6e, 0x88, 0x2f, 0xb7, 0x72, 0x00, 0x65, - 0x10, 0x16, 0x00, 0x7f, 0x61, 0x53, 0x28, 0x04, 0x84, 0xb3, 0x7e, 0xf7, 0x96, 0x06, 0x78, 0x19, 0x74, 0xce, 0x03, 0xac, 0xc0, 0x98, 0xb0, 0x08, - 0xb8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x54, 0x1a, 0x28, 0x13, 0x41, 0x28, 0x17, 0x3d, 0x28, 0x1b, 0x40, 0x04, 0x63, 0x35, 0x06, 0x08, 0x1b, - 0x10, 0x16, 0xf4, 0xff, 0x21, 0x0a, 0x09, 0x20, 0x01, 0x28, 0x15, 0x20, 0x0a, 0x0f, 0x20, 0x05, 0x21, 0x21, 0xcc, 0x03, 0x86, 0x40, 0xcc, 0x00, - 0x3f, 0xff, 0x01, 0x10, 0x0f, 0x05, 0x0f, 0x10, 0x04, 0x01, 0x01, 0x12, 0x10, 0x1d, 0x20, 0x05, 0x01, 0x01, 0x10, 0x02, 0x0f, 0x0e, 0x20, 0x01, - 0x02, 0x02, 0x0e, 0x0f, 0x44, 0x13, 0x20, 0x05, 0x02, 0x02, 0x03, 0x30, 0x14, 0x01, 0x03, 0x82, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, - 0x14, 0x02, 0x41, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x30, 0x14, 0x20, 0x03, 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x06, 0x42, - 0x05, 0x30, 0x14, 0x06, 0x06, 0x04, 0x05, 0x30, 0x05, 0x06, 0x11, 0x06, 0x07, 0x06, 0x20, 0x12, 0x06, 0x07, 0x07, 0x50, 0x05, 0x08, 0x07, 0x07, - 0x08, 0x07, 0x20, 0x12, 0x07, 0x08, 0x08, 0x84, 0x50, 0x05, 0x08, 0x08, 0x09, 0x08, 0x20, 0x12, 0x08, 0x09, 0x0b, 0x09, 0x07, 0x08, 0x0e, 0x20, - 0x05, 0x09, 0x20, 0xb4, 0x20, 0x12, 0x02, 0x09, 0x0a, 0x0a, 0x08, 0x09, 0x0d, 0x20, 0x05, 0x0a, 0x0d, 0x0a, 0x0b, 0x0b, 0x0a, 0x20, 0x01, 0x30, - 0x05, 0x10, 0x20, 0x05, 0x06, 0x0b, 0x0b, 0x0c, 0x0c, 0x0b, 0x20, 0x01, 0x30, 0x05, 0x1c, 0x83, 0x20, 0x05, 0x0c, 0x0c, 0x0d, 0x0d, 0x0c, 0x20, - 0x01, 0x30, 0x05, 0x41, 0x21, 0x20, 0x05, 0x0d, 0x0d, 0x0e, 0x0e, 0x0d, 0x20, 0x01, 0xa0, 0x30, 0x05, 0x12, 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x12, - 0x11, 0x00, 0x11, 0x11, 0x12, 0x0f, 0x0f, 0x11, 0x12, 0x0a, 0x81, 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x11, 0x10, 0x10, 0x30, 0x03, 0x10, 0x0f, 0x11, - 0x0b, 0x30, 0x09, 0x10, 0x11, 0x13, 0x12, 0x00, 0x12, 0x12, 0x13, 0x11, 0x11, 0x13, 0x13, 0x20, 0xc0, 0x20, 0x05, 0x20, 0x2a, 0x14, 0x14, 0x13, - 0x13, 0x14, 0x12, 0x0c, 0x12, 0x10, 0x14, 0x0c, 0x20, 0x05, 0x20, 0x1a, 0x15, 0x15, 0x16, 0x14, 0x14, 0x15, 0x20, 0x12, 0x15, 0x30, 0x05, 0x20, - 0x1a, 0x16, 0x0b, 0x16, 0x15, 0x15, 0x16, 0x20, 0x12, 0x16, 0x30, 0x05, 0x20, 0x1a, 0x05, 0x17, 0x17, 0x16, 0x16, 0x17, 0x20, 0x12, 0x17, 0x30, - 0x05, 0x82, 0x20, 0x1a, 0x18, 0x18, 0x17, 0x17, 0x18, 0x20, 0x12, 0x18, 0xc1, 0x30, 0x05, 0x20, 0x1a, 0x19, 0x19, 0x18, 0x18, 0x19, 0x20, 0x12, - 0x60, 0x19, 0x30, 0x05, 0x20, 0x1a, 0x1a, 0x1a, 0x19, 0x19, 0x1a, 0x98, 0x20, 0x12, 0x1a, 0x11, 0x20, 0x05, 0x20, 0x1a, 0x1b, 0x1b, 0x1a, 0x26, - 0x1a, 0x1b, 0x20, 0x12, 0x1b, 0x19, 0x20, 0x05, 0x20, 0x1a, 0x04, 0x09, 0x13, 0x1b, 0x1b, 0x04, 0x20, 0x12, 0x04, 0x1a, 0x20, 0x05, 0x95, 0x20, - 0x1a, 0x1c, 0x1c, 0x20, 0x01, 0x1b, 0x20, 0x06, 0x1b, 0x20, 0x05, 0x95, 0x20, 0x07, 0x1d, 0x1d, 0x20, 0x01, 0x1c, 0x20, 0x06, 0x1e, 0x20, 0x05, - 0x99, 0x20, 0x07, 0x1e, 0x1e, 0x20, 0x01, 0x20, 0x0d, 0x1e, 0x1f, 0x20, 0x05, 0x99, 0x20, 0x15, 0x1f, 0x1f, 0x20, 0x01, 0x20, 0x0d, 0x1f, 0x07, - 0x20, 0x05, 0xcb, 0x20, 0x15, 0x3a, 0x14, 0x20, 0x1f, 0x20, 0x06, 0x08, 0x20, 0x05, 0x20, 0x07, 0xe0, 0xea, 0x2f, 0xf2, 0x27, 0x7f, 0xff, 0x00, - 0x11, 0x4c, 0x41, 0x00, 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0x16, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x10, 0x07, 0x36, 0xc4, 0x00, 0x00, 0x00, 0x02, 0x16, 0xb5, 0x30, 0xf3, 0x30, 0xfb, 0x01, 0x30, 0xdb, 0x30, 0xbb, 0x30, 0xde, 0x5d, 0x06, - 0x38, 0x21, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x01, 0x4a, 0x00, 0x6f, 0x00, 0x73, 0x00, 0xe9, 0x10, 0x16, 0x00, 0x7f, 0x00, - 0x23, 0x57, 0x55, 0x4f, 0x5e, 0x58, 0x01, 0x77, 0x80, 0x06, 0x7b, 0x1d, 0xb0, 0xc0, 0x38, 0xd6, 0x38, 0xc1, 0x20, 0x18, 0x00, 0xfc, 0xc8, 0x06, - 0x5b, 0x9f, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x00, 0x04, 0x3d, 0x04, 0x2d, 0x00, 0x25, 0x04, 0x3e, 0x04, 0x04, 0x41, 0x04, 0x35, 0x04, 0x10, - 0x1d, 0xf4, 0xff, 0x01, 0x07, 0x54, 0x07, 0x20, 0x01, 0x01, 0x20, 0x06, 0x06, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, 0x17, 0x03, 0x16, 0xa2, 0x30, - 0xe9, 0x30, 0xd5, 0x31, 0x30, 0xa8, 0x20, 0x05, 0x06, 0x58, 0x17, 0x41, 0x00, 0x6c, 0x28, 0x19, 0x06, 0x6a, 0x00, 0x75, 0x00, 0x65, 0x40, 0x09, - 0x10, 0x15, 0xf0, 0x7f, 0x3f, 0x00, 0x96, 0xc9, 0x62, 0xe1, 0x80, 0xc3, 0x57, 0xc9, 0x40, 0x62, 0x06, 0x58, 0x1b, 0x4c, 0xc5, 0x7c, 0xb7, 0xc4, - 0xd6, 0x71, 0xd8, 0x20, 0x05, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x3b, 0x28, 0x19, 0x06, 0x45, 0x04, 0x43, 0x04, 0x4d, 0x40, 0x09, - 0x10, 0x1d, 0xf4, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x10, 0x1f, 0x07, 0x1d, 0x28, 0x17, 0x04, 0x16, - 0xab, 0x30, 0x04, 0xeb, 0x30, 0xbf, 0x30, 0xb4, 0x06, 0x68, 0x15, 0x00, 0x00, 0x45, 0x43, 0x2f, 0xaf, 0x72, 0x00, 0x74, 0x2f, 0xb5, 0x67, 0x2f, - 0xb1, 0x83, 0x10, 0x16, 0x10, 0x7f, 0x61, 0x53, 0x54, 0x58, 0x08, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x00, 0x74, 0xce, 0x74, 0xb9, 0xc0, 0xd0, 0xe0, - 0xac, 0xd1, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, 0x15, 0x40, 0x04, 0x42, 0x28, 0x1b, 0x1a, 0x33, 0x04, 0x3e, 0x06, 0x08, 0x15, 0x10, - 0x17, 0x14, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x50, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x04, 0x07, 0x40, 0x54, 0x28, 0x17, 0x05, 0x16, - 0xb0, 0x30, 0xa2, 0x30, 0x01, 0xca, 0x30, 0xab, 0x30, 0xb9, 0x30, 0xc6, 0x06, 0x48, 0x1b, 0x45, 0x47, 0x2f, 0xa9, 0x61, 0x00, 0x6e, 0x2f, 0xb3, - 0x63, 0x2f, 0xb7, 0x50, 0x73, 0x28, 0x21, 0x65, 0x10, 0x15, 0xc0, 0x7f, 0xdc, 0x74, 0xb3, 0x7e, 0x02, 0x61, 0x53, 0xaf, 0x65, 0x79, 0x72, 0x06, - 0x58, 0x1b, 0xfc, 0x00, 0xac, 0x98, 0xb0, 0x74, 0xce, 0xa4, 0xc2, 0x4c, 0x62, 0xd1, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x13, 0x04, 0x43, 0x28, - 0x19, 0x3d, 0xab, 0x28, 0x1d, 0x3a, 0x28, 0x21, 0x41, 0x28, 0x21, 0x35, 0x05, 0xc8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x4a, 0x04, 0x38, 0x0c, 0x03, - 0x04, 0x20, 0x06, 0x02, 0x20, 0x05, 0x04, 0x00, 0x04, 0x8f, 0x07, 0x40, 0xc3, 0x00, 0x00, 0x06, 0x00, 0x16, 0xa8, 0x30, 0xec, 0x30, 0xc7, 0x30, - 0xa3, 0xc5, 0x28, 0x1d, 0x06, 0x38, 0x15, 0x00, 0x00, 0x48, 0x28, 0x07, 0x72, 0x28, 0x0b, 0x18, 0x64, 0x00, 0x69, 0x2f, 0xb9, 0x10, 0x16, 0x10, - 0x7f, 0xc3, 0x57, 0xf7, 0x04, 0x96, 0xea, 0x8f, 0x9a, 0x4e, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0xd0, 0xc5, 0x08, 0xb8, 0x14, 0xb5, 0x44, 0xc5, - 0xc4, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x2d, 0x04, 0x40, 0x28, 0x09, 0x34, 0x04, 0x1a, 0x38, 0x04, 0x4f, 0x05, 0xc8, 0x0f, 0x10, 0x17, 0x74, - 0xff, 0x05, 0x38, 0x0c, 0x04, 0x50, 0x05, 0x20, 0x06, 0x07, 0x20, 0x05, 0x05, 0x05, 0x1c, 0x07, 0x00, 0x30, 0xc4, 0x00, 0x00, 0x07, 0x16, 0xea, - 0x30, 0x1a, 0xe2, 0x30, 0xf3, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x4c, 0x28, 0x0f, 0x6d, 0x30, 0x00, 0xf3, 0x2f, 0xb1, 0x10, 0x16, 0x50, 0x7f, 0x29, - 0x52, 0x99, 0x84, 0xc3, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xac, 0xb9, 0xac, 0xba, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x41, 0x1b, 0x28, 0x11, 0x3c, - 0x04, 0x3e, 0x04, 0x3d, 0x06, 0x48, 0x15, 0xa5, 0x10, 0x17, 0x14, 0xff, 0x06, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x06, - 0x06, 0x1c, 0x07, 0xf5, 0x28, 0x17, 0x08, 0x16, 0x40, 0xd7, 0x28, 0x15, 0xbf, 0x30, 0xec, 0x30, 0xca, 0x30, 0x45, 0xb9, 0x06, 0x48, 0x1d, 0x50, - 0x00, 0x75, 0x28, 0x13, 0x74, 0x2f, 0xab, 0xa8, 0x3f, 0xb5, 0x6e, 0x2f, 0xb3, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0xec, 0x84, 0x54, 0x01, 0x58, 0xf7, - 0x96, 0xb3, 0x7e, 0xaf, 0x65, 0x06, 0x58, 0x1d, 0x00, 0x7c, 0xd4, 0xc0, 0xd0, 0x08, 0xb8, 0x98, 0xb0, 0x31, 0xa4, 0xc2, 0x06, 0x58, 0x1d, 0x0e, - 0xf3, 0x7f, 0x1f, 0x04, 0x43, 0x28, 0x13, 0x01, 0x42, 0x04, 0x30, 0x04, 0x40, 0x04, 0x35, 0x28, 0x1d, 0x1a, 0x30, 0x04, 0x41, 0x05, 0xc8, 0x21, - 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x50, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x07, 0x16, 0x07, 0x29, 0xad, 0xc3, 0x00, 0x3f, - 0xff, 0x01, 0x30, 0x1c, 0x07, 0x01, 0x20, 0x06, 0x44, 0x06, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, - 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x51, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x04, 0x30, 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, 0x02, - 0x20, 0x05, 0x04, 0x04, 0x05, 0xa7, 0x30, 0x04, 0x04, 0x28, 0x7d, 0x04, 0x07, 0x20, 0x05, 0x28, 0x89, 0xe8, 0x8f, 0xc0, 0xf0, 0x87, 0x3f, 0xff, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x17, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xe1, 0x0a, 0x57, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x17, 0xc9, 0x30, 0xdf, 0x30, 0xcb, 0x04, 0x30, 0xab, 0x30, 0xfd, 0x56, 0x06, 0x58, 0x1f, - 0x44, 0x00, 0x01, 0x6f, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x20, 0x03, 0x10, 0x63, 0x00, 0x61, 0x06, 0xc0, 0x7f, 0x71, 0x00, 0x75, 0x00, 0x60, - 0x65, 0x0e, 0xa0, 0xff, 0x0e, 0x30, 0x7f, 0x1a, 0x59, 0x73, 0x7c, 0x3c, 0x10, 0x5c, 0x4b, 0x51, 0x06, 0x7b, 0x1d, 0xc4, 0xb3, 0xf8, 0xbb, 0x00, - 0xc8, 0xb2, 0x74, 0xce, 0x20, 0x00, 0xf0, 0xc5, 0x30, 0x29, 0xbc, 0x0e, 0xd3, 0x7f, 0x06, 0x33, 0xff, 0x14, 0x04, 0x3e, 0x04, 0x04, 0x3c, 0x04, - 0x38, 0x04, 0x3d, 0x20, 0x03, 0x3a, 0x04, 0x33, 0x30, 0x04, 0x10, 0x05, 0xf3, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, - 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xe4, 0xfc, 0x00, 0x11, 0x1e, 0x00, 0x00, - 0x30, 0x01, 0x18, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x21, 0x0d, 0x4c, 0xce, 0x00, 0x00, 0x00, - 0x02, 0x18, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, 0x30, 0xc8, 0x30, 0xea, 0x20, 0x03, 0xfb, 0x30, 0xca, 0x08, 0x30, 0xb7, 0x30, 0xe7, 0x20, 0x05, - 0xeb, 0x30, 0x96, 0x04, 0x99, 0xfd, 0x90, 0x0f, 0x57, 0x05, 0x18, 0x33, 0x44, 0x00, 0x01, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x20, 0x07, - 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x4e, 0x00, 0x11, 0x61, 0x00, 0x63, 0x20, 0x15, 0x6f, 0x00, 0x6e, 0x20, 0x09, 0x5b, 0x6c, 0x05, 0xa0, - 0x7f, 0x63, 0x20, 0x87, 0x50, 0x7f, 0x74, 0x06, 0x40, 0x7f, 0x06, 0xd0, 0xff, 0x6a, 0x65, 0x21, 0x85, 0x91, 0x81, 0x7a, 0xa1, 0x81, 0x65, 0x0c, - 0xa1, 0xff, 0xfd, 0x04, 0x56, 0xb6, 0x5b, 0x3a, 0x53, 0x06, 0x9b, 0x1b, 0xc4, 0xb3, 0x00, 0xf8, 0xbb, 0xc8, 0xb2, 0x74, 0xce, 0x20, 0x00, 0x03, - 0x89, 0xd5, 0x15, 0xc8, 0x6c, 0xad, 0x05, 0xfb, 0xa5, 0x07, 0xb3, 0x7f, 0x80, 0x06, 0x33, 0xff, 0x1d, 0x04, 0x30, 0x04, 0x46, 0x04, 0x38, 0x08, - 0x04, 0x3e, 0x04, 0x3d, 0x20, 0x09, 0x3b, 0x04, 0x4c, 0x80, 0x20, 0x07, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x00, 0x04, 0x3a, 0x04, 0x40, - 0x04, 0x43, 0x04, 0x33, 0x62, 0x04, 0x10, 0x04, 0xb1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x05, 0x05, 0x20, 0x01, 0x01, 0xa4, 0x20, 0x06, 0x0f, - 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x18, 0x4a, 0xa2, 0x28, 0x15, 0xa2, 0x30, 0x06, 0x9f, 0xb3, 0x41, 0x26, 0x81, 0x75, 0xc0, 0x28, 0x09, - 0x10, 0x16, 0x70, 0x7f, 0x3f, 0x96, 0xcf, 0x82, 0x3f, 0x96, 0x20, 0x01, 0x77, 0x06, 0x7f, 0xb5, 0x44, 0xc5, 0x18, 0xc2, 0x44, 0x45, 0xc5, 0x10, - 0x06, 0x93, 0x7f, 0x10, 0x04, 0x37, 0x27, 0xfb, 0x30, 0x04, 0xc7, 0xfb, 0xa4, 0x10, 0x18, 0xb4, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, - 0x02, 0x02, 0x00, 0x02, 0x02, 0x1e, 0x0d, 0xb4, 0xcd, 0x00, 0x00, 0x00, 0x04, 0x18, 0xd0, 0x30, 0xaa, 0x30, 0xeb, 0x30, 0x55, 0xb3, 0x06, 0x88, - 0x19, 0x42, 0x2f, 0x9d, 0x6f, 0x2f, 0xad, 0x75, 0x2f, 0xad, 0x40, 0x6f, 0x10, 0x16, 0x20, 0x7f, 0xf4, 0x5d, 0x65, 0x59, 0x81, 0x9c, 0x20, 0xd1, - 0x79, 0x06, 0x78, 0x19, 0x14, 0xbc, 0x24, 0xc6, 0xe8, 0x14, 0xb8, 0x54, 0xcf, 0x10, 0x06, 0x73, 0x7f, 0x11, 0x28, 0x13, 0x3e, 0x04, 0x5a, 0x40, - 0x28, 0x1b, 0x3a, 0x20, 0x07, 0x10, 0x1e, 0x14, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x40, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x21, 0x0d, 0x55, - 0x37, 0x28, 0x17, 0x05, 0x28, 0x17, 0xe9, 0x28, 0x19, 0xca, 0x06, 0xc8, 0x17, 0x56, 0x72, 0x2f, 0xaf, 0x68, 0x28, 0x1d, 0x6e, 0x06, 0x2f, 0xb7, - 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x01, 0x5d, 0xc9, 0x62, 0x65, 0x59, 0xb3, 0x7e, 0x06, 0x98, 0x17, 0x03, 0x7c, 0xb7, 0x24, 0xc6, 0x98, 0xb0, 0x10, - 0x06, 0x73, 0x7f, 0x38, 0x17, 0x56, 0x40, 0x28, 0x1b, 0x45, 0x28, 0x1d, 0x3d, 0x28, 0x23, 0x10, 0x1d, 0xf4, 0xff, 0x04, 0x90, 0x38, 0x0c, 0x03, - 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x10, 0xf1, 0x0c, 0x71, 0x28, 0x17, 0x06, 0x18, 0xc0, 0x30, 0x05, 0xcf, 0x30, 0xdc, 0x30, 0xf3, 0x06, - 0x88, 0x17, 0x44, 0x2f, 0xaf, 0x46, 0x6a, 0x2f, 0xb3, 0x62, 0x00, 0xf3, 0x28, 0x17, 0x10, 0x16, 0x10, 0x7f, 0xbe, 0x04, 0x8f, 0xc8, 0x54, 0x0b, - 0x67, 0x06, 0x78, 0x15, 0x00, 0x00, 0x03, 0xe4, 0xb2, 0x58, 0xd5, 0xf8, 0xbc, 0x06, 0x7b, 0x95, 0x0f, 0x13, 0x7f, 0x45, 0x14, 0x28, 0x17, 0x34, - 0x04, 0x36, 0x28, 0x1d, 0x31, 0x48, 0x19, 0xa5, 0x10, 0x1d, 0xf4, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, 0x04, 0x05, - 0x05, 0xe6, 0x0d, 0x04, 0x28, 0x17, 0x07, 0x18, 0x00, 0xc9, 0x30, 0xa5, 0x30, 0xa2, 0x30, 0xeb, 0x30, 0x44, 0xc6, 0x06, 0x68, 0x19, 0x44, 0x00, - 0x75, 0x4f, 0xb1, 0x74, 0x00, 0x40, 0x65, 0x10, 0x16, 0x40, 0x7f, 0x5c, 0x67, 0x4e, 0x53, 0xb7, 0x5f, 0x80, 0x06, 0x98, 0x17, 0x50, 0xb4, 0x44, - 0xc5, 0x74, 0xb9, 0x4c, 0x62, 0xd1, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, 0x14, 0x04, 0x43, 0x28, 0x19, 0x40, 0x0c, 0x04, 0x42, 0x04, 0x35, 0x06, - 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x06, 0x06, 0x80, 0xd0, 0x01, 0xb9, 0x0d, 0x0c, 0xce, 0x00, 0x00, 0x08, 0x00, 0x18, 0xa8, 0x30, 0xb9, 0x30, - 0xd1, 0x30, 0xa4, 0x02, 0x30, 0xb8, 0x30, 0xe3, 0x30, 0xc8, 0x06, 0x28, 0x1b, 0x45, 0x08, 0x00, 0x73, 0x00, 0x70, 0x2f, 0xb3, 0x69, 0x00, 0x6c, - 0xb0, 0x20, 0x01, 0x61, 0x28, 0x1f, 0x10, 0x15, 0xd0, 0x7f, 0x7e, 0x82, 0xaf, 0x65, 0x08, 0x3e, 0x6d, 0x9a, 0x4e, 0x06, 0x78, 0x19, 0xd0, 0xc5, - 0xa4, 0x00, 0xc2, 0x0c, 0xd3, 0x74, 0xc7, 0x7c, 0xc5, 0xb8, 0x60, 0xd2, 0x06, 0x3b, 0x99, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x41, 0x04, 0x3f, 0x8b, - 0x28, 0x19, 0x38, 0x04, 0x3b, 0x20, 0x01, 0x30, 0x28, 0x1f, 0x10, 0x1d, 0xd4, 0xff, 0x15, 0x07, 0x09, 0x09, 0x20, 0x01, 0x07, 0x20, 0x06, 0x1e, - 0x20, 0x05, 0x00, 0x07, 0x07, 0xcb, 0x0d, 0xdb, 0xcd, 0x00, 0x00, 0x00, 0x09, 0x18, 0xa4, 0x30, 0xf3, 0x30, 0xc7, 0x30, 0x41, 0xda, 0x40, 0x05, - 0xf3, 0x30, 0xb7, 0x30, 0xa2, 0x05, 0xe8, 0x1b, 0x05, 0x49, 0x00, 0x6e, 0x00, 0x64, 0x2f, 0xab, 0x70, 0x2f, 0xaf, 0x8a, 0x50, 0x09, 0x6e, 0x00, - 0x63, 0x28, 0x25, 0x61, 0x10, 0x15, 0x60, 0x7f, 0xec, 0x18, 0x72, 0xcb, 0x7a, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x78, 0xc7, 0x70, 0x00, 0xb3, 0x9c, - 0xd3, 0x74, 0xb3, 0xdc, 0xc2, 0x44, 0x60, 0xc5, 0x06, 0x3f, 0xb0, 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x3d, 0x04, 0x34, 0x2a, 0x04, 0x35, 0x28, 0x1b, - 0x35, 0x60, 0x09, 0x3d, 0x28, 0x29, 0x38, 0x30, 0x04, 0x4f, 0x05, 0x68, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x0b, 0x0b, 0x0c, 0x14, 0x0b, 0x0b, - 0x08, 0x20, 0x06, 0x07, 0x20, 0x05, 0x08, 0x08, 0x00, 0x26, 0x0d, 0xe8, 0xcc, 0x00, 0x00, 0x0a, 0x18, 0x10, 0xe9, 0x30, 0xfb, 0x28, 0x0b, 0xeb, - 0x30, 0xbf, 0x30, 0x14, 0xb0, 0x30, 0xe9, 0x06, 0x28, 0x17, 0x4c, 0x2f, 0xab, 0x20, 0x00, 0x51, 0x41, 0x2f, 0xad, 0x74, 0x2f, 0xb5, 0x67, 0x00, - 0x72, 0x2f, 0xbb, 0xc2, 0x05, 0xb8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x23, 0x57, 0xcd, 0x6b, 0x06, 0xb8, 0x17, 0x7c, 0x00, 0xb7, 0x4c, 0xc5, 0xc0, - 0xd0, 0xf8, 0xad, 0x7c, 0x60, 0xb7, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1b, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x00, 0x10, 0x04, 0x3b, 0x04, 0x4c, - 0x04, 0x42, 0x8e, 0x20, 0x0b, 0x33, 0x04, 0x40, 0x20, 0x11, 0x05, 0x98, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x02, 0x0c, 0x0c, 0x0d, 0x0c, 0x0c, - 0x09, 0x20, 0x06, 0x08, 0x80, 0x20, 0x05, 0x09, 0x09, 0x4c, 0x0d, 0x2c, 0xcf, 0x00, 0x02, 0x00, 0x0b, 0x18, 0xa8, 0x30, 0xea, 0x28, 0x17, 0xb9, - 0x80, 0x28, 0x1d, 0xd4, 0x30, 0xfc, 0x30, 0xcb, 0x30, 0xe3, 0xaa, 0x05, 0xe8, 0x17, 0x45, 0x28, 0x11, 0xed, 0x2f, 0x9d, 0x73, 0x28, 0x1d, 0x50, - 0xb0, 0x2f, 0xa7, 0xf1, 0x05, 0x8f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xc3, 0x57, 0x29, 0x52, 0x00, 0x9a, 0x4e, 0xaf, 0x65, 0xae, 0x76, 0x9a, 0x4e, - 0x80, 0x06, 0x38, 0x1f, 0xd8, 0xc5, 0xac, 0xb9, 0x44, 0xc5, 0xa4, 0x06, 0xc2, 0x3c, 0xd5, 0xd0, 0xb0, 0x06, 0x38, 0x9d, 0x0e, 0xf3, 0x7f, 0x2d, - 0xa2, 0x48, 0x11, 0x4f, 0x28, 0x09, 0x2d, 0x00, 0x1f, 0x28, 0x0d, 0x3d, 0xc5, 0x28, 0x27, 0x10, 0x1d, 0xb4, 0xff, 0x0a, 0x08, 0x08, 0x20, 0x01, - 0x0a, 0x20, 0x06, 0x40, 0x1d, 0x20, 0x05, 0x0a, 0x0a, 0x6c, 0x0d, 0x03, 0xcd, 0x04, 0x00, 0x00, 0x0c, 0x18, 0xe9, 0x28, 0x11, 0xed, 0x30, 0x58, - 0xde, 0x28, 0x13, 0xca, 0x05, 0xe8, 0x11, 0xbf, 0xaf, 0x52, 0x00, 0x6f, 0x2c, 0x00, 0x6d, 0x2f, 0xb9, 0x6e, 0x05, 0xe8, 0x15, 0x10, 0x0f, 0x10, - 0x7f, 0x57, 0x7f, 0x0c, 0x6c, 0x9a, 0xb3, 0x7e, 0x06, 0x38, 0x11, 0x5f, 0xff, 0x7c, 0xb7, 0x06, 0x5c, 0xb8, 0xc8, 0xb9, 0x98, 0x06, 0x48, 0x13, - 0x0f, 0x33, 0x7f, 0x1b, 0x80, 0x28, 0x07, 0x2d, 0x00, 0x20, 0x04, 0x3e, 0x04, 0x3c, 0xe0, 0x28, 0x11, 0x05, 0xf8, 0x15, 0x10, 0x17, 0x14, 0xff, - 0x0b, 0x0d, 0x0d, 0x0e, 0x0d, 0x28, 0x0d, 0x0b, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x0b, 0x0b, 0x18, 0x00, 0x0d, 0xf6, 0xce, 0x00, 0x00, 0x0d, 0x18, - 0xde, 0x0a, 0x30, 0xea, 0x30, 0xa2, 0x28, 0x1b, 0xc8, 0x20, 0x07, 0xcb, 0x20, 0x30, 0xc0, 0x28, 0x1f, 0xfb, 0x30, 0xb5, 0x30, 0xf3, 0x02, 0x30, - 0xc1, 0x30, 0xa7, 0x30, 0xb9, 0x05, 0x28, 0x29, 0x4d, 0xa2, 0x2f, 0xab, 0x72, 0x4f, 0xb1, 0x20, 0x00, 0x54, 0x20, 0x09, 0x69, 0x8a, 0x28, 0x1b, - 0x69, 0x00, 0x64, 0x2f, 0xc1, 0x64, 0x2f, 0xc1, 0x53, 0x20, 0x00, 0xe1, 0x28, 0x2b, 0x63, 0x00, 0x68, 0x00, 0x65, 0x20, 0x00, 0x7a, 0x10, 0x14, - 0x40, 0x7f, 0x9b, 0x73, 0x3d, 0x4e, 0x9a, 0x00, 0x4e, 0x2d, 0x00, 0x51, 0x68, 0x76, 0x51, 0xaf, 0x40, 0x65, 0x06, 0x18, 0x1f, 0xc8, 0xb9, 0xac, - 0xb9, 0x44, 0xc5, 0x00, 0x20, 0x00, 0xb8, 0xd2, 0xac, 0xb9, 0xc8, 0xb2, 0x00, 0xe4, 0xb2, 0xdc, 0xb4, 0xb0, 0xc0, 0xb4, 0xcc, 0x34, 0xa4, 0xc2, - 0x05, 0x7f, 0xb4, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x17, 0x40, 0x04, 0x15, 0x38, 0x04, 0x4f, 0x28, 0x1d, 0x22, 0x40, 0x09, 0x3d, 0x20, 0x0d, 0x54, - 0x34, 0x28, 0x2d, 0x34, 0x28, 0x2f, 0x21, 0x48, 0x2b, 0x47, 0x04, 0x18, 0x35, 0x04, 0x41, 0x04, 0x68, 0x2f, 0x10, 0x16, 0xf4, 0xff, 0x0c, 0x0f, - 0x0f, 0x0a, 0x10, 0x0f, 0x0f, 0x0c, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x0c, 0x08, 0x0c, 0xc8, 0x0d, 0x58, 0x28, 0x17, 0x0e, 0x18, 0xe2, 0xaa, 0x28, - 0x03, 0xc6, 0x28, 0x17, 0xaf, 0x28, 0x1f, 0xb9, 0x20, 0x09, 0xa3, 0xd4, 0x05, 0x28, 0x0b, 0xd8, 0x17, 0x6f, 0x2f, 0xa5, 0x74, 0x27, 0xf7, 0x20, - 0x00, 0x54, 0x43, 0x48, 0x17, 0x73, 0x20, 0x0d, 0x69, 0x10, 0x15, 0x80, 0x7f, 0xfa, 0x57, 0x0c, 0xa6, 0x5e, 0x71, 0x5c, 0x06, 0x18, 0x0f, 0x7f, - 0xff, 0xac, 0xba, 0x00, 0x4c, 0xd1, 0x6c, 0xd0, 0xac, 0xb9, 0xa4, 0xc2, 0x31, 0xf0, 0xd2, 0x06, 0x30, 0x83, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x3e, - 0x28, 0x09, 0x45, 0x42, 0x27, 0xf9, 0x2d, 0x00, 0x1a, 0x48, 0x21, 0x41, 0x20, 0x0d, 0x60, 0x38, 0x04, 0x68, 0x05, 0x10, 0x18, 0x14, 0xff, 0x0d, - 0x11, 0x11, 0x12, 0x11, 0x28, 0x11, 0x0d, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0d, 0x0d, 0xfc, 0x00, 0x0d, 0x0a, 0xcd, 0x00, 0x00, 0x0f, 0x18, 0xda, - 0x00, 0x30, 0xc7, 0x30, 0xeb, 0x30, 0xca, 0x30, 0xec, 0xd5, 0x28, 0x15, 0x06, 0x35, 0x1b, 0x50, 0x2f, 0x89, 0x64, 0x2f, 0x8d, 0x72, 0x2f, 0xa7, - 0x14, 0x61, 0x00, 0x6c, 0x2f, 0x97, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0x69, 0x4f, 0x00, 0xb7, 0x5f, 0xb3, 0x7e, 0xb1, 0x83, 0xaf, 0x65, 0x80, 0x06, - 0x58, 0x1b, 0x98, 0xd3, 0x70, 0xb3, 0x74, 0xb9, 0xa0, 0x05, 0xb0, 0x08, 0xb8, 0xa4, 0xc2, 0x10, 0x06, 0x33, 0x7f, 0x1f, 0x28, 0x11, 0x51, 0x34, - 0x28, 0x15, 0x40, 0x28, 0x1d, 0x30, 0x04, 0x3b, 0x28, 0x1f, 0x60, 0x41, 0x05, 0x88, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0e, 0x13, 0x13, 0x14, 0x13, - 0x28, 0x13, 0x0e, 0x20, 0x06, 0x10, 0x20, 0x05, 0x0e, 0x0e, 0xd2, 0x02, 0x0c, 0xfb, 0xcc, 0x00, 0x00, 0x10, 0x28, 0x17, 0xe9, 0x0d, 0x30, 0xd3, - 0x30, 0xa2, 0x06, 0x48, 0x13, 0x78, 0x17, 0x72, 0x28, 0x11, 0x50, 0x76, 0x2f, 0xa9, 0x61, 0x10, 0x16, 0x20, 0x7f, 0x69, 0x4f, 0xc9, 0x62, 0x0c, - 0xf4, 0x7e, 0x9a, 0x4e, 0x06, 0x58, 0x15, 0x38, 0x17, 0x7c, 0xb7, 0x0d, 0x44, 0xbe, 0x44, 0xc5, 0x10, 0x06, 0x73, 0x7f, 0x38, 0x17, 0x40, 0x28, - 0x11, 0x06, 0x32, 0x04, 0x38, 0x04, 0x4f, 0x05, 0xc8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x0f, 0x02, 0x14, 0x14, 0x15, 0x14, 0x14, 0x0f, 0x20, 0x06, - 0x11, 0x80, 0x20, 0x05, 0x0f, 0x0f, 0x00, 0x0d, 0xfd, 0xcd, 0x00, 0x00, 0x00, 0x11, 0x18, 0xd7, 0x30, 0xa8, 0x30, 0xeb, 0x02, 0x30, 0xc8, 0x30, - 0xfb, 0x30, 0xd7, 0x28, 0x21, 0xbf, 0x88, 0x06, 0x08, 0x1f, 0x50, 0x00, 0x75, 0x4f, 0xad, 0x74, 0x00, 0x6f, 0x2b, 0x00, 0x20, 0x2f, 0xbd, 0x6c, - 0x2f, 0xb5, 0x74, 0x05, 0xa8, 0x21, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0xf6, 0x94, 0x2f, 0x6e, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x78, 0xd4, 0x00, 0xd0, - 0xc5, 0x74, 0xb9, 0xa0, 0xd1, 0x20, 0x00, 0x02, 0x0c, 0xd5, 0x7c, 0xb7, 0xc0, 0xd0, 0x10, 0x05, 0xf3, 0x7f, 0x1f, 0x08, 0x04, 0x43, 0x04, 0x4d, - 0x28, 0x19, 0x42, 0x04, 0x3e, 0x2b, 0x04, 0x2d, 0x28, 0x25, 0x3b, 0x28, 0x23, 0x42, 0x28, 0x27, 0x10, 0x1d, 0x74, 0xff, 0x01, 0x10, 0x15, 0x15, - 0x16, 0x15, 0x15, 0x10, 0x20, 0x06, 0x41, 0x12, 0x20, 0x05, 0x10, 0x10, 0x14, 0x0e, 0xbd, 0x28, 0x17, 0x11, 0x12, 0x18, 0xb5, 0x28, 0x15, 0xbb, - 0x30, 0xc9, 0x06, 0x08, 0x0f, 0xa2, 0x7f, 0xff, 0x53, 0x2f, 0xab, 0x6c, 0x00, 0x63, 0x2f, 0xb5, 0x64, 0xd5, 0x28, 0x19, 0x0e, 0x10, 0x7f, 0x48, - 0x4f, 0xaf, 0x6d, 0x2f, 0xb1, 0x6e, 0x2f, 0xb5, 0x5b, 0x73, 0x29, 0x1b, 0x4d, 0x2f, 0xb9, 0x3f, 0xc1, 0x62, 0x41, 0x19, 0x10, 0x04, 0xf1, 0x7f, - 0x00, 0x28, 0x84, 0x14, 0x5c, 0x5e, 0x58, 0x1a, 0x59, 0x81, 0x06, 0x78, 0x1b, 0xb4, 0xc0, 0x38, 0xc1, 0xc4, 0xb3, 0x06, 0x98, 0x97, 0xa0, 0x0e, - 0xf3, 0x7f, 0x21, 0x28, 0x07, 0x3b, 0x04, 0x3a, 0x04, 0x35, 0x38, 0x04, 0x34, 0x28, 0x19, 0x10, 0x06, 0x14, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x11, - 0x16, 0x16, 0x0a, 0x0b, 0x16, 0x16, 0x11, 0x20, 0x06, 0x13, 0x20, 0x05, 0x11, 0x08, 0x11, 0xcb, 0x0d, 0xfa, 0x28, 0x17, 0x13, 0x18, 0xbb, 0x0e, - 0x30, 0xde, 0x30, 0xca, 0x06, 0x88, 0x15, 0x58, 0x17, 0x57, 0x15, 0xe1, 0x81, 0x10, 0x16, 0x40, 0x7f, 0x71, 0x5c, 0x8e, 0x7f, 0xb3, 0x7e, 0x06, - 0x78, 0x15, 0x00, 0x00, 0x00, 0xac, 0xc0, 0xc8, 0xb9, 0x98, 0xb0, 0xd6, 0x10, 0x06, 0x93, 0x7f, 0x38, 0x17, 0x3c, 0x28, 0x1b, 0x3d, 0x28, 0x1f, - 0x10, 0x1e, 0x34, 0xff, 0x12, 0x2a, 0x17, 0x17, 0x20, 0x01, 0x12, 0x20, 0x06, 0x14, 0x20, 0x05, 0x12, 0x00, 0x12, 0xaa, 0x0d, 0xb6, 0xce, 0x00, - 0x00, 0x14, 0x00, 0x18, 0xb5, 0x30, 0xf3, 0x30, 0xc1, 0x30, 0xa7, 0x00, 0x30, 0xb9, 0x30, 0xfb, 0x30, 0xe9, 0x30, 0xdf, 0x34, 0x30, 0xec, 0x20, - 0x09, 0x05, 0xdf, 0xaf, 0xe1, 0x2f, 0x29, 0x63, 0x00, 0x55, 0x68, 0x2f, 0xb1, 0x7a, 0x2f, 0x2d, 0x52, 0x48, 0x27, 0xed, 0x2f, 0x43, 0xc0, 0x30, - 0x0f, 0x10, 0x15, 0x10, 0x7f, 0x51, 0x68, 0x07, 0x52, 0xaf, 0x65, 0x00, 0x2d, 0x00, 0xc9, 0x62, 0x73, 0x7c, 0xaf, 0x65, 0x80, 0x06, 0x18, 0x1f, - 0xb0, 0xc0, 0xb4, 0xcc, 0xa4, 0xc2, 0x7c, 0x01, 0xb7, 0xf8, 0xbb, 0x08, 0xb8, 0xa4, 0xc2, 0x06, 0x3f, 0xaf, 0xc0, 0x0e, 0xd3, 0x7f, 0x38, 0x17, - 0x3d, 0x04, 0x47, 0x04, 0x35, 0x04, 0x04, 0x41, 0x04, 0x2d, 0x00, 0x20, 0x48, 0x25, 0x38, 0x04, 0x62, 0x40, 0x40, 0x0f, 0x10, 0x1d, 0x34, 0xff, - 0x13, 0x1b, 0x1b, 0x20, 0x01, 0x13, 0x08, 0x13, 0x1b, 0x1a, 0x1a, 0x20, 0x05, 0x13, 0x13, 0x8b, 0x28, 0x0d, 0x1e, 0x28, 0x17, 0x15, 0x48, 0x17, - 0xfb, 0x30, 0xd5, 0x34, 0x30, 0xa2, 0x28, 0x1f, 0x06, 0x7f, 0xaf, 0x6e, 0x28, 0x0f, 0x4a, 0x00, 0x60, 0x75, 0x4f, 0xb5, 0x10, 0x15, 0xf0, 0x7f, - 0x23, 0x57, 0xe1, 0x80, 0x89, 0x61, 0x5b, 0x06, 0x18, 0x0f, 0x98, 0x17, 0xc4, 0xd6, 0x48, 0xc5, 0x06, 0x70, 0x7d, 0xc1, 0x0f, 0x13, 0x7f, 0x58, - 0x17, 0x2d, 0x00, 0x25, 0x04, 0x43, 0x48, 0x21, 0x88, 0x10, 0x1d, 0xf4, 0xff, 0x14, 0x19, 0x19, 0x20, 0x01, 0x14, 0x14, 0x19, 0x20, 0x18, 0x17, - 0x20, 0x05, 0x14, 0x14, 0x5e, 0x0d, 0x59, 0x08, 0xcd, 0x00, 0x00, 0x16, 0x68, 0x17, 0xda, 0x30, 0xc9, 0x28, 0x30, 0xed, 0x28, 0x1f, 0xc7, 0x28, - 0x23, 0xde, 0x30, 0xb3, 0x0d, 0x30, 0xea, 0x30, 0xb9, 0x05, 0x68, 0x25, 0x78, 0x17, 0x50, 0x2f, 0xaf, 0x54, 0x64, 0x2f, 0xa5, 0x6f, 0x2f, 0xb3, - 0x64, 0x2f, 0xbb, 0x20, 0x00, 0x55, 0x4d, 0x2f, 0xb9, 0x63, 0x20, 0x0f, 0x72, 0x2f, 0xbd, 0x73, 0x10, 0x14, 0x80, 0x7f, 0x02, 0x23, 0x57, 0x7c, - 0x5f, 0xb7, 0x5f, 0x06, 0xb8, 0x17, 0x98, 0x00, 0xd3, 0xdc, 0xb4, 0x5c, 0xb8, 0x70, 0xb3, 0xc8, 0x01, 0xb9, 0x54, 0xcf, 0xac, 0xb9, 0xa4, 0xc2, - 0x06, 0x5b, 0x97, 0xc0, 0x0e, 0x73, 0x7f, 0x78, 0x17, 0x1f, 0x04, 0x35, 0x04, 0x34, 0x04, 0x14, 0x40, 0x04, 0x3e, 0x28, 0x23, 0x34, 0x20, 0x0b, - 0x2d, 0x00, 0x44, 0x1c, 0x28, 0x31, 0x40, 0x04, 0x3a, 0x20, 0x11, 0x40, 0x04, 0x18, 0x38, 0x04, 0x41, 0x04, 0x68, 0x31, 0x10, 0x16, 0xf4, 0xff, - 0x15, 0x1a, 0x1a, 0x82, 0x20, 0x01, 0x15, 0x15, 0x1a, 0x19, 0x16, 0x20, 0x05, 0x15, 0x00, 0x15, 0x1e, 0x0d, 0xb9, 0xce, 0x00, 0x00, 0x17, 0x80, - 0x48, 0x17, 0xc6, 0x30, 0xa3, 0x30, 0xa2, 0x30, 0xb4, 0xc5, 0x05, 0x68, 0x09, 0x00, 0x3f, 0xaf, 0x74, 0x00, 0x69, 0x2f, 0xb7, 0x67, 0x28, 0x15, - 0x80, 0x10, 0x15, 0xf0, 0x7f, 0x23, 0x57, 0x30, 0x57, 0x9a, 0x4e, 0xe5, 0x40, 0x54, 0x06, 0x78, 0x19, 0xb0, 0xc0, 0xf0, 0xd2, 0x44, 0xc5, 0x38, - 0xe0, 0xac, 0x06, 0x78, 0x97, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x42, 0x04, 0x4c, 0x0c, 0x04, 0x4f, 0x04, 0x33, 0x28, 0x15, 0x10, 0x1d, 0xf4, 0xff, - 0x16, 0x1c, 0x41, 0x1c, 0x20, 0x01, 0x16, 0x16, 0x1c, 0x1b, 0x18, 0x20, 0x05, 0x00, 0x16, 0x16, 0xd4, 0x0d, 0xba, 0xcd, 0x00, 0x00, 0x40, 0x18, - 0xc8, 0x17, 0xfb, 0x30, 0xed, 0x30, 0xc9, 0x30, 0x06, 0xea, 0x30, 0xb2, 0x30, 0xb9, 0x05, 0x88, 0x23, 0xf8, 0x17, 0x20, 0x35, 0x00, 0x52, 0x2f, - 0xb3, 0x3f, 0xb9, 0xed, 0x28, 0x27, 0x75, 0x2f, 0xc5, 0x60, 0x7a, 0x10, 0x14, 0xc0, 0x7f, 0x78, 0x17, 0x2d, 0x00, 0x57, 0x7f, 0xcc, 0x06, 0x91, - 0xd6, 0x76, 0x79, 0x51, 0x05, 0xd8, 0x21, 0x78, 0x17, 0x5c, 0x00, 0xb8, 0xdc, 0xb4, 0xac, 0xb9, 0x8c, 0xac, 0xa4, 0x71, 0xc2, 0x06, 0xdb, 0x97, - 0x0d, 0xf3, 0x7f, 0xf8, 0x17, 0x2d, 0x00, 0x20, 0x28, 0x1d, 0x04, 0x34, 0x04, 0x40, 0x04, 0x38, 0x28, 0x27, 0x35, 0x04, 0x62, 0x41, 0x04, 0xe8, - 0x29, 0x10, 0x16, 0xf4, 0xff, 0x17, 0x1d, 0x1d, 0x20, 0x01, 0x17, 0x08, 0x17, 0x1d, 0x1c, 0x19, 0x20, 0x05, 0x17, 0x17, 0xd7, 0x20, 0x0d, 0x47, - 0x28, 0x17, 0x19, 0x18, 0xd0, 0x30, 0xeb, 0x2d, 0x30, 0xd9, 0x20, 0x03, 0xc7, 0x05, 0x88, 0x09, 0xdf, 0xff, 0x56, 0x2f, 0xaf, 0x15, 0x6c, 0x00, - 0x76, 0x27, 0xff, 0x72, 0x28, 0x0d, 0x65, 0x10, 0x16, 0x00, 0x7f, 0x03, 0xf4, 0x5d, 0xe6, 0x97, 0xb7, 0x5f, 0x05, 0xd8, 0x0b, 0xbf, 0xff, 0x00, - 0x1c, 0xbc, 0xa0, 0xbc, 0x74, 0xb9, 0x70, 0xb3, 0xd5, 0x06, 0x70, 0x7f, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x17, 0x3b, 0x28, 0x15, 0x32, 0x28, 0x03, - 0x58, 0x40, 0x28, 0x0f, 0x35, 0x04, 0xe8, 0x07, 0x10, 0x17, 0xf4, 0xff, 0x18, 0x1e, 0x1e, 0xa8, 0x20, 0x01, 0x18, 0x20, 0x06, 0x04, 0x20, 0x05, - 0x18, 0x18, 0xea, 0x22, 0x0d, 0x74, 0x28, 0x17, 0x1a, 0x18, 0xa8, 0x28, 0x17, 0xfb, 0x02, 0x30, 0xbb, 0x30, 0xa4, 0x30, 0xdc, 0x06, 0x48, 0x19, - 0x45, 0xab, 0x28, 0x15, 0x20, 0x2f, 0xb5, 0x65, 0x2f, 0x9f, 0x62, 0x2f, 0xaf, 0x06, 0x90, 0x7f, 0x70, 0x69, 0x06, 0xe0, 0x7f, 0x06, 0xf0, 0xff, - 0x0e, 0x50, 0x7f, 0x5b, 0x8d, 0x21, 0x58, 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0xd8, 0xc5, 0x38, 0xc1, 0x74, 0x1a, 0xc7, 0xf4, 0xbc, 0x06, 0x78, - 0x97, 0x0e, 0xf2, 0xff, 0x2d, 0x48, 0x15, 0x2d, 0x20, 0x00, 0x21, 0x28, 0x17, 0x39, 0x04, 0x31, 0x04, 0x3e, 0xe2, 0x05, 0xe8, 0x17, 0x10, 0x06, - 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x19, 0x07, 0x07, 0x20, 0x01, 0x19, 0xa0, 0x20, 0x06, 0x1c, 0x20, 0x05, 0x19, 0x19, 0x58, 0x0d, 0xe9, 0x00, 0xce, - 0x00, 0x00, 0x1b, 0x18, 0xa2, 0x30, 0xc8, 0x80, 0x28, 0x17, 0xde, 0x30, 0xb8, 0x30, 0xe7, 0x30, 0xfc, 0xd4, 0x28, 0x23, 0x05, 0xff, 0xb0, 0x48, - 0x2f, 0xaf, 0x74, 0x28, 0x0f, 0x20, 0x00, 0x54, 0x4d, 0x2f, 0xb9, 0x79, 0x28, 0x19, 0x72, 0x10, 0x15, 0xc0, 0x7f, 0x3f, 0x96, 0x02, 0x58, 0x62, - 0x6c, 0x9a, 0xa6, 0x7e, 0x06, 0x78, 0x1b, 0x44, 0x00, 0xc5, 0xa0, 0xd1, 0xc8, 0xb9, 0x94, 0xc6, 0x74, 0x60, 0xb9, 0x06, 0x58, 0x9b, 0x0e, 0xf3, - 0x7f, 0x25, 0x04, 0x30, 0x04, 0x42, 0x8a, 0x28, 0x0d, 0x2d, 0x00, 0x1c, 0x20, 0x09, 0x39, 0x28, 0x17, 0x40, 0xc5, 0x05, 0xc8, 0x19, 0x10, 0x16, - 0xf4, 0xff, 0x1a, 0x0a, 0x0a, 0x20, 0x01, 0x1a, 0x20, 0x06, 0x41, 0x1b, 0x20, 0x05, 0x1a, 0x1a, 0x58, 0x0d, 0xc2, 0x28, 0x17, 0x11, 0x1c, 0x18, - 0xe9, 0x28, 0x15, 0xd9, 0x30, 0xac, 0x06, 0x08, 0x0f, 0xa2, 0x7f, 0xff, 0x4c, 0x28, 0x17, 0x20, 0x00, 0x56, 0x2f, 0xaf, 0x67, 0xc0, 0x28, 0x21, - 0x10, 0x16, 0x10, 0x7f, 0xc9, 0x62, 0xf4, 0x7e, 0xa0, 0x52, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x7c, 0xb7, 0xa0, 0xbc, 0x00, 0x68, 0xac, 0x06, - 0x73, 0x7d, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x17, 0x2d, 0x00, 0x12, 0x0c, 0x04, 0x35, 0x04, 0x33, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x1b, 0x0e, - 0x05, 0x0e, 0x0f, 0x0e, 0x0e, 0x1b, 0x20, 0x06, 0x09, 0x20, 0x05, 0x00, 0x1b, 0x1b, 0xaa, 0x0d, 0xdb, 0xcd, 0x00, 0x00, 0x00, 0x1d, 0x18, 0xe2, - 0x30, 0xf3, 0x30, 0xbb, 0x30, 0x01, 0xcb, 0x30, 0xe7, 0x30, 0xfc, 0x30, 0xeb, 0x28, 0x23, 0x06, 0xce, 0x30, 0xa6, 0x30, 0xa8, 0x20, 0x09, 0x05, - 0x7f, 0xb4, 0x4d, 0x8a, 0x2f, 0xab, 0x6e, 0x00, 0x73, 0x28, 0x17, 0xf1, 0x4f, 0xab, 0x20, 0x2a, 0x00, 0x4e, 0x2f, 0xbd, 0x75, 0x28, 0x27, 0x6c, - 0x10, 0x15, 0x40, 0x7f, 0x3b, 0x00, 0x4e, 0x59, 0x65, 0x2d, 0x00, 0x59, 0x74, 0xce, 0x40, 0x9e, 0x06, 0x58, 0x1b, 0xac, 0xba, 0x38, 0xc1, 0xe8, - 0xb1, 0x00, 0x74, 0xb9, 0x78, 0xb1, 0xb0, 0xc6, 0xd8, 0xc5, 0xc0, 0x06, 0x1b, 0x9d, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x54, - 0x41, 0x28, 0x17, 0x3d, 0x20, 0x09, 0x40, 0x28, 0x23, 0x1d, 0x04, 0x01, 0x43, 0x04, 0x4d, 0x04, 0x3b, 0x04, 0x4c, 0x05, 0x48, 0x25, 0x80, 0x10, - 0x16, 0xf4, 0xff, 0x1c, 0x10, 0x10, 0x11, 0x10, 0x10, 0x1c, 0xa0, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x1c, 0x1c, 0x76, 0x0d, 0xee, 0xa8, 0x28, 0x17, - 0x1e, 0x48, 0x17, 0xc6, 0x28, 0x0f, 0xd7, 0x30, 0xe9, 0x34, 0x30, 0xbf, 0x05, 0x88, 0x0d, 0xf8, 0x17, 0x74, 0x2f, 0xaf, 0x20, 0x00, 0x5c, 0x50, - 0x28, 0x0b, 0x61, 0x20, 0x0b, 0x05, 0xbf, 0xb7, 0x10, 0x0e, 0xf0, 0x7f, 0xf6, 0x94, 0x30, 0x71, 0x5c, 0x06, 0x58, 0x11, 0x78, 0x17, 0x4c, 0xd1, - 0x0c, 0xd5, 0x0e, 0x7c, 0xb7, 0xc0, 0xd0, 0x06, 0x50, 0x83, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x42, 0x8a, 0x28, 0x17, 0x2d, 0x00, 0x1f, 0x28, 0x0d, - 0x30, 0x20, 0x0b, 0x30, 0xc0, 0x05, 0x48, 0x11, 0x10, 0x17, 0x54, 0xff, 0x1d, 0x12, 0x12, 0x13, 0x12, 0x12, 0x50, 0x1d, 0x20, 0x06, 0x0e, 0x20, - 0x05, 0x1d, 0x1d, 0x5e, 0x0d, 0x01, 0x61, 0xce, 0x00, 0x00, 0x1f, 0x18, 0xb5, 0x28, 0x17, 0x00, 0xfb, 0x30, 0xaf, 0x30, 0xea, 0x30, 0xb9, 0x30, - 0x05, 0xc8, 0x30, 0xd0, 0x30, 0xeb, 0x05, 0xe8, 0x1b, 0x53, 0x28, 0x09, 0x54, 0x6e, 0x2f, 0xa5, 0x43, 0x2f, 0xab, 0x69, 0x2f, 0xb7, 0x74, 0x00, - 0x1c, 0xf3, 0x00, 0x62, 0x28, 0x1d, 0x05, 0x5f, 0xad, 0x10, 0x0f, 0x10, 0x7f, 0x23, 0x57, 0x00, 0x4b, 0x51, 0xcc, 0x91, 0xaf, 0x65, 0x1a, 0x59, - 0x20, 0x21, 0x58, 0x06, 0x38, 0x1f, 0xb0, 0xc0, 0x6c, 0xd0, 0xac, 0x01, 0xb9, 0xa4, 0xc2, 0xa0, 0xd1, 0x1c, 0xbc, 0x06, 0x38, 0x9d, 0xb6, 0x07, - 0x13, 0x7f, 0xe3, 0x2f, 0x31, 0xd3, 0xff, 0x76, 0x40, 0x13, 0x05, 0x5c, 0xa3, 0x21, 0xa0, 0x28, 0x09, 0x3d, 0x28, 0x13, 0x1a, 0x04, 0x40, 0x04, - 0x38, 0x22, 0x04, 0x41, 0x28, 0x21, 0x3e, 0x04, 0x31, 0x28, 0x1d, 0x3b, 0x31, 0x04, 0x4c, 0x05, 0x48, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x1e, 0x18, - 0x18, 0x20, 0x01, 0x06, 0x1e, 0x1e, 0x18, 0x1d, 0x15, 0x20, 0x05, 0x20, 0x07, 0x0d, 0x62, 0x27, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x05, 0x05, - 0x20, 0x01, 0x01, 0xa2, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x41, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, - 0x30, 0x04, 0x20, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x90, 0x30, 0x04, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x4a, - 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, 0x05, 0x11, 0x05, 0x06, 0x06, 0xd0, 0x01, 0x07, 0x09, 0x09, 0x20, 0x01, 0x50, 0x07, - 0x20, 0x06, 0x1e, 0x20, 0x05, 0x07, 0x07, 0x08, 0x0b, 0x05, 0x0b, 0x0c, 0x0b, 0x0b, 0x08, 0x20, 0x06, 0x07, 0x20, 0x05, 0x00, 0x08, 0x08, 0x09, - 0x0c, 0x0c, 0x0d, 0x0c, 0x0c, 0x51, 0x09, 0x20, 0x06, 0x08, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x14, 0x28, 0x08, 0x0a, 0x20, 0x06, 0x1d, 0x20, - 0x05, 0x0a, 0x0a, 0x0b, 0x02, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0b, 0x20, 0x06, 0x0a, 0xc0, 0x20, 0x05, 0x20, 0x3c, 0x0f, 0x0f, 0x10, 0x0f, 0x0f, - 0x0c, 0xb0, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x20, 0x3c, 0x11, 0x11, 0x12, 0x11, 0x2c, 0x11, 0x0d, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x20, 0x2c, 0x13, - 0x13, 0x0a, 0x14, 0x13, 0x13, 0x0e, 0x20, 0x06, 0x10, 0x20, 0x05, 0x0e, 0x00, 0x0e, 0x0f, 0x14, 0x14, 0x15, 0x14, 0x14, 0x0f, 0xb0, 0x20, 0x06, - 0x11, 0x20, 0x05, 0x20, 0x3c, 0x15, 0x15, 0x16, 0x15, 0x28, 0x15, 0x10, 0x20, 0x06, 0x12, 0x20, 0x05, 0x10, 0x10, 0x11, 0x02, 0x16, 0x16, 0x0b, - 0x16, 0x16, 0x11, 0x20, 0x06, 0x13, 0xca, 0x20, 0x05, 0x20, 0x4c, 0x17, 0x17, 0x20, 0x01, 0x12, 0x20, 0x06, 0x14, 0xc8, 0x20, 0x05, 0x29, 0x5c, - 0x1b, 0x1b, 0x20, 0x01, 0x13, 0x13, 0x1b, 0x32, 0x1a, 0x1a, 0x20, 0x05, 0x20, 0x5c, 0x19, 0x19, 0x20, 0x01, 0x14, 0x0c, 0x14, 0x19, 0x18, 0x17, - 0x20, 0x05, 0x20, 0x5c, 0x1a, 0x1a, 0x83, 0x20, 0x01, 0x15, 0x15, 0x1a, 0x19, 0x16, 0x20, 0x05, 0x20, 0x5c, 0x20, 0x1c, 0x1c, 0x20, 0x01, 0x16, - 0x16, 0x1c, 0x1b, 0x18, 0x88, 0x20, 0x05, 0x16, 0x16, 0x17, 0x39, 0x94, 0x1d, 0x17, 0x17, 0x13, 0x1d, 0x1c, 0x19, 0x20, 0x05, 0x17, 0x17, 0x41, - 0x8c, 0x21, 0x9c, 0x14, 0x1e, 0x1e, 0x04, 0x41, 0xa2, 0x19, 0x31, 0x14, 0x07, 0x19, 0xa2, 0x20, 0x06, 0x1c, 0x20, 0x05, 0x19, 0x19, 0x1a, 0x30, - 0xf4, 0x0a, 0x5c, 0x1a, 0x20, 0x06, 0x1b, 0x20, 0x05, 0x20, 0x74, 0x20, 0xc2, 0x0e, 0x0e, 0x51, 0x1b, 0x20, 0x06, 0x09, 0x20, 0x05, 0x1b, 0x1b, - 0x1c, 0x20, 0xb2, 0x14, 0x10, 0x10, 0x1c, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x1c, 0x1c, 0xe0, 0xf9, 0xff, 0xf1, 0xf7, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xf4, 0xcb, 0x00, 0x11, 0x18, 0x00, 0x00, 0x30, 0x01, 0x19, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd9, 0xff, 0x2e, 0xc8, 0x00, 0x00, 0x00, 0x02, 0x19, 0xd4, 0x30, 0xc1, 0x30, 0xf3, 0x90, - 0x20, 0x03, 0xe3, 0x30, 0x06, 0x58, 0x1f, 0x50, 0x00, 0x69, 0x00, 0x15, 0x63, 0x00, 0x68, 0x20, 0x05, 0x6e, 0x40, 0x07, 0x61, 0x10, 0x15, 0xe0, - 0x7f, 0x00, 0xae, 0x76, 0xa6, 0x94, 0xe5, 0x67, 0x01, 0x77, 0x81, 0x06, 0x7b, 0x1d, 0x3c, 0xd5, 0x5c, 0xce, 0x28, 0xcc, 0x06, 0x9b, 0x9b, 0x82, - 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x38, 0x04, 0x47, 0x20, 0x03, 0x3d, 0x91, 0x20, 0x05, 0x30, 0x04, 0x10, 0x1e, 0x14, 0xff, 0x01, 0x13, 0x13, 0x20, - 0x01, 0x52, 0x01, 0x20, 0x06, 0x10, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x00, 0x19, 0xac, 0x30, 0xe9, 0x30, 0xd1, 0x30, 0xb4, 0x28, 0x30, - 0xb9, 0x06, 0x68, 0x17, 0x47, 0x28, 0x09, 0x6c, 0x00, 0xe1, 0x20, 0x00, 0x70, 0x28, 0x11, 0x67, 0x00, 0x6f, 0x00, 0x73, 0xb1, 0x0e, 0x40, 0x7f, - 0x61, 0xa0, 0xff, 0x39, 0x21, 0x73, 0x00, 0x65, 0x21, 0x15, 0x40, 0x6e, 0x10, 0x05, 0x21, 0x7f, 0xa0, 0x52, 0xc9, 0x62, 0x15, 0x5e, 0x08, 0x08, - 0x62, 0xaf, 0x65, 0x06, 0x58, 0x1b, 0x08, 0xac, 0x7c, 0x01, 0xb7, 0x0c, 0xd3, 0xe0, 0xac, 0xa4, 0xc2, 0x10, 0x06, 0x53, 0x7f, 0x54, 0x13, 0x28, - 0x0d, 0x3b, 0x28, 0x11, 0x3f, 0x28, 0x15, 0x33, 0x04, 0x1c, 0x3e, 0x04, 0x41, 0x05, 0xe8, 0x1b, 0x0f, 0x54, 0xff, 0x10, 0x06, 0x90, 0xff, 0x02, - 0x09, 0x54, 0x09, 0x20, 0x01, 0x02, 0x20, 0x06, 0x03, 0x20, 0x05, 0x02, 0x02, 0x00, 0x5d, 0xff, 0x49, 0xc0, 0x00, 0x00, 0x04, 0x19, 0x44, 0xa2, - 0x28, 0x11, 0xa2, 0x30, 0xa4, 0x06, 0x68, 0x15, 0x00, 0x00, 0x05, 0x41, 0x00, 0x7a, 0x00, 0x75, 0x2f, 0xa5, 0x79, 0x10, 0x16, 0x60, 0x7f, 0x03, - 0x3f, 0x96, 0xcf, 0x82, 0x7e, 0x82, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x00, 0x44, 0xc5, 0x18, 0xc2, 0x44, 0xc5, 0x74, 0xc7, 0xab, 0x10, 0x06, 0x73, - 0x7f, 0x10, 0x28, 0x09, 0x43, 0x28, 0x1b, 0x39, 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x14, 0x03, 0x01, 0x01, 0x20, 0x01, 0x03, 0x40, 0x06, - 0x03, 0x03, 0x04, 0x03, 0x03, 0xf4, 0xfd, 0xd6, 0x24, 0x8b, 0x05, 0x19, 0x00, 0xdc, 0x30, 0xea, 0x30, 0xfc, 0x30, 0xd0, 0x30, 0x50, 0xeb, 0x06, - 0x68, 0x19, 0x42, 0x2f, 0xa3, 0x6c, 0x00, 0xed, 0x00, 0x50, 0x76, 0x2f, 0xb7, 0x72, 0x10, 0x16, 0x20, 0x7f, 0xbb, 0x73, 0x29, 0x52, 0x08, 0xe6, - 0x74, 0x14, 0x5c, 0x06, 0x78, 0x19, 0xfc, 0xbc, 0xac, 0x06, 0xb9, 0x14, 0xbc, 0x74, 0xb9, 0x06, 0x7b, 0x97, 0x0e, 0xf3, 0x7f, 0x11, 0x00, 0x04, - 0x3e, 0x04, 0x3b, 0x04, 0x38, 0x04, 0x32, 0xb1, 0x28, 0x1b, 0x40, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x02, 0x02, 0x20, 0x01, 0x40, - 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0xdd, 0xfe, 0x40, 0xd3, 0x2c, 0xa3, 0x06, 0x19, 0xab, 0x30, 0xcb, 0x30, 0x45, 0xe3, 0x06, 0x88, 0x15, - 0x00, 0x00, 0x43, 0x2f, 0xab, 0xf1, 0x06, 0x68, 0x13, 0x81, 0x10, 0x0f, 0x30, 0x7f, 0x61, 0x53, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x98, 0x17, 0x0d, - 0x74, 0xce, 0xd0, 0xb0, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, 0x0f, 0x06, 0x3d, 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x48, 0x15, 0x10, 0x17, - 0x14, 0xff, 0x05, 0x2a, 0x03, 0x03, 0x20, 0x01, 0x05, 0x20, 0x06, 0x06, 0x20, 0x05, 0x05, 0x0a, 0x05, 0x0f, 0xfe, 0xf1, 0x28, 0x17, 0x07, 0x28, - 0x17, 0xeb, 0x30, 0x30, 0xc1, 0x06, 0x88, 0x15, 0x58, 0x17, 0x72, 0x00, 0x63, 0x00, 0x10, 0x68, 0x00, 0x69, 0x10, 0x16, 0x40, 0x7f, 0x61, 0x53, - 0x14, 0x5c, 0x30, 0x47, 0x59, 0x06, 0x78, 0x15, 0x38, 0x17, 0x74, 0xb9, 0x58, 0xce, 0xc1, 0x10, 0x06, 0x93, 0x7f, 0x38, 0x17, 0x40, 0x04, 0x47, - 0x04, 0x38, 0x06, 0x48, 0x15, 0x8a, 0x10, 0x17, 0x14, 0xff, 0x06, 0x04, 0x04, 0x20, 0x01, 0x06, 0x20, 0x06, 0x07, 0x80, 0x20, 0x05, 0x06, 0x06, - 0x91, 0x00, 0xba, 0xc8, 0x00, 0x00, 0x00, 0x08, 0x19, 0xc1, 0x30, 0xf3, 0x30, 0xdc, 0x0a, 0x30, 0xe9, 0x30, 0xbd, 0x06, 0x68, 0x1b, 0x43, 0x48, - 0x11, 0x6d, 0x08, 0x00, 0x62, 0x00, 0x6f, 0x2f, 0xb3, 0x61, 0x00, 0x7a, 0xc0, 0x20, 0x07, 0x10, 0x15, 0xb0, 0x7f, 0xa6, 0x94, 0x5a, 0x53, 0xc9, - 0x62, 0x20, 0x22, 0x7d, 0x06, 0x78, 0x19, 0x68, 0xce, 0xf4, 0xbc, 0x7c, 0x1a, 0xb7, 0x8c, 0xc1, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, 0x27, 0x28, - 0x11, 0x3c, 0x08, 0x04, 0x31, 0x04, 0x3e, 0x28, 0x1d, 0x30, 0x04, 0x41, 0xc5, 0x20, 0x07, 0x10, 0x1d, 0xd4, 0xff, 0x07, 0x05, 0x05, 0x20, 0x01, - 0x07, 0x20, 0x06, 0x41, 0x16, 0x20, 0x05, 0x07, 0x07, 0xd1, 0xfe, 0x16, 0x28, 0x17, 0x00, 0x09, 0x19, 0xb3, 0x30, 0xc8, 0x30, 0xd1, 0x30, 0x11, - 0xaf, 0x30, 0xb7, 0x06, 0x88, 0x17, 0x6f, 0x00, 0x74, 0x28, 0x13, 0x58, 0x70, 0x2f, 0xb7, 0x78, 0x06, 0x2f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0xd1, - 0x79, 0x58, 0x04, 0x62, 0x15, 0x5e, 0x0c, 0x5e, 0x06, 0x78, 0x17, 0x54, 0xcf, 0x03, 0xa0, 0xd1, 0x0d, 0xd3, 0xdc, 0xc2, 0x06, 0x98, 0x17, 0x0e, - 0xd3, 0x7f, 0x55, 0x1a, 0x28, 0x11, 0x42, 0x28, 0x15, 0x3f, 0x28, 0x15, 0x3a, 0x28, 0x17, 0x62, 0x38, 0x06, 0x08, 0x17, 0x10, 0x16, 0xd4, 0xff, - 0x08, 0x06, 0x06, 0x20, 0x01, 0x08, 0xa0, 0x20, 0x06, 0x08, 0x20, 0x05, 0x08, 0x08, 0x57, 0xff, 0x19, 0x80, 0x28, 0x17, 0x0a, 0x19, 0xa8, 0x30, - 0xeb, 0x30, 0xfb, 0x08, 0x30, 0xaa, 0x30, 0xed, 0x06, 0x68, 0x17, 0x45, 0x00, 0x6c, 0x0e, 0x00, 0x20, 0x00, 0x4f, 0x2f, 0xab, 0x05, 0xdf, 0xa7, - 0x10, 0x0f, 0x70, 0x7f, 0xc3, 0x01, 0x57, 0x14, 0x5c, 0x65, 0x59, 0x57, 0x7f, 0x06, 0x78, 0x17, 0x03, 0xd8, 0xc5, 0x24, 0xc6, 0x5c, 0xb8, 0x06, - 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x00, 0x2d, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x18, 0x1e, 0x04, 0x40, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, - 0x09, 0x07, 0x07, 0xa8, 0x20, 0x01, 0x09, 0x20, 0x06, 0x17, 0x20, 0x05, 0x09, 0x09, 0xae, 0x02, 0xfd, 0x23, 0xc7, 0x00, 0x00, 0x0b, 0x28, 0x17, - 0xb9, 0x0b, 0x30, 0xe1, 0x30, 0xe9, 0x28, 0x1d, 0xc0, 0x20, 0x09, 0x06, 0x38, 0x17, 0x05, 0x73, 0x00, 0x6d, 0x00, 0x65, 0x28, 0x17, 0x61, 0x28, - 0x21, 0x50, 0x64, 0x2f, 0xb5, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0xc3, 0x57, 0xaf, 0x65, 0x00, 0x85, 0x68, 0xc9, 0x62, 0x14, 0x5c, 0xbe, 0x8f, 0x20, - 0xaf, 0x65, 0x06, 0x18, 0x1d, 0xd0, 0xc5, 0xa4, 0xc2, 0x54, 0x01, 0xba, 0x84, 0xb7, 0xe4, 0xb2, 0xa4, 0xc2, 0x06, 0x5b, 0x97, 0x80, 0x0e, 0xd3, - 0x7f, 0x2d, 0x04, 0x41, 0x04, 0x3c, 0x04, 0x35, 0xab, 0x28, 0x15, 0x30, 0x48, 0x21, 0x34, 0x20, 0x07, 0x41, 0x05, 0xa8, 0x1f, 0x10, 0x16, 0xf4, - 0xff, 0x15, 0x0a, 0x08, 0x08, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x18, 0x20, 0x05, 0x04, 0x0a, 0x0a, 0xb3, 0x00, 0x54, 0x28, 0x17, 0x0c, 0x19, 0x06, - 0xb0, 0x30, 0xa2, 0x30, 0xe4, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x47, 0x2c, 0x00, 0x75, 0x28, 0x11, 0x79, 0x06, 0x08, 0x0f, 0x10, 0x0f, 0x70, 0x7f, - 0xdc, 0x74, 0x31, 0x9a, 0x4e, 0x06, 0x38, 0x0f, 0x7f, 0xff, 0xfc, 0xac, 0x7c, 0x28, 0x19, 0xc5, 0x06, 0x73, 0x7d, 0x0f, 0x13, 0x7f, 0x13, 0x04, - 0x43, 0x28, 0x11, 0x4f, 0x05, 0xc8, 0x0b, 0xa5, 0x10, 0x17, 0xb4, 0xff, 0x0b, 0x38, 0x0c, 0x0a, 0x0b, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x0b, - 0x0b, 0x76, 0xfe, 0x2f, 0x28, 0x17, 0x0d, 0x19, 0x00, 0xa4, 0x30, 0xf3, 0x30, 0xd0, 0x30, 0xd6, 0x30, 0x55, 0xe9, 0x06, 0x68, 0x19, 0x49, 0x2f, - 0xad, 0x62, 0x2f, 0xab, 0x62, 0x28, 0x1f, 0xc0, 0x3f, 0xb3, 0x10, 0x15, 0xf0, 0x7f, 0xe0, 0x56, 0xf4, 0x5d, 0x03, 0x5e, 0x20, 0xc9, 0x62, 0x06, - 0x78, 0x19, 0x84, 0xc7, 0x14, 0xbc, 0x80, 0x18, 0xbd, 0x7c, 0xb7, 0x06, 0x7b, 0x97, 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x3c, 0x2b, 0x04, 0x31, 0x28, - 0x19, 0x31, 0x28, 0x1f, 0x40, 0x28, 0x21, 0x10, 0x1d, 0xf4, 0xff, 0x4a, 0x0c, 0x38, 0x0c, 0x0b, 0x0c, 0x20, 0x06, 0x05, 0x20, 0x05, 0x0c, 0x00, - 0x0c, 0x3f, 0x00, 0x74, 0xc8, 0x00, 0x00, 0x0e, 0x0c, 0x19, 0xed, 0x30, 0xcf, 0x06, 0x68, 0x11, 0x5f, 0xff, 0x4c, 0x00, 0x18, 0x6f, 0x00, 0x6a, - 0x06, 0x28, 0x0f, 0x10, 0x0f, 0x70, 0x7f, 0x1b, 0x6d, 0xc8, 0x61, 0x54, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x5c, 0xb8, 0x58, 0xd5, 0x10, 0x06, 0xb3, - 0x7f, 0x06, 0x1b, 0x04, 0x3e, 0x04, 0x45, 0x06, 0x28, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x0d, 0x94, 0x38, 0x0c, 0x0c, 0x0d, 0x20, 0x06, 0x0a, 0x20, - 0x05, 0x0d, 0x0d, 0x01, 0x28, 0xfd, 0xac, 0xc7, 0x00, 0x00, 0x0f, 0x28, 0x17, 0x01, 0xb9, 0x30, 0xfb, 0x30, 0xea, 0x30, 0xaa, 0x20, 0x07, 0x80, - 0x06, 0x78, 0x17, 0x73, 0x00, 0x20, 0x00, 0x52, 0x00, 0xed, 0xc0, 0x40, 0x09, 0x10, 0x15, 0xf0, 0x7f, 0x1b, 0x6d, 0xaf, 0x65, 0xcc, 0x91, 0x08, - 0x65, 0x59, 0xaf, 0x65, 0x06, 0x58, 0x1d, 0x5c, 0xb8, 0xa4, 0x00, 0xc2, 0x20, 0x00, 0xac, 0xb9, 0x24, 0xc6, 0xa4, 0x60, 0xc2, 0x10, 0x06, 0x33, - 0x7f, 0x38, 0x17, 0x41, 0x04, 0x2d, 0x00, 0x20, 0x34, 0x04, 0x38, 0x40, 0x09, 0x10, 0x1d, 0xf4, 0xff, 0x0e, 0x38, 0x0c, 0x0d, 0x0e, 0xa0, 0x20, - 0x06, 0x09, 0x20, 0x05, 0x0e, 0x0e, 0xb6, 0xfe, 0x75, 0x80, 0x28, 0x17, 0x10, 0x19, 0xde, 0x30, 0xca, 0x30, 0xd3, 0xd5, 0x06, 0x48, 0x11, 0x5f, - 0xff, 0x4d, 0x2f, 0xab, 0x6e, 0x2f, 0xaf, 0x62, 0x28, 0x17, 0x81, 0x10, 0x16, 0x30, 0x7f, 0x6c, 0x9a, 0xb3, 0x7e, 0xd4, 0x6b, 0x06, 0x58, 0x13, - 0x81, 0x3f, 0xff, 0xc8, 0xb9, 0x98, 0xb0, 0x44, 0xbe, 0x10, 0x06, 0x93, 0x7f, 0x05, 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x31, 0x28, 0x17, - 0xa5, 0x10, 0x1e, 0x34, 0xff, 0x0f, 0x38, 0x0c, 0x0e, 0x0f, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x00, 0x0f, 0x0f, 0x41, 0xff, 0xcb, 0xc6, 0x00, 0x00, - 0x04, 0x11, 0x19, 0xe2, 0x30, 0xed, 0x28, 0x19, 0xfb, 0x30, 0x00, 0xb5, 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0x15, 0xa2, 0x30, 0xb4, 0x05, - 0xc8, 0x25, 0x4d, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x88, 0x38, 0x1b, 0x2d, 0x00, 0x53, 0x48, 0x25, 0x74, 0x00, 0x69, 0xb6, 0x28, 0x2d, 0x67, 0x2f, - 0xc9, 0x0d, 0xd0, 0x7f, 0x20, 0x0e, 0xe0, 0x7f, 0x06, 0x31, 0xff, 0xab, 0x00, 0x83, 0x57, 0x7f, 0xb3, 0x7e, 0x2d, 0x00, 0x23, 0x01, 0x57, 0x30, - 0x57, 0x9a, 0x4e, 0xe5, 0x54, 0x05, 0xf8, 0x21, 0x00, 0xa8, 0xba, 0x5c, 0xb8, 0x98, 0xb0, 0x20, 0x00, 0x00, 0xb0, 0xc0, 0xf0, 0xd2, 0x44, 0xc5, - 0xe0, 0xac, 0xc1, 0x06, 0x1b, 0x97, 0x0e, 0xd3, 0x7f, 0x1c, 0x04, 0x3e, 0x04, 0x40, 0x20, 0x03, 0x88, 0x38, 0x1b, 0x2d, 0x00, 0x21, 0x48, 0x25, - 0x42, 0x04, 0x4c, 0x0e, 0x04, 0x4f, 0x04, 0x33, 0x20, 0x19, 0x10, 0x05, 0xd4, 0xff, 0x10, 0x06, 0x30, 0xff, 0x10, 0x94, 0x38, 0x0c, 0x0f, 0x10, - 0x20, 0x06, 0x0c, 0x20, 0x05, 0x10, 0x10, 0x00, 0x5b, 0xfe, 0x74, 0xc8, 0x00, 0x00, 0x12, 0x19, 0x06, 0xd1, 0x30, 0xb9, 0x30, 0xbf, 0x28, 0x15, - 0x06, 0x7d, 0x2f, 0x50, 0xa3, 0x2f, 0xaf, 0x73, 0x28, 0x09, 0x61, 0x00, 0x7a, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, 0x00, 0x15, 0x5e, 0xaf, 0x65, - 0x54, 0x58, 0x28, 0x84, 0xc0, 0x05, 0xf8, 0x0f, 0x7f, 0xff, 0x0c, 0xd3, 0xa4, 0xc2, 0xc0, 0xd0, 0x2b, 0xac, 0xc0, 0x10, 0x06, 0x73, 0x7f, 0x1f, - 0x28, 0x0f, 0x41, 0x28, 0x09, 0x30, 0x05, 0x62, 0x30, 0x05, 0x28, 0x07, 0x10, 0x17, 0xf4, 0xff, 0x11, 0x12, 0x12, 0x20, 0x01, 0x11, 0xa0, 0x20, - 0x06, 0x0f, 0x20, 0x05, 0x11, 0x11, 0xf6, 0xfe, 0x8c, 0x80, 0x28, 0x17, 0x13, 0x19, 0xc8, 0x30, 0xa5, 0x30, 0xf3, 0x02, 0x30, 0xb0, 0x30, 0xe9, - 0x30, 0xef, 0x06, 0x48, 0x1b, 0x54, 0x2a, 0x00, 0x75, 0x2f, 0xab, 0x67, 0x20, 0x05, 0x72, 0x2f, 0xb1, 0x68, 0xe0, 0x20, 0x0d, 0x05, 0xd8, 0x1d, - 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x90, 0xe4, 0x53, 0xc9, 0x10, 0x62, 0xe6, 0x74, 0x06, 0x78, 0x17, 0x41, 0xd2, 0xf8, 0xad, 0x03, 0x7c, 0xb7, 0xb0, - 0xc6, 0x44, 0xc5, 0x06, 0x5b, 0x99, 0x0e, 0xf3, 0x7f, 0x01, 0x22, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x3a, 0x20, 0x05, 0x5c, 0x40, 0x28, 0x21, 0x33, - 0x20, 0x0d, 0x05, 0xd8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x17, 0x54, 0x17, 0x20, 0x01, 0x12, 0x20, 0x06, 0x15, 0x20, 0x05, 0x12, 0x12, 0x10, - 0x1d, 0xff, 0x19, 0x28, 0x17, 0x14, 0x19, 0xb5, 0x30, 0x44, 0xe2, 0x28, 0x13, 0xfb, 0x30, 0xc1, 0x28, 0x1d, 0xc1, 0x30, 0x51, 0xda, 0x06, 0x08, - 0x1b, 0x5a, 0x2f, 0xaf, 0x6d, 0x00, 0x6f, 0x48, 0x15, 0x15, 0x2d, 0x00, 0x43, 0x28, 0x19, 0x69, 0x28, 0x27, 0x63, 0x40, 0x07, 0x16, 0x70, 0x00, - 0x65, 0x0d, 0xc0, 0x7f, 0x20, 0x0e, 0xe0, 0x7f, 0x06, 0x31, 0xff, 0x28, 0x00, 0x84, 0xab, 0x83, 0xc9, 0x62, 0x2d, 0x00, 0xa6, 0x04, 0x94, 0x47, - 0x59, 0x69, 0x4f, 0x06, 0x18, 0x1d, 0xac, 0xc0, 0x00, 0xa8, 0xba, 0x7c, 0xb7, 0x20, 0x00, 0x5c, 0xce, 0x0d, 0x58, 0xce, 0x98, 0xd3, 0x06, 0x1f, - 0xb0, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x0d, 0x10, 0x3c, 0x04, 0x3e, 0x48, 0x15, 0x2d, 0x00, 0x27, 0x04, 0x51, 0x38, 0x28, 0x25, 0x47, 0x20, 0x05, - 0x3f, 0x04, 0x35, 0x05, 0x48, 0x1f, 0xc5, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x30, 0xff, 0x13, 0x18, 0x18, 0x20, 0x01, 0x13, 0x20, 0x06, 0x40, 0x11, - 0x20, 0x05, 0x13, 0x13, 0x1c, 0xfd, 0xdb, 0xc7, 0x01, 0x00, 0x00, 0x15, 0x19, 0xb9, 0x30, 0xaf, 0x28, 0x11, 0x06, 0xd3, 0x30, 0xaa, 0x30, 0xb9, - 0x06, 0x08, 0x13, 0x3f, 0xff, 0x53, 0xa2, 0x2f, 0xaf, 0x63, 0x2f, 0xb3, 0x6d, 0x00, 0x62, 0x28, 0x11, 0x6f, 0x28, 0x00, 0x73, 0x06, 0xa0, 0x7f, - 0xed, 0x10, 0x0e, 0x20, 0x7f, 0xcf, 0x82, 0x06, 0x01, 0x66, 0xd5, 0x6b, 0x65, 0x59, 0xaf, 0x65, 0x06, 0x18, 0x13, 0x80, 0x3f, 0xff, 0xa4, 0xc2, - 0xf0, 0xcf, 0x44, 0xbe, 0x24, 0x18, 0xc6, 0xa4, 0xc2, 0x06, 0x33, 0x7d, 0x0f, 0x12, 0xff, 0x21, 0x04, 0x43, 0x22, 0x04, 0x3a, 0x20, 0x03, 0x3c, - 0x04, 0x31, 0x28, 0x13, 0x3e, 0x38, 0x04, 0x41, 0x05, 0x48, 0x0d, 0x08, 0x54, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x14, 0x16, 0x16, 0xa8, 0x20, 0x01, - 0x14, 0x20, 0x06, 0x14, 0x20, 0x05, 0x14, 0x14, 0x0f, 0x00, 0x00, 0x54, 0xc9, 0x00, 0x00, 0x16, 0x19, 0xca, 0x35, 0x30, 0xdd, 0x06, 0x48, 0x0f, - 0x7f, 0xff, 0x4e, 0x2f, 0xaf, 0x70, 0x2f, 0xaf, 0x86, 0x10, 0x16, 0x70, 0x7f, 0xb3, 0x7e, 0xe2, 0x6c, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x98, 0x10, - 0xb0, 0xec, 0xd3, 0x10, 0x06, 0xb3, 0x7f, 0x1d, 0x04, 0x30, 0x04, 0x62, 0x3f, 0x28, 0x0f, 0x10, 0x1e, 0x74, 0xff, 0x15, 0x10, 0x10, 0x20, 0x01, - 0x15, 0xa0, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x15, 0x15, 0x4d, 0xff, 0xaa, 0x00, 0xc8, 0x00, 0x00, 0x17, 0x19, 0xaa, 0x30, 0xec, 0x02, 0x30, 0xea, - 0x30, 0xe3, 0x30, 0xca, 0x06, 0x68, 0x1d, 0x4f, 0x02, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6c, 0x20, 0x01, 0x61, 0x30, 0x00, 0x6e, 0x28, 0x23, 0x10, - 0x15, 0xf0, 0x7f, 0x65, 0x59, 0xf7, 0x96, 0x02, 0x29, 0x52, 0x9a, 0x4e, 0xb3, 0x7e, 0x06, 0x58, 0x1d, 0x24, 0x01, 0xc6, 0x10, 0xb8, 0x7c, 0xb7, - 0x98, 0xb0, 0x06, 0x7b, 0x9b, 0x80, 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x40, 0x04, 0x35, 0x04, 0x3b, 0x03, 0x04, 0x4c, 0x04, 0x4f, 0x04, 0x3d, 0x28, - 0x23, 0x10, 0x1d, 0xf4, 0xff, 0x15, 0x16, 0x11, 0x11, 0x20, 0x01, 0x16, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x00, 0x16, 0x16, 0x6f, 0xff, 0xb2, 0xc9, - 0x00, 0x00, 0x00, 0x18, 0x19, 0xb5, 0x30, 0xf3, 0x30, 0xbf, 0x30, 0x15, 0xfb, 0x30, 0xa8, 0x28, 0x1f, 0xfc, 0x06, 0x28, 0x1d, 0x53, 0x48, 0x0f, - 0x45, 0x74, 0x2f, 0xb5, 0x20, 0x00, 0x45, 0x28, 0x1f, 0x65, 0x05, 0xe8, 0x1d, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x23, 0x57, 0xc3, 0x57, 0x26, 0x4f, - 0x1c, 0x40, 0x5a, 0x06, 0x58, 0x15, 0x00, 0x00, 0xb0, 0xc0, 0xc0, 0xd0, 0x0d, 0xd8, 0xc5, 0x08, 0xb8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, - 0x28, 0x0b, 0x11, 0x3d, 0x04, 0x42, 0x28, 0x11, 0x20, 0x00, 0x2d, 0x28, 0x1f, 0x62, 0x35, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x17, 0x14, - 0x14, 0x20, 0x01, 0x17, 0xa0, 0x20, 0x06, 0x12, 0x20, 0x05, 0x17, 0x17, 0x6b, 0xfe, 0x81, 0x0a, 0xc6, 0x00, 0x00, 0x19, 0x48, 0x17, 0xc8, 0x28, - 0x17, 0xc9, 0x2a, 0x30, 0xdf, 0x28, 0x21, 0xb4, 0x28, 0x21, 0xc7, 0x28, 0x25, 0xed, 0x20, 0x30, 0xb9, 0x28, 0x2b, 0xc4, 0x30, 0xa1, 0x30, 0xc1, - 0x35, 0x30, 0xe9, 0x20, 0x0b, 0x05, 0x18, 0x17, 0x6f, 0x28, 0x17, 0x44, 0x20, 0x05, 0x15, 0x6d, 0x00, 0x69, 0x2f, 0xb7, 0x67, 0x40, 0x0f, 0x64, - 0x2f, 0xc9, 0x45, 0x20, 0x2f, 0xcb, 0x6f, 0x00, 0x73, 0x28, 0x35, 0x54, 0x20, 0x05, 0x06, 0xe1, 0x00, 0x63, 0x00, 0x68, 0x20, 0x21, 0x3f, 0xdd, - 0x73, 0x80, 0x10, 0x13, 0x40, 0x7f, 0x23, 0x57, 0x1a, 0x59, 0x0e, 0x66, 0x04, 0x00, 0x54, 0x2d, 0x00, 0xb7, 0x5f, 0x1b, 0x6d, 0xaf, 0x00, 0x65, - 0xe5, 0x67, 0x47, 0x59, 0xc9, 0x62, 0xaf, 0x40, 0x65, 0x05, 0x78, 0x27, 0xb0, 0xc0, 0xa0, 0xd1, 0xc4, 0xb3, 0x00, 0x0d, 0xbc, 0xe0, 0xac, 0x78, - 0xb3, 0x5c, 0xb8, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0xac, 0xc0, 0x60, 0xce, 0x0e, 0x7c, 0xb7, 0xa4, 0xc2, 0x05, 0xdb, 0x97, 0x0e, 0x73, 0x7f, 0x78, - 0x17, 0x3e, 0xa2, 0x28, 0x17, 0x14, 0x20, 0x05, 0x3c, 0x04, 0x38, 0x28, 0x27, 0x33, 0xa2, 0x40, 0x0f, 0x34, 0x28, 0x25, 0x20, 0x00, 0x3b, 0x20, - 0x1b, 0x41, 0xa2, 0x28, 0x35, 0x22, 0x20, 0x05, 0x30, 0x04, 0x47, 0x20, 0x1f, 0x3b, 0xb1, 0x28, 0x4b, 0x41, 0x03, 0x68, 0x3b, 0x10, 0x16, 0xf4, - 0xff, 0x18, 0x15, 0x15, 0x20, 0x01, 0x50, 0x18, 0x20, 0x06, 0x13, 0x20, 0x05, 0x18, 0x18, 0xd3, 0xff, 0x22, 0xb8, 0xc7, 0x00, 0x3f, 0xff, 0x01, - 0x13, 0x13, 0x20, 0x01, 0x01, 0xa0, 0x20, 0x06, 0x10, 0x20, 0x05, 0x01, 0x01, 0x02, 0x09, 0x09, 0xa8, 0x20, 0x01, 0x02, 0x20, 0x06, 0x03, 0x20, - 0x05, 0x02, 0x02, 0x03, 0x90, 0x30, 0x14, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x48, 0x04, 0x30, 0x14, 0x02, 0x04, 0x40, 0x06, 0x04, - 0x04, 0x04, 0x25, 0x04, 0x05, 0x30, 0x14, 0x03, 0x05, 0x20, 0x06, 0x06, 0x20, 0x05, 0x12, 0x05, 0x05, 0x06, 0x30, 0x14, 0x04, 0x06, 0x20, 0x06, - 0x07, 0x89, 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, 0x14, 0x05, 0x07, 0x20, 0x06, 0x44, 0x16, 0x20, 0x05, 0x07, 0x07, 0x08, 0x30, 0x14, 0x06, 0x08, - 0xa2, 0x20, 0x06, 0x08, 0x20, 0x05, 0x08, 0x08, 0x09, 0x30, 0x14, 0x07, 0x51, 0x09, 0x20, 0x06, 0x17, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x14, - 0x28, 0x08, 0x0a, 0x20, 0x06, 0x18, 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x94, 0x30, 0x04, 0x0a, 0x0b, 0x20, 0x06, 0x04, 0x20, 0x05, 0x0b, 0x0b, 0x4a, - 0x0c, 0x30, 0x04, 0x0b, 0x0c, 0x20, 0x06, 0x05, 0x20, 0x05, 0x0c, 0x25, 0x0c, 0x0d, 0x30, 0x04, 0x0c, 0x0d, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x12, - 0x0d, 0x0d, 0x0e, 0x30, 0x04, 0x0d, 0x0e, 0x20, 0x06, 0x09, 0x89, 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x30, 0x04, 0x0e, 0x0f, 0x20, 0x06, 0x44, 0x0b, - 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x30, 0x04, 0x0f, 0x10, 0xa0, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x10, 0x10, 0x11, 0x12, 0x12, 0xae, 0x20, 0x01, 0x11, - 0x20, 0x06, 0x0f, 0x20, 0x05, 0x20, 0x07, 0x39, 0x44, 0x17, 0x51, 0x12, 0x20, 0x06, 0x15, 0x20, 0x05, 0x12, 0x12, 0x13, 0x31, 0x3c, 0x28, 0x18, - 0x13, 0x20, 0x06, 0x11, 0x20, 0x05, 0x13, 0x13, 0x14, 0x2a, 0x16, 0x16, 0x20, 0x01, 0x14, 0x20, 0x06, 0x14, 0x20, 0x05, 0x14, 0x25, 0x14, 0x15, - 0x30, 0x44, 0x10, 0x15, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x12, 0x15, 0x15, 0x16, 0x30, 0x44, 0x11, 0x16, 0x20, 0x06, 0x0e, 0x9c, 0x20, 0x05, 0x16, - 0x16, 0xf9, 0x9f, 0xf1, 0x97, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, 0x11, 0x0e, 0x00, 0x00, - 0x30, 0x01, 0x1a, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xbf, 0x09, 0x92, 0xc0, 0x00, 0x00, 0x00, - 0x02, 0x1a, 0xb5, 0x30, 0xf3, 0x30, 0xfb, 0x00, 0x30, 0xb5, 0x30, 0xeb, 0x30, 0xd0, 0x30, 0xc9, 0x90, 0x20, 0x05, 0x0c, 0x77, 0x05, 0xd8, 0x27, - 0x53, 0x00, 0x61, 0x00, 0x11, 0x6e, 0x00, 0x20, 0x40, 0x07, 0x6c, 0x00, 0x76, 0x20, 0x0d, 0x04, 0x64, 0x00, 0x6f, 0x00, 0x72, 0x10, 0x15, 0x80, - 0x7f, 0x23, 0x57, 0x00, 0x28, 0x84, 0x14, 0x5c, 0xe6, 0x74, 0x1a, 0x59, 0x60, 0x01, 0x05, 0xe2, 0xf9, 0x5b, 0x98, 0xb0, 0xc0, 0xb4, 0xc0, 0x14, - 0x00, 0xbc, 0xc4, 0xb3, 0x74, 0xb9, 0x20, 0x00, 0xfc, 0x60, 0xc8, 0x06, 0x1b, 0xa3, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x04, - 0x2d, 0x40, 0x07, 0x3b, 0x04, 0x4c, 0x04, 0x32, 0x81, 0x20, 0x0f, 0x34, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x10, 0x1d, 0x54, 0xff, 0x14, 0x01, 0x0a, - 0x0a, 0x20, 0x01, 0x01, 0x40, 0x06, 0x01, 0x01, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x1a, 0xa2, 0x30, 0xef, 0x03, 0x30, 0xc1, 0x30, 0xe3, 0x30, - 0xd1, 0x28, 0x1f, 0x05, 0xf8, 0x13, 0x82, 0x3f, 0xff, 0x41, 0x00, 0x68, 0x00, 0x75, 0x28, 0x1b, 0x63, 0x83, 0x20, 0x07, 0x61, 0x00, 0x70, 0x00, - 0xe1, 0x28, 0x25, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x3f, 0x96, 0xe6, 0x74, 0xe5, 0x67, 0x58, 0x6f, 0x80, 0x06, 0x58, 0x15, 0x00, 0x00, 0x44, 0xc5, - 0xb0, 0xc6, 0x44, 0x06, 0xc5, 0x28, 0xcc, 0x10, 0xd3, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x10, 0x2b, 0x04, 0x43, 0x28, 0x19, 0x47, 0x28, 0x1d, - 0x3f, 0x48, 0x21, 0x10, 0x1d, 0xf4, 0xff, 0x48, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x08, 0x02, 0xe6, 0x09, 0x1d, 0x28, - 0x17, 0x04, 0x1a, 0xab, 0x0a, 0x30, 0xd0, 0x30, 0xcb, 0x28, 0x17, 0xb9, 0x06, 0x48, 0x15, 0x00, 0x2a, 0x00, 0x43, 0x2f, 0xaf, 0x62, 0x2f, 0xb3, - 0xf1, 0x2f, 0xb7, 0x73, 0x80, 0x10, 0x16, 0x20, 0x7f, 0x61, 0x53, 0xe6, 0x74, 0x3c, 0x5c, 0x9a, 0x10, 0x4e, 0xaf, 0x65, 0x06, 0x58, 0x19, 0x74, - 0xce, 0x14, 0xbc, 0x0d, 0xd0, 0xb0, 0xa4, 0xc2, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, 0x15, 0x46, 0x31, 0x48, 0x11, 0x30, 0x04, 0x41, - 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x03, 0x90, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x11, 0xdc, 0x09, 0xf9, 0x28, - 0x17, 0x05, 0x1a, 0xc1, 0x28, 0x13, 0x00, 0xe9, 0x30, 0xc6, 0x30, 0xca, 0x30, 0xf3, 0x30, 0x54, 0xb4, 0x06, 0x28, 0x1b, 0x43, 0x4f, 0xa7, 0x6c, - 0x2f, 0xb1, 0x74, 0x00, 0x51, 0x65, 0x2f, 0xab, 0x61, 0x2f, 0xaf, 0x67, 0x00, 0x6f, 0x10, 0x15, 0x80, 0x7f, 0x00, 0xe5, 0x67, 0xc9, 0x62, 0x79, - 0x72, 0x57, 0x53, 0x20, 0x08, 0x62, 0x06, 0x58, 0x17, 0x30, 0xcc, 0x7c, 0xb7, 0x4c, 0x06, 0xd1, 0xad, 0xb0, 0xe0, 0xac, 0x06, 0x58, 0x19, 0x0e, - 0xf3, 0x7f, 0x27, 0xa2, 0x28, 0x17, 0x3b, 0x28, 0x1b, 0x42, 0x04, 0x35, 0x48, 0x1b, 0x3d, 0x0d, 0x04, 0x33, 0x04, 0x3e, 0x05, 0xa8, 0x1f, 0x10, - 0x16, 0xf4, 0xff, 0x04, 0x38, 0x0c, 0x28, 0x03, 0x04, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x04, 0x04, 0xfa, 0x20, 0x09, 0xc3, 0x28, 0x17, 0x06, 0x1a, - 0xaf, 0x30, 0xb9, 0x0b, 0x30, 0xab, 0x30, 0xc8, 0x28, 0x1b, 0xf3, 0x06, 0x28, 0x15, 0x3f, 0xaf, 0x51, 0x75, 0x2f, 0xa7, 0x63, 0x48, 0x17, 0x6c, - 0x00, 0xe1, 0x28, 0x19, 0x80, 0x10, 0x15, 0xd0, 0x7f, 0x93, 0x5e, 0xaf, 0x65, 0x61, 0x53, 0x79, 0x10, 0x72, 0x70, 0x51, 0x06, 0x58, 0x17, 0xe0, - 0xcf, 0xa4, 0xc2, 0x03, 0x74, 0xce, 0xc0, 0xd2, 0x80, 0xb7, 0x06, 0x78, 0x17, 0x0e, 0xd3, 0x7f, 0x01, 0x1a, 0x04, 0x43, 0x04, 0x41, 0x04, 0x3a, - 0x48, 0x19, 0xb4, 0x38, 0x1f, 0x3d, 0x05, 0xa8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0xa2, 0x20, 0x06, 0x03, 0x20, 0x05, - 0x05, 0x05, 0xc1, 0x48, 0x17, 0x07, 0x00, 0x1a, 0xe9, 0x30, 0xfb, 0x30, 0xea, 0x30, 0xd9, 0x02, 0x30, 0xeb, 0x30, 0xbf, 0x30, 0xfc, 0x06, 0x28, - 0x19, 0x4c, 0xa2, 0x2f, 0xad, 0x20, 0x20, 0x05, 0x69, 0x00, 0x62, 0x2f, 0xaf, 0x72, 0x88, 0x2f, 0xb5, 0x61, 0x00, 0x64, 0x10, 0x15, 0xa0, 0x7f, - 0xc9, 0x62, 0x29, 0x01, 0x52, 0x2f, 0x4f, 0x54, 0x58, 0xb7, 0x5f, 0x06, 0x58, 0x17, 0x00, 0x7c, 0xb7, 0xac, 0xb9, 0xa0, 0xbc, 0x74, 0xb9, 0x0d, - 0xc0, 0xd0, 0xdc, 0xb4, 0x06, 0x38, 0x19, 0x0e, 0xf3, 0x7f, 0x1b, 0x28, 0x11, 0x40, 0x2d, 0x20, 0x05, 0x38, 0x04, 0x31, 0x04, 0x35, 0x04, 0x46, - 0x40, 0x28, 0x1d, 0x30, 0x04, 0x34, 0x05, 0xa8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x94, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x04, 0x20, 0x05, - 0x06, 0x06, 0x14, 0xb9, 0x09, 0x84, 0x28, 0x17, 0x08, 0x28, 0x17, 0xd1, 0x30, 0x6a, 0xb9, 0x06, 0x28, 0x0f, 0xd8, 0x17, 0x50, 0x2f, 0xaf, 0x7a, - 0x10, 0x16, 0x40, 0x7f, 0xc9, 0x06, 0x62, 0xf4, 0x5d, 0xaf, 0x65, 0x06, 0x58, 0x13, 0x58, 0x17, 0x0c, 0x1d, 0xd3, 0xa4, 0xc2, 0x06, 0x38, 0x11, - 0x0f, 0x53, 0x7f, 0x58, 0x17, 0x1f, 0x28, 0x1d, 0x69, 0x41, 0x05, 0xa8, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, - 0x41, 0x05, 0x20, 0x05, 0x07, 0x07, 0x99, 0x09, 0xcf, 0x28, 0x17, 0x40, 0x09, 0x28, 0x17, 0xfb, 0x30, 0xa6, 0x30, 0xcb, 0x30, 0x18, 0xaa, 0x30, - 0xf3, 0x06, 0x48, 0x1d, 0x5f, 0xaf, 0x55, 0x00, 0x6e, 0xb0, 0x2f, 0xb1, 0xf3, 0x20, 0x05, 0x10, 0x15, 0xf0, 0x7f, 0xc9, 0x62, 0x4c, 0x4e, 0x08, - 0x3c, 0x5c, 0xc1, 0x7f, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0xb0, 0x07, 0xc6, 0xc8, 0xb2, 0x28, 0xc6, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x58, 0x17, - 0x01, 0x23, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3e, 0x20, 0x05, 0xa5, 0x10, 0x1d, 0xf4, 0xff, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x20, 0x06, 0x06, 0x20, - 0x05, 0x00, 0x08, 0x08, 0x7b, 0x09, 0x89, 0xc1, 0x00, 0x00, 0x01, 0x0a, 0x1a, 0xe2, 0x30, 0xe9, 0x30, 0xb5, 0x06, 0x68, 0x13, 0x82, 0x3f, 0xff, - 0x4d, 0x00, 0x6f, 0x00, 0x72, 0x4f, 0xad, 0xe1, 0xc0, 0x06, 0x28, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0xab, 0x83, 0xc9, 0x62, 0x51, 0x68, 0x85, 0x06, - 0x78, 0x15, 0x00, 0x00, 0xa8, 0xba, 0x28, 0x19, 0xc0, 0x06, 0x78, 0x15, 0xab, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x0d, 0x40, 0x28, 0x1b, 0x41, 0x28, - 0x1f, 0x06, 0x18, 0x15, 0xa5, 0x10, 0x17, 0x14, 0xff, 0x09, 0x38, 0x0c, 0x08, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, 0x04, 0x09, 0x09, 0xbe, 0x09, - 0x5a, 0x28, 0x17, 0x0b, 0x1a, 0x80, 0x38, 0x13, 0xfb, 0x30, 0xdf, 0x30, 0xb2, 0x30, 0xeb, 0xaa, 0x06, 0x48, 0x1b, 0x53, 0x2f, 0xaf, 0x6e, 0x2f, - 0xb1, 0x4d, 0x2f, 0xaf, 0x67, 0x02, 0x00, 0x75, 0x00, 0x65, 0x00, 0x6c, 0x10, 0x15, 0xc0, 0x7f, 0x23, 0x01, 0x57, 0x73, 0x7c, 0x3c, 0x68, 0x14, - 0x5c, 0x06, 0x78, 0x19, 0x03, 0xb0, 0xc0, 0xf8, 0xbb, 0x94, 0xac, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x50, 0x21, 0x48, 0x0f, 0x2d, 0x28, 0x1f, - 0x38, 0x04, 0x33, 0x04, 0x06, 0x35, 0x04, 0x3b, 0x04, 0x4c, 0x05, 0xc8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x90, 0x38, 0x0c, 0x09, 0x0a, 0x40, - 0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x15, 0x96, 0x09, 0x4b, 0x28, 0x17, 0x0c, 0x48, 0x17, 0xbf, 0x28, 0x19, 0x14, 0xa2, 0x30, 0xca, 0x06, 0xa8, 0x17, - 0x74, 0x2f, 0xb1, 0x20, 0x00, 0x50, 0x41, 0x2f, 0xb1, 0x61, 0x10, 0x15, 0xe0, 0x7f, 0x23, 0x57, 0x89, 0x5b, 0x30, 0x1c, 0x5a, 0x06, 0x78, 0x15, - 0x38, 0x17, 0xc0, 0xd0, 0x44, 0xc5, 0x3a, 0x98, 0xb0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x42, 0x28, 0x1d, 0x2d, 0x2c, 0x00, 0x10, - 0x28, 0x21, 0x30, 0x05, 0xc8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0b, 0x0c, 0x54, 0x0c, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x0b, 0x0b, - 0x01, 0xf3, 0x09, 0x51, 0xc0, 0x00, 0x00, 0x0d, 0x48, 0x17, 0x14, 0xd3, 0x30, 0xbb, 0x28, 0x1d, 0xc6, 0x06, 0xa8, 0x17, 0x20, 0x00, 0x5a, 0x56, - 0x2f, 0xaf, 0x63, 0x2f, 0xad, 0x38, 0x23, 0x65, 0x10, 0x15, 0xa0, 0x7f, 0x23, 0x01, 0x57, 0xf4, 0x7e, 0xee, 0x68, 0x79, 0x72, 0x06, 0x78, 0x19, - 0x00, 0xb0, 0xc0, 0x44, 0xbe, 0x3c, 0xc1, 0x4c, 0xd1, 0xe0, 0x06, 0xd8, 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x2d, 0x00, 0x12, 0x04, 0x38, 0x0b, - 0x04, 0x41, 0x04, 0x35, 0x48, 0x23, 0x35, 0x05, 0xa8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0xc8, 0x48, 0x0c, 0x38, 0x15, 0x0b, 0x08, 0x48, 0x22, 0xb1, - 0x09, 0xdb, 0x88, 0x28, 0x17, 0x0e, 0x1a, 0xbd, 0x28, 0x17, 0xbd, 0x30, 0xca, 0xd5, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6f, 0x2f, 0xaf, 0x73, 0x40, - 0x05, 0x61, 0x05, 0xe8, 0x13, 0x81, 0x10, 0x0f, 0x30, 0x7f, 0x7e, 0x67, 0x22, 0x7d, 0xb3, 0x7e, 0x06, 0x98, 0x17, 0x03, 0x90, 0xc1, 0x8c, 0xc1, - 0x98, 0xb0, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x15, 0x21, 0x04, 0x3e, 0x28, 0x17, 0x41, 0x40, 0x05, 0x30, 0x05, 0xe8, 0x13, 0x94, 0x10, 0x17, - 0x34, 0xff, 0x0d, 0x0d, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0xc1, 0x09, 0x40, 0x33, 0x28, 0x17, 0x0f, 0x1a, 0xa6, 0x30, 0xb9, 0x30, 0x1a, 0xeb, 0x30, - 0xbf, 0x28, 0x1d, 0x06, 0x58, 0x17, 0x55, 0x28, 0x13, 0x75, 0x23, 0x00, 0x6c, 0x20, 0x03, 0x74, 0x00, 0xe1, 0x2f, 0xb9, 0x10, 0x15, 0xf0, 0x7f, - 0x00, 0x4c, 0x4e, 0xcf, 0x82, 0x62, 0x53, 0x66, 0x57, 0x80, 0x06, 0x78, 0x17, 0xb0, 0xc6, 0x20, 0xc2, 0xe8, 0xb8, 0xc4, 0x68, 0xd0, 0x06, 0x78, - 0x17, 0x0e, 0xf3, 0x7f, 0x23, 0x28, 0x13, 0x43, 0x04, 0x3b, 0xac, 0x20, 0x03, 0x42, 0x28, 0x17, 0x3d, 0x05, 0xe8, 0x15, 0x10, 0x17, 0x14, 0xff, - 0x0e, 0x0e, 0xa1, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x7e, 0x09, 0x1b, 0xc1, 0x00, 0x3f, 0xff, 0x14, 0x01, 0x0a, 0x0a, 0x20, 0x01, 0x01, 0x40, 0x06, - 0x01, 0x01, 0x12, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, - 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0xa2, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x51, 0x05, - 0x20, 0x06, 0x03, 0x20, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, 0x28, 0x05, 0x06, 0x20, 0x06, 0x04, 0x20, 0x05, 0x06, 0x06, 0x07, 0x94, 0x30, 0x04, - 0x06, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x07, 0x4a, 0x08, 0x30, 0x04, 0x07, 0x08, 0x20, 0x06, 0x06, 0x20, 0x05, 0x08, 0x25, 0x08, 0x09, - 0x30, 0x04, 0x08, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, 0x13, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x09, 0x0a, 0x40, 0x06, 0x30, 0x9a, 0x15, 0x0b, 0x0c, - 0x0c, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x0b, 0x20, 0x05, 0xe7, 0x20, 0x07, 0x30, 0x04, 0x30, 0x0d, 0x0b, 0x08, 0x40, 0x1a, 0xf8, 0xff, 0xf0, 0xf7, - 0x80, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x1b, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x82, 0x03, 0xca, 0xda, 0x00, 0x00, 0x00, 0x01, 0x1b, 0xd5, 0x30, 0xe9, 0x30, 0xf3, 0x00, - 0x30, 0xb9, 0x30, 0x18, 0x98, 0xae, 0x30, 0xa2, 0x10, 0x30, 0xca, 0x30, 0x05, 0xf8, 0x25, 0x46, 0x00, 0x72, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x63, 0x00, 0x68, 0x00, 0x00, 0x20, 0x00, 0x47, 0x00, 0x75, 0x00, 0x69, 0x00, 0x5a, 0x61, 0x20, 0x0f, 0x61, 0x05, 0x68, 0xae, 0x30, 0x71, 0x79, - 0x40, 0x71, 0x65, 0xe0, 0x06, 0x49, 0x20, 0x30, 0xff, 0x30, 0xef, 0x7a, 0x00, 0xf6, 0x00, 0x73, 0xae, 0x20, 0xfb, 0x73, 0x41, 0x09, 0x2d, 0xa0, - 0x97, 0x04, 0xd1, 0x09, 0xb0, 0x67, 0x20, 0xad, 0x80, 0x8d, 0x63, 0x21, 0x93, 0x73, 0x05, 0x41, 0x11, 0x31, 0xf1, 0x61, 0x00, 0x80, 0x81, 0x80, - 0x05, 0x12, 0x05, 0xd5, 0x6c, 0x5e, 0x5c, 0x2d, 0x57, 0x9a, 0x10, 0x4e, 0xa3, 0x90, 0x06, 0x5b, 0x1f, 0x04, 0xd5, 0x91, 0xb7, 0x00, 0xa4, 0xc2, - 0x39, 0xb8, 0x20, 0x00, 0x30, 0xae, 0x0b, 0x44, 0xc5, 0x98, 0xb0, 0x06, 0x72, 0x7f, 0x73, 0x05, 0xa2, 0x73, 0xf3, 0x7f, 0xc0, 0x73, 0xf1, 0x06, - 0x11, 0xfd, 0x00, 0x00, 0x24, 0x04, 0x40, 0x04, 0x00, 0x30, 0x04, 0x3d, 0x04, 0x46, 0x04, 0x43, 0x04, 0x04, 0x37, 0x04, 0x41, 0x04, 0x3a, 0x20, - 0x0d, 0x4f, 0x04, 0x01, 0x20, 0x00, 0x13, 0x04, 0x32, 0x04, 0x38, 0x40, 0x19, 0x33, 0x30, 0x04, 0x0c, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, - 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x1c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x91, 0x08, 0x17, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x1c, 0xb0, 0x30, 0xec, 0x30, 0xca, 0x10, 0x30, 0xc0, 0x30, 0x06, 0x78, 0x1d, 0x47, 0x00, - 0x72, 0x00, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x64, 0x20, 0x03, 0xb4, 0x06, 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x06, 0x71, 0x7f, 0x61, - 0x06, 0xa1, 0xff, 0x3c, 0x68, 0x02, 0x97, 0x67, 0xb3, 0x7e, 0xbe, 0x8f, 0x06, 0x7b, 0x1d, 0xf8, 0x01, 0xad, 0x08, 0xb8, 0x98, 0xb0, 0xe4, 0xb2, - 0x0e, 0xb3, 0x7f, 0x80, 0x06, 0xb1, 0xff, 0x13, 0x04, 0x40, 0x04, 0x35, 0x04, 0x3d, 0x0e, 0x04, 0x30, 0x04, 0x34, 0x20, 0x03, 0x10, 0x06, 0x53, - 0xff, 0x10, 0x06, 0xb0, 0xff, 0x01, 0x78, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x1d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x60, 0x0b, 0x1d, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x1d, 0xb0, 0x30, 0xa2, 0x30, 0xc9, 0x01, 0x30, 0xeb, 0x30, 0xfc, 0x30, 0xd7, 0x30, 0x06, - 0x38, 0x21, 0x00, 0x47, 0x00, 0x75, 0x00, 0x61, 0x00, 0x64, 0x00, 0x05, 0x65, 0x00, 0x6c, 0x00, 0x6f, 0x20, 0x0b, 0x70, 0x20, 0x09, 0xb7, 0x10, - 0x06, 0x30, 0x7f, 0x61, 0x21, 0x7f, 0x31, 0x7d, 0x61, 0x06, 0x61, 0xff, 0x70, 0x7f, 0x05, 0xd1, 0xfd, 0x00, 0x00, 0x00, 0xdc, 0x74, 0xb7, 0x5f, - 0x57, 0x7f, 0x20, 0x6e, 0x66, 0x06, 0x7b, 0x1d, 0xfc, 0xac, 0xe4, 0xb4, 0xe8, 0x1c, 0xb8, 0x04, 0xd5, 0x06, 0x7b, 0x9d, 0x07, 0xf2, 0x7f, 0x05, - 0xf1, 0xff, 0x13, 0x04, 0x00, 0x32, 0x04, 0x30, 0x04, 0x34, 0x04, 0x35, 0x04, 0x07, 0x3b, 0x04, 0x43, 0x04, 0x3f, 0x20, 0x0b, 0x10, 0x0e, 0x54, - 0xff, 0x0e, 0x76, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x11, 0xa4, 0xbb, 0x00, 0x11, 0x16, 0x00, 0x00, - 0x30, 0x01, 0x1e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x65, 0x0a, 0xa1, 0xbf, 0x00, 0x00, 0x00, - 0x02, 0x1e, 0xb0, 0x30, 0xa2, 0x30, 0xc6, 0x01, 0x30, 0xde, 0x30, 0xe9, 0x30, 0x0c, 0x77, 0x06, 0x38, 0x21, 0x00, 0x47, 0x00, 0x75, 0x00, 0x61, - 0x00, 0x74, 0x00, 0x16, 0x65, 0x00, 0x6d, 0x20, 0x07, 0x6c, 0x20, 0x0b, 0x10, 0x15, 0xd0, 0x7f, 0x71, 0x00, 0x53, 0x30, 0x57, 0x6c, 0x9a, 0xc9, - 0x62, 0x01, 0x80, 0x06, 0x42, 0xfd, 0x00, 0x00, 0xfc, 0xac, 0x4c, 0xd1, 0xd0, 0x01, 0xb9, 0x7c, 0xb7, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x33, - 0x7f, 0x00, 0x13, 0x04, 0x32, 0x04, 0x30, 0x04, 0x42, 0x04, 0x16, 0x35, 0x04, 0x3c, 0x20, 0x07, 0x3b, 0x20, 0x0b, 0x10, 0x1d, 0xd4, 0xff, 0x01, - 0x00, 0x07, 0x09, 0x09, 0x07, 0x07, 0x01, 0x01, 0x07, 0x24, 0x07, 0x03, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x1e, 0x00, 0xa2, 0x30, 0xeb, - 0x30, 0xbf, 0x30, 0xfb, 0x30, 0x45, 0x79, 0x28, 0x19, 0xd1, 0x30, 0xb9, 0x06, 0x08, 0x1d, 0x41, 0x28, 0x0b, 0x45, 0x74, 0x28, 0x19, 0x20, 0x00, - 0x56, 0x28, 0x1b, 0x72, 0x28, 0x23, 0x50, 0x70, 0x28, 0x27, 0x7a, 0x10, 0x15, 0x80, 0x7f, 0x0a, 0x4e, 0xe6, 0x97, 0x02, 0xc9, 0x62, 0x15, 0x5e, - 0xaf, 0x65, 0x06, 0x58, 0x19, 0x4c, 0x00, 0xc5, 0xc0, 0xd0, 0xa0, 0xbc, 0x7c, 0xb7, 0x0c, 0x1a, 0xd3, 0xa4, 0xc2, 0x06, 0x38, 0x1b, 0x0e, 0xf3, - 0x7f, 0x10, 0x28, 0x0b, 0x4c, 0x82, 0x28, 0x17, 0x30, 0x04, 0x2d, 0x00, 0x12, 0x28, 0x1d, 0x40, 0xad, 0x28, 0x25, 0x3f, 0x28, 0x29, 0x41, 0x05, - 0x68, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x02, 0x38, 0x0c, 0x24, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x20, 0x01, 0x0b, 0xbe, 0x82, 0x28, 0x17, 0x04, - 0x1e, 0xd0, 0x30, 0xcf, 0x06, 0xa8, 0x15, 0x00, 0x2d, 0x00, 0x42, 0x2f, 0xad, 0x6a, 0x06, 0xa8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x0b, 0x06, 0xe8, - 0x17, 0x0d, 0x14, 0xbc, 0x58, 0xd5, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x11, 0x28, 0x11, 0x6a, 0x45, 0x06, 0x88, 0x15, 0x10, 0x17, 0x14, 0xff, - 0x03, 0x48, 0x0c, 0x03, 0x40, 0x06, 0x03, 0x02, 0x03, 0x03, 0x03, 0xbc, 0x0a, 0xd0, 0x28, 0x17, 0x05, 0x00, 0x1e, 0xc1, 0x30, 0xde, 0x30, 0xeb, - 0x30, 0xc6, 0x02, 0x30, 0xca, 0x30, 0xf3, 0x30, 0xb4, 0x06, 0x28, 0x17, 0x43, 0x03, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6d, 0x2f, 0xb1, 0x3f, 0xb7, - 0x10, 0x65, 0x00, 0x6e, 0x2f, 0xbb, 0x6e, 0x00, 0x67, 0x00, 0x40, 0x6f, 0x10, 0x15, 0x60, 0x7f, 0x47, 0x59, 0x6c, 0x9a, 0x14, 0x5c, 0x02, 0x79, - 0x72, 0x57, 0x53, 0x08, 0x62, 0x06, 0x38, 0x19, 0x58, 0x00, 0xce, 0xd0, 0xb9, 0x4c, 0xd1, 0xad, 0xb0, 0xe0, 0x60, 0xac, 0x06, 0x38, 0x15, 0x0f, - 0x13, 0x7f, 0x27, 0x04, 0x38, 0x04, 0x3c, 0x82, 0x28, 0x1b, 0x3b, 0x04, 0x4c, 0x04, 0x42, 0x28, 0x19, 0x3d, 0x83, 0x28, 0x27, 0x3d, 0x04, 0x33, - 0x04, 0x3e, 0x05, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x4a, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, 0x14, 0x20, 0x05, 0x04, 0x0a, 0x04, 0x6e, - 0x0a, 0x6c, 0x28, 0x17, 0x06, 0x28, 0x17, 0xad, 0x0c, 0x30, 0xe0, 0x30, 0xe9, 0x06, 0x28, 0x11, 0xb8, 0x17, 0x71, 0x00, 0x54, 0x75, 0x48, 0x1d, - 0x75, 0x28, 0x1d, 0x61, 0x10, 0x15, 0xc0, 0x7f, 0x47, 0x59, 0x06, 0xfa, 0x57, 0x46, 0x7a, 0xc9, 0x06, 0x48, 0x13, 0x58, 0x17, 0xa4, 0x07, 0xd0, - 0x3c, 0xbb, 0x7c, 0xb7, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x38, 0x17, 0x56, 0x3a, 0x48, 0x1b, 0x43, 0x28, 0x1b, 0x30, 0x05, 0x68, 0x0d, 0x10, - 0x17, 0x94, 0xff, 0x05, 0x94, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x13, 0x20, 0x05, 0x05, 0x05, 0x00, 0x86, 0x0a, 0x52, 0xc0, 0x00, 0x00, 0x07, - 0x1e, 0x00, 0xa8, 0x30, 0xeb, 0x30, 0xfb, 0x30, 0xd7, 0x30, 0x01, 0xed, 0x30, 0xb0, 0x30, 0xec, 0x30, 0xbd, 0x06, 0x08, 0x1f, 0x41, 0x45, 0x2f, - 0xa7, 0x20, 0x00, 0x50, 0x00, 0x72, 0x2f, 0xa1, 0x46, 0x67, 0x20, 0x05, 0x65, 0x00, 0x73, 0x05, 0x8f, 0xab, 0x10, 0x0f, 0x30, 0x7f, 0xc3, 0x00, - 0x57, 0x14, 0x5c, 0x6e, 0x66, 0x57, 0x7f, 0x3c, 0x04, 0x68, 0xf7, 0x96, 0x22, 0x7d, 0x06, 0x18, 0x1d, 0xd8, 0xc5, 0x00, 0x04, 0xd5, 0x5c, 0xb8, - 0xf8, 0xad, 0x08, 0xb8, 0x34, 0x8c, 0xc1, 0x06, 0x38, 0x1b, 0x0e, 0xf3, 0x7f, 0x2d, 0x28, 0x0d, 0x4c, 0x04, 0x00, 0x2d, 0x00, 0x1f, 0x04, 0x40, - 0x04, 0x3e, 0x04, 0x46, 0x33, 0x20, 0x05, 0x35, 0x04, 0x41, 0x20, 0x09, 0x10, 0x1d, 0x74, 0xff, 0x06, 0x0a, 0x05, 0x06, 0x06, 0x05, 0x40, 0x03, - 0x15, 0x20, 0x09, 0x06, 0x00, 0x06, 0x90, 0x0a, 0xf5, 0xbf, 0x00, 0x00, 0x08, 0x80, 0x28, 0x17, 0xb9, 0x30, 0xaf, 0x30, 0xa3, 0x30, 0xf3, 0x0c, - 0x30, 0xc8, 0x30, 0xe9, 0x06, 0x08, 0x15, 0x38, 0x17, 0x73, 0x00, 0x46, 0x63, 0x4f, 0xad, 0x6e, 0x00, 0x74, 0x06, 0x0f, 0xad, 0x10, 0x0f, 0x10, - 0x7f, 0xc3, 0x00, 0x57, 0xaf, 0x65, 0x06, 0x66, 0x79, 0x72, 0xc9, 0x60, 0x62, 0x06, 0x18, 0x13, 0x3f, 0xff, 0xd0, 0xc5, 0xa4, 0xc2, 0xe0, 0x01, - 0xcf, 0x78, 0xc7, 0xc0, 0xd2, 0x7c, 0xb7, 0x06, 0x58, 0x17, 0xa0, 0x0e, 0xd3, 0x7f, 0x2d, 0x28, 0x05, 0x3a, 0x04, 0x43, 0x04, 0x38, 0x0b, 0x04, - 0x3d, 0x04, 0x42, 0x28, 0x23, 0x30, 0x05, 0x88, 0x11, 0x10, 0x17, 0x54, 0xff, 0x00, 0x07, 0x06, 0x08, 0x08, 0x06, 0x06, 0x07, 0x07, 0x10, 0x06, - 0x06, 0x16, 0x20, 0x05, 0x07, 0x07, 0x2c, 0x0a, 0x40, 0x72, 0x28, 0x17, 0x09, 0x1e, 0xa6, 0x30, 0xa7, 0x30, 0x8a, 0x30, 0x03, 0xc6, 0x30, 0xca, - 0x28, 0x1b, 0xb4, 0x06, 0x08, 0x19, 0x48, 0x8a, 0x28, 0x13, 0x65, 0x00, 0x68, 0x40, 0x05, 0x74, 0x2f, 0xad, 0x6e, 0xb8, 0x28, 0x19, 0x6e, 0x2f, - 0xb9, 0x05, 0x7f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0xe6, 0x97, 0xe6, 0x02, 0x97, 0x79, 0x72, 0x57, 0x53, 0x08, 0x06, 0x68, 0x17, 0xb0, 0x10, 0xc6, - 0xd0, 0xc5, 0x30, 0x03, 0x4c, 0xd1, 0xad, 0xb0, 0x31, 0xe0, 0xac, 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x23, 0x04, 0x4d, 0x28, 0x15, 0x54, 0x4d, - 0x28, 0x13, 0x35, 0x28, 0x19, 0x30, 0x28, 0x1d, 0x33, 0x04, 0x60, 0x3e, 0x05, 0xa8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x08, 0x0a, 0x0a, 0x08, - 0x50, 0x08, 0x30, 0x01, 0x10, 0x40, 0x06, 0xe4, 0x0a, 0xf5, 0xbe, 0x00, 0x00, 0x00, 0x0a, 0x1e, 0xa4, 0x30, 0xb6, 0x30, 0x18, 0xd0, 0x30, 0xeb, - 0x06, 0x08, 0x0f, 0x7f, 0xff, 0x49, 0x00, 0x7a, 0xa8, 0x2f, 0xa3, 0x62, 0x2f, 0xa7, 0x6c, 0x10, 0x16, 0x40, 0x7f, 0x0a, 0x4f, 0x28, 0x04, 0x84, - 0xe6, 0x74, 0x14, 0x5c, 0x06, 0x58, 0x15, 0x00, 0x00, 0x03, 0x74, 0xc7, 0xac, 0xc0, 0x1c, 0xbc, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x14, 0x18, - 0x04, 0x41, 0x28, 0x0d, 0x31, 0x28, 0x11, 0x3b, 0x04, 0x60, 0x4c, 0x05, 0xa8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x09, 0x09, 0x0b, 0x0b, 0x09, 0x50, - 0x09, 0x30, 0x01, 0x04, 0x40, 0x06, 0x2d, 0x0b, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0b, 0x1e, 0xcf, 0x30, 0xe9, 0x30, 0x44, 0xd1, 0x06, 0x88, 0x15, - 0x00, 0x00, 0x4a, 0x48, 0x11, 0x61, 0x00, 0x60, 0x70, 0x2f, 0xa7, 0x10, 0x16, 0x30, 0x7f, 0xc8, 0x54, 0xc9, 0x62, 0x15, 0x40, 0x5e, 0x06, 0x78, - 0x15, 0x00, 0x00, 0x60, 0xd5, 0x7c, 0xb7, 0x34, 0x0c, 0xd3, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x25, 0x48, 0x11, 0x30, 0x04, 0x60, 0x3f, 0x28, - 0x1d, 0x10, 0x1e, 0x34, 0xff, 0x0a, 0x0a, 0x0c, 0x0c, 0x0a, 0x51, 0x0a, 0x30, 0x01, 0x11, 0x40, 0x06, 0x67, 0x0a, 0x04, 0x28, 0x17, 0x00, 0x0c, - 0x1e, 0xd5, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0x40, 0xa2, 0x06, 0x88, 0x1b, 0x4a, 0x00, 0x75, 0x00, 0x74, 0x00, 0x60, 0x69, 0x06, 0x88, 0x19, 0x10, - 0x0e, 0xf0, 0x7f, 0xe1, 0x80, 0x82, 0x84, 0x9a, 0x40, 0x4e, 0x06, 0x98, 0x19, 0xc4, 0xd6, 0xf0, 0xd2, 0x44, 0xc5, 0xc0, 0x06, 0x98, 0x19, 0x0e, - 0xf3, 0x7f, 0x25, 0x04, 0x43, 0x04, 0x42, 0x04, 0x18, 0x4c, 0x04, 0x4f, 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x0b, 0x0d, 0x14, 0x0d, - 0x0b, 0x0b, 0x30, 0x01, 0x12, 0x40, 0x06, 0x28, 0x0a, 0x40, 0x13, 0x28, 0x17, 0x0d, 0x1e, 0xa8, 0x30, 0xeb, 0x30, 0x14, 0xfb, 0x30, 0xda, 0x28, - 0x1d, 0xf3, 0x06, 0x48, 0x19, 0x50, 0x00, 0x45, 0x65, 0x28, 0x17, 0xe9, 0x00, 0x6e, 0x06, 0x6d, 0xb0, 0x45, 0x2f, 0xad, 0x78, 0x20, 0x06, 0xa0, - 0x85, 0x06, 0xf0, 0x7f, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x69, 0x4f, 0xd5, 0x61, 0x6e, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x98, 0xd3, 0x50, 0xd1, - 0x06, 0x78, 0x13, 0x88, 0x0f, 0x31, 0xff, 0x1f, 0x04, 0x35, 0x28, 0x17, 0x35, 0x04, 0x3d, 0xe0, 0x06, 0x28, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x06, - 0xf0, 0xff, 0x0c, 0x0c, 0x05, 0x05, 0x0c, 0x51, 0x0c, 0x30, 0x01, 0x07, 0x40, 0x06, 0x0a, 0x0c, 0x16, 0x28, 0x17, 0x01, 0x0e, 0x1e, 0xb1, 0x30, - 0xc4, 0x30, 0xa1, 0x28, 0x1b, 0x15, 0xc6, 0x30, 0xca, 0x28, 0x19, 0xb4, 0x06, 0x08, 0x1b, 0x51, 0x2f, 0xaf, 0xaa, 0x38, 0x19, 0x7a, 0x2f, 0xb1, - 0x6c, 0x2f, 0xb9, 0x65, 0x28, 0x21, 0x61, 0x88, 0x28, 0x25, 0x67, 0x00, 0x6f, 0x10, 0x15, 0x40, 0x7f, 0x4b, 0x51, 0x28, 0x00, 0x84, 0x14, 0x5c, - 0x79, 0x72, 0x57, 0x53, 0x08, 0x40, 0x62, 0x06, 0x48, 0x1f, 0xcf, 0xb8, 0xd2, 0xb4, 0xc0, 0x4c, 0x06, 0xd1, 0xad, 0xb0, 0xe0, 0xac, 0x06, 0x38, - 0x1f, 0x0e, 0xf3, 0x7f, 0x1a, 0x80, 0x28, 0x17, 0x46, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0xa3, 0x68, 0x1f, 0x30, 0x28, 0x23, 0x33, 0x04, 0x3e, - 0x05, 0x68, 0x27, 0x10, 0x16, 0xf4, 0xff, 0x02, 0x0d, 0x0d, 0x0e, 0x0e, 0x0d, 0x0d, 0x30, 0x01, 0x05, 0x80, 0x40, 0x06, 0x8c, 0x0a, 0xec, 0xbe, - 0x00, 0x00, 0x0f, 0x20, 0x1e, 0xa8, 0x28, 0x13, 0xfb, 0x30, 0xad, 0x30, 0xc1, 0x30, 0x30, 0xa7, 0x06, 0x08, 0x13, 0x78, 0x17, 0x69, 0x00, 0x63, - 0x00, 0x7f, 0x68, 0x2f, 0xad, 0x06, 0x3e, 0xb2, 0x5f, 0xaf, 0x06, 0x90, 0x85, 0x06, 0xf0, 0x7f, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x0c, 0xfa, - 0x57, 0x07, 0x52, 0x06, 0x48, 0x0f, 0x6f, 0xff, 0xa4, 0xd0, 0x30, 0xb4, 0xcc, 0x06, 0x38, 0x0f, 0x0f, 0x71, 0xff, 0x1a, 0x04, 0x38, 0x04, 0x70, - 0x47, 0x28, 0x1b, 0x10, 0x06, 0x71, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0e, 0x0e, 0x07, 0x07, 0x28, 0x0e, 0x0e, 0x30, 0x01, 0x06, 0x40, 0x06, 0xb0, - 0x0a, 0x2f, 0x00, 0xbf, 0x00, 0x00, 0x10, 0x1e, 0xec, 0x30, 0xbf, 0x82, 0x28, 0x19, 0xfc, 0x30, 0xec, 0x30, 0xa6, 0x06, 0x48, 0x17, 0x52, 0xd5, - 0x4f, 0xad, 0x3f, 0xab, 0x68, 0x2f, 0xb9, 0x6c, 0x2f, 0xbb, 0x75, 0x10, 0x15, 0xc0, 0x7f, 0x00, 0xf7, 0x96, 0x54, 0x58, 0x62, 0x53, 0xb1, 0x83, - 0x20, 0x4c, 0x4e, 0x06, 0x58, 0x1d, 0x08, 0xb8, 0xc8, 0xd0, 0xf0, 0x06, 0xb8, 0x08, 0xb8, 0xb0, 0xc6, 0x06, 0x58, 0x1d, 0x0e, 0xf3, 0x7f, 0x20, - 0x80, 0x28, 0x13, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x43, 0xb2, 0x20, 0x03, 0x35, 0x20, 0x05, 0x10, 0x1d, 0xd4, 0xff, 0x0f, 0x0f, 0x70, 0x01, - 0x08, 0x80, 0x40, 0x0a, 0x55, 0x0a, 0xce, 0xbe, 0x00, 0x00, 0x11, 0x00, 0x1e, 0xb5, 0x30, 0xab, 0x30, 0xc6, 0x30, 0xda, 0x0a, 0x30, 0xb1, 0x30, - 0xb9, 0x06, 0x48, 0x17, 0x53, 0x28, 0x13, 0x63, 0xaa, 0x28, 0x17, 0x74, 0x28, 0x1f, 0x70, 0x2f, 0xad, 0x71, 0x2f, 0xb9, 0x65, 0x20, 0x00, 0x7a, - 0x10, 0x15, 0x80, 0x7f, 0x28, 0x84, 0x61, 0x53, 0x79, 0x01, 0x72, 0x69, 0x4f, 0x4b, 0x51, 0xaf, 0x65, 0x06, 0x38, 0x19, 0x00, 0xac, 0xc0, 0x74, - 0xce, 0x4c, 0xd1, 0x98, 0xd3, 0x0d, 0x00, 0xcf, 0xa4, 0xc2, 0x06, 0x38, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x13, 0x55, 0x3a, 0x28, 0x17, 0x42, - 0x28, 0x1f, 0x3f, 0x28, 0x23, 0x3a, 0x28, 0x27, 0x65, 0x41, 0x05, 0xa8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x10, 0x10, 0x70, 0x01, 0x0a, 0x40, 0x0a, - 0x01, 0x5a, 0x0a, 0x7b, 0xbf, 0x00, 0x00, 0x12, 0x28, 0x17, 0x00, 0xf3, 0x30, 0xfb, 0x30, 0xde, 0x30, 0xeb, 0x30, 0x60, 0xb3, 0x06, 0x48, 0x19, - 0x38, 0x17, 0x6e, 0x00, 0x20, 0x00, 0x4d, 0xa2, 0x2f, 0xb3, 0x72, 0x28, 0x21, 0x6f, 0x00, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0x23, 0x06, 0x57, 0x6c, - 0x9a, 0xd1, 0x79, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xb0, 0x03, 0xc0, 0xc8, 0xb9, 0x74, 0xb9, 0x54, 0x06, 0x68, 0x15, 0x0f, 0x13, 0x7f, 0x82, 0x38, - 0x17, 0x3d, 0x04, 0x2d, 0x00, 0x1c, 0x28, 0x1f, 0x40, 0xb2, 0x28, 0x21, 0x3e, 0x05, 0xc8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x11, 0x11, 0x70, 0x01, - 0x0b, 0x80, 0x40, 0x0a, 0xa4, 0x0a, 0xb9, 0xbe, 0x00, 0x00, 0x13, 0xa0, 0x48, 0x17, 0xbf, 0x28, 0x19, 0xed, 0x30, 0xfc, 0x30, 0xb5, 0xa2, 0x06, - 0x88, 0x17, 0x74, 0x2f, 0xb5, 0x20, 0x00, 0x52, 0x48, 0x15, 0x61, 0x81, 0x10, 0x15, 0xc0, 0x7f, 0x23, 0x57, 0x57, 0x7f, 0x8e, 0x83, 0x06, 0x78, - 0x15, 0x81, 0x38, 0x17, 0xc0, 0xd0, 0x5c, 0xb8, 0xac, 0xc0, 0x06, 0x58, 0x15, 0xd1, 0x0f, 0x13, 0x7f, 0x58, 0x17, 0x42, 0x28, 0x1d, 0x2d, 0x00, - 0x20, 0x48, 0x15, 0x65, 0x30, 0x06, 0x28, 0x17, 0x10, 0x16, 0x94, 0xff, 0x12, 0x12, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x00, 0x26, 0x0a, 0xca, 0xbf, - 0x00, 0x00, 0x14, 0x1e, 0x58, 0xbd, 0x28, 0x11, 0xe9, 0x06, 0x28, 0x0f, 0x9f, 0xaf, 0x6f, 0x00, 0x6c, 0xa0, 0x40, 0x03, 0xe1, 0x10, 0x16, 0x40, - 0x7f, 0x22, 0x7d, 0x1b, 0x6d, 0xc9, 0x40, 0x62, 0x06, 0x98, 0x17, 0x94, 0xc1, 0x64, 0xb8, 0x7c, 0xb7, 0xd7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, - 0x21, 0x28, 0x0b, 0x3b, 0x40, 0x03, 0x05, 0xd8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x28, 0x13, 0x13, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x80, 0x0a, 0x29, - 0x80, 0x28, 0x17, 0x15, 0x1e, 0xb9, 0x30, 0xc1, 0x30, 0xc6, 0x02, 0x30, 0xda, 0x30, 0xb1, 0x30, 0xb9, 0x06, 0x48, 0x1d, 0x53, 0x00, 0x00, 0x75, - 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x80, 0x2f, 0xb3, 0x65, 0x00, 0x70, 0x00, 0xe9, 0x00, 0x71, 0x88, 0x20, 0x11, 0x65, 0x00, 0x7a, 0x10, 0x15, - 0x60, 0x7f, 0xcf, 0x82, 0x47, 0x00, 0x59, 0x79, 0x72, 0x69, 0x4f, 0x4b, 0x51, 0xaf, 0x40, 0x65, 0x06, 0x38, 0x1d, 0x18, 0xc2, 0x58, 0xce, 0x4c, - 0xd1, 0x03, 0x98, 0xd3, 0x00, 0xcf, 0xa4, 0xc2, 0x06, 0x38, 0x1d, 0x0e, 0xf3, 0x7f, 0x00, 0x21, 0x04, 0x43, 0x04, 0x47, 0x04, 0x38, 0x04, 0x05, - 0x42, 0x04, 0x35, 0x04, 0x3f, 0x20, 0x03, 0x3a, 0x20, 0x07, 0x65, 0x41, 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x14, 0x14, 0x70, 0x01, 0x0e, - 0x40, 0x0a, 0x00, 0x55, 0x0a, 0xef, 0xbe, 0x00, 0x00, 0x16, 0x1e, 0x00, 0xc8, 0x30, 0xc8, 0x30, 0xcb, 0x30, 0xab, 0x30, 0x15, 0xd1, 0x30, 0xf3, - 0x06, 0x48, 0x17, 0x54, 0x2f, 0xaf, 0x74, 0x2f, 0xb3, 0x45, 0x6e, 0x28, 0x19, 0x63, 0x00, 0x61, 0x28, 0x19, 0xe1, 0x20, 0x0b, 0x80, 0x10, 0x15, - 0x90, 0x7f, 0x58, 0x62, 0x58, 0x62, 0x3c, 0x5c, 0x61, 0x10, 0x53, 0x58, 0x6f, 0x06, 0x38, 0x15, 0x00, 0x00, 0xa0, 0xd1, 0x00, 0xa0, 0xd1, 0xc8, - 0xb2, 0x74, 0xce, 0x10, 0xd3, 0xc4, 0x06, 0x38, 0x15, 0x0f, 0x13, 0x7f, 0x22, 0x04, 0x3e, 0x28, 0x13, 0x3e, 0x04, 0x45, 0x3d, 0x28, 0x1b, 0x3a, - 0x04, 0x30, 0x28, 0x1b, 0x30, 0x20, 0x0b, 0x94, 0x10, 0x1d, 0x94, 0xff, 0x15, 0x15, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x9b, 0x0a, 0x01, 0x08, 0xbf, - 0x00, 0x00, 0x17, 0x1e, 0xb5, 0x48, 0x13, 0xda, 0x06, 0x38, 0x11, 0x5f, 0xff, 0x5a, 0x28, 0x0b, 0x58, 0x0f, 0x61, 0x10, 0x16, 0x40, 0x7f, 0x28, - 0x06, 0x84, 0x61, 0x53, 0x15, 0x5e, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xac, 0x0d, 0xc0, 0x74, 0xce, 0x0c, 0x06, 0x68, 0x13, 0x0f, 0x33, 0x7f, 0x21, - 0x28, 0x0b, 0xca, 0x78, 0x0f, 0x10, 0x1e, 0x34, 0xff, 0x16, 0x16, 0x70, 0x01, 0x09, 0x40, 0x0a, 0xa4, 0x10, 0x0a, 0x55, 0xc0, 0x00, 0x3f, 0xff, - 0x01, 0x07, 0x09, 0x09, 0x01, 0x07, 0x07, 0x01, 0x01, 0x07, 0x07, 0x03, 0x20, 0x05, 0x12, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, - 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0xa2, 0x20, - 0x06, 0x14, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x50, 0x05, 0x20, 0x06, 0x13, 0x20, 0x05, 0x05, 0x05, 0x06, 0x05, 0x34, 0x06, 0x06, - 0x20, 0x05, 0x20, 0x03, 0x15, 0x20, 0x09, 0x06, 0x06, 0x08, 0x07, 0x06, 0x08, 0x08, 0x20, 0x05, 0x07, 0x06, 0x06, 0x40, 0x16, 0x20, 0x05, 0x07, - 0x07, 0x08, 0x08, 0x0a, 0x0a, 0x28, 0x08, 0x08, 0x30, 0x01, 0x10, 0x40, 0x06, 0x09, 0x09, 0x0b, 0x14, 0x0b, 0x09, 0x09, 0x30, 0x01, 0x04, 0x40, - 0x06, 0x0a, 0x0a, 0x0a, 0x0c, 0x0c, 0x0a, 0x0a, 0x30, 0x01, 0x11, 0x40, 0x06, 0x0b, 0x05, 0x0b, 0x0d, 0x0d, 0x0b, 0x0b, 0x30, 0x01, 0x12, 0x40, - 0x06, 0x02, 0x0c, 0x0c, 0x05, 0x05, 0x0c, 0x0c, 0x30, 0x01, 0x07, 0x81, 0x40, 0x06, 0x0d, 0x0d, 0x0e, 0x0e, 0x0d, 0x0d, 0x30, 0x01, 0x40, 0x05, - 0x40, 0x06, 0x0e, 0x0e, 0x07, 0x07, 0x0e, 0x0e, 0xa5, 0x30, 0x01, 0x06, 0x40, 0x06, 0x0f, 0x0f, 0x70, 0x01, 0x08, 0x40, 0x0a, 0x29, 0x10, 0x10, - 0x70, 0x01, 0x0a, 0x40, 0x0a, 0x11, 0x11, 0x70, 0x01, 0x4a, 0x0b, 0x40, 0x0a, 0x12, 0x12, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x13, 0x52, 0x13, 0x70, - 0x01, 0x0d, 0x40, 0x0a, 0x14, 0x14, 0x70, 0x01, 0x0e, 0xf0, 0x40, 0x0a, 0xf9, 0x7f, 0xf1, 0x77, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x30, 0x01, 0x1f, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd5, 0x04, 0xa4, 0xd6, 0x00, 0x00, 0x00, 0x02, 0x1f, 0xc7, 0x30, 0xe1, 0x30, 0xe9, 0x80, - 0x20, 0x01, 0xfb, 0x30, 0xde, 0x30, 0xcf, 0x30, 0xa4, 0x04, 0x30, 0xab, 0x30, 0xde, 0x5d, 0x05, 0xb8, 0x29, 0x44, 0x00, 0x11, 0x65, 0x00, 0x6d, - 0x20, 0x03, 0x72, 0x00, 0x61, 0x40, 0x03, 0x14, 0x2d, 0x00, 0x4d, 0x20, 0x09, 0x68, 0x20, 0x0d, 0x69, 0x00, 0x60, 0x63, 0x20, 0x13, 0x10, 0x14, - 0xf0, 0x7f, 0xb7, 0x5f, 0x85, 0x68, 0xc9, 0x00, 0x62, 0xc9, 0x62, 0x2d, 0x00, 0x6c, 0x9a, 0x77, 0x04, 0x6d, 0x61, 0x53, 0x3a, 0x53, 0x05, 0xdb, - 0x27, 0x70, 0xb3, 0x00, 0x54, 0xba, 0x7c, 0xb7, 0x7c, 0xb7, 0x2d, 0x00, 0x00, 0xc8, 0xb9, 0x58, 0xd5, 0x74, 0xc7, 0x74, 0xce, 0x08, 0x20, 0x00, - 0xfc, 0xc8, 0x10, 0x05, 0x93, 0x7f, 0x14, 0x04, 0x35, 0x22, 0x04, 0x3c, 0x20, 0x03, 0x40, 0x04, 0x30, 0x40, 0x03, 0x2d, 0x28, 0x00, 0x1c, 0x20, - 0x09, 0x45, 0x20, 0x0d, 0x38, 0x04, 0x41, 0xc0, 0x20, 0x13, 0x10, 0x1c, 0xf4, 0xff, 0x01, 0x03, 0x04, 0x03, 0x06, 0x06, 0x00, 0x01, 0x01, 0x03, - 0x06, 0x05, 0x03, 0x01, 0x01, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x1f, 0xd0, 0x30, 0xea, 0x8b, 0x28, 0x11, 0xfb, 0x30, 0xef, 0x28, 0x13, 0xcb, - 0x05, 0xe8, 0x13, 0x3f, 0xff, 0x5a, 0x42, 0x48, 0x0f, 0x69, 0x28, 0x1b, 0x38, 0x13, 0x57, 0x48, 0x0f, 0x6e, 0xc0, 0x28, 0x13, 0x10, 0x15, 0x70, - 0x7f, 0xf4, 0x5d, 0xcc, 0x91, 0x6c, 0x9a, 0x00, 0x2d, 0x00, 0xe6, 0x74, 0x0a, 0x4f, 0x3c, 0x5c, 0xc0, 0x05, 0xf8, 0x15, 0x2f, 0xaf, 0xbc, 0xac, - 0xb9, 0xc8, 0xb9, 0x2d, 0x01, 0x00, 0x40, 0xc6, 0x74, 0xc7, 0xc8, 0xb2, 0x05, 0xd8, 0x13, 0xad, 0x0f, 0x33, 0x7f, 0x11, 0x48, 0x0f, 0x38, 0x28, - 0x1b, 0x38, 0x13, 0x12, 0x48, 0x0f, 0x68, 0x3d, 0x28, 0x13, 0x10, 0x1d, 0x74, 0xff, 0x02, 0x28, 0x0c, 0x03, 0x03, 0x02, 0x20, 0x02, 0x01, 0x28, - 0x15, 0x02, 0x02, 0x02, 0x02, 0xd4, 0x00, 0x05, 0x7d, 0xd5, 0x00, 0x00, 0x04, 0x1f, 0xaf, 0x28, 0x30, 0xe6, 0x28, 0x0f, 0xfb, 0x28, 0x1b, 0xb6, - 0x30, 0xeb, 0x83, 0x06, 0x28, 0x19, 0x43, 0x00, 0x75, 0x00, 0x79, 0x20, 0x03, 0x38, 0x0b, 0xb8, 0x5f, 0xab, 0x7a, 0x4f, 0xb9, 0x50, 0x11, 0x10, - 0x15, 0x10, 0x7f, 0x93, 0x5e, 0x24, 0x00, 0x5c, 0x3c, 0x5c, 0x2d, 0x00, 0x6c, 0x9a, 0x4e, 0x11, 0x62, 0x81, 0x9c, 0x06, 0x18, 0x19, 0xe0, 0xcf, - 0x20, 0x28, 0x0f, 0x00, 0x2d, 0x00, 0xc8, 0xb9, 0x90, 0xc7, 0xe8, 0xb8, 0xd1, 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x17, 0x39, 0x04, - 0x43, 0x48, 0x0b, 0x17, 0x2d, 0x00, 0x1c, 0x28, 0x25, 0x37, 0x48, 0x29, 0x50, 0x11, 0x10, 0x1d, 0x14, 0xff, 0x02, 0x03, 0x02, 0x03, 0x02, 0x05, - 0x05, 0x28, 0x19, 0x05, 0x00, 0x06, 0x02, 0x03, 0x03, 0x03, 0x03, 0x8d, 0x04, 0x00, 0x52, 0xd6, 0x00, 0x00, 0x05, 0x1f, 0x71, 0x67, 0x44, 0xd9, - 0x28, 0x0f, 0xd3, 0x30, 0xbb, 0x28, 0x1b, 0xb3, 0x30, 0x00, 0xec, 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0x50, 0xcd, 0x05, 0x88, 0x1f, 0x45, - 0x2f, 0xaf, 0x73, 0x00, 0x74, 0x00, 0x55, 0x20, 0x2f, 0xb9, 0x65, 0x2f, 0xb9, 0x62, 0x2f, 0xbb, 0x63, 0x20, 0x09, 0x55, 0x2d, 0x28, 0x31, 0x6f, - 0x2f, 0xc9, 0x65, 0x2f, 0xbd, 0x74, 0x28, 0x39, 0x71, 0x6e, 0x20, 0x1d, 0x04, 0x5f, 0xaf, 0xb0, 0x75, 0x20, 0x00, 0x4f, 0x4f, 0xbd, 0x8a, 0x50, - 0x75, 0x61, 0x00, 0x6c, 0x60, 0x87, 0x75, 0x2f, 0xd3, 0x61, 0xf8, 0x04, 0x40, 0x89, 0x08, 0xf0, 0xff, 0x04, 0xf1, 0x89, 0x01, 0x51, 0x7f, 0x04, - 0x92, 0x07, 0x1c, 0x4e, 0x2f, 0x00, 0x4f, 0xd4, 0x6b, 0xaf, 0x65, 0x2d, 0x00, 0xd1, 0x01, 0x79, 0x70, 0x51, 0x2a, 0x59, 0xe0, 0x56, 0x05, 0xd8, - 0x19, 0x00, 0xd9, 0xb3, 0x80, 0xbd, 0x20, 0x00, 0x84, 0xbc, 0x00, 0x44, 0xbe, 0xa4, 0xc2, 0x2d, 0x00, 0x54, 0xcf, 0x03, 0xf0, 0xb7, 0xc0, 0xd0, - 0x78, 0xc7, 0x05, 0x98, 0x1d, 0x09, 0x53, 0x7f, 0x80, 0x04, 0x94, 0x07, 0x12, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x42, 0xa8, 0x20, 0x05, 0x47, 0x28, - 0x1b, 0x4b, 0x28, 0x23, 0x20, 0x00, 0x11, 0x2a, 0x04, 0x35, 0x28, 0x19, 0x31, 0x48, 0x31, 0x41, 0x28, 0x2d, 0x1a, 0xab, 0x20, 0x23, 0x40, 0x20, - 0x13, 0x3d, 0x20, 0x27, 0x38, 0x28, 0x41, 0x0b, 0xb4, 0xff, 0x82, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x04, 0x02, 0x04, 0x04, 0xa0, 0x01, 0x71, 0x00, - 0x04, 0x1a, 0xd7, 0x00, 0x00, 0x06, 0x1f, 0xa8, 0x80, 0x28, 0x11, 0xad, 0x30, 0xdc, 0x30, 0xf8, 0x8a, 0xf6, 0x00, 0x5c, 0xfb, 0x30, 0x7f, 0x89, - 0xc7, 0x30, 0xe1, 0x34, 0x30, 0xe9, 0x20, 0x01, 0x05, 0x98, 0x17, 0x73, 0x28, 0x17, 0x65, 0x00, 0x55, 0x71, 0x2f, 0xb7, 0x69, 0x28, 0x15, 0x6f, - 0x28, 0x21, 0x49, 0x28, 0x29, 0x51, 0x6c, 0x47, 0x87, 0x64, 0x28, 0x33, 0x2d, 0x00, 0x57, 0x28, 0x31, 0xad, 0x58, 0x3b, 0x44, 0x28, 0x3b, 0x6d, - 0x48, 0x3f, 0x3f, 0xd3, 0x61, 0x03, 0x2f, 0xcf, 0x5b, 0xce, 0x46, 0xfb, 0x73, 0x28, 0x97, 0x00, 0x10, 0x89, 0x2d, 0x00, 0x00, 0x6f, 0x38, 0x37, - 0x5e, 0x63, 0x28, 0xb7, 0x69, 0x20, 0x99, 0x98, 0x3b, 0x0a, 0xb0, 0xff, 0x31, 0x6b, 0x6f, 0xf8, 0x47, 0xff, 0x02, 0xb1, 0x01, 0x02, 0x99, 0xb3, - 0x71, 0xeb, 0x06, 0x71, 0x81, 0xc3, 0x57, 0x5e, 0x00, 0x58, 0x4e, 0x59, 0x5a, 0x53, 0xa4, 0x7f, 0x9b, 0x00, 0x5c, 0x2d, 0x00, 0x7f, 0x89, 0xb7, - 0x5f, 0x85, 0x04, 0x68, 0xc9, 0x62, 0xc9, 0x62, 0x05, 0x78, 0x1d, 0xd0, 0xc5, 0x00, 0x38, 0xc1, 0x34, 0xd0, 0xf4, 0xbc, 0x20, 0x00, 0x28, 0x2c, - 0xc1, 0x2e, 0xaf, 0xc1, 0x38, 0x25, 0x70, 0xb3, 0x54, 0x06, 0xba, 0x7c, 0xb7, 0x7c, 0xb7, 0x05, 0x38, 0x1d, 0x07, 0x12, 0x7f, 0x6c, 0x35, 0x00, - 0x68, 0x02, 0x01, 0xff, 0x03, 0x93, 0x7f, 0x2d, 0x28, 0x15, 0x41, 0x28, 0x07, 0x14, 0x3a, 0x04, 0x43, 0x27, 0xf3, 0x31, 0x28, 0x25, 0x2d, 0x00, - 0x55, 0x10, 0x28, 0x1d, 0x3b, 0x48, 0x07, 0x34, 0x48, 0x17, 0x17, 0x28, 0x21, 0x55, 0x3f, 0x28, 0x25, 0x34, 0x88, 0x39, 0x14, 0x28, 0x39, 0x3c, - 0x48, 0x3d, 0x70, 0x30, 0x40, 0x03, 0x0a, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x05, 0x07, 0x05, 0x14, 0x07, 0x07, 0x05, 0x20, 0x06, 0x0a, - 0x20, 0x04, 0x05, 0x05, 0x00, 0xe2, 0x04, 0x76, 0xd6, 0x00, 0x00, 0x07, 0x1f, 0x00, 0xde, 0x30, 0xcf, 0x30, 0xa4, 0x30, 0xab, 0x30, 0x01, 0xfb, - 0x30, 0xd9, 0x30, 0xeb, 0x30, 0xd3, 0x28, 0x25, 0xdd, 0x05, 0x78, 0x11, 0x5f, 0xfe, 0x4d, 0x2f, 0x95, 0x34, 0x17, 0x3f, 0xaf, 0x61, 0x2f, 0x9d, - 0xc0, 0xdf, 0xbf, 0x10, 0x15, 0x10, 0x7f, 0x6c, 0x9a, 0x77, 0x6d, 0x61, 0x53, 0x00, 0x2d, 0x00, 0x2f, 0x4f, 0xd4, 0x6b, 0xaf, 0x65, 0xc0, 0x05, - 0x78, 0x0d, 0x9f, 0xff, 0xc8, 0xb9, 0x58, 0xd5, 0x74, 0xc7, 0x00, 0x74, 0xce, 0x2d, 0x00, 0x84, 0xbc, 0x44, 0xbe, 0x35, 0xa4, 0xc2, 0x05, 0x38, - 0x0b, 0x0f, 0xb3, 0x7f, 0x1c, 0x27, 0xf3, 0x45, 0x27, 0xf7, 0x55, 0x38, 0x28, 0x1f, 0x30, 0x28, 0x13, 0x11, 0x47, 0xed, 0x31, 0x28, 0x09, 0x60, - 0x39, 0x28, 0x31, 0x10, 0x1d, 0x14, 0xff, 0x06, 0x06, 0x08, 0x06, 0x08, 0x28, 0x08, 0x06, 0x20, 0x06, 0x07, 0x20, 0x04, 0x06, 0x06, 0x8d, 0x00, - 0x04, 0x0b, 0xd7, 0x00, 0x00, 0x08, 0x1f, 0xdd, 0x00, 0x30, 0xe1, 0x30, 0xed, 0x30, 0xfc, 0x30, 0xf3, 0x82, 0x28, 0x19, 0xb9, 0x30, 0xda, 0x30, - 0xca, 0x20, 0x0b, 0xe0, 0xb5, 0x05, 0xa8, 0x1b, 0x50, 0x2f, 0x97, 0x5f, 0x91, 0x6f, 0x2f, 0xa1, 0x6e, 0x2f, 0xa3, 0x55, 0x53, 0x2f, 0xaf, 0x70, - 0x4f, 0x8d, 0x61, 0x2f, 0xa5, 0x6d, 0x10, 0x14, 0xe0, 0x7f, 0x00, 0xe2, 0x6c, 0xd8, 0x9e, 0x26, 0x4f, 0x2d, 0x00, 0x00, 0xcf, 0x82, 0x69, 0x4f, - 0xb3, 0x7e, 0xc6, 0x59, 0x80, 0x05, 0xf8, 0x19, 0xec, 0xd3, 0x54, 0xba, 0xec, 0xb8, 0x2d, 0x01, 0x00, 0x18, 0xc2, 0x98, 0xd3, 0xa8, 0xb0, 0x05, - 0xf8, 0x15, 0x88, 0x0f, 0x13, 0x7f, 0x1f, 0x04, 0x3e, 0x6f, 0xf9, 0x43, 0x04, 0x3d, 0xaa, 0x28, 0x17, 0x21, 0x20, 0x07, 0x3f, 0x28, 0x1b, 0x3d, - 0x28, 0x2f, 0x30, 0xc0, 0x20, 0x19, 0x10, 0x1c, 0xf4, 0xff, 0x07, 0x07, 0x09, 0x07, 0x09, 0x09, 0x50, 0x07, 0x20, 0x06, 0x08, 0x20, 0x04, 0x07, - 0x07, 0x2a, 0x05, 0x05, 0x67, 0xd6, 0x00, 0x00, 0x09, 0x28, 0x17, 0xbf, 0x28, 0x17, 0x00, 0xfb, 0x30, 0xb7, 0x30, 0xd1, 0x30, 0xeb, 0x30, 0x6e, - 0xcb, 0x05, 0xa8, 0x11, 0x98, 0x17, 0x74, 0x2f, 0xb3, 0x38, 0x17, 0x38, 0x13, 0x69, 0xd4, 0x28, 0x13, 0x30, 0x0d, 0x75, 0x28, 0x23, 0x69, 0x10, - 0x15, 0x20, 0x7f, 0xe2, 0x6c, 0x08, 0x54, 0x58, 0x57, 0x7f, 0x26, 0x0f, 0x95, 0x15, 0x5e, 0x08, 0x81, 0x9c, 0x3c, 0x5c, 0x06, 0x18, 0x17, 0xc0, - 0xd0, 0x5c, 0x80, 0x28, 0x17, 0xdc, 0xc2, 0x0c, 0xd3, 0xe8, 0xb8, 0xc8, 0x75, 0xb2, 0x05, 0xf8, 0x19, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x42, 0x28, - 0x03, 0x40, 0x28, 0x1f, 0xbb, 0x38, 0x15, 0x38, 0x28, 0x15, 0x30, 0x0d, 0x38, 0x25, 0x38, 0x05, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x01, 0x08, - 0x08, 0x0a, 0x08, 0x0a, 0x0a, 0x08, 0x20, 0x06, 0x40, 0x09, 0x20, 0x04, 0x08, 0x08, 0xbe, 0x03, 0xf1, 0xd5, 0x01, 0x00, 0x00, 0x0a, 0x1f, 0xa2, - 0x30, 0xc3, 0x28, 0x11, 0x41, 0xfc, 0x28, 0x19, 0xc7, 0x30, 0xe1, 0x30, 0xe9, 0x20, 0x01, 0x11, 0xfb, 0x30, 0xd9, 0x28, 0x21, 0xd3, 0x30, 0xbb, - 0x05, 0x48, 0x23, 0x60, 0x55, 0x2f, 0x9b, 0x3f, 0x9d, 0x72, 0x00, 0x20, 0x00, 0x44, 0xea, 0x2f, 0xb7, 0x5f, 0xbb, 0x38, 0x27, 0x61, 0x2f, 0xbb, - 0x42, 0x4f, 0xc9, 0x62, 0xb5, 0x28, 0x2d, 0x63, 0x2f, 0xd3, 0x04, 0x3f, 0xba, 0x48, 0x2f, 0x95, 0x75, 0x28, 0x99, 0x57, 0x2d, 0x00, 0x00, 0x7d, - 0x20, 0x2f, 0xc5, 0x74, 0x20, 0x95, 0x04, 0xd0, 0x83, 0x06, 0xf0, 0xff, 0x16, 0x41, 0x00, 0x6c, 0x29, 0x97, 0x6f, 0x06, 0x61, 0x7d, 0x07, 0x10, - 0x7f, 0x0a, 0x00, 0x4e, 0xb7, 0x5f, 0x85, 0x68, 0xc9, 0x62, 0xc9, 0x00, 0x62, 0x2d, 0x00, 0x2f, 0x4f, 0xd4, 0x6b, 0xaf, 0x40, 0x65, 0x05, 0xd8, - 0x19, 0x81, 0xbd, 0x80, 0xbd, 0x20, 0x00, 0x00, 0x70, 0xb3, 0x54, 0xba, 0x7c, 0xb7, 0x7c, 0xb7, 0x00, 0x2d, 0x00, 0x84, 0xbc, 0x44, 0xbe, 0xa4, - 0xc2, 0xc5, 0x05, 0x98, 0x1d, 0x0e, 0xf2, 0x7f, 0x12, 0x04, 0x35, 0x28, 0x13, 0x45, 0x48, 0x05, 0x05, 0x39, 0x04, 0x20, 0x00, 0x14, 0x20, 0x0f, - 0x3c, 0x40, 0x13, 0xaa, 0x38, 0x2b, 0x30, 0x28, 0x2b, 0x11, 0x40, 0x21, 0x31, 0x28, 0x3b, 0x39, 0x38, 0x04, 0x41, 0x04, 0x08, 0x29, 0x06, 0xf4, - 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x09, 0x05, 0x00, 0x09, 0x01, 0x01, 0x09, 0x09, 0x09, 0x01, 0x02, 0x80, 0x20, 0x04, 0x09, 0x09, 0x44, 0x04, - 0x8b, 0xd6, 0x00, 0x20, 0x00, 0x0b, 0xa8, 0x17, 0xbf, 0x30, 0xaf, 0x30, 0xc8, 0x34, 0x30, 0xa5, 0x28, 0x21, 0x98, 0x2b, 0xa8, 0x28, 0x1d, 0xad, - 0x30, 0x6a, 0xdc, 0x04, 0xa8, 0x21, 0xb8, 0x17, 0x54, 0x2f, 0xb7, 0x6b, 0x47, 0xa5, 0x75, 0xc4, 0x2f, 0xbb, 0xb8, 0x31, 0x45, 0x00, 0x73, 0x20, - 0x01, 0x65, 0x00, 0x57, 0x71, 0x2f, 0xc7, 0x69, 0x28, 0x27, 0x6f, 0x04, 0x28, 0x17, 0xb0, 0x7d, 0x78, 0x13, 0xff, 0x98, 0x35, 0x04, 0x70, 0x81, - 0x06, 0xf0, 0xff, 0x98, 0x17, 0xd1, 0x7d, 0x98, 0x2f, 0x04, 0x91, 0x7b, 0x07, 0x30, 0x7f, 0x00, 0x0a, 0x4e, 0x54, 0x58, 0x93, 0x5e, 0xfe, 0x56, - 0x40, 0x2d, 0x28, 0x21, 0xc3, 0x57, 0x5e, 0x58, 0x4e, 0x59, 0x30, 0x5a, 0x53, 0x05, 0xb8, 0x19, 0x58, 0x17, 0xc0, 0xd0, 0xe0, 0xcf, 0x10, 0x2c, - 0xd2, 0x2d, 0x68, 0x25, 0xd0, 0xc5, 0x38, 0xc1, 0x0e, 0x34, 0xd0, 0xf4, 0xbc, 0x05, 0x38, 0x1d, 0x0e, 0xf2, 0x7f, 0xf8, 0x17, 0x22, 0x82, 0x28, - 0x0f, 0x3a, 0x04, 0x43, 0x04, 0x42, 0x20, 0x03, 0x2d, 0xad, 0x00, 0x08, 0x35, 0x2d, 0x28, 0x19, 0x41, 0x28, 0x49, 0x30, 0x21, 0x38, 0x28, 0x2b, - 0x70, 0x3e, 0x03, 0x08, 0x27, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x0a, 0x06, 0x0a, 0x01, 0x02, 0x02, 0x0a, 0x0a, 0x0a, 0x02, 0x03, - 0x20, 0x04, 0x02, 0x0a, 0x0a, 0x67, 0x02, 0x7a, 0xd5, 0x00, 0x3f, 0xff, 0x01, 0x00, 0x03, 0x04, 0x03, 0x06, 0x06, 0x01, 0x01, 0x03, 0x00, 0x06, - 0x05, 0x03, 0x01, 0x01, 0x01, 0x01, 0x02, 0x82, 0x20, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x20, 0x0d, 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x20, - 0x01, 0x05, 0x05, 0x20, 0x11, 0x00, 0x05, 0x06, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x08, 0x04, 0x02, 0x04, 0x04, 0xa0, 0x01, 0x05, 0x05, 0x07, - 0x0a, 0x05, 0x07, 0x07, 0x05, 0x20, 0x06, 0x0a, 0x20, 0x04, 0x05, 0x00, 0x05, 0x06, 0x06, 0x08, 0x06, 0x08, 0x08, 0x06, 0xa0, 0x20, 0x06, 0x07, - 0x20, 0x04, 0x06, 0x06, 0x07, 0x07, 0x09, 0x0a, 0x07, 0x09, 0x09, 0x07, 0x20, 0x06, 0x08, 0x20, 0x04, 0x07, 0x00, 0x07, 0x08, 0x08, 0x0a, 0x08, - 0x0a, 0x0a, 0x08, 0xa7, 0x20, 0x06, 0x09, 0x20, 0x04, 0x08, 0x08, 0xf8, 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x30, 0x01, 0x20, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2e, 0x0d, 0x90, 0xcc, 0x00, 0x01, 0x00, 0x02, 0x20, 0x7f, 0x89, 0x0c, 0x77, 0x06, 0xb8, - 0x19, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5a, 0x74, 0x10, 0x06, 0x80, 0x7f, 0x76, 0x06, 0xe1, 0x7f, 0x51, 0xfd, 0x65, 0x06, - 0x6a, 0x9e, 0x7f, 0x08, 0x89, 0xe8, 0x90, 0x01, 0x06, 0xa3, 0x01, 0x1c, 0xc1, 0x80, 0x60, 0xbd, 0x0e, 0xd3, 0x7f, 0x06, 0xd1, 0xff, 0x17, 0x04, - 0x30, 0x04, 0x3f, 0x80, 0x20, 0x03, 0x34, 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x39, 0x02, 0x04, 0x20, 0x00, 0x34, 0x04, 0x35, 0x40, 0x11, 0x40, 0x2b, - 0x04, 0x42, 0x20, 0x1b, 0x3c, 0x20, 0x0d, 0x3d, 0x20, 0x09, 0x10, 0x0c, 0x94, 0xff, 0x8a, 0x0e, 0xd6, 0x7f, 0x01, 0x08, 0x08, 0x20, 0x01, 0x01, - 0x20, 0x06, 0x03, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x20, 0x17, 0x53, 0x80, 0x06, 0xd8, 0x19, 0x4e, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x64, 0x3d, 0x00, 0x2d, 0x06, 0x68, 0x21, 0x0f, 0xb0, 0x7f, 0x06, 0x38, 0x21, 0x51, 0xff, 0x6f, 0x06, 0x88, 0x1d, 0x09, 0x7f, 0x89, 0x17, 0x53, - 0x06, 0xb8, 0x17, 0x81, 0xbd, 0x06, 0xd8, 0x19, 0xd4, 0x07, 0x53, 0x7f, 0x06, 0x91, 0xff, 0x21, 0x28, 0x05, 0x32, 0x28, 0x09, 0x40, 0x04, 0x1c, - 0x3e, 0x04, 0x2d, 0x06, 0x28, 0x25, 0x10, 0x07, 0xb4, 0xff, 0x0e, 0x36, 0x7f, 0x02, 0x07, 0x00, 0x07, 0x07, 0x07, 0x06, 0x02, 0x02, 0x07, 0x06, - 0x00, 0x07, 0x07, 0x02, 0x02, 0x02, 0x02, 0x2f, 0x0e, 0x40, 0x36, 0x28, 0x17, 0x04, 0x20, 0xa2, 0x30, 0xeb, 0x30, 0x00, 0xc6, 0x30, 0xa3, 0x30, - 0xdc, 0x30, 0xcb, 0x30, 0x0a, 0xc3, 0x30, 0xc8, 0x30, 0x05, 0xf8, 0x23, 0x41, 0x28, 0x15, 0x74, 0x0b, 0x00, 0x69, 0x00, 0x62, 0x28, 0x1f, 0x6e, - 0x20, 0x07, 0x05, 0xfe, 0x39, 0xa0, 0x10, 0x08, 0x10, 0x7f, 0x6f, 0x05, 0xcf, 0xbc, 0x3f, 0x96, 0x82, 0x84, 0x5a, 0x04, 0x53, 0x3c, 0x5c, 0x79, - 0x72, 0x06, 0x58, 0x1d, 0x44, 0xc5, 0x00, 0x74, 0xb9, 0xf0, 0xd2, 0xf4, 0xbc, 0xc8, 0xb2, 0x34, 0xb8, 0xd2, 0x06, 0x3f, 0xb2, 0x0e, 0xf3, 0x7f, - 0x10, 0x47, 0xf1, 0x38, 0x04, 0x5e, 0x31, 0x28, 0x17, 0x3d, 0x20, 0x07, 0x03, 0xb7, 0xf3, 0x10, 0x12, 0x54, 0xff, 0x05, 0xdd, 0x1b, 0x03, 0x28, - 0x01, 0x01, 0x20, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x08, 0x03, 0xd4, 0x0d, 0x51, 0x28, 0x17, 0x05, 0x20, 0x2d, 0x1a, 0x4e, 0x2e, 0x59, - 0x05, 0xf8, 0x0b, 0xbf, 0xff, 0x43, 0x2f, 0xa3, 0x6e, 0xbc, 0x2f, 0xa3, 0x72, 0x06, 0x2e, 0x2b, 0x0f, 0xd0, 0x7f, 0x05, 0xd7, 0x8f, 0x07, 0x70, - 0x7f, 0x2d, 0x4e, 0x30, 0xe8, 0x90, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x11, 0xc9, 0x59, 0xc5, 0x31, 0x80, 0xbd, 0x0f, 0x33, 0x7f, 0x06, 0x52, 0x7f, - 0x26, 0x04, 0x35, 0x28, 0x0f, 0x41, 0x42, 0x28, 0x1d, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x28, 0x1b, 0x01, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x34, - 0x20, 0x17, 0x63, 0x3f, 0x20, 0x13, 0x38, 0x35, 0x30, 0x04, 0x3c, 0x60, 0x25, 0x10, 0x0c, 0xb4, 0xff, 0x8a, 0x0e, 0x56, 0x7f, 0x04, 0x02, 0x02, - 0x20, 0x01, 0x04, 0x20, 0x06, 0x08, 0x82, 0x20, 0x05, 0x04, 0x04, 0x9e, 0x0d, 0xca, 0x28, 0x17, 0x06, 0x05, 0x20, 0x7e, 0x6e, 0xb8, 0x5c, 0x06, - 0xb8, 0x17, 0x47, 0x2f, 0xaf, 0x44, 0x61, 0x2f, 0xa9, 0x64, 0x00, 0x27, 0x2f, 0xbb, 0x6e, 0x00, 0x63, 0x73, 0x05, 0xef, 0xaf, 0x90, 0x7f, 0x65, - 0x00, 0x2d, 0x06, 0x20, 0x81, 0x07, 0xb0, 0xff, 0x42, 0x20, 0x0e, 0x20, 0xff, 0x27, 0x59, 0x7e, 0x6e, 0x06, 0xb8, 0x17, 0xf8, 0x01, 0xad, 0x91, - 0xb7, 0xf9, 0xb2, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0xa0, 0x06, 0x53, 0xff, 0x13, 0x48, 0x11, 0x3d, 0x04, 0x34, 0x04, 0x2d, 0x2e, 0x00, 0x10, 0x28, - 0x21, 0x41, 0x04, 0x27, 0xfb, 0x10, 0x00, 0xb1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x05, 0x2a, 0x03, 0x03, 0x20, 0x01, 0x05, 0x20, 0x06, 0x02, 0x20, - 0x05, 0x05, 0x00, 0x05, 0x43, 0x0d, 0x4c, 0xcb, 0x00, 0x00, 0x07, 0x11, 0x20, 0x17, 0x53, 0x06, 0xb8, 0x15, 0x00, 0x00, 0x4e, 0x2e, 0xa7, 0x68, - 0x72, 0x28, 0x15, 0x10, 0x0e, 0xd0, 0x7f, 0x74, 0x06, 0x6e, 0xad, 0x00, 0x00, 0x17, 0x10, 0x53, 0xe8, 0x90, 0x06, 0xb8, 0x17, 0x81, 0xbd, 0x80, - 0xbd, 0xc1, 0x0f, 0x13, 0x7f, 0x06, 0x91, 0xff, 0x21, 0x04, 0x35, 0x04, 0x32, 0x20, 0x03, 0x40, 0x40, 0x28, 0x1b, 0x4b, 0x04, 0x39, 0x04, 0x20, - 0x00, 0x51, 0x34, 0x20, 0x11, 0x3f, 0x28, 0x2b, 0x40, 0x04, 0x42, 0x28, 0x31, 0x5d, 0x3c, 0x20, 0x1f, 0x3d, 0x20, 0x09, 0x10, 0x14, 0xd4, 0xff, - 0x06, 0x96, 0xff, 0x06, 0x38, 0x0c, 0x00, 0x07, 0x06, 0x06, 0x05, 0x07, 0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x0c, 0x0e, 0xa8, 0xcc, 0x00, - 0x26, 0x00, 0x08, 0x28, 0x17, 0x71, 0x67, 0x06, 0xb8, 0x19, 0x78, 0x17, 0x2d, 0x2b, 0x00, 0x45, 0x2f, 0xa9, 0x74, 0x10, 0x0e, 0x60, 0x7f, 0x65, - 0x41, 0xfb, 0x06, 0x38, 0x1b, 0x09, 0x1c, 0x4e, 0x17, 0x53, 0x06, 0xd8, 0x17, 0xd9, 0xb3, 0x06, 0xb8, 0x19, 0xe0, 0x07, 0x73, 0x7f, 0x06, 0x72, - 0x01, 0x98, 0x17, 0x3e, 0x04, 0x2d, 0x00, 0x12, 0xa3, 0x20, 0x05, 0x41, 0x28, 0x0f, 0x3e, 0x04, 0x47, 0x05, 0x68, 0x27, 0x10, 0x0f, 0x54, 0xff, - 0xe4, 0x06, 0x96, 0xff, 0x28, 0x12, 0x38, 0x14, 0x07, 0x06, 0x28, 0x15, 0x07, 0x07, 0x04, 0x07, 0x07, 0xfc, 0x0d, 0xea, 0x28, 0x17, 0x09, 0x20, - 0x20, 0x57, 0x53, 0x06, 0xb8, 0x15, 0x00, 0x00, 0x53, 0x00, 0x75, 0xd0, 0x06, 0xaf, 0xad, 0x10, 0x07, 0x50, 0x7f, 0x72, 0x06, 0xaf, 0x30, 0x57, - 0x53, 0xe8, 0x90, 0x9a, 0x06, 0xb8, 0x17, 0xa8, 0xb0, 0x06, 0xb8, 0x15, 0x07, 0x53, 0x7f, 0x6c, 0x06, 0xa4, 0x80, 0x2e, 0x38, 0x04, 0x36, 0x05, - 0x68, 0x01, 0x10, 0x10, 0x94, 0xff, 0x06, 0xb6, 0xff, 0x08, 0x09, 0x09, 0x82, 0x20, 0x01, 0x08, 0x08, 0x09, 0x0a, 0x0a, 0x20, 0x05, 0x08, 0x00, - 0x08, 0xf1, 0x0c, 0x8f, 0xcb, 0x00, 0x00, 0x0a, 0x9e, 0x28, 0x17, 0x71, 0x67, 0x06, 0xb8, 0x19, 0x58, 0x17, 0x06, 0x7f, 0xad, 0x10, 0x07, 0x50, - 0x7f, 0x72, 0x81, 0x06, 0x8e, 0x2d, 0x00, 0x00, 0x1c, 0x4e, 0x57, 0x53, 0x06, 0xd8, 0x17, 0x38, 0xd9, 0xb3, 0x06, 0xb8, 0x19, 0x07, 0x53, 0x7f, - 0x06, 0x91, 0xff, 0x2e, 0x04, 0x33, 0x02, 0x04, 0x3e, 0x04, 0x2d, 0x00, 0x12, 0x20, 0x05, 0x41, 0x8f, 0x28, 0x0f, 0x3e, 0x04, 0x47, 0x05, 0xc8, - 0x27, 0x10, 0x0f, 0x34, 0xff, 0x06, 0xb6, 0xff, 0x28, 0x0f, 0x90, 0x20, 0x01, 0x09, 0x09, 0x50, 0x02, 0x09, 0x09, 0xf7, 0x0c, 0x00, 0x6c, 0xcc, - 0x00, 0x00, 0x0b, 0x20, 0xcb, 0x30, 0x08, 0xc3, 0x30, 0xd7, 0x30, 0x06, 0x98, 0x19, 0x4e, 0x00, 0x69, 0x38, 0x00, 0x70, 0x20, 0x01, 0x36, 0x19, - 0x10, 0x16, 0x30, 0x7f, 0x3c, 0x5c, 0x6e, 0x10, 0x66, 0xaf, 0x65, 0x06, 0x98, 0x19, 0xc8, 0xb2, 0x04, 0xd5, 0xc7, 0x06, 0xaf, 0xae, 0x0f, 0x03, - 0x7f, 0x1d, 0x04, 0x38, 0x27, 0xfb, 0x10, 0x06, 0x91, 0x7f, 0x10, 0x06, 0xf5, 0xff, 0x16, 0x0a, 0x04, 0x04, 0x20, 0x01, 0x0a, 0x40, 0x06, 0x38, - 0x22, 0x1d, 0x31, 0x0d, 0x07, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x08, 0x08, 0x20, 0x01, 0x50, 0x01, 0x20, 0x06, 0x03, 0x20, 0x05, 0x01, 0x01, - 0x02, 0x07, 0x00, 0x07, 0x07, 0x07, 0x06, 0x02, 0x02, 0x07, 0x06, 0x01, 0x07, 0x07, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x14, 0x20, 0x01, 0x03, - 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x94, 0x30, 0x14, 0x02, 0x04, 0x20, 0x06, 0x08, 0x20, 0x05, 0x04, 0x04, 0x4a, 0x05, 0x30, 0x14, 0x03, - 0x05, 0x20, 0x06, 0x02, 0x20, 0x05, 0x05, 0x20, 0x05, 0x06, 0x30, 0x04, 0x07, 0x06, 0x06, 0x05, 0x07, 0x8c, 0x20, 0x0b, 0x06, 0x06, 0x06, 0x20, - 0x0a, 0x30, 0x0c, 0x07, 0x06, 0xd1, 0x20, 0x0d, 0x30, 0x5a, 0x08, 0x38, 0xa4, 0x09, 0x08, 0x08, 0x28, 0xb7, 0xf8, 0x20, 0x05, 0x40, 0x07, 0xc8, - 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x04, 0x9b, 0x00, 0x11, 0x12, 0x00, 0x00, - 0x30, 0x01, 0x21, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x06, 0x0a, 0xfb, 0xc1, 0x00, 0x00, 0x00, - 0x02, 0x21, 0xd5, 0x30, 0xe9, 0x30, 0xf3, 0x00, 0x30, 0xb7, 0x30, 0xb9, 0x30, 0xb3, 0x30, 0xfb, 0x2c, 0x30, 0xe2, 0x20, 0x0d, 0xb5, 0x20, 0x0f, - 0x05, 0x98, 0x2b, 0x46, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x10, 0x69, 0x00, 0x73, 0x20, 0x05, 0x6f, 0x00, 0x20, 0x00, - 0x63, 0x4d, 0x20, 0x05, 0x30, 0x15, 0x7a, 0x00, 0xe1, 0x20, 0x19, 0x10, 0x14, 0xd0, 0x7f, 0x00, 0x17, 0x5f, 0x17, 0x67, 0x7f, 0x89, 0xaf, 0x65, - 0x00, 0xd1, 0x79, 0x2d, 0x00, 0xab, 0x83, 0xc9, 0x62, 0x08, 0x51, 0x68, 0x01, 0x77, 0x05, 0xbb, 0x29, 0x04, 0xd5, 0x80, 0x00, 0xb7, 0xdc, 0xc2, - 0xa4, 0xc2, 0x54, 0xcf, 0xa8, 0x06, 0xba, 0x7c, 0xb7, 0xb0, 0xc0, 0x05, 0xfb, 0xa5, 0x0e, 0xf3, 0x7f, 0x24, 0x00, 0x04, 0x40, 0x04, 0x30, 0x04, - 0x3d, 0x04, 0x41, 0x20, 0x04, 0x38, 0x20, 0x03, 0x3a, 0x04, 0x3e, 0x04, 0x20, 0x36, 0x00, 0x1c, 0x20, 0x05, 0x30, 0x15, 0x41, 0x40, 0x19, 0x10, - 0x1c, 0xd4, 0xff, 0x01, 0x20, 0x08, 0x08, 0x20, 0x01, 0x01, 0x01, 0x09, 0x08, 0x10, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x21, 0xa2, - 0x30, 0x41, 0xc8, 0x48, 0x19, 0xc6, 0x30, 0xa3, 0x30, 0xc0, 0x05, 0xa8, 0x0f, 0x82, 0x7f, 0xff, 0x41, 0x00, 0x74, 0x00, 0x6c, 0x47, 0xff, 0x74, - 0xb0, 0x28, 0x19, 0x64, 0x28, 0x23, 0x10, 0x15, 0xd0, 0x7f, 0x3f, 0x96, 0x79, 0x72, 0x03, 0x70, 0x51, 0x82, 0x84, 0xbe, 0x8f, 0x05, 0xd8, 0x0f, - 0x7f, 0xff, 0x00, 0x44, 0xc5, 0xc0, 0xd2, 0x80, 0xb7, 0xf0, 0xd2, 0x30, 0xe4, 0xb2, 0x06, 0x5f, 0xb7, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x42, 0x04, - 0x56, 0x3b, 0x48, 0x19, 0x42, 0x28, 0x19, 0x34, 0x28, 0x23, 0x10, 0x1d, 0xd4, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, - 0x02, 0x02, 0x08, 0x39, 0x0b, 0x47, 0xc2, 0x2c, 0xad, 0x21, 0xc1, 0x30, 0x16, 0xe7, 0x30, 0xeb, 0x28, 0x15, 0xab, 0x06, 0x28, 0x13, 0x3f, 0xff, - 0x43, 0x22, 0x00, 0x68, 0x2f, 0xa3, 0x6c, 0x00, 0x75, 0x28, 0x1f, 0x65, 0xe0, 0x2f, 0xb5, 0x05, 0xf8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x54, 0x4e, - 0x62, 0x53, 0x79, 0x18, 0x72, 0x61, 0x53, 0x06, 0x58, 0x15, 0x26, 0x97, 0xcd, 0xe8, 0xb8, 0x0c, 0x4c, 0xd1, 0x74, 0xce, 0x06, 0x58, 0x15, 0x0f, - 0x13, 0x7f, 0x27, 0x04, 0x51, 0x3e, 0x28, 0x17, 0x43, 0x28, 0x1d, 0x35, 0x04, 0x3a, 0x06, 0x08, 0x15, 0xa0, 0x10, 0x17, 0x14, 0xff, 0x03, 0x38, - 0x0c, 0x02, 0x03, 0x03, 0x03, 0x02, 0x40, 0x11, 0x30, 0x05, 0x03, 0x78, 0x09, 0xfb, 0xc1, 0x00, 0x00, 0x00, 0x05, 0x21, 0xb3, 0x30, 0xed, 0x30, - 0xf3, 0xec, 0x06, 0x68, 0x13, 0x58, 0x17, 0x38, 0x15, 0xf3, 0x2f, 0xaf, 0x10, 0x16, 0x50, 0x7f, 0xd1, 0x79, 0x30, 0x86, 0x96, 0x06, 0x78, 0x13, - 0x3f, 0xff, 0x5c, 0xcf, 0x60, 0xb8, 0xd1, 0x06, 0x93, 0x7d, 0x0f, 0x13, 0x7f, 0x1a, 0x48, 0x17, 0x3e, 0x04, 0x3d, 0x06, 0x08, 0x11, 0xa0, 0x10, - 0x17, 0x54, 0xff, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x04, 0x04, 0x03, 0x40, 0x08, 0x30, 0x05, 0x04, 0x51, 0x0b, 0xd9, 0xc2, 0x00, 0x20, 0x00, 0x06, - 0x28, 0x17, 0xde, 0x30, 0xe4, 0x30, 0xb0, 0x35, 0x30, 0xa2, 0x06, 0x68, 0x1b, 0x38, 0x17, 0x6d, 0x2f, 0xa5, 0x79, 0x2f, 0xa9, 0x70, 0x67, 0x2f, - 0xb5, 0x06, 0x1f, 0xaf, 0x10, 0x0e, 0xd0, 0x7f, 0xd1, 0x79, 0x6c, 0x9a, 0x08, 0x9a, 0x4e, 0xdc, 0x74, 0x06, 0x78, 0x1b, 0x54, 0xcf, 0xc8, 0x06, - 0xb9, 0x7c, 0xc5, 0xfc, 0xac, 0x06, 0xbb, 0x97, 0x0e, 0xb3, 0x7f, 0x1a, 0x08, 0x04, 0x30, 0x04, 0x3c, 0x20, 0x03, 0x4f, 0x04, 0x33, 0x34, 0x04, - 0x43, 0x20, 0x0b, 0x10, 0x1d, 0xf4, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x08, 0x05, 0x05, 0x04, 0x07, 0x30, 0x05, 0x05, 0x46, 0x0a, 0x04, 0xaf, - 0xc1, 0x00, 0x00, 0x07, 0x28, 0x17, 0xd1, 0x30, 0x63, 0xf3, 0x06, 0x68, 0x13, 0x7f, 0xaf, 0x70, 0x00, 0xe1, 0x06, 0xcf, 0xaf, 0x10, 0x0e, 0xb0, - 0x7f, 0x0c, 0xd1, 0x79, 0x58, 0x6f, 0x06, 0x78, 0x13, 0x58, 0x17, 0x10, 0xd3, 0xc1, 0x06, 0x93, 0x7d, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x3e, 0x04, - 0x3f, 0x28, 0x1b, 0x68, 0x3d, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x06, 0x38, 0x0c, 0x05, 0x06, 0x06, 0x10, 0x06, 0x05, 0x09, 0x30, 0x05, - 0x06, 0x80, 0x0a, 0xde, 0x08, 0xc0, 0x00, 0x00, 0x08, 0x28, 0x17, 0xeb, 0x30, 0xc6, 0x30, 0x30, 0xb9, 0x06, 0x88, 0x19, 0x3f, 0xaf, 0x72, 0x00, - 0x74, 0x00, 0x10, 0xe9, 0x00, 0x73, 0x10, 0x16, 0x40, 0x7f, 0xd1, 0x79, 0x14, 0x5c, 0x08, 0x79, 0x72, 0xaf, 0x65, 0x06, 0x78, 0x1b, 0x54, 0xcf, - 0x74, 0x05, 0xb9, 0x4c, 0xd1, 0xa4, 0xc2, 0x0e, 0xf3, 0x7f, 0xea, 0x06, 0x63, 0xff, 0x80, 0x38, 0x17, 0x40, 0x04, 0x42, 0x04, 0x35, 0x04, 0x41, - 0xd0, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x07, 0x07, 0x20, 0x06, 0x0a, 0x30, 0x05, 0x07, 0x05, 0x0b, 0x67, - 0xc1, 0x04, 0x00, 0x00, 0x09, 0x21, 0xa8, 0x28, 0x17, 0xfb, 0x30, 0x01, 0xd1, 0x30, 0xe9, 0x30, 0xa4, 0x30, 0xbd, 0x06, 0x28, 0x1d, 0x00, 0x45, - 0x00, 0x6c, 0x00, 0x20, 0x00, 0x50, 0x00, 0x45, 0x61, 0x28, 0x1d, 0x61, 0x00, 0xed, 0x28, 0x1d, 0x6f, 0x10, 0x15, 0xc0, 0x7f, 0x00, 0xc3, 0x57, - 0x14, 0x5c, 0x15, 0x5e, 0xc9, 0x62, 0x08, 0x0a, 0x4f, 0x22, 0x7d, 0x06, 0x38, 0x1b, 0xd8, 0xc5, 0x0c, 0x03, 0xd3, 0x7c, 0xb7, 0x74, 0xc7, 0x8c, - 0x23, 0x8d, 0x06, 0x3f, 0xb2, 0x80, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x08, 0x00, 0x1f, 0x04, 0x30, 0x28, 0x1f, 0x30, - 0x04, 0x38, 0xb4, 0x28, 0x1f, 0x3e, 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x12, 0x30, - 0x05, 0x08, 0xe8, 0x09, 0x44, 0x3e, 0x2c, 0xa3, 0x0a, 0x21, 0xb0, 0x28, 0x11, 0xb7, 0x30, 0x14, 0xa2, 0x30, 0xb9, 0x28, 0x1d, 0xa2, 0x28, 0x21, - 0xc7, 0x30, 0x1a, 0xa3, 0x30, 0xaa, 0x20, 0x0d, 0x05, 0x7f, 0xbc, 0x47, 0x48, 0x0f, 0x63, 0x2a, 0x00, 0x69, 0x28, 0x19, 0x73, 0x28, 0x21, 0x61, - 0x28, 0x25, 0x44, 0xb0, 0x20, 0x0d, 0x6f, 0x05, 0x6f, 0xbf, 0x10, 0x0e, 0xf0, 0x7f, 0x3c, 0x68, 0xc9, 0x62, 0x00, 0x7f, 0x89, 0x9a, 0x4e, 0xaf, - 0x65, 0x2d, 0x00, 0x00, 0x3f, 0x96, 0xea, 0x8f, 0x65, 0x59, 0xaf, 0x65, 0x80, 0x05, 0xb8, 0x1f, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0xc2, 0x44, 0x20, - 0xc5, 0xa4, 0x20, 0x03, 0x14, 0xb5, 0x24, 0xc6, 0xa4, 0xea, 0x23, 0x95, 0x05, 0xbf, 0xb8, 0x0e, 0xf3, 0x7f, 0x13, 0x48, 0x0d, 0x41, 0x28, 0x1b, - 0x4f, 0x8a, 0x28, 0x11, 0x2d, 0x00, 0x30, 0x28, 0x23, 0x14, 0x28, 0x29, 0x3e, 0xc8, 0x28, 0x1f, 0x10, 0x1d, 0x34, 0xff, 0x09, 0x09, 0x50, 0x01, - 0x0a, 0x09, 0x03, 0x80, 0x40, 0x0a, 0xdb, 0x0a, 0x6f, 0xc4, 0x00, 0x00, 0x0b, 0x02, 0x21, 0xa4, 0x30, 0xf3, 0x30, 0xc6, 0x28, 0x0b, 0xd6, 0x30, - 0x30, 0xab, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x49, 0x00, 0x6e, 0x00, 0x45, 0x74, 0x28, 0x15, 0x62, 0x00, 0x75, 0x28, 0x1d, 0xe1, 0x10, 0x16, 0x00, - 0x7f, 0x00, 0xe0, 0x56, 0x82, 0x84, 0x03, 0x5e, 0x61, 0x53, 0xc0, 0x05, 0xb8, 0x0b, 0xbf, 0xff, 0x78, 0xc7, 0xf0, 0xd2, 0x80, 0xbd, 0x30, 0x74, - 0xce, 0x06, 0x50, 0x7d, 0x0f, 0x13, 0x7f, 0x18, 0x04, 0x3d, 0x04, 0x00, 0x42, 0x04, 0x38, 0x04, 0x31, 0x04, 0x43, 0x04, 0x64, 0x3a, 0x28, 0x21, - 0x10, 0x1d, 0xf4, 0xff, 0x0a, 0x0a, 0x50, 0x01, 0x0b, 0x0a, 0x40, 0x04, 0x40, 0x0a, 0x2b, 0x0a, 0x4b, 0xc1, 0x00, 0x00, 0x44, 0x0c, 0x28, 0x17, - 0xb9, 0x30, 0xe9, 0x20, 0x03, 0xfb, 0x30, 0x50, 0xc7, 0x20, 0x03, 0xe9, 0x20, 0x07, 0xd0, 0x30, 0xa4, 0x30, 0x54, 0xa2, 0x05, 0x88, 0x23, 0x49, - 0x2f, 0xa5, 0x6c, 0x6f, 0xab, 0x64, 0x00, 0x62, 0x65, 0x2f, 0xb1, 0x30, 0x0d, 0x20, 0x00, 0x42, 0x2f, 0xc5, 0x68, 0x30, 0x00, 0xed, 0x2f, 0xcb, - 0x10, 0x14, 0xd0, 0x7f, 0x77, 0x6d, 0x7e, 0x6e, 0x08, 0xa4, 0x7f, 0x9b, 0x5c, 0x06, 0x78, 0x17, 0x74, 0xc7, 0xac, 0x00, 0xc2, 0x7c, 0xb7, 0xa4, - 0xc2, 0x70, 0xb3, 0x7c, 0x01, 0xb7, 0x14, 0xbc, 0x74, 0xc7, 0x44, 0xc5, 0x05, 0xdb, 0x9d, 0xa3, 0x33, 0x67, 0x61, 0x2f, 0xad, 0x20, 0x00, 0x45, - 0x2f, 0xb3, 0x33, 0x89, 0x50, 0x6e, 0x43, 0x87, 0x6e, 0x0d, 0x63, 0xff, 0x18, 0x04, 0x41, 0x04, 0x40, 0x3b, 0x28, 0x0f, 0x41, 0x04, 0x2d, 0x00, - 0x34, 0x04, 0x62, 0x35, 0x20, 0x05, 0x30, 0x0d, 0x2d, 0x00, 0x11, 0x28, 0x23, 0x38, 0x32, 0x04, 0x4f, 0x05, 0x08, 0x27, 0x10, 0x16, 0xf4, 0xff, - 0x0b, 0x0b, 0x50, 0x01, 0x02, 0x20, 0x0b, 0x06, 0x40, 0x0a, 0x97, 0x0b, 0x75, 0xc2, 0x00, 0x16, 0x00, 0x0d, 0x21, 0x38, 0x09, 0xd1, 0x28, 0x1b, - 0x06, 0x7c, 0xaf, 0x4c, 0xa8, 0x48, 0x05, 0x50, 0x28, 0x19, 0x7a, 0x10, 0x16, 0x40, 0x7f, 0xc9, 0x62, 0xf4, 0x10, 0x5d, 0xaf, 0x65, 0x06, 0x78, - 0x15, 0x00, 0x00, 0x7c, 0xb7, 0x1a, 0x0c, 0xd3, 0xa4, 0x23, 0x89, 0x10, 0x06, 0x73, 0x7f, 0x1b, 0x48, 0x05, 0x1f, 0xca, 0x48, 0x19, 0x10, 0x1e, - 0x34, 0xff, 0x0c, 0x0c, 0x70, 0x01, 0x0b, 0x40, 0x0a, 0x2e, 0x00, 0x0a, 0xa6, 0xc1, 0x00, 0x00, 0x0e, 0x21, 0xec, 0x02, 0x30, 0xf3, 0x30, 0xd4, - 0x30, 0xe9, 0x06, 0xa8, 0x17, 0x65, 0x0b, 0x00, 0x6d, 0x00, 0x70, 0x2c, 0xb1, 0x72, 0x05, 0x0f, 0x9b, 0x10, 0x10, 0x30, 0x7f, 0x02, 0x26, 0x4f, - 0xae, 0x76, 0xc9, 0x62, 0x06, 0x98, 0x17, 0x18, 0x06, 0xb8, 0x3c, 0xd5, 0x7c, 0xb7, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x1b, 0x00, 0x04, 0x35, - 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x38, 0x32, 0x04, 0x40, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x0d, 0x0d, 0x70, 0x01, 0x0c, 0x88, 0x40, 0x0a, 0x5e, - 0x0a, 0x02, 0x28, 0x17, 0x0f, 0x21, 0xaa, 0x00, 0x30, 0xb3, 0x30, 0xc6, 0x30, 0xda, 0x30, 0xb1, 0x80, 0x06, 0x68, 0x19, 0x4f, 0x00, 0x63, 0x00, - 0x6f, 0x00, 0x74, 0xa3, 0x28, 0x1d, 0x70, 0x28, 0x21, 0x71, 0x00, 0x75, 0x28, 0x27, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x65, 0x59, 0xd1, 0x79, 0x79, - 0x72, 0x69, 0x4f, 0x20, 0x4b, 0x51, 0x06, 0x58, 0x1b, 0x24, 0xc6, 0x54, 0xcf, 0x4c, 0x04, 0xd1, 0x98, 0xd3, 0x00, 0xcf, 0x10, 0x06, 0x53, 0x7f, - 0x1e, 0x04, 0x55, 0x3a, 0x28, 0x0f, 0x42, 0x28, 0x1d, 0x3f, 0x28, 0x21, 0x3a, 0x28, 0x25, 0x94, 0x10, 0x1d, 0xd4, 0xff, 0x0e, 0x0e, 0x70, 0x01, - 0x0d, 0x40, 0x0a, 0x43, 0x0a, 0x04, 0x95, 0xc0, 0x00, 0x00, 0x10, 0x28, 0x17, 0xe9, 0x30, 0x05, 0xf3, 0x30, 0xc1, 0x30, 0xe7, 0x06, 0x88, 0x17, - 0x6c, 0x2f, 0xa7, 0x58, 0x6e, 0x28, 0x1d, 0x68, 0x28, 0x1f, 0x10, 0x16, 0x10, 0x7f, 0x65, 0x59, 0x70, 0x18, 0x51, 0x54, 0x4e, 0x06, 0x58, 0x13, - 0x3f, 0xff, 0x2c, 0xc6, 0x80, 0x18, 0xb7, 0x08, 0xcd, 0x06, 0x70, 0x7d, 0x0f, 0x13, 0x7f, 0x1e, 0x04, 0x3b, 0x83, 0x28, 0x17, 0x3d, 0x04, 0x45, - 0x04, 0x3e, 0x05, 0xe8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x28, 0x0f, 0x0f, 0x70, 0x01, 0x0e, 0x40, 0x0a, 0x6a, 0x0a, 0xb4, 0x02, 0xc2, 0x00, 0x00, - 0x11, 0x21, 0xb5, 0x28, 0x15, 0xbf, 0x02, 0x30, 0xfb, 0x30, 0xd0, 0x30, 0xeb, 0x20, 0x03, 0xe9, 0xa8, 0x06, 0x08, 0x1d, 0x53, 0x48, 0x15, 0x74, - 0x28, 0x1b, 0x20, 0x00, 0x42, 0x02, 0x00, 0xe1, 0x00, 0x72, 0x00, 0x62, 0x28, 0x27, 0x72, 0xc0, 0x28, 0x2b, 0x10, 0x15, 0x50, 0x7f, 0x23, 0x57, - 0xf4, 0x5d, 0xf4, 0x5d, 0x20, 0xc9, 0x62, 0x06, 0x78, 0x19, 0xb0, 0xc0, 0xc0, 0xd0, 0x14, 0x01, 0xbc, 0x74, 0xb9, 0x14, 0xbc, 0x7c, 0xb7, 0x06, - 0x3b, 0x99, 0xa8, 0x0e, 0xf3, 0x7f, 0x21, 0x48, 0x15, 0x42, 0x28, 0x1b, 0x2d, 0x00, 0x11, 0x8b, 0x28, 0x21, 0x40, 0x04, 0x31, 0x40, 0x05, 0x30, - 0x05, 0x68, 0x25, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x10, 0x10, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x9b, 0x0a, 0x42, 0x00, 0xc1, 0x00, 0x00, 0x12, 0x21, - 0xd0, 0x30, 0xb8, 0x35, 0x30, 0xa7, 0x06, 0x08, 0x0d, 0x9f, 0xff, 0x56, 0x2f, 0xad, 0x6c, 0x2f, 0xb3, 0x43, 0x65, 0x10, 0x16, 0x60, 0x7f, 0x71, - 0x5c, 0x37, 0x8c, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x0d, 0x14, 0xbc, 0x08, 0xc6, 0x06, 0x93, 0x7d, 0x0f, 0x13, 0x7f, 0x12, 0x28, 0x17, 0x59, 0x3b, - 0x20, 0x01, 0x35, 0x05, 0x68, 0x07, 0x10, 0x17, 0xf4, 0xff, 0x11, 0x11, 0x70, 0x01, 0x44, 0x02, 0x40, 0x0a, 0xa0, 0x09, 0xca, 0x28, 0x17, 0x13, - 0x21, 0x10, 0xe8, 0x30, 0xed, 0x06, 0xa8, 0x15, 0x00, 0x00, 0x59, 0x00, 0x50, 0x6f, 0x2f, 0xa3, 0x6f, 0x10, 0x16, 0x80, 0x7f, 0xa6, 0x7e, 0x57, - 0x7f, 0x84, 0x06, 0xb8, 0x17, 0x94, 0xc6, 0x5c, 0xb8, 0x10, 0x06, 0xb3, 0x7f, 0x19, 0x04, 0x19, 0x3e, 0x04, 0x40, 0x20, 0x03, 0x10, 0x1e, 0x74, - 0xff, 0x12, 0x12, 0x70, 0x01, 0x42, 0x05, 0x40, 0x0a, 0xc2, 0x0a, 0x0a, 0xc2, 0x00, 0x3f, 0xff, 0x01, 0x20, 0x08, 0x08, 0x20, 0x01, 0x01, 0x01, - 0x09, 0x08, 0x10, 0x89, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, - 0x03, 0x09, 0x03, 0x03, 0x02, 0x11, 0x30, 0x05, 0x03, 0x04, 0x30, 0x04, 0x02, 0x03, 0x04, 0x04, 0x04, 0x03, 0x08, 0x30, 0x05, 0x04, 0x40, 0x05, - 0x30, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x07, 0x90, 0x30, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, 0x06, 0x06, 0x24, 0x05, 0x09, 0x30, 0x05, - 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x09, 0x07, 0x07, 0x06, 0x0a, 0x30, 0x05, 0x07, 0x08, 0x30, 0x04, 0x48, 0x07, 0x20, 0x74, 0x07, 0x12, 0x30, - 0x05, 0x08, 0x09, 0x09, 0x8a, 0x50, 0x01, 0x0a, 0x09, 0x03, 0x50, 0x07, 0x0a, 0x50, 0x01, 0x0b, 0x28, 0x0a, 0x04, 0x50, 0x07, 0x0b, 0x50, 0x01, - 0x02, 0x0b, 0x06, 0x99, 0x40, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x50, 0x0a, 0x0d, 0x0d, 0x70, 0x01, 0x99, 0x50, 0x0a, 0x0e, 0x0e, 0x70, 0x01, 0x50, - 0x0a, 0x0f, 0x0f, 0x70, 0x01, 0x9f, 0x50, 0x0a, 0x10, 0x10, 0x70, 0x01, 0x50, 0x0a, 0xf9, 0x3f, 0xf1, 0x37, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, 0x11, 0x0e, 0x00, 0x00, 0x30, 0x01, 0x22, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xcc, 0x0c, 0x63, 0xc9, 0x00, 0x00, 0x00, 0x02, 0x22, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x20, - 0x30, 0xfb, 0x20, 0x03, 0xfc, 0x30, 0xde, 0x30, 0xb9, 0x40, 0x30, 0x05, 0xf8, 0x25, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x00, 0x6e, 0x00, 0x74, - 0x00, 0x20, 0x00, 0x54, 0x00, 0x05, 0x68, 0x00, 0x6f, 0x00, 0x6d, 0x20, 0x11, 0x73, 0x06, 0x20, 0x7f, 0x70, 0x2d, 0x06, 0xe0, 0x7f, 0x06, 0xf0, - 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0x58, 0x62, 0x02, 0x6c, 0x9a, 0xaf, 0x65, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0x38, 0x00, 0xc1, 0x78, 0xc7, 0xb8, - 0xd2, 0xa0, 0xd1, 0x38, 0x18, 0xba, 0xa4, 0xc2, 0x06, 0x3b, 0xa1, 0x0e, 0xf2, 0x7f, 0x21, 0x04, 0x35, 0x00, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x2d, - 0x00, 0x22, 0x00, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x41, 0x60, 0x04, 0x10, 0x05, 0xb1, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x0c, 0x06, - 0x0c, 0x0c, 0x02, 0x0c, 0x01, 0x01, 0x0c, 0x0c, 0x08, 0x20, 0x05, 0x01, 0x40, 0x01, 0x58, 0x17, 0x03, 0x22, 0xaf, 0x30, 0xe9, 0x30, 0x58, 0xec, - 0x28, 0x1b, 0xc9, 0x28, 0x1f, 0x06, 0x3f, 0xb9, 0x43, 0x00, 0x6c, 0x8a, 0x28, 0x19, 0x72, 0x00, 0x65, 0x28, 0x1b, 0x64, 0x28, 0x15, 0x6e, 0x80, - 0x10, 0x15, 0xe0, 0x7f, 0x4b, 0x51, 0xc9, 0x62, 0x26, 0x4f, 0x7b, 0x40, 0x76, 0x06, 0x78, 0x17, 0x74, 0xd0, 0x98, 0xb7, 0xf0, 0xb7, 0x30, 0x58, - 0xb3, 0x06, 0x7f, 0xb5, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x3b, 0x04, 0x15, 0x4d, 0x04, 0x40, 0x48, 0x1d, 0x34, 0x28, 0x19, 0x3d, 0x05, 0xc8, 0x15, - 0xa5, 0x10, 0x17, 0x14, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x20, 0x06, 0x02, 0x20, 0x05, 0x04, 0x02, 0x02, 0xc6, 0x0c, 0x15, 0x28, 0x17, 0x04, - 0x22, 0x01, 0xcf, 0x30, 0xce, 0x30, 0xfc, 0x30, 0xd0, 0x20, 0x03, 0xaa, 0x06, 0x5d, 0x2f, 0x48, 0x2f, 0xaf, 0x6e, 0x2f, 0xa5, 0x76, 0x28, 0x19, - 0x72, 0x81, 0x10, 0x16, 0x20, 0x7f, 0x49, 0x6c, 0xfa, 0x8b, 0x01, 0x5a, 0x06, 0x78, 0x15, 0x83, 0x28, 0x17, 0xd5, 0x78, 0xb1, 0x84, 0xbc, 0x06, - 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x11, 0x25, 0x04, 0x30, 0x28, 0x11, 0x3e, 0x04, 0x32, 0x28, 0x19, 0x69, 0x40, 0x05, 0xe8, 0x13, 0x10, 0x17, 0x34, - 0xff, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x20, 0x06, 0x40, 0x0e, 0x20, 0x05, 0x03, 0x03, 0x1e, 0x0d, 0x6b, 0xc8, 0x00, 0x00, 0x00, 0x05, 0x22, 0xde, - 0x30, 0xf3, 0x30, 0x01, 0xc1, 0x30, 0xa7, 0x30, 0xb9, 0x30, 0xbf, 0x06, 0x48, 0x1b, 0x44, 0x4d, 0x48, 0x17, 0x63, 0x00, 0x68, 0x2f, 0xb1, 0x73, - 0x00, 0x60, 0x74, 0x06, 0x08, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0xfc, 0x66, 0x7b, 0x5f, 0xaf, 0x10, 0x65, 0x79, 0x72, 0x06, 0x78, 0x19, 0xe8, 0xb9, - 0xb4, 0xcc, 0x0d, 0xa4, 0xc2, 0x30, 0xd1, 0x06, 0x78, 0x97, 0x0e, 0xf3, 0x7f, 0x1c, 0x48, 0x17, 0x46, 0x47, 0x28, 0x15, 0x41, 0x04, 0x42, 0x06, - 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x51, 0x04, 0x70, 0x01, 0x03, 0x40, 0x0a, 0xd2, 0x0c, 0xe4, 0x28, 0x17, 0x11, 0x06, 0x22, 0xdd, 0x28, - 0x0d, 0xc8, 0x30, 0xe9, 0x28, 0x1d, 0x45, 0xc9, 0x06, 0x28, 0x15, 0x00, 0x00, 0x50, 0x2f, 0xab, 0x72, 0x28, 0x0f, 0x50, 0x6c, 0x4f, 0xb7, 0x64, - 0x10, 0x16, 0x00, 0x7f, 0xe2, 0x6c, 0x79, 0x72, 0x20, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0xec, 0xd3, 0xc0, 0x06, 0xd2, 0x9c, 0xb7, 0xdc, - 0xb4, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x20, 0x04, 0x3e, 0x28, 0x0b, 0x42, 0x04, 0x3b, 0x04, 0x4d, 0xb2, 0x28, 0x1f, 0x34, 0x05, 0xe8, - 0x15, 0x10, 0x17, 0x14, 0xff, 0x05, 0x05, 0x70, 0x01, 0x04, 0x80, 0x40, 0x0a, 0xee, 0x0c, 0xa0, 0xc9, 0x00, 0x00, 0x07, 0x20, 0x22, 0xbb, 0x28, - 0x11, 0xc8, 0x30, 0xfb, 0x30, 0xa2, 0x8d, 0x48, 0x19, 0xea, 0x30, 0xe5, 0x28, 0x27, 0x05, 0xbf, 0xb0, 0x53, 0x2f, 0xaf, 0x41, 0x69, 0x2f, 0xb1, - 0x74, 0x00, 0x20, 0x00, 0x41, 0x48, 0x19, 0x50, 0x72, 0x2f, 0xb9, 0x77, 0x10, 0x15, 0x80, 0x7f, 0x23, 0x57, 0x89, 0x5b, 0x08, 0xb7, 0x5f, 0x81, - 0x9c, 0x06, 0x78, 0x19, 0x38, 0xc1, 0x78, 0x00, 0xc7, 0xb8, 0xd2, 0x64, 0xc5, 0xdc, 0xb4, 0xe8, 0x62, 0xb8, 0x06, 0x3b, 0x97, 0x0e, 0xf3, 0x7f, - 0x21, 0x04, 0x35, 0x28, 0x0f, 0x42, 0x08, 0x04, 0x2d, 0x00, 0x2d, 0x48, 0x17, 0x40, 0x04, 0x4e, 0xc1, 0x05, 0xc8, 0x1b, 0x10, 0x16, 0xf4, 0xff, - 0x06, 0x06, 0x07, 0x06, 0x06, 0x40, 0x01, 0x45, 0x0a, 0x40, 0x07, 0xcc, 0x0c, 0x63, 0x28, 0x17, 0x08, 0xc8, 0x17, 0xb3, 0x07, 0x34, 0x97, 0x6e, - 0x10, 0x15, 0xe0, 0x7f, 0x38, 0x17, 0x1c, 0x5a, 0x06, 0x78, 0x15, 0x98, 0x17, 0xec, 0x06, 0x70, 0x7f, 0x0e, 0xf3, 0x7f, 0xd8, 0x17, 0x3d, 0x05, - 0xc8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x07, 0x07, 0x14, 0x08, 0x07, 0x07, 0x40, 0x01, 0x0b, 0x40, 0x07, 0x1b, 0x0d, 0x50, 0x1b, 0x28, 0x17, 0x09, - 0x88, 0x17, 0xad, 0x30, 0xe3, 0x30, 0x1a, 0xb5, 0x30, 0xea, 0x06, 0x08, 0x1d, 0xbf, 0xaf, 0x43, 0x2f, 0xbb, 0x74, 0x2a, 0x00, 0x68, 0x2f, 0xaf, - 0x72, 0x4f, 0xc3, 0x65, 0x10, 0x15, 0x20, 0x7f, 0x23, 0x01, 0x57, 0xef, 0x51, 0x5f, 0x74, 0x33, 0x74, 0x06, 0x78, 0x19, 0x81, 0x58, 0x17, 0x90, - 0xce, 0x1c, 0xc1, 0xb0, 0xb9, 0x06, 0xfb, 0x97, 0xc4, 0x0e, 0x33, 0x7f, 0x98, 0x17, 0x1a, 0x04, 0x4d, 0x28, 0x1f, 0x40, 0x04, 0x60, 0x38, 0x05, - 0xc8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x08, 0x09, 0x08, 0x08, 0xa2, 0x40, 0x01, 0x06, 0x40, 0x07, 0xc9, 0x0c, 0x48, 0x28, 0x17, 0x0a, 0xa0, - 0x88, 0x17, 0xa8, 0x28, 0x13, 0xb6, 0x30, 0xd9, 0x30, 0xb9, 0x8a, 0x06, 0xa8, 0x17, 0x45, 0x00, 0x6c, 0x2f, 0xbb, 0x7a, 0x2f, 0xc1, 0x62, 0xe0, - 0x28, 0x1b, 0x38, 0x21, 0x10, 0x15, 0x10, 0x7f, 0x23, 0x57, 0x0a, 0x4f, 0x3d, 0x06, 0x4e, 0x8e, 0x83, 0x7d, 0x76, 0x06, 0x58, 0x19, 0x58, 0x17, - 0xd8, 0x00, 0xc5, 0xac, 0xb9, 0x90, 0xc7, 0xa0, 0xbc, 0xa4, 0x71, 0xc2, 0x06, 0xbe, 0xaf, 0x0e, 0x33, 0x7f, 0x98, 0x17, 0x2d, 0x04, 0x3b, 0x28, - 0x13, 0x05, 0x37, 0x04, 0x30, 0x04, 0x31, 0x28, 0x2b, 0x42, 0x05, 0x68, 0x1b, 0x82, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x09, 0x0a, 0x09, 0x09, 0xa0, - 0x01, 0xcf, 0x02, 0x0c, 0xa4, 0xc8, 0x00, 0x00, 0x0b, 0x88, 0x17, 0xb8, 0x00, 0x30, 0xa7, 0x30, 0xfc, 0x30, 0xe0, 0x30, 0xba, 0xaa, 0x06, 0xa8, - 0x17, 0x4a, 0x2f, 0xbb, 0x6d, 0x2f, 0xad, 0x73, 0x10, 0x15, 0xa0, 0x7f, 0x23, 0x01, 0x57, 0x79, 0x8a, 0xc6, 0x59, 0xaf, 0x65, 0x06, 0x58, 0x15, - 0x87, 0x78, 0x17, 0x1c, 0xc8, 0x84, 0xc7, 0x06, 0x18, 0x13, 0x0f, 0x33, 0x7f, 0x98, 0x17, 0x00, 0x14, 0x04, 0x36, 0x04, 0x4d, 0x04, 0x39, 0x04, - 0x18, 0x3c, 0x04, 0x41, 0x05, 0x68, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0a, 0x0a, 0x0b, 0x28, 0x0a, 0x0a, 0x40, 0x01, 0x05, 0x40, 0x07, 0x21, 0x0d, - 0x98, 0xa0, 0x28, 0x17, 0x0c, 0x88, 0x17, 0xe1, 0x30, 0xa2, 0x30, 0xea, 0xd1, 0x28, 0x19, 0x06, 0xbc, 0xaf, 0x4d, 0x2f, 0xbb, 0x72, 0x00, 0x79, - 0x10, 0x15, 0xc0, 0x7f, 0x03, 0x23, 0x57, 0x9b, 0x73, 0x3d, 0x4e, 0x06, 0x78, 0x15, 0x78, 0x17, 0x0e, 0x54, 0xba, 0xac, 0xb9, 0x06, 0x58, 0x97, - 0x0e, 0xf3, 0x7f, 0x98, 0x17, 0x1c, 0x8c, 0x28, 0x15, 0x40, 0x04, 0x38, 0x05, 0xa8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0b, 0x0b, 0x14, 0x0c, 0x0b, - 0x0b, 0x40, 0x01, 0x07, 0x40, 0x07, 0x0f, 0x0d, 0x00, 0x51, 0xc9, 0x00, 0x00, 0x0d, 0x22, 0xc8, 0x30, 0x16, 0xec, 0x30, 0xed, 0x28, 0x0f, 0xcb, - 0x06, 0x28, 0x13, 0x3f, 0xff, 0x54, 0x8b, 0x28, 0x09, 0x65, 0x00, 0x6c, 0x2f, 0xb5, 0x77, 0x2f, 0xb5, 0x05, 0xd8, 0x13, 0x80, 0x10, 0x0f, 0x30, - 0x7f, 0x79, 0x72, 0xcc, 0x91, 0x1b, 0x6d, 0x3c, 0x40, 0x5c, 0x06, 0x78, 0x19, 0xb8, 0xd2, 0x10, 0xb8, 0x5c, 0xb8, 0x34, 0xc8, 0xb2, 0x06, 0x78, - 0x97, 0x0e, 0xf3, 0x7f, 0x22, 0x48, 0x0b, 0x3b, 0x04, 0x71, 0x3e, 0x28, 0x1d, 0x05, 0xf8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0c, 0x0d, 0x0d, 0x20, - 0x01, 0x50, 0x0c, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x0c, 0x0c, 0x27, 0x0d, 0x00, 0xc9, 0xc8, 0x00, 0x00, 0x0e, 0x22, 0xa6, 0x30, 0x00, 0xa7, 0x30, - 0xb9, 0x30, 0xc8, 0x30, 0xe2, 0x30, 0x01, 0xa2, 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xc9, 0x05, 0xe8, 0x1d, 0x51, 0x57, 0x28, 0x15, 0x73, 0x2f, 0xad, - 0x6d, 0x00, 0x6f, 0x88, 0x21, 0x10, 0x6e, 0x00, 0x64, 0x10, 0x15, 0x80, 0x7f, 0x7f, 0x89, 0x69, 0x64, 0x20, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, - 0x00, 0xe8, 0xc6, 0xa4, 0x00, 0xc2, 0xb8, 0xd2, 0xa8, 0xba, 0xbc, 0xc5, 0x9c, 0x18, 0xb7, 0xdc, 0xb4, 0x06, 0x1b, 0x99, 0x0e, 0xf3, 0x7f, 0x23, - 0x04, 0x4d, 0x02, 0x04, 0x41, 0x04, 0x42, 0x04, 0x3c, 0x28, 0x19, 0x40, 0xac, 0x28, 0x1f, 0x4d, 0x28, 0x1f, 0x34, 0x05, 0xa8, 0x1f, 0x10, 0x16, - 0xf4, 0xff, 0x0d, 0x0e, 0x54, 0x0e, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0d, 0x0d, 0x11, 0xf4, 0x0c, 0x71, 0x28, 0x17, 0x0f, 0x22, - 0xad, 0x28, 0x0b, 0x58, 0xb0, 0x48, 0x19, 0xf3, 0x05, 0xe8, 0x11, 0x5f, 0xff, 0x4b, 0x00, 0x69, 0xac, 0x2f, 0xa7, 0x67, 0x48, 0x1b, 0x6f, 0x2f, - 0xb1, 0x10, 0x15, 0xf0, 0x7f, 0xd1, 0x91, 0x08, 0xaf, 0x65, 0x66, 0x65, 0x06, 0x98, 0x17, 0xb9, 0xd0, 0xa4, 0x18, 0xc2, 0x34, 0xd1, 0x06, 0x78, - 0x95, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x38, 0xac, 0x28, 0x09, 0x33, 0x48, 0x1b, 0x3e, 0x28, 0x13, 0x10, 0x1d, 0xf4, 0xff, 0x0e, 0x03, 0x54, 0x03, - 0x20, 0x01, 0x0e, 0x20, 0x06, 0x01, 0x20, 0x05, 0x0e, 0x0e, 0x08, 0xc3, 0x0c, 0x67, 0xc9, 0x00, 0x3f, 0xff, 0x01, 0x0c, 0x06, 0x00, 0x0c, 0x0c, - 0x0c, 0x01, 0x01, 0x0c, 0x0c, 0x08, 0x89, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x20, 0x06, 0x44, 0x02, 0x20, 0x05, 0x02, 0x02, - 0x03, 0x30, 0x04, 0x02, 0x03, 0xa1, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x03, 0x03, 0x04, 0x04, 0x70, 0x01, 0x98, 0x50, 0x0a, 0x05, 0x05, 0x70, 0x01, - 0x50, 0x0a, 0x06, 0x06, 0x07, 0x28, 0x06, 0x06, 0x40, 0x01, 0x0a, 0x40, 0x07, 0x07, 0x07, 0x08, 0x28, 0x07, 0x07, 0x40, 0x01, 0x0b, 0x40, 0x07, - 0x08, 0x08, 0x09, 0x28, 0x08, 0x08, 0x40, 0x01, 0x06, 0x40, 0x07, 0x09, 0x09, 0x0a, 0x20, 0x09, 0x09, 0xa0, 0x01, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, - 0xa0, 0x40, 0x01, 0x05, 0x40, 0x07, 0x0b, 0x0b, 0x0c, 0x0b, 0x0b, 0xa9, 0x40, 0x01, 0x07, 0x40, 0x07, 0x0c, 0x38, 0xe4, 0x0d, 0x0c, 0x20, 0x06, - 0x7c, 0x0c, 0x20, 0x05, 0x20, 0x07, 0xe8, 0xff, 0xf0, 0xf7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x23, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x61, 0x0a, 0x91, 0xd4, 0x00, 0x00, 0x00, - 0x01, 0x23, 0xde, 0x30, 0xeb, 0x30, 0xc6, 0x00, 0x30, 0xa3, 0x30, 0xcb, 0x30, 0xfc, 0x30, 0xaf, 0x40, 0x30, 0x06, 0x18, 0x23, 0x4d, 0x00, 0x61, - 0x00, 0x72, 0x00, 0x04, 0x74, 0x00, 0x69, 0x00, 0x6e, 0x20, 0x03, 0x71, 0x00, 0x17, 0x75, 0x00, 0x65, 0x10, 0x06, 0xa0, 0x7f, 0x63, 0x21, 0x8d, - 0x06, 0xb1, 0xff, 0x06, 0x10, 0x7f, 0x00, 0x6c, 0x9a, 0xd0, 0x63, 0x3c, 0x5c, 0x4b, 0x51, 0x80, 0x06, 0x7b, 0x1d, 0xc8, 0xb9, 0x74, 0xb9, 0xf0, - 0xd2, 0xc8, 0x18, 0xb2, 0x6c, 0xd0, 0x06, 0x5b, 0x9f, 0x0e, 0xf2, 0x7f, 0x1c, 0x04, 0x30, 0x00, 0x04, 0x40, 0x04, 0x42, 0x04, 0x38, 0x04, 0x3d, - 0xb9, 0x20, 0x03, 0x3a, 0x20, 0x0d, 0x10, 0x0e, 0xb4, 0xff, 0x0e, 0x16, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x38, 0x0d, 0x01, 0x13, 0x20, 0x00, 0x00, 0x30, 0x01, 0x24, 0x14, 0x60, 0x08, 0x06, 0x70, - 0x05, 0xc0, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd1, 0x0d, 0x81, 0xb9, 0x00, 0x00, 0x00, 0x02, 0x24, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x30, 0x10, - 0xc8, 0x30, 0xea, 0x20, 0x03, 0xfb, 0x30, 0xd5, 0x30, 0x00, 0xa7, 0x30, 0xc7, 0x30, 0xe9, 0x30, 0xeb, 0x30, 0x02, 0x23, 0x90, 0xa6, 0x90, 0x3a, - 0x53, 0x05, 0x18, 0x33, 0x44, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x80, 0x20, 0x07, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x46, - 0x08, 0x00, 0x65, 0x00, 0x64, 0x20, 0x03, 0x72, 0x00, 0x61, 0x2d, 0x00, 0x6c, 0x05, 0xc0, 0x7f, 0x63, 0x20, 0x87, 0x30, 0x7f, 0xe9, 0x20, 0x7f, - 0x56, 0xe9, 0x05, 0x60, 0x7f, 0x4d, 0x20, 0x6d, 0x78, 0x40, 0x7b, 0x30, 0xfb, 0x44, 0x2d, 0x00, 0x2e, 0x20, 0xff, 0x2e, 0x05, 0xa9, 0xaa, 0x91, - 0x7f, 0x65, 0x21, 0x85, 0xa6, 0x00, 0x31, 0x81, 0x65, 0x0c, 0xc1, 0xff, 0x54, 0x80, 0x05, 0x52, 0xe7, 0x00, 0x7b, 0x7d, 0x55, 0x00, 0xba, 0xdc, - 0xc2, 0x54, 0xcf, 0x20, 0x00, 0xf0, 0x07, 0xc5, 0x29, 0xbc, 0x6c, 0xad, 0x06, 0x1b, 0xa3, 0xb3, 0x6d, 0x33, 0x6f, 0xe0, 0x32, 0x83, 0xd3, 0x11, - 0x0c, 0xd3, 0xff, 0x24, 0x04, 0x35, 0x04, 0x34, 0x80, 0x20, 0x03, 0x40, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x00, 0x04, 0x3d, 0x04, 0x4b, 0x04, - 0x39, 0x04, 0x20, 0x08, 0x00, 0x3e, 0x04, 0x3a, 0x20, 0x13, 0x43, 0x04, 0x33, 0x60, 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x09, - 0x09, 0x0d, 0x09, 0x02, 0x09, 0x01, 0x01, 0x08, 0x09, 0x1b, 0x20, 0x05, 0x01, 0x40, 0x01, 0x58, 0x17, 0x03, 0x24, 0xa2, 0x30, 0xb0, 0x30, 0x50, - 0xa2, 0x28, 0x19, 0xab, 0x28, 0x19, 0xa8, 0x30, 0xf3, 0x30, 0x48, 0xc6, 0x28, 0x25, 0xde, 0x5d, 0x05, 0x9f, 0xc3, 0x41, 0x00, 0x67, 0x2d, 0x00, - 0x75, 0x28, 0x01, 0x73, 0x27, 0x95, 0x38, 0x07, 0x69, 0x28, 0x15, 0x58, 0x6e, 0x28, 0x27, 0x65, 0x28, 0x2d, 0x10, 0x15, 0x30, 0x7f, 0x3f, 0x96, - 0xdc, 0x00, 0x74, 0xaf, 0x65, 0x61, 0x53, 0xde, 0x8f, 0x79, 0x18, 0x72, 0xaf, 0x65, 0x05, 0xb2, 0xf9, 0x6b, 0x17, 0xc5, 0xfc, 0xac, 0x00, 0xa4, - 0xc2, 0x7c, 0xce, 0xac, 0xb9, 0xd4, 0xc5, 0x00, 0x4c, 0xd1, 0xa4, 0xc2, 0x20, 0x00, 0xfc, 0xc8, 0xd5, 0x05, 0xbf, 0xc1, 0x0e, 0xf3, 0x7f, 0x10, - 0x27, 0xf9, 0x43, 0x28, 0x13, 0x41, 0x28, 0x07, 0xab, 0x58, 0x19, 0x35, 0x28, 0x1b, 0x42, 0x28, 0x2d, 0x41, 0x04, 0xe8, 0x11, 0x10, 0x17, 0x54, - 0xff, 0x48, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x00, 0x02, 0x8f, 0x0f, 0x41, 0xb7, 0x00, 0x00, 0x04, 0x02, 0x24, 0xd0, - 0x30, 0xcf, 0x30, 0xfb, 0x48, 0x15, 0xd5, 0x03, 0x30, 0xa9, 0x30, 0xeb, 0x30, 0xcb, 0x28, 0x25, 0x05, 0xb8, 0x17, 0x51, 0x42, 0x2f, 0x95, 0x6a, - 0x2f, 0x99, 0x20, 0x00, 0x43, 0x68, 0x17, 0x56, 0x66, 0x2f, 0x39, 0x72, 0x28, 0x1b, 0x69, 0x2f, 0xaf, 0x05, 0x50, 0x7f, 0x73, 0x8e, 0x2f, 0x31, - 0x65, 0x00, 0x2d, 0x00, 0x20, 0x81, 0x04, 0xdf, 0x2b, 0x3f, 0xff, 0x4e, 0xd7, 0x49, 0x09, 0x5f, 0x9d, 0x6b, 0x00, 0x20, 0x7f, 0x6e, 0x05, 0x60, - 0xff, 0x06, 0x71, 0x81, 0x06, 0xf1, 0xff, 0x00, 0x0b, 0x4e, 0xa0, 0x52, 0xcc, 0x91, 0x8f, 0x79, 0x08, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x18, 0x15, - 0x00, 0x00, 0x14, 0x10, 0xbc, 0x58, 0xd5, 0x38, 0x15, 0xec, 0xd3, 0x74, 0xb9, 0x0b, 0xc8, 0xb2, 0x44, 0xc5, 0x05, 0xf8, 0x17, 0x4e, 0x8f, 0x9d, - 0x00, 0x32, 0xff, 0x45, 0xeb, 0x05, 0x43, 0xff, 0x69, 0x00, 0x78, 0xe4, 0x01, 0xf3, 0x05, 0x84, 0x01, 0x05, 0x1d, 0x04, 0x38, 0x04, 0x36, 0x28, - 0x09, 0x4f, 0x20, 0x01, 0x10, 0x20, 0x00, 0x1a, 0x48, 0x1b, 0x38, 0x04, 0x44, 0x04, 0x17, 0x3e, 0x04, 0x40, 0x28, 0x1f, 0x38, 0x20, 0x17, 0x0d, - 0x14, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x00, 0x03, 0x02, 0x02, 0x11, 0x02, 0x02, 0x03, 0x03, 0x10, 0x11, 0x02, 0x10, 0x20, 0x05, 0x03, 0x03, 0x38, - 0x17, 0x04, 0xe4, 0xad, 0x00, 0x00, 0x05, 0x00, 0x48, 0x17, 0xfb, 0x30, 0x71, 0xb9, 0x28, 0x21, 0x05, 0x5d, 0x3b, 0x00, 0xd8, 0x17, 0x20, 0x00, - 0x53, 0x2f, 0xcd, 0x55, 0x72, 0x06, 0xa8, 0x17, 0x20, 0x27, 0xb3, 0x75, 0x60, 0x87, 0x64, 0x04, 0x2f, 0xc1, 0x17, 0x53, 0x00, 0xfc, 0x28, 0x15, - 0x2d, 0x06, 0x88, 0x1f, 0x00, 0xf8, 0x17, 0x30, 0xff, 0x73, 0x65, 0x2f, 0xc7, 0x04, 0x71, 0x01, 0x06, 0xf1, 0xff, 0x57, 0x53, 0x06, 0xd8, 0x19, - 0xf8, 0x17, 0x0a, 0x18, 0xc2, 0x74, 0xb9, 0x05, 0xb8, 0x1b, 0x5a, 0x2f, 0xad, 0x69, 0xf5, 0x62, 0x81, 0x06, 0x38, 0x21, 0x00, 0xf8, 0x17, 0x33, - 0x7f, 0x6f, 0x64, 0x07, 0x6c, 0x04, 0x2f, 0xc0, 0x5e, 0x2e, 0x48, 0x15, 0x30, 0x48, 0x15, 0x06, 0x38, 0x23, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xb0, - 0x7f, 0x04, 0x00, 0x03, 0x03, 0x1a, 0x03, 0x03, 0x04, 0x04, 0x20, 0x20, 0x03, 0x1f, 0x20, 0x05, 0x04, 0x04, 0x2f, 0x11, 0x91, 0x00, 0xb1, 0x00, - 0x00, 0x06, 0x24, 0xab, 0x30, 0xf3, 0x03, 0x30, 0xda, 0x30, 0xc1, 0x30, 0xa7, 0x05, 0x68, 0x07, 0xff, 0xff, 0x88, 0x3f, 0xa3, 0x6d, 0x00, 0x70, - 0x2f, 0xaf, 0x63, 0x00, 0x68, 0xc0, 0x05, 0x2f, 0x9f, 0x10, 0x0f, 0xf0, 0x7f, 0x4e, 0x57, 0x69, 0x4f, 0x07, 0x52, 0xc0, 0x06, 0x52, 0xfb, 0x3f, - 0xff, 0x84, 0xce, 0x98, 0xd3, 0xb4, 0xcc, 0xe0, 0x05, 0xb8, 0x09, 0x0f, 0xd3, 0x7f, 0x37, 0xfd, 0x3c, 0x04, 0x3f, 0x04, 0x35, 0x30, 0x04, 0x47, - 0x20, 0x03, 0x10, 0x1e, 0x14, 0xff, 0x05, 0x04, 0x04, 0x02, 0x01, 0x04, 0x04, 0x05, 0x05, 0x02, 0x04, 0x07, 0x20, 0x05, 0x00, 0x05, 0x05, 0x1d, - 0x0e, 0x9f, 0xbf, 0x00, 0x00, 0x00, 0x07, 0x24, 0xc1, 0x30, 0xa2, 0x30, 0xd1, 0x30, 0x6b, 0xb9, 0x06, 0x68, 0x15, 0x38, 0x17, 0x68, 0x4e, 0x97, - 0x70, 0x4f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x02, 0x70, 0x60, 0x15, 0x5e, 0xaf, 0x65, 0x06, 0x98, 0x17, 0x58, 0x01, 0xce, 0x44, 0xc5, 0x0c, 0xd3, - 0xa4, 0xc2, 0x06, 0x78, 0x19, 0x82, 0x0e, 0xf3, 0x7f, 0x27, 0x04, 0x4c, 0x04, 0x4f, 0x28, 0x17, 0x30, 0x30, 0x04, 0x41, 0x06, 0x28, 0x15, 0x10, - 0x17, 0x14, 0xff, 0x06, 0x05, 0x05, 0x03, 0x01, 0x05, 0x05, 0x06, 0x06, 0x03, 0x05, 0x1e, 0x20, 0x05, 0x00, 0x06, 0x06, 0xe9, 0x0b, 0xc9, 0xbd, - 0x00, 0x00, 0x5c, 0x08, 0x28, 0x17, 0xef, 0x20, 0x01, 0x06, 0x9d, 0x2f, 0x58, 0x17, 0x68, 0x00, 0x70, 0x75, 0x2f, 0xb7, 0x50, 0x05, 0x10, 0x15, - 0xd0, 0x7f, 0x47, 0x59, 0xe6, 0x74, 0x21, 0xe6, 0x74, 0x06, 0xb8, 0x17, 0x40, 0xc6, 0x40, 0xc6, 0x06, 0x78, 0x15, 0x83, 0x0f, 0x13, 0x7f, 0x27, - 0x04, 0x38, 0x04, 0x43, 0x28, 0x15, 0x30, 0x03, 0x80, 0x10, 0x1e, 0x34, 0xff, 0x07, 0x06, 0x06, 0x04, 0x06, 0x06, 0x07, 0x08, 0x07, 0x04, 0x06, - 0x1d, 0x20, 0x05, 0x07, 0x07, 0x5c, 0x00, 0x14, 0x91, 0xb4, 0x00, 0x00, 0x09, 0x24, 0xb3, 0x00, 0x30, 0xa2, 0x30, 0xa6, 0x30, 0xa4, 0x30, 0xe9, - 0x88, 0x06, 0x68, 0x1b, 0x43, 0x00, 0x6f, 0x68, 0x11, 0x69, 0x00, 0x6c, 0x82, 0x2f, 0xb7, 0x20, 0x00, 0x64, 0x00, 0x65, 0x20, 0x05, 0x5a, 0xab, - 0x2f, 0xc3, 0x72, 0x2f, 0xc7, 0x67, 0x20, 0x1f, 0x7a, 0x04, 0xa8, 0x2d, 0xf0, 0x7f, 0xc0, 0x10, 0x06, 0xf0, 0xff, 0x05, 0xff, 0xb7, 0xd1, 0x79, - 0x3f, 0x96, 0xe6, 0x97, 0x20, 0xc9, 0x62, 0x06, 0x7b, 0x19, 0x54, 0xcf, 0x44, 0xc5, 0xb0, 0x07, 0xc6, 0x7c, 0xc7, 0x7c, 0xb7, 0x06, 0x58, 0x1b, - 0x07, 0xf3, 0x7f, 0x05, 0xf3, 0xff, 0x11, 0x1a, 0x04, 0x3e, 0x48, 0x15, 0x38, 0x04, 0x3b, 0x06, 0x48, 0x19, 0xc0, 0x0e, 0xf1, 0x7f, 0x10, 0x06, - 0xf0, 0xff, 0x08, 0x07, 0x07, 0x05, 0x07, 0x07, 0x04, 0x08, 0x08, 0x05, 0x07, 0x0a, 0x20, 0x05, 0x08, 0x08, 0x01, 0x12, 0x12, 0x2e, 0xb8, 0x00, - 0x00, 0x0a, 0x28, 0x17, 0x1a, 0xea, 0x30, 0xde, 0x06, 0x68, 0x13, 0x78, 0x17, 0x6c, 0x2f, 0xb1, 0x6d, 0xc0, 0x06, 0x27, 0x93, 0x10, 0x0f, 0x30, - 0x7f, 0xd1, 0x79, 0x29, 0x52, 0x6c, 0x9a, 0x81, 0x06, 0x92, 0xff, 0x5c, 0xcf, 0xac, 0xb9, 0xc8, 0xb9, 0x06, 0x58, 0x13, 0xd6, 0x0f, 0x33, 0x7f, - 0x38, 0x17, 0x3b, 0x28, 0x15, 0x3c, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x09, 0x00, 0x08, 0x08, 0x06, 0x08, 0x08, 0x09, 0x09, 0x06, 0x20, - 0x08, 0x0b, 0x20, 0x05, 0x09, 0x09, 0xad, 0x0d, 0x3f, 0x00, 0xb6, 0x00, 0x00, 0x0b, 0x24, 0xc9, 0x30, 0xa5, 0x02, 0x30, 0xe9, 0x30, 0xf3, 0x30, - 0xb4, 0x06, 0x68, 0x1b, 0x44, 0xd8, 0x2f, 0xa9, 0x3f, 0x17, 0x6e, 0x4f, 0x19, 0x10, 0x16, 0x10, 0x7f, 0x5c, 0x67, 0x70, 0x10, 0x51, 0x08, 0x62, - 0x06, 0x9b, 0x17, 0x50, 0xb4, 0x91, 0xb7, 0x30, 0xe0, 0xac, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x43, 0x04, 0x46, 0x40, 0x28, 0x13, - 0x3d, 0x04, 0x33, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x0a, 0x1a, 0x0a, 0x0a, 0x07, 0x20, 0x03, 0x20, 0x04, 0x05, 0x30, 0x06, 0x0a, 0x00, 0x17, - 0x11, 0x93, 0xb5, 0x00, 0x00, 0x0c, 0x24, 0x01, 0xb0, 0x30, 0xa2, 0x30, 0xca, 0x30, 0xd5, 0x20, 0x05, 0x58, 0xc8, 0x06, 0x48, 0x19, 0x47, 0x28, - 0x17, 0x38, 0x15, 0x61, 0x00, 0x6a, 0xb0, 0x40, 0x09, 0x74, 0x05, 0xe8, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0xb3, 0x7e, 0x10, 0x4e, 0x53, - 0x58, 0x06, 0x88, 0x19, 0xfc, 0xac, 0x98, 0xb0, 0x03, 0xc4, 0xd6, 0x44, 0xc5, 0xa0, 0xd1, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x62, 0x13, 0x28, - 0x17, 0x38, 0x15, 0x30, 0x04, 0x45, 0x40, 0x09, 0x42, 0xc2, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x0b, 0x0b, 0x08, 0x20, 0x03, 0x0b, - 0x10, 0x09, 0x0b, 0x04, 0x30, 0x06, 0x0b, 0xf1, 0x0e, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x0d, 0x24, 0xb2, 0x30, 0xec, 0x35, 0x30, 0xed, 0x06, 0x48, - 0x11, 0x98, 0x17, 0x65, 0x2f, 0xb1, 0x72, 0x40, 0x05, 0xc0, 0x06, 0x1f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x3c, 0x68, 0xf7, 0x96, 0x57, 0x7f, 0x81, - 0x06, 0x92, 0xff, 0x8c, 0xac, 0x08, 0xb8, 0x5c, 0xb8, 0x06, 0x58, 0x13, 0x83, 0x0f, 0x33, 0x7f, 0x13, 0x04, 0x35, 0x04, 0x40, 0x20, 0x01, 0x30, - 0x05, 0xc2, 0x05, 0xd8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x0c, 0x0c, 0x0c, 0x09, 0x20, 0x03, 0x0c, 0x10, 0x0a, 0x0c, 0x03, 0x30, 0x06, 0x0c, 0x7a, - 0x0c, 0x3f, 0x00, 0xb9, 0x00, 0x00, 0x0e, 0x24, 0xa4, 0x30, 0xc0, 0x08, 0x30, 0xeb, 0x30, 0xb4, 0x06, 0x88, 0x19, 0x48, 0x00, 0x69, 0x23, 0x00, - 0x64, 0x2f, 0xb1, 0x6c, 0x00, 0x67, 0x06, 0x28, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x00, 0x0a, 0x4f, 0xbe, 0x8f, 0x14, 0x5c, 0x08, 0x62, 0x81, 0x06, - 0x7b, 0x19, 0x74, 0xc7, 0xec, 0xb2, 0xe0, 0xac, 0x06, 0x98, 0x17, 0x80, 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x34, 0x04, 0x30, 0x04, 0x3b, 0x0c, 0x04, - 0x4c, 0x04, 0x33, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x0d, 0x21, 0x0d, 0x0a, 0x20, 0x03, 0x0d, 0x0b, 0x0d, 0x06, 0x30, 0x06, 0x08, - 0x0d, 0x4e, 0x0e, 0xcb, 0x28, 0x17, 0x0f, 0x24, 0xcf, 0x02, 0x30, 0xea, 0x30, 0xb9, 0x30, 0xb3, 0x06, 0x88, 0x17, 0x4a, 0x83, 0x48, 0x13, 0x69, - 0x00, 0x73, 0x00, 0x63, 0x06, 0x48, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0xc8, 0x54, 0x29, 0x52, 0xaf, 0x65, 0xd1, 0x79, 0x80, 0x06, 0x7b, 0x17, - 0x60, 0xd5, 0xac, 0xb9, 0xa4, 0xc2, 0x54, 0x68, 0xcf, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x25, 0x48, 0x15, 0x38, 0x04, 0x41, 0x30, 0x04, 0x3a, - 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x0e, 0x0e, 0x0b, 0x84, 0x20, 0x03, 0x0e, 0x0c, 0x0e, 0x1c, 0x30, 0x06, 0x0e, 0xb2, 0x00, 0x0e, - 0x85, 0xb6, 0x00, 0x00, 0x10, 0x24, 0xe1, 0x20, 0x30, 0xd2, 0x06, 0xa8, 0x15, 0x00, 0x00, 0x4d, 0x00, 0xe9, 0x3b, 0x00, 0x78, 0x2f, 0xb3, 0x06, - 0x58, 0x15, 0x30, 0x7f, 0x65, 0x06, 0xe0, 0x7f, 0x07, 0x10, 0xff, 0x70, 0x73, 0x29, 0x95, 0x06, 0x71, 0x81, 0x06, 0xf1, 0xff, 0xa8, 0x58, 0x7f, - 0x89, 0x21, 0xe5, 0x54, 0x06, 0x92, 0xff, 0x54, 0xba, 0x88, 0xd7, 0x06, 0x98, 0x15, 0x83, 0x0f, 0x12, 0xff, 0x1c, 0x04, 0x35, 0x04, 0x45, 0x28, - 0x17, 0x06, 0x58, 0x15, 0xc2, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x0f, 0x0f, 0x0f, 0x0c, 0x20, 0x03, 0x0f, 0x40, 0x0d, 0x50, 0x06, 0x0f, - 0xb7, 0x0d, 0x21, 0xb9, 0x00, 0x00, 0x00, 0x11, 0x24, 0xdf, 0x30, 0xc1, 0x30, 0xe7, 0x02, 0x30, 0xa2, 0x30, 0xab, 0x30, 0xf3, 0x06, 0x48, 0x1d, - 0x4d, 0xa8, 0x48, 0x13, 0x68, 0x2f, 0xab, 0x61, 0x2f, 0xb1, 0xe1, 0x00, 0x6e, 0x08, 0x00, 0x20, 0x00, 0x64, 0x27, 0xab, 0x20, 0x00, 0x4f, 0x83, - 0x2f, 0xc1, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x04, 0xcf, 0xc7, 0x00, 0x10, 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xd1, 0x7f, 0x73, 0x7c, 0x74, - 0x53, 0xaf, 0x80, 0x80, 0x06, 0x9b, 0x17, 0xf8, 0xbb, 0x08, 0xcd, 0x44, 0xc5, 0x78, 0x75, 0xce, 0x06, 0x78, 0x19, 0x08, 0x13, 0x7f, 0x05, 0xd3, - 0xff, 0x1c, 0x28, 0x13, 0x47, 0x28, 0x13, 0x47, 0x30, 0x28, 0x19, 0x30, 0x04, 0x3d, 0x06, 0x08, 0x1b, 0x0e, 0xf1, 0x7f, 0x10, 0x06, 0xf0, 0xff, - 0x0d, 0x10, 0x10, 0x10, 0x0e, 0x20, 0x03, 0x20, 0x04, 0x0d, 0x30, 0x06, 0x00, 0x10, 0x02, 0x0e, 0x19, 0xb8, 0x00, 0x00, 0x12, 0x00, 0x24, 0xe2, - 0x30, 0xec, 0x30, 0xed, 0x30, 0xb9, 0xc5, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x6f, 0x00, 0x72, 0x2f, 0xb3, 0x6c, 0x2f, 0xaf, 0x40, 0x73, 0x10, 0x16, - 0x20, 0x7f, 0xab, 0x83, 0xf7, 0x96, 0x1b, 0x6d, 0x20, 0xaf, 0x65, 0x06, 0x78, 0x19, 0xa8, 0xba, 0x10, 0xb8, 0x5c, 0x1a, 0xb8, 0xa4, 0xc2, 0x06, - 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x1c, 0x28, 0x13, 0x40, 0x0b, 0x04, 0x35, 0x04, 0x3b, 0x28, 0x1b, 0x41, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, - 0x0d, 0x11, 0x11, 0x11, 0x0f, 0x20, 0x03, 0x20, 0x04, 0x0e, 0x30, 0x06, 0x00, 0x11, 0x73, 0x0d, 0x6d, 0xb9, 0x00, 0x00, 0x13, 0x00, 0x24, 0xca, - 0x30, 0xe4, 0x30, 0xea, 0x30, 0xc3, 0x2a, 0x30, 0xc8, 0x06, 0x68, 0x19, 0x4e, 0x2f, 0xa7, 0x79, 0x2f, 0xab, 0x72, 0xa0, 0x2f, 0xb7, 0x74, 0x10, - 0x16, 0x20, 0x7f, 0xb3, 0x7e, 0x9a, 0x4e, 0xcc, 0x10, 0x91, 0x79, 0x72, 0x06, 0x7b, 0x17, 0x98, 0xb0, 0x7c, 0xc5, 0x0c, 0xac, 0xb9, 0xb8, 0xd2, - 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x04, 0x11, 0x30, 0x04, 0x4f, 0x28, 0x19, 0x38, 0x04, 0x42, 0x06, 0x28, 0x15, 0x86, 0x10, 0x17, 0x14, - 0xff, 0x12, 0x12, 0x12, 0x10, 0x20, 0x03, 0x20, 0x04, 0x0f, 0x80, 0x30, 0x06, 0x12, 0x49, 0x0f, 0x68, 0xb5, 0x00, 0x00, 0x00, 0x14, 0x24, 0xcc, - 0x30, 0xa8, 0x30, 0xdc, 0x30, 0x01, 0xfb, 0x30, 0xec, 0x30, 0xaa, 0x30, 0xf3, 0x06, 0x28, 0x1b, 0x14, 0x4e, 0x00, 0x75, 0x2f, 0xad, 0x76, 0x2f, - 0xb5, 0x20, 0x00, 0x44, 0x4c, 0x2f, 0xb7, 0xf3, 0x00, 0x6e, 0x10, 0x15, 0xc0, 0x7f, 0xb0, 0x65, 0x08, 0xb1, 0x83, 0x02, 0x66, 0x06, 0x78, 0x15, - 0x00, 0x00, 0x04, 0x00, 0xb2, 0xd0, 0xc5, 0xf4, 0xbc, 0x08, 0xb8, 0x28, 0x54, 0xc6, 0x06, 0x58, 0x19, 0x4e, 0x2b, 0x8f, 0x65, 0x23, 0x83, 0x77, - 0x00, 0x40, 0x2d, 0x0e, 0x43, 0x7f, 0x1d, 0x04, 0x43, 0x04, 0x4d, 0x04, 0x00, 0x32, 0x04, 0x3e, 0x04, 0x2d, 0x00, 0x1b, 0x04, 0x58, 0x35, 0x20, - 0x07, 0x3d, 0x05, 0xc8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x13, 0x13, 0x13, 0x68, 0x12, 0x20, 0x03, 0x20, 0x04, 0x11, 0x30, 0x06, 0x13, 0x40, 0x12, - 0x00, 0xaa, 0xb8, 0x00, 0x00, 0x15, 0x24, 0xaa, 0x30, 0x06, 0xa2, 0x30, 0xcf, 0x30, 0xab, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x4f, 0xac, 0x2f, 0xaf, - 0x78, 0x2f, 0xb3, 0x63, 0x2f, 0xb7, 0x10, 0x16, 0x30, 0x7f, 0xe6, 0x74, 0x08, 0xc8, 0x54, 0x61, 0x53, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x45, 0x06, - 0xc5, 0xac, 0xc0, 0x74, 0xce, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1e, 0x0b, 0x04, 0x30, 0x04, 0x45, 0x20, 0x03, 0x3a, 0x20, 0x07, 0x10, 0x1e, - 0x34, 0xff, 0x0d, 0x14, 0x14, 0x14, 0x13, 0x20, 0x03, 0x20, 0x04, 0x12, 0x30, 0x06, 0x00, 0x14, 0x1f, 0x0c, 0x3a, 0xbb, 0x00, 0x00, 0x16, 0x00, - 0x24, 0xd7, 0x30, 0xa8, 0x30, 0xd6, 0x30, 0xe9, 0xa3, 0x06, 0x88, 0x17, 0x50, 0x4f, 0xaf, 0x62, 0x00, 0x6c, 0x06, 0x68, 0x17, 0x10, 0x0e, 0xf0, - 0x7f, 0x00, 0x6e, 0x66, 0xc3, 0x57, 0x03, 0x5e, 0xc9, 0x62, 0x80, 0x06, 0x7b, 0x17, 0x78, 0xd4, 0xd0, 0xc5, 0x14, 0xbe, 0x7c, 0x60, 0xb7, 0x06, - 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x43, 0x04, 0x4d, 0x0c, 0x04, 0x31, 0x04, 0x3b, 0x06, 0x68, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x15, - 0x34, 0x15, 0x14, 0x20, 0x03, 0x20, 0x04, 0x13, 0x30, 0x06, 0x15, 0x8b, 0x00, 0x0d, 0x2c, 0xba, 0x00, 0x00, 0x17, 0x24, 0xb1, 0x02, 0x30, 0xec, - 0x30, 0xbf, 0x30, 0xed, 0x06, 0x88, 0x17, 0x51, 0x82, 0x48, 0x17, 0x72, 0x00, 0xe9, 0x00, 0x74, 0x2f, 0xb9, 0x72, 0x02, 0x00, 0x6f, 0x00, 0x20, - 0x00, 0x64, 0x28, 0x29, 0x20, 0x28, 0x00, 0x41, 0x20, 0x15, 0x74, 0x28, 0x33, 0x61, 0x00, 0x67, 0xf0, 0x04, 0xaf, 0xcb, 0x00, 0x10, 0x7f, 0x06, - 0xf0, 0xff, 0x10, 0x05, 0xd1, 0x7f, 0x4b, 0x51, 0xf7, 0x96, 0x08, 0x54, 0x58, 0x57, 0x7f, 0x06, 0x7b, 0x17, 0x00, 0xcf, 0x08, 0x07, 0xb8, 0xc0, - 0xd0, 0x5c, 0xb8, 0x06, 0x78, 0x17, 0x08, 0x13, 0x7f, 0x05, 0xd3, 0xff, 0x05, 0x1a, 0x04, 0x35, 0x04, 0x40, 0x20, 0x03, 0x42, 0x28, 0x17, 0x1c, - 0x40, 0x04, 0x3e, 0x06, 0x08, 0x1b, 0x0e, 0xf1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x16, 0x16, 0x34, 0x16, 0x15, 0x20, 0x03, 0x20, 0x04, 0x08, 0x30, - 0x06, 0x16, 0xa6, 0x00, 0x0e, 0x9e, 0xb8, 0x00, 0x00, 0x18, 0x24, 0xad, 0x22, 0x30, 0xf3, 0x28, 0x17, 0xca, 0x30, 0xfb, 0x28, 0x1b, 0xfc, 0xc5, - 0x06, 0x28, 0x1d, 0x38, 0x17, 0x69, 0x00, 0x6e, 0x48, 0x15, 0x6e, 0x2f, 0xb3, 0x1c, 0x20, 0x00, 0x52, 0x28, 0x1b, 0x05, 0x97, 0x9d, 0x10, 0x0e, - 0xf0, 0x7f, 0xd1, 0x91, 0x00, 0x54, 0x58, 0xb3, 0x7e, 0x57, 0x7f, 0x65, 0x59, 0x80, 0x06, 0x5b, 0x19, 0xa8, 0xd0, 0xc0, 0xd0, 0x98, 0xb0, 0x5c, - 0x18, 0xb8, 0x24, 0xc6, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x38, 0x28, 0x04, 0x3d, 0x48, 0x15, 0x3d, 0x28, 0x19, 0x2d, 0x00, 0x20, - 0xe1, 0x28, 0x1b, 0x05, 0xb8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x17, 0x17, 0x17, 0x16, 0x20, 0x03, 0xa0, 0x20, 0x04, 0x09, 0x30, 0x06, 0x17, 0x27, - 0x0d, 0x36, 0xc1, 0x04, 0x00, 0x00, 0x19, 0x24, 0xb5, 0x28, 0x17, 0xfb, 0x30, 0x04, 0xeb, 0x30, 0xa4, 0x30, 0xb9, 0x28, 0x1b, 0xdd, 0x30, 0x14, - 0xc8, 0x30, 0xb7, 0x05, 0xc8, 0x1d, 0x53, 0x48, 0x0f, 0x20, 0x00, 0x55, 0x4c, 0x48, 0x1f, 0x73, 0x2e, 0xad, 0x50, 0x2f, 0xb3, 0x74, 0x2f, 0xb7, - 0x10, 0x73, 0x00, 0xed, 0x10, 0x15, 0x20, 0x7f, 0x23, 0x57, 0xef, 0x8d, 0x00, 0x13, 0x66, 0xaf, 0x65, 0xe2, 0x6c, 0x58, 0x62, 0x20, 0x7f, 0x89, - 0x06, 0x1b, 0x17, 0xb0, 0xc0, 0xe8, 0xb8, 0x74, 0x00, 0xc7, 0xa4, 0xc2, 0xec, 0xd3, 0xa0, 0xd1, 0xdc, 0x68, 0xc2, 0x06, 0x18, 0x1b, 0x0e, 0xf3, - 0x7f, 0x21, 0x48, 0x11, 0x2d, 0x00, 0x1b, 0x2a, 0x04, 0x43, 0x28, 0x21, 0x41, 0x28, 0x19, 0x1f, 0x28, 0x19, 0x42, 0xb0, 0x28, 0x1d, 0x41, 0x28, - 0x31, 0x10, 0x1d, 0x14, 0xff, 0x18, 0x18, 0x18, 0x17, 0xd0, 0x20, 0x03, 0x20, 0x04, 0x15, 0x30, 0x06, 0x18, 0xc0, 0x0f, 0x31, 0x40, 0xb8, 0x2b, - 0x2d, 0x24, 0xb7, 0x30, 0xca, 0x30, 0xed, 0x38, 0x30, 0xa2, 0x05, 0xc8, 0x0b, 0xd8, 0x17, 0x3f, 0xad, 0x61, 0x00, 0x6c, 0xa0, 0x2f, 0xa5, 0x61, - 0x10, 0x16, 0x20, 0x7f, 0x21, 0x95, 0xa3, 0x90, 0x57, 0x10, 0x7f, 0x9a, 0x4e, 0x06, 0x72, 0xff, 0xdc, 0xc2, 0xa0, 0xb0, 0x0e, 0x5c, 0xb8, 0x44, - 0xc5, 0x06, 0x18, 0x11, 0x0f, 0x61, 0xff, 0x28, 0x0d, 0x3d, 0xac, 0x28, 0x1b, 0x3b, 0x28, 0x0d, 0x30, 0x05, 0x28, 0x07, 0x10, 0x17, 0xf4, 0xff, - 0x19, 0x19, 0x34, 0x19, 0x18, 0x20, 0x03, 0x20, 0x04, 0x16, 0x30, 0x06, 0x19, 0xa2, 0x00, 0x11, 0xa3, 0xb3, 0x00, 0x00, 0x1b, 0x24, 0xbd, 0x0d, - 0x30, 0xce, 0x30, 0xe9, 0x06, 0x88, 0x15, 0x3f, 0xaf, 0x6f, 0x2f, 0xaf, 0x18, 0x6f, 0x00, 0x72, 0x06, 0x48, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x22, - 0x7d, 0xfa, 0x10, 0x8b, 0xc9, 0x62, 0x06, 0x92, 0xff, 0x8c, 0xc1, 0x78, 0xb1, 0x35, 0x7c, 0xb7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x21, 0x28, - 0x0f, 0x3d, 0x28, 0x13, 0x61, 0x40, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x1a, 0x1a, 0x1a, 0x19, 0x20, 0x03, 0xa0, 0x20, 0x04, 0x17, 0x30, - 0x06, 0x1a, 0xab, 0x14, 0x18, 0xb1, 0x00, 0x00, 0x00, 0x1c, 0x24, 0xbf, 0x30, 0xd0, 0x30, 0x15, 0xb9, 0x30, 0xb3, 0x06, 0x88, 0x19, 0x54, 0x2f, - 0xab, 0x62, 0x2f, 0xaf, 0x18, 0x73, 0x00, 0x63, 0x2f, 0xb1, 0x10, 0x16, 0x20, 0x7f, 0x58, 0xf4, 0x5d, 0x08, 0xaf, 0x65, 0xd1, 0x79, 0x06, 0x7b, - 0x19, 0xc0, 0xd0, 0x14, 0x06, 0xbc, 0xa4, 0xc2, 0x54, 0xcf, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0xa3, 0x28, 0x0f, 0x31, 0x28, 0x13, 0x41, - 0x04, 0x3a, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x22, 0x1b, 0x1b, 0x50, 0x01, 0x1a, 0x1b, 0x18, 0x40, 0x0a, 0xc9, 0x02, 0x0c, 0xee, 0xbd, 0x00, - 0x00, 0x1d, 0x28, 0x17, 0xde, 0x03, 0x30, 0xa6, 0x30, 0xea, 0x30, 0xd1, 0x28, 0x1d, 0x06, 0x3d, 0x35, 0xa0, 0x38, 0x17, 0x6d, 0x2f, 0xab, 0x75, - 0x00, 0x6c, 0x00, 0x69, 0x30, 0x00, 0x70, 0x48, 0x21, 0x10, 0x15, 0xc0, 0x7f, 0x58, 0xdb, 0x6b, 0x29, 0x04, 0x52, 0x15, 0x5e, 0xaf, 0x65, 0x06, - 0x5b, 0x19, 0xc0, 0xd0, 0x00, 0xc8, 0xb9, 0xb8, 0xc6, 0xac, 0xb9, 0x0c, 0xd3, 0x3a, 0xa4, 0xc2, 0x06, 0x38, 0x1b, 0x0e, 0xf3, 0x7f, 0x38, 0x17, - 0x3c, 0x28, 0x1b, 0x43, 0x03, 0x04, 0x3b, 0x04, 0x38, 0x04, 0x3f, 0x48, 0x21, 0x10, 0x1d, 0xb4, 0xff, 0x22, 0x1c, 0x1c, 0x50, 0x01, 0x1b, 0x1c, - 0x19, 0x40, 0x0a, 0xe0, 0x00, 0x10, 0x82, 0xb9, 0x00, 0x00, 0x1e, 0x24, 0xc8, 0x2d, 0x30, 0xe9, 0x28, 0x11, 0xab, 0x20, 0x05, 0x06, 0x5d, 0x31, - 0x54, 0x28, 0x0f, 0x16, 0x61, 0x00, 0x78, 0x2f, 0xad, 0x61, 0x40, 0x09, 0x10, 0x15, 0xf0, 0x7f, 0x79, 0x00, 0x72, 0xc9, 0x62, 0xaf, 0x65, 0x61, - 0x53, 0xc9, 0x40, 0x62, 0x06, 0x68, 0x17, 0xd2, 0x7d, 0xb7, 0xa4, 0xc2, 0x7c, 0x1b, 0xce, 0x7c, 0xb7, 0x06, 0x38, 0x15, 0x0f, 0x13, 0x7f, 0x22, - 0x28, 0x0f, 0x38, 0x0b, 0x72, 0x3a, 0x28, 0x1f, 0x30, 0x09, 0x10, 0x1d, 0xf4, 0xff, 0x1d, 0x1d, 0x50, 0x01, 0x1c, 0x20, 0x1d, 0x1a, 0x40, 0x0a, - 0xbb, 0x0d, 0x24, 0xba, 0x00, 0x08, 0x00, 0x1f, 0x24, 0xd9, 0x28, 0x17, 0xaf, 0x30, 0xeb, 0xc1, 0x28, 0x1b, 0x06, 0x5d, 0x2f, 0x56, 0x00, 0x65, - 0x00, 0x72, 0x2f, 0xb3, 0x40, 0x63, 0x20, 0x05, 0x75, 0x00, 0x7a, 0x00, 0x2d, 0x00, 0x5e, 0x4c, 0x48, 0x29, 0x76, 0x20, 0x17, 0x06, 0x30, 0x7f, - 0x06, 0xf0, 0xff, 0x10, 0x05, 0xf0, 0x7f, 0xe6, 0x00, 0x97, 0xc9, 0x62, 0x4b, 0x51, 0x81, 0x9c, 0xaf, 0x40, 0x65, 0x06, 0x5b, 0x17, 0xa0, 0xbc, - 0x7c, 0xb7, 0x6c, 0xd0, 0x0e, 0xe8, 0xb8, 0xa4, 0xc2, 0x06, 0x58, 0x17, 0x07, 0xf2, 0xff, 0x05, 0xf3, 0xff, 0x12, 0x0a, 0x04, 0x35, 0x04, 0x40, - 0x28, 0x19, 0x3a, 0x20, 0x05, 0x43, 0xe4, 0x28, 0x1f, 0x0e, 0xf4, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x1e, 0x1e, 0x50, 0x01, 0x1d, 0x1e, 0x40, 0x02, - 0x40, 0x0a, 0xe3, 0x0d, 0x15, 0xbb, 0x00, 0x00, 0x00, 0x20, 0x24, 0xe6, 0x30, 0xab, 0x30, 0xbf, 0x30, 0x46, 0xf3, 0x06, 0x68, 0x15, 0x00, 0x00, - 0x59, 0x28, 0x0d, 0x3f, 0xab, 0x74, 0x0a, 0x00, 0xe1, 0x00, 0x6e, 0x0e, 0x60, 0x7f, 0x6b, 0x40, 0xff, 0x61, 0xc0, 0x0e, 0x80, 0xff, 0x06, 0xb1, - 0xff, 0x24, 0x5c, 0x61, 0x53, 0x66, 0x57, 0xc1, 0x06, 0x72, 0xfd, 0x23, 0x81, 0xc7, 0x74, 0xce, 0xc4, 0xd0, 0x06, 0x58, 0x13, 0xa2, 0x0f, 0x33, - 0x7f, 0x2e, 0x28, 0x11, 0x30, 0x04, 0x42, 0x28, 0x19, 0x3d, 0xe4, 0x06, 0x08, 0x13, 0x0f, 0x74, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x1f, 0x1f, 0x50, - 0x01, 0x1e, 0x1f, 0x40, 0x20, 0x40, 0x0a, 0xe8, 0x0e, 0x46, 0xc0, 0x00, 0x00, 0x15, 0x21, 0x24, 0xb5, 0x28, 0x17, 0xc6, 0x28, 0x1b, 0xb9, 0x06, - 0x68, 0x19, 0x6a, 0x5a, 0x4f, 0xab, 0x38, 0x17, 0x65, 0x48, 0x1f, 0x73, 0x10, 0x15, 0xe0, 0x7f, 0x28, 0x00, 0x84, 0x61, 0x53, 0x79, 0x72, 0x61, - 0x53, 0xaf, 0x40, 0x65, 0x06, 0x5b, 0x19, 0xac, 0xc0, 0x74, 0xce, 0x4c, 0xd1, 0x0d, 0x74, 0xce, 0xa4, 0xc2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, - 0x21, 0x28, 0x15, 0xac, 0x58, 0x19, 0x35, 0x48, 0x21, 0x41, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x20, 0x20, 0x88, 0x50, 0x01, 0x1f, 0x20, - 0x14, 0x40, 0x0a, 0x33, 0x10, 0x0e, 0x40, 0xb7, 0x00, 0x3f, 0xff, 0x01, 0x09, 0x09, 0x0d, 0x09, 0x09, 0x04, 0x01, 0x01, 0x08, 0x09, 0x1b, 0x20, - 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x04, 0x02, 0x03, 0x02, 0x02, 0x11, 0x20, 0x05, 0x03, 0x11, - 0x20, 0x02, 0x10, 0x20, 0x05, 0x03, 0x03, 0x04, 0x03, 0x03, 0x42, 0x1a, 0x20, 0x05, 0x04, 0x20, 0x03, 0x1f, 0x20, 0x05, 0x04, 0x04, 0x04, 0x05, - 0x04, 0x04, 0x02, 0x20, 0x05, 0x05, 0x02, 0x20, 0x04, 0x07, 0x20, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x42, 0x03, 0x20, 0x05, 0x06, 0x03, 0x05, - 0x1e, 0x20, 0x05, 0x06, 0x04, 0x06, 0x07, 0x06, 0x06, 0x04, 0x20, 0x05, 0x07, 0x04, 0x20, 0x06, 0x1d, 0x20, 0x05, 0x07, 0x07, 0x08, 0x07, 0x07, - 0x42, 0x05, 0x20, 0x05, 0x08, 0x05, 0x07, 0x0a, 0x20, 0x05, 0x08, 0x04, 0x08, 0x09, 0x08, 0x08, 0x06, 0x20, 0x05, 0x09, 0x06, 0x20, 0x08, 0x0b, - 0x20, 0x05, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x68, 0x07, 0x20, 0x03, 0x20, 0x04, 0x05, 0x30, 0x06, 0x0a, 0x0b, 0x0b, 0x21, 0x0b, 0x08, 0x20, 0x03, - 0x0b, 0x09, 0x0b, 0x04, 0x30, 0x06, 0x04, 0x0b, 0x0c, 0x0c, 0x0c, 0x09, 0x20, 0x03, 0x0c, 0x0a, 0x20, 0x0c, 0x03, 0x30, 0x06, 0x0c, 0x0d, 0x0d, - 0x0d, 0x0a, 0x84, 0x20, 0x03, 0x0d, 0x0b, 0x0d, 0x06, 0x30, 0x06, 0x0d, 0x0e, 0x10, 0x0e, 0x0e, 0x0b, 0x20, 0x03, 0x0e, 0x0c, 0x0e, 0x1c, 0x82, - 0x30, 0x06, 0x0e, 0x0f, 0x0f, 0x0f, 0x0c, 0x20, 0x03, 0x0f, 0x41, 0x0d, 0x50, 0x06, 0x0f, 0x10, 0x10, 0x10, 0x0e, 0x20, 0x03, 0xa0, 0x20, 0x04, - 0x0d, 0x30, 0x06, 0x10, 0x11, 0x11, 0x11, 0x0f, 0xd0, 0x20, 0x03, 0x20, 0x04, 0x0e, 0x30, 0x06, 0x11, 0x12, 0x12, 0x12, 0x68, 0x10, 0x20, 0x03, - 0x20, 0x04, 0x0f, 0x30, 0x06, 0x12, 0x13, 0x13, 0x68, 0x13, 0x30, 0x03, 0x20, 0x04, 0x11, 0x30, 0x06, 0x13, 0x14, 0x14, 0x68, 0x14, 0x30, 0x03, - 0x20, 0x04, 0x12, 0x30, 0x06, 0x14, 0x15, 0x15, 0x68, 0x15, 0x30, 0x03, 0x20, 0x04, 0x13, 0x30, 0x06, 0x15, 0x16, 0x16, 0x68, 0x16, 0x30, 0x03, - 0x20, 0x04, 0x08, 0x30, 0x06, 0x16, 0x17, 0x17, 0x68, 0x17, 0x30, 0x03, 0x20, 0x04, 0x09, 0x30, 0x06, 0x17, 0x18, 0x18, 0x68, 0x18, 0x30, 0x03, - 0x20, 0x04, 0x15, 0x30, 0x06, 0x18, 0x19, 0x19, 0x68, 0x19, 0x30, 0x03, 0x20, 0x04, 0x16, 0x30, 0x06, 0x19, 0x1a, 0x1a, 0x68, 0x1a, 0x30, 0x03, - 0x20, 0x04, 0x17, 0x30, 0x06, 0x1a, 0x1b, 0x1b, 0x89, 0x50, 0x01, 0x1a, 0x1b, 0x18, 0x40, 0x0a, 0x1c, 0x1c, 0x50, 0x01, 0x12, 0x1b, 0x1c, 0x19, - 0x40, 0x0a, 0x1d, 0x1d, 0x50, 0x01, 0x1c, 0x24, 0x1d, 0x1a, 0x40, 0x0a, 0x1e, 0x1e, 0x50, 0x01, 0x1d, 0x1e, 0x78, 0x02, 0x40, 0x0a, 0xfa, 0x1f, - 0xf2, 0x17, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x25, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe0, 0x0b, 0xc2, 0xd3, 0x00, 0x00, 0x00, - 0x01, 0x25, 0xe2, 0x30, 0xf3, 0x30, 0xc8, 0x0c, 0x30, 0xbb, 0x30, 0xe9, 0x20, 0x05, 0x06, 0x38, 0x21, 0x4d, 0x00, 0x00, 0x6f, 0x00, 0x6e, 0x00, - 0x74, 0x00, 0x73, 0x00, 0x16, 0x65, 0x00, 0x72, 0x20, 0x01, 0x61, 0x20, 0x0b, 0x10, 0x15, 0xb0, 0x7f, 0x99, 0x00, 0x84, 0x79, 0x72, 0x5e, 0x58, - 0xc9, 0x62, 0x79, 0x40, 0x72, 0x06, 0x5b, 0x1f, 0xac, 0xba, 0xb8, 0xd2, 0x38, 0xc1, 0x30, 0xab, 0xb7, 0x06, 0x7b, 0x9d, 0x0e, 0xf3, 0x7f, 0x1c, - 0x04, 0x3e, 0x04, 0x00, 0x3d, 0x04, 0x42, 0x04, 0x41, 0x04, 0x35, 0x04, 0x59, 0x40, 0x20, 0x01, 0x30, 0x20, 0x0b, 0x10, 0x1d, 0xb4, 0xff, 0x01, - 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x26, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9a, 0x08, 0xff, 0xce, 0x00, 0x00, 0x00, - 0x01, 0x26, 0xaa, 0x30, 0xe9, 0x30, 0xf3, 0x02, 0x30, 0xc0, 0x30, 0x18, 0x98, 0xa2, 0x20, 0x07, 0xc6, 0x04, 0x30, 0xa3, 0x30, 0xeb, 0x30, 0x05, - 0xb8, 0x29, 0x4e, 0x00, 0x04, 0x65, 0x00, 0x74, 0x00, 0x68, 0x20, 0x05, 0x72, 0x00, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x04, - 0x73, 0x00, 0x20, 0x00, 0x41, 0x20, 0x09, 0x74, 0x00, 0x56, 0x69, 0x20, 0x13, 0x6c, 0x20, 0x21, 0x73, 0x04, 0x88, 0xbc, 0xf0, 0x67, 0x20, 0xaa, - 0x20, 0x81, 0xe9, 0xc0, 0x8d, 0x61, 0x20, 0x85, 0x73, 0x04, 0x80, 0x83, 0x4e, 0xb6, 0x20, 0xe3, 0x65, 0x20, 0xf3, 0x50, 0xff, 0xe4, 0x40, 0xff, - 0x30, 0x6f, 0x63, 0xd1, 0x41, 0x13, 0xf1, 0x07, 0x6e, 0x04, 0xe0, 0xff, 0x20, 0x00, 0x4f, 0x81, 0x85, 0xb7, 0x31, 0x75, 0x69, 0x05, 0x0a, 0x34, - 0xb1, 0xe7, 0x61, 0x41, 0xf9, 0x32, 0x11, 0xb2, 0x0d, 0xe0, 0x31, 0xfd, 0x30, 0x19, 0x04, 0x5a, 0xbf, 0x77, 0x83, 0x5e, 0x5c, 0x89, 0x01, 0x5b, - 0x84, 0x76, 0x17, 0x52, 0xaf, 0x65, 0x06, 0x3b, 0x21, 0x00, 0x24, 0xb1, 0x5c, 0xb3, 0x80, 0xb7, 0xdc, 0xb4, 0x00, 0x39, 0xb8, 0x20, 0x00, 0x64, - 0xc5, 0xf8, 0xd2, 0x0f, 0xac, 0xb9, 0xa4, 0xc2, 0x05, 0xf3, 0x7f, 0x72, 0x7d, 0x73, 0x7d, 0x05, 0x32, 0x77, 0xa3, 0x00, 0x13, 0x7f, 0x68, 0x61, - 0xff, 0x48, 0x00, 0x6f, 0x05, 0x61, 0xfb, 0x3d, 0x1a, 0x00, 0x1d, 0x04, 0x38, 0x04, 0x34, 0x04, 0x35, 0x04, 0x01, 0x40, 0x04, 0x3b, 0x04, 0x30, - 0x04, 0x3d, 0x20, 0x0b, 0x10, 0x41, 0x04, 0x3a, 0x20, 0x13, 0x35, 0x04, 0x20, 0x00, 0x51, 0x10, 0x20, 0x0f, 0x42, 0x20, 0x1f, 0x3b, 0x04, 0x4c, - 0xa0, 0x15, 0x51, 0x3e, 0x20, 0x21, 0x42, 0x20, 0x2f, 0x3e, 0x04, 0x32, 0x20, 0x31, 0xcf, 0x0a, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, - 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xdc, 0x92, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30, 0x01, 0x27, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0xa3, 0x08, 0xa8, 0xc2, 0x00, 0x00, 0x00, 0x02, 0x27, 0xde, 0x30, 0xca, 0x30, 0xb0, 0x10, 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x4d, 0x00, - 0x61, 0x00, 0x46, 0x6e, 0x20, 0x03, 0x67, 0x00, 0x75, 0x20, 0x09, 0x10, 0x16, 0x10, 0x7f, 0x6c, 0x01, 0x9a, 0xa3, 0x90, 0xdc, 0x74, 0x01, 0x77, - 0x06, 0x7b, 0x1d, 0x03, 0xc8, 0xb9, 0x98, 0xb0, 0xfc, 0xac, 0x06, 0x9b, 0x9b, 0x0e, 0xf3, 0x7f, 0x04, 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, - 0x33, 0x04, 0x60, 0x43, 0x20, 0x09, 0x10, 0x1e, 0x14, 0xff, 0x01, 0x0c, 0x0a, 0x0a, 0x0c, 0x02, 0x0c, 0x01, 0x01, 0x0c, 0x0c, 0x08, 0x20, 0x05, - 0x01, 0x45, 0x01, 0x58, 0x17, 0x03, 0x27, 0xdc, 0x28, 0x13, 0xb3, 0x06, 0x88, 0x15, 0x05, 0x00, 0x00, 0x42, 0x00, 0x6f, 0x28, 0x19, 0x63, 0x20, - 0x05, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x5a, 0x53, 0x3f, 0x96, 0xd1, 0x79, 0x06, 0x98, 0x17, 0x02, 0xf4, 0xbc, 0x44, 0xc5, 0x54, 0xcf, 0x10, 0x06, - 0x93, 0x7f, 0x11, 0x2c, 0x04, 0x3e, 0x28, 0x19, 0x3a, 0x20, 0x05, 0x10, 0x1e, 0x54, 0xff, 0x02, 0x03, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, - 0x03, 0x03, 0x80, 0x30, 0x05, 0x02, 0x02, 0xdd, 0x08, 0x15, 0xc3, 0x00, 0x00, 0x00, 0x04, 0x27, 0xab, 0x30, 0xe9, 0x30, 0xbd, 0xab, 0x06, 0xa8, - 0x17, 0x43, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x7a, 0x06, 0x68, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x61, 0x53, 0xc9, 0x62, 0x22, 0x7d, 0x06, 0x98, - 0x17, 0x74, 0x05, 0xce, 0x7c, 0xb7, 0x8c, 0xc1, 0x10, 0x06, 0x93, 0x7f, 0x1a, 0x28, 0x15, 0x58, 0x40, 0x28, 0x19, 0x41, 0x06, 0x68, 0x19, 0x10, - 0x16, 0xf4, 0xff, 0x03, 0x04, 0x02, 0x00, 0x02, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x05, 0x80, 0x20, 0x05, 0x03, 0x03, 0x6d, 0x08, 0xb4, 0xc2, - 0x00, 0x00, 0x00, 0x05, 0x27, 0xc1, 0x30, 0xca, 0x30, 0xf3, 0x08, 0x30, 0xc7, 0x30, 0xac, 0x06, 0x68, 0x1b, 0x43, 0x00, 0x68, 0x08, 0x00, 0x69, - 0x00, 0x6e, 0x2f, 0xb3, 0x6e, 0x00, 0x64, 0x0c, 0x00, 0x65, 0x00, 0x67, 0x2f, 0xbd, 0x10, 0x15, 0xb0, 0x7f, 0x47, 0x59, 0x02, 0x57, 0x53, 0xb7, - 0x5f, 0xa0, 0x52, 0x06, 0x78, 0x19, 0x58, 0x01, 0xce, 0x9c, 0xb0, 0x70, 0xb3, 0x00, 0xac, 0x06, 0x9b, 0x97, 0x82, 0x0e, 0xd3, 0x7f, 0x27, 0x04, - 0x38, 0x04, 0x3d, 0x28, 0x1b, 0x3d, 0x03, 0x04, 0x34, 0x04, 0x35, 0x04, 0x33, 0x28, 0x25, 0x10, 0x1d, 0xd4, 0xff, 0x02, 0x04, 0x05, 0x03, 0x03, - 0x05, 0x05, 0x28, 0x15, 0x05, 0x41, 0x0f, 0x20, 0x05, 0x04, 0x04, 0xf8, 0x08, 0x07, 0x28, 0x17, 0x50, 0x06, 0x28, 0x17, 0xe7, 0x28, 0x17, 0xbf, - 0x30, 0xec, 0x30, 0x6a, 0xb9, 0x06, 0x48, 0x19, 0x38, 0x17, 0x6f, 0x28, 0x17, 0x74, 0x2f, 0xb7, 0x6c, 0xa0, 0x28, 0x17, 0x73, 0x10, 0x15, 0xe0, - 0x7f, 0x3c, 0x74, 0x54, 0x58, 0xb1, 0x10, 0x83, 0xaf, 0x65, 0x06, 0x78, 0x17, 0x0c, 0xcd, 0xc8, 0xd0, 0x1c, 0x08, 0xb8, 0xa4, 0x2b, 0xa3, 0x06, - 0x9b, 0x97, 0x0e, 0xb3, 0x7f, 0x27, 0x04, 0x55, 0x3e, 0x28, 0x17, 0x42, 0x28, 0x19, 0x3b, 0x28, 0x17, 0x41, 0x05, 0xe8, 0x15, 0x80, 0x10, 0x17, - 0x14, 0xff, 0x05, 0x06, 0x04, 0x04, 0x06, 0x06, 0x05, 0x08, 0x05, 0x06, 0x06, 0x10, 0x20, 0x05, 0x05, 0x05, 0x97, 0x00, 0x08, 0x46, 0xc3, 0x00, - 0x00, 0x07, 0x27, 0xa8, 0x8d, 0x28, 0x0f, 0xc6, 0x30, 0xea, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x45, 0x28, 0x09, 0x44, 0x74, 0x2f, 0xa7, 0x6c, 0x00, - 0xed, 0x10, 0x16, 0x40, 0x7f, 0xc3, 0x57, 0x02, 0xaf, 0x65, 0x79, 0x72, 0x29, 0x52, 0x06, 0x78, 0x17, 0xd0, 0x01, 0xc5, 0xa4, 0xc2, 0x54, 0xd1, - 0xac, 0xb9, 0x10, 0x06, 0x73, 0x7f, 0x51, 0x2d, 0x28, 0x0b, 0x42, 0x28, 0x11, 0x3b, 0x04, 0x38, 0x06, 0x08, 0x13, 0x80, 0x10, 0x17, 0x34, 0xff, - 0x06, 0x07, 0x05, 0x05, 0x07, 0x07, 0x06, 0x08, 0x06, 0x07, 0x07, 0x11, 0x20, 0x05, 0x06, 0x06, 0x4d, 0x20, 0x09, 0x99, 0x2c, 0xa3, 0x08, 0x27, - 0xb0, 0x30, 0xe9, 0x08, 0x30, 0xca, 0x30, 0xc0, 0x06, 0x88, 0x17, 0x47, 0x00, 0x72, 0xac, 0x2f, 0xa9, 0x6e, 0x2f, 0xad, 0x64, 0x2f, 0xb1, 0x10, - 0x16, 0x10, 0x7f, 0x3c, 0x68, 0x02, 0xc9, 0x62, 0xb3, 0x7e, 0xbe, 0x8f, 0x06, 0x78, 0x17, 0xf8, 0x01, 0xad, 0x7c, 0xb7, 0x98, 0xb0, 0xe4, 0xb2, - 0x10, 0x06, 0x73, 0x7f, 0x01, 0x13, 0x04, 0x40, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x60, 0x34, 0x20, 0x07, 0x10, 0x1e, 0x14, 0xff, 0x07, 0x08, - 0x06, 0x06, 0x08, 0x02, 0x08, 0x07, 0x07, 0x08, 0x08, 0x04, 0x20, 0x05, 0x07, 0x08, 0x07, 0x7c, 0x08, 0xe2, 0x28, 0x17, 0x09, 0x27, 0xd2, 0x02, - 0x30, 0xce, 0x30, 0xc6, 0x30, 0xac, 0x06, 0x88, 0x17, 0x4a, 0x2b, 0x00, 0x69, 0x28, 0x15, 0x6f, 0x4f, 0xb3, 0x67, 0x06, 0x28, 0x19, 0x10, 0x0e, - 0xf0, 0x7f, 0x00, 0x0c, 0x5e, 0xfa, 0x8b, 0x79, 0x72, 0xa0, 0x52, 0x80, 0x06, 0x78, 0x17, 0x88, 0xd7, 0x78, 0xb1, 0x4c, 0xd1, 0x00, 0x44, 0xac, - 0x10, 0x06, 0x73, 0x7f, 0x25, 0x04, 0x38, 0x28, 0x15, 0x3e, 0x04, 0x06, 0x42, 0x04, 0x35, 0x04, 0x33, 0x06, 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, - 0x08, 0x00, 0x09, 0x07, 0x07, 0x09, 0x09, 0x08, 0x08, 0x09, 0x20, 0x09, 0x0e, 0x20, 0x05, 0x08, 0x08, 0x50, 0x09, 0xd9, 0x80, 0x28, 0x17, 0x0a, - 0x27, 0xec, 0x30, 0xaa, 0x30, 0xf3, 0x8b, 0x06, 0x88, 0x15, 0x00, 0x00, 0x4c, 0x28, 0x0f, 0xf3, 0x2f, 0xaf, 0x10, 0x16, 0x70, 0x7f, 0x0c, 0xb1, - 0x83, 0x02, 0x66, 0x06, 0x78, 0x13, 0x43, 0x97, 0xb8, 0x28, 0x6b, 0xc6, 0x06, 0x93, 0x7d, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x0f, 0x3e, 0x28, 0x19, - 0x10, 0x1e, 0x74, 0xff, 0x00, 0x09, 0x0a, 0x08, 0x08, 0x0a, 0x0a, 0x09, 0x09, 0x10, 0x0a, 0x0a, 0x06, 0x20, 0x05, 0x09, 0x09, 0xd7, 0x08, 0x40, - 0x39, 0x28, 0x17, 0x0b, 0x27, 0xde, 0x30, 0xc9, 0x30, 0x14, 0xea, 0x30, 0xb9, 0x06, 0x88, 0x19, 0x4d, 0x2f, 0xa3, 0x64, 0x00, 0x50, 0x72, 0x2f, - 0xb5, 0x7a, 0x10, 0x16, 0x40, 0x7f, 0x6c, 0x9a, 0xb7, 0x5f, 0x08, 0xcc, 0x91, 0xaf, 0x65, 0x06, 0x78, 0x1b, 0xc8, 0xb9, 0xdc, 0x0c, 0xb4, 0xac, - 0xb9, 0xa4, 0x2b, 0xa3, 0x10, 0x06, 0x53, 0x7f, 0x1c, 0x04, 0x00, 0x30, 0x04, 0x34, 0x04, 0x40, 0x04, 0x38, 0x04, 0x60, 0x41, 0x06, 0x48, 0x1b, - 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x0b, 0x09, 0x09, 0x0b, 0x02, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x07, 0x20, 0x05, 0x0a, 0x0a, 0x0a, 0x96, 0x09, 0x6e, - 0x28, 0x17, 0x0c, 0x28, 0x17, 0xb5, 0x35, 0x30, 0xe4, 0x06, 0x88, 0x15, 0x58, 0x17, 0x73, 0x28, 0x1b, 0x79, 0x28, 0x1f, 0x81, 0x10, 0x16, 0x30, - 0x7f, 0x6c, 0x9a, 0x28, 0x84, 0x9a, 0x4e, 0x06, 0x78, 0x15, 0x86, 0x38, 0x17, 0xac, 0xc0, 0x7c, 0xc5, 0x10, 0x06, 0x93, 0x7f, 0x38, 0x17, 0x41, - 0xb0, 0x28, 0x1b, 0x4f, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0b, 0x0d, 0x0b, 0x0b, 0x50, 0x0d, 0x40, 0x03, 0x09, 0x20, 0x09, 0x0b, 0x0b, - 0x82, 0x08, 0x50, 0xc6, 0x2c, 0xa3, 0x0d, 0x28, 0x17, 0xbf, 0x30, 0xac, 0x30, 0x1a, 0xeb, 0x30, 0xd1, 0x06, 0x68, 0x1b, 0x3f, 0xaf, 0x74, 0x2f, - 0xb3, 0x67, 0x8c, 0x2f, 0xb7, 0x6c, 0x00, 0x70, 0x06, 0x08, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0x6c, 0x9a, 0x00, 0x54, 0x58, 0xa0, 0x52, 0x14, 0x5c, - 0x15, 0x5e, 0x80, 0x06, 0x58, 0x1b, 0xc8, 0xb9, 0xc0, 0xd0, 0x08, 0xac, 0x0c, 0x75, 0xd3, 0x06, 0xbb, 0x97, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x42, - 0x28, 0x1b, 0x33, 0x28, 0x1f, 0x06, 0x3b, 0x04, 0x4c, 0x04, 0x3f, 0x28, 0x27, 0x10, 0x1d, 0xb4, 0xff, 0x0c, 0x0a, 0x0e, 0x0c, 0x0c, 0x0e, 0x40, - 0x03, 0x0a, 0x20, 0x09, 0x0c, 0x08, 0x0c, 0x2f, 0x09, 0xe8, 0x28, 0x17, 0x0e, 0x27, 0xcc, 0x00, 0x30, 0xa8, 0x30, 0xd0, 0x30, 0xfb, 0x30, 0xbb, - 0x02, 0x30, 0xb4, 0x30, 0xd3, 0x30, 0xa2, 0x06, 0x08, 0x1d, 0x4e, 0x02, 0x00, 0x75, 0x00, 0x65, 0x00, 0x76, 0x2f, 0xb5, 0x20, 0x22, 0x00, 0x53, - 0x20, 0x09, 0x67, 0x00, 0x6f, 0x20, 0x0d, 0x69, 0xc0, 0x05, 0x8f, 0xbd, 0x10, 0x0e, 0xf0, 0x7f, 0xb0, 0x65, 0x5e, 0x58, 0xe5, 0x54, 0x08, 0xf4, - 0x7e, 0x9a, 0x4e, 0x06, 0x58, 0x17, 0x04, 0xb2, 0xd0, 0x00, 0xc5, 0x14, 0xbc, 0x38, 0xc1, 0xe0, 0xac, 0x44, 0x18, 0xbe, 0x44, 0xc5, 0x06, 0x1f, - 0xb2, 0x0e, 0xf3, 0x7f, 0x1d, 0x04, 0x43, 0x08, 0x04, 0x4d, 0x04, 0x32, 0x28, 0x1d, 0x2d, 0x00, 0x21, 0x28, 0x04, 0x35, 0x28, 0x1f, 0x3e, 0x20, - 0x0d, 0x38, 0x04, 0x4f, 0xc1, 0x05, 0x68, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x0f, 0x0d, 0x0d, 0x0f, 0x40, 0x03, 0x41, 0x0b, 0x20, 0x09, 0x0d, - 0x0d, 0xb1, 0x09, 0x81, 0x28, 0x17, 0x04, 0x0f, 0x27, 0xea, 0x30, 0xaa, 0x28, 0x15, 0xb5, 0x30, 0x54, 0xf3, 0x28, 0x1b, 0xd5, 0x28, 0x17, 0xf3, - 0x05, 0xe8, 0x19, 0x52, 0x00, 0x62, 0xed, 0x28, 0x09, 0x38, 0x13, 0x61, 0x00, 0x6e, 0x28, 0x1b, 0x4a, 0xe0, 0x28, 0x27, 0x30, 0x09, 0x10, 0x15, - 0x70, 0x7f, 0x23, 0x57, 0xe1, 0x80, 0x89, 0x10, 0x5b, 0xb3, 0x6c, 0x06, 0x58, 0x15, 0x00, 0x00, 0xac, 0xb9, 0x01, 0x24, 0xc6, 0xb0, 0xc0, 0xc4, - 0xd6, 0x48, 0x06, 0x28, 0x13, 0xab, 0x0f, 0x33, 0x7f, 0x21, 0x28, 0x11, 0x3d, 0x28, 0x13, 0x25, 0x28, 0x1f, 0x30, 0x09, 0xc5, 0x10, 0x05, 0xf1, - 0x7f, 0x10, 0x06, 0xf5, 0xff, 0x0e, 0x10, 0x10, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x40, 0x0d, 0x20, 0x05, 0x0e, 0x0e, 0xe7, 0x07, 0xb6, 0xc3, 0x11, - 0x00, 0x00, 0x10, 0x28, 0x17, 0xd0, 0x30, 0xb9, 0x05, 0xe8, 0x0b, 0xa8, 0xd8, 0x17, 0x69, 0x4f, 0xad, 0x73, 0x10, 0x16, 0x60, 0x7f, 0xcc, 0x91, - 0xe6, 0x18, 0x74, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x38, 0x17, 0x14, 0xbc, 0xa4, 0xc1, 0x2b, 0xa1, 0x10, 0x06, 0x73, 0x7f, 0x20, 0x04, 0x38, 0x04, - 0x32, 0x28, 0x1b, 0x62, 0x41, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x0f, 0x11, 0x11, 0x20, 0x01, 0x0f, 0xa0, 0x20, 0x06, 0x0c, 0x20, 0x05, - 0x0f, 0x0f, 0x21, 0x08, 0xf7, 0x80, 0x24, 0x8d, 0x11, 0x27, 0x17, 0x53, 0xa2, 0x30, 0xc8, 0x00, 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xa3, - 0x00, 0x30, 0xb3, 0x30, 0xea, 0x81, 0xbb, 0x6c, 0x30, 0x10, 0x57, 0xdf, 0x57, 0x05, 0x7f, 0xb0, 0x41, 0x00, 0x74, 0x00, 0x15, 0x6c, 0x00, 0xe1, - 0x2f, 0xab, 0x74, 0x28, 0x21, 0x63, 0x4f, 0xbb, 0x54, 0x4e, 0x2f, 0xc1, 0x72, 0x20, 0x17, 0x65, 0x05, 0x4f, 0xaf, 0x65, 0x00, 0x55, 0x67, 0x28, - 0x9b, 0xf3, 0x4f, 0xad, 0x41, 0x2f, 0xad, 0x74, 0x40, 0x0b, 0x11, 0x6f, 0x00, 0x6d, 0x2f, 0xc1, 0x20, 0x00, 0x64, 0x20, 0x85, 0x7e, 0x6c, 0x40, - 0x19, 0x04, 0x50, 0xa7, 0x06, 0xf0, 0x7f, 0x51, 0x7f, 0x3f, 0xab, 0x91, 0x7f, 0x53, 0xb5, 0x21, 0x79, 0x74, 0x41, 0x7f, 0x31, 0x95, 0x72, 0x29, - 0xb9, 0x6f, 0x2f, 0xcb, 0x70, 0x61, 0x21, 0xa7, 0x04, 0x11, 0x91, 0x06, 0xf1, 0xff, 0x17, 0x53, 0x27, 0x59, 0x09, 0x7f, 0x89, 0x0b, 0x6d, 0x32, - 0xf7, 0x3a, 0x53, 0x06, 0x1f, 0xb3, 0x00, 0x81, 0xbd, 0x44, 0xc5, 0xc0, 0xd2, 0x80, 0xb7, 0x00, 0xf0, 0xd2, 0x54, 0xcf, 0x20, 0x00, 0x90, 0xc7, - 0x0e, 0x58, 0xce, 0x6c, 0xad, 0x05, 0xbe, 0xb3, 0x06, 0xf3, 0x7f, 0x53, 0xff, 0xe2, 0x82, 0x06, 0x83, 0xff, 0x10, 0x04, 0x42, 0x04, 0x3b, 0x28, - 0x17, 0x3d, 0x82, 0x20, 0x07, 0x38, 0x04, 0x47, 0x04, 0x35, 0x28, 0x21, 0x3a, 0x82, 0x28, 0x2b, 0x39, 0x04, 0x20, 0x00, 0x21, 0x20, 0x0d, 0x32, - 0xaa, 0x20, 0x11, 0x40, 0x20, 0x1d, 0x4b, 0x40, 0x11, 0x30, 0x28, 0x43, 0x42, 0x22, 0x04, 0x3e, 0x20, 0x2d, 0x3e, 0x04, 0x3c, 0x80, 0x15, 0x40, - 0xbc, 0x20, 0x35, 0x33, 0x28, 0x5f, 0x30, 0x17, 0x0a, 0x51, 0x7f, 0x10, 0x0e, 0x90, 0x7f, 0x10, 0x01, 0x00, 0x0e, 0x0e, 0x02, 0x01, 0x10, 0x10, - 0x01, 0x01, 0x40, 0x01, 0x20, 0x05, 0x10, 0x10, 0xfa, 0x09, 0xb5, 0xc4, 0x05, 0x00, 0x00, 0x12, 0x27, 0x57, 0x08, 0x28, 0x17, 0x53, 0x27, 0x9d, - 0x7d, 0x72, 0x05, 0x8f, 0xaf, 0x02, 0x98, 0x17, 0x03, 0x30, 0xa7, 0x06, 0xf0, 0x7f, 0x00, 0x38, 0x17, 0x4d, 0x29, 0x91, 0xb4, 0x38, 0x0d, 0x64, - 0x04, 0xc8, 0x11, 0x07, 0x51, 0xff, 0x57, 0x06, 0xe8, 0x17, 0xa8, 0xb0, 0xf6, 0x08, 0x18, 0x17, 0x05, 0xb3, 0x7f, 0x00, 0x38, 0x17, 0x33, 0xff, - 0x6c, 0x05, 0x6f, 0xbe, 0x00, 0xb8, 0x17, 0x2e, 0x38, 0x04, 0x36, 0x04, 0xa8, 0x11, 0x07, 0xb1, 0x7f, 0x10, 0x0e, 0x90, 0x7f, 0x11, 0x02, 0x0f, - 0x00, 0x0f, 0x01, 0x02, 0x11, 0x11, 0x02, 0x02, 0x02, 0x83, 0x20, 0x05, 0x11, 0x11, 0x88, 0x08, 0x72, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x00, 0x01, - 0x0c, 0x0a, 0x0a, 0x0c, 0x0c, 0x01, 0x01, 0x10, 0x0c, 0x0c, 0x08, 0x20, 0x05, 0x01, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, - 0x03, 0x03, 0xc0, 0x30, 0x05, 0x20, 0x07, 0x04, 0x02, 0x02, 0x04, 0x04, 0x03, 0x0c, 0x03, 0x04, 0x04, 0x05, 0x20, 0x05, 0x20, 0x07, 0x05, 0x03, - 0x13, 0x03, 0x05, 0x05, 0x20, 0x0d, 0x05, 0x0f, 0x20, 0x05, 0x20, 0x15, 0x00, 0x06, 0x04, 0x04, 0x06, 0x06, 0x05, 0x05, 0x06, 0x30, 0x06, 0x10, - 0x20, 0x05, 0x20, 0x07, 0x07, 0x05, 0x05, 0x07, 0x03, 0x07, 0x06, 0x06, 0x07, 0x07, 0x11, 0x20, 0x05, 0x20, 0x07, 0x00, 0x08, 0x06, 0x06, 0x08, - 0x08, 0x07, 0x07, 0x08, 0x30, 0x08, 0x04, 0x20, 0x05, 0x20, 0x07, 0x09, 0x07, 0x07, 0x09, 0x03, 0x09, 0x08, 0x08, 0x09, 0x09, 0x0e, 0x20, 0x05, - 0x20, 0x07, 0x00, 0x0a, 0x08, 0x08, 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x30, 0x0a, 0x06, 0x20, 0x05, 0x20, 0x07, 0x0b, 0x09, 0x09, 0x0b, 0x03, 0x0b, - 0x0a, 0x0a, 0x0b, 0x0b, 0x07, 0x20, 0x05, 0x20, 0x07, 0x0a, 0x0d, 0x0b, 0x0b, 0x0d, 0x40, 0x03, 0x09, 0x20, 0x09, 0x0b, 0x02, 0x0b, 0x0c, 0x0e, - 0x0c, 0x0c, 0x0e, 0x40, 0x03, 0x0a, 0x80, 0x20, 0x09, 0x0c, 0x0c, 0x0d, 0x0f, 0x0d, 0x0d, 0x0f, 0xa2, 0x40, 0x03, 0x0b, 0x20, 0x09, 0x0d, 0x0d, - 0x0e, 0x39, 0x04, 0x10, 0x51, 0x0e, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x30, 0xfc, 0x29, 0x11, 0x0f, 0x20, 0x06, 0x0c, 0x20, 0x05, - 0x0f, 0x0f, 0xf9, 0x2f, 0xc0, 0xf1, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, - 0x30, 0x01, 0x28, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x60, 0x06, 0x72, 0xc7, 0x00, 0x00, 0x00, - 0x02, 0x28, 0xd1, 0x30, 0xca, 0x30, 0xde, 0x41, 0x30, 0x06, 0x98, 0x1b, 0x50, 0x00, 0x61, 0x00, 0x6e, 0x20, 0x03, 0x17, 0x6d, 0x00, 0xe1, 0x06, - 0xe0, 0x7f, 0x61, 0x0e, 0xe0, 0x7f, 0x06, 0xf1, 0x7f, 0x06, 0x51, 0xff, 0x00, 0xf4, 0x5d, 0xff, 0x62, 0x6c, 0x9a, 0x01, 0x77, 0x81, 0x06, 0x7b, - 0x1d, 0x0c, 0xd3, 0x98, 0xb0, 0xc8, 0xb9, 0x07, 0x33, 0x7f, 0x82, 0x0e, 0x52, 0x7f, 0x1f, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x3c, 0xe2, 0x20, - 0x07, 0x10, 0x06, 0x33, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x09, 0x09, 0x20, 0x01, 0x01, 0x09, 0x01, 0x08, 0x09, 0x08, 0x20, 0x05, 0x01, 0x01, - 0x58, 0x17, 0x00, 0x03, 0x28, 0xdc, 0x30, 0xab, 0x30, 0xba, 0x30, 0x04, 0xfb, 0x30, 0xc7, 0x30, 0xeb, 0x20, 0x05, 0xc8, 0x30, 0x10, 0xfc, 0x30, - 0xed, 0x05, 0xc8, 0x25, 0x42, 0x00, 0x6f, 0x00, 0x40, 0x63, 0x28, 0x1b, 0x73, 0x00, 0x20, 0x00, 0x64, 0x00, 0x15, 0x65, 0x00, 0x6c, 0x20, 0x07, - 0x54, 0x20, 0x13, 0x72, 0x20, 0x17, 0x80, 0x10, 0x15, 0x30, 0x7f, 0x5a, 0x53, 0x61, 0x53, 0xaf, 0x65, 0x2d, 0x00, 0x00, 0xb7, 0x5f, 0x14, 0x5c, - 0x58, 0x62, 0x57, 0x40, 0x7f, 0x05, 0xf8, 0x21, 0xf4, 0xbc, 0x74, 0xce, 0xa4, 0xc2, 0x03, 0x78, 0xb3, 0xa0, 0xd1, 0x5c, 0xb8, 0x06, 0x3f, 0xb9, - 0x0e, 0xf3, 0x7f, 0x04, 0x11, 0x04, 0x3e, 0x04, 0x3a, 0x28, 0x1b, 0x41, 0x04, 0x00, 0x2d, 0x00, 0x34, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x56, 0x4c, - 0x20, 0x09, 0x22, 0x20, 0x15, 0x40, 0x20, 0x19, 0x10, 0x1d, 0x14, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, - 0x00, 0xa3, 0x06, 0x83, 0xc5, 0x00, 0x00, 0x04, 0x28, 0x06, 0xc1, 0x30, 0xea, 0x30, 0xad, 0x05, 0xc8, 0x09, 0xdf, 0xff, 0x43, 0x08, 0x00, 0x68, - 0x00, 0x69, 0x28, 0x05, 0x69, 0x00, 0x71, 0x08, 0x00, 0x75, 0x00, 0xed, 0x10, 0x16, 0x00, 0x7f, 0x47, 0x59, 0xcc, 0x18, 0x91, 0xfa, 0x57, 0x05, - 0xf8, 0x0d, 0x9f, 0xff, 0x58, 0xce, 0xac, 0x11, 0xb9, 0xa4, 0xd0, 0x10, 0x06, 0x93, 0x7f, 0x27, 0x04, 0x38, 0x28, 0x01, 0x5a, 0x38, 0x28, 0x1b, - 0x38, 0x05, 0x28, 0x05, 0x10, 0x18, 0x14, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x50, 0x03, 0x20, 0x06, 0x09, 0x20, 0x05, 0x03, 0x03, 0xff, 0x05, 0x40, - 0x62, 0x28, 0x17, 0x05, 0x28, 0xb3, 0x30, 0xaf, 0x30, 0x62, 0xec, 0x06, 0xc8, 0x17, 0x3f, 0xaf, 0x6c, 0x00, 0xe9, 0x10, 0x16, 0x60, 0x7f, 0xd1, - 0x04, 0x79, 0x4b, 0x51, 0xb1, 0x83, 0x06, 0x98, 0x17, 0x54, 0xcf, 0x08, 0x74, 0xd0, 0x08, 0xb8, 0x10, 0x06, 0x93, 0x7f, 0x1a, 0x04, 0x3e, 0x8d, - 0x28, 0x13, 0x3b, 0x04, 0x35, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x04, 0x38, 0x0c, 0x28, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, - 0x04, 0x0e, 0x02, 0x06, 0xda, 0xc6, 0x00, 0x00, 0x06, 0x28, 0x17, 0xed, 0x20, 0x30, 0xf3, 0x06, 0xe8, 0x17, 0x6c, 0x00, 0xf3, 0x00, 0x6e, 0x84, - 0x10, 0x16, 0x60, 0x7f, 0xd1, 0x79, 0x86, 0x96, 0x06, 0x98, 0x15, 0x00, 0x00, 0x1d, 0x5c, 0xcf, 0x60, 0x06, 0xa8, 0x15, 0x0f, 0x13, 0x7f, 0x38, - 0x17, 0x3b, 0x28, 0x1b, 0x69, 0x3d, 0x06, 0xa8, 0x17, 0x10, 0x16, 0xb4, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, - 0x05, 0x05, 0xa7, 0x06, 0x2f, 0xc7, 0x00, 0x00, 0x00, 0x07, 0x28, 0xc0, 0x30, 0xea, 0x30, 0x40, 0xa8, 0x06, 0xa8, 0x19, 0x44, 0x00, 0x61, 0x00, - 0x72, 0x00, 0x70, 0x69, 0x2f, 0xaf, 0x06, 0x58, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0xbe, 0x8f, 0xde, 0x8f, 0x81, 0x06, 0xb8, 0x17, 0xe4, 0xb2, 0xac, - 0xb9, 0xd4, 0xc5, 0x06, 0x9b, 0x97, 0x80, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x30, 0x04, 0x40, 0x04, 0x4c, 0x34, 0x04, 0x35, 0x06, 0x68, 0x19, 0x10, - 0x16, 0xf4, 0xff, 0x06, 0x38, 0x0c, 0x05, 0x06, 0xa0, 0x20, 0x06, 0x03, 0x20, 0x05, 0x06, 0x06, 0xf9, 0x05, 0x6f, 0x00, 0xc8, 0x00, 0x00, 0x08, - 0x28, 0xa8, 0x30, 0xec, 0x08, 0x30, 0xfc, 0x30, 0xe9, 0x06, 0x88, 0x17, 0x48, 0x00, 0x65, 0xa8, 0x28, 0x17, 0x72, 0x40, 0x05, 0x61, 0x10, 0x16, - 0x20, 0x7f, 0xc3, 0x57, 0xf7, 0x10, 0x96, 0xc9, 0x62, 0x06, 0x98, 0x19, 0xd0, 0xc5, 0x08, 0xb8, 0x35, 0x7c, 0xb7, 0x06, 0x98, 0x97, 0x0e, 0xf3, - 0x7f, 0x2d, 0x28, 0x15, 0x40, 0x28, 0x15, 0x69, 0x40, 0x28, 0x1f, 0x10, 0x1e, 0x34, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, 0x40, 0x0a, - 0x20, 0x05, 0x07, 0x07, 0xaa, 0x05, 0xce, 0xc6, 0x00, 0x00, 0x00, 0x09, 0x28, 0xed, 0x30, 0xb9, 0x30, 0x01, 0xfb, 0x30, 0xb5, 0x30, 0xf3, 0x30, - 0xc8, 0x20, 0x09, 0x80, 0x06, 0x1f, 0xb2, 0x4c, 0x00, 0x6f, 0x00, 0x73, 0x00, 0x20, 0x23, 0x00, 0x53, 0x2f, 0xb7, 0x6e, 0x00, 0x74, 0x40, 0x0d, - 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x1b, 0x6d, 0xaf, 0x65, 0x51, 0x68, 0x58, 0x62, 0x20, 0xaf, 0x65, 0x06, 0x58, 0x1b, 0x5c, 0xb8, 0xa4, 0xc2, 0x20, - 0x01, 0x00, 0xb0, 0xc0, 0xa0, 0xd1, 0xa4, 0xc2, 0x06, 0x3f, 0xb0, 0x80, 0x0f, 0x01, 0xff, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x2d, 0x00, 0x46, 0x21, - 0x28, 0x17, 0x3d, 0x04, 0x42, 0x40, 0x0d, 0x10, 0x1d, 0xb4, 0xff, 0x08, 0x58, 0x08, 0x50, 0x01, 0x07, 0x20, 0x01, 0x30, 0x0b, 0x85, 0x05, 0xe9, - 0x91, 0x28, 0x17, 0x0a, 0x28, 0x38, 0x11, 0xd6, 0x30, 0xe9, 0x28, 0x1d, 0x08, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x1f, 0xb0, 0x4b, 0x00, 0x75, 0xab, - 0x28, 0x0f, 0x61, 0x28, 0x19, 0x59, 0x2f, 0xaf, 0x6c, 0x06, 0x0f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x23, 0x57, 0x03, 0x5e, 0xc9, 0x28, 0x15, - 0x79, 0x72, 0x20, 0x3a, 0x53, 0x06, 0x3f, 0xb5, 0xb0, 0xc0, 0x14, 0xbe, 0x7c, 0x43, 0xb7, 0x38, 0x1b, 0x1c, 0xc8, 0xc4, 0xb3, 0x06, 0x1f, 0xb0, - 0x5b, 0x8f, 0x11, 0x20, 0x00, 0x42, 0x43, 0x7b, 0x73, 0x00, 0x2d, 0x2f, 0xbf, 0x45, 0x69, 0x43, 0x87, 0x6e, 0x00, 0x64, 0x2f, 0xcb, 0x6e, 0x0c, - 0xe3, 0xff, 0x14, 0x1a, 0x04, 0x43, 0x28, 0x0f, 0x30, 0x28, 0x19, 0x2f, 0x04, 0x62, 0x3b, 0x28, 0x1b, 0x10, 0x1d, 0xf4, 0xff, 0x09, 0x07, 0x07, - 0x20, 0x01, 0x09, 0x08, 0x09, 0x09, 0x07, 0x06, 0x30, 0x05, 0x09, 0xcd, 0x06, 0x01, 0xdb, 0xc7, 0x00, 0x00, 0x0b, 0x28, 0xd9, 0x28, 0x13, 0x18, - 0xb0, 0x30, 0xa2, 0x28, 0x17, 0x06, 0x3d, 0x2d, 0x00, 0x00, 0x56, 0xae, 0x24, 0x87, 0x72, 0x2f, 0xab, 0x67, 0x28, 0x1f, 0x34, 0x97, 0x10, 0x15, - 0xf0, 0x7f, 0x1d, 0x00, 0x8d, 0xc9, 0x62, 0xdc, 0x74, 0xaf, 0x65, 0x01, 0x40, 0x77, 0x06, 0x52, 0xff, 0xa0, 0xbc, 0x7c, 0xb7, 0xfc, 0xac, 0x30, - 0xa4, 0xc2, 0x06, 0x53, 0x7d, 0x0f, 0x13, 0x7f, 0x12, 0x04, 0x35, 0x04, 0x51, 0x40, 0x28, 0x17, 0x33, 0x28, 0x1f, 0x30, 0x04, 0x41, 0x06, 0x08, - 0x17, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x0a, 0x70, 0x01, 0x02, 0x40, 0x0a, 0xc2, 0x05, 0x28, 0x6a, 0xc6, 0x00, 0x3f, 0xff, 0x01, 0x38, 0x34, - 0x09, 0x01, 0x01, 0x11, 0x08, 0x09, 0x08, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x20, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, - 0x94, 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x09, 0x20, 0x05, 0x03, 0x03, 0x4a, 0x04, 0x30, 0x04, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, - 0x25, 0x04, 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, 0x12, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, 0x20, 0x06, 0x03, 0x89, - 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x42, 0x0a, 0x20, 0x05, 0x07, 0x07, 0x08, 0x08, 0x50, 0x01, 0x07, 0xf8, 0x20, - 0x01, 0x30, 0x0b, 0xf8, 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x04, 0x9b, 0x00, 0x11, 0x12, 0x00, 0x00, - 0x30, 0x01, 0x29, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x09, 0xee, 0xff, 0xd6, 0x00, 0x00, 0x00, - 0x02, 0x29, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x01, 0x30, 0xe9, 0x30, 0xeb, 0x30, 0x0c, 0x77, 0x06, 0x38, 0x21, 0x00, 0x43, 0x00, 0x65, 0x00, 0x6e, - 0x00, 0x74, 0x00, 0x04, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x10, 0x16, 0x20, 0x7f, 0x2d, 0x4e, 0x18, 0x2e, 0x59, 0x01, 0x06, 0x42, 0xf9, 0x5b, 0x98, - 0x3c, 0xc1, 0xb8, 0x01, 0xd2, 0x84, 0xb7, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x5b, 0x9f, 0x80, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0x04, 0x3d, 0x04, - 0x42, 0x00, 0x04, 0x40, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x45, 0x04, 0x10, 0x1d, 0xf4, 0xff, 0x01, 0x09, 0x09, 0x20, 0x01, 0x01, 0x20, 0x06, - 0x71, 0x12, 0x20, 0x05, 0x20, 0x07, 0x48, 0x17, 0x03, 0x29, 0xa2, 0x28, 0x11, 0x05, 0xc8, 0x30, 0xfb, 0x30, 0xd1, 0x28, 0x1b, 0xca, 0x06, 0x28, - 0x1b, 0x40, 0x41, 0x28, 0x0d, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x62, 0x50, 0x28, 0x19, 0x38, 0x1d, 0x6e, 0x00, 0xe1, 0x10, 0x15, 0xa0, 0x7f, - 0x0a, 0x01, 0x4e, 0xf4, 0x5d, 0xc9, 0x62, 0xa3, 0x90, 0x06, 0x78, 0x1b, 0x00, 0x4c, 0xc5, 0xa0, 0xd1, 0x0c, 0xd3, 0x7c, 0xb7, 0x34, 0x98, 0xb0, - 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x10, 0x48, 0x0d, 0x42, 0x04, 0x06, 0x3e, 0x04, 0x2d, 0x00, 0x1f, 0x28, 0x1b, 0x38, 0x1f, 0x3d, 0xc8, 0x28, - 0x23, 0x10, 0x1d, 0x74, 0xff, 0x02, 0x02, 0xd0, 0x01, 0xde, 0xed, 0x02, 0x08, 0xd9, 0x00, 0x00, 0x04, 0x28, 0x17, 0xde, 0x30, 0xf3, 0x0d, 0x30, - 0xd0, 0x30, 0xa4, 0x06, 0x28, 0x13, 0x58, 0x17, 0x6d, 0x2f, 0xa9, 0x14, 0x6d, 0x00, 0x62, 0x2f, 0xaf, 0x79, 0x10, 0x16, 0x20, 0x7f, 0x3f, 0x96, - 0x08, 0xfc, 0x66, 0xdc, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x44, 0x01, 0xc5, 0xd8, 0xb9, 0x14, 0xbc, 0x74, 0xc7, 0x06, 0x58, 0x15, 0x88, 0x0f, - 0x13, 0x7f, 0x10, 0x04, 0x3c, 0x28, 0x0d, 0x3c, 0x04, 0x31, 0xb2, 0x28, 0x13, 0x39, 0x05, 0x88, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x03, 0x03, 0xd0, - 0x01, 0xa5, 0x00, 0xef, 0x2e, 0xd8, 0x00, 0x00, 0x05, 0x29, 0xab, 0x08, 0x30, 0xa2, 0x30, 0xb0, 0x20, 0x03, 0xb9, 0x30, 0xfc, 0xa0, 0x06, 0x48, - 0x19, 0x43, 0x2f, 0xa5, 0x61, 0x00, 0x67, 0x00, 0x75, 0x88, 0x2f, 0xad, 0x7a, 0x00, 0xfa, 0x10, 0x16, 0x00, 0x7f, 0x61, 0x53, 0xdc, 0x10, 0x74, - 0xcf, 0x82, 0x06, 0x98, 0x17, 0x74, 0xce, 0x44, 0xc5, 0x0d, 0xfc, 0xac, 0x18, 0xc2, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x15, 0x05, - 0x30, 0x04, 0x33, 0x04, 0x43, 0x28, 0x1d, 0x41, 0x20, 0x05, 0x8a, 0x10, 0x1d, 0xf4, 0xff, 0x04, 0x06, 0x06, 0x20, 0x01, 0x04, 0x20, 0x06, 0x08, - 0x80, 0x20, 0x05, 0x04, 0x04, 0xee, 0xed, 0xdc, 0xd7, 0x00, 0x23, 0x00, 0x06, 0x48, 0x17, 0xb5, 0x30, 0xd1, 0x06, 0x48, 0x13, 0x98, 0x17, 0x44, - 0x7a, 0x2f, 0xb3, 0x70, 0x00, 0xe1, 0x10, 0x16, 0x20, 0x7f, 0x61, 0x53, 0x08, 0x28, 0x84, 0x15, 0x5e, 0x06, 0xd8, 0x17, 0xac, 0xc0, 0x0c, 0x75, - 0xd3, 0x06, 0xd8, 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x41, 0x28, 0x1d, 0x3f, 0x28, 0x21, 0x8a, 0x10, 0x1e, 0x14, 0xff, 0x05, 0x07, 0x07, 0x20, - 0x01, 0x05, 0x20, 0x06, 0x09, 0x80, 0x20, 0x05, 0x05, 0x05, 0x65, 0xed, 0x2e, 0xd8, 0x00, 0x00, 0x00, 0x07, 0x29, 0xb3, 0x30, 0xf3, 0x30, 0xbb, - 0x03, 0x30, 0xd7, 0x30, 0xb7, 0x30, 0xaa, 0x20, 0x09, 0x06, 0x18, 0x1d, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x41, 0x65, 0x28, - 0x17, 0x63, 0x00, 0x69, 0x00, 0xf3, 0x20, 0x0d, 0x80, 0x10, 0x15, 0xb0, 0x7f, 0xb7, 0x5e, 0x5e, 0x58, 0x6e, 0x66, 0x7f, 0x10, 0x89, 0xc1, 0x7f, - 0x06, 0x58, 0x1b, 0x58, 0xcf, 0x49, 0xc1, 0x0c, 0xdc, 0xc2, 0x28, 0xc6, 0x06, 0x98, 0x17, 0x07, 0x93, 0x7f, 0xe7, 0x00, 0x62, 0xe3, 0x24, 0x0d, - 0x05, 0xf8, 0x17, 0x3e, 0x04, 0x3d, 0x28, 0x17, 0x35, 0x8c, 0x28, 0x17, 0x41, 0x04, 0x4c, 0x40, 0x0d, 0x10, 0x1d, 0xb4, 0xff, 0x06, 0x0a, 0x54, - 0x0a, 0x20, 0x01, 0x06, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x06, 0x06, 0x01, 0x5b, 0xef, 0x29, 0xd7, 0x00, 0x00, 0x08, 0x28, 0x17, 0x00, 0xeb, 0x30, - 0xc7, 0x30, 0xa3, 0x30, 0xea, 0x30, 0x11, 0xa7, 0x30, 0xe9, 0x06, 0x68, 0x17, 0x72, 0x00, 0x64, 0x28, 0x11, 0x54, 0x6c, 0x20, 0x01, 0x65, 0x20, - 0x0b, 0x61, 0x10, 0x15, 0xc0, 0x7f, 0xd1, 0x79, 0x02, 0xea, 0x8f, 0xd2, 0x52, 0xc9, 0x62, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x54, 0xcf, 0x74, - 0xb9, 0x14, 0xb5, 0x08, 0x1c, 0xc6, 0x7c, 0xb7, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x40, 0x04, 0x05, 0x34, 0x04, 0x38, 0x04, 0x3b, - 0x28, 0x15, 0x35, 0x20, 0x0b, 0x62, 0x30, 0x06, 0x08, 0x17, 0x10, 0x16, 0xb4, 0xff, 0x07, 0x0b, 0x0b, 0x20, 0x01, 0x07, 0xa0, 0x20, 0x06, 0x0c, - 0x20, 0x05, 0x07, 0x07, 0xf4, 0xed, 0x5d, 0x80, 0x28, 0x17, 0x09, 0x29, 0xb0, 0x30, 0xa2, 0x30, 0xa4, 0xb1, 0x28, 0x11, 0xfc, 0x06, 0x28, 0x13, - 0x3f, 0xff, 0x47, 0x00, 0x75, 0x28, 0x09, 0x58, 0x69, 0x28, 0x1b, 0xe1, 0x06, 0x45, 0x98, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0x0a, 0x40, 0x4f, - 0x06, 0x98, 0x15, 0x00, 0x00, 0xfc, 0xac, 0x74, 0xc7, 0xc5, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x13, 0x04, 0x43, 0x28, 0x09, 0x39, 0x06, 0x08, - 0x0f, 0x8a, 0x10, 0x17, 0x74, 0xff, 0x08, 0x0c, 0x0c, 0x20, 0x01, 0x08, 0x20, 0x06, 0x06, 0x82, 0x20, 0x05, 0x08, 0x08, 0xb1, 0xed, 0xdf, 0x28, - 0x17, 0x0a, 0x03, 0x29, 0xa4, 0x30, 0xbf, 0x30, 0xd7, 0x28, 0x1b, 0x06, 0x58, 0x15, 0x04, 0x00, 0x00, 0x49, 0x00, 0x74, 0x2f, 0xa1, 0x70, 0x00, - 0x60, 0xfa, 0x05, 0xef, 0xa7, 0x10, 0x0f, 0x70, 0x7f, 0x0a, 0x4f, 0x54, 0x58, 0x6e, 0x10, 0x66, 0x3f, 0x96, 0x06, 0x78, 0x19, 0x74, 0xc7, 0xc0, - 0xd0, 0x0c, 0x78, 0xd4, 0x44, 0xc5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x58, 0x42, 0x28, 0x17, 0x3f, 0x48, 0x1d, 0x10, 0x1e, 0x34, - 0xff, 0x09, 0x0d, 0x0d, 0xa8, 0x20, 0x01, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, 0x09, 0x09, 0x91, 0x00, 0xec, 0x40, 0xd8, 0x00, 0x00, 0x0b, 0x29, - 0xdf, 0x00, 0x30, 0xb7, 0x30, 0xaa, 0x30, 0xcd, 0x30, 0xb9, 0xa8, 0x06, 0x68, 0x19, 0x4d, 0x2f, 0xab, 0x73, 0x2f, 0xaf, 0x6f, 0x00, 0x6e, 0x30, - 0x00, 0x65, 0x20, 0x09, 0x10, 0x15, 0xf0, 0x7f, 0x73, 0x7c, 0x7f, 0x89, 0x02, 0x65, 0x59, 0x85, 0x51, 0xaf, 0x65, 0x06, 0x58, 0x19, 0xf8, 0x00, - 0xbb, 0xdc, 0xc2, 0x24, 0xc6, 0x24, 0xb1, 0xa4, 0x60, 0xc2, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x38, 0x04, 0x41, 0x00, 0x04, 0x4c, - 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x35, 0xc5, 0x20, 0x09, 0x10, 0x1d, 0xf4, 0xff, 0x0a, 0x0e, 0x0e, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x40, 0x0d, 0x20, - 0x05, 0x0a, 0x0a, 0xcd, 0xec, 0x78, 0xd7, 0x00, 0x00, 0x00, 0x0c, 0x29, 0xcb, 0x30, 0xa7, 0x30, 0x01, 0xa8, 0x30, 0xf3, 0x30, 0xd6, 0x30, 0xaf, - 0x06, 0x48, 0x19, 0x40, 0xd1, 0x28, 0x0d, 0x65, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x18, 0x75, 0x00, 0x63, 0x2f, 0xb5, 0x10, 0x15, 0xf0, 0x7f, 0x85, - 0x6d, 0x69, 0x04, 0x60, 0x03, 0x5e, 0x93, 0x5e, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x24, 0xb1, 0xe0, 0xc5, 0x80, 0xbd, 0xe0, 0xcf, 0xd0, 0x06, - 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1d, 0x28, 0x13, 0x35, 0x04, 0x4d, 0x04, 0x01, 0x3c, 0x04, 0x31, 0x04, 0x43, 0x04, 0x3a, 0x20, 0x03, 0x8a, 0x10, - 0x1d, 0xd4, 0xff, 0x0b, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x0e, 0x80, 0x20, 0x05, 0x0b, 0x0b, 0xcd, 0xec, 0xc2, 0xd6, 0x00, 0x00, 0x00, - 0x0d, 0x29, 0xd1, 0x30, 0xe9, 0x30, 0xb0, 0x08, 0x30, 0xa2, 0x30, 0xea, 0x06, 0x48, 0x15, 0x00, 0x00, 0x50, 0x0b, 0x00, 0x61, 0x00, 0x72, 0x20, - 0x03, 0x67, 0x28, 0x17, 0x30, 0x09, 0x40, 0xed, 0x10, 0x15, 0xe0, 0x7f, 0xf4, 0x5d, 0xc9, 0x62, 0xdc, 0x74, 0x20, 0xcc, 0x91, 0x06, 0x78, 0x17, - 0x0c, 0xd3, 0x7c, 0xb7, 0xfc, 0x18, 0xac, 0xac, 0xb9, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x30, 0x2d, 0x04, 0x40, 0x20, 0x03, 0x33, - 0x28, 0x15, 0x30, 0x09, 0x38, 0x05, 0xe8, 0x17, 0x8a, 0x10, 0x16, 0xf4, 0xff, 0x0c, 0x10, 0x10, 0x20, 0x01, 0x0c, 0x20, 0x06, 0x0f, 0x80, 0x20, - 0x05, 0x0c, 0x0c, 0xc6, 0xed, 0x5d, 0xd7, 0x00, 0x00, 0x00, 0x0e, 0x29, 0xd7, 0x30, 0xec, 0x30, 0xb8, 0x00, 0x30, 0xc7, 0x30, 0xf3, 0x30, 0xc6, - 0x30, 0xfb, 0x8a, 0x28, 0x1f, 0xa8, 0x30, 0xb9, 0x05, 0xc8, 0x21, 0x50, 0x28, 0x15, 0x65, 0x02, 0x00, 0x73, 0x00, 0x69, 0x00, 0x64, 0x2f, 0xb9, - 0x6e, 0x22, 0x00, 0x74, 0x2f, 0xbf, 0x20, 0x00, 0x48, 0x28, 0x2d, 0x79, 0xc0, 0x40, 0x17, 0x10, 0x14, 0xf0, 0x7f, 0x3f, 0x96, 0x36, 0x80, 0xaf, - 0x65, 0x08, 0x3b, 0x60, 0xdf, 0x7e, 0x06, 0x58, 0x19, 0x04, 0xd5, 0x08, 0x00, 0xb8, 0xdc, 0xc2, 0x74, 0xb3, 0x4c, 0xd1, 0x44, 0x06, 0xc5, 0x08, - 0xc6, 0xa4, 0xc2, 0x05, 0xf8, 0x1f, 0x0e, 0xf3, 0x7f, 0x1f, 0x8a, 0x28, 0x15, 0x35, 0x04, 0x41, 0x28, 0x0f, 0x34, 0x20, 0x07, 0x3d, 0x23, 0x04, - 0x42, 0x20, 0x0d, 0x2d, 0x00, 0x10, 0x40, 0x13, 0x10, 0x1d, 0x34, 0xff, 0x15, 0x0d, 0x11, 0x11, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x10, 0x20, 0x05, - 0x00, 0x0d, 0x0d, 0x4a, 0xef, 0x2a, 0xd6, 0x00, 0x00, 0x10, 0x0f, 0x29, 0xb5, 0x28, 0x11, 0xfb, 0x30, 0xda, 0x30, 0x1a, 0xc9, 0x30, 0xed, 0x05, - 0xc8, 0x0f, 0x7f, 0xff, 0x53, 0x2f, 0xaf, 0x6e, 0xaa, 0x28, 0x09, 0x50, 0x28, 0x1d, 0x64, 0x2f, 0xb9, 0x6f, 0x10, 0x15, 0xe0, 0x7f, 0x23, 0x01, - 0x57, 0x69, 0x4f, 0xb7, 0x5f, 0x57, 0x7f, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0xb0, 0xc0, 0x98, 0xd3, 0xdc, 0xb4, 0x31, 0x5c, 0xb8, 0x05, 0xf8, - 0x0f, 0x0f, 0x73, 0x7f, 0x21, 0x04, 0x30, 0x28, 0x0d, 0x51, 0x2d, 0x28, 0x1f, 0x35, 0x28, 0x19, 0x40, 0x04, 0x3e, 0x05, 0x48, 0x0d, 0x8a, 0x10, - 0x17, 0x94, 0xff, 0x0e, 0x12, 0x12, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x11, 0x80, 0x20, 0x05, 0x0e, 0x0e, 0xdd, 0xee, 0x69, 0xd7, 0x00, 0x02, 0x00, - 0x10, 0x29, 0xab, 0x30, 0xcb, 0x28, 0x19, 0xc7, 0x0a, 0x30, 0xb8, 0x30, 0xe5, 0x06, 0x48, 0x17, 0x43, 0x48, 0x17, 0x69, 0xc4, 0x2f, 0xa9, 0x3f, - 0xaf, 0x79, 0x00, 0xfa, 0x10, 0x15, 0xe0, 0x7f, 0x61, 0x53, 0x02, 0x81, 0x5b, 0xea, 0x8f, 0x24, 0x5c, 0x06, 0x78, 0x17, 0x74, 0x01, 0xce, 0x28, - 0xb1, 0x14, 0xb5, 0x20, 0xc7, 0x06, 0x78, 0x17, 0xa8, 0x0e, 0xf3, 0x7f, 0x1a, 0x48, 0x17, 0x35, 0x28, 0x1b, 0x34, 0x04, 0x38, 0x31, 0x04, 0x4e, - 0x05, 0xe8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0f, 0x08, 0x08, 0x20, 0x01, 0x50, 0x0f, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x0f, 0x0f, 0xe6, 0xee, 0x00, - 0x5a, 0xd9, 0x00, 0x00, 0x11, 0x29, 0xa2, 0x30, 0x44, 0xb9, 0x28, 0x17, 0xb7, 0x30, 0xaa, 0x28, 0x1d, 0x02, 0x5e, 0x82, 0x06, 0x1d, 0x33, 0x41, - 0x00, 0x73, 0x00, 0x75, 0x2f, 0xb1, 0x63, 0xb0, 0x28, 0x1b, 0xf3, 0x2f, 0xb9, 0x0e, 0xf0, 0x7f, 0x20, 0x00, 0x44, 0x00, 0x50, 0x2e, 0x29, 0x2d, - 0x2e, 0x10, 0x05, 0x61, 0x7f, 0x9a, 0x4e, 0x7e, 0x67, 0x00, 0xee, 0x68, 0x96, 0x99, 0xfd, 0x90, 0x79, 0x72, 0x08, 0x2b, 0x52, 0x3a, 0x53, 0x05, - 0xff, 0xb3, 0x44, 0xc5, 0x1c, 0x07, 0xc2, 0xdc, 0xc2, 0x28, 0xc6, 0x06, 0x58, 0x95, 0x07, 0x53, 0x7f, 0x54, 0x01, 0x18, 0xe7, 0x00, 0xe3, 0x06, - 0x0f, 0x2d, 0x2d, 0x19, 0x04, 0x41, 0x04, 0x41, 0x43, 0x28, 0x19, 0x41, 0x04, 0x4c, 0x04, 0x3e, 0x28, 0x21, 0xc5, 0x10, 0x06, 0xf4, 0xff, 0x10, - 0x05, 0xf6, 0x7f, 0x10, 0x04, 0x04, 0x20, 0x01, 0x10, 0x40, 0x06, 0x00, 0x10, 0x10, 0x10, 0x10, 0x09, 0xee, 0xff, 0xd6, 0x10, 0x00, 0x00, 0x12, - 0x28, 0x17, 0xeb, 0x30, 0xc8, 0x30, 0x00, 0xfb, 0x30, 0xd1, 0x30, 0xe9, 0x30, 0xb0, 0x30, 0x04, 0xa2, 0x30, 0xa4, 0x30, 0x0c, 0x05, 0xcd, 0x39, - 0x41, 0x00, 0x11, 0x6c, 0x00, 0x74, 0x24, 0x0f, 0x20, 0x00, 0x50, 0x2f, 0xb9, 0x56, 0x72, 0x2f, 0xbd, 0x67, 0x28, 0x27, 0x61, 0x2f, 0xb9, 0x10, - 0x15, 0x50, 0x7f, 0x0a, 0x00, 0x4e, 0xf4, 0x5d, 0xc9, 0x62, 0x2d, 0x57, 0x01, 0xc0, 0x05, 0xc2, 0xf5, 0x9f, 0xff, 0x4c, 0xc5, 0xa0, 0xd1, 0x0c, - 0xd3, 0x00, 0x7c, 0xb7, 0xfc, 0xac, 0x74, 0xc7, 0x20, 0x00, 0x35, 0xfc, 0xc8, 0x06, 0x1b, 0x97, 0x08, 0x53, 0x7f, 0x69, 0x05, 0x88, 0x17, 0x3b, - 0x28, 0x11, 0x40, 0x42, 0x28, 0x13, 0x2d, 0x00, 0x1f, 0x04, 0x30, 0x04, 0x45, 0x40, 0x20, 0x03, 0x33, 0x04, 0x32, 0x20, 0x09, 0x39, 0x05, 0x48, - 0x23, 0x8a, 0x10, 0x16, 0xf4, 0xff, 0x11, 0x01, 0x01, 0x20, 0x01, 0x11, 0x40, 0x06, 0x11, 0x02, 0x11, 0x11, 0x11, 0x0b, 0xf1, 0xd4, 0x28, 0x17, - 0x13, 0x00, 0x29, 0xdc, 0x30, 0xb1, 0x30, 0xed, 0x30, 0xf3, 0xd5, 0x05, 0xe8, 0x0d, 0x9f, 0xff, 0x42, 0x2c, 0x23, 0x71, 0x2f, 0xb1, 0x65, 0x28, - 0x13, 0xc0, 0x06, 0x3f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x5a, 0x53, 0x4b, 0x51, 0x99, 0x9f, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0xf4, 0xbc, 0x00, - 0xcf, 0x60, 0x68, 0xb8, 0x06, 0x38, 0x11, 0x0f, 0x53, 0x7f, 0x11, 0x28, 0x11, 0x3a, 0x04, 0x35, 0x8c, 0x28, 0x0f, 0x3e, 0x04, 0x3d, 0x05, 0x48, - 0x09, 0x10, 0x17, 0xd4, 0xff, 0x12, 0x05, 0x50, 0x05, 0x20, 0x01, 0x12, 0x40, 0x06, 0x12, 0x12, 0x12, 0x12, 0x08, 0x1c, 0xf0, 0x50, 0xd5, 0x00, - 0x3f, 0xff, 0x01, 0x09, 0x09, 0xa8, 0x20, 0x01, 0x01, 0x20, 0x06, 0x12, 0x20, 0x05, 0x01, 0x01, 0x02, 0x48, 0x02, 0xd0, 0x01, 0x03, 0x03, 0xd0, - 0x01, 0x04, 0x06, 0x06, 0xa8, 0x20, 0x01, 0x04, 0x20, 0x06, 0x08, 0x20, 0x05, 0x04, 0x04, 0x05, 0x2a, 0x07, 0x07, 0x20, 0x01, 0x05, 0x20, 0x06, - 0x09, 0x20, 0x05, 0x05, 0x0a, 0x05, 0x06, 0x0a, 0x0a, 0x20, 0x01, 0x06, 0x20, 0x06, 0x0b, 0x82, 0x20, 0x05, 0x06, 0x06, 0x07, 0x0b, 0x0b, 0x20, - 0x01, 0x07, 0xa0, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x07, 0x07, 0x08, 0x0c, 0x0c, 0xa8, 0x20, 0x01, 0x08, 0x20, 0x06, 0x06, 0x20, 0x05, 0x08, 0x08, - 0x09, 0x2a, 0x0d, 0x0d, 0x20, 0x01, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, 0x09, 0x0a, 0x09, 0x0a, 0x0e, 0x0e, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x0d, - 0xca, 0x20, 0x05, 0x20, 0x45, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x0e, 0xca, 0x20, 0x05, 0x20, 0x45, 0x10, 0x10, 0x20, 0x01, 0x0c, 0x20, - 0x06, 0x0f, 0x89, 0x20, 0x05, 0x0c, 0x0c, 0x0d, 0x38, 0xf4, 0x11, 0x0d, 0x20, 0x06, 0x44, 0x10, 0x20, 0x05, 0x0d, 0x0d, 0x0e, 0x30, 0xec, 0x12, - 0x0e, 0xa2, 0x20, 0x06, 0x11, 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x30, 0x64, 0x08, 0x51, 0x0f, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x30, - 0xb4, 0x3e, 0x04, 0x10, 0x40, 0x06, 0x30, 0x4a, 0xf9, 0x3f, 0xf1, 0x37, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x1c, 0xd4, 0x00, 0x11, 0x19, 0x00, 0x00, 0x30, 0x01, 0x2a, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x6f, 0xf7, 0x36, 0xc9, 0x00, 0x01, 0x00, 0x02, 0x2a, 0xea, 0x30, 0xde, 0x30, 0x06, 0xb8, 0x19, 0x01, 0x4c, 0x00, 0x69, 0x00, 0x6d, 0x00, - 0x61, 0x06, 0x88, 0x9c, 0x01, 0x50, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x76, 0x20, 0x85, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x65, 0x00, 0x20, 0x00, 0x71, - 0x64, 0x40, 0x05, 0x05, 0x70, 0x97, 0x70, 0xff, 0x20, 0x00, 0x4d, 0x20, 0x7d, 0x55, 0x74, 0x40, 0x8d, 0x70, 0x20, 0x91, 0x6c, 0x21, 0x17, 0x74, - 0x21, 0x17, 0x70, 0x6e, 0x04, 0xe1, 0x1b, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x29, 0x52, 0x6c, 0x9a, 0x21, 0x01, 0x77, 0x06, 0x9b, 0x1b, 0xac, - 0xb9, 0xc8, 0xb9, 0x0e, 0xb3, 0x7f, 0x80, 0x06, 0xf3, 0xff, 0x1b, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x30, 0x60, 0x04, 0x10, 0x06, 0x71, 0x7f, 0x10, - 0x06, 0xf0, 0xff, 0x01, 0x0f, 0x14, 0x0f, 0x0f, 0x02, 0x0f, 0x01, 0x01, 0x0f, 0x0f, 0x0c, 0x20, 0x05, 0x01, 0x44, 0x01, 0x58, 0x17, 0x03, 0x2a, - 0xa2, 0x28, 0x17, 0xbd, 0x30, 0x15, 0xca, 0x30, 0xb9, 0x06, 0x68, 0x1d, 0x41, 0x48, 0x15, 0x7a, 0x27, 0x9b, 0xac, 0x37, 0x01, 0x73, 0x06, 0xc0, - 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0x9a, 0x4e, 0x08, 0x6c, 0x9a, 0x59, 0x5b, 0x06, 0x98, 0x19, 0x44, 0xc5, 0xc8, 0x01, 0xb9, 0x8c, - 0xc1, 0x98, 0xb0, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0xa0, 0x06, 0x33, 0xff, 0x10, 0x48, 0x15, 0x41, 0x04, 0x3e, 0x04, 0x3d, 0xe9, 0x40, 0x07, 0x10, - 0x0d, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x00, 0x02, 0x02, 0x02, 0x02, 0x95, 0xfb, 0xa4, 0xc8, 0x10, 0x00, - 0x00, 0x04, 0x28, 0x17, 0xf3, 0x30, 0xab, 0x30, 0x05, 0xc3, 0x30, 0xb7, 0x30, 0xe5, 0x06, 0x48, 0x19, 0x41, 0x4f, 0xa7, 0xb0, 0x38, 0x11, 0x68, - 0x06, 0x68, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0x89, 0x5b, 0x61, 0x53, 0x20, 0xc0, 0x4e, 0x06, 0x98, 0x17, 0x59, 0xc5, 0x74, 0xce, 0xdc, 0xd5, 0x06, - 0x68, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x28, 0x0f, 0x3a, 0x28, 0x19, 0x48, 0x06, 0x08, 0x11, 0xa4, 0x10, 0x17, 0x54, 0xff, 0x03, 0x38, 0x0c, 0x02, - 0x03, 0x40, 0x06, 0x03, 0x03, 0x05, 0x03, 0x03, 0x39, 0xf9, 0xde, 0x28, 0x17, 0x05, 0x28, 0x17, 0x05, 0xd7, 0x30, 0xea, 0x30, 0xde, 0x28, 0x19, - 0xaf, 0x06, 0x68, 0x17, 0x01, 0x70, 0x00, 0x75, 0x00, 0x72, 0x00, 0xed, 0x4f, 0xb7, 0x40, 0x63, 0x10, 0x16, 0x00, 0x7f, 0x3f, 0x96, 0x6e, 0x66, - 0xcc, 0x91, 0x08, 0x6c, 0x9a, 0x4b, 0x51, 0x06, 0x58, 0x1b, 0x44, 0xc5, 0x78, 0x06, 0xd4, 0xac, 0xb9, 0xc9, 0xb9, 0x06, 0x98, 0x17, 0x0e, 0xd3, - 0x7f, 0x10, 0x00, 0x04, 0x3f, 0x04, 0x43, 0x04, 0x40, 0x04, 0x38, 0x2d, 0x04, 0x3c, 0x28, 0x1d, 0x3a, 0x06, 0x08, 0x1d, 0x10, 0x16, 0xf4, 0xff, - 0x04, 0x38, 0x0c, 0x20, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x4f, 0x02, 0xf6, 0x2d, 0xcc, 0x00, 0x00, 0x06, 0x28, 0x17, 0xec, 0x0c, - 0x30, 0xad, 0x30, 0xd1, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x72, 0x00, 0x15, 0x65, 0x00, 0x71, 0x28, 0x1b, 0x69, 0x28, 0x21, 0x61, 0x10, 0x16, 0x00, - 0x7f, 0x00, 0x3f, 0x96, 0xf7, 0x96, 0xfa, 0x57, 0x15, 0x5e, 0xc0, 0x06, 0x58, 0x15, 0x38, 0x17, 0x08, 0xb8, 0xa4, 0xd0, 0x0c, 0xd3, 0xaa, 0x10, - 0x06, 0x73, 0x7f, 0x10, 0x28, 0x13, 0x35, 0x28, 0x0f, 0x38, 0x28, 0x1f, 0x30, 0xd2, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x05, 0x38, 0x0c, - 0x04, 0x05, 0x40, 0x06, 0x05, 0x00, 0x05, 0x05, 0x05, 0x57, 0xf4, 0x22, 0xcd, 0x00, 0x20, 0x00, 0x07, 0x28, 0x17, 0xe4, 0x30, 0xaf, 0x30, 0xfc, - 0x08, 0x30, 0xc1, 0x30, 0xe7, 0x06, 0x48, 0x1b, 0x41, 0x00, 0x79, 0xa2, 0x4f, 0xa7, 0x75, 0x2f, 0xab, 0x68, 0x00, 0x6f, 0x10, 0x16, 0x00, 0x7f, - 0x3f, 0x01, 0x96, 0x9a, 0x4e, 0x93, 0x5e, 0x54, 0x4e, 0x06, 0x98, 0x17, 0x07, 0x7c, 0xc5, 0xe0, 0xcf, 0x08, 0x23, 0x8b, 0x06, 0x7b, 0x97, 0x0e, - 0xd3, 0x7f, 0x10, 0x10, 0x04, 0x4f, 0x28, 0x15, 0x43, 0x04, 0x47, 0x04, 0x69, 0x3e, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x06, 0x38, 0x0c, - 0x05, 0x06, 0x40, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0xa5, 0xf6, 0x38, 0xcb, 0x00, 0x00, 0x00, 0x08, 0x2a, 0xab, 0x30, 0xcf, 0x30, 0x04, 0xde, - 0x30, 0xeb, 0x30, 0xab, 0x06, 0x48, 0x15, 0x00, 0x00, 0x55, 0x43, 0x2f, 0xa3, 0x6a, 0x2f, 0xa7, 0x6d, 0x2f, 0xab, 0x72, 0x28, 0x1f, 0xc0, 0x05, - 0xff, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x61, 0x53, 0xc8, 0x54, 0x6c, 0x9a, 0x20, 0x61, 0x53, 0x06, 0x78, 0x17, 0x74, 0xce, 0x58, 0xd5, 0xc8, 0x04, - 0xb9, 0x74, 0xb9, 0x74, 0xce, 0x10, 0x06, 0x53, 0x7f, 0x1a, 0x04, 0x15, 0x30, 0x04, 0x45, 0x20, 0x03, 0x3c, 0x20, 0x07, 0x40, 0x28, 0x21, 0x69, - 0x30, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, 0x40, 0x08, 0x20, 0x05, 0x07, 0x07, 0xe8, 0xfa, 0x2b, - 0xc8, 0x11, 0x00, 0x00, 0x09, 0x28, 0x17, 0xe4, 0x30, 0xaa, 0x06, 0x68, 0x13, 0xac, 0x78, 0x17, 0x6c, 0x20, 0x01, 0x61, 0x06, 0x2f, 0xab, 0x10, - 0x0f, 0x30, 0x7f, 0x61, 0x53, 0x02, 0x9a, 0x4e, 0xc4, 0x4f, 0x3a, 0x53, 0x06, 0x7f, 0xaf, 0x74, 0x06, 0xce, 0x7c, 0xc5, 0x24, 0xc6, 0x10, 0x06, - 0x93, 0x7f, 0x38, 0x17, 0x3b, 0x03, 0x04, 0x4c, 0x04, 0x4f, 0x04, 0x3e, 0x05, 0xe8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x48, 0x08, 0x38, 0x0c, 0x07, - 0x08, 0x40, 0x06, 0x08, 0x08, 0x08, 0x00, 0x08, 0x6c, 0xf7, 0x24, 0xc9, 0x00, 0x00, 0x0a, 0x02, 0x2a, 0xaf, 0x30, 0xb9, 0x30, 0xb3, 0x06, 0xc8, - 0x17, 0x75, 0x3b, 0x00, 0x7a, 0x2f, 0xa7, 0x06, 0x58, 0x15, 0x07, 0x50, 0x7f, 0x73, 0x0e, 0xe0, 0x7f, 0x06, 0xb1, 0xff, 0x00, 0x93, 0x5e, 0xaf, - 0x65, 0xd1, 0x79, 0x01, 0x77, 0x81, 0x06, 0x7b, 0x19, 0xe0, 0xcf, 0xa4, 0xc2, 0x54, 0xcf, 0x10, 0x06, 0x93, 0x7f, 0x01, 0x1a, 0x04, 0x43, 0x04, - 0x41, 0x04, 0x3a, 0x06, 0x68, 0x15, 0xd2, 0x0f, 0x54, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x09, 0x38, 0x0c, 0x08, 0x09, 0x20, 0x06, 0x09, 0x80, 0x20, - 0x05, 0x09, 0x09, 0x64, 0xf6, 0xd1, 0xcc, 0x00, 0x00, 0x00, 0x0b, 0x2a, 0xef, 0x30, 0xf3, 0x30, 0xab, 0x0d, 0x30, 0xd9, 0x30, 0xea, 0x20, 0x05, - 0x06, 0x3f, 0xb0, 0x48, 0x28, 0x17, 0x10, 0x61, 0x00, 0x6e, 0x28, 0x19, 0x61, 0x00, 0x76, 0x00, 0x58, 0x65, 0x2f, 0xbb, 0x69, 0x40, 0x0b, 0x10, - 0x15, 0x70, 0x7f, 0x07, 0x4e, 0x61, 0x01, 0x53, 0xe6, 0x97, 0x29, 0x52, 0x61, 0x53, 0x06, 0x58, 0x1b, 0x00, 0xb0, 0xc6, 0x59, 0xc5, 0x74, 0xce, - 0xa8, 0xbc, 0x08, 0xac, 0xb9, 0x74, 0xce, 0x10, 0x06, 0x33, 0x7f, 0x23, 0x04, 0x30, 0x20, 0x04, 0x3d, 0x28, 0x17, 0x30, 0x04, 0x32, 0x04, 0x35, - 0x0d, 0x04, 0x3b, 0x04, 0x38, 0x40, 0x0b, 0x10, 0x1d, 0x94, 0xff, 0x0a, 0x38, 0x0c, 0x28, 0x09, 0x0a, 0x20, 0x06, 0x16, 0x20, 0x05, 0x0a, 0x0a, - 0xec, 0x02, 0xf6, 0xae, 0xca, 0x00, 0x00, 0x0c, 0x28, 0x17, 0xcc, 0x35, 0x30, 0xb3, 0x06, 0x48, 0x11, 0x98, 0x17, 0xe1, 0x28, 0x17, 0x75, 0x06, - 0x6f, 0xb3, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0xe6, 0x74, 0xaa, 0x52, 0xd1, 0x79, 0x06, 0x58, 0x13, 0x81, 0x58, 0x17, 0x44, 0xc5, 0x04, 0xb2, 0x54, - 0xcf, 0x10, 0x06, 0x73, 0x7f, 0xad, 0x58, 0x17, 0x43, 0x28, 0x19, 0x3e, 0x05, 0xa8, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x0b, 0x38, 0x0c, 0x28, 0x0a, - 0x0b, 0x20, 0x06, 0x17, 0x20, 0x05, 0x0b, 0x0b, 0xf3, 0x00, 0xf8, 0xcb, 0xc9, 0x00, 0x00, 0x0d, 0x2a, 0xa4, 0x23, 0x30, 0xab, 0x06, 0xa8, 0x15, - 0x00, 0x00, 0x49, 0x05, 0xcf, 0x9d, 0x10, 0x10, 0x10, 0x7f, 0x08, 0x0a, 0x4f, 0x61, 0x53, 0x06, 0x98, 0x15, 0x00, 0x00, 0x74, 0x15, 0xc7, 0x74, - 0xce, 0x10, 0x06, 0xb3, 0x7f, 0x18, 0x28, 0x11, 0x30, 0x06, 0x48, 0x11, 0xa5, 0x10, 0x17, 0x54, 0xff, 0x0c, 0x38, 0x0c, 0x0b, 0x0c, 0x20, 0x06, - 0x06, 0x20, 0x05, 0x00, 0x0c, 0x0c, 0xff, 0xf5, 0x27, 0xca, 0x00, 0x00, 0x01, 0x0e, 0x2a, 0xd5, 0x30, 0xcb, 0x30, 0xf3, 0x06, 0xa8, 0x19, 0x46, - 0x4a, 0x2f, 0xaf, 0x6e, 0x00, 0xed, 0x2f, 0xb1, 0x10, 0x16, 0x50, 0x7f, 0xe1, 0x10, 0x80, 0x81, 0x5b, 0x06, 0xb8, 0x17, 0xc4, 0xd6, 0xcc, 0xb2, - 0xc0, 0x06, 0xbb, 0x97, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x69, 0x38, 0x20, 0x03, 0x10, 0x1e, 0x54, 0xff, 0x0d, 0x38, 0x0c, - 0x0c, 0x0d, 0x20, 0x06, 0x41, 0x19, 0x20, 0x05, 0x0d, 0x0d, 0x6c, 0xf7, 0x81, 0x28, 0x17, 0x00, 0x0f, 0x2a, 0xe9, 0x30, 0xfb, 0x30, 0xea, 0x30, - 0x01, 0xd9, 0x30, 0xeb, 0x30, 0xbf, 0x30, 0xfc, 0x06, 0x28, 0x1f, 0x50, 0x4c, 0x2f, 0xad, 0x20, 0x20, 0x05, 0x69, 0x00, 0x62, 0x00, 0x05, 0x65, - 0x00, 0x72, 0x00, 0x74, 0x2f, 0xbd, 0x64, 0x10, 0x15, 0xa0, 0x7f, 0x00, 0xc9, 0x62, 0x29, 0x52, 0x2f, 0x4f, 0x54, 0x58, 0x20, 0xb7, 0x5f, 0x06, - 0x58, 0x1d, 0x7c, 0xb7, 0xac, 0xb9, 0xa0, 0x01, 0xbc, 0x74, 0xb9, 0xc0, 0xd0, 0xdc, 0xb4, 0x06, 0x3f, 0xb6, 0x82, 0x0e, 0xf3, 0x7f, 0x1b, 0x04, - 0x30, 0x04, 0x2d, 0x20, 0x05, 0x38, 0x00, 0x04, 0x31, 0x04, 0x35, 0x04, 0x40, 0x04, 0x42, 0xb4, 0x20, 0x0f, 0x34, 0x05, 0xa8, 0x23, 0x10, 0x16, - 0xf4, 0xff, 0x0e, 0x38, 0x0c, 0x0d, 0x0e, 0xa0, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x0e, 0x0e, 0x3c, 0xfa, 0xce, 0x08, 0xc7, 0x00, 0x00, 0x10, 0x28, - 0x17, 0xf3, 0x30, 0xd0, 0x03, 0x30, 0xa4, 0x30, 0xa7, 0x30, 0xb1, 0x06, 0x28, 0x15, 0x58, 0x17, 0x45, 0x6d, 0x28, 0x13, 0x61, 0x00, 0x79, 0x28, - 0x17, 0x71, 0x2f, 0xbd, 0x40, 0x65, 0x10, 0x15, 0xc0, 0x7f, 0x70, 0x51, 0xf4, 0x5d, 0x36, 0x80, 0x20, 0x4b, 0x51, 0x06, 0x58, 0x15, 0x00, 0x00, - 0x8c, 0xb7, 0x14, 0x07, 0xbc, 0x08, 0xc6, 0x00, 0xcf, 0x06, 0x6f, 0xae, 0x0f, 0x03, 0x7f, 0x38, 0x17, 0x45, 0x3c, 0x28, 0x13, 0x30, 0x04, 0x39, - 0x28, 0x17, 0x3a, 0x28, 0x1b, 0xa5, 0x10, 0x1d, 0xd4, 0xff, 0x0f, 0x38, 0x0c, 0x0e, 0x0f, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x04, 0x0f, 0x0f, 0x2f, - 0xfb, 0x3a, 0x28, 0x17, 0x11, 0x2a, 0x06, 0xed, 0x30, 0xec, 0x30, 0xc8, 0x06, 0x48, 0x11, 0x7f, 0xaf, 0x6f, 0xa8, 0x2f, 0xa5, 0x65, 0x2f, 0xa7, - 0x6f, 0x10, 0x16, 0x40, 0x7f, 0x1b, 0x6d, 0xf7, 0x10, 0x96, 0x58, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x5c, 0xb8, 0x08, 0x08, 0xb8, 0xa0, 0xd1, - 0x10, 0x06, 0x93, 0x7f, 0x1b, 0x04, 0x3e, 0x2c, 0x04, 0x40, 0x28, 0x11, 0x42, 0x20, 0x07, 0x10, 0x1e, 0x34, 0xff, 0x10, 0x10, 0x14, 0x0f, 0x10, - 0x10, 0x40, 0x01, 0x0d, 0x40, 0x07, 0x56, 0xfd, 0x00, 0xea, 0xcb, 0x00, 0x00, 0x12, 0x2a, 0xde, 0x30, 0x44, 0xc9, 0x28, 0x19, 0xfb, 0x30, 0xc7, - 0x40, 0x03, 0xa3, 0x30, 0x15, 0xaa, 0x30, 0xb9, 0x05, 0xc8, 0x25, 0x4d, 0x2f, 0xaf, 0x64, 0x48, 0x19, 0x62, 0x20, 0x20, 0x07, 0x30, 0x05, 0x44, - 0x00, 0x69, 0x28, 0x2b, 0x73, 0x80, 0x10, 0x15, 0x60, 0x7f, 0x6c, 0x9a, 0xb7, 0x5f, 0xf7, 0x96, 0xb7, 0x01, 0x5f, 0xea, 0x8f, 0x65, 0x59, 0xaf, - 0x65, 0x06, 0x18, 0x1f, 0x00, 0xc8, 0xb9, 0xdc, 0xb4, 0x08, 0xb8, 0x70, 0xb3, 0x03, 0x14, 0xb5, 0x24, 0xc6, 0xa4, 0xc2, 0x06, 0x1b, 0x9f, 0x0e, - 0xf3, 0x7f, 0x04, 0x1c, 0x04, 0x30, 0x04, 0x34, 0x48, 0x19, 0x2d, 0x00, 0x45, 0x34, 0x40, 0x05, 0x14, 0x04, 0x38, 0x28, 0x2b, 0x41, 0x05, 0x68, - 0x25, 0x82, 0x10, 0x16, 0xf4, 0xff, 0x11, 0x11, 0x10, 0x11, 0x11, 0x40, 0x01, 0x0e, 0x80, 0x40, 0x07, 0x0b, 0xf7, 0xce, 0xce, 0x00, 0x00, 0x13, - 0x00, 0x2a, 0xe2, 0x30, 0xb1, 0x30, 0xb0, 0x30, 0xa2, 0xc1, 0x05, 0xc8, 0x0b, 0xd8, 0x17, 0x6f, 0x00, 0x71, 0x00, 0x75, 0x2f, 0xb1, 0x50, 0x67, - 0x20, 0x05, 0x61, 0x10, 0x16, 0x00, 0x7f, 0xab, 0x83, 0x4b, 0x51, 0x30, 0xdc, 0x74, 0x06, 0x18, 0x0f, 0x7f, 0xff, 0xa8, 0xba, 0x00, 0xcf, 0x35, - 0xfc, 0xac, 0x06, 0x73, 0x7d, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x03, 0x3a, 0x28, 0x15, 0x18, 0x33, 0x04, 0x43, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, - 0x12, 0x12, 0x11, 0x28, 0x12, 0x12, 0x40, 0x01, 0x0f, 0x40, 0x07, 0xc6, 0xf3, 0x8f, 0x00, 0xcd, 0x00, 0x00, 0x14, 0x2a, 0xd1, 0x30, 0xb9, 0x22, - 0x30, 0xb3, 0x06, 0x88, 0x15, 0x00, 0x00, 0x50, 0x2f, 0xaf, 0x73, 0x30, 0x00, 0x63, 0x2f, 0xa1, 0x10, 0x16, 0x50, 0x7f, 0x15, 0x5e, 0xaf, 0x65, - 0x20, 0xd1, 0x79, 0x06, 0x98, 0x17, 0x0c, 0xd3, 0xa4, 0xc2, 0x54, 0x55, 0xcf, 0x10, 0x06, 0x93, 0x7f, 0x1f, 0x28, 0x0d, 0x41, 0x28, 0x19, 0x3e, - 0x06, 0x28, 0x13, 0x82, 0x10, 0x17, 0x34, 0xff, 0x13, 0x13, 0x12, 0x13, 0x13, 0x40, 0x01, 0x10, 0x84, 0x40, 0x07, 0x68, 0xf8, 0xc5, 0xc9, 0x25, - 0x15, 0x2a, 0xd4, 0x0a, 0x30, 0xa6, 0x30, 0xe9, 0x06, 0xc8, 0x17, 0x69, 0x2f, 0xad, 0x72, 0xc0, 0x06, 0x2f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xae, - 0x76, 0x4c, 0x4e, 0xc9, 0x62, 0x81, 0x06, 0x98, 0x17, 0x3c, 0xd5, 0xb0, 0xc6, 0x7c, 0xb7, 0x10, 0x06, 0x93, 0x7f, 0x01, 0x1f, 0x04, 0x38, 0x04, - 0x43, 0x04, 0x40, 0x28, 0x1d, 0x82, 0x10, 0x1e, 0x54, 0xff, 0x14, 0x14, 0x13, 0x14, 0x14, 0x40, 0x01, 0x11, 0x80, 0x40, 0x07, 0x4e, 0xfc, 0xaa, - 0xc6, 0x00, 0x00, 0x16, 0x02, 0x2a, 0xd7, 0x30, 0xfc, 0x30, 0xce, 0x06, 0xc8, 0x17, 0x75, 0x30, 0x00, 0x6e, 0x06, 0x8f, 0xad, 0x10, 0x0f, 0x10, - 0x7f, 0x6e, 0x66, 0xfa, 0x8b, 0x81, 0x06, 0x98, 0x15, 0x00, 0x00, 0x78, 0xd4, 0x78, 0xb1, 0x06, 0x9b, 0x95, 0xa3, 0x0f, 0x13, 0x7f, 0x1f, 0x28, - 0x15, 0x3d, 0x04, 0x3e, 0x06, 0x68, 0x15, 0x10, 0x17, 0x14, 0xff, 0x28, 0x15, 0x15, 0x70, 0x01, 0x12, 0x40, 0x0a, 0xbe, 0xf4, 0x33, 0x00, 0xce, - 0x00, 0x00, 0x17, 0x2a, 0xb5, 0x30, 0xf3, 0x00, 0x30, 0xfb, 0x30, 0xde, 0x30, 0xeb, 0x30, 0xc6, 0x34, 0x30, 0xa3, 0x20, 0x0b, 0x05, 0xff, 0xb6, - 0x53, 0x2f, 0xa9, 0x6e, 0x00, 0x10, 0x20, 0x00, 0x4d, 0x2f, 0xb1, 0x72, 0x00, 0x74, 0x00, 0x60, 0xed, 0x28, 0x25, 0x10, 0x15, 0xb0, 0x7f, 0x23, - 0x57, 0x6c, 0x9a, 0x01, 0x40, 0x4e, 0x06, 0x98, 0x19, 0xb0, 0xc0, 0xc8, 0xb9, 0x74, 0xb9, 0x31, 0xf4, 0xd2, 0x06, 0x7b, 0x99, 0x0e, 0xf3, 0x7f, - 0x21, 0x04, 0x30, 0x28, 0x17, 0x10, 0x2d, 0x00, 0x1c, 0x20, 0x07, 0x40, 0x04, 0x42, 0x04, 0x65, 0x38, 0x28, 0x25, 0x10, 0x1d, 0xb4, 0xff, 0x16, - 0x16, 0x70, 0x01, 0x13, 0x40, 0x0a, 0x00, 0xb3, 0xfb, 0x45, 0xc9, 0x00, 0x00, 0x18, 0x2a, 0x06, 0xbf, 0x30, 0xaf, 0x30, 0xca, 0x06, 0x08, 0x0d, - 0x9f, 0xff, 0x54, 0xa8, 0x28, 0x17, 0x63, 0x2f, 0xb1, 0x61, 0x10, 0x16, 0x70, 0x7f, 0x58, 0x4b, 0x51, 0x20, 0xb3, 0x7e, 0x06, 0x98, 0x17, 0xc0, - 0xd0, 0x6c, 0xd0, 0x98, 0x55, 0xb0, 0x10, 0x06, 0x93, 0x7f, 0x22, 0x28, 0x17, 0x3a, 0x28, 0x19, 0x30, 0x05, 0xc8, 0x0d, 0x94, 0x10, 0x17, 0x94, - 0xff, 0x17, 0x17, 0x70, 0x01, 0x14, 0x40, 0x0a, 0x33, 0xf3, 0x00, 0x0c, 0xce, 0x00, 0x00, 0x19, 0x2a, 0xc8, 0x30, 0x01, 0xa5, 0x30, 0xf3, 0x30, - 0xd9, 0x30, 0xb9, 0x06, 0x68, 0x1b, 0x00, 0x54, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x10, 0x65, 0x00, 0x73, 0x10, 0x16, 0x40, 0x7f, 0x1a, - 0x90, 0x1d, 0x8d, 0x20, 0xaf, 0x65, 0x06, 0x98, 0x17, 0x3c, 0xd2, 0xa0, 0xbc, 0xa4, 0x60, 0xc2, 0x06, 0xbb, 0x97, 0x0e, 0xd3, 0x7f, 0x22, 0x04, - 0x43, 0x04, 0x3c, 0x03, 0x04, 0x31, 0x04, 0x35, 0x04, 0x41, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x18, 0x18, 0x70, 0x01, 0x15, 0x40, - 0x0a, 0x77, 0xfd, 0xcd, 0x40, 0xc6, 0x25, 0x15, 0x2a, 0xa6, 0x30, 0xab, 0x30, 0xe4, 0x22, 0x30, 0xea, 0x06, 0x68, 0x15, 0x00, 0x00, 0x55, 0x2f, - 0xad, 0x61, 0x22, 0x00, 0x79, 0x2f, 0xb5, 0x6c, 0x00, 0x69, 0x10, 0x16, 0x20, 0x7f, 0x4c, 0x01, 0x4e, 0x61, 0x53, 0x9a, 0x4e, 0x29, 0x52, 0x06, - 0x78, 0x19, 0x00, 0xb0, 0xc6, 0x74, 0xce, 0x84, 0xc5, 0xac, 0xb9, 0x80, 0x10, 0x06, 0x73, 0x7f, 0x23, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x4f, 0x0c, - 0x04, 0x3b, 0x04, 0x38, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x19, 0xa1, 0x70, 0x01, 0x18, 0x40, 0x0a, 0x0b, 0xfa, 0xff, 0xca, 0x00, - 0x3f, 0xff, 0x00, 0x01, 0x0f, 0x14, 0x0f, 0x0f, 0x0f, 0x01, 0x01, 0x11, 0x0f, 0x0f, 0x0c, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x20, 0x01, - 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x90, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x48, 0x04, 0x30, 0x04, 0x03, - 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x24, 0x04, 0x05, 0x30, 0x04, 0x04, 0x05, 0x40, 0x06, 0x05, 0x05, 0x12, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, - 0x06, 0x40, 0x06, 0x06, 0x09, 0x06, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x44, 0x08, 0x20, 0x05, 0x07, 0x07, 0x08, 0x30, 0x04, - 0x07, 0x08, 0x82, 0x40, 0x06, 0x08, 0x08, 0x08, 0x08, 0x09, 0x30, 0x04, 0x08, 0x51, 0x09, 0x20, 0x06, 0x09, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, - 0x04, 0x28, 0x09, 0x0a, 0x20, 0x06, 0x16, 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x94, 0x30, 0x04, 0x0a, 0x0b, 0x20, 0x06, 0x17, 0x20, 0x05, 0x0b, 0x0b, - 0x4a, 0x0c, 0x30, 0x04, 0x0b, 0x0c, 0x20, 0x06, 0x06, 0x20, 0x05, 0x0c, 0x25, 0x0c, 0x0d, 0x30, 0x04, 0x0c, 0x0d, 0x20, 0x06, 0x19, 0x20, 0x05, - 0x12, 0x0d, 0x0d, 0x0e, 0x30, 0x04, 0x0d, 0x0e, 0x20, 0x06, 0x0a, 0x89, 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x30, 0x04, 0x0e, 0x0f, 0x20, 0x06, 0x43, - 0x0b, 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x10, 0x20, 0x02, 0x40, 0x01, 0x4d, 0x0d, 0x40, 0x07, 0x11, 0x11, 0x20, 0x02, 0x40, 0x01, 0x0e, 0x40, 0x07, - 0x34, 0x12, 0x12, 0x20, 0x02, 0x40, 0x01, 0x0f, 0x40, 0x07, 0x13, 0x13, 0xd3, 0x20, 0x02, 0x40, 0x01, 0x10, 0x40, 0x07, 0x14, 0x14, 0x20, 0x02, - 0x40, 0x01, 0x4a, 0x11, 0x40, 0x07, 0x15, 0x15, 0x70, 0x01, 0x12, 0x40, 0x0a, 0x16, 0x52, 0x16, 0x70, 0x01, 0x13, 0x40, 0x0a, 0x17, 0x17, 0x70, - 0x01, 0x14, 0xf0, 0x40, 0x0a, 0xf9, 0xaf, 0xf1, 0xa7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, 0x11, 0x0e, 0x00, 0x00, - 0x30, 0x01, 0x2b, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x4d, 0x0c, 0x67, 0xd3, 0x00, 0x00, 0x00, - 0x02, 0x2b, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x00, 0x30, 0xfb, 0x30, 0xb8, 0x30, 0xe7, 0x30, 0xfc, 0x80, 0x20, 0x05, 0xfb, 0x30, 0xd0, 0x30, 0xbb, - 0x30, 0xc6, 0x90, 0x20, 0x0b, 0xeb, 0x30, 0x05, 0x38, 0x31, 0x53, 0x00, 0x61, 0x00, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x00, - 0x47, 0x00, 0x65, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x45, 0x67, 0x20, 0x07, 0x20, 0x00, 0x42, 0x20, 0x19, 0x73, 0x20, 0x01, 0x56, 0x65, 0x20, 0x1b, - 0x65, 0x20, 0x15, 0x72, 0x20, 0x1d, 0x10, 0x14, 0x10, 0x7f, 0x23, 0x00, 0x57, 0x54, 0x4e, 0xbb, 0x6c, 0xf4, 0x5d, 0xaf, 0x01, 0x65, 0x79, 0x72, - 0x14, 0x5c, 0x3a, 0x53, 0x05, 0xfb, 0x25, 0x00, 0x38, 0xc1, 0x78, 0xc7, 0xb8, 0xd2, 0x70, 0xc8, 0x00, 0xc0, 0xc9, 0x14, 0xbc, 0xa4, 0xc2, 0x4c, - 0xd1, 0x30, 0x74, 0xb9, 0x05, 0xdb, 0xa7, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0x04, 0x00, 0x3d, 0x04, 0x42, 0x04, 0x2d, 0x00, 0x14, 0x04, 0x01, - 0x36, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x34, 0x20, 0x07, 0x01, 0x2d, 0x00, 0x11, 0x04, 0x30, 0x04, 0x41, 0x20, 0x17, 0x62, 0x35, 0x20, 0x11, 0x10, - 0x1c, 0xb4, 0xff, 0x01, 0x03, 0x03, 0x20, 0x01, 0x01, 0xa4, 0x20, 0x06, 0x05, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x2b, 0x01, 0xaf, 0x30, - 0xe9, 0x30, 0xa4, 0x30, 0xb9, 0x48, 0x1b, 0x14, 0xc1, 0x30, 0xe3, 0x28, 0x1b, 0xc1, 0x28, 0x25, 0xcb, 0x30, 0x46, 0xb3, 0x20, 0x17, 0xbf, 0x30, - 0xa6, 0x28, 0x35, 0x04, 0xdf, 0xcf, 0x43, 0x2e, 0x00, 0x68, 0x28, 0x09, 0x69, 0x28, 0x01, 0x38, 0x19, 0x30, 0x0d, 0x75, 0xa3, 0x28, 0x19, 0x63, - 0x20, 0x15, 0x20, 0x00, 0x4e, 0x28, 0x31, 0x30, 0x09, 0x11, 0x6f, 0x00, 0x6c, 0x28, 0x3d, 0x20, 0x00, 0x54, 0x28, 0x35, 0x61, 0x77, 0x28, 0x43, - 0x10, 0x13, 0xb0, 0x7f, 0x4b, 0x51, 0x56, 0x8d, 0x38, 0x13, 0x00, 0x7b, 0x5f, 0x47, 0x59, 0x3c, 0x5c, 0xe4, 0x53, 0x08, 0xc9, 0x62, 0x47, 0x95, - 0x05, 0xb8, 0x1d, 0x6c, 0xd0, 0x7c, 0x00, 0xb7, 0x74, 0xc7, 0xa4, 0xc2, 0xb8, 0xd2, 0x98, 0x00, 0xcc, 0x58, 0xce, 0xc8, 0xb2, 0x5c, 0xcf, 0x7c, - 0x06, 0xb7, 0xc0, 0xd0, 0xb4, 0xc6, 0x05, 0x7f, 0xc5, 0x0e, 0xf3, 0x7f, 0x1a, 0x88, 0x28, 0x09, 0x30, 0x04, 0x39, 0x48, 0x03, 0x2d, 0x00, 0x27, - 0x28, 0x04, 0x51, 0x28, 0x19, 0x47, 0x28, 0x25, 0x1d, 0x04, 0x38, 0x28, 0x04, 0x3a, 0x28, 0x27, 0x3b, 0x28, 0x1f, 0x2d, 0x00, 0x22, 0xb4, 0x28, - 0x25, 0x43, 0x28, 0x3f, 0x10, 0x1c, 0x14, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x80, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x59, 0x0c, 0x61, 0x8d, - 0x28, 0x17, 0x04, 0x2b, 0xbb, 0x27, 0xf9, 0x38, 0x13, 0xa2, 0x28, 0x01, 0x11, 0xfb, 0x30, 0xb5, 0x28, 0x07, 0xc7, 0x30, 0xa3, 0x28, 0x23, 0x75, - 0xdd, 0x28, 0x2d, 0x30, 0x19, 0x05, 0xbc, 0xaf, 0x41, 0x2f, 0xb7, 0x6e, 0x4f, 0xab, 0x82, 0x3f, 0xc5, 0x6e, 0x00, 0x64, 0x00, 0x79, 0x2f, 0xc5, - 0x50, 0xe0, 0x2f, 0xc3, 0x5f, 0xd1, 0x10, 0x14, 0x30, 0x7f, 0x23, 0x57, 0x89, 0x5b, 0xae, 0x00, 0x59, 0x51, 0x68, 0xea, 0x8f, 0xe2, 0x6c, 0xe0, - 0x18, 0x56, 0x79, 0x72, 0x05, 0xb8, 0x13, 0x3f, 0xff, 0x38, 0xc1, 0x78, 0x00, 0xc7, 0xb8, 0xd2, 0x64, 0xc5, 0xcc, 0xc0, 0x14, 0x1c, 0xb5, 0xec, - 0xd3, 0x30, 0x0b, 0x05, 0xd0, 0x7f, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x6a, 0x35, 0x27, 0xef, 0x38, 0x13, 0x2d, 0x27, 0xf7, 0x3d, 0x28, 0x1b, 0x21, - 0x28, 0x04, 0x4d, 0x28, 0x01, 0x34, 0x28, 0x17, 0x2d, 0x00, 0x1f, 0xb4, 0x28, 0x19, 0x39, 0x40, 0x1f, 0x10, 0x1c, 0x74, 0xff, 0x03, 0x38, 0x0c, - 0x02, 0x03, 0xa0, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x03, 0x03, 0x56, 0x0c, 0x52, 0xa0, 0x28, 0x17, 0x05, 0x88, 0x17, 0xb8, 0x30, 0xe7, 0x30, 0xfc, - 0xd5, 0x20, 0x05, 0x30, 0x09, 0xf3, 0x20, 0x0d, 0xe3, 0x20, 0x0d, 0xe9, 0x28, 0x33, 0x6a, 0xc9, 0x04, 0xe8, 0x19, 0xb8, 0x17, 0x47, 0x28, 0x13, - 0x6f, 0x2f, 0xbd, 0x67, 0xb7, 0x48, 0x1b, 0x47, 0x48, 0x2f, 0x30, 0x0b, 0x72, 0x4f, 0xaf, 0x38, 0x27, 0x10, 0x14, 0x10, 0x7f, 0x00, 0x23, 0x57, - 0x54, 0x4e, 0xbb, 0x6c, 0xd1, 0x91, 0x0c, 0x70, 0x67, 0x70, 0x51, 0x05, 0xf8, 0x13, 0x98, 0x17, 0x70, 0xc8, 0x00, 0xc0, 0xc9, 0xc4, 0xc9, 0x00, - 0xc8, 0x9c, 0xb7, 0x38, 0xdc, 0xb4, 0x06, 0x98, 0x17, 0x0e, 0x33, 0x7f, 0x98, 0x17, 0x14, 0x04, 0x36, 0xaa, 0x28, 0x05, 0x40, 0x28, 0x11, 0x36, - 0x60, 0x0d, 0x38, 0x48, 0x1f, 0x36, 0x83, 0x28, 0x39, 0x40, 0x04, 0x3b, 0x04, 0x30, 0x48, 0x2d, 0x10, 0x1b, 0xf4, 0xff, 0x28, 0x04, 0x04, 0x70, - 0x01, 0x06, 0x40, 0x0a, 0x2f, 0x0c, 0x86, 0xa8, 0x28, 0x17, 0x06, 0xa8, 0x17, 0xa7, 0x28, 0x17, 0xe0, 0x30, 0xba, 0x8b, 0x28, 0x23, 0xa6, 0x30, - 0xa3, 0x48, 0x11, 0xef, 0x28, 0x29, 0x05, 0xb8, 0x17, 0x55, 0x4a, 0x2f, 0xbb, 0x6d, 0x2f, 0xaf, 0x73, 0x2f, 0xbb, 0x57, 0x4f, 0xc5, 0x16, 0x64, - 0x00, 0x77, 0x2f, 0xcf, 0x72, 0x04, 0x48, 0x11, 0x10, 0x0f, 0x50, 0x7f, 0x23, 0x00, 0x57, 0x79, 0x8a, 0xc6, 0x59, 0xaf, 0x65, 0x29, 0x01, 0x6e, - 0xb7, 0x5f, 0x83, 0x6c, 0xb7, 0x5f, 0x05, 0xf8, 0x1b, 0x80, 0x58, 0x17, 0x1c, 0xc8, 0x84, 0xc7, 0xa4, 0xc2, 0x08, 0x07, 0xc7, 0xdc, 0xb4, 0xcc, - 0xc6, 0x05, 0xd8, 0x19, 0x0e, 0xf3, 0x7f, 0xd8, 0x17, 0x01, 0x35, 0x04, 0x39, 0x04, 0x3c, 0x04, 0x41, 0x28, 0x25, 0x59, 0x23, 0x68, 0x15, 0x43, - 0x68, 0x2b, 0x10, 0x1c, 0x74, 0xff, 0x05, 0x05, 0x70, 0x01, 0x45, 0x02, 0x40, 0x0a, 0x3b, 0x0c, 0x80, 0x28, 0x17, 0x07, 0xa8, 0x17, 0x40, 0xe7, - 0x28, 0x21, 0xfb, 0x30, 0xab, 0x30, 0xd4, 0x30, 0x16, 0xb9, 0x30, 0xc6, 0x28, 0x23, 0xeb, 0x04, 0xe8, 0x11, 0x00, 0x38, 0x17, 0x6f, 0x22, 0x00, - 0x68, 0x2f, 0xbb, 0x20, 0x00, 0x43, 0x2f, 0xc5, 0x70, 0xad, 0x48, 0x21, 0x74, 0x4f, 0xaf, 0x72, 0x2f, 0xc9, 0x0e, 0x10, 0x7f, 0x69, 0x0e, 0xe0, - 0x7f, 0x80, 0x05, 0x31, 0xff, 0x23, 0x57, 0xa6, 0x7e, 0xf0, 0x7f, 0x61, 0x00, 0x53, 0xae, 0x76, 0xaf, 0x65, 0x79, 0x72, 0x14, 0x40, 0x5c, 0x06, - 0x58, 0x17, 0x74, 0xc8, 0x74, 0xce, 0x98, 0xd3, 0x03, 0xa4, 0xc2, 0x4c, 0xd1, 0x74, 0xb9, 0x05, 0xd8, 0x97, 0x0e, 0xf3, 0x7f, 0xa0, 0xd8, 0x17, - 0x3e, 0x28, 0x23, 0x2d, 0x00, 0x1a, 0x04, 0x30, 0x2b, 0x04, 0x3f, 0x28, 0x17, 0x41, 0x28, 0x2f, 0x35, 0x28, 0x15, 0x10, 0x06, 0x74, 0xff, 0x94, - 0x10, 0x05, 0x30, 0xff, 0x06, 0x06, 0x70, 0x01, 0x03, 0x40, 0x0a, 0x5f, 0x0c, 0x50, 0x5b, 0x28, 0x17, 0x08, 0x00, 0x08, 0x17, 0xd5, 0x30, 0xa3, - 0x30, 0x16, 0xc3, 0x30, 0xb0, 0x28, 0x2b, 0xea, 0x28, 0x1b, 0x06, 0x78, 0x17, 0x46, 0xbe, 0x2f, 0xc3, 0x67, 0x2f, 0xc3, 0x38, 0x0f, 0x04, 0x78, - 0x11, 0x10, 0x0f, 0x50, 0x7f, 0x58, 0x17, 0xf2, 0x01, 0x83, 0x3c, 0x68, 0x79, 0x72, 0xcc, 0x91, 0x05, 0xf8, 0x15, 0x80, 0x98, 0x17, 0x3c, 0xd5, - 0xf8, 0xad, 0xb8, 0xd2, 0xac, 0xea, 0x05, 0xe8, 0x15, 0x0f, 0x13, 0x7f, 0x00, 0x38, 0x17, 0x24, 0x28, 0x13, 0x33, 0x28, 0x2b, 0x40, 0xca, 0x28, - 0x1b, 0x10, 0x1c, 0xf4, 0xff, 0x07, 0x07, 0x70, 0x01, 0x04, 0x40, 0x0a, 0x2b, 0x2a, 0x0c, 0x7d, 0x28, 0x17, 0x09, 0x88, 0x17, 0xe1, 0x48, 0x07, - 0xfb, 0x2d, 0x30, 0xb1, 0x28, 0x0d, 0xe8, 0x28, 0x2b, 0x06, 0x3c, 0xaf, 0x4d, 0x2f, 0xbb, 0x15, 0x72, 0x00, 0x79, 0x6f, 0xaf, 0x79, 0x2f, 0xbd, - 0x6e, 0x10, 0x15, 0x00, 0x7f, 0x00, 0x23, 0x57, 0x9b, 0x73, 0x3d, 0x4e, 0x61, 0x53, 0x32, 0x38, 0x6c, 0x06, 0x18, 0x13, 0x98, 0x17, 0x54, 0xba, - 0x28, 0x11, 0xcf, 0x0e, 0x74, 0xc7, 0xb8, 0xc5, 0x06, 0xb8, 0x17, 0x0e, 0x33, 0x7f, 0x98, 0x17, 0x1c, 0xc0, 0x28, 0x21, 0x38, 0x09, 0x2d, 0x00, - 0x1a, 0x04, 0x30, 0x04, 0x65, 0x39, 0x48, 0x23, 0x10, 0x1d, 0x14, 0xff, 0x08, 0x08, 0x70, 0x01, 0x07, 0x40, 0x0a, 0x15, 0x56, 0x0c, 0x64, 0x28, - 0x17, 0x0a, 0x88, 0x17, 0xdd, 0x28, 0x15, 0x40, 0xeb, 0x28, 0x1f, 0xab, 0x30, 0xd4, 0x30, 0xb9, 0x30, 0x68, 0xc6, 0x40, 0x0d, 0x05, 0xfc, 0xaf, - 0x50, 0x2f, 0xbb, 0x75, 0x00, 0x6c, 0xab, 0x68, 0x17, 0x70, 0x2f, 0xab, 0x73, 0x2f, 0xc7, 0x65, 0x2f, 0xb5, 0x3f, 0xb7, 0xb0, 0x0e, 0x10, 0x7f, - 0x69, 0x0e, 0xe0, 0x7f, 0x05, 0x31, 0xff, 0x23, 0x57, 0xdd, 0x4f, 0x00, 0x57, 0x7f, 0x61, 0x53, 0xae, 0x76, 0xaf, 0x65, 0x0c, 0x79, 0x72, 0x14, - 0x5c, 0x05, 0xf8, 0x1d, 0x58, 0x17, 0xf4, 0xd3, 0x00, 0x74, 0xce, 0x98, 0xd3, 0xa4, 0xc2, 0x4c, 0xd1, 0x3a, 0x74, 0xb9, 0x06, 0x98, 0x17, 0x0e, - 0x33, 0x7f, 0x98, 0x17, 0x1f, 0x28, 0x09, 0x3b, 0xaf, 0x68, 0x15, 0x3f, 0x28, 0x1f, 0x41, 0x28, 0x2d, 0x38, 0x29, 0x10, 0x06, 0x94, 0xff, 0x10, - 0x05, 0x30, 0xff, 0x22, 0x09, 0x09, 0xd0, 0x01, 0x5f, 0x0c, 0x55, 0x28, 0x17, 0x0b, 0x88, 0x00, 0x08, 0x17, 0xc1, 0x30, 0xe3, 0x48, 0x21, 0xba, - 0x30, 0xbf, 0x35, 0x30, 0xa6, 0x28, 0x33, 0x06, 0x78, 0x17, 0x68, 0x4f, 0xbb, 0x6c, 0x68, 0x1b, 0x1c, 0x6f, 0x00, 0x77, 0x04, 0x6f, 0xbb, 0x10, - 0x0e, 0xf0, 0x7f, 0x58, 0x17, 0xe5, 0x67, 0x03, 0x14, 0x5c, 0xaf, 0x65, 0x66, 0x65, 0x05, 0xf8, 0x15, 0x98, 0x17, 0x00, 0x30, 0xcc, 0xa4, 0xc2, - 0xc0, 0xd0, 0xb4, 0xc6, 0xeb, 0x05, 0xf0, 0x7f, 0x0e, 0xf3, 0x7f, 0x00, 0x18, 0x17, 0x27, 0x28, 0x17, 0x40, 0x28, 0x21, 0x38, 0x17, 0x19, 0x30, - 0x04, 0x43, 0x28, 0x35, 0x10, 0x1c, 0xb4, 0xff, 0x0a, 0x0a, 0xd0, 0x01, 0x15, 0x2f, 0x0c, 0x79, 0x28, 0x17, 0x0c, 0x88, 0x17, 0xd4, 0x28, 0x17, - 0x40, 0xbf, 0x28, 0x1b, 0xfb, 0x30, 0xd0, 0x30, 0xbb, 0x30, 0x68, 0xc6, 0x48, 0x25, 0x06, 0x1c, 0xaf, 0x65, 0x6f, 0x9f, 0x20, 0x00, 0x42, 0xbc, - 0x2f, 0xc7, 0x73, 0x2f, 0xaf, 0x70, 0x11, 0x04, 0x7f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x23, 0x57, 0x00, 0x7c, 0x5f, 0x97, 0x5f, 0xf4, 0x5d, 0xaf, - 0x65, 0x08, 0x79, 0x72, 0x14, 0x5c, 0x06, 0x78, 0x17, 0x3c, 0xd5, 0x30, 0x00, 0xd1, 0x14, 0xbc, 0xa4, 0xc2, 0x4c, 0xd1, 0x74, 0x75, 0xb9, 0x06, - 0xb8, 0x17, 0x0e, 0x13, 0x7f, 0xb8, 0x17, 0x38, 0x28, 0x1f, 0x35, 0x28, 0x13, 0x1e, 0x2d, 0x00, 0x11, 0x28, 0x1b, 0x38, 0x17, 0x30, 0x0d, 0x10, - 0x1c, 0xd4, 0xff, 0x0b, 0x51, 0x0b, 0x70, 0x01, 0x08, 0x40, 0x0a, 0x50, 0x0c, 0x67, 0x28, 0x17, 0x51, 0x0d, 0x88, 0x17, 0xc8, 0x28, 0x17, 0xde, - 0x30, 0xb9, 0x28, 0x21, 0x05, 0xed, 0x30, 0xa6, 0x30, 0xe9, 0x28, 0x2d, 0xc9, 0x06, 0x08, 0x17, 0x44, 0x54, 0x2f, 0xa5, 0x6f, 0x00, 0x6d, 0x48, - 0x11, 0x20, 0x00, 0x51, 0x4c, 0x4f, 0xa5, 0x6c, 0x2f, 0xcf, 0x6e, 0x00, 0x64, 0x10, 0x14, 0x80, 0x7f, 0x00, 0x23, 0x57, 0x58, 0x62, 0x6c, 0x9a, - 0xaf, 0x65, 0x0c, 0x1b, 0x6d, 0x70, 0x51, 0x06, 0x18, 0x15, 0x78, 0x17, 0xa0, 0xd1, 0x00, 0x38, 0xba, 0xa4, 0xc2, 0x64, 0xb8, 0x9c, 0xb7, 0x38, - 0xdc, 0xb4, 0x06, 0x98, 0x17, 0x0e, 0x33, 0x7f, 0x98, 0x17, 0x22, 0x04, 0x3e, 0x22, 0x04, 0x3c, 0x48, 0x0f, 0x2d, 0x00, 0x1b, 0x20, 0x0b, 0x43, - 0x2c, 0x04, 0x3b, 0x48, 0x33, 0x34, 0x04, 0xc8, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0c, 0x0c, 0xa2, 0x70, 0x01, 0x0b, 0x40, 0x0a, 0x35, 0x0c, 0x79, - 0x28, 0x17, 0x0e, 0xa0, 0x00, 0x28, 0x17, 0xdf, 0x28, 0x11, 0xeb, 0x30, 0xa2, 0x30, 0xa4, 0xd5, 0x05, 0x48, 0x1d, 0x00, 0x98, 0x17, 0x4d, 0x2f, - 0xc7, 0x64, 0x28, 0x11, 0x6c, 0x2f, 0xc5, 0x1e, 0x20, 0x00, 0x49, 0x2f, 0xbd, 0x04, 0x38, 0x23, 0x10, 0x0e, 0xf0, 0x7f, 0x78, 0x17, 0x73, 0x01, - 0x7c, 0xb7, 0x5f, 0x14, 0x5c, 0x7e, 0x82, 0x05, 0xf8, 0x1d, 0x80, 0xb8, 0x17, 0xf8, 0xbb, 0xe4, 0xb4, 0x44, 0xc5, 0x7c, 0x71, 0xc7, 0x05, 0xb8, - 0x1d, 0x0e, 0xf3, 0x7f, 0x00, 0x58, 0x17, 0x1c, 0x04, 0x38, 0x28, 0x0f, 0x46, 0x3b, 0x28, 0x2d, 0x10, 0x04, 0x39, 0x04, 0xc8, 0x1f, 0x10, 0x16, - 0xf4, 0xff, 0x0d, 0x51, 0x0d, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x50, 0x0c, 0x55, 0x28, 0x17, 0x00, 0x0f, 0x2b, 0xc8, 0x30, 0xea, 0x30, 0xcb, 0x30, - 0x14, 0xc6, 0x30, 0xa3, 0x28, 0x1b, 0xd1, 0x28, 0x0f, 0xe1, 0x30, 0x5c, 0xc3, 0x48, 0x27, 0xdd, 0x28, 0x17, 0x38, 0x31, 0x04, 0xfd, 0x41, 0x54, - 0x00, 0x55, 0x72, 0x4f, 0xaf, 0x69, 0x2f, 0xb1, 0x79, 0x2f, 0xb3, 0x50, 0x2f, 0xbf, 0x56, 0x6c, 0x2f, 0xb3, 0x65, 0x2f, 0xc1, 0x74, 0x2f, 0xbd, - 0x30, 0x11, 0x6f, 0xc0, 0x6f, 0xd1, 0x10, 0x14, 0x30, 0x7f, 0x79, 0x72, 0xcc, 0x91, 0x3c, 0x5c, 0x00, 0x82, 0x84, 0x15, 0x5e, 0x14, 0x5c, 0x85, - 0x68, 0x00, 0x58, 0x62, 0xe2, 0x6c, 0xe0, 0x56, 0x79, 0x72, 0x80, 0x05, 0x98, 0x1b, 0xb8, 0xd2, 0xac, 0xb9, 0xc8, 0xb2, 0xf0, 0x00, 0xd2, 0x30, - 0xd3, 0x38, 0xba, 0xa0, 0xd1, 0xec, 0x71, 0xd3, 0x38, 0x25, 0x05, 0xb8, 0x97, 0x0e, 0xf3, 0x7f, 0x22, 0x04, 0x40, 0x28, 0x03, 0x51, 0x3d, 0x28, - 0x07, 0x42, 0x28, 0x0b, 0x2d, 0x00, 0x1f, 0x28, 0x19, 0x56, 0x3b, 0x28, 0x1f, 0x35, 0x28, 0x2b, 0x42, 0x28, 0x29, 0x30, 0x11, 0x3e, 0xe4, 0x28, - 0x1b, 0x38, 0x3b, 0x10, 0x1c, 0x34, 0xff, 0x0e, 0x0e, 0xd0, 0x01, 0x4a, 0x0c, 0x62, 0x5e, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x03, 0x03, 0x20, - 0x01, 0x01, 0xa2, 0x20, 0x06, 0x05, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x41, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, - 0x04, 0x28, 0x02, 0x03, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x03, 0x03, 0x04, 0x52, 0x04, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x05, 0x05, 0x70, 0x01, 0x02, - 0x94, 0x40, 0x0a, 0x06, 0x06, 0x70, 0x01, 0x03, 0x40, 0x0a, 0x07, 0x07, 0xa6, 0x70, 0x01, 0x04, 0x40, 0x0a, 0x08, 0x08, 0x70, 0x01, 0x50, 0x0a, - 0x09, 0x49, 0x09, 0xd0, 0x01, 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0x70, 0x01, 0x4f, 0x08, 0x40, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x50, 0x0a, 0xf8, - 0xff, 0xf0, 0xf7, 0x80, 0x3f, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x2c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xf4, 0x09, 0xa0, 0xd4, 0x00, 0x00, 0x00, - 0x01, 0x2c, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x01, 0x30, 0xeb, 0x30, 0xb7, 0x30, 0xa2, 0x30, 0x06, 0x38, 0x21, 0x00, 0x53, 0x00, 0x74, 0x00, 0x2e, - 0x00, 0x20, 0x00, 0x00, 0x4c, 0x00, 0x75, 0x00, 0x63, 0x00, 0x69, 0x00, 0x54, 0x61, 0x06, 0x00, 0x7f, 0x61, 0x20, 0x75, 0x6e, 0x20, 0x85, 0x65, - 0x00, 0x5b, 0x2d, 0x80, 0x85, 0x65, 0x0d, 0xc0, 0xff, 0x30, 0xfd, 0x61, 0x06, 0x61, 0x83, 0x00, 0x10, 0x7f, 0x40, 0xed, 0x05, 0xc2, 0x03, 0x23, - 0x57, 0x62, 0x53, 0x7f, 0x89, 0x20, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0x38, 0xc1, 0x78, 0xc7, 0xb8, 0x01, 0xd2, 0xe8, 0xb8, 0xdc, 0xc2, 0x44, 0xc5, - 0x06, 0x53, 0x7f, 0xd0, 0x72, 0xff, 0x07, 0x31, 0xff, 0xfa, 0x06, 0x04, 0x03, 0x21, 0x04, 0x35, 0x04, 0x00, 0x3d, 0x04, 0x42, 0x04, 0x2d, 0x00, - 0x1b, 0x04, 0x00, 0x4e, 0x04, 0x41, 0x04, 0x38, 0x04, 0x4f, 0x04, 0xcf, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, - 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x2d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x56, 0x09, 0x78, 0xd4, 0x00, 0x00, 0x00, - 0x01, 0x2d, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x30, 0x30, 0xd3, 0x20, 0x05, 0x50, 0x09, 0xfb, 0x30, 0xb0, 0x30, 0x00, 0xec, 0x30, 0xca, 0x30, 0xc7, - 0x30, 0xa3, 0x30, 0x60, 0xfc, 0x20, 0x1b, 0x04, 0xf8, 0x35, 0x53, 0x00, 0x74, 0x00, 0x2e, 0x00, 0x00, 0x20, 0x00, 0x56, 0x00, 0x69, 0x00, 0x6e, - 0x0a, 0x00, 0x63, 0x00, 0x65, 0x20, 0x05, 0x74, 0x20, 0x0f, 0x61, 0xa2, 0x20, 0x0d, 0x64, 0x20, 0x17, 0x74, 0x00, 0x68, 0x20, 0x13, 0x20, 0x0b, - 0x00, 0x47, 0x00, 0x72, 0x40, 0x1b, 0x61, 0x20, 0x15, 0x30, 0x29, 0x14, 0x65, 0x00, 0x73, 0x03, 0x60, 0x7f, 0x61, 0x40, 0x79, 0x74, 0x00, 0x5a, - 0x2d, 0xe0, 0x83, 0x2d, 0x20, 0x8b, 0x30, 0x15, 0x6c, 0x40, 0x6b, 0x2d, 0xdd, 0x04, 0x60, 0x81, 0x00, 0x70, 0xff, 0x75, 0x60, 0xff, 0x30, 0xed, - 0x00, 0x50, 0xff, 0x6e, 0x03, 0xe0, 0xff, 0xfe, 0x00, 0x11, 0x83, 0x00, 0x51, 0x77, 0x03, 0xf1, 0xff, 0x31, 0xe9, 0x51, 0xff, 0x71, 0xfd, 0x31, - 0xef, 0x79, 0xaf, 0x22, 0x13, 0x6c, 0x22, 0x05, 0x73, 0x61, 0xfb, 0x32, 0x0f, 0x71, 0xfb, 0x30, 0x15, 0x80, 0x03, 0x7a, 0xcd, 0x23, 0x57, 0x87, - 0x65, 0xee, 0x68, 0x79, 0x00, 0x72, 0x8c, 0x54, 0x3c, 0x68, 0x97, 0x67, 0xb3, 0x0c, 0x7e, 0x01, 0x4e, 0xaf, 0x03, 0xf0, 0xe2, 0x00, 0xcb, 0x78, - 0x38, 0xc1, 0x00, 0x78, 0xc7, 0xb8, 0xd2, 0x48, 0xbe, 0x3c, 0xc1, 0x00, 0xb8, 0xd2, 0x20, 0x00, 0xf8, 0xad, 0x08, 0xb8, 0x0e, 0x98, 0xb0, 0x18, - 0xb5, 0x05, 0x9b, 0xab, 0x00, 0xd1, 0xff, 0x31, 0x99, 0x64, 0xfc, 0x04, 0xe3, 0x7f, 0x73, 0xfd, 0xb1, 0xfd, 0x33, 0xf1, 0x05, 0x11, 0xfb, 0x3d, - 0x1a, 0x21, 0x04, 0x00, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x2d, 0x00, 0x14, 0x12, 0x04, 0x38, 0x20, 0x09, 0x41, 0x60, 0x0f, 0x20, 0x00, 0x44, - 0x38, 0x20, 0x03, 0x13, 0x04, 0x40, 0x40, 0x1f, 0x30, 0x04, 0x4c, 0x34, 0x40, 0x1d, 0x4b, 0x04, 0x0c, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, - 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, - 0x30, 0x01, 0x2e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x25, 0x04, 0xc6, 0xd8, 0x00, 0x00, 0x00, - 0x02, 0x2e, 0xd1, 0x30, 0xe9, 0x30, 0xde, 0x04, 0x30, 0xea, 0x30, 0xdc, 0x30, 0x06, 0x58, 0x1f, 0x50, 0x00, 0x14, 0x61, 0x00, 0x72, 0x20, 0x03, - 0x6d, 0x40, 0x07, 0x69, 0x00, 0x10, 0x62, 0x00, 0x6f, 0x10, 0x15, 0xc0, 0x7f, 0x15, 0x5e, 0xc9, 0x62, 0x00, 0x6c, 0x9a, 0xcc, 0x91, 0x5a, 0x53, - 0x02, 0x5e, 0x80, 0x06, 0x3b, 0x21, 0x0c, 0xd3, 0x7c, 0xb7, 0xc8, 0xb9, 0xac, 0x10, 0xb9, 0xf4, 0xbc, 0x10, 0x06, 0x53, 0x7f, 0x1f, 0x04, 0x30, - 0x04, 0x50, 0x40, 0x20, 0x03, 0x3c, 0x40, 0x07, 0x38, 0x04, 0x31, 0x04, 0x22, 0x3e, 0x04, 0x10, 0x1d, 0xb4, 0xff, 0x01, 0x07, 0x07, 0x20, 0x01, - 0x01, 0xa4, 0x20, 0x06, 0x08, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x2e, 0x00, 0xd6, 0x30, 0xed, 0x30, 0xb3, 0x30, 0xdd, 0x30, 0x14, 0xf3, - 0x30, 0xc9, 0x06, 0x48, 0x19, 0x42, 0x28, 0x15, 0x6f, 0x00, 0x51, 0x6b, 0x28, 0x0d, 0x70, 0x28, 0x11, 0x6e, 0x00, 0x64, 0x05, 0xe8, 0x17, 0x80, - 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x5e, 0x57, 0x7f, 0xd1, 0x79, 0xec, 0x04, 0x84, 0x1a, 0x59, 0x3a, 0x53, 0x06, 0x48, 0x17, 0xbe, 0x5c, 0x01, 0xb8, - 0x54, 0xcf, 0xf0, 0xd3, 0xc4, 0xb3, 0x06, 0x5f, 0xb7, 0xa2, 0x0e, 0xf3, 0x7f, 0x11, 0x28, 0x15, 0x3e, 0x04, 0x3a, 0x28, 0x0d, 0x3f, 0x8d, 0x28, - 0x11, 0x3d, 0x04, 0x34, 0x05, 0xe8, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x02, 0x38, 0x0c, 0x20, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x9a, - 0x20, 0x03, 0xea, 0x28, 0x17, 0x04, 0x2e, 0xb3, 0x30, 0xe1, 0x02, 0x30, 0xa6, 0x30, 0xa3, 0x30, 0xcd, 0x06, 0x48, 0x15, 0x00, 0x28, 0x00, 0x43, - 0x2f, 0x9f, 0x6d, 0x2f, 0xad, 0x65, 0x00, 0x77, 0xa8, 0x2f, 0xad, 0x6a, 0x28, 0x19, 0x65, 0x10, 0x15, 0xc0, 0x7f, 0xd1, 0x79, 0xd8, 0x04, 0x9e, - 0xe6, 0x97, 0xb7, 0x8b, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x54, 0xcf, 0x54, 0xba, 0xa0, 0xbc, 0x74, 0xc7, 0x2a, 0x08, 0xb1, 0x10, 0x06, 0x53, - 0x7f, 0x1a, 0x28, 0x15, 0x3c, 0x20, 0x01, 0x35, 0x03, 0x04, 0x32, 0x04, 0x38, 0x04, 0x39, 0x28, 0x19, 0x10, 0x1d, 0xd4, 0xff, 0x4a, 0x03, 0x38, - 0x0c, 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x0a, 0x03, 0x2f, 0x04, 0xd5, 0x28, 0x17, 0x05, 0x28, 0x17, 0xed, 0x0e, 0x30, 0xcb, 0x30, - 0xfc, 0x06, 0x68, 0x15, 0x58, 0x17, 0x3f, 0xb1, 0x6e, 0xe0, 0x28, 0x15, 0x05, 0xd8, 0x11, 0x10, 0x0f, 0x50, 0x7f, 0xd1, 0x79, 0x57, 0x7f, 0x3c, - 0x61, 0x5c, 0x06, 0x78, 0x15, 0x38, 0x17, 0x5c, 0xb8, 0xc8, 0xb2, 0x06, 0x73, 0x7d, 0xd6, 0x0f, 0x13, 0x7f, 0x38, 0x17, 0x40, 0x28, 0x1b, 0x3d, - 0x28, 0x15, 0x10, 0x1e, 0x34, 0xff, 0x04, 0x94, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x00, 0x2f, 0x04, 0xf4, 0xd7, - 0x00, 0x00, 0x06, 0x2e, 0x41, 0xde, 0x28, 0x17, 0xa6, 0x30, 0xa3, 0x30, 0xcd, 0x06, 0x68, 0x19, 0x1c, 0x4d, 0x00, 0x61, 0x48, 0x17, 0x06, 0x5f, - 0xad, 0x10, 0x0f, 0x10, 0x7f, 0x6c, 0x9a, 0x02, 0x57, 0x7f, 0xe6, 0x97, 0xb7, 0x8b, 0x06, 0x78, 0x19, 0xc8, 0x00, 0xb9, 0x5c, 0xb8, 0xa0, 0xbc, - 0x74, 0xc7, 0x08, 0x45, 0xb1, 0x10, 0x06, 0x53, 0x7f, 0x1c, 0x04, 0x30, 0x48, 0x17, 0x32, 0x28, 0x17, 0x69, 0x39, 0x28, 0x1d, 0x10, 0x1d, 0xf4, - 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, 0x05, 0x05, 0xe9, 0x03, 0x91, 0xd9, 0x00, 0x00, 0x00, 0x07, 0x2e, 0xcb, - 0x30, 0xc3, 0x30, 0x05, 0xb1, 0x30, 0xea, 0x30, 0xfc, 0x06, 0x68, 0x17, 0x4e, 0x2f, 0xa7, 0x16, 0x63, 0x00, 0x6b, 0x2f, 0xab, 0x72, 0x06, 0x4f, - 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x3c, 0x06, 0x5c, 0x4b, 0x51, 0xcc, 0x91, 0x06, 0x78, 0x15, 0x28, 0x17, 0xb2, 0x0d, 0x00, 0xcf, 0xac, 0xb9, 0x06, - 0x70, 0x7d, 0x0f, 0x13, 0x7f, 0x1d, 0x28, 0x0f, 0x56, 0x3a, 0x20, 0x01, 0x35, 0x28, 0x1d, 0x38, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x06, - 0x94, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x06, 0x00, 0x3b, 0x04, 0x7b, 0xd7, 0x00, 0x00, 0x08, 0x2e, 0x1a, 0xd1, 0x30, - 0xe9, 0x06, 0x68, 0x11, 0x5f, 0xff, 0x50, 0x4f, 0xaf, 0x61, 0x84, 0x10, 0x16, 0x80, 0x7f, 0x15, 0x5e, 0xc9, 0x62, 0x06, 0x98, 0x15, 0x00, 0x00, - 0x08, 0x0c, 0xd3, 0x7c, 0xb7, 0x10, 0x06, 0xb3, 0x7f, 0x1f, 0x04, 0x30, 0xb4, 0x28, 0x11, 0x30, 0x06, 0x28, 0x11, 0x10, 0x17, 0x54, 0xff, 0x07, - 0x38, 0x0c, 0x06, 0x07, 0xa0, 0x20, 0x06, 0x07, 0x20, 0x05, 0x07, 0x07, 0xf8, 0x03, 0xc3, 0x02, 0xd8, 0x00, 0x00, 0x09, 0x2e, 0xb5, 0x28, 0x17, - 0xde, 0x0a, 0x30, 0xc3, 0x30, 0xab, 0x06, 0x68, 0x1d, 0x53, 0x68, 0x17, 0x6d, 0xb8, 0x28, 0x1f, 0x63, 0x2f, 0xb9, 0x05, 0xf8, 0x21, 0x10, 0x0e, - 0xf0, 0x7f, 0x28, 0x84, 0xc9, 0x04, 0x62, 0x6c, 0x9a, 0x61, 0x53, 0x06, 0x78, 0x1b, 0xac, 0xc0, 0x03, 0x7c, 0xb7, 0xc8, 0xb9, 0x74, 0xce, 0x06, - 0x7b, 0x9b, 0x0e, 0xf3, 0x7f, 0x57, 0x21, 0x68, 0x17, 0x3c, 0x28, 0x1f, 0x3a, 0x20, 0x01, 0x05, 0xf8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x08, - 0x08, 0x70, 0x01, 0x09, 0x40, 0x0a, 0x1f, 0x04, 0x8f, 0x80, 0x28, 0x17, 0x0a, 0x2e, 0xb7, 0x30, 0xd1, 0x30, 0xea, 0x02, 0x30, 0xa6, 0x30, 0xa3, - 0x30, 0xcb, 0x06, 0x48, 0x19, 0x53, 0x0a, 0x00, 0x69, 0x00, 0x70, 0x2f, 0xb3, 0x6c, 0x20, 0x07, 0x77, 0xb0, 0x20, 0x0b, 0x6e, 0x20, 0x0f, 0x10, - 0x15, 0xb0, 0x7f, 0x7f, 0x89, 0x15, 0x5e, 0x02, 0xcc, 0x91, 0xf4, 0x7e, 0x3c, 0x5c, 0x06, 0x58, 0x19, 0xdc, 0x00, 0xc2, 0x14, 0xd3, 0xac, 0xb9, - 0x44, 0xbe, 0xc8, 0x60, 0xb2, 0x06, 0x7b, 0x97, 0x0e, 0xd3, 0x7f, 0x21, 0x04, 0x38, 0x04, 0x3f, 0x8b, 0x28, 0x1b, 0x3b, 0x04, 0x43, 0x20, 0x09, - 0x3d, 0x20, 0x0d, 0x10, 0x1d, 0xd4, 0xff, 0x28, 0x09, 0x09, 0x70, 0x01, 0x0a, 0x40, 0x0a, 0xb2, 0x03, 0x5a, 0x02, 0xd7, 0x00, 0x00, 0x0b, 0x2e, - 0xef, 0x28, 0x0f, 0xab, 0xde, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x57, 0x2f, 0xaf, 0x38, 0x0b, 0x06, 0x1f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xe6, 0x06, - 0x74, 0x3c, 0x5c, 0x61, 0x53, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x14, 0x05, 0xbc, 0xc8, 0xb2, 0x74, 0xce, 0x10, 0x06, 0x93, 0x7f, 0x12, 0x28, 0x13, - 0xb2, 0x38, 0x0d, 0x3a, 0x28, 0x1b, 0x10, 0x1e, 0x34, 0xff, 0x0a, 0x0a, 0x70, 0x01, 0x02, 0x84, 0x40, 0x0a, 0x0d, 0x04, 0xba, 0xd8, 0x00, 0x3f, - 0xff, 0x01, 0x07, 0x54, 0x07, 0x20, 0x01, 0x01, 0x20, 0x06, 0x08, 0x20, 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, - 0x02, 0x02, 0x25, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0x20, 0x06, - 0x04, 0x89, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x44, 0x05, 0x20, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, - 0xa2, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, 0x5a, 0x07, 0x20, 0x06, 0x07, 0x20, 0x05, 0x20, 0x65, 0x08, 0x70, 0x01, - 0x09, 0xf0, 0x50, 0x05, 0xe8, 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, 0x30, 0x01, 0x2f, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, - 0xfd, 0x92, 0x07, 0x42, 0xd4, 0x00, 0x00, 0x00, 0x02, 0x2f, 0xdd, 0x30, 0xfc, 0x30, 0xc8, 0x02, 0x30, 0xfb, 0x30, 0xaa, 0x30, 0xd6, 0x20, 0x05, - 0xb9, 0x01, 0x30, 0xda, 0x30, 0xa4, 0x30, 0xf3, 0x30, 0x05, 0x98, 0x2b, 0x00, 0x50, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x50, 0x2d, 0x20, - 0x07, 0x66, 0x20, 0x05, 0x53, 0x00, 0x70, 0x00, 0x04, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x05, 0xe0, 0x7f, 0x20, 0x00, 0x01, 0x64, 0x00, 0x27, 0x00, - 0x45, 0x00, 0x73, 0x40, 0x7f, 0x5a, 0x67, 0x20, 0x7f, 0x65, 0x0d, 0xe0, 0xff, 0x31, 0x7f, 0x20, 0x06, 0x21, 0x7f, 0x75, 0xdb, 0x21, 0x69, 0x32, - 0x01, 0x6f, 0x21, 0x83, 0x71, 0x7f, 0xf1, 0x22, 0x03, 0x05, 0x5a, 0xaf, 0x00, 0x7f, 0x89, 0xed, 0x73, 0x59, 0x72, 0x2f, 0x6e, 0x20, 0x02, 0x5e, - 0x06, 0x5b, 0x1f, 0xec, 0xd3, 0xb8, 0xd2, 0x24, 0x00, 0xc6, 0x0c, 0xbe, 0xa4, 0xc2, 0x98, 0xd3, 0x78, 0x7b, 0xc7, 0x06, 0x1b, 0xa3, 0x07, 0x11, - 0xff, 0x53, 0xff, 0x31, 0xfd, 0x64, 0x23, 0x73, 0x92, 0x03, 0x10, 0x6e, 0x00, 0x68, 0x05, 0x22, 0x05, 0x1f, 0x04, 0x3e, 0x04, 0x00, 0x40, 0x04, - 0x42, 0x04, 0x2d, 0x00, 0x3e, 0x04, 0x40, 0x44, 0x20, 0x05, 0x21, 0x04, 0x3f, 0x04, 0x35, 0x04, 0x0c, 0x39, 0x04, 0x3d, 0x04, 0x0d, 0xd4, 0xff, - 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x06, 0x54, 0x06, 0x20, 0x01, 0x01, 0x20, 0x06, 0x07, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, 0x17, 0x03, 0x2f, 0xa2, - 0x30, 0xea, 0x30, 0xde, 0xd1, 0x05, 0xa8, 0x07, 0xff, 0xff, 0x41, 0x28, 0x15, 0x69, 0x00, 0x6d, 0x05, 0x86, 0x07, 0x81, 0x10, 0x0f, 0xf0, 0x7f, - 0x3f, 0x96, 0xcc, 0x91, 0x6c, 0x9a, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x44, 0xc5, 0xac, 0xb9, 0xc8, 0xb9, 0xa0, 0x10, 0x06, 0x93, 0x7f, 0x10, - 0x28, 0x15, 0x38, 0x04, 0x3c, 0x04, 0x30, 0xd2, 0x05, 0x68, 0x07, 0x10, 0x17, 0xf4, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x8f, 0x07, 0x6c, 0x28, 0x17, 0x04, 0x00, 0x2f, 0xab, 0x30, 0xed, 0x30, 0xcb, 0x30, 0xde, 0x55, 0x5d, 0x06, 0x78, 0x19, 0x43, - 0x2f, 0x9d, 0x72, 0x2f, 0xb3, 0x6e, 0x2f, 0x23, 0x80, 0x10, 0x16, 0x30, 0x7f, 0x61, 0x53, 0x57, 0x7f, 0x3c, 0x5c, 0xe1, 0x40, 0x90, 0x06, 0x7b, - 0x19, 0x74, 0xce, 0x5c, 0xb8, 0xc8, 0xb2, 0x0a, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x53, 0x7f, 0x1a, 0x28, 0x11, 0x40, 0x0d, 0x04, 0x3e, 0x04, - 0x3d, 0x28, 0x1d, 0x10, 0x1e, 0x34, 0xff, 0x03, 0x38, 0x0c, 0x28, 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x7a, 0x20, 0x07, 0x54, - 0x28, 0x17, 0x05, 0x2f, 0xde, 0x30, 0xb8, 0x35, 0x30, 0xe3, 0x28, 0x1b, 0x06, 0x78, 0x19, 0x4d, 0x2f, 0xa9, 0x79, 0x68, 0x1b, 0x81, 0x10, 0x16, - 0x30, 0x7f, 0x6c, 0x9a, 0x9a, 0x4e, 0x57, 0x7f, 0x06, 0x98, 0x17, 0x03, 0xc8, 0xb9, 0x7c, 0xc5, 0x5c, 0xb8, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, - 0x46, 0x1c, 0x28, 0x17, 0x39, 0x04, 0x4f, 0x48, 0x1b, 0x10, 0x1e, 0x34, 0xff, 0x04, 0x94, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, - 0x04, 0x04, 0x10, 0x43, 0x07, 0xa0, 0x28, 0x17, 0x06, 0x2f, 0xca, 0x30, 0x11, 0xea, 0x30, 0xd0, 0x06, 0x88, 0x15, 0x00, 0x00, 0x4e, 0x4f, 0xaf, - 0x18, 0x69, 0x00, 0x76, 0x2f, 0xb7, 0x10, 0x16, 0x30, 0x7f, 0xb3, 0x7e, 0xcc, 0x10, 0x91, 0xe6, 0x74, 0x06, 0x98, 0x17, 0x98, 0xb0, 0xac, 0xb9, - 0x34, 0x14, 0xbc, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x28, 0x17, 0x40, 0x04, 0x1a, 0x38, 0x04, 0x32, 0x28, 0x1f, 0x10, 0x1e, 0x34, 0xff, - 0x05, 0x38, 0x0c, 0x04, 0x50, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, 0x05, 0x05, 0x53, 0x07, 0x40, 0x7e, 0x28, 0x17, 0x07, 0x2f, 0xbb, 0x30, 0xf3, - 0x30, 0x05, 0xc8, 0x30, 0xfb, 0x30, 0xa2, 0x20, 0x07, 0xc9, 0x28, 0x23, 0x14, 0xe5, 0x30, 0xfc, 0x05, 0xc8, 0x25, 0x53, 0x2f, 0xaf, 0x69, 0x00, - 0x01, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x41, 0x20, 0x07, 0x44, 0x64, 0x2f, 0xb9, 0x65, 0x00, 0x77, 0x10, 0x15, 0x80, 0x7f, 0x23, 0x57, 0x02, - 0x89, 0x5b, 0xb7, 0x5f, 0x81, 0x9c, 0x06, 0x78, 0x19, 0x38, 0x00, 0xc1, 0x78, 0xc7, 0xb8, 0xd2, 0x64, 0xc5, 0xdc, 0x18, 0xb4, 0xe8, 0xb8, 0x06, - 0x38, 0x1d, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0x00, 0x04, 0x39, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x20, 0x2b, 0x00, 0x2d, 0x20, 0x07, 0x34, 0x28, - 0x25, 0x4e, 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x06, 0x07, 0x07, 0x20, 0x01, 0x06, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x05, 0x06, 0x06, - 0x86, 0x07, 0x8b, 0x28, 0x17, 0x08, 0x88, 0x17, 0x07, 0xc7, 0x30, 0xd3, 0x30, 0xc3, 0x28, 0x19, 0x05, 0xb8, 0x13, 0xf8, 0x17, 0x54, 0x44, 0x2f, - 0xbb, 0x76, 0x2f, 0xbb, 0x64, 0x10, 0x15, 0xa0, 0x7f, 0x23, 0x57, 0x0c, 0x34, 0x62, 0xf4, 0x7e, 0x06, 0x78, 0x15, 0x78, 0x17, 0x70, 0xb3, 0x03, - 0x74, 0xc7, 0x44, 0xbe, 0xdc, 0xb4, 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x80, 0xb8, 0x17, 0x14, 0x04, 0x4d, 0x04, 0x32, 0x04, 0x38, 0xc5, 0x28, - 0x1b, 0x10, 0x1d, 0x94, 0xff, 0x07, 0x08, 0x08, 0x20, 0x01, 0x07, 0x20, 0x06, 0x41, 0x0a, 0x20, 0x05, 0x07, 0x07, 0xae, 0x07, 0x9d, 0x28, 0x17, - 0x41, 0x09, 0x88, 0x17, 0xb8, 0x30, 0xe7, 0x30, 0xfc, 0x20, 0x05, 0xab, 0x06, 0xb8, 0x17, 0x47, 0x2f, 0xa9, 0x6f, 0x2f, 0xaf, 0x67, 0x2f, 0xb1, - 0x10, 0x15, 0x70, 0x7f, 0x02, 0x23, 0x57, 0x54, 0x4e, 0xbb, 0x6c, 0x07, 0x08, 0x17, 0xc8, 0x38, 0xc0, 0xc9, 0x06, 0x18, 0x13, 0x0f, 0x33, 0x7f, - 0xd8, 0x17, 0x36, 0x04, 0x3e, 0x2c, 0x04, 0x40, 0x28, 0x17, 0x36, 0x05, 0x88, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x09, 0x58, 0x09, 0x20, 0x01, - 0x08, 0x40, 0x06, 0x38, 0x22, 0x8f, 0x07, 0x5a, 0xa8, 0x28, 0x17, 0x0a, 0x88, 0x17, 0xd1, 0x28, 0x1d, 0xea, 0x30, 0xc3, 0x35, 0x30, 0xaf, 0x05, - 0xe8, 0x19, 0xbf, 0xaf, 0x50, 0x2f, 0xbb, 0x74, 0x28, 0x17, 0x04, 0x69, 0x00, 0x63, 0x00, 0x6b, 0x10, 0x15, 0x60, 0x7f, 0x23, 0x57, 0x00, 0x15, - 0x5e, 0x79, 0x72, 0xcc, 0x91, 0x4b, 0x51, 0xc0, 0x06, 0x58, 0x1b, 0x58, 0x17, 0x28, 0xd3, 0xb8, 0xd2, 0xad, 0xb9, 0xe2, 0x06, 0x38, 0x19, 0x0e, - 0xf3, 0x7f, 0xb8, 0x17, 0x1f, 0x04, 0x30, 0x28, 0x1f, 0x40, 0x0c, 0x04, 0x38, 0x04, 0x3a, 0x06, 0x48, 0x17, 0x10, 0x16, 0x34, 0xff, 0x09, 0x0a, - 0x54, 0x0a, 0x20, 0x01, 0x09, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, 0x09, 0x11, 0x3d, 0x07, 0x23, 0x28, 0x17, 0x0b, 0x2f, 0xb5, 0x28, 0x17, 0x00, - 0xfb, 0x30, 0xd5, 0x30, 0xa7, 0x30, 0xeb, 0x30, 0x4a, 0xca, 0x28, 0x23, 0xc9, 0x30, 0x06, 0x1c, 0xaf, 0x6e, 0x2f, 0xab, 0x46, 0xb6, 0x2f, 0xab, - 0x72, 0x2f, 0xb7, 0x30, 0x0d, 0x64, 0x2f, 0xb5, 0x10, 0x15, 0x70, 0x7f, 0x23, 0x00, 0x57, 0x39, 0x8d, 0x14, 0x5c, 0x57, 0x53, 0x1a, 0x10, 0x59, - 0x02, 0x5e, 0x06, 0x38, 0x17, 0xb0, 0xc0, 0x98, 0xd3, 0x03, 0x74, 0xb9, 0x9c, 0xb0, 0xc4, 0xb3, 0x06, 0x38, 0x95, 0x0f, 0x13, 0x7f, 0x41, 0x21, - 0x28, 0x0b, 0x3d, 0x04, 0x2d, 0x00, 0x24, 0x28, 0x1f, 0x63, 0x40, 0x28, 0x1f, 0x30, 0x0d, 0x34, 0x04, 0x3e, 0x05, 0xc8, 0x17, 0x10, 0x16, 0xb4, - 0xff, 0x19, 0x0a, 0x0b, 0x0b, 0x20, 0x01, 0x28, 0x15, 0x0b, 0x08, 0x20, 0x05, 0x04, 0x0a, 0x0a, 0x50, 0x07, 0x4b, 0x28, 0x17, 0x0c, 0x2f, 0x00, - 0xc8, 0x30, 0xd0, 0x30, 0xb4, 0x30, 0xf6, 0x5c, 0x8a, 0x06, 0x54, 0x95, 0x00, 0x00, 0x54, 0x28, 0x03, 0x62, 0x2f, 0xb3, 0x67, 0xc0, 0x05, 0xa8, - 0x0b, 0x10, 0x0f, 0xb0, 0x7f, 0x1a, 0x59, 0xf4, 0x5d, 0xe5, 0x54, 0x40, 0x9b, 0x06, 0x82, 0xff, 0xa0, 0xd1, 0x14, 0xbc, 0xe0, 0xac, 0x0a, 0x20, - 0x00, 0x2c, 0xc1, 0x10, 0x06, 0x53, 0x7f, 0x22, 0x28, 0x03, 0x31, 0xb1, 0x28, 0x1b, 0x33, 0x05, 0xa8, 0x0b, 0x10, 0x17, 0xb4, 0xff, 0x0b, 0x0c, - 0x0c, 0x20, 0x01, 0x50, 0x0b, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0b, 0x0b, 0xf3, 0x07, 0x40, 0xd0, 0x28, 0x17, 0x0d, 0x2f, 0xd3, 0x30, 0xaf, 0x30, - 0x00, 0xc8, 0x30, 0xea, 0x30, 0xa2, 0x30, 0xde, 0x5d, 0x80, 0x06, 0x3d, 0x2f, 0x56, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0xa8, 0x2f, 0xa1, 0x72, - 0x20, 0x09, 0x61, 0x10, 0x16, 0x00, 0x7f, 0xf4, 0x7e, 0x1a, 0x01, 0x59, 0x29, 0x52, 0x9a, 0x4e, 0xe1, 0x90, 0x06, 0x5f, 0xaf, 0x00, 0x45, 0xbe, - 0xa0, 0xd1, 0xac, 0xb9, 0x44, 0xc5, 0x08, 0x20, 0x00, 0xfc, 0xc8, 0x0e, 0x73, 0x7f, 0x74, 0x00, 0xf3, 0x80, 0x06, 0x63, 0xfd, 0x00, 0x00, 0x12, - 0x04, 0x38, 0x04, 0x3a, 0x2b, 0x04, 0x42, 0x28, 0x1d, 0x40, 0x20, 0x09, 0x4f, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x0c, 0x0d, 0x0d, - 0x20, 0x01, 0x28, 0x15, 0x0d, 0x02, 0x20, 0x05, 0x04, 0x0c, 0x0c, 0x4c, 0x07, 0x5a, 0x28, 0x17, 0x0e, 0x2f, 0x04, 0xdd, 0x30, 0xa4, 0x30, 0xf3, - 0x28, 0x19, 0xd5, 0x30, 0x01, 0xa9, 0x30, 0xfc, 0x30, 0xc6, 0x30, 0xa3, 0x20, 0x0d, 0xa2, 0x05, 0xbf, 0xb8, 0x50, 0x2f, 0xaf, 0x69, 0x00, 0x6e, - 0x28, 0x19, 0x20, 0x2c, 0x00, 0x46, 0x48, 0x1d, 0x74, 0x40, 0x0f, 0x10, 0x15, 0x70, 0x7f, 0x8f, 0x79, 0x02, 0xf7, 0x5e, 0xac, 0x5c, 0x02, 0x5e, - 0x06, 0x5f, 0xad, 0x00, 0x00, 0x00, 0xec, 0xd3, 0x78, 0xc7, 0xb8, 0xd2, 0xec, 0x07, 0xd3, 0x74, 0xb9, 0xf4, 0xd2, 0x06, 0x3f, 0xb0, 0x07, 0x33, - 0x7f, 0x33, 0xfd, 0x51, 0x6f, 0x06, 0x63, 0xff, 0x1f, 0x28, 0x11, 0x39, 0x04, 0x3d, 0x28, 0x19, 0x15, 0x20, 0x00, 0x24, 0x48, 0x1d, 0x42, 0x28, - 0x29, 0x3d, 0x05, 0x88, 0x1f, 0x8a, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x05, 0x05, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x06, 0x83, 0x20, 0x05, 0x0d, 0x0d, - 0x3b, 0x07, 0x24, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x15, 0x01, 0x06, 0x06, 0x20, 0x01, 0x01, 0x20, 0x06, 0x07, 0x20, 0x05, 0x12, 0x01, 0x01, 0x02, - 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x44, 0x03, 0x20, 0x05, 0x03, 0x03, - 0x04, 0x30, 0x04, 0x03, 0x04, 0xa2, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x59, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, - 0x20, 0x6d, 0x07, 0x07, 0x20, 0x01, 0x99, 0x20, 0x4d, 0x07, 0x0c, 0x20, 0x05, 0x20, 0x55, 0x08, 0x08, 0x20, 0x01, 0x59, 0x07, 0x20, 0x06, 0x0a, - 0x20, 0x05, 0x20, 0x07, 0x09, 0x09, 0x20, 0x01, 0x62, 0x08, 0x40, 0x06, 0x30, 0x1a, 0x09, 0x0a, 0x0a, 0x20, 0x01, 0x09, 0xb3, 0x20, 0x06, 0x0b, - 0x20, 0x05, 0x20, 0x07, 0x0b, 0x0b, 0x20, 0x01, 0x20, 0x0d, 0x39, 0x0b, 0x08, 0x20, 0x05, 0x20, 0x15, 0x38, 0xd4, 0x0c, 0x0b, 0x20, 0x06, 0x7c, - 0x0d, 0x20, 0x05, 0x20, 0x07, 0xe8, 0xef, 0xf0, 0xe7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x30, 0x01, 0x30, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x43, 0x0f, 0x6b, 0xcd, 0x00, 0x00, 0x00, - 0x01, 0x30, 0xbf, 0x30, 0xfc, 0x30, 0xaf, 0x00, 0x30, 0xb9, 0x30, 0xfb, 0x30, 0xab, 0x30, 0xa4, 0x21, 0x30, 0xb3, 0x20, 0x09, 0xf8, 0x8a, 0xf6, - 0x5c, 0x05, 0x98, 0x2b, 0x00, 0x54, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6b, 0x00, 0x00, 0x73, 0x00, 0x20, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x50, 0x64, - 0x20, 0x07, 0x43, 0x20, 0x09, 0x69, 0x00, 0x63, 0x00, 0x55, 0x6f, 0x40, 0x15, 0x49, 0x20, 0x1b, 0x6c, 0x60, 0x1b, 0x73, 0x04, 0x08, 0xc4, 0x5b, - 0xce, 0x20, 0x5b, 0x65, 0x40, 0x7d, 0x50, 0x89, 0x71, 0x20, 0x8f, 0x30, 0x0f, 0x5b, 0x2d, 0x20, 0x15, 0x74, 0x20, 0x05, 0x30, 0x8b, 0xef, 0x80, - 0x15, 0x04, 0xb0, 0xff, 0x55, 0x2d, 0x21, 0x01, 0x75, 0x00, 0x21, 0x01, 0x69, 0x21, 0x15, 0x73, 0x20, 0xa3, 0x77, 0x6c, 0x21, 0x1d, 0x04, 0x19, - 0xc3, 0x31, 0x5d, 0x6f, 0x41, 0x03, 0x71, 0x01, 0x51, 0x8b, 0xfa, 0x30, 0x0f, 0xb1, 0x87, 0x04, 0x7a, 0x3d, 0x71, 0xdd, 0x91, 0x81, 0x63, 0x60, - 0x0d, 0x79, 0x80, 0x05, 0x40, 0x81, 0x79, 0x72, 0x4b, 0x51, 0xaf, 0x65, 0x8c, 0x00, 0x54, 0xef, 0x51, 0xd1, 0x79, 0xaf, 0x65, 0xa4, 0x30, 0x7f, - 0x9b, 0x05, 0xa2, 0xfb, 0x4b, 0x98, 0xd1, 0x6c, 0xd0, 0xa4, 0x41, 0xc2, 0x2b, 0x9c, 0xcf, 0x74, 0xc7, 0xe4, 0xce, 0x30, 0x09, 0x0d, 0x1c, 0xc8, - 0xc4, 0xb3, 0x06, 0x33, 0x7f, 0x32, 0x7f, 0x65, 0x23, 0x81, 0xbc, 0xd3, 0x7f, 0x65, 0x23, 0x89, 0x73, 0x7d, 0x30, 0x1d, 0x04, 0x12, 0x7f, 0x6c, - 0x00, 0x60, 0x68, 0x00, 0x41, 0xff, 0x05, 0x52, 0x81, 0x22, 0x04, 0x51, 0x04, 0x40, 0x00, 0x04, 0x3a, 0x04, 0x41, 0x04, 0x20, 0x00, 0x38, 0x82, - 0x20, 0x03, 0x1a, 0x04, 0x30, 0x04, 0x39, 0x20, 0x0f, 0x3e, 0xe7, 0x20, 0x11, 0x0d, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0xd0, 0x01, - 0x58, 0x17, 0x01, 0x10, 0x27, 0x80, 0x3f, 0xff, 0x11, 0x58, 0xb0, 0x01, 0x11, 0x34, 0x00, 0x00, 0x30, 0x01, 0x31, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xa8, 0x1b, 0x38, 0xc9, 0x00, 0x00, 0x00, 0x02, 0x31, 0xb3, 0x30, 0xed, 0x30, 0xf3, 0x00, - 0x30, 0xd3, 0x30, 0xa2, 0x30, 0x79, 0x72, 0x25, 0x10, 0x52, 0x3a, 0x53, 0x05, 0xf8, 0x25, 0x44, 0x00, 0x69, 0x00, 0x05, 0x73, 0x00, 0x74, 0x00, - 0x72, 0x20, 0x07, 0x63, 0x20, 0x07, 0x05, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x20, 0x05, 0x43, 0x20, 0x07, 0x01, 0x6c, 0x00, 0x75, 0x00, 0x6d, 0x00, - 0x62, 0x20, 0x21, 0x51, 0x61, 0x04, 0x88, 0xbc, 0x57, 0x20, 0x5b, 0x73, 0x00, 0x68, 0x20, 0x85, 0x14, 0x6e, 0x00, 0x67, 0x20, 0x87, 0x6f, 0x20, - 0x07, 0x20, 0x00, 0x45, 0x28, 0x00, 0x20, 0x97, 0x64, 0x00, 0x65, 0x00, 0x20, 0x97, 0x29, 0x0a, 0xe0, 0xff, 0xbb, 0x91, 0x7f, 0x65, 0x21, 0x85, - 0x30, 0xff, 0x30, 0xe9, 0x69, 0x05, 0x81, 0x81, 0xb1, 0xff, 0xe0, 0x70, 0x7d, 0x00, 0x31, 0x67, 0x04, 0x7a, 0xbd, 0xe5, 0x54, 0x26, 0x4f, 0xd4, - 0x06, 0x6b, 0x9a, 0x4e, 0x79, 0x72, 0x06, 0x12, 0xfb, 0x3b, 0x9a, 0xec, 0x00, 0xce, 0xfc, 0xb7, 0x44, 0xbe, 0x44, 0xc5, 0x20, 0x01, 0x00, 0xb9, - 0xd2, 0xc4, 0xbc, 0x6c, 0xad, 0x0d, 0xf3, 0x7f, 0xa0, 0x00, 0xd1, 0xff, 0xfa, 0x05, 0x03, 0xff, 0x1e, 0x04, 0x3a, 0x04, 0x40, 0x00, 0x04, 0x43, - 0x04, 0x33, 0x04, 0x20, 0x00, 0x1a, 0x08, 0x04, 0x3e, 0x04, 0x3b, 0x20, 0x0b, 0x3c, 0x04, 0x31, 0x06, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0d, 0xf1, - 0x7f, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x00, 0x09, 0x32, 0x08, 0x0d, 0x0d, 0x01, 0x01, 0x09, 0x01, 0x0d, 0x28, 0x09, 0x01, 0x01, 0x01, 0x01, 0x58, - 0x17, 0x00, 0x03, 0x31, 0xa2, 0x30, 0xe9, 0x30, 0xb9, 0x30, 0x0b, 0xab, 0x30, 0xde, 0x5d, 0x06, 0x5f, 0xb7, 0x41, 0x27, 0xfd, 0x37, 0x99, 0x60, - 0x6b, 0x04, 0xa7, 0xfb, 0x10, 0x10, 0xb0, 0x7f, 0x3f, 0x96, 0xc9, 0x62, 0xaf, 0x10, 0x65, 0xa0, 0x52, 0x06, 0x72, 0xff, 0x4c, 0xc5, 0x98, 0xb7, - 0x00, 0xa4, 0xc2, 0x74, 0xce, 0x20, 0x00, 0xfc, 0xc8, 0xa8, 0x0e, 0xb3, 0x7f, 0x63, 0x06, 0x63, 0xff, 0x10, 0x28, 0x09, 0x4f, 0x04, 0x41, 0xb2, - 0x28, 0x1d, 0x30, 0x05, 0x48, 0x07, 0x10, 0x17, 0xf4, 0xff, 0x02, 0x02, 0x70, 0x01, 0x04, 0x80, 0x40, 0x0a, 0x75, 0x29, 0x6a, 0xa0, 0x00, 0x00, - 0x04, 0x8a, 0x48, 0x17, 0xd0, 0x30, 0xde, 0x06, 0xe8, 0x17, 0x62, 0x2f, 0xb5, 0x6d, 0xc0, 0x06, 0x48, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x9a, 0x4e, - 0xc9, 0x62, 0xf4, 0x5d, 0x20, 0x6c, 0x9a, 0x06, 0x7b, 0x17, 0x68, 0xc5, 0x7c, 0xb7, 0x30, 0x1c, 0xbc, 0xc8, 0xb9, 0x06, 0xd8, 0x17, 0x0e, 0x93, - 0x7f, 0x38, 0x17, 0x30, 0x04, 0x58, 0x31, 0x28, 0x15, 0x3c, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x01, 0x01, 0xa8, 0x20, 0x01, 0x03, - 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x04, 0x02, 0x17, 0xa2, 0xc2, 0x00, 0x00, 0x05, 0x28, 0x17, 0xfc, 0x03, 0x30, 0xab, 0x30, 0xf3, 0x30, - 0xbd, 0x20, 0x07, 0x06, 0x3d, 0x33, 0x17, 0x41, 0x00, 0x72, 0x4f, 0xab, 0x6e, 0x2f, 0xb3, 0x3f, 0xb7, 0x10, 0x15, 0xf0, 0x7f, 0x02, 0x3f, 0x96, - 0xaf, 0x80, 0x72, 0x82, 0x06, 0x7b, 0x15, 0x00, 0x01, 0x00, 0x44, 0xc5, 0x78, 0xce, 0x8c, 0xc1, 0x06, 0x78, 0x15, 0x82, 0x0f, 0x13, 0x7f, 0x10, - 0x04, 0x40, 0x04, 0x3a, 0x28, 0x19, 0x3d, 0x2c, 0x04, 0x37, 0x28, 0x1f, 0x41, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0xa0, 0x70, - 0x01, 0x06, 0x40, 0x0a, 0xb5, 0x18, 0x60, 0xbe, 0x00, 0x20, 0x00, 0x06, 0x28, 0x17, 0xea, 0x30, 0xbe, 0x30, 0xca, 0xc1, 0x06, 0x48, 0x13, 0x78, - 0x17, 0x69, 0x00, 0x7a, 0x00, 0x6f, 0x28, 0x19, 0xc0, 0x06, 0x5f, 0xaf, 0x10, 0x0e, 0xd0, 0x7f, 0x9a, 0x4e, 0x29, 0x52, 0x51, 0x68, 0x20, 0xa3, - 0x90, 0x06, 0x78, 0x19, 0x60, 0xc5, 0xac, 0xb9, 0x70, 0x1d, 0xc8, 0x98, 0xb0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x38, 0x28, 0x13, - 0x58, 0x3e, 0x28, 0x19, 0x30, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x05, 0x03, 0x03, 0xa8, 0x20, 0x01, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, - 0x05, 0x05, 0xc9, 0x00, 0x17, 0x4e, 0xb0, 0x00, 0x00, 0x07, 0x31, 0xab, 0x80, 0x28, 0x17, 0xd5, 0x30, 0xa9, 0x30, 0xeb, 0x30, 0xcb, 0x2a, 0x30, - 0xa2, 0x06, 0x28, 0x1d, 0x43, 0x2f, 0xab, 0x6c, 0x28, 0x19, 0x66, 0xad, 0x28, 0x19, 0x72, 0x2f, 0xb5, 0x69, 0x05, 0xe8, 0x1d, 0x00, 0x10, 0x7f, - 0x65, 0x05, 0xcf, 0xb3, 0x58, 0x4b, 0x00, 0x20, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x05, 0xda, 0x1d, 0xa0, 0x52, 0x29, 0x01, 0x52, 0x8f, 0x79, 0x3c, - 0x5c, 0x9a, 0x4e, 0x06, 0x5b, 0x19, 0x00, 0x98, 0xce, 0xac, 0xb9, 0xec, 0xd3, 0xc8, 0xb2, 0x35, 0x44, 0xc5, 0x06, 0x58, 0x19, 0x00, 0x13, 0x7f, - 0xeb, 0x06, 0x63, 0xff, 0xf3, 0x06, 0x43, 0xff, 0x55, 0x1a, 0x28, 0x0d, 0x3b, 0x28, 0x19, 0x44, 0x28, 0x19, 0x40, 0x28, 0x1b, 0x1c, 0x38, 0x04, - 0x4f, 0x05, 0xc8, 0x1d, 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x06, 0x05, 0x05, 0x05, 0x10, 0x05, 0x05, 0x06, 0x20, 0x06, 0x12, 0x20, 0x05, - 0x00, 0x06, 0x06, 0x6f, 0x1b, 0x9b, 0xa9, 0x00, 0x00, 0x00, 0x08, 0x31, 0xb3, 0x30, 0xed, 0x30, 0xe9, 0x30, 0x6c, 0xc9, 0x06, 0x28, 0x11, 0x78, - 0x17, 0x6f, 0x28, 0x17, 0x38, 0x13, 0x61, 0x00, 0x60, 0x64, 0x2f, 0xb5, 0x10, 0x15, 0xf0, 0x7f, 0xd1, 0x79, 0x57, 0x7f, 0xc9, 0x10, 0x62, 0x1a, - 0x59, 0x06, 0x72, 0xff, 0x5c, 0xcf, 0x5c, 0xb8, 0x0d, 0x7c, 0xb7, 0xc4, 0xb3, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, 0x0f, 0x46, 0x3b, - 0x48, 0x13, 0x30, 0x04, 0x34, 0x28, 0x1b, 0x10, 0x1d, 0xf4, 0xff, 0x07, 0x02, 0x06, 0x08, 0x05, 0x08, 0x08, 0x07, 0x20, 0x06, 0x15, 0x00, 0x06, - 0x07, 0x07, 0x07, 0x07, 0x42, 0x1c, 0x59, 0x08, 0xb5, 0x00, 0x00, 0x09, 0x28, 0x17, 0xcd, 0x30, 0xc6, 0x00, 0x30, 0xa3, 0x30, 0xab, 0x30, 0xc3, - 0x30, 0xc8, 0xd0, 0x06, 0x28, 0x1d, 0x38, 0x17, 0x6e, 0x2f, 0xa7, 0x65, 0x00, 0x63, 0x00, 0x46, 0x74, 0x2f, 0xb7, 0x63, 0x00, 0x75, 0x20, 0x07, - 0x10, 0x15, 0x90, 0x7f, 0xb7, 0x01, 0x5e, 0x85, 0x6d, 0xc4, 0x72, 0x3c, 0x68, 0x06, 0x7b, 0x17, 0x00, 0x54, 0xcf, 0x24, 0xb1, 0xf0, 0xd2, 0xf7, - 0xce, 0xe8, 0x06, 0xb8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x3d, 0x20, 0x01, 0x35, 0x04, 0x3a, 0x0b, 0x04, 0x42, 0x04, 0x38, 0x20, 0x05, 0x43, - 0x20, 0x07, 0x10, 0x1d, 0x94, 0xff, 0x02, 0x08, 0x07, 0x09, 0x06, 0x09, 0x09, 0x28, 0x19, 0x09, 0x00, 0x16, 0x07, 0x08, 0x08, 0x08, 0x08, 0xb2, - 0x1d, 0x00, 0x50, 0xcc, 0x00, 0x00, 0x0a, 0x31, 0xc7, 0x30, 0x01, 0xe9, 0x30, 0xa6, 0x30, 0xa7, 0x30, 0xa2, 0x06, 0x28, 0x13, 0xaa, 0x3f, 0xff, - 0x44, 0x28, 0x11, 0x6c, 0x2f, 0xab, 0x77, 0x2f, 0xaf, 0x72, 0xc0, 0x28, 0x1d, 0x10, 0x15, 0xf0, 0x7f, 0x79, 0x72, 0xc9, 0x62, 0x4e, 0x53, 0x80, - 0x06, 0x78, 0x15, 0x00, 0x00, 0x78, 0xb3, 0x7c, 0xb7, 0xe8, 0x1a, 0xc6, 0xb4, 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x28, 0x11, 0x3b, - 0x00, 0x04, 0x30, 0x04, 0x32, 0x04, 0x4d, 0x04, 0x40, 0xc0, 0x05, 0xa8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x09, 0x08, 0x0c, 0x07, 0x0c, 0x0c, 0x80, - 0x28, 0x19, 0x0c, 0x0d, 0x08, 0x09, 0x09, 0x09, 0x09, 0x00, 0xd8, 0x1b, 0x4c, 0xca, 0x00, 0x00, 0x0b, 0x31, 0x01, 0xd5, 0x30, 0xed, 0x30, 0xea, - 0x30, 0xc0, 0x06, 0x68, 0x15, 0x14, 0x00, 0x00, 0x46, 0x28, 0x15, 0x6f, 0x28, 0x11, 0x69, 0x00, 0x7c, 0x64, 0x28, 0x1d, 0x06, 0xd0, 0x7f, 0x06, - 0x18, 0x95, 0x07, 0xd0, 0xff, 0x0e, 0x30, 0x7f, 0x5b, 0x4f, 0x02, 0x57, 0x7f, 0xcc, 0x91, 0xbe, 0x8f, 0x06, 0x78, 0x19, 0x0c, 0x01, 0xd5, 0x5c, - 0xb8, 0xac, 0xb9, 0xe4, 0xb2, 0x06, 0x78, 0x17, 0xaa, 0x07, 0x33, 0x7f, 0xf3, 0x06, 0xa3, 0xff, 0x24, 0x28, 0x15, 0x3e, 0x28, 0x11, 0x38, 0x38, - 0x04, 0x34, 0x28, 0x1d, 0x10, 0x0e, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x0a, 0x0a, 0x0d, 0x00, 0x09, 0x0e, 0x0e, 0x0a, 0x0a, 0x0a, 0x0e, 0x31, 0x81, - 0x20, 0x04, 0x0a, 0x0a, 0xa5, 0x15, 0x12, 0xc4, 0x24, 0x95, 0x00, 0x31, 0xb8, 0x30, 0xe7, 0x30, 0xfc, 0x30, 0xb8, 0x2d, 0x30, 0xa2, 0x06, 0x68, - 0x19, 0x47, 0x2f, 0xaf, 0x38, 0x17, 0x67, 0x28, 0x19, 0x8f, 0x06, 0x38, 0x17, 0x47, 0x00, 0xe9, 0x80, 0x7f, 0x06, 0x38, 0x17, 0x07, 0x10, 0xff, - 0x0e, 0xd0, 0x7f, 0x02, 0x50, 0x4f, 0xbb, 0x6c, 0x9a, 0x4e, 0x06, 0x7b, 0x15, 0x00, 0x01, 0x00, 0x70, 0xc8, 0xc0, 0xc9, 0x44, 0xc5, 0x06, 0x78, - 0x15, 0xe2, 0x07, 0x52, 0x7f, 0x38, 0x17, 0x06, 0x73, 0xff, 0x14, 0x04, 0x36, 0x48, 0x17, 0x34, 0x8e, 0x20, 0x07, 0x38, 0x04, 0x4f, 0x06, 0x08, - 0x19, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x0b, 0x00, 0x0b, 0x0e, 0x0a, 0x0f, 0x0f, 0x0b, 0x0b, 0x0b, 0x20, 0x0f, 0x0e, 0x20, 0x04, 0x0b, - 0x0b, 0xff, 0x17, 0xfe, 0x00, 0xc3, 0x00, 0x00, 0x0d, 0x31, 0xcf, 0x30, 0xef, 0x35, 0x30, 0xa4, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x48, 0x2f, 0x25, - 0x77, 0x2f, 0x29, 0x6d, 0x69, 0x2f, 0xb1, 0x06, 0xb0, 0x7f, 0xef, 0x0e, 0xe0, 0xff, 0x06, 0xd1, 0x7f, 0xe1, 0x06, 0x61, 0xfd, 0x00, 0x00, 0x00, - 0x0f, 0x59, 0x01, 0x5a, 0x37, 0x59, 0x81, 0x06, 0x98, 0x17, 0x58, 0xd5, 0x40, 0xc6, 0x74, 0xc7, 0x06, 0x98, 0x17, 0xa8, 0x07, 0x32, 0xff, 0x76, - 0x2f, 0x29, 0xed, 0x06, 0x69, 0x98, 0x13, 0x04, 0x30, 0x2e, 0x04, 0x32, 0x20, 0x03, 0x39, 0x28, 0x15, 0x10, 0x06, 0x93, 0xff, 0x10, 0x06, 0x90, - 0xff, 0x0c, 0x00, 0x0c, 0x0f, 0x0b, 0x10, 0x10, 0x0c, 0x0c, 0x0c, 0xc0, 0x30, 0x03, 0x20, 0x06, 0x26, 0x0f, 0xbf, 0x8f, 0x00, 0x00, 0x16, 0x0e, - 0x31, 0xa2, 0x28, 0x15, 0xaa, 0x28, 0x1b, 0x06, 0x7d, 0x31, 0x49, 0xf0, 0x2f, 0xad, 0x38, 0x17, 0x06, 0x7d, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x7e, - 0x82, 0x65, 0x59, 0x20, 0xe6, 0x74, 0x06, 0x9b, 0x17, 0x44, 0xc5, 0x74, 0xc7, 0x24, 0x1a, 0xc6, 0x40, 0xc6, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, - 0x10, 0x28, 0x11, 0x3e, 0xc0, 0x48, 0x19, 0x10, 0x1e, 0x54, 0xff, 0x0d, 0x10, 0x13, 0x0f, 0x14, 0x14, 0x00, 0x0d, 0x0d, 0x10, 0x14, 0x02, 0x10, - 0x0d, 0x0d, 0x03, 0x0d, 0x0d, 0x95, 0x1d, 0x70, 0xbd, 0x2d, 0x2d, 0x48, 0x17, 0x15, 0xc0, 0x30, 0xdb, 0x06, 0xa8, 0x17, 0x64, 0x2f, 0xb1, 0x68, - 0x28, 0x1d, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x31, 0x72, 0xbe, 0x8f, 0x77, 0x83, 0x06, 0xd8, 0x17, 0x0e, 0xe4, 0xb2, 0x38, 0xd6, 0x06, 0x98, 0x17, - 0x0e, 0xd3, 0x7f, 0x38, 0x17, 0x34, 0xb0, 0x28, 0x15, 0x45, 0x28, 0x1d, 0x10, 0x1e, 0x34, 0xff, 0x0e, 0x0d, 0x10, 0x0c, 0x00, 0x11, 0x11, 0x0e, - 0x0e, 0x0d, 0x11, 0x01, 0x0d, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x03, 0x1f, 0x5e, 0xad, 0x81, 0x2b, 0x2d, 0x31, 0xa4, 0x30, 0xea, 0x30, 0xce, 0x28, - 0x1b, 0xa2, 0x06, 0x98, 0x17, 0x6c, 0x20, 0x01, 0x69, 0x00, 0x6e, 0x2f, 0xb7, 0x69, 0x20, 0x00, 0x73, 0x10, 0x16, 0x00, 0x7f, 0x0a, 0x4f, 0x29, - 0x52, 0xfa, 0x10, 0x8b, 0x0a, 0x4f, 0x06, 0x7b, 0x17, 0x7c, 0xc7, 0xac, 0xb9, 0x0c, 0x78, 0xb1, 0x74, 0xc7, 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, - 0x18, 0x04, 0x44, 0x3b, 0x20, 0x01, 0x38, 0x04, 0x3d, 0x28, 0x17, 0x39, 0x04, 0x60, 0x41, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x0f, 0x0e, - 0x11, 0x0d, 0x12, 0x00, 0x12, 0x0f, 0x0f, 0x0e, 0x12, 0x10, 0x0e, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x4d, 0x1c, 0x41, 0xc0, 0x00, 0x20, 0x00, 0x11, - 0x28, 0x17, 0xf3, 0x30, 0xc7, 0x30, 0xa3, 0x0a, 0x30, 0xa2, 0x30, 0xca, 0x06, 0x48, 0x1b, 0x49, 0x28, 0x11, 0x64, 0xac, 0x28, 0x17, 0x61, 0x28, - 0x19, 0x61, 0x06, 0x4f, 0xaf, 0x10, 0x0e, 0xd0, 0x7f, 0x70, 0x53, 0x02, 0x2c, 0x7b, 0x89, 0x5b, 0xb3, 0x7e, 0x06, 0x7b, 0x17, 0x78, 0x01, 0xc7, - 0x14, 0xb5, 0x60, 0xc5, 0x98, 0xb0, 0x06, 0x98, 0x17, 0xaa, 0x0e, 0xd3, 0x7f, 0x18, 0x28, 0x11, 0x34, 0x28, 0x17, 0x30, 0x28, 0x19, 0x30, 0xc0, - 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x10, 0x0f, 0x12, 0x0e, 0x13, 0x13, 0x00, 0x10, 0x10, 0x0f, 0x13, 0x11, 0x0f, 0x10, 0x10, 0x00, 0x10, - 0x10, 0x47, 0x1c, 0xbc, 0xc2, 0x00, 0x00, 0x11, 0x12, 0x31, 0xab, 0x28, 0x17, 0xb6, 0x30, 0xb9, 0x06, 0x48, 0x13, 0xae, 0x3f, 0xff, 0x4b, 0x48, - 0x11, 0x73, 0x28, 0x17, 0x06, 0x1f, 0xab, 0x10, 0x0f, 0x30, 0x7f, 0x2a, 0x04, 0x58, 0x28, 0x84, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0x03, - 0x94, 0xce, 0x90, 0xc7, 0xa4, 0xc2, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x56, 0x1a, 0x48, 0x11, 0x37, 0x28, 0x17, 0x41, 0x06, 0x28, 0x15, 0x10, - 0x17, 0x14, 0xff, 0x11, 0x00, 0x11, 0x14, 0x11, 0x15, 0x15, 0x11, 0x11, 0x11, 0x20, 0x15, 0x13, 0x20, 0x04, 0x11, 0x11, 0xc4, 0x1b, 0xf7, 0x02, - 0xbb, 0x00, 0x00, 0x13, 0x31, 0xb1, 0x28, 0x17, 0xbf, 0x02, 0x30, 0xc3, 0x30, 0xad, 0x30, 0xfc, 0x06, 0x48, 0x1b, 0x4b, 0x20, 0x00, 0x65, 0x2f, - 0xb1, 0x74, 0x00, 0x75, 0x00, 0x63, 0x08, 0x00, 0x6b, 0x00, 0x79, 0x10, 0x16, 0x00, 0x7f, 0xaf, 0x80, 0x54, 0x10, 0x58, 0xfa, 0x57, 0x06, 0x98, - 0x17, 0x04, 0xcf, 0x30, 0xd1, 0x31, 0xa4, 0xd0, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x1a, 0x04, 0x35, 0x28, 0x17, 0x05, 0x42, 0x04, 0x43, 0x04, - 0x3a, 0x20, 0x01, 0x38, 0x06, 0x08, 0x1b, 0x80, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x12, 0x15, 0x12, 0x16, 0x16, 0x12, 0x08, 0x12, 0x12, 0x16, 0x14, - 0x20, 0x04, 0x12, 0x12, 0x2a, 0x00, 0x1b, 0xa6, 0xc3, 0x00, 0x00, 0x14, 0x31, 0xeb, 0x00, 0x30, 0xa4, 0x30, 0xb8, 0x30, 0xa2, 0x30, 0xca, 0x82, - 0x06, 0x48, 0x15, 0x00, 0x00, 0x4c, 0x00, 0x6f, 0x28, 0x13, 0x69, 0xab, 0x2f, 0xb1, 0x69, 0x4f, 0xb9, 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x0e, 0x00, - 0xff, 0x06, 0xb1, 0x7d, 0x80, 0x07, 0x10, 0x7f, 0xef, 0x8d, 0x13, 0x66, 0xaf, 0x65, 0x89, 0x10, 0x5b, 0xa3, 0x90, 0x06, 0x58, 0x1b, 0xe8, 0xb8, - 0x74, 0xc7, 0x03, 0xc0, 0xc9, 0x60, 0xc5, 0x98, 0xb0, 0x06, 0x58, 0x1b, 0x0e, 0xf2, 0x7f, 0x45, 0x1b, 0x28, 0x11, 0x38, 0x04, 0x37, 0x28, 0x11, - 0x30, 0x28, 0x1f, 0x70, 0x30, 0x06, 0x08, 0x17, 0x07, 0xf4, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x13, 0x13, 0x16, 0x13, 0x08, 0x17, 0x17, 0x13, 0x13, - 0x50, 0x04, 0x13, 0x13, 0xa7, 0x00, 0x15, 0x2e, 0xbf, 0x00, 0x00, 0x15, 0x31, 0xde, 0x00, 0x30, 0xb5, 0x30, 0xc1, 0x30, 0xe5, 0x30, 0xfc, 0x02, - 0x30, 0xbb, 0x30, 0xc3, 0x30, 0xc4, 0x06, 0x08, 0x1d, 0x4d, 0xaa, 0x28, 0x0d, 0x73, 0x28, 0x15, 0x61, 0x2f, 0xaf, 0x68, 0x2f, 0xb5, 0x73, 0xa8, - 0x2f, 0xbf, 0x74, 0x2f, 0xbf, 0x73, 0x10, 0x15, 0x60, 0x7f, 0x6c, 0x9a, 0x28, 0x04, 0x84, 0xf8, 0x8b, 0x5e, 0x58, 0x06, 0x5b, 0x15, 0x00, 0x00, - 0x00, 0xe4, 0xb9, 0xac, 0xc0, 0x94, 0xcd, 0x38, 0xc1, 0x35, 0x20, 0xce, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x0f, 0x41, 0x20, 0x01, - 0x10, 0x30, 0x04, 0x47, 0x28, 0x21, 0x41, 0x04, 0x35, 0x04, 0x60, 0x42, 0x20, 0x0f, 0x10, 0x1d, 0x94, 0xff, 0x14, 0x16, 0x19, 0x16, 0x1a, 0x00, - 0x1a, 0x14, 0x14, 0x16, 0x1a, 0x18, 0x16, 0x14, 0x00, 0x14, 0x14, 0x14, 0x1f, 0x1e, 0x78, 0xcd, 0x00, 0x02, 0x00, 0x16, 0x31, 0xe1, 0x30, 0xea, - 0x28, 0x13, 0xe9, 0x0c, 0x30, 0xf3, 0x30, 0xc9, 0x06, 0x08, 0x13, 0x78, 0x17, 0x72, 0x00, 0x14, 0x79, 0x00, 0x6c, 0x4f, 0xad, 0x64, 0x10, 0x16, - 0x00, 0x7f, 0x6c, 0x9a, 0x08, 0xcc, 0x91, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x54, 0x01, 0xba, 0xb4, 0xb9, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, - 0x58, 0x15, 0x80, 0x0f, 0x13, 0x7f, 0x1c, 0x04, 0x4d, 0x04, 0x40, 0x04, 0x38, 0x23, 0x04, 0x3b, 0x28, 0x11, 0x3d, 0x04, 0x34, 0x05, 0xa8, 0x11, - 0x10, 0x17, 0x54, 0xff, 0x00, 0x15, 0x15, 0x18, 0x15, 0x19, 0x19, 0x15, 0x15, 0x10, 0x15, 0x19, 0x1f, 0x20, 0x04, 0x15, 0x15, 0xb7, 0x1b, 0x05, - 0x9b, 0xc9, 0x00, 0x00, 0x17, 0x28, 0x17, 0xfc, 0x28, 0x13, 0xd4, 0x06, 0x95, 0x17, 0x3f, 0xaf, 0x69, 0x28, 0x11, 0x65, 0x10, 0x16, 0x60, 0x7f, - 0x05, 0x7f, 0x33, 0xe0, 0x56, 0x06, 0x98, 0x15, 0x38, 0x17, 0x78, 0xc7, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0xb0, 0x38, 0x17, 0x3d, 0x06, 0x08, - 0x0d, 0x10, 0x17, 0x94, 0xff, 0x16, 0x14, 0x17, 0x14, 0x00, 0x18, 0x18, 0x16, 0x16, 0x14, 0x18, 0x1e, 0x14, 0x00, 0x16, 0x16, 0x16, 0x16, 0x82, - 0x1f, 0x61, 0xce, 0x00, 0x00, 0x00, 0x18, 0x31, 0xdf, 0x30, 0xb7, 0x30, 0x51, 0xac, 0x06, 0xa8, 0x19, 0x4d, 0x28, 0x15, 0x63, 0x00, 0x68, 0x28, - 0x1b, 0x68, 0x67, 0x4f, 0xb1, 0x10, 0x0e, 0x10, 0x7f, 0xed, 0x06, 0xc1, 0xff, 0xc6, 0x5b, 0x47, 0x10, 0x6b, 0x39, 0x68, 0x06, 0x9b, 0x17, 0xf8, - 0xbb, 0xdc, 0xc2, 0x30, 0x04, 0xac, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x38, 0x04, 0x47, 0x47, 0x20, 0x03, 0x33, 0x04, 0x30, 0x06, - 0x48, 0x1f, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xd6, 0xff, 0x00, 0x17, 0x17, 0x1a, 0x17, 0x1b, 0x1b, 0x17, 0x17, 0x10, 0x17, 0x1b, 0x1c, 0x20, 0x04, - 0x17, 0x17, 0x63, 0x1e, 0x04, 0xe0, 0xc3, 0x00, 0x00, 0x19, 0x28, 0x17, 0xcd, 0x30, 0x14, 0xbd, 0x30, 0xbf, 0x06, 0xc8, 0x17, 0x6e, 0x4f, 0xaf, - 0x73, 0x00, 0x18, 0x6f, 0x00, 0x74, 0x2f, 0xbd, 0x10, 0x15, 0xd0, 0x7f, 0x0e, 0x66, 0x3c, 0x04, 0x5c, 0xcf, 0x82, 0xbe, 0x8f, 0x06, 0x7b, 0x17, - 0xf8, 0xbb, 0x03, 0x24, 0xb1, 0x8c, 0xc1, 0xc0, 0xd0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0xa0, 0x38, 0x17, 0x3d, 0x28, 0x11, 0x35, 0x04, 0x41, - 0x04, 0x3e, 0x30, 0x04, 0x42, 0x28, 0x1d, 0x10, 0x1d, 0xd4, 0xff, 0x18, 0x18, 0x1b, 0x18, 0x01, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x1c, 0x19, 0x20, - 0x04, 0x00, 0x18, 0x18, 0xf5, 0x1f, 0xcd, 0xbd, 0x00, 0x00, 0x41, 0x1a, 0x28, 0x17, 0xba, 0x30, 0xfc, 0x30, 0xea, 0x06, 0xc8, 0x17, 0x47, 0x73, - 0x48, 0x13, 0x75, 0x00, 0x72, 0x2f, 0xbb, 0x10, 0x0e, 0x50, 0x7f, 0x06, 0x51, 0xfb, 0x81, 0x3f, 0xff, 0xc6, 0x5b, 0xcf, 0x82, 0xcc, 0x91, 0x06, - 0x7b, 0x15, 0x87, 0x38, 0x17, 0xfc, 0xc8, 0xac, 0xb9, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x38, 0x17, 0x47, 0x41, 0x28, 0x13, 0x43, 0x04, 0x40, - 0x28, 0x21, 0x10, 0x16, 0x74, 0xff, 0x06, 0x96, 0xff, 0x00, 0x19, 0x1a, 0x1d, 0x1a, 0x1e, 0x1e, 0x19, 0x19, 0x00, 0x1a, 0x1e, 0x1b, 0x1a, 0x19, - 0x19, 0x19, 0x19, 0x01, 0x6e, 0x1b, 0x75, 0xbe, 0x00, 0x00, 0x1b, 0x28, 0x17, 0x47, 0xb7, 0x20, 0x01, 0xc3, 0x30, 0xd4, 0x06, 0x68, 0x19, 0x78, - 0x17, 0x70, 0x05, 0x7e, 0x70, 0x20, 0x01, 0x05, 0xb8, 0x1d, 0x10, 0x07, 0x50, 0x7f, 0x50, 0x03, 0x05, 0xd1, 0xf9, 0x78, 0x17, 0x7f, 0x04, 0x89, - 0x7f, 0x89, 0xd4, 0x6b, 0x06, 0x7b, 0x17, 0xf8, 0xbb, 0x03, 0xdc, 0xc2, 0xdc, 0xc2, 0x3c, 0xd5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0xc7, 0x78, - 0x17, 0x38, 0x1d, 0x38, 0x04, 0x3f, 0x06, 0x08, 0x1b, 0x10, 0x0f, 0x54, 0xff, 0x06, 0x96, 0xff, 0x00, 0x1a, 0x19, 0x1c, 0x19, 0x1d, 0x1d, 0x1a, - 0x1a, 0x00, 0x19, 0x1d, 0x1a, 0x19, 0x1a, 0x1a, 0x1a, 0x1a, 0x08, 0xf7, 0x16, 0xdf, 0xbf, 0x2b, 0x2d, 0x31, 0xe2, 0x30, 0x06, 0xf3, 0x30, 0xbf, - 0x30, 0xca, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6f, 0x02, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x61, 0x20, 0x05, 0x61, 0x81, 0x10, 0x16, 0x20, 0x7f, 0x99, - 0x84, 0x27, 0x59, 0xff, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xac, 0xba, 0xdc, 0xd0, 0x98, 0xb0, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, - 0x1c, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x16, 0x42, 0x04, 0x30, 0x20, 0x05, 0x30, 0x05, 0xe8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x1b, 0x00, 0x1b, 0x1e, - 0x1b, 0x1f, 0x1f, 0x1b, 0x1b, 0x1b, 0x20, 0x1f, 0x1d, 0x20, 0x04, 0x1b, 0x1b, 0x21, 0x21, 0x55, 0x00, 0xb0, 0x00, 0x00, 0x1d, 0x31, 0xce, 0x30, - 0xfc, 0x00, 0x30, 0xb9, 0x30, 0xab, 0x30, 0xed, 0x30, 0xe9, 0x2a, 0x30, 0xa4, 0x06, 0x28, 0x1f, 0x4e, 0x28, 0x17, 0x72, 0x28, 0x17, 0x68, 0x0a, - 0x00, 0x20, 0x00, 0x43, 0x28, 0x1d, 0x72, 0x28, 0x27, 0x6c, 0xe8, 0x2f, 0xc3, 0x05, 0x78, 0x25, 0xd0, 0x73, 0x65, 0x20, 0x85, 0x64, 0x00, 0x75, - 0xd5, 0x20, 0x8b, 0x50, 0x97, 0x64, 0x0d, 0xe0, 0xff, 0x61, 0x40, 0xff, 0x65, 0x21, 0x81, 0xd8, 0x05, 0x71, 0x01, 0x00, 0xf0, 0x7f, 0x74, 0x21, - 0x93, 0x04, 0xbf, 0xc9, 0x17, 0x53, 0x61, 0x01, 0x53, 0x57, 0x7f, 0x65, 0x67, 0xb3, 0x7e, 0x06, 0x5b, 0x19, 0x00, 0x78, 0xb1, 0xa4, 0xc2, 0x90, - 0xce, 0x64, 0xb8, 0x0d, 0x7c, 0xb7, 0x74, 0xc7, 0x06, 0x38, 0x1f, 0x08, 0x32, 0x7f, 0x6f, 0x05, 0x81, 0xfd, 0x01, 0x00, 0x00, 0x21, 0x04, 0x35, - 0x04, 0x32, 0x20, 0x03, 0x41, 0x40, 0x48, 0x17, 0x4f, 0x04, 0x20, 0x00, 0x1a, 0x28, 0x23, 0x47, 0x40, 0x28, 0x2d, 0x3b, 0x04, 0x38, 0x05, 0x28, - 0x2b, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x1c, 0x22, 0x06, 0x22, 0x06, 0x06, 0x1c, 0x20, 0x06, 0x00, 0x2e, 0x22, 0x1c, 0x1c, 0x1c, - 0x1c, 0x70, 0x19, 0x50, 0x15, 0x2c, 0xa1, 0x1e, 0x68, 0x17, 0xc0, 0x30, 0xb3, 0x30, 0x6b, 0xbf, 0x06, 0x08, 0x13, 0xf8, 0x17, 0x44, 0x2f, 0xb5, - 0x6b, 0x2f, 0xbf, 0x3f, 0xbd, 0xff, 0x05, 0x7f, 0xba, 0xb0, 0x73, 0x05, 0xf8, 0x13, 0x08, 0x30, 0xff, 0x05, 0xb8, 0x13, 0x00, 0xf0, 0x7f, 0x05, - 0x16, 0x15, 0x38, 0x17, 0x03, 0xbe, 0x8f, 0xd1, 0x79, 0xd6, 0x4e, 0x06, 0x58, 0x15, 0x58, 0x17, 0x03, 0xe4, 0xb2, 0x54, 0xcf, 0xc0, 0xd0, 0x06, - 0x18, 0x13, 0x08, 0x33, 0x7f, 0xd5, 0x05, 0xb8, 0x13, 0x00, 0x58, 0x17, 0x14, 0x28, 0x1f, 0x3a, 0x28, 0x17, 0x42, 0x05, 0x08, 0x13, 0xc0, 0x07, - 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1d, 0x23, 0x0a, 0x23, 0x0a, 0x0a, 0x40, 0x1d, 0x20, 0x06, 0x2d, 0x23, 0x1d, 0x1d, 0x1d, 0x1d, 0x00, 0x49, - 0x21, 0x55, 0xb8, 0x00, 0x00, 0x1f, 0x31, 0x05, 0xcd, 0x30, 0xd6, 0x30, 0xe9, 0x28, 0x19, 0xab, 0x06, 0x48, 0x15, 0x88, 0x3f, 0x2f, 0x65, 0x00, - 0x62, 0x2f, 0xb1, 0x61, 0x00, 0x73, 0xe0, 0x28, 0x13, 0x05, 0x98, 0x0f, 0x10, 0x0f, 0x70, 0x7f, 0x85, 0x51, 0x03, 0x5e, 0xc9, 0x04, 0x62, 0xaf, - 0x65, 0xa0, 0x52, 0x06, 0x58, 0x19, 0x24, 0xb1, 0x00, 0x0c, 0xbe, 0x98, 0xb7, 0xa4, 0xc2, 0x74, 0xce, 0xd5, 0x06, 0x78, 0x17, 0x07, 0x93, 0x7f, - 0x63, 0x06, 0x23, 0xff, 0x1d, 0x28, 0x17, 0x31, 0x28, 0x15, 0x1c, 0x30, 0x04, 0x41, 0x28, 0x0d, 0x05, 0x38, 0x09, 0x10, 0x17, 0xd4, 0xff, 0x1e, - 0x1c, 0x02, 0x1f, 0x1c, 0x20, 0x20, 0x1e, 0x1e, 0x20, 0x04, 0x1c, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x03, 0x1d, 0x43, 0xbb, 0x00, 0x00, 0x00, 0x20, - 0x31, 0xcb, 0x30, 0xe5, 0x30, 0x00, 0xfc, 0x30, 0xcf, 0x30, 0xf3, 0x30, 0xd7, 0x30, 0x1d, 0xb7, 0x30, 0xe3, 0x20, 0x0b, 0x05, 0xdd, 0x39, 0x38, - 0x17, 0x77, 0x2f, 0xa9, 0x44, 0x48, 0x2f, 0xb7, 0x6d, 0x00, 0x70, 0x28, 0x1d, 0x68, 0x00, 0x75, 0x69, 0x2f, 0xad, 0x05, 0x3c, 0x2b, 0x10, 0x07, - 0x50, 0x7f, 0x75, 0x2e, 0x17, 0x76, 0x4e, 0x27, 0x80, 0x06, 0x32, 0x03, 0xb0, 0x65, 0x55, 0x7f, 0x03, 0x5e, 0xc0, 0x10, 0x4e, 0x14, 0x5c, 0x06, - 0x5b, 0x17, 0x74, 0xb2, 0x84, 0xd5, 0x0d, 0x04, 0xd5, 0x54, 0xc1, 0x06, 0x58, 0x15, 0x07, 0x33, 0x7f, 0x6f, 0x21, 0xfd, 0x40, 0x61, 0x06, 0x84, - 0x01, 0x1d, 0x04, 0x4c, 0x04, 0x4e, 0x04, 0x00, 0x2d, 0x00, 0x13, 0x04, 0x4d, 0x04, 0x3c, 0x04, 0x07, 0x3f, 0x04, 0x48, 0x04, 0x38, 0x28, 0x25, - 0x10, 0x15, 0xb4, 0xff, 0x06, 0xd6, 0xff, 0x00, 0x1f, 0x1e, 0x21, 0x1e, 0x22, 0x24, 0x1f, 0x1f, 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x1f, 0x1f, 0x1f, - 0x1f, 0x01, 0xb9, 0x1e, 0x21, 0xcd, 0x00, 0x00, 0x21, 0x68, 0x17, 0x5a, 0xb8, 0x48, 0x11, 0xb8, 0x06, 0x08, 0x15, 0x98, 0x17, 0x4a, 0x2f, 0xb7, - 0x72, 0x8f, 0x2f, 0xb3, 0x65, 0x00, 0x79, 0x10, 0x0d, 0xe0, 0x7f, 0x58, 0x17, 0x36, 0x19, 0x06, 0x32, 0x03, 0x03, 0xb0, 0x65, 0xfd, 0x6c, 0x7f, - 0x89, 0x06, 0x58, 0x13, 0x58, 0x17, 0x0e, 0x00, 0xc8, 0xc0, 0xc9, 0x06, 0x78, 0x15, 0x07, 0x33, 0x7f, 0x78, 0x17, 0x4a, 0x2c, 0x00, 0xe9, 0x64, - 0x01, 0x69, 0x05, 0xaf, 0xb4, 0x78, 0x17, 0x14, 0x04, 0x17, 0x36, 0x04, 0x35, 0x28, 0x11, 0x41, 0x28, 0x17, 0x10, 0x15, 0xd4, 0xff, 0x06, 0xd6, - 0xff, 0x00, 0x20, 0x1f, 0x22, 0x1f, 0x23, 0x22, 0x20, 0x20, 0x00, 0x1f, 0x24, 0x23, 0x1f, 0x20, 0x20, 0x20, 0x20, 0x01, 0x99, 0x1c, 0xda, 0xca, - 0x00, 0x00, 0x22, 0x68, 0x17, 0x01, 0xe1, 0x30, 0xad, 0x30, 0xb7, 0x30, 0xb3, 0x06, 0x08, 0x15, 0xab, 0x9f, 0xaf, 0x4d, 0x2f, 0xb7, 0x78, 0x2f, - 0xa9, 0x63, 0x2e, 0x39, 0x05, 0xf4, 0x97, 0x51, 0x75, 0x2e, 0xaf, 0x65, 0x2f, 0xaf, 0x75, 0x00, 0x2d, 0x80, 0x87, 0x6e, 0x71, 0x4e, 0xc7, 0x0d, - 0x30, 0xff, 0x75, 0x4d, 0xb1, 0x3f, 0xaf, 0x31, 0x83, 0x73, 0xf4, 0x2f, 0xad, 0x05, 0xb1, 0x85, 0x78, 0x17, 0x50, 0x7f, 0xe9, 0x06, 0x02, 0x03, - 0xb0, 0x65, 0x02, 0xa8, 0x58, 0x7f, 0x89, 0xe5, 0x54, 0x06, 0x78, 0x19, 0x74, 0x01, 0xb2, 0x55, 0xba, 0xdc, 0xc2, 0x54, 0xcf, 0x06, 0x78, 0x19, - 0xea, 0x07, 0x33, 0x7f, 0x06, 0x91, 0xfd, 0x98, 0x17, 0x1c, 0x28, 0x15, 0x3a, 0x48, 0x15, 0x3a, 0x38, 0x04, 0x3e, 0x05, 0xa8, 0x19, 0x07, 0x14, - 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x21, 0x20, 0x24, 0x04, 0x20, 0x25, 0x25, 0x21, 0x21, 0x20, 0x04, 0x20, 0x21, 0x00, 0x21, 0x21, 0x21, 0x60, 0x19, - 0xab, 0xb4, 0x00, 0x00, 0x00, 0x23, 0x31, 0xcd, 0x30, 0xd0, 0x30, 0xc0, 0xec, 0x06, 0x28, 0x0f, 0xbf, 0xaf, 0x3e, 0x2d, 0x64, 0x2e, 0x31, 0x10, - 0x16, 0x30, 0x7f, 0x85, 0x51, 0x08, 0x4e, 0x53, 0xbe, 0x8f, 0x06, 0x92, 0xff, 0x24, 0xb1, 0x14, 0x1a, 0xbc, 0xe4, 0xb2, 0x06, 0x78, 0x15, 0x0f, - 0x13, 0x7f, 0x1d, 0x28, 0x0f, 0x32, 0x0c, 0x04, 0x30, 0x04, 0x34, 0x20, 0x03, 0x10, 0x1e, 0x34, 0xff, 0x22, 0x1d, 0x02, 0x20, 0x1d, 0x21, 0x21, - 0x22, 0x22, 0x20, 0x04, 0x1d, 0x00, 0x22, 0x22, 0x22, 0x22, 0xd9, 0x1b, 0xd6, 0xaa, 0x80, 0x24, 0x95, 0x31, 0xcb, 0x30, 0xe5, 0x30, 0xfc, 0x30, - 0x5a, 0xe8, 0x20, 0x03, 0xaf, 0x06, 0x48, 0x1d, 0x7f, 0x2f, 0x59, 0x2f, 0xb7, 0x72, 0x2c, 0x00, 0x6b, 0x10, 0x0e, 0x20, 0x7f, 0x75, 0x6a, 0x19, - 0x06, 0x52, 0x03, 0xbd, 0x7e, 0x20, 0xa6, 0x7e, 0x06, 0x9b, 0x15, 0x00, 0x00, 0x74, 0xb2, 0x95, 0x6a, 0xc6, 0x06, 0x98, 0x15, 0x07, 0x33, 0x7f, - 0x6f, 0x61, 0xfd, 0x49, 0x44, 0x01, 0x71, 0xc0, 0x42, 0x0f, 0x05, 0xb8, 0x17, 0x4c, 0x04, 0x4e, 0x04, 0x2d, 0x00, 0x01, 0x19, 0x04, 0x3e, 0x04, - 0x40, 0x04, 0x3a, 0x06, 0x08, 0x1b, 0xc0, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xd6, 0xff, 0x23, 0x21, 0x23, 0x21, 0x24, 0x23, 0x48, 0x23, 0x20, 0x06, - 0x24, 0x21, 0x20, 0x06, 0x23, 0x54, 0x1e, 0x00, 0x8e, 0xcb, 0x00, 0x00, 0x25, 0x31, 0xaa, 0x30, 0x06, 0xcf, 0x30, 0xa4, 0x30, 0xaa, 0x06, 0x48, - 0x13, 0x3f, 0xff, 0x4f, 0x0e, 0x00, 0x68, 0x00, 0x69, 0x28, 0x13, 0x06, 0x7d, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xc4, 0x04, 0x4f, 0xa5, 0x4e, 0xc4, - 0x4f, 0x06, 0x98, 0x19, 0x24, 0xc6, 0x06, 0x58, 0xd5, 0x74, 0xc7, 0x24, 0x06, 0x88, 0x1b, 0x0e, 0xf3, 0x7f, 0x1e, 0x03, 0x04, 0x33, 0x04, 0x30, - 0x04, 0x39, 0x28, 0x15, 0x10, 0x1e, 0x54, 0xff, 0x00, 0x24, 0x24, 0x25, 0x24, 0x26, 0x26, 0x24, 0x24, 0x80, 0x50, 0x04, 0x24, 0x24, 0x6a, 0x1c, - 0xfb, 0xc4, 0x00, 0x20, 0x00, 0x26, 0x28, 0x17, 0xaf, 0x30, 0xe9, 0x30, 0xdb, 0x2a, 0x30, 0xde, 0x06, 0x68, 0x19, 0x4f, 0x2f, 0xa3, 0x6c, 0x2e, - 0x2d, 0x68, 0xb0, 0x2f, 0xaf, 0x6d, 0x2e, 0x35, 0x10, 0x15, 0xf0, 0x7f, 0xc4, 0x4f, 0x4b, 0x51, 0x02, 0xc9, 0x62, 0x55, 0x4f, 0x6c, 0x9a, 0x06, - 0x5b, 0x19, 0x24, 0x00, 0xc6, 0x74, 0xd0, 0x7c, 0xb7, 0x38, 0xd6, 0xc8, 0x60, 0xb9, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x3a, 0x04, - 0x3b, 0xac, 0x28, 0x19, 0x45, 0x28, 0x19, 0x3c, 0x28, 0x21, 0x10, 0x1d, 0xf4, 0xff, 0x25, 0x25, 0x02, 0x26, 0x25, 0x27, 0x27, 0x25, 0x25, 0x50, - 0x04, 0x25, 0x00, 0x25, 0x38, 0x19, 0xa8, 0xba, 0x00, 0x00, 0x27, 0x83, 0x28, 0x17, 0xec, 0x30, 0xb4, 0x30, 0xf3, 0x06, 0x68, 0x15, 0x3f, 0xaf, - 0x05, 0x72, 0x00, 0x65, 0x00, 0x67, 0x2f, 0xb1, 0x6e, 0x10, 0x0e, 0xc0, 0x7f, 0x40, 0xf3, 0x06, 0x61, 0xff, 0xc4, 0x4f, 0xd2, 0x52, 0x88, 0x51, - 0xc3, 0x06, 0x72, 0xfd, 0x38, 0x17, 0xac, 0xb9, 0x74, 0xac, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x01, 0x1e, 0x04, 0x40, 0x04, 0x35, 0x04, 0x33, - 0x28, 0x15, 0x70, 0x3d, 0x06, 0x08, 0x13, 0x10, 0x0f, 0xb4, 0xff, 0x06, 0x76, 0xff, 0x26, 0x26, 0x27, 0x26, 0x01, 0x28, 0x28, 0x26, 0x26, 0x26, - 0x28, 0x29, 0x20, 0x04, 0x00, 0x26, 0x26, 0xf5, 0x1f, 0x83, 0xa8, 0x00, 0x00, 0x10, 0x28, 0x31, 0xda, 0x28, 0x13, 0xb7, 0x30, 0xeb, 0x30, 0x05, - 0xd9, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x28, 0x1d, 0x50, 0x28, 0x15, 0x45, 0x6e, 0x28, 0x13, 0x73, 0x00, 0x79, 0x2f, 0xb7, 0x76, 0x2f, 0xb9, 0x1b, - 0x6e, 0x00, 0x69, 0x05, 0xaf, 0xb7, 0x00, 0x50, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x05, 0xf1, 0x7f, 0x60, 0x73, 0x21, 0xf3, 0x06, 0x31, 0xfd, 0x00, - 0x00, 0xbe, 0x5b, 0x15, 0x01, 0x59, 0xd5, 0x6c, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x5b, 0x19, 0x00, 0x9c, 0xd3, 0xe4, 0xc2, 0xa0, 0xbc, 0x74, 0xc7, - 0x0d, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0x38, 0x1d, 0x07, 0xd1, 0xff, 0xe2, 0x06, 0x01, 0xff, 0x40, 0x1f, 0x28, 0x15, 0x3d, 0x04, 0x41, 0x04, 0x38, - 0x04, 0x01, 0x3b, 0x04, 0x4c, 0x04, 0x32, 0x04, 0x30, 0x28, 0x1f, 0x1c, 0x38, 0x04, 0x4f, 0x05, 0x88, 0x23, 0x0f, 0x53, 0xff, 0x10, 0x06, 0x90, - 0xff, 0x27, 0x27, 0x00, 0x28, 0x27, 0x29, 0x29, 0x27, 0x27, 0x27, 0x29, 0x40, 0x2a, 0x20, 0x04, 0x27, 0x27, 0xa3, 0x1c, 0x54, 0xc9, 0x00, 0x00, - 0x00, 0x29, 0x31, 0xed, 0x30, 0xfc, 0x30, 0x45, 0xc9, 0x28, 0x11, 0xa4, 0x30, 0xe9, 0x28, 0x21, 0xc9, 0x06, 0x08, 0x19, 0x14, 0x52, 0x00, 0x68, - 0x2f, 0xab, 0x64, 0x2f, 0xb3, 0x20, 0x00, 0x54, 0x49, 0x28, 0x1d, 0x6c, 0x48, 0x19, 0x64, 0x10, 0x15, 0x80, 0x7f, 0x57, 0x7f, 0x0c, 0x97, 0x5f, - 0x9b, 0x5c, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x5c, 0xb8, 0x00, 0xdc, 0xb4, 0x44, 0xc5, 0x7c, 0xc7, 0x9c, 0xb7, 0x30, 0xdc, 0xb4, 0x06, 0x38, 0x17, - 0x0e, 0xf3, 0x7f, 0x20, 0x04, 0x3e, 0x04, 0x01, 0x34, 0x04, 0x2d, 0x00, 0x10, 0x04, 0x39, 0x28, 0x19, 0xb0, 0x38, 0x23, 0x34, 0x05, 0x88, 0x13, - 0x10, 0x17, 0x34, 0xff, 0x28, 0x29, 0x2a, 0x29, 0x00, 0x2b, 0x2b, 0x28, 0x28, 0x29, 0x2b, 0x2c, 0x29, 0x00, 0x28, 0x28, 0x28, 0x28, 0xbd, 0x1d, - 0x38, 0xcd, 0x00, 0x00, 0x00, 0x2a, 0x31, 0xb5, 0x30, 0xa6, 0x30, 0x04, 0xb9, 0x30, 0xab, 0x30, 0xed, 0x28, 0x17, 0xa4, 0x30, 0x51, 0xca, 0x06, - 0x08, 0x17, 0x53, 0x28, 0x15, 0x75, 0x00, 0x74, 0x28, 0x1d, 0x15, 0x20, 0x00, 0x43, 0x2f, 0xad, 0x72, 0x28, 0x25, 0x6c, 0x2f, 0xb1, 0x75, 0x6e, - 0x05, 0x6f, 0x33, 0xd0, 0x73, 0x38, 0x9d, 0x64, 0x20, 0x8f, 0x20, 0x20, 0x97, 0x6b, 0x75, 0x05, 0x48, 0x9d, 0x07, 0xd0, 0xff, 0x61, 0x40, 0xff, - 0x65, 0x2f, 0xbb, 0x05, 0x71, 0x01, 0xa0, 0x00, 0xd0, 0x7f, 0x72, 0x05, 0x18, 0x17, 0x53, 0x61, 0x53, 0x57, 0x7f, 0x08, 0x65, 0x67, 0xb3, 0x7e, - 0x06, 0x58, 0x1b, 0xac, 0xc0, 0xb0, 0x00, 0xc6, 0xa4, 0xc2, 0x90, 0xce, 0x64, 0xb8, 0x7c, 0x06, 0xb7, 0x74, 0xc7, 0x98, 0xb0, 0x05, 0xf8, 0x1b, - 0x08, 0x32, 0x7f, 0x6f, 0xa2, 0x63, 0x7f, 0x6c, 0x05, 0x2f, 0xb4, 0x2e, 0x04, 0x36, 0x28, 0x0b, 0x30, 0x02, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x1a, - 0x20, 0x07, 0x40, 0x8e, 0x28, 0x27, 0x3b, 0x04, 0x38, 0x40, 0x13, 0x0d, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x29, 0x02, 0x2a, 0x07, 0x2a, 0x07, - 0x07, 0x29, 0x20, 0x06, 0x33, 0x00, 0x2a, 0x29, 0x29, 0x29, 0x29, 0x2d, 0x18, 0x61, 0x08, 0xc6, 0x00, 0x00, 0x2b, 0x68, 0x17, 0xc0, 0x30, 0xb3, - 0x35, 0x30, 0xbf, 0x06, 0x08, 0x13, 0xf8, 0x17, 0x44, 0x2f, 0xab, 0x6b, 0x2f, 0xbd, 0x7f, 0x74, 0x05, 0x68, 0x13, 0x3f, 0xff, 0xb0, 0x73, 0x05, - 0xf8, 0x13, 0x08, 0x30, 0xff, 0x05, 0xb8, 0x13, 0x00, 0xd0, 0x7f, 0xc0, 0x05, 0x18, 0x13, 0x58, 0x17, 0xbe, 0x8f, 0xd1, 0x79, 0xd6, 0x4e, 0xc0, - 0x06, 0x58, 0x15, 0x78, 0x17, 0xe4, 0xb2, 0x54, 0xcf, 0xc0, 0xd0, 0xf5, 0x05, 0xf8, 0x13, 0x08, 0x33, 0x7f, 0x05, 0xb8, 0x13, 0xf8, 0x17, 0x14, - 0x28, 0x1f, 0x3a, 0x28, 0x17, 0x70, 0x42, 0x05, 0x68, 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x2a, 0x2b, 0x0b, 0x2b, 0x10, 0x0b, 0x0b, - 0x2a, 0x20, 0x06, 0x32, 0x2b, 0x2a, 0x2a, 0x00, 0x2a, 0x2a, 0x8d, 0x1f, 0xa4, 0xb8, 0x00, 0x00, 0x00, 0x2c, 0x31, 0xc6, 0x30, 0xcd, 0x30, 0xb7, - 0x30, 0x6a, 0xfc, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x54, 0x2f, 0xa3, 0x6e, 0x4f, 0xa9, 0x73, 0xb0, 0x20, 0x01, 0x65, 0x2f, 0xb1, 0x10, 0x15, 0xd0, - 0x7f, 0x30, 0x75, 0xb3, 0x7e, 0x20, 0x7f, 0x89, 0x06, 0x78, 0x15, 0x00, 0x00, 0x4c, 0xd1, 0x24, 0x18, 0xb1, 0xdc, 0xc2, 0x06, 0x38, 0x11, 0x0f, - 0x53, 0x7f, 0x22, 0x04, 0x35, 0xab, 0x28, 0x17, 0x3d, 0x20, 0x05, 0x41, 0x20, 0x01, 0x38, 0x05, 0x88, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x00, 0x2b, - 0x2c, 0x2b, 0x2c, 0x2d, 0x2c, 0x2b, 0x2b, 0x10, 0x2c, 0x2c, 0x2f, 0x20, 0x05, 0x2b, 0x2b, 0xb7, 0x19, 0x04, 0x4a, 0xc2, 0x00, 0x00, 0x2d, 0x28, - 0x17, 0xad, 0x30, 0x15, 0xb5, 0x30, 0xb9, 0x06, 0xc8, 0x17, 0x78, 0x2f, 0xb3, 0x73, 0x06, 0x65, 0x98, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x97, 0x5f, - 0x4b, 0x51, 0x28, 0x84, 0xaf, 0x41, 0x65, 0x06, 0x7b, 0x17, 0x4d, 0xd1, 0xac, 0xc0, 0xa4, 0x06, 0xe8, 0x17, 0xc7, 0x0e, 0xb3, 0x7f, 0x38, 0x17, - 0x45, 0x04, 0x30, 0x28, 0x15, 0x10, 0x1e, 0x54, 0xff, 0x28, 0x14, 0x00, 0x2d, 0x2e, 0x2d, 0x2c, 0x2c, 0x2d, 0x2d, 0x30, 0x80, 0x20, 0x05, 0x2c, - 0x2c, 0x85, 0x15, 0x7f, 0xba, 0x00, 0x03, 0x00, 0x2e, 0x31, 0xe6, 0x30, 0xbf, 0x06, 0x88, 0x13, 0x3f, 0xff, 0x14, 0x55, 0x00, 0x74, 0x28, 0x15, - 0x68, 0x10, 0x16, 0x80, 0x7f, 0xb9, 0x72, 0x21, 0xd6, 0x4e, 0x06, 0xb2, 0xff, 0x20, 0xc7, 0xc0, 0xd0, 0x06, 0x98, 0x15, 0x8e, 0x0f, 0x13, 0x7f, - 0x2e, 0x04, 0x42, 0x28, 0x15, 0x10, 0x1e, 0x94, 0xff, 0x28, 0x14, 0x2e, 0x01, 0x2f, 0x2e, 0x2d, 0x2d, 0x2e, 0x2e, 0x34, 0x20, 0x05, 0x00, 0x2d, - 0x2d, 0xfc, 0x1c, 0x6f, 0xb0, 0x00, 0x00, 0x00, 0x2f, 0x31, 0xd0, 0x30, 0xfc, 0x30, 0xb8, 0x30, 0x10, 0xcb, 0x30, 0xa2, 0x06, 0x68, 0x1d, 0x56, - 0x00, 0x69, 0x00, 0x15, 0x72, 0x00, 0x67, 0x20, 0x05, 0x6e, 0x20, 0x09, 0x61, 0x06, 0xe0, 0x7f, 0x60, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x10, 0x7f, - 0x17, 0x5f, 0x09, 0x54, 0x3c, 0x20, 0x5c, 0x9a, 0x06, 0x88, 0x1b, 0x84, 0xbc, 0xc0, 0xc9, 0xc8, 0x1a, 0xb2, 0x44, 0xc5, 0x06, 0x78, 0x1b, 0x07, - 0x73, 0x7f, 0xed, 0x06, 0x63, 0xff, 0x12, 0x02, 0x04, 0x38, 0x04, 0x40, 0x04, 0x33, 0x20, 0x05, 0x3d, 0xb8, 0x20, 0x09, 0x4f, 0x06, 0x08, 0x21, - 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x2e, 0x30, 0x2f, 0x00, 0x30, 0x31, 0x30, 0x2e, 0x2e, 0x30, 0x30, 0x0a, 0x82, 0x20, 0x05, 0x2e, 0x2e, - 0xb4, 0x1a, 0xeb, 0x2c, 0xa3, 0x30, 0x82, 0x48, 0x17, 0xe2, 0x30, 0xf3, 0x30, 0xc8, 0x06, 0x88, 0x17, 0x65, 0x8a, 0x28, 0x17, 0x6d, 0x00, 0x6f, - 0x28, 0x17, 0x74, 0x10, 0x16, 0x20, 0x7f, 0x5b, 0x06, 0x4f, 0x99, 0x84, 0x79, 0x72, 0x06, 0x78, 0x15, 0x38, 0x17, 0xac, 0x18, 0xba, 0xb8, 0xd2, - 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x12, 0x04, 0x35, 0x8b, 0x28, 0x17, 0x3c, 0x04, 0x3e, 0x28, 0x17, 0x42, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, - 0xff, 0x01, 0x2f, 0x2f, 0x2e, 0x2f, 0x30, 0x2f, 0x2f, 0x20, 0x01, 0x40, 0x09, 0x40, 0x05, 0x79, 0x1f, 0x64, 0xcc, 0x00, 0x00, 0x05, 0x31, 0x31, - 0xef, 0x30, 0xb7, 0x48, 0x15, 0xf3, 0x06, 0x68, 0x17, 0x45, 0x57, 0x2f, 0x23, 0x73, 0x00, 0x68, 0x4f, 0xaf, 0x67, 0x28, 0x19, 0xd4, 0x38, 0x1f, - 0x10, 0x05, 0xb0, 0x7f, 0x53, 0x29, 0x8d, 0x61, 0x41, 0x77, 0x20, 0x00, 0x58, 0x64, 0x2f, 0xbb, 0x20, 0x05, 0xe1, 0x91, 0x06, 0xf1, 0xff, 0x4e, - 0x53, 0xdb, 0x10, 0x76, 0x7f, 0x98, 0x06, 0x98, 0x17, 0xcc, 0xc6, 0xf1, 0xc2, 0x30, 0x34, 0xd1, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x12, 0x04, - 0x30, 0x04, 0x16, 0x48, 0x04, 0x38, 0x28, 0x15, 0x33, 0x28, 0x17, 0x38, 0x1d, 0x20, 0x0a, 0x00, 0x28, 0x00, 0x48, 0x28, 0x23, 0x30, 0x28, 0x27, - 0x29, 0xc0, 0x10, 0x0d, 0x04, 0xff, 0x0e, 0xf6, 0x7f, 0x30, 0x31, 0x31, 0x31, 0x2c, 0x32, 0x00, 0x30, 0x30, 0x31, 0x32, 0x08, 0x31, 0x30, 0x30, - 0x00, 0x30, 0x30, 0x73, 0x21, 0x9b, 0xa8, 0x00, 0x00, 0x00, 0x32, 0x31, 0xa6, 0x30, 0xa3, 0x30, 0xb9, 0x30, 0x74, 0xb3, 0x28, 0x1b, 0x38, 0x1f, - 0x06, 0x1d, 0x37, 0x57, 0x28, 0x11, 0x73, 0x00, 0x58, 0x63, 0x4f, 0xaf, 0x73, 0x48, 0x1d, 0x10, 0x15, 0xd0, 0x7f, 0x01, 0x5a, 0xaf, 0x04, 0x65, - 0xb7, 0x5e, 0x1f, 0x66, 0x06, 0x78, 0x19, 0x04, 0xc7, 0x03, 0xa4, 0xc2, 0x58, 0xcf, 0xe0, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x45, 0x12, - 0x28, 0x13, 0x41, 0x04, 0x3a, 0x48, 0x11, 0x41, 0x48, 0x1f, 0x8a, 0x10, 0x1d, 0xd4, 0xff, 0x31, 0x33, 0x33, 0x20, 0x01, 0x31, 0x20, 0x06, 0x0b, - 0x80, 0x20, 0x05, 0x31, 0x31, 0xa1, 0x1e, 0x6e, 0xc0, 0x00, 0x28, 0x00, 0x33, 0x28, 0x17, 0xa7, 0x28, 0x17, 0xc8, 0x30, 0xd0, 0x00, 0x30, 0xfc, - 0x30, 0xb8, 0x30, 0xcb, 0x30, 0xa2, 0x8a, 0x05, 0xe8, 0x1b, 0x57, 0x00, 0x65, 0x2f, 0xaf, 0x74, 0x2e, 0xad, 0x56, 0xb7, 0x2f, 0xb3, 0x72, 0x2f, - 0xb3, 0x3f, 0xb9, 0x69, 0x2f, 0xc5, 0x05, 0x5f, 0xb6, 0xd0, 0x75, 0x55, 0x65, 0x2f, 0x35, 0x4f, 0x28, 0xa5, 0x63, 0x2f, 0xbf, 0x64, 0x20, 0x99, - 0x5b, 0x6e, 0x4f, 0x4d, 0x6c, 0x20, 0xa3, 0x0d, 0x50, 0xff, 0x61, 0x06, 0x00, 0xff, 0x01, 0x50, 0x7f, 0x80, 0x04, 0x9f, 0xcd, 0x7f, 0x89, 0x17, - 0x5f, 0x09, 0x54, 0x3c, 0x10, 0x5c, 0x9a, 0x4e, 0x06, 0x58, 0x19, 0xe8, 0xc6, 0xa4, 0xc2, 0x00, 0xb8, 0xd2, 0x84, 0xbc, 0xc0, 0xc9, 0xc8, 0xb2, - 0x36, 0x44, 0xc5, 0x06, 0x18, 0x1d, 0x07, 0x73, 0x7f, 0xed, 0xc2, 0x7f, 0x05, 0x71, 0xfd, 0x00, 0x02, 0x00, 0x17, 0x04, 0x30, 0x04, 0x3f, 0x20, - 0x03, 0x34, 0x82, 0x28, 0x17, 0x30, 0x04, 0x4f, 0x04, 0x20, 0x48, 0x29, 0x40, 0x2e, 0x04, 0x33, 0x48, 0x23, 0x38, 0x20, 0x11, 0x0c, 0xd4, 0xff, - 0x10, 0x0e, 0xf0, 0x7f, 0x32, 0x02, 0x32, 0x30, 0x32, 0x32, 0x31, 0x32, 0x20, 0x03, 0x0f, 0x80, 0x20, 0x04, 0x32, 0x32, 0x45, 0x1b, 0xf4, 0xc5, - 0x00, 0x00, 0x00, 0x34, 0x31, 0xef, 0x30, 0xa4, 0x30, 0xaa, 0x03, 0x30, 0xdf, 0x30, 0xf3, 0x30, 0xb0, 0x05, 0xe8, 0x11, 0x7f, 0xaf, 0x56, 0x79, - 0x2f, 0xab, 0x6d, 0x4f, 0xa9, 0x67, 0x06, 0x4d, 0x2f, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x06, 0x60, 0xc4, 0x4f, 0x0e, 0x66, 0x06, 0x58, 0x13, 0x3f, - 0xff, 0x40, 0x01, 0xc6, 0x74, 0xc7, 0x24, 0xc6, 0x0d, 0xbc, 0x06, 0x18, 0x11, 0xa0, 0x0f, 0x53, 0x7f, 0x12, 0x28, 0x17, 0x39, 0x04, 0x3e, 0x04, - 0x3c, 0xb1, 0x48, 0x07, 0x33, 0x04, 0xe8, 0x05, 0x10, 0x18, 0x14, 0xff, 0x33, 0x34, 0x34, 0x20, 0x01, 0x50, 0x33, 0x20, 0x06, 0x07, 0x20, 0x05, - 0x33, 0x33, 0x41, 0x1d, 0x00, 0x77, 0xb5, 0x00, 0x00, 0x35, 0x31, 0xd7, 0x30, 0x00, 0xa8, 0x30, 0xeb, 0x30, 0xc8, 0x30, 0xea, 0x30, 0x22, 0xb3, - 0x30, 0x06, 0x3d, 0x2f, 0x50, 0x00, 0x75, 0x2f, 0xa5, 0x72, 0xab, 0x2f, 0x97, 0x6f, 0x2f, 0xab, 0x52, 0x2f, 0xbd, 0x63, 0x28, 0x27, 0x05, 0xb0, - 0x7f, 0x60, 0x6f, 0x06, 0xa0, 0x7d, 0x10, 0x07, 0x10, 0xff, 0xe2, 0x6c, 0x1a, 0x59, 0xce, 0x10, 0x9e, 0x04, 0x54, 0x06, 0x78, 0x17, 0x78, 0xd4, - 0xd0, 0xc5, 0x00, 0x74, 0xb9, 0xa0, 0xd1, 0xac, 0xb9, 0x54, 0xcf, 0x80, 0x10, 0x06, 0x33, 0x7f, 0x1f, 0x04, 0x43, 0x04, 0x4d, 0x04, 0x40, 0x22, - 0x04, 0x42, 0x28, 0x1b, 0x2d, 0x00, 0x20, 0x28, 0x1d, 0x3a, 0xe0, 0x28, 0x25, 0x0d, 0xb4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x34, 0x28, 0x29, 0x28, - 0x2a, 0x01, 0x2a, 0x34, 0x34, 0x28, 0x2a, 0x2b, 0x28, 0x38, 0x22, 0x08, 0x22, 0x0d, 0xfe, 0xd0, 0x00, 0x3f, 0xff, 0x01, 0x09, 0x32, 0x00, 0x08, - 0x0d, 0x0d, 0x01, 0x01, 0x09, 0x0d, 0x28, 0x01, 0x09, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x70, 0x01, 0x52, 0x04, 0x40, 0x0a, 0x03, 0x30, 0x14, - 0x01, 0x03, 0x20, 0x06, 0x03, 0x85, 0x20, 0x05, 0x03, 0x03, 0x04, 0x04, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x4a, 0x05, 0x30, 0x14, 0x03, 0x05, 0x20, - 0x06, 0x05, 0x20, 0x05, 0x05, 0x06, 0x05, 0x06, 0x05, 0x05, 0x10, 0x20, 0x05, 0x20, 0x06, 0x12, 0x80, 0x20, 0x05, 0x06, 0x06, 0x07, 0x06, 0x08, - 0x05, 0x08, 0x20, 0x08, 0x07, 0x20, 0x06, 0x15, 0x06, 0x07, 0x07, 0x07, 0x01, 0x07, 0x08, 0x07, 0x09, 0x06, 0x09, 0x09, 0x20, 0x11, 0x00, 0x09, - 0x16, 0x07, 0x08, 0x08, 0x08, 0x08, 0x09, 0x04, 0x08, 0x0c, 0x07, 0x0c, 0x0c, 0x20, 0x11, 0x0c, 0x0d, 0x00, 0x08, 0x09, 0x09, 0x09, 0x09, 0x0a, - 0x0a, 0x0d, 0x00, 0x09, 0x0e, 0x0e, 0x0a, 0x0a, 0x0a, 0x0e, 0x31, 0x80, 0x20, 0x04, 0x0a, 0x0a, 0x0b, 0x0b, 0x0e, 0x0a, 0x0f, 0x02, 0x0f, 0x0b, - 0x0b, 0x0b, 0x0f, 0x0e, 0x20, 0x04, 0x0b, 0x00, 0x0b, 0x0c, 0x0c, 0x0f, 0x0b, 0x10, 0x10, 0x0c, 0x30, 0x0c, 0x0c, 0x30, 0x03, 0x20, 0x06, 0x0d, - 0x10, 0x13, 0x0f, 0x00, 0x14, 0x14, 0x0d, 0x0d, 0x10, 0x14, 0x02, 0x10, 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x10, 0x0c, 0x00, 0x11, 0x11, - 0x0e, 0x0e, 0x0d, 0x11, 0x01, 0x0d, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0e, 0x11, 0x0d, 0x00, 0x12, 0x12, 0x0f, 0x0f, 0x0e, 0x12, 0x10, 0x0e, - 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x0f, 0x12, 0x0e, 0x00, 0x13, 0x13, 0x10, 0x10, 0x0f, 0x13, 0x11, 0x0f, 0x00, 0x10, 0x10, 0x10, 0x10, 0x11, - 0x11, 0x14, 0x11, 0x01, 0x15, 0x15, 0x11, 0x11, 0x11, 0x15, 0x13, 0x20, 0x04, 0x00, 0x11, 0x11, 0x12, 0x12, 0x15, 0x12, 0x16, 0x16, 0x04, 0x12, - 0x12, 0x12, 0x16, 0x14, 0x20, 0x04, 0x12, 0x12, 0x00, 0x13, 0x13, 0x16, 0x13, 0x17, 0x17, 0x13, 0x13, 0x80, 0x50, 0x04, 0x13, 0x13, 0x14, 0x16, - 0x19, 0x16, 0x1a, 0x00, 0x1a, 0x14, 0x14, 0x16, 0x1a, 0x18, 0x16, 0x14, 0x00, 0x14, 0x14, 0x14, 0x15, 0x15, 0x18, 0x15, 0x19, 0x02, 0x19, 0x15, - 0x15, 0x15, 0x19, 0x1f, 0x20, 0x04, 0x15, 0x00, 0x15, 0x16, 0x14, 0x17, 0x14, 0x18, 0x18, 0x16, 0x00, 0x16, 0x14, 0x18, 0x1e, 0x14, 0x16, 0x16, - 0x16, 0x00, 0x16, 0x17, 0x17, 0x1a, 0x17, 0x1b, 0x1b, 0x17, 0x08, 0x17, 0x17, 0x1b, 0x1c, 0x20, 0x04, 0x17, 0x17, 0x18, 0x00, 0x18, 0x1b, 0x18, - 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x20, 0x1c, 0x19, 0x20, 0x04, 0x18, 0x18, 0x19, 0x1a, 0x1d, 0x00, 0x1a, 0x1e, 0x1e, 0x19, 0x19, 0x1a, 0x1e, 0x1b, - 0x10, 0x1a, 0x19, 0x19, 0x20, 0x07, 0x19, 0x1c, 0x19, 0x1d, 0x00, 0x1d, 0x1a, 0x1a, 0x19, 0x1d, 0x1a, 0x19, 0x1a, 0x00, 0x1a, 0x1a, 0x1a, 0x1b, - 0x1b, 0x1e, 0x1b, 0x1f, 0x02, 0x1f, 0x1b, 0x1b, 0x1b, 0x1f, 0x1d, 0x20, 0x04, 0x1b, 0x00, 0x1b, 0x1c, 0x22, 0x06, 0x22, 0x06, 0x06, 0x1c, 0x80, - 0x20, 0x06, 0x2e, 0x22, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x02, 0x23, 0x0a, 0x23, 0x0a, 0x0a, 0x1d, 0x20, 0x06, 0x2d, 0x00, 0x23, 0x1d, 0x1d, 0x1d, - 0x1d, 0x1e, 0x1c, 0x1f, 0x04, 0x1c, 0x20, 0x20, 0x1e, 0x1e, 0x20, 0x04, 0x1c, 0x1e, 0x00, 0x1e, 0x1e, 0x1e, 0x1f, 0x1e, 0x21, 0x1e, 0x22, 0x00, - 0x24, 0x1f, 0x1f, 0x1e, 0x22, 0x22, 0x1e, 0x1f, 0x00, 0x1f, 0x1f, 0x1f, 0x20, 0x1f, 0x22, 0x1f, 0x23, 0x00, 0x22, 0x20, 0x20, 0x1f, 0x24, 0x23, - 0x1f, 0x20, 0x00, 0x20, 0x20, 0x20, 0x21, 0x20, 0x24, 0x20, 0x25, 0x10, 0x25, 0x21, 0x21, 0x20, 0x04, 0x20, 0x21, 0x21, 0x21, 0x05, 0x21, 0x22, - 0x1d, 0x20, 0x1d, 0x20, 0x05, 0x22, 0x20, 0x04, 0x00, 0x1d, 0x22, 0x22, 0x22, 0x22, 0x23, 0x21, 0x23, 0x09, 0x21, 0x24, 0x23, 0x23, 0x20, 0x06, - 0x24, 0x21, 0x20, 0x06, 0x00, 0x23, 0x24, 0x24, 0x25, 0x24, 0x26, 0x26, 0x24, 0x60, 0x24, 0x50, 0x04, 0x20, 0x0d, 0x25, 0x26, 0x25, 0x27, 0x27, - 0x30, 0x25, 0x25, 0x50, 0x04, 0x20, 0x0d, 0x26, 0x27, 0x26, 0x28, 0x03, 0x28, 0x26, 0x26, 0x26, 0x28, 0x29, 0x20, 0x04, 0x20, 0x0d, 0x00, 0x27, - 0x28, 0x27, 0x29, 0x29, 0x27, 0x27, 0x27, 0x30, 0x29, 0x2a, 0x20, 0x04, 0x20, 0x0d, 0x29, 0x2a, 0x29, 0x2b, 0x00, 0x2b, 0x28, 0x28, 0x29, 0x2b, - 0x2c, 0x29, 0x28, 0x40, 0x28, 0x20, 0x07, 0x2a, 0x07, 0x2a, 0x07, 0x07, 0x29, 0x84, 0x20, 0x06, 0x33, 0x2a, 0x29, 0x29, 0x20, 0x07, 0x2b, 0x0b, - 0x08, 0x2b, 0x0b, 0x0b, 0x2a, 0x20, 0x06, 0x32, 0x2b, 0x2a, 0x40, 0x2a, 0x20, 0x07, 0x2c, 0x2b, 0x2c, 0x2d, 0x2c, 0x2b, 0x0c, 0x2b, 0x2c, 0x2c, - 0x2f, 0x20, 0x05, 0x20, 0x07, 0x2d, 0x2c, 0x00, 0x2d, 0x2e, 0x2d, 0x2c, 0x2c, 0x2d, 0x2d, 0x30, 0xc0, 0x20, 0x05, 0x20, 0x07, 0x2e, 0x2d, 0x2e, - 0x2f, 0x2e, 0x2d, 0x0c, 0x2d, 0x2e, 0x2e, 0x34, 0x20, 0x05, 0x20, 0x07, 0x30, 0x2f, 0x00, 0x30, 0x31, 0x30, 0x2e, 0x2e, 0x30, 0x30, 0x0a, 0x80, - 0x20, 0x05, 0x2e, 0x2e, 0x2f, 0x2f, 0x2e, 0x2f, 0x30, 0x28, 0x2f, 0x2f, 0x20, 0x01, 0x09, 0x40, 0x05, 0x30, 0x31, 0x31, 0x00, 0x31, 0x2c, 0x32, - 0x30, 0x30, 0x31, 0x32, 0x08, 0x19, 0x31, 0x30, 0x30, 0x20, 0x07, 0x3b, 0x34, 0x33, 0x31, 0x20, 0x06, 0x40, 0x0b, 0x20, 0x05, 0x31, 0x31, 0x32, - 0x32, 0x30, 0x32, 0x44, 0x32, 0x20, 0x05, 0x32, 0x31, 0x0f, 0x20, 0x04, 0x32, 0x32, 0xe0, 0xfb, 0x5f, 0xf3, 0x57, 0x7f, 0xf3, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x2c, 0xa3, 0x00, 0x11, 0x13, 0x00, 0x00, 0x30, 0x01, 0x32, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x37, 0xe7, 0x0f, 0xd8, 0x00, 0x00, 0x00, 0x02, 0x32, 0xe2, 0x30, 0xf3, 0x30, 0xc6, 0x01, - 0x30, 0xd3, 0x30, 0xc7, 0x30, 0xaa, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x01, 0x65, 0x00, 0x76, 0x00, - 0x69, 0x00, 0x64, 0x20, 0x07, 0x40, 0x6f, 0x10, 0x15, 0xc0, 0x7f, 0x99, 0x84, 0x97, 0x5f, 0xf4, 0x7e, 0x02, 0x84, 0x76, 0x9a, 0x4e, 0x01, 0x77, - 0x06, 0x3b, 0x21, 0xac, 0x00, 0xba, 0x4c, 0xd1, 0x44, 0xbe, 0x70, 0xb3, 0x24, 0x68, 0xc6, 0x06, 0x5b, 0x9f, 0x08, 0x13, 0x7f, 0x75, 0x05, 0xcc, - 0xa8, 0x1c, 0x04, 0x3e, 0x00, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x35, 0x04, 0x32, 0x09, 0x04, 0x38, 0x04, 0x34, 0x20, 0x07, 0x3e, 0x04, 0x10, 0x1d, - 0xb4, 0xff, 0x15, 0x01, 0x0a, 0x0a, 0x20, 0x01, 0x01, 0x20, 0x06, 0x07, 0x20, 0x05, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x32, 0xa2, 0x30, 0xeb, - 0x82, 0x28, 0x17, 0xa3, 0x30, 0xac, 0x30, 0xb9, 0x06, 0x48, 0x17, 0x41, 0x20, 0x00, 0x72, 0x28, 0x15, 0x69, 0x00, 0x67, 0x00, 0x61, 0x20, 0x00, - 0x73, 0x10, 0x16, 0x20, 0x7f, 0x3f, 0x96, 0x82, 0x84, 0xa0, 0x10, 0x52, 0xaf, 0x65, 0x06, 0x58, 0x15, 0x00, 0x00, 0x44, 0xc5, 0x00, 0x74, 0xb9, - 0xf0, 0xd2, 0x00, 0xac, 0xa4, 0xc2, 0xc4, 0x06, 0x5f, 0xb7, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x40, 0x28, 0x15, 0x38, 0x04, 0x06, 0x33, 0x04, 0x30, - 0x04, 0x41, 0x05, 0xc8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x00, 0x62, 0xea, - 0xd9, 0xd7, 0x00, 0x00, 0x04, 0x32, 0x06, 0xab, 0x30, 0xcd, 0x30, 0xed, 0x20, 0x03, 0x06, 0x58, 0x15, 0x00, 0x2a, 0x00, 0x43, 0x28, 0x0f, 0x6e, - 0x2f, 0xad, 0x6c, 0x4f, 0xb7, 0x65, 0xc0, 0x06, 0x08, 0x1b, 0x10, 0x0e, 0xf0, 0x7f, 0x61, 0x53, 0x85, 0x51, 0x1b, 0x6d, 0x20, 0x85, 0x51, 0x06, - 0x78, 0x19, 0x74, 0xce, 0x2c, 0xb1, 0x5c, 0x1a, 0xb8, 0x24, 0xb1, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x0f, 0x3d, 0x03, 0x04, 0x35, - 0x04, 0x3b, 0x04, 0x3e, 0x40, 0x07, 0x05, 0xf8, 0x1b, 0xa5, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, - 0x04, 0x03, 0x03, 0x74, 0xe7, 0xfb, 0x28, 0x17, 0x05, 0x32, 0x40, 0xbb, 0x28, 0x15, 0xfb, 0x30, 0xe9, 0x30, 0xeb, 0x30, 0x54, 0xb4, 0x06, 0x48, - 0x19, 0x43, 0x28, 0x13, 0x72, 0x2f, 0xb3, 0x6f, 0x00, 0x15, 0x20, 0x00, 0x4c, 0x2f, 0xb3, 0x72, 0x2f, 0xb9, 0x6f, 0x10, 0x15, 0xa0, 0x7f, 0x00, - 0x5e, 0x58, 0x57, 0x7f, 0xc9, 0x62, 0x14, 0x5c, 0x20, 0x08, 0x62, 0x06, 0x58, 0x17, 0x38, 0xc1, 0x5c, 0xb8, 0x7c, 0x06, 0xb7, 0x74, 0xb9, 0xe0, - 0xac, 0x06, 0x7b, 0x97, 0x0e, 0xd3, 0x7f, 0x21, 0xa0, 0x28, 0x13, 0x40, 0x20, 0x01, 0x3e, 0x04, 0x2d, 0x00, 0x1b, 0x8d, 0x28, 0x23, 0x40, 0x04, - 0x33, 0x28, 0x21, 0x10, 0x1d, 0x94, 0xff, 0x04, 0x38, 0x0c, 0x28, 0x03, 0x04, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x04, 0x04, 0xfc, 0x00, 0xe8, 0x79, - 0xd9, 0x00, 0x00, 0x06, 0x32, 0xb3, 0x8d, 0x28, 0x17, 0xcb, 0x30, 0xa2, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x6f, 0x6f, 0xab, 0x60, 0x69, 0x2f, 0xb9, - 0x10, 0x16, 0x10, 0x7f, 0xd1, 0x79, 0x1b, 0x6d, 0x3c, 0x10, 0x5c, 0x9a, 0x4e, 0x06, 0x58, 0x15, 0x00, 0x00, 0x5c, 0xcf, 0x02, 0x5c, 0xb8, 0xc8, - 0xb2, 0x44, 0xc5, 0x0e, 0xd3, 0x7f, 0xf4, 0xa8, 0x06, 0x83, 0xff, 0x1a, 0x28, 0x11, 0x3b, 0x28, 0x15, 0x3d, 0x04, 0x38, 0x34, 0x04, 0x4f, 0x05, - 0xa8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x80, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x7e, 0xe7, 0xdd, 0x00, 0xd6, 0x00, - 0x00, 0x07, 0x32, 0xc9, 0x30, 0xa5, 0x02, 0x30, 0xe9, 0x30, 0xb9, 0x30, 0xce, 0x06, 0x68, 0x19, 0x44, 0x23, 0x00, 0x75, 0x2f, 0xaf, 0x61, 0x00, - 0x7a, 0x28, 0x19, 0x05, 0xbf, 0xa7, 0x80, 0x10, 0x0f, 0x70, 0x7f, 0x5c, 0x67, 0xc9, 0x62, 0xaf, 0x65, 0xfa, 0x40, 0x8b, 0x06, 0x78, 0x17, 0x50, - 0xb4, 0x7c, 0xb7, 0xa4, 0xc2, 0x30, 0x78, 0xb1, 0x06, 0x7b, 0x97, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x43, 0x04, 0x05, 0x40, 0x04, 0x30, 0x04, 0x41, - 0x28, 0x19, 0x3e, 0x06, 0x28, 0x17, 0xa5, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x02, 0x20, 0x05, 0x00, 0x06, 0x06, - 0x3e, 0xe8, 0xd3, 0xd7, 0x00, 0x00, 0x01, 0x08, 0x32, 0xd5, 0x30, 0xed, 0x30, 0xec, 0x28, 0x17, 0xa0, 0x06, 0x7c, 0xaf, 0x46, 0x4f, 0xad, 0x72, - 0x00, 0x65, 0x00, 0x73, 0x80, 0x10, 0x16, 0x40, 0x7f, 0x17, 0x5f, 0x1b, 0x6d, 0xf7, 0x96, 0xaf, 0x40, 0x65, 0x06, 0x78, 0x17, 0x0c, 0xd5, 0x5c, - 0xb8, 0x08, 0xb8, 0x22, 0xa4, 0xc2, 0x10, 0x06, 0x73, 0x7f, 0x24, 0x04, 0x3b, 0x28, 0x0f, 0x40, 0x34, 0x04, 0x35, 0x28, 0x19, 0x10, 0x1e, 0x34, - 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0xa0, 0x20, 0x06, 0x12, 0x20, 0x05, 0x07, 0x07, 0x27, 0xe8, 0x8c, 0xa2, 0x28, 0x17, 0x09, 0x48, 0x17, 0xea, - 0x30, 0xc0, 0x07, 0x08, 0x17, 0x69, 0x30, 0x00, 0x64, 0x2f, 0xb5, 0x10, 0x16, 0x10, 0x7f, 0x5b, 0x4f, 0x57, 0x7f, 0x08, 0xcc, 0x91, 0xbe, 0x8f, - 0x06, 0xb8, 0x17, 0xac, 0xb9, 0xe4, 0x60, 0xb2, 0x10, 0x06, 0x73, 0x7f, 0x78, 0x17, 0x38, 0x04, 0x34, 0x04, 0x30, 0xd2, 0x06, 0x28, 0x19, 0x10, - 0x16, 0xf4, 0xff, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x20, 0x06, 0x13, 0x80, 0x20, 0x05, 0x08, 0x08, 0xc2, 0xe7, 0x07, 0xd8, 0x00, 0x00, 0x00, 0x0a, - 0x32, 0xe9, 0x30, 0xd0, 0x30, 0xb8, 0x0a, 0x30, 0xa7, 0x30, 0xcf, 0x06, 0x68, 0x19, 0x4c, 0x28, 0x0d, 0x76, 0xa3, 0x28, 0x11, 0x6c, 0x2f, 0xb7, - 0x65, 0x00, 0x6a, 0x06, 0x08, 0x1b, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0xc9, 0x62, 0xe6, 0x74, 0x36, 0x80, 0xc8, 0x54, 0x80, 0x06, 0x78, 0x17, 0x7c, - 0xb7, 0x14, 0xbc, 0x08, 0xc6, 0x58, 0x6a, 0xd5, 0x06, 0x7b, 0x97, 0x0e, 0xf3, 0x7f, 0x1b, 0x28, 0x0d, 0x32, 0x28, 0x11, 0x3b, 0x03, 0x04, 0x4c, - 0x04, 0x35, 0x04, 0x45, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x4a, 0x09, 0x38, 0x0c, 0x08, 0x09, 0x20, 0x06, 0x05, 0x20, 0x05, 0x09, 0x08, - 0x09, 0x90, 0xe7, 0xbb, 0x28, 0x17, 0x0b, 0x32, 0xde, 0x03, 0x30, 0xeb, 0x30, 0xc9, 0x30, 0xca, 0x20, 0x03, 0x06, 0x5d, 0x2f, 0x57, 0x4d, 0x48, - 0x13, 0x64, 0x2f, 0xb3, 0x6e, 0x2f, 0xaf, 0x30, 0x07, 0x10, 0x15, 0xd0, 0x7f, 0x00, 0x6c, 0x9a, 0x14, 0x5c, 0x1a, 0x59, 0xb3, 0x7e, 0x20, 0x1a, - 0x59, 0x06, 0x58, 0x19, 0xd0, 0xb9, 0xc4, 0xb3, 0x98, 0x1a, 0xb0, 0xc4, 0xb3, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x68, 0x13, 0x34, 0x0e, - 0x04, 0x3e, 0x04, 0x3d, 0x28, 0x23, 0x30, 0x07, 0x10, 0x1d, 0xb4, 0xff, 0x0a, 0x94, 0x38, 0x0c, 0x09, 0x0a, 0x20, 0x06, 0x06, 0x20, 0x05, 0x0a, - 0x0a, 0x10, 0x2f, 0xe7, 0xed, 0x28, 0x17, 0x0c, 0x32, 0xd1, 0x30, 0x05, 0xa4, 0x30, 0xb5, 0x30, 0xf3, 0x28, 0x1b, 0xa5, 0x06, 0x48, 0x19, 0x45, - 0x50, 0x2f, 0xaf, 0x79, 0x00, 0x73, 0x2f, 0xb5, 0x6e, 0x28, 0x1d, 0x40, 0xfa, 0x10, 0x16, 0x00, 0x7f, 0x3e, 0x6d, 0x51, 0x68, 0x5c, 0x67, 0xc0, - 0x06, 0x58, 0x13, 0x3f, 0xff, 0x0c, 0xd3, 0x74, 0xc7, 0xb0, 0xc0, 0x34, 0x50, 0xb4, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x28, 0x17, 0x39, - 0x04, 0x56, 0x41, 0x28, 0x1d, 0x3d, 0x28, 0x1b, 0x43, 0x05, 0xc8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0b, 0x50, 0x0b, 0x70, 0x01, 0x08, 0x40, 0x0a, - 0x05, 0xe9, 0xb4, 0xd6, 0x00, 0x00, 0x00, 0x0d, 0x32, 0xea, 0x30, 0xaa, 0x30, 0x01, 0xfb, 0x30, 0xcd, 0x30, 0xb0, 0x30, 0xed, 0x06, 0x48, 0x17, - 0x10, 0x52, 0x00, 0xed, 0x2f, 0xab, 0x20, 0x00, 0x4e, 0x00, 0x06, 0x65, 0x00, 0x67, 0x00, 0x72, 0x06, 0x0f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x85, - 0x01, 0x51, 0x3c, 0x68, 0x57, 0x7f, 0xb3, 0x6c, 0x06, 0x78, 0x19, 0x00, 0xac, 0xb9, 0x24, 0xc6, 0x24, 0xb1, 0xf8, 0xad, 0x30, 0x5c, 0xb8, 0x06, - 0x58, 0x99, 0x0e, 0xf3, 0x7f, 0x20, 0x04, 0x38, 0x04, 0x00, 0x3e, 0x04, 0x2d, 0x00, 0x1d, 0x04, 0x35, 0x04, 0x19, 0x33, 0x04, 0x40, 0x20, 0x0b, - 0x10, 0x1d, 0xd4, 0xff, 0x0c, 0x0c, 0x70, 0x01, 0x45, 0x0a, 0x40, 0x0a, 0x71, 0xe8, 0x8c, 0x28, 0x17, 0x0e, 0x28, 0x17, 0x18, 0xd9, 0x30, 0xe9, - 0x06, 0x48, 0x11, 0x78, 0x17, 0x69, 0x00, 0x76, 0xb0, 0x28, 0x13, 0x72, 0x2f, 0xb7, 0x10, 0x16, 0x30, 0x7f, 0xcc, 0x91, 0xe6, 0x97, 0x30, 0xc9, - 0x62, 0x06, 0x78, 0x15, 0x38, 0x17, 0xa0, 0xbc, 0x7c, 0xb7, 0xd1, 0x10, 0x06, 0x93, 0x7f, 0x38, 0x17, 0x32, 0x28, 0x13, 0x40, 0x04, 0x30, 0x05, - 0xe8, 0x11, 0x94, 0x10, 0x17, 0x54, 0xff, 0x0d, 0x0d, 0x70, 0x01, 0x09, 0x40, 0x0a, 0x07, 0xea, 0x00, 0x86, 0xd8, 0x00, 0x00, 0x0f, 0x32, 0xed, - 0x30, 0x10, 0xc1, 0x30, 0xe3, 0x06, 0xc8, 0x17, 0x6f, 0x00, 0x63, 0x00, 0x61, 0x68, 0x06, 0x68, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x57, 0x7f, 0x70, - 0x60, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0x5c, 0xb8, 0x28, 0xcc, 0x06, 0x9b, 0x95, 0x0f, 0x13, 0x7f, 0x06, 0x20, 0x04, 0x3e, 0x04, 0x47, 0x06, - 0x68, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0e, 0x50, 0x0e, 0x70, 0x01, 0x0b, 0x40, 0x0a, 0x7b, 0xe7, 0x5d, 0xd9, 0x00, 0x00, 0x00, 0x10, 0x32, 0xb5, - 0x30, 0xeb, 0x30, 0x51, 0xc8, 0x06, 0xa8, 0x17, 0x53, 0x2f, 0xa7, 0x6c, 0x00, 0x74, 0x28, 0x1d, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x28, 0x84, 0x14, - 0x5c, 0x58, 0x62, 0x06, 0x98, 0x19, 0x0d, 0xb4, 0xc0, 0xa0, 0xd1, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x13, 0x06, 0x3b, 0x04, 0x4c, - 0x04, 0x42, 0x28, 0x1f, 0x10, 0x1e, 0x34, 0xff, 0x0f, 0x50, 0x0f, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0xaf, 0xe9, 0xc8, 0xd6, 0x10, 0x00, 0x00, 0x11, - 0x28, 0x17, 0xf3, 0x30, 0xfb, 0x30, 0x18, 0xdb, 0x30, 0xbb, 0x06, 0x68, 0x1b, 0x38, 0x17, 0x6e, 0x00, 0x20, 0x22, 0x00, 0x4a, 0x2f, 0xb7, 0x73, - 0x00, 0xe9, 0x10, 0x16, 0x00, 0x7f, 0x23, 0x04, 0x57, 0x55, 0x4f, 0x5e, 0x58, 0x06, 0x98, 0x17, 0xb0, 0xc0, 0x0e, 0x38, 0xd6, 0x38, 0xc1, 0x06, - 0xdb, 0x97, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x3d, 0x08, 0x04, 0x2d, 0x00, 0x25, 0x28, 0x17, 0x41, 0x04, 0x35, 0xca, 0x06, 0x08, 0x1b, 0x10, 0x16, - 0xf4, 0xff, 0x10, 0x10, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x96, 0x00, 0xe7, 0xac, 0xd7, 0x00, 0x00, 0x12, 0x32, 0xbd, 0x03, 0x30, 0xea, 0x30, 0xa2, - 0x30, 0xce, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x07, 0x6f, 0x00, 0x72, 0x00, 0x69, 0x48, 0x1d, 0x06, 0x3f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x22, - 0x7d, 0xcc, 0x91, 0x9a, 0x4e, 0xfa, 0x8b, 0x80, 0x06, 0x78, 0x19, 0x8c, 0xc1, 0xac, 0xb9, 0x44, 0xc5, 0x78, 0x50, 0xb1, 0x10, 0x06, 0x73, 0x7f, - 0x21, 0x28, 0x0f, 0x40, 0x04, 0x4c, 0x04, 0x59, 0x4f, 0x28, 0x1d, 0x3e, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x11, 0x11, 0x70, 0x01, 0x40, - 0x0f, 0x40, 0x0a, 0x5a, 0xe8, 0xbe, 0xd6, 0x00, 0x00, 0x04, 0x13, 0x32, 0xbf, 0x30, 0xaf, 0x28, 0x17, 0xec, 0x30, 0x14, 0xf3, 0x30, 0xdc, 0x06, - 0x48, 0x1b, 0x54, 0x2f, 0xaf, 0x63, 0x00, 0x40, 0x75, 0x2f, 0xb5, 0x72, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x10, 0x62, 0x00, 0xf3, 0x10, 0x15, 0xd0, - 0x7f, 0x58, 0x38, 0x59, 0x26, 0x10, 0x4f, 0x5a, 0x53, 0x06, 0x78, 0x17, 0xc0, 0xd0, 0xe0, 0xcf, 0x03, 0x44, 0xc5, 0x18, 0xb8, 0xf4, 0xbc, 0x06, - 0x5b, 0x99, 0x0e, 0xf3, 0x7f, 0x01, 0x22, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x43, 0x20, 0x05, 0x01, 0x40, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x31, 0x05, - 0xe8, 0x1d, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x12, 0x70, 0x01, 0x10, 0x40, 0x0a, 0x70, 0xe9, 0x01, 0x31, 0xd8, 0x00, 0x00, 0x14, 0x32, 0xc8, - 0x28, 0x13, 0x44, 0xa4, 0x28, 0x15, 0xbf, 0x30, 0xfb, 0x20, 0x07, 0xfb, 0x30, 0xaa, 0x30, 0x0f, 0xb9, 0x05, 0xa8, 0x21, 0x54, 0x48, 0x0f, 0x69, - 0x2f, 0xad, 0x74, 0x8d, 0x2f, 0xb3, 0x20, 0x00, 0x79, 0x20, 0x03, 0x50, 0x13, 0x73, 0x10, 0x15, 0x40, 0x7f, 0x00, 0x09, 0x4e, 0x41, 0x53, 0x09, - 0x4e, 0xba, 0x4e, 0x80, 0x06, 0x78, 0x17, 0xb8, 0xd2, 0x08, 0xb8, 0x78, 0xc7, 0xc0, 0x13, 0xd0, 0x74, 0xc7, 0x30, 0x09, 0xa4, 0xc2, 0x06, 0x1b, - 0x97, 0x0e, 0xd3, 0x7f, 0x41, 0x22, 0x48, 0x0f, 0x39, 0x04, 0x3d, 0x04, 0x42, 0x28, 0x21, 0x1b, 0x2d, 0x00, 0x38, 0x20, 0x03, 0x50, 0x13, 0x41, - 0x05, 0x48, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x13, 0x13, 0x70, 0x01, 0x11, 0x40, 0x0a, 0x5f, 0xe8, 0x54, 0x45, 0xd9, 0x00, 0x3f, 0xff, 0x01, - 0x0a, 0x0a, 0x20, 0x01, 0x01, 0x20, 0x06, 0x44, 0x07, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, 0x02, - 0x02, 0x03, 0x30, 0x04, 0x02, 0x51, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x04, 0x30, 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, 0x0e, 0x20, - 0x05, 0x04, 0x04, 0x05, 0x90, 0x30, 0x04, 0x04, 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x4a, 0x06, 0x30, 0x04, 0x05, 0x06, 0x20, 0x06, 0x02, - 0x20, 0x05, 0x06, 0x25, 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x12, 0x20, 0x05, 0x12, 0x07, 0x07, 0x08, 0x30, 0x04, 0x07, 0x08, 0x20, - 0x06, 0x13, 0x89, 0x20, 0x05, 0x08, 0x08, 0x09, 0x30, 0x04, 0x08, 0x09, 0x20, 0x06, 0x44, 0x05, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x09, - 0x0a, 0xa1, 0x20, 0x06, 0x06, 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x0b, 0x70, 0x01, 0x4a, 0x08, 0x40, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x0a, 0x40, 0x0a, - 0x0d, 0x52, 0x0d, 0x70, 0x01, 0x09, 0x40, 0x0a, 0x0e, 0x0e, 0x70, 0x01, 0x0b, 0x94, 0x40, 0x0a, 0x0f, 0x0f, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x10, - 0x10, 0xa5, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x11, 0x11, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0xe0, 0xf9, 0x4f, 0xf1, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x33, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x0b, 0x0d, 0xd4, 0xd1, 0x00, 0x00, 0x00, 0x01, 0x33, 0x73, 0x7c, 0x18, 0x98, 0xd0, 0x00, - 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xf3, 0x30, 0xf8, 0x10, 0x8a, 0xf6, 0x5c, 0x05, 0xf8, 0x25, 0x55, 0x00, 0x53, 0x00, 0x00, 0x20, 0x00, 0x56, 0x00, - 0x69, 0x00, 0x72, 0x00, 0x50, 0x67, 0x20, 0x05, 0x6e, 0x20, 0x0d, 0x49, 0x00, 0x73, 0x00, 0x16, 0x6c, 0x00, 0x61, 0x20, 0x0b, 0x64, 0x20, 0x09, - 0x04, 0xd8, 0xb7, 0xce, 0xb6, 0x20, 0x69, 0x65, 0x20, 0x6f, 0x50, 0x83, 0x65, 0x40, 0x85, 0x50, 0x0f, 0x61, 0x08, 0x00, 0x6d, 0x00, 0xe9, 0x20, - 0x95, 0x69, 0x00, 0x63, 0xf6, 0x20, 0x8b, 0x30, 0x99, 0x30, 0x27, 0x03, 0xf9, 0x45, 0x41, 0x20, 0x65, 0x30, 0x75, 0x69, 0x28, 0x00, 0x6b, 0x40, - 0xf1, 0x69, 0x20, 0xfb, 0x63, 0x00, 0x68, 0x82, 0x20, 0x93, 0x20, 0x00, 0x4a, 0x00, 0x75, 0x21, 0x0f, 0x67, 0x35, 0x00, 0x66, 0x40, 0x97, 0x30, - 0x1b, 0x6e, 0x21, 0x19, 0x65, 0x21, 0x1b, 0x6f, 0x6e, 0x03, 0x89, 0xcc, 0x31, 0x6b, 0x6f, 0x41, 0x03, 0x31, 0x85, 0x50, 0xff, 0x31, 0x85, 0x45, - 0x69, 0x21, 0x95, 0x53, 0x00, 0x74, 0x21, 0x85, 0x74, 0x40, 0x85, 0x57, 0x69, 0x20, 0x0b, 0x65, 0x40, 0x7f, 0x69, 0x03, 0xca, 0x48, 0x71, 0xeb, - 0x51, 0x81, 0x6d, 0xed, 0x61, 0x7f, 0x51, 0x6b, 0x20, 0x21, 0xff, 0x31, 0x07, 0x6c, 0x20, 0xa1, 0xaa, 0x31, 0xa1, 0x45, 0x20, 0x01, 0x2e, 0x22, - 0x2d, 0x55, 0x22, 0x35, 0x2e, 0x80, 0x03, 0x6a, 0xce, 0x8e, 0x7f, 0x5e, 0x5c, 0xf4, 0x7e, 0x14, 0x02, 0x5c, 0xac, 0x4e, 0xa4, 0x7f, 0x9b, 0x06, - 0x02, 0xfd, 0x00, 0x00, 0x00, 0xf8, 0xbb, 0x6d, 0xad, 0x39, 0xb8, 0x20, 0x00, 0x00, 0x84, 0xbc, 0xc4, 0xc9, 0x44, 0xc5, 0x7c, 0x07, 0xc7, 0x9c, - 0xb7, 0xdc, 0xb4, 0x05, 0xbb, 0xa9, 0xd2, 0x7f, 0x33, 0x73, 0x8b, 0x32, 0x61, 0x20, 0x00, 0x4d, 0x40, 0x0d, 0x67, 0x41, 0x81, 0x32, 0xf9, 0x77, - 0x69, 0x83, 0x91, 0x32, 0x05, 0x03, 0xb1, 0xff, 0x6c, 0x22, 0xed, 0x71, 0xff, 0x54, 0x05, 0xb6, 0x52, 0x67, 0x20, 0xa3, 0x1b, 0x33, 0x81, 0x6e, - 0x42, 0x25, 0x03, 0xfc, 0xc5, 0x10, 0x00, 0x04, 0x3c, 0x04, 0x35, 0x04, 0x40, 0x04, 0x38, 0x00, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x41, - 0xa2, 0x20, 0x07, 0x38, 0x20, 0x11, 0x20, 0x00, 0x12, 0x20, 0x13, 0x40, 0x35, 0x04, 0x33, 0x20, 0x19, 0xb0, 0x15, 0x3e, 0x20, 0x21, 0x42, 0x20, - 0x2f, 0x1c, 0x3e, 0x04, 0x32, 0x20, 0x2f, 0x0b, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, - 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1c, 0xd4, 0x00, 0x11, 0x19, 0x00, 0x00, - 0x30, 0x01, 0x34, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x77, 0x07, 0x6b, 0xd0, 0x00, 0x00, 0x00, - 0x02, 0x34, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, 0x30, 0xc8, 0x30, 0xea, 0x20, 0x03, 0x96, 0x99, 0xfd, 0x04, 0x90, 0x30, 0x57, 0x3a, 0x53, 0x05, - 0xb8, 0x29, 0x44, 0x00, 0x01, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x20, 0x07, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x46, 0x00, 0x10, - 0x65, 0x00, 0x64, 0x20, 0x03, 0x72, 0x00, 0x61, 0x00, 0x5a, 0x6c, 0x05, 0xc0, 0x7f, 0x63, 0x20, 0x87, 0x30, 0x7f, 0xe9, 0x20, 0x7f, 0xe9, 0xb5, - 0x05, 0x60, 0x7f, 0x43, 0x20, 0xe5, 0x30, 0xe9, 0x63, 0x20, 0xed, 0x73, 0x20, 0xfd, 0x15, 0x44, 0x00, 0x2e, 0x21, 0x01, 0x2e, 0x06, 0x21, 0x7f, - 0x65, 0x21, 0x85, 0xdb, 0x51, 0x81, 0x30, 0x93, 0x70, 0x41, 0x8f, 0x31, 0x81, 0x65, 0x05, 0xe1, 0xff, 0xd0, 0x7d, 0xf0, 0x04, 0xfa, 0xb5, 0x32, - 0xf3, 0x05, 0xd2, 0xf1, 0xdb, 0x87, 0xa0, 0xbc, 0x24, 0xb1, 0x00, 0x18, 0xc2, 0xd8, 0xc5, 0x7c, 0xb7, 0x20, 0x00, 0x02, 0xf0, 0xc5, 0x29, 0xbc, - 0x6c, 0xad, 0x05, 0xdb, 0xa7, 0x48, 0x8e, 0x23, 0x73, 0x6f, 0x00, 0x66, 0x23, 0x71, 0x33, 0x85, 0x53, 0x79, 0x6c, 0x8e, 0x23, 0x93, 0x6a, 0x00, - 0x6b, 0x42, 0x8d, 0xd3, 0x1d, 0x0c, 0x13, 0xff, 0x24, 0x08, 0x04, 0x35, 0x04, 0x34, 0x20, 0x03, 0x40, 0x04, 0x30, 0x00, 0x04, 0x3b, 0x04, 0x4c, - 0x04, 0x3d, 0x04, 0x4b, 0x00, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x04, 0x3a, 0x86, 0x20, 0x13, 0x43, 0x04, 0x33, 0x04, 0x0d, 0x94, 0xff, 0x10, - 0x0e, 0x30, 0x7f, 0x01, 0x00, 0x0b, 0x0b, 0x08, 0x0b, 0x0b, 0x01, 0x01, 0x0d, 0x24, 0x0b, 0x18, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x34, - 0x01, 0xa2, 0x30, 0xde, 0x30, 0xbd, 0x30, 0xca, 0x28, 0x1b, 0x8a, 0x06, 0x5f, 0xb7, 0x41, 0x00, 0x6d, 0x27, 0xff, 0x7a, 0x28, 0x11, 0x6e, 0xf8, - 0x47, 0x19, 0x06, 0xb0, 0x7f, 0x04, 0xd7, 0x01, 0x09, 0x10, 0xff, 0x0e, 0x30, 0x7f, 0x9a, 0x4e, 0x6c, 0x01, 0x9a, 0x59, 0x5b, 0xb9, 0x8f, 0x86, - 0x75, 0x06, 0x58, 0x1d, 0x00, 0x44, 0xc5, 0xc8, 0xb9, 0x8c, 0xc1, 0x98, 0xb0, 0x31, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0x06, 0x33, 0xff, 0x10, 0x04, - 0x3c, 0x28, 0x11, 0x1e, 0x41, 0x04, 0x3e, 0x28, 0x11, 0x30, 0x07, 0x10, 0x0d, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, - 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, 0x04, 0xea, 0xcf, 0x00, 0x00, 0x04, 0x28, 0x17, 0x41, 0xf3, 0x28, 0x17, 0xa2, 0x30, 0xc6, 0x30, - 0xae, 0x06, 0x48, 0x19, 0x68, 0x41, 0x28, 0x0f, 0x38, 0x15, 0xe1, 0x4c, 0xad, 0x67, 0x00, 0x75, 0xc0, 0x2f, 0xbf, 0x10, 0x15, 0xb0, 0x7f, 0x89, - 0x5b, 0x22, 0x7d, 0x3f, 0x96, 0x02, 0x79, 0x72, 0x09, 0x54, 0xde, 0x5d, 0x06, 0x3b, 0x19, 0x48, 0x00, 0xc5, 0x8c, 0xc1, 0x44, 0xc5, 0x4c, 0xd1, - 0x30, 0x6c, 0xae, 0x06, 0x7b, 0x97, 0x0e, 0xd3, 0x7f, 0x10, 0x28, 0x0f, 0x38, 0x15, 0x30, 0x04, 0x01, 0x42, 0x04, 0x35, 0x04, 0x33, 0x04, 0x38, - 0x05, 0xe8, 0x19, 0xa4, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, 0x03, 0x34, 0x07, 0xfe, 0xd1, - 0x00, 0x00, 0x46, 0x05, 0x28, 0x17, 0xd7, 0x30, 0xec, 0x06, 0x48, 0x11, 0x7f, 0xaf, 0x70, 0xb0, 0x28, 0x0b, 0x72, 0x06, 0x4f, 0xab, 0x10, 0x0f, - 0x30, 0x7f, 0x3f, 0x96, 0x6e, 0x66, 0x30, 0xf7, 0x96, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x44, 0xc5, 0x78, 0xd4, 0x20, 0x08, 0xb8, 0x10, 0x06, 0x93, - 0x7f, 0x10, 0x04, 0x3f, 0x04, 0x43, 0x34, 0x04, 0x40, 0x28, 0x13, 0x10, 0x1e, 0x54, 0xff, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x80, 0x40, 0x06, 0x04, - 0x04, 0x04, 0x04, 0x9d, 0x05, 0x06, 0x08, 0xd0, 0x00, 0x00, 0x06, 0x28, 0x17, 0xe9, 0x30, 0xb0, 0x2a, 0x30, 0xa2, 0x06, 0x88, 0x19, 0x41, 0x28, - 0x13, 0x61, 0x4f, 0xa7, 0x61, 0x81, 0x10, 0x16, 0x40, 0x7f, 0x3f, 0x96, 0xc9, 0x62, 0xdc, 0x74, 0x06, 0xb8, 0x17, 0x0d, 0x7c, 0xb7, 0xfc, 0xac, - 0x06, 0xbb, 0x97, 0x0e, 0xd3, 0x7f, 0x10, 0x28, 0x13, 0x16, 0x30, 0x04, 0x33, 0x28, 0x1b, 0x30, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x05, - 0x90, 0x38, 0x0c, 0x04, 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x00, 0x49, 0x07, 0xef, 0xcf, 0x00, 0x00, 0x07, 0x34, 0x01, 0xd0, 0x30, 0xea, - 0x30, 0xca, 0x30, 0xb9, 0x06, 0x88, 0x17, 0x41, 0x42, 0x28, 0x15, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x28, 0x1d, 0x40, 0x73, 0x10, 0x16, 0x20, 0x7f, - 0xf4, 0x5d, 0xcc, 0x91, 0xb3, 0x7e, 0x20, 0xaf, 0x65, 0x06, 0x78, 0x19, 0x14, 0xbc, 0xac, 0xb9, 0x98, 0x14, 0xb0, 0xa4, 0xc2, 0x10, 0x06, 0x73, - 0x7f, 0x11, 0x28, 0x15, 0x40, 0x04, 0x16, 0x38, 0x04, 0x3d, 0x28, 0x1d, 0x41, 0x06, 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x90, 0x38, 0x0c, - 0x05, 0x06, 0x40, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x22, 0x06, 0x14, 0xce, 0x00, 0x00, 0x08, 0x34, 0x41, 0xdc, 0x28, 0x17, 0xfc, 0x30, 0xd0, - 0x30, 0xeb, 0x06, 0x68, 0x19, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0xed, 0x00, 0x60, 0x76, 0x48, 0x1f, 0x10, 0x16, 0x10, 0x7f, 0xbb, 0x73, - 0x29, 0x52, 0xe6, 0x14, 0x74, 0x14, 0x5c, 0x06, 0x78, 0x17, 0xfc, 0x28, 0x17, 0x14, 0xbc, 0x30, 0x74, 0xb9, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, - 0x11, 0x04, 0x3e, 0x04, 0x5a, 0x3b, 0x28, 0x17, 0x32, 0x48, 0x1f, 0x10, 0x1e, 0x14, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x40, 0x07, 0x40, 0x06, 0x07, - 0x07, 0x07, 0x07, 0xc6, 0x05, 0x00, 0xd0, 0xd2, 0x00, 0x00, 0x09, 0x34, 0xab, 0x30, 0x1a, 0xe9, 0x30, 0xdc, 0x20, 0x01, 0x06, 0x7c, 0xaf, 0x43, - 0x4f, 0xaf, 0x61, 0x38, 0x00, 0x62, 0x28, 0x1f, 0x30, 0x03, 0x10, 0x15, 0xf0, 0x7f, 0x61, 0x53, 0xc9, 0x04, 0x62, 0x83, 0x6c, 0x83, 0x6c, 0x06, - 0x78, 0x17, 0x74, 0xce, 0x02, 0x7c, 0xb7, 0xf4, 0xbc, 0xf4, 0xbc, 0x10, 0x06, 0x73, 0x7f, 0x1a, 0x8e, 0x48, 0x0f, 0x30, 0x04, 0x31, 0x28, 0x1f, - 0x30, 0x03, 0x10, 0x1d, 0xf4, 0xff, 0x08, 0x94, 0x38, 0x0c, 0x07, 0x08, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x08, 0x08, 0x00, 0x3d, 0x07, 0xa5, 0xcf, - 0x00, 0x00, 0x0a, 0x34, 0x01, 0xb3, 0x30, 0xd8, 0x30, 0xc7, 0x30, 0xb9, 0x06, 0xa8, 0x17, 0x01, 0x6f, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x64, 0x20, - 0x03, 0x40, 0x73, 0x10, 0x16, 0x20, 0x7f, 0xd1, 0x79, 0x6b, 0x8d, 0xb7, 0x5f, 0x20, 0xaf, 0x65, 0x06, 0x78, 0x17, 0x54, 0xcf, 0xe4, 0xd5, 0x70, - 0x14, 0xb3, 0xa4, 0xc2, 0x10, 0x06, 0x73, 0x7f, 0x1a, 0x28, 0x0f, 0x45, 0x04, 0x16, 0x35, 0x04, 0x34, 0x20, 0x03, 0x41, 0x06, 0x08, 0x15, 0x10, - 0x17, 0x14, 0xff, 0x09, 0x34, 0x08, 0x08, 0x30, 0x02, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, 0x09, 0x10, 0xdf, 0x06, 0x38, 0x28, 0x17, 0x0b, 0x34, - 0xc7, 0x30, 0x00, 0xeb, 0x30, 0xbf, 0x30, 0xfb, 0x30, 0xa2, 0x30, 0x05, 0xde, 0x30, 0xaf, 0x30, 0xed, 0x06, 0x08, 0x1f, 0x44, 0x28, 0x13, 0x10, - 0x6c, 0x00, 0x74, 0x2f, 0xb5, 0x20, 0x00, 0x41, 0x00, 0x47, 0x6d, 0x2f, 0xbd, 0x63, 0x00, 0x75, 0x2f, 0xc1, 0x05, 0x7f, 0xb9, 0x10, 0x0e, 0xf0, - 0x7f, 0x00, 0x3f, 0x96, 0x6c, 0x9a, 0x93, 0x5e, 0x57, 0x7f, 0x00, 0x09, 0x4e, 0xd2, 0x89, 0x32, 0x6d, 0xb9, 0x8f, 0x08, 0x86, 0x75, 0x3a, 0x53, - 0x05, 0xbf, 0xbb, 0x78, 0xb3, 0xc0, 0x00, 0xd0, 0x44, 0xc5, 0xc8, 0xb9, 0xe0, 0xcf, 0x5c, 0x68, 0xb8, 0x06, 0x3b, 0x9b, 0x0e, 0xf3, 0x7f, 0x14, - 0x28, 0x13, 0x3b, 0x04, 0x4c, 0x00, 0x04, 0x42, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x10, 0x20, 0x04, 0x3c, 0x20, 0x07, 0x3a, 0x04, 0x43, 0x04, 0x40, - 0xc7, 0x28, 0x2f, 0x10, 0x1d, 0x34, 0xff, 0x0a, 0x09, 0x09, 0x30, 0x02, 0x20, 0x06, 0x30, 0x05, 0x00, 0x0a, 0x0a, 0x72, 0x06, 0xe1, 0xd3, 0x00, - 0x00, 0x04, 0x0c, 0x34, 0xd5, 0x30, 0xa1, 0x28, 0x19, 0xb3, 0x30, 0x6a, 0xf3, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x46, 0x28, 0x11, 0x6c, 0x28, 0x0b, - 0xf3, 0x20, 0x00, 0x6e, 0x10, 0x16, 0x40, 0x7f, 0xd5, 0x6c, 0x14, 0x5c, 0x54, 0x11, 0x5b, 0xde, 0x5d, 0x06, 0x7f, 0xaf, 0x14, 0xd3, 0x58, 0x2b, - 0x9f, 0xda, 0x06, 0x90, 0x01, 0x0e, 0xf3, 0x7f, 0x24, 0x28, 0x0f, 0x38, 0x17, 0x3a, 0x28, 0x07, 0x3d, 0xc4, 0x05, 0x48, 0x09, 0x10, 0x17, 0xd4, - 0xff, 0x0b, 0x0c, 0x0c, 0x20, 0x01, 0x0b, 0x0b, 0x10, 0x0a, 0x0c, 0x16, 0x20, 0x05, 0x0b, 0x0b, 0x1c, 0x08, 0x00, 0x76, 0xce, 0x00, 0x00, 0x0d, - 0x34, 0xb0, 0x30, 0x1a, 0xa2, 0x30, 0xea, 0x28, 0x17, 0x06, 0x75, 0x17, 0x47, 0x2f, 0x9d, 0xe1, 0xb8, 0x2f, 0x9f, 0x69, 0x2f, 0xa7, 0x05, 0x7f, - 0xa3, 0x10, 0x0f, 0xb0, 0x7f, 0xdc, 0x74, 0xcc, 0x10, 0x91, 0xd1, 0x79, 0x06, 0x98, 0x17, 0xfc, 0xac, 0xac, 0xb9, 0x62, 0x54, 0x06, 0xa8, 0x19, - 0x0e, 0xf3, 0x7f, 0x13, 0x04, 0x43, 0x28, 0x19, 0x40, 0x31, 0x04, 0x38, 0x48, 0x19, 0x10, 0x1e, 0x14, 0xff, 0x0c, 0x0d, 0x0d, 0x20, 0x01, 0x90, - 0x28, 0x1c, 0x0d, 0x08, 0x30, 0x05, 0x0c, 0x0c, 0x07, 0x1a, 0x00, 0xd0, 0x00, 0x00, 0x0e, 0x34, 0xe9, 0x30, 0xe9, 0xd6, 0x06, 0x88, 0x13, 0x3f, - 0xff, 0x4c, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x10, 0x16, 0x70, 0x7f, 0xc9, 0x10, 0x62, 0x4a, 0x81, 0x06, 0x98, 0x15, 0x00, 0x00, 0x7c, 0xb7, 0x2b, - 0x7c, 0xb7, 0x10, 0x06, 0xb3, 0x7f, 0x1b, 0x48, 0x15, 0x30, 0x06, 0x28, 0x11, 0x10, 0x17, 0x54, 0xff, 0x15, 0x0d, 0x0e, 0x0e, 0x20, 0x01, 0x0d, - 0x20, 0x06, 0x0c, 0x20, 0x05, 0x00, 0x0d, 0x0d, 0x29, 0x07, 0xb5, 0xce, 0x00, 0x00, 0x01, 0x0f, 0x34, 0xe1, 0x30, 0xea, 0x30, 0xc0, 0x06, 0xa8, - 0x19, 0x16, 0x4d, 0x00, 0xe9, 0x4f, 0xad, 0x64, 0x06, 0x68, 0x1b, 0x10, 0x0e, 0xf0, 0x7f, 0x85, 0x04, 0x68, 0xcc, 0x91, 0xbe, 0x8f, 0x06, 0x98, - 0x19, 0x54, 0xba, 0x08, 0xac, 0xb9, 0xe4, 0xb2, 0x10, 0x06, 0x93, 0x7f, 0x1c, 0x04, 0x35, 0x8c, 0x28, 0x17, 0x38, 0x04, 0x34, 0x06, 0x68, 0x1b, - 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x0f, 0x54, 0x0f, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0e, 0x0e, 0x00, 0x1d, 0x06, 0x69, 0xcd, 0x00, - 0x00, 0x10, 0x34, 0x05, 0xdf, 0x30, 0xe9, 0x30, 0xf3, 0x06, 0xa8, 0x19, 0x4d, 0x28, 0x13, 0xb0, 0x3f, 0xaf, 0x6e, 0x06, 0x68, 0x19, 0x10, 0x0e, - 0xf0, 0x7f, 0x73, 0x7c, 0x70, 0x51, 0x86, 0x06, 0xb8, 0x17, 0xf8, 0xbb, 0x80, 0xb7, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, 0x1c, 0xac, 0x28, 0x13, - 0x40, 0x28, 0x13, 0x3d, 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0f, 0x10, 0x54, 0x10, 0x20, 0x01, 0x0f, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x0f, - 0x0f, 0x00, 0x5a, 0x07, 0x54, 0xd0, 0x00, 0x00, 0x11, 0x34, 0x01, 0xe2, 0x30, 0xca, 0x30, 0xac, 0x30, 0xb9, 0x06, 0xa8, 0x17, 0x45, 0x6f, 0x28, - 0x13, 0x61, 0x00, 0x67, 0x2f, 0xaf, 0x73, 0x10, 0x16, 0x20, 0x7f, 0x00, 0xab, 0x83, 0xb3, 0x7e, 0xa0, 0x52, 0xaf, 0x65, 0x80, 0x06, 0x78, 0x19, - 0xa8, 0xba, 0x98, 0xb0, 0x00, 0xac, 0xa4, 0x44, 0xc2, 0x10, 0x06, 0x73, 0x7f, 0x1c, 0x04, 0x3e, 0x28, 0x13, 0x30, 0x04, 0x58, 0x33, 0x28, 0x1b, - 0x41, 0x06, 0x48, 0x17, 0x10, 0x16, 0xd4, 0xff, 0x10, 0x11, 0x11, 0xa8, 0x20, 0x01, 0x10, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x10, 0x10, 0xee, 0x00, - 0x06, 0x14, 0xd3, 0x00, 0x00, 0x12, 0x34, 0xcc, 0x08, 0x30, 0xa8, 0x30, 0xd0, 0x20, 0x03, 0xb9, 0x30, 0xd1, 0x08, 0x30, 0xeb, 0x30, 0xbf, 0x06, - 0x08, 0x1f, 0x4e, 0x00, 0x75, 0x08, 0x00, 0x65, 0x00, 0x76, 0x2f, 0xb1, 0x20, 0x00, 0x45, 0xa3, 0x28, 0x19, 0x70, 0x2f, 0xbb, 0x72, 0x00, 0x74, - 0x05, 0x8f, 0xbb, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0xb0, 0x65, 0xc3, 0x57, 0xaf, 0x65, 0x15, 0x5e, 0x20, 0x54, 0x58, 0x06, 0x58, 0x19, 0x04, 0xb2, - 0xd0, 0xc5, 0x14, 0x00, 0xbc, 0xd0, 0xc5, 0xa4, 0xc2, 0x0c, 0xd3, 0x74, 0x34, 0xb9, 0xc0, 0x2b, 0xab, 0x0d, 0xf3, 0x7f, 0x6f, 0x06, 0xa3, 0xfd, - 0x00, 0x00, 0x01, 0x1d, 0x04, 0x43, 0x04, 0x4d, 0x04, 0x32, 0x28, 0x19, 0x14, 0x2d, 0x00, 0x2d, 0x28, 0x19, 0x3f, 0x28, 0x23, 0x40, 0x04, 0x62, - 0x42, 0x28, 0x29, 0x10, 0x1d, 0x54, 0xff, 0x11, 0x12, 0x12, 0x20, 0x01, 0x11, 0xa0, 0x20, 0x06, 0x10, 0x20, 0x05, 0x11, 0x11, 0xd8, 0x07, 0x97, - 0x02, 0xd2, 0x00, 0x00, 0x13, 0x34, 0xdd, 0x28, 0x0d, 0xc8, 0x03, 0x30, 0xa5, 0x30, 0xb2, 0x30, 0xb5, 0x06, 0x08, 0x13, 0x3f, 0xff, 0x6d, 0x50, - 0x2f, 0xaf, 0x38, 0x07, 0x75, 0x2f, 0xb1, 0x38, 0x21, 0x73, 0x05, 0xa4, 0x13, 0x80, 0x10, 0x0f, 0x30, 0x7f, 0xe2, 0x6c, 0xfe, 0x56, 0x3c, 0x68, - 0x28, 0x44, 0x84, 0x06, 0x58, 0x15, 0x00, 0x00, 0xec, 0x28, 0x0d, 0x2c, 0xd2, 0x0c, 0x8c, 0xac, 0xac, 0xc0, 0x06, 0x50, 0x7f, 0x0e, 0xf3, 0x7f, - 0x1f, 0x04, 0x41, 0x3e, 0x48, 0x07, 0x43, 0x04, 0x33, 0x04, 0x35, 0x28, 0x17, 0xc5, 0x05, 0x78, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x12, 0x13, 0x13, - 0x20, 0x01, 0x12, 0x20, 0x06, 0x40, 0x11, 0x20, 0x05, 0x12, 0x12, 0x6f, 0x06, 0x67, 0xce, 0x00, 0x00, 0x00, 0x14, 0x34, 0xb9, 0x30, 0xaf, 0x30, - 0x6a, 0xec, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x53, 0x2f, 0xaf, 0x63, 0x2f, 0xa1, 0x65, 0x81, 0x10, 0x16, 0x60, 0x7f, 0xcf, 0x82, 0x4b, 0x51, 0xf7, - 0x96, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x6c, 0xd0, 0x08, 0xb8, 0xab, 0x10, 0x06, 0x93, 0x7f, 0x21, 0x28, 0x11, 0x3a, 0x28, 0x19, - 0x35, 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x15, 0x13, 0x14, 0x14, 0x20, 0x01, 0x13, 0x20, 0x06, 0x12, 0x20, 0x05, 0x00, 0x13, 0x13, 0x71, - 0x07, 0x5f, 0xd2, 0x00, 0x00, 0x01, 0x15, 0x34, 0xbf, 0x30, 0xc1, 0x30, 0xe9, 0x06, 0xa8, 0x17, 0x11, 0x54, 0x00, 0xe1, 0x28, 0x17, 0x68, 0x00, - 0x69, 0x2f, 0xb5, 0xc1, 0x05, 0xdf, 0xa9, 0x10, 0x0f, 0x60, 0x7f, 0x58, 0x47, 0x59, 0xc9, 0x62, 0x06, 0x98, 0x17, 0x02, 0xc0, 0xd0, 0x58, 0xce, - 0x7c, 0xb7, 0x10, 0x06, 0x93, 0x7f, 0x22, 0x02, 0x04, 0x30, 0x04, 0x47, 0x04, 0x38, 0x28, 0x19, 0x30, 0xc5, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, - 0xff, 0x14, 0x15, 0x15, 0x20, 0x01, 0x14, 0x20, 0x06, 0x40, 0x14, 0x20, 0x05, 0x14, 0x14, 0x85, 0x05, 0xa4, 0xcc, 0x00, 0x00, 0x00, 0x16, 0x34, - 0xc8, 0x30, 0xeb, 0x30, 0x05, 0xd2, 0x30, 0xfc, 0x30, 0xe8, 0x06, 0x68, 0x1b, 0x54, 0x2f, 0xab, 0x15, 0x75, 0x00, 0x6a, 0x28, 0x17, 0x6c, 0x20, - 0x01, 0x6f, 0x10, 0x16, 0x00, 0x7f, 0x00, 0x79, 0x72, 0x81, 0x9c, 0x0c, 0x5e, 0x65, 0x75, 0x80, 0x06, 0x78, 0x19, 0xb8, 0xd2, 0xe8, 0xb8, 0x88, - 0xd7, 0x94, 0x68, 0xc6, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, 0x22, 0x28, 0x11, 0x43, 0x04, 0x45, 0x83, 0x28, 0x19, 0x3b, 0x04, 0x4c, 0x04, 0x3e, - 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x15, 0x16, 0x16, 0x20, 0x01, 0x15, 0x20, 0x06, 0x15, 0x20, 0x05, 0x00, 0x15, 0x15, 0xa9, 0x06, - 0xeb, 0xcd, 0x00, 0x00, 0x00, 0x17, 0x34, 0xe4, 0x30, 0xe9, 0x30, 0xaf, 0x30, 0x46, 0xa4, 0x06, 0x68, 0x15, 0x00, 0x00, 0x59, 0x2f, 0xa5, 0x3f, - 0xa9, 0x63, 0xa0, 0x28, 0x1d, 0x79, 0x10, 0x16, 0x20, 0x7f, 0x9a, 0x4e, 0xc9, 0x62, 0x4e, 0x40, 0x59, 0x06, 0x78, 0x15, 0x00, 0x00, 0x7c, 0xc5, - 0x7c, 0xb7, 0x0a, 0xe0, 0xcf, 0x74, 0xc7, 0x10, 0x06, 0x73, 0x7f, 0x2f, 0x28, 0x17, 0x30, 0x2c, 0x04, 0x3a, 0x28, 0x1b, 0x39, 0x06, 0x08, 0x13, - 0x10, 0x17, 0x34, 0xff, 0x16, 0x18, 0x54, 0x18, 0x20, 0x01, 0x16, 0x20, 0x06, 0x19, 0x20, 0x05, 0x16, 0x16, 0x00, 0x5a, 0x07, 0x1f, 0xcf, 0x00, - 0x00, 0x18, 0x34, 0x04, 0xb9, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x88, 0x15, 0x00, 0x00, 0x54, 0x5a, 0x2f, 0xad, 0x6c, 0x2f, 0xad, 0x61, 0x10, 0x16, - 0x60, 0x7f, 0xcf, 0x82, 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x98, 0x17, 0x20, 0xc2, 0xac, 0x14, 0xb9, 0x44, 0xc5, 0x10, 0x06, 0x93, 0x7f, 0x21, - 0x28, 0x11, 0x3b, 0x04, 0x18, 0x38, 0x04, 0x4f, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x17, 0x19, 0x19, 0xa8, 0x20, 0x01, 0x17, 0x20, 0x06, - 0x13, 0x20, 0x05, 0x17, 0x17, 0x8f, 0x00, 0x07, 0x0f, 0xcd, 0x00, 0x00, 0x19, 0x34, 0x23, 0x00, 0x90, 0xa6, 0x90, 0xdd, 0x4f, 0x77, 0x8b, 0x18, - 0x41, 0x98, 0x06, 0x5d, 0x31, 0x44, 0x00, 0x65, 0x00, 0x70, 0x20, 0x03, 0x14, 0x6e, 0x00, 0x64, 0x40, 0x05, 0x63, 0x48, 0x23, 0x73, 0x00, 0x1d, - 0x20, 0x00, 0x46, 0x20, 0x19, 0x30, 0x13, 0x3f, 0xcd, 0x6c, 0x20, 0x25, 0x57, 0x73, 0x04, 0x60, 0x7f, 0xe9, 0x80, 0x7f, 0x61, 0x40, 0x7f, 0x30, - 0x69, 0x30, 0x7d, 0x5a, 0xe9, 0x20, 0x91, 0xe9, 0x04, 0xe0, 0x7d, 0x07, 0x30, 0xff, 0x69, 0xc1, 0x7f, 0x7a, 0xd0, 0x21, 0x8f, 0xf1, 0x7b, 0x69, - 0x0c, 0xa1, 0xff, 0x54, 0x80, 0xa6, 0x90, 0x08, 0x5e, 0x5c, 0x30, 0x57, 0x06, 0x7f, 0xaf, 0xa0, 0xbc, 0x24, 0x00, 0xb1, 0x18, 0xc2, 0xd8, 0xc5, - 0x7c, 0xb7, 0x20, 0x00, 0x00, 0xf0, 0xc5, 0x29, 0xbc, 0x90, 0xc7, 0x58, 0x18, 0xce, 0x39, 0xb8, 0x05, 0x9f, 0xb8, 0xf3, 0x65, 0x20, 0x00, 0x67, - 0xb5, 0x23, 0x91, 0x62, 0x2b, 0xa9, 0x53, 0x7d, 0x6e, 0x05, 0xa3, 0xff, 0xea, 0x00, 0x83, 0xff, 0x41, 0x69, 0x04, 0x83, 0x7f, 0x24, 0x04, 0x35, - 0x04, 0x34, 0x20, 0x03, 0x10, 0x40, 0x04, 0x30, 0x28, 0x1f, 0x4c, 0x04, 0x3d, 0x04, 0x45, 0x3e, 0x20, 0x11, 0x20, 0x00, 0x32, 0x28, 0x2d, 0x30, - 0x40, 0x19, 0x5c, 0x3d, 0x28, 0x35, 0x35, 0x04, 0x88, 0x35, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x18, 0x0a, 0x00, 0x0a, 0x0b, 0x0a, 0x0a, - 0x18, 0x18, 0x0b, 0x0a, 0x40, 0x17, 0x20, 0x05, 0x18, 0x18, 0x88, 0x08, 0x12, 0xd1, 0x00, 0x00, 0x00, 0x1a, 0x34, 0xd0, 0x30, 0xeb, 0x30, 0x0a, - 0xac, 0x30, 0xb9, 0x30, 0x06, 0x7d, 0x2f, 0x56, 0x2f, 0xa9, 0x72, 0xe0, 0x24, 0x8b, 0x38, 0x0b, 0x10, 0x16, 0x30, 0x7f, 0xf4, 0x5d, 0x14, 0x5c, - 0xa0, 0x04, 0x52, 0xaf, 0x65, 0xde, 0x5d, 0x06, 0x5f, 0xb3, 0x14, 0xbc, 0x02, 0x74, 0xb9, 0x00, 0xac, 0xa4, 0xc2, 0x10, 0x06, 0x73, 0x7f, 0x12, - 0x8b, 0x28, 0x0f, 0x40, 0x04, 0x33, 0x28, 0x15, 0x41, 0x04, 0x87, 0xfb, 0x10, 0x18, 0xb4, 0xff, 0x15, 0x19, 0x17, 0x17, 0x20, 0x01, 0x19, 0x20, - 0x06, 0x07, 0x20, 0x05, 0x02, 0x19, 0x19, 0x89, 0x07, 0x68, 0xd0, 0x00, 0x3f, 0xff, 0x01, 0x00, 0x0b, 0x0b, 0x08, 0x0b, 0x0b, 0x01, 0x01, 0x0d, - 0x22, 0x0b, 0x18, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x41, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x20, 0x02, - 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x90, 0x30, 0x04, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x48, 0x05, 0x30, 0x04, 0x04, - 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x24, 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, 0x40, 0x06, 0x06, 0x06, 0x12, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, - 0x07, 0x40, 0x06, 0x07, 0x09, 0x07, 0x07, 0x07, 0x08, 0x30, 0x04, 0x07, 0x08, 0x20, 0x06, 0x46, 0x0a, 0x20, 0x05, 0x08, 0x08, 0x09, 0x50, 0x02, - 0x20, 0x06, 0x0b, 0x8f, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x50, 0x02, 0x20, 0x06, 0x30, 0x05, 0x28, 0xdc, 0x20, 0x0c, 0x0c, 0x20, 0x01, 0x0b, 0x0b, - 0x0a, 0x0c, 0x16, 0x83, 0x20, 0x05, 0x0b, 0x0b, 0x0c, 0x0d, 0x0d, 0x20, 0x01, 0x20, 0x14, 0x21, 0x0d, 0x08, 0x30, 0x05, 0x0c, 0x0d, 0x0e, 0x0e, - 0x20, 0x01, 0x59, 0x0d, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x20, 0x07, 0x0f, 0x0f, 0x20, 0x01, 0x59, 0x0e, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x20, 0x07, - 0x10, 0x10, 0x20, 0x01, 0x59, 0x0f, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x20, 0x07, 0x11, 0x11, 0x20, 0x01, 0x59, 0x10, 0x20, 0x06, 0x0f, 0x20, 0x05, - 0x20, 0x07, 0x12, 0x12, 0x20, 0x01, 0x59, 0x11, 0x20, 0x06, 0x10, 0x20, 0x05, 0x20, 0x07, 0x13, 0x13, 0x20, 0x01, 0x59, 0x12, 0x20, 0x06, 0x11, - 0x20, 0x05, 0x20, 0x07, 0x14, 0x14, 0x20, 0x01, 0x59, 0x13, 0x20, 0x06, 0x12, 0x20, 0x05, 0x20, 0x07, 0x15, 0x15, 0x20, 0x01, 0x59, 0x14, 0x20, - 0x06, 0x14, 0x20, 0x05, 0x20, 0x07, 0x16, 0x16, 0x20, 0x01, 0x5c, 0x15, 0x20, 0x06, 0x15, 0x20, 0x05, 0x20, 0x07, 0x39, 0x84, 0x18, 0x16, 0xa6, - 0x20, 0x06, 0x19, 0x20, 0x05, 0x16, 0x16, 0x41, 0x7c, 0x21, 0x8c, 0x19, 0x3c, 0x19, 0x13, 0x41, 0x92, 0xf9, 0xaf, 0xf1, 0xa7, 0x3f, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x08, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xf4, 0x0c, 0x2b, 0xd3, 0x00, 0x00, 0x00, 0x01, 0x08, 0xa2, 0x30, 0xf3, 0x30, 0xae, 0x10, - 0x30, 0xe9, 0x30, 0x06, 0x78, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x01, 0x67, 0x00, 0x75, 0x00, 0x69, 0x00, 0x6c, 0x20, 0x01, 0x60, 0x61, 0x10, 0x0e, - 0xc0, 0x7f, 0x06, 0x11, 0xfd, 0x00, 0x00, 0x89, 0x5b, 0x2d, 0x10, 0x57, 0xc9, 0x62, 0x06, 0x9b, 0x1b, 0x75, 0xc5, 0xc8, 0xad, 0x34, 0x7c, 0xb7, - 0x06, 0x9b, 0x9b, 0x07, 0xb3, 0x7f, 0x68, 0x06, 0x23, 0xff, 0x10, 0x04, 0x00, 0x3d, 0x04, 0x33, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x0c, 0x4c, 0x04, - 0x4f, 0x04, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x36, 0xff, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x4c, 0x41, 0x00, 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0x09, 0x14, 0x20, 0x50, 0x08, 0xe0, - 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2b, 0x0c, 0x05, 0xd4, 0x00, 0x00, 0x00, 0x02, 0x09, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x03, - 0x30, 0xfb, 0x30, 0xb8, 0x30, 0xe7, 0x20, 0x09, 0x06, 0x18, 0x23, 0x00, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x74, 0x00, 0x20, - 0x00, 0x4a, 0x00, 0x6f, 0x00, 0x6b, 0x68, 0x20, 0x0b, 0x06, 0x50, 0x7f, 0x2d, 0x20, 0x7f, 0x65, 0x20, 0x8d, 0x06, 0x70, 0x7f, 0x8c, 0x90, 0xff, - 0x27, 0x00, 0x73, 0x0e, 0x21, 0x7f, 0x06, 0x51, 0xff, 0x23, 0x57, 0x02, 0xa6, 0x7e, 0xf0, 0x7f, 0x3a, 0x53, 0x06, 0x7b, 0x1d, 0x38, 0x01, 0xc1, - 0x78, 0xc7, 0xb8, 0xd2, 0x74, 0xc8, 0x06, 0x7b, 0x9d, 0x80, 0x0e, 0xf1, 0xff, 0x21, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x00, 0x04, 0x2d, 0x00, - 0x14, 0x04, 0x36, 0x04, 0x3e, 0xe2, 0x20, 0x0b, 0x10, 0x05, 0xd1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x03, 0x03, 0x20, 0x01, 0x01, 0xa4, 0x20, - 0x06, 0x02, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x09, 0x04, 0xd0, 0x30, 0xfc, 0x30, 0xd6, 0x20, 0x03, 0xc0, 0x30, 0x28, 0xf6, 0x5c, 0x06, - 0x3f, 0xb9, 0x42, 0x28, 0x17, 0x72, 0x00, 0x62, 0x0c, 0x00, 0x75, 0x00, 0x64, 0x28, 0x21, 0x10, 0x16, 0x10, 0x7f, 0xf4, 0x5d, 0x06, 0x03, 0x5e, - 0xbe, 0x8f, 0x9b, 0x06, 0x42, 0xfb, 0x4f, 0xaf, 0xbc, 0x0c, 0x80, 0xbd, 0xe4, 0xb2, 0x06, 0x9f, 0xb3, 0x0e, 0xf3, 0x7f, 0x11, 0x04, 0x00, 0x30, - 0x04, 0x40, 0x04, 0x31, 0x04, 0x43, 0x04, 0x69, 0x34, 0x20, 0x09, 0x10, 0x1e, 0x14, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x01, 0x02, - 0x02, 0x02, 0x02, 0x8a, 0x0c, 0x08, 0x28, 0x17, 0x00, 0x04, 0x09, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x30, 0x04, 0xfb, 0x30, 0xb8, 0x30, 0xe7, 0x28, - 0x21, 0xb8, 0x30, 0xab, 0x06, 0xbc, 0xaf, 0x47, 0x2f, 0xaf, 0x6f, 0x28, 0x25, 0x67, 0x2f, 0xb7, 0x06, 0x1f, 0xaf, 0x78, 0x2d, 0xc0, 0x7f, 0x05, - 0x7f, 0xb1, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0x54, 0x04, 0x4e, 0xbb, 0x6c, 0x3a, 0x53, 0x06, 0x7f, 0xaf, 0x38, 0xc1, 0x00, 0x78, - 0xc7, 0xb8, 0xd2, 0x70, 0xc8, 0xc0, 0xc9, 0xc0, 0x06, 0x58, 0x99, 0x0e, 0xf2, 0x7f, 0x21, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x00, 0x42, 0x04, 0x2d, - 0x00, 0x14, 0x04, 0x36, 0x04, 0x5d, 0x3e, 0x28, 0x23, 0x34, 0x20, 0x07, 0x10, 0x05, 0x91, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x28, - 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x2f, 0x28, 0x0c, 0x0e, 0x28, 0x17, 0x05, 0x88, 0x17, 0xe1, 0x30, 0xa2, 0x35, 0x30, 0xea, - 0x28, 0x19, 0x06, 0xb8, 0x17, 0x4d, 0x4f, 0xbb, 0x79, 0x06, 0x68, 0x97, 0x6e, 0x65, 0x28, 0x19, 0x50, 0x81, 0x69, 0x06, 0x67, 0x97, 0x06, 0xd0, - 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x04, 0x57, 0x9b, 0x73, 0x3d, 0x4e, 0x06, 0xf8, 0x17, 0x54, 0xba, 0x38, 0xac, 0xb9, 0x07, 0x18, 0x17, 0x0e, 0x32, - 0x7f, 0x98, 0x17, 0x1c, 0x04, 0x4d, 0xb8, 0x28, 0x15, 0x38, 0x05, 0xa8, 0x13, 0x10, 0x07, 0x33, 0xff, 0x0e, 0xf5, 0x7f, 0x04, 0x04, 0x07, 0x20, - 0x04, 0x04, 0xa0, 0x01, 0x1c, 0x0c, 0xff, 0xd3, 0x00, 0x2b, 0x00, 0x06, 0x88, 0x17, 0xdd, 0x28, 0x13, 0xeb, 0x06, 0x08, 0x15, 0xdf, 0x2f, 0x45, - 0x50, 0x2f, 0xbb, 0x75, 0x00, 0x6c, 0x06, 0x6d, 0x2f, 0x2d, 0x06, 0xe0, 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0xdd, 0x4f, - 0x57, 0x7f, 0xbc, 0x06, 0xf8, 0x17, 0xf4, 0x23, 0x8b, 0x07, 0x18, 0x17, 0x0e, 0x32, 0xff, 0x98, 0x17, 0x1f, 0x04, 0x1c, 0x3e, 0x04, 0x3b, 0x05, - 0xe8, 0x15, 0x10, 0x07, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x05, 0x05, 0x14, 0x04, 0x05, 0x05, 0x40, 0x01, 0x06, 0x40, 0x07, 0x1c, 0x0c, 0x05, 0x11, - 0xd4, 0x00, 0x00, 0x07, 0x88, 0x17, 0xd4, 0x28, 0x17, 0x6a, 0xbf, 0x28, 0x1b, 0x06, 0xd8, 0x17, 0x65, 0x4f, 0xb7, 0x72, 0x06, 0x88, 0x17, 0x69, - 0xb8, 0x40, 0x7d, 0x72, 0x20, 0x87, 0x0e, 0x10, 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0x7c, 0x10, 0x5f, 0x97, 0x5f, 0x06, 0xf8, 0x17, 0x3c, 0xd5, - 0x30, 0xd1, 0xe8, 0x07, 0x38, 0x17, 0x0e, 0x12, 0x7f, 0xb8, 0x17, 0x35, 0x28, 0x1f, 0x35, 0x04, 0x40, 0xe5, 0x05, 0xc8, 0x1b, 0x10, 0x06, 0xf3, - 0xff, 0x0e, 0xf5, 0x7f, 0x06, 0x06, 0x70, 0x01, 0x05, 0x40, 0x0a, 0x14, 0x25, 0x0c, 0x14, 0x28, 0x17, 0x08, 0x88, 0x17, 0xd5, 0x30, 0x01, 0xa3, - 0x30, 0xea, 0x30, 0xc3, 0x30, 0xd7, 0x05, 0xe8, 0x19, 0xab, 0xdf, 0x2f, 0x68, 0x2f, 0xbb, 0x6c, 0x2f, 0xbf, 0x70, 0x06, 0x68, 0x17, 0x90, 0x7f, - 0x70, 0x70, 0x05, 0x68, 0x1b, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0xf2, 0x83, 0x0c, 0x29, 0x52, 0x6e, 0x66, 0x06, 0x78, 0x19, 0x58, - 0x17, 0x44, 0xd5, 0x38, 0xbd, 0xb9, 0x07, 0x38, 0x17, 0x0e, 0x12, 0x7f, 0x98, 0x17, 0x24, 0x04, 0x38, 0x2e, 0x04, 0x3b, 0x20, 0x03, 0x3f, 0x06, - 0xa8, 0x17, 0x10, 0x06, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x07, 0x08, 0x07, 0x05, 0x07, 0x07, 0xa0, 0x01, 0x1f, 0x0c, 0x20, 0xc5, 0x28, 0x17, 0x00, - 0x1f, 0xff, 0x01, 0x03, 0x03, 0x20, 0x01, 0x01, 0x20, 0x06, 0x44, 0x02, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, - 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0xe0, 0x20, 0x1d, 0x20, 0x09, 0x30, 0x2a, 0x04, 0x04, 0x07, 0x04, 0x04, 0x9b, 0xa0, 0x01, 0x05, - 0x05, 0x20, 0x02, 0x40, 0x01, 0x06, 0x50, 0x05, 0xe8, 0x8f, 0xc0, 0xf0, 0x87, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xe8, 0x9e, 0x01, 0x12, 0x32, 0x00, 0x00, 0x30, 0x01, 0x08, 0x01, 0x50, 0x07, 0x00, 0x00, 0xa2, 0x30, 0xf3, 0x30, 0xae, 0x30, 0xe9, 0x30, - 0xc0, 0x60, 0x0e, 0x06, 0x00, 0x06, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x05, 0x75, 0x00, 0x69, 0x00, 0x6c, 0x20, 0x01, 0x61, 0x10, 0x0e, 0xc0, - 0x7f, 0x80, 0x06, 0x11, 0xfd, 0x00, 0x00, 0x89, 0x5b, 0x2d, 0x57, 0xc9, 0x40, 0x62, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x75, 0xc5, 0xc8, 0xad, 0x34, - 0x7c, 0xb7, 0x06, 0x90, 0x7f, 0x07, 0xb3, 0x7f, 0x68, 0x06, 0x23, 0xff, 0x10, 0x04, 0x00, 0x3d, 0x04, 0x33, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x0d, - 0x4c, 0x04, 0x4f, 0x04, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x55, 0x01, 0x00, 0x48, 0x0a, 0x64, 0x01, 0x50, 0x06, 0x01, 0x38, 0x06, 0x09, 0x07, 0xa8, - 0x3b, 0xc6, 0x30, 0x00, 0xa3, 0x30, 0xb0, 0x30, 0xa2, 0x30, 0xfb, 0x30, 0x05, 0xd0, 0x30, 0xfc, 0x30, 0xd6, 0x20, 0x03, 0xc0, 0x05, 0x88, 0x4b, - 0xb1, 0x38, 0x3b, 0x74, 0x28, 0x39, 0x38, 0x3f, 0x61, 0x00, 0x20, 0x28, 0x3d, 0x14, 0x6e, 0x00, 0x64, 0x20, 0x07, 0x42, 0x28, 0x47, 0x72, 0x00, - 0x58, 0x62, 0x28, 0x55, 0x64, 0x04, 0xc8, 0x51, 0xd0, 0x7f, 0x2d, 0x00, 0x65, 0xb5, 0x20, 0x8d, 0x2d, 0x05, 0x80, 0x7d, 0x00, 0x10, 0xff, 0x75, - 0x06, 0xc0, 0xff, 0x20, 0x20, 0xff, 0xd0, 0x05, 0x91, 0x7b, 0x00, 0x31, 0xff, 0x79, 0x05, 0xe0, 0x7f, 0x89, 0x5b, 0xd0, 0x63, 0x00, 0xdc, 0x74, - 0x8c, 0x54, 0xf4, 0x5d, 0x03, 0x5e, 0x20, 0xbe, 0x8f, 0x06, 0x1b, 0x41, 0x64, 0xc5, 0xf0, 0xd2, 0x00, 0x00, 0xac, 0x20, 0x00, 0x14, 0xbc, 0x80, - 0xbd, 0xe4, 0x6d, 0xb2, 0x06, 0x5b, 0xbb, 0xd1, 0xff, 0x6e, 0x05, 0xc2, 0x01, 0x53, 0xff, 0xed, 0x06, 0x82, 0x7f, 0xa0, 0x38, 0x3b, 0x42, 0x28, - 0x3b, 0x33, 0x04, 0x43, 0x04, 0x30, 0x0a, 0x04, 0x20, 0x00, 0x38, 0x20, 0x03, 0x11, 0x20, 0x09, 0x40, 0x2e, 0x04, 0x31, 0x20, 0x11, 0x34, 0x20, - 0x13, 0x0d, 0xb4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x01, 0x1e, 0x01, 0x01, 0x02, 0x20, 0x03, 0x20, 0x04, 0x40, 0x06, 0x01, 0x38, 0x40, 0x0a, 0x45, - 0x18, 0x88, 0x3b, 0xeb, 0x30, 0xbc, 0x28, 0x3f, 0xc1, 0x28, 0x43, 0xbb, 0x06, 0x5c, 0xf7, 0x72, 0x2f, 0xf7, 0x34, 0xb1, 0x38, 0x41, 0x6e, 0x06, - 0x0f, 0xf9, 0xf0, 0x7f, 0x5c, 0x65, 0x06, 0xe0, 0xff, 0x69, 0x45, 0xbd, 0x0e, 0x91, 0x7f, 0x05, 0xfe, 0xf9, 0x3f, 0x96, 0x08, 0x39, 0x68, 0xf7, - 0x5e, 0x06, 0x9f, 0xf7, 0x44, 0xc5, 0x74, 0x01, 0xb9, 0xe8, 0xd5, 0xf0, 0xd2, 0x98, 0xb0, 0x06, 0x50, 0x83, 0xa8, 0x00, 0x12, 0x7f, 0xeb, 0x0d, - 0xc3, 0xff, 0x10, 0x28, 0x25, 0x33, 0x04, 0x35, 0xb8, 0x68, 0x41, 0x3d, 0x05, 0x08, 0x2b, 0x0f, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x02, - 0x04, 0x00, 0x03, 0x04, 0x04, 0x02, 0x02, 0x03, 0x04, 0x03, 0x36, 0x02, 0x02, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x0b, 0x78, 0x60, 0x38, 0x3b, 0xd0, - 0xdc, 0x06, 0x48, 0x35, 0x98, 0x3b, 0x75, 0x2f, 0xe1, 0x05, 0xf8, 0x33, 0x10, 0x0f, 0x70, 0x7f, 0x3f, 0x96, 0x08, 0x81, 0x9c, 0xf4, 0x5d, 0x06, - 0xb8, 0x3b, 0xe8, 0xb8, 0x14, 0x63, 0xbc, 0x10, 0x06, 0x93, 0x7f, 0x38, 0x3b, 0x43, 0x04, 0x31, 0x06, 0x08, 0x33, 0x10, 0x17, 0x74, 0xff, 0x00, - 0x03, 0x03, 0x05, 0x04, 0x05, 0x05, 0x03, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x03, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x0c, 0x82, 0x78, 0x3b, 0xd0, - 0x30, 0xcf, 0x30, 0xde, 0x06, 0xa8, 0x3b, 0x42, 0xaa, 0x2e, 0xe9, 0x68, 0x2e, 0xed, 0x6d, 0x2e, 0xf1, 0x73, 0x10, 0x16, 0x20, 0x7f, 0xf4, 0x04, - 0x5d, 0xc8, 0x54, 0x6c, 0x9a, 0x06, 0x9b, 0x3b, 0x14, 0xbc, 0x0b, 0x58, 0xd5, 0xc8, 0xb9, 0x07, 0x53, 0x7f, 0x27, 0x06, 0x23, 0x81, 0x06, 0xf3, - 0xff, 0x50, 0x11, 0x28, 0x35, 0x33, 0x28, 0x39, 0x3c, 0x04, 0x41, 0x04, 0x00, 0x3a, 0x04, 0x38, 0x04, 0x35, 0x04, 0x20, 0x00, 0x51, 0x3e, 0x20, - 0x0b, 0x42, 0x28, 0x53, 0x3e, 0x04, 0x32, 0x05, 0x08, 0x53, 0x80, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0x06, 0x05, 0x06, 0x06, 0x04, 0x03, 0x04, - 0x05, 0x06, 0x05, 0x04, 0x04, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x40, 0x0d, 0x98, 0x3b, 0xeb, 0x30, 0xd0, 0x30, 0xc9, 0x30, 0x68, 0xb9, 0x06, 0x68, - 0x3f, 0x38, 0x3b, 0x72, 0x4f, 0xf7, 0x64, 0x00, 0x6f, 0xd8, 0x06, 0x64, 0xbb, 0x70, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0xf4, 0x5d, - 0xf4, 0x0c, 0x5d, 0x1a, 0x59, 0xaf, 0x06, 0x31, 0xfa, 0x68, 0x3b, 0xa0, 0xbc, 0x03, 0x74, 0xc7, 0xc4, 0xb3, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0x06, - 0x33, 0xff, 0x8a, 0x38, 0x3b, 0x40, 0x04, 0x31, 0x28, 0x41, 0x34, 0x28, 0x2b, 0x41, 0xe0, 0x04, 0xe8, 0x29, 0x10, 0x08, 0x13, 0xff, 0x0e, 0xf5, - 0x7f, 0x05, 0x05, 0x07, 0x06, 0x07, 0x00, 0x07, 0x05, 0x05, 0x06, 0x07, 0x06, 0x05, 0x05, 0xc8, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x0e, 0x06, 0x6f, - 0xff, 0xd9, 0x30, 0xea, 0x0c, 0x30, 0xfc, 0x30, 0xba, 0x06, 0x68, 0x39, 0x3f, 0xf7, 0x65, 0x00, 0x06, 0x6c, 0x00, 0x69, 0x00, 0x7a, 0x06, 0x47, - 0xb9, 0x10, 0x07, 0x90, 0x7f, 0x63, 0x81, 0x06, 0x61, 0xff, 0x2f, 0x4f, 0x29, 0x52, 0x79, 0x51, 0x06, 0x9f, 0xf7, 0x03, 0xa8, 0xbc, 0xac, 0xb9, - 0x88, 0xc9, 0x06, 0x90, 0x7f, 0x0e, 0xf3, 0x7f, 0x00, 0x11, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x38, 0x04, 0x70, 0x37, 0x06, 0x08, 0x35, 0x10, 0x0f, - 0xd4, 0xff, 0x06, 0x76, 0xff, 0x06, 0x06, 0x08, 0x07, 0x00, 0x08, 0x08, 0x06, 0x06, 0x07, 0x08, 0x07, 0x06, 0x65, 0x06, 0x20, 0x01, 0x01, 0x2f, - 0xff, 0x0f, 0x09, 0x6f, 0xff, 0xdc, 0x28, 0x3b, 0x15, 0xd3, 0x30, 0xa2, 0x06, 0xa8, 0x3b, 0x6f, 0x48, 0x3b, 0x76, 0x28, 0x3f, 0x76, 0x61, 0x06, - 0xe0, 0x7f, 0x06, 0x3e, 0x7c, 0xd0, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x31, 0xff, 0xbb, 0x01, 0x73, 0x29, 0x52, 0xf4, 0x7e, 0x9a, 0x4e, 0x06, - 0x7b, 0x3b, 0x42, 0xfc, 0x28, 0x3b, 0x44, 0xbe, 0x44, 0xc5, 0x0e, 0xd3, 0x7f, 0xed, 0x8a, 0x06, 0x83, 0xff, 0x11, 0x04, 0x3e, 0x48, 0x3b, 0x32, - 0x28, 0x3f, 0x4f, 0xe0, 0x06, 0x28, 0x3f, 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x07, 0x08, 0x0a, 0x09, 0x0a, 0x00, 0x0a, 0x07, 0x07, 0x09, - 0x0a, 0x09, 0x08, 0x07, 0x12, 0x07, 0x07, 0x07, 0x01, 0x2f, 0xff, 0x10, 0x1b, 0x6f, 0xff, 0xd6, 0x02, 0x30, 0xe9, 0x30, 0xb8, 0x30, 0xeb, 0x06, - 0xa8, 0x3b, 0x72, 0xa8, 0x28, 0x33, 0x7a, 0x2f, 0xf9, 0x6c, 0x06, 0x80, 0x7f, 0xe9, 0x00, 0x73, 0xbf, 0x06, 0xc0, 0x7f, 0x61, 0x60, 0x7f, 0x06, - 0x38, 0x3d, 0xb0, 0x7f, 0x06, 0x59, 0x3b, 0x90, 0xff, 0x06, 0x3f, 0xfd, 0x08, 0xf4, 0x5d, 0x7f, 0x89, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x0c, 0x06, - 0xbe, 0x7c, 0xb7, 0xc8, 0xc9, 0x06, 0x90, 0x81, 0xb3, 0x7f, 0x69, 0x20, 0x00, 0xeb, 0x0e, 0x01, 0xff, 0x11, 0x04, 0x40, 0x04, 0x30, 0x3e, 0x04, - 0x37, 0x28, 0x3d, 0x38, 0x41, 0x06, 0x18, 0x3d, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x08, 0x00, 0x09, 0x0b, 0x0a, 0x0b, 0x0b, 0x08, 0x08, - 0x0a, 0x45, 0x0b, 0x28, 0x3c, 0x08, 0x08, 0x08, 0x01, 0x3b, 0x6e, 0x01, 0x6f, 0xff, 0x00, 0xf1, 0x82, 0x18, 0x98, 0xf4, 0x30, 0xa1, 0x30, 0x40, - 0xfc, 0x28, 0x41, 0xf3, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x88, 0x06, 0x18, 0x3b, 0x69, 0x00, 0x74, 0x2f, 0xf9, 0x73, 0x00, 0x68, 0x08, 0x00, 0x20, - 0x00, 0x56, 0x2f, 0xff, 0x72, 0x00, 0x67, 0xaa, 0x2f, 0x89, 0x6e, 0x20, 0x0d, 0x49, 0x27, 0xd5, 0x6c, 0x2f, 0x0f, 0x6e, 0x35, 0x00, 0x64, 0x27, - 0xdf, 0x04, 0x3f, 0xff, 0xce, 0x47, 0x33, 0x73, 0x60, 0x79, 0x6d, 0x65, 0x40, 0x7b, 0x50, 0x0f, 0x62, 0x60, 0x99, 0x30, 0x7d, 0x6e, 0x2f, 0x99, - 0x1a, 0x71, 0x00, 0x75, 0x40, 0x29, 0x04, 0x90, 0xff, 0x63, 0x21, 0x01, 0x65, 0xab, 0x21, 0x03, 0x4a, 0x20, 0x69, 0x6e, 0x21, 0x03, 0x66, 0x40, - 0x8f, 0x30, 0x7b, 0x5f, 0x6e, 0x28, 0xdd, 0x65, 0x2f, 0x9f, 0x04, 0x18, 0x59, 0x31, 0x61, 0x3f, 0xf9, 0x30, 0x77, 0x6f, 0x56, 0x60, 0xff, 0x31, - 0x7b, 0x69, 0x21, 0x8b, 0x71, 0x9b, 0x71, 0x01, 0x50, 0x9f, 0xeb, 0x04, 0x10, 0x7f, 0x31, 0xe1, 0x51, 0x81, 0xed, 0x61, 0x7f, 0x6e, 0x61, 0x93, - 0x72, 0x1d, 0x70, 0xe1, 0x60, 0x7f, 0x39, 0x65, 0x03, 0xdf, 0xff, 0xf1, 0x82, 0x5e, 0x5c, 0x00, 0xf4, 0x7e, 0x14, 0x5c, 0xac, 0x4e, 0xa4, 0x7f, - 0x60, 0x9b, 0x05, 0xe2, 0xfb, 0x3f, 0xff, 0x01, 0xc6, 0x6d, 0xad, 0x39, 0x00, 0xb8, 0x20, 0x00, 0x84, 0xbc, 0xc4, 0xc9, 0x44, 0x01, 0xc5, 0x7c, - 0xc7, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x33, 0x7f, 0x8a, 0x32, 0x5f, 0x20, 0x00, 0x4d, 0x2f, 0xfb, 0x61, 0x23, 0x7d, 0x64, 0xf5, 0x61, 0x83, 0x3b, - 0xd1, 0x53, 0x7d, 0x04, 0x7a, 0xd5, 0x49, 0x2f, 0x75, 0x68, 0x81, 0xff, 0xec, 0x53, 0xfb, 0x3b, 0x41, 0xb1, 0xfd, 0xe2, 0x04, 0x81, 0xfd, 0x58, - 0x3b, 0x38, 0x04, 0x41, 0x42, 0x28, 0x3f, 0x3d, 0x04, 0x41, 0x04, 0x3a, 0x28, 0x43, 0x04, 0x35, 0x04, 0x20, 0x00, 0x12, 0x28, 0x4b, 0x40, 0x04, - 0x6a, 0x33, 0x28, 0x51, 0xb0, 0x15, 0x3e, 0x20, 0x21, 0x42, 0x28, 0x6b, 0x3e, 0x38, 0x04, 0x32, 0x28, 0x6f, 0x0b, 0x54, 0xff, 0x10, 0x0e, 0xf0, - 0x7f, 0x09, 0x0a, 0x1d, 0x01, 0x0b, 0x1e, 0x1e, 0x09, 0x09, 0x0b, 0x1f, 0x28, 0x3c, 0x12, 0x09, 0x09, 0x09, 0x01, 0x2f, 0xff, 0x12, 0x0d, 0x6f, - 0xff, 0xab, 0x05, 0x30, 0xca, 0x30, 0xc0, 0x30, 0x06, 0x9d, 0x79, 0x43, 0x48, 0x19, 0x56, 0x61, 0x28, 0x1b, 0x61, 0x0e, 0x40, 0x7f, 0x4b, 0x0e, - 0xe0, 0xff, 0x91, 0xff, 0xe1, 0x81, 0x06, 0x4f, 0xfe, 0xa0, 0x52, 0xff, 0x62, 0x27, 0x59, 0x06, 0x9f, 0xf7, 0x03, 0x90, 0xce, 0x98, 0xb0, 0xe4, - 0xb2, 0x0f, 0x33, 0x7f, 0x06, 0x51, 0xff, 0x47, 0x1a, 0x48, 0x35, 0x30, 0x04, 0x34, 0x03, 0x88, 0x0d, 0x10, 0x01, 0xd4, 0xff, 0x10, 0x06, 0xf0, - 0xff, 0x00, 0x0a, 0x0b, 0x0c, 0x1b, 0x0c, 0x0c, 0x0a, 0x0a, 0x00, 0x0c, 0x0c, 0x16, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x90, 0x01, 0x2f, 0xff, 0x13, - 0x01, 0x6f, 0xff, 0xb1, 0x30, 0xa4, 0x30, 0x01, 0xde, 0x30, 0xf3, 0x30, 0xf8, 0x8a, 0xf6, 0x06, 0x2d, 0x75, 0x8e, 0x58, 0x3b, 0x79, 0x00, 0x6d, - 0x4f, 0xdd, 0x05, 0x3b, 0x67, 0xff, 0xff, 0xce, 0xee, 0x4f, 0x73, 0x3e, 0xf5, 0x38, 0xc5, 0xef, 0x60, 0x89, 0x05, 0x50, 0x7b, 0x78, 0x3b, 0x69, - 0xed, 0x60, 0xff, 0x3f, 0xef, 0x3d, 0xff, 0x6c, 0x04, 0x6d, 0xe3, 0x00, 0x7f, 0xf7, 0x6f, 0x41, 0x03, 0xfd, 0x51, 0x01, 0x71, 0x8b, 0x05, 0xb0, - 0x7f, 0x3e, 0xdb, 0x71, 0x81, 0x31, 0x0b, 0xe1, 0x05, 0xa0, 0xff, 0x01, 0x00, 0x5f, 0xfc, 0x66, 0xa4, 0x7f, 0x9b, 0x06, 0x42, 0xfb, 0x80, 0x4f, - 0xff, 0xcf, 0x74, 0xc7, 0xe8, 0xb9, 0x20, 0x00, 0x0d, 0x1c, 0xc8, 0xc4, 0xb3, 0x06, 0x7a, 0xbb, 0x92, 0x81, 0x65, 0x2f, 0xf9, 0xed, 0x7e, 0xe7, - 0x3f, 0xfd, 0x05, 0x32, 0x7f, 0x6c, 0x2f, 0x6f, 0xd1, 0xff, 0xe3, 0x22, 0x91, 0x88, 0x05, 0xb8, 0x3b, 0x39, 0x04, 0x3c, 0x48, 0x41, 0x3e, 0x04, - 0x32, 0x00, 0x04, 0x4b, 0x04, 0x20, 0x00, 0x3e, 0x04, 0x41, 0x0f, 0x04, 0x42, 0x04, 0x40, 0x40, 0x0f, 0x04, 0xf8, 0x51, 0x06, 0xf4, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x00, 0x0b, 0x0c, 0x1a, 0x1a, 0x1c, 0x1c, 0x0b, 0x0b, 0x00, 0x1c, 0x1c, 0x15, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x90, 0x01, 0x2f, - 0xff, 0x14, 0x0d, 0x6f, 0xff, 0xc1, 0x30, 0xea, 0x30, 0xd5, 0x06, 0x9d, 0x75, 0x3f, 0xf7, 0x68, 0x44, 0xaf, 0x65, 0x06, 0xe0, 0x7f, 0x69, 0x0e, - 0x80, 0xff, 0xc2, 0x06, 0xb1, 0x7d, 0x07, 0x11, 0xff, 0x7a, 0x66, 0x29, 0x52, 0x06, 0xb2, 0xff, 0x60, 0x18, 0xce, 0x08, 0xb8, 0x07, 0x33, 0x7f, - 0x0e, 0x72, 0xff, 0x27, 0x04, 0x38, 0x38, 0x04, 0x3b, 0x20, 0x03, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x0c, 0x0d, 0x0d, 0xd2, 0x30, 0x02, - 0x20, 0x06, 0x2f, 0x20, 0x05, 0x0c, 0x0c, 0x01, 0x2f, 0xff, 0x15, 0x40, 0x21, 0x6f, 0xff, 0xb3, 0x30, 0xed, 0x30, 0xf3, 0x30, 0x15, 0xd3, 0x30, - 0xa2, 0x06, 0x68, 0x41, 0x43, 0x4e, 0xf5, 0x6f, 0x2f, 0xef, 0x5a, 0x62, 0x2f, 0x7f, 0x61, 0x06, 0xe0, 0x7f, 0x06, 0x18, 0xc1, 0x4b, 0x4f, 0xf5, - 0x75, 0xf0, 0x80, 0x7f, 0x05, 0xaf, 0x71, 0x08, 0x21, 0x7f, 0x06, 0x11, 0xff, 0xe5, 0x54, 0x26, 0x4f, 0x08, 0xd4, 0x6b, 0x9a, 0x4e, 0x06, 0x7b, - 0x3f, 0x5c, 0xcf, 0x6c, 0x06, 0xb8, 0x44, 0xbe, 0x44, 0xc5, 0x06, 0x9b, 0xbb, 0x07, 0x33, 0x7f, 0xf4, 0x88, 0x06, 0x83, 0xff, 0x1a, 0x04, 0x3e, - 0x28, 0x3b, 0x43, 0x04, 0x3c, 0x2e, 0x04, 0x31, 0x28, 0x45, 0x4f, 0x06, 0x08, 0x43, 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0d, 0x02, 0x0e, - 0x0e, 0x1c, 0x0e, 0x0e, 0x0d, 0x20, 0x06, 0x17, 0x92, 0x20, 0x05, 0x0d, 0x0d, 0x01, 0x2f, 0xff, 0x16, 0x07, 0x88, 0x3b, 0xb9, 0x02, 0x30, 0xbf, - 0x30, 0xea, 0x30, 0xab, 0x06, 0xa8, 0x3b, 0x73, 0x22, 0x00, 0x74, 0x28, 0x35, 0x20, 0x00, 0x52, 0x2f, 0xfd, 0x63, 0xc0, 0x05, 0xe8, 0x3f, 0x10, - 0x0e, 0xf0, 0x7f, 0xe5, 0x54, 0xaf, 0x65, 0xbe, 0x8f, 0x08, 0xce, 0x9e, 0xa0, 0x52, 0x06, 0x5f, 0xfd, 0x54, 0xcf, 0xa4, 0x01, 0xc2, 0xc0, 0xd0, - 0xac, 0xb9, 0x74, 0xce, 0x10, 0x06, 0x53, 0x7f, 0x80, 0x38, 0x3b, 0x41, 0x04, 0x42, 0x04, 0x30, 0x04, 0x2d, 0x2c, 0x00, 0x20, 0x28, 0x3d, 0x3a, - 0x20, 0x09, 0x10, 0x1d, 0xb4, 0xff, 0x0e, 0x0f, 0x05, 0x0f, 0x0d, 0x0f, 0x0f, 0x0e, 0x20, 0x06, 0x18, 0x20, 0x05, 0x24, 0x0e, 0x0e, 0x01, 0x2f, - 0xff, 0x17, 0x01, 0x6f, 0xff, 0xc9, 0x30, 0x12, 0xdf, 0x30, 0xcb, 0x28, 0x39, 0xfd, 0x56, 0x06, 0x5d, 0x79, 0x44, 0xba, 0x4f, 0xf3, 0x69, 0x2f, - 0x6f, 0x06, 0x18, 0x37, 0xf0, 0x7f, 0x71, 0x2f, 0xff, 0x65, 0xc0, 0x0e, 0xa0, 0xff, 0x0e, 0x30, 0x7f, 0x1a, 0x59, 0x73, 0x7c, 0x3c, 0x5c, 0x20, - 0x4b, 0x51, 0x06, 0x7f, 0xf7, 0xc4, 0xb3, 0xf8, 0xbb, 0xc8, 0x00, 0xb2, 0x74, 0xce, 0x20, 0x00, 0xf0, 0xc5, 0x29, 0x6a, 0xbc, 0x0e, 0xd3, 0x7f, - 0x06, 0x33, 0xff, 0x14, 0x28, 0x3b, 0x3c, 0x28, 0x33, 0x3d, 0xe0, 0x06, 0x28, 0x37, 0x10, 0x07, 0x33, 0xff, 0x0e, 0xf5, 0x7f, 0x0f, 0x10, 0x10, - 0x0e, 0x10, 0x29, 0x10, 0x0f, 0x20, 0x06, 0x13, 0x20, 0x05, 0x0f, 0x0f, 0x01, 0x2f, 0xff, 0x21, 0x18, 0x1e, 0xe8, 0x3b, 0x71, 0x51, 0x8c, 0x54, - 0x06, 0x38, 0x3f, 0xa2, 0xf8, 0x3b, 0x6e, 0x4f, 0xff, 0x65, 0x00, 0x70, 0x27, 0xc7, 0x62, 0x31, 0x00, 0x6c, 0x4f, 0x89, 0x04, 0xbf, 0xff, 0x52, - 0x00, 0xe9, 0xa0, 0x6b, 0x8f, 0x58, 0x3d, 0x20, 0x00, 0x64, 0xe8, 0xd1, 0x38, 0xdb, 0x04, 0x58, 0x55, 0xb9, 0x3b, 0x51, 0x6b, 0x40, 0xff, 0x69, - 0x2f, 0x87, 0x63, 0x00, 0x68, 0x40, 0x87, 0xbf, 0xd1, 0x09, 0x6b, 0x04, 0x40, 0xff, 0x71, 0x6b, 0x71, 0x6d, 0x3e, 0x81, 0x00, 0x11, 0x95, 0x04, - 0x7e, 0x8d, 0xb3, 0x51, 0xeb, 0xfa, 0x06, 0x60, 0x7d, 0x78, 0x3b, 0xa0, 0x52, 0x06, 0x72, 0xff, 0x98, 0x3b, 0x03, 0xf5, 0xac, 0x54, 0xd6, 0x6d, - 0xad, 0x06, 0xfb, 0xbb, 0x33, 0x81, 0x5c, 0x73, 0x00, 0x22, 0x7b, 0x65, 0x04, 0x42, 0x7d, 0x07, 0x11, 0xff, 0xf8, 0x3b, 0x3d, 0x04, 0x40, 0x41, - 0x48, 0x43, 0x4f, 0x04, 0x20, 0x00, 0x20, 0x04, 0x40, 0x35, 0x20, 0x0d, 0x3f, 0x04, 0x43, 0x04, 0x31, 0x04, 0x70, 0x3b, 0x04, 0x68, 0x5b, 0x06, - 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x10, 0x11, 0x28, 0x0f, 0x00, 0x28, 0x29, 0x10, 0x10, 0x11, 0x29, 0x14, 0x11, 0x09, 0x10, 0x10, 0x10, 0x10, - 0x01, 0x2f, 0xff, 0x19, 0x18, 0x6f, 0xff, 0x00, 0xa8, 0x30, 0xaf, 0x30, 0xa2, 0x30, 0xc9, 0x30, 0x2b, 0xeb, 0x30, 0x06, 0x5d, 0x79, 0x45, 0x2f, - 0x6d, 0x75, 0x2f, 0x6f, 0x37, 0xad, 0x51, 0x72, 0x06, 0x2d, 0xfc, 0xc9, 0x48, 0x2f, 0x61, 0x00, 0x74, 0x28, 0xaf, 0x70, 0x75, 0x06, 0x20, 0x81, - 0x06, 0xf0, 0xff, 0x0e, 0xf0, 0x7f, 0x84, 0x53, 0xdc, 0x74, 0x08, 0x1a, 0x59, 0x14, 0x5c, 0x06, 0x52, 0xfd, 0x00, 0x00, 0xd0, 0x01, 0xc5, 0x70, - 0xcf, 0xc4, 0xb3, 0x74, 0xb9, 0x06, 0x70, 0x7f, 0xea, 0x07, 0x12, 0x7f, 0x53, 0x7f, 0x06, 0x73, 0xff, 0x2d, 0x28, 0x31, 0x32, 0x28, 0x33, 0x34, - 0xb8, 0x28, 0x43, 0x40, 0x04, 0x08, 0x19, 0x10, 0x09, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x11, 0x12, 0x12, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11, 0x12, - 0x13, 0x30, 0x68, 0x12, 0x30, 0x07, 0x01, 0x3d, 0x6e, 0x0e, 0x88, 0x3b, 0xeb, 0x30, 0xb5, 0xa8, 0x28, 0x39, 0xd0, 0x06, 0x68, 0x3f, 0x45, 0x2f, - 0xef, 0x20, 0x00, 0x53, 0x8f, 0x2f, 0xdb, 0x6c, 0x00, 0x76, 0x06, 0x28, 0x43, 0x06, 0x90, 0x79, 0x07, 0x50, 0xff, 0x0e, 0xf0, 0x7f, 0x06, 0x28, - 0x84, 0x14, 0x5c, 0xe6, 0x28, 0x3d, 0x06, 0x78, 0x3b, 0xd8, 0x06, 0xc5, 0xb4, 0xc0, 0x14, 0xbc, 0x06, 0x98, 0x3d, 0x0e, 0xf2, 0x7f, 0x21, 0x8e, - 0x28, 0x37, 0x3b, 0x04, 0x4c, 0x06, 0x88, 0x3f, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x12, 0x20, 0x13, 0x2c, 0x28, 0x3e, 0x12, 0x12, 0x13, - 0x11, 0x23, 0x64, 0x13, 0x30, 0x07, 0x01, 0x2f, 0xff, 0x1b, 0x01, 0x6f, 0xff, 0xd5, 0x30, 0x00, 0xe9, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0x18, 0x98, - 0x05, 0xae, 0x30, 0xa2, 0x30, 0xca, 0x06, 0x08, 0x3d, 0x46, 0x2f, 0xeb, 0x15, 0x65, 0x00, 0x6e, 0x2f, 0x7d, 0x68, 0x28, 0x43, 0x47, 0x2f, 0xfb, - 0x5d, 0x69, 0x2f, 0x85, 0x6e, 0x2f, 0x89, 0x05, 0x5f, 0xff, 0x30, 0x71, 0x79, 0x40, 0x71, 0x70, 0x65, 0x06, 0x4e, 0x7a, 0x30, 0xff, 0x30, 0xef, - 0x7a, 0x00, 0xf6, 0x00, 0x57, 0x73, 0x20, 0xfb, 0x73, 0x41, 0x09, 0x2d, 0xa0, 0x97, 0x04, 0xd1, 0x09, 0xb0, 0x67, 0x56, 0x20, 0x80, 0x8d, 0x63, - 0x21, 0x93, 0x73, 0x05, 0x41, 0x11, 0x31, 0xf1, 0x61, 0xc0, 0x00, 0x80, 0x81, 0x05, 0x12, 0x05, 0xd5, 0x6c, 0x5e, 0x5c, 0x2d, 0x57, 0x08, 0x9a, - 0x4e, 0xa3, 0x90, 0x06, 0x5f, 0xf9, 0x04, 0xd5, 0x91, 0x00, 0xb7, 0xa4, 0xc2, 0x39, 0xb8, 0x20, 0x00, 0x30, 0x05, 0xae, 0x44, 0xc5, 0x98, 0xb0, - 0x06, 0x72, 0x7f, 0x73, 0x05, 0xa2, 0x73, 0xe2, 0xf3, 0x7f, 0x73, 0xf1, 0x06, 0x11, 0xfd, 0x00, 0x00, 0x24, 0x28, 0x2d, 0x30, 0x00, 0x04, 0x3d, - 0x04, 0x46, 0x04, 0x43, 0x04, 0x37, 0x08, 0x04, 0x41, 0x04, 0x3a, 0x28, 0x4b, 0x4f, 0x04, 0x20, 0x2b, 0x00, 0x13, 0x28, 0x4d, 0x38, 0x40, 0x19, - 0x30, 0x04, 0xc8, 0x4d, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x13, 0x14, 0x17, 0x12, 0x19, 0x18, 0x13, 0x00, 0x13, 0x14, 0x19, 0x2e, - 0x14, 0x13, 0x13, 0x13, 0x51, 0x13, 0x01, 0x2f, 0xff, 0x1c, 0x78, 0x3b, 0xb0, 0x30, 0xec, 0x28, 0x31, 0x7f, 0xc0, 0x06, 0x08, 0x33, 0x97, 0xbb, - 0x58, 0x3b, 0x3f, 0xf7, 0x05, 0x94, 0xb1, 0x00, 0x50, 0x7f, 0x06, 0x38, 0x3d, 0xf0, 0x07, 0xb0, 0xff, 0x06, 0x71, 0x7f, 0x5a, 0x2b, 0x06, 0x51, - 0xff, 0x3c, 0x68, 0x97, 0x67, 0x08, 0xb3, 0x7e, 0xbe, 0x8f, 0x06, 0x72, 0xff, 0xf8, 0xad, 0x08, 0x06, 0xb8, 0x98, 0xb0, 0xe4, 0xb2, 0x0e, 0xb3, - 0x7f, 0x06, 0xb1, 0xff, 0x13, 0xae, 0x28, 0x3b, 0x35, 0x48, 0x21, 0x34, 0x04, 0xe8, 0x25, 0x10, 0x00, 0x93, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x14, - 0x00, 0x15, 0x14, 0x13, 0x15, 0x15, 0x14, 0x14, 0x15, 0x25, 0x15, 0x12, 0x20, 0x05, 0x14, 0x14, 0x01, 0x2f, 0xff, 0x1d, 0x98, 0x3b, 0x00, 0xa2, - 0x30, 0xc9, 0x30, 0xeb, 0x30, 0xfc, 0x30, 0x71, 0xd7, 0x06, 0x48, 0x3f, 0x5e, 0x77, 0x37, 0xb7, 0x6c, 0x00, 0x6f, 0x2f, 0x6b, 0x6f, 0x70, 0x05, - 0xef, 0xff, 0x0f, 0x70, 0x7f, 0x61, 0x21, 0x7f, 0x31, 0x7d, 0x05, 0xf9, 0xbf, 0xf0, 0x7f, 0x80, 0x05, 0xf9, 0xbf, 0xdc, 0x74, 0xb7, 0x5f, 0x57, - 0x7f, 0x6e, 0x40, 0x66, 0x06, 0x7b, 0x3b, 0xfc, 0xac, 0xe4, 0xb4, 0xe8, 0xb8, 0x38, 0x04, 0xd5, 0x06, 0x9b, 0xbb, 0x07, 0xd2, 0x7f, 0x05, 0xfb, - 0xbf, 0x13, 0x04, 0x32, 0x80, 0x48, 0x37, 0x35, 0x04, 0x3b, 0x04, 0x43, 0x04, 0x3f, 0xe0, 0x06, 0x08, 0x3f, 0x10, 0x07, 0x74, 0xff, 0x0e, 0x76, - 0x7f, 0x15, 0x16, 0x15, 0x14, 0x16, 0x02, 0x16, 0x15, 0x15, 0x16, 0x16, 0x0f, 0x20, 0x05, 0x15, 0x48, 0x15, 0x01, 0x2f, 0xff, 0x1e, 0x16, 0xa8, - 0x3b, 0xc6, 0x30, 0xde, 0x35, 0x30, 0xe9, 0x06, 0x48, 0x39, 0x78, 0x3b, 0x74, 0x2f, 0xfb, 0x6d, 0x46, 0xbf, 0xc0, 0x06, 0x56, 0xbb, 0x10, 0x0e, - 0x90, 0x7f, 0x71, 0x53, 0x30, 0x57, 0x6c, 0x9a, 0x20, 0xc9, 0x62, 0x06, 0x98, 0x3b, 0x4c, 0xd1, 0xd0, 0xb9, 0x7c, 0x75, 0xb7, 0x06, 0xd8, 0x3b, - 0x0e, 0x93, 0x7f, 0x58, 0x3b, 0x42, 0x28, 0x3b, 0x3c, 0x28, 0x43, 0x60, 0x3b, 0x06, 0x68, 0x3b, 0x10, 0x16, 0x94, 0xff, 0x16, 0x17, 0x16, 0x15, - 0x17, 0x02, 0x17, 0x16, 0x16, 0x17, 0x17, 0x10, 0x20, 0x05, 0x16, 0xc8, 0x78, 0x16, 0x00, 0xbf, 0xff, 0x1f, 0x0a, 0x6f, 0xff, 0xac, 0x30, 0xa4, - 0xb5, 0x28, 0x3d, 0xca, 0x06, 0x68, 0x39, 0x5f, 0xf7, 0x79, 0x2f, 0xf9, 0x6e, 0x06, 0x0e, 0xf1, 0x88, 0x5f, 0xff, 0x52, 0x00, 0xe9, 0x2f, 0xeb, - 0x75, 0x00, 0x62, 0x88, 0x2f, 0xf7, 0x69, 0x00, 0x71, 0x2f, 0xf9, 0x65, 0x00, 0x20, 0x28, 0x00, 0x63, 0x2d, 0x83, 0x6f, 0x2f, 0x85, 0xe9, 0x00, - 0x72, 0x8d, 0x48, 0xd9, 0x69, 0x00, 0x76, 0x40, 0x17, 0x3d, 0x9f, 0x20, 0x03, 0xc0, 0xb3, 0xc0, 0x06, 0xf0, 0xff, 0x0e, 0xf0, 0x7f, 0x2d, 0x57, - 0x9a, 0x4e, 0xa3, 0x90, 0xc0, 0x06, 0x7f, 0xf5, 0x33, 0x80, 0x74, 0xc7, 0x44, 0xc5, 0x98, 0xb0, 0xd5, 0x0e, 0x73, 0x7f, 0x3f, 0x77, 0x69, 0x06, - 0xa3, 0xff, 0x13, 0x28, 0x39, 0x39, 0x28, 0x3d, 0x70, 0x3d, 0x06, 0x08, 0x35, 0x10, 0x07, 0x53, 0xff, 0x0e, 0xf5, 0x7f, 0x17, 0x18, 0x27, 0x16, - 0x00, 0x18, 0x19, 0x17, 0x17, 0x18, 0x18, 0x0d, 0x18, 0x0a, 0x17, 0x17, 0x17, 0x17, 0x01, 0x2f, 0xff, 0x20, 0x78, 0x3b, 0xcf, 0xa2, 0x28, 0x3b, - 0xc1, 0x06, 0x88, 0x39, 0x00, 0x00, 0x48, 0x2f, 0xf5, 0x69, 0xdd, 0x47, 0x9d, 0x06, 0x90, 0x7f, 0xef, 0x06, 0xe0, 0x7f, 0x06, 0xf0, 0xff, 0x07, - 0x30, 0x7f, 0xed, 0x06, 0x6f, 0xf8, 0x08, 0x77, 0x6d, 0x30, 0x57, 0x06, 0xa8, 0x39, 0x00, 0x44, 0xc5, 0x0e, 0x74, 0xc7, 0xf0, 0xd2, 0x06, 0xd3, - 0x7f, 0x0e, 0xb2, 0xff, 0x38, 0x3b, 0x38, 0x38, 0x04, 0x42, 0x20, 0x03, 0x10, 0x06, 0xd3, 0xff, 0x10, 0x06, 0x75, 0x7f, 0x18, 0x19, 0x18, 0x00, - 0x17, 0x1a, 0x1a, 0x18, 0x18, 0x19, 0x1a, 0x0e, 0x04, 0x19, 0x18, 0x18, 0x18, 0x18, 0x01, 0x2f, 0xff, 0x21, 0x12, 0x80, 0x6f, 0xff, 0xdb, 0x30, - 0xf3, 0x30, 0xb8, 0x30, 0xe5, 0x0a, 0x30, 0xe9, 0x30, 0xb9, 0x06, 0x48, 0x41, 0x48, 0x2f, 0xe1, 0x6e, 0xa8, 0x2f, 0xcf, 0x75, 0x4f, 0xe1, 0x73, - 0x10, 0x16, 0x00, 0x7f, 0x2a, 0x6d, 0xfd, 0x04, 0x90, 0xc9, 0x62, 0xaf, 0x65, 0x06, 0x7f, 0xf7, 0x28, 0xc6, 0x03, 0x50, 0xb4, 0x7c, 0xb7, 0xa4, - 0xc2, 0x06, 0x9b, 0xbb, 0x0e, 0xd3, 0x7f, 0x00, 0x13, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x16, 0x43, 0x04, 0x40, 0x28, 0x45, 0x41, 0x06, - 0x08, 0x41, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x00, 0x1a, 0x19, 0x18, 0x1b, 0x1b, 0x19, 0x19, 0x1a, 0x01, 0x1b, 0x11, 0x1a, 0x19, 0x19, 0x19, 0x19, - 0x01, 0x2f, 0xff, 0x20, 0x22, 0x0e, 0x6f, 0xff, 0xb8, 0x30, 0xe3, 0x30, 0xde, 0x08, 0x30, 0xa4, 0x30, 0xab, 0x06, 0x48, 0x39, 0x00, 0x00, 0x4a, - 0xac, 0x2f, 0xf7, 0x6d, 0x4f, 0x7b, 0x63, 0x2f, 0x81, 0x06, 0x90, 0x7f, 0xef, 0x00, 0x75, 0x71, 0x28, 0xbf, 0x06, 0x16, 0x42, 0x90, 0xff, 0x6b, - 0x06, 0x40, 0xff, 0x47, 0x2f, 0xf5, 0xc0, 0x06, 0xb1, 0x81, 0x06, 0xf1, 0xff, 0x59, 0x72, 0x70, 0x4e, 0xa0, 0x52, 0x80, 0x06, 0x9f, 0xf7, 0x90, - 0xc7, 0x54, 0xba, 0x74, 0xc7, 0x74, 0x71, 0xce, 0x06, 0x78, 0xbb, 0x07, 0x73, 0x7f, 0x06, 0x73, 0xff, 0x2f, 0x04, 0x3c, 0x28, 0x33, 0x1c, 0x39, - 0x04, 0x3a, 0x28, 0x39, 0x10, 0x06, 0x31, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x1a, 0x1b, 0x00, 0x1e, 0x19, 0x14, 0x20, 0x1a, 0x1a, 0x1b, 0x20, 0x02, - 0x31, 0x1b, 0x1a, 0x1a, 0x1a, 0x1a, 0x01, 0x2f, 0xff, 0x23, 0x40, 0x01, 0x6f, 0xff, 0xde, 0x30, 0xeb, 0x30, 0xc6, 0x30, 0x01, 0xa3, 0x30, 0xcb, - 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x28, 0x3f, 0x45, 0x4d, 0x2f, 0xed, 0x72, 0x00, 0x74, 0x28, 0x3b, 0x6e, 0x28, 0x3f, 0xf0, 0x06, 0x17, 0xbf, 0x0f, - 0xd0, 0x7f, 0x06, 0x19, 0xbf, 0x06, 0xf0, 0x7f, 0x6c, 0x9a, 0xd0, 0x63, 0x08, 0x3c, 0x5c, 0x4b, 0x51, 0x06, 0x7f, 0xf7, 0xc8, 0xb9, 0x74, 0x01, - 0xb9, 0xf0, 0xd2, 0xc8, 0xb2, 0x6c, 0xd0, 0x06, 0x5b, 0xbb, 0xa0, 0x0e, 0xf2, 0x7f, 0x1c, 0x28, 0x39, 0x40, 0x04, 0x42, 0x04, 0x38, 0x3c, 0x04, - 0x3d, 0x20, 0x03, 0x06, 0x18, 0x41, 0x10, 0x07, 0xd4, 0xff, 0x0e, 0x16, 0x7f, 0x1b, 0x1d, 0x00, 0x20, 0x1e, 0x21, 0x22, 0x1b, 0x1b, 0x1e, 0x22, - 0x02, 0x1a, 0x1d, 0x1b, 0x1b, 0x1b, 0x1b, 0x01, 0x2f, 0xff, 0x24, 0x40, 0x20, 0x6f, 0xff, 0xe1, 0x30, 0xad, 0x30, 0xb7, 0x30, 0x62, 0xb3, 0x06, - 0x28, 0x35, 0x78, 0x3b, 0x65, 0x00, 0x78, 0x4e, 0xf3, 0x6f, 0xeb, 0x06, 0xc0, 0x7f, 0x06, 0x18, 0xb5, 0xd0, 0xff, 0x6b, 0x06, 0xa0, 0xff, 0x73, - 0x20, 0x01, 0x06, 0x71, 0x81, 0x10, 0x4d, 0x00, 0xe9, 0x06, 0xc1, 0xff, 0xa8, 0x58, 0x7f, 0x89, 0x20, 0xe5, 0x54, 0x06, 0x7f, 0xf5, 0x00, 0x00, - 0x55, 0xba, 0xdc, 0x1c, 0xc2, 0x54, 0xcf, 0x06, 0x90, 0x7f, 0x07, 0x13, 0x7f, 0x06, 0xd1, 0xff, 0x1c, 0x04, 0x5c, 0x35, 0x28, 0x31, 0x41, 0x06, - 0x48, 0x37, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x1c, 0x1e, 0x00, 0x21, 0x1f, 0x22, 0x23, 0x1c, 0x1c, 0x1f, 0x23, 0x02, 0x1b, 0x1e, 0x1c, - 0x1c, 0x1c, 0x1c, 0x01, 0x2f, 0xff, 0x25, 0x40, 0x01, 0x6f, 0xff, 0xe2, 0x30, 0xf3, 0x30, 0xc8, 0x30, 0x1a, 0xbb, 0x30, 0xe9, 0x20, 0x05, 0x06, - 0x5c, 0xf7, 0x6f, 0x2f, 0xf1, 0x74, 0xaa, 0x26, 0xbf, 0x65, 0x2f, 0xff, 0x72, 0x2f, 0x85, 0x74, 0x10, 0x15, 0xc0, 0x7f, 0x99, 0x00, 0x84, 0x79, - 0x72, 0x5e, 0x58, 0xc9, 0x62, 0x79, 0x40, 0x72, 0x06, 0x5f, 0xf7, 0xac, 0xba, 0xb8, 0xd2, 0x38, 0xc1, 0x30, 0xab, 0xb7, 0x06, 0x9b, 0xbb, 0x0e, - 0xd3, 0x7f, 0x1c, 0x04, 0x3e, 0x04, 0x11, 0x3d, 0x04, 0x42, 0x28, 0x3d, 0x35, 0x04, 0x40, 0x20, 0x01, 0x60, 0x30, 0x20, 0x0b, 0x10, 0x1d, 0xb4, - 0xff, 0x1d, 0x1f, 0x22, 0x20, 0x23, 0x00, 0x24, 0x1d, 0x1d, 0x20, 0x24, 0x1c, 0x1f, 0x1d, 0x15, 0x1d, 0x1d, 0x1d, 0x01, 0x2f, 0xff, 0x26, 0x78, - 0x3b, 0xaa, 0x28, 0x35, 0x01, 0xf3, 0x30, 0xc0, 0x30, 0x18, 0x98, 0xa2, 0x28, 0x45, 0x05, 0xc6, 0x30, 0xa3, 0x30, 0xeb, 0x05, 0xc8, 0x43, 0x4e, - 0x2f, 0xf7, 0x14, 0x74, 0x00, 0x68, 0x48, 0x39, 0x6c, 0x28, 0x39, 0x6e, 0x00, 0x45, 0x64, 0x2f, 0x07, 0x20, 0x00, 0x41, 0x48, 0x51, 0x69, 0x20, - 0x13, 0x75, 0x6c, 0x4f, 0x19, 0x04, 0x7f, 0xff, 0xf0, 0x67, 0x20, 0x28, 0xc9, 0xe9, 0xc0, 0x8d, 0x75, 0x61, 0x2f, 0x93, 0x38, 0xd9, 0x04, 0x50, - 0x83, 0x4e, 0x2f, 0xf1, 0x65, 0x20, 0xf3, 0xb6, 0x50, 0xff, 0xe4, 0x40, 0xff, 0x30, 0x6f, 0x63, 0x41, 0x13, 0xf1, 0x07, 0x6e, 0x8d, 0x04, 0xe0, - 0xff, 0x20, 0x00, 0x4f, 0x81, 0x85, 0x31, 0x75, 0x69, 0x05, 0x0f, 0xff, 0xbf, 0xb1, 0xe7, 0x61, 0x41, 0xf9, 0x32, 0x11, 0xb2, 0x0d, 0x31, 0xfd, - 0x30, 0x19, 0x04, 0x5f, 0xff, 0x00, 0x77, 0x83, 0x5e, 0x5c, 0x89, 0x5b, 0x84, 0x76, 0x08, 0x17, 0x52, 0xaf, 0x65, 0x06, 0x3f, 0xfd, 0x24, 0xb1, - 0x5c, 0x00, 0xb3, 0x80, 0xb7, 0xdc, 0xb4, 0x39, 0xb8, 0x20, 0x00, 0x00, 0x64, 0xc5, 0xf8, 0xd2, 0xac, 0xb9, 0xa4, 0x7d, 0xc2, 0x05, 0xf3, 0x7f, - 0x72, 0x7d, 0x73, 0x7d, 0x05, 0x32, 0x77, 0x00, 0x13, 0x7f, 0x68, 0x61, 0xff, 0x70, 0x48, 0x2f, 0x81, 0x05, 0x51, 0xfb, 0x45, 0x3b, 0x04, 0x38, - 0x04, 0x34, 0xa8, 0x48, 0x37, 0x3b, 0x28, 0x37, 0x3d, 0x20, 0x0b, 0x41, 0x04, 0x3a, 0x82, 0x20, 0x13, 0x35, 0x04, 0x20, 0x00, 0x10, 0x48, 0x55, - 0x38, 0xaa, 0x20, 0x19, 0x4c, 0xa0, 0x15, 0x3e, 0x28, 0x67, 0x42, 0x28, 0x67, 0x3e, 0x38, 0x04, 0x32, 0x28, 0x69, 0x0a, 0xf4, 0xff, 0x10, 0x0e, - 0xf0, 0x7f, 0x1e, 0x20, 0x02, 0x00, 0x22, 0x02, 0x02, 0x1e, 0x1e, 0x21, 0x02, 0x1d, 0x04, 0x20, 0x1e, 0x1e, 0x1e, 0x1e, 0x01, 0x2f, 0xff, 0x27, - 0x11, 0x88, 0x6f, 0xff, 0xcb, 0x30, 0xab, 0x28, 0x3d, 0xb0, 0x30, 0xa2, 0xd8, 0x05, 0xc8, 0x31, 0xd7, 0x3b, 0x63, 0x2f, 0xed, 0x3f, 0xf1, 0x67, - 0x00, 0x75, 0xc0, 0x2f, 0xf7, 0x10, 0x15, 0xd0, 0x7f, 0x3c, 0x5c, 0xa0, 0x52, 0xc9, 0x62, 0x60, 0xdc, 0x05, 0xdf, 0x6c, 0xaf, 0xff, 0xc8, 0xb2, - 0x74, 0xce, 0x7c, 0x1b, 0xb7, 0xfc, 0xac, 0x06, 0x70, 0x7f, 0x07, 0x93, 0x7f, 0xe1, 0x06, 0x43, 0xff, 0x38, 0x3b, 0x51, 0x3a, 0x28, 0x35, 0x40, - 0x28, 0x39, 0x33, 0x04, 0x43, 0x03, 0x28, 0x0d, 0x80, 0x10, 0x19, 0xd4, 0xff, 0x1f, 0x21, 0x23, 0x21, 0x24, 0x25, 0x1f, 0x00, 0x1f, 0x22, 0x25, - 0x1e, 0x21, 0x1f, 0x1f, 0x1f, 0x48, 0x1f, 0x01, 0x2f, 0xff, 0x28, 0x0a, 0x6f, 0xff, 0xd1, 0x30, 0xca, 0x34, 0x30, 0xde, 0x06, 0x68, 0x37, 0x3f, - 0xff, 0x50, 0x4f, 0xdd, 0x61, 0x00, 0x68, 0x6d, 0x06, 0x08, 0x35, 0x0f, 0xf0, 0x7f, 0xe1, 0x0e, 0x40, 0x7f, 0xf4, 0x5d, 0xff, 0x10, 0x62, 0x6c, - 0x9a, 0x06, 0x92, 0xff, 0x0c, 0xd3, 0x98, 0xb0, 0x35, 0xc8, 0xb9, 0x0f, 0x33, 0x7f, 0x06, 0x52, 0x7f, 0x1f, 0x28, 0x37, 0x3d, 0x28, 0x3b, 0x70, - 0x3c, 0x06, 0x08, 0x35, 0x10, 0x07, 0xf4, 0xff, 0x0e, 0x56, 0x7f, 0x20, 0x22, 0x24, 0x23, 0x00, 0x25, 0x26, 0x20, 0x20, 0x23, 0x26, 0x20, 0x22, - 0x09, 0x20, 0x20, 0x20, 0x20, 0x01, 0x2f, 0xff, 0x29, 0x12, 0x88, 0x3b, 0x01, 0xe9, 0x30, 0xb0, 0x30, 0xa2, 0x30, 0xa4, 0x06, 0x68, 0x3f, 0xd0, - 0x38, 0x3b, 0x9f, 0xf3, 0x79, 0x10, 0x16, 0x00, 0x7f, 0xf4, 0x5d, 0xc9, 0x62, 0x20, 0x2d, 0x57, 0x06, 0xb8, 0x3b, 0x7c, 0xb7, 0xfc, 0xac, 0x74, - 0x6a, 0xc7, 0x06, 0xbb, 0xbb, 0x07, 0x93, 0x7f, 0x69, 0x06, 0x48, 0x3b, 0x40, 0x28, 0x3f, 0x33, 0x2c, 0x04, 0x32, 0x28, 0x45, 0x39, 0x06, 0x08, - 0x3f, 0x10, 0x16, 0xf4, 0xff, 0x21, 0x23, 0x00, 0x25, 0x24, 0x26, 0x27, 0x21, 0x21, 0x24, 0x27, 0x02, 0x21, 0x23, 0x21, 0x21, 0x21, 0x21, 0x01, - 0x2f, 0xff, 0x2a, 0x41, 0x19, 0x6f, 0xff, 0xda, 0x30, 0xeb, 0x30, 0xfc, 0x06, 0x68, 0x37, 0xaa, 0x5f, 0xf7, 0x65, 0x28, 0x3b, 0x75, 0x06, 0xad, - 0x77, 0xe9, 0x28, 0xbb, 0x6f, 0xea, 0x06, 0x80, 0x81, 0x07, 0x10, 0xff, 0x31, 0x7f, 0xf9, 0x06, 0xe1, 0xff, 0xfa, 0x06, 0x8f, 0xf8, 0xd8, 0x10, - 0x79, 0x81, 0x9c, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x98, 0xd3, 0x38, 0xe8, 0xb8, 0x06, 0xb0, 0x7f, 0x07, 0x52, 0x7f, 0x06, 0x93, 0xff, 0x1f, 0x04, - 0x35, 0xb8, 0x28, 0x3b, 0x43, 0x06, 0x08, 0x33, 0x0f, 0x71, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x22, 0x24, 0x26, 0x00, 0x25, 0x27, 0x28, 0x22, 0x22, - 0x25, 0x28, 0x22, 0x04, 0x24, 0x22, 0x22, 0x22, 0x22, 0x01, 0x2f, 0xff, 0x2b, 0x0e, 0x80, 0x6f, 0xff, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x30, 0xad, - 0x00, 0x30, 0xc3, 0x30, 0xc4, 0x30, 0xfb, 0x30, 0xcd, 0x02, 0x30, 0xa4, 0x30, 0xd3, 0x30, 0xb9, 0x05, 0xa8, 0x4b, 0x53, 0x00, 0x00, 0x74, 0x00, - 0x2e, 0x00, 0x20, 0x00, 0x4b, 0xa8, 0x2c, 0x73, 0x74, 0x20, 0x0b, 0x73, 0x20, 0x0b, 0x61, 0x00, 0x6e, 0x2a, 0x00, 0x64, 0x20, 0x13, 0x4e, 0x28, - 0x57, 0x76, 0x2c, 0x8b, 0x73, 0xd0, 0x04, 0xc0, 0x7f, 0x3c, 0xed, 0x6e, 0x20, 0x85, 0x2d, 0x00, 0x43, 0x00, 0x6a, 0x68, 0x2f, 0x83, 0x30, 0x6f, - 0x74, 0x28, 0x4d, 0x70, 0x20, 0x0d, 0x65, 0xaa, 0x20, 0x15, 0x65, 0x40, 0x1b, 0x4e, 0x2d, 0x13, 0xe9, 0x20, 0x8d, 0xe8, 0xda, 0x03, 0xe0, 0x8d, - 0x00, 0x30, 0xff, 0x75, 0x06, 0x40, 0xff, 0xd1, 0x83, 0x65, 0x05, 0xa1, 0x7f, 0x6e, 0xa2, 0x21, 0xff, 0x43, 0x81, 0x79, 0xf3, 0x00, 0x62, 0x2f, - 0x0b, 0x6c, 0xaa, 0x22, 0x13, 0x79, 0x42, 0x03, 0x69, 0x42, 0x05, 0x65, 0x04, 0x62, 0x05, 0x23, 0x00, 0x57, 0xfa, 0x57, 0x28, 0x83, 0x8c, 0x54, - 0x3c, 0x04, 0x5c, 0xf4, 0x7e, 0xaf, 0x65, 0x06, 0x1f, 0xfd, 0x38, 0xc1, 0x00, 0x78, 0xc7, 0xb8, 0xd2, 0xa4, 0xd0, 0x20, 0xce, 0x03, 0x24, 0xb1, - 0x44, 0xbe, 0xa4, 0xc2, 0x05, 0xff, 0xf8, 0x00, 0x91, 0xff, 0xc6, 0x31, 0x95, 0x05, 0x13, 0x81, 0x53, 0x00, 0xe3, 0x2b, 0xb9, 0xd1, 0xff, 0x76, - 0xd0, 0x60, 0x13, 0x05, 0x32, 0x83, 0x21, 0x28, 0x3b, 0x3d, 0x04, 0x42, 0x04, 0x04, 0x2d, 0x00, 0x1a, 0x04, 0x38, 0x20, 0x07, 0x41, 0x04, 0x15, - 0x20, 0x00, 0x38, 0x20, 0x03, 0x1d, 0x28, 0x53, 0x32, 0x20, 0x11, 0x70, 0x41, 0x04, 0xe8, 0x55, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x23, - 0x27, 0x29, 0x28, 0x00, 0x29, 0x2a, 0x23, 0x23, 0x26, 0x2c, 0x26, 0x27, 0x09, 0x23, 0x23, 0x23, 0x23, 0x01, 0x2f, 0xff, 0x2c, 0x01, 0xc8, 0x3b, - 0x06, 0xeb, 0x30, 0xb7, 0x30, 0xa2, 0x05, 0xa8, 0x31, 0x00, 0x18, 0x3b, 0x4c, 0xaf, 0x2f, 0xf9, 0x63, 0x28, 0x3f, 0x61, 0x06, 0x85, 0x3b, 0x38, - 0x27, 0x70, 0x85, 0x05, 0x96, 0x44, 0xda, 0x07, 0x30, 0xff, 0x39, 0x39, 0x61, 0x06, 0x61, 0x83, 0x00, 0x10, 0x7f, 0xed, 0x05, 0xc2, 0x03, 0x23, - 0x01, 0x57, 0x62, 0x53, 0x7f, 0x89, 0x9a, 0x4e, 0x06, 0x7f, 0xfb, 0x81, 0x58, 0x3b, 0xe8, 0xb8, 0xdc, 0xc2, 0x44, 0xc5, 0x06, 0x53, 0x7f, 0xd8, - 0x9a, 0x3b, 0x07, 0x11, 0xff, 0xfa, 0x06, 0x04, 0x03, 0x98, 0x3b, 0x1b, 0x04, 0x4e, 0x8e, 0x28, 0x39, 0x38, 0x04, 0x4f, 0x04, 0xe8, 0x2d, 0x07, - 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x24, 0x00, 0x28, 0x2b, 0x29, 0x2b, 0x2c, 0x24, 0x24, 0x27, 0x01, 0x2b, 0x27, 0x28, 0x24, 0x24, 0x24, 0x24, - 0x01, 0x2f, 0xff, 0x58, 0x2d, 0xd8, 0x3b, 0xd3, 0x28, 0x41, 0x58, 0x45, 0xfb, 0x30, 0xb0, 0x00, 0x30, 0xec, 0x30, 0xca, 0x30, 0xc7, 0x30, 0xa3, - 0x35, 0x30, 0xfc, 0x28, 0x57, 0x05, 0x78, 0x3b, 0x56, 0x4f, 0xfd, 0x63, 0x4c, 0xef, 0xd1, 0x3f, 0x03, 0x7b, 0x7b, 0x74, 0x4f, 0xfd, 0x20, 0x00, - 0x47, 0x2e, 0x97, 0xbd, 0x3d, 0x0b, 0x61, 0x2f, 0x91, 0x3f, 0x27, 0x03, 0x7e, 0x87, 0x9f, 0x77, 0x2d, 0xe0, 0x83, 0x6b, 0x2d, 0x2f, 0xf5, 0x30, - 0x15, 0x6c, 0x4e, 0xf3, 0x2d, 0x04, 0x60, 0x81, 0x00, 0x70, 0xff, 0x77, 0x75, 0x6c, 0x7b, 0x30, 0xed, 0x00, 0x50, 0xff, 0x6e, 0x04, 0x0e, 0x77, - 0xf1, 0x83, 0x00, 0x51, 0x77, 0xf5, 0x04, 0x38, 0xbb, 0x51, 0xff, 0x71, 0xfd, 0x3e, 0x6f, 0x79, 0x2f, 0x07, 0x6c, 0x2f, 0x13, 0xfc, 0x3f, 0x03, - 0x31, 0xfb, 0x3d, 0x8b, 0x71, 0xfb, 0x30, 0x15, 0x03, 0x98, 0x3b, 0x87, 0x65, 0x00, 0xee, 0x68, 0x79, 0x72, 0x8c, 0x54, 0x3c, 0x68, 0x01, 0x97, - 0x67, 0xb3, 0x7e, 0x01, 0x4e, 0xaf, 0x05, 0x9a, 0x38, 0x80, 0x88, 0x3b, 0x48, 0xbe, 0x3c, 0xc1, 0xb8, 0xd2, 0x20, 0x00, 0x00, 0xf8, 0xad, 0x08, - 0xb8, 0x98, 0xb0, 0x18, 0x77, 0xb5, 0x06, 0x58, 0x3b, 0x00, 0x11, 0xff, 0x31, 0x99, 0x64, 0x04, 0xe3, 0x7f, 0x73, 0xfd, 0xb1, 0xfd, 0xeb, 0x33, - 0xf1, 0x05, 0x11, 0xfb, 0xd8, 0x3b, 0x12, 0x28, 0x37, 0x3d, 0x28, 0x3d, 0x58, 0x4b, 0x11, 0x20, 0x00, 0x38, 0x20, 0x03, 0x13, 0x04, 0x40, 0x48, - 0x5b, 0x17, 0x30, 0x04, 0x34, 0x40, 0x1d, 0x4b, 0x04, 0x08, 0x57, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x25, 0x29, 0x2a, 0x2a, 0x2a, - 0x2b, 0x25, 0x25, 0x00, 0x28, 0x2a, 0x25, 0x29, 0x25, 0x25, 0x25, 0x25, 0x91, 0x01, 0x2f, 0xff, 0x2e, 0x0a, 0x6f, 0xff, 0xb9, 0x30, 0xea, 0x28, - 0x29, 0x6d, 0xe0, 0x05, 0x08, 0x23, 0x00, 0x9f, 0xf7, 0x75, 0x28, 0x15, 0x56, 0x11, 0x6d, 0x05, 0xaf, 0xef, 0xc0, 0x10, 0x08, 0x50, 0x7f, 0x06, - 0x1f, 0xfd, 0xcf, 0x82, 0xcc, 0x91, 0x57, 0x53, 0x80, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x18, 0xc2, 0xac, 0xb9, 0xa8, 0x63, 0xb0, 0x06, 0x90, 0x7f, - 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x43, 0x28, 0x1f, 0x38, 0x35, 0x1c, 0x30, 0x04, 0x3c, 0x04, 0x08, 0x19, 0x10, 0x11, 0xf4, 0xff, 0x06, 0x16, 0xff, - 0x26, 0x2a, 0x00, 0x2e, 0x2b, 0x2e, 0x2e, 0x26, 0x26, 0x2b, 0x2e, 0x02, 0x2a, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x01, 0x2f, 0xff, 0x2f, 0x50, 0x0d, - 0x6f, 0xff, 0xc8, 0x28, 0x3b, 0xcb, 0x30, 0xc0, 0x30, 0x00, 0xfc, 0x30, 0xc9, 0x30, 0xfb, 0x30, 0xc8, 0x30, 0x15, 0xd0, 0x30, 0xb4, 0x05, 0xc8, - 0x47, 0x54, 0x68, 0x39, 0x69, 0x2f, 0xcd, 0xc1, 0x3f, 0xd1, 0x9b, 0x71, 0x54, 0x00, 0x6f, 0x00, 0x62, 0x2f, 0xe5, 0x60, 0x67, 0x20, 0x07, 0x05, - 0x30, 0x7f, 0x74, 0x00, 0xe9, 0x00, 0x2d, 0xbb, 0x2f, 0xf7, 0x74, 0x20, 0x05, 0x05, 0x50, 0x7b, 0x00, 0x50, 0xff, 0x75, 0x06, 0x60, 0xff, 0x71, - 0x7f, 0xd0, 0x3f, 0xf5, 0x06, 0xb0, 0xff, 0x79, 0x05, 0xc0, 0x7f, 0x79, 0x72, 0xcb, 0x7a, 0x00, 0x3c, 0x5c, 0xbe, 0x8f, 0x8c, 0x54, 0x1a, 0x59, - 0x08, 0xf4, 0x5d, 0xe5, 0x54, 0x05, 0xfb, 0x43, 0xb8, 0xd2, 0xac, 0x00, 0xb9, 0xc8, 0xb2, 0xe4, 0xb2, 0xdc, 0xb4, 0xa0, 0x06, 0xd1, 0x14, 0xbc, - 0xe0, 0xac, 0x05, 0xfb, 0xc3, 0x00, 0x31, 0xff, 0x6e, 0xf4, 0x05, 0xa2, 0x01, 0xf3, 0xff, 0x3f, 0x63, 0x05, 0xb2, 0x81, 0x22, 0x68, 0x39, 0x38, - 0x04, 0x41, 0x34, 0x28, 0x3d, 0x34, 0x04, 0x20, 0x00, 0x38, 0x20, 0x03, 0x05, 0x22, 0x04, 0x3e, 0x04, 0x31, 0x28, 0x4d, 0x33, 0x20, 0x07, 0xc0, - 0x0d, 0x74, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x27, 0x2b, 0x2f, 0x2c, 0x2f, 0x2f, 0x00, 0x27, 0x27, 0x2c, 0x2f, 0x2c, 0x2b, 0x27, 0x27, 0x25, 0x27, - 0x27, 0x01, 0x2f, 0xff, 0x30, 0x01, 0x6f, 0xff, 0xbf, 0x28, 0x35, 0x10, 0xaf, 0x30, 0xb9, 0x28, 0x37, 0xab, 0x30, 0xa4, 0x30, 0x43, 0xb3, 0x20, - 0x09, 0xf8, 0x8a, 0xf6, 0x5c, 0x05, 0xb8, 0x3b, 0x3f, 0xf7, 0x14, 0x6b, 0x00, 0x73, 0xa8, 0x35, 0x43, 0x2f, 0x83, 0x69, 0x00, 0x6a, 0x63, 0x28, - 0x3b, 0x30, 0x15, 0x49, 0x20, 0x1b, 0x6c, 0x68, 0x51, 0x73, 0xad, 0x04, 0x0f, 0xff, 0xce, 0x20, 0x5b, 0x65, 0x40, 0x7d, 0x50, 0x89, 0x71, 0x2f, - 0x87, 0xed, 0x30, 0x0f, 0x78, 0x45, 0x30, 0x8b, 0xef, 0x80, 0x15, 0x04, 0xb0, 0xff, 0x2d, 0xa8, 0x37, 0xd7, 0xb1, 0x01, 0x3f, 0x93, 0x73, 0x2e, - 0x11, 0x6c, 0x2f, 0x9b, 0x04, 0x1f, 0xff, 0x31, 0x5d, 0x7f, 0x6f, 0x41, 0x03, 0x71, 0x01, 0x51, 0x8b, 0x38, 0x41, 0xb1, 0x87, 0x04, 0x7f, 0xff, - 0x71, 0xdd, 0xb8, 0x91, 0x81, 0x63, 0x60, 0x0d, 0x38, 0x43, 0x05, 0x10, 0x81, 0x79, 0x72, 0x4b, 0x00, 0x51, 0xaf, 0x65, 0x8c, 0x54, 0xef, 0x51, - 0xd1, 0x03, 0x79, 0xaf, 0x65, 0xa4, 0x7f, 0x9b, 0x05, 0xa2, 0xfb, 0x43, 0x88, 0x00, 0xd1, 0x6c, 0xd0, 0xa4, 0xc2, 0x20, 0x00, 0x00, 0x04, 0xcf, - 0x74, 0xc7, 0xe4, 0xce, 0x30, 0x09, 0x1c, 0xc8, 0x3d, 0xc4, 0xb3, 0x06, 0x33, 0x7f, 0x32, 0x7f, 0x58, 0x37, 0xb3, 0x7f, 0x65, 0x2f, 0x13, 0xe3, - 0x73, 0x7d, 0x38, 0x55, 0x04, 0x12, 0x7f, 0x6c, 0x00, 0x68, 0x00, 0x41, 0xff, 0x05, 0x52, 0x81, 0x11, 0x22, 0x04, 0x51, 0x28, 0x3d, 0x3a, 0x04, - 0x41, 0x68, 0x35, 0x57, 0x1a, 0x28, 0x41, 0x39, 0x20, 0x0f, 0x3e, 0x20, 0x11, 0x0d, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x28, 0x2c, 0x1b, - 0x2d, 0x1d, 0x1d, 0x28, 0x28, 0x00, 0x2d, 0x1d, 0x2b, 0x2c, 0x28, 0x28, 0x28, 0x28, 0x90, 0x01, 0x2f, 0xff, 0x31, 0x34, 0x6f, 0xff, 0xa2, 0x30, - 0xe1, 0x30, 0x75, 0xea, 0x28, 0x37, 0x05, 0xfd, 0x6f, 0x7f, 0xff, 0x55, 0x6f, 0xf3, 0x65, 0x4f, 0x73, 0x5d, 0x53, 0x2f, 0xfd, 0x61, 0x40, 0x0d, - 0x04, 0x96, 0xad, 0xdf, 0xff, 0xc9, 0x60, 0x71, 0xe0, 0x38, 0x2d, 0x50, 0x8b, 0x38, 0xc5, 0x64, 0x00, 0x19, 0x20, 0x41, 0x0e, 0x00, 0x6d, 0x00, - 0xe9, 0x4f, 0x95, 0x58, 0x4f, 0x04, 0x5f, 0xfc, 0x56, 0xb7, 0x2f, 0xe7, 0x72, 0x45, 0xa1, 0x3f, 0xfb, 0x67, 0x41, 0x09, 0x71, 0x07, 0x51, 0x09, - 0xee, 0x04, 0x38, 0x31, 0x9f, 0xff, 0x71, 0x71, 0x69, 0x2f, 0xf1, 0x71, 0x8b, 0x30, 0x0b, 0x64, 0x1d, 0x00, 0x27, 0x00, 0x31, 0x01, 0x30, 0x9d, - 0x39, 0xc7, 0x61, 0x04, 0x6f, 0xff, 0x6f, 0x45, 0x2a, 0x35, 0x31, 0xf3, 0x64, 0x6a, 0x29, 0x52, 0x0f, 0x70, 0x0d, 0x5e, 0x87, 0xc3, 0x91, 0x89, - 0x04, 0x10, 0x87, 0x8e, 0x7f, 0xfd, 0x56, 0x06, 0x72, 0xfb, 0x3f, 0xff, 0x0f, 0xf8, 0xbb, 0x6d, 0xad, 0x06, 0xb0, 0x7f, 0x72, 0x7f, 0x52, 0x7d, - 0x5f, 0xf7, 0xf4, 0x93, 0x85, 0x04, 0xd2, 0x7b, 0x00, 0xf1, 0xff, 0x05, 0x3c, 0xc1, 0x21, 0x28, 0x25, 0x35, 0x04, 0x05, 0x34, 0x04, 0x38, 0x04, - 0x3d, 0x28, 0x45, 0x3d, 0x20, 0x05, 0x41, 0x4b, 0x20, 0x0f, 0x20, 0x00, 0x28, 0x04, 0x42, 0x28, 0x45, 0x41, 0x42, 0x20, 0x0d, 0x20, 0x00, 0x10, - 0x04, 0x3c, 0x20, 0x23, 0x5c, 0x40, 0x20, 0x23, 0x3a, 0x20, 0x27, 0x0b, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x29, 0x2e, 0x00, 0x13, 0x31, 0x2d, - 0x14, 0x29, 0x29, 0x31, 0x14, 0x02, 0x29, 0x2e, 0x29, 0x29, 0x29, 0x29, 0x01, 0x2f, 0xff, 0x32, 0x40, 0x13, 0x6f, 0xff, 0xa6, 0x30, 0xeb, 0x30, - 0xb0, 0x30, 0x15, 0xa2, 0x30, 0xa4, 0x06, 0x68, 0x3d, 0x55, 0x2f, 0xeb, 0x75, 0x27, 0x33, 0x50, 0x75, 0x2f, 0xdf, 0x79, 0x10, 0x16, 0x20, 0x7f, - 0x4c, 0x4e, 0xc9, 0x62, 0x20, 0x2d, 0x57, 0x06, 0x98, 0x3d, 0xb0, 0xc6, 0xe8, 0xb8, 0xfc, 0x1a, 0xac, 0x74, 0xc7, 0x06, 0x9b, 0xbb, 0x07, 0x93, - 0x7f, 0x69, 0x06, 0x2c, 0xc0, 0x23, 0x82, 0x28, 0x13, 0x43, 0x04, 0x33, 0x04, 0x32, 0x28, 0x29, 0x39, 0xc0, 0x03, 0xe8, 0x17, 0x10, 0x19, 0x34, - 0xff, 0x2a, 0x2f, 0x30, 0x2e, 0x30, 0x30, 0x00, 0x2a, 0x2a, 0x2e, 0x30, 0x2d, 0x2f, 0x2a, 0x2a, 0x24, 0x2a, 0x2a, 0x01, 0x2f, 0xff, 0x33, 0x01, - 0x6f, 0xff, 0x73, 0x7c, 0x00, 0x18, 0x98, 0xd0, 0x30, 0xfc, 0x30, 0xb8, 0x30, 0x02, 0xf3, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x18, 0x3b, 0x53, - 0xac, 0x2f, 0xe7, 0x56, 0x2f, 0xef, 0x72, 0x2f, 0x75, 0x3f, 0x7d, 0x20, 0x00, 0x56, 0x49, 0x2f, 0xfb, 0x6c, 0x2f, 0x77, 0x6e, 0x2f, 0xff, 0x04, - 0xfc, 0x7d, 0xce, 0xf5, 0x20, 0x69, 0x3b, 0xe5, 0x50, 0x83, 0x3f, 0x65, 0x67, 0x60, 0x0f, 0x61, 0xce, 0xed, 0xea, 0x30, 0x99, 0x04, 0x3c, 0x0d, - 0x9f, 0xdb, 0x6b, 0x40, 0xf1, 0x69, 0x2f, 0x87, 0x63, 0x2a, 0x00, 0x68, 0x4f, 0x6f, 0x4a, 0x29, 0x55, 0x6e, 0x2e, 0x0d, 0x66, 0xd7, 0x4f, 0xfd, - 0x3f, 0x8f, 0x6e, 0x2f, 0xa5, 0x65, 0x21, 0x1b, 0x03, 0x9e, 0x0f, 0x31, 0x6b, 0x7b, 0x6f, 0x41, 0x03, 0x31, 0x85, 0x50, 0xff, 0x31, 0x85, 0x69, - 0xae, 0x7f, 0x30, 0x85, 0xfb, 0x5d, 0x1b, 0x30, 0x7f, 0x03, 0xd5, 0xe1, 0x71, 0xeb, 0x51, 0x81, 0xed, 0x61, 0x7f, 0x51, 0x6b, 0x55, 0x20, 0x6f, - 0x07, 0x6c, 0x6e, 0x93, 0x45, 0x2e, 0xa5, 0x2e, 0x4e, 0x9b, 0x60, 0x55, 0x20, 0x07, 0x03, 0x5f, 0xff, 0x8e, 0x7f, 0x5e, 0x5c, 0xf4, 0x00, 0x7e, - 0x14, 0x5c, 0xac, 0x4e, 0xa4, 0x7f, 0x9b, 0x80, 0x06, 0x02, 0xfd, 0x00, 0x00, 0xf8, 0xbb, 0x6d, 0xad, 0x39, 0x00, 0xb8, 0x20, 0x00, 0x84, 0xbc, - 0xc4, 0xc9, 0x44, 0x01, 0xc5, 0x7c, 0xc7, 0x9c, 0xb7, 0xdc, 0xb4, 0x05, 0xbb, 0xc5, 0xe2, 0xd2, 0x7f, 0x33, 0x73, 0x32, 0x61, 0x20, 0x00, 0x4d, - 0x40, 0x0d, 0x67, 0xdd, 0x41, 0x81, 0x32, 0xf9, 0x69, 0x83, 0x91, 0x32, 0x05, 0x03, 0xb1, 0xff, 0x6c, 0x22, 0xed, 0xed, 0x71, 0xff, 0x54, 0x05, - 0x52, 0x67, 0x20, 0xa3, 0x1b, 0x33, 0x81, 0x6e, 0x42, 0x25, 0x82, 0x03, 0xff, 0x8e, 0x10, 0x04, 0x3c, 0x04, 0x35, 0x28, 0x3f, 0x38, 0x22, 0x04, - 0x3a, 0x28, 0x3d, 0x3d, 0x04, 0x41, 0x20, 0x07, 0x38, 0x8a, 0x20, 0x11, 0x20, 0x00, 0x12, 0x20, 0x13, 0x40, 0x28, 0x55, 0x38, 0xab, 0xc0, 0x15, - 0x3e, 0x20, 0x21, 0x42, 0x28, 0x6f, 0x3e, 0x48, 0x6d, 0x0b, 0x14, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x2b, 0x30, 0x1c, 0x00, 0x1f, 0x1f, 0x2b, - 0x01, 0x2b, 0x00, 0x1e, 0x00, 0x30, 0x2b, 0x2b, 0x20, 0x07, 0x90, 0x01, 0x1f, 0xff, 0x34, 0x19, 0x6f, 0xff, 0xd9, 0x30, 0xcd, 0x30, 0x03, 0xba, - 0x30, 0xa8, 0x30, 0xe9, 0x30, 0x06, 0x5d, 0x7b, 0x36, 0xaf, 0xb4, 0x37, 0x95, 0x7a, 0x2f, 0xfd, 0x37, 0x15, 0x61, 0x10, 0x15, 0xe0, 0x7f, 0xd4, - 0x59, 0x02, 0x85, 0x51, 0x5e, 0x74, 0xc9, 0x62, 0x06, 0x7f, 0xf7, 0xa0, 0x00, 0xbc, 0x24, 0xb1, 0x18, 0xc2, 0xd8, 0xc5, 0x7c, 0x54, 0xb7, 0x10, - 0x06, 0x53, 0x7f, 0x12, 0x28, 0x39, 0x3d, 0x28, 0x3d, 0x41, 0x04, 0x06, 0x43, 0x04, 0x4d, 0x04, 0x3b, 0x03, 0x48, 0x0f, 0x10, 0x19, 0xb4, 0xff, - 0x2c, 0x00, 0x31, 0x31, 0x2f, 0x31, 0x31, 0x2c, 0x2c, 0x2f, 0x24, 0x31, 0x0c, 0x20, 0x05, 0x2c, 0x2c, 0x01, 0x2f, 0xff, 0x99, 0x01, 0x80, 0x6f, - 0xff, 0xb7, 0x30, 0xf3, 0x30, 0xac, 0x30, 0xdd, 0x0a, 0x30, 0xfc, 0x30, 0xeb, 0x06, 0x48, 0x3d, 0x53, 0x4f, 0xd1, 0x67, 0xad, 0x2f, 0xe5, 0x70, - 0x2e, 0xff, 0x72, 0x2f, 0xf9, 0x06, 0xb0, 0x7f, 0x75, 0x2f, 0xdf, 0xf0, 0x06, 0x90, 0xff, 0x06, 0x10, 0x7d, 0x07, 0xd1, 0x7f, 0x06, 0x30, 0xff, - 0xb0, 0x65, 0xa0, 0x52, 0x20, 0x61, 0x57, 0x06, 0x78, 0x39, 0x00, 0x00, 0xf1, 0xc2, 0x00, 0x07, 0xac, 0xec, 0xd3, 0x74, 0xb9, 0x06, 0x78, 0xbb, - 0x07, 0xf1, 0xff, 0x05, 0xfc, 0x3b, 0x15, 0x21, 0x04, 0x38, 0x28, 0x3b, 0x33, 0x28, 0x33, 0x3f, 0x28, 0x3d, 0x70, 0x40, 0x05, 0xe8, 0x39, 0x07, - 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x2d, 0x26, 0x2d, 0x27, 0x00, 0x2c, 0x2d, 0x2d, 0x2d, 0x2a, 0x2d, 0x28, 0x26, 0xa4, 0x20, 0x06, 0x2d, 0x01, - 0x2f, 0xff, 0x9c, 0x10, 0x6f, 0xff, 0xde, 0x30, 0x44, 0xec, 0x28, 0x37, 0xb7, 0x30, 0xa2, 0x06, 0x48, 0x39, 0x00, 0x00, 0x63, 0x4d, 0x2f, 0xe9, - 0x3f, 0xed, 0x79, 0x00, 0x73, 0x28, 0x45, 0x05, 0xff, 0xf5, 0xbb, 0x90, 0x7f, 0x69, 0x40, 0x7f, 0x05, 0xf8, 0xb9, 0x07, 0x70, 0xff, 0x65, 0x06, - 0x61, 0x7d, 0x91, 0xff, 0x80, 0x06, 0x70, 0x7f, 0x6c, 0x9a, 0x65, 0x67, 0x7f, 0x89, 0x9a, 0x40, 0x4e, 0x06, 0x78, 0x3d, 0xd0, 0xb9, 0x08, 0xb8, - 0x74, 0xc7, 0x0a, 0xdc, 0xc2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x65, 0x62, 0xff, 0xeb, 0xaa, 0x06, 0x63, 0xff, 0xe1, 0x06, 0x82, 0x7f, 0x1c, 0x28, - 0x35, 0x3b, 0x28, 0x39, 0x39, 0x2e, 0x04, 0x37, 0x28, 0x45, 0x4f, 0x06, 0x08, 0x3b, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x2e, 0x00, 0x1c, - 0x1f, 0x1d, 0x20, 0x21, 0x2e, 0x2e, 0x1d, 0x01, 0x21, 0x19, 0x1c, 0x2e, 0x2e, 0x2e, 0x2e, 0x01, 0x2f, 0xff, 0x20, 0xa8, 0x07, 0x6f, 0xff, 0xa2, - 0x30, 0xe9, 0x30, 0xd6, 0x00, 0x30, 0x96, 0x99, 0x77, 0x95, 0xfd, 0x56, 0x23, 0x10, 0x90, 0xa6, 0x90, 0x05, 0xfe, 0xf8, 0x55, 0x00, 0x2e, 0x00, - 0x58, 0x41, 0x20, 0x03, 0x45, 0x20, 0x07, 0x06, 0x3d, 0xfd, 0xc9, 0x00, 0x6d, 0xd6, 0x2f, 0xf9, 0x3c, 0xef, 0x74, 0x28, 0xbd, 0x20, 0x2f, 0xff, - 0x3c, 0xfb, 0x62, 0xad, 0x47, 0x4d, 0x20, 0x2f, 0x09, 0x6e, 0x48, 0x55, 0x04, 0x9f, 0xff, 0x56, 0x2f, 0xe9, 0xd5, 0x3f, 0xed, 0x3f, 0xfd, 0x69, - 0x2f, 0xff, 0x74, 0x2f, 0xf9, 0x20, 0x21, 0x11, 0xc5, 0x50, 0x85, 0x38, 0xd1, 0x63, 0x00, 0x68, 0x40, 0x13, 0x45, 0xa0, 0xa9, 0xd7, 0x03, 0x9e, - 0x1d, 0xb0, 0x55, 0x69, 0xc0, 0x79, 0x20, 0x21, 0x9b, 0x30, 0xfd, 0x30, 0x17, 0xd6, 0x04, 0x9f, 0xff, 0xb0, 0xd5, 0x6f, 0x41, 0x81, 0xc1, 0xc1, - 0x81, 0x50, 0x83, 0x64, 0xc0, 0x40, 0x1b, 0x04, 0x3f, 0xff, 0x3f, 0x96, 0xc9, 0x62, 0x2f, 0x4f, 0x01, 0x54, 0x80, 0x08, 0x54, 0x4b, 0x91, 0x7f, - 0x23, 0x03, 0x80, 0x05, 0xff, 0xff, 0x44, 0xc5, 0x8d, 0xb7, 0xd0, 0xc5, 0xf8, 0x07, 0xbb, 0xac, 0xb9, 0xb8, 0xd2, 0x06, 0x3b, 0xbd, 0x72, 0x7f, - 0x52, 0x7d, 0x5c, 0x64, 0x01, 0x62, 0x7d, 0x6e, 0x04, 0x22, 0x7f, 0x51, 0xe3, 0x05, 0xf1, 0xff, 0x1e, 0x04, 0x01, 0x31, 0x04, 0x4a, 0x04, 0x35, - 0x04, 0x34, 0x28, 0x39, 0x11, 0x3d, 0x04, 0x51, 0x20, 0x03, 0x3d, 0x04, 0x4b, 0x20, 0x0f, 0x04, 0x20, 0x00, 0x10, 0x04, 0x40, 0x28, 0x57, 0x31, - 0x04, 0x18, 0x41, 0x04, 0x3a, 0x28, 0x55, 0x30, 0x11, 0x2d, 0x04, 0x3c, 0xdc, 0x28, 0x5f, 0x30, 0x15, 0x42, 0x20, 0x23, 0x0b, 0x54, 0xff, 0x10, - 0x0e, 0xf0, 0x7f, 0x2f, 0x2d, 0x00, 0x11, 0x30, 0x13, 0x13, 0x2f, 0x2f, 0x30, 0x12, 0x02, 0x1f, 0x2d, 0x2f, 0x2f, 0x2f, 0x2f, 0x01, 0x2f, 0xff, - 0xae, 0x40, 0x0d, 0x6f, 0xff, 0xb5, 0x30, 0xa6, 0x30, 0xb8, 0x30, 0xb5, 0x38, 0x41, 0xd3, 0x20, 0x05, 0x06, 0x1e, 0x78, 0x53, 0x2f, 0xf7, 0x75, - 0x26, 0x1b, 0xf5, 0xd6, 0xb7, 0x05, 0x9f, 0x7f, 0x97, 0xa5, 0x37, 0xb3, 0x73, 0x2f, 0xf9, 0x6f, 0x60, 0x8f, 0xdd, 0x03, 0xb7, 0xa1, 0x01, 0x30, - 0xff, 0x2d, 0xc0, 0x8b, 0x03, 0x95, 0x9d, 0x01, 0x70, 0xff, 0x61, 0x29, 0x39, 0xb4, 0x91, 0x8d, 0x74, 0x05, 0x6e, 0x05, 0x00, 0x50, 0x7f, 0xed, - 0x05, 0x8f, 0xff, 0x99, 0x6c, 0x30, 0x79, 0x72, 0x58, 0x3f, 0x06, 0x5f, 0xf7, 0xac, 0xc0, 0xb0, 0xc6, 0x00, 0x14, 0xb5, 0x44, 0xc5, 0x7c, 0xb7, - 0x44, 0xbe, 0x2d, 0x44, 0xc5, 0x06, 0x53, 0x7f, 0x6f, 0x2b, 0x29, 0xf2, 0x81, 0xeb, 0x05, 0xa3, 0x7f, 0x54, 0xe1, 0x06, 0xa2, 0x7f, 0x21, 0x28, - 0x1f, 0x43, 0x28, 0x39, 0x3e, 0x04, 0x45, 0x32, 0x48, 0x25, 0x30, 0x04, 0x4f, 0x88, 0x37, 0x32, 0x28, 0x4f, 0x70, 0x4f, 0x03, 0x68, 0x23, 0x08, - 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x30, 0x25, 0x03, 0x26, 0x00, 0x03, 0x03, 0x30, 0x30, 0x29, 0x03, 0x24, 0x25, 0x12, 0x30, 0x30, 0x30, 0x01, - 0x38, 0x01, 0xba, 0x01, 0x6f, 0xff, 0xd0, 0x02, 0x30, 0xfc, 0x30, 0xdf, 0x30, 0xe5, 0x20, 0x05, 0xc0, 0x8b, 0x06, 0x28, 0x39, 0x00, 0x00, 0x42, - 0x4f, 0x77, 0x6d, 0x48, 0x3f, 0x05, 0x98, 0x31, 0xf8, 0x00, 0x50, 0x7f, 0x3e, 0xe9, 0x0e, 0xd0, 0xff, 0x06, 0xf1, 0xff, 0x06, 0x11, 0x7f, 0x7e, - 0x76, 0x55, 0x18, 0x61, 0x27, 0x59, 0x06, 0x58, 0x37, 0x3f, 0xff, 0x84, 0xbc, 0xa4, 0x1c, 0xbb, 0xe4, 0xb2, 0x06, 0x90, 0x7f, 0x07, 0xb3, 0x7f, - 0x06, 0x31, 0xff, 0x11, 0x04, 0x57, 0x35, 0x28, 0x27, 0x3c, 0x48, 0x3f, 0x4b, 0x04, 0xe8, 0x27, 0x09, 0x11, 0x7f, 0x10, 0x0e, 0x10, 0xff, 0x00, - 0x31, 0x07, 0x09, 0x08, 0x09, 0x09, 0x31, 0x31, 0x00, 0x08, 0x09, 0x08, 0x07, 0x31, 0x31, 0x31, 0x31, 0xd0, 0x01, 0x6f, 0xff, 0x48, 0x3e, 0x01, - 0x50, 0x06, 0x00, 0x01, 0x01, 0x01, 0x70, 0x02, 0x20, 0x03, 0x20, 0x04, 0x40, 0x06, 0x01, 0x02, 0x02, 0x04, 0x00, 0x03, 0x04, 0x04, 0x02, 0x02, - 0x03, 0x04, 0x03, 0x20, 0x02, 0x02, 0x20, 0x01, 0x03, 0x03, 0x05, 0x04, 0x05, 0x00, 0x05, 0x03, 0x03, 0x04, 0x05, 0x04, 0x03, 0x03, 0x80, 0x20, - 0x01, 0x04, 0x04, 0x06, 0x05, 0x06, 0x06, 0x04, 0x02, 0x04, 0x05, 0x06, 0x05, 0x04, 0x04, 0x20, 0x01, 0x05, 0x00, 0x05, 0x07, 0x06, 0x07, 0x07, - 0x05, 0x05, 0x06, 0x08, 0x07, 0x06, 0x05, 0x05, 0x20, 0x01, 0x06, 0x06, 0x08, 0x00, 0x07, 0x08, 0x08, 0x06, 0x06, 0x07, 0x08, 0x07, 0x20, 0x06, - 0x06, 0x20, 0x01, 0x07, 0x08, 0x0a, 0x09, 0x0a, 0x04, 0x0a, 0x07, 0x07, 0x09, 0x0a, 0x20, 0xa4, 0x07, 0x07, 0x00, 0x07, 0x08, 0x09, 0x0b, 0x0a, - 0x0b, 0x0b, 0x08, 0x10, 0x08, 0x0a, 0x0b, 0x20, 0x10, 0x08, 0x08, 0x08, 0x09, 0x00, 0x0a, 0x1d, 0x0b, 0x1e, 0x1e, 0x09, 0x09, 0x0b, 0x40, 0x1f, - 0x20, 0x10, 0x09, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x1b, 0x0c, 0x0c, 0x0a, 0x0a, 0x0c, 0x0c, 0x16, 0x08, 0x0b, 0x0a, 0x0a, 0x0a, 0x20, 0x0e, - 0x1a, 0x1a, 0x1c, 0x00, 0x1c, 0x0b, 0x0b, 0x1c, 0x1c, 0x15, 0x0c, 0x0b, 0x03, 0x0b, 0x0b, 0x0b, 0x0c, 0x0d, 0x0d, 0x30, 0x02, 0x20, 0x06, 0x60, - 0x2f, 0x20, 0x05, 0x20, 0x07, 0x0e, 0x0e, 0x1c, 0x0e, 0x0e, 0x58, 0x0d, 0x20, 0x06, 0x17, 0x20, 0x05, 0x20, 0x07, 0x0f, 0x0f, 0x0d, 0x16, 0x0f, - 0x0f, 0x0e, 0x20, 0x06, 0x18, 0x20, 0x05, 0x20, 0x07, 0x10, 0x05, 0x10, 0x0e, 0x10, 0x10, 0x0f, 0x20, 0x06, 0x13, 0x20, 0x05, 0x80, 0x20, 0x07, - 0x11, 0x28, 0x0f, 0x28, 0x29, 0x10, 0x10, 0x02, 0x11, 0x29, 0x14, 0x11, 0x10, 0x10, 0x20, 0x07, 0x12, 0x00, 0x12, 0x10, 0x11, 0x11, 0x11, 0x11, - 0x12, 0x13, 0x28, 0x30, 0x12, 0x50, 0x07, 0x2c, 0x20, 0x12, 0x12, 0x12, 0x13, 0x10, 0x11, 0x23, 0x13, 0x40, 0x07, 0x14, 0x17, 0x12, 0x19, 0x00, - 0x18, 0x13, 0x13, 0x14, 0x19, 0x2e, 0x14, 0x13, 0x40, 0x13, 0x20, 0x07, 0x15, 0x14, 0x13, 0x15, 0x15, 0x14, 0x0c, 0x14, 0x15, 0x15, 0x12, 0x20, - 0x05, 0x20, 0x07, 0x16, 0x15, 0x00, 0x14, 0x16, 0x16, 0x15, 0x15, 0x16, 0x16, 0x0f, 0xc0, 0x20, 0x05, 0x20, 0x07, 0x17, 0x16, 0x15, 0x17, 0x17, - 0x16, 0x0c, 0x16, 0x17, 0x17, 0x10, 0x20, 0x05, 0x20, 0x07, 0x18, 0x27, 0x00, 0x16, 0x18, 0x19, 0x17, 0x17, 0x18, 0x18, 0x0d, 0x10, 0x18, 0x17, - 0x17, 0x20, 0x07, 0x19, 0x18, 0x17, 0x1a, 0x00, 0x1a, 0x18, 0x18, 0x19, 0x1a, 0x0e, 0x19, 0x18, 0x40, 0x18, 0x30, 0x07, 0x19, 0x18, 0x1b, 0x1b, - 0x19, 0x19, 0x02, 0x1a, 0x1b, 0x11, 0x1a, 0x19, 0x19, 0x30, 0x07, 0x1e, 0x00, 0x19, 0x14, 0x20, 0x1a, 0x1a, 0x1b, 0x20, 0x31, 0x10, 0x1b, 0x1a, - 0x1a, 0x20, 0x07, 0x1d, 0x20, 0x1e, 0x21, 0x00, 0x22, 0x1b, 0x1b, 0x1e, 0x22, 0x1a, 0x1d, 0x1b, 0x00, 0x1b, 0x1b, 0x1b, 0x1c, 0x1e, 0x21, 0x1f, - 0x22, 0x00, 0x23, 0x1c, 0x1c, 0x1f, 0x23, 0x1b, 0x1e, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1d, 0x1f, 0x22, 0x20, 0x23, 0x00, 0x24, 0x1d, 0x1d, 0x20, - 0x24, 0x1c, 0x1f, 0x1d, 0x00, 0x1d, 0x1d, 0x1d, 0x1e, 0x20, 0x02, 0x22, 0x02, 0x04, 0x02, 0x1e, 0x1e, 0x21, 0x02, 0x20, 0x38, 0x1e, 0x1e, 0x00, - 0x1e, 0x1f, 0x21, 0x23, 0x21, 0x24, 0x25, 0x1f, 0x10, 0x1f, 0x22, 0x25, 0x20, 0x38, 0x1f, 0x1f, 0x1f, 0x20, 0x00, 0x22, 0x24, 0x23, 0x25, 0x26, - 0x20, 0x20, 0x23, 0x00, 0x26, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x21, 0x00, 0x23, 0x25, 0x24, 0x26, 0x27, 0x21, 0x21, 0x24, 0x40, 0x27, 0x20, - 0x28, 0x21, 0x21, 0x21, 0x22, 0x24, 0x26, 0x00, 0x25, 0x27, 0x28, 0x22, 0x22, 0x25, 0x28, 0x22, 0x00, 0x24, 0x22, 0x22, 0x22, 0x22, 0x23, 0x27, - 0x29, 0x00, 0x28, 0x29, 0x2a, 0x23, 0x23, 0x26, 0x2c, 0x26, 0x00, 0x27, 0x23, 0x23, 0x23, 0x23, 0x24, 0x28, 0x2b, 0x00, 0x29, 0x2b, 0x2c, 0x24, - 0x24, 0x27, 0x2b, 0x27, 0x00, 0x28, 0x24, 0x24, 0x24, 0x24, 0x25, 0x29, 0x2a, 0x00, 0x2a, 0x2a, 0x2b, 0x25, 0x25, 0x28, 0x2a, 0x25, 0x00, 0x29, - 0x25, 0x25, 0x25, 0x25, 0x26, 0x2a, 0x2e, 0x00, 0x2b, 0x2e, 0x2e, 0x26, 0x26, 0x2b, 0x2e, 0x2a, 0x00, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x27, 0x2b, - 0x2f, 0x00, 0x2c, 0x2f, 0x2f, 0x27, 0x27, 0x2c, 0x2f, 0x2c, 0x00, 0x2b, 0x27, 0x27, 0x27, 0x27, 0x28, 0x2c, 0x1b, 0x00, 0x2d, 0x1d, 0x1d, 0x28, - 0x28, 0x2d, 0x1d, 0x2b, 0x00, 0x2c, 0x28, 0x28, 0x28, 0x28, 0x29, 0x2e, 0x13, 0x00, 0x31, 0x2d, 0x14, 0x29, 0x29, 0x31, 0x14, 0x29, 0x00, 0x2e, - 0x29, 0x29, 0x29, 0x29, 0x2a, 0x2f, 0x30, 0x00, 0x2e, 0x30, 0x30, 0x2a, 0x2a, 0x2e, 0x30, 0x2d, 0x40, 0x2f, 0x20, 0x59, 0x2a, 0x2b, 0x30, 0x1c, - 0x00, 0x1f, 0x00, 0x1f, 0x2b, 0x2b, 0x00, 0x1e, 0x00, 0x30, 0x2b, 0x00, 0x2b, 0x2b, 0x2b, 0x2c, 0x31, 0x31, 0x2f, 0x31, 0x02, 0x31, 0x2c, 0x2c, - 0x2f, 0x31, 0x0c, 0x20, 0x05, 0x2c, 0x00, 0x2c, 0x2d, 0x26, 0x2d, 0x27, 0x2c, 0x2d, 0x2d, 0x04, 0x2d, 0x2a, 0x2d, 0x28, 0x26, 0x20, 0x06, 0x2d, - 0x2e, 0x80, 0x21, 0x06, 0x20, 0x21, 0x2e, 0x2e, 0x1d, 0x21, 0x19, 0x00, 0x1c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2d, 0x11, 0x00, 0x30, 0x13, 0x13, - 0x2f, 0x2f, 0x30, 0x12, 0x1f, 0x1c, 0x2d, 0x2f, 0x2f, 0x20, 0x07, 0xeb, 0x6f, 0x00, 0x73, 0x43 +const unsigned char COUNTRY_LIST_DATA[] = { + 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, + 0x0c, 0x02, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x58, 0x1a, 0x00, 0x00, + 0x70, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x70, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x48, 0x0e, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xb4, 0x0e, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x24, 0x0f, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x53, 0x00, 0xe0, 0x15, 0x00, 0x00, + 0xb4, 0x17, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xa0, 0x0c, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x16, 0x00, 0x00, + 0x10, 0x15, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, + 0xb4, 0x04, 0x00, 0x00, 0x34, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe8, 0x0e, 0x00, 0x00, 0xa4, 0x13, 0x00, 0x00, + 0x4c, 0x04, 0x00, 0x00, 0x9c, 0x11, 0x00, 0x00, 0x64, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc4, 0x08, 0x00, 0x00, 0x54, 0x19, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x0f, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x94, 0x09, 0x00, 0x00, 0xf4, 0x07, 0x00, 0x00, + 0x14, 0x16, 0x00, 0x00, 0xe8, 0x17, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, + 0xd4, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe4, 0x16, 0x00, 0x00, 0xb8, 0x18, 0x00, 0x00, 0x18, 0x17, 0x00, 0x00, + 0xa4, 0x0d, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x68, 0x0b, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x12, 0x00, 0x00, + 0xd8, 0x13, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x05, 0x00, 0x00, + 0xec, 0x19, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xa8, 0x14, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0xf8, 0x08, 0x00, 0x00, + 0x88, 0x19, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8, 0x09, 0x00, 0x00, + 0x28, 0x08, 0x00, 0x00, 0x48, 0x16, 0x00, 0x00, 0x1c, 0x18, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x18, 0x00, 0x00, + 0x4c, 0x17, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x07, 0x00, 0x00, + 0xd4, 0x12, 0x00, 0x00, 0x0c, 0x14, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + 0xec, 0x05, 0x00, 0x00, 0xbc, 0x19, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdc, 0x14, 0x00, 0x00, 0x3c, 0x13, 0x00, 0x00, + 0x2c, 0x09, 0x00, 0x00, 0x9c, 0x0b, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5c, 0x08, 0x00, 0x00, 0x7c, 0x16, 0x00, 0x00, + 0x50, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x0d, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xac, 0x15, 0x00, 0x00, 0x80, 0x17, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x6c, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x24, 0x0f, 0x00, 0x00, + 0xc0, 0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x40, 0x14, 0x00, 0x00, + 0x74, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x1c, 0x1a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x70, 0x13, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0xd0, 0x0b, 0x00, 0x00, + 0x00, 0x11, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x08, 0x00, 0x00, + 0x20, 0x19, 0x00, 0x00, 0x84, 0x18, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, + 0x58, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x1c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x31, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xc0, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, + 0xb0, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0x20, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0xd0, 0x4f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, + 0x80, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xdc, 0x01, 0x00, 0x00, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x60, 0x62, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, + 0xc0, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x78, 0x02, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x30, 0x9f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xad, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, + 0xe0, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x03, 0x00, 0x00, 0x70, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x10, 0xa8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x7c, 0x03, 0x00, 0x00, + 0xe0, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xb0, 0x03, 0x00, 0x00, 0x90, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xe4, 0x03, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, + 0x80, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x4c, 0x04, 0x00, 0x00, 0x10, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0xa0, 0xab, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xb4, 0x04, 0x00, 0x00, + 0x40, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xe8, 0x04, 0x00, 0x00, 0xd0, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x1c, 0x05, 0x00, 0x00, 0x60, 0xad, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, + 0xe0, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x84, 0x05, 0x00, 0x00, 0x80, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xb8, 0x05, 0x00, 0x00, 0x10, 0xaf, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xac, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0xec, 0x05, 0x00, 0x00, + 0xd0, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x20, 0x06, 0x00, 0x00, 0x50, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x54, 0x06, 0x00, 0x00, 0xf0, 0xb0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x88, 0x06, 0x00, 0x00, + 0x30, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xbc, 0x06, 0x00, 0x00, 0xe0, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0xa0, 0xc5, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x24, 0x07, 0x00, 0x00, + 0x00, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x58, 0x07, 0x00, 0x00, 0x90, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x8c, 0x07, 0x00, 0x00, 0xe0, 0xd6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, + 0x70, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xf4, 0x07, 0x00, 0x00, 0x80, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x28, 0x08, 0x00, 0x00, 0x10, 0xdd, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb6, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x5c, 0x08, 0x00, 0x00, + 0xd0, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x90, 0x08, 0x00, 0x00, 0xa0, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xc4, 0x08, 0x00, 0x00, 0x40, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcb, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x00, 0x00, + 0x10, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x2c, 0x09, 0x00, 0x00, 0x20, 0x0b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0xc0, 0x0b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x94, 0x09, 0x00, 0x00, + 0x50, 0x1a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xc8, 0x09, 0x00, 0x00, 0x20, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xfc, 0x09, 0x00, 0x00, 0xc0, 0x36, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, + 0x50, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x64, 0x0a, 0x00, 0x00, 0x40, 0x4b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x98, 0x0a, 0x00, 0x00, 0xf0, 0x4b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xcc, 0x0a, 0x00, 0x00, + 0x50, 0x57, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0xa0, 0x63, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x34, 0x0b, 0x00, 0x00, 0x50, 0x64, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x68, 0x0b, 0x00, 0x00, + 0x90, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x9c, 0x0b, 0x00, 0x00, 0x30, 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xdf, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xd0, 0x0b, 0x00, 0x00, 0x10, 0x6e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe4, 0x03, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, + 0xc0, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x38, 0x0c, 0x00, 0x00, 0xd0, 0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x04, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x6c, 0x0c, 0x00, 0x00, 0x50, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x05, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x31, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xa0, 0x0c, 0x00, 0x00, + 0xf0, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xd4, 0x0c, 0x00, 0x00, 0x90, 0x71, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x08, 0x0d, 0x00, 0x00, 0x20, 0x72, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xea, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x3c, 0x0d, 0x00, 0x00, + 0x10, 0x79, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x70, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xa4, 0x0d, 0x00, 0x00, 0x70, 0x8a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdc, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xd8, 0x0d, 0x00, 0x00, + 0x50, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x0c, 0x0e, 0x00, 0x00, 0xc0, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x39, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xaf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x06, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, 0xf0, 0xd7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x50, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x40, 0xe7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0xe8, 0x0e, 0x00, 0x00, 0xb0, 0xe7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x0d, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x30, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x88, 0x00, 0x00, 0x00, 0x58, 0x0f, 0x00, 0x00, + 0xf0, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x8c, 0x0f, 0x00, 0x00, 0x60, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x0e, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x88, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xf0, 0xfa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x0e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x88, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x70, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, + 0xe0, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x64, 0x10, 0x00, 0x00, 0xe0, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x98, 0x10, 0x00, 0x00, 0x50, 0x09, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xcc, 0x10, 0x00, 0x00, + 0xe0, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x70, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x34, 0x11, 0x00, 0x00, 0xe0, 0x0c, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x0a, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x68, 0x11, 0x00, 0x00, + 0x80, 0x0d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x9c, 0x11, 0x00, 0x00, 0x40, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x00, 0xe0, 0x17, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x84, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, + 0xb0, 0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x38, 0x12, 0x00, 0x00, 0xb0, 0x28, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x0d, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x5f, 0x00, + 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x6c, 0x12, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xa0, 0x12, 0x00, 0x00, + 0x70, 0x31, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, + 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0xd4, 0x12, 0x00, 0x00, 0x00, 0x32, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x10, 0x3b, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x3c, 0x13, 0x00, 0x00, + 0x10, 0x3c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0e, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x70, 0x13, 0x00, 0x00, 0x70, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x06, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0xa4, 0x13, 0x00, 0x00, 0x70, 0x54, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xd8, 0x13, 0x00, 0x00, + 0xa0, 0x57, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x0c, 0x14, 0x00, 0x00, 0x40, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x35, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0x00, 0x80, 0x67, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x57, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, + 0xe0, 0x72, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0xa8, 0x14, 0x00, 0x00, 0x20, 0x79, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x10, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0xdc, 0x14, 0x00, 0x00, 0x20, 0x7a, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x10, 0x15, 0x00, 0x00, + 0xb0, 0x7a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x44, 0x15, 0x00, 0x00, 0x50, 0x7b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf2, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x78, 0x15, 0x00, 0x00, 0x50, 0x85, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xac, 0x15, 0x00, 0x00, + 0xd0, 0x8c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbc, 0x06, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0xe0, 0x15, 0x00, 0x00, 0x70, 0x91, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x14, 0x16, 0x00, 0x00, 0x90, 0x99, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x07, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x48, 0x16, 0x00, 0x00, + 0xb0, 0x9f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x07, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x7c, 0x16, 0x00, 0x00, 0x50, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x36, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0xb0, 0x16, 0x00, 0x00, 0x00, 0xb0, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xe4, 0x16, 0x00, 0x00, + 0x90, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x18, 0x17, 0x00, 0x00, 0xd0, 0xb1, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x4c, 0x17, 0x00, 0x00, 0xf0, 0xb9, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x10, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x17, 0x00, 0x00, + 0x70, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0xb4, 0x17, 0x00, 0x00, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x12, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x32, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0xe8, 0x17, 0x00, 0x00, 0x60, 0xd1, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x12, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x1c, 0x18, 0x00, 0x00, + 0x70, 0xd9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x50, 0x18, 0x00, 0x00, 0x30, 0xda, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x35, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x84, 0x18, 0x00, 0x00, 0x80, 0xdb, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x11, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xb8, 0x18, 0x00, 0x00, + 0xc0, 0xdf, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0xec, 0x18, 0x00, 0x00, 0x00, 0xe6, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x15, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x20, 0x19, 0x00, 0x00, 0x30, 0xe7, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x35, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x15, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x54, 0x19, 0x00, 0x00, + 0x70, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0x88, 0x19, 0x00, 0x00, 0x80, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x03, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x35, 0x00, 0x31, 0x00, 0x5f, 0x00, 0x4c, 0x00, + 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0xbc, 0x19, 0x00, 0x00, 0x20, 0x0b, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa7, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x03, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xec, 0x19, 0x00, 0x00, + 0xd0, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x1c, 0x1a, 0x00, 0x00, + 0x60, 0x17, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x98, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xa0, 0x1a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x5f, 0x00, 0x4c, 0x00, 0x5a, 0x00, 0x2e, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x58, 0x1d, 0x01, 0x11, 0x1f, 0x00, 0x00, 0x30, 0x01, 0xa0, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x62, 0x1c, 0xcc, 0x52, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x17, 0x53, + 0xac, 0x4e, 0x02, 0x40, 0x5e, 0x06, 0x98, 0x1b, 0x42, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x44, 0x6a, 0x20, 0x03, 0x6e, 0x00, 0x67, 0x06, 0x28, 0xa2, + 0x50, 0x00, 0x1b, 0xe9, 0x00, 0x6b, 0x40, 0x7d, 0x06, 0x59, 0x1f, 0x50, + 0x20, 0xff, 0x50, 0x7f, 0xc5, 0x06, 0x30, 0xfd, 0x50, 0x7f, 0x63, 0x00, + 0x68, 0x41, 0x7f, 0x6f, 0x06, 0x80, 0xff, 0x60, 0xed, 0x06, 0x81, 0x7f, + 0x06, 0xf2, 0xff, 0xa0, 0xbc, 0x74, 0xc7, 0xd5, 0x41, 0xc9, 0x0e, 0xb3, + 0x7f, 0x65, 0x00, 0x71, 0x00, 0x75, 0x24, 0x03, 0x40, 0x6d, 0x06, 0x4c, + 0xa0, 0x1f, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x0e, 0x38, 0x04, 0x3d, 0x04, + 0x0e, 0x52, 0x7f, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x01, 0x60, + 0x01, 0xd0, 0x01, 0x58, 0x17, 0x03, 0xa0, 0xcd, 0x91, 0x76, 0x55, 0x61, + 0x06, 0xb8, 0x17, 0x43, 0x26, 0x93, 0x6f, 0x48, 0x13, 0x71, 0x06, 0x48, + 0x1b, 0x84, 0x10, 0x0e, 0xf0, 0x7f, 0xcd, 0x91, 0x86, 0x5e, 0x06, 0xbb, + 0x17, 0xa9, 0xcd, 0x22, 0x6d, 0xce, 0x06, 0xbf, 0xb1, 0x54, 0x00, 0x73, + 0x2b, 0x95, 0x6f, 0xf1, 0x2b, 0x9d, 0x3b, 0x97, 0x06, 0x1a, 0xa1, 0x06, + 0xf3, 0xff, 0x27, 0x04, 0x43, 0x28, 0x13, 0x64, 0x46, 0x06, 0x88, 0x19, + 0x10, 0x16, 0xf5, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x0c, 0x15, 0x00, 0xa3, + 0x4b, 0x00, 0x00, 0x04, 0xa0, 0x0a, 0x4e, 0x2b, 0x77, 0x6d, 0x06, 0xbd, + 0x2f, 0x53, 0x2e, 0xab, 0x61, 0x4f, 0x2d, 0x30, 0x07, 0x58, 0x69, 0x10, + 0x0e, 0xc0, 0x7f, 0xe1, 0x06, 0x21, 0xff, 0x06, 0xf2, 0xff, 0xc1, 0xc0, + 0x58, 0x15, 0xd5, 0x74, 0xc7, 0x06, 0xb3, 0x7f, 0x6a, 0x06, 0xc3, 0x7f, + 0x58, 0x63, 0xfd, 0xc5, 0x06, 0x33, 0xfb, 0x3f, 0xff, 0x28, 0x04, 0x30, + 0x28, 0x17, 0x45, 0x20, 0x05, 0x64, 0x39, 0x06, 0x48, 0x17, 0x10, 0x16, + 0xf5, 0x7f, 0x03, 0x03, 0xd0, 0x01, 0x38, 0x16, 0x00, 0x61, 0x56, 0x00, + 0x00, 0x05, 0xa0, 0x29, 0x59, 0x5b, 0x25, 0x06, 0xc8, 0x17, 0x54, 0x2f, + 0xa5, 0x38, 0x17, 0x6a, 0x4f, 0xad, 0x10, 0x06, 0x50, 0x7f, 0xbc, 0x3e, + 0x2b, 0x74, 0x2e, 0x37, 0x06, 0x31, 0x81, 0x06, 0xf1, 0xff, 0x06, 0xf2, + 0xff, 0x88, 0xd1, 0x31, 0xc4, 0xc9, 0x06, 0x9e, 0x2d, 0x0f, 0x13, 0x7f, + 0x22, 0x04, 0x4f, 0x28, 0x17, 0x01, 0x4c, 0x04, 0x46, 0x04, 0x37, 0x04, + 0x38, 0x40, 0x09, 0xe4, 0x0d, 0xd2, 0x7f, 0x10, 0x07, 0x35, 0x7f, 0x06, + 0xb6, 0xff, 0x04, 0x04, 0xd0, 0x01, 0xd7, 0x1b, 0x00, 0x54, 0x53, 0x00, + 0x00, 0x06, 0xa0, 0x89, 0x5b, 0x0a, 0xbd, 0x5f, 0x01, 0x77, 0x06, 0x9d, + 0x2f, 0x41, 0x2f, 0xab, 0x68, 0x38, 0x00, 0x75, 0x06, 0x6c, 0x2d, 0x10, + 0x0f, 0x10, 0x7f, 0x06, 0xf2, 0xff, 0x48, 0xc5, 0xc4, 0x01, 0xd6, 0x74, + 0xc7, 0x20, 0x00, 0x31, 0xc1, 0x10, 0x06, 0x53, 0x7f, 0x41, 0x10, 0x48, + 0x15, 0x45, 0x04, 0x3e, 0x04, 0x39, 0x05, 0xe8, 0x11, 0xc8, 0x07, 0x52, + 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x05, 0x05, 0xd0, 0x01, 0xb5, 0x16, 0x6c, + 0x81, 0x28, 0x17, 0x07, 0xa0, 0x8f, 0x79, 0xfa, 0x5e, 0x06, 0xb8, 0x17, + 0x7c, 0x46, 0x28, 0x13, 0x3f, 0xab, 0x3f, 0xb3, 0x10, 0x16, 0x30, 0x7f, + 0x06, 0xf2, 0xff, 0x78, 0xd4, 0x30, 0x20, 0xc8, 0x06, 0x98, 0x15, 0x0f, + 0x13, 0x7f, 0x24, 0x04, 0x43, 0x04, 0x07, 0x46, 0x04, 0x37, 0x04, 0x4f, + 0x48, 0x1f, 0x0e, 0x12, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x20, 0x06, 0x06, + 0xd0, 0x01, 0x8c, 0x12, 0xd5, 0x54, 0x00, 0x01, 0x00, 0x08, 0xa0, 0x18, + 0x75, 0x9b, 0x7c, 0x06, 0xbd, 0x2f, 0x58, 0x47, 0x48, 0x11, 0x73, 0x2f, + 0xb1, 0x10, 0x16, 0x50, 0x7f, 0x18, 0x75, 0x83, 0x43, 0x80, 0x06, 0xbd, + 0xaf, 0x04, 0xac, 0x64, 0xc4, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x16, + 0x13, 0x04, 0x30, 0x48, 0x11, 0x41, 0x28, 0x1f, 0x06, 0x52, 0x7f, 0x85, + 0xc8, 0x06, 0xc2, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x07, 0x07, 0xd0, 0x01, + 0x9f, 0x19, 0xc7, 0x00, 0x49, 0x00, 0x00, 0x09, 0xa0, 0x83, 0x5e, 0x71, + 0x50, 0x67, 0x06, 0xd8, 0x17, 0x75, 0x4f, 0xab, 0x67, 0x00, 0x64, 0x00, + 0x68, 0x6f, 0x40, 0x07, 0x10, 0x0d, 0xd0, 0x7f, 0x43, 0x4e, 0xa9, 0x74, + 0x00, 0xf3, 0x84, 0x06, 0x6e, 0xaf, 0x7f, 0x5e, 0x1c, 0x4e, 0x06, 0xbd, + 0xaf, 0x11, 0xad, 0x36, 0x65, 0xb4, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, + 0x13, 0x28, 0x0f, 0x38, 0x19, 0x34, 0xa9, 0x28, 0x17, 0x3d, 0x06, 0x28, + 0x19, 0xe3, 0x10, 0x16, 0xe5, 0x7f, 0x08, 0x08, 0xd0, 0x01, 0x00, 0x6d, + 0x10, 0x6d, 0x50, 0x00, 0x00, 0x0a, 0xa0, 0x08, 0xb4, 0x8c, 0xde, 0x5d, + 0x06, 0xf8, 0x17, 0x69, 0x00, 0x7a, 0x39, 0x00, 0x68, 0x28, 0x15, 0x06, + 0x3f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x35, 0x8d, 0x06, 0xd2, 0xff, 0x00, + 0x6c, 0xad, 0x74, 0xc7, 0x00, 0xc8, 0xb0, 0xc6, 0xe0, 0x06, 0x78, 0x1b, + 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x39, 0x04, 0x47, 0x04, 0x36, 0x39, 0x04, + 0x3e, 0x28, 0x21, 0x06, 0x1f, 0xb7, 0x10, 0x16, 0xf5, 0x7f, 0x09, 0x09, + 0xd0, 0x01, 0x00, 0xe4, 0x12, 0xdd, 0x4b, 0x00, 0x00, 0x0b, 0xa0, 0x0a, + 0x77, 0x6d, 0x57, 0x53, 0x06, 0xbd, 0x2f, 0x48, 0x2f, 0xad, 0x69, 0xf0, + 0x2f, 0xaf, 0x3f, 0xb3, 0x10, 0x16, 0x30, 0x7f, 0x06, 0xf2, 0xff, 0x58, + 0xd5, 0x74, 0xc7, 0x31, 0x9c, 0xb0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, + 0x25, 0x04, 0x30, 0x28, 0x17, 0x46, 0x3d, 0x20, 0x05, 0x3d, 0x04, 0x4c, + 0x06, 0x28, 0x17, 0x10, 0x16, 0xf5, 0x7f, 0x0a, 0x40, 0x0a, 0xd0, 0x01, + 0x48, 0x0e, 0x75, 0x4e, 0x00, 0x00, 0x04, 0x0c, 0xa0, 0xb3, 0x6c, 0x17, + 0x06, 0xe8, 0x17, 0x65, 0x00, 0x58, 0x62, 0x20, 0x03, 0x69, 0x10, 0x16, + 0x60, 0x7f, 0x06, 0xf2, 0xff, 0xc8, 0xd5, 0xa0, 0x18, 0xbc, 0x74, 0xc7, + 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x25, 0x04, 0x4d, 0x2e, 0x04, 0x31, + 0x20, 0x03, 0x39, 0x06, 0x28, 0x13, 0x07, 0x32, 0x7f, 0x10, 0x0e, 0xf5, + 0x7f, 0x0b, 0x40, 0x0b, 0xd0, 0x01, 0x0e, 0x1b, 0x66, 0x51, 0x00, 0x00, + 0x00, 0x0d, 0xa0, 0xd2, 0x9e, 0x8d, 0x9f, 0x5f, 0x6c, 0xc1, 0x06, 0x9d, + 0x31, 0x38, 0x17, 0x69, 0x00, 0x6c, 0x00, 0x6f, 0x2f, 0xb3, 0x1a, 0x67, + 0x00, 0x6a, 0x2f, 0xbb, 0x3f, 0xb9, 0x67, 0x10, 0x15, 0x80, 0x7f, 0xd1, + 0x20, 0x9e, 0x99, 0x06, 0xc2, 0xff, 0xe4, 0xd5, 0x74, 0xc7, 0xfd, 0x3c, + 0xb8, 0xa5, 0x06, 0x88, 0x19, 0x07, 0xf3, 0x7f, 0x05, 0xd3, 0xfd, 0x58, + 0x17, 0x39, 0x04, 0x00, 0x3b, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x46, 0x04, + 0x1a, 0x37, 0x04, 0x4f, 0x20, 0x07, 0x05, 0xbf, 0xbd, 0xd1, 0x10, 0x16, + 0xe5, 0x7f, 0x0c, 0x40, 0x0c, 0xd0, 0x01, 0x8b, 0x20, 0x19, 0x5a, 0x00, + 0x00, 0x05, 0x0e, 0xa0, 0xb3, 0x6c, 0x57, 0x07, 0x0a, 0xaf, 0x6e, 0x48, + 0x0b, 0xc3, 0x10, 0x16, 0x50, 0x7f, 0x06, 0xf2, 0xff, 0xc8, 0xd5, 0x9c, + 0xb0, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x8b, 0x38, 0x17, 0x3d, 0x04, + 0x30, 0x28, 0x15, 0x4c, 0x05, 0xc8, 0x0f, 0x07, 0x72, 0x7f, 0x90, 0x10, + 0x0e, 0xf5, 0x7f, 0x0d, 0x0d, 0xd0, 0x01, 0x9a, 0x18, 0xce, 0x50, 0x01, + 0x00, 0x00, 0x0f, 0xa0, 0x56, 0x6e, 0x17, 0x06, 0xe8, 0x17, 0x1c, 0x75, + 0x00, 0x62, 0x4f, 0xb3, 0x10, 0x16, 0x50, 0x7f, 0x06, 0xf2, 0xff, 0xc4, + 0xd6, 0x0c, 0xa0, 0xbc, 0x74, 0xc7, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, + 0x25, 0x04, 0x17, 0x43, 0x04, 0x31, 0x28, 0x1b, 0x39, 0x06, 0x48, 0x15, + 0x07, 0x12, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x20, 0x0e, 0x0e, 0xd0, 0x01, + 0xbf, 0x15, 0x4a, 0x51, 0x00, 0x35, 0x00, 0x10, 0x28, 0x17, 0x06, 0xfa, + 0xaf, 0xfa, 0x2f, 0xaf, 0xe1, 0x06, 0xaf, 0xaf, 0x70, 0x75, 0x06, 0xef, + 0xaf, 0x10, 0x06, 0xd0, 0x7f, 0x06, 0xf2, 0xff, 0xc4, 0xd6, 0x9c, 0xb0, + 0xe2, 0x06, 0x98, 0x15, 0x0f, 0x12, 0xff, 0x38, 0x17, 0x3d, 0x04, 0x30, + 0x20, 0x03, 0x4c, 0xe4, 0x06, 0x48, 0x19, 0x0f, 0x15, 0x7f, 0x10, 0x06, + 0xd0, 0x7f, 0x0f, 0x0f, 0xd0, 0x01, 0x0a, 0x14, 0x00, 0x57, 0x50, 0x00, + 0x00, 0x11, 0xa0, 0x5f, 0x6c, 0x2c, 0x07, 0x86, 0x06, 0xbd, 0x2f, 0x4a, + 0x2f, 0xa9, 0x37, 0x95, 0x67, 0x00, 0x61, 0x73, 0x2f, 0xb9, 0x10, 0x16, + 0x10, 0x7f, 0x5f, 0x6c, 0xcf, 0x82, 0x06, 0xbd, 0xaf, 0x0c, 0xa5, 0xc7, + 0x64, 0xc4, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x26, 0x04, 0x17, 0x37, + 0x04, 0x4f, 0x28, 0x19, 0x41, 0x28, 0x1f, 0x06, 0x3f, 0xb5, 0x10, 0x16, + 0xf5, 0x7f, 0x20, 0x10, 0x10, 0xd0, 0x01, 0xc7, 0x16, 0x80, 0x54, 0x00, + 0x25, 0x00, 0x12, 0x28, 0x17, 0x7f, 0x89, 0x07, 0x58, 0x17, 0x78, 0x28, + 0x21, 0xc3, 0x10, 0x16, 0x10, 0x7f, 0x06, 0xf2, 0xff, 0xa5, 0xc7, 0xdc, + 0xc2, 0x07, 0x58, 0x17, 0x0e, 0x53, 0x7f, 0xb2, 0x98, 0x17, 0x38, 0x06, + 0x68, 0x17, 0x10, 0x16, 0xd5, 0x7f, 0x11, 0x11, 0xd0, 0x01, 0x5c, 0x00, + 0x14, 0x71, 0x52, 0x00, 0x00, 0x13, 0xa0, 0x09, 0x15, 0x54, 0x97, 0x67, + 0x06, 0xfa, 0xaf, 0x6c, 0x2f, 0xb3, 0x6e, 0x10, 0x16, 0x60, 0x7f, 0x86, + 0x06, 0xf2, 0xff, 0xc0, 0xc9, 0xb0, 0xb9, 0x06, 0xf8, 0x17, 0x0e, 0xb3, + 0x7f, 0x13, 0xae, 0x28, 0x0f, 0x40, 0x28, 0x13, 0x3d, 0x06, 0x48, 0x15, + 0x07, 0x12, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, 0x12, 0x40, 0x12, 0xd0, 0x01, + 0x37, 0x1f, 0x17, 0x59, 0x00, 0x00, 0x02, 0x14, 0xa0, 0x7c, 0x90, 0xe7, + 0x5b, 0x06, 0xbd, 0x2f, 0x4c, 0xb4, 0x4f, 0xaf, 0x6f, 0x2f, 0xb1, 0x38, + 0x1b, 0x67, 0x10, 0x16, 0x00, 0x7f, 0xbd, 0x8f, 0x40, 0x81, 0x06, 0xc2, + 0xff, 0xb4, 0xb7, 0x24, 0xc6, 0xdd, 0xb2, 0xc1, 0x06, 0x98, 0x19, 0x0e, + 0xf3, 0x7f, 0x1b, 0x04, 0x4f, 0x04, 0x3e, 0x28, 0x15, 0xc8, 0x06, 0x78, + 0x19, 0x10, 0x16, 0xf5, 0x7f, 0x13, 0x13, 0xd0, 0x01, 0xb9, 0x1d, 0xbd, + 0x00, 0x57, 0x00, 0x00, 0x15, 0xa0, 0x52, 0x97, 0x77, 0x55, 0x6d, 0x06, + 0xbd, 0x2f, 0x51, 0x68, 0x0f, 0x68, 0x28, 0x1d, 0x69, 0x10, 0x16, 0x20, + 0x7f, 0x81, 0x06, 0xf2, 0xff, 0x6d, 0xce, 0x58, 0xd5, 0x74, 0xc7, 0x06, + 0x98, 0x17, 0xa0, 0x0e, 0xf3, 0x7f, 0x26, 0x48, 0x11, 0x45, 0x04, 0x30, + 0x04, 0x39, 0xc8, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf5, 0x7f, 0x14, 0x14, + 0xd0, 0x01, 0x06, 0x1a, 0x79, 0x00, 0x48, 0x00, 0x00, 0x16, 0xa0, 0x5d, + 0x96, 0x7f, 0x51, 0x89, 0x06, 0xbd, 0x2f, 0x53, 0x48, 0x11, 0x6e, 0x00, + 0x78, 0x06, 0x48, 0x15, 0xe8, 0x70, 0x7f, 0x06, 0x90, 0x81, 0x10, 0x06, + 0xf0, 0x7f, 0x55, 0x06, 0xe2, 0xff, 0xb0, 0xc0, 0xdc, 0x62, 0xc2, 0x06, + 0x98, 0x15, 0x0f, 0x12, 0xff, 0x28, 0x04, 0x4d, 0x28, 0x17, 0x4c, 0x3c, + 0x04, 0x41, 0x28, 0x1f, 0x06, 0x3f, 0xb5, 0x0f, 0x55, 0x7f, 0x10, 0x06, + 0x90, 0x7f, 0x15, 0x15, 0x80, 0xd0, 0x01, 0x5e, 0x18, 0x70, 0x4d, 0x00, + 0x00, 0x17, 0x04, 0xa0, 0x71, 0x5c, 0x71, 0x67, 0x07, 0x38, 0x17, 0x64, + 0x00, 0x61, 0x6f, 0x4f, 0xb7, 0x10, 0x15, 0xf0, 0x7f, 0x71, 0x5c, 0x1c, + 0x4e, 0x06, 0xd8, 0x17, 0x31, 0x65, 0xb4, 0x07, 0x18, 0x17, 0x0e, 0x93, + 0x7f, 0x28, 0x04, 0x30, 0x48, 0x17, 0x1c, 0x34, 0x04, 0x43, 0x28, 0x1f, + 0x06, 0x1f, 0xb7, 0x10, 0x16, 0xf5, 0x7f, 0x16, 0x16, 0x80, 0xd0, 0x01, + 0x1c, 0x1a, 0x36, 0x53, 0x00, 0x00, 0x18, 0xf0, 0x28, 0x17, 0x10, 0x16, + 0xda, 0xaf, 0x06, 0xfc, 0xaf, 0x06, 0xf2, 0xff, 0xb0, 0xc0, 0xdc, 0xc2, + 0xe3, 0x07, 0x38, 0x17, 0x0e, 0x7e, 0x2f, 0x78, 0x17, 0x41, 0x04, 0x38, + 0x06, 0x28, 0x15, 0x07, 0x12, 0x7f, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x17, + 0x17, 0xd0, 0x01, 0xe7, 0x1a, 0x00, 0x50, 0x00, 0x00, 0x00, 0x19, 0xa0, + 0xdb, 0x56, 0xdd, 0x5d, 0x8b, 0x06, 0xda, 0xaf, 0x69, 0x00, 0x63, 0x2f, + 0xb3, 0x75, 0x4f, 0xb5, 0x10, 0x16, 0x10, 0x7f, 0x86, 0x06, 0xf2, 0xff, + 0xf0, 0xc4, 0x28, 0xcd, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, 0x21, 0x03, + 0x04, 0x4b, 0x04, 0x47, 0x04, 0x43, 0x68, 0x1d, 0x0e, 0x12, 0x7f, 0x90, + 0x10, 0x0e, 0xf5, 0x7f, 0x18, 0x18, 0xd0, 0x01, 0xc8, 0x15, 0x09, 0x4a, + 0x00, 0x00, 0x00, 0x1a, 0xa0, 0xf2, 0x96, 0x57, 0x53, 0xae, 0x06, 0xbd, + 0x2f, 0x59, 0x28, 0x11, 0x6e, 0x2f, 0xaf, 0x06, 0x58, 0x15, 0x10, 0x0f, + 0x10, 0x7f, 0x91, 0x43, 0x4e, 0x06, 0xd2, 0xff, 0x08, 0xc7, 0x9c, 0xb0, + 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x59, 0x2e, 0x48, 0x0f, 0x3d, 0x06, + 0x88, 0x17, 0x10, 0x16, 0xf5, 0x7f, 0x19, 0x19, 0xd0, 0x01, 0x00, 0xd3, + 0x11, 0x04, 0x49, 0x00, 0x00, 0x1b, 0xa0, 0x0a, 0x59, 0x6d, 0x5f, 0x6c, + 0x06, 0xbd, 0x2f, 0x5a, 0x2f, 0xab, 0x65, 0x36, 0x00, 0x6a, 0x2f, 0xb5, + 0x3f, 0xaf, 0x67, 0x10, 0x16, 0x00, 0x7f, 0x06, 0xf2, 0xff, 0x00, 0x18, + 0xc8, 0xa5, 0xc7, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x27, 0x04, 0x36, + 0x00, 0x04, 0x4d, 0x04, 0x46, 0x04, 0x37, 0x04, 0x4f, 0xe4, 0x28, 0x21, + 0x06, 0x2d, 0x17, 0x10, 0x16, 0xe5, 0x7f, 0x1a, 0x1a, 0xd0, 0x01, 0x8b, + 0x15, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x1d, 0xa0, 0x83, 0x5e, 0x00, 0x7f, + 0x89, 0xc1, 0x30, 0xef, 0x30, 0xf3, 0x30, 0x00, 0xcf, 0x65, 0xea, 0x81, + 0xbb, 0x6c, 0x3a, 0x53, 0xb5, 0x05, 0xdf, 0xb6, 0x47, 0x2f, 0xaf, 0x58, + 0x11, 0x78, 0x28, 0x1b, 0x2d, 0x48, 0x27, 0xbd, 0x70, 0x11, 0x7a, 0x2f, + 0xcb, 0x05, 0xd0, 0x7f, 0x06, 0x1f, 0xb2, 0x07, 0xd0, 0x7f, 0x20, 0xc1, + 0x7f, 0xa6, 0x0d, 0x30, 0xff, 0x7f, 0x22, 0xff, 0xee, 0x58, 0x06, 0x52, + 0xfb, 0x3f, 0xff, 0x11, 0x00, 0xad, 0xdc, 0xc2, 0xa1, 0xc8, 0x20, 0x00, + 0x71, 0x81, 0x20, 0x03, 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x0e, 0xb2, + 0x7f, 0x82, 0x06, 0x1f, 0xaf, 0x13, 0x04, 0x43, 0x04, 0x30, 0x28, 0x11, + 0x41, 0x0d, 0x04, 0x38, 0x04, 0x2d, 0x48, 0x25, 0x70, 0x0f, 0x3a, 0x20, + 0x11, 0x00, 0x39, 0x04, 0x20, 0x00, 0x30, 0x04, 0x32, 0x04, 0x11, 0x42, + 0x04, 0x3e, 0x28, 0x35, 0x3e, 0x04, 0x3c, 0x28, 0x3b, 0x56, 0x4b, 0x40, + 0x15, 0x40, 0x20, 0x35, 0x39, 0x40, 0x15, 0x02, 0xdf, 0xeb, 0xe3, 0xae, + 0x25, 0x7f, 0xef, 0x62, 0x7f, 0x40, 0x06, 0x22, 0x7f, 0x07, 0xd5, 0x7f, + 0x10, 0x06, 0x10, 0x7f, 0x1b, 0x40, 0x1b, 0xd0, 0x01, 0x3c, 0x10, 0x06, + 0x4d, 0x00, 0x00, 0x04, 0x1e, 0xa0, 0x85, 0x51, 0xe2, 0x28, 0x13, 0xb4, + 0x30, 0x2d, 0xeb, 0x30, 0x06, 0x55, 0x19, 0x4e, 0x2f, 0xad, 0x38, 0x0f, + 0x4d, 0x2f, 0xb5, 0xb1, 0x3f, 0xaf, 0x67, 0x05, 0x28, 0x0b, 0xbf, 0xff, + 0x4d, 0x00, 0x6f, 0x4f, 0xa7, 0x15, 0x6f, 0x00, 0x6c, 0x2f, 0xb3, 0x65, + 0x27, 0x19, 0x49, 0x2f, 0xb7, 0x05, 0x74, 0x00, 0xe9, 0x00, 0x72, 0x40, + 0x0f, 0x75, 0x20, 0x07, 0x6d, 0x65, 0x04, 0xaf, 0xc5, 0x30, 0x6d, 0x6e, + 0x2f, 0xb1, 0x30, 0x65, 0x20, 0xc0, 0x8d, 0xdb, 0x31, 0x17, 0x05, 0xf0, + 0xff, 0x61, 0x80, 0xff, 0x30, 0x91, 0x6e, 0x2f, 0xc3, 0x06, 0xb0, 0x7f, + 0x50, 0x69, 0x21, 0x9b, 0x72, 0x04, 0xef, 0xca, 0x85, 0x51, 0x99, 0x84, + 0x20, 0xe4, 0x53, 0x06, 0x78, 0x15, 0x00, 0x00, 0x24, 0xb1, 0x74, 0x04, + 0xc7, 0x4d, 0xba, 0x6c, 0xad, 0x06, 0x58, 0x15, 0x00, 0x00, 0x6d, 0x42, + 0x2f, 0xa9, 0x52, 0x81, 0x6e, 0x43, 0x85, 0xb3, 0x0d, 0xeb, 0x05, 0xa3, + 0x7f, 0x74, 0xf3, 0x82, 0x7f, 0x30, 0x8f, 0x05, 0x91, 0xff, 0x10, 0x00, + 0xe7, 0xf5, 0x20, 0x00, 0x51, 0x12, 0x28, 0x35, 0x43, 0x28, 0x19, 0x40, + 0x04, 0x35, 0x28, 0x3f, 0x11, 0x3d, 0x04, 0x4f, 0x20, 0x01, 0x20, 0x00, + 0x1c, 0x48, 0x29, 0x55, 0x33, 0x28, 0x2f, 0x3b, 0x28, 0x51, 0x4f, 0x02, + 0x88, 0x1d, 0x67, 0x82, 0x7f, 0xe4, 0x06, 0x38, 0x15, 0x07, 0x15, 0x7f, + 0x10, 0x06, 0xf0, 0x7f, 0x1c, 0x1c, 0xd0, 0x01, 0x06, 0x1d, 0x00, 0x5f, + 0x4f, 0x00, 0x00, 0x1f, 0xa0, 0xe7, 0x5b, 0x0b, 0x0f, 0x59, 0xde, 0x56, + 0x06, 0x9d, 0x2f, 0x4e, 0x44, 0x97, 0x5f, 0xad, 0x6f, 0x61, 0x2a, 0xaf, + 0x3e, 0xad, 0x69, 0x05, 0x4a, 0xa9, 0x00, 0x30, 0x7f, 0x06, 0xf0, 0xff, + 0x06, 0xf1, 0x7f, 0x1a, 0x20, 0x00, 0x48, 0x41, 0x7f, 0x0d, 0x90, 0xff, + 0x81, 0x06, 0xe2, 0xff, 0xdd, 0x00, 0xb2, 0xe4, 0xc0, 0xc4, 0xd6, 0x74, + 0xc7, 0x20, 0x1a, 0x00, 0x71, 0xc8, 0x06, 0x38, 0x1b, 0x0e, 0xf2, 0xff, + 0x1d, 0x27, 0xd5, 0x3d, 0x22, 0x04, 0x41, 0x27, 0xed, 0x2d, 0x00, 0x25, + 0x27, 0xff, 0x4d, 0x8d, 0x28, 0x17, 0x41, 0x04, 0x3a, 0x27, 0xeb, 0x38, + 0x1f, 0x30, 0x00, 0xe8, 0x35, 0xf9, 0x03, 0x1f, 0xdf, 0xb5, 0x7f, 0x06, + 0x38, 0x19, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x1d, 0x1d, 0xd0, + 0x01, 0x00, 0x60, 0x1b, 0x9a, 0x4b, 0x00, 0x00, 0x20, 0xa0, 0x00, 0xb0, + 0x65, 0x86, 0x75, 0xa6, 0x30, 0xa4, 0x30, 0x0a, 0xb0, 0x30, 0xeb, 0x30, + 0x06, 0x3d, 0x35, 0x58, 0x4c, 0xaf, 0x6a, 0xc5, 0x4e, 0xab, 0x3f, 0xb7, + 0x2d, 0x00, 0x57, 0x4f, 0x29, 0x77, 0x2f, 0xa9, 0x5e, 0x27, 0x4f, 0x47, + 0x2d, 0x04, 0xc8, 0x25, 0xf0, 0x7f, 0x05, 0xfe, 0x33, 0x07, 0xf0, 0x7f, + 0x20, 0x0f, 0x00, 0x55, 0x00, 0x79, 0x4c, 0x35, 0x04, 0xff, 0xa9, 0x07, + 0x51, 0x7f, 0x32, 0xff, 0x02, 0xf4, 0x7e, 0x3e, 0x54, 0x14, 0x5c, 0x06, + 0x5b, 0x19, 0xe0, 0x00, 0xc2, 0xa5, 0xc7, 0xe8, 0xc6, 0x74, 0xc7, 0xb0, + 0x1a, 0xc6, 0xbc, 0xc5, 0x06, 0x38, 0x17, 0x0e, 0xf2, 0xff, 0x21, 0x48, + 0x17, 0x4c, 0x0a, 0x04, 0x46, 0x04, 0x37, 0x2f, 0xf5, 0x3d, 0x28, 0x1d, + 0x23, 0xac, 0x28, 0x19, 0x33, 0x28, 0x21, 0x40, 0x05, 0x48, 0x1f, 0x35, + 0x7f, 0xad, 0x7d, 0x0e, 0x3e, 0x54, 0x3e, 0x72, 0x06, 0x58, 0x19, 0x07, + 0xf5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x1e, 0x42, 0x1e, 0xd0, 0x01, 0x22, + 0x1f, 0x48, 0x3e, 0x23, 0x15, 0xa0, 0x01, 0xc1, 0x30, 0xd9, 0x30, 0xc3, + 0x30, 0xc8, 0x06, 0x48, 0x13, 0xb5, 0x78, 0x17, 0x7a, 0x06, 0x67, 0x93, + 0x3f, 0xff, 0x54, 0x2f, 0xaf, 0x62, 0x28, 0x89, 0x68, 0x74, 0x06, 0x40, + 0x7d, 0x0f, 0x30, 0x7f, 0xed, 0x06, 0xc1, 0x7f, 0x7f, 0x89, 0xcf, 0x60, + 0x85, 0x06, 0x72, 0xfb, 0x3f, 0xff, 0xf0, 0xd2, 0xa0, 0xbc, 0xb8, 0x6a, + 0xd2, 0x06, 0x38, 0x11, 0x07, 0xf2, 0xff, 0x65, 0x06, 0x43, 0xff, 0x22, + 0x28, 0x17, 0x31, 0x3f, 0x04, 0x35, 0x27, 0xf5, 0x05, 0x38, 0x05, 0x00, + 0x92, 0x7f, 0x06, 0x18, 0x11, 0x07, 0x55, 0x7f, 0x10, 0x06, 0xf0, 0x7f, + 0x20, 0x1f, 0x1f, 0xd0, 0x01, 0x18, 0x15, 0xd4, 0x40, 0x03, 0x80, 0x4f, + 0xff, 0x1c, 0xa0, 0xf0, 0x53, 0x7e, 0x6e, 0x01, 0x6e, 0x77, 0x06, 0x67, + 0x18, 0x47, 0x9b, 0x61, 0x4a, 0xa1, 0x3f, 0xb1, 0x10, 0x0e, 0xb0, 0x7f, + 0xe1, 0xc0, 0x06, 0x61, 0xff, 0x06, 0xf2, 0xff, 0xc0, 0xd0, 0x74, 0xc7, + 0x44, 0xc6, 0x0a, 0x20, 0x00, 0x31, 0xc1, 0x10, 0x06, 0x53, 0x7f, 0x22, + 0x4f, 0xf7, 0x32, 0x8c, 0x2f, 0xfd, 0x3d, 0x04, 0x4c, 0x03, 0xc7, 0xf5, + 0x01, 0x72, 0x7f, 0x63, 0x70, 0x90, 0x10, 0x16, 0xb5, 0x7f, 0x1b, 0x1b, + 0xd0, 0x01, 0xcd, 0x11, 0x67, 0x56, 0x80, 0x2b, 0x31, 0xa0, 0xde, 0x30, + 0xab, 0x30, 0xaa, 0x30, 0xaa, 0x06, 0x98, 0x17, 0x4d, 0x2a, 0xaf, 0x63, + 0x2a, 0xb3, 0x6f, 0x0e, 0xe0, 0x7f, 0x75, 0x80, 0x10, 0x06, 0x61, 0x7f, + 0xb3, 0x6f, 0xe8, 0x95, 0x79, 0x72, 0x2b, 0x02, 0x52, 0x4c, 0x88, 0x3f, + 0x65, 0x3a, 0x06, 0x2d, 0xb7, 0xc8, 0x07, 0xb9, 0x74, 0xce, 0x24, 0xc6, + 0x07, 0x13, 0x7f, 0x06, 0xf2, 0x7f, 0x06, 0x72, 0xff, 0x56, 0x1c, 0x28, + 0x17, 0x3a, 0x28, 0x1b, 0x3e, 0x06, 0x28, 0x13, 0x52, 0x7f, 0x80, 0xae, + 0x22, 0x7f, 0x25, 0x42, 0x7f, 0x40, 0x06, 0x22, 0x7f, 0x0f, 0x75, 0x7f, + 0x0e, 0x76, 0x7f, 0x21, 0x40, 0x21, 0xd0, 0x01, 0xcc, 0x0f, 0xc8, 0x50, + 0x00, 0x00, 0x01, 0x23, 0xa0, 0xdb, 0x30, 0xf3, 0x30, 0xb3, 0x20, 0x03, + 0xa0, 0x06, 0x7d, 0x31, 0x48, 0x28, 0x11, 0x6e, 0x00, 0x67, 0x00, 0x20, + 0x36, 0x00, 0x4b, 0x60, 0x09, 0x0e, 0x50, 0x7f, 0x6b, 0x06, 0x40, 0xfd, + 0x0f, 0x11, 0x7f, 0x99, 0x10, 0x99, 0x2f, 0x6e, 0x06, 0xb8, 0x17, 0x4d, + 0xd6, 0x69, 0xcf, 0xd6, 0x06, 0x9e, 0x2d, 0x0f, 0x12, 0x7f, 0x13, 0x28, + 0x11, 0x3d, 0x28, 0x19, 0x30, 0x05, 0x33, 0xf9, 0x06, 0x28, 0x1b, 0x52, + 0x7f, 0x06, 0x98, 0x17, 0x0f, 0x75, 0x7f, 0x0e, 0x76, 0x7f, 0x22, 0x22, + 0xd0, 0x01, 0x09, 0xf9, 0x0f, 0x47, 0x51, 0xff, 0xff, 0x01, 0x01, 0xd0, + 0x01, 0x24, 0x02, 0x02, 0xd0, 0x01, 0x03, 0x03, 0xd0, 0x01, 0x04, 0x04, + 0x92, 0xd0, 0x01, 0x05, 0x05, 0xd0, 0x01, 0x06, 0x06, 0xd0, 0x01, 0x07, + 0x49, 0x07, 0xd0, 0x01, 0x08, 0x08, 0xd0, 0x01, 0x09, 0x09, 0xd0, 0x01, + 0x24, 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0xd0, 0x01, 0x0c, 0x0c, 0x92, + 0xd0, 0x01, 0x0d, 0x0d, 0xd0, 0x01, 0x0e, 0x0e, 0xd0, 0x01, 0x0f, 0x49, + 0x0f, 0xd0, 0x01, 0x10, 0x10, 0xd0, 0x01, 0x11, 0x11, 0xd0, 0x01, 0x24, + 0x12, 0x12, 0xd0, 0x01, 0x13, 0x13, 0xd0, 0x01, 0x14, 0x14, 0x92, 0xd0, + 0x01, 0x15, 0x15, 0xd0, 0x01, 0x16, 0x16, 0xd0, 0x01, 0x17, 0x49, 0x17, + 0xd0, 0x01, 0x18, 0x18, 0xd0, 0x01, 0x19, 0x19, 0xd0, 0x01, 0x24, 0x1a, + 0x1a, 0xd0, 0x01, 0x1c, 0x1c, 0xd0, 0x01, 0x1d, 0x1d, 0x92, 0xd0, 0x01, + 0x1e, 0x1e, 0xd0, 0x01, 0x1f, 0x1f, 0xd0, 0x01, 0x20, 0x60, 0x20, 0xd0, + 0x01, 0x7f, 0xff, 0x00, 0x11, 0x94, 0x10, 0x00, 0x12, 0x01, 0x00, 0x00, + 0x30, 0x01, 0xa0, 0x1f, 0x50, 0x07, 0x00, 0x0c, 0x2d, 0x4e, 0xfd, 0x56, + 0x60, 0x0a, 0x06, 0x40, 0x06, 0x43, 0x00, 0x01, 0x68, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x61, 0x06, 0xe0, 0x7f, 0x78, 0x65, 0x0e, 0x80, 0xff, 0x06, + 0xb1, 0x7d, 0x07, 0x11, 0xff, 0x06, 0xf2, 0xff, 0x11, 0xc9, 0x6d, 0x60, + 0xad, 0x0f, 0x33, 0x7f, 0x06, 0x73, 0xff, 0x1a, 0x04, 0x38, 0x04, 0x42, + 0x04, 0x04, 0x30, 0x04, 0x39, 0x04, 0x06, 0x72, 0x7f, 0x0b, 0x57, 0xf6, + 0x10, 0x06, 0xb1, 0xff, 0x0e, 0xf2, 0xff, 0x01, 0xf7, 0xfb, 0x78, 0x3f, + 0x22, 0x10, 0x72, 0x68, 0x3f, 0x00, 0x3f, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x34, 0xad, 0x02, + 0x11, 0x53, 0x00, 0x00, 0x30, 0x01, 0x64, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xa8, 0x27, 0xbf, + 0x1a, 0x00, 0x00, 0x00, 0x09, 0x64, 0xe2, 0x30, 0xb9, 0x30, 0xaf, 0x04, + 0x30, 0xef, 0x30, 0x02, 0x5e, 0x06, 0x58, 0x1f, 0x4d, 0x00, 0x04, 0x6f, + 0x00, 0x73, 0x00, 0x63, 0x20, 0x05, 0x77, 0x00, 0x00, 0x20, 0x00, 0x43, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x51, 0x79, 0x06, 0x40, 0x7f, 0x75, 0x20, + 0x7f, 0x28, 0x00, 0x76, 0x20, 0x81, 0x44, 0x6c, 0x20, 0x01, 0x65, 0x00, + 0x29, 0x05, 0xa0, 0xff, 0x6b, 0x00, 0x51, 0x61, 0x60, 0x7f, 0x53, 0x20, + 0xff, 0x61, 0x00, 0x64, 0x21, 0x05, 0xbb, 0x05, 0xb0, 0x7f, 0x63, 0x20, + 0x7f, 0x06, 0x5a, 0x1f, 0x31, 0xf1, 0x75, 0x20, 0xef, 0x30, 0xf3, 0x5a, + 0x20, 0x20, 0xf7, 0x65, 0x22, 0x05, 0x72, 0x13, 0xfa, 0x05, 0x2a, 0xb2, + 0xab, 0x06, 0x83, 0xaf, 0x65, 0xd1, 0x79, 0x06, 0x72, 0xfd, 0x23, 0x87, + 0xba, 0x03, 0xa4, 0xc2, 0x6c, 0xd0, 0x14, 0xbc, 0x06, 0x7b, 0x9d, 0x72, + 0x7f, 0xbb, 0x72, 0xff, 0x73, 0x62, 0x7f, 0x05, 0x52, 0xfd, 0xb3, 0xff, + 0x76, 0x24, 0x09, 0x33, 0x81, 0x70, 0x63, 0x24, 0x03, 0x52, 0x0f, 0x05, + 0x33, 0x83, 0x1c, 0x04, 0x3e, 0x04, 0x00, 0x41, 0x04, 0x3a, 0x04, 0x32, + 0x04, 0x30, 0x04, 0xc0, 0x0e, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x01, + 0x2b, 0x29, 0x06, 0x05, 0x01, 0x02, 0x01, 0x01, 0x2c, 0x2b, 0x1e, 0x2b, + 0x20, 0x06, 0x01, 0x80, 0x58, 0x17, 0x0a, 0x64, 0xa2, 0x30, 0xc7, 0x30, + 0xa3, 0x00, 0x30, 0xb2, 0x30, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x51, 0x56, + 0x06, 0x1f, 0xbb, 0x41, 0x27, 0x03, 0x79, 0x00, 0x67, 0x27, 0x87, 0xc6, + 0x05, 0xb8, 0x0d, 0x00, 0x10, 0x7f, 0x75, 0x00, 0xe9, 0x28, 0x0b, 0x06, + 0x1f, 0xbb, 0x52, 0xaa, 0x28, 0x81, 0x70, 0x28, 0x93, 0x62, 0x28, 0x8d, + 0x69, 0x28, 0x1f, 0x20, 0xbe, 0xa1, 0x11, 0x6a, 0x05, 0x27, 0xad, 0x90, + 0x7f, 0x50, 0x81, 0x38, 0x21, 0x37, 0x9f, 0x69, 0xab, 0x60, 0x89, 0x69, + 0x21, 0x9b, 0x68, 0x29, 0x25, 0x7a, 0x29, 0xb1, 0x04, 0x38, 0x3b, 0xbb, + 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0x38, 0x1d, 0x70, 0x7d, 0x75, 0x42, 0x1b, + 0x04, 0x78, 0xb7, 0x02, 0x3f, 0x96, 0xea, 0x8f, 0x3c, 0x68, 0x06, 0x72, + 0xfd, 0x00, 0x00, 0x00, 0x44, 0xc5, 0x14, 0xb5, 0x8c, 0xac, 0x7c, 0x00, + 0xc5, 0x20, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0x46, 0xad, 0x06, 0x73, + 0x7f, 0x69, 0x00, 0xeb, 0x06, 0x83, 0x7f, 0x51, 0xe5, 0xe9, 0xec, 0x2c, + 0x1f, 0x32, 0x63, 0x3b, 0x9d, 0x72, 0x00, 0x02, 0x15, 0x04, 0x7b, 0xa5, + 0x20, 0x04, 0x40, 0x35, 0x28, 0x17, 0x3f, 0x04, 0x43, 0x04, 0x31, 0x04, + 0x10, 0x3b, 0x04, 0x38, 0x28, 0x21, 0x30, 0x04, 0x20, 0x00, 0x01, 0x10, + 0x04, 0x34, 0x04, 0x4b, 0x04, 0x33, 0x20, 0x1b, 0x70, 0x4f, 0x04, 0xe8, + 0x2d, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x02, 0x01, 0x01, 0x3e, + 0x10, 0x3c, 0x35, 0x02, 0x20, 0x06, 0x2c, 0x01, 0x02, 0x02, 0x00, 0x02, + 0x02, 0xb7, 0x1f, 0x80, 0x1c, 0x00, 0x00, 0x41, 0x0b, 0x28, 0x17, 0xeb, + 0x30, 0xbf, 0x30, 0xa4, 0x06, 0x88, 0x17, 0x45, 0x47, 0x2f, 0xaf, 0x72, + 0x00, 0x6e, 0x2f, 0xb5, 0x2d, 0x28, 0x23, 0x75, 0x6c, 0x4f, 0x2d, 0x05, + 0xbb, 0x2f, 0x70, 0x73, 0xef, 0x64, 0x8f, 0xe9, 0xa7, 0xa5, 0x7b, 0x71, + 0x46, 0x93, 0x04, 0xdf, 0xb7, 0x00, 0x38, 0x17, 0x51, 0x05, 0x69, 0x05, + 0xe8, 0x97, 0xf7, 0x99, 0x57, 0x6c, 0x28, 0xa9, 0x27, 0x81, 0x93, 0x6a, + 0x04, 0xc9, 0x17, 0x00, 0x58, 0x17, 0x32, 0x0d, 0x40, 0xe1, 0x04, 0xe1, + 0x07, 0x3f, 0x96, 0x14, 0x5c, 0xf0, 0x6c, 0x80, 0x06, 0x98, 0x17, 0xe0, + 0xac, 0x74, 0xb9, 0x78, 0xb1, 0x4c, 0x07, 0xc5, 0xc0, 0xd0, 0x74, 0xc7, + 0x06, 0x38, 0x1b, 0x91, 0xdf, 0x97, 0x8f, 0xbe, 0x7a, 0xa5, 0x65, 0x2a, + 0xa7, 0x04, 0xff, 0xb1, 0x92, 0xed, 0x05, 0xd8, 0x0f, 0x00, 0xf8, 0x17, + 0x3b, 0x2e, 0x04, 0x42, 0x28, 0x21, 0x39, 0x04, 0xe8, 0x15, 0x07, 0x14, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x00, 0x0f, 0x03, 0x3f, 0x3a, 0x36, + 0x03, 0x03, 0x03, 0x10, 0x02, 0x2d, 0x0f, 0x20, 0x05, 0x03, 0xf1, 0x24, + 0x21, 0x08, 0x3d, 0x00, 0x00, 0x0c, 0x88, 0x17, 0x30, 0x57, 0xb9, 0xef, + 0x06, 0x3f, 0x2e, 0x06, 0x48, 0x0b, 0x00, 0x98, 0x17, 0x6b, 0x2c, 0xa9, + 0x38, 0x23, 0x04, 0xf5, 0x0d, 0xdf, 0xaf, 0xba, 0x3d, 0xad, 0x6f, 0x29, + 0x1b, 0x05, 0xf8, 0x13, 0x3f, 0xfe, 0x54, 0x2f, 0xaf, 0x72, 0xbf, 0x2d, + 0x9f, 0x69, 0x29, 0x91, 0x39, 0xa1, 0x30, 0x89, 0x05, 0xb8, 0x17, 0x00, + 0x90, 0x7f, 0x05, 0x58, 0x19, 0x81, 0x58, 0x17, 0xb9, 0x8f, 0x86, 0x75, + 0x3a, 0x53, 0x06, 0x3f, 0x30, 0x87, 0x78, 0x11, 0xc0, 0xc9, 0x29, 0xbc, + 0x06, 0xb3, 0x7f, 0x58, 0x17, 0x52, 0xff, 0x6b, 0x6a, 0x05, 0xa2, 0xff, + 0xd8, 0x17, 0x74, 0xa2, 0x8d, 0xf3, 0x62, 0x8d, 0x04, 0xdb, 0x97, 0xa8, + 0x98, 0x01, 0x41, 0x28, 0x13, 0x38, 0x28, 0x09, 0x20, 0x00, 0x3a, 0x38, + 0x04, 0x40, 0x05, 0x48, 0x13, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, + 0x04, 0x02, 0x02, 0x00, 0x35, 0x4c, 0x4b, 0x04, 0x04, 0x02, 0x03, 0x01, + 0x00, 0x02, 0x04, 0x04, 0x04, 0x04, 0xf0, 0x25, 0x8e, 0x08, 0x3b, 0x00, + 0x00, 0x0d, 0x28, 0x17, 0xe0, 0x30, 0xfc, 0x95, 0x28, 0x1b, 0xde, 0x5d, + 0x06, 0x77, 0x97, 0x6d, 0x2f, 0x9f, 0x72, 0x06, 0x68, 0x15, 0xa8, 0x50, + 0x7f, 0x6f, 0x06, 0xa0, 0x81, 0x4f, 0x4f, 0xa7, 0x61, 0x00, 0x73, 0xff, + 0x2f, 0x95, 0x3f, 0x23, 0x05, 0xf1, 0x0d, 0xb8, 0x97, 0x3f, 0xa5, 0xb8, + 0x11, 0x05, 0x31, 0x99, 0x79, 0x17, 0x70, 0xf3, 0x49, 0x17, 0x78, 0x0f, + 0x05, 0x92, 0x13, 0x3f, 0x96, 0x46, 0x7a, 0x20, 0x14, 0x5c, 0x06, 0x72, + 0xfd, 0x00, 0x00, 0x44, 0xc5, 0x34, 0x01, 0xbb, 0x74, 0xb9, 0x20, 0x00, + 0xfc, 0xc8, 0x06, 0xb2, 0xff, 0xeb, 0x3a, 0x1b, 0x06, 0xd3, 0xff, 0x3b, + 0x95, 0x72, 0x6b, 0x23, 0xe3, 0x05, 0x08, 0x0d, 0xb8, 0x17, 0x18, 0x3c, + 0x04, 0x43, 0x28, 0x07, 0x38, 0x15, 0x30, 0x04, 0x4f, 0x8a, 0x28, 0x15, + 0x3e, 0x04, 0x31, 0x28, 0x2b, 0x30, 0x28, 0x27, 0x42, 0x38, 0x04, 0x4c, + 0x05, 0x08, 0x1b, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x05, 0x03, + 0x04, 0x04, 0x07, 0x07, 0x07, 0x05, 0x05, 0x38, 0x19, 0x05, 0x05, 0x00, + 0x05, 0x05, 0xd0, 0x23, 0xad, 0x5a, 0x00, 0x00, 0x40, 0x0e, 0x28, 0x17, + 0xeb, 0x30, 0xcf, 0x30, 0xf3, 0x30, 0x01, 0xb2, 0x30, 0xea, 0x30, 0xb9, + 0x30, 0xaf, 0x06, 0x08, 0x1f, 0x45, 0x41, 0x2f, 0xa1, 0x6b, 0x00, 0x68, + 0x2f, 0xb1, 0x6e, 0x2f, 0x37, 0xae, 0x3e, 0xa5, 0x27, 0x27, 0x23, 0x6b, + 0x06, 0xa0, 0x7f, 0x05, 0xb0, 0x7d, 0x00, 0x18, 0x17, 0x72, 0x3e, 0x00, + 0x63, 0x05, 0xc0, 0x8d, 0x00, 0x18, 0x17, 0x3d, 0xb9, 0x50, 0x87, 0x91, + 0x93, 0x6f, 0xaa, 0x05, 0xe8, 0x17, 0x72, 0x2e, 0xbf, 0xe1, 0x42, 0x11, + 0x75, 0x04, 0xe1, 0x93, 0x3f, 0x00, 0x96, 0x14, 0x5c, 0x49, 0x6c, 0x3c, + 0x68, 0x14, 0x04, 0x5c, 0xaf, 0x65, 0x4b, 0x51, 0x06, 0x1b, 0x1d, 0x44, + 0xc5, 0x00, 0x74, 0xb9, 0x5c, 0xd5, 0x94, 0xac, 0xa4, 0xc2, 0x3d, 0x6c, + 0xd0, 0x06, 0x38, 0x1d, 0x06, 0x12, 0x71, 0x01, 0x33, 0x7f, 0x05, 0x98, + 0x25, 0x10, 0x28, 0x13, 0x41, 0x45, 0x28, 0x11, 0x3d, 0x04, 0x33, 0x04, + 0x35, 0x28, 0x0f, 0x70, 0x4c, 0x05, 0xe8, 0x21, 0x08, 0x14, 0xff, 0x10, + 0x0d, 0xd0, 0x7f, 0x06, 0x04, 0x05, 0x08, 0x04, 0x08, 0x08, 0x06, 0x06, + 0x05, 0x28, 0x20, 0x06, 0x06, 0x00, 0x06, 0x06, 0xe3, 0x2d, 0xd2, 0x1c, + 0x00, 0x00, 0x41, 0x0f, 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x30, 0xe9, 0x48, + 0x1b, 0xad, 0x06, 0x3d, 0x35, 0x41, 0x4f, 0x29, 0x72, 0x2f, 0x31, 0x78, + 0x1d, 0x27, 0x06, 0xe0, 0x7f, 0xff, 0x05, 0xde, 0x39, 0xf8, 0x17, 0x71, + 0x0d, 0x78, 0x1d, 0x04, 0xff, 0x34, 0x00, 0x78, 0x17, 0xf0, 0x87, 0x04, + 0x71, 0x95, 0xf0, 0x00, 0x58, 0x17, 0x91, 0x05, 0x38, 0x1d, 0x04, 0xbf, + 0xcb, 0x3f, 0x96, 0xaf, 0x65, 0x03, 0x79, 0x72, 0xc9, 0x62, 0x55, 0x7f, + 0x06, 0x32, 0xfd, 0x38, 0x17, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x7c, 0xb7, + 0x5c, 0xd5, 0xf7, 0x06, 0x38, 0x15, 0xb3, 0x7f, 0x05, 0x72, 0x71, 0x00, + 0x90, 0x7f, 0xe3, 0x05, 0xa8, 0x0f, 0x98, 0x17, 0x37, 0xf5, 0x7c, 0x40, + 0x28, 0x19, 0x58, 0x1d, 0x05, 0xd8, 0x15, 0x08, 0x34, 0xff, 0x10, 0x0d, + 0xd0, 0x7f, 0x07, 0x05, 0x01, 0x06, 0x09, 0x09, 0x09, 0x07, 0x07, 0x06, + 0x28, 0x20, 0x00, 0x07, 0x07, 0x07, 0x07, 0xf5, 0x20, 0x2b, 0x22, 0x80, + 0x2b, 0x2d, 0x64, 0xd0, 0x30, 0xb7, 0x30, 0xb3, 0x30, 0x44, 0xeb, 0x28, + 0x1b, 0xb9, 0x30, 0xbf, 0x28, 0x1b, 0x71, 0x51, 0x0a, 0x8c, 0x54, 0xfd, + 0x56, 0x05, 0x9f, 0x30, 0x42, 0x4f, 0x2b, 0x68, 0xaf, 0x2f, 0xb3, 0x6f, + 0x2f, 0xb9, 0x74, 0x2e, 0xb7, 0x3f, 0x39, 0x05, 0x97, 0x9f, 0x30, 0x7f, + 0xab, 0x3f, 0xa1, 0x6b, 0x2f, 0x33, 0x72, 0x2f, 0x37, 0x65, 0x05, 0xee, + 0x30, 0x3f, 0xaf, 0x6f, 0x70, 0x2f, 0x15, 0x38, 0x1d, 0x69, 0x4d, 0x29, + 0x51, 0x11, 0x50, 0x93, 0x05, 0x11, 0x13, 0xda, 0x90, 0x7f, 0x50, 0x81, + 0x63, 0x2e, 0x39, 0x5f, 0xb7, 0x6c, 0x60, 0x8b, 0x61, 0x6f, 0x01, 0x04, + 0xb1, 0x9b, 0x50, 0xff, 0xfa, 0x00, 0x00, 0x7d, 0x71, 0x07, 0xd2, 0x17, + 0x04, 0x18, 0x25, 0x00, 0xf4, 0x5d, 0xc0, 0x4e, 0xd1, 0x79, 0x14, 0x5c, + 0x02, 0x58, 0x62, 0xaf, 0x65, 0x66, 0x57, 0x05, 0xf2, 0xfd, 0x00, 0x00, + 0x00, 0x14, 0xbc, 0xdc, 0xc2, 0xa4, 0xd0, 0x74, 0x00, 0xb9, 0x20, 0x00, + 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0x6e, 0xad, 0x05, 0xfb, 0x99, 0x53, 0x7f, + 0x6a, 0x62, 0xff, 0x05, 0xf3, 0x7d, 0x73, 0xff, 0x71, 0xbe, 0x23, 0x01, + 0xed, 0x43, 0x7f, 0x32, 0x7d, 0x58, 0x1b, 0xd2, 0x15, 0x04, 0x78, 0x21, + 0x20, 0x22, 0x04, 0x35, 0x28, 0x19, 0x3f, 0x04, 0x43, 0x48, 0x05, 0x38, + 0x8a, 0x48, 0x15, 0x20, 0x00, 0x11, 0x28, 0x27, 0x48, 0x28, 0x21, 0x3e, + 0xbe, 0x28, 0x31, 0x42, 0x20, 0x05, 0x38, 0x3b, 0x38, 0x35, 0x0c, 0x54, + 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x08, 0x00, 0x06, 0x07, 0x40, 0x37, 0x37, + 0x08, 0x08, 0x07, 0x00, 0x07, 0x2e, 0x06, 0x08, 0x08, 0x08, 0x08, 0xee, + 0x22, 0x26, 0xcc, 0x2f, 0x98, 0x11, 0x64, 0xd9, 0x28, 0x13, 0xb4, 0x05, + 0x30, 0xed, 0x30, 0xc9, 0x30, 0x06, 0x5d, 0x2f, 0x42, 0x46, 0x81, 0x5b, + 0x67, 0x48, 0x15, 0x6f, 0x2e, 0xad, 0x0d, 0xf0, 0x7f, 0x4f, 0x48, 0x11, + 0x39, 0x1b, 0x76, 0x74, 0x48, 0x13, 0x05, 0xf1, 0x0d, 0x7f, 0xaf, 0x6f, + 0x2f, 0xaf, 0x3f, 0xab, 0x64, 0xed, 0x2f, 0xbb, 0x05, 0xb0, 0x87, 0x70, + 0x7f, 0xf3, 0x2e, 0xa9, 0x98, 0x11, 0xe9, 0x05, 0x82, 0x13, 0x00, 0x2b, + 0x52, 0x14, 0x5c, 0xe5, 0x54, 0x57, 0x7f, 0x20, 0xb7, 0x5f, 0x06, 0x52, + 0xff, 0xa8, 0xbc, 0xe0, 0xac, 0x5c, 0x01, 0xb8, 0xb8, 0xd2, 0x20, 0x00, + 0xfc, 0xc8, 0x0f, 0x33, 0x7f, 0xdd, 0x78, 0x15, 0x32, 0x93, 0xe3, 0x2c, + 0x2b, 0x04, 0x78, 0x0f, 0x7f, 0xff, 0x11, 0x28, 0x17, 0x11, 0x3b, 0x04, + 0x33, 0x48, 0x01, 0x3e, 0x04, 0x34, 0x28, 0x23, 0xaa, 0x38, 0x19, 0x4f, + 0x28, 0x1b, 0x3e, 0x48, 0x29, 0x30, 0x48, 0x13, 0x4c, 0xe0, 0x04, 0x28, + 0x11, 0x0f, 0x54, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x09, 0x07, 0x08, 0x0a, + 0x0a, 0x00, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x05, 0x07, 0x09, 0x00, 0x09, + 0x09, 0x09, 0xfb, 0x23, 0x06, 0x1a, 0x00, 0x00, 0x00, 0x12, 0x64, 0xd6, + 0x30, 0xea, 0x30, 0xe3, 0x02, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0xaf, 0x06, + 0x48, 0x19, 0x42, 0xbf, 0x2f, 0xa5, 0x79, 0x4f, 0x0b, 0x3e, 0x1b, 0x06, + 0x50, 0x7f, 0x3c, 0xa5, 0x06, 0x70, 0x7f, 0xf8, 0x17, 0x7e, 0x72, 0x2d, + 0xbb, 0x05, 0xb1, 0x0d, 0x00, 0x78, 0x17, 0x05, 0x70, 0x87, 0x00, 0x58, + 0x17, 0x05, 0x91, 0x93, 0x03, 0x01, 0x5e, 0x6f, 0x82, 0xaf, 0x65, 0x4b, + 0x51, 0x06, 0x5b, 0x15, 0x00, 0x00, 0x00, 0x0c, 0xbe, 0xb8, 0xb7, 0xa4, + 0xc2, 0x3e, 0x6c, 0xd0, 0x06, 0x98, 0x17, 0x05, 0xf2, 0x71, 0x00, 0xb3, + 0x7f, 0x05, 0xf8, 0x15, 0x38, 0x17, 0x40, 0xb8, 0x28, 0x05, 0x3d, 0x06, + 0x08, 0x0f, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x0a, 0x08, 0x0a, + 0x14, 0x0b, 0x0b, 0x0b, 0x38, 0x1a, 0x06, 0x38, 0x20, 0x0a, 0xdd, 0x02, + 0x25, 0x70, 0x18, 0x00, 0x00, 0x13, 0x48, 0x17, 0xe4, 0x00, 0x30, 0xfc, + 0x30, 0xc8, 0x30, 0x71, 0x51, 0x8c, 0x15, 0x54, 0xfd, 0x56, 0x06, 0x1f, + 0xaf, 0x75, 0x68, 0x19, 0x74, 0x06, 0x45, 0x98, 0x75, 0x42, 0x2f, 0x9b, + 0x30, 0x81, 0x38, 0x1b, 0x74, 0x2f, 0x37, 0x65, 0x05, 0xee, 0x34, 0xb7, + 0x3f, 0xaf, 0x70, 0x21, 0x03, 0x38, 0x1d, 0x69, 0x45, 0x19, 0x51, 0x11, + 0x38, 0x1d, 0xb7, 0x50, 0x8f, 0x6e, 0x05, 0x60, 0x7f, 0x50, 0x81, 0x63, + 0x29, 0xa3, 0x98, 0x1d, 0x71, 0x19, 0x6f, 0x7a, 0x49, 0x3b, 0x04, 0x90, + 0xff, 0xfa, 0xe0, 0x7d, 0x58, 0x1d, 0xb1, 0x97, 0x04, 0x50, 0x7d, 0x81, + 0x38, 0x17, 0xcc, 0x91, 0x9a, 0x4e, 0x79, 0x72, 0x06, 0x52, 0xfd, 0x00, + 0x00, 0x00, 0x80, 0xbd, 0xb4, 0xb7, 0xb8, 0xd2, 0x00, 0x20, 0x00, 0xf5, + 0xac, 0x54, 0xd6, 0x6d, 0xad, 0xa8, 0x06, 0x52, 0xff, 0x65, 0xa2, 0x6f, + 0xeb, 0x06, 0x43, 0xff, 0x69, 0x00, 0xe1, 0xf8, 0x22, 0x79, 0x3b, 0x9f, + 0x78, 0x19, 0xd2, 0x13, 0x04, 0x98, 0x1f, 0x20, 0x04, 0x35, 0x8a, 0x28, + 0x13, 0x3f, 0x04, 0x43, 0x48, 0x0d, 0x38, 0x48, 0x1d, 0x20, 0xab, 0x28, + 0x2d, 0x43, 0x48, 0x2f, 0x42, 0x20, 0x11, 0x4f, 0x04, 0xc8, 0x1b, 0x07, + 0x14, 0xff, 0x80, 0x10, 0x0e, 0xd0, 0x7f, 0x0b, 0x09, 0x09, 0x41, 0x3d, + 0x38, 0x0b, 0x04, 0x0b, 0x09, 0x0a, 0x2f, 0x09, 0x28, 0x20, 0x0b, 0xdb, + 0x00, 0x24, 0x83, 0x4c, 0x00, 0x00, 0x14, 0x64, 0xc1, 0x14, 0x30, 0xa7, + 0x30, 0x30, 0x03, 0xf3, 0x06, 0x68, 0x17, 0x43, 0x00, 0x56, 0x68, 0x2e, + 0xb1, 0x63, 0x20, 0x05, 0x6e, 0x4b, 0x37, 0x05, 0xff, 0xb2, 0x54, 0xb6, + 0x40, 0x7b, 0xe9, 0x2f, 0xad, 0x50, 0x07, 0x6e, 0x05, 0xe8, 0x1b, 0x00, + 0x18, 0x17, 0x54, 0xdf, 0x2f, 0xa3, 0x31, 0x0f, 0x65, 0x29, 0x29, 0x70, + 0x09, 0x50, 0x95, 0x04, 0x38, 0x21, 0x00, 0x58, 0x17, 0x7f, 0x43, 0x41, + 0x93, 0x38, 0x93, 0x04, 0xf1, 0x91, 0x00, 0x98, 0x17, 0x92, 0x19, 0x50, + 0xff, 0x04, 0x58, 0x97, 0x0c, 0x66, 0x8f, 0xe3, 0x81, 0x06, 0x78, 0x13, + 0x3f, 0xff, 0xb4, 0xcc, 0x37, 0xb8, 0xcc, 0x06, 0x98, 0x15, 0x32, 0xff, + 0x73, 0x2a, 0x83, 0x52, 0x6b, 0x30, 0x07, 0xfa, 0x32, 0xff, 0x05, 0xb8, + 0x1b, 0x93, 0xff, 0x53, 0x7b, 0x05, 0xf8, 0x19, 0x27, 0x28, 0x17, 0x47, + 0xb5, 0x28, 0x1b, 0x3d, 0x28, 0x1d, 0x38, 0x13, 0x4f, 0x28, 0x15, 0x40, + 0x00, 0x28, 0x2b, 0xc0, 0x0c, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, + 0x0a, 0x47, 0x4f, 0x35, 0x3a, 0x00, 0x0c, 0x0c, 0x4c, 0x0f, 0x4f, 0x0a, + 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0xcd, 0x1e, 0x7c, 0x20, 0x00, 0x00, 0x41, + 0x15, 0x48, 0x17, 0xea, 0x30, 0xe3, 0x30, 0xd3, 0x28, 0x19, 0x02, 0xb9, + 0x30, 0xaf, 0x30, 0xde, 0x5d, 0x06, 0x38, 0x17, 0x6c, 0xab, 0x4b, 0x31, + 0x62, 0x2f, 0xb5, 0x6e, 0x27, 0x15, 0x6b, 0x06, 0x08, 0x17, 0x30, 0x81, + 0xd5, 0x3f, 0x17, 0x06, 0x10, 0x81, 0x4f, 0x4f, 0xa7, 0x61, 0x28, 0x0b, + 0x74, 0xc8, 0x13, 0x75, 0x6c, 0x4d, 0xc1, 0x05, 0x11, 0x11, 0x3f, 0xaf, + 0x67, 0x2f, 0xa9, 0x6f, 0x29, 0x97, 0xa1, 0x3f, 0xa5, 0x64, 0x2f, 0xb5, + 0x20, 0x00, 0x0c, 0x01, 0x05, 0x70, 0x81, 0xba, 0x70, 0x7f, 0xf3, 0x2a, + 0x17, 0xd8, 0x11, 0x3e, 0x2b, 0xe1, 0x05, 0x02, 0x13, 0x66, 0x00, 0x8f, + 0xcc, 0x91, 0xc5, 0x96, 0xbe, 0x5b, 0xaf, 0x18, 0x65, 0x4b, 0x51, 0x05, + 0xf2, 0xfb, 0x3f, 0xff, 0xbc, 0xcc, 0xb4, 0x00, 0xb7, 0x48, 0xbe, 0xa4, + 0xc2, 0x6c, 0xd0, 0x20, 0x1f, 0x00, 0xfc, 0xc8, 0x06, 0x98, 0x17, 0x05, + 0x72, 0x6f, 0x01, 0x53, 0xff, 0x78, 0x1b, 0x32, 0x99, 0x75, 0xe3, 0x22, + 0x9b, 0x04, 0x78, 0x15, 0x58, 0x17, 0x3b, 0x28, 0x0d, 0x31, 0x27, 0xff, + 0xa8, 0xb8, 0x1b, 0x3e, 0x48, 0x13, 0x30, 0x28, 0x2d, 0x42, 0x04, 0x4c, + 0xe0, 0x04, 0x88, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, + 0x0b, 0x46, 0x2d, 0x0c, 0x00, 0x0c, 0x0d, 0x0d, 0x4b, 0x10, 0x4e, 0x0b, + 0x0d, 0x00, 0x0d, 0x0d, 0x0d, 0x3a, 0x27, 0xa9, 0x2b, 0x00, 0x28, 0x00, + 0x16, 0x28, 0x17, 0xe5, 0x28, 0x0d, 0xc1, 0x30, 0xea, 0x01, 0x81, 0xbb, + 0x6c, 0xa1, 0x7b, 0x3a, 0x53, 0x06, 0x3a, 0xaf, 0x5d, 0x75, 0x2f, 0x27, + 0x6f, 0x2f, 0xb1, 0x06, 0x5d, 0x2f, 0x3f, 0x9b, 0x6f, 0x80, 0x83, 0x54, + 0x6b, 0x05, 0xeb, 0xb3, 0x41, 0x2f, 0xab, 0x74, 0x47, 0x95, 0x6f, 0x00, + 0x55, 0x6d, 0x2f, 0xbb, 0x72, 0x2f, 0xad, 0x4b, 0x4d, 0x2f, 0x69, 0x2d, + 0xc9, 0xfe, 0x5f, 0x3b, 0x30, 0x13, 0x78, 0x31, 0x31, 0x2b, 0x3d, 0xdb, + 0x7f, 0x47, 0x03, 0x1d, 0xaf, 0x69, 0xaa, 0x2d, 0x9d, 0x63, 0x48, 0x17, + 0x64, 0x2f, 0xad, 0x72, 0x48, 0x23, 0x20, 0xf5, 0xe0, 0x97, 0x30, 0x11, + 0x78, 0x31, 0x03, 0xd1, 0x29, 0x44, 0x40, 0xe7, 0x74, 0x40, 0x77, 0xbf, + 0x31, 0x07, 0x20, 0x2e, 0x31, 0x31, 0x11, 0x38, 0x27, 0x90, 0x79, 0x78, + 0x2d, 0x04, 0x11, 0xa5, 0x03, 0x5a, 0x69, 0xd1, 0x79, 0x47, 0x59, 0x32, + 0xfd, 0x06, 0x12, 0xfb, 0x80, 0x3f, 0xff, 0x95, 0xcd, 0x58, 0xce, 0x20, + 0x00, 0x90, 0x06, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x06, 0x52, 0xff, 0x38, + 0x17, 0x6f, 0xff, 0x2f, 0xb3, 0x06, 0x52, 0xff, 0xf1, 0xd5, 0x38, 0x11, + 0x3a, 0x9b, 0xb2, 0x13, 0x04, 0x98, 0x15, 0x38, 0x17, 0x58, 0x43, 0x28, + 0x0b, 0x3e, 0x27, 0xfd, 0x38, 0x13, 0x38, 0x04, 0x39, 0x8a, 0x28, 0x13, + 0x30, 0x04, 0x32, 0x28, 0x0d, 0x3e, 0x28, 0x27, 0x3e, 0x2a, 0x04, 0x3c, + 0x28, 0x2d, 0x4b, 0x40, 0x15, 0x3e, 0x28, 0x33, 0x40, 0xb8, 0x20, 0x2d, + 0x33, 0x03, 0xc8, 0x25, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0e, + 0x0c, 0x48, 0x00, 0x04, 0x02, 0x02, 0x0e, 0x0e, 0x4d, 0x11, 0x51, 0x00, + 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x08, 0x2e, 0x3b, 0x08, 0x7e, 0x00, 0x00, + 0x17, 0x48, 0x17, 0xf4, 0x30, 0xa1, 0x00, 0x30, 0xb7, 0x30, 0x71, 0x51, + 0x8c, 0x54, 0xfd, 0x57, 0x56, 0x06, 0x58, 0x17, 0x76, 0x4f, 0x31, 0x68, + 0x06, 0xc8, 0x17, 0x30, 0x83, 0x3f, 0xab, 0x75, 0x69, 0x2f, 0xad, 0x05, + 0x9e, 0x37, 0x3f, 0xaf, 0x70, 0x29, 0x19, 0x62, 0x4f, 0x1f, 0xdf, 0x3d, + 0x29, 0x98, 0x01, 0x77, 0x41, 0x15, 0x70, 0x93, 0x03, 0x18, 0x03, 0x00, + 0xd0, 0x7f, 0x50, 0x81, 0x77, 0x63, 0x45, 0x9b, 0x38, 0x2d, 0x71, 0x95, + 0x63, 0x2f, 0xcd, 0x04, 0x99, 0x2b, 0x50, 0xff, 0x78, 0xfa, 0xc0, 0x7d, + 0xb8, 0x07, 0x52, 0x19, 0x04, 0x90, 0x81, 0x5a, 0x69, 0xe6, 0x18, 0x74, + 0xc0, 0x4e, 0x06, 0x52, 0xfb, 0x3f, 0xff, 0x94, 0xcd, 0x14, 0x00, 0xbc, + 0xdc, 0xc2, 0x20, 0x00, 0xf5, 0xac, 0x54, 0x3a, 0xd6, 0x6d, 0x06, 0x28, + 0x19, 0x98, 0x17, 0x53, 0x83, 0x6a, 0x2f, 0xb3, 0xeb, 0xbf, 0x06, 0x23, + 0xff, 0xe1, 0x63, 0x7b, 0x58, 0x19, 0x3b, 0x17, 0xd2, 0x15, 0x04, 0x78, + 0x1b, 0x38, 0x17, 0x04, 0x32, 0x04, 0x30, 0x04, 0x48, 0x48, 0x17, 0x30, + 0x04, 0x45, 0x4f, 0x28, 0x17, 0x40, 0x04, 0x35, 0x28, 0x25, 0x3f, 0x28, + 0x31, 0x1e, 0x31, 0x04, 0x3b, 0x28, 0x2b, 0x30, 0x17, 0x0c, 0x74, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x0f, 0x00, 0x0d, 0x49, 0x50, 0x36, 0x3b, 0x0f, + 0x0f, 0x4e, 0x00, 0x12, 0x50, 0x0d, 0x0f, 0x0f, 0x0f, 0x0f, 0xea, 0x00, + 0x27, 0x96, 0x21, 0x00, 0x00, 0x18, 0x64, 0xc0, 0x00, 0x30, 0xb2, 0x30, + 0xb9, 0x30, 0xbf, 0x30, 0xf3, 0xad, 0x06, 0x68, 0x17, 0x44, 0x2f, 0x9f, + 0x67, 0x2f, 0x27, 0x3e, 0x33, 0x61, 0x04, 0x66, 0xfb, 0xbe, 0x01, 0x10, + 0x7f, 0x75, 0x06, 0x80, 0x81, 0x00, 0x18, 0x17, 0x05, 0xd1, 0x11, 0x00, + 0x58, 0x17, 0x3f, 0xa1, 0x6c, 0xe8, 0x05, 0x40, 0x8b, 0x00, 0x98, 0x17, + 0xd1, 0x99, 0xe1, 0x04, 0x69, 0x17, 0xbe, 0x8f, 0x09, 0x04, 0x54, 0xaf, + 0x65, 0x66, 0x57, 0x06, 0x78, 0x19, 0xe4, 0xb2, 0x03, 0x8c, 0xac, 0xa4, + 0xc2, 0xc4, 0xd0, 0x06, 0x78, 0x19, 0x07, 0xd3, 0x7f, 0x68, 0xe3, 0x2f, + 0x37, 0x05, 0xd8, 0x17, 0x20, 0x00, 0x28, 0x03, 0x20, 0x00, 0x14, 0xab, + 0x28, 0x29, 0x33, 0x48, 0x1d, 0x42, 0x28, 0x33, 0x3d, 0x04, 0x88, 0x15, + 0x07, 0x74, 0xff, 0x80, 0x10, 0x0e, 0x90, 0x7f, 0x10, 0x0e, 0x0c, 0x43, + 0x38, 0x3c, 0x10, 0x00, 0x10, 0x0e, 0x13, 0x30, 0x0e, 0x10, 0x10, 0x10, + 0x08, 0x10, 0x8d, 0x1e, 0xc7, 0x28, 0x17, 0x19, 0x64, 0xa4, 0x82, 0x28, + 0x11, 0xb0, 0x30, 0xfc, 0x30, 0xb7, 0x06, 0x68, 0x17, 0x49, 0xee, 0x2f, + 0x07, 0x37, 0x97, 0x3b, 0x2d, 0x65, 0x28, 0x1b, 0x04, 0xbe, 0x9b, 0x00, + 0x90, 0x7f, 0x6f, 0xfd, 0x2f, 0xb1, 0x7f, 0x97, 0x06, 0xf8, 0x17, 0x91, + 0x11, 0x3d, 0x41, 0x51, 0x13, 0x65, 0x04, 0x89, 0x31, 0xa3, 0x00, 0x78, + 0x17, 0x69, 0xe0, 0x89, 0x65, 0x00, 0x7a, 0x04, 0x4f, 0xb5, 0x00, 0x98, + 0x17, 0xc0, 0x92, 0x19, 0x04, 0xb2, 0x17, 0x70, 0x53, 0xe4, 0x53, 0xc0, + 0x4e, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x78, 0xc7, 0x6c, 0xad, 0xdc, + 0x75, 0xc2, 0x06, 0x78, 0x15, 0x92, 0xff, 0x3b, 0x99, 0x6a, 0x63, 0x81, + 0xeb, 0x06, 0x03, 0xff, 0x7a, 0xfa, 0x63, 0x7d, 0x3a, 0x93, 0x05, 0xb8, + 0x15, 0x00, 0x78, 0x17, 0x18, 0x28, 0x0b, 0x33, 0xab, 0x28, 0x2b, 0x48, + 0x28, 0x35, 0x42, 0x28, 0x2d, 0x4f, 0x04, 0x88, 0x19, 0x07, 0x54, 0xff, + 0x80, 0x10, 0x0e, 0x90, 0x7f, 0x11, 0x10, 0x0f, 0x44, 0x41, 0x3d, 0x11, + 0x00, 0x11, 0x0f, 0x15, 0x31, 0x10, 0x11, 0x11, 0x11, 0x00, 0x11, 0xb2, + 0x1e, 0xde, 0x1f, 0x00, 0x00, 0x1a, 0x8a, 0x28, 0x17, 0xeb, 0x30, 0xaf, + 0x28, 0x17, 0xc4, 0x20, 0x05, 0xde, 0x55, 0x5d, 0x06, 0x34, 0x97, 0x72, + 0x2f, 0x25, 0x75, 0x2f, 0xab, 0x73, 0x2f, 0x2d, 0xeb, 0x06, 0x70, 0x7f, + 0x38, 0x17, 0x06, 0x50, 0x81, 0x4f, 0x4f, 0xa7, 0x61, 0x4f, 0x91, 0x38, + 0x13, 0xd7, 0x05, 0xf1, 0x0d, 0x3f, 0xaf, 0x67, 0x2f, 0xa9, 0x6f, 0x2f, + 0x8f, 0x3f, 0xa5, 0x78, 0x11, 0xdc, 0x05, 0x71, 0x95, 0x70, 0x7f, 0xf3, + 0x2e, 0xab, 0x98, 0x11, 0x05, 0x92, 0x13, 0x0a, 0x4f, 0x00, 0x14, 0x5c, + 0x93, 0x5e, 0x28, 0x83, 0x4b, 0x51, 0x80, 0x06, 0x32, 0xfd, 0x00, 0x00, + 0x74, 0xc7, 0x74, 0xb9, 0xe0, 0x00, 0xcf, 0x20, 0xce, 0x6c, 0xd0, 0x20, + 0x00, 0xfc, 0x7e, 0xc8, 0x06, 0x92, 0xff, 0x3b, 0x93, 0x06, 0x33, 0x81, + 0xd3, 0xff, 0x78, 0x15, 0x32, 0x91, 0xe3, 0xe2, 0x2b, 0xad, 0x04, 0x98, + 0x0f, 0x7f, 0xff, 0x18, 0x04, 0x40, 0x28, 0x0b, 0x43, 0xaa, 0x27, 0xfd, + 0x41, 0x48, 0x13, 0x4f, 0x28, 0x15, 0x3e, 0x48, 0x23, 0x30, 0x8e, 0x28, + 0x2f, 0x42, 0x04, 0x4c, 0x04, 0x88, 0x11, 0x07, 0xb4, 0xff, 0x10, 0x0e, + 0x90, 0x7f, 0x12, 0x00, 0x11, 0x10, 0x0c, 0x0d, 0x0d, 0x12, 0x12, 0x10, + 0x00, 0x16, 0x0e, 0x11, 0x12, 0x12, 0x12, 0x12, 0x2d, 0x02, 0x25, 0x2b, + 0x4a, 0x00, 0x00, 0x1b, 0x28, 0x17, 0xf4, 0x0a, 0x30, 0xa1, 0x30, 0xce, + 0x20, 0x05, 0xa9, 0x06, 0x68, 0x17, 0x76, 0xae, 0x2e, 0xa1, 0x6e, 0x2f, + 0xb1, 0x76, 0x2f, 0xb5, 0x0e, 0x10, 0x7f, 0xf8, 0x17, 0x77, 0xbc, 0x61, + 0x0d, 0x77, 0x05, 0x61, 0x0d, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0x00, + 0x58, 0x17, 0x76, 0x00, 0x40, 0xe1, 0x05, 0x62, 0x13, 0x0a, 0x4f, 0x07, + 0x4e, 0xfa, 0x8b, 0x30, 0x83, 0x6c, 0x06, 0x58, 0x15, 0x38, 0x17, 0x14, + 0xbc, 0x78, 0xb1, 0x3a, 0xf4, 0xbc, 0x06, 0x58, 0x15, 0x07, 0xf3, 0x7f, + 0x06, 0x38, 0x17, 0x32, 0x28, 0x0d, 0x3d, 0x3c, 0x04, 0x3e, 0x20, 0x07, + 0x06, 0x38, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x13, 0x12, + 0x00, 0x11, 0x0d, 0x0e, 0x0e, 0x13, 0x13, 0x11, 0x17, 0x00, 0x0d, 0x12, + 0x13, 0x13, 0x13, 0x13, 0x87, 0x28, 0x00, 0x24, 0x1d, 0x00, 0x00, 0x1c, + 0x64, 0xab, 0x30, 0x01, 0xd0, 0x30, 0xeb, 0x30, 0xc0, 0x30, 0xfb, 0x40, + 0x07, 0x40, 0xab, 0x20, 0x0b, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x56, 0xaa, + 0x05, 0x7f, 0xba, 0x4b, 0x2f, 0x2b, 0x62, 0x2f, 0x2f, 0x72, 0x4e, 0xa9, + 0x6e, 0x0b, 0x00, 0x2d, 0x00, 0x42, 0x2f, 0x3d, 0x6c, 0x2f, 0xc3, 0x30, + 0x13, 0xad, 0x06, 0x10, 0x7f, 0x6f, 0xe0, 0x81, 0x69, 0x2f, 0x4f, 0x04, + 0xff, 0xaf, 0x70, 0x2f, 0x99, 0xb6, 0x38, 0x1d, 0x69, 0x4d, 0x31, 0x01, + 0x30, 0x91, 0x6e, 0x04, 0x20, 0x7f, 0x50, 0x81, 0x63, 0xdd, 0x29, 0xa5, + 0x78, 0x1d, 0x43, 0x00, 0x81, 0x1b, 0x30, 0x25, 0x31, 0x1b, 0x61, 0x03, + 0x60, 0xff, 0x78, 0xfa, 0xe0, 0x7d, 0x38, 0xa1, 0x01, 0x11, 0x99, 0x03, + 0x10, 0x7d, 0x00, 0x00, 0x61, 0x00, 0x53, 0xf4, 0x5d, 0x14, 0x5c, 0xbe, + 0x8f, 0x2d, 0x42, 0x00, 0x30, 0x07, 0x61, 0x53, 0x14, 0x5c, 0x05, 0xd2, + 0xff, 0x74, 0x00, 0xce, 0x14, 0xbc, 0x74, 0xb9, 0x14, 0xb5, 0x78, 0x00, + 0xb1, 0x1c, 0xbc, 0x74, 0xce, 0x74, 0xb9, 0x20, 0x01, 0x00, 0xf5, 0xac, + 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x53, 0x7f, 0x5a, 0xeb, 0x00, 0x02, 0xfd, + 0xeb, 0x04, 0xef, 0xb1, 0x52, 0x63, 0xe1, 0x63, 0xff, 0x61, 0xfd, 0xa2, + 0x61, 0x30, 0x13, 0x32, 0x61, 0x78, 0x2b, 0xd2, 0x25, 0x03, 0x78, 0x31, + 0x1a, 0x28, 0x15, 0x41, 0x31, 0x28, 0x19, 0x40, 0x04, 0x34, 0x04, 0x38, + 0x48, 0x1f, 0x15, 0x2d, 0x00, 0x11, 0x28, 0x29, 0x3b, 0x48, 0x23, 0x40, + 0xa8, 0x2b, 0x11, 0x40, 0x04, 0x35, 0x28, 0x39, 0x3f, 0x04, 0x43, 0x48, + 0x33, 0x70, 0x38, 0x48, 0x43, 0x0c, 0x14, 0xff, 0x10, 0x0d, 0xf0, 0x7f, + 0x14, 0x13, 0x12, 0x45, 0x00, 0x3e, 0x3f, 0x14, 0x14, 0x16, 0x0b, 0x0f, + 0x13, 0x00, 0x14, 0x14, 0x14, 0x14, 0xeb, 0x1e, 0x04, 0x1f, 0x10, 0x00, + 0x00, 0x1d, 0x28, 0x17, 0xea, 0x30, 0xfc, 0x30, 0x01, 0xcb, 0x30, 0xf3, + 0x30, 0xb0, 0x30, 0xe9, 0x20, 0x09, 0x3a, 0xc9, 0x30, 0x05, 0xdd, 0x39, + 0x38, 0x17, 0x37, 0x11, 0x6e, 0x48, 0x15, 0x67, 0xb4, 0x2c, 0x2d, 0x61, + 0x2e, 0xb3, 0x0d, 0x90, 0x7f, 0x4f, 0x48, 0x11, 0x61, 0x00, 0x1d, 0x73, + 0x00, 0x74, 0x68, 0x13, 0x05, 0xd1, 0x0d, 0x7f, 0xaf, 0x6f, 0x2f, 0xaf, + 0xf7, 0x3f, 0xab, 0x58, 0x11, 0x05, 0x91, 0x95, 0x70, 0x7f, 0xf3, 0x2e, + 0xb3, 0xb8, 0x11, 0x00, 0x12, 0x13, 0x80, 0x04, 0x5e, 0xcd, 0xa0, 0x52, + 0xcc, 0x91, 0x81, 0x5b, 0x3c, 0x18, 0x68, 0xd2, 0x52, 0x05, 0xd2, 0xf7, + 0x7f, 0xff, 0x7c, 0xce, 0xac, 0x00, 0xb9, 0xcc, 0xb2, 0xf8, 0xad, 0x7c, + 0xb7, 0xdc, 0x06, 0xb4, 0x20, 0x00, 0xfc, 0xc8, 0x05, 0xff, 0xb2, 0x08, + 0x53, 0x7f, 0x6f, 0xde, 0x88, 0x0d, 0x32, 0x9b, 0xe3, 0x2f, 0x4d, 0x03, + 0x78, 0x07, 0x00, 0x38, 0x17, 0x37, 0xe5, 0x3d, 0xad, 0x48, 0x15, 0x33, + 0x28, 0x1f, 0x30, 0x28, 0x21, 0x98, 0x0d, 0x3e, 0x48, 0x05, 0x47, 0x30, + 0x28, 0x1f, 0x42, 0x04, 0x4c, 0x03, 0x28, 0x07, 0x0f, 0xf4, 0xff, 0x10, + 0x06, 0xf0, 0xff, 0x00, 0x15, 0x14, 0x13, 0x0f, 0x10, 0x0f, 0x15, 0x15, + 0x00, 0x17, 0x18, 0x10, 0x14, 0x15, 0x15, 0x15, 0x15, 0x01, 0xe8, 0x26, + 0x96, 0x0e, 0x00, 0x00, 0x1e, 0x28, 0x17, 0x00, 0xeb, 0x30, 0xe0, 0x30, + 0xa4, 0x30, 0xaf, 0x30, 0xc7, 0x05, 0xdd, 0x27, 0xd8, 0x17, 0x6d, 0x00, + 0x79, 0x2f, 0x9f, 0x06, 0x35, 0x97, 0x70, 0x7f, 0x5e, 0x6f, 0x2f, 0xb3, + 0x6b, 0x4f, 0x8b, 0x05, 0xd6, 0x1d, 0x9f, 0xaf, 0x3f, 0xad, 0x6b, 0x8d, + 0x88, 0x1b, 0x6d, 0x00, 0xfc, 0x2f, 0xbb, 0x50, 0x91, 0x6e, 0x05, 0x40, + 0x7f, 0xf4, 0xdf, 0xb1, 0x38, 0x1d, 0x3d, 0xcb, 0x31, 0x9b, 0x75, 0x2f, + 0xc7, 0x63, 0x00, 0x7f, 0x68, 0x03, 0x6f, 0xa1, 0x00, 0x30, 0xff, 0xbe, + 0x09, 0xd8, 0x1d, 0x30, 0x7d, 0x31, 0x97, 0x04, 0x10, 0x79, 0x80, 0x5f, + 0xff, 0x61, 0x53, 0x14, 0x5c, 0x85, 0x68, 0x4b, 0x60, 0x51, 0x06, 0x52, + 0xfd, 0x38, 0x17, 0xf8, 0xbb, 0x6c, 0xd0, 0x20, 0x01, 0x00, 0xf5, 0xac, + 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x92, 0xff, 0xd8, 0x32, 0xfd, 0x32, 0xff, + 0xeb, 0x05, 0xe9, 0x1c, 0x72, 0x63, 0xfa, 0x00, 0x71, 0xf8, 0x23, 0x81, + 0x32, 0x61, 0x78, 0x11, 0xd2, 0x15, 0x04, 0x78, 0x17, 0x20, 0x04, 0x35, + 0x8a, 0x28, 0x05, 0x3f, 0x04, 0x43, 0x47, 0xff, 0x38, 0x48, 0x0f, 0x20, + 0x8b, 0x68, 0x2d, 0x3c, 0x04, 0x4b, 0x28, 0x1f, 0x38, 0x28, 0x1f, 0x0d, + 0x14, 0xff, 0x80, 0x10, 0x0e, 0x70, 0x7f, 0x16, 0x15, 0x14, 0x46, 0x3f, + 0x40, 0x16, 0x00, 0x16, 0x18, 0x0d, 0x32, 0x15, 0x16, 0x16, 0x16, 0x00, + 0x16, 0xef, 0x20, 0x7a, 0x1f, 0x00, 0x00, 0x1f, 0x86, 0x48, 0x17, 0xfc, + 0x30, 0xac, 0x30, 0x06, 0x5d, 0x2d, 0x7f, 0xaf, 0x75, 0xfa, 0x2f, 0xa9, + 0x04, 0x75, 0xf9, 0x01, 0x3d, 0x2f, 0x38, 0x15, 0x06, 0x50, 0x81, 0x4f, + 0x48, 0x11, 0x61, 0x0e, 0x00, 0x73, 0x00, 0x74, 0x8f, 0xa7, 0x05, 0xb1, + 0x0d, 0x7f, 0xaf, 0x6f, 0xfb, 0x2f, 0xaf, 0x3f, 0xab, 0x58, 0x11, 0x05, + 0x91, 0x95, 0x70, 0x7f, 0xf3, 0x2e, 0xb1, 0xd8, 0x11, 0x81, 0x05, 0x52, + 0x13, 0x61, 0x53, 0x62, 0x53, 0xa0, 0x52, 0x06, 0x72, 0xfd, 0x80, 0x38, + 0x17, 0xe8, 0xb8, 0x00, 0xac, 0x20, 0x00, 0xfc, 0x5f, 0xc8, 0x06, 0xb3, + 0x7f, 0x6f, 0x4f, 0x99, 0x06, 0x33, 0x81, 0xb3, 0xff, 0x78, 0x11, 0x32, + 0x8f, 0x78, 0xe3, 0x2b, 0xa9, 0x04, 0x78, 0x0b, 0xbf, 0xf5, 0x58, 0x01, + 0x43, 0x04, 0x36, 0xd5, 0x28, 0x1d, 0x38, 0x13, 0x4f, 0x28, 0x15, 0x3e, + 0x48, 0x23, 0x30, 0x28, 0x2f, 0x1c, 0x42, 0x04, 0x4c, 0x04, 0xa8, 0x13, + 0x07, 0x94, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x17, 0x16, 0x00, 0x15, 0x10, + 0x11, 0x10, 0x17, 0x17, 0x19, 0x19, 0x00, 0x11, 0x16, 0x17, 0x17, 0x17, + 0x17, 0xca, 0x26, 0x30, 0xcd, 0x19, 0x2b, 0x2d, 0x28, 0x17, 0xe0, 0x30, + 0xc1, 0x30, 0x00, 0xe3, 0x30, 0xc4, 0x30, 0xab, 0x30, 0x30, 0x57, 0x6a, + 0xb9, 0x05, 0xff, 0x2e, 0x4f, 0xaf, 0x6d, 0x4e, 0x8d, 0x61, 0x27, 0x19, + 0x6b, 0xde, 0x06, 0x08, 0x1d, 0x50, 0x7f, 0x74, 0x06, 0x80, 0x81, 0xb7, + 0x97, 0x5f, 0x23, 0x30, 0x8d, 0x73, 0xaa, 0x05, 0x81, 0x11, 0x54, 0x2f, + 0xaf, 0x72, 0x2d, 0x9f, 0x69, 0x28, 0x97, 0x6f, 0xac, 0x40, 0x07, 0x6f, + 0x6f, 0xb1, 0x6c, 0x48, 0xaf, 0x70, 0x93, 0x0d, 0x01, 0xf0, 0x04, 0x51, + 0x9f, 0x00, 0x90, 0x7f, 0x71, 0x0d, 0x04, 0xd2, 0x1b, 0xd8, 0x52, 0xdf, + 0x5b, 0x00, 0xa0, 0x52, 0xb9, 0x8f, 0x86, 0x75, 0x3a, 0x53, 0x80, 0x06, + 0x3d, 0xb0, 0x84, 0xce, 0x28, 0xcc, 0x74, 0xce, 0x20, 0x06, 0x00, 0xc0, + 0xc9, 0x29, 0xbc, 0x06, 0x7e, 0x2f, 0x52, 0x71, 0x6a, 0xeb, 0x06, 0x43, + 0x81, 0x00, 0x13, 0xff, 0x38, 0x1d, 0x74, 0xa2, 0x95, 0xf3, 0x62, 0x95, + 0x04, 0x58, 0x25, 0x8a, 0x38, 0x17, 0x3c, 0x04, 0x47, 0x28, 0x1d, 0x42, + 0x48, 0x19, 0x38, 0x22, 0x04, 0x39, 0x28, 0x19, 0x3a, 0x04, 0x40, 0x28, + 0x2f, 0x39, 0xe0, 0x04, 0xe8, 0x13, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x90, + 0x7f, 0x18, 0x17, 0x16, 0x37, 0x4d, 0x00, 0x4d, 0x18, 0x18, 0x1a, 0x1a, + 0x12, 0x17, 0x18, 0x00, 0x18, 0x18, 0x18, 0xb3, 0x25, 0xd1, 0x70, 0x00, + 0x28, 0x00, 0x21, 0x28, 0x17, 0xe9, 0x48, 0x17, 0xa4, 0x30, 0xfb, 0x80, + 0x28, 0x1f, 0xa7, 0x30, 0xeb, 0x30, 0xb1, 0x30, 0xb9, 0x01, 0x30, 0x71, + 0x51, 0x8c, 0x54, 0xfd, 0x56, 0x05, 0x7f, 0xaf, 0x60, 0x72, 0x2f, 0xb3, + 0x58, 0x19, 0x79, 0x00, 0x2d, 0x00, 0x43, 0xd7, 0x28, 0x23, 0x36, 0xab, + 0x6b, 0x2e, 0xc9, 0x73, 0x2f, 0x47, 0x05, 0x50, 0x7f, 0x78, 0x19, 0x05, + 0xef, 0x00, 0xe9, 0x00, 0x76, 0x2f, 0x3d, 0x2d, 0x27, 0x31, 0xda, 0x38, + 0xad, 0xb0, 0x89, 0x69, 0x2f, 0x5b, 0x04, 0x3f, 0xaf, 0x70, 0x2f, 0x99, + 0x62, 0xbd, 0x2f, 0x9f, 0x69, 0x29, 0x17, 0x5f, 0xab, 0x50, 0x91, 0x78, + 0x1d, 0x69, 0x40, 0x8d, 0xdb, 0x58, 0x2b, 0xf0, 0x8f, 0x6e, 0x03, 0x80, + 0x7f, 0x50, 0x81, 0x63, 0x88, 0x0b, 0x31, 0x95, 0xb3, 0x38, 0x0d, 0x6a, + 0x2f, 0xd1, 0x51, 0x11, 0x0c, 0x01, 0xd1, 0x0d, 0x03, 0x3f, 0xcd, 0xbb, + 0x50, 0xff, 0xfa, 0xc0, 0x7d, 0x98, 0x15, 0x72, 0x19, 0xe1, 0x22, 0x19, + 0x70, 0x85, 0xc0, 0xd2, 0x1f, 0x02, 0xf0, 0x85, 0x61, 0x53, 0xc9, 0x62, + 0x70, 0x60, 0x00, 0x36, 0x80, 0x2b, 0x59, 0x2d, 0x00, 0x07, 0x52, 0x02, + 0x14, 0x5c, 0x4b, 0x51, 0xaf, 0x65, 0x05, 0x92, 0xfd, 0x00, 0x00, 0x00, + 0x74, 0xce, 0x7c, 0xb7, 0x28, 0xcc, 0x08, 0x00, 0xc6, 0xf4, 0xbc, 0xb4, + 0xcc, 0x74, 0xb9, 0x00, 0x10, 0xcf, 0xa4, 0xc2, 0x20, 0x11, 0xc5, 0x20, + 0x00, 0xf5, 0x06, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x05, 0x93, 0x7f, 0x78, + 0x19, 0x6a, 0xed, 0x62, 0x6b, 0x31, 0xf5, 0xb2, 0xf9, 0xeb, 0x06, 0x83, + 0xff, 0x38, 0x27, 0x72, 0x00, 0x02, 0x25, 0xf0, 0x03, 0x78, 0x25, 0x38, + 0x17, 0x38, 0x03, 0x38, 0x19, 0x35, 0x04, 0x32, 0x04, 0x05, 0x3e, 0x04, + 0x2d, 0x00, 0x27, 0x20, 0x09, 0x40, 0x28, 0x23, 0x62, 0x35, 0x28, 0x29, + 0x38, 0x2b, 0x30, 0x04, 0x4f, 0x28, 0x2b, 0x40, 0x80, 0x40, 0x0f, 0x3f, + 0x04, 0x43, 0x04, 0x31, 0x04, 0x3b, 0xf0, 0x28, 0x3f, 0x30, 0x17, 0x0b, + 0x94, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x19, 0x18, 0x17, 0x47, 0x00, 0x48, + 0x41, 0x19, 0x19, 0x1b, 0x1b, 0x13, 0x18, 0x00, 0x19, 0x19, 0x19, 0x19, + 0x71, 0x1f, 0xe6, 0x1d, 0x10, 0x00, 0x00, 0x22, 0x28, 0x17, 0xec, 0x30, + 0xea, 0x30, 0x7d, 0xa2, 0x05, 0xa8, 0x09, 0x00, 0x38, 0x17, 0x3e, 0x9d, + 0x03, 0x56, 0x67, 0x01, 0xff, 0xec, 0x43, 0x48, 0x97, 0x7e, 0xe9, 0x47, + 0x95, 0x04, 0x17, 0xf5, 0x02, 0x98, 0x17, 0x51, 0x11, 0x03, 0x17, 0xf7, + 0x02, 0x58, 0x17, 0x64, 0xbe, 0x2f, 0xbf, 0x20, 0x61, 0x1b, 0x04, 0xd1, + 0x9b, 0x00, 0x98, 0x17, 0x05, 0x30, 0x7d, 0x38, 0x17, 0x2f, 0x04, 0x7d, + 0x29, 0x52, 0x3f, 0x96, 0x06, 0x72, 0xff, 0x74, 0xce, 0x0f, 0x10, 0xb8, + 0xac, 0xb9, 0x05, 0xb8, 0x09, 0x00, 0x93, 0x7f, 0x04, 0x77, 0xfb, 0x01, + 0x73, 0x7f, 0xea, 0x3a, 0x91, 0x04, 0xb8, 0x03, 0x00, 0x3f, 0xfd, 0x20, + 0x00, 0x27, 0xed, 0x20, 0x68, 0x2d, 0x35, 0xb8, 0x47, 0xff, 0x4f, 0x03, + 0x27, 0xfd, 0x08, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x19, 0x0b, + 0x00, 0x48, 0x40, 0x39, 0x1a, 0x1a, 0x1c, 0x0e, 0x33, 0x00, 0x19, 0x1a, + 0x1a, 0x1a, 0x1a, 0xef, 0x2b, 0x6a, 0x00, 0x18, 0x00, 0x00, 0x23, 0x64, + 0xb1, 0x30, 0xe1, 0x00, 0x30, 0xed, 0x30, 0xf4, 0x30, 0xa9, 0x30, 0xde, + 0x62, 0x5d, 0x06, 0x27, 0x96, 0x2f, 0xaf, 0x65, 0x00, 0x6d, 0x4f, 0x95, + 0x6f, 0xd5, 0x4f, 0xa7, 0x0d, 0xf0, 0x7f, 0x4f, 0x4f, 0xa7, 0x61, 0x2f, + 0xff, 0x74, 0x4f, 0xa7, 0xb5, 0x91, 0x0d, 0x77, 0x05, 0x41, 0x0d, 0x3f, + 0xaf, 0x67, 0x2f, 0xfb, 0x6f, 0x28, 0x81, 0xf6, 0x3f, 0xa5, 0x58, 0x11, + 0x05, 0x91, 0x95, 0x70, 0x7f, 0xf3, 0x29, 0x01, 0x78, 0x11, 0x4b, 0xc0, + 0x29, 0xa7, 0x05, 0x72, 0x13, 0x4b, 0x51, 0xa6, 0x9e, 0x57, 0x7f, 0x30, + 0x83, 0x6c, 0x06, 0x52, 0xfd, 0x2f, 0xff, 0xcf, 0x54, 0xba, 0x5c, 0x01, + 0xb8, 0xf4, 0xbc, 0x20, 0x00, 0xfc, 0xc8, 0x0f, 0x33, 0x7f, 0xde, 0x78, + 0x19, 0x32, 0x93, 0xe3, 0x24, 0x13, 0x04, 0xb8, 0x13, 0x45, 0x17, 0x28, + 0x17, 0x3c, 0x83, 0x28, 0x1b, 0x40, 0x04, 0x3e, 0x04, 0x32, 0x28, 0x21, + 0x38, 0x17, 0x54, 0x4f, 0x28, 0x19, 0x3e, 0x48, 0x27, 0x30, 0x28, 0x33, + 0x42, 0x04, 0x70, 0x4c, 0x04, 0xa8, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, + 0xf0, 0xff, 0x1b, 0x1a, 0x18, 0x11, 0x00, 0x12, 0x11, 0x1b, 0x1b, 0x1d, + 0x1c, 0x14, 0x1a, 0x00, 0x1b, 0x1b, 0x1b, 0x1b, 0x5e, 0x27, 0x38, 0x3d, + 0x01, 0x00, 0x00, 0x24, 0x64, 0xcf, 0x30, 0xd0, 0x28, 0x17, 0x00, 0xd5, + 0x30, 0xb9, 0x30, 0xaf, 0x30, 0x30, 0x57, 0x45, 0xb9, 0x06, 0x0f, 0x32, + 0x4b, 0x00, 0x68, 0x2f, 0xb1, 0x62, 0x4f, 0xb5, 0xbe, 0x38, 0x19, 0x73, + 0x2f, 0x33, 0x0d, 0xb0, 0x7f, 0xb7, 0x97, 0x3f, 0xa1, 0xb1, 0x0d, 0x77, + 0xab, 0x05, 0x21, 0x0d, 0x54, 0x49, 0x93, 0x72, 0x2f, 0xab, 0x74, 0x29, + 0x99, 0x30, 0x07, 0xfd, 0x35, 0x9b, 0x58, 0x1d, 0xd0, 0x8d, 0x04, 0x51, + 0x9b, 0x00, 0x70, 0x7f, 0x38, 0xa3, 0x4a, 0x42, 0x19, 0x40, 0xe1, 0x04, + 0xc2, 0x19, 0xc8, 0x54, 0xf4, 0x5d, 0x57, 0x7f, 0x00, 0x2b, 0x59, 0xaf, + 0x65, 0x4b, 0x51, 0xb9, 0x8f, 0x08, 0x86, 0x75, 0x3a, 0x53, 0x05, 0xdf, + 0xb1, 0x58, 0xd5, 0x14, 0x00, 0xbc, 0x6d, 0xb8, 0xa4, 0xc2, 0x6c, 0xd0, + 0x20, 0x07, 0x00, 0xc0, 0xc9, 0x29, 0xbc, 0x06, 0x1f, 0xaf, 0x08, 0x13, + 0x7f, 0x38, 0x1b, 0x5a, 0x74, 0xa2, 0x97, 0xf3, 0x62, 0x97, 0x04, 0x38, + 0x23, 0x25, 0x28, 0x07, 0x31, 0xc5, 0x28, 0x0b, 0x98, 0x17, 0x38, 0x04, + 0x39, 0x28, 0x17, 0x3a, 0x28, 0x29, 0x70, 0x30, 0x20, 0x09, 0x10, 0x04, + 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x1c, 0x1b, 0x19, 0x36, 0x00, 0x4f, + 0x4c, 0x1c, 0x1c, 0x0b, 0x1d, 0x4c, 0x1b, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, + 0x7a, 0x22, 0x0c, 0x60, 0xd0, 0x23, 0x15, 0x28, 0x17, 0xab, 0x28, 0x13, + 0x71, 0x51, 0x8c, 0x54, 0x35, 0xfd, 0x56, 0x06, 0x5c, 0xaf, 0x38, 0x17, + 0x6b, 0x4f, 0x31, 0x73, 0x2e, 0xb7, 0x71, 0x61, 0x06, 0xe0, 0x7f, 0x05, + 0xf9, 0x18, 0x3f, 0xaf, 0x70, 0x00, 0x75, 0x29, 0x19, 0x7b, 0x6c, 0x2f, + 0xb5, 0x35, 0x13, 0x58, 0x1b, 0xb0, 0x91, 0x6e, 0x05, 0x40, 0x7f, 0x50, + 0x81, 0x7b, 0x63, 0x29, 0xa5, 0x78, 0x17, 0x05, 0x31, 0x9b, 0x50, 0xff, + 0xfa, 0xe0, 0x7d, 0x78, 0x15, 0xc0, 0x52, 0x17, 0x04, 0xb2, 0x15, 0xc8, + 0x54, 0x61, 0x53, 0xaf, 0x65, 0x80, 0x06, 0x92, 0xff, 0x58, 0xd5, 0x74, + 0xce, 0xa4, 0xc2, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, + 0x06, 0x13, 0x81, 0xab, 0xf2, 0x6d, 0xeb, 0x06, 0x08, 0x97, 0x61, 0x22, + 0x73, 0xe1, 0x83, 0xfd, 0x38, 0x13, 0x71, 0x72, 0x00, 0x02, 0x13, 0x04, + 0x38, 0x11, 0x5f, 0xff, 0x20, 0x04, 0x35, 0x28, 0x0d, 0x15, 0x3f, 0x04, + 0x43, 0x28, 0x1d, 0x3b, 0x28, 0x13, 0x3a, 0x28, 0x27, 0x6b, 0x20, 0x48, + 0x2d, 0x30, 0x09, 0x41, 0x28, 0x25, 0x4f, 0x04, 0xc8, 0x1b, 0x07, 0xf4, + 0xff, 0x80, 0x10, 0x0d, 0xf0, 0x7f, 0x1d, 0x1c, 0x1a, 0x42, 0x42, 0x3e, + 0x1d, 0x00, 0x1d, 0x0c, 0x0c, 0x3b, 0x1c, 0x1d, 0x1d, 0x1d, 0x00, 0x1d, + 0x32, 0x26, 0x01, 0x41, 0x00, 0x00, 0x26, 0x80, 0x28, 0x17, 0xf3, 0x30, + 0xc6, 0x30, 0xa3, 0x30, 0xfb, 0x20, 0x30, 0xde, 0x20, 0x09, 0xb7, 0x30, + 0xea, 0x81, 0xbb, 0x1a, 0x6c, 0xa1, 0x7b, 0x05, 0x9d, 0x35, 0x5f, 0xaf, + 0x6e, 0x2e, 0xad, 0x79, 0x0d, 0x00, 0x2d, 0x00, 0x4d, 0x40, 0x0b, 0x38, + 0x1f, 0x79, 0x06, 0x20, 0x7f, 0x56, 0x73, 0xc0, 0x81, 0x73, 0x05, 0x4e, + 0x38, 0x41, 0x28, 0x13, 0x3f, 0xa9, 0x6e, 0xbf, 0x2f, 0xad, 0x6d, 0x4f, + 0xbb, 0x37, 0x8f, 0x35, 0x19, 0x30, 0x81, 0x5f, 0x39, 0x30, 0x13, 0xea, + 0x5f, 0xbb, 0x31, 0x27, 0x38, 0x27, 0x20, 0x28, 0x49, 0x6e, 0x2f, 0xd5, + 0x20, 0xd6, 0x81, 0x31, 0x02, 0x78, 0x3d, 0x43, 0x2f, 0xa9, 0x72, 0x28, + 0x0d, 0x30, 0x81, 0x64, 0xff, 0x4e, 0x35, 0x5f, 0xb1, 0xd0, 0x97, 0x5f, + 0xc3, 0x38, 0x2b, 0x90, 0x87, 0x39, 0xc3, 0xb1, 0xb1, 0xad, 0x02, 0x59, + 0xd1, 0x44, 0x41, 0x69, 0x74, 0x6e, 0x19, 0x30, 0x79, 0x61, 0x41, 0x11, + 0x7c, 0xf3, 0xc0, 0x79, 0x78, 0x27, 0x50, 0x77, 0xb2, 0x27, 0x02, 0xff, + 0xdd, 0x49, 0x6c, 0x00, 0x79, 0x72, 0x2d, 0x00, 0xfc, 0x66, 0x7f, 0x89, + 0xe0, 0x32, 0xf9, 0x05, 0x92, 0xf7, 0x7f, 0xff, 0x5c, 0xd5, 0xf0, 0xd2, + 0xcc, 0x20, 0xb9, 0xdc, 0x28, 0x19, 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xde, + 0x06, 0x08, 0x19, 0x92, 0x57, 0x6f, 0xc3, 0x7f, 0x05, 0x78, 0x1f, 0x06, + 0xf3, 0xff, 0x38, 0x01, 0x3d, 0x00, 0x04, 0x42, 0x04, 0x4b, 0x04, 0x2d, + 0x00, 0x1c, 0xd4, 0x40, 0x0b, 0x38, 0x0b, 0x39, 0x28, 0x2b, 0x3a, 0x40, + 0x07, 0x20, 0x00, 0x14, 0x30, 0x04, 0x32, 0x20, 0x1f, 0x3e, 0x20, 0x25, + 0x3e, 0x04, 0x55, 0x3c, 0x20, 0x2b, 0x4b, 0x40, 0x15, 0x3e, 0x28, 0x41, + 0x40, 0x28, 0x4d, 0x70, 0x33, 0x02, 0xe8, 0x35, 0x07, 0xb4, 0xff, 0x10, + 0x0e, 0x30, 0x7f, 0x1e, 0x1d, 0x1b, 0x01, 0x00, 0x01, 0x03, 0x1e, 0x1e, + 0x0d, 0x1e, 0x4d, 0x1d, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x60, 0x2b, 0x11, + 0x31, 0x00, 0x00, 0x00, 0x27, 0x64, 0xad, 0x30, 0xfc, 0x30, 0x03, 0xed, + 0x30, 0xd5, 0x30, 0xde, 0x5d, 0x06, 0x3d, 0x2d, 0x3f, 0xaf, 0x8d, 0x36, + 0x97, 0x6f, 0x00, 0x76, 0x06, 0x50, 0x7e, 0x07, 0x00, 0x7f, 0x4f, 0x4f, + 0xa7, 0xb6, 0x3f, 0x91, 0x74, 0x4f, 0xa1, 0x51, 0x0d, 0x77, 0x05, 0x8e, + 0xba, 0x3f, 0xaf, 0x67, 0xbf, 0x48, 0x0b, 0x6e, 0x4f, 0xa5, 0x57, 0xfd, + 0x05, 0x91, 0x95, 0x70, 0x7f, 0x38, 0x07, 0x78, 0x01, 0x10, 0x4b, 0x00, + 0xed, 0x05, 0x82, 0x13, 0xfa, 0x57, 0x1b, 0x6d, 0x20, 0x2b, 0x59, 0x06, + 0x72, 0xfd, 0x00, 0x00, 0xa4, 0xd0, 0x5c, 0x01, 0xb8, 0x04, 0xd5, 0x20, + 0x00, 0xfc, 0xc8, 0x06, 0x73, 0x7f, 0xc6, 0x05, 0x91, 0x6b, 0x00, 0xd3, + 0xff, 0x20, 0x00, 0x28, 0x4b, 0x0f, 0x32, 0x8d, 0xe3, 0xaa, 0x2b, 0x29, + 0x29, 0x05, 0x4f, 0x39, 0x1a, 0x28, 0x05, 0x40, 0x27, 0xf5, 0x32, 0x88, + 0x48, 0x09, 0x30, 0x04, 0x4f, 0x47, 0xf3, 0x31, 0x04, 0x3b, 0xae, 0x28, + 0x2f, 0x41, 0x28, 0x2f, 0x4c, 0x02, 0xe7, 0xf7, 0x10, 0x00, 0xf4, 0xff, + 0x10, 0x06, 0xf0, 0xff, 0x1f, 0x00, 0x1e, 0x1c, 0x12, 0x13, 0x12, 0x1f, + 0x1f, 0x1e, 0x00, 0x1f, 0x15, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0xab, 0x00, + 0x29, 0x4e, 0x23, 0x00, 0x00, 0x28, 0x64, 0xb3, 0x00, 0x30, 0xdf, 0x30, + 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x7b, 0x56, 0x06, 0x78, 0x17, 0x3f, 0x27, + 0x03, 0x1d, 0xf7, 0x02, 0xf0, 0x7f, 0x73, 0x06, 0x68, 0x97, 0x37, 0x97, + 0x63, 0x70, 0x2f, 0xfd, 0x38, 0x1d, 0x69, 0x00, 0x6b, 0x48, 0x1b, 0x05, + 0xb1, 0x11, 0xde, 0x90, 0x7f, 0x50, 0x81, 0x63, 0x2f, 0xff, 0x98, 0x1d, + 0x05, 0x11, 0x9b, 0x50, 0xff, 0xfa, 0xe1, 0xe0, 0x7d, 0x58, 0x1d, 0x05, + 0x32, 0x19, 0xd1, 0x79, 0x73, 0x7c, 0x06, 0xb2, 0xff, 0x00, 0x54, 0xcf, + 0xf8, 0xbb, 0x20, 0x00, 0xf5, 0xac, 0x0f, 0x54, 0xd6, 0x6d, 0xad, 0x0e, + 0xb3, 0x7f, 0x78, 0x15, 0xd2, 0x0b, 0x05, 0x18, 0x1b, 0x16, 0x20, 0x04, + 0x35, 0x28, 0x11, 0x3f, 0x2f, 0xf9, 0x38, 0x0b, 0x38, 0xa3, 0x48, 0x1b, + 0x20, 0x28, 0x2d, 0x3e, 0x04, 0x3c, 0x28, 0x31, 0x0d, 0x94, 0xff, 0x80, + 0x10, 0x0e, 0x70, 0x7f, 0x20, 0x1f, 0x1d, 0x49, 0x43, 0x42, 0x20, 0x00, + 0x20, 0x21, 0x20, 0x34, 0x1f, 0x20, 0x20, 0x20, 0x00, 0x20, 0xda, 0x2b, + 0x22, 0x24, 0x00, 0x00, 0x29, 0x80, 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x30, + 0xed, 0x30, 0xde, 0x7b, 0x30, 0x06, 0x5d, 0x33, 0x38, 0x17, 0x3f, 0x2b, + 0x3f, 0xb3, 0x6d, 0x2f, 0x37, 0x0d, 0xf0, 0x7f, 0x5e, 0x4f, 0x48, 0x11, + 0x61, 0x41, 0x03, 0x58, 0x13, 0x05, 0xd1, 0x0d, 0x7f, 0xaf, 0x6f, 0xfb, + 0x2f, 0xaf, 0x3f, 0xab, 0x98, 0x11, 0x05, 0x51, 0x95, 0x70, 0x7f, 0xf3, + 0x20, 0x7f, 0xb8, 0x11, 0xa0, 0x92, 0x13, 0xe1, 0x04, 0xe8, 0x17, 0xaf, + 0x65, 0x79, 0x72, 0x57, 0x10, 0x7f, 0x6c, 0x9a, 0x06, 0x52, 0xff, 0x54, + 0xcf, 0xa4, 0xc2, 0x00, 0xb8, 0xd2, 0x5c, 0xb8, 0xc8, 0xb9, 0x20, 0x00, + 0x3b, 0xfc, 0xc8, 0x0f, 0x13, 0x7f, 0x78, 0x1f, 0x32, 0x93, 0xe3, 0x2f, + 0x47, 0x04, 0xf8, 0x19, 0x82, 0x38, 0x01, 0x41, 0x04, 0x42, 0x04, 0x40, + 0x48, 0x09, 0x41, 0xaa, 0x48, 0x17, 0x4f, 0x28, 0x19, 0x3e, 0x48, 0x27, + 0x30, 0x40, 0x1b, 0x4c, 0xe0, 0x04, 0xa8, 0x1f, 0x0e, 0xf4, 0xff, 0x10, + 0x06, 0xf0, 0xff, 0x21, 0x20, 0x1e, 0x13, 0x14, 0x00, 0x13, 0x21, 0x21, + 0x22, 0x21, 0x16, 0x20, 0x21, 0x00, 0x21, 0x21, 0x21, 0x14, 0x29, 0x1b, + 0x1d, 0x00, 0x02, 0x00, 0x2a, 0x64, 0xaf, 0x30, 0xe9, 0x28, 0x19, 0xce, + 0x00, 0x30, 0xc0, 0x30, 0xfc, 0x30, 0xeb, 0x30, 0x30, 0x15, 0x57, 0xb9, + 0x65, 0x05, 0xff, 0xaf, 0x72, 0x47, 0x15, 0x6e, 0x2f, 0xb7, 0x5f, 0x64, + 0x2e, 0xab, 0x72, 0x06, 0x0d, 0x2f, 0x06, 0xd0, 0x7f, 0xb7, 0x97, 0x3f, + 0xa1, 0x05, 0xf1, 0x0d, 0x55, 0x54, 0x2f, 0xaf, 0x72, 0x2d, 0xa9, 0x69, + 0x29, 0x9b, 0x6f, 0x40, 0x07, 0x7c, 0x6f, 0xa8, 0x1d, 0x05, 0x11, 0x9b, + 0x00, 0x70, 0x7f, 0x58, 0x1f, 0x05, 0x12, 0x1b, 0x4b, 0x51, 0x00, 0xc9, + 0x62, 0xaf, 0x65, 0xfa, 0x8b, 0xbe, 0x8f, 0x00, 0x14, 0x5c, 0xb9, 0x8f, + 0x86, 0x75, 0x3a, 0x53, 0x80, 0x05, 0xdf, 0xb5, 0x6c, 0xd0, 0x7c, 0xb7, + 0xa4, 0xc2, 0x78, 0x08, 0xb1, 0xe4, 0xb2, 0x74, 0x28, 0x19, 0xc0, 0xc9, + 0x29, 0x6b, 0xbc, 0x0e, 0xf3, 0x7f, 0x38, 0x19, 0x74, 0xa2, 0x95, 0xf3, + 0x62, 0x95, 0x04, 0x58, 0x21, 0x6a, 0x1a, 0x28, 0x11, 0x37, 0xfd, 0x3d, + 0x28, 0x1f, 0x34, 0x28, 0x13, 0x40, 0x8a, 0x48, 0x1b, 0x38, 0x04, 0x39, + 0x28, 0x1b, 0x3a, 0x40, 0x1b, 0x39, 0xe0, 0x04, 0xa8, 0x15, 0x0f, 0x14, + 0xff, 0x10, 0x06, 0xf0, 0xff, 0x22, 0x21, 0x21, 0x38, 0x50, 0x00, 0x4e, + 0x22, 0x22, 0x23, 0x22, 0x17, 0x21, 0x22, 0x00, 0x22, 0x22, 0x22, 0x06, + 0x20, 0xb5, 0x1b, 0x00, 0x28, 0x00, 0x2b, 0x88, 0x17, 0xe4, 0x28, 0x15, + 0xb9, 0x30, 0xaf, 0xd1, 0x06, 0x08, 0x19, 0xb8, 0x17, 0x79, 0x48, 0x17, + 0x73, 0x00, 0x6b, 0x06, 0x68, 0x97, 0x6f, 0xef, 0x06, 0x20, 0x7f, 0x00, + 0x98, 0x17, 0x6a, 0x05, 0x41, 0x0d, 0x01, 0x78, 0x17, 0x04, 0x70, 0x8d, + 0x01, 0x78, 0x17, 0xc0, 0x04, 0x72, 0x1b, 0x78, 0x17, 0x9a, 0x4e, 0x14, + 0x5c, 0xaf, 0x65, 0x30, 0x4b, 0x51, 0x05, 0xf8, 0x1b, 0x78, 0x17, 0x7c, + 0xc5, 0x74, 0xb9, 0x0f, 0xa4, 0xc2, 0x6c, 0xd0, 0x05, 0xf8, 0x1b, 0x06, + 0x12, 0x71, 0x01, 0x33, 0xff, 0x05, 0x98, 0x1b, 0xb8, 0xb8, 0x17, 0x4f, + 0x06, 0x08, 0x15, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x23, 0x22, + 0x22, 0x00, 0x39, 0x51, 0x4f, 0x23, 0x23, 0x24, 0x23, 0x18, 0x00, 0x22, + 0x23, 0x23, 0x23, 0x23, 0xd2, 0x27, 0x0d, 0x08, 0x42, 0x00, 0x00, 0x2c, + 0x28, 0x17, 0xeb, 0x30, 0xac, 0x06, 0x30, 0xf3, 0x30, 0xde, 0x5d, 0x05, + 0xef, 0xa8, 0x8f, 0xaf, 0x75, 0xaa, 0x2f, 0xb1, 0x67, 0x2f, 0xb3, 0x6e, + 0x06, 0x60, 0x7f, 0x6f, 0x06, 0xc0, 0x81, 0x4f, 0x0b, 0x00, 0x62, 0x00, + 0x6c, 0x4f, 0x95, 0x74, 0x4f, 0xa1, 0x05, 0xf1, 0x0d, 0xfb, 0xb8, 0x97, + 0x3f, 0xa3, 0x78, 0x11, 0x05, 0x71, 0x95, 0x79, 0x17, 0xf3, 0x49, 0x17, + 0x78, 0x0f, 0xa0, 0x52, 0x13, 0xe1, 0x05, 0x22, 0x13, 0x93, 0x5e, 0x14, + 0x5c, 0x72, 0x40, 0x5e, 0x06, 0x72, 0xfd, 0x00, 0x00, 0xe0, 0xcf, 0x74, + 0xb9, 0x02, 0x04, 0xac, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x73, 0x7f, 0x6f, + 0xf5, 0x4f, 0x9b, 0x06, 0x73, 0x81, 0xb3, 0xff, 0x38, 0x0d, 0x72, 0x6b, + 0x27, 0xe3, 0x04, 0x48, 0x05, 0xaa, 0x00, 0x38, 0x17, 0x43, 0x28, 0x19, + 0x33, 0x28, 0x1b, 0x3d, 0x48, 0x13, 0x30, 0x80, 0x28, 0x1d, 0x20, 0x00, + 0x3e, 0x04, 0x31, 0x04, 0x3b, 0x8e, 0x48, 0x2f, 0x42, 0x04, 0x4c, 0x04, + 0xc8, 0x19, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x24, 0x00, 0x23, + 0x1f, 0x14, 0x15, 0x14, 0x24, 0x24, 0x1f, 0x00, 0x24, 0x19, 0x23, 0x24, + 0x24, 0x24, 0x24, 0x71, 0x02, 0x27, 0x78, 0x2e, 0x00, 0x00, 0x2d, 0x48, + 0x17, 0xb9, 0x3f, 0x30, 0xaf, 0x06, 0xe8, 0x17, 0x05, 0xdf, 0xa3, 0x00, + 0x38, 0x17, 0x06, 0x70, 0x81, 0x00, 0x38, 0x17, 0x05, 0xbd, 0xb1, 0xf8, + 0x00, 0xb8, 0x17, 0x05, 0x3e, 0x39, 0x00, 0x98, 0x17, 0x05, 0x5e, 0xb7, + 0x38, 0x17, 0xaf, 0x65, 0x4b, 0x61, 0x51, 0x06, 0x7b, 0x17, 0x38, 0x17, + 0xa4, 0xc2, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0xff, 0x78, 0x17, 0x06, 0x73, + 0x81, 0x93, 0xff, 0x06, 0x38, 0x15, 0x78, 0x17, 0x06, 0x38, 0x11, 0x07, + 0x74, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x25, 0x24, 0x20, 0x15, 0x16, + 0x15, 0x25, 0x25, 0x00, 0x20, 0x25, 0x1a, 0x24, 0x25, 0x25, 0x25, 0x25, + 0x00, 0xc6, 0x24, 0xba, 0x19, 0x00, 0x00, 0x2e, 0x64, 0x00, 0xec, 0x30, + 0xcb, 0x30, 0xf3, 0x30, 0xb0, 0x30, 0x05, 0xe9, 0x30, 0xfc, 0x30, 0xc9, + 0x06, 0x28, 0x1d, 0x4c, 0x2e, 0xaf, 0x55, 0x6e, 0x2e, 0xaf, 0x6e, 0x2f, + 0xb1, 0x72, 0x2f, 0xb3, 0x64, 0x06, 0x00, 0x7f, 0x7d, 0xe9, 0x06, 0xc0, + 0x7f, 0xd8, 0x17, 0x06, 0x11, 0x0d, 0x00, 0x58, 0x17, 0x00, 0x11, 0x95, + 0x6f, 0x05, 0xa8, 0x17, 0x80, 0x05, 0x90, 0x7d, 0x00, 0x00, 0x17, 0x52, + 0x81, 0x5b, 0x3c, 0x10, 0x68, 0xd2, 0x52, 0x06, 0x7b, 0x17, 0x08, 0xb8, + 0xcc, 0xb2, 0x03, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0xb4, 0x06, 0x58, 0x19, + 0x07, 0x13, 0x7f, 0xf0, 0x73, 0xff, 0x3a, 0x9f, 0x72, 0x6b, 0x05, 0x98, + 0x23, 0x1b, 0x04, 0x35, 0x04, 0x14, 0x3d, 0x04, 0x38, 0x20, 0x03, 0x33, + 0x28, 0x1f, 0x30, 0x04, 0x70, 0x34, 0x05, 0xe8, 0x23, 0x07, 0x91, 0x7f, + 0x10, 0x0e, 0x50, 0x7f, 0x26, 0x25, 0x23, 0x16, 0x00, 0x17, 0x16, 0x26, + 0x26, 0x25, 0x26, 0x1b, 0x25, 0x00, 0x26, 0x26, 0x26, 0x26, 0xa1, 0x2a, + 0x8e, 0x15, 0x00, 0x00, 0x00, 0x2f, 0x64, 0xea, 0x30, 0xda, 0x30, 0x18, + 0xc4, 0x30, 0xaf, 0x06, 0x28, 0x11, 0x78, 0x17, 0x69, 0x00, 0x70, 0xbd, + 0x2e, 0xb3, 0x74, 0x06, 0x6f, 0xb1, 0x06, 0xf0, 0x7f, 0xf8, 0x17, 0x51, + 0x0d, 0x7a, 0x05, 0x8d, 0xbd, 0xda, 0x00, 0x78, 0x17, 0x51, 0x95, 0x63, + 0x05, 0x0f, 0xb3, 0x00, 0x58, 0x17, 0xed, 0x05, 0x82, 0x13, 0x29, 0x01, + 0x52, 0x69, 0x4f, 0x28, 0x83, 0x4b, 0x51, 0x06, 0x78, 0x17, 0x00, 0xac, + 0xb9, 0x98, 0xd3, 0x20, 0xce, 0x6c, 0xd0, 0xf1, 0x06, 0x58, 0x15, 0x07, + 0xf3, 0x7f, 0x05, 0x98, 0x0f, 0x98, 0x17, 0x38, 0x04, 0x3f, 0x28, 0x1b, + 0x70, 0x46, 0x05, 0xc8, 0x0d, 0x0f, 0x94, 0xff, 0x10, 0x06, 0xf0, 0xff, + 0x27, 0x26, 0x24, 0x17, 0x00, 0x18, 0x17, 0x27, 0x27, 0x26, 0x27, 0x1c, + 0x26, 0x00, 0x27, 0x27, 0x27, 0x27, 0x6a, 0x25, 0x28, 0x1c, 0x00, 0x00, + 0x00, 0x30, 0x64, 0xde, 0x30, 0xac, 0x30, 0x15, 0xc0, 0x30, 0xf3, 0x06, + 0x88, 0x17, 0x4d, 0x2f, 0xa3, 0x67, 0x4f, 0xa7, 0x7f, 0x61, 0x2f, 0xb7, + 0x0e, 0x10, 0x7f, 0xd8, 0x17, 0x06, 0x11, 0x0d, 0x00, 0x58, 0x17, 0x05, + 0x91, 0x95, 0x00, 0x38, 0x17, 0xa0, 0x92, 0x13, 0xe1, 0x05, 0x02, 0x13, + 0x6c, 0x9a, 0xa0, 0x52, 0x39, 0x40, 0x4e, 0x06, 0x7b, 0x15, 0x00, 0x00, + 0xc8, 0xb9, 0x00, 0xac, 0x3d, 0xe8, 0xb2, 0x06, 0x78, 0x15, 0x07, 0xb3, + 0x7f, 0x38, 0x07, 0x06, 0x18, 0x17, 0x1c, 0x28, 0x0d, 0x57, 0x33, 0x28, + 0x11, 0x34, 0x28, 0x15, 0x3d, 0x28, 0x0b, 0x05, 0xf8, 0x1d, 0x0e, 0xf4, + 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x28, 0x27, 0x25, 0x18, 0x19, 0x18, + 0x28, 0x00, 0x28, 0x27, 0x28, 0x1d, 0x27, 0x28, 0x28, 0x28, 0x0a, 0x28, + 0x5b, 0x2a, 0x3c, 0x2f, 0x9e, 0x31, 0x28, 0x17, 0xea, 0x00, 0x30, 0xfb, + 0x30, 0xa8, 0x30, 0xeb, 0x30, 0x71, 0x05, 0x51, 0x8c, 0x54, 0xfd, 0x56, + 0x06, 0x38, 0x17, 0x72, 0x2f, 0xb3, 0x06, 0x79, 0x00, 0x2d, 0x00, 0x45, + 0x2f, 0x39, 0x06, 0x70, 0x7f, 0x73, 0xc5, 0x06, 0x66, 0x18, 0x3f, 0xaf, + 0x70, 0x00, 0x75, 0x48, 0x1d, 0x69, 0x4d, 0x31, 0xbb, 0x71, 0x11, 0x20, + 0x05, 0x41, 0x0f, 0x90, 0x7f, 0x50, 0x81, 0x63, 0x29, 0xa7, 0xb8, 0x1d, + 0xef, 0x31, 0x9b, 0x04, 0xb1, 0x99, 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0x78, + 0x1d, 0x04, 0xf0, 0x7d, 0x38, 0x17, 0x00, 0xcc, 0x91, 0x2d, 0x00, 0xc3, + 0x57, 0x14, 0x5c, 0x80, 0x06, 0x52, 0xff, 0xc8, 0xb9, 0xac, 0xb9, 0x10, + 0xc6, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x5b, + 0x97, 0xf8, 0x05, 0x92, 0x6d, 0x00, 0xf0, 0x7f, 0x78, 0x17, 0xd2, 0x11, + 0x04, 0xb8, 0x1d, 0x20, 0x04, 0x35, 0x8a, 0x28, 0x0d, 0x3f, 0x04, 0x43, + 0x48, 0x07, 0x38, 0x48, 0x17, 0x20, 0xab, 0x48, 0x2d, 0x40, 0x20, 0x0d, + 0x39, 0x28, 0x21, 0x2d, 0x28, 0x1f, 0x0d, 0x14, 0xff, 0x80, 0x10, 0x0e, + 0x70, 0x7f, 0x29, 0x28, 0x26, 0x4a, 0x44, 0x43, 0x29, 0x00, 0x29, 0x28, + 0x29, 0x35, 0x28, 0x29, 0x29, 0x29, 0x00, 0x29, 0x45, 0x28, 0x09, 0x22, + 0x00, 0x00, 0x32, 0x20, 0x64, 0xe2, 0x28, 0x11, 0xc9, 0x30, 0xf4, 0x30, + 0xa3, 0x2a, 0x30, 0xa2, 0x06, 0x48, 0x19, 0x4d, 0x2e, 0xa9, 0x72, 0x2f, + 0xad, 0x6f, 0x2d, 0x00, 0x76, 0x2e, 0xb5, 0x61, 0x06, 0x2d, 0x2f, 0xb0, + 0x7f, 0x65, 0x07, 0x48, 0x17, 0xaf, 0x51, 0x11, 0x77, 0x2f, 0xc5, 0x6e, + 0x40, 0x93, 0x04, 0xbf, 0xb1, 0x00, 0xd8, 0x17, 0x05, 0x11, 0x9b, 0xc0, + 0x00, 0xb8, 0x17, 0x05, 0x32, 0x19, 0xab, 0x83, 0x14, 0x5c, 0x1a, 0x59, + 0x00, 0xe6, 0x74, 0x3e, 0x79, 0x1a, 0x4f, 0x3b, 0x4e, 0x20, 0x49, 0x4e, + 0x05, 0xfb, 0x1d, 0xa8, 0xba, 0x74, 0xb9, 0xc4, 0x1a, 0xb3, 0x14, 0xbc, + 0x06, 0x78, 0x19, 0xd3, 0x7f, 0xeb, 0x06, 0x83, 0x7f, 0xf3, 0xea, 0x63, + 0xff, 0x05, 0xf8, 0x19, 0x00, 0x78, 0x17, 0x3e, 0x28, 0x17, 0x34, 0x20, + 0x05, 0x32, 0xb8, 0x28, 0x2b, 0x4f, 0x04, 0xc8, 0x17, 0x07, 0xb4, 0xff, + 0x10, 0x0e, 0x10, 0x7f, 0x2a, 0x29, 0x27, 0x00, 0x4b, 0x45, 0x44, 0x2a, + 0x2a, 0x2a, 0x2a, 0x36, 0x40, 0x29, 0x30, 0x05, 0x87, 0x26, 0x21, 0x20, + 0x00, 0x00, 0x40, 0x33, 0x28, 0x17, 0xb9, 0x30, 0xaf, 0x30, 0xef, 0x30, + 0x35, 0xde, 0x5d, 0x06, 0x5f, 0x30, 0x38, 0x17, 0x73, 0x2e, 0xa5, 0x6f, + 0x27, 0x07, 0xaa, 0x06, 0xd0, 0x7f, 0x75, 0x4c, 0xad, 0x6f, 0x4f, 0xb9, + 0x61, 0x20, 0x93, 0x74, 0xda, 0x04, 0xcc, 0xa7, 0x7f, 0xff, 0x4f, 0xa0, + 0x6f, 0x58, 0x13, 0x73, 0x28, 0x1d, 0x61, 0xd7, 0x2f, 0xc1, 0x05, 0x98, + 0x97, 0x67, 0x2f, 0xa9, 0x6f, 0x28, 0x83, 0x3f, 0xa5, 0x98, 0x11, 0xee, + 0x31, 0x95, 0x05, 0x19, 0xa7, 0x70, 0x7f, 0xf3, 0x29, 0x03, 0xb8, 0x11, + 0x32, 0x13, 0xfa, 0x81, 0x05, 0x2f, 0xbc, 0xab, 0x83, 0xaf, 0x65, 0xd1, + 0x79, 0x06, 0x72, 0xfd, 0x84, 0x38, 0x17, 0xa4, 0xc2, 0x6c, 0xd0, 0x38, + 0x17, 0xfc, 0xc8, 0xb7, 0x06, 0x93, 0x7f, 0x6b, 0x06, 0x82, 0xff, 0x93, + 0xff, 0x76, 0x2c, 0x21, 0x78, 0x15, 0x32, 0x91, 0x77, 0xe3, 0x2c, 0x31, + 0x05, 0x13, 0x81, 0x38, 0x01, 0x41, 0x28, 0x0d, 0x38, 0x01, 0x30, 0x07, + 0x45, 0x30, 0x28, 0x05, 0x20, 0x00, 0x3e, 0x48, 0x25, 0x30, 0x28, 0x31, + 0x1c, 0x42, 0x04, 0x4c, 0x04, 0xa8, 0x15, 0x07, 0xb4, 0xff, 0x10, 0x0e, + 0x50, 0x7f, 0x2b, 0x2a, 0x00, 0x28, 0x19, 0x1a, 0x19, 0x2b, 0x2b, 0x2b, + 0x2c, 0x20, 0x1f, 0x2a, 0x20, 0x05, 0x2b, 0xa8, 0x27, 0xbf, 0x1a, 0x00, + 0x00, 0x00, 0x34, 0x64, 0xe0, 0x30, 0xeb, 0x30, 0x1a, 0xde, 0x30, 0xf3, + 0x48, 0x1d, 0x06, 0x38, 0x1b, 0x4d, 0x2f, 0x2b, 0x72, 0x2f, 0x00, 0x6d, + 0x2e, 0xa5, 0x6e, 0x47, 0x11, 0x06, 0x3d, 0x2f, 0x06, 0xb0, 0x81, 0xf8, + 0x17, 0xf4, 0x05, 0xf1, 0x0d, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0x00, + 0x58, 0x17, 0xfa, 0x05, 0x82, 0x13, 0x69, 0x64, 0x00, 0x14, 0x5c, 0xfc, + 0x66, 0xaf, 0x65, 0x4b, 0x51, 0x81, 0x06, 0x5b, 0x19, 0x34, 0xbb, 0x74, + 0xb9, 0xcc, 0xb9, 0x38, 0x1b, 0xdc, 0x06, 0x58, 0x19, 0x3f, 0xaf, 0x65, + 0x06, 0xa3, 0x81, 0xf3, 0xff, 0x05, 0xf8, 0x19, 0x1c, 0x04, 0x05, 0x43, + 0x04, 0x40, 0x04, 0x3c, 0x28, 0x0f, 0x3d, 0x06, 0x68, 0x17, 0xc0, 0x06, + 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x2c, 0x2c, 0x2a, 0x1a, 0x1b, 0x1a, + 0x01, 0x2c, 0x2c, 0x29, 0x2d, 0x20, 0x2c, 0x2c, 0x20, 0x01, 0x00, 0x0a, + 0x31, 0x86, 0x17, 0x00, 0x00, 0x35, 0x64, 0x00, 0xcd, 0x30, 0xcd, 0x30, + 0xc4, 0x30, 0xea, 0x81, 0x02, 0xbb, 0x6c, 0xa1, 0x7b, 0x3a, 0x53, 0x06, + 0x1f, 0xb2, 0x4e, 0xd8, 0x2e, 0xaf, 0x3e, 0xa9, 0x74, 0x2f, 0xb5, 0x06, + 0x3d, 0xb3, 0x4e, 0x00, 0xe9, 0xad, 0x2f, 0x29, 0xe9, 0x40, 0x7f, 0x69, + 0x2f, 0x3b, 0x05, 0xfe, 0x37, 0x41, 0x2d, 0xa7, 0x58, 0x74, 0x4f, 0xad, + 0x6f, 0x29, 0x1d, 0x35, 0xa1, 0x20, 0x00, 0x4b, 0xbd, 0x4d, 0x33, 0x69, + 0x2f, 0xb1, 0x5f, 0x41, 0x30, 0x13, 0x51, 0x27, 0x7a, 0x41, 0x2d, 0xaa, + 0x03, 0xbf, 0xc4, 0x43, 0x2f, 0xab, 0x72, 0x4d, 0xaf, 0x6e, 0x2f, 0xad, + 0x61, 0xde, 0x2d, 0xad, 0x38, 0x23, 0x20, 0xe0, 0x97, 0x3d, 0xc9, 0x58, + 0x31, 0x71, 0xaf, 0x63, 0xad, 0x03, 0x6f, 0xcb, 0x44, 0x40, 0xe7, 0x74, + 0x40, 0x77, 0x31, 0x07, 0x20, 0x2e, 0xab, 0xfb, 0x31, 0x11, 0x38, 0x27, + 0x90, 0x79, 0x38, 0xb1, 0xb2, 0x29, 0x69, 0x2e, 0xd1, 0x03, 0x5f, 0xe1, + 0x03, 0x85, 0x6d, 0x85, 0x6d, 0x28, 0x83, 0x32, 0xff, 0x06, 0x32, 0xfd, + 0x00, 0x00, 0x00, 0x24, 0xb1, 0x24, 0xb1, 0x20, 0xce, 0x00, 0x20, 0x00, + 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x8b, 0x06, 0xd3, 0x7f, 0x69, 0x00, + 0xeb, 0x06, 0xe0, 0x7f, 0x61, 0x48, 0x17, 0x3a, 0x9b, 0xc4, 0xb2, 0x13, + 0x04, 0xb8, 0x1b, 0x1d, 0x04, 0x35, 0x28, 0x11, 0x35, 0x04, 0x44, 0x46, + 0x28, 0x13, 0x38, 0x04, 0x39, 0x28, 0x13, 0x30, 0x04, 0x54, 0x32, 0x28, + 0x0d, 0x3e, 0x28, 0x27, 0x3e, 0x28, 0x2f, 0x3d, 0x04, 0x55, 0x4b, 0x40, + 0x15, 0x3e, 0x28, 0x33, 0x40, 0x28, 0x43, 0x33, 0x03, 0xe8, 0x25, 0xc0, + 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x2d, 0x2d, 0x2b, 0x03, 0x03, + 0x04, 0x04, 0x2d, 0x2d, 0x2d, 0x2e, 0x21, 0x20, 0x04, 0x2d, 0x2d, 0x00, + 0x18, 0x30, 0xb9, 0x25, 0x00, 0x00, 0x36, 0x64, 0x00, 0xcb, 0x30, 0xb8, + 0x30, 0xcb, 0x30, 0xfb, 0x30, 0x00, 0xce, 0x30, 0xf4, 0x30, 0xb4, 0x30, + 0xed, 0x30, 0x28, 0xc9, 0x30, 0x05, 0xdd, 0x37, 0x4e, 0x2e, 0xab, 0x7a, + 0x00, 0x68, 0xad, 0x4e, 0xb5, 0x6f, 0x2f, 0xb7, 0x6f, 0x2e, 0xb1, 0x05, + 0xf0, 0x7f, 0x6a, 0x2f, 0x9d, 0x88, 0x56, 0xf3, 0x6f, 0x00, 0x76, 0x05, + 0xe0, 0x87, 0x4f, 0x00, 0x62, 0x3d, 0x00, 0x6c, 0x2f, 0x97, 0x37, 0x1b, + 0x37, 0xfd, 0x38, 0x0d, 0x63, 0x21, 0x0f, 0xbe, 0x90, 0x91, 0x77, 0x04, + 0xc1, 0x19, 0x7f, 0xaf, 0x38, 0x99, 0x3f, 0xab, 0x77, 0xfd, 0x69, 0x17, + 0x00, 0x7e, 0x01, 0x31, 0x15, 0x6a, 0x04, 0xe1, 0x17, 0x70, 0x7f, 0x38, + 0x07, 0xe8, 0x98, 0x01, 0x52, 0x13, 0x71, 0x95, 0xf3, 0x04, 0xa1, 0x95, + 0x0b, 0x4e, 0xfa, 0x00, 0x8b, 0x2b, 0x59, 0xe5, 0x54, 0x57, 0x7f, 0xb7, + 0x60, 0x5f, 0x05, 0xd2, 0xf9, 0x5f, 0xff, 0xc8, 0xb2, 0x1c, 0xc8, 0xe0, + 0x00, 0xac, 0x5c, 0xb8, 0xdc, 0xb4, 0x20, 0x00, 0xfc, 0x7f, 0xc8, 0x06, + 0x3b, 0x97, 0x33, 0x7f, 0x06, 0x93, 0x01, 0x00, 0x33, 0xff, 0x38, 0x1b, + 0x3b, 0x19, 0x32, 0x97, 0x45, 0xe3, 0x05, 0x08, 0x17, 0x38, 0x04, 0x36, + 0x28, 0x1b, 0x33, 0x28, 0x09, 0x44, 0x40, 0x28, 0x0d, 0x34, 0x04, 0x41, + 0x28, 0x21, 0x30, 0x04, 0x45, 0x4f, 0x48, 0x0b, 0x31, 0x04, 0x3b, 0x20, + 0x0b, 0x41, 0x28, 0x27, 0x70, 0x4c, 0x03, 0xe8, 0x0f, 0x07, 0xb4, 0xff, + 0x10, 0x0e, 0xb0, 0x7f, 0x2e, 0x2e, 0x2c, 0x1b, 0x01, 0x1c, 0x1b, 0x2e, + 0x2e, 0x2e, 0x2f, 0x22, 0x20, 0x04, 0x00, 0x2e, 0x2e, 0x0f, 0x28, 0x49, + 0x1f, 0x00, 0x00, 0x3f, 0x37, 0x64, 0x06, 0x78, 0x0f, 0x9f, 0xaf, 0x06, + 0x17, 0x8b, 0x07, 0xb0, 0x7f, 0xf8, 0x17, 0x04, 0xf8, 0x07, 0xfc, 0x01, + 0x78, 0x17, 0x05, 0x79, 0x21, 0x00, 0x58, 0x17, 0x04, 0xb8, 0x09, 0xdf, + 0xff, 0x06, 0xd8, 0x15, 0x00, 0x00, 0x0f, 0x78, 0xb1, 0x0c, 0xbe, 0x06, + 0xd8, 0x17, 0x07, 0xd3, 0x7f, 0x05, 0xb8, 0x13, 0x58, 0x17, 0x1c, 0x3e, + 0x04, 0x32, 0x06, 0x88, 0x15, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xf0, 0xff, + 0x2f, 0x30, 0x00, 0x2d, 0x1c, 0x1d, 0x1c, 0x2f, 0x2f, 0x30, 0x30, 0x00, + 0x23, 0x30, 0x2f, 0x2f, 0x2f, 0x2f, 0xa2, 0x29, 0x04, 0x3e, 0x16, 0x00, + 0x00, 0x38, 0x48, 0x17, 0xa9, 0x30, 0x00, 0xb7, 0x30, 0xd3, 0x30, 0xeb, + 0x30, 0xb9, 0x30, 0x6a, 0xaf, 0x06, 0x08, 0x1d, 0x5f, 0xa3, 0x6f, 0x2f, + 0x2f, 0x69, 0x2f, 0x39, 0x69, 0x8f, 0x2f, 0xa9, 0x73, 0x00, 0x6b, 0x06, + 0x40, 0x7f, 0x06, 0x50, 0x81, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x0d, 0xf0, + 0x00, 0xb8, 0x17, 0x05, 0x31, 0x95, 0x00, 0x58, 0x17, 0x05, 0x92, 0x13, + 0xb0, 0x65, 0x7f, 0x89, 0x02, 0x2f, 0x4f, 0x29, 0x52, 0x9a, 0x4e, 0x06, + 0x78, 0x17, 0xf4, 0x00, 0xbc, 0xdc, 0xc2, 0x44, 0xbe, 0x74, 0xb9, 0xa4, + 0x1f, 0xc2, 0x6c, 0xd0, 0x06, 0x18, 0x1b, 0x07, 0x93, 0x7f, 0xb3, 0xff, + 0x05, 0x98, 0x1d, 0x58, 0x17, 0x57, 0x3e, 0x28, 0x0f, 0x38, 0x28, 0x07, + 0x38, 0x28, 0x1d, 0x05, 0xd8, 0x19, 0x08, 0x51, 0x7f, 0x80, 0x10, 0x0d, + 0x90, 0x7f, 0x30, 0x31, 0x2e, 0x1d, 0x1e, 0x1d, 0x30, 0x00, 0x30, 0x31, + 0x31, 0x24, 0x31, 0x30, 0x30, 0x30, 0x00, 0x30, 0x1f, 0x27, 0xf9, 0x3a, + 0x00, 0x00, 0x39, 0x0d, 0x64, 0xaa, 0x30, 0xe0, 0x06, 0x48, 0x0f, 0x9f, + 0x2f, 0x6d, 0x05, 0xe8, 0x09, 0xfe, 0x07, 0xf0, 0x7f, 0xb8, 0x17, 0x06, + 0x11, 0x0d, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x00, 0x38, 0x17, 0x05, + 0xb2, 0x13, 0x02, 0x01, 0x91, 0x28, 0x67, 0xaf, 0x65, 0x4b, 0x51, 0x06, + 0x72, 0xff, 0x3c, 0x34, 0xc6, 0x06, 0x58, 0x0f, 0x07, 0xf3, 0x7f, 0x05, + 0x98, 0x09, 0xdf, 0xf9, 0x1e, 0x04, 0x70, 0x3c, 0x05, 0xe8, 0x09, 0x0f, + 0xf4, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x31, 0x32, 0x30, 0x1e, 0x00, 0x1f, + 0x1e, 0x31, 0x31, 0x34, 0x32, 0x25, 0x32, 0x00, 0x31, 0x31, 0x31, 0x31, + 0x19, 0x27, 0x2b, 0x34, 0x10, 0x00, 0x00, 0x3a, 0x28, 0x17, 0xec, 0x30, + 0xf3, 0x30, 0x15, 0xd6, 0x30, 0xeb, 0x06, 0x68, 0x1b, 0x4f, 0x4c, 0x17, + 0x6e, 0x2f, 0xa9, 0x57, 0x75, 0x2f, 0xa9, 0x67, 0x06, 0xa0, 0x7f, 0x6f, + 0x06, 0x40, 0x81, 0xf8, 0x17, 0x05, 0xf1, 0x0d, 0xf5, 0x00, 0x78, 0x17, + 0x05, 0x71, 0x95, 0x00, 0x58, 0x17, 0x3e, 0x2b, 0x6d, 0x82, 0x13, 0x6f, + 0x04, 0xaf, 0xc8, 0x02, 0x65, 0x59, 0x26, 0x4f, 0x21, 0x58, 0x06, 0x7b, + 0x15, 0x00, 0x00, 0x00, 0x24, 0xc6, 0x0c, 0xb8, 0x80, 0xbd, 0x74, 0x78, + 0xb9, 0x06, 0x78, 0x1b, 0x07, 0x53, 0x7f, 0xb1, 0xeb, 0x05, 0xd8, 0x21, + 0x1e, 0x04, 0x40, 0x0a, 0x04, 0x35, 0x04, 0x3d, 0x28, 0x0f, 0x43, 0x20, + 0x09, 0x33, 0xe0, 0x06, 0x08, 0x23, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x50, + 0x7f, 0x32, 0x34, 0x32, 0x1f, 0x21, 0x00, 0x1f, 0x32, 0x32, 0x35, 0x34, + 0x26, 0x34, 0x32, 0x00, 0x32, 0x32, 0x32, 0xd2, 0x24, 0x2e, 0x27, 0x00, + 0x20, 0x00, 0x3b, 0x28, 0x17, 0xea, 0x30, 0xe7, 0x30, 0xfc, 0xee, 0x28, + 0x17, 0x06, 0x5d, 0x31, 0x58, 0x17, 0x6c, 0x06, 0xaf, 0xaf, 0x06, 0xf0, + 0x7f, 0xf8, 0x17, 0x6a, 0xef, 0x2f, 0xbb, 0x05, 0x91, 0x0f, 0x00, 0x98, + 0x17, 0xeb, 0x05, 0x41, 0x95, 0x00, 0x78, 0x17, 0x38, 0xa9, 0x05, 0x32, + 0x15, 0x02, 0x65, 0x59, 0xd6, 0x5e, 0x14, 0x5c, 0x06, 0xb8, 0x17, 0xd4, + 0x7e, 0xb8, 0x06, 0x58, 0x11, 0x9b, 0x97, 0x05, 0xd2, 0x71, 0x00, 0x53, + 0xff, 0x05, 0xd8, 0x0d, 0xd8, 0x17, 0x3b, 0x0e, 0x04, 0x3e, 0x04, 0x32, + 0x06, 0x08, 0x11, 0x0f, 0x74, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x33, 0x00, + 0x33, 0x31, 0x20, 0x20, 0x20, 0x33, 0x33, 0x36, 0x08, 0x33, 0x27, 0x33, + 0x33, 0x20, 0x01, 0xaa, 0x25, 0xa5, 0x00, 0x19, 0x00, 0x00, 0x3c, 0x64, + 0xda, 0x30, 0xf3, 0x35, 0x30, 0xb6, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x50, + 0x4f, 0xad, 0x7a, 0x2f, 0x31, 0xef, 0x0e, 0x50, 0x7f, 0xd8, 0x17, 0x51, + 0x0d, 0x73, 0x05, 0xa1, 0x0d, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x00, + 0x38, 0x17, 0x84, 0x05, 0xb2, 0x13, 0x54, 0x59, 0x28, 0x84, 0x06, 0x98, + 0x15, 0x00, 0x00, 0x0e, 0x9c, 0xd3, 0x90, 0xc7, 0x06, 0xb8, 0x17, 0x07, + 0x93, 0x7f, 0x06, 0x58, 0x19, 0x1f, 0x03, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x37, 0x40, 0x05, 0x06, 0x38, 0x19, 0xc0, 0x0e, 0xf4, 0xff, 0x10, 0x06, + 0xf0, 0xff, 0x34, 0x35, 0x36, 0x21, 0x22, 0x21, 0x00, 0x34, 0x34, 0x37, + 0x36, 0x28, 0x35, 0x34, 0x34, 0x00, 0x34, 0x34, 0xd4, 0x25, 0x03, 0x20, + 0x00, 0x00, 0x40, 0x3d, 0x28, 0x17, 0xeb, 0x30, 0xdf, 0x30, 0x30, 0x57, + 0x20, 0xb9, 0x65, 0x06, 0x98, 0x17, 0x72, 0x00, 0x6d, 0x00, 0x27, 0xfd, + 0x06, 0xa8, 0x97, 0x30, 0x7f, 0x06, 0x7e, 0x2f, 0xbf, 0xaf, 0x58, 0x17, + 0x05, 0xd0, 0x8d, 0x54, 0x41, 0x7f, 0xbf, 0x3f, 0x9f, 0x74, 0x2f, 0xa1, + 0x5f, 0xa7, 0xb8, 0x1d, 0x04, 0xf1, 0x9b, 0x00, 0x70, 0x7f, 0x78, 0x1f, + 0x80, 0x04, 0xf1, 0x9b, 0x7c, 0x5f, 0x14, 0x5c, 0xc6, 0x59, 0xb9, 0x04, + 0x8f, 0x86, 0x75, 0x3a, 0x53, 0x06, 0x3f, 0xb3, 0x98, 0xd3, 0x00, 0x84, + 0xb9, 0x20, 0x00, 0xc0, 0xc9, 0x29, 0xbc, 0xeb, 0x0e, 0x52, 0xff, 0x73, + 0xff, 0x38, 0x15, 0x74, 0xa2, 0x8b, 0xf3, 0x62, 0x8b, 0x04, 0xf8, 0x1d, + 0x88, 0x38, 0x17, 0x40, 0x04, 0x3c, 0x48, 0x13, 0x38, 0x04, 0x39, 0xae, + 0x28, 0x13, 0x3a, 0x20, 0x0f, 0x30, 0x20, 0x09, 0x0d, 0xd4, 0xff, 0x10, + 0x0e, 0x70, 0x7f, 0x35, 0x00, 0x36, 0x37, 0x3a, 0x52, 0x50, 0x35, 0x35, + 0x38, 0x00, 0x37, 0x29, 0x36, 0x35, 0x35, 0x35, 0x35, 0x3e, 0x00, 0x29, + 0x0c, 0x28, 0x00, 0x00, 0x3e, 0x64, 0xbf, 0x1d, 0x6c, 0x77, 0x6d, 0x06, + 0x98, 0x15, 0x3f, 0xaf, 0x36, 0x93, 0x6d, 0x46, 0x93, 0x1b, 0x27, 0x00, + 0x79, 0x2f, 0xbd, 0x06, 0x90, 0x7f, 0x69, 0x06, 0x00, 0x7d, 0x00, 0x18, + 0x17, 0xb5, 0x91, 0x0d, 0x6a, 0x05, 0x41, 0x0b, 0x00, 0x97, 0x97, 0x6c, + 0x2f, 0xbf, 0x4c, 0x88, 0x2f, 0x78, 0x61, 0x20, 0x0f, 0x04, 0x3a, 0x3a, + 0x00, 0xd8, 0x17, 0x05, 0x11, 0x9b, 0xe8, 0x6e, 0x77, 0x40, 0x6d, 0x06, + 0x98, 0x15, 0x00, 0x00, 0x04, 0xd5, 0xac, 0xb9, 0x00, 0xa8, 0xba, 0x74, + 0xb9, 0xa4, 0xc2, 0xa4, 0xd0, 0xc7, 0x06, 0x38, 0x1f, 0xb3, 0x7f, 0x73, + 0x00, 0x6b, 0x2f, 0xab, 0x06, 0xd3, 0x7f, 0x05, 0xf8, 0x1f, 0x57, 0x1f, + 0x28, 0x15, 0x38, 0x28, 0x17, 0x3e, 0x28, 0x1d, 0x06, 0x38, 0x1b, 0x07, + 0xb4, 0xff, 0x80, 0x10, 0x0e, 0x30, 0x7f, 0x36, 0x37, 0x38, 0x3b, 0x4b, + 0x51, 0x36, 0x00, 0x36, 0x39, 0x38, 0x2a, 0x37, 0x36, 0x36, 0x36, 0x00, + 0x36, 0xac, 0x1e, 0xcb, 0x5d, 0x00, 0x00, 0x3f, 0x00, 0x64, 0xd7, 0x30, + 0xb9, 0x30, 0xb3, 0x30, 0xd5, 0x38, 0x30, 0xde, 0x20, 0x0d, 0x06, 0x5f, + 0xaf, 0x34, 0x8d, 0x6f, 0x00, 0x76, 0xc5, 0x06, 0x8c, 0xaf, 0x06, 0xd0, + 0x7f, 0x4f, 0x00, 0x62, 0x27, 0x81, 0x61, 0x25, 0x93, 0x6d, 0x74, 0x4f, + 0xa1, 0x51, 0x0d, 0x77, 0x06, 0x48, 0x97, 0x3f, 0xa3, 0x64, 0x2f, 0xb9, + 0xee, 0x90, 0x87, 0x05, 0x11, 0x95, 0x79, 0x17, 0xf3, 0x49, 0x17, 0x78, + 0x0f, 0x05, 0x92, 0x13, 0x6e, 0x01, 0x66, 0xaf, 0x65, 0xd1, 0x79, 0x2b, + 0x59, 0x06, 0x72, 0xff, 0x00, 0x04, 0xd5, 0xa4, 0xc2, 0x54, 0xcf, 0x04, + 0xd5, 0x0d, 0x20, 0x00, 0x80, 0xbd, 0x0e, 0xd3, 0x7f, 0x38, 0x11, 0x72, + 0x6b, 0x25, 0x71, 0xe3, 0x04, 0xa8, 0x09, 0xf8, 0x17, 0x38, 0x0d, 0x3e, + 0x04, 0x32, 0x48, 0x15, 0x10, 0x30, 0x04, 0x4f, 0x28, 0x15, 0x3e, 0x04, + 0x31, 0x04, 0x41, 0x3b, 0x28, 0x17, 0x41, 0x04, 0x42, 0x04, 0x4c, 0x04, + 0xe8, 0x1b, 0xc0, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x37, 0x38, + 0x39, 0x22, 0x23, 0x22, 0x00, 0x37, 0x37, 0x3a, 0x39, 0x2b, 0x38, 0x37, + 0x37, 0x00, 0x37, 0x37, 0x1d, 0x29, 0x25, 0x14, 0x00, 0x00, 0x15, 0x40, + 0x64, 0xed, 0x28, 0x17, 0xc8, 0x06, 0xa8, 0x17, 0x52, 0x2f, 0xa9, 0xff, + 0x37, 0x13, 0x06, 0x78, 0x19, 0x06, 0xf0, 0x7f, 0xd8, 0x17, 0x91, 0x0d, + 0x05, 0x78, 0x19, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0xc0, 0x00, 0x38, + 0x17, 0x05, 0xb2, 0x13, 0x57, 0x7f, 0xaf, 0x65, 0x58, 0x62, 0x81, 0x06, + 0x98, 0x17, 0x5c, 0xb8, 0xa4, 0xc2, 0xa0, 0xd1, 0x38, 0x17, 0x37, 0xfc, + 0xc8, 0x0e, 0xf3, 0x7f, 0x06, 0x38, 0x19, 0x20, 0x28, 0x13, 0x37, 0xff, + 0x06, 0x78, 0x19, 0xc0, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x38, + 0x39, 0x3b, 0x24, 0x25, 0x24, 0x00, 0x38, 0x38, 0x3c, 0x3c, 0x3c, 0x39, + 0x38, 0x38, 0x00, 0x38, 0x38, 0x96, 0x21, 0x3b, 0x1c, 0x00, 0x00, 0x00, + 0x41, 0x64, 0xea, 0x30, 0xe3, 0x30, 0xb6, 0x30, 0x54, 0xf3, 0x06, 0xa8, + 0x17, 0x79, 0x2f, 0x2d, 0x7a, 0x2f, 0x31, 0x6e, 0x00, 0x5b, 0x27, 0x06, + 0x48, 0x97, 0x69, 0x80, 0x7f, 0x07, 0x38, 0x17, 0x6a, 0x48, 0x23, 0x05, + 0x90, 0x8d, 0xfa, 0x00, 0x78, 0x17, 0x30, 0x87, 0x05, 0x31, 0x95, 0x00, + 0x58, 0x17, 0x51, 0x93, 0xe1, 0x05, 0x21, 0x93, 0x81, 0x18, 0x68, 0x5e, + 0x8d, 0x06, 0x7b, 0x13, 0x3f, 0xff, 0xb4, 0xb7, 0x94, 0x7e, 0xc7, 0x06, + 0x78, 0x13, 0x5b, 0x97, 0x91, 0xe9, 0x06, 0x5c, 0x17, 0x93, 0x7f, 0x06, + 0x58, 0x17, 0x4f, 0x2e, 0x04, 0x37, 0x28, 0x0d, 0x3d, 0x06, 0x48, 0x15, + 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x39, 0x00, 0x3a, 0x3a, 0x23, + 0x24, 0x23, 0x39, 0x39, 0x3b, 0x00, 0x3b, 0x3d, 0x3a, 0x39, 0x39, 0x39, + 0x39, 0xd3, 0x40, 0x26, 0x38, 0x17, 0x42, 0x64, 0xb5, 0x30, 0xcf, 0x30, + 0x02, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x56, 0x06, 0x5d, 0x2f, 0x53, 0x8e, + 0x2f, 0x2b, 0x6b, 0x00, 0x68, 0x2f, 0x31, 0x06, 0xf0, 0x7f, 0x3c, 0xad, + 0x49, 0x8b, 0x40, 0x8d, 0x6f, 0x00, 0x75, 0x2f, 0xbd, 0x69, 0x2f, 0x49, + 0x05, 0x1c, 0xb1, 0xb5, 0x3f, 0xaf, 0x70, 0x20, 0x6f, 0x38, 0x1d, 0x69, + 0x21, 0x09, 0x20, 0x41, 0x11, 0x5b, 0x63, 0x80, 0x91, 0x4a, 0x41, 0x1f, + 0x70, 0x8f, 0x6e, 0x04, 0x0d, 0x43, 0x90, 0x7f, 0xba, 0x50, 0x81, 0x63, + 0x41, 0x09, 0x58, 0x1d, 0x00, 0x10, 0x89, 0x63, 0x21, 0x19, 0x7a, 0xee, + 0x49, 0x49, 0x03, 0x7d, 0xcb, 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0x38, 0xa1, + 0x32, 0x19, 0x6a, 0xdc, 0x28, 0x1b, 0x3e, 0x45, 0x59, 0xa1, 0x05, 0x03, + 0x90, 0x7b, 0x3f, 0xff, 0x28, 0x84, 0x20, 0xc8, 0x54, 0x06, 0xb2, 0xff, + 0xac, 0xc0, 0x58, 0xd5, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, + 0xad, 0x06, 0x3f, 0xb0, 0xb6, 0x52, 0x5f, 0x6f, 0x2f, 0xa5, 0x32, 0xf1, + 0xeb, 0x06, 0x0e, 0xb3, 0x33, 0x71, 0x63, 0xf8, 0x21, 0xff, 0x51, 0xd9, + 0x78, 0x19, 0xd2, 0x11, 0x04, 0xb8, 0x1f, 0x20, 0x04, 0x35, 0x8a, 0x28, + 0x11, 0x3f, 0x04, 0x43, 0x48, 0x0b, 0x38, 0x48, 0x1b, 0x20, 0x28, 0x00, + 0x21, 0x28, 0x29, 0x45, 0x40, 0x09, 0x28, 0x00, 0x2f, 0xaf, 0x28, 0x2f, + 0x43, 0x28, 0x21, 0x38, 0x28, 0x41, 0x04, 0x18, 0xa9, 0x07, 0x94, 0xff, + 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x3a, 0x3b, 0x3d, 0x4d, 0x46, 0x46, 0x3a, + 0x3a, 0x00, 0x12, 0x14, 0x37, 0x3b, 0x3a, 0x3a, 0x3a, 0x3a, 0x01, 0x1c, + 0x2c, 0x41, 0x5c, 0x00, 0x00, 0x43, 0x48, 0x17, 0x0f, 0xea, 0x30, 0xf3, + 0x30, 0x06, 0x7d, 0x33, 0x98, 0x17, 0x37, 0x17, 0x06, 0x1f, 0xb3, 0xa8, + 0xf0, 0x7f, 0x65, 0x05, 0xee, 0x3a, 0x4f, 0x48, 0x11, 0x61, 0x00, 0x73, + 0xf7, 0x28, 0x89, 0xb8, 0x13, 0x05, 0x71, 0x0d, 0x7f, 0xaf, 0x6f, 0x40, + 0xfb, 0x00, 0x18, 0x11, 0x04, 0xf1, 0x95, 0xbb, 0x70, 0x7f, 0xf3, 0x4e, + 0x2f, 0xb8, 0x11, 0x32, 0x11, 0xed, 0x05, 0x0e, 0xc5, 0x38, 0x17, 0x30, + 0x97, 0x67, 0x06, 0x72, 0xfd, 0x38, 0x17, 0x60, 0xd5, 0xb0, 0xb9, 0x0f, + 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x9b, 0x97, 0x05, 0xd2, 0x71, 0x00, 0x30, + 0x7f, 0x73, 0xfd, 0xde, 0x98, 0x19, 0x32, 0x93, 0xe3, 0x2b, 0xa1, 0x04, + 0xfb, 0x99, 0x78, 0x01, 0x38, 0x13, 0x3d, 0xd5, 0x28, 0x21, 0x38, 0x17, + 0x4f, 0x28, 0x19, 0x3e, 0x48, 0x27, 0x30, 0x28, 0x33, 0x0c, 0x42, 0x04, + 0x4c, 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x3b, 0x3c, 0x00, + 0x3e, 0x25, 0x26, 0x25, 0x3b, 0x3b, 0x3d, 0x3d, 0x00, 0x41, 0x3c, 0x3b, + 0x3b, 0x3b, 0x3b, 0xb6, 0x23, 0x51, 0xb0, 0x27, 0x02, 0x44, 0x28, 0x17, + 0xde, 0x30, 0xe9, 0x06, 0x88, 0x15, 0xaf, 0x5f, 0xaf, 0x6d, 0x2f, 0xb3, + 0x72, 0x06, 0x6b, 0x31, 0x06, 0xf0, 0x7f, 0x00, 0x18, 0x17, 0x05, 0xd1, + 0x0d, 0xf0, 0x00, 0x98, 0x17, 0x05, 0x51, 0x95, 0x00, 0x78, 0x17, 0x05, + 0x72, 0x13, 0x28, 0x84, 0x6c, 0x9a, 0x21, 0xc9, 0x62, 0x06, 0xb8, 0x17, + 0xc8, 0xb9, 0x7c, 0xb7, 0x06, 0xd8, 0x17, 0xeb, 0x07, 0x73, 0x7f, 0x05, + 0xf8, 0x13, 0x78, 0x17, 0x3c, 0x28, 0x1b, 0x40, 0x06, 0x28, 0x13, 0x0f, + 0x34, 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x3c, 0x3d, 0x3f, 0x26, 0x27, + 0x26, 0x3c, 0x00, 0x3c, 0x3e, 0x3e, 0x3e, 0x3d, 0x3c, 0x3c, 0x3c, 0x00, + 0x3c, 0xda, 0x25, 0xac, 0x23, 0x00, 0x00, 0x45, 0x80, 0x28, 0x17, 0xf3, + 0x30, 0xaf, 0x30, 0xc8, 0x30, 0xda, 0x02, 0x30, 0xc6, 0x30, 0xeb, 0x30, + 0xd6, 0x20, 0x03, 0xaf, 0x11, 0x30, 0x02, 0x5e, 0x05, 0xbf, 0xaf, 0x74, + 0x00, 0x2e, 0x2f, 0x29, 0x54, 0x50, 0x2f, 0xa9, 0x74, 0x2f, 0xad, 0x72, + 0x2f, 0x39, 0x62, 0x00, 0x58, 0x75, 0x2c, 0x33, 0x67, 0x05, 0x8d, 0x2f, + 0x3f, 0x99, 0x74, 0x00, 0x2d, 0xad, 0x20, 0x83, 0xe9, 0xa0, 0x83, 0x6f, + 0x05, 0x40, 0x85, 0x3f, 0x99, 0x6e, 0x2c, 0x31, 0xf5, 0x38, 0x15, 0x06, + 0x31, 0x03, 0x50, 0x7f, 0x31, 0x7f, 0x69, 0x41, 0x81, 0x72, 0x2d, 0xa3, + 0xbc, 0x71, 0x7f, 0x6f, 0x05, 0x6e, 0xaf, 0x50, 0x7f, 0x00, 0x11, 0xff, + 0x05, 0x30, 0x7f, 0x23, 0x57, 0x03, 0x7c, 0x5f, 0x97, 0x5f, 0x21, 0x58, + 0x05, 0xb2, 0xf3, 0xbf, 0xff, 0x00, 0xc1, 0xc0, 0xb8, 0xd2, 0x98, 0xd3, + 0x4c, 0xd1, 0x00, 0x74, 0xb9, 0x80, 0xbd, 0x74, 0xb9, 0x6c, 0xd0, 0xb7, + 0x05, 0xf8, 0x21, 0x53, 0xa2, 0xfd, 0x06, 0x33, 0x81, 0x53, 0x48, 0x01, + 0x06, 0x91, 0xff, 0x38, 0x17, 0x40, 0x3d, 0x28, 0x11, 0x42, 0x04, 0x2d, + 0x00, 0x1f, 0x04, 0x51, 0x35, 0x28, 0x09, 0x35, 0x28, 0x23, 0x31, 0x04, + 0x43, 0x28, 0x29, 0x70, 0x33, 0x04, 0xe8, 0x13, 0x07, 0x54, 0xff, 0x10, + 0x0e, 0xd0, 0x7f, 0x3d, 0x40, 0x3c, 0x53, 0x00, 0x4a, 0x4a, 0x3d, 0x3d, + 0x40, 0x3f, 0x3f, 0x40, 0x00, 0x3d, 0x3d, 0x3d, 0x3d, 0xa1, 0x2a, 0x8e, + 0x15, 0x14, 0x00, 0x00, 0x46, 0x28, 0x17, 0xe9, 0x28, 0x15, 0xd5, 0x30, + 0xea, 0x06, 0x7d, 0x31, 0x3f, 0xaf, 0x3f, 0xab, 0x74, 0x2e, 0xb1, 0x76, + 0x0e, 0x20, 0x7f, 0x4f, 0xad, 0x29, 0x05, 0x6c, 0x2f, 0x9d, 0x73, 0x48, + 0x19, 0xb1, 0x0d, 0x77, 0x05, 0x4e, 0xc2, 0xb7, 0x7f, 0xaf, 0x6f, 0x2f, + 0xaf, 0x3f, 0xab, 0x64, 0x2f, 0xbb, 0xd0, 0x87, 0x04, 0xd1, 0x95, 0xad, + 0x70, 0x7f, 0xf3, 0x48, 0x9d, 0x64, 0x40, 0x83, 0x52, 0x13, 0xe1, 0x05, + 0x42, 0x13, 0x00, 0x28, 0x84, 0xc9, 0x62, 0x58, 0x62, 0x2b, 0x59, 0x80, + 0x06, 0x72, 0xff, 0xac, 0xc0, 0x7c, 0xb7, 0xa0, 0xd1, 0x04, 0x63, 0xd5, + 0x05, 0xf8, 0x0f, 0x08, 0x53, 0x7f, 0x20, 0x00, 0x28, 0x2f, 0x39, 0x52, + 0x91, 0xa8, 0x38, 0x2f, 0x29, 0x05, 0x48, 0x17, 0x40, 0x28, 0x1b, 0x42, + 0x04, 0x3e, 0x08, 0x04, 0x32, 0x04, 0x41, 0x28, 0x21, 0x30, 0x04, 0x4f, + 0x0a, 0x04, 0x20, 0x00, 0x3e, 0x28, 0x1b, 0x3b, 0x28, 0x33, 0x41, 0xb8, + 0x28, 0x31, 0x4c, 0x04, 0xa8, 0x1f, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, + 0xff, 0x3e, 0x3e, 0x40, 0x00, 0x27, 0x28, 0x27, 0x3e, 0x3e, 0x3f, 0x40, + 0x40, 0x20, 0x3e, 0x3e, 0x20, 0x01, 0xa5, 0x24, 0xb9, 0x20, 0x00, 0x00, + 0x00, 0x47, 0x64, 0x17, 0x53, 0xaa, 0x30, 0xbb, 0x00, 0x30, 0xc1, 0x30, + 0xa2, 0x30, 0x71, 0x51, 0x8c, 0x15, 0x54, 0xfd, 0x56, 0x05, 0xfd, 0x35, + 0x4e, 0x2f, 0x97, 0x72, 0x2f, 0xad, 0x55, 0x68, 0x2f, 0x2f, 0x4f, 0x2f, + 0xa7, 0x73, 0x4f, 0x33, 0x69, 0x2f, 0xc5, 0xd5, 0x05, 0x77, 0x97, 0x30, + 0x73, 0xe9, 0x40, 0x73, 0x65, 0x2d, 0x35, 0x64, 0x2f, 0xa7, 0x55, 0x2d, + 0x60, 0x95, 0x64, 0x2d, 0x45, 0x41, 0x47, 0xb5, 0x6e, 0x4f, 0x4d, 0xb1, + 0x04, 0x77, 0x97, 0x70, 0x2f, 0x9f, 0x38, 0x1d, 0x69, 0x00, 0x6b, 0x2f, + 0xb9, 0xad, 0x70, 0x7b, 0x6f, 0xa1, 0x0d, 0x65, 0x2f, 0xd3, 0xd0, 0x8b, + 0x6e, 0x04, 0x00, 0x7f, 0xb5, 0x50, 0x81, 0x63, 0x2f, 0xbf, 0x57, 0x9f, + 0x6c, 0x28, 0xaf, 0x27, 0x81, 0x93, 0x7d, 0x7a, 0x41, 0x93, 0x38, 0xb9, + 0x3f, 0xd7, 0x3f, 0xd9, 0x3e, 0x65, 0x72, 0x68, 0x51, 0x7d, 0x61, 0x28, + 0xdb, 0x31, 0x3d, 0x91, 0x2d, 0x01, 0x71, 0xbf, 0x50, 0xff, 0xfa, 0x00, + 0x00, 0x7d, 0xfe, 0x52, 0x0d, 0x72, 0x0b, 0x70, 0x91, 0x71, 0x1d, 0x3e, + 0xd7, 0x02, 0x30, 0x6d, 0x00, 0x1f, 0xff, 0x17, 0x00, 0x53, 0x65, 0x59, + 0x5e, 0x58, 0xaf, 0x68, 0x2d, 0x00, 0x00, 0x3f, 0x96, 0x70, 0x51, 0x3e, + 0x79, 0x1a, 0x04, 0x4f, 0x3b, 0x4e, 0x49, 0x4e, 0x05, 0x93, 0x0b, 0x81, + 0xbd, 0x00, 0x24, 0xc6, 0x38, 0xc1, 0xf0, 0xd2, 0x7c, 0xc5, 0x00, 0x20, + 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0xea, 0x06, 0x13, 0x7f, 0x72, + 0xeb, 0xb3, 0x7f, 0xeb, 0x06, 0x23, 0x7f, 0x61, 0x63, 0x6f, 0xe2, 0xde, + 0x62, 0x41, 0x3a, 0xa5, 0x6f, 0xc1, 0xf3, 0x78, 0x37, 0xd2, 0x31, 0x02, + 0xb8, 0x3d, 0x20, 0x22, 0x04, 0x35, 0x28, 0x0d, 0x3f, 0x04, 0x43, 0x48, + 0x07, 0x38, 0xaa, 0x48, 0x17, 0x20, 0x28, 0x2d, 0x35, 0x28, 0x25, 0x35, + 0x28, 0x31, 0x3d, 0xaa, 0x68, 0x27, 0x1e, 0x28, 0x33, 0x35, 0x28, 0x3d, + 0x38, 0x28, 0x35, 0x2d, 0x2e, 0x00, 0x10, 0x48, 0x33, 0x3d, 0x40, 0x0d, + 0x0a, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, 0x00, 0x2f, 0x33, 0x4c, + 0x3b, 0x45, 0x3f, 0x3f, 0x2f, 0x00, 0x35, 0x38, 0x2f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x96, 0x00, 0x1e, 0xc0, 0x1f, 0x00, 0x00, 0x48, 0x64, 0xb9, 0x00, + 0x30, 0xe2, 0x30, 0xec, 0x30, 0xf3, 0x30, 0xb9, 0x11, 0x30, 0xaf, 0x30, + 0x06, 0x3d, 0x33, 0x53, 0x00, 0x6d, 0x2f, 0xa9, 0xaa, 0x36, 0x55, 0x6e, + 0x2f, 0x33, 0x6b, 0x0e, 0x00, 0x7f, 0x4f, 0x48, 0x11, 0x61, 0xbe, 0x29, + 0x11, 0x74, 0x4f, 0xa7, 0x05, 0xf1, 0x0d, 0x7f, 0xaf, 0x37, 0xdd, 0x3f, + 0xab, 0x64, 0xee, 0x2f, 0xbb, 0x05, 0xb0, 0x87, 0x70, 0x7f, 0xf3, 0x29, + 0x7b, 0x78, 0x11, 0x05, 0xb2, 0x13, 0xaf, 0x00, 0x65, 0x69, 0x64, 0xf1, + 0x68, 0xaf, 0x65, 0x4b, 0x40, 0x51, 0x06, 0x32, 0xfd, 0x00, 0x00, 0xa4, + 0xc2, 0xb0, 0xba, 0x00, 0x0c, 0xb8, 0xa4, 0xc2, 0x6c, 0xd0, 0x20, 0x00, + 0x3b, 0xfc, 0xc8, 0x0f, 0x13, 0x7f, 0x77, 0xf9, 0x32, 0x93, 0xe3, 0x2f, + 0x43, 0x02, 0xb7, 0xf3, 0x82, 0x01, 0x3f, 0xe5, 0x21, 0x04, 0x3c, 0x04, + 0x3e, 0x28, 0x11, 0x35, 0xb5, 0x28, 0x01, 0x41, 0x48, 0x15, 0x38, 0x05, + 0x3e, 0x48, 0x25, 0x30, 0x28, 0x31, 0x1c, 0x42, 0x04, 0x4c, 0x02, 0xe7, + 0xf9, 0x10, 0x00, 0xd4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x40, 0x3f, 0x00, + 0x41, 0x28, 0x29, 0x28, 0x40, 0x40, 0x41, 0x41, 0x00, 0x43, 0x3f, 0x40, + 0x40, 0x40, 0x40, 0xf5, 0x26, 0x04, 0xca, 0x16, 0x00, 0x00, 0x49, 0x28, + 0x17, 0xbf, 0x30, 0x00, 0xf4, 0x30, 0xed, 0x30, 0xdd, 0x30, 0xea, 0x30, + 0x1a, 0x30, 0x57, 0xb9, 0x04, 0x5f, 0x14, 0x00, 0xc8, 0x17, 0x74, 0x2f, + 0x8f, 0x76, 0xb7, 0x2f, 0x9d, 0x6f, 0x2f, 0x37, 0x38, 0x21, 0x27, 0x06, + 0xe0, 0x7f, 0x05, 0xdd, 0xaf, 0xb7, 0x97, 0xd5, 0x3f, 0x8d, 0x31, 0x0d, + 0x77, 0x05, 0xa0, 0x8d, 0x54, 0x2f, 0xff, 0x72, 0x4f, 0xf7, 0x7e, 0x74, + 0x4f, 0x89, 0x3f, 0xff, 0x98, 0x1d, 0x05, 0x11, 0x9b, 0x00, 0x70, 0x7f, + 0x58, 0x1f, 0x74, 0x20, 0x00, 0xe1, 0x04, 0xe1, 0x9b, 0xaf, 0x65, 0x54, + 0x58, 0x2b, 0x00, 0x59, 0x57, 0x7f, 0xe2, 0x6c, 0x14, 0x5c, 0xb9, 0x04, + 0x8f, 0x86, 0x75, 0x3a, 0x53, 0x05, 0xf8, 0x17, 0xc0, 0xd0, 0x00, 0x0c, + 0xbe, 0x5c, 0xb8, 0xf4, 0xd3, 0x20, 0x00, 0x0e, 0xc0, 0xc9, 0x29, 0xbc, + 0x07, 0x13, 0x7f, 0x06, 0xf3, 0xff, 0x38, 0x19, 0x74, 0xb4, 0xa2, 0x95, + 0xf3, 0x62, 0x95, 0x04, 0x58, 0x21, 0x21, 0x27, 0xf9, 0x30, 0x04, 0x15, + 0x32, 0x04, 0x40, 0x28, 0x1d, 0x3f, 0x48, 0x21, 0x4c, 0x48, 0x1f, 0x15, + 0x38, 0x04, 0x39, 0x28, 0x1f, 0x3a, 0x20, 0x17, 0x30, 0x20, 0x09, 0xc0, + 0x0d, 0xb4, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x41, 0x41, 0x42, 0x3c, 0x53, + 0x52, 0x84, 0x20, 0x05, 0x42, 0x44, 0x41, 0x41, 0x20, 0x01, 0x09, 0x20, + 0x04, 0xda, 0x1d, 0x00, 0x00, 0x4a, 0x28, 0x17, 0xf4, 0x30, 0x04, 0xa7, + 0x30, 0xeb, 0x30, 0xc9, 0x28, 0x1b, 0xd5, 0x30, 0x0b, 0xb9, 0x30, 0xaf, + 0x30, 0x05, 0xdd, 0x37, 0x53, 0x28, 0x13, 0x36, 0x99, 0x5c, 0x64, 0x2f, + 0xb3, 0x6f, 0x28, 0x1f, 0x05, 0xff, 0xb3, 0x06, 0xf0, 0x7f, 0x4f, 0x00, + 0x55, 0x62, 0x2f, 0x97, 0x61, 0x2f, 0x95, 0x74, 0x4f, 0xa7, 0x77, 0xa1, + 0x0d, 0x7e, 0x77, 0x05, 0x2d, 0xc1, 0xb8, 0x97, 0x3f, 0xab, 0x78, 0x11, + 0x05, 0x71, 0x95, 0x79, 0x17, 0xf3, 0xe0, 0x49, 0x17, 0x78, 0x0f, 0x05, + 0x92, 0x13, 0xaf, 0x65, 0xf4, 0x7e, 0x14, 0x00, 0x5c, 0xb7, 0x5f, 0x1b, + 0x6d, 0x2b, 0x59, 0xaf, 0x18, 0x65, 0x4b, 0x51, 0x05, 0xd2, 0xfd, 0x38, + 0x17, 0xa0, 0xbc, 0x74, 0x00, 0xb9, 0xe4, 0xb4, 0x6d, 0xb8, 0xa4, 0xc2, + 0x6c, 0x07, 0xd0, 0x20, 0x00, 0xfc, 0xc8, 0x05, 0xff, 0xaf, 0x08, 0x13, + 0x7f, 0x38, 0x19, 0x58, 0x72, 0x6b, 0x2f, 0xe3, 0x04, 0x88, 0x11, 0x78, + 0x17, 0x32, 0x04, 0x35, 0xac, 0x28, 0x15, 0x34, 0x28, 0x11, 0x3e, 0x28, + 0x1f, 0x38, 0x13, 0x30, 0x04, 0x45, 0x4f, 0x28, 0x13, 0x3e, 0x04, 0x31, + 0x28, 0x25, 0x30, 0x28, 0x25, 0x70, 0x42, 0x28, 0x2b, 0x10, 0x04, 0x74, + 0xff, 0x10, 0x06, 0xf0, 0xff, 0x42, 0x42, 0x43, 0x29, 0x22, 0x2a, 0x29, + 0x20, 0x05, 0x43, 0x42, 0x42, 0x30, 0x01, 0x6a, 0x00, 0x28, 0x14, 0x2b, + 0x00, 0x00, 0x4b, 0x64, 0xbf, 0x0e, 0x30, 0xf3, 0x30, 0xdc, 0x28, 0x11, + 0x05, 0xf5, 0x0f, 0x9e, 0xaf, 0x61, 0x3e, 0x00, 0x6d, 0x27, 0x1b, 0x38, + 0x13, 0x0e, 0x30, 0x7f, 0xd8, 0x17, 0x91, 0x0d, 0x77, 0xf8, 0x05, 0x6e, + 0xb6, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x00, 0x38, 0x17, 0x05, 0xb2, + 0x13, 0x66, 0x57, 0xe2, 0x10, 0x6c, 0x2b, 0x59, 0x06, 0x72, 0xfd, 0x00, + 0x00, 0xd0, 0xd0, 0x0f, 0xf4, 0xbc, 0x04, 0xd5, 0x06, 0x18, 0x0f, 0x08, + 0x33, 0x7f, 0x05, 0xb8, 0x0f, 0x7f, 0xff, 0x5e, 0x22, 0x28, 0x05, 0x3c, + 0x28, 0x01, 0x06, 0x38, 0x13, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, + 0x43, 0x04, 0x43, 0x44, 0x2a, 0x2b, 0x2a, 0x20, 0x05, 0x44, 0x45, 0x20, + 0x43, 0x43, 0x20, 0x01, 0x7c, 0x25, 0x76, 0x1d, 0x00, 0x20, 0x00, 0x4c, + 0x28, 0x17, 0xbf, 0x30, 0xfc, 0x30, 0xeb, 0x20, 0x30, 0xb9, 0x20, 0x07, + 0xf3, 0x30, 0x71, 0x51, 0x8c, 0x15, 0x54, 0xfd, 0x56, 0x05, 0xf8, 0x17, + 0x74, 0x2f, 0x2f, 0x72, 0x4f, 0x31, 0x78, 0x61, 0x2e, 0xb5, 0x06, 0x18, + 0x97, 0x06, 0xb0, 0x7f, 0x3f, 0xaf, 0x70, 0x00, 0x75, 0xbd, 0x48, 0x1d, + 0x69, 0x4d, 0x2b, 0x05, 0xd1, 0x11, 0x90, 0x7f, 0x50, 0x81, 0x63, 0x29, + 0xa7, 0xb6, 0x5f, 0xb7, 0x6c, 0x05, 0x40, 0x8b, 0x50, 0xff, 0xfa, 0x00, + 0x00, 0x7d, 0x59, 0x23, 0x72, 0xa8, 0x62, 0x1b, 0x69, 0x49, 0x37, 0xe1, + 0x04, 0x22, 0x1d, 0x91, 0x97, 0x7c, 0x06, 0x97, 0xaf, 0x65, 0x66, 0x57, + 0x06, 0x12, 0xf9, 0x5f, 0xff, 0xc0, 0x00, 0xd0, 0xc0, 0xd0, 0x74, 0xb9, + 0x20, 0x00, 0xf5, 0x06, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x5b, 0x97, + 0x71, 0x63, 0x6a, 0xef, 0x2f, 0xb9, 0x06, 0x3c, 0x17, 0x31, 0xe5, 0xe1, + 0x41, 0xe5, 0x32, 0x7b, 0x58, 0x1b, 0xd2, 0x13, 0x88, 0x04, 0x98, 0x21, + 0x20, 0x04, 0x35, 0x28, 0x0f, 0x3f, 0x04, 0x43, 0xaa, 0x48, 0x09, 0x38, + 0x48, 0x19, 0x20, 0x48, 0x2d, 0x42, 0x28, 0x31, 0x40, 0x8f, 0x48, 0x19, + 0x30, 0x04, 0x3d, 0x04, 0x88, 0x1b, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, + 0xff, 0x28, 0x0f, 0x10, 0x4e, 0x39, 0x47, 0x28, 0x15, 0x45, 0x39, 0x44, + 0x44, 0x80, 0x20, 0x01, 0xab, 0x27, 0xf6, 0x22, 0x00, 0x00, 0x4d, 0x09, + 0x64, 0xc8, 0x30, 0xe0, 0x28, 0x13, 0xaf, 0x30, 0x06, 0x7d, 0x31, 0x56, + 0x54, 0x2f, 0xa9, 0x6d, 0x2f, 0x2d, 0x6b, 0x06, 0x6d, 0xb0, 0x06, 0xf0, + 0x7f, 0x4f, 0xbd, 0x48, 0x11, 0x61, 0x49, 0x15, 0x3f, 0xa7, 0x05, 0xf1, + 0x0d, 0x7f, 0xaf, 0x6f, 0x2f, 0xaf, 0xbb, 0x3f, 0xab, 0x64, 0x2f, 0xbb, + 0x05, 0xb0, 0x87, 0x70, 0x7f, 0xf3, 0x2a, 0x11, 0x98, 0x11, 0x80, 0x05, + 0x92, 0x13, 0x58, 0x62, 0x28, 0x67, 0xaf, 0x65, 0x4b, 0x40, 0x51, 0x06, + 0x72, 0xff, 0xb0, 0xd1, 0xa4, 0xc2, 0x6c, 0xd0, 0x0e, 0x20, 0x00, 0xfc, + 0xc8, 0x0e, 0xf3, 0x7f, 0x78, 0x11, 0x32, 0x8d, 0xe3, 0xe0, 0x2f, 0x3f, + 0x04, 0x98, 0x0b, 0xbf, 0xff, 0x22, 0x04, 0x3e, 0x04, 0x3c, 0xd5, 0x28, + 0x19, 0x38, 0x0f, 0x4f, 0x28, 0x11, 0x3e, 0x48, 0x1f, 0x30, 0x48, 0x0f, + 0x70, 0x4c, 0x04, 0x88, 0x0d, 0x0f, 0x94, 0xff, 0x10, 0x06, 0xf0, 0xff, + 0x45, 0x45, 0x4b, 0x2c, 0x00, 0x2d, 0x2c, 0x45, 0x45, 0x49, 0x47, 0x47, + 0x45, 0x40, 0x45, 0x20, 0x01, 0x2d, 0x28, 0x6b, 0x3c, 0x00, 0x00, 0x41, + 0x4e, 0x28, 0x17, 0xa5, 0x30, 0xfc, 0x30, 0xe9, 0x06, 0xa8, 0x17, 0x7f, + 0x75, 0x47, 0x17, 0x06, 0x68, 0x16, 0x48, 0x97, 0x06, 0xb0, 0x81, 0xf8, + 0x17, 0x05, 0xf1, 0x0d, 0x00, 0x78, 0x17, 0xe1, 0x05, 0x71, 0x95, 0x00, + 0x58, 0x17, 0x05, 0x92, 0x13, 0xfe, 0x56, 0xc9, 0x62, 0x06, 0x7b, 0x13, + 0x86, 0x3f, 0xff, 0x34, 0xd2, 0x7c, 0xb7, 0x06, 0x98, 0x15, 0x5b, 0x97, + 0x65, 0xf5, 0x06, 0xa3, 0x81, 0x73, 0xff, 0x06, 0x58, 0x15, 0x38, 0x17, + 0x43, 0x28, 0x07, 0x4c, 0x06, 0x88, 0x19, 0xc0, 0x07, 0x14, 0xff, 0x10, + 0x0e, 0xd0, 0x7f, 0x46, 0x46, 0x4c, 0x2e, 0x2e, 0x2d, 0x01, 0x46, 0x46, + 0x47, 0x49, 0x48, 0x46, 0x46, 0x20, 0x01, 0x0c, 0x8a, 0x26, 0xbf, 0x1a, + 0x2e, 0xad, 0x28, 0x17, 0xf4, 0x30, 0x14, 0xa7, 0x30, 0xea, 0x06, 0xa8, + 0x17, 0x76, 0x2e, 0xb1, 0x72, 0x00, 0x7b, 0x27, 0x06, 0x8c, 0xaf, 0x50, + 0x7f, 0x06, 0x78, 0x98, 0xf8, 0x17, 0x77, 0x05, 0xe0, 0x8d, 0x00, 0x78, + 0x17, 0xe0, 0x05, 0x71, 0x15, 0x00, 0x58, 0x17, 0x05, 0x91, 0x93, 0x79, + 0x72, 0xf4, 0x7e, 0x14, 0x40, 0x5c, 0x06, 0x98, 0x19, 0xb8, 0xd2, 0xa0, + 0xbc, 0xac, 0xb9, 0xf0, 0x06, 0x98, 0x19, 0x06, 0xf2, 0xff, 0x73, 0xff, + 0x06, 0x98, 0x17, 0x32, 0x04, 0x35, 0x04, 0x70, 0x40, 0x06, 0xa8, 0x17, + 0x07, 0x54, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x47, 0x48, 0x4f, 0x2f, 0x00, + 0x2f, 0x2e, 0x47, 0x47, 0x4f, 0x4b, 0x46, 0x48, 0x00, 0x47, 0x47, 0x47, + 0x47, 0x6e, 0x28, 0x8a, 0x19, 0x00, 0x00, 0x00, 0x50, 0x64, 0xc1, 0x30, + 0xe5, 0x30, 0x15, 0xe1, 0x30, 0xcb, 0x06, 0xa8, 0x17, 0x79, 0x2f, 0xaf, + 0x6d, 0x2e, 0xb5, 0x5d, 0x6e, 0x06, 0x48, 0x1b, 0x54, 0x4f, 0x2b, 0x70, + 0x81, 0x07, 0x18, 0x17, 0x6a, 0x05, 0xe0, 0x8b, 0xf5, 0x00, 0x78, 0x17, + 0x90, 0x87, 0x04, 0xd9, 0xb1, 0x00, 0x58, 0x17, 0x69, 0x42, 0x13, 0xe9, + 0x05, 0x21, 0x91, 0x08, 0xcb, 0x79, 0x0e, 0x66, 0x06, 0x98, 0x15, 0x00, + 0x00, 0x9c, 0x1a, 0xd2, 0x58, 0xba, 0x06, 0x98, 0x15, 0x3f, 0xaf, 0x6a, + 0x2f, 0x9d, 0x65, 0xf0, 0x06, 0x82, 0xff, 0x71, 0xeb, 0x33, 0xff, 0x06, + 0x38, 0x1b, 0x22, 0x04, 0x4e, 0x04, 0x5c, 0x3c, 0x28, 0x19, 0x3d, 0x06, + 0x68, 0x19, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x48, 0x49, 0x00, + 0x4a, 0x2b, 0x2c, 0x2b, 0x48, 0x48, 0x46, 0x46, 0x00, 0x49, 0x49, 0x48, + 0x48, 0x48, 0x48, 0xa3, 0x28, 0x00, 0x99, 0x2e, 0x00, 0x00, 0x51, 0x64, + 0xc8, 0x30, 0x00, 0xa5, 0x30, 0xf4, 0x30, 0xa1, 0x30, 0x71, 0x51, 0x0a, + 0x8c, 0x54, 0xfd, 0x56, 0x06, 0x3f, 0xaf, 0x75, 0x2f, 0xb1, 0x61, 0xf6, + 0x06, 0xac, 0xaf, 0x38, 0x15, 0x06, 0x90, 0x81, 0x3f, 0xaf, 0x70, 0x29, + 0x19, 0x38, 0x1d, 0x69, 0x23, 0x00, 0x6b, 0x4f, 0xab, 0x75, 0x00, 0x77, + 0x05, 0x81, 0x11, 0x90, 0x7f, 0xbd, 0x50, 0x81, 0x63, 0x28, 0xa3, 0x98, + 0x1d, 0x05, 0x11, 0x9b, 0x50, 0xff, 0xfa, 0xe0, 0x7d, 0xd0, 0x58, 0x1d, + 0x32, 0x19, 0xe1, 0x04, 0xef, 0xc8, 0x79, 0x72, 0xe6, 0x74, 0xc0, 0x06, + 0x72, 0xfb, 0x3f, 0xff, 0x2c, 0xd2, 0x14, 0xbc, 0x20, 0x00, 0x02, 0xf5, + 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x06, 0x72, 0xff, 0x65, 0xfa, 0x06, 0xa3, + 0x81, 0x73, 0xff, 0x78, 0x13, 0xd2, 0x0b, 0x05, 0x18, 0x19, 0x20, 0x28, + 0x13, 0x41, 0x0a, 0x04, 0x3f, 0x04, 0x43, 0x48, 0x0b, 0x38, 0x48, 0x1b, + 0x20, 0x8e, 0x28, 0x2d, 0x4b, 0x04, 0x32, 0x28, 0x25, 0x0d, 0x34, 0xff, + 0x10, 0x0e, 0xd0, 0x7f, 0x49, 0x04, 0x47, 0x4d, 0x51, 0x47, 0x48, 0x28, + 0x13, 0x4a, 0x3a, 0x00, 0x47, 0x49, 0x49, 0x49, 0x49, 0xc6, 0x24, 0x2a, + 0x40, 0x43, 0x2e, 0x2d, 0x64, 0xa6, 0x30, 0xc9, 0x30, 0xe0, 0x0a, 0x30, + 0xeb, 0x30, 0xc8, 0x06, 0x68, 0x19, 0x55, 0x2e, 0xa1, 0x6d, 0xb7, 0x2f, + 0xaf, 0x72, 0x2f, 0x2f, 0x06, 0x3d, 0xb5, 0x4f, 0x2f, 0x9f, 0x30, 0x81, + 0x38, 0x1d, 0xbf, 0x30, 0x83, 0x69, 0x2f, 0xab, 0x06, 0xd8, 0x17, 0xb1, + 0x11, 0x30, 0x8d, 0x04, 0xdf, 0x33, 0x00, 0x58, 0x17, 0xf0, 0xb1, 0x95, + 0x06, 0x78, 0x17, 0xd1, 0x07, 0x04, 0x7a, 0x39, 0x4c, 0x4e, 0xb7, 0x5f, + 0x02, 0x46, 0x7a, 0x14, 0x5c, 0x79, 0x72, 0x06, 0x5b, 0x19, 0xb0, 0x00, + 0xc6, 0xdc, 0xb4, 0x34, 0xbb, 0x74, 0xb9, 0xb8, 0x5a, 0xd2, 0x06, 0x58, + 0x1d, 0x4f, 0x2f, 0xa9, 0x52, 0xff, 0x65, 0x62, 0xff, 0xeb, 0xb0, 0x06, + 0x23, 0xff, 0xfa, 0x81, 0xe5, 0x05, 0xf8, 0x1f, 0x23, 0x04, 0x34, 0x04, + 0x46, 0x3c, 0x28, 0x15, 0x40, 0x04, 0x42, 0x28, 0x1f, 0x38, 0x15, 0x4f, + 0xb8, 0x28, 0x17, 0x40, 0x00, 0x28, 0x2d, 0x0c, 0x54, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x4a, 0x4a, 0x34, 0x00, 0x52, 0x49, 0x49, 0x4a, 0x4a, 0x32, + 0x4c, 0x4a, 0x40, 0x4a, 0x30, 0x01, 0x6a, 0x28, 0xd1, 0x25, 0x00, 0x00, + 0x40, 0x53, 0x28, 0x17, 0xea, 0x30, 0xe4, 0x30, 0xce, 0x30, 0x00, 0xd5, + 0x30, 0xb9, 0x30, 0xaf, 0x30, 0xde, 0x5d, 0x82, 0x06, 0x18, 0x17, 0x6c, + 0x00, 0x27, 0x00, 0x79, 0x2f, 0xaf, 0x6e, 0x8f, 0x2f, 0xb9, 0x76, 0x00, + 0x73, 0x2f, 0x33, 0x05, 0xf8, 0x17, 0x3f, 0xa9, 0x06, 0x90, 0x7f, 0xa8, + 0x3f, 0xa7, 0x61, 0x20, 0xf7, 0x74, 0x48, 0x13, 0x6c, 0x00, 0x6a, 0xb5, + 0x61, 0x0b, 0x77, 0x05, 0x41, 0x0b, 0x3f, 0xaf, 0x67, 0x2f, 0xa9, 0x6f, + 0x28, 0x7f, 0xb7, 0x3f, 0xa5, 0x64, 0x2f, 0xb5, 0x50, 0x87, 0x27, 0x80, + 0x89, 0x04, 0xb1, 0x95, 0x70, 0x7f, 0x74, 0xf3, 0x28, 0xff, 0x98, 0x11, + 0x3e, 0x2f, 0xe1, 0x05, 0x42, 0x11, 0x4c, 0x4e, 0x00, 0xcc, 0x91, 0x6c, + 0x62, 0xfa, 0x8b, 0x2b, 0x59, 0x08, 0xaf, 0x65, 0x4b, 0x51, 0x06, 0x12, + 0xff, 0xb8, 0xc6, 0xac, 0x00, 0xb9, 0x7c, 0xc5, 0x89, 0xb1, 0xa4, 0xc2, + 0x6c, 0x05, 0xd0, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x1b, 0x17, 0x65, 0xa2, + 0x73, 0xfb, 0x06, 0x13, 0x7f, 0x51, 0xeb, 0xb3, 0xfd, 0x78, 0x19, 0x32, + 0x95, 0xe3, 0x2b, 0xaf, 0x04, 0x98, 0x13, 0x88, 0x58, 0x17, 0x3b, 0x04, + 0x4c, 0x28, 0x0b, 0x3d, 0x04, 0x3e, 0x2a, 0x04, 0x32, 0xa8, 0x19, 0x3e, + 0x48, 0x11, 0x30, 0x28, 0x2b, 0x42, 0xe0, 0x20, 0x1f, 0x0c, 0x94, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x4b, 0x4b, 0x35, 0x30, 0x30, 0x01, 0x2f, 0x4b, + 0x4b, 0x33, 0x4d, 0x4b, 0x4b, 0x30, 0x01, 0x00, 0xa0, 0x26, 0x64, 0x22, + 0x00, 0x00, 0x54, 0x64, 0x00, 0xf4, 0x30, 0xe9, 0x30, 0xb8, 0x30, 0xfc, + 0x30, 0x11, 0xdf, 0x30, 0xeb, 0x06, 0x28, 0x15, 0x00, 0x00, 0x56, 0x47, + 0x15, 0xad, 0x36, 0x8d, 0x6d, 0x2f, 0xab, 0x72, 0x0e, 0x00, 0x7f, 0xd8, + 0x17, 0x57, 0x06, 0x01, 0x0d, 0xf4, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, + 0x00, 0x38, 0x17, 0x72, 0x13, 0xed, 0x05, 0x22, 0x13, 0x17, 0x5f, 0x00, + 0xc9, 0x62, 0xfa, 0x57, 0x73, 0x7c, 0x14, 0x5c, 0x80, 0x06, 0x32, 0xfd, + 0x00, 0x00, 0x14, 0xbe, 0x7c, 0xb7, 0x14, 0x07, 0xb5, 0xf8, 0xbb, 0x74, + 0xb9, 0x06, 0x38, 0x15, 0x08, 0x13, 0x7f, 0x05, 0xd8, 0x15, 0x10, 0x00, + 0x00, 0x12, 0x47, 0xfd, 0x34, 0x04, 0x38, 0x04, 0x5c, 0x3c, 0x20, 0x03, + 0x40, 0x06, 0x08, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x4c, + 0x4c, 0x08, 0x50, 0x31, 0x31, 0x30, 0x20, 0x05, 0x4e, 0x07, 0x4c, 0x43, + 0x4c, 0x20, 0x01, 0xed, 0x27, 0xbd, 0x1c, 0x2f, 0xad, 0x28, 0x17, 0x44, + 0xa9, 0x28, 0x11, 0xb4, 0x30, 0xb0, 0x28, 0x1f, 0xfc, 0x30, 0x55, 0xc9, + 0x06, 0x08, 0x1b, 0x56, 0x2f, 0xa5, 0x6c, 0x2e, 0xb1, 0x6f, 0x2e, 0xb5, + 0x7f, 0x72, 0x48, 0x21, 0x0d, 0xd0, 0x7f, 0xf8, 0x17, 0x05, 0xf1, 0x0d, + 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0x00, 0x58, 0x17, 0xa0, 0xf2, 0x13, + 0x6f, 0x04, 0x8f, 0xc6, 0x0f, 0x4f, 0x14, 0x5c, 0xa0, 0x04, 0x52, 0x3c, + 0x68, 0xd2, 0x52, 0x06, 0x58, 0x17, 0xfc, 0xbc, 0x00, 0xe0, 0xac, 0xf8, + 0xad, 0x7c, 0xb7, 0xdc, 0xb4, 0xe8, 0x06, 0x58, 0x17, 0x06, 0x12, 0x71, + 0x00, 0xf3, 0xff, 0x6f, 0x05, 0xc8, 0x1b, 0x12, 0x04, 0x3e, 0xaf, 0x28, + 0x19, 0x33, 0x20, 0x05, 0x33, 0x28, 0x15, 0x38, 0x21, 0x05, 0xd8, 0x19, + 0x0e, 0xf4, 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x4d, 0x4d, 0x51, 0x32, + 0x32, 0x31, 0x4d, 0x02, 0x4d, 0x53, 0x4f, 0x08, 0x4d, 0x4d, 0x20, 0x01, + 0xa1, 0x1a, 0x22, 0xa8, 0x1f, 0x2f, 0xad, 0x48, 0x17, 0xed, 0x28, 0x15, + 0xc0, 0xef, 0x06, 0x08, 0x11, 0xb8, 0x17, 0x38, 0x15, 0x64, 0x2f, 0xb7, + 0x0e, 0x10, 0x7f, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x0d, 0xe8, 0x00, 0xb8, + 0x17, 0x05, 0x31, 0x95, 0x00, 0x58, 0x17, 0xf3, 0x05, 0x82, 0x13, 0x83, + 0x6c, 0x1b, 0x06, 0x6d, 0x3c, 0x68, 0xbe, 0x8f, 0x06, 0x58, 0x15, 0x38, + 0x17, 0x5c, 0x07, 0xb8, 0xf8, 0xad, 0xe4, 0xb2, 0x06, 0x58, 0x15, 0x07, + 0xf3, 0x7f, 0x05, 0xb8, 0x11, 0xdc, 0xb8, 0x17, 0x38, 0x15, 0x3e, 0x06, + 0x08, 0x13, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x4e, 0x4e, 0x00, + 0x52, 0x33, 0x33, 0x32, 0x4e, 0x4e, 0x51, 0x50, 0x10, 0x09, 0x4e, 0x4e, + 0x20, 0x01, 0x1c, 0x2a, 0x5f, 0x1c, 0xc5, 0x2c, 0x2d, 0x68, 0x17, 0xcd, + 0x30, 0xb8, 0x06, 0xa8, 0x17, 0x72, 0x6e, 0xad, 0x16, 0x7a, 0x00, 0x68, + 0x06, 0xc0, 0x7f, 0x6a, 0x07, 0x48, 0x17, 0x71, 0x0d, 0x73, 0x39, 0x00, + 0x63, 0x05, 0x21, 0x0f, 0x00, 0x98, 0x17, 0x71, 0x95, 0x7e, 0x01, 0x06, + 0x18, 0x17, 0xe0, 0x32, 0x13, 0x38, 0x29, 0x05, 0x12, 0x13, 0x83, 0x6c, + 0x57, 0x7f, 0x85, 0x14, 0x6d, 0xc0, 0x4e, 0x06, 0x78, 0x17, 0xf4, 0x28, + 0x17, 0x24, 0xb1, 0x3f, 0xdc, 0xc2, 0x06, 0xb8, 0x17, 0x93, 0x7f, 0x06, + 0x13, 0x01, 0xf3, 0xff, 0x05, 0xf8, 0x19, 0x38, 0x17, 0x41, 0x40, 0x28, + 0x1b, 0x3d, 0x04, 0x35, 0x04, 0x36, 0x06, 0x68, 0x17, 0xc0, 0x07, 0x74, + 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x4f, 0x4f, 0x53, 0x34, 0x34, 0x33, 0x01, + 0x4f, 0x4f, 0x52, 0x51, 0x0a, 0x4f, 0x4f, 0x20, 0x01, 0x00, 0xbe, 0x24, + 0xe2, 0x1b, 0x00, 0x00, 0x58, 0x64, 0x14, 0xe4, 0x30, 0xde, 0x28, 0x17, + 0xfb, 0x28, 0x19, 0xcd, 0x30, 0x00, 0xc4, 0x30, 0xea, 0x81, 0xbb, 0x6c, + 0xa1, 0x7b, 0x2a, 0x3a, 0x53, 0x05, 0x9f, 0xb8, 0x59, 0x2f, 0xa5, 0x6d, + 0x2f, 0xa9, 0x6c, 0x0d, 0x00, 0x2d, 0x00, 0x4e, 0x2e, 0xbb, 0x3e, 0xb5, + 0x74, 0x2f, 0x3d, 0xac, 0x05, 0x7f, 0xba, 0x49, 0x80, 0x7f, 0x69, 0x2f, + 0x39, 0x06, 0x1e, 0x33, 0x41, 0x00, 0x6a, 0x75, 0x28, 0x11, 0x3f, 0xad, + 0x6f, 0x21, 0x07, 0x65, 0x2d, 0x2d, 0x20, 0x2e, 0x00, 0x4b, 0x4d, 0x33, + 0x69, 0x28, 0x2b, 0x5f, 0x41, 0x30, 0x13, 0x4a, 0xb5, 0x00, 0x01, 0x27, + 0x7a, 0x41, 0x2d, 0x02, 0xff, 0xcc, 0x43, 0x2f, 0xab, 0x72, 0x28, 0x81, + 0xd7, 0x39, 0x99, 0x3f, 0x9d, 0x72, 0x48, 0x23, 0x20, 0xe0, 0x97, 0x30, + 0x11, 0x90, 0x81, 0x55, 0x6f, 0xa1, 0xab, 0x63, 0x02, 0xef, 0xcf, 0x44, + 0x40, 0xe7, 0x74, 0x40, 0x77, 0xbf, 0x31, 0x07, 0x20, 0x2e, 0xb5, 0x31, + 0x11, 0x38, 0x27, 0x70, 0x79, 0x58, 0x2d, 0x92, 0x29, 0xa0, 0x50, 0x7f, + 0xe9, 0x03, 0x42, 0x2b, 0x9a, 0x4e, 0x6c, 0x9a, 0x14, 0x00, 0x5c, 0x2d, + 0x00, 0x85, 0x6d, 0x85, 0x6d, 0x28, 0x60, 0x83, 0x32, 0xff, 0x05, 0xb2, + 0xfd, 0x00, 0x00, 0x7c, 0xc5, 0xd0, 0x40, 0xb9, 0x38, 0x19, 0x24, 0xb1, + 0x20, 0xce, 0x20, 0x00, 0x03, 0x90, 0xc7, 0x58, 0xce, 0x6c, 0xad, 0x05, + 0xbf, 0xb6, 0x92, 0x57, 0x18, 0x69, 0x00, 0xeb, 0x06, 0x2e, 0xaf, 0x06, + 0xf3, 0xff, 0x2f, 0x04, 0x3c, 0xa3, 0x28, 0x09, 0x3b, 0x28, 0x1d, 0x2d, + 0x00, 0x1d, 0x28, 0x1b, 0x38, 0x1f, 0x44, 0x46, 0x28, 0x1d, 0x38, 0x04, + 0x39, 0x28, 0x1d, 0x30, 0x04, 0x68, 0x32, 0x28, 0x17, 0x38, 0x35, 0x3e, + 0x20, 0x27, 0x3d, 0x04, 0x4b, 0xa0, 0x40, 0x15, 0x3e, 0x28, 0x3d, 0x40, + 0x04, 0x43, 0x04, 0x33, 0xe0, 0x03, 0x28, 0x2f, 0x06, 0xf4, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x50, 0x50, 0x0d, 0x02, 0x04, 0x00, 0x05, 0x50, 0x50, + 0x13, 0x52, 0x52, 0x50, 0x50, 0x8c, 0x30, 0x01, 0x2f, 0x5c, 0x2f, 0x27, + 0x95, 0x28, 0x17, 0xed, 0x30, 0x00, 0xb9, 0x30, 0xe9, 0x30, 0xf4, 0x30, + 0xea, 0x30, 0xea, 0x06, 0x3d, 0x33, 0x38, 0x17, 0x3f, 0xaf, 0x73, 0x4f, + 0x35, 0x76, 0x2f, 0x3b, 0x27, 0xf3, 0x05, 0xcf, 0xb5, 0x38, 0x17, 0xd0, + 0x7f, 0x05, 0xe9, 0xaf, 0x00, 0x62, 0x40, 0xf9, 0x37, 0x1b, 0xde, 0x57, + 0xfd, 0x91, 0x0d, 0x77, 0x05, 0x20, 0x8d, 0x7f, 0xaf, 0x5e, 0x31, 0x3f, + 0xb1, 0x69, 0xfc, 0x00, 0x00, 0x87, 0x04, 0xb1, 0x95, 0x70, 0x7f, 0x38, + 0x07, 0xb8, 0x01, 0x05, 0x71, 0x93, 0xc5, 0x96, 0x00, 0x57, 0x7f, 0xaf, + 0x65, 0xc9, 0x62, 0x2b, 0x59, 0x20, 0x14, 0x5c, 0x06, 0x32, 0xff, 0x7c, + 0xc5, 0x5c, 0xb8, 0xac, 0x00, 0xc2, 0x7c, 0xb7, 0x14, 0xbe, 0x20, 0x00, + 0xfc, 0x71, 0xc8, 0x06, 0x1a, 0x98, 0x00, 0x11, 0xe9, 0x06, 0xf3, 0xff, + 0x20, 0x00, 0x28, 0x4b, 0x17, 0xaa, 0x32, 0x95, 0xe3, 0x2f, 0x4d, 0x29, + 0x04, 0xe8, 0x17, 0x40, 0x28, 0x13, 0x41, 0xd1, 0x28, 0x19, 0x38, 0x03, + 0x41, 0x28, 0x11, 0x30, 0x04, 0x4f, 0x47, 0xfb, 0x57, 0x31, 0x40, 0x13, + 0x41, 0x28, 0x17, 0x4c, 0x03, 0x27, 0xff, 0x08, 0x74, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x00, 0x51, 0x51, 0x0e, 0x0e, 0x0f, 0x34, 0x51, 0x51, 0x04, + 0x14, 0x53, 0x53, 0x51, 0x51, 0x20, 0x01, 0xf8, 0x28, 0x00, 0x56, 0x1c, + 0x00, 0x00, 0x5a, 0x64, 0xe6, 0x30, 0x0e, 0xc0, 0x30, 0xe4, 0x30, 0x3d, + 0x27, 0x06, 0x38, 0x15, 0x3c, 0x2f, 0x65, 0xde, 0x28, 0x0d, 0x3f, 0x1f, + 0x79, 0x06, 0x30, 0x7e, 0xe7, 0x97, 0x5e, 0xab, 0x9f, 0xbd, 0x20, 0x22, + 0x00, 0x6a, 0x2f, 0xcf, 0x69, 0x00, 0x66, 0x04, 0xad, 0xaf, 0xfc, 0xab, + 0x47, 0x8b, 0x73, 0x2f, 0xb3, 0x68, 0x2f, 0x83, 0x73, 0x00, 0x0f, 0xab, + 0x50, 0x13, 0x5e, 0x47, 0x2f, 0x9f, 0x62, 0x2f, 0xdb, 0x3f, 0x21, 0x04, + 0xb8, 0x17, 0xd0, 0x7b, 0x61, 0xaa, 0x2f, 0xbf, 0x45, 0x28, 0xb9, 0x72, + 0x2f, 0xc5, 0x69, 0x20, 0xa1, 0x61, 0xf7, 0x04, 0xe8, 0x17, 0x50, 0xf9, + 0x38, 0x23, 0x70, 0x7d, 0x48, 0x40, 0xf7, 0x36, 0x27, 0x04, 0x10, 0x7b, + 0x84, 0x3f, 0xff, 0xb9, 0x72, 0x2a, 0x59, 0x06, 0x92, 0xfd, 0x00, 0x00, + 0x00, 0x20, 0xc7, 0xdc, 0xd0, 0x78, 0xc7, 0x20, 0x00, 0x0a, 0x90, 0xc7, + 0x58, 0xce, 0x06, 0x58, 0x17, 0x6f, 0x2b, 0x95, 0x64, 0xfe, 0x2f, 0xa1, + 0x00, 0x11, 0xfd, 0x3a, 0x27, 0xba, 0xb7, 0x04, 0xba, 0x97, 0x38, 0x01, + 0x00, 0x31, 0xff, 0x4a, 0xa2, 0x23, 0x91, 0x64, 0x04, 0x82, 0x7d, 0x00, + 0x00, 0x15, 0x28, 0x0d, 0x40, 0x0d, 0x04, 0x35, 0x04, 0x39, 0xa8, 0x13, + 0x38, 0x21, 0x42, 0x28, 0x2d, 0x5e, 0x3d, 0x28, 0x31, 0x3c, 0x20, 0x05, + 0x04, 0xb8, 0x29, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x52, 0x00, + 0x52, 0x2f, 0x05, 0x06, 0x06, 0x52, 0x52, 0x15, 0x08, 0x3a, 0x0b, 0x52, + 0x52, 0x20, 0x01, 0xb0, 0x22, 0x87, 0x00, 0x5e, 0x00, 0x00, 0x5b, 0x64, + 0xb6, 0x30, 0xd0, 0x00, 0x30, 0xa4, 0x30, 0xab, 0x30, 0xea, 0x30, 0xa8, + 0x05, 0x30, 0x30, 0x57, 0xb9, 0x65, 0x05, 0xfd, 0x31, 0x5a, 0x2f, 0xaf, + 0x46, 0x62, 0x2f, 0xb3, 0x79, 0x00, 0x6b, 0x2f, 0xb9, 0x3e, 0x97, 0x79, + 0xd6, 0x2e, 0xc1, 0x05, 0x9f, 0xb4, 0x54, 0x46, 0xf3, 0x6e, 0x2f, 0xaf, + 0x30, 0x85, 0xef, 0xf5, 0x60, 0x85, 0x37, 0x7f, 0x05, 0x61, 0x97, 0xaf, + 0xaf, 0x20, 0xe0, 0x8d, 0x69, 0xa0, 0x8d, 0x57, 0x6e, 0x04, 0x80, 0xff, + 0x65, 0x2f, 0x9b, 0x72, 0x2f, 0xb1, 0x39, 0x0f, 0x30, 0x07, 0xdb, 0x35, + 0x9f, 0x3f, 0xb7, 0x6c, 0x4f, 0xad, 0xf0, 0x93, 0x6a, 0x81, 0x21, 0x03, + 0x58, 0x23, 0xb8, 0x00, 0x90, 0x7f, 0x20, 0x82, 0x1b, 0xb1, 0x07, 0x03, + 0xff, 0xd1, 0x16, 0x59, 0x1d, 0x00, 0x8d, 0xa0, 0x52, 0x14, 0x5c, 0xb9, + 0x8f, 0x86, 0x10, 0x75, 0x3a, 0x53, 0x06, 0x1f, 0xaf, 0x90, 0xc7, 0x14, + 0xbc, 0x00, 0x74, 0xc7, 0x7c, 0xce, 0x20, 0x00, 0xc0, 0xc9, 0x3c, 0x29, + 0xbc, 0x06, 0x1b, 0x99, 0x00, 0x52, 0x71, 0x06, 0xf0, 0x7f, 0x32, 0x5d, + 0x20, 0x00, 0x6a, 0x28, 0x2b, 0xab, 0x92, 0x9d, 0xf3, 0x62, 0x9d, 0x29, + 0x03, 0xcf, 0xbc, 0x17, 0xab, 0x28, 0x0b, 0x31, 0x28, 0x0f, 0x39, 0x48, + 0x15, 0x3b, 0x27, 0xf1, 0x38, 0x1f, 0x47, 0x38, 0x28, 0x27, 0x20, 0x00, + 0x3a, 0x28, 0x31, 0x30, 0x19, 0x0c, 0xb4, 0xff, 0x80, 0x10, 0x0e, 0xf0, + 0x7f, 0x53, 0x53, 0x4e, 0x3d, 0x4e, 0x53, 0x53, 0x08, 0x53, 0x4a, 0x48, + 0x0c, 0x20, 0x05, 0x53, 0x53, 0x03, 0x10, 0x25, 0xb6, 0x50, 0x00, 0x3f, + 0xff, 0x01, 0x2b, 0x29, 0x06, 0x00, 0x05, 0x01, 0x01, 0x01, 0x2c, 0x2b, + 0x1e, 0x2b, 0x80, 0x20, 0x06, 0x01, 0x02, 0x01, 0x01, 0x3e, 0x3c, 0x35, + 0x40, 0x02, 0x20, 0x06, 0x2c, 0x01, 0x02, 0x02, 0x02, 0x02, 0x00, 0x03, + 0x0f, 0x03, 0x3f, 0x3a, 0x36, 0x03, 0x03, 0x08, 0x03, 0x02, 0x2d, 0x0f, + 0x20, 0x05, 0x03, 0x04, 0x02, 0x00, 0x02, 0x35, 0x4c, 0x4b, 0x04, 0x04, + 0x02, 0x03, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x05, 0x03, 0x02, + 0x04, 0x07, 0x07, 0x07, 0x05, 0x05, 0x30, 0x11, 0x05, 0x00, 0x05, 0x05, + 0x05, 0x06, 0x04, 0x05, 0x08, 0x08, 0x08, 0x08, 0x06, 0x06, 0x05, 0x20, + 0x18, 0x06, 0x06, 0x06, 0x00, 0x06, 0x07, 0x05, 0x06, 0x09, 0x09, 0x09, + 0x07, 0x30, 0x07, 0x06, 0x20, 0x18, 0x20, 0x28, 0x07, 0x08, 0x06, 0x07, + 0x00, 0x40, 0x37, 0x37, 0x08, 0x08, 0x07, 0x07, 0x2e, 0x40, 0x06, 0x20, + 0x28, 0x08, 0x09, 0x07, 0x08, 0x0a, 0x0a, 0x01, 0x0a, 0x09, 0x09, 0x08, + 0x08, 0x05, 0x07, 0x20, 0x28, 0x01, 0x09, 0x0a, 0x08, 0x0a, 0x0b, 0x0b, + 0x0b, 0x30, 0x12, 0x40, 0x06, 0x30, 0x18, 0x0a, 0x0b, 0x09, 0x09, 0x41, + 0x3d, 0x01, 0x38, 0x0b, 0x0b, 0x09, 0x0a, 0x2f, 0x09, 0x20, 0x18, 0x00, + 0x0b, 0x0c, 0x0a, 0x47, 0x4f, 0x35, 0x3a, 0x0c, 0x00, 0x0c, 0x4c, 0x0f, + 0x4f, 0x0a, 0x0c, 0x0c, 0x0c, 0x04, 0x0c, 0x0d, 0x0b, 0x46, 0x2d, 0x20, + 0x05, 0x0d, 0x4b, 0x00, 0x10, 0x4e, 0x0b, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, + 0x20, 0x0c, 0x48, 0x20, 0xa2, 0x0e, 0x0e, 0x4d, 0x11, 0x51, 0x00, 0x0c, + 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0d, 0x49, 0x00, 0x50, 0x36, 0x3b, 0x0f, + 0x0f, 0x4e, 0x12, 0x50, 0x00, 0x0d, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x0e, + 0x0c, 0x00, 0x43, 0x38, 0x3c, 0x10, 0x10, 0x0e, 0x13, 0x30, 0x00, 0x0e, + 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x0f, 0x00, 0x44, 0x41, 0x3d, 0x11, + 0x11, 0x0f, 0x15, 0x31, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11, 0x12, 0x11, + 0x10, 0x80, 0x20, 0x4d, 0x12, 0x12, 0x10, 0x16, 0x0e, 0x11, 0x12, 0x00, + 0x12, 0x12, 0x12, 0x13, 0x12, 0x11, 0x0d, 0x0e, 0x00, 0x0e, 0x13, 0x13, + 0x11, 0x17, 0x0d, 0x12, 0x13, 0x00, 0x13, 0x13, 0x13, 0x14, 0x13, 0x12, + 0x45, 0x3e, 0x00, 0x3f, 0x14, 0x14, 0x16, 0x0b, 0x0f, 0x13, 0x14, 0x00, + 0x14, 0x14, 0x14, 0x15, 0x14, 0x13, 0x0f, 0x10, 0x00, 0x0f, 0x15, 0x15, + 0x17, 0x18, 0x10, 0x14, 0x15, 0x00, 0x15, 0x15, 0x15, 0x16, 0x15, 0x14, + 0x46, 0x3f, 0x00, 0x40, 0x16, 0x16, 0x18, 0x0d, 0x32, 0x15, 0x16, 0x02, + 0x16, 0x16, 0x16, 0x17, 0x16, 0x15, 0x20, 0x63, 0x17, 0x00, 0x17, 0x19, + 0x19, 0x11, 0x16, 0x17, 0x17, 0x17, 0x00, 0x17, 0x18, 0x17, 0x16, 0x37, + 0x4d, 0x4d, 0x18, 0x00, 0x18, 0x1a, 0x1a, 0x12, 0x17, 0x18, 0x18, 0x18, + 0x00, 0x18, 0x19, 0x18, 0x17, 0x47, 0x48, 0x41, 0x19, 0x00, 0x19, 0x1b, + 0x1b, 0x13, 0x18, 0x19, 0x19, 0x19, 0x00, 0x19, 0x1a, 0x19, 0x0b, 0x48, + 0x40, 0x39, 0x1a, 0x00, 0x1a, 0x1c, 0x0e, 0x33, 0x19, 0x1a, 0x1a, 0x1a, + 0x08, 0x1a, 0x1b, 0x1a, 0x18, 0x20, 0x93, 0x1b, 0x1b, 0x1d, 0x00, 0x1c, + 0x14, 0x1a, 0x1b, 0x1b, 0x1b, 0x1b, 0x1c, 0x00, 0x1b, 0x19, 0x36, 0x4f, + 0x4c, 0x1c, 0x1c, 0x0b, 0x00, 0x1d, 0x4c, 0x1b, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1d, 0x00, 0x1c, 0x1a, 0x42, 0x42, 0x3e, 0x1d, 0x1d, 0x0c, 0x00, 0x0c, + 0x3b, 0x1c, 0x1d, 0x1d, 0x1d, 0x1d, 0x1e, 0x00, 0x1d, 0x1b, 0x01, 0x01, + 0x03, 0x1e, 0x1e, 0x0d, 0x00, 0x1e, 0x4d, 0x1d, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1f, 0x20, 0x1e, 0x1c, 0x20, 0xc3, 0x1f, 0x1f, 0x1e, 0x1f, 0x15, 0x00, + 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x20, 0x1f, 0x1d, 0x00, 0x49, 0x43, 0x42, + 0x20, 0x20, 0x21, 0x20, 0x34, 0x14, 0x1f, 0x20, 0x20, 0x30, 0x07, 0x1e, + 0x20, 0xd3, 0x21, 0x21, 0x02, 0x22, 0x21, 0x16, 0x20, 0x21, 0x21, 0x30, + 0x07, 0x21, 0x00, 0x38, 0x50, 0x4e, 0x22, 0x22, 0x23, 0x22, 0x17, 0x10, + 0x21, 0x22, 0x22, 0x30, 0x07, 0x22, 0x39, 0x51, 0x4f, 0x00, 0x23, 0x23, + 0x24, 0x23, 0x18, 0x22, 0x23, 0x23, 0xa0, 0x30, 0x07, 0x1f, 0x20, 0xf3, + 0x24, 0x24, 0x1f, 0x24, 0x19, 0x00, 0x23, 0x24, 0x24, 0x24, 0x24, 0x25, + 0x24, 0x20, 0x80, 0x20, 0xf3, 0x25, 0x25, 0x20, 0x25, 0x1a, 0x24, 0x25, + 0x02, 0x25, 0x25, 0x25, 0x26, 0x25, 0x23, 0x20, 0xf3, 0x26, 0x00, 0x26, + 0x25, 0x26, 0x1b, 0x25, 0x26, 0x26, 0x26, 0x08, 0x26, 0x27, 0x26, 0x24, + 0x20, 0xf3, 0x27, 0x27, 0x26, 0x00, 0x27, 0x1c, 0x26, 0x27, 0x27, 0x27, + 0x27, 0x28, 0x20, 0x27, 0x25, 0x20, 0xf3, 0x28, 0x28, 0x27, 0x28, 0x1d, + 0x00, 0x27, 0x28, 0x28, 0x28, 0x28, 0x29, 0x28, 0x26, 0x00, 0x4a, 0x44, + 0x43, 0x29, 0x29, 0x28, 0x29, 0x35, 0x00, 0x28, 0x29, 0x29, 0x29, 0x29, + 0x2a, 0x29, 0x27, 0x00, 0x4b, 0x45, 0x44, 0x2a, 0x2a, 0x2a, 0x2a, 0x36, + 0x44, 0x29, 0x30, 0x05, 0x2b, 0x2a, 0x28, 0x21, 0x13, 0x2b, 0x2b, 0x08, + 0x2b, 0x2c, 0x1f, 0x2a, 0x20, 0x05, 0x2b, 0x2c, 0x2c, 0x40, 0x2a, 0x21, + 0x13, 0x2c, 0x2c, 0x29, 0x2d, 0x20, 0x2c, 0x44, 0x2c, 0x20, 0x01, 0x2d, + 0x2d, 0x2b, 0x22, 0x94, 0x2d, 0x2d, 0x19, 0x2d, 0x2e, 0x21, 0x20, 0x04, + 0x20, 0x06, 0x2e, 0x2c, 0x21, 0x23, 0x06, 0x2e, 0x2e, 0x2e, 0x2f, 0x22, + 0x20, 0x04, 0x20, 0x06, 0x30, 0x40, 0x2d, 0x21, 0x23, 0x2f, 0x2f, 0x30, + 0x30, 0x23, 0x30, 0x24, 0x2f, 0x2f, 0x20, 0x07, 0x31, 0x2e, 0x21, 0x23, + 0x30, 0x30, 0x02, 0x31, 0x31, 0x24, 0x31, 0x30, 0x30, 0x20, 0x07, 0x32, + 0x40, 0x30, 0x21, 0x23, 0x31, 0x31, 0x34, 0x32, 0x25, 0x32, 0x00, 0x31, + 0x31, 0x31, 0x31, 0x32, 0x34, 0x32, 0x1f, 0x00, 0x21, 0x1f, 0x32, 0x32, + 0x35, 0x34, 0x26, 0x34, 0x01, 0x32, 0x32, 0x32, 0x32, 0x33, 0x33, 0x31, + 0x21, 0x26, 0x01, 0x33, 0x33, 0x36, 0x33, 0x27, 0x33, 0x33, 0x20, 0x01, + 0x10, 0x34, 0x35, 0x36, 0x21, 0x2b, 0x34, 0x34, 0x37, 0x36, 0x04, 0x28, + 0x35, 0x34, 0x34, 0x34, 0x20, 0x0e, 0x37, 0x3a, 0x00, 0x52, 0x50, 0x35, + 0x35, 0x38, 0x37, 0x29, 0x36, 0x10, 0x35, 0x35, 0x35, 0x20, 0x0e, 0x38, + 0x3b, 0x4b, 0x51, 0x00, 0x36, 0x36, 0x39, 0x38, 0x2a, 0x37, 0x36, 0x36, + 0x50, 0x36, 0x20, 0x0e, 0x39, 0x21, 0x4b, 0x37, 0x37, 0x3a, 0x39, 0x05, + 0x2b, 0x38, 0x37, 0x37, 0x37, 0x20, 0x0e, 0x3b, 0x21, 0x33, 0x00, 0x38, + 0x38, 0x3c, 0x3c, 0x3c, 0x39, 0x38, 0x38, 0x04, 0x38, 0x38, 0x39, 0x3a, + 0x3a, 0x21, 0x5b, 0x39, 0x39, 0x00, 0x3b, 0x3b, 0x3d, 0x3a, 0x39, 0x39, + 0x39, 0x39, 0x00, 0x3a, 0x3b, 0x3d, 0x4d, 0x46, 0x46, 0x3a, 0x3a, 0x00, + 0x12, 0x14, 0x37, 0x3b, 0x3a, 0x3a, 0x3a, 0x3a, 0x18, 0x3b, 0x3c, 0x3e, + 0x21, 0x53, 0x20, 0x1d, 0x3d, 0x41, 0x3c, 0x01, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3c, 0x3d, 0x3f, 0x21, 0x53, 0x02, 0x3c, 0x3c, 0x3e, 0x3e, 0x3e, 0x3d, + 0x20, 0x43, 0x3c, 0x00, 0x3d, 0x40, 0x3c, 0x53, 0x4a, 0x4a, 0x3d, 0x3d, + 0x00, 0x40, 0x3f, 0x3f, 0x40, 0x3d, 0x3d, 0x3d, 0x3d, 0x10, 0x3e, 0x3e, + 0x40, 0x21, 0x63, 0x3e, 0x3e, 0x3f, 0x40, 0x60, 0x40, 0x20, 0x22, 0x20, + 0x07, 0x2f, 0x33, 0x4c, 0x3b, 0x45, 0x00, 0x3f, 0x3f, 0x2f, 0x35, 0x38, + 0x2f, 0x3f, 0x3f, 0x90, 0x20, 0x24, 0x3f, 0x41, 0x21, 0x73, 0x40, 0x40, + 0x41, 0x41, 0x61, 0x43, 0x20, 0x22, 0x30, 0x07, 0x42, 0x3c, 0x53, 0x52, + 0x20, 0x05, 0x08, 0x42, 0x44, 0x41, 0x41, 0x20, 0x01, 0x42, 0x42, 0x43, + 0xc4, 0x21, 0x83, 0x20, 0x05, 0x43, 0x42, 0x42, 0x30, 0x01, 0x43, 0x43, + 0x61, 0x44, 0x21, 0x83, 0x20, 0x05, 0x44, 0x45, 0x43, 0x43, 0x20, 0x01, + 0x88, 0x20, 0x07, 0x4e, 0x39, 0x47, 0x20, 0x0d, 0x45, 0x39, 0x44, 0x40, + 0x44, 0x20, 0x01, 0x45, 0x45, 0x4b, 0x2c, 0x2d, 0x2c, 0x01, 0x45, 0x45, + 0x49, 0x47, 0x47, 0x45, 0x45, 0x20, 0x01, 0x00, 0x46, 0x46, 0x4c, 0x2e, + 0x2e, 0x2d, 0x46, 0x46, 0x04, 0x47, 0x49, 0x48, 0x46, 0x46, 0x20, 0x01, + 0x47, 0x48, 0x00, 0x4f, 0x2f, 0x2f, 0x2e, 0x47, 0x47, 0x4f, 0x4b, 0x00, + 0x46, 0x48, 0x47, 0x47, 0x47, 0x47, 0x48, 0x49, 0x04, 0x4a, 0x2b, 0x2c, + 0x2b, 0x48, 0x20, 0x1c, 0x49, 0x49, 0x00, 0x48, 0x48, 0x48, 0x48, 0x49, + 0x47, 0x4d, 0x51, 0x80, 0x20, 0x14, 0x49, 0x48, 0x4a, 0x3a, 0x47, 0x49, + 0x49, 0x02, 0x49, 0x49, 0x4a, 0x4a, 0x34, 0x52, 0x30, 0x05, 0x32, 0x10, + 0x4c, 0x4a, 0x4a, 0x30, 0x01, 0x4b, 0x4b, 0x35, 0x30, 0x00, 0x30, 0x2f, + 0x4b, 0x4b, 0x33, 0x4d, 0x4b, 0x4b, 0x81, 0x30, 0x01, 0x4c, 0x4c, 0x50, + 0x31, 0x31, 0x30, 0x20, 0x05, 0x08, 0x4e, 0x07, 0x4c, 0x4c, 0x20, 0x01, + 0x4d, 0x4d, 0x51, 0x00, 0x32, 0x32, 0x31, 0x4d, 0x4d, 0x53, 0x4f, 0x08, + 0x20, 0x4d, 0x4d, 0x20, 0x01, 0x4e, 0x4e, 0x52, 0x33, 0x33, 0x00, 0x32, + 0x4e, 0x4e, 0x51, 0x50, 0x09, 0x4e, 0x4e, 0x80, 0x20, 0x01, 0x4f, 0x4f, + 0x53, 0x34, 0x34, 0x33, 0x4f, 0x02, 0x4f, 0x52, 0x51, 0x0a, 0x4f, 0x4f, + 0x20, 0x01, 0x50, 0x00, 0x50, 0x0d, 0x02, 0x04, 0x05, 0x50, 0x50, 0x13, + 0x09, 0x52, 0x52, 0x50, 0x50, 0x20, 0x01, 0x51, 0x51, 0x24, 0x23, 0x00, + 0x34, 0x51, 0x51, 0x14, 0x53, 0x53, 0x51, 0x51, 0xf0, 0x20, 0x01, 0xfd, + 0x4f, 0xf5, 0x47, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x65, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe1, 0x1f, 0x91, + 0x0e, 0x00, 0x00, 0x00, 0x01, 0x65, 0xbb, 0x30, 0xeb, 0x30, 0xd3, 0x00, + 0x30, 0xa2, 0x30, 0xfb, 0x30, 0xb3, 0x30, 0xbd, 0x04, 0x30, 0xf4, 0x30, + 0xa9, 0x30, 0x05, 0xd8, 0x27, 0x53, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, + 0x62, 0x00, 0x69, 0x00, 0x11, 0x61, 0x00, 0x20, 0x20, 0x03, 0x6e, 0x00, + 0x64, 0x20, 0x07, 0x05, 0x4b, 0x00, 0x6f, 0x00, 0x73, 0x20, 0x03, 0x76, + 0x20, 0x07, 0xa3, 0x05, 0x70, 0x7f, 0x65, 0x20, 0x7f, 0x65, 0x00, 0x74, + 0x05, 0xc0, 0x7d, 0xd0, 0x7f, 0x5f, 0x6e, 0x21, 0x01, 0x75, 0x05, 0xe1, + 0x01, 0xd1, 0x7f, 0x31, 0x03, 0x05, 0xb0, 0xfd, 0xf1, 0xff, 0x40, 0x79, + 0x06, 0x00, 0x7f, 0x5e, 0x58, 0x14, 0x5c, 0xf4, 0x7e, 0x00, 0x9a, 0x4e, + 0xca, 0x53, 0xd1, 0x79, 0x22, 0x7d, 0x20, 0x83, 0x6c, 0x05, 0xfb, 0x25, + 0x38, 0xc1, 0x74, 0xb9, 0x44, 0x00, 0xbe, 0x44, 0xc5, 0x20, 0x00, 0x54, + 0xcf, 0x8c, 0x1a, 0xc1, 0xf4, 0xbc, 0x05, 0xfb, 0xa5, 0x53, 0x7f, 0x76, + 0x23, 0x7f, 0xeb, 0xec, 0x42, 0xff, 0x32, 0x83, 0x05, 0xd2, 0xff, 0xe9, + 0x60, 0x7f, 0x06, 0x52, 0x7f, 0x21, 0x04, 0x00, 0x35, 0x04, 0x40, 0x04, + 0x31, 0x04, 0x38, 0x04, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x38, 0x20, 0x03, + 0x1a, 0x04, 0x17, 0x3e, 0x04, 0x41, 0x20, 0x03, 0x32, 0x20, 0x07, 0x0d, + 0xb4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, + 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x11, 0x74, 0x49, 0x00, + 0x11, 0x08, 0x00, 0x00, 0x30, 0x01, 0x66, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x3d, 0x22, 0x2d, + 0x0c, 0x00, 0x00, 0x00, 0x02, 0x66, 0xd6, 0x30, 0xe9, 0x30, 0xc6, 0x09, + 0x30, 0xa3, 0x30, 0xb9, 0x20, 0x07, 0xd0, 0x30, 0x06, 0x18, 0x23, 0x00, + 0x42, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x05, 0x69, 0x00, 0x73, + 0x00, 0x6c, 0x20, 0x09, 0x76, 0x20, 0x0d, 0x80, 0x10, 0x15, 0xb0, 0x7f, + 0x03, 0x5e, 0xc9, 0x62, 0xea, 0x8f, 0xaf, 0x01, 0x65, 0xc9, 0x62, 0xd1, + 0x53, 0xde, 0x5d, 0x06, 0x1b, 0x23, 0x00, 0x0c, 0xbe, 0x7c, 0xb7, 0xf0, + 0xd2, 0xac, 0xc2, 0x0c, 0x7c, 0xb7, 0x14, 0xbc, 0x06, 0x3b, 0xa1, 0x0e, + 0xf3, 0x7f, 0x11, 0x04, 0x00, 0x40, 0x04, 0x30, 0x04, 0x42, 0x04, 0x38, + 0x04, 0x15, 0x41, 0x04, 0x3b, 0x20, 0x09, 0x32, 0x20, 0x07, 0x3a, 0x20, + 0x0d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3a, 0x40, 0x1b, 0x39, 0x04, 0x8a, + 0x10, 0x1c, 0xb4, 0xff, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x40, 0x06, + 0x01, 0x10, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x66, 0xd0, 0x30, 0x41, + 0xf3, 0x28, 0x13, 0xab, 0x30, 0xfb, 0x30, 0xd3, 0x28, 0x1b, 0x01, 0xc8, + 0x30, 0xea, 0x30, 0xc4, 0x30, 0xa1, 0x05, 0xa8, 0x1f, 0x50, 0x42, 0x28, + 0x15, 0x6e, 0x28, 0x13, 0x6b, 0x00, 0xe1, 0x00, 0x54, 0x20, 0x28, 0x25, + 0x79, 0x28, 0x1f, 0x74, 0x28, 0x2b, 0x69, 0x00, 0x60, 0x63, 0x05, 0x48, + 0x21, 0x10, 0x0e, 0xf0, 0x7f, 0xed, 0x73, 0xaf, 0x65, 0x61, 0x00, 0x53, + 0x2d, 0x00, 0xd4, 0x6b, 0xaf, 0x65, 0x79, 0x04, 0x72, 0xcc, 0x91, 0xdf, + 0x5b, 0x05, 0xd8, 0x1d, 0x18, 0xbc, 0x00, 0xa4, 0xc2, 0x74, 0xce, 0x44, + 0xbe, 0xa4, 0xc2, 0x03, 0xb8, 0xd2, 0xac, 0xb9, 0x28, 0xcc, 0x06, 0x1b, + 0x97, 0x0e, 0xd3, 0x7f, 0x51, 0x11, 0x28, 0x15, 0x3d, 0x48, 0x0b, 0x3e, + 0x04, 0x31, 0x48, 0x1d, 0x47, 0x42, 0x28, 0x29, 0x38, 0x04, 0x46, 0x05, + 0x68, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x48, 0x0c, 0xc0, 0x28, 0x1c, 0x50, + 0x05, 0x02, 0x02, 0xa6, 0x22, 0x9d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x66, + 0xb3, 0x30, 0xb7, 0x28, 0x09, 0x60, 0xa7, 0x05, 0xa8, 0x09, 0xdf, 0xff, + 0x4b, 0x00, 0x6f, 0x00, 0x61, 0x50, 0x01, 0x38, 0x05, 0x65, 0x10, 0x16, + 0x40, 0x7f, 0xd1, 0x79, 0x0c, 0x5e, 0x30, 0x56, 0x7b, 0x05, 0xd8, 0x0b, + 0xbf, 0xff, 0x54, 0xcf, 0xdc, 0xc2, 0x6b, 0xb4, 0x06, 0x08, 0x0d, 0x0f, + 0x93, 0x7f, 0x1a, 0x28, 0x0f, 0x48, 0x05, 0xa8, 0x07, 0x10, 0x17, 0xf4, + 0xff, 0x28, 0x03, 0x03, 0x70, 0x01, 0x04, 0x40, 0x0a, 0xa5, 0x22, 0x1d, + 0x00, 0x0f, 0x00, 0x00, 0x05, 0x66, 0x8c, 0x4e, 0xc8, 0x23, 0x30, 0xe9, + 0x06, 0x88, 0x15, 0x00, 0x00, 0x4e, 0x2f, 0x99, 0x3f, 0x9f, 0xc0, 0x05, + 0x3f, 0x9b, 0x10, 0x10, 0x30, 0x7f, 0x3c, 0x5c, 0x79, 0x72, 0xc9, 0x62, + 0x81, 0x06, 0x98, 0x17, 0xc8, 0xb2, 0xb8, 0xd2, 0x7c, 0xb7, 0x10, 0x06, + 0x93, 0x7f, 0x51, 0x1d, 0x28, 0x13, 0x42, 0x48, 0x09, 0x3d, 0x04, 0x41, + 0x06, 0x28, 0x1b, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0x70, 0x01, + 0x05, 0x40, 0x0a, 0x59, 0x22, 0x00, 0xda, 0x0c, 0x00, 0x00, 0x06, 0x66, + 0xd7, 0x30, 0x01, 0xec, 0x30, 0xb7, 0x30, 0xe7, 0x30, 0xd5, 0x06, 0x68, + 0x1b, 0x51, 0x50, 0x28, 0x13, 0x65, 0x2f, 0xb1, 0x6f, 0x00, 0x76, 0x10, + 0x16, 0x40, 0x7f, 0x00, 0x6e, 0x66, 0xf7, 0x96, 0xcd, 0x7e, 0x2b, 0x59, + 0x80, 0x06, 0x78, 0x19, 0x04, 0xd5, 0x08, 0xb8, 0xfc, 0xc1, 0x04, 0x68, + 0xd5, 0x06, 0x7b, 0x99, 0x0e, 0xf3, 0x7f, 0x1f, 0x28, 0x13, 0x35, 0x04, + 0x48, 0x0c, 0x04, 0x3e, 0x04, 0x32, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, + 0xff, 0x05, 0x05, 0xa0, 0x70, 0x01, 0x06, 0x40, 0x0a, 0xd2, 0x22, 0x1d, + 0x0f, 0x00, 0x08, 0x00, 0x07, 0x66, 0xc8, 0x28, 0x17, 0xf3, 0x30, 0xc1, + 0x34, 0x30, 0xfc, 0x20, 0x05, 0x06, 0x3f, 0xb2, 0x54, 0x48, 0x17, 0x6e, + 0x00, 0x19, 0x63, 0x00, 0xed, 0x20, 0x05, 0x06, 0x90, 0x7f, 0x0d, 0x01, + 0x10, 0x0e, 0x50, 0x7f, 0x02, 0x79, 0x72, 0x26, 0x4f, 0xa6, 0x94, 0x06, + 0x78, 0x15, 0x00, 0x01, 0x00, 0xb8, 0xd2, 0x0c, 0xb8, 0x5c, 0xce, 0x06, + 0x78, 0x15, 0xb4, 0x07, 0x92, 0xff, 0x63, 0x2f, 0x37, 0x06, 0x33, 0xff, + 0x22, 0x48, 0x17, 0x3d, 0x04, 0x5c, 0x47, 0x28, 0x11, 0x3d, 0x06, 0x28, + 0x19, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x06, 0x06, 0xa0, 0x70, + 0x01, 0x07, 0x40, 0x0a, 0xc4, 0x22, 0xd6, 0x0c, 0x00, 0x20, 0x00, 0x08, + 0x28, 0x17, 0xeb, 0x30, 0xca, 0x30, 0xd0, 0xc5, 0x06, 0x48, 0x13, 0x78, + 0x17, 0x6e, 0x00, 0x61, 0x2f, 0xad, 0x61, 0x10, 0x16, 0x40, 0x7f, 0x00, + 0x79, 0x72, 0x14, 0x5c, 0xb3, 0x7e, 0xe6, 0x74, 0x80, 0x06, 0x78, 0x19, + 0xb8, 0xd2, 0x74, 0xb9, 0x98, 0xb0, 0x14, 0x6b, 0xbc, 0x10, 0x06, 0x73, + 0x7f, 0x38, 0x17, 0x3d, 0x28, 0x01, 0x32, 0x06, 0x28, 0x13, 0x10, 0x17, + 0x34, 0xff, 0x28, 0x07, 0x07, 0x70, 0x01, 0x08, 0x40, 0x0a, 0x66, 0x22, + 0x7f, 0x83, 0x28, 0x17, 0x09, 0x66, 0xb8, 0x30, 0xea, 0x28, 0x17, 0x06, + 0x9c, 0xaf, 0x07, 0x7d, 0x01, 0x69, 0x00, 0x6c, 0x4c, 0x2b, 0x06, 0x58, + 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0xe5, 0x65, 0x29, 0x52, 0xb3, 0x7e, + 0x06, 0x78, 0x15, 0x00, 0x0d, 0x00, 0xc8, 0xc9, 0xac, 0x28, 0x17, 0x0e, + 0x93, 0x7f, 0x5a, 0x23, 0xfb, 0xab, 0x06, 0xb3, 0xff, 0x16, 0x28, 0x0b, + 0x3b, 0x28, 0x0f, 0x3d, 0x06, 0x68, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x28, + 0x08, 0x08, 0x70, 0x01, 0x03, 0x40, 0x0a, 0x00, 0x23, 0x51, 0x45, 0x0d, + 0x00, 0x3f, 0xff, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x40, 0x06, 0x3c, + 0x01, 0x01, 0x20, 0x07, 0x30, 0x04, 0x20, 0x14, 0x50, 0x05, 0x02, 0x02, + 0x2a, 0x03, 0x03, 0x70, 0x01, 0x04, 0x50, 0x05, 0x04, 0x70, 0x01, 0x05, + 0xaa, 0x50, 0x05, 0x05, 0x70, 0x01, 0x06, 0x50, 0x05, 0x06, 0x70, 0x01, + 0x07, 0xf0, 0x50, 0x05, 0xe8, 0x9f, 0x00, 0x00, 0x97, 0x2f, 0xff, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x67, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xbf, 0x20, 0x50, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x67, 0xb9, 0x30, + 0xed, 0x30, 0xd9, 0x04, 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x58, 0x1f, + 0x53, 0x00, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x65, 0x00, 0x05, + 0x6e, 0x00, 0x69, 0x00, 0x61, 0x06, 0x80, 0x7f, 0xe9, 0x40, 0x7f, 0x5c, + 0x65, 0x06, 0x60, 0xff, 0x77, 0x60, 0xff, 0x31, 0x05, 0x0d, 0xd1, 0x7f, + 0x45, 0x00, 0x40, 0x73, 0x06, 0xc2, 0x01, 0xaf, 0x65, 0x1b, 0x6d, 0x87, + 0x65, 0x08, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x5b, 0x1f, 0xac, 0xc2, 0x5c, + 0x01, 0xb8, 0xa0, 0xbc, 0xc8, 0xb2, 0x44, 0xc5, 0x07, 0x33, 0x7f, 0x70, + 0xeb, 0x06, 0xa1, 0xff, 0x53, 0x81, 0x05, 0xf4, 0x01, 0x21, 0x04, 0x3b, + 0x04, 0x00, 0x3e, 0x04, 0x32, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x0c, 0x38, + 0x04, 0x4f, 0x04, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x01, + 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x9c, 0x51, 0x00, + 0x11, 0x09, 0x00, 0x00, 0x30, 0x01, 0x68, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x69, 0xed, 0xf2, + 0x13, 0x00, 0x00, 0x00, 0x02, 0x68, 0xcf, 0x30, 0xa6, 0x30, 0xc6, 0x04, + 0x30, 0xf3, 0x30, 0xde, 0x5d, 0x06, 0x58, 0x1f, 0x47, 0x00, 0x00, 0x61, + 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x10, 0x6e, 0x00, 0x67, 0x10, + 0x16, 0x20, 0x7f, 0x6a, 0x8c, 0x7b, 0x76, 0x20, 0x01, 0x77, 0x06, 0x9b, + 0x1b, 0x58, 0xd5, 0xb0, 0xc6, 0x61, 0x04, 0xd1, 0x20, 0x00, 0xfc, 0xc8, + 0x10, 0x06, 0x53, 0x7f, 0x13, 0x04, 0x00, 0x30, 0x04, 0x43, 0x04, 0x42, + 0x04, 0x35, 0x04, 0x04, 0x3d, 0x04, 0x33, 0x04, 0xa0, 0x10, 0x1e, 0x04, + 0xff, 0x01, 0x03, 0x00, 0x05, 0x02, 0x04, 0x05, 0x01, 0x01, 0x01, 0x05, + 0x28, 0x02, 0x03, 0x20, 0x05, 0x01, 0x58, 0x17, 0x03, 0x68, 0xa6, 0x02, + 0x30, 0xa7, 0x30, 0xb9, 0x30, 0xbf, 0x28, 0x19, 0xfb, 0x02, 0x30, 0xb1, + 0x30, 0xfc, 0x30, 0xd7, 0x05, 0xe8, 0x21, 0x57, 0xa8, 0x28, 0x11, 0x73, + 0x48, 0x17, 0x72, 0x28, 0x19, 0x20, 0x00, 0x43, 0xb8, 0x28, 0x27, 0x70, + 0x28, 0x25, 0x05, 0x7f, 0xc5, 0x50, 0x6f, 0x2d, 0x00, 0x4f, 0x22, 0x00, + 0x63, 0x20, 0x01, 0x69, 0x00, 0x64, 0x48, 0xa1, 0x74, 0xae, 0x28, 0xad, + 0x6c, 0x05, 0xc0, 0xff, 0x6b, 0x40, 0xf7, 0x06, 0x1f, 0xbb, 0x51, 0x6f, + 0x6f, 0xf6, 0x21, 0x79, 0x00, 0x31, 0x01, 0x05, 0x11, 0x87, 0x31, 0xef, + 0x62, 0x00, 0x80, 0x7f, 0x05, 0x1f, 0xcb, 0x7f, 0x04, 0x89, 0x00, 0x5f, + 0x6e, 0x66, 0x06, 0x98, 0x19, 0xe8, 0xc6, 0x00, 0xa4, 0xc2, 0x34, 0xd1, + 0x00, 0xcf, 0x74, 0xc7, 0x31, 0x04, 0xd5, 0x06, 0x38, 0x1d, 0x73, 0x7f, + 0x2d, 0x00, 0x4b, 0x2b, 0xa1, 0xea, 0x06, 0x12, 0x83, 0xd1, 0xff, 0x06, + 0x13, 0x7f, 0x17, 0x28, 0x17, 0x3f, 0x28, 0x1b, 0x34, 0x82, 0x28, 0x17, + 0x3e, 0x04, 0x2d, 0x00, 0x1a, 0x40, 0x0f, 0x41, 0x20, 0x04, 0x3a, 0x28, + 0x2f, 0x4f, 0x04, 0x20, 0x00, 0x3f, 0x22, 0x04, 0x40, 0x20, 0x17, 0x32, + 0x04, 0x38, 0x28, 0x37, 0x46, 0x98, 0x20, 0x05, 0x4f, 0x04, 0x0b, 0xd4, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x09, 0x02, 0x08, 0x09, 0x01, 0x01, + 0x02, 0x20, 0x06, 0x03, 0x09, 0x02, 0x00, 0x02, 0x02, 0x02, 0xe1, 0xe7, + 0x1a, 0x0d, 0x00, 0x0a, 0x00, 0x04, 0x68, 0xce, 0x28, 0x0b, 0xb6, 0x06, + 0x88, 0x15, 0x00, 0x2b, 0x00, 0x4e, 0x26, 0x93, 0x72, 0x2f, 0xaf, 0x68, + 0x06, 0x68, 0x19, 0x78, 0x17, 0x55, 0x64, 0x2f, 0xb5, 0x2d, 0x60, 0x8d, + 0x64, 0x06, 0x00, 0xff, 0x64, 0x07, 0x28, 0x17, 0x55, 0x53, 0x2f, 0xb3, + 0x74, 0x6f, 0xb9, 0x74, 0x29, 0xa5, 0x69, 0x28, 0x2d, 0x76, 0x6e, 0x05, + 0x08, 0x1d, 0x98, 0x17, 0x30, 0x7f, 0x70, 0x00, 0x40, 0x7f, 0x04, 0xc6, + 0x17, 0x53, 0x87, 0x06, 0xd8, 0x17, 0x78, 0xb1, 0x58, 0xb3, 0x06, 0x98, + 0x15, 0x53, 0x7f, 0x52, 0xf3, 0xdc, 0x06, 0x58, 0x19, 0x9a, 0x17, 0x64, + 0x4a, 0x9d, 0x74, 0x0f, 0x05, 0x7c, 0x19, 0x21, 0x04, 0x5e, 0x35, 0x27, + 0xf5, 0x35, 0x47, 0xfd, 0x06, 0x18, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x03, 0x00, 0x08, 0x01, 0x06, 0x03, 0x03, 0x03, 0x03, 0x05, + 0x10, 0x01, 0x08, 0x08, 0x30, 0x07, 0x90, 0xeb, 0x9e, 0x11, 0x04, 0x00, + 0x00, 0x05, 0x68, 0xa4, 0x28, 0x17, 0xb9, 0x30, 0x5d, 0xbf, 0x06, 0x88, + 0x19, 0x45, 0x2f, 0xaf, 0x06, 0xbb, 0x2f, 0x78, 0x17, 0x4f, 0x47, 0x09, + 0xdf, 0x05, 0xdc, 0xab, 0x3f, 0xff, 0x4f, 0x4d, 0xad, 0x06, 0x78, 0x15, + 0xb8, 0x17, 0xf1, 0x01, 0x05, 0x5c, 0xb3, 0xc8, 0xbe, 0x2f, 0x06, 0x31, + 0x81, 0x1c, 0x4e, 0x06, 0xd8, 0x17, 0x74, 0xc7, 0xa4, 0x17, 0xc2, 0x34, + 0xd1, 0x06, 0x98, 0x19, 0x4f, 0x2f, 0xab, 0x3e, 0xaf, 0x06, 0x58, 0x15, + 0xa2, 0x07, 0x11, 0xff, 0x12, 0x28, 0x0f, 0x41, 0x04, 0x42, 0x28, 0x15, + 0x47, 0xf0, 0x27, 0xfb, 0x06, 0x18, 0x1b, 0x06, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x04, 0x01, 0x03, 0x08, 0x00, 0x02, 0x02, 0x04, 0x04, 0x07, + 0x03, 0x01, 0x01, 0x00, 0x04, 0x04, 0x04, 0x04, 0xa0, 0xe8, 0x79, 0x13, + 0x00, 0x00, 0x00, 0x06, 0x68, 0xaf, 0x30, 0xef, 0x30, 0x51, 0xba, 0x28, + 0x1b, 0xeb, 0x28, 0x1f, 0xfb, 0x30, 0xca, 0x28, 0x21, 0xc5, 0x30, 0x0b, + 0x05, 0x98, 0x1b, 0x4b, 0x00, 0x77, 0x2f, 0xb1, 0x5a, 0x2f, 0xad, 0x58, + 0x6c, 0x6f, 0xb1, 0x61, 0x05, 0xc7, 0x99, 0x10, 0x0e, 0xf0, 0x7f, 0x38, + 0x59, 0x56, 0x00, 0x79, 0x81, 0x9c, 0x2d, 0x00, 0xb3, 0x7e, 0x54, 0x10, + 0x58, 0x14, 0x5c, 0x06, 0x18, 0x1f, 0x70, 0xcf, 0x04, 0xc9, 0x03, 0xe8, + 0xb8, 0x98, 0xb0, 0xc8, 0xd0, 0x06, 0x38, 0x15, 0x93, 0x7f, 0x5d, 0x6f, + 0x2f, 0xa1, 0x6c, 0x40, 0x05, 0x05, 0xd3, 0x83, 0x06, 0xf3, 0xff, 0x1a, + 0x27, 0xf1, 0x01, 0x30, 0x04, 0x37, 0x04, 0x43, 0x04, 0x3b, 0x20, 0x03, + 0x15, 0x2d, 0x00, 0x1d, 0x28, 0x15, 0x42, 0x28, 0x19, 0x3b, 0x03, 0xc7, + 0xfd, 0x80, 0x10, 0x18, 0x94, 0xff, 0x05, 0x04, 0x06, 0x03, 0x05, 0x06, + 0x05, 0x00, 0x05, 0x02, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x00, 0x05, + 0xf4, 0xea, 0x9b, 0x15, 0x00, 0x00, 0x07, 0x08, 0x68, 0xd5, 0x30, 0xea, + 0x48, 0x11, 0xb9, 0x30, 0xc6, 0xb5, 0x28, 0x1d, 0xc8, 0x05, 0xa8, 0x11, + 0x5f, 0xff, 0x46, 0x2f, 0xa7, 0x65, 0x2f, 0xa7, 0x1d, 0x20, 0x00, 0x53, + 0x4f, 0xa9, 0x3b, 0x39, 0x05, 0xbf, 0x38, 0xc9, 0x60, 0x75, 0x16, 0x2d, + 0x00, 0x4c, 0x2f, 0x2d, 0x62, 0x40, 0x8d, 0x06, 0x10, 0xff, 0x69, 0xdf, + 0x4d, 0xb3, 0x3d, 0xaf, 0x74, 0x05, 0xee, 0xb8, 0x71, 0x75, 0x3f, 0xb1, + 0x51, 0x01, 0x3c, 0xb9, 0x6c, 0x6f, 0x05, 0xac, 0xaf, 0x50, 0xf9, 0x64, + 0xa0, 0x81, 0x05, 0xb1, 0x83, 0xea, 0x81, 0x0c, 0x31, 0x75, 0xa6, 0x90, + 0x06, 0x18, 0x0f, 0x8b, 0xaf, 0xd5, 0xac, 0x00, 0xb9, 0xa4, 0xc2, 0x4c, + 0xd1, 0x74, 0xc7, 0xb8, 0x56, 0xd2, 0x06, 0x38, 0x19, 0x56, 0x4f, 0xa5, + 0x6a, 0x06, 0x82, 0x7f, 0x00, 0x11, 0xff, 0x76, 0x82, 0x05, 0xc3, 0x83, + 0x24, 0x04, 0x40, 0x04, 0x38, 0x28, 0x0f, 0x21, 0x8e, 0x28, 0x0d, 0x35, + 0x04, 0x39, 0x28, 0x13, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, + 0x00, 0x02, 0x04, 0x01, 0x09, 0x04, 0x06, 0x06, 0x08, 0x00, 0x04, 0x09, + 0x02, 0x06, 0x06, 0x06, 0x06, 0x4c, 0x00, 0xeb, 0xa5, 0x12, 0x00, 0x00, + 0x08, 0x68, 0xce, 0xa3, 0x28, 0x15, 0xb9, 0x28, 0x17, 0xa6, 0x30, 0xa7, + 0x28, 0x1b, 0x06, 0x18, 0x17, 0x55, 0x4e, 0x2c, 0xa9, 0x72, 0x2f, 0xa1, + 0x68, 0x28, 0x19, 0x57, 0x2c, 0xb3, 0xd6, 0x37, 0x1f, 0x06, 0x10, 0x7f, + 0x64, 0x2f, 0xa9, 0x4f, 0x2f, 0xb3, 0x06, 0x90, 0x7f, 0x77, 0xd4, 0x06, + 0x20, 0xfb, 0x3f, 0xff, 0x50, 0x48, 0x05, 0x76, 0x29, 0x13, 0x6e, 0x00, + 0x55, 0x63, 0x29, 0x19, 0x61, 0x29, 0xa1, 0x64, 0x4e, 0x3b, 0x20, 0x81, + 0x1b, 0xfe, 0x30, 0x1f, 0x04, 0x71, 0x99, 0x51, 0xff, 0x3e, 0xad, 0x39, + 0x19, 0x05, 0xda, 0x13, 0x3f, 0xff, 0x7f, 0x10, 0x89, 0x17, 0x53, 0x06, + 0x98, 0x15, 0x00, 0x00, 0x78, 0xb1, 0x03, 0xa4, 0xc2, 0xe8, 0xc6, 0xa4, + 0xc2, 0x06, 0x58, 0x15, 0x53, 0x7f, 0xd4, 0x06, 0xb2, 0x81, 0x06, 0xf1, + 0xff, 0x21, 0x28, 0x0d, 0x32, 0x28, 0x11, 0x40, 0x04, 0x41, 0x3e, 0x28, + 0x1d, 0x17, 0x04, 0x30, 0x04, 0x3f, 0x20, 0x03, 0x10, 0x34, 0x04, 0x3d, + 0x20, 0x09, 0x4f, 0x04, 0x20, 0x00, 0x51, 0x3f, 0x40, 0x19, 0x32, 0x28, + 0x3b, 0x3d, 0x04, 0x46, 0x28, 0x41, 0x70, 0x4f, 0x03, 0xe8, 0x37, 0x07, + 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x07, 0x07, 0x09, 0x07, 0x06, 0x08, + 0x09, 0x07, 0x07, 0x06, 0x20, 0x03, 0x30, 0x01, 0x9e, 0x20, 0xed, 0x3d, + 0x28, 0x17, 0x09, 0x68, 0xe0, 0x30, 0xd7, 0x00, 0x30, 0xde, 0x30, 0xe9, + 0x30, 0xf3, 0x30, 0xac, 0xc5, 0x06, 0x08, 0x13, 0x3f, 0xff, 0x4d, 0x00, + 0x70, 0x27, 0x8f, 0x6d, 0x2f, 0xb3, 0x46, 0x6c, 0x2f, 0xb7, 0x6e, 0x00, + 0x67, 0x2f, 0xbd, 0x10, 0x15, 0xb0, 0x7f, 0x6e, 0x01, 0x66, 0x6c, 0x9a, + 0x70, 0x51, 0xa0, 0x52, 0x06, 0x78, 0x1b, 0x00, 0x4c, 0xc7, 0x78, 0xd4, + 0xd0, 0xb9, 0x91, 0xb7, 0x34, 0x00, 0xac, 0x06, 0x58, 0x17, 0x0e, 0xf3, + 0x7f, 0x1c, 0x28, 0x07, 0x43, 0x04, 0x51, 0x3c, 0x28, 0x0f, 0x3b, 0x28, + 0x13, 0x3d, 0x04, 0x33, 0x28, 0x19, 0x80, 0x10, 0x1d, 0xb4, 0xff, 0x08, + 0x06, 0x08, 0x05, 0x07, 0x08, 0x08, 0x04, 0x08, 0x04, 0x08, 0x06, 0x06, + 0x20, 0x06, 0x08, 0xe5, 0x00, 0xed, 0x08, 0x16, 0x00, 0x00, 0x0a, 0x68, + 0xea, 0xbd, 0x28, 0x11, 0xdd, 0x20, 0x01, 0x06, 0x38, 0x13, 0x45, 0x17, + 0x2e, 0xa9, 0x6d, 0x28, 0x1b, 0x60, 0x6f, 0x40, 0x03, 0x10, 0x16, 0x10, + 0x7f, 0x97, 0x67, 0xe2, 0x6c, 0xe2, 0x40, 0x6c, 0x06, 0x78, 0x15, 0x00, + 0x00, 0xbc, 0xb9, 0xec, 0xd3, 0x31, 0x78, 0xd4, 0x06, 0x58, 0x13, 0x0f, + 0x33, 0x7f, 0x1b, 0x04, 0x38, 0x28, 0x15, 0x18, 0x3f, 0x04, 0x3e, 0x40, + 0x03, 0x10, 0x1e, 0x14, 0xff, 0x09, 0x05, 0x07, 0x00, 0x04, 0x06, 0x07, + 0x09, 0x09, 0x03, 0x07, 0x05, 0x11, 0x05, 0x09, 0x09, 0x20, 0x07, 0xef, + 0xef, 0x14, 0x00, 0x3f, 0xff, 0x00, 0x01, 0x03, 0x05, 0x02, 0x04, 0x05, + 0x01, 0x01, 0x08, 0x01, 0x05, 0x02, 0x03, 0x20, 0x05, 0x01, 0x02, 0x09, + 0x30, 0x02, 0x09, 0x20, 0x05, 0x20, 0x06, 0x03, 0x09, 0x02, 0x02, 0x00, + 0x02, 0x02, 0x03, 0x08, 0x01, 0x06, 0x03, 0x03, 0x02, 0x03, 0x03, 0x05, + 0x01, 0x08, 0x08, 0x30, 0x07, 0x04, 0x00, 0x01, 0x03, 0x08, 0x02, 0x02, + 0x04, 0x04, 0x07, 0x80, 0x20, 0x2d, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, + 0x06, 0x01, 0x03, 0x05, 0x06, 0x05, 0x05, 0x02, 0x06, 0x20, 0x0b, 0x00, + 0x05, 0x05, 0x05, 0x06, 0x02, 0x04, 0x01, 0x09, 0x40, 0x04, 0x28, 0x8b, + 0x04, 0x09, 0x02, 0x06, 0x06, 0x06, 0x00, 0x06, 0x07, 0x07, 0x09, 0x07, + 0x08, 0x09, 0x07, 0x3e, 0x07, 0x06, 0x20, 0x03, 0x30, 0x01, 0xf8, 0xaf, + 0xf0, 0xa7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x2c, 0xa3, 0x00, 0x11, 0x13, 0x00, 0x00, 0x30, 0x01, 0x69, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xbd, 0x1c, 0x5e, 0xfd, 0x00, 0x00, 0x00, 0x02, 0x69, 0xde, 0x30, + 0xc9, 0x30, 0xea, 0x24, 0x30, 0xfc, 0x20, 0x05, 0xde, 0x5d, 0x06, 0x38, + 0x21, 0x4d, 0x00, 0x01, 0x61, 0x00, 0x64, 0x00, 0x72, 0x00, 0x69, 0x20, + 0x05, 0x80, 0x10, 0x16, 0x30, 0x7f, 0x6c, 0x9a, 0xb7, 0x5f, 0xcc, 0x91, + 0xea, 0x04, 0x81, 0xbb, 0x6c, 0x3a, 0x53, 0x06, 0x3b, 0x21, 0xc8, 0xb9, + 0x10, 0xdc, 0xb4, 0xac, 0x20, 0x03, 0x20, 0x00, 0xfc, 0xc8, 0x80, 0x10, + 0x06, 0x33, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x34, 0x04, 0x40, 0x30, 0x04, + 0x38, 0x20, 0x05, 0x10, 0x1e, 0x34, 0xff, 0x01, 0x0e, 0x0e, 0x0f, 0x00, + 0x0e, 0x0f, 0x01, 0x01, 0x0f, 0x0e, 0x0c, 0x0e, 0x08, 0x01, 0x01, 0x01, + 0x01, 0x58, 0x17, 0x03, 0x69, 0xa2, 0x00, 0x30, 0xf3, 0x30, 0xc0, 0x30, + 0xeb, 0x30, 0xb7, 0xa2, 0x28, 0x1b, 0xa2, 0x06, 0x28, 0x1b, 0x41, 0x00, + 0x6e, 0x28, 0x17, 0x61, 0x02, 0x00, 0x6c, 0x00, 0x75, 0x00, 0x73, 0x28, + 0x1d, 0x61, 0xab, 0x06, 0x80, 0x7f, 0x6f, 0x60, 0x81, 0x65, 0x06, 0xc0, + 0xff, 0x65, 0x21, 0x0f, 0x0e, 0x51, 0x7f, 0x04, 0x75, 0x00, 0x63, 0x00, + 0xed, 0x06, 0x01, 0xff, 0x89, 0x5b, 0x00, 0xbe, 0x8f, 0x62, 0x53, 0x7f, + 0x89, 0x9a, 0x4e, 0x80, 0x06, 0x58, 0x1b, 0x48, 0xc5, 0xec, 0xb2, 0xe8, + 0xb8, 0xdc, 0x1a, 0xc2, 0x44, 0xc5, 0x06, 0x58, 0x19, 0xf3, 0x7f, 0xeb, + 0x06, 0xa3, 0xff, 0x7a, 0x88, 0x06, 0x23, 0xff, 0x10, 0x04, 0x3d, 0x28, + 0x17, 0x30, 0x04, 0x3b, 0x0b, 0x04, 0x43, 0x04, 0x41, 0x28, 0x1d, 0x4f, + 0x05, 0xe8, 0x1d, 0x07, 0xb3, 0x7f, 0xa4, 0x10, 0x0e, 0x30, 0x7f, 0x02, + 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x00, 0x02, 0x02, 0x95, + 0x1a, 0xbc, 0xfb, 0x00, 0x00, 0x47, 0x04, 0x28, 0x17, 0xe9, 0x30, 0xb4, + 0x28, 0x1b, 0x06, 0x18, 0x11, 0x78, 0x17, 0x5f, 0x72, 0x2f, 0xb1, 0x67, + 0x27, 0x95, 0x05, 0xd7, 0x0f, 0x08, 0x30, 0x7f, 0x06, 0x18, 0x15, 0xd1, + 0x7f, 0xd0, 0x05, 0xf9, 0x93, 0xb1, 0xff, 0xf3, 0x06, 0x61, 0xff, 0x3f, + 0x96, 0xc9, 0x62, 0x30, 0x21, 0x8d, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x44, + 0xc5, 0x7c, 0xb7, 0x3b, 0xe4, 0xac, 0x06, 0x58, 0x13, 0x07, 0x31, 0x7f, + 0x73, 0xff, 0xe3, 0x2b, 0x97, 0x06, 0x3f, 0xaf, 0x11, 0x10, 0x04, 0x40, + 0x28, 0x15, 0x33, 0x04, 0x3e, 0x28, 0x1f, 0xd2, 0x10, 0x06, 0xf4, 0xff, + 0x10, 0x06, 0x36, 0x7f, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, + 0x00, 0x03, 0x03, 0x03, 0x9e, 0x1d, 0x62, 0xff, 0x00, 0x20, 0x00, 0x05, + 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x30, 0xa5, 0x06, 0x30, 0xfc, 0x30, 0xea, + 0x30, 0x30, 0x0b, 0x05, 0xf8, 0x1f, 0x50, 0xaa, 0x28, 0x17, 0x69, 0x2f, + 0xb3, 0x63, 0x2f, 0xa9, 0x70, 0x4f, 0xb7, 0x69, 0x02, 0x00, 0x74, 0x00, + 0x79, 0x00, 0x20, 0x2f, 0xbf, 0x66, 0xad, 0x20, 0x05, 0x41, 0x2f, 0xc3, + 0x74, 0x2f, 0xc9, 0x30, 0x25, 0x61, 0x2f, 0xcf, 0xde, 0x04, 0x1f, 0xaf, + 0x90, 0x5f, 0x65, 0x04, 0x20, 0x5f, 0x01, 0xd0, 0x7f, 0x06, 0x19, 0x1b, + 0xf1, 0x7f, 0x74, 0xab, 0x29, 0xa1, 0x20, 0x2f, 0xc1, 0x65, 0x2f, 0xc1, + 0x6c, 0x28, 0xa7, 0xd1, 0x81, 0x70, 0x65, 0x04, 0xc1, 0x7f, 0x04, 0x31, + 0xdf, 0x01, 0x18, 0x17, 0xaf, 0x65, 0xfe, 0x56, 0x02, 0x29, 0x52, 0x9a, + 0x4e, 0xaf, 0x65, 0x06, 0x38, 0x1d, 0x44, 0x01, 0xc5, 0xa4, 0xc2, 0x2c, + 0xd2, 0xac, 0xb9, 0x30, 0x07, 0xda, 0x06, 0x38, 0x1d, 0xb3, 0x5f, 0xeb, + 0x06, 0x4c, 0x17, 0x33, 0xdf, 0xfa, 0x06, 0x81, 0xff, 0x10, 0x02, 0x04, + 0x41, 0x04, 0x42, 0x04, 0x43, 0x28, 0x1d, 0x38, 0x38, 0x04, 0x4f, 0x06, + 0x28, 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x12, 0x03, + 0x04, 0x03, 0x13, 0x03, 0x04, 0x04, 0x28, 0x13, 0x12, 0x04, 0x00, 0x04, + 0x04, 0x04, 0xd6, 0x1e, 0xda, 0xfb, 0x00, 0x02, 0x00, 0x06, 0x69, 0xd0, + 0x30, 0xec, 0x28, 0x0f, 0xfc, 0x81, 0x20, 0x05, 0xb9, 0x30, 0xf8, 0x8a, + 0xf6, 0x5c, 0x05, 0xff, 0xb4, 0x5a, 0x42, 0x48, 0x0b, 0x65, 0x2f, 0xb3, + 0x38, 0x1f, 0x63, 0x28, 0x0f, 0x49, 0xad, 0x28, 0x09, 0x6c, 0x2f, 0xc3, + 0x6e, 0x26, 0x9d, 0x05, 0x17, 0xa7, 0xce, 0x46, 0xfd, 0x6e, 0x73, 0x28, + 0x87, 0x50, 0x89, 0xe9, 0x40, 0x89, 0x05, 0x98, 0x21, 0xd0, 0xff, 0x73, + 0xab, 0x29, 0x1f, 0x68, 0x47, 0x8d, 0x49, 0x2f, 0xbf, 0x73, 0x47, 0x9d, + 0x04, 0xdf, 0x47, 0xde, 0xd1, 0x7f, 0x06, 0x1f, 0xb2, 0x49, 0x68, 0x7f, + 0x91, 0x81, 0x52, 0x0b, 0x05, 0x79, 0xa1, 0xf4, 0x01, 0x5d, 0x29, 0x52, + 0x3f, 0x96, 0xcc, 0x91, 0x06, 0x38, 0x13, 0x80, 0x3f, 0xff, 0x1c, 0xbc, + 0x08, 0xb8, 0x44, 0xc5, 0x08, 0x43, 0xb8, 0x38, 0x15, 0x1c, 0xc8, 0xc4, + 0xb3, 0x06, 0xb3, 0x7f, 0x06, 0x3a, 0x97, 0xb8, 0x31, 0xff, 0x68, 0x4b, + 0xf1, 0xd1, 0xff, 0x05, 0x7b, 0xa3, 0x11, 0x04, 0x30, 0x0a, 0x04, 0x3b, + 0x04, 0x35, 0x20, 0x05, 0x40, 0x28, 0x21, 0x3a, 0x82, 0x28, 0x1d, 0x35, + 0x04, 0x20, 0x00, 0x3e, 0x48, 0x2d, 0x40, 0x0e, 0x04, 0x3e, 0x04, 0x32, + 0x20, 0x1f, 0x0c, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x00, 0x03, + 0x0b, 0x04, 0x03, 0x0d, 0x05, 0x05, 0x04, 0x00, 0x0c, 0x04, 0x03, 0x05, + 0x05, 0x05, 0x05, 0x23, 0x00, 0x1c, 0xe0, 0x01, 0x00, 0x00, 0x07, 0x69, + 0xab, 0x0e, 0x30, 0xca, 0x30, 0xea, 0x28, 0x19, 0x06, 0x38, 0x13, 0x3f, + 0xfc, 0x43, 0xff, 0x48, 0x01, 0x38, 0x15, 0x3b, 0x23, 0x05, 0xd8, 0x13, + 0xd8, 0x17, 0x90, 0x89, 0x3f, 0xb9, 0x05, 0x7e, 0xb9, 0x7e, 0x4b, 0xa0, + 0x75, 0x06, 0x18, 0x15, 0xb1, 0x7f, 0x30, 0xf5, 0x06, 0xb1, 0xff, 0x06, + 0x5e, 0x2f, 0xa0, 0x04, 0x52, 0xa3, 0x90, 0x29, 0x52, 0x06, 0x78, 0x15, + 0x00, 0x00, 0x00, 0x74, 0xce, 0x98, 0xb0, 0xac, 0xb9, 0x44, 0xc5, 0xef, + 0x06, 0x58, 0x15, 0xd1, 0xff, 0x9a, 0x95, 0x45, 0x2f, 0xbd, 0x7b, 0x9b, + 0x04, 0xd8, 0x2d, 0x53, 0xff, 0x57, 0xe1, 0x06, 0x81, 0xff, 0x1a, 0x28, + 0x17, 0x3d, 0x06, 0x88, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x00, 0x06, 0x05, 0x0c, 0x09, 0x04, 0x04, 0x06, 0x06, 0x08, 0x06, 0x04, + 0x07, 0x05, 0x20, 0x05, 0x06, 0xff, 0x13, 0x04, 0x07, 0xf5, 0x00, 0x00, + 0x08, 0x28, 0x17, 0xf3, 0x30, 0x12, 0xbf, 0x30, 0xd6, 0x48, 0x1b, 0xde, + 0x5d, 0x06, 0x78, 0x17, 0x74, 0xbf, 0x2f, 0xab, 0x62, 0x66, 0x1b, 0x06, + 0xd0, 0x7f, 0x05, 0xf7, 0x1b, 0x58, 0x17, 0xb0, 0x7f, 0x05, 0xdd, 0xb3, + 0xc0, 0x07, 0xf1, 0x7f, 0x05, 0xf1, 0xff, 0x4e, 0x57, 0x54, 0x58, 0x03, + 0x5e, 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x58, 0x1b, 0x78, 0xce, 0xc0, + 0x12, 0xd0, 0x0c, 0xbe, 0x58, 0x19, 0xfc, 0xc8, 0x07, 0x13, 0x7f, 0xeb, + 0xb5, 0x06, 0x63, 0xff, 0xe1, 0x06, 0x63, 0xff, 0x58, 0x17, 0x42, 0x28, + 0x1d, 0x31, 0x28, 0x1b, 0x1c, 0x38, 0x04, 0x4f, 0x04, 0xe8, 0x07, 0x0f, + 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x07, 0x06, 0x00, 0x04, 0x0a, 0x05, + 0x05, 0x07, 0x07, 0x07, 0x05, 0x20, 0x08, 0x06, 0x20, 0x05, 0x07, 0xe8, + 0x1e, 0x4c, 0xfd, 0x10, 0x00, 0x00, 0x09, 0x28, 0x17, 0xb9, 0x30, 0xc6, + 0x30, 0x10, 0xa3, 0x30, 0xfc, 0x28, 0x19, 0xe3, 0x30, 0xfb, 0x30, 0x56, + 0xe9, 0x20, 0x03, 0xde, 0x28, 0x2b, 0xc1, 0x20, 0x0d, 0x05, 0x7e, 0x2f, + 0x73, 0xc1, 0x28, 0x17, 0x3c, 0x9f, 0x65, 0x00, 0x2d, 0x00, 0x4c, 0x2f, + 0xb5, 0x1f, 0x20, 0x00, 0x4d, 0x4f, 0xbb, 0x3f, 0x3d, 0x04, 0xf8, 0x27, + 0xb0, 0x7f, 0x00, 0x50, 0x81, 0xfd, 0x04, 0xdf, 0x45, 0x38, 0x17, 0x70, + 0xff, 0x58, 0x15, 0x05, 0xd1, 0x03, 0x91, 0x7f, 0x67, 0x40, 0x81, 0x70, + 0x61, 0x06, 0x80, 0x7f, 0x31, 0x7f, 0x05, 0xf0, 0x7d, 0x00, 0x00, 0x61, + 0x53, 0x08, 0xaf, 0x65, 0x82, 0x84, 0x38, 0x17, 0x2d, 0x00, 0xc9, 0x04, + 0x62, 0xfc, 0x66, 0x70, 0x60, 0x05, 0xd8, 0x1f, 0x74, 0xce, 0x00, 0xa4, + 0xc2, 0xf0, 0xd2, 0x7c, 0xc5, 0x7c, 0xb7, 0x0d, 0xcc, 0xb9, 0x28, 0xcc, + 0x06, 0x5b, 0x97, 0x92, 0x7f, 0xeb, 0x06, 0x03, 0x81, 0xb4, 0x73, 0xff, + 0x65, 0x06, 0x41, 0xfd, 0x58, 0x17, 0x41, 0x28, 0x17, 0x38, 0x04, 0x44, + 0x3b, 0x48, 0x15, 0x2d, 0x00, 0x1b, 0x28, 0x29, 0x2d, 0x00, 0x5c, 0x1c, + 0x48, 0x2f, 0x47, 0x28, 0x35, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, + 0x08, 0x07, 0x00, 0x06, 0x0b, 0x06, 0x06, 0x08, 0x08, 0x08, 0x06, 0x21, + 0x09, 0x07, 0x20, 0x05, 0x08, 0x57, 0x1c, 0x24, 0x28, 0x17, 0x47, 0x0a, + 0x00, 0x08, 0x17, 0xec, 0x30, 0xaa, 0x28, 0x15, 0x06, 0x54, 0x97, 0x36, + 0x17, 0x15, 0x20, 0x00, 0x79, 0x28, 0x17, 0x4c, 0x2f, 0xb7, 0xf3, 0x05, + 0x4f, 0x39, 0xbf, 0x00, 0x18, 0x17, 0x65, 0x2f, 0xbd, 0x38, 0x9f, 0x05, + 0x50, 0x81, 0x00, 0x58, 0x17, 0x05, 0x70, 0xfd, 0x00, 0x38, 0x17, 0x78, + 0x20, 0x29, 0x9f, 0x05, 0x91, 0x81, 0x06, 0xf1, 0xff, 0xb8, 0x17, 0xb1, + 0x83, 0x02, 0x60, 0x66, 0x05, 0xd8, 0x15, 0x98, 0x17, 0x74, 0xc7, 0x08, + 0xb8, 0x28, 0x6e, 0xc6, 0x07, 0x18, 0x17, 0x31, 0xfd, 0x6e, 0x06, 0x21, + 0xff, 0x58, 0x17, 0x92, 0x7b, 0xe3, 0x31, 0x00, 0x6f, 0x05, 0x4f, 0xb8, + 0xf8, 0x17, 0x20, 0x00, 0x38, 0x20, 0x03, 0x07, 0x1b, 0x04, 0x35, 0x04, + 0x3e, 0x28, 0x17, 0x0d, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x00, 0x09, + 0x08, 0x05, 0x0c, 0x07, 0x07, 0x09, 0x09, 0x08, 0x09, 0x07, 0x0a, 0x08, + 0x20, 0x05, 0x09, 0x9c, 0x1d, 0x04, 0xa5, 0xfc, 0x00, 0x00, 0x0b, 0x28, + 0x17, 0xbf, 0x30, 0x5d, 0xeb, 0x28, 0x15, 0xcb, 0x28, 0x15, 0x06, 0x1c, + 0xad, 0x5f, 0xaf, 0x74, 0x2f, 0xb3, 0x5a, 0x6c, 0x24, 0x07, 0x6e, 0x4e, + 0xaf, 0x06, 0x90, 0x7f, 0x67, 0x2f, 0xad, 0x65, 0xfc, 0x05, 0xed, 0xb2, + 0x38, 0x17, 0xb0, 0xff, 0x38, 0x19, 0x06, 0xb0, 0xff, 0x06, 0x91, 0x7f, + 0x75, 0x00, 0x40, 0xf1, 0x06, 0x01, 0xfd, 0x00, 0x00, 0xa0, 0x52, 0xf0, + 0x6c, 0x03, 0x57, 0x7f, 0x3c, 0x5c, 0x9a, 0x4e, 0x05, 0xf8, 0x11, 0x78, + 0x17, 0x03, 0xc8, 0xd0, 0xe8, 0xb8, 0xd0, 0xb0, 0x06, 0x33, 0x7b, 0x00, + 0x33, 0x7f, 0x5a, 0xeb, 0x06, 0xa1, 0xff, 0x6e, 0x05, 0x2f, 0x1f, 0x00, + 0x38, 0x17, 0x42, 0x28, 0x1b, 0x3b, 0xf0, 0x48, 0x07, 0x38, 0x19, 0x0e, + 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x0a, 0x09, 0x07, 0x0d, 0x00, 0x08, + 0x08, 0x0a, 0x0a, 0x0a, 0x08, 0x0b, 0x09, 0x80, 0x20, 0x05, 0x0a, 0x6d, + 0x1d, 0x8b, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x69, 0xd0, 0x30, 0xec, 0x30, + 0xf3, 0x30, 0x02, 0xb7, 0x30, 0xa2, 0x30, 0xde, 0x5d, 0x06, 0x38, 0x17, + 0x56, 0xde, 0x48, 0x13, 0x3f, 0x27, 0x63, 0x06, 0x28, 0x15, 0xd0, 0x7f, + 0x05, 0xf8, 0x13, 0x07, 0x30, 0xff, 0x43, 0xab, 0x2d, 0x97, 0x6d, 0x45, + 0x93, 0x69, 0x2f, 0xb5, 0xe0, 0x2f, 0xaf, 0xf1, 0x91, 0xf0, 0x04, 0xd8, + 0x2b, 0xd0, 0x7f, 0x3a, 0x23, 0x05, 0xd0, 0x81, 0xf4, 0x5d, 0x26, 0x4f, + 0x20, 0x7f, 0x89, 0x06, 0x78, 0x15, 0x00, 0x00, 0x1c, 0xbc, 0x0c, 0x00, + 0xb8, 0xdc, 0xc2, 0x44, 0xc5, 0x20, 0x00, 0xfc, 0x55, 0xc8, 0x0e, 0x93, + 0x7f, 0xea, 0x06, 0x83, 0xff, 0x12, 0x48, 0x13, 0x35, 0x28, 0x13, 0x70, + 0x41, 0x06, 0x28, 0x15, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x0b, + 0x13, 0x13, 0x13, 0x10, 0x0a, 0x0a, 0x0b, 0x20, 0x06, 0x05, 0x13, 0x0b, + 0x0b, 0x00, 0x0b, 0x0b, 0x11, 0x1c, 0xbe, 0xff, 0x00, 0x00, 0x01, 0x0d, + 0x69, 0xa8, 0x30, 0xb9, 0x30, 0xc8, 0x28, 0x1b, 0x00, 0xde, 0x30, 0xc9, + 0x30, 0xa5, 0x30, 0xfc, 0x30, 0x22, 0xe9, 0x30, 0x05, 0xdf, 0xb0, 0x45, + 0x00, 0x78, 0x2f, 0xaf, 0x72, 0xaa, 0x2f, 0xa7, 0x6d, 0x2f, 0xb9, 0x64, + 0x2e, 0x35, 0x72, 0x05, 0xce, 0xb3, 0x45, 0x2f, 0x00, 0x73, 0x40, 0x7f, + 0xe9, 0xa0, 0x7f, 0x05, 0xb8, 0x1f, 0x07, 0x70, 0xff, 0x06, 0x91, 0x7f, + 0x80, 0x06, 0xd1, 0xff, 0xc3, 0x57, 0xaf, 0x65, 0x79, 0x72, 0xf7, 0x01, + 0x96, 0x6c, 0x9a, 0x5c, 0x67, 0xc9, 0x62, 0x06, 0x18, 0x1d, 0x00, 0xd0, + 0xc5, 0xa4, 0xc2, 0xb8, 0xd2, 0x08, 0xb8, 0x03, 0xc8, 0xb9, 0x50, 0xb4, + 0x7c, 0xb7, 0x06, 0x1b, 0x99, 0x0e, 0xf2, 0x7f, 0x45, 0x2d, 0x28, 0x0f, + 0x42, 0x04, 0x40, 0x28, 0x19, 0x3c, 0x28, 0x21, 0x17, 0x34, 0x04, 0x43, + 0x20, 0x0b, 0x30, 0x05, 0xa8, 0x1d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, + 0x7f, 0x00, 0x0c, 0x0b, 0x09, 0x07, 0x0b, 0x0b, 0x0c, 0x0c, 0x10, 0x0c, + 0x0a, 0x13, 0x30, 0x05, 0x0c, 0xac, 0x1b, 0x7e, 0x00, 0xfb, 0x00, 0x00, + 0x0e, 0x69, 0xac, 0x30, 0xea, 0x8d, 0x28, 0x0d, 0xb7, 0x30, 0xa2, 0x05, + 0xe8, 0x0f, 0x7f, 0xff, 0x47, 0x4f, 0xaf, 0x7e, 0x69, 0x06, 0x6f, 0x2d, + 0xb0, 0x7f, 0x05, 0xb8, 0x0d, 0x00, 0x50, 0xff, 0x3f, 0xa3, 0x06, 0x71, + 0x7f, 0x7a, 0xc0, 0x07, 0x01, 0x7f, 0x06, 0x51, 0xff, 0xa0, 0x52, 0x29, + 0x52, 0x7f, 0x89, 0x30, 0x9a, 0x4e, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x08, + 0xac, 0xac, 0xb9, 0x0d, 0xdc, 0xc2, 0x44, 0xc5, 0x06, 0x53, 0x7d, 0xd3, + 0x7f, 0xeb, 0x06, 0xa3, 0xff, 0x44, 0x7a, 0x06, 0x43, 0xfd, 0x00, 0x00, + 0x13, 0x28, 0x0d, 0x3b, 0x04, 0x47, 0x38, 0x28, 0x1d, 0x38, 0x04, 0x4f, + 0x05, 0xa8, 0x0f, 0x08, 0x14, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x0d, + 0x0c, 0x0a, 0x08, 0x0c, 0x0c, 0x0d, 0x0d, 0x10, 0x0d, 0x0b, 0x06, 0x30, + 0x05, 0x0d, 0x7d, 0x1e, 0xed, 0x00, 0xf9, 0x00, 0x00, 0x0f, 0x69, 0xe0, + 0x30, 0xeb, 0x97, 0x48, 0x15, 0xde, 0x5d, 0x06, 0x58, 0x17, 0x4d, 0x4f, + 0xa1, 0x06, 0x78, 0x15, 0xb0, 0x7f, 0xe1, 0x06, 0x58, 0x17, 0x07, 0x90, + 0xff, 0x0e, 0x50, 0x7f, 0x46, 0x7a, 0x14, 0x5c, 0x06, 0xb8, 0x17, 0x10, + 0x34, 0xbb, 0x74, 0x48, 0x17, 0x20, 0x00, 0xfc, 0xc8, 0xa0, 0x0e, 0x53, + 0x7f, 0xfa, 0x06, 0xc3, 0xff, 0x1c, 0x04, 0x43, 0x04, 0x40, 0xe0, 0x06, + 0x88, 0x15, 0x10, 0x07, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x00, 0x11, 0x0e, 0x0e, 0x11, 0x10, 0x0e, 0x10, 0x0e, 0x00, + 0x0e, 0x0e, 0x0e, 0x02, 0x1b, 0x34, 0xff, 0x00, 0x00, 0x00, 0x10, 0x69, + 0xca, 0x30, 0xd0, 0x30, 0xfc, 0x2a, 0x30, 0xe9, 0x06, 0x88, 0x17, 0x4e, + 0x2f, 0xaf, 0x76, 0x2f, 0xb3, 0x72, 0xf8, 0x28, 0x1d, 0x06, 0x3f, 0xb1, + 0x07, 0xb0, 0x7f, 0x06, 0x3f, 0xaf, 0x0e, 0xf0, 0x7f, 0xb3, 0x7e, 0xe6, + 0x10, 0x74, 0xc9, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x98, 0xb0, 0x0c, + 0x14, 0xbc, 0x7c, 0xb7, 0x06, 0x78, 0x15, 0x0f, 0x12, 0x7f, 0x1d, 0x04, + 0x15, 0x30, 0x04, 0x32, 0x20, 0x03, 0x40, 0x28, 0x1d, 0x30, 0x06, 0x28, + 0x19, 0xc0, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x30, 0xff, 0x0f, 0x11, 0x11, + 0x12, 0x11, 0x12, 0x00, 0x0f, 0x0f, 0x12, 0x11, 0x0f, 0x11, 0x0f, 0x0f, + 0x00, 0x0f, 0x0f, 0x72, 0x1e, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x11, 0x69, + 0xd0, 0x30, 0xb9, 0x30, 0xaf, 0x30, 0xd1, 0x06, 0x58, 0x13, 0x3f, 0xff, + 0x42, 0x2f, 0x27, 0x73, 0x00, 0x71, 0x2f, 0xb5, 0x01, 0x65, 0x00, 0x20, + 0x00, 0x43, 0x00, 0x6f, 0x2f, 0xbf, 0x15, 0x6e, 0x00, 0x74, 0x2f, 0xc3, + 0x79, 0x05, 0x4f, 0xbf, 0x50, 0x2f, 0xa7, 0x46, 0x79, 0x20, 0x81, 0x20, + 0x00, 0x62, 0xa0, 0x89, 0x05, 0xf0, 0xff, 0x6b, 0x88, 0x29, 0x13, 0x6e, + 0x00, 0x6c, 0x2f, 0xb3, 0x6e, 0x00, 0x64, 0xd6, 0x05, 0xcf, 0xb7, 0x30, + 0xff, 0x65, 0x21, 0x81, 0x69, 0x21, 0x7d, 0x51, 0x8b, 0x63, 0x35, 0x00, + 0x68, 0x2f, 0xbd, 0x05, 0xb0, 0x7f, 0xed, 0x41, 0x7f, 0x56, 0x60, 0x7d, + 0x40, 0x6f, 0x05, 0xcf, 0xb4, 0xf4, 0x5d, 0xaf, 0x65, 0x4b, 0x51, 0x81, + 0x06, 0x98, 0x17, 0x14, 0xbc, 0xa4, 0xc2, 0x6c, 0xd0, 0x06, 0xf3, 0x7f, + 0xf1, 0x06, 0xd2, 0x7f, 0x51, 0xff, 0x72, 0x7d, 0x05, 0xd1, 0xff, 0x21, + 0x04, 0x42, 0x48, 0x11, 0x44, 0x3d, 0x28, 0x1f, 0x20, 0x00, 0x11, 0x28, + 0x25, 0x41, 0x04, 0x1c, 0x3a, 0x04, 0x3e, 0x28, 0x2b, 0x0d, 0x54, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x10, 0x04, 0x00, 0x12, 0x05, 0x12, 0x13, 0x10, + 0x10, 0x05, 0x12, 0x00, 0x12, 0x04, 0x10, 0x10, 0x10, 0x10, 0x78, 0x1e, + 0x40, 0x1a, 0x28, 0x17, 0x12, 0x69, 0xe9, 0x30, 0xfb, 0x30, 0x00, 0xea, + 0x30, 0xaa, 0x30, 0xcf, 0x30, 0xde, 0x5d, 0xa2, 0x06, 0x3d, 0x2f, 0x4c, + 0x2f, 0xaf, 0x20, 0x00, 0x52, 0x26, 0x97, 0x6f, 0x30, 0x00, 0x6a, 0x06, + 0x2f, 0x31, 0x10, 0x0e, 0xf0, 0x7f, 0xc9, 0x62, 0xcc, 0x91, 0x08, 0x65, + 0x59, 0xc8, 0x54, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0xac, 0x06, 0xb9, 0x24, + 0xc6, 0x58, 0xd5, 0x06, 0x7b, 0x99, 0x0e, 0xf3, 0x7f, 0x20, 0x2e, 0x04, + 0x38, 0x28, 0x05, 0x45, 0x28, 0x19, 0x10, 0x06, 0x51, 0x7f, 0x10, 0x06, + 0xf5, 0xff, 0x11, 0x00, 0x0d, 0x0d, 0x0e, 0x0d, 0x0e, 0x11, 0x11, 0x0e, + 0x00, 0x0d, 0x10, 0x0d, 0x11, 0x11, 0x11, 0x11, 0x32, 0x20, 0x1e, 0x42, + 0x28, 0x17, 0x13, 0x69, 0xbb, 0x30, 0xa6, 0x15, 0x30, 0xbf, 0x30, 0x06, + 0x9c, 0xaf, 0x43, 0x2f, 0x9d, 0x75, 0x2b, 0x1f, 0xc2, 0x06, 0x18, 0x11, + 0x10, 0x0f, 0x50, 0x7f, 0x11, 0x4f, 0xbe, 0x8f, 0x06, 0x9f, 0xad, 0x00, + 0x01, 0x00, 0x38, 0xc1, 0xb0, 0xc6, 0xc0, 0xd0, 0x10, 0x06, 0x93, 0x7f, + 0x01, 0x21, 0x04, 0x35, 0x04, 0x43, 0x04, 0x42, 0x06, 0x88, 0x17, 0x80, + 0x10, 0x16, 0xf4, 0xff, 0x12, 0x0a, 0x08, 0x06, 0x09, 0x09, 0x12, 0x00, + 0x12, 0x0b, 0x09, 0x11, 0x0a, 0x12, 0x12, 0x12, 0x00, 0x12, 0x84, 0x19, + 0x39, 0xfc, 0x00, 0x00, 0x14, 0x02, 0x69, 0xe1, 0x30, 0xea, 0x30, 0xe9, + 0x06, 0xa8, 0x17, 0x4d, 0xae, 0x28, 0x17, 0x6c, 0x2f, 0xad, 0x6c, 0x20, + 0x05, 0x06, 0x38, 0x1b, 0x10, 0x0e, 0xf0, 0x7f, 0x85, 0x01, 0x68, 0x29, + 0x52, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x7f, 0xaf, 0x02, 0x5c, 0xba, 0xac, + 0xb9, 0x7c, 0xc5, 0x10, 0x06, 0x93, 0x7f, 0x1c, 0x88, 0x28, 0x17, 0x3b, + 0x04, 0x38, 0x20, 0x03, 0x4c, 0x04, 0x4f, 0xc0, 0x06, 0x28, 0x1b, 0x10, + 0x16, 0xf4, 0xff, 0x13, 0x0f, 0x0f, 0x10, 0x0f, 0x10, 0x00, 0x13, 0x13, + 0x10, 0x0f, 0x0d, 0x0f, 0x13, 0x13, 0x02, 0x13, 0x13, 0x1a, 0x19, 0xe7, + 0xfd, 0x00, 0x3f, 0xff, 0x01, 0x00, 0x0e, 0x0e, 0x0f, 0x0e, 0x0f, 0x01, + 0x01, 0x0f, 0x00, 0x0e, 0x0c, 0x0e, 0x01, 0x01, 0x01, 0x01, 0x02, 0x90, + 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x48, 0x03, + 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x00, 0x03, 0x04, + 0x12, 0x03, 0x03, 0x13, 0x03, 0x04, 0x40, 0x04, 0x20, 0x0b, 0x12, 0x04, + 0x04, 0x04, 0x04, 0x05, 0x00, 0x03, 0x0b, 0x04, 0x03, 0x0d, 0x05, 0x05, + 0x04, 0x00, 0x0c, 0x04, 0x03, 0x05, 0x05, 0x05, 0x05, 0x06, 0x00, 0x05, + 0x0c, 0x09, 0x04, 0x04, 0x06, 0x06, 0x06, 0x10, 0x04, 0x07, 0x05, 0x20, + 0x05, 0x06, 0x07, 0x06, 0x04, 0x00, 0x0a, 0x05, 0x05, 0x07, 0x07, 0x07, + 0x05, 0x08, 0x40, 0x06, 0x20, 0x05, 0x07, 0x08, 0x07, 0x06, 0x0b, 0x06, + 0x14, 0x06, 0x08, 0x08, 0x28, 0xb5, 0x07, 0x20, 0x05, 0x08, 0x09, 0x00, + 0x08, 0x05, 0x0c, 0x07, 0x07, 0x09, 0x09, 0x09, 0x10, 0x07, 0x0a, 0x08, + 0x20, 0x05, 0x09, 0x0a, 0x09, 0x07, 0x00, 0x0d, 0x08, 0x08, 0x0a, 0x0a, + 0x0a, 0x08, 0x0b, 0x4e, 0x09, 0x20, 0x05, 0x0a, 0x0b, 0x20, 0xbc, 0x20, + 0x05, 0x20, 0x06, 0x05, 0x00, 0x13, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, + 0x09, 0x42, 0x07, 0x20, 0x05, 0x0c, 0x0c, 0x0a, 0x13, 0x30, 0x05, 0x0c, + 0x08, 0x0d, 0x0c, 0x0a, 0x08, 0x20, 0x05, 0x0d, 0x0d, 0x0b, 0x40, 0x06, + 0x30, 0x05, 0x0d, 0x0e, 0x10, 0x10, 0x11, 0x10, 0x00, 0x11, 0x0e, 0x0e, + 0x11, 0x10, 0x0e, 0x10, 0x0e, 0x40, 0x0e, 0x20, 0xdc, 0x11, 0x11, 0x12, + 0x11, 0x12, 0x0f, 0x01, 0x0f, 0x12, 0x11, 0x0f, 0x11, 0x0f, 0x0f, 0x21, + 0x14, 0x00, 0x04, 0x12, 0x05, 0x12, 0x13, 0x10, 0x10, 0x05, 0x06, 0x12, + 0x12, 0x04, 0x10, 0x10, 0x20, 0x2c, 0x20, 0x32, 0x0d, 0x00, 0x0e, 0x11, + 0x11, 0x0e, 0x0d, 0x10, 0x0d, 0x11, 0x78, 0x11, 0x20, 0x2c, 0xe9, 0x4f, + 0xf1, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0xd4, 0x28, 0x00, + 0x11, 0x04, 0x00, 0x00, 0x30, 0x01, 0x6a, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x49, 0xed, 0x24, + 0x16, 0x00, 0x01, 0x00, 0x02, 0x6a, 0xdb, 0x30, 0xdb, 0x30, 0x06, 0xb8, + 0x19, 0x07, 0x48, 0x00, 0x68, 0x00, 0x6f, 0x20, 0x03, 0x30, 0x05, 0x10, + 0x16, 0x30, 0x7f, 0x02, 0x0d, 0x97, 0x0d, 0x97, 0x3a, 0x53, 0x06, 0x9b, + 0x1b, 0x38, 0x10, 0xd6, 0x38, 0xd6, 0x10, 0x06, 0xb3, 0x7f, 0x25, 0x04, + 0x3e, 0x04, 0x65, 0x45, 0x20, 0x03, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x01, + 0x70, 0x01, 0x03, 0x40, 0x0a, 0x80, 0x58, 0x17, 0x03, 0x6a, 0xeb, 0x30, + 0xdc, 0x30, 0xf3, 0xc1, 0x20, 0x03, 0x06, 0x7f, 0xb5, 0x4c, 0x00, 0x75, + 0x00, 0x62, 0x28, 0x19, 0x60, 0x6d, 0x40, 0x05, 0x10, 0x16, 0x10, 0x7f, + 0x62, 0x53, 0xa6, 0x90, 0x5a, 0x40, 0x53, 0x06, 0x98, 0x19, 0x5c, 0xb8, + 0x24, 0xbc, 0x14, 0xbc, 0xc1, 0x06, 0x9f, 0xb3, 0x0e, 0xf3, 0x7f, 0x1b, + 0x04, 0x43, 0x04, 0x31, 0x28, 0x1b, 0x65, 0x3c, 0x40, 0x05, 0x10, 0x1e, + 0x14, 0xff, 0x02, 0x02, 0x70, 0x01, 0x01, 0x40, 0x0a, 0x11, 0x31, 0xed, + 0xb8, 0x28, 0x17, 0x04, 0x6a, 0xde, 0x28, 0x15, 0x10, 0xb8, 0x30, 0xcb, + 0x06, 0x88, 0x17, 0x4d, 0x00, 0x61, 0x00, 0x05, 0x6e, 0x00, 0x7a, 0x00, + 0x69, 0x20, 0x05, 0x69, 0x10, 0x16, 0x20, 0x7f, 0x02, 0xfc, 0x66, 0x50, + 0x9f, 0x3c, 0x5c, 0x06, 0x98, 0x17, 0xcc, 0x06, 0xb9, 0xc0, 0xc9, 0xc8, + 0xb2, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x00, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x37, 0x04, 0x38, 0xb2, 0x20, 0x05, 0x38, 0x06, 0x28, 0x17, + 0x10, 0x16, 0xf4, 0xff, 0x03, 0x03, 0x70, 0x01, 0x02, 0x88, 0x40, 0x0a, + 0x2a, 0xed, 0x51, 0x28, 0x17, 0x05, 0x6a, 0xb7, 0x00, 0x30, 0xbb, 0x30, + 0xeb, 0x30, 0xa6, 0x30, 0xa7, 0x88, 0x06, 0x68, 0x1b, 0x53, 0x00, 0x68, + 0x28, 0x13, 0x73, 0x00, 0x65, 0x0e, 0x00, 0x6c, 0x00, 0x77, 0x20, 0x05, + 0x05, 0xf8, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x01, 0x5e, 0x5e, 0x58, + 0x62, 0x53, 0xe6, 0x97, 0x06, 0x78, 0x1b, 0x03, 0xdc, 0xc2, 0x40, 0xc1, + 0xe8, 0xc6, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x40, 0x28, 0x28, 0x11, + 0x41, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x72, 0x32, 0x20, 0x05, 0x06, 0x18, + 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0xd0, 0x01, 0xba, 0x32, 0xec, + 0x30, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x01, 0x70, 0x01, 0x03, 0x9f, + 0x40, 0x0a, 0x02, 0x02, 0x70, 0x01, 0x50, 0x0a, 0xf8, 0x5f, 0xf0, 0x57, + 0x3f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x7c, 0xb3, 0x00, + 0x11, 0x15, 0x00, 0x00, 0x30, 0x01, 0x6b, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x28, 0x2a, 0xda, + 0x0c, 0x00, 0x00, 0x00, 0x02, 0x6b, 0xb9, 0x30, 0xc8, 0x30, 0xc3, 0x00, + 0x30, 0xaf, 0x30, 0xdb, 0x30, 0xeb, 0x30, 0xe0, 0x10, 0x30, 0xde, 0x5d, + 0x05, 0xf8, 0x25, 0x53, 0x00, 0x74, 0x00, 0x01, 0x6f, 0x00, 0x63, 0x00, + 0x6b, 0x00, 0x68, 0x20, 0x07, 0x01, 0x6c, 0x00, 0x6d, 0x00, 0x20, 0x00, + 0x43, 0x20, 0x11, 0x16, 0x75, 0x00, 0x6e, 0x20, 0x19, 0x79, 0x06, 0x20, + 0x7f, 0x06, 0xf0, 0xff, 0x73, 0x8d, 0x21, 0x01, 0x6c, 0x00, 0xe4, 0x20, + 0xff, 0x05, 0xb1, 0x7f, 0x63, 0x61, 0x7d, 0x5d, 0x61, 0x05, 0xea, 0x26, + 0x45, 0x20, 0xef, 0x52, 0x01, 0x51, 0xfd, 0x6f, 0x05, 0xea, 0xa6, 0x00, + 0xaf, 0x65, 0xb7, 0x5f, 0xe5, 0x54, 0x14, 0x5c, 0x08, 0x69, 0x64, 0x01, + 0x77, 0x06, 0x3b, 0x21, 0xa4, 0xc2, 0xa1, 0x00, 0xd1, 0x40, 0xd6, 0x84, + 0xb9, 0x20, 0x00, 0xfc, 0x70, 0xc8, 0x06, 0x3b, 0xa1, 0x06, 0xf2, 0x7f, + 0x06, 0xf1, 0xff, 0x1b, 0x04, 0x35, 0x04, 0x00, 0x3d, 0x04, 0x20, 0x00, + 0x21, 0x04, 0x42, 0x04, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x33, 0x20, 0x05, + 0x3b, 0x04, 0x0c, 0x4c, 0x04, 0x3c, 0x04, 0x0e, 0x74, 0xff, 0x10, 0x0d, + 0xd0, 0x7f, 0x01, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x04, 0x01, 0x01, 0x0f, + 0x04, 0x02, 0x11, 0x0f, 0x01, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x83, + 0x28, 0x17, 0xb3, 0x30, 0xfc, 0x30, 0xcd, 0x06, 0x28, 0x11, 0x78, 0x17, + 0x17, 0x6b, 0x00, 0xe5, 0x28, 0x03, 0x65, 0x05, 0xe8, 0x0f, 0x00, 0x10, + 0x7f, 0x07, 0x10, 0xff, 0xd1, 0x05, 0x98, 0x0d, 0xb9, 0x97, 0x63, 0x28, + 0x0b, 0x6e, 0x00, 0x69, 0x06, 0x08, 0x11, 0xc0, 0x98, 0x17, 0x06, 0xb0, + 0x81, 0xaf, 0x65, 0xd1, 0x79, 0x10, 0x80, 0xc3, 0x06, 0x58, 0x13, 0x58, + 0x17, 0x54, 0xcf, 0x24, 0xb1, 0x06, 0x78, 0x15, 0x07, 0x12, 0x7f, 0xb5, + 0x51, 0xff, 0xe2, 0x06, 0x82, 0x81, 0x98, 0x17, 0x3a, 0x28, 0x17, 0x3d, + 0x28, 0x25, 0xc0, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x02, 0x0d, + 0x0d, 0x0d, 0x0d, 0x03, 0x00, 0x02, 0x02, 0x0d, 0x03, 0x10, 0x0d, 0x02, + 0x02, 0x00, 0x02, 0x02, 0x89, 0x27, 0x3e, 0x09, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0xf4, 0x30, 0xa7, 0x30, 0xb9, 0x30, 0x01, 0xc8, 0x30, 0xe9, 0x30, + 0xfb, 0x30, 0xa4, 0x20, 0x0b, 0x11, 0xfc, 0x30, 0xbf, 0x20, 0x0b, 0xf3, + 0x30, 0xc9, 0x05, 0x68, 0x29, 0x68, 0x56, 0x2f, 0x19, 0x3e, 0x31, 0x72, + 0x2e, 0xa9, 0x20, 0x00, 0x47, 0x2d, 0x00, 0xf6, 0x2f, 0xbf, 0x61, 0x2f, + 0xb7, 0x36, 0xab, 0x64, 0x05, 0x2b, 0x3b, 0xf8, 0x00, 0xd0, 0x7f, 0x06, + 0xf0, 0xff, 0x05, 0x1d, 0xbb, 0x08, 0xd0, 0xff, 0x05, 0x1f, 0xc1, 0x7f, + 0x89, 0xa6, 0x04, 0x7e, 0x79, 0x72, 0x70, 0x51, 0x06, 0x78, 0x19, 0xa0, + 0xbc, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x7c, 0xb7, 0x08, 0xc6, 0x03, 0xc8, + 0xd0, 0x80, 0xb7, 0xdc, 0xb4, 0x05, 0xf8, 0x21, 0x0e, 0xf2, 0x7f, 0xa0, + 0x78, 0x17, 0x12, 0x28, 0x1f, 0x41, 0x04, 0x42, 0x04, 0x40, 0x00, 0x04, + 0x30, 0x04, 0x2d, 0x00, 0x13, 0x04, 0x51, 0x88, 0x20, 0x0b, 0x30, 0x04, + 0x3b, 0x20, 0x0d, 0x3d, 0x04, 0x34, 0xe2, 0x04, 0xa8, 0x2b, 0x08, 0xd4, + 0xff, 0x10, 0x0d, 0x10, 0x7f, 0x03, 0x15, 0x15, 0x20, 0x01, 0x03, 0xa0, + 0x20, 0x06, 0x07, 0x20, 0x05, 0x03, 0x03, 0x09, 0x29, 0x83, 0x02, 0x08, + 0x00, 0x00, 0x05, 0x6b, 0xa8, 0x28, 0x15, 0xc6, 0x3d, 0x30, 0xeb, 0x48, + 0x13, 0x38, 0x1d, 0x05, 0x98, 0x11, 0x5f, 0xff, 0xd6, 0x48, 0x15, 0x5f, + 0x65, 0x28, 0x17, 0x67, 0x48, 0x13, 0x05, 0x98, 0x11, 0x00, 0xd0, 0x7f, + 0x06, 0xf0, 0xff, 0x05, 0x18, 0x11, 0xc8, 0x08, 0xd0, 0xff, 0x05, 0x7f, + 0xbf, 0x1c, 0x4e, 0x06, 0xd8, 0x17, 0x78, 0xc6, 0xa4, 0x00, 0xc2, 0x4c, + 0xd1, 0x74, 0xb9, 0x08, 0xc6, 0xc0, 0x75, 0xd2, 0x06, 0x38, 0x17, 0x0e, + 0xf2, 0x7f, 0x78, 0x17, 0x2d, 0x48, 0x15, 0x35, 0x28, 0x17, 0x78, 0x33, + 0x48, 0x13, 0x05, 0x18, 0x11, 0x08, 0xd4, 0xff, 0x10, 0x0d, 0x70, 0x7f, + 0x04, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x0e, 0x04, 0x04, 0x0c, 0x0e, 0x15, + 0x00, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x87, 0x29, 0x1e, 0x00, 0x0b, 0x00, + 0x00, 0x06, 0x6b, 0xbb, 0x30, 0xfc, 0x2c, 0x30, 0xc7, 0x28, 0x17, 0xde, + 0x28, 0x11, 0x06, 0x18, 0x15, 0x00, 0x00, 0x57, 0x53, 0x2f, 0xa1, 0x64, + 0x48, 0x17, 0x6d, 0x4f, 0xa3, 0x05, 0xf8, 0x17, 0x00, 0x70, 0x7f, 0xf0, + 0x06, 0xf0, 0xff, 0x05, 0x78, 0x17, 0x08, 0x70, 0xff, 0x05, 0x7f, 0xbd, + 0x57, 0x53, 0xfc, 0x66, 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0xe0, 0xc1, + 0x70, 0xb3, 0x74, 0x1d, 0xb9, 0xcc, 0xb9, 0x06, 0x38, 0x13, 0x0f, 0x32, + 0x7f, 0x78, 0x17, 0x21, 0x28, 0x0d, 0x5e, 0x34, 0x48, 0x17, 0x3c, 0x48, + 0x11, 0x05, 0x78, 0x17, 0x08, 0x74, 0xff, 0x10, 0x0d, 0x70, 0x7f, 0x05, + 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x05, 0x05, 0x0e, 0x00, 0x0f, 0x0f, + 0x0e, 0x05, 0x05, 0x05, 0x05, 0xc8, 0x00, 0x29, 0x19, 0x0c, 0x00, 0x00, + 0x07, 0x6b, 0xd9, 0xb7, 0x28, 0x13, 0xe0, 0x06, 0x48, 0x11, 0x5f, 0xff, + 0x56, 0x2f, 0x13, 0x38, 0x13, 0x05, 0xfb, 0x27, 0xf8, 0x00, 0x70, 0x7f, + 0x06, 0xf0, 0xff, 0x05, 0x7d, 0xa7, 0x08, 0x70, 0xff, 0x05, 0xff, 0xb5, + 0xe6, 0x97, 0xc6, 0x47, 0x59, 0x06, 0xb8, 0x17, 0xa0, 0xbc, 0x84, 0x06, + 0x88, 0x13, 0x0f, 0x32, 0x7f, 0x78, 0x17, 0x78, 0x12, 0x68, 0x13, 0x05, + 0x78, 0x0f, 0x08, 0x74, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x06, 0x11, 0x11, + 0xa8, 0x20, 0x01, 0x06, 0x20, 0x06, 0x03, 0x20, 0x05, 0x06, 0x06, 0x3b, + 0x00, 0x2a, 0x9a, 0x09, 0x00, 0x00, 0x08, 0x6b, 0xa6, 0x0e, 0x30, 0xd7, + 0x30, 0xb5, 0x28, 0x17, 0x06, 0x38, 0x13, 0x3f, 0xff, 0x55, 0x2f, 0x00, + 0x70, 0x20, 0x01, 0x73, 0x2f, 0xab, 0x3f, 0xa9, 0x05, 0xf8, 0x15, 0xf0, + 0x7f, 0xf0, 0x07, 0x10, 0xff, 0x05, 0xb8, 0x13, 0x08, 0x10, 0xff, 0x06, + 0x1f, 0xb5, 0x4c, 0x4e, 0x6e, 0x66, 0x08, 0x28, 0x84, 0xc9, 0x62, 0x06, + 0x78, 0x19, 0xc1, 0xc6, 0xb4, 0x1c, 0xc0, 0x7c, 0xb7, 0x06, 0x78, 0x15, + 0x0f, 0x12, 0x7f, 0x78, 0x17, 0x23, 0x04, 0x5e, 0x3f, 0x20, 0x01, 0x41, + 0x28, 0x15, 0x38, 0x19, 0x0e, 0x74, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x07, + 0x2a, 0x10, 0x10, 0x20, 0x01, 0x07, 0x20, 0x06, 0x12, 0x20, 0x05, 0x07, + 0x00, 0x07, 0x90, 0x2a, 0x8a, 0x0c, 0x00, 0x00, 0x09, 0x00, 0x6b, 0xa4, + 0x30, 0xa7, 0x30, 0xfc, 0x30, 0xd6, 0x02, 0x30, 0xec, 0x30, 0xdc, 0x30, + 0xea, 0x06, 0x28, 0x1d, 0x47, 0xa2, 0x2f, 0xaf, 0x76, 0x2f, 0xad, 0x65, + 0x00, 0x62, 0x2b, 0x27, 0x72, 0x3f, 0x00, 0x67, 0x05, 0xeb, 0x31, 0x00, + 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xdd, 0xb1, 0x08, 0x10, 0xff, 0x05, + 0xdf, 0xb9, 0x00, 0x36, 0x80, 0x2b, 0x59, 0xd2, 0x52, 0x21, 0x58, 0x80, + 0x06, 0x78, 0x17, 0x08, 0xc6, 0x14, 0xbe, 0x08, 0xb8, 0xf4, 0x1c, 0xbc, + 0xac, 0xb9, 0x06, 0x58, 0x1b, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x15, 0x04, + 0x40, 0x32, 0x28, 0x11, 0x35, 0x04, 0x31, 0x04, 0x3e, 0x04, 0x1c, 0x40, + 0x04, 0x33, 0x05, 0x88, 0x19, 0x08, 0x14, 0xff, 0x10, 0x0d, 0xd0, 0x7f, + 0x08, 0x03, 0x00, 0x03, 0x03, 0x03, 0x05, 0x08, 0x08, 0x03, 0x05, 0x00, + 0x09, 0x03, 0x08, 0x08, 0x08, 0x08, 0x25, 0x2b, 0x40, 0x38, 0x28, 0x17, + 0x0a, 0x6b, 0xd9, 0x30, 0xb9, 0x30, 0x15, 0xc6, 0x30, 0xeb, 0x28, 0x15, + 0xc3, 0x20, 0x07, 0xf3, 0x06, 0x08, 0x19, 0x56, 0x56, 0x2f, 0x1f, 0x73, + 0x2b, 0x1d, 0x65, 0x28, 0x13, 0x38, 0x19, 0x74, 0xbf, 0x40, 0x0b, 0x6e, + 0x05, 0x8b, 0x39, 0x00, 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x78, 0x1d, + 0x08, 0x70, 0xff, 0x05, 0x7f, 0xbd, 0x02, 0x7f, 0x89, 0x5a, 0x53, 0xd5, + 0x6e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xa0, 0xbc, 0xa4, 0xc2, 0x4c, + 0xd1, 0x74, 0x07, 0xb9, 0xf4, 0xbc, 0x50, 0xd1, 0x06, 0x38, 0x19, 0x0e, + 0xf2, 0x7f, 0x78, 0x17, 0x45, 0x12, 0x28, 0x1f, 0x41, 0x04, 0x42, 0x28, + 0x25, 0x40, 0x48, 0x1b, 0x5c, 0x42, 0x40, 0x0b, 0x3d, 0x05, 0x08, 0x1f, + 0x08, 0x74, 0xff, 0x10, 0x0d, 0x70, 0x7f, 0x09, 0x12, 0x54, 0x12, 0x20, + 0x01, 0x09, 0x20, 0x06, 0x04, 0x20, 0x05, 0x09, 0x09, 0x00, 0x62, 0x2d, + 0x66, 0x0e, 0x00, 0x00, 0x0b, 0x6b, 0x6f, 0xce, 0x06, 0xa8, 0x13, 0x3f, + 0xff, 0x4e, 0x4f, 0xa5, 0x06, 0x58, 0x13, 0x00, 0x70, 0x7f, 0x06, 0xf0, + 0xff, 0xe4, 0x05, 0xbd, 0xb1, 0x08, 0x30, 0xff, 0x05, 0xbf, 0xb9, 0x17, + 0x53, 0x06, 0xd8, 0x17, 0x78, 0xb1, 0xeb, 0x06, 0x98, 0x13, 0x0f, 0x32, + 0x7f, 0x78, 0x17, 0x1d, 0x28, 0x0b, 0x40, 0x05, 0xe8, 0x13, 0x08, 0x74, + 0xff, 0x95, 0x10, 0x0d, 0xb0, 0x7f, 0x0a, 0x0a, 0x20, 0x01, 0x0c, 0x30, + 0x03, 0x0e, 0x40, 0x0a, 0x00, 0xa2, 0x2e, 0xcc, 0x0f, 0x00, 0x00, 0x0c, + 0x6b, 0x05, 0xb4, 0x30, 0xc8, 0x30, 0xe9, 0x28, 0x13, 0xc9, 0x06, 0x48, + 0x15, 0x11, 0x00, 0x00, 0x47, 0x4f, 0xa3, 0x6c, 0x00, 0x61, 0x2f, 0xa3, + 0x5f, 0x64, 0x2f, 0x23, 0x49, 0x2f, 0xbd, 0x70, 0x0d, 0x06, 0x10, 0x7f, + 0x06, 0xf0, 0xff, 0x3d, 0xa5, 0x70, 0x49, 0x05, 0x68, 0x11, 0x08, 0x30, + 0xff, 0x06, 0x1f, 0xb5, 0xe5, 0x54, 0x97, 0x5f, 0x20, 0x70, 0x51, 0x06, + 0x98, 0x17, 0xe0, 0xac, 0xc0, 0xd2, 0x80, 0x1e, 0xb7, 0xdc, 0xb4, 0x06, + 0x78, 0x17, 0x00, 0x12, 0x7f, 0x05, 0x7a, 0x91, 0x07, 0x53, 0x7f, 0x13, + 0x8b, 0x48, 0x07, 0x3b, 0x04, 0x30, 0x28, 0x1d, 0x34, 0x05, 0x48, 0x09, + 0x08, 0xb4, 0xff, 0x80, 0x10, 0x0e, 0x10, 0x7f, 0x0b, 0x04, 0x04, 0x04, + 0x04, 0x06, 0x0b, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x04, 0x0b, 0x0b, 0x0b, + 0x00, 0x0b, 0xfc, 0x28, 0x01, 0x0d, 0x00, 0x00, 0x0d, 0x02, 0x6b, 0xa4, + 0x30, 0xa7, 0x30, 0xe0, 0x06, 0xa8, 0x1b, 0x4a, 0xbf, 0x2f, 0x17, 0x6d, + 0xc8, 0x19, 0x05, 0x9b, 0x2b, 0x00, 0x30, 0x7f, 0x06, 0xf0, 0xff, 0x05, + 0xf5, 0x99, 0x07, 0xf0, 0xff, 0x81, 0x05, 0xff, 0xb7, 0x36, 0x80, 0xc6, + 0x59, 0x79, 0x72, 0x06, 0x98, 0x19, 0x31, 0x18, 0xc6, 0x06, 0xd8, 0x17, + 0x0e, 0xf2, 0x7f, 0x1b, 0x04, 0x35, 0x28, 0x11, 0x07, 0x20, 0x00, 0x15, + 0x04, 0x3c, 0x06, 0x48, 0x1f, 0x07, 0xf4, 0xff, 0x10, 0x0d, 0xf0, 0x7f, + 0x00, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x08, 0x0c, 0x0c, 0x00, 0x06, 0x08, + 0x0a, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0xeb, 0x2c, 0x6b, 0x0a, 0x00, + 0x00, 0x0e, 0x6b, 0x16, 0xc0, 0x30, 0xfc, 0x28, 0x13, 0xca, 0x06, 0x28, + 0x11, 0x5f, 0xff, 0x44, 0xd7, 0x2f, 0xa9, 0x3f, 0xad, 0x72, 0x2f, 0xaf, + 0x61, 0x06, 0x08, 0x15, 0xf0, 0x7f, 0x06, 0xf0, 0xff, 0xe0, 0x06, 0x1d, + 0xaf, 0x07, 0xd0, 0xff, 0x06, 0x1f, 0xb5, 0xbe, 0x8f, 0xc9, 0x62, 0xb3, + 0x40, 0x7e, 0x06, 0x78, 0x15, 0x00, 0x00, 0xec, 0xb2, 0x7c, 0xb7, 0x0c, + 0x74, 0xb9, 0x98, 0xb0, 0x06, 0x78, 0x17, 0x07, 0x52, 0x7f, 0x65, 0x00, + 0x46, 0x63, 0x44, 0x03, 0x6c, 0x00, 0x69, 0x05, 0xe3, 0x85, 0x78, 0x17, + 0x14, 0xd7, 0x28, 0x11, 0x38, 0x15, 0x40, 0x28, 0x25, 0x30, 0x05, 0xa8, + 0x17, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x15, 0x0d, 0x02, 0x02, + 0x20, 0x01, 0x0d, 0x20, 0x06, 0x08, 0x20, 0x05, 0x00, 0x0d, 0x0d, 0x1a, + 0x2b, 0x20, 0x0b, 0x00, 0x00, 0x04, 0x0f, 0x6b, 0xd6, 0x30, 0xec, 0x28, + 0x19, 0xad, 0x30, 0x15, 0xf3, 0x30, 0xb2, 0x06, 0x48, 0x1b, 0x42, 0x44, + 0x15, 0x6b, 0x24, 0x0f, 0x1f, 0x6e, 0x00, 0x67, 0x24, 0x1f, 0x05, 0xfb, + 0x2f, 0xf0, 0x7f, 0x07, 0x10, 0xff, 0x05, 0xd8, 0x17, 0xc0, 0x07, 0xf0, + 0xff, 0x05, 0xff, 0xb5, 0x03, 0x5e, 0xb1, 0x83, 0xd1, 0x91, 0x20, 0x84, + 0x53, 0x06, 0x78, 0x19, 0x14, 0xbe, 0x08, 0xb8, 0xb9, 0x1d, 0xd0, 0xd0, + 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x11, 0x28, 0x15, + 0x05, 0x35, 0x04, 0x3a, 0x04, 0x38, 0x28, 0x25, 0x33, 0x28, 0x2b, 0xc5, + 0x0e, 0x74, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x0e, 0x01, 0x01, 0x20, 0x01, + 0x0e, 0x20, 0x06, 0x41, 0x02, 0x20, 0x05, 0x0e, 0x0e, 0xf1, 0x27, 0x15, + 0x28, 0x17, 0x11, 0x10, 0x6b, 0xa8, 0x28, 0x17, 0xd6, 0x30, 0xeb, 0x28, + 0x1b, 0x88, 0x06, 0x38, 0x15, 0x00, 0x00, 0xd6, 0x2f, 0xa9, 0x65, 0x00, + 0x62, 0xbf, 0x2f, 0xaf, 0x6f, 0x06, 0x2b, 0x2d, 0xd0, 0x7f, 0x07, 0x10, + 0xff, 0x05, 0xdd, 0xab, 0x07, 0xf0, 0xff, 0x06, 0x3f, 0xb3, 0x00, 0x84, + 0x53, 0xd2, 0x52, 0x03, 0x5e, 0x81, 0x9c, 0x80, 0x06, 0x78, 0x17, 0x78, + 0xc6, 0x08, 0xb8, 0x0c, 0xbe, 0x5c, 0x71, 0xb8, 0x06, 0x78, 0x17, 0x0e, + 0xf2, 0x7f, 0x78, 0x17, 0x2d, 0x04, 0x40, 0x28, 0x21, 0x5c, 0x31, 0x20, + 0x05, 0x43, 0x05, 0x88, 0x13, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x30, 0x7f, + 0x0f, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x0d, 0x0f, 0x0f, 0x0b, 0x0d, 0x00, + 0x14, 0x0b, 0x0f, 0x0f, 0x0f, 0x0f, 0x26, 0x2a, 0x00, 0xd3, 0x0a, 0x00, + 0x00, 0x11, 0x6b, 0xd9, 0x30, 0x14, 0xb9, 0x30, 0xc6, 0x28, 0x17, 0xce, + 0x28, 0x1b, 0xe9, 0x30, 0x15, 0xf3, 0x30, 0xc9, 0x05, 0xe8, 0x1f, 0x56, + 0x2f, 0x1d, 0x73, 0x2b, 0x1b, 0x54, 0x65, 0x28, 0x1f, 0x6e, 0x2b, 0x29, + 0x72, 0x28, 0x27, 0x6c, 0x00, 0x5d, 0x61, 0x2f, 0xbd, 0x64, 0x05, 0x4b, + 0x3b, 0x00, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x73, 0x05, 0x2d, 0xbd, 0xc0, + 0x08, 0xb0, 0xff, 0x05, 0x3f, 0xc1, 0x7f, 0x89, 0xfa, 0x8b, 0x14, 0x5c, + 0x20, 0x70, 0x51, 0x06, 0x78, 0x17, 0xa0, 0xbc, 0xa4, 0xc2, 0x4c, 0x00, + 0xd1, 0x74, 0xb9, 0x78, 0xb1, 0x7c, 0xb9, 0x80, 0x1d, 0xb7, 0xdc, 0xb4, + 0x05, 0xf8, 0x1f, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x12, 0x28, 0x1f, 0x15, + 0x41, 0x04, 0x42, 0x28, 0x25, 0x40, 0x28, 0x27, 0x3e, 0x28, 0x25, 0x05, + 0x40, 0x04, 0x3b, 0x04, 0x30, 0x28, 0x33, 0x34, 0x04, 0xc8, 0x27, 0xc5, + 0x08, 0xb4, 0xff, 0x10, 0x0d, 0x30, 0x7f, 0x10, 0x13, 0x13, 0x20, 0x01, + 0x10, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, 0x10, 0x10, 0x89, 0x2c, 0xc0, + 0x0c, 0x01, 0x00, 0x00, 0x12, 0x6b, 0xa4, 0x30, 0xa7, 0x28, 0x0d, 0x54, + 0xc1, 0x20, 0x05, 0xd4, 0x28, 0x15, 0xb0, 0x05, 0xe8, 0x15, 0x00, 0x00, + 0x14, 0x4a, 0x00, 0xf6, 0x2f, 0x21, 0x6b, 0x20, 0x05, 0x70, 0x00, 0x5f, + 0x69, 0x2f, 0x2b, 0x67, 0x05, 0xeb, 0x35, 0x00, 0x10, 0x7f, 0x06, 0xf0, + 0xff, 0x05, 0x38, 0x0d, 0x08, 0xb0, 0xff, 0x81, 0x05, 0xdf, 0xb7, 0xf6, + 0x5e, 0xea, 0x96, 0x73, 0x5e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x0c, + 0xc6, 0x70, 0xc1, 0x51, 0xd5, 0xe2, 0x05, 0xf8, 0x0d, 0x0f, 0x92, 0x7f, + 0x78, 0x17, 0x19, 0x04, 0x51, 0x28, 0x1f, 0x47, 0x8b, 0x20, 0x05, 0x3f, + 0x04, 0x38, 0x28, 0x29, 0x33, 0x04, 0xc8, 0x0d, 0x08, 0xb4, 0xff, 0x80, + 0x10, 0x0d, 0xd0, 0x7f, 0x11, 0x07, 0x07, 0x07, 0x07, 0x09, 0x11, 0x00, + 0x11, 0x07, 0x09, 0x0b, 0x07, 0x11, 0x11, 0x11, 0x00, 0x11, 0x15, 0x29, + 0x13, 0x0a, 0x00, 0x00, 0x13, 0x00, 0x6b, 0xaf, 0x30, 0xed, 0x30, 0xce, + 0x30, 0xd9, 0x35, 0x30, 0xea, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x4b, 0x2f, + 0xa7, 0x6f, 0x4f, 0xa9, 0x7f, 0x62, 0x4f, 0xb3, 0x05, 0xf8, 0x17, 0x00, + 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xd8, 0x17, 0x08, 0x10, 0xff, 0x05, + 0xe2, 0x7f, 0x00, 0x51, 0x81, 0x9c, 0xaa, 0x52, 0x1d, 0x8d, 0xcc, 0x40, + 0x91, 0x06, 0x58, 0x1b, 0x6c, 0xd0, 0x5c, 0xb8, 0x78, 0xb1, 0x0e, 0xa0, + 0xbc, 0xac, 0xb9, 0x06, 0x58, 0x1b, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x1a, + 0x08, 0x04, 0x40, 0x04, 0x43, 0x28, 0x21, 0x43, 0x04, 0x31, 0xb8, 0x28, + 0x29, 0x40, 0x05, 0x88, 0x17, 0x08, 0x14, 0xff, 0x10, 0x0d, 0xd0, 0x7f, + 0x12, 0x09, 0x09, 0x00, 0x09, 0x09, 0x0b, 0x12, 0x12, 0x09, 0x0b, 0x0d, + 0x00, 0x09, 0x12, 0x12, 0x12, 0x12, 0x73, 0x28, 0x89, 0x80, 0x28, 0x17, + 0x14, 0x6b, 0xab, 0x30, 0xeb, 0x30, 0xde, 0xea, 0x30, 0x03, 0x06, 0x48, + 0x15, 0x38, 0x17, 0x61, 0x2f, 0x1d, 0x6d, 0x20, 0x05, 0x72, 0xfc, 0x05, + 0xeb, 0x29, 0x00, 0x10, 0x7f, 0x07, 0x10, 0xff, 0x05, 0x9d, 0xa7, 0x08, + 0x30, 0xff, 0x06, 0x3f, 0xb3, 0x61, 0x53, 0x0c, 0x14, 0x5c, 0x6c, 0x9a, + 0x06, 0x58, 0x13, 0x3f, 0xff, 0x7c, 0xce, 0x1c, 0xc8, 0xb9, 0x74, 0x06, + 0x68, 0x13, 0x0f, 0x32, 0x7f, 0x98, 0x17, 0x30, 0x04, 0x05, 0x3b, 0x04, + 0x4c, 0x04, 0x3c, 0x20, 0x07, 0x40, 0x05, 0x68, 0x13, 0xc0, 0x07, 0xf4, + 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x13, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x00, + 0x13, 0x13, 0x08, 0x0a, 0x0c, 0x08, 0x13, 0x13, 0x00, 0x13, 0x13, 0x4b, + 0x28, 0xa3, 0x0b, 0x00, 0x00, 0x01, 0x15, 0x6b, 0xd9, 0x30, 0xb9, 0x30, + 0xc8, 0x28, 0x19, 0x15, 0xf3, 0x30, 0xe9, 0x20, 0x03, 0xc9, 0x06, 0x08, + 0x1f, 0x56, 0x2f, 0x19, 0x6d, 0x73, 0x2b, 0x19, 0x38, 0x19, 0x6e, 0x2f, + 0x27, 0x30, 0x05, 0x64, 0x05, 0xab, 0x33, 0xf8, 0x00, 0x50, 0x7f, 0x06, + 0xf0, 0xff, 0x05, 0x9d, 0xb3, 0x08, 0x50, 0xff, 0x05, 0x9f, 0xb9, 0x7f, + 0x89, 0xfc, 0x10, 0x66, 0x70, 0x51, 0x06, 0x98, 0x17, 0xa0, 0xbc, 0xa4, + 0xc2, 0x00, 0xb8, 0xd2, 0xcc, 0xb9, 0x80, 0xb7, 0xdc, 0xb4, 0xe8, 0x06, + 0x38, 0x1d, 0x0e, 0xf2, 0x7f, 0x78, 0x17, 0x12, 0x28, 0x1f, 0x41, 0x04, + 0x42, 0xb7, 0x48, 0x17, 0x3d, 0x28, 0x21, 0x30, 0x05, 0x34, 0x05, 0x28, + 0x1f, 0x08, 0x54, 0xff, 0x10, 0x0d, 0x90, 0x7f, 0x28, 0x14, 0x14, 0x70, + 0x01, 0x06, 0x40, 0x0a, 0x64, 0x2a, 0xc5, 0x8d, 0x28, 0x17, 0x16, 0x6b, + 0xcf, 0x06, 0x68, 0x0f, 0x7f, 0xff, 0x48, 0x4f, 0xaf, 0xfc, 0x06, 0x18, + 0x0f, 0x00, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x98, 0x0f, 0x08, 0x50, + 0xff, 0x06, 0x1f, 0xb5, 0xc8, 0x54, 0x87, 0x06, 0xb8, 0x15, 0x00, 0x00, + 0x60, 0xd5, 0x06, 0x78, 0x11, 0x0f, 0x52, 0x7f, 0x78, 0x17, 0x5c, 0x25, + 0x28, 0x0f, 0x3b, 0x05, 0xa8, 0x0f, 0x08, 0x54, 0xff, 0x10, 0x0e, 0x10, + 0x7f, 0x15, 0x05, 0x00, 0x05, 0x05, 0x05, 0x07, 0x15, 0x15, 0x05, 0x07, + 0x00, 0x13, 0x05, 0x15, 0x15, 0x15, 0x15, 0x4a, 0x28, 0x20, 0x25, 0x09, + 0x00, 0x3f, 0xff, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x04, 0x01, 0x01, + 0x0f, 0x04, 0x11, 0x0f, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x0d, 0x0d, + 0x0d, 0x0d, 0x00, 0x03, 0x02, 0x02, 0x0d, 0x03, 0x10, 0x0d, 0x02, 0x09, + 0x02, 0x02, 0x02, 0x03, 0x30, 0x3c, 0x15, 0x03, 0x20, 0x06, 0x40, 0x07, + 0x20, 0x05, 0x03, 0x03, 0x04, 0x0c, 0x0c, 0x0c, 0x00, 0x0c, 0x0e, 0x04, + 0x04, 0x0c, 0x0e, 0x15, 0x0c, 0x00, 0x04, 0x04, 0x04, 0x04, 0x05, 0x0e, + 0x0e, 0x0e, 0x00, 0x0e, 0x0f, 0x05, 0x05, 0x0e, 0x0f, 0x0f, 0x0e, 0x8a, + 0x30, 0x72, 0x06, 0x11, 0x11, 0x20, 0x01, 0x06, 0x20, 0x06, 0x03, 0x82, + 0x20, 0x05, 0x06, 0x06, 0x07, 0x10, 0x10, 0x20, 0x01, 0x07, 0xa2, 0x20, + 0x06, 0x12, 0x20, 0x05, 0x07, 0x07, 0x08, 0x30, 0x44, 0x05, 0x00, 0x08, + 0x08, 0x03, 0x05, 0x09, 0x03, 0x08, 0x08, 0x05, 0x08, 0x08, 0x09, 0x12, + 0x12, 0x20, 0x01, 0x09, 0x20, 0x06, 0x42, 0x04, 0x20, 0x05, 0x09, 0x09, + 0x0a, 0x0a, 0x20, 0x01, 0x0c, 0xa8, 0x30, 0x03, 0x0e, 0x40, 0x0a, 0x0b, + 0x30, 0x64, 0x06, 0x0b, 0x0b, 0x00, 0x04, 0x06, 0x01, 0x04, 0x0b, 0x0b, + 0x0b, 0x0b, 0x40, 0x0c, 0x30, 0x54, 0x08, 0x0c, 0x0c, 0x06, 0x08, 0x0a, + 0x71, 0x06, 0x30, 0x8a, 0x40, 0xa4, 0x20, 0xb4, 0x02, 0x02, 0x08, 0x40, + 0xba, 0x4b, 0x0e, 0x30, 0xc4, 0x01, 0x0e, 0x20, 0x06, 0x02, 0x20, 0x05, + 0x20, 0x9a, 0x80, 0x30, 0x34, 0x0d, 0x0f, 0x0f, 0x0b, 0x0d, 0x14, 0x0b, + 0x8a, 0x30, 0xea, 0x10, 0x13, 0x13, 0x20, 0x01, 0x10, 0x20, 0x06, 0x05, + 0x88, 0x20, 0x05, 0x10, 0x10, 0x11, 0x30, 0x94, 0x09, 0x11, 0x11, 0x0d, + 0x07, 0x09, 0x0b, 0x07, 0x30, 0xba, 0x40, 0x84, 0x0b, 0x20, 0x91, 0x28, + 0x0b, 0x0d, 0x40, 0x9a, 0x13, 0x30, 0xa4, 0x0a, 0x13, 0x13, 0x0f, 0x08, + 0x0a, 0x0c, 0x08, 0x30, 0x3a, 0xf9, 0x6f, 0xf1, 0x67, 0x3f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0xdc, 0x00, 0x11, 0x1a, 0x00, 0x00, + 0x30, 0x01, 0x6c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x63, 0x21, 0x46, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x6c, 0xd9, 0x30, 0xeb, 0x30, 0xf3, 0x10, 0x30, 0xde, 0x5d, 0x06, + 0x78, 0x1d, 0x42, 0x00, 0x65, 0x00, 0x1a, 0x72, 0x00, 0x6e, 0x06, 0x88, + 0x9c, 0x70, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x61, 0x81, 0x0e, 0x60, 0x7f, + 0x2f, 0x4f, 0x14, 0x5c, 0x3c, 0x5c, 0x06, 0x92, 0xff, 0x00, 0xa0, 0xbc, + 0x78, 0xb9, 0x20, 0x00, 0xfc, 0xc8, 0xc0, 0x0e, 0xf3, 0x7f, 0x06, 0x72, + 0x7f, 0x11, 0x04, 0x35, 0x04, 0x40, 0x04, 0x30, 0x3d, 0x04, 0x0e, 0xf4, + 0xff, 0x10, 0x0e, 0x70, 0xff, 0x01, 0x06, 0x06, 0x06, 0x10, 0x06, 0x05, + 0x01, 0x40, 0x06, 0x01, 0x01, 0x01, 0x01, 0x82, 0x58, 0x17, 0x04, 0x6c, + 0xa2, 0x30, 0xfc, 0x28, 0x19, 0xac, 0x28, 0x30, 0xa6, 0x06, 0x68, 0x1b, + 0x41, 0x26, 0x91, 0x72, 0x00, 0x67, 0xa8, 0x26, 0x97, 0x75, 0x06, 0x4f, + 0xb8, 0x41, 0x40, 0x7d, 0x6f, 0x00, 0x76, 0x3c, 0x00, 0x69, 0x06, 0x48, + 0x1b, 0x07, 0xb0, 0xff, 0x06, 0x38, 0x1b, 0x06, 0xf0, 0x7f, 0x3f, 0x96, + 0x08, 0x14, 0x5c, 0xd8, 0x9a, 0x06, 0x9b, 0x17, 0x44, 0xc5, 0x74, 0x06, + 0xb9, 0x00, 0xac, 0xb0, 0xc6, 0x06, 0x78, 0x1b, 0x07, 0x53, 0x7f, 0xf3, + 0x8a, 0x06, 0x82, 0x7f, 0x10, 0x04, 0x30, 0x28, 0x17, 0x33, 0x20, 0x05, + 0x43, 0xe0, 0x06, 0x48, 0x1b, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, + 0x02, 0x01, 0x03, 0x01, 0x03, 0x20, 0x03, 0x02, 0x30, 0x06, 0x01, 0x02, + 0x02, 0x02, 0x02, 0x11, 0xb3, 0x21, 0xb8, 0x28, 0x17, 0x05, 0x6c, 0xd0, + 0x28, 0x17, 0x40, 0xbc, 0x28, 0x19, 0x1d, 0xff, 0xb7, 0x30, 0xe5, 0x30, + 0x00, 0xbf, 0x30, 0xc3, 0x30, 0xc8, 0x30, 0x96, 0x6e, 0xa8, 0x05, 0x9d, + 0x3f, 0x42, 0x2e, 0xa9, 0x73, 0x2f, 0xb3, 0x6c, 0x00, 0x2d, 0x22, 0x00, + 0x43, 0x27, 0x9b, 0x74, 0x00, 0x79, 0x05, 0xef, 0xaf, 0xe2, 0xab, 0x20, + 0x7b, 0x65, 0x20, 0x7d, 0x56, 0x28, 0x19, 0x6c, 0x40, 0x0b, 0x05, 0xdf, + 0xaf, 0xa3, 0x90, 0xff, 0x53, 0x20, 0xfd, 0x61, 0x00, 0x64, 0x21, 0x03, + 0x05, 0xf0, 0x7f, 0xa8, 0x30, 0xf9, 0x65, 0x2f, 0xb3, 0x20, 0x61, 0x83, + 0x74, 0x00, 0xe0, 0xda, 0x05, 0x6f, 0xbf, 0x31, 0xf3, 0x75, 0x20, 0xf3, + 0x30, 0xf7, 0x20, 0x20, 0xfb, 0x65, 0xe0, 0x20, 0x83, 0xd0, 0x93, 0x04, + 0xdf, 0xc9, 0xf4, 0x5d, 0x5e, 0x58, 0x14, 0x46, 0x5c, 0x06, 0x98, 0x17, + 0x14, 0xbc, 0x24, 0x06, 0x48, 0x0f, 0xb3, 0x7f, 0x7a, 0xf4, 0xe2, 0x7f, + 0x06, 0x12, 0xff, 0x52, 0x7f, 0x06, 0x3a, 0x99, 0x11, 0x28, 0x17, 0x37, + 0x04, 0x07, 0x35, 0x04, 0x3b, 0x04, 0x4c, 0x06, 0x48, 0x17, 0x07, 0x14, + 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x03, 0x04, 0x05, 0x05, 0x05, 0x06, + 0x03, 0x03, 0x00, 0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x10, + 0xce, 0x21, 0x65, 0x28, 0x17, 0x06, 0x6c, 0xd5, 0x30, 0x12, 0xea, 0x30, + 0xd6, 0x28, 0x1b, 0xeb, 0x30, 0x06, 0x5d, 0x33, 0x46, 0x8b, 0x2f, 0xaf, + 0x69, 0x00, 0x62, 0x2f, 0xb1, 0x75, 0x4f, 0xb9, 0x0e, 0x30, 0x7f, 0xb4, + 0x35, 0x11, 0x62, 0x06, 0xe0, 0xff, 0x51, 0x7d, 0x6f, 0x0e, 0x00, 0x7f, + 0x17, 0x5f, 0x08, 0xcc, 0x91, 0x21, 0x58, 0x06, 0x98, 0x17, 0x04, 0xd5, + 0xac, 0x00, 0xb9, 0x80, 0xbd, 0x74, 0xb9, 0x20, 0x00, 0xfc, 0xe0, 0x06, + 0x48, 0x1f, 0x07, 0x73, 0x7f, 0x06, 0x72, 0x7f, 0x24, 0x04, 0x40, 0x04, + 0x38, 0x0e, 0x04, 0x31, 0x04, 0x43, 0x20, 0x07, 0x10, 0x06, 0x74, 0xff, + 0x10, 0x06, 0xb0, 0xff, 0x04, 0x2a, 0x07, 0x07, 0x20, 0x01, 0x04, 0x20, + 0x06, 0x15, 0x20, 0x05, 0x04, 0x08, 0x04, 0x48, 0x21, 0x17, 0x28, 0x17, + 0x07, 0x6c, 0xb8, 0x0a, 0x30, 0xe5, 0x30, 0xcd, 0x28, 0x17, 0xf4, 0x06, + 0x68, 0x17, 0x47, 0xad, 0x2f, 0xab, 0x6e, 0x2f, 0xaf, 0x76, 0x06, 0x2c, + 0x2b, 0x90, 0x7f, 0xe8, 0x20, 0x7f, 0x56, 0x65, 0x06, 0xa0, 0x7f, 0x66, + 0x06, 0x8e, 0x32, 0x47, 0x2f, 0xaf, 0x51, 0x7f, 0x72, 0xd0, 0x06, 0x41, + 0x81, 0x70, 0x7f, 0x62, 0x06, 0x60, 0x7f, 0xe5, 0x65, 0x85, 0x51, 0x20, + 0xe6, 0x74, 0x06, 0x98, 0x17, 0x1c, 0xc8, 0x24, 0xb1, 0x14, 0x70, 0xbc, + 0x06, 0x78, 0x15, 0x07, 0x72, 0xff, 0x06, 0x91, 0xff, 0x16, 0x04, 0x35, + 0x04, 0x47, 0x3d, 0x20, 0x03, 0x32, 0x04, 0x30, 0x06, 0x48, 0x17, 0x07, + 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x15, 0x05, 0x08, 0x08, 0x20, 0x01, + 0x05, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x04, 0x05, 0x05, 0xda, 0x20, 0x63, + 0x2b, 0x1f, 0x08, 0x6c, 0x11, 0xb0, 0x30, 0xe9, 0x28, 0x15, 0xeb, 0x30, + 0xb9, 0x06, 0x88, 0x17, 0x56, 0x6c, 0x28, 0x11, 0x72, 0x2f, 0xad, 0x73, + 0x06, 0x68, 0x17, 0x50, 0x7f, 0x69, 0xdc, 0x06, 0xe0, 0x7f, 0x06, 0xf0, + 0xff, 0x6f, 0x29, 0x9d, 0x06, 0x58, 0x17, 0x06, 0xd1, 0x7f, 0x3c, 0x68, + 0x02, 0xc9, 0x62, 0x81, 0x9c, 0xaf, 0x65, 0x06, 0x88, 0x19, 0xae, 0x03, + 0x7c, 0xb7, 0xe8, 0xb8, 0xa4, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, + 0x10, 0x13, 0x04, 0x3b, 0x28, 0x11, 0x40, 0x04, 0x43, 0x04, 0x70, 0x41, + 0x06, 0x68, 0x17, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x06, 0x09, + 0x09, 0x09, 0x18, 0x0a, 0x09, 0x06, 0x30, 0x06, 0x20, 0x05, 0x06, 0x06, + 0x72, 0x02, 0x21, 0x73, 0x06, 0x00, 0x00, 0x09, 0x48, 0x17, 0xa6, 0x00, + 0x30, 0xd3, 0x30, 0xe5, 0x30, 0xf3, 0x30, 0xc7, 0xd5, 0x20, 0x03, 0x05, + 0xfd, 0x39, 0x47, 0x4e, 0xa7, 0x75, 0x2e, 0x2f, 0xfc, 0x2f, 0xb7, 0x7e, + 0x64, 0x4f, 0xbd, 0x05, 0xf0, 0x7f, 0x38, 0x13, 0x37, 0x17, 0x06, 0x38, + 0x99, 0x07, 0x50, 0xff, 0x67, 0xda, 0x2f, 0xb5, 0x38, 0x19, 0x69, 0x06, + 0x40, 0xff, 0x71, 0x7f, 0x65, 0x06, 0x2a, 0x1b, 0x3c, 0x01, 0x68, 0xb3, + 0x52, 0xbe, 0x5b, 0x7b, 0x76, 0x06, 0x78, 0x17, 0x00, 0xf8, 0xad, 0x7c, + 0xb7, 0xb0, 0xc6, 0xd8, 0xbd, 0x35, 0x74, 0xb3, 0x06, 0x58, 0x19, 0x0e, + 0xf3, 0x7f, 0x13, 0x28, 0x13, 0x30, 0x28, 0x15, 0x00, 0x31, 0x04, 0x4e, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x70, 0x35, 0x20, 0x05, 0x0d, 0xf4, 0xff, + 0x10, 0x0e, 0xb0, 0x7f, 0x07, 0x0a, 0x0a, 0x0a, 0x18, 0x0b, 0x0a, 0x07, + 0x30, 0x06, 0x20, 0x05, 0x07, 0x07, 0x52, 0x22, 0x21, 0xc8, 0x28, 0x17, + 0x0a, 0x6c, 0xb8, 0x28, 0x11, 0xe9, 0xdd, 0x06, 0x08, 0x0d, 0x9f, 0xff, + 0x4a, 0x2f, 0x29, 0x38, 0x19, 0x10, 0x06, 0x70, 0x7f, 0x47, 0x2f, 0xa9, + 0xc2, 0x06, 0xb1, 0x81, 0x06, 0xf1, 0xff, 0x5d, 0x6c, 0xc9, 0x62, 0x06, + 0x92, 0xfd, 0x00, 0x06, 0x00, 0x50, 0xc9, 0x7c, 0xb7, 0x06, 0x58, 0x11, + 0x0f, 0x53, 0x7f, 0x2e, 0xf0, 0x48, 0x17, 0x06, 0x91, 0xff, 0x10, 0x06, + 0xf4, 0xff, 0x0e, 0xf6, 0x7f, 0x08, 0x0b, 0x0b, 0x0b, 0x14, 0x09, 0x0b, + 0x08, 0x20, 0x06, 0x1a, 0x20, 0x05, 0x08, 0x08, 0x00, 0xae, 0x21, 0x39, + 0x05, 0x00, 0x00, 0x0b, 0x6c, 0x00, 0xeb, 0x30, 0xc4, 0x30, 0xa7, 0x30, + 0xeb, 0x30, 0x55, 0xf3, 0x06, 0x68, 0x1b, 0x4c, 0x2f, 0x2b, 0x7a, 0x2f, + 0x25, 0x72, 0x05, 0xef, 0x27, 0xae, 0xb0, 0x7f, 0x63, 0x60, 0x7f, 0x65, + 0x0e, 0xe0, 0xff, 0x06, 0x39, 0x9d, 0x06, 0xf0, 0x7f, 0x62, 0x04, 0x53, + 0x5e, 0x58, 0x69, 0x60, 0x06, 0x9b, 0x17, 0xe8, 0xb8, 0x0c, 0xb4, 0xcc, + 0x78, 0xb9, 0x06, 0x98, 0x19, 0x0e, 0xf2, 0x7f, 0x1b, 0x04, 0x05, 0x4e, + 0x04, 0x46, 0x04, 0x35, 0x28, 0x1d, 0x3d, 0x06, 0x48, 0x1d, 0xc5, 0x07, + 0x34, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x09, 0x0c, 0x0c, 0x20, 0x01, 0x09, + 0x20, 0x06, 0x41, 0x0d, 0x20, 0x05, 0x09, 0x09, 0x75, 0x21, 0xe8, 0x28, + 0x17, 0x00, 0x0c, 0x6c, 0xcc, 0x30, 0xb7, 0x30, 0xe3, 0x30, 0x6c, 0xc6, + 0x28, 0x19, 0x06, 0x5d, 0x35, 0x4e, 0x28, 0x13, 0x37, 0x99, 0x68, 0x00, + 0x15, 0xe2, 0x00, 0x74, 0x28, 0x1f, 0x6c, 0x0e, 0x40, 0x7f, 0x65, 0x29, + 0x15, 0x50, 0x62, 0x4f, 0xb7, 0x67, 0x10, 0x05, 0xe1, 0x7f, 0xb3, 0x7e, + 0x99, 0x6c, 0x08, 0xf0, 0x6c, 0x14, 0x5c, 0x06, 0x78, 0x19, 0xcc, 0xb1, + 0xe4, 0x18, 0xc0, 0x54, 0xd1, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, + 0x04, 0x51, 0x00, 0x04, 0x32, 0x04, 0x48, 0x04, 0x30, 0x04, 0x42, 0x8e, + 0x28, 0x1d, 0x3b, 0x04, 0x4c, 0x05, 0xe8, 0x1d, 0x0f, 0x54, 0xff, 0x10, + 0x06, 0x90, 0xff, 0x0a, 0x2a, 0x0d, 0x0d, 0x20, 0x01, 0x0a, 0x20, 0x06, + 0x0e, 0x20, 0x05, 0x0a, 0x08, 0x0a, 0x63, 0x21, 0xee, 0x2b, 0x1f, 0x0d, + 0x6c, 0xaa, 0x08, 0x30, 0xd7, 0x30, 0xd0, 0x28, 0x15, 0xc7, 0x30, 0xf3, + 0x15, 0x30, 0x96, 0x6e, 0x06, 0x1d, 0x37, 0x4f, 0x27, 0x0f, 0x77, 0x2e, + 0xa9, 0x1e, 0x6c, 0x00, 0x64, 0x47, 0x1d, 0x06, 0xb0, 0x7f, 0x06, 0x3f, + 0xb0, 0x07, 0x30, 0xff, 0x76, 0xa0, 0x61, 0x7f, 0x6f, 0x0e, 0x20, 0xff, + 0x0a, 0x4e, 0xe6, 0x74, 0x14, 0x04, 0x5c, 0x7b, 0x76, 0x4a, 0x53, 0x06, + 0x5b, 0x17, 0x35, 0xc6, 0x0c, 0x1c, 0xbc, 0x74, 0xb3, 0x06, 0x98, 0x17, + 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x55, 0x31, 0x28, 0x17, 0x30, 0x48, 0x11, + 0x34, 0x28, 0x19, 0x3d, 0x05, 0xe8, 0x17, 0xc5, 0x07, 0xb4, 0xff, 0x10, + 0x0e, 0x30, 0x7f, 0x0b, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x40, + 0x10, 0x20, 0x05, 0x0b, 0x0b, 0x57, 0x21, 0xdb, 0x05, 0x04, 0x00, 0x00, + 0x0e, 0x6c, 0xb6, 0x28, 0x0f, 0xaf, 0x30, 0x01, 0xc8, 0x30, 0xfb, 0x30, + 0xac, 0x30, 0xec, 0x28, 0x1b, 0xa0, 0x05, 0xfd, 0x37, 0x53, 0x2f, 0xa5, + 0x2e, 0x00, 0x20, 0x00, 0x47, 0xaa, 0x48, 0x1b, 0x6c, 0x06, 0x08, 0x1b, + 0x53, 0x28, 0x93, 0x69, 0x2f, 0xad, 0x74, 0x31, 0x00, 0x2d, 0x80, 0x83, + 0x05, 0xf0, 0x7f, 0x6e, 0x00, 0x6b, 0x2f, 0xab, 0xf8, 0x06, 0x51, 0x03, + 0x50, 0x7f, 0x91, 0x7f, 0x05, 0xf8, 0x1b, 0x06, 0xf0, 0xff, 0x23, 0x57, + 0xa0, 0x18, 0x52, 0xd1, 0x4e, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xa5, 0xc7, + 0x6c, 0x01, 0xd0, 0xb8, 0xd2, 0x08, 0xac, 0x0c, 0xb8, 0x06, 0x58, 0x1b, + 0xd0, 0x07, 0x32, 0x7f, 0x06, 0xb3, 0x7f, 0x21, 0x28, 0x13, 0x3d, 0x04, + 0x3a, 0x04, 0x05, 0x42, 0x04, 0x2d, 0x00, 0x13, 0x48, 0x1f, 0x3b, 0x05, + 0xc8, 0x1d, 0xc0, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x0c, 0x13, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x0c, 0x0c, 0x10, 0x10, 0x11, 0x13, 0x0c, + 0x0c, 0x00, 0x0c, 0x0c, 0xb9, 0x21, 0xaa, 0x06, 0x00, 0x00, 0x00, 0x0f, + 0x6c, 0xb7, 0x30, 0xe3, 0x30, 0xd5, 0x30, 0x06, 0xcf, 0x30, 0xa6, 0x30, + 0xbc, 0x06, 0x28, 0x15, 0x38, 0x17, 0x63, 0x2c, 0x00, 0x68, 0x2f, 0xaf, + 0x66, 0x20, 0x01, 0x30, 0x07, 0x75, 0x00, 0x6d, 0x73, 0x05, 0xe7, 0x17, + 0xb0, 0x7f, 0x6f, 0x60, 0x7f, 0x0d, 0xd0, 0xff, 0x69, 0x61, 0x7f, 0xa0, + 0x31, 0x7b, 0x61, 0x0d, 0xe1, 0xff, 0x99, 0x6c, 0x2b, 0x59, 0x6a, 0x10, + 0x8c, 0xee, 0x68, 0x06, 0x78, 0x19, 0xe4, 0xc0, 0x04, 0xd5, 0x03, 0x58, + 0xd5, 0xb0, 0xc6, 0x20, 0xc8, 0x06, 0x78, 0x17, 0x07, 0xb3, 0x7f, 0xaa, + 0x06, 0x13, 0xff, 0x28, 0x28, 0x17, 0x44, 0x20, 0x01, 0x45, 0x28, 0x1f, + 0x43, 0x38, 0x04, 0x37, 0x05, 0xc8, 0x13, 0x0f, 0x31, 0x7f, 0x10, 0x06, + 0xf0, 0xff, 0x0d, 0x10, 0x11, 0x00, 0x11, 0x11, 0x11, 0x0d, 0x0d, 0x11, + 0x11, 0x18, 0x00, 0x10, 0x0d, 0x0d, 0x0d, 0x0d, 0xeb, 0x21, 0x23, 0xa0, + 0x28, 0x17, 0x10, 0x28, 0x17, 0xe5, 0x30, 0xd3, 0x30, 0xfc, 0x30, 0x30, + 0xc4, 0x06, 0x28, 0x13, 0x98, 0x17, 0x77, 0x00, 0x79, 0x00, 0x6d, 0x7a, + 0x06, 0x4d, 0xb2, 0x90, 0x7f, 0x74, 0x06, 0x40, 0x81, 0x07, 0x10, 0xff, + 0x76, 0x2d, 0xaf, 0x58, 0x74, 0x2f, 0xaf, 0x6f, 0x06, 0xe1, 0x7f, 0x06, + 0x51, 0xff, 0xbd, 0x65, 0xf4, 0x10, 0x7e, 0x28, 0x83, 0x06, 0x78, 0x15, + 0x00, 0x00, 0x88, 0xc2, 0x0e, 0x44, 0xbe, 0x20, 0xce, 0x06, 0x58, 0x13, + 0x07, 0xd3, 0x7f, 0x06, 0x53, 0xff, 0x28, 0x03, 0x04, 0x32, 0x04, 0x38, + 0x04, 0x46, 0x05, 0xc8, 0x0b, 0x0f, 0xb1, 0x7f, 0x80, 0x10, 0x06, 0xf0, + 0xff, 0x0e, 0x11, 0x12, 0x12, 0x13, 0x12, 0x0e, 0x00, 0x0e, 0x12, 0x12, + 0x19, 0x11, 0x0e, 0x0e, 0x0e, 0x08, 0x0e, 0x75, 0x21, 0x20, 0x28, 0x17, + 0x11, 0x6c, 0xbe, 0x80, 0x28, 0x13, 0xed, 0x30, 0xc8, 0x30, 0xa5, 0x30, + 0xeb, 0x2a, 0x30, 0xf3, 0x06, 0x28, 0x1b, 0x53, 0x2f, 0xa3, 0x6c, 0x2f, + 0xa7, 0x74, 0x8d, 0x2f, 0xb5, 0x75, 0x00, 0x72, 0x05, 0xaf, 0x29, 0xb0, + 0x7f, 0x65, 0x40, 0x7b, 0x77, 0x65, 0x06, 0x49, 0x17, 0x07, 0x50, 0xff, + 0x38, 0x19, 0x61, 0x06, 0x80, 0xff, 0x51, 0x7f, 0x06, 0x30, 0x7f, 0x00, + 0x22, 0x7d, 0x1b, 0x6d, 0xfe, 0x56, 0x69, 0x60, 0x80, 0x06, 0x78, 0x19, + 0x78, 0xc8, 0x5c, 0xb8, 0x2c, 0xd2, 0x78, 0x70, 0xb9, 0x06, 0x78, 0x19, + 0x07, 0xb3, 0x7f, 0x06, 0x32, 0x7f, 0x17, 0x04, 0x3e, 0x04, 0x40, 0x3b, + 0x20, 0x03, 0x42, 0x04, 0x43, 0x04, 0x40, 0x04, 0x70, 0x3d, 0x06, 0x08, + 0x1f, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0f, 0x12, 0x13, 0x13, + 0x00, 0x12, 0x13, 0x0f, 0x0f, 0x13, 0x13, 0x0c, 0x12, 0x00, 0x0f, 0x0f, + 0x0f, 0x0f, 0x92, 0x21, 0x5c, 0x05, 0x0a, 0x00, 0x00, 0x12, 0x6c, 0x38, + 0x11, 0xfc, 0x28, 0x13, 0xac, 0x22, 0x30, 0xa6, 0x06, 0x28, 0x15, 0x00, + 0x00, 0x54, 0x68, 0x0f, 0x67, 0xb7, 0x26, 0x95, 0x75, 0x06, 0x2f, 0xaf, + 0x90, 0x7f, 0x6f, 0x4f, 0x39, 0x05, 0xf8, 0x1b, 0x07, 0x10, 0xff, 0xe0, + 0xb0, 0xfd, 0x06, 0x18, 0x19, 0x06, 0xf0, 0x7f, 0xfe, 0x56, 0x14, 0x5c, + 0xd8, 0x40, 0x9a, 0x06, 0x78, 0x15, 0x00, 0x00, 0x2c, 0xd2, 0x74, 0xb9, + 0x0d, 0x00, 0xac, 0xb0, 0xc6, 0x06, 0x78, 0x17, 0x07, 0x72, 0x7f, 0xf3, + 0x06, 0x62, 0x7f, 0x47, 0x22, 0x48, 0x0f, 0x33, 0x04, 0x30, 0x28, 0x17, + 0x0e, 0x51, 0x7f, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x10, 0x14, 0x15, 0x15, + 0x15, 0x15, 0x10, 0x20, 0x06, 0x00, 0x13, 0x14, 0x10, 0x10, 0x10, 0x10, + 0xd1, 0x21, 0x00, 0x52, 0x06, 0x00, 0x00, 0x13, 0x6c, 0xc6, 0x30, 0x16, + 0xa3, 0x30, 0xc1, 0x28, 0x19, 0xce, 0x06, 0x48, 0x15, 0x38, 0x17, 0x69, + 0x2c, 0x00, 0x63, 0x27, 0x8f, 0x6e, 0x2f, 0xb7, 0x06, 0x55, 0x17, 0x65, + 0x00, 0x7c, 0x73, 0x20, 0x01, 0x30, 0x81, 0x0e, 0x50, 0x7f, 0x07, 0x31, + 0x7f, 0x06, 0x91, 0xff, 0xd0, 0x63, 0x08, 0x51, 0x59, 0xfa, 0x8b, 0x06, + 0x98, 0x17, 0xf0, 0xd2, 0x58, 0x1c, 0xce, 0x78, 0xb1, 0x06, 0x78, 0x15, + 0x07, 0xd3, 0x7f, 0x06, 0x34, 0x01, 0x22, 0x04, 0x11, 0x38, 0x04, 0x47, + 0x20, 0x03, 0x3d, 0x04, 0x3e, 0x06, 0x68, 0x17, 0xc0, 0x06, 0xf4, 0xff, + 0x10, 0x0e, 0xd0, 0x7f, 0x11, 0x15, 0x14, 0x14, 0x14, 0x14, 0x40, 0x11, + 0x20, 0x06, 0x12, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0xd9, 0x20, 0x6a, + 0x28, 0x17, 0x14, 0x6c, 0xa6, 0x28, 0x13, 0x6b, 0xea, 0x06, 0x68, 0x13, + 0x3f, 0xff, 0x55, 0x2f, 0xab, 0x69, 0x06, 0x7d, 0xac, 0x10, 0x0f, 0x20, + 0x7f, 0x08, 0x4c, 0x4e, 0xcc, 0x91, 0x06, 0x98, 0x15, 0x00, 0x00, 0xb0, + 0x18, 0xc6, 0xac, 0xb9, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x23, 0x04, + 0x40, 0xe2, 0x28, 0x19, 0x10, 0x16, 0x94, 0x7f, 0x06, 0xf6, 0xff, 0x12, + 0x16, 0x16, 0x20, 0x01, 0x12, 0xa0, 0x20, 0x06, 0x14, 0x20, 0x05, 0x12, + 0x12, 0x53, 0x21, 0x24, 0x83, 0x28, 0x17, 0x15, 0x6c, 0xd0, 0x30, 0xec, + 0x28, 0x19, 0x06, 0x9d, 0x2f, 0x05, 0x56, 0x00, 0x61, 0x00, 0x6c, 0x20, + 0x03, 0x69, 0x2f, 0xb5, 0xaa, 0x0e, 0x30, 0x7f, 0x57, 0x40, 0xff, 0x6c, + 0x06, 0xe0, 0xff, 0x6c, 0x4f, 0xb5, 0x65, 0x84, 0x0e, 0x21, 0xff, 0xe6, + 0x74, 0xb1, 0x83, 0x06, 0xb8, 0x17, 0x1c, 0xbc, 0x38, 0x08, 0xb8, 0x06, + 0xb8, 0x17, 0x07, 0x52, 0x7f, 0x06, 0x93, 0xff, 0x12, 0x04, 0x30, 0x0e, + 0x04, 0x3b, 0x04, 0x35, 0x06, 0x88, 0x19, 0x0e, 0xf4, 0xff, 0x10, 0x06, + 0xf0, 0xff, 0x13, 0x00, 0x17, 0x17, 0x18, 0x17, 0x17, 0x13, 0x13, 0x18, + 0x20, 0x17, 0x07, 0x20, 0x05, 0x13, 0x13, 0xe1, 0x20, 0x3b, 0x03, 0x05, + 0x00, 0x00, 0x16, 0x6c, 0xdc, 0x06, 0xc8, 0x15, 0x58, 0x17, 0x1a, 0x75, + 0x00, 0x64, 0x0e, 0x80, 0x7f, 0x38, 0x17, 0x61, 0x20, 0xff, 0x74, 0x90, + 0x10, 0x06, 0x61, 0x7f, 0x83, 0x6c, 0x06, 0xb8, 0x15, 0x00, 0x00, 0xf4, + 0xbc, 0xc7, 0x06, 0xb8, 0x15, 0x0f, 0x13, 0x7f, 0x12, 0x04, 0x3e, 0x06, + 0x88, 0x13, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x00, 0x14, 0x18, + 0x18, 0x17, 0x18, 0x18, 0x14, 0x14, 0x10, 0x17, 0x18, 0x08, 0x20, 0x05, + 0x14, 0x14, 0x15, 0x21, 0x45, 0xb6, 0x2b, 0x23, 0x17, 0x6c, 0xc4, 0x28, + 0x17, 0xaf, 0x06, 0xa8, 0x19, 0x51, 0x5a, 0x28, 0x15, 0x67, 0x06, 0xa5, + 0x98, 0x5a, 0x00, 0x6f, 0x06, 0xc0, 0x81, 0xd1, 0x07, 0x10, 0xff, 0x31, + 0x7f, 0x6f, 0x0e, 0x90, 0xff, 0x69, 0x3c, 0x68, 0x06, 0xbb, 0x17, 0x0e, + 0x94, 0xcd, 0x6c, 0xd0, 0x06, 0xb8, 0x19, 0x07, 0x52, 0x7f, 0x06, 0x9c, + 0x97, 0x26, 0x0e, 0x04, 0x43, 0x04, 0x33, 0x06, 0xa8, 0x19, 0x0e, 0xf1, + 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x15, 0x2a, 0x19, 0x19, 0x20, 0x01, 0x15, + 0x20, 0x06, 0x16, 0x20, 0x05, 0x15, 0x00, 0x15, 0x8c, 0x21, 0x0c, 0x06, + 0x00, 0x00, 0x18, 0x08, 0x6c, 0xc1, 0x30, 0xe5, 0x28, 0x19, 0xea, 0x30, + 0xd2, 0xc0, 0x06, 0x68, 0x1b, 0x38, 0x17, 0x72, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x6c, 0x68, 0x06, 0x88, 0x97, 0x06, 0xd0, 0x7f, 0xfc, 0x07, 0x40, + 0xff, 0x06, 0x78, 0x1b, 0x5a, 0x00, 0x40, 0xfa, 0x06, 0xc1, 0xff, 0xcf, + 0x82, 0xce, 0x9e, 0x16, 0x4e, 0x81, 0x06, 0x9b, 0x17, 0xe8, 0xcd, 0xac, + 0xb9, 0x88, 0xd7, 0x06, 0x98, 0x19, 0xa8, 0x07, 0x72, 0x7f, 0x71, 0x2f, + 0x35, 0x65, 0x06, 0x48, 0x17, 0x4e, 0x04, 0x40, 0x0e, 0x04, 0x38, 0x04, + 0x45, 0x06, 0x68, 0x1b, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x16, + 0x2a, 0x1a, 0x1a, 0x20, 0x01, 0x16, 0x20, 0x06, 0x17, 0x20, 0x05, 0x16, + 0x08, 0x16, 0xb3, 0x21, 0x12, 0x28, 0x17, 0x19, 0x6c, 0xa2, 0x00, 0x30, + 0xc3, 0x30, 0xda, 0x30, 0xf3, 0x30, 0xc4, 0x00, 0x30, 0xa7, 0x30, 0xeb, + 0x30, 0xfb, 0x30, 0xa2, 0x0a, 0x30, 0xa6, 0x30, 0xb5, 0x28, 0x29, 0xed, + 0x28, 0x2d, 0xc7, 0x91, 0x20, 0x17, 0x96, 0x6e, 0x04, 0xdd, 0x4d, 0x41, + 0x00, 0x70, 0x20, 0x01, 0x05, 0x65, 0x00, 0x6e, 0x00, 0x7a, 0x24, 0x17, + 0x6c, 0x20, 0x01, 0x15, 0x20, 0x00, 0x4f, 0x2f, 0xc1, 0x74, 0x24, 0x25, + 0x72, 0x20, 0x0b, 0x45, 0x52, 0x28, 0x2f, 0x6f, 0x00, 0x64, 0x24, 0x33, + 0x73, 0x05, 0x80, 0x7f, 0x82, 0xb0, 0x73, 0x2d, 0x00, 0x45, 0x00, 0x78, + 0x20, 0x8d, 0xe9, 0xba, 0x48, 0xbd, 0x65, 0x48, 0xc5, 0x03, 0xb0, 0x8b, + 0x00, 0x30, 0xff, 0x41, 0x2f, 0xc3, 0x73, 0xd5, 0x20, 0xef, 0x31, 0x01, + 0x72, 0x80, 0xff, 0x6e, 0x05, 0x61, 0x7f, 0x6f, 0x21, 0x81, 0x6e, 0x45, + 0x21, 0x6d, 0x51, 0x81, 0x6e, 0x04, 0xe8, 0x2f, 0x00, 0x51, 0x7f, 0x31, + 0xf1, 0x61, 0xf7, 0x21, 0xf1, 0x30, 0x89, 0x31, 0x7d, 0x32, 0x0b, 0x69, + 0x28, 0xb9, 0x03, 0xd1, 0x7b, 0x43, 0x17, 0x00, 0x59, 0x3f, 0x96, 0x6d, + 0x5f, 0x56, 0x7b, 0x14, 0x10, 0x5c, 0x4a, 0x53, 0x06, 0x3b, 0x19, 0x44, + 0xc5, 0x9c, 0xd3, 0x00, 0xbc, 0xcc, 0x44, 0xc5, 0xb0, 0xc6, 0x1c, 0xc1, + 0x0e, 0x5c, 0xb8, 0x74, 0xb3, 0x05, 0xf8, 0x21, 0x08, 0x12, 0x7f, 0x05, + 0xd1, 0xff, 0x10, 0x20, 0x04, 0x3f, 0x20, 0x01, 0x35, 0x04, 0x3d, 0x04, + 0x46, 0xa2, 0x20, 0x05, 0x3b, 0x20, 0x01, 0x4c, 0x04, 0x2d, 0x20, 0x15, + 0x43, 0x28, 0x04, 0x41, 0x20, 0x01, 0x35, 0x28, 0x33, 0x40, 0x04, 0x3e, + 0x38, 0x04, 0x34, 0x40, 0x21, 0x0d, 0x74, 0xff, 0x10, 0x0d, 0xb0, 0x7f, + 0x17, 0x03, 0x01, 0x00, 0x02, 0x01, 0x01, 0x17, 0x17, 0x02, 0x01, 0x02, + 0x00, 0x03, 0x17, 0x17, 0x17, 0x17, 0xb1, 0x21, 0x96, 0xaa, 0x28, 0x17, + 0x1a, 0x00, 0x08, 0x17, 0xa4, 0x28, 0x23, 0xca, 0x06, 0xe8, 0x17, 0x49, + 0xbf, 0x28, 0x25, 0x6e, 0x07, 0x88, 0x17, 0x30, 0x8d, 0x05, 0xd8, 0x17, + 0x90, 0xff, 0x04, 0xf8, 0x15, 0x00, 0x78, 0x17, 0xf2, 0x50, 0xf3, 0x07, + 0x38, 0x17, 0x90, 0x89, 0x04, 0x58, 0x17, 0x85, 0x51, 0x07, 0x38, 0x17, + 0x74, 0x1e, 0xc7, 0x08, 0xb1, 0x06, 0x38, 0x15, 0x08, 0x32, 0x7f, 0x05, + 0xd1, 0xff, 0x00, 0x58, 0x17, 0x18, 0xb8, 0x28, 0x27, 0x3d, 0x05, 0x28, + 0x15, 0x08, 0x54, 0xff, 0x10, 0x0d, 0xb0, 0x7f, 0x18, 0x02, 0x02, 0x02, + 0x03, 0x02, 0x02, 0x18, 0x18, 0x03, 0x20, 0x06, 0x18, 0x02, 0x18, 0x18, + 0x18, 0xa8, 0x21, 0xb2, 0x28, 0x17, 0x1b, 0x28, 0x6c, 0xd0, 0x28, 0x03, + 0xbc, 0x28, 0x11, 0x1d, 0xff, 0xe9, 0xb6, 0x28, 0x1d, 0xc8, 0x05, 0x08, + 0x07, 0xff, 0xf4, 0x42, 0x4e, 0x17, 0x3f, 0xa9, 0x2d, 0x28, 0x00, 0x4c, + 0x2e, 0x23, 0x6e, 0x2f, 0xa7, 0x73, 0x00, 0x63, 0x8d, 0x2f, 0xb1, 0x61, + 0x00, 0x66, 0x2f, 0xa7, 0x05, 0x10, 0x7f, 0xe2, 0x2f, 0xa5, 0x54, 0x65, + 0x27, 0xff, 0x43, 0x2e, 0xa1, 0x6d, 0x2f, 0xbd, 0x61, 0x00, 0x75, 0x67, + 0x48, 0x95, 0x0d, 0x70, 0xff, 0x3f, 0x97, 0x69, 0x41, 0x03, 0x61, 0x2f, + 0xab, 0xb1, 0xd1, 0x05, 0x61, 0x05, 0xe0, 0x7f, 0x91, 0x85, 0x69, 0x00, + 0xf1, 0x05, 0x20, 0x7d, 0x00, 0x00, 0x00, 0xf4, 0x5d, 0x5e, 0x58, 0x14, + 0x5c, 0x08, 0x61, 0x4e, 0x51, 0x67, 0x06, 0x58, 0x17, 0x14, 0xbc, 0x24, + 0x06, 0xc8, 0x80, 0xb7, 0xb8, 0xd2, 0x06, 0x18, 0x11, 0x08, 0x12, 0x7f, + 0x69, 0xad, 0x42, 0x81, 0x28, 0x23, 0xfd, 0x69, 0x4a, 0x17, 0x3f, 0x25, + 0x29, 0x04, 0xe9, 0xaa, 0x06, 0x11, 0x04, 0x30, 0x04, 0x37, 0x48, 0x11, + 0x38, 0x0f, 0x1b, 0xb8, 0x20, 0x0d, 0x3d, 0x28, 0x07, 0x0d, 0xf1, 0x7f, + 0x10, 0x0e, 0x90, 0x7f, 0x19, 0x05, 0x04, 0x00, 0x04, 0x04, 0x04, 0x19, + 0x19, 0x04, 0x05, 0x05, 0x00, 0x05, 0x19, 0x19, 0x19, 0x19, 0xc1, 0x21, + 0x7f, 0x02, 0x05, 0x00, 0x00, 0x1c, 0x6c, 0xcb, 0x28, 0x0b, 0xd0, 0xba, + 0x28, 0x17, 0xc7, 0x28, 0x15, 0x05, 0xf8, 0x13, 0x3f, 0xff, 0x4e, 0x44, + 0x03, 0x77, 0xbd, 0x2e, 0x1d, 0x6c, 0x04, 0xcf, 0x17, 0x01, 0x50, 0x7f, + 0x06, 0x1e, 0x2f, 0x07, 0x50, 0xff, 0x76, 0x61, 0x7f, 0x40, 0x6f, 0x0e, + 0x00, 0xff, 0x0b, 0x4e, 0xe6, 0x74, 0x14, 0x5c, 0x20, 0x7b, 0x76, 0x06, + 0x58, 0x15, 0x00, 0x00, 0xc8, 0xb2, 0xb8, 0x06, 0xd2, 0x1c, 0xbc, 0x74, + 0xb3, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x2d, 0x04, 0x38, 0x28, + 0x07, 0x32, 0x28, 0x1d, 0x38, 0x19, 0x34, 0x28, 0x21, 0x71, 0x3d, 0x05, + 0xa8, 0x15, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x1a, 0x0e, 0x0e, + 0x20, 0x01, 0x50, 0x1a, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x1a, 0x1a, 0x62, + 0x21, 0x60, 0xf0, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x06, 0x06, 0x06, + 0x06, 0x20, 0x05, 0x01, 0x40, 0x06, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, + 0x01, 0x03, 0x01, 0x03, 0x03, 0x02, 0x30, 0x06, 0x01, 0x04, 0x02, 0x02, + 0x02, 0x02, 0x03, 0x38, 0x58, 0x06, 0x03, 0x40, 0x03, 0x38, 0x66, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x07, 0x54, 0x07, 0x20, 0x01, 0x04, 0x20, 0x06, + 0x15, 0x20, 0x05, 0x04, 0x04, 0x15, 0x05, 0x08, 0x08, 0x20, 0x01, 0x05, + 0x20, 0x06, 0x0b, 0x20, 0x05, 0x81, 0x20, 0x2a, 0x09, 0x09, 0x09, 0x0a, + 0x09, 0x06, 0x30, 0x06, 0x80, 0x20, 0x05, 0x06, 0x06, 0x07, 0x0a, 0x0a, + 0x0a, 0x0b, 0x30, 0x0a, 0x07, 0x30, 0x06, 0x20, 0x05, 0x07, 0x07, 0x08, + 0x0b, 0x09, 0x0b, 0x0b, 0x09, 0x0b, 0x20, 0x2d, 0x0b, 0x1a, 0x20, 0x05, + 0x05, 0x08, 0x08, 0x09, 0x0c, 0x0c, 0x20, 0x01, 0x09, 0x20, 0x06, 0x65, + 0x0d, 0x20, 0x05, 0x20, 0x3b, 0x0d, 0x0d, 0x20, 0x01, 0x0a, 0x20, 0x06, + 0x65, 0x0e, 0x20, 0x05, 0x20, 0x3b, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, + 0x06, 0x40, 0x10, 0x20, 0x05, 0x0b, 0x0b, 0x0c, 0x13, 0x10, 0x10, 0x00, + 0x10, 0x10, 0x0c, 0x0c, 0x10, 0x10, 0x11, 0x13, 0x80, 0x30, 0x3a, 0x0d, + 0x10, 0x11, 0x11, 0x11, 0x11, 0x0d, 0x04, 0x0d, 0x11, 0x11, 0x18, 0x10, + 0x30, 0x3a, 0x0e, 0x11, 0x00, 0x12, 0x12, 0x13, 0x12, 0x0e, 0x0e, 0x12, + 0x12, 0x20, 0x19, 0x11, 0x31, 0x02, 0x0f, 0x12, 0x13, 0x13, 0x12, 0x01, + 0x13, 0x0f, 0x0f, 0x13, 0x13, 0x0c, 0x12, 0x30, 0x4a, 0x01, 0x10, 0x14, + 0x15, 0x15, 0x15, 0x15, 0x10, 0x20, 0x06, 0x20, 0x13, 0x14, 0x30, 0x49, + 0x11, 0x15, 0x14, 0x14, 0x14, 0x24, 0x14, 0x11, 0x20, 0x06, 0x12, 0x15, + 0x30, 0x49, 0x12, 0x16, 0x56, 0x16, 0x20, 0x01, 0x12, 0x20, 0x06, 0x14, + 0x20, 0x05, 0x20, 0x4b, 0x17, 0x00, 0x17, 0x18, 0x17, 0x17, 0x13, 0x13, + 0x18, 0x17, 0x40, 0x07, 0x20, 0x05, 0x13, 0x13, 0x14, 0x18, 0x18, 0x17, + 0x01, 0x18, 0x18, 0x14, 0x14, 0x17, 0x18, 0x08, 0x20, 0x05, 0x12, 0x14, + 0x14, 0x15, 0x39, 0x74, 0x19, 0x15, 0x20, 0x06, 0x16, 0x89, 0x20, 0x05, + 0x15, 0x15, 0x16, 0x31, 0x6c, 0x1a, 0x16, 0x20, 0x06, 0x42, 0x17, 0x20, + 0x05, 0x16, 0x16, 0x17, 0x03, 0x21, 0x52, 0x01, 0x00, 0x17, 0x17, 0x02, + 0x01, 0x02, 0x03, 0x17, 0x17, 0xc1, 0x20, 0x4c, 0x21, 0x52, 0x02, 0x02, + 0x18, 0x18, 0x03, 0x20, 0x06, 0x0e, 0x18, 0x18, 0x18, 0x18, 0xf9, 0xbf, + 0xf1, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0xe4, 0x9c, 0x02, 0x11, 0x51, 0x00, 0x00, + 0x30, 0x01, 0x6d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x64, 0x1c, 0x5c, 0x17, 0x00, 0x00, 0x00, + 0x02, 0x6d, 0xa2, 0x30, 0xf3, 0x30, 0xab, 0x04, 0x30, 0xe9, 0x30, 0x0c, + 0x77, 0x06, 0x58, 0x1f, 0x41, 0x00, 0x01, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x72, 0x20, 0x03, 0x80, 0x10, 0x16, 0x30, 0x7f, 0x89, 0x5b, 0x61, + 0x53, 0xc9, 0x62, 0x01, 0x80, 0x06, 0x62, 0xfd, 0x00, 0x00, 0x59, 0xc5, + 0x74, 0xce, 0x7c, 0x05, 0xb7, 0x20, 0x00, 0xfc, 0xc8, 0x0e, 0x93, 0x7f, + 0x63, 0x06, 0xa3, 0xff, 0x00, 0x10, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x30, + 0x04, 0x60, 0x40, 0x20, 0x03, 0x10, 0x1e, 0x34, 0xff, 0x01, 0x07, 0x07, + 0x07, 0x08, 0x32, 0x07, 0x01, 0x30, 0x06, 0x20, 0x05, 0x01, 0x01, 0x58, + 0x17, 0x03, 0x02, 0x6d, 0xa4, 0x30, 0xb9, 0x30, 0xbf, 0x28, 0x1b, 0xd6, + 0x20, 0x30, 0xeb, 0x06, 0x48, 0x1b, 0x30, 0x01, 0x73, 0x00, 0x74, 0x80, + 0x28, 0x17, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6c, 0x95, 0x10, 0x06, + 0x00, 0x7f, 0x49, 0x00, 0x06, 0xd1, 0x7f, 0x45, 0x60, 0x7f, 0x6d, 0x06, + 0x61, 0xff, 0x00, 0x0a, 0x4f, 0xaf, 0x65, 0x66, 0x57, 0x03, 0x5e, 0x20, + 0x14, 0x5c, 0x06, 0x58, 0x1b, 0x74, 0xc7, 0xa4, 0xc2, 0xc4, 0x18, 0xd0, + 0x88, 0xbd, 0x06, 0x78, 0x19, 0xb1, 0xff, 0x6f, 0x00, 0x65, 0xe2, 0x06, + 0x03, 0x81, 0x72, 0x7f, 0x06, 0x71, 0xff, 0x21, 0x04, 0x42, 0x28, 0x15, + 0x3c, 0x03, 0x04, 0x31, 0x04, 0x43, 0x04, 0x3b, 0x06, 0x28, 0x19, 0x10, + 0x06, 0xf4, 0xff, 0x80, 0x0e, 0xf6, 0x7f, 0x02, 0x28, 0x28, 0x28, 0x28, + 0x21, 0x02, 0x80, 0x20, 0x06, 0x3d, 0x28, 0x02, 0x02, 0x02, 0x02, 0x2a, + 0x02, 0x1d, 0x9a, 0x14, 0x00, 0x00, 0x04, 0x28, 0x17, 0xba, 0x35, 0x30, + 0xdf, 0x06, 0x68, 0x13, 0x58, 0x17, 0x7a, 0x26, 0x13, 0x69, 0x2f, 0xaf, + 0xac, 0x10, 0x06, 0x50, 0x7f, 0x53, 0x61, 0x7d, 0x6e, 0x26, 0x13, 0x0e, + 0x31, 0xff, 0x0a, 0x4f, 0x0c, 0x79, 0x51, 0xc6, 0x5b, 0x06, 0x78, 0x15, + 0x38, 0x17, 0x88, 0xc9, 0x0c, 0xf8, 0xbb, 0x74, 0xb9, 0x06, 0x78, 0x17, + 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x47, 0x37, 0x28, 0x15, 0x38, 0x04, 0x40, + 0x06, 0x28, 0x13, 0x10, 0x07, 0x34, 0xff, 0x0e, 0xf6, 0x7f, 0x01, 0x03, + 0x29, 0x29, 0x29, 0x48, 0x29, 0x03, 0x20, 0x06, 0x40, 0x1e, 0x20, 0x05, + 0x03, 0x03, 0x52, 0x1b, 0x4a, 0x13, 0x05, 0x00, 0x00, 0x05, 0x6d, 0xd6, + 0x28, 0x13, 0xb5, 0x06, 0x88, 0x15, 0x15, 0x00, 0x00, 0x42, 0x2f, 0xa5, + 0x72, 0x2e, 0xb3, 0x61, 0x10, 0x16, 0x60, 0x7f, 0x02, 0x03, 0x5e, 0x14, + 0x5c, 0x28, 0x84, 0x06, 0x78, 0x15, 0x00, 0x01, 0x00, 0x80, 0xbd, 0x74, + 0xb9, 0xac, 0xc0, 0x06, 0x78, 0x15, 0x88, 0x0f, 0x13, 0x7f, 0x11, 0x04, + 0x43, 0x28, 0x13, 0x41, 0x04, 0x30, 0xc5, 0x06, 0x68, 0x17, 0x10, 0x16, + 0xf4, 0xff, 0x04, 0x15, 0x15, 0x20, 0x01, 0x04, 0x40, 0x06, 0x00, 0x04, + 0x04, 0x04, 0x04, 0x93, 0x1c, 0xab, 0x14, 0x00, 0x00, 0x00, 0x06, 0x6d, + 0xa2, 0x30, 0xc0, 0x30, 0x45, 0xca, 0x06, 0xa8, 0x17, 0x41, 0x00, 0x64, + 0x28, 0x13, 0x6e, 0x06, 0x88, 0x17, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, + 0x96, 0xbe, 0x8f, 0xb3, 0x7e, 0x06, 0x98, 0x17, 0x03, 0x44, 0xc5, 0xe4, + 0xb2, 0x98, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x16, 0x10, 0x04, + 0x34, 0x28, 0x13, 0x3d, 0x06, 0x88, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x05, + 0x03, 0x01, 0x01, 0x01, 0x02, 0x01, 0x05, 0x20, 0x06, 0x30, 0x05, 0x00, + 0x05, 0x05, 0x4f, 0x1a, 0x1e, 0x19, 0x00, 0x00, 0x00, 0x07, 0x6d, 0xac, + 0x30, 0xb8, 0x30, 0xa2, 0x30, 0x05, 0xf3, 0x30, 0xc6, 0x30, 0xd7, 0x06, + 0x48, 0x1d, 0x47, 0x2f, 0xa9, 0x10, 0x7a, 0x00, 0x69, 0x48, 0x1b, 0x74, + 0x00, 0x65, 0x00, 0x40, 0x70, 0x10, 0x15, 0xe0, 0x7f, 0xa0, 0x52, 0x4e, + 0x6d, 0x89, 0x5b, 0x08, 0xf0, 0x6c, 0x6e, 0x66, 0x06, 0x68, 0x1b, 0xac, + 0xc0, 0xc9, 0x03, 0x48, 0xc5, 0x4c, 0xd1, 0x04, 0xd5, 0x06, 0x58, 0x1b, + 0x0e, 0xf3, 0x7f, 0x44, 0x13, 0x28, 0x15, 0x37, 0x04, 0x38, 0x48, 0x1b, + 0x42, 0x04, 0x18, 0x35, 0x04, 0x3f, 0x05, 0xe8, 0x1f, 0x10, 0x16, 0xf4, + 0xff, 0x06, 0x21, 0x21, 0x08, 0x21, 0x21, 0x22, 0x06, 0x20, 0x06, 0x17, + 0x21, 0x06, 0x00, 0x06, 0x06, 0x06, 0x5b, 0x1a, 0x95, 0x1a, 0x00, 0x00, + 0x00, 0x08, 0x6d, 0xb3, 0x30, 0xcb, 0x30, 0xe4, 0xc5, 0x06, 0x48, 0x11, + 0x5f, 0xff, 0x4b, 0x00, 0x6f, 0x2f, 0xad, 0x79, 0x06, 0x8f, 0xaf, 0x81, + 0x10, 0x0e, 0xf0, 0x7f, 0xd1, 0x79, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x68, + 0x13, 0x81, 0x2f, 0xff, 0x54, 0xcf, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0x58, + 0x13, 0x88, 0x0f, 0x33, 0x7f, 0x1a, 0x04, 0x3e, 0x28, 0x11, 0x4c, 0x04, + 0x4f, 0xc0, 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x07, 0x35, 0x35, + 0x35, 0x34, 0x35, 0x50, 0x07, 0x20, 0x06, 0x28, 0x20, 0x05, 0x07, 0x07, + 0xed, 0x1a, 0x00, 0x19, 0x17, 0x00, 0x00, 0x09, 0x6d, 0xa2, 0x30, 0x05, + 0xf3, 0x30, 0xbf, 0x30, 0xea, 0x06, 0x88, 0x1b, 0x41, 0x4f, 0xa7, 0x1b, + 0x61, 0x00, 0x6c, 0x06, 0x68, 0x1b, 0x0f, 0x10, 0x7f, 0x64, 0x41, 0x7d, + 0x3f, 0xb1, 0x81, 0x0e, 0x31, 0xff, 0x89, 0x5b, 0x54, 0x58, 0x29, 0x52, + 0x06, 0x98, 0x19, 0x03, 0x48, 0xc5, 0xc8, 0xd0, 0xac, 0xb9, 0x06, 0x98, + 0x19, 0x0e, 0xf3, 0x7f, 0x41, 0x10, 0x28, 0x15, 0x42, 0x04, 0x30, 0x04, + 0x3b, 0x06, 0x68, 0x1b, 0xc1, 0x10, 0x07, 0x14, 0xff, 0x0e, 0xd6, 0x7f, + 0x08, 0x08, 0x08, 0x08, 0x01, 0x30, 0x04, 0x80, 0x60, 0x03, 0x3d, 0x1a, + 0xd1, 0x15, 0x00, 0x00, 0x0a, 0x08, 0x6d, 0xc7, 0x30, 0xa3, 0x28, 0x13, + 0xeb, 0x30, 0xd0, 0x36, 0x30, 0xaf, 0x20, 0x05, 0x06, 0x18, 0x1b, 0x44, + 0x26, 0x91, 0x3f, 0xad, 0x72, 0x20, 0x00, 0x62, 0x2f, 0xb3, 0x6b, 0x00, + 0x31, 0x01, 0x72, 0x80, 0x10, 0x15, 0xc0, 0x7f, 0xea, 0x8f, 0x9a, 0x4e, + 0xf4, 0x5d, 0x4b, 0x10, 0x51, 0x14, 0x5c, 0x06, 0x58, 0x19, 0x14, 0xb5, + 0x7c, 0xc5, 0x00, 0x74, 0xb9, 0x14, 0xbc, 0xa4, 0xd0, 0x74, 0xb9, 0xc4, + 0x06, 0x38, 0x1b, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x38, 0x28, 0x0f, 0x40, + 0x04, 0x46, 0x31, 0x28, 0x1b, 0x3a, 0x04, 0x4b, 0x20, 0x09, 0x10, 0x1d, + 0xd4, 0xff, 0x09, 0x2a, 0x1a, 0x1a, 0x20, 0x01, 0x09, 0x20, 0x06, 0x1b, + 0x20, 0x05, 0x09, 0x00, 0x09, 0x02, 0x1b, 0x98, 0x1c, 0x00, 0x00, 0x0b, + 0x23, 0x6d, 0xe1, 0x28, 0x13, 0xb7, 0x30, 0xf3, 0x06, 0x28, 0x11, 0x5f, + 0xff, 0x15, 0x4d, 0x00, 0x65, 0x28, 0x13, 0x73, 0x2e, 0xaf, 0x6e, 0x10, + 0x16, 0x40, 0x7f, 0x03, 0x85, 0x68, 0x14, 0x5c, 0x9b, 0x8f, 0x06, 0x58, + 0x13, 0x3f, 0xff, 0x03, 0x54, 0xba, 0x74, 0xb9, 0xe0, 0xc2, 0x06, 0x38, + 0x11, 0x0f, 0x53, 0x7f, 0x15, 0x1c, 0x04, 0x35, 0x28, 0x15, 0x41, 0x28, + 0x1d, 0x3d, 0x05, 0xe8, 0x11, 0x80, 0x10, 0x17, 0x54, 0xff, 0x0a, 0x3a, + 0x3a, 0x3a, 0x39, 0x3a, 0x0a, 0xa0, 0x20, 0x06, 0x30, 0x20, 0x05, 0x0a, + 0x0a, 0x2b, 0x1a, 0xa0, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x6d, 0xab, 0x30, + 0xa4, 0x0a, 0x30, 0xbb, 0x30, 0xea, 0x06, 0x88, 0x17, 0x4b, 0x2f, 0xab, + 0x79, 0xd0, 0x28, 0x17, 0x38, 0x1d, 0x69, 0x10, 0x16, 0x20, 0x7f, 0x00, + 0x5f, 0x5e, 0x58, 0x20, 0x29, 0x52, 0x06, 0x98, 0x17, 0x74, 0xce, 0x74, + 0xc7, 0x38, 0x18, 0xc1, 0xac, 0xb9, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, + 0x1a, 0x04, 0x30, 0x36, 0x04, 0x39, 0x28, 0x17, 0x38, 0x1d, 0x38, 0x06, + 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x02, 0x2f, 0x2f, 0x2f, 0x2e, + 0x2f, 0x0b, 0x20, 0x06, 0x20, 0x80, 0x20, 0x05, 0x0b, 0x0b, 0x8b, 0x1b, + 0x3b, 0x19, 0x00, 0x00, 0x00, 0x0e, 0x6d, 0xb7, 0x30, 0xe3, 0x30, 0xf3, + 0x08, 0x30, 0xeb, 0x30, 0xa6, 0x20, 0x03, 0xd5, 0x30, 0xa1, 0x88, 0x06, + 0x08, 0x1f, 0x5e, 0x01, 0x61, 0x2f, 0xa9, 0x6c, 0x00, 0x31, 0x2c, 0x01, + 0x75, 0x2f, 0xb7, 0x66, 0x28, 0x25, 0x10, 0x15, 0xd0, 0x7f, 0x1a, 0x5c, + 0x00, 0x29, 0x52, 0x4c, 0x4e, 0x14, 0x5c, 0xd5, 0x6c, 0x80, 0x06, 0x58, + 0x1b, 0xe8, 0xc0, 0xac, 0xb9, 0xb0, 0xc6, 0x74, 0x1a, 0xb9, 0x0c, 0xd3, + 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x28, 0x28, 0x17, 0x3d, 0x02, 0x04, + 0x3b, 0x04, 0x4b, 0x04, 0x43, 0x28, 0x19, 0x44, 0xc0, 0x28, 0x25, 0x10, + 0x1d, 0xd4, 0xff, 0x0c, 0x44, 0x44, 0x44, 0x43, 0x44, 0x50, 0x0c, 0x20, + 0x06, 0x48, 0x20, 0x05, 0x0c, 0x0c, 0x6a, 0x1a, 0x00, 0x97, 0x1b, 0x00, + 0x00, 0x0f, 0x6d, 0xde, 0x30, 0x01, 0xe9, 0x30, 0xc6, 0x30, 0xa3, 0x30, + 0xe4, 0x06, 0x08, 0x11, 0xab, 0x5f, 0xff, 0x4d, 0x2f, 0xaf, 0x6c, 0x2f, + 0xb3, 0x74, 0x2f, 0xb5, 0x05, 0xf8, 0x13, 0x80, 0x10, 0x0f, 0x30, 0x7f, + 0x6c, 0x9a, 0xc9, 0x62, 0x82, 0x84, 0x9a, 0x40, 0x4e, 0x06, 0x58, 0x15, + 0x00, 0x00, 0xd0, 0xb9, 0x7c, 0xb7, 0x0d, 0xf0, 0xd2, 0x44, 0xc5, 0x06, + 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x17, 0x41, 0x3b, 0x28, 0x1b, + 0x42, 0x04, 0x4c, 0x04, 0x4f, 0x05, 0xe8, 0x13, 0x80, 0x10, 0x17, 0x34, + 0xff, 0x0d, 0x37, 0x37, 0x37, 0x36, 0x37, 0x0d, 0xa0, 0x20, 0x06, 0x2d, + 0x20, 0x05, 0x0d, 0x0d, 0x45, 0x1b, 0x3e, 0x80, 0x28, 0x17, 0x10, 0x6d, + 0xa8, 0x30, 0xeb, 0x30, 0xba, 0xa9, 0x20, 0x03, 0xe0, 0x06, 0x68, 0x17, + 0x45, 0x2f, 0xa5, 0x7a, 0x00, 0x3f, 0xab, 0x10, 0x75, 0x00, 0x6d, 0x10, + 0x16, 0x20, 0x7f, 0xc3, 0x57, 0x14, 0x5c, 0x02, 0x56, 0x79, 0x81, 0x9c, + 0xc6, 0x59, 0x06, 0x58, 0x19, 0xd0, 0x01, 0xc5, 0x74, 0xb9, 0xfc, 0xc8, + 0xf8, 0xb8, 0x06, 0x78, 0x17, 0x80, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x40, + 0x04, 0x37, 0x04, 0x43, 0x8c, 0x20, 0x05, 0x43, 0x04, 0x3c, 0x06, 0x28, + 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x1f, 0x54, 0x1f, 0x20, 0x01, 0x0e, + 0x20, 0x06, 0x4f, 0x20, 0x05, 0x0e, 0x0e, 0x00, 0x5f, 0x1c, 0x58, 0x1d, + 0x00, 0x00, 0x11, 0x6d, 0x44, 0xb5, 0x28, 0x11, 0xb9, 0x30, 0xf3, 0x06, + 0x68, 0x15, 0x00, 0x00, 0x45, 0x53, 0x2f, 0xaf, 0x6d, 0x00, 0x73, 0x28, + 0x19, 0x6e, 0x10, 0x16, 0x40, 0x7f, 0x03, 0x28, 0x84, 0xc6, 0x59, 0x7e, + 0x67, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x0c, 0xbc, 0xc0, 0x1c, 0xc2, 0x06, + 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x21, 0x04, 0x56, 0x30, 0x28, 0x0f, 0x41, + 0x28, 0x19, 0x3d, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0f, 0x02, + 0x43, 0x43, 0x43, 0x42, 0x43, 0x0f, 0x20, 0x06, 0x39, 0x80, 0x20, 0x05, + 0x0f, 0x0f, 0x5c, 0x1d, 0xd6, 0x19, 0x00, 0x0d, 0x00, 0x12, 0x6d, 0xef, + 0x06, 0xa8, 0x13, 0x3f, 0xff, 0x56, 0x28, 0x17, 0xcc, 0x06, 0x58, 0x11, + 0x10, 0x0f, 0x50, 0x7f, 0xe1, 0x51, 0x06, 0x98, 0x13, 0x3f, 0xff, 0x18, + 0xbc, 0xdc, 0x06, 0xb8, 0x15, 0x0f, 0x13, 0x7f, 0x12, 0x28, 0x17, 0x06, + 0x58, 0x11, 0x10, 0x17, 0x54, 0xff, 0x10, 0x4e, 0x54, 0x4e, 0x20, 0x01, + 0x10, 0x20, 0x06, 0x16, 0x20, 0x05, 0x10, 0x10, 0x00, 0x5f, 0x1b, 0xd9, + 0x1e, 0x00, 0x00, 0x13, 0x6d, 0x01, 0xab, 0x30, 0xd5, 0x30, 0xe9, 0x30, + 0xde, 0x28, 0x1d, 0x45, 0xde, 0x20, 0x07, 0xb7, 0x30, 0xe5, 0x05, 0xe8, + 0x25, 0x4b, 0x2f, 0xaf, 0x1e, 0x68, 0x00, 0x72, 0x4f, 0xb5, 0x38, 0x21, + 0x30, 0x05, 0x30, 0x0d, 0x5f, 0x40, 0x01, 0x10, 0x15, 0x50, 0x7f, 0x61, + 0x53, 0x6b, 0x8d, 0xc9, 0x62, 0x00, 0xfc, 0x66, 0x6c, 0x9a, 0xc9, 0x62, + 0xc0, 0x4e, 0x80, 0x06, 0x18, 0x23, 0x74, 0xce, 0x7c, 0xb7, 0xcc, 0xb9, + 0xc8, 0x06, 0xb9, 0x7c, 0xb7, 0x88, 0xc2, 0x06, 0x38, 0x21, 0x0e, 0xf3, + 0x7f, 0x1a, 0x8b, 0x28, 0x17, 0x45, 0x04, 0x40, 0x28, 0x1d, 0x3c, 0x48, + 0x21, 0x30, 0x05, 0xb0, 0x30, 0x0d, 0x48, 0x05, 0x68, 0x2b, 0x10, 0x16, + 0xf4, 0xff, 0x11, 0x2a, 0x2a, 0x2a, 0x14, 0x29, 0x2a, 0x11, 0x20, 0x06, + 0x25, 0x20, 0x05, 0x11, 0x11, 0x00, 0xb9, 0x1a, 0x43, 0x1a, 0x00, 0x00, + 0x14, 0x6d, 0x01, 0xc7, 0x30, 0xcb, 0x30, 0xba, 0x30, 0xea, 0x05, 0xe8, + 0x0d, 0x88, 0x9f, 0xff, 0x44, 0x00, 0x65, 0x2f, 0xaf, 0x69, 0x00, 0x7a, + 0x30, 0x00, 0x6c, 0x20, 0x05, 0x10, 0x16, 0x10, 0x7f, 0xe3, 0x4e, 0x3c, + 0x5c, 0x0c, 0x79, 0x51, 0x29, 0x52, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x70, + 0xb3, 0x03, 0xc8, 0xb2, 0x90, 0xc9, 0xac, 0xb9, 0x06, 0x38, 0x13, 0x0f, + 0x33, 0x7f, 0x10, 0x14, 0x04, 0x35, 0x28, 0x0d, 0x38, 0x04, 0x37, 0x04, + 0x62, 0x3b, 0x20, 0x05, 0x10, 0x1e, 0x14, 0xff, 0x12, 0x19, 0x19, 0x20, + 0x01, 0x12, 0xa0, 0x20, 0x06, 0x1a, 0x20, 0x05, 0x12, 0x12, 0xdb, 0x1a, + 0xae, 0x00, 0x14, 0x00, 0x00, 0x15, 0x6d, 0xd0, 0x30, 0xc8, 0x0a, 0x30, + 0xde, 0x30, 0xf3, 0x06, 0x88, 0x17, 0x42, 0x2f, 0xaf, 0x74, 0xc0, 0x6f, + 0xab, 0x10, 0x16, 0x30, 0x7f, 0xf4, 0x5d, 0x79, 0x72, 0xfc, 0x66, 0xc3, + 0x06, 0x78, 0x15, 0x2b, 0x99, 0xbc, 0xb8, 0xd2, 0xcc, 0x06, 0x88, 0x15, + 0x0f, 0x13, 0x7f, 0x01, 0x11, 0x04, 0x30, 0x04, 0x42, 0x04, 0x3c, 0x20, + 0x05, 0x62, 0x3d, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x13, 0x0e, + 0x0e, 0x20, 0x01, 0x13, 0xa0, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x13, 0x13, + 0xf0, 0x1a, 0x3d, 0x00, 0x1d, 0x00, 0x00, 0x16, 0x6d, 0xa8, 0x30, 0xe9, + 0x0a, 0x30, 0xba, 0x30, 0xfc, 0x06, 0x88, 0x17, 0x45, 0x2f, 0xa7, 0x61, + 0x85, 0x2f, 0xad, 0x31, 0x01, 0x1f, 0x01, 0x10, 0x06, 0x70, 0x7f, 0xe2, + 0x0e, 0xa1, 0x7f, 0x02, 0xc3, 0x57, 0xc9, 0x62, 0xfd, 0x6c, 0x06, 0x98, + 0x17, 0xd8, 0x06, 0xc5, 0x7c, 0xb7, 0xc0, 0xc9, 0x06, 0x98, 0x17, 0x0e, + 0xf3, 0x7f, 0x2d, 0x00, 0x04, 0x3b, 0x04, 0x4f, 0x04, 0x37, 0x04, 0x4b, + 0x38, 0x04, 0x33, 0x06, 0x48, 0x17, 0x10, 0x07, 0x34, 0xff, 0x0e, 0xb6, + 0x7f, 0x14, 0x1d, 0x1d, 0xa8, 0x20, 0x01, 0x14, 0x20, 0x06, 0x4d, 0x20, + 0x05, 0x14, 0x14, 0x82, 0x00, 0x1b, 0xe3, 0x1b, 0x00, 0x00, 0x17, 0x6d, + 0xb5, 0x02, 0x30, 0xab, 0x30, 0xea, 0x30, 0xe4, 0x06, 0x88, 0x17, 0x53, + 0xa3, 0x2f, 0xaf, 0x6b, 0x2f, 0xb3, 0x72, 0x00, 0x79, 0x2f, 0xb9, 0x10, + 0x16, 0x10, 0x7f, 0x00, 0x28, 0x84, 0x61, 0x53, 0xcc, 0x91, 0x9a, 0x4e, + 0x80, 0x06, 0x78, 0x19, 0xac, 0xc0, 0x74, 0xce, 0xac, 0xb9, 0x44, 0x60, + 0xc5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x04, 0x3a, + 0x8c, 0x20, 0x03, 0x40, 0x04, 0x4c, 0x28, 0x1f, 0x10, 0x1e, 0x14, 0xff, + 0x15, 0x42, 0x05, 0x42, 0x42, 0x41, 0x42, 0x15, 0x20, 0x06, 0x38, 0x20, + 0x05, 0x00, 0x15, 0x15, 0x00, 0x1d, 0x9e, 0x15, 0x00, 0x00, 0x00, 0x18, + 0x6d, 0xb3, 0x30, 0xb8, 0x30, 0xe3, 0x30, 0x60, 0xa8, 0x28, 0x1b, 0x06, + 0x58, 0x19, 0x4b, 0x00, 0x6f, 0x00, 0x63, 0xa8, 0x2f, 0xb1, 0x65, 0x2f, + 0xb7, 0x69, 0x10, 0x16, 0x20, 0x7f, 0xd1, 0x79, 0x3e, 0x04, 0x8d, 0xc3, + 0x57, 0x29, 0x52, 0x06, 0x78, 0x17, 0x54, 0xcf, 0x03, 0x90, 0xc7, 0xd8, + 0xc5, 0xac, 0xb9, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x01, 0x1a, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x36, 0x28, 0x1d, 0x06, 0x4d, 0x04, 0x3b, 0x04, + 0x38, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x16, 0x02, 0x34, 0x34, + 0x34, 0x33, 0x34, 0x16, 0x20, 0x06, 0x27, 0x82, 0x20, 0x05, 0x16, 0x16, + 0xfd, 0x1c, 0x46, 0x28, 0x17, 0x19, 0x03, 0x6d, 0xb7, 0x30, 0xef, 0x30, + 0xb9, 0x06, 0x68, 0x13, 0x5f, 0xaf, 0x14, 0x69, 0x00, 0x76, 0x2f, 0xb3, + 0x73, 0x10, 0x16, 0x60, 0x7f, 0x21, 0x95, 0x08, 0xe6, 0x74, 0xaf, 0x65, + 0x06, 0x78, 0x15, 0x00, 0x00, 0xdc, 0x07, 0xc2, 0x14, 0xbc, 0xa4, 0xc2, + 0x06, 0x78, 0x15, 0x0f, 0x21, 0xff, 0x28, 0x0b, 0x58, 0x32, 0x28, 0x15, + 0x41, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x17, 0x48, 0x48, 0x0a, + 0x48, 0x47, 0x48, 0x17, 0x20, 0x06, 0x3a, 0x20, 0x05, 0x17, 0x04, 0x17, + 0x44, 0x1c, 0x52, 0x1a, 0x2b, 0x2d, 0x6d, 0xde, 0x0a, 0x30, 0xcb, 0x30, + 0xb5, 0x06, 0xa8, 0x17, 0x4d, 0x2f, 0xab, 0x6e, 0xb0, 0x2f, 0xa9, 0x73, + 0x2f, 0xb3, 0x10, 0x16, 0x30, 0x7f, 0x6c, 0x9a, 0x3c, 0x5c, 0x20, 0x28, + 0x84, 0x06, 0x98, 0x17, 0xc8, 0xb9, 0xc8, 0xb2, 0xac, 0x6a, 0xc0, 0x06, + 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x13, 0x3d, 0x28, 0x1b, 0x41, + 0xc0, 0x28, 0x1b, 0x10, 0x1e, 0x34, 0xff, 0x18, 0x38, 0x38, 0x38, 0x37, + 0x38, 0x50, 0x18, 0x20, 0x06, 0x2e, 0x20, 0x05, 0x18, 0x18, 0x75, 0x1b, + 0x00, 0x80, 0x13, 0x00, 0x00, 0x1b, 0x6d, 0xc8, 0x30, 0x01, 0xe9, 0x30, + 0xd6, 0x30, 0xbe, 0x30, 0xf3, 0x06, 0x68, 0x1b, 0x10, 0x54, 0x00, 0x72, + 0x2f, 0xad, 0x62, 0x00, 0x7a, 0x00, 0x6e, 0x6f, 0x28, 0x1f, 0x10, 0x06, + 0x50, 0x7f, 0x65, 0x21, 0x7f, 0x39, 0x99, 0x31, 0x81, 0x64, 0xc0, 0x05, + 0xe9, 0x9f, 0x06, 0xf1, 0xff, 0x79, 0x72, 0xc9, 0x62, 0x03, 0x5e, 0x20, + 0x97, 0x5b, 0x06, 0x78, 0x19, 0xb8, 0xd2, 0x7c, 0xb7, 0x0c, 0x18, 0xbe, + 0x74, 0xc8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0x04, 0x40, 0x83, + 0x28, 0x19, 0x31, 0x04, 0x37, 0x04, 0x3e, 0x28, 0x1f, 0x10, 0x0e, 0x54, + 0xff, 0x8a, 0x0e, 0xb6, 0x7f, 0x19, 0x4b, 0x4b, 0x20, 0x01, 0x19, 0x20, + 0x06, 0x40, 0x81, 0x20, 0x05, 0x19, 0x19, 0x27, 0x1d, 0x41, 0x1c, 0x2b, + 0x2d, 0x00, 0x6d, 0xd0, 0x30, 0xeb, 0x30, 0xb1, 0x30, 0xb7, 0xd0, 0x20, + 0x05, 0x06, 0x58, 0x17, 0x42, 0x2f, 0xaf, 0x6c, 0x00, 0x31, 0x01, 0x54, + 0x6b, 0x26, 0x9d, 0x73, 0x2f, 0xb7, 0x72, 0x10, 0x15, 0xe0, 0x7f, 0xf4, + 0x5d, 0x00, 0xd2, 0x52, 0x4b, 0x51, 0xc3, 0x57, 0x7f, 0x89, 0x20, 0x14, + 0x5c, 0x06, 0x38, 0x1b, 0x1c, 0xbc, 0xac, 0xb9, 0x00, 0x06, 0xcf, 0xdc, + 0xc2, 0x74, 0xb9, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x11, 0x80, 0x28, + 0x15, 0x3b, 0x04, 0x4b, 0x04, 0x3a, 0x04, 0x35, 0x0c, 0x04, 0x41, 0x04, + 0x38, 0x28, 0x25, 0x10, 0x1d, 0xd4, 0xff, 0x1a, 0x0c, 0x54, 0x0c, 0x20, + 0x01, 0x1a, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x1a, 0x1a, 0x00, 0x31, 0x1c, + 0xd3, 0x13, 0x00, 0x00, 0x1d, 0x6d, 0x00, 0xa2, 0x30, 0xc7, 0x30, 0xa3, + 0x30, 0xe4, 0x30, 0x14, 0xde, 0x30, 0xf3, 0x06, 0x48, 0x19, 0x41, 0x2e, + 0xa1, 0x31, 0x01, 0x5c, 0x79, 0x2f, 0xb3, 0x6d, 0x2f, 0xb7, 0x06, 0x1f, + 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, 0x96, 0x03, 0xb7, 0x5f, 0x9a, 0x4e, + 0xfc, 0x66, 0x06, 0x38, 0x13, 0x3f, 0xff, 0x01, 0x44, 0xc5, 0x14, 0xb5, + 0x7c, 0xc5, 0xcc, 0x06, 0x68, 0x15, 0x88, 0x0f, 0x13, 0x7f, 0x10, 0x04, + 0x34, 0x28, 0x15, 0x4f, 0x04, 0x3c, 0xb0, 0x28, 0x1f, 0x3d, 0x05, 0xe8, + 0x13, 0x10, 0x17, 0x34, 0xff, 0x1b, 0x02, 0x02, 0x02, 0x18, 0x03, 0x02, + 0x1b, 0x20, 0x06, 0x30, 0x05, 0x1b, 0x1b, 0xda, 0x00, 0x1a, 0x37, 0x1b, + 0x00, 0x00, 0x1e, 0x6d, 0xc6, 0x00, 0x30, 0xad, 0x30, 0xeb, 0x30, 0xc0, + 0x30, 0xfc, 0x8a, 0x06, 0x48, 0x15, 0x00, 0x00, 0x54, 0x2f, 0xa7, 0x6b, + 0x4f, 0xa7, 0x64, 0x90, 0x2f, 0xb9, 0x1f, 0x01, 0x10, 0x15, 0xf0, 0x7f, + 0xf0, 0x6c, 0xfa, 0x57, 0x08, 0x14, 0x5c, 0xbe, 0x8f, 0x06, 0x78, 0x17, + 0x4c, 0xd1, 0xa4, 0x06, 0xd0, 0x74, 0xb9, 0xe4, 0xb2, 0x06, 0x78, 0x17, + 0x0e, 0xf3, 0x7f, 0x22, 0x00, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x38, 0x04, + 0x40, 0x8c, 0x28, 0x1f, 0x30, 0x04, 0x33, 0x06, 0x08, 0x19, 0x10, 0x16, + 0xf4, 0xff, 0x1c, 0x49, 0x54, 0x49, 0x20, 0x01, 0x1c, 0x20, 0x06, 0x3e, + 0x20, 0x05, 0x1c, 0x1c, 0x00, 0x24, 0x1d, 0x91, 0x13, 0x00, 0x00, 0x1f, + 0x6d, 0x41, 0xaf, 0x28, 0x15, 0xc3, 0x30, 0xab, 0x30, 0xec, 0x06, 0x68, + 0x17, 0x54, 0x4b, 0x2f, 0xad, 0x72, 0x2f, 0xb1, 0x6b, 0x28, 0x1d, 0x61, + 0x00, 0x60, 0x6c, 0x28, 0x25, 0x10, 0x15, 0xe0, 0x7f, 0x51, 0xd2, 0x52, + 0x4b, 0x51, 0x08, 0x61, 0x53, 0xb1, 0x83, 0x06, 0x58, 0x19, 0xa4, 0xd0, + 0xac, 0x06, 0xb9, 0x7c, 0xce, 0x08, 0xb8, 0x06, 0x78, 0x17, 0x0e, 0xf3, + 0x7f, 0x1a, 0x2a, 0x04, 0x4b, 0x28, 0x13, 0x4b, 0x28, 0x1b, 0x3a, 0x28, + 0x17, 0x3b, 0xc0, 0x28, 0x25, 0x10, 0x1d, 0xd4, 0xff, 0x1d, 0x31, 0x31, + 0x31, 0x30, 0x31, 0x50, 0x1d, 0x20, 0x06, 0x2b, 0x20, 0x05, 0x1d, 0x1d, + 0x56, 0x1c, 0x00, 0xd2, 0x17, 0x00, 0x00, 0x20, 0x6d, 0xaa, 0x30, 0x01, + 0xb9, 0x30, 0xde, 0x30, 0xcb, 0x30, 0xa8, 0x06, 0x68, 0x17, 0x05, 0x4f, + 0x00, 0x73, 0x00, 0x6d, 0x2f, 0xa9, 0x6e, 0x2f, 0xb3, 0x60, 0x79, 0x06, + 0x08, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x65, 0x59, 0xaf, 0x65, 0xfc, 0x08, + 0x66, 0x3c, 0x5c, 0xf2, 0x06, 0x68, 0x17, 0x24, 0xc6, 0xa4, 0x01, 0xc2, + 0xc8, 0xb9, 0xc8, 0xb2, 0x08, 0xc6, 0x06, 0x58, 0x19, 0x82, 0x0e, 0xf3, + 0x7f, 0x1e, 0x04, 0x41, 0x04, 0x3c, 0x28, 0x11, 0x3d, 0x30, 0x04, 0x38, + 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x1e, 0x40, 0x40, 0x40, 0x14, + 0x3f, 0x40, 0x1e, 0x20, 0x06, 0x36, 0x20, 0x05, 0x1e, 0x1e, 0x00, 0x5e, + 0x1a, 0xc7, 0x19, 0x00, 0x00, 0x21, 0x6d, 0x00, 0xad, 0x30, 0xe5, 0x30, + 0xbf, 0x30, 0xfc, 0x30, 0x41, 0xe4, 0x06, 0x68, 0x17, 0x4b, 0x00, 0xfc, + 0x00, 0x74, 0x2f, 0xa9, 0x50, 0x68, 0x28, 0x15, 0x61, 0x10, 0x16, 0x20, + 0x7f, 0x48, 0x5c, 0x54, 0x58, 0x08, 0x0c, 0x5e, 0x9a, 0x4e, 0x06, 0x58, + 0x15, 0x00, 0x00, 0x34, 0x01, 0xd0, 0xc0, 0xd0, 0x88, 0xd7, 0x44, 0xc5, + 0x06, 0x58, 0x15, 0x82, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x4e, 0x04, 0x42, + 0x28, 0x17, 0x45, 0x0c, 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x28, 0x17, 0x10, + 0x16, 0xf4, 0xff, 0x1f, 0x36, 0x05, 0x36, 0x36, 0x35, 0x36, 0x1f, 0x20, + 0x06, 0x2c, 0x20, 0x05, 0x00, 0x1f, 0x1f, 0x07, 0x1c, 0x52, 0x15, 0x00, + 0x00, 0x00, 0x22, 0x6d, 0xc1, 0x30, 0xe7, 0x30, 0xeb, 0x30, 0x40, 0xe0, + 0x06, 0x68, 0x15, 0x00, 0x00, 0xc7, 0x00, 0x6f, 0x00, 0x18, 0x72, 0x00, + 0x75, 0x2f, 0xb3, 0x10, 0x16, 0x50, 0x7f, 0x54, 0x4e, 0x81, 0x10, 0x9c, + 0xc6, 0x59, 0x06, 0x78, 0x15, 0x00, 0x00, 0x08, 0xcd, 0x30, 0xf8, 0xb8, + 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x27, 0x04, 0x3e, 0x04, 0x06, 0x40, + 0x04, 0x43, 0x04, 0x3c, 0x06, 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, 0x20, + 0x2a, 0x18, 0x18, 0x20, 0x01, 0x20, 0x20, 0x06, 0x47, 0x20, 0x05, 0x20, + 0x00, 0x20, 0xd6, 0x1c, 0xdb, 0x18, 0x00, 0x00, 0x23, 0x02, 0x6d, 0xa4, + 0x30, 0xb9, 0x30, 0xd1, 0x28, 0x19, 0xbf, 0x82, 0x06, 0x68, 0x19, 0x49, + 0x00, 0x73, 0x00, 0x70, 0x2f, 0xaf, 0x72, 0xc0, 0x4f, 0xb5, 0x10, 0x16, + 0x10, 0x7f, 0x0a, 0x4f, 0xaf, 0x65, 0x15, 0x5e, 0x08, 0x14, 0x5c, 0x54, + 0x58, 0x06, 0x58, 0x1b, 0x74, 0xc7, 0xa4, 0x01, 0xc2, 0x0c, 0xd3, 0x74, + 0xb9, 0xc0, 0xd0, 0x06, 0x58, 0x1d, 0x80, 0x0e, 0xf3, 0x7f, 0x2b, 0x04, + 0x41, 0x04, 0x3f, 0x04, 0x30, 0xb0, 0x28, 0x1b, 0x42, 0x20, 0x05, 0x10, + 0x1e, 0x14, 0xff, 0x21, 0x27, 0x27, 0x27, 0x10, 0x27, 0x28, 0x21, 0x20, + 0x06, 0x4b, 0x27, 0x21, 0x21, 0x00, 0x21, 0x21, 0xdb, 0x1a, 0xb9, 0x15, + 0x00, 0x00, 0x00, 0x24, 0x6d, 0xa2, 0x30, 0xa4, 0x30, 0xc9, 0x30, 0x10, + 0xa5, 0x30, 0xf3, 0x06, 0x68, 0x17, 0x41, 0x00, 0x79, 0x00, 0x06, 0x64, + 0x00, 0x31, 0x01, 0x6e, 0x06, 0x6f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x7e, + 0x18, 0x82, 0x7b, 0x76, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x44, 0xc5, 0x74, + 0x18, 0xc7, 0x18, 0xb5, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x04, + 0x39, 0x03, 0x04, 0x34, 0x04, 0x4b, 0x04, 0x3d, 0x06, 0x28, 0x13, 0x10, + 0x17, 0x34, 0xff, 0x15, 0x22, 0x0b, 0x0b, 0x20, 0x01, 0x22, 0x20, 0x06, + 0x04, 0x20, 0x05, 0x00, 0x22, 0x22, 0xe9, 0x1a, 0xcd, 0x13, 0x00, 0x00, + 0x07, 0x25, 0x6d, 0xcf, 0x30, 0xbf, 0x28, 0x19, 0x06, 0x58, 0x13, 0x3f, + 0xff, 0x68, 0x48, 0x2f, 0xab, 0x3f, 0xa9, 0x79, 0x10, 0x16, 0x60, 0x7f, + 0xc8, 0x54, 0x54, 0x10, 0x58, 0x0a, 0x4f, 0x06, 0x98, 0x19, 0x58, 0xd5, + 0xc0, 0xd0, 0x30, 0x74, 0xc7, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x25, + 0x04, 0x30, 0x04, 0x58, 0x42, 0x20, 0x03, 0x39, 0x06, 0x68, 0x17, 0x10, + 0x16, 0xf4, 0xff, 0x23, 0x25, 0x25, 0x08, 0x25, 0x25, 0x26, 0x23, 0x20, + 0x06, 0x44, 0x25, 0x23, 0x00, 0x23, 0x23, 0x23, 0xbe, 0x19, 0xb4, 0x19, + 0x00, 0x00, 0x00, 0x26, 0x6d, 0xde, 0x30, 0xeb, 0x30, 0xc7, 0x0a, 0x30, + 0xa3, 0x30, 0xf3, 0x06, 0x68, 0x1b, 0x4d, 0x28, 0x17, 0x72, 0x98, 0x2f, + 0xb1, 0x69, 0x00, 0x06, 0x5f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x6c, 0x9a, + 0x14, 0x10, 0x5c, 0x01, 0x4e, 0x06, 0x98, 0x17, 0xc8, 0xb9, 0x74, 0xb9, + 0x34, 0x18, 0xb5, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x17, + 0x40, 0x04, 0x06, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x06, 0x48, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x24, 0x02, 0x39, 0x39, 0x39, 0x38, 0x39, 0x24, 0x20, + 0x06, 0x2f, 0x80, 0x20, 0x05, 0x24, 0x24, 0x89, 0x1a, 0xf8, 0x1c, 0x00, + 0x00, 0x00, 0x27, 0x6d, 0xa2, 0x30, 0xaf, 0x30, 0xb5, 0x08, 0x30, 0xe9, + 0x30, 0xa4, 0x06, 0x68, 0x17, 0x41, 0x00, 0x6b, 0x38, 0x00, 0x73, 0x48, + 0x1b, 0x06, 0x5f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x3f, 0x96, 0x4b, 0x04, + 0x51, 0x28, 0x84, 0x56, 0x8d, 0x06, 0x78, 0x19, 0x45, 0xc5, 0x03, 0xac, + 0xc0, 0x7c, 0xb7, 0x74, 0xc7, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x04, + 0x10, 0x04, 0x3a, 0x04, 0x41, 0x48, 0x1b, 0x30, 0x04, 0x60, 0x39, 0x06, + 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x25, 0x05, 0x05, 0x05, 0x06, 0x30, + 0x05, 0x25, 0x30, 0x06, 0x20, 0x05, 0x25, 0x25, 0x49, 0x1b, 0x04, 0x32, + 0x18, 0x00, 0x00, 0x28, 0x28, 0x17, 0xd5, 0x30, 0x01, 0xa3, 0x30, 0xe8, + 0x30, 0xf3, 0x30, 0xab, 0x28, 0x1d, 0x44, 0xd2, 0x28, 0x23, 0xfc, 0x30, + 0xeb, 0x05, 0xa8, 0x23, 0x41, 0x00, 0x55, 0x66, 0x28, 0x0f, 0x6f, 0x2f, + 0xad, 0x6b, 0x68, 0x1d, 0x68, 0x2f, 0xbb, 0xc0, 0x58, 0x29, 0x10, 0x15, + 0x30, 0x7f, 0x3f, 0x96, 0xf2, 0x83, 0x38, 0x6c, 0x00, 0x61, 0x53, 0xc9, + 0x62, 0x0c, 0x5e, 0x28, 0x84, 0x20, 0x14, 0x5c, 0x05, 0xf8, 0x1f, 0x44, + 0xc5, 0x3c, 0xd5, 0x28, 0x00, 0xc6, 0x74, 0xce, 0x7c, 0xb7, 0x88, 0xd7, + 0xac, 0x18, 0xc0, 0x74, 0xb9, 0x05, 0xf8, 0x1f, 0x0e, 0xf3, 0x7f, 0x10, + 0x04, 0x44, 0x03, 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x3d, 0x28, 0x1f, 0x58, + 0x1d, 0x18, 0x45, 0x04, 0x38, 0x68, 0x29, 0x10, 0x1d, 0x34, 0xff, 0x26, + 0x03, 0x03, 0x0a, 0x03, 0x04, 0x03, 0x26, 0x20, 0x06, 0x0b, 0x20, 0x05, + 0x26, 0x00, 0x26, 0x8f, 0x1b, 0xb7, 0x15, 0x00, 0x00, 0x29, 0x2d, 0x6d, + 0xc8, 0x28, 0x0f, 0xc8, 0x05, 0xa8, 0x07, 0xff, 0xff, 0x54, 0x28, 0x13, + 0xa0, 0x38, 0x11, 0x74, 0x10, 0x16, 0x60, 0x7f, 0x58, 0x62, 0x61, 0x53, + 0x79, 0x60, 0x72, 0x05, 0xf8, 0x0d, 0x9f, 0xff, 0xa0, 0xd1, 0x74, 0xce, + 0xb8, 0x6d, 0xd2, 0x05, 0xf8, 0x0d, 0x0f, 0x93, 0x7f, 0x22, 0x28, 0x13, + 0x38, 0x11, 0x42, 0x05, 0x48, 0x05, 0x8a, 0x10, 0x18, 0x14, 0xff, 0x27, + 0x4a, 0x4a, 0x20, 0x01, 0x27, 0x20, 0x06, 0x3f, 0x80, 0x20, 0x05, 0x27, + 0x27, 0xab, 0x1c, 0xfd, 0x19, 0x00, 0x00, 0x00, 0x2a, 0x6d, 0xa8, 0x30, + 0xc7, 0x30, 0xa3, 0x08, 0x30, 0xeb, 0x30, 0xcd, 0x06, 0x68, 0x1b, 0x45, + 0x00, 0x64, 0xac, 0x2f, 0x9f, 0x72, 0x2f, 0xaf, 0x65, 0x06, 0x48, 0x9a, + 0x10, 0x0e, 0xf0, 0x7f, 0xc3, 0x57, 0x02, 0xea, 0x8f, 0x14, 0x5c, 0x85, + 0x51, 0x06, 0x78, 0x19, 0xd0, 0x01, 0xc5, 0x14, 0xb5, 0x74, 0xb9, 0x24, + 0xb1, 0x06, 0x78, 0x19, 0x80, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x40, 0x0c, 0x04, 0x3d, 0x04, 0x35, 0x06, 0x48, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x28, 0x1c, 0x54, 0x1c, 0x20, 0x01, 0x28, 0x20, 0x06, + 0x4c, 0x20, 0x05, 0x28, 0x28, 0x00, 0xa1, 0x1d, 0xe4, 0x12, 0x00, 0x00, + 0x2b, 0x6d, 0x01, 0xab, 0x30, 0xe9, 0x30, 0xde, 0x30, 0xf3, 0x06, 0x68, + 0x15, 0x15, 0x00, 0x00, 0x4b, 0x2f, 0xab, 0x72, 0x2f, 0xaf, 0x6d, 0x2f, + 0xb3, 0x40, 0x6e, 0x10, 0x16, 0x20, 0x7f, 0x61, 0x53, 0xc9, 0x62, 0xfc, + 0x66, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x74, 0xce, 0x7c, 0xb7, 0xcc, + 0x62, 0xb9, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x30, 0x28, + 0x15, 0x30, 0x2c, 0x04, 0x3c, 0x20, 0x07, 0x3d, 0x06, 0x28, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x29, 0x2c, 0x05, 0x2c, 0x2c, 0x2b, 0x2c, 0x29, 0x20, + 0x06, 0x22, 0x20, 0x05, 0x00, 0x29, 0x29, 0x70, 0x1a, 0x9e, 0x17, 0x00, + 0x00, 0x00, 0x2c, 0x6d, 0xaa, 0x30, 0xeb, 0x30, 0xc9, 0x30, 0x51, 0xa5, + 0x06, 0x88, 0x17, 0x4f, 0x2f, 0xab, 0x64, 0x00, 0x75, 0x06, 0x75, 0x96, + 0x81, 0x10, 0x0f, 0x00, 0x7f, 0x65, 0x59, 0x14, 0x5c, 0x5c, 0x67, 0x06, + 0x98, 0x17, 0x03, 0x24, 0xc6, 0x74, 0xb9, 0x50, 0xb4, 0x06, 0x98, 0x17, + 0x0e, 0xf3, 0x7f, 0x46, 0x1e, 0x28, 0x15, 0x34, 0x04, 0x43, 0x06, 0x28, + 0x11, 0x10, 0x17, 0x54, 0xff, 0x2a, 0x02, 0x3f, 0x3f, 0x3f, 0x3e, 0x3f, + 0x2a, 0x20, 0x06, 0x35, 0x80, 0x20, 0x05, 0x2a, 0x2a, 0x24, 0x1d, 0xf0, + 0x1a, 0x00, 0x02, 0x00, 0x2d, 0x6d, 0xb7, 0x30, 0xa4, 0x28, 0x19, 0xc8, + 0x88, 0x06, 0x88, 0x17, 0x53, 0x00, 0x69, 0x20, 0x01, 0x72, 0x00, 0x74, + 0xc0, 0x06, 0x6d, 0xb0, 0x10, 0x0e, 0xf0, 0x7f, 0x21, 0x95, 0x14, 0x5c, + 0x79, 0x72, 0x80, 0x06, 0x98, 0x17, 0xdc, 0xc2, 0x74, 0xc7, 0x74, 0xb9, + 0xb8, 0x64, 0xd2, 0x06, 0x78, 0x19, 0x0f, 0x01, 0xff, 0x04, 0x38, 0x20, + 0x01, 0x40, 0x04, 0x60, 0x42, 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, + 0x2b, 0x45, 0x45, 0x45, 0x44, 0x28, 0x45, 0x2b, 0x20, 0x06, 0x3b, 0x20, + 0x05, 0x2b, 0x2b, 0xf9, 0x00, 0x1a, 0xd4, 0x1d, 0x00, 0x00, 0x2e, 0x6d, + 0xa8, 0x8b, 0x28, 0x15, 0xb8, 0x30, 0xf3, 0x20, 0x03, 0xe3, 0x20, 0x05, + 0x06, 0x18, 0x1d, 0x50, 0x45, 0x2f, 0xaf, 0x7a, 0x28, 0x1b, 0x6e, 0x00, + 0x63, 0x00, 0x60, 0x61, 0x20, 0x05, 0x10, 0x15, 0xf0, 0x7f, 0xc3, 0x57, + 0x14, 0x5c, 0x25, 0x10, 0x6d, 0x79, 0x8a, 0x06, 0x78, 0x19, 0xd0, 0xc5, + 0x74, 0xb9, 0x0d, 0xc4, 0xc9, 0x94, 0xc7, 0x06, 0x78, 0x17, 0x0e, 0xf3, + 0x7f, 0x2d, 0x28, 0x13, 0x40, 0x37, 0x28, 0x1b, 0x3d, 0x04, 0x34, 0x04, + 0x36, 0x04, 0x62, 0x30, 0x20, 0x07, 0x10, 0x1d, 0xd4, 0xff, 0x2c, 0x1e, + 0x1e, 0x20, 0x01, 0x2c, 0xa0, 0x20, 0x06, 0x4e, 0x20, 0x05, 0x2c, 0x2c, + 0x44, 0x1c, 0x16, 0x02, 0x1c, 0x00, 0x00, 0x2f, 0x6d, 0xc1, 0x48, 0x0f, + 0xaf, 0xe8, 0x28, 0x1d, 0x06, 0x18, 0x13, 0x3f, 0xff, 0xc7, 0x48, 0x0d, + 0x6b, 0x00, 0x31, 0x30, 0x01, 0x72, 0x20, 0x03, 0x10, 0x16, 0x10, 0x7f, + 0x0c, 0x66, 0x4b, 0x51, 0x20, 0xd2, 0x52, 0x06, 0x78, 0x15, 0x00, 0x00, + 0x3d, 0xcc, 0xa4, 0x1a, 0xd0, 0xac, 0xb9, 0x06, 0x78, 0x15, 0x0f, 0x13, + 0x7f, 0x27, 0x48, 0x0b, 0x3a, 0x2c, 0x04, 0x4b, 0x28, 0x1f, 0x4b, 0x05, + 0xe8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x2d, 0x17, 0x54, 0x17, 0x20, 0x01, + 0x2d, 0x20, 0x06, 0x46, 0x20, 0x05, 0x2d, 0x2d, 0x00, 0xdf, 0x1c, 0xe7, + 0x17, 0x00, 0x00, 0x30, 0x6d, 0x56, 0xbe, 0x28, 0x15, 0xb0, 0x28, 0x15, + 0xc0, 0x28, 0x1b, 0x06, 0x38, 0x19, 0x5a, 0x20, 0x00, 0x6f, 0x2f, 0xab, + 0x67, 0x00, 0x75, 0x00, 0x6c, 0x28, 0x00, 0x64, 0x2f, 0xb1, 0x6b, 0x10, + 0x15, 0xe0, 0x7f, 0x97, 0x5b, 0xe4, 0x01, 0x53, 0x14, 0x5c, 0xbe, 0x8f, + 0x4b, 0x51, 0x06, 0x58, 0x1b, 0x00, 0x85, 0xc8, 0x74, 0xad, 0xe4, 0xb2, + 0x6c, 0xd0, 0xc4, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x17, 0x04, 0x3e, + 0x28, 0x17, 0x33, 0x04, 0x05, 0x43, 0x04, 0x3b, 0x04, 0x34, 0x28, 0x23, + 0x3a, 0x05, 0xe8, 0x1b, 0x8a, 0x10, 0x16, 0xf4, 0xff, 0x2e, 0x51, 0x51, + 0x20, 0x01, 0x2e, 0x20, 0x06, 0x1d, 0x80, 0x20, 0x05, 0x2e, 0x2e, 0x79, + 0x1d, 0x99, 0x16, 0x00, 0x00, 0x00, 0x31, 0x6d, 0xe8, 0x30, 0xba, 0x30, + 0xac, 0x35, 0x30, 0xc8, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x59, 0x28, 0x17, + 0x7a, 0x28, 0x17, 0x10, 0x61, 0x00, 0x74, 0x10, 0x16, 0x40, 0x7f, 0xa6, + 0x7e, 0x79, 0x51, 0x08, 0xa0, 0x52, 0x79, 0x72, 0x06, 0x58, 0x15, 0x00, + 0x00, 0x94, 0x01, 0xc6, 0x88, 0xc9, 0x00, 0xac, 0xb8, 0xd2, 0x06, 0x78, + 0x17, 0xa8, 0x0e, 0xf3, 0x7f, 0x19, 0x28, 0x17, 0x37, 0x28, 0x17, 0x30, + 0x04, 0x42, 0xc5, 0x05, 0xe8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x2f, 0x50, + 0x50, 0x20, 0x01, 0x2f, 0x20, 0x06, 0x40, 0x1f, 0x20, 0x05, 0x2f, 0x2f, + 0x51, 0x1c, 0xbf, 0x18, 0x00, 0x00, 0x00, 0x32, 0x6d, 0xa6, 0x30, 0xb7, + 0x30, 0x10, 0xe3, 0x30, 0xaf, 0x06, 0x88, 0x17, 0x55, 0x00, 0x5f, 0x01, + 0xc0, 0x06, 0x1f, 0xa5, 0x10, 0x0f, 0x90, 0x7f, 0x4c, 0x4e, 0x28, 0x84, + 0x4b, 0x51, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0xb0, 0xc6, 0xe4, 0xc0, + 0x6c, 0x62, 0xd0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x23, 0x04, 0x48, + 0x28, 0x13, 0x3a, 0xc5, 0x06, 0x48, 0x13, 0x10, 0x17, 0x34, 0xff, 0x30, + 0x4d, 0x4d, 0x20, 0x01, 0x30, 0x20, 0x06, 0x40, 0x42, 0x20, 0x05, 0x30, + 0x30, 0x82, 0x1b, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x33, 0x6d, 0xa2, 0x30, + 0xfc, 0x30, 0x40, 0xeb, 0x06, 0x88, 0x15, 0x00, 0x00, 0x41, 0x00, 0x1f, + 0x01, 0x08, 0x72, 0x00, 0x31, 0x01, 0x10, 0x16, 0x70, 0x7f, 0x3f, 0x96, + 0xd2, 0x40, 0x52, 0x06, 0x98, 0x15, 0x00, 0x00, 0x44, 0xc5, 0xac, 0xb9, + 0xc0, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x10, 0x04, 0x33, 0x04, 0x40, + 0x04, 0x60, 0x4b, 0x06, 0x88, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x31, 0x04, + 0x04, 0x04, 0x05, 0x28, 0x04, 0x31, 0x20, 0x06, 0x01, 0x20, 0x05, 0x31, + 0x31, 0x3f, 0x02, 0x1c, 0x9e, 0x1e, 0x00, 0x00, 0x34, 0x28, 0x17, 0xde, + 0x08, 0x30, 0xb7, 0x30, 0xe4, 0x06, 0x88, 0x19, 0x41, 0x00, 0x6d, 0x03, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x79, 0x20, 0x05, 0x10, 0x16, 0x30, 0x7f, + 0x00, 0x3f, 0x96, 0x6c, 0x9a, 0x7f, 0x89, 0x9a, 0x4e, 0x80, 0x06, 0x78, + 0x1b, 0x44, 0xc5, 0xc8, 0xb9, 0xdc, 0xc2, 0x44, 0x60, 0xc5, 0x06, 0x78, + 0x1b, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x3c, 0x04, 0x30, 0x03, 0x04, 0x41, + 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x48, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x01, + 0x32, 0x06, 0x06, 0x06, 0x07, 0x06, 0x32, 0x30, 0x06, 0x80, 0x20, 0x05, + 0x32, 0x32, 0xe8, 0x1c, 0x7b, 0x19, 0x00, 0x20, 0x00, 0x35, 0x28, 0x17, + 0xeb, 0x30, 0xc0, 0x30, 0xcf, 0x20, 0x30, 0xf3, 0x06, 0x68, 0x19, 0x41, + 0x00, 0x72, 0x00, 0x64, 0xa8, 0x28, 0x19, 0x68, 0x28, 0x1d, 0x6e, 0x10, + 0x16, 0x20, 0x7f, 0x3f, 0x96, 0x14, 0x04, 0x5c, 0xbe, 0x8f, 0x55, 0x7f, + 0x06, 0x98, 0x17, 0x74, 0xb9, 0x0c, 0xe4, 0xb2, 0x5c, 0xd5, 0x06, 0x98, + 0x17, 0x0e, 0xd3, 0x7f, 0x10, 0x04, 0x15, 0x40, 0x04, 0x34, 0x28, 0x19, + 0x45, 0x28, 0x1d, 0x3d, 0x06, 0x28, 0x19, 0x8a, 0x10, 0x16, 0xf4, 0xff, + 0x33, 0x09, 0x09, 0x20, 0x01, 0x33, 0x40, 0x06, 0x33, 0x00, 0x33, 0x33, + 0x33, 0x3d, 0x1d, 0x5d, 0x1e, 0x00, 0x20, 0x00, 0x36, 0x48, 0x17, 0xc8, + 0x30, 0xa6, 0x30, 0xa3, 0xc1, 0x06, 0x68, 0x19, 0x38, 0x17, 0x74, 0x00, + 0x76, 0x00, 0x69, 0x06, 0x48, 0x15, 0xc2, 0x10, 0x0f, 0x10, 0x7f, 0x38, + 0x17, 0x79, 0x72, 0x29, 0x6e, 0x06, 0xb8, 0x17, 0xb8, 0x1c, 0xd2, 0x48, + 0xbe, 0x06, 0xb8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x42, 0x04, 0x18, + 0x32, 0x04, 0x38, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x34, 0x0a, + 0x0a, 0xa0, 0x20, 0x01, 0x34, 0x40, 0x06, 0x34, 0x34, 0x34, 0x34, 0x49, + 0x00, 0x1d, 0xbc, 0x1d, 0x00, 0x00, 0x37, 0x6d, 0xd0, 0xa3, 0x48, 0x17, + 0xa5, 0x06, 0x68, 0x15, 0x00, 0x00, 0x42, 0x2f, 0xab, 0x38, 0x19, 0x30, + 0x31, 0x01, 0x06, 0x58, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x5d, 0x14, + 0x5c, 0x20, 0x7e, 0x81, 0x06, 0x78, 0x15, 0x00, 0x00, 0x14, 0xbc, 0x74, + 0x18, 0xb9, 0xf4, 0xd2, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x11, 0x04, + 0x30, 0xb1, 0x48, 0x19, 0x4b, 0x06, 0x68, 0x17, 0x10, 0x16, 0xf4, 0xff, + 0x35, 0x0d, 0x0d, 0x20, 0x01, 0x50, 0x35, 0x20, 0x06, 0x0e, 0x20, 0x05, + 0x35, 0x35, 0x9b, 0x1d, 0x04, 0xfe, 0x16, 0x00, 0x00, 0x38, 0x28, 0x17, + 0xa4, 0x30, 0x60, 0xd6, 0x48, 0x1b, 0x06, 0x98, 0x17, 0x79, 0x00, 0x62, + 0x00, 0x75, 0xc0, 0x4f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0xf4, 0x5d, 0x0a, + 0x4f, 0x03, 0x5e, 0x0c, 0x14, 0x5c, 0x79, 0x72, 0x06, 0x58, 0x1b, 0x28, + 0x17, 0xc7, 0x80, 0x0e, 0xbd, 0x74, 0xb9, 0xb8, 0x06, 0x68, 0x1b, 0x0e, + 0xf3, 0x7f, 0x38, 0x17, 0x39, 0x0c, 0x04, 0x31, 0x04, 0x43, 0x48, 0x1d, + 0x10, 0x1e, 0x14, 0xff, 0x36, 0x0f, 0x54, 0x0f, 0x20, 0x01, 0x36, 0x20, + 0x06, 0x0c, 0x20, 0x05, 0x36, 0x36, 0x00, 0x9f, 0x1c, 0x99, 0x1c, 0x00, + 0x00, 0x39, 0x6d, 0x01, 0xd3, 0x30, 0xec, 0x30, 0xb8, 0x30, 0xaf, 0x06, + 0x68, 0x15, 0x80, 0x3f, 0xaf, 0x69, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x63, + 0xa0, 0x20, 0x07, 0x6b, 0x10, 0x16, 0x20, 0x7f, 0xd4, 0x6b, 0xb1, 0x83, + 0x09, 0x10, 0x54, 0x4b, 0x51, 0x06, 0x58, 0x15, 0x00, 0x00, 0x4c, 0xbe, + 0x03, 0x08, 0xb8, 0xc0, 0xc9, 0x6c, 0xd0, 0x06, 0x58, 0x15, 0x0f, 0x13, + 0x7f, 0x00, 0x11, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x16, 0x34, + 0x04, 0x36, 0x20, 0x09, 0x3a, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, + 0x37, 0x28, 0x10, 0x10, 0x20, 0x01, 0x37, 0x40, 0x06, 0x37, 0x37, 0x37, + 0x00, 0x37, 0x8b, 0x1c, 0x51, 0x15, 0x00, 0x00, 0x3a, 0x80, 0x28, 0x17, + 0xf3, 0x30, 0xae, 0x30, 0xe7, 0x30, 0xeb, 0xc1, 0x06, 0x68, 0x19, 0x38, + 0x17, 0x6e, 0x00, 0x67, 0x00, 0xf6, 0x28, 0x1d, 0x81, 0x10, 0x16, 0x30, + 0x7f, 0xbe, 0x5b, 0x3c, 0x68, 0x14, 0x5c, 0x06, 0x78, 0x15, 0x03, 0x00, + 0x00, 0x59, 0xbe, 0x3c, 0xad, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x82, + 0x38, 0x17, 0x3d, 0x04, 0x33, 0x04, 0x51, 0x28, 0x1d, 0x4c, 0xc5, 0x06, + 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x38, 0x11, 0x11, 0x20, 0x01, 0x38, + 0x40, 0x06, 0x00, 0x38, 0x38, 0x38, 0x38, 0xa6, 0x1b, 0xcc, 0x1c, 0x10, + 0x00, 0x00, 0x3b, 0x28, 0x17, 0xc8, 0x30, 0xea, 0x30, 0x68, 0xb9, 0x06, + 0x68, 0x15, 0x5f, 0xaf, 0x74, 0x2f, 0xb1, 0x69, 0x00, 0x73, 0x80, 0x10, + 0x16, 0x40, 0x7f, 0xd4, 0x6b, 0x79, 0x72, 0x29, 0x52, 0xaf, 0x40, 0x65, + 0x06, 0x78, 0x19, 0x44, 0xbe, 0xc0, 0xd2, 0xac, 0xb9, 0x3a, 0xa4, 0xc2, + 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x42, 0x28, 0x13, 0x38, + 0x31, 0x04, 0x41, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x39, 0x12, + 0x12, 0x20, 0x01, 0x40, 0x39, 0x40, 0x06, 0x39, 0x39, 0x39, 0x39, 0x4e, + 0x1b, 0x00, 0xf3, 0x1d, 0x00, 0x00, 0x3c, 0x6d, 0xdc, 0x30, 0x6a, 0xeb, + 0x06, 0x88, 0x13, 0x5f, 0xaf, 0x6f, 0x2f, 0xa9, 0x75, 0x10, 0x16, 0x80, + 0x7f, 0x5a, 0x18, 0x53, 0x62, 0x53, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xfc, + 0xbc, 0xe8, 0x62, 0xb8, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x11, 0x04, + 0x3e, 0x28, 0x15, 0x43, 0xc5, 0x06, 0x48, 0x13, 0x10, 0x17, 0x34, 0xff, + 0x3a, 0x13, 0x13, 0x20, 0x01, 0x3a, 0x40, 0x06, 0x00, 0x3a, 0x3a, 0x3a, + 0x3a, 0xf7, 0x1c, 0x78, 0x16, 0x04, 0x00, 0x00, 0x3d, 0x6d, 0xd6, 0x28, + 0x17, 0xc9, 0x30, 0x51, 0xa5, 0x06, 0x88, 0x1d, 0x42, 0x28, 0x13, 0x72, + 0x00, 0x64, 0x40, 0x05, 0x80, 0x10, 0x16, 0x30, 0x7f, 0x03, 0x5e, 0x14, + 0x5c, 0x5c, 0x67, 0x14, 0x40, 0x5c, 0x06, 0x78, 0x1b, 0x80, 0xbd, 0x74, + 0xb9, 0x50, 0xb4, 0x34, 0x74, 0xb9, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, + 0x11, 0x28, 0x13, 0x40, 0x04, 0x62, 0x34, 0x40, 0x05, 0x10, 0x1e, 0x34, + 0xff, 0x3b, 0x14, 0x14, 0x20, 0x01, 0x3b, 0x80, 0x40, 0x06, 0x3b, 0x3b, + 0x3b, 0x3b, 0xd2, 0x1a, 0x8a, 0x00, 0x15, 0x00, 0x00, 0x3e, 0x6d, 0xc1, + 0x30, 0xe3, 0x00, 0x30, 0xca, 0x30, 0xc3, 0x30, 0xab, 0x30, 0xec, 0x82, + 0x06, 0x48, 0x19, 0xc7, 0x00, 0x61, 0x00, 0x6e, 0x20, 0x03, 0x6b, 0xa8, + 0x20, 0x01, 0x61, 0x2f, 0xb9, 0x65, 0x10, 0x15, 0xe0, 0x7f, 0x70, 0x60, + 0xb3, 0x04, 0x7e, 0x61, 0x53, 0xb1, 0x83, 0x06, 0x78, 0x17, 0x28, 0xcc, + 0x03, 0x98, 0xb0, 0x7c, 0xce, 0x08, 0xb8, 0x06, 0x78, 0x17, 0x0e, 0xf3, + 0x7f, 0x05, 0x27, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x3a, 0x20, 0x01, + 0x06, 0x30, 0x04, 0x3b, 0x04, 0x35, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, + 0xff, 0x3c, 0x2a, 0x16, 0x16, 0x20, 0x01, 0x3c, 0x20, 0x06, 0x45, 0x20, + 0x05, 0x3c, 0x00, 0x3c, 0x8d, 0x1c, 0xc5, 0x12, 0x00, 0x00, 0x3f, 0x00, + 0x6d, 0xc7, 0x30, 0xe5, 0x30, 0xba, 0x30, 0xb8, 0x20, 0x30, 0xa7, 0x06, + 0x48, 0x15, 0x00, 0x00, 0x44, 0x00, 0xfc, 0x0c, 0x00, 0x7a, 0x00, 0x63, + 0x06, 0x08, 0x0f, 0x10, 0x0f, 0x70, 0x7f, 0xea, 0x8f, 0x08, 0x79, 0x51, + 0x70, 0x67, 0x06, 0x78, 0x15, 0x00, 0x00, 0xa4, 0x06, 0xb4, 0x88, 0xc9, + 0x1c, 0xc8, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x14, 0x00, 0x04, 0x4e, + 0x04, 0x37, 0x04, 0x34, 0x04, 0x36, 0xc5, 0x06, 0x08, 0x11, 0x10, 0x17, + 0x54, 0xff, 0x3d, 0x1b, 0x1b, 0x20, 0x01, 0x3d, 0x20, 0x06, 0x40, 0x1c, + 0x20, 0x05, 0x3d, 0x3d, 0x09, 0x1d, 0x26, 0x16, 0x00, 0x00, 0x00, 0x40, + 0x6d, 0xa8, 0x30, 0xb9, 0x30, 0x11, 0xad, 0x30, 0xb7, 0x28, 0x17, 0xd2, + 0x30, 0xeb, 0x06, 0x28, 0x1b, 0x10, 0x45, 0x00, 0x73, 0x2f, 0xab, 0x69, + 0x00, 0x5f, 0x01, 0x14, 0x65, 0x00, 0x68, 0x20, 0x07, 0x72, 0x10, 0x15, + 0xe0, 0x7f, 0xc3, 0x57, 0x00, 0xaf, 0x65, 0xfa, 0x57, 0x22, 0x8c, 0x0c, + 0x5e, 0x20, 0x14, 0x5c, 0x06, 0x38, 0x1d, 0xd0, 0xc5, 0xa4, 0xc2, 0xa4, + 0x01, 0xd0, 0x70, 0xc1, 0x88, 0xd7, 0x74, 0xb9, 0x06, 0x38, 0x1d, 0x80, + 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x41, 0x04, 0x3a, 0x04, 0x38, 0x2b, 0x04, + 0x48, 0x28, 0x17, 0x45, 0x20, 0x07, 0x40, 0x05, 0xe8, 0x1d, 0x10, 0x16, + 0xf4, 0xff, 0x15, 0x3e, 0x20, 0x20, 0x20, 0x01, 0x3e, 0x20, 0x06, 0x50, + 0x20, 0x05, 0x00, 0x3e, 0x3e, 0x49, 0x1c, 0xb4, 0x15, 0x00, 0x00, 0x05, + 0x41, 0x6d, 0xae, 0x30, 0xec, 0x28, 0x19, 0xf3, 0x06, 0x28, 0x11, 0xa8, + 0x5f, 0xff, 0x47, 0x48, 0x0b, 0x65, 0x28, 0x1d, 0x75, 0x00, 0x6e, 0x81, + 0x10, 0x16, 0x20, 0x7f, 0x09, 0x54, 0xf7, 0x96, 0x7e, 0x67, 0x06, 0x38, + 0x11, 0x81, 0x5f, 0xff, 0x30, 0xae, 0x08, 0xb8, 0x1c, 0xc2, 0x06, 0x38, + 0x11, 0xa8, 0x0f, 0x53, 0x7f, 0x13, 0x48, 0x0b, 0x35, 0x28, 0x1d, 0x43, + 0x04, 0x3d, 0xc0, 0x05, 0xe8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x3f, 0x22, + 0x22, 0x22, 0x22, 0x23, 0x40, 0x3f, 0x20, 0x06, 0x18, 0x22, 0x3f, 0x3f, + 0x3f, 0x3f, 0x01, 0x15, 0x1d, 0x51, 0x1b, 0x00, 0x00, 0x42, 0x28, 0x17, + 0x14, 0xe5, 0x30, 0xdf, 0x20, 0x03, 0xb7, 0x20, 0x07, 0xcf, 0x30, 0x10, + 0xfc, 0x30, 0xcd, 0x05, 0xe8, 0x21, 0x47, 0x00, 0xfc, 0x00, 0x41, 0x6d, + 0x20, 0x03, 0x5f, 0x01, 0x68, 0x00, 0x61, 0x28, 0x19, 0x60, 0x65, 0x06, + 0x08, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0x45, 0x5c, 0x73, 0x7c, 0xc0, 0x04, + 0x4e, 0xc8, 0x54, 0x85, 0x51, 0x06, 0x58, 0x1b, 0xc0, 0xad, 0x03, 0x88, + 0xbb, 0xe4, 0xc0, 0x24, 0xb1, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x04, + 0x13, 0x04, 0x4e, 0x04, 0x3c, 0x20, 0x03, 0x48, 0x04, 0x16, 0x45, 0x04, + 0x30, 0x28, 0x19, 0x35, 0x05, 0xe8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x40, + 0x02, 0x23, 0x23, 0x23, 0x23, 0x24, 0x40, 0x20, 0x06, 0x19, 0x00, 0x23, + 0x40, 0x40, 0x40, 0x40, 0xc5, 0x1c, 0x13, 0x00, 0x1c, 0x00, 0x00, 0x43, + 0x6d, 0xcf, 0x30, 0xc3, 0x03, 0x30, 0xad, 0x30, 0xe3, 0x30, 0xea, 0x05, + 0xe8, 0x0f, 0x7f, 0xff, 0x55, 0x48, 0x28, 0x0d, 0x6b, 0x20, 0x01, 0x61, + 0x2f, 0xb5, 0x69, 0x0e, 0xa0, 0x7f, 0x60, 0xe2, 0x0e, 0xe0, 0x7f, 0x06, + 0x71, 0xff, 0xc8, 0x54, 0x61, 0x53, 0xcc, 0x60, 0x91, 0x06, 0x58, 0x13, + 0x3f, 0xff, 0x58, 0xd5, 0x74, 0xce, 0xac, 0x6a, 0xb9, 0x06, 0x78, 0x15, + 0x0f, 0x11, 0xff, 0x25, 0x28, 0x0d, 0x3a, 0x20, 0x01, 0x4f, 0x0e, 0x04, + 0x40, 0x04, 0x38, 0x05, 0xe8, 0x13, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x70, + 0xff, 0x41, 0x02, 0x24, 0x24, 0x24, 0x24, 0x25, 0x41, 0x20, 0x06, 0x43, + 0x00, 0x24, 0x41, 0x41, 0x41, 0x41, 0xb9, 0x1a, 0x19, 0x00, 0x1f, 0x00, + 0x00, 0x44, 0x6d, 0xa6, 0x30, 0xfc, 0x02, 0x30, 0xc9, 0x30, 0xa5, 0x30, + 0xeb, 0x06, 0x68, 0x17, 0x49, 0x00, 0x00, 0x1f, 0x01, 0x64, 0x00, 0x31, + 0x01, 0x72, 0xc0, 0x06, 0x65, 0x98, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x4f, + 0xea, 0x8f, 0x14, 0x5c, 0x83, 0x06, 0x98, 0x17, 0x74, 0xc7, 0x14, 0xb5, + 0x74, 0x06, 0xa8, 0x17, 0x0e, 0xf3, 0x7f, 0x01, 0x2b, 0x04, 0x33, 0x04, + 0x34, 0x04, 0x4b, 0x28, 0x15, 0xc0, 0x10, 0x16, 0x54, 0x7f, 0x06, 0xf6, + 0xff, 0x42, 0x26, 0x26, 0x26, 0x26, 0x27, 0x40, 0x42, 0x20, 0x06, 0x4a, + 0x26, 0x42, 0x42, 0x42, 0x42, 0x10, 0x62, 0x1c, 0x50, 0x28, 0x17, 0x45, + 0x6d, 0xab, 0x30, 0x00, 0xe9, 0x30, 0xd3, 0x30, 0xe5, 0x30, 0xc3, 0x30, + 0x50, 0xaf, 0x06, 0x48, 0x19, 0x4b, 0x4f, 0xa9, 0x61, 0x00, 0x62, 0x00, + 0x60, 0xfc, 0x2f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x61, 0x53, 0xc9, 0x62, + 0xd4, 0x10, 0x6b, 0x4b, 0x51, 0x06, 0x78, 0x19, 0x74, 0xce, 0x7c, 0xb7, + 0x0c, 0xd4, 0xbd, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1a, + 0x04, 0x40, 0x30, 0x28, 0x13, 0x30, 0x04, 0x31, 0x04, 0x4e, 0x04, 0x60, + 0x3a, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x43, 0x2b, 0x2b, 0x2b, + 0x2a, 0x28, 0x2b, 0x43, 0x20, 0x06, 0x21, 0x20, 0x05, 0x43, 0x43, 0x4c, + 0x02, 0x1d, 0x34, 0x17, 0x00, 0x00, 0x46, 0x28, 0x17, 0xeb, 0x36, 0x30, + 0xb9, 0x06, 0x48, 0x11, 0xb8, 0x17, 0x73, 0x06, 0x7d, 0xae, 0x10, 0x0f, + 0x00, 0x7f, 0x61, 0x06, 0x53, 0x14, 0x5c, 0xaf, 0x65, 0x06, 0x78, 0x15, + 0x38, 0x17, 0x74, 0x1d, 0xb9, 0xa4, 0xc2, 0x06, 0x78, 0x15, 0x0f, 0x13, + 0x7f, 0x58, 0x17, 0x41, 0x06, 0x28, 0x11, 0x80, 0x10, 0x17, 0x54, 0xff, + 0x44, 0x2d, 0x2d, 0x2d, 0x2c, 0x2d, 0x44, 0xa0, 0x20, 0x06, 0x23, 0x20, + 0x05, 0x44, 0x44, 0xe2, 0x1c, 0xa6, 0x08, 0x1e, 0x00, 0x00, 0x47, 0x28, + 0x17, 0xb9, 0x30, 0xbf, 0x0c, 0x30, 0xe2, 0x30, 0xcc, 0x06, 0x68, 0x1b, + 0x3f, 0xaf, 0x73, 0x00, 0x40, 0x74, 0x2f, 0xb5, 0x6d, 0x00, 0x6f, 0x00, + 0x6e, 0x00, 0x40, 0x75, 0x10, 0x15, 0xe0, 0x7f, 0x61, 0x53, 0xaf, 0x65, + 0x54, 0x58, 0x08, 0xab, 0x83, 0xaa, 0x52, 0x06, 0x58, 0x1b, 0x74, 0xce, + 0xa4, 0x01, 0xc2, 0xc0, 0xd0, 0xa8, 0xba, 0x04, 0xb2, 0x06, 0x58, 0x1b, + 0xc4, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x41, 0x04, 0x42, 0x28, 0x1d, 0x3c, + 0x04, 0x06, 0x3e, 0x04, 0x3d, 0x04, 0x43, 0x05, 0xe8, 0x21, 0x10, 0x16, + 0xf4, 0xff, 0x45, 0x02, 0x2e, 0x2e, 0x2e, 0x2d, 0x2e, 0x45, 0x20, 0x06, + 0x24, 0x80, 0x20, 0x05, 0x45, 0x45, 0x6b, 0x1d, 0x03, 0x18, 0x00, 0x03, + 0x00, 0x48, 0x6d, 0xad, 0x30, 0xea, 0x28, 0x19, 0x06, 0x58, 0x13, 0x8e, + 0x5f, 0xaf, 0x69, 0x00, 0x6c, 0x20, 0x03, 0x06, 0x7f, 0xb1, 0x10, 0x0e, + 0xf0, 0x7f, 0xfa, 0x06, 0x57, 0x29, 0x52, 0xaf, 0x65, 0x06, 0x58, 0x13, + 0x3f, 0xff, 0xac, 0x06, 0xd0, 0xac, 0xb9, 0xa4, 0xc2, 0x06, 0x58, 0x13, + 0x0f, 0x33, 0x7f, 0x1a, 0x0b, 0x04, 0x38, 0x04, 0x3b, 0x20, 0x03, 0x41, + 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x01, 0x46, 0x30, 0x30, 0x30, + 0x2f, 0x30, 0x46, 0x20, 0x06, 0x40, 0x26, 0x20, 0x05, 0x46, 0x46, 0x1b, + 0x1a, 0x64, 0x1a, 0x00, 0x00, 0x00, 0x49, 0x6d, 0xaf, 0x30, 0xeb, 0x30, + 0x01, 0xaf, 0x30, 0xe9, 0x30, 0xfc, 0x30, 0xec, 0x28, 0x21, 0x80, 0x06, + 0x18, 0x1f, 0x4b, 0x00, 0x31, 0x01, 0x72, 0x00, 0x6b, 0x83, 0x28, 0x1b, + 0x61, 0x00, 0x72, 0x00, 0x65, 0x48, 0x23, 0x10, 0x15, 0xb0, 0x7f, 0x00, + 0xef, 0x67, 0x4b, 0x51, 0xc9, 0x62, 0xf7, 0x96, 0x20, 0x29, 0x52, 0x06, + 0x58, 0x1b, 0xa4, 0xd0, 0x74, 0xb9, 0x74, 0x01, 0xd0, 0x7c, 0xb7, 0x10, + 0xb8, 0xac, 0xb9, 0x06, 0x38, 0x1d, 0x80, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, + 0x4b, 0x04, 0x40, 0x04, 0x3a, 0xac, 0x28, 0x1b, 0x30, 0x20, 0x07, 0x35, + 0x48, 0x23, 0x10, 0x1d, 0xb4, 0xff, 0x47, 0x32, 0x05, 0x32, 0x32, 0x31, + 0x32, 0x47, 0x20, 0x06, 0x29, 0x20, 0x05, 0x00, 0x47, 0x47, 0xad, 0x1d, + 0x5a, 0x13, 0x00, 0x00, 0x41, 0x4a, 0x48, 0x17, 0xb7, 0x30, 0xa7, 0x30, + 0xd2, 0x28, 0x1f, 0xc1, 0x06, 0x18, 0x15, 0x78, 0x17, 0x5f, 0x01, 0x65, + 0x00, 0x68, 0x2f, 0xb9, 0x40, 0x72, 0x10, 0x16, 0x10, 0x7f, 0x51, 0x14, + 0x5c, 0x22, 0x8c, 0x0c, 0x10, 0x5e, 0x14, 0x5c, 0x06, 0x98, 0x17, 0x70, + 0xc1, 0x88, 0xd7, 0x75, 0x74, 0x06, 0x48, 0x15, 0x0f, 0x13, 0x7f, 0x58, + 0x17, 0x48, 0x28, 0x11, 0x45, 0x28, 0x11, 0x60, 0x40, 0x05, 0xc8, 0x13, + 0x10, 0x17, 0x34, 0xff, 0x48, 0x33, 0x33, 0x33, 0x32, 0x28, 0x33, 0x48, + 0x20, 0x06, 0x2a, 0x20, 0x05, 0x48, 0x48, 0xd7, 0x10, 0x1b, 0x4b, 0x18, + 0x2f, 0xad, 0x6d, 0xe0, 0x30, 0xfc, 0x30, 0x30, 0xe9, 0x06, 0x48, 0x11, + 0x5f, 0xff, 0x4d, 0x00, 0x75, 0x00, 0x30, 0x1f, 0x01, 0x3f, 0xad, 0x10, + 0x16, 0x50, 0x7f, 0x46, 0x7a, 0xc9, 0x62, 0xc3, 0x06, 0x58, 0x11, 0x5f, + 0xff, 0x3c, 0xbb, 0x7c, 0xb7, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x00, + 0x1c, 0x04, 0x43, 0x04, 0x33, 0x04, 0x3b, 0x04, 0x60, 0x30, 0x06, 0x08, + 0x11, 0x10, 0x17, 0x54, 0xff, 0x49, 0x3b, 0x3b, 0x3b, 0x3a, 0x28, 0x3b, + 0x49, 0x20, 0x06, 0x31, 0x20, 0x05, 0x49, 0x49, 0x76, 0x02, 0x1a, 0x2b, + 0x14, 0x00, 0x00, 0x4c, 0x28, 0x17, 0xb7, 0x26, 0x30, 0xe5, 0x06, 0xe8, + 0x17, 0x5f, 0x01, 0x06, 0x95, 0x97, 0x10, 0x0e, 0xf0, 0x7f, 0x46, 0x10, + 0x7a, 0xc0, 0x4e, 0x06, 0xb8, 0x17, 0x34, 0xbb, 0x88, 0xc2, 0xec, 0x06, + 0xf8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x48, 0x06, 0x68, 0x13, 0x10, + 0x17, 0x34, 0xff, 0x4a, 0x3c, 0x05, 0x3c, 0x3c, 0x3b, 0x3c, 0x4a, 0x20, + 0x06, 0x32, 0x20, 0x05, 0x02, 0x4a, 0x4a, 0x8e, 0x1b, 0x82, 0x1d, 0x2f, + 0xad, 0x6d, 0x10, 0xcd, 0x30, 0xf4, 0x28, 0x19, 0xa7, 0x30, 0xd2, 0x30, + 0x41, 0xeb, 0x06, 0x48, 0x1d, 0x4e, 0x00, 0x65, 0x00, 0x76, 0x28, 0x19, + 0x01, 0x65, 0x00, 0x68, 0x00, 0x69, 0x00, 0x72, 0x10, 0x16, 0x00, 0x7f, + 0x00, 0x85, 0x51, 0x2b, 0x59, 0x22, 0x8c, 0x0c, 0x5e, 0x20, 0x14, 0x5c, + 0x06, 0x58, 0x1d, 0x24, 0xb1, 0x0c, 0xbe, 0x70, 0x06, 0xc1, 0x88, 0xd7, + 0x74, 0xb9, 0x06, 0x58, 0x1d, 0x0e, 0xf3, 0x7f, 0x1d, 0x08, 0x04, 0x35, + 0x04, 0x32, 0x28, 0x19, 0x35, 0x04, 0x45, 0x0c, 0x04, 0x38, 0x04, 0x40, + 0x06, 0x08, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x4b, 0x3d, 0x05, 0x3d, 0x3d, + 0x3c, 0x3d, 0x4b, 0x20, 0x06, 0x33, 0x20, 0x05, 0x02, 0x4b, 0x4b, 0x77, + 0x1b, 0xaf, 0x18, 0x27, 0x95, 0x6d, 0x06, 0xcb, 0x30, 0xfc, 0x30, 0xc7, + 0x06, 0x48, 0x11, 0x78, 0x17, 0x69, 0x0c, 0x00, 0x1f, 0x01, 0x64, 0x28, + 0x1d, 0x10, 0x16, 0x50, 0x7f, 0x3c, 0x5c, 0x30, 0xe3, 0x4e, 0x06, 0x58, + 0x11, 0x5f, 0xff, 0xc8, 0xb2, 0x70, 0xb3, 0xd1, 0x06, 0x58, 0x11, 0x0f, + 0x53, 0x7f, 0x1d, 0x28, 0x0d, 0x33, 0x04, 0x34, 0x28, 0x1d, 0x80, 0x10, + 0x1e, 0x54, 0xff, 0x4c, 0x3e, 0x3e, 0x3e, 0x3d, 0x3e, 0x4c, 0xa0, 0x20, + 0x06, 0x34, 0x20, 0x05, 0x4c, 0x4c, 0xff, 0x1a, 0xa9, 0x82, 0x28, 0x17, + 0x4f, 0x6d, 0xea, 0x30, 0xbc, 0x06, 0xa8, 0x15, 0x00, 0x2c, 0x00, 0x52, + 0x2f, 0xa5, 0x7a, 0x06, 0x88, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0xcc, 0x91, + 0x21, 0xfd, 0x6c, 0x06, 0xb8, 0x17, 0xac, 0xb9, 0x1c, 0xc8, 0x06, 0xb8, + 0x17, 0xac, 0x0e, 0xf3, 0x7f, 0x20, 0x28, 0x17, 0x37, 0x06, 0x88, 0x15, + 0x10, 0x17, 0x14, 0xff, 0x4d, 0x41, 0x05, 0x41, 0x41, 0x40, 0x41, 0x4d, + 0x20, 0x06, 0x37, 0x20, 0x05, 0x00, 0x4d, 0x4d, 0x2a, 0x1d, 0xcf, 0x1c, + 0x00, 0x00, 0x01, 0x50, 0x6d, 0xb7, 0x30, 0xce, 0x30, 0xd7, 0x06, 0xa8, + 0x19, 0x41, 0x53, 0x2f, 0xaf, 0x6e, 0x00, 0x6f, 0x00, 0x70, 0x10, 0x07, + 0x00, 0x7f, 0xc0, 0x06, 0x5f, 0xb1, 0x06, 0xf1, 0xff, 0x21, 0x95, 0xfa, + 0x8b, 0x6e, 0x66, 0x81, 0x06, 0x98, 0x19, 0xdc, 0xc2, 0x78, 0xb1, 0x04, + 0xd5, 0x06, 0x98, 0x19, 0xa0, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x17, 0x3d, + 0x04, 0x3e, 0x04, 0x3f, 0xe0, 0x06, 0x68, 0x19, 0x10, 0x07, 0x94, 0xff, + 0x0e, 0x56, 0xff, 0x4e, 0x46, 0x46, 0x46, 0x45, 0x28, 0x46, 0x4e, 0x20, + 0x06, 0x3c, 0x20, 0x05, 0x4e, 0x4e, 0xe3, 0x02, 0x1d, 0xfe, 0x18, 0x00, + 0x00, 0x51, 0x28, 0x17, 0xe5, 0x02, 0x30, 0xeb, 0x30, 0xca, 0x30, 0xaf, + 0x06, 0x68, 0x1b, 0x5e, 0x08, 0x01, 0x31, 0x01, 0x72, 0x28, 0x19, 0x61, + 0x00, 0x6b, 0xc0, 0x06, 0x4f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x21, 0x95, + 0x14, 0x5c, 0xb3, 0x7e, 0x20, 0x4b, 0x51, 0x06, 0x78, 0x19, 0xdc, 0xc2, + 0x74, 0xb9, 0x98, 0x1a, 0xb0, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0x0e, 0xf3, + 0x7f, 0x28, 0x28, 0x17, 0x40, 0x8c, 0x28, 0x19, 0x30, 0x04, 0x3a, 0x06, + 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x4f, 0x47, 0x05, 0x47, 0x47, 0x46, + 0x47, 0x4f, 0x20, 0x06, 0x49, 0x20, 0x05, 0x00, 0x4f, 0x4f, 0xad, 0x1a, + 0x31, 0x1e, 0x00, 0x00, 0x00, 0x52, 0x6d, 0xc8, 0x30, 0xa5, 0x30, 0xf3, + 0x30, 0x04, 0xb8, 0x30, 0xa7, 0x30, 0xea, 0x06, 0x48, 0x19, 0x54, 0x00, + 0x56, 0x75, 0x2f, 0xaf, 0x63, 0x2e, 0xad, 0x6c, 0x2f, 0xb9, 0x10, 0x16, + 0x10, 0x7f, 0x1a, 0x04, 0x90, 0x70, 0x67, 0x29, 0x52, 0x06, 0x78, 0x15, + 0x00, 0x00, 0x03, 0x30, 0xd2, 0x24, 0xc8, 0xac, 0xb9, 0x06, 0x78, 0x15, + 0x0f, 0x13, 0x7f, 0x10, 0x22, 0x04, 0x43, 0x28, 0x15, 0x34, 0x04, 0x36, + 0x04, 0x18, 0x35, 0x04, 0x3b, 0x28, 0x23, 0x10, 0x1d, 0xf4, 0xff, 0x50, + 0x4c, 0x4c, 0xa8, 0x20, 0x01, 0x50, 0x20, 0x06, 0x41, 0x20, 0x05, 0x50, + 0x50, 0xd0, 0x00, 0x1b, 0x1f, 0x1c, 0x00, 0x00, 0x53, 0x6d, 0xe4, 0x0d, + 0x30, 0xed, 0x30, 0xef, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x59, 0x2f, 0xa9, + 0x06, 0x6c, 0x00, 0x6f, 0x00, 0x76, 0x2f, 0xb1, 0x10, 0x16, 0x30, 0x7f, + 0x9a, 0x04, 0x4e, 0x57, 0x7f, 0xd5, 0x6c, 0x06, 0x98, 0x17, 0x84, 0xc5, + 0x0d, 0x5c, 0xb8, 0x14, 0xbc, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x2f, + 0x28, 0x0d, 0x06, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x06, 0x08, 0x11, 0x10, + 0x17, 0x54, 0xff, 0x51, 0x2a, 0x4f, 0x4f, 0x20, 0x01, 0x51, 0x20, 0x06, + 0x51, 0x20, 0x05, 0x51, 0x04, 0x51, 0xe8, 0x1c, 0xcf, 0x14, 0x00, 0x3f, + 0xff, 0x01, 0x07, 0x06, 0x07, 0x07, 0x08, 0x07, 0x01, 0x30, 0x06, 0x20, + 0x05, 0x01, 0x00, 0x01, 0x02, 0x28, 0x28, 0x28, 0x28, 0x21, 0x02, 0x80, + 0x20, 0x06, 0x3d, 0x28, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x29, 0x29, + 0x29, 0x48, 0x29, 0x03, 0x20, 0x06, 0x1e, 0x82, 0x20, 0x05, 0x03, 0x03, + 0x04, 0x15, 0x15, 0x20, 0x01, 0x04, 0x82, 0x40, 0x06, 0x04, 0x04, 0x04, + 0x04, 0x05, 0x30, 0x33, 0x01, 0x60, 0x05, 0x20, 0x06, 0x30, 0x05, 0x05, + 0x05, 0x06, 0x21, 0x21, 0x08, 0x21, 0x21, 0x22, 0x06, 0x20, 0x06, 0x17, + 0x21, 0x06, 0x00, 0x06, 0x06, 0x06, 0x07, 0x35, 0x35, 0x35, 0x34, 0x2c, + 0x35, 0x07, 0x20, 0x06, 0x28, 0x20, 0x05, 0x20, 0x6b, 0x08, 0x08, 0x31, + 0x08, 0x01, 0x30, 0x04, 0x60, 0x03, 0x09, 0x1a, 0x1a, 0x20, 0x01, 0x50, + 0x09, 0x20, 0x06, 0x1b, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x3a, 0x05, 0x3a, + 0x3a, 0x39, 0x3a, 0x0a, 0x20, 0x06, 0x30, 0x20, 0x05, 0x00, 0x0a, 0x0a, + 0x0b, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x50, 0x0b, 0x20, 0x06, 0x20, 0x20, + 0x05, 0x0b, 0x0b, 0x0c, 0x44, 0x05, 0x44, 0x44, 0x43, 0x44, 0x0c, 0x20, + 0x06, 0x48, 0x20, 0x05, 0x00, 0x0c, 0x0c, 0x0d, 0x37, 0x37, 0x37, 0x36, + 0x37, 0x50, 0x0d, 0x20, 0x06, 0x2d, 0x20, 0x05, 0x0d, 0x0d, 0x0e, 0x1f, + 0x54, 0x1f, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x4f, 0x20, 0x05, 0x0e, 0x0e, + 0x01, 0x0f, 0x43, 0x43, 0x43, 0x42, 0x43, 0x0f, 0x20, 0x06, 0x41, 0x39, + 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x4e, 0x4e, 0x20, 0x01, 0x50, 0x10, 0x20, + 0x06, 0x16, 0x20, 0x05, 0x10, 0x10, 0x11, 0x2a, 0x05, 0x2a, 0x2a, 0x29, + 0x2a, 0x11, 0x20, 0x06, 0x25, 0x20, 0x05, 0x05, 0x11, 0x11, 0x12, 0x19, + 0x19, 0x20, 0x01, 0x12, 0x20, 0x06, 0x44, 0x1a, 0x20, 0x05, 0x12, 0x12, + 0x13, 0x30, 0x44, 0x0e, 0x13, 0xa0, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x13, + 0x13, 0x14, 0x1d, 0x1d, 0xa8, 0x20, 0x01, 0x14, 0x20, 0x06, 0x4d, 0x20, + 0x05, 0x14, 0x14, 0x15, 0x02, 0x42, 0x42, 0x42, 0x41, 0x42, 0x15, 0x20, + 0x06, 0x38, 0x80, 0x20, 0x05, 0x15, 0x15, 0x16, 0x34, 0x34, 0x34, 0x33, + 0x28, 0x34, 0x16, 0x20, 0x06, 0x27, 0x20, 0x05, 0x16, 0x16, 0x17, 0x02, + 0x48, 0x48, 0x48, 0x47, 0x48, 0x17, 0x20, 0x06, 0x3a, 0x80, 0x20, 0x05, + 0x17, 0x17, 0x18, 0x38, 0x38, 0x38, 0x37, 0x28, 0x38, 0x18, 0x20, 0x06, + 0x2e, 0x20, 0x05, 0x18, 0x18, 0x19, 0x2b, 0x4b, 0x4b, 0x20, 0x01, 0x19, + 0x20, 0x06, 0x40, 0x20, 0x05, 0x20, 0x75, 0x97, 0x30, 0xd4, 0x0c, 0x1a, + 0x20, 0x06, 0x0d, 0x20, 0x05, 0x21, 0x15, 0x31, 0x83, 0x30, 0x02, 0x1b, + 0x20, 0x06, 0x30, 0x05, 0x1b, 0x1b, 0x1c, 0x49, 0x54, 0x49, 0x20, 0x01, + 0x1c, 0x20, 0x06, 0x3e, 0x20, 0x05, 0x1c, 0x1c, 0x01, 0x1d, 0x31, 0x31, + 0x31, 0x30, 0x31, 0x1d, 0x20, 0x06, 0x40, 0x2b, 0x20, 0x05, 0x1d, 0x1d, + 0x1e, 0x40, 0x40, 0x40, 0x14, 0x3f, 0x40, 0x1e, 0x20, 0x06, 0x36, 0x20, + 0x05, 0x1e, 0x1e, 0x01, 0x1f, 0x36, 0x36, 0x36, 0x35, 0x36, 0x1f, 0x20, + 0x06, 0x44, 0x2c, 0x20, 0x05, 0x1f, 0x1f, 0x20, 0x30, 0x74, 0x18, 0x20, + 0xa0, 0x20, 0x06, 0x47, 0x20, 0x05, 0x20, 0x20, 0x21, 0x27, 0x27, 0x09, + 0x27, 0x27, 0x28, 0x21, 0x20, 0x06, 0x4b, 0x27, 0x41, 0xba, 0x94, 0x31, + 0x64, 0x0b, 0x22, 0x20, 0x06, 0x04, 0x20, 0x05, 0x22, 0x22, 0x01, 0x23, + 0x25, 0x25, 0x25, 0x25, 0x26, 0x23, 0x20, 0x06, 0x00, 0x44, 0x25, 0x23, + 0x23, 0x23, 0x23, 0x24, 0x39, 0x05, 0x39, 0x39, 0x38, 0x39, 0x24, 0x20, + 0x06, 0x2f, 0x20, 0x05, 0x13, 0x24, 0x24, 0x25, 0x31, 0xf3, 0x05, 0x25, + 0x30, 0x06, 0x20, 0x05, 0xca, 0x20, 0x2a, 0x32, 0x23, 0x03, 0x26, 0x20, + 0x06, 0x0b, 0x20, 0x05, 0x26, 0x0a, 0x26, 0x27, 0x4a, 0x4a, 0x20, 0x01, + 0x27, 0x20, 0x06, 0x3f, 0xe5, 0x20, 0x05, 0x20, 0x6a, 0x30, 0xb4, 0x1c, + 0x28, 0x20, 0x06, 0x4c, 0x20, 0x05, 0x00, 0x28, 0x28, 0x29, 0x2c, 0x2c, + 0x2c, 0x2b, 0x2c, 0x50, 0x29, 0x20, 0x06, 0x22, 0x20, 0x05, 0x29, 0x29, + 0x2a, 0x3f, 0x05, 0x3f, 0x3f, 0x3e, 0x3f, 0x2a, 0x20, 0x06, 0x35, 0x20, + 0x05, 0x00, 0x2a, 0x2a, 0x2b, 0x45, 0x45, 0x45, 0x44, 0x45, 0x51, 0x2b, + 0x20, 0x06, 0x3b, 0x20, 0x05, 0x2b, 0x2b, 0x2c, 0x30, 0xd4, 0x28, 0x1e, + 0x2c, 0x20, 0x06, 0x4e, 0x20, 0x05, 0x2c, 0x2c, 0x2d, 0x94, 0x31, 0x54, + 0x17, 0x2d, 0x20, 0x06, 0x46, 0x20, 0x05, 0x2d, 0x2d, 0x4a, 0x2e, 0x32, + 0xec, 0x51, 0x2e, 0x20, 0x06, 0x1d, 0x20, 0x05, 0x2e, 0x25, 0x2e, 0x2f, + 0x3b, 0x14, 0x50, 0x2f, 0x20, 0x06, 0x1f, 0x20, 0x05, 0x05, 0x2f, 0x2f, + 0x30, 0x4d, 0x4d, 0x20, 0x01, 0x30, 0x20, 0x06, 0x44, 0x42, 0x20, 0x05, + 0x30, 0x30, 0x31, 0x32, 0xc3, 0x04, 0x31, 0xa2, 0x20, 0x06, 0x01, 0x20, + 0x05, 0x31, 0x31, 0x32, 0x32, 0xb3, 0x06, 0x62, 0x32, 0x30, 0x06, 0x20, + 0x05, 0x32, 0x32, 0x33, 0x32, 0x94, 0x09, 0x41, 0x33, 0x40, 0x06, 0x33, + 0x33, 0x33, 0x33, 0x34, 0x32, 0x94, 0x32, 0x0a, 0x34, 0x40, 0x06, 0x21, + 0xea, 0x34, 0x35, 0x32, 0x74, 0x0d, 0x51, 0x35, 0x20, 0x06, 0x0e, 0x20, + 0x05, 0x35, 0x35, 0x36, 0x32, 0x64, 0x28, 0x0f, 0x36, 0x20, 0x06, 0x0c, + 0x20, 0x05, 0x36, 0x36, 0x37, 0x99, 0x32, 0x64, 0x10, 0x37, 0x40, 0x06, + 0x22, 0xaa, 0x37, 0x38, 0x32, 0x64, 0x32, 0x11, 0x38, 0x40, 0x06, 0x22, + 0x0a, 0x38, 0x39, 0x32, 0x64, 0x12, 0x64, 0x39, 0x40, 0x06, 0x21, 0x5a, + 0x39, 0x3a, 0x32, 0x64, 0x13, 0x3a, 0xc9, 0x40, 0x06, 0x23, 0x0a, 0x3a, + 0x3b, 0x32, 0x64, 0x14, 0x3b, 0x40, 0x06, 0x04, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3c, 0x32, 0x54, 0x16, 0x3c, 0xa2, 0x20, 0x06, 0x45, 0x20, 0x05, 0x3c, + 0x3c, 0x3d, 0x32, 0x14, 0x1b, 0x51, 0x3d, 0x20, 0x06, 0x1c, 0x20, 0x05, + 0x3d, 0x3d, 0x3e, 0x31, 0xd4, 0x28, 0x20, 0x3e, 0x20, 0x06, 0x50, 0x20, + 0x05, 0x3e, 0x3e, 0x3f, 0xa4, 0x41, 0xc4, 0x3f, 0x20, 0x06, 0x18, 0x22, + 0x21, 0x5a, 0x3f, 0x40, 0xa4, 0x41, 0xc4, 0x40, 0x20, 0x06, 0x19, 0x23, + 0x22, 0x2a, 0x40, 0x41, 0xa0, 0x41, 0xc4, 0x41, 0x20, 0x06, 0x43, 0x24, + 0x41, 0x41, 0x41, 0x29, 0x41, 0x42, 0x41, 0xb4, 0x42, 0x20, 0x06, 0x4a, + 0x26, 0x22, 0xda, 0x22, 0x42, 0x43, 0x21, 0x74, 0x2a, 0x2b, 0x43, 0x20, + 0x06, 0x21, 0x88, 0x20, 0x05, 0x43, 0x43, 0x44, 0x21, 0x64, 0x2c, 0x2d, + 0x44, 0xa2, 0x20, 0x06, 0x23, 0x20, 0x05, 0x44, 0x44, 0x45, 0x21, 0x64, + 0x2d, 0x28, 0x2e, 0x45, 0x20, 0x06, 0x24, 0x20, 0x05, 0x45, 0x45, 0x46, + 0x8a, 0x21, 0x54, 0x2f, 0x30, 0x46, 0x20, 0x06, 0x26, 0x20, 0x05, 0x46, + 0x22, 0x46, 0x47, 0x21, 0x44, 0x31, 0x32, 0x47, 0x20, 0x06, 0x29, 0x88, + 0x20, 0x05, 0x47, 0x47, 0x48, 0x21, 0x44, 0x32, 0x33, 0x48, 0xa2, 0x20, + 0x06, 0x2a, 0x20, 0x05, 0x48, 0x48, 0x49, 0x20, 0xd4, 0x3a, 0x28, 0x3b, + 0x49, 0x20, 0x06, 0x31, 0x20, 0x05, 0x49, 0x49, 0x4a, 0x8a, 0x20, 0xd4, + 0x3b, 0x3c, 0x4a, 0x20, 0x06, 0x32, 0x20, 0x05, 0x4a, 0x22, 0x4a, 0x4b, + 0x20, 0xd4, 0x3c, 0x3d, 0x4b, 0x20, 0x06, 0x33, 0x88, 0x20, 0x05, 0x4b, + 0x4b, 0x4c, 0x20, 0xd4, 0x3d, 0x3e, 0x4c, 0xa2, 0x20, 0x06, 0x34, 0x20, + 0x05, 0x4c, 0x4c, 0x4d, 0x20, 0xb4, 0x40, 0x28, 0x41, 0x4d, 0x20, 0x06, + 0x37, 0x20, 0x05, 0x4d, 0x4d, 0x4e, 0x8a, 0x20, 0x74, 0x45, 0x46, 0x4e, + 0x20, 0x06, 0x3c, 0x20, 0x05, 0x4e, 0x22, 0x4e, 0x4f, 0x20, 0x74, 0x46, + 0x47, 0x4f, 0x20, 0x06, 0x49, 0x9c, 0x20, 0x05, 0x4f, 0x4f, 0xfd, 0x2f, + 0xf5, 0x27, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xac, 0x71, 0x00, 0x11, 0x04, 0x00, 0x00, 0x30, 0x01, 0x6e, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xa0, 0x24, 0xeb, 0xff, 0x00, 0x00, 0x00, 0x02, 0x6e, 0xa4, 0x30, + 0xf3, 0x30, 0xb0, 0x24, 0x30, 0xe9, 0x20, 0x05, 0xc9, 0x30, 0x06, 0x38, + 0x21, 0x45, 0x00, 0x01, 0x6e, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x61, 0x20, + 0x07, 0x51, 0x64, 0x06, 0x28, 0xa2, 0x41, 0x60, 0x7f, 0x65, 0x00, 0x74, + 0x20, 0x03, 0x54, 0x72, 0x20, 0x01, 0x65, 0x0d, 0xc0, 0xff, 0x49, 0x41, + 0x7f, 0x68, 0x00, 0x6e, 0x69, 0x21, 0x83, 0x71, 0x01, 0x61, 0x06, 0x00, + 0x7f, 0x31, 0xff, 0x06, 0x30, 0x7d, 0x00, 0x01, 0x00, 0xf1, 0x82, 0x3c, + 0x68, 0x70, 0x51, 0x06, 0x9b, 0x1b, 0x00, 0x89, 0xc7, 0x00, 0xae, 0x9c, + 0xb7, 0xdc, 0xb4, 0xd8, 0x06, 0x7b, 0x9d, 0x53, 0x7f, 0x65, 0x06, 0x83, + 0x81, 0x06, 0xf1, 0xff, 0x10, 0x04, 0x3d, 0x00, 0x04, 0x33, 0x04, 0x3b, + 0x04, 0x38, 0x04, 0x4f, 0xe0, 0x6d, 0x2a, 0x0d, 0xd4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x02, 0x64, 0x03, 0x30, 0x04, 0x30, + 0x09, 0x01, 0x01, 0x58, 0x17, 0x04, 0x6e, 0x01, 0xb9, 0x30, 0xb3, 0x30, + 0xc3, 0x30, 0xc8, 0x06, 0x88, 0x19, 0x06, 0x53, 0x00, 0x63, 0x00, 0x6f, + 0x27, 0x93, 0x06, 0x78, 0x19, 0xc9, 0xbb, 0x40, 0x7f, 0x73, 0x20, 0x01, + 0x05, 0xd8, 0x0f, 0xb0, 0xff, 0x68, 0x41, 0x01, 0x06, 0x51, 0x03, 0xba, + 0x51, 0x7f, 0x7a, 0x28, 0x17, 0x05, 0xd7, 0x8f, 0x9a, 0x17, 0x73, 0x42, + 0x01, 0x63, 0xa0, 0x06, 0x60, 0x81, 0xcf, 0x06, 0xe8, 0x17, 0xa4, 0xc2, + 0x54, 0xcf, 0xc0, 0x7a, 0xd2, 0x06, 0x98, 0x19, 0x92, 0x7f, 0x06, 0x5b, + 0x9b, 0x51, 0xff, 0xf3, 0x06, 0x81, 0xff, 0x28, 0x0a, 0x04, 0x3e, 0x04, + 0x42, 0x28, 0x17, 0x30, 0x28, 0x1f, 0x34, 0xe0, 0x06, 0x28, 0x1d, 0x06, + 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x03, 0x02, 0x03, 0x04, 0x20, + 0x01, 0x02, 0x28, 0x1a, 0x04, 0x03, 0x02, 0x02, 0x02, 0x00, 0x02, 0xca, + 0x27, 0xb9, 0xfd, 0x00, 0x00, 0x05, 0x00, 0x6e, 0xa6, 0x30, 0xa7, 0x30, + 0xfc, 0x30, 0xeb, 0x36, 0x30, 0xba, 0x06, 0x28, 0x13, 0x3f, 0xff, 0x57, + 0x2f, 0x29, 0x3f, 0xad, 0x73, 0xaa, 0x06, 0x6d, 0xb2, 0x50, 0x2f, 0xa9, + 0x79, 0x28, 0x17, 0x20, 0x2f, 0xad, 0x65, 0xbf, 0x20, 0x05, 0x47, 0x40, + 0x8f, 0x05, 0x90, 0x91, 0x06, 0xf0, 0xff, 0x05, 0xf0, 0xef, 0x00, 0x50, + 0x7f, 0x06, 0x91, 0xff, 0x02, 0x01, 0x5a, 0x14, 0x5c, 0xeb, 0x58, 0x06, + 0x98, 0x17, 0xe8, 0x06, 0xc6, 0x7c, 0xc7, 0x88, 0xc9, 0x06, 0x98, 0x97, + 0x07, 0x33, 0x7f, 0xed, 0xc4, 0x00, 0x03, 0x7f, 0x05, 0x94, 0x0f, 0x23, + 0x04, 0x4d, 0x28, 0x15, 0x4c, 0x04, 0x71, 0x41, 0x05, 0xe8, 0x0f, 0x07, + 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x04, 0x04, 0x28, 0x16, 0x40, + 0x03, 0x20, 0x06, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x10, 0x9b, 0x24, + 0xbe, 0x28, 0x17, 0x06, 0x6e, 0x17, 0x53, 0x10, 0xa2, 0x30, 0xa4, 0x28, + 0x17, 0xe9, 0x30, 0xf3, 0x30, 0x55, 0xc9, 0x06, 0x28, 0x1b, 0x4e, 0x2f, + 0xad, 0x72, 0x2f, 0x2d, 0x68, 0x2f, 0xaf, 0x45, 0x72, 0x2f, 0x2d, 0x20, + 0x00, 0x49, 0x20, 0x0f, 0x65, 0x05, 0x8f, 0x3b, 0xe3, 0x30, 0x6d, 0x7f, + 0xa7, 0x38, 0x17, 0x64, 0x00, 0x75, 0x28, 0x23, 0x50, 0x95, 0xdd, 0x05, + 0x3f, 0xb9, 0x70, 0x69, 0x69, 0xa0, 0x87, 0x05, 0xbf, 0xb8, 0xb0, 0xff, + 0x61, 0x69, 0x1d, 0x6c, 0x6c, 0x05, 0xa1, 0x01, 0x00, 0xd0, 0x7f, 0x74, + 0x2a, 0x31, 0x04, 0xdf, 0xcb, 0x17, 0x53, 0x02, 0x31, 0x72, 0x14, 0x5c, + 0x70, 0x51, 0x06, 0x78, 0x19, 0x81, 0x00, 0xbd, 0x44, 0xc5, 0x7c, 0xc7, + 0x9c, 0xb7, 0xdc, 0x77, 0xb4, 0x06, 0x5b, 0x97, 0x33, 0x7f, 0x52, 0xeb, + 0x2d, 0x23, 0x79, 0x33, 0x83, 0x05, 0xde, 0xb9, 0xa0, 0x00, 0x12, 0x7f, + 0x6f, 0x05, 0xa1, 0xfd, 0x00, 0x00, 0x21, 0x04, 0x35, 0x20, 0x04, 0x32, + 0x20, 0x03, 0x40, 0x04, 0x3d, 0x04, 0x30, 0x02, 0x04, 0x4f, 0x04, 0x20, + 0x00, 0x18, 0x20, 0x0b, 0x3b, 0x83, 0x20, 0x0b, 0x3d, 0x04, 0x34, 0x04, + 0x38, 0x20, 0x11, 0x0c, 0xd4, 0xff, 0x86, 0x10, 0x0e, 0xf0, 0x7f, 0x04, + 0x02, 0x03, 0x02, 0x38, 0x1b, 0x20, 0x06, 0x02, 0x81, 0x28, 0x22, 0x04, + 0xd1, 0x26, 0xcd, 0xfb, 0x09, 0x4f, 0xff, 0x16, 0x07, 0x6e, 0xed, 0x48, + 0x13, 0xf3, 0x06, 0x28, 0x15, 0x5f, 0xff, 0x4c, 0xfe, 0x28, 0x1b, 0x38, + 0x03, 0x30, 0x05, 0x06, 0xb0, 0x7f, 0x38, 0x8f, 0x06, 0x3f, 0xb7, 0x07, + 0x90, 0xff, 0x61, 0x8c, 0x0e, 0x41, 0x7f, 0x26, 0x4f, 0x66, 0x05, 0x16, + 0x80, 0x00, 0xaf, 0xff, 0xf0, 0xb7, 0x34, 0x58, 0xb3, 0x06, 0xb0, 0x7f, + 0x73, 0x7f, 0x65, 0x0e, 0x63, 0x7f, 0x1b, 0x04, 0x78, 0x3e, 0x48, 0x05, + 0x30, 0x05, 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x02, 0x04, 0x05, + 0x10, 0x04, 0x05, 0x06, 0x28, 0x17, 0x05, 0x06, 0x04, 0x02, 0x00, 0x02, + 0x02, 0x02, 0xa0, 0x24, 0xeb, 0xff, 0x00, 0x00, 0x00, 0x08, 0x6e, 0x57, + 0x53, 0x7f, 0x89, 0xe8, 0x0a, 0x90, 0x30, 0x57, 0xb9, 0x06, 0x65, 0x1d, + 0x53, 0x2f, 0x9d, 0x75, 0x8a, 0x4b, 0x33, 0x20, 0x00, 0x57, 0x47, 0x9b, + 0x74, 0x05, 0xe0, 0x7f, 0x75, 0xba, 0x4d, 0x2f, 0x4f, 0x20, 0x85, 0x06, + 0x10, 0x7d, 0x07, 0x70, 0xff, 0x20, 0x20, 0xff, 0x76, 0xac, 0x06, 0x60, + 0xff, 0x75, 0x2e, 0xb1, 0x6f, 0x61, 0xf9, 0x06, 0x17, 0xa2, 0x7f, 0x89, + 0x00, 0x57, 0x53, 0xf1, 0x82, 0x3c, 0x68, 0x70, 0x51, 0x80, 0x06, 0x5f, + 0xb3, 0xac, 0xc0, 0xb0, 0xc6, 0xa4, 0xc2, 0xe8, 0x98, 0x20, 0x03, 0xb8, + 0xd2, 0x0e, 0x93, 0x7f, 0x06, 0x91, 0xff, 0x2e, 0x04, 0x33, 0x80, 0x28, + 0x19, 0x2d, 0x00, 0x17, 0x04, 0x30, 0x04, 0x3f, 0xa0, 0x20, 0x03, 0x34, + 0x28, 0x25, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x0b, 0x00, 0x40, 0x04, 0x35, + 0x20, 0x1b, 0x38, 0x04, 0xe8, 0x31, 0x07, 0x14, 0xff, 0x80, 0x10, 0x0e, + 0xd0, 0x7f, 0x06, 0x0a, 0x0c, 0x0a, 0x0c, 0x0c, 0x06, 0x80, 0x20, 0x06, + 0x0d, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x96, 0x00, 0x24, 0x2a, 0xfe, 0x00, + 0x00, 0x09, 0x6e, 0xa6, 0x00, 0x30, 0xa7, 0x30, 0xb9, 0x30, 0xc8, 0x30, + 0xfb, 0x00, 0x30, 0xdf, 0x30, 0xc3, 0x30, 0xc9, 0x30, 0xe9, 0x38, 0x30, + 0xf3, 0x20, 0x05, 0x05, 0x98, 0x27, 0x78, 0x0b, 0x20, 0x00, 0x4d, 0x2f, + 0x00, 0x69, 0x2f, 0xb7, 0x6c, 0x2e, 0xb7, 0x3f, 0xbf, 0x05, 0x7f, 0xbb, + 0xf0, 0x75, 0x56, 0x20, 0x4d, 0x3b, 0x20, 0x20, 0x87, 0x27, 0x05, 0x48, + 0x2b, 0x08, 0x10, 0xff, 0x4f, 0x3a, 0x00, 0x63, 0x20, 0x01, 0x31, 0x8b, + 0x3e, 0x43, 0x74, 0x21, 0x8f, 0x6c, 0xe0, 0x21, 0x99, 0x06, 0xd0, 0x7f, + 0x04, 0x9e, 0x4b, 0x7f, 0x89, 0x73, 0x7c, 0xb7, 0x0c, 0x5f, 0x70, 0x51, + 0x79, 0x06, 0x68, 0x17, 0x58, 0x11, 0xf8, 0xbb, 0x03, 0xe4, 0xb4, 0x9c, + 0xb7, 0x88, 0xc9, 0x06, 0x1f, 0xb2, 0x08, 0x52, 0x7f, 0xb4, 0xb2, 0x7d, + 0x69, 0x04, 0xc4, 0x0b, 0x00, 0x18, 0x0f, 0x1c, 0x28, 0x0b, 0x34, 0x04, + 0x5c, 0x3b, 0x28, 0x15, 0x3d, 0x28, 0x25, 0x0c, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x07, 0x0c, 0x04, 0x07, 0x0c, 0x06, 0x07, 0x07, 0x20, 0x04, + 0x04, 0x0c, 0x84, 0x20, 0x06, 0x07, 0x52, 0x25, 0xa8, 0x28, 0x17, 0x0a, + 0x6e, 0x03, 0x17, 0x53, 0x7f, 0x89, 0xe8, 0x90, 0x05, 0x98, 0x07, 0xff, + 0xff, 0x58, 0x4e, 0x2f, 0x2f, 0x72, 0x06, 0xaf, 0x2f, 0x50, 0x7f, 0x64, + 0x00, 0x2d, 0xec, 0x05, 0x48, 0x05, 0x08, 0x90, 0xff, 0x38, 0x0f, 0x76, + 0x06, 0x81, 0x7f, 0x06, 0x9e, 0x2f, 0x7f, 0x89, 0x01, 0x17, 0x53, 0xf1, + 0x82, 0x3c, 0x68, 0x70, 0x06, 0x68, 0x17, 0x0e, 0x78, 0xb1, 0xa4, 0xc2, + 0x58, 0x1b, 0x0e, 0xb3, 0x7f, 0x06, 0x91, 0xff, 0x21, 0xa0, 0x27, 0xff, + 0x32, 0x28, 0x03, 0x40, 0x04, 0x3e, 0x04, 0x2d, 0xab, 0x00, 0x28, 0x25, + 0x40, 0x28, 0x1f, 0x33, 0x28, 0x29, 0x3e, 0x28, 0x37, 0x0c, 0x94, 0xff, + 0x80, 0x10, 0x0e, 0x90, 0x7f, 0x08, 0x06, 0x09, 0x07, 0x09, 0x0a, 0x08, + 0x00, 0x08, 0x07, 0x09, 0x09, 0x06, 0x08, 0x08, 0x08, 0x0a, 0x08, 0x05, + 0x26, 0x6a, 0x28, 0x17, 0x0b, 0x28, 0x17, 0x71, 0x5b, 0x67, 0x07, 0x78, + 0x17, 0x45, 0x2f, 0xb5, 0x06, 0x98, 0x17, 0x45, 0x06, 0x08, 0x93, 0x07, + 0xb0, 0xff, 0xe1, 0x31, 0x7d, 0x06, 0x90, 0xff, 0x06, 0x78, 0x15, 0x00, + 0x00, 0x1c, 0x4e, 0x07, 0x18, 0x17, 0x3a, 0x74, 0xc7, 0x07, 0x58, 0x17, + 0x06, 0xb3, 0x7f, 0x07, 0x58, 0x17, 0x12, 0x28, 0x1d, 0x41, 0x2e, 0x04, + 0x42, 0x28, 0x23, 0x47, 0x05, 0x68, 0x19, 0x07, 0x54, 0xff, 0x10, 0x0e, + 0x90, 0x7f, 0x09, 0x05, 0x05, 0x08, 0x06, 0x08, 0x09, 0x48, 0x14, 0x05, + 0x20, 0x06, 0x08, 0x09, 0x17, 0x27, 0xdb, 0x28, 0x17, 0x0c, 0x6e, 0xe8, + 0x00, 0x30, 0xfc, 0x30, 0xaf, 0x30, 0xb7, 0x30, 0xe3, 0x80, 0x20, 0x07, + 0xfb, 0x30, 0xa2, 0x30, 0xf3, 0x30, 0xc9, 0xab, 0x20, 0x07, 0xb6, 0x20, + 0x0b, 0xcf, 0x20, 0x0b, 0xd0, 0x20, 0x1d, 0x04, 0xd8, 0x33, 0x51, 0x59, + 0x4f, 0xaf, 0x6b, 0x2f, 0xa7, 0x68, 0x00, 0x69, 0x46, 0x21, 0x5d, 0x20, + 0x28, 0x1d, 0x6e, 0x4e, 0xc1, 0x3f, 0x45, 0x30, 0x0f, 0x48, 0x2f, 0xc9, + 0x15, 0x6d, 0x00, 0x62, 0x2f, 0xcd, 0x72, 0x05, 0x40, 0x7f, 0x65, 0x2f, + 0xbf, 0xf4, 0x04, 0xd0, 0x75, 0x08, 0xf0, 0xff, 0x05, 0x70, 0xfd, 0x00, + 0x51, 0xff, 0x79, 0x05, 0xa0, 0x7f, 0xa6, 0x7e, 0x00, 0x4b, 0x51, 0xe1, + 0x90, 0x2d, 0x00, 0xa8, 0x4e, 0x20, 0x2f, 0x4f, 0x06, 0x3f, 0xb1, 0x94, + 0xc6, 0x6c, 0xd0, 0x54, 0x01, 0xc1, 0x2d, 0x00, 0xd8, 0xd5, 0x84, 0xbc, + 0x06, 0x3b, 0x99, 0xa0, 0x0e, 0xf2, 0x7f, 0x19, 0x28, 0x0f, 0x40, 0x04, + 0x3a, 0x04, 0x48, 0xa8, 0x27, 0xf9, 0x40, 0x28, 0x05, 0x38, 0x28, 0x09, + 0x25, 0x04, 0x30, 0x0e, 0x04, 0x3c, 0x04, 0x31, 0x48, 0x2d, 0x0e, 0x31, + 0x7f, 0x10, 0x0d, 0xb0, 0x7f, 0x0a, 0x2a, 0x0d, 0x0d, 0x20, 0x01, 0x0a, + 0x20, 0x06, 0x05, 0x20, 0x05, 0x0a, 0x08, 0x0a, 0x41, 0x26, 0xe6, 0x28, + 0x17, 0x0d, 0x6e, 0xa4, 0x88, 0x28, 0x17, 0xb9, 0x30, 0xc8, 0x28, 0x13, + 0xdf, 0x30, 0xc3, 0xbc, 0x28, 0x13, 0xe9, 0x48, 0x19, 0x04, 0xd8, 0x0b, + 0xbf, 0xff, 0x7f, 0x23, 0x20, 0x00, 0x45, 0x4d, 0x28, 0x17, 0x64, 0x00, + 0x6c, 0x68, 0x15, 0x73, 0x05, 0x6f, 0xb9, 0xab, 0xf0, 0x75, 0x20, 0x4c, + 0xbb, 0x20, 0x20, 0x87, 0x27, 0x05, 0x4f, 0x41, 0x08, 0x10, 0xff, 0x55, + 0x4f, 0x2f, 0xbf, 0x69, 0x2f, 0xc1, 0x6e, 0x2f, 0xc1, 0x61, 0x21, 0x8f, + 0x70, 0x69, 0x06, 0xe0, 0x7f, 0x3e, 0x49, 0x04, 0x9f, 0xcb, 0x1c, 0x4e, + 0x73, 0x7c, 0x02, 0xb7, 0x5f, 0x70, 0x51, 0x79, 0x51, 0x06, 0x5f, 0xaf, + 0x74, 0x00, 0xc7, 0xa4, 0xc2, 0xb8, 0xd2, 0xf8, 0xbb, 0xe4, 0x06, 0xb4, + 0x9c, 0xb7, 0x88, 0xc9, 0x06, 0x18, 0x99, 0x08, 0xf2, 0x7f, 0x69, 0xa2, + 0x04, 0xe4, 0x09, 0x12, 0x28, 0x17, 0x41, 0x04, 0x42, 0x28, 0x1d, 0x47, + 0x02, 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x39, 0x28, 0x1b, 0x1c, 0x8b, 0x28, + 0x23, 0x34, 0x04, 0x3b, 0x28, 0x17, 0x3d, 0x20, 0x07, 0x0c, 0xd4, 0xff, + 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x0b, 0x01, 0x06, 0x01, 0x07, 0x08, 0x0b, + 0x00, 0x0b, 0x01, 0x07, 0x02, 0x01, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x6d, + 0x25, 0x31, 0xff, 0x00, 0x00, 0x0e, 0x88, 0x28, 0x17, 0xf3, 0x30, 0xb0, + 0x68, 0x0d, 0x71, 0x67, 0xe8, 0x62, 0x90, 0x05, 0x98, 0x11, 0xf8, 0x17, + 0x6f, 0x00, 0x66, 0x2f, 0xab, 0x45, 0xbe, 0x2f, 0x2b, 0x67, 0x88, 0x1d, + 0x05, 0x38, 0x97, 0x05, 0x17, 0xfb, 0x09, 0x10, 0xff, 0x59, 0x0d, 0x6c, + 0xb6, 0x49, 0x0d, 0x49, 0x41, 0x81, 0x3f, 0xbd, 0x6c, 0x2e, 0x31, 0x3f, + 0xaf, 0x72, 0xff, 0x2e, 0x41, 0x04, 0xd1, 0x7f, 0x3e, 0xa5, 0x59, 0x8f, + 0x50, 0x7d, 0x3a, 0x1d, 0x05, 0x10, 0x7b, 0x58, 0x17, 0x06, 0xf1, 0x82, + 0x3c, 0x68, 0x70, 0x06, 0x68, 0x15, 0x78, 0x17, 0x24, 0x00, 0xc6, 0x0c, + 0xbe, 0x89, 0xc7, 0x00, 0xae, 0x9c, 0x1d, 0xb7, 0xdc, 0xb4, 0x0e, 0x32, + 0x7f, 0x06, 0x91, 0xff, 0x00, 0x38, 0x17, 0x40, 0x28, 0x11, 0x5c, 0x33, + 0x28, 0x1b, 0x3e, 0x28, 0x29, 0x0d, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, + 0x0c, 0x02, 0x01, 0x03, 0x02, 0x01, 0x02, 0x0c, 0x0c, 0x02, 0x20, 0x07, + 0x01, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x25, 0xec, 0x2f, 0xff, 0x0d, 0x0f, + 0x6e, 0x57, 0x53, 0x06, 0x38, 0x0d, 0x9f, 0xff, 0x53, 0x28, 0x0f, 0x5d, + 0x75, 0x2f, 0x95, 0x68, 0x48, 0x13, 0x5f, 0x3b, 0x05, 0xd0, 0x7f, 0x75, + 0x2f, 0xa5, 0x7a, 0x2d, 0x06, 0x88, 0x1f, 0x07, 0x50, 0xff, 0x39, 0x8f, + 0x06, 0x70, 0xff, 0x75, 0x2e, 0x1f, 0x65, 0xc2, 0x68, 0x1d, 0x06, 0x1f, + 0xb3, 0x1c, 0x4e, 0x57, 0x53, 0x06, 0xb8, 0x19, 0xac, 0x07, 0xc0, 0xb0, + 0xc6, 0xa4, 0xc2, 0x58, 0x1d, 0x0e, 0x93, 0x7f, 0x06, 0x91, 0xff, 0x47, + 0x2e, 0x28, 0x01, 0x3e, 0x04, 0x2d, 0x06, 0x88, 0x1f, 0x07, 0x14, 0xff, + 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x0d, 0x09, 0x0b, 0x09, 0x0b, 0x0b, 0x0d, + 0x20, 0x06, 0x00, 0x0c, 0x09, 0x0d, 0x0d, 0x0d, 0x0d, 0x27, 0x24, 0x20, + 0xe9, 0xff, 0xff, 0xff, 0x01, 0x03, 0x01, 0x03, 0x03, 0x34, 0x04, 0x01, + 0x20, 0x04, 0x20, 0x09, 0x01, 0x20, 0x07, 0x08, 0x02, 0x20, 0x08, 0x0a, + 0x20, 0x12, 0x08, 0x01, 0x0b, 0x08, 0x03, 0x40, 0x03, 0x20, 0x1a, 0x0b, + 0x0a, 0x0b, 0x02, 0x03, 0x04, 0x80, 0x20, 0x06, 0x0a, 0x0b, 0x04, 0x04, + 0x04, 0x04, 0x05, 0x00, 0x07, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, + 0x14, 0x04, 0x07, 0x07, 0x30, 0x06, 0x02, 0x2f, 0xff, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x6f, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x0a, 0xf5, 0x1c, 0x14, 0x00, 0x00, 0x00, 0x01, 0x6f, 0xb6, 0x30, + 0xf3, 0x30, 0xd3, 0x10, 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x5a, 0x00, + 0x61, 0x00, 0x06, 0x6d, 0x00, 0x62, 0x00, 0x69, 0x20, 0x07, 0x06, 0xd0, + 0x7f, 0x65, 0xb0, 0x06, 0x49, 0x20, 0x53, 0x07, 0x80, 0xff, 0x0e, 0x50, + 0x7f, 0x5e, 0x8d, 0xd4, 0x6b, 0x20, 0x9a, 0x4e, 0x06, 0x9b, 0x1b, 0xa0, + 0xc7, 0x44, 0xbe, 0x44, 0x68, 0xc5, 0x06, 0x9b, 0x9b, 0x07, 0x13, 0x7f, + 0xe2, 0x06, 0xc3, 0xff, 0x17, 0x04, 0x30, 0x00, 0x04, 0x3c, 0x04, 0x31, + 0x04, 0x38, 0x04, 0x4f, 0x67, 0x04, 0x10, 0x06, 0x33, 0x7f, 0x10, 0x06, + 0xf0, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x80, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x70, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x54, 0xf3, 0x14, 0x16, 0x00, 0x00, 0x00, 0x01, 0x70, 0xb8, 0x30, + 0xf3, 0x30, 0xd0, 0x04, 0x30, 0xd6, 0x30, 0xa8, 0x30, 0x06, 0x58, 0x1f, + 0x5a, 0x00, 0x01, 0x69, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x61, 0x20, 0x03, + 0x16, 0x77, 0x00, 0x65, 0x0e, 0x00, 0x7f, 0x53, 0x0e, 0xe0, 0xff, 0xb1, + 0xff, 0x75, 0x80, 0x06, 0x21, 0xff, 0x25, 0x6d, 0xf4, 0x5d, 0x03, 0x5e, + 0xe6, 0x40, 0x97, 0x06, 0x7b, 0x1d, 0xd0, 0xc9, 0x14, 0xbc, 0x0c, 0xbe, + 0x34, 0xe8, 0xc6, 0x06, 0x7b, 0x9d, 0x07, 0xd1, 0xff, 0xe9, 0x06, 0x0c, + 0xa4, 0x17, 0x04, 0x01, 0x38, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x30, 0x20, + 0x03, 0x0c, 0x32, 0x04, 0x35, 0x04, 0x10, 0x05, 0xf4, 0xff, 0x10, 0x06, + 0xf0, 0xff, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x71, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xb6, 0x1c, 0x7a, 0x23, 0x00, 0x00, 0x00, + 0x01, 0x71, 0xa2, 0x30, 0xbc, 0x30, 0xeb, 0x00, 0x30, 0xd0, 0x30, 0xa4, + 0x30, 0xb8, 0x30, 0xe3, 0x10, 0x30, 0xf3, 0x30, 0x05, 0xf8, 0x25, 0x41, + 0x00, 0x7a, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x62, 0x00, 0x61, 0x00, + 0x14, 0x69, 0x00, 0x6a, 0x20, 0x05, 0x6e, 0x06, 0x80, 0x7f, 0xef, 0x00, + 0x45, 0x64, 0x06, 0x00, 0x81, 0x41, 0x00, 0x73, 0xa0, 0xff, 0x64, 0x20, + 0x0d, 0x1b, 0x63, 0x00, 0x68, 0x05, 0xa1, 0x05, 0xd1, 0x7f, 0x67, 0x21, + 0x83, 0x05, 0xf0, 0xff, 0x88, 0xb1, 0xff, 0x79, 0x00, 0xe1, 0x05, 0xe1, + 0xff, 0x3f, 0x96, 0x5e, 0x04, 0x58, 0xdc, 0x62, 0x86, 0x75, 0x06, 0x7b, + 0x1d, 0x44, 0xc5, 0x00, 0x1c, 0xc8, 0x74, 0xb9, 0x14, 0xbc, 0x74, 0xc7, + 0x35, 0x94, 0xc7, 0x06, 0x3b, 0xa1, 0x93, 0x7f, 0x65, 0x42, 0x7f, 0x7a, + 0x05, 0xe3, 0x83, 0x88, 0xf3, 0xff, 0xe3, 0x00, 0x6f, 0x05, 0xcc, 0xa8, + 0x10, 0x04, 0x37, 0x00, 0x04, 0x35, 0x04, 0x40, 0x04, 0x31, 0x04, 0x30, + 0x02, 0x04, 0x39, 0x04, 0x34, 0x04, 0x36, 0x20, 0x07, 0x3d, 0x67, 0x04, + 0x0e, 0x54, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, + 0x17, 0x01, 0x10, 0x27, 0x80, 0x3f, 0xff, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x72, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xdf, 0x0c, 0xa9, + 0xf4, 0x00, 0x00, 0x00, 0x01, 0x72, 0xe2, 0x30, 0xfc, 0x30, 0xea, 0x01, + 0x30, 0xbf, 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, + 0x00, 0x61, 0x00, 0x75, 0x00, 0x72, 0x00, 0x15, 0x69, 0x00, 0x74, 0x20, + 0x09, 0x6e, 0x20, 0x07, 0x61, 0x06, 0xe0, 0x7f, 0x56, 0x65, 0x06, 0x40, + 0xff, 0x65, 0xa0, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x05, 0xd1, 0xff, 0xdb, + 0x00, 0x6b, 0xcc, 0x91, 0x54, 0x58, 0x3c, 0x5c, 0x9a, 0x40, 0x4e, 0x06, + 0x5b, 0x1f, 0xa8, 0xba, 0xac, 0xb9, 0xc0, 0xd0, 0x35, 0xc8, 0xb2, 0x06, + 0x7b, 0x9d, 0x00, 0x13, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe2, 0x06, 0x23, + 0xff, 0x00, 0x1c, 0x04, 0x30, 0x04, 0x32, 0x04, 0x40, 0x04, 0x14, 0x38, + 0x04, 0x42, 0x20, 0x09, 0x3d, 0x20, 0x07, 0x4f, 0x04, 0xcf, 0x0e, 0xd4, + 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, + 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x73, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xfe, 0x08, 0x50, 0xfa, 0x00, 0x01, 0x00, + 0x01, 0x73, 0xde, 0x30, 0xea, 0x30, 0x06, 0xb8, 0x19, 0x01, 0x4d, 0x00, + 0x61, 0x00, 0x6c, 0x00, 0x69, 0x10, 0x0e, 0xe0, 0x7f, 0x42, 0xed, 0x06, + 0x8a, 0x9c, 0x6c, 0x9a, 0xcc, 0x91, 0x06, 0xbb, 0x19, 0xd0, 0x10, 0xb9, + 0xac, 0xb9, 0x10, 0x06, 0xb3, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x0c, 0x3b, + 0x04, 0x38, 0x04, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x96, 0xff, 0x01, 0x01, + 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x74, 0x14, 0x20, 0x50, 0x08, 0xe2, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9d, 0x09, 0x7f, + 0x28, 0x1a, 0x01, 0x00, 0x74, 0xcb, 0x30, 0xb8, 0x30, 0xa7, 0x30, 0xfc, + 0x10, 0x30, 0xeb, 0x30, 0x06, 0x58, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x06, + 0x67, 0x00, 0x65, 0x00, 0x72, 0x06, 0x68, 0x9e, 0x10, 0x07, 0x10, 0x7f, + 0xed, 0x81, 0x06, 0xc1, 0xff, 0x3c, 0x5c, 0xe5, 0x65, 0x14, 0x5c, 0x06, + 0x9b, 0x1b, 0x03, 0xc8, 0xb2, 0x1c, 0xc8, 0x74, 0xb9, 0x06, 0x9b, 0x9b, + 0x0e, 0xf1, 0xff, 0x00, 0x1d, 0x04, 0x38, 0x04, 0x33, 0x04, 0x35, 0x04, + 0x33, 0x40, 0x04, 0x10, 0x16, 0x74, 0xff, 0x06, 0xd6, 0xff, 0x01, 0x01, + 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x75, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9c, 0x08, 0xb1, 0x0a, 0x00, 0x00, 0x00, + 0x01, 0x75, 0xc1, 0x30, 0xe3, 0x30, 0xc9, 0x40, 0x30, 0x06, 0x98, 0x1b, + 0x43, 0x00, 0x68, 0x00, 0x61, 0x00, 0x44, 0x64, 0x06, 0x88, 0x9c, 0x54, + 0x00, 0x63, 0x06, 0xc0, 0x81, 0x54, 0x00, 0x46, 0x73, 0x06, 0xc0, 0x81, + 0x43, 0x00, 0x69, 0x06, 0xc1, 0x7f, 0x06, 0xf1, 0xff, 0x4d, 0x10, 0x4e, + 0x97, 0x5f, 0x06, 0xbb, 0x19, 0x28, 0xcc, 0xdc, 0xb4, 0xdd, 0x06, 0xbb, + 0x99, 0x32, 0x7f, 0x6a, 0x23, 0x81, 0x06, 0x92, 0x7f, 0x53, 0xff, 0x65, + 0x06, 0x6c, 0x9e, 0x03, 0x27, 0x04, 0x30, 0x04, 0x34, 0x04, 0x0e, 0x94, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, + 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x76, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x1d, 0x0b, 0x22, 0x17, 0x00, 0x00, 0x00, + 0x01, 0x76, 0xb9, 0x30, 0xfc, 0x30, 0xc0, 0x10, 0x30, 0xf3, 0x30, 0x06, + 0x78, 0x1d, 0x53, 0x00, 0x75, 0x00, 0x05, 0x64, 0x00, 0x61, 0x00, 0x6e, + 0x06, 0x80, 0x7f, 0x6f, 0x06, 0xc0, 0x81, 0xd0, 0x07, 0x10, 0xff, 0x07, + 0x30, 0x7f, 0xe1, 0x06, 0x81, 0xff, 0xcf, 0x82, 0x39, 0x4e, 0x86, 0x06, + 0xbb, 0x19, 0x18, 0xc2, 0xe8, 0xb2, 0x06, 0xbb, 0x99, 0x32, 0xff, 0x65, + 0xb0, 0x07, 0x02, 0xff, 0xe3, 0x23, 0x85, 0x06, 0x5c, 0x9f, 0x21, 0x04, + 0x43, 0x04, 0x03, 0x34, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0e, 0xb3, 0x7f, + 0x10, 0x0e, 0x90, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, + 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x77, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe7, 0x0a, 0xaf, 0x1b, 0x00, 0x00, 0x00, + 0x01, 0x77, 0xa8, 0x30, 0xea, 0x30, 0xc8, 0x90, 0x20, 0x03, 0xa2, 0x30, + 0x06, 0x58, 0x1f, 0x45, 0x00, 0x72, 0x00, 0x11, 0x69, 0x00, 0x74, 0x20, + 0x05, 0x65, 0x00, 0x61, 0x06, 0x28, 0xa2, 0x55, 0xc9, 0x20, 0x7f, 0x79, + 0x20, 0x7f, 0x68, 0x20, 0x87, 0xe9, 0x20, 0x83, 0xc0, 0x0d, 0xf0, 0xff, + 0x0e, 0xf0, 0x7f, 0x84, 0x53, 0xcb, 0x7a, 0x79, 0x72, 0x08, 0xcc, 0x91, + 0x9a, 0x4e, 0x06, 0x5b, 0x1f, 0xd0, 0xc5, 0xac, 0x01, 0xb9, 0xb8, 0xd2, + 0x08, 0xb8, 0x44, 0xc5, 0x0e, 0x53, 0x7f, 0xa0, 0xb3, 0xff, 0x69, 0x06, + 0x24, 0x01, 0x2d, 0x04, 0x40, 0x04, 0x38, 0x21, 0x04, 0x42, 0x20, 0x05, + 0x35, 0x04, 0x4f, 0x04, 0x10, 0x06, 0x13, 0x7f, 0x9e, 0x10, 0x06, 0xf4, + 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x78, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x3d, 0x08, 0xae, + 0x1e, 0x00, 0x00, 0x00, 0x01, 0x78, 0xb8, 0x30, 0xd6, 0x30, 0xc1, 0x40, + 0x30, 0x06, 0x98, 0x1b, 0x44, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x01, 0x62, + 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x20, 0x09, 0x83, 0x0e, 0x10, 0x7f, + 0x73, 0x00, 0x63, 0x00, 0x68, 0x41, 0x03, 0x06, 0x31, 0x01, 0x68, 0x47, + 0x06, 0x80, 0x79, 0x5a, 0x98, 0x59, 0x06, 0xe0, 0x7f, 0x09, 0x54, 0x03, + 0x10, 0x5e, 0xd0, 0x63, 0x06, 0x9b, 0x1b, 0xc0, 0xc9, 0x80, 0xbd, 0x20, + 0xf0, 0xd2, 0x10, 0x06, 0x93, 0x7f, 0x14, 0x04, 0x36, 0x04, 0x38, 0x03, + 0x04, 0x31, 0x04, 0x43, 0x04, 0x42, 0x20, 0x07, 0x10, 0x06, 0x34, 0xff, + 0x9e, 0x10, 0x06, 0xd0, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, + 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x79, 0x14, 0x20, 0x50, 0x08, 0xe2, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x72, 0x01, 0x3f, + 0x28, 0x11, 0x01, 0x00, 0x79, 0xbd, 0x30, 0xde, 0x30, 0xea, 0x30, 0xa2, + 0x40, 0x30, 0x06, 0x78, 0x1d, 0x53, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x06, + 0x61, 0x00, 0x6c, 0x00, 0x69, 0x20, 0x05, 0x06, 0xd0, 0x7f, 0x65, 0xc0, + 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0x22, 0x7d, 0x6c, 0x9a, 0xcc, 0x91, + 0x80, 0x06, 0x9b, 0x1b, 0x8c, 0xc1, 0xd0, 0xb9, 0xac, 0xb9, 0x44, 0x54, + 0xc5, 0x07, 0x33, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x06, 0x83, 0xff, + 0x21, 0x04, 0x00, 0x3e, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x33, + 0x38, 0x04, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x01, 0xd0, + 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7a, 0x14, 0x20, 0x50, 0x08, 0xe2, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x38, 0x1e, 0x11, + 0x28, 0x1a, 0x01, 0x00, 0x7a, 0xa2, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0xe9, + 0x40, 0x30, 0x06, 0x78, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x15, + 0x6f, 0x00, 0x72, 0x20, 0x01, 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x0e, 0xe0, + 0xff, 0x81, 0x0e, 0x30, 0x7f, 0x89, 0x5b, 0x53, 0x90, 0x14, 0x5c, 0x06, + 0x9b, 0x1b, 0x03, 0x48, 0xc5, 0xc4, 0xb3, 0x7c, 0xb7, 0x06, 0x9b, 0x9b, + 0x0e, 0xf2, 0x7f, 0x00, 0x10, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x3e, 0x04, + 0x4c, 0x40, 0x20, 0x01, 0x30, 0x04, 0x10, 0x0e, 0x13, 0xff, 0x0e, 0xf5, + 0x7f, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x7b, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xb1, 0x19, 0x33, 0xfc, 0x00, 0x00, 0x00, + 0x01, 0x7b, 0xb8, 0x30, 0xd6, 0x30, 0xe9, 0x0c, 0x30, 0xeb, 0x30, 0xbf, + 0x20, 0x03, 0x06, 0x38, 0x21, 0x47, 0x00, 0x00, 0x69, 0x00, 0x62, 0x00, + 0x72, 0x00, 0x61, 0x00, 0x15, 0x6c, 0x00, 0x74, 0x20, 0x05, 0x72, 0x10, + 0x06, 0x40, 0x7f, 0x69, 0x41, 0x7d, 0x70, 0x65, 0x21, 0x87, 0x31, 0x89, + 0x0d, 0xb1, 0xff, 0xf4, 0x76, 0x03, 0x5e, 0x08, 0x57, 0x7f, 0x40, 0x96, + 0x06, 0x7b, 0x1d, 0xc0, 0xc9, 0x0c, 0x06, 0xbe, 0x64, 0xb8, 0x30, 0xd1, + 0x06, 0x7b, 0x9d, 0x0e, 0xf3, 0x7f, 0x13, 0x00, 0x04, 0x38, 0x04, 0x31, + 0x04, 0x40, 0x04, 0x30, 0x09, 0x04, 0x3b, 0x04, 0x42, 0x20, 0x05, 0x40, + 0x04, 0x10, 0x0e, 0x34, 0xff, 0x9e, 0x0e, 0x96, 0x7f, 0x01, 0x01, 0xd0, + 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7c, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2a, 0x23, 0x30, + 0xfe, 0x00, 0x00, 0x00, 0x01, 0x7c, 0xac, 0x30, 0xfc, 0x30, 0xf3, 0x24, + 0x30, 0xb8, 0x20, 0x05, 0xf6, 0x5c, 0x06, 0x38, 0x21, 0x47, 0x00, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x57, 0x73, 0x20, 0x07, + 0x79, 0x06, 0xa0, 0x7f, 0x65, 0x06, 0x40, 0x81, 0x07, 0x90, 0xff, 0x0e, + 0x50, 0x7f, 0x08, 0x39, 0x68, 0x7f, 0x89, 0x06, 0xbb, 0x19, 0x74, 0xac, + 0xc0, 0x06, 0xc9, 0x20, 0x00, 0x2c, 0xc1, 0x06, 0x7b, 0x9d, 0x0e, 0xf2, + 0x7f, 0x13, 0x00, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3d, 0x04, 0x41, 0x19, + 0x04, 0x38, 0x04, 0x10, 0x06, 0x31, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, + 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7d, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x84, 0x26, 0xd0, + 0xfc, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xde, 0x30, 0xf3, 0x30, 0xf6, 0x40, + 0x5c, 0x06, 0x98, 0x1b, 0x49, 0x00, 0x73, 0x00, 0x6c, 0x00, 0x01, 0x65, + 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x20, 0x05, 0x05, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x05, 0xa8, 0xaa, 0xce, 0x60, 0x7d, 0x7a, 0x64, 0x40, 0x83, + 0x05, 0xf0, 0x7d, 0x07, 0x10, 0xff, 0x31, 0x7f, 0x6f, 0x21, 0x81, 0x61, + 0xbc, 0x41, 0x03, 0x69, 0x06, 0x01, 0x81, 0x51, 0xff, 0x50, 0x7d, 0x06, + 0x31, 0x81, 0x6c, 0x9a, 0x10, 0x69, 0x60, 0x9b, 0x06, 0xa2, 0xff, 0xe8, + 0xb9, 0x20, 0x00, 0x38, 0x2c, 0xc1, 0x06, 0x9b, 0x9b, 0x06, 0x12, 0xf1, + 0xf3, 0xff, 0x6c, 0x00, 0x68, 0x80, 0x06, 0xa1, 0xff, 0x1c, 0x04, 0x4d, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x00, 0x28, 0x00, 0x3e, 0x04, 0x41, 0x04, + 0x42, 0x00, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x29, 0xcf, 0x0d, + 0xc3, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, + 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x7e, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xfa, 0x22, 0x80, + 0xfe, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xb8, 0x30, 0xe3, 0x30, 0xfc, 0x24, + 0x30, 0xb8, 0x20, 0x03, 0xf6, 0x5c, 0x06, 0x38, 0x21, 0x4a, 0x00, 0x05, + 0x65, 0x00, 0x72, 0x00, 0x73, 0x20, 0x05, 0x79, 0x06, 0x48, 0xa0, 0x84, + 0x10, 0x0e, 0xf0, 0x7f, 0xfd, 0x6c, 0x7f, 0x89, 0x06, 0xcb, 0x19, 0xc8, + 0xc0, 0x06, 0xc9, 0x20, 0x00, 0x2c, 0xc1, 0x06, 0x7b, 0x9d, 0x07, 0x13, + 0x7f, 0xe9, 0x88, 0x43, 0xff, 0x69, 0x00, 0x61, 0x06, 0x5c, 0x97, 0x04, + 0x36, 0x04, 0x00, 0x35, 0x04, 0x40, 0x04, 0x41, 0x04, 0x38, 0x04, 0x9e, + 0x10, 0x1e, 0x34, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, + 0x27, 0x3f, 0xff, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x7f, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x16, 0x1f, 0x46, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x7f, 0xe2, 0x30, 0xca, 0x30, 0xb3, 0x40, 0x30, 0x06, 0x98, 0x1b, + 0x4d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x18, 0x61, 0x00, 0x63, 0x20, 0x07, + 0x10, 0x06, 0xf0, 0x7f, 0x20, 0x00, 0x28, 0x02, 0x00, 0x50, 0x00, 0x72, + 0x00, 0x69, 0x21, 0x91, 0x63, 0xaa, 0x20, 0x05, 0x70, 0x21, 0x97, 0x74, + 0x40, 0x17, 0x64, 0x20, 0x13, 0x29, 0xa0, 0x04, 0x61, 0xff, 0xf3, 0x06, + 0xc1, 0xff, 0x69, 0x64, 0xb3, 0x7e, 0xe5, 0x40, 0x54, 0x06, 0x9b, 0x1b, + 0xa8, 0xba, 0x98, 0xb0, 0x54, 0xcf, 0xc0, 0x0e, 0xb3, 0x7f, 0x06, 0xd1, + 0xff, 0x1c, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x1c, 0x30, 0x04, 0x3a, 0x20, + 0x07, 0x10, 0x0e, 0xf4, 0xff, 0x0e, 0x36, 0xff, 0x01, 0x01, 0xf0, 0xd0, + 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x88, 0x1d, 0x01, + 0x11, 0x22, 0x00, 0x00, 0x30, 0x01, 0xa9, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x56, 0x14, 0xe5, + 0x36, 0x00, 0x00, 0x00, 0x02, 0xa9, 0xc7, 0x30, 0xea, 0x30, 0xfc, 0x40, + 0x30, 0x06, 0x98, 0x1b, 0x44, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x10, 0x68, + 0x00, 0x69, 0x10, 0x16, 0x60, 0x7f, 0xb7, 0x5f, 0xcc, 0x91, 0x00, 0x2d, + 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, 0x8f, 0x21, 0x3a, 0x53, 0x06, 0x1b, + 0x23, 0x78, 0xb3, 0xac, 0xb9, 0x06, 0xbb, 0x99, 0xe0, 0x07, 0x53, 0x7f, + 0x06, 0x73, 0xfd, 0x2c, 0x97, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x20, 0x38, + 0x04, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x09, 0x09, 0x09, 0x0a, 0x32, 0x09, + 0x01, 0x30, 0x06, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x00, 0xa9, + 0xa2, 0x30, 0xf3, 0x30, 0xc0, 0x30, 0xde, 0x80, 0x20, 0x05, 0xfb, 0x30, + 0xcb, 0x30, 0xb3, 0x30, 0xd0, 0x01, 0x30, 0xeb, 0x30, 0xf8, 0x8a, 0xf6, + 0x5c, 0x05, 0x7f, 0xc5, 0x00, 0x41, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x61, + 0x00, 0x45, 0x6d, 0x20, 0x03, 0x6e, 0x00, 0x20, 0x40, 0x05, 0x64, 0x20, + 0x07, 0x41, 0x4e, 0x28, 0x29, 0x63, 0x00, 0x6f, 0x00, 0x62, 0x20, 0x1b, + 0x46, 0x72, 0x20, 0x17, 0x49, 0x00, 0x73, 0x28, 0x3f, 0x50, 0x1d, 0x73, + 0xaa, 0x03, 0xaf, 0xe2, 0xce, 0x28, 0x95, 0x65, 0x20, 0x5b, 0x20, 0xe0, + 0x89, 0x2d, 0xba, 0x28, 0xaf, 0x74, 0x20, 0x05, 0xd0, 0x87, 0x04, 0xf0, + 0xff, 0x65, 0x41, 0x03, 0x75, 0xbb, 0xa1, 0x03, 0x6b, 0x81, 0x03, 0x30, + 0x1b, 0x05, 0x10, 0x7f, 0x20, 0x40, 0x03, 0xd1, 0x7d, 0x75, 0x65, 0x04, + 0xaf, 0xd2, 0x71, 0xd7, 0xd1, 0x81, 0xe1, 0x42, 0x0b, 0x79, 0x00, 0x02, + 0x07, 0x80, 0x04, 0x1f, 0xdb, 0x89, 0x5b, 0xbe, 0x8f, 0xfc, 0x66, 0x8c, + 0x00, 0x54, 0x3c, 0x5c, 0xd1, 0x79, 0xf4, 0x5d, 0xa4, 0x10, 0x7f, 0x9b, + 0x5c, 0x05, 0xd8, 0x25, 0x48, 0xc5, 0xe4, 0xb2, 0x00, 0xcc, 0xb9, 0x20, + 0x00, 0xc8, 0xb2, 0x54, 0xcf, 0x10, 0x14, 0xbc, 0x74, 0x20, 0x09, 0x1c, + 0xc8, 0xc4, 0xb3, 0xff, 0x05, 0x9f, 0xc3, 0x00, 0x32, 0x7f, 0x52, 0x85, + 0xf2, 0x03, 0x04, 0x32, 0x7d, 0x31, 0xff, 0x3c, 0x15, 0xf1, 0xff, 0x70, + 0xe3, 0x23, 0xf9, 0x00, 0x32, 0x89, 0x04, 0x1f, 0xdb, 0x10, 0x04, 0x3d, + 0x04, 0x04, 0x34, 0x04, 0x30, 0x04, 0x3c, 0x20, 0x03, 0x3d, 0x04, 0x10, + 0x41, 0x04, 0x3a, 0x28, 0x23, 0x35, 0x04, 0x20, 0x00, 0x50, 0x38, 0x20, + 0x03, 0x1d, 0x28, 0x2f, 0x3a, 0x04, 0x3e, 0x04, 0x55, 0x31, 0x20, 0x1f, + 0x40, 0xa0, 0x1b, 0x3e, 0x20, 0x27, 0x42, 0x20, 0x11, 0x1c, 0x3e, 0x04, + 0x32, 0x20, 0x39, 0x0a, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x01, + 0x04, 0x0e, 0x01, 0x01, 0x0e, 0x02, 0x40, 0x06, 0x02, 0x02, 0x00, 0x02, + 0x02, 0x4b, 0x08, 0xf4, 0x41, 0x00, 0x00, 0x51, 0x04, 0x28, 0x17, 0xfc, + 0x28, 0x19, 0xc9, 0x30, 0xe9, 0x28, 0x17, 0x50, 0xd7, 0x20, 0x05, 0xc7, + 0x20, 0x0f, 0xb7, 0x30, 0xe5, 0x30, 0x2a, 0xde, 0x5d, 0x05, 0xb8, 0x17, + 0x68, 0x27, 0xfb, 0x61, 0x28, 0x15, 0x50, 0xa8, 0x40, 0x07, 0x64, 0x47, + 0xa9, 0x68, 0x10, 0x15, 0x40, 0x7f, 0x89, 0x5b, 0x97, 0x04, 0x5f, 0xc9, + 0x62, 0xa6, 0x90, 0x06, 0x7f, 0xb3, 0x48, 0xc5, 0x00, 0xdc, 0xb4, 0x7c, + 0xb7, 0x04, 0xd5, 0x7c, 0xb7, 0x00, 0x70, 0xb3, 0xdc, 0xc2, 0x20, 0x00, + 0xfc, 0xc8, 0xe8, 0x05, 0xdf, 0xb8, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x45, + 0x27, 0xf7, 0x30, 0x04, 0x2d, 0x2b, 0x00, 0x1f, 0x40, 0x07, 0x34, 0x28, + 0x19, 0x48, 0x02, 0xe7, 0xef, 0x10, 0x19, 0x74, 0xff, 0x24, 0x03, 0x02, + 0x28, 0x0e, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, 0x03, 0x5b, + 0x0c, 0xcd, 0x37, 0x00, 0x00, 0x41, 0x05, 0x28, 0x17, 0xc3, 0x30, 0xb5, + 0x30, 0xe0, 0x05, 0x88, 0x07, 0xb8, 0x00, 0x1f, 0x2f, 0x73, 0x2f, 0xff, + 0x3f, 0xa5, 0x10, 0x16, 0x50, 0x7f, 0x3f, 0x96, 0x28, 0x10, 0x84, 0xc6, + 0x59, 0x06, 0x98, 0x17, 0x44, 0xc5, 0xbc, 0xc0, 0xd5, 0x06, 0x18, 0x0d, + 0x0f, 0x93, 0x7f, 0x10, 0x2f, 0xfb, 0x41, 0x2f, 0xf5, 0x3c, 0x05, 0x68, + 0x07, 0x92, 0x10, 0x17, 0xf4, 0xff, 0x04, 0x03, 0x28, 0x0e, 0x02, 0x04, + 0x40, 0x06, 0x04, 0x00, 0x04, 0x04, 0x04, 0x91, 0x12, 0x4d, 0x41, 0x00, + 0x00, 0x00, 0x06, 0xa9, 0xc1, 0x30, 0xe3, 0x30, 0xf3, 0x00, 0x30, 0xc7, + 0x30, 0xa3, 0x30, 0xfc, 0x30, 0xac, 0x2a, 0x30, 0xeb, 0x06, 0x08, 0x1f, + 0x43, 0x2f, 0xab, 0x61, 0x4f, 0xb3, 0x2b, 0x2c, 0x01, 0x67, 0x2f, 0xb3, + 0x72, 0x05, 0x6f, 0xa7, 0x00, 0x10, 0x7f, 0x69, 0x00, 0x80, 0x10, 0x0e, + 0x30, 0x7f, 0x0c, 0x66, 0xea, 0x8f, 0xa0, 0x52, 0x14, 0x00, 0x5c, 0x2d, + 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, 0x10, 0x8f, 0x3a, 0x53, 0x05, 0xdf, + 0xaf, 0x2c, 0xcc, 0x14, 0xb5, 0x0d, 0x00, 0xac, 0x74, 0xb9, 0x06, 0x78, + 0x1b, 0x0e, 0xf2, 0xff, 0x27, 0x28, 0x13, 0x01, 0x3d, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x33, 0x28, 0x1d, 0x1c, 0x40, 0x04, 0x45, 0x05, 0xe8, 0x1f, + 0x07, 0x94, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x05, 0x05, 0x12, 0x05, 0x05, + 0x06, 0x30, 0x04, 0x05, 0x20, 0x40, 0x05, 0xdb, 0x00, 0x15, 0x9a, 0x36, + 0x00, 0x00, 0x07, 0xa9, 0xc0, 0x00, 0x30, 0xc9, 0x30, 0xe9, 0x30, 0xca, + 0x53, 0x73, 0x20, 0x30, 0xca, 0x48, 0x17, 0xfb, 0x30, 0xa2, 0x30, 0xd9, + 0x00, 0x30, 0xea, 0x30, 0x23, 0x90, 0xa6, 0x90, 0xf4, 0x06, 0x76, 0x44, + 0x8f, 0x30, 0x57, 0x04, 0xed, 0x2f, 0x2f, 0xab, 0x64, 0x88, 0x28, 0x0d, + 0x61, 0x00, 0x20, 0x68, 0x1f, 0x20, 0x00, 0x4e, 0xc4, 0x2f, 0xbf, 0x58, + 0x23, 0x20, 0x00, 0x48, 0x2f, 0xcb, 0x76, 0x00, 0x18, 0x65, 0x00, 0x6c, + 0x27, 0xb7, 0x04, 0xf0, 0x7f, 0x65, 0x00, 0x74, 0xdd, 0x05, 0xe0, 0x7d, + 0xd0, 0xff, 0x75, 0x07, 0x00, 0xff, 0x05, 0xf0, 0xfd, 0xd1, 0xff, 0x79, + 0x06, 0x20, 0x7f, 0x00, 0xbe, 0x8f, 0xb7, 0x5f, 0xc9, 0x62, 0x8c, 0x54, + 0x20, 0xb3, 0x7e, 0x38, 0x1d, 0xc8, 0x54, 0xf4, 0x7e, 0x29, 0x40, 0x52, + 0x05, 0xb8, 0x23, 0xe4, 0xb2, 0xdc, 0xb4, 0x7c, 0xb7, 0x20, 0x98, 0xb0, + 0x38, 0x1b, 0x58, 0xd5, 0xa8, 0xbc, 0xac, 0x80, 0x28, 0x21, 0xf0, 0xc5, + 0x29, 0xbc, 0xc1, 0xc9, 0x60, 0x6d, 0xd5, 0x05, 0x38, 0x29, 0xd2, 0xff, + 0x6e, 0x06, 0xc2, 0xff, 0x06, 0x32, 0x7f, 0x14, 0x28, 0x17, 0x41, 0x34, + 0x28, 0x0f, 0x30, 0x04, 0x20, 0x00, 0x38, 0x20, 0x03, 0x62, 0x1d, 0x28, + 0x27, 0x58, 0x21, 0x2d, 0x00, 0x25, 0x28, 0x33, 0x32, 0x0e, 0x04, 0x35, + 0x04, 0x3b, 0x28, 0x35, 0x0d, 0x34, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x06, + 0x03, 0x07, 0x07, 0x07, 0x08, 0x07, 0x06, 0x30, 0x06, 0x20, 0x05, 0x00, + 0x06, 0x06, 0x69, 0x0e, 0xec, 0x33, 0x00, 0x00, 0x01, 0x08, 0xa9, 0xb0, + 0x30, 0xb8, 0x30, 0xe3, 0x28, 0x19, 0x02, 0xfc, 0x30, 0xc8, 0x30, 0xde, + 0x5d, 0x06, 0x1c, 0xb1, 0x47, 0xa3, 0x27, 0x0d, 0x6a, 0x4f, 0xa7, 0x01, + 0x01, 0x74, 0x06, 0x2d, 0x30, 0x90, 0x7f, 0x60, 0x61, 0x28, 0x15, 0x10, + 0x0e, 0x10, 0x7f, 0xe4, 0x53, 0x09, 0x54, 0xc9, 0x04, 0x62, 0x79, 0x72, + 0xa6, 0x90, 0x06, 0x3f, 0xad, 0x00, 0x00, 0x00, 0x6c, 0xad, 0x90, 0xc7, + 0x7c, 0xb7, 0xb8, 0xd2, 0x31, 0x20, 0x00, 0x05, 0x38, 0x05, 0x10, 0x00, + 0x12, 0xff, 0x13, 0x04, 0x43, 0x28, 0x17, 0x47, 0x36, 0x48, 0x09, 0x30, + 0x04, 0x42, 0x04, 0x87, 0xff, 0x09, 0x14, 0xff, 0x10, 0x0e, 0x50, 0x7f, + 0x01, 0x07, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x07, 0x20, 0x06, 0x41, 0x06, + 0x20, 0x05, 0x07, 0x07, 0x84, 0x10, 0xaa, 0x28, 0x17, 0x01, 0x09, 0xa9, + 0xcf, 0x30, 0xea, 0x30, 0xe4, 0x28, 0x15, 0x74, 0xca, 0x28, 0x19, 0x06, + 0x38, 0x17, 0x3f, 0x91, 0x72, 0x2e, 0x29, 0x01, 0x01, 0x78, 0x6e, 0x2f, + 0xb9, 0x06, 0x90, 0x7f, 0x3b, 0xab, 0x10, 0x0e, 0x30, 0x7f, 0xc8, 0x54, + 0xcc, 0x04, 0x91, 0x9a, 0x4e, 0xb3, 0x7e, 0x06, 0x78, 0x17, 0x58, 0xd5, + 0x03, 0xac, 0xb9, 0x44, 0xc5, 0x98, 0xb0, 0x06, 0x78, 0x17, 0x0e, 0xf2, + 0xff, 0x41, 0x25, 0x48, 0x11, 0x4c, 0x04, 0x4f, 0x04, 0x3d, 0x28, 0x1b, + 0xc0, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x08, 0x0c, 0x0c, 0x0c, + 0x0d, 0x0c, 0x50, 0x08, 0x20, 0x06, 0x1e, 0x20, 0x05, 0x08, 0x08, 0xda, + 0x15, 0x00, 0x99, 0x36, 0x00, 0x00, 0x0a, 0xa9, 0xd2, 0x30, 0x40, 0xde, + 0x28, 0x15, 0xc1, 0x30, 0xe3, 0x30, 0xeb, 0x30, 0x01, 0xfb, 0x30, 0xd7, + 0x30, 0xe9, 0x30, 0xc7, 0x28, 0x25, 0x10, 0xb7, 0x30, 0xe5, 0x05, 0x68, + 0x25, 0x48, 0x00, 0x69, 0x00, 0x44, 0x6d, 0x2f, 0xaf, 0x63, 0x00, 0x68, + 0x2f, 0xb5, 0x6c, 0x00, 0x10, 0x20, 0x00, 0x50, 0x4f, 0xbb, 0x64, 0x00, + 0x65, 0x00, 0x60, 0x73, 0x20, 0x13, 0x10, 0x14, 0xf0, 0x7f, 0x9c, 0x55, + 0x6c, 0x9a, 0x55, 0x10, 0x50, 0x14, 0x5c, 0x06, 0x78, 0x17, 0x88, 0xd7, + 0xc8, 0xb9, 0x00, 0x30, 0xcc, 0x04, 0xd5, 0x7c, 0xb7, 0x70, 0xb3, 0x30, + 0xdc, 0xc2, 0x06, 0x18, 0x1d, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x38, 0x04, + 0x50, 0x3c, 0x28, 0x1b, 0x47, 0x28, 0x1f, 0x3b, 0x04, 0x2d, 0x00, 0x40, + 0x1f, 0x28, 0x25, 0x30, 0x04, 0x34, 0x04, 0x35, 0x04, 0x60, 0x48, 0x05, + 0x48, 0x25, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x0d, 0x0d, 0x0d, 0x0e, 0x28, + 0x0d, 0x09, 0x20, 0x06, 0x1f, 0x20, 0x05, 0x09, 0x09, 0x1d, 0x22, 0x16, + 0xdf, 0x28, 0x17, 0x0c, 0xa9, 0xb1, 0x28, 0x15, 0xe9, 0xed, 0x28, 0x0d, + 0x05, 0x58, 0x05, 0x00, 0x1f, 0xff, 0x4b, 0x27, 0xff, 0x38, 0x07, 0x6c, + 0x06, 0x4f, 0xad, 0x81, 0x10, 0x0f, 0x10, 0x7f, 0x80, 0x55, 0xc9, 0x62, + 0xc9, 0x62, 0x06, 0x78, 0x15, 0x83, 0x2f, 0xff, 0xcf, 0x84, 0xb7, 0x7c, + 0xb7, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x6c, 0x1a, 0x28, 0x01, 0x38, + 0x09, 0x3b, 0x28, 0x1b, 0x10, 0x1e, 0x34, 0xff, 0x0a, 0x10, 0x04, 0x11, + 0x10, 0x11, 0x11, 0x0a, 0x20, 0x06, 0x0d, 0x10, 0x01, 0x0a, 0x0a, 0x0a, + 0x0a, 0x08, 0x06, 0xb2, 0x28, 0x17, 0x00, 0x0d, 0xa9, 0xe9, 0x30, 0xaf, + 0x30, 0xb7, 0x30, 0x01, 0xe3, 0x30, 0xc9, 0x30, 0xa6, 0x30, 0xa3, 0x28, + 0x23, 0x2b, 0xd7, 0x30, 0x05, 0xdd, 0x37, 0x4c, 0x2f, 0xab, 0x6b, 0x4f, + 0x99, 0x3f, 0xa3, 0x45, 0x77, 0x2f, 0xa5, 0x65, 0x00, 0x70, 0x10, 0x05, + 0xe0, 0x7f, 0x63, 0x2f, 0xad, 0x8c, 0x3f, 0xa1, 0x69, 0x00, 0x76, 0x2f, + 0xa5, 0x0d, 0xd1, 0xff, 0xc9, 0x62, 0x00, 0x4b, 0x51, 0x99, 0x6c, 0xa4, + 0x7f, 0x9b, 0x5c, 0x00, 0x2d, 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, 0x8f, + 0x20, 0x3a, 0x53, 0x05, 0xbf, 0xb1, 0x7d, 0xb7, 0xe4, 0xc0, 0xdc, 0x06, + 0xb4, 0x04, 0xc7, 0x04, 0xd5, 0x06, 0x5b, 0x97, 0x00, 0x11, 0xff, 0x6e, + 0x8d, 0x06, 0x03, 0xff, 0x71, 0x00, 0x75, 0x2f, 0x1d, 0x52, 0x7f, 0x61, + 0x2f, 0x25, 0xa2, 0x05, 0xbc, 0xa1, 0x1b, 0x28, 0x13, 0x3a, 0x04, 0x48, + 0x28, 0x19, 0x34, 0x03, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3f, 0x05, 0xe8, + 0x1d, 0x10, 0x07, 0x34, 0xff, 0x80, 0x0e, 0xb6, 0x7f, 0x0b, 0x11, 0x12, + 0x11, 0x12, 0x12, 0x0b, 0x80, 0x20, 0x06, 0x0e, 0x11, 0x0b, 0x0b, 0x0b, + 0x0b, 0x83, 0x00, 0x07, 0xa3, 0x33, 0x00, 0x00, 0x0e, 0xa9, 0xde, 0x28, + 0x30, 0xcf, 0x28, 0x0d, 0xe9, 0x28, 0x11, 0xb7, 0x30, 0xe5, 0x25, 0x30, + 0xc8, 0x20, 0x09, 0xde, 0x5d, 0x05, 0xbf, 0xb8, 0x4d, 0x2f, 0xab, 0x06, + 0x68, 0x00, 0x01, 0x01, 0x72, 0x20, 0x03, 0x38, 0x1d, 0x74, 0xd8, 0x4f, + 0xbd, 0x05, 0xf0, 0x7f, 0x61, 0x4f, 0xb3, 0x10, 0x0e, 0x30, 0x7f, 0x6c, + 0x9a, 0xc8, 0x00, 0x54, 0xc9, 0x62, 0xbd, 0x65, 0x79, 0x72, 0xc9, 0x10, + 0x62, 0xa6, 0x90, 0x06, 0x1f, 0xb3, 0xc8, 0xb9, 0x58, 0xd5, 0x00, 0x7c, + 0xb7, 0x88, 0xc2, 0xb8, 0xd2, 0x7c, 0xb7, 0x0d, 0x20, 0x00, 0xfc, 0xc8, + 0x05, 0xff, 0xb4, 0x0e, 0xf2, 0xff, 0x1c, 0x28, 0x17, 0x51, 0x45, 0x28, + 0x1b, 0x40, 0x28, 0x1f, 0x48, 0x04, 0x42, 0x40, 0x07, 0xc0, 0x0e, 0x14, + 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0c, 0x13, 0x14, 0x13, 0x14, 0x14, 0x40, + 0x0c, 0x20, 0x06, 0x11, 0x13, 0x0c, 0x0c, 0x0c, 0x0c, 0x14, 0x7e, 0x0d, + 0xc9, 0x28, 0x17, 0x0f, 0x28, 0x17, 0xcb, 0x30, 0x1a, 0xd7, 0x30, 0xeb, + 0x05, 0xe8, 0x0d, 0xd8, 0x17, 0x6e, 0x2e, 0xa9, 0x70, 0xa0, 0x2c, 0x33, + 0x72, 0x10, 0x16, 0x20, 0x7f, 0xfc, 0x66, 0x3c, 0x5c, 0x6e, 0x18, 0x66, + 0x14, 0x5c, 0x06, 0x38, 0x13, 0x58, 0x17, 0xc8, 0xb2, 0x78, 0x1c, 0xd4, + 0x74, 0xb9, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x3d, 0x04, + 0x06, 0x38, 0x04, 0x3f, 0x04, 0x43, 0x28, 0x1b, 0x10, 0x1e, 0x14, 0xff, + 0x0d, 0x02, 0x14, 0x15, 0x14, 0x15, 0x15, 0x0d, 0x20, 0x06, 0x10, 0x00, + 0x14, 0x0d, 0x0d, 0x0d, 0x0d, 0xa5, 0x11, 0xcf, 0x00, 0x42, 0x00, 0x00, + 0x10, 0xa9, 0xe1, 0x30, 0xac, 0x08, 0x30, 0xe9, 0x30, 0xe4, 0x06, 0xa8, + 0x17, 0x65, 0x00, 0x67, 0xac, 0x4b, 0x31, 0x6c, 0x2f, 0xb9, 0x79, 0x05, + 0xcf, 0xab, 0xb0, 0x7f, 0x61, 0x00, 0x80, 0x10, 0x0e, 0x50, 0x7f, 0x85, + 0x68, 0xa0, 0x52, 0xc9, 0x62, 0x9a, 0x40, 0x4e, 0x06, 0x78, 0x17, 0x54, + 0xba, 0x08, 0xac, 0x7c, 0xb7, 0x30, 0x7c, 0xc5, 0x06, 0x98, 0x17, 0x0e, + 0xd2, 0xff, 0x1c, 0x04, 0x35, 0x04, 0x15, 0x33, 0x04, 0x45, 0x28, 0x1d, + 0x3b, 0x28, 0x21, 0x4f, 0x06, 0x08, 0x19, 0xc0, 0x07, 0x74, 0xff, 0x10, + 0x0e, 0x70, 0x7f, 0x0e, 0x15, 0x16, 0x15, 0x16, 0x16, 0x40, 0x0e, 0x20, + 0x06, 0x12, 0x15, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x2e, 0x12, 0x56, 0x41, + 0x00, 0x00, 0x11, 0xa9, 0x00, 0xab, 0x30, 0xeb, 0x30, 0xca, 0x30, 0xfc, + 0x30, 0x15, 0xbf, 0x30, 0xab, 0x06, 0x48, 0x1b, 0x4b, 0x2f, 0xaf, 0x72, + 0x2f, 0xb1, 0x16, 0x01, 0x01, 0x74, 0x2f, 0xb9, 0x6b, 0x06, 0x08, 0x17, + 0x70, 0x7f, 0x61, 0x40, 0x00, 0x10, 0x0e, 0x50, 0x7f, 0x61, 0x53, 0xb3, + 0x7e, 0x54, 0x58, 0x20, 0x4b, 0x51, 0x06, 0x78, 0x17, 0x74, 0xce, 0x74, + 0xb9, 0x98, 0x06, 0xb0, 0xc0, 0xd0, 0x74, 0xce, 0x06, 0x58, 0x19, 0x0e, + 0xf2, 0xff, 0x1a, 0x8a, 0x28, 0x11, 0x40, 0x04, 0x3d, 0x28, 0x17, 0x42, + 0x28, 0x1b, 0x3a, 0xe0, 0x28, 0x1f, 0x0e, 0x54, 0xff, 0x10, 0x0e, 0x70, + 0x7f, 0x0f, 0x0f, 0x10, 0x0f, 0x10, 0x28, 0x10, 0x0f, 0x20, 0x06, 0x0c, + 0x20, 0x04, 0x0f, 0x0f, 0x3b, 0x01, 0x09, 0x2b, 0x37, 0x00, 0x00, 0x12, + 0xa9, 0x38, 0x13, 0x41, 0xac, 0x28, 0x17, 0xe9, 0x30, 0xf3, 0x30, 0xc9, + 0x06, 0x28, 0x19, 0x51, 0x4e, 0x2b, 0x29, 0x67, 0x6b, 0x2d, 0x6e, 0x00, + 0x64, 0x06, 0x0d, 0xb4, 0x58, 0x4e, 0x2f, 0xa9, 0x67, 0x6f, 0xad, 0x10, + 0x0e, 0x30, 0x7f, 0xa3, 0x90, 0xa0, 0x20, 0x52, 0x70, 0x06, 0x88, 0x15, + 0x00, 0x00, 0x98, 0xb0, 0x08, 0x06, 0xac, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, + 0x58, 0x15, 0x0f, 0x12, 0xff, 0x1d, 0xa2, 0x28, 0x17, 0x33, 0x28, 0x1b, + 0x3b, 0x04, 0x35, 0x28, 0x1d, 0x34, 0xe0, 0x05, 0xe8, 0x15, 0x07, 0x34, + 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x10, 0x17, 0x18, 0x17, 0x18, 0x20, 0x18, + 0x10, 0x20, 0x06, 0x14, 0x17, 0x10, 0x10, 0x10, 0x00, 0x10, 0x40, 0x12, + 0xed, 0x42, 0x00, 0x00, 0x13, 0x00, 0xa9, 0xaa, 0x30, 0xea, 0x30, 0xc3, + 0x30, 0xb5, 0xd0, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x4f, 0x28, 0x0b, 0x69, + 0x00, 0x73, 0x00, 0x60, 0x68, 0x06, 0x0f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, + 0x65, 0x59, 0xcc, 0x91, 0x28, 0x40, 0x84, 0x06, 0x98, 0x17, 0x24, 0xc6, + 0xac, 0xb9, 0xac, 0xc0, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1e, + 0x04, 0x40, 0x04, 0x38, 0x04, 0x58, 0x41, 0x20, 0x01, 0x30, 0x06, 0x08, + 0x13, 0x10, 0x17, 0x34, 0xff, 0x11, 0x18, 0x19, 0x08, 0x18, 0x19, 0x19, + 0x11, 0x20, 0x06, 0x15, 0x18, 0x11, 0x00, 0x11, 0x11, 0x11, 0x63, 0x0e, + 0x09, 0x3d, 0x00, 0x00, 0x00, 0x14, 0xa9, 0xdd, 0x30, 0xf3, 0x30, 0xc7, + 0x02, 0x30, 0xa3, 0x30, 0xb7, 0x30, 0xa7, 0x28, 0x21, 0xfc, 0x44, 0x30, + 0x05, 0xff, 0xb0, 0x50, 0x00, 0x75, 0x2f, 0xa5, 0x75, 0x00, 0x45, 0x63, + 0x28, 0x19, 0x65, 0x00, 0x72, 0x20, 0x01, 0x79, 0x05, 0xe0, 0x7f, 0x57, + 0x6f, 0x4f, 0xa7, 0x69, 0x40, 0x81, 0xe9, 0x06, 0x20, 0x7f, 0x07, 0xb0, + 0xff, 0x06, 0x11, 0x81, 0x80, 0x06, 0xf1, 0xff, 0x2c, 0x67, 0x30, 0x57, + 0xbb, 0x6c, 0xcc, 0x00, 0x91, 0x2d, 0x4e, 0x2e, 0x59, 0xf4, 0x76, 0x96, + 0x10, 0x8f, 0x3a, 0x53, 0x05, 0xdf, 0xb5, 0x01, 0xd4, 0x14, 0xb5, 0x0e, + 0x70, 0xc1, 0xac, 0xb9, 0x06, 0x78, 0x97, 0x07, 0x11, 0xff, 0x06, 0xd2, + 0x7f, 0x1f, 0x02, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x34, 0x28, 0x1b, 0x48, + 0x38, 0x04, 0x35, 0x48, 0x23, 0x0d, 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, + 0x12, 0x19, 0x1b, 0x00, 0x19, 0x1a, 0x1a, 0x12, 0x12, 0x19, 0x1a, 0x17, + 0x00, 0x19, 0x12, 0x12, 0x12, 0x12, 0x7b, 0x08, 0xc4, 0x02, 0x38, 0x00, + 0x00, 0x15, 0xa9, 0xd1, 0x28, 0x17, 0xb8, 0x21, 0x30, 0xe3, 0x28, 0x11, + 0xd6, 0x30, 0xde, 0x5d, 0x06, 0x34, 0x97, 0x55, 0x75, 0x27, 0x97, 0x6a, + 0x2f, 0xad, 0x62, 0x06, 0x65, 0x17, 0x65, 0x06, 0xe0, 0x7f, 0xd0, 0x06, + 0xf0, 0xff, 0x07, 0x30, 0x7f, 0x79, 0x06, 0x81, 0xff, 0xc1, 0x65, 0x6e, + 0x90, 0x08, 0x6e, 0x66, 0xa6, 0x90, 0x06, 0x77, 0x97, 0x80, 0xd3, 0x90, + 0x01, 0xc7, 0x0c, 0xbe, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x78, 0x17, 0xb0, + 0x0e, 0xd2, 0x7f, 0x1f, 0x28, 0x0d, 0x38, 0x17, 0x36, 0x04, 0x30, 0x04, + 0x70, 0x31, 0x05, 0xe8, 0x13, 0x0f, 0x93, 0xff, 0x10, 0x06, 0x95, 0x7f, + 0x13, 0x1a, 0x1a, 0x1a, 0x00, 0x1b, 0x1b, 0x13, 0x13, 0x1a, 0x1b, 0x16, + 0x1a, 0x00, 0x13, 0x13, 0x13, 0x13, 0xdb, 0x15, 0x9a, 0x36, 0x06, 0x00, + 0x00, 0x16, 0xa9, 0xe9, 0x28, 0x11, 0x38, 0x17, 0xb9, 0x28, 0x30, 0xbf, + 0x28, 0x1b, 0xf3, 0x06, 0x08, 0x1b, 0x52, 0x00, 0x01, 0x44, 0x01, 0x38, + 0x15, 0x73, 0x00, 0x74, 0x2f, 0xaf, 0x01, 0x01, 0x5b, 0x6e, 0x05, 0xed, + 0x38, 0x52, 0x28, 0x91, 0x90, 0x7f, 0x61, 0x2f, 0x3b, 0x10, 0x06, 0x90, + 0x7f, 0x40, 0xe1, 0x06, 0x01, 0x7d, 0x00, 0x00, 0xc9, 0x62, 0x3e, 0x8d, + 0x08, 0xaf, 0x65, 0x66, 0x57, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0x90, 0x06, + 0xc7, 0xa4, 0xc2, 0xc4, 0xd0, 0x06, 0x78, 0x19, 0x07, 0xb2, 0xff, 0xe3, + 0x2c, 0x00, 0x6f, 0x06, 0x0c, 0x98, 0x20, 0x28, 0x0f, 0x58, 0x15, 0x41, + 0x04, 0x17, 0x42, 0x04, 0x45, 0x28, 0x1d, 0x3d, 0x05, 0xc8, 0x1d, 0x07, + 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x14, 0x1b, 0x1c, 0x1b, 0x1c, + 0x1c, 0x14, 0x20, 0x06, 0x00, 0x18, 0x1b, 0x14, 0x14, 0x14, 0x14, 0x24, + 0x13, 0x00, 0xea, 0x35, 0x00, 0x00, 0x17, 0xa9, 0xbf, 0x30, 0x01, 0xdf, + 0x30, 0xeb, 0x30, 0xfb, 0x30, 0xca, 0x28, 0x1f, 0x14, 0xc9, 0x30, 0xa5, + 0x06, 0x08, 0x17, 0x54, 0x2f, 0xa9, 0x6d, 0x00, 0x01, 0x69, 0x00, 0x6c, + 0x00, 0x20, 0x00, 0x4e, 0x2f, 0xb5, 0x60, 0x64, 0x2f, 0x3f, 0x10, 0x15, + 0xb0, 0x7f, 0xf0, 0x6c, 0x73, 0x7c, 0x14, 0x04, 0x5c, 0xb3, 0x7e, 0xb7, + 0x5f, 0x06, 0x58, 0x19, 0xc0, 0xd0, 0x03, 0x00, 0xbc, 0x98, 0xb0, 0x50, + 0xb4, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x40, 0x22, 0x28, 0x17, 0x3c, + 0x04, 0x38, 0x04, 0x3b, 0x04, 0x16, 0x2d, 0x00, 0x1d, 0x48, 0x23, 0x43, + 0x05, 0xc8, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x02, 0x1d, 0x1e, 0x1d, + 0x1e, 0x1e, 0x15, 0x20, 0x06, 0x1a, 0x00, 0x1d, 0x15, 0x15, 0x15, 0x15, + 0x4d, 0x09, 0x17, 0x00, 0x39, 0x00, 0x00, 0x18, 0xa9, 0xc8, 0x30, 0xea, + 0x0d, 0x30, 0xd7, 0x30, 0xe9, 0x06, 0x08, 0x0f, 0x98, 0x17, 0x72, 0x28, + 0x15, 0x58, 0x70, 0x28, 0x0d, 0x72, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, + 0x79, 0x72, 0xcc, 0x04, 0x91, 0x6e, 0x66, 0xc9, 0x62, 0x06, 0x58, 0x15, + 0x00, 0x00, 0x00, 0xb8, 0xd2, 0xac, 0xb9, 0x04, 0xd5, 0x7c, 0xb7, 0xc5, + 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x22, 0x04, 0x40, 0x28, 0x15, 0x3f, + 0x28, 0x0d, 0x60, 0x40, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x16, 0x1e, + 0x1f, 0x1e, 0x1f, 0x20, 0x1f, 0x16, 0x20, 0x06, 0x1b, 0x1e, 0x16, 0x16, + 0x16, 0x00, 0x16, 0xf3, 0x10, 0xe8, 0x40, 0x00, 0x00, 0x19, 0x00, 0xa9, + 0x7f, 0x89, 0xd9, 0x30, 0xf3, 0x30, 0xac, 0x20, 0x30, 0xeb, 0x06, 0x68, + 0x19, 0x57, 0x00, 0x65, 0x00, 0x73, 0x28, 0x00, 0x74, 0x2f, 0xad, 0x42, + 0x20, 0x09, 0x6e, 0x00, 0x67, 0xb0, 0x2f, 0xbf, 0x6c, 0x05, 0xaf, 0xb1, + 0xb0, 0x75, 0x65, 0x00, 0x2d, 0x00, 0x16, 0x4f, 0x00, 0x63, 0x20, 0x01, + 0x69, 0x2f, 0xb7, 0x30, 0x8d, 0x74, 0xd5, 0x05, 0x00, 0x8d, 0x70, 0xff, + 0x62, 0xc0, 0x87, 0x6e, 0x06, 0x40, 0xff, 0x61, 0x2f, 0xb3, 0xb0, 0x00, + 0x30, 0xff, 0x65, 0x06, 0xe0, 0x7f, 0x04, 0xbf, 0xc7, 0x7f, 0x89, 0x5f, + 0x5b, 0x20, 0xa0, 0x52, 0x06, 0x98, 0x17, 0x1c, 0xc1, 0xb5, 0xbc, 0xe8, + 0x6f, 0xac, 0x06, 0x78, 0x15, 0x93, 0x7f, 0x2d, 0xe3, 0x09, 0x05, 0x72, + 0x81, 0x00, 0x32, 0x7f, 0x05, 0x93, 0x7d, 0x14, 0x00, 0x00, 0x17, 0x28, + 0x0d, 0x3f, 0x28, 0x11, 0x34, 0x04, 0x40, 0x3d, 0x28, 0x17, 0x4f, 0x04, + 0x20, 0x00, 0x11, 0x04, 0x55, 0x35, 0x20, 0x0b, 0x33, 0x28, 0x25, 0x3b, + 0x28, 0x31, 0x4f, 0x04, 0xe8, 0x2b, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x17, 0x21, 0x03, 0x21, 0x04, 0x03, 0x40, 0x17, 0x20, 0x06, + 0x0b, 0x21, 0x17, 0x17, 0x17, 0x17, 0x00, 0x0c, 0x10, 0xd7, 0x3e, 0x00, + 0x00, 0x1a, 0xa9, 0x01, 0xb7, 0x30, 0xc3, 0x30, 0xad, 0x30, 0xe0, 0x06, + 0x68, 0x15, 0x14, 0x00, 0x00, 0x53, 0x2f, 0xad, 0x6b, 0x20, 0x01, 0x69, + 0x00, 0x43, 0x6d, 0x10, 0x16, 0x40, 0x7f, 0x21, 0x95, 0xd1, 0x91, 0x06, + 0x78, 0x13, 0x3f, 0xff, 0x0e, 0xdc, 0xc2, 0xb4, 0xd0, 0x06, 0x98, 0x15, + 0x0f, 0x21, 0xff, 0x27, 0xfb, 0x3a, 0x8c, 0x20, 0x01, 0x38, 0x04, 0x3c, + 0x04, 0xe8, 0x01, 0x10, 0x18, 0x54, 0xff, 0x18, 0x1c, 0x04, 0x1d, 0x1c, + 0x1d, 0x1d, 0x18, 0x20, 0x06, 0x19, 0x1c, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x6f, 0x13, 0x04, 0x3f, 0x81, 0x2c, 0xad, 0xa9, 0xdf, 0x30, 0xbe, 0x30, + 0xe9, 0x06, 0xa8, 0x17, 0x41, 0x4d, 0x2f, 0x9b, 0x7a, 0x00, 0x6f, 0x00, + 0x72, 0x2f, 0xb1, 0xc0, 0x06, 0x38, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x73, + 0x7c, 0x50, 0x4f, 0xc9, 0x62, 0x20, 0xc6, 0x59, 0x06, 0x78, 0x1b, 0xf8, + 0xbb, 0x70, 0xc8, 0x8c, 0x68, 0xb7, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, + 0x1c, 0x28, 0x17, 0x37, 0x04, 0x3e, 0x0c, 0x04, 0x40, 0x04, 0x30, 0x06, + 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x16, 0x04, 0x17, 0x16, 0x17, + 0x17, 0x19, 0x20, 0x06, 0x13, 0x16, 0x00, 0x19, 0x19, 0x19, 0x19, 0xe0, + 0x10, 0xee, 0x41, 0x00, 0x00, 0x00, 0x1d, 0xa9, 0xc0, 0x30, 0xde, 0x30, + 0x00, 0xf3, 0x30, 0xfb, 0x30, 0xc7, 0x30, 0xa3, 0x30, 0x00, 0xa6, 0x30, + 0xf4, 0x76, 0x44, 0x8f, 0x30, 0x57, 0xa0, 0x05, 0xbf, 0xb8, 0x44, 0x48, + 0x0f, 0x61, 0x00, 0x6e, 0x00, 0x20, 0xaa, 0x40, 0x05, 0x64, 0x20, 0x07, + 0x44, 0x2f, 0xc3, 0x75, 0x06, 0x20, 0x7f, 0x65, 0x37, 0x00, 0x74, 0x05, + 0xe0, 0x7d, 0xd0, 0xff, 0x75, 0x07, 0x00, 0xff, 0x05, 0xf0, 0xfd, 0x71, + 0xff, 0x50, 0xe1, 0x41, 0xff, 0x79, 0x06, 0x20, 0x7f, 0xbe, 0x8f, 0xfc, + 0x66, 0x00, 0x8c, 0x54, 0x2c, 0x7b, 0x4c, 0x4e, 0x2d, 0x4e, 0x00, 0x2e, + 0x59, 0xf4, 0x76, 0x96, 0x8f, 0x3a, 0x53, 0x80, 0x05, 0xbf, 0xbb, 0xe4, + 0xb2, 0xcc, 0xb9, 0x14, 0xb5, 0xb0, 0x00, 0xc6, 0x20, 0x00, 0xf0, 0xc5, + 0x29, 0xbc, 0xc1, 0x1e, 0xc9, 0x60, 0xd5, 0x05, 0xd8, 0x21, 0xd2, 0xff, + 0x33, 0x85, 0x06, 0x32, 0xff, 0xe3, 0xd0, 0x2c, 0x19, 0x06, 0x52, 0x7f, + 0x14, 0x48, 0x0f, 0x30, 0x04, 0x3d, 0x04, 0x15, 0x20, 0x00, 0x38, 0x20, + 0x03, 0x14, 0x28, 0x27, 0x43, 0x05, 0xa8, 0x1f, 0xc0, 0x07, 0xb4, 0xff, + 0x10, 0x0e, 0x30, 0x7f, 0x1a, 0x08, 0x08, 0x08, 0x09, 0x08, 0x60, 0x1a, + 0x30, 0x06, 0x20, 0x05, 0x1a, 0x1a, 0x84, 0x0e, 0xcd, 0x00, 0x33, 0x00, + 0x00, 0x1e, 0xa9, 0xb4, 0x30, 0xa2, 0x1a, 0x30, 0xde, 0x5d, 0x06, 0x5d, + 0x2b, 0x3f, 0xff, 0x47, 0x2f, 0xab, 0x61, 0xc0, 0x06, 0x90, 0x7e, 0x10, + 0x0f, 0x00, 0x7f, 0x9c, 0x67, 0x3f, 0x96, 0xa6, 0x90, 0x81, 0x06, 0x92, + 0xff, 0xe0, 0xac, 0x44, 0xc5, 0x20, 0x00, 0x05, 0xd8, 0x0b, 0x8c, 0x0f, + 0xb3, 0x7f, 0x13, 0x04, 0x3e, 0x28, 0x19, 0x10, 0x1e, 0x94, 0xff, 0x1b, + 0x0a, 0x05, 0x0a, 0x0a, 0x0b, 0x0a, 0x1b, 0x20, 0x06, 0x05, 0x20, 0x05, + 0x00, 0x1b, 0x1b, 0x02, 0x0b, 0x80, 0x34, 0x00, 0x00, 0x00, 0x1f, 0xa9, + 0xd3, 0x30, 0xcf, 0x30, 0xfc, 0x30, 0x50, 0xeb, 0x06, 0x88, 0x1b, 0x42, + 0x2f, 0x9d, 0x68, 0x00, 0x01, 0x01, 0x64, 0x72, 0x06, 0x68, 0x9a, 0x50, + 0x7f, 0x61, 0x00, 0x10, 0x0e, 0x70, 0x7f, 0xd4, 0x6b, 0x08, 0xc8, 0x54, + 0x14, 0x5c, 0x06, 0x98, 0x19, 0x44, 0xbe, 0x58, 0x18, 0xd5, 0x74, 0xb9, + 0x06, 0x98, 0x19, 0x0e, 0xf2, 0xff, 0x11, 0x04, 0x38, 0x2e, 0x04, 0x45, + 0x28, 0x19, 0x40, 0x06, 0x68, 0x1b, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, + 0x7f, 0x1c, 0x03, 0x04, 0x04, 0x04, 0x05, 0x04, 0x1c, 0x30, 0x06, 0x20, + 0x05, 0x00, 0x1c, 0x1c, 0x34, 0x12, 0x87, 0x3c, 0x00, 0x00, 0x00, 0x20, + 0xa9, 0xde, 0x30, 0xc7, 0x30, 0xa3, 0x30, 0x01, 0xe4, 0x30, 0xfb, 0x30, + 0xd7, 0x30, 0xe9, 0x20, 0x0b, 0x05, 0xfc, 0x30, 0xb7, 0x30, 0xe5, 0x05, + 0xa8, 0x25, 0x4d, 0x2f, 0xad, 0x51, 0x64, 0x28, 0x19, 0x79, 0x2f, 0xb5, + 0x20, 0x00, 0x50, 0x27, 0x9f, 0x8c, 0x30, 0x0f, 0x65, 0x00, 0x73, 0x28, + 0x2d, 0x10, 0x15, 0x30, 0x7f, 0x2d, 0x4e, 0x20, 0x2e, 0x59, 0x06, 0x98, + 0x15, 0x00, 0x00, 0xc8, 0xb9, 0x14, 0x00, 0xb5, 0x44, 0xc5, 0x04, 0xd5, + 0x7c, 0xb7, 0x70, 0x1a, 0xb3, 0xdc, 0xc2, 0x06, 0x18, 0x1f, 0x0e, 0xf3, + 0x7f, 0x1c, 0x28, 0x13, 0x34, 0x80, 0x28, 0x19, 0x4c, 0x04, 0x4f, 0x04, + 0x2d, 0x00, 0x1f, 0xc6, 0x28, 0x1f, 0x30, 0x0f, 0x35, 0x04, 0x48, 0x05, + 0x68, 0x27, 0x10, 0x16, 0xf4, 0xff, 0x1d, 0x02, 0x12, 0x13, 0x12, 0x13, + 0x13, 0x1d, 0x20, 0x06, 0x0f, 0x00, 0x12, 0x1d, 0x1d, 0x1d, 0x1d, 0x8b, + 0x10, 0x0a, 0x00, 0x37, 0x00, 0x00, 0x21, 0xa9, 0xa6, 0x30, 0xc3, 0x08, + 0x30, 0xbf, 0x30, 0xeb, 0x06, 0x88, 0x17, 0x55, 0x00, 0x74, 0xf0, 0x20, + 0x01, 0x3f, 0xaf, 0x06, 0x38, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x17, 0x53, + 0xb9, 0x65, 0x81, 0x06, 0xb8, 0x17, 0xb0, 0xc6, 0xc0, 0xd0, 0x74, 0xb9, + 0x06, 0x98, 0x17, 0x8b, 0x0e, 0xf3, 0x7f, 0x23, 0x04, 0x42, 0x20, 0x01, + 0x30, 0x28, 0x0f, 0x06, 0x38, 0x15, 0x80, 0x10, 0x17, 0x14, 0xff, 0x1e, + 0x1f, 0x20, 0x1f, 0x20, 0x20, 0x1e, 0x80, 0x20, 0x06, 0x1c, 0x1f, 0x1e, + 0x1e, 0x1e, 0x1e, 0x17, 0x00, 0x13, 0x8a, 0x39, 0x00, 0x00, 0x22, 0xa9, + 0xc1, 0x22, 0x30, 0xe3, 0x28, 0x19, 0xc6, 0x30, 0xa3, 0x28, 0x11, 0xb9, + 0x3a, 0x30, 0xac, 0x28, 0x21, 0x05, 0x98, 0x13, 0x3f, 0xff, 0x43, 0x2f, + 0xab, 0x68, 0xc1, 0x2f, 0xb3, 0x38, 0x1d, 0x2b, 0x01, 0x73, 0x00, 0x67, + 0x48, 0x23, 0xd8, 0x05, 0x78, 0x15, 0xd0, 0x7f, 0x69, 0x2f, 0xa5, 0x10, + 0x0d, 0xf0, 0x7f, 0xe5, 0x67, 0x82, 0x01, 0x84, 0xaf, 0x65, 0xa0, 0x52, + 0x14, 0x5c, 0x06, 0x58, 0x1d, 0x00, 0x28, 0xcc, 0xf0, 0xd2, 0xa4, 0xc2, + 0x00, 0xac, 0x31, 0x74, 0xb9, 0x06, 0x18, 0x13, 0x0f, 0x32, 0xff, 0x27, + 0x04, 0x45, 0x28, 0x15, 0x82, 0x38, 0x1b, 0x38, 0x04, 0x41, 0x04, 0x33, + 0x48, 0x21, 0x45, 0xe0, 0x05, 0x88, 0x15, 0x07, 0xd4, 0xff, 0x10, 0x0e, + 0x30, 0x7f, 0x1f, 0x06, 0x06, 0x06, 0x07, 0x28, 0x06, 0x1f, 0x20, 0x06, + 0x21, 0x20, 0x05, 0x1f, 0x1f, 0x19, 0x12, 0x0f, 0x0c, 0x3a, 0x2b, 0x2d, + 0xa9, 0xb8, 0x28, 0x17, 0xfc, 0x83, 0x28, 0x0d, 0xab, 0x30, 0xf3, 0x30, + 0xc9, 0x05, 0xe8, 0x13, 0x3f, 0xff, 0x45, 0x4a, 0x48, 0x15, 0x72, 0x00, + 0x6b, 0x48, 0x1d, 0x6e, 0x2f, 0xad, 0x81, 0x10, 0x15, 0xd0, 0x7f, 0x3e, + 0x8d, 0x4e, 0x57, 0xb7, 0x5f, 0x06, 0x58, 0x13, 0x80, 0x3f, 0xff, 0x90, + 0xc7, 0x74, 0xb9, 0x78, 0xce, 0xdc, 0x62, 0xb4, 0x06, 0x58, 0x15, 0x0f, + 0x13, 0x7f, 0x14, 0x04, 0x36, 0x48, 0x0b, 0x3a, 0x8c, 0x48, 0x1f, 0x3d, + 0x04, 0x34, 0x05, 0xa8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x20, 0x0e, 0x04, + 0x0f, 0x0e, 0x0f, 0x0f, 0x20, 0x20, 0x06, 0x0a, 0x0e, 0x00, 0x20, 0x20, + 0x20, 0x20, 0x9c, 0x10, 0xad, 0x3c, 0x00, 0x00, 0x00, 0x24, 0xa9, 0xa6, + 0x30, 0xc3, 0x30, 0x1b, 0xbf, 0x30, 0xe9, 0x28, 0x1b, 0x06, 0x58, 0x19, + 0x55, 0x4f, 0xa9, 0x3f, 0xa3, 0x60, 0x61, 0x06, 0x48, 0x1b, 0x10, 0x0e, + 0xf0, 0x7f, 0x4c, 0x4e, 0x54, 0x58, 0xc9, 0x40, 0x62, 0x06, 0x98, 0x1b, + 0xb0, 0xc6, 0xc0, 0xd0, 0x7c, 0xb7, 0xc6, 0x06, 0x98, 0x19, 0x0e, 0xf3, + 0x7f, 0x23, 0x04, 0x42, 0x20, 0x01, 0x38, 0x19, 0x30, 0xc9, 0x06, 0x48, + 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x21, 0x20, 0x20, 0x01, 0x21, 0x21, 0x20, + 0x06, 0x40, 0x1d, 0x40, 0x07, 0x8e, 0x15, 0x7d, 0x37, 0x00, 0x00, 0x00, + 0x25, 0xa9, 0x5d, 0x30, 0x6e, 0x30, 0xd6, 0x4e, 0x88, 0x06, 0x7d, 0x2d, + 0x00, 0x00, 0x4f, 0x28, 0x17, 0x68, 0x00, 0x65, 0xc5, 0x2f, 0xb1, 0x06, + 0x5d, 0xb1, 0x41, 0x00, 0x75, 0x28, 0x99, 0x72, 0x20, 0x81, 0x8a, 0x06, + 0x5e, 0x31, 0x53, 0x00, 0x6f, 0x2f, 0xa5, 0x73, 0x29, 0x1d, 0x69, 0x22, + 0x00, 0x67, 0x06, 0x20, 0x85, 0x41, 0x00, 0x6c, 0x40, 0xff, 0x6f, 0xb4, + 0x06, 0x6f, 0x30, 0x28, 0x42, 0x01, 0x3a, 0x15, 0x29, 0x06, 0x4f, 0xb2, + 0x76, 0x51, 0x81, 0x06, 0xb2, 0xfd, 0x00, 0x00, 0x30, 0xae, 0xc0, 0xd0, + 0x06, 0xb0, 0x7f, 0x1e, 0x4f, 0x00, 0x76, 0x43, 0x7d, 0x32, 0x7d, 0x06, + 0x53, 0xff, 0x53, 0x7f, 0x61, 0x88, 0x06, 0x64, 0x82, 0x1e, 0x04, 0x41, + 0x48, 0x17, 0x3b, 0x04, 0x4c, 0x8e, 0x28, 0x11, 0x4b, 0x04, 0x35, 0x05, + 0xa8, 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x22, 0x42, 0x22, + 0xd0, 0x01, 0x56, 0x14, 0xe5, 0x36, 0x00, 0x3f, 0xff, 0x01, 0x00, 0x09, + 0x0a, 0x09, 0x0b, 0x0a, 0x01, 0x01, 0x09, 0x00, 0x09, 0x09, 0x09, 0x01, + 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x0f, 0x01, 0x02, 0x0f, 0x02, 0x02, + 0x01, 0x40, 0x0e, 0x20, 0x0b, 0x02, 0x02, 0x02, 0x03, 0x02, 0x01, 0xb1, + 0x20, 0x03, 0x03, 0x30, 0x06, 0x20, 0x05, 0x03, 0x03, 0x04, 0x20, 0x0c, + 0x18, 0x04, 0x03, 0x04, 0x30, 0x06, 0x20, 0x05, 0x04, 0x04, 0x05, 0x00, + 0x05, 0x06, 0x05, 0x07, 0x06, 0x05, 0x05, 0x05, 0x20, 0x05, 0x21, 0x30, + 0x04, 0x05, 0x06, 0x07, 0x08, 0x07, 0x00, 0x09, 0x08, 0x06, 0x06, 0x07, + 0x07, 0x07, 0x07, 0x20, 0x06, 0x06, 0x20, 0x07, 0x0b, 0x0c, 0x0b, 0x0d, + 0x0c, 0x02, 0x07, 0x07, 0x0b, 0x0b, 0x06, 0x0b, 0x30, 0x13, 0x08, 0x00, + 0x0c, 0x0d, 0x0c, 0x0e, 0x0d, 0x08, 0x08, 0x0c, 0x00, 0x0c, 0x1f, 0x0c, + 0x08, 0x08, 0x08, 0x08, 0x09, 0x00, 0x0d, 0x0e, 0x0d, 0x0f, 0x0e, 0x09, + 0x09, 0x0d, 0x10, 0x0d, 0x20, 0x0d, 0x30, 0x83, 0x0a, 0x10, 0x12, 0x10, + 0x00, 0x12, 0x12, 0x0a, 0x0a, 0x10, 0x11, 0x0d, 0x10, 0x00, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0b, 0x11, 0x13, 0x11, 0x00, 0x13, 0x13, 0x0b, 0x0b, 0x11, + 0x12, 0x0e, 0x11, 0x00, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x13, 0x15, 0x13, + 0x00, 0x15, 0x15, 0x0c, 0x0c, 0x13, 0x14, 0x11, 0x13, 0x00, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0d, 0x14, 0x16, 0x14, 0x00, 0x16, 0x16, 0x0d, 0x0d, 0x14, + 0x15, 0x10, 0x14, 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x15, 0x17, 0x15, + 0x00, 0x17, 0x17, 0x0e, 0x0e, 0x15, 0x16, 0x12, 0x15, 0x00, 0x0e, 0x0e, + 0x0e, 0x0e, 0x0f, 0x0f, 0x11, 0x0f, 0x01, 0x11, 0x11, 0x0f, 0x0f, 0x0f, + 0x10, 0x0c, 0x20, 0x04, 0x80, 0x20, 0x06, 0x17, 0x19, 0x17, 0x19, 0x19, + 0x10, 0x10, 0x00, 0x17, 0x18, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x11, 0x18, 0x1a, 0x18, 0x1a, 0x1a, 0x11, 0x11, 0x00, 0x18, 0x19, 0x15, + 0x18, 0x11, 0x11, 0x11, 0x11, 0x00, 0x12, 0x1a, 0x1c, 0x19, 0x1b, 0x1b, + 0x12, 0x12, 0x00, 0x1a, 0x1b, 0x18, 0x1a, 0x12, 0x12, 0x12, 0x12, 0x00, + 0x13, 0x1b, 0x1b, 0x1a, 0x1c, 0x1c, 0x13, 0x13, 0x00, 0x1b, 0x1c, 0x17, + 0x1b, 0x13, 0x13, 0x13, 0x13, 0x01, 0x14, 0x1c, 0x1d, 0x1b, 0x1d, 0x1d, + 0x14, 0x20, 0x06, 0x00, 0x19, 0x1c, 0x14, 0x14, 0x14, 0x14, 0x15, 0x1e, + 0x04, 0x1f, 0x1e, 0x1f, 0x1f, 0x15, 0x20, 0x06, 0x1b, 0x1e, 0x00, 0x15, + 0x15, 0x15, 0x15, 0x16, 0x1f, 0x20, 0x1f, 0x10, 0x20, 0x20, 0x16, 0x20, + 0x06, 0x1c, 0x1f, 0x16, 0x16, 0x00, 0x16, 0x16, 0x17, 0x22, 0x04, 0x22, + 0x05, 0x04, 0x00, 0x17, 0x17, 0x22, 0x03, 0x0b, 0x22, 0x17, 0x17, 0x00, + 0x17, 0x17, 0x18, 0x1d, 0x1e, 0x1c, 0x1e, 0x1e, 0x40, 0x18, 0x20, 0x06, + 0x1a, 0x1d, 0x18, 0x18, 0x18, 0x18, 0x08, 0x19, 0x16, 0x18, 0x16, 0x20, + 0x05, 0x19, 0x16, 0x17, 0x00, 0x13, 0x16, 0x19, 0x19, 0x19, 0x19, 0x1a, + 0x08, 0x02, 0x09, 0x08, 0x0a, 0x09, 0x1a, 0x1a, 0x31, 0x1b, 0x1a, 0x00, + 0x1a, 0x1a, 0x1a, 0x1b, 0x0a, 0x0b, 0x0a, 0x0c, 0x00, 0x0b, 0x1b, 0x1b, + 0x0a, 0x0a, 0x05, 0x0a, 0x1b, 0x00, 0x1b, 0x1b, 0x1b, 0x1c, 0x04, 0x05, + 0x04, 0x06, 0x10, 0x05, 0x1c, 0x1c, 0x31, 0x7b, 0x1c, 0x1c, 0x1c, 0x1c, + 0x00, 0x1d, 0x12, 0x14, 0x12, 0x14, 0x14, 0x1d, 0x1d, 0x00, 0x12, 0x13, + 0x0f, 0x12, 0x1d, 0x1d, 0x1d, 0x1d, 0x50, 0x1e, 0x4a, 0x0f, 0x1e, 0x20, + 0x06, 0x1d, 0x20, 0x1e, 0x1e, 0x00, 0x1e, 0x1e, 0x1f, 0x06, 0x07, 0x06, + 0x08, 0x07, 0x00, 0x1f, 0x1f, 0x06, 0x06, 0x22, 0x06, 0x1f, 0x1f, 0x00, + 0x1f, 0x1f, 0x20, 0x0e, 0x10, 0x0e, 0x10, 0x10, 0x00, 0x20, 0x20, 0x0e, + 0x0f, 0x0a, 0x0e, 0x20, 0x20, 0x42, 0x20, 0x2a, 0x3b, 0x22, 0x21, 0x22, + 0x22, 0x2a, 0x41, 0x22, 0x40, 0x1e, 0x3a, 0x46, 0x21, 0x22, 0x19, 0x03, + 0x1d, 0x01, 0x01, 0x01, 0x22, 0x22, 0x19, 0x1a, 0x16, 0x19, 0x32, 0x43, + 0x04, 0xff, 0xff, 0xff, 0xff, 0x07, 0x2f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0xb8, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x3d, 0x1f, 0xd7, 0x08, 0x00, 0x00, 0x00, + 0x01, 0xb8, 0xb5, 0x30, 0xf3, 0x30, 0xde, 0x04, 0x30, 0xea, 0x30, 0xce, + 0x30, 0x06, 0x58, 0x1f, 0x53, 0x00, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x4d, 0x20, 0x07, 0x16, 0x72, 0x00, 0x69, 0x20, 0x0b, 0x6f, 0x06, + 0x00, 0x7f, 0x30, 0x75, 0x74, 0x38, 0x00, 0x2d, 0xa0, 0x83, 0x0d, 0xd0, + 0xff, 0x0e, 0xb0, 0x7f, 0x23, 0x57, 0x6c, 0x04, 0x9a, 0x9b, 0x52, 0xfa, + 0x8b, 0x06, 0x7b, 0x1d, 0xb0, 0xc0, 0x03, 0xc8, 0xb9, 0xac, 0xb9, 0x78, + 0xb1, 0x06, 0x7b, 0x9d, 0x07, 0x13, 0x7f, 0x68, 0xe3, 0x23, 0xf1, 0xb3, + 0xff, 0x68, 0x05, 0xc4, 0x01, 0x21, 0x04, 0x30, 0x02, 0x04, 0x3d, 0x04, + 0x2d, 0x00, 0x1c, 0x20, 0x07, 0x40, 0x26, 0x04, 0x38, 0x20, 0x0b, 0x3e, + 0x04, 0x10, 0x05, 0xb3, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x78, 0x01, + 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0xb9, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xcb, 0x1d, 0xda, 0x08, 0x00, 0x00, 0x00, 0x01, 0xb9, 0xd0, 0x30, + 0xc1, 0x30, 0xab, 0x10, 0x30, 0xf3, 0x30, 0x06, 0x78, 0x1d, 0x56, 0x00, + 0x61, 0x00, 0x04, 0x74, 0x00, 0x69, 0x00, 0x63, 0x20, 0x07, 0x6e, 0x00, + 0x11, 0x20, 0x00, 0x43, 0x20, 0x0b, 0x74, 0x00, 0x79, 0x06, 0x60, 0x7f, + 0xa8, 0x06, 0x90, 0xff, 0x6b, 0x40, 0xff, 0x73, 0x21, 0x0b, 0x61, 0x00, + 0x64, 0xd4, 0x21, 0x11, 0x06, 0x51, 0x7f, 0x6f, 0x21, 0x81, 0x28, 0x61, + 0x83, 0x74, 0x00, 0x40, 0xe0, 0x21, 0x8f, 0x64, 0x00, 0x65, 0x00, 0x6c, + 0x00, 0x60, 0x29, 0x05, 0x80, 0x7f, 0x05, 0xfa, 0xa5, 0xb5, 0x68, 0x82, + 0x84, 0x88, 0x41, 0x51, 0x06, 0xab, 0x17, 0xbc, 0xf0, 0xd2, 0x78, 0xce, + 0x06, 0x9b, 0x9b, 0xea, 0xb3, 0x7f, 0xb2, 0x81, 0x06, 0xb2, 0x7f, 0x63, + 0x24, 0x0f, 0x64, 0x43, 0x07, 0x65, 0xc0, 0x04, 0xa2, 0x79, 0x5d, 0x18, + 0x12, 0x04, 0x30, 0x04, 0x42, 0x04, 0x13, 0x38, 0x04, 0x3a, 0x20, 0x07, + 0x3d, 0x04, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x3c, 0x01, 0x01, + 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x11, 0x14, 0x6a, 0x00, 0x11, 0x0c, 0x00, 0x00, 0x30, 0x01, 0x40, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x63, 0x1d, 0x19, 0x0e, 0x00, 0x00, 0x00, 0x02, 0x40, 0xc6, 0x30, + 0xa3, 0x30, 0xe9, 0x04, 0x30, 0xca, 0x30, 0xde, 0x5d, 0x06, 0x58, 0x1f, + 0x54, 0x00, 0x01, 0x69, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x20, 0x03, + 0x81, 0x10, 0x16, 0x30, 0x7f, 0x30, 0x57, 0xc9, 0x62, 0xa3, 0x90, 0x06, + 0x72, 0xfd, 0x00, 0x00, 0x00, 0xf0, 0xd2, 0x7c, 0xb7, 0x98, 0xb0, 0x08, + 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x53, 0x7f, 0x22, 0x04, 0x38, 0x03, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x10, 0x1e, 0x34, 0xff, + 0x15, 0x01, 0x0b, 0x0b, 0x20, 0x01, 0x01, 0x20, 0x06, 0x09, 0x20, 0x05, + 0x22, 0x01, 0x01, 0x58, 0x17, 0x03, 0x40, 0xd9, 0x28, 0x15, 0xc8, 0x82, + 0x06, 0x88, 0x15, 0x00, 0x00, 0x42, 0x00, 0x65, 0x48, 0x17, 0x74, 0xa4, + 0x10, 0x16, 0x60, 0x7f, 0xf9, 0x28, 0x17, 0x79, 0x72, 0x06, 0x98, 0x17, + 0xa0, 0xbc, 0x0c, 0x7c, 0xb7, 0xb8, 0xd2, 0x06, 0x98, 0x17, 0x0e, 0xf3, + 0x7f, 0x11, 0x04, 0x5a, 0x35, 0x48, 0x17, 0x42, 0x06, 0x48, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x02, 0x28, 0x0c, 0x03, 0x30, 0x01, 0x02, 0x30, 0x06, + 0x20, 0x05, 0x02, 0x02, 0xf2, 0x1c, 0x40, 0x33, 0x28, 0x17, 0x04, 0x40, + 0xc7, 0x30, 0xa3, 0x30, 0x68, 0xd6, 0x28, 0x1b, 0x06, 0x7d, 0x31, 0x44, + 0x2f, 0xaf, 0x62, 0x00, 0xeb, 0xf0, 0x2f, 0xb3, 0x0e, 0xb0, 0x7f, 0x3f, + 0xb1, 0x10, 0x06, 0x51, 0x7f, 0xea, 0x8f, 0xc3, 0x52, 0x20, 0xc9, 0x62, + 0x06, 0x9b, 0x17, 0x14, 0xb5, 0x0c, 0xbe, 0x7c, 0x60, 0xb7, 0x06, 0x98, + 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x38, 0x04, 0x31, 0xe8, 0x48, 0x19, + 0x10, 0x06, 0xb4, 0xff, 0x10, 0x06, 0x90, 0xff, 0x03, 0x28, 0x0c, 0x05, + 0x02, 0x03, 0xa0, 0x20, 0x06, 0x04, 0x20, 0x05, 0x03, 0x03, 0xa4, 0x1d, + 0x89, 0xaa, 0x28, 0x17, 0x05, 0x28, 0x17, 0xe5, 0x28, 0x15, 0xb9, 0x06, + 0xa8, 0x17, 0x75, 0xa8, 0x2f, 0xaf, 0x72, 0x28, 0x19, 0x73, 0x10, 0x06, + 0xa0, 0x7f, 0x61, 0x00, 0x7a, 0xa0, 0x20, 0x01, 0x6f, 0x0e, 0x21, 0xff, + 0xfd, 0x90, 0xc9, 0x62, 0xaf, 0x40, 0x65, 0x06, 0x98, 0x17, 0x50, 0xb4, + 0xec, 0xb7, 0xa4, 0xc2, 0xc4, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x14, + 0x04, 0x43, 0x28, 0x15, 0x40, 0x04, 0x1d, 0x35, 0x04, 0x41, 0x06, 0x48, + 0x19, 0x10, 0x07, 0x54, 0xff, 0x0e, 0x96, 0x7f, 0x04, 0x28, 0x0c, 0x14, + 0x06, 0x03, 0x04, 0x20, 0x06, 0x05, 0x20, 0x05, 0x04, 0x04, 0x00, 0x62, + 0x1d, 0xd5, 0x0d, 0x00, 0x00, 0x06, 0x40, 0x00, 0xa8, 0x30, 0xeb, 0x30, + 0xd0, 0x30, 0xb5, 0x30, 0x45, 0xf3, 0x06, 0x68, 0x19, 0x45, 0x00, 0x6c, + 0x2f, 0xaf, 0x61, 0x28, 0x15, 0x10, 0x61, 0x00, 0x6e, 0x10, 0x16, 0x20, + 0x7f, 0x31, 0x72, 0x14, 0x5c, 0x08, 0xf4, 0x5d, 0x51, 0x68, 0x06, 0x7b, + 0x17, 0xd8, 0xc5, 0x14, 0x18, 0xbc, 0xb0, 0xc0, 0x06, 0x98, 0x17, 0x0e, + 0xf3, 0x7f, 0x2d, 0x04, 0x3b, 0x02, 0x04, 0x4c, 0x04, 0x31, 0x04, 0x30, + 0x28, 0x17, 0x30, 0x34, 0x04, 0x3d, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, + 0xff, 0x05, 0x28, 0x0c, 0x07, 0x04, 0x50, 0x05, 0x20, 0x06, 0x0c, 0x20, + 0x05, 0x05, 0x05, 0x30, 0x1d, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x07, 0x40, + 0xd5, 0x30, 0x30, 0xa3, 0x30, 0x38, 0x1b, 0x06, 0x7d, 0x31, 0x46, 0x00, + 0x69, 0x00, 0x70, 0x65, 0x2f, 0xb1, 0x06, 0x7d, 0xaf, 0x10, 0x0e, 0xf0, + 0x7f, 0x39, 0x8d, 0xcc, 0x91, 0xc0, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x3c, + 0xd5, 0xd0, 0xc5, 0x74, 0xb9, 0xc0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, + 0x24, 0x04, 0x38, 0x04, 0x35, 0x04, 0x68, 0x40, 0x20, 0x05, 0x10, 0x1e, + 0x54, 0xff, 0x06, 0x28, 0x0c, 0x08, 0x05, 0x06, 0xa0, 0x20, 0x06, 0x0a, + 0x20, 0x05, 0x06, 0x06, 0xf5, 0x1c, 0xea, 0x00, 0x0d, 0x00, 0x00, 0x08, + 0x40, 0xae, 0x30, 0xed, 0x00, 0x30, 0xab, 0x30, 0xb9, 0x30, 0xc8, 0x30, + 0xe9, 0x88, 0x06, 0x48, 0x1b, 0x47, 0x00, 0x6a, 0x28, 0x19, 0x72, 0x00, + 0x6f, 0x23, 0x00, 0x6b, 0x4f, 0xb5, 0x74, 0x00, 0xeb, 0x05, 0xc8, 0x25, + 0x08, 0x10, 0x7f, 0x6a, 0x72, 0x2f, 0xbd, 0x05, 0x9f, 0xb8, 0x41, 0x29, + 0x93, 0x67, 0x61, 0x81, 0x63, 0xa0, 0x80, 0x81, 0x6f, 0x0d, 0x80, 0xff, + 0x09, 0x54, 0xfa, 0x8b, 0x61, 0x04, 0x53, 0xaf, 0x65, 0x79, 0x72, 0x06, + 0x5b, 0x19, 0xc0, 0xc9, 0x00, 0x5c, 0xb8, 0x74, 0xce, 0xa4, 0xc2, 0x30, + 0xd1, 0xd0, 0x06, 0x58, 0x1d, 0x0e, 0xf2, 0xff, 0x13, 0x28, 0x17, 0x40, + 0x04, 0x3e, 0x04, 0x01, 0x3a, 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x28, + 0x21, 0x74, 0x30, 0x05, 0xc8, 0x21, 0x10, 0x00, 0x14, 0xff, 0x10, 0x05, + 0xd0, 0xff, 0x07, 0x28, 0x0c, 0x02, 0x06, 0x50, 0x07, 0x20, 0x06, 0x03, + 0x20, 0x05, 0x07, 0x07, 0x7f, 0x1c, 0x20, 0x53, 0x0e, 0x25, 0x15, 0x40, + 0xb3, 0x30, 0xeb, 0x30, 0x1a, 0xc1, 0x30, 0xe3, 0x06, 0x48, 0x13, 0x3f, + 0xff, 0x4b, 0x28, 0x11, 0x72, 0x3d, 0x00, 0xe7, 0x28, 0x0d, 0x0e, 0xd0, + 0x7f, 0x05, 0xb8, 0x0b, 0xbf, 0xff, 0x43, 0x41, 0x7f, 0x18, 0x69, 0x00, + 0x7a, 0x06, 0x60, 0x81, 0x06, 0xf1, 0xff, 0xd1, 0x79, 0x14, 0x10, 0x5c, + 0xdf, 0x5b, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x54, 0xcf, 0x0d, 0x74, 0xb9, + 0x98, 0xcc, 0x06, 0x38, 0x11, 0x0f, 0x53, 0x7f, 0x1a, 0x28, 0x13, 0x1d, + 0x40, 0x04, 0x47, 0x05, 0xe8, 0x0d, 0x10, 0x00, 0x14, 0xff, 0x10, 0x06, + 0x70, 0xff, 0x08, 0x28, 0x0c, 0x14, 0x04, 0x07, 0x08, 0x20, 0x06, 0x06, + 0x20, 0x05, 0x08, 0x08, 0x10, 0xe2, 0x1c, 0xc8, 0x28, 0x17, 0x0a, 0x40, + 0xaf, 0x30, 0x1a, 0xb1, 0x30, 0xb9, 0x06, 0x88, 0x15, 0x38, 0x17, 0x75, + 0x2f, 0xa9, 0xeb, 0xc0, 0x2f, 0xa9, 0x10, 0x16, 0x50, 0x7f, 0x93, 0x5e, + 0x4b, 0x51, 0xaf, 0x65, 0x81, 0x06, 0x98, 0x17, 0xe0, 0xcf, 0xe4, 0xce, + 0xa4, 0xc2, 0x06, 0xb8, 0x17, 0x80, 0x0e, 0xd3, 0x7f, 0x1a, 0x04, 0x43, + 0x04, 0x3a, 0x04, 0x35, 0x34, 0x04, 0x41, 0x06, 0x88, 0x17, 0x10, 0x16, + 0xd4, 0xff, 0x09, 0x28, 0x0c, 0x09, 0x08, 0x50, 0x09, 0x20, 0x06, 0x07, + 0x20, 0x05, 0x09, 0x09, 0xec, 0x1d, 0x40, 0x87, 0x28, 0x17, 0x0b, 0x40, + 0xec, 0x30, 0xb8, 0x30, 0x45, 0xe3, 0x06, 0xa8, 0x17, 0x4c, 0x00, 0x65, + 0x2e, 0xab, 0x68, 0x06, 0x8f, 0xaf, 0xc1, 0x07, 0x70, 0x7f, 0x06, 0x5f, + 0xad, 0x00, 0x00, 0x41, 0x00, 0x6c, 0x21, 0x81, 0x58, 0x73, 0x29, 0x97, + 0x69, 0x2f, 0xb9, 0x0e, 0x11, 0xff, 0xb1, 0x83, 0xc0, 0x63, 0x4e, 0x06, + 0x9b, 0x15, 0x2b, 0xaf, 0xb8, 0x00, 0xc8, 0x06, 0x98, 0x15, 0x0f, 0x13, + 0x7f, 0x47, 0x1b, 0x28, 0x13, 0x36, 0x04, 0x30, 0x06, 0x68, 0x15, 0x0f, + 0x94, 0xff, 0x10, 0x06, 0x70, 0xff, 0x45, 0x0a, 0x28, 0x0c, 0x01, 0x09, + 0x0a, 0x20, 0x06, 0x08, 0x20, 0x05, 0x00, 0x0a, 0x0a, 0xb6, 0x1d, 0xf9, + 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x40, 0xb7, 0x30, 0xe5, 0x30, 0xb3, 0x30, + 0x15, 0xc9, 0x30, 0xe9, 0x06, 0x68, 0x1b, 0x53, 0x28, 0x13, 0x6b, 0x26, + 0x91, 0x54, 0x64, 0x2f, 0xb3, 0x72, 0x0e, 0xc0, 0x7f, 0x72, 0x06, 0x48, + 0x1b, 0x53, 0x00, 0x56, 0x63, 0x2f, 0xb1, 0x74, 0x28, 0x97, 0x72, 0x28, + 0x19, 0x0e, 0x11, 0xff, 0xaf, 0x04, 0x65, 0x93, 0x5e, 0xf0, 0x53, 0x06, + 0x9b, 0x17, 0x88, 0xc2, 0x03, 0x54, 0xcf, 0x54, 0xb3, 0x74, 0xb9, 0x06, + 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x01, 0x28, 0x04, 0x3a, 0x04, 0x3e, 0x04, + 0x34, 0x28, 0x1d, 0x74, 0x40, 0x06, 0x48, 0x1b, 0x0f, 0x94, 0xff, 0x10, + 0x06, 0x50, 0xff, 0x0b, 0x38, 0x0c, 0x0a, 0x0b, 0xa0, 0x20, 0x06, 0x0b, + 0x20, 0x05, 0x0b, 0x0b, 0xeb, 0x1d, 0xe2, 0x83, 0x28, 0x17, 0x0d, 0x40, + 0xf4, 0x30, 0xed, 0x06, 0x88, 0x13, 0x3f, 0xff, 0x5f, 0x56, 0x2e, 0xaf, + 0x6f, 0x28, 0x11, 0x06, 0x7f, 0xaf, 0x07, 0x70, 0x7f, 0x06, 0x38, 0x13, + 0x51, 0x7f, 0x58, 0x61, 0x41, 0x81, 0x6e, 0x06, 0x60, 0x81, 0x06, 0xf1, + 0xff, 0xd1, 0x53, 0x57, 0x10, 0x7f, 0xc9, 0x62, 0x06, 0x98, 0x17, 0x14, + 0xbe, 0x5c, 0xb8, 0x30, 0xec, 0xb7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, + 0x12, 0x04, 0x3b, 0x04, 0x5c, 0x51, 0x28, 0x13, 0x30, 0x06, 0x48, 0x15, + 0x0f, 0x94, 0xff, 0x10, 0x06, 0x70, 0xff, 0x0c, 0x0c, 0xa3, 0x70, 0x01, + 0x02, 0x40, 0x0a, 0xc7, 0x1c, 0xdb, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x4a, + 0x01, 0x38, 0x34, 0x0b, 0x01, 0x20, 0x06, 0x09, 0x20, 0x05, 0x01, 0x23, + 0x01, 0x02, 0x20, 0x04, 0x03, 0x01, 0x02, 0x30, 0x06, 0x20, 0x05, 0x11, + 0x02, 0x02, 0x03, 0x20, 0x04, 0x05, 0x02, 0x03, 0x20, 0x06, 0x44, 0x04, + 0x20, 0x05, 0x03, 0x03, 0x04, 0x20, 0x04, 0x06, 0x03, 0x51, 0x04, 0x20, + 0x06, 0x05, 0x20, 0x05, 0x04, 0x04, 0x05, 0x20, 0x04, 0x14, 0x07, 0x04, + 0x05, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x05, 0x05, 0x45, 0x06, 0x20, 0x04, + 0x08, 0x05, 0x06, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x11, 0x06, 0x06, 0x07, + 0x20, 0x04, 0x02, 0x06, 0x07, 0x20, 0x06, 0x44, 0x03, 0x20, 0x05, 0x07, + 0x07, 0x08, 0x20, 0x04, 0x04, 0x07, 0x51, 0x08, 0x20, 0x06, 0x06, 0x20, + 0x05, 0x08, 0x08, 0x09, 0x40, 0x03, 0x51, 0x09, 0x20, 0x06, 0x07, 0x20, + 0x05, 0x09, 0x09, 0x0a, 0x20, 0x04, 0x17, 0x01, 0x09, 0x0a, 0x20, 0x06, + 0x08, 0x20, 0x05, 0x38, 0xd5, 0xd8, 0xdf, 0xc0, 0xf0, 0xd7, 0x3f, 0xf2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x74, 0x49, 0x00, + 0x11, 0x08, 0x00, 0x00, 0x30, 0x01, 0x41, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe7, 0xe7, 0x8c, + 0x6b, 0x00, 0x00, 0x00, 0x02, 0x41, 0xaa, 0x30, 0xfc, 0x30, 0xb9, 0x00, + 0x30, 0xc8, 0x30, 0xe9, 0x30, 0xea, 0x30, 0xa2, 0x00, 0x30, 0x96, 0x99, + 0xfd, 0x90, 0x79, 0x72, 0x25, 0x04, 0x52, 0x30, 0x57, 0xdf, 0x57, 0x05, + 0x58, 0x2f, 0x41, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, + 0x00, 0x04, 0x61, 0x00, 0x6c, 0x00, 0x69, 0x20, 0x05, 0x6e, 0x00, 0x15, + 0x20, 0x00, 0x43, 0x20, 0x0d, 0x70, 0x20, 0x0d, 0x74, 0x40, 0x15, 0x05, + 0x20, 0x00, 0x54, 0x00, 0x65, 0x20, 0x21, 0x72, 0x40, 0x11, 0x5a, 0x6f, + 0x20, 0x2b, 0x79, 0x03, 0x88, 0xcc, 0xd0, 0x59, 0x69, 0x20, 0x87, 0x65, + 0xa8, 0x20, 0x7f, 0x64, 0x40, 0x05, 0x6c, 0x20, 0x93, 0x20, 0x00, 0x63, + 0xd5, 0xc0, 0x8b, 0x30, 0x1d, 0x61, 0xe0, 0xb3, 0x65, 0x20, 0xb3, 0x6e, + 0x20, 0xa1, 0xaa, 0x03, 0x30, 0xff, 0x73, 0x20, 0x6f, 0x68, 0x20, 0xed, + 0x73, 0x21, 0x05, 0x48, 0xb5, 0x40, 0x69, 0x70, 0x21, 0x1d, 0x31, 0x21, + 0x61, 0x20, 0x95, 0x74, 0x21, 0x29, 0xad, 0xd1, 0x09, 0x69, 0x21, 0x3f, + 0x6d, 0x03, 0x80, 0xff, 0x31, 0x61, 0x6f, 0x60, 0xff, 0x7b, 0x6c, 0x60, + 0xff, 0xd1, 0x8b, 0x31, 0x1d, 0x00, 0x31, 0xb3, 0x61, 0x04, 0x00, 0x7f, + 0x71, 0x7f, 0xc0, 0xf2, 0x0b, 0x03, 0xb0, 0x7d, 0x00, 0x00, 0xb3, 0x6f, + 0x27, 0x59, 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x32, 0xf9, 0xf4, 0x76, 0x96, + 0x10, 0x8f, 0x3a, 0x53, 0x05, 0xdb, 0x27, 0x24, 0xc6, 0xa4, 0xc2, 0x00, + 0xb8, 0xd2, 0x08, 0xb8, 0x7c, 0xc7, 0xac, 0xb9, 0x00, 0x44, 0xc5, 0x90, + 0xce, 0x3c, 0xd5, 0x38, 0xd1, 0x07, 0x4c, 0xd1, 0xac, 0xb9, 0xa0, 0x20, + 0x03, 0x06, 0x33, 0x7f, 0x52, 0x7f, 0xad, 0x32, 0x7b, 0x6f, 0x23, 0x69, + 0x66, 0x23, 0x09, 0x33, 0x9d, 0x65, 0x62, 0x11, 0x07, 0x69, 0x00, 0x6a, + 0x00, 0x6b, 0x00, 0x23, 0x8f, 0x02, 0x92, 0x85, 0xb3, 0xd9, 0x70, 0xf3, + 0xa2, 0x7f, 0x05, 0x11, 0xf9, 0x5d, 0x18, 0x10, 0x04, 0x32, 0x04, 0x00, + 0x41, 0x04, 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x05, 0x3b, 0x04, 0x38, + 0x04, 0x39, 0x20, 0x0d, 0x3a, 0x20, 0x0b, 0x34, 0x4f, 0x04, 0x22, 0xe7, + 0x20, 0x17, 0x3e, 0x40, 0x15, 0x47, 0x04, 0x45, 0x3d, 0x60, 0x13, 0x42, + 0x04, 0x35, 0x20, 0x2b, 0x40, 0x20, 0x29, 0xcc, 0x30, 0x1b, 0x30, 0x07, + 0x4f, 0x04, 0x0a, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0x06, + 0x06, 0x01, 0x07, 0x06, 0x01, 0x30, 0x06, 0x20, 0x04, 0x01, 0x00, 0x01, + 0xdd, 0xe6, 0xfc, 0x69, 0x00, 0x00, 0x03, 0x08, 0x41, 0xcb, 0x30, 0xe5, + 0x28, 0x19, 0xb5, 0x30, 0xa6, 0x88, 0x28, 0x1d, 0xa6, 0x30, 0xa7, 0x28, + 0x25, 0xeb, 0x30, 0xba, 0x15, 0x30, 0xde, 0x5d, 0x05, 0x7f, 0xc5, 0x4e, + 0x27, 0xf1, 0x77, 0x28, 0x09, 0x5a, 0x53, 0x27, 0xef, 0x75, 0x28, 0x1f, + 0x34, 0x93, 0x57, 0x67, 0x81, 0x73, 0xd0, 0x05, 0x40, 0x7f, 0x30, 0x77, + 0x76, 0x67, 0x07, 0x65, 0x00, 0x2d, 0x00, 0x75, 0x47, 0x48, 0xa1, 0x50, + 0x7f, 0x38, 0x21, 0x75, 0x40, 0x9d, 0x75, 0x28, 0x2b, 0xd6, 0x04, 0x70, + 0xff, 0x39, 0x19, 0xfc, 0x28, 0x8b, 0x77, 0x05, 0xa0, 0xf7, 0x91, 0x7f, + 0x75, 0xbe, 0x29, 0x69, 0x76, 0x48, 0x0d, 0xf0, 0xf9, 0x38, 0x1b, 0x04, + 0xb0, 0xfb, 0x70, 0x7f, 0x65, 0xf4, 0x21, 0x7f, 0x39, 0x81, 0x51, 0x79, + 0x00, 0x10, 0x7d, 0x72, 0x04, 0xaf, 0xd2, 0xb0, 0x65, 0x00, 0x57, 0x53, + 0x01, 0x5a, 0x14, 0x5c, 0xeb, 0x58, 0xc1, 0x05, 0x92, 0xf3, 0xbf, 0xff, + 0x74, 0xb2, 0xac, 0xc0, 0xb0, 0x28, 0x1b, 0x00, 0xe8, 0xc6, 0x7c, 0xc7, + 0xa4, 0xc2, 0x20, 0x00, 0x2a, 0xfc, 0xc8, 0x05, 0xdf, 0xbf, 0x4e, 0x4a, + 0xd7, 0x75, 0x23, 0x83, 0x2d, 0x2b, 0x00, 0x5a, 0x2b, 0xa3, 0x69, 0x2b, + 0x13, 0x2d, 0x05, 0xa3, 0x81, 0x33, 0x7f, 0xea, 0x00, 0x31, 0xfd, 0x3a, + 0x9d, 0x33, 0x75, 0x6c, 0x04, 0xef, 0xce, 0x1d, 0x27, 0xf9, 0x32, 0x20, + 0x04, 0x4b, 0x28, 0x0f, 0x20, 0x00, 0x2e, 0x04, 0x36, 0xc5, 0x27, 0xff, + 0x50, 0x0b, 0x23, 0x04, 0x4d, 0x28, 0x27, 0x4c, 0x28, 0x33, 0xc0, 0x0c, + 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, + 0x50, 0x02, 0x20, 0x06, 0x05, 0x20, 0x04, 0x02, 0x02, 0xe7, 0xe7, 0x01, + 0x8c, 0x6b, 0x00, 0x00, 0x04, 0x41, 0xce, 0x28, 0x15, 0x00, 0xb6, 0x30, + 0xf3, 0x30, 0xc6, 0x30, 0xea, 0x30, 0x4f, 0xc8, 0x20, 0x03, 0xfc, 0x30, + 0x05, 0xf4, 0x97, 0x3f, 0xff, 0x38, 0x0f, 0x3f, 0xb7, 0xef, 0x3b, 0x2b, + 0x04, 0x9b, 0x1b, 0x01, 0x1f, 0x2f, 0x69, 0x2f, 0xb7, 0x3f, 0x11, 0x58, + 0x0d, 0x50, 0x9b, 0xdf, 0x04, 0x97, 0x13, 0x59, 0x17, 0xf6, 0x40, 0x63, + 0x3f, 0x77, 0x3d, 0xa9, 0x58, 0x8d, 0x03, 0x9d, 0x8f, 0xfc, 0x02, 0x9f, + 0xaf, 0x3f, 0x9b, 0x05, 0x11, 0x01, 0x01, 0x30, 0x7f, 0x3e, 0xaf, 0x04, + 0x7f, 0xc5, 0x17, 0x53, 0x03, 0xe8, 0x90, 0x30, 0x57, 0x3a, 0x53, 0x06, + 0x38, 0x13, 0x3f, 0xff, 0x00, 0x78, 0xb1, 0x58, 0xb3, 0x4c, 0xd1, 0xac, + 0xb9, 0x7c, 0xa0, 0x20, 0x03, 0x06, 0x18, 0x15, 0x5b, 0x17, 0x52, 0xe5, + 0x3b, 0x19, 0x69, 0x00, 0x17, 0x6a, 0x00, 0x6b, 0x06, 0x82, 0x7f, 0xf3, + 0xa2, 0x7f, 0x3a, 0xa7, 0x05, 0x11, 0xfd, 0x15, 0x00, 0x00, 0x21, 0x2f, + 0xff, 0x32, 0x20, 0x03, 0x40, 0x28, 0x11, 0x44, 0x30, 0x2f, 0xfb, 0x20, + 0x00, 0x42, 0x40, 0x0d, 0x40, 0x04, 0x1b, 0x38, 0x04, 0x42, 0x28, 0x33, + 0x30, 0x07, 0x4f, 0x04, 0xa8, 0x1b, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, + 0xf0, 0x7f, 0x03, 0x03, 0x07, 0x03, 0x06, 0x07, 0x03, 0xa0, 0x20, 0x06, + 0x06, 0x20, 0x04, 0x03, 0x03, 0x29, 0xf7, 0x0b, 0x82, 0x2d, 0x1f, 0x05, + 0x41, 0xaf, 0x30, 0xa3, 0x28, 0x19, 0xf3, 0x09, 0x30, 0xba, 0x30, 0xe9, + 0x28, 0x1d, 0xc9, 0x30, 0x05, 0xfd, 0x35, 0x55, 0x51, 0x4e, 0x2f, 0x65, + 0x28, 0x11, 0x73, 0x2f, 0xb1, 0x61, 0x28, 0x19, 0xc0, 0x04, 0xd7, 0x87, + 0x10, 0x0f, 0xf0, 0x7f, 0x06, 0x66, 0xeb, 0x58, 0x70, 0x51, 0xc0, 0x05, + 0xf2, 0xf5, 0x9f, 0xff, 0x38, 0xd0, 0x90, 0xc9, 0x9c, 0xb7, 0x35, 0xdc, + 0xb4, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x1a, 0x28, 0x15, 0x38, 0x28, + 0x13, 0x11, 0x41, 0x04, 0x3b, 0x28, 0x21, 0x3d, 0x04, 0x34, 0x04, 0xa8, + 0x03, 0x90, 0x10, 0x18, 0x34, 0xff, 0x04, 0x04, 0xd0, 0x01, 0x7b, 0xec, + 0xd1, 0x6c, 0x84, 0x25, 0x15, 0x41, 0x57, 0x53, 0xaa, 0x28, 0x17, 0xb9, + 0x30, 0x45, 0xc8, 0x28, 0x17, 0xea, 0x30, 0xa2, 0x06, 0x08, 0x17, 0x53, + 0x2f, 0xa5, 0x45, 0x75, 0x4b, 0x2f, 0x20, 0x00, 0x41, 0x2f, 0xa5, 0x73, + 0x2f, 0xb7, 0x6c, 0x72, 0x28, 0x1f, 0x3f, 0x3f, 0x61, 0x05, 0x2d, 0xc4, + 0xf0, 0x73, 0x65, 0x00, 0x05, 0x2d, 0x00, 0x4d, 0x00, 0xe9, 0x4f, 0xab, + 0x64, 0x4f, 0x3d, 0x62, 0x6e, 0x40, 0x8d, 0x04, 0x7e, 0xb1, 0x53, 0x00, + 0xfc, 0x2f, 0x9d, 0x61, 0xb7, 0x00, 0x00, 0x85, 0x6e, 0x05, 0x6e, 0xc0, + 0x00, 0x11, 0x73, 0x20, 0x20, 0xff, 0x3f, 0xc3, 0x05, 0x50, 0xff, 0xc0, + 0x01, 0x70, 0x7f, 0x04, 0x7f, 0xcf, 0x57, 0x53, 0xb3, 0x6f, 0x27, 0x59, + 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x58, 0x1b, 0xac, 0xc0, 0xb0, 0x08, + 0xc6, 0xa4, 0xc2, 0x24, 0x20, 0x03, 0xb8, 0xd2, 0x08, 0x01, 0xb8, 0x7c, + 0xc7, 0xac, 0xb9, 0x44, 0xc5, 0x05, 0xb8, 0x23, 0x6a, 0x5a, 0x2b, 0x97, + 0x32, 0xe9, 0x2d, 0x00, 0x03, 0x7d, 0xeb, 0x05, 0xe2, 0x7f, 0xe1, 0x88, + 0x06, 0x41, 0xff, 0x2e, 0x04, 0x36, 0x28, 0x15, 0x30, 0x04, 0x4f, 0x08, + 0x04, 0x20, 0x00, 0x10, 0x28, 0x23, 0x41, 0x04, 0x42, 0x2b, 0x04, 0x40, + 0x20, 0x0f, 0x3b, 0x28, 0x2d, 0x4f, 0x05, 0x28, 0x23, 0x06, 0xf4, 0xff, + 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05, + 0x02, 0x05, 0x08, 0x01, 0x08, 0x05, 0x05, 0x20, 0x01, 0x2c, 0x00, 0xe7, + 0x91, 0x62, 0x00, 0x00, 0x07, 0x41, 0xbf, 0x8d, 0x28, 0x13, 0xde, 0x30, + 0xcb, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x54, 0x2f, 0xa3, 0x1f, 0x73, 0x00, + 0x6d, 0x4f, 0xa9, 0x05, 0x58, 0x09, 0x00, 0xb0, 0x7f, 0x04, 0x77, 0xfd, + 0x01, 0x90, 0x7f, 0xe0, 0x05, 0x78, 0x0f, 0x08, 0x51, 0x7f, 0x06, 0x21, + 0xff, 0x58, 0xaf, 0x65, 0x6c, 0x9a, 0x20, 0x3c, 0x5c, 0x06, 0x78, 0x17, + 0xdc, 0xd0, 0x88, 0xc9, 0x54, 0x07, 0xba, 0x74, 0xc7, 0xc8, 0xb2, 0x05, + 0xd8, 0x0f, 0x00, 0x53, 0x7f, 0x05, 0x58, 0x0b, 0xa8, 0x00, 0x33, 0xff, + 0xe2, 0x06, 0x63, 0xff, 0x22, 0x28, 0x13, 0x41, 0x04, 0x3c, 0xb8, 0x28, + 0x19, 0x3d, 0x05, 0x68, 0x09, 0x0f, 0xe3, 0x7f, 0x10, 0x06, 0xe0, 0xff, + 0x06, 0x06, 0x05, 0x10, 0x06, 0x05, 0x05, 0x20, 0x05, 0x05, 0x07, 0x06, + 0x06, 0x80, 0x20, 0x01, 0x88, 0xe1, 0xbd, 0x68, 0x00, 0x00, 0x08, 0x00, + 0x41, 0xf4, 0x30, 0xa3, 0x30, 0xaf, 0x30, 0xc8, 0x2a, 0x30, 0xea, 0x06, + 0x68, 0x19, 0x56, 0x2f, 0xa3, 0x63, 0x2f, 0xaf, 0x6f, 0xe0, 0x4f, 0xa1, + 0x06, 0x18, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x7e, 0x1a, 0x59, 0x29, + 0x40, 0x52, 0x06, 0x78, 0x15, 0x00, 0x00, 0x45, 0xbe, 0xa0, 0xd1, 0x34, + 0xac, 0xb9, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x12, 0x28, 0x0d, 0x3a, + 0x04, 0x06, 0x42, 0x04, 0x3e, 0x04, 0x40, 0x06, 0x48, 0x17, 0x10, 0x16, + 0xf4, 0xff, 0x07, 0x00, 0x07, 0x08, 0x07, 0x08, 0x08, 0x07, 0x07, 0x06, + 0x08, 0x08, 0x02, 0x07, 0x07, 0x20, 0x01, 0x1d, 0xe5, 0x16, 0x00, 0x67, + 0x00, 0x00, 0x09, 0x41, 0x7f, 0x89, 0xaa, 0x0a, 0x30, 0xfc, 0x30, 0xb9, + 0x28, 0x19, 0xe9, 0x06, 0x48, 0x1b, 0x57, 0xa8, 0x2f, 0xa3, 0x73, 0x28, + 0x17, 0x65, 0x28, 0x17, 0x6e, 0x00, 0x20, 0x0a, 0x00, 0x41, 0x00, 0x75, + 0x40, 0x0f, 0x72, 0x2f, 0xc7, 0x6c, 0xc1, 0x05, 0x2e, 0xc1, 0xf0, 0x6f, + 0x65, 0x00, 0x2d, 0x00, 0x4f, 0x28, 0xa9, 0x55, 0x63, 0x2f, 0xbd, 0x64, + 0x4f, 0xbf, 0x74, 0x40, 0x89, 0x65, 0x04, 0xe0, 0xff, 0x5b, 0x61, 0x00, + 0x00, 0x87, 0x6e, 0x05, 0x4f, 0xbb, 0x00, 0x11, 0x6f, 0x20, 0x05, 0xc0, + 0xff, 0x01, 0x70, 0x7f, 0x82, 0x04, 0x7f, 0xcb, 0x7f, 0x89, 0xb3, 0x6f, + 0x27, 0x06, 0xa8, 0x19, 0xe8, 0x02, 0xc6, 0xa4, 0xc2, 0x34, 0xd1, 0x24, + 0x20, 0x05, 0xb8, 0x06, 0xd2, 0x08, 0xb8, 0x7c, 0xc7, 0x05, 0xf8, 0x23, + 0x73, 0x7f, 0x2d, 0xac, 0x00, 0x03, 0x79, 0xeb, 0x05, 0xe2, 0x7f, 0xe1, + 0xc2, 0x7f, 0x05, 0x51, 0xfd, 0x00, 0x00, 0x04, 0x17, 0x04, 0x30, 0x04, + 0x3f, 0x20, 0x03, 0x34, 0x04, 0x40, 0x3d, 0x20, 0x09, 0x4f, 0x04, 0x20, + 0x00, 0x10, 0x04, 0x15, 0x32, 0x04, 0x41, 0x28, 0x29, 0x40, 0x20, 0x19, + 0x3b, 0x05, 0x08, 0x2b, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x08, 0x08, 0x02, 0x08, 0x02, 0x02, 0x84, 0x28, 0x19, 0x02, 0x03, 0x08, + 0x08, 0x20, 0x01, 0x4b, 0xe9, 0x20, 0x64, 0x52, 0x00, 0x3f, 0xff, 0x01, + 0x01, 0x06, 0x01, 0x07, 0x30, 0x06, 0x01, 0x30, 0x06, 0x20, 0x04, 0x01, + 0x01, 0x02, 0x02, 0x05, 0x03, 0x02, 0x03, 0x03, 0x02, 0x20, 0x06, 0x05, + 0x20, 0x04, 0x81, 0x20, 0x0d, 0x03, 0x07, 0x03, 0x06, 0x07, 0x03, 0x20, + 0x06, 0x42, 0x06, 0x20, 0x04, 0x03, 0x03, 0x04, 0x04, 0xd0, 0x01, 0x05, + 0x00, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05, 0x05, 0x08, 0x08, 0x01, 0x08, + 0x05, 0x05, 0x20, 0x01, 0x06, 0x06, 0x05, 0x43, 0x06, 0x40, 0x05, 0x05, + 0x07, 0x06, 0x06, 0x20, 0x01, 0xf8, 0x9f, 0xc0, 0xf0, 0x97, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x9c, 0x51, 0x00, + 0x11, 0x09, 0x00, 0x00, 0x30, 0x01, 0x42, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x47, 0x22, 0xa4, + 0x0b, 0x00, 0x00, 0x00, 0x02, 0x42, 0xa6, 0x30, 0xa3, 0x30, 0xfc, 0x10, + 0x30, 0xf3, 0x30, 0x06, 0x78, 0x1d, 0x56, 0x00, 0x69, 0x00, 0x15, 0x65, + 0x00, 0x6e, 0x20, 0x01, 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x06, 0x49, 0x20, + 0x70, 0x57, 0x60, 0xff, 0x0e, 0xf1, 0x7f, 0x06, 0x51, 0xfd, 0x00, 0x00, + 0xf4, 0x7e, 0x02, 0x5f, 0x4e, 0xb3, 0x7e, 0xde, 0x5d, 0x06, 0x7b, 0x1d, + 0x48, 0x5c, 0xbe, 0x06, 0xdb, 0x97, 0x57, 0x43, 0x7d, 0x06, 0x92, 0x81, + 0x06, 0xf1, 0xff, 0x12, 0x04, 0x03, 0x35, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x0f, 0x14, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x01, 0x08, 0x08, 0x09, + 0x08, 0x08, 0x01, 0x01, 0x12, 0x09, 0x08, 0x02, 0x20, 0x05, 0x01, 0x01, + 0x58, 0x17, 0x03, 0x02, 0x42, 0xd6, 0x30, 0xeb, 0x30, 0xb2, 0x28, 0x17, + 0xe9, 0x90, 0x28, 0x1b, 0xc8, 0x30, 0x06, 0x15, 0x1f, 0x42, 0x00, 0x75, + 0x00, 0x14, 0x72, 0x00, 0x67, 0x48, 0x1b, 0x6c, 0x28, 0x1b, 0x6e, 0x00, + 0x40, 0x64, 0x10, 0x15, 0xc0, 0x7f, 0x03, 0x5e, 0x14, 0x5c, 0x39, 0x68, + 0x20, 0x70, 0x51, 0x06, 0x78, 0x19, 0x80, 0xbd, 0x74, 0xb9, 0x90, 0x00, + 0xac, 0x80, 0xb7, 0xb8, 0xd2, 0x20, 0x00, 0xfc, 0x60, 0xc8, 0x06, 0x1f, + 0xbb, 0x0e, 0xf3, 0x7f, 0x11, 0x04, 0x43, 0x04, 0x40, 0x28, 0x04, 0x33, + 0x48, 0x1d, 0x3b, 0x28, 0x1f, 0x3d, 0x04, 0x34, 0xc0, 0x05, 0xc8, 0x23, + 0x10, 0x16, 0xf4, 0xff, 0x02, 0x01, 0x02, 0x01, 0x03, 0x03, 0x40, 0x02, + 0x20, 0x04, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x11, 0x06, 0x22, 0xbe, + 0x28, 0x17, 0x04, 0x42, 0xb1, 0x28, 0x17, 0x1a, 0xf3, 0x30, 0xc6, 0x28, + 0x19, 0x06, 0x5d, 0x33, 0x43, 0x2e, 0xa7, 0x72, 0x83, 0x2f, 0xb3, 0x6e, + 0x00, 0x74, 0x00, 0x68, 0x2f, 0xbb, 0x05, 0xfe, 0xb5, 0xa3, 0xf0, 0x7f, + 0x65, 0x05, 0xef, 0xb9, 0x4b, 0x00, 0xe4, 0x29, 0x17, 0x30, 0xfd, 0xdc, + 0x06, 0x5d, 0xb3, 0x91, 0x7f, 0x7a, 0x06, 0x21, 0x7d, 0xd1, 0xff, 0x06, + 0x30, 0x7f, 0x4b, 0x51, 0x0c, 0x69, 0x60, 0x7f, 0x98, 0x06, 0x78, 0x15, + 0x2f, 0xff, 0xcf, 0x78, 0x1d, 0xb9, 0x50, 0xd1, 0x06, 0x58, 0x13, 0x52, + 0x7f, 0xd3, 0x7f, 0xeb, 0x06, 0x43, 0xff, 0x51, 0xed, 0x06, 0x81, 0xff, + 0x1a, 0x28, 0x0b, 0x40, 0x04, 0x38, 0x28, 0x15, 0x5c, 0x42, 0x20, 0x05, + 0x4f, 0x05, 0xc8, 0x13, 0x08, 0x34, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x03, + 0x02, 0x08, 0x03, 0x02, 0x04, 0x04, 0x28, 0x19, 0x04, 0x05, 0x02, 0x00, + 0x03, 0x03, 0x03, 0x03, 0x26, 0x21, 0x2b, 0x0a, 0x00, 0x00, 0x00, 0x05, + 0x42, 0xcb, 0x30, 0xfc, 0x30, 0x40, 0xc0, 0x20, 0x03, 0xfb, 0x30, 0xa8, + 0x30, 0xb9, 0x30, 0x41, 0xbf, 0x20, 0x0d, 0xe9, 0x30, 0xa4, 0x30, 0xd2, + 0x05, 0x88, 0x25, 0x04, 0x4c, 0x00, 0x6f, 0x00, 0x77, 0x2f, 0xad, 0x72, + 0x00, 0x17, 0x20, 0x00, 0x41, 0x2f, 0xbb, 0x73, 0x28, 0x1f, 0x38, 0x27, + 0x05, 0x78, 0x1f, 0x51, 0x42, 0x2f, 0xa3, 0x73, 0x20, 0x75, 0x65, 0x00, + 0x2d, 0x40, 0x7f, 0xb5, 0x50, 0x7d, 0x63, 0x28, 0xa3, 0x05, 0x58, 0x21, + 0x4e, 0x48, 0x8b, 0x64, 0x41, 0x01, 0x6e, 0xf6, 0x40, 0xfd, 0x31, 0x0b, + 0x72, 0x2f, 0xbf, 0x50, 0x85, 0x05, 0x70, 0xff, 0x61, 0xa0, 0x06, 0xa1, + 0x7f, 0x6a, 0x06, 0x80, 0x7d, 0x00, 0x00, 0x0b, 0x4e, 0x65, 0x04, 0x59, + 0x30, 0x57, 0x29, 0x52, 0x06, 0x78, 0x19, 0xc8, 0xb2, 0x00, 0x54, 0xb3, + 0x78, 0xc6, 0xa4, 0xc2, 0x30, 0xd1, 0x02, 0x7c, 0xb7, 0x74, 0xc7, 0x88, + 0xd7, 0x05, 0xf8, 0x21, 0x4e, 0x8d, 0x82, 0x7d, 0x2d, 0x00, 0x4f, 0x23, + 0x8b, 0x52, 0x81, 0x6e, 0x4b, 0xab, 0x11, 0x6a, 0x00, 0x6b, 0x05, 0x43, + 0x7f, 0x69, 0x00, 0x78, 0x42, 0x7f, 0x55, 0xc1, 0x06, 0x23, 0xff, 0x1d, + 0x28, 0x13, 0x36, 0x28, 0x15, 0x4f, 0x28, 0x13, 0x01, 0x20, 0x00, 0x10, + 0x04, 0x32, 0x04, 0x41, 0x28, 0x21, 0xf0, 0x38, 0x29, 0x05, 0x58, 0x23, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x03, 0x01, 0x03, 0x40, + 0x02, 0x38, 0x19, 0x02, 0x06, 0x03, 0x04, 0x04, 0x04, 0x00, 0x04, 0x46, + 0x22, 0x1b, 0x0b, 0x00, 0x00, 0x06, 0x28, 0x42, 0xaa, 0x28, 0x17, 0xd0, + 0x06, 0xa8, 0x17, 0x55, 0x00, 0x70, 0xdc, 0x20, 0x01, 0x06, 0x98, 0x17, + 0x48, 0x2f, 0x2f, 0x38, 0x0d, 0x06, 0x78, 0x17, 0x4f, 0x00, 0x63, 0x62, + 0x06, 0x88, 0x13, 0x3f, 0xff, 0x41, 0x00, 0x6c, 0x2f, 0xa9, 0x06, 0x97, + 0x97, 0xa1, 0x06, 0xf0, 0x7f, 0x0a, 0x06, 0xe8, 0x17, 0x24, 0xc6, 0x84, + 0xbc, 0x06, 0xb8, 0x17, 0x78, 0x4f, 0x83, 0x7f, 0x06, 0x58, 0x17, 0x92, + 0x7f, 0x06, 0x38, 0x15, 0x00, 0x00, 0x12, 0x2e, 0x04, 0x35, 0x28, 0x05, + 0x45, 0x06, 0x88, 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, + 0x00, 0x07, 0x04, 0x04, 0x01, 0x01, 0x05, 0x05, 0x04, 0x00, 0x01, 0x03, + 0x07, 0x05, 0x05, 0x05, 0x05, 0x58, 0x00, 0x22, 0x29, 0x0a, 0x00, 0x00, + 0x07, 0x42, 0xb6, 0x02, 0x30, 0xeb, 0x30, 0xc4, 0x30, 0xd6, 0x20, 0x05, + 0xaf, 0xd1, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x53, 0x2f, 0xaf, 0x6c, 0x00, + 0x7a, 0x27, 0x1d, 0x56, 0x75, 0x2f, 0xa9, 0x67, 0x06, 0xa0, 0x7f, 0x6f, + 0x06, 0x40, 0x81, 0x07, 0x50, 0xff, 0x69, 0xed, 0x2f, 0xa9, 0x71, 0x81, + 0x39, 0x11, 0x73, 0x05, 0x69, 0x15, 0x00, 0x11, 0xff, 0x6f, 0x05, 0xef, + 0xb6, 0x00, 0x28, 0x84, 0x14, 0x5c, 0x28, 0x83, 0x21, 0x58, 0x80, 0x06, + 0x78, 0x17, 0x98, 0xc7, 0x20, 0xce, 0x80, 0xbd, 0x74, 0x1c, 0xb9, 0x6c, + 0xd0, 0x05, 0xf8, 0x11, 0x07, 0xf3, 0x7f, 0x06, 0x51, 0xff, 0x17, 0x04, + 0x00, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x46, 0x04, 0x17, 0x31, 0x04, + 0x43, 0x28, 0x21, 0x33, 0x05, 0x28, 0x0b, 0x08, 0xb1, 0x7f, 0x10, 0x0d, + 0xf0, 0x7f, 0x20, 0x06, 0x04, 0x28, 0x0d, 0x06, 0x06, 0x06, 0x05, 0x06, + 0x20, 0x04, 0x04, 0x20, 0x06, 0x06, 0xfd, 0x21, 0x44, 0x09, 0x00, 0x00, + 0x00, 0x08, 0x42, 0xb7, 0x30, 0xe5, 0x30, 0x00, 0xbf, 0x30, 0xa4, 0x30, + 0xa2, 0x30, 0xfc, 0x30, 0x57, 0xde, 0x06, 0x28, 0x1d, 0x53, 0x2f, 0xab, + 0x79, 0x05, 0xee, 0xa3, 0x00, 0x50, 0x7f, 0x05, 0x77, 0x09, 0xa2, 0x00, + 0x10, 0xff, 0x65, 0x40, 0x7d, 0x72, 0x00, 0x6d, 0x2f, 0xb7, 0x72, 0xd6, + 0x05, 0x2d, 0xa3, 0xf1, 0x7f, 0x69, 0x06, 0xa1, 0x7f, 0x45, 0x4e, 0xa1, + 0x06, 0x90, 0x81, 0xbd, 0x01, 0x65, 0x82, 0x84, 0x29, 0x52, 0x9a, 0x4e, + 0x06, 0x78, 0x17, 0x00, 0x88, 0xc2, 0xc0, 0xd0, 0x74, 0xc7, 0xb4, 0xc5, + 0x38, 0xc8, 0xb9, 0x06, 0x58, 0x1b, 0x51, 0xff, 0xb2, 0x7d, 0x65, 0x00, + 0x6e, 0xa0, 0x06, 0x01, 0xff, 0xed, 0x06, 0x84, 0x01, 0x28, 0x04, 0x42, + 0x04, 0x38, 0x8e, 0x28, 0x0f, 0x38, 0x04, 0x4f, 0x05, 0xe8, 0x11, 0x07, + 0xf4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x07, 0x82, 0x48, 0x14, 0x07, 0x07, + 0x06, 0x05, 0x09, 0x20, 0x05, 0x07, 0x00, 0x07, 0x78, 0x21, 0xfa, 0x0a, + 0x00, 0x00, 0x09, 0x03, 0x42, 0xc6, 0x30, 0xa3, 0x30, 0xed, 0x28, 0x0f, + 0x06, 0x7d, 0x2f, 0x5f, 0x54, 0x48, 0x15, 0x6f, 0x2f, 0xb3, 0x0e, 0x70, + 0x7f, 0x37, 0x95, 0x07, 0x30, 0x7f, 0x05, 0xff, 0xa9, 0x81, 0x07, 0x50, + 0xff, 0x82, 0x84, 0x57, 0x7f, 0x14, 0x5c, 0x06, 0x78, 0x15, 0x03, 0x00, + 0x00, 0xf0, 0xd2, 0x64, 0xb8, 0x06, 0x18, 0x0d, 0x08, 0x32, 0x7f, 0xa0, + 0x06, 0x59, 0x97, 0x22, 0x48, 0x15, 0x3e, 0x04, 0x3b, 0x04, 0x4c, 0xe4, + 0x06, 0x48, 0x17, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x08, 0x06, + 0x38, 0x0d, 0x08, 0x08, 0x80, 0x28, 0x13, 0x06, 0x08, 0x08, 0x08, 0x08, + 0x9c, 0x21, 0x00, 0x18, 0x08, 0x00, 0x00, 0x0a, 0x42, 0xd5, 0x30, 0x15, + 0xa9, 0x30, 0xa2, 0x20, 0x01, 0xfc, 0x28, 0x1b, 0xd9, 0x28, 0x1f, 0x54, + 0xaf, 0x05, 0xe8, 0x21, 0x56, 0x28, 0x13, 0x72, 0x4f, 0x27, 0x6c, 0x00, + 0x58, 0x62, 0x4f, 0x35, 0x67, 0x05, 0xcf, 0xb7, 0x10, 0x0e, 0xf0, 0x7f, + 0x8f, 0x79, 0xc9, 0x01, 0x62, 0x14, 0x5c, 0x1d, 0x8d, 0x3c, 0x68, 0x06, + 0x5b, 0x19, 0x00, 0xec, 0xd3, 0xb4, 0xc5, 0x44, 0xc5, 0x7c, 0xb9, 0x03, + 0xa0, 0xbc, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x18, 0x21, 0x0e, 0xf3, 0x7f, + 0x46, 0x24, 0x28, 0x13, 0x40, 0x04, 0x30, 0x28, 0x1b, 0x38, 0x19, 0x31, + 0x2c, 0x04, 0x35, 0x28, 0x25, 0x33, 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, + 0xff, 0x09, 0x09, 0x38, 0x09, 0x08, 0x20, 0x03, 0x20, 0x04, 0x40, 0x06, + 0x09, 0xc7, 0x21, 0x24, 0xee, 0x06, 0x00, 0x3f, 0xff, 0x01, 0x08, 0x20, + 0x21, 0x08, 0x01, 0x08, 0x01, 0x09, 0x08, 0x02, 0x20, 0x05, 0x01, 0x01, + 0x02, 0x8c, 0x20, 0x01, 0x03, 0x03, 0x02, 0x20, 0x04, 0x20, 0x0b, 0x02, + 0x02, 0x24, 0x02, 0x03, 0x20, 0x01, 0x04, 0x04, 0x20, 0x11, 0x04, 0x05, + 0x00, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x01, 0xc0, 0x20, 0x1d, + 0x20, 0x11, 0x02, 0x06, 0x03, 0x04, 0x04, 0x04, 0x00, 0x04, 0x05, 0x07, + 0x04, 0x04, 0x01, 0x01, 0x05, 0x00, 0x05, 0x04, 0x01, 0x03, 0x07, 0x05, + 0x05, 0x05, 0x12, 0x05, 0x06, 0x04, 0x30, 0x04, 0x06, 0x06, 0x20, 0x08, + 0x04, 0x99, 0x20, 0x06, 0x06, 0x07, 0x40, 0x0c, 0x28, 0x9c, 0x05, 0x09, + 0x20, 0x05, 0xf0, 0x28, 0xa9, 0xe8, 0xaf, 0xf0, 0xa7, 0x3f, 0xff, 0x00, + 0x11, 0xac, 0x20, 0x00, 0x11, 0x03, 0x00, 0x00, 0x30, 0x01, 0x43, 0x14, + 0x20, 0x50, 0x08, 0xe2, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x27, 0x24, 0x1b, 0x28, 0x1a, 0x02, 0x00, 0x43, 0xd6, 0x30, 0xea, + 0x30, 0xe5, 0x30, 0xc3, 0x00, 0x30, 0xbb, 0x30, 0xeb, 0x30, 0x96, 0x99, + 0xfd, 0x01, 0x90, 0x30, 0x57, 0xdf, 0x57, 0x0f, 0x57, 0x05, 0x98, 0x2b, + 0x01, 0x42, 0x00, 0x72, 0x00, 0x75, 0x00, 0x73, 0x20, 0x01, 0x11, 0x65, + 0x00, 0x6c, 0x20, 0x07, 0x20, 0x00, 0x52, 0x20, 0x09, 0x01, 0x67, 0x00, + 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x05, 0x28, 0xb2, 0x11, 0x52, 0x00, 0xe9, + 0x80, 0x6d, 0x20, 0x00, 0x64, 0x20, 0x85, 0x54, 0x20, 0x60, 0x93, 0x78, + 0x40, 0x91, 0x6c, 0x20, 0x97, 0x73, 0x00, 0x01, 0x2d, 0x00, 0x43, 0x00, + 0x61, 0x00, 0x70, 0x20, 0x95, 0x7d, 0x74, 0x20, 0x07, 0x30, 0x13, 0x03, + 0x90, 0x7f, 0x90, 0xed, 0x50, 0x79, 0xfc, 0x81, 0x0d, 0x15, 0x2d, 0x00, + 0x48, 0x20, 0x75, 0x75, 0x20, 0x77, 0x74, 0x21, 0x21, 0xbd, 0x30, 0x79, + 0x64, 0x20, 0x7f, 0x03, 0xf0, 0xff, 0x91, 0x6d, 0x30, 0xfb, 0x64, 0x21, + 0x79, 0xed, 0x00, 0x31, 0x01, 0x04, 0x91, 0x7f, 0x51, 0xed, 0xf3, 0x00, + 0x01, 0x7f, 0x52, 0x11, 0x61, 0x00, 0x21, 0x7d, 0x80, 0x03, 0xba, 0xc9, + 0x03, 0x5e, 0x81, 0x9c, 0x5e, 0x58, 0x14, 0x42, 0x5c, 0x32, 0xfb, 0x27, + 0x59, 0x3a, 0x53, 0x05, 0xfb, 0x25, 0x0c, 0x00, 0xbe, 0x3c, 0xb9, 0x40, + 0xc1, 0x20, 0x00, 0xc0, 0x1a, 0xc9, 0xed, 0xc5, 0x06, 0x3b, 0xa1, 0x00, + 0x13, 0x7f, 0x48, 0x23, 0x79, 0x6f, 0x35, 0x00, 0x66, 0x23, 0x0b, 0x32, + 0x73, 0x65, 0x43, 0x13, 0x6c, 0x23, 0x8f, 0x15, 0x6a, 0x00, 0x6b, 0x23, + 0x9d, 0x47, 0x23, 0xa7, 0x77, 0x43, 0x13, 0xdd, 0x03, 0x52, 0x89, 0x73, + 0xed, 0xe3, 0x23, 0xef, 0x00, 0x33, 0x7f, 0x31, 0xff, 0x20, 0x23, 0x7f, + 0x40, 0x20, 0x04, 0x62, 0x03, 0x11, 0x04, 0x40, 0x04, 0x4e, 0x04, 0x41, + 0x41, 0x20, 0x01, 0x35, 0x04, 0x3b, 0x04, 0x4c, 0x20, 0x09, 0x00, 0x3a, + 0x04, 0x38, 0x04, 0x39, 0x04, 0x20, 0x00, 0x04, 0x41, 0x04, 0x42, 0x04, + 0x3e, 0x20, 0x13, 0x38, 0x04, 0x05, 0x47, 0x04, 0x3d, 0x04, 0x4b, 0x40, + 0x13, 0x3e, 0x20, 0x1d, 0x03, 0x40, 0x04, 0x43, 0x04, 0x33, 0x04, 0x0b, + 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x01, 0x01, 0x01, 0x02, 0x02, + 0x20, 0x04, 0x01, 0x40, 0x04, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x43, + 0xd5, 0x30, 0xe9, 0x03, 0x30, 0xf3, 0x30, 0xc7, 0x30, 0xec, 0x20, 0x05, + 0x05, 0xf8, 0x13, 0xab, 0x3f, 0xff, 0x46, 0x45, 0xfb, 0x6e, 0x47, 0x91, + 0x72, 0x04, 0xa6, 0x7f, 0x01, 0x58, 0x17, 0x5e, 0x66, 0x46, 0x89, 0x6d, + 0x80, 0x91, 0x05, 0xf0, 0xff, 0x05, 0x39, 0x09, 0xf1, 0x7f, 0x69, 0xbc, + 0x61, 0x7f, 0x72, 0x05, 0x40, 0xef, 0x01, 0x38, 0x17, 0xb2, 0x13, 0x04, + 0xf2, 0x11, 0x5b, 0x4f, 0x0c, 0x70, 0x51, 0xb7, 0x5f, 0x06, 0x38, 0x11, + 0x68, 0x17, 0xd5, 0x91, 0x05, 0xb7, 0xdc, 0xb4, 0x74, 0xb9, 0x06, 0x78, + 0x19, 0x56, 0x49, 0x7b, 0xbd, 0x93, 0x81, 0x65, 0x05, 0xe2, 0x83, 0x93, + 0xff, 0x32, 0x7f, 0x06, 0x13, 0xff, 0x24, 0x28, 0x0d, 0x11, 0x30, 0x04, + 0x3c, 0x20, 0x03, 0x3d, 0x04, 0x34, 0xa8, 0x15, 0x57, 0x40, 0x28, 0x27, + 0x33, 0x28, 0x21, 0x3e, 0x28, 0x13, 0x0c, 0xb4, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x62, 0x02, 0x38, 0x15, 0x20, 0x04, 0x02, 0x01, 0x03, 0x30, 0x05, + 0x02, 0x83, 0x58, 0x17, 0x04, 0x43, 0xef, 0x30, 0xed, 0x06, 0x68, 0x11, + 0x5f, 0xff, 0x5d, 0x57, 0x4f, 0x7f, 0x6c, 0x4f, 0xaf, 0x36, 0xa1, 0x06, + 0xd8, 0x17, 0x77, 0xa0, 0x8d, 0xff, 0x3f, 0x3f, 0x05, 0xf0, 0xff, 0x05, + 0xf5, 0x95, 0x36, 0x17, 0x06, 0xf1, 0x7f, 0x00, 0x18, 0x17, 0x50, 0x93, + 0x05, 0x52, 0x11, 0x08, 0xe6, 0x74, 0x86, 0x96, 0x06, 0x98, 0x15, 0x00, + 0x00, 0x48, 0x1b, 0xc6, 0x71, 0xb8, 0x06, 0x78, 0x13, 0x00, 0x13, 0x7f, + 0xeb, 0x06, 0x28, 0x97, 0x3f, 0xfd, 0xc5, 0x3a, 0x15, 0x06, 0x33, 0xfd, + 0x00, 0x00, 0x12, 0x28, 0x15, 0x3b, 0x28, 0x1b, 0xf2, 0x37, 0xff, 0x06, + 0x18, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x03, 0x70, + 0x01, 0x02, 0x8d, 0x40, 0x0a, 0xe3, 0x23, 0x75, 0x28, 0x17, 0x00, 0x1f, + 0xff, 0x01, 0x38, 0x3d, 0xbe, 0x20, 0x04, 0x01, 0x40, 0x04, 0x48, 0x4a, + 0xc8, 0x4f, 0xf0, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xac, 0x20, 0x00, + 0x11, 0x03, 0x00, 0x00, 0x30, 0x01, 0x44, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2f, 0x1f, 0x17, + 0x0d, 0x00, 0x00, 0x00, 0x02, 0x44, 0xdc, 0x30, 0xb9, 0x30, 0xcb, 0x00, + 0x30, 0xa2, 0x30, 0xfb, 0x30, 0xd8, 0x30, 0xeb, 0x00, 0x30, 0xc4, 0x30, + 0xa7, 0x30, 0xb4, 0x30, 0xd3, 0x01, 0x30, 0xca, 0x30, 0x23, 0x90, 0xa6, + 0x90, 0x05, 0x38, 0x31, 0x04, 0x46, 0x00, 0x65, 0x00, 0x64, 0x20, 0x03, + 0x72, 0x00, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x15, + 0x6e, 0x00, 0x20, 0x20, 0x05, 0x66, 0x20, 0x05, 0x42, 0x20, 0x0d, 0x55, + 0x73, 0x20, 0x0f, 0x69, 0x20, 0x1b, 0x20, 0x20, 0x1f, 0x6e, 0x20, 0x29, + 0x15, 0x20, 0x00, 0x48, 0x40, 0x2d, 0x7a, 0x20, 0x37, 0x67, 0x20, 0x2d, + 0x5a, 0x76, 0x20, 0x33, 0x6e, 0x20, 0x3b, 0x02, 0x90, 0x7f, 0xe9, 0x20, + 0x7f, 0xe9, 0xe2, 0xe0, 0x7f, 0x30, 0x91, 0xb0, 0x7f, 0x65, 0x00, 0x2d, + 0x80, 0x77, 0xe9, 0xae, 0xa0, 0x77, 0x65, 0x03, 0x20, 0xff, 0xf6, 0x00, + 0x20, 0xff, 0xb0, 0x79, 0x31, 0x0f, 0x75, 0xb6, 0x00, 0x40, 0xfb, 0x77, + 0x02, 0xe0, 0xfb, 0xf1, 0x7f, 0x7a, 0x61, 0x7f, 0x30, 0xfb, 0x64, 0xc6, + 0x21, 0x8b, 0xd1, 0x81, 0x2d, 0x00, 0x45, 0x03, 0xa1, 0x77, 0x00, 0x31, + 0xff, 0x63, 0xbc, 0x21, 0xff, 0xf3, 0x00, 0x41, 0x7f, 0x30, 0x7d, 0x03, + 0xd1, 0xf7, 0x7b, 0x0d, 0xe2, 0x6c, 0x0c, 0xd1, 0x9e, 0x54, 0x80, 0x05, + 0x52, 0xeb, 0x00, 0x3b, 0x81, 0xf4, 0xbc, 0x00, 0xa4, 0xc2, 0xc8, 0xb2, + 0x44, 0xc5, 0xe4, 0xd5, 0x00, 0x74, 0xb9, 0xb4, 0xcc, 0xe0, 0xac, 0x44, + 0xbe, 0x00, 0x98, 0xb0, 0x20, 0x00, 0xf0, 0xc5, 0x29, 0xbc, 0xaa, 0x05, + 0x5b, 0xaf, 0x4d, 0x43, 0x63, 0x6c, 0x23, 0x79, 0x6d, 0x22, 0xe3, 0x4b, + 0xab, 0x23, 0x87, 0x6f, 0x63, 0x89, 0x73, 0x21, 0x8f, 0x68, 0x43, 0x07, + 0xf3, 0xa3, 0xc7, 0x03, 0x12, 0xf5, 0x00, 0x53, 0xff, 0xe7, 0x00, 0xe3, + 0x23, 0xff, 0x33, 0x7d, 0x33, 0xef, 0x60, 0x42, 0x22, 0x0b, 0x04, 0xf1, + 0xfd, 0x00, 0x00, 0x24, 0x04, 0x35, 0x20, 0x04, 0x34, 0x20, 0x03, 0x40, + 0x04, 0x30, 0x04, 0x46, 0x00, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x20, 0x00, + 0x11, 0x02, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x3d, 0x20, 0x0d, 0x38, 0xd5, + 0x20, 0x0d, 0x30, 0x03, 0x13, 0x40, 0x21, 0x46, 0x20, 0x2b, 0x33, 0x20, + 0x1b, 0x43, 0x32, 0x20, 0x27, 0x3d, 0x04, 0x4b, 0x04, 0x0b, 0x54, 0xff, + 0x10, 0x0e, 0xd0, 0x7f, 0x15, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x20, + 0x06, 0x03, 0x20, 0x05, 0x22, 0x01, 0x01, 0x58, 0x17, 0x03, 0x44, 0xbb, + 0x28, 0x0d, 0xd3, 0x80, 0x28, 0x17, 0xba, 0x4e, 0x71, 0x51, 0x8c, 0x54, + 0xfd, 0x55, 0x56, 0x05, 0xff, 0xbd, 0x52, 0x28, 0x17, 0x70, 0x26, 0xf7, + 0x62, 0x44, 0x9b, 0x57, 0x6b, 0x48, 0x01, 0x53, 0x28, 0x25, 0x70, 0x28, + 0x11, 0x30, 0x0d, 0x05, 0x10, 0x7f, 0x5a, 0xe9, 0xa0, 0x7f, 0x71, 0x27, + 0x81, 0x38, 0x11, 0x73, 0x48, 0xa9, 0x62, 0xef, 0x67, 0x21, 0xf8, 0x23, + 0x03, 0xbf, 0xe1, 0x53, 0x60, 0x69, 0xb5, 0x87, 0xf1, 0x13, 0x05, 0x51, + 0x7f, 0xbe, 0x51, 0x81, 0x63, 0x61, 0x81, 0x50, 0xff, 0x39, 0x8f, 0x04, + 0xd8, 0x21, 0x51, 0xff, 0xfa, 0xc3, 0xe0, 0x7d, 0x05, 0x91, 0xff, 0x5e, + 0x58, 0xcf, 0x65, 0x06, 0x52, 0xf9, 0x5f, 0xff, 0x00, 0xa4, 0xc2, 0x85, + 0xb9, 0xa4, 0xc2, 0x74, 0xce, 0x00, 0x20, 0x00, 0xf5, 0xac, 0x54, 0xd6, + 0x6d, 0xad, 0xf7, 0x05, 0xff, 0xbd, 0x52, 0x7f, 0x3b, 0x5d, 0x00, 0x72, + 0x7f, 0x65, 0x04, 0xc2, 0x81, 0x00, 0x51, 0xff, 0x3b, 0xa7, 0xd0, 0x3b, + 0xf1, 0x05, 0x13, 0xff, 0x20, 0x28, 0x17, 0x41, 0x04, 0x3f, 0x04, 0x05, + 0x43, 0x04, 0x31, 0x04, 0x3b, 0x28, 0x17, 0x3a, 0x28, 0x1f, 0x16, 0x20, + 0x00, 0x21, 0x48, 0x29, 0x31, 0x28, 0x1d, 0x30, 0x0f, 0x4f, 0xe3, 0x03, + 0x48, 0x01, 0x08, 0x74, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x02, 0x03, 0x03, + 0x20, 0x01, 0x28, 0x15, 0x60, 0x03, 0x28, 0x18, 0x28, 0x23, 0xd6, 0x1f, + 0x3a, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x44, 0xd6, 0x28, 0x17, 0xc1, 0x30, + 0xe5, 0x14, 0x30, 0xb3, 0x30, 0x06, 0x5d, 0x31, 0x42, 0x2f, 0xfb, 0x0d, + 0x01, 0x56, 0x6b, 0x4c, 0x27, 0x44, 0x4c, 0xa5, 0x74, 0x2f, 0xbb, 0x36, + 0x9f, 0x74, 0xb5, 0x06, 0x00, 0x7f, 0x28, 0x4f, 0x25, 0xb0, 0x81, 0x29, + 0x05, 0xa0, 0xff, 0x2d, 0xc0, 0xff, 0x6b, 0x6b, 0x05, 0x60, 0xff, 0x91, + 0x73, 0x65, 0x2e, 0x25, 0x74, 0x6d, 0xaf, 0x58, 0x09, 0xde, 0x71, 0x99, + 0x05, 0x50, 0x7f, 0x69, 0x80, 0x7d, 0x59, 0x87, 0x05, 0x30, 0x7d, 0x2b, + 0x19, 0x5e, 0x00, 0x14, 0x5c, 0x47, 0x59, 0xd1, 0x79, 0x79, 0x72, 0x20, + 0x3a, 0x53, 0x06, 0x38, 0x19, 0x0c, 0xbe, 0x74, 0xb9, 0x58, 0x1e, 0xce, + 0x54, 0xcf, 0x06, 0x58, 0x95, 0xb3, 0x7f, 0x06, 0x59, 0x17, 0x06, 0xf1, + 0xff, 0x1e, 0xaa, 0x28, 0x09, 0x40, 0x28, 0x15, 0x33, 0x28, 0x0d, 0x11, + 0x28, 0x0b, 0x47, 0xb8, 0x28, 0x19, 0x3e, 0x04, 0xa8, 0x07, 0x08, 0xb4, + 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x03, 0x01, 0x01, 0xb0, 0x20, 0x01, 0x03, + 0x40, 0x06, 0x38, 0x22, 0xe8, 0x1f, 0x5f, 0x0d, 0xa5, 0x00, 0x3f, 0xff, + 0x01, 0x38, 0x34, 0x02, 0x01, 0x20, 0x06, 0x03, 0x20, 0x05, 0xf0, 0x20, + 0x07, 0xe8, 0x4f, 0xf0, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x45, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x79, 0xee, 0x6b, 0x12, 0x00, 0x00, 0x00, 0x01, 0x45, 0xdc, 0x30, + 0xc4, 0x30, 0xef, 0x10, 0x30, 0xca, 0x30, 0x06, 0x78, 0x1d, 0x42, 0x00, + 0x6f, 0x00, 0x00, 0x74, 0x00, 0x73, 0x00, 0x77, 0x00, 0x61, 0x00, 0x68, + 0x6e, 0x20, 0x03, 0x0e, 0x70, 0x7f, 0x75, 0x10, 0x06, 0x60, 0xff, 0x5a, + 0x53, 0x28, 0x04, 0x83, 0xe6, 0x74, 0xb3, 0x7e, 0x06, 0x7b, 0x1d, 0xf4, + 0xbc, 0x03, 0x20, 0xce, 0x40, 0xc6, 0x98, 0xb0, 0x0e, 0xf3, 0x7f, 0x06, + 0x72, 0xff, 0x00, 0x11, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x41, 0x04, 0x07, + 0x32, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x10, 0x06, 0x74, 0xff, 0x10, + 0x06, 0x70, 0xff, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, + 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x94, 0xec, 0x00, 0x11, 0x1c, 0x00, 0x00, 0x30, 0x01, 0x46, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x5e, 0x1e, 0x92, 0x10, 0x00, 0x00, 0x00, 0x02, 0x46, 0xbd, 0x30, + 0xd5, 0x30, 0xa3, 0x04, 0x30, 0xa2, 0x30, 0x02, 0x5e, 0x06, 0x58, 0x1f, + 0x53, 0x00, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x69, 0x00, 0x61, 0x00, 0x11, + 0x20, 0x00, 0x43, 0x20, 0x07, 0x74, 0x00, 0x79, 0x06, 0x80, 0x7f, 0x14, + 0x28, 0x00, 0x76, 0x20, 0x89, 0x6c, 0x20, 0x01, 0x65, 0x00, 0x51, 0x29, + 0x06, 0x40, 0x7f, 0x53, 0x20, 0xff, 0x61, 0x00, 0x64, 0x21, 0x05, 0xed, + 0x06, 0x10, 0x7f, 0x06, 0x5a, 0x1f, 0x31, 0xf3, 0x75, 0x20, 0xf1, 0x30, + 0xf5, 0x20, 0x20, 0xf9, 0x68, 0x65, 0x22, 0x07, 0x52, 0x13, 0xed, 0x05, + 0x40, 0x93, 0x22, 0x7d, 0x5e, 0x10, 0x97, 0x9a, 0x4e, 0x06, 0x72, 0xfd, + 0x00, 0x00, 0x8c, 0xc1, 0x0d, 0x3c, 0xd5, 0x44, 0xc5, 0x06, 0x9b, 0x9b, + 0xd2, 0xff, 0x73, 0x62, 0x7f, 0xd7, 0x05, 0x72, 0xfd, 0x33, 0xff, 0xf3, + 0xa3, 0x7f, 0x63, 0x24, 0x09, 0x52, 0x0b, 0x05, 0x73, 0x81, 0x00, 0x21, + 0x04, 0x3e, 0x04, 0x44, 0x04, 0x38, 0x04, 0x30, 0x4f, 0x04, 0x0f, 0x14, + 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x14, 0x15, 0x16, 0x00, 0x16, 0x03, + 0x01, 0x01, 0x16, 0x15, 0x17, 0x14, 0x0a, 0x01, 0x01, 0x01, 0x01, 0x58, + 0x17, 0x03, 0x88, 0x17, 0xde, 0x46, 0x5d, 0x07, 0x18, 0x17, 0x50, 0x00, + 0x72, 0x28, 0x25, 0x37, 0x9b, 0x6e, 0xa2, 0x24, 0x21, 0x65, 0x06, 0x28, + 0x17, 0x6f, 0x00, 0x62, 0x28, 0x17, 0x61, 0xea, 0x45, 0x1f, 0x05, 0x58, + 0x19, 0xd8, 0x97, 0x52, 0x28, 0x91, 0x67, 0x29, 0x25, 0x6f, 0xf7, 0x21, + 0x01, 0x05, 0x58, 0x99, 0xb0, 0x71, 0x37, 0x93, 0x64, 0x29, 0xa3, 0x77, + 0x99, 0x05, 0x38, 0x2d, 0xfc, 0xd1, 0xf3, 0x5a, 0x1f, 0x05, 0xb8, 0x1d, + 0x58, 0x17, 0x06, 0x72, 0xfd, 0x78, 0x17, 0x20, 0x00, 0x3b, 0xfc, 0xc8, + 0x07, 0x38, 0x17, 0x06, 0x12, 0xff, 0x73, 0xf3, 0xed, 0x00, 0x21, 0xff, + 0x78, 0x31, 0x80, 0x05, 0x38, 0x17, 0x39, 0x04, 0x41, 0x04, 0x3a, 0x04, + 0x30, 0x80, 0x28, 0x1f, 0x20, 0x00, 0x3e, 0x04, 0x31, 0x04, 0x3b, 0x83, + 0x20, 0x0b, 0x41, 0x04, 0x42, 0x04, 0x4c, 0x04, 0xe8, 0x2f, 0x07, 0xb4, + 0xff, 0x80, 0x10, 0x0e, 0x30, 0x7f, 0x02, 0x15, 0x14, 0x15, 0x10, 0x0f, + 0x02, 0x00, 0x02, 0x15, 0x0e, 0x16, 0x15, 0x02, 0x02, 0x02, 0x40, 0x02, + 0x58, 0x17, 0x04, 0x46, 0xd6, 0x30, 0xe9, 0x30, 0x01, 0xb4, 0x30, 0xa8, + 0x30, 0xd6, 0x30, 0xb0, 0x20, 0x09, 0x55, 0xc8, 0x06, 0x08, 0x1f, 0x42, + 0x47, 0x87, 0x67, 0x2f, 0xb5, 0x65, 0x2f, 0xad, 0x76, 0x67, 0x28, 0x19, + 0x3f, 0x2f, 0x0e, 0x50, 0x7f, 0x77, 0x0e, 0xe0, 0xff, 0x06, 0x31, 0xff, + 0x03, 0x00, 0x5e, 0xc9, 0x62, 0x3c, 0x68, 0x36, 0x80, 0x2b, 0x04, 0x59, + 0x3c, 0x68, 0xd2, 0x52, 0x06, 0x1b, 0x1d, 0x14, 0xbe, 0x00, 0x7c, 0xb7, + 0xe0, 0xac, 0x08, 0xc6, 0x0c, 0xbe, 0x03, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, + 0xb4, 0x05, 0xf8, 0x21, 0x93, 0x7f, 0x54, 0xeb, 0x0e, 0x43, 0x7f, 0x11, + 0x48, 0x01, 0x33, 0x28, 0x1d, 0x35, 0x04, 0x57, 0x32, 0x20, 0x07, 0x40, + 0x28, 0x1b, 0x34, 0x04, 0xe8, 0x0b, 0x10, 0x00, 0x74, 0xff, 0x10, 0x06, + 0x30, 0xff, 0x14, 0x03, 0x01, 0x01, 0x20, 0x01, 0x03, 0x40, 0x06, 0x03, + 0x03, 0x04, 0x03, 0x03, 0xe1, 0x1d, 0x6d, 0x28, 0x17, 0x05, 0x46, 0x01, + 0xd7, 0x30, 0xec, 0x30, 0xd9, 0x30, 0xf3, 0x06, 0x08, 0x0f, 0xad, 0x9e, + 0x2f, 0x6c, 0x48, 0x11, 0x65, 0x2f, 0x21, 0x0e, 0x90, 0x7f, 0x77, 0x0e, + 0xe0, 0xff, 0x81, 0x06, 0x91, 0xff, 0x6e, 0x66, 0x17, 0x52, 0x87, 0x65, + 0x06, 0x72, 0xfd, 0x00, 0x00, 0x00, 0x0c, 0xd5, 0x08, 0xb8, 0xa4, 0xbc, + 0xd8, 0x05, 0xf8, 0x0d, 0x0f, 0x93, 0x7f, 0x1f, 0x28, 0x17, 0x38, 0x11, + 0x35, 0x04, 0x3d, 0xe0, 0x05, 0xa8, 0x0d, 0x0f, 0xf4, 0xff, 0x10, 0x06, + 0x90, 0xff, 0x04, 0x0c, 0x0d, 0x0d, 0x0d, 0x00, 0x0d, 0x04, 0x04, 0x0d, + 0x0c, 0x0f, 0x0c, 0x04, 0x00, 0x04, 0x04, 0x04, 0xe0, 0x1e, 0x82, 0x11, + 0x00, 0x00, 0x00, 0x06, 0x46, 0xd3, 0x30, 0xc7, 0x30, 0xa3, 0x8b, 0x06, + 0xa8, 0x17, 0x56, 0x00, 0x69, 0x2f, 0x9f, 0x69, 0x06, 0x68, 0x15, 0x07, + 0x10, 0x7f, 0x61, 0x57, 0x0e, 0xe0, 0xff, 0x06, 0xf1, 0xff, 0xf4, 0x7e, + 0x01, 0x4e, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0x44, 0xbe, 0x18, 0xb5, + 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x07, 0x12, 0x04, 0x38, 0x04, 0x34, + 0x20, 0x03, 0x06, 0x58, 0x15, 0x0f, 0x14, 0xff, 0x80, 0x10, 0x06, 0xf0, + 0xff, 0x05, 0x1a, 0x1a, 0x1b, 0x1b, 0x1a, 0x05, 0x60, 0x05, 0x20, 0x03, + 0x20, 0x05, 0x05, 0x05, 0x48, 0x1f, 0x44, 0x00, 0x10, 0x00, 0x00, 0x07, + 0x46, 0xd0, 0x30, 0xeb, 0x31, 0x30, 0xca, 0x06, 0x88, 0x15, 0x38, 0x17, + 0x61, 0x00, 0x72, 0x2f, 0xab, 0x58, 0x61, 0x0e, 0x60, 0x7f, 0x57, 0x0e, + 0xe0, 0xff, 0x06, 0xf1, 0xff, 0xe6, 0x74, 0x14, 0x10, 0x5c, 0xb3, 0x7e, + 0x06, 0x98, 0x19, 0x14, 0xbc, 0x74, 0xb9, 0x30, 0x98, 0xb0, 0x06, 0x98, + 0x19, 0x0e, 0xf3, 0x7f, 0x12, 0x04, 0x30, 0x04, 0x5c, 0x40, 0x28, 0x15, + 0x30, 0x06, 0x88, 0x17, 0x10, 0x06, 0xd3, 0xff, 0x0e, 0xf6, 0x7f, 0x06, + 0x18, 0x00, 0x18, 0x19, 0x19, 0x18, 0x06, 0x06, 0x19, 0x18, 0x40, 0x03, + 0x20, 0x05, 0x06, 0x06, 0xb9, 0x1e, 0xd7, 0x13, 0x04, 0x00, 0x00, 0x08, + 0x46, 0xd6, 0x28, 0x17, 0xac, 0x30, 0x45, 0xb9, 0x06, 0x88, 0x19, 0x42, + 0x00, 0x75, 0x28, 0x17, 0x67, 0x28, 0x1d, 0x5c, 0x73, 0x06, 0x60, 0x7f, + 0x6f, 0x06, 0xc0, 0x81, 0x07, 0x10, 0xff, 0x0e, 0xd0, 0x7f, 0x03, 0x5e, + 0x02, 0x14, 0x5c, 0xa0, 0x52, 0xaf, 0x65, 0x06, 0x7b, 0x19, 0x80, 0x01, + 0xbd, 0x74, 0xb9, 0x00, 0xac, 0xa4, 0xc2, 0x06, 0x78, 0x19, 0xa2, 0x32, + 0xff, 0x65, 0x0e, 0xa2, 0xff, 0x11, 0x04, 0x43, 0x28, 0x17, 0x33, 0xb8, + 0x28, 0x1d, 0x41, 0x06, 0x48, 0x19, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, + 0x7f, 0x07, 0x02, 0x02, 0xa0, 0x20, 0x01, 0x07, 0x40, 0x06, 0x07, 0x07, + 0x07, 0x07, 0x3d, 0x20, 0x1e, 0x86, 0x28, 0x17, 0x09, 0x46, 0xc9, 0x30, + 0xd6, 0x0a, 0x30, 0xea, 0x30, 0xc1, 0x06, 0x88, 0x17, 0x44, 0x27, 0x97, + 0x62, 0x82, 0x2f, 0xb1, 0x69, 0x00, 0x63, 0x00, 0x68, 0x06, 0xc0, 0x7f, + 0x74, 0xdc, 0x06, 0x40, 0x81, 0xb0, 0x7f, 0x73, 0x06, 0x21, 0x03, 0x07, + 0x91, 0x7f, 0x06, 0x51, 0xff, 0x1a, 0x59, 0x02, 0x03, 0x5e, 0xcc, 0x91, + 0x47, 0x59, 0x06, 0x7b, 0x17, 0xc4, 0x01, 0xb3, 0x0c, 0xbe, 0xac, 0xb9, + 0x58, 0xce, 0x06, 0x78, 0x17, 0xb0, 0xd2, 0x7f, 0x6a, 0x06, 0xc3, 0xff, + 0x06, 0x3f, 0xb1, 0x14, 0x04, 0x3e, 0x04, 0x47, 0x31, 0x28, 0x19, 0x38, + 0x04, 0x47, 0x06, 0x48, 0x17, 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, + 0x00, 0x08, 0x03, 0x04, 0x04, 0x03, 0x04, 0x08, 0x08, 0x00, 0x04, 0x03, + 0x08, 0x03, 0x08, 0x08, 0x08, 0x08, 0x11, 0xfc, 0x1e, 0xcb, 0x28, 0x17, + 0x0a, 0x46, 0xac, 0x28, 0x17, 0x16, 0xed, 0x30, 0xdc, 0x06, 0x88, 0x17, + 0x47, 0x2f, 0xa7, 0x38, 0x17, 0x6f, 0x36, 0x00, 0x76, 0x2f, 0xb9, 0x0e, + 0xb0, 0x7f, 0x77, 0x0e, 0xe0, 0xff, 0x06, 0x51, 0xff, 0xa0, 0x01, 0x52, + 0x03, 0x5e, 0x57, 0x7f, 0x83, 0x6c, 0x06, 0x7b, 0x17, 0x00, 0x00, 0xac, + 0x0c, 0xbe, 0x5c, 0xb8, 0xf4, 0xbc, 0xc4, 0x06, 0x78, 0x17, 0x0e, 0xf3, + 0x7f, 0x13, 0x04, 0x30, 0x48, 0x17, 0x3e, 0x04, 0x70, 0x32, 0x28, 0x21, + 0x10, 0x06, 0xb4, 0xff, 0x10, 0x06, 0x50, 0xff, 0x09, 0x04, 0x05, 0x05, + 0x00, 0x04, 0x05, 0x09, 0x09, 0x05, 0x04, 0x07, 0x04, 0x00, 0x09, 0x09, + 0x09, 0x09, 0x80, 0x1e, 0xff, 0x11, 0x00, 0x00, 0x00, 0x0b, 0x46, 0xcf, + 0x30, 0xb9, 0x30, 0x51, 0xb3, 0x06, 0xa8, 0x17, 0x48, 0x28, 0x17, 0x73, + 0x00, 0x6b, 0x06, 0x88, 0x17, 0x6f, 0x4b, 0x2f, 0xa1, 0x06, 0xb0, 0x81, + 0x43, 0xa0, 0x7f, 0x06, 0x38, 0x19, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, + 0x02, 0xc8, 0x54, 0xaf, 0x65, 0xd1, 0x79, 0x06, 0x98, 0x17, 0x58, 0x07, + 0xd5, 0xa4, 0xc2, 0x54, 0xcf, 0x06, 0x98, 0x17, 0xb2, 0x7f, 0x06, 0x3b, + 0x99, 0xa3, 0x06, 0xf3, 0xff, 0x25, 0x28, 0x17, 0x41, 0x04, 0x3a, 0x06, + 0x88, 0x17, 0x0e, 0xf3, 0x7f, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x0a, 0x05, + 0x07, 0x03, 0x05, 0x06, 0x0a, 0x00, 0x0a, 0x03, 0x05, 0x1a, 0x05, 0x0a, + 0x0a, 0x0a, 0x00, 0x0a, 0xd2, 0x1d, 0x2c, 0x12, 0x00, 0x00, 0x0c, 0x0a, + 0x46, 0xe4, 0x30, 0xf3, 0x28, 0x15, 0xeb, 0x06, 0x88, 0x17, 0x59, 0xa2, + 0x2f, 0xaf, 0x6d, 0x2f, 0xb1, 0x6f, 0x00, 0x6c, 0x0e, 0x40, 0x7f, 0x4a, + 0xc0, 0x0e, 0xe0, 0x7f, 0x06, 0xf1, 0xff, 0x6c, 0x62, 0x5a, 0x53, 0x14, + 0x5c, 0x83, 0x06, 0x7b, 0x15, 0x00, 0x00, 0x8c, 0xc5, 0xfc, 0x06, 0x88, + 0x13, 0x0f, 0x31, 0xff, 0x05, 0x2f, 0x04, 0x3c, 0x04, 0x31, 0x28, 0x15, + 0x3b, 0x06, 0x28, 0x13, 0xc0, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xf0, 0xff, + 0x0b, 0x1c, 0x1c, 0x06, 0x06, 0x1c, 0x04, 0x0b, 0x0b, 0x06, 0x1c, 0x1c, + 0x20, 0x05, 0x0b, 0x0b, 0x11, 0x36, 0x1e, 0xdb, 0x28, 0x17, 0x0d, 0x46, + 0xaf, 0x28, 0x13, 0x05, 0xb8, 0x30, 0xe3, 0x30, 0xea, 0x06, 0x68, 0x19, + 0x4b, 0x2f, 0xad, 0x04, 0x72, 0x00, 0x64, 0x00, 0x7a, 0x4f, 0xb7, 0x6c, + 0x00, 0x58, 0x69, 0x06, 0x60, 0x7f, 0x6a, 0x06, 0x40, 0x7d, 0x90, 0xff, + 0x73, 0x00, 0x63, 0xe0, 0x06, 0x41, 0x01, 0x07, 0x71, 0x7f, 0x06, 0x81, + 0xff, 0x51, 0x14, 0x5c, 0x3e, 0x8d, 0x20, 0x29, 0x52, 0x06, 0x7b, 0x17, + 0xe0, 0xcf, 0x74, 0xb9, 0x98, 0x1e, 0xc7, 0xac, 0xb9, 0x06, 0x78, 0x1b, + 0x93, 0x7f, 0x06, 0x53, 0x01, 0x06, 0xf3, 0xff, 0x1a, 0x00, 0x04, 0x4b, + 0x04, 0x40, 0x04, 0x34, 0x04, 0x36, 0x2e, 0x04, 0x30, 0x28, 0x1b, 0x38, + 0x06, 0x08, 0x1d, 0x0f, 0x03, 0x7f, 0x10, 0x06, 0xe0, 0xff, 0x0c, 0x00, + 0x06, 0x06, 0x07, 0x07, 0x07, 0x0c, 0x0c, 0x07, 0x00, 0x06, 0x09, 0x06, + 0x0c, 0x0c, 0x0c, 0x0c, 0x9c, 0x20, 0x1d, 0x0c, 0x28, 0x17, 0x0e, 0x46, + 0xad, 0x30, 0xe5, 0x00, 0x30, 0xb9, 0x30, 0xc6, 0x30, 0xf3, 0x30, 0xc7, + 0x30, 0x30, 0xa3, 0x28, 0x23, 0x05, 0xfd, 0x39, 0x4b, 0x00, 0x79, 0x00, + 0x41, 0x75, 0x27, 0x15, 0x74, 0x00, 0x65, 0x00, 0x6e, 0x28, 0x1f, 0x6b, + 0x69, 0x05, 0xef, 0xb7, 0x30, 0x7f, 0x6f, 0x06, 0xa0, 0x81, 0x4b, 0x28, + 0x91, 0x06, 0xd0, 0xff, 0xc0, 0x06, 0xf0, 0x7f, 0x06, 0xd1, 0xff, 0x18, + 0x4e, 0xaf, 0x65, 0xd5, 0x6e, 0x08, 0xea, 0x8f, 0x14, 0x5c, 0x06, 0x5b, + 0x17, 0x50, 0xd0, 0xa4, 0x05, 0xc2, 0x50, 0xd1, 0x1c, 0xb5, 0x06, 0x98, + 0x17, 0x6a, 0x2f, 0xab, 0x60, 0x65, 0x06, 0xa2, 0xff, 0x06, 0xd3, 0xff, + 0x1a, 0x04, 0x4e, 0x04, 0x41, 0x02, 0x04, 0x42, 0x04, 0x35, 0x04, 0x3d, + 0x28, 0x1d, 0x38, 0xe0, 0x28, 0x1b, 0x0e, 0x14, 0xff, 0x10, 0x0e, 0xb0, + 0x7f, 0x0d, 0x07, 0x08, 0x08, 0x08, 0x00, 0x08, 0x0d, 0x0d, 0x08, 0x07, + 0x0a, 0x07, 0x0d, 0x00, 0x0d, 0x0d, 0x0d, 0x12, 0x1e, 0x22, 0x10, 0x00, + 0x00, 0x00, 0x0f, 0x46, 0xed, 0x30, 0xd9, 0x30, 0xc1, 0xd7, 0x06, 0x08, + 0x0d, 0x9f, 0xff, 0x4c, 0x27, 0x95, 0x76, 0x28, 0x13, 0x3f, 0x2d, 0x06, + 0xb0, 0x7f, 0x6b, 0x74, 0x06, 0x60, 0x81, 0x30, 0xff, 0x77, 0x40, 0x7f, + 0x73, 0x06, 0x41, 0x03, 0x07, 0x71, 0x7f, 0x81, 0x06, 0x71, 0xff, 0x1b, + 0x6d, 0xf4, 0x7e, 0x47, 0x59, 0x06, 0x92, 0xff, 0x03, 0x5c, 0xb8, 0xa0, + 0xbc, 0x58, 0xce, 0x06, 0x78, 0x15, 0xb2, 0xff, 0x61, 0x73, 0x2a, 0xa1, + 0x0e, 0x21, 0xff, 0x04, 0x3e, 0x04, 0x32, 0x28, 0x15, 0x70, 0x47, 0x05, + 0xe8, 0x0f, 0x0f, 0x73, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0e, 0x08, 0x09, + 0x09, 0x00, 0x09, 0x09, 0x0e, 0x0e, 0x09, 0x08, 0x0b, 0x08, 0x00, 0x0e, + 0x0e, 0x0e, 0x0e, 0xac, 0x1e, 0x93, 0x11, 0x00, 0x00, 0x00, 0x10, 0x46, + 0xe2, 0x30, 0xf3, 0x30, 0x15, 0xbf, 0x30, 0xca, 0x06, 0x88, 0x19, 0x4d, + 0x2f, 0xad, 0x6e, 0x2f, 0xab, 0x50, 0x61, 0x2f, 0xab, 0x61, 0x10, 0x16, + 0x20, 0x7f, 0x99, 0x84, 0x54, 0x58, 0x20, 0xb3, 0x7e, 0x06, 0x9b, 0x17, + 0xac, 0xba, 0xc0, 0xd0, 0x98, 0x68, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf3, + 0x7f, 0x1c, 0x28, 0x17, 0x3d, 0x04, 0x42, 0x2c, 0x04, 0x30, 0x20, 0x05, + 0x30, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x0f, 0x09, 0x00, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0f, 0x0f, 0x0a, 0x09, 0x00, 0x0c, 0x09, 0x0f, 0x0f, + 0x0f, 0x0f, 0xdf, 0x1e, 0x00, 0x86, 0x10, 0x00, 0x00, 0x11, 0x46, 0xd1, + 0x30, 0x01, 0xb6, 0x30, 0xeb, 0x30, 0xb8, 0x30, 0xaf, 0x06, 0x68, 0x19, + 0x51, 0x50, 0x28, 0x11, 0x7a, 0x28, 0x15, 0x72, 0x00, 0x64, 0x20, 0x07, + 0x05, 0x68, 0x00, 0x69, 0x00, 0x6b, 0x06, 0x80, 0x7f, 0x6a, 0x06, 0x00, + 0x7d, 0xaf, 0x50, 0xff, 0x73, 0x60, 0xff, 0x73, 0x4f, 0xb5, 0x05, 0xd1, + 0x01, 0x07, 0xb1, 0x7f, 0x06, 0x31, 0xff, 0x00, 0x15, 0x5e, 0x4e, 0x62, + 0x14, 0x5c, 0x09, 0x54, 0x20, 0x4b, 0x51, 0x06, 0x5b, 0x19, 0x0c, 0xd3, + 0x90, 0xc7, 0x74, 0x07, 0xb9, 0xc0, 0xc9, 0x6c, 0xd0, 0x06, 0x58, 0x1b, + 0xd3, 0x7f, 0x06, 0x13, 0x01, 0xa8, 0x06, 0xf3, 0xff, 0x1f, 0x28, 0x11, + 0x37, 0x28, 0x15, 0x40, 0x04, 0x34, 0x03, 0x04, 0x36, 0x04, 0x38, 0x04, + 0x3a, 0x05, 0xe8, 0x1b, 0x0e, 0xf3, 0x7f, 0x80, 0x10, 0x06, 0xf0, 0xff, + 0x10, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x10, 0x00, 0x10, 0x0b, 0x0a, 0x0d, + 0x0a, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x1e, 0x4e, 0x11, 0x00, 0x00, + 0x12, 0x2d, 0x46, 0xda, 0x28, 0x15, 0xcb, 0x06, 0x88, 0x15, 0x38, 0x17, + 0x65, 0x28, 0x13, 0x60, 0x6e, 0x06, 0x27, 0x91, 0x10, 0x0f, 0x50, 0x7f, + 0x69, 0x4f, 0x14, 0x5c, 0x3c, 0x40, 0x5c, 0x06, 0x78, 0x15, 0x00, 0x00, + 0x98, 0xd3, 0x74, 0xb9, 0x31, 0xc8, 0xb2, 0x06, 0x78, 0x15, 0x0f, 0x13, + 0x7f, 0x1f, 0x04, 0x35, 0x28, 0x13, 0x60, 0x3d, 0x06, 0x28, 0x11, 0x10, + 0x17, 0x54, 0xff, 0x11, 0x0b, 0x0c, 0x0c, 0x0c, 0x00, 0x0c, 0x11, 0x11, + 0x0c, 0x0b, 0x0e, 0x0b, 0x11, 0x00, 0x11, 0x11, 0x11, 0x48, 0x1e, 0x5c, + 0x10, 0x00, 0x00, 0x00, 0x13, 0x46, 0xd7, 0x30, 0xed, 0x30, 0xd6, 0x02, + 0x30, 0xc7, 0x30, 0xa3, 0x30, 0xd5, 0x06, 0x48, 0x1b, 0x50, 0x02, 0x00, + 0x6c, 0x00, 0x6f, 0x00, 0x76, 0x2f, 0xad, 0x69, 0xd6, 0x20, 0x05, 0x0e, + 0x70, 0x7f, 0x77, 0x40, 0xff, 0x77, 0x0e, 0x80, 0xff, 0x06, 0x91, 0xff, + 0x6e, 0x00, 0x66, 0x57, 0x7f, 0x2b, 0x59, 0xea, 0x8f, 0x2b, 0x40, 0x59, + 0x06, 0x5b, 0x19, 0x0c, 0xd5, 0x5c, 0xb8, 0x0c, 0xbe, 0x0c, 0x14, 0xb5, + 0x0c, 0xbe, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x01, 0x3b, + 0x04, 0x3e, 0x04, 0x32, 0x04, 0x34, 0x28, 0x19, 0x70, 0x32, 0x06, 0x28, + 0x19, 0x0f, 0x54, 0xff, 0x10, 0x06, 0x90, 0xff, 0x12, 0x0d, 0x0e, 0x0e, + 0x00, 0x0e, 0x0e, 0x12, 0x12, 0x0e, 0x0d, 0x10, 0x0d, 0x00, 0x12, 0x12, + 0x12, 0x12, 0xf6, 0x1d, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x14, 0x46, 0xe9, + 0x30, 0xba, 0x30, 0x04, 0xb0, 0x30, 0xe9, 0x30, 0xc9, 0x06, 0x48, 0x15, + 0x00, 0x00, 0x01, 0x52, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x67, 0x2f, 0xb3, + 0x6c, 0x61, 0x28, 0x1b, 0x0e, 0x50, 0x7f, 0x73, 0x0e, 0xe0, 0xff, 0x06, + 0xb1, 0xff, 0xc9, 0x62, 0x02, 0x79, 0x51, 0x3c, 0x68, 0xd2, 0x52, 0x06, + 0x58, 0x15, 0x00, 0x00, 0x00, 0x7c, 0xb7, 0x88, 0xc9, 0xf8, 0xad, 0x7c, + 0x18, 0xb7, 0xdc, 0xb4, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x20, 0x04, + 0x30, 0x02, 0x04, 0x37, 0x04, 0x33, 0x04, 0x40, 0x20, 0x07, 0x34, 0xe0, + 0x06, 0x28, 0x17, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x13, 0x0e, + 0x0f, 0x0f, 0x0f, 0x00, 0x10, 0x13, 0x13, 0x0f, 0x0f, 0x11, 0x0e, 0x13, + 0x00, 0x13, 0x13, 0x13, 0xf5, 0x1e, 0xde, 0x12, 0x00, 0x03, 0x00, 0x15, + 0x46, 0xeb, 0x30, 0xbb, 0x06, 0x68, 0x11, 0x78, 0x17, 0x54, 0x75, 0x27, + 0x17, 0x65, 0x06, 0xa0, 0x7f, 0x6f, 0x40, 0x81, 0x73, 0x00, 0x78, 0xe9, + 0x06, 0xa0, 0xff, 0x06, 0x91, 0x01, 0x07, 0x11, 0x7f, 0x06, 0xd1, 0xff, + 0x81, 0x9c, 0x5e, 0x43, 0x58, 0x06, 0xb2, 0xff, 0xe8, 0xb8, 0x38, 0xc1, + 0x06, 0x58, 0x11, 0x92, 0xff, 0x40, 0x65, 0x0e, 0xa2, 0x7f, 0x20, 0x04, + 0x43, 0x04, 0x41, 0x04, 0x70, 0x35, 0x06, 0x28, 0x11, 0x0f, 0x53, 0x7f, + 0x10, 0x06, 0xf0, 0xff, 0x14, 0x0f, 0x10, 0x10, 0x00, 0x11, 0x11, 0x14, + 0x14, 0x10, 0x10, 0x12, 0x0f, 0x01, 0x14, 0x14, 0x14, 0x14, 0x2e, 0x1f, + 0x77, 0x28, 0x17, 0x00, 0x16, 0x46, 0xb7, 0x30, 0xea, 0x30, 0xb9, 0x30, + 0x10, 0xc8, 0x30, 0xe9, 0x06, 0x68, 0x1d, 0x53, 0x00, 0x69, 0x00, 0x46, + 0x6c, 0x20, 0x03, 0x73, 0x00, 0x74, 0x4f, 0xb3, 0x10, 0x15, 0xf0, 0x7f, + 0x21, 0x00, 0x95, 0x29, 0x52, 0xaf, 0x65, 0x79, 0x72, 0xc9, 0x40, 0x62, + 0x06, 0x5b, 0x1d, 0xe4, 0xc2, 0xac, 0xb9, 0xa4, 0xc2, 0x0c, 0xb8, 0xd2, + 0x7c, 0xb7, 0x06, 0x58, 0x1d, 0x0f, 0x01, 0xff, 0x04, 0x38, 0x20, 0x04, + 0x3b, 0x20, 0x03, 0x41, 0x04, 0x42, 0x04, 0x40, 0x30, 0x04, 0x30, 0x06, + 0x08, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x11, 0x11, 0x12, 0x08, 0x13, + 0x13, 0x15, 0x15, 0x20, 0x05, 0x11, 0x15, 0x15, 0x00, 0x15, 0x15, 0x59, + 0x1f, 0x61, 0x13, 0x00, 0x00, 0x11, 0x17, 0x46, 0xb9, 0x28, 0x17, 0xd9, + 0x30, 0xf3, 0x06, 0x68, 0x15, 0xd5, 0x38, 0x17, 0x38, 0x15, 0x76, 0x2f, + 0x2f, 0x6e, 0x0e, 0xa0, 0x7f, 0x77, 0x0e, 0xe0, 0xff, 0x81, 0x06, 0x91, + 0xff, 0xaf, 0x65, 0x29, 0x52, 0x87, 0x65, 0x06, 0x72, 0xfd, 0x16, 0x00, + 0x00, 0xac, 0x38, 0x17, 0xbc, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x21, + 0x83, 0x48, 0x15, 0x32, 0x04, 0x35, 0x04, 0x3d, 0x06, 0x08, 0x13, 0x0f, + 0x94, 0xff, 0x80, 0x10, 0x06, 0x90, 0xff, 0x16, 0x12, 0x12, 0x13, 0x14, + 0x14, 0x16, 0x00, 0x16, 0x13, 0x13, 0x14, 0x12, 0x16, 0x16, 0x16, 0x00, + 0x16, 0x5b, 0x1e, 0xb9, 0x12, 0x00, 0x00, 0x18, 0xa8, 0x28, 0x17, 0xe2, + 0x28, 0x19, 0xe3, 0x06, 0x88, 0x19, 0x53, 0x00, 0x6d, 0x2e, 0x00, 0x6f, + 0x2f, 0xb1, 0x79, 0x2f, 0xab, 0x06, 0x38, 0x19, 0x07, 0x70, 0x7f, 0x6a, + 0xc0, 0x0e, 0xe0, 0x7f, 0x06, 0x71, 0xff, 0xaf, 0x65, 0xab, 0x83, 0x81, + 0x68, 0x81, 0x06, 0x98, 0x17, 0xa4, 0xc2, 0xb0, 0xba, 0xb8, 0xb7, 0x06, + 0xb8, 0x17, 0x82, 0x0e, 0xd1, 0xff, 0x21, 0x04, 0x3c, 0x04, 0x3e, 0x28, + 0x1b, 0x4f, 0xe8, 0x06, 0x88, 0x17, 0x0f, 0x54, 0xff, 0x10, 0x06, 0x70, + 0xff, 0x17, 0x28, 0x10, 0x15, 0x15, 0x17, 0x00, 0x17, 0x14, 0x14, 0x15, + 0x13, 0x17, 0x17, 0x17, 0x00, 0x17, 0x92, 0x1d, 0x90, 0x11, 0x00, 0x00, + 0x19, 0x80, 0x28, 0x17, 0xbf, 0x30, 0xe9, 0x30, 0xfb, 0x30, 0xb6, 0x31, + 0x30, 0xb4, 0x20, 0x07, 0x06, 0x1d, 0x37, 0x53, 0x00, 0x74, 0x28, 0x11, + 0x45, 0x72, 0x28, 0x15, 0x20, 0x00, 0x5a, 0x28, 0x1b, 0x67, 0x28, 0x25, + 0xd8, 0x30, 0x0d, 0x0e, 0x30, 0x7f, 0x53, 0x0e, 0xe0, 0xff, 0x06, 0x31, + 0xff, 0xe7, 0x65, 0x4e, 0x04, 0x62, 0x08, 0x62, 0xc9, 0x62, 0x06, 0x78, + 0x19, 0xa4, 0xc2, 0x00, 0xc0, 0xd0, 0x7c, 0xb7, 0x90, 0xc7, 0xe0, 0xac, + 0x60, 0x7c, 0x06, 0x48, 0x1d, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x42, 0x04, + 0x30, 0x22, 0x04, 0x40, 0x20, 0x03, 0x2d, 0x00, 0x17, 0x20, 0x09, 0x33, + 0xf0, 0x28, 0x25, 0x30, 0x0d, 0x10, 0x06, 0x34, 0xff, 0x10, 0x06, 0x30, + 0xff, 0x18, 0x16, 0x16, 0x17, 0x0c, 0x17, 0x16, 0x18, 0x18, 0x20, 0x03, + 0x20, 0x05, 0x18, 0x18, 0x00, 0x2b, 0x1e, 0x3b, 0x12, 0x00, 0x00, 0x1a, + 0x46, 0x01, 0xb7, 0x30, 0xe5, 0x30, 0xe1, 0x30, 0xf3, 0x06, 0x28, 0x11, + 0x8a, 0x7f, 0xaf, 0x68, 0x00, 0x75, 0x2f, 0xb3, 0x65, 0x06, 0x4f, 0xad, + 0x00, 0x28, 0x00, 0x43, 0x20, 0x7f, 0x6f, 0x06, 0xa0, 0x81, 0x53, 0x00, + 0x63, 0xe1, 0x06, 0xc1, 0x01, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x12, + 0x82, 0xe8, 0x95, 0x06, 0x78, 0x13, 0x86, 0x3f, 0xff, 0x88, 0xc2, 0x58, + 0xba, 0x06, 0x38, 0x0f, 0x9f, 0xaf, 0x6a, 0xa0, 0x2f, 0xaf, 0x65, 0x0e, + 0x82, 0x7f, 0x28, 0x04, 0x43, 0x04, 0x3c, 0x0e, 0x04, 0x35, 0x04, 0x3d, + 0x05, 0x88, 0x09, 0x0f, 0xd3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x19, 0x00, + 0x10, 0x03, 0x11, 0x12, 0x12, 0x19, 0x19, 0x12, 0x00, 0x11, 0x1b, 0x10, + 0x19, 0x19, 0x19, 0x19, 0xc5, 0x00, 0x1e, 0x25, 0x13, 0x00, 0x00, 0x1b, + 0x46, 0xc8, 0x00, 0x30, 0xa5, 0x30, 0xeb, 0x30, 0xb4, 0x30, 0xd3, 0x56, + 0x30, 0x38, 0x21, 0xc6, 0x06, 0x08, 0x1f, 0x54, 0x4f, 0xad, 0x3f, 0xa5, + 0x76, 0x0b, 0x00, 0x69, 0x00, 0x73, 0x28, 0x25, 0x74, 0x28, 0x23, 0x06, + 0x70, 0x7f, 0xde, 0x37, 0xa3, 0x06, 0x70, 0x7f, 0x77, 0x40, 0xff, 0x05, + 0xf0, 0x81, 0x07, 0xd1, 0x7f, 0x06, 0x11, 0xff, 0x79, 0x00, 0x72, 0x14, + 0x5c, 0x08, 0x62, 0xf4, 0x7e, 0xc0, 0x10, 0x4e, 0x79, 0x72, 0x06, 0x3b, + 0x1b, 0x2c, 0xd2, 0x74, 0xb9, 0x00, 0xe0, 0xac, 0x44, 0xbe, 0x88, 0xc2, + 0x4c, 0xd1, 0xd0, 0x06, 0x38, 0x1f, 0xf3, 0x7f, 0x6a, 0x0d, 0xe1, 0xff, + 0x22, 0x04, 0x4b, 0x04, 0x00, 0x40, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x32, + 0x04, 0x07, 0x38, 0x04, 0x48, 0x04, 0x42, 0x28, 0x23, 0x0e, 0x94, 0xff, + 0x10, 0x0e, 0x10, 0x7f, 0x00, 0x1a, 0x17, 0x17, 0x18, 0x18, 0x17, 0x1a, + 0x1a, 0x10, 0x18, 0x17, 0x19, 0x20, 0x05, 0x1a, 0x1a, 0xc1, 0x1e, 0x00, + 0xe5, 0x12, 0x00, 0x00, 0x1c, 0x46, 0xd9, 0x30, 0x02, 0xea, 0x30, 0xb3, + 0x30, 0xfb, 0x30, 0x58, 0x1f, 0xce, 0x2a, 0x30, 0xdc, 0x05, 0xe8, 0x19, + 0x56, 0x2f, 0xa7, 0x6c, 0x28, 0x11, 0x6b, 0xaa, 0x2f, 0xb5, 0x20, 0x68, + 0x25, 0x6e, 0x48, 0x25, 0x6f, 0x0d, 0x40, 0x7f, 0x57, 0xb2, 0x00, 0x60, + 0xff, 0x77, 0x0d, 0x60, 0xff, 0x06, 0xf1, 0xff, 0x27, 0x59, 0x38, 0x19, + 0xfa, 0x10, 0x8b, 0x83, 0x6c, 0x06, 0x38, 0x15, 0x00, 0x00, 0xa8, 0xbc, + 0x08, 0xac, 0xb9, 0x54, 0xcf, 0x38, 0x1d, 0x78, 0xb1, 0xf4, 0x6a, 0xbc, + 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x07, 0x3b, 0x28, 0x11, + 0x3a, 0xab, 0x28, 0x19, 0x2d, 0x68, 0x25, 0x3d, 0x48, 0x25, 0x3e, 0x05, + 0x48, 0x1f, 0x0e, 0xf4, 0xff, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x1b, 0x19, + 0x19, 0x1a, 0x1a, 0x19, 0x1b, 0x08, 0x1b, 0x1a, 0x19, 0x04, 0x20, 0x05, + 0x1b, 0x1b, 0xa3, 0x20, 0x1e, 0x3a, 0x28, 0x17, 0x1d, 0x46, 0xd6, 0x30, + 0xe9, 0x0d, 0x30, 0xc4, 0x30, 0xa1, 0x05, 0xe8, 0x0d, 0xb8, 0x17, 0x72, + 0x2f, 0xb1, 0x55, 0x74, 0x2f, 0x29, 0x61, 0x0e, 0x40, 0x7f, 0x57, 0x40, + 0xff, 0x7a, 0x06, 0x60, 0xfd, 0x81, 0x0f, 0x11, 0x7f, 0x17, 0x5f, 0xc9, + 0x62, 0xdf, 0x5b, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x00, 0x0c, 0xbe, 0x7c, + 0xb7, 0x28, 0xcc, 0xd1, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x12, 0x28, + 0x07, 0x30, 0x04, 0x46, 0x20, 0x03, 0xc1, 0x10, 0x06, 0x54, 0xff, 0x10, + 0x06, 0xf0, 0xff, 0x1c, 0x1b, 0x1b, 0x1c, 0x1c, 0x20, 0x02, 0x10, 0x1c, + 0x1b, 0x06, 0x30, 0x05, 0x1c, 0xb9, 0x1e, 0xbf, 0x40, 0x10, 0x00, 0x3f, + 0xff, 0x01, 0x14, 0x15, 0x16, 0x16, 0x03, 0x00, 0x01, 0x01, 0x16, 0x15, + 0x17, 0x14, 0x01, 0x01, 0x00, 0x01, 0x01, 0x02, 0x15, 0x14, 0x15, 0x10, + 0x0f, 0x00, 0x02, 0x02, 0x15, 0x0e, 0x16, 0x15, 0x02, 0x02, 0x34, 0x02, + 0x02, 0x20, 0x1a, 0x20, 0x16, 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, + 0x03, 0x04, 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x04, 0x04, 0x0d, 0x0c, + 0x0f, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x1a, 0x1a, 0x28, 0x7c, + 0x05, 0x05, 0xc0, 0x20, 0x03, 0x20, 0x05, 0x05, 0x05, 0x06, 0x18, 0x18, + 0x19, 0x01, 0x19, 0x18, 0x06, 0x06, 0x19, 0x18, 0x03, 0x20, 0x05, 0x12, + 0x06, 0x06, 0x07, 0x30, 0x44, 0x02, 0x07, 0x40, 0x06, 0x07, 0x00, 0x07, + 0x07, 0x07, 0x08, 0x03, 0x04, 0x04, 0x03, 0x00, 0x04, 0x08, 0x08, 0x04, + 0x03, 0x08, 0x03, 0x08, 0x00, 0x08, 0x08, 0x08, 0x09, 0x04, 0x05, 0x05, + 0x04, 0x00, 0x05, 0x09, 0x09, 0x05, 0x04, 0x07, 0x04, 0x09, 0x00, 0x09, + 0x09, 0x09, 0x0a, 0x05, 0x07, 0x03, 0x05, 0x08, 0x06, 0x0a, 0x0a, 0x03, + 0x20, 0x4e, 0x0a, 0x0a, 0x0a, 0x00, 0x0a, 0x0b, 0x1c, 0x1c, 0x06, 0x06, + 0x1c, 0x0b, 0x20, 0x0b, 0x06, 0x20, 0xca, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, + 0x80, 0x20, 0x52, 0x07, 0x07, 0x0c, 0x0c, 0x07, 0x06, 0x09, 0x01, 0x06, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x07, 0x30, 0x45, 0x02, 0x0d, 0x0d, 0x08, + 0x07, 0x0a, 0x07, 0x30, 0x99, 0x0e, 0x40, 0x08, 0x30, 0x45, 0x0e, 0x0e, + 0x09, 0x08, 0x0b, 0x08, 0x02, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x09, 0x30, + 0x45, 0x0f, 0x00, 0x0f, 0x0a, 0x09, 0x0c, 0x09, 0x0f, 0x0f, 0x0f, 0x10, + 0x0f, 0x10, 0x0a, 0x30, 0x45, 0x10, 0x10, 0x0b, 0x0a, 0x00, 0x0d, 0x0a, + 0x10, 0x10, 0x10, 0x10, 0x11, 0x0b, 0x80, 0x30, 0x45, 0x11, 0x11, 0x0c, + 0x0b, 0x0e, 0x0b, 0x11, 0x04, 0x11, 0x11, 0x11, 0x12, 0x0d, 0x30, 0x35, + 0x12, 0x12, 0x00, 0x0e, 0x0d, 0x10, 0x0d, 0x12, 0x12, 0x12, 0x12, 0x20, + 0x13, 0x0e, 0x30, 0x34, 0x13, 0x13, 0x0f, 0x0f, 0x11, 0x01, 0x0e, 0x13, + 0x13, 0x13, 0x13, 0x14, 0x0f, 0x20, 0x33, 0x00, 0x11, 0x14, 0x14, 0x10, + 0x10, 0x12, 0x0f, 0x14, 0x08, 0x14, 0x14, 0x14, 0x15, 0x20, 0x32, 0x13, + 0x13, 0x15, 0x40, 0x15, 0x20, 0x05, 0x11, 0x15, 0x15, 0x15, 0x15, 0x16, + 0x84, 0x20, 0x32, 0x14, 0x14, 0x16, 0x16, 0x20, 0x29, 0x12, 0x16, 0x08, + 0x16, 0x16, 0x16, 0x17, 0x20, 0x32, 0x15, 0x15, 0x17, 0x40, 0x17, 0x20, + 0x29, 0x13, 0x17, 0x17, 0x17, 0x17, 0x18, 0x87, 0x20, 0x12, 0x17, 0x16, + 0x18, 0x18, 0x20, 0x03, 0x20, 0x05, 0x21, 0x2c, 0x00, 0x10, 0x03, 0x11, + 0x12, 0x12, 0x19, 0x19, 0x12, 0x06, 0x11, 0x1b, 0x10, 0x19, 0x19, 0x29, + 0xcc, 0x20, 0x22, 0x18, 0x03, 0x17, 0x1a, 0x1a, 0x18, 0x17, 0x19, 0x20, + 0x05, 0x21, 0x5c, 0xe0, 0xe9, 0xdf, 0xf1, 0xd7, 0x3f, 0xe4, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x7c, 0xb3, 0x00, + 0x11, 0x15, 0x00, 0x00, 0x30, 0x01, 0x47, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x94, 0x20, 0x5d, + 0x0b, 0x00, 0x00, 0x00, 0x06, 0x47, 0xb6, 0x30, 0xb0, 0x30, 0xec, 0x00, + 0x30, 0xd6, 0x30, 0xf4, 0x76, 0x44, 0x8f, 0x02, 0x40, 0x5e, 0x06, 0x18, + 0x23, 0x5a, 0x00, 0x61, 0x00, 0x67, 0x00, 0x06, 0x72, 0x00, 0x65, 0x00, + 0x62, 0x06, 0x48, 0xa0, 0xb0, 0x7f, 0x20, 0x00, 0x00, 0x28, 0x00, 0x76, + 0x00, 0x69, 0x00, 0x6c, 0x88, 0x20, 0x01, 0x65, 0x00, 0x29, 0x06, 0x40, + 0x7f, 0x53, 0x00, 0x74, 0xb5, 0x21, 0x11, 0x64, 0x20, 0x05, 0x05, 0xb0, + 0x7f, 0x61, 0x21, 0x7d, 0x72, 0x20, 0xf9, 0x56, 0x61, 0x06, 0x0a, 0x24, + 0x43, 0x21, 0x6f, 0x75, 0x20, 0xef, 0x30, 0xf3, 0x20, 0xb0, 0x20, 0xf7, + 0x65, 0x21, 0x85, 0x05, 0xb2, 0x13, 0x28, 0x84, 0x3c, 0x68, 0x0c, 0xd2, + 0x52, 0x03, 0x5e, 0x06, 0x32, 0xfb, 0x3b, 0x9a, 0x90, 0xc7, 0x03, 0xf8, + 0xad, 0x08, 0xb8, 0x0c, 0xbe, 0x06, 0x7b, 0x9d, 0xf2, 0xff, 0x77, 0x73, + 0x62, 0x7f, 0x05, 0x52, 0xfd, 0x00, 0x13, 0x7f, 0x63, 0x23, 0x7f, 0x52, + 0x0d, 0x05, 0x53, 0x81, 0x00, 0x17, 0x04, 0x30, 0x04, 0x33, 0x04, 0x40, + 0x04, 0x0c, 0x35, 0x04, 0x31, 0x04, 0x06, 0xf4, 0x7f, 0x10, 0x16, 0x30, + 0x7f, 0x01, 0x14, 0x00, 0x15, 0x15, 0x15, 0x01, 0x01, 0x01, 0x15, 0x14, + 0x28, 0x07, 0x14, 0x20, 0x06, 0x01, 0x58, 0x17, 0x07, 0x47, 0xd3, 0x00, + 0x30, 0xa7, 0x30, 0xed, 0x30, 0xf4, 0x30, 0xa1, 0x02, 0x30, 0xeb, 0x30, + 0x1d, 0xff, 0xd3, 0x20, 0x0b, 0xb4, 0x04, 0x30, 0xe9, 0x30, 0xe1, 0x90, + 0x05, 0x7f, 0xc5, 0x42, 0x00, 0x45, 0x6a, 0x28, 0x13, 0x6c, 0x00, 0x6f, + 0x27, 0x91, 0x61, 0x28, 0x1f, 0x6a, 0x2d, 0x20, 0x11, 0x37, 0x99, 0x6f, + 0x28, 0x2d, 0x6f, 0x28, 0x2f, 0x61, 0xa2, 0x27, 0xad, 0x43, 0x20, 0x1d, + 0x75, 0x00, 0x6e, 0x27, 0x31, 0x79, 0xea, 0x06, 0x20, 0x7f, 0x06, 0xf0, + 0xff, 0x04, 0xdf, 0xcf, 0x52, 0x29, 0x91, 0x67, 0x29, 0x0b, 0x6f, 0xd5, + 0x21, 0x5f, 0x37, 0x93, 0x64, 0x29, 0x17, 0x20, 0x00, 0x01, 0x95, 0x20, + 0x60, 0x1b, 0xba, 0x31, 0xa9, 0x6c, 0x41, 0x93, 0x03, 0x71, 0x25, 0x31, + 0xdb, 0x6e, 0x68, 0x17, 0x6f, 0xc0, 0x88, 0x19, 0x05, 0x91, 0x95, 0x2b, + 0x52, 0x1b, 0x6d, 0xe6, 0x74, 0x00, 0x14, 0x5c, 0x2d, 0x00, 0xd4, 0x6b, + 0x1b, 0x6d, 0x02, 0x08, 0x62, 0xc9, 0x62, 0xbf, 0x53, 0x05, 0xbf, 0xc1, + 0xa8, 0x00, 0xbc, 0x5c, 0xb8, 0x14, 0xbc, 0x74, 0xb9, 0x2d, 0x00, 0x00, + 0x4c, 0xbe, 0x5c, 0xb8, 0xe0, 0xac, 0x7c, 0x07, 0xb7, 0x20, 0x00, 0x70, + 0xad, 0x05, 0x9f, 0xc3, 0x09, 0x12, 0xff, 0x58, 0x2d, 0xd0, 0xb2, 0x25, + 0x03, 0xbb, 0xb1, 0x11, 0x28, 0x11, 0x3b, 0x04, 0x3e, 0x04, 0x41, 0x32, + 0x28, 0x1f, 0x40, 0x04, 0x41, 0x04, 0x3a, 0x20, 0x0b, 0x56, 0x2d, 0x20, + 0x15, 0x38, 0x40, 0x15, 0x33, 0x20, 0x19, 0x50, 0x15, 0x30, 0x00, 0x04, + 0x4f, 0x04, 0x20, 0x00, 0x36, 0x04, 0x43, 0x2b, 0x04, 0x3f, 0x28, 0x49, + 0x3d, 0x20, 0x1f, 0x4f, 0x03, 0x48, 0x47, 0x09, 0x14, 0xff, 0xa2, 0x10, + 0x0c, 0xd0, 0x7f, 0x02, 0x28, 0x13, 0x03, 0x02, 0x02, 0x30, 0x06, 0x01, + 0x84, 0x20, 0x06, 0x02, 0xa3, 0x20, 0xf8, 0x28, 0x17, 0x08, 0x47, 0x51, + 0xd6, 0x28, 0x15, 0xc9, 0x28, 0x11, 0xdd, 0x30, 0xb5, 0x28, 0x1d, 0x1a, + 0xa3, 0x30, 0xca, 0x05, 0xa8, 0x13, 0x58, 0x17, 0x72, 0x28, 0x13, 0x64, + 0xad, 0x28, 0x0f, 0x50, 0x28, 0x1b, 0x73, 0x2f, 0xbd, 0x3f, 0xb1, 0x6e, + 0x05, 0x08, 0x0f, 0xff, 0x01, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x5f, + 0xba, 0x00, 0x78, 0x17, 0x51, 0x95, 0x00, 0x18, 0x0f, 0x03, 0xf1, 0x25, + 0x00, 0x78, 0x17, 0x80, 0x05, 0x71, 0x95, 0x03, 0x5e, 0x57, 0x7f, 0xb7, + 0x5f, 0x2d, 0x00, 0x00, 0xe2, 0x6c, 0x28, 0x84, 0xf4, 0x7e, 0xb3, 0x44, + 0x7e, 0x05, 0xd8, 0x15, 0x00, 0x00, 0x0c, 0x28, 0x0d, 0xdc, 0xb4, 0x00, + 0x2d, 0x00, 0xec, 0xd3, 0xac, 0xc0, 0x44, 0xbe, 0x3d, 0x98, 0xb0, 0x05, + 0xd8, 0x15, 0x08, 0xb2, 0xff, 0x04, 0xd8, 0x0f, 0x98, 0x17, 0x40, 0x28, + 0x15, 0x55, 0x34, 0x88, 0x11, 0x1f, 0x28, 0x23, 0x41, 0x28, 0x23, 0x32, + 0x04, 0xc8, 0x0d, 0xe2, 0x09, 0x34, 0xff, 0x10, 0x0d, 0x50, 0x7f, 0x38, + 0x13, 0x04, 0x03, 0x03, 0x38, 0x1a, 0x02, 0x80, 0x20, 0x06, 0x03, 0x1e, + 0x20, 0xcf, 0x0c, 0x00, 0x00, 0x02, 0x09, 0x47, 0xc9, 0x30, 0xa5, 0x30, + 0x38, 0x1b, 0xf4, 0x08, 0x30, 0xcb, 0x30, 0xaf, 0x28, 0x1f, 0xcd, 0x30, + 0xec, 0x2a, 0x30, 0xc8, 0x28, 0x21, 0xa1, 0x05, 0x68, 0x1f, 0x44, 0x2b, + 0x09, 0x62, 0xa2, 0x48, 0x1b, 0x76, 0x2e, 0xb1, 0x69, 0x00, 0x6b, 0x2f, + 0xb1, 0x4e, 0xaf, 0x2f, 0xc1, 0x72, 0x2f, 0xc5, 0x74, 0x4f, 0xc3, 0x04, + 0xdb, 0x2f, 0x01, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0xaa, 0x05, 0xd8, 0x17, + 0x52, 0x2f, 0xfb, 0x67, 0x2c, 0x9d, 0x73, 0x2f, 0xb7, 0x6f, 0xd7, 0x41, + 0x8b, 0x3f, 0xaf, 0x65, 0x4c, 0xad, 0x61, 0x04, 0x29, 0x2f, 0x00, 0x58, + 0x17, 0x05, 0x91, 0x95, 0x20, 0x5c, 0x67, 0x38, 0x19, 0x2b, 0x59, 0xaf, + 0x65, 0x4b, 0x00, 0x51, 0x2d, 0x00, 0x85, 0x51, 0xf7, 0x96, 0x79, 0x12, + 0x72, 0xe6, 0x74, 0x05, 0x98, 0x1d, 0x50, 0xb4, 0x38, 0x19, 0x0c, 0x00, + 0xbe, 0xc8, 0xb2, 0x6c, 0xd0, 0x2d, 0x00, 0x24, 0x01, 0xb1, 0x08, 0xb8, + 0xb8, 0xd2, 0x14, 0xbc, 0x05, 0x98, 0x1d, 0xd5, 0x09, 0x12, 0xff, 0x04, + 0xd8, 0x1f, 0x14, 0x27, 0xf3, 0x31, 0x48, 0x1b, 0x32, 0x47, 0xf7, 0x44, + 0x46, 0x68, 0x1f, 0x1d, 0x04, 0x35, 0x28, 0x31, 0x35, 0x04, 0x7e, 0x42, + 0x28, 0x21, 0x38, 0x11, 0x04, 0x78, 0x25, 0x09, 0x14, 0xff, 0x10, 0x0c, + 0xd0, 0x7f, 0x38, 0x13, 0x11, 0x24, 0x04, 0x04, 0x28, 0x1a, 0x06, 0x03, + 0x20, 0x06, 0x04, 0x52, 0x20, 0x1e, 0xe0, 0x28, 0x17, 0x0a, 0x47, 0xa4, + 0x30, 0xb9, 0xb5, 0x28, 0x07, 0xe9, 0x05, 0x68, 0x05, 0x00, 0x1f, 0xf6, + 0x49, 0x2f, 0xa3, 0x74, 0x2f, 0xb3, 0x6f, 0x69, 0x05, 0x8b, 0x21, 0x00, + 0x70, 0x7f, 0x65, 0x06, 0xe0, 0xff, 0x37, 0x7b, 0x06, 0x11, 0x83, 0xf8, + 0x17, 0xf8, 0xb1, 0x8f, 0x05, 0x3e, 0x35, 0x00, 0x58, 0x17, 0xb2, 0x15, + 0x04, 0xdf, 0xbf, 0x0a, 0x4f, 0xaf, 0x06, 0x65, 0x79, 0x72, 0xc9, 0x62, + 0x05, 0x98, 0x09, 0xdf, 0xff, 0x74, 0x01, 0xc7, 0xa4, 0xc2, 0xb8, 0xd2, + 0x7c, 0xb7, 0x05, 0x98, 0x09, 0xba, 0x00, 0x73, 0x7f, 0xeb, 0x07, 0x23, + 0xff, 0x04, 0xb8, 0x01, 0x00, 0x5f, 0xe7, 0x18, 0x27, 0xf1, 0x42, 0x8e, + 0x28, 0x17, 0x38, 0x04, 0x39, 0x04, 0x87, 0xfb, 0x09, 0x54, 0xff, 0x10, + 0x0e, 0x50, 0x7f, 0x05, 0x89, 0x28, 0x13, 0x0f, 0x05, 0x05, 0x20, 0x06, + 0x0a, 0x04, 0x20, 0x06, 0x00, 0x05, 0x2a, 0x20, 0xe8, 0x09, 0x00, 0x00, + 0x0b, 0x00, 0x47, 0xab, 0x30, 0xeb, 0x30, 0xed, 0x30, 0xf4, 0x0a, 0x30, + 0xa1, 0x30, 0xc4, 0x06, 0x48, 0x1b, 0x4b, 0x4e, 0x8f, 0x6c, 0xbe, 0x4f, + 0xaf, 0x61, 0x2c, 0x17, 0x05, 0xf8, 0x1b, 0xf0, 0x7f, 0x06, 0xf0, 0xff, + 0x06, 0xf8, 0x17, 0x64, 0xb8, 0x2f, 0x9d, 0x20, 0x05, 0xa1, 0x15, 0x00, + 0x58, 0x17, 0x05, 0x91, 0x95, 0x61, 0x53, 0x14, 0x01, 0x5c, 0x1b, 0x6d, + 0xe6, 0x74, 0x28, 0x83, 0x06, 0x58, 0x19, 0x00, 0x74, 0xce, 0x7c, 0xb9, + 0x5c, 0xb8, 0x14, 0xbc, 0x3a, 0x20, 0xce, 0x06, 0x58, 0x19, 0x07, 0xf2, + 0xff, 0x05, 0xf8, 0x1b, 0x1a, 0x2f, 0xf9, 0x40, 0x02, 0x04, 0x3b, 0x04, + 0x3e, 0x04, 0x32, 0x28, 0x13, 0x46, 0xe9, 0x06, 0x08, 0x19, 0x07, 0xf4, + 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x06, 0x38, 0x0c, 0x06, 0x06, 0x20, 0x06, + 0x40, 0x0b, 0x30, 0x06, 0x06, 0x57, 0x20, 0x0e, 0x0b, 0x00, 0x00, 0x00, + 0x0c, 0x47, 0xb3, 0x30, 0xd7, 0x30, 0xea, 0xa0, 0x28, 0x17, 0xcb, 0x28, + 0x17, 0xa1, 0x30, 0x1d, 0xff, 0xaf, 0x88, 0x20, 0x0d, 0xb8, 0x30, 0xa7, + 0x28, 0x29, 0xc4, 0x30, 0xa3, 0xaa, 0x05, 0x28, 0x29, 0x4b, 0x2e, 0xa9, + 0x70, 0x4f, 0xaf, 0x76, 0x2f, 0x2f, 0x69, 0x8c, 0x2c, 0x2f, 0x61, 0x00, + 0x2d, 0x28, 0x2d, 0x3f, 0xc1, 0x7e, 0x01, 0x5f, 0x65, 0x28, 0x2d, 0x63, + 0x46, 0xa9, 0x04, 0x7b, 0x49, 0x01, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x06, + 0x18, 0x17, 0xbc, 0x00, 0x11, 0x95, 0x20, 0x67, 0xb1, 0x03, 0xd1, 0x19, + 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0xd1, 0x79, 0x00, 0x6e, 0x66, 0xcc, + 0x91, 0x2b, 0x59, 0x3c, 0x5c, 0x20, 0xdf, 0x5b, 0x22, 0x77, 0x51, 0xcc, + 0x91, 0xed, 0x70, 0x08, 0x2b, 0x59, 0x50, 0x9f, 0x05, 0x78, 0x25, 0x54, + 0xcf, 0x04, 0x00, 0xd5, 0xac, 0xb9, 0x0c, 0xbe, 0xc8, 0xb2, 0x28, 0x00, + 0xcc, 0x2d, 0x00, 0x6c, 0xd0, 0xac, 0xb9, 0x1c, 0x0e, 0xc8, 0x0c, 0xbe, + 0x58, 0x05, 0x88, 0x25, 0x09, 0x52, 0xff, 0x04, 0x98, 0x2d, 0x1a, 0xae, + 0x28, 0x11, 0x3f, 0x28, 0x19, 0x38, 0x28, 0x17, 0x38, 0x03, 0x38, 0x19, + 0x3e, 0x31, 0x04, 0x2d, 0x28, 0x2f, 0x30, 0x13, 0x36, 0x04, 0x35, 0x04, + 0xe8, 0x2f, 0xd2, 0x09, 0x54, 0xff, 0x10, 0x0c, 0x90, 0x7f, 0x07, 0x38, + 0x0c, 0x07, 0x07, 0x20, 0x06, 0x0c, 0x84, 0x30, 0x06, 0x07, 0xd1, 0x20, + 0xf5, 0x28, 0x17, 0x0d, 0x47, 0x01, 0xaf, 0x30, 0xe9, 0x30, 0xd4, 0x30, + 0xca, 0x28, 0x11, 0x16, 0xb6, 0x30, 0xb4, 0x28, 0x21, 0xa8, 0x05, 0x28, + 0x0b, 0xdf, 0xaf, 0x72, 0xaa, 0x2f, 0xb1, 0x70, 0x2e, 0xb1, 0x6e, 0x48, + 0x11, 0x5a, 0x2f, 0xbf, 0x67, 0x8f, 0x2f, 0xbd, 0x72, 0x00, 0x6a, 0x4e, + 0xbf, 0x04, 0xfb, 0x3d, 0x00, 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0xfa, 0x05, + 0x1e, 0xc1, 0x00, 0x78, 0x17, 0xb1, 0x95, 0x58, 0x11, 0x3f, 0xc9, 0x6c, + 0x4f, 0xc3, 0x20, 0xe0, 0x03, 0xa1, 0x25, 0x00, 0x78, 0x17, 0x05, 0x71, + 0x95, 0x4b, 0x51, 0xc9, 0x62, 0xae, 0x00, 0x76, 0xb3, 0x7e, 0x2d, 0x00, + 0x4e, 0x62, 0x08, 0x18, 0x62, 0x17, 0x52, 0x05, 0x78, 0x0f, 0x7f, 0xff, + 0x6c, 0xd0, 0x7c, 0x00, 0xb7, 0x3c, 0xd5, 0x98, 0xb0, 0x2d, 0x00, 0x90, + 0x07, 0xc7, 0xe0, 0xac, 0x40, 0xb8, 0x05, 0x78, 0x0f, 0x09, 0x52, 0xff, + 0x04, 0x98, 0x0f, 0xa8, 0x98, 0x17, 0x40, 0x27, 0xf7, 0x3f, 0x28, 0x17, + 0x3d, 0x04, 0x41, 0xab, 0x68, 0x13, 0x17, 0x28, 0x09, 0x33, 0x28, 0x2f, + 0x40, 0x40, 0x11, 0x04, 0x58, 0x0f, 0xd2, 0x09, 0x54, 0xff, 0x10, 0x0d, + 0x10, 0x7f, 0x08, 0x38, 0x0c, 0x08, 0x08, 0x20, 0x06, 0x0d, 0x84, 0x30, + 0x06, 0x08, 0xd4, 0x20, 0x4b, 0x28, 0x17, 0x0e, 0x47, 0x11, 0xea, 0x30, + 0xab, 0x28, 0x13, 0xbb, 0x30, 0xcb, 0x05, 0xe8, 0x0f, 0xaa, 0x7f, 0xf4, + 0x4c, 0x2f, 0xa9, 0x6b, 0x4f, 0xa3, 0x53, 0x2e, 0xb9, 0x6e, 0xff, 0x28, + 0x0d, 0x05, 0x18, 0x0b, 0x00, 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xd6, + 0x97, 0x00, 0x18, 0x17, 0x57, 0xfd, 0x38, 0x0d, 0xf7, 0x71, 0x9b, 0x78, + 0x17, 0x3d, 0xb7, 0x31, 0xa5, 0x67, 0x49, 0xc3, 0x03, 0x5f, 0x4f, 0x00, + 0x58, 0x17, 0x80, 0x05, 0x91, 0x95, 0x29, 0x52, 0x61, 0x53, 0x2d, 0x00, + 0x5e, 0x18, 0x58, 0x3c, 0x5c, 0x05, 0xf8, 0x11, 0x5f, 0xff, 0xac, 0xb9, + 0x74, 0x07, 0xce, 0x2d, 0x00, 0x3c, 0xc1, 0x05, 0xf8, 0x0f, 0x08, 0x92, + 0xff, 0x05, 0x18, 0x0b, 0xa8, 0xbf, 0xe5, 0x1b, 0x2f, 0xf7, 0x46, 0x68, + 0x0f, 0x21, 0x04, 0x35, 0xba, 0x28, 0x1d, 0x4c, 0x05, 0x28, 0x0d, 0x08, + 0xb4, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x09, 0x28, 0x13, 0x02, 0x24, 0x09, + 0x09, 0x20, 0x06, 0x0e, 0x08, 0x20, 0x06, 0x09, 0xac, 0x00, 0x1f, 0xee, + 0x0a, 0x00, 0x00, 0x0f, 0x47, 0xe1, 0x00, 0x30, 0xb8, 0x30, 0xe0, 0x30, + 0xea, 0x30, 0xa7, 0xa0, 0x06, 0x68, 0x17, 0x4d, 0x2f, 0x95, 0x11, 0x01, + 0x69, 0x00, 0x6d, 0xfe, 0x2b, 0x15, 0x05, 0x7b, 0x23, 0x00, 0xd0, 0x7f, + 0x06, 0x10, 0xff, 0x3f, 0xa3, 0x06, 0x70, 0x7f, 0x00, 0x58, 0x17, 0x20, + 0xb8, 0x60, 0x97, 0x6a, 0x05, 0x00, 0x99, 0x00, 0x58, 0x17, 0x05, 0x91, + 0x15, 0x85, 0x68, 0x09, 0x04, 0x54, 0x46, 0x7a, 0x17, 0x52, 0x06, 0x58, + 0x15, 0x00, 0x00, 0x00, 0x54, 0xba, 0xc0, 0xc9, 0x34, 0xbb, 0x40, 0xb8, + 0xf4, 0x06, 0x78, 0x17, 0x06, 0xf2, 0x7f, 0x00, 0x12, 0xff, 0x05, 0xd8, + 0x17, 0x1c, 0x28, 0x0b, 0x34, 0x04, 0x57, 0x36, 0x28, 0x1d, 0x3c, 0x28, + 0x03, 0x40, 0x05, 0xc8, 0x13, 0x08, 0x54, 0xff, 0x10, 0x0d, 0xd0, 0x7f, + 0x44, 0x0a, 0x28, 0x13, 0x01, 0x0a, 0x0a, 0x20, 0x06, 0x0f, 0x09, 0x80, + 0x20, 0x06, 0x0a, 0xfc, 0x20, 0xaf, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x47, + 0xaa, 0x30, 0xb7, 0x30, 0xa8, 0x30, 0x00, 0xaf, 0x30, 0x1d, 0xff, 0xd0, + 0x30, 0xe9, 0x30, 0x11, 0xcb, 0x30, 0xe3, 0x05, 0xe8, 0x1f, 0x4f, 0x00, + 0x73, 0x2f, 0xb1, 0xab, 0x38, 0x0f, 0x6b, 0x2f, 0xb3, 0x42, 0x2f, 0xb9, + 0x72, 0x2f, 0xbd, 0x3f, 0xb7, 0xfb, 0x3e, 0xb1, 0x05, 0x1b, 0x39, 0x00, + 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x06, 0x58, 0x17, 0x69, 0x2f, 0xb5, 0xb1, + 0x95, 0x5e, 0x20, 0xa8, 0x2f, 0x6c, 0x41, 0x95, 0x03, 0xb1, 0x25, 0x00, + 0x58, 0x17, 0x05, 0x91, 0x95, 0x65, 0x00, 0x59, 0x7f, 0x89, 0x36, 0x80, + 0x4b, 0x51, 0x2d, 0x00, 0x00, 0xf4, 0x5d, 0xc9, 0x62, 0x3c, 0x5c, 0x9a, + 0x40, 0x4e, 0x05, 0xd8, 0x21, 0x24, 0xc6, 0xdc, 0xc2, 0x08, 0xc6, 0x00, + 0x6c, 0xd0, 0x2d, 0x00, 0x14, 0xbc, 0x7c, 0xb7, 0x3a, 0xd0, 0xb0, 0x05, + 0xf8, 0x1f, 0x08, 0xb2, 0xff, 0x05, 0x38, 0x21, 0x1e, 0x28, 0x09, 0x38, + 0xa0, 0x28, 0x1b, 0x46, 0x28, 0x0f, 0x3e, 0x04, 0x2d, 0x00, 0x11, 0xae, + 0x28, 0x15, 0x40, 0x48, 0x0d, 0x4c, 0x05, 0x48, 0x23, 0x08, 0xb4, 0xff, + 0x10, 0x0d, 0x30, 0x7f, 0x0b, 0x89, 0x28, 0x13, 0x08, 0x0b, 0x0b, 0x20, + 0x06, 0x10, 0x0a, 0x20, 0x06, 0x00, 0x0b, 0x65, 0x20, 0x48, 0x0d, 0x00, + 0x00, 0x11, 0x00, 0x47, 0xdd, 0x30, 0xb8, 0x30, 0xa7, 0x30, 0xac, 0xa2, + 0x28, 0x17, 0xb9, 0x28, 0x17, 0xf4, 0x30, 0xa9, 0x28, 0x1b, 0xa2, 0xa5, + 0x05, 0xa8, 0x1b, 0x50, 0x2e, 0xa9, 0x7e, 0x01, 0x3e, 0xb3, 0x61, 0x28, + 0x17, 0x57, 0x53, 0x46, 0x79, 0x76, 0x4e, 0xbd, 0x69, 0x05, 0x48, 0x19, + 0x00, 0xb0, 0x7f, 0x05, 0x3f, 0xbb, 0xaf, 0x00, 0x30, 0xff, 0x77, 0x80, + 0x7f, 0x6e, 0x06, 0x68, 0x17, 0xb1, 0x95, 0x00, 0x18, 0x17, 0xf1, 0xa5, + 0xdc, 0x04, 0x18, 0x17, 0xd2, 0x15, 0x45, 0x2a, 0x3b, 0x03, 0x90, 0x71, + 0xdf, 0xff, 0xe2, 0x6c, 0x00, 0xed, 0x70, 0xa0, 0x52, 0x2d, 0x00, 0xaf, + 0x65, 0x08, 0xc9, 0x62, 0x83, 0x6c, 0x06, 0x18, 0x17, 0xec, 0xd3, 0x1c, + 0x00, 0xc8, 0x00, 0xac, 0x2d, 0x00, 0xac, 0xc2, 0x7c, 0x01, 0xb7, 0xf4, + 0xbc, 0xc8, 0xb2, 0x44, 0xc5, 0x05, 0xd8, 0x19, 0xae, 0x00, 0xb3, 0x7f, + 0xeb, 0x05, 0x63, 0xff, 0x7a, 0x4a, 0x9b, 0x00, 0x53, 0xff, 0x04, 0xf8, + 0x19, 0x1f, 0xac, 0x28, 0x0d, 0x36, 0x28, 0x17, 0x36, 0x48, 0x05, 0x38, + 0x19, 0x21, 0x04, 0x57, 0x3b, 0x28, 0x1b, 0x32, 0x28, 0x25, 0x3d, 0x05, + 0x28, 0x19, 0x08, 0xb4, 0xff, 0x10, 0x0d, 0x30, 0x7f, 0x44, 0x0c, 0x28, + 0x13, 0x09, 0x0c, 0x0c, 0x20, 0x06, 0x11, 0x0b, 0x80, 0x20, 0x06, 0x0c, + 0x3d, 0x20, 0x94, 0x0c, 0x00, 0x00, 0x01, 0x12, 0x47, 0xd7, 0x30, 0xea, + 0x30, 0xe2, 0x20, 0x03, 0x40, 0xa7, 0x28, 0x19, 0xb4, 0x30, 0xeb, 0x30, + 0xb9, 0x30, 0x01, 0xad, 0x30, 0xfb, 0x30, 0xb3, 0x30, 0xbf, 0x20, 0x0b, + 0xa2, 0x05, 0x38, 0x1d, 0x50, 0x2f, 0x9f, 0x69, 0x00, 0x6d, 0x2e, 0xaf, + 0x72, 0x8b, 0x4f, 0xb5, 0x2d, 0x00, 0x47, 0x40, 0x0b, 0x73, 0x2f, 0xbf, + 0x3e, 0xb9, 0x5e, 0x4b, 0x2e, 0xc9, 0x74, 0x4f, 0xc5, 0x04, 0x5b, 0x3d, + 0x01, 0x90, 0x7f, 0x06, 0x50, 0xff, 0x6b, 0xd6, 0x04, 0xe0, 0x7f, 0xf8, + 0x17, 0x4c, 0x2f, 0xa7, 0x74, 0x41, 0x8d, 0x3f, 0x9f, 0x65, 0x8d, 0x2f, + 0xcd, 0x2d, 0x00, 0x4d, 0x4f, 0xd3, 0x31, 0x85, 0x6e, 0x04, 0x0f, 0xaf, + 0xc0, 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0xe8, 0x6e, 0x77, 0x6d, 0x8c, + 0x54, 0x0c, 0x71, 0x5c, 0x3a, 0x53, 0x05, 0xd8, 0x0f, 0x7f, 0xff, 0x04, + 0xd5, 0x00, 0xac, 0xb9, 0xa8, 0xba, 0x40, 0xb8, 0x2d, 0x00, 0x00, 0xe0, + 0xac, 0x74, 0xb9, 0xa4, 0xc2, 0xa4, 0xd0, 0x03, 0x54, 0xcf, 0xc0, 0xd0, + 0x74, 0xb9, 0x05, 0x78, 0x1d, 0x08, 0xf2, 0xff, 0xc5, 0xb3, 0xff, 0x04, + 0x38, 0x23, 0x1f, 0x04, 0x40, 0x27, 0xe9, 0x3c, 0x28, 0x1d, 0x5f, 0x40, + 0x88, 0x19, 0x13, 0x40, 0x0d, 0x38, 0x03, 0x05, 0x38, 0x17, 0x09, 0x74, + 0xff, 0x10, 0x0c, 0x50, 0x7f, 0x44, 0x0d, 0x28, 0x13, 0x10, 0x0d, 0x0d, + 0x20, 0x06, 0x12, 0x0c, 0x80, 0x20, 0x06, 0x0d, 0x39, 0x20, 0x40, 0x0a, + 0x00, 0x00, 0x01, 0x13, 0x47, 0xb7, 0x30, 0xb5, 0x30, 0xaf, 0x28, 0x13, + 0x40, 0xe2, 0x28, 0x11, 0xe9, 0x30, 0xf4, 0x30, 0xa3, 0x30, 0x6a, 0xca, + 0x05, 0x48, 0x0f, 0x7f, 0xfc, 0x53, 0x2f, 0x97, 0x73, 0x2f, 0xab, 0x6b, + 0xdf, 0x66, 0x7f, 0x7e, 0x19, 0x69, 0x46, 0x83, 0x05, 0x1b, 0x2f, 0x00, + 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x1e, 0xb9, 0xb5, 0xf8, 0x17, 0x64, + 0x49, 0x8d, 0x91, 0x95, 0x20, 0x60, 0x15, 0x65, 0x2f, 0xb1, 0xb8, 0x3f, + 0xb3, 0x20, 0x03, 0xe1, 0x25, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x21, + 0x95, 0x28, 0x00, 0x84, 0x4b, 0x51, 0x2d, 0x00, 0xab, 0x83, 0xaf, 0x01, + 0x65, 0xc9, 0x62, 0xf4, 0x7e, 0xb3, 0x7e, 0x05, 0xd8, 0x1f, 0x00, 0xdc, + 0xc2, 0xac, 0xc0, 0x6c, 0xd0, 0x2d, 0x00, 0x00, 0xa8, 0xba, 0xac, 0xc2, + 0x7c, 0xb7, 0x44, 0xbe, 0x3e, 0x98, 0xb0, 0x05, 0x78, 0x11, 0x09, 0x32, + 0xff, 0x04, 0x58, 0x0b, 0xc1, 0xff, 0x2f, 0xff, 0x41, 0xa8, 0x28, 0x03, + 0x46, 0x68, 0x13, 0x1c, 0x28, 0x21, 0x41, 0x04, 0x3b, 0xbc, 0x28, 0x15, + 0x32, 0x28, 0x2f, 0x05, 0x18, 0x19, 0x08, 0xd4, 0xff, 0x10, 0x0d, 0x10, + 0x7f, 0x0e, 0x0e, 0x0a, 0x0e, 0x0e, 0x0b, 0x0f, 0x30, 0x05, 0x13, 0x30, + 0x0a, 0x0e, 0x00, 0x54, 0x20, 0xa6, 0x0b, 0x00, 0x00, 0x14, 0x47, 0x01, + 0xb9, 0x30, 0xd7, 0x30, 0xea, 0x30, 0xc8, 0x28, 0x19, 0x00, 0xc0, 0x30, + 0xeb, 0x30, 0xde, 0x30, 0xc1, 0x30, 0x58, 0xa2, 0x05, 0xe8, 0x17, 0x70, + 0x28, 0x09, 0x3e, 0xa3, 0x2d, 0x00, 0x44, 0xab, 0x2f, 0x97, 0x6c, 0x2f, + 0xbb, 0x61, 0x2f, 0xa1, 0x69, 0x05, 0x48, 0x15, 0x00, 0xb0, 0x7f, 0x5f, + 0x65, 0x06, 0xe0, 0xff, 0x65, 0x2f, 0xc1, 0x06, 0x18, 0x17, 0x31, 0x8f, + 0x31, 0x85, 0x51, 0x83, 0x7d, 0x6e, 0x2f, 0xcd, 0xd1, 0x97, 0x03, 0xf9, + 0x2b, 0x00, 0x78, 0x17, 0x00, 0x32, 0x15, 0x63, 0x42, 0x15, 0x80, 0x03, + 0xdf, 0xd5, 0xaf, 0x65, 0x6e, 0x66, 0x29, 0x52, 0x79, 0x00, 0x72, 0x2d, + 0x00, 0xbe, 0x8f, 0x14, 0x5c, 0x6c, 0x04, 0x9a, 0xd0, 0x63, 0x9a, 0x4e, + 0x05, 0xb8, 0x19, 0xa4, 0xc2, 0x00, 0x0c, 0xd5, 0xac, 0xb9, 0xb8, 0xd2, + 0x2d, 0x00, 0x00, 0xec, 0xb2, 0xc8, 0xb9, 0xf0, 0xd2, 0x44, 0xc5, 0xd7, + 0x05, 0xf8, 0x17, 0x00, 0x73, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x61, + 0xe9, 0x05, 0x18, 0x15, 0x38, 0x17, 0x46, 0x3f, 0x28, 0x05, 0x38, 0x04, + 0x42, 0x48, 0x01, 0x38, 0x19, 0x14, 0x8b, 0x28, 0x25, 0x3b, 0x04, 0x3c, + 0x28, 0x2b, 0x42, 0x05, 0x28, 0x19, 0x08, 0x94, 0xff, 0x81, 0x10, 0x0d, + 0x50, 0x7f, 0x0f, 0x0f, 0x0f, 0x0f, 0x12, 0x10, 0x30, 0x05, 0x42, 0x14, + 0x30, 0x0a, 0x0f, 0xee, 0x1e, 0xaf, 0x28, 0x17, 0x15, 0x00, 0x47, 0xb7, + 0x30, 0xd9, 0x30, 0xcb, 0x30, 0xaf, 0xac, 0x28, 0x17, 0xaf, 0x20, 0x07, + 0xf3, 0x05, 0xc8, 0x13, 0x3f, 0xff, 0x60, 0x01, 0x15, 0x69, 0x00, 0x62, + 0x47, 0x03, 0x69, 0x4f, 0xb3, 0x4b, 0x40, 0x09, 0x7d, 0x6e, 0x05, 0x48, + 0x13, 0x00, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x05, 0x7e, 0xb3, 0xf8, 0x17, + 0x64, 0x2f, 0xa9, 0xb5, 0x3f, 0xaf, 0x65, 0x81, 0x95, 0x3d, 0xaf, 0x20, + 0x4f, 0xc5, 0x54, 0x61, 0xa7, 0xe0, 0x03, 0xb8, 0xaf, 0x00, 0x58, 0x17, + 0x05, 0x91, 0x95, 0x0c, 0x5e, 0x1d, 0x8d, 0x3c, 0x11, 0x5c, 0x4b, 0x51, + 0x22, 0x79, 0x51, 0x81, 0x5b, 0x05, 0xb8, 0x11, 0x80, 0x5f, 0xff, 0xdc, + 0xc2, 0xa0, 0xbc, 0xc8, 0xb2, 0x6c, 0x01, 0xd0, 0x2d, 0x00, 0x6c, 0xd0, + 0xcc, 0xb2, 0x05, 0xd8, 0x13, 0xe8, 0x08, 0xb2, 0xff, 0x05, 0x38, 0x13, + 0x3f, 0xf3, 0x28, 0x2f, 0xfd, 0x31, 0x04, 0x35, 0xde, 0x67, 0xff, 0x38, + 0x17, 0x1a, 0x47, 0xf7, 0x04, 0xf8, 0x0f, 0x08, 0xf4, 0xff, 0x10, 0x0d, + 0x70, 0x7f, 0x10, 0x02, 0x0d, 0x0d, 0x0d, 0x0a, 0x0e, 0x10, 0x20, 0x06, + 0x15, 0x00, 0x0d, 0x10, 0x10, 0x10, 0x10, 0x19, 0x1f, 0x4c, 0x80, 0x28, + 0x17, 0x16, 0x47, 0xf4, 0x30, 0xa1, 0x30, 0xe9, 0x00, 0x30, 0xb8, 0x30, + 0xe5, 0x30, 0xc7, 0x30, 0xa3, 0xa9, 0x06, 0x28, 0x17, 0x56, 0x2f, 0xa3, + 0x72, 0x2f, 0xa7, 0x7e, 0x01, 0x36, 0x91, 0xfd, 0x05, 0x98, 0x0f, 0x00, + 0x70, 0x7f, 0x05, 0xf6, 0x17, 0x06, 0xf0, 0x7f, 0x00, 0x58, 0x17, 0x71, + 0x95, 0x73, 0x48, 0x27, 0x78, 0x6e, 0x2f, 0xd3, 0x04, 0x7f, 0x41, 0x00, + 0x58, 0x17, 0x05, 0x91, 0x95, 0xe6, 0x74, 0xc9, 0x06, 0x62, 0xe5, 0x65, + 0x01, 0x4e, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x14, 0x01, 0xbc, 0x7c, 0xb7, + 0xfc, 0xc8, 0x18, 0xb5, 0x06, 0x18, 0x11, 0xea, 0x08, 0x52, 0xff, 0x05, + 0x78, 0x0f, 0x7f, 0xed, 0x12, 0x2f, 0xff, 0x40, 0x27, 0xff, 0x36, 0x3a, + 0x04, 0x34, 0x05, 0xa8, 0x0d, 0x08, 0x94, 0xff, 0x10, 0x0d, 0xf0, 0x7f, + 0x11, 0x28, 0x0c, 0x0c, 0x24, 0x11, 0x11, 0x20, 0x06, 0x03, 0x10, 0x20, + 0x06, 0x11, 0xec, 0x28, 0x20, 0x9d, 0x28, 0x17, 0x17, 0x28, 0x17, 0xa3, + 0x30, 0xed, 0x54, 0x30, 0x30, 0x05, 0xc6, 0x28, 0x17, 0xc4, 0x28, 0x25, + 0x1d, 0xff, 0x1a, 0xdd, 0x30, 0xc9, 0x28, 0x2b, 0x30, 0x19, 0xca, 0x05, + 0x08, 0x27, 0x56, 0xaa, 0x2f, 0xa7, 0x72, 0x2e, 0xad, 0x76, 0x2f, 0xaf, + 0x74, 0x4e, 0x9d, 0x61, 0xad, 0x2f, 0xb5, 0x50, 0x2e, 0xbf, 0x64, 0x48, + 0x2f, 0x30, 0x17, 0x6e, 0x2e, 0x4d, 0xfa, 0x04, 0x7b, 0x3f, 0x01, 0x70, + 0x7f, 0x06, 0xf0, 0xff, 0x05, 0xf8, 0x17, 0x00, 0x11, 0x95, 0x20, 0x68, + 0x37, 0x65, 0x3e, 0x00, 0x6c, 0x20, 0x01, 0x31, 0x91, 0x03, 0x31, 0x25, + 0x00, 0x78, 0x17, 0x05, 0x71, 0x95, 0xf4, 0x00, 0x7e, 0x57, 0x7f, 0xf4, + 0x7e, 0x82, 0x84, 0xdf, 0x00, 0x5b, 0x2d, 0x00, 0xe2, 0x6c, 0xb7, 0x5f, + 0xc9, 0x04, 0x62, 0xf4, 0x7e, 0xb3, 0x7e, 0x05, 0x98, 0x25, 0x44, 0xbe, + 0x00, 0x5c, 0xb8, 0x44, 0xbe, 0xf0, 0xd2, 0x28, 0xcc, 0x00, 0x2d, 0x00, + 0xec, 0xd3, 0xdc, 0xb4, 0x7c, 0xb7, 0x0e, 0x44, 0xbe, 0x98, 0xb0, 0x05, + 0x98, 0x25, 0x09, 0x72, 0xff, 0x04, 0x78, 0x2f, 0x12, 0x82, 0x28, 0x0d, + 0x40, 0x04, 0x3e, 0x04, 0x32, 0x28, 0x15, 0x42, 0xa0, 0x28, 0x19, 0x46, + 0x28, 0x17, 0x3e, 0x04, 0x2d, 0x00, 0x1f, 0xae, 0x20, 0x13, 0x34, 0x48, + 0x31, 0x32, 0x04, 0xc8, 0x2b, 0x09, 0x74, 0xff, 0x10, 0x0c, 0x70, 0x7f, + 0x12, 0x89, 0x28, 0x13, 0x0d, 0x12, 0x12, 0x20, 0x06, 0x04, 0x11, 0x20, + 0x06, 0x00, 0x12, 0x97, 0x20, 0x5c, 0x0c, 0x00, 0x00, 0x18, 0xa2, 0x28, + 0x17, 0xb3, 0x28, 0x15, 0xa1, 0x30, 0xeb, 0x28, 0x0f, 0xb9, 0x00, 0x30, + 0xea, 0x30, 0xa4, 0x30, 0xa7, 0x30, 0xe0, 0xc6, 0x05, 0x08, 0x0d, 0xbf, + 0xaf, 0x75, 0x00, 0x6b, 0x48, 0x17, 0x3f, 0xb7, 0x2d, 0x23, 0x00, 0x53, + 0x2b, 0x25, 0x72, 0x00, 0x6d, 0x2f, 0xbb, 0x04, 0x98, 0x0b, 0xaa, 0x01, + 0x50, 0x7f, 0x65, 0x06, 0x60, 0xff, 0x72, 0x2f, 0xbd, 0x6a, 0x2f, 0xc5, + 0x6d, 0xf7, 0x05, 0x4e, 0xc0, 0x00, 0x78, 0x17, 0xb1, 0x95, 0x00, 0x18, + 0x11, 0x53, 0x49, 0xcd, 0x51, 0xa5, 0x02, 0xdf, 0xcc, 0xc0, 0x00, 0x78, + 0x17, 0x05, 0x71, 0x15, 0x66, 0x6b, 0xd1, 0x79, 0xe6, 0x74, 0x00, 0x14, + 0x5c, 0x2d, 0x00, 0xaf, 0x65, 0xcc, 0x91, 0x0c, 0x36, 0x80, 0xc6, 0x59, + 0x05, 0x98, 0x13, 0x3f, 0xff, 0x80, 0xbd, 0x00, 0x54, 0xcf, 0x14, 0xbc, + 0x74, 0xb9, 0x2d, 0x00, 0x00, 0xdc, 0xc2, 0x74, 0xb9, 0xf8, 0xbb, 0x44, + 0xc5, 0xfa, 0x05, 0x98, 0x13, 0x07, 0x32, 0x7f, 0x00, 0xb2, 0xff, 0x04, + 0x78, 0x0b, 0xd8, 0x17, 0x43, 0x48, 0x09, 0x32, 0xb4, 0x28, 0x01, 0x40, + 0x48, 0x01, 0x38, 0x15, 0x21, 0x28, 0x2b, 0x35, 0x04, 0x74, 0x3c, 0x04, + 0xc8, 0x11, 0x08, 0xf4, 0xff, 0x10, 0x0d, 0x50, 0x7f, 0x13, 0x28, 0x13, + 0x0e, 0x13, 0x48, 0x13, 0x20, 0x06, 0x05, 0x12, 0x20, 0x06, 0x13, 0x3f, + 0x20, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x19, 0x47, 0xb6, 0x30, 0x77, 0xc0, + 0x28, 0x13, 0x05, 0x98, 0x07, 0xff, 0xea, 0x5a, 0x4e, 0x29, 0x56, 0x7d, + 0x05, 0x18, 0x05, 0xff, 0x00, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x06, 0x51, + 0x81, 0xf8, 0x17, 0x31, 0x8f, 0x3f, 0x91, 0x3f, 0xa5, 0x04, 0xbe, 0x27, + 0xc0, 0x00, 0xd8, 0x17, 0x05, 0x91, 0x95, 0x4e, 0x62, 0xbe, 0x8f, 0x14, + 0x5c, 0xc0, 0x05, 0xd8, 0x0b, 0xbf, 0xff, 0x90, 0xc7, 0xe4, 0xb2, 0x74, + 0xb9, 0xf5, 0x05, 0xd8, 0x0b, 0x08, 0x52, 0xff, 0x05, 0x38, 0x05, 0x00, + 0x1f, 0xe1, 0x17, 0x2f, 0xfd, 0x34, 0x88, 0x13, 0xe8, 0x04, 0xd8, 0x03, + 0x08, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x14, 0x28, 0x13, 0x14, 0x14, + 0x14, 0xa0, 0x20, 0x06, 0x09, 0x40, 0x07, 0x5e, 0x1f, 0xd4, 0x0a, 0x00, + 0x20, 0x00, 0x1a, 0x28, 0x17, 0xb0, 0x30, 0xec, 0x30, 0xd6, 0xd1, 0x06, + 0x88, 0x19, 0x38, 0x17, 0x67, 0x2f, 0xa9, 0x65, 0x00, 0x62, 0x06, 0x48, + 0x19, 0xef, 0xd0, 0x7f, 0x5c, 0x9f, 0x3f, 0x07, 0x74, 0x47, 0x1b, 0x05, + 0x14, 0x99, 0xb0, 0xff, 0x07, 0x78, 0x17, 0x57, 0x67, 0x2f, 0xbd, 0x62, + 0x41, 0x93, 0x73, 0x2f, 0xbd, 0x06, 0x78, 0x17, 0x05, 0x51, 0x15, 0x00, + 0x28, 0x84, 0x3c, 0x68, 0xd2, 0x52, 0x03, 0x5e, 0x80, 0x06, 0x78, 0x19, + 0x90, 0xc7, 0xf8, 0xad, 0x08, 0xb8, 0x0c, 0x6e, 0xbe, 0x06, 0x78, 0x19, + 0xf2, 0xff, 0x70, 0x2f, 0xb5, 0x3f, 0xbd, 0x3a, 0x15, 0x63, 0xbe, 0x2f, + 0xb9, 0x65, 0x04, 0xe7, 0x9d, 0xb3, 0xff, 0x3a, 0x97, 0x05, 0xf8, 0x1b, + 0x38, 0x17, 0x33, 0x8e, 0x28, 0x15, 0x35, 0x04, 0x31, 0x06, 0x48, 0x19, + 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x15, 0x52, 0x15, 0x28, 0x13, + 0x15, 0x20, 0x05, 0x15, 0x08, 0x20, 0x05, 0x15, 0x04, 0x15, 0x94, 0x20, + 0x5d, 0x0b, 0x00, 0x3f, 0xff, 0x01, 0x14, 0x80, 0x20, 0x24, 0x01, 0x01, + 0x01, 0x15, 0x14, 0x07, 0x14, 0x91, 0x20, 0x06, 0x01, 0x02, 0x20, 0x0b, + 0x03, 0x02, 0x02, 0x30, 0x06, 0x51, 0x01, 0x20, 0x06, 0x02, 0x30, 0x0b, + 0x04, 0x03, 0x03, 0x30, 0x12, 0x51, 0x02, 0x20, 0x06, 0x03, 0x30, 0x0b, + 0x11, 0x04, 0x04, 0x20, 0x12, 0x24, 0x06, 0x03, 0x20, 0x06, 0x04, 0x05, + 0x20, 0x0b, 0x0f, 0x05, 0x49, 0x05, 0x20, 0x06, 0x0a, 0x04, 0x20, 0x06, + 0x05, 0x06, 0x40, 0x04, 0x52, 0x06, 0x20, 0x06, 0x0b, 0x30, 0x06, 0x06, + 0x07, 0x40, 0x04, 0x07, 0xa5, 0x20, 0x06, 0x0c, 0x30, 0x06, 0x07, 0x08, + 0x40, 0x04, 0x08, 0x20, 0x06, 0x48, 0x0d, 0x30, 0x06, 0x08, 0x09, 0x20, + 0x0b, 0x02, 0x09, 0x09, 0x92, 0x20, 0x06, 0x0e, 0x08, 0x20, 0x06, 0x09, + 0x0a, 0x20, 0x0b, 0x01, 0x24, 0x0a, 0x0a, 0x20, 0x06, 0x0f, 0x09, 0x20, + 0x06, 0x0a, 0x0b, 0x89, 0x20, 0x0b, 0x08, 0x0b, 0x0b, 0x20, 0x06, 0x10, + 0x0a, 0x20, 0x06, 0x22, 0x0b, 0x0c, 0x20, 0x0b, 0x09, 0x0c, 0x0c, 0x20, + 0x06, 0x11, 0x48, 0x0b, 0x20, 0x06, 0x0c, 0x0d, 0x20, 0x0b, 0x10, 0x0d, + 0x0d, 0x90, 0x20, 0x06, 0x12, 0x0c, 0x20, 0x06, 0x0d, 0x0e, 0x0e, 0x0e, + 0x14, 0x0e, 0x0b, 0x0f, 0x30, 0x05, 0x13, 0x30, 0x0a, 0x0e, 0x0f, 0x05, + 0x0f, 0x0f, 0x0f, 0x12, 0x10, 0x30, 0x05, 0x14, 0x30, 0x0a, 0x44, 0x0f, + 0x30, 0x2b, 0x0a, 0x0e, 0x10, 0x20, 0x32, 0x15, 0x0d, 0x04, 0x10, 0x10, + 0x10, 0x10, 0x11, 0x20, 0x04, 0x0c, 0x11, 0x49, 0x11, 0x20, 0x06, 0x03, + 0x10, 0x20, 0x06, 0x11, 0x12, 0x20, 0x0b, 0x12, 0x0d, 0x12, 0x12, 0x20, + 0x06, 0x04, 0x11, 0x20, 0x06, 0x12, 0x50, 0x13, 0x20, 0x0b, 0x0e, 0x29, + 0x63, 0x12, 0x12, 0x05, 0x12, 0xb8, 0x29, 0x6a, 0x13, 0xf9, 0x6f, 0xf1, + 0x67, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x48, 0x14, + 0x20, 0x50, 0x08, 0xe1, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x01, 0x19, 0xbb, 0x17, 0x20, 0x05, 0x00, 0x48, 0xad, 0x30, 0xd7, + 0x30, 0xed, 0x30, 0xb9, 0x40, 0x30, 0x06, 0x78, 0x1d, 0x43, 0x00, 0x79, + 0x00, 0x70, 0x00, 0x05, 0x72, 0x00, 0x75, 0x00, 0x73, 0x06, 0x60, 0x7f, + 0x68, 0x60, 0x81, 0x55, 0x65, 0x06, 0x49, 0x20, 0x5a, 0x40, 0xff, 0x65, + 0x21, 0x01, 0x6e, 0x06, 0x61, 0x7f, 0x56, 0x69, 0x41, 0x7f, 0x6f, 0x06, + 0x81, 0xff, 0x68, 0x60, 0x81, 0x06, 0x51, 0x7f, 0x5e, 0x03, 0x58, 0x66, + 0x6d, 0xef, 0x8d, 0xaf, 0x06, 0x51, 0xfc, 0x2b, 0x9b, 0x00, 0xa4, 0xd0, + 0x04, 0xd5, 0x5c, 0xb8, 0xa4, 0xc2, 0xc0, 0x0e, 0xb3, 0x7f, 0x06, 0xb1, + 0xff, 0x1a, 0x04, 0x38, 0x04, 0x3f, 0x04, 0x33, 0x40, 0x04, 0x0e, 0x94, + 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x01, 0xe0, 0x01, 0x48, 0x17, 0xc0, + 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, 0x11, 0x0e, 0x00, 0x00, + 0x30, 0x01, 0x49, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9b, 0x23, 0x43, 0x0a, 0x00, 0x00, 0x00, + 0x02, 0x49, 0xd7, 0x30, 0xe9, 0x30, 0xcf, 0x40, 0x30, 0x06, 0x98, 0x1b, + 0x50, 0x00, 0x72, 0x00, 0x61, 0x00, 0x06, 0x67, 0x00, 0x75, 0x00, 0x65, + 0x0e, 0xc0, 0x7f, 0x06, 0xf1, 0x7f, 0x61, 0x80, 0x0e, 0x60, 0x7f, 0x03, + 0x5e, 0xc9, 0x62, 0x3c, 0x68, 0x02, 0x40, 0x5e, 0x06, 0x7b, 0x1d, 0x04, + 0xd5, 0x7c, 0xb7, 0x58, 0xd5, 0xe0, 0x06, 0xf3, 0x7f, 0x06, 0x92, 0x81, + 0x06, 0xf2, 0x7f, 0x1f, 0x04, 0x40, 0x04, 0x30, 0x38, 0x04, 0x33, 0x20, + 0x03, 0x10, 0x06, 0xd4, 0xff, 0x10, 0x06, 0x70, 0xff, 0x01, 0x09, 0x05, + 0x00, 0x02, 0x04, 0x01, 0x01, 0x01, 0x09, 0x0b, 0x0a, 0x50, 0x09, 0x20, + 0x06, 0x01, 0x58, 0x17, 0x03, 0x49, 0x2d, 0x4e, 0x00, 0xe8, 0x90, 0xdc, + 0x30, 0xd8, 0x30, 0xdf, 0x30, 0x05, 0xa2, 0x30, 0x30, 0x57, 0xb9, 0x06, + 0x07, 0x9c, 0x43, 0x28, 0x0f, 0x10, 0x6e, 0x00, 0x74, 0x48, 0x1d, 0x6c, + 0x00, 0x20, 0x00, 0x04, 0x42, 0x00, 0x6f, 0x00, 0x68, 0x28, 0x23, 0x6d, + 0x00, 0x55, 0x69, 0x28, 0x2f, 0x6e, 0x20, 0x11, 0x52, 0x28, 0x31, 0x67, + 0x20, 0x0d, 0x75, 0x6f, 0x20, 0x27, 0x04, 0x1f, 0xdb, 0x50, 0x6f, 0xea, + 0x20, 0x6f, 0x65, 0x20, 0x7d, 0x6a, 0x63, 0xc0, 0x8d, 0x05, 0x38, 0xa9, + 0x4d, 0x20, 0xe7, 0x74, 0x20, 0xff, 0x65, 0x8d, 0x20, 0xfd, 0x62, 0x00, + 0xf6, 0x20, 0xfb, 0x30, 0xf9, 0x73, 0x20, 0x89, 0xf7, 0x31, 0x05, 0x04, + 0xf0, 0xfd, 0x50, 0xff, 0x71, 0x6d, 0x20, 0xe1, 0x8d, 0x05, 0x39, 0xa9, + 0x71, 0xdd, 0x5e, 0xf3, 0x41, 0xeb, 0x64, 0x41, 0x85, 0xd2, 0x03, 0xf0, + 0x95, 0x03, 0xdf, 0xdf, 0x2d, 0x01, 0x4e, 0x77, 0x63, 0x4b, 0x51, 0xde, + 0x5d, 0x06, 0x7f, 0xb5, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x74, 0xb9, 0x1c, + 0xc8, 0x00, 0xc4, 0xb3, 0xb4, 0xcc, 0xa4, 0xc2, 0xa4, 0xd0, 0x03, 0x20, + 0x00, 0xc0, 0xc9, 0x29, 0xbc, 0x05, 0x9f, 0xc3, 0x32, 0x7f, 0x47, 0x64, + 0x41, 0x77, 0x6e, 0x00, 0x2d, 0xa3, 0x7d, 0x33, 0x95, 0x05, 0x3f, 0xc9, + 0xa3, 0x33, 0xef, 0xe9, 0x00, 0x62, 0x7f, 0x20, 0x00, 0x28, 0x2c, 0x35, + 0x53, 0xfd, 0x54, 0xe3, 0x24, 0x17, 0x29, 0x04, 0x2f, 0xda, 0x21, 0x28, + 0x17, 0x35, 0x04, 0x14, 0x34, 0x04, 0x3d, 0x20, 0x05, 0x47, 0x20, 0x09, + 0x48, 0x04, 0x00, 0x41, 0x04, 0x3a, 0x04, 0x38, 0x04, 0x39, 0x04, 0x17, + 0x20, 0x00, 0x3a, 0x48, 0x33, 0x39, 0x04, 0xc8, 0x31, 0x06, 0xf4, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x4a, 0x02, 0x38, 0x0c, 0x02, 0x02, 0x28, 0x1b, + 0x0b, 0x30, 0x06, 0x02, 0x84, 0x58, 0x17, 0x04, 0x49, 0x57, 0x53, 0x06, + 0xb8, 0x15, 0x00, 0x00, 0x56, 0x53, 0x28, 0x07, 0x75, 0x28, 0x17, 0x68, + 0x06, 0x28, 0x13, 0x00, 0x18, 0x17, 0x64, 0xad, 0x2b, 0xb7, 0x20, 0x20, + 0x93, 0x75, 0x26, 0xa1, 0x05, 0x70, 0xff, 0xfc, 0x27, 0x0d, 0xd7, 0x06, + 0x38, 0x11, 0x00, 0x38, 0x17, 0x4d, 0x2c, 0xb5, 0x72, 0x46, 0x29, 0x59, + 0x87, 0x05, 0x19, 0x1d, 0xe4, 0x01, 0x38, 0x17, 0x00, 0x30, 0x95, 0x03, + 0x7f, 0xdf, 0x57, 0x53, 0x06, 0xd8, 0x17, 0x74, 0xc7, 0x37, 0x38, 0xd6, + 0x06, 0x58, 0x11, 0x5f, 0xff, 0x5a, 0x2e, 0xa9, 0x38, 0x19, 0x06, 0x38, + 0x13, 0xb8, 0x00, 0x18, 0x17, 0x64, 0x2c, 0x15, 0x53, 0x7f, 0x05, 0x58, + 0x15, 0x00, 0x00, 0x2e, 0x2e, 0x04, 0x36, 0x28, 0x13, 0x3e, 0x06, 0x48, + 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x00, 0x0a, 0x02, + 0x0d, 0x02, 0x03, 0x03, 0x03, 0x0d, 0x10, 0x02, 0x0e, 0x0a, 0x20, 0x06, + 0x03, 0xd3, 0x22, 0x4a, 0x80, 0x28, 0x17, 0x05, 0x49, 0xd7, 0x30, 0xeb, + 0x30, 0xbc, 0x22, 0x30, 0xcb, 0x06, 0x68, 0x15, 0x00, 0x00, 0x50, 0x2f, + 0x97, 0x7a, 0x9b, 0x2f, 0xab, 0x48, 0x01, 0x05, 0x77, 0x09, 0xfe, 0xaf, + 0xe9, 0x8f, 0x8f, 0x7e, 0xaf, 0x5f, 0x50, 0x2f, 0xc3, 0x6c, 0x2f, 0xb3, + 0x05, 0x3d, 0x33, 0xbc, 0x0d, 0x05, 0xd0, 0x79, 0x00, 0x10, 0x7f, 0xb3, + 0x59, 0x19, 0x69, 0x41, 0x01, 0x50, 0xff, 0x48, 0x01, 0x05, 0x70, 0xff, + 0xb8, 0x17, 0x81, 0x05, 0xb1, 0x7f, 0xd4, 0x6b, 0x14, 0x5c, 0xee, 0x68, + 0x06, 0x98, 0x17, 0x0f, 0x0c, 0xd5, 0x20, 0xc8, 0x06, 0x58, 0x11, 0x73, + 0x7f, 0x05, 0xf2, 0x71, 0x00, 0x53, 0xff, 0xe0, 0x3f, 0x19, 0x05, 0x38, + 0x07, 0xff, 0xfb, 0x1f, 0x04, 0x3b, 0x04, 0x4c, 0x2e, 0x04, 0x37, 0x28, + 0x15, 0x3d, 0x06, 0x28, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x04, 0x00, 0x08, 0x0c, 0x09, 0x0b, 0x0b, 0x04, 0x04, 0x08, 0x00, 0x0a, + 0x09, 0x08, 0x04, 0x04, 0x04, 0x04, 0x5e, 0x00, 0x23, 0x82, 0x09, 0x00, + 0x00, 0x06, 0x49, 0xab, 0x22, 0x30, 0xfc, 0x28, 0x19, 0xb9, 0x30, 0xd0, + 0x20, 0x07, 0xc8, 0xa8, 0x06, 0x28, 0x1d, 0x4b, 0x2e, 0xa7, 0x72, 0x2e, + 0x95, 0x6f, 0x00, 0x76, 0x2f, 0x00, 0x79, 0x2f, 0xb1, 0x56, 0x40, 0x0f, + 0x30, 0x09, 0x05, 0x5f, 0x2f, 0x00, 0x38, 0x17, 0xe2, 0x00, 0x70, 0x93, + 0x05, 0x18, 0x17, 0x71, 0x0d, 0x73, 0x00, 0x62, 0x2f, 0xbf, 0x64, 0xf0, + 0x06, 0x88, 0x17, 0x05, 0x91, 0x01, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x7f, + 0x61, 0x53, 0x57, 0x7f, 0x02, 0xf4, 0x7e, 0xd1, 0x53, 0x29, 0x52, 0x06, + 0x58, 0x1b, 0x74, 0x00, 0xce, 0x7c, 0xb9, 0x5c, 0xb8, 0x44, 0xbe, 0x14, + 0x1e, 0xbc, 0xac, 0xb9, 0x06, 0x38, 0x1f, 0x06, 0x12, 0x71, 0x01, 0x73, + 0xff, 0x05, 0x58, 0x25, 0x1a, 0xa3, 0x27, 0xff, 0x40, 0x28, 0x1b, 0x3e, + 0x04, 0x32, 0x40, 0x09, 0x05, 0xf8, 0x1b, 0xc0, 0x06, 0xf4, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x05, 0x03, 0x09, 0x04, 0x06, 0x05, 0x02, 0x05, 0x05, + 0x02, 0x04, 0x02, 0x03, 0x20, 0x06, 0x05, 0x11, 0xb7, 0x23, 0x27, 0x28, + 0x17, 0x07, 0x49, 0xa6, 0x28, 0x17, 0x10, 0xb9, 0x30, 0xc1, 0x28, 0x1d, + 0xfb, 0x30, 0xca, 0x30, 0x41, 0xc9, 0x20, 0x05, 0xe9, 0x30, 0xd9, 0x30, + 0xe0, 0x05, 0x88, 0x21, 0x45, 0xda, 0x2f, 0x97, 0x74, 0x00, 0xed, 0x2f, + 0xab, 0x6e, 0x47, 0x09, 0x15, 0x20, 0x00, 0x4c, 0x28, 0x29, 0x62, 0x2f, + 0xb7, 0x6d, 0x05, 0x48, 0x1b, 0xbf, 0xf8, 0x17, 0x27, 0x00, 0xc0, 0x91, + 0x04, 0xf8, 0x17, 0x71, 0x0d, 0x05, 0x9e, 0xbd, 0x00, 0x58, 0x17, 0x05, + 0x91, 0x03, 0xc0, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x81, 0xc9, 0x62, 0x1d, + 0x8d, 0xb3, 0x6c, 0x00, 0x54, 0x75, 0x4c, 0x4e, 0xaf, 0x65, 0x63, 0x5b, + 0x80, 0x06, 0x18, 0x1b, 0xb0, 0xc6, 0xa4, 0xc2, 0xf0, 0xd2, 0x98, 0x01, + 0xb0, 0xb8, 0xd2, 0x7c, 0xb7, 0xb0, 0xbc, 0x06, 0x18, 0x19, 0xe8, 0x05, + 0xd2, 0xed, 0x01, 0xf3, 0xff, 0x05, 0x18, 0x1b, 0x23, 0x28, 0x09, 0x42, + 0x04, 0x35, 0x38, 0x04, 0x46, 0x05, 0xe8, 0x0f, 0x07, 0x74, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x06, 0x0c, 0x07, 0x06, 0x0a, 0x0c, 0x0c, 0x06, 0x06, + 0x20, 0x04, 0x20, 0x05, 0x06, 0x00, 0x06, 0x08, 0x24, 0x04, 0x0a, 0x00, + 0x00, 0x08, 0x23, 0x49, 0xea, 0x28, 0x05, 0xec, 0x30, 0xc4, 0x05, 0x88, + 0x07, 0xff, 0xfa, 0x77, 0x4c, 0x2f, 0xab, 0x38, 0x05, 0x3c, 0x1b, 0x63, + 0x05, 0x8b, 0x25, 0x00, 0x98, 0x17, 0x3f, 0x33, 0xfe, 0xd0, 0x93, 0x05, + 0x9f, 0xaf, 0x05, 0xd0, 0x79, 0x00, 0xb8, 0x17, 0x05, 0x91, 0x01, 0x00, + 0x38, 0x17, 0x05, 0xb1, 0x7f, 0x29, 0x01, 0x52, 0x1d, 0x8d, 0xf7, 0x96, + 0x4b, 0x51, 0x06, 0x18, 0x11, 0x80, 0x5f, 0xff, 0xac, 0xb9, 0xa0, 0xbc, + 0x08, 0xb8, 0x20, 0x7d, 0xce, 0x06, 0x18, 0x11, 0x00, 0x33, 0x7f, 0x07, + 0x13, 0xff, 0x05, 0x18, 0x09, 0xdf, 0xff, 0x1b, 0x28, 0x0d, 0x5c, 0x31, + 0x28, 0x17, 0x40, 0x06, 0x68, 0x1b, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x07, 0x04, 0x00, 0x0a, 0x05, 0x07, 0x06, 0x07, 0x07, 0x03, 0x05, + 0x00, 0x05, 0x04, 0x07, 0x07, 0x07, 0x07, 0x18, 0x24, 0x40, 0xb2, 0x28, + 0x17, 0x09, 0x49, 0xd5, 0x30, 0xe9, 0x30, 0x45, 0xc7, 0x28, 0x17, 0xfb, + 0x30, 0xaf, 0x20, 0x09, 0xed, 0x28, 0x25, 0xba, 0x05, 0xd8, 0x21, 0x48, + 0x2c, 0x11, 0x3f, 0x95, 0x58, 0x15, 0x4b, 0x2c, 0x1f, 0xe1, 0x2f, 0x00, + 0x6c, 0x2f, 0xbd, 0x76, 0x2f, 0xc7, 0x05, 0x3b, 0x2f, 0x00, 0x38, 0x17, + 0x00, 0xb0, 0x93, 0xfc, 0x04, 0xd8, 0x17, 0x05, 0xb0, 0x79, 0x00, 0xb8, + 0x17, 0x05, 0x91, 0x01, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x7f, 0x6b, 0x8d, + 0x00, 0xc9, 0x62, 0xb7, 0x5f, 0x28, 0x83, 0x2d, 0x00, 0x00, 0x4b, 0x51, + 0xc9, 0x62, 0x1b, 0x6d, 0xe6, 0x97, 0x80, 0x05, 0xd8, 0x21, 0x50, 0xd7, + 0x7c, 0xb7, 0x70, 0xb3, 0x20, 0x00, 0xce, 0x6c, 0xd0, 0x84, 0xb7, 0x5c, + 0xb8, 0xa0, 0x7a, 0xbc, 0x05, 0xf8, 0x1f, 0x06, 0x12, 0x71, 0x01, 0xb3, + 0xff, 0x05, 0x18, 0x25, 0x1a, 0x48, 0x01, 0x3b, 0x0a, 0x04, 0x3e, 0x04, + 0x32, 0x28, 0x1d, 0x33, 0x48, 0x0f, 0x34, 0xe0, 0x05, 0xa8, 0x23, 0x06, + 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x02, 0x08, 0x03, 0x05, 0x00, + 0x04, 0x08, 0x08, 0x01, 0x03, 0x04, 0x02, 0x08, 0x00, 0x08, 0x08, 0x08, + 0xb3, 0x23, 0x3d, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x49, 0xd1, 0x30, 0xeb, + 0x30, 0xc9, 0x0b, 0x30, 0xa5, 0x30, 0xd3, 0x28, 0x1b, 0xa7, 0x05, 0xe8, + 0x13, 0x45, 0x17, 0xab, 0x28, 0x15, 0x72, 0x2f, 0xa7, 0x75, 0x2f, 0xa1, + 0x69, 0x2f, 0x9d, 0x3f, 0xaf, 0xff, 0x05, 0xbb, 0x33, 0x00, 0x38, 0x17, + 0x00, 0x10, 0x93, 0x05, 0x5f, 0xaf, 0x05, 0xd0, 0x79, 0x00, 0xb8, 0x17, + 0x05, 0x91, 0x01, 0x00, 0x38, 0x17, 0x80, 0x05, 0xb1, 0x7f, 0x15, 0x5e, + 0x14, 0x5c, 0x5c, 0x67, 0xd4, 0x18, 0x6b, 0xc7, 0x91, 0x05, 0xd8, 0x0f, + 0x7f, 0xff, 0x0c, 0xd3, 0x74, 0x01, 0xb9, 0x50, 0xb4, 0x44, 0xbe, 0xb4, + 0xcc, 0x05, 0xf8, 0x11, 0xf5, 0x00, 0x73, 0x7f, 0x07, 0x13, 0xff, 0x05, + 0x18, 0x0d, 0x9f, 0xff, 0x1f, 0x28, 0x15, 0x40, 0x28, 0x09, 0x1e, 0x43, + 0x04, 0x31, 0x28, 0x07, 0x05, 0x78, 0x0d, 0x07, 0x94, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x09, 0x00, 0x07, 0x0b, 0x08, 0x0a, 0x0a, 0x09, 0x09, 0x07, + 0x00, 0x09, 0x08, 0x07, 0x09, 0x09, 0x09, 0x09, 0x92, 0x20, 0x23, 0x36, + 0x28, 0x17, 0x0b, 0x49, 0xaa, 0x30, 0xed, 0x0e, 0x30, 0xe2, 0x30, 0xa6, + 0x28, 0x15, 0x06, 0x18, 0x13, 0x3f, 0xff, 0x4f, 0xae, 0x4f, 0x89, 0x6d, + 0x2f, 0xaf, 0x75, 0x4f, 0x9d, 0x05, 0xb8, 0x13, 0x00, 0x38, 0x17, 0x27, + 0xd0, 0xe0, 0x91, 0x05, 0xb7, 0x97, 0x20, 0x41, 0x0d, 0x6d, 0x00, 0xfc, + 0x00, 0x1f, 0x74, 0x00, 0x7a, 0x05, 0x6e, 0xb4, 0x00, 0x58, 0x17, 0x05, + 0x91, 0x03, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x81, 0x00, 0x65, 0x59, 0x1b, + 0x6d, 0x46, 0x7a, 0x28, 0x83, 0x80, 0x06, 0x58, 0x15, 0x00, 0x00, 0x2c, + 0xc6, 0x5c, 0xb8, 0xa8, 0x07, 0xba, 0xb0, 0xc6, 0x20, 0xce, 0x06, 0x58, + 0x17, 0x05, 0xd2, 0xed, 0x01, 0x13, 0xff, 0xc0, 0x05, 0xb8, 0x13, 0x3f, + 0xff, 0x1e, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x5c, 0x3c, 0x20, 0x03, 0x43, + 0x06, 0x28, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x06, + 0x40, 0x06, 0x28, 0x0f, 0x0a, 0x0a, 0x06, 0x08, 0x07, 0x06, 0x00, 0x0a, + 0x0a, 0x0a, 0x0a, 0x43, 0x23, 0x45, 0x0c, 0x80, 0x2c, 0xad, 0x49, 0xe2, + 0x30, 0xe9, 0x30, 0xd3, 0x30, 0x00, 0xa2, 0x30, 0xfb, 0x30, 0xb7, 0x30, + 0xec, 0x30, 0x6a, 0xb8, 0x20, 0x09, 0x05, 0xd8, 0x1f, 0x4d, 0x2f, 0xa9, + 0x72, 0x2f, 0x9f, 0x76, 0xa2, 0x2f, 0xb3, 0x61, 0x2f, 0xb3, 0x2d, 0x00, + 0x53, 0x2f, 0xbd, 0x6c, 0xba, 0x2f, 0xb7, 0x73, 0x60, 0x11, 0x04, 0xdb, + 0x3f, 0xb0, 0x7f, 0x65, 0x80, 0x7d, 0xe9, 0xe0, 0x40, 0x7d, 0x05, 0x3d, + 0x3b, 0xd8, 0x17, 0x4d, 0x00, 0xe4, 0x00, 0x68, 0xaf, 0x2f, 0xa9, 0x69, + 0x20, 0xfd, 0x63, 0x20, 0x09, 0x31, 0x0d, 0x30, 0x07, 0x71, 0x0f, 0x7f, + 0x65, 0x04, 0x0c, 0x41, 0x00, 0x58, 0x17, 0xd1, 0x95, 0x31, 0x93, 0x91, + 0x91, 0x05, 0x18, 0x17, 0x00, 0x10, 0x7d, 0xc0, 0xb2, 0x11, 0x03, 0xdf, + 0xd5, 0x69, 0x64, 0xc9, 0x62, 0xf4, 0x7e, 0x00, 0x9a, 0x4e, 0x2d, 0x00, + 0x7f, 0x89, 0xcc, 0x91, 0x08, 0x7f, 0x89, 0x9a, 0x4e, 0x05, 0xd8, 0x21, + 0xa8, 0xba, 0x7c, 0x00, 0xb7, 0x44, 0xbe, 0x44, 0xc5, 0xe4, 0xc2, 0x08, + 0x06, 0xb8, 0xc0, 0xc9, 0x44, 0xc5, 0x05, 0xf8, 0x1d, 0xb3, 0x7f, 0xeb, + 0xb6, 0xa3, 0x7d, 0x7a, 0x40, 0x0f, 0x05, 0x73, 0xff, 0xe1, 0xe1, 0xeb, + 0x53, 0x7f, 0x61, 0xb1, 0x05, 0x28, 0x27, 0x1c, 0x28, 0x15, 0x38, 0x03, + 0x32, 0x04, 0x41, 0x28, 0x15, 0x51, 0x3e, 0x20, 0x05, 0x38, 0x28, 0x29, + 0x35, 0x04, 0x37, 0x40, 0x0f, 0xe2, 0x05, 0x18, 0x25, 0x07, 0xb4, 0xff, + 0x10, 0x0e, 0x30, 0x7f, 0x0b, 0x05, 0x03, 0x28, 0x12, 0x0b, 0x00, 0x0b, + 0x05, 0x06, 0x06, 0x05, 0x0b, 0x0b, 0x0b, 0x08, 0x0b, 0x6d, 0x23, 0xfb, + 0x28, 0x17, 0x0d, 0x49, 0x57, 0x75, 0x53, 0x78, 0x19, 0x05, 0xd8, 0x0f, + 0x7f, 0xff, 0x53, 0x4f, 0x97, 0x74, 0x27, 0x0d, 0xf5, 0xf6, 0x8d, 0x04, + 0xf8, 0x11, 0x00, 0x38, 0x17, 0x3f, 0x2f, 0x75, 0x2f, 0xb7, 0x53, 0x2f, + 0x27, 0x57, 0x64, 0x05, 0x60, 0xff, 0xfc, 0x2f, 0xa3, 0x6d, 0xe8, 0x0f, + 0x3f, 0xb9, 0x05, 0x5c, 0x39, 0xdd, 0xd9, 0x97, 0x38, 0x99, 0x65, 0x48, + 0x97, 0x38, 0x1f, 0x3c, 0xb3, 0x61, 0x49, 0xa3, 0xf3, 0x05, 0x19, 0x17, + 0x00, 0x98, 0x17, 0x00, 0x50, 0x93, 0x03, 0x7f, 0xdd, 0x57, 0x53, 0x78, + 0x19, 0x05, 0xd8, 0x0f, 0x84, 0x7f, 0xff, 0x74, 0xc7, 0x38, 0xd6, 0x38, + 0x1b, 0x04, 0xd5, 0x08, 0xa4, 0xc2, 0xa4, 0xd0, 0x05, 0xf8, 0x15, 0x00, + 0x00, 0x5a, 0xde, 0x2f, 0xa7, 0x31, 0xed, 0x2d, 0xe8, 0x21, 0x05, 0xdc, + 0x17, 0x78, 0x17, 0x3a, 0x97, 0x6f, 0xa0, 0x63, 0x7f, 0x6c, 0x05, 0x28, + 0x15, 0x00, 0x00, 0x2e, 0x04, 0x36, 0x2f, 0x04, 0x3d, 0x28, 0x1b, 0x3c, + 0xc8, 0x1f, 0x05, 0x18, 0x0f, 0x07, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x00, 0x0c, 0x0b, 0x04, 0x0e, 0x03, 0x08, 0x0c, 0x0c, 0x00, 0x0e, 0x07, + 0x0d, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0xfc, 0x22, 0xcf, 0x0b, 0x00, + 0x00, 0x0e, 0x49, 0x06, 0xba, 0x30, 0xea, 0x30, 0xf3, 0x06, 0x68, 0x13, + 0x54, 0x97, 0x6c, 0x37, 0x00, 0xed, 0x05, 0x68, 0x03, 0x00, 0x5f, 0xaf, + 0xe9, 0xaf, 0xaf, 0x5e, 0xaf, 0x70, 0x93, 0xee, 0x05, 0x50, 0x7f, 0x9f, + 0xaf, 0x50, 0x79, 0x69, 0x05, 0xe0, 0xff, 0x9c, 0x8b, 0x59, 0x17, 0x69, + 0xe1, 0x05, 0xc1, 0x01, 0x00, 0x38, 0x17, 0x05, 0xb1, 0x7f, 0x79, 0x51, + 0x97, 0x67, 0x06, 0x58, 0x11, 0x87, 0x5f, 0xff, 0x90, 0xc9, 0xb0, 0xb9, + 0x06, 0x18, 0x0d, 0x00, 0x13, 0x7f, 0x06, 0x71, 0x01, 0xe2, 0x93, 0xff, + 0x05, 0x18, 0x03, 0x00, 0x3f, 0xef, 0x17, 0x04, 0x3b, 0x28, 0x05, 0x3d, + 0xe0, 0x05, 0xe8, 0x0d, 0x07, 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, + 0x0e, 0x0d, 0x0c, 0x0e, 0x28, 0x0e, 0x0d, 0x20, 0x04, 0x01, 0x20, 0x05, + 0x0d, 0x0d, 0x00, 0x00, 0x23, 0x8d, 0x0c, 0x00, 0x00, 0x0f, 0x49, 0xf4, + 0x00, 0x30, 0xa3, 0x30, 0xbd, 0x30, 0xc1, 0x30, 0xca, 0x88, 0x06, 0x68, + 0x1b, 0x56, 0x00, 0x79, 0x2f, 0x23, 0x6f, 0x00, 0x0d, 0x7f, 0x01, 0x37, + 0x0f, 0x3e, 0xb1, 0x05, 0xd8, 0x1f, 0xf0, 0x7f, 0x05, 0xfe, 0x33, 0xd8, + 0x17, 0x06, 0x10, 0x8d, 0xf0, 0x00, 0x58, 0x17, 0x05, 0x91, 0x15, 0x00, + 0x38, 0x17, 0x05, 0xb1, 0x93, 0xf4, 0x7e, 0x22, 0x7d, 0x08, 0xfa, 0x57, + 0xb3, 0x7e, 0x06, 0x78, 0x1b, 0x44, 0xbe, 0x8c, 0x07, 0xc1, 0x58, 0xce, + 0x98, 0xb0, 0x06, 0x78, 0x1b, 0x06, 0xf2, 0xff, 0x00, 0x13, 0xff, 0xa0, + 0x05, 0xd8, 0x1f, 0x1a, 0x68, 0x05, 0x20, 0x00, 0x12, 0x04, 0x4b, 0x8b, + 0x28, 0x1d, 0x3e, 0x04, 0x47, 0x48, 0x27, 0x30, 0x05, 0x68, 0x17, 0x07, + 0xf4, 0xff, 0x80, 0x10, 0x0d, 0xf0, 0x7f, 0x0e, 0x0d, 0x0e, 0x0b, 0x0d, + 0x0d, 0x0e, 0xa0, 0x20, 0x04, 0x03, 0x20, 0x05, 0x0e, 0x0e, 0x1f, 0x23, + 0x15, 0x40, 0x0b, 0x00, 0x3f, 0xff, 0x01, 0x09, 0x05, 0x02, 0x04, 0x01, + 0x02, 0x01, 0x01, 0x09, 0x0b, 0x0a, 0x09, 0x20, 0x06, 0x01, 0x54, 0x02, + 0x40, 0x04, 0x02, 0x20, 0x13, 0x0b, 0x30, 0x06, 0x02, 0x03, 0x00, 0x0a, + 0x02, 0x0d, 0x02, 0x03, 0x03, 0x03, 0x0d, 0x10, 0x02, 0x0e, 0x0a, 0x20, + 0x06, 0x03, 0x04, 0x08, 0x0c, 0x00, 0x09, 0x0b, 0x0b, 0x04, 0x04, 0x08, + 0x0a, 0x09, 0x00, 0x08, 0x04, 0x04, 0x04, 0x04, 0x05, 0x03, 0x09, 0x09, + 0x04, 0x06, 0x05, 0x05, 0x20, 0x44, 0x02, 0x03, 0x20, 0x06, 0x00, 0x05, + 0x06, 0x0c, 0x07, 0x0a, 0x0c, 0x0c, 0x06, 0x60, 0x06, 0x20, 0x04, 0x20, + 0x05, 0x06, 0x06, 0x07, 0x04, 0x0a, 0x04, 0x05, 0x07, 0x06, 0x07, 0x07, + 0x20, 0x1c, 0x04, 0x07, 0x00, 0x07, 0x07, 0x07, 0x08, 0x02, 0x08, 0x03, + 0x05, 0x00, 0x04, 0x08, 0x08, 0x01, 0x03, 0x04, 0x02, 0x08, 0x00, 0x08, + 0x08, 0x08, 0x09, 0x07, 0x0b, 0x08, 0x0a, 0x00, 0x0a, 0x09, 0x09, 0x07, + 0x09, 0x08, 0x07, 0x09, 0x0c, 0x09, 0x09, 0x09, 0x0a, 0x20, 0x32, 0x20, + 0x05, 0x0a, 0x06, 0x00, 0x08, 0x07, 0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, + 0x20, 0x05, 0x03, 0x20, 0x0a, 0x0b, 0x0b, 0x05, 0x06, 0x06, 0x00, 0x05, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x04, 0x00, 0x0e, 0x03, 0x08, 0x0c, + 0x0c, 0x0e, 0x07, 0x0d, 0x5c, 0x0b, 0x20, 0x62, 0x0c, 0xf8, 0xff, 0xf0, + 0xf7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x4c, 0x41, 0x00, + 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0x4a, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xc6, 0x27, 0xc2, + 0x08, 0x00, 0x00, 0x00, 0x12, 0x4a, 0xb0, 0x30, 0xea, 0x30, 0xfc, 0x09, + 0x30, 0xf3, 0x30, 0xe9, 0x20, 0x03, 0xc9, 0x30, 0x06, 0x18, 0x23, 0x04, + 0x47, 0x00, 0x72, 0x00, 0x65, 0x20, 0x01, 0x6e, 0x00, 0x15, 0x6c, 0x00, + 0x61, 0x20, 0x05, 0x64, 0x06, 0x20, 0x7f, 0x6f, 0x06, 0xe0, 0x7f, 0x6c, + 0xf6, 0x06, 0x80, 0xfd, 0x00, 0x30, 0xff, 0x69, 0x21, 0x87, 0x0d, 0x90, + 0x7f, 0x3c, 0x68, 0x08, 0x75, 0x96, 0x70, 0x51, 0x06, 0x9b, 0x1b, 0xf8, + 0xad, 0xb0, 0x06, 0xb9, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x7b, 0x9d, 0x07, + 0x32, 0xff, 0x6f, 0xa8, 0x23, 0xfd, 0x65, 0x23, 0xff, 0xe2, 0x06, 0x22, + 0x7f, 0x13, 0x04, 0x40, 0x00, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x3b, 0x04, + 0x30, 0x81, 0x20, 0x05, 0x34, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0d, 0xf4, + 0xff, 0x80, 0x10, 0x0e, 0xb0, 0x7f, 0x01, 0x04, 0x02, 0x02, 0x01, 0x02, + 0x01, 0x40, 0x01, 0x20, 0x05, 0x04, 0x01, 0x01, 0x01, 0x01, 0xa4, 0x12, + 0x2d, 0x39, 0xdb, 0x23, 0x15, 0x4a, 0xc7, 0x28, 0x13, 0xde, 0x80, 0x28, + 0x19, 0xaf, 0x30, 0x96, 0x99, 0xfd, 0x90, 0x30, 0x15, 0x57, 0xdf, 0x57, + 0x05, 0xdf, 0xbf, 0x43, 0x28, 0x0d, 0x70, 0x26, 0x8b, 0x41, 0x74, 0x28, + 0x15, 0x6c, 0x00, 0x20, 0x00, 0x52, 0x28, 0x25, 0x6a, 0x67, 0x26, 0x9b, + 0x34, 0x2b, 0x20, 0x27, 0xb1, 0x66, 0x20, 0x13, 0x44, 0xa2, 0x48, 0x37, + 0x6d, 0x28, 0x37, 0x72, 0x00, 0x6b, 0x03, 0xef, 0xde, 0x48, 0xa2, 0x28, + 0x15, 0x76, 0x28, 0x99, 0x64, 0x00, 0x73, 0x40, 0x83, 0x64, 0xd5, 0x48, + 0xa3, 0x05, 0x9f, 0xc3, 0x48, 0x29, 0x0d, 0x75, 0x21, 0x01, 0x74, 0x80, + 0x7f, 0x7e, 0x74, 0x49, 0x29, 0x71, 0x03, 0x05, 0x10, 0x7f, 0x06, 0xf0, + 0xff, 0x06, 0xd1, 0x7f, 0x32, 0xf5, 0x27, 0x10, 0x59, 0x3a, 0x53, 0x06, + 0x7f, 0xb5, 0x74, 0xb3, 0xc8, 0xb9, 0x00, 0x6c, 0xd0, 0x20, 0x00, 0x18, + 0xc2, 0xc4, 0xb3, 0x00, 0x8c, 0xad, 0x20, 0x00, 0xc0, 0xc9, 0xed, 0xc5, + 0xc1, 0x05, 0xbf, 0xc1, 0x0e, 0xf1, 0xff, 0x21, 0x04, 0x42, 0x04, 0x3e, + 0x28, 0x15, 0x14, 0x38, 0x04, 0x47, 0x28, 0x1d, 0x30, 0x28, 0x15, 0x20, + 0x00, 0x15, 0x3e, 0x04, 0x31, 0x48, 0x27, 0x41, 0x20, 0x1b, 0x4c, 0x04, + 0xe8, 0x25, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x01, + 0x03, 0x03, 0x02, 0x03, 0x04, 0x02, 0x02, 0x03, 0x03, 0x04, 0x28, 0x1b, + 0x02, 0x02, 0x00, 0xc6, 0x27, 0xc2, 0x08, 0x00, 0x00, 0x14, 0x4a, 0x01, + 0x2d, 0x4e, 0x2e, 0x59, 0xe6, 0x30, 0xe9, 0x28, 0x1d, 0xff, 0x06, 0x18, + 0x13, 0x58, 0x17, 0x3f, 0xab, 0x37, 0x0b, 0x58, 0x17, 0xd8, 0x03, 0xd8, + 0x27, 0x04, 0x3f, 0xca, 0x56, 0x4a, 0x27, 0x95, 0x74, 0x8f, 0xad, 0x2d, + 0xe0, 0x8f, 0x05, 0x1f, 0xbe, 0x4d, 0xa3, 0x49, 0x13, 0x74, 0x4d, 0x2f, + 0x6a, 0x00, 0xfc, 0xa0, 0x8b, 0x05, 0x5f, 0xb4, 0xaf, 0xd0, 0xff, 0x20, + 0xe1, 0x8f, 0x65, 0x05, 0xe0, 0x7f, 0x3e, 0x2b, 0xf0, 0x83, 0x04, 0xdf, + 0xcb, 0x00, 0x2d, 0x4e, 0xe5, 0x65, 0xb7, 0x5f, 0x70, 0x51, 0x83, 0x06, + 0x78, 0x1b, 0x11, 0xc9, 0x80, 0xbd, 0x20, 0x88, 0x1d, 0x05, 0xf8, 0x15, + 0xad, 0x52, 0x7f, 0x64, 0x6b, 0x0d, 0x2d, 0xe3, 0x0d, 0x05, 0xb2, 0x7f, + 0xe2, 0x06, 0x61, 0xff, 0x11, 0x26, 0x04, 0x35, 0x28, 0x0f, 0x42, 0x04, + 0x40, 0x28, 0x13, 0x6c, 0x3b, 0x28, 0x05, 0x78, 0x1b, 0x2e, 0x28, 0x2f, + 0x38, 0x1b, 0x3d, 0x04, 0x5c, 0x34, 0x28, 0x33, 0x4f, 0x04, 0x88, 0x1d, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x02, 0x09, 0x05, 0x04, + 0x04, 0x05, 0x28, 0x15, 0x05, 0x06, 0x28, 0x1b, 0x00, 0x03, 0x03, 0x24, + 0x28, 0xaf, 0x06, 0x00, 0x00, 0x08, 0x15, 0x4a, 0x17, 0x53, 0x06, 0xb8, + 0x15, 0x00, 0x00, 0x4e, 0xad, 0x2f, 0xaf, 0x72, 0x2f, 0xa9, 0x68, 0x06, + 0x28, 0x13, 0x00, 0x38, 0x17, 0x64, 0x2f, 0xbd, 0x7d, 0x2d, 0x60, 0x95, + 0x05, 0x37, 0x9b, 0x70, 0x69, 0x06, 0x38, 0x13, 0x00, 0x38, 0x17, 0x53, + 0x2f, 0xbb, 0xfd, 0x58, 0xa7, 0x59, 0xad, 0x5c, 0xb9, 0x04, 0x98, 0x23, + 0x00, 0x38, 0x17, 0x30, 0x83, 0x70, 0x00, 0x40, 0x83, 0x93, 0x04, 0x1f, + 0xd5, 0x17, 0x53, 0x06, 0xd8, 0x17, 0x81, 0xbd, 0x06, 0xd8, 0x17, 0x33, + 0x7f, 0xeb, 0x52, 0xeb, 0x06, 0x38, 0x15, 0x00, 0x58, 0x17, 0x64, 0x2f, + 0x2d, 0x20, 0x84, 0x19, 0x04, 0xda, 0x9b, 0x57, 0x21, 0x28, 0x17, 0x32, + 0x28, 0x1b, 0x40, 0x06, 0x08, 0x11, 0x07, 0x54, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x89, 0x28, 0x0f, 0x05, 0x05, 0x06, 0x28, 0x1a, 0x06, 0x03, 0x28, + 0x20, 0x00, 0x04, 0x04, 0x91, 0x28, 0x0d, 0x07, 0x00, 0x00, 0x06, 0x16, + 0x4a, 0xb7, 0x30, 0xa7, 0x06, 0xc8, 0x17, 0xbb, 0x0f, 0x20, 0x38, 0x00, + 0x5a, 0x2f, 0xad, 0x3f, 0xa7, 0x05, 0x9f, 0x31, 0x5a, 0x00, 0xe9, 0xb6, + 0x8f, 0xa1, 0x65, 0x06, 0x28, 0x17, 0x37, 0x87, 0x65, 0x06, 0x28, 0x0f, + 0x90, 0x7f, 0x6a, 0x3e, 0x00, 0xe6, 0x2f, 0xaf, 0x06, 0x70, 0x81, 0x38, + 0x87, 0xb8, 0x15, 0x05, 0xff, 0xb3, 0x7f, 0x61, 0x89, 0x06, 0x98, 0x13, + 0x3f, 0xff, 0x78, 0xc1, 0x80, 0xb7, 0x06, 0x38, 0x0f, 0xf7, 0x07, 0x72, + 0x7f, 0x33, 0xf1, 0xb8, 0x15, 0x05, 0xfc, 0x9b, 0x17, 0x28, 0x17, 0x05, + 0x98, 0x05, 0x08, 0x14, 0xff, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x07, + 0x07, 0x06, 0x06, 0x07, 0x28, 0x1a, 0x20, 0x07, 0x02, 0x20, 0x05, 0x05, + 0x05, 0x6b, 0x27, 0x39, 0x42, 0x08, 0x2d, 0x2d, 0x4a, 0x57, 0x53, 0xc7, + 0x28, 0x15, 0xde, 0x0c, 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x48, 0x1b, 0xd8, + 0x17, 0x6f, 0x00, 0x55, 0x66, 0x4e, 0xb3, 0x6f, 0x4f, 0xc5, 0x68, 0x2e, + 0xbb, 0x72, 0x48, 0x2f, 0xd6, 0xdb, 0x49, 0x03, 0xbf, 0xc6, 0x44, 0x4f, + 0xa1, 0x65, 0x8b, 0xa5, 0x78, 0x19, 0x53, 0xd1, 0x2f, 0x47, 0x05, 0x58, + 0x17, 0xfc, 0x2f, 0xa7, 0x64, 0x00, 0xe4, 0xc0, 0x85, 0xbd, 0x05, 0xb8, + 0x17, 0x79, 0x40, 0x7f, 0x3f, 0xaf, 0x06, 0x10, 0x7d, 0x31, 0x7f, 0x69, + 0x2e, 0x9d, 0x55, 0x61, 0x6d, 0x25, 0x63, 0x4e, 0x2f, 0x4d, 0x41, 0xf7, + 0x69, 0x4e, 0x3f, 0xe0, 0x3d, 0x2b, 0x3a, 0x29, 0x04, 0x7f, 0xcb, 0x57, + 0x53, 0x39, 0x4e, 0xa6, 0x40, 0x9e, 0x06, 0x98, 0x19, 0xa8, 0xb0, 0x80, + 0xbd, 0x20, 0x00, 0x02, 0x74, 0xb3, 0xc8, 0xb9, 0x6c, 0xd0, 0x06, 0x38, + 0x1f, 0x5a, 0xde, 0x2f, 0xaf, 0x31, 0x69, 0x2d, 0x6e, 0xad, 0x93, 0x09, + 0x3e, 0xbb, 0x06, 0x51, 0xff, 0x64, 0xd8, 0x2f, 0x43, 0x34, 0x05, 0x75, + 0x04, 0xa1, 0xf7, 0x7f, 0xff, 0x2e, 0x04, 0x36, 0xa3, 0x28, 0x13, 0x30, + 0x28, 0x11, 0x20, 0x00, 0x14, 0x48, 0x1f, 0x05, 0xd8, 0x1d, 0xc0, 0x06, + 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, 0x06, 0x01, 0x07, 0x07, 0x01, + 0xb0, 0x28, 0x1a, 0x01, 0x28, 0x1f, 0x20, 0x01, 0x9e, 0x27, 0xc7, 0x06, + 0x00, 0x00, 0x00, 0x18, 0x4a, 0xd5, 0x30, 0xa7, 0x30, 0x42, 0xed, 0x28, + 0x15, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x3d, 0x33, 0x46, 0xa0, 0x47, 0xeb, + 0x6f, 0x2f, 0xab, 0x20, 0x00, 0x49, 0x00, 0x73, 0xaa, 0x8f, 0xbb, 0x73, + 0x05, 0x6f, 0x3b, 0xce, 0x2f, 0xab, 0x65, 0x20, 0x77, 0x20, 0xaa, 0x20, + 0x89, 0xe9, 0x40, 0x89, 0xe9, 0x05, 0xe0, 0xff, 0xe4, 0x28, 0xfb, 0xf6, + 0xed, 0x49, 0x01, 0x06, 0x3e, 0xb3, 0x31, 0x73, 0x6f, 0x41, 0x03, 0x31, + 0x01, 0xe6, 0x29, 0x87, 0x1f, 0x20, 0x00, 0xd8, 0x05, 0xa0, 0x8d, 0x71, + 0xf3, 0x51, 0x81, 0x3a, 0x07, 0x32, 0x0b, 0x80, 0x05, 0x9f, 0xbd, 0xd5, + 0x6c, 0x57, 0x7f, 0xa4, 0x7f, 0x9b, 0xc0, 0x06, 0x42, 0xfb, 0x3f, 0xff, + 0x98, 0xd3, 0x5c, 0xb8, 0x20, 0x00, 0x0f, 0x1c, 0xc8, 0xc4, 0xb3, 0x06, + 0x58, 0x97, 0x33, 0x7f, 0x3b, 0x7d, 0x06, 0x72, 0x81, 0x5d, 0x49, 0x2f, + 0x1d, 0x68, 0x81, 0xff, 0x54, 0x0b, 0x05, 0xb3, 0x81, 0x24, 0x28, 0x13, + 0x11, 0x40, 0x04, 0x35, 0x20, 0x03, 0x41, 0x04, 0x3a, 0x28, 0x13, 0x54, + 0x35, 0x28, 0x1f, 0x3e, 0x20, 0x0b, 0x42, 0x20, 0x15, 0x3e, 0x04, 0x70, + 0x32, 0x28, 0x31, 0x0c, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x07, 0x03, + 0x04, 0x01, 0x20, 0x03, 0x04, 0x28, 0x1a, 0x04, 0x05, 0x03, 0x07, 0x07, + 0x02, 0x07, 0x07, 0x18, 0x2c, 0x31, 0xfb, 0x00, 0x3f, 0xff, 0x01, 0x01, + 0x04, 0x02, 0x02, 0x01, 0x02, 0x01, 0x01, 0x20, 0x05, 0x10, 0x04, 0x01, + 0x01, 0x20, 0x07, 0x01, 0x03, 0x03, 0x02, 0x09, 0x03, 0x02, 0x02, 0x03, + 0x20, 0x3f, 0x02, 0x02, 0x20, 0x07, 0x10, 0x02, 0x05, 0x04, 0x20, 0x42, + 0x03, 0x04, 0x05, 0x06, 0xc4, 0x20, 0x13, 0x40, 0x07, 0x05, 0x05, 0x06, + 0x20, 0x12, 0x06, 0x03, 0xd4, 0x20, 0x18, 0x20, 0x1a, 0x07, 0x28, 0x77, + 0x07, 0x20, 0x12, 0x07, 0x02, 0xf8, 0x20, 0x05, 0x20, 0x1a, 0xe8, 0x8f, + 0xf0, 0x87, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x4b, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x43, 0x2a, 0x96, + 0x11, 0x00, 0x00, 0x00, 0x01, 0x4b, 0xa8, 0x30, 0xb9, 0x30, 0xc8, 0x04, + 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x58, 0x1f, 0x45, 0x00, 0x00, 0x73, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x15, 0x69, 0x00, 0x61, 0x06, + 0xe0, 0x7f, 0x65, 0x06, 0x80, 0xff, 0x6c, 0x20, 0xfb, 0x18, 0x6e, 0x00, + 0x64, 0x0e, 0xe1, 0x7f, 0x06, 0x31, 0xff, 0x31, 0x72, 0x99, 0x04, 0x6c, + 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0xd0, 0xc5, 0x00, 0xa4, 0xc2, + 0xa0, 0xd1, 0xc8, 0xb2, 0x44, 0xc5, 0xd0, 0x06, 0xb3, 0x7f, 0x06, 0xf2, + 0x7f, 0xf3, 0x06, 0x83, 0xff, 0x2d, 0x04, 0x41, 0x04, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x33, 0x4f, 0x04, 0x10, 0x06, 0x13, + 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, + 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, 0x30, 0x01, 0x4c, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xc9, 0x2a, 0xbb, 0x11, 0x00, 0x00, 0x00, 0x08, 0x4c, 0xa6, 0x30, + 0xfc, 0x30, 0xb7, 0x24, 0x30, 0xde, 0x20, 0x05, 0x0c, 0x77, 0x06, 0x38, + 0x21, 0x55, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x44, 0x61, 0x20, 0x01, 0x20, 0x00, 0x2f, 0x20, 0x03, 0x4e, 0x00, 0x11, + 0x79, 0x00, 0x6c, 0x20, 0x0f, 0x6e, 0x00, 0x64, 0x05, 0xe0, 0x7f, 0xc0, + 0x06, 0xf0, 0xff, 0x10, 0x06, 0x10, 0x7f, 0xb0, 0x65, 0x30, 0x57, 0x3a, + 0x53, 0x80, 0x06, 0x9b, 0x1b, 0xb0, 0xc6, 0xdc, 0xc2, 0xc8, 0xb9, 0x20, + 0x18, 0x00, 0xfc, 0xc8, 0x06, 0x5b, 0x9f, 0x0e, 0xf2, 0xff, 0x23, 0x04, + 0x43, 0x00, 0x04, 0x41, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x30, 0xe0, 0x20, + 0x01, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x01, 0x13, 0x12, 0x13, + 0x13, 0x02, 0x13, 0x01, 0x01, 0x10, 0x13, 0x0f, 0x20, 0x05, 0x01, 0x40, + 0x01, 0x58, 0x17, 0x09, 0x4c, 0xe9, 0x30, 0xc3, 0x30, 0x0a, 0xd4, 0x30, + 0xde, 0x5d, 0x06, 0x7f, 0xb5, 0x4c, 0x28, 0x0f, 0x70, 0xbd, 0x20, 0x01, + 0x69, 0x68, 0x13, 0x50, 0x0f, 0x05, 0x78, 0x15, 0x70, 0x7f, 0x6f, 0x28, + 0x83, 0x1f, 0x69, 0x00, 0x65, 0x06, 0xa0, 0xff, 0x05, 0x90, 0xf1, 0x00, + 0x51, 0x7f, 0x51, 0x01, 0x06, 0x19, 0x19, 0xd5, 0xb1, 0x7f, 0x3a, 0x17, + 0x66, 0x2a, 0x23, 0x6e, 0x8a, 0x15, 0x65, 0x2a, 0x33, 0x80, 0x04, 0xd9, + 0xad, 0xc9, 0x62, 0x6e, 0x66, 0x70, 0x51, 0x01, 0xc3, 0x06, 0x4b, 0x13, + 0x3f, 0xff, 0x7c, 0xb7, 0x3c, 0xd5, 0x06, 0x98, 0x15, 0x73, 0x7f, 0xd1, + 0x06, 0x72, 0x7d, 0x73, 0xff, 0xf3, 0x06, 0x62, 0x7d, 0x00, 0x00, 0x1b, + 0x28, 0x0f, 0x11, 0x3f, 0x04, 0x3b, 0x28, 0x15, 0x3d, 0x04, 0x34, 0x28, + 0x1f, 0x70, 0x4f, 0x05, 0xe8, 0x1b, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, + 0x7f, 0x02, 0x0b, 0x08, 0x05, 0x00, 0x09, 0x08, 0x02, 0x02, 0x07, 0x08, + 0x06, 0x0b, 0x00, 0x02, 0x02, 0x02, 0x02, 0x49, 0x2f, 0x4c, 0x12, 0x00, + 0x00, 0x00, 0x0a, 0x4c, 0x17, 0x53, 0xdd, 0x30, 0x00, 0xd5, 0x30, 0xe4, + 0x30, 0xf3, 0x30, 0xde, 0x30, 0x14, 0xfc, 0x30, 0x0c, 0x06, 0x05, 0x1f, + 0x50, 0x27, 0x93, 0x68, 0x00, 0x57, 0x6a, 0x27, 0x99, 0x69, 0x2f, 0xb7, + 0x2d, 0x80, 0x0f, 0x3b, 0x2d, 0xdb, 0x43, 0x10, 0x6f, 0x00, 0x72, 0x20, + 0x01, 0x61, 0x00, 0xa0, 0x00, 0x51, 0xd6, 0x2f, 0xe1, 0x74, 0x27, 0xc5, + 0x72, 0x00, 0x62, 0x27, 0xd1, 0x55, 0x74, 0x40, 0x0b, 0x6e, 0x02, 0x6f, + 0xeb, 0x4f, 0x40, 0x4b, 0x72, 0x28, 0x19, 0xd7, 0x50, 0x4b, 0x58, 0x1f, + 0x20, 0x2b, 0xa9, 0x75, 0x80, 0x75, 0x04, 0xbb, 0xb5, 0x70, 0x61, 0x77, + 0xf6, 0x03, 0xa0, 0xd3, 0x02, 0xf0, 0xff, 0x3c, 0xb7, 0x53, 0x29, 0x25, + 0x71, 0x59, 0x31, 0x1f, 0x5d, 0x69, 0x49, 0x3b, 0x61, 0x2c, 0xc7, 0x03, + 0xd9, 0x3d, 0xf1, 0x7f, 0x68, 0x88, 0x21, 0xb8, 0x38, 0x15, 0x6c, 0x81, + 0xf9, 0x31, 0xef, 0x04, 0x3f, 0xd5, 0x17, 0x53, 0x5a, 0x04, 0x53, 0xd5, + 0x6e, 0x3a, 0x53, 0x06, 0x7b, 0x17, 0x81, 0xbd, 0x00, 0x24, 0xc6, 0xa4, + 0xc2, 0xb8, 0xd2, 0x5c, 0xb8, 0x00, 0xf4, 0xbc, 0xb8, 0xd2, 0xc8, 0xb2, + 0x44, 0xc5, 0xed, 0x05, 0xd8, 0x25, 0x33, 0x57, 0x52, 0xe3, 0x2d, 0x03, + 0xc3, 0x57, 0x02, 0x33, 0x7f, 0xf3, 0xa2, 0x7f, 0x70, 0x64, 0x2b, 0xab, + 0x04, 0xf1, 0xfb, 0x3f, 0xff, 0x21, 0x04, 0x35, 0x04, 0x54, 0x32, 0x20, + 0x03, 0x40, 0x28, 0x17, 0x30, 0x28, 0x15, 0x20, 0x00, 0x04, 0x1e, 0x04, + 0x41, 0x04, 0x42, 0x20, 0x0f, 0x3e, 0x04, 0x5d, 0x31, 0x20, 0x03, 0x42, + 0x28, 0x2f, 0x04, 0xb8, 0x2d, 0x02, 0x14, 0xff, 0x20, 0x03, 0xc4, 0xff, + 0xc0, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x03, 0x10, 0x0b, 0x09, + 0x0d, 0x0b, 0x00, 0x03, 0x03, 0x09, 0x0b, 0x0c, 0x10, 0x03, 0x03, 0x04, + 0x03, 0x03, 0x3b, 0x2e, 0x1c, 0x28, 0x17, 0x0b, 0x4c, 0x06, 0xab, 0x30, + 0xa4, 0x30, 0xcc, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x4b, 0xdf, 0x2f, 0xaf, + 0x3e, 0x21, 0x75, 0x47, 0x87, 0x3b, 0x31, 0x30, 0x11, 0x58, 0x17, 0x36, + 0x85, 0xf0, 0x04, 0xff, 0x45, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, + 0x30, 0x7f, 0xef, 0x51, 0xaa, 0x52, 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, + 0x74, 0xce, 0x74, 0xc7, 0x04, 0x6a, 0xb2, 0x05, 0xd8, 0x0b, 0x0f, 0xb2, + 0xff, 0x1a, 0x28, 0x0d, 0x39, 0x28, 0x13, 0x43, 0xe0, 0x20, 0x01, 0x0e, + 0xf4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x04, 0x06, 0x06, 0x02, 0x06, 0x02, + 0x04, 0x04, 0x04, 0x04, 0x06, 0x03, 0x40, 0x06, 0xab, 0x00, 0x2d, 0xb8, + 0x13, 0x00, 0x00, 0x0c, 0x4c, 0x17, 0x00, 0x53, 0xab, 0x30, 0xec, 0x30, + 0xea, 0x30, 0xa2, 0xef, 0x06, 0x68, 0x19, 0xfb, 0x2f, 0x38, 0x27, 0x72, + 0x4b, 0x2f, 0x38, 0x13, 0x00, 0x1a, 0xab, 0x50, 0x1f, 0xd5, 0x3e, 0x49, + 0x03, 0x5f, 0x4f, 0x43, 0x40, 0x6f, 0xe9, 0x2f, 0x07, 0x69, 0x2f, 0xad, + 0xfb, 0x3e, 0xa5, 0x38, 0x9f, 0x7f, 0xc5, 0x05, 0x5d, 0xaf, 0x3d, 0xad, + 0x6b, 0x80, 0xd7, 0x30, 0x87, 0xf7, 0x04, 0xfd, 0xa5, 0xf0, 0xff, 0x50, + 0x77, 0x3f, 0xa5, 0x53, 0x2f, 0xa5, 0x7e, 0x29, 0x3f, 0xc7, 0x7f, 0x69, + 0x2f, 0xc9, 0x59, 0xa1, 0x04, 0x5f, 0xaf, 0x91, 0xcf, 0x7e, 0x27, 0x31, + 0xdb, 0x05, 0x3e, 0x29, 0x80, 0x5f, 0xff, 0x17, 0x53, 0x61, 0x53, 0x2f, + 0x7d, 0x29, 0x10, 0x52, 0x3f, 0x96, 0x06, 0x58, 0x1d, 0x81, 0xbd, 0x74, + 0xce, 0x03, 0x10, 0xb8, 0xac, 0xb9, 0x44, 0xc5, 0x06, 0x58, 0x1b, 0x3f, + 0x91, 0xee, 0x52, 0xeb, 0x73, 0x7b, 0x52, 0x83, 0xeb, 0x05, 0xc2, 0x7f, + 0x53, 0x7f, 0x51, 0xff, 0x6f, 0x80, 0x05, 0xa1, 0xfd, 0x00, 0x00, 0x21, + 0x04, 0x35, 0x04, 0x32, 0xa0, 0x20, 0x03, 0x40, 0x28, 0x1b, 0x30, 0x04, + 0x4f, 0x04, 0x20, 0xa3, 0x48, 0x29, 0x40, 0x20, 0x15, 0x3b, 0x04, 0x38, + 0x20, 0x0f, 0x07, 0xd4, 0xff, 0xf0, 0x5d, 0x35, 0x03, 0xb4, 0xff, 0x06, + 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x05, 0x0f, 0x02, 0x08, 0x00, 0x02, + 0x05, 0x05, 0x05, 0x08, 0x01, 0x0b, 0x0f, 0x80, 0x20, 0x06, 0x05, 0x83, + 0x2c, 0x27, 0x15, 0x00, 0x00, 0x41, 0x0d, 0x28, 0x17, 0xb5, 0x30, 0xf4, + 0x30, 0xa9, 0x06, 0x68, 0x15, 0xaf, 0x00, 0x18, 0x17, 0x53, 0x2f, 0xbf, + 0x76, 0x44, 0x1b, 0xf8, 0x11, 0x70, 0x19, 0x3b, 0x43, 0x6b, 0x78, 0x03, + 0x8f, 0xdb, 0x70, 0x6f, 0x6e, 0x06, 0xe8, 0x17, 0x73, 0x60, 0xf7, 0x05, + 0xff, 0xb4, 0xf0, 0x91, 0x6f, 0x05, 0xf8, 0x11, 0x00, 0x11, 0x7f, 0x06, + 0x58, 0x17, 0x28, 0x84, 0x83, 0x6c, 0xc3, 0x06, 0x58, 0x13, 0x58, 0x17, + 0xac, 0xc0, 0xf4, 0xbc, 0x06, 0x58, 0x13, 0xf8, 0x17, 0xda, 0x73, 0x7b, + 0x06, 0x12, 0x7f, 0xf3, 0xa1, 0xff, 0x06, 0x98, 0x17, 0x3e, 0x28, 0x23, + 0x20, 0xaf, 0x28, 0x29, 0x30, 0x28, 0x29, 0x3e, 0x05, 0x08, 0x11, 0x01, + 0xd4, 0xff, 0x3b, 0xb1, 0x04, 0x34, 0xff, 0xc0, 0x06, 0xf5, 0x7f, 0x10, + 0x06, 0xf0, 0x7f, 0x06, 0x11, 0x10, 0x0a, 0x12, 0x10, 0x00, 0x06, 0x06, + 0x0a, 0x10, 0x0d, 0x11, 0x06, 0x06, 0x00, 0x06, 0x06, 0xb9, 0x2c, 0xae, + 0x13, 0x00, 0x00, 0x14, 0x0e, 0x4c, 0x57, 0x06, 0xe8, 0x17, 0x45, 0x4e, + 0x9b, 0x6c, 0x00, 0x47, 0xe4, 0x00, 0x08, 0x13, 0x53, 0x00, 0xf6, 0x2f, + 0xbd, 0x04, 0xb8, 0x13, 0x00, 0x98, 0x17, 0x76, 0x53, 0x28, 0x1d, 0x05, + 0x38, 0x15, 0x38, 0x97, 0xfc, 0x06, 0xa8, 0x15, 0xb8, 0x17, 0x4d, 0xdd, + 0x2f, 0xb5, 0x38, 0x0d, 0x64, 0x05, 0x68, 0x11, 0x00, 0xd8, 0x17, 0x31, + 0x81, 0x72, 0x05, 0x2f, 0xc0, 0x4b, 0x57, 0x06, 0xe8, 0x17, 0xa8, 0xb0, + 0x06, 0xd8, 0x17, 0x5a, 0x2b, 0x07, 0x31, 0xf3, 0xe8, 0x06, 0x58, 0x15, + 0x00, 0x78, 0x17, 0x33, 0x7f, 0x6c, 0x05, 0x4c, 0xa8, 0x2e, 0x04, 0x36, + 0xf8, 0x06, 0x68, 0x11, 0x01, 0x94, 0xff, 0x04, 0x78, 0x13, 0x07, 0x35, + 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x07, 0x04, 0x11, 0x00, 0x12, 0x11, 0x11, + 0x07, 0x07, 0x14, 0x11, 0x14, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, 0xdd, + 0x2b, 0x63, 0xa0, 0x28, 0x17, 0x0f, 0x28, 0x17, 0xdd, 0x30, 0xd5, 0x30, + 0xe4, 0x03, 0x30, 0xf3, 0x30, 0xde, 0x30, 0xfc, 0x06, 0x28, 0x1d, 0xb8, + 0x17, 0xae, 0x7b, 0x3b, 0x61, 0x2f, 0xbd, 0x6d, 0x2f, 0xc7, 0x3e, 0x3f, + 0xf8, 0x21, 0xd6, 0xc7, 0x2f, 0x59, 0x3e, 0xd3, 0x72, 0x00, 0x62, 0x2f, + 0xe5, 0x7e, 0xdf, 0x02, 0x9f, 0xd8, 0x5e, 0x4f, 0x40, 0x4f, 0x72, 0x2f, + 0xb5, 0x50, 0x4f, 0x05, 0xf8, 0x1f, 0x58, 0x17, 0xf6, 0xfa, 0x03, 0xe0, + 0xd5, 0x02, 0xd0, 0xff, 0x3f, 0xb7, 0x05, 0x78, 0x25, 0xf1, 0x7f, 0x68, + 0x05, 0xe8, 0x21, 0x57, 0x04, 0x53, 0x5a, 0x53, 0xd5, 0x6e, 0x06, 0xb8, + 0x17, 0x24, 0xc6, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0x5c, 0xb8, 0xf4, 0xbc, + 0x03, 0xb8, 0xd2, 0xc8, 0xb2, 0x44, 0xc5, 0x05, 0xd8, 0x23, 0x98, 0x17, + 0xdc, 0x03, 0xf3, 0x59, 0x02, 0x13, 0x7f, 0xf3, 0xa2, 0x7f, 0x05, 0x78, + 0x1f, 0x58, 0x17, 0x30, 0x04, 0x40, 0x4f, 0x28, 0x17, 0x1e, 0x04, 0x41, + 0x04, 0x42, 0x04, 0x55, 0x40, 0x28, 0x25, 0x31, 0x28, 0x29, 0x42, 0x28, + 0x2f, 0x38, 0x20, 0x17, 0xb8, 0x07, 0xb4, 0xff, 0x20, 0x04, 0x04, 0xff, + 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x08, 0x03, 0x0c, 0x00, 0x11, + 0x0c, 0x0c, 0x08, 0x08, 0x13, 0x0c, 0x13, 0x00, 0x03, 0x08, 0x08, 0x08, + 0x08, 0xa6, 0x2c, 0x3e, 0x05, 0x10, 0x00, 0x00, 0x10, 0x4c, 0x06, 0xd8, + 0x15, 0x00, 0x00, 0x88, 0x0b, 0xff, 0x05, 0x74, 0xa5, 0x00, 0x58, 0x17, + 0x05, 0x9f, 0xb8, 0x06, 0x55, 0x8d, 0x00, 0xf8, 0x17, 0x06, 0x90, 0x7f, + 0x78, 0x17, 0x05, 0x8f, 0x2f, 0x9f, 0x06, 0xc8, 0x15, 0x00, 0x00, 0x06, + 0xd8, 0x15, 0x07, 0xd2, 0x7f, 0x98, 0x17, 0x05, 0x9f, 0xb1, 0x06, 0x38, + 0x0b, 0xc0, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x0e, 0x09, + 0x0b, 0x0a, 0x09, 0x02, 0x09, 0x09, 0x0c, 0x09, 0x07, 0x0e, 0x20, 0x06, + 0x09, 0x00, 0xdd, 0x2c, 0x27, 0x0f, 0x00, 0x00, 0x11, 0x4c, 0x05, 0xd4, + 0x30, 0xeb, 0x30, 0xab, 0x06, 0xc8, 0x17, 0x69, 0x2f, 0xfb, 0x57, 0x6b, + 0x00, 0x0b, 0x23, 0x42, 0x80, 0x17, 0x6c, 0x4b, 0x3f, 0x04, 0x7f, 0xb5, + 0x00, 0x10, 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xd0, 0x7f, 0xae, + 0x76, 0x14, 0x5c, 0x61, 0x53, 0x80, 0x06, 0x98, 0x19, 0x3c, 0xd5, 0x74, + 0xb9, 0x78, 0xce, 0xc8, 0x68, 0xb9, 0x05, 0xf8, 0x0f, 0x0f, 0x72, 0xff, + 0x1f, 0x28, 0x07, 0x40, 0x04, 0x3a, 0x2b, 0x04, 0x30, 0x28, 0x11, 0x3c, + 0x20, 0x05, 0x30, 0x05, 0xa8, 0x13, 0x08, 0x54, 0xff, 0x80, 0x10, 0x0d, + 0xd0, 0x7f, 0x0a, 0x0d, 0x0e, 0x0e, 0x0f, 0x0e, 0x0a, 0x00, 0x0a, 0x0e, + 0x0e, 0x08, 0x0d, 0x0a, 0x0a, 0x0a, 0x00, 0x0a, 0xbb, 0x2b, 0xe6, 0x10, + 0x00, 0x00, 0x12, 0x02, 0x4c, 0xb5, 0x30, 0xbf, 0x30, 0xaf, 0x28, 0x17, + 0xbf, 0x8a, 0x06, 0x48, 0x15, 0x00, 0x00, 0x53, 0x2e, 0x9d, 0x74, 0x2e, + 0xa1, 0x6b, 0x3d, 0x00, 0x75, 0x2f, 0xab, 0x30, 0x09, 0x5b, 0x2f, 0xd0, + 0x17, 0x64, 0x04, 0x8e, 0xc3, 0xe0, 0x00, 0x10, 0x7f, 0x06, 0xf0, 0xff, + 0x10, 0x05, 0xd0, 0x7f, 0x28, 0x84, 0x54, 0x58, 0x06, 0x10, 0x66, 0x54, + 0x58, 0x06, 0x78, 0x19, 0xac, 0xc0, 0xc0, 0xd0, 0x0d, 0xe4, 0xcf, 0xc0, + 0xd0, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0xff, 0x21, 0x28, 0x11, 0x47, 0x42, + 0x28, 0x15, 0x3a, 0x04, 0x43, 0x28, 0x19, 0x30, 0x09, 0x0e, 0xf4, 0xff, + 0x80, 0x10, 0x0d, 0xd0, 0x7f, 0x0b, 0x12, 0x0f, 0x0f, 0x10, 0x0f, 0x0b, + 0x00, 0x0b, 0x0f, 0x0f, 0x0a, 0x12, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0xb8, + 0x2b, 0x80, 0x0f, 0x00, 0x00, 0x13, 0x00, 0x4c, 0x2d, 0x4e, 0xe8, 0x90, + 0xdd, 0x30, 0xd5, 0x22, 0x30, 0xe4, 0x28, 0x1b, 0xde, 0x30, 0xfc, 0x06, + 0x08, 0x1d, 0x4b, 0x08, 0x00, 0x65, 0x00, 0x73, 0x2f, 0xaf, 0x69, 0x00, + 0x2d, 0x82, 0x2f, 0xbb, 0x6f, 0x00, 0x68, 0x00, 0x6a, 0x00, 0x0b, 0x3b, + 0x4d, 0xaa, 0x20, 0x23, 0x6c, 0x2b, 0x37, 0x65, 0x2f, 0xd9, 0x73, 0x48, + 0x45, 0xa0, 0x35, 0x00, 0xd6, 0x40, 0x09, 0x30, 0x11, 0x62, 0x20, 0x35, + 0x74, 0x40, 0x0b, 0x56, 0x6e, 0x02, 0x2f, 0xeb, 0x4f, 0x40, 0x51, 0x72, + 0x20, 0x79, 0x50, 0x47, 0x6e, 0xae, 0x2f, 0xbf, 0x65, 0x20, 0x8b, 0x43, + 0x40, 0x4f, 0x30, 0x19, 0x3b, 0xb1, 0x65, 0xb1, 0x04, 0x8f, 0xc5, 0x4d, + 0x2f, 0xaf, 0x50, 0xbd, 0x6c, 0x00, 0xf6, 0x03, 0x60, 0xd3, 0xf6, 0x02, + 0xf0, 0xff, 0x3c, 0xb3, 0x05, 0x70, 0xff, 0xf1, 0x7f, 0x68, 0x00, 0x60, + 0x81, 0x04, 0x7f, 0xcf, 0x2d, 0x04, 0x4e, 0x5a, 0x53, 0xd5, 0x6e, 0x06, + 0x78, 0x15, 0x00, 0x00, 0x00, 0x11, 0xc9, 0x59, 0xc5, 0x24, 0xc6, 0xa4, + 0xc2, 0x00, 0xb8, 0xd2, 0x5c, 0xb8, 0xf4, 0xbc, 0xb8, 0xd2, 0x0e, 0xc8, + 0xb2, 0x44, 0xc5, 0x05, 0xb8, 0x23, 0xb2, 0xe7, 0x3e, 0x9b, 0x2d, 0xd8, + 0x03, 0x83, 0x59, 0x02, 0x13, 0x7f, 0xf3, 0x00, 0x82, 0x7f, 0x04, 0x9f, + 0xc3, 0x26, 0x04, 0x35, 0xa2, 0x48, 0x0f, 0x40, 0x28, 0x1f, 0x3b, 0x04, + 0x4c, 0x28, 0x1b, 0x30, 0x00, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x1e, 0x04, + 0x41, 0x8a, 0x40, 0x15, 0x3e, 0x04, 0x31, 0x20, 0x03, 0x42, 0x28, 0x33, + 0x38, 0xdc, 0x20, 0x17, 0x07, 0x74, 0xff, 0x20, 0x03, 0x84, 0xff, 0x06, + 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x0c, 0x08, 0x00, 0x0a, 0x07, 0x0b, + 0x0a, 0x0c, 0x0c, 0x03, 0x0a, 0x00, 0x10, 0x08, 0x0c, 0x0c, 0x0c, 0x0c, + 0x65, 0x2d, 0x04, 0x73, 0x10, 0x00, 0x00, 0x14, 0x28, 0x17, 0x2e, 0x59, + 0x06, 0xb9, 0x30, 0xaa, 0x30, 0xdf, 0x06, 0x08, 0x11, 0x00, 0x18, 0x17, + 0x53, 0xaa, 0x2f, 0xb3, 0x6f, 0x28, 0x11, 0x69, 0x00, 0xa8, 0x0f, 0x46, + 0x28, 0x41, 0x6e, 0xde, 0x28, 0x25, 0x38, 0x3b, 0x64, 0x03, 0x2f, 0xdb, + 0xd0, 0x4f, 0x05, 0xb8, 0x11, 0x00, 0x18, 0x17, 0x66, 0xfc, 0x40, 0xdb, + 0x03, 0xb0, 0xdd, 0x01, 0xf0, 0xff, 0x05, 0xd8, 0x13, 0x01, 0x50, 0x7f, + 0x04, 0xdf, 0xc7, 0x2d, 0x4e, 0x08, 0xac, 0x82, 0x70, 0x51, 0x06, 0x98, + 0x17, 0x00, 0xcf, 0xa4, 0x00, 0xc2, 0xa4, 0xd0, 0x18, 0xc2, 0x24, 0xc6, + 0xf8, 0x7b, 0xbb, 0x05, 0xb8, 0x0f, 0x00, 0x98, 0x17, 0x03, 0xf3, 0x61, + 0x01, 0x53, 0x7f, 0xe2, 0x06, 0x61, 0xff, 0x00, 0x78, 0x17, 0x55, 0x24, + 0x28, 0x07, 0x3d, 0x28, 0x29, 0x4f, 0x28, 0x35, 0x34, 0x04, 0x68, 0x13, + 0xb8, 0x02, 0x14, 0xff, 0x20, 0x04, 0x04, 0xff, 0x06, 0xf5, 0x7f, 0x10, + 0x06, 0xf0, 0x7f, 0x0d, 0x09, 0x04, 0x00, 0x06, 0x03, 0x01, 0x0d, 0x0d, + 0x02, 0x03, 0x11, 0x00, 0x09, 0x0d, 0x0d, 0x0d, 0x0d, 0x42, 0x2c, 0x4e, + 0x00, 0x12, 0x00, 0x00, 0x15, 0x4c, 0xf4, 0x30, 0xa1, 0x00, 0x30, 0xeb, + 0x30, 0xb7, 0x30, 0xca, 0x30, 0xa4, 0x05, 0x30, 0xb9, 0x30, 0x3d, 0x00, + 0x05, 0xf8, 0x23, 0x56, 0x2f, 0xfd, 0xd4, 0x3b, 0x05, 0x37, 0xed, 0x61, + 0x2f, 0xab, 0x73, 0x00, 0x28, 0x1f, 0x45, 0x00, 0x56, 0x67, 0x6f, 0xbd, + 0x6c, 0x2f, 0xcd, 0x67, 0x03, 0xc8, 0x1f, 0xf8, 0x17, 0x20, 0x3f, 0x00, + 0x70, 0x4f, 0x3d, 0x30, 0x05, 0x04, 0xf8, 0x13, 0x01, 0x10, 0xff, 0x06, + 0x58, 0x17, 0x39, 0x9f, 0x45, 0x64, 0x2e, 0x39, 0x4f, 0x00, 0x63, 0x20, + 0x01, 0x69, 0x49, 0x2f, 0xee, 0x3f, 0xb9, 0x04, 0x39, 0x27, 0x00, 0x38, + 0x97, 0x50, 0x61, 0x81, 0x3e, 0x39, 0x04, 0xff, 0xc7, 0x7f, 0x10, 0x89, + 0x57, 0x53, 0x06, 0xb8, 0x19, 0x14, 0xbc, 0x74, 0xb9, 0x00, 0xdc, 0xc2, + 0x98, 0xb0, 0x74, 0xc7, 0xa4, 0xc2, 0xf6, 0x06, 0x38, 0x1d, 0x07, 0x72, + 0x7f, 0xb8, 0x17, 0x31, 0xff, 0xf3, 0x43, 0x87, 0x05, 0x12, 0x01, 0x21, + 0x02, 0x04, 0x3e, 0x04, 0x31, 0x04, 0x41, 0x28, 0x19, 0x32, 0xbf, 0x48, + 0x21, 0x3d, 0x20, 0x0f, 0x05, 0x98, 0x15, 0x02, 0x74, 0xff, 0x03, 0x98, + 0x1f, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0x0e, 0x14, 0x05, + 0x14, 0x04, 0x02, 0x0e, 0x0e, 0x00, 0x11, 0x04, 0x0e, 0x14, 0x0e, 0x0e, + 0x0e, 0x0e, 0x00, 0xfc, 0x2a, 0xd5, 0x0f, 0x00, 0x00, 0x16, 0x4c, 0x00, + 0x57, 0x53, 0xab, 0x30, 0xec, 0x30, 0xea, 0x30, 0x6a, 0xa2, 0x05, 0xa8, + 0x0b, 0xbf, 0xe6, 0x45, 0x6f, 0x2b, 0xe4, 0x2f, 0xa9, 0x4b, 0xb8, 0x48, + 0x23, 0x6a, 0x4f, 0xa7, 0x3e, 0xb7, 0x3b, 0x33, 0x53, 0x00, 0xf6, 0xdf, + 0x2f, 0xc7, 0x3f, 0xbb, 0xa0, 0x60, 0x1f, 0x3f, 0x59, 0x3f, 0xd1, 0x03, + 0x7d, 0x2f, 0x38, 0x97, 0x6e, 0xe9, 0x48, 0x71, 0x38, 0x15, 0x64, 0x2b, + 0xb3, 0x77, 0x19, 0x05, 0x3f, 0xb0, 0x53, 0x2f, 0x00, 0xfc, 0x2f, 0xa7, + 0x6b, 0x80, 0xd9, 0x30, 0x85, 0x03, 0x70, 0xdb, 0x01, 0x90, 0xff, 0xfb, + 0x50, 0x79, 0x3f, 0xab, 0x3c, 0xa3, 0x35, 0x8f, 0x3f, 0xbb, 0x6f, 0x49, + 0xab, 0x04, 0x18, 0x0b, 0xea, 0xdd, 0x2f, 0xd0, 0x7f, 0x39, 0x9b, 0x6c, + 0x68, 0x9b, 0x72, 0x05, 0x2f, 0xc4, 0x57, 0x00, 0x53, 0x61, 0x53, 0x2f, + 0x7d, 0x29, 0x52, 0x3f, 0x40, 0x96, 0x06, 0x58, 0x19, 0xa8, 0xb0, 0x74, + 0xce, 0x10, 0xb8, 0x0d, 0xac, 0xb9, 0x44, 0xc5, 0x05, 0xd8, 0x0f, 0x7f, + 0xff, 0x5a, 0x2e, 0xa3, 0xee, 0x39, 0xf9, 0x73, 0x7d, 0x52, 0x83, 0xeb, + 0x05, 0xe2, 0x7f, 0x53, 0x7f, 0x51, 0xff, 0x6f, 0xa2, 0x6a, 0x99, 0x6c, + 0x05, 0x4c, 0x9a, 0x2e, 0x04, 0x36, 0x28, 0x0d, 0x30, 0x8a, 0x28, 0x01, + 0x20, 0x00, 0x1a, 0x20, 0x07, 0x40, 0x28, 0x1d, 0x3b, 0xdc, 0x04, 0xc8, + 0x09, 0x02, 0x74, 0xff, 0x20, 0x04, 0x44, 0xff, 0x06, 0xf5, 0x7f, 0x10, + 0x06, 0xf0, 0x7f, 0x0f, 0x02, 0x00, 0x03, 0x10, 0x01, 0x06, 0x0f, 0x0f, + 0x12, 0x02, 0x00, 0x12, 0x02, 0x0f, 0x0f, 0x0f, 0x0f, 0x6c, 0x2b, 0x00, + 0x0a, 0x14, 0x00, 0x00, 0x17, 0x4c, 0xd1, 0x30, 0x00, 0xa4, 0x30, 0xe4, + 0x30, 0xc8, 0x30, 0x3d, 0x00, 0x15, 0xcf, 0x30, 0xe1, 0x06, 0x28, 0x1b, + 0x50, 0x28, 0x11, 0x69, 0x28, 0x0b, 0x45, 0xe4, 0x2e, 0x8f, 0x2d, 0x00, + 0x48, 0x28, 0x1f, 0x6d, 0x4f, 0xb5, 0xd5, 0x3b, 0x27, 0x90, 0x1b, 0x6e, + 0x2f, 0xd3, 0x65, 0x2a, 0xa5, 0x54, 0x2f, 0xd7, 0x5f, 0x76, 0x2f, 0xdb, + 0x73, 0x4b, 0x3b, 0x02, 0xfb, 0x2b, 0x00, 0x90, 0x7f, 0x06, 0xf0, 0xff, + 0x0e, 0x30, 0x7f, 0xb0, 0x51, 0xe3, 0x20, 0xc1, 0xe3, 0x05, 0x1e, 0x2f, + 0x3e, 0x6d, 0x9a, 0x4e, 0x02, 0x79, 0x72, 0x77, 0x6d, 0x85, 0x68, 0x06, + 0x58, 0x17, 0x0c, 0x00, 0xd3, 0x74, 0xc7, 0x8f, 0xc5, 0x58, 0xd5, 0x54, + 0x6a, 0xba, 0x06, 0x58, 0x17, 0x0e, 0xf1, 0xff, 0x1f, 0x28, 0x11, 0x39, + 0x28, 0x15, 0x42, 0x0b, 0x04, 0x2d, 0x00, 0x25, 0x28, 0x1d, 0x3c, 0x28, + 0x17, 0x08, 0x74, 0xff, 0xf0, 0xd3, 0x1b, 0x04, 0xb4, 0xff, 0x06, 0xf5, + 0x7f, 0x10, 0x05, 0x90, 0x7f, 0x10, 0x0c, 0x0d, 0x0d, 0x00, 0x0e, 0x0d, + 0x10, 0x10, 0x0d, 0x0d, 0x09, 0x0c, 0x00, 0x10, 0x10, 0x10, 0x10, 0x5d, + 0x2b, 0x3d, 0x12, 0x00, 0x00, 0x00, 0x18, 0x4c, 0xab, 0x30, 0xf3, 0x30, + 0x6a, 0xbf, 0x06, 0x88, 0x15, 0x5e, 0x2f, 0x6e, 0x2b, 0x33, 0x61, 0x00, + 0x08, 0x15, 0x45, 0x37, 0x00, 0x67, 0x4f, 0x3b, 0x38, 0x01, 0x69, 0x20, + 0x0b, 0x3a, 0xb1, 0x04, 0x18, 0x17, 0xfa, 0x00, 0x30, 0x7f, 0x06, 0xf0, + 0xff, 0x0d, 0xb0, 0x7f, 0xf8, 0x05, 0x3a, 0x0d, 0x72, 0x2e, 0x33, 0x70, + 0xc2, 0x05, 0x28, 0x13, 0x3f, 0xff, 0x4e, 0x57, 0x54, 0x58, 0x06, 0x98, + 0x15, 0x00, 0x06, 0x00, 0x78, 0xce, 0xc0, 0xd0, 0x06, 0x98, 0x15, 0x08, + 0x71, 0xff, 0xf3, 0xa0, 0x21, 0xff, 0x72, 0x05, 0x42, 0x01, 0x1a, 0x04, + 0x30, 0x04, 0x3d, 0xbe, 0x28, 0x15, 0x30, 0x06, 0x68, 0x17, 0x01, 0xb4, + 0xff, 0x04, 0x38, 0x17, 0x08, 0x35, 0x7f, 0x10, 0x05, 0xb0, 0x7f, 0x11, + 0x00, 0x07, 0x07, 0x03, 0x07, 0x12, 0x11, 0x11, 0x05, 0x00, 0x12, 0x04, + 0x07, 0x11, 0x11, 0x11, 0x11, 0x60, 0x00, 0x2b, 0x66, 0x11, 0x00, 0x00, + 0x19, 0x4c, 0x71, 0x00, 0x67, 0xa6, 0x30, 0xfc, 0x30, 0xb7, 0x30, 0xde, + 0xd4, 0x20, 0x05, 0x06, 0x38, 0x17, 0x49, 0x2f, 0xf9, 0xe4, 0x2f, 0xa9, + 0x55, 0x00, 0x56, 0x75, 0x2e, 0x21, 0x69, 0x2f, 0xad, 0x61, 0x46, 0x1d, + 0x3b, 0x2f, 0xd6, 0xa3, 0x4e, 0x33, 0x72, 0x48, 0x11, 0x4e, 0x00, 0x79, + 0x03, 0x6b, 0x21, 0xdf, 0xff, 0xa3, 0xf0, 0x77, 0x64, 0x4e, 0xb3, 0x6c, + 0x00, 0x27, 0x28, 0x97, 0x3e, 0xb1, 0xae, 0x04, 0xff, 0xba, 0x4f, 0x4f, + 0x17, 0x75, 0xc0, 0xfd, 0x05, 0xbe, 0xb7, 0xf1, 0x77, 0x4f, 0xde, 0x45, + 0x8f, 0x59, 0x8f, 0x61, 0x2c, 0x93, 0x04, 0xfe, 0x3b, 0x00, 0xf0, 0x7f, + 0x04, 0xff, 0xc3, 0x1c, 0x04, 0x4e, 0xb0, 0x65, 0x30, 0x57, 0x06, 0x78, + 0x15, 0x00, 0x00, 0x00, 0xd9, 0xb3, 0xb0, 0xc6, 0xdc, 0xc2, 0xc8, 0xb9, + 0xbd, 0x06, 0x78, 0x17, 0x4f, 0x29, 0x83, 0x3f, 0x99, 0xf3, 0x81, 0x06, + 0x72, 0x7f, 0x64, 0x2a, 0x13, 0x1c, 0x20, 0x00, 0x4c, 0x2f, 0x33, 0x3f, + 0x13, 0x05, 0x1b, 0xa3, 0x12, 0x04, 0x11, 0x3e, 0x04, 0x41, 0x28, 0x17, + 0x3e, 0x04, 0x47, 0x28, 0x1f, 0x41, 0x30, 0x28, 0x19, 0x20, 0x00, 0x23, + 0x04, 0x43, 0x20, 0x13, 0x5b, 0x38, 0x28, 0x23, 0x30, 0x28, 0x35, 0x07, + 0x34, 0xff, 0x20, 0x04, 0x84, 0xff, 0x06, 0xf5, 0x7f, 0x80, 0x10, 0x06, + 0xf0, 0x7f, 0x12, 0x05, 0x13, 0x0c, 0x14, 0x14, 0x12, 0x00, 0x12, 0x0b, + 0x14, 0x02, 0x05, 0x12, 0x12, 0x12, 0x04, 0x12, 0xf2, 0x2a, 0x3f, 0x12, + 0x2b, 0x2d, 0x4c, 0xad, 0x00, 0x30, 0xe5, 0x30, 0xe1, 0x30, 0xf3, 0x30, + 0xe9, 0x8b, 0x28, 0x1d, 0xaf, 0x30, 0xbd, 0x06, 0x08, 0x1b, 0x4b, 0x27, + 0xef, 0x3f, 0xa3, 0x47, 0x6e, 0x4f, 0xff, 0x61, 0x00, 0x6b, 0x2e, 0x39, + 0x34, 0x19, 0x3b, 0x31, 0xda, 0x50, 0x1b, 0x50, 0x1d, 0x65, 0x2b, 0x19, + 0x56, 0xa7, 0x6e, 0x03, 0xcf, 0xcf, 0x56, 0x8f, 0x46, 0xfd, 0x6c, 0x00, + 0xe9, 0x4b, 0xa7, 0x78, 0x15, 0x3e, 0xb7, 0x50, 0x99, 0x70, 0x69, 0x06, + 0x40, 0xff, 0x06, 0xf1, 0x7f, 0x0d, 0x90, 0x7f, 0x48, 0x5c, 0x73, 0x7c, + 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0x34, 0xd0, 0x58, 0xba, 0x7d, 0x18, + 0xb7, 0x8c, 0xc1, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x1a, 0x04, 0x4e, + 0xaa, 0x27, 0xff, 0x35, 0x28, 0x13, 0x3b, 0x48, 0x05, 0x3a, 0x28, 0x25, + 0x3e, 0xe0, 0x04, 0xe8, 0x0b, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x13, 0x0a, 0x14, 0x04, 0x08, 0x00, 0x07, 0x13, 0x13, 0x06, 0x07, 0x05, + 0x0a, 0x13, 0x02, 0x13, 0x13, 0x13, 0x48, 0x2b, 0xfd, 0x28, 0x17, 0x1b, + 0x00, 0x4c, 0xa2, 0x30, 0xcf, 0x30, 0xd9, 0x30, 0xca, 0xa4, 0x28, 0x19, + 0xde, 0x28, 0x19, 0xde, 0x5d, 0x05, 0xfd, 0x37, 0x41, 0x00, 0x1d, 0x68, + 0x00, 0x76, 0x4e, 0x9f, 0x3b, 0x0b, 0xbb, 0x2d, 0xc5, 0x04, 0x4b, 0x1f, + 0xef, 0xff, 0xff, 0x05, 0x50, 0x65, 0x08, 0x90, 0x7f, 0x49, 0x49, 0x87, + 0x39, 0x6f, 0x05, 0x71, 0x71, 0x00, 0x10, 0x7f, 0xb0, 0x3d, 0x07, 0x73, + 0x89, 0x95, 0x05, 0xd1, 0x91, 0x65, 0x59, 0x70, 0x51, 0x02, 0x9b, 0x5c, + 0xea, 0x81, 0xbb, 0x6c, 0x06, 0x58, 0x1d, 0x44, 0x01, 0xc5, 0xa0, 0xbc, + 0x9c, 0xb0, 0xc8, 0xb9, 0x06, 0x78, 0x17, 0xb4, 0x07, 0x12, 0x7f, 0x6c, + 0x24, 0x01, 0x06, 0x91, 0xff, 0x10, 0x48, 0x0f, 0x3d, 0x04, 0x44, 0x34, + 0x28, 0x0f, 0x3a, 0x04, 0x38, 0x28, 0x21, 0x20, 0x00, 0x45, 0x3e, 0x28, + 0x1b, 0x42, 0x04, 0x40, 0x28, 0x1f, 0x32, 0x28, 0x2b, 0xc0, 0x0c, 0xd4, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x14, 0x01, 0x01, 0x01, 0x05, 0x03, 0x00, + 0x14, 0x14, 0x01, 0x05, 0x01, 0x01, 0x14, 0x14, 0x02, 0x14, 0x14, 0xbb, + 0x2a, 0x2d, 0x0e, 0x00, 0x3f, 0xff, 0x01, 0x20, 0x13, 0x12, 0x28, 0x36, + 0x01, 0x01, 0x10, 0x13, 0x0f, 0x80, 0x20, 0x05, 0x01, 0x01, 0x02, 0x0b, + 0x08, 0x05, 0x09, 0x00, 0x08, 0x02, 0x02, 0x07, 0x08, 0x06, 0x0b, 0x02, + 0x00, 0x02, 0x02, 0x02, 0x03, 0x10, 0x0b, 0x09, 0x0d, 0x00, 0x0b, 0x03, + 0x03, 0x09, 0x0b, 0x0c, 0x10, 0x03, 0x00, 0x03, 0x03, 0x03, 0x04, 0x06, + 0x06, 0x02, 0x06, 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, 0x03, 0x40, 0x06, + 0x05, 0x00, 0x0f, 0x02, 0x08, 0x02, 0x05, 0x05, 0x05, 0x08, 0x10, 0x01, + 0x0b, 0x0f, 0x20, 0x06, 0x05, 0x06, 0x11, 0x10, 0x00, 0x0a, 0x12, 0x10, + 0x06, 0x06, 0x0a, 0x10, 0x0d, 0x00, 0x11, 0x06, 0x06, 0x06, 0x06, 0x07, + 0x04, 0x11, 0x00, 0x12, 0x11, 0x11, 0x07, 0x07, 0x14, 0x11, 0x14, 0x00, + 0x04, 0x07, 0x07, 0x07, 0x07, 0x08, 0x03, 0x0c, 0x00, 0x11, 0x0c, 0x0c, + 0x08, 0x08, 0x13, 0x0c, 0x13, 0x00, 0x03, 0x08, 0x08, 0x08, 0x08, 0x09, + 0x0e, 0x09, 0x00, 0x0b, 0x0a, 0x09, 0x09, 0x09, 0x0c, 0x09, 0x07, 0x40, + 0x0e, 0x20, 0x06, 0x09, 0x0a, 0x0d, 0x0e, 0x0e, 0x0f, 0x00, 0x0e, 0x0a, + 0x0a, 0x0e, 0x0e, 0x08, 0x0d, 0x0a, 0x00, 0x0a, 0x0a, 0x0a, 0x0b, 0x12, + 0x0f, 0x0f, 0x10, 0x00, 0x0f, 0x0b, 0x0b, 0x0f, 0x0f, 0x0a, 0x12, 0x0b, + 0x00, 0x0b, 0x0b, 0x0b, 0x0c, 0x08, 0x0a, 0x07, 0x0b, 0x00, 0x0a, 0x0c, + 0x0c, 0x03, 0x0a, 0x10, 0x08, 0x0c, 0x04, 0x0c, 0x0c, 0x0c, 0x0d, 0x09, + 0x20, 0x89, 0x01, 0x0d, 0x00, 0x0d, 0x02, 0x03, 0x11, 0x09, 0x0d, 0x0d, + 0x0d, 0x00, 0x0d, 0x0e, 0x14, 0x05, 0x14, 0x04, 0x02, 0x0e, 0x01, 0x0e, + 0x11, 0x04, 0x0e, 0x14, 0x0e, 0x0e, 0x20, 0x4b, 0x80, 0x20, 0xc1, 0x01, + 0x06, 0x0f, 0x0f, 0x12, 0x02, 0x12, 0x14, 0x02, 0x0f, 0x0f, 0x20, 0x4b, + 0x0c, 0x20, 0x23, 0x0d, 0x10, 0x00, 0x10, 0x0d, 0x0d, 0x09, 0x0c, 0x10, + 0x10, 0x10, 0x48, 0x10, 0x20, 0x9a, 0x03, 0x07, 0x20, 0xa1, 0x05, 0x12, + 0x04, 0x00, 0x07, 0x11, 0x11, 0x11, 0x11, 0x12, 0x05, 0x13, 0x00, 0x0c, + 0x14, 0x14, 0x12, 0x12, 0x0b, 0x14, 0x02, 0x06, 0x05, 0x12, 0x12, 0x12, + 0x12, 0xf9, 0x5f, 0xf1, 0x57, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0xe4, 0x00, + 0x11, 0x1a, 0x00, 0x00, 0x30, 0x01, 0x4d, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xbd, 0x22, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x4d, 0xa4, 0x30, 0xfc, 0x30, 0xeb, 0x08, + 0x30, 0xfb, 0x30, 0xc9, 0x20, 0x03, 0xd5, 0x30, 0xe9, 0x04, 0x30, 0xf3, + 0x30, 0xb9, 0x30, 0x05, 0xb8, 0x29, 0xce, 0x00, 0x01, 0x6c, 0x00, 0x65, + 0x00, 0x2d, 0x00, 0x64, 0x40, 0x05, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x63, 0x20, 0x13, 0x10, 0x0d, 0x50, 0x7f, 0x49, + 0x00, 0x73, 0x22, 0x01, 0x61, 0x2b, 0x00, 0x20, 0x42, 0x01, 0x20, 0xa2, + 0x01, 0x69, 0x22, 0x09, 0x05, 0x1a, 0xb3, 0x00, 0xd5, 0x6c, 0x70, 0x51, + 0x7f, 0x89, 0x9b, 0x5c, 0x08, 0x27, 0x59, 0x3a, 0x53, 0x06, 0x3b, 0x21, + 0x7c, 0xc7, 0xdc, 0x01, 0xb4, 0x04, 0xd5, 0x91, 0xb7, 0xa4, 0xc2, 0x06, + 0x5b, 0x9f, 0x8a, 0x07, 0x11, 0xff, 0x6c, 0x00, 0x68, 0x00, 0x21, 0xff, + 0xe7, 0x05, 0x41, 0xfd, 0x00, 0x00, 0x00, 0x18, 0x04, 0x3b, 0x04, 0x4c, + 0x04, 0x2d, 0x08, 0x00, 0x34, 0x04, 0x35, 0x20, 0x05, 0x24, 0x04, 0x40, + 0x01, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x41, 0x04, 0x10, 0x15, 0x74, 0xff, + 0x80, 0x06, 0xf6, 0xff, 0x01, 0x0c, 0x0e, 0x0d, 0x0e, 0x0e, 0x01, 0x00, + 0x01, 0x0d, 0x0e, 0x07, 0x0c, 0x01, 0x01, 0x01, 0x45, 0x01, 0x58, 0x17, + 0x03, 0x4d, 0xa2, 0x28, 0x15, 0xb6, 0x05, 0xe8, 0x0b, 0xae, 0xbf, 0xff, + 0x41, 0x28, 0x17, 0x73, 0x28, 0x0b, 0x05, 0x98, 0x09, 0x07, 0xd0, 0x7f, + 0x45, 0xb7, 0x60, 0xff, 0x73, 0x27, 0x1f, 0x06, 0xb1, 0x7f, 0x7a, 0x05, + 0x67, 0x87, 0x00, 0x91, 0xff, 0x06, 0x50, 0x7f, 0x00, 0x3f, 0x96, 0x14, + 0x5c, 0x28, 0x84, 0xaf, 0x65, 0x86, 0x06, 0x78, 0x17, 0x4c, 0xc5, 0x90, + 0xc7, 0x06, 0x78, 0x13, 0x72, 0x7f, 0x7a, 0xd5, 0x42, 0x7f, 0x06, 0xb3, + 0xff, 0xe1, 0x06, 0x81, 0xff, 0x2d, 0x48, 0x17, 0x37, 0x28, 0x0d, 0xe0, + 0x05, 0x98, 0x0b, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x01, + 0x01, 0x08, 0x01, 0x02, 0x01, 0x02, 0x02, 0x08, 0x01, 0x19, 0x20, 0x05, + 0x02, 0x00, 0x02, 0x8c, 0x22, 0x81, 0x05, 0x00, 0x00, 0x04, 0x80, 0x28, + 0x17, 0xad, 0x30, 0xc6, 0x30, 0xfc, 0x30, 0xcc, 0x82, 0x06, 0x68, 0x19, + 0x41, 0x00, 0x71, 0x00, 0x75, 0x2e, 0x1b, 0x74, 0xba, 0x2f, 0xa7, 0x69, + 0x2f, 0xa9, 0x05, 0xf8, 0x1d, 0x07, 0xb0, 0x7f, 0x6e, 0x2f, 0x23, 0x65, + 0xf0, 0x2f, 0xad, 0x06, 0xb0, 0x7f, 0x05, 0xf8, 0x1b, 0x06, 0xf0, 0x7f, + 0x3f, 0x96, 0xfa, 0x57, 0x20, 0x66, 0x57, 0x06, 0x78, 0x15, 0x00, 0x00, + 0x44, 0xc5, 0xa4, 0x1a, 0xd0, 0x50, 0xd1, 0x06, 0x98, 0x17, 0xf2, 0x7f, + 0xeb, 0x06, 0x83, 0xff, 0xe2, 0x80, 0x06, 0x42, 0x7f, 0x10, 0x04, 0x3a, + 0x04, 0x32, 0x04, 0x38, 0x2b, 0x04, 0x42, 0x28, 0x19, 0x3d, 0x20, 0x07, + 0x4f, 0x05, 0xe8, 0x1d, 0x0f, 0xb4, 0xff, 0x80, 0x10, 0x06, 0x30, 0xff, + 0x03, 0x02, 0x02, 0x01, 0x04, 0x03, 0x03, 0x04, 0x03, 0x01, 0x03, 0x01, + 0x02, 0x20, 0x06, 0x03, 0xe2, 0x00, 0x1f, 0x96, 0xff, 0x00, 0x00, 0x05, + 0x4d, 0xaa, 0x80, 0x28, 0x13, 0xd9, 0x30, 0xeb, 0x30, 0xcb, 0x30, 0xe5, + 0xa8, 0x06, 0x48, 0x19, 0x41, 0x28, 0x15, 0x76, 0x2f, 0xab, 0x72, 0x00, + 0x67, 0xde, 0x06, 0x28, 0x15, 0x0f, 0x30, 0x7f, 0x6c, 0x61, 0x7f, 0x06, + 0x38, 0x15, 0xb1, 0xff, 0x06, 0x50, 0x7f, 0x65, 0x04, 0x59, 0x17, 0x5f, + 0x85, 0x6d, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x03, 0xa0, 0xbc, 0x74, 0xb9, + 0x74, 0xb2, 0x06, 0x98, 0x17, 0x07, 0x33, 0x7f, 0x51, 0xe9, 0x06, 0x82, + 0x7f, 0x1e, 0x28, 0x15, 0x35, 0x04, 0x40, 0x28, 0x13, 0x78, 0x4c, 0x05, + 0xe8, 0x11, 0x10, 0x07, 0x74, 0xff, 0x0e, 0xd6, 0x7f, 0x28, 0x13, 0x02, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x0f, 0x30, 0x06, 0x04, 0x8d, + 0x00, 0x20, 0x31, 0x02, 0x00, 0x00, 0x06, 0x4d, 0xd0, 0x02, 0x30, 0xb9, + 0x30, 0xfb, 0x30, 0xce, 0x28, 0x19, 0xde, 0x02, 0x30, 0xf3, 0x30, 0xc7, + 0x30, 0xa3, 0x05, 0xe8, 0x1d, 0x4c, 0x08, 0x00, 0x6f, 0x00, 0x77, 0x48, + 0x17, 0x20, 0x00, 0x4e, 0x88, 0x20, 0x0b, 0x72, 0x00, 0x6d, 0x4f, 0x39, + 0x64, 0x00, 0x79, 0xa8, 0x05, 0x4f, 0xb9, 0x42, 0x2f, 0xa7, 0x73, 0x20, + 0x01, 0x65, 0x00, 0x2d, 0xee, 0xe0, 0x7f, 0x3f, 0xbb, 0x0d, 0x90, 0x7f, + 0x61, 0x00, 0x01, 0x7f, 0x05, 0x5f, 0xbb, 0x31, 0x7f, 0x6a, 0xa0, 0x00, + 0x20, 0x7d, 0xed, 0x05, 0x6e, 0x39, 0x0b, 0x4e, 0xfa, 0x8b, 0xfc, 0x10, + 0x66, 0x95, 0x5e, 0x06, 0x78, 0x19, 0x14, 0xbc, 0xa4, 0xc2, 0x00, 0x78, + 0xb1, 0x74, 0xb9, 0xdd, 0xb9, 0x14, 0xb5, 0xad, 0x06, 0x3b, 0x97, 0x4c, + 0x2f, 0xa1, 0x61, 0x2b, 0x93, 0x00, 0x12, 0xfd, 0xeb, 0x05, 0x83, 0x7f, + 0x10, 0x69, 0x00, 0x78, 0x06, 0x82, 0x7f, 0x1d, 0x04, 0x38, 0x04, 0x55, + 0x36, 0x28, 0x15, 0x4f, 0x20, 0x01, 0x20, 0x20, 0x0d, 0x3e, 0x28, 0x23, + 0x15, 0x3c, 0x04, 0x30, 0x28, 0x27, 0x34, 0x20, 0x19, 0x4f, 0x05, 0x08, + 0x2b, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x05, 0x10, 0x04, + 0x03, 0x05, 0x05, 0x02, 0x05, 0x05, 0x0e, 0x05, 0x0d, 0x10, 0x30, 0x07, + 0xf9, 0x00, 0x22, 0xbf, 0xff, 0x00, 0x00, 0x07, 0x4d, 0xd6, 0x80, 0x28, + 0x11, 0xb4, 0x30, 0xfc, 0x30, 0xcb, 0x30, 0xe5, 0xd6, 0x05, 0xe8, 0x11, + 0x77, 0x97, 0x75, 0x4f, 0xab, 0x75, 0x05, 0xa8, 0x0b, 0xd8, 0x17, 0x6f, + 0xbf, 0x60, 0x81, 0x6f, 0x06, 0x4f, 0xb1, 0xd0, 0xff, 0x06, 0x31, 0x7f, + 0x39, 0x8b, 0x70, 0xfd, 0x06, 0x1f, 0xaf, 0xa0, 0x90, 0x7f, 0xf1, 0x06, + 0x2e, 0x2d, 0x00, 0x00, 0xc3, 0x52, 0x6e, 0x10, 0x82, 0x2c, 0x7b, 0x06, + 0x78, 0x15, 0x00, 0x00, 0x80, 0xbd, 0x03, 0x74, 0xb9, 0xe0, 0xac, 0x74, + 0xb2, 0x06, 0x50, 0x7d, 0xd2, 0xff, 0xc4, 0x05, 0xb8, 0x0f, 0x00, 0x12, + 0x7f, 0x6e, 0x00, 0x68, 0x06, 0x22, 0x7f, 0x11, 0x04, 0x5e, 0x43, 0x28, + 0x09, 0x33, 0x20, 0x05, 0x05, 0x78, 0x09, 0x07, 0xf4, 0xff, 0x10, 0x0e, + 0xd0, 0x7f, 0x06, 0x80, 0x28, 0x14, 0x06, 0x06, 0x06, 0x06, 0x03, 0x06, + 0x03, 0x80, 0x40, 0x07, 0xa6, 0x21, 0x95, 0x03, 0x00, 0x00, 0x08, 0xab, + 0x48, 0x17, 0xbf, 0x06, 0xc8, 0x17, 0x72, 0x2f, 0x99, 0x74, 0x20, 0x01, + 0x3f, 0xa5, 0xbf, 0x06, 0x38, 0x17, 0x72, 0x2f, 0xab, 0x30, 0x7d, 0x06, + 0x38, 0x15, 0x07, 0xf0, 0x7f, 0x06, 0x38, 0x17, 0x71, 0x7f, 0x80, 0x06, + 0x58, 0x17, 0x03, 0x5e, 0x17, 0x52, 0x54, 0x58, 0x3c, 0x40, 0x5c, 0x06, + 0x78, 0x19, 0x0c, 0xbe, 0x74, 0xb9, 0xc0, 0xd0, 0xe0, 0x06, 0xb8, 0x17, + 0x07, 0x72, 0xff, 0x06, 0x78, 0x17, 0x40, 0x04, 0x35, 0x04, 0x42, 0x2e, + 0x04, 0x30, 0x28, 0x17, 0x4c, 0x05, 0xe8, 0x13, 0x07, 0x74, 0xff, 0x10, + 0x0e, 0xb0, 0x7f, 0x07, 0x00, 0x04, 0x06, 0x04, 0x07, 0x07, 0x07, 0x07, + 0x04, 0x20, 0x07, 0x02, 0x40, 0x07, 0x36, 0x22, 0xce, 0xfe, 0x00, 0x00, + 0x00, 0x09, 0x4d, 0xb5, 0x30, 0xf3, 0x30, 0xc8, 0xd7, 0x28, 0x1b, 0x06, + 0x7c, 0xaf, 0x43, 0x2f, 0xa1, 0x6e, 0x28, 0x17, 0x37, 0x9d, 0x10, 0x06, + 0xd0, 0x7f, 0x43, 0x6f, 0x0e, 0x40, 0x7f, 0x2d, 0x4e, 0x2e, 0x59, 0x06, + 0x78, 0x13, 0x3f, 0xff, 0x03, 0xc1, 0xc0, 0xb8, 0xd2, 0x74, 0xb9, 0x06, + 0x78, 0x15, 0x0f, 0x12, 0x7f, 0x57, 0x26, 0x28, 0x15, 0x3d, 0x28, 0x17, + 0x40, 0x06, 0x28, 0x13, 0x10, 0x07, 0xd4, 0xff, 0x0e, 0x56, 0x7f, 0x00, + 0x08, 0x06, 0x07, 0x06, 0x08, 0x08, 0x08, 0x08, 0x10, 0x05, 0x08, 0x17, + 0x40, 0x07, 0x10, 0x22, 0x5a, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x4d, 0xb7, + 0x30, 0xe3, 0x28, 0x19, 0x00, 0xd1, 0x30, 0xfc, 0x30, 0xcb, 0x30, 0xe5, + 0x30, 0x15, 0xfb, 0x30, 0xa2, 0x28, 0x23, 0xc7, 0x28, 0x2b, 0xcc, 0x05, + 0x68, 0x29, 0x44, 0x43, 0x4c, 0x25, 0x6d, 0x00, 0x70, 0x8f, 0xb1, 0x2d, + 0x00, 0x5d, 0x41, 0x2f, 0xc3, 0x64, 0x48, 0x2f, 0x05, 0x1f, 0xc1, 0x10, + 0x07, 0xb0, 0x7f, 0xf1, 0x2e, 0xb5, 0x88, 0xb1, 0xfd, 0x61, 0x00, 0x73, + 0x05, 0x0f, 0xc2, 0x99, 0x99, 0xdf, 0x01, 0x69, 0x2d, 0x00, 0x3f, 0x96, + 0x7b, 0x76, 0x06, 0x58, 0x1d, 0x00, 0xf9, 0xc0, 0x0c, 0xd3, 0x74, 0xb2, + 0x44, 0xc5, 0x0d, 0x74, 0xb9, 0x74, 0xb3, 0x06, 0x5b, 0x97, 0x00, 0xf3, + 0x7f, 0x6e, 0x05, 0x83, 0xff, 0x60, 0x6e, 0x44, 0x0b, 0x05, 0xd2, 0x01, + 0x28, 0x04, 0x30, 0x04, 0x3c, 0x20, 0x04, 0x3f, 0x20, 0x05, 0x3d, 0x04, + 0x4c, 0x04, 0x2d, 0x28, 0x00, 0x10, 0x28, 0x21, 0x34, 0x48, 0x2b, 0x3d, + 0x04, 0x4b, 0xe0, 0x05, 0x28, 0x2b, 0x10, 0x0f, 0xb4, 0xff, 0x06, 0x36, + 0xff, 0x09, 0x07, 0x08, 0x07, 0x09, 0x02, 0x09, 0x09, 0x09, 0x06, 0x09, + 0x18, 0x40, 0x07, 0xd1, 0x00, 0x22, 0x1a, 0x03, 0x00, 0x00, 0x0b, 0x4d, + 0xb3, 0x8d, 0x28, 0x07, 0xb7, 0x30, 0xab, 0x05, 0x68, 0x05, 0x00, 0x3f, + 0xaf, 0x6f, 0x2f, 0xab, 0x07, 0x73, 0x00, 0x69, 0x00, 0x63, 0x28, 0x1f, + 0x06, 0x90, 0x7f, 0x06, 0x5f, 0xad, 0x16, 0x00, 0x00, 0x4b, 0x80, 0xff, + 0x6b, 0x06, 0xc0, 0xff, 0x06, 0x91, 0x7f, 0xf3, 0xa8, 0x2e, 0xab, 0x63, + 0x2e, 0xb5, 0x67, 0x06, 0x41, 0xff, 0xd1, 0x79, 0x7f, 0x18, 0x89, 0x09, + 0x56, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x54, 0xcf, 0x74, 0x1e, 0xb9, 0xa4, + 0xc2, 0x06, 0x73, 0x7d, 0x07, 0x71, 0xff, 0x33, 0x7f, 0x06, 0x51, 0xff, + 0x1a, 0x20, 0x04, 0x3e, 0x28, 0x09, 0x41, 0x04, 0x38, 0x04, 0x3a, 0xe0, + 0x28, 0x21, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x0a, 0x08, 0x09, + 0x0e, 0x0a, 0x01, 0x0a, 0x0a, 0x0a, 0x07, 0x0a, 0x08, 0x08, 0x30, 0x07, + 0x00, 0xcf, 0x1d, 0x36, 0x06, 0x00, 0x00, 0x0c, 0x4d, 0x04, 0xd5, 0x30, + 0xe9, 0x30, 0xf3, 0x28, 0x19, 0xe5, 0x30, 0x15, 0xfb, 0x30, 0xb3, 0x20, + 0x09, 0xc6, 0x05, 0xe8, 0x21, 0x46, 0x2f, 0x9b, 0xb8, 0x3c, 0x29, 0x63, + 0x2f, 0xb7, 0x3f, 0xab, 0x38, 0x27, 0x6d, 0x00, 0x74, 0x22, 0x00, 0xe9, + 0x10, 0x06, 0x00, 0x7f, 0x61, 0x00, 0x20, 0x49, 0xa5, 0x6e, 0xb5, 0x21, + 0x7d, 0x65, 0x05, 0x89, 0xa3, 0x91, 0xff, 0x6f, 0x80, 0x7f, 0x64, 0x2e, + 0xc1, 0x60, 0x64, 0x2a, 0x2f, 0x05, 0x3f, 0xbd, 0x17, 0x5f, 0x17, 0x67, + 0xc0, 0x04, 0x4e, 0x54, 0x5b, 0xf0, 0x6c, 0x06, 0x58, 0x1b, 0x04, 0xd5, + 0x00, 0x91, 0xb7, 0x88, 0xc2, 0x69, 0xcf, 0x4c, 0xd1, 0xe8, 0x06, 0x5b, + 0x99, 0x07, 0x93, 0x7f, 0x06, 0x51, 0xff, 0x24, 0x28, 0x15, 0x30, 0x04, + 0x3d, 0x08, 0x04, 0x48, 0x04, 0x2d, 0x48, 0x23, 0x3d, 0x04, 0x42, 0x38, + 0x04, 0x35, 0x05, 0xa8, 0x1f, 0x10, 0x07, 0x94, 0xff, 0x0e, 0x56, 0x7f, + 0x0b, 0x09, 0x0a, 0x00, 0x09, 0x0b, 0x0b, 0x0b, 0x0b, 0x09, 0x0b, 0x16, + 0x88, 0x40, 0x07, 0x97, 0x21, 0x47, 0x2b, 0x1d, 0x0d, 0x4d, 0xaa, 0x08, + 0x30, 0xfc, 0x30, 0xc8, 0x28, 0x13, 0xce, 0x30, 0xeb, 0x22, 0x30, 0xde, + 0x28, 0x21, 0xc7, 0x30, 0xa3, 0x05, 0xc8, 0x19, 0x55, 0x28, 0x00, 0x70, + 0x20, 0x01, 0x65, 0x2f, 0xb3, 0x20, 0x00, 0x4e, 0xa2, 0x4f, 0xbb, 0x6d, + 0x48, 0x27, 0x64, 0x00, 0x79, 0x05, 0x4f, 0xc1, 0x48, 0xab, 0x2f, 0xa5, + 0x75, 0x47, 0x09, 0x2d, 0xe0, 0x7f, 0x69, 0x2e, 0xc3, 0x0d, 0x10, 0x7f, + 0x1f, 0x41, 0x00, 0x6c, 0x29, 0x85, 0x38, 0x13, 0xf0, 0xfd, 0x05, 0x5f, + 0xbd, 0x00, 0x70, 0x7f, 0x40, 0xed, 0x05, 0x6e, 0xbd, 0x0a, 0x4e, 0xfa, + 0x8b, 0xfc, 0x66, 0x30, 0x95, 0x5e, 0x06, 0x58, 0x15, 0x26, 0x97, 0xc6, + 0xb8, 0xd2, 0x78, 0x01, 0xb1, 0x74, 0xb9, 0xdd, 0xb9, 0x14, 0xb5, 0x06, + 0x38, 0x19, 0x5b, 0x48, 0x2e, 0xaf, 0x6f, 0x2f, 0xab, 0x00, 0x12, 0xfd, + 0xeb, 0x06, 0xc1, 0xff, 0x05, 0x72, 0x7f, 0x45, 0x12, 0x28, 0x05, 0x40, + 0x04, 0x45, 0x28, 0x19, 0x4f, 0x20, 0x01, 0x11, 0x20, 0x00, 0x1d, 0x28, + 0x1b, 0x40, 0x04, 0x3c, 0x48, 0x2b, 0x1c, 0x34, 0x04, 0x38, 0x20, 0x15, + 0x0c, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x1a, 0x00, 0x0d, 0x0c, + 0x02, 0x02, 0x0c, 0x0c, 0x0c, 0x02, 0x21, 0x04, 0x1a, 0x20, 0x05, 0x0c, + 0x28, 0x23, 0xc8, 0x2f, 0xff, 0x10, 0x0e, 0x4d, 0xe9, 0x28, 0x0b, 0xb0, + 0x30, 0xc9, 0x30, 0x10, 0xc3, 0x30, 0xaf, 0x28, 0x1d, 0xeb, 0x30, 0xb7, + 0x30, 0x6a, 0xe8, 0x28, 0x1d, 0x05, 0x9d, 0x37, 0x4c, 0x4f, 0xad, 0x67, + 0x27, 0x9b, 0x65, 0xa8, 0x4e, 0x23, 0x63, 0x2f, 0xb3, 0x52, 0x2f, 0xb3, + 0x75, 0x00, 0x73, 0xad, 0x20, 0x01, 0x69, 0x26, 0xb5, 0x6c, 0x4e, 0xc3, + 0x10, 0x04, 0x90, 0x7f, 0x69, 0x61, 0x7f, 0xba, 0x5f, 0xa3, 0x63, 0x2f, + 0xbd, 0x51, 0x81, 0x51, 0x7f, 0x67, 0x28, 0x37, 0x69, 0xed, 0x4f, 0xc5, + 0x04, 0x59, 0x25, 0x00, 0x71, 0xff, 0x73, 0x2e, 0xbd, 0x31, 0xfb, 0xf3, + 0x04, 0xa1, 0xfb, 0x80, 0x3f, 0xff, 0x17, 0x67, 0x3c, 0x68, 0x1a, 0x59, + 0x4b, 0x00, 0x51, 0x2d, 0x00, 0x81, 0x9c, 0x7f, 0x89, 0x38, 0x40, 0x6c, + 0x05, 0xf8, 0x1f, 0x91, 0xb7, 0xf8, 0xad, 0xc4, 0xb3, 0x00, 0x6c, 0xd0, + 0xe8, 0xb8, 0xdc, 0xc2, 0xa9, 0xc6, 0xda, 0x06, 0x18, 0x99, 0x07, 0xf3, + 0x7f, 0x71, 0x44, 0x09, 0xb2, 0x81, 0x6c, 0x2f, 0x49, 0xe3, 0xd5, 0x2f, + 0x45, 0x04, 0x5f, 0xc3, 0x1b, 0x48, 0x01, 0x33, 0x28, 0x1d, 0x34, 0x28, + 0x11, 0x00, 0x3a, 0x04, 0x2d, 0x00, 0x20, 0x04, 0x43, 0x04, 0x41, 0x41, + 0x20, 0x01, 0x38, 0x04, 0x3b, 0x04, 0x4c, 0x28, 0x25, 0x70, 0x3d, 0x04, + 0xc8, 0x19, 0x10, 0x07, 0x14, 0xff, 0x0e, 0xd6, 0x7f, 0x0d, 0x0d, 0x0f, + 0x0f, 0x00, 0x10, 0x0f, 0x0d, 0x0d, 0x10, 0x0f, 0x09, 0x0d, 0x40, 0x0d, + 0x20, 0x01, 0x02, 0x1f, 0xc1, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x4d, 0xea, + 0x30, 0xe0, 0x30, 0xfc, 0x30, 0x6f, 0xb6, 0x05, 0xc8, 0x0b, 0xf6, 0x97, + 0x6d, 0x68, 0x07, 0x36, 0xa1, 0x10, 0x06, 0x70, 0x7f, 0x51, 0x7d, 0xd4, + 0x04, 0x75, 0x7d, 0x00, 0xba, 0x17, 0x65, 0x60, 0x7f, 0xed, 0x06, 0x21, + 0xfd, 0x00, 0x00, 0x03, 0x29, 0x52, 0x46, 0x7a, 0x5e, 0x8d, 0x05, 0xf8, + 0x0d, 0x9f, 0xff, 0x03, 0xac, 0xb9, 0x34, 0xbb, 0xc1, 0xc7, 0x06, 0x53, + 0x7b, 0x07, 0x93, 0x7f, 0xd5, 0x73, 0xfd, 0x06, 0x12, 0x7f, 0x1b, 0x27, + 0xff, 0x3c, 0x28, 0x09, 0x37, 0x28, 0x19, 0xe0, 0x04, 0xd8, 0x01, 0x10, + 0x08, 0xd4, 0xff, 0x0e, 0x76, 0x7f, 0x0e, 0x0e, 0x10, 0x10, 0x0f, 0x00, + 0x10, 0x0e, 0x0e, 0x11, 0x10, 0x0a, 0x0e, 0x0e, 0x88, 0x20, 0x01, 0x97, + 0x20, 0xe4, 0x2f, 0xff, 0x10, 0x4d, 0xed, 0x2c, 0x30, 0xec, 0x28, 0x17, + 0xcc, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6f, 0x00, 0x5d, 0x72, 0x20, 0x01, + 0x61, 0x4e, 0xb7, 0x04, 0x5e, 0x93, 0x08, 0xf0, 0x7f, 0x74, 0x2d, 0x11, + 0x5d, 0x72, 0x6f, 0xb7, 0x65, 0x05, 0xe9, 0x1b, 0x51, 0x7f, 0x30, 0x75, + 0x61, 0x06, 0xa1, 0xff, 0x84, 0x06, 0x90, 0x7f, 0x1b, 0x6d, 0x97, 0x67, + 0x06, 0x98, 0x15, 0x00, 0x00, 0x0d, 0x5c, 0xb8, 0x0c, 0xb8, 0x06, 0x98, + 0x15, 0x92, 0x7f, 0x61, 0x06, 0x62, 0x81, 0x80, 0x07, 0x01, 0xff, 0x04, + 0x3e, 0x04, 0x42, 0x04, 0x30, 0x04, 0x45, 0x40, 0x28, 0x1f, 0x3d, 0x04, + 0x33, 0x28, 0x25, 0x4f, 0x05, 0xc8, 0x1d, 0xc0, 0x0f, 0x34, 0xff, 0x10, + 0x06, 0xb0, 0xff, 0x0f, 0x0f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0f, 0x0f, + 0x12, 0x11, 0x0b, 0x0f, 0x0f, 0x20, 0x01, 0x10, 0xed, 0x22, 0x63, 0x2b, + 0x1d, 0x11, 0x4d, 0xdf, 0x30, 0x01, 0xc7, 0x30, 0xa3, 0x30, 0xfb, 0x30, + 0xd4, 0x28, 0x1f, 0x6a, 0xcd, 0x28, 0x21, 0x05, 0xff, 0xb0, 0x4d, 0x2f, + 0xaf, 0x64, 0x2f, 0xb3, 0x2d, 0x0a, 0x00, 0x50, 0x00, 0x79, 0x28, 0x21, + 0xe9, 0x2f, 0xb3, 0xe9, 0xa2, 0x2e, 0x43, 0x73, 0x10, 0x05, 0x80, 0x7f, + 0x65, 0x00, 0x7a, 0x20, 0x01, 0x6f, 0xba, 0x28, 0x93, 0x69, 0x49, 0xa3, + 0x3d, 0xb5, 0x31, 0x8d, 0x69, 0x68, 0x2f, 0x65, 0xeb, 0x2e, 0x51, 0x04, + 0xd0, 0x7f, 0x31, 0xff, 0x6f, 0x22, 0x05, 0xed, 0x2a, 0x1d, 0x70, 0x79, + 0xa0, 0x5a, 0x25, 0x6f, 0x05, 0x02, 0x07, 0x57, 0x53, 0xe8, 0x90, 0x2d, + 0x00, 0x00, 0xd4, 0x6b, 0x29, 0x52, 0x5b, 0x72, 0xaf, 0x40, 0x65, 0x06, + 0x18, 0x21, 0xf8, 0xbb, 0x14, 0xb5, 0x3c, 0xd5, 0x0b, 0x08, 0xb8, 0x24, + 0xb1, 0x06, 0x5b, 0x99, 0x5a, 0x2f, 0xab, 0x33, 0x81, 0x11, 0x2d, 0x00, + 0x46, 0x4b, 0x9d, 0x6e, 0x00, 0x6b, 0x4a, 0xa3, 0x71, 0x6a, 0x20, 0x07, + 0x73, 0x93, 0x52, 0x05, 0x65, 0x00, 0xeb, 0x04, 0x2e, 0xcf, 0x6b, 0x4d, + 0x23, 0xf1, 0x51, 0xff, 0x20, 0xa2, 0x73, 0xe9, 0x4f, 0x3f, 0x05, 0x3f, + 0xbd, 0x44, 0x2e, 0x28, 0x0b, 0x2d, 0x00, 0x1f, 0x28, 0x15, 0x40, 0x04, + 0x5c, 0x35, 0x28, 0x19, 0x35, 0x28, 0x1f, 0x10, 0x0d, 0xd4, 0xff, 0x0e, + 0xd6, 0x7f, 0x10, 0x12, 0x00, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x1a, + 0x13, 0x00, 0x1a, 0x12, 0x10, 0x10, 0x10, 0x10, 0x01, 0x1f, 0x01, 0x05, + 0x01, 0x00, 0x00, 0x12, 0x4d, 0xce, 0x28, 0x0b, 0x55, 0xeb, 0x28, 0x17, + 0xd1, 0x28, 0x1b, 0xc9, 0x28, 0x1f, 0xab, 0x28, 0x1f, 0xb5, 0x05, 0xb8, + 0x1d, 0x4e, 0x4f, 0xaf, 0x34, 0x97, 0x50, 0x2f, 0xb3, 0x73, 0x28, 0x1f, + 0x45, 0x64, 0x2f, 0xb5, 0x2d, 0x00, 0x43, 0x2f, 0xc1, 0x6c, 0x4f, 0xc5, + 0xd6, 0x04, 0xd8, 0x21, 0xf0, 0x7f, 0x20, 0x40, 0x7f, 0x20, 0x06, 0x80, + 0x7f, 0x06, 0xf0, 0xff, 0x73, 0xf7, 0x45, 0xa1, 0x39, 0xa9, 0x05, 0x51, + 0x03, 0x51, 0xff, 0x74, 0x41, 0xf3, 0x52, 0x01, 0x50, 0x7f, 0xa0, 0x05, + 0x71, 0x83, 0x17, 0x48, 0x17, 0xa0, 0x52, 0x65, 0x67, 0x77, 0x10, 0x6d, + 0xe1, 0x5c, 0x06, 0x18, 0x17, 0x78, 0xb1, 0x74, 0xb9, 0x00, 0x0c, 0xd3, + 0xdc, 0xb4, 0x7c, 0xce, 0x08, 0xb8, 0xe8, 0x06, 0x3f, 0x30, 0x33, 0x7f, + 0x73, 0x81, 0x4e, 0x2f, 0xb3, 0x75, 0x00, 0x77, 0xbe, 0x27, 0xa1, 0x76, + 0x48, 0x21, 0x05, 0x33, 0x05, 0x91, 0xff, 0x38, 0x17, 0x06, 0x13, 0x81, + 0x1d, 0x35, 0x04, 0x3e, 0x28, 0x11, 0x38, 0x19, 0x30, 0x28, 0x1f, 0x34, + 0x28, 0x1b, 0x17, 0x2d, 0x00, 0x1a, 0x20, 0x0b, 0x3b, 0x28, 0x25, 0x0e, + 0x34, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x00, 0x11, 0x13, 0x14, 0x14, 0x14, + 0x14, 0x11, 0x11, 0x00, 0x14, 0x14, 0x0e, 0x13, 0x11, 0x11, 0x11, 0x11, + 0x00, 0x01, 0x24, 0x2d, 0x02, 0x00, 0x00, 0x13, 0x4d, 0x14, 0xda, 0x30, + 0xa4, 0x68, 0x11, 0xe9, 0x28, 0x1d, 0xed, 0x30, 0x76, 0xef, 0x48, 0x27, + 0x05, 0x9d, 0x33, 0x38, 0x0d, 0x79, 0xa7, 0x8f, 0x38, 0x0b, 0x20, 0x3f, + 0x00, 0x4c, 0x2e, 0xbf, 0x5e, 0xaf, 0x10, 0x05, 0x30, 0x7f, 0x3c, 0x9d, + 0x38, 0x07, 0x39, 0x91, 0x57, 0x6c, 0xe1, 0x81, 0x61, 0x05, 0x21, 0xff, + 0xed, 0x2e, 0x1b, 0x3d, 0x21, 0x70, 0x81, 0x80, 0x05, 0x90, 0x7d, 0x00, + 0x00, 0x62, 0x53, 0xe6, 0x74, 0x14, 0x06, 0x5c, 0xb3, 0x6c, 0x30, 0x57, + 0x05, 0xf8, 0x11, 0x5f, 0xff, 0x98, 0x10, 0xd3, 0x74, 0xc7, 0x28, 0x15, + 0xb7, 0xe8, 0xb8, 0x44, 0x17, 0xc5, 0x74, 0xb9, 0x06, 0x18, 0x19, 0x4c, + 0x48, 0x01, 0x3b, 0x8b, 0x38, 0x07, 0xff, 0x78, 0x0f, 0x5b, 0x1b, 0x05, + 0x33, 0x85, 0x71, 0xff, 0x3b, 0x8f, 0x3a, 0x91, 0x05, 0x93, 0xf9, 0x6a, + 0x17, 0xa0, 0x28, 0x09, 0x3c, 0x28, 0x05, 0x38, 0x04, 0x20, 0x00, 0x1b, + 0x23, 0x04, 0x43, 0x28, 0x1d, 0x40, 0x04, 0x4b, 0x05, 0x48, 0x11, 0x10, + 0x07, 0x94, 0xff, 0x80, 0x0e, 0xb6, 0x7f, 0x12, 0x14, 0x15, 0x15, 0x15, + 0x15, 0x12, 0x00, 0x12, 0x0f, 0x15, 0x06, 0x14, 0x12, 0x12, 0x12, 0x00, + 0x12, 0x93, 0x21, 0xe6, 0xfe, 0x00, 0x00, 0x14, 0x08, 0x4d, 0xd4, 0x30, + 0xab, 0x28, 0x07, 0xc7, 0x30, 0xa3, 0xd6, 0x28, 0x0f, 0x06, 0x3c, 0xaf, + 0x50, 0x2f, 0x91, 0x63, 0x2f, 0xa9, 0x3f, 0xb3, 0x79, 0xbe, 0x06, 0xe0, + 0x7f, 0x69, 0x05, 0x84, 0x8d, 0x07, 0xf0, 0x7f, 0x91, 0x01, 0x05, 0x17, + 0x89, 0x00, 0x91, 0xff, 0xed, 0x80, 0x06, 0x00, 0x7d, 0x00, 0x00, 0xae, + 0x76, 0x61, 0x53, 0x2c, 0x10, 0x7b, 0x27, 0x59, 0x06, 0x58, 0x15, 0x00, + 0x00, 0x3c, 0xd5, 0x03, 0x74, 0xce, 0x74, 0xb9, 0x14, 0xb5, 0x06, 0x50, + 0x7d, 0xf2, 0xff, 0x6a, 0xeb, 0x06, 0xe3, 0x7f, 0x06, 0x11, 0xff, 0x1f, + 0x28, 0x11, 0x3a, 0x48, 0x0d, 0x34, 0xb8, 0x28, 0x1b, 0x4f, 0x05, 0xa8, + 0x11, 0x08, 0x14, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x13, 0x15, 0x16, 0x08, + 0x16, 0x16, 0x16, 0x13, 0x20, 0x06, 0x10, 0x15, 0x13, 0x00, 0x13, 0x13, + 0x13, 0x79, 0x23, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x15, 0x4d, 0xdd, 0x30, + 0xef, 0x30, 0xc8, 0x20, 0x30, 0xa5, 0x28, 0x15, 0xfb, 0x30, 0xb7, 0x30, + 0xe3, 0x0e, 0x30, 0xe9, 0x30, 0xf3, 0x20, 0x0f, 0x05, 0xbb, 0x2f, 0x3f, + 0x99, 0x74, 0x80, 0x2f, 0x9f, 0x75, 0x00, 0x2d, 0x00, 0x43, 0x00, 0x68, + 0xd8, 0x48, 0x23, 0x3c, 0xbd, 0x74, 0x4e, 0xc7, 0x10, 0x14, 0xf0, 0x7f, + 0x6e, 0x66, 0xe6, 0x00, 0x74, 0xfe, 0x56, 0x2d, 0x00, 0x0f, 0x59, 0x17, + 0x10, 0x67, 0xb7, 0x5f, 0x06, 0x18, 0x1f, 0x78, 0xd4, 0x44, 0xc5, 0x00, + 0x2c, 0xd2, 0xe4, 0xc0, 0x91, 0xb7, 0xb8, 0xd2, 0xc5, 0x06, 0x5b, 0x97, + 0x0e, 0xd3, 0x7f, 0x1f, 0x04, 0x43, 0x28, 0x15, 0x42, 0x20, 0x05, 0x11, + 0x2d, 0x00, 0x28, 0x48, 0x1f, 0x30, 0x04, 0x3d, 0x20, 0x0f, 0x60, 0x30, + 0x05, 0x68, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x14, 0x16, 0x17, 0x17, 0x17, + 0x20, 0x17, 0x14, 0x20, 0x06, 0x12, 0x16, 0x14, 0x14, 0x14, 0x08, 0x14, + 0x20, 0x21, 0x3d, 0x2f, 0xff, 0x16, 0x4d, 0xd7, 0x02, 0x30, 0xed, 0x30, + 0xf4, 0x30, 0xa1, 0x28, 0x0d, 0xb9, 0x82, 0x28, 0x19, 0xa2, 0x30, 0xeb, + 0x30, 0xd7, 0x28, 0x21, 0xb3, 0xa0, 0x28, 0x27, 0xc8, 0x28, 0x29, 0xc0, + 0x30, 0xb8, 0x30, 0xe5, 0xa8, 0x28, 0x33, 0xeb, 0x04, 0x88, 0x29, 0x50, + 0x2f, 0xa9, 0x6f, 0x00, 0x76, 0xa0, 0x48, 0x09, 0x63, 0x2f, 0xaf, 0x2d, + 0x00, 0x41, 0x00, 0x6c, 0x35, 0x00, 0x70, 0x48, 0x13, 0x38, 0x27, 0xf4, + 0x48, 0x1f, 0x20, 0x2f, 0xcd, 0x55, 0x27, 0x20, 0x19, 0x7a, 0x28, 0x3d, + 0x72, 0x10, 0x04, 0x80, 0x7f, 0x7a, 0x2f, 0xb7, 0xaa, 0x71, 0x7f, 0x69, + 0x49, 0xa5, 0x6f, 0x29, 0x99, 0x74, 0x2f, 0xcd, 0x20, 0xde, 0x41, 0x7b, + 0x51, 0x7d, 0x72, 0x03, 0xcf, 0xd5, 0x00, 0x70, 0x7f, 0x71, 0xff, 0xd0, + 0x81, 0x75, 0xc0, 0x22, 0x1b, 0x03, 0xf8, 0x17, 0x57, 0x7f, 0xfa, 0x65, + 0xaf, 0x65, 0x00, 0x2d, 0x00, 0x3f, 0x96, 0x14, 0x5c, 0x51, 0x53, 0x80, + 0x30, 0x09, 0xdd, 0x84, 0x72, 0x82, 0x77, 0x6d, 0xb8, 0x40, 0x5c, 0x05, + 0x38, 0x25, 0x04, 0xd5, 0x5c, 0xb8, 0x29, 0xbc, 0x00, 0xa4, 0xc2, 0x4c, + 0xc5, 0x04, 0xd5, 0x54, 0xcf, 0x00, 0xb8, 0xd2, 0xe4, 0xb2, 0x50, 0xc9, + 0x74, 0xb9, 0xd5, 0x05, 0xbf, 0xaf, 0x00, 0x73, 0x7f, 0x6e, 0x06, 0x03, + 0x7f, 0xe7, 0x06, 0x21, 0xff, 0x1f, 0x28, 0x09, 0x14, 0x3e, 0x04, 0x32, + 0x48, 0x0d, 0x41, 0x28, 0x1b, 0x10, 0x04, 0x01, 0x3b, 0x04, 0x4c, 0x04, + 0x3f, 0x04, 0x4b, 0x28, 0x27, 0x54, 0x1b, 0x28, 0x31, 0x37, 0x28, 0x37, + 0x40, 0x28, 0x29, 0x4b, 0x04, 0x01, 0x39, 0x04, 0x20, 0x00, 0x11, 0x04, + 0x35, 0x28, 0x39, 0x1c, 0x35, 0x04, 0x33, 0x03, 0x88, 0x35, 0x10, 0x07, + 0xb4, 0xff, 0x0e, 0x36, 0x7f, 0x15, 0x17, 0x04, 0x18, 0x18, 0x18, 0x18, + 0x15, 0x20, 0x06, 0x11, 0x17, 0x00, 0x15, 0x15, 0x15, 0x15, 0xc9, 0x1e, + 0xd2, 0x03, 0x05, 0x00, 0x00, 0x17, 0x4d, 0xed, 0x28, 0x01, 0xcc, 0x88, + 0x11, 0xae, 0x06, 0x1c, 0xb1, 0x52, 0x2f, 0xa1, 0xf4, 0x2f, 0x9d, 0xd8, + 0x11, 0x10, 0x05, 0xb0, 0x7f, 0x6f, 0xad, 0x29, 0x73, 0x61, 0x2f, 0x9f, + 0x6f, 0xa8, 0x13, 0x05, 0xb1, 0xff, 0xf3, 0x00, 0x00, 0x7f, 0x87, 0x05, + 0xb2, 0x01, 0x57, 0x7f, 0xb7, 0x8b, 0x98, 0x13, 0x05, 0x38, 0x09, 0xdf, + 0xff, 0x3a, 0x60, 0xb8, 0x38, 0x11, 0x06, 0x13, 0x77, 0x00, 0xb3, 0x7f, + 0x6e, 0x0d, 0xa1, 0xff, 0x20, 0xbc, 0x28, 0x15, 0x3d, 0x28, 0x15, 0xb8, + 0x11, 0x10, 0x0d, 0xd4, 0xff, 0x0e, 0xd6, 0x7f, 0x16, 0x19, 0x04, 0x1a, + 0x1a, 0x1a, 0x1a, 0x16, 0x20, 0x06, 0x14, 0x19, 0x01, 0x16, 0x16, 0x16, + 0x16, 0x89, 0x20, 0x6f, 0x28, 0x17, 0x15, 0x18, 0x4d, 0xb0, 0x28, 0x11, + 0xc9, 0x28, 0x13, 0xfc, 0x06, 0x48, 0x15, 0x15, 0x00, 0x00, 0x47, 0x2f, + 0x81, 0x61, 0x2f, 0x8d, 0x65, 0x2f, 0xa5, 0x76, 0x6f, 0x2f, 0x8d, 0x3f, + 0xa9, 0x10, 0x06, 0x30, 0x7f, 0x61, 0x2f, 0xa5, 0x31, 0x7d, 0x61, 0xe0, + 0x06, 0x61, 0xff, 0x70, 0x7f, 0x05, 0xd1, 0xfd, 0x00, 0x00, 0xdc, 0x74, + 0xb7, 0x01, 0x5f, 0x57, 0x7f, 0x6e, 0x66, 0x01, 0x77, 0x06, 0x57, 0x9b, + 0x03, 0xfc, 0xac, 0xe4, 0xb4, 0xe8, 0xb8, 0x06, 0x98, 0x19, 0x07, 0xf2, + 0x7f, 0x88, 0x05, 0xf1, 0xff, 0x13, 0x04, 0x32, 0x28, 0x15, 0x34, 0x04, + 0x35, 0xae, 0x28, 0x15, 0x43, 0x28, 0x15, 0x30, 0x05, 0xc8, 0x15, 0x10, + 0x07, 0x94, 0xff, 0x0e, 0x76, 0x7f, 0x17, 0x00, 0x0b, 0x0b, 0x0b, 0x0c, + 0x0c, 0x17, 0x17, 0x0b, 0x00, 0x0c, 0x05, 0x0b, 0x17, 0x17, 0x17, 0x17, + 0x60, 0x00, 0x0b, 0x1d, 0xd4, 0x00, 0x00, 0x19, 0x4d, 0xde, 0x8a, 0x28, + 0x13, 0xc1, 0x30, 0xcb, 0x28, 0x17, 0xaf, 0x06, 0x48, 0x17, 0x4d, 0x8a, + 0x2e, 0xab, 0x72, 0x00, 0x74, 0x2e, 0xa3, 0x6e, 0x2e, 0xa7, 0x71, 0xec, + 0x28, 0x25, 0x05, 0xd8, 0x17, 0x0f, 0xd0, 0x7f, 0x63, 0x06, 0x08, 0x17, + 0x06, 0xf0, 0x7f, 0x6c, 0x9a, 0x02, 0xd0, 0x63, 0x3c, 0x5c, 0x4b, 0x51, + 0x06, 0x78, 0x17, 0xc8, 0x00, 0xb9, 0x74, 0xb9, 0xf0, 0xd2, 0xc8, 0xb2, + 0x6c, 0x68, 0xd0, 0x06, 0x58, 0x97, 0x0e, 0xf2, 0x7f, 0x1c, 0x28, 0x15, + 0x40, 0x04, 0x42, 0x0b, 0x04, 0x38, 0x04, 0x3d, 0x20, 0x03, 0x3a, 0x06, + 0x08, 0x17, 0x10, 0x07, 0xd4, 0xff, 0x80, 0x0e, 0x16, 0x7f, 0x18, 0x11, + 0x12, 0x12, 0x12, 0x12, 0x18, 0x00, 0x18, 0x13, 0x12, 0x0c, 0x11, 0x18, + 0x18, 0x18, 0x08, 0x18, 0x62, 0x0a, 0x92, 0x28, 0x17, 0x1a, 0x4d, 0xd5, + 0x00, 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0x18, 0x02, 0x98, 0xae, + 0x30, 0xa2, 0x30, 0xca, 0x06, 0x08, 0x1b, 0x46, 0xa0, 0x28, 0x15, 0x65, + 0x28, 0x13, 0x63, 0x00, 0x68, 0x00, 0x20, 0xad, 0x4f, 0xbd, 0x69, 0x2f, + 0xbf, 0x6e, 0x05, 0x8e, 0xb7, 0x3f, 0xaf, 0x79, 0x40, 0x71, 0xe0, 0x05, + 0xfe, 0xa9, 0x90, 0xff, 0x30, 0xef, 0x7a, 0x00, 0xf6, 0x00, 0x73, 0xaf, + 0x29, 0x1d, 0x73, 0x41, 0x09, 0x2d, 0x6f, 0xc7, 0x50, 0x99, 0x04, 0xbf, + 0xc3, 0x90, 0xff, 0x6b, 0x61, 0x21, 0x7f, 0x70, 0x8d, 0x63, 0x2f, 0xb7, + 0x73, 0x05, 0x4f, 0xbb, 0xd0, 0xe7, 0xc0, 0xf0, 0x81, 0x05, 0x18, 0xa5, + 0xd5, 0x6c, 0x5e, 0x5c, 0x2d, 0x57, 0x08, 0x9a, 0x4e, 0xa3, 0x90, 0x06, + 0x58, 0x19, 0x04, 0xd5, 0x91, 0x00, 0xb7, 0xa4, 0xc2, 0x39, 0xb8, 0x20, + 0x00, 0x30, 0x05, 0xae, 0x44, 0xc5, 0x98, 0xb0, 0x06, 0x72, 0x7f, 0x73, + 0x62, 0x73, 0xf1, 0x05, 0x12, 0x71, 0x00, 0x1f, 0x2f, 0x73, 0xf1, 0x06, + 0x11, 0xfd, 0x00, 0x00, 0x24, 0x28, 0x15, 0x40, 0x30, 0x28, 0x13, 0x46, + 0x04, 0x43, 0x04, 0x37, 0x04, 0x40, 0x41, 0x48, 0x19, 0x4f, 0x04, 0x20, + 0x00, 0x13, 0x04, 0x7c, 0x32, 0x28, 0x2b, 0x30, 0x19, 0x04, 0xd8, 0x29, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x19, 0x0a, 0x00, 0x0c, 0x0a, + 0x0d, 0x0d, 0x19, 0x19, 0x0a, 0x0d, 0x00, 0x15, 0x0a, 0x19, 0x19, 0x19, + 0x19, 0x82, 0x03, 0x00, 0xca, 0xda, 0x00, 0x00, 0x1b, 0x4d, 0xec, 0x30, + 0x06, 0xe6, 0x30, 0xcb, 0x30, 0xaa, 0x28, 0x1b, 0x06, 0x5d, 0x2f, 0x52, + 0x36, 0x00, 0xe9, 0x2f, 0xa3, 0x3f, 0xab, 0x6f, 0x2f, 0xb1, 0x10, 0x06, + 0x30, 0x7f, 0x69, 0xda, 0xa1, 0x7f, 0x06, 0x19, 0x1b, 0x52, 0x2e, 0x9f, + 0x51, 0xff, 0xf3, 0x06, 0x41, 0xff, 0x59, 0x06, 0x75, 0x3c, 0x5c, 0x6a, + 0x6c, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x08, 0x01, 0xb8, 0x04, 0xc7, 0xc8, + 0xb2, 0x39, 0xc6, 0x06, 0x70, 0x7f, 0xd8, 0x07, 0x13, 0x7f, 0x71, 0xff, + 0xe3, 0x24, 0x01, 0x06, 0x1b, 0x9a, 0x20, 0x04, 0x35, 0x23, 0x04, 0x4e, + 0x28, 0x17, 0x4c, 0x04, 0x3e, 0x28, 0x1d, 0x10, 0x0e, 0x34, 0xff, 0x94, + 0x0e, 0xd6, 0x7f, 0x1a, 0x18, 0x38, 0x0d, 0x1a, 0x20, 0x06, 0x13, 0x18, + 0x00, 0x1a, 0x1a, 0x1a, 0x1a, 0x28, 0xf1, 0x6e, 0x27, 0x40, 0x01, 0x4f, + 0xff, 0x1c, 0x4d, 0xde, 0x30, 0xe8, 0x30, 0x02, 0xc3, 0x30, 0xc8, 0x30, + 0xf6, 0x5c, 0x06, 0x58, 0x1b, 0x4d, 0x8e, 0x4f, 0x19, 0x6f, 0x00, 0x74, + 0x20, 0x01, 0x06, 0x3f, 0xb5, 0x10, 0x0e, 0xf0, 0x7f, 0x6c, 0x04, 0x9a, + 0xa6, 0x7e, 0x79, 0x72, 0x06, 0x98, 0x1b, 0xc8, 0xb9, 0x0f, 0x94, 0xc6, + 0xb8, 0xd2, 0x06, 0x78, 0x99, 0x07, 0x53, 0x7f, 0x3c, 0x17, 0x06, 0x53, + 0xfd, 0x85, 0x25, 0x01, 0x04, 0x30, 0x04, 0x39, 0x28, 0x17, 0x42, 0x20, + 0x01, 0x60, 0x30, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x1b, 0x12, + 0x13, 0x13, 0x13, 0x00, 0x13, 0x1b, 0x1b, 0x14, 0x12, 0x0c, 0x12, 0x1b, + 0x01, 0x1b, 0x1b, 0x1b, 0xea, 0xf6, 0x29, 0x20, 0xff, 0xff, 0x00, 0x01, + 0x0c, 0x0e, 0x0d, 0x0e, 0x0e, 0x01, 0x01, 0x00, 0x0d, 0x0e, 0x07, 0x0c, + 0x01, 0x01, 0x01, 0x01, 0x08, 0x02, 0x01, 0x01, 0x08, 0x20, 0x05, 0x02, + 0x08, 0x01, 0x40, 0x1a, 0x20, 0x05, 0x02, 0x02, 0x03, 0x02, 0x02, 0x01, + 0x00, 0x04, 0x03, 0x03, 0x03, 0x01, 0x03, 0x01, 0x02, 0xa0, 0x20, 0x06, + 0x03, 0x20, 0x0b, 0x02, 0x03, 0x04, 0x04, 0x04, 0x10, 0x02, 0x04, 0x10, + 0x30, 0x06, 0x04, 0x05, 0x10, 0x04, 0x00, 0x03, 0x05, 0x05, 0x05, 0x05, + 0x0e, 0x05, 0x0e, 0x50, 0x10, 0x30, 0x07, 0x06, 0x30, 0x03, 0x06, 0x06, + 0x06, 0x03, 0x20, 0x06, 0x03, 0x40, 0x07, 0x07, 0x04, 0x06, 0x04, 0x07, + 0x02, 0x07, 0x07, 0x07, 0x04, 0x07, 0x02, 0x40, 0x07, 0x08, 0x00, 0x06, + 0x07, 0x06, 0x08, 0x08, 0x08, 0x08, 0x05, 0x20, 0x08, 0x18, 0x40, 0x07, + 0x09, 0x07, 0x08, 0x07, 0x09, 0x02, 0x09, 0x09, 0x09, 0x06, 0x09, 0x19, + 0x40, 0x07, 0x0a, 0x00, 0x08, 0x09, 0x0e, 0x0a, 0x0a, 0x0a, 0x0a, 0x07, + 0x10, 0x0a, 0x08, 0x08, 0x30, 0x07, 0x0b, 0x09, 0x0a, 0x09, 0x01, 0x0b, + 0x0b, 0x0b, 0x0b, 0x09, 0x0b, 0x17, 0x40, 0x07, 0x00, 0x0c, 0x1b, 0x0d, + 0x0c, 0x02, 0x02, 0x0c, 0x0c, 0x08, 0x0c, 0x02, 0x04, 0x1b, 0x20, 0x05, + 0x0c, 0x0d, 0x0d, 0x00, 0x0f, 0x0f, 0x10, 0x0f, 0x0d, 0x0d, 0x10, 0x0f, + 0x10, 0x09, 0x0d, 0x0d, 0x20, 0x01, 0x0e, 0x0e, 0x10, 0x10, 0x00, 0x0f, + 0x10, 0x0e, 0x0e, 0x11, 0x10, 0x0a, 0x0e, 0x40, 0x0e, 0x20, 0x01, 0x0f, + 0x0f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0f, 0x0f, 0x12, 0x11, 0x0b, 0x0f, + 0x0f, 0x20, 0x01, 0x00, 0x10, 0x13, 0x14, 0x14, 0x14, 0x14, 0x10, 0x10, + 0x00, 0x1b, 0x14, 0x1b, 0x13, 0x10, 0x10, 0x10, 0x10, 0x00, 0x11, 0x14, + 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x08, 0x15, 0x15, 0x0f, 0x14, 0x30, + 0x29, 0x12, 0x15, 0x16, 0x00, 0x16, 0x16, 0x16, 0x12, 0x12, 0x0f, 0x16, + 0x06, 0x00, 0x15, 0x12, 0x12, 0x12, 0x12, 0x13, 0x16, 0x17, 0x09, 0x17, + 0x17, 0x17, 0x13, 0x20, 0x06, 0x11, 0x16, 0x31, 0x4d, 0x01, 0x14, 0x17, + 0x18, 0x18, 0x18, 0x18, 0x14, 0x20, 0x06, 0x2a, 0x13, 0x17, 0x30, 0x49, + 0x15, 0x49, 0x7f, 0x15, 0x20, 0x06, 0x12, 0x4a, 0x18, 0x30, 0x49, 0x16, + 0x1a, 0x31, 0x69, 0x16, 0x20, 0x06, 0x15, 0x50, 0x1a, 0x30, 0x49, 0x17, + 0x30, 0xb3, 0x0c, 0x17, 0x17, 0x0b, 0x12, 0x0c, 0x05, 0x0b, 0x30, 0x49, + 0x18, 0x11, 0x30, 0x55, 0x18, 0x04, 0x18, 0x13, 0x13, 0x0d, 0x11, 0x30, + 0x49, 0x19, 0x0a, 0x00, 0x0c, 0x0a, 0x0d, 0x0d, 0x19, 0x19, 0x0a, 0x0d, + 0x38, 0x16, 0x0a, 0x49, 0xc9, 0x29, 0xcb, 0x39, 0xc7, 0x19, 0x1a, 0x14, + 0xc0, 0x40, 0x09, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x11, 0xb4, 0x8a, 0x00, + 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x4e, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x59, 0x25, 0x88, + 0x09, 0x00, 0x00, 0x00, 0x02, 0x4e, 0xd9, 0x30, 0xeb, 0x30, 0xea, 0x10, + 0x30, 0xf3, 0x30, 0x06, 0x78, 0x1d, 0x42, 0x00, 0x65, 0x00, 0x01, 0x72, + 0x00, 0x6c, 0x00, 0x69, 0x00, 0x6e, 0x10, 0x07, 0x00, 0x7f, 0x50, 0x6f, + 0x06, 0xa1, 0xff, 0xed, 0x06, 0x61, 0xff, 0xcf, 0x67, 0x97, 0x67, 0x20, + 0x02, 0x5e, 0x06, 0x9b, 0x1b, 0xa0, 0xbc, 0x7c, 0xb9, 0xb0, 0x6d, 0xb9, + 0x06, 0x9b, 0x9b, 0x93, 0x7f, 0x6a, 0x06, 0x43, 0x81, 0x93, 0xff, 0x6d, + 0x06, 0x4c, 0xa0, 0x00, 0x11, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3b, 0x04, + 0x0c, 0x38, 0x04, 0x3d, 0x04, 0x10, 0x0e, 0xf4, 0xff, 0x0e, 0x36, 0xff, + 0x01, 0x03, 0x04, 0x04, 0x03, 0x06, 0x04, 0x01, 0x30, 0x06, 0x03, 0x01, + 0x10, 0x01, 0x01, 0x01, 0x58, 0x17, 0x03, 0x4e, 0xd8, 0x30, 0x12, 0xc3, + 0x30, 0xbb, 0x28, 0x17, 0xde, 0x5d, 0x06, 0x5f, 0xb7, 0x48, 0xae, 0x28, + 0x17, 0x73, 0x20, 0x01, 0x65, 0x06, 0x6f, 0xb6, 0x07, 0x90, 0x7f, 0x06, + 0x59, 0x17, 0x41, 0x88, 0x41, 0x7d, 0x69, 0x00, 0x61, 0x0e, 0x61, 0x7f, + 0xd1, 0x9e, 0xee, 0x60, 0x68, 0x06, 0x72, 0xfb, 0x3f, 0xff, 0xe4, 0xd5, + 0x3c, 0xc1, 0x20, 0x1d, 0x00, 0xfc, 0xc8, 0x06, 0x7f, 0xb5, 0x06, 0xf2, + 0x7f, 0x06, 0xf3, 0xff, 0x13, 0x28, 0x17, 0x5c, 0x41, 0x20, 0x01, 0x35, + 0x06, 0x68, 0x17, 0x0f, 0x94, 0xff, 0x10, 0x06, 0x56, 0x7f, 0x02, 0x07, + 0x04, 0x08, 0x07, 0x02, 0x08, 0x02, 0x30, 0x06, 0x07, 0x02, 0x00, 0x02, + 0x02, 0x02, 0x9b, 0x23, 0xdb, 0x05, 0x00, 0x00, 0x00, 0x04, 0x4e, 0xd0, + 0x30, 0xfc, 0x30, 0xc7, 0x80, 0x28, 0x17, 0xfb, 0x30, 0xd3, 0x30, 0xe5, + 0x30, 0xeb, 0x2a, 0x30, 0xc6, 0x28, 0x23, 0xd9, 0x20, 0x07, 0xaf, 0x05, + 0x68, 0x29, 0x42, 0xa0, 0x26, 0x91, 0x64, 0x47, 0x15, 0x2d, 0x00, 0x57, + 0x00, 0xfc, 0xaa, 0x2f, 0xbb, 0x74, 0x20, 0x01, 0x65, 0x2c, 0x3d, 0x62, + 0x4f, 0xc9, 0x67, 0xdf, 0x05, 0x60, 0x7f, 0x30, 0x7d, 0x75, 0x40, 0x7d, + 0x05, 0x90, 0x7b, 0x07, 0xb0, 0xff, 0x07, 0x50, 0x7f, 0x06, 0x11, 0x81, + 0x00, 0xf4, 0x5d, 0x7b, 0x76, 0x2d, 0x00, 0x26, 0x7b, 0x08, 0x7e, 0x81, + 0x21, 0x58, 0x06, 0x3b, 0x1b, 0x14, 0xbc, 0x74, 0x00, 0xb3, 0xd4, 0xbd, + 0x74, 0xb9, 0x5c, 0xd1, 0xa0, 0x06, 0xbc, 0x74, 0xb9, 0x6c, 0xd0, 0x05, + 0xf8, 0x23, 0x0e, 0xf2, 0x7f, 0x11, 0x08, 0x04, 0x30, 0x04, 0x34, 0x48, + 0x15, 0x2d, 0x00, 0x12, 0x02, 0x04, 0x4e, 0x04, 0x40, 0x04, 0x42, 0x28, + 0x29, 0x3c, 0x23, 0x04, 0x31, 0x28, 0x2f, 0x40, 0x04, 0x33, 0x05, 0x08, + 0x2b, 0x0f, 0xd3, 0xff, 0x80, 0x10, 0x06, 0x10, 0xff, 0x03, 0x01, 0x01, + 0x01, 0x03, 0x01, 0x03, 0xa0, 0x20, 0x06, 0x02, 0x20, 0x05, 0x03, 0x03, + 0xae, 0x22, 0x86, 0x08, 0x06, 0x00, 0x00, 0x05, 0x28, 0x17, 0xa4, 0x30, + 0xa8, 0xb5, 0x28, 0x0f, 0xf3, 0x05, 0x68, 0x07, 0x00, 0x38, 0x17, 0x76, + 0x2e, 0xad, 0x72, 0x06, 0x6e, 0xb3, 0x8e, 0x50, 0x7f, 0x69, 0x00, 0xe8, + 0x28, 0x91, 0x06, 0x3e, 0xb3, 0x39, 0x17, 0x79, 0xfc, 0x49, 0x01, 0x06, + 0x5d, 0xaf, 0x70, 0xff, 0x39, 0x83, 0x06, 0xb1, 0x7f, 0x06, 0x70, 0x7f, + 0xf4, 0x5d, 0x03, 0x10, 0x4f, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x52, 0xfd, + 0x48, 0x17, 0x06, 0xc7, 0xd0, 0xc5, 0x78, 0xb9, 0x05, 0xf8, 0x0f, 0x9b, + 0x97, 0x65, 0xf4, 0x61, 0xfd, 0x3b, 0x9b, 0x0e, 0x12, 0x7f, 0x38, 0x17, + 0x32, 0x28, 0x1b, 0x40, 0x04, 0x1c, 0x38, 0x04, 0x4f, 0x05, 0x08, 0x05, + 0x08, 0x74, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x04, 0x02, 0x04, 0x03, 0x02, + 0x05, 0x03, 0x04, 0x20, 0x06, 0x01, 0x02, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x3a, 0x22, 0x37, 0x08, 0x01, 0x00, 0x00, 0x06, 0x4e, 0xd6, 0x30, 0xe9, + 0x28, 0x13, 0x55, 0xc7, 0x28, 0x17, 0xd6, 0x28, 0x1d, 0xaf, 0x06, 0x08, + 0x1d, 0x42, 0x46, 0x8f, 0x5c, 0x6e, 0x6f, 0x33, 0x62, 0x4f, 0xb3, 0x05, + 0x3f, 0xa7, 0x00, 0x30, 0x7f, 0x62, 0x00, 0x74, 0x6f, 0x06, 0xc0, 0x7f, + 0x07, 0x10, 0xff, 0x51, 0x7d, 0x6f, 0x0d, 0xa0, 0x7f, 0xc3, 0x52, 0x02, + 0x70, 0x51, 0x7b, 0x76, 0x21, 0x58, 0x06, 0x78, 0x17, 0x0c, 0x00, 0xbe, + 0x80, 0xb7, 0x74, 0xb3, 0x80, 0xbd, 0x74, 0x1a, 0xb9, 0x6c, 0xd0, 0x06, + 0x38, 0x1b, 0x0e, 0xf2, 0x7f, 0x11, 0x28, 0x11, 0x30, 0x02, 0x04, 0x3d, + 0x04, 0x34, 0x04, 0x35, 0x20, 0x05, 0x31, 0x2e, 0x04, 0x43, 0x28, 0x21, + 0x33, 0x05, 0xa8, 0x1f, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x05, + 0x02, 0x04, 0x05, 0x04, 0x07, 0x05, 0x05, 0x30, 0x06, 0x04, 0x80, 0x20, + 0x06, 0x05, 0x41, 0x25, 0x45, 0x09, 0x00, 0x00, 0x41, 0x07, 0x28, 0x17, + 0xec, 0x30, 0xfc, 0x30, 0xe1, 0x28, 0x1b, 0xc6, 0x06, 0x5d, 0x2f, 0x38, + 0x17, 0x65, 0x00, 0x6d, 0x06, 0x6c, 0xad, 0x58, 0x97, 0xea, 0xf8, 0x40, + 0x7f, 0x0e, 0x90, 0xff, 0x31, 0x7f, 0x06, 0x3f, 0xab, 0x07, 0x31, 0xff, + 0x0d, 0x4e, 0x65, 0x06, 0x67, 0x85, 0x68, 0x02, 0x5e, 0x06, 0x61, 0xfe, + 0x28, 0x17, 0x08, 0x1e, 0xb8, 0x58, 0xba, 0x06, 0x38, 0x11, 0x07, 0xd2, + 0x7f, 0x06, 0x73, 0xff, 0x38, 0x17, 0x35, 0x38, 0x04, 0x3c, 0x48, 0x15, + 0x10, 0x06, 0x31, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x06, 0x05, 0x06, 0x0a, + 0x05, 0x08, 0x06, 0x06, 0x30, 0x06, 0x05, 0x20, 0x06, 0x06, 0x00, 0xbc, + 0x25, 0x43, 0x06, 0x00, 0x00, 0x08, 0x4e, 0x41, 0xcf, 0x28, 0x11, 0xd6, + 0x30, 0xeb, 0x30, 0xaf, 0x06, 0x68, 0x17, 0x5b, 0x48, 0x2f, 0xad, 0x6d, + 0x06, 0x2f, 0x27, 0xf0, 0x7f, 0x6f, 0x06, 0x60, 0x81, 0x06, 0xf0, 0xff, + 0x78, 0x41, 0xa1, 0x7d, 0x05, 0xbf, 0xa7, 0x00, 0x51, 0xff, 0x06, 0x10, + 0x81, 0x49, 0x6c, 0x21, 0x40, 0x58, 0x06, 0x98, 0x15, 0x00, 0x00, 0x68, + 0xd5, 0x80, 0xbd, 0x0e, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x78, 0x19, 0x07, + 0x73, 0x7f, 0x06, 0x72, 0x81, 0x13, 0x22, 0x04, 0x30, 0x28, 0x15, 0x31, + 0x04, 0x43, 0x28, 0x1f, 0x33, 0xe0, 0x06, 0x28, 0x19, 0x07, 0xd1, 0x7f, + 0x10, 0x0e, 0x10, 0xff, 0x07, 0x06, 0x07, 0x06, 0x01, 0x28, 0x07, 0x07, + 0x30, 0x06, 0x06, 0x20, 0x06, 0x07, 0x14, 0x26, 0x01, 0x1a, 0x07, 0x00, + 0x00, 0x09, 0x4e, 0xe1, 0x28, 0x11, 0x40, 0xec, 0x88, 0x1b, 0xfb, 0x30, + 0xd5, 0x30, 0xa9, 0x30, 0x14, 0xa2, 0x30, 0xdd, 0x28, 0x2d, 0xe1, 0x28, + 0x2d, 0xf3, 0x30, 0x28, 0xde, 0x5d, 0x04, 0xdf, 0xc6, 0x4d, 0x2f, 0xa9, + 0x63, 0x00, 0x6b, 0x31, 0x00, 0x6c, 0x4f, 0x31, 0x78, 0x1f, 0x2d, 0x00, + 0x56, 0x27, 0xa9, 0x15, 0x72, 0x00, 0x70, 0x27, 0xaf, 0x6d, 0x4f, 0xcd, + 0x72, 0x04, 0x6f, 0x4f, 0xc5, 0xb0, 0x7f, 0xb8, 0x1f, 0x2d, 0x00, 0x50, + 0x40, 0x7b, 0xe9, 0x2f, 0xcf, 0x55, 0x61, 0x2f, 0xcb, 0x69, 0x2f, 0xd5, + 0x20, 0x40, 0x09, 0x74, 0x40, 0x13, 0xdf, 0x30, 0x0f, 0x38, 0xcb, 0x65, + 0x0b, 0x40, 0xff, 0x70, 0xfd, 0x78, 0x1f, 0x70, 0xfd, 0x31, 0x77, 0xad, + 0x50, 0xfd, 0x61, 0x20, 0xfd, 0x41, 0x40, 0xfd, 0x31, 0x8b, 0x69, 0x41, + 0x9d, 0xea, 0x02, 0xf0, 0xfb, 0x00, 0x31, 0x7f, 0x00, 0xd0, 0x81, 0x4f, + 0x22, 0x2b, 0x63, 0x21, 0x8b, 0x64, 0xa8, 0x4e, 0xdf, 0x74, 0x2a, 0x53, + 0x6c, 0x02, 0xef, 0xe8, 0x85, 0x68, 0x4b, 0x00, 0x51, 0x26, 0x4f, 0x21, + 0x58, 0x2d, 0x00, 0x4d, 0x01, 0x52, 0xe2, 0x6c, 0xab, 0x83, 0x5e, 0x74, + 0x04, 0xf2, 0xf1, 0x81, 0xdf, 0xff, 0x54, 0xba, 0x74, 0xd0, 0x0c, 0xb8, + 0x58, 0x1b, 0x00, 0xec, 0xd3, 0xb4, 0xc5, 0xec, 0xd3, 0x54, 0xba, 0x3f, + 0x78, 0xb9, 0x05, 0x98, 0x25, 0x00, 0xb3, 0x7f, 0x33, 0x81, 0x73, 0x07, + 0x53, 0x83, 0x04, 0x1f, 0xd5, 0xb0, 0x01, 0x31, 0xff, 0xe2, 0xc1, 0xff, + 0x03, 0xb1, 0xfd, 0x00, 0x00, 0x1c, 0x04, 0x05, 0x35, 0x04, 0x3a, 0x04, + 0x3b, 0x20, 0x05, 0x3d, 0x88, 0x1d, 0x15, 0x2d, 0x00, 0x1f, 0x20, 0x15, + 0x40, 0x20, 0x19, 0x34, 0x20, 0x15, 0x56, 0x4f, 0x20, 0x01, 0x20, 0x20, + 0x11, 0x3e, 0x28, 0x3f, 0x30, 0x15, 0x30, 0xb8, 0x20, 0x29, 0x38, 0x20, + 0x15, 0x0c, 0x14, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x08, 0x09, 0x09, 0x98, + 0x30, 0x02, 0x08, 0x08, 0x20, 0x06, 0x20, 0x05, 0x08, 0x20, 0x26, 0x00, + 0x1e, 0x08, 0x00, 0x00, 0x0a, 0x4e, 0xcb, 0x30, 0x15, 0xfc, 0x30, 0xc0, + 0x20, 0x03, 0xb6, 0x28, 0x1f, 0xbb, 0x05, 0x28, 0x07, 0xa8, 0xff, 0xff, + 0x4c, 0x2f, 0xa9, 0x77, 0x47, 0xf7, 0x20, 0x00, 0x53, 0xa2, 0x2f, 0xbb, + 0x78, 0x2f, 0xb9, 0x6e, 0x00, 0x79, 0x05, 0x8f, 0xb7, 0x42, 0xaf, 0x2f, + 0xaf, 0x73, 0x20, 0x01, 0x65, 0x28, 0x8b, 0x50, 0x7f, 0x03, 0x36, 0xed, + 0x01, 0x9f, 0xf8, 0x6a, 0x4e, 0x48, 0x71, 0x36, 0xe7, 0x72, 0x20, 0x87, + 0x61, 0x29, 0x23, 0x68, 0xff, 0x40, 0x8d, 0x04, 0x59, 0x05, 0x00, 0x90, + 0xff, 0x37, 0xf7, 0x31, 0x7f, 0x31, 0x0b, 0x31, 0x81, 0x38, 0x09, 0xac, + 0x05, 0x71, 0x7f, 0x6a, 0x80, 0x7d, 0x6a, 0x05, 0xc0, 0x7b, 0x3f, 0xff, + 0x0b, 0x4e, 0x03, 0x28, 0x84, 0x4b, 0x51, 0xee, 0x68, 0x05, 0xf2, 0xf7, + 0x7f, 0xff, 0x00, 0xc8, 0xb2, 0x54, 0xb3, 0x91, 0xc7, 0x3c, 0xc1, 0xed, + 0x05, 0x98, 0x09, 0xf2, 0x7f, 0xb2, 0x7d, 0x6b, 0x05, 0xc2, 0x7b, 0x73, + 0x7f, 0x69, 0x23, 0xf5, 0x8a, 0x72, 0x7f, 0x78, 0x00, 0xf3, 0x05, 0xc2, + 0x01, 0x1d, 0x27, 0xe3, 0x36, 0xa3, 0x87, 0xfd, 0x21, 0x27, 0xf5, 0x3a, + 0x04, 0x41, 0x28, 0x03, 0x03, 0xb7, 0xfb, 0xc0, 0x08, 0xb4, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x09, 0x08, 0x02, 0x09, 0x04, 0x02, 0x08, 0x09, 0x09, + 0x09, 0x02, 0x38, 0x1f, 0x09, 0x09, 0x3d, 0x10, 0x25, 0xec, 0x06, 0x35, + 0x15, 0xce, 0x30, 0xeb, 0x30, 0x04, 0xc8, 0x30, 0xe9, 0x30, 0xa4, 0x28, + 0x13, 0xfb, 0x30, 0x04, 0xa6, 0x30, 0xa7, 0x30, 0xb9, 0x20, 0x0f, 0xd5, + 0x30, 0x55, 0xa1, 0x28, 0x2f, 0xec, 0x05, 0x28, 0x27, 0x4e, 0x4f, 0x17, + 0x74, 0x27, 0x0d, 0x16, 0x20, 0x00, 0x52, 0x27, 0x13, 0x69, 0x2f, 0x9b, + 0x37, 0xa3, 0x57, 0xaf, 0x2f, 0xc7, 0x73, 0x2f, 0x9b, 0x70, 0x27, 0x27, + 0x3e, 0x15, 0x04, 0x76, 0xa7, 0x30, 0x73, 0x75, 0xe9, 0x2f, 0xa9, 0x5f, + 0x15, 0x38, 0x1d, 0x64, 0x2f, 0xb3, 0x2d, 0x60, 0x97, 0x75, 0x64, 0x00, + 0x40, 0x89, 0x03, 0xb8, 0x39, 0x70, 0x67, 0x72, 0x28, 0x0f, 0x65, 0x40, + 0xfd, 0xb6, 0x90, 0xfb, 0x66, 0x4f, 0x0f, 0x04, 0xd8, 0x23, 0x52, 0x4f, + 0x79, 0x9f, 0x91, 0x53, 0xb7, 0x2f, 0xbf, 0x74, 0x2f, 0x89, 0x5f, 0x8f, + 0x72, 0x2f, 0xa7, 0x39, 0xa7, 0x50, 0x87, 0xfb, 0x3e, 0x45, 0xb0, 0x99, + 0x03, 0x38, 0x3b, 0xf0, 0x7f, 0x3e, 0x0b, 0x6c, 0x2e, 0x19, 0x72, 0x17, + 0xe0, 0xb2, 0x0b, 0x03, 0x90, 0x75, 0x9f, 0xff, 0x17, 0x53, 0xb1, 0x83, + 0x35, 0x00, 0x83, 0x2d, 0x00, 0x01, 0x5a, 0xaf, 0x65, 0x79, 0x04, 0x72, + 0xd5, 0x6c, 0x26, 0x4f, 0x05, 0xdb, 0x19, 0x78, 0xb1, 0x00, 0x74, 0xb9, + 0xb8, 0xd2, 0x7c, 0xb7, 0x78, 0xc7, 0x00, 0xa0, 0xbc, 0xa4, 0xc2, 0xb8, + 0xd2, 0x14, 0xd3, 0x3a, 0x0c, 0xb8, 0x05, 0xb8, 0x23, 0x33, 0x7f, 0x72, + 0xe9, 0x52, 0x2f, 0x95, 0x6a, 0xbd, 0x2f, 0x9b, 0x6c, 0x43, 0x0d, 0xb2, + 0xfb, 0x04, 0x92, 0x89, 0x52, 0x7f, 0xe2, 0xa1, 0xff, 0x6a, 0x6f, 0xe1, + 0xfd, 0x72, 0x73, 0x65, 0x23, 0x0f, 0xe1, 0x04, 0x04, 0x09, 0x21, 0x0a, + 0x04, 0x35, 0x04, 0x32, 0x20, 0x03, 0x40, 0x28, 0x1b, 0x4b, 0x2a, 0x04, + 0x39, 0x28, 0x1b, 0x20, 0x20, 0x11, 0x39, 0x28, 0x29, 0x2d, 0x20, 0x00, + 0x12, 0x20, 0x1b, 0x41, 0x04, 0x42, 0x04, 0x44, 0xb8, 0x28, 0x2d, 0x3b, + 0x04, 0x68, 0x27, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, 0x0a, + 0x0a, 0x14, 0x0a, 0x0b, 0x0b, 0x30, 0x04, 0x0e, 0x30, 0x0a, 0x0a, 0x70, + 0x25, 0x24, 0xd1, 0x2b, 0x0d, 0x0c, 0x4e, 0x58, 0x11, 0xe9, 0x28, 0x15, + 0x63, 0xc8, 0x28, 0x17, 0x38, 0x0f, 0xeb, 0x30, 0xc4, 0x05, 0x08, 0x0d, + 0xd7, 0x97, 0xd7, 0x58, 0x0b, 0x94, 0x8d, 0x50, 0x48, 0x09, 0x61, 0x28, + 0x2d, 0x38, 0x25, 0x30, 0x07, 0xfe, 0x04, 0x9f, 0xc3, 0x00, 0x18, 0x17, + 0x00, 0x10, 0x7d, 0x04, 0xf0, 0xff, 0x58, 0x0f, 0xb0, 0xff, 0x58, 0x11, + 0x7a, 0xef, 0x05, 0x41, 0x7f, 0xb8, 0x17, 0x00, 0x31, 0x7b, 0x6f, 0x06, + 0xc0, 0x7f, 0x36, 0x27, 0x04, 0xbf, 0xc9, 0x38, 0x15, 0x00, 0x70, 0x51, + 0x2d, 0x00, 0x6e, 0x66, 0xd5, 0x6c, 0x09, 0x14, 0x5c, 0x28, 0x83, 0x05, + 0xd8, 0x15, 0x00, 0x00, 0x38, 0x11, 0x27, 0x80, 0xb7, 0x38, 0x0f, 0x20, + 0xce, 0x05, 0xb8, 0x0f, 0x9b, 0x17, 0xf8, 0x0b, 0xbe, 0x53, 0x7d, 0x74, + 0x2b, 0x95, 0x05, 0x53, 0xff, 0xb8, 0x17, 0x06, 0x11, 0xff, 0x78, 0x05, + 0x3b, 0x8a, 0x27, 0xfb, 0x3d, 0x04, 0x34, 0x28, 0x0d, 0x1f, 0x68, 0x07, + 0x4c, 0x39, 0x04, 0x46, 0x04, 0x28, 0x07, 0x08, 0x34, 0xff, 0x10, 0x0e, + 0xb0, 0x7f, 0x0b, 0x0b, 0x38, 0x15, 0x80, 0x70, 0x04, 0x0b, 0x0b, 0x8e, + 0x23, 0xdf, 0x05, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0xb6, 0x30, 0xfc, 0x28, + 0x09, 0x58, 0x17, 0xd7, 0x05, 0xf5, 0x13, 0x3f, 0xff, 0x53, 0x2f, 0xa9, + 0x61, 0x2f, 0x99, 0x7c, 0xa3, 0x06, 0x30, 0x7f, 0x78, 0x72, 0x2f, 0xb1, + 0x04, 0x98, 0x79, 0x09, 0x10, 0xff, 0x0e, 0xb1, 0x7f, 0x28, 0x84, 0x14, + 0x61, 0x5c, 0x06, 0x32, 0xf7, 0x7f, 0xff, 0x90, 0xc7, 0x7c, 0xb9, 0x38, + 0x17, 0xd1, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x21, 0x28, 0x0f, 0x30, + 0x04, 0x40, 0x05, 0x28, 0x01, 0xca, 0x10, 0x00, 0x93, 0xff, 0x10, 0x06, + 0xb0, 0xff, 0x0c, 0x0c, 0x20, 0x01, 0x0e, 0x30, 0x05, 0x0b, 0x8a, 0x40, + 0x0a, 0x02, 0x23, 0xfa, 0x2b, 0x0d, 0x0e, 0x28, 0x17, 0xaf, 0x3a, 0x30, + 0xbb, 0x28, 0x15, 0x06, 0x75, 0x1b, 0x38, 0x17, 0x78, 0x2e, 0x93, 0x6e, + 0x3a, 0x00, 0x79, 0x06, 0xa0, 0x7f, 0x06, 0x78, 0x15, 0x59, 0x17, 0x63, + 0x2c, 0x33, 0x73, 0xde, 0x4f, 0xb7, 0x06, 0x59, 0x97, 0x73, 0x2e, 0x1b, + 0x31, 0x81, 0x3f, 0xb1, 0x06, 0x3a, 0x17, 0x6a, 0xc2, 0x06, 0x80, 0x7d, + 0x38, 0x17, 0x4b, 0x51, 0xee, 0x68, 0x06, 0x98, 0x19, 0x91, 0x1b, 0xc7, + 0x3c, 0xc1, 0x06, 0x78, 0x13, 0x7b, 0x97, 0x6b, 0x06, 0x82, 0x7d, 0x73, + 0xff, 0x60, 0xf3, 0x06, 0x81, 0xff, 0x38, 0x17, 0x3a, 0x04, 0x41, 0x04, + 0x3e, 0x03, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x08, 0x1f, 0x07, + 0x54, 0xff, 0x94, 0x10, 0x0e, 0x90, 0x7f, 0x0d, 0x0d, 0x20, 0x01, 0x0c, + 0x80, 0x04, 0x0d, 0x4a, 0x02, 0x24, 0xc4, 0x09, 0x00, 0x00, 0x0f, 0x88, + 0x17, 0xfb, 0x20, 0x30, 0xa2, 0x28, 0x1d, 0xcf, 0x30, 0xeb, 0x30, 0xc8, + 0xc5, 0x05, 0xc8, 0x23, 0xb8, 0x17, 0x2d, 0x00, 0x41, 0x2f, 0x33, 0x68, + 0x2f, 0xc1, 0x1f, 0x6c, 0x00, 0x74, 0x05, 0xe8, 0x17, 0x06, 0x30, 0x7b, + 0x00, 0x18, 0x17, 0x06, 0x11, 0x01, 0xf8, 0x17, 0xf0, 0x05, 0xf1, 0x83, + 0xd8, 0x17, 0x06, 0x12, 0x01, 0x58, 0x17, 0x2d, 0x00, 0x89, 0x5b, 0x0c, + 0xc8, 0x54, 0x79, 0x72, 0x06, 0x1b, 0x1d, 0x38, 0x17, 0x48, 0xc5, 0x0f, + 0x60, 0xd5, 0xb8, 0xd2, 0x06, 0x58, 0x1d, 0xb8, 0x17, 0x06, 0x93, 0x7f, + 0x78, 0x17, 0xc5, 0x06, 0x14, 0x01, 0xf8, 0x17, 0x2d, 0x00, 0x10, 0x28, + 0x21, 0x45, 0x28, 0x2d, 0x07, 0x3b, 0x04, 0x4c, 0x04, 0x42, 0x05, 0x08, + 0x27, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x28, 0x0e, 0x0e, 0x20, + 0x01, 0x0d, 0x80, 0x04, 0x0e, 0x11, 0x25, 0x00, 0x42, 0x08, 0x00, 0x00, + 0x10, 0x4e, 0xb7, 0x30, 0x00, 0xe5, 0x30, 0xec, 0x30, 0xb9, 0x30, 0xd3, + 0x30, 0x58, 0xd2, 0x28, 0x1b, 0xdb, 0x28, 0x17, 0x30, 0x11, 0xbf, 0x30, + 0xa4, 0xd4, 0x28, 0x2b, 0x05, 0x3d, 0x45, 0x53, 0x4f, 0x2d, 0x6c, 0x2f, + 0xb1, 0x73, 0x00, 0x55, 0x77, 0x2e, 0xb1, 0x67, 0x28, 0x1d, 0x48, 0x2e, + 0xbd, 0x6c, 0x2f, 0x41, 0x58, 0x74, 0x2f, 0xc7, 0x69, 0x04, 0xef, 0x45, + 0x10, 0x0e, 0xf0, 0x7f, 0xf3, 0x77, 0xd2, 0x02, 0x52, 0xcf, 0x82, 0xca, + 0x76, 0x3c, 0x28, 0x1b, 0x77, 0x00, 0x83, 0x14, 0x5c, 0xaf, 0x65, 0xf0, + 0x6c, 0xe0, 0x40, 0x56, 0x05, 0x9b, 0x19, 0x90, 0xc2, 0x08, 0xb8, 0xa4, + 0xc2, 0x00, 0x44, 0xbe, 0x88, 0xd7, 0x40, 0xd6, 0x88, 0xc2, 0x0b, 0xc0, + 0xd0, 0x78, 0xc7, 0x05, 0xd8, 0x1f, 0x53, 0x43, 0x7b, 0x73, 0x7d, 0x68, + 0x6a, 0x28, 0x23, 0x0d, 0xd3, 0x7f, 0x28, 0x27, 0xff, 0x35, 0x04, 0x37, + 0x2b, 0x04, 0x32, 0x28, 0x15, 0x33, 0x28, 0x15, 0x13, 0x28, 0x21, 0x38, + 0x11, 0x46, 0x48, 0x28, 0x13, 0x35, 0x04, 0x39, 0x28, 0x2d, 0x10, 0x1c, + 0xd4, 0xff, 0x0f, 0x50, 0x0f, 0x70, 0x01, 0x10, 0x40, 0x0a, 0xa0, 0x26, + 0x32, 0x07, 0x04, 0x00, 0x00, 0x11, 0x4e, 0xc6, 0x28, 0x17, 0xfc, 0x30, + 0x5a, 0xea, 0x28, 0x05, 0xb2, 0x05, 0x68, 0x09, 0xdf, 0xff, 0x54, 0x2f, + 0xa3, 0x75, 0x2d, 0x00, 0x72, 0x47, 0xff, 0x67, 0x4e, 0xb1, 0x06, 0xb0, + 0x7f, 0x65, 0x06, 0x0d, 0xb0, 0xbe, 0x30, 0xff, 0xfc, 0xa0, 0x7f, 0x04, + 0xd9, 0x05, 0x00, 0x31, 0x7f, 0x06, 0xb1, 0x7d, 0x07, 0x10, 0x7f, 0xfe, + 0x06, 0x56, 0x97, 0x67, 0x39, 0x68, 0x06, 0x12, 0xf7, 0x7f, 0xff, 0x80, + 0x06, 0xd2, 0xc1, 0xb9, 0x90, 0xac, 0x05, 0xd8, 0x0b, 0x08, 0x12, 0x7f, + 0xed, 0x82, 0x06, 0x82, 0x7f, 0x22, 0x04, 0x4e, 0x04, 0x40, 0x28, 0x13, + 0x3d, 0x8e, 0x28, 0x15, 0x38, 0x04, 0x4f, 0x04, 0xe8, 0x05, 0x08, 0xf4, + 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x10, 0x51, 0x10, 0x70, 0x01, 0x0f, 0x40, + 0x0a, 0x3f, 0x24, 0xd6, 0x28, 0x17, 0x80, 0x00, 0x1f, 0xff, 0x01, 0x03, + 0x04, 0x03, 0x06, 0x04, 0x01, 0x80, 0x30, 0x06, 0x03, 0x01, 0x01, 0x01, + 0x01, 0x02, 0x07, 0x04, 0x08, 0x07, 0x02, 0x08, 0x02, 0x30, 0x06, 0x07, + 0x02, 0x12, 0x02, 0x02, 0x02, 0x30, 0x14, 0x03, 0x01, 0x30, 0x1b, 0x02, + 0x80, 0x20, 0x05, 0x03, 0x03, 0x04, 0x02, 0x03, 0x02, 0x05, 0x20, 0x03, + 0x04, 0x20, 0x06, 0x01, 0x02, 0x04, 0x04, 0x04, 0x22, 0x04, 0x05, 0x20, + 0x01, 0x07, 0x05, 0x05, 0x30, 0x06, 0x04, 0x91, 0x20, 0x06, 0x05, 0x06, + 0x20, 0x01, 0x08, 0x06, 0x06, 0x30, 0x06, 0x48, 0x05, 0x20, 0x06, 0x06, + 0x07, 0x20, 0x01, 0x01, 0x07, 0x07, 0xa1, 0x30, 0x06, 0x06, 0x20, 0x06, + 0x07, 0x08, 0x09, 0x09, 0x30, 0x02, 0x38, 0x08, 0x08, 0x20, 0x06, 0x20, + 0x05, 0x20, 0x06, 0x02, 0x09, 0x04, 0x04, 0x02, 0x09, 0x09, 0x09, 0x02, + 0x30, 0x17, 0x09, 0x09, 0x02, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x30, + 0x04, 0x0e, 0xf0, 0x30, 0x0a, 0x20, 0x0b, 0x30, 0x0d, 0x70, 0x04, 0x0b, + 0x0b, 0x0c, 0x0c, 0xb3, 0x20, 0x01, 0x0e, 0x30, 0x05, 0x50, 0x0a, 0x0d, + 0x0d, 0x20, 0x01, 0x40, 0x05, 0x9f, 0x50, 0x0a, 0x0e, 0x0e, 0x20, 0x01, + 0x40, 0x05, 0x50, 0x0a, 0xf9, 0x1f, 0xf1, 0x17, 0x80, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, + 0x30, 0x01, 0x4f, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x01, 0x1b, 0xde, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x4f, 0xa2, 0x30, 0xc3, 0x30, 0xc6, 0x04, 0x30, 0xa3, 0x30, 0xab, + 0x30, 0x06, 0x58, 0x1f, 0x41, 0x00, 0x41, 0x74, 0x20, 0x01, 0x69, 0x00, + 0x63, 0x00, 0x61, 0x06, 0xc0, 0x7f, 0x05, 0x71, 0x00, 0x75, 0x00, 0x65, + 0x06, 0xa0, 0xff, 0x6b, 0x06, 0xe0, 0xff, 0xa0, 0x06, 0x71, 0x7f, 0xc1, + 0x06, 0xc1, 0xfd, 0x00, 0x00, 0x3f, 0x96, 0xd0, 0x01, 0x63, 0x61, 0x53, + 0x27, 0x59, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0x03, 0x44, 0xc5, 0xf0, 0xd2, + 0x74, 0xce, 0x06, 0x9b, 0x9b, 0x06, 0xf2, 0x7f, 0x88, 0x06, 0xf1, 0xff, + 0x10, 0x04, 0x42, 0x20, 0x01, 0x38, 0x04, 0x3a, 0x19, 0x04, 0x30, 0x04, + 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x01, 0xe0, 0x01, 0x80, + 0x48, 0x17, 0x03, 0x4f, 0x2d, 0x4e, 0x2e, 0x59, 0xae, 0x02, 0x30, 0xea, + 0x30, 0xb7, 0x30, 0xe3, 0x06, 0x48, 0x19, 0x43, 0xa8, 0x27, 0x8d, 0x6e, + 0x28, 0x1b, 0x72, 0x28, 0x17, 0x6c, 0x00, 0x20, 0x2b, 0x00, 0x47, 0x20, + 0x09, 0x65, 0x27, 0xa1, 0x63, 0x05, 0x67, 0xa5, 0x30, 0x6f, 0x5b, 0xe8, + 0x40, 0x6d, 0x2d, 0xe0, 0x8b, 0x05, 0x58, 0x25, 0x4d, 0x29, 0x13, 0x39, + 0x19, 0x55, 0x65, 0x20, 0xfd, 0x67, 0x21, 0x05, 0x69, 0x40, 0xfb, 0x68, + 0x41, 0x15, 0x46, 0x6c, 0x29, 0x2b, 0x6e, 0x00, 0x64, 0x05, 0x00, 0xff, + 0x31, 0x6d, 0x69, 0xb8, 0x29, 0x97, 0x20, 0x06, 0x21, 0x01, 0x00, 0xb0, + 0x7f, 0x05, 0x3f, 0xc9, 0x2d, 0x4e, 0x0c, 0x10, 0x5e, 0x4a, 0x81, 0x06, + 0x98, 0x17, 0x11, 0xc9, 0x80, 0xbd, 0x00, 0x20, 0x00, 0xf8, 0xad, 0xac, + 0xb9, 0xa4, 0xc2, 0xdb, 0x06, 0xf3, 0x7f, 0x33, 0x81, 0x2d, 0x43, 0x81, + 0x32, 0x85, 0x6b, 0x05, 0x42, 0x83, 0x33, 0xef, 0x41, 0xe9, 0x06, 0xa1, + 0xff, 0x26, 0x04, 0x35, 0x04, 0x3d, 0x28, 0x1b, 0x44, 0x40, 0x28, 0x17, + 0x3b, 0x04, 0x4c, 0x20, 0x0b, 0x30, 0x04, 0x04, 0x4f, 0x04, 0x20, 0x00, + 0x13, 0x20, 0x11, 0x35, 0x04, 0x5c, 0x46, 0x28, 0x31, 0x4f, 0x04, 0xc8, + 0x2f, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x02, 0x05, 0x06, + 0x05, 0x06, 0x06, 0x02, 0x20, 0x06, 0x0a, 0x20, 0x04, 0x00, 0x02, 0x02, + 0xa8, 0x1b, 0xf3, 0x0f, 0x00, 0x00, 0x40, 0x04, 0x48, 0x17, 0xde, 0x30, + 0xb1, 0x30, 0xc9, 0x30, 0x1b, 0xcb, 0x30, 0xa2, 0x06, 0x28, 0x19, 0xf8, + 0x17, 0x4d, 0x2f, 0x37, 0x38, 0x13, 0x1e, 0x64, 0x00, 0x6f, 0x28, 0x2f, + 0x36, 0xad, 0x04, 0xf7, 0x97, 0x30, 0x6f, 0xe9, 0xb5, 0x40, 0x6f, 0x69, + 0x28, 0xa1, 0x05, 0xf8, 0x1f, 0x5a, 0xc9, 0x17, 0x6d, 0x2f, 0xb5, 0xff, + 0x35, 0x8f, 0x70, 0xfd, 0x39, 0x33, 0x05, 0x30, 0xff, 0xb1, 0x6f, 0x05, + 0xd8, 0x1d, 0x01, 0x10, 0x7f, 0x04, 0xf8, 0x17, 0x03, 0x6c, 0x9a, 0x76, + 0x51, 0x7f, 0x98, 0x06, 0x78, 0x19, 0x58, 0x17, 0x00, 0xc8, 0xb9, 0x00, + 0xcf, 0xc4, 0xb3, 0xc8, 0xb2, 0x35, 0x44, 0xc5, 0x07, 0x18, 0x17, 0xf3, + 0x81, 0xeb, 0x05, 0x62, 0x7f, 0xf3, 0x06, 0x41, 0xff, 0xa8, 0x00, 0x78, + 0x17, 0x1c, 0x28, 0x27, 0x3a, 0x28, 0x33, 0x34, 0x04, 0x3e, 0xf0, 0x28, + 0x37, 0x04, 0x98, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, + 0x03, 0x09, 0x0d, 0x14, 0x09, 0x09, 0x03, 0x20, 0x06, 0x0b, 0x20, 0x04, + 0x03, 0x03, 0x00, 0xe2, 0x1c, 0x55, 0x10, 0x00, 0x00, 0x05, 0x4f, 0x07, + 0xaf, 0x30, 0xec, 0x30, 0xbf, 0x06, 0x28, 0x0f, 0x9c, 0xaf, 0x3e, 0xaf, + 0xd7, 0x3f, 0x2f, 0x06, 0x90, 0x7f, 0xe8, 0x06, 0xa0, 0x7f, 0x4b, 0x60, + 0xff, 0x04, 0xf8, 0xff, 0x00, 0xf1, 0x7f, 0x81, 0x0e, 0x70, 0x7f, 0x4b, + 0x51, 0xcc, 0x91, 0x79, 0x72, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x6c, + 0xd0, 0x08, 0xb8, 0xc0, 0xd0, 0xd7, 0x06, 0x93, 0x7f, 0x0e, 0xf2, 0x7f, + 0x1a, 0x28, 0x11, 0x38, 0x28, 0x17, 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0xb0, + 0x7f, 0x00, 0x04, 0x04, 0x02, 0x04, 0x02, 0x02, 0x04, 0x04, 0x04, 0x06, + 0x02, 0x06, 0x04, 0x04, 0x20, 0x01, 0x20, 0x19, 0x00, 0xdf, 0x11, 0x00, + 0x00, 0x06, 0x4f, 0x71, 0x67, 0x00, 0xde, 0x30, 0xb1, 0x30, 0xc9, 0x30, + 0xcb, 0x30, 0x00, 0xa2, 0x30, 0xfb, 0x30, 0xc8, 0x30, 0xe9, 0x30, 0x6b, + 0xad, 0x20, 0x09, 0x05, 0x9d, 0x39, 0x45, 0x2f, 0xaf, 0x73, 0x2f, 0x9b, + 0x00, 0x3b, 0x29, 0x50, 0x20, 0x2f, 0xcb, 0x6e, 0x2f, 0xc9, 0x20, 0x00, + 0x54, 0x00, 0x75, 0x68, 0x4f, 0xbd, 0x3e, 0xd9, 0x04, 0x3f, 0x2f, 0xe9, + 0x4f, 0xa1, 0x69, 0x2f, 0xb9, 0x5e, 0x65, 0x2d, 0x31, 0x4f, 0x2f, 0xbd, + 0x5f, 0xab, 0x37, 0xaf, 0x3f, 0x31, 0x2d, 0xaa, 0x48, 0xbb, 0x2d, 0x04, + 0x20, 0x87, 0x4f, 0x40, 0xfd, 0x6d, 0x2f, 0xb5, 0x6b, 0xc5, 0xaf, 0xb5, + 0x3f, 0xaf, 0x20, 0x00, 0x75, 0xe0, 0xfd, 0x6b, 0x60, 0x95, 0xd7, 0x04, + 0xff, 0xaf, 0x00, 0x10, 0xff, 0x20, 0x40, 0x03, 0x54, 0x61, 0x83, 0x03, + 0xbc, 0xc5, 0x01, 0x30, 0x7f, 0x10, 0x20, 0x00, 0x79, 0x04, 0x60, 0x7d, + 0x00, 0x00, 0x1c, 0x4e, 0x00, 0x6c, 0x9a, 0x76, 0x51, 0x7f, 0x98, 0x8c, + 0x54, 0x02, 0x72, 0x82, 0xf7, 0x96, 0xaf, 0x65, 0x05, 0xf8, 0x21, 0xd9, + 0x00, 0xb3, 0x80, 0xbd, 0x20, 0x00, 0xc8, 0xb9, 0x00, 0x00, 0xcf, 0xc4, + 0xb3, 0xc8, 0xb2, 0x44, 0xc5, 0xb8, 0x01, 0xd2, 0x7c, 0xb7, 0xa4, 0xd0, + 0x44, 0xc5, 0x05, 0x7b, 0xa9, 0x6b, 0x4f, 0x2e, 0x97, 0x33, 0x7f, 0x2d, + 0x00, 0x0e, 0xa9, 0xeb, 0x41, 0xf5, 0x32, 0x87, 0xf6, 0x93, 0x7d, 0x30, + 0x15, 0x04, 0x33, 0x7f, 0x3f, 0x1f, 0xf3, 0x00, 0xa1, 0xff, 0x72, 0x7d, + 0xe1, 0x82, 0x04, 0x01, 0xff, 0x12, 0x04, 0x3e, 0x04, 0x41, 0x28, 0x17, + 0x3e, 0x00, 0x04, 0x47, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x4f, 0x08, 0x04, + 0x20, 0x00, 0x1c, 0x20, 0x07, 0x3a, 0x04, 0x35, 0x2d, 0x04, 0x34, 0x20, + 0x1b, 0x3d, 0x28, 0x35, 0x30, 0x13, 0x38, 0x20, 0x17, 0x7c, 0x24, 0x28, + 0x43, 0x30, 0x19, 0x30, 0x11, 0x0b, 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x05, 0x05, 0x00, 0x0b, 0x07, 0x0b, 0x0b, 0x05, 0x05, 0x08, 0x0b, 0x10, + 0x02, 0x05, 0x05, 0x20, 0x01, 0x3e, 0x1d, 0x13, 0x12, 0x00, 0x00, 0x00, + 0x07, 0x4f, 0xa4, 0x30, 0xd4, 0x30, 0x1a, 0xed, 0x30, 0xb9, 0x05, 0xa8, + 0x09, 0xf8, 0x17, 0x70, 0x28, 0x03, 0x72, 0xaf, 0x27, 0x03, 0x73, 0x06, + 0x4f, 0xb1, 0xc9, 0x60, 0x7f, 0x06, 0x7b, 0xaf, 0x06, 0xf0, 0xff, 0x71, + 0x7f, 0x60, 0x6f, 0x06, 0xe1, 0xff, 0x06, 0x70, 0x7f, 0x0a, 0x4f, 0x87, + 0x5e, 0x81, 0x60, 0x9c, 0x06, 0x18, 0x0f, 0x7f, 0xff, 0xd0, 0xc5, 0x3c, + 0xd5, 0xe8, 0x18, 0xb8, 0xa4, 0xc2, 0x0e, 0x73, 0x7f, 0x06, 0xf2, 0x7f, + 0x2d, 0x04, 0x3f, 0xb8, 0x27, 0xf9, 0x40, 0x03, 0x87, 0xe7, 0x0a, 0x73, + 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x06, 0x06, 0x05, 0x80, 0x28, 0x10, 0x06, + 0x06, 0x04, 0x05, 0x0c, 0x06, 0x06, 0x80, 0x20, 0x01, 0x32, 0x1c, 0xd3, + 0x0e, 0x00, 0x00, 0x08, 0x82, 0x28, 0x17, 0xaa, 0x30, 0xcb, 0x30, 0xa2, + 0x06, 0x88, 0x17, 0x49, 0xd6, 0x8e, 0xa7, 0x3f, 0x21, 0x49, 0x2f, 0x3d, + 0x6c, 0x6b, 0x25, 0x05, 0x58, 0x27, 0xce, 0xb6, 0x4f, 0x0f, 0x73, 0x40, + 0x7b, 0x9f, 0xab, 0x6e, 0x40, 0x13, 0x05, 0xb0, 0xff, 0x73, 0xaa, 0x2f, + 0xb5, 0x68, 0x4f, 0x99, 0x49, 0x2f, 0xb7, 0x73, 0x2f, 0xc1, 0x6c, 0xdf, + 0x2f, 0xbf, 0x05, 0x31, 0x7f, 0x73, 0x2f, 0xa9, 0x31, 0x03, 0xb1, 0x01, + 0x05, 0xb1, 0xff, 0x51, 0xf1, 0xac, 0x31, 0x81, 0x4a, 0x6e, 0x33, 0x63, + 0x4d, 0x43, 0x05, 0x5f, 0xb5, 0x31, 0x72, 0x00, 0x65, 0x59, 0x3c, 0x5c, + 0x9a, 0x4e, 0xa4, 0x7f, 0x20, 0x9b, 0x5c, 0x06, 0x38, 0x1b, 0x74, 0xc7, + 0x24, 0xc6, 0xc8, 0x11, 0xb2, 0x44, 0xc5, 0x2e, 0xa5, 0xc8, 0xc4, 0xb3, + 0x06, 0x93, 0x7f, 0xbd, 0x92, 0x7f, 0x45, 0x2f, 0xb5, 0x73, 0x83, 0x3f, + 0xb3, 0x04, 0xf3, 0xff, 0x6c, 0x2f, 0x0b, 0x82, 0x06, 0x91, 0xff, 0x18, + 0x04, 0x3e, 0x04, 0x3d, 0x28, 0x19, 0x47, 0x02, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x3a, 0x28, 0x23, 0x35, 0x0a, 0x04, 0x20, 0x00, 0x3e, 0x20, 0x0b, + 0x42, 0x28, 0x2d, 0x3e, 0x0e, 0x04, 0x32, 0x04, 0x30, 0x04, 0xc8, 0x33, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x07, 0x00, 0x07, 0x08, 0x03, + 0x08, 0x08, 0x07, 0x07, 0x05, 0x08, 0x08, 0x05, 0x07, 0x07, 0x20, 0x01, + 0x2c, 0x1c, 0x29, 0x80, 0x28, 0x17, 0x09, 0x4f, 0x17, 0x53, 0xa8, 0x30, + 0xfc, 0x28, 0x30, 0xb2, 0x06, 0x88, 0x17, 0x4e, 0x2e, 0xa9, 0x72, 0x00, + 0x74, 0x8b, 0x27, 0x13, 0x20, 0x00, 0x41, 0x2f, 0xb5, 0x67, 0x2f, 0xb9, + 0x38, 0x23, 0xa8, 0x05, 0x7f, 0xbe, 0xc9, 0x20, 0x71, 0xe9, 0x28, 0x19, + 0x2d, 0x00, 0x53, 0xb5, 0x28, 0x1f, 0x70, 0x20, 0x89, 0x38, 0x17, 0x74, + 0x2f, 0xc1, 0x69, 0x48, 0xb1, 0x6b, 0x61, 0x48, 0x37, 0x04, 0xb0, 0xff, + 0xf6, 0x2f, 0xad, 0x64, 0x29, 0x0d, 0x37, 0x0f, 0xae, 0x58, 0x19, 0xc4, + 0x21, 0x05, 0xe4, 0x48, 0x2b, 0x05, 0x3f, 0xaf, 0x31, 0x71, 0x6f, 0xde, + 0x29, 0x93, 0x30, 0xff, 0x74, 0x06, 0x00, 0xff, 0xd0, 0x7f, 0x00, 0x51, + 0x7f, 0x04, 0xbf, 0xc7, 0x17, 0x01, 0x53, 0x31, 0x72, 0x34, 0x74, 0x77, + 0x6d, 0x06, 0x38, 0x13, 0x80, 0x3f, 0xff, 0x81, 0xbd, 0x80, 0xbd, 0x20, + 0x00, 0xd0, 0x1b, 0xc5, 0x8c, 0xac, 0x06, 0x93, 0x7f, 0x33, 0x81, 0x64, + 0x23, 0x01, 0x52, 0x0b, 0x6c, 0xef, 0x05, 0xc8, 0x23, 0x52, 0x7f, 0x75, + 0x82, 0x7f, 0x05, 0xd1, 0xfd, 0x00, 0x00, 0x55, 0x21, 0x28, 0x0f, 0x32, + 0x28, 0x13, 0x40, 0x28, 0x1d, 0x4b, 0x48, 0x13, 0x17, 0x2d, 0x04, 0x33, + 0x28, 0x23, 0x39, 0x05, 0x68, 0x25, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x03, 0x08, 0x08, 0x04, 0x06, 0x04, 0x04, 0x28, 0x19, 0x20, 0x03, + 0x80, 0x30, 0x01, 0xce, 0x1b, 0xe1, 0x12, 0x00, 0x00, 0x0a, 0x00, 0x4f, + 0xda, 0x30, 0xed, 0x30, 0xdd, 0x30, 0xcd, 0x0a, 0x30, 0xbd, 0x30, 0xb9, + 0x06, 0x48, 0x1b, 0x50, 0x4f, 0x19, 0x6f, 0xf6, 0x27, 0x91, 0x3f, 0xad, + 0x5f, 0xa7, 0x05, 0xbe, 0xaf, 0x50, 0x28, 0x15, 0xb0, 0x7f, 0xe8, 0xec, + 0x06, 0x00, 0x7f, 0x00, 0x10, 0xff, 0x06, 0xf1, 0x7f, 0x6f, 0x06, 0x81, + 0xff, 0x05, 0xf0, 0x7d, 0x00, 0x00, 0x00, 0x2f, 0x4f, 0x57, 0x7f, 0x54, + 0x59, 0x3c, 0x5c, 0x20, 0x92, 0x64, 0x06, 0x58, 0x19, 0xa0, 0xd3, 0x5c, + 0xb8, 0xf0, 0x01, 0xd3, 0x24, 0xb1, 0x8c, 0xc1, 0xa4, 0xc2, 0x07, 0x73, + 0x7f, 0x6a, 0x6f, 0x05, 0xa2, 0x83, 0x06, 0xf1, 0xff, 0x1f, 0x28, 0x17, + 0x3b, 0x27, 0xf1, 0x3f, 0xae, 0x27, 0xf5, 0x3d, 0x28, 0x1b, 0x35, 0x28, + 0x0f, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x09, 0x02, 0x09, 0x0c, + 0x08, 0x0c, 0x0c, 0x09, 0x20, 0x06, 0x07, 0x80, 0x20, 0x04, 0x09, 0x09, + 0xab, 0x1a, 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x0b, 0x4f, 0x57, 0x53, 0xa8, + 0x30, 0xfc, 0x35, 0x30, 0xb2, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x53, 0x2f, + 0x95, 0x75, 0x06, 0xab, 0x2f, 0x51, 0xc9, 0x2f, 0x9b, 0xe9, 0x2f, 0xa5, + 0x2d, 0x00, 0x4d, 0x28, 0x21, 0xb5, 0x3f, 0x25, 0x64, 0x05, 0x6f, 0x29, + 0x70, 0xff, 0xfc, 0x2d, 0xab, 0x6c, 0x2f, 0x9d, 0xae, 0x7d, 0xa3, 0xc4, + 0x2f, 0xc1, 0xe4, 0x2f, 0xad, 0x05, 0x58, 0x1f, 0x9f, 0xaf, 0x4d, 0xf0, + 0x2f, 0xb7, 0x06, 0x10, 0xff, 0x00, 0xd0, 0x7f, 0x05, 0x1f, 0xc1, 0x57, + 0x53, 0x31, 0x72, 0x08, 0x34, 0x74, 0x77, 0x6d, 0x06, 0x58, 0x15, 0x00, + 0x00, 0xa8, 0x00, 0xb0, 0x80, 0xbd, 0x20, 0x00, 0xd0, 0xc5, 0x8c, 0x5a, + 0xac, 0x06, 0x53, 0x81, 0x5a, 0x2f, 0xab, 0x32, 0xf3, 0x2d, 0x6f, 0xb9, + 0xef, 0xd5, 0x2b, 0x97, 0x72, 0x89, 0x45, 0x2f, 0xb5, 0x6c, 0x4e, 0xbd, + 0x64, 0x4f, 0xc7, 0xa2, 0x04, 0x92, 0x7f, 0x75, 0x06, 0x81, 0xff, 0x2e, + 0x04, 0x36, 0x28, 0x0f, 0x4b, 0x82, 0x28, 0x1d, 0x20, 0x00, 0x2d, 0x04, + 0x33, 0x28, 0x25, 0x39, 0x8a, 0x28, 0x19, 0x3a, 0x04, 0x38, 0x40, 0x11, + 0x3e, 0x28, 0x25, 0x42, 0x23, 0x04, 0x40, 0x28, 0x37, 0x32, 0x04, 0x30, + 0x04, 0x48, 0x2f, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, + 0x0a, 0x03, 0x09, 0x03, 0x03, 0x0a, 0x02, 0x0a, 0x0d, 0x03, 0x0d, 0x0a, + 0x0a, 0x20, 0x01, 0xe9, 0x00, 0x19, 0x11, 0x14, 0x00, 0x00, 0x0c, 0x4f, + 0xc6, 0x02, 0x30, 0xc3, 0x30, 0xb5, 0x30, 0xea, 0x28, 0x1b, 0xa2, 0xad, + 0x06, 0x48, 0x1b, 0x54, 0x47, 0x0d, 0x73, 0x2f, 0xa5, 0x37, 0x87, 0x79, + 0x06, 0xe0, 0x7f, 0x7d, 0x69, 0x05, 0xcb, 0xab, 0x00, 0x50, 0x7f, 0x05, + 0x99, 0x13, 0x51, 0x7f, 0x71, 0x7d, 0x67, 0x48, 0x9d, 0x7c, 0x61, 0x06, + 0x01, 0xff, 0x3e, 0xa1, 0x51, 0x7b, 0x05, 0xf0, 0x7b, 0x3f, 0xff, 0x72, + 0x82, 0x08, 0x28, 0x84, 0x29, 0x52, 0x06, 0x78, 0x15, 0x00, 0x00, 0x4c, + 0x01, 0xd1, 0xb4, 0xc0, 0xac, 0xb9, 0x44, 0xc5, 0x06, 0x7b, 0x97, 0xa2, + 0xf2, 0xff, 0xeb, 0x06, 0x41, 0xff, 0x73, 0x00, 0xe1, 0x06, 0x62, 0x01, + 0x24, 0xa2, 0x28, 0x11, 0x41, 0x28, 0x09, 0x30, 0x04, 0x3b, 0x28, 0x0b, + 0x4f, 0xe0, 0x04, 0x47, 0xfb, 0x09, 0x94, 0xff, 0x10, 0x0e, 0x10, 0x7f, + 0x0b, 0x0b, 0x0d, 0x0a, 0x0d, 0x00, 0x0d, 0x0b, 0x0b, 0x0a, 0x0d, 0x09, + 0x0b, 0x0b, 0x80, 0x20, 0x01, 0x2f, 0x1c, 0xf1, 0x0f, 0x00, 0x00, 0x0d, + 0x08, 0x4f, 0x7f, 0x89, 0xae, 0x28, 0x15, 0xb7, 0x30, 0xe3, 0xea, 0x06, + 0x48, 0x15, 0x2d, 0xaf, 0x48, 0x15, 0x74, 0x2f, 0x27, 0x47, 0x2f, 0xad, + 0x65, 0xb4, 0x2f, 0xb9, 0x63, 0x05, 0xc7, 0x9b, 0x30, 0x75, 0xe8, 0x40, + 0x73, 0x2d, 0x00, 0x5b, 0x4f, 0x2f, 0xb3, 0x63, 0x4f, 0x31, 0x3d, 0x1d, + 0x74, 0x05, 0x4f, 0x31, 0x70, 0xff, 0x77, 0x67, 0x4f, 0xab, 0x30, 0xfd, + 0x3d, 0xab, 0x6e, 0x8d, 0xa7, 0x05, 0x30, 0xff, 0x31, 0x73, 0xb8, 0x38, + 0x11, 0x20, 0x06, 0x21, 0x01, 0x01, 0x10, 0x7f, 0x04, 0xdf, 0xc5, 0x7f, + 0x89, 0x0c, 0x10, 0x5e, 0x4a, 0x81, 0x06, 0x98, 0x17, 0x1c, 0xc1, 0x80, + 0xbd, 0x00, 0x20, 0x00, 0xf8, 0xad, 0xac, 0xb9, 0xa4, 0xc2, 0xb5, 0x06, + 0xb3, 0x7f, 0x2d, 0x43, 0x7f, 0x3b, 0x17, 0x6b, 0x06, 0x02, 0x7f, 0xe9, + 0xc2, 0x7f, 0x8a, 0x05, 0xb1, 0xfd, 0x00, 0x00, 0x17, 0x28, 0x11, 0x3f, + 0x28, 0x15, 0x34, 0x20, 0x04, 0x3d, 0x28, 0x1b, 0x4f, 0x04, 0x20, 0x00, + 0x13, 0x2e, 0x04, 0x40, 0x28, 0x2b, 0x46, 0x05, 0x68, 0x25, 0x06, 0xf4, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0x00, 0x0c, 0x07, 0x0b, 0x07, 0x07, + 0x0c, 0x0c, 0x0b, 0x08, 0x07, 0x03, 0x0c, 0x0c, 0x20, 0x01, 0x30, 0x1b, + 0x75, 0xa0, 0x28, 0x17, 0x0e, 0x28, 0x17, 0xde, 0x30, 0xb1, 0x30, 0xc9, + 0x0d, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x48, 0x19, 0x98, 0x17, 0x4d, 0x2f, + 0xb1, 0x8e, 0x38, 0x13, 0x64, 0x00, 0x6f, 0x2f, 0x33, 0x05, 0x7e, 0xb9, + 0x50, 0x75, 0xe9, 0xbb, 0x40, 0x75, 0x69, 0x2f, 0xab, 0x05, 0xf8, 0x1f, + 0x79, 0x17, 0x6d, 0x2f, 0xb1, 0x35, 0x91, 0xfe, 0x70, 0xfd, 0x38, 0x99, + 0x05, 0x90, 0xff, 0xb1, 0x75, 0x05, 0xd8, 0x1d, 0x01, 0x70, 0x7f, 0x04, + 0x98, 0x17, 0x6c, 0x06, 0x9a, 0x76, 0x51, 0x7f, 0x98, 0x06, 0x78, 0x19, + 0x58, 0x17, 0xc8, 0x00, 0xb9, 0x00, 0xcf, 0xc4, 0xb3, 0xc8, 0xb2, 0x44, + 0x6b, 0xc5, 0x06, 0x98, 0x17, 0xf3, 0x7f, 0xeb, 0x05, 0xe2, 0x7f, 0xf3, + 0xc2, 0x7f, 0x05, 0x7a, 0x1b, 0xa8, 0x00, 0x18, 0x17, 0x1c, 0x28, 0x29, + 0x3a, 0x28, 0x19, 0x34, 0x04, 0x3e, 0xf0, 0x28, 0x2b, 0x04, 0xf8, 0x1d, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x0d, 0x0a, 0x0c, 0x00, + 0x0a, 0x0a, 0x0d, 0x0d, 0x0c, 0x0a, 0x04, 0x0d, 0x46, 0x0d, 0x20, 0x01, + 0xaa, 0x1c, 0x80, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x40, 0x01, 0xd0, + 0x01, 0x02, 0x02, 0x06, 0x05, 0x06, 0x06, 0x50, 0x02, 0x20, 0x06, 0x0a, + 0x20, 0x04, 0x02, 0x02, 0x03, 0x03, 0x05, 0x09, 0x0d, 0x09, 0x09, 0x03, + 0x20, 0x06, 0x0b, 0x20, 0x04, 0x00, 0x03, 0x03, 0x04, 0x04, 0x02, 0x04, + 0x02, 0x02, 0x01, 0x04, 0x04, 0x06, 0x02, 0x06, 0x04, 0x04, 0x20, 0x01, + 0x00, 0x05, 0x05, 0x0b, 0x07, 0x0b, 0x0b, 0x05, 0x05, 0x04, 0x08, 0x0b, + 0x02, 0x05, 0x05, 0x20, 0x01, 0x06, 0x06, 0x40, 0x05, 0x20, 0x08, 0x06, + 0x06, 0x04, 0x05, 0x0c, 0x06, 0x40, 0x06, 0x20, 0x01, 0x07, 0x07, 0x08, + 0x03, 0x08, 0x08, 0x01, 0x07, 0x07, 0x05, 0x08, 0x05, 0x07, 0x07, 0x20, + 0x01, 0x1e, 0x08, 0x08, 0x04, 0x20, 0x38, 0x20, 0x11, 0x20, 0x03, 0x30, + 0x01, 0x09, 0x02, 0x09, 0x0c, 0x08, 0x0c, 0x0c, 0x09, 0x20, 0x06, 0x07, + 0x83, 0x20, 0x04, 0x09, 0x09, 0x0a, 0x0a, 0x03, 0x20, 0x6d, 0x20, 0xb9, + 0x08, 0x03, 0x0d, 0x0a, 0x0a, 0x20, 0x01, 0x0b, 0x0b, 0x0d, 0x80, 0x20, + 0xc5, 0x0b, 0x0b, 0x0a, 0x0d, 0x09, 0x0b, 0x0b, 0xf0, 0x20, 0x01, 0xf8, + 0xef, 0xf0, 0xe7, 0x3f, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, + 0x30, 0x01, 0x50, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xc5, 0x21, 0x91, 0x0d, 0x00, 0x00, 0x00, + 0x02, 0x50, 0xd6, 0x30, 0xc0, 0x30, 0xda, 0x04, 0x30, 0xb9, 0x30, 0xc8, + 0x30, 0x06, 0x58, 0x1f, 0x42, 0x00, 0x00, 0x75, 0x00, 0x64, 0x00, 0x61, + 0x00, 0x70, 0x00, 0x04, 0x65, 0x00, 0x73, 0x00, 0x74, 0x10, 0x16, 0x00, + 0x7f, 0x03, 0x5e, 0x00, 0xbe, 0x8f, 0x69, 0x4f, 0xaf, 0x65, 0x02, 0x5e, + 0x80, 0x06, 0x5b, 0x1f, 0x80, 0xbd, 0xe4, 0xb2, 0x98, 0xd3, 0xa4, 0x17, + 0xc2, 0xb8, 0xd2, 0x06, 0x73, 0x7f, 0x6f, 0x23, 0x79, 0x06, 0x93, 0x81, + 0xf3, 0xff, 0x40, 0x65, 0x05, 0xec, 0xa6, 0x11, 0x04, 0x43, 0x04, 0x34, + 0x04, 0x00, 0x30, 0x04, 0x3f, 0x04, 0x35, 0x04, 0x48, 0x04, 0x22, 0x42, + 0x04, 0x10, 0x1d, 0xf4, 0xff, 0x01, 0x05, 0x05, 0x20, 0x01, 0x01, 0x24, + 0x01, 0x04, 0x40, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x50, 0x00, 0xd0, + 0x30, 0xfc, 0x30, 0xc1, 0x30, 0xfb, 0x30, 0x00, 0xad, 0x30, 0xb7, 0x30, + 0xe5, 0x30, 0xaf, 0x30, 0x08, 0xf3, 0x30, 0xde, 0x5d, 0x05, 0xd8, 0x17, + 0xe1, 0x00, 0x63, 0x82, 0x28, 0x11, 0x2d, 0x00, 0x4b, 0x00, 0x69, 0x28, + 0x19, 0x6b, 0x83, 0x28, 0x27, 0x6e, 0x00, 0x20, 0x00, 0x43, 0x24, 0xaf, + 0x30, 0x09, 0x1c, 0x74, 0x00, 0x79, 0x06, 0x20, 0x7f, 0x06, 0xf0, 0xff, + 0x10, 0x05, 0x90, 0x7f, 0xf4, 0x5d, 0x00, 0x47, 0x59, 0x2d, 0x00, 0xfa, + 0x57, 0xc0, 0x4e, 0x30, 0x54, 0x5b, 0x05, 0xd2, 0xf9, 0x6f, 0xaf, 0xbc, + 0x58, 0xce, 0xa4, 0x00, 0xd0, 0x88, 0xc2, 0xe4, 0xcf, 0x20, 0x00, 0xfc, + 0x62, 0xc8, 0x06, 0x3b, 0x97, 0x08, 0x32, 0xff, 0x20, 0x00, 0x28, 0x24, + 0x15, 0x6f, 0xd4, 0x24, 0x09, 0x3c, 0x33, 0x64, 0x28, 0xbb, 0x29, 0x04, + 0x88, 0x17, 0x30, 0x04, 0x01, 0x47, 0x04, 0x2d, 0x00, 0x1a, 0x04, 0x38, + 0x28, 0x17, 0x5d, 0x3a, 0x28, 0x25, 0x3d, 0x05, 0xc8, 0x1b, 0x08, 0x54, + 0xff, 0x10, 0x0d, 0x90, 0x7f, 0x02, 0x38, 0x0c, 0x28, 0x01, 0x02, 0x20, + 0x06, 0x02, 0x20, 0x05, 0x02, 0x02, 0x5a, 0x02, 0x21, 0x00, 0x0e, 0x00, + 0x00, 0x04, 0x28, 0x17, 0xe9, 0x0c, 0x30, 0xcb, 0x30, 0xe3, 0x05, 0xe8, + 0x0d, 0xbf, 0xaf, 0x61, 0x00, 0x57, 0x72, 0x2f, 0xaf, 0x6e, 0x27, 0xff, + 0x61, 0x05, 0xa8, 0x0f, 0x00, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x80, 0x10, + 0x06, 0x10, 0x7f, 0xf4, 0x5d, 0x70, 0x51, 0x3c, 0x5c, 0x9a, 0x40, 0x4e, + 0x06, 0x72, 0xff, 0x84, 0xbc, 0xec, 0xb7, 0x40, 0xb1, 0xf4, 0x06, 0x58, + 0x13, 0x08, 0x12, 0xff, 0x05, 0x98, 0x0f, 0xb8, 0x17, 0x40, 0x28, 0x1b, + 0x3d, 0x04, 0x1d, 0x4c, 0x04, 0x4f, 0x05, 0xc8, 0x11, 0x08, 0x34, 0xff, + 0x10, 0x0e, 0x10, 0x7f, 0x03, 0x38, 0x0c, 0x28, 0x02, 0x03, 0x20, 0x06, + 0x01, 0x20, 0x05, 0x03, 0x03, 0xc3, 0x00, 0x20, 0xf4, 0x0c, 0x00, 0x00, + 0x05, 0x50, 0xd9, 0x08, 0x30, 0xfc, 0x30, 0xb1, 0x20, 0x03, 0xb7, 0x30, + 0xe5, 0x8b, 0x06, 0x48, 0x1b, 0x42, 0x00, 0xe9, 0x2f, 0xa3, 0xe9, 0x2f, + 0xb1, 0x06, 0x18, 0x13, 0xe0, 0xd0, 0x7f, 0x06, 0x79, 0x17, 0x10, 0x06, + 0xd0, 0x7f, 0x1d, 0x8d, 0xef, 0x51, 0xc0, 0x80, 0x06, 0x88, 0x15, 0x00, + 0x00, 0xa0, 0xbc, 0x00, 0xcf, 0xdc, 0x78, 0xc2, 0x06, 0xb8, 0x17, 0x07, + 0x72, 0xff, 0x06, 0x18, 0x13, 0x58, 0x17, 0x35, 0x04, 0x3a, 0xba, 0x20, + 0x03, 0x48, 0x06, 0x28, 0x13, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x50, 0x7f, + 0x04, 0x38, 0x0c, 0x03, 0x40, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, + 0x30, 0x21, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x06, 0x50, 0xdc, 0x30, 0x40, + 0xeb, 0x28, 0x13, 0xe7, 0x30, 0xc9, 0x30, 0xfb, 0x30, 0x05, 0xa2, 0x30, + 0xd0, 0x30, 0xa6, 0x28, 0x27, 0xa4, 0x20, 0x0b, 0x01, 0xbc, 0x30, 0xf3, + 0x30, 0xd7, 0x30, 0xec, 0x28, 0x35, 0x55, 0xf3, 0x04, 0xc8, 0x2f, 0x42, + 0x2c, 0x1d, 0x72, 0x28, 0x15, 0x6f, 0x2c, 0x21, 0x04, 0x2d, 0x00, 0x41, + 0x00, 0x62, 0x2f, 0xbf, 0xfa, 0x00, 0x40, 0x6a, 0x20, 0x0b, 0x5a, 0x00, + 0x65, 0x00, 0x6d, 0x00, 0x17, 0x70, 0x00, 0x6c, 0x28, 0x39, 0x6e, 0x04, + 0x8b, 0x49, 0x01, 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x80, 0x10, 0x04, 0x70, + 0x7f, 0x05, 0x53, 0x14, 0x5c, 0xcd, 0x7e, 0xb7, 0x00, 0x5f, 0x2d, 0x00, + 0x65, 0x59, 0x05, 0x53, 0x4c, 0x00, 0x4e, 0x0a, 0x4f, 0x2d, 0x00, 0xfe, + 0x66, 0x6e, 0x10, 0x66, 0x26, 0x4f, 0x05, 0x5b, 0x25, 0xf4, 0xbc, 0x74, + 0xb9, 0x00, 0xfc, 0xc1, 0xdc, 0xb4, 0xb4, 0xc5, 0x84, 0xbc, 0x00, 0xb0, + 0xc6, 0x74, 0xc7, 0x2c, 0xc8, 0x0c, 0xd5, 0x38, 0x0c, 0xb8, 0x05, 0x98, + 0x27, 0x09, 0x72, 0xff, 0x04, 0x78, 0x35, 0x11, 0x04, 0x3e, 0x20, 0x04, + 0x40, 0x28, 0x15, 0x3e, 0x04, 0x34, 0x04, 0x2d, 0x00, 0x00, 0x10, 0x04, + 0x31, 0x04, 0x30, 0x04, 0x43, 0x28, 0x04, 0x39, 0x20, 0x0b, 0x17, 0x28, + 0x31, 0x3c, 0x04, 0x3f, 0x2e, 0x04, 0x3b, 0x28, 0x39, 0x3d, 0x04, 0x88, + 0x35, 0x09, 0x74, 0xff, 0x10, 0x0c, 0x70, 0x7f, 0x05, 0x8c, 0x38, 0x0c, + 0x04, 0x05, 0x05, 0x30, 0x07, 0x20, 0x05, 0x05, 0x34, 0x00, 0x22, 0xc8, + 0x0e, 0x00, 0x00, 0x07, 0x50, 0xc1, 0x82, 0x28, 0x13, 0xf3, 0x30, 0xb0, + 0x30, 0xe9, 0x28, 0x0f, 0xc9, 0xd1, 0x04, 0xc8, 0x01, 0x00, 0x5f, 0xff, + 0x43, 0x48, 0x13, 0x6e, 0x00, 0x67, 0x28, 0x1d, 0x7c, 0xe1, 0x2c, 0x29, + 0x05, 0xfb, 0x35, 0xf0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xf0, 0x7f, + 0x3c, 0x74, 0x03, 0x3c, 0x68, 0xc9, 0x62, 0xb7, 0x5f, 0x06, 0x12, 0xf9, + 0x5f, 0xff, 0x00, 0x0c, 0xcd, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0xb4, 0xf4, + 0x05, 0x98, 0x09, 0x08, 0xd2, 0xff, 0x04, 0x77, 0xff, 0x00, 0x7f, 0xff, + 0x27, 0x28, 0x17, 0x3d, 0x04, 0x5e, 0x33, 0x28, 0x1b, 0x30, 0x28, 0x19, + 0x07, 0x11, 0x7f, 0x06, 0xf4, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x06, 0x51, + 0x06, 0x70, 0x01, 0x12, 0x40, 0x0a, 0xe4, 0x20, 0x55, 0x28, 0x17, 0x01, + 0x08, 0x50, 0xd5, 0x30, 0xa7, 0x30, 0xa4, 0x20, 0x03, 0x11, 0xfc, 0x30, + 0xeb, 0x06, 0x28, 0x15, 0x00, 0x00, 0x46, 0x2f, 0x95, 0x5e, 0x6a, 0x2f, + 0x91, 0x72, 0x06, 0x08, 0x11, 0xf0, 0x7f, 0x06, 0x56, 0x17, 0x10, 0x06, + 0xf0, 0x7f, 0x39, 0x04, 0x8d, 0x36, 0x80, 0x14, 0x5c, 0x06, 0x78, 0x15, + 0x00, 0x00, 0x03, 0x98, 0xd3, 0x08, 0xc6, 0x74, 0xb9, 0x06, 0x78, 0x15, + 0x07, 0xb2, 0xff, 0xc1, 0x05, 0xf8, 0x11, 0x5f, 0xff, 0x24, 0x04, 0x35, + 0x04, 0x39, 0x20, 0x03, 0x72, 0x40, 0x06, 0x28, 0x13, 0x07, 0xd4, 0xff, + 0x10, 0x0e, 0x50, 0x7f, 0x07, 0x07, 0x70, 0x01, 0x0f, 0x80, 0x40, 0x0a, + 0x90, 0x21, 0x16, 0x0d, 0x00, 0x00, 0x09, 0x20, 0x50, 0xb8, 0x68, 0x13, + 0xfb, 0x30, 0xe2, 0x30, 0xb7, 0x0c, 0x30, 0xe7, 0x30, 0xf3, 0x20, 0x09, + 0x30, 0x07, 0xd7, 0x30, 0x68, 0xed, 0x20, 0x0b, 0x05, 0x1d, 0x45, 0x47, + 0x2b, 0x15, 0x51, 0x01, 0x72, 0x0c, 0x00, 0x2d, 0x00, 0x4d, 0x2f, 0xb7, + 0x5f, 0xbb, 0x2d, 0x00, 0x5f, 0x53, 0x2f, 0xc3, 0x70, 0x2f, 0xc1, 0x3f, + 0xc9, 0x04, 0xdb, 0x41, 0x01, 0x10, 0x7f, 0x06, 0xf0, 0xff, 0x80, 0x10, + 0x04, 0xd0, 0x7f, 0x70, 0x67, 0x14, 0x5c, 0x2d, 0x00, 0xab, 0x00, 0x83, + 0x7e, 0x67, 0x2d, 0x00, 0x96, 0x80, 0x6e, 0x10, 0x66, 0x17, 0x67, 0x05, + 0xdb, 0x1d, 0xc4, 0xc8, 0x74, 0xb9, 0x00, 0xa8, 0xba, 0x00, 0xc2, 0xfc, + 0xc1, 0x04, 0xd5, 0x37, 0x60, 0xb8, 0x06, 0x18, 0x1f, 0x07, 0x32, 0xff, + 0x6f, 0x2f, 0x2b, 0x00, 0xb3, 0xff, 0x04, 0xb8, 0x2f, 0x04, 0x14, 0x04, + 0x4c, 0x04, 0x51, 0x28, 0x15, 0x2d, 0x00, 0x05, 0x1c, 0x04, 0x3e, 0x04, + 0x48, 0x20, 0x03, 0x3d, 0x20, 0x0b, 0x5e, 0x28, 0x20, 0x0b, 0x3f, 0x28, + 0x2b, 0x30, 0x0d, 0x0e, 0xf4, 0xff, 0x10, 0x0c, 0xd0, 0x7f, 0x08, 0x40, + 0x08, 0xd0, 0x01, 0xe7, 0x21, 0x8a, 0x0c, 0x00, 0x00, 0x00, 0x0a, 0x50, + 0xcf, 0x30, 0xa4, 0x30, 0xc9, 0x30, 0x41, 0xa5, 0x28, 0x1b, 0xfb, 0x30, + 0xd2, 0x30, 0xd0, 0x28, 0x21, 0xaa, 0x05, 0xdd, 0x3b, 0x48, 0x2c, 0x1b, + 0x6a, 0x2c, 0x21, 0xfa, 0x28, 0x19, 0x42, 0x0f, 0x00, 0x69, 0x00, 0x68, + 0x2c, 0x2b, 0x05, 0xbb, 0x3b, 0x00, 0x50, 0x7f, 0x06, 0xf0, 0xff, 0x82, + 0x10, 0x05, 0x90, 0x7f, 0x6a, 0x8c, 0x0a, 0x4f, 0x5c, 0x28, 0x13, 0xd4, + 0x06, 0x6b, 0x6a, 0x8c, 0x14, 0x5c, 0x05, 0xd8, 0x13, 0x3f, 0xff, 0xc8, + 0x00, 0xd5, 0x74, 0xc7, 0x50, 0xb4, 0x20, 0x00, 0x44, 0x5e, 0xbe, 0x20, + 0x09, 0xb9, 0x06, 0x18, 0x17, 0x08, 0x52, 0xff, 0x04, 0xd8, 0x0b, 0xbf, + 0xff, 0x25, 0x00, 0x04, 0x30, 0x04, 0x39, 0x04, 0x34, 0x04, 0x43, 0x82, + 0x28, 0x19, 0x11, 0x04, 0x38, 0x04, 0x45, 0x20, 0x0f, 0x40, 0xe5, 0x04, + 0xe8, 0x0b, 0x09, 0x14, 0xff, 0x10, 0x0d, 0x90, 0x7f, 0x09, 0x09, 0x70, + 0x01, 0x10, 0x40, 0x0a, 0x00, 0xcd, 0x21, 0x60, 0x0f, 0x00, 0x00, 0x0b, + 0x50, 0x00, 0xd8, 0x30, 0xf4, 0x30, 0xa7, 0x30, 0xb7, 0x30, 0x62, 0xe5, + 0x05, 0xe8, 0x0f, 0x98, 0x17, 0x65, 0x00, 0x76, 0x20, 0x03, 0x73, 0xf0, + 0x05, 0xa8, 0x0b, 0x00, 0x50, 0x7f, 0x06, 0x30, 0xfd, 0x10, 0x07, 0x10, + 0x7f, 0x6b, 0x8d, 0xf4, 0x7e, 0x30, 0xc0, 0x4e, 0x06, 0x52, 0xfb, 0x3f, + 0xff, 0xe4, 0xd5, 0xa0, 0xbc, 0x3c, 0xdc, 0xc2, 0x06, 0x18, 0x0f, 0x08, + 0x12, 0xff, 0x05, 0x98, 0x0b, 0xd8, 0x17, 0x35, 0x04, 0x5c, 0x32, 0x20, + 0x03, 0x48, 0x05, 0xa8, 0x0b, 0x08, 0x54, 0xff, 0x10, 0x0e, 0x50, 0x7f, + 0x0a, 0x0a, 0xa0, 0x70, 0x01, 0x11, 0x40, 0x0a, 0x0f, 0x22, 0x7e, 0x0e, + 0x00, 0x00, 0x00, 0x0c, 0x50, 0xe4, 0x30, 0xfc, 0x30, 0xb9, 0x00, 0x30, + 0xfb, 0x30, 0xca, 0x30, 0xc1, 0x30, 0xaf, 0x20, 0x30, 0xf3, 0x20, 0x09, + 0xbd, 0x30, 0xeb, 0x30, 0xce, 0xc5, 0x20, 0x0b, 0x05, 0x5d, 0x3b, 0x4a, + 0x00, 0xe1, 0x28, 0x13, 0x7a, 0x2f, 0xad, 0x54, 0x4e, 0x2f, 0xb9, 0x67, + 0x2b, 0x1d, 0x6b, 0x4b, 0x27, 0x2d, 0x00, 0x45, 0x53, 0x20, 0x15, 0x6f, + 0x00, 0x6c, 0x2c, 0x33, 0x6f, 0x20, 0x13, 0xf0, 0x04, 0x7b, 0x41, 0x01, + 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x04, 0x70, 0x7f, 0xa0, 0x52, 0x79, + 0x51, 0x00, 0x2d, 0x00, 0xb3, 0x7e, 0x70, 0x67, 0x54, 0x5b, 0x00, 0x2d, + 0x00, 0x22, 0x7d, 0x14, 0x5c, 0xfa, 0x8b, 0x20, 0x4b, 0x51, 0x05, 0x9b, + 0x23, 0x7c, 0xc5, 0xa4, 0xc2, 0x08, 0x00, 0xb1, 0xc0, 0xc9, 0xe4, 0xcf, + 0x94, 0xc1, 0x78, 0x1c, 0xb1, 0x6c, 0xd0, 0x05, 0xf8, 0x21, 0x09, 0x72, + 0xff, 0x04, 0x78, 0x35, 0x2f, 0x04, 0x00, 0x41, 0x04, 0x2d, 0x00, 0x1d, + 0x04, 0x30, 0x04, 0x00, 0x34, 0x04, 0x4c, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x41, 0x3d, 0x20, 0x0f, 0x21, 0x04, 0x3e, 0x04, 0x3b, 0x20, 0x0f, 0x5c, + 0x3d, 0x20, 0x07, 0x3a, 0x04, 0xc8, 0x31, 0x09, 0x74, 0xff, 0x10, 0x0c, + 0x70, 0x7f, 0x0b, 0x0b, 0xa2, 0x70, 0x01, 0x14, 0x40, 0x0a, 0x8b, 0x21, + 0x5a, 0x28, 0x17, 0x0d, 0x08, 0x50, 0xb3, 0x30, 0xde, 0x28, 0x19, 0xed, + 0x30, 0xe0, 0xab, 0x28, 0x1b, 0xa8, 0x28, 0x21, 0xc6, 0x28, 0x15, 0xb4, + 0x20, 0x0d, 0x05, 0x7d, 0x41, 0x54, 0x4b, 0x2c, 0x21, 0x6d, 0x28, 0x1b, + 0x72, 0x40, 0x07, 0x2d, 0x00, 0x57, 0x45, 0x48, 0x25, 0x74, 0x2f, 0xc5, + 0x72, 0x28, 0x25, 0x30, 0x1b, 0x04, 0xdb, 0x47, 0xe0, 0x01, 0x10, 0x7f, + 0x06, 0xf0, 0xff, 0x10, 0x04, 0xd0, 0x7f, 0xd1, 0x79, 0x6c, 0x9a, 0x57, + 0x00, 0x7f, 0xc6, 0x59, 0x2d, 0x00, 0xc3, 0x57, 0xaf, 0x00, 0x65, 0xf0, + 0x6c, 0x14, 0x5c, 0x08, 0x62, 0xc6, 0x40, 0x59, 0x05, 0x98, 0x17, 0x54, + 0xcf, 0xc8, 0xb9, 0x6c, 0xb8, 0x40, 0xd0, 0x28, 0x1d, 0x4c, 0xd1, 0x74, + 0xb9, 0xf0, 0xac, 0xf5, 0x05, 0xf8, 0x17, 0x09, 0x12, 0xff, 0x04, 0x78, + 0x11, 0x5f, 0xff, 0x1a, 0x28, 0x01, 0x3c, 0x28, 0x15, 0x44, 0x40, 0x40, + 0x07, 0x2d, 0x00, 0x2d, 0x28, 0x27, 0x42, 0x04, 0x5c, 0x35, 0x20, 0x0f, + 0x33, 0x40, 0x19, 0x0f, 0x14, 0xff, 0x10, 0x0c, 0xd0, 0x7f, 0x0c, 0x0c, + 0xa0, 0x70, 0x01, 0x0a, 0x40, 0x0a, 0xd0, 0x21, 0x1c, 0x0d, 0x00, 0x08, + 0x00, 0x0e, 0x50, 0xce, 0x28, 0x15, 0xb0, 0x30, 0xe9, 0xb1, 0x28, 0x1b, + 0xc9, 0x05, 0x88, 0x0b, 0xbf, 0xee, 0x4e, 0x00, 0xf3, 0x2f, 0xa5, 0x5e, + 0x72, 0x2f, 0xb5, 0x64, 0x04, 0xe8, 0x01, 0x01, 0x10, 0x7f, 0x06, 0x10, + 0xfd, 0x10, 0x07, 0x10, 0x7f, 0xfa, 0x01, 0x8b, 0x3c, 0x68, 0xc9, 0x62, + 0xb7, 0x5f, 0x06, 0x32, 0xfb, 0x80, 0x3f, 0xff, 0x78, 0xb1, 0xf8, 0xad, + 0x7c, 0xb7, 0xdc, 0x7a, 0xb4, 0x05, 0xf8, 0x0f, 0x08, 0x32, 0xff, 0x04, + 0xd8, 0x01, 0x00, 0x5f, 0xf5, 0x1d, 0x28, 0x17, 0x33, 0x8e, 0x28, 0x15, + 0x30, 0x04, 0x34, 0x05, 0x08, 0x03, 0x08, 0xf4, 0xff, 0x10, 0x0e, 0x30, + 0x7f, 0x0d, 0x50, 0x0d, 0x70, 0x01, 0x0b, 0x40, 0x0a, 0x35, 0x22, 0x17, + 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x50, 0xda, 0x30, 0xb7, 0x30, 0x1a, 0xe5, + 0x30, 0xc8, 0x06, 0x48, 0x13, 0x3f, 0xfc, 0x50, 0x2f, 0x99, 0x73, 0xf8, + 0x2f, 0x9f, 0x06, 0x38, 0x13, 0xb0, 0x7f, 0x06, 0x56, 0x15, 0x10, 0x07, + 0x10, 0x7f, 0x69, 0x4f, 0xaf, 0x60, 0x65, 0x06, 0x78, 0x13, 0x3f, 0xff, + 0x98, 0xd3, 0x88, 0xc2, 0xb8, 0x78, 0xd2, 0x06, 0x78, 0x15, 0x07, 0x92, + 0xff, 0x06, 0x38, 0x13, 0x3f, 0xff, 0x1f, 0x04, 0x35, 0x0e, 0x04, 0x48, + 0x04, 0x42, 0x06, 0x48, 0x13, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, + 0x0e, 0x50, 0x0e, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0xc5, 0x21, 0x91, 0x0d, + 0x00, 0x00, 0x00, 0x10, 0x50, 0xb7, 0x30, 0xe7, 0x30, 0x15, 0xe2, 0x30, + 0xb8, 0x06, 0x88, 0x17, 0x53, 0x2c, 0x1f, 0x6d, 0x2c, 0x23, 0x7c, 0x67, + 0x2b, 0x21, 0x06, 0x3b, 0x2f, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, + 0x30, 0x7f, 0xcd, 0x7e, 0x08, 0xab, 0x83, 0x09, 0x54, 0x06, 0x98, 0x19, + 0xfc, 0xc1, 0xa8, 0x1c, 0xba, 0xc0, 0xc9, 0x06, 0x98, 0x17, 0x07, 0xb2, + 0xff, 0x06, 0x38, 0x1b, 0x28, 0x04, 0x11, 0x3e, 0x04, 0x3c, 0x20, 0x03, + 0x34, 0x04, 0x4c, 0x06, 0x48, 0x1b, 0xca, 0x07, 0xb4, 0xff, 0x10, 0x0e, + 0x30, 0x7f, 0x0f, 0x0f, 0x70, 0x01, 0x13, 0x40, 0x0a, 0xf6, 0x00, 0x20, + 0xa6, 0x0c, 0x00, 0x00, 0x11, 0x50, 0xb5, 0x00, 0x30, 0xdc, 0x30, 0xeb, + 0x30, 0xc1, 0x30, 0xfb, 0x00, 0x30, 0xb5, 0x30, 0xc8, 0x30, 0xde, 0x30, + 0xfc, 0x80, 0x20, 0x0d, 0xfb, 0x30, 0xd9, 0x30, 0xec, 0x30, 0xb0, 0x8a, + 0x05, 0x48, 0x2b, 0x53, 0x00, 0x7a, 0x2c, 0x1f, 0x62, 0x2c, 0x29, 0x6c, + 0x8a, 0x2c, 0x2f, 0x73, 0x00, 0x2d, 0x60, 0x11, 0x74, 0x28, 0x2d, 0xe1, + 0x2a, 0x00, 0x72, 0x20, 0x0f, 0x42, 0x2f, 0xd1, 0x72, 0x2f, 0xd5, 0x67, + 0xf0, 0x04, 0x4b, 0x53, 0x01, 0xb0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x04, + 0x30, 0x7f, 0x22, 0x7d, 0x5a, 0x53, 0x04, 0x14, 0x5c, 0x47, 0x59, 0x2d, + 0x20, 0x09, 0x79, 0x72, 0x00, 0x6c, 0x9a, 0x14, 0x5c, 0x2d, 0x00, 0x1d, + 0x8d, 0x08, 0xc9, 0x62, 0x3c, 0x68, 0x05, 0x5b, 0x29, 0x1c, 0xc1, 0xfc, + 0x00, 0xbc, 0x20, 0xce, 0x1c, 0xc1, 0xb8, 0xd2, 0xc8, 0x00, 0xb9, 0x74, + 0xb9, 0xa0, 0xbc, 0x08, 0xb8, 0xf8, 0x70, 0xad, 0x05, 0xb8, 0x25, 0x09, + 0xb2, 0xff, 0x04, 0x38, 0x37, 0x21, 0x04, 0x30, 0x04, 0x51, 0x31, 0x28, + 0x1b, 0x3b, 0x28, 0x17, 0x47, 0x04, 0x2d, 0x40, 0x0f, 0x44, 0x42, 0x28, + 0x29, 0x30, 0x04, 0x40, 0x20, 0x0d, 0x11, 0x04, 0x47, 0x35, 0x20, 0x07, + 0x35, 0x04, 0x33, 0x04, 0x88, 0x33, 0x09, 0xb4, 0xff, 0x10, 0x0c, 0x30, + 0x7f, 0x28, 0x10, 0x10, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x1a, 0x22, 0x72, + 0x02, 0x0f, 0x00, 0x00, 0x12, 0x50, 0xc8, 0x28, 0x15, 0xca, 0xd7, 0x05, + 0x48, 0x01, 0x00, 0x5f, 0xff, 0x54, 0x48, 0x11, 0x6e, 0x2c, 0x1f, 0x06, + 0x3b, 0x2d, 0xb0, 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x50, 0x7f, + 0x58, 0x62, 0x14, 0x5c, 0x59, 0x74, 0x87, 0x06, 0x92, 0xff, 0xa8, 0xd1, + 0x08, 0xb1, 0x05, 0xb8, 0x07, 0x08, 0x92, 0xff, 0x04, 0x37, 0xf5, 0xdc, + 0x01, 0x2a, 0x17, 0x68, 0x13, 0x3d, 0x28, 0x1f, 0x0e, 0xd4, 0xff, 0x10, + 0x0e, 0x50, 0x7f, 0x11, 0x11, 0xa0, 0x70, 0x01, 0x0e, 0x40, 0x0a, 0xf5, + 0x20, 0x4d, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x50, 0xf4, 0x30, 0xa1, 0x30, + 0xb7, 0x2b, 0x30, 0xe5, 0x06, 0x88, 0x19, 0x56, 0x2f, 0xad, 0x73, 0x06, + 0x68, 0x13, 0x90, 0x7f, 0xc2, 0x06, 0x79, 0x15, 0x10, 0x07, 0x10, 0x7f, + 0x83, 0x6c, 0xc0, 0x4e, 0x06, 0x9b, 0x15, 0x00, 0x07, 0x00, 0x84, 0xbc, + 0xdc, 0xc2, 0x06, 0xb8, 0x17, 0x07, 0x52, 0xff, 0x06, 0x58, 0x13, 0xae, + 0x3f, 0xff, 0x12, 0x28, 0x0f, 0x48, 0x06, 0x48, 0x11, 0x07, 0xb4, 0xff, + 0x10, 0x0e, 0x90, 0x7f, 0x12, 0x50, 0x12, 0x70, 0x01, 0x06, 0x40, 0x0a, + 0x96, 0x21, 0xd2, 0x0b, 0x00, 0x00, 0x00, 0x14, 0x50, 0xd9, 0x30, 0xb9, + 0x30, 0x01, 0xd7, 0x30, 0xec, 0x30, 0xfc, 0x30, 0xe0, 0x06, 0x48, 0x1b, + 0x10, 0x56, 0x00, 0x65, 0x28, 0x17, 0x7a, 0x00, 0x70, 0x00, 0x07, 0x72, + 0x00, 0xe9, 0x00, 0x6d, 0x06, 0x0b, 0x35, 0xf0, 0x7f, 0x06, 0xf0, 0xff, + 0x80, 0x10, 0x05, 0xf0, 0x7f, 0xf4, 0x7e, 0xaf, 0x65, 0x6e, 0x66, 0xf7, + 0x10, 0x96, 0xc6, 0x59, 0x06, 0x5b, 0x19, 0xa0, 0xbc, 0xa4, 0xc2, 0x0e, + 0x04, 0xd5, 0x18, 0xb8, 0x06, 0x78, 0x1b, 0x07, 0xf2, 0xff, 0x05, 0xf8, + 0x21, 0x12, 0x00, 0x04, 0x35, 0x04, 0x41, 0x04, 0x3f, 0x04, 0x40, 0xb9, + 0x20, 0x07, 0x3c, 0x06, 0x28, 0x1f, 0x07, 0xf4, 0xff, 0x10, 0x0d, 0xf0, + 0x7f, 0x13, 0x13, 0x70, 0x01, 0x40, 0x07, 0x40, 0x0a, 0x7e, 0x21, 0xbd, + 0x0c, 0x00, 0x00, 0x06, 0x15, 0x50, 0xb6, 0x30, 0xe9, 0x06, 0x48, 0x0f, + 0x7f, 0xff, 0x5a, 0xbe, 0x2f, 0xaf, 0x6c, 0x2f, 0xb3, 0x06, 0x7b, 0x31, + 0x70, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x70, 0x7f, 0x50, 0x10, 0x4f, + 0x1b, 0x6d, 0x06, 0xb2, 0xff, 0x08, 0xc8, 0xec, 0xb7, 0xf0, 0x06, 0x78, + 0x13, 0x07, 0xb2, 0xff, 0x05, 0xf8, 0x0f, 0x7f, 0xff, 0x17, 0x04, 0x30, + 0x04, 0x72, 0x3b, 0x20, 0x03, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, + 0x14, 0x14, 0x70, 0x01, 0x09, 0x84, 0x40, 0x0a, 0x4f, 0x21, 0xf9, 0x0b, + 0x00, 0x3f, 0xff, 0x01, 0x05, 0x44, 0x05, 0x20, 0x01, 0x01, 0x01, 0x04, + 0x40, 0x05, 0x01, 0x01, 0x4a, 0x02, 0x30, 0x04, 0x01, 0x02, 0x20, 0x06, + 0x02, 0x20, 0x05, 0x02, 0x25, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x20, + 0x06, 0x01, 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, + 0x40, 0x06, 0x04, 0x0e, 0x04, 0x04, 0x04, 0x05, 0x30, 0x04, 0x30, 0x3c, + 0x50, 0x05, 0x05, 0x29, 0x06, 0x06, 0x70, 0x01, 0x12, 0x40, 0x0a, 0x07, + 0x07, 0x70, 0x01, 0x49, 0x0f, 0x40, 0x0a, 0x08, 0x08, 0xd0, 0x01, 0x09, + 0x09, 0x70, 0x01, 0x4a, 0x10, 0x40, 0x0a, 0x0a, 0x0a, 0x70, 0x01, 0x11, + 0x40, 0x0a, 0x0b, 0x52, 0x0b, 0x70, 0x01, 0x14, 0x40, 0x0a, 0x0c, 0x0c, + 0x70, 0x01, 0x0a, 0x94, 0x40, 0x0a, 0x0d, 0x0d, 0x70, 0x01, 0x0b, 0x40, + 0x0a, 0x0e, 0x0e, 0xa5, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x0f, 0x0f, 0x70, + 0x01, 0x13, 0x40, 0x0a, 0x29, 0x10, 0x10, 0x70, 0x01, 0x0d, 0x40, 0x0a, + 0x11, 0x11, 0x70, 0x01, 0x4b, 0x0e, 0x40, 0x0a, 0x12, 0x12, 0x70, 0x01, + 0x06, 0x40, 0x0a, 0xf9, 0x5f, 0xc0, 0xf1, 0x57, 0x3f, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x51, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9b, 0x2d, 0x6f, + 0xf0, 0x00, 0x00, 0x00, 0x01, 0x51, 0xa2, 0x30, 0xa4, 0x30, 0xb9, 0x01, + 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0x06, 0x38, 0x21, 0x00, 0x49, + 0x00, 0x63, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x05, 0x61, 0x00, 0x6e, 0x00, + 0x64, 0x06, 0x40, 0x7f, 0x73, 0x80, 0x7d, 0x75, 0x65, 0x06, 0xe0, 0x7f, + 0x06, 0x51, 0x7f, 0x90, 0xff, 0x61, 0x06, 0xe1, 0x7f, 0x69, 0x06, 0x20, + 0x81, 0x08, 0xb0, 0x51, 0x9b, 0x5c, 0x06, 0xbb, 0x19, 0x44, 0xc5, 0x74, + 0x01, 0xc7, 0xac, 0xc2, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x5b, 0x9f, 0x1a, + 0x49, 0x00, 0x4a, 0x06, 0xc2, 0x81, 0x53, 0x7f, 0xe2, 0x06, 0x81, 0xff, + 0x18, 0x00, 0x04, 0x41, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x3d, 0x01, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0e, 0x14, 0xff, 0x9e, 0x10, 0x0e, + 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0xdc, 0x00, 0x11, 0x1a, 0x00, 0x00, + 0x30, 0x01, 0x52, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xee, 0x25, 0x8d, 0xfb, 0x00, 0x00, 0x00, + 0x02, 0x52, 0xc0, 0x30, 0xd6, 0x30, 0xea, 0x04, 0x30, 0xf3, 0x30, 0xde, + 0x5d, 0x06, 0x58, 0x1f, 0x44, 0x00, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c, + 0x00, 0x69, 0x00, 0x54, 0x6e, 0x10, 0x07, 0x00, 0x7f, 0x6f, 0x06, 0xa1, + 0xff, 0xed, 0x06, 0x61, 0xff, 0xfd, 0x90, 0x00, 0xcf, 0x67, 0x97, 0x67, + 0x30, 0x57, 0x3a, 0x53, 0x81, 0x06, 0x5b, 0x1f, 0x54, 0xb3, 0x14, 0xbe, + 0xb0, 0xb9, 0x06, 0x9b, 0x9b, 0x80, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x43, + 0x04, 0x31, 0x04, 0x3b, 0x06, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x10, 0x0e, + 0xf4, 0xff, 0x0e, 0x36, 0xff, 0x01, 0x00, 0x1a, 0x06, 0x06, 0x06, 0x06, + 0x01, 0x01, 0x06, 0x01, 0x06, 0x03, 0x1a, 0x01, 0x01, 0x01, 0x01, 0x58, + 0x17, 0x00, 0x0a, 0x52, 0xab, 0x30, 0xfc, 0x30, 0xed, 0x30, 0x54, 0xa6, + 0x06, 0x88, 0x17, 0x43, 0x26, 0x8d, 0x75, 0x28, 0x13, 0x74, 0x00, 0x11, + 0x79, 0x00, 0x20, 0x20, 0x0d, 0x61, 0x00, 0x72, 0x28, 0x25, 0x1c, 0x6f, + 0x00, 0x77, 0x05, 0x80, 0x7f, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, + 0x61, 0x53, 0x08, 0x1b, 0x6d, 0xe1, 0x90, 0x06, 0x9f, 0xb3, 0x7c, 0xce, + 0x5c, 0x01, 0xb8, 0xb0, 0xc6, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x73, 0x7f, + 0x82, 0x07, 0x92, 0xff, 0x20, 0x00, 0x28, 0x00, 0x63, 0x2a, 0x9d, 0x6e, + 0x2a, 0x00, 0x64, 0x24, 0x07, 0x64, 0x2a, 0xa7, 0x29, 0x05, 0x0f, 0xcc, + 0x1a, 0x0b, 0x04, 0x30, 0x04, 0x40, 0x28, 0x17, 0x3e, 0x28, 0x1f, 0x0e, + 0x54, 0xff, 0xa5, 0x10, 0x0e, 0xd0, 0x7f, 0x02, 0x38, 0x0c, 0x01, 0x02, + 0x20, 0x06, 0x05, 0x20, 0x05, 0x04, 0x02, 0x02, 0x91, 0x25, 0x13, 0x28, + 0x17, 0x0b, 0x52, 0x01, 0xad, 0x30, 0xe3, 0x30, 0xd0, 0x30, 0xf3, 0x07, + 0xa8, 0x17, 0x78, 0x76, 0x28, 0x1b, 0x05, 0x9f, 0xbb, 0x06, 0x10, 0x71, + 0x10, 0x07, 0xd0, 0x7f, 0x61, 0x53, 0x87, 0x43, 0x65, 0x06, 0xb8, 0x17, + 0x90, 0xce, 0x88, 0xbc, 0x06, 0x98, 0x15, 0x07, 0xb2, 0xff, 0xd7, 0x06, + 0x38, 0x15, 0x58, 0x17, 0x32, 0x28, 0x1b, 0x3d, 0x06, 0x48, 0x15, 0x07, + 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x4a, 0x03, 0x38, 0x0c, 0x02, 0x03, + 0x20, 0x06, 0x04, 0x20, 0x05, 0x03, 0x00, 0x03, 0x64, 0x26, 0xc5, 0xfa, + 0x00, 0x00, 0x0c, 0x03, 0x52, 0xaf, 0x30, 0xec, 0x30, 0xa2, 0x06, 0x88, + 0x15, 0x00, 0x1b, 0x2f, 0x5c, 0x6c, 0x4f, 0xbf, 0x65, 0x05, 0xaf, 0xaf, + 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x4b, 0x51, 0x08, 0xb1, 0x83, + 0x14, 0x5c, 0x06, 0x98, 0x19, 0x74, 0xd0, 0x08, 0x1c, 0xb8, 0xb4, 0xc5, + 0x06, 0x98, 0x19, 0x07, 0x92, 0xff, 0x06, 0x78, 0x17, 0x3b, 0x04, 0x1d, + 0x4d, 0x04, 0x40, 0x06, 0x68, 0x15, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, + 0x7f, 0x04, 0x38, 0x0c, 0x28, 0x03, 0x04, 0x20, 0x06, 0x09, 0x20, 0x05, + 0x04, 0x04, 0x94, 0x00, 0x25, 0x9e, 0xf9, 0x00, 0x00, 0x0d, 0x52, 0xb3, + 0x0a, 0x30, 0xfc, 0x30, 0xaf, 0x07, 0xa8, 0x17, 0x6f, 0x28, 0x15, 0x6b, + 0xe1, 0x05, 0xeb, 0xaf, 0x05, 0xd0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xd1, + 0x79, 0x4b, 0x51, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0x54, 0xcf, 0x6c, + 0xd0, 0x06, 0x98, 0x15, 0x07, 0x92, 0xff, 0xd7, 0x06, 0x58, 0x15, 0x38, + 0x17, 0x3e, 0x28, 0x15, 0x3a, 0x07, 0x88, 0x17, 0x06, 0x34, 0xff, 0x10, + 0x0e, 0xb0, 0x7f, 0x4a, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x0a, + 0x20, 0x05, 0x05, 0x08, 0x05, 0xe7, 0x24, 0xfb, 0x28, 0x17, 0x0e, 0x52, + 0xc9, 0x0b, 0x30, 0xcb, 0x30, 0xb4, 0x28, 0x1b, 0xeb, 0x06, 0x68, 0x1b, + 0xdb, 0x2f, 0x45, 0x44, 0x4c, 0x2f, 0x65, 0x00, 0x67, 0x2f, 0xc3, 0x6c, + 0x05, 0x4f, 0xc1, 0xc0, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x1a, + 0x59, 0x85, 0x51, 0xa0, 0x52, 0x20, 0x14, 0x5c, 0x06, 0x78, 0x1b, 0xc4, + 0xb3, 0xc8, 0xb2, 0xe8, 0x74, 0xac, 0x06, 0x98, 0x19, 0x07, 0xd2, 0xff, + 0x06, 0x18, 0x1d, 0x14, 0x28, 0x17, 0x3d, 0x04, 0x17, 0x35, 0x04, 0x33, + 0x28, 0x1f, 0x3b, 0x06, 0x28, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x4a, 0x06, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x02, 0x20, 0x05, + 0x06, 0x00, 0x06, 0xfe, 0x26, 0xaf, 0xfa, 0x00, 0x00, 0x0f, 0x41, 0x52, + 0x58, 0x13, 0xa6, 0x30, 0xa7, 0x30, 0xa4, 0x06, 0x48, 0x19, 0xab, 0xdb, + 0x2f, 0x47, 0x48, 0x0f, 0x77, 0x2c, 0x31, 0x79, 0x05, 0x6f, 0xc1, 0x06, + 0x10, 0x71, 0x81, 0x10, 0x07, 0xd0, 0x7f, 0x08, 0x62, 0x14, 0x5c, 0xe6, + 0x97, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xe8, 0xac, 0xe8, 0xc6, 0x74, + 0xc7, 0xe2, 0x06, 0x98, 0x17, 0x07, 0xb2, 0xff, 0x06, 0x18, 0x15, 0x00, + 0x00, 0x13, 0x48, 0x0f, 0x43, 0x0e, 0x04, 0x4d, 0x04, 0x39, 0x06, 0x28, + 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x07, 0x14, 0x06, 0x07, + 0x07, 0x50, 0x01, 0x01, 0x40, 0x09, 0xe2, 0x25, 0x00, 0x92, 0xf9, 0x00, + 0x00, 0x10, 0x52, 0xb1, 0x30, 0x75, 0xea, 0x28, 0x19, 0x06, 0x38, 0x11, + 0x00, 0x3b, 0x2f, 0x4b, 0x2f, 0xb9, 0x72, 0x20, 0x01, 0xe1, 0x05, 0x97, + 0xa3, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xef, 0x51, 0xcc, 0x91, + 0x06, 0x98, 0x15, 0x8e, 0x2f, 0xff, 0xcf, 0xac, 0xb9, 0x06, 0x98, 0x15, + 0x07, 0xb2, 0xff, 0x06, 0x38, 0x15, 0x00, 0x02, 0x00, 0x1a, 0x04, 0x35, + 0x04, 0x40, 0x20, 0x01, 0x38, 0xe1, 0x06, 0x48, 0x15, 0x07, 0x14, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x07, 0x08, 0x08, 0x50, 0x01, 0x44, 0x06, + 0x40, 0x09, 0x2b, 0x25, 0x1b, 0x28, 0x17, 0x11, 0x52, 0x01, 0xad, 0x30, + 0xeb, 0x30, 0xc7, 0x30, 0xa2, 0x06, 0x88, 0x19, 0xb7, 0xf8, 0x17, 0x69, + 0x2f, 0xbd, 0x3c, 0x2d, 0x72, 0x28, 0x21, 0x05, 0x58, 0x17, 0x05, 0xf0, + 0x71, 0x80, 0x10, 0x07, 0xd0, 0x7f, 0xfa, 0x57, 0x14, 0x5c, 0xe3, 0x4e, + 0x14, 0x40, 0x5c, 0x06, 0x78, 0x1b, 0xac, 0xd0, 0x70, 0xb3, 0xb4, 0xc5, + 0xe8, 0x06, 0x98, 0x19, 0x07, 0xd2, 0xff, 0x06, 0x18, 0x1b, 0x1a, 0x28, + 0x11, 0x3b, 0x04, 0x34, 0x38, 0x04, 0x4d, 0x28, 0x1d, 0x0e, 0x34, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x08, 0x09, 0x50, 0x09, 0x50, 0x01, 0x07, + 0x40, 0x09, 0xd7, 0x25, 0x43, 0xfb, 0x10, 0x00, 0x00, 0x12, 0x48, 0x17, + 0xb1, 0x30, 0xcb, 0x30, 0x6b, 0xfc, 0x06, 0x68, 0x19, 0x00, 0x38, 0x17, + 0x6b, 0x2f, 0xc3, 0x6e, 0x2c, 0x37, 0x05, 0x3f, 0xc3, 0xe2, 0x06, 0x10, + 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x38, 0x17, 0xaf, 0x80, 0x3c, 0x06, 0xa8, + 0x17, 0x00, 0x1e, 0xcf, 0xc8, 0xb2, 0x06, 0xf8, 0x17, 0x07, 0x92, 0xff, + 0x05, 0xf8, 0x19, 0x58, 0x17, 0x3a, 0x0b, 0x04, 0x35, 0x04, 0x3d, 0x20, + 0x01, 0x38, 0x06, 0x08, 0x1b, 0x06, 0xf4, 0xff, 0x85, 0x10, 0x0e, 0xf0, + 0x7f, 0x0a, 0x09, 0x0a, 0x0a, 0x50, 0x01, 0x08, 0x40, 0x09, 0x00, 0x70, + 0x25, 0xd8, 0xfa, 0x00, 0x00, 0x13, 0x52, 0x46, 0xea, 0x28, 0x11, 0xb7, + 0x30, 0xe5, 0x06, 0x68, 0x15, 0xfb, 0x2f, 0x4c, 0xae, 0x2f, 0xb7, 0x6f, + 0x2f, 0xc1, 0x73, 0x05, 0x8f, 0xb9, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, + 0x7f, 0xb1, 0x06, 0x83, 0x0a, 0x4f, 0xc0, 0x4e, 0x06, 0x78, 0x15, 0x28, + 0x17, 0xb9, 0x3d, 0xdc, 0xc2, 0x06, 0x98, 0x15, 0x07, 0xb2, 0xff, 0x05, + 0xf8, 0x11, 0x5f, 0xff, 0x1b, 0x28, 0x17, 0x07, 0x38, 0x04, 0x48, 0x04, + 0x4c, 0x06, 0x08, 0x11, 0x07, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0a, + 0x0b, 0x0a, 0x0b, 0x0b, 0x50, 0x01, 0x0c, 0x40, 0x09, 0xb5, 0x28, 0x25, + 0xcf, 0x28, 0x17, 0x14, 0x48, 0x17, 0xc8, 0x30, 0xea, 0x34, 0x30, 0xe0, + 0x06, 0x68, 0x19, 0xf8, 0x17, 0x65, 0x2f, 0xbf, 0x74, 0x00, 0x5c, 0x72, + 0x2f, 0xc5, 0x6d, 0x05, 0x68, 0x17, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, + 0x7f, 0x29, 0x52, 0x02, 0x79, 0x72, 0xcc, 0x91, 0xc6, 0x59, 0x06, 0x78, + 0x19, 0xac, 0x07, 0xb9, 0xb8, 0xd2, 0xbc, 0xb9, 0x06, 0x98, 0x19, 0x07, + 0xd2, 0xff, 0x06, 0x18, 0x1b, 0x8b, 0x38, 0x17, 0x42, 0x04, 0x40, 0x28, + 0x1d, 0x3c, 0x06, 0x48, 0x19, 0x06, 0xf4, 0xff, 0x85, 0x10, 0x0e, 0xf0, + 0x7f, 0x0c, 0x0b, 0x0c, 0x0c, 0x50, 0x01, 0x0e, 0x40, 0x09, 0x15, 0x5c, + 0x26, 0x40, 0x28, 0x17, 0x15, 0x28, 0x17, 0xe0, 0x28, 0x15, 0x1a, 0xc3, + 0x30, 0xaf, 0x07, 0x68, 0x17, 0x38, 0x0f, 0x65, 0x48, 0x17, 0x63, 0x38, + 0x00, 0x6b, 0x05, 0x4f, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, + 0x29, 0x52, 0xd8, 0x04, 0x9e, 0xcc, 0x91, 0x4b, 0x51, 0x06, 0x98, 0x17, + 0x38, 0xba, 0x78, 0xad, 0x06, 0xc8, 0x17, 0x07, 0xd2, 0xff, 0x05, 0xf8, + 0x19, 0x38, 0x17, 0x3c, 0x04, 0x35, 0xb8, 0x48, 0x19, 0x3a, 0x06, 0x28, + 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x0c, 0x0d, 0x60, + 0x0d, 0x60, 0x01, 0x40, 0x09, 0x73, 0x25, 0xdf, 0xf9, 0x00, 0x00, 0x00, + 0x16, 0x52, 0xed, 0x30, 0xf3, 0x30, 0xb0, 0x00, 0x30, 0xd5, 0x30, 0xa9, + 0x30, 0xfc, 0x30, 0xc9, 0xe2, 0x06, 0x28, 0x1b, 0xfb, 0x2f, 0x3c, 0x2b, + 0x67, 0x00, 0x66, 0x2c, 0x33, 0x72, 0xf0, 0x2c, 0x33, 0x05, 0x3f, 0xaf, + 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x17, 0x67, 0x8f, 0x79, 0x20, + 0xb7, 0x5f, 0x06, 0x78, 0x15, 0x00, 0x00, 0x71, 0xb8, 0x7c, 0x1c, 0xd3, + 0xdc, 0xb4, 0x06, 0xb8, 0x17, 0x07, 0xd2, 0xff, 0x06, 0x18, 0x17, 0x3e, + 0x04, 0x04, 0x3d, 0x04, 0x33, 0x04, 0x44, 0x20, 0x07, 0x40, 0x04, 0x70, + 0x34, 0x06, 0x08, 0x19, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0e, + 0x0d, 0x0e, 0x0e, 0xa1, 0x50, 0x01, 0x0f, 0x40, 0x09, 0x34, 0x26, 0x75, + 0xfa, 0x25, 0x15, 0x03, 0x52, 0xe9, 0x30, 0xa6, 0x30, 0xb9, 0x06, 0x28, + 0x0f, 0x00, 0x98, 0x17, 0x5c, 0x75, 0x2b, 0x3b, 0x68, 0x05, 0xc7, 0x97, + 0x05, 0xd0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xb3, 0x52, 0x20, 0xaf, 0x65, + 0x06, 0x98, 0x15, 0x00, 0x00, 0x7c, 0xb7, 0xb0, 0x1e, 0xc6, 0xa4, 0xc2, + 0x06, 0xd8, 0x17, 0x07, 0x52, 0xff, 0x05, 0xf8, 0x11, 0x78, 0x17, 0x30, + 0x0e, 0x04, 0x43, 0x04, 0x42, 0x06, 0x08, 0x0f, 0x07, 0x74, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x0f, 0x14, 0x0e, 0x0f, 0x0f, 0x50, 0x01, 0x0b, 0x40, + 0x09, 0x68, 0x26, 0x00, 0x73, 0xfb, 0x00, 0x00, 0x18, 0x52, 0xe1, 0x30, + 0x06, 0xa4, 0x30, 0xe8, 0x30, 0xfc, 0x06, 0x88, 0x19, 0xdb, 0x2f, 0x4d, + 0xbc, 0x2c, 0x23, 0x79, 0x2f, 0xc1, 0x05, 0x9f, 0xb6, 0x06, 0x10, 0x71, + 0x10, 0x07, 0xd0, 0x7f, 0x85, 0x68, 0x20, 0x65, 0x59, 0x06, 0xb8, 0x17, + 0x54, 0xba, 0x74, 0xc7, 0x24, 0x70, 0xc6, 0x06, 0x98, 0x17, 0x07, 0x72, + 0xff, 0x06, 0x58, 0x15, 0x00, 0x00, 0x1c, 0x04, 0x07, 0x35, 0x04, 0x39, + 0x04, 0x3e, 0x07, 0x68, 0x17, 0x06, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x0c, 0x10, 0x0f, 0x10, 0x10, 0x60, 0x01, 0x40, 0x09, 0x4d, 0x26, 0x01, + 0x64, 0xf9, 0x00, 0x00, 0x19, 0x52, 0xdf, 0x28, 0x13, 0x6f, 0xb9, 0x06, + 0x88, 0x15, 0x00, 0x18, 0x17, 0x65, 0x2c, 0x2b, 0x05, 0xbf, 0xbd, 0x06, + 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x08, 0x73, 0x7c, 0xaf, 0x65, 0x06, + 0xb8, 0x17, 0xf8, 0xbb, 0xa4, 0x70, 0xc2, 0x06, 0x98, 0x15, 0x07, 0xb2, + 0xff, 0x06, 0x58, 0x19, 0x1c, 0x04, 0x38, 0x04, 0x70, 0x42, 0x06, 0x88, + 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x11, 0x10, 0x11, 0x11, + 0xc0, 0x60, 0x01, 0x40, 0x09, 0x27, 0x26, 0x40, 0xfb, 0x00, 0x00, 0x00, + 0x1a, 0x52, 0xe2, 0x30, 0xca, 0x30, 0xcf, 0x30, 0x71, 0xf3, 0x06, 0x88, + 0x19, 0xfb, 0x2f, 0x3c, 0x31, 0x61, 0x00, 0x67, 0x28, 0x19, 0x78, 0x61, + 0x2c, 0x3b, 0x05, 0x3f, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, + 0xab, 0x83, 0xb3, 0x10, 0x7e, 0xa8, 0x4e, 0x06, 0x98, 0x19, 0xa8, 0xba, + 0x08, 0xb1, 0x38, 0x78, 0xd5, 0x06, 0x98, 0x19, 0x07, 0xf2, 0xff, 0x05, + 0xf8, 0x1d, 0x1c, 0x04, 0x3e, 0x02, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x45, + 0x20, 0x03, 0x3d, 0xe1, 0x06, 0x28, 0x1f, 0x06, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x12, 0x11, 0x12, 0x12, 0x60, 0x01, 0x88, 0x40, 0x09, 0x93, + 0x26, 0x0c, 0x28, 0x17, 0x1b, 0x52, 0xaa, 0x00, 0x30, 0xd5, 0x30, 0xa1, + 0x30, 0xea, 0x30, 0xfc, 0xc4, 0x06, 0x68, 0x19, 0xdb, 0x2f, 0x4f, 0x00, + 0x66, 0x20, 0x01, 0x61, 0x00, 0x78, 0x6c, 0x2b, 0x3d, 0x05, 0x5f, 0xc0, + 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x65, 0x59, 0xd5, 0x10, 0x6c, + 0x29, 0x52, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x84, 0xd3, 0x3c, 0xac, 0xb9, + 0x06, 0x98, 0x17, 0x07, 0xb2, 0xff, 0x05, 0xf8, 0x13, 0x3f, 0xff, 0x1e, + 0x04, 0x41, 0x44, 0x20, 0x01, 0x30, 0x04, 0x3b, 0x04, 0x38, 0x06, 0x28, + 0x15, 0xc3, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x13, 0x12, 0x13, + 0x13, 0x60, 0x01, 0x40, 0x09, 0x08, 0xe0, 0x25, 0xab, 0xfa, 0x2b, 0x2d, + 0x52, 0xed, 0x30, 0x01, 0xb9, 0x30, 0xb3, 0x30, 0xe2, 0x30, 0xf3, 0x07, + 0x48, 0x17, 0x57, 0x52, 0x2f, 0xbd, 0x73, 0x4c, 0x2f, 0x6d, 0x20, 0x01, + 0x3f, 0xc9, 0x04, 0xff, 0xc0, 0xc0, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, + 0x7f, 0x57, 0x7f, 0xaf, 0x65, 0xb7, 0x5e, 0x20, 0x92, 0x82, 0x06, 0x78, + 0x19, 0x5c, 0xb8, 0xa4, 0xc2, 0x54, 0x1c, 0xcf, 0x3c, 0xba, 0x06, 0x78, + 0x19, 0x08, 0x12, 0xff, 0x05, 0xd8, 0x1d, 0x20, 0x04, 0x05, 0x3e, 0x04, + 0x41, 0x04, 0x3a, 0x20, 0x05, 0x3c, 0x20, 0x01, 0x1c, 0x3e, 0x04, 0x3d, + 0x05, 0xe8, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x14, 0x13, + 0x31, 0x14, 0x14, 0x60, 0x01, 0x40, 0x09, 0x23, 0x26, 0x2f, 0x28, 0x17, + 0x00, 0x1d, 0x52, 0xb9, 0x30, 0xe9, 0x30, 0xa4, 0x30, 0x68, 0xb4, 0x06, + 0x68, 0x15, 0xfb, 0x2f, 0x53, 0x2f, 0xb7, 0x69, 0x00, 0x67, 0xf0, 0x2c, + 0x33, 0x05, 0x7f, 0xbc, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0xaf, + 0x65, 0xb1, 0x83, 0x20, 0x08, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0xac, + 0xc2, 0x7c, 0x07, 0xb7, 0x74, 0xc7, 0xe0, 0xac, 0x06, 0x78, 0x17, 0x07, + 0x92, 0xff, 0x05, 0xd8, 0x0f, 0x80, 0x7f, 0xff, 0x21, 0x04, 0x3b, 0x04, + 0x30, 0x04, 0x39, 0x38, 0x04, 0x33, 0x28, 0x1f, 0x0e, 0x34, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x15, 0x14, 0x15, 0x60, 0x15, 0x60, 0x01, 0x40, 0x09, + 0x96, 0x26, 0xf8, 0xf9, 0x00, 0x00, 0x00, 0x1e, 0x52, 0xc6, 0x30, 0xa3, + 0x30, 0xda, 0x8d, 0x28, 0x1b, 0xea, 0x30, 0xfc, 0x06, 0x48, 0x1b, 0xdb, + 0x2f, 0x54, 0x28, 0x15, 0x45, 0x70, 0x20, 0x01, 0x65, 0x00, 0x72, 0x2c, + 0x2b, 0x72, 0x2b, 0x43, 0xe0, 0x04, 0xff, 0xbe, 0x06, 0x10, 0x71, 0x10, + 0x07, 0xd0, 0x7f, 0x82, 0x84, 0xc0, 0x73, 0xf7, 0x10, 0x96, 0xcc, 0x91, + 0x06, 0x78, 0x19, 0xf0, 0xd2, 0x7c, 0xd3, 0x0e, 0x08, 0xb8, 0xac, 0xb9, + 0x06, 0x78, 0x17, 0x08, 0x12, 0xff, 0x05, 0xd8, 0x1f, 0x22, 0x08, 0x04, + 0x38, 0x04, 0x3f, 0x20, 0x01, 0x35, 0x04, 0x40, 0x2e, 0x04, 0x4d, 0x20, + 0x03, 0x38, 0x05, 0xe8, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x16, 0x18, 0x15, 0x16, 0x16, 0x60, 0x01, 0x40, 0x09, 0x73, 0x25, 0x6e, + 0x00, 0xfa, 0x00, 0x00, 0x1f, 0x52, 0xa6, 0x30, 0xa9, 0xab, 0x28, 0x11, + 0xbf, 0x28, 0x15, 0xd5, 0x40, 0x09, 0xc9, 0x05, 0xe8, 0x1d, 0xdb, 0x2f, + 0x55, 0x57, 0x2c, 0x29, 0x74, 0x48, 0x15, 0x66, 0x2f, 0xc1, 0x72, 0x2c, + 0x39, 0xe0, 0x04, 0xff, 0xc6, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, + 0x83, 0x6c, 0x79, 0x72, 0x8f, 0x10, 0x79, 0xb7, 0x5f, 0x06, 0x78, 0x17, + 0xcc, 0xc6, 0x30, 0xd1, 0x0e, 0x7c, 0xd3, 0xdc, 0xb4, 0x06, 0x78, 0x17, + 0x08, 0x12, 0xff, 0x05, 0xd8, 0x17, 0x23, 0x0a, 0x04, 0x3e, 0x04, 0x42, + 0x48, 0x15, 0x44, 0x20, 0x09, 0x40, 0x38, 0x04, 0x34, 0x06, 0xc8, 0x17, + 0x06, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x17, 0x16, 0x17, 0x51, 0x17, + 0x50, 0x01, 0x18, 0x40, 0x09, 0x09, 0x25, 0x92, 0x28, 0x17, 0x40, 0x20, + 0x28, 0x17, 0xa7, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0x58, 0xdf, 0x28, 0x1d, + 0xb9, 0x05, 0xe8, 0x13, 0x00, 0x38, 0x17, 0x65, 0x00, 0x73, 0xb7, 0x2b, + 0x3b, 0x6d, 0x2f, 0xbf, 0x38, 0x21, 0x68, 0x05, 0x28, 0x17, 0x05, 0xf0, + 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x02, 0x7f, 0x89, 0x73, 0x7c, 0xaf, 0x65, + 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xe8, 0xc6, 0xa4, 0xc2, 0xb8, 0xd2, + 0xf8, 0x1c, 0xbb, 0xa4, 0xc2, 0x06, 0x58, 0x19, 0x08, 0x12, 0xff, 0x05, + 0xf8, 0x17, 0x4d, 0x04, 0x47, 0x41, 0x28, 0x19, 0x3c, 0x04, 0x38, 0x28, + 0x1f, 0x06, 0x1a, 0x1b, 0x06, 0xf4, 0xff, 0x85, 0x10, 0x0e, 0xf0, 0x7f, + 0x18, 0x17, 0x18, 0x18, 0x50, 0x01, 0x1a, 0x40, 0x09, 0x14, 0x0f, 0x26, + 0xc9, 0x28, 0x17, 0x21, 0x48, 0x17, 0xc3, 0x30, 0x45, 0xaf, 0x28, 0x1b, + 0xd5, 0x30, 0xa9, 0x28, 0x1b, 0xc9, 0x05, 0xe8, 0x1b, 0xb8, 0x00, 0x18, + 0x17, 0x78, 0x05, 0xcf, 0xb9, 0x06, 0x10, 0x71, 0x10, 0x07, 0xd0, 0x7f, + 0xe6, 0x97, 0x4b, 0x01, 0x51, 0xaf, 0x65, 0x8f, 0x79, 0xb7, 0x5f, 0x06, + 0x58, 0x1b, 0x43, 0xe9, 0x28, 0x17, 0x7c, 0xd3, 0xdc, 0xb4, 0x06, 0x58, + 0x15, 0x07, 0xf2, 0xff, 0xd0, 0x05, 0xd8, 0x13, 0x78, 0x17, 0x3a, 0x28, + 0x19, 0x44, 0x04, 0x3e, 0x04, 0x1c, 0x40, 0x04, 0x34, 0x06, 0x08, 0x19, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x19, 0x18, 0x30, 0x19, 0x19, + 0x60, 0x01, 0x40, 0x09, 0x37, 0x25, 0x69, 0xfb, 0x15, 0x00, 0x00, 0x22, + 0x28, 0x17, 0xa3, 0x48, 0x17, 0xed, 0x28, 0x13, 0xd1, 0x05, 0xd8, 0x11, + 0x00, 0x5b, 0x2f, 0x69, 0x2c, 0x2b, 0x6b, 0x00, 0x6c, 0x2c, 0x2f, 0x70, + 0x77, 0x05, 0x6f, 0xaf, 0x05, 0xf0, 0x71, 0x10, 0x07, 0xd0, 0x7f, 0x01, + 0x5a, 0x4b, 0x51, 0x30, 0x1b, 0x6d, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x04, + 0xc7, 0x74, 0xd0, 0x3a, 0x5c, 0xb8, 0x06, 0x78, 0x15, 0x07, 0xf2, 0xff, + 0x06, 0x38, 0x17, 0x38, 0x28, 0x17, 0x3b, 0xb8, 0x28, 0x15, 0x43, 0x06, + 0x08, 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x19, 0x1a, + 0x51, 0x1a, 0x50, 0x01, 0x17, 0x40, 0x09, 0xac, 0x25, 0xb5, 0x28, 0x17, + 0x80, 0x00, 0x25, 0x27, 0x1a, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x00, + 0x06, 0x06, 0x03, 0x1a, 0x01, 0x01, 0x01, 0x01, 0x4a, 0x02, 0x30, 0x04, + 0x01, 0x02, 0x20, 0x06, 0x05, 0x20, 0x05, 0x02, 0x25, 0x02, 0x03, 0x30, + 0x04, 0x02, 0x03, 0x20, 0x06, 0x04, 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, + 0x30, 0x04, 0x03, 0x04, 0x20, 0x06, 0x09, 0x89, 0x20, 0x05, 0x04, 0x04, + 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x44, 0x0a, 0x20, 0x05, 0x05, + 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, 0xa0, 0x20, 0x06, 0x02, 0x20, 0x05, + 0x06, 0x06, 0x07, 0x06, 0x07, 0x50, 0x07, 0x50, 0x01, 0x01, 0x40, 0x09, + 0x08, 0x07, 0x08, 0x08, 0xa1, 0x50, 0x01, 0x06, 0x40, 0x09, 0x09, 0x08, + 0x09, 0x09, 0x50, 0x01, 0x42, 0x07, 0x40, 0x09, 0x0a, 0x09, 0x0a, 0x0a, + 0x50, 0x01, 0x08, 0x85, 0x40, 0x09, 0x0b, 0x0a, 0x0b, 0x0b, 0x50, 0x01, + 0x0c, 0x40, 0x09, 0x0a, 0x0c, 0x0b, 0x0c, 0x0c, 0x50, 0x01, 0x0e, 0x40, + 0x09, 0x0d, 0x18, 0x0c, 0x0d, 0x0d, 0x60, 0x01, 0x40, 0x09, 0x0e, 0x0d, + 0x0e, 0x50, 0x0e, 0x50, 0x01, 0x0f, 0x40, 0x09, 0x0f, 0x0e, 0x0f, 0x0f, + 0xa1, 0x50, 0x01, 0x0b, 0x40, 0x09, 0x10, 0x0f, 0x10, 0x10, 0x60, 0x01, + 0x86, 0x40, 0x09, 0x11, 0x10, 0x11, 0x11, 0x60, 0x01, 0x40, 0x09, 0x12, + 0x18, 0x11, 0x12, 0x12, 0x60, 0x01, 0x40, 0x09, 0x13, 0x12, 0x13, 0x61, + 0x13, 0x60, 0x01, 0x40, 0x09, 0x14, 0x13, 0x14, 0x14, 0x60, 0x01, 0x86, + 0x40, 0x09, 0x15, 0x14, 0x15, 0x15, 0x60, 0x01, 0x40, 0x09, 0x16, 0x18, + 0x15, 0x16, 0x16, 0x60, 0x01, 0x40, 0x09, 0x17, 0x16, 0x17, 0x50, 0x17, + 0x50, 0x01, 0x18, 0x40, 0x09, 0x18, 0x17, 0x18, 0x18, 0xbc, 0x50, 0x01, + 0x1a, 0x40, 0x09, 0xf9, 0xbf, 0xf1, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, 0x30, 0x01, 0x53, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xca, 0x1d, 0xe1, 0x08, 0x00, 0x00, 0x00, 0x02, 0x53, 0xe9, 0x30, + 0xc4, 0x30, 0xa3, 0x04, 0x30, 0xaa, 0x30, 0xde, 0x5d, 0x06, 0x58, 0x1f, + 0x4c, 0x00, 0x01, 0x61, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6f, 0x06, 0x68, + 0x9e, 0xa3, 0x30, 0x7f, 0x74, 0x20, 0x7f, 0x75, 0x00, 0x6d, 0x0e, 0x80, + 0x7f, 0x06, 0xf1, 0x7f, 0x40, 0x63, 0x06, 0xa1, 0xff, 0xc9, 0x62, 0x50, + 0x9f, 0x65, 0x59, 0x08, 0x27, 0x59, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0x7c, + 0xb7, 0x58, 0x01, 0xce, 0x24, 0xc6, 0x20, 0x00, 0xfc, 0xc8, 0x0e, 0x73, + 0x7f, 0x40, 0xe1, 0x06, 0xc1, 0xff, 0x1b, 0x04, 0x30, 0x04, 0x46, 0x04, + 0x0c, 0x38, 0x04, 0x3e, 0x04, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0xb0, 0x7f, + 0x01, 0x09, 0x41, 0x07, 0x20, 0x01, 0x01, 0x01, 0x08, 0x08, 0x08, 0x20, + 0x05, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x53, 0xd0, 0x30, 0xc3, 0x02, + 0x30, 0xec, 0x30, 0xfb, 0x30, 0xc0, 0x28, 0x1b, 0xb9, 0x2a, 0x30, 0xbf, + 0x06, 0x08, 0x1f, 0x41, 0x28, 0x11, 0x73, 0x27, 0x99, 0x61, 0x0a, 0x00, + 0x20, 0x00, 0x56, 0x28, 0x23, 0x6c, 0x20, 0x01, 0x65, 0x34, 0x00, 0x79, + 0x05, 0x8f, 0xc4, 0x70, 0x73, 0xe9, 0x20, 0x75, 0x20, 0x00, 0x16, 0x64, + 0x00, 0x27, 0x80, 0x91, 0x65, 0x05, 0xe0, 0xff, 0x31, 0x03, 0x6c, 0xee, + 0x06, 0x0f, 0xbc, 0x91, 0x73, 0xd0, 0xfd, 0x61, 0x06, 0x40, 0x7f, 0x31, + 0x83, 0x05, 0xd0, 0x81, 0xe6, 0x00, 0x74, 0xb1, 0x83, 0x2d, 0x00, 0xbe, + 0x8f, 0x65, 0x04, 0x59, 0xaf, 0x65, 0x54, 0x58, 0x06, 0x18, 0x1f, 0x1c, + 0xbc, 0x00, 0x08, 0xb8, 0xe4, 0xb2, 0x24, 0xc6, 0xa4, 0xc2, 0x38, 0xc0, + 0xd0, 0x06, 0x38, 0x1d, 0x07, 0x51, 0xff, 0x06, 0x71, 0xfd, 0x00, 0x00, + 0x12, 0xa0, 0x28, 0x17, 0x3b, 0x20, 0x01, 0x35, 0x04, 0x2d, 0x00, 0x34, + 0x08, 0x04, 0x19, 0x20, 0x10, 0x28, 0x21, 0x41, 0x04, 0x42, 0xe0, 0x28, + 0x2d, 0x0d, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x02, 0x13, 0x02, + 0x13, 0x42, 0x13, 0x20, 0x05, 0x13, 0x04, 0x02, 0x02, 0x20, 0x01, 0x85, + 0x00, 0x20, 0x33, 0x05, 0x00, 0x00, 0x04, 0x53, 0xd4, 0x00, 0x30, 0xa8, + 0x30, 0xe2, 0x30, 0xf3, 0x30, 0xc6, 0xd5, 0x06, 0x08, 0x11, 0x5f, 0xff, + 0x50, 0x2f, 0xab, 0x65, 0x27, 0x8f, 0x6d, 0x2e, 0xb1, 0x6f, 0x6e, 0x2f, + 0xb9, 0x06, 0x30, 0x7f, 0xe9, 0x06, 0x80, 0x7d, 0x70, 0xff, 0x07, 0x70, + 0x7f, 0x05, 0x59, 0x0b, 0xa0, 0xf1, 0xff, 0x61, 0x06, 0xa0, 0x7f, 0xae, + 0x76, 0xc3, 0x57, 0x99, 0x18, 0x84, 0x79, 0x72, 0x06, 0x18, 0x11, 0x5f, + 0xff, 0x3c, 0xd5, 0xd0, 0x06, 0xc5, 0xac, 0xba, 0x4c, 0xd1, 0x06, 0x38, + 0x13, 0x73, 0x7f, 0xeb, 0x8a, 0x0e, 0xa2, 0x7f, 0x1f, 0x04, 0x4c, 0x28, + 0x13, 0x3c, 0x28, 0x0d, 0x3d, 0xe0, 0x28, 0x0d, 0x0e, 0x54, 0xff, 0x10, + 0x0e, 0xb0, 0x7f, 0x03, 0x0e, 0x0d, 0x0e, 0x0c, 0x03, 0x0e, 0x03, 0x03, + 0x0d, 0x0d, 0x0d, 0x20, 0x05, 0x20, 0x07, 0x20, 0x20, 0x75, 0x28, 0x17, + 0x05, 0x53, 0xea, 0x30, 0xb0, 0x08, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x68, + 0x15, 0x00, 0x00, 0x4c, 0x83, 0x28, 0x17, 0x67, 0x00, 0x75, 0x00, 0x72, + 0x46, 0x1f, 0x06, 0xd0, 0x7f, 0xd8, 0x06, 0x17, 0x15, 0xf0, 0x7f, 0x6e, + 0x0e, 0xc1, 0x7f, 0x06, 0x31, 0xff, 0x29, 0x52, 0xe4, 0x04, 0x53, 0xcc, + 0x91, 0x9a, 0x4e, 0x06, 0x78, 0x17, 0xac, 0xb9, 0x03, 0x6c, 0xad, 0xac, + 0xb9, 0x44, 0xc5, 0x06, 0x78, 0x17, 0xb3, 0x7f, 0x50, 0xeb, 0x06, 0x83, + 0xff, 0xfa, 0x06, 0x83, 0xff, 0x1b, 0x04, 0x38, 0x04, 0x05, 0x33, 0x04, + 0x43, 0x04, 0x40, 0x20, 0x07, 0x4f, 0x06, 0x28, 0x17, 0xc0, 0x0e, 0xf3, + 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x04, 0x0a, 0x08, 0x0a, 0x08, 0x0b, 0x00, + 0x04, 0x04, 0x09, 0x09, 0x09, 0x0a, 0x04, 0x04, 0x00, 0x04, 0x04, 0x93, + 0x1f, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x06, 0x53, 0xed, 0x30, 0xf3, 0x30, + 0xd0, 0x30, 0x05, 0xeb, 0x30, 0xc7, 0x30, 0xa3, 0x06, 0x48, 0x1d, 0x4c, + 0x2f, 0xa9, 0x15, 0x6d, 0x00, 0x62, 0x2e, 0x33, 0x72, 0x2b, 0x35, 0x79, + 0x06, 0x28, 0x97, 0xef, 0xb0, 0x7f, 0x06, 0x18, 0x1b, 0xd0, 0xff, 0x65, + 0x2f, 0xbd, 0x06, 0xd0, 0xff, 0x05, 0xf9, 0x9b, 0xd1, 0xff, 0x40, 0xed, + 0x06, 0x0a, 0x1b, 0x26, 0x4f, 0xf4, 0x5d, 0x2c, 0x7b, 0x80, 0x06, 0x78, + 0x15, 0x00, 0x00, 0x6c, 0xb8, 0x14, 0xbc, 0x74, 0x1b, 0xb9, 0x14, 0xb5, + 0x06, 0x78, 0x19, 0xf2, 0xff, 0x6a, 0x05, 0xef, 0xb3, 0x06, 0xf2, 0x7f, + 0x00, 0x1b, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x5c, 0x30, 0x28, + 0x19, 0x34, 0x06, 0x28, 0x1b, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, + 0x05, 0x0b, 0x00, 0x09, 0x0b, 0x09, 0x0c, 0x05, 0x05, 0x0a, 0x0a, 0x00, + 0x0a, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x55, 0x20, 0x41, 0x88, 0x28, 0x17, + 0x07, 0x53, 0xc8, 0x30, 0xec, 0x28, 0x19, 0x44, 0xc6, 0x28, 0x15, 0xce, + 0x30, 0xfb, 0x28, 0x19, 0xeb, 0x30, 0x62, 0xc8, 0x40, 0x07, 0x38, 0x27, + 0xb8, 0x30, 0xa7, 0x05, 0x08, 0x29, 0x54, 0xd4, 0x2f, 0xa9, 0x3f, 0x27, + 0x74, 0x2f, 0xb7, 0x6e, 0x28, 0x23, 0x2d, 0x00, 0x11, 0x41, 0x00, 0x6c, + 0x20, 0x0d, 0x6f, 0x00, 0x20, 0x20, 0x09, 0xb1, 0x37, 0xa9, 0x67, 0x04, + 0xcf, 0xc7, 0xd0, 0x7f, 0x2d, 0x00, 0x48, 0x2f, 0x35, 0x78, 0x75, 0x20, + 0x8d, 0x30, 0x87, 0x05, 0x10, 0x7d, 0x00, 0x30, 0xff, 0x53, 0x00, 0xfc, + 0xd7, 0x29, 0x21, 0x31, 0x0f, 0x72, 0x29, 0x33, 0x6c, 0x04, 0xef, 0xc3, + 0x07, 0xd1, 0x7f, 0x00, 0x51, 0xff, 0x60, 0x69, 0x2a, 0x3b, 0x04, 0x7f, + 0xcb, 0x79, 0x72, 0x26, 0x4f, 0x82, 0x00, 0x84, 0xfa, 0x8b, 0x2d, 0x00, + 0x0a, 0x4e, 0x3f, 0x04, 0x96, 0xea, 0x8f, 0x70, 0x67, 0x05, 0xd8, 0x23, + 0xb8, 0xd2, 0x00, 0x0c, 0xb8, 0xf0, 0xd2, 0x78, 0xb1, 0x4c, 0xc5, 0x00, + 0xa0, 0xd1, 0x44, 0xc5, 0x14, 0xb5, 0x1c, 0xc8, 0xd5, 0x05, 0xd8, 0x1f, + 0x00, 0x13, 0x7f, 0x5a, 0x2e, 0xbd, 0x69, 0x2b, 0xa3, 0x2d, 0x23, 0x9b, + 0xd4, 0x05, 0x12, 0x83, 0x00, 0xb3, 0xff, 0xc1, 0x05, 0x23, 0xff, 0x22, + 0x28, 0x0f, 0x35, 0x04, 0x14, 0x3d, 0x04, 0x42, 0x28, 0x13, 0x3d, 0x28, + 0x23, 0x2d, 0x00, 0x07, 0x10, 0x04, 0x3b, 0x04, 0x4c, 0x20, 0x0f, 0x50, + 0x0b, 0x38, 0x2b, 0x1c, 0x34, 0x04, 0x36, 0x20, 0x23, 0x0e, 0x93, 0x7f, + 0x10, 0x0c, 0xb0, 0x7f, 0x06, 0x11, 0x00, 0x12, 0x12, 0x11, 0x11, 0x06, + 0x06, 0x11, 0x11, 0x80, 0x30, 0x05, 0x06, 0x06, 0xc2, 0x20, 0xe8, 0x07, + 0x00, 0x03, 0x00, 0x08, 0x53, 0xd9, 0x30, 0xcd, 0x28, 0x09, 0x04, 0xf7, + 0xfd, 0xad, 0x00, 0x9f, 0xff, 0x56, 0x48, 0x15, 0x65, 0x48, 0x09, 0x06, + 0x50, 0x7f, 0xe9, 0x28, 0x95, 0x7b, 0xe9, 0x48, 0x97, 0x05, 0xdd, 0x29, + 0xf0, 0xff, 0x30, 0x7f, 0x6e, 0x0e, 0x61, 0x7f, 0x06, 0x91, 0xff, 0x03, + 0x01, 0x5a, 0x3c, 0x5c, 0x58, 0x62, 0x05, 0xd8, 0x0b, 0xbf, 0xff, 0x03, + 0xa0, 0xbc, 0x24, 0xb1, 0xa0, 0xd1, 0x05, 0xd8, 0x0b, 0x07, 0xd3, 0x7f, + 0xae, 0x06, 0xd3, 0xff, 0x12, 0x48, 0x15, 0x35, 0x48, 0x07, 0x10, 0x06, + 0x31, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x07, 0x2a, 0x14, 0x14, 0x20, 0x01, + 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x00, 0x07, 0x4e, 0x20, 0xc5, + 0x08, 0x00, 0x00, 0x09, 0x02, 0x53, 0xd5, 0x30, 0xea, 0x30, 0xa6, 0x20, + 0x03, 0xfb, 0x44, 0x30, 0x38, 0x21, 0xc1, 0x30, 0xa2, 0x20, 0x09, 0xb8, + 0x30, 0x55, 0xe5, 0x20, 0x15, 0xa2, 0x05, 0x48, 0x2d, 0x46, 0x2f, 0xaf, + 0x69, 0x2f, 0xa1, 0x55, 0x6c, 0x2f, 0xaf, 0x20, 0x88, 0x25, 0x7a, 0x2f, + 0xbd, 0x61, 0x2e, 0xb1, 0x55, 0x47, 0x80, 0x1b, 0x61, 0x04, 0xc0, 0x7f, + 0x6f, 0x40, 0x81, 0x2d, 0xe8, 0x25, 0x1e, 0x20, 0x00, 0x6a, 0x60, 0x99, + 0x3f, 0xd1, 0x38, 0xbd, 0x04, 0x70, 0xff, 0x61, 0xa0, 0x60, 0x7f, 0x4a, + 0x61, 0x09, 0x73, 0x00, 0x63, 0x00, 0x68, 0xfd, 0xa1, 0x0f, 0x04, 0x98, + 0x35, 0xb1, 0x7f, 0x30, 0xff, 0x06, 0x51, 0x7f, 0xf0, 0x7f, 0x63, 0x61, + 0xff, 0xc0, 0x71, 0x0f, 0x04, 0x71, 0xfd, 0x00, 0x00, 0x17, 0x5f, 0x59, + 0x75, 0x10, 0x29, 0x52, 0x2d, 0x48, 0x1f, 0xaf, 0x65, 0x31, 0x67, 0x08, + 0x29, 0x52, 0x9a, 0x4e, 0x05, 0xb8, 0x25, 0x04, 0xd5, 0xac, 0x04, 0xb9, + 0xb8, 0xc6, 0xac, 0xb9, 0x38, 0x1f, 0x58, 0xce, 0x00, 0x44, 0xc5, 0x04, + 0xc9, 0xac, 0xb9, 0x44, 0xc5, 0xea, 0x05, 0x98, 0x27, 0x07, 0x91, 0xff, + 0x72, 0x7d, 0xe9, 0x00, 0x21, 0xfd, 0x6e, 0x04, 0x83, 0xff, 0x24, 0x00, + 0x04, 0x40, 0x04, 0x38, 0x04, 0x43, 0x04, 0x3b, 0xaa, 0x20, 0x05, 0x2d, + 0x88, 0x25, 0x46, 0x20, 0x13, 0x4f, 0x20, 0x0f, 0x14, 0x2e, 0x04, 0x36, + 0x60, 0x1b, 0x4f, 0x04, 0x68, 0x35, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, + 0x7f, 0x08, 0x00, 0x08, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x07, 0x20, + 0x07, 0x13, 0x20, 0x05, 0x08, 0x08, 0x74, 0x20, 0xca, 0x00, 0x09, 0x00, + 0x00, 0x0a, 0x53, 0xa8, 0x30, 0xdf, 0x80, 0x48, 0x03, 0xfb, 0x30, 0xed, + 0x30, 0xde, 0x30, 0xfc, 0x0c, 0x30, 0xcb, 0x30, 0xe3, 0x05, 0x48, 0x0f, + 0x7f, 0xff, 0x45, 0x00, 0x62, 0x6d, 0x2f, 0xa9, 0x57, 0xf9, 0x2d, 0x00, + 0x52, 0x2e, 0xb5, 0x6d, 0xb5, 0x28, 0x11, 0x67, 0x04, 0xa4, 0x09, 0xdf, + 0xff, 0xc9, 0x80, 0x7f, 0x65, 0xe0, 0x7f, 0xe8, 0x04, 0x38, 0x05, 0x08, + 0x10, 0xff, 0x08, 0x50, 0x7f, 0xf1, 0x05, 0x61, 0xfd, 0x00, 0x00, 0x7e, + 0x10, 0x82, 0x73, 0x7c, 0x38, 0x0b, 0x2d, 0x00, 0x57, 0x7f, 0x0c, 0x6c, + 0x9a, 0x85, 0x6d, 0x05, 0xb8, 0x13, 0x3f, 0xff, 0xd0, 0xc5, 0x20, 0x00, + 0xbc, 0x38, 0x09, 0x5c, 0xb8, 0xc8, 0xb9, 0xd0, 0x6c, 0xb0, 0x05, 0x98, + 0x0f, 0x07, 0xb2, 0x7f, 0xed, 0x00, 0x03, 0xff, 0x05, 0x73, 0xfd, 0x00, + 0x00, 0x18, 0x2d, 0x04, 0x3c, 0x28, 0x17, 0x57, 0xf9, 0x2d, 0x00, 0x20, + 0x2b, 0x04, 0x3e, 0x20, 0x0f, 0x30, 0x28, 0x1b, 0x4c, 0x04, 0x88, 0x09, + 0x10, 0x01, 0x33, 0xff, 0x80, 0x10, 0x05, 0x90, 0xff, 0x09, 0x07, 0x05, + 0x05, 0x05, 0x07, 0x09, 0x08, 0x09, 0x06, 0x06, 0x14, 0x20, 0x05, 0x09, + 0x09, 0xa5, 0x00, 0x1f, 0x0f, 0x08, 0x00, 0x00, 0x0b, 0x53, 0xc8, 0x03, + 0x30, 0xb9, 0x30, 0xab, 0x30, 0xca, 0x05, 0xc8, 0x0b, 0xbf, 0xfa, 0x75, + 0x54, 0x2f, 0xa9, 0x3f, 0x1d, 0x3c, 0x13, 0x79, 0x06, 0x40, 0x7f, 0x6f, + 0x80, 0x7f, 0xdc, 0x05, 0x58, 0x09, 0x00, 0x30, 0x7f, 0x6b, 0x05, 0xc5, + 0x0b, 0x00, 0x70, 0xff, 0x0e, 0x30, 0x7f, 0x58, 0x62, 0x03, 0xaf, 0x65, + 0x61, 0x53, 0xb3, 0x7e, 0x05, 0xf8, 0x0f, 0x7f, 0xff, 0x01, 0xa0, 0xd1, + 0xa4, 0xc2, 0x74, 0xce, 0x98, 0x06, 0x28, 0x11, 0x8e, 0x07, 0xb2, 0xff, + 0x63, 0x00, 0xe2, 0x2f, 0x27, 0x04, 0x9f, 0x15, 0x00, 0x9f, 0xeb, 0x22, + 0x8b, 0x28, 0x09, 0x41, 0x04, 0x3a, 0x48, 0x0b, 0x30, 0x05, 0x48, 0x09, + 0x07, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xd0, 0x7f, 0x0a, 0x12, 0x11, 0x11, + 0x10, 0x10, 0x0a, 0x00, 0x0a, 0x10, 0x10, 0x10, 0x12, 0x0a, 0x0a, 0x0a, + 0x08, 0x0a, 0x21, 0x1f, 0x00, 0x28, 0x17, 0x0c, 0x53, 0xa6, 0x00, 0x30, + 0xf3, 0x30, 0xd6, 0x30, 0xea, 0x30, 0xa2, 0xa3, 0x06, 0x68, 0x19, 0x55, + 0x2f, 0xaf, 0x62, 0x00, 0x72, 0x06, 0x44, 0x13, 0x3f, 0xff, 0x77, 0x4f, + 0x80, 0x7f, 0x06, 0x38, 0x15, 0xb0, 0xff, 0x65, 0x2f, 0xa3, 0x0e, 0x11, + 0x7f, 0x71, 0xff, 0x40, 0xed, 0x06, 0x61, 0xff, 0xc1, 0x7f, 0x03, 0x5e, + 0xcc, 0x91, 0x20, 0x9a, 0x4e, 0x06, 0x78, 0x17, 0xc0, 0xc6, 0x0c, 0xbe, + 0xac, 0x1a, 0xb9, 0x44, 0xc5, 0x06, 0x78, 0x17, 0x93, 0x7f, 0xeb, 0x06, + 0x4c, 0x18, 0xda, 0x80, 0x06, 0xe3, 0xff, 0x23, 0x04, 0x3c, 0x04, 0x31, + 0x04, 0x40, 0x0e, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x28, 0x15, 0x07, 0x93, + 0x7f, 0x10, 0x0e, 0x70, 0x7f, 0x0b, 0x00, 0x13, 0x0c, 0x13, 0x12, 0x12, + 0x0b, 0x0b, 0x12, 0x00, 0x12, 0x12, 0x13, 0x0b, 0x0b, 0x0b, 0x0b, 0xa8, + 0x20, 0x1e, 0xce, 0x28, 0x17, 0x0d, 0x53, 0xde, 0x30, 0xeb, 0x35, 0x30, + 0xb1, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x4d, 0x2f, 0xa9, 0x72, 0x2f, 0xaf, + 0x6b, 0x68, 0x06, 0x67, 0x97, 0xb0, 0x7f, 0x73, 0x06, 0x80, 0xff, 0x6b, + 0x06, 0x68, 0x15, 0x07, 0x11, 0x7f, 0x47, 0x4c, 0x2e, 0xa9, 0x73, 0x00, + 0x20, 0x82, 0x07, 0x30, 0x0d, 0x05, 0xbf, 0xb7, 0x02, 0x6c, 0x9a, 0x14, + 0x5c, 0xef, 0x51, 0x06, 0x78, 0x15, 0x00, 0x01, 0x00, 0xc8, 0xb9, 0x74, + 0xb9, 0x00, 0xcf, 0x06, 0x78, 0x15, 0xc4, 0x07, 0xd3, 0x7f, 0x06, 0x3c, + 0x97, 0x1c, 0x04, 0x30, 0x28, 0x15, 0x3a, 0x04, 0x70, 0x35, 0x06, 0x48, + 0x15, 0x0f, 0x11, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0c, 0x0c, 0x0a, 0x0c, + 0x09, 0x0a, 0x0a, 0x0c, 0x0c, 0x28, 0x13, 0x0c, 0x0c, 0x20, 0x01, 0x00, + 0x04, 0x1f, 0x9b, 0x09, 0x00, 0x00, 0x0e, 0x53, 0x10, 0xa2, 0x30, 0xd6, + 0x28, 0x19, 0xc3, 0x30, 0xc4, 0x30, 0x51, 0xa3, 0x06, 0x48, 0x1d, 0x41, + 0x4f, 0xad, 0x75, 0x00, 0x7a, 0x20, 0x01, 0x7e, 0x6f, 0x06, 0x2f, 0xb1, + 0xb0, 0x7f, 0x06, 0x38, 0x19, 0xd0, 0x7f, 0x06, 0x18, 0x1b, 0x07, 0x91, + 0x7f, 0x6f, 0x80, 0x06, 0x49, 0x97, 0x3f, 0x96, 0x03, 0x5e, 0x81, 0x9c, + 0x50, 0x40, 0x4f, 0x06, 0x78, 0x19, 0x44, 0xc5, 0x0c, 0xbe, 0xe8, 0xb8, + 0x38, 0x08, 0xcd, 0x06, 0x78, 0x19, 0x07, 0x92, 0x7f, 0x06, 0x33, 0xfd, + 0x00, 0x00, 0x10, 0x22, 0x04, 0x31, 0x28, 0x17, 0x43, 0x04, 0x46, 0x20, + 0x01, 0x3e, 0xe2, 0x06, 0x28, 0x1b, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, + 0x7f, 0x0d, 0x01, 0x01, 0x20, 0x01, 0x0d, 0x80, 0x40, 0x06, 0x0d, 0x0d, + 0x0d, 0x0d, 0x1d, 0x1e, 0x85, 0x80, 0x28, 0x17, 0x0f, 0x53, 0xe2, 0x30, + 0xea, 0x30, 0xfc, 0x30, 0x30, 0xbc, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x6f, + 0x00, 0x6c, 0x00, 0x70, 0x69, 0x2f, 0xab, 0x06, 0x7c, 0xaf, 0x10, 0x0e, + 0xd0, 0x7f, 0xab, 0x83, 0x29, 0x52, 0x20, 0x5e, 0x58, 0x06, 0x78, 0x15, + 0x00, 0x00, 0xb0, 0xba, 0xac, 0x1a, 0xb9, 0x38, 0xc1, 0x06, 0x78, 0x15, + 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x0d, 0x3b, 0x03, 0x04, 0x38, 0x04, 0x37, + 0x04, 0x35, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x10, 0x0e, 0x0d, + 0x0b, 0x20, 0x01, 0x0e, 0x0e, 0x0c, 0x0c, 0x40, 0x0c, 0x20, 0x05, 0x0e, + 0x0e, 0x8d, 0x1d, 0x6c, 0x0a, 0x80, 0x2b, 0x2d, 0x53, 0xab, 0x30, 0xf3, + 0x30, 0xd1, 0x30, 0x10, 0xcb, 0x30, 0xa2, 0x06, 0x68, 0x19, 0x43, 0x00, + 0x61, 0x00, 0x15, 0x6d, 0x00, 0x70, 0x20, 0x05, 0x6e, 0x28, 0x1d, 0x61, + 0x06, 0xe0, 0x7f, 0xbc, 0x06, 0x18, 0x9b, 0x4b, 0xe0, 0x7f, 0x05, 0xfd, + 0xb1, 0x07, 0xd1, 0x7f, 0x06, 0x11, 0xff, 0x4e, 0x57, 0x02, 0x15, 0x5e, + 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x78, 0x19, 0x84, 0x01, 0xce, 0x0c, 0xd3, + 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0x78, 0x19, 0xa8, 0xd3, 0x7f, 0xeb, 0x06, + 0x83, 0xff, 0xe2, 0x06, 0x63, 0xff, 0x1a, 0x04, 0x30, 0x0a, 0x04, 0x3c, + 0x04, 0x3f, 0x20, 0x05, 0x3d, 0x28, 0x1d, 0x4f, 0xe0, 0x06, 0x08, 0x1b, + 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0f, 0x06, 0x04, 0x08, 0x04, + 0x00, 0x05, 0x0f, 0x0f, 0x05, 0x05, 0x07, 0x06, 0x0f, 0x02, 0x0f, 0x0f, + 0x0f, 0x0a, 0x1d, 0x22, 0x28, 0x17, 0x11, 0x02, 0x53, 0xd7, 0x30, 0xfc, + 0x30, 0xea, 0x06, 0x88, 0x15, 0x00, 0x2e, 0x00, 0x41, 0x28, 0x13, 0x75, + 0x4f, 0xb1, 0x06, 0x18, 0x13, 0x3f, 0xff, 0x50, 0xab, 0x2f, 0xaf, 0x75, + 0x2f, 0xaf, 0x6c, 0x2f, 0xb5, 0x65, 0x2f, 0xb5, 0x06, 0x90, 0xff, 0xc6, + 0x06, 0x18, 0x13, 0x50, 0xff, 0x75, 0x00, 0x67, 0x06, 0xa1, 0x7f, 0x06, + 0xf1, 0xff, 0x6e, 0x10, 0x66, 0x29, 0x52, 0x06, 0x98, 0x15, 0x00, 0x00, + 0x80, 0xd4, 0x3d, 0xac, 0xb9, 0x06, 0x98, 0x15, 0xb3, 0x7f, 0x06, 0x18, + 0x13, 0x73, 0xff, 0xfa, 0x06, 0xa3, 0xff, 0x47, 0x10, 0x28, 0x13, 0x43, + 0x04, 0x3b, 0x06, 0x48, 0x13, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x00, 0x10, 0x03, 0x0e, 0x03, 0x0d, 0x02, 0x10, 0x10, 0x00, 0x02, 0x02, + 0x02, 0x03, 0x10, 0x10, 0x10, 0x10, 0x00, 0x3d, 0x1d, 0xfd, 0x0b, 0x00, + 0x00, 0x12, 0x53, 0x15, 0xd0, 0x30, 0xb8, 0x28, 0x17, 0xab, 0x28, 0x1d, + 0xbf, 0x06, 0x48, 0x1b, 0x51, 0x42, 0x2f, 0xaf, 0x73, 0x47, 0x97, 0x69, + 0x00, 0x63, 0x2f, 0xbb, 0x6b, 0x74, 0x05, 0xee, 0xb3, 0x00, 0x10, 0x7f, + 0x65, 0x06, 0x80, 0xff, 0x6b, 0x07, 0x40, 0xff, 0x0d, 0xd0, 0x7f, 0x00, + 0xf4, 0x5d, 0x7f, 0x89, 0x29, 0x52, 0x61, 0x53, 0x20, 0x54, 0x58, 0x06, + 0x58, 0x1b, 0x14, 0xbc, 0xe4, 0xc2, 0xac, 0x06, 0xb9, 0x74, 0xce, 0xc0, + 0xd0, 0x06, 0x58, 0x1b, 0x0e, 0xf1, 0xff, 0x11, 0x0d, 0x04, 0x30, 0x04, + 0x37, 0x28, 0x15, 0x38, 0x19, 0x3a, 0x20, 0x0b, 0x70, 0x42, 0x20, 0x0f, + 0x10, 0x05, 0xb3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x11, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x03, 0x11, 0x11, 0x03, 0x03, 0x03, 0x04, 0x01, 0x11, 0x11, + 0x11, 0x11, 0xe5, 0x1c, 0x3a, 0x28, 0x17, 0x01, 0x13, 0x53, 0xab, 0x30, + 0xe9, 0x30, 0xd6, 0x28, 0x19, 0x45, 0xa2, 0x06, 0x48, 0x15, 0x00, 0x00, + 0x43, 0x2e, 0xa7, 0x6c, 0x2e, 0xab, 0x1e, 0x62, 0x00, 0x72, 0x06, 0x4e, + 0xb3, 0xb0, 0x7f, 0x05, 0xd8, 0x11, 0x5f, 0xff, 0x4b, 0x8c, 0xc0, 0xff, + 0x65, 0x00, 0x6e, 0x0e, 0xa1, 0x7f, 0x06, 0x3e, 0x33, 0x61, 0x53, 0x00, + 0xc9, 0x62, 0x03, 0x5e, 0xcc, 0x91, 0x9a, 0x4e, 0x80, 0x06, 0x58, 0x17, + 0x7c, 0xce, 0x7c, 0xb7, 0x0c, 0xbe, 0xac, 0x1a, 0xb9, 0x44, 0xc5, 0x06, + 0x58, 0x17, 0xd3, 0x7f, 0xeb, 0x06, 0x63, 0xff, 0xe1, 0xa8, 0x06, 0x83, + 0xff, 0x1a, 0x28, 0x17, 0x3b, 0x28, 0x1b, 0x31, 0x04, 0x40, 0xb8, 0x28, + 0x1d, 0x4f, 0x05, 0xc8, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x06, 0xf0, 0xff, + 0x12, 0x05, 0x03, 0x00, 0x07, 0x03, 0x04, 0x12, 0x12, 0x04, 0x04, 0x06, + 0x00, 0x05, 0x12, 0x12, 0x12, 0x12, 0xa9, 0x1b, 0xcc, 0x82, 0x28, 0x17, + 0x14, 0x53, 0xb7, 0x30, 0xc1, 0x06, 0xa8, 0x15, 0x00, 0x37, 0x00, 0x53, + 0x4f, 0xa7, 0x3f, 0xaf, 0x79, 0x06, 0xe0, 0x7f, 0x06, 0x38, 0x15, 0x50, + 0xff, 0x7c, 0x7a, 0x6f, 0xaf, 0x06, 0x18, 0x15, 0xb1, 0x7f, 0x06, 0x39, + 0x95, 0x07, 0x10, 0x7f, 0x7f, 0x89, 0x0c, 0x7f, 0x89, 0xcc, 0x91, 0x06, + 0x58, 0x13, 0x3f, 0xff, 0xdc, 0xc2, 0x3d, 0x60, 0xce, 0x06, 0x98, 0x15, + 0xd1, 0xff, 0x06, 0x18, 0x15, 0x73, 0xff, 0xed, 0x06, 0x82, 0x7f, 0x57, + 0x21, 0x28, 0x0d, 0x46, 0x28, 0x11, 0x3b, 0x06, 0x48, 0x15, 0x07, 0xb4, + 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x13, 0x10, 0x10, 0x10, 0x0f, 0x0f, + 0x13, 0x13, 0x00, 0x0f, 0x0f, 0x0f, 0x10, 0x13, 0x13, 0x13, 0x13, 0x00, + 0x1b, 0x1b, 0x7f, 0x09, 0x00, 0x00, 0x15, 0x53, 0x00, 0xb5, 0x30, 0xeb, + 0x30, 0xc7, 0x30, 0xfc, 0x30, 0x14, 0xcb, 0x30, 0xe3, 0x06, 0x48, 0x1b, + 0x53, 0x2f, 0xaf, 0x72, 0x00, 0x5a, 0x64, 0x2f, 0x2b, 0x6e, 0x06, 0x4e, + 0xaf, 0x70, 0x7f, 0x61, 0x2f, 0xad, 0x67, 0xfb, 0x2f, 0xad, 0x05, 0xf8, + 0x1d, 0xd0, 0xff, 0x06, 0x18, 0x19, 0x71, 0x7f, 0x65, 0x40, 0xfd, 0x06, + 0x3c, 0xaf, 0x50, 0x65, 0x60, 0x7f, 0xf1, 0x06, 0x48, 0x97, 0x92, 0x64, + 0x01, 0x4e, 0x80, 0x06, 0x98, 0x15, 0x00, 0x00, 0xac, 0xc0, 0x74, 0xb9, + 0x70, 0x1e, 0xb3, 0xd0, 0xb0, 0x06, 0x98, 0x17, 0xb3, 0x7f, 0x06, 0x18, + 0x19, 0x92, 0x7f, 0x6e, 0x20, 0x00, 0x68, 0x06, 0x2f, 0x2f, 0x21, 0x04, + 0x30, 0x04, 0x40, 0x2e, 0x04, 0x34, 0x28, 0x1d, 0x3d, 0x06, 0x48, 0x19, + 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x14, 0x80, 0x28, 0x10, 0x0e, + 0x06, 0x14, 0x14, 0x0e, 0x0e, 0x0e, 0x00, 0x0f, 0x14, 0x14, 0x14, 0x14, + 0xe3, 0x1b, 0x79, 0x44, 0x06, 0x00, 0x3f, 0xff, 0x01, 0x09, 0x07, 0x20, + 0x01, 0x01, 0x01, 0x10, 0x08, 0x08, 0x08, 0x20, 0x05, 0x01, 0x01, 0x02, + 0x02, 0x08, 0x13, 0x02, 0x13, 0x13, 0x20, 0x05, 0x13, 0x04, 0x02, 0x40, + 0x02, 0x20, 0x01, 0x03, 0x0e, 0x0d, 0x0e, 0x0c, 0x0e, 0x04, 0x03, 0x03, + 0x0d, 0x0d, 0x0d, 0x20, 0x05, 0x03, 0x03, 0x00, 0x04, 0x0a, 0x08, 0x0a, + 0x08, 0x0b, 0x04, 0x04, 0x00, 0x09, 0x09, 0x09, 0x0a, 0x04, 0x04, 0x04, + 0x04, 0x00, 0x05, 0x0b, 0x09, 0x0b, 0x09, 0x0c, 0x05, 0x05, 0x00, 0x0a, + 0x0a, 0x0a, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x00, 0x06, 0x11, 0x12, 0x12, + 0x11, 0x11, 0x06, 0x06, 0x22, 0x11, 0x11, 0x30, 0x05, 0x06, 0x06, 0x07, + 0x30, 0x7c, 0x14, 0x50, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x07, + 0x08, 0x08, 0xc6, 0x20, 0x15, 0x20, 0x6c, 0x07, 0x07, 0x13, 0x20, 0x72, + 0x20, 0x74, 0x07, 0x81, 0x20, 0x35, 0x07, 0x09, 0x09, 0x06, 0x06, 0x14, + 0x20, 0x05, 0xc2, 0x20, 0x54, 0x20, 0x3d, 0x10, 0x10, 0x0a, 0x0a, 0x28, + 0xd6, 0x12, 0x80, 0x20, 0x53, 0x0a, 0x0b, 0x13, 0x0c, 0x13, 0x12, 0x12, + 0x00, 0x0b, 0x0b, 0x12, 0x12, 0x12, 0x13, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, + 0x0c, 0x0c, 0x0a, 0x0c, 0x0a, 0x0a, 0x34, 0x0c, 0x0c, 0x40, 0x0a, 0x20, + 0x01, 0x0d, 0x30, 0xb4, 0x01, 0x0d, 0xc2, 0x40, 0x06, 0x20, 0xa3, 0x0d, + 0x0e, 0x0d, 0x0b, 0x20, 0x01, 0x0e, 0x60, 0x0e, 0x30, 0x1a, 0x20, 0xfb, + 0x0e, 0x0f, 0x06, 0x04, 0x08, 0x0a, 0x04, 0x05, 0x0f, 0x0f, 0x20, 0x64, + 0x06, 0x29, 0x23, 0x0f, 0x00, 0x10, 0x03, 0x0e, 0x03, 0x0d, 0x02, 0x10, + 0x10, 0xc0, 0x30, 0xda, 0x29, 0x3a, 0x10, 0x11, 0x04, 0x02, 0x04, 0x02, + 0x18, 0x03, 0x11, 0x11, 0x30, 0xda, 0x30, 0xb3, 0x12, 0x05, 0x03, 0x00, + 0x07, 0x03, 0x04, 0x12, 0x12, 0x04, 0x04, 0x06, 0x5c, 0x05, 0x20, 0x73, + 0x12, 0xf9, 0x5f, 0xf1, 0x57, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x54, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x7f, 0x28, 0x20, + 0x11, 0x00, 0x00, 0x00, 0x01, 0x54, 0xe9, 0x30, 0xc8, 0x30, 0xd3, 0x10, + 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x4c, 0x00, 0x61, 0x00, 0x06, 0x74, + 0x00, 0x76, 0x00, 0x69, 0x20, 0x07, 0x06, 0x50, 0x7f, 0x65, 0x82, 0x20, + 0x7f, 0x74, 0x00, 0x6f, 0x00, 0x6e, 0x20, 0x83, 0x65, 0xa3, 0x06, 0x80, + 0x7f, 0x6c, 0x21, 0x07, 0x6e, 0x00, 0x64, 0x06, 0xe0, 0xff, 0x06, 0x11, + 0x83, 0xc0, 0x51, 0x7f, 0x06, 0x70, 0x7d, 0x00, 0x00, 0xc9, 0x62, 0x31, + 0x81, 0x08, 0xf4, 0x7e, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0x7c, 0xb7, 0xb8, + 0x07, 0xd2, 0x44, 0xbe, 0x44, 0xc5, 0x06, 0x93, 0x7f, 0x32, 0xff, 0x06, + 0x72, 0x7d, 0xa0, 0x73, 0x7f, 0xf3, 0x06, 0x81, 0xff, 0x1b, 0x04, 0x30, + 0x04, 0x42, 0x01, 0x04, 0x32, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0e, 0x54, + 0xff, 0x9e, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, + 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, + 0x30, 0x01, 0x55, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x27, 0xeb, 0x88, 0x13, 0x00, 0x00, 0x00, + 0x02, 0x55, 0xde, 0x30, 0xbb, 0x30, 0xeb, 0x10, 0x30, 0x0c, 0x77, 0x06, + 0x78, 0x1d, 0x4d, 0x00, 0x61, 0x00, 0x01, 0x73, 0x00, 0x65, 0x00, 0x72, + 0x00, 0x75, 0x10, 0x16, 0x40, 0x7f, 0x00, 0x6c, 0x9a, 0x5e, 0x58, 0x62, + 0x53, 0x3a, 0x53, 0x80, 0x06, 0x7b, 0x1d, 0xc8, 0xb9, 0x38, 0xc1, 0xe8, + 0xb8, 0x20, 0x10, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x53, 0x7f, 0x1c, 0x04, + 0x30, 0x04, 0x00, 0x41, 0x04, 0x35, 0x04, 0x40, 0x04, 0x43, 0x04, 0x8a, + 0x10, 0x1e, 0x34, 0xff, 0x01, 0x05, 0x05, 0x20, 0x01, 0x01, 0x20, 0x06, + 0x04, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x55, 0x79, 0x30, + 0x15, 0xec, 0x30, 0xa2, 0x06, 0xa8, 0x17, 0x42, 0x48, 0x13, 0x65, 0x28, + 0x1d, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x2f, 0x4f, 0xcc, 0x91, 0x9a, 0x4e, + 0x06, 0x98, 0x17, 0x03, 0xa0, 0xbc, 0x08, 0xb8, 0x44, 0xc5, 0x06, 0x98, + 0x17, 0x0e, 0xf3, 0x7f, 0x5a, 0x11, 0x48, 0x13, 0x35, 0x28, 0x1d, 0x10, + 0x1e, 0x54, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x40, 0x02, 0x40, 0x06, 0x02, + 0x02, 0x02, 0x02, 0x46, 0xeb, 0x40, 0xba, 0x28, 0x17, 0x04, 0x55, 0xd6, + 0x30, 0xfc, 0x30, 0x0a, 0xbf, 0x30, 0xfb, 0x30, 0x30, 0x07, 0xc6, 0x06, + 0x28, 0x1f, 0x42, 0x8a, 0x2f, 0xa7, 0x74, 0x00, 0x68, 0x2f, 0xb5, 0x2d, + 0x80, 0x0b, 0x65, 0x80, 0x10, 0x15, 0xa0, 0x7f, 0x03, 0x5e, 0x54, 0x58, + 0x03, 0x5e, 0xf0, 0x40, 0x6c, 0x06, 0x78, 0x19, 0x80, 0xbd, 0xc0, 0xd0, + 0x80, 0xbd, 0x30, 0x4c, 0xd1, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x11, + 0x04, 0x43, 0x04, 0x57, 0x42, 0x28, 0x15, 0x2d, 0x60, 0x09, 0x35, 0x05, + 0xe8, 0x1f, 0x10, 0x17, 0x04, 0xff, 0x38, 0x0c, 0x20, 0x02, 0x03, 0x40, + 0x06, 0x03, 0x03, 0x03, 0x03, 0x8b, 0x00, 0xeb, 0x18, 0x14, 0x00, 0x00, + 0x05, 0x55, 0xec, 0x0d, 0x30, 0xea, 0x30, 0xd9, 0x06, 0x28, 0x0f, 0x7f, + 0xff, 0x4c, 0x4f, 0xaf, 0x18, 0x69, 0x00, 0x62, 0x05, 0xc8, 0x0d, 0x10, + 0x0f, 0x90, 0x7f, 0xb1, 0x83, 0xcc, 0x10, 0x91, 0x1d, 0x8d, 0x06, 0x78, + 0x15, 0x00, 0x00, 0x08, 0xb8, 0x0d, 0xac, 0xb9, 0xa0, 0xbc, 0x06, 0x78, + 0x15, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x09, 0x06, 0x40, 0x04, 0x38, 0x04, + 0x31, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, 0x04, 0x90, 0x38, 0x0c, + 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x00, 0x77, 0xeb, 0xf3, + 0x13, 0x00, 0x00, 0x06, 0x55, 0x00, 0xde, 0x30, 0xd5, 0x30, 0xa7, 0x30, + 0xc6, 0x30, 0x15, 0xf3, 0x30, 0xb0, 0x06, 0x48, 0x1d, 0x4d, 0x2f, 0xa9, + 0x66, 0x2f, 0xa1, 0x44, 0x74, 0x2f, 0xa5, 0x6e, 0x00, 0x67, 0x10, 0x16, + 0x00, 0x7f, 0x6c, 0x9a, 0x08, 0x39, 0x8d, 0xd5, 0x6e, 0x06, 0x98, 0x17, + 0xc8, 0xb9, 0x98, 0x18, 0xd3, 0x61, 0xd1, 0x06, 0x98, 0x17, 0x0e, 0xf3, + 0x7f, 0x1c, 0x04, 0x30, 0x28, 0x04, 0x44, 0x28, 0x1b, 0x42, 0x28, 0x1f, + 0x3d, 0x04, 0x33, 0xd2, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x05, + 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x05, 0x82, 0x20, 0x05, 0x05, 0x05, + 0xcc, 0xea, 0x5e, 0x28, 0x17, 0x07, 0x00, 0x55, 0xe2, 0x30, 0xcf, 0x30, + 0xfc, 0x30, 0xec, 0x22, 0x30, 0xb9, 0x28, 0x1f, 0xfc, 0x30, 0xaf, 0x06, + 0x08, 0x1b, 0x4d, 0x0a, 0x00, 0x6f, 0x00, 0x68, 0x28, 0x1b, 0x6c, 0x2f, + 0xb7, 0x27, 0x02, 0x00, 0x73, 0x00, 0x20, 0x00, 0x48, 0x20, 0x11, 0x65, + 0x20, 0x00, 0x6b, 0x10, 0x15, 0x60, 0x7f, 0xab, 0x83, 0xc8, 0x54, 0xb1, + 0x01, 0x83, 0xaf, 0x65, 0xe1, 0x80, 0x4b, 0x51, 0x06, 0x38, 0x1d, 0x00, + 0xa8, 0xba, 0x60, 0xd5, 0x08, 0xb8, 0xa4, 0xc2, 0x0c, 0xc4, 0xd6, 0x6c, + 0xd0, 0x06, 0x38, 0x1d, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x14, 0x3e, 0x04, + 0x45, 0x28, 0x1b, 0x3b, 0x28, 0x1b, 0x41, 0x04, 0x01, 0x2d, 0x00, 0x25, + 0x04, 0x43, 0x04, 0x3a, 0x05, 0xa8, 0x1d, 0x94, 0x10, 0x16, 0xf4, 0xff, + 0x06, 0x06, 0x70, 0x01, 0x07, 0x40, 0x0a, 0x8f, 0xea, 0x50, 0x88, 0x28, + 0x17, 0x08, 0x28, 0x17, 0xb3, 0x30, 0xc8, 0x30, 0x06, 0xed, 0x30, 0xf3, + 0x30, 0xb0, 0x06, 0x08, 0x13, 0x78, 0x17, 0x6b, 0xae, 0x28, 0x19, 0x6f, + 0x2f, 0xb1, 0x6c, 0x28, 0x23, 0x05, 0xff, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, + 0xab, 0x01, 0x83, 0x0d, 0x97, 0x79, 0x72, 0x86, 0x96, 0x06, 0x38, 0x13, + 0x81, 0x58, 0x17, 0x54, 0xcf, 0xc0, 0xd2, 0x71, 0xb8, 0x06, 0x38, 0x13, + 0xd1, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x3a, 0x28, 0x19, 0x3e, 0x04, 0x42, + 0x28, 0x1b, 0x06, 0x3e, 0x04, 0x3d, 0x04, 0x33, 0x05, 0xa8, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x07, 0x50, 0x07, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x2d, + 0xeb, 0xab, 0x14, 0x00, 0x00, 0x00, 0x09, 0x55, 0xaf, 0x30, 0xa1, 0x30, + 0x00, 0xaf, 0x30, 0xcf, 0x30, 0xb9, 0x30, 0xcd, 0x30, 0x6b, 0xc3, 0x20, + 0x09, 0x05, 0xf8, 0x1b, 0x51, 0x2f, 0xab, 0x63, 0x4f, 0xb1, 0x5f, 0xad, + 0x60, 0x4e, 0x05, 0xaf, 0xab, 0x10, 0x0f, 0x30, 0x7f, 0xa0, 0x52, 0xe5, + 0x67, 0xaf, 0x04, 0x65, 0x85, 0x51, 0x4b, 0x51, 0x06, 0x58, 0x19, 0x74, + 0xce, 0x03, 0x28, 0xcc, 0xa4, 0xc2, 0x25, 0xb1, 0x06, 0x78, 0x17, 0x0e, + 0xf3, 0x7f, 0x44, 0x26, 0x28, 0x07, 0x30, 0x04, 0x47, 0x20, 0x03, 0x41, + 0x04, 0x06, 0x2d, 0x00, 0x1d, 0x04, 0x35, 0x28, 0x25, 0x10, 0x1d, 0xb4, + 0xff, 0x08, 0x51, 0x08, 0x70, 0x01, 0x09, 0x40, 0x0a, 0x94, 0xea, 0x69, + 0x28, 0x17, 0x40, 0x0a, 0x28, 0x17, 0xc6, 0x30, 0xa3, 0x30, 0xf3, 0x30, + 0x68, 0xb0, 0x06, 0x08, 0x11, 0x78, 0x17, 0x75, 0x2f, 0xa9, 0x68, 0x00, + 0x69, 0xc3, 0x06, 0x0f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xe4, 0x53, 0xf7, + 0x5e, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x0e, 0xe0, 0xcf, 0x05, 0xd3, 0x06, + 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x43, 0x03, 0x04, 0x42, 0x04, + 0x38, 0x04, 0x3d, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x28, 0x09, 0x09, + 0x70, 0x01, 0x0a, 0x40, 0x0a, 0x61, 0xea, 0xb4, 0x00, 0x13, 0x00, 0x00, + 0x0b, 0x55, 0xbf, 0x30, 0xfc, 0x00, 0x30, 0xd0, 0x30, 0xfb, 0x30, 0xc4, + 0x30, 0xa7, 0xaa, 0x20, 0x09, 0xab, 0x06, 0x08, 0x1d, 0x54, 0x4f, 0xab, + 0x62, 0x2f, 0xb5, 0x2d, 0xa8, 0x20, 0x0b, 0x73, 0x4f, 0xad, 0x61, 0x10, + 0x15, 0xb0, 0x7f, 0x58, 0xf4, 0x5d, 0x08, 0xc7, 0x91, 0x61, 0x53, 0x06, + 0x78, 0x1b, 0xc0, 0xd0, 0x14, 0x06, 0xbc, 0xb4, 0xcc, 0x74, 0xce, 0x06, + 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x22, 0x0a, 0x04, 0x30, 0x04, 0x31, 0x20, + 0x03, 0x2d, 0x28, 0x21, 0x35, 0x32, 0x04, 0x3a, 0x20, 0x0d, 0x10, 0x1d, + 0xd4, 0xff, 0x0a, 0x0a, 0x70, 0x01, 0x08, 0x84, 0x40, 0x0a, 0x03, 0xeb, + 0x57, 0x14, 0x00, 0x3f, 0xff, 0x01, 0x05, 0x54, 0x05, 0x20, 0x01, 0x01, + 0x20, 0x06, 0x04, 0x20, 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, + 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x24, 0x02, 0x03, 0x30, 0x04, 0x02, + 0x03, 0x40, 0x06, 0x03, 0x03, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, + 0x04, 0x40, 0x06, 0x04, 0x0b, 0x04, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, + 0x20, 0x3d, 0x20, 0x09, 0x95, 0x30, 0x4a, 0x06, 0x06, 0x70, 0x01, 0x07, + 0x50, 0x05, 0x07, 0x70, 0x01, 0x97, 0x50, 0x0a, 0x08, 0x08, 0x70, 0x01, + 0x09, 0x50, 0x05, 0xe8, 0xbf, 0xf0, 0xb7, 0x80, 0x3f, 0xff, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x56, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x85, 0x21, 0xc5, 0x06, 0x00, 0x00, 0x00, 0x01, 0x56, 0xea, 0x30, + 0xd2, 0x30, 0xc6, 0x00, 0x30, 0xf3, 0x30, 0xb7, 0x30, 0xe5, 0x30, 0xbf, + 0x30, 0x30, 0xa4, 0x20, 0x09, 0x05, 0xd8, 0x27, 0x4c, 0x00, 0x69, 0x00, + 0x01, 0x65, 0x00, 0x63, 0x00, 0x68, 0x00, 0x74, 0x20, 0x07, 0x16, 0x6e, + 0x00, 0x73, 0x40, 0x07, 0x69, 0x20, 0x09, 0x10, 0x15, 0x50, 0x7f, 0x17, + 0x00, 0x52, 0x2f, 0x65, 0x66, 0x65, 0xeb, 0x58, 0x7b, 0x40, 0x76, 0x06, + 0x5b, 0x1f, 0xac, 0xb9, 0x88, 0xd7, 0x50, 0xd1, 0x03, 0x88, 0xc2, 0xc0, + 0xd0, 0x78, 0xc7, 0x06, 0x3b, 0xa1, 0x0e, 0xf3, 0x7f, 0x00, 0x1b, 0x04, + 0x38, 0x04, 0x45, 0x04, 0x42, 0x04, 0x05, 0x35, 0x04, 0x3d, 0x04, 0x48, + 0x40, 0x07, 0x39, 0x20, 0x09, 0x9e, 0x10, 0x1d, 0x94, 0xff, 0x01, 0x01, + 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, + 0x30, 0x01, 0x57, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe2, 0x26, 0xfa, 0x11, 0x00, 0x00, 0x00, + 0x02, 0x57, 0xf4, 0x30, 0xa3, 0x30, 0xea, 0x00, 0x30, 0xcb, 0x30, 0xe5, + 0x30, 0xb9, 0x30, 0xde, 0x40, 0x5d, 0x06, 0x18, 0x23, 0x56, 0x00, 0x69, + 0x00, 0x6c, 0x00, 0x46, 0x6e, 0x20, 0x05, 0x75, 0x00, 0x73, 0x06, 0x28, + 0xa2, 0x10, 0x06, 0xf0, 0x7f, 0x43, 0x22, 0x00, 0x6f, 0x21, 0xfd, 0x64, + 0x00, 0x61, 0x20, 0x03, 0x6f, 0x2d, 0x00, 0x20, 0x20, 0x09, 0x65, 0x20, + 0x05, 0x72, 0x15, 0x61, 0x05, 0x0a, 0xb4, 0x00, 0xf4, 0x7e, 0x14, 0x5c, + 0xbd, 0x7e, 0xaf, 0x65, 0x20, 0xbf, 0x53, 0x06, 0x5b, 0x1f, 0x4c, 0xbe, + 0x74, 0xb2, 0xa4, 0x07, 0xc2, 0x20, 0x00, 0xfc, 0xc8, 0x06, 0x5b, 0x9f, + 0x07, 0x73, 0x7f, 0x05, 0x11, 0xe9, 0x80, 0x00, 0x5c, 0xff, 0x12, 0x04, + 0x38, 0x04, 0x3b, 0x04, 0x4c, 0x01, 0x04, 0x3d, 0x04, 0x4e, 0x04, 0x41, + 0x04, 0x10, 0x16, 0x14, 0xff, 0x8a, 0x06, 0xf6, 0xff, 0x01, 0x0a, 0x0a, + 0x20, 0x01, 0x01, 0x20, 0x06, 0x02, 0x91, 0x20, 0x05, 0x01, 0x01, 0x58, + 0x17, 0x03, 0x57, 0xa2, 0x28, 0x15, 0x05, 0xfc, 0x30, 0xc8, 0x30, 0xa5, + 0x06, 0x68, 0x17, 0x41, 0x28, 0x15, 0x1e, 0x79, 0x00, 0x74, 0x06, 0x68, + 0x15, 0x10, 0x07, 0x10, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x3f, + 0x04, 0x96, 0x29, 0x52, 0xfe, 0x56, 0x06, 0xa8, 0x17, 0xc5, 0xac, 0x1a, + 0xb9, 0x2c, 0xd2, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x10, 0x28, 0x15, + 0x38, 0x0e, 0x04, 0x42, 0x04, 0x43, 0x06, 0x48, 0x15, 0x10, 0x0f, 0x14, + 0xff, 0x06, 0xf6, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, + 0x02, 0x02, 0x02, 0x02, 0x10, 0xac, 0x26, 0x1a, 0x28, 0x17, 0x04, 0x57, + 0xab, 0x30, 0x1a, 0xa6, 0x30, 0xca, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x4b, + 0x2e, 0x29, 0x75, 0xf8, 0x4e, 0x19, 0x06, 0x58, 0x17, 0x10, 0x06, 0xf0, + 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x03, 0x80, 0xb3, 0x40, 0x7e, + 0x06, 0x98, 0x15, 0x00, 0x00, 0x74, 0xce, 0xb0, 0xc6, 0x31, 0x98, 0xb0, + 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x30, 0x28, 0x13, 0x7a, + 0x3d, 0x20, 0x05, 0x06, 0x58, 0x17, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, + 0xff, 0x03, 0x38, 0x0c, 0x02, 0x50, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, + 0x03, 0x03, 0x08, 0x27, 0x40, 0x02, 0x28, 0x17, 0x05, 0x57, 0xaf, 0x30, + 0xe9, 0x30, 0x05, 0xa4, 0x30, 0xda, 0x30, 0xc0, 0x06, 0x68, 0x19, 0x4b, + 0x2f, 0xaf, 0x00, 0x61, 0x00, 0x69, 0x00, 0x70, 0x00, 0x17, 0x01, 0xf0, + 0x3e, 0x35, 0x10, 0x0d, 0xf0, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x15, + 0x4b, 0x51, 0xb1, 0x83, 0x08, 0x69, 0x4f, 0xbe, 0x8f, 0x06, 0x78, 0x19, + 0x74, 0xd0, 0x7c, 0x01, 0xb7, 0x74, 0xc7, 0x98, 0xd3, 0xe4, 0xb2, 0x06, + 0x58, 0x19, 0x88, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x3b, 0x28, 0x19, 0x39, + 0x04, 0x3f, 0x0e, 0x04, 0x35, 0x04, 0x34, 0x28, 0x23, 0x10, 0x15, 0xf4, + 0xff, 0x06, 0xf6, 0xff, 0x04, 0x94, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, + 0x04, 0x20, 0x05, 0x04, 0x04, 0x00, 0x9e, 0x27, 0x07, 0x0f, 0x00, 0x00, + 0x06, 0x57, 0x00, 0xde, 0x30, 0xea, 0x30, 0xe4, 0x30, 0xf3, 0x30, 0x15, + 0xdd, 0x30, 0xec, 0x06, 0x48, 0x19, 0x4d, 0x2f, 0xaf, 0x72, 0x28, 0x17, + 0x54, 0x6a, 0x2f, 0xb7, 0x6d, 0x28, 0x1d, 0x6f, 0x28, 0x27, 0x17, 0x01, + 0xe0, 0x10, 0x0d, 0x90, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x6c, + 0x9a, 0xcc, 0x91, 0x6c, 0x04, 0x62, 0xca, 0x6c, 0x17, 0x52, 0x06, 0x58, + 0x19, 0xc8, 0xb9, 0x00, 0xac, 0xb9, 0x8c, 0xc5, 0xf4, 0xd3, 0x08, 0xb8, + 0xd0, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x15, 0x40, 0x04, + 0x38, 0x04, 0x15, 0x4f, 0x04, 0x3c, 0x28, 0x1b, 0x3e, 0x28, 0x25, 0x35, + 0x05, 0xc8, 0x1b, 0xd2, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x05, + 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x05, 0x80, 0x20, 0x05, 0x05, 0x05, + 0xca, 0x26, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x07, 0x57, 0xd1, 0x30, 0xcd, + 0x30, 0xd9, 0x08, 0x30, 0xb8, 0x30, 0xb9, 0x06, 0x48, 0x15, 0x00, 0x00, + 0x50, 0xa8, 0x2f, 0xad, 0x6e, 0x2e, 0x23, 0x76, 0x2f, 0xaf, 0x7e, 0x01, + 0x79, 0x38, 0x00, 0x73, 0x10, 0x0d, 0xe0, 0x7f, 0x00, 0x58, 0x17, 0x05, + 0x92, 0x15, 0x15, 0x5e, 0x85, 0x01, 0x6d, 0xe6, 0x97, 0xe5, 0x65, 0xaf, + 0x65, 0x06, 0x58, 0x17, 0x00, 0x0c, 0xd3, 0x24, 0xb1, 0xa0, 0xbc, 0xc0, + 0xc9, 0x35, 0xa4, 0xc2, 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x28, + 0x17, 0x3d, 0x28, 0x0b, 0x57, 0x32, 0x28, 0x0f, 0x36, 0x28, 0x1f, 0x41, + 0x05, 0xc8, 0x15, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x4a, 0x06, + 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x00, 0x06, + 0xa1, 0x27, 0x54, 0x11, 0x00, 0x00, 0x08, 0x00, 0x57, 0xb7, 0x30, 0xe3, + 0x30, 0xa6, 0x30, 0xec, 0x22, 0x30, 0xa4, 0x06, 0x68, 0x17, 0x60, 0x01, + 0x69, 0x2f, 0xb1, 0x75, 0xdc, 0x2f, 0xa5, 0x30, 0x07, 0x69, 0x10, 0x0e, + 0x00, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, 0x0c, 0x5e, 0x02, 0x65, + 0x59, 0x29, 0x52, 0x7e, 0x82, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0xe4, + 0xc0, 0xb8, 0xc6, 0xb4, 0xb7, 0x74, 0x60, 0xc7, 0x06, 0x58, 0x15, 0x0f, + 0x13, 0x7f, 0x28, 0x04, 0x4f, 0x04, 0x43, 0x2e, 0x04, 0x3b, 0x20, 0x05, + 0x39, 0x05, 0xe8, 0x11, 0x10, 0x0f, 0x54, 0xff, 0x06, 0xf6, 0xff, 0x07, + 0x94, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x07, 0x07, + 0x00, 0xc6, 0x27, 0x93, 0x10, 0x00, 0x00, 0x09, 0x57, 0x44, 0xbf, 0x28, + 0x15, 0xe9, 0x30, 0xb2, 0x06, 0x68, 0x15, 0x00, 0x00, 0x56, 0x54, 0x48, + 0x15, 0x72, 0x2f, 0xb5, 0x67, 0x2f, 0xb5, 0x06, 0xd0, 0x7f, 0x17, 0x70, + 0x01, 0x10, 0x06, 0x10, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x91, 0x95, 0x76, + 0x96, 0xc9, 0x62, 0x20, 0x3c, 0x68, 0x06, 0x78, 0x15, 0x00, 0x00, 0xc0, + 0xd0, 0xb0, 0x06, 0xc6, 0x7c, 0xb7, 0x8c, 0xac, 0x06, 0x78, 0x17, 0x0e, + 0xf2, 0xff, 0x22, 0x28, 0x04, 0x30, 0x28, 0x17, 0x40, 0x20, 0x05, 0x33, + 0x04, 0x35, 0xe9, 0x06, 0x28, 0x19, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x30, + 0x7f, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x40, 0x06, 0x00, 0x08, 0x08, 0x08, + 0x08, 0x49, 0x27, 0xd9, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x57, 0xc6, 0x30, + 0xeb, 0x30, 0x05, 0xb7, 0x30, 0xa7, 0x30, 0xa4, 0x06, 0x68, 0x19, 0x54, + 0x2e, 0x1f, 0x1f, 0x6c, 0x00, 0x61, 0x4f, 0xb5, 0x06, 0x1f, 0xad, 0x10, + 0x07, 0x10, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x15, 0x00, 0x79, 0x72, + 0x14, 0x5c, 0x0c, 0x5e, 0x7e, 0x82, 0x81, 0x06, 0x78, 0x19, 0x54, 0xd1, + 0xe4, 0xc0, 0x74, 0xc7, 0x06, 0x78, 0x15, 0xa0, 0x0f, 0x13, 0x7f, 0x22, + 0x28, 0x0d, 0x3b, 0x04, 0x4c, 0x04, 0x48, 0x0e, 0x04, 0x4f, 0x04, 0x39, + 0x06, 0x48, 0x17, 0x10, 0x0e, 0xd4, 0xff, 0x06, 0xf6, 0xff, 0x09, 0x90, + 0x38, 0x0c, 0x08, 0x09, 0x40, 0x06, 0x09, 0x09, 0x09, 0x09, 0x10, 0xcf, + 0x27, 0xd2, 0x28, 0x17, 0x0b, 0x57, 0xa6, 0x30, 0x18, 0xc6, 0x30, 0xca, + 0x06, 0x68, 0x13, 0x3f, 0xff, 0x55, 0x00, 0x74, 0xbc, 0x2e, 0x21, 0x6e, + 0x2f, 0xb5, 0x10, 0x0e, 0x50, 0x7f, 0x00, 0x58, 0x17, 0x05, 0x92, 0x15, + 0x4c, 0x4e, 0x08, 0x30, 0x75, 0xb3, 0x7e, 0x06, 0x78, 0x15, 0x00, 0x00, + 0xb0, 0x06, 0xc6, 0x4c, 0xd1, 0x98, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf3, + 0x7f, 0x23, 0x23, 0x04, 0x42, 0x28, 0x19, 0x3d, 0x04, 0x30, 0x06, 0x28, + 0x13, 0x10, 0x0f, 0x34, 0xff, 0xa4, 0x06, 0xf6, 0xff, 0x0a, 0x38, 0x0c, + 0x09, 0x0a, 0x40, 0x06, 0x0a, 0x0a, 0x02, 0x0a, 0x0a, 0x76, 0x27, 0x35, + 0x12, 0x00, 0x3f, 0xff, 0x01, 0x94, 0x30, 0x1c, 0x0a, 0x01, 0x20, 0x06, + 0x02, 0x20, 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, + 0x06, 0x02, 0x02, 0x02, 0x25, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x20, + 0x06, 0x03, 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, + 0x20, 0x06, 0x04, 0x89, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, + 0x05, 0x20, 0x06, 0x44, 0x05, 0x20, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, + 0x05, 0x06, 0xa2, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, + 0x04, 0x06, 0x51, 0x07, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x07, 0x07, 0x08, + 0x30, 0x04, 0x3e, 0x07, 0x08, 0x40, 0x06, 0x48, 0xb9, 0xe8, 0xbf, 0xf0, + 0xb7, 0x3f, 0xff, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x58, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x47, 0x23, 0x5b, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x58, 0xeb, 0x30, 0xaf, 0x30, 0xbb, 0x06, 0x30, 0xf3, 0x30, 0xd6, + 0x30, 0x30, 0x09, 0x06, 0x18, 0x23, 0x4c, 0x00, 0x00, 0x75, 0x00, 0x78, + 0x00, 0x65, 0x00, 0x6d, 0x08, 0x00, 0x62, 0x00, 0x6f, 0x20, 0x0b, 0x72, + 0x00, 0x67, 0xed, 0x0e, 0x80, 0x7f, 0x06, 0x10, 0xfd, 0x51, 0x7f, 0x73, + 0x20, 0x01, 0xb0, 0x81, 0x6f, 0x06, 0xc0, 0xff, 0x80, 0x05, 0xb0, 0x7d, + 0x00, 0x00, 0x62, 0x53, 0xee, 0x68, 0x21, 0x40, 0x58, 0x06, 0x9b, 0x1b, + 0xe9, 0xb8, 0x48, 0xc1, 0x80, 0xbd, 0x0e, 0x74, 0xb9, 0x6c, 0xd0, 0x06, + 0x5b, 0x9f, 0x07, 0x32, 0x7f, 0x06, 0xb1, 0xff, 0x1b, 0x00, 0x04, 0x4e, + 0x04, 0x3a, 0x04, 0x41, 0x04, 0x35, 0x00, 0x04, 0x3c, 0x04, 0x31, 0x04, + 0x43, 0x04, 0x40, 0x39, 0x04, 0x33, 0x25, 0x17, 0x10, 0x06, 0x54, 0xff, + 0x10, 0x06, 0x30, 0xff, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, + 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x59, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xdd, 0x1d, 0x3d, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x59, 0xde, 0x30, + 0xb1, 0x30, 0xc9, 0x04, 0x30, 0xcb, 0x30, 0xa2, 0x30, 0x06, 0x58, 0x1f, + 0x4d, 0x00, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x64, 0x00, 0x04, + 0x6f, 0x00, 0x6e, 0x00, 0x69, 0x20, 0x0d, 0x20, 0x00, 0x10, 0x28, 0x00, + 0x52, 0x20, 0x11, 0x70, 0x00, 0x75, 0x00, 0x14, 0x62, 0x00, 0x6c, 0x20, + 0x13, 0x63, 0x20, 0x13, 0x6f, 0x00, 0x15, 0x66, 0x00, 0x29, 0x04, 0x80, + 0x7f, 0xe9, 0x40, 0x7f, 0x69, 0x20, 0x81, 0x55, 0x65, 0x60, 0x7f, 0xe9, + 0xa0, 0x7f, 0x71, 0x20, 0x89, 0x65, 0x04, 0x40, 0x7d, 0xad, 0x50, 0xff, + 0x7a, 0xa0, 0xff, 0x65, 0x21, 0x05, 0x00, 0x11, 0x01, 0x6b, 0x04, 0x60, + 0x7d, 0xee, 0x01, 0x11, 0x7f, 0x71, 0x81, 0x31, 0x97, 0x64, 0x21, 0x9f, + 0x03, 0xf1, 0x83, 0x00, 0xb1, 0xff, 0xfa, 0xc0, 0xa0, 0x7d, 0x04, 0x70, + 0xff, 0x6c, 0x9a, 0x76, 0x51, 0x7f, 0x98, 0x80, 0x06, 0x9b, 0x1b, 0xc8, + 0xb9, 0x00, 0xcf, 0xc4, 0xb3, 0xc8, 0x00, 0xb2, 0x44, 0xc5, 0x20, 0x00, + 0xf5, 0xac, 0x54, 0x15, 0xd6, 0x6d, 0xad, 0x06, 0xd3, 0x7f, 0xeb, 0x06, + 0x83, 0xff, 0xf3, 0x06, 0x41, 0xff, 0x00, 0x1c, 0x04, 0x30, 0x04, 0x3a, + 0x04, 0x35, 0x04, 0x00, 0x34, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x38, 0x04, + 0x28, 0x4f, 0x04, 0x34, 0x7f, 0x20, 0x20, 0x11, 0x41, 0x04, 0x3f, 0x02, + 0x04, 0x43, 0x04, 0x31, 0x04, 0x3b, 0x20, 0x15, 0x3a, 0xf3, 0x20, 0x25, + 0x04, 0x93, 0xff, 0x07, 0x14, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x01, 0x01, + 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x5a, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x87, 0x19, 0x52, + 0x0a, 0x00, 0x00, 0x00, 0x01, 0x5a, 0xde, 0x30, 0xeb, 0x30, 0xbf, 0x40, + 0x30, 0x06, 0x98, 0x1b, 0x4d, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x6c, 0x74, + 0x20, 0x05, 0x06, 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x70, 0x7f, + 0x6c, 0x9a, 0x08, 0x33, 0x80, 0xd6, 0x4e, 0x06, 0x9b, 0x1b, 0xb0, 0xba, + 0xc0, 0x60, 0xd0, 0x06, 0xbb, 0x99, 0x0e, 0xf2, 0x7f, 0x1c, 0x04, 0x30, + 0x04, 0x3b, 0x0e, 0x04, 0x4c, 0x04, 0x42, 0x20, 0x07, 0x10, 0x0e, 0x33, + 0xff, 0x0e, 0xf5, 0x7f, 0x01, 0x78, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, + 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x5b, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2d, 0x1e, 0xb3, 0x0d, 0x00, 0x00, 0x00, + 0x01, 0x5b, 0xe2, 0x30, 0xf3, 0x30, 0xc6, 0x01, 0x30, 0xcd, 0x30, 0xb0, + 0x30, 0xed, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x41, 0x65, 0x20, 0x05, 0x65, 0x00, 0x67, 0x00, 0x72, + 0x20, 0x0f, 0xae, 0x06, 0x30, 0x7f, 0xe9, 0x20, 0x85, 0xe9, 0x06, 0xa0, + 0x7f, 0x06, 0xf0, 0xff, 0x0e, 0x70, 0x7f, 0xd1, 0x10, 0x9e, 0x71, 0x5c, + 0x06, 0xbb, 0x19, 0xac, 0xba, 0x4c, 0xd1, 0x03, 0x24, 0xb1, 0xf8, 0xad, + 0x5c, 0xb8, 0x06, 0x5b, 0x9f, 0x0e, 0xf2, 0x7f, 0x00, 0x27, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x3d, 0x04, 0x10, 0x3e, 0x04, 0x33, 0x20, 0x03, 0x40, + 0x04, 0x38, 0x04, 0x33, 0x4f, 0x04, 0x10, 0x0d, 0xb3, 0xff, 0x0e, 0xf5, + 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x5c, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x89, 0xed, 0x28, + 0x17, 0x00, 0x00, 0x00, 0x01, 0x5c, 0xe2, 0x30, 0xb6, 0x30, 0xf3, 0x01, + 0x30, 0xd3, 0x30, 0xfc, 0x30, 0xaf, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, + 0x00, 0x6f, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x00, 0x6d, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x71, 0x00, 0x15, 0x75, 0x00, 0x65, 0x0e, 0x00, 0x7f, 0x73, + 0x80, 0xff, 0x6b, 0x06, 0xe1, 0x7f, 0x60, 0x63, 0x21, 0x8d, 0x0d, 0xd1, + 0xff, 0xab, 0x83, 0x51, 0x68, 0xd4, 0x10, 0x6b, 0x4b, 0x51, 0x06, 0x7b, + 0x1d, 0xa8, 0xba, 0xa0, 0xc7, 0x0d, 0x44, 0xbe, 0x6c, 0xd0, 0x06, 0x7b, + 0x9d, 0x07, 0x33, 0x7f, 0xe7, 0x06, 0xa3, 0xff, 0x00, 0x1c, 0x04, 0x3e, + 0x04, 0x37, 0x04, 0x30, 0x04, 0x00, 0x3c, 0x04, 0x31, 0x04, 0x38, 0x04, + 0x3a, 0x04, 0xcf, 0x10, 0x06, 0x34, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x01, + 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x5d, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xf7, 0xef, 0x25, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x5d, 0xca, 0x30, + 0xdf, 0x30, 0xd3, 0x10, 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x4e, 0x00, + 0x61, 0x00, 0x05, 0x6d, 0x00, 0x69, 0x00, 0x62, 0x20, 0x03, 0x61, 0x06, + 0xe0, 0x7f, 0x60, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0xb3, 0x7e, + 0x73, 0x7c, 0xd4, 0x10, 0x6b, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0x98, 0xb0, + 0xf8, 0xbb, 0x0a, 0x44, 0xbe, 0x44, 0xc5, 0x07, 0x33, 0x7f, 0xeb, 0x06, + 0x83, 0xff, 0xed, 0x80, 0x06, 0x83, 0xff, 0x1d, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x38, 0x26, 0x04, 0x31, 0x20, 0x03, 0x4f, 0x04, 0x10, 0x0e, 0x13, + 0xff, 0x0e, 0xf5, 0x7f, 0x01, 0x78, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, + 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x14, 0x6a, 0x00, 0x11, 0x0c, 0x00, 0x00, 0x30, 0x01, 0x5e, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x3d, 0x25, 0x79, 0x03, 0x00, 0x00, 0x00, 0x02, 0x5e, 0xce, 0x30, + 0xfc, 0x30, 0xeb, 0x00, 0x30, 0xc8, 0x30, 0xfb, 0x30, 0xdb, 0x30, 0xe9, + 0x24, 0x30, 0xf3, 0x20, 0x09, 0xde, 0x5d, 0x05, 0xb8, 0x29, 0x4e, 0x00, + 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x68, 0x00, 0x14, 0x20, 0x00, + 0x48, 0x20, 0x0b, 0x6c, 0x20, 0x01, 0x61, 0x00, 0x18, 0x6e, 0x00, 0x64, + 0x05, 0x68, 0xae, 0xd0, 0x73, 0x65, 0x00, 0x2d, 0x2a, 0x00, 0x53, 0x20, + 0x05, 0x70, 0x20, 0x91, 0x65, 0x20, 0x85, 0x74, 0xab, 0x20, 0x9b, 0x69, + 0x20, 0xa1, 0x6e, 0x20, 0x93, 0x6c, 0x20, 0x1d, 0x04, 0x70, 0xff, 0x75, + 0x64, 0x20, 0xff, 0x06, 0x10, 0xfb, 0x3a, 0x1a, 0x4f, 0x81, 0x6f, 0x61, + 0x21, 0x81, 0xbe, 0x30, 0xfb, 0x74, 0x05, 0x80, 0xfb, 0x91, 0x7f, 0xd0, + 0x81, 0x00, 0x51, 0x7d, 0x04, 0x5a, 0xbf, 0x17, 0x01, 0x53, 0x77, 0x83, + 0x70, 0x51, 0x01, 0x77, 0x06, 0x7b, 0x1d, 0x00, 0x78, 0xb1, 0x74, 0xb9, + 0xb8, 0xd2, 0x40, 0xd6, 0x00, 0x80, 0xb7, 0xb8, 0xd2, 0x20, 0x00, 0xfc, + 0xc8, 0xee, 0x05, 0xfb, 0xa5, 0x33, 0x7f, 0x52, 0x81, 0x2d, 0x06, 0xa3, + 0x7f, 0xf2, 0x81, 0x05, 0x71, 0xfd, 0x00, 0x02, 0x00, 0x21, 0x04, 0x35, + 0x04, 0x32, 0x20, 0x03, 0x40, 0x00, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x4f, + 0x04, 0x20, 0x02, 0x00, 0x13, 0x04, 0x3e, 0x04, 0x3b, 0x20, 0x01, 0x30, + 0x8e, 0x20, 0x11, 0x34, 0x04, 0x38, 0x20, 0x13, 0x0c, 0xb4, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x01, 0x02, 0x08, 0x08, 0x08, 0x09, 0x08, 0x01, 0x20, + 0x06, 0x07, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x5e, 0xc9, + 0x30, 0x5b, 0xec, 0x28, 0x0d, 0xc6, 0x05, 0xe8, 0x0d, 0x9f, 0xff, 0x44, + 0x28, 0x15, 0x57, 0x81, 0x70, 0x68, 0x04, 0x86, 0x7b, 0x10, 0x09, 0x50, + 0x7f, 0x06, 0x31, 0xfd, 0x00, 0x00, 0xb7, 0x5f, 0x08, 0x26, 0x4f, 0x79, + 0x72, 0x06, 0x98, 0x17, 0xdc, 0xb4, 0x0c, 0x1a, 0xb8, 0x30, 0xd1, 0x06, + 0x38, 0x11, 0x0f, 0x51, 0xff, 0x14, 0x28, 0x11, 0x35, 0xb9, 0x28, 0x13, + 0x42, 0x28, 0x1f, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x56, 0xff, 0x02, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x02, 0x20, 0x06, 0x03, 0x40, 0x07, 0xae, 0x25, + 0xa9, 0x88, 0x2b, 0x07, 0x04, 0x5e, 0xd5, 0x28, 0x17, 0xdc, 0x30, 0xe9, + 0xab, 0x28, 0x1b, 0xc8, 0x06, 0x48, 0x1b, 0x46, 0x4f, 0x87, 0x76, 0xae, + 0x35, 0x10, 0x15, 0xd0, 0x7f, 0x00, 0x17, 0x5f, 0xb1, 0x83, 0x8f, 0x79, + 0x70, 0x51, 0x80, 0x06, 0x78, 0x19, 0x0c, 0xd5, 0x08, 0xb8, 0xfc, 0xbc, + 0x80, 0x18, 0xb7, 0xb8, 0xd2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x24, + 0x04, 0x3b, 0x8a, 0x28, 0x17, 0x32, 0x04, 0x3e, 0x20, 0x07, 0x30, 0x28, + 0x1f, 0x34, 0xc9, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x02, + 0x20, 0x01, 0x03, 0x03, 0x20, 0x06, 0x40, 0x0a, 0x40, 0x07, 0x56, 0x25, + 0xe3, 0x03, 0x00, 0x00, 0x41, 0x05, 0x28, 0x17, 0xea, 0x30, 0xfc, 0x30, + 0xb9, 0x06, 0x88, 0x19, 0x56, 0x46, 0x2f, 0xaf, 0x69, 0x2f, 0xb1, 0x73, + 0x06, 0x88, 0x17, 0x30, 0x7f, 0x73, 0xdc, 0x06, 0x6e, 0xad, 0x07, 0x90, + 0xff, 0x69, 0x29, 0x95, 0x06, 0x90, 0xff, 0x06, 0x90, 0x7f, 0x17, 0x5f, + 0x08, 0xcc, 0x91, 0xaf, 0x65, 0x06, 0x98, 0x17, 0x04, 0xd5, 0xac, 0x1a, + 0xb9, 0xac, 0xc2, 0x06, 0xb8, 0x17, 0x07, 0x13, 0x7f, 0xed, 0x06, 0xa2, + 0x7f, 0x24, 0x02, 0x04, 0x40, 0x04, 0x38, 0x04, 0x41, 0x88, 0x15, 0x38, + 0x39, 0x04, 0x4f, 0x05, 0xc8, 0x19, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, + 0x7f, 0x04, 0x03, 0x20, 0x01, 0x28, 0x04, 0x04, 0x20, 0x06, 0x0b, 0x40, + 0x07, 0xd3, 0x25, 0x1d, 0x80, 0x2b, 0x19, 0x06, 0x5e, 0xd8, 0x30, 0xeb, + 0x30, 0xc7, 0xd5, 0x28, 0x13, 0x06, 0x78, 0x17, 0x47, 0x2f, 0xad, 0x6c, + 0x2f, 0xa5, 0x65, 0x28, 0x1f, 0x8b, 0x06, 0x3f, 0xb1, 0x47, 0x00, 0x75, + 0x60, 0x81, 0x72, 0x06, 0x48, 0x1b, 0x07, 0x10, 0xff, 0x62, 0x68, 0x80, + 0xff, 0x06, 0x38, 0x1b, 0x47, 0x00, 0xfc, 0xa1, 0x7f, 0x73, 0x81, 0x06, + 0x0f, 0xb4, 0x77, 0x6d, 0x14, 0x5c, 0xb7, 0x5f, 0x06, 0x98, 0x17, 0x03, + 0xec, 0xd5, 0x70, 0xb3, 0x7c, 0xb9, 0x06, 0x98, 0x17, 0x07, 0xd3, 0x7f, + 0x8a, 0x06, 0x11, 0xff, 0x13, 0x04, 0x35, 0x28, 0x13, 0x34, 0x20, 0x05, + 0x40, 0xe0, 0x88, 0x1b, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x05, + 0x04, 0x06, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x06, 0x01, 0x04, 0x05, + 0x05, 0x05, 0x08, 0x05, 0xf7, 0x24, 0x33, 0x2b, 0x17, 0x07, 0x5e, 0xd5, + 0x02, 0x30, 0xed, 0x30, 0xfc, 0x30, 0xcb, 0x28, 0x19, 0xb2, 0xc5, 0x28, + 0x1d, 0x06, 0x38, 0x17, 0x72, 0x00, 0x6f, 0x2f, 0x27, 0x69, 0x2f, 0x2b, + 0x5f, 0x67, 0x2f, 0xb5, 0x6e, 0x06, 0xc0, 0x7f, 0x38, 0x23, 0x0e, 0xb0, + 0xff, 0x06, 0x38, 0x17, 0x06, 0xd0, 0x7f, 0x00, 0x3c, 0x68, 0x57, 0x7f, + 0x81, 0x5b, 0x39, 0x68, 0x80, 0x06, 0x78, 0x17, 0x50, 0xd7, 0x5c, 0xb8, + 0xdd, 0xb2, 0xb8, 0x6a, 0xc5, 0x06, 0x58, 0x15, 0x0f, 0x12, 0x7f, 0x13, + 0x28, 0x0f, 0x3e, 0x28, 0x0d, 0x38, 0xaf, 0x28, 0x11, 0x33, 0x28, 0x23, + 0x3d, 0x05, 0xc8, 0x15, 0x07, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x28, + 0x12, 0xa8, 0x28, 0x16, 0x06, 0x28, 0x19, 0x02, 0x20, 0x05, 0x06, 0x06, + 0xd8, 0x22, 0x25, 0xac, 0x2b, 0x17, 0x08, 0x5e, 0xea, 0x28, 0x11, 0xd3, + 0x02, 0x30, 0xe5, 0x30, 0xeb, 0x30, 0xd5, 0x06, 0x28, 0x15, 0x00, 0x22, + 0x00, 0x4c, 0x2e, 0xa5, 0x6d, 0x00, 0x62, 0x2f, 0xb5, 0x72, 0xdd, 0x28, + 0x17, 0x06, 0x90, 0x7f, 0x6f, 0x06, 0x60, 0x81, 0x07, 0x70, 0xff, 0x51, + 0x7f, 0x6f, 0x0e, 0x00, 0x7f, 0x0c, 0x97, 0x67, 0x21, 0x58, 0x06, 0x78, + 0x13, 0x3f, 0xff, 0xbc, 0xb9, 0x03, 0xd4, 0xbd, 0x74, 0xb9, 0x50, 0xd7, + 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x41, 0x1b, 0x28, 0x11, 0x3c, 0x04, + 0x31, 0x04, 0x43, 0x28, 0x1f, 0xe0, 0x3d, 0x29, 0x0e, 0xd3, 0xff, 0x10, + 0x0e, 0x10, 0xff, 0x07, 0x06, 0x09, 0x06, 0x07, 0x20, 0x09, 0x07, 0x20, + 0x06, 0x05, 0x06, 0x07, 0x07, 0x07, 0x08, 0x07, 0x29, 0x24, 0x09, 0x2b, + 0x19, 0x09, 0x5e, 0xce, 0x20, 0x30, 0xfc, 0x28, 0x13, 0xc8, 0x30, 0xfb, + 0x30, 0xd6, 0x0a, 0x30, 0xe9, 0x30, 0xd0, 0x28, 0x25, 0xc8, 0x05, 0xc8, + 0x1f, 0x4e, 0x80, 0x2f, 0xad, 0x72, 0x00, 0x74, 0x00, 0x68, 0x00, 0x20, + 0x2a, 0x00, 0x42, 0x2f, 0xbb, 0x61, 0x28, 0x23, 0x61, 0x2f, 0xbf, 0x74, + 0xc5, 0x05, 0x6f, 0xb7, 0xd0, 0x73, 0x2d, 0x00, 0x53, 0x2f, 0xb3, 0x70, + 0x20, 0x8f, 0xa8, 0x3f, 0xb9, 0x74, 0x2f, 0xcb, 0x69, 0x4f, 0xcd, 0x61, + 0x00, 0x6c, 0xbb, 0x04, 0xc0, 0xff, 0x64, 0x29, 0x19, 0x06, 0x10, 0xfb, + 0x00, 0x10, 0xff, 0x65, 0x21, 0x85, 0x31, 0x01, 0x58, 0x74, 0x00, 0x41, + 0x01, 0x65, 0x05, 0x80, 0x7f, 0x05, 0x91, 0x81, 0x17, 0x53, 0x03, 0x01, + 0x5e, 0xc9, 0x62, 0xed, 0x73, 0x79, 0x72, 0x06, 0x58, 0x1d, 0x00, 0x78, + 0xb1, 0x74, 0xb9, 0xb8, 0xd2, 0x0c, 0xbe, 0x03, 0x7c, 0xb7, 0x18, 0xbc, + 0xb8, 0xd2, 0x06, 0x18, 0x1d, 0x33, 0x7f, 0xb8, 0x52, 0x81, 0x2d, 0x07, + 0x23, 0x7f, 0x92, 0x7f, 0x05, 0x73, 0x7f, 0x21, 0x04, 0x35, 0x20, 0x04, + 0x32, 0x20, 0x03, 0x40, 0x04, 0x3d, 0x04, 0x4b, 0x02, 0x04, 0x39, 0x04, + 0x20, 0x00, 0x11, 0x28, 0x21, 0x30, 0xae, 0x28, 0x29, 0x30, 0x20, 0x11, + 0x42, 0x05, 0x08, 0x29, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x08, + 0x02, 0x07, 0x01, 0x07, 0x01, 0x01, 0x08, 0x20, 0x06, 0x08, 0x00, 0x07, + 0x08, 0x08, 0x08, 0x08, 0xc2, 0x24, 0xc7, 0x02, 0x03, 0x00, 0x00, 0x0a, + 0x5e, 0xaa, 0x28, 0x17, 0xd9, 0x83, 0x28, 0x19, 0xa2, 0x30, 0xa4, 0x30, + 0xbb, 0x28, 0x21, 0x05, 0xb8, 0x13, 0x8c, 0x3f, 0xff, 0x4f, 0x00, 0x76, + 0x27, 0x89, 0x37, 0x7f, 0x6a, 0x00, 0x58, 0x73, 0x20, 0x01, 0x65, 0x04, + 0x87, 0x81, 0x10, 0x10, 0x50, 0x7f, 0x0a, 0x4e, 0x7e, 0x04, 0x82, 0x5f, + 0x74, 0x14, 0x5c, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x24, 0xc6, 0x84, + 0xbc, 0x08, 0xb8, 0x74, 0xc7, 0x35, 0x24, 0xc1, 0x06, 0x18, 0x13, 0x0f, + 0x33, 0x7f, 0x1e, 0x68, 0x15, 0x4d, 0x28, 0x13, 0x58, 0x41, 0x28, 0x23, + 0x3b, 0x05, 0x08, 0x09, 0x10, 0x17, 0xd4, 0xff, 0x09, 0x09, 0x0a, 0x0a, + 0x09, 0x0a, 0x0a, 0x09, 0x20, 0x06, 0x06, 0x20, 0x04, 0x09, 0x08, 0x09, + 0x57, 0x25, 0x54, 0x2b, 0x0b, 0x0b, 0x5e, 0xbe, 0x80, 0x28, 0x0f, 0xc8, + 0x30, 0xfb, 0x30, 0xdb, 0x30, 0xe9, 0x35, 0x30, 0xf3, 0x20, 0x09, 0x05, + 0xf8, 0x17, 0x53, 0x2f, 0x8f, 0x75, 0x6b, 0x2f, 0x5b, 0x48, 0x2f, 0x9b, + 0x6c, 0x2f, 0x99, 0x3f, 0xbb, 0x64, 0x05, 0x6f, 0x33, 0xd0, 0x73, 0x45, + 0x65, 0x2d, 0x35, 0x4d, 0x00, 0xe9, 0x4f, 0x25, 0x64, 0x04, 0xef, 0x29, + 0xae, 0x70, 0xff, 0xfc, 0x2d, 0xab, 0x68, 0x06, 0x20, 0xf9, 0x79, 0x97, + 0x71, 0x6f, 0x61, 0xbe, 0x2f, 0xab, 0x4d, 0x69, 0xa3, 0x05, 0x50, 0xfb, + 0x91, 0x7f, 0x00, 0xd0, 0x81, 0x04, 0xbf, 0xc7, 0x57, 0x04, 0x53, 0x77, + 0x83, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x90, 0xc7, 0x04, + 0xc7, 0xb8, 0xd2, 0x40, 0xd6, 0x0b, 0x80, 0xb7, 0xb8, 0xd2, 0x06, 0x38, + 0x19, 0x5a, 0x23, 0x7d, 0x32, 0xeb, 0x60, 0x2d, 0x06, 0x43, 0x7d, 0x07, + 0x11, 0xff, 0x2e, 0x04, 0x36, 0x04, 0x3d, 0x00, 0x04, 0x30, 0x04, 0x4f, + 0x04, 0x20, 0x00, 0x13, 0x28, 0x04, 0x3e, 0x28, 0x17, 0x3b, 0x20, 0x0d, + 0x3d, 0x04, 0x34, 0x38, 0x04, 0x38, 0x20, 0x13, 0x0d, 0x14, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x0a, 0x0a, 0x07, 0x00, 0x0a, 0x08, 0x07, 0x0a, 0x0a, + 0x0c, 0x07, 0x0c, 0x20, 0x0a, 0x0a, 0x20, 0x01, 0x09, 0x25, 0x11, 0x03, + 0x00, 0x08, 0x00, 0x0c, 0x5e, 0xe6, 0x28, 0x15, 0xec, 0x30, 0xd2, 0xd5, + 0x06, 0x28, 0x11, 0x5f, 0xff, 0x55, 0x28, 0x13, 0x72, 0x2f, 0xb1, 0x63, + 0x28, 0x19, 0x40, 0x74, 0x10, 0x16, 0x20, 0x7f, 0x4c, 0x4e, 0x97, 0x5f, + 0xd2, 0x52, 0x30, 0x2f, 0x65, 0x06, 0x78, 0x19, 0x38, 0x15, 0x08, 0xb8, + 0x50, 0xd7, 0xc0, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x23, 0x04, 0x42, + 0x04, 0x40, 0x04, 0x19, 0x35, 0x04, 0x45, 0x20, 0x07, 0x10, 0x1e, 0x34, + 0xff, 0x0b, 0x0b, 0x50, 0x01, 0x12, 0x0a, 0x0b, 0x09, 0x50, 0x07, 0x25, + 0xa2, 0x28, 0x17, 0x0d, 0x00, 0x5e, 0xbc, 0x30, 0xfc, 0x30, 0xe9, 0x30, + 0xf3, 0xad, 0x06, 0x88, 0x17, 0x5a, 0x2f, 0xa3, 0x65, 0x06, 0x4f, 0x29, + 0x7d, 0x2f, 0xe9, 0x8f, 0xa7, 0xe8, 0x04, 0xdf, 0x19, 0x08, 0x70, 0xff, + 0x91, 0x7d, 0x61, 0x0e, 0x20, 0x7f, 0xfd, 0x6c, 0x70, 0x60, 0x51, 0x06, + 0x78, 0x13, 0x3f, 0xff, 0x1c, 0xc8, 0x7c, 0xc7, 0x80, 0x6a, 0xb7, 0x06, + 0x78, 0x15, 0x07, 0x72, 0x7f, 0xe2, 0x4f, 0x21, 0x69, 0x06, 0x22, 0x81, + 0x17, 0x80, 0x28, 0x13, 0x3b, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x34, 0x0e, + 0x04, 0x38, 0x04, 0x4f, 0x06, 0x08, 0x1b, 0x07, 0x33, 0xff, 0x10, 0x0e, + 0xb0, 0x7f, 0x0c, 0x44, 0x0c, 0x50, 0x01, 0x0b, 0x0c, 0x04, 0x40, 0x0a, + 0x9f, 0x24, 0x20, 0x91, 0x02, 0x00, 0x3f, 0xff, 0x01, 0x08, 0x08, 0x08, + 0x09, 0x28, 0x08, 0x01, 0x20, 0x06, 0x07, 0x20, 0x05, 0x01, 0x01, 0x02, + 0x95, 0x30, 0x01, 0x02, 0x02, 0x20, 0x06, 0x03, 0x40, 0x07, 0x03, 0x30, + 0x01, 0x2a, 0x03, 0x03, 0x20, 0x06, 0x0a, 0x40, 0x07, 0x04, 0x30, 0x01, + 0x04, 0x50, 0x04, 0x20, 0x06, 0x0b, 0x40, 0x07, 0x05, 0x04, 0x06, 0x04, + 0x10, 0x05, 0x06, 0x05, 0x20, 0x06, 0x01, 0x04, 0x05, 0x05, 0x6a, 0x05, + 0x30, 0x0a, 0x20, 0x0e, 0x06, 0x20, 0x11, 0x02, 0x20, 0x05, 0x06, 0x00, + 0x06, 0x07, 0x06, 0x09, 0x06, 0x07, 0x09, 0x07, 0x80, 0x20, 0x06, 0x05, + 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x16, 0x07, 0x01, 0x07, 0x40, 0x6d, + 0x01, 0x20, 0x70, 0x30, 0x7b, 0x09, 0x05, 0x0a, 0x09, 0x0a, 0x0a, 0x09, + 0x20, 0x06, 0x06, 0x20, 0x04, 0x80, 0x20, 0x0d, 0x0a, 0x07, 0x0a, 0x08, + 0x07, 0x0a, 0x0a, 0x07, 0x0c, 0x07, 0x0c, 0x0a, 0x0a, 0x20, 0x01, 0xf8, + 0xdf, 0xf0, 0xd7, 0x80, 0x3f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xb4, 0x8a, 0x00, 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x5f, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xc4, 0xe5, 0x46, 0x7c, 0x00, 0x00, 0x00, 0x02, 0x5f, 0xa6, 0x30, + 0xa7, 0x30, 0xea, 0x0c, 0x30, 0xf3, 0x30, 0xc8, 0x20, 0x03, 0x06, 0x38, + 0x21, 0x57, 0x00, 0x10, 0x65, 0x00, 0x6c, 0x20, 0x01, 0x69, 0x00, 0x6e, + 0x00, 0x06, 0x67, 0x00, 0x74, 0x00, 0x6f, 0x20, 0x07, 0x10, 0x0d, 0xb0, + 0x7f, 0x52, 0xa8, 0x21, 0xff, 0x67, 0x21, 0xfd, 0xf3, 0x21, 0xff, 0x20, + 0x00, 0x64, 0xa0, 0x22, 0x0d, 0x20, 0x05, 0xc2, 0x13, 0xe0, 0x60, 0x75, + 0x70, 0x7f, 0x04, 0x98, 0x27, 0x59, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0xf0, + 0xc6, 0x0c, 0xc1, 0xb9, 0x34, 0xd1, 0x06, 0x9b, 0x9b, 0x0e, 0xf3, 0x7f, + 0x12, 0x04, 0x10, 0x35, 0x04, 0x3b, 0x20, 0x01, 0x38, 0x04, 0x3d, 0x04, + 0x07, 0x33, 0x04, 0x42, 0x04, 0x3e, 0x20, 0x07, 0x10, 0x15, 0xb4, 0xff, + 0x06, 0xf6, 0xff, 0x00, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x0c, 0x01, 0x01, + 0x00, 0x0f, 0x10, 0x02, 0x0f, 0x01, 0x01, 0x01, 0x01, 0x10, 0x9f, 0xe2, + 0x4a, 0x28, 0x17, 0x03, 0x5f, 0xaa, 0x30, 0x05, 0xfc, 0x30, 0xaf, 0x30, + 0xe9, 0x28, 0x19, 0xc9, 0x06, 0x48, 0x17, 0x01, 0x41, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x6b, 0x28, 0x1b, 0x5c, 0x61, 0x28, 0x19, 0x64, 0x10, 0x0e, + 0x00, 0x7f, 0x00, 0x38, 0x17, 0x05, 0xb2, 0x13, 0x65, 0x59, 0x08, 0x4b, + 0x51, 0x70, 0x51, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x74, 0x06, 0xd0, 0x9c, + 0xb7, 0xdc, 0xb4, 0x06, 0x7f, 0xb5, 0x0e, 0xf3, 0x7f, 0x1e, 0x2b, 0x04, + 0x3a, 0x28, 0x17, 0x35, 0x28, 0x15, 0x34, 0x05, 0xc8, 0x0f, 0x10, 0x0f, + 0x74, 0xff, 0xa4, 0x06, 0xf6, 0xff, 0x02, 0x38, 0x0c, 0x0a, 0x02, 0x20, + 0x06, 0x09, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0xc4, 0xe5, 0x46, 0x28, + 0x17, 0x00, 0x04, 0x5f, 0xd9, 0x30, 0xa4, 0x30, 0xfb, 0x30, 0x11, 0xaa, + 0x30, 0xd6, 0x20, 0x05, 0xd7, 0x30, 0xec, 0x28, 0x1f, 0x15, 0xc6, 0x30, + 0xa3, 0x05, 0xa8, 0x21, 0x42, 0x28, 0x0f, 0x79, 0x2e, 0x29, 0x15, 0x6f, + 0x00, 0x66, 0x2e, 0x2f, 0x50, 0x2f, 0xbb, 0x65, 0x2f, 0xb9, 0x63, 0x74, + 0x20, 0x13, 0x10, 0x0d, 0x90, 0x7f, 0x68, 0x00, 0xed, 0x2a, 0x15, 0x78, + 0x15, 0x80, 0x05, 0xd2, 0x03, 0x6e, 0x66, 0x26, 0x4f, 0x82, 0x84, 0x7e, + 0x40, 0x6e, 0x06, 0x78, 0x19, 0xa0, 0xbc, 0x74, 0xc7, 0x24, 0xc6, 0x00, + 0x0c, 0xbe, 0x0c, 0xd5, 0x0c, 0xb8, 0xf0, 0xd2, 0xd0, 0x06, 0x1b, 0x99, + 0x0e, 0xf3, 0x7f, 0x11, 0x28, 0x13, 0x39, 0x04, 0x2d, 0x00, 0x14, 0x3e, + 0x04, 0x44, 0x20, 0x05, 0x1f, 0x68, 0x23, 0x42, 0x04, 0x74, 0x38, 0x05, + 0x68, 0x25, 0x10, 0x0f, 0x34, 0xff, 0x06, 0xb6, 0xff, 0x03, 0x38, 0x0c, + 0x02, 0x03, 0xa0, 0x20, 0x06, 0x01, 0x20, 0x05, 0x03, 0x03, 0x35, 0xe5, + 0x46, 0x02, 0x7d, 0x00, 0x00, 0x05, 0x5f, 0xab, 0x28, 0x09, 0xbf, 0x03, + 0x30, 0xd9, 0x30, 0xea, 0x30, 0xfc, 0x05, 0xa8, 0x0d, 0x9f, 0xff, 0x51, + 0x43, 0x4f, 0xa7, 0x74, 0x2e, 0x35, 0x72, 0x00, 0x62, 0x2f, 0xbb, 0x60, + 0x72, 0x05, 0x88, 0x11, 0x10, 0x0f, 0x50, 0x7f, 0x4e, 0x57, 0x79, 0x72, + 0x2f, 0x10, 0x4f, 0xf7, 0x96, 0x06, 0x78, 0x17, 0x94, 0xce, 0x30, 0xd1, + 0x0d, 0xa0, 0xbc, 0xac, 0xb9, 0x06, 0x3e, 0xab, 0x0f, 0x33, 0x7f, 0x1a, + 0x68, 0x07, 0x07, 0x35, 0x04, 0x40, 0x04, 0x31, 0x40, 0x05, 0x05, 0x78, + 0x11, 0x10, 0x17, 0x54, 0xff, 0x4a, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x20, + 0x06, 0x04, 0x20, 0x05, 0x04, 0x00, 0x04, 0x0c, 0xe1, 0xc4, 0x7a, 0x00, + 0x00, 0x06, 0x0b, 0x5f, 0xc0, 0x30, 0xcb, 0x28, 0x11, 0xc7, 0x28, 0x1d, + 0x06, 0x54, 0x99, 0x46, 0x4f, 0x2f, 0x9b, 0x61, 0x00, 0x67, 0x2f, 0xaf, + 0x10, 0x16, 0x50, 0x7f, 0x65, 0x04, 0x59, 0x54, 0x58, 0x08, 0x62, 0x06, + 0x78, 0x15, 0x00, 0x00, 0x03, 0x24, 0xc6, 0xc0, 0xd0, 0xe0, 0xac, 0x06, + 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x41, 0x1e, 0x28, 0x13, 0x30, 0x04, 0x33, + 0x04, 0x3e, 0x05, 0xc8, 0x0d, 0x80, 0x10, 0x17, 0x94, 0xff, 0x05, 0x0a, + 0x0a, 0x0a, 0x0a, 0x09, 0x05, 0x00, 0x05, 0x0a, 0x0b, 0x0a, 0x0a, 0x05, + 0x05, 0x05, 0x08, 0x05, 0x60, 0xdf, 0x39, 0x2f, 0x98, 0x07, 0x5f, 0xdb, + 0x80, 0x28, 0x15, 0xaf, 0x30, 0xb9, 0x30, 0xd9, 0x30, 0xa4, 0xa2, 0x06, + 0x48, 0x19, 0x48, 0x2f, 0xaf, 0x77, 0x00, 0x6b, 0x2f, 0xaf, 0x27, 0x03, + 0x00, 0x73, 0x00, 0x20, 0x00, 0x42, 0x2f, 0xbf, 0x05, 0xbf, 0xb1, 0xc4, + 0x10, 0x06, 0xf0, 0x7f, 0x31, 0xef, 0x68, 0x00, 0xed, 0x2e, 0xb5, 0x20, + 0x00, 0x58, 0x64, 0x2e, 0xb5, 0x20, 0xa2, 0x11, 0x05, 0x3f, 0xbf, 0x0d, + 0x97, 0x4b, 0x10, 0x51, 0x7e, 0x6e, 0x06, 0x98, 0x17, 0x38, 0xd6, 0x6c, + 0xd0, 0x03, 0xa4, 0xc2, 0xa0, 0xbc, 0x74, 0xc7, 0x06, 0x5b, 0x97, 0x0e, + 0xf3, 0x7f, 0x40, 0x25, 0x28, 0x11, 0x3a, 0x04, 0x41, 0x04, 0x2d, 0x00, + 0x07, 0x11, 0x04, 0x35, 0x04, 0x39, 0x06, 0x08, 0x1d, 0x10, 0x0e, 0xf4, + 0xff, 0x06, 0xf6, 0xff, 0x40, 0x06, 0x38, 0x0c, 0x01, 0x06, 0x06, 0x05, + 0x06, 0x10, 0x00, 0x05, 0x06, 0x06, 0x06, 0x06, 0xea, 0xe3, 0xc9, 0x00, + 0x7d, 0x00, 0x00, 0x08, 0x5f, 0xde, 0x30, 0xca, 0x02, 0x30, 0xef, 0x30, + 0xc4, 0x30, 0xfb, 0x20, 0x05, 0xf3, 0x0a, 0x30, 0xac, 0x30, 0xcc, 0x05, + 0xe8, 0x1f, 0x4d, 0x2f, 0xad, 0x6e, 0xa0, 0x48, 0x1b, 0x61, 0x2f, 0xb9, + 0x75, 0x00, 0x2d, 0x00, 0x57, 0xa2, 0x40, 0x11, 0x67, 0x40, 0x17, 0x75, + 0x00, 0x69, 0x10, 0x14, 0xe0, 0x7f, 0x9b, 0x00, 0x73, 0xb3, 0x7e, 0xe6, + 0x74, 0xfe, 0x56, 0x2d, 0x00, 0x00, 0xfa, 0x65, 0x3c, 0x68, 0xaa, 0x52, + 0x0a, 0x40, 0x4f, 0x05, 0xd8, 0x23, 0xc8, 0xb9, 0x08, 0xb1, 0x40, 0xc6, + 0x00, 0x2c, 0xd2, 0x2d, 0x00, 0x55, 0xc6, 0x70, 0xac, 0x30, 0x04, 0xb2, + 0x05, 0xf8, 0x1f, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x51, 0x3d, + 0x20, 0x03, 0x32, 0x20, 0x07, 0x42, 0x04, 0x43, 0x28, 0x1f, 0x51, 0x23, + 0x40, 0x11, 0x33, 0x40, 0x17, 0x43, 0x04, 0x38, 0x04, 0xe8, 0x29, 0xa1, + 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x07, 0x06, 0x20, + 0x08, 0x00, 0x07, 0x07, 0x07, 0x07, 0x4d, 0xe3, 0xe2, 0x7c, 0x00, 0x00, + 0x00, 0x09, 0x5f, 0xcd, 0x30, 0xeb, 0x30, 0x41, 0xbd, 0x28, 0x11, 0xfb, + 0x30, 0xde, 0x30, 0xfc, 0x20, 0x0b, 0x15, 0xdc, 0x30, 0xed, 0x05, 0xc8, + 0x17, 0x4e, 0x2f, 0xa9, 0x6c, 0x2f, 0xa9, 0x75, 0x6f, 0x28, 0x1d, 0x06, + 0x3d, 0xb1, 0x10, 0x06, 0xf0, 0x7f, 0x52, 0x2e, 0xa9, 0x67, 0x29, 0xfd, + 0x45, 0xf3, 0x2a, 0x1d, 0x20, 0x00, 0x64, 0x2e, 0xb7, 0x20, 0x05, 0xc2, + 0x13, 0x03, 0xb3, 0x7e, 0x14, 0x5c, 0x0a, 0x90, 0x05, 0xb8, 0x09, 0xdf, + 0xff, 0x00, 0x2c, 0xb1, 0xa8, 0xc2, 0x2d, 0x00, 0xd0, 0xb9, 0x08, 0x84, + 0xbc, 0xec, 0xb7, 0x10, 0x06, 0x32, 0xff, 0x1d, 0x04, 0x35, 0x00, 0x04, + 0x3b, 0x04, 0x4c, 0x04, 0x41, 0x04, 0x3e, 0xe5, 0x28, 0x1f, 0x10, 0x0e, + 0x14, 0x7f, 0x0e, 0xf6, 0x7f, 0x08, 0x08, 0x20, 0x01, 0x0b, 0x20, 0x05, + 0x20, 0x09, 0x07, 0x40, 0x0a, 0xa3, 0xe2, 0x32, 0x7b, 0x00, 0x08, 0x00, + 0x0a, 0x5f, 0xce, 0x28, 0x0d, 0xb9, 0x30, 0xe9, 0xb1, 0x28, 0x19, 0xc9, + 0x05, 0xc8, 0x0f, 0x98, 0x17, 0x6f, 0x00, 0x72, 0x2f, 0xa9, 0x68, 0x68, + 0x28, 0x1d, 0x3f, 0xb9, 0x64, 0x10, 0x15, 0xe0, 0x7f, 0x17, 0x53, 0x30, + 0x10, 0x57, 0x27, 0x59, 0x06, 0x98, 0x17, 0x78, 0xb1, 0xa4, 0xc2, 0x0d, + 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x78, 0x97, 0x0e, 0xf3, 0x7f, 0x1d, 0x28, + 0x0f, 0x15, 0x40, 0x04, 0x42, 0x28, 0x1b, 0x35, 0x28, 0x17, 0x34, 0x06, + 0x08, 0x19, 0x95, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x09, 0x20, 0x01, 0x08, + 0x20, 0x05, 0x0a, 0x30, 0x04, 0x04, 0x09, 0x09, 0x9a, 0xe6, 0xf5, 0x28, + 0x17, 0x0c, 0x5f, 0x15, 0xb5, 0x30, 0xa6, 0x06, 0xc8, 0x17, 0x53, 0x2f, + 0xa9, 0x75, 0x06, 0xa8, 0x17, 0xa1, 0x10, 0x0e, 0xf0, 0x7f, 0x57, 0x06, + 0xe8, 0x17, 0xac, 0xc0, 0xb0, 0xc6, 0x06, 0xb8, 0x19, 0x83, 0x0e, 0xf3, + 0x7f, 0x21, 0x04, 0x30, 0x04, 0x43, 0x06, 0xa8, 0x17, 0x10, 0x16, 0xf4, + 0xff, 0x00, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0d, 0x0a, 0x0a, 0x00, 0x0b, + 0x0c, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0xff, 0xde, 0xbb, 0x77, + 0x00, 0x00, 0x0d, 0x5f, 0x46, 0xbf, 0x28, 0x13, 0xca, 0x30, 0xad, 0x06, + 0x48, 0x13, 0x3f, 0xff, 0x54, 0xa0, 0x2f, 0xa5, 0x72, 0x4f, 0xa9, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x81, 0x10, 0x16, 0x10, 0x7f, 0x58, 0xc9, 0x62, + 0xb3, 0x7e, 0xfa, 0x06, 0x88, 0x1b, 0x00, 0xc0, 0xd0, 0x7c, 0xb7, 0x98, + 0xb0, 0xa4, 0xd0, 0xaa, 0x10, 0x06, 0x73, 0x7f, 0x22, 0x28, 0x17, 0x40, + 0x28, 0x1b, 0x3d, 0x28, 0x1f, 0x3a, 0x30, 0x04, 0x38, 0x06, 0x08, 0x17, + 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x0c, 0x0c, 0x0c, 0x01, 0x0c, 0x0e, 0x0b, + 0x0b, 0x0c, 0x0d, 0x0c, 0x28, 0x19, 0x00, 0x0b, 0x0b, 0x38, 0xe4, 0xc9, + 0x7b, 0x00, 0x00, 0x00, 0x0e, 0x5f, 0xef, 0x30, 0xa4, 0x30, 0xab, 0x30, + 0x55, 0xc8, 0x06, 0x88, 0x17, 0x57, 0x2f, 0xa5, 0x69, 0x28, 0x11, 0x61, + 0x2f, 0xb3, 0x40, 0x6f, 0x10, 0x16, 0x20, 0x7f, 0x00, 0x60, 0x61, 0x53, + 0x58, 0x62, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0x40, 0xc6, 0x74, 0xc7, + 0x74, 0x15, 0xce, 0xa0, 0xd1, 0x10, 0x06, 0x73, 0x7f, 0x23, 0x28, 0x17, + 0x38, 0x28, 0x11, 0x06, 0x30, 0x04, 0x42, 0x04, 0x3e, 0x06, 0x08, 0x15, + 0x10, 0x17, 0x14, 0xff, 0x0c, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x10, 0x28, + 0x1a, 0x0f, 0x0e, 0x40, 0x0e, 0x38, 0x22, 0x23, 0xe5, 0xa2, 0x7c, 0x00, + 0x00, 0x00, 0x0f, 0x5f, 0xae, 0x30, 0xba, 0x30, 0xdc, 0x30, 0x14, 0xfc, + 0x30, 0xf3, 0x06, 0x68, 0x19, 0x47, 0x2f, 0xa3, 0x73, 0x00, 0x54, 0x62, + 0x28, 0x13, 0x72, 0x2f, 0xb3, 0x65, 0x10, 0x16, 0x00, 0x7f, 0x09, 0x54, + 0x02, 0xaf, 0x65, 0x2f, 0x4f, 0x69, 0x60, 0x06, 0x78, 0x19, 0x30, 0x06, + 0xae, 0x88, 0xc9, 0x88, 0xbc, 0x06, 0x7b, 0x95, 0x0f, 0x13, 0x7f, 0x13, + 0x88, 0x28, 0x15, 0x41, 0x04, 0x31, 0x28, 0x13, 0x40, 0x04, 0x3d, 0xc0, + 0x06, 0x28, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x04, 0x04, 0x04, 0x04, + 0x05, 0x00, 0x0d, 0x0d, 0x04, 0x05, 0x03, 0x04, 0x0d, 0x0d, 0x00, 0x0d, + 0x0d, 0x81, 0xe4, 0x97, 0x7e, 0x00, 0x00, 0x00, 0x10, 0x5f, 0xa6, 0x30, + 0xa7, 0x30, 0xb9, 0x30, 0x1d, 0xc8, 0x30, 0xb3, 0x28, 0x1b, 0x30, 0x07, + 0x06, 0x1f, 0xaf, 0x65, 0x28, 0x17, 0x05, 0x74, 0x00, 0x20, 0x00, 0x43, + 0x2f, 0xaf, 0x61, 0x40, 0x0b, 0xeb, 0x10, 0x0d, 0xb0, 0x7f, 0x31, 0xf5, + 0x31, 0xff, 0x61, 0x22, 0x01, 0x4f, 0x62, 0x0b, 0x05, 0xba, 0x1d, 0x0c, + 0x7f, 0x89, 0xb8, 0x5c, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xe8, 0xc6, 0x03, + 0xa4, 0xc2, 0xb8, 0xd2, 0x54, 0xcf, 0x30, 0x05, 0x06, 0x3b, 0x99, 0x88, + 0x0e, 0xf1, 0xff, 0x23, 0x04, 0x4d, 0x28, 0x17, 0x42, 0x04, 0x2d, 0x3c, + 0x00, 0x1a, 0x28, 0x1b, 0x30, 0x09, 0x10, 0x15, 0xd4, 0xff, 0x06, 0xf6, + 0xff, 0x0e, 0x10, 0x00, 0x10, 0x10, 0x10, 0x04, 0x0e, 0x0e, 0x10, 0x04, + 0x00, 0x0f, 0x10, 0x0e, 0x0e, 0x0e, 0x0e, 0xd1, 0xe1, 0x01, 0xc0, 0x79, + 0x00, 0x00, 0x11, 0x5f, 0xde, 0x28, 0x0f, 0x06, 0xeb, 0x30, 0xdc, 0x30, + 0xed, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x4d, 0x88, 0x28, 0x0b, 0x72, 0x00, + 0x6c, 0x6f, 0xb1, 0x6f, 0x00, 0x75, 0x08, 0x00, 0x67, 0x00, 0x68, 0x10, + 0x15, 0xa0, 0x7f, 0x6c, 0x9a, 0x14, 0x04, 0x5c, 0x2f, 0x4f, 0xd2, 0x52, + 0x06, 0x78, 0x1b, 0xd0, 0xb9, 0x0c, 0x84, 0xbc, 0xec, 0xb7, 0x06, 0x78, + 0x95, 0x0f, 0x13, 0x7f, 0x1c, 0x04, 0x01, 0x30, 0x04, 0x3b, 0x04, 0x4c, + 0x04, 0x31, 0x28, 0x15, 0x62, 0x40, 0x28, 0x19, 0x10, 0x1d, 0xf4, 0xff, + 0x0f, 0x07, 0x07, 0x20, 0x01, 0x0f, 0x08, 0x0f, 0x07, 0x08, 0x05, 0x20, + 0x05, 0x0f, 0x0f, 0x7b, 0x00, 0xe2, 0xb4, 0x7b, 0x00, 0x00, 0x12, 0x5f, + 0xbf, 0x02, 0x30, 0xb9, 0x30, 0xde, 0x30, 0xf3, 0x06, 0x68, 0x15, 0x00, + 0x2a, 0x00, 0x54, 0x4f, 0xa3, 0x6d, 0x2f, 0xa9, 0x6e, 0x10, 0x16, 0x50, + 0x7f, 0x58, 0x08, 0xaf, 0x65, 0xfc, 0x66, 0x06, 0x78, 0x15, 0x00, 0x00, + 0xdc, 0x06, 0xd0, 0x88, 0xc9, 0x3c, 0xba, 0x06, 0x98, 0x17, 0x0e, 0xf3, + 0x7f, 0x22, 0x8b, 0x28, 0x17, 0x41, 0x04, 0x3c, 0x28, 0x1d, 0x3d, 0x06, + 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x00, 0x10, 0x0d, 0x0d, 0x0d, 0x0d, + 0x0f, 0x10, 0x10, 0x00, 0x0d, 0x0e, 0x0d, 0x0d, 0x10, 0x10, 0x10, 0x10, + 0x1a, 0x9a, 0xe2, 0x27, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x38, 0x34, + 0x0c, 0x00, 0x01, 0x01, 0x0f, 0x10, 0x02, 0x0f, 0x01, 0x01, 0x12, 0x01, + 0x01, 0x02, 0x30, 0x04, 0x0a, 0x02, 0x20, 0x06, 0x09, 0x02, 0x01, 0x02, + 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x51, 0x03, 0x20, 0x06, 0x01, + 0x20, 0x05, 0x03, 0x03, 0x04, 0x30, 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, + 0x04, 0x20, 0x05, 0x04, 0x04, 0x05, 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, + 0x05, 0x05, 0x0a, 0x00, 0x0b, 0x0a, 0x0a, 0x05, 0x05, 0x05, 0x05, 0x06, + 0x80, 0x30, 0x04, 0x01, 0x06, 0x06, 0x05, 0x06, 0x10, 0x05, 0x04, 0x06, + 0x06, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x65, 0x07, 0x30, 0x08, + 0x38, 0xaa, 0x08, 0x08, 0x20, 0x01, 0x0b, 0x20, 0x05, 0x4d, 0x09, 0x50, + 0x0a, 0x09, 0x09, 0x20, 0x01, 0x30, 0x05, 0x0a, 0x50, 0x0a, 0x00, 0x0a, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0d, 0x0a, 0x0a, 0x18, 0x0b, 0x0c, 0x0b, 0x20, + 0x51, 0x30, 0x07, 0x0c, 0x0c, 0x0c, 0x03, 0x0e, 0x0b, 0x0b, 0x0c, 0x0d, + 0x0c, 0x20, 0x11, 0x20, 0x07, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x10, 0x20, + 0x12, 0x0f, 0x0e, 0x50, 0x0e, 0x30, 0x1a, 0x0d, 0x40, 0x84, 0x0d, 0x0d, + 0x04, 0x05, 0x2a, 0x03, 0x04, 0x30, 0xf2, 0x0e, 0x30, 0xec, 0x04, 0x20, + 0x22, 0x04, 0x3c, 0x0f, 0x10, 0x30, 0x2a, 0xf9, 0x1f, 0xf1, 0x17, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x11, 0x54, 0xab, 0x00, 0x11, 0x14, 0x00, 0x00, + 0x30, 0x01, 0x60, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9f, 0x2a, 0x9d, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x60, 0xaa, 0x30, 0xb9, 0x30, 0xed, 0x40, 0x30, 0x06, 0x98, 0x1b, + 0x4f, 0x00, 0x73, 0x00, 0x6c, 0x00, 0x40, 0x6f, 0x10, 0x16, 0x80, 0x7f, + 0x65, 0x59, 0xaf, 0x65, 0x46, 0x96, 0x81, 0x06, 0x9b, 0x1b, 0x24, 0xc6, + 0xac, 0xc2, 0x5c, 0xb8, 0x10, 0x06, 0x93, 0x7f, 0x00, 0x1e, 0x04, 0x41, + 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x80, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x0b, + 0x0b, 0x0b, 0x0c, 0x0b, 0x01, 0xa4, 0x20, 0x06, 0x09, 0x20, 0x05, 0x01, + 0x01, 0x58, 0x17, 0x08, 0x60, 0x00, 0xa2, 0x30, 0xfc, 0x30, 0xb1, 0x30, + 0xb7, 0x30, 0x10, 0xe5, 0x30, 0xd5, 0x20, 0x09, 0xb9, 0x30, 0x0c, 0x77, + 0x80, 0x05, 0xdf, 0xbf, 0x41, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x72, 0x8e, + 0x28, 0x1d, 0x68, 0x00, 0x75, 0x28, 0x23, 0x05, 0xff, 0xbd, 0x10, 0x0e, + 0xf0, 0x7f, 0x3f, 0x00, 0x96, 0x4b, 0x51, 0xc0, 0x4e, 0xe1, 0x80, 0xaf, + 0x10, 0x65, 0xe1, 0x90, 0x06, 0x3f, 0xb9, 0x44, 0xc5, 0x00, 0xcf, 0x00, + 0x74, 0xb9, 0xa4, 0xc2, 0xc4, 0xd6, 0xa4, 0xc2, 0x08, 0x20, 0x00, 0xfc, + 0xc8, 0x10, 0x05, 0xf2, 0xff, 0x10, 0x04, 0x3a, 0x08, 0x04, 0x35, 0x04, + 0x40, 0x28, 0x1d, 0x45, 0x04, 0x43, 0xe9, 0x28, 0x23, 0x10, 0x15, 0xf4, + 0x7f, 0x06, 0xf6, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x0a, + 0x02, 0x02, 0x02, 0x02, 0x58, 0x17, 0x09, 0x28, 0x17, 0xa6, 0x80, 0x28, + 0x0d, 0xc8, 0x30, 0xfb, 0x30, 0xa2, 0x30, 0xb0, 0x0a, 0x30, 0xc7, 0x30, + 0xeb, 0x05, 0xe8, 0x19, 0x41, 0x48, 0x0d, 0x74, 0x23, 0x00, 0x2d, 0x28, + 0x21, 0x67, 0x00, 0x64, 0x48, 0x23, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x1c, + 0x4e, 0x3f, 0x96, 0x3c, 0x68, 0xb7, 0x5f, 0x20, 0x14, 0x5c, 0x06, 0x58, + 0x17, 0xd0, 0xc5, 0xb0, 0xc6, 0xa4, 0x00, 0xc2, 0xb8, 0xd2, 0x44, 0xc5, + 0xf8, 0xad, 0x70, 0x1a, 0xb3, 0x74, 0xb9, 0x05, 0xf8, 0x1b, 0x0e, 0xf3, + 0x7f, 0x2d, 0x48, 0x0d, 0x42, 0x23, 0x04, 0x2d, 0x28, 0x21, 0x33, 0x04, + 0x34, 0x48, 0x23, 0x10, 0x1d, 0xb4, 0xff, 0x4a, 0x03, 0x38, 0x0c, 0x02, + 0x03, 0x20, 0x06, 0x14, 0x20, 0x05, 0x03, 0x00, 0x03, 0x96, 0x29, 0x3e, + 0x06, 0x00, 0x00, 0x0a, 0x2b, 0x60, 0xd6, 0x28, 0x15, 0xb1, 0x28, 0x0d, + 0xfc, 0x05, 0xe8, 0x0f, 0x7f, 0xff, 0x6c, 0x42, 0x4f, 0xa5, 0x5f, 0xb3, + 0x75, 0x28, 0x17, 0x10, 0x15, 0xf0, 0x7f, 0x03, 0x5e, 0x02, 0xaf, 0x65, + 0x4b, 0x51, 0x15, 0x54, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x80, 0xbd, + 0xa4, 0xc2, 0x00, 0xcf, 0xe8, 0x6a, 0xb8, 0x05, 0xf8, 0x0f, 0x0f, 0x73, + 0x7f, 0x11, 0x48, 0x17, 0x3a, 0x48, 0x0f, 0x43, 0xd2, 0x28, 0x17, 0x10, + 0x1d, 0xf4, 0xff, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, 0x02, 0x80, + 0x20, 0x05, 0x04, 0x04, 0x7a, 0x2a, 0x41, 0x07, 0x00, 0x00, 0x00, 0x0b, + 0x60, 0xd5, 0x30, 0xa3, 0x30, 0xf3, 0x28, 0x30, 0xde, 0x28, 0x19, 0xaf, + 0x06, 0x48, 0x19, 0x46, 0x00, 0x69, 0x22, 0x00, 0x6e, 0x20, 0x01, 0x6d, + 0x00, 0x61, 0x2f, 0xa9, 0x6b, 0x81, 0x10, 0x16, 0x00, 0x7f, 0xac, 0x82, + 0x6c, 0x9a, 0x4b, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x40, 0xd5, + 0xc8, 0xb9, 0x74, 0xb9, 0x30, 0x6c, 0xd0, 0x06, 0x78, 0x17, 0x0e, 0xf3, + 0x7f, 0x24, 0x04, 0x38, 0x04, 0x45, 0x3d, 0x20, 0x01, 0x3c, 0x04, 0x30, + 0x28, 0x19, 0x3a, 0x06, 0x08, 0x17, 0xa5, 0x10, 0x16, 0xf4, 0xff, 0x05, + 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x00, 0x05, 0x05, + 0xd5, 0x31, 0x27, 0x15, 0x00, 0x00, 0x01, 0x0c, 0x60, 0xd8, 0x30, 0xfc, + 0x30, 0xc9, 0x06, 0xa8, 0x17, 0x58, 0x48, 0x2f, 0xa9, 0x64, 0x06, 0x88, + 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x77, 0x6d, 0xb7, 0x43, 0x5f, 0x06, 0xb8, + 0x19, 0xe4, 0xd5, 0xdc, 0xb4, 0x06, 0xb8, 0x19, 0x0e, 0xf3, 0x7f, 0x06, + 0x25, 0x04, 0x35, 0x04, 0x34, 0x06, 0x88, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x06, 0x94, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x10, 0x20, 0x05, 0x06, + 0x06, 0x00, 0x3c, 0x2b, 0xdc, 0x07, 0x00, 0x00, 0x0d, 0x60, 0x41, 0xdb, + 0x28, 0x11, 0xc0, 0x30, 0xe9, 0x30, 0xf3, 0x06, 0x48, 0x15, 0xaa, 0x38, + 0x17, 0x6f, 0x2f, 0xa7, 0x64, 0x2f, 0xad, 0x6c, 0x2f, 0xb1, 0x6e, 0xc1, + 0x28, 0x23, 0x10, 0x15, 0xd0, 0x7f, 0x0d, 0x97, 0xbe, 0x8f, 0x70, 0x06, + 0x88, 0x15, 0x00, 0x00, 0x00, 0x38, 0xd6, 0x74, 0xb9, 0xec, 0xb2, 0x31, + 0x80, 0xb7, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x25, 0x04, 0x3e, 0x28, + 0x11, 0x56, 0x34, 0x28, 0x17, 0x3b, 0x28, 0x1b, 0x3d, 0x20, 0x01, 0x10, + 0x1d, 0xd4, 0xff, 0x07, 0x94, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, 0x11, + 0x20, 0x05, 0x07, 0x07, 0x00, 0xf1, 0x2a, 0xca, 0x03, 0x00, 0x00, 0x0e, + 0x60, 0x00, 0xe0, 0x30, 0xfc, 0x30, 0xec, 0x30, 0xfb, 0x30, 0x41, 0xaa, + 0x20, 0x03, 0xed, 0x30, 0xe0, 0x30, 0xb9, 0x28, 0x25, 0x62, 0xfc, 0x28, + 0x2b, 0x05, 0x78, 0x25, 0x4d, 0x00, 0xf8, 0x2f, 0xa9, 0x65, 0x2a, 0x00, + 0x20, 0x28, 0x1f, 0x67, 0x20, 0x05, 0x52, 0x28, 0x27, 0x6d, 0x30, 0x00, + 0x73, 0x68, 0x29, 0x10, 0x15, 0x10, 0x7f, 0xd8, 0x9e, 0xd2, 0x52, 0x00, + 0x2d, 0x00, 0x81, 0x9c, 0xc6, 0x59, 0xaf, 0x65, 0x08, 0xbe, 0x8f, 0x14, + 0x5c, 0x05, 0xf8, 0x21, 0xfc, 0xba, 0x08, 0x00, 0xb8, 0x24, 0xc6, 0xf8, + 0xad, 0x6c, 0xb8, 0xa4, 0x18, 0xc2, 0xec, 0xb2, 0x06, 0x18, 0x1d, 0x0e, + 0xf3, 0x7f, 0x1c, 0x04, 0x51, 0x80, 0x28, 0x17, 0x35, 0x04, 0x2d, 0x00, + 0x3e, 0x04, 0x33, 0x80, 0x20, 0x05, 0x20, 0x04, 0x43, 0x04, 0x3c, 0x04, + 0x41, 0xd1, 0x68, 0x29, 0x10, 0x1d, 0x14, 0xff, 0x08, 0x28, 0x0c, 0x08, + 0x07, 0x08, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, 0x08, 0x08, 0xa0, 0x2c, + 0x25, 0x05, 0x04, 0x00, 0x00, 0x0f, 0x60, 0xcc, 0x48, 0x05, 0xe9, 0x30, + 0x6e, 0xf3, 0x05, 0x88, 0x09, 0xdf, 0xff, 0x4e, 0x6f, 0xaf, 0x06, 0x5f, + 0xad, 0x10, 0x0f, 0x10, 0x7f, 0xfa, 0x06, 0x8b, 0x14, 0x5c, 0x70, 0x51, + 0x05, 0xf8, 0x0d, 0x9f, 0xff, 0x78, 0x06, 0xb1, 0x7c, 0xb9, 0x80, 0xb7, + 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x1d, 0xa3, 0x28, 0x07, 0x40, 0x28, + 0x01, 0x30, 0x04, 0x3d, 0x20, 0x01, 0x10, 0x1e, 0x14, 0xff, 0x04, 0x09, + 0x09, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x09, 0x07, 0x80, 0x40, 0x05, 0xd7, + 0x2f, 0x3e, 0x0a, 0x00, 0x00, 0x10, 0x82, 0x68, 0x17, 0xfb, 0x30, 0xc8, + 0x30, 0xed, 0x28, 0x1b, 0xc7, 0x8c, 0x28, 0x21, 0xfc, 0x30, 0xb0, 0x05, + 0xa8, 0x23, 0x78, 0x17, 0x2d, 0x00, 0x55, 0x54, 0x2f, 0xb7, 0xf8, 0x48, + 0x1b, 0x65, 0x48, 0x25, 0x67, 0x10, 0x15, 0x40, 0x7f, 0x00, 0x17, 0x53, + 0x79, 0x72, 0x26, 0x4f, 0xb7, 0x5f, 0x08, 0xc9, 0x62, 0x3c, 0x68, 0x06, + 0x38, 0x1d, 0x78, 0xb1, 0x74, 0x00, 0xb9, 0xb8, 0xd2, 0xb0, 0xb8, 0x2c, + 0xb1, 0x7c, 0x1c, 0xb7, 0xf8, 0xad, 0x06, 0x18, 0x1f, 0x0e, 0xf3, 0x7f, + 0x58, 0x17, 0x2d, 0x00, 0x51, 0x22, 0x28, 0x1d, 0x51, 0x28, 0x1b, 0x34, + 0x04, 0x35, 0x48, 0x25, 0x60, 0x33, 0x05, 0x68, 0x23, 0x10, 0x16, 0xf4, + 0xff, 0x0a, 0x08, 0x08, 0x08, 0x09, 0x28, 0x08, 0x0a, 0x20, 0x06, 0x06, + 0x20, 0x05, 0x0a, 0x0a, 0x8d, 0x00, 0x2d, 0x55, 0x08, 0x00, 0x00, 0x11, + 0x60, 0xaa, 0x0b, 0x30, 0xc3, 0x30, 0xd7, 0x28, 0x0d, 0xf3, 0x05, 0xa8, + 0x0b, 0xbf, 0xff, 0x1c, 0x4f, 0x00, 0x70, 0x20, 0x01, 0x06, 0x7f, 0xad, + 0x10, 0x0f, 0x10, 0x7f, 0x65, 0x59, 0x0c, 0x6e, 0x66, 0x70, 0x51, 0x06, + 0x38, 0x11, 0x5f, 0xff, 0x24, 0xc6, 0x0c, 0x0c, 0xd5, 0x80, 0xb7, 0x06, + 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x1e, 0x04, 0x6d, 0x3f, 0x20, 0x01, 0x38, + 0x09, 0x3d, 0x28, 0x15, 0x10, 0x1e, 0x14, 0xff, 0x0b, 0x28, 0x0c, 0x14, + 0x0b, 0x0a, 0x0b, 0x20, 0x06, 0x08, 0x20, 0x05, 0x0b, 0x0b, 0x00, 0x78, + 0x2b, 0x6b, 0x07, 0x00, 0x00, 0x12, 0x60, 0x05, 0xed, 0x30, 0xfc, 0x30, + 0xac, 0x06, 0xa8, 0x17, 0x52, 0x2f, 0xaf, 0x70, 0x67, 0x2f, 0x9d, 0x06, + 0x78, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x57, 0x7f, 0xa0, 0x52, 0x86, 0x06, + 0xb8, 0x17, 0x5c, 0xb8, 0x08, 0xac, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, + 0x20, 0x0e, 0x04, 0x43, 0x04, 0x33, 0x28, 0x15, 0x06, 0x78, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x0c, 0x02, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x0c, 0x20, + 0x06, 0x0a, 0x82, 0x20, 0x05, 0x0c, 0x0c, 0xed, 0x29, 0x11, 0x2b, 0x1d, + 0x13, 0x08, 0x60, 0xbd, 0x30, 0xb0, 0x28, 0x13, 0xfb, 0x30, 0xaa, 0x82, + 0x20, 0x03, 0xd5, 0x30, 0xa3, 0x30, 0xe8, 0x28, 0x27, 0xe9, 0x28, 0x30, + 0xcd, 0x05, 0x88, 0x25, 0x53, 0x48, 0x17, 0x6e, 0x00, 0x20, 0x82, 0x48, + 0x1f, 0x20, 0x00, 0x46, 0x00, 0x6a, 0x28, 0x29, 0x72, 0xd0, 0x2f, 0xbb, + 0x3f, 0xc1, 0x65, 0x10, 0x15, 0x00, 0x7f, 0x7e, 0x67, 0x69, 0x60, 0x00, + 0x2d, 0x00, 0xf2, 0x83, 0x24, 0x5c, 0xc9, 0x62, 0x20, 0xb7, 0x8b, 0x06, + 0x18, 0x1f, 0xa1, 0xc1, 0x78, 0xb1, 0x3c, 0x01, 0xd5, 0x24, 0xc6, 0x7c, + 0xb7, 0x24, 0xb1, 0x06, 0x38, 0x1d, 0x88, 0x0e, 0xf3, 0x7f, 0x21, 0x04, + 0x3e, 0x28, 0x17, 0x3d, 0x04, 0x2d, 0x40, 0x00, 0x30, 0x07, 0x2d, 0x00, + 0x24, 0x04, 0x4c, 0x04, 0x16, 0x4e, 0x04, 0x40, 0x48, 0x25, 0x35, 0x05, + 0x28, 0x25, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x04, 0x0e, 0x0e, 0x0e, 0x0f, + 0x0e, 0x28, 0x1b, 0x0e, 0x0c, 0x82, 0x20, 0x05, 0x0d, 0x0d, 0x8a, 0x2b, + 0xd4, 0x2b, 0x1b, 0x14, 0x88, 0x28, 0x17, 0xfc, 0x30, 0xeb, 0x28, 0x17, + 0xc8, 0x30, 0xed, 0xae, 0x28, 0x1f, 0xc7, 0x28, 0x13, 0xfc, 0x28, 0x29, + 0x05, 0x78, 0x15, 0x38, 0x17, 0xf8, 0x8a, 0x28, 0x05, 0x2d, 0x00, 0x54, + 0x28, 0x0b, 0xf8, 0x4f, 0xb1, 0x65, 0xa0, 0x4f, 0xbb, 0x67, 0x10, 0x15, + 0x60, 0x7f, 0x57, 0x53, 0x79, 0x72, 0x26, 0x01, 0x4f, 0xb7, 0x5f, 0xc9, + 0x62, 0x3c, 0x68, 0x06, 0x18, 0x15, 0x00, 0x00, 0x00, 0xe0, 0xc1, 0x74, + 0xb9, 0xb8, 0xd2, 0x00, 0xb0, 0xb8, 0x2c, 0xb1, 0x7c, 0xb7, 0xf8, 0xad, + 0xc4, 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x51, 0x28, 0x05, + 0x2d, 0x00, 0x55, 0x22, 0x28, 0x0b, 0x51, 0x28, 0x1f, 0x34, 0x28, 0x0d, + 0x3b, 0x28, 0x15, 0x60, 0x33, 0x05, 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, + 0x0e, 0x0f, 0x0f, 0x0f, 0x10, 0x48, 0x0f, 0x28, 0x1b, 0x0f, 0x0b, 0x20, + 0x05, 0x0e, 0x0e, 0x1b, 0x00, 0x2d, 0x64, 0x07, 0x00, 0x00, 0x15, 0x60, + 0xc6, 0x0b, 0x30, 0xec, 0x30, 0xde, 0x28, 0x19, 0xaf, 0x05, 0xa8, 0x0b, + 0xbf, 0xff, 0x44, 0x54, 0x48, 0x07, 0x65, 0x00, 0x6d, 0x2f, 0x9f, 0x72, + 0x00, 0x40, 0x6b, 0x10, 0x16, 0x00, 0x7f, 0xf0, 0x6c, 0xd2, 0x52, 0x6c, + 0x9a, 0x30, 0x4b, 0x51, 0x06, 0x38, 0x13, 0x42, 0xff, 0xd1, 0x08, 0xb8, + 0xc8, 0x06, 0xb9, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x18, 0x13, 0x0f, 0x33, + 0x7f, 0x22, 0x88, 0x48, 0x07, 0x35, 0x04, 0x3c, 0x28, 0x0b, 0x40, 0x04, + 0x3a, 0xc5, 0x05, 0x68, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x0f, 0x11, 0x11, + 0x20, 0x01, 0x0f, 0x20, 0x06, 0x40, 0x0d, 0x20, 0x05, 0x0f, 0x0f, 0x1a, + 0x2a, 0xcb, 0x06, 0x00, 0x00, 0x00, 0x16, 0x60, 0xc8, 0x30, 0xed, 0x30, + 0x18, 0xe0, 0x30, 0xb9, 0x06, 0x68, 0x15, 0x38, 0x17, 0x72, 0x00, 0x6f, + 0xb0, 0x28, 0x15, 0x73, 0x06, 0x55, 0x96, 0x10, 0x0f, 0x00, 0x7f, 0x79, + 0x72, 0x57, 0x7f, 0x08, 0xc6, 0x59, 0xaf, 0x65, 0x06, 0x78, 0x17, 0xb8, + 0xd2, 0x6c, 0x1a, 0xb8, 0xa4, 0xc2, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, + 0x22, 0x28, 0x0d, 0x3e, 0xb1, 0x28, 0x15, 0x41, 0x06, 0x08, 0x11, 0x10, + 0x17, 0x54, 0xff, 0x10, 0x12, 0x12, 0x20, 0x01, 0x50, 0x10, 0x20, 0x06, + 0x0e, 0x20, 0x05, 0x10, 0x10, 0x8d, 0x31, 0x00, 0x78, 0x0d, 0x00, 0x00, + 0x17, 0x60, 0xf4, 0x30, 0x40, 0xa7, 0x28, 0x15, 0xc8, 0x30, 0xfb, 0x30, + 0xa2, 0x30, 0x05, 0xb0, 0x30, 0xc7, 0x30, 0xeb, 0x05, 0xe8, 0x21, 0x56, + 0x2f, 0xaf, 0x00, 0x73, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x16, + 0x67, 0x00, 0x64, 0x2f, 0xbd, 0x72, 0x05, 0xcf, 0xb3, 0x10, 0x0e, 0xf0, + 0x7f, 0x7f, 0x00, 0x89, 0x3f, 0x96, 0x3c, 0x68, 0xb7, 0x5f, 0x14, 0x40, + 0x5c, 0x06, 0x58, 0x19, 0xa0, 0xbc, 0xa4, 0xc2, 0xb8, 0xd2, 0x00, 0x44, + 0xc5, 0xf8, 0xad, 0x70, 0xb3, 0x74, 0xb9, 0xc4, 0x06, 0x18, 0x1f, 0x0e, + 0xf3, 0x7f, 0x12, 0x04, 0x35, 0x28, 0x13, 0x42, 0x04, 0x01, 0x2d, 0x00, + 0x10, 0x04, 0x33, 0x04, 0x34, 0x20, 0x0d, 0x62, 0x40, 0x05, 0xc8, 0x21, + 0x10, 0x16, 0xf4, 0xff, 0x11, 0x13, 0x13, 0x20, 0x01, 0x11, 0xa0, 0x20, + 0x06, 0x03, 0x20, 0x05, 0x11, 0x11, 0x5d, 0x29, 0xb1, 0x08, 0x05, 0x00, + 0x00, 0x18, 0x88, 0x17, 0xd5, 0x30, 0xa9, 0xd6, 0x06, 0x08, 0x13, 0xb8, + 0x17, 0x66, 0x2f, 0xb5, 0x6c, 0x28, 0x17, 0x10, 0x15, 0xf0, 0x7f, 0x7f, + 0x19, 0x89, 0x8f, 0x79, 0x06, 0x78, 0x13, 0x98, 0x17, 0xf4, 0xd3, 0x06, + 0x18, 0x11, 0xc1, 0x0f, 0x53, 0x7f, 0x78, 0x17, 0x44, 0x04, 0x3e, 0x04, + 0x3b, 0x20, 0x01, 0x8a, 0x10, 0x1d, 0xf4, 0xff, 0x12, 0x14, 0x14, 0x20, + 0x01, 0x12, 0x20, 0x06, 0x04, 0x80, 0x20, 0x05, 0x12, 0x12, 0x2a, 0x2a, + 0x69, 0x07, 0x00, 0x08, 0x00, 0x19, 0x60, 0xa8, 0x06, 0xc8, 0x15, 0x00, + 0x00, 0xd8, 0xc9, 0x06, 0xc8, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x1c, 0x4e, + 0x06, 0xd8, 0x17, 0x78, 0xc6, 0x06, 0xd8, 0x17, 0xb0, 0x0e, 0xf3, 0x7f, + 0x2d, 0x06, 0xc8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x13, 0x0c, 0x0c, 0x0c, + 0x14, 0x0d, 0x0c, 0x13, 0x20, 0x06, 0x13, 0x20, 0x05, 0x13, 0x13, 0x10, + 0x29, 0x2a, 0xe5, 0x28, 0x17, 0x1a, 0x60, 0xb9, 0x30, 0x05, 0xf4, 0x30, + 0xa1, 0x30, 0xfc, 0x28, 0x15, 0xd0, 0x28, 0x19, 0x08, 0xf8, 0x8a, 0xf6, + 0x5c, 0x05, 0xdf, 0xb2, 0x53, 0x00, 0x76, 0x2b, 0x00, 0x61, 0x2f, 0xa9, + 0x62, 0x20, 0x05, 0x72, 0x06, 0x2f, 0xaf, 0x0e, 0xf0, 0x7f, 0x63, 0x49, + 0x2f, 0xad, 0x3f, 0xa9, 0x65, 0x00, 0x20, 0x06, 0x41, 0x8b, 0x06, 0xf1, + 0xff, 0x00, 0xaf, 0x65, 0xe6, 0x74, 0x14, 0x5c, 0xf4, 0x5d, 0x18, 0xa4, + 0x7f, 0x9b, 0x05, 0xe2, 0xf9, 0x5f, 0xff, 0xa4, 0xc2, 0x1c, 0x00, 0xbc, + 0x14, 0xbc, 0x74, 0xb9, 0x20, 0x00, 0x1c, 0x10, 0xc8, 0xc4, 0xb3, 0x06, + 0x1b, 0x97, 0x53, 0x00, 0x70, 0x00, 0x55, 0x69, 0x2f, 0xaf, 0x73, 0x23, + 0x81, 0x65, 0x23, 0x81, 0x67, 0x2f, 0xbf, 0x40, 0x6e, 0x0d, 0xa3, 0xff, + 0x28, 0x04, 0x3f, 0x04, 0x38, 0x04, 0x00, 0x46, 0x04, 0x31, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x5c, 0x33, 0x20, 0x05, 0x3d, 0x05, 0xc8, 0x1d, 0x10, + 0x06, 0xf4, 0xff, 0x0e, 0xf6, 0x7f, 0x14, 0x10, 0x05, 0x10, 0x10, 0x07, + 0x10, 0x14, 0x20, 0x06, 0x12, 0x20, 0x05, 0x02, 0x14, 0x14, 0x9e, 0x37, + 0x0e, 0x0b, 0x00, 0x3f, 0xff, 0x01, 0x02, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, + 0x01, 0x20, 0x06, 0x09, 0x89, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, + 0x01, 0x02, 0x40, 0x06, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, + 0x02, 0x03, 0xa2, 0x20, 0x06, 0x14, 0x20, 0x05, 0x03, 0x03, 0x04, 0x30, + 0x04, 0x03, 0x51, 0x04, 0x20, 0x06, 0x02, 0x20, 0x05, 0x04, 0x04, 0x05, + 0x30, 0x04, 0x28, 0x04, 0x05, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x05, 0x05, + 0x06, 0x94, 0x30, 0x04, 0x05, 0x06, 0x20, 0x06, 0x10, 0x20, 0x05, 0x06, + 0x06, 0x4a, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x11, 0x20, 0x05, + 0x07, 0x2a, 0x07, 0x08, 0x40, 0x03, 0x08, 0x20, 0x06, 0x05, 0x20, 0x05, + 0x08, 0x02, 0x08, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x09, 0x52, + 0x07, 0x40, 0x05, 0x0a, 0x30, 0x13, 0x08, 0x0a, 0x20, 0x06, 0x06, 0x8a, + 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x40, 0x03, 0x0b, 0x20, 0x06, 0x08, 0xc1, + 0x20, 0x05, 0x20, 0xab, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x28, 0xf3, 0x30, + 0x0d, 0x0a, 0x20, 0x05, 0x28, 0xfb, 0x0e, 0x0e, 0x0e, 0x0f, 0x4c, 0x0e, + 0x20, 0x13, 0x0e, 0x0c, 0x20, 0x05, 0x20, 0x1b, 0x0f, 0x0f, 0x13, 0x0f, + 0x10, 0x0f, 0x20, 0x13, 0x0f, 0x0b, 0x20, 0x05, 0x20, 0x1b, 0x2b, 0x11, + 0x11, 0x20, 0x01, 0x0f, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x20, 0x1b, 0x32, + 0x12, 0x12, 0x20, 0x01, 0x21, 0x15, 0x12, 0x0e, 0x20, 0x05, 0x10, 0x25, + 0x10, 0x11, 0x39, 0x34, 0x13, 0x11, 0x20, 0x06, 0x03, 0x20, 0x05, 0x12, + 0x11, 0x11, 0x12, 0x31, 0x2c, 0x14, 0x12, 0x20, 0x06, 0x04, 0x9c, 0x20, + 0x05, 0x12, 0x12, 0xf9, 0x5f, 0xf1, 0x57, 0x3f, 0xf2, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb4, 0x8a, 0x00, + 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x61, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x26, 0x25, 0xf0, + 0x0e, 0x00, 0x00, 0x00, 0x02, 0x61, 0xde, 0x30, 0xbe, 0x30, 0xd5, 0x04, + 0x30, 0xb7, 0x30, 0xa7, 0x30, 0x06, 0x58, 0x1f, 0x4d, 0x00, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x6a, 0x69, 0x20, 0x09, 0x06, + 0x50, 0x7f, 0x7a, 0x60, 0x7f, 0x65, 0x06, 0xa0, 0xff, 0x77, 0xb0, 0x40, + 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x31, 0xff, 0x6c, 0x9a, 0x50, 0x4f, + 0x02, 0x2b, 0x59, 0x0d, 0x82, 0x01, 0x77, 0x06, 0x5b, 0x1f, 0xc8, 0x01, + 0xb9, 0x70, 0xc8, 0x04, 0xd5, 0x70, 0xc1, 0x06, 0x7b, 0x9d, 0xa8, 0xb2, + 0xff, 0xeb, 0x06, 0x83, 0xff, 0xf3, 0x06, 0x83, 0xff, 0x1c, 0x04, 0x30, + 0x00, 0x04, 0x37, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x35, 0x08, 0x04, 0x46, + 0x04, 0x3a, 0x20, 0x09, 0x35, 0x04, 0x20, 0x30, 0x00, 0x32, 0x40, 0x07, + 0x30, 0x05, 0x34, 0x04, 0x41, 0x04, 0x70, 0x42, 0x40, 0x09, 0x0c, 0x94, + 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x01, 0x08, 0x08, 0x0a, 0x00, 0x07, 0x07, + 0x01, 0x01, 0x08, 0x07, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x58, + 0x17, 0x03, 0x61, 0xc9, 0x00, 0x30, 0xeb, 0x30, 0xcc, 0x30, 0xa3, 0x30, + 0xfb, 0x80, 0x28, 0x1b, 0xed, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0xaf, 0xa0, + 0x05, 0xc8, 0x21, 0x4c, 0x47, 0x13, 0x65, 0x00, 0x72, 0x00, 0x20, 0x2a, + 0x00, 0x53, 0x28, 0x1b, 0x6c, 0x27, 0x9d, 0x73, 0x05, 0xa8, 0x23, 0x42, + 0xab, 0x48, 0x97, 0x73, 0x28, 0x13, 0x2d, 0x60, 0x7f, 0xe9, 0x40, 0x7f, + 0x05, 0x78, 0x23, 0x50, 0x4e, 0x48, 0x8f, 0x64, 0x41, 0x01, 0x73, 0x00, + 0x63, 0x00, 0x77, 0x68, 0x81, 0x01, 0x05, 0x58, 0x25, 0x70, 0xff, 0x61, + 0x41, 0x7f, 0x05, 0xf1, 0x7d, 0x51, 0x7f, 0x60, 0x6a, 0x60, 0x7d, 0x06, + 0x11, 0xfd, 0x00, 0x00, 0x0b, 0x4e, 0x7f, 0x01, 0x89, 0xcc, 0x91, 0x7f, + 0x89, 0x9a, 0x4e, 0x06, 0x58, 0x19, 0x00, 0x58, 0xd5, 0x90, 0xc2, 0x08, + 0xb8, 0xc0, 0xc9, 0x2d, 0xd4, 0xc5, 0x06, 0x5f, 0xb7, 0x4e, 0x82, 0x7d, + 0x72, 0xff, 0x65, 0x2b, 0x27, 0xc7, 0x05, 0x98, 0x23, 0x33, 0x7f, 0x69, + 0x00, 0x78, 0xa2, 0x01, 0x53, 0x7f, 0x05, 0x7c, 0x23, 0x01, 0x1d, 0x04, + 0x38, 0x04, 0x36, 0x04, 0x3d, 0x28, 0x15, 0x57, 0x41, 0x20, 0x09, 0x3b, + 0x28, 0x1d, 0x37, 0x28, 0x09, 0x05, 0x98, 0x1f, 0x06, 0xf4, 0xff, 0x80, + 0x10, 0x0e, 0xf0, 0x7f, 0x02, 0x05, 0x01, 0x0b, 0x01, 0x01, 0x02, 0x00, + 0x02, 0x09, 0x01, 0x0a, 0x05, 0x02, 0x02, 0x02, 0x00, 0x02, 0x59, 0x24, + 0x1c, 0x0c, 0x00, 0x00, 0x04, 0x02, 0x61, 0xaf, 0x30, 0xe4, 0x30, 0xf4, + 0x48, 0x17, 0xdd, 0x00, 0x30, 0xe2, 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xa7, + 0x83, 0x05, 0xc8, 0x17, 0x4b, 0x00, 0x75, 0x00, 0x79, 0x2f, 0xb3, 0x5e, + 0xaf, 0x57, 0x6e, 0x27, 0x9d, 0x50, 0x2f, 0xbd, 0x6d, 0x48, 0x29, 0x30, + 0x0f, 0x50, 0x15, 0x15, 0x20, 0x00, 0x56, 0x2f, 0xd3, 0x69, 0x2f, 0xd5, + 0x6f, 0x47, 0x43, 0x45, 0x73, 0x27, 0x3f, 0x69, 0x00, 0x70, 0x03, 0x2f, + 0xdf, 0x43, 0x20, 0x7f, 0xf7, 0x36, 0x97, 0x3f, 0x2f, 0x38, 0x1b, 0x50, + 0x7d, 0xe9, 0x80, 0x7d, 0x04, 0xf8, 0x1f, 0x30, 0xff, 0xbf, 0x37, 0x17, + 0x77, 0x68, 0x09, 0x70, 0xff, 0x51, 0x01, 0x05, 0x18, 0x19, 0x30, 0xff, + 0x3f, 0xa9, 0xf5, 0x5f, 0xaf, 0x00, 0x31, 0x7d, 0x05, 0x10, 0x7f, 0x91, + 0xff, 0x20, 0x22, 0x0b, 0x20, 0x05, 0xc0, 0x83, 0x00, 0x93, 0x5e, 0x9a, + 0x4e, 0xe6, 0x74, 0xe8, 0x6e, 0x20, 0x77, 0x6d, 0x06, 0x58, 0x17, 0xe0, + 0xcf, 0x7c, 0xc5, 0x44, 0x00, 0xbe, 0x44, 0xc5, 0xec, 0xd3, 0x54, 0xba, + 0x7c, 0x0e, 0xb7, 0xc8, 0xb2, 0x44, 0x05, 0xe8, 0x1f, 0x72, 0x7f, 0x3f, + 0xaf, 0xeb, 0xea, 0xe2, 0x7d, 0x05, 0x3a, 0x99, 0x53, 0x7f, 0xe1, 0x00, + 0x22, 0x7f, 0xe2, 0x05, 0x42, 0x7f, 0x1a, 0x0c, 0x04, 0x43, 0x04, 0x4f, + 0x27, 0xf9, 0x58, 0x0b, 0x2d, 0x00, 0x57, 0x1f, 0x28, 0x11, 0x3c, 0x28, + 0x15, 0x40, 0x05, 0x68, 0x1d, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x00, 0x03, 0x02, 0x03, 0x06, 0x02, 0x02, 0x03, 0x03, 0x10, 0x04, 0x02, + 0x04, 0x20, 0x05, 0x03, 0x03, 0xc5, 0x25, 0x41, 0xd2, 0x28, 0x17, 0x05, + 0x61, 0xa6, 0x30, 0xc3, 0x28, 0x0b, 0xd8, 0x06, 0x5c, 0xab, 0x7b, 0x2f, + 0x64, 0x2c, 0xa1, 0x06, 0x70, 0x81, 0x41, 0x01, 0xf3, 0xa3, 0x30, 0x7f, + 0x01, 0x06, 0xd0, 0xff, 0x73, 0x00, 0x63, 0x28, 0xe9, 0x0e, 0x90, 0xff, + 0x86, 0x06, 0x91, 0xff, 0x57, 0x7f, 0x79, 0x51, 0x06, 0x58, 0x11, 0x5f, + 0xff, 0xb0, 0x1a, 0xc6, 0x58, 0xce, 0x06, 0x93, 0x7d, 0x0f, 0x11, 0xff, + 0x1b, 0x47, 0xed, 0x37, 0x0e, 0x04, 0x38, 0x04, 0x3d, 0x05, 0x68, 0x09, + 0x07, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x07, 0x04, 0x05, 0x08, + 0x05, 0x04, 0x20, 0x05, 0x20, 0x01, 0x20, 0x06, 0x00, 0x04, 0xd1, 0x24, + 0xd8, 0x0d, 0x00, 0x00, 0x06, 0x00, 0x61, 0xeb, 0x30, 0xd6, 0x30, 0xea, + 0x30, 0xf3, 0xa3, 0x06, 0x88, 0x19, 0x4c, 0x2f, 0xaf, 0x62, 0x00, 0x6c, + 0x2f, 0xfd, 0x05, 0x1f, 0x1b, 0xa0, 0x10, 0x00, 0xf0, 0x7f, 0x6f, 0x0e, + 0x21, 0xff, 0x62, 0x53, 0x03, 0x5e, 0x97, 0x40, 0x67, 0x06, 0x98, 0x19, + 0xe8, 0xb8, 0x14, 0xbe, 0xb0, 0xb9, 0xc0, 0x06, 0xbb, 0x97, 0x0e, 0xd3, + 0x7f, 0x1b, 0x04, 0x4e, 0x04, 0x31, 0x04, 0x70, 0x3b, 0x06, 0xa8, 0x17, + 0x10, 0x07, 0x94, 0xff, 0x0e, 0x36, 0xff, 0x05, 0x06, 0x06, 0x09, 0x06, + 0x06, 0x05, 0x05, 0x05, 0x06, 0x20, 0x08, 0x20, 0x06, 0x05, 0x01, 0x6f, + 0x24, 0x0d, 0x10, 0x00, 0x00, 0x07, 0x48, 0x17, 0x17, 0xb7, 0x30, 0xe5, + 0x06, 0xe8, 0x17, 0x75, 0x2f, 0x31, 0x06, 0x5e, 0x33, 0x07, 0x10, 0x7f, + 0x7c, 0x65, 0x60, 0xff, 0x06, 0x7f, 0xaf, 0x06, 0xf0, 0x7f, 0x71, 0xff, + 0x06, 0x5f, 0xb3, 0x81, 0x9c, 0x02, 0x03, 0x5e, 0xaf, 0x65, 0x61, 0x53, + 0x06, 0x78, 0x19, 0xe8, 0x07, 0xb8, 0x80, 0xbd, 0x6c, 0xc2, 0x06, 0xf8, + 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x1c, 0x43, 0x04, 0x48, 0x06, 0x48, + 0x15, 0x0f, 0x34, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x06, 0x07, 0x01, 0x07, + 0x07, 0x04, 0x06, 0x06, 0x06, 0x07, 0x20, 0x08, 0x80, 0x20, 0x06, 0x06, + 0x80, 0x25, 0xd5, 0x0a, 0x00, 0x00, 0x00, 0x08, 0x61, 0xde, 0x30, 0xa6, + 0x30, 0xa9, 0x30, 0x01, 0xdd, 0x30, 0xeb, 0x30, 0xb9, 0x30, 0xab, 0x06, + 0x28, 0x1d, 0xa0, 0x37, 0x17, 0x73, 0x28, 0x15, 0x65, 0x00, 0x72, 0x00, + 0x20, 0x22, 0x00, 0x50, 0x2e, 0xb3, 0x6c, 0x00, 0x61, 0x2f, 0xbb, 0x64, + 0xaa, 0x05, 0x6f, 0xbd, 0x50, 0x27, 0x97, 0x74, 0x2f, 0xad, 0x74, 0x27, + 0x9f, 0x2d, 0x8a, 0x60, 0x7f, 0x6f, 0x00, 0x67, 0x2f, 0xbd, 0x65, 0x05, + 0x4f, 0xbf, 0x4b, 0xaa, 0x2f, 0xab, 0x65, 0x4f, 0xad, 0x70, 0x40, 0xfb, + 0x65, 0x05, 0xef, 0x37, 0x50, 0xba, 0x2f, 0xa9, 0x63, 0x20, 0x01, 0x51, + 0x77, 0x71, 0x81, 0x6f, 0x2f, 0xbd, 0x69, 0xd1, 0x21, 0x87, 0x05, 0x51, + 0x7f, 0x71, 0x2e, 0xb3, 0x65, 0x00, 0xf1, 0x06, 0x40, 0x7f, 0x02, 0x0f, + 0x5c, 0xe2, 0x6c, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x8c, + 0xc1, 0xf4, 0xd3, 0x80, 0xb7, 0xdc, 0x7d, 0xb4, 0x06, 0x7b, 0x97, 0x92, + 0x7f, 0x72, 0xfd, 0x05, 0xd2, 0x81, 0x91, 0xff, 0x6e, 0xa2, 0x7f, 0x41, + 0xf3, 0x05, 0x82, 0x7f, 0x1c, 0x04, 0x30, 0x04, 0x3b, 0x28, 0x0f, 0x47, + 0x3f, 0x28, 0x13, 0x3b, 0x04, 0x4c, 0x06, 0x08, 0x1d, 0x06, 0xf4, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x07, 0x03, 0x0a, 0x05, 0x09, 0x09, 0x07, + 0x07, 0x08, 0x03, 0x09, 0x09, 0x03, 0x28, 0x22, 0x07, 0x98, 0x23, 0x01, + 0x2e, 0x0e, 0x00, 0x00, 0x09, 0x61, 0xaa, 0x28, 0x13, 0x1b, 0xfc, 0x30, + 0xec, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x4f, 0x87, 0x0f, 0x0e, 0x90, 0x7f, + 0x58, 0x70, 0x2f, 0xb3, 0x6c, 0x05, 0xe8, 0x0f, 0x0f, 0x71, 0x7f, 0x65, + 0x59, 0xe2, 0x10, 0x6c, 0xb1, 0x83, 0x06, 0x98, 0x17, 0x24, 0xc6, 0xf4, + 0xd3, 0x37, 0x08, 0xb8, 0x06, 0x78, 0x95, 0x0f, 0x13, 0x7f, 0x1e, 0x06, + 0x88, 0x11, 0x0f, 0x94, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x00, 0x08, 0x09, + 0x09, 0x0c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x08, 0x0b, 0x09, 0x30, + 0x07, 0x07, 0x24, 0xbe, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x61, 0xdd, 0x30, + 0xc8, 0x00, 0x30, 0xab, 0x30, 0xeb, 0x30, 0xd1, 0x30, 0xc1, 0x2a, 0x30, + 0xa7, 0x06, 0x28, 0x1d, 0x53, 0x2e, 0x2b, 0x62, 0x2e, 0xb1, 0x61, 0xa3, + 0x2b, 0x2f, 0x70, 0x2e, 0xb1, 0x74, 0x00, 0x68, 0x05, 0x6e, 0xa9, 0x5f, + 0xff, 0x6b, 0x42, 0x2f, 0x25, 0x5b, 0xaf, 0x73, 0x2d, 0x31, 0x43, 0xa0, + 0x87, 0x3b, 0xc7, 0xc5, 0x05, 0x3d, 0xaf, 0xb0, 0x71, 0x6e, 0x00, 0x76, + 0x2f, 0xb9, 0x72, 0x05, 0xac, 0x33, 0x56, 0x50, 0x2c, 0xa7, 0x65, 0xa1, + 0x7f, 0x7a, 0x05, 0xc1, 0x7d, 0x00, 0x11, 0xff, 0x63, 0x80, 0x05, 0xe0, + 0x7f, 0x80, 0x55, 0x14, 0x5c, 0xf4, 0x5d, 0x21, 0x10, 0x96, 0x71, 0x5c, + 0x06, 0x58, 0x1b, 0x74, 0xce, 0x74, 0xb9, 0x03, 0x0c, 0xd3, 0xf0, 0xd2, + 0x44, 0xc5, 0x06, 0x5b, 0x99, 0x53, 0x7f, 0x6a, 0x6b, 0xe2, 0x85, 0x06, + 0x73, 0xff, 0xe1, 0x06, 0x01, 0xff, 0x1f, 0x47, 0xfd, 0x3a, 0x0b, 0x04, + 0x30, 0x04, 0x40, 0x28, 0x21, 0x30, 0x28, 0x05, 0x05, 0xd8, 0x1f, 0xc0, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x0d, 0x02, 0x04, 0x0d, + 0x0f, 0x00, 0x09, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x09, 0x09, 0x00, 0x09, + 0x09, 0x95, 0x23, 0xa6, 0x0f, 0x00, 0x00, 0x41, 0x0b, 0x28, 0x17, 0xc9, + 0x30, 0xe9, 0x30, 0xb7, 0x06, 0x48, 0x13, 0xb7, 0x56, 0x97, 0x6f, 0x26, + 0xff, 0x37, 0x07, 0x63, 0x05, 0xe8, 0x11, 0x00, 0x50, 0x7f, 0x05, 0xff, + 0x37, 0xec, 0x00, 0x10, 0x7f, 0x05, 0xb5, 0x95, 0x07, 0xb1, 0x7f, 0x71, + 0x2a, 0x21, 0x06, 0x11, 0xff, 0xe2, 0x6c, 0x02, 0xb7, 0x5f, 0xc9, 0x62, + 0xaf, 0x65, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0xec, 0xd3, 0xe4, 0xb4, + 0x7c, 0xb7, 0x70, 0x6b, 0xc1, 0x06, 0x6f, 0xae, 0x00, 0x03, 0x7f, 0xeb, + 0x06, 0x63, 0xff, 0xe1, 0x06, 0x61, 0xff, 0x58, 0x17, 0x1c, 0x3b, 0x04, + 0x4f, 0x05, 0xe8, 0x0f, 0x08, 0x74, 0xff, 0x10, 0x0d, 0xf0, 0x7f, 0x0a, + 0x0a, 0x0a, 0x0b, 0x0d, 0x0a, 0x0a, 0x20, 0x05, 0x0a, 0x40, 0x06, 0x0a, + 0x01, 0xc9, 0x25, 0x77, 0x10, 0x00, 0x00, 0x0c, 0x28, 0x17, 0x05, 0xe2, + 0x30, 0xfc, 0x30, 0xb8, 0x06, 0xc8, 0x17, 0x6d, 0x2f, 0xad, 0x63, 0x72, + 0x4f, 0x21, 0x06, 0x58, 0x17, 0x6d, 0x00, 0xe9, 0x80, 0x7f, 0x06, 0x38, + 0x17, 0x78, 0x6d, 0x61, 0x01, 0x05, 0xd8, 0x11, 0x07, 0xb1, 0x7f, 0x06, + 0x91, 0xff, 0xe8, 0x6e, 0x77, 0x60, 0x6d, 0x06, 0x78, 0x13, 0x58, 0x17, + 0x54, 0xba, 0x7c, 0xb7, 0xc8, 0x1e, 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, + 0x53, 0x81, 0x05, 0xfa, 0x93, 0xd3, 0xff, 0xe2, 0xd7, 0x06, 0x43, 0xff, + 0x38, 0x17, 0x3c, 0x28, 0x1b, 0x40, 0x06, 0xa8, 0x17, 0x0e, 0xb3, 0x7f, + 0x10, 0x06, 0xf0, 0xff, 0x02, 0x0b, 0x0b, 0x0c, 0x0e, 0x0b, 0x0b, 0x20, + 0x05, 0x0b, 0x80, 0x40, 0x06, 0x0b, 0xa7, 0x26, 0x40, 0x0d, 0x00, 0x00, + 0x01, 0x0d, 0x61, 0xb7, 0x30, 0xe5, 0x30, 0xec, 0x28, 0x17, 0x15, 0xa8, + 0x30, 0xf3, 0x06, 0x48, 0x19, 0x53, 0x2f, 0xa3, 0x6c, 0x2f, 0xa5, 0x6f, + 0x73, 0x06, 0x2e, 0xab, 0x90, 0x7f, 0xe9, 0x40, 0x7f, 0x05, 0xf8, 0x13, + 0x50, 0xff, 0x3f, 0xa7, 0xd8, 0x71, 0x01, 0x06, 0x15, 0x99, 0x53, 0x06, + 0xc1, 0x7d, 0x07, 0x11, 0xff, 0x7f, 0x89, 0xcc, 0x04, 0x91, 0x7f, 0x89, + 0x9a, 0x4e, 0x06, 0x78, 0x1b, 0x90, 0xc2, 0x06, 0x08, 0xb8, 0xc0, 0xc9, + 0xd4, 0x06, 0x68, 0x15, 0x93, 0x7f, 0x7a, 0xb0, 0x2f, 0xab, 0xeb, 0x06, + 0xe3, 0x7f, 0x06, 0x33, 0xff, 0x21, 0x04, 0x38, 0x04, 0x5c, 0x3b, 0x28, + 0x0d, 0x37, 0x06, 0x68, 0x17, 0x07, 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, + 0x0c, 0x0c, 0x00, 0x0f, 0x0f, 0x0f, 0x0e, 0x0c, 0x0c, 0x0d, 0x0e, 0x11, + 0x10, 0x0c, 0x0c, 0x20, 0x01, 0xbf, 0x23, 0x85, 0x28, 0x17, 0x41, 0x0e, + 0x28, 0x17, 0xd5, 0x30, 0xa3, 0x30, 0xa7, 0x28, 0x15, 0x45, 0xc6, 0x20, + 0x07, 0xaf, 0x30, 0xb7, 0x20, 0x01, 0xe5, 0x05, 0xa8, 0x21, 0x41, 0x5a, + 0x2d, 0xac, 0x69, 0x00, 0x19, 0x01, 0x74, 0x2f, 0xb7, 0x45, 0x6b, 0x2f, + 0xb5, 0x7a, 0x00, 0x79, 0x28, 0x23, 0x6b, 0x05, 0x8f, 0xb9, 0x54, 0x53, + 0x2f, 0x27, 0x69, 0x2f, 0xa9, 0x74, 0x2f, 0xb1, 0x2d, 0x00, 0x55, 0x43, + 0x2f, 0xb5, 0x6f, 0x2f, 0x35, 0x78, 0x05, 0x8f, 0xb9, 0x48, 0x2f, 0xab, + 0x88, 0x39, 0x19, 0x69, 0x00, 0x67, 0x40, 0xff, 0x65, 0x00, 0x75, 0xea, + 0x25, 0xa3, 0x05, 0xb9, 0x97, 0x3f, 0xa7, 0x74, 0x2f, 0xad, 0x63, 0x40, + 0xfb, 0x63, 0xd8, 0x05, 0xe9, 0x1d, 0x90, 0x7f, 0x20, 0x41, 0x7d, 0x05, + 0xd0, 0xfd, 0x00, 0x00, 0x23, 0x04, 0x57, 0x41, 0x53, 0x57, 0x5b, 0x06, + 0x78, 0x15, 0x00, 0x00, 0x00, 0xdc, 0xc2, 0x44, 0xbe, 0xe5, 0xc5, 0xa0, + 0xd1, 0x00, 0x6c, 0xd0, 0xdc, 0xc2, 0xa4, 0xc2, 0xa4, 0xd0, 0x6a, 0xd0, + 0x05, 0xe8, 0x21, 0x93, 0x7f, 0x79, 0x21, 0x81, 0x4b, 0x63, 0x81, 0x7c, + 0x51, 0x01, 0x0d, 0x71, 0xff, 0x21, 0x27, 0xff, 0x35, 0x04, 0x3d, 0x27, + 0xfd, 0x5e, 0x3e, 0x28, 0x17, 0x48, 0x28, 0x25, 0x05, 0xd8, 0x1f, 0x06, + 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x0d, 0x00, 0x0e, 0x0e, 0x03, 0x0e, + 0x0d, 0x0d, 0x0d, 0x0f, 0x20, 0x0d, 0x0f, 0x30, 0x06, 0x0d, 0x2c, 0x24, + 0xaa, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x61, 0xf4, 0x30, 0xa1, 0x30, 0x00, + 0xeb, 0x30, 0xdf, 0x30, 0xa2, 0x30, 0xfb, 0x30, 0x05, 0xde, 0x30, 0xb9, + 0x30, 0xfc, 0x20, 0x0d, 0xa3, 0x05, 0xa8, 0x17, 0x45, 0x57, 0x2e, 0xa7, + 0x72, 0x00, 0x6d, 0x4e, 0xaf, 0x6e, 0x27, 0x99, 0x54, 0x4d, 0x2e, 0xb7, + 0x73, 0x27, 0x1b, 0x72, 0x60, 0x11, 0x20, 0x00, 0x55, 0x56, 0x47, 0xa9, + 0x76, 0x28, 0x37, 0x64, 0x4f, 0x55, 0x68, 0x2f, 0xe1, 0x76, 0x70, 0x04, + 0x20, 0x7f, 0x38, 0x17, 0x30, 0x7d, 0x7a, 0x60, 0x7d, 0x05, 0x58, 0x97, + 0x45, 0xab, 0x40, 0xfd, 0x6c, 0x47, 0x9d, 0x64, 0xc0, 0xff, 0x65, 0x28, + 0xad, 0x05, 0x1f, 0xc2, 0x7b, 0x56, 0xa1, 0x7f, 0xf1, 0x7d, 0x05, 0x3f, + 0xbe, 0xb0, 0x7f, 0x20, 0x46, 0x9b, 0x05, 0xd0, 0x83, 0x00, 0xe6, 0x74, + 0x14, 0x5c, 0x73, 0x7c, 0x9a, 0x4e, 0x02, 0x6c, 0x9a, 0x56, 0x79, 0x14, + 0x5c, 0x06, 0x18, 0x1f, 0x14, 0x00, 0xbc, 0x74, 0xb9, 0xf8, 0xbb, 0x44, + 0xc5, 0x20, 0x00, 0x00, 0xc8, 0xb9, 0x18, 0xc2, 0xac, 0xb9, 0x44, 0xea, + 0x05, 0xe8, 0x17, 0x00, 0x32, 0x7f, 0x73, 0x01, 0xeb, 0x05, 0x42, 0x7f, + 0xe1, 0x00, 0x02, 0x7f, 0xfa, 0x80, 0x05, 0xa2, 0x7f, 0x12, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x3c, 0xa2, 0x28, 0x0f, 0x3d, 0x68, 0x11, 0x2d, 0x00, + 0x1c, 0x20, 0x13, 0x37, 0x3c, 0x04, 0x43, 0x20, 0x17, 0x05, 0x18, 0x23, + 0x07, 0x94, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x0e, 0x0f, 0x00, 0x10, 0x01, + 0x10, 0x10, 0x0e, 0x0e, 0x01, 0x10, 0x00, 0x01, 0x0f, 0x0e, 0x0e, 0x0e, + 0x0e, 0x3d, 0x26, 0x51, 0x91, 0x28, 0x17, 0x10, 0x28, 0x17, 0xa3, 0x30, + 0xa7, 0x28, 0x19, 0x11, 0xb3, 0x30, 0xdd, 0x28, 0x1f, 0xb9, 0x30, 0xab, + 0x05, 0xa8, 0x13, 0xaa, 0x3f, 0xff, 0x47, 0x4f, 0x23, 0x61, 0x4f, 0xaf, + 0x72, 0x2e, 0x33, 0x50, 0xfd, 0x2f, 0xaf, 0x77, 0x25, 0x05, 0x70, 0x7f, + 0x57, 0x93, 0x38, 0x17, 0x50, 0x7d, 0x6f, 0x2f, 0xbb, 0x63, 0x6e, 0x05, + 0x6f, 0x37, 0x30, 0xff, 0x6f, 0x00, 0xdf, 0x28, 0xe9, 0x30, 0xf7, 0xef, + 0x05, 0x58, 0x0b, 0x00, 0x70, 0xff, 0x71, 0x7d, 0x6f, 0x2f, 0xc1, 0x05, + 0x78, 0x17, 0x71, 0x7f, 0x06, 0x30, 0x7b, 0x81, 0x3f, 0xff, 0x27, 0x59, + 0xe2, 0x6c, 0x70, 0x51, 0x06, 0x18, 0x0f, 0x80, 0x8f, 0xff, 0xb3, 0xf4, + 0xd3, 0x80, 0xb7, 0xdc, 0xb4, 0xde, 0x06, 0x70, 0x7f, 0x52, 0x7f, 0x6f, + 0x2f, 0xb1, 0x72, 0xfd, 0x05, 0xd2, 0x83, 0x00, 0x32, 0x7f, 0xf3, 0xad, + 0x05, 0xa2, 0x7f, 0x12, 0x27, 0xf5, 0x3b, 0x28, 0x15, 0x38, 0x11, 0x3f, + 0x28, 0x15, 0x1c, 0x3b, 0x04, 0x4c, 0x05, 0x28, 0x0d, 0x07, 0xd4, 0xff, + 0x10, 0x0e, 0xb0, 0x7f, 0x0f, 0x01, 0x00, 0x04, 0x02, 0x03, 0x03, 0x0f, + 0x0f, 0x02, 0x03, 0x00, 0x02, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x41, 0x25, + 0x00, 0x01, 0x0c, 0x00, 0x00, 0x11, 0x61, 0x7f, 0x89, 0x01, 0xdd, 0x30, + 0xe2, 0x30, 0xfc, 0x30, 0xb8, 0x28, 0x1d, 0xbb, 0x06, 0x35, 0x1b, 0x57, + 0x4b, 0x03, 0x58, 0x15, 0x76, 0x1d, 0x6d, 0x48, 0x23, 0x3f, 0x41, 0xd8, + 0x05, 0x1e, 0xb5, 0x50, 0x6f, 0xe9, 0x80, 0x6f, 0x37, 0x1d, 0x6f, 0x00, + 0x63, 0xab, 0x20, 0x01, 0x69, 0x4b, 0x9f, 0x6e, 0x28, 0xb1, 0x61, 0x47, + 0xb1, 0x04, 0xd0, 0xff, 0xb8, 0x38, 0x17, 0x6d, 0x60, 0xf9, 0x05, 0xb8, + 0x1b, 0x00, 0x11, 0x6f, 0x20, 0x00, 0x4f, 0xe0, 0x05, 0xa0, 0xff, 0x01, + 0x70, 0x7f, 0x04, 0x7f, 0xc7, 0x7f, 0x89, 0xe8, 0x6e, 0x77, 0x40, 0x6d, + 0x06, 0x98, 0x17, 0x1c, 0xc1, 0xec, 0xd3, 0x54, 0xba, 0x03, 0x7c, 0xb7, + 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x5b, 0x13, 0xec, 0x72, 0x81, + 0x05, 0x9a, 0x9f, 0x93, 0xef, 0xe2, 0xc2, 0x7f, 0x05, 0x51, 0xfd, 0x00, + 0x00, 0x15, 0x17, 0x04, 0x30, 0x28, 0x0f, 0x30, 0x27, 0xf7, 0x3d, 0x28, + 0x19, 0x15, 0x2d, 0x00, 0x1f, 0x28, 0x1f, 0x3c, 0x28, 0x23, 0x40, 0x05, + 0x68, 0x1d, 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x10, 0x10, + 0x0d, 0x10, 0x0c, 0x0c, 0x04, 0x10, 0x10, 0x10, 0x0c, 0x03, 0x20, 0x04, + 0x10, 0x10, 0x08, 0xfe, 0x25, 0x59, 0x0a, 0x00, 0x3f, 0xff, 0x01, 0x08, + 0x08, 0x00, 0x0a, 0x07, 0x07, 0x01, 0x01, 0x08, 0x07, 0x08, 0x00, 0x08, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x05, 0x01, 0x40, 0x0b, 0x20, 0x05, 0x02, + 0x09, 0x01, 0x0a, 0x05, 0x02, 0x24, 0x02, 0x02, 0x28, 0x56, 0x03, 0x06, + 0x20, 0x05, 0x03, 0x04, 0x60, 0x02, 0x38, 0x67, 0x20, 0x07, 0x04, 0x05, + 0x08, 0x05, 0x04, 0xe0, 0x20, 0x05, 0x20, 0x01, 0x20, 0x06, 0x04, 0x05, + 0x06, 0x06, 0x09, 0x06, 0x06, 0x05, 0x05, 0x05, 0x06, 0x20, 0x08, 0x20, + 0x06, 0x05, 0x00, 0x06, 0x07, 0x07, 0x07, 0x04, 0x06, 0x06, 0x06, 0x60, + 0x07, 0x20, 0x08, 0x20, 0x06, 0x06, 0x07, 0x03, 0x0a, 0x05, 0x00, 0x09, + 0x09, 0x07, 0x07, 0x03, 0x09, 0x09, 0x03, 0x80, 0x20, 0x1a, 0x07, 0x08, + 0x09, 0x09, 0x0c, 0x08, 0x08, 0x88, 0x20, 0x74, 0x08, 0x0b, 0x09, 0x30, + 0x07, 0x09, 0x0d, 0x02, 0x00, 0x04, 0x0d, 0x0f, 0x09, 0x09, 0x0e, 0x0f, + 0x0c, 0x00, 0x0d, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x14, 0x0d, + 0x0a, 0x0a, 0x20, 0x05, 0x0a, 0x40, 0x06, 0x0a, 0x0b, 0x05, 0x0b, 0x0c, + 0x0e, 0x0b, 0x0b, 0x20, 0x05, 0x0b, 0x40, 0x06, 0x10, 0x0b, 0x0c, 0x0c, + 0x28, 0xe5, 0x0e, 0x0c, 0x0c, 0x0d, 0x60, 0x0e, 0x20, 0xde, 0x20, 0x01, + 0x0d, 0x0e, 0x0e, 0x03, 0x0e, 0x02, 0x0d, 0x0d, 0x0d, 0x0f, 0x0d, 0x0f, + 0x30, 0x06, 0x0d, 0x00, 0x0e, 0x0f, 0x10, 0x01, 0x10, 0x10, 0x0e, 0x0e, + 0x00, 0x01, 0x10, 0x01, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0xe0, 0xf9, 0x1f, + 0xf1, 0x17, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x54, 0xab, 0x00, + 0x11, 0x14, 0x00, 0x00, 0x30, 0x01, 0x62, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x89, 0x1b, 0x80, + 0xf9, 0x00, 0x00, 0x00, 0x02, 0x62, 0xea, 0x30, 0xb9, 0x30, 0xdc, 0x04, + 0x30, 0xf3, 0x30, 0x0c, 0x77, 0x06, 0x58, 0x1f, 0x4c, 0x00, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x44, 0x6e, 0x07, 0x00, 0x7f, + 0x6e, 0x00, 0x65, 0x06, 0x60, 0xff, 0x73, 0x00, 0x6a, 0x61, 0x06, 0x61, + 0x03, 0xb1, 0x7f, 0x61, 0x06, 0x2a, 0x22, 0x44, 0x41, 0xff, 0x74, 0x28, + 0x00, 0x72, 0x22, 0x07, 0x74, 0x22, 0x05, 0x20, 0x00, 0x64, 0xb0, 0x21, + 0x85, 0x20, 0xa2, 0x17, 0x04, 0xd0, 0x95, 0xcc, 0x91, 0xaf, 0x65, 0x08, + 0x2c, 0x67, 0x3a, 0x53, 0x06, 0x7b, 0x1d, 0xac, 0xb9, 0xa4, 0x00, 0xc2, + 0xf4, 0xbc, 0x44, 0xc5, 0x20, 0x00, 0xfc, 0x70, 0xc8, 0x06, 0x93, 0x7f, + 0x07, 0x32, 0x7f, 0x06, 0x32, 0x7d, 0x00, 0x00, 0x1b, 0x04, 0x10, 0x38, + 0x04, 0x41, 0x20, 0x01, 0x30, 0x04, 0x31, 0x04, 0x0c, 0x3e, 0x04, 0x3d, + 0x04, 0x0e, 0xb4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x0c, 0x54, 0x0c, + 0x20, 0x01, 0x01, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, + 0x17, 0x07, 0x62, 0xde, 0x30, 0xc7, 0x30, 0xa3, 0x00, 0x30, 0xe9, 0x30, + 0xea, 0x81, 0xbb, 0x6c, 0xde, 0x5b, 0x5d, 0x06, 0x1f, 0xbb, 0x4d, 0x27, + 0x11, 0x36, 0x09, 0x69, 0x26, 0x19, 0x06, 0x36, 0x97, 0xbb, 0x50, 0x7f, + 0xe8, 0x26, 0x97, 0x06, 0x18, 0x13, 0x07, 0x90, 0xff, 0x65, 0x06, 0x61, + 0x7d, 0x07, 0x11, 0xff, 0x03, 0x6c, 0x9a, 0xb7, 0x5f, 0xc9, 0x62, 0x32, + 0xfd, 0x06, 0x58, 0x1b, 0x00, 0xc8, 0xb9, 0x70, 0xb3, 0x74, 0xc7, 0x7c, + 0xb7, 0xe8, 0x06, 0x78, 0x17, 0x07, 0x72, 0x7f, 0x06, 0x73, 0xff, 0x1c, + 0x28, 0x11, 0x34, 0x04, 0x35, 0x0e, 0x04, 0x39, 0x04, 0x40, 0x28, 0x1b, + 0x10, 0x06, 0x11, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x02, 0x0d, 0x0d, + 0x0d, 0x0d, 0x14, 0x02, 0x20, 0x06, 0x0e, 0x00, 0x0d, 0x02, 0x02, 0x02, + 0x02, 0x36, 0x17, 0xfa, 0x00, 0xf3, 0x00, 0x00, 0x08, 0x62, 0xa2, 0x30, + 0xbd, 0x08, 0x30, 0xec, 0x30, 0xb9, 0x06, 0x88, 0x17, 0x41, 0x00, 0x7a, + 0xd1, 0x2f, 0xab, 0x37, 0x95, 0x73, 0x06, 0x4d, 0xb2, 0x41, 0x00, 0xe7, + 0x06, 0xe0, 0x7f, 0xfc, 0x70, 0xff, 0x06, 0x5c, 0x2f, 0x31, 0x7f, 0x51, + 0x81, 0x06, 0x59, 0x19, 0x06, 0xf1, 0xff, 0x9a, 0x4e, 0x08, 0x1f, 0x90, + 0x14, 0x5c, 0x06, 0x98, 0x17, 0x44, 0xc5, 0x8c, 0x07, 0xc1, 0x74, 0xb9, + 0xa4, 0xc2, 0x06, 0x78, 0x17, 0x07, 0x12, 0x7f, 0x06, 0xd3, 0x7f, 0x04, + 0x10, 0x04, 0x37, 0x04, 0x3e, 0x28, 0x13, 0x41, 0x04, 0x11, 0x3a, 0x04, + 0x38, 0x28, 0x1f, 0x20, 0x00, 0x3e, 0x20, 0x0b, 0x47, 0x42, 0x28, 0x25, + 0x3e, 0x04, 0x32, 0x05, 0x28, 0x29, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, + 0x7f, 0x01, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x03, 0x40, 0x06, 0x00, + 0x03, 0x03, 0x03, 0x03, 0xd6, 0x1a, 0xc0, 0xed, 0x10, 0x00, 0x00, 0x09, + 0x28, 0x17, 0xf4, 0x30, 0xa7, 0x30, 0x02, 0xa4, 0x30, 0xed, 0x30, 0x0c, + 0x77, 0x06, 0x57, 0x97, 0x76, 0xb4, 0x6f, 0x2d, 0x6f, 0x06, 0x68, 0x17, + 0x10, 0x06, 0xd0, 0x7f, 0x44, 0x2e, 0xa9, 0x73, 0x00, 0x51, 0x74, 0x2e, + 0xad, 0x69, 0x20, 0x05, 0x6f, 0x00, 0x20, 0x4e, 0xbd, 0x40, 0x20, 0x05, + 0x82, 0x17, 0x3f, 0x96, 0x01, 0x5a, 0x57, 0x7f, 0xc0, 0x06, 0x58, 0x13, + 0x58, 0x17, 0xa0, 0xbc, 0x74, 0xc7, 0xe8, 0xb8, 0xd1, 0x06, 0x98, 0x17, + 0x0e, 0xd3, 0x7f, 0x10, 0x27, 0xfd, 0x35, 0x04, 0x39, 0x28, 0x19, 0x70, + 0x43, 0x05, 0x08, 0x03, 0x10, 0x10, 0x34, 0xff, 0x06, 0xf6, 0xff, 0x04, + 0x01, 0x02, 0x01, 0x10, 0x01, 0x02, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, + 0x04, 0x00, 0xe6, 0x1c, 0xd9, 0xf9, 0x00, 0x00, 0x0a, 0x62, 0x01, 0xd9, + 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xe3, 0x06, 0x68, 0x15, 0x11, 0x00, 0x00, + 0x42, 0x2f, 0xa9, 0x6a, 0x00, 0x61, 0x06, 0x75, 0x96, 0xe1, 0x10, 0x07, + 0x00, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0x1d, 0x8d, 0xc5, 0x96, + 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0xa0, 0xbc, 0x90, 0xc7, 0x06, 0x78, + 0x13, 0x0f, 0x33, 0x7f, 0x47, 0x11, 0x28, 0x15, 0x36, 0x04, 0x30, 0x06, + 0x48, 0x13, 0x10, 0x0f, 0x34, 0xff, 0x06, 0xf6, 0xff, 0x14, 0x05, 0x03, + 0x03, 0x20, 0x01, 0x05, 0x40, 0x06, 0x05, 0x05, 0x00, 0x05, 0x05, 0x08, + 0x1b, 0x69, 0xfa, 0x00, 0x00, 0x01, 0x0b, 0x62, 0xd6, 0x30, 0xe9, 0x30, + 0xac, 0x06, 0x88, 0x15, 0xaf, 0x38, 0x17, 0x72, 0x28, 0x15, 0x67, 0x06, + 0x88, 0x19, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0x98, 0x17, 0x05, 0x52, 0x17, + 0x02, 0x03, 0x5e, 0xc9, 0x62, 0xa0, 0x52, 0x06, 0x98, 0x19, 0x0c, 0x06, + 0xbe, 0x7c, 0xb7, 0x00, 0xac, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x11, + 0x2e, 0x04, 0x40, 0x28, 0x15, 0x33, 0x06, 0x88, 0x19, 0x10, 0x0e, 0xf4, + 0xff, 0x06, 0xf6, 0xff, 0x06, 0x28, 0x04, 0x04, 0x20, 0x01, 0x06, 0x40, + 0x06, 0x06, 0x06, 0x06, 0x0a, 0x06, 0x8c, 0x1d, 0x03, 0x28, 0x17, 0x0c, + 0x68, 0x17, 0xf3, 0x31, 0x30, 0xb5, 0x06, 0x68, 0x1b, 0x98, 0x17, 0x6e, + 0x00, 0xe7, 0x06, 0x2f, 0xb7, 0xc6, 0x10, 0x06, 0xf0, 0x7f, 0x01, 0x18, + 0x17, 0x6e, 0x00, 0x7a, 0x04, 0xae, 0xcf, 0x38, 0x17, 0x18, 0x18, 0x75, + 0x28, 0x84, 0x06, 0x78, 0x19, 0x38, 0x17, 0x04, 0xac, 0xac, 0x71, 0xc0, + 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x98, 0x17, 0x3d, 0x04, 0x41, 0x06, + 0x28, 0x1d, 0xc5, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x07, 0x05, + 0x05, 0x20, 0x01, 0x07, 0x40, 0x06, 0x00, 0x07, 0x07, 0x07, 0x07, 0xba, + 0x1d, 0x32, 0xfb, 0x00, 0x00, 0x00, 0x0d, 0x62, 0xab, 0x30, 0xb9, 0x30, + 0x02, 0xc6, 0x30, 0xed, 0x30, 0xfb, 0x30, 0x38, 0x21, 0xf3, 0x2c, 0x30, + 0xb3, 0x05, 0xe8, 0x1f, 0x43, 0x2f, 0xad, 0x3e, 0x2f, 0x65, 0x00, 0x63, + 0x6c, 0x4e, 0x2d, 0x5f, 0xbf, 0x6e, 0x00, 0x63, 0x2e, 0x3b, 0x10, 0x0d, + 0x30, 0x7f, 0xc0, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0x03, 0x5e, 0x17, + 0x67, 0x93, 0x5e, 0x20, 0x21, 0x58, 0x06, 0x78, 0x17, 0x74, 0xce, 0xa4, + 0xc2, 0x54, 0x00, 0xd1, 0xe8, 0xb8, 0x0c, 0xbe, 0x91, 0xb7, 0xe0, 0x68, + 0xcf, 0x06, 0x18, 0x1d, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x15, 0x48, 0x04, + 0x42, 0x00, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x43, 0x04, 0x2d, 0x8e, 0x68, + 0x27, 0x3d, 0x04, 0x3a, 0x20, 0x0d, 0x10, 0x15, 0x34, 0xff, 0x06, 0xf6, + 0xff, 0x08, 0x2a, 0x06, 0x06, 0x20, 0x01, 0x08, 0x20, 0x06, 0x0a, 0x20, + 0x05, 0x08, 0x00, 0x08, 0x51, 0x1c, 0xad, 0xfa, 0x00, 0x00, 0x0e, 0x0f, + 0x62, 0xb3, 0x30, 0xa4, 0x28, 0x0d, 0x38, 0x13, 0x05, 0xd8, 0x0f, 0x98, + 0x17, 0x47, 0x6f, 0x2e, 0x31, 0x6d, 0x00, 0x62, 0x4f, 0xb7, 0x10, 0x0e, + 0x10, 0x7f, 0x00, 0x98, 0x17, 0x10, 0x6f, 0x00, 0xed, 0x05, 0x22, 0x17, + 0xd1, 0x79, 0xf1, 0x82, 0x08, 0x03, 0x5e, 0xc9, 0x62, 0x06, 0x78, 0x17, + 0x54, 0xcf, 0x84, 0x06, 0xc7, 0x0c, 0xbe, 0x7c, 0xb7, 0x06, 0x18, 0x11, + 0x0f, 0x53, 0x7f, 0x1a, 0x00, 0x04, 0x3e, 0x04, 0x38, 0x04, 0x3c, 0x04, + 0x31, 0xe2, 0x48, 0x0f, 0x10, 0x16, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x09, + 0x07, 0x07, 0x20, 0x01, 0x09, 0xa0, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, + 0x09, 0x98, 0x1c, 0x02, 0x80, 0x28, 0x17, 0x0f, 0x62, 0xa8, 0x30, 0xf4, + 0x30, 0xa9, 0x83, 0x06, 0x88, 0x15, 0x00, 0x00, 0xc9, 0x00, 0x76, 0x2f, + 0xa7, 0x06, 0x58, 0x13, 0xe1, 0x10, 0x07, 0x30, 0x7f, 0x00, 0x78, 0x17, + 0x05, 0x72, 0x17, 0xc3, 0x57, 0x66, 0x6b, 0x06, 0x98, 0x15, 0x03, 0x00, + 0x00, 0xd0, 0xc5, 0xf4, 0xbc, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1e, + 0x2d, 0x04, 0x32, 0x28, 0x19, 0x06, 0x58, 0x13, 0x10, 0x0f, 0x34, 0xff, + 0x06, 0xf6, 0xff, 0x0a, 0x2a, 0x08, 0x08, 0x20, 0x01, 0x0a, 0x20, 0x06, + 0x14, 0x20, 0x05, 0x0a, 0x08, 0x0a, 0x6d, 0x1b, 0x61, 0x28, 0x17, 0x10, + 0x62, 0xd5, 0x02, 0x30, 0xa1, 0x30, 0xfc, 0x30, 0xed, 0x06, 0x88, 0x17, + 0x46, 0xbe, 0x2f, 0xa5, 0x72, 0x2f, 0xb3, 0x06, 0x75, 0x97, 0x10, 0x06, + 0xf0, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0xd5, 0x10, 0x6c, 0x81, + 0x9c, 0x06, 0x98, 0x15, 0x00, 0x00, 0x0c, 0xd3, 0x34, 0x5c, 0xb8, 0x06, + 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x24, 0x28, 0x11, 0x40, 0x04, 0x71, 0x43, + 0x06, 0x68, 0x15, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x0b, 0x09, + 0x09, 0x20, 0x01, 0x50, 0x0b, 0x20, 0x06, 0x13, 0x20, 0x05, 0x0b, 0x0b, + 0x52, 0x1a, 0x40, 0x5c, 0x28, 0x17, 0x11, 0x62, 0xb0, 0x30, 0xa2, 0x30, + 0x11, 0xeb, 0x30, 0xc0, 0x06, 0x88, 0x17, 0x47, 0x00, 0x75, 0x48, 0x19, + 0x78, 0x64, 0x06, 0x6f, 0xb1, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0x78, 0x17, + 0x05, 0x72, 0x17, 0xdc, 0x74, 0xbe, 0x40, 0x8f, 0x06, 0xb8, 0x17, 0x6c, + 0xad, 0x44, 0xc5, 0x74, 0xb9, 0x36, 0xe4, 0xb2, 0x06, 0x78, 0x1b, 0x0e, + 0xf3, 0x7f, 0x13, 0x28, 0x13, 0x38, 0x19, 0x34, 0xe2, 0x28, 0x1f, 0x10, + 0x16, 0x34, 0xff, 0x06, 0xf6, 0xff, 0x0c, 0x0a, 0x0a, 0x20, 0x01, 0x0c, + 0xa0, 0x20, 0x06, 0x09, 0x20, 0x05, 0x0c, 0x0c, 0xd3, 0x1c, 0xd5, 0x80, + 0x28, 0x17, 0x12, 0x62, 0xec, 0x30, 0xa4, 0x30, 0xea, 0xd7, 0x28, 0x1b, + 0x06, 0x78, 0x17, 0x4c, 0x2e, 0x1d, 0x69, 0x4e, 0x2d, 0x06, 0x58, 0x17, + 0x10, 0x06, 0xf0, 0x7f, 0xc0, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0xb1, + 0x83, 0xcc, 0x91, 0x9a, 0x4e, 0x80, 0x06, 0x98, 0x19, 0x08, 0xb8, 0x74, + 0xc7, 0xac, 0xb9, 0x44, 0x60, 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, + 0x1b, 0x04, 0x35, 0x04, 0x39, 0x8e, 0x28, 0x17, 0x38, 0x04, 0x4f, 0x06, + 0x48, 0x17, 0x10, 0x0e, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x0d, 0x2a, 0x0b, + 0x0b, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x0d, 0x04, 0x0d, + 0x43, 0x1c, 0xbd, 0xf9, 0x2b, 0x2d, 0x62, 0xdd, 0x00, 0x30, 0xeb, 0x30, + 0xbf, 0x30, 0xec, 0x30, 0xb0, 0xd4, 0x20, 0x03, 0x06, 0x38, 0x1b, 0x50, + 0x2e, 0x23, 0x72, 0x2e, 0x2f, 0x61, 0x00, 0x57, 0x6c, 0x2e, 0x27, 0x67, + 0x2f, 0xb9, 0x65, 0x10, 0x0d, 0xc0, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, + 0x17, 0x00, 0xe2, 0x6c, 0x54, 0x58, 0xb1, 0x83, 0x3c, 0x68, 0x20, 0xcc, + 0x91, 0x06, 0x58, 0x1b, 0xec, 0xd3, 0x74, 0xb9, 0xc8, 0x01, 0xd0, 0x08, + 0xb8, 0xf8, 0xad, 0x74, 0xb9, 0x06, 0x38, 0x1b, 0x88, 0x0e, 0xf3, 0x7f, + 0x1f, 0x04, 0x3e, 0x28, 0x15, 0x42, 0x04, 0x30, 0x2b, 0x04, 0x3b, 0x28, + 0x21, 0x33, 0x28, 0x21, 0x35, 0x05, 0xc8, 0x1f, 0x10, 0x0e, 0xf4, 0xff, + 0x94, 0x06, 0xf6, 0xff, 0x0e, 0x0e, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0xf0, + 0x1b, 0x05, 0xb7, 0xfa, 0x00, 0x00, 0x14, 0x48, 0x17, 0xc8, 0x06, 0x48, + 0x11, 0xb1, 0xd8, 0x17, 0x6f, 0x10, 0x0e, 0x60, 0x7f, 0x00, 0x78, 0x17, + 0x4f, 0x00, 0x70, 0x05, 0x42, 0x19, 0x03, 0xe2, 0x6c, 0x14, 0x5c, 0xfe, + 0x56, 0x06, 0x58, 0x13, 0x78, 0x17, 0x3b, 0x2c, 0xd2, 0x06, 0x38, 0x11, + 0x0f, 0x53, 0x7f, 0x78, 0x17, 0x43, 0x05, 0xc8, 0x0d, 0x10, 0x0f, 0x94, + 0xff, 0x95, 0x06, 0xf6, 0xff, 0x0f, 0x0f, 0x20, 0x01, 0x0d, 0x30, 0x05, + 0x10, 0x40, 0x0a, 0x00, 0x43, 0x1d, 0xe1, 0xf9, 0x00, 0x00, 0x15, 0x62, + 0x01, 0xb5, 0x30, 0xf3, 0x30, 0xbf, 0x30, 0xec, 0x20, 0x05, 0xa8, 0x06, + 0x58, 0x1b, 0x53, 0x2f, 0xa9, 0x6e, 0x4f, 0xaf, 0x72, 0x00, 0xe9, 0x38, + 0x00, 0x6d, 0x10, 0x0e, 0x00, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, + 0x23, 0x57, 0x54, 0x10, 0x58, 0x26, 0x4f, 0x06, 0x98, 0x17, 0xb0, 0xc0, + 0xc0, 0xd0, 0x30, 0x1d, 0xb8, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x21, + 0x04, 0x30, 0x04, 0x57, 0x3d, 0x28, 0x17, 0x30, 0x28, 0x1d, 0x35, 0x20, + 0x09, 0x10, 0x15, 0xf4, 0xff, 0x06, 0xf6, 0xff, 0x2a, 0x10, 0x10, 0x20, + 0x01, 0x0f, 0x30, 0x05, 0x11, 0x40, 0x0a, 0xe6, 0x20, 0x1b, 0xd3, 0x28, + 0x17, 0x16, 0x62, 0xbb, 0x30, 0xc8, 0x00, 0x30, 0xa5, 0x30, 0xfc, 0x30, + 0xd0, 0x30, 0xeb, 0xa0, 0x06, 0x48, 0x19, 0x53, 0x2e, 0x1d, 0x74, 0x00, + 0xfa, 0x00, 0x62, 0xbc, 0x28, 0x1f, 0x6c, 0x06, 0x48, 0x97, 0x10, 0x06, + 0xd0, 0x7f, 0x00, 0x98, 0x17, 0x05, 0x52, 0x17, 0x5e, 0x58, 0x02, 0xfe, + 0x56, 0xf4, 0x5d, 0x14, 0x5c, 0x06, 0x78, 0x19, 0x38, 0x06, 0xc1, 0x2c, + 0xd2, 0x1c, 0xbc, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x21, 0x82, 0x28, + 0x0d, 0x42, 0x04, 0x43, 0x04, 0x31, 0x28, 0x1f, 0x3b, 0xe5, 0x06, 0x08, + 0x15, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xf6, 0xff, 0x11, 0x11, 0x20, 0x01, + 0x10, 0x30, 0x05, 0x44, 0x12, 0x40, 0x0a, 0x65, 0x1b, 0xae, 0x28, 0x17, + 0x17, 0x62, 0x00, 0xf4, 0x30, 0xa3, 0x30, 0xa2, 0x30, 0xca, 0x30, 0x10, + 0xfb, 0x30, 0xc9, 0x20, 0x03, 0xab, 0x30, 0xb9, 0x30, 0x16, 0xc6, 0x30, + 0xed, 0x05, 0xa8, 0x21, 0x56, 0x2e, 0x2f, 0x3f, 0xb1, 0x61, 0xda, 0x4e, + 0x29, 0x3e, 0x2f, 0x43, 0x2f, 0xc1, 0x3e, 0x41, 0x65, 0x28, 0x27, 0x6f, + 0xe0, 0x10, 0x0d, 0x00, 0x7f, 0x00, 0x78, 0x17, 0x05, 0x72, 0x17, 0xf4, + 0x7e, 0x9a, 0x4e, 0xb3, 0x10, 0x7e, 0x21, 0x58, 0x06, 0x78, 0x17, 0x44, + 0xbe, 0x44, 0xc5, 0x00, 0x98, 0xb0, 0x50, 0xb4, 0x74, 0xce, 0xa4, 0xc2, + 0x0c, 0x54, 0xd1, 0xe8, 0xb8, 0x05, 0xf8, 0x21, 0x0e, 0xf3, 0x7f, 0x12, + 0x04, 0x51, 0x38, 0x28, 0x11, 0x3d, 0x28, 0x15, 0x2d, 0x00, 0x34, 0x28, + 0x1f, 0x15, 0x2d, 0x00, 0x1a, 0x28, 0x21, 0x48, 0x28, 0x2b, 0x35, 0x28, + 0x27, 0x75, 0x43, 0x05, 0x08, 0x29, 0x10, 0x0e, 0xf4, 0xff, 0x07, 0x02, + 0xff, 0x12, 0x20, 0x01, 0x11, 0x30, 0x05, 0x45, 0x06, 0x40, 0x0a, 0xa6, + 0x1d, 0xb9, 0x28, 0x17, 0x18, 0x48, 0x17, 0x56, 0xe9, 0x28, 0x15, 0xec, + 0x28, 0x1d, 0xeb, 0x05, 0xa8, 0x0f, 0xb8, 0x17, 0x6c, 0xbe, 0x48, 0x15, + 0x52, 0x2f, 0xb9, 0x06, 0x1f, 0xb3, 0x10, 0x06, 0xf0, 0x7f, 0x00, 0xb8, + 0x17, 0x05, 0x32, 0x17, 0xf7, 0x01, 0x96, 0x3f, 0x96, 0x14, 0x5c, 0xce, + 0x57, 0x06, 0x78, 0x17, 0x00, 0x4c, 0xbe, 0x7c, 0xb7, 0xe4, 0xd5, 0x4c, + 0xc5, 0xea, 0x05, 0xf8, 0x0f, 0x0f, 0x73, 0x7f, 0x38, 0x17, 0x3b, 0x48, + 0x15, 0x20, 0x28, 0x09, 0x30, 0xe5, 0x28, 0x0b, 0x10, 0x15, 0xd4, 0xff, + 0x06, 0xf6, 0xff, 0x13, 0x13, 0x20, 0x01, 0x12, 0x30, 0x05, 0x40, 0x08, + 0x40, 0x0a, 0x5d, 0x1d, 0x7e, 0xfa, 0x00, 0x00, 0x46, 0x19, 0x48, 0x17, + 0xbc, 0x30, 0xa6, 0x06, 0x28, 0x11, 0x9f, 0xaf, 0x73, 0xbc, 0x2f, 0x9b, + 0x75, 0x06, 0x5d, 0xae, 0x10, 0x07, 0x00, 0x7f, 0x00, 0xb8, 0x17, 0x05, + 0x32, 0x17, 0xf4, 0x7e, 0x0c, 0x5e, 0x58, 0x4c, 0x4e, 0x06, 0x78, 0x15, + 0x29, 0x17, 0xbe, 0x1c, 0x1d, 0xc8, 0xb0, 0xc6, 0x06, 0x78, 0x15, 0x0f, + 0x13, 0x7f, 0x38, 0x17, 0x37, 0x28, 0x11, 0x72, 0x43, 0x05, 0xe8, 0x0f, + 0x10, 0x0f, 0x74, 0xff, 0x06, 0xf6, 0xff, 0x14, 0x14, 0x20, 0x01, 0x13, + 0xa3, 0x30, 0x05, 0x07, 0x40, 0x0a, 0xe9, 0x1c, 0x60, 0x28, 0x17, 0x00, + 0x1f, 0xff, 0x15, 0x01, 0x0c, 0x0c, 0x20, 0x01, 0x01, 0x20, 0x06, 0x0d, + 0x20, 0x05, 0x00, 0x01, 0x01, 0x02, 0x0d, 0x0d, 0x0d, 0x0d, 0x14, 0x40, + 0x02, 0x20, 0x06, 0x0e, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x01, 0x03, 0x02, + 0x01, 0x02, 0x02, 0x01, 0x03, 0x40, 0x06, 0x01, 0x03, 0x03, 0x03, 0x03, + 0x04, 0x01, 0x02, 0x20, 0x24, 0x41, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, + 0x04, 0x05, 0x30, 0x14, 0x20, 0x03, 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, + 0x05, 0x06, 0x90, 0x30, 0x14, 0x04, 0x06, 0x40, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x48, 0x07, 0x30, 0x14, 0x05, 0x07, 0x40, 0x06, 0x07, 0x07, 0x07, + 0x25, 0x07, 0x08, 0x30, 0x14, 0x06, 0x08, 0x20, 0x06, 0x0a, 0x20, 0x05, + 0x12, 0x08, 0x08, 0x09, 0x30, 0x14, 0x07, 0x09, 0x20, 0x06, 0x0b, 0x89, + 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x14, 0x08, 0x0a, 0x20, 0x06, 0x44, + 0x14, 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x30, 0x14, 0x09, 0x0b, 0xa2, 0x20, + 0x06, 0x13, 0x20, 0x05, 0x0b, 0x0b, 0x0c, 0x30, 0x14, 0x0a, 0x5c, 0x0c, + 0x20, 0x06, 0x09, 0x20, 0x05, 0x20, 0xb5, 0x30, 0x14, 0x0b, 0x0d, 0xb5, + 0x20, 0x06, 0x0c, 0x20, 0x05, 0x20, 0xb5, 0x0e, 0x70, 0x01, 0x0f, 0x50, + 0x05, 0x54, 0x0f, 0x20, 0x01, 0x0d, 0x30, 0x05, 0x10, 0x40, 0x0a, 0x10, + 0x10, 0xd3, 0x20, 0x01, 0x40, 0x05, 0x11, 0x40, 0x0a, 0x11, 0x11, 0x20, + 0x01, 0x40, 0x05, 0x4d, 0x12, 0x40, 0x0a, 0x12, 0x12, 0x20, 0x01, 0x40, + 0x05, 0x06, 0x40, 0x0a, 0xe0, 0xf9, 0x5f, 0xf1, 0x57, 0x3f, 0xee, 0x00, + 0x11, 0xc8, 0x5e, 0x01, 0x11, 0x2a, 0x00, 0x00, 0x30, 0x01, 0x63, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x98, 0x1f, 0x8c, 0x12, 0x00, 0x00, 0x00, 0x02, 0x63, 0xd6, 0x30, + 0xab, 0x30, 0xec, 0x01, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0xde, 0x5d, 0x06, + 0x38, 0x21, 0x00, 0x42, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x77, 0x74, 0x06, 0x40, + 0x7f, 0x06, 0x70, 0x7d, 0x50, 0xff, 0x6b, 0x06, 0xe0, 0x7f, 0x06, 0xf0, + 0xff, 0x06, 0xb1, 0x7f, 0x00, 0x03, 0x5e, 0xa0, 0x52, 0xd2, 0x52, 0xaf, + 0x65, 0x08, 0x79, 0x72, 0x02, 0x5e, 0x06, 0x3b, 0x21, 0x80, 0xbd, 0xe0, + 0x00, 0xcf, 0x08, 0xb8, 0x88, 0xc2, 0xf0, 0xd2, 0x20, 0x17, 0x00, 0xfc, + 0xc8, 0x06, 0x33, 0x7f, 0x6f, 0x23, 0x77, 0x06, 0x92, 0x81, 0xf3, 0x7f, + 0x40, 0x65, 0x05, 0xec, 0xa6, 0x11, 0x04, 0x43, 0x04, 0x45, 0x04, 0x00, + 0x30, 0x04, 0x40, 0x04, 0x35, 0x04, 0x41, 0x04, 0x31, 0x42, 0x04, 0x0e, + 0x54, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x01, 0x0a, 0x0a, 0x20, 0x01, 0x04, + 0x01, 0x01, 0x07, 0x0a, 0x0b, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, 0x17, + 0x03, 0x63, 0xa2, 0x30, 0xeb, 0x30, 0xd0, 0xc1, 0x06, 0x68, 0x13, 0x3f, + 0xff, 0x41, 0x00, 0x6c, 0x00, 0x62, 0x28, 0x15, 0x80, 0x10, 0x16, 0x70, + 0x7f, 0x3f, 0x96, 0x14, 0x5c, 0xf4, 0x5d, 0xbf, 0x43, 0x53, 0x06, 0x7f, + 0xb5, 0x4c, 0xc5, 0x14, 0xbc, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x06, + 0x10, 0x04, 0x3b, 0x04, 0x31, 0x28, 0x17, 0x10, 0x1e, 0x74, 0xff, 0x02, + 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x01, + 0xc2, 0x20, 0xc2, 0x10, 0x00, 0x00, 0x04, 0x28, 0x17, 0x15, 0xe9, 0x30, + 0xc9, 0x06, 0xc8, 0x17, 0x72, 0x2f, 0xad, 0x64, 0x06, 0xa8, 0x17, 0x81, + 0x10, 0x0e, 0xd0, 0x7f, 0x3f, 0x96, 0xc9, 0x62, 0xb7, 0x5f, 0x06, 0x98, + 0x17, 0x03, 0x44, 0xc5, 0x7c, 0xb7, 0xdc, 0xb4, 0x06, 0x98, 0x19, 0x0e, + 0xf3, 0x7f, 0x16, 0x10, 0x04, 0x40, 0x28, 0x15, 0x34, 0x06, 0xa8, 0x17, + 0x10, 0x16, 0xd4, 0xff, 0x03, 0x90, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, + 0x03, 0x03, 0x03, 0x03, 0x01, 0xd7, 0x20, 0x28, 0x0f, 0x00, 0x00, 0x05, + 0x28, 0x17, 0x00, 0xeb, 0x30, 0xb8, 0x30, 0xa7, 0x30, 0xb7, 0x30, 0x60, + 0xe5, 0x06, 0x48, 0x1d, 0x38, 0x17, 0x67, 0x00, 0x65, 0x00, 0x73, 0xc8, + 0x06, 0xa8, 0x97, 0x30, 0x7f, 0x5f, 0x01, 0x10, 0x0e, 0x50, 0x7f, 0x3f, + 0x96, 0x14, 0x04, 0x5c, 0x70, 0x67, 0xc0, 0x4e, 0x06, 0x78, 0x19, 0x44, + 0xc5, 0x03, 0x74, 0xb9, 0x1c, 0xc8, 0x88, 0xc2, 0x06, 0x78, 0x19, 0x07, + 0x72, 0xff, 0xc0, 0x06, 0x73, 0xff, 0x38, 0x17, 0x34, 0x04, 0x36, 0x04, + 0x35, 0x04, 0x74, 0x48, 0x06, 0x48, 0x1b, 0x07, 0x74, 0xff, 0x10, 0x0e, + 0x70, 0x7f, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x80, 0x40, 0x06, 0x04, 0x04, + 0x04, 0x04, 0xe4, 0x1f, 0xb1, 0x00, 0x11, 0x00, 0x00, 0x06, 0x63, 0xd0, + 0x30, 0xab, 0x35, 0x30, 0xa6, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x42, 0x2f, + 0xad, 0x63, 0x2f, 0xb1, 0x48, 0x75, 0x06, 0xc0, 0x7f, 0x03, 0x01, 0x10, + 0x0e, 0x70, 0x7f, 0xf4, 0x5d, 0x4b, 0x20, 0x51, 0x4c, 0x06, 0x88, 0x15, + 0x00, 0x00, 0x14, 0xbc, 0xe4, 0x18, 0xce, 0xb0, 0xc6, 0x06, 0x78, 0x15, + 0x0f, 0x12, 0xff, 0x11, 0x04, 0x30, 0x03, 0x04, 0x3a, 0x04, 0x4d, 0x04, + 0x43, 0x06, 0x48, 0x15, 0x07, 0x74, 0xff, 0xa4, 0x10, 0x0e, 0x90, 0x7f, + 0x05, 0x38, 0x0c, 0x04, 0x05, 0x40, 0x06, 0x05, 0x05, 0x00, 0x05, 0x05, + 0x1d, 0x21, 0x24, 0x13, 0x00, 0x00, 0x01, 0x07, 0x63, 0xd3, 0x30, 0xdb, + 0x30, 0xeb, 0x06, 0xc8, 0x17, 0x06, 0x69, 0x00, 0x68, 0x00, 0x6f, 0x2f, + 0xb5, 0x10, 0x16, 0x50, 0x7f, 0xd4, 0x04, 0x6b, 0x0d, 0x97, 0x14, 0x5c, + 0x06, 0x98, 0x17, 0x44, 0xbe, 0x0c, 0x38, 0xd6, 0x74, 0xb9, 0x06, 0xb8, + 0x17, 0x0e, 0xd3, 0x7f, 0x11, 0x04, 0x01, 0x38, 0x04, 0x45, 0x04, 0x3e, + 0x04, 0x40, 0x06, 0x88, 0x17, 0xa5, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x38, + 0x0c, 0x05, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x00, 0x06, 0x06, 0x78, + 0x21, 0x95, 0x0f, 0x00, 0x00, 0x40, 0x08, 0x28, 0x17, 0xb9, 0x30, 0xc8, + 0x30, 0xea, 0x30, 0x00, 0xc4, 0x30, 0xa1, 0x30, 0xfb, 0x30, 0xca, 0x30, + 0x06, 0xb5, 0x30, 0xa6, 0x30, 0xc9, 0x05, 0xa8, 0x27, 0x38, 0x17, 0x73, + 0x28, 0x00, 0x74, 0x28, 0x17, 0x69, 0x20, 0x05, 0x61, 0x00, 0x2d, 0x2a, + 0x00, 0x4e, 0x2f, 0xc1, 0x73, 0x4b, 0x41, 0x64, 0x06, 0x60, 0x7f, 0x03, + 0x30, 0x01, 0x73, 0x4f, 0xc1, 0x10, 0x0d, 0x30, 0x7f, 0xd4, 0x6b, 0xaf, + 0x65, 0x00, 0x79, 0x72, 0xcc, 0x91, 0xdf, 0x5b, 0x2d, 0x00, 0x00, 0xb7, + 0x8b, 0x5f, 0x74, 0x4c, 0x4e, 0xb7, 0x5f, 0x80, 0x05, 0xb8, 0x25, 0x44, + 0xbe, 0xa4, 0xc2, 0xb8, 0xd2, 0xac, 0x00, 0xb9, 0x28, 0xcc, 0x08, 0xb1, + 0x1c, 0xc1, 0xb0, 0x1c, 0xc6, 0xdc, 0xb4, 0x05, 0xd8, 0x23, 0x0e, 0xf2, + 0xff, 0x38, 0x17, 0x41, 0x04, 0x40, 0x42, 0x28, 0x17, 0x38, 0x04, 0x46, + 0x04, 0x30, 0x04, 0x04, 0x2d, 0x00, 0x1d, 0x04, 0x4d, 0x20, 0x11, 0x4d, + 0x04, 0x1d, 0x43, 0x04, 0x34, 0x05, 0x28, 0x2b, 0x08, 0x34, 0xff, 0x10, + 0x0d, 0xb0, 0x7f, 0x07, 0x38, 0x0c, 0x28, 0x06, 0x07, 0x20, 0x06, 0x05, + 0x20, 0x05, 0x07, 0x07, 0x84, 0x00, 0x21, 0x6c, 0x11, 0x00, 0x00, 0x09, + 0x63, 0xdc, 0x83, 0x28, 0x15, 0xb7, 0x30, 0xe3, 0x30, 0xcb, 0x05, 0xa8, + 0x0b, 0xdf, 0xaf, 0x56, 0x6f, 0x28, 0x15, 0x6f, 0x48, 0x09, 0x6e, 0x2f, + 0xbb, 0x06, 0x70, 0x7f, 0x5f, 0x40, 0x01, 0x10, 0x0e, 0x50, 0x7f, 0x5a, + 0x53, 0x58, 0x62, 0x99, 0x6c, 0x30, 0x3c, 0x5c, 0x05, 0xb8, 0x0b, 0xbf, + 0xff, 0xf4, 0xbc, 0xa0, 0xd1, 0x0c, 0xe4, 0xc0, 0xc8, 0xb2, 0x05, 0xd8, + 0x0d, 0x0f, 0x92, 0xff, 0x11, 0x04, 0x45, 0x3e, 0x28, 0x15, 0x3e, 0x04, + 0x48, 0x28, 0x13, 0x3d, 0x28, 0x23, 0xd1, 0x0e, 0x74, 0xff, 0x10, 0x0e, + 0x70, 0x7f, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x08, 0x30, 0x07, 0x80, 0x20, + 0x05, 0x08, 0xf4, 0x21, 0xf6, 0x12, 0x00, 0x00, 0x01, 0x0a, 0x63, 0xd6, + 0x30, 0xe9, 0x30, 0xa4, 0x20, 0x03, 0xd1, 0x06, 0x58, 0x15, 0x3f, 0xaf, + 0x72, 0x2f, 0xa5, 0x69, 0x00, 0x6c, 0x2f, 0xab, 0x90, 0x06, 0x70, 0x7f, + 0x03, 0x01, 0x10, 0x0e, 0x90, 0x7f, 0x03, 0x5e, 0xd2, 0x52, 0x08, 0x0a, + 0x4f, 0xc9, 0x62, 0x06, 0x78, 0x17, 0x0c, 0xbe, 0xec, 0x06, 0xb7, 0x7c, + 0xc7, 0x7c, 0xb7, 0x06, 0x98, 0x17, 0x0e, 0xd2, 0xff, 0x11, 0x0b, 0x04, + 0x40, 0x04, 0x4d, 0x28, 0x0f, 0x3b, 0x28, 0x17, 0x0e, 0x74, 0xff, 0xa0, + 0x10, 0x0e, 0xb0, 0x7f, 0x09, 0x38, 0x0c, 0x08, 0x09, 0x09, 0x09, 0x08, + 0xc0, 0x20, 0x01, 0x20, 0x06, 0x33, 0x20, 0xe3, 0x13, 0x00, 0x00, 0x41, + 0x0b, 0x48, 0x17, 0xb7, 0x30, 0xe7, 0x30, 0xf4, 0x06, 0x68, 0x19, 0xa9, + 0x58, 0x17, 0x73, 0x2f, 0xb5, 0x76, 0x06, 0xa8, 0x97, 0x5f, 0x01, 0x10, + 0x0e, 0x70, 0x7f, 0x00, 0x03, 0x5e, 0xc9, 0x62, 0x22, 0x7d, 0x2b, 0x59, + 0x81, 0x06, 0x98, 0x17, 0x7c, 0xb7, 0xfc, 0xc1, 0x0c, 0xbe, 0x06, 0xb8, + 0x17, 0xc0, 0x0e, 0xb2, 0xff, 0x38, 0x17, 0x30, 0x04, 0x48, 0x04, 0x3e, + 0x04, 0x74, 0x32, 0x06, 0xa8, 0x17, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0x90, + 0x7f, 0x0a, 0x38, 0x0c, 0x09, 0x0a, 0x30, 0x0a, 0x0a, 0x28, 0x18, 0x20, + 0x05, 0x0a, 0x76, 0x20, 0x37, 0x63, 0x12, 0x2c, 0xad, 0x28, 0x17, 0xb6, + 0x30, 0xa6, 0x06, 0x68, 0x13, 0x5f, 0xaf, 0x14, 0x75, 0x00, 0x7a, 0x2f, + 0xab, 0x75, 0x06, 0xc0, 0x7f, 0x03, 0x01, 0x81, 0x10, 0x0e, 0x70, 0x7f, + 0x03, 0x5e, 0xfd, 0x6c, 0x4c, 0x4e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0xc8, 0xb0, 0xc6, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x12, + 0xff, 0x11, 0x04, 0x43, 0x04, 0x37, 0x04, 0x72, 0x4d, 0x20, 0x05, 0x0e, + 0xb4, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x0b, 0x0b, 0x70, 0x01, 0x0a, 0x80, + 0x40, 0x0a, 0x1b, 0x20, 0x11, 0x13, 0x00, 0x00, 0x0d, 0x0a, 0x63, 0xab, + 0x30, 0xe9, 0x20, 0x01, 0xb7, 0x06, 0x88, 0x19, 0x43, 0xb4, 0x2f, 0xad, + 0x6c, 0x2f, 0xb1, 0x5b, 0x35, 0x69, 0x06, 0x20, 0x7f, 0x03, 0x01, 0x70, + 0x6c, 0x28, 0x17, 0x5f, 0xb5, 0x10, 0x0e, 0x10, 0x7f, 0x4b, 0x51, 0xd2, + 0x52, 0x08, 0xc9, 0x62, 0x0c, 0x5e, 0x06, 0x78, 0x19, 0xec, 0xce, 0xec, + 0x06, 0xb7, 0x7c, 0xb7, 0xdc, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf2, 0xff, + 0x1a, 0xa0, 0x28, 0x13, 0x3b, 0x28, 0x17, 0x40, 0x04, 0x30, 0x04, 0x48, + 0x39, 0x04, 0x38, 0x06, 0x08, 0x1d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, + 0x7f, 0x0c, 0x0c, 0x70, 0x01, 0x45, 0x19, 0x40, 0x0a, 0x6e, 0x1f, 0x6f, + 0x28, 0x17, 0x0e, 0x48, 0x17, 0x00, 0xb7, 0x30, 0xe5, 0x30, 0xfb, 0x30, + 0xbb, 0x30, 0x01, 0xf4, 0x30, 0xa7, 0x30, 0xea, 0x30, 0xf3, 0x05, 0xc8, + 0x23, 0xc0, 0x38, 0x17, 0x58, 0x13, 0x2d, 0x00, 0x53, 0x00, 0x65, 0x00, + 0x54, 0x76, 0x20, 0x03, 0x72, 0x28, 0x1f, 0x6e, 0x05, 0xe0, 0x7f, 0x5f, + 0x01, 0x80, 0x10, 0x0e, 0x50, 0x7f, 0x61, 0x53, 0xc9, 0x62, 0xc0, 0x4e, + 0x2d, 0x01, 0x00, 0x5e, 0x58, 0xf4, 0x7e, 0x97, 0x67, 0x06, 0x18, 0x1d, + 0x00, 0x74, 0xce, 0x7c, 0xb7, 0x88, 0xc2, 0x38, 0xc1, 0x0d, 0xa0, 0xbc, + 0xb0, 0xb9, 0x06, 0x38, 0x1b, 0x0e, 0xf2, 0xff, 0x1a, 0x28, 0x0f, 0x80, + 0x58, 0x13, 0x2d, 0x00, 0x21, 0x04, 0x35, 0x04, 0x32, 0xae, 0x20, 0x03, + 0x40, 0x28, 0x1f, 0x3d, 0x05, 0x68, 0x21, 0x07, 0x74, 0xff, 0x10, 0x0e, + 0x70, 0x7f, 0x0d, 0x50, 0x0d, 0x70, 0x01, 0x15, 0x40, 0x0a, 0x36, 0x20, + 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x63, 0xaf, 0x30, 0xeb, 0x30, 0x1c, + 0xfc, 0x30, 0xb8, 0x28, 0x19, 0x05, 0xb8, 0x0d, 0xbf, 0xaf, 0x6c, 0x00, + 0x18, 0x75, 0x00, 0x6a, 0x06, 0x5d, 0xac, 0x10, 0x0f, 0x20, 0x7f, 0x4b, + 0x51, 0x62, 0x18, 0x53, 0xe5, 0x65, 0x06, 0x18, 0x0f, 0x88, 0x17, 0xd0, + 0xe8, 0xb8, 0x30, 0xc0, 0xc9, 0x06, 0x38, 0x11, 0x0f, 0x53, 0x7f, 0x1a, + 0x04, 0x3b, 0x04, 0x19, 0x43, 0x04, 0x36, 0x05, 0x68, 0x05, 0x10, 0x18, + 0x14, 0xff, 0x0e, 0x0e, 0x70, 0x01, 0x40, 0x16, 0x40, 0x0a, 0x44, 0x21, + 0xc5, 0x10, 0x00, 0x00, 0x00, 0x10, 0x63, 0xb3, 0x30, 0xf3, 0x30, 0xb9, + 0x30, 0x44, 0xbf, 0x20, 0x05, 0xc4, 0x30, 0xa1, 0x06, 0x28, 0x1b, 0x43, + 0x00, 0x45, 0x6f, 0x2f, 0x9b, 0x73, 0x00, 0x74, 0x2f, 0xb7, 0x6e, 0x40, + 0x05, 0xdc, 0x10, 0x06, 0x10, 0x7f, 0x71, 0x7d, 0x7a, 0x06, 0x01, 0x7d, + 0xf1, 0xff, 0x06, 0x10, 0x81, 0xb7, 0x5e, 0x02, 0xaf, 0x65, 0x66, 0x57, + 0xdf, 0x5b, 0x06, 0x78, 0x19, 0x58, 0x01, 0xcf, 0xa4, 0xc2, 0xc4, 0xd0, + 0x28, 0xcc, 0x06, 0x78, 0x19, 0x80, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x3e, + 0x04, 0x3d, 0x04, 0x41, 0x0b, 0x04, 0x42, 0x04, 0x30, 0x20, 0x07, 0x46, + 0x20, 0x05, 0x10, 0x0e, 0x14, 0xff, 0x94, 0x0e, 0xb6, 0x7f, 0x0f, 0x0f, + 0x70, 0x01, 0x18, 0x40, 0x0a, 0x6b, 0x1f, 0x05, 0x5c, 0x14, 0x00, 0x00, + 0x11, 0x28, 0x17, 0xf4, 0x28, 0x0f, 0x1a, 0xb9, 0x30, 0xca, 0x06, 0x28, + 0x13, 0x78, 0x17, 0x76, 0x28, 0x13, 0x73, 0xe0, 0x28, 0x1d, 0x06, 0x16, + 0x95, 0x10, 0x0f, 0x10, 0x7f, 0xd1, 0x79, 0xe6, 0x74, 0xaf, 0x10, 0x65, + 0xb3, 0x7e, 0x06, 0x78, 0x17, 0x54, 0xcf, 0x14, 0xbc, 0x0e, 0xa4, 0xc2, + 0x98, 0xb0, 0x06, 0xb8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x32, 0xb9, + 0x28, 0x13, 0x41, 0x28, 0x1d, 0x05, 0xf8, 0x13, 0x10, 0x17, 0x34, 0xff, + 0x10, 0x10, 0x70, 0x01, 0x40, 0x17, 0x40, 0x0a, 0x9d, 0x20, 0x58, 0x12, + 0x00, 0x00, 0x00, 0x12, 0x63, 0xc9, 0x30, 0xa5, 0x30, 0xf3, 0x30, 0x06, + 0xdc, 0x30, 0xd3, 0x30, 0xc4, 0x28, 0x1f, 0x06, 0x18, 0x1b, 0x44, 0x02, + 0x00, 0xe2, 0x00, 0x6d, 0x00, 0x62, 0x48, 0x1d, 0x69, 0xc0, 0x06, 0x2f, + 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x7b, 0x76, 0x5a, 0x53, 0xf4, 0x7e, 0x20, + 0xdf, 0x5b, 0x06, 0x78, 0x17, 0xec, 0xb4, 0xf4, 0xbc, 0x44, 0x18, 0xbe, + 0x28, 0xcc, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x4b, 0x08, + 0x04, 0x3c, 0x04, 0x31, 0x48, 0x1d, 0x38, 0x04, 0x46, 0xca, 0x06, 0x08, + 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x11, 0x11, 0x70, 0x01, 0x13, 0x40, 0x0a, + 0xf4, 0x28, 0x1f, 0x1a, 0x28, 0x17, 0x13, 0x28, 0x17, 0xeb, 0x30, 0xb8, + 0x30, 0x30, 0xe5, 0x06, 0x28, 0x11, 0x78, 0x17, 0x6f, 0x00, 0x6c, 0x00, + 0x60, 0x6a, 0x06, 0x5d, 0xac, 0x10, 0x0f, 0x20, 0x7f, 0x1a, 0x59, 0x14, + 0x5c, 0xe5, 0x40, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0xcc, 0xb3, 0xc0, + 0xc9, 0xd1, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x14, 0x28, 0x11, 0x3b, + 0x04, 0x36, 0x05, 0xe8, 0x0d, 0x90, 0x10, 0x17, 0x94, 0xff, 0x12, 0x12, + 0xd0, 0x01, 0x83, 0x1f, 0xef, 0x10, 0x80, 0x2b, 0x2d, 0x63, 0xac, 0x30, + 0xe9, 0x30, 0xc4, 0x30, 0x55, 0xa3, 0x06, 0x88, 0x17, 0x47, 0x2f, 0xa1, + 0x6c, 0x2f, 0xa5, 0x74, 0x2f, 0xad, 0x81, 0x10, 0x16, 0x30, 0x7f, 0xa0, + 0x52, 0xc9, 0x62, 0x28, 0x83, 0x06, 0x98, 0x17, 0x03, 0x08, 0xac, 0x7c, + 0xb7, 0x58, 0xce, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x11, 0x13, 0x04, + 0x30, 0x28, 0x17, 0x30, 0x04, 0x46, 0x06, 0x68, 0x19, 0x94, 0x10, 0x16, + 0xf4, 0xff, 0x13, 0x13, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x4e, 0x20, 0x00, + 0xef, 0x13, 0x00, 0x00, 0x15, 0x63, 0xb8, 0x30, 0x0d, 0xe5, 0x30, 0xeb, + 0x30, 0x30, 0x05, 0x06, 0x58, 0x19, 0x47, 0x28, 0x0f, 0x06, 0x75, 0x00, + 0x72, 0x00, 0x67, 0x40, 0x07, 0x10, 0x16, 0x10, 0x7f, 0x45, 0x04, 0x4e, + 0x14, 0x5c, 0x45, 0x4e, 0x06, 0x98, 0x17, 0xc0, 0xc9, 0x0e, 0xb0, 0xc6, + 0x74, 0xb9, 0x30, 0x05, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x14, 0x00, + 0x04, 0x36, 0x04, 0x43, 0x04, 0x40, 0x04, 0x34, 0xca, 0x40, 0x07, 0x10, + 0x1e, 0x14, 0xff, 0x14, 0x14, 0x70, 0x01, 0x11, 0x40, 0x0a, 0x37, 0x00, + 0x1f, 0x77, 0x12, 0x00, 0x00, 0x16, 0x63, 0xb4, 0xd6, 0x06, 0xc8, 0x15, + 0x3f, 0xaf, 0x6f, 0x28, 0x15, 0x6a, 0x06, 0x7d, 0xae, 0x10, 0x0f, 0x00, + 0x7f, 0x08, 0x04, 0x62, 0x14, 0x5c, 0xe5, 0x65, 0x06, 0x98, 0x17, 0xe0, + 0xac, 0xe2, 0x38, 0x15, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x13, 0x04, + 0x3e, 0x28, 0x15, 0x36, 0xca, 0x06, 0x28, 0x11, 0x10, 0x17, 0x54, 0xff, + 0x15, 0x15, 0x70, 0x01, 0x10, 0x40, 0x0a, 0x09, 0x00, 0x20, 0x8b, 0x10, + 0x00, 0x00, 0x17, 0x63, 0xcf, 0x88, 0x28, 0x17, 0xae, 0x30, 0xbf, 0x06, + 0x88, 0x17, 0x48, 0x00, 0x61, 0xac, 0x4f, 0xad, 0x68, 0x2f, 0xb7, 0x74, + 0x20, 0x0b, 0x10, 0x15, 0xf0, 0x7f, 0xc8, 0x54, 0x02, 0x14, 0x5c, 0x09, + 0x54, 0x54, 0x58, 0x06, 0x78, 0x19, 0x58, 0x01, 0xd5, 0x74, 0xb9, 0x30, + 0xae, 0xc0, 0xd0, 0x06, 0x78, 0x19, 0x88, 0x0e, 0xf3, 0x7f, 0x25, 0x04, + 0x30, 0x28, 0x17, 0x33, 0x04, 0x38, 0x32, 0x04, 0x42, 0x20, 0x09, 0x10, + 0x1e, 0x14, 0xff, 0x16, 0x16, 0x70, 0x01, 0x27, 0x80, 0x40, 0x0a, 0xf8, + 0x20, 0x58, 0x12, 0x00, 0x00, 0x18, 0x00, 0x63, 0xd5, 0x30, 0xcd, 0x30, + 0xc9, 0x30, 0xa2, 0x20, 0x30, 0xe9, 0x06, 0x68, 0x19, 0x48, 0x00, 0x75, + 0x00, 0x6e, 0x0f, 0x00, 0x65, 0x00, 0x64, 0x2f, 0xb7, 0x38, 0x21, 0x05, + 0xf8, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0xe1, 0x80, 0x85, 0x51, 0x1a, + 0x59, 0x3f, 0x96, 0x20, 0xc9, 0x62, 0x06, 0x58, 0x19, 0xc4, 0xd6, 0x24, + 0xb1, 0xc4, 0x06, 0xb3, 0x44, 0xc5, 0x7c, 0xb7, 0x06, 0x58, 0x19, 0x0e, + 0xf3, 0x7f, 0x25, 0x00, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x34, + 0x39, 0x04, 0x3e, 0x48, 0x21, 0x05, 0xf8, 0x1b, 0x10, 0x16, 0xf4, 0xff, + 0x17, 0x17, 0x70, 0x01, 0x40, 0x28, 0x40, 0x0a, 0xa0, 0x20, 0x49, 0x10, + 0x00, 0x00, 0x00, 0x19, 0x63, 0xe4, 0x30, 0xed, 0x30, 0xdf, 0x30, 0x15, + 0xc4, 0x30, 0xa1, 0x06, 0x68, 0x17, 0x49, 0x2f, 0xaf, 0x6c, 0x28, 0x13, + 0x60, 0x6d, 0x06, 0x6f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xc5, 0x96, 0x1b, + 0x6d, 0x73, 0x10, 0x7c, 0xdf, 0x5b, 0x06, 0x58, 0x15, 0x00, 0x00, 0x74, + 0xc7, 0x00, 0x4c, 0xc5, 0x5c, 0xb8, 0xf8, 0xbb, 0x28, 0xcc, 0xc4, 0x06, + 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x2f, 0x04, 0x3b, 0x28, 0x11, 0x3c, 0x04, + 0x19, 0x38, 0x04, 0x46, 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x18, + 0x18, 0x70, 0x01, 0x40, 0x29, 0x40, 0x0a, 0xb1, 0x1f, 0x78, 0x13, 0x00, + 0x00, 0x5b, 0x1a, 0x28, 0x17, 0xb7, 0x06, 0x68, 0x11, 0x98, 0x17, 0x73, + 0x28, 0x13, 0x06, 0xb0, 0x7f, 0x21, 0x5f, 0x01, 0x10, 0x0e, 0x90, 0x7f, + 0xc5, 0x96, 0x7f, 0x89, 0x06, 0x78, 0x13, 0x87, 0x58, 0x17, 0x44, 0xc5, + 0xdc, 0xc2, 0x06, 0x58, 0x13, 0x07, 0x72, 0xff, 0x06, 0xb3, 0xff, 0x17, + 0x2f, 0x04, 0x41, 0x20, 0x01, 0x4b, 0x06, 0x28, 0x11, 0x07, 0x94, 0xff, + 0x10, 0x0e, 0xb0, 0x7f, 0x28, 0x19, 0x19, 0x70, 0x01, 0x2a, 0x40, 0x0a, + 0x8a, 0x21, 0x9a, 0x80, 0x28, 0x17, 0x1b, 0x63, 0xa4, 0x30, 0xeb, 0x30, + 0xdb, 0x2a, 0x30, 0xf4, 0x06, 0x88, 0x1b, 0x49, 0x2f, 0xad, 0x66, 0x2f, + 0xaf, 0x76, 0xc0, 0x06, 0x88, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0x0a, 0x4f, + 0x14, 0x5c, 0x8f, 0x79, 0x20, 0x2b, 0x59, 0x06, 0x78, 0x1b, 0x7c, 0xc7, + 0xec, 0xd3, 0x0c, 0x60, 0xbe, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x18, + 0x04, 0x3b, 0x04, 0x44, 0x0c, 0x04, 0x3e, 0x04, 0x32, 0x06, 0x68, 0x19, + 0x10, 0x16, 0xf4, 0xff, 0x1a, 0x1a, 0xa0, 0x70, 0x01, 0x14, 0x40, 0x0a, + 0xb1, 0x1f, 0x74, 0x12, 0x00, 0x00, 0x00, 0x1c, 0x63, 0xde, 0x30, 0xe9, + 0x30, 0xe0, 0x02, 0x30, 0xec, 0x30, 0xb7, 0x30, 0xe5, 0x06, 0x48, 0x1b, + 0x4d, 0xa2, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x6d, 0x00, 0x75, 0x20, 0x07, + 0x65, 0xc8, 0x2c, 0x3b, 0x06, 0xd0, 0x7f, 0x5f, 0x01, 0x10, 0x0d, 0xd0, + 0x7f, 0x6c, 0x9a, 0xc9, 0x01, 0x62, 0x46, 0x7a, 0x17, 0x52, 0xc0, 0x4e, + 0x06, 0x58, 0x19, 0x00, 0xc8, 0xb9, 0x7c, 0xb7, 0x34, 0xbb, 0x08, 0xb8, + 0x38, 0x88, 0xc2, 0x06, 0x58, 0x1b, 0x07, 0xf2, 0xff, 0x05, 0xf3, 0xff, + 0x1c, 0x04, 0x30, 0x22, 0x04, 0x40, 0x20, 0x03, 0x3c, 0x04, 0x43, 0x20, + 0x07, 0x35, 0x39, 0x04, 0x48, 0x05, 0xe8, 0x1f, 0x07, 0xf4, 0xff, 0x10, + 0x0d, 0xf0, 0x7f, 0x1b, 0x1b, 0x70, 0x01, 0x40, 0x1a, 0x40, 0x0a, 0xe2, + 0x21, 0xc5, 0x10, 0x00, 0x00, 0x00, 0x1d, 0x63, 0xe1, 0x30, 0xd8, 0x30, + 0xc7, 0x30, 0x06, 0xa3, 0x30, 0xf3, 0x30, 0xc4, 0x20, 0x05, 0x06, 0x18, + 0x19, 0x4d, 0xa0, 0x28, 0x0b, 0x68, 0x28, 0x0f, 0x64, 0x00, 0x69, 0x00, + 0x6e, 0x30, 0x00, 0x74, 0x20, 0x05, 0x10, 0x15, 0xd0, 0x7f, 0x85, 0x68, + 0x6b, 0x8d, 0x08, 0x01, 0x4e, 0x28, 0x83, 0x06, 0x58, 0x15, 0x00, 0x00, + 0x54, 0x01, 0xba, 0xe4, 0xd5, 0x18, 0xb5, 0x58, 0xce, 0x06, 0x58, 0x15, + 0xa8, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x0b, 0x45, 0x28, 0x0f, 0x34, 0x04, + 0x38, 0x0c, 0x04, 0x3d, 0x04, 0x46, 0x20, 0x05, 0x10, 0x1d, 0xd4, 0xff, + 0x1c, 0x1c, 0xa2, 0x70, 0x01, 0x1b, 0x40, 0x0a, 0xbd, 0x1f, 0x1b, 0x28, + 0x17, 0x1e, 0x00, 0x63, 0xe0, 0x30, 0xec, 0x30, 0xb7, 0x30, 0xe5, 0xfc, + 0x06, 0x28, 0x11, 0x7f, 0xaf, 0x06, 0x5c, 0x27, 0xf0, 0x7f, 0x05, 0xff, + 0xa7, 0x10, 0x07, 0x70, 0x7f, 0x46, 0x7a, 0x08, 0x17, 0x52, 0xc0, 0x4e, + 0x06, 0x78, 0x15, 0x00, 0x00, 0x34, 0x07, 0xbb, 0x08, 0xb8, 0x88, 0xc2, + 0x06, 0x78, 0x15, 0x07, 0x92, 0xff, 0x06, 0x73, 0xff, 0x05, 0x1c, 0x04, + 0x43, 0x04, 0x40, 0x28, 0x1b, 0x48, 0x05, 0xe8, 0x0f, 0xca, 0x07, 0xf4, + 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x1d, 0x1d, 0x70, 0x01, 0x1c, 0x40, 0x0a, + 0x18, 0x00, 0x21, 0x75, 0x11, 0x00, 0x00, 0x1f, 0x63, 0xcd, 0x02, 0x30, + 0xa2, 0x30, 0xe0, 0x30, 0xc4, 0x06, 0x88, 0x17, 0x4e, 0x8c, 0x2f, 0xaf, + 0x61, 0x00, 0x6d, 0x2f, 0xa9, 0x10, 0x16, 0x50, 0x7f, 0x3c, 0x5c, 0x02, + 0x9a, 0x4e, 0xc6, 0x59, 0x28, 0x83, 0x06, 0x78, 0x19, 0x24, 0x06, 0xb1, + 0x54, 0xc5, 0x20, 0xce, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x03, + 0x04, 0x4f, 0x04, 0x3c, 0x04, 0x46, 0x06, 0x68, 0x15, 0x10, 0x17, 0x14, + 0xff, 0x28, 0x1e, 0x1e, 0x70, 0x01, 0x1d, 0x40, 0x0a, 0x5f, 0x21, 0xbf, + 0x00, 0x12, 0x00, 0x00, 0x20, 0x63, 0xaa, 0x30, 0xeb, 0x20, 0x30, 0xc8, + 0x06, 0x88, 0x15, 0x00, 0x00, 0x4f, 0x00, 0x6c, 0xc0, 0x06, 0x88, 0x13, + 0x10, 0x0f, 0x30, 0x7f, 0x65, 0x59, 0x14, 0x5c, 0x79, 0x72, 0x81, 0x06, + 0x78, 0x15, 0x00, 0x00, 0x2c, 0xc6, 0xb8, 0xd2, 0x06, 0x98, 0x15, 0x83, + 0x0f, 0x13, 0x7f, 0x1e, 0x04, 0x3b, 0x04, 0x42, 0x06, 0x88, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x28, 0x1f, 0x1f, 0x70, 0x01, 0x1e, 0x40, 0x0a, 0x98, + 0x1f, 0x50, 0x00, 0x11, 0x00, 0x00, 0x21, 0x63, 0xd7, 0x30, 0xe9, 0x02, + 0x30, 0xdb, 0x30, 0xf4, 0x30, 0xa1, 0x06, 0x68, 0x1b, 0x50, 0x20, 0x00, + 0x72, 0x2f, 0xaf, 0x68, 0x00, 0x6f, 0x00, 0x76, 0xc0, 0x2f, 0xb7, 0x10, + 0x16, 0x10, 0x7f, 0x6e, 0x66, 0xc9, 0x62, 0x0d, 0x97, 0x20, 0xe6, 0x74, + 0x06, 0x78, 0x19, 0x04, 0xd5, 0x7c, 0xb7, 0x38, 0x18, 0xd6, 0x14, 0xbc, + 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x40, 0x00, 0x04, 0x30, + 0x04, 0x45, 0x04, 0x3e, 0x04, 0x32, 0xca, 0x20, 0x07, 0x10, 0x1e, 0x14, + 0xff, 0x20, 0x20, 0x70, 0x01, 0x1f, 0x40, 0x0a, 0xf3, 0x00, 0x1f, 0x80, + 0x12, 0x00, 0x00, 0x22, 0x63, 0xb5, 0x82, 0x28, 0x17, 0xfc, 0x30, 0xb8, + 0x30, 0xe5, 0x06, 0x68, 0x17, 0x53, 0xa8, 0x28, 0x15, 0x6c, 0x28, 0x19, + 0x6a, 0x06, 0x6f, 0xb3, 0x53, 0x00, 0x03, 0x40, 0x01, 0x10, 0x0e, 0xb0, + 0x7f, 0x5f, 0x74, 0xc9, 0x62, 0xe5, 0x65, 0x80, 0x06, 0x78, 0x15, 0x00, + 0x00, 0x24, 0xc1, 0x7c, 0xb7, 0xc0, 0x70, 0xc9, 0x06, 0x78, 0x15, 0x07, + 0x32, 0xff, 0x06, 0xd3, 0xff, 0x21, 0x04, 0x4d, 0x04, 0x5c, 0x3b, 0x28, + 0x19, 0x36, 0x06, 0x28, 0x13, 0x07, 0x54, 0xff, 0x10, 0x0e, 0xd0, 0x7f, + 0x21, 0x21, 0xa0, 0x70, 0x01, 0x23, 0x40, 0x0a, 0x8d, 0x21, 0x65, 0x10, + 0x00, 0x20, 0x00, 0x23, 0x28, 0x17, 0xc8, 0x30, 0xa5, 0x30, 0xfb, 0x2c, + 0x30, 0xde, 0x28, 0x1d, 0xec, 0x06, 0x28, 0x1b, 0x38, 0x17, 0x74, 0x00, + 0x04, 0x75, 0x00, 0x20, 0x00, 0x4d, 0x2f, 0xb7, 0x72, 0x00, 0x40, 0x65, + 0x10, 0x15, 0xe0, 0x7f, 0x28, 0x84, 0xfe, 0x56, 0x2d, 0x00, 0x08, 0x6c, + 0x9a, 0xf7, 0x96, 0x06, 0x58, 0x1b, 0xac, 0xc0, 0x2c, 0x06, 0xd2, 0xc8, + 0xb9, 0x08, 0xb8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x80, 0x28, + 0x13, 0x42, 0x04, 0x43, 0x04, 0x2d, 0x00, 0x1c, 0x8c, 0x28, 0x1d, 0x40, + 0x04, 0x35, 0x05, 0xe8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x22, 0x22, 0xa2, + 0x70, 0x01, 0x20, 0x40, 0x0a, 0xfb, 0x21, 0x45, 0x28, 0x17, 0x24, 0x03, + 0x63, 0xb7, 0x30, 0xd3, 0x30, 0xa6, 0x06, 0x28, 0x0f, 0x9f, 0xaf, 0x14, + 0x69, 0x00, 0x62, 0x20, 0x03, 0x75, 0x10, 0x16, 0x60, 0x7f, 0x21, 0x95, + 0x0c, 0xd4, 0x6b, 0x4c, 0x4e, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xdc, 0xc2, + 0x0c, 0x44, 0xbe, 0xb0, 0xc6, 0x06, 0x78, 0x15, 0x0f, 0x21, 0xff, 0x04, + 0x38, 0x2c, 0x04, 0x31, 0x20, 0x03, 0x43, 0x05, 0xe8, 0x0f, 0x10, 0x17, + 0x74, 0xff, 0x23, 0x23, 0xa0, 0x70, 0x01, 0x21, 0x40, 0x0a, 0x8e, 0x20, + 0x2c, 0x11, 0x00, 0x00, 0x00, 0x25, 0x63, 0xb9, 0x30, 0xc1, 0x30, 0xe3, + 0x0a, 0x30, 0xf4, 0x30, 0xa1, 0x06, 0x68, 0x1b, 0x53, 0x2f, 0xab, 0x63, + 0x8c, 0x2f, 0xa5, 0x61, 0x00, 0x76, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, + 0xcf, 0x82, 0x08, 0x70, 0x60, 0xe6, 0x74, 0x06, 0x98, 0x17, 0x18, 0xc2, + 0xb4, 0x06, 0xcc, 0x44, 0xc5, 0x14, 0xbc, 0x06, 0x78, 0x19, 0x0e, 0xf3, + 0x7f, 0x21, 0x83, 0x28, 0x11, 0x47, 0x04, 0x30, 0x04, 0x32, 0x20, 0x03, + 0x10, 0x1e, 0x34, 0xff, 0x28, 0x24, 0x24, 0x70, 0x01, 0x22, 0x40, 0x0a, + 0xe2, 0x21, 0xaa, 0x00, 0x12, 0x00, 0x00, 0x26, 0x63, 0xc6, 0x30, 0xec, + 0x00, 0x30, 0xaa, 0x30, 0xeb, 0x30, 0xde, 0x30, 0xf3, 0xa8, 0x06, 0x48, + 0x19, 0x54, 0x28, 0x13, 0x6c, 0x28, 0x17, 0x6f, 0x00, 0x72, 0x28, 0x00, + 0x6d, 0x28, 0x1d, 0x6e, 0x10, 0x15, 0xe0, 0x7f, 0x79, 0x72, 0x17, 0x01, + 0x52, 0x65, 0x59, 0x14, 0x5c, 0xfc, 0x66, 0x06, 0x58, 0x1b, 0x00, 0x54, + 0xd1, 0x08, 0xb8, 0x24, 0xc6, 0x74, 0xb9, 0x30, 0xcc, 0xb9, 0x06, 0x58, + 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0x04, 0x35, 0x04, 0x41, 0x3b, 0x20, 0x03, + 0x3e, 0x04, 0x40, 0x04, 0x3c, 0x28, 0x1f, 0x65, 0x3d, 0x05, 0xe8, 0x1d, + 0x10, 0x16, 0xf4, 0xff, 0x25, 0x25, 0x70, 0x01, 0x24, 0x40, 0x0a, 0x14, + 0x43, 0x1f, 0x03, 0x28, 0x17, 0x27, 0x28, 0x17, 0xa3, 0x30, 0x06, 0xdf, + 0x30, 0xb7, 0x30, 0xe5, 0x06, 0x48, 0x15, 0x38, 0x17, 0x69, 0x8c, 0x28, + 0x0f, 0x69, 0x00, 0x73, 0x06, 0x6d, 0xb0, 0x70, 0x7f, 0x5f, 0x01, 0x81, + 0x10, 0x0e, 0x50, 0x7f, 0x82, 0x84, 0x73, 0x7c, 0xc0, 0x4e, 0x06, 0x58, + 0x13, 0x81, 0x3f, 0xff, 0xf0, 0xd2, 0xf8, 0xbb, 0x88, 0xc2, 0x06, 0x58, + 0x13, 0xc4, 0x07, 0xb2, 0xff, 0x06, 0x73, 0xff, 0x22, 0x04, 0x38, 0x28, + 0x0f, 0x38, 0x04, 0x72, 0x48, 0x05, 0xe8, 0x0f, 0x07, 0xf4, 0xff, 0x10, + 0x0e, 0x70, 0x7f, 0x26, 0x26, 0x70, 0x01, 0x25, 0x80, 0x40, 0x0a, 0x89, + 0x20, 0x17, 0x0f, 0x00, 0x00, 0x28, 0x00, 0x63, 0xc8, 0x30, 0xa5, 0x30, + 0xeb, 0x30, 0xc1, 0x2a, 0x30, 0xe3, 0x06, 0x88, 0x17, 0x75, 0x2f, 0xaf, + 0x63, 0x2f, 0xb5, 0x61, 0xc0, 0x06, 0x68, 0x17, 0x10, 0x0e, 0xd0, 0x7f, + 0xfe, 0x56, 0x14, 0x5c, 0x70, 0x60, 0x81, 0x06, 0x98, 0x17, 0x34, 0xd2, + 0xb4, 0xcc, 0x44, 0xc5, 0x06, 0xb8, 0x17, 0x80, 0x0e, 0xd3, 0x7f, 0x22, + 0x04, 0x43, 0x04, 0x3b, 0x04, 0x47, 0x32, 0x04, 0x30, 0x06, 0x88, 0x17, + 0x10, 0x16, 0xd4, 0xff, 0x27, 0x27, 0x70, 0x01, 0x26, 0x80, 0x40, 0x0a, + 0x1e, 0x20, 0x7a, 0x14, 0x00, 0x00, 0x29, 0x20, 0x63, 0xf4, 0x06, 0xc8, + 0x15, 0x00, 0x00, 0x56, 0x00, 0xe2, 0xc9, 0x06, 0xc8, 0x17, 0x10, 0x0e, + 0xf0, 0x7f, 0x83, 0x6c, 0x06, 0xd8, 0x17, 0x14, 0xbe, 0x06, 0xd8, 0x17, + 0x8c, 0x0e, 0xf3, 0x7f, 0x12, 0x04, 0x4b, 0x06, 0xc8, 0x17, 0x10, 0x16, + 0xf4, 0xff, 0x28, 0x28, 0xa0, 0x70, 0x01, 0x0e, 0x40, 0x0a, 0x13, 0x20, + 0x55, 0x11, 0x00, 0x22, 0x00, 0x2a, 0x28, 0x17, 0xa1, 0x30, 0xb9, 0x28, + 0x1b, 0xa4, 0xa8, 0x06, 0x68, 0x19, 0x56, 0x2f, 0xa7, 0x73, 0x2f, 0xb1, + 0x75, 0x00, 0x69, 0xc0, 0x06, 0x68, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0xe6, + 0x74, 0xaf, 0x65, 0x62, 0x53, 0x20, 0x0a, 0x4f, 0x06, 0x78, 0x19, 0x14, + 0xbc, 0xac, 0xc2, 0xe8, 0x1a, 0xb8, 0x74, 0xc7, 0x06, 0x78, 0x19, 0x0e, + 0xf3, 0x7f, 0x12, 0x28, 0x11, 0x41, 0x8c, 0x28, 0x19, 0x43, 0x04, 0x39, + 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x29, 0x29, 0xa0, 0x70, 0x01, + 0x0c, 0x40, 0x0a, 0x2a, 0x21, 0xb6, 0x13, 0x00, 0x00, 0x00, 0x2b, 0x63, + 0xd5, 0x30, 0xe9, 0x30, 0xf3, 0x02, 0x30, 0xc1, 0x30, 0xa7, 0x30, 0xa2, + 0x06, 0x48, 0x19, 0x56, 0x2c, 0x00, 0x72, 0x2f, 0xa9, 0x6e, 0x06, 0x8f, + 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x17, 0x5f, 0x08, 0x17, 0x67, 0x70, 0x60, + 0x06, 0x78, 0x15, 0x00, 0x00, 0x0c, 0x01, 0xbe, 0x80, 0xb7, 0xb4, 0xcc, + 0x44, 0xc5, 0x06, 0x98, 0x17, 0x88, 0x0e, 0xd3, 0x7f, 0x12, 0x04, 0x40, + 0x28, 0x19, 0x3d, 0x04, 0x47, 0xe5, 0x28, 0x1f, 0x10, 0x06, 0x31, 0x7f, + 0x10, 0x06, 0xf5, 0xff, 0x2a, 0x2a, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x18, + 0x7f, 0x20, 0x54, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x0a, 0x0a, 0x82, + 0x20, 0x01, 0x01, 0x01, 0x07, 0x0a, 0x0b, 0x20, 0x05, 0x01, 0x24, 0x01, + 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x12, 0x02, 0x02, + 0x03, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, 0x03, 0x09, 0x03, 0x03, 0x03, + 0x04, 0x30, 0x04, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x05, 0x30, 0x04, 0x04, 0x05, 0x82, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, + 0x06, 0x30, 0x04, 0x05, 0x51, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, + 0x06, 0x07, 0x30, 0x04, 0x28, 0x06, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, + 0x07, 0x07, 0x08, 0x8c, 0x30, 0x04, 0x07, 0x08, 0x08, 0x30, 0x07, 0x20, + 0x05, 0x08, 0x09, 0x86, 0x30, 0x04, 0x08, 0x09, 0x09, 0x09, 0x20, 0x09, + 0x20, 0x05, 0x09, 0x5c, 0x0a, 0x30, 0x04, 0x09, 0x20, 0x94, 0x20, 0x10, + 0x30, 0x9a, 0x0b, 0x0b, 0xca, 0x70, 0x01, 0x50, 0x0a, 0x0c, 0x0c, 0x70, + 0x01, 0x19, 0x40, 0x0a, 0x0d, 0x52, 0x0d, 0x70, 0x01, 0x15, 0x40, 0x0a, + 0x0e, 0x0e, 0x70, 0x01, 0x16, 0x94, 0x40, 0x0a, 0x0f, 0x0f, 0x70, 0x01, + 0x18, 0x40, 0x0a, 0x10, 0x10, 0xa5, 0x70, 0x01, 0x17, 0x40, 0x0a, 0x11, + 0x11, 0x70, 0x01, 0x13, 0x40, 0x0a, 0x25, 0x12, 0x12, 0xd0, 0x01, 0x13, + 0x13, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x29, 0x14, 0x14, 0x70, 0x01, 0x11, + 0x40, 0x0a, 0x15, 0x15, 0x70, 0x01, 0x4a, 0x10, 0x40, 0x0a, 0x16, 0x16, + 0x70, 0x01, 0x27, 0x40, 0x0a, 0x17, 0x52, 0x17, 0x70, 0x01, 0x28, 0x40, + 0x0a, 0x18, 0x18, 0x70, 0x01, 0x29, 0x94, 0x40, 0x0a, 0x19, 0x19, 0x70, + 0x01, 0x2a, 0x40, 0x0a, 0x1a, 0x1a, 0xa6, 0x70, 0x01, 0x14, 0x40, 0x0a, + 0x1b, 0x1b, 0x70, 0x01, 0x50, 0x0a, 0x1c, 0x66, 0x1c, 0x70, 0x01, 0x50, + 0x0a, 0x1d, 0x1d, 0x70, 0x01, 0x50, 0x0a, 0x1e, 0x66, 0x1e, 0x70, 0x01, + 0x50, 0x0a, 0x1f, 0x1f, 0x70, 0x01, 0x50, 0x0a, 0x20, 0x65, 0x20, 0x70, + 0x01, 0x50, 0x0a, 0x21, 0x21, 0x70, 0x01, 0x23, 0x40, 0x0a, 0x29, 0x22, + 0x22, 0x70, 0x01, 0x20, 0x40, 0x0a, 0x23, 0x23, 0x70, 0x01, 0x4a, 0x21, + 0x40, 0x0a, 0x24, 0x24, 0x70, 0x01, 0x22, 0x40, 0x0a, 0x25, 0x66, 0x25, + 0x70, 0x01, 0x50, 0x0a, 0x26, 0x26, 0x70, 0x01, 0x50, 0x0a, 0x27, 0x65, + 0x27, 0x70, 0x01, 0x50, 0x0a, 0x28, 0x28, 0x70, 0x01, 0x0e, 0x40, 0x0a, + 0xe0, 0x00, 0x0a, 0xbf, 0xe2, 0xb7, 0x7f, 0xff, 0x11, 0x70, 0x3c, 0x02, + 0x12, 0x43, 0x00, 0x00, 0x30, 0x01, 0x40, 0x0c, 0x50, 0x07, 0x00, 0x00, + 0xa2, 0x30, 0xeb, 0x30, 0xd0, 0x30, 0xcb, 0x30, 0x30, 0xa2, 0x30, 0x60, + 0x10, 0x05, 0xe0, 0x06, 0x41, 0x00, 0x6c, 0x00, 0x01, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x69, 0x20, 0x05, 0xac, 0x06, 0xd0, 0x7f, 0x65, 0x07, + 0x00, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x31, 0xff, 0x3f, 0x96, 0x00, + 0x14, 0x5c, 0xf4, 0x5d, 0x3c, 0x5c, 0x9a, 0x4e, 0x80, 0x06, 0x52, 0xff, + 0x4c, 0xc5, 0x14, 0xbc, 0xc8, 0xb2, 0x44, 0x6a, 0xc5, 0x06, 0x53, 0x7d, + 0xd3, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe2, 0x06, 0x83, 0xff, 0x10, 0x00, + 0x04, 0x3b, 0x04, 0x31, 0x04, 0x30, 0x04, 0x3d, 0x06, 0x04, 0x38, 0x04, + 0x4f, 0x04, 0x0e, 0xd4, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x00, 0x29, 0x00, + 0x01, 0x60, 0x06, 0x03, 0x01, 0x78, 0x00, 0x42, 0x09, 0x68, 0x3b, 0x00, + 0xaa, 0x30, 0xfc, 0x30, 0xb9, 0x30, 0xc8, 0x30, 0x40, 0xea, 0x06, 0x68, + 0x3d, 0x41, 0x00, 0x75, 0x00, 0x73, 0x00, 0x14, 0x74, 0x00, 0x72, 0x06, + 0x88, 0x3b, 0x75, 0x60, 0x7d, 0x63, 0x00, 0x55, 0x68, 0x06, 0x28, 0x3d, + 0xd6, 0x40, 0xfd, 0x65, 0x20, 0xff, 0x72, 0x28, 0xbb, 0xe0, 0x50, 0x85, + 0x0d, 0xf1, 0x7f, 0x06, 0xb1, 0xff, 0x65, 0x59, 0x30, 0x57, 0x29, 0x40, + 0x52, 0x06, 0x77, 0xb9, 0x00, 0x00, 0x24, 0xc6, 0xa4, 0xc2, 0x08, 0xb8, + 0xd2, 0xac, 0xb9, 0x06, 0x78, 0x3d, 0x4f, 0x00, 0x6f, 0xa2, 0x62, 0x81, + 0x6e, 0x43, 0x83, 0x6a, 0x00, 0x6b, 0x05, 0xcc, 0x44, 0xc1, 0x80, 0x06, + 0xe3, 0xff, 0x10, 0x04, 0x32, 0x04, 0x41, 0x04, 0x42, 0x38, 0x04, 0x40, + 0x06, 0x88, 0x3b, 0x0e, 0xd3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x03, + 0x05, 0x00, 0x2a, 0x03, 0x04, 0x01, 0x01, 0x2c, 0x05, 0x01, 0x0d, 0x03, + 0x01, 0x01, 0x01, 0x68, 0x48, 0x00, 0xcf, 0xff, 0x43, 0x78, 0x65, 0x06, + 0xd9, 0x30, 0xeb, 0x30, 0xae, 0x28, 0x3f, 0x06, 0x7c, 0xf7, 0x42, 0x88, + 0x2f, 0xed, 0x6c, 0x00, 0x67, 0x2f, 0xf5, 0x75, 0x00, 0x6d, 0xbe, 0x06, + 0xc0, 0x7f, 0x71, 0x28, 0xc5, 0x06, 0x18, 0x3b, 0x90, 0xff, 0x35, 0xbd, + 0x06, 0xb1, 0x7f, 0x6f, 0xa8, 0x06, 0x61, 0xff, 0xe9, 0x61, 0xff, 0x63, + 0x06, 0x4e, 0x77, 0xd4, 0x6b, 0x29, 0x30, 0x52, 0xf6, 0x06, 0x1a, 0x32, + 0x8f, 0xff, 0xa8, 0xbc, 0x30, 0xae, 0x68, 0xd0, 0x06, 0x68, 0x37, 0xd3, + 0x7f, 0xeb, 0x0e, 0x41, 0xff, 0x11, 0x04, 0x35, 0x03, 0x04, 0x3b, 0x04, + 0x4c, 0x04, 0x33, 0x06, 0x68, 0x3b, 0x07, 0x94, 0xff, 0x80, 0x10, 0x0e, + 0x50, 0x7f, 0x02, 0x05, 0x07, 0x04, 0x05, 0x06, 0x02, 0x00, 0x02, 0x04, + 0x07, 0x05, 0x05, 0x02, 0x02, 0x02, 0x50, 0x02, 0x01, 0x2f, 0xff, 0x44, + 0x78, 0x3b, 0xdc, 0x30, 0xb9, 0x30, 0x01, 0xcb, 0x30, 0xa2, 0x30, 0xfb, + 0x30, 0xd8, 0x28, 0x45, 0x00, 0xc4, 0x30, 0xa7, 0x30, 0xb4, 0x30, 0xd3, + 0x30, 0x55, 0xca, 0x05, 0x88, 0x4b, 0x42, 0x4c, 0xf7, 0x6e, 0x4e, 0xf5, + 0x20, 0x2e, 0xf9, 0x15, 0x6e, 0x00, 0x64, 0x20, 0x07, 0x48, 0x4f, 0x89, + 0x7a, 0x2f, 0x8f, 0x56, 0x67, 0x2d, 0x17, 0x76, 0x2f, 0x8f, 0x6e, 0x04, + 0x6f, 0x15, 0x90, 0x7f, 0x65, 0x2e, 0x00, 0x2d, 0x80, 0x77, 0xe9, 0xa0, + 0x77, 0x04, 0xd8, 0x4f, 0xb0, 0x7f, 0x6e, 0xd8, 0xa0, 0x81, 0x50, 0xf9, + 0x77, 0x04, 0xa0, 0xf9, 0x00, 0x11, 0x7f, 0x2d, 0x00, 0x45, 0xf0, 0x05, + 0x61, 0x75, 0x00, 0x70, 0x7f, 0x05, 0x91, 0xf7, 0x7f, 0xff, 0xe2, 0x6c, + 0xaf, 0x65, 0x00, 0x3c, 0x5c, 0x9a, 0x4e, 0x8c, 0x54, 0xd1, 0x9e, 0x00, + 0x5e, 0x58, 0xe5, 0x54, 0xf4, 0x7e, 0xa3, 0x90, 0x80, 0x05, 0xbf, 0xff, + 0xf4, 0xbc, 0xa4, 0xc2, 0xc8, 0xb2, 0x44, 0x00, 0xc5, 0xe4, 0xd5, 0x74, + 0xb9, 0xb4, 0xcc, 0xe0, 0x06, 0xac, 0x44, 0xbe, 0x98, 0xb0, 0x05, 0xdb, + 0xbb, 0x73, 0x7f, 0xeb, 0xf4, 0x23, 0x7f, 0x3a, 0xbf, 0x05, 0xb3, 0x7d, + 0x3c, 0x3b, 0xf3, 0x06, 0xc1, 0xff, 0x11, 0x04, 0x04, 0x3e, 0x04, 0x41, + 0x04, 0x3d, 0x48, 0x39, 0x20, 0x00, 0x51, 0x38, 0x20, 0x03, 0x13, 0x28, + 0x4d, 0x40, 0x04, 0x46, 0x28, 0x53, 0x51, 0x33, 0x20, 0x1b, 0x32, 0x28, + 0x53, 0x3d, 0x04, 0x30, 0x04, 0x88, 0x55, 0xc0, 0x07, 0x94, 0xff, 0x10, + 0x0e, 0x50, 0x7f, 0x03, 0x06, 0x08, 0x05, 0x06, 0x07, 0x00, 0x03, 0x03, + 0x05, 0x08, 0x07, 0x06, 0x03, 0x03, 0x64, 0x03, 0x78, 0x16, 0x00, 0xbf, + 0xff, 0x45, 0x01, 0x88, 0x3b, 0xc4, 0x30, 0x6b, 0xef, 0x05, 0xa8, 0x2b, + 0x00, 0x38, 0x3b, 0x74, 0x28, 0x3d, 0x77, 0x48, 0x37, 0x06, 0x1e, 0x79, + 0xa0, 0x07, 0x70, 0x7f, 0x75, 0x10, 0x06, 0x60, 0xff, 0x5a, 0x53, 0x28, + 0x83, 0xe6, 0x10, 0x74, 0xb3, 0x7e, 0x06, 0x7f, 0xf9, 0xf4, 0xbc, 0x20, + 0xce, 0x3a, 0x40, 0xc6, 0x05, 0xd8, 0x2f, 0x0f, 0xb2, 0xff, 0x38, 0x3b, + 0x42, 0x28, 0x3d, 0x32, 0xf0, 0x28, 0x1f, 0x04, 0xb8, 0x23, 0x10, 0x00, + 0xf4, 0xff, 0x10, 0x06, 0x70, 0xff, 0x04, 0x07, 0x09, 0x06, 0x00, 0x07, + 0x08, 0x04, 0x04, 0x06, 0x09, 0x08, 0x07, 0x12, 0x04, 0x04, 0x04, 0x01, + 0x3b, 0x23, 0x46, 0x1c, 0x6f, 0xff, 0xd6, 0x00, 0x30, 0xeb, 0x30, 0xac, + 0x30, 0xea, 0x30, 0xa2, 0xab, 0x06, 0x68, 0x3d, 0x42, 0x27, 0x35, 0x6c, + 0x2f, 0xe5, 0x61, 0x2f, 0xef, 0x3e, 0xfb, 0xac, 0x06, 0xd0, 0x7f, 0x65, + 0x07, 0x00, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, 0x1a, 0x3b, 0xdd, 0x4f, + 0x02, 0xa0, 0x52, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x7b, 0x3b, 0x88, 0x01, + 0xbd, 0x00, 0xac, 0xac, 0xb9, 0x44, 0xc5, 0x06, 0x9b, 0xbb, 0xb6, 0xb3, + 0x7f, 0x6a, 0x06, 0x03, 0x01, 0x73, 0xff, 0xe1, 0x06, 0x63, 0xff, 0x38, + 0x3b, 0x3b, 0x20, 0x04, 0x33, 0x28, 0x39, 0x40, 0x04, 0x38, 0x04, 0x4f, + 0xe0, 0x06, 0x28, 0x3b, 0x0e, 0xd3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x05, + 0x08, 0x0a, 0x07, 0x08, 0x00, 0x09, 0x05, 0x05, 0x07, 0x0a, 0x06, 0x08, + 0x05, 0x12, 0x05, 0x05, 0x05, 0x01, 0x2f, 0xff, 0x47, 0x15, 0x6f, 0xff, + 0xaf, 0x2a, 0x30, 0xed, 0x28, 0x37, 0xc1, 0x06, 0x88, 0x3b, 0x43, 0x28, + 0x33, 0x6f, 0xb8, 0x2f, 0xf3, 0x74, 0x06, 0x48, 0x39, 0xd0, 0x7f, 0x06, + 0x18, 0x39, 0x00, 0x00, 0x4b, 0xea, 0xc0, 0x7f, 0x05, 0xf8, 0x39, 0x91, + 0x7f, 0x7a, 0x06, 0xe1, 0x7f, 0x63, 0x06, 0x61, 0xff, 0x4b, 0x04, 0x51, + 0x57, 0x7f, 0x30, 0x57, 0x06, 0x98, 0x3b, 0x6c, 0xd0, 0x03, 0x5c, 0xb8, + 0x44, 0xc5, 0xf0, 0xd2, 0x06, 0x78, 0x3d, 0xb2, 0x7f, 0x54, 0xeb, 0x06, + 0x83, 0xff, 0xe1, 0x06, 0x81, 0xff, 0x25, 0x28, 0x3b, 0x40, 0x04, 0x5c, + 0x32, 0x28, 0x3b, 0x42, 0x06, 0x48, 0x3b, 0x07, 0xb4, 0xff, 0x10, 0x0e, + 0x30, 0x7f, 0x06, 0x0a, 0x00, 0x0c, 0x18, 0x0b, 0x0c, 0x06, 0x06, 0x19, + 0x0d, 0x02, 0x3a, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x01, 0x2f, 0xff, 0x48, + 0x45, 0x01, 0x6f, 0xff, 0xad, 0x30, 0xd7, 0x28, 0x3d, 0xb9, 0x06, 0x68, + 0x39, 0x88, 0x38, 0x3b, 0x79, 0x00, 0x70, 0x2f, 0xf3, 0x75, 0x00, 0x73, + 0xb1, 0x06, 0x68, 0xbb, 0x68, 0x60, 0x81, 0x06, 0x38, 0x39, 0x00, 0x00, + 0x5a, 0x40, 0xff, 0x75, 0x65, 0x2f, 0xf5, 0x06, 0x18, 0x37, 0x59, 0xbb, + 0x69, 0x41, 0x7f, 0x6f, 0x06, 0x81, 0xff, 0x60, 0x68, 0x60, 0x81, 0x06, + 0x51, 0x7f, 0x5e, 0x58, 0x66, 0x6d, 0xef, 0x30, 0x8d, 0xaf, 0x06, 0x51, + 0xfc, 0x2f, 0xff, 0xa4, 0xd0, 0x04, 0xd5, 0x0d, 0x5c, 0xb8, 0xa4, 0xc2, + 0x0e, 0xb3, 0x7f, 0x06, 0xb1, 0xff, 0x1a, 0x28, 0x31, 0x70, 0x3f, 0x28, + 0x3d, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x07, 0x0b, 0x0b, 0x42, + 0x01, 0x0a, 0x0b, 0x07, 0x07, 0x08, 0x0c, 0x1a, 0x20, 0x05, 0x24, 0x07, + 0x07, 0x01, 0x2f, 0xff, 0x49, 0x0e, 0x6f, 0xff, 0xc1, 0x30, 0x1a, 0xa7, + 0x30, 0xb3, 0x06, 0x88, 0x39, 0x3f, 0xf7, 0x7a, 0x2f, 0xef, 0x63, 0x8a, + 0x27, 0xc1, 0x20, 0x00, 0x52, 0x2f, 0xf9, 0x70, 0x28, 0x45, 0x62, 0x28, + 0x00, 0x6c, 0x2f, 0x85, 0x63, 0x05, 0x4f, 0xff, 0x52, 0x00, 0xe9, 0xaa, + 0xa0, 0x73, 0x71, 0x28, 0xc3, 0x65, 0x20, 0x89, 0x74, 0x40, 0x91, 0xe8, + 0xdd, 0x60, 0x0f, 0x04, 0xbf, 0xff, 0x54, 0x29, 0x33, 0x30, 0xfd, 0x51, + 0x03, 0x69, 0x80, 0x0d, 0xba, 0xf1, 0x0d, 0x6b, 0x04, 0x80, 0xff, 0x71, + 0x73, 0x71, 0x75, 0x61, 0x21, 0x89, 0x43, 0xee, 0x41, 0x93, 0x05, 0x3e, + 0x07, 0x51, 0xf3, 0xfa, 0xe0, 0x7d, 0x51, 0x0f, 0x05, 0x3e, 0x87, 0x77, + 0x00, 0x63, 0x4b, 0x51, 0x71, 0x51, 0x8c, 0x54, 0xfd, 0x43, 0x56, 0x06, + 0x5f, 0xf7, 0xb4, 0xcc, 0x54, 0xcf, 0x06, 0x93, 0x7d, 0x52, 0x7f, 0x58, + 0x6a, 0x82, 0x7d, 0xeb, 0x06, 0x0f, 0xf9, 0x06, 0xf1, 0xff, 0x27, 0x04, + 0x35, 0x00, 0x04, 0x48, 0x04, 0x41, 0x04, 0x3a, 0x04, 0x30, 0x02, 0x04, + 0x4f, 0x04, 0x20, 0x00, 0x20, 0x20, 0x0f, 0x41, 0x83, 0x28, 0x4d, 0x43, + 0x04, 0x31, 0x04, 0x3b, 0x28, 0x57, 0x30, 0x17, 0xc0, 0x0c, 0xb4, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x0c, 0x31, 0x3d, 0x30, 0x33, 0x00, 0x08, + 0x08, 0x3a, 0x35, 0x3d, 0x0c, 0x08, 0x08, 0x28, 0x08, 0x08, 0x01, 0x2f, + 0xff, 0x4a, 0x78, 0x60, 0xc7, 0x30, 0xf3, 0x02, 0x30, 0xde, 0x30, 0xfc, + 0x30, 0xaf, 0x06, 0x68, 0x3f, 0x44, 0x8a, 0x2f, 0xef, 0x6e, 0x00, 0x6d, + 0x26, 0xb1, 0x72, 0x27, 0x1f, 0x20, 0x08, 0x00, 0x28, 0x00, 0x4b, 0x2f, + 0x09, 0x6e, 0x00, 0x67, 0x28, 0x00, 0x64, 0x2f, 0x0b, 0x6d, 0x28, 0x51, + 0x6f, 0x00, 0x66, 0x2a, 0x00, 0x29, 0x04, 0xa0, 0x7f, 0x61, 0x2f, 0xf1, + 0x65, 0xc0, 0x81, 0x52, 0xab, 0x2f, 0x85, 0x79, 0x27, 0x43, 0x75, 0x20, + 0x97, 0x65, 0x04, 0xa0, 0x7b, 0x50, 0xff, 0x45, 0xe4, 0x00, 0x00, 0x7f, + 0x4b, 0x00, 0xf6, 0x21, 0x13, 0x69, 0x21, 0x03, 0xdb, 0x3f, 0x8d, 0x39, + 0x45, 0x68, 0x04, 0x81, 0x01, 0x50, 0xff, 0x69, 0x61, 0x81, 0x58, 0x39, + 0xaa, 0x31, 0x01, 0x65, 0x21, 0x81, 0x6e, 0x21, 0x81, 0x20, 0x21, 0x87, + 0x69, 0xda, 0x04, 0xc1, 0x7f, 0x31, 0xed, 0x61, 0x00, 0x20, 0x7f, 0x32, + 0x05, 0x6f, 0x04, 0xe1, 0x7d, 0x00, 0x04, 0x00, 0x39, 0x4e, 0xa6, 0x9e, + 0x06, 0xb7, 0xbb, 0x74, 0xb3, 0x0f, 0xc8, 0xb9, 0x6c, 0xd0, 0x06, 0x9b, + 0xbb, 0x53, 0x7f, 0x92, 0xff, 0x33, 0x8d, 0xb5, 0x33, 0x85, 0x6b, 0x23, + 0x7d, 0x32, 0x83, 0x6e, 0x2a, 0xb5, 0x72, 0x2b, 0xc9, 0x75, 0x6a, 0x2a, + 0xbd, 0x04, 0x33, 0x85, 0x06, 0xf1, 0xff, 0x14, 0x28, 0x33, 0x3d, 0x28, + 0x23, 0x80, 0x38, 0x37, 0x28, 0x00, 0x1a, 0x04, 0x3e, 0x04, 0x40, 0xaa, + 0x20, 0x03, 0x3b, 0x28, 0x51, 0x32, 0x28, 0x51, 0x42, 0x20, 0x05, 0x3e, + 0x70, 0x04, 0x04, 0xb4, 0x01, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, + 0x09, 0x0d, 0x0d, 0x08, 0x01, 0x0c, 0x0d, 0x09, 0x09, 0x09, 0x0e, 0x10, + 0x30, 0x05, 0x48, 0x09, 0x01, 0x2f, 0xff, 0x4b, 0x01, 0x6f, 0xff, 0xa8, + 0x30, 0xb9, 0x02, 0x30, 0xc8, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x68, 0x3b, + 0x45, 0xba, 0x2f, 0x77, 0x74, 0x64, 0xa7, 0x05, 0x3e, 0xe7, 0x00, 0xb0, + 0x7f, 0x65, 0x06, 0x80, 0xff, 0x6c, 0xb0, 0x48, 0xc1, 0x64, 0x0e, 0xe1, + 0x7f, 0x06, 0x31, 0xff, 0x31, 0x72, 0x99, 0x6c, 0x08, 0x3c, 0x5c, 0x9a, + 0x4e, 0x06, 0x7f, 0xfb, 0xd0, 0xc5, 0xa4, 0x01, 0xc2, 0xa0, 0xd1, 0xc8, + 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0xab, 0x06, 0xf2, 0x7f, 0xf3, 0x06, + 0x83, 0xff, 0x2d, 0x48, 0x21, 0x3e, 0x68, 0x3f, 0x10, 0x06, 0x13, 0x7f, + 0x80, 0x10, 0x06, 0xf0, 0xff, 0x0a, 0x10, 0x11, 0x0c, 0x0e, 0x12, 0x0a, + 0x00, 0x0a, 0x0d, 0x14, 0x41, 0x10, 0x0a, 0x0a, 0x0a, 0x48, 0x0a, 0x01, + 0x2f, 0xff, 0x4c, 0x14, 0x6f, 0xff, 0xd5, 0x30, 0xa3, 0x0a, 0x30, 0xf3, + 0x30, 0xe9, 0x20, 0x03, 0xc9, 0x06, 0x48, 0x3d, 0x46, 0xff, 0x4e, 0x77, + 0x06, 0x97, 0x3b, 0xd0, 0x7f, 0x06, 0x18, 0x3d, 0x50, 0xff, 0x06, 0x91, + 0x01, 0xd1, 0x7f, 0x06, 0x19, 0xbf, 0x84, 0x06, 0xf0, 0x7f, 0xac, 0x82, + 0x70, 0x51, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x03, 0x40, 0xd5, 0x80, 0xb7, + 0xdc, 0xb4, 0x06, 0x90, 0x81, 0x07, 0x73, 0x7f, 0x51, 0xe2, 0x06, 0x62, + 0x7f, 0x24, 0x28, 0x33, 0x3d, 0x04, 0x3b, 0x28, 0x37, 0x1c, 0x3d, 0x04, + 0x34, 0x06, 0x28, 0x3f, 0x07, 0xd4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x0b, + 0x11, 0x00, 0x12, 0x0d, 0x0f, 0x13, 0x0b, 0x0b, 0x0e, 0x15, 0x02, 0x38, + 0x11, 0x0b, 0x0b, 0x0b, 0x0b, 0x01, 0x2f, 0xff, 0x4d, 0x6d, 0x1a, 0x88, + 0x3b, 0x38, 0x37, 0xb9, 0x06, 0x48, 0x37, 0x58, 0x3b, 0x72, 0x4f, 0x73, + 0x6a, 0x63, 0x06, 0x4f, 0xf5, 0x07, 0x90, 0x7f, 0x6b, 0x21, 0x07, 0x65, + 0x2f, 0xfb, 0x63, 0x38, 0x00, 0x68, 0x06, 0x61, 0x7f, 0x06, 0x5f, 0xf7, + 0x06, 0xf0, 0x7f, 0xd5, 0x6c, 0xfd, 0x40, 0x56, 0x06, 0xb8, 0x3b, 0x04, + 0xd5, 0x91, 0xb7, 0xa4, 0xc2, 0xc6, 0x06, 0xb8, 0x3b, 0x92, 0x7f, 0x69, + 0x00, 0x6a, 0x22, 0x87, 0x06, 0x53, 0xff, 0xe7, 0xc5, 0x06, 0x4f, 0x75, + 0x38, 0x3b, 0x40, 0x04, 0x30, 0x28, 0x3d, 0x46, 0x06, 0x28, 0x37, 0xc0, + 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x70, 0xff, 0x0c, 0x12, 0x13, 0x0e, 0x10, + 0x14, 0x00, 0x0c, 0x0c, 0x0f, 0x16, 0x39, 0x12, 0x0c, 0x0c, 0x24, 0x0c, + 0x0c, 0x01, 0x2f, 0xff, 0x4e, 0x10, 0x6f, 0xff, 0xc9, 0x30, 0x11, 0xa4, + 0x30, 0xc4, 0x06, 0x88, 0x39, 0x00, 0x00, 0x47, 0x2f, 0xeb, 0x15, 0x72, + 0x00, 0x6d, 0x4f, 0xf7, 0x79, 0x06, 0x2e, 0x00, 0x41, 0x2f, 0xf1, 0x6d, + 0x6c, 0x28, 0xb7, 0x30, 0x81, 0x67, 0x2f, 0xff, 0x05, 0xf8, 0xc1, 0x44, + 0x29, 0x33, 0x07, 0x75, 0x00, 0x74, 0x00, 0x73, 0x48, 0x35, 0x06, 0x1d, + 0xff, 0xb1, 0x7f, 0xf2, 0x06, 0x38, 0x3d, 0x31, 0x7f, 0x51, 0x7d, 0x06, + 0x50, 0x7f, 0xb7, 0x5f, 0x06, 0xd8, 0x3b, 0xc5, 0x15, 0xb3, 0x7c, 0xc7, + 0x06, 0xb8, 0xbb, 0x44, 0x22, 0x7d, 0x69, 0x42, 0x7f, 0xd1, 0x06, 0x5e, + 0xfb, 0xb1, 0xff, 0x68, 0x06, 0x2a, 0xbd, 0x13, 0x04, 0x35, 0x28, 0x3d, + 0x78, 0x3c, 0x48, 0x3f, 0x06, 0x38, 0x3d, 0x06, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x0d, 0x13, 0x02, 0x00, 0x09, 0x11, 0x01, 0x0d, 0x0d, 0x0b, + 0x02, 0x0c, 0x05, 0x13, 0x0d, 0x0d, 0x0d, 0x0d, 0x01, 0x2f, 0xff, 0x4f, + 0x70, 0x24, 0x01, 0xae, 0x30, 0xea, 0x30, 0xb7, 0x30, 0xe3, 0x06, 0x88, + 0x3d, 0x5b, 0x47, 0x4f, 0x6f, 0x65, 0x06, 0x8f, 0xf7, 0x30, 0x7f, 0xe8, + 0x06, 0x8b, 0xf5, 0x50, 0xff, 0x57, 0x69, 0x40, 0xff, 0x68, 0x2c, 0x79, + 0x6e, 0x06, 0x08, 0x3d, 0x51, 0x7f, 0x06, 0x7f, 0xf5, 0x84, 0x07, 0x10, + 0x7f, 0x0c, 0x5e, 0x4a, 0x81, 0x06, 0xb8, 0x3b, 0xf8, 0xad, 0x0d, 0xac, + 0xb9, 0xa4, 0xc2, 0x06, 0xbb, 0xbb, 0x52, 0x7f, 0x6b, 0x06, 0x42, 0x7d, + 0xa8, 0x53, 0xff, 0xe9, 0x06, 0xa2, 0x7f, 0x13, 0x28, 0x39, 0x35, 0x04, + 0x46, 0xe0, 0x06, 0x48, 0x37, 0x07, 0x74, 0xff, 0x10, 0x0e, 0xb0, 0x7f, + 0x0e, 0x15, 0x15, 0x10, 0x14, 0x00, 0x16, 0x0e, 0x0e, 0x11, 0x18, 0x0f, + 0x15, 0x0e, 0x12, 0x0e, 0x0e, 0x0e, 0x01, 0x2f, 0xff, 0x50, 0x14, 0x6f, + 0xff, 0xcf, 0x0a, 0x30, 0xf3, 0x30, 0xac, 0x28, 0x3f, 0xfc, 0x06, 0x68, + 0x3d, 0x48, 0xac, 0x2f, 0x75, 0x6e, 0x2f, 0xf1, 0x61, 0x2e, 0xfd, 0x06, + 0x3b, 0x77, 0x48, 0x00, 0x75, 0x6f, 0x40, 0x7f, 0x57, 0xc1, 0x06, 0x1e, + 0x81, 0x55, 0x80, 0xfd, 0x6e, 0x06, 0x4e, 0xfe, 0xf8, 0x50, 0x7f, 0x38, + 0xb7, 0x38, 0xc3, 0x06, 0x1f, 0xf7, 0x71, 0xff, 0x72, 0x00, 0xed, 0x81, + 0x06, 0x48, 0xbd, 0x08, 0x53, 0x59, 0x72, 0x29, 0x52, 0x06, 0x9f, 0xf9, + 0x03, 0xdd, 0xd5, 0x00, 0xac, 0xac, 0xb9, 0x06, 0x98, 0xbd, 0x72, 0xff, + 0x8e, 0x33, 0x7f, 0x69, 0x00, 0x6a, 0x06, 0x0b, 0xc1, 0x91, 0xff, 0x06, + 0x5a, 0xbd, 0x12, 0x8f, 0x28, 0x39, 0x3d, 0x04, 0x33, 0x28, 0x41, 0x06, + 0x58, 0x3d, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x0f, 0x17, + 0x17, 0x3f, 0x3f, 0x18, 0x0f, 0x0f, 0x00, 0x13, 0x1a, 0x0b, 0x17, 0x0f, + 0x0f, 0x0f, 0x0f, 0x90, 0x01, 0x2f, 0xff, 0x51, 0x01, 0x6f, 0xff, 0xa2, + 0x30, 0xa4, 0x30, 0x15, 0xb9, 0x30, 0xe9, 0x28, 0x41, 0xc9, 0x06, 0x48, + 0x3d, 0x49, 0x4f, 0xf3, 0xdf, 0x06, 0x1c, 0xef, 0x90, 0x7f, 0x73, 0x8f, + 0xeb, 0x06, 0x3b, 0xf9, 0xb0, 0x7f, 0x06, 0x51, 0x7f, 0x90, 0xff, 0xe1, + 0x06, 0x3f, 0xf9, 0xb1, 0x7f, 0x06, 0x3e, 0x7b, 0xb0, 0x51, 0x9b, 0x5c, + 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x00, 0x44, 0xc5, 0x74, 0xc7, 0xac, 0xc2, + 0x08, 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0x5b, 0xbb, 0x49, 0x00, 0x4a, 0xd0, + 0x06, 0xc2, 0x81, 0x53, 0x7f, 0xe2, 0x06, 0x81, 0xff, 0x18, 0x04, 0x41, + 0x04, 0x17, 0x3b, 0x04, 0x30, 0x28, 0x3f, 0x34, 0x06, 0x48, 0x3d, 0x07, + 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x10, 0x18, 0x1b, 0x14, 0x18, + 0x1c, 0x10, 0x10, 0x00, 0x15, 0x1e, 0x17, 0x18, 0x10, 0x10, 0x10, 0x10, + 0x95, 0x01, 0x2f, 0xff, 0x52, 0x1a, 0xa8, 0x3b, 0xeb, 0x06, 0xc8, 0x3b, + 0x72, 0x06, 0xe8, 0x3b, 0x7c, 0x72, 0x06, 0xe8, 0x3b, 0x90, 0x7f, 0x06, + 0x71, 0x7f, 0x06, 0xd8, 0x3b, 0x06, 0xd0, 0x7f, 0x31, 0x72, 0x08, 0x14, + 0x5c, 0x70, 0x51, 0x06, 0xb8, 0x3b, 0x7c, 0xc7, 0x9c, 0xd8, 0x06, 0x88, + 0x39, 0x3b, 0xbb, 0x65, 0x06, 0xc2, 0x81, 0x06, 0xf2, 0x7f, 0x18, 0x04, + 0x40, 0xe0, 0x06, 0xe8, 0x3b, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xb0, 0x7f, + 0x11, 0x1a, 0x1a, 0x13, 0x17, 0x02, 0x1a, 0x11, 0x11, 0x14, 0x1d, 0x16, + 0x20, 0x05, 0x11, 0x48, 0x11, 0x01, 0x2f, 0xff, 0x53, 0x14, 0x6f, 0xff, + 0xa4, 0x30, 0xbf, 0x0d, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x48, 0x37, 0x5f, + 0xf7, 0x74, 0x2f, 0xf5, 0x16, 0x6c, 0x00, 0x79, 0x06, 0xe0, 0x7f, 0x69, + 0x06, 0x48, 0x39, 0xd0, 0x7f, 0x6e, 0xe0, 0x06, 0xc0, 0xff, 0x06, 0x38, + 0x39, 0x07, 0x10, 0x7f, 0x0f, 0x61, 0x27, 0x59, 0x29, 0x40, 0x52, 0x06, + 0x98, 0x3b, 0x74, 0xc7, 0xc8, 0xd0, 0xac, 0xb9, 0x22, 0x44, 0xc5, 0x06, + 0xf3, 0x7f, 0x69, 0x00, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x8b, 0x06, 0xa2, + 0x7f, 0x18, 0x04, 0x42, 0x28, 0x39, 0x3b, 0x06, 0x48, 0x37, 0x07, 0xb4, + 0xff, 0x80, 0x10, 0x0e, 0x70, 0x7f, 0x12, 0x1c, 0x1c, 0x16, 0x1a, 0x1d, + 0x12, 0x00, 0x12, 0x17, 0x1f, 0x19, 0x1c, 0x12, 0x12, 0x12, 0x48, 0x12, + 0x01, 0x2f, 0xff, 0x54, 0x01, 0x6f, 0xff, 0xe9, 0x30, 0xc8, 0x28, 0x30, + 0xd3, 0x06, 0xa8, 0x3b, 0x4c, 0x2f, 0xf3, 0x74, 0x00, 0x76, 0xab, 0x06, + 0x86, 0xbb, 0x4c, 0x2d, 0x77, 0x74, 0x28, 0xbf, 0x6f, 0x2f, 0xf9, 0x06, + 0x38, 0x3f, 0xfc, 0x70, 0x7f, 0x06, 0x7d, 0xf9, 0xd0, 0xff, 0x06, 0x1f, + 0xf9, 0x51, 0x7f, 0x06, 0x70, 0x7d, 0x00, 0x00, 0x00, 0xc9, 0x62, 0x31, + 0x81, 0xf4, 0x7e, 0x9a, 0x4e, 0x81, 0x06, 0x7f, 0xf7, 0x7c, 0xb7, 0xb8, + 0xd2, 0x44, 0xbe, 0x06, 0x98, 0x3b, 0xea, 0x52, 0xff, 0x06, 0x9e, 0xf7, + 0x53, 0x7f, 0xf3, 0x06, 0x81, 0xff, 0x1b, 0x28, 0x39, 0x42, 0x38, 0x04, + 0x32, 0x06, 0x88, 0x3b, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x13, + 0x1e, 0x1f, 0x00, 0x1a, 0x1d, 0x20, 0x13, 0x13, 0x1b, 0x22, 0x1b, 0x04, + 0x1e, 0x13, 0x13, 0x13, 0x13, 0x01, 0x2f, 0xff, 0x55, 0x0a, 0x8e, 0x6f, + 0xff, 0xec, 0x30, 0xbd, 0x28, 0x3d, 0x06, 0x9d, 0x77, 0x37, 0xbb, 0x73, + 0x8e, 0x27, 0xb9, 0x74, 0x00, 0x68, 0x27, 0xbf, 0x10, 0x0e, 0xb0, 0x7f, + 0x06, 0x31, 0xfd, 0x00, 0x01, 0x00, 0xb1, 0x83, 0x22, 0x7d, 0x58, 0x62, + 0x06, 0x92, 0xff, 0x03, 0x08, 0xb8, 0x8c, 0xc1, 0xa0, 0xd1, 0x0f, 0x33, + 0x7f, 0x06, 0x51, 0xff, 0x01, 0x1b, 0x04, 0x35, 0x04, 0x41, 0x04, 0x3e, + 0x28, 0x3f, 0x70, 0x3e, 0x06, 0x68, 0x3b, 0x10, 0x0f, 0x74, 0xff, 0x06, + 0x56, 0xff, 0x14, 0x1f, 0x1e, 0x19, 0x02, 0x1c, 0x1f, 0x14, 0x14, 0x1a, + 0x21, 0x30, 0x05, 0x14, 0x48, 0x14, 0x01, 0x2f, 0xff, 0x56, 0x01, 0x6f, + 0xff, 0xea, 0x30, 0xd2, 0x00, 0x30, 0xc6, 0x30, 0xf3, 0x30, 0xb7, 0x30, + 0xe5, 0x0e, 0x30, 0xbf, 0x30, 0xa4, 0x20, 0x09, 0x05, 0xff, 0xf7, 0x3f, + 0xed, 0x63, 0xad, 0x28, 0x39, 0x74, 0x2f, 0xf5, 0x6e, 0x28, 0x47, 0x30, + 0x07, 0x69, 0x2f, 0x83, 0x80, 0x10, 0x15, 0x50, 0x7f, 0x17, 0x52, 0x2f, + 0x65, 0x66, 0x65, 0xeb, 0x10, 0x58, 0x7b, 0x76, 0x06, 0x5f, 0xf9, 0xac, + 0xb9, 0x88, 0xd7, 0x00, 0x50, 0xd1, 0x88, 0xc2, 0xc0, 0xd0, 0x78, 0xc7, + 0xc1, 0x06, 0x5e, 0xf7, 0x0e, 0xd3, 0x7f, 0x1b, 0x04, 0x38, 0x04, 0x45, + 0x28, 0x39, 0x05, 0x35, 0x04, 0x3d, 0x04, 0x48, 0x40, 0x07, 0x39, 0x20, + 0x09, 0x80, 0x10, 0x1d, 0x94, 0xff, 0x15, 0x20, 0x20, 0x1b, 0x1e, 0x21, + 0x15, 0x00, 0x15, 0x1c, 0x23, 0x1e, 0x20, 0x15, 0x15, 0x15, 0x48, 0x15, + 0x01, 0x2f, 0xff, 0x57, 0x0a, 0x88, 0x3b, 0xc8, 0x30, 0xa2, 0x34, 0x30, + 0xcb, 0x20, 0x03, 0x06, 0x7c, 0xf7, 0x69, 0x4f, 0xf3, 0x75, 0x00, 0x5d, + 0x61, 0x28, 0x39, 0x69, 0x20, 0x05, 0x06, 0x30, 0x7f, 0x70, 0x7d, 0x65, + 0x06, 0x60, 0xff, 0x7c, 0x61, 0x20, 0xff, 0x39, 0x39, 0x06, 0x71, 0x7f, + 0x06, 0x71, 0x7d, 0x07, 0x10, 0x7f, 0xcb, 0x7a, 0x08, 0x76, 0x96, 0x9b, + 0x5b, 0x06, 0x9f, 0xf7, 0xac, 0xb9, 0x2c, 0x01, 0xd2, 0x44, 0xc5, 0xc8, + 0xb2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x5b, 0x6f, 0x23, 0x7f, 0x77, 0x06, + 0x42, 0x81, 0x73, 0x7f, 0xe2, 0x06, 0x62, 0x7f, 0x38, 0x3b, 0x07, 0x42, + 0x04, 0x32, 0x04, 0x30, 0x05, 0xa8, 0x2f, 0x08, 0x14, 0xff, 0x10, 0x0e, + 0x90, 0x7f, 0x00, 0x16, 0x21, 0x21, 0x1c, 0x1f, 0x22, 0x16, 0x16, 0x00, + 0x1d, 0x24, 0x1d, 0x21, 0x16, 0x16, 0x16, 0x16, 0x90, 0x01, 0x2f, 0xff, + 0x58, 0x01, 0x6f, 0xff, 0xeb, 0x30, 0xaf, 0x30, 0x03, 0xbb, 0x30, 0xf3, + 0x30, 0xd6, 0x30, 0x30, 0x09, 0x06, 0x3c, 0xf7, 0x11, 0x75, 0x00, 0x78, + 0x2f, 0xf9, 0x6d, 0x00, 0x62, 0x44, 0xc1, 0x1d, 0x72, 0x00, 0x67, 0x0e, + 0x80, 0x7f, 0x06, 0x10, 0xfd, 0x51, 0x7f, 0x73, 0x2f, 0xed, 0xb0, 0xb0, + 0x81, 0x6f, 0x06, 0xc0, 0xff, 0x05, 0xb0, 0x7d, 0x00, 0x00, 0x62, 0x53, + 0x08, 0xee, 0x68, 0x21, 0x58, 0x06, 0x98, 0x3b, 0xe9, 0xb8, 0x48, 0x01, + 0xc1, 0x80, 0xbd, 0x74, 0xb9, 0x6c, 0xd0, 0x06, 0x7b, 0xbb, 0xc0, 0x07, + 0x12, 0x7f, 0x06, 0xb1, 0xff, 0x1b, 0x04, 0x4e, 0x04, 0x3a, 0x04, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x07, 0x43, 0x04, 0x40, + 0x04, 0x33, 0x05, 0xc8, 0x45, 0x0f, 0xb4, 0xff, 0x10, 0x06, 0x30, 0xff, + 0x00, 0x17, 0x22, 0x22, 0x1d, 0x20, 0x23, 0x17, 0x17, 0x00, 0x1e, 0x25, + 0x1f, 0x22, 0x17, 0x17, 0x17, 0x17, 0xa0, 0x01, 0x2f, 0xff, 0x59, 0x78, + 0x3b, 0xde, 0x30, 0xb1, 0x30, 0xc9, 0x0d, 0x30, 0xcb, 0x30, 0xa2, 0x06, + 0x28, 0x37, 0x3f, 0xff, 0x4d, 0x2f, 0xf1, 0x58, 0x63, 0x2f, 0xef, 0x64, + 0x2c, 0xfb, 0x5e, 0xf9, 0x20, 0x00, 0x28, 0x28, 0x00, 0x52, 0x2f, 0x85, + 0x70, 0x2f, 0x8b, 0x62, 0x00, 0x6c, 0xa0, 0x2f, 0x97, 0x63, 0x20, 0x13, + 0x6f, 0x00, 0x66, 0x00, 0x29, 0xaa, 0x04, 0x80, 0x7f, 0xe9, 0x40, 0x7f, + 0x69, 0x2f, 0xf9, 0x65, 0x60, 0x7f, 0xe9, 0xad, 0xa0, 0x7f, 0x71, 0x2f, + 0x97, 0x65, 0x04, 0x40, 0x7d, 0x50, 0xff, 0x7a, 0xa0, 0xff, 0xde, 0x3d, + 0xfb, 0x00, 0x11, 0x01, 0x6b, 0x04, 0x60, 0x7d, 0x01, 0x11, 0x7f, 0x71, + 0x81, 0x31, 0x97, 0x64, 0xec, 0x2e, 0xa3, 0x03, 0xf1, 0x83, 0x00, 0xb1, + 0xff, 0xfa, 0xa0, 0x7d, 0x04, 0x70, 0xff, 0x6c, 0x9a, 0x08, 0x76, 0x51, + 0x7f, 0x98, 0x06, 0x98, 0x3b, 0xc8, 0xb9, 0x00, 0x00, 0xcf, 0xc4, 0xb3, + 0xc8, 0xb2, 0x44, 0xc5, 0x20, 0x01, 0x00, 0xf5, 0xac, 0x54, 0xd6, 0x6d, + 0xad, 0x06, 0xd3, 0x7f, 0x51, 0xeb, 0x06, 0x83, 0xff, 0xf3, 0x06, 0x41, + 0xff, 0x1c, 0x04, 0x30, 0x28, 0x3b, 0x00, 0x35, 0x04, 0x34, 0x04, 0x3e, + 0x04, 0x3d, 0x04, 0x0a, 0x38, 0x04, 0x4f, 0x04, 0x34, 0x7f, 0x20, 0x28, + 0x4b, 0x41, 0x22, 0x04, 0x3f, 0x28, 0x4b, 0x31, 0x04, 0x3b, 0x20, 0x15, + 0x3a, 0xf0, 0x20, 0x25, 0x04, 0x93, 0xff, 0x07, 0x14, 0xff, 0x10, 0x0e, + 0x90, 0x7f, 0x18, 0x23, 0x23, 0x21, 0x00, 0x21, 0x24, 0x18, 0x18, 0x1f, + 0x26, 0x21, 0x23, 0x0a, 0x18, 0x18, 0x18, 0x18, 0x01, 0x2f, 0xff, 0x5a, + 0x98, 0x3b, 0xeb, 0x31, 0x30, 0xbf, 0x06, 0x68, 0x37, 0x78, 0x3b, 0x6c, + 0x00, 0x74, 0x28, 0x41, 0xb0, 0x06, 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, + 0x0e, 0x70, 0x7f, 0x6c, 0x9a, 0x33, 0x80, 0x21, 0xd6, 0x4e, 0x06, 0x98, + 0x3b, 0xb0, 0xba, 0xc0, 0xd0, 0x06, 0x98, 0xb9, 0xc1, 0x0f, 0x12, 0x7f, + 0x38, 0x3b, 0x3b, 0x04, 0x4c, 0x04, 0x42, 0x28, 0x43, 0xc0, 0x10, 0x0e, + 0x33, 0xff, 0x0e, 0xf5, 0x7f, 0x19, 0x25, 0x25, 0x1f, 0x23, 0x26, 0x00, + 0x19, 0x19, 0x21, 0x28, 0x23, 0x25, 0x19, 0x19, 0x28, 0x19, 0x19, 0x01, + 0x2f, 0xff, 0x5b, 0x78, 0x3b, 0xe2, 0x30, 0xf3, 0x00, 0x30, 0xc6, 0x30, + 0xcd, 0x30, 0xb0, 0x30, 0xed, 0xb8, 0x06, 0x48, 0x41, 0x4d, 0x4f, 0x6f, + 0x37, 0xbb, 0x3f, 0xf3, 0x67, 0x00, 0x72, 0xd7, 0x2f, 0xff, 0x06, 0x30, + 0x7f, 0xe9, 0x2f, 0xf5, 0xe9, 0x06, 0xa0, 0x7f, 0x06, 0xf0, 0xff, 0x0e, + 0x70, 0x7f, 0x08, 0xd1, 0x9e, 0x71, 0x5c, 0x06, 0xb7, 0xbb, 0xac, 0xba, + 0x4c, 0x01, 0xd1, 0x24, 0xb1, 0xf8, 0xad, 0x5c, 0xb8, 0x06, 0x7b, 0xbb, + 0x80, 0x0e, 0xd2, 0x7f, 0x27, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3d, 0x08, + 0x04, 0x3e, 0x04, 0x33, 0x20, 0x03, 0x40, 0x04, 0x38, 0x38, 0x04, 0x4f, + 0x05, 0xc8, 0x43, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x1a, 0x28, + 0x28, 0x00, 0x23, 0x26, 0x29, 0x1a, 0x1a, 0x25, 0x2c, 0x3c, 0x05, 0x28, + 0x1a, 0x1a, 0x1a, 0x1a, 0x01, 0x2f, 0xff, 0x5c, 0x98, 0x3b, 0x41, 0xb6, + 0x28, 0x3d, 0xd3, 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x88, 0x3b, 0x40, 0x7a, + 0x2f, 0xfb, 0x6d, 0x00, 0x62, 0x00, 0x69, 0x00, 0x1a, 0x71, 0x00, 0x75, + 0x28, 0x45, 0x0d, 0xf0, 0x7f, 0x73, 0x80, 0xff, 0x6b, 0xb0, 0x06, 0xe1, + 0x7f, 0x63, 0x05, 0xe9, 0xb9, 0x07, 0x11, 0xff, 0xab, 0x83, 0x51, 0x68, + 0x08, 0xd4, 0x6b, 0x4b, 0x51, 0x06, 0x7f, 0xfb, 0xa8, 0xba, 0xa0, 0x06, + 0xc7, 0x44, 0xbe, 0x6c, 0xd0, 0x06, 0x78, 0xbf, 0x07, 0x33, 0x7f, 0xe7, + 0xa0, 0x06, 0xa3, 0xff, 0x1c, 0x28, 0x35, 0x37, 0x04, 0x30, 0x04, 0x3c, + 0x2e, 0x04, 0x31, 0x28, 0x37, 0x3a, 0x05, 0xc8, 0x37, 0x0f, 0x74, 0xff, + 0x10, 0x06, 0xb0, 0xff, 0x1b, 0x00, 0x29, 0x29, 0x24, 0x27, 0x2a, 0x1b, + 0x1b, 0x26, 0x01, 0x2a, 0x24, 0x29, 0x1b, 0x1b, 0x1b, 0x1b, 0x01, 0x2f, + 0xff, 0x45, 0x5d, 0x78, 0x3b, 0xca, 0x30, 0xdf, 0x28, 0x39, 0xa2, 0x06, + 0x48, 0x37, 0xab, 0x3f, 0xff, 0x4e, 0x48, 0x37, 0x69, 0x48, 0x39, 0x61, + 0x06, 0xe0, 0x7f, 0x05, 0xd8, 0xb5, 0xc0, 0x08, 0x10, 0xff, 0x0e, 0x30, + 0x7f, 0xb3, 0x7e, 0x73, 0x7c, 0xd4, 0x6b, 0x20, 0x9a, 0x4e, 0x06, 0x78, + 0x3b, 0x98, 0xb0, 0xf8, 0xbb, 0x44, 0x15, 0xbe, 0x44, 0xc5, 0x07, 0x33, + 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xed, 0x06, 0x83, 0xff, 0x57, 0x1d, 0x48, + 0x37, 0x38, 0x48, 0x39, 0x4f, 0x06, 0x08, 0x39, 0x10, 0x07, 0x13, 0xff, + 0x0e, 0xf5, 0x7f, 0x00, 0x1c, 0x2a, 0x2a, 0x25, 0x28, 0x2b, 0x1c, 0x1c, + 0x00, 0x27, 0x2d, 0x27, 0x2a, 0x1c, 0x1c, 0x1c, 0x1c, 0x90, 0x01, 0x2f, + 0xff, 0x5e, 0x0c, 0x6f, 0xff, 0xaa, 0x30, 0xe9, 0x30, 0x10, 0xf3, 0x30, + 0xc0, 0x06, 0xa8, 0x3b, 0x65, 0x00, 0x74, 0x00, 0x44, 0x68, 0x2f, 0xed, + 0x72, 0x00, 0x6c, 0x2f, 0xff, 0x6e, 0x00, 0x6a, 0x64, 0x2f, 0x87, 0x05, + 0x9f, 0xfa, 0x50, 0x2f, 0xf3, 0x79, 0x2f, 0xf9, 0x2d, 0x3d, 0x00, 0x42, + 0x2f, 0xfd, 0x05, 0xb0, 0x79, 0x79, 0x3b, 0x38, 0xb3, 0x64, 0xc0, 0xff, + 0xd1, 0x05, 0xbf, 0x79, 0x30, 0xff, 0x65, 0x21, 0x71, 0x69, 0x00, 0x20, + 0x61, 0x01, 0xdd, 0x30, 0x0b, 0x05, 0xd1, 0x7f, 0xed, 0x21, 0xf1, 0x30, + 0x83, 0x50, 0x81, 0x6a, 0x2f, 0x09, 0x86, 0x05, 0x92, 0x01, 0x77, 0x83, + 0x70, 0x51, 0x06, 0x7f, 0xf3, 0x3f, 0xff, 0x24, 0x01, 0xb1, 0x5c, 0xb3, + 0x80, 0xb7, 0xdc, 0xb4, 0x06, 0xb3, 0x7f, 0xe2, 0xd2, 0x7d, 0x05, 0xdf, + 0x79, 0x00, 0x11, 0xff, 0x69, 0x00, 0x78, 0x05, 0xa2, 0x01, 0x1d, 0x80, + 0x28, 0x37, 0x34, 0x04, 0x35, 0x04, 0x40, 0x04, 0x3b, 0xae, 0x28, 0x45, + 0x3d, 0x20, 0x0b, 0x4b, 0x05, 0xc8, 0x41, 0x06, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x1d, 0x00, 0x2b, 0x2e, 0x27, 0x2c, 0x2f, 0x1d, 0x1d, 0x28, + 0x01, 0x31, 0x29, 0x2b, 0x1d, 0x1d, 0x1d, 0x1d, 0x01, 0x2f, 0xff, 0x20, + 0x60, 0x14, 0x6f, 0xff, 0xce, 0x30, 0xeb, 0x30, 0xa6, 0x0a, 0x30, 0xa7, + 0x30, 0xfc, 0x06, 0x68, 0x3d, 0x4e, 0x26, 0x29, 0x72, 0x30, 0x00, 0x77, + 0x47, 0xc1, 0x06, 0x90, 0x7f, 0x76, 0x00, 0xe8, 0x00, 0x6b, 0x67, 0x05, + 0xc7, 0xb3, 0xf0, 0xff, 0x65, 0x40, 0x7f, 0x6e, 0x06, 0x80, 0xff, 0x30, + 0x7f, 0xd8, 0x06, 0x3f, 0xf9, 0x51, 0xff, 0x75, 0x40, 0xff, 0x06, 0x3e, + 0x77, 0x2a, 0x63, 0x01, 0x40, 0x5a, 0x06, 0xb8, 0x3b, 0x78, 0xb1, 0x74, + 0xb9, 0xe8, 0xc6, 0x2c, 0x74, 0xc7, 0x06, 0x9b, 0xbb, 0x6f, 0x06, 0xc2, + 0x81, 0x06, 0xf1, 0xff, 0x1d, 0x04, 0x55, 0x3e, 0x28, 0x37, 0x32, 0x28, + 0x3d, 0x33, 0x28, 0x45, 0x4f, 0x05, 0xc8, 0x37, 0xc0, 0x07, 0x94, 0xff, + 0x10, 0x0e, 0x90, 0x7f, 0x1e, 0x2e, 0x2c, 0x29, 0x2a, 0x2d, 0x00, 0x1e, + 0x1e, 0x2b, 0x2f, 0x2b, 0x2e, 0x1e, 0x1e, 0x25, 0x1e, 0x1e, 0x01, 0x2f, + 0xff, 0x61, 0x10, 0x6f, 0xff, 0xdd, 0x28, 0x35, 0x05, 0xe9, 0x30, 0xf3, + 0x30, 0xc9, 0x06, 0x68, 0x3b, 0x50, 0x2e, 0x65, 0xd7, 0x06, 0x5c, 0xf1, + 0xb0, 0x7f, 0x6f, 0x28, 0x39, 0x6e, 0x06, 0x48, 0x3b, 0x50, 0xff, 0x06, + 0x38, 0x35, 0xb0, 0xd0, 0xff, 0x6e, 0x06, 0x48, 0x39, 0x07, 0x10, 0x7f, + 0xe2, 0x6c, 0x70, 0x51, 0x81, 0x06, 0xb8, 0x3b, 0xf4, 0xd3, 0x80, 0xb7, + 0xdc, 0xb4, 0x06, 0x98, 0xbd, 0xa8, 0x07, 0x52, 0x7f, 0xf3, 0x06, 0x82, + 0x7f, 0x1f, 0x28, 0x3b, 0x3b, 0x04, 0x4c, 0x0e, 0x04, 0x48, 0x04, 0x30, + 0x06, 0x08, 0x37, 0x07, 0x94, 0xff, 0x10, 0x0e, 0x90, 0x7f, 0x1f, 0x00, + 0x2f, 0x2f, 0x2b, 0x2d, 0x30, 0x1f, 0x1f, 0x2d, 0x01, 0x32, 0x2c, 0x2f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x01, 0x2f, 0xff, 0x20, 0x62, 0x14, 0x88, 0x3b, + 0xeb, 0x30, 0xc8, 0x30, 0xac, 0xc6, 0x20, 0x05, 0x06, 0x98, 0x3b, 0x72, + 0x00, 0x74, 0x2e, 0x79, 0x3e, 0x77, 0x6c, 0xf8, 0x10, 0x06, 0x80, 0x7f, + 0x39, 0x3d, 0x31, 0x7f, 0x39, 0x47, 0x0d, 0xb1, 0xff, 0x61, 0x84, 0x04, + 0x10, 0x84, 0x59, 0x72, 0x06, 0x98, 0x3d, 0xec, 0xd3, 0x74, 0xb9, 0x0e, + 0x2c, 0xd2, 0x08, 0xac, 0x06, 0xb8, 0x3b, 0x0e, 0xb3, 0x7f, 0x38, 0x3b, + 0x40, 0x02, 0x04, 0x42, 0x04, 0x43, 0x04, 0x33, 0x28, 0x3d, 0x3b, 0x0e, + 0x04, 0x38, 0x04, 0x4f, 0x05, 0xc8, 0x43, 0x10, 0x07, 0x74, 0xff, 0x0e, + 0x76, 0x7f, 0x20, 0x00, 0x30, 0x30, 0x2c, 0x2e, 0x31, 0x20, 0x20, 0x2e, + 0x01, 0x33, 0x2d, 0x30, 0x20, 0x20, 0x20, 0x20, 0x01, 0x2f, 0xff, 0x20, + 0x63, 0x2a, 0x6f, 0xff, 0xeb, 0x30, 0xfc, 0x30, 0xde, 0x0a, 0x30, 0xcb, + 0x30, 0xa2, 0x06, 0x68, 0x3b, 0x52, 0x2f, 0xf7, 0x6d, 0xeb, 0x4b, 0x77, + 0x06, 0x5e, 0xf7, 0x30, 0x7f, 0x75, 0x80, 0x81, 0x65, 0x06, 0x20, 0xff, + 0x30, 0x7d, 0x7a, 0xe4, 0x60, 0x7d, 0x06, 0x1d, 0xfd, 0x07, 0x11, 0x7f, + 0x71, 0x7d, 0xed, 0x06, 0x4e, 0x77, 0x57, 0x01, 0x7f, 0x6c, 0x9a, 0x3c, + 0x5c, 0x9a, 0x4e, 0x06, 0x7f, 0xf9, 0x00, 0xe8, 0xb8, 0xc8, 0xb9, 0xc8, + 0xb2, 0x44, 0xc5, 0xd8, 0x06, 0x78, 0xbd, 0x33, 0x7f, 0x65, 0x23, 0x81, + 0x32, 0x7b, 0x69, 0x00, 0xeb, 0xa8, 0x06, 0x63, 0xff, 0xe9, 0x06, 0x83, + 0xff, 0x20, 0x28, 0x35, 0x3c, 0x04, 0x4b, 0x38, 0x04, 0x3d, 0x06, 0x08, + 0x35, 0x07, 0x94, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x21, 0x31, 0x32, 0x00, + 0x2d, 0x31, 0x34, 0x21, 0x21, 0x2f, 0x36, 0x2f, 0x04, 0x31, 0x21, 0x21, + 0x21, 0x21, 0x01, 0x2f, 0xff, 0x64, 0x53, 0x8d, 0x6f, 0xff, 0xed, 0x30, + 0xb7, 0x06, 0x88, 0x37, 0x77, 0x3b, 0x73, 0x20, 0x01, 0xf5, 0x06, 0x58, + 0x39, 0xb0, 0x7f, 0x06, 0x18, 0x37, 0xb0, 0xff, 0x6c, 0x49, 0x3f, 0x64, + 0x0e, 0x61, 0x7f, 0x80, 0x06, 0x71, 0xfd, 0x00, 0x00, 0xc4, 0x4f, 0x57, + 0x7f, 0xaf, 0xc3, 0x06, 0x51, 0xfa, 0x4f, 0xff, 0xec, 0xb7, 0xdc, 0xc2, + 0x06, 0x98, 0x39, 0x73, 0x7f, 0xd0, 0x06, 0x72, 0x7d, 0x3c, 0x3b, 0xfa, + 0x06, 0xc3, 0xff, 0x20, 0x04, 0x3e, 0x04, 0x78, 0x41, 0x20, 0x01, 0x06, + 0x58, 0x39, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x22, 0x32, 0x34, + 0x00, 0x2e, 0x32, 0x35, 0x22, 0x22, 0x30, 0x37, 0x2e, 0x04, 0x32, 0x22, + 0x22, 0x22, 0x22, 0x01, 0x2f, 0xff, 0x65, 0x01, 0x82, 0x6f, 0xff, 0xbb, + 0x30, 0xeb, 0x30, 0xd3, 0x28, 0x3d, 0xfb, 0x00, 0x30, 0xb3, 0x30, 0xbd, + 0x30, 0xf4, 0x30, 0xa9, 0xa2, 0x05, 0xe8, 0x47, 0x53, 0x2f, 0xeb, 0x72, + 0x00, 0x62, 0x4e, 0xf5, 0x20, 0x8a, 0x67, 0x3f, 0x20, 0x00, 0x4b, 0x2f, + 0x0d, 0x73, 0x2f, 0x11, 0x76, 0xd1, 0x2f, 0x15, 0x05, 0x70, 0x7f, 0x65, + 0x20, 0x7f, 0x65, 0x00, 0x74, 0x05, 0xc0, 0x7d, 0xaf, 0xd0, 0x7f, 0x6e, + 0x21, 0x01, 0x75, 0x05, 0xe1, 0x01, 0xd1, 0x7f, 0x31, 0x03, 0x05, 0xb0, + 0xfd, 0xa0, 0xf1, 0xff, 0x79, 0x06, 0x00, 0x7f, 0x5e, 0x58, 0x14, 0x5c, + 0xf4, 0x00, 0x7e, 0x9a, 0x4e, 0xca, 0x53, 0xd1, 0x79, 0x22, 0x10, 0x7d, + 0x83, 0x6c, 0x05, 0xff, 0xff, 0x38, 0xc1, 0x74, 0xb9, 0x00, 0x44, 0xbe, + 0x44, 0xc5, 0x20, 0x00, 0x54, 0xcf, 0x0d, 0x8c, 0xc1, 0xf4, 0xbc, 0x05, + 0xff, 0xf8, 0x53, 0x7f, 0x76, 0x2f, 0xf5, 0x76, 0xeb, 0x42, 0xff, 0x32, + 0x83, 0x05, 0xd2, 0xff, 0xe9, 0x60, 0x7f, 0x06, 0x52, 0x7f, 0x21, 0x02, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x31, 0x48, 0x3b, 0x20, 0x28, 0x00, 0x38, + 0x20, 0x03, 0x1a, 0x48, 0x4d, 0x3e, 0x04, 0x32, 0xe0, 0x28, 0x55, 0x0d, + 0xb4, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x23, 0x34, 0x36, 0x33, 0x34, 0x00, + 0x37, 0x23, 0x23, 0x32, 0x39, 0x32, 0x34, 0x23, 0x12, 0x23, 0x23, 0x23, + 0x01, 0x2f, 0xff, 0x66, 0x08, 0x6f, 0xff, 0xb9, 0x03, 0x30, 0xed, 0x30, + 0xd0, 0x30, 0xad, 0x28, 0x3d, 0x06, 0x5d, 0xf8, 0x63, 0x53, 0x2f, 0x71, + 0x38, 0x23, 0x61, 0x00, 0x6b, 0x06, 0x4e, 0xfb, 0x90, 0x7f, 0x75, 0x71, + 0x2f, 0x81, 0x38, 0x41, 0x06, 0x30, 0xff, 0x77, 0x40, 0xff, 0x65, 0x2f, + 0xfd, 0xab, 0x06, 0x91, 0x7f, 0x63, 0x20, 0x01, 0x68, 0x06, 0x0d, 0xff, + 0x45, 0x4e, 0xf5, 0xb1, 0x81, 0x80, 0x05, 0xde, 0x7f, 0xaf, 0x65, 0x1b, + 0x6d, 0x10, 0x4f, 0x4b, 0x40, 0x51, 0x06, 0x7f, 0xf9, 0xac, 0xc2, 0x5c, + 0xb8, 0x14, 0xbc, 0x0c, 0xa4, 0xd0, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x52, + 0x7f, 0x69, 0x00, 0x68, 0x6a, 0x06, 0x02, 0xff, 0x91, 0xff, 0xe1, 0x06, + 0x41, 0xff, 0x21, 0x04, 0x3b, 0x8e, 0x48, 0x27, 0x30, 0x04, 0x3a, 0x48, + 0x3f, 0x0e, 0x94, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x24, 0x00, 0x35, 0x37, + 0x35, 0x35, 0x0f, 0x24, 0x24, 0x34, 0x01, 0x11, 0x33, 0x35, 0x24, 0x24, + 0x24, 0x24, 0x01, 0x2f, 0xff, 0x23, 0x67, 0x01, 0xa8, 0x3b, 0xd9, 0x30, + 0xcb, 0x07, 0x08, 0x3b, 0x3f, 0x75, 0xbf, 0x06, 0xb8, 0x3b, 0xe9, 0x40, + 0x7f, 0x05, 0xf8, 0x39, 0x98, 0x3b, 0x50, 0xff, 0x3d, 0xf7, 0x0d, 0xd1, + 0x7f, 0xe0, 0x98, 0x3b, 0x06, 0x52, 0x01, 0x38, 0x3b, 0x87, 0x65, 0x3c, + 0x5c, 0x9a, 0x43, 0x4e, 0x06, 0x98, 0x3b, 0xa0, 0xbc, 0xc8, 0xb2, 0x06, + 0xd8, 0x3b, 0x73, 0x7f, 0x78, 0xeb, 0x06, 0xa1, 0xff, 0x53, 0x81, 0x05, + 0xfc, 0x3d, 0x78, 0x3b, 0x35, 0x04, 0x3d, 0xe0, 0x06, 0xc8, 0x3b, 0x06, + 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x25, 0x36, 0x38, 0x36, 0x36, 0x00, + 0x10, 0x25, 0x25, 0x33, 0x12, 0x34, 0x36, 0x25, 0x12, 0x25, 0x25, 0x25, + 0x01, 0x2f, 0xff, 0x68, 0x09, 0x6f, 0xff, 0x57, 0x00, 0x53, 0xa2, 0x30, + 0xd5, 0x30, 0xea, 0x30, 0xab, 0xa8, 0x06, 0x88, 0x3b, 0x6f, 0x2f, 0xef, + 0x74, 0x2e, 0xf1, 0x20, 0x00, 0x41, 0x0b, 0x00, 0x66, 0x00, 0x72, 0x2f, + 0xfb, 0x63, 0x05, 0xae, 0xfb, 0x70, 0x73, 0xaa, 0x3e, 0xf3, 0x65, 0x20, + 0x83, 0x64, 0x2e, 0xfb, 0x20, 0x2f, 0x8d, 0x75, 0xd5, 0x20, 0x09, 0x05, + 0x5f, 0xf7, 0xfc, 0x20, 0x73, 0x61, 0x60, 0xf9, 0x6b, 0x06, 0x0c, 0x79, + 0xf4, 0x50, 0xe9, 0x70, 0x7f, 0x05, 0xb1, 0x79, 0xb0, 0x7f, 0xe1, 0x06, + 0x80, 0x7f, 0x57, 0x53, 0x30, 0x5e, 0x97, 0x06, 0x5f, 0xf1, 0x5f, 0xff, + 0xa8, 0xb0, 0x44, 0xc5, 0x00, 0x04, 0xd5, 0xac, 0xb9, 0x74, 0xce, 0x20, + 0x00, 0x02, 0xf5, 0xac, 0x54, 0xd6, 0x6d, 0xad, 0x05, 0xdf, 0xf8, 0x5a, + 0x8d, 0x4f, 0xeb, 0x64, 0x00, 0x2d, 0x83, 0x7d, 0x05, 0xd2, 0x83, 0xc1, + 0xa3, 0xf3, 0xa8, 0x33, 0x7d, 0x6f, 0x63, 0x7d, 0x6c, 0x05, 0x6f, 0xff, + 0x2e, 0x04, 0x10, 0x38, 0x04, 0x20, 0x06, 0x08, 0x31, 0x07, 0x94, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x26, 0x38, 0x00, 0x00, 0x39, 0x39, 0x3a, 0x26, + 0x26, 0x40, 0x00, 0x42, 0x04, 0x38, 0x26, 0x26, 0x26, 0x26, 0x01, 0x2f, + 0xff, 0x69, 0x13, 0x80, 0x6f, 0xff, 0xb9, 0x30, 0xda, 0x30, 0xa4, 0x30, + 0xf3, 0xd7, 0x06, 0x68, 0x39, 0x3f, 0xf7, 0x70, 0x2e, 0xed, 0x69, 0x06, + 0x0f, 0x6f, 0xbe, 0xf7, 0x30, 0x81, 0x5f, 0x67, 0x2f, 0xf7, 0x65, 0x06, + 0x80, 0xff, 0x3f, 0xf3, 0x3f, 0xf9, 0x06, 0x71, 0x7f, 0x30, 0xfd, 0xd0, + 0x06, 0x1c, 0xf3, 0xb1, 0x7f, 0xf1, 0x06, 0x60, 0x7f, 0x7f, 0x89, 0xed, + 0x73, 0x20, 0x59, 0x72, 0x06, 0x98, 0x3d, 0xa4, 0xc2, 0x98, 0xd3, 0x78, + 0x6d, 0xc7, 0x06, 0xb6, 0xbb, 0x52, 0x7f, 0x6a, 0x06, 0x42, 0xfd, 0x93, + 0x7f, 0x6e, 0x2c, 0x3d, 0x80, 0x06, 0x32, 0x81, 0x18, 0x04, 0x41, 0x04, + 0x3f, 0x04, 0x30, 0x03, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x4f, 0x06, 0x28, + 0x43, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x27, 0x39, 0x10, + 0x38, 0x38, 0x11, 0x27, 0x00, 0x27, 0x37, 0x13, 0x18, 0x39, 0x27, 0x27, + 0x27, 0x50, 0x27, 0x01, 0x2f, 0xff, 0x6a, 0x7b, 0x6a, 0xb9, 0x30, 0xef, + 0x30, 0x14, 0xb8, 0x30, 0xe9, 0x28, 0x3d, 0xc9, 0x06, 0x48, 0x3f, 0x53, + 0x00, 0x57, 0x77, 0x2f, 0x75, 0x7a, 0x2f, 0xf9, 0x6c, 0x47, 0x43, 0x05, + 0x5f, 0xed, 0x07, 0xf0, 0x7f, 0x54, 0x73, 0x0e, 0xa0, 0xff, 0x75, 0xe1, + 0xff, 0x69, 0x05, 0xce, 0xf7, 0xaf, 0x65, 0x02, 0x01, 0x5a, 0xeb, 0x58, + 0x70, 0x51, 0x06, 0x98, 0x3b, 0x40, 0x01, 0xc6, 0xc8, 0xc9, 0x80, 0xb7, + 0xdc, 0xb4, 0x06, 0x7e, 0xf7, 0xa2, 0x07, 0x91, 0xff, 0xe2, 0x06, 0x21, + 0xff, 0x21, 0x04, 0x32, 0x28, 0x39, 0x37, 0x8b, 0x28, 0x39, 0x3b, 0x04, + 0x35, 0x28, 0x41, 0x34, 0x05, 0xe8, 0x3f, 0x0f, 0x54, 0xff, 0x80, 0x10, + 0x06, 0x90, 0xff, 0x28, 0x3b, 0x3d, 0x3b, 0x3d, 0x39, 0x28, 0x00, 0x28, + 0x38, 0x3b, 0x31, 0x3b, 0x28, 0x28, 0x28, 0x48, 0x28, 0x01, 0x2f, 0xff, + 0x6b, 0x15, 0x88, 0x3b, 0xa6, 0x30, 0xa7, 0x0d, 0x30, 0xfc, 0x30, 0xc7, + 0x28, 0x3d, 0x06, 0x78, 0x3b, 0x65, 0x28, 0x31, 0xdb, 0x06, 0x5f, 0x75, + 0x56, 0xbb, 0xe8, 0x40, 0x7f, 0x06, 0x7d, 0xf7, 0x63, 0x2d, 0x71, 0x06, + 0x91, 0x03, 0x1e, 0x53, 0x00, 0x76, 0x2e, 0x71, 0x39, 0xbb, 0x06, 0x5f, + 0xf7, 0x38, 0x3b, 0x65, 0xc6, 0x21, 0x03, 0x06, 0x70, 0x7f, 0x5e, 0x74, + 0x78, 0x06, 0x88, 0x37, 0x58, 0x3b, 0xe8, 0x15, 0xc6, 0x74, 0xb3, 0x06, + 0x90, 0x81, 0x5a, 0x07, 0x23, 0x7f, 0xe9, 0x06, 0xa1, 0xff, 0x45, 0x28, + 0x28, 0x3b, 0x35, 0x04, 0x46, 0x28, 0x3b, 0x4f, 0x05, 0xe8, 0x35, 0xc8, + 0x07, 0x74, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x29, 0x3c, 0x28, 0x34, 0x3c, + 0x29, 0x29, 0x12, 0x41, 0x3d, 0x3f, 0x20, 0x05, 0x29, 0x29, 0x01, 0x2f, + 0xff, 0x6c, 0x46, 0x1a, 0x88, 0x3b, 0xa4, 0x30, 0xb9, 0x06, 0x48, 0x35, + 0x9f, 0xf7, 0x69, 0x23, 0x00, 0x74, 0x2f, 0xf9, 0x65, 0x00, 0x72, 0x06, + 0x2f, 0xfb, 0x3e, 0xf7, 0x5b, 0x69, 0x2f, 0xf7, 0x73, 0x06, 0x68, 0x3d, + 0x98, 0x3b, 0x69, 0x2f, 0xfd, 0x06, 0x3e, 0x77, 0x7b, 0x76, 0x40, 0x79, + 0x51, 0x7f, 0x06, 0x18, 0x3f, 0x51, 0x7f, 0x7a, 0x06, 0x68, 0xb9, 0x38, + 0x3b, 0x21, 0xeb, 0x58, 0x06, 0xd8, 0x3b, 0x04, 0xc7, 0xa4, 0xc2, 0x06, + 0xd8, 0x3b, 0xe3, 0x33, 0x7f, 0x32, 0xff, 0x06, 0x73, 0x7f, 0xed, 0x00, + 0xe7, 0x06, 0x81, 0xff, 0x58, 0x3b, 0x47, 0x39, 0x28, 0x3d, 0x30, 0x04, + 0x40, 0x06, 0x28, 0x41, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, + 0x2a, 0x3d, 0x3c, 0x32, 0x3c, 0x3d, 0x2a, 0x2a, 0x12, 0x42, 0x3e, 0x3e, + 0x20, 0x05, 0x2a, 0x2a, 0x01, 0x2f, 0xff, 0x6d, 0x82, 0x7d, 0x6c, 0xc8, + 0x30, 0xeb, 0x30, 0xb3, 0x06, 0xa8, 0x3b, 0x54, 0x8a, 0x2f, 0xf7, 0x72, + 0x00, 0x6b, 0x2f, 0xf7, 0x79, 0x06, 0xa0, 0x7f, 0x71, 0xc5, 0x48, 0x41, + 0x06, 0x38, 0x3d, 0x54, 0x00, 0xfc, 0x60, 0xff, 0x69, 0x06, 0xa1, 0x7f, + 0xe8, 0x38, 0xbf, 0x06, 0x5f, 0xf9, 0x91, 0x7f, 0xed, 0x06, 0x4e, 0x79, + 0x1f, 0x57, 0x33, 0x30, 0x80, 0x76, 0x73, 0x0c, 0x06, 0x2f, 0xfe, 0x30, + 0xd1, 0xa4, 0xd0, 0xc7, 0x06, 0xb8, 0xbb, 0x73, 0x7f, 0x69, 0x00, 0x6a, + 0x06, 0x62, 0xff, 0x93, 0x7f, 0x06, 0x3a, 0x3f, 0x17, 0x22, 0x04, 0x43, + 0x28, 0x33, 0x46, 0x06, 0x28, 0x35, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x90, + 0x7f, 0x00, 0x2b, 0x3e, 0x3f, 0x3e, 0x3e, 0x3e, 0x2b, 0x2b, 0x12, 0x3b, + 0x3f, 0x37, 0x20, 0x05, 0x2b, 0x2b, 0x01, 0x2f, 0xff, 0x6e, 0x80, 0x7b, + 0x5e, 0xa4, 0x30, 0xae, 0x30, 0xea, 0x30, 0xb9, 0xb4, 0x06, 0x88, 0x3d, + 0x55, 0x2c, 0xe7, 0x3c, 0xf7, 0x65, 0x2c, 0xed, 0x20, 0x00, 0x44, 0x4b, + 0x2f, 0x7d, 0x6e, 0x00, 0x67, 0x2c, 0xf9, 0x6f, 0x00, 0x55, 0x6d, 0x05, + 0x4f, 0xff, 0x52, 0x20, 0x69, 0x79, 0x2f, 0x6f, 0x75, 0x20, 0x6f, 0x1b, + 0x65, 0x00, 0x2d, 0x60, 0x8f, 0x05, 0x9f, 0xff, 0x56, 0x4f, 0xef, 0x38, + 0x39, 0xab, 0x31, 0x07, 0x67, 0x41, 0x09, 0x73, 0x41, 0x09, 0xf6, 0x60, + 0x11, 0x50, 0x1d, 0xd5, 0x37, 0xdd, 0x04, 0x50, 0xff, 0x65, 0x21, 0x6f, + 0x6e, 0x21, 0x6f, 0x20, 0x81, 0x8b, 0x7e, 0x6f, 0x05, 0xaf, 0xff, 0x30, + 0x7f, 0x31, 0xf3, 0x90, 0x7f, 0x31, 0xfb, 0x05, 0x9f, 0xff, 0xf1, 0x10, + 0x82, 0xfd, 0x56, 0x06, 0xb7, 0xbb, 0x01, 0xc6, 0x6d, 0xad, 0xf5, 0x06, + 0xb8, 0x3b, 0x72, 0x7f, 0x52, 0x7d, 0x53, 0x83, 0x6f, 0x43, 0x93, 0x6e, + 0x2b, 0xd1, 0x50, 0x72, 0x48, 0x53, 0x6b, 0x0c, 0xa1, 0xff, 0x12, 0x04, + 0x35, 0x04, 0x41, 0x3b, 0x28, 0x39, 0x3a, 0x04, 0x3e, 0x04, 0x31, 0x28, + 0x45, 0x01, 0x38, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3d, 0x05, 0x88, 0x4b, + 0xc0, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x2c, 0x3f, 0x33, 0x41, + 0x2f, 0x32, 0x00, 0x2c, 0x2c, 0x3d, 0x34, 0x0a, 0x3f, 0x2c, 0x2c, 0x24, + 0x2c, 0x2c, 0x01, 0x2f, 0xff, 0x6f, 0x01, 0x6f, 0xff, 0xb6, 0x30, 0x05, + 0xf3, 0x30, 0xd3, 0x30, 0xa2, 0x06, 0x88, 0x3b, 0x5a, 0x2e, 0xed, 0x1c, + 0x6d, 0x00, 0x62, 0x06, 0x6e, 0xf5, 0xb0, 0x7f, 0x06, 0x3d, 0x75, 0x00, + 0x00, 0x60, 0x53, 0x07, 0x80, 0xff, 0x0e, 0x50, 0x7f, 0x5e, 0x8d, 0xd4, + 0x6b, 0x9a, 0x40, 0x4e, 0x06, 0x9f, 0xf9, 0xa0, 0xc7, 0x44, 0xbe, 0x44, + 0xc5, 0xd5, 0x06, 0x98, 0xbd, 0x07, 0x13, 0x7f, 0xe2, 0x06, 0xc3, 0xff, + 0x17, 0x28, 0x29, 0x3c, 0x28, 0x35, 0xe0, 0x05, 0x78, 0x2b, 0x0f, 0xf3, + 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x2d, 0x41, 0x41, 0x2f, 0x41, 0x02, 0x41, + 0x2d, 0x2d, 0x3e, 0x41, 0x13, 0x20, 0x05, 0x2d, 0x54, 0x2d, 0x01, 0x2f, + 0xff, 0x70, 0x78, 0x3b, 0xb8, 0x28, 0x3b, 0xd0, 0x30, 0x16, 0xd6, 0x30, + 0xa8, 0x06, 0x68, 0x3d, 0x5a, 0x2f, 0xe5, 0x38, 0x3b, 0x61, 0xb6, 0x28, + 0x3f, 0x77, 0x06, 0x27, 0xbf, 0x06, 0xf0, 0x7f, 0x53, 0x0e, 0xe0, 0xff, + 0xb1, 0xff, 0x75, 0x80, 0x06, 0x29, 0xbf, 0x25, 0x6d, 0xf4, 0x5d, 0x03, + 0x5e, 0xe6, 0x40, 0x97, 0x06, 0x7f, 0xfb, 0xd0, 0xc9, 0x14, 0xbc, 0x0c, + 0xbe, 0x35, 0xe8, 0xc6, 0x06, 0x9b, 0xbb, 0x07, 0xb1, 0xff, 0xe9, 0x06, + 0x28, 0x3b, 0x38, 0x48, 0x3b, 0x47, 0x30, 0x28, 0x3f, 0x32, 0x04, 0x35, + 0x06, 0x08, 0x3f, 0x0e, 0xf4, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x00, 0x2e, + 0x42, 0x42, 0x34, 0x42, 0x42, 0x2e, 0x2e, 0x12, 0x3f, 0x42, 0x14, 0x20, + 0x05, 0x2e, 0x2e, 0x01, 0x2f, 0xff, 0x71, 0x82, 0x78, 0x3b, 0xa2, 0x30, + 0xbc, 0x30, 0xeb, 0x28, 0x3d, 0xa4, 0x0c, 0x30, 0xb8, 0x30, 0xe3, 0x28, + 0x47, 0x05, 0xff, 0xfc, 0x41, 0x00, 0x51, 0x7a, 0x2f, 0xf1, 0x72, 0x48, + 0x3d, 0x69, 0x00, 0x6a, 0x2f, 0x85, 0x44, 0x6e, 0x06, 0x80, 0x7f, 0xef, + 0x00, 0x64, 0x06, 0x00, 0x81, 0x41, 0x00, 0x51, 0x73, 0xa0, 0xff, 0x64, + 0x20, 0x0d, 0x63, 0x00, 0x68, 0x05, 0xa1, 0x05, 0xb8, 0xd1, 0x7f, 0x67, + 0x4f, 0xff, 0x05, 0xd0, 0xff, 0xb1, 0xff, 0x79, 0x00, 0xe1, 0x80, 0x05, + 0xe1, 0xff, 0x3f, 0x96, 0x5e, 0x58, 0xdc, 0x62, 0x86, 0x40, 0x75, 0x06, + 0x7f, 0xf9, 0x44, 0xc5, 0x1c, 0xc8, 0x74, 0xb9, 0x03, 0x14, 0xbc, 0x74, + 0xc7, 0x94, 0xc7, 0x06, 0x3f, 0xf8, 0x93, 0x7f, 0x58, 0x65, 0x42, 0x7f, + 0x7a, 0x05, 0xe3, 0x83, 0xf3, 0xff, 0xe3, 0x00, 0x6f, 0x8a, 0x05, 0xcf, + 0xfe, 0x10, 0x04, 0x37, 0x28, 0x31, 0x40, 0x48, 0x3d, 0x39, 0x0b, 0x04, + 0x34, 0x04, 0x36, 0x28, 0x45, 0x3d, 0x05, 0xa8, 0x41, 0x07, 0xb4, 0xff, + 0x80, 0x10, 0x0e, 0x30, 0x7f, 0x2f, 0x04, 0x06, 0x02, 0x04, 0x05, 0x2f, + 0x21, 0x2f, 0x03, 0x20, 0x06, 0x2f, 0x2f, 0x2f, 0x2f, 0x01, 0x2f, 0xff, + 0x40, 0x72, 0x78, 0x3b, 0xe2, 0x30, 0xfc, 0x30, 0xea, 0x30, 0x06, 0xbf, + 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x08, 0x37, 0x3f, 0xff, 0x4d, 0xa3, 0x2f, + 0xf1, 0x75, 0x28, 0x3b, 0x69, 0x00, 0x74, 0x48, 0x37, 0x36, 0xbb, 0xef, + 0x06, 0xd0, 0x7f, 0x05, 0xdf, 0xfb, 0x70, 0xff, 0x65, 0xa0, 0x7f, 0x05, + 0xb9, 0x3d, 0x08, 0x11, 0x7f, 0x05, 0xd1, 0xff, 0x00, 0xdb, 0x6b, 0xcc, + 0x91, 0x54, 0x58, 0x3c, 0x5c, 0x20, 0x9a, 0x4e, 0x06, 0x5f, 0xf9, 0xa8, + 0xba, 0xac, 0xb9, 0xc0, 0x1a, 0xd0, 0xc8, 0xb2, 0x06, 0x78, 0xbb, 0x00, + 0x13, 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe2, 0xa8, 0x06, 0x23, 0xff, 0x1c, + 0x28, 0x33, 0x32, 0x28, 0x3b, 0x38, 0x04, 0x42, 0x8e, 0x48, 0x35, 0x38, + 0x04, 0x4f, 0x05, 0xa8, 0x39, 0x0f, 0x13, 0x7f, 0x10, 0x06, 0xf0, 0xff, + 0x30, 0x00, 0x26, 0x26, 0x20, 0x24, 0x27, 0x30, 0x30, 0x23, 0x02, 0x29, + 0x20, 0x26, 0x30, 0x30, 0x30, 0x01, 0x38, 0x03, 0x73, 0xbb, 0x78, 0x3b, + 0xde, 0x28, 0x39, 0x06, 0x7d, 0x73, 0x78, 0x3b, 0x6c, 0x2f, 0x71, 0x10, + 0x0e, 0xd0, 0x7f, 0x42, 0xed, 0x06, 0x82, 0x82, 0x6c, 0x9a, 0xcc, 0x91, + 0x06, 0xb2, 0xff, 0xd0, 0x1b, 0xb9, 0xac, 0xb9, 0x10, 0x06, 0xb3, 0x7f, + 0x38, 0x3b, 0x3b, 0x28, 0x39, 0x10, 0x16, 0xd4, 0xff, 0x80, 0x06, 0x96, + 0xff, 0x31, 0x24, 0x24, 0x1e, 0x22, 0x25, 0x31, 0x00, 0x31, 0x20, 0x27, + 0x22, 0x24, 0x31, 0x31, 0x31, 0x50, 0x31, 0x01, 0x2f, 0xff, 0x74, 0x78, + 0x3b, 0xcb, 0x30, 0xb8, 0x30, 0x05, 0xa7, 0x30, 0xfc, 0x30, 0xeb, 0x06, + 0x68, 0x41, 0x4e, 0x2f, 0xf1, 0x5a, 0x67, 0x2f, 0xeb, 0x72, 0x06, 0x6d, + 0x78, 0x10, 0x07, 0x10, 0x7f, 0xed, 0x06, 0xc1, 0xff, 0x3c, 0x04, 0x5c, + 0xe5, 0x65, 0x14, 0x5c, 0x06, 0x9b, 0x3d, 0xc8, 0xb2, 0x1a, 0x1c, 0xc8, + 0x74, 0x06, 0xa8, 0x3d, 0x0e, 0xf1, 0xff, 0x1d, 0x28, 0x37, 0x33, 0x0e, + 0x04, 0x35, 0x04, 0x40, 0x06, 0x68, 0x3d, 0x10, 0x0f, 0x14, 0xff, 0x06, + 0xd6, 0xff, 0x32, 0x00, 0x2d, 0x2b, 0x28, 0x29, 0x2c, 0x32, 0x32, 0x2a, + 0x01, 0x2e, 0x28, 0x2d, 0x32, 0x32, 0x32, 0x32, 0x01, 0x2f, 0xff, 0x41, + 0x75, 0x78, 0x3b, 0xc1, 0x30, 0xe3, 0x30, 0xc9, 0x06, 0x68, 0x37, 0x8a, + 0x3f, 0xff, 0x43, 0x00, 0x68, 0x2f, 0xf9, 0x64, 0x06, 0x8f, 0xf7, 0x54, + 0x22, 0x00, 0x63, 0x06, 0xc0, 0x81, 0x54, 0x00, 0x73, 0x06, 0xc0, 0x81, + 0x43, 0xe1, 0x2e, 0x73, 0x06, 0xb1, 0x7f, 0x06, 0xf1, 0xff, 0x4d, 0x4e, + 0x97, 0x5f, 0x06, 0xbf, 0xf7, 0x0d, 0x28, 0xcc, 0xdc, 0xb4, 0x06, 0xb0, + 0x7f, 0x32, 0x7f, 0x6a, 0x2f, 0xfb, 0xd0, 0x06, 0x92, 0x7f, 0x53, 0xff, + 0x65, 0x06, 0x6f, 0xf8, 0x27, 0x04, 0x30, 0x04, 0x70, 0x34, 0x06, 0x68, + 0x37, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x33, 0x09, 0x3e, 0x3c, + 0x00, 0x09, 0x0a, 0x33, 0x33, 0x39, 0x0b, 0x3b, 0x09, 0x0a, 0x33, 0x33, + 0x33, 0x33, 0x01, 0x2f, 0xff, 0x76, 0x78, 0x3b, 0xb9, 0x02, 0x30, 0xfc, + 0x30, 0xc0, 0x30, 0xf3, 0x06, 0x88, 0x3d, 0x53, 0x22, 0x00, 0x75, 0x28, + 0x39, 0x61, 0x00, 0x6e, 0x06, 0x80, 0x7f, 0x6f, 0xe8, 0x06, 0xc0, 0x81, + 0x07, 0x10, 0xff, 0x07, 0x30, 0x7f, 0xe1, 0x06, 0x81, 0xff, 0xcf, 0x82, + 0x39, 0x43, 0x4e, 0x06, 0xb8, 0x3b, 0x18, 0xc2, 0xe8, 0xb2, 0x06, 0xb8, + 0xbb, 0x32, 0xff, 0x58, 0x65, 0x07, 0x02, 0xff, 0xe3, 0x23, 0x85, 0x06, + 0x5f, 0xf7, 0x21, 0x04, 0x43, 0x8e, 0x28, 0x3b, 0x30, 0x04, 0x3d, 0x06, + 0x68, 0x3f, 0x0f, 0x53, 0xff, 0x10, 0x06, 0x90, 0xff, 0x34, 0x00, 0x3a, + 0x3a, 0x3a, 0x3a, 0x3b, 0x34, 0x34, 0x35, 0x01, 0x3c, 0x36, 0x3a, 0x34, + 0x34, 0x34, 0x34, 0x01, 0x2f, 0xff, 0x41, 0x77, 0x78, 0x3b, 0xa8, 0x30, + 0xea, 0x30, 0xc8, 0x20, 0x03, 0x45, 0xa2, 0x06, 0x68, 0x3d, 0x45, 0x00, + 0x72, 0x2e, 0xf9, 0x74, 0x20, 0x05, 0x6a, 0x65, 0x2f, 0xfd, 0x06, 0x1f, + 0xfc, 0xc9, 0x20, 0x7f, 0x79, 0x20, 0x7f, 0x68, 0xb8, 0x20, 0x87, 0xe9, + 0x06, 0x2c, 0xfd, 0x06, 0xf0, 0xff, 0x0e, 0xf0, 0x7f, 0x84, 0x53, 0xcb, + 0x02, 0x7a, 0x79, 0x72, 0xcc, 0x91, 0x9a, 0x06, 0x68, 0x41, 0xd0, 0x00, + 0xc5, 0xac, 0xb9, 0xb8, 0xd2, 0x08, 0xb8, 0x44, 0x68, 0xc5, 0x0e, 0x53, + 0x7f, 0xb3, 0xff, 0x69, 0x06, 0x24, 0x01, 0x2d, 0x04, 0x40, 0x08, 0x04, + 0x38, 0x04, 0x42, 0x20, 0x05, 0x35, 0x04, 0x4f, 0xe0, 0x06, 0x28, 0x3f, + 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x35, 0x0f, 0x0f, 0x0b, 0x0d, + 0x00, 0x0e, 0x35, 0x35, 0x0c, 0x10, 0x40, 0x0f, 0x35, 0x14, 0x35, 0x35, + 0x35, 0x01, 0x2f, 0xff, 0x78, 0x78, 0x3b, 0xb8, 0x30, 0x18, 0xd6, 0x30, + 0xc1, 0x06, 0x68, 0x37, 0x3f, 0xff, 0x44, 0x00, 0x6a, 0xac, 0x28, 0x3b, + 0x62, 0x4f, 0xfd, 0x74, 0x28, 0x45, 0x0e, 0x10, 0x7f, 0x73, 0x00, 0x76, + 0x63, 0x28, 0xb9, 0x31, 0x03, 0x06, 0x31, 0x01, 0x47, 0x06, 0x80, 0x79, + 0x5f, 0xff, 0x59, 0x81, 0x06, 0xe0, 0x7f, 0x09, 0x54, 0x03, 0x5e, 0xd0, + 0x63, 0x06, 0x9f, 0xf9, 0x02, 0xc0, 0xc9, 0x80, 0xbd, 0xf0, 0xd2, 0x10, + 0x06, 0x93, 0x7f, 0x14, 0x22, 0x04, 0x36, 0x28, 0x3b, 0x31, 0x04, 0x43, + 0x28, 0x3f, 0x38, 0xe0, 0x06, 0x28, 0x3b, 0x0f, 0x14, 0xff, 0x10, 0x06, + 0xd0, 0xff, 0x36, 0x0e, 0x0e, 0x0a, 0x13, 0x00, 0x40, 0x36, 0x36, 0x0a, + 0x0f, 0x12, 0x0e, 0x36, 0x14, 0x36, 0x36, 0x36, 0x01, 0x2f, 0xff, 0x79, + 0x78, 0x3b, 0xbd, 0x30, 0x05, 0xde, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x88, + 0x3d, 0x53, 0x28, 0x35, 0x5b, 0x6d, 0x2f, 0x71, 0x6c, 0x06, 0x4c, 0x75, + 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0x02, 0x22, 0x7d, + 0x6c, 0x9a, 0xcc, 0x91, 0x06, 0x9b, 0x3b, 0x8c, 0x01, 0xc1, 0xd0, 0xb9, + 0xac, 0xb9, 0x44, 0xc5, 0x07, 0x33, 0x7f, 0x50, 0xeb, 0x06, 0x83, 0xff, + 0xe1, 0x06, 0x83, 0xff, 0x21, 0x04, 0x3e, 0x04, 0x07, 0x3c, 0x04, 0x30, + 0x04, 0x3b, 0x06, 0x48, 0x39, 0x10, 0x07, 0x13, 0xff, 0x0e, 0xf5, 0x7f, + 0x00, 0x37, 0x37, 0x39, 0x37, 0x37, 0x38, 0x37, 0x37, 0x06, 0x36, 0x3a, + 0x35, 0x37, 0x37, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x7a, 0x80, 0x78, 0x3b, + 0xa2, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0xe9, 0x82, 0x06, 0x88, 0x3b, 0x41, + 0x00, 0x6e, 0x00, 0x64, 0x2f, 0xf5, 0x72, 0xfc, 0x20, 0x01, 0x06, 0x38, + 0x3b, 0xb0, 0x7f, 0x06, 0x38, 0x3b, 0x07, 0xb0, 0xff, 0x0e, 0x30, 0x7f, + 0x89, 0x5b, 0x08, 0x53, 0x90, 0x14, 0x5c, 0x06, 0x9f, 0xf7, 0x48, 0xc5, + 0xc4, 0x18, 0xb3, 0x7c, 0xb7, 0x06, 0x98, 0xbb, 0x0e, 0xf2, 0x7f, 0x10, + 0x04, 0x3d, 0x2b, 0x04, 0x34, 0x28, 0x3f, 0x40, 0x20, 0x01, 0x30, 0x06, + 0x28, 0x3d, 0x10, 0x06, 0xf3, 0xff, 0x80, 0x0e, 0xf5, 0x7f, 0x38, 0x01, + 0x03, 0x01, 0x01, 0x02, 0x38, 0x81, 0x20, 0x06, 0x04, 0x01, 0x38, 0x38, + 0x38, 0x38, 0x01, 0x2f, 0xff, 0x44, 0x7b, 0x78, 0x3b, 0xb8, 0x30, 0xd6, + 0x28, 0x39, 0xeb, 0x30, 0x6a, 0xbf, 0x20, 0x03, 0x06, 0x3d, 0x7d, 0x47, + 0x2f, 0xef, 0x62, 0x48, 0x37, 0x6c, 0x2a, 0x00, 0x74, 0x2f, 0xff, 0x72, + 0x10, 0x06, 0x40, 0x7f, 0x69, 0x41, 0x7d, 0x65, 0xc0, 0x06, 0x29, 0xc1, + 0x06, 0xf1, 0xff, 0xf4, 0x76, 0x03, 0x5e, 0x57, 0x7f, 0x20, 0x40, 0x96, + 0x06, 0x7f, 0xf7, 0xc0, 0xc9, 0x0c, 0xbe, 0x64, 0x18, 0xb8, 0x30, 0xd1, + 0x06, 0x7b, 0xbb, 0x0e, 0xf3, 0x7f, 0x13, 0x04, 0x38, 0x22, 0x04, 0x31, + 0x48, 0x37, 0x3b, 0x04, 0x42, 0x28, 0x3d, 0x40, 0xe0, 0x05, 0xe8, 0x3f, + 0x10, 0x07, 0x54, 0xff, 0x0e, 0x96, 0x7f, 0x39, 0x14, 0x14, 0x0f, 0x12, + 0x00, 0x15, 0x39, 0x39, 0x10, 0x17, 0x0e, 0x14, 0x39, 0x14, 0x39, 0x39, + 0x39, 0x01, 0x2f, 0xff, 0x7c, 0x78, 0x3b, 0xac, 0x30, 0x05, 0xfc, 0x30, + 0xf3, 0x30, 0xb8, 0x20, 0x05, 0xf6, 0x06, 0x4d, 0x7d, 0x11, 0x47, 0x00, + 0x75, 0x46, 0xb3, 0x6e, 0x00, 0x73, 0x2f, 0xf7, 0x5c, 0x79, 0x06, 0xa0, + 0x7f, 0x65, 0x06, 0x40, 0x81, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x39, + 0x68, 0x20, 0x7f, 0x89, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x74, 0xac, 0xc0, + 0x06, 0xc9, 0x20, 0x00, 0x2c, 0xc1, 0x06, 0x98, 0x3b, 0x0e, 0xd2, 0x7f, + 0x13, 0x23, 0x04, 0x35, 0x28, 0x39, 0x3d, 0x04, 0x41, 0x28, 0x43, 0x10, + 0x06, 0x31, 0x7f, 0x80, 0x10, 0x06, 0xf4, 0xff, 0x3a, 0x16, 0x16, 0x11, + 0x15, 0x17, 0x3a, 0x00, 0x3a, 0x12, 0x19, 0x0d, 0x16, 0x3a, 0x3a, 0x3a, + 0x57, 0x3a, 0x01, 0x2f, 0xff, 0x7d, 0x78, 0x3b, 0xde, 0x28, 0x39, 0x06, + 0x58, 0x35, 0x5f, 0xff, 0x50, 0x49, 0x28, 0x33, 0x6c, 0x2e, 0xf1, 0x20, + 0x00, 0x6f, 0x00, 0x55, 0x66, 0x20, 0x05, 0x4d, 0x2f, 0xfb, 0x6e, 0x05, + 0xaf, 0xfb, 0xce, 0x60, 0x7d, 0x7a, 0x64, 0x40, 0x83, 0x05, 0xf0, 0x7d, + 0x07, 0x10, 0xff, 0x31, 0x7f, 0x6f, 0x2f, 0xf3, 0x61, 0xbc, 0x41, 0x03, + 0x69, 0x06, 0x01, 0x81, 0x51, 0xff, 0x50, 0x7d, 0x06, 0x31, 0x81, 0x6c, + 0x9a, 0x12, 0x69, 0x60, 0x9b, 0x06, 0xa2, 0xff, 0xe8, 0xb9, 0x06, 0xb8, + 0x39, 0x00, 0xc4, 0x06, 0x22, 0xf1, 0xf3, 0xff, 0x6c, 0x00, 0x68, 0x06, + 0xa1, 0xff, 0x1c, 0x04, 0x41, 0x4d, 0x28, 0x39, 0x20, 0x00, 0x28, 0x00, + 0x3e, 0x28, 0x3f, 0x41, 0x42, 0x28, 0x47, 0x3e, 0x04, 0x32, 0x04, 0x29, + 0x0d, 0xc3, 0xff, 0x80, 0x10, 0x0e, 0xb0, 0x7f, 0x3b, 0x1b, 0x18, 0x15, + 0x19, 0x1b, 0x3b, 0x09, 0x3b, 0x22, 0x1b, 0x26, 0x20, 0x05, 0x3b, 0x3b, + 0x01, 0x2f, 0xff, 0x40, 0x7e, 0x78, 0x3b, 0xb8, 0x30, 0xe3, 0x30, 0xfc, + 0x30, 0x6e, 0xb8, 0x20, 0x03, 0x06, 0x58, 0x41, 0x4a, 0x4f, 0xf5, 0x06, + 0x5f, 0x73, 0x10, 0x0f, 0x30, 0x7f, 0xfd, 0x10, 0x6c, 0x7f, 0x89, 0x06, + 0xa7, 0x3a, 0x00, 0x00, 0xc8, 0xc0, 0x6b, 0xc9, 0x06, 0xb8, 0x3d, 0x07, + 0x13, 0x7f, 0xe9, 0x43, 0xff, 0x69, 0x2c, 0x33, 0x06, 0x3f, 0xf7, 0x04, + 0x14, 0x04, 0x36, 0x04, 0x35, 0x28, 0x31, 0x41, 0x04, 0x20, 0x38, 0x04, + 0x10, 0x1e, 0x34, 0xff, 0x3c, 0x1d, 0x1d, 0x17, 0x1b, 0x00, 0x1e, 0x3c, + 0x3c, 0x18, 0x20, 0x11, 0x1d, 0x3c, 0x14, 0x3c, 0x3c, 0x3c, 0x01, 0x2f, + 0xff, 0x7f, 0x78, 0x3b, 0xe2, 0x30, 0x0a, 0xca, 0x30, 0xb3, 0x30, 0x06, + 0xbc, 0xf7, 0x6f, 0x2f, 0xe9, 0x61, 0x3a, 0x00, 0x63, 0x2f, 0x77, 0x10, + 0x06, 0xf0, 0x7f, 0x3d, 0x7d, 0x50, 0x29, 0xc9, 0x69, 0xaa, 0x2f, 0xf9, + 0x63, 0x25, 0xcd, 0x70, 0x2e, 0x93, 0x74, 0x40, 0x17, 0x64, 0xc4, 0x25, + 0xdb, 0x04, 0x5d, 0x8b, 0x4d, 0x00, 0xf3, 0x06, 0xc1, 0xff, 0x69, 0x64, + 0x08, 0xb3, 0x7e, 0xe5, 0x54, 0x06, 0x9f, 0xf7, 0xa8, 0xba, 0x98, 0x18, + 0xb0, 0x54, 0xcf, 0x0e, 0xb3, 0x7f, 0x06, 0xd1, 0xff, 0x1c, 0x04, 0x3e, + 0x03, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x3a, 0x20, 0x07, 0x10, 0x0e, 0xf4, + 0xff, 0x80, 0x0e, 0x36, 0xff, 0x3d, 0x27, 0x27, 0x22, 0x25, 0x28, 0x3d, + 0x00, 0x3d, 0x24, 0x2b, 0x25, 0x27, 0x3d, 0x3d, 0x3d, 0x48, 0x3d, 0x01, + 0x2f, 0xff, 0xa9, 0x22, 0x6f, 0xff, 0xa4, 0x30, 0xf3, 0x2f, 0x30, 0xc9, + 0x06, 0xa8, 0x3b, 0x49, 0x28, 0x39, 0x36, 0x99, 0x06, 0x5c, 0x75, 0x70, + 0x7f, 0x5c, 0x65, 0x07, 0x00, 0xff, 0x65, 0x29, 0x41, 0x0e, 0x91, 0x7f, + 0x06, 0x91, 0xff, 0x70, 0x53, 0x20, 0xa6, 0x5e, 0x06, 0x9b, 0x39, 0x00, + 0x00, 0x78, 0xc7, 0xc4, 0x6a, 0xb3, 0x06, 0xb0, 0x7f, 0x06, 0xf3, 0x7f, + 0xcd, 0x06, 0xe3, 0xff, 0x18, 0x28, 0x39, 0x34, 0x0e, 0x04, 0x38, 0x04, + 0x4f, 0x06, 0x48, 0x39, 0x0f, 0x13, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x3e, + 0x00, 0x19, 0x19, 0x12, 0x16, 0x19, 0x3e, 0x3e, 0x16, 0x24, 0x1c, 0x15, + 0x20, 0x05, 0x3e, 0x3e, 0x01, 0x2f, 0xff, 0xb8, 0x01, 0xa0, 0x6f, 0xff, + 0xb5, 0x28, 0x3b, 0xde, 0x30, 0xea, 0x30, 0xce, 0xab, 0x06, 0x68, 0x3f, + 0x53, 0x2f, 0xf3, 0x6e, 0x2e, 0xf1, 0x4d, 0x2f, 0xfb, 0x5e, 0xf1, 0xe3, + 0x05, 0xdf, 0xff, 0x30, 0x7f, 0x3f, 0x67, 0x74, 0x00, 0x2d, 0xa0, 0x83, + 0x0d, 0xd0, 0xff, 0x80, 0x0e, 0xb0, 0x7f, 0x23, 0x57, 0x6c, 0x9a, 0x9b, + 0x52, 0xfa, 0x40, 0x8b, 0x06, 0x7f, 0xf9, 0xb0, 0xc0, 0xc8, 0xb9, 0xac, + 0xb9, 0x36, 0x78, 0xb1, 0x06, 0x7b, 0xbd, 0x07, 0x13, 0x7f, 0xe3, 0x2f, + 0x79, 0xb3, 0xff, 0x68, 0x88, 0x05, 0xcf, 0x81, 0x21, 0x04, 0x30, 0x28, + 0x3d, 0x2d, 0x00, 0x1c, 0xa3, 0x20, 0x07, 0x40, 0x28, 0x43, 0x3d, 0x04, + 0x3e, 0x05, 0xc8, 0x45, 0x10, 0x06, 0xf3, 0xff, 0x80, 0x0e, 0xf5, 0x7f, + 0x3f, 0x33, 0x35, 0x30, 0x33, 0x36, 0x3f, 0x00, 0x3f, 0x31, 0x38, 0x30, + 0x33, 0x3f, 0x3f, 0x3f, 0x50, 0x3f, 0x01, 0x2f, 0xff, 0xb9, 0x78, 0x3b, + 0xd0, 0x30, 0xc1, 0x30, 0x6a, 0xab, 0x28, 0x3f, 0x06, 0x7f, 0x78, 0x56, + 0x2e, 0xf1, 0x74, 0x2f, 0x77, 0x63, 0xa3, 0x68, 0x43, 0x43, 0x2f, 0x83, + 0x74, 0x00, 0x79, 0x06, 0x60, 0x7f, 0x06, 0x90, 0xff, 0x55, 0x6b, 0x49, + 0x43, 0x73, 0x28, 0xc3, 0x61, 0x2f, 0x87, 0x74, 0x06, 0x61, 0x7f, 0xa2, + 0x35, 0xc5, 0x28, 0x61, 0x83, 0x74, 0x00, 0xe0, 0x29, 0xd3, 0x64, 0x03, + 0x00, 0x65, 0x00, 0x6c, 0x00, 0x29, 0x05, 0x80, 0x7f, 0x05, 0xff, 0xff, + 0x02, 0xb5, 0x68, 0x82, 0x84, 0x88, 0x51, 0x06, 0x9f, 0xf9, 0x14, 0x07, + 0xbc, 0xf0, 0xd2, 0x78, 0xce, 0x06, 0x90, 0x7f, 0xb3, 0x7f, 0xb2, 0x81, + 0xab, 0x06, 0xb2, 0x7f, 0x63, 0x2f, 0x87, 0x64, 0x43, 0x07, 0x65, 0x04, + 0xa2, 0x79, 0x5f, 0xff, 0x57, 0x12, 0x28, 0x3b, 0x42, 0x28, 0x33, 0x3a, + 0x48, 0x43, 0x0e, 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x20, 0x40, 0x40, + 0x20, 0x01, 0x3f, 0x40, 0x40, 0x3c, 0x40, 0x64, 0x09, 0x40, 0x0a, 0x01, + 0x2f, 0xff, 0x41, 0x08, 0x6f, 0xff, 0xaa, 0x30, 0x00, 0xfc, 0x30, 0xb9, + 0x30, 0xc8, 0x30, 0xe9, 0x30, 0x11, 0xea, 0x30, 0xa2, 0x06, 0x28, 0x41, + 0x41, 0x00, 0x75, 0x47, 0x31, 0x55, 0x72, 0x2f, 0xff, 0x6c, 0x2f, 0xf3, + 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x07, 0x00, 0x7f, 0xe0, 0x05, 0xd8, 0xc1, + 0x07, 0xf1, 0x7f, 0x05, 0xf1, 0xff, 0xb3, 0x6f, 0x27, 0x59, 0x29, 0x10, + 0x52, 0x9a, 0x4e, 0x06, 0x7f, 0xf7, 0x24, 0xc6, 0xa4, 0xc2, 0x00, 0xb8, + 0xd2, 0x08, 0xb8, 0x7c, 0xc7, 0xac, 0xb9, 0x2a, 0x44, 0xc5, 0x07, 0x13, + 0x7f, 0xeb, 0x06, 0x83, 0xff, 0xe1, 0x06, 0x43, 0xff, 0x10, 0x0a, 0x04, + 0x32, 0x04, 0x41, 0x28, 0x3d, 0x40, 0x28, 0x43, 0x3b, 0xb8, 0x28, 0x43, + 0x4f, 0x05, 0xe8, 0x3f, 0x0e, 0xf3, 0x7f, 0x10, 0x07, 0x00, 0xff, 0x02, + 0x04, 0x03, 0x10, 0x02, 0x03, 0x41, 0x20, 0x06, 0x00, 0x02, 0x41, 0x41, + 0x24, 0x41, 0x41, 0x01, 0x2f, 0xff, 0x5f, 0x10, 0x6f, 0xff, 0xcb, 0x30, + 0x50, 0xe5, 0x28, 0x3d, 0xb8, 0x28, 0x41, 0xe9, 0x30, 0xf3, 0x30, 0x55, + 0xc9, 0x06, 0x08, 0x3d, 0x4e, 0x2e, 0xd7, 0x77, 0x2e, 0xed, 0x5a, 0x2e, + 0xdf, 0xf5, 0x38, 0x3d, 0x3f, 0xfd, 0x05, 0x9c, 0xf5, 0x30, 0x7f, 0x6f, + 0x28, 0xbd, 0x76, 0x4f, 0x5d, 0x57, 0x6c, 0x2f, 0x63, 0x2d, 0x20, 0x89, + 0xe9, 0x80, 0x87, 0x05, 0x18, 0x49, 0x30, 0xff, 0xba, 0x39, 0x3d, 0x65, + 0x4f, 0xdf, 0x05, 0xf0, 0xfd, 0x31, 0x7f, 0x75, 0x2f, 0xed, 0x76, 0xfa, + 0x2f, 0xfd, 0x51, 0x83, 0x71, 0x81, 0x05, 0x79, 0xc3, 0x30, 0x7f, 0x65, + 0x06, 0xa0, 0x7f, 0xb0, 0x04, 0x65, 0x7f, 0x89, 0x70, 0x51, 0x06, 0x9f, + 0xf7, 0x74, 0xb2, 0x02, 0xc8, 0xc9, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x78, + 0xbb, 0x4e, 0xbe, 0x4b, 0x2f, 0x75, 0x23, 0x83, 0x32, 0xf9, 0x06, 0x12, + 0x85, 0x33, 0x7f, 0xb2, 0x7d, 0xe2, 0xc5, 0x43, 0xff, 0x05, 0x9c, 0x43, + 0x1d, 0x04, 0x3e, 0x28, 0x3d, 0x30, 0x28, 0x33, 0x04, 0x20, 0x00, 0x17, + 0x04, 0x35, 0x28, 0x3f, 0x30, 0x04, 0x1c, 0x3d, 0x04, 0x34, 0x05, 0x88, + 0x45, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x42, 0x2c, 0x00, 0x2d, + 0x26, 0x2b, 0x2e, 0x42, 0x42, 0x29, 0x30, 0x02, 0x2a, 0x2c, 0x42, 0x42, + 0x42, 0x42, 0x00, 0xff, 0xff, 0x02, 0x95, 0x5f, 0xff, 0x4d, 0x1b, 0x6f, + 0xff, 0xd5, 0x48, 0x37, 0xb9, 0x06, 0x08, 0x37, 0xa3, 0x7f, 0xff, 0x46, + 0x4f, 0xf5, 0x6e, 0x00, 0x63, 0x06, 0x0f, 0xf5, 0x07, 0xd0, 0x7f, 0x51, + 0x6b, 0x2f, 0xfd, 0x65, 0x2f, 0xfb, 0x63, 0x00, 0x68, 0x06, 0x61, 0x7f, + 0xc2, 0x06, 0x1f, 0xf7, 0x07, 0x30, 0x7f, 0xd5, 0x6c, 0xfd, 0x56, 0x06, + 0x98, 0x3d, 0x00, 0x01, 0x00, 0x04, 0xd5, 0x91, 0xb7, 0xa4, 0xc2, 0x06, + 0x98, 0xbf, 0x8d, 0xb2, 0x7f, 0x69, 0x00, 0x6a, 0x22, 0x87, 0x06, 0x53, + 0xff, 0xe7, 0x06, 0x42, 0x7d, 0x05, 0x00, 0x00, 0x24, 0x04, 0x40, 0x48, + 0x31, 0x46, 0x05, 0x88, 0x31, 0xc0, 0x10, 0x00, 0x54, 0xff, 0x10, 0x06, + 0x70, 0xff, 0x0c, 0x12, 0x13, 0x0e, 0x10, 0x14, 0x00, 0x0c, 0x0c, 0x0f, + 0x16, 0x39, 0x12, 0x0c, 0x0c, 0x24, 0x0c, 0x0c, 0x01, 0x2f, 0xff, 0x6e, + 0x0d, 0x6f, 0xff, 0xa4, 0x30, 0x14, 0xae, 0x30, 0xea, 0x06, 0xa8, 0x3b, + 0x55, 0x2f, 0xe3, 0x69, 0x00, 0x54, 0x74, 0x2f, 0xfb, 0x64, 0x2e, 0xfd, + 0x4b, 0x2d, 0x09, 0x6e, 0x00, 0x45, 0x67, 0x2f, 0xf5, 0x6f, 0x00, 0x6d, + 0x05, 0x4f, 0x83, 0x52, 0x2f, 0x79, 0x57, 0x79, 0x2f, 0xf3, 0x75, 0x20, + 0x6f, 0x65, 0x2d, 0x7f, 0x50, 0x8f, 0x05, 0x9f, 0xfe, 0x75, 0x56, 0x2f, + 0xef, 0x58, 0x35, 0x31, 0x07, 0x67, 0x41, 0x09, 0x73, 0x41, 0x09, 0x6a, + 0xf6, 0x60, 0x11, 0x04, 0xd8, 0x53, 0x52, 0x2f, 0xf9, 0x67, 0x2f, 0xed, + 0x6f, 0xdf, 0x2f, 0xfb, 0x71, 0x8b, 0x6f, 0x05, 0xaf, 0x8a, 0x30, 0x7f, + 0x31, 0xf3, 0x90, 0x7f, 0x31, 0xfb, 0x90, 0x05, 0x9f, 0xff, 0xf1, 0x82, + 0x06, 0xd8, 0x3b, 0x01, 0xc6, 0x6d, 0xad, 0xf7, 0x06, 0xb8, 0xbb, 0x72, + 0x7f, 0x52, 0x7d, 0x53, 0x83, 0x6f, 0x43, 0x93, 0x05, 0x58, 0x4f, 0x06, + 0xf1, 0xff, 0x04, 0x12, 0x04, 0x35, 0x04, 0x3b, 0x28, 0x37, 0x3a, 0x04, + 0x11, 0x3e, 0x04, 0x31, 0x28, 0x47, 0x38, 0x04, 0x42, 0x48, 0x4b, 0xe0, + 0x05, 0x78, 0x49, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x2c, 0x3f, + 0x33, 0x41, 0x2f, 0x00, 0x32, 0x2c, 0x2c, 0x3d, 0x34, 0x0a, 0x3f, 0x2c, + 0x1a, 0x2c, 0x2c, 0x2c, 0x01, 0x24, 0xb1, 0x64, 0xb8, 0x03, 0x60, 0x06, + 0x05, 0x00, 0x2a, 0x03, 0x04, 0x01, 0x01, 0x2c, 0x05, 0x01, 0x00, 0x03, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x05, 0x07, 0x00, 0x04, 0x05, 0x06, 0x02, + 0x02, 0x04, 0x07, 0x05, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x03, 0x06, + 0x08, 0x00, 0x05, 0x06, 0x07, 0x03, 0x03, 0x05, 0x08, 0x07, 0x00, 0x06, + 0x03, 0x03, 0x03, 0x03, 0x04, 0x07, 0x09, 0x00, 0x06, 0x07, 0x08, 0x04, + 0x04, 0x06, 0x09, 0x08, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x05, 0x08, + 0x0a, 0x01, 0x07, 0x08, 0x09, 0x05, 0x05, 0x07, 0x0a, 0x20, 0x28, 0x00, + 0x05, 0x05, 0x05, 0x06, 0x0a, 0x0c, 0x18, 0x0b, 0x00, 0x0c, 0x06, 0x06, + 0x19, 0x0d, 0x3a, 0x0a, 0x06, 0x00, 0x06, 0x06, 0x06, 0x07, 0x0b, 0x0b, + 0x42, 0x0a, 0x03, 0x0b, 0x07, 0x07, 0x08, 0x0c, 0x1a, 0x20, 0x05, 0x30, + 0x07, 0x00, 0x31, 0x3d, 0x30, 0x33, 0x08, 0x08, 0x3a, 0x35, 0x00, 0x3d, + 0x0c, 0x08, 0x08, 0x08, 0x08, 0x09, 0x0d, 0x00, 0x0d, 0x08, 0x0c, 0x0d, + 0x09, 0x09, 0x09, 0x0e, 0x40, 0x10, 0x30, 0x05, 0x09, 0x0a, 0x10, 0x11, + 0x0c, 0x0e, 0x00, 0x12, 0x0a, 0x0a, 0x0d, 0x14, 0x41, 0x10, 0x0a, 0x00, + 0x0a, 0x0a, 0x0a, 0x0b, 0x11, 0x12, 0x0d, 0x0f, 0x00, 0x13, 0x0b, 0x0b, + 0x0e, 0x15, 0x38, 0x11, 0x0b, 0x10, 0x0b, 0x0b, 0x0b, 0xf9, 0x2b, 0x0d, + 0x13, 0x02, 0x09, 0x00, 0x11, 0x01, 0x0d, 0x0d, 0x0b, 0x02, 0x0c, 0x13, + 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x15, 0x15, 0x10, 0x00, 0x14, 0x16, + 0x0e, 0x0e, 0x11, 0x18, 0x0f, 0x15, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, + 0x17, 0x17, 0x3f, 0x00, 0x3f, 0x18, 0x0f, 0x0f, 0x13, 0x1a, 0x0b, 0x17, + 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x18, 0x1b, 0x14, 0x00, 0x18, 0x1c, + 0x10, 0x10, 0x15, 0x1e, 0x17, 0x18, 0x00, 0x10, 0x10, 0x10, 0x10, 0x11, + 0x1a, 0x1a, 0x13, 0x01, 0x17, 0x1a, 0x11, 0x11, 0x14, 0x1d, 0x16, 0x20, + 0x05, 0x00, 0x11, 0x11, 0x12, 0x1c, 0x1c, 0x16, 0x1a, 0x1d, 0x00, 0x12, + 0x12, 0x17, 0x1f, 0x19, 0x1c, 0x12, 0x12, 0x00, 0x12, 0x12, 0x13, 0x1e, + 0x1f, 0x1a, 0x1d, 0x20, 0x00, 0x13, 0x13, 0x1b, 0x22, 0x1b, 0x1e, 0x13, + 0x13, 0x00, 0x13, 0x13, 0x14, 0x1f, 0x1e, 0x19, 0x1c, 0x1f, 0x08, 0x14, + 0x14, 0x1a, 0x21, 0x30, 0x05, 0x14, 0x14, 0x15, 0x00, 0x20, 0x20, 0x1b, + 0x1e, 0x21, 0x15, 0x15, 0x1c, 0x00, 0x23, 0x1e, 0x20, 0x15, 0x15, 0x15, + 0x15, 0x16, 0x40, 0x21, 0x20, 0x18, 0x22, 0x16, 0x16, 0x1d, 0x24, 0x1d, + 0x00, 0x21, 0x16, 0x16, 0x16, 0x16, 0x17, 0x22, 0x22, 0x00, 0x1d, 0x20, + 0x23, 0x17, 0x17, 0x1e, 0x25, 0x1f, 0x00, 0x22, 0x17, 0x17, 0x17, 0x17, + 0x18, 0x23, 0x23, 0x00, 0x21, 0x21, 0x24, 0x18, 0x18, 0x1f, 0x26, 0x21, + 0x00, 0x23, 0x18, 0x18, 0x18, 0x18, 0x19, 0x25, 0x25, 0x00, 0x1f, 0x23, + 0x26, 0x19, 0x19, 0x21, 0x28, 0x23, 0x00, 0x25, 0x19, 0x19, 0x19, 0x19, + 0x1a, 0x28, 0x28, 0x00, 0x23, 0x26, 0x29, 0x1a, 0x1a, 0x25, 0x2c, 0x3c, + 0x00, 0x28, 0x1a, 0x1a, 0x1a, 0x1a, 0x1b, 0x29, 0x29, 0x00, 0x24, 0x27, + 0x2a, 0x1b, 0x1b, 0x26, 0x2a, 0x24, 0x00, 0x29, 0x1b, 0x1b, 0x1b, 0x1b, + 0x1c, 0x2a, 0x2a, 0x00, 0x25, 0x28, 0x2b, 0x1c, 0x1c, 0x27, 0x2d, 0x27, + 0x00, 0x2a, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x2b, 0x2e, 0x00, 0x27, 0x2c, + 0x2f, 0x1d, 0x1d, 0x28, 0x31, 0x29, 0x00, 0x2b, 0x1d, 0x1d, 0x1d, 0x1d, + 0x1e, 0x2e, 0x2c, 0x00, 0x29, 0x2a, 0x2d, 0x1e, 0x1e, 0x2b, 0x2f, 0x2b, + 0x00, 0x2e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x2f, 0x2f, 0x00, 0x2b, 0x2d, + 0x30, 0x1f, 0x1f, 0x2d, 0x32, 0x2c, 0x00, 0x2f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x20, 0x30, 0x30, 0x00, 0x2c, 0x2e, 0x31, 0x20, 0x20, 0x2e, 0x33, 0x2d, + 0x00, 0x30, 0x20, 0x20, 0x20, 0x20, 0x21, 0x31, 0x32, 0x00, 0x2d, 0x31, + 0x34, 0x21, 0x21, 0x2f, 0x36, 0x2f, 0x00, 0x31, 0x21, 0x21, 0x21, 0x21, + 0x22, 0x32, 0x34, 0x00, 0x2e, 0x32, 0x35, 0x22, 0x22, 0x30, 0x37, 0x2e, + 0x00, 0x32, 0x22, 0x22, 0x22, 0x22, 0x23, 0x34, 0x36, 0x00, 0x33, 0x34, + 0x37, 0x23, 0x23, 0x32, 0x39, 0x32, 0x00, 0x34, 0x23, 0x23, 0x23, 0x23, + 0x24, 0x35, 0x37, 0x00, 0x35, 0x35, 0x0f, 0x24, 0x24, 0x34, 0x11, 0x33, + 0x00, 0x35, 0x24, 0x24, 0x24, 0x24, 0x25, 0x36, 0x38, 0x00, 0x36, 0x36, + 0x10, 0x25, 0x25, 0x33, 0x12, 0x34, 0x00, 0x36, 0x25, 0x25, 0x25, 0x25, + 0x26, 0x38, 0x00, 0x00, 0x39, 0x39, 0x3a, 0x26, 0x26, 0x40, 0x00, 0x42, + 0x00, 0x38, 0x26, 0x26, 0x26, 0x26, 0x27, 0x39, 0x10, 0x00, 0x38, 0x38, + 0x11, 0x27, 0x27, 0x37, 0x13, 0x18, 0x00, 0x39, 0x27, 0x27, 0x27, 0x27, + 0x28, 0x3b, 0x3d, 0x00, 0x3b, 0x3d, 0x39, 0x28, 0x28, 0x38, 0x3b, 0x31, + 0x01, 0x3b, 0x28, 0x28, 0x28, 0x28, 0x29, 0x3c, 0x20, 0x08, 0x02, 0x3c, + 0x29, 0x29, 0x41, 0x3d, 0x3f, 0x20, 0x05, 0x29, 0x00, 0x29, 0x2a, 0x3d, + 0x3c, 0x32, 0x3c, 0x3d, 0x2a, 0x08, 0x2a, 0x42, 0x3e, 0x3e, 0x20, 0x05, + 0x2a, 0x2a, 0x2b, 0x00, 0x3e, 0x3f, 0x3e, 0x3e, 0x3e, 0x2b, 0x2b, 0x3b, + 0x24, 0x3f, 0x37, 0x20, 0x05, 0x2b, 0x2b, 0xf2, 0xef, 0x2d, 0x41, 0x00, + 0x41, 0x2f, 0x41, 0x41, 0x2d, 0x2d, 0x3e, 0x41, 0x40, 0x13, 0x20, 0x05, + 0x2d, 0x2d, 0x2e, 0x42, 0x42, 0x34, 0x01, 0x42, 0x42, 0x2e, 0x2e, 0x3f, + 0x42, 0x14, 0x20, 0x05, 0x00, 0x2e, 0x2e, 0x2f, 0x04, 0x06, 0x02, 0x04, + 0x05, 0x10, 0x2f, 0x2f, 0x03, 0x20, 0x06, 0x2f, 0x2f, 0x2f, 0x2f, 0x00, + 0x30, 0x26, 0x26, 0x20, 0x24, 0x27, 0x30, 0x30, 0x00, 0x23, 0x29, 0x20, + 0x26, 0x30, 0x30, 0x30, 0x30, 0x00, 0x31, 0x24, 0x24, 0x1e, 0x22, 0x25, + 0x31, 0x31, 0x01, 0x20, 0x27, 0x22, 0x24, 0x31, 0x31, 0x31, 0x21, 0x0d, + 0x00, 0x2b, 0x28, 0x29, 0x2c, 0x32, 0x32, 0x2a, 0x2e, 0x00, 0x28, 0x2d, + 0x32, 0x32, 0x32, 0x32, 0x33, 0x09, 0x00, 0x3e, 0x3c, 0x09, 0x0a, 0x33, + 0x33, 0x39, 0x0b, 0x00, 0x3b, 0x09, 0x33, 0x33, 0x33, 0x33, 0x34, 0x3a, + 0x00, 0x3a, 0x3a, 0x3a, 0x3b, 0x34, 0x34, 0x35, 0x3c, 0x08, 0x36, 0x3a, + 0x34, 0x34, 0x20, 0x07, 0x0f, 0x0f, 0x0b, 0x00, 0x0d, 0x0e, 0x35, 0x35, + 0x0c, 0x10, 0x40, 0x0f, 0x00, 0x35, 0x35, 0x35, 0x35, 0x36, 0x0e, 0x0e, + 0x0a, 0x00, 0x13, 0x40, 0x36, 0x36, 0x0a, 0x0f, 0x12, 0x0e, 0x00, 0x36, + 0x36, 0x36, 0x36, 0x37, 0x37, 0x39, 0x37, 0x00, 0x37, 0x38, 0x37, 0x37, + 0x36, 0x3a, 0x35, 0x37, 0x52, 0x37, 0x20, 0x01, 0x38, 0x33, 0x66, 0x02, + 0x38, 0x20, 0x06, 0x04, 0x00, 0x01, 0x38, 0x38, 0x38, 0x38, 0x39, 0x14, + 0x14, 0x00, 0x0f, 0x12, 0x15, 0x39, 0x39, 0x10, 0x17, 0x0e, 0x10, 0x14, + 0x39, 0x39, 0x21, 0x3a, 0x16, 0x16, 0x11, 0x15, 0x01, 0x17, 0x3a, 0x3a, + 0x12, 0x19, 0x0d, 0x16, 0x40, 0x6a, 0x00, 0x1b, 0x18, 0x15, 0x19, 0x1b, + 0x3b, 0x3b, 0x22, 0x20, 0x1b, 0x26, 0x20, 0x05, 0x3b, 0x3b, 0x3c, 0x1d, + 0x1d, 0x00, 0x17, 0x1b, 0x1e, 0x3c, 0x3c, 0x18, 0x20, 0x11, 0x00, 0x1d, + 0x3c, 0x3c, 0x3c, 0x3c, 0x3d, 0x27, 0x27, 0x00, 0x22, 0x25, 0x28, 0x3d, + 0x3d, 0x24, 0x2b, 0x25, 0x00, 0x27, 0x3d, 0x3d, 0x3d, 0x3d, 0x3e, 0x19, + 0x19, 0x00, 0x12, 0x16, 0x19, 0x3e, 0x3e, 0x16, 0x1c, 0x15, 0x80, 0x20, + 0x05, 0x3e, 0x3e, 0x3f, 0x33, 0x35, 0x30, 0x33, 0x00, 0x36, 0x3f, 0x3f, + 0x31, 0x38, 0x30, 0x33, 0x3f, 0x06, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x20, + 0x01, 0x20, 0x05, 0x3c, 0x20, 0x40, 0x09, 0x40, 0x0a, 0x41, 0x02, 0x04, + 0x03, 0x02, 0x20, 0x03, 0x41, 0x20, 0x06, 0x00, 0x02, 0x41, 0x41, 0x41, + 0x02, 0x41, 0x42, 0x2c, 0x2d, 0x26, 0x2b, 0x21, 0x44, 0x29, 0x01, 0x30, + 0x2a, 0x2c, 0x42, 0x42, 0x42, 0x42, 0x6f, 0xff, 0x40, 0x40, 0x3f, 0xff, + 0x11, 0x90, 0x87, 0x01, 0x11, 0x2f, 0x00, 0x00, 0x30, 0x01, 0x01, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x60, 0x19, 0x63, 0x63, 0x00, 0x00, 0x00, 0x02, 0x01, 0x71, 0x67, + 0xac, 0x4e, 0xfd, 0x40, 0x90, 0x06, 0x98, 0x1b, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x69, 0x79, 0x20, 0x05, 0x0e, 0xb0, 0x7f, 0x69, 0x10, 0x06, + 0x80, 0xff, 0x1c, 0x4e, 0x06, 0xd2, 0xff, 0x07, 0xc4, 0xb3, 0xc4, 0xcf, + 0x20, 0x20, 0x05, 0x06, 0xd3, 0x7f, 0x06, 0xb2, 0x7f, 0x04, 0xf3, 0x00, + 0x71, 0x00, 0x75, 0x06, 0x83, 0x01, 0x22, 0x04, 0x07, 0x3e, 0x04, 0x3a, + 0x04, 0x38, 0x20, 0x05, 0x06, 0x5d, 0x1f, 0x10, 0x07, 0x55, 0x7f, 0x98, + 0x0e, 0x96, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x03, 0x01, 0x17, + 0x0a, 0x53, 0x77, 0x6d, 0x53, 0x06, 0xa8, 0x17, 0x48, 0x48, 0x17, 0x6b, + 0x2e, 0x00, 0x61, 0x27, 0x1b, 0x64, 0x06, 0x28, 0x1d, 0x10, 0x07, 0x50, + 0x7f, 0x06, 0x71, 0xfd, 0x00, 0x40, 0x00, 0x06, 0xf2, 0xff, 0x4b, 0xd6, + 0x74, 0xce, 0x74, 0xc7, 0xd0, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x25, + 0x48, 0x17, 0x3a, 0x04, 0x30, 0x04, 0x19, 0x39, 0x04, 0x34, 0x06, 0x28, + 0x1d, 0x10, 0x16, 0xf5, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x00, 0x9e, 0x1e, + 0x80, 0x64, 0x00, 0x00, 0x04, 0x01, 0x02, 0x52, 0x97, 0xee, 0x68, 0x0c, + 0x77, 0x06, 0x9d, 0x2f, 0x41, 0xae, 0x2f, 0xaf, 0x6d, 0x2f, 0xb3, 0x72, + 0x2f, 0x33, 0x10, 0x16, 0x30, 0x7f, 0x32, 0xff, 0xbf, 0x40, 0x53, 0x06, + 0x9d, 0xaf, 0x44, 0xc5, 0x24, 0xc6, 0xa8, 0xba, 0x02, 0xac, 0xb9, 0x20, + 0x00, 0x04, 0xd6, 0x10, 0x06, 0x33, 0x7f, 0x10, 0xa3, 0x28, 0x17, 0x3c, + 0x28, 0x1b, 0x40, 0x04, 0x38, 0x06, 0x08, 0x13, 0x72, 0x7f, 0x24, 0x23, + 0x7e, 0x10, 0x16, 0x95, 0x7f, 0x03, 0x03, 0xd0, 0x01, 0x06, 0x1d, 0x40, + 0x1a, 0x28, 0x17, 0x05, 0x01, 0xa9, 0x5c, 0x4b, 0x62, 0x88, 0x06, 0xb8, + 0x17, 0x49, 0x00, 0x77, 0x2f, 0xab, 0x74, 0x00, 0x65, 0xe0, 0x10, 0x16, + 0x60, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x74, 0xc7, 0x40, 0xc6, 0x4c, + 0x60, 0xd1, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x18, 0x04, 0x32, 0x04, + 0x30, 0x0f, 0x04, 0x42, 0x04, 0x4d, 0x06, 0x48, 0x15, 0x52, 0x7f, 0x06, + 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x04, 0x04, 0xd0, 0x01, 0x3a, + 0x1c, 0x62, 0x28, 0x17, 0x06, 0x05, 0x01, 0xae, 0x5b, 0xce, 0x57, 0x06, + 0xb8, 0x17, 0x4d, 0x2f, 0xa7, 0x5b, 0x79, 0x28, 0x19, 0x67, 0x06, 0x6f, + 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xab, 0x22, 0xff, 0x06, 0xb8, 0x17, 0x03, + 0xf8, 0xbb, 0x7c, 0xc5, 0x30, 0xae, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, + 0x01, 0x1c, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x33, 0x20, 0x05, 0xf2, 0x06, + 0x5f, 0xb3, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x05, + 0x05, 0xd0, 0x01, 0x34, 0x20, 0x1b, 0x32, 0x28, 0x17, 0x07, 0x01, 0xcb, + 0x79, 0x30, 0x45, 0x75, 0x06, 0xb8, 0x17, 0x41, 0x00, 0x6b, 0x28, 0x19, + 0x74, 0x2f, 0xb3, 0xe0, 0x10, 0x16, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, + 0x17, 0x44, 0xc5, 0xa4, 0xd0, 0xc0, 0x62, 0xd0, 0x06, 0x98, 0x17, 0x0e, + 0xf3, 0x7f, 0x10, 0x04, 0x3a, 0x28, 0x19, 0x42, 0x3c, 0x04, 0x30, 0x06, + 0x68, 0x17, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x06, + 0x06, 0x80, 0xd0, 0x01, 0x3d, 0x1c, 0xa0, 0x63, 0x00, 0x00, 0x08, 0x05, + 0x01, 0x71, 0x5c, 0x62, 0x5f, 0x06, 0xb8, 0x17, 0x59, 0x2f, 0xab, 0x5e, + 0x6d, 0x4f, 0xaf, 0x61, 0x06, 0x48, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0x32, + 0xff, 0x06, 0xb8, 0x17, 0x7c, 0x06, 0xc5, 0xc8, 0xb9, 0x00, 0xac, 0x06, + 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x2f, 0x2f, 0x04, 0x3c, 0x28, 0x13, 0x33, + 0x28, 0x17, 0x06, 0x58, 0x1b, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, + 0x0e, 0xf5, 0x7f, 0x07, 0x07, 0xd0, 0x01, 0x33, 0x1b, 0xcd, 0x28, 0x17, + 0x02, 0x09, 0x01, 0x8f, 0x79, 0xf6, 0x5c, 0x06, 0xb8, 0x17, 0x46, 0x20, + 0x00, 0x75, 0x2f, 0xb1, 0x75, 0x00, 0x73, 0x00, 0x68, 0xe1, 0x2f, 0xb7, + 0x38, 0x21, 0x10, 0x15, 0xd0, 0x7f, 0x8f, 0x79, 0x9b, 0x5c, 0x06, 0xb8, + 0x17, 0x00, 0xc4, 0xd6, 0xe0, 0xcf, 0xdc, 0xc2, 0xc8, 0xb9, 0xc1, 0x06, + 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x24, 0x04, 0x43, 0x04, 0x3a, 0x20, 0x03, + 0x1f, 0x41, 0x04, 0x38, 0x48, 0x21, 0x05, 0xff, 0xb9, 0x35, 0x7f, 0x06, + 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x08, 0x08, 0xd0, 0x01, 0xd9, + 0x1a, 0xe4, 0x28, 0x17, 0x0a, 0x04, 0x01, 0x28, 0x83, 0xce, 0x57, 0x06, + 0xb8, 0x17, 0x49, 0x00, 0x57, 0x62, 0x2f, 0xb1, 0x72, 0x2f, 0xb5, 0x6b, + 0x28, 0x17, 0x10, 0x16, 0x10, 0x7f, 0x32, 0xff, 0x80, 0x06, 0xb8, 0x17, + 0x74, 0xc7, 0x14, 0xbc, 0x7c, 0xb7, 0xa4, 0x62, 0xd0, 0x06, 0x78, 0x17, + 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x31, 0x28, 0x0d, 0x40, 0xbc, 0x28, 0x11, + 0x3a, 0x28, 0x19, 0x06, 0x52, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, + 0x7f, 0x09, 0x09, 0x90, 0xd0, 0x01, 0xde, 0x19, 0x38, 0x17, 0x0b, 0x01, + 0x03, 0x68, 0x20, 0x28, 0x67, 0x06, 0xb8, 0x17, 0x54, 0x00, 0x6f, 0x00, + 0x63, 0xb0, 0x4f, 0xab, 0x67, 0x06, 0x48, 0x17, 0x10, 0x0e, 0xf0, 0x7f, + 0xa5, 0x67, 0x28, 0x67, 0x81, 0x06, 0xb8, 0x17, 0xc4, 0xb3, 0x58, 0xce, + 0x30, 0xae, 0x06, 0x78, 0x15, 0x82, 0x0f, 0x13, 0x7f, 0x22, 0x04, 0x3e, + 0x04, 0x42, 0x28, 0x11, 0x33, 0x8e, 0x06, 0x48, 0x15, 0x00, 0x00, 0x8b, + 0x22, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x0a, 0x44, 0x0a, + 0xd0, 0x01, 0xfd, 0x19, 0x76, 0x28, 0x17, 0x0c, 0x01, 0x08, 0xa4, 0x7f, + 0xac, 0x99, 0x06, 0xb8, 0x17, 0x47, 0x00, 0x75, 0x0c, 0x00, 0x6e, 0x00, + 0x6d, 0x2f, 0xb3, 0x10, 0x16, 0x50, 0x7f, 0xa4, 0x7f, 0x21, 0x6c, 0x9a, + 0x06, 0xb8, 0x17, 0x70, 0xad, 0xc8, 0xb9, 0x06, 0x98, 0x15, 0x82, 0x0f, + 0x13, 0x7f, 0x13, 0x04, 0x43, 0x04, 0x3c, 0x20, 0x01, 0x30, 0xcc, 0x06, + 0x48, 0x15, 0x32, 0x7f, 0xac, 0x99, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, + 0x7f, 0x0b, 0x0b, 0x80, 0xd0, 0x01, 0xe2, 0x19, 0xe4, 0x62, 0x00, 0x00, + 0x0d, 0x05, 0x01, 0xfc, 0x57, 0x89, 0x73, 0x06, 0xb8, 0x17, 0x53, 0x28, + 0x11, 0x1c, 0x69, 0x00, 0x74, 0x28, 0x17, 0x06, 0x58, 0x1b, 0x10, 0x0e, + 0xf0, 0x7f, 0x26, 0x74, 0x20, 0x89, 0x73, 0x06, 0xb8, 0x17, 0xac, 0xc0, + 0x74, 0xc7, 0xc0, 0x68, 0xd0, 0x06, 0x98, 0x1b, 0x0e, 0xf3, 0x7f, 0x21, + 0x28, 0x11, 0x39, 0x04, 0x42, 0xf9, 0x28, 0x17, 0x06, 0x58, 0x1b, 0x35, + 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x0c, 0x0c, 0xd0, 0x01, + 0x00, 0x82, 0x19, 0x43, 0x63, 0x00, 0x00, 0x0e, 0x01, 0x08, 0x43, 0x53, + 0x49, 0x84, 0x06, 0xb8, 0x17, 0x43, 0x00, 0x68, 0xb1, 0x28, 0x17, 0x62, + 0x06, 0x8f, 0xaf, 0x10, 0x0f, 0x00, 0x7f, 0x53, 0xf6, 0x53, 0x06, 0xb8, + 0x17, 0x0c, 0xc0, 0xc9, 0x14, 0xbc, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, + 0x22, 0x04, 0x19, 0x38, 0x04, 0x31, 0x06, 0x48, 0x11, 0x72, 0x7f, 0x49, + 0x84, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x0d, 0x0d, 0xd0, + 0x01, 0x50, 0x19, 0xa1, 0x28, 0x17, 0x00, 0x0f, 0x01, 0x5e, 0x79, 0x48, + 0x59, 0xdd, 0x5d, 0xaa, 0x06, 0x98, 0x19, 0x4b, 0x2f, 0xaf, 0x6e, 0x2f, + 0xb3, 0x67, 0x2f, 0xb7, 0x77, 0xf0, 0x06, 0x2f, 0xb1, 0x10, 0x0e, 0xf0, + 0x7f, 0x52, 0xff, 0x06, 0xa8, 0x19, 0xac, 0x98, 0xb0, 0x00, 0x1a, 0xac, + 0x40, 0xc6, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x13, 0x3d, + 0xaf, 0x28, 0x17, 0x33, 0x28, 0x1b, 0x32, 0x06, 0x28, 0x1f, 0x55, 0x7f, + 0x06, 0x98, 0x19, 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x0e, 0x0e, 0xd0, 0x01, + 0x33, 0x19, 0x4f, 0x28, 0x17, 0x10, 0x04, 0x01, 0xcc, 0x5b, 0x71, 0x5c, + 0x06, 0x98, 0x15, 0x00, 0x00, 0x05, 0x54, 0x00, 0x6f, 0x00, 0x79, 0x2f, + 0xad, 0x6d, 0x06, 0x6f, 0xb1, 0xe0, 0x10, 0x0e, 0xf0, 0x7f, 0x32, 0xff, + 0x06, 0xa8, 0x15, 0x00, 0xc4, 0xb3, 0x7c, 0xc5, 0x30, 0xc8, 0xb9, 0x06, + 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x22, 0x04, 0x3e, 0x04, 0x1e, 0x4f, 0x04, + 0x3c, 0x06, 0x28, 0x11, 0x92, 0x7f, 0x06, 0x98, 0x15, 0x10, 0x0f, 0x15, + 0x7f, 0x0f, 0x44, 0x0f, 0xd0, 0x01, 0x1a, 0x1a, 0x91, 0x2f, 0x9c, 0x11, + 0x01, 0x08, 0xf3, 0x77, 0xdd, 0x5d, 0x06, 0xb8, 0x17, 0x49, 0x00, 0x73, + 0x03, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6b, 0x06, 0x6f, 0xaf, 0x10, 0x0e, + 0xf0, 0x7f, 0xc0, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x74, 0xc7, 0xdc, 0xc2, + 0x74, 0xce, 0x30, 0x40, 0xc6, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x18, + 0x04, 0x41, 0x04, 0x17, 0x38, 0x04, 0x3a, 0x28, 0x17, 0x32, 0x06, 0x48, + 0x1b, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x10, + 0x10, 0xd0, 0x01, 0x04, 0x1a, 0x2a, 0x2f, 0xa0, 0x02, 0x12, 0x01, 0x8f, + 0x79, 0x95, 0x4e, 0x06, 0xb8, 0x17, 0x46, 0x2f, 0x00, 0x75, 0x28, 0x13, + 0x75, 0x28, 0x19, 0x10, 0x16, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, + 0x03, 0xc4, 0xd6, 0xe0, 0xcf, 0x74, 0xc7, 0x06, 0x78, 0x15, 0x0f, 0x13, + 0x7f, 0x17, 0x24, 0x04, 0x43, 0x28, 0x15, 0x43, 0x28, 0x1b, 0x06, 0x92, + 0x7f, 0x06, 0xb8, 0x17, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x11, 0x11, 0xd0, + 0x01, 0xa3, 0x19, 0xdf, 0x60, 0x00, 0x00, 0x00, 0x13, 0x01, 0x71, 0x5c, + 0xa8, 0x68, 0xab, 0x06, 0xb8, 0x17, 0x59, 0x2f, 0xa7, 0x6d, 0x2f, 0xab, + 0x6e, 0x2f, 0xaf, 0x5f, 0xb9, 0xe0, 0x10, 0x15, 0xd0, 0x7f, 0x32, 0xff, + 0x06, 0xb8, 0x17, 0x7c, 0xc5, 0xc8, 0xb9, 0x98, 0x18, 0xb0, 0xdc, 0xc2, + 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x2f, 0x04, 0x3c, 0x0b, 0x04, 0x30, + 0x04, 0x3d, 0x20, 0x03, 0x41, 0x06, 0x48, 0x1b, 0x35, 0x7f, 0xc8, 0x06, + 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x12, 0x12, 0xd0, 0x01, 0x5c, 0x19, + 0x87, 0x00, 0x62, 0x00, 0x00, 0x14, 0x01, 0x77, 0x95, 0xce, 0x55, 0x91, + 0x06, 0xb8, 0x17, 0x4e, 0x28, 0x17, 0x67, 0x48, 0x17, 0x6f, 0x10, 0x16, + 0x40, 0x7f, 0x60, 0x7f, 0x22, 0xff, 0x06, 0xb8, 0x17, 0x98, 0xb0, 0x00, + 0xac, 0x78, 0x6a, 0xb1, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1d, 0x28, + 0x15, 0x33, 0x48, 0x19, 0x3e, 0x9c, 0x06, 0x28, 0x15, 0x00, 0x00, 0x35, + 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x13, 0x13, 0x88, 0xd0, + 0x01, 0x11, 0x1a, 0x45, 0x28, 0x17, 0x15, 0x01, 0xb0, 0x16, 0x65, 0x5f, + 0x6f, 0x06, 0xd8, 0x17, 0x69, 0x2f, 0xa3, 0x38, 0x19, 0x74, 0xc2, 0x2f, + 0xb9, 0x10, 0x16, 0x10, 0x7f, 0xb0, 0x65, 0xfb, 0x6c, 0x06, 0xb8, 0x17, + 0xc8, 0x06, 0xb2, 0x00, 0xac, 0xc0, 0xd0, 0x06, 0xb8, 0x17, 0x0e, 0xd3, + 0x7f, 0x1d, 0x36, 0x04, 0x38, 0x20, 0x01, 0x38, 0x19, 0x42, 0x28, 0x21, + 0x06, 0x32, 0x7f, 0x5f, 0x64, 0x6f, 0x06, 0xd8, 0x17, 0x10, 0x0e, 0xd5, + 0x7f, 0x14, 0x14, 0xd0, 0x01, 0xf5, 0x1a, 0x40, 0xe1, 0x28, 0x17, 0x16, + 0x01, 0x90, 0x5c, 0x1c, 0x96, 0xa2, 0x06, 0xb8, 0x17, 0x47, 0x28, 0x17, + 0x66, 0x00, 0x75, 0x10, 0x16, 0x80, 0x7f, 0x67, 0x10, 0x6b, 0x1c, 0x96, + 0x06, 0xb8, 0x17, 0x30, 0xae, 0xc4, 0xd6, 0xd1, 0x06, 0x98, 0x15, 0x0f, + 0x13, 0x7f, 0x13, 0x28, 0x17, 0x44, 0x04, 0x43, 0x06, 0x28, 0x11, 0xf2, + 0x5f, 0xff, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x15, + 0x15, 0xd0, 0x01, 0x2b, 0x20, 0x19, 0x41, 0x2f, 0x9e, 0x17, 0x01, 0x59, + 0x97, 0xa1, 0x45, 0x5c, 0x06, 0xb8, 0x17, 0x53, 0x00, 0x68, 0x2f, 0xb1, + 0x7a, 0x28, 0x19, 0x18, 0x6f, 0x00, 0x6b, 0x06, 0x2f, 0xb1, 0x10, 0x0e, + 0xf0, 0x7f, 0x59, 0x97, 0x88, 0x40, 0x51, 0x06, 0xb8, 0x17, 0xdc, 0xc2, + 0x88, 0xc9, 0x24, 0xc6, 0x34, 0x74, 0xce, 0x06, 0x78, 0x1b, 0x0e, 0xf3, + 0x7f, 0x21, 0x28, 0x17, 0x34, 0x04, 0x41, 0x37, 0x28, 0x19, 0x3e, 0x04, + 0x3a, 0x04, 0x30, 0x06, 0x08, 0x1f, 0x72, 0x5c, 0x25, 0x7f, 0x06, 0xb8, + 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x16, 0x16, 0xd0, 0x01, 0xde, 0x00, 0x18, + 0x6c, 0x62, 0x00, 0x00, 0x18, 0x01, 0x1b, 0x15, 0x61, 0xe5, 0x77, 0x06, + 0xb8, 0x17, 0x41, 0x2f, 0xaf, 0x63, 0x48, 0x1b, 0x84, 0x10, 0x16, 0x50, + 0x7f, 0x31, 0x72, 0xe5, 0x77, 0x06, 0xb8, 0x17, 0x44, 0xc5, 0x18, 0x74, + 0xc7, 0x58, 0x06, 0x88, 0x15, 0x0f, 0x13, 0x7f, 0x10, 0x04, 0x39, 0x3e, + 0x04, 0x42, 0x28, 0x1b, 0x06, 0x7f, 0xb1, 0x35, 0x7f, 0x06, 0xb8, 0x17, + 0x10, 0x0e, 0xf5, 0x7f, 0x17, 0x44, 0x17, 0xd0, 0x01, 0x01, 0x19, 0x66, + 0x2f, 0x9c, 0x19, 0x01, 0x0a, 0x09, 0x4e, 0xcd, 0x91, 0x06, 0xb8, 0x17, + 0x4d, 0x2f, 0xad, 0x65, 0xf0, 0x06, 0x9d, 0xae, 0x10, 0x0f, 0x00, 0x7f, + 0x32, 0xff, 0x06, 0xb8, 0x17, 0xf8, 0xbb, 0xd0, 0xc5, 0xd7, 0x06, 0x98, + 0x15, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x13, 0x4d, 0x06, 0x88, 0x15, 0x52, + 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, 0xf5, 0x7f, 0x18, 0x18, 0xd0, + 0x01, 0xb2, 0x18, 0x15, 0x28, 0x17, 0x02, 0x1a, 0x01, 0xcb, 0x6e, 0xc0, + 0x8c, 0x06, 0xb8, 0x17, 0x53, 0x98, 0x4f, 0xab, 0x67, 0x00, 0x28, 0xa4, + 0x10, 0x16, 0x40, 0x7f, 0xcb, 0x6e, 0x3a, 0x43, 0x8d, 0x06, 0xb8, 0x17, + 0xdc, 0xc2, 0x00, 0xac, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x47, 0x21, + 0x28, 0x17, 0x33, 0x04, 0x30, 0x06, 0x88, 0x19, 0x35, 0x7f, 0x06, 0xb8, + 0x17, 0x90, 0x10, 0x0e, 0xf5, 0x7f, 0x19, 0x19, 0xd0, 0x01, 0xe1, 0x18, + 0xa6, 0x60, 0x00, 0x00, 0x00, 0x1b, 0x01, 0xac, 0x4e, 0xfd, 0x90, 0x20, + 0x9c, 0x5e, 0x06, 0x9f, 0xb0, 0x4b, 0x00, 0x79, 0x00, 0x6f, 0x36, 0x00, + 0x74, 0x20, 0x03, 0x10, 0x0e, 0x70, 0x7f, 0x69, 0x06, 0xc1, 0xff, 0x06, + 0xf2, 0xff, 0x50, 0x01, 0xad, 0xa0, 0xd1, 0x20, 0x00, 0x80, 0xbd, 0x0e, + 0x73, 0x7f, 0x14, 0x51, 0x00, 0x75, 0x06, 0xc2, 0x01, 0x1a, 0x28, 0x17, + 0x3e, 0x04, 0x72, 0x42, 0x20, 0x03, 0x0e, 0x52, 0x7f, 0x10, 0x0e, 0xf5, + 0x7f, 0x1a, 0x1a, 0xd0, 0x01, 0xe5, 0x20, 0x18, 0x85, 0x28, 0x17, 0x1c, + 0x01, 0x27, 0x59, 0x2a, 0x45, 0x96, 0x06, 0xb8, 0x17, 0x4f, 0x00, 0x73, + 0x2f, 0xab, 0x6b, 0x06, 0x8f, 0xaf, 0xc0, 0x10, 0x0e, 0xf0, 0x7f, 0x06, + 0xf2, 0xff, 0x24, 0xc6, 0xac, 0xc0, 0x74, 0xce, 0xd0, 0x06, 0x98, 0x19, + 0x07, 0x53, 0x7f, 0x63, 0x06, 0x8e, 0xaf, 0x1e, 0x04, 0x41, 0x04, 0x1c, + 0x30, 0x04, 0x3a, 0x20, 0x03, 0x0e, 0x52, 0x7f, 0x10, 0x0e, 0xf5, 0x7f, + 0x1b, 0x1b, 0x88, 0xd0, 0x01, 0xa8, 0x18, 0x5f, 0x28, 0x17, 0x1d, 0x01, + 0x75, 0x05, 0x51, 0xab, 0x5e, 0x0c, 0x77, 0x06, 0x9d, 0x2f, 0x48, 0x4f, + 0xaf, 0x78, 0x67, 0x06, 0x8f, 0xaf, 0x10, 0x07, 0x10, 0x7f, 0x3e, 0x2d, + 0x06, 0x91, 0xff, 0x75, 0x51, 0x93, 0x10, 0x5e, 0xbf, 0x53, 0x06, 0x9d, + 0xaf, 0xa8, 0xd6, 0xe0, 0xac, 0x08, 0x20, 0x00, 0x04, 0xd6, 0x10, 0x06, + 0x73, 0x7f, 0x25, 0x04, 0x51, 0x0c, 0x04, 0x33, 0x04, 0x3e, 0x06, 0x68, + 0x15, 0x32, 0x7f, 0xab, 0x5e, 0x24, 0x23, 0x7e, 0x10, 0x16, 0x95, 0x7f, + 0x1c, 0x1c, 0xd0, 0x01, 0xab, 0x18, 0x40, 0x27, 0x28, 0x17, 0x1e, 0x01, + 0x48, 0x59, 0x6f, 0x82, 0xaf, 0x06, 0xb8, 0x17, 0x4e, 0x2f, 0xad, 0x72, + 0x06, 0x8f, 0xad, 0x10, 0x0f, 0x10, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, + 0x0c, 0x98, 0xb0, 0x7c, 0xb7, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, + 0x04, 0x1e, 0x30, 0x04, 0x40, 0x20, 0x03, 0x06, 0xb2, 0x7f, 0x06, 0xb8, + 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x1d, 0x44, 0x1d, 0xd0, 0x01, 0xab, 0x18, + 0x97, 0x28, 0x17, 0x1f, 0x01, 0x02, 0x8c, 0x54, 0x4c, 0x6b, 0x71, 0x5c, + 0x06, 0x98, 0x19, 0x57, 0xab, 0x28, 0x17, 0x6b, 0x28, 0x1b, 0x79, 0x28, + 0x1f, 0x6d, 0x06, 0x28, 0x1f, 0x10, 0x0e, 0xf0, 0x7f, 0xc0, 0x52, 0xff, + 0x06, 0x98, 0x19, 0x40, 0xc6, 0x74, 0xce, 0x7c, 0xc5, 0x35, 0xc8, 0xb9, + 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x17, 0x3a, 0x28, 0x1b, + 0x1e, 0x4f, 0x04, 0x3c, 0x06, 0x48, 0x1d, 0x55, 0x7f, 0x06, 0x98, 0x19, + 0x10, 0x0e, 0xf5, 0x7f, 0x1e, 0x44, 0x1e, 0xd0, 0x01, 0x56, 0x18, 0x1e, + 0x28, 0x17, 0x20, 0x01, 0x08, 0xe5, 0x9c, 0xd6, 0x53, 0x06, 0x98, 0x15, + 0x00, 0x00, 0x54, 0x0a, 0x00, 0x6f, 0x00, 0x74, 0x20, 0x01, 0x6f, 0x2f, + 0xb5, 0x69, 0xe2, 0x10, 0x0e, 0x80, 0x7f, 0x06, 0x71, 0xfd, 0x2b, 0x19, + 0x9e, 0xd6, 0x53, 0x06, 0x98, 0x15, 0x00, 0x03, 0x00, 0xd7, 0xb3, 0xa0, + 0xd1, 0xac, 0x06, 0x88, 0x15, 0x0f, 0x13, 0x7f, 0x04, 0x22, 0x04, 0x3e, + 0x04, 0x42, 0x20, 0x01, 0x3e, 0x04, 0x1e, 0x40, 0x04, 0x38, 0x06, 0x28, + 0x17, 0x35, 0x7f, 0x06, 0x98, 0x15, 0x10, 0x0f, 0x15, 0x7f, 0x1f, 0x40, + 0x1f, 0xd0, 0x01, 0x3b, 0x19, 0x75, 0x5f, 0x00, 0x00, 0x02, 0x21, 0x01, + 0xf6, 0x5c, 0x39, 0x68, 0x06, 0xb8, 0x17, 0x53, 0x31, 0x00, 0x68, 0x28, + 0x0f, 0x3f, 0xa9, 0x6e, 0x00, 0x65, 0x10, 0x16, 0x20, 0x7f, 0x60, 0x9b, + 0x22, 0xff, 0x06, 0xb8, 0x17, 0xdc, 0xc2, 0xc8, 0xb9, 0x24, 0x68, 0xb1, + 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x0d, 0x3c, 0x04, 0x30, + 0x09, 0x04, 0x3d, 0x04, 0x4d, 0x06, 0x28, 0x15, 0x00, 0x00, 0x35, 0x7f, + 0xc8, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x20, 0x20, 0xd0, 0x01, + 0x36, 0x19, 0xa0, 0x41, 0x5e, 0x2b, 0x2d, 0x01, 0xa1, 0x5c, 0x71, 0x5c, + 0x06, 0xb8, 0x17, 0x17, 0x4f, 0x00, 0x6b, 0x28, 0x13, 0x79, 0x28, 0x17, + 0x38, 0x1b, 0x10, 0x16, 0x10, 0x7f, 0x08, 0x88, 0x51, 0x71, 0x5c, 0x06, + 0xb8, 0x17, 0x24, 0xc6, 0x74, 0x06, 0xce, 0x7c, 0xc5, 0xc8, 0xb9, 0x06, + 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1e, 0x2f, 0x04, 0x3a, 0x28, 0x15, 0x4f, + 0x48, 0x1b, 0x06, 0x3f, 0xb5, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x90, 0x10, + 0x0e, 0xf5, 0x7f, 0x21, 0x21, 0xd0, 0x01, 0xa5, 0x18, 0x3b, 0x5f, 0x01, + 0x00, 0x00, 0x23, 0x01, 0x83, 0x5e, 0xf6, 0x06, 0xc8, 0x17, 0x41, 0x48, + 0x2f, 0xad, 0x72, 0x00, 0x6f, 0x00, 0x73, 0x8f, 0xb7, 0x88, 0x10, 0x15, + 0xd0, 0x7f, 0x7f, 0x5e, 0x9b, 0x06, 0xc8, 0x17, 0x88, 0xd7, 0x5c, 0x18, + 0xb8, 0xdc, 0xc2, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x38, + 0x03, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x41, 0x20, 0x07, 0x06, 0x38, 0x1b, + 0x72, 0xe3, 0x25, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x22, + 0x22, 0xd0, 0x01, 0x75, 0x10, 0x18, 0x32, 0x5e, 0x2c, 0xad, 0x01, 0x71, + 0x5c, 0xe3, 0x50, 0x53, 0x06, 0xb8, 0x17, 0x59, 0x6f, 0xa9, 0x67, 0x00, + 0x75, 0x00, 0x78, 0x63, 0x48, 0x1b, 0x10, 0x15, 0xd0, 0x7f, 0x32, 0xff, + 0x06, 0xb8, 0x17, 0x7c, 0xc5, 0xc8, 0x06, 0xb9, 0x6c, 0xad, 0x58, 0xce, + 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x2f, 0x83, 0x48, 0x0d, 0x33, 0x04, + 0x43, 0x04, 0x42, 0x28, 0x21, 0x06, 0x1f, 0xb7, 0xe4, 0x35, 0x7f, 0x06, + 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x23, 0x23, 0xd0, 0x01, 0x4a, 0x18, + 0x20, 0x7b, 0x5d, 0x2b, 0x2d, 0x01, 0xb3, 0x5f, 0xf6, 0x5c, 0xae, 0x06, + 0xb8, 0x17, 0x54, 0x2f, 0xab, 0x6b, 0x28, 0x13, 0x06, 0x7f, 0xaf, 0x10, + 0x0e, 0xf0, 0x7f, 0xb7, 0x10, 0x5f, 0x9b, 0x5c, 0x06, 0xb8, 0x17, 0xc4, + 0xb3, 0xe0, 0xcf, 0x0c, 0xdc, 0xc2, 0xc8, 0xb9, 0x06, 0x78, 0x17, 0x0e, + 0xf3, 0x7f, 0x22, 0x04, 0x17, 0x3e, 0x04, 0x3a, 0x28, 0x15, 0x41, 0x28, + 0x15, 0x38, 0x21, 0x05, 0xff, 0xb9, 0x72, 0xb7, 0x25, 0x7f, 0x06, 0xb8, + 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x24, 0x24, 0xd0, 0x01, 0x39, 0x00, 0x18, + 0xb2, 0x5f, 0x00, 0x00, 0x26, 0x01, 0x99, 0x14, 0x99, 0xdd, 0x5d, 0x06, + 0xb8, 0x17, 0x4b, 0x4f, 0xab, 0x61, 0x00, 0x78, 0x77, 0x06, 0x08, 0x11, + 0x10, 0x0f, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x00, 0xac, 0x00, + 0x1a, 0xac, 0x40, 0xc6, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, + 0x0b, 0x33, 0xbc, 0x28, 0x0f, 0x32, 0x06, 0x28, 0x13, 0x72, 0x7f, 0x06, + 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x25, 0x25, 0x88, 0xd0, 0x01, 0x66, + 0x18, 0x54, 0x28, 0x17, 0x27, 0x01, 0x1b, 0x15, 0x61, 0x9b, 0x5a, 0x06, + 0xb8, 0x17, 0x45, 0x6f, 0xa7, 0x65, 0x10, 0x16, 0x60, 0x7f, 0x08, 0x31, + 0x72, 0x9b, 0x5a, 0x06, 0xb8, 0x17, 0xd0, 0xc5, 0x88, 0x18, 0xd7, 0x54, + 0xba, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x45, 0x02, 0x04, + 0x38, 0x04, 0x3c, 0x04, 0x4d, 0x06, 0x48, 0x15, 0x00, 0x72, 0x00, 0x35, + 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x26, 0x26, 0xd0, 0x01, + 0x10, 0x00, 0x18, 0x6b, 0x5e, 0x00, 0x00, 0x28, 0x01, 0xd8, 0x10, 0x9a, + 0xe5, 0x77, 0x06, 0xb8, 0x17, 0x4b, 0x00, 0x6f, 0x00, 0x78, 0x63, 0x48, + 0x1b, 0x10, 0x16, 0x50, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0xe0, 0xac, + 0x58, 0x60, 0xce, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x3e, + 0x04, 0x42, 0xf9, 0x28, 0x19, 0x06, 0x7f, 0xb1, 0x35, 0x7f, 0x06, 0xb8, + 0x17, 0x10, 0x0e, 0xf5, 0x7f, 0x27, 0x27, 0xd0, 0x01, 0x10, 0xde, 0x17, + 0xf8, 0x28, 0x17, 0x29, 0x01, 0x8f, 0x79, 0x20, 0xa1, 0x5c, 0x06, 0xb8, + 0x17, 0x46, 0x00, 0x75, 0x00, 0x6b, 0xa8, 0x20, 0x03, 0x6f, 0x20, 0x05, + 0x61, 0x10, 0x16, 0x20, 0x7f, 0x8f, 0x79, 0x88, 0x40, 0x51, 0x06, 0xb8, + 0x17, 0xc4, 0xd6, 0xe0, 0xcf, 0x24, 0xc6, 0x60, 0x74, 0x06, 0x88, 0x1b, + 0x0e, 0xf3, 0x7f, 0x24, 0x04, 0x43, 0x04, 0x3a, 0xaf, 0x20, 0x03, 0x3e, + 0x20, 0x05, 0x30, 0x06, 0x28, 0x1d, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x10, + 0x0e, 0xf5, 0x7f, 0x20, 0x28, 0x28, 0xd0, 0x01, 0xe1, 0x17, 0xb6, 0x5c, + 0x00, 0x01, 0x00, 0x2a, 0x01, 0x50, 0x4f, 0xc0, 0x8c, 0x06, 0xb8, 0x17, + 0x58, 0x53, 0x28, 0x0d, 0x67, 0x06, 0x48, 0x11, 0x10, 0x0f, 0x50, 0x7f, + 0x50, 0x4f, 0x3a, 0x43, 0x8d, 0x06, 0xb8, 0x17, 0xac, 0xc0, 0x00, 0xac, + 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x59, 0x21, 0x28, 0x0d, 0x33, 0x06, + 0x48, 0x11, 0x72, 0x7f, 0xc0, 0x8c, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, + 0xf5, 0x7f, 0x29, 0x29, 0xd0, 0x01, 0xa3, 0x17, 0xa9, 0x28, 0x17, 0x02, + 0x2b, 0x01, 0x77, 0x95, 0x0e, 0x5d, 0x06, 0xb8, 0x17, 0x4e, 0xa2, 0x68, + 0x17, 0x73, 0x2f, 0xad, 0x6b, 0x00, 0x69, 0x10, 0x16, 0x00, 0x7f, 0x7f, + 0xc0, 0x22, 0xff, 0x06, 0xb8, 0x17, 0x98, 0xb0, 0x00, 0xac, 0xac, 0xc0, + 0x31, 0xa4, 0xd0, 0x06, 0x78, 0x1b, 0x07, 0x93, 0x7f, 0xe1, 0x00, 0x71, + 0x2e, 0xbb, 0xa8, 0x05, 0xf4, 0x01, 0x1d, 0x68, 0x17, 0x41, 0x28, 0x1f, + 0x3a, 0x04, 0x38, 0xf2, 0x06, 0x08, 0x1f, 0x35, 0x7f, 0x06, 0xb8, 0x17, + 0x10, 0x0e, 0xf5, 0x7f, 0x2a, 0x2a, 0xd0, 0x01, 0x46, 0x20, 0x17, 0x5a, + 0x28, 0x17, 0x2c, 0x01, 0x8a, 0x71, 0x2c, 0x54, 0x67, 0x06, 0xb8, 0x17, + 0x4b, 0x24, 0x0b, 0x6d, 0x2f, 0xb3, 0x6d, 0x00, 0x1e, 0x6f, 0x00, 0x74, + 0x20, 0x03, 0x10, 0x15, 0xf0, 0x7f, 0x32, 0xff, 0x06, 0xb8, 0x17, 0x6c, + 0x01, 0xad, 0xc8, 0xb9, 0xa8, 0xba, 0xa0, 0xd1, 0x06, 0x78, 0x17, 0x82, + 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x43, 0x04, 0x3c, 0x28, 0x1b, 0x3c, 0x0f, + 0x04, 0x3e, 0x04, 0x42, 0x20, 0x03, 0x06, 0x32, 0x7f, 0x06, 0xb8, 0x17, + 0x10, 0x0e, 0xf5, 0x7f, 0x22, 0x2b, 0x2b, 0xd0, 0x01, 0x54, 0x17, 0xf3, + 0x28, 0x17, 0x2d, 0x05, 0x01, 0x27, 0x59, 0x06, 0x52, 0x06, 0xb8, 0x17, + 0x4f, 0x2f, 0xa3, 0x78, 0x74, 0x2f, 0xb3, 0x10, 0x16, 0x70, 0x7f, 0x32, + 0xff, 0x06, 0xb8, 0x17, 0x24, 0xc6, 0x74, 0x18, 0xc7, 0xc0, 0xd0, 0x06, + 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x1e, 0x04, 0x38, 0xbc, 0x28, 0x0f, 0x30, + 0x06, 0x08, 0x0f, 0xb2, 0x7f, 0x06, 0xb8, 0x17, 0x10, 0x0e, 0xf5, 0x7f, + 0x2c, 0x2c, 0x80, 0xd0, 0x01, 0xa1, 0x17, 0x98, 0x5d, 0x00, 0x00, 0x2e, + 0x05, 0x01, 0xae, 0x5b, 0x0e, 0x5d, 0x06, 0xb8, 0x17, 0x4d, 0x28, 0x17, + 0x56, 0x79, 0x2f, 0xaf, 0x7a, 0x2f, 0xb3, 0x6b, 0x28, 0x23, 0x10, 0x15, + 0xf0, 0x7f, 0xab, 0xc0, 0x22, 0xff, 0x06, 0xb8, 0x17, 0xf8, 0xbb, 0x7c, + 0xc5, 0x90, 0xc7, 0x68, 0xa4, 0x06, 0x88, 0x19, 0x0e, 0xf3, 0x7f, 0x1c, + 0x28, 0x17, 0x4f, 0x04, 0x34, 0x2f, 0x04, 0x37, 0x28, 0x1b, 0x3a, 0x28, + 0x23, 0x05, 0xff, 0xb9, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x91, 0x10, 0x0e, + 0xf5, 0x7f, 0x2d, 0x2d, 0xd0, 0x01, 0xb5, 0x16, 0x73, 0x28, 0x17, 0x00, + 0x2f, 0x01, 0x7f, 0x9e, 0x50, 0x51, 0xf6, 0x5c, 0xa0, 0x06, 0x98, 0x19, + 0x4b, 0x2f, 0xab, 0x67, 0x00, 0x6f, 0x00, 0x73, 0x2c, 0x00, 0x68, 0x2f, + 0xb9, 0x6d, 0x06, 0x0f, 0xb9, 0x10, 0x0e, 0xf0, 0x7f, 0x7f, 0x9e, 0x08, + 0x3f, 0x51, 0x9b, 0x5c, 0x06, 0xa8, 0x19, 0xac, 0xe0, 0xac, 0x0d, 0xdc, + 0xc2, 0xc8, 0xb9, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x0f, + 0x05, 0x33, 0x04, 0x3e, 0x04, 0x41, 0x28, 0x1f, 0x3c, 0x28, 0x1b, 0x8e, + 0x05, 0xff, 0xb9, 0x7f, 0x9e, 0x52, 0x25, 0x7f, 0x06, 0x98, 0x19, 0x10, + 0x0e, 0xf5, 0x7f, 0x2e, 0x40, 0x2e, 0xd0, 0x01, 0x6f, 0x16, 0xd6, 0x5c, + 0x00, 0x00, 0x02, 0x30, 0x01, 0x96, 0x6c, 0x04, 0x7e, 0x06, 0x98, 0x15, + 0x00, 0x2b, 0x00, 0x4f, 0x4f, 0xa5, 0x6e, 0x2f, 0xb1, 0x77, 0x06, 0x08, + 0x13, 0x10, 0x0f, 0x30, 0x7f, 0x08, 0xb2, 0x51, 0xf3, 0x7e, 0x06, 0xa8, + 0x15, 0x00, 0x24, 0xc6, 0x03, 0xa4, 0xd0, 0x98, 0xb0, 0x40, 0xc6, 0x06, + 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x15, 0x1e, 0x04, 0x3a, 0x28, 0x11, 0x3d, + 0x28, 0x1d, 0x32, 0x06, 0x28, 0x15, 0x03, 0x00, 0x00, 0x96, 0x6c, 0x69, + 0x7e, 0x06, 0x98, 0x15, 0x10, 0x0f, 0x15, 0x7f, 0x21, 0x2f, 0x2f, 0xd0, + 0x01, 0xa2, 0x12, 0xcc, 0x5a, 0x00, 0x3f, 0xff, 0x24, 0x01, 0x01, 0xd0, + 0x01, 0x02, 0x02, 0xd0, 0x01, 0x03, 0x03, 0x92, 0xd0, 0x01, 0x04, 0x04, + 0xd0, 0x01, 0x05, 0x05, 0xd0, 0x01, 0x06, 0x49, 0x06, 0xd0, 0x01, 0x07, + 0x07, 0xd0, 0x01, 0x08, 0x08, 0xd0, 0x01, 0x24, 0x09, 0x09, 0xd0, 0x01, + 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0x92, 0xd0, 0x01, 0x0c, 0x0c, 0xd0, + 0x01, 0x0d, 0x0d, 0xd0, 0x01, 0x0e, 0x49, 0x0e, 0xd0, 0x01, 0x0f, 0x0f, + 0xd0, 0x01, 0x10, 0x10, 0xd0, 0x01, 0x24, 0x11, 0x11, 0xd0, 0x01, 0x12, + 0x12, 0xd0, 0x01, 0x13, 0x13, 0x92, 0xd0, 0x01, 0x14, 0x14, 0xd0, 0x01, + 0x15, 0x15, 0xd0, 0x01, 0x16, 0x49, 0x16, 0xd0, 0x01, 0x17, 0x17, 0xd0, + 0x01, 0x18, 0x18, 0xd0, 0x01, 0x24, 0x19, 0x19, 0xd0, 0x01, 0x1a, 0x1a, + 0xd0, 0x01, 0x1b, 0x1b, 0x92, 0xd0, 0x01, 0x1c, 0x1c, 0xd0, 0x01, 0x1d, + 0x1d, 0xd0, 0x01, 0x1e, 0x49, 0x1e, 0xd0, 0x01, 0x1f, 0x1f, 0xd0, 0x01, + 0x20, 0x20, 0xd0, 0x01, 0x24, 0x21, 0x21, 0xd0, 0x01, 0x22, 0x22, 0xd0, + 0x01, 0x23, 0x23, 0x92, 0xd0, 0x01, 0x24, 0x24, 0xd0, 0x01, 0x25, 0x25, + 0xd0, 0x01, 0x26, 0x49, 0x26, 0xd0, 0x01, 0x27, 0x27, 0xd0, 0x01, 0x28, + 0x28, 0xd0, 0x01, 0x24, 0x29, 0x29, 0xd0, 0x01, 0x2a, 0x2a, 0xd0, 0x01, + 0x2b, 0x2b, 0x93, 0xd0, 0x01, 0x2c, 0x2c, 0xd0, 0x01, 0x2d, 0x2d, 0xd0, + 0x01, 0xfb, 0x0f, 0xc0, 0xf3, 0x07, 0x7f, 0xff, 0x11, 0x58, 0x08, 0x00, + 0x12, 0x01, 0x00, 0x00, 0x30, 0x01, 0x01, 0x2f, 0x50, 0x07, 0x00, 0x0c, + 0xe5, 0x65, 0x2c, 0x67, 0x60, 0x0a, 0x06, 0x40, 0x06, 0x4a, 0x00, 0x15, + 0x61, 0x00, 0x70, 0x20, 0x03, 0x6e, 0x06, 0xc0, 0x7f, 0x6f, 0x06, 0xe0, + 0x7f, 0x8d, 0x06, 0x90, 0xff, 0x47, 0x00, 0x69, 0x41, 0x81, 0x51, 0x03, + 0x65, 0x06, 0x61, 0xff, 0x61, 0xf3, 0x06, 0x81, 0xff, 0x06, 0xf2, 0xff, + 0x7c, 0xc7, 0xf8, 0xbc, 0x0f, 0x13, 0x7f, 0x60, 0xe3, 0x23, 0x81, 0x06, + 0x54, 0x85, 0x2f, 0x04, 0x3f, 0x04, 0x3e, 0x01, 0x04, 0x3d, 0x04, 0x38, + 0x04, 0x4f, 0x04, 0x0e, 0x32, 0x7f, 0xe0, 0x07, 0x55, 0x7f, 0x10, 0x06, + 0x90, 0x7f, 0x03, 0x77, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xb4, 0x8a, 0x00, 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x88, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xaa, 0x1a, 0x4f, 0x5a, 0x00, 0x00, 0x00, 0x02, 0x88, 0xbd, 0x30, + 0xa6, 0x30, 0xeb, 0x01, 0x30, 0x79, 0x72, 0x25, 0x52, 0x02, 0x5e, 0x06, + 0x38, 0x21, 0x00, 0x53, 0x00, 0x65, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x04, + 0x6c, 0x00, 0x2d, 0x00, 0x74, 0x20, 0x0b, 0x75, 0x00, 0x04, 0x6b, 0x00, + 0x62, 0x00, 0x79, 0x40, 0x15, 0x6c, 0x00, 0x17, 0x73, 0x00, 0x69, 0x05, + 0x00, 0x7f, 0xe9, 0x60, 0x7f, 0x06, 0x59, 0x1f, 0x90, 0xff, 0xa0, 0x0e, + 0x90, 0x7f, 0xfa, 0x06, 0x81, 0x7d, 0x00, 0x00, 0x96, 0x99, 0x14, 0x08, + 0x5c, 0x79, 0x72, 0x2b, 0x06, 0x62, 0xfd, 0x00, 0x00, 0x1c, 0x00, 0xc1, + 0xb8, 0xc6, 0xb9, 0xd2, 0xc4, 0xbc, 0xdc, 0x60, 0xc2, 0x0e, 0x92, 0x7f, + 0x06, 0x93, 0x7d, 0x00, 0x00, 0x21, 0x04, 0x35, 0x04, 0x04, 0x43, 0x04, + 0x3b, 0x04, 0x06, 0x92, 0x7f, 0x3e, 0x72, 0xe6, 0x06, 0x95, 0x7d, 0x07, + 0x35, 0x7f, 0x10, 0x06, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, + 0x03, 0x00, 0x88, 0xd7, 0x30, 0xb5, 0x30, 0xf3, 0x30, 0x83, 0x14, 0x5e, + 0xdf, 0x57, 0x06, 0x58, 0x17, 0x42, 0x28, 0x13, 0x73, 0x00, 0x11, 0x61, + 0x00, 0x6e, 0x28, 0x17, 0x67, 0x00, 0x77, 0x40, 0x09, 0x57, 0x67, 0x68, + 0x17, 0x6b, 0x05, 0x28, 0x17, 0x50, 0x80, 0x7f, 0x06, 0x5f, 0xb7, 0x90, + 0xff, 0xa0, 0x0e, 0xb0, 0x7f, 0xe1, 0x06, 0x81, 0x7f, 0xdc, 0x91, 0x71, + 0x5c, 0x7f, 0x80, 0x06, 0x82, 0xfd, 0x00, 0x00, 0x80, 0xbd, 0xb0, 0xc0, + 0x11, 0x1a, 0xad, 0xed, 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf2, 0x7f, 0x1f, + 0x28, 0x15, 0x41, 0x0d, 0x04, 0x30, 0x04, 0x3d, 0x06, 0x68, 0x19, 0x32, + 0x7f, 0xe3, 0x06, 0xa2, 0x7f, 0xc8, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, + 0x7f, 0x02, 0x02, 0xd0, 0x01, 0xf2, 0x18, 0xc1, 0x00, 0x5b, 0x00, 0x00, + 0x04, 0x88, 0xc6, 0x30, 0xb0, 0x8a, 0x06, 0xa8, 0x15, 0x00, 0x00, 0x44, + 0x28, 0x13, 0x65, 0x28, 0x11, 0x75, 0xf0, 0x06, 0x68, 0x17, 0x90, 0x7f, + 0x06, 0xf0, 0xff, 0x10, 0x06, 0x50, 0x7f, 0x27, 0x59, 0xb1, 0x90, 0x86, + 0x06, 0xb8, 0x17, 0x00, 0xb3, 0x6c, 0xad, 0x06, 0xb8, 0x17, 0x0e, 0xf2, + 0xff, 0x22, 0x0f, 0x04, 0x4d, 0x04, 0x33, 0x28, 0x1b, 0x06, 0x6c, 0x16, + 0x42, 0x7f, 0x06, 0xb8, 0x17, 0xc8, 0x07, 0x95, 0x7f, 0x10, 0x06, 0x50, + 0x7f, 0x03, 0x03, 0xd0, 0x01, 0x7e, 0x19, 0x6f, 0x80, 0x28, 0x17, 0x05, + 0x88, 0xa4, 0x30, 0xf3, 0x30, 0xc1, 0x34, 0x30, 0xe7, 0x20, 0x05, 0x06, + 0x58, 0x1d, 0x49, 0x2f, 0xa9, 0x63, 0x00, 0x7c, 0x68, 0x4a, 0x9f, 0x06, + 0x3a, 0xb3, 0xd0, 0x7f, 0x06, 0x1f, 0xb4, 0x10, 0x06, 0xf0, 0x7f, 0xc1, + 0x4e, 0x21, 0xdd, 0x5d, 0x06, 0xb8, 0x17, 0x78, 0xc7, 0x9c, 0xcc, 0x06, + 0xb8, 0x17, 0x80, 0x0e, 0xf2, 0xff, 0x18, 0x04, 0x3d, 0x04, 0x47, 0x04, + 0x45, 0x3f, 0x04, 0x3e, 0x20, 0x07, 0x06, 0x3f, 0xb1, 0x32, 0x7f, 0x06, + 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x20, 0x04, 0x04, + 0xd0, 0x01, 0xaa, 0x1a, 0x0c, 0x5a, 0x00, 0x02, 0x00, 0x06, 0x88, 0xaf, + 0x30, 0xa1, 0x28, 0x19, 0xb8, 0x2b, 0x30, 0xe5, 0x06, 0x68, 0x17, 0x47, + 0x8a, 0xa3, 0x6a, 0x06, 0x4a, 0xb3, 0xd0, 0x7f, 0xc4, 0x06, 0x1f, 0xb4, + 0x10, 0x06, 0xf0, 0x7f, 0x49, 0x51, 0xde, 0x06, 0xc8, 0x17, 0x11, 0xad, + 0x30, 0xfc, 0xc8, 0x06, 0xb8, 0x17, 0x0e, 0xf2, 0xff, 0x1a, 0x04, 0x32, + 0x04, 0x41, 0x30, 0x28, 0x1b, 0x34, 0x04, 0x36, 0x04, 0x43, 0x06, 0x28, + 0x19, 0xf2, 0x32, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, + 0x10, 0x7f, 0x05, 0x05, 0xd0, 0x01, 0xf8, 0x22, 0x18, 0x37, 0x28, 0x17, + 0x07, 0x88, 0xc6, 0x28, 0x13, 0xe7, 0xc5, 0x28, 0x19, 0x06, 0x58, 0x15, + 0x00, 0x00, 0x44, 0x2a, 0x9d, 0x65, 0x28, 0x13, 0xf0, 0x06, 0x7a, 0xaf, + 0xd0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x06, 0x10, 0x7f, 0x27, 0x59, 0x30, + 0x75, 0x8c, 0x06, 0xb8, 0x17, 0x00, 0xb3, 0x04, 0x06, 0xc8, 0x17, 0x0e, + 0xf2, 0xff, 0x22, 0x04, 0x5f, 0x4d, 0x48, 0x13, 0x3e, 0x28, 0x1b, 0x06, + 0x3f, 0xb1, 0x32, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x91, 0x10, + 0x06, 0x10, 0x7f, 0x06, 0x06, 0xd0, 0x01, 0xd9, 0x19, 0x9e, 0x28, 0x17, + 0x01, 0x08, 0x88, 0xa6, 0x30, 0xeb, 0x30, 0xb5, 0x06, 0xa8, 0x17, 0x1f, + 0x55, 0x00, 0x6c, 0x2a, 0x91, 0x3f, 0xb1, 0x06, 0x1a, 0xab, 0xd0, 0x7f, + 0x06, 0x5e, 0x2f, 0x84, 0x10, 0x06, 0xf0, 0x7f, 0x1a, 0x85, 0x71, 0x5c, + 0x06, 0xb8, 0x17, 0xb8, 0xc6, 0x30, 0xb0, 0xc0, 0x06, 0xb8, 0x17, 0x0e, + 0xf2, 0xff, 0x23, 0x04, 0x3b, 0x04, 0x07, 0x4c, 0x04, 0x41, 0x04, 0x30, + 0x06, 0x68, 0x17, 0x32, 0x7f, 0x06, 0xb8, 0x17, 0xc8, 0x07, 0x95, 0x7f, + 0x10, 0x06, 0x50, 0x7f, 0x07, 0x07, 0xd0, 0x01, 0x41, 0x19, 0xfe, 0x00, + 0x5b, 0x00, 0x00, 0x09, 0x88, 0xad, 0x30, 0xe7, 0x85, 0x28, 0x15, 0xae, + 0x30, 0x53, 0x90, 0x06, 0x5d, 0x2f, 0x47, 0x6a, 0x97, 0xa3, 0x3a, 0xa1, + 0x67, 0x2a, 0x99, 0x2d, 0x00, 0x64, 0x2f, 0xb9, 0x06, 0x90, 0x7f, 0xc3, + 0x10, 0x06, 0xf0, 0xff, 0x05, 0xff, 0xb5, 0xac, 0x4e, 0x7f, 0x75, 0x06, + 0x72, 0xfb, 0x3f, 0xff, 0x03, 0xbd, 0xac, 0x30, 0xae, 0xc4, 0xb3, 0x06, + 0x90, 0x7f, 0x0e, 0xf3, 0x7f, 0x10, 0x1a, 0x04, 0x51, 0x28, 0x11, 0x33, + 0x04, 0x38, 0x04, 0x1e, 0x34, 0x04, 0x3e, 0x06, 0x28, 0x19, 0x06, 0xf2, + 0x7f, 0x07, 0xf5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x08, 0x40, 0x08, 0xd0, + 0x01, 0xaa, 0x1a, 0x4f, 0x5a, 0x00, 0x00, 0x11, 0x0a, 0x88, 0xab, 0x28, + 0x15, 0xa6, 0x30, 0xa9, 0x28, 0x1b, 0xaf, 0x06, 0x58, 0x19, 0x47, 0x6a, + 0xa1, 0x77, 0x48, 0x1b, 0x05, 0xf8, 0x15, 0xf0, 0x7f, 0x10, 0x06, 0xf0, + 0xff, 0x84, 0x06, 0x1f, 0xb3, 0x5f, 0x6c, 0x9f, 0x53, 0x06, 0xb8, 0x17, + 0x15, 0xac, 0x31, 0xd0, 0xc6, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, 0x1a, + 0x04, 0x30, 0x28, 0x17, 0x5e, 0x32, 0x28, 0x13, 0x3d, 0x06, 0x48, 0x19, + 0x06, 0xf2, 0x7f, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x09, 0x44, + 0x09, 0xd0, 0x01, 0xf9, 0x1a, 0xdb, 0x28, 0x17, 0x0b, 0x88, 0x11, 0xc1, + 0x30, 0xe5, 0x28, 0x19, 0xc1, 0x30, 0xe7, 0x28, 0x1f, 0x10, 0xd6, 0x30, + 0xaf, 0x06, 0x08, 0x1d, 0x43, 0x00, 0x68, 0x00, 0x5a, 0x75, 0x4f, 0xad, + 0x63, 0x20, 0x09, 0x7f, 0xb9, 0x62, 0x20, 0x13, 0x6b, 0xd5, 0x05, 0x4f, + 0x3b, 0x00, 0x50, 0x7f, 0x20, 0x2f, 0xb5, 0x75, 0x20, 0x05, 0x4e, 0x2f, + 0xc9, 0x6a, 0x72, 0x2f, 0xc1, 0x0e, 0x10, 0xff, 0x53, 0x2f, 0xc5, 0x74, + 0x20, 0x01, 0x65, 0xa8, 0x2f, 0xc9, 0x74, 0x21, 0x03, 0x69, 0x4f, 0xd3, + 0x61, 0x00, 0x6c, 0xde, 0x2f, 0xdd, 0x05, 0x51, 0x7f, 0x65, 0x20, 0x6b, + 0x71, 0x81, 0x30, 0x87, 0x04, 0x5f, 0xd3, 0xe0, 0x08, 0x5f, 0x05, 0x6e, + 0x17, 0x06, 0xa8, 0x19, 0xa9, 0xcd, 0xad, 0x1d, 0xcc, 0x81, 0xbd, 0x06, + 0x98, 0x19, 0x32, 0xe1, 0x52, 0xe3, 0x2d, 0x00, 0x63, 0x8b, 0xa0, 0x06, + 0x73, 0x7f, 0x6f, 0x05, 0x21, 0xfd, 0x00, 0x00, 0x27, 0x04, 0x45, 0x2c, + 0x04, 0x43, 0x28, 0x19, 0x47, 0x20, 0x07, 0x38, 0x1b, 0x2d, 0x00, 0x47, + 0x1f, 0x20, 0x0f, 0x3a, 0x04, 0x42, 0x05, 0x68, 0x23, 0x06, 0xf2, 0x7f, + 0x08, 0x55, 0x7f, 0x91, 0x10, 0x05, 0x90, 0x7f, 0x0a, 0x0a, 0xd0, 0x01, + 0x49, 0x1a, 0xf0, 0x28, 0x17, 0x46, 0x0c, 0xc8, 0x17, 0xca, 0x30, 0xe0, + 0x07, 0x68, 0x17, 0x36, 0x81, 0x6d, 0xbb, 0x07, 0x28, 0x17, 0x53, 0x28, + 0xb3, 0x04, 0xb8, 0x15, 0x08, 0x90, 0xff, 0x4d, 0x29, 0xa3, 0x38, 0x0d, + 0x75, 0x64, 0x04, 0x88, 0x11, 0x01, 0x58, 0x17, 0x31, 0x81, 0x72, 0x04, + 0xe5, 0x97, 0x57, 0x06, 0xe8, 0x17, 0x2f, 0xa8, 0xb0, 0x06, 0x98, 0x17, + 0x5a, 0x2b, 0x95, 0x31, 0xe5, 0x06, 0x58, 0x15, 0x00, 0xf8, 0x17, 0xb0, + 0x33, 0x7f, 0x6c, 0x04, 0xcf, 0xc2, 0x00, 0x18, 0x17, 0x1d, 0x04, 0x30, + 0x04, 0x1e, 0x3c, 0x04, 0x34, 0x05, 0xa8, 0x17, 0x06, 0xb2, 0x7f, 0x08, + 0x55, 0x7f, 0x10, 0x05, 0x90, 0x7f, 0x0b, 0x45, 0x0b, 0xd0, 0x01, 0xd9, + 0x19, 0x9e, 0x28, 0x17, 0x0d, 0x28, 0x17, 0x00, 0xe7, 0x30, 0xeb, 0x30, + 0xe9, 0x30, 0xd6, 0x30, 0x6a, 0xaf, 0x06, 0x08, 0x13, 0x3f, 0xff, 0x4a, + 0x4f, 0xa3, 0x6c, 0x2e, 0x87, 0x61, 0xfd, 0x05, 0xaf, 0x25, 0x00, 0x50, + 0x7f, 0x78, 0x0d, 0x5e, 0xa3, 0x04, 0xd8, 0x0f, 0x08, 0x50, 0xff, 0x53, + 0x2f, 0xb1, 0x5f, 0x74, 0x4f, 0x9d, 0x6e, 0x2f, 0xa3, 0x38, 0x17, 0x04, + 0xb8, 0x13, 0x00, 0x31, 0x7f, 0x58, 0x0d, 0xc2, 0x05, 0x1e, 0x27, 0x7f, + 0xff, 0x68, 0x51, 0x57, 0x7f, 0x06, 0xbd, 0xaf, 0x04, 0x07, 0xc8, 0x7c, + 0xb7, 0x81, 0xbd, 0x06, 0x98, 0x17, 0x3f, 0x91, 0x52, 0xed, 0x7c, 0x2d, + 0xc3, 0x8b, 0x06, 0x73, 0x7f, 0x38, 0x0d, 0x05, 0x91, 0xfd, 0x38, 0x17, + 0x3e, 0x04, 0x54, 0x3b, 0x20, 0x01, 0x30, 0x28, 0x11, 0x1f, 0x28, 0x21, + 0x3a, 0x04, 0x6e, 0x42, 0x05, 0x68, 0x11, 0x72, 0x7f, 0x85, 0x06, 0xc2, + 0x7f, 0x07, 0xb5, 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x0c, 0x45, 0x0c, 0xd0, + 0x01, 0x7e, 0x19, 0x5e, 0x28, 0x17, 0x0e, 0x88, 0x17, 0x1f, 0xca, 0x30, + 0xe0, 0x07, 0x08, 0x17, 0x05, 0x9f, 0x25, 0x00, 0xd8, 0x17, 0x3e, 0xa3, + 0x05, 0x58, 0x15, 0xb7, 0x07, 0xf0, 0xff, 0x4d, 0x2f, 0xb1, 0x38, 0x0d, + 0x64, 0x05, 0x28, 0x11, 0x00, 0xb8, 0x17, 0x3e, 0x27, 0x4c, 0x72, 0x05, + 0x65, 0x97, 0x57, 0x7f, 0x06, 0xbd, 0xaf, 0x38, 0x17, 0xa8, 0xb0, 0xbe, + 0x06, 0x98, 0x17, 0x5a, 0x2f, 0xad, 0x31, 0xef, 0x06, 0x58, 0x15, 0x00, + 0x58, 0x17, 0x33, 0x7f, 0x6c, 0xd1, 0x05, 0x6f, 0x40, 0xb8, 0x17, 0x1d, + 0x28, 0x1d, 0x3c, 0x04, 0x34, 0x06, 0x08, 0x17, 0xe4, 0x06, 0xb2, 0x7f, + 0x07, 0xb5, 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x0d, 0x0d, 0xd0, 0x01, 0xf8, + 0x18, 0x44, 0x37, 0x28, 0x17, 0x0f, 0x88, 0xad, 0x28, 0x17, 0xf3, 0x30, + 0x44, 0xb5, 0x20, 0x03, 0xd6, 0x30, 0xaf, 0x06, 0x28, 0x19, 0x47, 0x00, + 0x41, 0x79, 0x4f, 0xb1, 0x6e, 0x00, 0x67, 0x00, 0x73, 0x48, 0x1b, 0x7e, + 0x67, 0x05, 0xcf, 0x37, 0x00, 0x30, 0x7f, 0x78, 0x1f, 0x5e, 0xb5, 0x04, + 0xd8, 0x21, 0x08, 0x50, 0xff, 0x53, 0xaf, 0x2f, 0xc5, 0x74, 0x4f, 0xaf, + 0x6e, 0x2f, 0xb5, 0x38, 0x29, 0x04, 0x78, 0x25, 0x00, 0x71, 0x7f, 0xc2, + 0x58, 0x1f, 0x05, 0x1e, 0x39, 0x86, 0x5e, 0x1a, 0x5c, 0x06, 0xbd, 0xaf, + 0xbd, 0x07, 0xac, 0xc1, 0xc0, 0x81, 0xbd, 0x06, 0x98, 0x17, 0x3f, 0x9b, + 0x52, 0xe5, 0x78, 0x2d, 0x00, 0x43, 0x8b, 0x06, 0x73, 0x7f, 0x38, 0x1f, + 0x05, 0x11, 0xfd, 0x00, 0x00, 0x1a, 0x02, 0x04, 0x51, 0x04, 0x3d, 0x04, + 0x41, 0x28, 0x17, 0x3d, 0x80, 0x28, 0x19, 0x1f, 0x04, 0x43, 0x04, 0x3a, + 0x04, 0x42, 0x9c, 0x05, 0xa8, 0x19, 0x76, 0x61, 0x06, 0xd2, 0x7f, 0x08, + 0x35, 0x7f, 0x10, 0x05, 0xb0, 0x7f, 0x0e, 0x0e, 0x80, 0xd0, 0x01, 0x7e, + 0x19, 0x6f, 0x5b, 0x00, 0x00, 0x10, 0x8f, 0xa8, 0x17, 0xca, 0x30, 0xe0, + 0x07, 0x68, 0x17, 0x05, 0xbf, 0x37, 0x00, 0xb8, 0x17, 0x3e, 0xb5, 0xdb, + 0x04, 0xd8, 0x15, 0x08, 0x70, 0xff, 0x4d, 0x2f, 0xc5, 0x38, 0x0d, 0x64, + 0x04, 0xa8, 0x11, 0x01, 0x38, 0x17, 0xbc, 0x3e, 0x39, 0x72, 0x04, 0xcf, + 0xca, 0x38, 0x17, 0x06, 0xbd, 0xaf, 0x38, 0x17, 0xa8, 0xb0, 0xbe, 0x06, + 0x98, 0x17, 0x5a, 0x2f, 0x9b, 0x31, 0xe7, 0x06, 0x58, 0x15, 0x00, 0xd8, + 0x17, 0x33, 0x7f, 0x6c, 0xd1, 0x04, 0xef, 0xba, 0xd8, 0x17, 0x1d, 0x28, + 0x1f, 0x3c, 0x04, 0x34, 0x05, 0xe8, 0x17, 0xe4, 0x06, 0xb2, 0x7f, 0x08, + 0x35, 0x7f, 0x10, 0x05, 0xb0, 0x7f, 0x0f, 0x0f, 0xd0, 0x01, 0x1a, 0x19, + 0x40, 0x7c, 0x28, 0x17, 0x11, 0x88, 0xc1, 0x30, 0xa7, 0x30, 0x00, 0xb8, + 0x30, 0xe5, 0x30, 0x79, 0x72, 0x25, 0x52, 0x0a, 0xea, 0x81, 0xbb, 0x6c, + 0x05, 0xfd, 0x39, 0x4a, 0x2f, 0xad, 0x6a, 0xb5, 0x2f, 0x9d, 0x2d, 0x4e, + 0x9d, 0x3f, 0x27, 0x62, 0x6f, 0xc1, 0x6c, 0x20, 0x17, 0x07, 0x61, 0x00, + 0x63, 0x00, 0x68, 0x46, 0x9f, 0x04, 0x7f, 0x39, 0x70, 0x7f, 0xf8, 0x06, + 0x7e, 0x2f, 0x90, 0xff, 0x05, 0x3b, 0x9d, 0x08, 0x90, 0xff, 0x06, 0x8f, + 0x2f, 0x6d, 0xde, 0x5d, 0x18, 0x79, 0x72, 0x2b, 0x06, 0x42, 0xfb, 0x3f, + 0xff, 0x1c, 0xc8, 0xfc, 0x00, 0xc8, 0xb9, 0xd2, 0xc4, 0xbc, 0x90, 0xc7, + 0x58, 0x62, 0xce, 0x06, 0x38, 0x1d, 0x0e, 0xf2, 0x7f, 0x27, 0x04, 0x35, + 0x28, 0x07, 0x36, 0x33, 0x04, 0x43, 0x05, 0xc8, 0x0d, 0x9f, 0xff, 0xdf, + 0x6f, 0x32, 0x7f, 0x06, 0x55, 0x7b, 0xc8, 0x07, 0xb5, 0x7f, 0x10, 0x06, + 0x70, 0x7f, 0x10, 0x10, 0xd0, 0x01, 0xd5, 0x17, 0xfa, 0x49, 0x59, 0x00, + 0x3f, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x02, 0x02, 0xd0, 0x01, 0x24, 0x03, + 0x03, 0xd0, 0x01, 0x04, 0x04, 0xd0, 0x01, 0x05, 0x05, 0x92, 0xd0, 0x01, + 0x06, 0x06, 0xd0, 0x01, 0x07, 0x07, 0xd0, 0x01, 0x08, 0x49, 0x08, 0xd0, + 0x01, 0x09, 0x09, 0xd0, 0x01, 0x0a, 0x0a, 0xd0, 0x01, 0x24, 0x0b, 0x0b, + 0xd0, 0x01, 0x0c, 0x0c, 0xd0, 0x01, 0x0d, 0x0d, 0x9e, 0xd0, 0x01, 0x0e, + 0x0e, 0xd0, 0x01, 0xf9, 0x1f, 0xf1, 0x17, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x11, 0x58, 0x08, 0x00, 0x12, 0x01, 0x00, 0x00, 0x30, 0x01, 0x88, 0x10, + 0x50, 0x07, 0x00, 0x0c, 0xd3, 0x97, 0xfd, 0x56, 0x60, 0x0a, 0x06, 0x40, + 0x06, 0x53, 0x00, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x68, 0x00, + 0x10, 0x20, 0x00, 0x4b, 0x20, 0x0b, 0x72, 0x00, 0x65, 0x00, 0x54, 0x61, + 0x05, 0xa0, 0x90, 0x43, 0x40, 0x73, 0xe9, 0x20, 0x75, 0x20, 0x00, 0x56, + 0x64, 0x20, 0x89, 0x20, 0x20, 0x91, 0x75, 0x20, 0x09, 0x05, 0x90, 0xff, + 0xfc, 0xbc, 0x20, 0x77, 0x6b, 0x06, 0x20, 0xf9, 0xb0, 0xff, 0x31, 0x73, + 0x30, 0xff, 0x65, 0x00, 0x6a, 0x6c, 0x05, 0xe1, 0x01, 0x00, 0x70, 0x7f, + 0x72, 0x05, 0x62, 0x94, 0xe9, 0x06, 0xe2, 0xff, 0x00, 0x01, 0xb3, 0x5c, + 0xd5, 0xfc, 0xbb, 0x6d, 0xad, 0x06, 0x73, 0x83, 0x56, 0x5a, 0x23, 0x7d, + 0x69, 0x22, 0xf9, 0x2d, 0x06, 0x43, 0x7d, 0x92, 0x7f, 0x69, 0xa8, 0x62, + 0x81, 0x6f, 0x63, 0x81, 0x6c, 0x05, 0x64, 0x94, 0x2e, 0x04, 0x36, 0x00, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x00, 0x1a, 0x04, + 0x3e, 0x04, 0x40, 0x04, 0x35, 0xc3, 0x20, 0x0b, 0x05, 0x95, 0x11, 0xd3, + 0x97, 0x0b, 0x57, 0x0e, 0xb5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x80, 0x03, + 0x77, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xec, 0xd3, 0x00, 0x11, 0x16, 0x00, 0x00, 0x30, 0x01, 0x80, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xcd, 0x11, 0x67, 0x56, 0x00, 0x00, 0x00, 0x02, 0x80, 0xf0, 0x53, + 0x17, 0x53, 0x02, 0x40, 0x5e, 0x06, 0x98, 0x1b, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x11, 0x70, 0x00, 0x65, 0x20, 0x05, 0x20, 0x00, 0x43, 0x20, + 0x0b, 0x1b, 0x74, 0x00, 0x79, 0x06, 0x60, 0x7f, 0x06, 0xd0, 0xff, 0x68, + 0x07, 0x01, 0x7f, 0x06, 0xb1, 0xff, 0x50, 0xe9, 0x06, 0x61, 0x7f, 0x2d, + 0x06, 0xe3, 0x96, 0xc0, 0xd0, 0x74, 0xc7, 0x0c, 0xa0, 0xbc, 0x74, 0xc7, + 0x07, 0x33, 0x7f, 0x0e, 0x32, 0x7f, 0x22, 0x04, 0x01, 0x30, 0x04, 0x39, + 0x04, 0x31, 0x04, 0x4d, 0x20, 0x05, 0x99, 0x06, 0x3d, 0x21, 0xfa, 0x81, + 0x0f, 0x95, 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x81, + 0x58, 0x17, 0x03, 0x80, 0xd8, 0x9a, 0xc4, 0x96, 0x06, 0xb8, 0x17, 0x54, + 0x4b, 0x28, 0x17, 0x6f, 0x27, 0x13, 0x73, 0x28, 0x1d, 0x75, 0x00, 0x1e, + 0x6e, 0x00, 0x67, 0x05, 0xe8, 0x1d, 0x00, 0x10, 0x7f, 0x06, 0xf0, 0xff, + 0x0d, 0xd0, 0x7f, 0x43, 0x8a, 0x21, 0xfd, 0x6e, 0x00, 0x64, 0x2a, 0x1d, + 0x64, 0x22, 0x07, 0x20, 0xb8, 0x20, 0x09, 0x65, 0x2a, 0x1f, 0x05, 0x91, + 0x95, 0x06, 0xf8, 0x17, 0x00, 0xac, 0x24, 0x1a, 0xc6, 0x9d, 0xc2, 0x07, + 0xb3, 0x7f, 0x0d, 0xd1, 0xff, 0x13, 0x28, 0x17, 0x3e, 0x03, 0x04, 0x41, + 0x04, 0x4e, 0x04, 0x3d, 0x06, 0x48, 0x17, 0x10, 0x00, 0x15, 0x7f, 0x90, + 0x10, 0x05, 0xd0, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x12, 0x10, 0x88, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x80, 0xfa, 0x57, 0x86, 0x06, 0xe8, 0x17, 0x5f, + 0x65, 0x2f, 0xab, 0x6c, 0x06, 0x48, 0x13, 0x00, 0x10, 0x7f, 0x06, 0xf0, + 0xff, 0x10, 0x06, 0x10, 0x7f, 0x06, 0xf8, 0x17, 0x0a, 0xc0, 0xc9, 0xfd, + 0xb8, 0x06, 0xb8, 0x9a, 0x43, 0x2b, 0x93, 0x69, 0x80, 0x0e, 0xa2, 0xff, + 0x1a, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x43, 0xb9, 0x28, 0x15, 0x33, 0x06, + 0x48, 0x17, 0x0f, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x03, 0x03, 0xd0, + 0x01, 0x00, 0xdd, 0x11, 0x91, 0x56, 0x00, 0x00, 0x05, 0x80, 0x0a, 0xb0, + 0x65, 0xf9, 0x7a, 0x06, 0xba, 0xaf, 0x48, 0x4f, 0xa9, 0x6e, 0x2f, 0x00, + 0x63, 0x2f, 0xb3, 0x75, 0x06, 0x28, 0x17, 0xd0, 0x7f, 0x06, 0xf0, 0xff, + 0x10, 0x06, 0x10, 0x7f, 0x86, 0x06, 0xf8, 0x17, 0xe0, 0xc2, 0xfc, 0xc8, + 0x06, 0xb8, 0x9a, 0x0e, 0xf2, 0xff, 0x21, 0x80, 0x28, 0x17, 0x3d, 0x04, + 0x4c, 0x04, 0x47, 0x04, 0x36, 0xf2, 0x28, 0x1d, 0x06, 0x1f, 0xb7, 0x0f, + 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x04, 0x04, 0xd0, 0x01, 0x95, 0x20, + 0x11, 0x03, 0x28, 0x17, 0x06, 0x80, 0xf0, 0x53, 0x2d, 0x47, 0x4e, 0x06, + 0xba, 0xaf, 0x54, 0x00, 0x61, 0x2c, 0xaf, 0x58, 0x15, 0x06, 0x3a, 0xb1, + 0xf0, 0xf0, 0x7f, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xf0, 0x7f, 0x06, 0xf8, + 0x17, 0xc0, 0xd0, 0x74, 0xc7, 0x30, 0x11, 0xc9, 0x07, 0x93, 0x7f, 0x0d, + 0xf2, 0xff, 0x22, 0x04, 0x30, 0x04, 0x53, 0x39, 0x68, 0x15, 0x3d, 0x06, + 0x28, 0x17, 0xfa, 0x81, 0x0f, 0xd5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x20, + 0x05, 0x05, 0xd0, 0x01, 0x29, 0x11, 0xcb, 0x55, 0x00, 0x01, 0x00, 0x07, + 0x80, 0x09, 0x56, 0xa9, 0x7f, 0x06, 0xba, 0xaf, 0x57, 0x43, 0x2f, 0xa7, + 0x69, 0x28, 0x1b, 0x79, 0x2f, 0xb5, 0x06, 0x1a, 0xad, 0xd0, 0x7f, 0xe1, + 0x06, 0xf0, 0xff, 0x10, 0x06, 0x30, 0x7f, 0x06, 0xf8, 0x17, 0x90, 0xc7, + 0x74, 0xc7, 0x06, 0xb8, 0x9a, 0x80, 0x0e, 0xf2, 0xff, 0x26, 0x04, 0x37, + 0x04, 0x4f, 0x04, 0x38, 0xf2, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x0f, 0xb5, + 0x7f, 0x10, 0x06, 0x30, 0x7f, 0x06, 0x06, 0xd0, 0x01, 0xaf, 0x20, 0x10, + 0xa7, 0x28, 0x17, 0x08, 0x80, 0xf0, 0x53, 0x57, 0x57, 0x53, 0x07, 0x1a, + 0xaf, 0x6e, 0x2f, 0xb5, 0x6e, 0x06, 0x48, 0x17, 0xb0, 0x7f, 0x06, 0xf0, + 0xff, 0xc0, 0x10, 0x06, 0x30, 0x7f, 0x06, 0xf8, 0x17, 0xc0, 0xd0, 0x74, + 0xc7, 0x9c, 0xb0, 0xc0, 0x07, 0x53, 0x7f, 0x0e, 0x32, 0xff, 0x22, 0x04, + 0x30, 0x04, 0x39, 0x04, 0x44, 0x3d, 0x20, 0x05, 0x3d, 0x04, 0x4c, 0x06, + 0x28, 0x1d, 0xfa, 0x81, 0xc8, 0x0f, 0x95, 0x7f, 0x10, 0x06, 0x30, 0x7f, + 0x07, 0x07, 0xd0, 0x01, 0x59, 0x10, 0x78, 0x82, 0x28, 0x17, 0x09, 0x80, + 0xb0, 0x65, 0x17, 0x06, 0xc8, 0x17, 0x4e, 0x0d, 0x00, 0x65, 0x00, 0x77, + 0x2a, 0xa9, 0x58, 0x1f, 0x70, 0x20, 0x0d, 0x80, 0x05, 0xda, 0xb7, 0x4e, + 0x00, 0x6f, 0x00, 0x75, 0x00, 0x76, 0xba, 0x20, 0x85, 0x61, 0x20, 0x07, + 0xd0, 0x87, 0x05, 0x3f, 0xc0, 0x58, 0x49, 0x15, 0x62, 0xeb, 0x05, 0x80, + 0x6f, 0x01, 0x31, 0x7f, 0x05, 0xd1, 0xff, 0x75, 0x22, 0x01, 0x76, 0x21, + 0x85, 0x92, 0x03, 0x60, 0xe9, 0x05, 0xae, 0xbb, 0x06, 0xf8, 0x17, 0xe0, + 0xc2, 0xa0, 0xbc, 0x74, 0x56, 0xc7, 0x06, 0xb3, 0x7f, 0x69, 0x23, 0x81, + 0x75, 0x06, 0x82, 0x03, 0x33, 0x7f, 0x76, 0xc0, 0x2e, 0xaf, 0x06, 0x72, + 0x81, 0x1d, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x51, 0x4b, 0x28, 0x1b, 0x20, + 0x68, 0x23, 0x31, 0x04, 0x4d, 0x28, 0x29, 0xe4, 0x05, 0x7f, 0xc1, 0x0f, + 0x15, 0x7f, 0x10, 0x06, 0xd0, 0x7f, 0x08, 0x08, 0xd0, 0x01, 0xc3, 0x11, + 0x00, 0x5d, 0x56, 0x00, 0x00, 0x0a, 0x80, 0x43, 0x68, 0x2b, 0x12, 0x57, + 0x06, 0xfa, 0xaf, 0x6f, 0x2a, 0xa1, 0x75, 0x06, 0x6a, 0xb1, 0xd0, 0x7f, + 0xe2, 0x06, 0xf0, 0xff, 0x0e, 0x10, 0x7f, 0x3c, 0xa1, 0x75, 0x00, 0x64, + 0x2e, 0xb5, 0x64, 0xbc, 0x2c, 0xaf, 0x64, 0x2a, 0x25, 0x5a, 0x23, 0x05, + 0x71, 0x93, 0x06, 0xf8, 0x17, 0xc0, 0xd0, 0x03, 0x24, 0xc6, 0x04, 0xc7, + 0x48, 0xc5, 0x07, 0x53, 0x7f, 0x06, 0x51, 0xff, 0xf1, 0x51, 0xfd, 0x31, + 0xf9, 0x06, 0x11, 0xff, 0x38, 0x0b, 0x3e, 0x04, 0x4e, 0x28, 0x11, 0x1e, + 0x3d, 0x04, 0x4c, 0x05, 0x88, 0x0d, 0xa2, 0xff, 0x0f, 0xc5, 0x7f, 0x10, + 0x06, 0x10, 0x7f, 0x09, 0x44, 0x09, 0xd0, 0x01, 0xc2, 0x11, 0x40, 0x28, + 0x17, 0x0b, 0x80, 0x02, 0xb0, 0x65, 0xf9, 0x7a, 0x0c, 0x77, 0x06, 0x9d, + 0x34, 0x48, 0x22, 0x00, 0x73, 0x4f, 0x31, 0x43, 0x00, 0x68, 0x4f, 0xaf, + 0x43, 0xb5, 0x4f, 0xbf, 0x6e, 0x05, 0x88, 0x1b, 0x70, 0x7f, 0x63, 0x60, + 0x7f, 0x28, 0x20, 0x09, 0x15, 0x6f, 0x00, 0x6d, 0x2b, 0x2d, 0xe9, 0x66, + 0xa7, 0x29, 0x04, 0xcf, 0xc7, 0x17, 0x4b, 0x00, 0x72, 0x4f, 0xa3, 0x73, + 0x2f, 0xb3, 0xd0, 0x8b, 0x05, 0x77, 0x97, 0x57, 0x6f, 0x41, 0x6d, 0x65, + 0x4d, 0xb3, 0x64, 0x4c, 0x2d, 0xd1, 0x93, 0x05, 0x30, 0x7f, 0xb8, 0x58, + 0x17, 0x6f, 0x88, 0x19, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0xe0, 0xc2, + 0xfc, 0x07, 0xc8, 0x20, 0x00, 0x04, 0xd6, 0x07, 0x53, 0x7f, 0x06, 0x3a, + 0x17, 0x06, 0xd1, 0xff, 0x10, 0x21, 0x04, 0x38, 0x48, 0x11, 0x47, 0x04, + 0x36, 0x04, 0x20, 0x43, 0x04, 0x33, 0xff, 0x43, 0x04, 0x35, 0x04, 0x37, + 0x1c, 0x04, 0x34, 0x04, 0x04, 0xd3, 0xf7, 0x7f, 0xff, 0x35, 0x7f, 0x23, + 0x7e, 0xc8, 0x0f, 0x15, 0x7f, 0x10, 0x06, 0x70, 0x7f, 0x0a, 0x0a, 0xd0, + 0x01, 0xa8, 0x11, 0x0b, 0x81, 0x28, 0x17, 0x0c, 0x80, 0xd7, 0x82, 0x17, + 0x68, 0x06, 0xb8, 0x17, 0x6f, 0x4d, 0x2e, 0x2f, 0x3f, 0xb1, 0x6c, 0x46, + 0x91, 0x05, 0xf8, 0x15, 0xf0, 0x7f, 0x05, 0xf8, 0x15, 0xfa, 0xd8, 0x17, + 0xb1, 0x0b, 0x05, 0xd5, 0x97, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x44, 0x49, + 0x13, 0x74, 0xf8, 0x29, 0x1d, 0x3c, 0xa7, 0x98, 0x19, 0x05, 0x71, 0x0b, + 0x06, 0xf8, 0x17, 0x00, 0xba, 0x24, 0x1c, 0xc6, 0xac, 0xb9, 0x06, 0x98, + 0x19, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x1c, 0x04, 0x07, 0x4f, 0x04, + 0x3e, 0x04, 0x3b, 0x28, 0x1d, 0x06, 0x18, 0x13, 0x3f, 0xff, 0xf2, 0x35, + 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x0b, + 0x0b, 0xd0, 0x01, 0x72, 0x00, 0x11, 0xe6, 0x55, 0x00, 0x00, 0x0e, 0x80, + 0x70, 0x1a, 0x5f, 0x16, 0x53, 0x06, 0xb8, 0x17, 0x3e, 0x93, 0x61, 0x2f, + 0xaf, 0x67, 0xff, 0x4f, 0xaf, 0x3e, 0xb3, 0x05, 0xda, 0xb1, 0x00, 0x10, + 0x7f, 0x05, 0xd8, 0x1b, 0xb8, 0x17, 0xf1, 0x0b, 0x06, 0x78, 0x17, 0xf0, + 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, + 0xa5, 0xc7, 0x54, 0xd6, 0xf0, 0x06, 0x98, 0x15, 0x00, 0x13, 0x7f, 0x06, + 0x13, 0xff, 0x06, 0xd1, 0xff, 0x27, 0x04, 0x36, 0x04, 0x01, 0x30, 0x04, + 0x3d, 0x04, 0x45, 0x04, 0x43, 0x20, 0x07, 0xf9, 0x06, 0x18, 0x1b, 0x35, + 0x7f, 0x06, 0xb8, 0x17, 0x08, 0x15, 0x7f, 0x10, 0x05, 0xd0, 0x7f, 0x0c, + 0x0c, 0xd0, 0x01, 0x10, 0x1d, 0x11, 0xb6, 0x28, 0x17, 0x0f, 0x80, 0x57, + 0x53, 0x2d, 0x95, 0x62, 0x06, 0xb8, 0x17, 0x4e, 0x48, 0x15, 0x3e, 0x29, + 0x75, 0x06, 0x4a, 0xaf, 0xff, 0xd0, 0x7f, 0x05, 0xd8, 0x13, 0xf8, 0x17, + 0xb1, 0x0b, 0x05, 0xd5, 0x97, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x58, + 0x17, 0xc0, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x9c, 0xb0, 0x30, 0xd1, + 0xb0, 0xc6, 0xe8, 0x06, 0x98, 0x19, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, + 0x1d, 0x48, 0x15, 0x4c, 0x04, 0x42, 0x3f, 0x04, 0x3e, 0x28, 0x19, 0x06, + 0x18, 0x17, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, + 0x10, 0x7f, 0x22, 0x0d, 0x0d, 0xd0, 0x01, 0xfe, 0x10, 0xd4, 0x28, 0x17, + 0x10, 0x05, 0x80, 0xf2, 0x96, 0x97, 0x67, 0x06, 0xb8, 0x17, 0x59, 0x4a, + 0x9b, 0x5f, 0x6c, 0x2f, 0x31, 0x6e, 0x06, 0x48, 0x17, 0xd0, 0x7f, 0x06, + 0xd8, 0x17, 0xb1, 0x0b, 0x06, 0xb8, 0x17, 0xf0, 0x05, 0xb0, 0x87, 0x00, + 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x08, 0xc7, 0xb0, 0xb9, + 0xf4, 0x06, 0x98, 0x15, 0xd3, 0x7f, 0x07, 0x98, 0x17, 0x05, 0x93, 0x09, + 0x2e, 0x48, 0x15, 0x3b, 0x04, 0x7e, 0x38, 0x48, 0x1d, 0x06, 0x18, 0x17, + 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, + 0x0e, 0x44, 0x0e, 0xd0, 0x01, 0xd8, 0x10, 0xb5, 0x28, 0x17, 0x11, 0x80, + 0x08, 0x09, 0x56, 0xa9, 0x7f, 0x06, 0xb8, 0x17, 0x43, 0x00, 0x68, 0xbf, + 0x2f, 0x2d, 0x61, 0x2a, 0x9f, 0x3e, 0xa9, 0x06, 0x1a, 0xaf, 0xd0, 0x7f, + 0x06, 0xd8, 0x17, 0xb1, 0x0b, 0xf8, 0x06, 0xb8, 0x17, 0x05, 0xb0, 0x87, + 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x90, 0xc7, 0x74, + 0x75, 0xc7, 0x06, 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x26, + 0x28, 0x03, 0x4f, 0x28, 0x15, 0x7e, 0xa0, 0x06, 0x08, 0x11, 0x5f, 0xff, + 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, + 0x0f, 0x44, 0x0f, 0xd0, 0x01, 0xaf, 0x10, 0xa7, 0x28, 0x17, 0x14, 0x80, + 0x0a, 0x4f, 0x5c, 0x71, 0x67, 0x06, 0xb8, 0x17, 0x50, 0x4f, 0xa9, 0x67, + 0xdf, 0x2f, 0xa1, 0x3f, 0xb7, 0x67, 0x06, 0x0a, 0xb3, 0x00, 0x10, 0x7f, + 0x05, 0xd8, 0x1b, 0xb8, 0x17, 0xf1, 0x0b, 0xf8, 0x06, 0x78, 0x17, 0x05, + 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x51, + 0xd5, 0x65, 0x75, 0xb4, 0x06, 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, + 0xff, 0x1f, 0x28, 0x13, 0x3d, 0x28, 0x0b, 0x7f, 0x43, 0x20, 0x05, 0x3c, + 0x17, 0x05, 0xf8, 0x1b, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x08, 0x15, 0x7f, + 0x10, 0x05, 0xd0, 0x7f, 0x22, 0x10, 0x10, 0xd0, 0x01, 0x1e, 0x10, 0xb0, + 0x28, 0x17, 0x15, 0x05, 0x80, 0x9c, 0x5b, 0x2d, 0x86, 0x06, 0xb8, 0x17, + 0x59, 0x2f, 0xad, 0x51, 0x6c, 0x2f, 0xaf, 0x6e, 0x06, 0x4a, 0xad, 0x00, + 0x00, 0x49, 0x80, 0x7d, 0xff, 0x05, 0xd8, 0x0f, 0x00, 0x38, 0x17, 0x91, + 0x0b, 0x05, 0xfd, 0xaf, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, + 0x05, 0x91, 0x09, 0x87, 0x06, 0xf8, 0x17, 0x74, 0xc7, 0x80, 0xb7, 0x06, + 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x05, 0x18, 0x04, 0x3b, + 0x04, 0x30, 0x28, 0x19, 0x4c, 0x06, 0x48, 0x15, 0x3c, 0x00, 0x00, 0x35, + 0x7f, 0x06, 0xb8, 0x17, 0x06, 0xf5, 0x7f, 0x10, 0x06, 0xf0, 0x7f, 0x11, + 0x11, 0x80, 0xd0, 0x01, 0x9c, 0x11, 0x93, 0x56, 0x00, 0x00, 0x16, 0x05, + 0x80, 0xb1, 0x82, 0xee, 0x84, 0x06, 0xb8, 0x17, 0x48, 0x2f, 0xa7, 0x5f, + 0x61, 0x28, 0x19, 0x69, 0x2f, 0x97, 0x06, 0x38, 0x1b, 0xf0, 0x7f, 0x05, + 0xf8, 0x1d, 0xb8, 0x17, 0xfc, 0xd1, 0x0b, 0x06, 0x98, 0x17, 0x05, 0xb0, + 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0x54, 0xd6, + 0x38, 0x44, 0xb8, 0x06, 0xb8, 0x17, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, + 0x25, 0x04, 0x43, 0x8f, 0x28, 0x17, 0x3b, 0x04, 0x4f, 0x06, 0x68, 0x1b, + 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, 0xf5, 0x7f, 0x91, 0x10, 0x05, 0xf0, + 0x7f, 0x12, 0x12, 0xd0, 0x01, 0x0e, 0x11, 0x7e, 0x28, 0x17, 0x02, 0x17, + 0x80, 0xf0, 0x53, 0x71, 0x67, 0x06, 0xb8, 0x17, 0x54, 0xb7, 0x2f, 0xad, + 0x69, 0x2f, 0xa3, 0x3a, 0xa7, 0x67, 0x06, 0x2a, 0xb3, 0xf0, 0x7f, 0x06, + 0xb8, 0x17, 0xfc, 0xd1, 0x0b, 0x06, 0x98, 0x17, 0x05, 0xb0, 0x87, 0x00, + 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x17, 0xc0, 0xd0, 0x0e, 0x74, + 0xc7, 0x65, 0xb4, 0x06, 0x98, 0x19, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, + 0x22, 0xac, 0x28, 0x15, 0x39, 0x28, 0x05, 0x43, 0x28, 0x17, 0x06, 0x18, + 0x15, 0x00, 0x00, 0x0e, 0xfa, 0x81, 0x71, 0x67, 0x06, 0xb8, 0x17, 0x07, + 0xf5, 0x7f, 0x10, 0x05, 0xf0, 0x7f, 0x13, 0x44, 0x13, 0xd0, 0x01, 0x2e, + 0x10, 0x25, 0x28, 0x17, 0x18, 0x80, 0x0a, 0x8e, 0x6f, 0x56, 0x6e, 0x06, + 0xb8, 0x17, 0x50, 0x4f, 0xa7, 0x67, 0x3f, 0x00, 0x68, 0x2f, 0xb7, 0x06, + 0x1a, 0xad, 0xf0, 0x7f, 0x05, 0xf8, 0x15, 0xd8, 0x17, 0xb1, 0x0b, 0xeb, + 0x05, 0xdd, 0xaf, 0xd8, 0x17, 0x05, 0xb0, 0x87, 0x49, 0x29, 0x11, 0x6c, + 0x2e, 0xb1, 0x70, 0xff, 0x76, 0x73, 0x29, 0x97, 0x5e, 0x3b, 0x39, 0x2f, + 0x73, 0x05, 0x0f, 0xcd, 0x06, 0xf8, 0x17, 0x91, 0x1d, 0xd3, 0xc4, 0xd6, + 0x06, 0x98, 0x15, 0xd3, 0x7f, 0x06, 0x3e, 0xb5, 0x49, 0x2e, 0xab, 0x45, + 0x68, 0x06, 0xa1, 0xff, 0x1f, 0x04, 0x4d, 0x28, 0x11, 0x45, 0x28, 0x17, + 0x9e, 0x06, 0x38, 0x15, 0x00, 0x00, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x07, + 0xd5, 0x7f, 0x10, 0x06, 0x10, 0x7f, 0x14, 0x40, 0x14, 0xd0, 0x01, 0xc2, + 0x10, 0x09, 0x55, 0x00, 0x00, 0x02, 0x19, 0x80, 0xd1, 0x91, 0x80, 0x95, + 0x06, 0xb8, 0x17, 0x4b, 0xbf, 0x2f, 0xad, 0x6e, 0x2f, 0x9f, 0x38, 0x1d, + 0x06, 0x38, 0x17, 0xd0, 0x7f, 0x06, 0xd8, 0x17, 0xb1, 0x0b, 0xf8, 0x06, + 0xb8, 0x17, 0x05, 0xb0, 0x87, 0x00, 0x5e, 0x2f, 0x05, 0x91, 0x09, 0x06, + 0xf8, 0x17, 0xc4, 0xc9, 0x3c, 0x75, 0xba, 0x06, 0xb8, 0x17, 0x06, 0x32, + 0x73, 0x07, 0xb1, 0xff, 0x26, 0x28, 0x07, 0x38, 0x28, 0x19, 0x1f, 0x4c, + 0x04, 0x3c, 0x48, 0x21, 0x05, 0xf8, 0x1d, 0x35, 0x7f, 0x06, 0xb8, 0x17, + 0x07, 0xd5, 0x7f, 0x90, 0x10, 0x06, 0x10, 0x7f, 0x15, 0x15, 0xd0, 0x01, + 0x5f, 0x11, 0x25, 0x54, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x23, 0x90, 0x5f, + 0x6c, 0xb5, 0x06, 0xb8, 0x17, 0x4c, 0x2f, 0x2b, 0x3f, 0xb1, 0x63, 0x2f, + 0xb1, 0x69, 0x2e, 0xb3, 0xff, 0x3f, 0xbb, 0x05, 0xba, 0xb7, 0x00, 0x50, + 0x7f, 0x05, 0x98, 0x1f, 0xb8, 0x17, 0x00, 0x31, 0x0b, 0x06, 0x38, 0x17, + 0x05, 0xb0, 0x87, 0xe1, 0x00, 0x58, 0x17, 0x05, 0x91, 0x09, 0x06, 0xf8, + 0x17, 0x44, 0xb8, 0xa5, 0xc7, 0x06, 0xb8, 0x17, 0xc5, 0x06, 0x32, 0x73, + 0x07, 0xb1, 0xff, 0x1b, 0x04, 0x4f, 0x48, 0x15, 0x46, 0x28, 0x1f, 0xfc, + 0x30, 0x09, 0x05, 0xf8, 0x17, 0x35, 0x7f, 0x06, 0xb8, 0x17, 0x08, 0x55, + 0x7f, 0x10, 0x05, 0x90, 0x7f, 0x16, 0x16, 0x82, 0xd0, 0x01, 0x98, 0x12, + 0x48, 0x55, 0x03, 0x4f, 0xff, 0x0d, 0x05, 0x80, 0xf0, 0x53, 0x2d, 0x4e, + 0x06, 0xb8, 0x1b, 0x54, 0x2e, 0xab, 0x7f, 0x69, 0x48, 0x19, 0x3a, 0xab, + 0x05, 0xd8, 0x17, 0x00, 0x50, 0x7f, 0x05, 0x98, 0x17, 0xf8, 0x1b, 0xf1, + 0x0b, 0xfc, 0x05, 0x9d, 0xb3, 0xd8, 0x1b, 0x05, 0xb0, 0x87, 0x00, 0x5e, + 0x33, 0x05, 0x91, 0x09, 0x06, 0xf8, 0x1b, 0xc0, 0xd0, 0x0e, 0x74, 0xc7, + 0x11, 0xc9, 0x06, 0x98, 0x1d, 0x06, 0x32, 0x73, 0x07, 0xb1, 0xff, 0x22, + 0x00, 0x04, 0x30, 0x04, 0x39, 0x04, 0x47, 0x04, 0x36, 0x39, 0x04, 0x43, + 0x06, 0x28, 0x19, 0x08, 0x34, 0xff, 0x10, 0x0d, 0xd0, 0x7f, 0x0c, 0x0c, + 0xd0, 0x01, 0x01, 0x39, 0x11, 0xd5, 0x55, 0x00, 0x00, 0x12, 0x28, 0x17, + 0x2f, 0x57, 0x53, 0x07, 0x18, 0x17, 0x6e, 0x4f, 0xad, 0x05, 0xf8, 0x13, + 0x00, 0x10, 0x7f, 0x05, 0xd8, 0x13, 0xff, 0x00, 0x58, 0x17, 0x51, 0x0b, + 0x05, 0xdd, 0xb3, 0x00, 0x38, 0x17, 0x05, 0x50, 0x87, 0x00, 0xb8, 0x17, + 0x05, 0x31, 0x09, 0x07, 0x38, 0x17, 0x3d, 0x9c, 0xb0, 0x06, 0xf8, 0x17, + 0x05, 0xd2, 0x73, 0x07, 0xb1, 0xff, 0x58, 0x17, 0x3d, 0x28, 0x1d, 0x1c, + 0x3d, 0x04, 0x4c, 0x06, 0x88, 0x17, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x10, + 0x7f, 0x11, 0x11, 0x88, 0xd0, 0x01, 0x64, 0x10, 0x92, 0x28, 0x17, 0x13, + 0x80, 0xd8, 0x15, 0x9a, 0xc4, 0x96, 0x06, 0xb8, 0x17, 0x4b, 0x2f, 0xaf, + 0x6f, 0x2f, 0xad, 0x7f, 0x73, 0x2f, 0xb5, 0x06, 0x3b, 0x31, 0x00, 0x30, + 0x7f, 0x05, 0xb8, 0x1d, 0xb8, 0x17, 0x00, 0x11, 0x0b, 0x06, 0x58, 0x17, + 0xab, 0x05, 0xb0, 0x87, 0x44, 0x49, 0x13, 0x74, 0x29, 0x1d, 0x69, 0x2d, + 0x21, 0x9e, 0x31, 0xc0, 0x05, 0x71, 0x0b, 0x06, 0xf8, 0x17, 0x00, 0xac, + 0x24, 0xc6, 0x9d, 0xc2, 0xe8, 0x06, 0x98, 0x17, 0x06, 0x32, 0x73, 0x07, + 0xb1, 0xff, 0x13, 0x28, 0x17, 0x3e, 0x04, 0x41, 0x3c, 0x04, 0x4e, 0x28, + 0x1b, 0x06, 0x18, 0x15, 0x08, 0x54, 0xff, 0x10, 0x0d, 0xb0, 0x7f, 0x12, + 0x12, 0x8c, 0xd0, 0x01, 0x16, 0x10, 0x95, 0x28, 0x17, 0xdf, 0xff, 0x01, + 0x01, 0x92, 0xd0, 0x01, 0x02, 0x02, 0xd0, 0x01, 0x03, 0x03, 0xd0, 0x01, + 0x04, 0x49, 0x04, 0xd0, 0x01, 0x05, 0x05, 0xd0, 0x01, 0x06, 0x06, 0xd0, + 0x01, 0x24, 0x07, 0x07, 0xd0, 0x01, 0x08, 0x08, 0xd0, 0x01, 0x09, 0x09, + 0x92, 0xd0, 0x01, 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0xd0, 0x01, 0x0d, + 0x49, 0x0d, 0xd0, 0x01, 0x0e, 0x0e, 0xd0, 0x01, 0x0f, 0x0f, 0xd0, 0x01, + 0x24, 0x10, 0x10, 0xd0, 0x01, 0x13, 0x13, 0xd0, 0x01, 0x14, 0x14, 0x92, + 0xd0, 0x01, 0x15, 0x15, 0xd0, 0x01, 0x16, 0x16, 0xd0, 0x01, 0x17, 0x49, + 0x17, 0xd0, 0x01, 0x18, 0x18, 0xd0, 0x01, 0x19, 0x19, 0xd0, 0x01, 0x80, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x90, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xf9, 0x0f, 0x47, + 0x51, 0x00, 0x00, 0x00, 0x01, 0x90, 0xdb, 0x30, 0xf3, 0x30, 0xb3, 0xc0, + 0x20, 0x03, 0x06, 0x78, 0x1d, 0x48, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x06, + 0x67, 0x00, 0x20, 0x00, 0x4b, 0x60, 0x09, 0x0e, 0x50, 0x7f, 0x6b, 0xc0, + 0x06, 0x40, 0xfd, 0x0f, 0x11, 0x7f, 0x2d, 0x4e, 0xfd, 0x56, 0x20, 0x00, + 0x08, 0x99, 0x99, 0x2f, 0x6e, 0x06, 0x5b, 0x1f, 0x4d, 0xd6, 0x69, 0x60, + 0xcf, 0x06, 0xbb, 0x99, 0x0e, 0xf2, 0x7f, 0x13, 0x04, 0x3e, 0x04, 0x3d, + 0x27, 0x04, 0x3a, 0x40, 0x05, 0x33, 0x04, 0x06, 0x1d, 0x23, 0x06, 0x92, + 0x79, 0x0f, 0xd5, 0x7f, 0x9e, 0x0e, 0x76, 0x7f, 0x01, 0x01, 0xd0, 0x01, + 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x4c, 0x10, 0x00, + 0x23, 0x00, 0x00, 0x40, 0x01, 0x91, 0x14, 0x20, 0x60, 0x09, 0x06, 0x60, + 0x06, 0xc1, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xcc, 0x0f, 0xc8, 0x50, + 0x01, 0x48, 0x1c, 0x00, 0x01, 0x91, 0xde, 0x30, 0xab, 0x30, 0xaa, 0x30, + 0x82, 0x06, 0x98, 0x1f, 0x4d, 0x00, 0x61, 0x00, 0x63, 0x20, 0x03, 0x6f, + 0xa0, 0x0e, 0xe0, 0x7f, 0x75, 0x10, 0x06, 0x61, 0x7f, 0x2d, 0x4e, 0xfd, + 0x56, 0x20, 0x04, 0x00, 0xb3, 0x6f, 0xe8, 0x95, 0x06, 0x5b, 0x23, 0xc8, + 0xb9, 0x0e, 0x74, 0xce, 0x24, 0xc6, 0x07, 0x13, 0x7f, 0x06, 0xf2, 0x7f, + 0x06, 0x72, 0xff, 0x1c, 0x09, 0x04, 0x30, 0x04, 0x3a, 0x20, 0x03, 0x3e, + 0x04, 0x06, 0x5d, 0x23, 0x1c, 0xb3, 0x6f, 0x80, 0x06, 0x62, 0x79, 0x0f, + 0xd5, 0x7f, 0x0e, 0x76, 0x7f, 0x01, 0x01, 0xe0, 0xd0, 0x01, 0x38, 0x1b, + 0x00, 0x3f, 0xff, 0x00, 0x11, 0x1c, 0x21, 0x00, 0x12, 0x02, 0x00, 0x00, + 0x30, 0x01, 0x80, 0x16, 0x50, 0x07, 0x00, 0x0c, 0xf0, 0x53, 0x7e, 0x6e, + 0x60, 0x0a, 0x06, 0x40, 0x06, 0x54, 0x00, 0x07, 0x61, 0x00, 0x69, 0x00, + 0x77, 0x20, 0x05, 0x06, 0x50, 0x86, 0x30, 0x7f, 0x74, 0xef, 0x06, 0xe0, + 0x7f, 0x06, 0xf0, 0xff, 0x07, 0x30, 0x7f, 0xe1, 0x06, 0x61, 0xff, 0x2d, + 0x4e, 0x10, 0xfd, 0x56, 0x20, 0x06, 0xa3, 0x05, 0xc0, 0xd0, 0x74, 0xc7, + 0x30, 0x44, 0xc6, 0x0e, 0xd3, 0x7f, 0x06, 0xb3, 0xff, 0x22, 0x04, 0x30, + 0x04, 0x10, 0x39, 0x04, 0x32, 0x20, 0x05, 0x3d, 0x04, 0x4c, 0x04, 0x87, + 0x06, 0x15, 0x09, 0xfa, 0x81, 0x63, 0x70, 0x0e, 0xf5, 0x7f, 0x10, 0x06, + 0xb0, 0x7f, 0x02, 0x27, 0xfb, 0x20, 0x90, 0x01, 0x68, 0x3b, 0xdb, 0x30, + 0xf3, 0x30, 0xb3, 0xc4, 0x20, 0x03, 0x06, 0x78, 0x3f, 0x48, 0x00, 0x6f, + 0x28, 0x35, 0x67, 0x00, 0x1b, 0x20, 0x00, 0x4b, 0x60, 0x09, 0x0e, 0x50, + 0x7f, 0x6b, 0x06, 0x40, 0xfd, 0x0f, 0x11, 0x7f, 0x88, 0x58, 0x3b, 0x99, + 0x99, 0x2f, 0x06, 0x6b, 0x41, 0x4d, 0xd6, 0x69, 0x62, 0xcf, 0x06, 0xbb, + 0xbb, 0x0e, 0xf2, 0x7f, 0x13, 0x04, 0x3e, 0x28, 0x35, 0x3a, 0xbc, 0x40, + 0x05, 0x33, 0x06, 0x28, 0x3b, 0x06, 0x92, 0x79, 0x0f, 0xd5, 0x7f, 0x0e, + 0x76, 0x7f, 0x01, 0x01, 0xd3, 0xd0, 0x01, 0x00, 0xff, 0xff, 0x02, 0x5f, + 0xff, 0x80, 0x19, 0x6f, 0xff, 0x06, 0x9d, 0x75, 0xae, 0x07, 0x9f, 0x7b, + 0xef, 0x10, 0x07, 0x2b, 0x7b, 0xe1, 0x06, 0x6e, 0xfb, 0x58, 0x3f, 0x06, + 0x93, 0x05, 0xc0, 0x04, 0xd0, 0x74, 0xc7, 0x44, 0xc6, 0x10, 0x06, 0x9e, + 0x7b, 0x22, 0x04, 0x04, 0x30, 0x04, 0x39, 0x04, 0x32, 0x20, 0x05, 0x3d, + 0x04, 0x43, 0x4c, 0x06, 0x28, 0x3f, 0xfa, 0x81, 0x63, 0x70, 0x0e, 0xf5, + 0x7f, 0x10, 0x06, 0xb0, 0x7f, 0xa0, 0x02, 0x2f, 0xff, 0x91, 0x78, 0x64, + 0xde, 0x30, 0xab, 0x30, 0xaa, 0x55, 0x30, 0x06, 0x9c, 0xfd, 0x4d, 0x28, + 0x3b, 0x63, 0x28, 0x3f, 0x6f, 0x0e, 0xe0, 0x7f, 0x61, 0x75, 0x10, 0x06, + 0x61, 0x7f, 0x58, 0x3b, 0xb3, 0x6f, 0xe8, 0x95, 0x06, 0x5f, 0xff, 0x07, + 0xc8, 0xb9, 0x74, 0xce, 0x24, 0x06, 0xa8, 0x3b, 0x07, 0x72, 0x7f, 0x06, + 0x72, 0xff, 0x56, 0x1c, 0x28, 0x3b, 0x3a, 0x28, 0x3f, 0x3e, 0x06, 0x28, + 0x37, 0x3f, 0xff, 0xb3, 0x39, 0x6f, 0x80, 0x06, 0x62, 0x79, 0x0f, 0xd5, + 0x7f, 0x0e, 0x76, 0x7f, 0x02, 0x02, 0xd0, 0x01, 0x98, 0x01, 0xff, 0xff, + 0x01, 0x01, 0xd0, 0x01, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xf4, 0xcb, 0x00, 0x11, 0x18, 0x00, 0x00, 0x30, 0x01, 0x0a, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x68, 0xe7, 0x47, 0xd6, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x79, 0x72, + 0x25, 0x52, 0x3a, 0x40, 0x53, 0x06, 0x98, 0x1b, 0x44, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x10, 0x74, 0x00, 0x72, 0x20, 0x07, 0x74, 0x00, 0x6f, 0x00, + 0x01, 0x20, 0x00, 0x46, 0x00, 0x65, 0x00, 0x64, 0x20, 0x03, 0x05, 0x72, + 0x00, 0x61, 0x00, 0x6c, 0x05, 0xc0, 0x7f, 0x63, 0x20, 0x87, 0xa8, 0x30, + 0x7f, 0xe9, 0x20, 0x7f, 0xe9, 0x05, 0x60, 0x7f, 0x41, 0x00, 0x75, 0xa8, + 0x40, 0xf7, 0x6e, 0x20, 0xfb, 0x6d, 0x20, 0xf9, 0x20, 0x00, 0x53, 0xb5, + 0x21, 0x0d, 0x61, 0x21, 0x01, 0x30, 0x8b, 0x42, 0x20, 0x1d, 0x65, 0x40, + 0x1b, 0x55, 0x73, 0x21, 0x19, 0x41, 0x21, 0x2b, 0x72, 0x21, 0x1d, 0x73, + 0x03, 0xa9, 0xca, 0x5e, 0x43, 0x21, 0x65, 0x70, 0x41, 0x7b, 0x31, 0x6d, + 0x30, 0x7f, 0xd1, 0x7f, 0x65, 0xad, 0x04, 0xea, 0x36, 0x43, 0x21, 0xff, + 0x75, 0x21, 0xef, 0x30, 0xf1, 0x20, 0x41, 0xf7, 0xc0, 0x05, 0x30, 0xf5, + 0x9b, 0x0b, 0x54, 0x80, 0xa6, 0x90, 0x96, 0x99, 0x20, 0xfd, 0x90, 0x06, + 0x73, 0x03, 0x44, 0xc5, 0x74, 0xb9, 0xe8, 0x00, 0xd5, 0xf0, 0xd2, 0x98, + 0xb0, 0x20, 0x00, 0xf0, 0x07, 0xc5, 0x29, 0xbc, 0x6c, 0xad, 0x05, 0xdb, + 0xa7, 0xb3, 0x6d, 0x33, 0x6f, 0x60, 0x20, 0x00, 0x03, 0x11, 0x0c, 0xd3, + 0xff, 0x24, 0x04, 0x35, 0x04, 0x34, 0x80, 0x20, 0x03, 0x40, 0x04, 0x30, + 0x04, 0x3b, 0x04, 0x4c, 0x00, 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x39, 0x04, + 0x20, 0x08, 0x00, 0x3e, 0x04, 0x3a, 0x20, 0x13, 0x43, 0x04, 0x33, 0x60, + 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x07, 0x07, 0x01, + 0x02, 0x00, 0x04, 0x01, 0x01, 0x08, 0x07, 0x14, 0x07, 0x01, 0x10, 0x01, + 0x01, 0x01, 0x58, 0x17, 0x03, 0x0a, 0xd6, 0x30, 0x00, 0xa8, 0x30, 0xce, + 0x30, 0xb9, 0x30, 0xa2, 0x30, 0x13, 0xa4, 0x30, 0xec, 0x20, 0x07, 0xde, + 0x5d, 0x05, 0xdf, 0xbf, 0x05, 0xb6, 0x03, 0xa2, 0x10, 0x08, 0x30, 0x7f, + 0x50, 0x2a, 0x11, 0x6f, 0x00, 0x76, 0x2a, 0x1d, 0x6e, 0xb0, 0x29, 0x97, + 0x69, 0x2a, 0x0b, 0x05, 0xd8, 0x1d, 0x03, 0x5e, 0x9c, 0x5b, 0x00, 0xfa, + 0x8b, 0xaf, 0x65, 0x7e, 0x82, 0x29, 0x52, 0x08, 0xaf, 0x65, 0x01, 0x77, + 0x05, 0xff, 0xbd, 0x80, 0xbd, 0xd0, 0x04, 0xc5, 0x78, 0xb1, 0xa4, 0xc2, + 0x28, 0x1f, 0xc7, 0x08, 0x01, 0xb8, 0xa4, 0xc2, 0x20, 0x00, 0xfc, 0xc8, + 0x10, 0x05, 0xb3, 0x7f, 0x50, 0x11, 0x27, 0xfb, 0x4d, 0x28, 0x0d, 0x3e, + 0x04, 0x41, 0x04, 0x15, 0x2d, 0x00, 0x10, 0x28, 0x13, 0x40, 0x28, 0x29, + 0x41, 0x04, 0xe8, 0x0d, 0xc0, 0x10, 0x0f, 0x94, 0xff, 0x06, 0xf6, 0xff, + 0x02, 0x01, 0x01, 0x02, 0x01, 0x0f, 0x60, 0x02, 0x20, 0x06, 0x20, 0x08, + 0x02, 0x02, 0x02, 0x29, 0xe7, 0x40, 0xcb, 0x28, 0x17, 0x04, 0x0a, 0xab, + 0x30, 0xbf, 0x30, 0x07, 0xde, 0x30, 0xeb, 0x30, 0xab, 0x06, 0x08, 0x11, + 0x9e, 0xaf, 0x3f, 0x1f, 0x54, 0x6d, 0x2f, 0x9d, 0x72, 0x2f, 0xb1, 0x61, + 0x10, 0x15, 0xe0, 0x7f, 0x61, 0x53, 0x03, 0x54, 0x58, 0x6c, 0x9a, 0x61, + 0x53, 0x06, 0x18, 0x11, 0x5f, 0xff, 0x00, 0x74, 0xce, 0xc0, 0xd0, 0xc8, + 0xb9, 0x74, 0xb9, 0x30, 0x74, 0xce, 0x05, 0xf8, 0x11, 0x0f, 0x53, 0x7f, + 0x1a, 0x04, 0x30, 0x04, 0x51, 0x42, 0x20, 0x03, 0x3c, 0x20, 0x07, 0x40, + 0x04, 0x3a, 0x20, 0x0d, 0x80, 0x10, 0x1d, 0xd4, 0xff, 0x03, 0x02, 0x02, + 0x03, 0x03, 0x01, 0x03, 0xc0, 0x30, 0x06, 0x20, 0x08, 0x03, 0x03, 0xc2, + 0xeb, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x05, 0x0a, 0xc1, 0x30, 0xe3, 0x30, + 0x6b, 0xb3, 0x06, 0x68, 0x13, 0x58, 0x17, 0x68, 0x2e, 0x23, 0x63, 0x2f, + 0xaf, 0x10, 0x16, 0x50, 0x7f, 0x0c, 0xe5, 0x67, 0xd1, 0x79, 0x06, 0x78, + 0x13, 0x3f, 0xff, 0x28, 0xcc, 0x34, 0x54, 0xcf, 0x06, 0x58, 0x11, 0x0f, + 0x53, 0x7f, 0x27, 0x28, 0x17, 0x3a, 0x04, 0x60, 0x3e, 0x05, 0xe8, 0x0d, + 0x10, 0x17, 0x94, 0xff, 0x04, 0x03, 0x03, 0x04, 0x04, 0x28, 0x02, 0x04, + 0x20, 0x06, 0x16, 0x20, 0x08, 0x04, 0x04, 0x7b, 0x02, 0xec, 0x0f, 0xd6, + 0x00, 0x00, 0x06, 0x28, 0x17, 0xe5, 0x0c, 0x30, 0xd6, 0x30, 0xc8, 0x06, + 0x88, 0x19, 0x38, 0x17, 0x75, 0x00, 0x50, 0x62, 0x20, 0x03, 0x74, 0x10, + 0x16, 0x40, 0x7f, 0x18, 0x4e, 0x03, 0x5e, 0x20, 0x79, 0x72, 0x06, 0x98, + 0x19, 0x94, 0xcd, 0x80, 0xbd, 0xb8, 0x60, 0xd2, 0x06, 0x98, 0x19, 0x0e, + 0xf3, 0x7f, 0x27, 0x04, 0x43, 0x04, 0x31, 0xb0, 0x20, 0x03, 0x42, 0x06, + 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x05, 0x04, 0x04, 0x05, 0x14, 0x05, + 0x03, 0x05, 0x20, 0x06, 0x17, 0x20, 0x08, 0x05, 0x05, 0x00, 0x36, 0xe1, + 0xb5, 0xd1, 0x00, 0x00, 0x07, 0x0a, 0x01, 0xb3, 0x30, 0xeb, 0x30, 0xc9, + 0x30, 0xd0, 0x06, 0xa8, 0x17, 0x05, 0xf3, 0x00, 0x72, 0x00, 0x64, 0x2f, + 0xaf, 0x62, 0x2f, 0xb7, 0x80, 0x10, 0x16, 0x10, 0x7f, 0xd1, 0x79, 0x14, + 0x5c, 0x1a, 0x59, 0xe6, 0x40, 0x74, 0x06, 0x78, 0x19, 0x54, 0xcf, 0x74, + 0xb9, 0xc4, 0xb3, 0x34, 0x14, 0xbc, 0x06, 0x78, 0x19, 0x07, 0x93, 0x7f, + 0x76, 0x06, 0x43, 0xff, 0x1a, 0x04, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x34, + 0x20, 0x05, 0x32, 0x04, 0x60, 0x30, 0x06, 0x28, 0x1b, 0x10, 0x16, 0xf4, + 0xff, 0x06, 0x05, 0x05, 0x06, 0x06, 0x90, 0x30, 0x02, 0x05, 0x04, 0x20, + 0x08, 0x06, 0x06, 0xac, 0xe9, 0x04, 0x5c, 0xd2, 0x00, 0x00, 0x08, 0x28, + 0x17, 0xea, 0x30, 0x01, 0xa8, 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xb9, 0x06, + 0x48, 0x1b, 0x50, 0x43, 0x28, 0x11, 0x72, 0x28, 0x19, 0x69, 0x00, 0x65, + 0x00, 0x44, 0x6e, 0x2f, 0xb3, 0x65, 0x00, 0x73, 0x10, 0x15, 0xc0, 0x7f, + 0xd1, 0x79, 0x02, 0xde, 0x8f, 0x79, 0x72, 0xaf, 0x65, 0x06, 0x98, 0x17, + 0xac, 0x01, 0xb9, 0xd4, 0xc5, 0x4c, 0xd1, 0xa4, 0xc2, 0x06, 0x58, 0x19, + 0xc0, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x40, 0x04, 0x38, 0x04, 0x35, 0x04, + 0x16, 0x3d, 0x04, 0x42, 0x20, 0x05, 0x41, 0x05, 0xc8, 0x1d, 0x10, 0x16, + 0xf4, 0xff, 0x07, 0x0c, 0x06, 0x06, 0x07, 0x07, 0x30, 0x02, 0x28, 0x1c, + 0x07, 0x07, 0x00, 0x07, 0x07, 0x78, 0xec, 0x2a, 0xd6, 0x00, 0x00, 0x20, + 0x09, 0x0a, 0x38, 0x13, 0xc8, 0x30, 0xec, 0x30, 0xfb, 0xaa, 0x28, 0x1f, + 0xaa, 0x06, 0x28, 0x1b, 0x45, 0x48, 0x0d, 0x72, 0x28, 0x15, 0x20, 0x0e, + 0x00, 0x52, 0x00, 0xed, 0x2f, 0xb7, 0x05, 0xd8, 0x17, 0x10, 0x0e, 0xf0, + 0x7f, 0x69, 0x00, 0x60, 0x79, 0x72, 0xf7, 0x96, 0xcc, 0x91, 0x65, 0x40, + 0x59, 0x06, 0x58, 0x1b, 0xd4, 0xc5, 0xb8, 0xd2, 0x08, 0xb8, 0x0d, 0xac, + 0xb9, 0x24, 0xc6, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x2d, 0x48, 0x0d, + 0x45, 0x40, 0x28, 0x15, 0x2d, 0x00, 0x20, 0x28, 0x1d, 0x3e, 0x05, 0xe8, + 0x17, 0x95, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x08, 0x20, 0x01, 0x07, 0x30, + 0x02, 0x18, 0x40, 0x0a, 0x00, 0x70, 0xe9, 0xf5, 0xd4, 0x00, 0x00, 0x0a, + 0x0a, 0x00, 0xd5, 0x30, 0xa9, 0x30, 0xeb, 0x30, 0xe2, 0x30, 0x6a, 0xb5, + 0x06, 0x08, 0x11, 0x5f, 0xff, 0x46, 0x4f, 0xaf, 0x6d, 0x48, 0x0f, 0x61, + 0x80, 0x10, 0x16, 0x20, 0x7f, 0x8f, 0x79, 0x14, 0x5c, 0x69, 0x64, 0x99, + 0x60, 0x6c, 0x06, 0x38, 0x13, 0x3f, 0xff, 0xec, 0xd3, 0x74, 0xb9, 0xa8, + 0x1a, 0xba, 0xac, 0xc0, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x24, 0x28, + 0x09, 0x40, 0x2c, 0x04, 0x3c, 0x48, 0x0f, 0x30, 0x05, 0xc8, 0x11, 0x10, + 0x17, 0x54, 0xff, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x09, 0x08, 0x20, 0x05, + 0x09, 0x15, 0x30, 0x04, 0x00, 0x09, 0x62, 0xed, 0xa1, 0xd6, 0x00, 0x00, + 0x0b, 0x8c, 0x28, 0x17, 0xd5, 0x30, 0xa4, 0x06, 0x68, 0x13, 0x3f, 0xff, + 0x4a, 0x00, 0x14, 0x75, 0x00, 0x6a, 0x20, 0x03, 0x79, 0x10, 0x16, 0x60, + 0x7f, 0xe1, 0x80, 0x08, 0xe1, 0x80, 0x0a, 0x4f, 0x06, 0x78, 0x15, 0x00, + 0x00, 0xc4, 0x06, 0xd6, 0xc4, 0xd6, 0x74, 0xc7, 0x06, 0x78, 0x15, 0x0f, + 0x13, 0x7f, 0x16, 0x0b, 0x04, 0x43, 0x04, 0x36, 0x20, 0x03, 0x39, 0x06, + 0x28, 0x13, 0x10, 0x17, 0x34, 0xff, 0x02, 0x0a, 0x0a, 0x0a, 0x0b, 0x0a, + 0x09, 0x20, 0x05, 0x0a, 0x40, 0x02, 0x30, 0x04, 0x0a, 0xce, 0xee, 0x91, + 0xd1, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0xe9, 0x30, 0xfb, 0x30, 0xd1, 0x34, + 0x30, 0xf3, 0x20, 0x03, 0x06, 0x58, 0x1b, 0x4c, 0x2f, 0xa5, 0x20, 0x00, + 0x46, 0x50, 0x2f, 0xab, 0x6d, 0x00, 0x70, 0x06, 0x2f, 0xb1, 0x10, 0x0e, + 0xf0, 0x7f, 0xc9, 0x04, 0x62, 0x58, 0x6f, 0x15, 0x5e, 0x06, 0x98, 0x17, + 0x7c, 0xb7, 0x0c, 0x1c, 0xd3, 0x0c, 0xd3, 0x06, 0x98, 0x17, 0x0e, 0xf3, + 0x7f, 0x1b, 0x04, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x1f, 0x20, 0x05, 0x3c, + 0x04, 0x60, 0x3f, 0x20, 0x0b, 0x10, 0x1d, 0xf4, 0xff, 0x0b, 0x0b, 0x0b, + 0x0c, 0x0b, 0x48, 0x0a, 0x20, 0x05, 0x0b, 0x06, 0x30, 0x04, 0x0b, 0xf7, + 0xe5, 0x04, 0x4a, 0xd2, 0x00, 0x00, 0x0d, 0x48, 0x17, 0xea, 0x30, 0x10, + 0xaa, 0x30, 0xcf, 0x06, 0xc8, 0x17, 0x52, 0x00, 0x69, 0x00, 0x70, 0x6f, + 0x2f, 0xb7, 0x06, 0x78, 0x17, 0x10, 0x0e, 0x90, 0x7f, 0xc9, 0x62, 0xcc, + 0x91, 0x08, 0x65, 0x59, 0xc8, 0x54, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0xac, + 0x07, 0xb9, 0x24, 0xc6, 0x58, 0xd5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, + 0x58, 0x17, 0x01, 0x20, 0x04, 0x38, 0x04, 0x3e, 0x04, 0x45, 0x06, 0x88, + 0x17, 0x81, 0x10, 0x16, 0x94, 0xff, 0x0c, 0x0c, 0x0c, 0x0d, 0x0c, 0x0b, + 0x20, 0x05, 0x20, 0x0c, 0x07, 0x30, 0x04, 0x0c, 0x12, 0xeb, 0x77, 0xd0, + 0x00, 0x00, 0x00, 0x0e, 0x0a, 0xe1, 0x30, 0xf3, 0x30, 0x04, 0xc9, 0x30, + 0xfc, 0x30, 0xb5, 0x06, 0x68, 0x17, 0x4d, 0x00, 0x05, 0x65, 0x00, 0x6e, + 0x00, 0x64, 0x28, 0x15, 0x7a, 0x06, 0x2f, 0xad, 0x81, 0x10, 0x0f, 0x10, + 0x7f, 0xe8, 0x95, 0x1a, 0x59, 0x28, 0x84, 0x06, 0x78, 0x15, 0x00, 0x00, + 0x00, 0x58, 0xba, 0xc4, 0xb3, 0xac, 0xc0, 0xc0, 0x06, 0x78, 0x15, 0x0f, + 0x13, 0x7f, 0x1c, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x58, 0x34, 0x28, 0x15, + 0x41, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0d, 0x0d, 0x0d, 0x12, + 0x0e, 0x0d, 0x0c, 0x20, 0x05, 0x0d, 0x08, 0x30, 0x04, 0x0d, 0x00, 0x9e, + 0xe8, 0x11, 0xcf, 0x00, 0x00, 0x0f, 0x0a, 0x00, 0xdf, 0x30, 0xb7, 0x30, + 0xaa, 0x30, 0xcd, 0x30, 0x45, 0xb9, 0x06, 0x88, 0x17, 0x69, 0x00, 0x73, + 0x4f, 0xad, 0x6e, 0x28, 0x21, 0x40, 0x73, 0x10, 0x16, 0x00, 0x7f, 0x73, + 0x7c, 0x7f, 0x89, 0x65, 0x59, 0x08, 0x85, 0x51, 0xaf, 0x65, 0x06, 0x58, + 0x1b, 0xf8, 0xbb, 0xdc, 0x01, 0xc2, 0x24, 0xc6, 0x24, 0xb1, 0xa4, 0xc2, + 0x06, 0x58, 0x1b, 0x8a, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x38, 0x28, 0x11, + 0x4c, 0x28, 0x17, 0x3d, 0xb0, 0x28, 0x21, 0x41, 0x06, 0x08, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x0e, 0x0e, 0x0e, 0x0f, 0x24, 0x0e, 0x0d, 0x20, 0x05, + 0x0e, 0x09, 0x30, 0x04, 0x0e, 0x88, 0x00, 0xec, 0x43, 0xd8, 0x00, 0x00, + 0x10, 0x0a, 0xcd, 0x02, 0x30, 0xa6, 0x30, 0xb1, 0x30, 0xf3, 0x06, 0x68, + 0x15, 0x00, 0x22, 0x00, 0x4e, 0x2f, 0xaf, 0x75, 0x00, 0x71, 0x20, 0x03, + 0xe9, 0xc0, 0x2f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x85, 0x51, 0x4c, 0x4e, + 0xaf, 0x80, 0xc0, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x24, 0xb1, 0xb0, 0xc6, + 0x04, 0xcf, 0xd1, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x1d, 0x28, 0x0d, + 0x43, 0x04, 0x3a, 0x28, 0x13, 0x60, 0x3d, 0x06, 0x08, 0x13, 0x10, 0x17, + 0x34, 0xff, 0x0f, 0x0f, 0x0f, 0x10, 0x0f, 0x48, 0x0e, 0x20, 0x05, 0x0f, + 0x0a, 0x30, 0x04, 0x0f, 0x4e, 0xe4, 0x00, 0x99, 0xcf, 0x00, 0x00, 0x11, + 0x0a, 0xea, 0x30, 0x01, 0xaa, 0x30, 0xcd, 0x30, 0xb0, 0x30, 0xed, 0x06, + 0x68, 0x19, 0x14, 0x52, 0x00, 0xed, 0x2f, 0xab, 0x20, 0x48, 0x1f, 0x67, + 0x00, 0x60, 0x72, 0x2f, 0xb7, 0x10, 0x15, 0xd0, 0x7f, 0xcc, 0x91, 0x65, + 0x59, 0x85, 0x04, 0x51, 0x3c, 0x68, 0x57, 0x7f, 0x06, 0x58, 0x1b, 0xac, + 0xb9, 0x00, 0x24, 0xc6, 0x24, 0xb1, 0xf8, 0xad, 0x5c, 0xb8, 0xc0, 0x06, + 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x20, 0x04, 0x38, 0x04, 0x3e, 0x04, 0x46, + 0x2d, 0x48, 0x1f, 0x33, 0x04, 0x40, 0x20, 0x0b, 0x10, 0x1d, 0xd4, 0xff, + 0x10, 0x1a, 0x10, 0x10, 0x11, 0x20, 0x03, 0x20, 0x06, 0x0c, 0x40, 0x06, + 0xfd, 0x00, 0xe2, 0x34, 0xd3, 0x00, 0x00, 0x12, 0x0a, 0xb5, 0x0c, 0x30, + 0xeb, 0x30, 0xbf, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x53, 0x00, 0x06, 0x61, + 0x00, 0x6c, 0x00, 0x74, 0x20, 0x05, 0x10, 0x16, 0x50, 0x7f, 0x28, 0x06, + 0x84, 0x14, 0x5c, 0x54, 0x58, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xb4, 0x18, + 0xc0, 0xc0, 0xd0, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x21, 0x04, 0x30, + 0x03, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x42, 0x20, 0x07, 0x10, 0x1e, 0x34, + 0xff, 0x0d, 0x11, 0x11, 0x11, 0x12, 0x20, 0x03, 0x20, 0x06, 0x0d, 0x40, + 0x06, 0x01, 0x61, 0xee, 0x7c, 0xd1, 0x00, 0x00, 0x13, 0x28, 0x17, 0x01, + 0xf3, 0x30, 0xfb, 0x30, 0xd5, 0x30, 0xa2, 0x20, 0x07, 0xd1, 0x06, 0x38, + 0x1d, 0x38, 0x17, 0x6e, 0x2f, 0xaf, 0x4a, 0x00, 0x75, 0x40, 0x09, 0x81, + 0x10, 0x15, 0xf0, 0x7f, 0x23, 0x57, 0xe1, 0x80, 0x89, 0x5b, 0x06, 0x98, + 0x17, 0x03, 0xb0, 0xc0, 0xc4, 0xd6, 0x48, 0xc5, 0x06, 0x98, 0x19, 0x0e, + 0xf3, 0x7f, 0x80, 0x38, 0x17, 0x3d, 0x04, 0x2d, 0x00, 0x25, 0x04, 0x43, + 0xc3, 0x40, 0x09, 0x10, 0x1d, 0xf4, 0xff, 0x12, 0x12, 0x12, 0x13, 0x20, + 0x03, 0x20, 0x06, 0x40, 0x0f, 0x40, 0x06, 0x93, 0xe9, 0x44, 0xcf, 0x00, + 0x00, 0x41, 0x14, 0x68, 0x17, 0xeb, 0x30, 0xa4, 0x30, 0xb9, 0x06, 0xc8, + 0x17, 0x44, 0x4c, 0x28, 0x17, 0x69, 0x00, 0x73, 0x10, 0x16, 0x00, 0x7f, + 0x23, 0x57, 0x02, 0xef, 0x8d, 0x13, 0x66, 0xaf, 0x65, 0x06, 0x78, 0x19, + 0xb0, 0x01, 0xc0, 0xe8, 0xb8, 0x74, 0xc7, 0xa4, 0xc2, 0x06, 0x78, 0x19, + 0xb4, 0x07, 0xb3, 0x7f, 0xed, 0x06, 0x23, 0xff, 0x78, 0x17, 0x1b, 0x28, + 0x17, 0x38, 0x04, 0x61, 0x41, 0x06, 0x88, 0x17, 0x10, 0x16, 0x74, 0xff, + 0x13, 0x13, 0x13, 0x14, 0x20, 0x03, 0xa0, 0x20, 0x06, 0x0e, 0x40, 0x06, + 0x52, 0xe8, 0xd2, 0xd0, 0x00, 0x2b, 0x00, 0x15, 0x48, 0x17, 0xbf, 0x28, + 0x19, 0xaf, 0x28, 0x1b, 0x06, 0x38, 0x19, 0xa0, 0x5f, 0xaf, 0x74, 0x2f, + 0xb5, 0x20, 0x00, 0x43, 0x00, 0x72, 0xa0, 0x2f, 0xb5, 0x7a, 0x10, 0x15, + 0xc0, 0x7f, 0x23, 0x57, 0x4b, 0x51, 0x81, 0x40, 0x9c, 0x06, 0xb8, 0x17, + 0xc0, 0xd0, 0x6c, 0xd0, 0xe8, 0xb8, 0xe8, 0x06, 0x78, 0x19, 0x0e, 0xf3, + 0x7f, 0x58, 0x17, 0x42, 0x28, 0x1d, 0x2d, 0x00, 0x1a, 0x38, 0x04, 0x40, + 0x28, 0x1d, 0x05, 0xd8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x14, 0x14, 0x14, + 0x68, 0x15, 0x20, 0x03, 0x20, 0x06, 0x10, 0x40, 0x06, 0x49, 0xdb, 0xc8, + 0x08, 0xce, 0x00, 0x00, 0x16, 0x88, 0x17, 0xd5, 0x30, 0xa7, 0xc4, 0x06, + 0x28, 0x15, 0xd8, 0x17, 0x46, 0x00, 0x65, 0x10, 0x16, 0x00, 0x7f, 0x23, + 0x57, 0x33, 0xf2, 0x83, 0x06, 0x78, 0x13, 0x78, 0x17, 0x98, 0xd3, 0x06, + 0x58, 0x13, 0x08, 0x13, 0x7f, 0x63, 0xe9, 0x06, 0x0f, 0x2f, 0xb8, 0x17, + 0x24, 0x04, 0x35, 0x05, 0xc8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0d, 0x15, + 0x15, 0x15, 0x16, 0x20, 0x03, 0x20, 0x06, 0x11, 0x40, 0x06, 0x01, 0x82, + 0xe9, 0xd6, 0xd4, 0x00, 0x00, 0x17, 0x48, 0x17, 0x01, 0xc6, 0x30, 0xa3, + 0x30, 0xa2, 0x30, 0xb4, 0x28, 0x1d, 0x11, 0xc7, 0x30, 0xeb, 0x28, 0x23, + 0xa8, 0x30, 0xb9, 0x20, 0x13, 0x68, 0xed, 0x05, 0x48, 0x27, 0x7f, 0xaf, + 0x69, 0x2f, 0xb7, 0x67, 0x00, 0x6f, 0xa8, 0x2f, 0xb5, 0x64, 0x28, 0x1d, + 0x6c, 0x2f, 0xbd, 0x45, 0x00, 0x73, 0xa8, 0x2f, 0xc7, 0x65, 0x2f, 0xc3, + 0x6f, 0x10, 0x14, 0xa0, 0x7f, 0x23, 0x57, 0x30, 0x00, 0x57, 0x9a, 0x4e, + 0xe5, 0x54, 0x2d, 0x00, 0xb7, 0x00, 0x5f, 0x14, 0x5c, 0xc3, 0x57, 0xaf, + 0x65, 0x79, 0x10, 0x72, 0x57, 0x7f, 0x05, 0x98, 0x29, 0xb0, 0xc0, 0xf0, + 0xd2, 0x00, 0x44, 0xc5, 0xe0, 0xac, 0x78, 0xb3, 0xd0, 0xc5, 0x03, 0xa4, + 0xc2, 0x4c, 0xd1, 0x5c, 0xb8, 0x05, 0xd8, 0x23, 0x0e, 0xf3, 0x7f, 0x80, + 0x78, 0x17, 0x4c, 0x04, 0x4f, 0x04, 0x33, 0x04, 0x3e, 0xa8, 0x28, 0x1d, + 0x34, 0x28, 0x1d, 0x3b, 0x20, 0x0f, 0x2d, 0x00, 0x2d, 0x23, 0x04, 0x41, + 0x28, 0x31, 0x35, 0x04, 0x40, 0x20, 0x17, 0x10, 0x1c, 0x74, 0xff, 0x0d, + 0x16, 0x16, 0x16, 0x17, 0x20, 0x03, 0x20, 0x06, 0x12, 0x40, 0x06, 0x00, + 0x3f, 0xec, 0x4d, 0xd2, 0x00, 0x00, 0x18, 0x0a, 0x8a, 0x38, 0x13, 0xa8, + 0x30, 0xe9, 0x88, 0x13, 0xd5, 0x28, 0x15, 0xb4, 0xdb, 0x05, 0x48, 0x11, + 0x5f, 0xff, 0x54, 0x28, 0x11, 0x37, 0xfb, 0x72, 0x4f, 0xb1, 0x78, 0x13, + 0x1a, 0x46, 0x00, 0x75, 0x2f, 0xbb, 0x38, 0x27, 0x2c, 0x2f, 0xc7, 0x41, + 0xb5, 0x4f, 0xd1, 0xe1, 0x28, 0x21, 0x38, 0x3f, 0x64, 0x4f, 0xdb, 0x65, + 0x2f, 0xdf, 0x55, 0x49, 0x28, 0x39, 0x6c, 0x2f, 0xef, 0x73, 0xa8, 0x4d, + 0x41, 0x2f, 0xfb, 0x6a, 0x6c, 0x20, 0x2b, 0x58, 0x6b, 0x63, 0x48, 0x69, + 0x53, 0x20, 0x4d, 0x72, 0xfa, 0x00, 0x80, 0x7f, 0x50, 0x7d, 0x30, 0x4f, + 0x38, 0x91, 0x5f, 0xb5, 0x75, 0xa0, 0x77, 0x61, 0xad, 0x28, 0x99, 0x63, + 0x48, 0xb9, 0x71, 0x40, 0x95, 0x30, 0x7b, 0x74, 0x2f, 0xdd, 0x54, 0xce, + 0x28, 0xbd, 0x65, 0x80, 0x7b, 0x20, 0x28, 0xcb, 0x19, 0x20, 0xf7, 0x50, + 0x7d, 0x78, 0xe9, 0x70, 0x2f, 0x30, 0x7f, 0x64, 0x00, 0x6f, 0xff, 0x50, + 0x6d, 0x38, 0xfd, 0xf7, 0x50, 0x37, 0x00, 0x70, 0x27, 0x04, 0x91, 0x7f, + 0x00, 0x51, 0x7d, 0x6f, 0x41, 0x3b, 0x07, 0x11, 0xff, 0x04, 0xff, 0xc9, + 0x03, 0x6b, 0x70, 0x30, 0x57, 0x9b, 0x5c, 0x05, 0x98, 0x07, 0xff, 0xff, + 0x00, 0xf0, 0xd2, 0xd0, 0xc5, 0x7c, 0xb7, 0x78, 0xb3, 0x1d, 0x78, 0xd4, + 0xd0, 0x28, 0x1d, 0x05, 0xd8, 0x13, 0x3f, 0xff, 0x56, 0x23, 0x69, 0xf6, + 0x33, 0x1d, 0x06, 0x52, 0x7d, 0xf2, 0x7f, 0x3c, 0x17, 0x46, 0x2c, 0x1d, + 0x01, 0x13, 0xf9, 0x6c, 0x3a, 0x00, 0x68, 0x83, 0xf9, 0x3c, 0x4d, 0x53, + 0xf7, 0xe2, 0x00, 0x03, 0xf7, 0x6c, 0xaa, 0x00, 0xef, 0xff, 0x1e, 0x28, + 0x0d, 0x3d, 0x28, 0x09, 0x3d, 0x28, 0x1d, 0x30, 0x8a, 0x28, 0x1b, 0x20, + 0x00, 0x17, 0x28, 0x17, 0x3c, 0x28, 0x19, 0x4f, 0xe1, 0x04, 0x88, 0x0b, + 0x07, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x17, 0x17, 0x17, 0x09, 0x20, + 0x03, 0x08, 0x17, 0x18, 0x17, 0x0b, 0x30, 0x06, 0x17, 0x08, 0xd9, 0x00, + 0x6f, 0xcf, 0x00, 0x00, 0x19, 0x0a, 0xc8, 0x30, 0x01, 0xa5, 0x30, 0xaf, + 0x30, 0xde, 0x30, 0xf3, 0x05, 0xa8, 0x0b, 0xa3, 0xd8, 0x17, 0x75, 0x27, + 0xbd, 0x75, 0x00, 0x6d, 0x47, 0xcb, 0x10, 0x16, 0x10, 0x7f, 0x02, 0xfe, + 0x56, 0x93, 0x5e, 0xfc, 0x66, 0x06, 0x98, 0x17, 0x2c, 0x06, 0xd2, 0xe0, + 0xcf, 0xcc, 0xb9, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x22, 0x0a, 0x04, + 0x43, 0x04, 0x3a, 0x20, 0x03, 0x3c, 0x28, 0x15, 0x3d, 0xc8, 0x05, 0x48, + 0x09, 0x10, 0x17, 0xd4, 0xff, 0x18, 0x18, 0x50, 0x01, 0x17, 0x18, 0x13, + 0x84, 0x40, 0x0a, 0xef, 0xec, 0xa0, 0xd1, 0x00, 0x3f, 0xff, 0x01, 0x07, + 0x00, 0x07, 0x01, 0x02, 0x04, 0x01, 0x01, 0x08, 0x07, 0x01, 0x14, 0x07, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x30, 0x02, 0x30, 0x0f, 0x02, 0x20, 0x06, + 0x20, 0x0b, 0x02, 0x02, 0x02, 0x03, 0x8c, 0x20, 0x02, 0x03, 0x01, 0x03, + 0x30, 0x06, 0x20, 0x08, 0x03, 0x03, 0x45, 0x04, 0x20, 0x02, 0x04, 0x02, + 0x04, 0x20, 0x06, 0x16, 0x20, 0x08, 0x11, 0x04, 0x04, 0x05, 0x20, 0x02, + 0x05, 0x03, 0x05, 0x20, 0x06, 0x45, 0x17, 0x20, 0x08, 0x05, 0x05, 0x06, + 0x20, 0x02, 0x06, 0x30, 0x02, 0x22, 0x05, 0x04, 0x20, 0x08, 0x06, 0x06, + 0x07, 0x20, 0x02, 0x07, 0xc0, 0x30, 0x02, 0x20, 0x14, 0x07, 0x07, 0x07, + 0x07, 0x08, 0x08, 0xc4, 0x20, 0x01, 0x20, 0x05, 0x07, 0x08, 0x18, 0x40, + 0x0a, 0x09, 0x09, 0x12, 0x09, 0x0a, 0x09, 0x30, 0x05, 0x09, 0x15, 0x30, + 0x04, 0x09, 0x04, 0x0a, 0x0a, 0x0a, 0x0b, 0x0a, 0x30, 0x05, 0x0a, 0x02, + 0x81, 0x30, 0x04, 0x0a, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x30, 0x05, 0x20, + 0x0b, 0x06, 0x30, 0x04, 0x0b, 0x0c, 0x0c, 0x0c, 0x0d, 0x48, 0x0c, 0x30, + 0x05, 0x0c, 0x07, 0x30, 0x04, 0x0c, 0x0d, 0x0d, 0x12, 0x0d, 0x0e, 0x0d, + 0x30, 0x05, 0x0d, 0x08, 0x30, 0x04, 0x0d, 0x04, 0x0e, 0x0e, 0x0e, 0x0f, + 0x0e, 0x30, 0x05, 0x0e, 0x09, 0x81, 0x30, 0x04, 0x0e, 0x0f, 0x0f, 0x0f, + 0x10, 0x0f, 0x30, 0x05, 0x20, 0x0f, 0x0a, 0x30, 0x04, 0x0f, 0x10, 0x10, + 0x10, 0x11, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0c, 0x40, 0x06, 0x11, 0x11, + 0x11, 0x12, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0d, 0x40, 0x06, 0x12, 0x12, + 0x12, 0x13, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0f, 0x40, 0x06, 0x13, 0x13, + 0x13, 0x14, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x0e, 0x40, 0x06, 0x14, 0x14, + 0x14, 0x15, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x10, 0x40, 0x06, 0x15, 0x15, + 0x15, 0x16, 0xd0, 0x20, 0x03, 0x20, 0x06, 0x11, 0x40, 0x06, 0x16, 0x16, + 0x16, 0x17, 0xde, 0x20, 0x03, 0x20, 0x06, 0x12, 0x40, 0x06, 0xf9, 0x9f, + 0xf1, 0x97, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x0b, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xe6, 0x08, 0x33, 0xce, 0x00, 0x00, 0x00, 0x01, 0x0b, 0xa2, 0x30, + 0xeb, 0x30, 0xd0, 0x40, 0x30, 0x06, 0x98, 0x1b, 0x41, 0x00, 0x72, 0x00, + 0x75, 0x00, 0x10, 0x62, 0x00, 0x61, 0x10, 0x16, 0x60, 0x7f, 0x3f, 0x96, + 0x81, 0x9c, 0x20, 0xf4, 0x5d, 0x06, 0x9b, 0x1b, 0x44, 0xc5, 0xe8, 0xb8, + 0x14, 0x40, 0xbc, 0x10, 0x06, 0x93, 0x7f, 0x10, 0x04, 0x40, 0x04, 0x43, + 0x04, 0x09, 0x31, 0x04, 0x30, 0x04, 0x10, 0x1e, 0x54, 0xff, 0x01, 0x01, + 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x0c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd6, 0x11, 0xff, 0xc8, 0x00, 0x00, 0x00, + 0x01, 0x0c, 0xd0, 0x30, 0xcf, 0x30, 0xde, 0x41, 0x30, 0x06, 0x98, 0x1b, + 0x42, 0x00, 0x61, 0x00, 0x68, 0x20, 0x03, 0x50, 0x6d, 0x20, 0x07, 0x73, + 0x10, 0x16, 0x20, 0x7f, 0xf4, 0x5d, 0xc8, 0x54, 0x20, 0x6c, 0x9a, 0x06, + 0xab, 0x17, 0xbc, 0x58, 0xd5, 0xc8, 0xb9, 0xb0, 0x07, 0x53, 0x7f, 0x27, + 0x06, 0x23, 0x81, 0x06, 0xf3, 0xff, 0x11, 0x04, 0x30, 0x04, 0x40, 0x33, + 0x20, 0x03, 0x3c, 0x04, 0x41, 0x04, 0x3a, 0x04, 0x01, 0x38, 0x04, 0x35, + 0x04, 0x20, 0x00, 0x3e, 0x20, 0x0b, 0x01, 0x42, 0x04, 0x40, 0x04, 0x3e, + 0x04, 0x32, 0x20, 0x1d, 0x9e, 0x10, 0x1c, 0xd4, 0xff, 0x01, 0x01, 0xd0, + 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x0d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x50, 0x09, 0x9c, 0xd5, 0x00, 0x00, 0x00, + 0x01, 0x0d, 0xd0, 0x30, 0xeb, 0x30, 0xd0, 0x04, 0x30, 0xc9, 0x30, 0xb9, + 0x30, 0x06, 0x58, 0x1f, 0x42, 0x00, 0x04, 0x61, 0x00, 0x72, 0x00, 0x62, + 0x20, 0x05, 0x64, 0x00, 0x16, 0x6f, 0x00, 0x73, 0x06, 0xc0, 0x7f, 0x65, + 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0xf4, 0x03, 0x5d, 0xf4, 0x5d, 0x1a, + 0x59, 0xaf, 0x06, 0x31, 0xfa, 0x5b, 0x17, 0x00, 0xbc, 0xa0, 0xbc, 0x74, + 0xc7, 0xc4, 0xb3, 0xa4, 0x60, 0xc2, 0x0f, 0x13, 0x7f, 0x06, 0x33, 0xff, + 0x11, 0x04, 0x30, 0x04, 0x40, 0x20, 0x04, 0x31, 0x20, 0x05, 0x34, 0x04, + 0x3e, 0x04, 0x41, 0x67, 0x04, 0x10, 0x0d, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, + 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x80, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x24, 0x39, 0x00, 0x11, 0x06, 0x00, 0x00, + 0x30, 0x01, 0x0e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x44, 0x0c, 0xe1, 0xc0, 0x00, 0x00, 0x00, + 0x02, 0x0e, 0xab, 0x30, 0xe8, 0x30, 0xfc, 0x10, 0x30, 0xde, 0x5d, 0x06, + 0x78, 0x1d, 0x43, 0x00, 0x61, 0x00, 0x18, 0x79, 0x00, 0x6f, 0x06, 0x88, + 0x9c, 0x10, 0x0e, 0xf0, 0x7f, 0x61, 0x53, 0xa6, 0x10, 0x7e, 0x3a, 0x53, + 0x06, 0x9b, 0x1b, 0x74, 0xce, 0x94, 0xc6, 0x08, 0x20, 0x00, 0xfc, 0xc8, + 0x10, 0x06, 0x73, 0x7f, 0x1a, 0x04, 0x30, 0x04, 0x04, 0x39, 0x04, 0x3e, + 0x04, 0x10, 0x1e, 0x74, 0xff, 0x01, 0x02, 0x50, 0x02, 0x20, 0x01, 0x01, + 0x40, 0x06, 0x01, 0x01, 0x01, 0x01, 0x82, 0x58, 0x17, 0x03, 0x0e, 0xd9, + 0x30, 0xea, 0x28, 0x17, 0xba, 0x80, 0x06, 0x88, 0x19, 0x42, 0x00, 0x65, + 0x00, 0x6c, 0x00, 0x69, 0x34, 0x00, 0x7a, 0x20, 0x07, 0x10, 0x0e, 0xb0, + 0x7f, 0x63, 0x06, 0x61, 0xff, 0x2f, 0x4f, 0x02, 0x29, 0x52, 0x79, 0x51, + 0xce, 0x57, 0x06, 0x7f, 0xb5, 0xa8, 0x06, 0xbc, 0xac, 0xb9, 0x88, 0xc9, + 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x11, 0x00, 0x04, 0x35, 0x04, 0x3b, + 0x04, 0x38, 0x04, 0x37, 0xfc, 0x06, 0x68, 0x19, 0x10, 0x0f, 0x74, 0xff, + 0x06, 0x76, 0xff, 0x48, 0x0c, 0x28, 0x1c, 0x50, 0x05, 0x02, 0x02, 0x00, + 0x6e, 0x0c, 0x4b, 0xc1, 0x00, 0x00, 0x04, 0x0e, 0x01, 0xb3, 0x30, 0xed, + 0x30, 0xb5, 0x30, 0xeb, 0x06, 0x88, 0x17, 0x55, 0x43, 0x2f, 0xab, 0x72, + 0x2f, 0xaf, 0x7a, 0x2f, 0xb7, 0x6c, 0x10, 0x16, 0x20, 0x7f, 0x00, 0xd1, + 0x79, 0x57, 0x7f, 0x28, 0x84, 0x14, 0x5c, 0x20, 0x3a, 0x53, 0x06, 0x5f, + 0xb1, 0x54, 0xcf, 0x5c, 0xb8, 0xb4, 0x60, 0xc0, 0x06, 0x98, 0x17, 0x0e, + 0xf3, 0x7f, 0x1a, 0x04, 0x3e, 0x04, 0x40, 0x8c, 0x20, 0x03, 0x37, 0x04, + 0x30, 0x28, 0x1f, 0x10, 0x1e, 0x14, 0xff, 0x03, 0x03, 0x88, 0xd0, 0x01, + 0x12, 0x0d, 0x27, 0x28, 0x17, 0x05, 0x0e, 0xaa, 0x00, 0x30, 0xec, 0x30, + 0xf3, 0x30, 0xb8, 0x30, 0xa6, 0x02, 0x30, 0xa9, 0x30, 0xfc, 0x30, 0xaf, + 0x06, 0x08, 0x1f, 0x4f, 0x82, 0x28, 0x15, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x2f, 0xb7, 0x20, 0x28, 0x00, 0x57, 0x48, 0x1d, 0x6b, 0x10, 0x15, 0xa0, + 0x7f, 0x58, 0x6a, 0xed, 0x60, 0x56, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x24, + 0xc6, 0x0c, 0xb8, 0xc0, 0x06, 0xc9, 0xcc, 0xc6, 0x6c, 0xd0, 0x06, 0x58, + 0x1b, 0x0e, 0xf3, 0x7f, 0x1e, 0x80, 0x28, 0x15, 0x38, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x36, 0x08, 0x04, 0x20, 0x00, 0x23, 0x28, 0x25, 0x3b, 0x04, + 0x3a, 0xc8, 0x05, 0xa8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0xd0, + 0x01, 0xd8, 0x0c, 0x08, 0x82, 0x28, 0x17, 0x06, 0x0e, 0xb9, 0x30, 0xbf, + 0x28, 0x17, 0xaf, 0x20, 0x30, 0xea, 0x06, 0x48, 0x15, 0x00, 0x00, 0x53, + 0x00, 0x74, 0xab, 0x48, 0x17, 0x6e, 0x28, 0x15, 0x43, 0x2f, 0xb9, 0x65, + 0x28, 0x1f, 0x05, 0xb8, 0x17, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0xaf, 0x65, + 0x66, 0x57, 0x2f, 0x6e, 0x06, 0x98, 0x19, 0x00, 0xa4, 0xc2, 0xe0, 0xd0, + 0x6c, 0xd0, 0xac, 0xb9, 0xc1, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x21, + 0x04, 0x42, 0x04, 0x4d, 0x28, 0x17, 0x1c, 0x20, 0x00, 0x1a, 0x48, 0x21, + 0x05, 0xb8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x05, 0x05, 0x88, 0xd0, 0x01, + 0x10, 0x0c, 0x45, 0x28, 0x17, 0x07, 0x0e, 0xc8, 0x0c, 0x30, 0xec, 0x30, + 0xc9, 0x06, 0x28, 0x0f, 0x7f, 0xff, 0x54, 0x00, 0x46, 0x6f, 0x2f, 0xa1, + 0x65, 0x00, 0x64, 0x20, 0x07, 0x10, 0x16, 0x30, 0x7f, 0x58, 0x04, 0x62, + 0xb1, 0x83, 0x1a, 0x59, 0x06, 0x98, 0x17, 0xa8, 0xd1, 0x0c, 0x08, 0xb8, + 0xc4, 0xb3, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x22, 0x04, 0x01, 0x3e, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x20, 0x07, 0x90, 0x10, 0x1e, 0x34, + 0xff, 0x06, 0x06, 0xd0, 0x01, 0x72, 0x0b, 0xdb, 0xc0, 0x8a, 0x00, 0x3f, + 0xff, 0x01, 0x02, 0x02, 0x20, 0x01, 0x01, 0x40, 0x06, 0x01, 0x78, 0x01, + 0x20, 0x07, 0x30, 0x04, 0x20, 0x14, 0x50, 0x05, 0x02, 0x02, 0x03, 0x4f, + 0x03, 0xd0, 0x01, 0x04, 0x04, 0xd0, 0x01, 0xf8, 0x7f, 0xf0, 0x77, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x99, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xeb, 0x00, 0xda, 0x49, 0x00, 0x00, 0x00, + 0x01, 0x99, 0xb7, 0x30, 0xf3, 0x30, 0xac, 0x01, 0x30, 0xdd, 0x30, 0xfc, + 0x30, 0xeb, 0x30, 0x06, 0x38, 0x21, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x5f, 0x65, 0x06, 0xc0, 0x7f, 0x75, 0x20, 0x81, 0x06, 0x90, 0xff, 0x06, + 0x10, 0x7d, 0x07, 0xd1, 0x7f, 0x06, 0x30, 0xff, 0x02, 0xb0, 0x65, 0xa0, + 0x52, 0x61, 0x57, 0x06, 0x9b, 0x1b, 0xf1, 0x01, 0xc2, 0x00, 0xac, 0xec, + 0xd3, 0x74, 0xb9, 0x06, 0x7b, 0x9d, 0xa0, 0x07, 0xf1, 0xff, 0x61, 0x05, + 0xec, 0xa6, 0x21, 0x04, 0x38, 0x04, 0x3d, 0x00, 0x04, 0x33, 0x04, 0x30, + 0x04, 0x3f, 0x04, 0x43, 0x19, 0x04, 0x40, 0x04, 0x0e, 0xd4, 0xff, 0x10, + 0x0e, 0x10, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, + 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb4, 0x8a, 0x00, + 0x11, 0x10, 0x00, 0x00, 0x30, 0x01, 0x9c, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x40, 0x02, 0x51, + 0x48, 0x00, 0x00, 0x00, 0x02, 0x9c, 0xaf, 0x30, 0xa2, 0x30, 0xe9, 0x00, + 0x30, 0xfb, 0x30, 0xeb, 0x30, 0xf3, 0x30, 0xd7, 0x30, 0x30, 0xfc, 0x20, + 0x07, 0x05, 0xd8, 0x27, 0x4b, 0x00, 0x75, 0x00, 0x11, 0x61, 0x00, 0x6c, + 0x20, 0x03, 0x20, 0x00, 0x4c, 0x20, 0x0b, 0x14, 0x6d, 0x00, 0x70, 0x20, + 0x11, 0x72, 0x10, 0x15, 0x80, 0x7f, 0x09, 0x54, 0x00, 0x86, 0x96, 0x61, + 0x57, 0x54, 0x80, 0xa6, 0x90, 0x02, 0xf4, 0x76, 0x96, 0x8f, 0x3a, 0x53, + 0x05, 0xfb, 0x25, 0xe0, 0x00, 0xcf, 0x4c, 0xc5, 0x7c, 0xb7, 0xf8, 0xb8, + 0x78, 0x18, 0xd4, 0x74, 0xb9, 0x06, 0x3b, 0xa1, 0x0e, 0xf3, 0x7f, 0x1a, + 0x04, 0x43, 0x08, 0x04, 0x30, 0x04, 0x3b, 0x20, 0x03, 0x2d, 0x00, 0x1b, + 0x89, 0x20, 0x0b, 0x3c, 0x04, 0x3f, 0x20, 0x11, 0x40, 0x04, 0x10, 0x1d, + 0x74, 0xff, 0x14, 0x01, 0x04, 0x04, 0x20, 0x01, 0x01, 0x40, 0x06, 0x01, + 0x01, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x9c, 0xb8, 0x30, 0xe7, 0x24, + 0x30, 0xdb, 0x48, 0x0f, 0xde, 0x5d, 0x06, 0x3f, 0xb9, 0x4a, 0x00, 0x1c, + 0x6f, 0x00, 0x68, 0x20, 0x03, 0x05, 0x98, 0x09, 0x10, 0x0f, 0xd0, 0x7f, + 0xd4, 0x67, 0x30, 0x5b, 0x4f, 0x06, 0x52, 0xf9, 0x5f, 0xff, 0x70, 0xc8, + 0x38, 0xd6, 0x02, 0x74, 0xb9, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x52, + 0xff, 0x14, 0x03, 0x04, 0x36, 0x04, 0x3e, 0x04, 0x45, 0x20, 0x03, 0x05, + 0x98, 0x0b, 0xa4, 0x10, 0x17, 0xb4, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, + 0x40, 0x06, 0x02, 0x02, 0x00, 0x02, 0x02, 0x0a, 0x01, 0xc7, 0x49, 0x00, + 0x00, 0x06, 0x04, 0x9c, 0xb1, 0x30, 0xc0, 0x06, 0x68, 0x11, 0x7f, 0xaf, + 0x65, 0x28, 0x00, 0x64, 0x2f, 0xb1, 0x68, 0x10, 0x16, 0x60, 0x7f, 0x09, + 0x54, 0x53, 0x43, 0x62, 0x06, 0xb8, 0x17, 0x00, 0xcf, 0xe4, 0xb2, 0x06, + 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x01, 0x1a, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x30, 0x28, 0x19, 0xa4, 0x10, 0x1e, 0x54, 0xff, 0x03, 0x38, 0x0c, 0x02, + 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, 0x03, 0x59, 0x04, 0x5f, 0x47, + 0x00, 0x00, 0x41, 0x05, 0x28, 0x17, 0xe9, 0x30, 0xf3, 0x30, 0xbf, 0x20, + 0x03, 0xd1, 0x06, 0x5d, 0x35, 0x38, 0x17, 0x6c, 0x28, 0x17, 0x6e, 0x00, + 0x74, 0x40, 0x05, 0x81, 0x10, 0x15, 0xf0, 0x7f, 0x09, 0x54, 0x70, 0x51, + 0x39, 0x4e, 0x06, 0x9b, 0x19, 0x03, 0x08, 0xcf, 0x80, 0xb7, 0xc4, 0xd0, + 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0xa3, 0x38, 0x17, 0x3b, 0x28, 0x17, + 0x3d, 0x04, 0x42, 0x40, 0x05, 0x10, 0x1d, 0xf4, 0xff, 0x48, 0x04, 0x38, + 0x0c, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x00, 0x04, 0x5c, 0x04, + 0xb6, 0x48, 0x00, 0x00, 0x06, 0x22, 0x9c, 0xde, 0x28, 0x17, 0xc3, 0x30, + 0xab, 0x06, 0x68, 0x15, 0x00, 0x2d, 0x00, 0x4d, 0x68, 0x17, 0x6b, 0x2f, + 0xb3, 0x06, 0x50, 0x7f, 0x61, 0x48, 0x97, 0x77, 0x63, 0x20, 0x01, 0x06, + 0x30, 0x81, 0x70, 0x7f, 0x6b, 0x06, 0x61, 0x01, 0x07, 0x10, 0xff, 0x06, + 0xd1, 0xff, 0x02, 0x6c, 0x9a, 0x6d, 0x51, 0x32, 0x75, 0x06, 0x98, 0x17, + 0xc8, 0x06, 0xbb, 0x7c, 0xb7, 0x74, 0xce, 0x06, 0x98, 0x17, 0x0e, 0xf2, + 0x7f, 0x1c, 0xd7, 0x28, 0x13, 0x38, 0x17, 0x3a, 0x20, 0x01, 0x30, 0x06, + 0x08, 0x15, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x14, 0x05, 0x06, + 0x06, 0x20, 0x01, 0x05, 0x40, 0x06, 0x05, 0x05, 0x04, 0x05, 0x05, 0x8f, + 0x01, 0xb5, 0x28, 0x17, 0x07, 0x9c, 0x00, 0xcc, 0x30, 0xb0, 0x30, 0xea, + 0x30, 0xfb, 0x30, 0x05, 0xbb, 0x30, 0xf3, 0x30, 0xd3, 0x28, 0x23, 0xf3, + 0x05, 0xe8, 0x21, 0x50, 0x4e, 0x2f, 0xaf, 0x67, 0x2f, 0xb3, 0x72, 0x00, + 0x69, 0x00, 0x11, 0x20, 0x00, 0x53, 0x2f, 0xbd, 0x6d, 0x00, 0x62, 0x20, + 0x0b, 0xc0, 0x5f, 0xc3, 0x10, 0x15, 0x10, 0x7f, 0xee, 0x68, 0x8e, 0x7f, + 0x70, 0x51, 0x80, 0x06, 0x98, 0x17, 0x90, 0xb2, 0xf8, 0xad, 0xac, 0xb9, + 0xb4, 0x06, 0xc2, 0x4c, 0xbe, 0x80, 0xb7, 0x06, 0x38, 0x1d, 0x0e, 0xf3, + 0x7f, 0x1d, 0x08, 0x04, 0x35, 0x04, 0x33, 0x20, 0x03, 0x40, 0x04, 0x38, + 0x08, 0x04, 0x2d, 0x00, 0x21, 0x20, 0x0d, 0x3c, 0x04, 0x31, 0xd8, 0x20, + 0x13, 0x38, 0x2b, 0x3d, 0x05, 0x28, 0x27, 0x10, 0x16, 0xf4, 0xff, 0x06, + 0x07, 0x07, 0xb1, 0x20, 0x01, 0x06, 0x40, 0x06, 0x38, 0x22, 0xee, 0x01, + 0x7c, 0x28, 0x17, 0x06, 0x08, 0x9c, 0xd1, 0x30, 0xcf, 0x06, 0x08, 0x0b, + 0xbf, 0xff, 0x50, 0xa8, 0x2f, 0xaf, 0x68, 0x48, 0x03, 0x67, 0x10, 0x16, + 0x40, 0x7f, 0x6d, 0x5f, 0xa8, 0x40, 0x4e, 0x06, 0x98, 0x15, 0x00, 0x00, + 0x0c, 0xd3, 0x6d, 0xd5, 0xd5, 0x06, 0x38, 0x0f, 0x0f, 0x73, 0x7f, 0x1f, + 0x27, 0xff, 0x45, 0x48, 0x03, 0x33, 0x05, 0x28, 0x05, 0x8b, 0x10, 0x18, + 0x14, 0xff, 0x07, 0x08, 0x08, 0x20, 0x01, 0x07, 0x40, 0x06, 0x38, 0x22, + 0x00, 0xb3, 0x02, 0x7b, 0x49, 0x00, 0x00, 0x09, 0x9c, 0x1c, 0xda, 0x30, + 0xe9, 0x06, 0xa8, 0x15, 0x38, 0x17, 0x3f, 0xab, 0x61, 0x00, 0x42, 0x6b, + 0x10, 0x16, 0x60, 0x7f, 0x39, 0x97, 0xf3, 0x96, 0x06, 0xb8, 0x17, 0x98, + 0x06, 0xd3, 0x7c, 0xb7, 0x6c, 0xd0, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, + 0x1f, 0x0b, 0x04, 0x35, 0x04, 0x40, 0x28, 0x1b, 0x3a, 0x06, 0x48, 0x15, + 0x10, 0x17, 0x14, 0xff, 0x15, 0x08, 0x0a, 0x0a, 0x20, 0x01, 0x08, 0x20, + 0x06, 0x09, 0x20, 0x05, 0x00, 0x08, 0x08, 0x42, 0x03, 0xe1, 0x47, 0x00, + 0x00, 0x41, 0x0a, 0x28, 0x17, 0xeb, 0x30, 0xea, 0x30, 0xb9, 0x06, 0x88, + 0x1b, 0x82, 0x58, 0x17, 0x6c, 0x00, 0x69, 0x00, 0x73, 0x10, 0x16, 0x40, + 0x7f, 0xbb, 0x06, 0x73, 0x83, 0x74, 0x02, 0x5e, 0x06, 0x9b, 0x19, 0x28, + 0x17, 0xb9, 0x0e, 0xac, 0xb9, 0xa4, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, + 0x7f, 0x58, 0x17, 0x3b, 0x0c, 0x04, 0x38, 0x04, 0x41, 0x06, 0x48, 0x19, + 0x10, 0x16, 0xf4, 0xff, 0x09, 0x0b, 0x54, 0x0b, 0x20, 0x01, 0x09, 0x20, + 0x06, 0x0a, 0x20, 0x05, 0x09, 0x09, 0x10, 0x93, 0x04, 0x40, 0x28, 0x17, + 0x0b, 0x9c, 0xd4, 0x30, 0x1a, 0xca, 0x30, 0xf3, 0x06, 0x88, 0x15, 0x5f, + 0xaf, 0x6e, 0x2f, 0xaf, 0x6e, 0x20, 0x00, 0x67, 0x10, 0x16, 0x40, 0x7f, + 0xdf, 0x69, 0x94, 0x69, 0x7f, 0x43, 0x5c, 0x06, 0x98, 0x17, 0x3c, 0xd5, + 0xad, 0xb0, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x15, 0x1f, 0x04, 0x43, + 0x28, 0x15, 0x30, 0x20, 0x05, 0x2d, 0x28, 0x23, 0x11, 0x38, 0x04, 0x3d, + 0x20, 0x0b, 0x3d, 0x04, 0x33, 0x05, 0x88, 0x23, 0xa5, 0x10, 0x16, 0xf4, + 0xff, 0x0a, 0x38, 0x0c, 0x09, 0x0a, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x04, + 0x0a, 0x0a, 0xda, 0x03, 0x59, 0x28, 0x17, 0x0c, 0x9c, 0x01, 0xb5, 0x30, + 0xe9, 0x30, 0xef, 0x30, 0xaf, 0x06, 0x88, 0x19, 0x55, 0x53, 0x28, 0x13, + 0x72, 0x28, 0x17, 0x77, 0x28, 0x1b, 0x6b, 0x10, 0x16, 0x20, 0x7f, 0x02, + 0x99, 0x6c, 0x5e, 0x63, 0x8a, 0x8d, 0x06, 0x9b, 0x17, 0xac, 0x06, 0xc0, + 0x7c, 0xb7, 0x41, 0xc6, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0xab, + 0x28, 0x13, 0x40, 0x28, 0x17, 0x32, 0x28, 0x1b, 0x3a, 0x05, 0x88, 0x0d, + 0x10, 0x17, 0x94, 0xff, 0x14, 0x0b, 0x0e, 0x0e, 0x20, 0x01, 0x0b, 0x40, + 0x06, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x1a, 0x01, 0x75, 0x4e, 0x00, 0x00, + 0x10, 0x0d, 0x9c, 0xbb, 0x28, 0x17, 0xf3, 0x30, 0xb4, 0x30, 0x15, 0xfc, + 0x30, 0xeb, 0x06, 0x48, 0x1b, 0x53, 0x2f, 0xaf, 0x6c, 0x6f, 0xaf, 0x60, + 0x6f, 0x28, 0x21, 0x10, 0x15, 0xf0, 0x7f, 0xea, 0x96, 0x70, 0x51, 0xaa, + 0x40, 0x83, 0x06, 0x98, 0x17, 0x40, 0xc1, 0x91, 0xb7, 0xe0, 0xac, 0x30, + 0x74, 0xb9, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0x04, + 0x41, 0x3b, 0x28, 0x1b, 0x3d, 0x04, 0x33, 0x04, 0x3e, 0x28, 0x21, 0x8a, + 0x10, 0x1d, 0xf4, 0xff, 0x0c, 0x0f, 0x0f, 0x20, 0x01, 0x0c, 0x40, 0x06, + 0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0x31, 0x02, 0x33, 0x48, 0x00, 0x02, 0x00, + 0x0e, 0x9c, 0xc8, 0x30, 0xec, 0x28, 0x17, 0xac, 0x22, 0x30, 0xcc, 0x06, + 0x48, 0x15, 0x00, 0x00, 0x54, 0x28, 0x17, 0x72, 0xd4, 0x28, 0x1b, 0x38, + 0x17, 0x67, 0x48, 0x1f, 0x75, 0x10, 0x15, 0xc0, 0x7f, 0x01, 0x4e, 0x08, + 0xa0, 0x52, 0x74, 0x59, 0x06, 0x98, 0x17, 0xb8, 0xd2, 0x1d, 0x06, 0xb8, + 0x00, 0xac, 0x04, 0xb2, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x22, 0xb6, + 0x28, 0x0b, 0x35, 0x48, 0x15, 0x38, 0x1b, 0x43, 0x06, 0x08, 0x17, 0x10, + 0x16, 0xf4, 0xff, 0x0d, 0x28, 0x10, 0x10, 0x20, 0x01, 0x0d, 0x40, 0x06, + 0x0d, 0x0d, 0x0d, 0x00, 0x0d, 0xca, 0x03, 0x56, 0x49, 0x00, 0x00, 0x0f, + 0x03, 0x9c, 0xe9, 0x30, 0xd6, 0x30, 0xa2, 0x28, 0x19, 0x06, 0x7d, 0x2f, + 0x5c, 0x4c, 0x2f, 0xab, 0x62, 0x28, 0x0b, 0x3f, 0xb1, 0x10, 0x16, 0x30, + 0x7f, 0xb3, 0x7e, 0x00, 0xfd, 0x95, 0x54, 0x80, 0xa6, 0x90, 0xf4, 0x76, + 0x08, 0x96, 0x8f, 0x3a, 0x53, 0x06, 0x1f, 0xb1, 0x7c, 0xb7, 0x80, 0x1a, + 0xbd, 0x48, 0xc5, 0x06, 0x78, 0x95, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x0f, + 0x31, 0xe2, 0x28, 0x0f, 0x38, 0x15, 0x10, 0x1e, 0x34, 0xff, 0x0e, 0x05, + 0x05, 0x20, 0x01, 0x0e, 0x80, 0x40, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0xc0, + 0x03, 0xf3, 0x00, 0x51, 0x00, 0x00, 0x10, 0x9c, 0xb5, 0x30, 0xd0, 0x44, + 0x30, 0x06, 0x9d, 0x2d, 0x00, 0x00, 0x53, 0x48, 0x17, 0x61, 0x00, 0x42, + 0x68, 0x10, 0x16, 0x60, 0x7f, 0x99, 0x6c, 0xf4, 0x5d, 0x06, 0xb2, 0xff, + 0xac, 0x01, 0xc0, 0x14, 0xbc, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x73, + 0x7f, 0x46, 0x21, 0x48, 0x17, 0x30, 0x04, 0x45, 0x06, 0x48, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x0f, 0x28, 0x0d, 0x0d, 0x20, 0x01, 0x0f, 0x40, 0x06, + 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x41, 0x04, 0x89, 0x52, 0x00, 0x00, 0x11, + 0x00, 0x9c, 0xd7, 0x30, 0xc8, 0x30, 0xe9, 0x30, 0xb8, 0x05, 0x30, 0xe3, + 0x30, 0xe4, 0x30, 0x06, 0x3f, 0xb0, 0x50, 0x2f, 0xab, 0x15, 0x74, 0x00, + 0x72, 0x2f, 0xb5, 0x6a, 0x2f, 0xb9, 0x79, 0x2f, 0xbd, 0x80, 0x10, 0x15, + 0xd0, 0x7f, 0x03, 0x5e, 0xce, 0x57, 0x54, 0x80, 0xa6, 0x01, 0x90, 0xf4, + 0x76, 0x96, 0x8f, 0x3a, 0x53, 0x06, 0x1f, 0xb7, 0x00, 0x78, 0xd4, 0xb8, + 0xd2, 0x7c, 0xb7, 0x90, 0xc7, 0x30, 0x7c, 0xc5, 0x06, 0x5b, 0x9b, 0x0e, + 0xf3, 0x7f, 0x1f, 0x04, 0x43, 0x04, 0x11, 0x42, 0x04, 0x40, 0x28, 0x1d, + 0x34, 0x04, 0x36, 0x28, 0x23, 0x62, 0x4f, 0x05, 0xe8, 0x1f, 0x10, 0x16, + 0xf4, 0xff, 0x10, 0x0c, 0x0c, 0x20, 0x01, 0x10, 0x80, 0x40, 0x06, 0x10, + 0x10, 0x10, 0x10, 0x12, 0x02, 0x4b, 0x45, 0x48, 0x00, 0x3f, 0xff, 0x01, + 0x04, 0x04, 0x20, 0x01, 0x01, 0x40, 0x06, 0x04, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, + 0x03, 0x30, 0x04, 0x02, 0x41, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, + 0x04, 0x30, 0x04, 0x31, 0x03, 0x04, 0x40, 0x06, 0x30, 0x3a, 0x05, 0x06, + 0x06, 0x20, 0x01, 0x49, 0x05, 0x40, 0x06, 0x05, 0x05, 0x20, 0x07, 0x07, + 0x07, 0x20, 0x01, 0x62, 0x06, 0x40, 0x06, 0x30, 0x1a, 0x07, 0x08, 0x08, + 0x20, 0x01, 0x07, 0xc5, 0x40, 0x06, 0x30, 0x1a, 0x08, 0x0a, 0x0a, 0x20, + 0x01, 0x08, 0x20, 0x06, 0x41, 0x09, 0x20, 0x05, 0x08, 0x08, 0x09, 0x0b, + 0x0b, 0x20, 0x01, 0x51, 0x09, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x09, 0x09, + 0x0a, 0x30, 0x04, 0x48, 0x09, 0x20, 0x1d, 0x09, 0x0b, 0x20, 0x05, 0x0a, + 0x0a, 0x0b, 0x2d, 0x0e, 0x0e, 0x20, 0x01, 0x0b, 0x40, 0x06, 0x30, 0x2a, + 0x0c, 0x38, 0xe4, 0x34, 0x0f, 0x0c, 0x40, 0x06, 0x30, 0xe2, 0x0d, 0x30, + 0xdc, 0x10, 0x0d, 0xd3, 0x40, 0x06, 0x39, 0x0a, 0x0e, 0x30, 0x84, 0x05, + 0x0e, 0x40, 0x06, 0x30, 0x3a, 0xe0, 0xf9, 0x1f, 0xf1, 0x17, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x9c, 0x51, 0x00, + 0x11, 0x09, 0x00, 0x00, 0x30, 0x01, 0x0f, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x45, 0xf4, 0x8a, + 0xcf, 0x00, 0x00, 0x00, 0x02, 0x0f, 0xe9, 0x30, 0xd1, 0x30, 0xb9, 0x10, + 0x30, 0x0c, 0x77, 0x06, 0x78, 0x1d, 0x4c, 0x00, 0x61, 0x00, 0x14, 0x20, + 0x00, 0x50, 0x20, 0x05, 0x7a, 0x10, 0x16, 0x40, 0x7f, 0xc9, 0x62, 0x04, + 0xf4, 0x5d, 0xaf, 0x65, 0x01, 0x06, 0x82, 0xff, 0x7c, 0xb7, 0x00, 0x0c, + 0xd3, 0xa4, 0xc2, 0x20, 0x00, 0xfc, 0xc8, 0x80, 0x10, 0x06, 0x53, 0x7f, + 0x1b, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x1f, 0x91, 0x20, 0x05, 0x41, 0x04, + 0x10, 0x1e, 0x34, 0xff, 0x01, 0x04, 0x04, 0x20, 0x01, 0x52, 0x01, 0x20, + 0x06, 0x03, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x00, 0x0f, 0xc1, + 0x30, 0xe5, 0x30, 0xad, 0x30, 0xb5, 0x20, 0x30, 0xab, 0x06, 0x68, 0x1b, + 0x43, 0x00, 0x68, 0x00, 0x75, 0x22, 0x00, 0x71, 0x20, 0x03, 0x69, 0x00, + 0x73, 0x28, 0x23, 0x63, 0xc0, 0x28, 0x27, 0x10, 0x15, 0xb0, 0x7f, 0x18, + 0x4e, 0xfa, 0x57, 0x28, 0x84, 0x20, 0x61, 0x53, 0x06, 0x78, 0x19, 0x94, + 0xcd, 0xa4, 0xd0, 0xac, 0x18, 0xc0, 0x74, 0xce, 0x06, 0x78, 0x19, 0x0e, + 0xf3, 0x7f, 0x27, 0x04, 0x43, 0x0a, 0x04, 0x3a, 0x04, 0x38, 0x28, 0x15, + 0x30, 0x20, 0x07, 0x30, 0xc2, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, + 0x02, 0x01, 0x02, 0x02, 0x50, 0x03, 0x09, 0x80, 0x30, 0x09, 0x02, 0x76, + 0xf2, 0x98, 0xd1, 0x00, 0x00, 0x00, 0x04, 0x0f, 0xb3, 0x30, 0xc1, 0x30, + 0xe3, 0x30, 0x18, 0xd0, 0x30, 0xf3, 0x20, 0x03, 0x06, 0x38, 0x19, 0x43, + 0x00, 0x6f, 0xab, 0x28, 0x0b, 0x68, 0x2f, 0xb5, 0x62, 0x2f, 0xb9, 0x6d, + 0x40, 0x05, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0xd1, 0x79, 0x70, 0x60, 0xed, + 0x73, 0xf4, 0x5d, 0x80, 0x06, 0x78, 0x17, 0x54, 0xcf, 0x28, 0xcc, 0x24, + 0xbc, 0x14, 0x60, 0xbc, 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x1a, 0x04, + 0x3e, 0x04, 0x47, 0xac, 0x28, 0x13, 0x31, 0x28, 0x17, 0x3c, 0x40, 0x05, + 0x10, 0x1d, 0xd4, 0xff, 0x03, 0x02, 0x28, 0x03, 0x03, 0x50, 0x03, 0x02, + 0x30, 0x09, 0x03, 0xa4, 0xf3, 0x00, 0xf6, 0xd0, 0x00, 0x00, 0x05, 0x0f, + 0xd9, 0x30, 0x60, 0xcb, 0x06, 0x48, 0x0f, 0x7f, 0xff, 0x45, 0x00, 0x6c, + 0x00, 0x20, 0x03, 0x00, 0x42, 0x00, 0x65, 0x00, 0x6e, 0x2f, 0xb1, 0x06, + 0x1d, 0xb3, 0xe1, 0x06, 0x90, 0x79, 0x0f, 0x50, 0x7f, 0x06, 0xf1, 0xff, + 0x1d, 0x8d, 0x3c, 0x5c, 0x06, 0x78, 0x13, 0x81, 0x3f, 0xff, 0xd8, 0xc5, + 0xa0, 0xbc, 0xc8, 0xb2, 0x06, 0x78, 0x15, 0x80, 0x0f, 0x11, 0xff, 0x11, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x38, 0xe0, 0x05, 0xe8, 0x0d, 0x07, 0x94, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x03, 0x01, 0x01, 0x01, 0x04, 0x03, + 0x04, 0x04, 0x01, 0x03, 0x30, 0x05, 0x04, 0x04, 0x00, 0x74, 0xf5, 0xda, + 0xd1, 0x00, 0x00, 0x06, 0x0f, 0x04, 0xaa, 0x30, 0xeb, 0x30, 0xed, 0x06, + 0xa8, 0x19, 0x4f, 0x00, 0x14, 0x72, 0x00, 0x75, 0x20, 0x03, 0x6f, 0x10, + 0x16, 0x60, 0x7f, 0x65, 0x59, 0x08, 0x81, 0x9c, 0x57, 0x7f, 0x06, 0x98, + 0x19, 0x24, 0xc6, 0xe8, 0x18, 0xb8, 0x5c, 0xb8, 0x06, 0x98, 0x17, 0x0e, + 0xf3, 0x7f, 0x1e, 0x04, 0x40, 0x2c, 0x04, 0x43, 0x20, 0x03, 0x3e, 0x06, + 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x05, 0x05, 0xa0, 0x70, 0x01, 0x04, + 0x40, 0x0a, 0x37, 0xf3, 0x40, 0xd0, 0x00, 0x00, 0x00, 0x07, 0x0f, 0xd1, + 0x30, 0xf3, 0x30, 0xc9, 0x8b, 0x06, 0xa8, 0x17, 0x50, 0x00, 0x61, 0x2f, + 0xaf, 0x64, 0x06, 0x88, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x58, 0x6f, + 0x1a, 0x59, 0x06, 0x98, 0x15, 0x00, 0x00, 0x10, 0x18, 0xd3, 0xc4, 0xb3, + 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1f, 0x04, 0x30, 0x0c, 0x04, 0x3d, + 0x04, 0x34, 0x06, 0x88, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x06, 0xa0, + 0x70, 0x01, 0x05, 0x40, 0x0a, 0x28, 0xf8, 0x20, 0xcf, 0x00, 0x00, 0x00, + 0x08, 0x0f, 0xdd, 0x30, 0xc8, 0x30, 0xb7, 0x88, 0x06, 0xc8, 0x17, 0x6f, + 0x00, 0x74, 0x2f, 0xad, 0x73, 0x00, 0xed, 0x81, 0x10, 0x16, 0x40, 0x7f, + 0xe2, 0x6c, 0x58, 0x62, 0x7f, 0x89, 0x06, 0x98, 0x19, 0x03, 0xec, 0xd3, + 0xa0, 0xd1, 0xdc, 0xc2, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, 0x51, 0x1f, + 0x28, 0x11, 0x42, 0x28, 0x15, 0x41, 0x04, 0x38, 0x06, 0x48, 0x19, 0x94, + 0x10, 0x16, 0xf4, 0xff, 0x07, 0x07, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x13, + 0xf2, 0x00, 0x3f, 0xd1, 0x00, 0x00, 0x09, 0x0f, 0xb5, 0x30, 0x00, 0xf3, + 0x30, 0xbf, 0x30, 0xfb, 0x30, 0xaf, 0x30, 0x15, 0xeb, 0x30, 0xb9, 0x06, + 0x28, 0x1f, 0x53, 0x4f, 0xaf, 0x74, 0x2f, 0xb5, 0x00, 0x20, 0x00, 0x43, + 0x00, 0x72, 0x00, 0x75, 0x00, 0x40, 0x7a, 0x10, 0x15, 0xc0, 0x7f, 0x23, + 0x57, 0x4b, 0x51, 0x81, 0x9c, 0x20, 0xaf, 0x65, 0x06, 0x78, 0x19, 0xb0, + 0xc0, 0xc0, 0xd0, 0x6c, 0x0c, 0xd0, 0xe8, 0xb8, 0xa4, 0x06, 0x68, 0x1b, + 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x10, 0x30, 0x04, 0x3d, 0x28, 0x19, 0x30, + 0x04, 0x2d, 0x00, 0x06, 0x1a, 0x04, 0x40, 0x04, 0x43, 0x28, 0x21, 0x10, + 0x1d, 0xb4, 0xff, 0x08, 0x50, 0x08, 0x70, 0x01, 0x07, 0x40, 0x0a, 0x58, + 0xf3, 0x15, 0xd3, 0x00, 0x00, 0x00, 0x0a, 0x0f, 0xbf, 0x30, 0xea, 0x30, + 0x68, 0xcf, 0x06, 0x28, 0x0f, 0x7f, 0xff, 0x54, 0x28, 0x17, 0x72, 0x00, + 0x69, 0x30, 0x00, 0x6a, 0x28, 0x1f, 0x10, 0x16, 0x40, 0x7f, 0x58, 0xcc, + 0x91, 0xc8, 0x40, 0x54, 0x06, 0x78, 0x15, 0x00, 0x00, 0xc0, 0xd0, 0xac, + 0xb9, 0x34, 0x58, 0xd5, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x22, 0x28, + 0x17, 0x40, 0x04, 0x19, 0x38, 0x04, 0x45, 0x28, 0x1f, 0x10, 0x1e, 0x34, + 0xff, 0x09, 0x09, 0x70, 0x01, 0x42, 0x08, 0x40, 0x0a, 0xb4, 0xf0, 0xf5, + 0xd1, 0x00, 0x3f, 0xff, 0x01, 0x2a, 0x04, 0x04, 0x20, 0x01, 0x01, 0x20, + 0x06, 0x03, 0x20, 0x05, 0x01, 0x05, 0x01, 0x02, 0x01, 0x02, 0x02, 0x50, + 0x03, 0x09, 0x30, 0x09, 0x07, 0x02, 0x03, 0x02, 0x03, 0x03, 0x50, 0x03, + 0x20, 0x0b, 0x20, 0x0a, 0x2a, 0x04, 0x03, 0x20, 0x25, 0x03, 0x20, 0x31, + 0x03, 0x30, 0x05, 0x04, 0x19, 0x04, 0x05, 0x05, 0x70, 0x01, 0x50, 0x0a, + 0x06, 0x06, 0x70, 0x01, 0x9f, 0x50, 0x0a, 0x07, 0x07, 0x70, 0x01, 0x50, + 0x0a, 0xf8, 0xaf, 0xf0, 0xa7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x4c, 0x41, 0x00, 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0xa8, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x66, 0x11, 0xa9, 0x26, 0x00, 0x00, 0x00, 0x02, 0xa8, 0xa2, 0x30, + 0xd6, 0x30, 0xc0, 0x10, 0x30, 0xd3, 0x30, 0x06, 0x78, 0x1d, 0x41, 0x00, + 0x62, 0x00, 0x00, 0x75, 0x00, 0x20, 0x00, 0x44, 0x00, 0x68, 0x00, 0x58, + 0x61, 0x20, 0x0b, 0x69, 0x10, 0x0e, 0x80, 0x7f, 0x06, 0x31, 0xfd, 0x00, + 0x00, 0x3f, 0x01, 0x96, 0x03, 0x5e, 0x4e, 0x62, 0xd4, 0x6b, 0x06, 0x7b, + 0x1d, 0x00, 0x44, 0xc5, 0x80, 0xbd, 0xe4, 0xb2, 0x44, 0xbe, 0xc0, 0x0f, + 0x13, 0x7f, 0x06, 0x51, 0xff, 0x10, 0x04, 0x31, 0x04, 0x43, 0x04, 0x04, + 0x2d, 0x00, 0x14, 0x04, 0x30, 0x20, 0x09, 0x38, 0x04, 0xcd, 0x10, 0x16, + 0x94, 0xff, 0x06, 0x56, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x03, + 0x28, 0x17, 0x01, 0xb8, 0x30, 0xe5, 0x30, 0xde, 0x30, 0xf3, 0x06, 0x68, + 0x19, 0x05, 0x41, 0x00, 0x6a, 0x00, 0x6d, 0x28, 0x11, 0x6e, 0x06, 0x88, + 0x97, 0x83, 0x06, 0xf0, 0x7f, 0x64, 0x00, 0x73, 0x00, 0x63, 0x29, 0x15, + 0x06, 0x51, 0x05, 0xa0, 0x07, 0x51, 0x7f, 0xe1, 0x06, 0x81, 0xff, 0x3f, + 0x96, 0xbb, 0x6c, 0xfc, 0x40, 0x66, 0x06, 0x9f, 0xb3, 0x44, 0xc5, 0xc0, + 0xc9, 0xcc, 0xb9, 0xc0, 0x06, 0x9f, 0xb3, 0x0e, 0xf3, 0x7f, 0x10, 0x04, + 0x34, 0x04, 0x36, 0x04, 0x5c, 0x3c, 0x28, 0x15, 0x3d, 0x06, 0x08, 0x13, + 0x0f, 0x54, 0xff, 0x10, 0x06, 0xd0, 0xff, 0x02, 0x02, 0x80, 0xd0, 0x01, + 0x11, 0x12, 0x6d, 0x27, 0x00, 0x00, 0x04, 0x02, 0xa8, 0xb7, 0x30, 0xe3, + 0x30, 0xeb, 0x28, 0x1b, 0xe3, 0xa2, 0x06, 0x88, 0x17, 0x73, 0x2f, 0xa9, + 0x20, 0x00, 0x53, 0x4f, 0xaf, 0x72, 0xad, 0x2f, 0xaf, 0x71, 0x2f, 0xb7, + 0x68, 0x05, 0x8f, 0xb5, 0x70, 0x77, 0x6a, 0x05, 0xc0, 0x75, 0xf7, 0xb0, + 0x7f, 0x38, 0x13, 0x30, 0xf9, 0x78, 0x1f, 0x61, 0x05, 0xe0, 0x7f, 0x06, + 0xf0, 0xff, 0x71, 0x7d, 0x84, 0x06, 0x5f, 0xb1, 0x99, 0x6c, 0xe6, 0x8f, + 0x06, 0x98, 0x15, 0x00, 0x00, 0x03, 0xe4, 0xc0, 0x74, 0xb9, 0x90, 0xc7, + 0x06, 0x98, 0x97, 0x0e, 0xf1, 0xff, 0x57, 0x28, 0x28, 0x11, 0x40, 0x48, + 0x1b, 0x30, 0x06, 0x68, 0x17, 0x06, 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x00, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x00, 0x06, 0x06, + 0x07, 0x04, 0x03, 0x03, 0x03, 0x03, 0x10, 0xc7, 0x11, 0xa4, 0x28, 0x17, + 0x05, 0xa8, 0xe9, 0x30, 0x05, 0xa2, 0x30, 0xb9, 0x30, 0xfb, 0x20, 0x05, + 0xeb, 0x20, 0x05, 0x01, 0xab, 0x30, 0xa4, 0x30, 0xde, 0x30, 0xfc, 0x05, + 0xa8, 0x23, 0x50, 0x52, 0x2f, 0xab, 0x73, 0x28, 0x17, 0x61, 0x00, 0x6c, + 0x00, 0x17, 0x2d, 0x00, 0x4b, 0x48, 0x1d, 0x69, 0x4f, 0xc1, 0x05, 0x58, + 0x1b, 0x00, 0x30, 0x7f, 0x5a, 0xef, 0x06, 0x80, 0x7f, 0x43, 0xa0, 0xff, + 0x0d, 0xd1, 0x7f, 0x65, 0x21, 0xff, 0x20, 0x20, 0x00, 0x4a, 0x05, 0xe0, + 0xfd, 0x00, 0x00, 0xc8, 0x54, 0x0a, 0x04, 0x4f, 0x6c, 0x9a, 0xd2, 0x89, + 0x06, 0x7f, 0xb1, 0x7c, 0xb7, 0x00, 0xa4, 0xc2, 0x4c, 0xc5, 0x74, 0xce, + 0x74, 0xc7, 0x34, 0xc8, 0xb9, 0x06, 0x3f, 0xb2, 0x0e, 0xf1, 0xff, 0x20, + 0x28, 0x17, 0x41, 0x04, 0x00, 0x20, 0x00, 0x4d, 0x04, 0x3b, 0x04, 0x4c, + 0x04, 0x11, 0x2d, 0x00, 0x25, 0x28, 0x27, 0x39, 0x04, 0x3c, 0x05, 0x88, + 0x25, 0xc0, 0x08, 0x34, 0xff, 0x10, 0x0d, 0xb0, 0x7f, 0x04, 0x06, 0x05, + 0x05, 0x05, 0x05, 0x20, 0x04, 0x04, 0x20, 0x03, 0x06, 0x04, 0x04, 0x04, + 0x04, 0x10, 0x40, 0x12, 0xd2, 0x28, 0x17, 0x06, 0xa8, 0xc9, 0x30, 0x18, + 0xa5, 0x30, 0xd0, 0x28, 0x0d, 0x06, 0x7d, 0x33, 0x44, 0x00, 0x75, 0x36, + 0x00, 0x62, 0x48, 0x0b, 0x06, 0xd0, 0x7f, 0xef, 0x0e, 0xe0, 0xff, 0x06, + 0xd1, 0x7f, 0xe1, 0x84, 0x06, 0x81, 0xff, 0xea, 0x8f, 0xdc, 0x62, 0x06, + 0x9f, 0xad, 0x00, 0x00, 0x03, 0x50, 0xb4, 0x14, 0xbc, 0x74, 0xc7, 0x06, + 0x90, 0x81, 0x0e, 0xf2, 0x7f, 0x07, 0x14, 0x04, 0x43, 0x04, 0x31, 0x48, + 0x0b, 0x10, 0x06, 0xb3, 0xff, 0x10, 0x06, 0x90, 0xff, 0x03, 0x05, 0x05, + 0x03, 0x03, 0x03, 0x03, 0x40, 0x05, 0x38, 0x20, 0x08, 0x05, 0xf5, 0x11, + 0x4f, 0x28, 0x17, 0x07, 0xa8, 0xd5, 0x08, 0x30, 0xb8, 0x30, 0xe3, 0x28, + 0x17, 0xe9, 0x30, 0xfc, 0xaa, 0x06, 0x48, 0x1b, 0x41, 0x4e, 0x27, 0x46, + 0x28, 0x1d, 0x6a, 0x2f, 0xb9, 0x79, 0x3b, 0x00, 0x72, 0x05, 0x8f, 0xa9, + 0x5f, 0xff, 0x70, 0x79, 0xef, 0x06, 0x00, 0x79, 0x90, 0x7f, 0x5f, 0x64, + 0x2f, 0xb1, 0x63, 0x6f, 0xa9, 0x30, 0xff, 0x05, 0xf0, 0x7f, 0x06, 0x51, + 0x79, 0xd1, 0x7f, 0xc0, 0x06, 0x10, 0xf9, 0x5f, 0xff, 0xcc, 0x5b, 0xe5, + 0x67, 0x0a, 0x4f, 0x40, 0xc9, 0x06, 0x88, 0x1b, 0x4c, 0xc5, 0x78, 0xd4, + 0x90, 0xc7, 0x0e, 0x74, 0xc7, 0x7c, 0xb7, 0x06, 0x5b, 0x99, 0xd1, 0x7f, + 0x0e, 0x11, 0xff, 0x24, 0x82, 0x28, 0x17, 0x34, 0x04, 0x36, 0x04, 0x35, + 0x28, 0x19, 0x40, 0xe0, 0x28, 0x1f, 0x0d, 0xf4, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x06, 0x03, 0x04, 0x04, 0x04, 0x10, 0x04, 0x06, 0x06, 0x20, 0x03, + 0x03, 0x06, 0x06, 0x06, 0x00, 0x06, 0xdd, 0x11, 0x0f, 0x28, 0x00, 0x00, + 0x08, 0x00, 0xa8, 0xa6, 0x30, 0xe0, 0x30, 0xfb, 0x30, 0xa2, 0x2a, 0x30, + 0xeb, 0x20, 0x05, 0xab, 0x28, 0x1f, 0xef, 0x28, 0x23, 0xf3, 0x8b, 0x05, + 0xa8, 0x21, 0x55, 0x00, 0x6d, 0x20, 0x01, 0x20, 0x2f, 0xb1, 0x38, 0x1f, + 0x55, 0x51, 0x48, 0x1b, 0x77, 0x48, 0x21, 0x6e, 0x06, 0x00, 0x7f, 0x2d, + 0x40, 0x7f, 0x51, 0x69, 0x40, 0x7f, 0x69, 0x10, 0x05, 0xa0, 0x7f, 0x20, + 0x00, 0x65, 0x4a, 0x1d, 0x60, 0x4b, 0x06, 0x01, 0x7d, 0x27, 0x97, 0x4e, + 0xc6, 0x59, 0xd6, 0x76, 0x20, 0x07, 0x4e, 0x06, 0x7f, 0xb1, 0xc0, 0xc6, + 0x4c, 0xc5, 0x74, 0x01, 0xce, 0x74, 0xc7, 0x40, 0xc6, 0x78, 0xc7, 0x06, + 0x3f, 0xb2, 0x88, 0x0e, 0xf1, 0xff, 0x23, 0x04, 0x3c, 0x20, 0x01, 0x20, + 0x00, 0x4d, 0x00, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x1a, 0x8b, + 0x28, 0x1b, 0x39, 0x04, 0x32, 0x40, 0x05, 0x3d, 0x05, 0x28, 0x25, 0x07, + 0xb4, 0xff, 0x94, 0x10, 0x0e, 0x30, 0x7f, 0x07, 0x07, 0x70, 0x01, 0x05, + 0x40, 0x0a, 0x22, 0x12, 0x24, 0xa4, 0x27, 0x00, 0x3f, 0xff, 0x01, 0x01, + 0xd0, 0x01, 0x02, 0x02, 0xa2, 0xd0, 0x01, 0x03, 0x28, 0x5b, 0x06, 0x06, + 0x03, 0x28, 0x5b, 0x07, 0x08, 0x04, 0x03, 0x03, 0x03, 0x20, 0x0e, 0x05, + 0x05, 0x05, 0x1f, 0x05, 0x04, 0x04, 0x20, 0x03, 0x28, 0x73, 0x30, 0x07, + 0x30, 0x15, 0x40, 0x05, 0xb8, 0x30, 0x18, 0x05, 0xf8, 0x8f, 0xf0, 0x87, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x6c, 0xe4, 0x00, 0x11, 0x1b, 0x00, 0x00, + 0x30, 0x01, 0x10, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xc7, 0xf4, 0xee, 0xdd, 0x00, 0x00, 0x00, + 0x02, 0x10, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, 0x30, 0xc8, 0x30, 0xea, + 0x20, 0x03, 0xfb, 0x30, 0xd5, 0x00, 0x30, 0xa7, 0x30, 0xc7, 0x30, 0xe9, + 0x30, 0xeb, 0x10, 0x30, 0xde, 0x5d, 0x05, 0x58, 0x2f, 0x44, 0x00, 0x69, + 0x00, 0x04, 0x73, 0x00, 0x74, 0x00, 0x72, 0x20, 0x07, 0x74, 0x00, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x46, 0x00, 0x65, 0x00, 0x41, 0x64, 0x20, 0x03, + 0x72, 0x00, 0x61, 0x00, 0x6c, 0x05, 0xc0, 0x7f, 0x6b, 0x63, 0x20, 0x87, + 0x30, 0x7f, 0xe9, 0x20, 0x7f, 0xe9, 0x06, 0x20, 0x7f, 0x06, 0xd0, 0xff, + 0x68, 0x65, 0x21, 0x85, 0x00, 0x31, 0x81, 0x65, 0x0c, 0xc1, 0xff, 0x54, + 0x80, 0xa6, 0x10, 0x90, 0x3a, 0x53, 0x06, 0x9b, 0x1b, 0x0c, 0xbe, 0x7c, + 0xb7, 0x00, 0xc8, 0xc9, 0x20, 0x00, 0xf0, 0xc5, 0x29, 0xbc, 0x3b, 0x6c, + 0xad, 0x06, 0x1b, 0xa3, 0xb3, 0x6d, 0x33, 0x6f, 0x20, 0x00, 0x03, 0x11, + 0x0c, 0xd3, 0xff, 0x04, 0x24, 0x04, 0x35, 0x04, 0x34, 0x20, 0x03, 0x40, + 0x04, 0x00, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x3d, 0x04, 0x00, 0x4b, + 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x04, 0x43, 0x3a, 0x20, 0x13, 0x43, + 0x04, 0x33, 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x10, 0x01, + 0x07, 0x07, 0x20, 0x01, 0x01, 0x01, 0x08, 0x07, 0x48, 0x1a, 0x20, 0x05, + 0x01, 0x01, 0x58, 0x17, 0x03, 0x10, 0xa2, 0x0d, 0x30, 0xaf, 0x30, 0xec, + 0x05, 0x88, 0x05, 0x00, 0x1f, 0xff, 0x41, 0x27, 0x8d, 0xc0, 0x36, 0x93, + 0x10, 0x16, 0x70, 0x7f, 0x3f, 0x96, 0x4b, 0x51, 0xcc, 0x91, 0x80, 0x06, + 0x92, 0xff, 0x44, 0xc5, 0x6c, 0xd0, 0xac, 0xb9, 0x20, 0x15, 0x00, 0xfc, + 0xc8, 0x10, 0x06, 0x53, 0x7f, 0x10, 0x47, 0xff, 0x38, 0x04, 0xe7, 0xfd, + 0xa4, 0x10, 0x18, 0x94, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, + 0x02, 0x02, 0x00, 0x02, 0x02, 0xea, 0xf8, 0xca, 0xcf, 0x00, 0x00, 0x40, + 0x04, 0x28, 0x17, 0xe9, 0x30, 0xb4, 0x30, 0xa2, 0x30, 0x51, 0xb9, 0x06, + 0x68, 0x1b, 0x41, 0x2f, 0x93, 0x61, 0x00, 0x67, 0x2f, 0x29, 0x60, 0x61, + 0x2f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x3f, 0x96, 0xc9, 0x62, 0x08, 0x10, + 0x62, 0xaf, 0x65, 0x06, 0x7b, 0x19, 0x4c, 0xc5, 0x7c, 0xb7, 0x03, 0xe0, + 0xac, 0x44, 0xc5, 0xa4, 0xc2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x00, + 0x10, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x33, 0x04, 0x5a, 0x3e, 0x20, 0x05, + 0x41, 0x06, 0x28, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x02, + 0x40, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x21, 0xf9, 0x04, 0x9a, + 0xe6, 0x00, 0x00, 0x05, 0x28, 0x17, 0xde, 0x30, 0x1a, 0xd1, 0x30, 0xfc, + 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6d, 0x28, 0x17, 0x70, 0x30, 0x00, 0xe1, + 0x06, 0x8f, 0xaf, 0x10, 0x0e, 0xd0, 0x7f, 0x3f, 0x96, 0x6c, 0x9a, 0x20, + 0x15, 0x5e, 0x06, 0x78, 0x15, 0x00, 0x00, 0x44, 0xc5, 0xc8, 0x18, 0xb9, + 0x0c, 0xd3, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x04, 0x3c, 0xb4, + 0x28, 0x17, 0x3f, 0x28, 0x1b, 0x10, 0x1e, 0x54, 0xff, 0x04, 0x38, 0x0c, + 0x03, 0x04, 0xa0, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x06, 0x00, + 0xb3, 0x08, 0xdb, 0x00, 0x00, 0x06, 0x48, 0x17, 0xbe, 0x30, 0xca, 0x35, + 0x30, 0xb9, 0x06, 0x68, 0x19, 0x58, 0x17, 0x7a, 0x2f, 0xaf, 0x6e, 0x06, + 0x4f, 0xb1, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x9a, 0x4e, 0x6c, 0x9a, 0x59, + 0x5b, 0x06, 0xd8, 0x17, 0x03, 0x70, 0xc8, 0x98, 0xb0, 0xa4, 0xc2, 0x06, + 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x82, 0x58, 0x17, 0x37, 0x04, 0x3e, 0x04, + 0x3d, 0x28, 0x1f, 0x41, 0xd2, 0x06, 0x08, 0x1d, 0x10, 0x16, 0xf4, 0xff, + 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x03, 0x80, 0x20, 0x05, 0x05, + 0x05, 0xca, 0xfd, 0x51, 0xd5, 0x00, 0x01, 0x00, 0x07, 0x10, 0xd0, 0x30, + 0xa4, 0x30, 0x28, 0x1b, 0xa3, 0x06, 0x8d, 0x2f, 0x42, 0x2f, 0xad, 0x68, + 0x00, 0x69, 0x2f, 0xb3, 0x10, 0x0e, 0xb0, 0x7f, 0x40, 0xed, 0x06, 0x81, + 0xff, 0xf4, 0x5d, 0x0a, 0x4f, 0x9a, 0x4e, 0x81, 0x06, 0x98, 0x17, 0x14, + 0xbc, 0x74, 0xc7, 0x44, 0xc5, 0x06, 0x58, 0x13, 0xa3, 0x0f, 0x33, 0x7f, + 0x11, 0x28, 0x15, 0x38, 0x04, 0x4f, 0x06, 0x08, 0x0f, 0x10, 0x0f, 0xd4, + 0xff, 0xa4, 0x06, 0x96, 0xff, 0x06, 0x38, 0x0c, 0x05, 0x06, 0x40, 0x06, + 0x06, 0x06, 0x00, 0x06, 0x06, 0xc5, 0xf6, 0x9d, 0xe4, 0x00, 0x00, 0x14, + 0x08, 0x10, 0xbb, 0x28, 0x15, 0xe9, 0x06, 0xa8, 0x17, 0x43, 0x00, 0x44, + 0x65, 0x2f, 0xaf, 0x72, 0x00, 0xe1, 0x10, 0x16, 0x60, 0x7f, 0x5e, 0x58, + 0x08, 0x3f, 0x96, 0xc9, 0x62, 0x06, 0x9b, 0x17, 0x38, 0xc1, 0x44, 0x18, + 0xc5, 0x7c, 0xb7, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, + 0xb4, 0x28, 0x19, 0x40, 0x28, 0x1d, 0x10, 0x1e, 0x54, 0xff, 0x07, 0x38, + 0x0c, 0x06, 0x07, 0xa0, 0x20, 0x06, 0x17, 0x20, 0x05, 0x07, 0x07, 0x52, + 0xfd, 0x92, 0x80, 0x28, 0x17, 0x09, 0x10, 0xa8, 0x30, 0xb9, 0x30, 0xd4, + 0x00, 0x30, 0xea, 0x30, 0xc8, 0x30, 0xfb, 0x30, 0xb5, 0x30, 0x30, 0xf3, + 0x20, 0x07, 0x05, 0xdd, 0x3b, 0x45, 0x00, 0x73, 0x00, 0x50, 0x70, 0x2e, + 0x2f, 0x72, 0x2f, 0xb3, 0x74, 0x00, 0x6f, 0x00, 0x16, 0x20, 0x00, 0x53, + 0x2f, 0xc1, 0x6e, 0x40, 0x0b, 0x10, 0x15, 0x30, 0x7f, 0x23, 0x00, 0x57, + 0xc3, 0x57, 0xaf, 0x65, 0xae, 0x76, 0xcc, 0x10, 0x91, 0xfe, 0x56, 0x06, + 0x3b, 0x1d, 0x74, 0xc7, 0xa4, 0xc2, 0x00, 0x3c, 0xd5, 0xac, 0xb9, 0x2c, + 0xd2, 0xb0, 0xc0, 0x30, 0x2c, 0xd2, 0x06, 0x18, 0x1f, 0x0e, 0xf3, 0x7f, + 0x2d, 0x04, 0x41, 0x04, 0x10, 0x3f, 0x04, 0x38, 0x28, 0x19, 0x38, 0x04, + 0x42, 0x04, 0x11, 0x43, 0x04, 0x2d, 0x28, 0x29, 0x30, 0x04, 0x3d, 0x40, + 0x0b, 0x91, 0x10, 0x1d, 0x34, 0xff, 0x08, 0x08, 0x50, 0x01, 0x07, 0x08, + 0x1b, 0x40, 0x0a, 0x00, 0x8e, 0xf1, 0x4f, 0xe3, 0x00, 0x00, 0x0a, 0x10, + 0x11, 0xde, 0x30, 0xc3, 0x48, 0x13, 0xb0, 0x30, 0xed, 0x20, 0x09, 0x51, + 0xbd, 0x28, 0x1d, 0xc9, 0x28, 0x21, 0xb9, 0x30, 0xeb, 0x05, 0x68, 0x1f, + 0x6a, 0x4d, 0x2f, 0xad, 0x58, 0x0f, 0x47, 0x2f, 0xb5, 0x6f, 0x28, 0x25, + 0x73, 0xa2, 0x48, 0x1d, 0x64, 0x68, 0x23, 0x75, 0x00, 0x6c, 0x10, 0x14, + 0xc0, 0x7f, 0x57, 0x00, 0x53, 0x6c, 0x9a, 0x58, 0x62, 0x3c, 0x68, 0x57, + 0x14, 0x7f, 0x22, 0x7d, 0x06, 0x38, 0x17, 0xc8, 0x28, 0x11, 0xf8, 0xad, + 0x00, 0x5c, 0xb8, 0x18, 0xc2, 0x50, 0xb4, 0x20, 0xc2, 0xda, 0x06, 0x18, + 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x05, 0x58, 0x0f, 0x13, 0x28, 0x1b, + 0x3e, 0xd1, 0x28, 0x25, 0x38, 0x1b, 0x34, 0x68, 0x21, 0x43, 0x04, 0x3b, + 0x04, 0xe8, 0x1d, 0x80, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x0c, 0x0e, 0x0c, + 0x0c, 0x0c, 0x09, 0x60, 0x09, 0x20, 0x03, 0x20, 0x05, 0x09, 0x09, 0x76, + 0xf1, 0x2a, 0x08, 0xd9, 0x00, 0x00, 0x0b, 0x28, 0x17, 0xe9, 0x30, 0xcb, + 0x0d, 0x30, 0xe7, 0x30, 0xf3, 0x05, 0x68, 0x07, 0x00, 0x38, 0x17, 0x72, + 0x4f, 0xa1, 0x18, 0x68, 0x00, 0xe3, 0x05, 0x6f, 0xa3, 0x10, 0x0f, 0xb0, + 0x7f, 0x6c, 0x9a, 0xc9, 0x06, 0x62, 0x3c, 0x5c, 0x02, 0x66, 0x06, 0x52, + 0xfd, 0x38, 0x17, 0x7c, 0x1d, 0xb7, 0xe5, 0xb0, 0x06, 0x18, 0x0f, 0x0f, + 0x73, 0x7f, 0x38, 0x17, 0x40, 0x28, 0x1b, 0x06, 0x3d, 0x04, 0x4c, 0x04, + 0x4f, 0x20, 0x05, 0x10, 0x1d, 0xf4, 0xff, 0x0a, 0x0a, 0x0a, 0x0c, 0x0a, + 0x0a, 0x40, 0x01, 0x07, 0x40, 0x07, 0x36, 0x02, 0xfe, 0x86, 0xe0, 0x00, + 0x00, 0x0c, 0x28, 0x17, 0xc3, 0x00, 0x30, 0xc8, 0x30, 0xfb, 0x30, 0xb0, + 0x30, 0xed, 0xb8, 0x20, 0x09, 0xbd, 0x06, 0x08, 0x1d, 0x00, 0x5f, 0xaf, + 0x10, 0x15, 0x90, 0x7f, 0x6c, 0x9a, 0x58, 0x01, 0x62, 0x3c, 0x68, 0x57, + 0x7f, 0x22, 0x7d, 0x06, 0x5b, 0x17, 0x00, 0xc8, 0xb9, 0x2c, 0xd2, 0xf8, + 0xad, 0x5c, 0xb8, 0x38, 0x18, 0xc2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, + 0x38, 0x17, 0x42, 0x04, 0x43, 0x08, 0x04, 0x2d, 0x00, 0x13, 0x28, 0x1f, + 0x3e, 0x04, 0x41, 0xc1, 0x20, 0x0b, 0x10, 0x1d, 0xb4, 0xff, 0x0b, 0x0b, + 0x0d, 0x0b, 0x0b, 0x40, 0x01, 0x40, 0x08, 0x40, 0x07, 0xec, 0xf4, 0x1f, + 0xd8, 0x00, 0x00, 0x01, 0x0d, 0x10, 0xdf, 0x30, 0xca, 0x30, 0xb9, 0x28, + 0x17, 0x01, 0xb8, 0x30, 0xa7, 0x30, 0xe9, 0x30, 0xa4, 0x20, 0x0b, 0x8b, + 0x05, 0xdd, 0x39, 0x4d, 0x00, 0x69, 0x2f, 0xab, 0x61, 0x28, 0x0f, 0x38, + 0x19, 0x58, 0x65, 0x4f, 0xbb, 0x69, 0x28, 0x1d, 0x10, 0x15, 0x70, 0x7f, + 0x73, 0x7c, 0xb3, 0x00, 0x7e, 0xaf, 0x65, 0x09, 0x54, 0xc9, 0x62, 0xaf, + 0x41, 0x65, 0x06, 0x38, 0x19, 0xf8, 0xbb, 0x98, 0xb0, 0xa4, 0x28, 0x13, + 0x03, 0x1c, 0xc8, 0x7c, 0xb7, 0x74, 0xc7, 0x30, 0x09, 0x05, 0xd8, 0x1d, + 0x82, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x38, 0x04, 0x3d, 0x28, 0x1b, 0x41, + 0x88, 0x28, 0x19, 0x16, 0x04, 0x35, 0x28, 0x1b, 0x30, 0x04, 0x39, 0xc0, + 0x28, 0x1d, 0x10, 0x1d, 0x74, 0xff, 0x0c, 0x0d, 0x0f, 0x0d, 0x0d, 0x0d, + 0x04, 0x0c, 0x0c, 0x0d, 0x0d, 0x0a, 0x20, 0x05, 0x0c, 0x0c, 0x00, 0xd7, + 0xf1, 0xc3, 0xe0, 0x00, 0x00, 0x0e, 0x10, 0x5a, 0xd1, 0x28, 0x0d, 0xfc, + 0x05, 0xe8, 0x0b, 0xbf, 0xff, 0x50, 0x2f, 0xaf, 0x72, 0x30, 0x00, 0xe1, + 0x06, 0x70, 0x7e, 0x10, 0x0f, 0x00, 0x7f, 0x15, 0x5e, 0xc9, 0x62, 0xc6, + 0x06, 0x92, 0xfd, 0x23, 0x97, 0xd3, 0x7c, 0xb7, 0x05, 0xf8, 0x0b, 0x0f, + 0xb3, 0x7f, 0x1f, 0xe0, 0x28, 0x13, 0x38, 0x0b, 0x10, 0x1e, 0x74, 0xff, + 0x0d, 0x0e, 0x10, 0x0e, 0x0e, 0x02, 0x0e, 0x0d, 0x0d, 0x0e, 0x0e, 0x0b, + 0x20, 0x05, 0x0d, 0x00, 0x0d, 0xf9, 0xfe, 0x86, 0xdd, 0x00, 0x00, 0x0f, + 0xac, 0x48, 0x17, 0xa4, 0x28, 0x19, 0xd0, 0x06, 0x68, 0x1b, 0x58, 0x17, + 0x61, 0x00, 0x1c, 0xed, 0x00, 0x62, 0x2f, 0xb5, 0x10, 0x16, 0x10, 0x7f, + 0x38, 0x17, 0x0a, 0x4f, 0x30, 0xf4, 0x5d, 0x06, 0x7b, 0x19, 0x38, 0x17, + 0x74, 0xc7, 0x14, 0xbc, 0xe3, 0x06, 0x78, 0x1b, 0x0e, 0xf3, 0x7f, 0x78, + 0x17, 0x38, 0x04, 0x31, 0x06, 0x48, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x00, + 0x0e, 0x0f, 0x11, 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x10, 0x0f, 0x0f, 0x0c, + 0x20, 0x05, 0x0e, 0x0e, 0xf1, 0xfa, 0x05, 0x35, 0xe7, 0x00, 0x00, 0x10, + 0x48, 0x17, 0xca, 0x06, 0x68, 0x13, 0xb0, 0xb8, 0x17, 0x6e, 0x06, 0x6f, + 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x5d, 0xc9, 0x62, 0x33, 0xa3, 0x90, + 0x06, 0x92, 0xff, 0x38, 0x17, 0x98, 0xb0, 0x06, 0x78, 0x15, 0x0f, 0x13, + 0x7f, 0xb0, 0x78, 0x17, 0x3d, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x0f, 0x10, 0x12, 0x10, 0x01, 0x10, 0x10, 0x0f, 0x0f, 0x10, 0x10, 0x0d, + 0x20, 0x05, 0x00, 0x0f, 0x0f, 0xee, 0xed, 0xfb, 0xdc, 0x00, 0x00, 0x00, + 0x11, 0x10, 0xd4, 0x30, 0xa2, 0x30, 0xa6, 0x30, 0x11, 0xa4, 0x30, 0xfc, + 0x06, 0x68, 0x1b, 0x50, 0x00, 0x69, 0x2f, 0xb1, 0x70, 0x75, 0x2f, 0xaf, + 0x06, 0x78, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0xae, 0x76, 0x65, 0x59, 0x20, + 0x0a, 0x4f, 0x06, 0x9b, 0x17, 0x3c, 0xd5, 0x44, 0xc5, 0xb0, 0x18, 0xc6, + 0x74, 0xc7, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x38, 0xb8, + 0x28, 0x19, 0x43, 0x20, 0x05, 0x10, 0x16, 0x54, 0x7f, 0x06, 0xf6, 0xff, + 0x10, 0x12, 0x14, 0x22, 0x12, 0x12, 0x28, 0x1a, 0x12, 0x12, 0x0f, 0x38, + 0x20, 0x10, 0x10, 0x63, 0xfc, 0x8e, 0x2f, 0xa0, 0x12, 0x10, 0xea, 0x30, + 0x04, 0xaa, 0x30, 0xfb, 0x30, 0xc7, 0x20, 0x03, 0xb8, 0x30, 0x15, 0xe3, + 0x30, 0xcd, 0x28, 0x21, 0xed, 0x05, 0xc8, 0x21, 0x52, 0x28, 0x17, 0x01, + 0x6f, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x20, 0x05, 0x56, 0x4a, 0x4f, + 0xb9, 0x65, 0x28, 0x2b, 0x72, 0x20, 0x15, 0x05, 0x3f, 0xc0, 0xc9, 0x2f, + 0x00, 0x74, 0x2f, 0xb1, 0x74, 0x80, 0x81, 0x05, 0xf0, 0x8f, 0x06, 0xf0, + 0xff, 0x07, 0x10, 0x7f, 0x40, 0xed, 0x06, 0xc1, 0xff, 0xcc, 0x91, 0xa6, + 0x7e, 0xed, 0x70, 0x08, 0x85, 0x51, 0x62, 0x53, 0x06, 0x5b, 0x17, 0xac, + 0xb9, 0xb0, 0x00, 0xc6, 0x70, 0xb3, 0x90, 0xc7, 0x24, 0xb1, 0x74, 0x1a, + 0xc7, 0xe8, 0xb8, 0x06, 0x18, 0x1d, 0x0e, 0xf2, 0x7f, 0x20, 0x28, 0x17, + 0x3e, 0x02, 0x04, 0x2d, 0x00, 0x34, 0x04, 0x35, 0x20, 0x05, 0x16, 0xa3, + 0x28, 0x23, 0x3d, 0x20, 0x09, 0x39, 0x04, 0x40, 0x20, 0x15, 0x10, 0x05, + 0x31, 0x7f, 0x80, 0x10, 0x06, 0xf0, 0xff, 0x11, 0x13, 0x09, 0x13, 0x13, + 0x13, 0x11, 0x08, 0x11, 0x13, 0x13, 0x10, 0x20, 0x05, 0x11, 0x11, 0xb8, + 0x28, 0xef, 0x42, 0x28, 0x17, 0x13, 0x68, 0x17, 0xb0, 0x30, 0xe9, 0x28, + 0x30, 0xf3, 0x48, 0x1d, 0xc9, 0x28, 0x25, 0xce, 0x30, 0xeb, 0x37, 0x30, + 0xc6, 0x05, 0x68, 0x1d, 0x78, 0x17, 0x47, 0x28, 0x09, 0x38, 0x13, 0x58, + 0x1f, 0x55, 0x64, 0x48, 0x2b, 0x4e, 0x28, 0x31, 0x72, 0x27, 0xb7, 0x65, + 0x10, 0x14, 0xa0, 0x7f, 0x00, 0x17, 0x53, 0xcc, 0x91, 0x65, 0x59, 0x3c, + 0x68, 0x08, 0x70, 0x51, 0xb7, 0x5f, 0x06, 0x38, 0x19, 0x88, 0xd7, 0xb0, + 0x00, 0xc6, 0xf8, 0xad, 0x80, 0xb7, 0xc0, 0xc9, 0x50, 0x01, 0xb4, 0x78, + 0xb1, 0x74, 0xb9, 0x58, 0xce, 0x05, 0xd8, 0x1b, 0xd6, 0x0e, 0xf3, 0x7f, + 0x38, 0x17, 0x43, 0x28, 0x17, 0x13, 0x28, 0x09, 0x38, 0x13, 0x34, 0xe8, + 0x28, 0x27, 0x38, 0x25, 0x30, 0x13, 0x1d, 0x28, 0x31, 0x40, 0x04, 0x42, + 0xc0, 0x28, 0x39, 0x10, 0x1c, 0x94, 0xff, 0x12, 0x14, 0x15, 0x14, 0x14, + 0x14, 0x04, 0x12, 0x12, 0x14, 0x14, 0x11, 0x20, 0x05, 0x12, 0x12, 0x01, + 0xe4, 0xfb, 0xf6, 0xe6, 0x00, 0x00, 0x14, 0x00, 0x48, 0x17, 0x70, 0xb9, + 0x28, 0x17, 0x05, 0x7d, 0x3d, 0x00, 0xb8, 0x17, 0x53, 0x00, 0x75, 0x00, + 0x53, 0x6c, 0x10, 0x14, 0xe0, 0x7f, 0x57, 0x07, 0xa8, 0x17, 0x20, 0xc2, + 0x05, 0xd8, 0x13, 0x0f, 0x33, 0x7f, 0xac, 0x00, 0xb8, 0x17, 0x21, 0x28, + 0x31, 0x3b, 0x04, 0xa8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x13, 0x15, 0x00, + 0x16, 0x15, 0x15, 0x15, 0x13, 0x13, 0x15, 0x15, 0x40, 0x12, 0x20, 0x05, + 0x13, 0x13, 0xa5, 0xea, 0x98, 0xdb, 0x04, 0x00, 0x00, 0x15, 0x10, 0xed, + 0x28, 0x0f, 0xc9, 0x30, 0x1a, 0xcb, 0x30, 0xa2, 0x05, 0x88, 0x09, 0xff, + 0xaf, 0x6f, 0x4f, 0xa5, 0xf4, 0xb0, 0x2f, 0xab, 0x69, 0x2f, 0xb1, 0x10, + 0x15, 0xf0, 0x7f, 0x17, 0x67, 0x1a, 0x59, 0x08, 0x3c, 0x5c, 0x9a, 0x4e, + 0x06, 0x52, 0xfd, 0x00, 0x00, 0x3c, 0x01, 0xd6, 0xc4, 0xb3, 0xc8, 0xb2, + 0x44, 0xc5, 0x06, 0x18, 0x11, 0x8c, 0x0f, 0x53, 0x7f, 0x20, 0x04, 0x3e, + 0x48, 0x0d, 0x30, 0x05, 0x38, 0x04, 0x60, 0x4f, 0x04, 0xe8, 0x05, 0x10, + 0x18, 0x14, 0xff, 0x14, 0x16, 0x17, 0x16, 0x16, 0x02, 0x16, 0x14, 0x14, + 0x16, 0x16, 0x13, 0x20, 0x05, 0x14, 0x00, 0x14, 0xc5, 0xf9, 0x90, 0xd2, + 0x00, 0x00, 0x16, 0x83, 0x28, 0x17, 0xe9, 0x30, 0xa4, 0x30, 0xde, 0x06, + 0x68, 0x15, 0x58, 0x17, 0x8c, 0x3f, 0xa9, 0x69, 0x00, 0x6d, 0x06, 0x28, + 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x57, 0x7f, 0x08, 0x56, 0x8d, 0x6c, 0x9a, + 0x06, 0x78, 0x15, 0x00, 0x00, 0x38, 0x01, 0xd6, 0x7c, 0xb7, 0x74, 0xc7, + 0xc8, 0xb9, 0x06, 0xb8, 0x17, 0xc0, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x40, + 0x04, 0x30, 0x04, 0x39, 0x04, 0x60, 0x3c, 0x20, 0x05, 0x10, 0x1e, 0x14, + 0xff, 0x15, 0x17, 0x18, 0x17, 0x17, 0x02, 0x17, 0x15, 0x15, 0x17, 0x17, + 0x14, 0x20, 0x05, 0x15, 0x04, 0x15, 0x00, 0x02, 0xdc, 0xd4, 0x2d, 0x2d, + 0x10, 0xb5, 0x00, 0x30, 0xf3, 0x30, 0xbf, 0x30, 0xfb, 0x30, 0xab, 0x82, + 0x20, 0x05, 0xea, 0x30, 0xfc, 0x30, 0xca, 0x05, 0xe8, 0x21, 0x53, 0x88, + 0x2f, 0xa3, 0x6e, 0x00, 0x74, 0x2f, 0xa9, 0x20, 0x00, 0x43, 0xd6, 0x2f, + 0xaf, 0x30, 0x09, 0x72, 0x2f, 0xb9, 0x6e, 0x05, 0x6f, 0xbb, 0x10, 0x0e, + 0xf0, 0x7f, 0x23, 0x00, 0x57, 0x61, 0x53, 0x54, 0x58, 0x33, 0x74, 0x1c, + 0x40, 0x5a, 0x06, 0x5b, 0x19, 0xb0, 0xc0, 0xc0, 0xd0, 0x74, 0xce, 0x03, + 0xc0, 0xd0, 0xac, 0xb9, 0x98, 0xb0, 0x06, 0x38, 0x1b, 0x0e, 0xf3, 0x7f, + 0x44, 0x21, 0x28, 0x13, 0x3d, 0x04, 0x42, 0x28, 0x19, 0x2d, 0x00, 0x63, + 0x1a, 0x28, 0x1f, 0x30, 0x09, 0x40, 0x04, 0x38, 0x20, 0x13, 0x05, 0x58, + 0x25, 0x88, 0x10, 0x16, 0xf4, 0xff, 0x16, 0x18, 0x19, 0x20, 0x01, 0x16, + 0x16, 0x18, 0x20, 0x18, 0x16, 0x20, 0x05, 0x16, 0x16, 0x63, 0xec, 0x77, + 0x08, 0xdd, 0x00, 0x00, 0x18, 0x48, 0x17, 0xfb, 0x30, 0xd1, 0x0d, 0x30, + 0xa6, 0x30, 0xed, 0x05, 0xe8, 0x11, 0x78, 0x17, 0xe3, 0x2f, 0xb1, 0x11, + 0x20, 0x00, 0x50, 0x2f, 0xb3, 0x75, 0x00, 0x6c, 0x2f, 0xbd, 0xa8, 0x05, + 0xdf, 0xb4, 0xc9, 0x48, 0x93, 0x74, 0x28, 0x95, 0x64, 0x00, 0x65, 0xfb, + 0x28, 0x9b, 0x05, 0xf0, 0x8f, 0x06, 0xf0, 0xff, 0x59, 0x97, 0x51, 0x7f, + 0x6f, 0x06, 0x40, 0x7f, 0x06, 0xd1, 0xff, 0x03, 0x23, 0x57, 0xdd, 0x4f, + 0x57, 0x7f, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x00, 0xc1, 0xc0, 0x0c, 0xd3, + 0xb8, 0xc6, 0xe8, 0xb8, 0xf1, 0x06, 0x38, 0x13, 0x07, 0x52, 0x7f, 0x06, + 0xd3, 0xff, 0x58, 0x17, 0x2d, 0x00, 0x1f, 0x28, 0x1f, 0x1c, 0x43, 0x04, + 0x3b, 0x20, 0x03, 0x10, 0x05, 0xd1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x17, + 0x19, 0x41, 0x0a, 0x28, 0x18, 0x17, 0x17, 0x19, 0x19, 0x15, 0x20, 0x05, + 0x00, 0x17, 0x17, 0x44, 0xef, 0xda, 0xde, 0x00, 0x00, 0x00, 0x19, 0x10, + 0xbb, 0x30, 0xeb, 0x30, 0xb8, 0x30, 0x1a, 0xc3, 0x30, 0xda, 0x06, 0x48, + 0x15, 0x3f, 0xaf, 0x65, 0x2f, 0x9f, 0x67, 0xb0, 0x2f, 0xa1, 0x70, 0x27, + 0x97, 0x10, 0x16, 0x10, 0x7f, 0x5e, 0x58, 0x14, 0x5c, 0x08, 0x0c, 0x5e, + 0xf9, 0x57, 0x06, 0x78, 0x19, 0x38, 0xc1, 0x74, 0x06, 0xb9, 0xc0, 0xc9, + 0x3c, 0xd5, 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x21, 0x00, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x36, 0x04, 0x38, 0x31, 0x04, 0x3f, 0x20, 0x03, 0x10, + 0x1e, 0x14, 0xff, 0x18, 0x1a, 0x1a, 0x20, 0x01, 0x50, 0x18, 0x20, 0x06, + 0x18, 0x20, 0x05, 0x18, 0x18, 0x3d, 0xf8, 0x00, 0xa5, 0xe5, 0x00, 0x00, + 0x1a, 0x10, 0xb4, 0x30, 0x04, 0xa4, 0x30, 0xa2, 0x30, 0xb9, 0x06, 0x68, + 0x15, 0x00, 0x00, 0x41, 0x47, 0x2f, 0x9d, 0x69, 0x00, 0xe1, 0x00, 0x73, + 0x06, 0x6d, 0xb0, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x62, 0x9a, 0x4e, + 0xaf, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xe0, 0xac, 0x74, 0xc7, + 0x44, 0xc5, 0x30, 0xa4, 0xc2, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x13, + 0x04, 0x3e, 0x04, 0x18, 0x4f, 0x04, 0x41, 0x06, 0x28, 0x11, 0x10, 0x17, + 0x54, 0xff, 0x19, 0x09, 0x0b, 0x00, 0x09, 0x09, 0x09, 0x19, 0x19, 0x09, + 0x09, 0x06, 0x80, 0x20, 0x05, 0x19, 0x19, 0x26, 0xf4, 0xf8, 0xdc, 0x00, + 0x00, 0x00, 0x1b, 0x10, 0xda, 0x30, 0xeb, 0x30, 0xca, 0x02, 0x30, 0xf3, + 0x30, 0xd6, 0x30, 0xb3, 0x06, 0x48, 0x1b, 0x50, 0x80, 0x4f, 0xaf, 0x6e, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x62, 0x0d, 0x00, 0x75, 0x00, 0x63, 0x28, + 0x27, 0x06, 0x90, 0x7f, 0x6f, 0x40, 0x81, 0xc0, 0x0e, 0x90, 0xff, 0x0e, + 0x10, 0x7f, 0x2f, 0x4f, 0x57, 0x53, 0x03, 0x5e, 0x20, 0xe5, 0x54, 0x06, + 0x7b, 0x17, 0x98, 0xd3, 0x74, 0xb9, 0xa8, 0x06, 0xb0, 0x80, 0xbd, 0xe0, + 0xcf, 0x06, 0x58, 0x19, 0x0e, 0xf2, 0x7f, 0x1f, 0x00, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x3d, 0x04, 0x30, 0x00, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x43, + 0x04, 0x3a, 0xe0, 0x20, 0x03, 0x10, 0x0d, 0xb3, 0xff, 0x0e, 0xf5, 0x7f, + 0x1a, 0x11, 0x13, 0x11, 0x11, 0x02, 0x11, 0x1a, 0x1a, 0x11, 0x11, 0x0e, + 0x20, 0x05, 0x1a, 0x00, 0x1a, 0x47, 0xfa, 0x2f, 0xe7, 0x00, 0x00, 0x1c, + 0x08, 0x10, 0xc8, 0x30, 0xab, 0x28, 0x15, 0xc6, 0x30, 0xa3, 0xaa, 0x28, + 0x1b, 0xb9, 0x06, 0x28, 0x19, 0x54, 0x2f, 0xaf, 0x63, 0x28, 0x15, 0x6e, + 0x2c, 0x00, 0x74, 0x2f, 0xb7, 0x6e, 0x06, 0x0f, 0xb7, 0x10, 0x0e, 0xf0, + 0x7f, 0x58, 0x62, 0x02, 0x4e, 0x57, 0xf7, 0x5e, 0xaf, 0x65, 0x06, 0x78, + 0x17, 0xa0, 0x01, 0xd1, 0x78, 0xce, 0x6d, 0xce, 0xa4, 0xc2, 0x06, 0x58, + 0x15, 0x8a, 0x0f, 0x13, 0x7f, 0x22, 0x04, 0x3e, 0x28, 0x0b, 0x30, 0x28, + 0x19, 0x42, 0x2c, 0x04, 0x38, 0x28, 0x1f, 0x41, 0x05, 0xc8, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x1b, 0x1b, 0xa1, 0x70, 0x01, 0x19, 0x40, 0x0a, 0xbc, + 0xf8, 0xac, 0xdd, 0x00, 0x3f, 0xff, 0x10, 0x01, 0x07, 0x07, 0x20, 0x01, + 0x01, 0x01, 0x08, 0x07, 0x44, 0x1a, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, + 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, + 0x04, 0x02, 0x41, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, + 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x05, + 0x94, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x03, 0x20, 0x05, 0x05, 0x05, + 0x48, 0x06, 0x30, 0x04, 0x05, 0x06, 0x40, 0x06, 0x06, 0x06, 0x06, 0x25, + 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x17, 0x20, 0x05, 0x08, + 0x07, 0x07, 0x08, 0x08, 0x50, 0x01, 0x07, 0x08, 0x1b, 0x80, 0x40, 0x0a, + 0x09, 0x0c, 0x0e, 0x0c, 0x0c, 0x0c, 0x09, 0x60, 0x09, 0x20, 0x03, 0x20, + 0x05, 0x09, 0x09, 0x0a, 0x0a, 0x0c, 0x28, 0x0a, 0x0a, 0x40, 0x01, 0x07, + 0x40, 0x07, 0x0b, 0x0b, 0x0d, 0x28, 0x0b, 0x0b, 0x40, 0x01, 0x08, 0x40, + 0x07, 0x0c, 0x0d, 0x0f, 0x00, 0x0d, 0x0d, 0x0d, 0x0c, 0x0c, 0x0d, 0x0d, + 0x0a, 0xc0, 0x20, 0x05, 0x20, 0x07, 0x0e, 0x10, 0x0e, 0x0e, 0x0e, 0x0d, + 0x0c, 0x0d, 0x0e, 0x0e, 0x0b, 0x20, 0x05, 0x20, 0x07, 0x0f, 0x11, 0x00, + 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x0f, 0x0f, 0x0c, 0xc0, 0x20, 0x05, 0x20, + 0x07, 0x10, 0x12, 0x10, 0x10, 0x10, 0x0f, 0x0c, 0x0f, 0x10, 0x10, 0x0d, + 0x20, 0x05, 0x20, 0x07, 0x12, 0x14, 0x22, 0x12, 0x12, 0x20, 0x12, 0x12, + 0x12, 0x0f, 0x30, 0x18, 0x10, 0x04, 0x11, 0x13, 0x09, 0x13, 0x13, 0x29, + 0x42, 0x13, 0x13, 0x40, 0x10, 0x39, 0x48, 0x11, 0x12, 0x14, 0x15, 0x14, + 0x14, 0x88, 0x20, 0x22, 0x14, 0x14, 0x11, 0x30, 0x28, 0x12, 0x13, 0x15, + 0x00, 0x16, 0x15, 0x15, 0x15, 0x13, 0x13, 0x15, 0x15, 0x40, 0x12, 0x20, + 0x05, 0x13, 0x13, 0x14, 0x16, 0x17, 0x16, 0x01, 0x16, 0x16, 0x14, 0x14, + 0x16, 0x16, 0x13, 0x20, 0x05, 0x00, 0x14, 0x14, 0x15, 0x17, 0x18, 0x17, + 0x17, 0x17, 0x04, 0x15, 0x15, 0x17, 0x17, 0x14, 0x20, 0x05, 0x15, 0x15, + 0x10, 0x16, 0x18, 0x19, 0x20, 0x01, 0x16, 0x16, 0x18, 0x18, 0x41, 0x16, + 0x20, 0x05, 0x16, 0x16, 0x17, 0x19, 0x0a, 0x20, 0x10, 0x04, 0x17, 0x17, + 0x19, 0x19, 0x15, 0x20, 0x05, 0x17, 0x17, 0x4a, 0x18, 0x39, 0xa4, 0x1a, + 0x18, 0x20, 0x06, 0x18, 0x20, 0x05, 0x18, 0x08, 0x18, 0x19, 0x09, 0x0b, + 0x20, 0xf6, 0x19, 0x19, 0x09, 0x27, 0x09, 0x06, 0x20, 0x05, 0x19, 0x19, + 0xf9, 0xcf, 0xf1, 0xc7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x3c, 0x72, 0x00, + 0x11, 0x0d, 0x00, 0x00, 0x30, 0x01, 0xae, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x85, 0x11, 0x42, + 0x21, 0x00, 0x00, 0x00, 0x02, 0xae, 0xea, 0x30, 0xe4, 0x30, 0xc9, 0x10, + 0x30, 0xde, 0x5d, 0x06, 0x78, 0x1d, 0x41, 0x00, 0x72, 0x00, 0x00, 0x20, + 0x00, 0x52, 0x00, 0x69, 0x00, 0x79, 0x00, 0x1f, 0x61, 0x00, 0x64, 0x06, + 0x08, 0xa4, 0x06, 0x90, 0x79, 0x90, 0x7f, 0x06, 0x90, 0x7d, 0x31, 0x7f, + 0x18, 0x6c, 0x00, 0x2d, 0x06, 0xe1, 0x7f, 0x06, 0xb0, 0xff, 0x29, 0x52, + 0xc5, 0x01, 0x96, 0x97, 0x5f, 0x30, 0x57, 0x3a, 0x53, 0x06, 0x5b, 0x1f, + 0x00, 0xac, 0xb9, 0x7c, 0xc5, 0xdc, 0xb4, 0x20, 0x00, 0x30, 0xfc, 0xc8, + 0x0e, 0x93, 0x7f, 0x06, 0xb2, 0xff, 0x2d, 0x04, 0x40, 0x04, 0x00, 0x2d, + 0x00, 0x20, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x30, 0x34, 0x04, 0x0e, 0x14, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x07, 0x0c, 0x0c, 0x00, 0x06, 0x0c, + 0x01, 0x01, 0x05, 0x0c, 0x0c, 0x07, 0x08, 0x01, 0x01, 0x01, 0x01, 0x58, + 0x17, 0x03, 0xae, 0xd0, 0x0a, 0x30, 0xfc, 0x30, 0xcf, 0x06, 0xc8, 0x17, + 0x6c, 0x28, 0x17, 0x42, 0xb7, 0x28, 0x13, 0x68, 0x40, 0x03, 0x06, 0x70, + 0x7f, 0xe2, 0x06, 0x60, 0x7f, 0x70, 0xf9, 0x06, 0xd8, 0x17, 0xc2, 0x07, + 0x11, 0x7f, 0x06, 0x71, 0xff, 0xf4, 0x5d, 0xc8, 0x54, 0x06, 0x98, 0x15, + 0x00, 0x01, 0x00, 0x4c, 0xc5, 0x14, 0xbc, 0x58, 0xd5, 0x06, 0xb8, 0x17, + 0xc1, 0x06, 0xd3, 0x7f, 0x06, 0xf2, 0xff, 0x2d, 0x04, 0x3b, 0x04, 0x4c, + 0x28, 0x19, 0x07, 0x11, 0x04, 0x30, 0x04, 0x45, 0x20, 0x03, 0x0e, 0x74, + 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x02, 0x02, 0x02, 0x01, 0x04, 0x02, 0x01, + 0x30, 0x05, 0x07, 0x20, 0x02, 0x02, 0x20, 0x01, 0x3b, 0x0e, 0x7c, 0x1d, + 0x00, 0x00, 0x00, 0x04, 0xae, 0xe1, 0x30, 0xc7, 0x30, 0xa3, 0x34, 0x30, + 0xca, 0x06, 0x88, 0x19, 0x58, 0x17, 0x4d, 0x4f, 0xb1, 0x69, 0x00, 0x45, + 0x6e, 0x06, 0x08, 0x1b, 0x4d, 0x00, 0xe9, 0x60, 0x79, 0x65, 0x06, 0x4f, + 0xb3, 0x70, 0x4d, 0x20, 0x77, 0x70, 0xf9, 0x10, 0x06, 0x30, 0x7f, 0xa6, + 0x9e, 0x30, 0x57, 0x20, 0xa3, 0x90, 0x06, 0x98, 0x19, 0x54, 0xba, 0x14, + 0xb5, 0x98, 0x74, 0xb0, 0x06, 0x98, 0x17, 0x0e, 0xf2, 0x7f, 0x78, 0x17, + 0x1c, 0x28, 0x17, 0x34, 0x04, 0x1c, 0x38, 0x04, 0x3d, 0x05, 0xe8, 0x1b, + 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x05, 0x00, 0x09, 0x08, + 0x0b, 0x09, 0x03, 0x03, 0x0a, 0x09, 0x00, 0x0a, 0x05, 0x03, 0x03, 0x03, + 0x03, 0x20, 0x11, 0x00, 0x0e, 0x1b, 0x00, 0x00, 0x05, 0xae, 0x71, 0x67, + 0x34, 0xe8, 0x90, 0x06, 0x78, 0x13, 0x5f, 0xaf, 0x73, 0x2f, 0xa9, 0x20, + 0x00, 0x45, 0x53, 0x4f, 0xaf, 0x72, 0x00, 0x71, 0x28, 0x1d, 0x79, 0x05, + 0xaf, 0xb9, 0x45, 0x50, 0x20, 0x73, 0x6f, 0x00, 0x76, 0x48, 0x93, 0x63, + 0x28, 0x1b, 0x15, 0x20, 0x00, 0x45, 0x20, 0x91, 0x74, 0x05, 0xc0, 0xff, + 0x63, 0x2f, 0xab, 0x7f, 0x2d, 0x21, 0x01, 0x30, 0x07, 0x91, 0x03, 0x31, + 0x05, 0x05, 0x71, 0x7f, 0x30, 0x7d, 0x06, 0x51, 0x7f, 0x54, 0x52, 0x29, + 0x8f, 0x67, 0x2a, 0x11, 0xf3, 0x2a, 0x13, 0x20, 0x00, 0x55, 0x4f, 0x22, + 0x01, 0x69, 0x29, 0xa1, 0x6e, 0x21, 0x81, 0x61, 0x2e, 0xc9, 0x88, 0x05, + 0x1f, 0xc5, 0x1c, 0x4e, 0xe8, 0x06, 0xa8, 0x15, 0x00, 0x00, 0xe4, 0x01, + 0xc0, 0x74, 0xb9, 0xa4, 0xd0, 0x7c, 0xc5, 0x06, 0x78, 0x19, 0xc5, 0x06, + 0xf3, 0x7f, 0x06, 0xf3, 0xff, 0x2d, 0x04, 0x48, 0x28, 0x15, 0x28, 0x28, + 0x15, 0x11, 0x40, 0x04, 0x3a, 0x28, 0x17, 0x39, 0x04, 0x4f, 0x05, 0xe8, + 0x17, 0xc0, 0x0e, 0xd1, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x04, 0x08, 0x0b, + 0x02, 0x07, 0x0b, 0x00, 0x04, 0x04, 0x06, 0x02, 0x0d, 0x08, 0x04, 0x04, + 0x00, 0x04, 0x04, 0xca, 0x12, 0xa3, 0x23, 0x00, 0x00, 0x00, 0x06, 0xae, + 0xab, 0x30, 0xb9, 0x30, 0xa3, 0x30, 0x0d, 0xfc, 0x30, 0xe0, 0x30, 0x06, + 0x58, 0x1d, 0x5b, 0x2f, 0x51, 0x2f, 0x2d, 0x5d, 0x73, 0x2f, 0xb5, 0x6d, + 0x0e, 0x00, 0x7f, 0x06, 0x90, 0xf9, 0x9c, 0xaf, 0x2d, 0x0e, 0xa1, 0x7f, + 0x02, 0x61, 0x53, 0x7f, 0x89, 0xc6, 0x59, 0x06, 0x98, 0x19, 0x74, 0x18, + 0xce, 0xec, 0xc2, 0x06, 0x78, 0x13, 0x0f, 0x32, 0xff, 0x2d, 0x04, 0x3b, + 0x2a, 0x04, 0x4c, 0x28, 0x19, 0x1a, 0x28, 0x19, 0x41, 0x28, 0x17, 0x3c, + 0xe0, 0x05, 0xc8, 0x15, 0x0f, 0x14, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x05, + 0x06, 0x03, 0x0b, 0x05, 0x00, 0x03, 0x05, 0x05, 0x04, 0x0b, 0x09, 0x06, + 0x05, 0x00, 0x05, 0x05, 0x05, 0xb9, 0x12, 0x44, 0x1f, 0x00, 0x02, 0x00, + 0x07, 0xae, 0xa2, 0x30, 0xb7, 0x28, 0x15, 0xeb, 0x8b, 0x06, 0x68, 0x15, + 0x00, 0x00, 0x27, 0x4f, 0x31, 0x69, 0x2f, 0xb5, 0x06, 0x77, 0x17, 0x78, + 0x73, 0x07, 0x00, 0x7f, 0x06, 0x90, 0xfd, 0x07, 0x51, 0x7f, 0x06, 0xb0, + 0xff, 0x3f, 0x96, 0x7f, 0x10, 0x89, 0x14, 0x5c, 0x06, 0x98, 0x17, 0x44, + 0xc5, 0xdc, 0xc2, 0x3a, 0x74, 0xb9, 0x06, 0x98, 0x19, 0x06, 0xf2, 0x7f, + 0x06, 0xf3, 0x7f, 0x10, 0x48, 0x0d, 0x40, 0xe0, 0x05, 0xe8, 0x0d, 0x07, + 0x94, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, 0x01, 0x04, 0x03, 0x01, 0x00, + 0x04, 0x06, 0x06, 0x07, 0x03, 0x01, 0x01, 0x06, 0x00, 0x06, 0x06, 0x06, + 0xf4, 0x0c, 0x39, 0x1e, 0x00, 0x0a, 0x00, 0x08, 0xae, 0xcf, 0x28, 0x15, + 0xa4, 0x06, 0xa8, 0x17, 0x48, 0xad, 0x2f, 0xa9, 0x27, 0x2f, 0xa9, 0x6c, + 0x06, 0x6f, 0x2f, 0x30, 0x7f, 0xef, 0x06, 0x80, 0x7d, 0xf0, 0x50, 0xff, + 0x06, 0x90, 0xfd, 0x07, 0x51, 0x7f, 0x06, 0xb0, 0xff, 0xc8, 0x54, 0x0a, + 0x4f, 0x21, 0xd2, 0x52, 0x06, 0x98, 0x17, 0x58, 0xd5, 0x7c, 0xc7, 0x06, + 0x98, 0x15, 0x80, 0x0f, 0x11, 0xff, 0x25, 0x04, 0x30, 0x04, 0x19, 0x20, + 0x38, 0x0e, 0x04, 0x3b, 0x04, 0x4c, 0x06, 0x48, 0x1b, 0x07, 0x34, 0xff, + 0x10, 0x0e, 0xb0, 0x7f, 0x07, 0x02, 0x09, 0x06, 0x07, 0x08, 0x06, 0x07, + 0x20, 0x03, 0x06, 0x00, 0x09, 0x07, 0x07, 0x07, 0x07, 0x6f, 0x13, 0x95, + 0x00, 0x1d, 0x00, 0x00, 0x09, 0xae, 0xe1, 0x30, 0xc3, 0x22, 0x30, 0xab, + 0x06, 0x88, 0x15, 0x00, 0x00, 0x4d, 0x28, 0x17, 0x6b, 0x8a, 0x20, 0x01, + 0x61, 0x00, 0x68, 0x06, 0x4f, 0xb1, 0x4c, 0x28, 0x97, 0x20, 0x80, 0x20, + 0x85, 0x65, 0x00, 0x63, 0x00, 0x71, 0x00, 0x75, 0xdd, 0x20, 0x07, 0x05, + 0xf0, 0xff, 0x65, 0x60, 0xff, 0x06, 0x71, 0x7f, 0x30, 0xf9, 0x63, 0x06, + 0x80, 0x7f, 0xc4, 0xb1, 0x7f, 0x06, 0x31, 0x03, 0xa6, 0x9e, 0xa0, 0x06, + 0xa8, 0x15, 0x00, 0x00, 0x0c, 0x54, 0xba, 0x74, 0xce, 0x06, 0xb8, 0x17, + 0x0e, 0xf2, 0x7f, 0x1c, 0x04, 0x17, 0x35, 0x04, 0x3a, 0x20, 0x01, 0x30, + 0x06, 0x48, 0x15, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x08, + 0x0b, 0x08, 0x09, 0x0a, 0x08, 0x08, 0x20, 0x06, 0x20, 0x03, 0x0b, 0x20, + 0x06, 0x08, 0x3c, 0x0f, 0x52, 0x1c, 0x00, 0x00, 0x00, 0x0a, 0xae, 0x17, + 0x53, 0xe8, 0x90, 0x0a, 0xfd, 0x56, 0x83, 0x58, 0x06, 0x78, 0x19, 0x41, + 0x2f, 0xab, 0x20, 0x8a, 0x2f, 0xb5, 0x75, 0x00, 0x64, 0x40, 0x03, 0x20, + 0x2f, 0xbf, 0x73, 0x88, 0x28, 0x23, 0x20, 0x00, 0x53, 0x28, 0x29, 0x61, + 0x00, 0x6d, 0xa8, 0x2f, 0xcf, 0x6c, 0x2f, 0x51, 0x79, 0x04, 0x68, 0x39, + 0x46, 0x00, 0x72, 0x02, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x2f, 0xb5, + 0xe8, 0xab, 0x20, 0x0b, 0x65, 0x28, 0x25, 0x4e, 0x20, 0x11, 0x72, 0x20, + 0x8f, 0x05, 0x70, 0xff, 0x57, 0x2d, 0x00, 0x00, 0xff, 0x63, 0x29, 0x25, + 0x2d, 0x60, 0x07, 0xb1, 0x03, 0x31, 0x05, 0xef, 0x05, 0x30, 0x7f, 0x30, + 0x7d, 0x05, 0xf1, 0x7f, 0x65, 0x21, 0x89, 0x39, 0xa3, 0x51, 0x7d, 0x30, + 0x0f, 0xc2, 0x05, 0x3f, 0xc1, 0x32, 0xff, 0xb9, 0x8f, 0x86, 0x75, 0x06, + 0x78, 0x1b, 0x81, 0x00, 0xbd, 0x80, 0xbd, 0x20, 0x00, 0x6d, 0xad, 0xbd, + 0x6c, 0xac, 0x06, 0x58, 0x1d, 0x07, 0x93, 0x7f, 0x65, 0x2f, 0x35, 0x06, + 0x12, 0x01, 0x2d, 0x04, 0x00, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x25, + 0x04, 0x19, 0x43, 0x04, 0x34, 0x40, 0x03, 0x2c, 0x25, 0x04, 0x48, 0x20, + 0x11, 0x50, 0x28, 0x28, 0x2b, 0x3c, 0x28, 0x2f, 0x3b, 0x04, 0x38, 0x04, + 0x1c, 0x39, 0x04, 0x4f, 0x04, 0x68, 0x37, 0x06, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x09, 0x03, 0x00, 0x05, 0x01, 0x03, 0x05, 0x09, 0x09, 0x02, + 0x05, 0x00, 0x0b, 0x03, 0x09, 0x09, 0x09, 0x09, 0x08, 0x16, 0x00, 0x2b, + 0x1d, 0x00, 0x00, 0x0b, 0xae, 0xca, 0x30, 0x00, 0xb8, 0x30, 0xe5, 0x30, + 0xe9, 0x30, 0xfc, 0x30, 0x2a, 0xf3, 0x30, 0x06, 0x38, 0x1b, 0x4e, 0x2f, + 0xaf, 0x6a, 0x46, 0x11, 0x6e, 0xdc, 0x06, 0x4f, 0x31, 0x07, 0x30, 0x7f, + 0x64, 0x68, 0x09, 0x06, 0x31, 0x05, 0x0e, 0xf1, 0x7f, 0xb3, 0x7e, 0x08, + 0x63, 0x5b, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, 0x00, 0x98, 0x06, 0xb0, + 0xc0, 0xc9, 0x80, 0xb7, 0x06, 0x58, 0x13, 0x0f, 0x33, 0x7f, 0x1d, 0x82, + 0x27, 0xfd, 0x34, 0x04, 0x36, 0x04, 0x40, 0x28, 0x05, 0x3d, 0xe3, 0x04, + 0x67, 0xfb, 0x10, 0x00, 0xf4, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x0a, 0x0c, + 0x0a, 0x30, 0x02, 0x20, 0x06, 0x40, 0x04, 0x30, 0x06, 0x0a, 0x72, 0x0c, + 0x6b, 0x1f, 0x00, 0x0a, 0x00, 0x0c, 0xae, 0xb8, 0x28, 0x11, 0xb6, 0x06, + 0x88, 0x15, 0x00, 0x2d, 0x00, 0x4a, 0x2f, 0xa7, 0x7a, 0x06, 0x88, 0x15, + 0x07, 0x10, 0x7f, 0x44, 0x68, 0x13, 0x61, 0x61, 0x06, 0x61, 0x07, 0x0e, + 0xf1, 0x7f, 0x09, 0x54, 0x5e, 0x8d, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, + 0xc0, 0xc9, 0x94, 0xc7, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x47, 0x14, + 0x28, 0x13, 0x38, 0x04, 0x37, 0x06, 0x68, 0x15, 0x0f, 0x14, 0xff, 0x10, + 0x06, 0xf0, 0xff, 0x00, 0x0b, 0x0a, 0x07, 0x05, 0x09, 0x07, 0x0b, 0x0b, + 0x00, 0x09, 0x07, 0x02, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x02, 0x0c, + 0x42, 0x1e, 0x00, 0x00, 0x0d, 0xae, 0x14, 0xbf, 0x30, 0xd6, 0x28, 0x19, + 0xaf, 0x06, 0x68, 0x15, 0x00, 0x00, 0x41, 0x54, 0x2f, 0xaf, 0x62, 0x00, + 0x75, 0x00, 0x6b, 0x06, 0x68, 0x17, 0xb8, 0x50, 0x7f, 0x6f, 0x06, 0x80, + 0x81, 0x07, 0x50, 0xff, 0x0e, 0xa0, 0x7f, 0x58, 0x03, 0x5e, 0x20, 0x4b, + 0x51, 0x06, 0x98, 0x19, 0xc0, 0xd0, 0x80, 0xbd, 0x6c, 0x68, 0xd0, 0x06, + 0x98, 0x19, 0x0e, 0xf2, 0x7f, 0x22, 0x28, 0x11, 0x31, 0x04, 0x43, 0x38, + 0x04, 0x3a, 0x06, 0x48, 0x15, 0x10, 0x07, 0x23, 0xff, 0x0e, 0xe5, 0x7f, + 0x0c, 0x0d, 0x0d, 0xa8, 0x20, 0x01, 0x0c, 0x20, 0x06, 0x05, 0x20, 0x05, + 0x0c, 0x0c, 0x2f, 0x00, 0x14, 0x03, 0x1a, 0x00, 0x00, 0x0e, 0xae, 0xb8, + 0x02, 0x30, 0xe3, 0x30, 0xa6, 0x30, 0xd5, 0x06, 0x88, 0x17, 0x41, 0x08, + 0x00, 0x6c, 0x00, 0x20, 0x2f, 0xb5, 0x61, 0x00, 0x77, 0x20, 0x00, 0x66, + 0x06, 0x80, 0x7f, 0x44, 0x00, 0x6a, 0x00, 0xf4, 0x80, 0x06, 0x40, 0x7f, + 0x44, 0x00, 0x73, 0x00, 0x63, 0x00, 0x68, 0xab, 0x2f, 0xb1, 0x75, 0x06, + 0x80, 0xff, 0x2d, 0x07, 0x01, 0x7f, 0x4a, 0x49, 0x99, 0x06, 0x31, 0xff, + 0x08, 0x31, 0x67, 0x2b, 0x59, 0x06, 0x98, 0x15, 0x00, 0x00, 0x90, 0x07, + 0xc7, 0xb0, 0xc6, 0x04, 0xd5, 0x06, 0x98, 0x17, 0x07, 0x53, 0x7f, 0x06, + 0x91, 0xff, 0x00, 0x2d, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x11, + 0x14, 0x04, 0x36, 0x28, 0x21, 0x43, 0x04, 0x44, 0x05, 0xe8, 0x1f, 0xc0, + 0x07, 0x71, 0x7f, 0x10, 0x0e, 0x70, 0x7f, 0x0d, 0x04, 0x02, 0x06, 0x04, + 0x02, 0x02, 0x0d, 0x0d, 0x03, 0x01, 0x08, 0x04, 0x38, 0x22, 0x32, 0x10, + 0x15, 0x59, 0x1c, 0x00, 0x3f, 0xff, 0x01, 0x07, 0x0c, 0x0c, 0x00, 0x06, + 0x0c, 0x01, 0x01, 0x05, 0x0c, 0x0c, 0x07, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x01, 0x04, 0x44, 0x02, 0x40, 0x05, 0x07, 0x02, 0x02, 0x20, + 0x01, 0x03, 0x05, 0x00, 0x09, 0x08, 0x0b, 0x09, 0x03, 0x03, 0x0a, 0x09, + 0x00, 0x0a, 0x05, 0x03, 0x03, 0x03, 0x03, 0x04, 0x08, 0x00, 0x0b, 0x02, + 0x07, 0x0b, 0x04, 0x04, 0x06, 0x02, 0x00, 0x0d, 0x08, 0x04, 0x04, 0x04, + 0x04, 0x05, 0x06, 0x00, 0x03, 0x0b, 0x05, 0x03, 0x05, 0x05, 0x04, 0x0b, + 0x00, 0x09, 0x06, 0x05, 0x05, 0x05, 0x05, 0x06, 0x01, 0x00, 0x04, 0x03, + 0x01, 0x04, 0x06, 0x06, 0x07, 0x03, 0x08, 0x01, 0x01, 0x06, 0x06, 0x20, + 0x07, 0x09, 0x06, 0x07, 0x10, 0x08, 0x06, 0x07, 0x20, 0x03, 0x06, 0x09, + 0x07, 0x07, 0x81, 0x20, 0x07, 0x0b, 0x08, 0x09, 0x0a, 0x08, 0x08, 0x20, + 0x06, 0x20, 0x03, 0x0b, 0x20, 0x06, 0x08, 0x09, 0x03, 0x05, 0x01, 0x80, + 0x20, 0x63, 0x09, 0x02, 0x05, 0x0b, 0x03, 0x09, 0x09, 0x06, 0x09, 0x09, + 0x0a, 0x0c, 0x0a, 0x30, 0x02, 0x20, 0x06, 0x04, 0x80, 0x30, 0x06, 0x0a, + 0x0b, 0x0a, 0x07, 0x05, 0x09, 0x07, 0x00, 0x0b, 0x0b, 0x09, 0x07, 0x02, + 0x0a, 0x0b, 0x0b, 0x38, 0x0b, 0x0b, 0xf8, 0xef, 0xf0, 0xe7, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x11, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x18, 0x0d, 0x0d, + 0xd2, 0x00, 0x00, 0x00, 0x01, 0x11, 0xf1, 0x82, 0x18, 0x98, 0xf4, 0x00, + 0x30, 0xa1, 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xf3, 0x04, 0x30, 0xf8, 0x8a, + 0xf6, 0x5c, 0x05, 0xd8, 0x27, 0x42, 0x00, 0x04, 0x72, 0x00, 0x69, 0x00, + 0x74, 0x20, 0x03, 0x73, 0x00, 0x04, 0x68, 0x00, 0x20, 0x00, 0x56, 0x20, + 0x0d, 0x72, 0x00, 0x54, 0x67, 0x20, 0x13, 0x6e, 0x20, 0x0d, 0x49, 0x20, + 0x15, 0x6c, 0x00, 0x5a, 0x61, 0x20, 0x0b, 0x64, 0x20, 0x1f, 0x04, 0x38, + 0xc1, 0xce, 0x20, 0x5f, 0x65, 0xdb, 0x20, 0x7b, 0x50, 0x79, 0x65, 0x40, + 0x7b, 0x50, 0x0f, 0x62, 0x60, 0x99, 0x30, 0x7d, 0x46, 0x6e, 0x20, 0xa3, + 0x71, 0x00, 0x75, 0x40, 0x29, 0x04, 0x90, 0xff, 0x63, 0xaa, 0x21, 0x01, + 0x65, 0x21, 0x03, 0x4a, 0x20, 0x69, 0x6e, 0x21, 0x03, 0x66, 0xd5, 0x40, + 0x8f, 0x30, 0x7b, 0x6e, 0x21, 0x1d, 0x65, 0x21, 0x09, 0x6e, 0x04, 0x09, + 0xc4, 0xbd, 0x31, 0x61, 0x6f, 0x41, 0x03, 0x31, 0x7b, 0x50, 0xff, 0x31, + 0x7b, 0x69, 0x21, 0x8b, 0xfd, 0x71, 0x9b, 0x71, 0x01, 0x50, 0x9f, 0x04, + 0x10, 0x7f, 0x31, 0xe1, 0x51, 0x81, 0xed, 0x61, 0x7f, 0x6e, 0x6e, 0x61, + 0x93, 0x72, 0x1d, 0xe1, 0x60, 0x7f, 0x30, 0x27, 0x03, 0xda, 0xc7, 0xf1, + 0x00, 0x82, 0x5e, 0x5c, 0xf4, 0x7e, 0x14, 0x5c, 0xac, 0x0c, 0x4e, 0xa4, + 0x7f, 0x9b, 0x05, 0xe2, 0xfb, 0x3b, 0x9a, 0x01, 0xc6, 0x00, 0x6d, 0xad, + 0x39, 0xb8, 0x20, 0x00, 0x84, 0xbc, 0x00, 0xc4, 0xc9, 0x44, 0xc5, 0x7c, + 0xc7, 0x9c, 0xb7, 0x31, 0xdc, 0xb4, 0x06, 0x33, 0x7f, 0x32, 0x5f, 0x20, + 0x00, 0x4d, 0x23, 0x6b, 0x57, 0x61, 0x23, 0x7d, 0x64, 0x61, 0x83, 0x69, + 0x83, 0x7d, 0x31, 0x93, 0x04, 0x3c, 0x41, 0x5e, 0x49, 0x23, 0xdf, 0x68, + 0x81, 0xff, 0x53, 0xfb, 0x31, 0xff, 0xb1, 0xfd, 0xe2, 0xc0, 0x04, 0x81, + 0xfd, 0x2d, 0x18, 0x04, 0x40, 0x04, 0x38, 0x04, 0x42, 0x00, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x41, 0x04, 0x3a, 0x82, 0x20, 0x0b, 0x35, 0x04, 0x20, + 0x00, 0x12, 0x20, 0x13, 0x40, 0x35, 0x04, 0x33, 0x20, 0x19, 0xb0, 0x15, + 0x3e, 0x20, 0x21, 0x42, 0x20, 0x2f, 0x1c, 0x3e, 0x04, 0x32, 0x20, 0x2f, + 0x0b, 0x54, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0xf0, 0xd0, 0x01, + 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0xba, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xfe, 0x16, 0xf5, 0xd1, 0x00, 0x00, 0x00, + 0x01, 0xba, 0xd0, 0x30, 0xfc, 0x30, 0xdf, 0x24, 0x30, 0xe5, 0x20, 0x05, + 0xc0, 0x30, 0x06, 0x38, 0x21, 0x42, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x11, 0x64, 0x00, 0x61, 0x06, 0xe0, 0x7f, 0x65, + 0x00, 0x73, 0x0e, 0xe0, 0xff, 0xc0, 0x06, 0xf1, 0xff, 0x06, 0x11, 0x7f, + 0x7e, 0x76, 0x55, 0x61, 0x27, 0x59, 0x81, 0x06, 0x9b, 0x1b, 0x84, 0xbc, + 0xa4, 0xbb, 0xe4, 0xb2, 0x06, 0x9b, 0x9b, 0xc0, 0x07, 0xb3, 0x7f, 0x06, + 0x31, 0xff, 0x11, 0x04, 0x35, 0x04, 0x40, 0x04, 0x00, 0x3c, 0x04, 0x43, + 0x04, 0x34, 0x04, 0x4b, 0x04, 0xcf, 0x0e, 0xf1, 0x7f, 0x10, 0x0e, 0x10, + 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, + 0x30, 0x01, 0x12, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x30, 0x20, 0x23, 0xca, 0x00, 0x00, 0x00, + 0x02, 0x12, 0xaa, 0x30, 0xf3, 0x30, 0xbf, 0x01, 0x30, 0xea, 0x30, 0xaa, + 0x30, 0xde, 0x5d, 0x06, 0x38, 0x21, 0x00, 0x4f, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x61, 0x00, 0x04, 0x72, 0x00, 0x69, 0x00, 0x6f, 0x10, 0x16, 0x20, + 0x7f, 0x89, 0x5b, 0x02, 0x27, 0x59, 0x65, 0x75, 0x01, 0x77, 0x06, 0x7b, + 0x1d, 0x28, 0x00, 0xc6, 0xc0, 0xd0, 0xac, 0xb9, 0x24, 0xc6, 0x20, 0x14, + 0x00, 0xfc, 0xc8, 0x0e, 0x93, 0x7f, 0xe1, 0x06, 0x83, 0xff, 0x1e, 0x04, + 0x00, 0x3d, 0x04, 0x42, 0x04, 0x30, 0x04, 0x40, 0x04, 0x08, 0x38, 0x04, + 0x3e, 0x04, 0x10, 0x1e, 0x14, 0xff, 0x01, 0x09, 0x07, 0x00, 0x09, 0x08, + 0x08, 0x01, 0x01, 0x09, 0x08, 0x09, 0x04, 0x09, 0x01, 0x01, 0x01, 0x01, + 0x58, 0x17, 0x03, 0x12, 0x01, 0xa2, 0x30, 0xeb, 0x30, 0xd0, 0x30, 0xfc, + 0x28, 0x1b, 0x80, 0x06, 0x58, 0x17, 0x41, 0x00, 0x6c, 0x00, 0x62, 0x00, + 0x65, 0xe0, 0x28, 0x17, 0x38, 0x1d, 0x10, 0x16, 0x10, 0x7f, 0x7e, 0x82, + 0x2f, 0x4f, 0x54, 0x40, 0x58, 0x06, 0x98, 0x17, 0x68, 0xc5, 0x84, 0xbc, + 0xc0, 0xd0, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x10, 0x04, 0x3b, + 0x04, 0x4c, 0x04, 0x1d, 0x31, 0x04, 0x35, 0x28, 0x19, 0x38, 0x1f, 0x10, + 0x1d, 0xf4, 0xff, 0x02, 0x38, 0x0c, 0x20, 0x01, 0x02, 0x40, 0x06, 0x02, + 0x02, 0x02, 0x02, 0x14, 0x00, 0x26, 0x50, 0xaf, 0x00, 0x00, 0x04, 0x12, + 0xd6, 0x00, 0x30, 0xea, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0xc3, 0x00, 0x30, + 0xb7, 0x30, 0xe5, 0x30, 0xfb, 0x30, 0xb3, 0x00, 0x30, 0xed, 0x30, 0xf3, + 0x30, 0xd3, 0x30, 0xa2, 0xa8, 0x05, 0x68, 0x27, 0x42, 0x4f, 0xa9, 0x74, + 0x2f, 0xad, 0x73, 0x00, 0x68, 0x08, 0x00, 0x20, 0x00, 0x43, 0x2f, 0xb5, + 0x6c, 0x00, 0x75, 0x2d, 0x00, 0x6d, 0x28, 0x2d, 0x69, 0x05, 0x28, 0x29, + 0x50, 0x6f, 0x6f, 0x60, 0x6f, 0x15, 0x65, 0x00, 0x2d, 0x80, 0x91, 0x61, + 0x2f, 0xc9, 0x6e, 0x2f, 0xc5, 0x54, 0x71, 0x20, 0x8d, 0x65, 0x05, 0x40, + 0xff, 0x63, 0x21, 0x01, 0x2d, 0x00, 0x5d, 0x4b, 0xc1, 0x01, 0x65, 0x2f, + 0xcf, 0x05, 0x10, 0xff, 0x91, 0x6f, 0x20, 0x00, 0x00, 0xff, 0x68, 0x63, + 0x04, 0xc9, 0xaf, 0x00, 0x90, 0x7f, 0xe1, 0x05, 0x20, 0x7d, 0x00, 0x00, + 0x0d, 0x00, 0x4e, 0x17, 0x52, 0xa0, 0x98, 0xe5, 0x54, 0x26, 0x04, 0x4f, + 0xd4, 0x6b, 0x9a, 0x4e, 0x06, 0x18, 0x1f, 0x0c, 0xbe, 0x00, 0xac, 0xb9, + 0xf0, 0xd2, 0xdc, 0xc2, 0xec, 0xce, 0x03, 0xfc, 0xb7, 0x44, 0xbe, 0x44, + 0xc5, 0x05, 0xf8, 0x21, 0x73, 0x7f, 0x75, 0x73, 0x22, 0xf9, 0x05, 0xf3, + 0x7b, 0x93, 0x7f, 0xfa, 0x00, 0x22, 0x7f, 0xe2, 0x05, 0x41, 0xff, 0x50, + 0x11, 0x28, 0x0f, 0x38, 0x48, 0x11, 0x3d, 0x04, 0x41, 0x04, 0x40, 0x3a, + 0x28, 0x19, 0x4f, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x45, 0x3e, 0x28, 0x2f, + 0x43, 0x04, 0x3c, 0x28, 0x31, 0x38, 0x20, 0x11, 0xd2, 0x0c, 0x94, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x40, 0x06, 0x03, + 0x00, 0x03, 0x03, 0x03, 0x70, 0x22, 0x46, 0xa8, 0x00, 0x00, 0x00, 0x05, + 0x12, 0xde, 0x30, 0xcb, 0x30, 0xc8, 0x36, 0x30, 0xd0, 0x05, 0x68, 0x05, + 0x00, 0x1f, 0xff, 0x4d, 0x47, 0x7f, 0x38, 0x19, 0x6f, 0xe0, 0x2f, 0xb7, + 0x06, 0x1f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x6c, 0x9a, 0x3c, 0x5c, 0x58, + 0x18, 0x62, 0xf4, 0x5d, 0x06, 0x18, 0x11, 0x5f, 0xff, 0xe4, 0xb9, 0xc8, + 0x06, 0xb2, 0xa0, 0xd1, 0x14, 0xbc, 0x05, 0xf8, 0x0f, 0x0f, 0x73, 0x7f, + 0x1c, 0xd6, 0x48, 0x11, 0x38, 0x19, 0x3e, 0x28, 0x03, 0x30, 0x04, 0xa8, + 0x01, 0x10, 0x18, 0x54, 0xff, 0x04, 0x4c, 0x03, 0x20, 0x01, 0x04, 0x04, + 0x30, 0x04, 0x40, 0x07, 0x79, 0x23, 0x00, 0xeb, 0xba, 0x00, 0x00, 0x06, + 0x12, 0xcb, 0x30, 0x00, 0xe5, 0x30, 0xfc, 0x30, 0xfb, 0x30, 0xd6, 0x30, + 0x00, 0xe9, 0x30, 0xf3, 0x30, 0xba, 0x30, 0xa6, 0x30, 0x05, 0xa3, 0x30, + 0xc3, 0x30, 0xaf, 0x05, 0x88, 0x27, 0x4e, 0x2f, 0xa3, 0x56, 0x77, 0x6e, + 0xa5, 0x75, 0x2f, 0xa1, 0x73, 0x20, 0x0d, 0x3e, 0xa3, 0x6b, 0xa2, 0x05, + 0x6d, 0xb8, 0x4e, 0x2f, 0x9d, 0x75, 0x00, 0x76, 0x2f, 0x97, 0x61, 0xb5, + 0x2f, 0xa3, 0x2d, 0x06, 0x00, 0x87, 0x30, 0xff, 0x75, 0x2f, 0xab, 0x72, + 0x40, 0x7f, 0xa8, 0x30, 0xff, 0x63, 0x2c, 0x37, 0x77, 0x21, 0x15, 0x69, + 0x00, 0x67, 0xae, 0x05, 0x41, 0x7f, 0x75, 0x2f, 0xb1, 0x76, 0x2f, 0xb5, + 0x06, 0x51, 0x83, 0x30, 0x7f, 0x65, 0x80, 0x06, 0xa0, 0x7f, 0xb0, 0x65, + 0x0d, 0x4e, 0x26, 0x4f, 0x5e, 0x10, 0x74, 0x4b, 0x51, 0x06, 0x58, 0x19, + 0x74, 0xb2, 0x0c, 0xbe, 0x02, 0xf0, 0xb7, 0x88, 0xc9, 0x05, 0xc7, 0x06, + 0x58, 0x19, 0x4e, 0xd6, 0x2f, 0xa5, 0x32, 0x81, 0x77, 0x00, 0x02, 0xfb, + 0x6a, 0x05, 0x61, 0xff, 0x32, 0x7d, 0x61, 0x80, 0x06, 0x84, 0x01, 0x1d, + 0x04, 0x4c, 0x04, 0x4e, 0x04, 0x2d, 0x08, 0x00, 0x11, 0x04, 0x40, 0x48, + 0x21, 0x41, 0x04, 0x43, 0xb8, 0x28, 0x25, 0x3a, 0x05, 0x88, 0x1f, 0x07, + 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x05, 0x04, 0x05, 0x00, 0x04, 0x07, + 0x06, 0x05, 0x05, 0x05, 0x05, 0x07, 0x40, 0x04, 0x30, 0x05, 0xac, 0x20, + 0x98, 0xd0, 0x00, 0x00, 0x45, 0x07, 0x68, 0x17, 0xd5, 0x30, 0xa1, 0x28, + 0x15, 0xc9, 0x48, 0x1b, 0x55, 0xc9, 0x28, 0x25, 0xe9, 0x48, 0x27, 0xc9, + 0x28, 0x31, 0xeb, 0x04, 0xe8, 0x21, 0xa0, 0x58, 0x17, 0x66, 0x47, 0x9d, + 0x6e, 0x00, 0x64, 0x00, 0x6c, 0xb6, 0x4f, 0xbf, 0x64, 0x28, 0x29, 0x70, + 0x07, 0x4c, 0x2f, 0xd1, 0x57, 0x37, 0x64, 0xaa, 0x2f, 0xd3, 0x72, 0x03, + 0xef, 0xd1, 0x54, 0x28, 0x97, 0x72, 0x28, 0x93, 0x65, 0xeb, 0x28, 0x13, + 0x57, 0xa3, 0x38, 0x23, 0x20, 0x28, 0xad, 0x74, 0x05, 0x00, 0x7b, 0x98, + 0x17, 0x7f, 0x66, 0x00, 0x00, 0xfd, 0x51, 0x0d, 0x05, 0x10, 0x81, 0x70, + 0xff, 0x3f, 0xb5, 0x75, 0xa1, 0x30, 0xff, 0xd0, 0x05, 0x10, 0xf9, 0x00, + 0x90, 0x7f, 0x79, 0x05, 0xa0, 0x7f, 0xbd, 0x7e, 0xac, 0x82, 0x00, 0x70, + 0x51, 0x0e, 0x4e, 0xc9, 0x62, 0x03, 0x5e, 0x08, 0xc9, 0x62, 0x1a, 0x59, + 0x05, 0xf8, 0x1d, 0x74, 0xb2, 0x80, 0x00, 0xd3, 0xe4, 0xb4, 0x9c, 0xb7, + 0xdc, 0xb4, 0x98, 0x01, 0xb7, 0x0c, 0xbe, 0x7c, 0xb7, 0xc4, 0xb3, 0x05, + 0xd8, 0x1f, 0xba, 0x00, 0x93, 0x7f, 0x65, 0x2f, 0xc7, 0x0d, 0x12, 0x7f, + 0x58, 0x17, 0x44, 0x28, 0x13, 0x43, 0x82, 0x28, 0x15, 0x34, 0x04, 0x3b, + 0x04, 0x35, 0x40, 0x07, 0x20, 0x2a, 0x00, 0x38, 0x20, 0x03, 0x1b, 0x28, + 0x2b, 0x31, 0x48, 0x31, 0x34, 0x38, 0x04, 0x3e, 0x28, 0x39, 0x0c, 0x14, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x06, 0x05, 0x0a, 0x00, 0x05, 0x0b, 0x0b, + 0x06, 0x06, 0x04, 0x0b, 0x08, 0x00, 0x05, 0x06, 0x06, 0x06, 0x06, 0xd3, + 0x21, 0x81, 0x00, 0xda, 0x00, 0x00, 0x08, 0x12, 0xce, 0x30, 0xd0, 0x80, + 0x28, 0x07, 0xb9, 0x30, 0xb3, 0x30, 0xb7, 0x30, 0xa2, 0xd5, 0x04, 0xe8, + 0x03, 0x00, 0xdc, 0x2f, 0x53, 0x2f, 0x9d, 0x6f, 0x27, 0x8d, 0x69, 0x2f, + 0xb9, 0xda, 0x05, 0xd0, 0x7f, 0x58, 0x0b, 0x6c, 0x28, 0x93, 0x38, 0x1d, + 0xc9, 0x40, 0x87, 0x73, 0xa8, 0x2f, 0xb9, 0x65, 0x05, 0x6c, 0x2f, 0x75, + 0x2f, 0xa1, 0x63, 0x00, 0x68, 0xb5, 0x40, 0xfd, 0x74, 0x89, 0x19, 0x05, + 0x7e, 0x2f, 0x75, 0xe1, 0x81, 0x7a, 0x05, 0xc1, 0x81, 0xab, 0x30, 0x7f, + 0x65, 0x6e, 0x31, 0x45, 0x41, 0x07, 0x6f, 0x2e, 0x2b, 0x05, 0x92, 0x03, + 0x00, 0xb0, 0x65, 0xaf, 0x65, 0xd1, 0x79, 0x0d, 0x82, 0xc0, 0x05, 0xf8, + 0x0f, 0x7f, 0xff, 0x78, 0xb1, 0x14, 0xbc, 0xa4, 0xc2, 0x0e, 0x54, 0xcf, + 0xe4, 0xc0, 0x05, 0xd8, 0x0f, 0x07, 0xb3, 0x7f, 0xb1, 0xfd, 0xf3, 0xc5, + 0x05, 0xc1, 0xfd, 0x38, 0x17, 0x3e, 0x04, 0x32, 0x28, 0x15, 0x4f, 0x28, + 0x09, 0x55, 0x28, 0x27, 0xfb, 0x42, 0x28, 0x19, 0x30, 0x48, 0x21, 0x38, + 0x20, 0x13, 0xc9, 0x0d, 0xb1, 0x7f, 0x10, 0x0e, 0x50, 0x7f, 0x07, 0x07, + 0x28, 0x0d, 0x05, 0x07, 0x20, 0x06, 0x80, 0x30, 0x04, 0x07, 0x07, 0xed, + 0x1f, 0xd9, 0xd2, 0x00, 0x00, 0x00, 0x09, 0x12, 0xd7, 0x30, 0xea, 0x30, + 0xf3, 0x80, 0x28, 0x17, 0xfb, 0x30, 0xa8, 0x30, 0xc9, 0x30, 0xef, 0x28, + 0x30, 0xfc, 0x20, 0x05, 0xfb, 0x28, 0x21, 0xa4, 0x30, 0xe9, 0xaa, 0x20, + 0x17, 0xc9, 0x05, 0x08, 0x29, 0x50, 0x2f, 0xad, 0x69, 0x2f, 0x2b, 0x63, + 0xaa, 0x4f, 0xa5, 0x45, 0x2f, 0x97, 0x77, 0x2f, 0xa3, 0x72, 0x4f, 0x33, + 0x49, 0xd5, 0x27, 0x9d, 0x04, 0xf7, 0x25, 0xce, 0x68, 0x0d, 0x64, 0x2f, + 0xb5, 0x2d, 0xc0, 0x8d, 0xdb, 0x38, 0x21, 0x3f, 0xa3, 0x75, 0x60, 0x8f, + 0x04, 0xd0, 0xff, 0x7a, 0x28, 0x91, 0xb0, 0xfd, 0x56, 0x2d, 0x20, 0xfd, + 0x6e, 0x48, 0x9b, 0x6c, 0x04, 0xce, 0xc0, 0x31, 0x63, 0x6f, 0xb4, 0x4e, + 0x25, 0x20, 0x2f, 0x99, 0x39, 0x1d, 0x20, 0xa1, 0x93, 0x69, 0x00, 0x56, + 0x70, 0x81, 0x97, 0x6f, 0x61, 0x97, 0x6f, 0x04, 0x00, 0x7f, 0x00, 0x10, + 0x7d, 0xed, 0xe0, 0x00, 0x00, 0x7d, 0x71, 0x85, 0x03, 0xd0, 0x7d, 0x00, + 0x00, 0x31, 0x72, 0xb7, 0x00, 0x5f, 0x4e, 0x53, 0x8b, 0x73, 0x50, 0x5b, + 0x9b, 0x40, 0x5c, 0x06, 0x38, 0x1b, 0x04, 0xd5, 0xb0, 0xb9, 0xa4, 0xc2, + 0x00, 0xd0, 0xc5, 0xdc, 0xb4, 0xcc, 0xc6, 0xdc, 0xb4, 0x00, 0x44, 0xc5, + 0x7c, 0xc7, 0x9c, 0xb7, 0xdc, 0xb4, 0xd6, 0x05, 0x98, 0x23, 0x73, 0x7f, + 0x73, 0xe3, 0x7d, 0x65, 0x2b, 0x9f, 0x05, 0x3a, 0xa1, 0x49, 0xa8, 0x2f, + 0x21, 0x68, 0x62, 0x7d, 0x6f, 0x06, 0x01, 0xfd, 0x00, 0x00, 0x1e, 0x28, + 0x04, 0x41, 0x28, 0x0b, 0x40, 0x48, 0x1d, 0x20, 0x00, 0x1f, 0xa8, 0x20, + 0x09, 0x38, 0x28, 0x15, 0x46, 0x28, 0x29, 0x20, 0x00, 0x2d, 0xab, 0x28, + 0x1d, 0x43, 0x28, 0x33, 0x40, 0x28, 0x25, 0x30, 0x04, 0x68, 0x23, 0x06, + 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x08, 0x0a, 0x03, 0x0a, 0x03, + 0x03, 0x08, 0x80, 0x30, 0x06, 0x0a, 0x08, 0x08, 0x08, 0x08, 0xe1, 0x20, + 0x00, 0x1b, 0xd3, 0x00, 0x00, 0x0a, 0x12, 0xb1, 0x30, 0x06, 0xd9, 0x30, + 0xc3, 0x30, 0xaf, 0x05, 0x07, 0xff, 0x00, 0x7f, 0xff, 0x51, 0xab, 0x4e, + 0x2f, 0x62, 0x2f, 0xaf, 0x63, 0x06, 0x80, 0x7f, 0xe9, 0x10, 0x06, 0xe0, + 0x7f, 0x06, 0xb1, 0xff, 0x03, 0x41, 0x9b, 0x17, 0x53, 0x4b, 0x51, 0x06, + 0x38, 0x11, 0x5f, 0xff, 0x0d, 0x18, 0xd0, 0xa1, 0xbc, 0x05, 0x98, 0x05, + 0x08, 0xb1, 0xff, 0x71, 0x44, 0x09, 0xa2, 0x05, 0xf9, 0x99, 0x1a, 0x28, + 0x0f, 0x35, 0x04, 0x31, 0x20, 0x03, 0x3a, 0xe0, 0x04, 0x67, 0xf9, 0x09, + 0x14, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x09, 0x0b, 0x08, 0x0b, 0x09, 0x02, + 0x09, 0x09, 0x09, 0x0b, 0x09, 0x03, 0x40, 0x07, 0x48, 0x00, 0x21, 0x5d, + 0xcd, 0x00, 0x00, 0x0b, 0x12, 0xb5, 0x00, 0x30, 0xb9, 0x30, 0xab, 0x30, + 0xc1, 0x30, 0xe5, 0x0a, 0x30, 0xef, 0x30, 0xf3, 0x06, 0x28, 0x1d, 0x53, + 0x2f, 0x8d, 0x73, 0x2b, 0x00, 0x6b, 0x2f, 0x93, 0x74, 0x2f, 0xa5, 0x68, + 0x2f, 0xbb, 0x3f, 0x31, 0x40, 0x6e, 0x10, 0x15, 0x80, 0x7f, 0x28, 0x84, + 0xaf, 0x65, 0x80, 0x55, 0x08, 0x7b, 0x5f, 0x29, 0x6e, 0x06, 0x58, 0x1b, + 0x1c, 0xc1, 0xa4, 0x01, 0xc2, 0x90, 0xce, 0x98, 0xcc, 0xd0, 0xc6, 0x06, + 0x58, 0x1d, 0x82, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x04, 0x41, 0x28, + 0x13, 0x30, 0x2b, 0x04, 0x47, 0x28, 0x1f, 0x32, 0x20, 0x0d, 0x3d, 0x05, + 0xc8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x00, 0x0a, 0x0c, 0x09, 0x0c, 0x0a, + 0x0a, 0x0a, 0x0a, 0x10, 0x0c, 0x0a, 0x0b, 0x40, 0x07, 0xe0, 0x23, 0x9b, + 0xb5, 0x00, 0x00, 0x00, 0x0c, 0x12, 0xe6, 0x30, 0xfc, 0x30, 0x4d, 0xb3, + 0x28, 0x11, 0x96, 0x6e, 0x06, 0x18, 0x13, 0x3f, 0xff, 0x59, 0x2f, 0xaf, + 0x1a, 0x6b, 0x00, 0x6f, 0x05, 0xa8, 0x09, 0xdf, 0xff, 0x54, 0x2f, 0xa9, + 0x72, 0xaa, 0x20, 0x01, 0x69, 0x28, 0x97, 0x6f, 0x20, 0x05, 0x72, 0x2f, + 0xb9, 0x20, 0x2e, 0x00, 0x64, 0x2f, 0xc5, 0x20, 0x05, 0x40, 0x9b, 0x06, + 0xf0, 0xff, 0x07, 0x50, 0x7f, 0xf3, 0x80, 0x06, 0x81, 0xff, 0xb2, 0x80, + 0x7a, 0x7a, 0x30, 0x57, 0x3a, 0x40, 0x53, 0x06, 0x7f, 0xaf, 0x20, 0xc7, + 0x58, 0xcf, 0x20, 0x00, 0x35, 0x00, 0xc9, 0x06, 0x38, 0x13, 0x0f, 0x32, + 0x7f, 0x2e, 0x28, 0x13, 0x3e, 0x05, 0xe8, 0x0b, 0xc0, 0x10, 0x00, 0x13, + 0xff, 0x10, 0x06, 0x90, 0xff, 0x0b, 0x0d, 0x0c, 0x0d, 0x0d, 0x0d, 0x30, + 0x0b, 0x0b, 0x20, 0x04, 0x20, 0x05, 0x0b, 0x0b, 0x2d, 0x2b, 0x01, 0xf7, + 0x9f, 0x00, 0x00, 0x0d, 0x12, 0xce, 0x28, 0x17, 0x05, 0xb9, 0x30, 0xa6, + 0x30, 0xa7, 0x20, 0x05, 0xc8, 0x06, 0x28, 0x1d, 0x55, 0x4e, 0x28, 0x13, + 0x72, 0x2f, 0xab, 0x68, 0x2f, 0xa7, 0x65, 0x2f, 0xb9, 0x7d, 0x74, 0x27, + 0x95, 0xd7, 0xab, 0x37, 0xb3, 0x30, 0x19, 0x05, 0x98, 0x17, 0x73, 0x88, + 0x19, 0x83, 0x50, 0x9d, 0x64, 0x00, 0x2d, 0x00, 0x4f, 0x28, 0xbf, 0x50, + 0x9f, 0xaf, 0x04, 0x30, 0xff, 0x64, 0x80, 0xfd, 0x2d, 0x00, 0x40, 0xfd, + 0x04, 0x9f, 0xbf, 0x00, 0x11, 0x6b, 0x39, 0x15, 0x16, 0x65, 0x00, 0x6c, + 0xe0, 0xfd, 0x76, 0x04, 0x40, 0xfd, 0x00, 0x30, 0x7f, 0x6f, 0xd4, 0x61, + 0x7f, 0xb0, 0x83, 0x6f, 0x62, 0x1b, 0x65, 0x04, 0x0f, 0xd2, 0x7f, 0x89, + 0x20, 0x17, 0x53, 0x06, 0xb8, 0x17, 0x78, 0xb1, 0xa4, 0xc2, 0xe8, 0x06, + 0xc6, 0xa4, 0xc2, 0xb8, 0xd2, 0x06, 0x58, 0x1d, 0x07, 0xb3, 0x7f, 0xf3, + 0xa0, 0xc1, 0xff, 0x6f, 0x05, 0x21, 0xfd, 0x00, 0x00, 0x21, 0x04, 0x35, + 0x28, 0x04, 0x32, 0x20, 0x03, 0x40, 0x28, 0x1d, 0x2d, 0x00, 0x17, 0x0a, + 0x04, 0x30, 0x04, 0x3f, 0x20, 0x03, 0x34, 0x28, 0x29, 0x4b, 0x88, 0x20, + 0x19, 0x20, 0x00, 0x42, 0x40, 0x1b, 0x40, 0x04, 0x38, 0x37, 0x04, 0x42, + 0x28, 0x3f, 0x30, 0x07, 0x38, 0x03, 0xc8, 0x43, 0x06, 0xf4, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x00, 0x0c, 0x06, 0x0d, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, + 0x40, 0x06, 0x40, 0x02, 0x0c, 0x0c, 0x69, 0x2c, 0xaf, 0xae, 0x00, 0x00, + 0x00, 0x0e, 0x12, 0xcc, 0x30, 0xca, 0x30, 0x6a, 0xd6, 0x06, 0x48, 0x11, + 0x78, 0x17, 0x75, 0x2f, 0x8f, 0x61, 0x26, 0x77, 0x75, 0xfc, 0x04, 0x26, + 0x75, 0x02, 0x58, 0x17, 0x98, 0x15, 0x05, 0x10, 0x9b, 0x06, 0xf0, 0xff, + 0x0e, 0xf0, 0x7f, 0xaa, 0x52, 0x02, 0xb3, 0x7e, 0xf4, 0x7e, 0x79, 0x72, + 0x06, 0x78, 0x1b, 0x04, 0x06, 0xb2, 0x98, 0xb0, 0x80, 0xbd, 0x06, 0x78, + 0x15, 0x0f, 0x12, 0x7f, 0x1d, 0x2b, 0x04, 0x43, 0x28, 0x03, 0x30, 0x28, + 0x1b, 0x43, 0x27, 0xf9, 0x10, 0x06, 0x13, 0x7f, 0x80, 0x10, 0x06, 0xf4, + 0xff, 0x0d, 0x08, 0x0b, 0x08, 0x05, 0x07, 0x0d, 0x00, 0x0d, 0x08, 0x07, + 0x06, 0x08, 0x0d, 0x0d, 0x0d, 0x04, 0x0d, 0x55, 0x2d, 0x48, 0xcf, 0x00, + 0x3f, 0xff, 0x01, 0x09, 0x00, 0x07, 0x09, 0x08, 0x08, 0x01, 0x01, 0x09, + 0x08, 0x01, 0x09, 0x09, 0x01, 0x01, 0x01, 0x01, 0x02, 0x30, 0x04, 0x20, + 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x90, 0x30, 0x04, + 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x4d, 0x04, 0x30, 0x01, + 0x04, 0x04, 0x30, 0x04, 0x40, 0x07, 0x05, 0x20, 0x01, 0x00, 0x07, 0x06, + 0x05, 0x05, 0x05, 0x05, 0x07, 0x04, 0x80, 0x30, 0x05, 0x06, 0x05, 0x0a, + 0x05, 0x0b, 0x0b, 0x06, 0x20, 0x06, 0x04, 0x20, 0x7e, 0x06, 0x06, 0x06, + 0x06, 0x07, 0x4c, 0x07, 0x20, 0x05, 0x05, 0x07, 0x20, 0x06, 0x30, 0x04, + 0x07, 0x07, 0x01, 0x08, 0x0a, 0x03, 0x0a, 0x03, 0x03, 0x08, 0x30, 0x06, + 0x00, 0x0a, 0x08, 0x08, 0x08, 0x08, 0x09, 0x0b, 0x08, 0x00, 0x0b, 0x09, + 0x09, 0x09, 0x09, 0x0b, 0x09, 0x03, 0x80, 0x40, 0x07, 0x0a, 0x0c, 0x09, + 0x0c, 0x0a, 0x0a, 0x0a, 0x08, 0x0a, 0x0c, 0x0a, 0x0b, 0x40, 0x07, 0x0b, + 0x0d, 0x0c, 0x90, 0x20, 0xbe, 0x0b, 0x0b, 0x30, 0xc3, 0x0b, 0x0b, 0x0b, + 0x0b, 0xe0, 0xf8, 0xef, 0xf0, 0xe7, 0x3f, 0xde, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x13, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xb9, 0x0d, 0x21, + 0xc6, 0x00, 0x00, 0x00, 0x01, 0x13, 0xb1, 0x30, 0xa4, 0x30, 0xde, 0x01, + 0x30, 0xf3, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x38, 0x21, 0x01, 0x43, + 0x00, 0x61, 0x00, 0x79, 0x00, 0x6d, 0x20, 0x05, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x49, 0x00, 0x73, 0x00, 0x5a, 0x6c, 0x40, 0x0b, 0x64, 0x20, 0x09, + 0x05, 0x38, 0xb1, 0xce, 0x20, 0x6f, 0x65, 0xae, 0x20, 0x75, 0x20, 0x40, + 0x89, 0xef, 0x60, 0x89, 0x05, 0x50, 0x7b, 0x39, 0x9a, 0x4b, 0xaa, 0x20, + 0xff, 0x69, 0x60, 0xff, 0x69, 0x40, 0x79, 0x65, 0x21, 0x01, 0x6e, 0xdf, + 0x05, 0x89, 0xac, 0x31, 0x71, 0x6f, 0x41, 0x03, 0x51, 0x01, 0x71, 0x8b, + 0x05, 0xb0, 0x7f, 0x31, 0xf1, 0xd0, 0x71, 0x81, 0x31, 0x0b, 0xe1, 0x05, + 0xa0, 0xff, 0x00, 0x5f, 0xfc, 0x66, 0x18, 0xa4, 0x7f, 0x9b, 0x06, 0x42, + 0xfb, 0x4b, 0x9a, 0xcf, 0x74, 0xc7, 0x00, 0xe8, 0xb9, 0x20, 0x00, 0x1c, + 0xc8, 0xc4, 0xb3, 0xed, 0x06, 0x3b, 0xa1, 0x32, 0x7f, 0x92, 0x81, 0x65, + 0x22, 0x8b, 0x73, 0x7f, 0x65, 0x05, 0x42, 0x85, 0x56, 0x49, 0x23, 0xef, + 0x68, 0xe1, 0xff, 0xe3, 0x22, 0x91, 0x05, 0x7c, 0xad, 0x1a, 0x02, 0x04, + 0x30, 0x04, 0x39, 0x04, 0x3c, 0x20, 0x05, 0x3d, 0x00, 0x04, 0x3e, 0x04, + 0x32, 0x04, 0x4b, 0x04, 0x20, 0x00, 0x00, 0x3e, 0x04, 0x41, 0x04, 0x42, + 0x04, 0x40, 0x99, 0x40, 0x0f, 0x30, 0x04, 0x0c, 0xd4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, 0x30, 0x01, 0x14, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x37, 0xe8, 0xc0, 0xcd, 0x00, 0x00, 0x00, 0x02, 0x14, 0xec, 0x30, + 0xb8, 0x30, 0xe7, 0x00, 0x30, 0xf3, 0x30, 0xfb, 0x30, 0xe1, 0x30, 0xc8, + 0x00, 0x30, 0xed, 0x30, 0xdd, 0x30, 0xea, 0x30, 0xbf, 0x04, 0x30, 0xca, + 0x30, 0xde, 0x5d, 0x05, 0x58, 0x2f, 0x52, 0x00, 0x00, 0x65, 0x00, 0x67, + 0x00, 0x69, 0x00, 0xf3, 0x00, 0x04, 0x6e, 0x00, 0x20, 0x00, 0x4d, 0x20, + 0x0d, 0x74, 0x00, 0x05, 0x72, 0x00, 0x6f, 0x00, 0x70, 0x20, 0x03, 0x6c, + 0x20, 0x17, 0x15, 0x74, 0x00, 0x61, 0x20, 0x19, 0x61, 0x04, 0xa0, 0x7f, + 0xe9, 0x40, 0x7f, 0x55, 0x6f, 0x60, 0x7f, 0xe9, 0x00, 0x20, 0x7f, 0x69, + 0x20, 0x9b, 0x65, 0x20, 0x9d, 0x55, 0x64, 0x40, 0x05, 0x53, 0x40, 0x91, + 0x74, 0x20, 0xb3, 0x61, 0x20, 0xb9, 0x7e, 0x6f, 0x0b, 0x00, 0xff, 0x51, + 0x7f, 0x30, 0xff, 0x30, 0xe3, 0x00, 0x91, 0x81, 0x30, 0xff, 0x69, 0x80, + 0x0c, 0x00, 0xff, 0x23, 0x57, 0x30, 0x57, 0x9a, 0x4e, 0xe5, 0x01, 0x54, + 0x96, 0x99, 0xfd, 0x90, 0x3a, 0x53, 0x06, 0x1b, 0x23, 0x00, 0xb0, 0xc0, + 0xf0, 0xd2, 0x44, 0xc5, 0xe0, 0xac, 0x00, 0x20, 0x00, 0x18, 0xc2, 0xc4, + 0xb3, 0xfc, 0xc8, 0xd8, 0x05, 0xfb, 0xa5, 0x07, 0x72, 0x7f, 0xe3, 0x23, + 0xf3, 0x06, 0x33, 0xff, 0x21, 0x04, 0x42, 0x00, 0x04, 0x3e, 0x04, 0x3b, + 0x04, 0x38, 0x04, 0x47, 0x00, 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x39, 0x04, + 0x20, 0x00, 0x00, 0x3e, 0x04, 0x3a, 0x04, 0x40, 0x04, 0x43, 0x18, 0x04, + 0x33, 0x04, 0x0d, 0x91, 0x7f, 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x0b, 0x0b, + 0xa9, 0x20, 0x01, 0x01, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x01, 0x01, 0x58, + 0x17, 0x00, 0x03, 0x14, 0xd0, 0x30, 0xeb, 0x30, 0xd1, 0x30, 0x06, 0xe9, + 0x30, 0xa4, 0x30, 0xbd, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x56, 0xa8, 0x27, + 0xf7, 0x6c, 0x28, 0x05, 0x61, 0x28, 0x0d, 0x61, 0x00, 0xed, 0x36, 0x00, + 0x73, 0x03, 0x07, 0x69, 0x02, 0xb0, 0x7f, 0x69, 0x06, 0xe0, 0x7f, 0x50, + 0xff, 0x20, 0x2b, 0x00, 0x28, 0xc7, 0xaf, 0x20, 0x21, 0x25, 0x29, 0x0d, + 0x41, 0x7f, 0x06, 0x11, 0xff, 0x00, 0xe6, 0x74, 0x14, 0x5c, 0x15, 0x5e, + 0xb1, 0x83, 0x08, 0x22, 0x7d, 0x27, 0x59, 0x06, 0x38, 0x17, 0x1c, 0xbc, + 0x0c, 0x00, 0xd3, 0x7c, 0xb7, 0x74, 0xc7, 0x8c, 0xc1, 0x20, 0x62, 0x00, + 0x06, 0x18, 0x15, 0x0f, 0x11, 0xff, 0x12, 0x04, 0x30, 0x28, 0x15, 0x4c, + 0x28, 0x04, 0x3f, 0x20, 0x07, 0x40, 0x20, 0x0b, 0x38, 0x04, 0x41, 0xe2, + 0x28, 0x27, 0x10, 0x05, 0x91, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x0d, + 0x0d, 0x20, 0x01, 0x02, 0xa0, 0x20, 0x06, 0x06, 0x20, 0x05, 0x02, 0x02, + 0x80, 0xe8, 0x16, 0x88, 0x28, 0x17, 0x04, 0x14, 0xa2, 0x28, 0x11, 0xbb, + 0x30, 0xf3, 0x08, 0x30, 0xfb, 0x30, 0xc7, 0x28, 0x21, 0xfb, 0x30, 0x27, + 0x08, 0xff, 0xfb, 0x30, 0xab, 0x28, 0x2b, 0xed, 0x30, 0xb9, 0x80, 0x20, + 0x13, 0xa4, 0x30, 0xd0, 0x30, 0xcb, 0x30, 0xa7, 0xd5, 0x40, 0x0b, 0x50, + 0x1f, 0xab, 0x20, 0x2b, 0xdd, 0x03, 0xa8, 0x41, 0x41, 0x47, 0x8b, 0x6b, + 0xe9, 0x4f, 0xad, 0x3f, 0x8f, 0x6c, 0x2f, 0xb5, 0x47, 0x2f, 0x9d, 0x3f, + 0xa1, 0xd5, 0x38, 0x29, 0x30, 0x0f, 0x43, 0x48, 0x35, 0x6c, 0x2f, 0xd3, + 0x73, 0x2f, 0xd3, 0x01, 0x49, 0x00, 0x62, 0x00, 0xe1, 0x00, 0xf1, 0x2f, + 0xc1, 0x6e, 0x7a, 0xa0, 0x33, 0x30, 0x23, 0x6d, 0x4f, 0xe5, 0x0a, 0x90, + 0x7f, 0xf8, 0x0d, 0x58, 0xe0, 0x20, 0xeb, 0x04, 0x78, 0x0f, 0x0f, 0x71, + 0x7f, 0x0a, 0x4f, 0xe6, 0x74, 0x85, 0x00, 0x6d, 0xaf, 0x65, 0x06, 0x5c, + 0x9b, 0x51, 0x84, 0x04, 0x76, 0x7e, 0x82, 0xee, 0x68, 0x05, 0xd8, 0x1f, + 0x44, 0xc5, 0x1a, 0x74, 0xc7, 0x3c, 0x06, 0x68, 0x13, 0x53, 0x7f, 0x79, + 0x0e, 0xc3, 0x7f, 0x10, 0x23, 0x04, 0x39, 0x28, 0x09, 0x35, 0x04, 0x3d, + 0x05, 0xa8, 0x0b, 0x10, 0x00, 0x74, 0xff, 0x88, 0x10, 0x06, 0x30, 0xff, + 0x03, 0x01, 0x01, 0x20, 0x01, 0x03, 0x03, 0x04, 0x80, 0x40, 0x05, 0x03, + 0x03, 0x99, 0xdf, 0xc1, 0xcc, 0x00, 0x20, 0x00, 0x05, 0x28, 0x17, 0xf3, + 0x30, 0xc8, 0x30, 0xd5, 0x0b, 0x30, 0xa1, 0x30, 0xac, 0x28, 0x09, 0xbf, + 0x03, 0xa7, 0xf1, 0x01, 0x78, 0x17, 0x15, 0x6e, 0x00, 0x74, 0x2f, 0xa3, + 0x66, 0x2f, 0xb7, 0x67, 0x2f, 0xbb, 0x5b, 0x73, 0x20, 0x0d, 0x61, 0x0f, + 0x00, 0x7f, 0x00, 0x18, 0x23, 0x49, 0x04, 0x68, 0x23, 0x0e, 0xf1, 0x7f, + 0x00, 0x89, 0x5b, 0x58, 0x62, 0xd5, 0x6c, 0xa0, 0x52, 0x0c, 0xaf, 0x65, + 0x54, 0x58, 0x05, 0xd8, 0x11, 0x5f, 0xff, 0x48, 0xc5, 0x00, 0xa0, 0xd1, + 0x0c, 0xd3, 0x00, 0xac, 0xa4, 0xc2, 0x34, 0xc0, 0xd0, 0x06, 0x38, 0x1d, + 0x0e, 0xf3, 0x7f, 0x10, 0x28, 0x11, 0x42, 0x04, 0x01, 0x3e, 0x04, 0x44, + 0x04, 0x30, 0x04, 0x33, 0x20, 0x03, 0x5c, 0x41, 0x20, 0x0d, 0x30, 0x05, + 0xa8, 0x23, 0x10, 0x00, 0x54, 0xff, 0x10, 0x05, 0x96, 0x7f, 0x04, 0x02, + 0x44, 0x02, 0x20, 0x01, 0x04, 0x04, 0x01, 0x40, 0x05, 0x04, 0x04, 0x01, + 0x2f, 0xef, 0xf1, 0xcd, 0x00, 0x00, 0x06, 0x28, 0x17, 0x00, 0xe9, 0x30, + 0xa6, 0x30, 0xab, 0x30, 0xcb, 0x30, 0x71, 0xa2, 0x06, 0x08, 0x13, 0x5f, + 0xaf, 0x3f, 0x95, 0x75, 0x00, 0x63, 0x2f, 0xef, 0x1b, 0x6e, 0x00, 0xed, + 0x05, 0xc8, 0x13, 0x00, 0x10, 0x7f, 0x69, 0x2f, 0xfd, 0x06, 0x50, 0xff, + 0x77, 0x6b, 0x80, 0x7f, 0x3f, 0xb9, 0x00, 0x18, 0x15, 0x58, 0x04, 0x48, + 0x15, 0x07, 0xf1, 0x7f, 0x06, 0x11, 0xff, 0x00, 0x3f, 0x96, 0xb3, 0x52, + 0x61, 0x53, 0x3c, 0x5c, 0x20, 0x9a, 0x4e, 0x06, 0x38, 0x15, 0x00, 0x00, + 0x44, 0xc5, 0x7c, 0x00, 0xb7, 0xb0, 0xc6, 0x74, 0xce, 0xc8, 0xb2, 0x44, + 0x62, 0xc5, 0x06, 0x58, 0x17, 0x0e, 0xd1, 0xff, 0x10, 0x04, 0x40, 0x28, + 0x11, 0x43, 0x20, 0x04, 0x3a, 0x28, 0x17, 0x3d, 0x04, 0x38, 0x04, 0x4f, + 0xe2, 0x05, 0xa8, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x05, + 0x03, 0x03, 0x20, 0x01, 0x05, 0x20, 0x05, 0x02, 0x40, 0x05, 0x05, 0x05, + 0x75, 0xe4, 0x60, 0x0a, 0xcc, 0x00, 0x00, 0x07, 0x28, 0x17, 0xbf, 0x28, + 0x15, 0xde, 0xf7, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x3f, 0x9f, 0x38, 0x15, + 0x6d, 0x06, 0x08, 0x13, 0x08, 0x10, 0x7f, 0x00, 0x38, 0x11, 0xe0, 0x30, + 0x01, 0x04, 0x58, 0x13, 0x0f, 0x31, 0x7f, 0x3f, 0x96, 0x54, 0x58, 0x61, + 0x19, 0x53, 0x6c, 0x9a, 0x06, 0x58, 0x15, 0x38, 0x17, 0xc0, 0xd0, 0x28, + 0x15, 0x63, 0xb9, 0x06, 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x04, 0x42, + 0x28, 0x17, 0x38, 0x15, 0x71, 0x3c, 0x28, 0x1f, 0x10, 0x06, 0xf4, 0xff, + 0x10, 0x06, 0x16, 0x7f, 0x06, 0x04, 0x04, 0x20, 0x01, 0x10, 0x06, 0x06, + 0x03, 0x40, 0x05, 0x06, 0x06, 0x8b, 0xec, 0x00, 0xfd, 0xcd, 0x00, 0x00, + 0x08, 0x14, 0xd3, 0x30, 0x34, 0xaa, 0x30, 0x30, 0x03, 0x06, 0x78, 0x17, + 0x42, 0x2e, 0xa3, 0x6f, 0x00, 0x77, 0x2d, 0x60, 0x07, 0x06, 0x30, 0x7f, + 0x3f, 0x93, 0x62, 0x06, 0x60, 0x7d, 0xf0, 0xff, 0x00, 0x18, 0x17, 0x70, + 0x56, 0x04, 0xe8, 0x19, 0x07, 0xd0, 0xff, 0x06, 0x1f, 0xaf, 0xd4, 0x6b, + 0x65, 0x59, 0xc7, 0x30, 0x03, 0x06, 0x88, 0x17, 0xbe, 0x24, 0xc6, 0x30, + 0x03, 0x06, 0x78, 0x17, 0x07, 0x53, 0x7f, 0xe0, 0x33, 0xff, 0x3b, 0x09, + 0x06, 0x1c, 0x9b, 0x11, 0x04, 0x38, 0x04, 0x3e, 0x38, 0x04, 0x2d, 0x60, + 0x07, 0x0e, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x07, 0x05, 0x05, 0xa0, + 0x20, 0x01, 0x07, 0x40, 0x06, 0x07, 0x07, 0x07, 0x07, 0xcf, 0x00, 0xe5, + 0x0e, 0xcc, 0x00, 0x00, 0x09, 0x14, 0xb3, 0x02, 0x30, 0xad, 0x30, 0xf3, + 0x30, 0xdc, 0x06, 0x88, 0x17, 0x43, 0x8b, 0x2f, 0x17, 0x71, 0x00, 0x75, + 0x2f, 0x1f, 0x6d, 0x27, 0x9d, 0x06, 0x18, 0x19, 0xdc, 0x07, 0xf0, 0x7f, + 0x00, 0x18, 0x19, 0x49, 0x28, 0x1b, 0x04, 0x78, 0x15, 0x0f, 0x11, 0x7f, + 0xd1, 0x79, 0x08, 0xd1, 0x91, 0x5a, 0x53, 0x06, 0x78, 0x15, 0x00, 0x00, + 0x54, 0x06, 0xcf, 0xb4, 0xd0, 0xf4, 0xbc, 0x06, 0x78, 0x15, 0x0f, 0x13, + 0x7f, 0x1a, 0xa3, 0x28, 0x15, 0x3a, 0x28, 0x1b, 0x3c, 0x04, 0x31, 0x06, + 0x48, 0x17, 0x0f, 0xf4, 0xff, 0x8a, 0x10, 0x05, 0xf6, 0x7f, 0x08, 0x06, + 0x06, 0x20, 0x01, 0x08, 0x20, 0x06, 0x07, 0x80, 0x20, 0x05, 0x08, 0x08, + 0xb4, 0xea, 0x45, 0xcd, 0x00, 0x00, 0x00, 0x0a, 0x14, 0x4c, 0x00, 0xfb, + 0x30, 0xd9, 0x08, 0x30, 0xeb, 0x30, 0xca, 0x20, 0x03, 0xc9, 0x30, 0xfb, + 0x02, 0x30, 0xaa, 0x30, 0xd2, 0x30, 0xae, 0x28, 0x29, 0xb9, 0xa8, 0x05, + 0x68, 0x29, 0x4c, 0x2f, 0xaf, 0x62, 0x2f, 0x21, 0x72, 0x00, 0x74, 0x0a, + 0x00, 0x61, 0x00, 0x64, 0x2f, 0xbb, 0x72, 0x2f, 0x35, 0x47, 0xa2, 0x2f, + 0x33, 0x6e, 0x40, 0x15, 0x61, 0x00, 0x6c, 0x2f, 0x45, 0x42, 0xa8, 0x40, + 0x21, 0x6e, 0x20, 0x21, 0x72, 0x40, 0x23, 0x20, 0x00, 0x4f, 0x0a, 0x00, + 0x27, 0x00, 0x48, 0x2f, 0xeb, 0x67, 0x4f, 0x5b, 0x6e, 0x37, 0x00, 0x73, + 0x0f, 0x00, 0x7f, 0x00, 0x18, 0x51, 0x56, 0x28, 0x53, 0x00, 0xf8, 0x51, + 0x0e, 0xf1, 0x7f, 0x00, 0x65, 0x59, 0x0a, 0x4f, 0xd1, 0x91, 0xaf, 0x65, + 0x00, 0x06, 0x5c, 0x9b, 0x51, 0xe3, 0x89, 0x3e, 0x65, 0x20, 0x05, 0x80, + 0x05, 0xd8, 0x23, 0x24, 0xc6, 0x74, 0xc7, 0x34, 0x18, 0xae, 0xa4, 0xc2, + 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x19, 0x28, 0x20, 0x25, + 0x28, 0x17, 0x33, 0x20, 0x01, 0x38, 0x04, 0x3d, 0x38, 0x04, 0x41, 0x05, + 0xe8, 0x1b, 0x10, 0x03, 0x94, 0xff, 0x10, 0x02, 0x56, 0x7f, 0x09, 0x07, + 0x07, 0xa8, 0x20, 0x01, 0x09, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, 0x09, + 0xb5, 0x22, 0xe7, 0xb1, 0x28, 0x17, 0x0b, 0x14, 0xed, 0x28, 0x01, 0xfb, + 0x0d, 0x30, 0xe9, 0x30, 0xb4, 0x05, 0x88, 0x09, 0xf8, 0x17, 0x6f, 0x46, + 0xd3, 0x5d, 0x4c, 0x28, 0x15, 0x67, 0x40, 0x0b, 0x0e, 0xf0, 0x7f, 0x00, + 0x17, 0xdf, 0x58, 0x01, 0x07, 0xdd, 0x98, 0x10, 0x02, 0x91, 0x7f, 0x56, + 0x6e, 0x05, 0xd8, 0x07, 0xff, 0xff, 0x5c, 0xb8, 0xa4, 0x06, 0xc2, 0x7c, + 0xb7, 0xe0, 0xac, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x1b, 0x2b, 0x04, + 0x3e, 0x28, 0x0b, 0x2d, 0x20, 0x07, 0x30, 0x28, 0x1b, 0x30, 0x0b, 0xc5, + 0x10, 0x06, 0xf4, 0xff, 0x10, 0x05, 0xd6, 0x7f, 0x0a, 0x08, 0x08, 0x20, + 0x01, 0x0a, 0x40, 0x06, 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x83, 0xe2, 0x23, + 0xcc, 0x00, 0x00, 0x00, 0x0c, 0x14, 0xde, 0x30, 0xac, 0x30, 0x05, 0xea, + 0x30, 0xe3, 0x30, 0xcd, 0x06, 0x68, 0x17, 0x4d, 0x48, 0x0f, 0xba, 0x3f, + 0x95, 0x6c, 0x2f, 0xaf, 0x3f, 0xa3, 0x3e, 0xf9, 0x79, 0x2f, 0xb3, 0x41, + 0x88, 0x2f, 0xb1, 0x74, 0x00, 0xe1, 0x4f, 0xc9, 0x69, 0x00, 0x63, 0x82, + 0x2f, 0xcd, 0x20, 0x00, 0x43, 0x00, 0x68, 0x2f, 0xdf, 0x6c, 0xaa, 0x4f, + 0xcd, 0x61, 0x03, 0xa0, 0x7f, 0x65, 0x80, 0x7f, 0x20, 0x2f, 0xbb, 0x74, + 0xd1, 0x80, 0x7d, 0x3f, 0x9f, 0x63, 0x40, 0x7f, 0x71, 0x00, 0x75, 0x2f, + 0xd5, 0xbd, 0x90, 0x81, 0x69, 0x4f, 0xd1, 0x3f, 0xd3, 0x04, 0x30, 0xff, + 0x00, 0x18, 0x19, 0x49, 0x4f, 0xfb, 0x5a, 0x20, 0x20, 0x85, 0x6e, 0x2f, + 0xd5, 0xd1, 0x09, 0x69, 0x2f, 0xad, 0x63, 0xef, 0x21, 0x19, 0x30, 0x9f, + 0x90, 0xb7, 0x6b, 0x41, 0x37, 0x00, 0xff, 0xc7, 0xf0, 0xff, 0x30, 0xe3, + 0xdc, 0xd0, 0x47, 0x31, 0x7d, 0x64, 0x60, 0xfb, 0x03, 0xd1, 0x7b, 0x07, + 0x31, 0xff, 0xa6, 0x9e, 0x00, 0xf2, 0x54, 0x26, 0x4f, 0x2d, 0x00, 0x7a, + 0x66, 0x02, 0x29, 0x52, 0x57, 0x53, 0x81, 0x67, 0x05, 0xf8, 0x25, 0xc8, + 0x01, 0xb9, 0x00, 0xac, 0x7c, 0xc5, 0x24, 0xb1, 0x06, 0x78, 0x17, 0xf8, + 0x00, 0x93, 0x7f, 0x51, 0xf3, 0x33, 0x95, 0x04, 0xb3, 0x8b, 0x93, 0xff, + 0x68, 0x00, 0xe3, 0xe2, 0x63, 0xfd, 0x92, 0xc7, 0x04, 0xf3, 0xfd, 0x00, + 0x00, 0x1c, 0x48, 0x0f, 0x30, 0x00, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x4f, + 0x04, 0x3d, 0x22, 0x04, 0x35, 0x28, 0x25, 0x20, 0x00, 0x38, 0x20, 0x03, + 0x27, 0x22, 0x04, 0x38, 0x20, 0x15, 0x38, 0x04, 0x39, 0x28, 0x37, 0x3a, + 0xaa, 0x28, 0x35, 0x4f, 0x20, 0x17, 0x10, 0x20, 0x21, 0x42, 0x28, 0x41, + 0x40, 0xbc, 0x20, 0x11, 0x42, 0x20, 0x1f, 0x30, 0x17, 0x0b, 0x34, 0xff, + 0x10, 0x0e, 0x90, 0x7f, 0x0b, 0x09, 0x50, 0x09, 0x20, 0x01, 0x0b, 0x40, + 0x06, 0x0b, 0x0b, 0x0b, 0x0b, 0x01, 0x35, 0xda, 0x93, 0xcd, 0x00, 0x00, + 0x0d, 0x28, 0x17, 0x1b, 0xa6, 0x30, 0xec, 0x06, 0x48, 0x11, 0x98, 0x17, + 0x75, 0x47, 0xe9, 0x0e, 0xf0, 0x7f, 0xb0, 0x00, 0x18, 0x0d, 0x56, 0x68, + 0x0d, 0x10, 0x04, 0xb1, 0x7f, 0x6c, 0x9a, 0x4c, 0x4e, 0x30, 0xb1, 0x83, + 0x05, 0xf8, 0x0d, 0xb8, 0x17, 0xb8, 0xc6, 0x08, 0xb8, 0xeb, 0x06, 0x58, + 0x13, 0x0f, 0x33, 0x7f, 0x38, 0x17, 0x43, 0x28, 0x15, 0x35, 0x02, 0xe7, + 0xdf, 0x10, 0x03, 0x14, 0xff, 0x8a, 0x10, 0x06, 0x56, 0x7f, 0x0c, 0x0a, + 0x0a, 0x20, 0x01, 0x0c, 0x40, 0x06, 0x0c, 0x02, 0x0c, 0x0c, 0x0c, 0xce, + 0xe6, 0x0a, 0x28, 0x17, 0x0e, 0x00, 0x14, 0xbf, 0x30, 0xe9, 0x30, 0xd1, + 0x30, 0xab, 0xa2, 0x06, 0x88, 0x19, 0x54, 0x4f, 0x93, 0x61, 0x00, 0x70, + 0x2f, 0xff, 0x63, 0xf8, 0x2e, 0x1d, 0x0e, 0xf0, 0x7f, 0x00, 0x18, 0x1d, + 0x04, 0xd8, 0x19, 0x0f, 0x01, 0x7f, 0x58, 0xc9, 0x62, 0x08, 0x15, 0x5e, + 0x61, 0x53, 0x06, 0x78, 0x19, 0xc0, 0xd0, 0x7c, 0x06, 0xb7, 0x0c, 0xd3, + 0x74, 0xce, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0x8f, 0x4f, 0xfd, + 0x30, 0x04, 0x3f, 0x2f, 0xf9, 0x03, 0x1f, 0xfd, 0x10, 0x03, 0x14, 0xff, + 0x10, 0x05, 0xf6, 0x7f, 0x4a, 0x0d, 0x38, 0x0c, 0x0c, 0x0d, 0x20, 0x06, + 0x0d, 0x20, 0x05, 0x0d, 0x04, 0x0d, 0xa0, 0xf1, 0x1b, 0xce, 0x00, 0x3f, + 0xff, 0x01, 0x0b, 0x54, 0x0b, 0x20, 0x01, 0x01, 0x20, 0x06, 0x0c, 0x20, + 0x05, 0x01, 0x01, 0x4a, 0x02, 0x30, 0x2c, 0x0d, 0x02, 0x20, 0x06, 0x06, + 0x20, 0x05, 0x02, 0x21, 0x02, 0x03, 0x30, 0x14, 0x01, 0x03, 0x03, 0x04, + 0x40, 0x05, 0xc2, 0x20, 0x07, 0x30, 0x14, 0x02, 0x04, 0x04, 0x01, 0x40, + 0x05, 0x04, 0x21, 0x04, 0x05, 0x30, 0x14, 0x03, 0x05, 0x05, 0x02, 0x40, + 0x05, 0x10, 0x05, 0x05, 0x06, 0x30, 0x14, 0x04, 0x06, 0x06, 0x03, 0x89, + 0x40, 0x05, 0x06, 0x06, 0x07, 0x30, 0x14, 0x05, 0x07, 0x40, 0x06, 0x04, + 0x07, 0x07, 0x07, 0x07, 0x08, 0x30, 0x14, 0x06, 0x08, 0xa2, 0x20, 0x06, + 0x07, 0x20, 0x05, 0x08, 0x08, 0x09, 0x30, 0x14, 0x07, 0x51, 0x09, 0x20, + 0x06, 0x0b, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x14, 0x34, 0x08, 0x0a, + 0x40, 0x06, 0x38, 0xda, 0x0b, 0x30, 0x14, 0x09, 0x0b, 0xf8, 0x40, 0x06, + 0x30, 0xaa, 0xf8, 0xef, 0xf0, 0xe7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x60, 0x15, 0x01, + 0x11, 0x21, 0x00, 0x00, 0x30, 0x01, 0x15, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x05, 0x03, 0x40, + 0xcb, 0x00, 0x00, 0x00, 0x02, 0x15, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, + 0x30, 0xc8, 0x30, 0xea, 0x20, 0x03, 0xfb, 0x30, 0xad, 0x00, 0x30, 0xe3, + 0x30, 0xd4, 0x30, 0xbf, 0x30, 0xeb, 0x40, 0x30, 0x05, 0x78, 0x2d, 0x44, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x10, 0x74, 0x00, 0x72, 0x20, 0x07, 0x74, + 0x00, 0x6f, 0x00, 0x01, 0x20, 0x00, 0x43, 0x00, 0x61, 0x00, 0x70, 0x40, + 0x0d, 0x16, 0x61, 0x00, 0x6c, 0x05, 0xc0, 0x7f, 0x63, 0x20, 0x87, 0xf0, + 0x7f, 0x20, 0x0a, 0x00, 0x64, 0x00, 0x65, 0x20, 0x95, 0x53, 0x20, 0x95, + 0x6e, 0x8d, 0x40, 0x93, 0x20, 0x00, 0x46, 0x40, 0x11, 0x50, 0x17, 0x42, + 0x20, 0xb3, 0x46, 0x67, 0x20, 0xb7, 0x74, 0x00, 0xe1, 0x02, 0x49, 0x60, + 0xb0, 0x3f, 0x20, 0xad, 0x21, 0x0d, 0x2e, 0x20, 0xff, 0x2e, 0x05, 0xa9, + 0xaa, 0x91, 0x7f, 0x65, 0x21, 0x85, 0xa0, 0x00, 0x31, 0x81, 0x65, 0x0c, + 0xc1, 0xff, 0xe2, 0x6c, 0xe5, 0x54, 0x27, 0x01, 0x59, 0x96, 0x99, 0xfd, + 0x90, 0x3a, 0x53, 0x06, 0x3b, 0x21, 0x00, 0x5c, 0xcf, 0x6c, 0xb8, 0x44, + 0xbe, 0x44, 0xc5, 0x00, 0x20, 0x00, 0x18, 0xc2, 0xc4, 0xb3, 0xfc, 0xc8, + 0xa3, 0x05, 0xfb, 0xa5, 0x48, 0x23, 0x73, 0x6f, 0x00, 0x66, 0x22, 0xe5, + 0x33, 0x85, 0x51, 0x65, 0x42, 0xed, 0x6c, 0x23, 0x93, 0x6a, 0x00, 0x6b, + 0x42, 0x8f, 0xc0, 0xd3, 0x1d, 0x0c, 0x13, 0xff, 0x21, 0x04, 0x42, 0x04, + 0x3e, 0x04, 0x00, 0x3b, 0x04, 0x38, 0x04, 0x47, 0x04, 0x3d, 0x04, 0x00, + 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x04, 0x00, 0x3a, 0x04, 0x40, + 0x04, 0x43, 0x04, 0x33, 0x04, 0xc0, 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0x30, + 0x7f, 0x01, 0x10, 0x0f, 0x05, 0x0f, 0x10, 0x04, 0x01, 0x01, 0x12, 0x10, + 0x1d, 0x20, 0x05, 0x01, 0x01, 0x81, 0x58, 0x17, 0x03, 0x15, 0xaf, 0x30, + 0xf3, 0x30, 0x38, 0x1b, 0x10, 0xca, 0x30, 0xde, 0x28, 0x0d, 0xab, 0x30, + 0x0c, 0x77, 0x8a, 0x05, 0xdf, 0xbf, 0x43, 0x00, 0x75, 0x27, 0x6f, 0x64, + 0x28, 0x1d, 0x6e, 0xaa, 0x28, 0x0f, 0x6d, 0x28, 0x13, 0x72, 0x27, 0x9f, + 0x61, 0x10, 0x15, 0x80, 0x7f, 0x06, 0x00, 0x66, 0xea, 0x8f, 0xb3, 0x7e, + 0x6c, 0x9a, 0x61, 0x30, 0x53, 0x01, 0x05, 0xe2, 0xf9, 0x5f, 0xff, 0xe4, + 0xcf, 0x14, 0xb5, 0x00, 0x98, 0xb0, 0xc8, 0xb9, 0x74, 0xb9, 0x74, 0xce, + 0x34, 0x20, 0x00, 0x06, 0x18, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x27, 0xff, + 0x3d, 0x04, 0x41, 0x34, 0x28, 0x17, 0x3d, 0x04, 0x30, 0x04, 0x3c, 0x20, + 0x03, 0x58, 0x40, 0x28, 0x15, 0x30, 0x05, 0x28, 0x11, 0x10, 0x17, 0x54, + 0xff, 0x02, 0x0f, 0x0e, 0x82, 0x20, 0x01, 0x02, 0x02, 0x0e, 0x0f, 0x13, + 0x20, 0x05, 0x02, 0x08, 0x02, 0x45, 0x03, 0x52, 0x28, 0x17, 0x04, 0x15, + 0xa2, 0xad, 0x28, 0x0f, 0xbd, 0x28, 0x15, 0xb9, 0x06, 0x08, 0x11, 0x5f, + 0xff, 0x41, 0x48, 0x0b, 0x6f, 0x7a, 0x2f, 0x75, 0x38, 0x17, 0x73, 0x06, + 0xc0, 0x7f, 0x04, 0xdf, 0x19, 0x09, 0x10, 0xff, 0x0e, 0x30, 0x7f, 0x03, + 0x9a, 0x4e, 0x6c, 0x9a, 0x59, 0x5b, 0x06, 0x58, 0x13, 0x4f, 0x2f, 0x00, + 0xc5, 0xc8, 0xb9, 0x8c, 0xc1, 0x98, 0xb0, 0xa4, 0x68, 0xc2, 0x06, 0x38, + 0x15, 0x0f, 0x12, 0x7f, 0x10, 0x48, 0x0b, 0x37, 0x04, 0x3e, 0xb8, 0x48, + 0x17, 0x41, 0x05, 0x88, 0x0f, 0x10, 0x07, 0x73, 0xff, 0x0e, 0xf5, 0x7f, + 0x03, 0x01, 0x01, 0xa4, 0x20, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x20, + 0x07, 0xfd, 0x44, 0x08, 0xce, 0x00, 0x00, 0x05, 0x28, 0x17, 0xf3, 0x30, + 0xc6, 0x00, 0x30, 0xa3, 0x30, 0xaa, 0x30, 0xad, 0x30, 0xa2, 0xa8, 0x06, + 0x28, 0x1b, 0x41, 0x2f, 0xad, 0x74, 0x2f, 0xad, 0x6f, 0x00, 0x71, 0xb0, + 0x2f, 0xb9, 0x69, 0x05, 0xaf, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0x89, 0x5b, + 0xd0, 0x63, 0x02, 0x65, 0x59, 0xfa, 0x57, 0x9a, 0x4e, 0x06, 0x58, 0x1b, + 0x48, 0x00, 0xc5, 0xf0, 0xd2, 0x24, 0xc6, 0xa4, 0xd0, 0x44, 0x68, 0xc5, + 0x06, 0x78, 0x17, 0x0e, 0xd3, 0x7f, 0x10, 0x28, 0x0f, 0x42, 0x04, 0x38, + 0xac, 0x28, 0x17, 0x3a, 0x20, 0x05, 0x4f, 0x06, 0x28, 0x17, 0x10, 0x16, + 0xd4, 0xff, 0x04, 0x02, 0x50, 0x02, 0x20, 0x01, 0x04, 0x40, 0x06, 0x04, + 0x04, 0x04, 0x04, 0x01, 0x79, 0x04, 0x4a, 0xca, 0x00, 0x00, 0x06, 0x28, + 0x17, 0x06, 0xe9, 0x30, 0xa6, 0x30, 0xab, 0x06, 0x28, 0x11, 0x7f, 0xaf, + 0x72, 0x8c, 0x2f, 0xaf, 0x75, 0x00, 0x63, 0x06, 0x08, 0x11, 0x10, 0x0f, + 0x50, 0x7f, 0x3f, 0x96, 0x0c, 0xb3, 0x52, 0x61, 0x53, 0x06, 0x58, 0x13, + 0x3f, 0xff, 0x44, 0xc5, 0x03, 0x7c, 0xb7, 0xb0, 0xc6, 0x74, 0xce, 0x06, + 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x01, 0x10, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x43, 0x28, 0x15, 0x62, 0x30, 0x06, 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, + 0x05, 0x03, 0x03, 0x20, 0x01, 0x05, 0x80, 0x40, 0x06, 0x05, 0x05, 0x05, + 0x05, 0x0a, 0x05, 0xaf, 0x0a, 0xcd, 0x00, 0x00, 0x07, 0x28, 0x17, 0xc8, + 0x28, 0x19, 0xf3, 0x02, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0xb3, 0x06, 0x28, + 0x1d, 0x41, 0x8b, 0x2f, 0xad, 0x6c, 0x00, 0xe1, 0x6f, 0xb5, 0x63, 0x2f, + 0xb7, 0x06, 0x30, 0x7f, 0x6c, 0x61, 0x6f, 0xb5, 0x3f, 0xb3, 0x65, 0x0e, + 0x20, 0xff, 0x0e, 0x90, 0x7f, 0x27, 0x59, 0x08, 0x7f, 0x89, 0x0b, 0x6d, + 0x06, 0xb8, 0x17, 0xc0, 0xd2, 0x80, 0x06, 0xb7, 0xf0, 0xd2, 0x54, 0xcf, + 0x06, 0x58, 0x19, 0x0e, 0xf2, 0x7f, 0x10, 0x0a, 0x04, 0x42, 0x04, 0x3b, + 0x28, 0x19, 0x3d, 0x20, 0x07, 0x38, 0xb8, 0x28, 0x1d, 0x3e, 0x05, 0xe8, + 0x1d, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x06, 0x05, 0x04, 0x01, + 0x04, 0x04, 0x05, 0x06, 0x06, 0x04, 0x05, 0x30, 0x05, 0x00, 0x06, 0x06, + 0xcb, 0x07, 0xd0, 0xca, 0x00, 0x00, 0x00, 0x08, 0x15, 0xdc, 0x30, 0xea, + 0x30, 0xfc, 0x30, 0x1a, 0xd0, 0x30, 0xeb, 0x06, 0x28, 0x13, 0x3f, 0xff, + 0x42, 0x28, 0x09, 0x6c, 0x0a, 0x00, 0xed, 0x00, 0x76, 0x2f, 0xb5, 0x72, + 0x10, 0x16, 0x20, 0x7f, 0xbb, 0x01, 0x73, 0x29, 0x52, 0xe6, 0x74, 0x14, + 0x5c, 0x06, 0x78, 0x19, 0x00, 0xfc, 0xbc, 0xac, 0xb9, 0x14, 0xbc, 0x74, + 0xb9, 0xd5, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x11, 0x28, 0x09, 0x3b, + 0x28, 0x11, 0x32, 0x28, 0x1b, 0x62, 0x40, 0x05, 0xe8, 0x13, 0x10, 0x17, + 0x34, 0xff, 0x07, 0x06, 0x05, 0x20, 0x01, 0x07, 0x41, 0x07, 0x50, 0x05, + 0x07, 0x07, 0x65, 0x07, 0x4e, 0x28, 0x17, 0x46, 0x09, 0x28, 0x17, 0xe4, + 0x30, 0xab, 0x06, 0x68, 0x13, 0x78, 0x17, 0x79, 0xb0, 0x2f, 0xaf, 0x63, + 0x2f, 0x33, 0x10, 0x16, 0x30, 0x7f, 0x5a, 0x53, 0x9a, 0x4e, 0x20, 0x61, + 0x53, 0x06, 0x78, 0x15, 0x00, 0x00, 0xf4, 0xbc, 0x7c, 0x1c, 0xc5, 0x74, + 0xce, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x38, 0x17, 0x4f, 0x04, 0x62, + 0x3a, 0x28, 0x15, 0x10, 0x1e, 0x54, 0xff, 0x08, 0x07, 0x06, 0x20, 0x01, + 0x08, 0x40, 0x08, 0x50, 0x05, 0x08, 0x08, 0xef, 0x03, 0xd4, 0xcb, 0x00, + 0x00, 0x00, 0x0a, 0x15, 0xab, 0x30, 0xeb, 0x30, 0x14, 0xc0, 0x30, 0xb9, + 0x06, 0x88, 0x19, 0x43, 0x2f, 0xa7, 0x6c, 0x00, 0x50, 0x64, 0x2f, 0xad, + 0x73, 0x10, 0x16, 0x40, 0x7f, 0x61, 0x53, 0x14, 0x5c, 0x08, 0xbe, 0x8f, + 0xaf, 0x65, 0x06, 0x78, 0x19, 0x7c, 0xce, 0xe4, 0x1a, 0xb2, 0xa4, 0xc2, + 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x11, 0x3b, 0x2c, 0x04, + 0x34, 0x28, 0x17, 0x41, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x09, + 0x08, 0x41, 0x07, 0x20, 0x01, 0x09, 0x09, 0x07, 0x08, 0x0e, 0x20, 0x05, + 0x00, 0x09, 0x09, 0x9a, 0x03, 0x4c, 0xca, 0x00, 0x00, 0x46, 0x0b, 0x28, + 0x17, 0xb1, 0x30, 0xbf, 0x06, 0x88, 0x15, 0x58, 0x17, 0x71, 0x03, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x74, 0x06, 0x4f, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, + 0x02, 0x61, 0x53, 0x4b, 0x51, 0x54, 0x58, 0x06, 0x78, 0x15, 0x00, 0x01, + 0x00, 0x74, 0xce, 0x00, 0xcf, 0xc0, 0xd0, 0x06, 0xd8, 0x17, 0xc0, 0x0e, + 0xb3, 0x7f, 0x38, 0x17, 0x3a, 0x04, 0x4c, 0x04, 0x35, 0x04, 0x62, 0x42, + 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x0a, 0x09, 0x08, 0x20, 0x01, 0x0a, + 0x08, 0x0a, 0x08, 0x09, 0x0d, 0x20, 0x05, 0x0a, 0x0a, 0x26, 0x28, 0x01, + 0x3b, 0x28, 0x17, 0x0c, 0x28, 0x17, 0xa6, 0x30, 0xab, 0x8c, 0x06, 0xe8, + 0x17, 0x75, 0x00, 0x63, 0x2f, 0xb5, 0x10, 0x16, 0x50, 0x7f, 0x03, 0x80, + 0x30, 0x61, 0x53, 0x06, 0x98, 0x15, 0x38, 0x17, 0xb0, 0xc6, 0x74, 0xce, + 0xee, 0x06, 0xd8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x43, 0x28, 0x19, + 0x06, 0x38, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0b, 0x34, 0x0b, 0x0a, 0x20, + 0x01, 0x30, 0x05, 0x10, 0x20, 0x05, 0x0b, 0x0b, 0x00, 0xc4, 0x01, 0x8b, + 0xc9, 0x00, 0x00, 0x0d, 0x15, 0x04, 0xbb, 0x30, 0xb5, 0x30, 0xeb, 0x06, + 0xc8, 0x17, 0x65, 0x00, 0x50, 0x73, 0x2f, 0xb3, 0x72, 0x10, 0x16, 0x60, + 0x7f, 0x5e, 0x58, 0x28, 0x84, 0x20, 0x14, 0x5c, 0x06, 0x98, 0x19, 0x38, + 0xc1, 0xac, 0xc0, 0x74, 0x60, 0xb9, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, + 0x21, 0x04, 0x35, 0x04, 0x41, 0xb1, 0x28, 0x1b, 0x40, 0x06, 0x88, 0x17, + 0x10, 0x16, 0xd4, 0xff, 0x0c, 0x0c, 0x0b, 0x20, 0x01, 0xa0, 0x30, 0x05, + 0x1c, 0x20, 0x05, 0x0c, 0x0c, 0x73, 0x07, 0xea, 0x00, 0xcb, 0x00, 0x00, + 0x0e, 0x15, 0xc1, 0x30, 0xe7, 0x22, 0x30, 0xb3, 0x06, 0xc8, 0x17, 0x68, + 0x00, 0x6f, 0x2f, 0xaf, 0xf3, 0x84, 0x10, 0x16, 0x60, 0x7f, 0x54, 0x4e, + 0xd1, 0x79, 0x06, 0x98, 0x15, 0x00, 0x00, 0x0c, 0x08, 0xcd, 0x54, 0xcf, + 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x27, 0x04, 0x18, 0x3e, 0x04, 0x3a, + 0x20, 0x03, 0x10, 0x1e, 0x74, 0xff, 0x0d, 0x0d, 0x0c, 0xd8, 0x20, 0x01, + 0x30, 0x05, 0x21, 0x20, 0x05, 0x20, 0x0d, 0x04, 0x7d, 0xc9, 0x00, 0x00, + 0x00, 0x0f, 0x15, 0xb3, 0x30, 0xeb, 0x30, 0x14, 0xc9, 0x30, 0xd0, 0x06, + 0x88, 0x19, 0x43, 0x28, 0x11, 0x72, 0x00, 0x58, 0x64, 0x28, 0x1b, 0x62, + 0x2f, 0xb5, 0x10, 0x16, 0x10, 0x7f, 0xd1, 0x79, 0x14, 0x04, 0x5c, 0x1a, + 0x59, 0xe6, 0x74, 0x06, 0x78, 0x1b, 0x54, 0xcf, 0x03, 0x74, 0xb9, 0xc4, + 0xb3, 0x14, 0xbc, 0x06, 0x78, 0x1b, 0x07, 0x13, 0x7f, 0x54, 0x6f, 0x63, + 0xff, 0x76, 0x06, 0x43, 0xff, 0x1a, 0x28, 0x17, 0x40, 0x04, 0x46, 0x34, + 0x28, 0x1d, 0x31, 0x04, 0x30, 0x06, 0x28, 0x1d, 0x10, 0x16, 0xf4, 0xff, + 0x0e, 0x34, 0x0e, 0x0d, 0x20, 0x01, 0x30, 0x05, 0x12, 0x20, 0x05, 0x0e, + 0x0e, 0x00, 0x3a, 0x06, 0x09, 0xca, 0x00, 0x00, 0x10, 0x15, 0x05, 0xb0, + 0x30, 0xa2, 0x30, 0xd3, 0x20, 0x03, 0xec, 0x06, 0x68, 0x19, 0x11, 0x47, + 0x00, 0x75, 0x28, 0x0f, 0x76, 0x00, 0x69, 0x28, 0x15, 0x10, 0x72, 0x00, + 0x65, 0x10, 0x16, 0x00, 0x7f, 0xdc, 0x74, 0xf4, 0x7e, 0x08, 0x9a, 0x4e, + 0xf7, 0x96, 0x06, 0x78, 0x17, 0xfc, 0xac, 0x44, 0x06, 0xbe, 0x44, 0xc5, + 0x08, 0xb8, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x13, 0x22, 0x04, 0x43, + 0x28, 0x0f, 0x32, 0x04, 0x38, 0x28, 0x15, 0x40, 0x30, 0x04, 0x35, 0x06, + 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0f, 0x12, 0x11, 0x11, 0x01, 0x11, + 0x12, 0x0f, 0x0f, 0x11, 0x12, 0x0a, 0x20, 0x05, 0x00, 0x0f, 0x0f, 0xd3, + 0x01, 0x58, 0xcc, 0x00, 0x00, 0x46, 0x11, 0x48, 0x17, 0xa4, 0x30, 0xcb, + 0x28, 0x1d, 0x06, 0xb8, 0x17, 0x69, 0x0c, 0x00, 0x6e, 0x00, 0xed, 0x06, + 0x4f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0x02, 0x0a, 0x4f, 0x3c, + 0x5c, 0x9a, 0x4e, 0x06, 0x98, 0x17, 0x74, 0x07, 0xc7, 0xc8, 0xb2, 0x44, + 0xc5, 0x06, 0xd8, 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x01, 0x38, 0x04, + 0x3d, 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x08, 0x15, 0x84, 0x10, 0x17, 0x14, + 0xff, 0x10, 0x11, 0x10, 0x10, 0x30, 0x03, 0x0f, 0x11, 0x40, 0x0b, 0x30, + 0x09, 0x10, 0xbf, 0x02, 0xb3, 0xcf, 0x00, 0x00, 0x00, 0x12, 0x15, 0xa6, + 0x30, 0xa3, 0x30, 0xe9, 0xd1, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x48, 0x2f, + 0xaf, 0x69, 0x00, 0x6c, 0x06, 0x48, 0x13, 0x81, 0x10, 0x0f, 0x30, 0x7f, + 0x4c, 0x4e, 0x0a, 0x4f, 0xc9, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, + 0xb0, 0xc6, 0x7c, 0xc7, 0x7c, 0xb7, 0xd6, 0x06, 0x78, 0x15, 0x0f, 0x13, + 0x7f, 0x23, 0x28, 0x13, 0x3b, 0x28, 0x19, 0x10, 0x1e, 0x74, 0xff, 0x11, + 0x00, 0x13, 0x12, 0x12, 0x12, 0x13, 0x11, 0x11, 0x13, 0x20, 0x13, 0x20, + 0x20, 0x05, 0x11, 0x11, 0x15, 0x02, 0x6f, 0x40, 0xca, 0x2b, 0x2d, 0x15, + 0xb0, 0x30, 0xa2, 0x30, 0xd2, 0x2a, 0x30, 0xfc, 0x06, 0x88, 0x1b, 0x4c, + 0x2f, 0xad, 0x20, 0x6f, 0xb5, 0x6a, 0xb0, 0x2f, 0xb7, 0x72, 0x05, 0xef, + 0xb5, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0x0c, 0x5e, 0x81, 0x06, 0xb8, + 0x17, 0x7c, 0xb7, 0xfc, 0xac, 0x88, 0xd7, 0x06, 0x98, 0x19, 0xc5, 0x06, + 0x93, 0x79, 0x07, 0x53, 0xff, 0x13, 0x04, 0x43, 0x28, 0x15, 0x45, 0x28, + 0x1d, 0x60, 0x40, 0x06, 0x48, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x14, + 0x14, 0x13, 0x13, 0x02, 0x14, 0x12, 0x12, 0x10, 0x14, 0x0c, 0x20, 0x05, + 0x12, 0x00, 0x12, 0x35, 0x08, 0x28, 0xcc, 0x00, 0x00, 0x14, 0x00, 0x15, + 0xde, 0x30, 0xb0, 0x30, 0xc0, 0x30, 0xec, 0xa8, 0x28, 0x19, 0xca, 0x06, + 0x48, 0x19, 0x4d, 0x2f, 0xa9, 0x67, 0x00, 0x64, 0x83, 0x2f, 0xaf, 0x6c, + 0x00, 0x65, 0x00, 0x6e, 0x06, 0x0f, 0xb7, 0x10, 0x0e, 0xf0, 0x7f, 0x00, + 0x6c, 0x9a, 0x3c, 0x68, 0xbe, 0x8f, 0xf7, 0x96, 0x20, 0xa3, 0x90, 0x06, + 0x58, 0x1b, 0xc8, 0xb9, 0xf8, 0xad, 0xec, 0x06, 0xb2, 0x08, 0xb8, 0x98, + 0xb0, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1c, 0x88, 0x28, 0x15, 0x33, + 0x04, 0x34, 0x28, 0x1b, 0x3b, 0x04, 0x35, 0x30, 0x04, 0x3d, 0x06, 0x08, + 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x13, 0x15, 0x15, 0x14, 0x28, 0x14, 0x15, + 0x28, 0x1a, 0x15, 0x30, 0x05, 0x13, 0x13, 0xff, 0x00, 0x07, 0x3c, 0xcb, + 0x00, 0x00, 0x15, 0x15, 0xe1, 0x31, 0x30, 0xbf, 0x06, 0x48, 0x0f, 0x98, + 0x17, 0x65, 0x00, 0x74, 0x06, 0x4c, 0xa9, 0x86, 0x10, 0x0f, 0x50, 0x7f, + 0x85, 0x68, 0x54, 0x58, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x54, 0x1a, 0xba, + 0xc0, 0xd0, 0x06, 0x58, 0x11, 0x0f, 0x53, 0x7f, 0x1c, 0x28, 0x0d, 0x42, + 0xc0, 0x06, 0x08, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x14, 0x16, 0x16, 0x15, + 0x15, 0x16, 0xa0, 0x28, 0x1a, 0x16, 0x30, 0x05, 0x14, 0x14, 0xf4, 0x02, + 0xa4, 0x80, 0x28, 0x17, 0x16, 0x15, 0xca, 0x30, 0xea, 0x30, 0xfc, 0x0a, + 0x30, 0xcb, 0x30, 0xe7, 0x06, 0x68, 0x1d, 0x4e, 0x2f, 0xaf, 0x72, 0x03, + 0x00, 0x69, 0x00, 0xf1, 0x00, 0x6f, 0x06, 0x48, 0x9c, 0x10, 0x0e, 0xf0, + 0x7f, 0x00, 0xb3, 0x7e, 0xcc, 0x91, 0x3c, 0x5c, 0x65, 0x59, 0x81, 0x06, + 0x78, 0x1b, 0x98, 0xb0, 0xac, 0xb9, 0xe8, 0xb1, 0x06, 0x98, 0x19, 0xa0, + 0x0e, 0xf3, 0x7f, 0x1d, 0x28, 0x13, 0x40, 0x04, 0x38, 0x04, 0x3d, 0x0c, + 0x04, 0x4c, 0x04, 0x3e, 0x06, 0x28, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x15, + 0x17, 0x0a, 0x17, 0x16, 0x16, 0x17, 0x28, 0x1a, 0x17, 0x30, 0x05, 0x15, + 0x00, 0x15, 0xdc, 0x00, 0x0c, 0xc9, 0x00, 0x00, 0x17, 0x00, 0x15, 0xce, + 0x30, 0xeb, 0x30, 0xc6, 0x30, 0xfb, 0x20, 0x30, 0xc7, 0x20, 0x03, 0xb5, + 0x30, 0xf3, 0x30, 0xbf, 0xb5, 0x20, 0x03, 0xc7, 0x20, 0x13, 0x05, 0x78, + 0x25, 0x4e, 0x28, 0x0f, 0x72, 0x2f, 0xb1, 0x05, 0x65, 0x00, 0x20, 0x00, + 0x64, 0x40, 0x05, 0x53, 0x2f, 0xbd, 0x54, 0x6e, 0x4f, 0xc3, 0x6e, 0x40, + 0x11, 0x72, 0x10, 0x14, 0xc0, 0x7f, 0x17, 0x53, 0x02, 0x51, 0x68, 0x66, + 0x57, 0xb7, 0x5f, 0x06, 0x78, 0x17, 0x78, 0x00, 0xb1, 0x74, 0xb9, 0x4c, + 0xd1, 0x70, 0xb3, 0xb0, 0x01, 0xc0, 0xc4, 0xd0, 0x70, 0xb3, 0x74, 0xb9, + 0x05, 0xf8, 0x21, 0xa0, 0x0e, 0xf3, 0x7f, 0x1d, 0x28, 0x0d, 0x40, 0x04, + 0x42, 0x04, 0x35, 0x0a, 0x04, 0x2d, 0x00, 0x34, 0x40, 0x05, 0x21, 0x28, + 0x29, 0x3d, 0xec, 0x20, 0x11, 0x30, 0x05, 0x30, 0x11, 0x40, 0x04, 0xc8, + 0x2d, 0x10, 0x16, 0xf4, 0xff, 0x16, 0x18, 0x0a, 0x18, 0x17, 0x17, 0x18, + 0x28, 0x1a, 0x18, 0x30, 0x05, 0x16, 0x00, 0x16, 0x9b, 0x05, 0x71, 0xcc, + 0x00, 0x00, 0x18, 0x00, 0x15, 0xd7, 0x30, 0xc8, 0x30, 0xa5, 0x30, 0xde, + 0x0c, 0x30, 0xa4, 0x30, 0xaa, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x50, 0x00, + 0x45, 0x75, 0x28, 0x15, 0x75, 0x00, 0x6d, 0x2f, 0xb7, 0x79, 0x06, 0x2f, + 0xb3, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x6e, 0x66, 0xfe, 0x56, 0x6c, 0x9a, + 0xa6, 0x40, 0x7e, 0x06, 0x88, 0x17, 0xd4, 0x2c, 0xd2, 0xc8, 0xb9, 0x94, + 0x62, 0xc6, 0x05, 0xf8, 0x0f, 0x0f, 0x73, 0x7f, 0x1f, 0x04, 0x43, 0x28, + 0x15, 0x43, 0x2c, 0x04, 0x3c, 0x28, 0x0d, 0x39, 0x28, 0x23, 0x10, 0x1d, + 0xf4, 0xff, 0x17, 0x19, 0x0a, 0x19, 0x18, 0x18, 0x19, 0x28, 0x1a, 0x19, + 0x30, 0x05, 0x17, 0x00, 0x17, 0xd1, 0x00, 0x7f, 0xc9, 0x00, 0x00, 0x19, + 0x00, 0x15, 0xad, 0x30, 0xf3, 0x30, 0xc7, 0x30, 0xa3, 0x8a, 0x06, 0x68, + 0x15, 0x00, 0x00, 0x51, 0x28, 0x17, 0x69, 0x4f, 0x99, 0xed, 0xc0, 0x06, + 0x28, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0xd1, 0x91, 0xea, 0x8f, 0x65, 0x59, + 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0xa8, 0xd0, 0x14, 0xb5, 0x24, 0xc0, + 0x06, 0x88, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x70, 0x34, 0x20, 0x05, 0x06, 0x18, 0x13, 0x10, 0x17, 0x34, 0xff, 0x18, + 0x1a, 0x1a, 0x19, 0x24, 0x19, 0x1a, 0x28, 0x1a, 0x1a, 0x11, 0x20, 0x05, + 0x18, 0x18, 0x08, 0x39, 0x03, 0x2f, 0xca, 0x23, 0x15, 0x15, 0xea, 0x30, + 0x01, 0xb5, 0x30, 0xe9, 0x30, 0xeb, 0x30, 0xc0, 0x06, 0x68, 0x17, 0x55, + 0x52, 0x28, 0x15, 0x73, 0x2f, 0xab, 0x72, 0x2f, 0xaf, 0x6c, 0x28, 0x1d, + 0x40, 0x61, 0x10, 0x15, 0xe0, 0x7f, 0x29, 0x52, 0x28, 0x84, 0xc9, 0x62, + 0x08, 0x14, 0x5c, 0xbe, 0x8f, 0x06, 0x58, 0x1b, 0xac, 0xb9, 0xac, 0x06, + 0xc0, 0x84, 0xb7, 0xe4, 0xb2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x20, + 0x82, 0x28, 0x17, 0x41, 0x04, 0x30, 0x04, 0x40, 0x20, 0x03, 0x3b, 0x2c, + 0x04, 0x4c, 0x28, 0x21, 0x30, 0x05, 0xc8, 0x1f, 0x10, 0x16, 0xf4, 0xff, + 0x19, 0x1b, 0x09, 0x1b, 0x1a, 0x1a, 0x1b, 0x28, 0x1a, 0x1b, 0x19, 0x20, + 0x05, 0x04, 0x19, 0x19, 0x6c, 0x03, 0x2c, 0x28, 0x17, 0x1b, 0x15, 0x01, + 0xb5, 0x30, 0xf3, 0x30, 0xfb, 0x30, 0xa2, 0x20, 0x05, 0x05, 0xc9, 0x30, + 0xec, 0x30, 0xb9, 0x20, 0x0b, 0xa4, 0x20, 0x0f, 0x01, 0xd7, 0x30, 0xed, + 0x30, 0xd3, 0x30, 0xc7, 0x20, 0x1b, 0x68, 0xb7, 0x20, 0x1b, 0x04, 0xb8, + 0x31, 0x41, 0x28, 0x11, 0x63, 0x00, 0x68, 0xa8, 0x2f, 0xb3, 0x70, 0x2f, + 0xb7, 0xe9, 0x28, 0x1b, 0x61, 0x00, 0x67, 0xaa, 0x2f, 0xb9, 0x20, 0x2f, + 0xc1, 0x65, 0x20, 0x05, 0x53, 0x28, 0x33, 0x6e, 0xa8, 0x20, 0x0d, 0x41, + 0x4f, 0xd3, 0x72, 0x20, 0x21, 0x73, 0x00, 0x2c, 0xa3, 0x20, 0x1d, 0x50, + 0x28, 0x49, 0x6f, 0x00, 0x76, 0x2f, 0xeb, 0x30, 0x27, 0x51, 0x6e, 0x20, + 0x43, 0x69, 0x28, 0x5d, 0x20, 0x00, 0x79, 0x80, 0x33, 0x5b, 0x74, 0x40, + 0x0f, 0x43, 0x28, 0x73, 0x30, 0x09, 0x6c, 0x4f, 0x95, 0x00, 0x18, 0x75, + 0x5b, 0xce, 0x28, 0x8d, 0x65, 0x28, 0x99, 0x02, 0x70, 0x6f, 0x65, 0x20, + 0x67, 0x00, 0xb0, 0x71, 0x6f, 0x65, 0x00, 0xef, 0xff, 0x00, 0x30, 0xdf, + 0x20, 0x2f, 0xc3, 0x3f, 0xc1, 0x00, 0x70, 0xe5, 0x03, 0xbf, 0xd6, 0xf0, + 0x00, 0x50, 0x7f, 0x31, 0x79, 0x05, 0x10, 0x7b, 0x07, 0x31, 0xff, 0x23, + 0x57, 0x89, 0x5b, 0x00, 0xb7, 0x5f, 0xc8, 0x70, 0xaf, 0x65, 0x2d, 0x00, + 0x00, 0x6e, 0x66, 0x57, 0x7f, 0xf4, 0x7e, 0x7b, 0x76, 0x08, 0x7f, 0x89, + 0x9a, 0x4e, 0x05, 0x78, 0x25, 0xb0, 0xc0, 0x48, 0x00, 0xc5, 0xdc, 0xb4, + 0x08, 0xb8, 0xa4, 0xc2, 0x20, 0x00, 0x00, 0x74, 0xc7, 0x20, 0x00, 0x04, + 0xd5, 0x5c, 0x00, 0xb8, 0x44, 0xbe, 0x74, 0xb3, 0xdc, 0xc2, 0x44, 0x7d, + 0xc5, 0x05, 0x38, 0x2b, 0x00, 0x71, 0xff, 0x33, 0x73, 0x05, 0x32, 0x01, + 0x33, 0xff, 0x71, 0x4f, 0x33, 0x44, 0x70, 0x06, 0x23, 0xfd, 0x00, 0x00, + 0x21, 0x28, 0x13, 0x3d, 0x04, 0x15, 0x2d, 0x00, 0x10, 0x20, 0x05, 0x34, + 0x28, 0x1d, 0x35, 0x28, 0x25, 0x14, 0x2d, 0x00, 0x38, 0x20, 0x11, 0x1f, + 0x28, 0x2b, 0x3e, 0x04, 0x51, 0x32, 0x28, 0x37, 0x34, 0x20, 0x15, 0x3d, + 0x04, 0x46, 0x28, 0x41, 0x70, 0x4f, 0x04, 0x08, 0x33, 0x06, 0xf4, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x04, 0x13, 0x1b, 0x24, 0x1b, 0x04, 0x28, + 0x1a, 0x04, 0x1a, 0x20, 0x05, 0x1a, 0x1a, 0x01, 0xf2, 0x08, 0xe7, 0xc5, + 0x00, 0x00, 0x1c, 0x48, 0x17, 0x47, 0xbf, 0x28, 0x1b, 0xc7, 0x30, 0xeb, + 0x04, 0xc7, 0xff, 0x00, 0xd7, 0x17, 0x37, 0xc3, 0xb0, 0x37, 0xf7, 0x65, + 0x2f, 0xb7, 0x10, 0x15, 0xd0, 0x7f, 0x51, 0x68, 0x66, 0x57, 0x30, 0xb7, + 0x5f, 0x05, 0x78, 0x05, 0x00, 0x38, 0x17, 0xc4, 0xd0, 0x70, 0xb3, 0x3b, + 0x74, 0xb9, 0x05, 0x38, 0x03, 0x10, 0x00, 0x33, 0x7f, 0x58, 0x17, 0x42, + 0x48, 0x1d, 0x37, 0xff, 0x62, 0x40, 0x04, 0x07, 0xf9, 0x10, 0x18, 0xd4, + 0xff, 0x1b, 0x1c, 0x1c, 0x20, 0x01, 0x1b, 0xa0, 0x20, 0x06, 0x1b, 0x20, + 0x05, 0x1b, 0x1b, 0x11, 0x05, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x1d, 0x15, + 0xb9, 0x30, 0xaf, 0x35, 0x30, 0xec, 0x06, 0x48, 0x11, 0x7f, 0x2f, 0x75, + 0x2f, 0xeb, 0x72, 0x01, 0x0f, 0x57, 0x81, 0x10, 0x14, 0x70, 0x7f, 0xcf, + 0x82, 0x4b, 0x51, 0xf7, 0x96, 0x06, 0x98, 0x17, 0x03, 0x18, 0xc2, 0x6c, + 0xd0, 0x08, 0xb8, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x05, 0x21, 0x04, + 0x43, 0x04, 0x3a, 0x28, 0x0d, 0x35, 0x05, 0xe8, 0x0f, 0x8a, 0x10, 0x17, + 0x74, 0xff, 0x1c, 0x1d, 0x1d, 0x20, 0x01, 0x1c, 0x20, 0x06, 0x1e, 0x80, + 0x20, 0x05, 0x1c, 0x1c, 0x9d, 0x06, 0x63, 0xca, 0x00, 0x00, 0x00, 0x1e, + 0x15, 0xc8, 0x30, 0xea, 0x30, 0xde, 0x80, 0x06, 0xa8, 0x17, 0x54, 0x00, + 0x6f, 0x00, 0x6c, 0x00, 0x69, 0x30, 0x00, 0x6d, 0x2f, 0xb7, 0x10, 0x16, + 0x30, 0x7f, 0x58, 0x62, 0x29, 0x52, 0x20, 0x6c, 0x9a, 0x06, 0x98, 0x17, + 0xa8, 0xd1, 0xac, 0xb9, 0xc8, 0x60, 0xb9, 0x06, 0x98, 0x17, 0x0e, 0xf3, + 0x7f, 0x22, 0x04, 0x3e, 0x04, 0x3b, 0x03, 0x04, 0x38, 0x04, 0x3c, 0x04, + 0x30, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x1d, 0x1e, 0x1e, + 0x20, 0x01, 0x28, 0x15, 0x1e, 0x1f, 0x20, 0x05, 0x04, 0x1d, 0x1d, 0x28, + 0x03, 0x81, 0x28, 0x17, 0x1f, 0x15, 0x00, 0xd0, 0x30, 0xb8, 0x30, 0xa7, + 0x30, 0xfb, 0x30, 0x11, 0xc7, 0x30, 0xeb, 0x20, 0x05, 0xab, 0x30, 0xa6, + 0x20, 0x03, 0xa8, 0x05, 0xb8, 0x25, 0x56, 0x28, 0x0f, 0x6c, 0x28, 0x19, + 0x65, 0x00, 0x20, 0x2b, 0x00, 0x64, 0x2f, 0xb5, 0x6c, 0x20, 0x07, 0x43, + 0x28, 0x23, 0x3f, 0xc5, 0xc0, 0x05, 0x38, 0x29, 0x10, 0x0e, 0xf0, 0x7f, + 0x03, 0x80, 0x61, 0x53, 0x71, 0x5c, 0x20, 0x37, 0x8c, 0x06, 0x78, 0x19, + 0x14, 0xbc, 0x08, 0xc6, 0x78, 0x01, 0xb3, 0x74, 0xce, 0xb0, 0xc6, 0x74, + 0xce, 0x06, 0x38, 0x1d, 0xa0, 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x0f, 0x3b, + 0x04, 0x4c, 0x04, 0x35, 0x0c, 0x04, 0x2d, 0x00, 0x34, 0x20, 0x05, 0x30, + 0x0b, 0x2d, 0x00, 0x46, 0x1a, 0x28, 0x25, 0x43, 0x04, 0x3a, 0x05, 0x28, + 0x2b, 0x10, 0x16, 0xf4, 0xff, 0x1e, 0x32, 0x1f, 0x1f, 0x20, 0x01, 0x28, + 0x15, 0x1f, 0x07, 0x20, 0x05, 0x1e, 0x00, 0x1e, 0x71, 0x02, 0x96, 0xc9, + 0x00, 0x00, 0x20, 0x83, 0x28, 0x17, 0xa6, 0x30, 0xda, 0x30, 0xb9, 0x05, + 0xc8, 0x0b, 0xf8, 0x17, 0x01, 0x75, 0x00, 0x70, 0x00, 0xe9, 0x00, 0x73, + 0x10, 0x16, 0x40, 0x7f, 0x03, 0x83, 0x6c, 0x69, 0x4f, 0xaf, 0x65, 0x06, + 0x78, 0x15, 0x38, 0x17, 0x03, 0xb0, 0xc6, 0x98, 0xd3, 0xa4, 0xc2, 0x06, + 0x38, 0x13, 0x0f, 0x33, 0x7f, 0x8b, 0x38, 0x17, 0x43, 0x04, 0x3f, 0x28, + 0x17, 0x41, 0x05, 0x08, 0x03, 0x10, 0x18, 0x34, 0xff, 0x15, 0x1f, 0x20, + 0x20, 0x20, 0x01, 0x1f, 0x20, 0x06, 0x08, 0x20, 0x05, 0x00, 0x1f, 0x1f, + 0xda, 0x00, 0x1a, 0xce, 0x00, 0x00, 0x00, 0x21, 0x15, 0xd3, 0x30, 0xc1, + 0x30, 0xe3, 0x30, 0x55, 0xc0, 0x06, 0xa8, 0x17, 0x69, 0x2f, 0x99, 0x68, + 0x2f, 0xb5, 0x64, 0x05, 0x4f, 0x9f, 0x81, 0x10, 0x0f, 0xf0, 0x7f, 0xf4, + 0x7e, 0xe5, 0x67, 0xbe, 0x8f, 0x06, 0x98, 0x17, 0x03, 0x44, 0xbe, 0x28, + 0xcc, 0xe4, 0xb2, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x05, 0x12, 0x04, + 0x38, 0x04, 0x47, 0x28, 0x1b, 0x34, 0x28, 0x1f, 0x8a, 0x10, 0x1e, 0x34, + 0xff, 0x20, 0x21, 0x21, 0x20, 0x01, 0x20, 0x20, 0x06, 0x09, 0x80, 0x20, + 0x05, 0x20, 0x20, 0x66, 0x04, 0x05, 0xd0, 0x00, 0x00, 0x00, 0x22, 0x15, + 0xab, 0x30, 0xb5, 0x30, 0xca, 0x2a, 0x30, 0xec, 0x06, 0x88, 0x17, 0x43, + 0x2f, 0xaf, 0x73, 0x2f, 0xb3, 0x6e, 0x88, 0x2f, 0xb7, 0x72, 0x00, 0x65, + 0x10, 0x16, 0x00, 0x7f, 0x61, 0x53, 0x28, 0x04, 0x84, 0xb3, 0x7e, 0xf7, + 0x96, 0x06, 0x78, 0x19, 0x74, 0xce, 0x03, 0xac, 0xc0, 0x98, 0xb0, 0x08, + 0xb8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x54, 0x1a, 0x28, 0x13, 0x41, + 0x28, 0x17, 0x3d, 0x28, 0x1b, 0x40, 0x04, 0x63, 0x35, 0x06, 0x08, 0x1b, + 0x10, 0x16, 0xf4, 0xff, 0x21, 0x0a, 0x09, 0x20, 0x01, 0x28, 0x15, 0x20, + 0x0a, 0x0f, 0x20, 0x05, 0x21, 0x21, 0xcc, 0x03, 0x86, 0x40, 0xcc, 0x00, + 0x3f, 0xff, 0x01, 0x10, 0x0f, 0x05, 0x0f, 0x10, 0x04, 0x01, 0x01, 0x12, + 0x10, 0x1d, 0x20, 0x05, 0x01, 0x01, 0x10, 0x02, 0x0f, 0x0e, 0x20, 0x01, + 0x02, 0x02, 0x0e, 0x0f, 0x44, 0x13, 0x20, 0x05, 0x02, 0x02, 0x03, 0x30, + 0x14, 0x01, 0x03, 0x82, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, + 0x14, 0x02, 0x41, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x30, + 0x14, 0x20, 0x03, 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x06, 0x42, + 0x05, 0x30, 0x14, 0x06, 0x06, 0x04, 0x05, 0x30, 0x05, 0x06, 0x11, 0x06, + 0x07, 0x06, 0x20, 0x12, 0x06, 0x07, 0x07, 0x50, 0x05, 0x08, 0x07, 0x07, + 0x08, 0x07, 0x20, 0x12, 0x07, 0x08, 0x08, 0x84, 0x50, 0x05, 0x08, 0x08, + 0x09, 0x08, 0x20, 0x12, 0x08, 0x09, 0x0b, 0x09, 0x07, 0x08, 0x0e, 0x20, + 0x05, 0x09, 0x20, 0xb4, 0x20, 0x12, 0x02, 0x09, 0x0a, 0x0a, 0x08, 0x09, + 0x0d, 0x20, 0x05, 0x0a, 0x0d, 0x0a, 0x0b, 0x0b, 0x0a, 0x20, 0x01, 0x30, + 0x05, 0x10, 0x20, 0x05, 0x06, 0x0b, 0x0b, 0x0c, 0x0c, 0x0b, 0x20, 0x01, + 0x30, 0x05, 0x1c, 0x83, 0x20, 0x05, 0x0c, 0x0c, 0x0d, 0x0d, 0x0c, 0x20, + 0x01, 0x30, 0x05, 0x41, 0x21, 0x20, 0x05, 0x0d, 0x0d, 0x0e, 0x0e, 0x0d, + 0x20, 0x01, 0xa0, 0x30, 0x05, 0x12, 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x12, + 0x11, 0x00, 0x11, 0x11, 0x12, 0x0f, 0x0f, 0x11, 0x12, 0x0a, 0x81, 0x20, + 0x05, 0x0f, 0x0f, 0x10, 0x11, 0x10, 0x10, 0x30, 0x03, 0x10, 0x0f, 0x11, + 0x0b, 0x30, 0x09, 0x10, 0x11, 0x13, 0x12, 0x00, 0x12, 0x12, 0x13, 0x11, + 0x11, 0x13, 0x13, 0x20, 0xc0, 0x20, 0x05, 0x20, 0x2a, 0x14, 0x14, 0x13, + 0x13, 0x14, 0x12, 0x0c, 0x12, 0x10, 0x14, 0x0c, 0x20, 0x05, 0x20, 0x1a, + 0x15, 0x15, 0x16, 0x14, 0x14, 0x15, 0x20, 0x12, 0x15, 0x30, 0x05, 0x20, + 0x1a, 0x16, 0x0b, 0x16, 0x15, 0x15, 0x16, 0x20, 0x12, 0x16, 0x30, 0x05, + 0x20, 0x1a, 0x05, 0x17, 0x17, 0x16, 0x16, 0x17, 0x20, 0x12, 0x17, 0x30, + 0x05, 0x82, 0x20, 0x1a, 0x18, 0x18, 0x17, 0x17, 0x18, 0x20, 0x12, 0x18, + 0xc1, 0x30, 0x05, 0x20, 0x1a, 0x19, 0x19, 0x18, 0x18, 0x19, 0x20, 0x12, + 0x60, 0x19, 0x30, 0x05, 0x20, 0x1a, 0x1a, 0x1a, 0x19, 0x19, 0x1a, 0x98, + 0x20, 0x12, 0x1a, 0x11, 0x20, 0x05, 0x20, 0x1a, 0x1b, 0x1b, 0x1a, 0x26, + 0x1a, 0x1b, 0x20, 0x12, 0x1b, 0x19, 0x20, 0x05, 0x20, 0x1a, 0x04, 0x09, + 0x13, 0x1b, 0x1b, 0x04, 0x20, 0x12, 0x04, 0x1a, 0x20, 0x05, 0x95, 0x20, + 0x1a, 0x1c, 0x1c, 0x20, 0x01, 0x1b, 0x20, 0x06, 0x1b, 0x20, 0x05, 0x95, + 0x20, 0x07, 0x1d, 0x1d, 0x20, 0x01, 0x1c, 0x20, 0x06, 0x1e, 0x20, 0x05, + 0x99, 0x20, 0x07, 0x1e, 0x1e, 0x20, 0x01, 0x20, 0x0d, 0x1e, 0x1f, 0x20, + 0x05, 0x99, 0x20, 0x15, 0x1f, 0x1f, 0x20, 0x01, 0x20, 0x0d, 0x1f, 0x07, + 0x20, 0x05, 0xcb, 0x20, 0x15, 0x3a, 0x14, 0x20, 0x1f, 0x20, 0x06, 0x08, + 0x20, 0x05, 0x20, 0x07, 0xe0, 0xea, 0x2f, 0xf2, 0x27, 0x7f, 0xff, 0x00, + 0x11, 0x4c, 0x41, 0x00, 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0x16, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x10, 0x07, 0x36, 0xc4, 0x00, 0x00, 0x00, 0x02, 0x16, 0xb5, 0x30, + 0xf3, 0x30, 0xfb, 0x01, 0x30, 0xdb, 0x30, 0xbb, 0x30, 0xde, 0x5d, 0x06, + 0x38, 0x21, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x01, + 0x4a, 0x00, 0x6f, 0x00, 0x73, 0x00, 0xe9, 0x10, 0x16, 0x00, 0x7f, 0x00, + 0x23, 0x57, 0x55, 0x4f, 0x5e, 0x58, 0x01, 0x77, 0x80, 0x06, 0x7b, 0x1d, + 0xb0, 0xc0, 0x38, 0xd6, 0x38, 0xc1, 0x20, 0x18, 0x00, 0xfc, 0xc8, 0x06, + 0x5b, 0x9f, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x00, 0x04, 0x3d, 0x04, + 0x2d, 0x00, 0x25, 0x04, 0x3e, 0x04, 0x04, 0x41, 0x04, 0x35, 0x04, 0x10, + 0x1d, 0xf4, 0xff, 0x01, 0x07, 0x54, 0x07, 0x20, 0x01, 0x01, 0x20, 0x06, + 0x06, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, 0x17, 0x03, 0x16, 0xa2, 0x30, + 0xe9, 0x30, 0xd5, 0x31, 0x30, 0xa8, 0x20, 0x05, 0x06, 0x58, 0x17, 0x41, + 0x00, 0x6c, 0x28, 0x19, 0x06, 0x6a, 0x00, 0x75, 0x00, 0x65, 0x40, 0x09, + 0x10, 0x15, 0xf0, 0x7f, 0x3f, 0x00, 0x96, 0xc9, 0x62, 0xe1, 0x80, 0xc3, + 0x57, 0xc9, 0x40, 0x62, 0x06, 0x58, 0x1b, 0x4c, 0xc5, 0x7c, 0xb7, 0xc4, + 0xd6, 0x71, 0xd8, 0x20, 0x05, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x10, + 0x04, 0x3b, 0x28, 0x19, 0x06, 0x45, 0x04, 0x43, 0x04, 0x4d, 0x40, 0x09, + 0x10, 0x1d, 0xf4, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, + 0x02, 0x02, 0x02, 0x02, 0x10, 0x1f, 0x07, 0x1d, 0x28, 0x17, 0x04, 0x16, + 0xab, 0x30, 0x04, 0xeb, 0x30, 0xbf, 0x30, 0xb4, 0x06, 0x68, 0x15, 0x00, + 0x00, 0x45, 0x43, 0x2f, 0xaf, 0x72, 0x00, 0x74, 0x2f, 0xb5, 0x67, 0x2f, + 0xb1, 0x83, 0x10, 0x16, 0x10, 0x7f, 0x61, 0x53, 0x54, 0x58, 0x08, 0x06, + 0x68, 0x13, 0x3f, 0xff, 0x00, 0x74, 0xce, 0x74, 0xb9, 0xc0, 0xd0, 0xe0, + 0xac, 0xd1, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, 0x15, 0x40, + 0x04, 0x42, 0x28, 0x1b, 0x1a, 0x33, 0x04, 0x3e, 0x06, 0x08, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x50, 0x03, 0x20, 0x06, 0x03, + 0x20, 0x05, 0x03, 0x03, 0x04, 0x07, 0x40, 0x54, 0x28, 0x17, 0x05, 0x16, + 0xb0, 0x30, 0xa2, 0x30, 0x01, 0xca, 0x30, 0xab, 0x30, 0xb9, 0x30, 0xc6, + 0x06, 0x48, 0x1b, 0x45, 0x47, 0x2f, 0xa9, 0x61, 0x00, 0x6e, 0x2f, 0xb3, + 0x63, 0x2f, 0xb7, 0x50, 0x73, 0x28, 0x21, 0x65, 0x10, 0x15, 0xc0, 0x7f, + 0xdc, 0x74, 0xb3, 0x7e, 0x02, 0x61, 0x53, 0xaf, 0x65, 0x79, 0x72, 0x06, + 0x58, 0x1b, 0xfc, 0x00, 0xac, 0x98, 0xb0, 0x74, 0xce, 0xa4, 0xc2, 0x4c, + 0x62, 0xd1, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x13, 0x04, 0x43, 0x28, + 0x19, 0x3d, 0xab, 0x28, 0x1d, 0x3a, 0x28, 0x21, 0x41, 0x28, 0x21, 0x35, + 0x05, 0xc8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x4a, 0x04, 0x38, 0x0c, 0x03, + 0x04, 0x20, 0x06, 0x02, 0x20, 0x05, 0x04, 0x00, 0x04, 0x8f, 0x07, 0x40, + 0xc3, 0x00, 0x00, 0x06, 0x00, 0x16, 0xa8, 0x30, 0xec, 0x30, 0xc7, 0x30, + 0xa3, 0xc5, 0x28, 0x1d, 0x06, 0x38, 0x15, 0x00, 0x00, 0x48, 0x28, 0x07, + 0x72, 0x28, 0x0b, 0x18, 0x64, 0x00, 0x69, 0x2f, 0xb9, 0x10, 0x16, 0x10, + 0x7f, 0xc3, 0x57, 0xf7, 0x04, 0x96, 0xea, 0x8f, 0x9a, 0x4e, 0x06, 0x58, + 0x15, 0x00, 0x00, 0x00, 0xd0, 0xc5, 0x08, 0xb8, 0x14, 0xb5, 0x44, 0xc5, + 0xc4, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x2d, 0x04, 0x40, 0x28, 0x09, + 0x34, 0x04, 0x1a, 0x38, 0x04, 0x4f, 0x05, 0xc8, 0x0f, 0x10, 0x17, 0x74, + 0xff, 0x05, 0x38, 0x0c, 0x04, 0x50, 0x05, 0x20, 0x06, 0x07, 0x20, 0x05, + 0x05, 0x05, 0x1c, 0x07, 0x00, 0x30, 0xc4, 0x00, 0x00, 0x07, 0x16, 0xea, + 0x30, 0x1a, 0xe2, 0x30, 0xf3, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x4c, 0x28, + 0x0f, 0x6d, 0x30, 0x00, 0xf3, 0x2f, 0xb1, 0x10, 0x16, 0x50, 0x7f, 0x29, + 0x52, 0x99, 0x84, 0xc3, 0x06, 0x78, 0x13, 0x3f, 0xff, 0xac, 0xb9, 0xac, + 0xba, 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0x41, 0x1b, 0x28, 0x11, 0x3c, + 0x04, 0x3e, 0x04, 0x3d, 0x06, 0x48, 0x15, 0xa5, 0x10, 0x17, 0x14, 0xff, + 0x06, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x06, + 0x06, 0x1c, 0x07, 0xf5, 0x28, 0x17, 0x08, 0x16, 0x40, 0xd7, 0x28, 0x15, + 0xbf, 0x30, 0xec, 0x30, 0xca, 0x30, 0x45, 0xb9, 0x06, 0x48, 0x1d, 0x50, + 0x00, 0x75, 0x28, 0x13, 0x74, 0x2f, 0xab, 0xa8, 0x3f, 0xb5, 0x6e, 0x2f, + 0xb3, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0xec, 0x84, 0x54, 0x01, 0x58, 0xf7, + 0x96, 0xb3, 0x7e, 0xaf, 0x65, 0x06, 0x58, 0x1d, 0x00, 0x7c, 0xd4, 0xc0, + 0xd0, 0x08, 0xb8, 0x98, 0xb0, 0x31, 0xa4, 0xc2, 0x06, 0x58, 0x1d, 0x0e, + 0xf3, 0x7f, 0x1f, 0x04, 0x43, 0x28, 0x13, 0x01, 0x42, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x35, 0x28, 0x1d, 0x1a, 0x30, 0x04, 0x41, 0x05, 0xc8, 0x21, + 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x50, 0x07, 0x20, 0x06, + 0x05, 0x20, 0x05, 0x07, 0x07, 0x16, 0x07, 0x29, 0xad, 0xc3, 0x00, 0x3f, + 0xff, 0x01, 0x30, 0x1c, 0x07, 0x01, 0x20, 0x06, 0x44, 0x06, 0x20, 0x05, + 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, + 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x51, 0x03, 0x20, 0x06, 0x03, 0x20, + 0x05, 0x03, 0x03, 0x04, 0x30, 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, 0x02, + 0x20, 0x05, 0x04, 0x04, 0x05, 0xa7, 0x30, 0x04, 0x04, 0x28, 0x7d, 0x04, + 0x07, 0x20, 0x05, 0x28, 0x89, 0xe8, 0x8f, 0xc0, 0xf0, 0x87, 0x3f, 0xff, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x17, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xe1, 0x0a, 0x57, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x17, 0xc9, 0x30, + 0xdf, 0x30, 0xcb, 0x04, 0x30, 0xab, 0x30, 0xfd, 0x56, 0x06, 0x58, 0x1f, + 0x44, 0x00, 0x01, 0x6f, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x20, 0x03, + 0x10, 0x63, 0x00, 0x61, 0x06, 0xc0, 0x7f, 0x71, 0x00, 0x75, 0x00, 0x60, + 0x65, 0x0e, 0xa0, 0xff, 0x0e, 0x30, 0x7f, 0x1a, 0x59, 0x73, 0x7c, 0x3c, + 0x10, 0x5c, 0x4b, 0x51, 0x06, 0x7b, 0x1d, 0xc4, 0xb3, 0xf8, 0xbb, 0x00, + 0xc8, 0xb2, 0x74, 0xce, 0x20, 0x00, 0xf0, 0xc5, 0x30, 0x29, 0xbc, 0x0e, + 0xd3, 0x7f, 0x06, 0x33, 0xff, 0x14, 0x04, 0x3e, 0x04, 0x04, 0x3c, 0x04, + 0x38, 0x04, 0x3d, 0x20, 0x03, 0x3a, 0x04, 0x33, 0x30, 0x04, 0x10, 0x05, + 0xf3, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, + 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0xe4, 0xfc, 0x00, 0x11, 0x1e, 0x00, 0x00, + 0x30, 0x01, 0x18, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x21, 0x0d, 0x4c, 0xce, 0x00, 0x00, 0x00, + 0x02, 0x18, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, 0x30, 0xc8, 0x30, 0xea, + 0x20, 0x03, 0xfb, 0x30, 0xca, 0x08, 0x30, 0xb7, 0x30, 0xe7, 0x20, 0x05, + 0xeb, 0x30, 0x96, 0x04, 0x99, 0xfd, 0x90, 0x0f, 0x57, 0x05, 0x18, 0x33, + 0x44, 0x00, 0x01, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x20, 0x07, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x4e, 0x00, 0x11, 0x61, 0x00, + 0x63, 0x20, 0x15, 0x6f, 0x00, 0x6e, 0x20, 0x09, 0x5b, 0x6c, 0x05, 0xa0, + 0x7f, 0x63, 0x20, 0x87, 0x50, 0x7f, 0x74, 0x06, 0x40, 0x7f, 0x06, 0xd0, + 0xff, 0x6a, 0x65, 0x21, 0x85, 0x91, 0x81, 0x7a, 0xa1, 0x81, 0x65, 0x0c, + 0xa1, 0xff, 0xfd, 0x04, 0x56, 0xb6, 0x5b, 0x3a, 0x53, 0x06, 0x9b, 0x1b, + 0xc4, 0xb3, 0x00, 0xf8, 0xbb, 0xc8, 0xb2, 0x74, 0xce, 0x20, 0x00, 0x03, + 0x89, 0xd5, 0x15, 0xc8, 0x6c, 0xad, 0x05, 0xfb, 0xa5, 0x07, 0xb3, 0x7f, + 0x80, 0x06, 0x33, 0xff, 0x1d, 0x04, 0x30, 0x04, 0x46, 0x04, 0x38, 0x08, + 0x04, 0x3e, 0x04, 0x3d, 0x20, 0x09, 0x3b, 0x04, 0x4c, 0x80, 0x20, 0x07, + 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x00, 0x04, 0x3a, 0x04, 0x40, + 0x04, 0x43, 0x04, 0x33, 0x62, 0x04, 0x10, 0x04, 0xb1, 0x7f, 0x10, 0x06, + 0xf0, 0xff, 0x01, 0x05, 0x05, 0x20, 0x01, 0x01, 0xa4, 0x20, 0x06, 0x0f, + 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x18, 0x4a, 0xa2, 0x28, 0x15, + 0xa2, 0x30, 0x06, 0x9f, 0xb3, 0x41, 0x26, 0x81, 0x75, 0xc0, 0x28, 0x09, + 0x10, 0x16, 0x70, 0x7f, 0x3f, 0x96, 0xcf, 0x82, 0x3f, 0x96, 0x20, 0x01, + 0x77, 0x06, 0x7f, 0xb5, 0x44, 0xc5, 0x18, 0xc2, 0x44, 0x45, 0xc5, 0x10, + 0x06, 0x93, 0x7f, 0x10, 0x04, 0x37, 0x27, 0xfb, 0x30, 0x04, 0xc7, 0xfb, + 0xa4, 0x10, 0x18, 0xb4, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, + 0x02, 0x02, 0x00, 0x02, 0x02, 0x1e, 0x0d, 0xb4, 0xcd, 0x00, 0x00, 0x00, + 0x04, 0x18, 0xd0, 0x30, 0xaa, 0x30, 0xeb, 0x30, 0x55, 0xb3, 0x06, 0x88, + 0x19, 0x42, 0x2f, 0x9d, 0x6f, 0x2f, 0xad, 0x75, 0x2f, 0xad, 0x40, 0x6f, + 0x10, 0x16, 0x20, 0x7f, 0xf4, 0x5d, 0x65, 0x59, 0x81, 0x9c, 0x20, 0xd1, + 0x79, 0x06, 0x78, 0x19, 0x14, 0xbc, 0x24, 0xc6, 0xe8, 0x14, 0xb8, 0x54, + 0xcf, 0x10, 0x06, 0x73, 0x7f, 0x11, 0x28, 0x13, 0x3e, 0x04, 0x5a, 0x40, + 0x28, 0x1b, 0x3a, 0x20, 0x07, 0x10, 0x1e, 0x14, 0xff, 0x03, 0x38, 0x0c, + 0x02, 0x40, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x21, 0x0d, 0x55, + 0x37, 0x28, 0x17, 0x05, 0x28, 0x17, 0xe9, 0x28, 0x19, 0xca, 0x06, 0xc8, + 0x17, 0x56, 0x72, 0x2f, 0xaf, 0x68, 0x28, 0x1d, 0x6e, 0x06, 0x2f, 0xb7, + 0x10, 0x0e, 0xf0, 0x7f, 0xf4, 0x01, 0x5d, 0xc9, 0x62, 0x65, 0x59, 0xb3, + 0x7e, 0x06, 0x98, 0x17, 0x03, 0x7c, 0xb7, 0x24, 0xc6, 0x98, 0xb0, 0x10, + 0x06, 0x73, 0x7f, 0x38, 0x17, 0x56, 0x40, 0x28, 0x1b, 0x45, 0x28, 0x1d, + 0x3d, 0x28, 0x23, 0x10, 0x1d, 0xf4, 0xff, 0x04, 0x90, 0x38, 0x0c, 0x03, + 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x10, 0xf1, 0x0c, 0x71, 0x28, + 0x17, 0x06, 0x18, 0xc0, 0x30, 0x05, 0xcf, 0x30, 0xdc, 0x30, 0xf3, 0x06, + 0x88, 0x17, 0x44, 0x2f, 0xaf, 0x46, 0x6a, 0x2f, 0xb3, 0x62, 0x00, 0xf3, + 0x28, 0x17, 0x10, 0x16, 0x10, 0x7f, 0xbe, 0x04, 0x8f, 0xc8, 0x54, 0x0b, + 0x67, 0x06, 0x78, 0x15, 0x00, 0x00, 0x03, 0xe4, 0xb2, 0x58, 0xd5, 0xf8, + 0xbc, 0x06, 0x7b, 0x95, 0x0f, 0x13, 0x7f, 0x45, 0x14, 0x28, 0x17, 0x34, + 0x04, 0x36, 0x28, 0x1d, 0x31, 0x48, 0x19, 0xa5, 0x10, 0x1d, 0xf4, 0xff, + 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, 0x04, 0x05, + 0x05, 0xe6, 0x0d, 0x04, 0x28, 0x17, 0x07, 0x18, 0x00, 0xc9, 0x30, 0xa5, + 0x30, 0xa2, 0x30, 0xeb, 0x30, 0x44, 0xc6, 0x06, 0x68, 0x19, 0x44, 0x00, + 0x75, 0x4f, 0xb1, 0x74, 0x00, 0x40, 0x65, 0x10, 0x16, 0x40, 0x7f, 0x5c, + 0x67, 0x4e, 0x53, 0xb7, 0x5f, 0x80, 0x06, 0x98, 0x17, 0x50, 0xb4, 0x44, + 0xc5, 0x74, 0xb9, 0x4c, 0x62, 0xd1, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, + 0x14, 0x04, 0x43, 0x28, 0x19, 0x40, 0x0c, 0x04, 0x42, 0x04, 0x35, 0x06, + 0x08, 0x13, 0x10, 0x17, 0x34, 0xff, 0x06, 0x06, 0x80, 0xd0, 0x01, 0xb9, + 0x0d, 0x0c, 0xce, 0x00, 0x00, 0x08, 0x00, 0x18, 0xa8, 0x30, 0xb9, 0x30, + 0xd1, 0x30, 0xa4, 0x02, 0x30, 0xb8, 0x30, 0xe3, 0x30, 0xc8, 0x06, 0x28, + 0x1b, 0x45, 0x08, 0x00, 0x73, 0x00, 0x70, 0x2f, 0xb3, 0x69, 0x00, 0x6c, + 0xb0, 0x20, 0x01, 0x61, 0x28, 0x1f, 0x10, 0x15, 0xd0, 0x7f, 0x7e, 0x82, + 0xaf, 0x65, 0x08, 0x3e, 0x6d, 0x9a, 0x4e, 0x06, 0x78, 0x19, 0xd0, 0xc5, + 0xa4, 0x00, 0xc2, 0x0c, 0xd3, 0x74, 0xc7, 0x7c, 0xc5, 0xb8, 0x60, 0xd2, + 0x06, 0x3b, 0x99, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x41, 0x04, 0x3f, 0x8b, + 0x28, 0x19, 0x38, 0x04, 0x3b, 0x20, 0x01, 0x30, 0x28, 0x1f, 0x10, 0x1d, + 0xd4, 0xff, 0x15, 0x07, 0x09, 0x09, 0x20, 0x01, 0x07, 0x20, 0x06, 0x1e, + 0x20, 0x05, 0x00, 0x07, 0x07, 0xcb, 0x0d, 0xdb, 0xcd, 0x00, 0x00, 0x00, + 0x09, 0x18, 0xa4, 0x30, 0xf3, 0x30, 0xc7, 0x30, 0x41, 0xda, 0x40, 0x05, + 0xf3, 0x30, 0xb7, 0x30, 0xa2, 0x05, 0xe8, 0x1b, 0x05, 0x49, 0x00, 0x6e, + 0x00, 0x64, 0x2f, 0xab, 0x70, 0x2f, 0xaf, 0x8a, 0x50, 0x09, 0x6e, 0x00, + 0x63, 0x28, 0x25, 0x61, 0x10, 0x15, 0x60, 0x7f, 0xec, 0x18, 0x72, 0xcb, + 0x7a, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x78, 0xc7, 0x70, 0x00, 0xb3, 0x9c, + 0xd3, 0x74, 0xb3, 0xdc, 0xc2, 0x44, 0x60, 0xc5, 0x06, 0x3f, 0xb0, 0x0e, + 0xf3, 0x7f, 0x18, 0x04, 0x3d, 0x04, 0x34, 0x2a, 0x04, 0x35, 0x28, 0x1b, + 0x35, 0x60, 0x09, 0x3d, 0x28, 0x29, 0x38, 0x30, 0x04, 0x4f, 0x05, 0x68, + 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x0b, 0x0b, 0x0c, 0x14, 0x0b, 0x0b, + 0x08, 0x20, 0x06, 0x07, 0x20, 0x05, 0x08, 0x08, 0x00, 0x26, 0x0d, 0xe8, + 0xcc, 0x00, 0x00, 0x0a, 0x18, 0x10, 0xe9, 0x30, 0xfb, 0x28, 0x0b, 0xeb, + 0x30, 0xbf, 0x30, 0x14, 0xb0, 0x30, 0xe9, 0x06, 0x28, 0x17, 0x4c, 0x2f, + 0xab, 0x20, 0x00, 0x51, 0x41, 0x2f, 0xad, 0x74, 0x2f, 0xb5, 0x67, 0x00, + 0x72, 0x2f, 0xbb, 0xc2, 0x05, 0xb8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x23, + 0x57, 0xcd, 0x6b, 0x06, 0xb8, 0x17, 0x7c, 0x00, 0xb7, 0x4c, 0xc5, 0xc0, + 0xd0, 0xf8, 0xad, 0x7c, 0x60, 0xb7, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, + 0x1b, 0x04, 0x30, 0x04, 0x2d, 0x00, 0x00, 0x10, 0x04, 0x3b, 0x04, 0x4c, + 0x04, 0x42, 0x8e, 0x20, 0x0b, 0x33, 0x04, 0x40, 0x20, 0x11, 0x05, 0x98, + 0x19, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x02, 0x0c, 0x0c, 0x0d, 0x0c, 0x0c, + 0x09, 0x20, 0x06, 0x08, 0x80, 0x20, 0x05, 0x09, 0x09, 0x4c, 0x0d, 0x2c, + 0xcf, 0x00, 0x02, 0x00, 0x0b, 0x18, 0xa8, 0x30, 0xea, 0x28, 0x17, 0xb9, + 0x80, 0x28, 0x1d, 0xd4, 0x30, 0xfc, 0x30, 0xcb, 0x30, 0xe3, 0xaa, 0x05, + 0xe8, 0x17, 0x45, 0x28, 0x11, 0xed, 0x2f, 0x9d, 0x73, 0x28, 0x1d, 0x50, + 0xb0, 0x2f, 0xa7, 0xf1, 0x05, 0x8f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xc3, + 0x57, 0x29, 0x52, 0x00, 0x9a, 0x4e, 0xaf, 0x65, 0xae, 0x76, 0x9a, 0x4e, + 0x80, 0x06, 0x38, 0x1f, 0xd8, 0xc5, 0xac, 0xb9, 0x44, 0xc5, 0xa4, 0x06, + 0xc2, 0x3c, 0xd5, 0xd0, 0xb0, 0x06, 0x38, 0x9d, 0x0e, 0xf3, 0x7f, 0x2d, + 0xa2, 0x48, 0x11, 0x4f, 0x28, 0x09, 0x2d, 0x00, 0x1f, 0x28, 0x0d, 0x3d, + 0xc5, 0x28, 0x27, 0x10, 0x1d, 0xb4, 0xff, 0x0a, 0x08, 0x08, 0x20, 0x01, + 0x0a, 0x20, 0x06, 0x40, 0x1d, 0x20, 0x05, 0x0a, 0x0a, 0x6c, 0x0d, 0x03, + 0xcd, 0x04, 0x00, 0x00, 0x0c, 0x18, 0xe9, 0x28, 0x11, 0xed, 0x30, 0x58, + 0xde, 0x28, 0x13, 0xca, 0x05, 0xe8, 0x11, 0xbf, 0xaf, 0x52, 0x00, 0x6f, + 0x2c, 0x00, 0x6d, 0x2f, 0xb9, 0x6e, 0x05, 0xe8, 0x15, 0x10, 0x0f, 0x10, + 0x7f, 0x57, 0x7f, 0x0c, 0x6c, 0x9a, 0xb3, 0x7e, 0x06, 0x38, 0x11, 0x5f, + 0xff, 0x7c, 0xb7, 0x06, 0x5c, 0xb8, 0xc8, 0xb9, 0x98, 0x06, 0x48, 0x13, + 0x0f, 0x33, 0x7f, 0x1b, 0x80, 0x28, 0x07, 0x2d, 0x00, 0x20, 0x04, 0x3e, + 0x04, 0x3c, 0xe0, 0x28, 0x11, 0x05, 0xf8, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x0b, 0x0d, 0x0d, 0x0e, 0x0d, 0x28, 0x0d, 0x0b, 0x20, 0x06, 0x0a, 0x20, + 0x05, 0x0b, 0x0b, 0x18, 0x00, 0x0d, 0xf6, 0xce, 0x00, 0x00, 0x0d, 0x18, + 0xde, 0x0a, 0x30, 0xea, 0x30, 0xa2, 0x28, 0x1b, 0xc8, 0x20, 0x07, 0xcb, + 0x20, 0x30, 0xc0, 0x28, 0x1f, 0xfb, 0x30, 0xb5, 0x30, 0xf3, 0x02, 0x30, + 0xc1, 0x30, 0xa7, 0x30, 0xb9, 0x05, 0x28, 0x29, 0x4d, 0xa2, 0x2f, 0xab, + 0x72, 0x4f, 0xb1, 0x20, 0x00, 0x54, 0x20, 0x09, 0x69, 0x8a, 0x28, 0x1b, + 0x69, 0x00, 0x64, 0x2f, 0xc1, 0x64, 0x2f, 0xc1, 0x53, 0x20, 0x00, 0xe1, + 0x28, 0x2b, 0x63, 0x00, 0x68, 0x00, 0x65, 0x20, 0x00, 0x7a, 0x10, 0x14, + 0x40, 0x7f, 0x9b, 0x73, 0x3d, 0x4e, 0x9a, 0x00, 0x4e, 0x2d, 0x00, 0x51, + 0x68, 0x76, 0x51, 0xaf, 0x40, 0x65, 0x06, 0x18, 0x1f, 0xc8, 0xb9, 0xac, + 0xb9, 0x44, 0xc5, 0x00, 0x20, 0x00, 0xb8, 0xd2, 0xac, 0xb9, 0xc8, 0xb2, + 0x00, 0xe4, 0xb2, 0xdc, 0xb4, 0xb0, 0xc0, 0xb4, 0xcc, 0x34, 0xa4, 0xc2, + 0x05, 0x7f, 0xb4, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x17, 0x40, 0x04, 0x15, + 0x38, 0x04, 0x4f, 0x28, 0x1d, 0x22, 0x40, 0x09, 0x3d, 0x20, 0x0d, 0x54, + 0x34, 0x28, 0x2d, 0x34, 0x28, 0x2f, 0x21, 0x48, 0x2b, 0x47, 0x04, 0x18, + 0x35, 0x04, 0x41, 0x04, 0x68, 0x2f, 0x10, 0x16, 0xf4, 0xff, 0x0c, 0x0f, + 0x0f, 0x0a, 0x10, 0x0f, 0x0f, 0x0c, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x0c, + 0x08, 0x0c, 0xc8, 0x0d, 0x58, 0x28, 0x17, 0x0e, 0x18, 0xe2, 0xaa, 0x28, + 0x03, 0xc6, 0x28, 0x17, 0xaf, 0x28, 0x1f, 0xb9, 0x20, 0x09, 0xa3, 0xd4, + 0x05, 0x28, 0x0b, 0xd8, 0x17, 0x6f, 0x2f, 0xa5, 0x74, 0x27, 0xf7, 0x20, + 0x00, 0x54, 0x43, 0x48, 0x17, 0x73, 0x20, 0x0d, 0x69, 0x10, 0x15, 0x80, + 0x7f, 0xfa, 0x57, 0x0c, 0xa6, 0x5e, 0x71, 0x5c, 0x06, 0x18, 0x0f, 0x7f, + 0xff, 0xac, 0xba, 0x00, 0x4c, 0xd1, 0x6c, 0xd0, 0xac, 0xb9, 0xa4, 0xc2, + 0x31, 0xf0, 0xd2, 0x06, 0x30, 0x83, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x3e, + 0x28, 0x09, 0x45, 0x42, 0x27, 0xf9, 0x2d, 0x00, 0x1a, 0x48, 0x21, 0x41, + 0x20, 0x0d, 0x60, 0x38, 0x04, 0x68, 0x05, 0x10, 0x18, 0x14, 0xff, 0x0d, + 0x11, 0x11, 0x12, 0x11, 0x28, 0x11, 0x0d, 0x20, 0x06, 0x0d, 0x20, 0x05, + 0x0d, 0x0d, 0xfc, 0x00, 0x0d, 0x0a, 0xcd, 0x00, 0x00, 0x0f, 0x18, 0xda, + 0x00, 0x30, 0xc7, 0x30, 0xeb, 0x30, 0xca, 0x30, 0xec, 0xd5, 0x28, 0x15, + 0x06, 0x35, 0x1b, 0x50, 0x2f, 0x89, 0x64, 0x2f, 0x8d, 0x72, 0x2f, 0xa7, + 0x14, 0x61, 0x00, 0x6c, 0x2f, 0x97, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0x69, + 0x4f, 0x00, 0xb7, 0x5f, 0xb3, 0x7e, 0xb1, 0x83, 0xaf, 0x65, 0x80, 0x06, + 0x58, 0x1b, 0x98, 0xd3, 0x70, 0xb3, 0x74, 0xb9, 0xa0, 0x05, 0xb0, 0x08, + 0xb8, 0xa4, 0xc2, 0x10, 0x06, 0x33, 0x7f, 0x1f, 0x28, 0x11, 0x51, 0x34, + 0x28, 0x15, 0x40, 0x28, 0x1d, 0x30, 0x04, 0x3b, 0x28, 0x1f, 0x60, 0x41, + 0x05, 0x88, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0e, 0x13, 0x13, 0x14, 0x13, + 0x28, 0x13, 0x0e, 0x20, 0x06, 0x10, 0x20, 0x05, 0x0e, 0x0e, 0xd2, 0x02, + 0x0c, 0xfb, 0xcc, 0x00, 0x00, 0x10, 0x28, 0x17, 0xe9, 0x0d, 0x30, 0xd3, + 0x30, 0xa2, 0x06, 0x48, 0x13, 0x78, 0x17, 0x72, 0x28, 0x11, 0x50, 0x76, + 0x2f, 0xa9, 0x61, 0x10, 0x16, 0x20, 0x7f, 0x69, 0x4f, 0xc9, 0x62, 0x0c, + 0xf4, 0x7e, 0x9a, 0x4e, 0x06, 0x58, 0x15, 0x38, 0x17, 0x7c, 0xb7, 0x0d, + 0x44, 0xbe, 0x44, 0xc5, 0x10, 0x06, 0x73, 0x7f, 0x38, 0x17, 0x40, 0x28, + 0x11, 0x06, 0x32, 0x04, 0x38, 0x04, 0x4f, 0x05, 0xc8, 0x11, 0x10, 0x17, + 0x54, 0xff, 0x0f, 0x02, 0x14, 0x14, 0x15, 0x14, 0x14, 0x0f, 0x20, 0x06, + 0x11, 0x80, 0x20, 0x05, 0x0f, 0x0f, 0x00, 0x0d, 0xfd, 0xcd, 0x00, 0x00, + 0x00, 0x11, 0x18, 0xd7, 0x30, 0xa8, 0x30, 0xeb, 0x02, 0x30, 0xc8, 0x30, + 0xfb, 0x30, 0xd7, 0x28, 0x21, 0xbf, 0x88, 0x06, 0x08, 0x1f, 0x50, 0x00, + 0x75, 0x4f, 0xad, 0x74, 0x00, 0x6f, 0x2b, 0x00, 0x20, 0x2f, 0xbd, 0x6c, + 0x2f, 0xb5, 0x74, 0x05, 0xa8, 0x21, 0x10, 0x0e, 0xf0, 0x7f, 0x0c, 0xf6, + 0x94, 0x2f, 0x6e, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x78, 0xd4, 0x00, 0xd0, + 0xc5, 0x74, 0xb9, 0xa0, 0xd1, 0x20, 0x00, 0x02, 0x0c, 0xd5, 0x7c, 0xb7, + 0xc0, 0xd0, 0x10, 0x05, 0xf3, 0x7f, 0x1f, 0x08, 0x04, 0x43, 0x04, 0x4d, + 0x28, 0x19, 0x42, 0x04, 0x3e, 0x2b, 0x04, 0x2d, 0x28, 0x25, 0x3b, 0x28, + 0x23, 0x42, 0x28, 0x27, 0x10, 0x1d, 0x74, 0xff, 0x01, 0x10, 0x15, 0x15, + 0x16, 0x15, 0x15, 0x10, 0x20, 0x06, 0x41, 0x12, 0x20, 0x05, 0x10, 0x10, + 0x14, 0x0e, 0xbd, 0x28, 0x17, 0x11, 0x12, 0x18, 0xb5, 0x28, 0x15, 0xbb, + 0x30, 0xc9, 0x06, 0x08, 0x0f, 0xa2, 0x7f, 0xff, 0x53, 0x2f, 0xab, 0x6c, + 0x00, 0x63, 0x2f, 0xb5, 0x64, 0xd5, 0x28, 0x19, 0x0e, 0x10, 0x7f, 0x48, + 0x4f, 0xaf, 0x6d, 0x2f, 0xb1, 0x6e, 0x2f, 0xb5, 0x5b, 0x73, 0x29, 0x1b, + 0x4d, 0x2f, 0xb9, 0x3f, 0xc1, 0x62, 0x41, 0x19, 0x10, 0x04, 0xf1, 0x7f, + 0x00, 0x28, 0x84, 0x14, 0x5c, 0x5e, 0x58, 0x1a, 0x59, 0x81, 0x06, 0x78, + 0x1b, 0xb4, 0xc0, 0x38, 0xc1, 0xc4, 0xb3, 0x06, 0x98, 0x97, 0xa0, 0x0e, + 0xf3, 0x7f, 0x21, 0x28, 0x07, 0x3b, 0x04, 0x3a, 0x04, 0x35, 0x38, 0x04, + 0x34, 0x28, 0x19, 0x10, 0x06, 0x14, 0xff, 0x10, 0x06, 0xf0, 0xff, 0x11, + 0x16, 0x16, 0x0a, 0x0b, 0x16, 0x16, 0x11, 0x20, 0x06, 0x13, 0x20, 0x05, + 0x11, 0x08, 0x11, 0xcb, 0x0d, 0xfa, 0x28, 0x17, 0x13, 0x18, 0xbb, 0x0e, + 0x30, 0xde, 0x30, 0xca, 0x06, 0x88, 0x15, 0x58, 0x17, 0x57, 0x15, 0xe1, + 0x81, 0x10, 0x16, 0x40, 0x7f, 0x71, 0x5c, 0x8e, 0x7f, 0xb3, 0x7e, 0x06, + 0x78, 0x15, 0x00, 0x00, 0x00, 0xac, 0xc0, 0xc8, 0xb9, 0x98, 0xb0, 0xd6, + 0x10, 0x06, 0x93, 0x7f, 0x38, 0x17, 0x3c, 0x28, 0x1b, 0x3d, 0x28, 0x1f, + 0x10, 0x1e, 0x34, 0xff, 0x12, 0x2a, 0x17, 0x17, 0x20, 0x01, 0x12, 0x20, + 0x06, 0x14, 0x20, 0x05, 0x12, 0x00, 0x12, 0xaa, 0x0d, 0xb6, 0xce, 0x00, + 0x00, 0x14, 0x00, 0x18, 0xb5, 0x30, 0xf3, 0x30, 0xc1, 0x30, 0xa7, 0x00, + 0x30, 0xb9, 0x30, 0xfb, 0x30, 0xe9, 0x30, 0xdf, 0x34, 0x30, 0xec, 0x20, + 0x09, 0x05, 0xdf, 0xaf, 0xe1, 0x2f, 0x29, 0x63, 0x00, 0x55, 0x68, 0x2f, + 0xb1, 0x7a, 0x2f, 0x2d, 0x52, 0x48, 0x27, 0xed, 0x2f, 0x43, 0xc0, 0x30, + 0x0f, 0x10, 0x15, 0x10, 0x7f, 0x51, 0x68, 0x07, 0x52, 0xaf, 0x65, 0x00, + 0x2d, 0x00, 0xc9, 0x62, 0x73, 0x7c, 0xaf, 0x65, 0x80, 0x06, 0x18, 0x1f, + 0xb0, 0xc0, 0xb4, 0xcc, 0xa4, 0xc2, 0x7c, 0x01, 0xb7, 0xf8, 0xbb, 0x08, + 0xb8, 0xa4, 0xc2, 0x06, 0x3f, 0xaf, 0xc0, 0x0e, 0xd3, 0x7f, 0x38, 0x17, + 0x3d, 0x04, 0x47, 0x04, 0x35, 0x04, 0x04, 0x41, 0x04, 0x2d, 0x00, 0x20, + 0x48, 0x25, 0x38, 0x04, 0x62, 0x40, 0x40, 0x0f, 0x10, 0x1d, 0x34, 0xff, + 0x13, 0x1b, 0x1b, 0x20, 0x01, 0x13, 0x08, 0x13, 0x1b, 0x1a, 0x1a, 0x20, + 0x05, 0x13, 0x13, 0x8b, 0x28, 0x0d, 0x1e, 0x28, 0x17, 0x15, 0x48, 0x17, + 0xfb, 0x30, 0xd5, 0x34, 0x30, 0xa2, 0x28, 0x1f, 0x06, 0x7f, 0xaf, 0x6e, + 0x28, 0x0f, 0x4a, 0x00, 0x60, 0x75, 0x4f, 0xb5, 0x10, 0x15, 0xf0, 0x7f, + 0x23, 0x57, 0xe1, 0x80, 0x89, 0x61, 0x5b, 0x06, 0x18, 0x0f, 0x98, 0x17, + 0xc4, 0xd6, 0x48, 0xc5, 0x06, 0x70, 0x7d, 0xc1, 0x0f, 0x13, 0x7f, 0x58, + 0x17, 0x2d, 0x00, 0x25, 0x04, 0x43, 0x48, 0x21, 0x88, 0x10, 0x1d, 0xf4, + 0xff, 0x14, 0x19, 0x19, 0x20, 0x01, 0x14, 0x14, 0x19, 0x20, 0x18, 0x17, + 0x20, 0x05, 0x14, 0x14, 0x5e, 0x0d, 0x59, 0x08, 0xcd, 0x00, 0x00, 0x16, + 0x68, 0x17, 0xda, 0x30, 0xc9, 0x28, 0x30, 0xed, 0x28, 0x1f, 0xc7, 0x28, + 0x23, 0xde, 0x30, 0xb3, 0x0d, 0x30, 0xea, 0x30, 0xb9, 0x05, 0x68, 0x25, + 0x78, 0x17, 0x50, 0x2f, 0xaf, 0x54, 0x64, 0x2f, 0xa5, 0x6f, 0x2f, 0xb3, + 0x64, 0x2f, 0xbb, 0x20, 0x00, 0x55, 0x4d, 0x2f, 0xb9, 0x63, 0x20, 0x0f, + 0x72, 0x2f, 0xbd, 0x73, 0x10, 0x14, 0x80, 0x7f, 0x02, 0x23, 0x57, 0x7c, + 0x5f, 0xb7, 0x5f, 0x06, 0xb8, 0x17, 0x98, 0x00, 0xd3, 0xdc, 0xb4, 0x5c, + 0xb8, 0x70, 0xb3, 0xc8, 0x01, 0xb9, 0x54, 0xcf, 0xac, 0xb9, 0xa4, 0xc2, + 0x06, 0x5b, 0x97, 0xc0, 0x0e, 0x73, 0x7f, 0x78, 0x17, 0x1f, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x14, 0x40, 0x04, 0x3e, 0x28, 0x23, 0x34, 0x20, 0x0b, + 0x2d, 0x00, 0x44, 0x1c, 0x28, 0x31, 0x40, 0x04, 0x3a, 0x20, 0x11, 0x40, + 0x04, 0x18, 0x38, 0x04, 0x41, 0x04, 0x68, 0x31, 0x10, 0x16, 0xf4, 0xff, + 0x15, 0x1a, 0x1a, 0x82, 0x20, 0x01, 0x15, 0x15, 0x1a, 0x19, 0x16, 0x20, + 0x05, 0x15, 0x00, 0x15, 0x1e, 0x0d, 0xb9, 0xce, 0x00, 0x00, 0x17, 0x80, + 0x48, 0x17, 0xc6, 0x30, 0xa3, 0x30, 0xa2, 0x30, 0xb4, 0xc5, 0x05, 0x68, + 0x09, 0x00, 0x3f, 0xaf, 0x74, 0x00, 0x69, 0x2f, 0xb7, 0x67, 0x28, 0x15, + 0x80, 0x10, 0x15, 0xf0, 0x7f, 0x23, 0x57, 0x30, 0x57, 0x9a, 0x4e, 0xe5, + 0x40, 0x54, 0x06, 0x78, 0x19, 0xb0, 0xc0, 0xf0, 0xd2, 0x44, 0xc5, 0x38, + 0xe0, 0xac, 0x06, 0x78, 0x97, 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x42, 0x04, + 0x4c, 0x0c, 0x04, 0x4f, 0x04, 0x33, 0x28, 0x15, 0x10, 0x1d, 0xf4, 0xff, + 0x16, 0x1c, 0x41, 0x1c, 0x20, 0x01, 0x16, 0x16, 0x1c, 0x1b, 0x18, 0x20, + 0x05, 0x00, 0x16, 0x16, 0xd4, 0x0d, 0xba, 0xcd, 0x00, 0x00, 0x40, 0x18, + 0xc8, 0x17, 0xfb, 0x30, 0xed, 0x30, 0xc9, 0x30, 0x06, 0xea, 0x30, 0xb2, + 0x30, 0xb9, 0x05, 0x88, 0x23, 0xf8, 0x17, 0x20, 0x35, 0x00, 0x52, 0x2f, + 0xb3, 0x3f, 0xb9, 0xed, 0x28, 0x27, 0x75, 0x2f, 0xc5, 0x60, 0x7a, 0x10, + 0x14, 0xc0, 0x7f, 0x78, 0x17, 0x2d, 0x00, 0x57, 0x7f, 0xcc, 0x06, 0x91, + 0xd6, 0x76, 0x79, 0x51, 0x05, 0xd8, 0x21, 0x78, 0x17, 0x5c, 0x00, 0xb8, + 0xdc, 0xb4, 0xac, 0xb9, 0x8c, 0xac, 0xa4, 0x71, 0xc2, 0x06, 0xdb, 0x97, + 0x0d, 0xf3, 0x7f, 0xf8, 0x17, 0x2d, 0x00, 0x20, 0x28, 0x1d, 0x04, 0x34, + 0x04, 0x40, 0x04, 0x38, 0x28, 0x27, 0x35, 0x04, 0x62, 0x41, 0x04, 0xe8, + 0x29, 0x10, 0x16, 0xf4, 0xff, 0x17, 0x1d, 0x1d, 0x20, 0x01, 0x17, 0x08, + 0x17, 0x1d, 0x1c, 0x19, 0x20, 0x05, 0x17, 0x17, 0xd7, 0x20, 0x0d, 0x47, + 0x28, 0x17, 0x19, 0x18, 0xd0, 0x30, 0xeb, 0x2d, 0x30, 0xd9, 0x20, 0x03, + 0xc7, 0x05, 0x88, 0x09, 0xdf, 0xff, 0x56, 0x2f, 0xaf, 0x15, 0x6c, 0x00, + 0x76, 0x27, 0xff, 0x72, 0x28, 0x0d, 0x65, 0x10, 0x16, 0x00, 0x7f, 0x03, + 0xf4, 0x5d, 0xe6, 0x97, 0xb7, 0x5f, 0x05, 0xd8, 0x0b, 0xbf, 0xff, 0x00, + 0x1c, 0xbc, 0xa0, 0xbc, 0x74, 0xb9, 0x70, 0xb3, 0xd5, 0x06, 0x70, 0x7f, + 0x0e, 0xf3, 0x7f, 0x12, 0x28, 0x17, 0x3b, 0x28, 0x15, 0x32, 0x28, 0x03, + 0x58, 0x40, 0x28, 0x0f, 0x35, 0x04, 0xe8, 0x07, 0x10, 0x17, 0xf4, 0xff, + 0x18, 0x1e, 0x1e, 0xa8, 0x20, 0x01, 0x18, 0x20, 0x06, 0x04, 0x20, 0x05, + 0x18, 0x18, 0xea, 0x22, 0x0d, 0x74, 0x28, 0x17, 0x1a, 0x18, 0xa8, 0x28, + 0x17, 0xfb, 0x02, 0x30, 0xbb, 0x30, 0xa4, 0x30, 0xdc, 0x06, 0x48, 0x19, + 0x45, 0xab, 0x28, 0x15, 0x20, 0x2f, 0xb5, 0x65, 0x2f, 0x9f, 0x62, 0x2f, + 0xaf, 0x06, 0x90, 0x7f, 0x70, 0x69, 0x06, 0xe0, 0x7f, 0x06, 0xf0, 0xff, + 0x0e, 0x50, 0x7f, 0x5b, 0x8d, 0x21, 0x58, 0x80, 0x06, 0x98, 0x15, 0x00, + 0x00, 0xd8, 0xc5, 0x38, 0xc1, 0x74, 0x1a, 0xc7, 0xf4, 0xbc, 0x06, 0x78, + 0x97, 0x0e, 0xf2, 0xff, 0x2d, 0x48, 0x15, 0x2d, 0x20, 0x00, 0x21, 0x28, + 0x17, 0x39, 0x04, 0x31, 0x04, 0x3e, 0xe2, 0x05, 0xe8, 0x17, 0x10, 0x06, + 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x19, 0x07, 0x07, 0x20, 0x01, 0x19, 0xa0, + 0x20, 0x06, 0x1c, 0x20, 0x05, 0x19, 0x19, 0x58, 0x0d, 0xe9, 0x00, 0xce, + 0x00, 0x00, 0x1b, 0x18, 0xa2, 0x30, 0xc8, 0x80, 0x28, 0x17, 0xde, 0x30, + 0xb8, 0x30, 0xe7, 0x30, 0xfc, 0xd4, 0x28, 0x23, 0x05, 0xff, 0xb0, 0x48, + 0x2f, 0xaf, 0x74, 0x28, 0x0f, 0x20, 0x00, 0x54, 0x4d, 0x2f, 0xb9, 0x79, + 0x28, 0x19, 0x72, 0x10, 0x15, 0xc0, 0x7f, 0x3f, 0x96, 0x02, 0x58, 0x62, + 0x6c, 0x9a, 0xa6, 0x7e, 0x06, 0x78, 0x1b, 0x44, 0x00, 0xc5, 0xa0, 0xd1, + 0xc8, 0xb9, 0x94, 0xc6, 0x74, 0x60, 0xb9, 0x06, 0x58, 0x9b, 0x0e, 0xf3, + 0x7f, 0x25, 0x04, 0x30, 0x04, 0x42, 0x8a, 0x28, 0x0d, 0x2d, 0x00, 0x1c, + 0x20, 0x09, 0x39, 0x28, 0x17, 0x40, 0xc5, 0x05, 0xc8, 0x19, 0x10, 0x16, + 0xf4, 0xff, 0x1a, 0x0a, 0x0a, 0x20, 0x01, 0x1a, 0x20, 0x06, 0x41, 0x1b, + 0x20, 0x05, 0x1a, 0x1a, 0x58, 0x0d, 0xc2, 0x28, 0x17, 0x11, 0x1c, 0x18, + 0xe9, 0x28, 0x15, 0xd9, 0x30, 0xac, 0x06, 0x08, 0x0f, 0xa2, 0x7f, 0xff, + 0x4c, 0x28, 0x17, 0x20, 0x00, 0x56, 0x2f, 0xaf, 0x67, 0xc0, 0x28, 0x21, + 0x10, 0x16, 0x10, 0x7f, 0xc9, 0x62, 0xf4, 0x7e, 0xa0, 0x52, 0x80, 0x06, + 0x78, 0x15, 0x00, 0x00, 0x7c, 0xb7, 0xa0, 0xbc, 0x00, 0x68, 0xac, 0x06, + 0x73, 0x7d, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x17, 0x2d, 0x00, 0x12, 0x0c, + 0x04, 0x35, 0x04, 0x33, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x1b, 0x0e, + 0x05, 0x0e, 0x0f, 0x0e, 0x0e, 0x1b, 0x20, 0x06, 0x09, 0x20, 0x05, 0x00, + 0x1b, 0x1b, 0xaa, 0x0d, 0xdb, 0xcd, 0x00, 0x00, 0x00, 0x1d, 0x18, 0xe2, + 0x30, 0xf3, 0x30, 0xbb, 0x30, 0x01, 0xcb, 0x30, 0xe7, 0x30, 0xfc, 0x30, + 0xeb, 0x28, 0x23, 0x06, 0xce, 0x30, 0xa6, 0x30, 0xa8, 0x20, 0x09, 0x05, + 0x7f, 0xb4, 0x4d, 0x8a, 0x2f, 0xab, 0x6e, 0x00, 0x73, 0x28, 0x17, 0xf1, + 0x4f, 0xab, 0x20, 0x2a, 0x00, 0x4e, 0x2f, 0xbd, 0x75, 0x28, 0x27, 0x6c, + 0x10, 0x15, 0x40, 0x7f, 0x3b, 0x00, 0x4e, 0x59, 0x65, 0x2d, 0x00, 0x59, + 0x74, 0xce, 0x40, 0x9e, 0x06, 0x58, 0x1b, 0xac, 0xba, 0x38, 0xc1, 0xe8, + 0xb1, 0x00, 0x74, 0xb9, 0x78, 0xb1, 0xb0, 0xc6, 0xd8, 0xc5, 0xc0, 0x06, + 0x1b, 0x9d, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x54, + 0x41, 0x28, 0x17, 0x3d, 0x20, 0x09, 0x40, 0x28, 0x23, 0x1d, 0x04, 0x01, + 0x43, 0x04, 0x4d, 0x04, 0x3b, 0x04, 0x4c, 0x05, 0x48, 0x25, 0x80, 0x10, + 0x16, 0xf4, 0xff, 0x1c, 0x10, 0x10, 0x11, 0x10, 0x10, 0x1c, 0xa0, 0x20, + 0x06, 0x0c, 0x20, 0x05, 0x1c, 0x1c, 0x76, 0x0d, 0xee, 0xa8, 0x28, 0x17, + 0x1e, 0x48, 0x17, 0xc6, 0x28, 0x0f, 0xd7, 0x30, 0xe9, 0x34, 0x30, 0xbf, + 0x05, 0x88, 0x0d, 0xf8, 0x17, 0x74, 0x2f, 0xaf, 0x20, 0x00, 0x5c, 0x50, + 0x28, 0x0b, 0x61, 0x20, 0x0b, 0x05, 0xbf, 0xb7, 0x10, 0x0e, 0xf0, 0x7f, + 0xf6, 0x94, 0x30, 0x71, 0x5c, 0x06, 0x58, 0x11, 0x78, 0x17, 0x4c, 0xd1, + 0x0c, 0xd5, 0x0e, 0x7c, 0xb7, 0xc0, 0xd0, 0x06, 0x50, 0x83, 0x0e, 0xf3, + 0x7f, 0x58, 0x17, 0x42, 0x8a, 0x28, 0x17, 0x2d, 0x00, 0x1f, 0x28, 0x0d, + 0x30, 0x20, 0x0b, 0x30, 0xc0, 0x05, 0x48, 0x11, 0x10, 0x17, 0x54, 0xff, + 0x1d, 0x12, 0x12, 0x13, 0x12, 0x12, 0x50, 0x1d, 0x20, 0x06, 0x0e, 0x20, + 0x05, 0x1d, 0x1d, 0x5e, 0x0d, 0x01, 0x61, 0xce, 0x00, 0x00, 0x1f, 0x18, + 0xb5, 0x28, 0x17, 0x00, 0xfb, 0x30, 0xaf, 0x30, 0xea, 0x30, 0xb9, 0x30, + 0x05, 0xc8, 0x30, 0xd0, 0x30, 0xeb, 0x05, 0xe8, 0x1b, 0x53, 0x28, 0x09, + 0x54, 0x6e, 0x2f, 0xa5, 0x43, 0x2f, 0xab, 0x69, 0x2f, 0xb7, 0x74, 0x00, + 0x1c, 0xf3, 0x00, 0x62, 0x28, 0x1d, 0x05, 0x5f, 0xad, 0x10, 0x0f, 0x10, + 0x7f, 0x23, 0x57, 0x00, 0x4b, 0x51, 0xcc, 0x91, 0xaf, 0x65, 0x1a, 0x59, + 0x20, 0x21, 0x58, 0x06, 0x38, 0x1f, 0xb0, 0xc0, 0x6c, 0xd0, 0xac, 0x01, + 0xb9, 0xa4, 0xc2, 0xa0, 0xd1, 0x1c, 0xbc, 0x06, 0x38, 0x9d, 0xb6, 0x07, + 0x13, 0x7f, 0xe3, 0x2f, 0x31, 0xd3, 0xff, 0x76, 0x40, 0x13, 0x05, 0x5c, + 0xa3, 0x21, 0xa0, 0x28, 0x09, 0x3d, 0x28, 0x13, 0x1a, 0x04, 0x40, 0x04, + 0x38, 0x22, 0x04, 0x41, 0x28, 0x21, 0x3e, 0x04, 0x31, 0x28, 0x1d, 0x3b, + 0x31, 0x04, 0x4c, 0x05, 0x48, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x1e, 0x18, + 0x18, 0x20, 0x01, 0x06, 0x1e, 0x1e, 0x18, 0x1d, 0x15, 0x20, 0x05, 0x20, + 0x07, 0x0d, 0x62, 0x27, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x05, 0x05, + 0x20, 0x01, 0x01, 0xa2, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x01, 0x01, 0x02, + 0x30, 0x04, 0x01, 0x41, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, + 0x30, 0x04, 0x20, 0x02, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, + 0x90, 0x30, 0x04, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x4a, + 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, 0x05, 0x11, + 0x05, 0x06, 0x06, 0xd0, 0x01, 0x07, 0x09, 0x09, 0x20, 0x01, 0x50, 0x07, + 0x20, 0x06, 0x1e, 0x20, 0x05, 0x07, 0x07, 0x08, 0x0b, 0x05, 0x0b, 0x0c, + 0x0b, 0x0b, 0x08, 0x20, 0x06, 0x07, 0x20, 0x05, 0x00, 0x08, 0x08, 0x09, + 0x0c, 0x0c, 0x0d, 0x0c, 0x0c, 0x51, 0x09, 0x20, 0x06, 0x08, 0x20, 0x05, + 0x09, 0x09, 0x0a, 0x30, 0x14, 0x28, 0x08, 0x0a, 0x20, 0x06, 0x1d, 0x20, + 0x05, 0x0a, 0x0a, 0x0b, 0x02, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0b, 0x20, + 0x06, 0x0a, 0xc0, 0x20, 0x05, 0x20, 0x3c, 0x0f, 0x0f, 0x10, 0x0f, 0x0f, + 0x0c, 0xb0, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x20, 0x3c, 0x11, 0x11, 0x12, + 0x11, 0x2c, 0x11, 0x0d, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x20, 0x2c, 0x13, + 0x13, 0x0a, 0x14, 0x13, 0x13, 0x0e, 0x20, 0x06, 0x10, 0x20, 0x05, 0x0e, + 0x00, 0x0e, 0x0f, 0x14, 0x14, 0x15, 0x14, 0x14, 0x0f, 0xb0, 0x20, 0x06, + 0x11, 0x20, 0x05, 0x20, 0x3c, 0x15, 0x15, 0x16, 0x15, 0x28, 0x15, 0x10, + 0x20, 0x06, 0x12, 0x20, 0x05, 0x10, 0x10, 0x11, 0x02, 0x16, 0x16, 0x0b, + 0x16, 0x16, 0x11, 0x20, 0x06, 0x13, 0xca, 0x20, 0x05, 0x20, 0x4c, 0x17, + 0x17, 0x20, 0x01, 0x12, 0x20, 0x06, 0x14, 0xc8, 0x20, 0x05, 0x29, 0x5c, + 0x1b, 0x1b, 0x20, 0x01, 0x13, 0x13, 0x1b, 0x32, 0x1a, 0x1a, 0x20, 0x05, + 0x20, 0x5c, 0x19, 0x19, 0x20, 0x01, 0x14, 0x0c, 0x14, 0x19, 0x18, 0x17, + 0x20, 0x05, 0x20, 0x5c, 0x1a, 0x1a, 0x83, 0x20, 0x01, 0x15, 0x15, 0x1a, + 0x19, 0x16, 0x20, 0x05, 0x20, 0x5c, 0x20, 0x1c, 0x1c, 0x20, 0x01, 0x16, + 0x16, 0x1c, 0x1b, 0x18, 0x88, 0x20, 0x05, 0x16, 0x16, 0x17, 0x39, 0x94, + 0x1d, 0x17, 0x17, 0x13, 0x1d, 0x1c, 0x19, 0x20, 0x05, 0x17, 0x17, 0x41, + 0x8c, 0x21, 0x9c, 0x14, 0x1e, 0x1e, 0x04, 0x41, 0xa2, 0x19, 0x31, 0x14, + 0x07, 0x19, 0xa2, 0x20, 0x06, 0x1c, 0x20, 0x05, 0x19, 0x19, 0x1a, 0x30, + 0xf4, 0x0a, 0x5c, 0x1a, 0x20, 0x06, 0x1b, 0x20, 0x05, 0x20, 0x74, 0x20, + 0xc2, 0x0e, 0x0e, 0x51, 0x1b, 0x20, 0x06, 0x09, 0x20, 0x05, 0x1b, 0x1b, + 0x1c, 0x20, 0xb2, 0x14, 0x10, 0x10, 0x1c, 0x20, 0x06, 0x0c, 0x20, 0x05, + 0x1c, 0x1c, 0xe0, 0xf9, 0xff, 0xf1, 0xf7, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xf4, 0xcb, 0x00, + 0x11, 0x18, 0x00, 0x00, 0x30, 0x01, 0x19, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd9, 0xff, 0x2e, + 0xc8, 0x00, 0x00, 0x00, 0x02, 0x19, 0xd4, 0x30, 0xc1, 0x30, 0xf3, 0x90, + 0x20, 0x03, 0xe3, 0x30, 0x06, 0x58, 0x1f, 0x50, 0x00, 0x69, 0x00, 0x15, + 0x63, 0x00, 0x68, 0x20, 0x05, 0x6e, 0x40, 0x07, 0x61, 0x10, 0x15, 0xe0, + 0x7f, 0x00, 0xae, 0x76, 0xa6, 0x94, 0xe5, 0x67, 0x01, 0x77, 0x81, 0x06, + 0x7b, 0x1d, 0x3c, 0xd5, 0x5c, 0xce, 0x28, 0xcc, 0x06, 0x9b, 0x9b, 0x82, + 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x38, 0x04, 0x47, 0x20, 0x03, 0x3d, 0x91, + 0x20, 0x05, 0x30, 0x04, 0x10, 0x1e, 0x14, 0xff, 0x01, 0x13, 0x13, 0x20, + 0x01, 0x52, 0x01, 0x20, 0x06, 0x10, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, + 0x03, 0x00, 0x19, 0xac, 0x30, 0xe9, 0x30, 0xd1, 0x30, 0xb4, 0x28, 0x30, + 0xb9, 0x06, 0x68, 0x17, 0x47, 0x28, 0x09, 0x6c, 0x00, 0xe1, 0x20, 0x00, + 0x70, 0x28, 0x11, 0x67, 0x00, 0x6f, 0x00, 0x73, 0xb1, 0x0e, 0x40, 0x7f, + 0x61, 0xa0, 0xff, 0x39, 0x21, 0x73, 0x00, 0x65, 0x21, 0x15, 0x40, 0x6e, + 0x10, 0x05, 0x21, 0x7f, 0xa0, 0x52, 0xc9, 0x62, 0x15, 0x5e, 0x08, 0x08, + 0x62, 0xaf, 0x65, 0x06, 0x58, 0x1b, 0x08, 0xac, 0x7c, 0x01, 0xb7, 0x0c, + 0xd3, 0xe0, 0xac, 0xa4, 0xc2, 0x10, 0x06, 0x53, 0x7f, 0x54, 0x13, 0x28, + 0x0d, 0x3b, 0x28, 0x11, 0x3f, 0x28, 0x15, 0x33, 0x04, 0x1c, 0x3e, 0x04, + 0x41, 0x05, 0xe8, 0x1b, 0x0f, 0x54, 0xff, 0x10, 0x06, 0x90, 0xff, 0x02, + 0x09, 0x54, 0x09, 0x20, 0x01, 0x02, 0x20, 0x06, 0x03, 0x20, 0x05, 0x02, + 0x02, 0x00, 0x5d, 0xff, 0x49, 0xc0, 0x00, 0x00, 0x04, 0x19, 0x44, 0xa2, + 0x28, 0x11, 0xa2, 0x30, 0xa4, 0x06, 0x68, 0x15, 0x00, 0x00, 0x05, 0x41, + 0x00, 0x7a, 0x00, 0x75, 0x2f, 0xa5, 0x79, 0x10, 0x16, 0x60, 0x7f, 0x03, + 0x3f, 0x96, 0xcf, 0x82, 0x7e, 0x82, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x00, + 0x44, 0xc5, 0x18, 0xc2, 0x44, 0xc5, 0x74, 0xc7, 0xab, 0x10, 0x06, 0x73, + 0x7f, 0x10, 0x28, 0x09, 0x43, 0x28, 0x1b, 0x39, 0x05, 0xe8, 0x0f, 0x10, + 0x17, 0x74, 0xff, 0x14, 0x03, 0x01, 0x01, 0x20, 0x01, 0x03, 0x40, 0x06, + 0x03, 0x03, 0x04, 0x03, 0x03, 0xf4, 0xfd, 0xd6, 0x24, 0x8b, 0x05, 0x19, + 0x00, 0xdc, 0x30, 0xea, 0x30, 0xfc, 0x30, 0xd0, 0x30, 0x50, 0xeb, 0x06, + 0x68, 0x19, 0x42, 0x2f, 0xa3, 0x6c, 0x00, 0xed, 0x00, 0x50, 0x76, 0x2f, + 0xb7, 0x72, 0x10, 0x16, 0x20, 0x7f, 0xbb, 0x73, 0x29, 0x52, 0x08, 0xe6, + 0x74, 0x14, 0x5c, 0x06, 0x78, 0x19, 0xfc, 0xbc, 0xac, 0x06, 0xb9, 0x14, + 0xbc, 0x74, 0xb9, 0x06, 0x7b, 0x97, 0x0e, 0xf3, 0x7f, 0x11, 0x00, 0x04, + 0x3e, 0x04, 0x3b, 0x04, 0x38, 0x04, 0x32, 0xb1, 0x28, 0x1b, 0x40, 0x06, + 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x02, 0x02, 0x20, 0x01, 0x40, + 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0xdd, 0xfe, 0x40, 0xd3, 0x2c, + 0xa3, 0x06, 0x19, 0xab, 0x30, 0xcb, 0x30, 0x45, 0xe3, 0x06, 0x88, 0x15, + 0x00, 0x00, 0x43, 0x2f, 0xab, 0xf1, 0x06, 0x68, 0x13, 0x81, 0x10, 0x0f, + 0x30, 0x7f, 0x61, 0x53, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x98, 0x17, 0x0d, + 0x74, 0xce, 0xd0, 0xb0, 0x06, 0x98, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, + 0x0f, 0x06, 0x3d, 0x04, 0x4c, 0x04, 0x4f, 0x06, 0x48, 0x15, 0x10, 0x17, + 0x14, 0xff, 0x05, 0x2a, 0x03, 0x03, 0x20, 0x01, 0x05, 0x20, 0x06, 0x06, + 0x20, 0x05, 0x05, 0x0a, 0x05, 0x0f, 0xfe, 0xf1, 0x28, 0x17, 0x07, 0x28, + 0x17, 0xeb, 0x30, 0x30, 0xc1, 0x06, 0x88, 0x15, 0x58, 0x17, 0x72, 0x00, + 0x63, 0x00, 0x10, 0x68, 0x00, 0x69, 0x10, 0x16, 0x40, 0x7f, 0x61, 0x53, + 0x14, 0x5c, 0x30, 0x47, 0x59, 0x06, 0x78, 0x15, 0x38, 0x17, 0x74, 0xb9, + 0x58, 0xce, 0xc1, 0x10, 0x06, 0x93, 0x7f, 0x38, 0x17, 0x40, 0x04, 0x47, + 0x04, 0x38, 0x06, 0x48, 0x15, 0x8a, 0x10, 0x17, 0x14, 0xff, 0x06, 0x04, + 0x04, 0x20, 0x01, 0x06, 0x20, 0x06, 0x07, 0x80, 0x20, 0x05, 0x06, 0x06, + 0x91, 0x00, 0xba, 0xc8, 0x00, 0x00, 0x00, 0x08, 0x19, 0xc1, 0x30, 0xf3, + 0x30, 0xdc, 0x0a, 0x30, 0xe9, 0x30, 0xbd, 0x06, 0x68, 0x1b, 0x43, 0x48, + 0x11, 0x6d, 0x08, 0x00, 0x62, 0x00, 0x6f, 0x2f, 0xb3, 0x61, 0x00, 0x7a, + 0xc0, 0x20, 0x07, 0x10, 0x15, 0xb0, 0x7f, 0xa6, 0x94, 0x5a, 0x53, 0xc9, + 0x62, 0x20, 0x22, 0x7d, 0x06, 0x78, 0x19, 0x68, 0xce, 0xf4, 0xbc, 0x7c, + 0x1a, 0xb7, 0x8c, 0xc1, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, 0x27, 0x28, + 0x11, 0x3c, 0x08, 0x04, 0x31, 0x04, 0x3e, 0x28, 0x1d, 0x30, 0x04, 0x41, + 0xc5, 0x20, 0x07, 0x10, 0x1d, 0xd4, 0xff, 0x07, 0x05, 0x05, 0x20, 0x01, + 0x07, 0x20, 0x06, 0x41, 0x16, 0x20, 0x05, 0x07, 0x07, 0xd1, 0xfe, 0x16, + 0x28, 0x17, 0x00, 0x09, 0x19, 0xb3, 0x30, 0xc8, 0x30, 0xd1, 0x30, 0x11, + 0xaf, 0x30, 0xb7, 0x06, 0x88, 0x17, 0x6f, 0x00, 0x74, 0x28, 0x13, 0x58, + 0x70, 0x2f, 0xb7, 0x78, 0x06, 0x2f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0xd1, + 0x79, 0x58, 0x04, 0x62, 0x15, 0x5e, 0x0c, 0x5e, 0x06, 0x78, 0x17, 0x54, + 0xcf, 0x03, 0xa0, 0xd1, 0x0d, 0xd3, 0xdc, 0xc2, 0x06, 0x98, 0x17, 0x0e, + 0xd3, 0x7f, 0x55, 0x1a, 0x28, 0x11, 0x42, 0x28, 0x15, 0x3f, 0x28, 0x15, + 0x3a, 0x28, 0x17, 0x62, 0x38, 0x06, 0x08, 0x17, 0x10, 0x16, 0xd4, 0xff, + 0x08, 0x06, 0x06, 0x20, 0x01, 0x08, 0xa0, 0x20, 0x06, 0x08, 0x20, 0x05, + 0x08, 0x08, 0x57, 0xff, 0x19, 0x80, 0x28, 0x17, 0x0a, 0x19, 0xa8, 0x30, + 0xeb, 0x30, 0xfb, 0x08, 0x30, 0xaa, 0x30, 0xed, 0x06, 0x68, 0x17, 0x45, + 0x00, 0x6c, 0x0e, 0x00, 0x20, 0x00, 0x4f, 0x2f, 0xab, 0x05, 0xdf, 0xa7, + 0x10, 0x0f, 0x70, 0x7f, 0xc3, 0x01, 0x57, 0x14, 0x5c, 0x65, 0x59, 0x57, + 0x7f, 0x06, 0x78, 0x17, 0x03, 0xd8, 0xc5, 0x24, 0xc6, 0x5c, 0xb8, 0x06, + 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x00, 0x2d, 0x04, 0x3b, 0x04, 0x4c, 0x04, + 0x2d, 0x00, 0x18, 0x1e, 0x04, 0x40, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, + 0x09, 0x07, 0x07, 0xa8, 0x20, 0x01, 0x09, 0x20, 0x06, 0x17, 0x20, 0x05, + 0x09, 0x09, 0xae, 0x02, 0xfd, 0x23, 0xc7, 0x00, 0x00, 0x0b, 0x28, 0x17, + 0xb9, 0x0b, 0x30, 0xe1, 0x30, 0xe9, 0x28, 0x1d, 0xc0, 0x20, 0x09, 0x06, + 0x38, 0x17, 0x05, 0x73, 0x00, 0x6d, 0x00, 0x65, 0x28, 0x17, 0x61, 0x28, + 0x21, 0x50, 0x64, 0x2f, 0xb5, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0xc3, 0x57, + 0xaf, 0x65, 0x00, 0x85, 0x68, 0xc9, 0x62, 0x14, 0x5c, 0xbe, 0x8f, 0x20, + 0xaf, 0x65, 0x06, 0x18, 0x1d, 0xd0, 0xc5, 0xa4, 0xc2, 0x54, 0x01, 0xba, + 0x84, 0xb7, 0xe4, 0xb2, 0xa4, 0xc2, 0x06, 0x5b, 0x97, 0x80, 0x0e, 0xd3, + 0x7f, 0x2d, 0x04, 0x41, 0x04, 0x3c, 0x04, 0x35, 0xab, 0x28, 0x15, 0x30, + 0x48, 0x21, 0x34, 0x20, 0x07, 0x41, 0x05, 0xa8, 0x1f, 0x10, 0x16, 0xf4, + 0xff, 0x15, 0x0a, 0x08, 0x08, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x18, 0x20, + 0x05, 0x04, 0x0a, 0x0a, 0xb3, 0x00, 0x54, 0x28, 0x17, 0x0c, 0x19, 0x06, + 0xb0, 0x30, 0xa2, 0x30, 0xe4, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x47, 0x2c, + 0x00, 0x75, 0x28, 0x11, 0x79, 0x06, 0x08, 0x0f, 0x10, 0x0f, 0x70, 0x7f, + 0xdc, 0x74, 0x31, 0x9a, 0x4e, 0x06, 0x38, 0x0f, 0x7f, 0xff, 0xfc, 0xac, + 0x7c, 0x28, 0x19, 0xc5, 0x06, 0x73, 0x7d, 0x0f, 0x13, 0x7f, 0x13, 0x04, + 0x43, 0x28, 0x11, 0x4f, 0x05, 0xc8, 0x0b, 0xa5, 0x10, 0x17, 0xb4, 0xff, + 0x0b, 0x38, 0x0c, 0x0a, 0x0b, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x0b, + 0x0b, 0x76, 0xfe, 0x2f, 0x28, 0x17, 0x0d, 0x19, 0x00, 0xa4, 0x30, 0xf3, + 0x30, 0xd0, 0x30, 0xd6, 0x30, 0x55, 0xe9, 0x06, 0x68, 0x19, 0x49, 0x2f, + 0xad, 0x62, 0x2f, 0xab, 0x62, 0x28, 0x1f, 0xc0, 0x3f, 0xb3, 0x10, 0x15, + 0xf0, 0x7f, 0xe0, 0x56, 0xf4, 0x5d, 0x03, 0x5e, 0x20, 0xc9, 0x62, 0x06, + 0x78, 0x19, 0x84, 0xc7, 0x14, 0xbc, 0x80, 0x18, 0xbd, 0x7c, 0xb7, 0x06, + 0x7b, 0x97, 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x3c, 0x2b, 0x04, 0x31, 0x28, + 0x19, 0x31, 0x28, 0x1f, 0x40, 0x28, 0x21, 0x10, 0x1d, 0xf4, 0xff, 0x4a, + 0x0c, 0x38, 0x0c, 0x0b, 0x0c, 0x20, 0x06, 0x05, 0x20, 0x05, 0x0c, 0x00, + 0x0c, 0x3f, 0x00, 0x74, 0xc8, 0x00, 0x00, 0x0e, 0x0c, 0x19, 0xed, 0x30, + 0xcf, 0x06, 0x68, 0x11, 0x5f, 0xff, 0x4c, 0x00, 0x18, 0x6f, 0x00, 0x6a, + 0x06, 0x28, 0x0f, 0x10, 0x0f, 0x70, 0x7f, 0x1b, 0x6d, 0xc8, 0x61, 0x54, + 0x06, 0x78, 0x13, 0x3f, 0xff, 0x5c, 0xb8, 0x58, 0xd5, 0x10, 0x06, 0xb3, + 0x7f, 0x06, 0x1b, 0x04, 0x3e, 0x04, 0x45, 0x06, 0x28, 0x0f, 0x10, 0x17, + 0x74, 0xff, 0x0d, 0x94, 0x38, 0x0c, 0x0c, 0x0d, 0x20, 0x06, 0x0a, 0x20, + 0x05, 0x0d, 0x0d, 0x01, 0x28, 0xfd, 0xac, 0xc7, 0x00, 0x00, 0x0f, 0x28, + 0x17, 0x01, 0xb9, 0x30, 0xfb, 0x30, 0xea, 0x30, 0xaa, 0x20, 0x07, 0x80, + 0x06, 0x78, 0x17, 0x73, 0x00, 0x20, 0x00, 0x52, 0x00, 0xed, 0xc0, 0x40, + 0x09, 0x10, 0x15, 0xf0, 0x7f, 0x1b, 0x6d, 0xaf, 0x65, 0xcc, 0x91, 0x08, + 0x65, 0x59, 0xaf, 0x65, 0x06, 0x58, 0x1d, 0x5c, 0xb8, 0xa4, 0x00, 0xc2, + 0x20, 0x00, 0xac, 0xb9, 0x24, 0xc6, 0xa4, 0x60, 0xc2, 0x10, 0x06, 0x33, + 0x7f, 0x38, 0x17, 0x41, 0x04, 0x2d, 0x00, 0x20, 0x34, 0x04, 0x38, 0x40, + 0x09, 0x10, 0x1d, 0xf4, 0xff, 0x0e, 0x38, 0x0c, 0x0d, 0x0e, 0xa0, 0x20, + 0x06, 0x09, 0x20, 0x05, 0x0e, 0x0e, 0xb6, 0xfe, 0x75, 0x80, 0x28, 0x17, + 0x10, 0x19, 0xde, 0x30, 0xca, 0x30, 0xd3, 0xd5, 0x06, 0x48, 0x11, 0x5f, + 0xff, 0x4d, 0x2f, 0xab, 0x6e, 0x2f, 0xaf, 0x62, 0x28, 0x17, 0x81, 0x10, + 0x16, 0x30, 0x7f, 0x6c, 0x9a, 0xb3, 0x7e, 0xd4, 0x6b, 0x06, 0x58, 0x13, + 0x81, 0x3f, 0xff, 0xc8, 0xb9, 0x98, 0xb0, 0x44, 0xbe, 0x10, 0x06, 0x93, + 0x7f, 0x05, 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x31, 0x28, 0x17, + 0xa5, 0x10, 0x1e, 0x34, 0xff, 0x0f, 0x38, 0x0c, 0x0e, 0x0f, 0x20, 0x06, + 0x0b, 0x20, 0x05, 0x00, 0x0f, 0x0f, 0x41, 0xff, 0xcb, 0xc6, 0x00, 0x00, + 0x04, 0x11, 0x19, 0xe2, 0x30, 0xed, 0x28, 0x19, 0xfb, 0x30, 0x00, 0xb5, + 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0x15, 0xa2, 0x30, 0xb4, 0x05, + 0xc8, 0x25, 0x4d, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x88, 0x38, 0x1b, 0x2d, + 0x00, 0x53, 0x48, 0x25, 0x74, 0x00, 0x69, 0xb6, 0x28, 0x2d, 0x67, 0x2f, + 0xc9, 0x0d, 0xd0, 0x7f, 0x20, 0x0e, 0xe0, 0x7f, 0x06, 0x31, 0xff, 0xab, + 0x00, 0x83, 0x57, 0x7f, 0xb3, 0x7e, 0x2d, 0x00, 0x23, 0x01, 0x57, 0x30, + 0x57, 0x9a, 0x4e, 0xe5, 0x54, 0x05, 0xf8, 0x21, 0x00, 0xa8, 0xba, 0x5c, + 0xb8, 0x98, 0xb0, 0x20, 0x00, 0x00, 0xb0, 0xc0, 0xf0, 0xd2, 0x44, 0xc5, + 0xe0, 0xac, 0xc1, 0x06, 0x1b, 0x97, 0x0e, 0xd3, 0x7f, 0x1c, 0x04, 0x3e, + 0x04, 0x40, 0x20, 0x03, 0x88, 0x38, 0x1b, 0x2d, 0x00, 0x21, 0x48, 0x25, + 0x42, 0x04, 0x4c, 0x0e, 0x04, 0x4f, 0x04, 0x33, 0x20, 0x19, 0x10, 0x05, + 0xd4, 0xff, 0x10, 0x06, 0x30, 0xff, 0x10, 0x94, 0x38, 0x0c, 0x0f, 0x10, + 0x20, 0x06, 0x0c, 0x20, 0x05, 0x10, 0x10, 0x00, 0x5b, 0xfe, 0x74, 0xc8, + 0x00, 0x00, 0x12, 0x19, 0x06, 0xd1, 0x30, 0xb9, 0x30, 0xbf, 0x28, 0x15, + 0x06, 0x7d, 0x2f, 0x50, 0xa3, 0x2f, 0xaf, 0x73, 0x28, 0x09, 0x61, 0x00, + 0x7a, 0x2f, 0xb9, 0x10, 0x16, 0x10, 0x7f, 0x00, 0x15, 0x5e, 0xaf, 0x65, + 0x54, 0x58, 0x28, 0x84, 0xc0, 0x05, 0xf8, 0x0f, 0x7f, 0xff, 0x0c, 0xd3, + 0xa4, 0xc2, 0xc0, 0xd0, 0x2b, 0xac, 0xc0, 0x10, 0x06, 0x73, 0x7f, 0x1f, + 0x28, 0x0f, 0x41, 0x28, 0x09, 0x30, 0x05, 0x62, 0x30, 0x05, 0x28, 0x07, + 0x10, 0x17, 0xf4, 0xff, 0x11, 0x12, 0x12, 0x20, 0x01, 0x11, 0xa0, 0x20, + 0x06, 0x0f, 0x20, 0x05, 0x11, 0x11, 0xf6, 0xfe, 0x8c, 0x80, 0x28, 0x17, + 0x13, 0x19, 0xc8, 0x30, 0xa5, 0x30, 0xf3, 0x02, 0x30, 0xb0, 0x30, 0xe9, + 0x30, 0xef, 0x06, 0x48, 0x1b, 0x54, 0x2a, 0x00, 0x75, 0x2f, 0xab, 0x67, + 0x20, 0x05, 0x72, 0x2f, 0xb1, 0x68, 0xe0, 0x20, 0x0d, 0x05, 0xd8, 0x1d, + 0x10, 0x0e, 0xf0, 0x7f, 0x1a, 0x90, 0xe4, 0x53, 0xc9, 0x10, 0x62, 0xe6, + 0x74, 0x06, 0x78, 0x17, 0x41, 0xd2, 0xf8, 0xad, 0x03, 0x7c, 0xb7, 0xb0, + 0xc6, 0x44, 0xc5, 0x06, 0x5b, 0x99, 0x0e, 0xf3, 0x7f, 0x01, 0x22, 0x04, + 0x43, 0x04, 0x3d, 0x04, 0x3a, 0x20, 0x05, 0x5c, 0x40, 0x28, 0x21, 0x33, + 0x20, 0x0d, 0x05, 0xd8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x17, 0x54, + 0x17, 0x20, 0x01, 0x12, 0x20, 0x06, 0x15, 0x20, 0x05, 0x12, 0x12, 0x10, + 0x1d, 0xff, 0x19, 0x28, 0x17, 0x14, 0x19, 0xb5, 0x30, 0x44, 0xe2, 0x28, + 0x13, 0xfb, 0x30, 0xc1, 0x28, 0x1d, 0xc1, 0x30, 0x51, 0xda, 0x06, 0x08, + 0x1b, 0x5a, 0x2f, 0xaf, 0x6d, 0x00, 0x6f, 0x48, 0x15, 0x15, 0x2d, 0x00, + 0x43, 0x28, 0x19, 0x69, 0x28, 0x27, 0x63, 0x40, 0x07, 0x16, 0x70, 0x00, + 0x65, 0x0d, 0xc0, 0x7f, 0x20, 0x0e, 0xe0, 0x7f, 0x06, 0x31, 0xff, 0x28, + 0x00, 0x84, 0xab, 0x83, 0xc9, 0x62, 0x2d, 0x00, 0xa6, 0x04, 0x94, 0x47, + 0x59, 0x69, 0x4f, 0x06, 0x18, 0x1d, 0xac, 0xc0, 0x00, 0xa8, 0xba, 0x7c, + 0xb7, 0x20, 0x00, 0x5c, 0xce, 0x0d, 0x58, 0xce, 0x98, 0xd3, 0x06, 0x1f, + 0xb0, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x0d, 0x10, 0x3c, 0x04, 0x3e, 0x48, + 0x15, 0x2d, 0x00, 0x27, 0x04, 0x51, 0x38, 0x28, 0x25, 0x47, 0x20, 0x05, + 0x3f, 0x04, 0x35, 0x05, 0x48, 0x1f, 0xc5, 0x0f, 0xb4, 0xff, 0x10, 0x06, + 0x30, 0xff, 0x13, 0x18, 0x18, 0x20, 0x01, 0x13, 0x20, 0x06, 0x40, 0x11, + 0x20, 0x05, 0x13, 0x13, 0x1c, 0xfd, 0xdb, 0xc7, 0x01, 0x00, 0x00, 0x15, + 0x19, 0xb9, 0x30, 0xaf, 0x28, 0x11, 0x06, 0xd3, 0x30, 0xaa, 0x30, 0xb9, + 0x06, 0x08, 0x13, 0x3f, 0xff, 0x53, 0xa2, 0x2f, 0xaf, 0x63, 0x2f, 0xb3, + 0x6d, 0x00, 0x62, 0x28, 0x11, 0x6f, 0x28, 0x00, 0x73, 0x06, 0xa0, 0x7f, + 0xed, 0x10, 0x0e, 0x20, 0x7f, 0xcf, 0x82, 0x06, 0x01, 0x66, 0xd5, 0x6b, + 0x65, 0x59, 0xaf, 0x65, 0x06, 0x18, 0x13, 0x80, 0x3f, 0xff, 0xa4, 0xc2, + 0xf0, 0xcf, 0x44, 0xbe, 0x24, 0x18, 0xc6, 0xa4, 0xc2, 0x06, 0x33, 0x7d, + 0x0f, 0x12, 0xff, 0x21, 0x04, 0x43, 0x22, 0x04, 0x3a, 0x20, 0x03, 0x3c, + 0x04, 0x31, 0x28, 0x13, 0x3e, 0x38, 0x04, 0x41, 0x05, 0x48, 0x0d, 0x08, + 0x54, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x14, 0x16, 0x16, 0xa8, 0x20, 0x01, + 0x14, 0x20, 0x06, 0x14, 0x20, 0x05, 0x14, 0x14, 0x0f, 0x00, 0x00, 0x54, + 0xc9, 0x00, 0x00, 0x16, 0x19, 0xca, 0x35, 0x30, 0xdd, 0x06, 0x48, 0x0f, + 0x7f, 0xff, 0x4e, 0x2f, 0xaf, 0x70, 0x2f, 0xaf, 0x86, 0x10, 0x16, 0x70, + 0x7f, 0xb3, 0x7e, 0xe2, 0x6c, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x98, 0x10, + 0xb0, 0xec, 0xd3, 0x10, 0x06, 0xb3, 0x7f, 0x1d, 0x04, 0x30, 0x04, 0x62, + 0x3f, 0x28, 0x0f, 0x10, 0x1e, 0x74, 0xff, 0x15, 0x10, 0x10, 0x20, 0x01, + 0x15, 0xa0, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x15, 0x15, 0x4d, 0xff, 0xaa, + 0x00, 0xc8, 0x00, 0x00, 0x17, 0x19, 0xaa, 0x30, 0xec, 0x02, 0x30, 0xea, + 0x30, 0xe3, 0x30, 0xca, 0x06, 0x68, 0x1d, 0x4f, 0x02, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6c, 0x20, 0x01, 0x61, 0x30, 0x00, 0x6e, 0x28, 0x23, 0x10, + 0x15, 0xf0, 0x7f, 0x65, 0x59, 0xf7, 0x96, 0x02, 0x29, 0x52, 0x9a, 0x4e, + 0xb3, 0x7e, 0x06, 0x58, 0x1d, 0x24, 0x01, 0xc6, 0x10, 0xb8, 0x7c, 0xb7, + 0x98, 0xb0, 0x06, 0x7b, 0x9b, 0x80, 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x3b, 0x03, 0x04, 0x4c, 0x04, 0x4f, 0x04, 0x3d, 0x28, + 0x23, 0x10, 0x1d, 0xf4, 0xff, 0x15, 0x16, 0x11, 0x11, 0x20, 0x01, 0x16, + 0x20, 0x06, 0x0e, 0x20, 0x05, 0x00, 0x16, 0x16, 0x6f, 0xff, 0xb2, 0xc9, + 0x00, 0x00, 0x00, 0x18, 0x19, 0xb5, 0x30, 0xf3, 0x30, 0xbf, 0x30, 0x15, + 0xfb, 0x30, 0xa8, 0x28, 0x1f, 0xfc, 0x06, 0x28, 0x1d, 0x53, 0x48, 0x0f, + 0x45, 0x74, 0x2f, 0xb5, 0x20, 0x00, 0x45, 0x28, 0x1f, 0x65, 0x05, 0xe8, + 0x1d, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x23, 0x57, 0xc3, 0x57, 0x26, 0x4f, + 0x1c, 0x40, 0x5a, 0x06, 0x58, 0x15, 0x00, 0x00, 0xb0, 0xc0, 0xc0, 0xd0, + 0x0d, 0xd8, 0xc5, 0x08, 0xb8, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x21, + 0x28, 0x0b, 0x11, 0x3d, 0x04, 0x42, 0x28, 0x11, 0x20, 0x00, 0x2d, 0x28, + 0x1f, 0x62, 0x35, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x17, 0x14, + 0x14, 0x20, 0x01, 0x17, 0xa0, 0x20, 0x06, 0x12, 0x20, 0x05, 0x17, 0x17, + 0x6b, 0xfe, 0x81, 0x0a, 0xc6, 0x00, 0x00, 0x19, 0x48, 0x17, 0xc8, 0x28, + 0x17, 0xc9, 0x2a, 0x30, 0xdf, 0x28, 0x21, 0xb4, 0x28, 0x21, 0xc7, 0x28, + 0x25, 0xed, 0x20, 0x30, 0xb9, 0x28, 0x2b, 0xc4, 0x30, 0xa1, 0x30, 0xc1, + 0x35, 0x30, 0xe9, 0x20, 0x0b, 0x05, 0x18, 0x17, 0x6f, 0x28, 0x17, 0x44, + 0x20, 0x05, 0x15, 0x6d, 0x00, 0x69, 0x2f, 0xb7, 0x67, 0x40, 0x0f, 0x64, + 0x2f, 0xc9, 0x45, 0x20, 0x2f, 0xcb, 0x6f, 0x00, 0x73, 0x28, 0x35, 0x54, + 0x20, 0x05, 0x06, 0xe1, 0x00, 0x63, 0x00, 0x68, 0x20, 0x21, 0x3f, 0xdd, + 0x73, 0x80, 0x10, 0x13, 0x40, 0x7f, 0x23, 0x57, 0x1a, 0x59, 0x0e, 0x66, + 0x04, 0x00, 0x54, 0x2d, 0x00, 0xb7, 0x5f, 0x1b, 0x6d, 0xaf, 0x00, 0x65, + 0xe5, 0x67, 0x47, 0x59, 0xc9, 0x62, 0xaf, 0x40, 0x65, 0x05, 0x78, 0x27, + 0xb0, 0xc0, 0xa0, 0xd1, 0xc4, 0xb3, 0x00, 0x0d, 0xbc, 0xe0, 0xac, 0x78, + 0xb3, 0x5c, 0xb8, 0x00, 0xa4, 0xc2, 0xb8, 0xd2, 0xac, 0xc0, 0x60, 0xce, + 0x0e, 0x7c, 0xb7, 0xa4, 0xc2, 0x05, 0xdb, 0x97, 0x0e, 0x73, 0x7f, 0x78, + 0x17, 0x3e, 0xa2, 0x28, 0x17, 0x14, 0x20, 0x05, 0x3c, 0x04, 0x38, 0x28, + 0x27, 0x33, 0xa2, 0x40, 0x0f, 0x34, 0x28, 0x25, 0x20, 0x00, 0x3b, 0x20, + 0x1b, 0x41, 0xa2, 0x28, 0x35, 0x22, 0x20, 0x05, 0x30, 0x04, 0x47, 0x20, + 0x1f, 0x3b, 0xb1, 0x28, 0x4b, 0x41, 0x03, 0x68, 0x3b, 0x10, 0x16, 0xf4, + 0xff, 0x18, 0x15, 0x15, 0x20, 0x01, 0x50, 0x18, 0x20, 0x06, 0x13, 0x20, + 0x05, 0x18, 0x18, 0xd3, 0xff, 0x22, 0xb8, 0xc7, 0x00, 0x3f, 0xff, 0x01, + 0x13, 0x13, 0x20, 0x01, 0x01, 0xa0, 0x20, 0x06, 0x10, 0x20, 0x05, 0x01, + 0x01, 0x02, 0x09, 0x09, 0xa8, 0x20, 0x01, 0x02, 0x20, 0x06, 0x03, 0x20, + 0x05, 0x02, 0x02, 0x03, 0x90, 0x30, 0x14, 0x01, 0x03, 0x40, 0x06, 0x03, + 0x03, 0x03, 0x03, 0x48, 0x04, 0x30, 0x14, 0x02, 0x04, 0x40, 0x06, 0x04, + 0x04, 0x04, 0x25, 0x04, 0x05, 0x30, 0x14, 0x03, 0x05, 0x20, 0x06, 0x06, + 0x20, 0x05, 0x12, 0x05, 0x05, 0x06, 0x30, 0x14, 0x04, 0x06, 0x20, 0x06, + 0x07, 0x89, 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, 0x14, 0x05, 0x07, 0x20, + 0x06, 0x44, 0x16, 0x20, 0x05, 0x07, 0x07, 0x08, 0x30, 0x14, 0x06, 0x08, + 0xa2, 0x20, 0x06, 0x08, 0x20, 0x05, 0x08, 0x08, 0x09, 0x30, 0x14, 0x07, + 0x51, 0x09, 0x20, 0x06, 0x17, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x14, + 0x28, 0x08, 0x0a, 0x20, 0x06, 0x18, 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x94, + 0x30, 0x04, 0x0a, 0x0b, 0x20, 0x06, 0x04, 0x20, 0x05, 0x0b, 0x0b, 0x4a, + 0x0c, 0x30, 0x04, 0x0b, 0x0c, 0x20, 0x06, 0x05, 0x20, 0x05, 0x0c, 0x25, + 0x0c, 0x0d, 0x30, 0x04, 0x0c, 0x0d, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x12, + 0x0d, 0x0d, 0x0e, 0x30, 0x04, 0x0d, 0x0e, 0x20, 0x06, 0x09, 0x89, 0x20, + 0x05, 0x0e, 0x0e, 0x0f, 0x30, 0x04, 0x0e, 0x0f, 0x20, 0x06, 0x44, 0x0b, + 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x30, 0x04, 0x0f, 0x10, 0xa0, 0x20, 0x06, + 0x0c, 0x20, 0x05, 0x10, 0x10, 0x11, 0x12, 0x12, 0xae, 0x20, 0x01, 0x11, + 0x20, 0x06, 0x0f, 0x20, 0x05, 0x20, 0x07, 0x39, 0x44, 0x17, 0x51, 0x12, + 0x20, 0x06, 0x15, 0x20, 0x05, 0x12, 0x12, 0x13, 0x31, 0x3c, 0x28, 0x18, + 0x13, 0x20, 0x06, 0x11, 0x20, 0x05, 0x13, 0x13, 0x14, 0x2a, 0x16, 0x16, + 0x20, 0x01, 0x14, 0x20, 0x06, 0x14, 0x20, 0x05, 0x14, 0x25, 0x14, 0x15, + 0x30, 0x44, 0x10, 0x15, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x12, 0x15, 0x15, + 0x16, 0x30, 0x44, 0x11, 0x16, 0x20, 0x06, 0x0e, 0x9c, 0x20, 0x05, 0x16, + 0x16, 0xf9, 0x9f, 0xf1, 0x97, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, 0x11, 0x0e, 0x00, 0x00, + 0x30, 0x01, 0x1a, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xbf, 0x09, 0x92, 0xc0, 0x00, 0x00, 0x00, + 0x02, 0x1a, 0xb5, 0x30, 0xf3, 0x30, 0xfb, 0x00, 0x30, 0xb5, 0x30, 0xeb, + 0x30, 0xd0, 0x30, 0xc9, 0x90, 0x20, 0x05, 0x0c, 0x77, 0x05, 0xd8, 0x27, + 0x53, 0x00, 0x61, 0x00, 0x11, 0x6e, 0x00, 0x20, 0x40, 0x07, 0x6c, 0x00, + 0x76, 0x20, 0x0d, 0x04, 0x64, 0x00, 0x6f, 0x00, 0x72, 0x10, 0x15, 0x80, + 0x7f, 0x23, 0x57, 0x00, 0x28, 0x84, 0x14, 0x5c, 0xe6, 0x74, 0x1a, 0x59, + 0x60, 0x01, 0x05, 0xe2, 0xf9, 0x5b, 0x98, 0xb0, 0xc0, 0xb4, 0xc0, 0x14, + 0x00, 0xbc, 0xc4, 0xb3, 0x74, 0xb9, 0x20, 0x00, 0xfc, 0x60, 0xc8, 0x06, + 0x1b, 0xa3, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x04, + 0x2d, 0x40, 0x07, 0x3b, 0x04, 0x4c, 0x04, 0x32, 0x81, 0x20, 0x0f, 0x34, + 0x04, 0x3e, 0x04, 0x40, 0x04, 0x10, 0x1d, 0x54, 0xff, 0x14, 0x01, 0x0a, + 0x0a, 0x20, 0x01, 0x01, 0x40, 0x06, 0x01, 0x01, 0x20, 0x01, 0x01, 0x58, + 0x17, 0x03, 0x1a, 0xa2, 0x30, 0xef, 0x03, 0x30, 0xc1, 0x30, 0xe3, 0x30, + 0xd1, 0x28, 0x1f, 0x05, 0xf8, 0x13, 0x82, 0x3f, 0xff, 0x41, 0x00, 0x68, + 0x00, 0x75, 0x28, 0x1b, 0x63, 0x83, 0x20, 0x07, 0x61, 0x00, 0x70, 0x00, + 0xe1, 0x28, 0x25, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x3f, 0x96, 0xe6, 0x74, + 0xe5, 0x67, 0x58, 0x6f, 0x80, 0x06, 0x58, 0x15, 0x00, 0x00, 0x44, 0xc5, + 0xb0, 0xc6, 0x44, 0x06, 0xc5, 0x28, 0xcc, 0x10, 0xd3, 0x06, 0x58, 0x17, + 0x0e, 0xf3, 0x7f, 0x10, 0x2b, 0x04, 0x43, 0x28, 0x19, 0x47, 0x28, 0x1d, + 0x3f, 0x48, 0x21, 0x10, 0x1d, 0xf4, 0xff, 0x48, 0x02, 0x38, 0x0c, 0x01, + 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x08, 0x02, 0xe6, 0x09, 0x1d, 0x28, + 0x17, 0x04, 0x1a, 0xab, 0x0a, 0x30, 0xd0, 0x30, 0xcb, 0x28, 0x17, 0xb9, + 0x06, 0x48, 0x15, 0x00, 0x2a, 0x00, 0x43, 0x2f, 0xaf, 0x62, 0x2f, 0xb3, + 0xf1, 0x2f, 0xb7, 0x73, 0x80, 0x10, 0x16, 0x20, 0x7f, 0x61, 0x53, 0xe6, + 0x74, 0x3c, 0x5c, 0x9a, 0x10, 0x4e, 0xaf, 0x65, 0x06, 0x58, 0x19, 0x74, + 0xce, 0x14, 0xbc, 0x0d, 0xd0, 0xb0, 0xa4, 0xc2, 0x06, 0x58, 0x15, 0x0f, + 0x13, 0x7f, 0x1a, 0x28, 0x15, 0x46, 0x31, 0x48, 0x11, 0x30, 0x04, 0x41, + 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x03, 0x90, 0x38, 0x0c, 0x02, + 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x11, 0xdc, 0x09, 0xf9, 0x28, + 0x17, 0x05, 0x1a, 0xc1, 0x28, 0x13, 0x00, 0xe9, 0x30, 0xc6, 0x30, 0xca, + 0x30, 0xf3, 0x30, 0x54, 0xb4, 0x06, 0x28, 0x1b, 0x43, 0x4f, 0xa7, 0x6c, + 0x2f, 0xb1, 0x74, 0x00, 0x51, 0x65, 0x2f, 0xab, 0x61, 0x2f, 0xaf, 0x67, + 0x00, 0x6f, 0x10, 0x15, 0x80, 0x7f, 0x00, 0xe5, 0x67, 0xc9, 0x62, 0x79, + 0x72, 0x57, 0x53, 0x20, 0x08, 0x62, 0x06, 0x58, 0x17, 0x30, 0xcc, 0x7c, + 0xb7, 0x4c, 0x06, 0xd1, 0xad, 0xb0, 0xe0, 0xac, 0x06, 0x58, 0x19, 0x0e, + 0xf3, 0x7f, 0x27, 0xa2, 0x28, 0x17, 0x3b, 0x28, 0x1b, 0x42, 0x04, 0x35, + 0x48, 0x1b, 0x3d, 0x0d, 0x04, 0x33, 0x04, 0x3e, 0x05, 0xa8, 0x1f, 0x10, + 0x16, 0xf4, 0xff, 0x04, 0x38, 0x0c, 0x28, 0x03, 0x04, 0x20, 0x06, 0x0e, + 0x20, 0x05, 0x04, 0x04, 0xfa, 0x20, 0x09, 0xc3, 0x28, 0x17, 0x06, 0x1a, + 0xaf, 0x30, 0xb9, 0x0b, 0x30, 0xab, 0x30, 0xc8, 0x28, 0x1b, 0xf3, 0x06, + 0x28, 0x15, 0x3f, 0xaf, 0x51, 0x75, 0x2f, 0xa7, 0x63, 0x48, 0x17, 0x6c, + 0x00, 0xe1, 0x28, 0x19, 0x80, 0x10, 0x15, 0xd0, 0x7f, 0x93, 0x5e, 0xaf, + 0x65, 0x61, 0x53, 0x79, 0x10, 0x72, 0x70, 0x51, 0x06, 0x58, 0x17, 0xe0, + 0xcf, 0xa4, 0xc2, 0x03, 0x74, 0xce, 0xc0, 0xd2, 0x80, 0xb7, 0x06, 0x78, + 0x17, 0x0e, 0xd3, 0x7f, 0x01, 0x1a, 0x04, 0x43, 0x04, 0x41, 0x04, 0x3a, + 0x48, 0x19, 0xb4, 0x38, 0x1f, 0x3d, 0x05, 0xa8, 0x13, 0x10, 0x17, 0x34, + 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0xa2, 0x20, 0x06, 0x03, 0x20, 0x05, + 0x05, 0x05, 0xc1, 0x48, 0x17, 0x07, 0x00, 0x1a, 0xe9, 0x30, 0xfb, 0x30, + 0xea, 0x30, 0xd9, 0x02, 0x30, 0xeb, 0x30, 0xbf, 0x30, 0xfc, 0x06, 0x28, + 0x19, 0x4c, 0xa2, 0x2f, 0xad, 0x20, 0x20, 0x05, 0x69, 0x00, 0x62, 0x2f, + 0xaf, 0x72, 0x88, 0x2f, 0xb5, 0x61, 0x00, 0x64, 0x10, 0x15, 0xa0, 0x7f, + 0xc9, 0x62, 0x29, 0x01, 0x52, 0x2f, 0x4f, 0x54, 0x58, 0xb7, 0x5f, 0x06, + 0x58, 0x17, 0x00, 0x7c, 0xb7, 0xac, 0xb9, 0xa0, 0xbc, 0x74, 0xb9, 0x0d, + 0xc0, 0xd0, 0xdc, 0xb4, 0x06, 0x38, 0x19, 0x0e, 0xf3, 0x7f, 0x1b, 0x28, + 0x11, 0x40, 0x2d, 0x20, 0x05, 0x38, 0x04, 0x31, 0x04, 0x35, 0x04, 0x46, + 0x40, 0x28, 0x1d, 0x30, 0x04, 0x34, 0x05, 0xa8, 0x1b, 0x10, 0x16, 0xf4, + 0xff, 0x06, 0x94, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x04, 0x20, 0x05, + 0x06, 0x06, 0x14, 0xb9, 0x09, 0x84, 0x28, 0x17, 0x08, 0x28, 0x17, 0xd1, + 0x30, 0x6a, 0xb9, 0x06, 0x28, 0x0f, 0xd8, 0x17, 0x50, 0x2f, 0xaf, 0x7a, + 0x10, 0x16, 0x40, 0x7f, 0xc9, 0x06, 0x62, 0xf4, 0x5d, 0xaf, 0x65, 0x06, + 0x58, 0x13, 0x58, 0x17, 0x0c, 0x1d, 0xd3, 0xa4, 0xc2, 0x06, 0x38, 0x11, + 0x0f, 0x53, 0x7f, 0x58, 0x17, 0x1f, 0x28, 0x1d, 0x69, 0x41, 0x05, 0xa8, + 0x0d, 0x10, 0x17, 0x94, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, + 0x41, 0x05, 0x20, 0x05, 0x07, 0x07, 0x99, 0x09, 0xcf, 0x28, 0x17, 0x40, + 0x09, 0x28, 0x17, 0xfb, 0x30, 0xa6, 0x30, 0xcb, 0x30, 0x18, 0xaa, 0x30, + 0xf3, 0x06, 0x48, 0x1d, 0x5f, 0xaf, 0x55, 0x00, 0x6e, 0xb0, 0x2f, 0xb1, + 0xf3, 0x20, 0x05, 0x10, 0x15, 0xf0, 0x7f, 0xc9, 0x62, 0x4c, 0x4e, 0x08, + 0x3c, 0x5c, 0xc1, 0x7f, 0x06, 0x78, 0x19, 0x7c, 0xb7, 0xb0, 0x07, 0xc6, + 0xc8, 0xb2, 0x28, 0xc6, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x58, 0x17, + 0x01, 0x23, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3e, 0x20, 0x05, 0xa5, 0x10, + 0x1d, 0xf4, 0xff, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x20, 0x06, 0x06, 0x20, + 0x05, 0x00, 0x08, 0x08, 0x7b, 0x09, 0x89, 0xc1, 0x00, 0x00, 0x01, 0x0a, + 0x1a, 0xe2, 0x30, 0xe9, 0x30, 0xb5, 0x06, 0x68, 0x13, 0x82, 0x3f, 0xff, + 0x4d, 0x00, 0x6f, 0x00, 0x72, 0x4f, 0xad, 0xe1, 0xc0, 0x06, 0x28, 0x15, + 0x10, 0x0f, 0x10, 0x7f, 0xab, 0x83, 0xc9, 0x62, 0x51, 0x68, 0x85, 0x06, + 0x78, 0x15, 0x00, 0x00, 0xa8, 0xba, 0x28, 0x19, 0xc0, 0x06, 0x78, 0x15, + 0xab, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x0d, 0x40, 0x28, 0x1b, 0x41, 0x28, + 0x1f, 0x06, 0x18, 0x15, 0xa5, 0x10, 0x17, 0x14, 0xff, 0x09, 0x38, 0x0c, + 0x08, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, 0x04, 0x09, 0x09, 0xbe, 0x09, + 0x5a, 0x28, 0x17, 0x0b, 0x1a, 0x80, 0x38, 0x13, 0xfb, 0x30, 0xdf, 0x30, + 0xb2, 0x30, 0xeb, 0xaa, 0x06, 0x48, 0x1b, 0x53, 0x2f, 0xaf, 0x6e, 0x2f, + 0xb1, 0x4d, 0x2f, 0xaf, 0x67, 0x02, 0x00, 0x75, 0x00, 0x65, 0x00, 0x6c, + 0x10, 0x15, 0xc0, 0x7f, 0x23, 0x01, 0x57, 0x73, 0x7c, 0x3c, 0x68, 0x14, + 0x5c, 0x06, 0x78, 0x19, 0x03, 0xb0, 0xc0, 0xf8, 0xbb, 0x94, 0xac, 0x06, + 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x50, 0x21, 0x48, 0x0f, 0x2d, 0x28, 0x1f, + 0x38, 0x04, 0x33, 0x04, 0x06, 0x35, 0x04, 0x3b, 0x04, 0x4c, 0x05, 0xc8, + 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x90, 0x38, 0x0c, 0x09, 0x0a, 0x40, + 0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x15, 0x96, 0x09, 0x4b, 0x28, 0x17, 0x0c, + 0x48, 0x17, 0xbf, 0x28, 0x19, 0x14, 0xa2, 0x30, 0xca, 0x06, 0xa8, 0x17, + 0x74, 0x2f, 0xb1, 0x20, 0x00, 0x50, 0x41, 0x2f, 0xb1, 0x61, 0x10, 0x15, + 0xe0, 0x7f, 0x23, 0x57, 0x89, 0x5b, 0x30, 0x1c, 0x5a, 0x06, 0x78, 0x15, + 0x38, 0x17, 0xc0, 0xd0, 0x44, 0xc5, 0x3a, 0x98, 0xb0, 0x06, 0x78, 0x19, + 0x0e, 0xf3, 0x7f, 0x58, 0x17, 0x42, 0x28, 0x1d, 0x2d, 0x2c, 0x00, 0x10, + 0x28, 0x21, 0x30, 0x05, 0xc8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0b, 0x0c, + 0x54, 0x0c, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x0b, 0x0b, + 0x01, 0xf3, 0x09, 0x51, 0xc0, 0x00, 0x00, 0x0d, 0x48, 0x17, 0x14, 0xd3, + 0x30, 0xbb, 0x28, 0x1d, 0xc6, 0x06, 0xa8, 0x17, 0x20, 0x00, 0x5a, 0x56, + 0x2f, 0xaf, 0x63, 0x2f, 0xad, 0x38, 0x23, 0x65, 0x10, 0x15, 0xa0, 0x7f, + 0x23, 0x01, 0x57, 0xf4, 0x7e, 0xee, 0x68, 0x79, 0x72, 0x06, 0x78, 0x19, + 0x00, 0xb0, 0xc0, 0x44, 0xbe, 0x3c, 0xc1, 0x4c, 0xd1, 0xe0, 0x06, 0xd8, + 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x2d, 0x00, 0x12, 0x04, 0x38, 0x0b, + 0x04, 0x41, 0x04, 0x35, 0x48, 0x23, 0x35, 0x05, 0xa8, 0x1b, 0x10, 0x16, + 0xf4, 0xff, 0xc8, 0x48, 0x0c, 0x38, 0x15, 0x0b, 0x08, 0x48, 0x22, 0xb1, + 0x09, 0xdb, 0x88, 0x28, 0x17, 0x0e, 0x1a, 0xbd, 0x28, 0x17, 0xbd, 0x30, + 0xca, 0xd5, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6f, 0x2f, 0xaf, 0x73, 0x40, + 0x05, 0x61, 0x05, 0xe8, 0x13, 0x81, 0x10, 0x0f, 0x30, 0x7f, 0x7e, 0x67, + 0x22, 0x7d, 0xb3, 0x7e, 0x06, 0x98, 0x17, 0x03, 0x90, 0xc1, 0x8c, 0xc1, + 0x98, 0xb0, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x15, 0x21, 0x04, 0x3e, + 0x28, 0x17, 0x41, 0x40, 0x05, 0x30, 0x05, 0xe8, 0x13, 0x94, 0x10, 0x17, + 0x34, 0xff, 0x0d, 0x0d, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0xc1, 0x09, 0x40, + 0x33, 0x28, 0x17, 0x0f, 0x1a, 0xa6, 0x30, 0xb9, 0x30, 0x1a, 0xeb, 0x30, + 0xbf, 0x28, 0x1d, 0x06, 0x58, 0x17, 0x55, 0x28, 0x13, 0x75, 0x23, 0x00, + 0x6c, 0x20, 0x03, 0x74, 0x00, 0xe1, 0x2f, 0xb9, 0x10, 0x15, 0xf0, 0x7f, + 0x00, 0x4c, 0x4e, 0xcf, 0x82, 0x62, 0x53, 0x66, 0x57, 0x80, 0x06, 0x78, + 0x17, 0xb0, 0xc6, 0x20, 0xc2, 0xe8, 0xb8, 0xc4, 0x68, 0xd0, 0x06, 0x78, + 0x17, 0x0e, 0xf3, 0x7f, 0x23, 0x28, 0x13, 0x43, 0x04, 0x3b, 0xac, 0x20, + 0x03, 0x42, 0x28, 0x17, 0x3d, 0x05, 0xe8, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x0e, 0x0e, 0xa1, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x7e, 0x09, 0x1b, 0xc1, + 0x00, 0x3f, 0xff, 0x14, 0x01, 0x0a, 0x0a, 0x20, 0x01, 0x01, 0x40, 0x06, + 0x01, 0x01, 0x12, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, + 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, + 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0xa2, 0x20, + 0x06, 0x0e, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x51, 0x05, + 0x20, 0x06, 0x03, 0x20, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, 0x28, 0x05, + 0x06, 0x20, 0x06, 0x04, 0x20, 0x05, 0x06, 0x06, 0x07, 0x94, 0x30, 0x04, + 0x06, 0x07, 0x20, 0x06, 0x05, 0x20, 0x05, 0x07, 0x07, 0x4a, 0x08, 0x30, + 0x04, 0x07, 0x08, 0x20, 0x06, 0x06, 0x20, 0x05, 0x08, 0x25, 0x08, 0x09, + 0x30, 0x04, 0x08, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, 0x13, 0x09, 0x09, + 0x0a, 0x30, 0x04, 0x09, 0x0a, 0x40, 0x06, 0x30, 0x9a, 0x15, 0x0b, 0x0c, + 0x0c, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x0b, 0x20, 0x05, 0xe7, 0x20, 0x07, + 0x30, 0x04, 0x30, 0x0d, 0x0b, 0x08, 0x40, 0x1a, 0xf8, 0xff, 0xf0, 0xf7, + 0x80, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x1b, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x82, 0x03, 0xca, + 0xda, 0x00, 0x00, 0x00, 0x01, 0x1b, 0xd5, 0x30, 0xe9, 0x30, 0xf3, 0x00, + 0x30, 0xb9, 0x30, 0x18, 0x98, 0xae, 0x30, 0xa2, 0x10, 0x30, 0xca, 0x30, + 0x05, 0xf8, 0x25, 0x46, 0x00, 0x72, 0x00, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x00, 0x20, 0x00, 0x47, 0x00, 0x75, 0x00, 0x69, + 0x00, 0x5a, 0x61, 0x20, 0x0f, 0x61, 0x05, 0x68, 0xae, 0x30, 0x71, 0x79, + 0x40, 0x71, 0x65, 0xe0, 0x06, 0x49, 0x20, 0x30, 0xff, 0x30, 0xef, 0x7a, + 0x00, 0xf6, 0x00, 0x73, 0xae, 0x20, 0xfb, 0x73, 0x41, 0x09, 0x2d, 0xa0, + 0x97, 0x04, 0xd1, 0x09, 0xb0, 0x67, 0x20, 0xad, 0x80, 0x8d, 0x63, 0x21, + 0x93, 0x73, 0x05, 0x41, 0x11, 0x31, 0xf1, 0x61, 0x00, 0x80, 0x81, 0x80, + 0x05, 0x12, 0x05, 0xd5, 0x6c, 0x5e, 0x5c, 0x2d, 0x57, 0x9a, 0x10, 0x4e, + 0xa3, 0x90, 0x06, 0x5b, 0x1f, 0x04, 0xd5, 0x91, 0xb7, 0x00, 0xa4, 0xc2, + 0x39, 0xb8, 0x20, 0x00, 0x30, 0xae, 0x0b, 0x44, 0xc5, 0x98, 0xb0, 0x06, + 0x72, 0x7f, 0x73, 0x05, 0xa2, 0x73, 0xf3, 0x7f, 0xc0, 0x73, 0xf1, 0x06, + 0x11, 0xfd, 0x00, 0x00, 0x24, 0x04, 0x40, 0x04, 0x00, 0x30, 0x04, 0x3d, + 0x04, 0x46, 0x04, 0x43, 0x04, 0x04, 0x37, 0x04, 0x41, 0x04, 0x3a, 0x20, + 0x0d, 0x4f, 0x04, 0x01, 0x20, 0x00, 0x13, 0x04, 0x32, 0x04, 0x38, 0x40, + 0x19, 0x33, 0x30, 0x04, 0x0c, 0xb4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, + 0x01, 0xd0, 0x01, 0x58, 0x17, 0xc0, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x1c, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x91, 0x08, 0x17, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x1c, 0xb0, 0x30, + 0xec, 0x30, 0xca, 0x10, 0x30, 0xc0, 0x30, 0x06, 0x78, 0x1d, 0x47, 0x00, + 0x72, 0x00, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x64, 0x20, 0x03, + 0xb4, 0x06, 0xd0, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x06, 0x71, 0x7f, 0x61, + 0x06, 0xa1, 0xff, 0x3c, 0x68, 0x02, 0x97, 0x67, 0xb3, 0x7e, 0xbe, 0x8f, + 0x06, 0x7b, 0x1d, 0xf8, 0x01, 0xad, 0x08, 0xb8, 0x98, 0xb0, 0xe4, 0xb2, + 0x0e, 0xb3, 0x7f, 0x80, 0x06, 0xb1, 0xff, 0x13, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x3d, 0x0e, 0x04, 0x30, 0x04, 0x34, 0x20, 0x03, 0x10, 0x06, 0x53, + 0xff, 0x10, 0x06, 0xb0, 0xff, 0x01, 0x78, 0x01, 0xd0, 0x01, 0x58, 0x17, + 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x1d, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x60, 0x0b, 0x1d, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x1d, 0xb0, 0x30, + 0xa2, 0x30, 0xc9, 0x01, 0x30, 0xeb, 0x30, 0xfc, 0x30, 0xd7, 0x30, 0x06, + 0x38, 0x21, 0x00, 0x47, 0x00, 0x75, 0x00, 0x61, 0x00, 0x64, 0x00, 0x05, + 0x65, 0x00, 0x6c, 0x00, 0x6f, 0x20, 0x0b, 0x70, 0x20, 0x09, 0xb7, 0x10, + 0x06, 0x30, 0x7f, 0x61, 0x21, 0x7f, 0x31, 0x7d, 0x61, 0x06, 0x61, 0xff, + 0x70, 0x7f, 0x05, 0xd1, 0xfd, 0x00, 0x00, 0x00, 0xdc, 0x74, 0xb7, 0x5f, + 0x57, 0x7f, 0x20, 0x6e, 0x66, 0x06, 0x7b, 0x1d, 0xfc, 0xac, 0xe4, 0xb4, + 0xe8, 0x1c, 0xb8, 0x04, 0xd5, 0x06, 0x7b, 0x9d, 0x07, 0xf2, 0x7f, 0x05, + 0xf1, 0xff, 0x13, 0x04, 0x00, 0x32, 0x04, 0x30, 0x04, 0x34, 0x04, 0x35, + 0x04, 0x07, 0x3b, 0x04, 0x43, 0x04, 0x3f, 0x20, 0x0b, 0x10, 0x0e, 0x54, + 0xff, 0x0e, 0x76, 0x7f, 0x3c, 0x01, 0x01, 0xd0, 0x01, 0x58, 0x17, 0x01, + 0x10, 0x27, 0x3f, 0xff, 0x11, 0xa4, 0xbb, 0x00, 0x11, 0x16, 0x00, 0x00, + 0x30, 0x01, 0x1e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x65, 0x0a, 0xa1, 0xbf, 0x00, 0x00, 0x00, + 0x02, 0x1e, 0xb0, 0x30, 0xa2, 0x30, 0xc6, 0x01, 0x30, 0xde, 0x30, 0xe9, + 0x30, 0x0c, 0x77, 0x06, 0x38, 0x21, 0x00, 0x47, 0x00, 0x75, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x16, 0x65, 0x00, 0x6d, 0x20, 0x07, 0x6c, 0x20, 0x0b, + 0x10, 0x15, 0xd0, 0x7f, 0x71, 0x00, 0x53, 0x30, 0x57, 0x6c, 0x9a, 0xc9, + 0x62, 0x01, 0x80, 0x06, 0x42, 0xfd, 0x00, 0x00, 0xfc, 0xac, 0x4c, 0xd1, + 0xd0, 0x01, 0xb9, 0x7c, 0xb7, 0x20, 0x00, 0xfc, 0xc8, 0x10, 0x06, 0x33, + 0x7f, 0x00, 0x13, 0x04, 0x32, 0x04, 0x30, 0x04, 0x42, 0x04, 0x16, 0x35, + 0x04, 0x3c, 0x20, 0x07, 0x3b, 0x20, 0x0b, 0x10, 0x1d, 0xd4, 0xff, 0x01, + 0x00, 0x07, 0x09, 0x09, 0x07, 0x07, 0x01, 0x01, 0x07, 0x24, 0x07, 0x03, + 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x1e, 0x00, 0xa2, 0x30, 0xeb, + 0x30, 0xbf, 0x30, 0xfb, 0x30, 0x45, 0x79, 0x28, 0x19, 0xd1, 0x30, 0xb9, + 0x06, 0x08, 0x1d, 0x41, 0x28, 0x0b, 0x45, 0x74, 0x28, 0x19, 0x20, 0x00, + 0x56, 0x28, 0x1b, 0x72, 0x28, 0x23, 0x50, 0x70, 0x28, 0x27, 0x7a, 0x10, + 0x15, 0x80, 0x7f, 0x0a, 0x4e, 0xe6, 0x97, 0x02, 0xc9, 0x62, 0x15, 0x5e, + 0xaf, 0x65, 0x06, 0x58, 0x19, 0x4c, 0x00, 0xc5, 0xc0, 0xd0, 0xa0, 0xbc, + 0x7c, 0xb7, 0x0c, 0x1a, 0xd3, 0xa4, 0xc2, 0x06, 0x38, 0x1b, 0x0e, 0xf3, + 0x7f, 0x10, 0x28, 0x0b, 0x4c, 0x82, 0x28, 0x17, 0x30, 0x04, 0x2d, 0x00, + 0x12, 0x28, 0x1d, 0x40, 0xad, 0x28, 0x25, 0x3f, 0x28, 0x29, 0x41, 0x05, + 0x68, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x02, 0x38, 0x0c, 0x24, 0x01, 0x02, + 0x40, 0x06, 0x02, 0x02, 0x20, 0x01, 0x0b, 0xbe, 0x82, 0x28, 0x17, 0x04, + 0x1e, 0xd0, 0x30, 0xcf, 0x06, 0xa8, 0x15, 0x00, 0x2d, 0x00, 0x42, 0x2f, + 0xad, 0x6a, 0x06, 0xa8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x0b, 0x06, 0xe8, + 0x17, 0x0d, 0x14, 0xbc, 0x58, 0xd5, 0x06, 0xb8, 0x17, 0x0e, 0xf3, 0x7f, + 0x11, 0x28, 0x11, 0x6a, 0x45, 0x06, 0x88, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x03, 0x48, 0x0c, 0x03, 0x40, 0x06, 0x03, 0x02, 0x03, 0x03, 0x03, 0xbc, + 0x0a, 0xd0, 0x28, 0x17, 0x05, 0x00, 0x1e, 0xc1, 0x30, 0xde, 0x30, 0xeb, + 0x30, 0xc6, 0x02, 0x30, 0xca, 0x30, 0xf3, 0x30, 0xb4, 0x06, 0x28, 0x17, + 0x43, 0x03, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6d, 0x2f, 0xb1, 0x3f, 0xb7, + 0x10, 0x65, 0x00, 0x6e, 0x2f, 0xbb, 0x6e, 0x00, 0x67, 0x00, 0x40, 0x6f, + 0x10, 0x15, 0x60, 0x7f, 0x47, 0x59, 0x6c, 0x9a, 0x14, 0x5c, 0x02, 0x79, + 0x72, 0x57, 0x53, 0x08, 0x62, 0x06, 0x38, 0x19, 0x58, 0x00, 0xce, 0xd0, + 0xb9, 0x4c, 0xd1, 0xad, 0xb0, 0xe0, 0x60, 0xac, 0x06, 0x38, 0x15, 0x0f, + 0x13, 0x7f, 0x27, 0x04, 0x38, 0x04, 0x3c, 0x82, 0x28, 0x1b, 0x3b, 0x04, + 0x4c, 0x04, 0x42, 0x28, 0x19, 0x3d, 0x83, 0x28, 0x27, 0x3d, 0x04, 0x33, + 0x04, 0x3e, 0x05, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x4a, 0x04, 0x38, + 0x0c, 0x03, 0x04, 0x20, 0x06, 0x14, 0x20, 0x05, 0x04, 0x0a, 0x04, 0x6e, + 0x0a, 0x6c, 0x28, 0x17, 0x06, 0x28, 0x17, 0xad, 0x0c, 0x30, 0xe0, 0x30, + 0xe9, 0x06, 0x28, 0x11, 0xb8, 0x17, 0x71, 0x00, 0x54, 0x75, 0x48, 0x1d, + 0x75, 0x28, 0x1d, 0x61, 0x10, 0x15, 0xc0, 0x7f, 0x47, 0x59, 0x06, 0xfa, + 0x57, 0x46, 0x7a, 0xc9, 0x06, 0x48, 0x13, 0x58, 0x17, 0xa4, 0x07, 0xd0, + 0x3c, 0xbb, 0x7c, 0xb7, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x38, 0x17, + 0x56, 0x3a, 0x48, 0x1b, 0x43, 0x28, 0x1b, 0x30, 0x05, 0x68, 0x0d, 0x10, + 0x17, 0x94, 0xff, 0x05, 0x94, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x13, + 0x20, 0x05, 0x05, 0x05, 0x00, 0x86, 0x0a, 0x52, 0xc0, 0x00, 0x00, 0x07, + 0x1e, 0x00, 0xa8, 0x30, 0xeb, 0x30, 0xfb, 0x30, 0xd7, 0x30, 0x01, 0xed, + 0x30, 0xb0, 0x30, 0xec, 0x30, 0xbd, 0x06, 0x08, 0x1f, 0x41, 0x45, 0x2f, + 0xa7, 0x20, 0x00, 0x50, 0x00, 0x72, 0x2f, 0xa1, 0x46, 0x67, 0x20, 0x05, + 0x65, 0x00, 0x73, 0x05, 0x8f, 0xab, 0x10, 0x0f, 0x30, 0x7f, 0xc3, 0x00, + 0x57, 0x14, 0x5c, 0x6e, 0x66, 0x57, 0x7f, 0x3c, 0x04, 0x68, 0xf7, 0x96, + 0x22, 0x7d, 0x06, 0x18, 0x1d, 0xd8, 0xc5, 0x00, 0x04, 0xd5, 0x5c, 0xb8, + 0xf8, 0xad, 0x08, 0xb8, 0x34, 0x8c, 0xc1, 0x06, 0x38, 0x1b, 0x0e, 0xf3, + 0x7f, 0x2d, 0x28, 0x0d, 0x4c, 0x04, 0x00, 0x2d, 0x00, 0x1f, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x46, 0x33, 0x20, 0x05, 0x35, 0x04, 0x41, 0x20, 0x09, + 0x10, 0x1d, 0x74, 0xff, 0x06, 0x0a, 0x05, 0x06, 0x06, 0x05, 0x40, 0x03, + 0x15, 0x20, 0x09, 0x06, 0x00, 0x06, 0x90, 0x0a, 0xf5, 0xbf, 0x00, 0x00, + 0x08, 0x80, 0x28, 0x17, 0xb9, 0x30, 0xaf, 0x30, 0xa3, 0x30, 0xf3, 0x0c, + 0x30, 0xc8, 0x30, 0xe9, 0x06, 0x08, 0x15, 0x38, 0x17, 0x73, 0x00, 0x46, + 0x63, 0x4f, 0xad, 0x6e, 0x00, 0x74, 0x06, 0x0f, 0xad, 0x10, 0x0f, 0x10, + 0x7f, 0xc3, 0x00, 0x57, 0xaf, 0x65, 0x06, 0x66, 0x79, 0x72, 0xc9, 0x60, + 0x62, 0x06, 0x18, 0x13, 0x3f, 0xff, 0xd0, 0xc5, 0xa4, 0xc2, 0xe0, 0x01, + 0xcf, 0x78, 0xc7, 0xc0, 0xd2, 0x7c, 0xb7, 0x06, 0x58, 0x17, 0xa0, 0x0e, + 0xd3, 0x7f, 0x2d, 0x28, 0x05, 0x3a, 0x04, 0x43, 0x04, 0x38, 0x0b, 0x04, + 0x3d, 0x04, 0x42, 0x28, 0x23, 0x30, 0x05, 0x88, 0x11, 0x10, 0x17, 0x54, + 0xff, 0x00, 0x07, 0x06, 0x08, 0x08, 0x06, 0x06, 0x07, 0x07, 0x10, 0x06, + 0x06, 0x16, 0x20, 0x05, 0x07, 0x07, 0x2c, 0x0a, 0x40, 0x72, 0x28, 0x17, + 0x09, 0x1e, 0xa6, 0x30, 0xa7, 0x30, 0x8a, 0x30, 0x03, 0xc6, 0x30, 0xca, + 0x28, 0x1b, 0xb4, 0x06, 0x08, 0x19, 0x48, 0x8a, 0x28, 0x13, 0x65, 0x00, + 0x68, 0x40, 0x05, 0x74, 0x2f, 0xad, 0x6e, 0xb8, 0x28, 0x19, 0x6e, 0x2f, + 0xb9, 0x05, 0x7f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0xe6, 0x97, 0xe6, 0x02, + 0x97, 0x79, 0x72, 0x57, 0x53, 0x08, 0x06, 0x68, 0x17, 0xb0, 0x10, 0xc6, + 0xd0, 0xc5, 0x30, 0x03, 0x4c, 0xd1, 0xad, 0xb0, 0x31, 0xe0, 0xac, 0x06, + 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x23, 0x04, 0x4d, 0x28, 0x15, 0x54, 0x4d, + 0x28, 0x13, 0x35, 0x28, 0x19, 0x30, 0x28, 0x1d, 0x33, 0x04, 0x60, 0x3e, + 0x05, 0xa8, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x08, 0x0a, 0x0a, 0x08, + 0x50, 0x08, 0x30, 0x01, 0x10, 0x40, 0x06, 0xe4, 0x0a, 0xf5, 0xbe, 0x00, + 0x00, 0x00, 0x0a, 0x1e, 0xa4, 0x30, 0xb6, 0x30, 0x18, 0xd0, 0x30, 0xeb, + 0x06, 0x08, 0x0f, 0x7f, 0xff, 0x49, 0x00, 0x7a, 0xa8, 0x2f, 0xa3, 0x62, + 0x2f, 0xa7, 0x6c, 0x10, 0x16, 0x40, 0x7f, 0x0a, 0x4f, 0x28, 0x04, 0x84, + 0xe6, 0x74, 0x14, 0x5c, 0x06, 0x58, 0x15, 0x00, 0x00, 0x03, 0x74, 0xc7, + 0xac, 0xc0, 0x1c, 0xbc, 0x06, 0x18, 0x0f, 0x0f, 0x73, 0x7f, 0x14, 0x18, + 0x04, 0x41, 0x28, 0x0d, 0x31, 0x28, 0x11, 0x3b, 0x04, 0x60, 0x4c, 0x05, + 0xa8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x09, 0x09, 0x0b, 0x0b, 0x09, 0x50, + 0x09, 0x30, 0x01, 0x04, 0x40, 0x06, 0x2d, 0x0b, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x0b, 0x1e, 0xcf, 0x30, 0xe9, 0x30, 0x44, 0xd1, 0x06, 0x88, 0x15, + 0x00, 0x00, 0x4a, 0x48, 0x11, 0x61, 0x00, 0x60, 0x70, 0x2f, 0xa7, 0x10, + 0x16, 0x30, 0x7f, 0xc8, 0x54, 0xc9, 0x62, 0x15, 0x40, 0x5e, 0x06, 0x78, + 0x15, 0x00, 0x00, 0x60, 0xd5, 0x7c, 0xb7, 0x34, 0x0c, 0xd3, 0x06, 0x98, + 0x17, 0x0e, 0xf3, 0x7f, 0x25, 0x48, 0x11, 0x30, 0x04, 0x60, 0x3f, 0x28, + 0x1d, 0x10, 0x1e, 0x34, 0xff, 0x0a, 0x0a, 0x0c, 0x0c, 0x0a, 0x51, 0x0a, + 0x30, 0x01, 0x11, 0x40, 0x06, 0x67, 0x0a, 0x04, 0x28, 0x17, 0x00, 0x0c, + 0x1e, 0xd5, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0x40, 0xa2, 0x06, 0x88, 0x1b, + 0x4a, 0x00, 0x75, 0x00, 0x74, 0x00, 0x60, 0x69, 0x06, 0x88, 0x19, 0x10, + 0x0e, 0xf0, 0x7f, 0xe1, 0x80, 0x82, 0x84, 0x9a, 0x40, 0x4e, 0x06, 0x98, + 0x19, 0xc4, 0xd6, 0xf0, 0xd2, 0x44, 0xc5, 0xc0, 0x06, 0x98, 0x19, 0x0e, + 0xf3, 0x7f, 0x25, 0x04, 0x43, 0x04, 0x42, 0x04, 0x18, 0x4c, 0x04, 0x4f, + 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x0b, 0x0d, 0x14, 0x0d, + 0x0b, 0x0b, 0x30, 0x01, 0x12, 0x40, 0x06, 0x28, 0x0a, 0x40, 0x13, 0x28, + 0x17, 0x0d, 0x1e, 0xa8, 0x30, 0xeb, 0x30, 0x14, 0xfb, 0x30, 0xda, 0x28, + 0x1d, 0xf3, 0x06, 0x48, 0x19, 0x50, 0x00, 0x45, 0x65, 0x28, 0x17, 0xe9, + 0x00, 0x6e, 0x06, 0x6d, 0xb0, 0x45, 0x2f, 0xad, 0x78, 0x20, 0x06, 0xa0, + 0x85, 0x06, 0xf0, 0x7f, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x69, 0x4f, + 0xd5, 0x61, 0x6e, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x98, 0xd3, 0x50, 0xd1, + 0x06, 0x78, 0x13, 0x88, 0x0f, 0x31, 0xff, 0x1f, 0x04, 0x35, 0x28, 0x17, + 0x35, 0x04, 0x3d, 0xe0, 0x06, 0x28, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x06, + 0xf0, 0xff, 0x0c, 0x0c, 0x05, 0x05, 0x0c, 0x51, 0x0c, 0x30, 0x01, 0x07, + 0x40, 0x06, 0x0a, 0x0c, 0x16, 0x28, 0x17, 0x01, 0x0e, 0x1e, 0xb1, 0x30, + 0xc4, 0x30, 0xa1, 0x28, 0x1b, 0x15, 0xc6, 0x30, 0xca, 0x28, 0x19, 0xb4, + 0x06, 0x08, 0x1b, 0x51, 0x2f, 0xaf, 0xaa, 0x38, 0x19, 0x7a, 0x2f, 0xb1, + 0x6c, 0x2f, 0xb9, 0x65, 0x28, 0x21, 0x61, 0x88, 0x28, 0x25, 0x67, 0x00, + 0x6f, 0x10, 0x15, 0x40, 0x7f, 0x4b, 0x51, 0x28, 0x00, 0x84, 0x14, 0x5c, + 0x79, 0x72, 0x57, 0x53, 0x08, 0x40, 0x62, 0x06, 0x48, 0x1f, 0xcf, 0xb8, + 0xd2, 0xb4, 0xc0, 0x4c, 0x06, 0xd1, 0xad, 0xb0, 0xe0, 0xac, 0x06, 0x38, + 0x1f, 0x0e, 0xf3, 0x7f, 0x1a, 0x80, 0x28, 0x17, 0x46, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x4c, 0xa3, 0x68, 0x1f, 0x30, 0x28, 0x23, 0x33, 0x04, 0x3e, + 0x05, 0x68, 0x27, 0x10, 0x16, 0xf4, 0xff, 0x02, 0x0d, 0x0d, 0x0e, 0x0e, + 0x0d, 0x0d, 0x30, 0x01, 0x05, 0x80, 0x40, 0x06, 0x8c, 0x0a, 0xec, 0xbe, + 0x00, 0x00, 0x0f, 0x20, 0x1e, 0xa8, 0x28, 0x13, 0xfb, 0x30, 0xad, 0x30, + 0xc1, 0x30, 0x30, 0xa7, 0x06, 0x08, 0x13, 0x78, 0x17, 0x69, 0x00, 0x63, + 0x00, 0x7f, 0x68, 0x2f, 0xad, 0x06, 0x3e, 0xb2, 0x5f, 0xaf, 0x06, 0x90, + 0x85, 0x06, 0xf0, 0x7f, 0x06, 0xf1, 0x7f, 0x06, 0xf1, 0xff, 0x0c, 0xfa, + 0x57, 0x07, 0x52, 0x06, 0x48, 0x0f, 0x6f, 0xff, 0xa4, 0xd0, 0x30, 0xb4, + 0xcc, 0x06, 0x38, 0x0f, 0x0f, 0x71, 0xff, 0x1a, 0x04, 0x38, 0x04, 0x70, + 0x47, 0x28, 0x1b, 0x10, 0x06, 0x71, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0e, + 0x0e, 0x07, 0x07, 0x28, 0x0e, 0x0e, 0x30, 0x01, 0x06, 0x40, 0x06, 0xb0, + 0x0a, 0x2f, 0x00, 0xbf, 0x00, 0x00, 0x10, 0x1e, 0xec, 0x30, 0xbf, 0x82, + 0x28, 0x19, 0xfc, 0x30, 0xec, 0x30, 0xa6, 0x06, 0x48, 0x17, 0x52, 0xd5, + 0x4f, 0xad, 0x3f, 0xab, 0x68, 0x2f, 0xb9, 0x6c, 0x2f, 0xbb, 0x75, 0x10, + 0x15, 0xc0, 0x7f, 0x00, 0xf7, 0x96, 0x54, 0x58, 0x62, 0x53, 0xb1, 0x83, + 0x20, 0x4c, 0x4e, 0x06, 0x58, 0x1d, 0x08, 0xb8, 0xc8, 0xd0, 0xf0, 0x06, + 0xb8, 0x08, 0xb8, 0xb0, 0xc6, 0x06, 0x58, 0x1d, 0x0e, 0xf3, 0x7f, 0x20, + 0x80, 0x28, 0x13, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x43, 0xb2, 0x20, + 0x03, 0x35, 0x20, 0x05, 0x10, 0x1d, 0xd4, 0xff, 0x0f, 0x0f, 0x70, 0x01, + 0x08, 0x80, 0x40, 0x0a, 0x55, 0x0a, 0xce, 0xbe, 0x00, 0x00, 0x11, 0x00, + 0x1e, 0xb5, 0x30, 0xab, 0x30, 0xc6, 0x30, 0xda, 0x0a, 0x30, 0xb1, 0x30, + 0xb9, 0x06, 0x48, 0x17, 0x53, 0x28, 0x13, 0x63, 0xaa, 0x28, 0x17, 0x74, + 0x28, 0x1f, 0x70, 0x2f, 0xad, 0x71, 0x2f, 0xb9, 0x65, 0x20, 0x00, 0x7a, + 0x10, 0x15, 0x80, 0x7f, 0x28, 0x84, 0x61, 0x53, 0x79, 0x01, 0x72, 0x69, + 0x4f, 0x4b, 0x51, 0xaf, 0x65, 0x06, 0x38, 0x19, 0x00, 0xac, 0xc0, 0x74, + 0xce, 0x4c, 0xd1, 0x98, 0xd3, 0x0d, 0x00, 0xcf, 0xa4, 0xc2, 0x06, 0x38, + 0x19, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x13, 0x55, 0x3a, 0x28, 0x17, 0x42, + 0x28, 0x1f, 0x3f, 0x28, 0x23, 0x3a, 0x28, 0x27, 0x65, 0x41, 0x05, 0xa8, + 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x10, 0x10, 0x70, 0x01, 0x0a, 0x40, 0x0a, + 0x01, 0x5a, 0x0a, 0x7b, 0xbf, 0x00, 0x00, 0x12, 0x28, 0x17, 0x00, 0xf3, + 0x30, 0xfb, 0x30, 0xde, 0x30, 0xeb, 0x30, 0x60, 0xb3, 0x06, 0x48, 0x19, + 0x38, 0x17, 0x6e, 0x00, 0x20, 0x00, 0x4d, 0xa2, 0x2f, 0xb3, 0x72, 0x28, + 0x21, 0x6f, 0x00, 0x73, 0x10, 0x15, 0xc0, 0x7f, 0x23, 0x06, 0x57, 0x6c, + 0x9a, 0xd1, 0x79, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xb0, 0x03, 0xc0, 0xc8, + 0xb9, 0x74, 0xb9, 0x54, 0x06, 0x68, 0x15, 0x0f, 0x13, 0x7f, 0x82, 0x38, + 0x17, 0x3d, 0x04, 0x2d, 0x00, 0x1c, 0x28, 0x1f, 0x40, 0xb2, 0x28, 0x21, + 0x3e, 0x05, 0xc8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x11, 0x11, 0x70, 0x01, + 0x0b, 0x80, 0x40, 0x0a, 0xa4, 0x0a, 0xb9, 0xbe, 0x00, 0x00, 0x13, 0xa0, + 0x48, 0x17, 0xbf, 0x28, 0x19, 0xed, 0x30, 0xfc, 0x30, 0xb5, 0xa2, 0x06, + 0x88, 0x17, 0x74, 0x2f, 0xb5, 0x20, 0x00, 0x52, 0x48, 0x15, 0x61, 0x81, + 0x10, 0x15, 0xc0, 0x7f, 0x23, 0x57, 0x57, 0x7f, 0x8e, 0x83, 0x06, 0x78, + 0x15, 0x81, 0x38, 0x17, 0xc0, 0xd0, 0x5c, 0xb8, 0xac, 0xc0, 0x06, 0x58, + 0x15, 0xd1, 0x0f, 0x13, 0x7f, 0x58, 0x17, 0x42, 0x28, 0x1d, 0x2d, 0x00, + 0x20, 0x48, 0x15, 0x65, 0x30, 0x06, 0x28, 0x17, 0x10, 0x16, 0x94, 0xff, + 0x12, 0x12, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x00, 0x26, 0x0a, 0xca, 0xbf, + 0x00, 0x00, 0x14, 0x1e, 0x58, 0xbd, 0x28, 0x11, 0xe9, 0x06, 0x28, 0x0f, + 0x9f, 0xaf, 0x6f, 0x00, 0x6c, 0xa0, 0x40, 0x03, 0xe1, 0x10, 0x16, 0x40, + 0x7f, 0x22, 0x7d, 0x1b, 0x6d, 0xc9, 0x40, 0x62, 0x06, 0x98, 0x17, 0x94, + 0xc1, 0x64, 0xb8, 0x7c, 0xb7, 0xd7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, + 0x21, 0x28, 0x0b, 0x3b, 0x40, 0x03, 0x05, 0xd8, 0x0f, 0x10, 0x17, 0x74, + 0xff, 0x28, 0x13, 0x13, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x80, 0x0a, 0x29, + 0x80, 0x28, 0x17, 0x15, 0x1e, 0xb9, 0x30, 0xc1, 0x30, 0xc6, 0x02, 0x30, + 0xda, 0x30, 0xb1, 0x30, 0xb9, 0x06, 0x48, 0x1d, 0x53, 0x00, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x80, 0x2f, 0xb3, 0x65, 0x00, 0x70, + 0x00, 0xe9, 0x00, 0x71, 0x88, 0x20, 0x11, 0x65, 0x00, 0x7a, 0x10, 0x15, + 0x60, 0x7f, 0xcf, 0x82, 0x47, 0x00, 0x59, 0x79, 0x72, 0x69, 0x4f, 0x4b, + 0x51, 0xaf, 0x40, 0x65, 0x06, 0x38, 0x1d, 0x18, 0xc2, 0x58, 0xce, 0x4c, + 0xd1, 0x03, 0x98, 0xd3, 0x00, 0xcf, 0xa4, 0xc2, 0x06, 0x38, 0x1d, 0x0e, + 0xf3, 0x7f, 0x00, 0x21, 0x04, 0x43, 0x04, 0x47, 0x04, 0x38, 0x04, 0x05, + 0x42, 0x04, 0x35, 0x04, 0x3f, 0x20, 0x03, 0x3a, 0x20, 0x07, 0x65, 0x41, + 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x14, 0x14, 0x70, 0x01, 0x0e, + 0x40, 0x0a, 0x00, 0x55, 0x0a, 0xef, 0xbe, 0x00, 0x00, 0x16, 0x1e, 0x00, + 0xc8, 0x30, 0xc8, 0x30, 0xcb, 0x30, 0xab, 0x30, 0x15, 0xd1, 0x30, 0xf3, + 0x06, 0x48, 0x17, 0x54, 0x2f, 0xaf, 0x74, 0x2f, 0xb3, 0x45, 0x6e, 0x28, + 0x19, 0x63, 0x00, 0x61, 0x28, 0x19, 0xe1, 0x20, 0x0b, 0x80, 0x10, 0x15, + 0x90, 0x7f, 0x58, 0x62, 0x58, 0x62, 0x3c, 0x5c, 0x61, 0x10, 0x53, 0x58, + 0x6f, 0x06, 0x38, 0x15, 0x00, 0x00, 0xa0, 0xd1, 0x00, 0xa0, 0xd1, 0xc8, + 0xb2, 0x74, 0xce, 0x10, 0xd3, 0xc4, 0x06, 0x38, 0x15, 0x0f, 0x13, 0x7f, + 0x22, 0x04, 0x3e, 0x28, 0x13, 0x3e, 0x04, 0x45, 0x3d, 0x28, 0x1b, 0x3a, + 0x04, 0x30, 0x28, 0x1b, 0x30, 0x20, 0x0b, 0x94, 0x10, 0x1d, 0x94, 0xff, + 0x15, 0x15, 0x70, 0x01, 0x0f, 0x40, 0x0a, 0x9b, 0x0a, 0x01, 0x08, 0xbf, + 0x00, 0x00, 0x17, 0x1e, 0xb5, 0x48, 0x13, 0xda, 0x06, 0x38, 0x11, 0x5f, + 0xff, 0x5a, 0x28, 0x0b, 0x58, 0x0f, 0x61, 0x10, 0x16, 0x40, 0x7f, 0x28, + 0x06, 0x84, 0x61, 0x53, 0x15, 0x5e, 0x06, 0x58, 0x13, 0x3f, 0xff, 0xac, + 0x0d, 0xc0, 0x74, 0xce, 0x0c, 0x06, 0x68, 0x13, 0x0f, 0x33, 0x7f, 0x21, + 0x28, 0x0b, 0xca, 0x78, 0x0f, 0x10, 0x1e, 0x34, 0xff, 0x16, 0x16, 0x70, + 0x01, 0x09, 0x40, 0x0a, 0xa4, 0x10, 0x0a, 0x55, 0xc0, 0x00, 0x3f, 0xff, + 0x01, 0x07, 0x09, 0x09, 0x01, 0x07, 0x07, 0x01, 0x01, 0x07, 0x07, 0x03, + 0x20, 0x05, 0x12, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, + 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x40, 0x06, + 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0xa2, 0x20, + 0x06, 0x14, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x50, 0x05, + 0x20, 0x06, 0x13, 0x20, 0x05, 0x05, 0x05, 0x06, 0x05, 0x34, 0x06, 0x06, + 0x20, 0x05, 0x20, 0x03, 0x15, 0x20, 0x09, 0x06, 0x06, 0x08, 0x07, 0x06, + 0x08, 0x08, 0x20, 0x05, 0x07, 0x06, 0x06, 0x40, 0x16, 0x20, 0x05, 0x07, + 0x07, 0x08, 0x08, 0x0a, 0x0a, 0x28, 0x08, 0x08, 0x30, 0x01, 0x10, 0x40, + 0x06, 0x09, 0x09, 0x0b, 0x14, 0x0b, 0x09, 0x09, 0x30, 0x01, 0x04, 0x40, + 0x06, 0x0a, 0x0a, 0x0a, 0x0c, 0x0c, 0x0a, 0x0a, 0x30, 0x01, 0x11, 0x40, + 0x06, 0x0b, 0x05, 0x0b, 0x0d, 0x0d, 0x0b, 0x0b, 0x30, 0x01, 0x12, 0x40, + 0x06, 0x02, 0x0c, 0x0c, 0x05, 0x05, 0x0c, 0x0c, 0x30, 0x01, 0x07, 0x81, + 0x40, 0x06, 0x0d, 0x0d, 0x0e, 0x0e, 0x0d, 0x0d, 0x30, 0x01, 0x40, 0x05, + 0x40, 0x06, 0x0e, 0x0e, 0x07, 0x07, 0x0e, 0x0e, 0xa5, 0x30, 0x01, 0x06, + 0x40, 0x06, 0x0f, 0x0f, 0x70, 0x01, 0x08, 0x40, 0x0a, 0x29, 0x10, 0x10, + 0x70, 0x01, 0x0a, 0x40, 0x0a, 0x11, 0x11, 0x70, 0x01, 0x4a, 0x0b, 0x40, + 0x0a, 0x12, 0x12, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x13, 0x52, 0x13, 0x70, + 0x01, 0x0d, 0x40, 0x0a, 0x14, 0x14, 0x70, 0x01, 0x0e, 0xf0, 0x40, 0x0a, + 0xf9, 0x7f, 0xf1, 0x77, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, + 0x11, 0x0a, 0x00, 0x00, 0x30, 0x01, 0x1f, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd5, 0x04, 0xa4, + 0xd6, 0x00, 0x00, 0x00, 0x02, 0x1f, 0xc7, 0x30, 0xe1, 0x30, 0xe9, 0x80, + 0x20, 0x01, 0xfb, 0x30, 0xde, 0x30, 0xcf, 0x30, 0xa4, 0x04, 0x30, 0xab, + 0x30, 0xde, 0x5d, 0x05, 0xb8, 0x29, 0x44, 0x00, 0x11, 0x65, 0x00, 0x6d, + 0x20, 0x03, 0x72, 0x00, 0x61, 0x40, 0x03, 0x14, 0x2d, 0x00, 0x4d, 0x20, + 0x09, 0x68, 0x20, 0x0d, 0x69, 0x00, 0x60, 0x63, 0x20, 0x13, 0x10, 0x14, + 0xf0, 0x7f, 0xb7, 0x5f, 0x85, 0x68, 0xc9, 0x00, 0x62, 0xc9, 0x62, 0x2d, + 0x00, 0x6c, 0x9a, 0x77, 0x04, 0x6d, 0x61, 0x53, 0x3a, 0x53, 0x05, 0xdb, + 0x27, 0x70, 0xb3, 0x00, 0x54, 0xba, 0x7c, 0xb7, 0x7c, 0xb7, 0x2d, 0x00, + 0x00, 0xc8, 0xb9, 0x58, 0xd5, 0x74, 0xc7, 0x74, 0xce, 0x08, 0x20, 0x00, + 0xfc, 0xc8, 0x10, 0x05, 0x93, 0x7f, 0x14, 0x04, 0x35, 0x22, 0x04, 0x3c, + 0x20, 0x03, 0x40, 0x04, 0x30, 0x40, 0x03, 0x2d, 0x28, 0x00, 0x1c, 0x20, + 0x09, 0x45, 0x20, 0x0d, 0x38, 0x04, 0x41, 0xc0, 0x20, 0x13, 0x10, 0x1c, + 0xf4, 0xff, 0x01, 0x03, 0x04, 0x03, 0x06, 0x06, 0x00, 0x01, 0x01, 0x03, + 0x06, 0x05, 0x03, 0x01, 0x01, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x1f, + 0xd0, 0x30, 0xea, 0x8b, 0x28, 0x11, 0xfb, 0x30, 0xef, 0x28, 0x13, 0xcb, + 0x05, 0xe8, 0x13, 0x3f, 0xff, 0x5a, 0x42, 0x48, 0x0f, 0x69, 0x28, 0x1b, + 0x38, 0x13, 0x57, 0x48, 0x0f, 0x6e, 0xc0, 0x28, 0x13, 0x10, 0x15, 0x70, + 0x7f, 0xf4, 0x5d, 0xcc, 0x91, 0x6c, 0x9a, 0x00, 0x2d, 0x00, 0xe6, 0x74, + 0x0a, 0x4f, 0x3c, 0x5c, 0xc0, 0x05, 0xf8, 0x15, 0x2f, 0xaf, 0xbc, 0xac, + 0xb9, 0xc8, 0xb9, 0x2d, 0x01, 0x00, 0x40, 0xc6, 0x74, 0xc7, 0xc8, 0xb2, + 0x05, 0xd8, 0x13, 0xad, 0x0f, 0x33, 0x7f, 0x11, 0x48, 0x0f, 0x38, 0x28, + 0x1b, 0x38, 0x13, 0x12, 0x48, 0x0f, 0x68, 0x3d, 0x28, 0x13, 0x10, 0x1d, + 0x74, 0xff, 0x02, 0x28, 0x0c, 0x03, 0x03, 0x02, 0x20, 0x02, 0x01, 0x28, + 0x15, 0x02, 0x02, 0x02, 0x02, 0xd4, 0x00, 0x05, 0x7d, 0xd5, 0x00, 0x00, + 0x04, 0x1f, 0xaf, 0x28, 0x30, 0xe6, 0x28, 0x0f, 0xfb, 0x28, 0x1b, 0xb6, + 0x30, 0xeb, 0x83, 0x06, 0x28, 0x19, 0x43, 0x00, 0x75, 0x00, 0x79, 0x20, + 0x03, 0x38, 0x0b, 0xb8, 0x5f, 0xab, 0x7a, 0x4f, 0xb9, 0x50, 0x11, 0x10, + 0x15, 0x10, 0x7f, 0x93, 0x5e, 0x24, 0x00, 0x5c, 0x3c, 0x5c, 0x2d, 0x00, + 0x6c, 0x9a, 0x4e, 0x11, 0x62, 0x81, 0x9c, 0x06, 0x18, 0x19, 0xe0, 0xcf, + 0x20, 0x28, 0x0f, 0x00, 0x2d, 0x00, 0xc8, 0xb9, 0x90, 0xc7, 0xe8, 0xb8, + 0xd1, 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x17, 0x39, 0x04, + 0x43, 0x48, 0x0b, 0x17, 0x2d, 0x00, 0x1c, 0x28, 0x25, 0x37, 0x48, 0x29, + 0x50, 0x11, 0x10, 0x1d, 0x14, 0xff, 0x02, 0x03, 0x02, 0x03, 0x02, 0x05, + 0x05, 0x28, 0x19, 0x05, 0x00, 0x06, 0x02, 0x03, 0x03, 0x03, 0x03, 0x8d, + 0x04, 0x00, 0x52, 0xd6, 0x00, 0x00, 0x05, 0x1f, 0x71, 0x67, 0x44, 0xd9, + 0x28, 0x0f, 0xd3, 0x30, 0xbb, 0x28, 0x1b, 0xb3, 0x30, 0x00, 0xec, 0x30, + 0xf3, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0x50, 0xcd, 0x05, 0x88, 0x1f, 0x45, + 0x2f, 0xaf, 0x73, 0x00, 0x74, 0x00, 0x55, 0x20, 0x2f, 0xb9, 0x65, 0x2f, + 0xb9, 0x62, 0x2f, 0xbb, 0x63, 0x20, 0x09, 0x55, 0x2d, 0x28, 0x31, 0x6f, + 0x2f, 0xc9, 0x65, 0x2f, 0xbd, 0x74, 0x28, 0x39, 0x71, 0x6e, 0x20, 0x1d, + 0x04, 0x5f, 0xaf, 0xb0, 0x75, 0x20, 0x00, 0x4f, 0x4f, 0xbd, 0x8a, 0x50, + 0x75, 0x61, 0x00, 0x6c, 0x60, 0x87, 0x75, 0x2f, 0xd3, 0x61, 0xf8, 0x04, + 0x40, 0x89, 0x08, 0xf0, 0xff, 0x04, 0xf1, 0x89, 0x01, 0x51, 0x7f, 0x04, + 0x92, 0x07, 0x1c, 0x4e, 0x2f, 0x00, 0x4f, 0xd4, 0x6b, 0xaf, 0x65, 0x2d, + 0x00, 0xd1, 0x01, 0x79, 0x70, 0x51, 0x2a, 0x59, 0xe0, 0x56, 0x05, 0xd8, + 0x19, 0x00, 0xd9, 0xb3, 0x80, 0xbd, 0x20, 0x00, 0x84, 0xbc, 0x00, 0x44, + 0xbe, 0xa4, 0xc2, 0x2d, 0x00, 0x54, 0xcf, 0x03, 0xf0, 0xb7, 0xc0, 0xd0, + 0x78, 0xc7, 0x05, 0x98, 0x1d, 0x09, 0x53, 0x7f, 0x80, 0x04, 0x94, 0x07, + 0x12, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x42, 0xa8, 0x20, 0x05, 0x47, 0x28, + 0x1b, 0x4b, 0x28, 0x23, 0x20, 0x00, 0x11, 0x2a, 0x04, 0x35, 0x28, 0x19, + 0x31, 0x48, 0x31, 0x41, 0x28, 0x2d, 0x1a, 0xab, 0x20, 0x23, 0x40, 0x20, + 0x13, 0x3d, 0x20, 0x27, 0x38, 0x28, 0x41, 0x0b, 0xb4, 0xff, 0x82, 0x10, + 0x0e, 0xf0, 0x7f, 0x04, 0x04, 0x02, 0x04, 0x04, 0xa0, 0x01, 0x71, 0x00, + 0x04, 0x1a, 0xd7, 0x00, 0x00, 0x06, 0x1f, 0xa8, 0x80, 0x28, 0x11, 0xad, + 0x30, 0xdc, 0x30, 0xf8, 0x8a, 0xf6, 0x00, 0x5c, 0xfb, 0x30, 0x7f, 0x89, + 0xc7, 0x30, 0xe1, 0x34, 0x30, 0xe9, 0x20, 0x01, 0x05, 0x98, 0x17, 0x73, + 0x28, 0x17, 0x65, 0x00, 0x55, 0x71, 0x2f, 0xb7, 0x69, 0x28, 0x15, 0x6f, + 0x28, 0x21, 0x49, 0x28, 0x29, 0x51, 0x6c, 0x47, 0x87, 0x64, 0x28, 0x33, + 0x2d, 0x00, 0x57, 0x28, 0x31, 0xad, 0x58, 0x3b, 0x44, 0x28, 0x3b, 0x6d, + 0x48, 0x3f, 0x3f, 0xd3, 0x61, 0x03, 0x2f, 0xcf, 0x5b, 0xce, 0x46, 0xfb, + 0x73, 0x28, 0x97, 0x00, 0x10, 0x89, 0x2d, 0x00, 0x00, 0x6f, 0x38, 0x37, + 0x5e, 0x63, 0x28, 0xb7, 0x69, 0x20, 0x99, 0x98, 0x3b, 0x0a, 0xb0, 0xff, + 0x31, 0x6b, 0x6f, 0xf8, 0x47, 0xff, 0x02, 0xb1, 0x01, 0x02, 0x99, 0xb3, + 0x71, 0xeb, 0x06, 0x71, 0x81, 0xc3, 0x57, 0x5e, 0x00, 0x58, 0x4e, 0x59, + 0x5a, 0x53, 0xa4, 0x7f, 0x9b, 0x00, 0x5c, 0x2d, 0x00, 0x7f, 0x89, 0xb7, + 0x5f, 0x85, 0x04, 0x68, 0xc9, 0x62, 0xc9, 0x62, 0x05, 0x78, 0x1d, 0xd0, + 0xc5, 0x00, 0x38, 0xc1, 0x34, 0xd0, 0xf4, 0xbc, 0x20, 0x00, 0x28, 0x2c, + 0xc1, 0x2e, 0xaf, 0xc1, 0x38, 0x25, 0x70, 0xb3, 0x54, 0x06, 0xba, 0x7c, + 0xb7, 0x7c, 0xb7, 0x05, 0x38, 0x1d, 0x07, 0x12, 0x7f, 0x6c, 0x35, 0x00, + 0x68, 0x02, 0x01, 0xff, 0x03, 0x93, 0x7f, 0x2d, 0x28, 0x15, 0x41, 0x28, + 0x07, 0x14, 0x3a, 0x04, 0x43, 0x27, 0xf3, 0x31, 0x28, 0x25, 0x2d, 0x00, + 0x55, 0x10, 0x28, 0x1d, 0x3b, 0x48, 0x07, 0x34, 0x48, 0x17, 0x17, 0x28, + 0x21, 0x55, 0x3f, 0x28, 0x25, 0x34, 0x88, 0x39, 0x14, 0x28, 0x39, 0x3c, + 0x48, 0x3d, 0x70, 0x30, 0x40, 0x03, 0x0a, 0x94, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x05, 0x05, 0x07, 0x05, 0x14, 0x07, 0x07, 0x05, 0x20, 0x06, 0x0a, + 0x20, 0x04, 0x05, 0x05, 0x00, 0xe2, 0x04, 0x76, 0xd6, 0x00, 0x00, 0x07, + 0x1f, 0x00, 0xde, 0x30, 0xcf, 0x30, 0xa4, 0x30, 0xab, 0x30, 0x01, 0xfb, + 0x30, 0xd9, 0x30, 0xeb, 0x30, 0xd3, 0x28, 0x25, 0xdd, 0x05, 0x78, 0x11, + 0x5f, 0xfe, 0x4d, 0x2f, 0x95, 0x34, 0x17, 0x3f, 0xaf, 0x61, 0x2f, 0x9d, + 0xc0, 0xdf, 0xbf, 0x10, 0x15, 0x10, 0x7f, 0x6c, 0x9a, 0x77, 0x6d, 0x61, + 0x53, 0x00, 0x2d, 0x00, 0x2f, 0x4f, 0xd4, 0x6b, 0xaf, 0x65, 0xc0, 0x05, + 0x78, 0x0d, 0x9f, 0xff, 0xc8, 0xb9, 0x58, 0xd5, 0x74, 0xc7, 0x00, 0x74, + 0xce, 0x2d, 0x00, 0x84, 0xbc, 0x44, 0xbe, 0x35, 0xa4, 0xc2, 0x05, 0x38, + 0x0b, 0x0f, 0xb3, 0x7f, 0x1c, 0x27, 0xf3, 0x45, 0x27, 0xf7, 0x55, 0x38, + 0x28, 0x1f, 0x30, 0x28, 0x13, 0x11, 0x47, 0xed, 0x31, 0x28, 0x09, 0x60, + 0x39, 0x28, 0x31, 0x10, 0x1d, 0x14, 0xff, 0x06, 0x06, 0x08, 0x06, 0x08, + 0x28, 0x08, 0x06, 0x20, 0x06, 0x07, 0x20, 0x04, 0x06, 0x06, 0x8d, 0x00, + 0x04, 0x0b, 0xd7, 0x00, 0x00, 0x08, 0x1f, 0xdd, 0x00, 0x30, 0xe1, 0x30, + 0xed, 0x30, 0xfc, 0x30, 0xf3, 0x82, 0x28, 0x19, 0xb9, 0x30, 0xda, 0x30, + 0xca, 0x20, 0x0b, 0xe0, 0xb5, 0x05, 0xa8, 0x1b, 0x50, 0x2f, 0x97, 0x5f, + 0x91, 0x6f, 0x2f, 0xa1, 0x6e, 0x2f, 0xa3, 0x55, 0x53, 0x2f, 0xaf, 0x70, + 0x4f, 0x8d, 0x61, 0x2f, 0xa5, 0x6d, 0x10, 0x14, 0xe0, 0x7f, 0x00, 0xe2, + 0x6c, 0xd8, 0x9e, 0x26, 0x4f, 0x2d, 0x00, 0x00, 0xcf, 0x82, 0x69, 0x4f, + 0xb3, 0x7e, 0xc6, 0x59, 0x80, 0x05, 0xf8, 0x19, 0xec, 0xd3, 0x54, 0xba, + 0xec, 0xb8, 0x2d, 0x01, 0x00, 0x18, 0xc2, 0x98, 0xd3, 0xa8, 0xb0, 0x05, + 0xf8, 0x15, 0x88, 0x0f, 0x13, 0x7f, 0x1f, 0x04, 0x3e, 0x6f, 0xf9, 0x43, + 0x04, 0x3d, 0xaa, 0x28, 0x17, 0x21, 0x20, 0x07, 0x3f, 0x28, 0x1b, 0x3d, + 0x28, 0x2f, 0x30, 0xc0, 0x20, 0x19, 0x10, 0x1c, 0xf4, 0xff, 0x07, 0x07, + 0x09, 0x07, 0x09, 0x09, 0x50, 0x07, 0x20, 0x06, 0x08, 0x20, 0x04, 0x07, + 0x07, 0x2a, 0x05, 0x05, 0x67, 0xd6, 0x00, 0x00, 0x09, 0x28, 0x17, 0xbf, + 0x28, 0x17, 0x00, 0xfb, 0x30, 0xb7, 0x30, 0xd1, 0x30, 0xeb, 0x30, 0x6e, + 0xcb, 0x05, 0xa8, 0x11, 0x98, 0x17, 0x74, 0x2f, 0xb3, 0x38, 0x17, 0x38, + 0x13, 0x69, 0xd4, 0x28, 0x13, 0x30, 0x0d, 0x75, 0x28, 0x23, 0x69, 0x10, + 0x15, 0x20, 0x7f, 0xe2, 0x6c, 0x08, 0x54, 0x58, 0x57, 0x7f, 0x26, 0x0f, + 0x95, 0x15, 0x5e, 0x08, 0x81, 0x9c, 0x3c, 0x5c, 0x06, 0x18, 0x17, 0xc0, + 0xd0, 0x5c, 0x80, 0x28, 0x17, 0xdc, 0xc2, 0x0c, 0xd3, 0xe8, 0xb8, 0xc8, + 0x75, 0xb2, 0x05, 0xf8, 0x19, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x42, 0x28, + 0x03, 0x40, 0x28, 0x1f, 0xbb, 0x38, 0x15, 0x38, 0x28, 0x15, 0x30, 0x0d, + 0x38, 0x25, 0x38, 0x05, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x01, 0x08, + 0x08, 0x0a, 0x08, 0x0a, 0x0a, 0x08, 0x20, 0x06, 0x40, 0x09, 0x20, 0x04, + 0x08, 0x08, 0xbe, 0x03, 0xf1, 0xd5, 0x01, 0x00, 0x00, 0x0a, 0x1f, 0xa2, + 0x30, 0xc3, 0x28, 0x11, 0x41, 0xfc, 0x28, 0x19, 0xc7, 0x30, 0xe1, 0x30, + 0xe9, 0x20, 0x01, 0x11, 0xfb, 0x30, 0xd9, 0x28, 0x21, 0xd3, 0x30, 0xbb, + 0x05, 0x48, 0x23, 0x60, 0x55, 0x2f, 0x9b, 0x3f, 0x9d, 0x72, 0x00, 0x20, + 0x00, 0x44, 0xea, 0x2f, 0xb7, 0x5f, 0xbb, 0x38, 0x27, 0x61, 0x2f, 0xbb, + 0x42, 0x4f, 0xc9, 0x62, 0xb5, 0x28, 0x2d, 0x63, 0x2f, 0xd3, 0x04, 0x3f, + 0xba, 0x48, 0x2f, 0x95, 0x75, 0x28, 0x99, 0x57, 0x2d, 0x00, 0x00, 0x7d, + 0x20, 0x2f, 0xc5, 0x74, 0x20, 0x95, 0x04, 0xd0, 0x83, 0x06, 0xf0, 0xff, + 0x16, 0x41, 0x00, 0x6c, 0x29, 0x97, 0x6f, 0x06, 0x61, 0x7d, 0x07, 0x10, + 0x7f, 0x0a, 0x00, 0x4e, 0xb7, 0x5f, 0x85, 0x68, 0xc9, 0x62, 0xc9, 0x00, + 0x62, 0x2d, 0x00, 0x2f, 0x4f, 0xd4, 0x6b, 0xaf, 0x40, 0x65, 0x05, 0xd8, + 0x19, 0x81, 0xbd, 0x80, 0xbd, 0x20, 0x00, 0x00, 0x70, 0xb3, 0x54, 0xba, + 0x7c, 0xb7, 0x7c, 0xb7, 0x00, 0x2d, 0x00, 0x84, 0xbc, 0x44, 0xbe, 0xa4, + 0xc2, 0xc5, 0x05, 0x98, 0x1d, 0x0e, 0xf2, 0x7f, 0x12, 0x04, 0x35, 0x28, + 0x13, 0x45, 0x48, 0x05, 0x05, 0x39, 0x04, 0x20, 0x00, 0x14, 0x20, 0x0f, + 0x3c, 0x40, 0x13, 0xaa, 0x38, 0x2b, 0x30, 0x28, 0x2b, 0x11, 0x40, 0x21, + 0x31, 0x28, 0x3b, 0x39, 0x38, 0x04, 0x41, 0x04, 0x08, 0x29, 0x06, 0xf4, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x09, 0x09, 0x05, 0x00, 0x09, 0x01, 0x01, + 0x09, 0x09, 0x09, 0x01, 0x02, 0x80, 0x20, 0x04, 0x09, 0x09, 0x44, 0x04, + 0x8b, 0xd6, 0x00, 0x20, 0x00, 0x0b, 0xa8, 0x17, 0xbf, 0x30, 0xaf, 0x30, + 0xc8, 0x34, 0x30, 0xa5, 0x28, 0x21, 0x98, 0x2b, 0xa8, 0x28, 0x1d, 0xad, + 0x30, 0x6a, 0xdc, 0x04, 0xa8, 0x21, 0xb8, 0x17, 0x54, 0x2f, 0xb7, 0x6b, + 0x47, 0xa5, 0x75, 0xc4, 0x2f, 0xbb, 0xb8, 0x31, 0x45, 0x00, 0x73, 0x20, + 0x01, 0x65, 0x00, 0x57, 0x71, 0x2f, 0xc7, 0x69, 0x28, 0x27, 0x6f, 0x04, + 0x28, 0x17, 0xb0, 0x7d, 0x78, 0x13, 0xff, 0x98, 0x35, 0x04, 0x70, 0x81, + 0x06, 0xf0, 0xff, 0x98, 0x17, 0xd1, 0x7d, 0x98, 0x2f, 0x04, 0x91, 0x7b, + 0x07, 0x30, 0x7f, 0x00, 0x0a, 0x4e, 0x54, 0x58, 0x93, 0x5e, 0xfe, 0x56, + 0x40, 0x2d, 0x28, 0x21, 0xc3, 0x57, 0x5e, 0x58, 0x4e, 0x59, 0x30, 0x5a, + 0x53, 0x05, 0xb8, 0x19, 0x58, 0x17, 0xc0, 0xd0, 0xe0, 0xcf, 0x10, 0x2c, + 0xd2, 0x2d, 0x68, 0x25, 0xd0, 0xc5, 0x38, 0xc1, 0x0e, 0x34, 0xd0, 0xf4, + 0xbc, 0x05, 0x38, 0x1d, 0x0e, 0xf2, 0x7f, 0xf8, 0x17, 0x22, 0x82, 0x28, + 0x0f, 0x3a, 0x04, 0x43, 0x04, 0x42, 0x20, 0x03, 0x2d, 0xad, 0x00, 0x08, + 0x35, 0x2d, 0x28, 0x19, 0x41, 0x28, 0x49, 0x30, 0x21, 0x38, 0x28, 0x2b, + 0x70, 0x3e, 0x03, 0x08, 0x27, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, + 0x0a, 0x0a, 0x06, 0x0a, 0x01, 0x02, 0x02, 0x0a, 0x0a, 0x0a, 0x02, 0x03, + 0x20, 0x04, 0x02, 0x0a, 0x0a, 0x67, 0x02, 0x7a, 0xd5, 0x00, 0x3f, 0xff, + 0x01, 0x00, 0x03, 0x04, 0x03, 0x06, 0x06, 0x01, 0x01, 0x03, 0x00, 0x06, + 0x05, 0x03, 0x01, 0x01, 0x01, 0x01, 0x02, 0x82, 0x20, 0x04, 0x03, 0x03, + 0x02, 0x02, 0x01, 0x20, 0x0d, 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, 0x20, + 0x01, 0x05, 0x05, 0x20, 0x11, 0x00, 0x05, 0x06, 0x02, 0x03, 0x03, 0x03, + 0x03, 0x04, 0x08, 0x04, 0x02, 0x04, 0x04, 0xa0, 0x01, 0x05, 0x05, 0x07, + 0x0a, 0x05, 0x07, 0x07, 0x05, 0x20, 0x06, 0x0a, 0x20, 0x04, 0x05, 0x00, + 0x05, 0x06, 0x06, 0x08, 0x06, 0x08, 0x08, 0x06, 0xa0, 0x20, 0x06, 0x07, + 0x20, 0x04, 0x06, 0x06, 0x07, 0x07, 0x09, 0x0a, 0x07, 0x09, 0x09, 0x07, + 0x20, 0x06, 0x08, 0x20, 0x04, 0x07, 0x00, 0x07, 0x08, 0x08, 0x0a, 0x08, + 0x0a, 0x0a, 0x08, 0xa7, 0x20, 0x06, 0x09, 0x20, 0x04, 0x08, 0x08, 0xf8, + 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, + 0x11, 0x0a, 0x00, 0x00, 0x30, 0x01, 0x20, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2e, 0x0d, 0x90, + 0xcc, 0x00, 0x01, 0x00, 0x02, 0x20, 0x7f, 0x89, 0x0c, 0x77, 0x06, 0xb8, + 0x19, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5a, 0x74, + 0x10, 0x06, 0x80, 0x7f, 0x76, 0x06, 0xe1, 0x7f, 0x51, 0xfd, 0x65, 0x06, + 0x6a, 0x9e, 0x7f, 0x08, 0x89, 0xe8, 0x90, 0x01, 0x06, 0xa3, 0x01, 0x1c, + 0xc1, 0x80, 0x60, 0xbd, 0x0e, 0xd3, 0x7f, 0x06, 0xd1, 0xff, 0x17, 0x04, + 0x30, 0x04, 0x3f, 0x80, 0x20, 0x03, 0x34, 0x04, 0x3d, 0x04, 0x4b, 0x04, + 0x39, 0x02, 0x04, 0x20, 0x00, 0x34, 0x04, 0x35, 0x40, 0x11, 0x40, 0x2b, + 0x04, 0x42, 0x20, 0x1b, 0x3c, 0x20, 0x0d, 0x3d, 0x20, 0x09, 0x10, 0x0c, + 0x94, 0xff, 0x8a, 0x0e, 0xd6, 0x7f, 0x01, 0x08, 0x08, 0x20, 0x01, 0x01, + 0x20, 0x06, 0x03, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x20, + 0x17, 0x53, 0x80, 0x06, 0xd8, 0x19, 0x4e, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x64, 0x3d, 0x00, 0x2d, 0x06, 0x68, 0x21, 0x0f, 0xb0, 0x7f, 0x06, 0x38, + 0x21, 0x51, 0xff, 0x6f, 0x06, 0x88, 0x1d, 0x09, 0x7f, 0x89, 0x17, 0x53, + 0x06, 0xb8, 0x17, 0x81, 0xbd, 0x06, 0xd8, 0x19, 0xd4, 0x07, 0x53, 0x7f, + 0x06, 0x91, 0xff, 0x21, 0x28, 0x05, 0x32, 0x28, 0x09, 0x40, 0x04, 0x1c, + 0x3e, 0x04, 0x2d, 0x06, 0x28, 0x25, 0x10, 0x07, 0xb4, 0xff, 0x0e, 0x36, + 0x7f, 0x02, 0x07, 0x00, 0x07, 0x07, 0x07, 0x06, 0x02, 0x02, 0x07, 0x06, + 0x00, 0x07, 0x07, 0x02, 0x02, 0x02, 0x02, 0x2f, 0x0e, 0x40, 0x36, 0x28, + 0x17, 0x04, 0x20, 0xa2, 0x30, 0xeb, 0x30, 0x00, 0xc6, 0x30, 0xa3, 0x30, + 0xdc, 0x30, 0xcb, 0x30, 0x0a, 0xc3, 0x30, 0xc8, 0x30, 0x05, 0xf8, 0x23, + 0x41, 0x28, 0x15, 0x74, 0x0b, 0x00, 0x69, 0x00, 0x62, 0x28, 0x1f, 0x6e, + 0x20, 0x07, 0x05, 0xfe, 0x39, 0xa0, 0x10, 0x08, 0x10, 0x7f, 0x6f, 0x05, + 0xcf, 0xbc, 0x3f, 0x96, 0x82, 0x84, 0x5a, 0x04, 0x53, 0x3c, 0x5c, 0x79, + 0x72, 0x06, 0x58, 0x1d, 0x44, 0xc5, 0x00, 0x74, 0xb9, 0xf0, 0xd2, 0xf4, + 0xbc, 0xc8, 0xb2, 0x34, 0xb8, 0xd2, 0x06, 0x3f, 0xb2, 0x0e, 0xf3, 0x7f, + 0x10, 0x47, 0xf1, 0x38, 0x04, 0x5e, 0x31, 0x28, 0x17, 0x3d, 0x20, 0x07, + 0x03, 0xb7, 0xf3, 0x10, 0x12, 0x54, 0xff, 0x05, 0xdd, 0x1b, 0x03, 0x28, + 0x01, 0x01, 0x20, 0x01, 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x08, 0x03, + 0xd4, 0x0d, 0x51, 0x28, 0x17, 0x05, 0x20, 0x2d, 0x1a, 0x4e, 0x2e, 0x59, + 0x05, 0xf8, 0x0b, 0xbf, 0xff, 0x43, 0x2f, 0xa3, 0x6e, 0xbc, 0x2f, 0xa3, + 0x72, 0x06, 0x2e, 0x2b, 0x0f, 0xd0, 0x7f, 0x05, 0xd7, 0x8f, 0x07, 0x70, + 0x7f, 0x2d, 0x4e, 0x30, 0xe8, 0x90, 0x06, 0x58, 0x11, 0x5f, 0xff, 0x11, + 0xc9, 0x59, 0xc5, 0x31, 0x80, 0xbd, 0x0f, 0x33, 0x7f, 0x06, 0x52, 0x7f, + 0x26, 0x04, 0x35, 0x28, 0x0f, 0x41, 0x42, 0x28, 0x1d, 0x30, 0x04, 0x3b, + 0x04, 0x4c, 0x28, 0x1b, 0x01, 0x4b, 0x04, 0x39, 0x04, 0x20, 0x00, 0x34, + 0x20, 0x17, 0x63, 0x3f, 0x20, 0x13, 0x38, 0x35, 0x30, 0x04, 0x3c, 0x60, + 0x25, 0x10, 0x0c, 0xb4, 0xff, 0x8a, 0x0e, 0x56, 0x7f, 0x04, 0x02, 0x02, + 0x20, 0x01, 0x04, 0x20, 0x06, 0x08, 0x82, 0x20, 0x05, 0x04, 0x04, 0x9e, + 0x0d, 0xca, 0x28, 0x17, 0x06, 0x05, 0x20, 0x7e, 0x6e, 0xb8, 0x5c, 0x06, + 0xb8, 0x17, 0x47, 0x2f, 0xaf, 0x44, 0x61, 0x2f, 0xa9, 0x64, 0x00, 0x27, + 0x2f, 0xbb, 0x6e, 0x00, 0x63, 0x73, 0x05, 0xef, 0xaf, 0x90, 0x7f, 0x65, + 0x00, 0x2d, 0x06, 0x20, 0x81, 0x07, 0xb0, 0xff, 0x42, 0x20, 0x0e, 0x20, + 0xff, 0x27, 0x59, 0x7e, 0x6e, 0x06, 0xb8, 0x17, 0xf8, 0x01, 0xad, 0x91, + 0xb7, 0xf9, 0xb2, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0xa0, 0x06, 0x53, 0xff, + 0x13, 0x48, 0x11, 0x3d, 0x04, 0x34, 0x04, 0x2d, 0x2e, 0x00, 0x10, 0x28, + 0x21, 0x41, 0x04, 0x27, 0xfb, 0x10, 0x00, 0xb1, 0x7f, 0x10, 0x06, 0xf0, + 0xff, 0x05, 0x2a, 0x03, 0x03, 0x20, 0x01, 0x05, 0x20, 0x06, 0x02, 0x20, + 0x05, 0x05, 0x00, 0x05, 0x43, 0x0d, 0x4c, 0xcb, 0x00, 0x00, 0x07, 0x11, + 0x20, 0x17, 0x53, 0x06, 0xb8, 0x15, 0x00, 0x00, 0x4e, 0x2e, 0xa7, 0x68, + 0x72, 0x28, 0x15, 0x10, 0x0e, 0xd0, 0x7f, 0x74, 0x06, 0x6e, 0xad, 0x00, + 0x00, 0x17, 0x10, 0x53, 0xe8, 0x90, 0x06, 0xb8, 0x17, 0x81, 0xbd, 0x80, + 0xbd, 0xc1, 0x0f, 0x13, 0x7f, 0x06, 0x91, 0xff, 0x21, 0x04, 0x35, 0x04, + 0x32, 0x20, 0x03, 0x40, 0x40, 0x28, 0x1b, 0x4b, 0x04, 0x39, 0x04, 0x20, + 0x00, 0x51, 0x34, 0x20, 0x11, 0x3f, 0x28, 0x2b, 0x40, 0x04, 0x42, 0x28, + 0x31, 0x5d, 0x3c, 0x20, 0x1f, 0x3d, 0x20, 0x09, 0x10, 0x14, 0xd4, 0xff, + 0x06, 0x96, 0xff, 0x06, 0x38, 0x0c, 0x00, 0x07, 0x06, 0x06, 0x05, 0x07, + 0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x0c, 0x0e, 0xa8, 0xcc, 0x00, + 0x26, 0x00, 0x08, 0x28, 0x17, 0x71, 0x67, 0x06, 0xb8, 0x19, 0x78, 0x17, + 0x2d, 0x2b, 0x00, 0x45, 0x2f, 0xa9, 0x74, 0x10, 0x0e, 0x60, 0x7f, 0x65, + 0x41, 0xfb, 0x06, 0x38, 0x1b, 0x09, 0x1c, 0x4e, 0x17, 0x53, 0x06, 0xd8, + 0x17, 0xd9, 0xb3, 0x06, 0xb8, 0x19, 0xe0, 0x07, 0x73, 0x7f, 0x06, 0x72, + 0x01, 0x98, 0x17, 0x3e, 0x04, 0x2d, 0x00, 0x12, 0xa3, 0x20, 0x05, 0x41, + 0x28, 0x0f, 0x3e, 0x04, 0x47, 0x05, 0x68, 0x27, 0x10, 0x0f, 0x54, 0xff, + 0xe4, 0x06, 0x96, 0xff, 0x28, 0x12, 0x38, 0x14, 0x07, 0x06, 0x28, 0x15, + 0x07, 0x07, 0x04, 0x07, 0x07, 0xfc, 0x0d, 0xea, 0x28, 0x17, 0x09, 0x20, + 0x20, 0x57, 0x53, 0x06, 0xb8, 0x15, 0x00, 0x00, 0x53, 0x00, 0x75, 0xd0, + 0x06, 0xaf, 0xad, 0x10, 0x07, 0x50, 0x7f, 0x72, 0x06, 0xaf, 0x30, 0x57, + 0x53, 0xe8, 0x90, 0x9a, 0x06, 0xb8, 0x17, 0xa8, 0xb0, 0x06, 0xb8, 0x15, + 0x07, 0x53, 0x7f, 0x6c, 0x06, 0xa4, 0x80, 0x2e, 0x38, 0x04, 0x36, 0x05, + 0x68, 0x01, 0x10, 0x10, 0x94, 0xff, 0x06, 0xb6, 0xff, 0x08, 0x09, 0x09, + 0x82, 0x20, 0x01, 0x08, 0x08, 0x09, 0x0a, 0x0a, 0x20, 0x05, 0x08, 0x00, + 0x08, 0xf1, 0x0c, 0x8f, 0xcb, 0x00, 0x00, 0x0a, 0x9e, 0x28, 0x17, 0x71, + 0x67, 0x06, 0xb8, 0x19, 0x58, 0x17, 0x06, 0x7f, 0xad, 0x10, 0x07, 0x50, + 0x7f, 0x72, 0x81, 0x06, 0x8e, 0x2d, 0x00, 0x00, 0x1c, 0x4e, 0x57, 0x53, + 0x06, 0xd8, 0x17, 0x38, 0xd9, 0xb3, 0x06, 0xb8, 0x19, 0x07, 0x53, 0x7f, + 0x06, 0x91, 0xff, 0x2e, 0x04, 0x33, 0x02, 0x04, 0x3e, 0x04, 0x2d, 0x00, + 0x12, 0x20, 0x05, 0x41, 0x8f, 0x28, 0x0f, 0x3e, 0x04, 0x47, 0x05, 0xc8, + 0x27, 0x10, 0x0f, 0x34, 0xff, 0x06, 0xb6, 0xff, 0x28, 0x0f, 0x90, 0x20, + 0x01, 0x09, 0x09, 0x50, 0x02, 0x09, 0x09, 0xf7, 0x0c, 0x00, 0x6c, 0xcc, + 0x00, 0x00, 0x0b, 0x20, 0xcb, 0x30, 0x08, 0xc3, 0x30, 0xd7, 0x30, 0x06, + 0x98, 0x19, 0x4e, 0x00, 0x69, 0x38, 0x00, 0x70, 0x20, 0x01, 0x36, 0x19, + 0x10, 0x16, 0x30, 0x7f, 0x3c, 0x5c, 0x6e, 0x10, 0x66, 0xaf, 0x65, 0x06, + 0x98, 0x19, 0xc8, 0xb2, 0x04, 0xd5, 0xc7, 0x06, 0xaf, 0xae, 0x0f, 0x03, + 0x7f, 0x1d, 0x04, 0x38, 0x27, 0xfb, 0x10, 0x06, 0x91, 0x7f, 0x10, 0x06, + 0xf5, 0xff, 0x16, 0x0a, 0x04, 0x04, 0x20, 0x01, 0x0a, 0x40, 0x06, 0x38, + 0x22, 0x1d, 0x31, 0x0d, 0x07, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x08, + 0x08, 0x20, 0x01, 0x50, 0x01, 0x20, 0x06, 0x03, 0x20, 0x05, 0x01, 0x01, + 0x02, 0x07, 0x00, 0x07, 0x07, 0x07, 0x06, 0x02, 0x02, 0x07, 0x06, 0x01, + 0x07, 0x07, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x14, 0x20, 0x01, 0x03, + 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x94, 0x30, 0x14, 0x02, 0x04, + 0x20, 0x06, 0x08, 0x20, 0x05, 0x04, 0x04, 0x4a, 0x05, 0x30, 0x14, 0x03, + 0x05, 0x20, 0x06, 0x02, 0x20, 0x05, 0x05, 0x20, 0x05, 0x06, 0x30, 0x04, + 0x07, 0x06, 0x06, 0x05, 0x07, 0x8c, 0x20, 0x0b, 0x06, 0x06, 0x06, 0x20, + 0x0a, 0x30, 0x0c, 0x07, 0x06, 0xd1, 0x20, 0x0d, 0x30, 0x5a, 0x08, 0x38, + 0xa4, 0x09, 0x08, 0x08, 0x28, 0xb7, 0xf8, 0x20, 0x05, 0x40, 0x07, 0xc8, + 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x04, 0x9b, 0x00, 0x11, 0x12, 0x00, 0x00, + 0x30, 0x01, 0x21, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x06, 0x0a, 0xfb, 0xc1, 0x00, 0x00, 0x00, + 0x02, 0x21, 0xd5, 0x30, 0xe9, 0x30, 0xf3, 0x00, 0x30, 0xb7, 0x30, 0xb9, + 0x30, 0xb3, 0x30, 0xfb, 0x2c, 0x30, 0xe2, 0x20, 0x0d, 0xb5, 0x20, 0x0f, + 0x05, 0x98, 0x2b, 0x46, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x10, 0x69, 0x00, 0x73, 0x20, 0x05, 0x6f, 0x00, 0x20, 0x00, + 0x63, 0x4d, 0x20, 0x05, 0x30, 0x15, 0x7a, 0x00, 0xe1, 0x20, 0x19, 0x10, + 0x14, 0xd0, 0x7f, 0x00, 0x17, 0x5f, 0x17, 0x67, 0x7f, 0x89, 0xaf, 0x65, + 0x00, 0xd1, 0x79, 0x2d, 0x00, 0xab, 0x83, 0xc9, 0x62, 0x08, 0x51, 0x68, + 0x01, 0x77, 0x05, 0xbb, 0x29, 0x04, 0xd5, 0x80, 0x00, 0xb7, 0xdc, 0xc2, + 0xa4, 0xc2, 0x54, 0xcf, 0xa8, 0x06, 0xba, 0x7c, 0xb7, 0xb0, 0xc0, 0x05, + 0xfb, 0xa5, 0x0e, 0xf3, 0x7f, 0x24, 0x00, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x41, 0x20, 0x04, 0x38, 0x20, 0x03, 0x3a, 0x04, 0x3e, 0x04, + 0x20, 0x36, 0x00, 0x1c, 0x20, 0x05, 0x30, 0x15, 0x41, 0x40, 0x19, 0x10, + 0x1c, 0xd4, 0xff, 0x01, 0x20, 0x08, 0x08, 0x20, 0x01, 0x01, 0x01, 0x09, + 0x08, 0x10, 0x90, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x21, 0xa2, + 0x30, 0x41, 0xc8, 0x48, 0x19, 0xc6, 0x30, 0xa3, 0x30, 0xc0, 0x05, 0xa8, + 0x0f, 0x82, 0x7f, 0xff, 0x41, 0x00, 0x74, 0x00, 0x6c, 0x47, 0xff, 0x74, + 0xb0, 0x28, 0x19, 0x64, 0x28, 0x23, 0x10, 0x15, 0xd0, 0x7f, 0x3f, 0x96, + 0x79, 0x72, 0x03, 0x70, 0x51, 0x82, 0x84, 0xbe, 0x8f, 0x05, 0xd8, 0x0f, + 0x7f, 0xff, 0x00, 0x44, 0xc5, 0xc0, 0xd2, 0x80, 0xb7, 0xf0, 0xd2, 0x30, + 0xe4, 0xb2, 0x06, 0x5f, 0xb7, 0x0e, 0xf3, 0x7f, 0x10, 0x04, 0x42, 0x04, + 0x56, 0x3b, 0x48, 0x19, 0x42, 0x28, 0x19, 0x34, 0x28, 0x23, 0x10, 0x1d, + 0xd4, 0xff, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, + 0x02, 0x02, 0x08, 0x39, 0x0b, 0x47, 0xc2, 0x2c, 0xad, 0x21, 0xc1, 0x30, + 0x16, 0xe7, 0x30, 0xeb, 0x28, 0x15, 0xab, 0x06, 0x28, 0x13, 0x3f, 0xff, + 0x43, 0x22, 0x00, 0x68, 0x2f, 0xa3, 0x6c, 0x00, 0x75, 0x28, 0x1f, 0x65, + 0xe0, 0x2f, 0xb5, 0x05, 0xf8, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x54, 0x4e, + 0x62, 0x53, 0x79, 0x18, 0x72, 0x61, 0x53, 0x06, 0x58, 0x15, 0x26, 0x97, + 0xcd, 0xe8, 0xb8, 0x0c, 0x4c, 0xd1, 0x74, 0xce, 0x06, 0x58, 0x15, 0x0f, + 0x13, 0x7f, 0x27, 0x04, 0x51, 0x3e, 0x28, 0x17, 0x43, 0x28, 0x1d, 0x35, + 0x04, 0x3a, 0x06, 0x08, 0x15, 0xa0, 0x10, 0x17, 0x14, 0xff, 0x03, 0x38, + 0x0c, 0x02, 0x03, 0x03, 0x03, 0x02, 0x40, 0x11, 0x30, 0x05, 0x03, 0x78, + 0x09, 0xfb, 0xc1, 0x00, 0x00, 0x00, 0x05, 0x21, 0xb3, 0x30, 0xed, 0x30, + 0xf3, 0xec, 0x06, 0x68, 0x13, 0x58, 0x17, 0x38, 0x15, 0xf3, 0x2f, 0xaf, + 0x10, 0x16, 0x50, 0x7f, 0xd1, 0x79, 0x30, 0x86, 0x96, 0x06, 0x78, 0x13, + 0x3f, 0xff, 0x5c, 0xcf, 0x60, 0xb8, 0xd1, 0x06, 0x93, 0x7d, 0x0f, 0x13, + 0x7f, 0x1a, 0x48, 0x17, 0x3e, 0x04, 0x3d, 0x06, 0x08, 0x11, 0xa0, 0x10, + 0x17, 0x54, 0xff, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x04, 0x04, 0x03, 0x40, + 0x08, 0x30, 0x05, 0x04, 0x51, 0x0b, 0xd9, 0xc2, 0x00, 0x20, 0x00, 0x06, + 0x28, 0x17, 0xde, 0x30, 0xe4, 0x30, 0xb0, 0x35, 0x30, 0xa2, 0x06, 0x68, + 0x1b, 0x38, 0x17, 0x6d, 0x2f, 0xa5, 0x79, 0x2f, 0xa9, 0x70, 0x67, 0x2f, + 0xb5, 0x06, 0x1f, 0xaf, 0x10, 0x0e, 0xd0, 0x7f, 0xd1, 0x79, 0x6c, 0x9a, + 0x08, 0x9a, 0x4e, 0xdc, 0x74, 0x06, 0x78, 0x1b, 0x54, 0xcf, 0xc8, 0x06, + 0xb9, 0x7c, 0xc5, 0xfc, 0xac, 0x06, 0xbb, 0x97, 0x0e, 0xb3, 0x7f, 0x1a, + 0x08, 0x04, 0x30, 0x04, 0x3c, 0x20, 0x03, 0x4f, 0x04, 0x33, 0x34, 0x04, + 0x43, 0x20, 0x0b, 0x10, 0x1d, 0xf4, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, + 0x08, 0x05, 0x05, 0x04, 0x07, 0x30, 0x05, 0x05, 0x46, 0x0a, 0x04, 0xaf, + 0xc1, 0x00, 0x00, 0x07, 0x28, 0x17, 0xd1, 0x30, 0x63, 0xf3, 0x06, 0x68, + 0x13, 0x7f, 0xaf, 0x70, 0x00, 0xe1, 0x06, 0xcf, 0xaf, 0x10, 0x0e, 0xb0, + 0x7f, 0x0c, 0xd1, 0x79, 0x58, 0x6f, 0x06, 0x78, 0x13, 0x58, 0x17, 0x10, + 0xd3, 0xc1, 0x06, 0x93, 0x7d, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x3e, 0x04, + 0x3f, 0x28, 0x1b, 0x68, 0x3d, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, + 0x06, 0x38, 0x0c, 0x05, 0x06, 0x06, 0x10, 0x06, 0x05, 0x09, 0x30, 0x05, + 0x06, 0x80, 0x0a, 0xde, 0x08, 0xc0, 0x00, 0x00, 0x08, 0x28, 0x17, 0xeb, + 0x30, 0xc6, 0x30, 0x30, 0xb9, 0x06, 0x88, 0x19, 0x3f, 0xaf, 0x72, 0x00, + 0x74, 0x00, 0x10, 0xe9, 0x00, 0x73, 0x10, 0x16, 0x40, 0x7f, 0xd1, 0x79, + 0x14, 0x5c, 0x08, 0x79, 0x72, 0xaf, 0x65, 0x06, 0x78, 0x1b, 0x54, 0xcf, + 0x74, 0x05, 0xb9, 0x4c, 0xd1, 0xa4, 0xc2, 0x0e, 0xf3, 0x7f, 0xea, 0x06, + 0x63, 0xff, 0x80, 0x38, 0x17, 0x40, 0x04, 0x42, 0x04, 0x35, 0x04, 0x41, + 0xd0, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, + 0x07, 0x07, 0x07, 0x20, 0x06, 0x0a, 0x30, 0x05, 0x07, 0x05, 0x0b, 0x67, + 0xc1, 0x04, 0x00, 0x00, 0x09, 0x21, 0xa8, 0x28, 0x17, 0xfb, 0x30, 0x01, + 0xd1, 0x30, 0xe9, 0x30, 0xa4, 0x30, 0xbd, 0x06, 0x28, 0x1d, 0x00, 0x45, + 0x00, 0x6c, 0x00, 0x20, 0x00, 0x50, 0x00, 0x45, 0x61, 0x28, 0x1d, 0x61, + 0x00, 0xed, 0x28, 0x1d, 0x6f, 0x10, 0x15, 0xc0, 0x7f, 0x00, 0xc3, 0x57, + 0x14, 0x5c, 0x15, 0x5e, 0xc9, 0x62, 0x08, 0x0a, 0x4f, 0x22, 0x7d, 0x06, + 0x38, 0x1b, 0xd8, 0xc5, 0x0c, 0x03, 0xd3, 0x7c, 0xb7, 0x74, 0xc7, 0x8c, + 0x23, 0x8d, 0x06, 0x3f, 0xb2, 0x80, 0x0e, 0xf3, 0x7f, 0x2d, 0x04, 0x3b, + 0x04, 0x4c, 0x04, 0x2d, 0x08, 0x00, 0x1f, 0x04, 0x30, 0x28, 0x1f, 0x30, + 0x04, 0x38, 0xb4, 0x28, 0x1f, 0x3e, 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, + 0xff, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x12, 0x30, + 0x05, 0x08, 0xe8, 0x09, 0x44, 0x3e, 0x2c, 0xa3, 0x0a, 0x21, 0xb0, 0x28, + 0x11, 0xb7, 0x30, 0x14, 0xa2, 0x30, 0xb9, 0x28, 0x1d, 0xa2, 0x28, 0x21, + 0xc7, 0x30, 0x1a, 0xa3, 0x30, 0xaa, 0x20, 0x0d, 0x05, 0x7f, 0xbc, 0x47, + 0x48, 0x0f, 0x63, 0x2a, 0x00, 0x69, 0x28, 0x19, 0x73, 0x28, 0x21, 0x61, + 0x28, 0x25, 0x44, 0xb0, 0x20, 0x0d, 0x6f, 0x05, 0x6f, 0xbf, 0x10, 0x0e, + 0xf0, 0x7f, 0x3c, 0x68, 0xc9, 0x62, 0x00, 0x7f, 0x89, 0x9a, 0x4e, 0xaf, + 0x65, 0x2d, 0x00, 0x00, 0x3f, 0x96, 0xea, 0x8f, 0x65, 0x59, 0xaf, 0x65, + 0x80, 0x05, 0xb8, 0x1f, 0xf8, 0xad, 0x7c, 0xb7, 0xdc, 0xc2, 0x44, 0x20, + 0xc5, 0xa4, 0x20, 0x03, 0x14, 0xb5, 0x24, 0xc6, 0xa4, 0xea, 0x23, 0x95, + 0x05, 0xbf, 0xb8, 0x0e, 0xf3, 0x7f, 0x13, 0x48, 0x0d, 0x41, 0x28, 0x1b, + 0x4f, 0x8a, 0x28, 0x11, 0x2d, 0x00, 0x30, 0x28, 0x23, 0x14, 0x28, 0x29, + 0x3e, 0xc8, 0x28, 0x1f, 0x10, 0x1d, 0x34, 0xff, 0x09, 0x09, 0x50, 0x01, + 0x0a, 0x09, 0x03, 0x80, 0x40, 0x0a, 0xdb, 0x0a, 0x6f, 0xc4, 0x00, 0x00, + 0x0b, 0x02, 0x21, 0xa4, 0x30, 0xf3, 0x30, 0xc6, 0x28, 0x0b, 0xd6, 0x30, + 0x30, 0xab, 0x05, 0x88, 0x0b, 0xbf, 0xff, 0x49, 0x00, 0x6e, 0x00, 0x45, + 0x74, 0x28, 0x15, 0x62, 0x00, 0x75, 0x28, 0x1d, 0xe1, 0x10, 0x16, 0x00, + 0x7f, 0x00, 0xe0, 0x56, 0x82, 0x84, 0x03, 0x5e, 0x61, 0x53, 0xc0, 0x05, + 0xb8, 0x0b, 0xbf, 0xff, 0x78, 0xc7, 0xf0, 0xd2, 0x80, 0xbd, 0x30, 0x74, + 0xce, 0x06, 0x50, 0x7d, 0x0f, 0x13, 0x7f, 0x18, 0x04, 0x3d, 0x04, 0x00, + 0x42, 0x04, 0x38, 0x04, 0x31, 0x04, 0x43, 0x04, 0x64, 0x3a, 0x28, 0x21, + 0x10, 0x1d, 0xf4, 0xff, 0x0a, 0x0a, 0x50, 0x01, 0x0b, 0x0a, 0x40, 0x04, + 0x40, 0x0a, 0x2b, 0x0a, 0x4b, 0xc1, 0x00, 0x00, 0x44, 0x0c, 0x28, 0x17, + 0xb9, 0x30, 0xe9, 0x20, 0x03, 0xfb, 0x30, 0x50, 0xc7, 0x20, 0x03, 0xe9, + 0x20, 0x07, 0xd0, 0x30, 0xa4, 0x30, 0x54, 0xa2, 0x05, 0x88, 0x23, 0x49, + 0x2f, 0xa5, 0x6c, 0x6f, 0xab, 0x64, 0x00, 0x62, 0x65, 0x2f, 0xb1, 0x30, + 0x0d, 0x20, 0x00, 0x42, 0x2f, 0xc5, 0x68, 0x30, 0x00, 0xed, 0x2f, 0xcb, + 0x10, 0x14, 0xd0, 0x7f, 0x77, 0x6d, 0x7e, 0x6e, 0x08, 0xa4, 0x7f, 0x9b, + 0x5c, 0x06, 0x78, 0x17, 0x74, 0xc7, 0xac, 0x00, 0xc2, 0x7c, 0xb7, 0xa4, + 0xc2, 0x70, 0xb3, 0x7c, 0x01, 0xb7, 0x14, 0xbc, 0x74, 0xc7, 0x44, 0xc5, + 0x05, 0xdb, 0x9d, 0xa3, 0x33, 0x67, 0x61, 0x2f, 0xad, 0x20, 0x00, 0x45, + 0x2f, 0xb3, 0x33, 0x89, 0x50, 0x6e, 0x43, 0x87, 0x6e, 0x0d, 0x63, 0xff, + 0x18, 0x04, 0x41, 0x04, 0x40, 0x3b, 0x28, 0x0f, 0x41, 0x04, 0x2d, 0x00, + 0x34, 0x04, 0x62, 0x35, 0x20, 0x05, 0x30, 0x0d, 0x2d, 0x00, 0x11, 0x28, + 0x23, 0x38, 0x32, 0x04, 0x4f, 0x05, 0x08, 0x27, 0x10, 0x16, 0xf4, 0xff, + 0x0b, 0x0b, 0x50, 0x01, 0x02, 0x20, 0x0b, 0x06, 0x40, 0x0a, 0x97, 0x0b, + 0x75, 0xc2, 0x00, 0x16, 0x00, 0x0d, 0x21, 0x38, 0x09, 0xd1, 0x28, 0x1b, + 0x06, 0x7c, 0xaf, 0x4c, 0xa8, 0x48, 0x05, 0x50, 0x28, 0x19, 0x7a, 0x10, + 0x16, 0x40, 0x7f, 0xc9, 0x62, 0xf4, 0x10, 0x5d, 0xaf, 0x65, 0x06, 0x78, + 0x15, 0x00, 0x00, 0x7c, 0xb7, 0x1a, 0x0c, 0xd3, 0xa4, 0x23, 0x89, 0x10, + 0x06, 0x73, 0x7f, 0x1b, 0x48, 0x05, 0x1f, 0xca, 0x48, 0x19, 0x10, 0x1e, + 0x34, 0xff, 0x0c, 0x0c, 0x70, 0x01, 0x0b, 0x40, 0x0a, 0x2e, 0x00, 0x0a, + 0xa6, 0xc1, 0x00, 0x00, 0x0e, 0x21, 0xec, 0x02, 0x30, 0xf3, 0x30, 0xd4, + 0x30, 0xe9, 0x06, 0xa8, 0x17, 0x65, 0x0b, 0x00, 0x6d, 0x00, 0x70, 0x2c, + 0xb1, 0x72, 0x05, 0x0f, 0x9b, 0x10, 0x10, 0x30, 0x7f, 0x02, 0x26, 0x4f, + 0xae, 0x76, 0xc9, 0x62, 0x06, 0x98, 0x17, 0x18, 0x06, 0xb8, 0x3c, 0xd5, + 0x7c, 0xb7, 0x06, 0xb8, 0x17, 0x0e, 0xd3, 0x7f, 0x1b, 0x00, 0x04, 0x35, + 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x38, 0x32, 0x04, 0x40, 0x28, 0x21, 0x10, + 0x1e, 0x14, 0xff, 0x0d, 0x0d, 0x70, 0x01, 0x0c, 0x88, 0x40, 0x0a, 0x5e, + 0x0a, 0x02, 0x28, 0x17, 0x0f, 0x21, 0xaa, 0x00, 0x30, 0xb3, 0x30, 0xc6, + 0x30, 0xda, 0x30, 0xb1, 0x80, 0x06, 0x68, 0x19, 0x4f, 0x00, 0x63, 0x00, + 0x6f, 0x00, 0x74, 0xa3, 0x28, 0x1d, 0x70, 0x28, 0x21, 0x71, 0x00, 0x75, + 0x28, 0x27, 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x65, 0x59, 0xd1, 0x79, 0x79, + 0x72, 0x69, 0x4f, 0x20, 0x4b, 0x51, 0x06, 0x58, 0x1b, 0x24, 0xc6, 0x54, + 0xcf, 0x4c, 0x04, 0xd1, 0x98, 0xd3, 0x00, 0xcf, 0x10, 0x06, 0x53, 0x7f, + 0x1e, 0x04, 0x55, 0x3a, 0x28, 0x0f, 0x42, 0x28, 0x1d, 0x3f, 0x28, 0x21, + 0x3a, 0x28, 0x25, 0x94, 0x10, 0x1d, 0xd4, 0xff, 0x0e, 0x0e, 0x70, 0x01, + 0x0d, 0x40, 0x0a, 0x43, 0x0a, 0x04, 0x95, 0xc0, 0x00, 0x00, 0x10, 0x28, + 0x17, 0xe9, 0x30, 0x05, 0xf3, 0x30, 0xc1, 0x30, 0xe7, 0x06, 0x88, 0x17, + 0x6c, 0x2f, 0xa7, 0x58, 0x6e, 0x28, 0x1d, 0x68, 0x28, 0x1f, 0x10, 0x16, + 0x10, 0x7f, 0x65, 0x59, 0x70, 0x18, 0x51, 0x54, 0x4e, 0x06, 0x58, 0x13, + 0x3f, 0xff, 0x2c, 0xc6, 0x80, 0x18, 0xb7, 0x08, 0xcd, 0x06, 0x70, 0x7d, + 0x0f, 0x13, 0x7f, 0x1e, 0x04, 0x3b, 0x83, 0x28, 0x17, 0x3d, 0x04, 0x45, + 0x04, 0x3e, 0x05, 0xe8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x28, 0x0f, 0x0f, + 0x70, 0x01, 0x0e, 0x40, 0x0a, 0x6a, 0x0a, 0xb4, 0x02, 0xc2, 0x00, 0x00, + 0x11, 0x21, 0xb5, 0x28, 0x15, 0xbf, 0x02, 0x30, 0xfb, 0x30, 0xd0, 0x30, + 0xeb, 0x20, 0x03, 0xe9, 0xa8, 0x06, 0x08, 0x1d, 0x53, 0x48, 0x15, 0x74, + 0x28, 0x1b, 0x20, 0x00, 0x42, 0x02, 0x00, 0xe1, 0x00, 0x72, 0x00, 0x62, + 0x28, 0x27, 0x72, 0xc0, 0x28, 0x2b, 0x10, 0x15, 0x50, 0x7f, 0x23, 0x57, + 0xf4, 0x5d, 0xf4, 0x5d, 0x20, 0xc9, 0x62, 0x06, 0x78, 0x19, 0xb0, 0xc0, + 0xc0, 0xd0, 0x14, 0x01, 0xbc, 0x74, 0xb9, 0x14, 0xbc, 0x7c, 0xb7, 0x06, + 0x3b, 0x99, 0xa8, 0x0e, 0xf3, 0x7f, 0x21, 0x48, 0x15, 0x42, 0x28, 0x1b, + 0x2d, 0x00, 0x11, 0x8b, 0x28, 0x21, 0x40, 0x04, 0x31, 0x40, 0x05, 0x30, + 0x05, 0x68, 0x25, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x10, 0x10, 0x70, 0x01, + 0x0f, 0x40, 0x0a, 0x9b, 0x0a, 0x42, 0x00, 0xc1, 0x00, 0x00, 0x12, 0x21, + 0xd0, 0x30, 0xb8, 0x35, 0x30, 0xa7, 0x06, 0x08, 0x0d, 0x9f, 0xff, 0x56, + 0x2f, 0xad, 0x6c, 0x2f, 0xb3, 0x43, 0x65, 0x10, 0x16, 0x60, 0x7f, 0x71, + 0x5c, 0x37, 0x8c, 0x06, 0x78, 0x13, 0x3f, 0xff, 0x0d, 0x14, 0xbc, 0x08, + 0xc6, 0x06, 0x93, 0x7d, 0x0f, 0x13, 0x7f, 0x12, 0x28, 0x17, 0x59, 0x3b, + 0x20, 0x01, 0x35, 0x05, 0x68, 0x07, 0x10, 0x17, 0xf4, 0xff, 0x11, 0x11, + 0x70, 0x01, 0x44, 0x02, 0x40, 0x0a, 0xa0, 0x09, 0xca, 0x28, 0x17, 0x13, + 0x21, 0x10, 0xe8, 0x30, 0xed, 0x06, 0xa8, 0x15, 0x00, 0x00, 0x59, 0x00, + 0x50, 0x6f, 0x2f, 0xa3, 0x6f, 0x10, 0x16, 0x80, 0x7f, 0xa6, 0x7e, 0x57, + 0x7f, 0x84, 0x06, 0xb8, 0x17, 0x94, 0xc6, 0x5c, 0xb8, 0x10, 0x06, 0xb3, + 0x7f, 0x19, 0x04, 0x19, 0x3e, 0x04, 0x40, 0x20, 0x03, 0x10, 0x1e, 0x74, + 0xff, 0x12, 0x12, 0x70, 0x01, 0x42, 0x05, 0x40, 0x0a, 0xc2, 0x0a, 0x0a, + 0xc2, 0x00, 0x3f, 0xff, 0x01, 0x20, 0x08, 0x08, 0x20, 0x01, 0x01, 0x01, + 0x09, 0x08, 0x10, 0x89, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, + 0x02, 0x40, 0x06, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, + 0x03, 0x09, 0x03, 0x03, 0x02, 0x11, 0x30, 0x05, 0x03, 0x04, 0x30, 0x04, + 0x02, 0x03, 0x04, 0x04, 0x04, 0x03, 0x08, 0x30, 0x05, 0x04, 0x40, 0x05, + 0x30, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x07, 0x90, 0x30, 0x05, 0x05, + 0x06, 0x30, 0x04, 0x05, 0x06, 0x06, 0x06, 0x24, 0x05, 0x09, 0x30, 0x05, + 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x09, 0x07, 0x07, 0x06, 0x0a, 0x30, + 0x05, 0x07, 0x08, 0x30, 0x04, 0x48, 0x07, 0x20, 0x74, 0x07, 0x12, 0x30, + 0x05, 0x08, 0x09, 0x09, 0x8a, 0x50, 0x01, 0x0a, 0x09, 0x03, 0x50, 0x07, + 0x0a, 0x50, 0x01, 0x0b, 0x28, 0x0a, 0x04, 0x50, 0x07, 0x0b, 0x50, 0x01, + 0x02, 0x0b, 0x06, 0x99, 0x40, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x50, 0x0a, + 0x0d, 0x0d, 0x70, 0x01, 0x99, 0x50, 0x0a, 0x0e, 0x0e, 0x70, 0x01, 0x50, + 0x0a, 0x0f, 0x0f, 0x70, 0x01, 0x9f, 0x50, 0x0a, 0x10, 0x10, 0x70, 0x01, + 0x50, 0x0a, 0xf9, 0x3f, 0xf1, 0x37, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, + 0x11, 0x0e, 0x00, 0x00, 0x30, 0x01, 0x22, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xcc, 0x0c, 0x63, + 0xc9, 0x00, 0x00, 0x00, 0x02, 0x22, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x20, + 0x30, 0xfb, 0x20, 0x03, 0xfc, 0x30, 0xde, 0x30, 0xb9, 0x40, 0x30, 0x05, + 0xf8, 0x25, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x20, 0x00, 0x54, 0x00, 0x05, 0x68, 0x00, 0x6f, 0x00, 0x6d, 0x20, + 0x11, 0x73, 0x06, 0x20, 0x7f, 0x70, 0x2d, 0x06, 0xe0, 0x7f, 0x06, 0xf0, + 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0x58, 0x62, 0x02, 0x6c, 0x9a, 0xaf, + 0x65, 0x3a, 0x53, 0x06, 0x5b, 0x1f, 0x38, 0x00, 0xc1, 0x78, 0xc7, 0xb8, + 0xd2, 0xa0, 0xd1, 0x38, 0x18, 0xba, 0xa4, 0xc2, 0x06, 0x3b, 0xa1, 0x0e, + 0xf2, 0x7f, 0x21, 0x04, 0x35, 0x00, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x2d, + 0x00, 0x22, 0x00, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x41, 0x60, + 0x04, 0x10, 0x05, 0xb1, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x01, 0x0c, 0x06, + 0x0c, 0x0c, 0x02, 0x0c, 0x01, 0x01, 0x0c, 0x0c, 0x08, 0x20, 0x05, 0x01, + 0x40, 0x01, 0x58, 0x17, 0x03, 0x22, 0xaf, 0x30, 0xe9, 0x30, 0x58, 0xec, + 0x28, 0x1b, 0xc9, 0x28, 0x1f, 0x06, 0x3f, 0xb9, 0x43, 0x00, 0x6c, 0x8a, + 0x28, 0x19, 0x72, 0x00, 0x65, 0x28, 0x1b, 0x64, 0x28, 0x15, 0x6e, 0x80, + 0x10, 0x15, 0xe0, 0x7f, 0x4b, 0x51, 0xc9, 0x62, 0x26, 0x4f, 0x7b, 0x40, + 0x76, 0x06, 0x78, 0x17, 0x74, 0xd0, 0x98, 0xb7, 0xf0, 0xb7, 0x30, 0x58, + 0xb3, 0x06, 0x7f, 0xb5, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, 0x3b, 0x04, 0x15, + 0x4d, 0x04, 0x40, 0x48, 0x1d, 0x34, 0x28, 0x19, 0x3d, 0x05, 0xc8, 0x15, + 0xa5, 0x10, 0x17, 0x14, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x20, 0x06, + 0x02, 0x20, 0x05, 0x04, 0x02, 0x02, 0xc6, 0x0c, 0x15, 0x28, 0x17, 0x04, + 0x22, 0x01, 0xcf, 0x30, 0xce, 0x30, 0xfc, 0x30, 0xd0, 0x20, 0x03, 0xaa, + 0x06, 0x5d, 0x2f, 0x48, 0x2f, 0xaf, 0x6e, 0x2f, 0xa5, 0x76, 0x28, 0x19, + 0x72, 0x81, 0x10, 0x16, 0x20, 0x7f, 0x49, 0x6c, 0xfa, 0x8b, 0x01, 0x5a, + 0x06, 0x78, 0x15, 0x83, 0x28, 0x17, 0xd5, 0x78, 0xb1, 0x84, 0xbc, 0x06, + 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x11, 0x25, 0x04, 0x30, 0x28, 0x11, 0x3e, + 0x04, 0x32, 0x28, 0x19, 0x69, 0x40, 0x05, 0xe8, 0x13, 0x10, 0x17, 0x34, + 0xff, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x20, 0x06, 0x40, 0x0e, 0x20, 0x05, + 0x03, 0x03, 0x1e, 0x0d, 0x6b, 0xc8, 0x00, 0x00, 0x00, 0x05, 0x22, 0xde, + 0x30, 0xf3, 0x30, 0x01, 0xc1, 0x30, 0xa7, 0x30, 0xb9, 0x30, 0xbf, 0x06, + 0x48, 0x1b, 0x44, 0x4d, 0x48, 0x17, 0x63, 0x00, 0x68, 0x2f, 0xb1, 0x73, + 0x00, 0x60, 0x74, 0x06, 0x08, 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0xfc, 0x66, + 0x7b, 0x5f, 0xaf, 0x10, 0x65, 0x79, 0x72, 0x06, 0x78, 0x19, 0xe8, 0xb9, + 0xb4, 0xcc, 0x0d, 0xa4, 0xc2, 0x30, 0xd1, 0x06, 0x78, 0x97, 0x0e, 0xf3, + 0x7f, 0x1c, 0x48, 0x17, 0x46, 0x47, 0x28, 0x15, 0x41, 0x04, 0x42, 0x06, + 0x28, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x51, 0x04, 0x70, 0x01, 0x03, + 0x40, 0x0a, 0xd2, 0x0c, 0xe4, 0x28, 0x17, 0x11, 0x06, 0x22, 0xdd, 0x28, + 0x0d, 0xc8, 0x30, 0xe9, 0x28, 0x1d, 0x45, 0xc9, 0x06, 0x28, 0x15, 0x00, + 0x00, 0x50, 0x2f, 0xab, 0x72, 0x28, 0x0f, 0x50, 0x6c, 0x4f, 0xb7, 0x64, + 0x10, 0x16, 0x00, 0x7f, 0xe2, 0x6c, 0x79, 0x72, 0x20, 0x70, 0x51, 0x06, + 0x78, 0x15, 0x00, 0x00, 0xec, 0xd3, 0xc0, 0x06, 0xd2, 0x9c, 0xb7, 0xdc, + 0xb4, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x20, 0x04, 0x3e, 0x28, + 0x0b, 0x42, 0x04, 0x3b, 0x04, 0x4d, 0xb2, 0x28, 0x1f, 0x34, 0x05, 0xe8, + 0x15, 0x10, 0x17, 0x14, 0xff, 0x05, 0x05, 0x70, 0x01, 0x04, 0x80, 0x40, + 0x0a, 0xee, 0x0c, 0xa0, 0xc9, 0x00, 0x00, 0x07, 0x20, 0x22, 0xbb, 0x28, + 0x11, 0xc8, 0x30, 0xfb, 0x30, 0xa2, 0x8d, 0x48, 0x19, 0xea, 0x30, 0xe5, + 0x28, 0x27, 0x05, 0xbf, 0xb0, 0x53, 0x2f, 0xaf, 0x41, 0x69, 0x2f, 0xb1, + 0x74, 0x00, 0x20, 0x00, 0x41, 0x48, 0x19, 0x50, 0x72, 0x2f, 0xb9, 0x77, + 0x10, 0x15, 0x80, 0x7f, 0x23, 0x57, 0x89, 0x5b, 0x08, 0xb7, 0x5f, 0x81, + 0x9c, 0x06, 0x78, 0x19, 0x38, 0xc1, 0x78, 0x00, 0xc7, 0xb8, 0xd2, 0x64, + 0xc5, 0xdc, 0xb4, 0xe8, 0x62, 0xb8, 0x06, 0x3b, 0x97, 0x0e, 0xf3, 0x7f, + 0x21, 0x04, 0x35, 0x28, 0x0f, 0x42, 0x08, 0x04, 0x2d, 0x00, 0x2d, 0x48, + 0x17, 0x40, 0x04, 0x4e, 0xc1, 0x05, 0xc8, 0x1b, 0x10, 0x16, 0xf4, 0xff, + 0x06, 0x06, 0x07, 0x06, 0x06, 0x40, 0x01, 0x45, 0x0a, 0x40, 0x07, 0xcc, + 0x0c, 0x63, 0x28, 0x17, 0x08, 0xc8, 0x17, 0xb3, 0x07, 0x34, 0x97, 0x6e, + 0x10, 0x15, 0xe0, 0x7f, 0x38, 0x17, 0x1c, 0x5a, 0x06, 0x78, 0x15, 0x98, + 0x17, 0xec, 0x06, 0x70, 0x7f, 0x0e, 0xf3, 0x7f, 0xd8, 0x17, 0x3d, 0x05, + 0xc8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x07, 0x07, 0x14, 0x08, 0x07, 0x07, + 0x40, 0x01, 0x0b, 0x40, 0x07, 0x1b, 0x0d, 0x50, 0x1b, 0x28, 0x17, 0x09, + 0x88, 0x17, 0xad, 0x30, 0xe3, 0x30, 0x1a, 0xb5, 0x30, 0xea, 0x06, 0x08, + 0x1d, 0xbf, 0xaf, 0x43, 0x2f, 0xbb, 0x74, 0x2a, 0x00, 0x68, 0x2f, 0xaf, + 0x72, 0x4f, 0xc3, 0x65, 0x10, 0x15, 0x20, 0x7f, 0x23, 0x01, 0x57, 0xef, + 0x51, 0x5f, 0x74, 0x33, 0x74, 0x06, 0x78, 0x19, 0x81, 0x58, 0x17, 0x90, + 0xce, 0x1c, 0xc1, 0xb0, 0xb9, 0x06, 0xfb, 0x97, 0xc4, 0x0e, 0x33, 0x7f, + 0x98, 0x17, 0x1a, 0x04, 0x4d, 0x28, 0x1f, 0x40, 0x04, 0x60, 0x38, 0x05, + 0xc8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x08, 0x09, 0x08, 0x08, 0xa2, + 0x40, 0x01, 0x06, 0x40, 0x07, 0xc9, 0x0c, 0x48, 0x28, 0x17, 0x0a, 0xa0, + 0x88, 0x17, 0xa8, 0x28, 0x13, 0xb6, 0x30, 0xd9, 0x30, 0xb9, 0x8a, 0x06, + 0xa8, 0x17, 0x45, 0x00, 0x6c, 0x2f, 0xbb, 0x7a, 0x2f, 0xc1, 0x62, 0xe0, + 0x28, 0x1b, 0x38, 0x21, 0x10, 0x15, 0x10, 0x7f, 0x23, 0x57, 0x0a, 0x4f, + 0x3d, 0x06, 0x4e, 0x8e, 0x83, 0x7d, 0x76, 0x06, 0x58, 0x19, 0x58, 0x17, + 0xd8, 0x00, 0xc5, 0xac, 0xb9, 0x90, 0xc7, 0xa0, 0xbc, 0xa4, 0x71, 0xc2, + 0x06, 0xbe, 0xaf, 0x0e, 0x33, 0x7f, 0x98, 0x17, 0x2d, 0x04, 0x3b, 0x28, + 0x13, 0x05, 0x37, 0x04, 0x30, 0x04, 0x31, 0x28, 0x2b, 0x42, 0x05, 0x68, + 0x1b, 0x82, 0x10, 0x16, 0xf4, 0xff, 0x09, 0x09, 0x0a, 0x09, 0x09, 0xa0, + 0x01, 0xcf, 0x02, 0x0c, 0xa4, 0xc8, 0x00, 0x00, 0x0b, 0x88, 0x17, 0xb8, + 0x00, 0x30, 0xa7, 0x30, 0xfc, 0x30, 0xe0, 0x30, 0xba, 0xaa, 0x06, 0xa8, + 0x17, 0x4a, 0x2f, 0xbb, 0x6d, 0x2f, 0xad, 0x73, 0x10, 0x15, 0xa0, 0x7f, + 0x23, 0x01, 0x57, 0x79, 0x8a, 0xc6, 0x59, 0xaf, 0x65, 0x06, 0x58, 0x15, + 0x87, 0x78, 0x17, 0x1c, 0xc8, 0x84, 0xc7, 0x06, 0x18, 0x13, 0x0f, 0x33, + 0x7f, 0x98, 0x17, 0x00, 0x14, 0x04, 0x36, 0x04, 0x4d, 0x04, 0x39, 0x04, + 0x18, 0x3c, 0x04, 0x41, 0x05, 0x68, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0a, + 0x0a, 0x0b, 0x28, 0x0a, 0x0a, 0x40, 0x01, 0x05, 0x40, 0x07, 0x21, 0x0d, + 0x98, 0xa0, 0x28, 0x17, 0x0c, 0x88, 0x17, 0xe1, 0x30, 0xa2, 0x30, 0xea, + 0xd1, 0x28, 0x19, 0x06, 0xbc, 0xaf, 0x4d, 0x2f, 0xbb, 0x72, 0x00, 0x79, + 0x10, 0x15, 0xc0, 0x7f, 0x03, 0x23, 0x57, 0x9b, 0x73, 0x3d, 0x4e, 0x06, + 0x78, 0x15, 0x78, 0x17, 0x0e, 0x54, 0xba, 0xac, 0xb9, 0x06, 0x58, 0x97, + 0x0e, 0xf3, 0x7f, 0x98, 0x17, 0x1c, 0x8c, 0x28, 0x15, 0x40, 0x04, 0x38, + 0x05, 0xa8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0b, 0x0b, 0x14, 0x0c, 0x0b, + 0x0b, 0x40, 0x01, 0x07, 0x40, 0x07, 0x0f, 0x0d, 0x00, 0x51, 0xc9, 0x00, + 0x00, 0x0d, 0x22, 0xc8, 0x30, 0x16, 0xec, 0x30, 0xed, 0x28, 0x0f, 0xcb, + 0x06, 0x28, 0x13, 0x3f, 0xff, 0x54, 0x8b, 0x28, 0x09, 0x65, 0x00, 0x6c, + 0x2f, 0xb5, 0x77, 0x2f, 0xb5, 0x05, 0xd8, 0x13, 0x80, 0x10, 0x0f, 0x30, + 0x7f, 0x79, 0x72, 0xcc, 0x91, 0x1b, 0x6d, 0x3c, 0x40, 0x5c, 0x06, 0x78, + 0x19, 0xb8, 0xd2, 0x10, 0xb8, 0x5c, 0xb8, 0x34, 0xc8, 0xb2, 0x06, 0x78, + 0x97, 0x0e, 0xf3, 0x7f, 0x22, 0x48, 0x0b, 0x3b, 0x04, 0x71, 0x3e, 0x28, + 0x1d, 0x05, 0xf8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0c, 0x0d, 0x0d, 0x20, + 0x01, 0x50, 0x0c, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x0c, 0x0c, 0x27, 0x0d, + 0x00, 0xc9, 0xc8, 0x00, 0x00, 0x0e, 0x22, 0xa6, 0x30, 0x00, 0xa7, 0x30, + 0xb9, 0x30, 0xc8, 0x30, 0xe2, 0x30, 0x01, 0xa2, 0x30, 0xe9, 0x30, 0xf3, + 0x30, 0xc9, 0x05, 0xe8, 0x1d, 0x51, 0x57, 0x28, 0x15, 0x73, 0x2f, 0xad, + 0x6d, 0x00, 0x6f, 0x88, 0x21, 0x10, 0x6e, 0x00, 0x64, 0x10, 0x15, 0x80, + 0x7f, 0x7f, 0x89, 0x69, 0x64, 0x20, 0x70, 0x51, 0x06, 0x78, 0x15, 0x00, + 0x00, 0xe8, 0xc6, 0xa4, 0x00, 0xc2, 0xb8, 0xd2, 0xa8, 0xba, 0xbc, 0xc5, + 0x9c, 0x18, 0xb7, 0xdc, 0xb4, 0x06, 0x1b, 0x99, 0x0e, 0xf3, 0x7f, 0x23, + 0x04, 0x4d, 0x02, 0x04, 0x41, 0x04, 0x42, 0x04, 0x3c, 0x28, 0x19, 0x40, + 0xac, 0x28, 0x1f, 0x4d, 0x28, 0x1f, 0x34, 0x05, 0xa8, 0x1f, 0x10, 0x16, + 0xf4, 0xff, 0x0d, 0x0e, 0x54, 0x0e, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x0d, + 0x20, 0x05, 0x0d, 0x0d, 0x11, 0xf4, 0x0c, 0x71, 0x28, 0x17, 0x0f, 0x22, + 0xad, 0x28, 0x0b, 0x58, 0xb0, 0x48, 0x19, 0xf3, 0x05, 0xe8, 0x11, 0x5f, + 0xff, 0x4b, 0x00, 0x69, 0xac, 0x2f, 0xa7, 0x67, 0x48, 0x1b, 0x6f, 0x2f, + 0xb1, 0x10, 0x15, 0xf0, 0x7f, 0xd1, 0x91, 0x08, 0xaf, 0x65, 0x66, 0x65, + 0x06, 0x98, 0x17, 0xb9, 0xd0, 0xa4, 0x18, 0xc2, 0x34, 0xd1, 0x06, 0x78, + 0x95, 0x0f, 0x13, 0x7f, 0x1a, 0x04, 0x38, 0xac, 0x28, 0x09, 0x33, 0x48, + 0x1b, 0x3e, 0x28, 0x13, 0x10, 0x1d, 0xf4, 0xff, 0x0e, 0x03, 0x54, 0x03, + 0x20, 0x01, 0x0e, 0x20, 0x06, 0x01, 0x20, 0x05, 0x0e, 0x0e, 0x08, 0xc3, + 0x0c, 0x67, 0xc9, 0x00, 0x3f, 0xff, 0x01, 0x0c, 0x06, 0x00, 0x0c, 0x0c, + 0x0c, 0x01, 0x01, 0x0c, 0x0c, 0x08, 0x89, 0x20, 0x05, 0x01, 0x01, 0x02, + 0x30, 0x04, 0x01, 0x02, 0x20, 0x06, 0x44, 0x02, 0x20, 0x05, 0x02, 0x02, + 0x03, 0x30, 0x04, 0x02, 0x03, 0xa1, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x03, + 0x03, 0x04, 0x04, 0x70, 0x01, 0x98, 0x50, 0x0a, 0x05, 0x05, 0x70, 0x01, + 0x50, 0x0a, 0x06, 0x06, 0x07, 0x28, 0x06, 0x06, 0x40, 0x01, 0x0a, 0x40, + 0x07, 0x07, 0x07, 0x08, 0x28, 0x07, 0x07, 0x40, 0x01, 0x0b, 0x40, 0x07, + 0x08, 0x08, 0x09, 0x28, 0x08, 0x08, 0x40, 0x01, 0x06, 0x40, 0x07, 0x09, + 0x09, 0x0a, 0x20, 0x09, 0x09, 0xa0, 0x01, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, + 0xa0, 0x40, 0x01, 0x05, 0x40, 0x07, 0x0b, 0x0b, 0x0c, 0x0b, 0x0b, 0xa9, + 0x40, 0x01, 0x07, 0x40, 0x07, 0x0c, 0x38, 0xe4, 0x0d, 0x0c, 0x20, 0x06, + 0x7c, 0x0c, 0x20, 0x05, 0x20, 0x07, 0xe8, 0xff, 0xf0, 0xf7, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x23, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x61, 0x0a, 0x91, 0xd4, 0x00, 0x00, 0x00, + 0x01, 0x23, 0xde, 0x30, 0xeb, 0x30, 0xc6, 0x00, 0x30, 0xa3, 0x30, 0xcb, + 0x30, 0xfc, 0x30, 0xaf, 0x40, 0x30, 0x06, 0x18, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x04, 0x74, 0x00, 0x69, 0x00, 0x6e, 0x20, 0x03, 0x71, + 0x00, 0x17, 0x75, 0x00, 0x65, 0x10, 0x06, 0xa0, 0x7f, 0x63, 0x21, 0x8d, + 0x06, 0xb1, 0xff, 0x06, 0x10, 0x7f, 0x00, 0x6c, 0x9a, 0xd0, 0x63, 0x3c, + 0x5c, 0x4b, 0x51, 0x80, 0x06, 0x7b, 0x1d, 0xc8, 0xb9, 0x74, 0xb9, 0xf0, + 0xd2, 0xc8, 0x18, 0xb2, 0x6c, 0xd0, 0x06, 0x5b, 0x9f, 0x0e, 0xf2, 0x7f, + 0x1c, 0x04, 0x30, 0x00, 0x04, 0x40, 0x04, 0x42, 0x04, 0x38, 0x04, 0x3d, + 0xb9, 0x20, 0x03, 0x3a, 0x20, 0x0d, 0x10, 0x0e, 0xb4, 0xff, 0x0e, 0x16, + 0x7f, 0x01, 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x38, 0x0d, 0x01, + 0x13, 0x20, 0x00, 0x00, 0x30, 0x01, 0x24, 0x14, 0x60, 0x08, 0x06, 0x70, + 0x05, 0xc0, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xd1, 0x0d, 0x81, 0xb9, + 0x00, 0x00, 0x00, 0x02, 0x24, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x30, 0x10, + 0xc8, 0x30, 0xea, 0x20, 0x03, 0xfb, 0x30, 0xd5, 0x30, 0x00, 0xa7, 0x30, + 0xc7, 0x30, 0xe9, 0x30, 0xeb, 0x30, 0x02, 0x23, 0x90, 0xa6, 0x90, 0x3a, + 0x53, 0x05, 0x18, 0x33, 0x44, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, + 0x00, 0x72, 0x80, 0x20, 0x07, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x46, + 0x08, 0x00, 0x65, 0x00, 0x64, 0x20, 0x03, 0x72, 0x00, 0x61, 0x2d, 0x00, + 0x6c, 0x05, 0xc0, 0x7f, 0x63, 0x20, 0x87, 0x30, 0x7f, 0xe9, 0x20, 0x7f, + 0x56, 0xe9, 0x05, 0x60, 0x7f, 0x4d, 0x20, 0x6d, 0x78, 0x40, 0x7b, 0x30, + 0xfb, 0x44, 0x2d, 0x00, 0x2e, 0x20, 0xff, 0x2e, 0x05, 0xa9, 0xaa, 0x91, + 0x7f, 0x65, 0x21, 0x85, 0xa6, 0x00, 0x31, 0x81, 0x65, 0x0c, 0xc1, 0xff, + 0x54, 0x80, 0x05, 0x52, 0xe7, 0x00, 0x7b, 0x7d, 0x55, 0x00, 0xba, 0xdc, + 0xc2, 0x54, 0xcf, 0x20, 0x00, 0xf0, 0x07, 0xc5, 0x29, 0xbc, 0x6c, 0xad, + 0x06, 0x1b, 0xa3, 0xb3, 0x6d, 0x33, 0x6f, 0xe0, 0x32, 0x83, 0xd3, 0x11, + 0x0c, 0xd3, 0xff, 0x24, 0x04, 0x35, 0x04, 0x34, 0x80, 0x20, 0x03, 0x40, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x00, 0x04, 0x3d, 0x04, 0x4b, 0x04, + 0x39, 0x04, 0x20, 0x08, 0x00, 0x3e, 0x04, 0x3a, 0x20, 0x13, 0x43, 0x04, + 0x33, 0x60, 0x04, 0x0d, 0x94, 0xff, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x09, + 0x09, 0x0d, 0x09, 0x02, 0x09, 0x01, 0x01, 0x08, 0x09, 0x1b, 0x20, 0x05, + 0x01, 0x40, 0x01, 0x58, 0x17, 0x03, 0x24, 0xa2, 0x30, 0xb0, 0x30, 0x50, + 0xa2, 0x28, 0x19, 0xab, 0x28, 0x19, 0xa8, 0x30, 0xf3, 0x30, 0x48, 0xc6, + 0x28, 0x25, 0xde, 0x5d, 0x05, 0x9f, 0xc3, 0x41, 0x00, 0x67, 0x2d, 0x00, + 0x75, 0x28, 0x01, 0x73, 0x27, 0x95, 0x38, 0x07, 0x69, 0x28, 0x15, 0x58, + 0x6e, 0x28, 0x27, 0x65, 0x28, 0x2d, 0x10, 0x15, 0x30, 0x7f, 0x3f, 0x96, + 0xdc, 0x00, 0x74, 0xaf, 0x65, 0x61, 0x53, 0xde, 0x8f, 0x79, 0x18, 0x72, + 0xaf, 0x65, 0x05, 0xb2, 0xf9, 0x6b, 0x17, 0xc5, 0xfc, 0xac, 0x00, 0xa4, + 0xc2, 0x7c, 0xce, 0xac, 0xb9, 0xd4, 0xc5, 0x00, 0x4c, 0xd1, 0xa4, 0xc2, + 0x20, 0x00, 0xfc, 0xc8, 0xd5, 0x05, 0xbf, 0xc1, 0x0e, 0xf3, 0x7f, 0x10, + 0x27, 0xf9, 0x43, 0x28, 0x13, 0x41, 0x28, 0x07, 0xab, 0x58, 0x19, 0x35, + 0x28, 0x1b, 0x42, 0x28, 0x2d, 0x41, 0x04, 0xe8, 0x11, 0x10, 0x17, 0x54, + 0xff, 0x48, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, + 0x00, 0x02, 0x8f, 0x0f, 0x41, 0xb7, 0x00, 0x00, 0x04, 0x02, 0x24, 0xd0, + 0x30, 0xcf, 0x30, 0xfb, 0x48, 0x15, 0xd5, 0x03, 0x30, 0xa9, 0x30, 0xeb, + 0x30, 0xcb, 0x28, 0x25, 0x05, 0xb8, 0x17, 0x51, 0x42, 0x2f, 0x95, 0x6a, + 0x2f, 0x99, 0x20, 0x00, 0x43, 0x68, 0x17, 0x56, 0x66, 0x2f, 0x39, 0x72, + 0x28, 0x1b, 0x69, 0x2f, 0xaf, 0x05, 0x50, 0x7f, 0x73, 0x8e, 0x2f, 0x31, + 0x65, 0x00, 0x2d, 0x00, 0x20, 0x81, 0x04, 0xdf, 0x2b, 0x3f, 0xff, 0x4e, + 0xd7, 0x49, 0x09, 0x5f, 0x9d, 0x6b, 0x00, 0x20, 0x7f, 0x6e, 0x05, 0x60, + 0xff, 0x06, 0x71, 0x81, 0x06, 0xf1, 0xff, 0x00, 0x0b, 0x4e, 0xa0, 0x52, + 0xcc, 0x91, 0x8f, 0x79, 0x08, 0x3c, 0x5c, 0x9a, 0x4e, 0x06, 0x18, 0x15, + 0x00, 0x00, 0x14, 0x10, 0xbc, 0x58, 0xd5, 0x38, 0x15, 0xec, 0xd3, 0x74, + 0xb9, 0x0b, 0xc8, 0xb2, 0x44, 0xc5, 0x05, 0xf8, 0x17, 0x4e, 0x8f, 0x9d, + 0x00, 0x32, 0xff, 0x45, 0xeb, 0x05, 0x43, 0xff, 0x69, 0x00, 0x78, 0xe4, + 0x01, 0xf3, 0x05, 0x84, 0x01, 0x05, 0x1d, 0x04, 0x38, 0x04, 0x36, 0x28, + 0x09, 0x4f, 0x20, 0x01, 0x10, 0x20, 0x00, 0x1a, 0x48, 0x1b, 0x38, 0x04, + 0x44, 0x04, 0x17, 0x3e, 0x04, 0x40, 0x28, 0x1f, 0x38, 0x20, 0x17, 0x0d, + 0x14, 0xff, 0x10, 0x0e, 0xb0, 0x7f, 0x00, 0x03, 0x02, 0x02, 0x11, 0x02, + 0x02, 0x03, 0x03, 0x10, 0x11, 0x02, 0x10, 0x20, 0x05, 0x03, 0x03, 0x38, + 0x17, 0x04, 0xe4, 0xad, 0x00, 0x00, 0x05, 0x00, 0x48, 0x17, 0xfb, 0x30, + 0x71, 0xb9, 0x28, 0x21, 0x05, 0x5d, 0x3b, 0x00, 0xd8, 0x17, 0x20, 0x00, + 0x53, 0x2f, 0xcd, 0x55, 0x72, 0x06, 0xa8, 0x17, 0x20, 0x27, 0xb3, 0x75, + 0x60, 0x87, 0x64, 0x04, 0x2f, 0xc1, 0x17, 0x53, 0x00, 0xfc, 0x28, 0x15, + 0x2d, 0x06, 0x88, 0x1f, 0x00, 0xf8, 0x17, 0x30, 0xff, 0x73, 0x65, 0x2f, + 0xc7, 0x04, 0x71, 0x01, 0x06, 0xf1, 0xff, 0x57, 0x53, 0x06, 0xd8, 0x19, + 0xf8, 0x17, 0x0a, 0x18, 0xc2, 0x74, 0xb9, 0x05, 0xb8, 0x1b, 0x5a, 0x2f, + 0xad, 0x69, 0xf5, 0x62, 0x81, 0x06, 0x38, 0x21, 0x00, 0xf8, 0x17, 0x33, + 0x7f, 0x6f, 0x64, 0x07, 0x6c, 0x04, 0x2f, 0xc0, 0x5e, 0x2e, 0x48, 0x15, + 0x30, 0x48, 0x15, 0x06, 0x38, 0x23, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xb0, + 0x7f, 0x04, 0x00, 0x03, 0x03, 0x1a, 0x03, 0x03, 0x04, 0x04, 0x20, 0x20, + 0x03, 0x1f, 0x20, 0x05, 0x04, 0x04, 0x2f, 0x11, 0x91, 0x00, 0xb1, 0x00, + 0x00, 0x06, 0x24, 0xab, 0x30, 0xf3, 0x03, 0x30, 0xda, 0x30, 0xc1, 0x30, + 0xa7, 0x05, 0x68, 0x07, 0xff, 0xff, 0x88, 0x3f, 0xa3, 0x6d, 0x00, 0x70, + 0x2f, 0xaf, 0x63, 0x00, 0x68, 0xc0, 0x05, 0x2f, 0x9f, 0x10, 0x0f, 0xf0, + 0x7f, 0x4e, 0x57, 0x69, 0x4f, 0x07, 0x52, 0xc0, 0x06, 0x52, 0xfb, 0x3f, + 0xff, 0x84, 0xce, 0x98, 0xd3, 0xb4, 0xcc, 0xe0, 0x05, 0xb8, 0x09, 0x0f, + 0xd3, 0x7f, 0x37, 0xfd, 0x3c, 0x04, 0x3f, 0x04, 0x35, 0x30, 0x04, 0x47, + 0x20, 0x03, 0x10, 0x1e, 0x14, 0xff, 0x05, 0x04, 0x04, 0x02, 0x01, 0x04, + 0x04, 0x05, 0x05, 0x02, 0x04, 0x07, 0x20, 0x05, 0x00, 0x05, 0x05, 0x1d, + 0x0e, 0x9f, 0xbf, 0x00, 0x00, 0x00, 0x07, 0x24, 0xc1, 0x30, 0xa2, 0x30, + 0xd1, 0x30, 0x6b, 0xb9, 0x06, 0x68, 0x15, 0x38, 0x17, 0x68, 0x4e, 0x97, + 0x70, 0x4f, 0xb7, 0x10, 0x16, 0x10, 0x7f, 0x02, 0x70, 0x60, 0x15, 0x5e, + 0xaf, 0x65, 0x06, 0x98, 0x17, 0x58, 0x01, 0xce, 0x44, 0xc5, 0x0c, 0xd3, + 0xa4, 0xc2, 0x06, 0x78, 0x19, 0x82, 0x0e, 0xf3, 0x7f, 0x27, 0x04, 0x4c, + 0x04, 0x4f, 0x28, 0x17, 0x30, 0x30, 0x04, 0x41, 0x06, 0x28, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x06, 0x05, 0x05, 0x03, 0x01, 0x05, 0x05, 0x06, 0x06, + 0x03, 0x05, 0x1e, 0x20, 0x05, 0x00, 0x06, 0x06, 0xe9, 0x0b, 0xc9, 0xbd, + 0x00, 0x00, 0x5c, 0x08, 0x28, 0x17, 0xef, 0x20, 0x01, 0x06, 0x9d, 0x2f, + 0x58, 0x17, 0x68, 0x00, 0x70, 0x75, 0x2f, 0xb7, 0x50, 0x05, 0x10, 0x15, + 0xd0, 0x7f, 0x47, 0x59, 0xe6, 0x74, 0x21, 0xe6, 0x74, 0x06, 0xb8, 0x17, + 0x40, 0xc6, 0x40, 0xc6, 0x06, 0x78, 0x15, 0x83, 0x0f, 0x13, 0x7f, 0x27, + 0x04, 0x38, 0x04, 0x43, 0x28, 0x15, 0x30, 0x03, 0x80, 0x10, 0x1e, 0x34, + 0xff, 0x07, 0x06, 0x06, 0x04, 0x06, 0x06, 0x07, 0x08, 0x07, 0x04, 0x06, + 0x1d, 0x20, 0x05, 0x07, 0x07, 0x5c, 0x00, 0x14, 0x91, 0xb4, 0x00, 0x00, + 0x09, 0x24, 0xb3, 0x00, 0x30, 0xa2, 0x30, 0xa6, 0x30, 0xa4, 0x30, 0xe9, + 0x88, 0x06, 0x68, 0x1b, 0x43, 0x00, 0x6f, 0x68, 0x11, 0x69, 0x00, 0x6c, + 0x82, 0x2f, 0xb7, 0x20, 0x00, 0x64, 0x00, 0x65, 0x20, 0x05, 0x5a, 0xab, + 0x2f, 0xc3, 0x72, 0x2f, 0xc7, 0x67, 0x20, 0x1f, 0x7a, 0x04, 0xa8, 0x2d, + 0xf0, 0x7f, 0xc0, 0x10, 0x06, 0xf0, 0xff, 0x05, 0xff, 0xb7, 0xd1, 0x79, + 0x3f, 0x96, 0xe6, 0x97, 0x20, 0xc9, 0x62, 0x06, 0x7b, 0x19, 0x54, 0xcf, + 0x44, 0xc5, 0xb0, 0x07, 0xc6, 0x7c, 0xc7, 0x7c, 0xb7, 0x06, 0x58, 0x1b, + 0x07, 0xf3, 0x7f, 0x05, 0xf3, 0xff, 0x11, 0x1a, 0x04, 0x3e, 0x48, 0x15, + 0x38, 0x04, 0x3b, 0x06, 0x48, 0x19, 0xc0, 0x0e, 0xf1, 0x7f, 0x10, 0x06, + 0xf0, 0xff, 0x08, 0x07, 0x07, 0x05, 0x07, 0x07, 0x04, 0x08, 0x08, 0x05, + 0x07, 0x0a, 0x20, 0x05, 0x08, 0x08, 0x01, 0x12, 0x12, 0x2e, 0xb8, 0x00, + 0x00, 0x0a, 0x28, 0x17, 0x1a, 0xea, 0x30, 0xde, 0x06, 0x68, 0x13, 0x78, + 0x17, 0x6c, 0x2f, 0xb1, 0x6d, 0xc0, 0x06, 0x27, 0x93, 0x10, 0x0f, 0x30, + 0x7f, 0xd1, 0x79, 0x29, 0x52, 0x6c, 0x9a, 0x81, 0x06, 0x92, 0xff, 0x5c, + 0xcf, 0xac, 0xb9, 0xc8, 0xb9, 0x06, 0x58, 0x13, 0xd6, 0x0f, 0x33, 0x7f, + 0x38, 0x17, 0x3b, 0x28, 0x15, 0x3c, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, + 0xff, 0x09, 0x00, 0x08, 0x08, 0x06, 0x08, 0x08, 0x09, 0x09, 0x06, 0x20, + 0x08, 0x0b, 0x20, 0x05, 0x09, 0x09, 0xad, 0x0d, 0x3f, 0x00, 0xb6, 0x00, + 0x00, 0x0b, 0x24, 0xc9, 0x30, 0xa5, 0x02, 0x30, 0xe9, 0x30, 0xf3, 0x30, + 0xb4, 0x06, 0x68, 0x1b, 0x44, 0xd8, 0x2f, 0xa9, 0x3f, 0x17, 0x6e, 0x4f, + 0x19, 0x10, 0x16, 0x10, 0x7f, 0x5c, 0x67, 0x70, 0x10, 0x51, 0x08, 0x62, + 0x06, 0x9b, 0x17, 0x50, 0xb4, 0x91, 0xb7, 0x30, 0xe0, 0xac, 0x06, 0x98, + 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x04, 0x43, 0x04, 0x46, 0x40, 0x28, 0x13, + 0x3d, 0x04, 0x33, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x0a, 0x1a, 0x0a, + 0x0a, 0x07, 0x20, 0x03, 0x20, 0x04, 0x05, 0x30, 0x06, 0x0a, 0x00, 0x17, + 0x11, 0x93, 0xb5, 0x00, 0x00, 0x0c, 0x24, 0x01, 0xb0, 0x30, 0xa2, 0x30, + 0xca, 0x30, 0xd5, 0x20, 0x05, 0x58, 0xc8, 0x06, 0x48, 0x19, 0x47, 0x28, + 0x17, 0x38, 0x15, 0x61, 0x00, 0x6a, 0xb0, 0x40, 0x09, 0x74, 0x05, 0xe8, + 0x1d, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0xb3, 0x7e, 0x10, 0x4e, 0x53, + 0x58, 0x06, 0x88, 0x19, 0xfc, 0xac, 0x98, 0xb0, 0x03, 0xc4, 0xd6, 0x44, + 0xc5, 0xa0, 0xd1, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x62, 0x13, 0x28, + 0x17, 0x38, 0x15, 0x30, 0x04, 0x45, 0x40, 0x09, 0x42, 0xc2, 0x05, 0xe8, + 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x0b, 0x0b, 0x0b, 0x08, 0x20, 0x03, 0x0b, + 0x10, 0x09, 0x0b, 0x04, 0x30, 0x06, 0x0b, 0xf1, 0x0e, 0x00, 0x00, 0xb8, + 0x00, 0x00, 0x0d, 0x24, 0xb2, 0x30, 0xec, 0x35, 0x30, 0xed, 0x06, 0x48, + 0x11, 0x98, 0x17, 0x65, 0x2f, 0xb1, 0x72, 0x40, 0x05, 0xc0, 0x06, 0x1f, + 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x3c, 0x68, 0xf7, 0x96, 0x57, 0x7f, 0x81, + 0x06, 0x92, 0xff, 0x8c, 0xac, 0x08, 0xb8, 0x5c, 0xb8, 0x06, 0x58, 0x13, + 0x83, 0x0f, 0x33, 0x7f, 0x13, 0x04, 0x35, 0x04, 0x40, 0x20, 0x01, 0x30, + 0x05, 0xc2, 0x05, 0xd8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x0c, 0x0c, 0x0c, + 0x09, 0x20, 0x03, 0x0c, 0x10, 0x0a, 0x0c, 0x03, 0x30, 0x06, 0x0c, 0x7a, + 0x0c, 0x3f, 0x00, 0xb9, 0x00, 0x00, 0x0e, 0x24, 0xa4, 0x30, 0xc0, 0x08, + 0x30, 0xeb, 0x30, 0xb4, 0x06, 0x88, 0x19, 0x48, 0x00, 0x69, 0x23, 0x00, + 0x64, 0x2f, 0xb1, 0x6c, 0x00, 0x67, 0x06, 0x28, 0x15, 0x10, 0x0f, 0x10, + 0x7f, 0x00, 0x0a, 0x4f, 0xbe, 0x8f, 0x14, 0x5c, 0x08, 0x62, 0x81, 0x06, + 0x7b, 0x19, 0x74, 0xc7, 0xec, 0xb2, 0xe0, 0xac, 0x06, 0x98, 0x17, 0x80, + 0x0e, 0xf3, 0x7f, 0x18, 0x04, 0x34, 0x04, 0x30, 0x04, 0x3b, 0x0c, 0x04, + 0x4c, 0x04, 0x33, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x0d, + 0x21, 0x0d, 0x0a, 0x20, 0x03, 0x0d, 0x0b, 0x0d, 0x06, 0x30, 0x06, 0x08, + 0x0d, 0x4e, 0x0e, 0xcb, 0x28, 0x17, 0x0f, 0x24, 0xcf, 0x02, 0x30, 0xea, + 0x30, 0xb9, 0x30, 0xb3, 0x06, 0x88, 0x17, 0x4a, 0x83, 0x48, 0x13, 0x69, + 0x00, 0x73, 0x00, 0x63, 0x06, 0x48, 0x17, 0x10, 0x0e, 0xf0, 0x7f, 0x00, + 0xc8, 0x54, 0x29, 0x52, 0xaf, 0x65, 0xd1, 0x79, 0x80, 0x06, 0x7b, 0x17, + 0x60, 0xd5, 0xac, 0xb9, 0xa4, 0xc2, 0x54, 0x68, 0xcf, 0x06, 0x78, 0x19, + 0x0e, 0xf3, 0x7f, 0x25, 0x48, 0x15, 0x38, 0x04, 0x41, 0x30, 0x04, 0x3a, + 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x0e, 0x0e, 0x0b, 0x84, + 0x20, 0x03, 0x0e, 0x0c, 0x0e, 0x1c, 0x30, 0x06, 0x0e, 0xb2, 0x00, 0x0e, + 0x85, 0xb6, 0x00, 0x00, 0x10, 0x24, 0xe1, 0x20, 0x30, 0xd2, 0x06, 0xa8, + 0x15, 0x00, 0x00, 0x4d, 0x00, 0xe9, 0x3b, 0x00, 0x78, 0x2f, 0xb3, 0x06, + 0x58, 0x15, 0x30, 0x7f, 0x65, 0x06, 0xe0, 0x7f, 0x07, 0x10, 0xff, 0x70, + 0x73, 0x29, 0x95, 0x06, 0x71, 0x81, 0x06, 0xf1, 0xff, 0xa8, 0x58, 0x7f, + 0x89, 0x21, 0xe5, 0x54, 0x06, 0x92, 0xff, 0x54, 0xba, 0x88, 0xd7, 0x06, + 0x98, 0x15, 0x83, 0x0f, 0x12, 0xff, 0x1c, 0x04, 0x35, 0x04, 0x45, 0x28, + 0x17, 0x06, 0x58, 0x15, 0xc2, 0x07, 0x34, 0xff, 0x10, 0x0e, 0xd0, 0x7f, + 0x0f, 0x0f, 0x0f, 0x0c, 0x20, 0x03, 0x0f, 0x40, 0x0d, 0x50, 0x06, 0x0f, + 0xb7, 0x0d, 0x21, 0xb9, 0x00, 0x00, 0x00, 0x11, 0x24, 0xdf, 0x30, 0xc1, + 0x30, 0xe7, 0x02, 0x30, 0xa2, 0x30, 0xab, 0x30, 0xf3, 0x06, 0x48, 0x1d, + 0x4d, 0xa8, 0x48, 0x13, 0x68, 0x2f, 0xab, 0x61, 0x2f, 0xb1, 0xe1, 0x00, + 0x6e, 0x08, 0x00, 0x20, 0x00, 0x64, 0x27, 0xab, 0x20, 0x00, 0x4f, 0x83, + 0x2f, 0xc1, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x04, 0xcf, 0xc7, 0x00, 0x10, + 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x10, 0x05, 0xd1, 0x7f, 0x73, 0x7c, 0x74, + 0x53, 0xaf, 0x80, 0x80, 0x06, 0x9b, 0x17, 0xf8, 0xbb, 0x08, 0xcd, 0x44, + 0xc5, 0x78, 0x75, 0xce, 0x06, 0x78, 0x19, 0x08, 0x13, 0x7f, 0x05, 0xd3, + 0xff, 0x1c, 0x28, 0x13, 0x47, 0x28, 0x13, 0x47, 0x30, 0x28, 0x19, 0x30, + 0x04, 0x3d, 0x06, 0x08, 0x1b, 0x0e, 0xf1, 0x7f, 0x10, 0x06, 0xf0, 0xff, + 0x0d, 0x10, 0x10, 0x10, 0x0e, 0x20, 0x03, 0x20, 0x04, 0x0d, 0x30, 0x06, + 0x00, 0x10, 0x02, 0x0e, 0x19, 0xb8, 0x00, 0x00, 0x12, 0x00, 0x24, 0xe2, + 0x30, 0xec, 0x30, 0xed, 0x30, 0xb9, 0xc5, 0x06, 0x48, 0x13, 0x5f, 0xaf, + 0x6f, 0x00, 0x72, 0x2f, 0xb3, 0x6c, 0x2f, 0xaf, 0x40, 0x73, 0x10, 0x16, + 0x20, 0x7f, 0xab, 0x83, 0xf7, 0x96, 0x1b, 0x6d, 0x20, 0xaf, 0x65, 0x06, + 0x78, 0x19, 0xa8, 0xba, 0x10, 0xb8, 0x5c, 0x1a, 0xb8, 0xa4, 0xc2, 0x06, + 0x98, 0x17, 0x0e, 0xd3, 0x7f, 0x1c, 0x28, 0x13, 0x40, 0x0b, 0x04, 0x35, + 0x04, 0x3b, 0x28, 0x1b, 0x41, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x0d, 0x11, 0x11, 0x11, 0x0f, 0x20, 0x03, 0x20, 0x04, 0x0e, 0x30, 0x06, + 0x00, 0x11, 0x73, 0x0d, 0x6d, 0xb9, 0x00, 0x00, 0x13, 0x00, 0x24, 0xca, + 0x30, 0xe4, 0x30, 0xea, 0x30, 0xc3, 0x2a, 0x30, 0xc8, 0x06, 0x68, 0x19, + 0x4e, 0x2f, 0xa7, 0x79, 0x2f, 0xab, 0x72, 0xa0, 0x2f, 0xb7, 0x74, 0x10, + 0x16, 0x20, 0x7f, 0xb3, 0x7e, 0x9a, 0x4e, 0xcc, 0x10, 0x91, 0x79, 0x72, + 0x06, 0x7b, 0x17, 0x98, 0xb0, 0x7c, 0xc5, 0x0c, 0xac, 0xb9, 0xb8, 0xd2, + 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x04, 0x11, 0x30, 0x04, 0x4f, + 0x28, 0x19, 0x38, 0x04, 0x42, 0x06, 0x28, 0x15, 0x86, 0x10, 0x17, 0x14, + 0xff, 0x12, 0x12, 0x12, 0x10, 0x20, 0x03, 0x20, 0x04, 0x0f, 0x80, 0x30, + 0x06, 0x12, 0x49, 0x0f, 0x68, 0xb5, 0x00, 0x00, 0x00, 0x14, 0x24, 0xcc, + 0x30, 0xa8, 0x30, 0xdc, 0x30, 0x01, 0xfb, 0x30, 0xec, 0x30, 0xaa, 0x30, + 0xf3, 0x06, 0x28, 0x1b, 0x14, 0x4e, 0x00, 0x75, 0x2f, 0xad, 0x76, 0x2f, + 0xb5, 0x20, 0x00, 0x44, 0x4c, 0x2f, 0xb7, 0xf3, 0x00, 0x6e, 0x10, 0x15, + 0xc0, 0x7f, 0xb0, 0x65, 0x08, 0xb1, 0x83, 0x02, 0x66, 0x06, 0x78, 0x15, + 0x00, 0x00, 0x04, 0x00, 0xb2, 0xd0, 0xc5, 0xf4, 0xbc, 0x08, 0xb8, 0x28, + 0x54, 0xc6, 0x06, 0x58, 0x19, 0x4e, 0x2b, 0x8f, 0x65, 0x23, 0x83, 0x77, + 0x00, 0x40, 0x2d, 0x0e, 0x43, 0x7f, 0x1d, 0x04, 0x43, 0x04, 0x4d, 0x04, + 0x00, 0x32, 0x04, 0x3e, 0x04, 0x2d, 0x00, 0x1b, 0x04, 0x58, 0x35, 0x20, + 0x07, 0x3d, 0x05, 0xc8, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x13, 0x13, 0x13, + 0x68, 0x12, 0x20, 0x03, 0x20, 0x04, 0x11, 0x30, 0x06, 0x13, 0x40, 0x12, + 0x00, 0xaa, 0xb8, 0x00, 0x00, 0x15, 0x24, 0xaa, 0x30, 0x06, 0xa2, 0x30, + 0xcf, 0x30, 0xab, 0x06, 0x28, 0x11, 0x5f, 0xff, 0x4f, 0xac, 0x2f, 0xaf, + 0x78, 0x2f, 0xb3, 0x63, 0x2f, 0xb7, 0x10, 0x16, 0x30, 0x7f, 0xe6, 0x74, + 0x08, 0xc8, 0x54, 0x61, 0x53, 0x06, 0x98, 0x17, 0x24, 0xc6, 0x45, 0x06, + 0xc5, 0xac, 0xc0, 0x74, 0xce, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1e, + 0x0b, 0x04, 0x30, 0x04, 0x45, 0x20, 0x03, 0x3a, 0x20, 0x07, 0x10, 0x1e, + 0x34, 0xff, 0x0d, 0x14, 0x14, 0x14, 0x13, 0x20, 0x03, 0x20, 0x04, 0x12, + 0x30, 0x06, 0x00, 0x14, 0x1f, 0x0c, 0x3a, 0xbb, 0x00, 0x00, 0x16, 0x00, + 0x24, 0xd7, 0x30, 0xa8, 0x30, 0xd6, 0x30, 0xe9, 0xa3, 0x06, 0x88, 0x17, + 0x50, 0x4f, 0xaf, 0x62, 0x00, 0x6c, 0x06, 0x68, 0x17, 0x10, 0x0e, 0xf0, + 0x7f, 0x00, 0x6e, 0x66, 0xc3, 0x57, 0x03, 0x5e, 0xc9, 0x62, 0x80, 0x06, + 0x7b, 0x17, 0x78, 0xd4, 0xd0, 0xc5, 0x14, 0xbe, 0x7c, 0x60, 0xb7, 0x06, + 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x43, 0x04, 0x4d, 0x0c, 0x04, + 0x31, 0x04, 0x3b, 0x06, 0x68, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x15, + 0x34, 0x15, 0x14, 0x20, 0x03, 0x20, 0x04, 0x13, 0x30, 0x06, 0x15, 0x8b, + 0x00, 0x0d, 0x2c, 0xba, 0x00, 0x00, 0x17, 0x24, 0xb1, 0x02, 0x30, 0xec, + 0x30, 0xbf, 0x30, 0xed, 0x06, 0x88, 0x17, 0x51, 0x82, 0x48, 0x17, 0x72, + 0x00, 0xe9, 0x00, 0x74, 0x2f, 0xb9, 0x72, 0x02, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x64, 0x28, 0x29, 0x20, 0x28, 0x00, 0x41, 0x20, 0x15, 0x74, 0x28, + 0x33, 0x61, 0x00, 0x67, 0xf0, 0x04, 0xaf, 0xcb, 0x00, 0x10, 0x7f, 0x06, + 0xf0, 0xff, 0x10, 0x05, 0xd1, 0x7f, 0x4b, 0x51, 0xf7, 0x96, 0x08, 0x54, + 0x58, 0x57, 0x7f, 0x06, 0x7b, 0x17, 0x00, 0xcf, 0x08, 0x07, 0xb8, 0xc0, + 0xd0, 0x5c, 0xb8, 0x06, 0x78, 0x17, 0x08, 0x13, 0x7f, 0x05, 0xd3, 0xff, + 0x05, 0x1a, 0x04, 0x35, 0x04, 0x40, 0x20, 0x03, 0x42, 0x28, 0x17, 0x1c, + 0x40, 0x04, 0x3e, 0x06, 0x08, 0x1b, 0x0e, 0xf1, 0x7f, 0x10, 0x06, 0xf0, + 0xff, 0x16, 0x16, 0x34, 0x16, 0x15, 0x20, 0x03, 0x20, 0x04, 0x08, 0x30, + 0x06, 0x16, 0xa6, 0x00, 0x0e, 0x9e, 0xb8, 0x00, 0x00, 0x18, 0x24, 0xad, + 0x22, 0x30, 0xf3, 0x28, 0x17, 0xca, 0x30, 0xfb, 0x28, 0x1b, 0xfc, 0xc5, + 0x06, 0x28, 0x1d, 0x38, 0x17, 0x69, 0x00, 0x6e, 0x48, 0x15, 0x6e, 0x2f, + 0xb3, 0x1c, 0x20, 0x00, 0x52, 0x28, 0x1b, 0x05, 0x97, 0x9d, 0x10, 0x0e, + 0xf0, 0x7f, 0xd1, 0x91, 0x00, 0x54, 0x58, 0xb3, 0x7e, 0x57, 0x7f, 0x65, + 0x59, 0x80, 0x06, 0x5b, 0x19, 0xa8, 0xd0, 0xc0, 0xd0, 0x98, 0xb0, 0x5c, + 0x18, 0xb8, 0x24, 0xc6, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1a, 0x04, + 0x38, 0x28, 0x04, 0x3d, 0x48, 0x15, 0x3d, 0x28, 0x19, 0x2d, 0x00, 0x20, + 0xe1, 0x28, 0x1b, 0x05, 0xb8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x17, 0x17, + 0x17, 0x16, 0x20, 0x03, 0xa0, 0x20, 0x04, 0x09, 0x30, 0x06, 0x17, 0x27, + 0x0d, 0x36, 0xc1, 0x04, 0x00, 0x00, 0x19, 0x24, 0xb5, 0x28, 0x17, 0xfb, + 0x30, 0x04, 0xeb, 0x30, 0xa4, 0x30, 0xb9, 0x28, 0x1b, 0xdd, 0x30, 0x14, + 0xc8, 0x30, 0xb7, 0x05, 0xc8, 0x1d, 0x53, 0x48, 0x0f, 0x20, 0x00, 0x55, + 0x4c, 0x48, 0x1f, 0x73, 0x2e, 0xad, 0x50, 0x2f, 0xb3, 0x74, 0x2f, 0xb7, + 0x10, 0x73, 0x00, 0xed, 0x10, 0x15, 0x20, 0x7f, 0x23, 0x57, 0xef, 0x8d, + 0x00, 0x13, 0x66, 0xaf, 0x65, 0xe2, 0x6c, 0x58, 0x62, 0x20, 0x7f, 0x89, + 0x06, 0x1b, 0x17, 0xb0, 0xc0, 0xe8, 0xb8, 0x74, 0x00, 0xc7, 0xa4, 0xc2, + 0xec, 0xd3, 0xa0, 0xd1, 0xdc, 0x68, 0xc2, 0x06, 0x18, 0x1b, 0x0e, 0xf3, + 0x7f, 0x21, 0x48, 0x11, 0x2d, 0x00, 0x1b, 0x2a, 0x04, 0x43, 0x28, 0x21, + 0x41, 0x28, 0x19, 0x1f, 0x28, 0x19, 0x42, 0xb0, 0x28, 0x1d, 0x41, 0x28, + 0x31, 0x10, 0x1d, 0x14, 0xff, 0x18, 0x18, 0x18, 0x17, 0xd0, 0x20, 0x03, + 0x20, 0x04, 0x15, 0x30, 0x06, 0x18, 0xc0, 0x0f, 0x31, 0x40, 0xb8, 0x2b, + 0x2d, 0x24, 0xb7, 0x30, 0xca, 0x30, 0xed, 0x38, 0x30, 0xa2, 0x05, 0xc8, + 0x0b, 0xd8, 0x17, 0x3f, 0xad, 0x61, 0x00, 0x6c, 0xa0, 0x2f, 0xa5, 0x61, + 0x10, 0x16, 0x20, 0x7f, 0x21, 0x95, 0xa3, 0x90, 0x57, 0x10, 0x7f, 0x9a, + 0x4e, 0x06, 0x72, 0xff, 0xdc, 0xc2, 0xa0, 0xb0, 0x0e, 0x5c, 0xb8, 0x44, + 0xc5, 0x06, 0x18, 0x11, 0x0f, 0x61, 0xff, 0x28, 0x0d, 0x3d, 0xac, 0x28, + 0x1b, 0x3b, 0x28, 0x0d, 0x30, 0x05, 0x28, 0x07, 0x10, 0x17, 0xf4, 0xff, + 0x19, 0x19, 0x34, 0x19, 0x18, 0x20, 0x03, 0x20, 0x04, 0x16, 0x30, 0x06, + 0x19, 0xa2, 0x00, 0x11, 0xa3, 0xb3, 0x00, 0x00, 0x1b, 0x24, 0xbd, 0x0d, + 0x30, 0xce, 0x30, 0xe9, 0x06, 0x88, 0x15, 0x3f, 0xaf, 0x6f, 0x2f, 0xaf, + 0x18, 0x6f, 0x00, 0x72, 0x06, 0x48, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x22, + 0x7d, 0xfa, 0x10, 0x8b, 0xc9, 0x62, 0x06, 0x92, 0xff, 0x8c, 0xc1, 0x78, + 0xb1, 0x35, 0x7c, 0xb7, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x21, 0x28, + 0x0f, 0x3d, 0x28, 0x13, 0x61, 0x40, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, + 0xff, 0x1a, 0x1a, 0x1a, 0x19, 0x20, 0x03, 0xa0, 0x20, 0x04, 0x17, 0x30, + 0x06, 0x1a, 0xab, 0x14, 0x18, 0xb1, 0x00, 0x00, 0x00, 0x1c, 0x24, 0xbf, + 0x30, 0xd0, 0x30, 0x15, 0xb9, 0x30, 0xb3, 0x06, 0x88, 0x19, 0x54, 0x2f, + 0xab, 0x62, 0x2f, 0xaf, 0x18, 0x73, 0x00, 0x63, 0x2f, 0xb1, 0x10, 0x16, + 0x20, 0x7f, 0x58, 0xf4, 0x5d, 0x08, 0xaf, 0x65, 0xd1, 0x79, 0x06, 0x7b, + 0x19, 0xc0, 0xd0, 0x14, 0x06, 0xbc, 0xa4, 0xc2, 0x54, 0xcf, 0x06, 0x78, + 0x19, 0x0e, 0xf3, 0x7f, 0x22, 0xa3, 0x28, 0x0f, 0x31, 0x28, 0x13, 0x41, + 0x04, 0x3a, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, 0x22, 0x1b, 0x1b, 0x50, + 0x01, 0x1a, 0x1b, 0x18, 0x40, 0x0a, 0xc9, 0x02, 0x0c, 0xee, 0xbd, 0x00, + 0x00, 0x1d, 0x28, 0x17, 0xde, 0x03, 0x30, 0xa6, 0x30, 0xea, 0x30, 0xd1, + 0x28, 0x1d, 0x06, 0x3d, 0x35, 0xa0, 0x38, 0x17, 0x6d, 0x2f, 0xab, 0x75, + 0x00, 0x6c, 0x00, 0x69, 0x30, 0x00, 0x70, 0x48, 0x21, 0x10, 0x15, 0xc0, + 0x7f, 0x58, 0xdb, 0x6b, 0x29, 0x04, 0x52, 0x15, 0x5e, 0xaf, 0x65, 0x06, + 0x5b, 0x19, 0xc0, 0xd0, 0x00, 0xc8, 0xb9, 0xb8, 0xc6, 0xac, 0xb9, 0x0c, + 0xd3, 0x3a, 0xa4, 0xc2, 0x06, 0x38, 0x1b, 0x0e, 0xf3, 0x7f, 0x38, 0x17, + 0x3c, 0x28, 0x1b, 0x43, 0x03, 0x04, 0x3b, 0x04, 0x38, 0x04, 0x3f, 0x48, + 0x21, 0x10, 0x1d, 0xb4, 0xff, 0x22, 0x1c, 0x1c, 0x50, 0x01, 0x1b, 0x1c, + 0x19, 0x40, 0x0a, 0xe0, 0x00, 0x10, 0x82, 0xb9, 0x00, 0x00, 0x1e, 0x24, + 0xc8, 0x2d, 0x30, 0xe9, 0x28, 0x11, 0xab, 0x20, 0x05, 0x06, 0x5d, 0x31, + 0x54, 0x28, 0x0f, 0x16, 0x61, 0x00, 0x78, 0x2f, 0xad, 0x61, 0x40, 0x09, + 0x10, 0x15, 0xf0, 0x7f, 0x79, 0x00, 0x72, 0xc9, 0x62, 0xaf, 0x65, 0x61, + 0x53, 0xc9, 0x40, 0x62, 0x06, 0x68, 0x17, 0xd2, 0x7d, 0xb7, 0xa4, 0xc2, + 0x7c, 0x1b, 0xce, 0x7c, 0xb7, 0x06, 0x38, 0x15, 0x0f, 0x13, 0x7f, 0x22, + 0x28, 0x0f, 0x38, 0x0b, 0x72, 0x3a, 0x28, 0x1f, 0x30, 0x09, 0x10, 0x1d, + 0xf4, 0xff, 0x1d, 0x1d, 0x50, 0x01, 0x1c, 0x20, 0x1d, 0x1a, 0x40, 0x0a, + 0xbb, 0x0d, 0x24, 0xba, 0x00, 0x08, 0x00, 0x1f, 0x24, 0xd9, 0x28, 0x17, + 0xaf, 0x30, 0xeb, 0xc1, 0x28, 0x1b, 0x06, 0x5d, 0x2f, 0x56, 0x00, 0x65, + 0x00, 0x72, 0x2f, 0xb3, 0x40, 0x63, 0x20, 0x05, 0x75, 0x00, 0x7a, 0x00, + 0x2d, 0x00, 0x5e, 0x4c, 0x48, 0x29, 0x76, 0x20, 0x17, 0x06, 0x30, 0x7f, + 0x06, 0xf0, 0xff, 0x10, 0x05, 0xf0, 0x7f, 0xe6, 0x00, 0x97, 0xc9, 0x62, + 0x4b, 0x51, 0x81, 0x9c, 0xaf, 0x40, 0x65, 0x06, 0x5b, 0x17, 0xa0, 0xbc, + 0x7c, 0xb7, 0x6c, 0xd0, 0x0e, 0xe8, 0xb8, 0xa4, 0xc2, 0x06, 0x58, 0x17, + 0x07, 0xf2, 0xff, 0x05, 0xf3, 0xff, 0x12, 0x0a, 0x04, 0x35, 0x04, 0x40, + 0x28, 0x19, 0x3a, 0x20, 0x05, 0x43, 0xe4, 0x28, 0x1f, 0x0e, 0xf4, 0xff, + 0x10, 0x0d, 0xf0, 0x7f, 0x1e, 0x1e, 0x50, 0x01, 0x1d, 0x1e, 0x40, 0x02, + 0x40, 0x0a, 0xe3, 0x0d, 0x15, 0xbb, 0x00, 0x00, 0x00, 0x20, 0x24, 0xe6, + 0x30, 0xab, 0x30, 0xbf, 0x30, 0x46, 0xf3, 0x06, 0x68, 0x15, 0x00, 0x00, + 0x59, 0x28, 0x0d, 0x3f, 0xab, 0x74, 0x0a, 0x00, 0xe1, 0x00, 0x6e, 0x0e, + 0x60, 0x7f, 0x6b, 0x40, 0xff, 0x61, 0xc0, 0x0e, 0x80, 0xff, 0x06, 0xb1, + 0xff, 0x24, 0x5c, 0x61, 0x53, 0x66, 0x57, 0xc1, 0x06, 0x72, 0xfd, 0x23, + 0x81, 0xc7, 0x74, 0xce, 0xc4, 0xd0, 0x06, 0x58, 0x13, 0xa2, 0x0f, 0x33, + 0x7f, 0x2e, 0x28, 0x11, 0x30, 0x04, 0x42, 0x28, 0x19, 0x3d, 0xe4, 0x06, + 0x08, 0x13, 0x0f, 0x74, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x1f, 0x1f, 0x50, + 0x01, 0x1e, 0x1f, 0x40, 0x20, 0x40, 0x0a, 0xe8, 0x0e, 0x46, 0xc0, 0x00, + 0x00, 0x15, 0x21, 0x24, 0xb5, 0x28, 0x17, 0xc6, 0x28, 0x1b, 0xb9, 0x06, + 0x68, 0x19, 0x6a, 0x5a, 0x4f, 0xab, 0x38, 0x17, 0x65, 0x48, 0x1f, 0x73, + 0x10, 0x15, 0xe0, 0x7f, 0x28, 0x00, 0x84, 0x61, 0x53, 0x79, 0x72, 0x61, + 0x53, 0xaf, 0x40, 0x65, 0x06, 0x5b, 0x19, 0xac, 0xc0, 0x74, 0xce, 0x4c, + 0xd1, 0x0d, 0x74, 0xce, 0xa4, 0xc2, 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, + 0x21, 0x28, 0x15, 0xac, 0x58, 0x19, 0x35, 0x48, 0x21, 0x41, 0x05, 0xe8, + 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x20, 0x20, 0x88, 0x50, 0x01, 0x1f, 0x20, + 0x14, 0x40, 0x0a, 0x33, 0x10, 0x0e, 0x40, 0xb7, 0x00, 0x3f, 0xff, 0x01, + 0x09, 0x09, 0x0d, 0x09, 0x09, 0x04, 0x01, 0x01, 0x08, 0x09, 0x1b, 0x20, + 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, + 0x02, 0x02, 0x04, 0x02, 0x03, 0x02, 0x02, 0x11, 0x20, 0x05, 0x03, 0x11, + 0x20, 0x02, 0x10, 0x20, 0x05, 0x03, 0x03, 0x04, 0x03, 0x03, 0x42, 0x1a, + 0x20, 0x05, 0x04, 0x20, 0x03, 0x1f, 0x20, 0x05, 0x04, 0x04, 0x04, 0x05, + 0x04, 0x04, 0x02, 0x20, 0x05, 0x05, 0x02, 0x20, 0x04, 0x07, 0x20, 0x05, + 0x05, 0x05, 0x06, 0x05, 0x05, 0x42, 0x03, 0x20, 0x05, 0x06, 0x03, 0x05, + 0x1e, 0x20, 0x05, 0x06, 0x04, 0x06, 0x07, 0x06, 0x06, 0x04, 0x20, 0x05, + 0x07, 0x04, 0x20, 0x06, 0x1d, 0x20, 0x05, 0x07, 0x07, 0x08, 0x07, 0x07, + 0x42, 0x05, 0x20, 0x05, 0x08, 0x05, 0x07, 0x0a, 0x20, 0x05, 0x08, 0x04, + 0x08, 0x09, 0x08, 0x08, 0x06, 0x20, 0x05, 0x09, 0x06, 0x20, 0x08, 0x0b, + 0x20, 0x05, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x68, 0x07, 0x20, 0x03, 0x20, + 0x04, 0x05, 0x30, 0x06, 0x0a, 0x0b, 0x0b, 0x21, 0x0b, 0x08, 0x20, 0x03, + 0x0b, 0x09, 0x0b, 0x04, 0x30, 0x06, 0x04, 0x0b, 0x0c, 0x0c, 0x0c, 0x09, + 0x20, 0x03, 0x0c, 0x0a, 0x20, 0x0c, 0x03, 0x30, 0x06, 0x0c, 0x0d, 0x0d, + 0x0d, 0x0a, 0x84, 0x20, 0x03, 0x0d, 0x0b, 0x0d, 0x06, 0x30, 0x06, 0x0d, + 0x0e, 0x10, 0x0e, 0x0e, 0x0b, 0x20, 0x03, 0x0e, 0x0c, 0x0e, 0x1c, 0x82, + 0x30, 0x06, 0x0e, 0x0f, 0x0f, 0x0f, 0x0c, 0x20, 0x03, 0x0f, 0x41, 0x0d, + 0x50, 0x06, 0x0f, 0x10, 0x10, 0x10, 0x0e, 0x20, 0x03, 0xa0, 0x20, 0x04, + 0x0d, 0x30, 0x06, 0x10, 0x11, 0x11, 0x11, 0x0f, 0xd0, 0x20, 0x03, 0x20, + 0x04, 0x0e, 0x30, 0x06, 0x11, 0x12, 0x12, 0x12, 0x68, 0x10, 0x20, 0x03, + 0x20, 0x04, 0x0f, 0x30, 0x06, 0x12, 0x13, 0x13, 0x68, 0x13, 0x30, 0x03, + 0x20, 0x04, 0x11, 0x30, 0x06, 0x13, 0x14, 0x14, 0x68, 0x14, 0x30, 0x03, + 0x20, 0x04, 0x12, 0x30, 0x06, 0x14, 0x15, 0x15, 0x68, 0x15, 0x30, 0x03, + 0x20, 0x04, 0x13, 0x30, 0x06, 0x15, 0x16, 0x16, 0x68, 0x16, 0x30, 0x03, + 0x20, 0x04, 0x08, 0x30, 0x06, 0x16, 0x17, 0x17, 0x68, 0x17, 0x30, 0x03, + 0x20, 0x04, 0x09, 0x30, 0x06, 0x17, 0x18, 0x18, 0x68, 0x18, 0x30, 0x03, + 0x20, 0x04, 0x15, 0x30, 0x06, 0x18, 0x19, 0x19, 0x68, 0x19, 0x30, 0x03, + 0x20, 0x04, 0x16, 0x30, 0x06, 0x19, 0x1a, 0x1a, 0x68, 0x1a, 0x30, 0x03, + 0x20, 0x04, 0x17, 0x30, 0x06, 0x1a, 0x1b, 0x1b, 0x89, 0x50, 0x01, 0x1a, + 0x1b, 0x18, 0x40, 0x0a, 0x1c, 0x1c, 0x50, 0x01, 0x12, 0x1b, 0x1c, 0x19, + 0x40, 0x0a, 0x1d, 0x1d, 0x50, 0x01, 0x1c, 0x24, 0x1d, 0x1a, 0x40, 0x0a, + 0x1e, 0x1e, 0x50, 0x01, 0x1d, 0x1e, 0x78, 0x02, 0x40, 0x0a, 0xfa, 0x1f, + 0xf2, 0x17, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x25, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xe0, 0x0b, 0xc2, 0xd3, 0x00, 0x00, 0x00, + 0x01, 0x25, 0xe2, 0x30, 0xf3, 0x30, 0xc8, 0x0c, 0x30, 0xbb, 0x30, 0xe9, + 0x20, 0x05, 0x06, 0x38, 0x21, 0x4d, 0x00, 0x00, 0x6f, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x16, 0x65, 0x00, 0x72, 0x20, 0x01, 0x61, 0x20, + 0x0b, 0x10, 0x15, 0xb0, 0x7f, 0x99, 0x00, 0x84, 0x79, 0x72, 0x5e, 0x58, + 0xc9, 0x62, 0x79, 0x40, 0x72, 0x06, 0x5b, 0x1f, 0xac, 0xba, 0xb8, 0xd2, + 0x38, 0xc1, 0x30, 0xab, 0xb7, 0x06, 0x7b, 0x9d, 0x0e, 0xf3, 0x7f, 0x1c, + 0x04, 0x3e, 0x04, 0x00, 0x3d, 0x04, 0x42, 0x04, 0x41, 0x04, 0x35, 0x04, + 0x59, 0x40, 0x20, 0x01, 0x30, 0x20, 0x0b, 0x10, 0x1d, 0xb4, 0xff, 0x01, + 0x01, 0xd0, 0x01, 0xe0, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x26, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x9a, 0x08, 0xff, 0xce, 0x00, 0x00, 0x00, + 0x01, 0x26, 0xaa, 0x30, 0xe9, 0x30, 0xf3, 0x02, 0x30, 0xc0, 0x30, 0x18, + 0x98, 0xa2, 0x20, 0x07, 0xc6, 0x04, 0x30, 0xa3, 0x30, 0xeb, 0x30, 0x05, + 0xb8, 0x29, 0x4e, 0x00, 0x04, 0x65, 0x00, 0x74, 0x00, 0x68, 0x20, 0x05, + 0x72, 0x00, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x04, + 0x73, 0x00, 0x20, 0x00, 0x41, 0x20, 0x09, 0x74, 0x00, 0x56, 0x69, 0x20, + 0x13, 0x6c, 0x20, 0x21, 0x73, 0x04, 0x88, 0xbc, 0xf0, 0x67, 0x20, 0xaa, + 0x20, 0x81, 0xe9, 0xc0, 0x8d, 0x61, 0x20, 0x85, 0x73, 0x04, 0x80, 0x83, + 0x4e, 0xb6, 0x20, 0xe3, 0x65, 0x20, 0xf3, 0x50, 0xff, 0xe4, 0x40, 0xff, + 0x30, 0x6f, 0x63, 0xd1, 0x41, 0x13, 0xf1, 0x07, 0x6e, 0x04, 0xe0, 0xff, + 0x20, 0x00, 0x4f, 0x81, 0x85, 0xb7, 0x31, 0x75, 0x69, 0x05, 0x0a, 0x34, + 0xb1, 0xe7, 0x61, 0x41, 0xf9, 0x32, 0x11, 0xb2, 0x0d, 0xe0, 0x31, 0xfd, + 0x30, 0x19, 0x04, 0x5a, 0xbf, 0x77, 0x83, 0x5e, 0x5c, 0x89, 0x01, 0x5b, + 0x84, 0x76, 0x17, 0x52, 0xaf, 0x65, 0x06, 0x3b, 0x21, 0x00, 0x24, 0xb1, + 0x5c, 0xb3, 0x80, 0xb7, 0xdc, 0xb4, 0x00, 0x39, 0xb8, 0x20, 0x00, 0x64, + 0xc5, 0xf8, 0xd2, 0x0f, 0xac, 0xb9, 0xa4, 0xc2, 0x05, 0xf3, 0x7f, 0x72, + 0x7d, 0x73, 0x7d, 0x05, 0x32, 0x77, 0xa3, 0x00, 0x13, 0x7f, 0x68, 0x61, + 0xff, 0x48, 0x00, 0x6f, 0x05, 0x61, 0xfb, 0x3d, 0x1a, 0x00, 0x1d, 0x04, + 0x38, 0x04, 0x34, 0x04, 0x35, 0x04, 0x01, 0x40, 0x04, 0x3b, 0x04, 0x30, + 0x04, 0x3d, 0x20, 0x0b, 0x10, 0x41, 0x04, 0x3a, 0x20, 0x13, 0x35, 0x04, + 0x20, 0x00, 0x51, 0x10, 0x20, 0x0f, 0x42, 0x20, 0x1f, 0x3b, 0x04, 0x4c, + 0xa0, 0x15, 0x51, 0x3e, 0x20, 0x21, 0x42, 0x20, 0x2f, 0x3e, 0x04, 0x32, + 0x20, 0x31, 0xcf, 0x0a, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, + 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xdc, 0x92, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30, 0x01, 0x27, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0xa3, 0x08, 0xa8, 0xc2, 0x00, 0x00, 0x00, 0x02, 0x27, 0xde, 0x30, + 0xca, 0x30, 0xb0, 0x10, 0x30, 0xa2, 0x30, 0x06, 0x78, 0x1d, 0x4d, 0x00, + 0x61, 0x00, 0x46, 0x6e, 0x20, 0x03, 0x67, 0x00, 0x75, 0x20, 0x09, 0x10, + 0x16, 0x10, 0x7f, 0x6c, 0x01, 0x9a, 0xa3, 0x90, 0xdc, 0x74, 0x01, 0x77, + 0x06, 0x7b, 0x1d, 0x03, 0xc8, 0xb9, 0x98, 0xb0, 0xfc, 0xac, 0x06, 0x9b, + 0x9b, 0x0e, 0xf3, 0x7f, 0x04, 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, + 0x33, 0x04, 0x60, 0x43, 0x20, 0x09, 0x10, 0x1e, 0x14, 0xff, 0x01, 0x0c, + 0x0a, 0x0a, 0x0c, 0x02, 0x0c, 0x01, 0x01, 0x0c, 0x0c, 0x08, 0x20, 0x05, + 0x01, 0x45, 0x01, 0x58, 0x17, 0x03, 0x27, 0xdc, 0x28, 0x13, 0xb3, 0x06, + 0x88, 0x15, 0x05, 0x00, 0x00, 0x42, 0x00, 0x6f, 0x28, 0x19, 0x63, 0x20, + 0x05, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x5a, 0x53, 0x3f, 0x96, 0xd1, 0x79, + 0x06, 0x98, 0x17, 0x02, 0xf4, 0xbc, 0x44, 0xc5, 0x54, 0xcf, 0x10, 0x06, + 0x93, 0x7f, 0x11, 0x2c, 0x04, 0x3e, 0x28, 0x19, 0x3a, 0x20, 0x05, 0x10, + 0x1e, 0x54, 0xff, 0x02, 0x03, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, + 0x03, 0x03, 0x80, 0x30, 0x05, 0x02, 0x02, 0xdd, 0x08, 0x15, 0xc3, 0x00, + 0x00, 0x00, 0x04, 0x27, 0xab, 0x30, 0xe9, 0x30, 0xbd, 0xab, 0x06, 0xa8, + 0x17, 0x43, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x7a, 0x06, 0x68, 0x19, 0x10, + 0x0e, 0xf0, 0x7f, 0x02, 0x61, 0x53, 0xc9, 0x62, 0x22, 0x7d, 0x06, 0x98, + 0x17, 0x74, 0x05, 0xce, 0x7c, 0xb7, 0x8c, 0xc1, 0x10, 0x06, 0x93, 0x7f, + 0x1a, 0x28, 0x15, 0x58, 0x40, 0x28, 0x19, 0x41, 0x06, 0x68, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x03, 0x04, 0x02, 0x00, 0x02, 0x04, 0x04, 0x03, 0x03, + 0x04, 0x04, 0x05, 0x80, 0x20, 0x05, 0x03, 0x03, 0x6d, 0x08, 0xb4, 0xc2, + 0x00, 0x00, 0x00, 0x05, 0x27, 0xc1, 0x30, 0xca, 0x30, 0xf3, 0x08, 0x30, + 0xc7, 0x30, 0xac, 0x06, 0x68, 0x1b, 0x43, 0x00, 0x68, 0x08, 0x00, 0x69, + 0x00, 0x6e, 0x2f, 0xb3, 0x6e, 0x00, 0x64, 0x0c, 0x00, 0x65, 0x00, 0x67, + 0x2f, 0xbd, 0x10, 0x15, 0xb0, 0x7f, 0x47, 0x59, 0x02, 0x57, 0x53, 0xb7, + 0x5f, 0xa0, 0x52, 0x06, 0x78, 0x19, 0x58, 0x01, 0xce, 0x9c, 0xb0, 0x70, + 0xb3, 0x00, 0xac, 0x06, 0x9b, 0x97, 0x82, 0x0e, 0xd3, 0x7f, 0x27, 0x04, + 0x38, 0x04, 0x3d, 0x28, 0x1b, 0x3d, 0x03, 0x04, 0x34, 0x04, 0x35, 0x04, + 0x33, 0x28, 0x25, 0x10, 0x1d, 0xd4, 0xff, 0x02, 0x04, 0x05, 0x03, 0x03, + 0x05, 0x05, 0x28, 0x15, 0x05, 0x41, 0x0f, 0x20, 0x05, 0x04, 0x04, 0xf8, + 0x08, 0x07, 0x28, 0x17, 0x50, 0x06, 0x28, 0x17, 0xe7, 0x28, 0x17, 0xbf, + 0x30, 0xec, 0x30, 0x6a, 0xb9, 0x06, 0x48, 0x19, 0x38, 0x17, 0x6f, 0x28, + 0x17, 0x74, 0x2f, 0xb7, 0x6c, 0xa0, 0x28, 0x17, 0x73, 0x10, 0x15, 0xe0, + 0x7f, 0x3c, 0x74, 0x54, 0x58, 0xb1, 0x10, 0x83, 0xaf, 0x65, 0x06, 0x78, + 0x17, 0x0c, 0xcd, 0xc8, 0xd0, 0x1c, 0x08, 0xb8, 0xa4, 0x2b, 0xa3, 0x06, + 0x9b, 0x97, 0x0e, 0xb3, 0x7f, 0x27, 0x04, 0x55, 0x3e, 0x28, 0x17, 0x42, + 0x28, 0x19, 0x3b, 0x28, 0x17, 0x41, 0x05, 0xe8, 0x15, 0x80, 0x10, 0x17, + 0x14, 0xff, 0x05, 0x06, 0x04, 0x04, 0x06, 0x06, 0x05, 0x08, 0x05, 0x06, + 0x06, 0x10, 0x20, 0x05, 0x05, 0x05, 0x97, 0x00, 0x08, 0x46, 0xc3, 0x00, + 0x00, 0x07, 0x27, 0xa8, 0x8d, 0x28, 0x0f, 0xc6, 0x30, 0xea, 0x06, 0x48, + 0x13, 0x3f, 0xff, 0x45, 0x28, 0x09, 0x44, 0x74, 0x2f, 0xa7, 0x6c, 0x00, + 0xed, 0x10, 0x16, 0x40, 0x7f, 0xc3, 0x57, 0x02, 0xaf, 0x65, 0x79, 0x72, + 0x29, 0x52, 0x06, 0x78, 0x17, 0xd0, 0x01, 0xc5, 0xa4, 0xc2, 0x54, 0xd1, + 0xac, 0xb9, 0x10, 0x06, 0x73, 0x7f, 0x51, 0x2d, 0x28, 0x0b, 0x42, 0x28, + 0x11, 0x3b, 0x04, 0x38, 0x06, 0x08, 0x13, 0x80, 0x10, 0x17, 0x34, 0xff, + 0x06, 0x07, 0x05, 0x05, 0x07, 0x07, 0x06, 0x08, 0x06, 0x07, 0x07, 0x11, + 0x20, 0x05, 0x06, 0x06, 0x4d, 0x20, 0x09, 0x99, 0x2c, 0xa3, 0x08, 0x27, + 0xb0, 0x30, 0xe9, 0x08, 0x30, 0xca, 0x30, 0xc0, 0x06, 0x88, 0x17, 0x47, + 0x00, 0x72, 0xac, 0x2f, 0xa9, 0x6e, 0x2f, 0xad, 0x64, 0x2f, 0xb1, 0x10, + 0x16, 0x10, 0x7f, 0x3c, 0x68, 0x02, 0xc9, 0x62, 0xb3, 0x7e, 0xbe, 0x8f, + 0x06, 0x78, 0x17, 0xf8, 0x01, 0xad, 0x7c, 0xb7, 0x98, 0xb0, 0xe4, 0xb2, + 0x10, 0x06, 0x73, 0x7f, 0x01, 0x13, 0x04, 0x40, 0x04, 0x30, 0x04, 0x3d, + 0x20, 0x03, 0x60, 0x34, 0x20, 0x07, 0x10, 0x1e, 0x14, 0xff, 0x07, 0x08, + 0x06, 0x06, 0x08, 0x02, 0x08, 0x07, 0x07, 0x08, 0x08, 0x04, 0x20, 0x05, + 0x07, 0x08, 0x07, 0x7c, 0x08, 0xe2, 0x28, 0x17, 0x09, 0x27, 0xd2, 0x02, + 0x30, 0xce, 0x30, 0xc6, 0x30, 0xac, 0x06, 0x88, 0x17, 0x4a, 0x2b, 0x00, + 0x69, 0x28, 0x15, 0x6f, 0x4f, 0xb3, 0x67, 0x06, 0x28, 0x19, 0x10, 0x0e, + 0xf0, 0x7f, 0x00, 0x0c, 0x5e, 0xfa, 0x8b, 0x79, 0x72, 0xa0, 0x52, 0x80, + 0x06, 0x78, 0x17, 0x88, 0xd7, 0x78, 0xb1, 0x4c, 0xd1, 0x00, 0x44, 0xac, + 0x10, 0x06, 0x73, 0x7f, 0x25, 0x04, 0x38, 0x28, 0x15, 0x3e, 0x04, 0x06, + 0x42, 0x04, 0x35, 0x04, 0x33, 0x06, 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, + 0x08, 0x00, 0x09, 0x07, 0x07, 0x09, 0x09, 0x08, 0x08, 0x09, 0x20, 0x09, + 0x0e, 0x20, 0x05, 0x08, 0x08, 0x50, 0x09, 0xd9, 0x80, 0x28, 0x17, 0x0a, + 0x27, 0xec, 0x30, 0xaa, 0x30, 0xf3, 0x8b, 0x06, 0x88, 0x15, 0x00, 0x00, + 0x4c, 0x28, 0x0f, 0xf3, 0x2f, 0xaf, 0x10, 0x16, 0x70, 0x7f, 0x0c, 0xb1, + 0x83, 0x02, 0x66, 0x06, 0x78, 0x13, 0x43, 0x97, 0xb8, 0x28, 0x6b, 0xc6, + 0x06, 0x93, 0x7d, 0x0f, 0x13, 0x7f, 0x1b, 0x28, 0x0f, 0x3e, 0x28, 0x19, + 0x10, 0x1e, 0x74, 0xff, 0x00, 0x09, 0x0a, 0x08, 0x08, 0x0a, 0x0a, 0x09, + 0x09, 0x10, 0x0a, 0x0a, 0x06, 0x20, 0x05, 0x09, 0x09, 0xd7, 0x08, 0x40, + 0x39, 0x28, 0x17, 0x0b, 0x27, 0xde, 0x30, 0xc9, 0x30, 0x14, 0xea, 0x30, + 0xb9, 0x06, 0x88, 0x19, 0x4d, 0x2f, 0xa3, 0x64, 0x00, 0x50, 0x72, 0x2f, + 0xb5, 0x7a, 0x10, 0x16, 0x40, 0x7f, 0x6c, 0x9a, 0xb7, 0x5f, 0x08, 0xcc, + 0x91, 0xaf, 0x65, 0x06, 0x78, 0x1b, 0xc8, 0xb9, 0xdc, 0x0c, 0xb4, 0xac, + 0xb9, 0xa4, 0x2b, 0xa3, 0x10, 0x06, 0x53, 0x7f, 0x1c, 0x04, 0x00, 0x30, + 0x04, 0x34, 0x04, 0x40, 0x04, 0x38, 0x04, 0x60, 0x41, 0x06, 0x48, 0x1b, + 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x0b, 0x09, 0x09, 0x0b, 0x02, 0x0b, 0x0a, + 0x0a, 0x0b, 0x0b, 0x07, 0x20, 0x05, 0x0a, 0x0a, 0x0a, 0x96, 0x09, 0x6e, + 0x28, 0x17, 0x0c, 0x28, 0x17, 0xb5, 0x35, 0x30, 0xe4, 0x06, 0x88, 0x15, + 0x58, 0x17, 0x73, 0x28, 0x1b, 0x79, 0x28, 0x1f, 0x81, 0x10, 0x16, 0x30, + 0x7f, 0x6c, 0x9a, 0x28, 0x84, 0x9a, 0x4e, 0x06, 0x78, 0x15, 0x86, 0x38, + 0x17, 0xac, 0xc0, 0x7c, 0xc5, 0x10, 0x06, 0x93, 0x7f, 0x38, 0x17, 0x41, + 0xb0, 0x28, 0x1b, 0x4f, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0b, + 0x0d, 0x0b, 0x0b, 0x50, 0x0d, 0x40, 0x03, 0x09, 0x20, 0x09, 0x0b, 0x0b, + 0x82, 0x08, 0x50, 0xc6, 0x2c, 0xa3, 0x0d, 0x28, 0x17, 0xbf, 0x30, 0xac, + 0x30, 0x1a, 0xeb, 0x30, 0xd1, 0x06, 0x68, 0x1b, 0x3f, 0xaf, 0x74, 0x2f, + 0xb3, 0x67, 0x8c, 0x2f, 0xb7, 0x6c, 0x00, 0x70, 0x06, 0x08, 0x1d, 0x10, + 0x0e, 0xf0, 0x7f, 0x6c, 0x9a, 0x00, 0x54, 0x58, 0xa0, 0x52, 0x14, 0x5c, + 0x15, 0x5e, 0x80, 0x06, 0x58, 0x1b, 0xc8, 0xb9, 0xc0, 0xd0, 0x08, 0xac, + 0x0c, 0x75, 0xd3, 0x06, 0xbb, 0x97, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x42, + 0x28, 0x1b, 0x33, 0x28, 0x1f, 0x06, 0x3b, 0x04, 0x4c, 0x04, 0x3f, 0x28, + 0x27, 0x10, 0x1d, 0xb4, 0xff, 0x0c, 0x0a, 0x0e, 0x0c, 0x0c, 0x0e, 0x40, + 0x03, 0x0a, 0x20, 0x09, 0x0c, 0x08, 0x0c, 0x2f, 0x09, 0xe8, 0x28, 0x17, + 0x0e, 0x27, 0xcc, 0x00, 0x30, 0xa8, 0x30, 0xd0, 0x30, 0xfb, 0x30, 0xbb, + 0x02, 0x30, 0xb4, 0x30, 0xd3, 0x30, 0xa2, 0x06, 0x08, 0x1d, 0x4e, 0x02, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x76, 0x2f, 0xb5, 0x20, 0x22, 0x00, 0x53, + 0x20, 0x09, 0x67, 0x00, 0x6f, 0x20, 0x0d, 0x69, 0xc0, 0x05, 0x8f, 0xbd, + 0x10, 0x0e, 0xf0, 0x7f, 0xb0, 0x65, 0x5e, 0x58, 0xe5, 0x54, 0x08, 0xf4, + 0x7e, 0x9a, 0x4e, 0x06, 0x58, 0x17, 0x04, 0xb2, 0xd0, 0x00, 0xc5, 0x14, + 0xbc, 0x38, 0xc1, 0xe0, 0xac, 0x44, 0x18, 0xbe, 0x44, 0xc5, 0x06, 0x1f, + 0xb2, 0x0e, 0xf3, 0x7f, 0x1d, 0x04, 0x43, 0x08, 0x04, 0x4d, 0x04, 0x32, + 0x28, 0x1d, 0x2d, 0x00, 0x21, 0x28, 0x04, 0x35, 0x28, 0x1f, 0x3e, 0x20, + 0x0d, 0x38, 0x04, 0x4f, 0xc1, 0x05, 0x68, 0x1d, 0x10, 0x16, 0xf4, 0xff, + 0x0d, 0x0f, 0x0d, 0x0d, 0x0f, 0x40, 0x03, 0x41, 0x0b, 0x20, 0x09, 0x0d, + 0x0d, 0xb1, 0x09, 0x81, 0x28, 0x17, 0x04, 0x0f, 0x27, 0xea, 0x30, 0xaa, + 0x28, 0x15, 0xb5, 0x30, 0x54, 0xf3, 0x28, 0x1b, 0xd5, 0x28, 0x17, 0xf3, + 0x05, 0xe8, 0x19, 0x52, 0x00, 0x62, 0xed, 0x28, 0x09, 0x38, 0x13, 0x61, + 0x00, 0x6e, 0x28, 0x1b, 0x4a, 0xe0, 0x28, 0x27, 0x30, 0x09, 0x10, 0x15, + 0x70, 0x7f, 0x23, 0x57, 0xe1, 0x80, 0x89, 0x10, 0x5b, 0xb3, 0x6c, 0x06, + 0x58, 0x15, 0x00, 0x00, 0xac, 0xb9, 0x01, 0x24, 0xc6, 0xb0, 0xc0, 0xc4, + 0xd6, 0x48, 0x06, 0x28, 0x13, 0xab, 0x0f, 0x33, 0x7f, 0x21, 0x28, 0x11, + 0x3d, 0x28, 0x13, 0x25, 0x28, 0x1f, 0x30, 0x09, 0xc5, 0x10, 0x05, 0xf1, + 0x7f, 0x10, 0x06, 0xf5, 0xff, 0x0e, 0x10, 0x10, 0x20, 0x01, 0x0e, 0x20, + 0x06, 0x40, 0x0d, 0x20, 0x05, 0x0e, 0x0e, 0xe7, 0x07, 0xb6, 0xc3, 0x11, + 0x00, 0x00, 0x10, 0x28, 0x17, 0xd0, 0x30, 0xb9, 0x05, 0xe8, 0x0b, 0xa8, + 0xd8, 0x17, 0x69, 0x4f, 0xad, 0x73, 0x10, 0x16, 0x60, 0x7f, 0xcc, 0x91, + 0xe6, 0x18, 0x74, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x38, 0x17, 0x14, 0xbc, + 0xa4, 0xc1, 0x2b, 0xa1, 0x10, 0x06, 0x73, 0x7f, 0x20, 0x04, 0x38, 0x04, + 0x32, 0x28, 0x1b, 0x62, 0x41, 0x06, 0x08, 0x11, 0x10, 0x17, 0x54, 0xff, + 0x0f, 0x11, 0x11, 0x20, 0x01, 0x0f, 0xa0, 0x20, 0x06, 0x0c, 0x20, 0x05, + 0x0f, 0x0f, 0x21, 0x08, 0xf7, 0x80, 0x24, 0x8d, 0x11, 0x27, 0x17, 0x53, + 0xa2, 0x30, 0xc8, 0x00, 0x30, 0xe9, 0x30, 0xf3, 0x30, 0xc6, 0x30, 0xa3, + 0x00, 0x30, 0xb3, 0x30, 0xea, 0x81, 0xbb, 0x6c, 0x30, 0x10, 0x57, 0xdf, + 0x57, 0x05, 0x7f, 0xb0, 0x41, 0x00, 0x74, 0x00, 0x15, 0x6c, 0x00, 0xe1, + 0x2f, 0xab, 0x74, 0x28, 0x21, 0x63, 0x4f, 0xbb, 0x54, 0x4e, 0x2f, 0xc1, + 0x72, 0x20, 0x17, 0x65, 0x05, 0x4f, 0xaf, 0x65, 0x00, 0x55, 0x67, 0x28, + 0x9b, 0xf3, 0x4f, 0xad, 0x41, 0x2f, 0xad, 0x74, 0x40, 0x0b, 0x11, 0x6f, + 0x00, 0x6d, 0x2f, 0xc1, 0x20, 0x00, 0x64, 0x20, 0x85, 0x7e, 0x6c, 0x40, + 0x19, 0x04, 0x50, 0xa7, 0x06, 0xf0, 0x7f, 0x51, 0x7f, 0x3f, 0xab, 0x91, + 0x7f, 0x53, 0xb5, 0x21, 0x79, 0x74, 0x41, 0x7f, 0x31, 0x95, 0x72, 0x29, + 0xb9, 0x6f, 0x2f, 0xcb, 0x70, 0x61, 0x21, 0xa7, 0x04, 0x11, 0x91, 0x06, + 0xf1, 0xff, 0x17, 0x53, 0x27, 0x59, 0x09, 0x7f, 0x89, 0x0b, 0x6d, 0x32, + 0xf7, 0x3a, 0x53, 0x06, 0x1f, 0xb3, 0x00, 0x81, 0xbd, 0x44, 0xc5, 0xc0, + 0xd2, 0x80, 0xb7, 0x00, 0xf0, 0xd2, 0x54, 0xcf, 0x20, 0x00, 0x90, 0xc7, + 0x0e, 0x58, 0xce, 0x6c, 0xad, 0x05, 0xbe, 0xb3, 0x06, 0xf3, 0x7f, 0x53, + 0xff, 0xe2, 0x82, 0x06, 0x83, 0xff, 0x10, 0x04, 0x42, 0x04, 0x3b, 0x28, + 0x17, 0x3d, 0x82, 0x20, 0x07, 0x38, 0x04, 0x47, 0x04, 0x35, 0x28, 0x21, + 0x3a, 0x82, 0x28, 0x2b, 0x39, 0x04, 0x20, 0x00, 0x21, 0x20, 0x0d, 0x32, + 0xaa, 0x20, 0x11, 0x40, 0x20, 0x1d, 0x4b, 0x40, 0x11, 0x30, 0x28, 0x43, + 0x42, 0x22, 0x04, 0x3e, 0x20, 0x2d, 0x3e, 0x04, 0x3c, 0x80, 0x15, 0x40, + 0xbc, 0x20, 0x35, 0x33, 0x28, 0x5f, 0x30, 0x17, 0x0a, 0x51, 0x7f, 0x10, + 0x0e, 0x90, 0x7f, 0x10, 0x01, 0x00, 0x0e, 0x0e, 0x02, 0x01, 0x10, 0x10, + 0x01, 0x01, 0x40, 0x01, 0x20, 0x05, 0x10, 0x10, 0xfa, 0x09, 0xb5, 0xc4, + 0x05, 0x00, 0x00, 0x12, 0x27, 0x57, 0x08, 0x28, 0x17, 0x53, 0x27, 0x9d, + 0x7d, 0x72, 0x05, 0x8f, 0xaf, 0x02, 0x98, 0x17, 0x03, 0x30, 0xa7, 0x06, + 0xf0, 0x7f, 0x00, 0x38, 0x17, 0x4d, 0x29, 0x91, 0xb4, 0x38, 0x0d, 0x64, + 0x04, 0xc8, 0x11, 0x07, 0x51, 0xff, 0x57, 0x06, 0xe8, 0x17, 0xa8, 0xb0, + 0xf6, 0x08, 0x18, 0x17, 0x05, 0xb3, 0x7f, 0x00, 0x38, 0x17, 0x33, 0xff, + 0x6c, 0x05, 0x6f, 0xbe, 0x00, 0xb8, 0x17, 0x2e, 0x38, 0x04, 0x36, 0x04, + 0xa8, 0x11, 0x07, 0xb1, 0x7f, 0x10, 0x0e, 0x90, 0x7f, 0x11, 0x02, 0x0f, + 0x00, 0x0f, 0x01, 0x02, 0x11, 0x11, 0x02, 0x02, 0x02, 0x83, 0x20, 0x05, + 0x11, 0x11, 0x88, 0x08, 0x72, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x00, 0x01, + 0x0c, 0x0a, 0x0a, 0x0c, 0x0c, 0x01, 0x01, 0x10, 0x0c, 0x0c, 0x08, 0x20, + 0x05, 0x01, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, + 0x03, 0x03, 0xc0, 0x30, 0x05, 0x20, 0x07, 0x04, 0x02, 0x02, 0x04, 0x04, + 0x03, 0x0c, 0x03, 0x04, 0x04, 0x05, 0x20, 0x05, 0x20, 0x07, 0x05, 0x03, + 0x13, 0x03, 0x05, 0x05, 0x20, 0x0d, 0x05, 0x0f, 0x20, 0x05, 0x20, 0x15, + 0x00, 0x06, 0x04, 0x04, 0x06, 0x06, 0x05, 0x05, 0x06, 0x30, 0x06, 0x10, + 0x20, 0x05, 0x20, 0x07, 0x07, 0x05, 0x05, 0x07, 0x03, 0x07, 0x06, 0x06, + 0x07, 0x07, 0x11, 0x20, 0x05, 0x20, 0x07, 0x00, 0x08, 0x06, 0x06, 0x08, + 0x08, 0x07, 0x07, 0x08, 0x30, 0x08, 0x04, 0x20, 0x05, 0x20, 0x07, 0x09, + 0x07, 0x07, 0x09, 0x03, 0x09, 0x08, 0x08, 0x09, 0x09, 0x0e, 0x20, 0x05, + 0x20, 0x07, 0x00, 0x0a, 0x08, 0x08, 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x30, + 0x0a, 0x06, 0x20, 0x05, 0x20, 0x07, 0x0b, 0x09, 0x09, 0x0b, 0x03, 0x0b, + 0x0a, 0x0a, 0x0b, 0x0b, 0x07, 0x20, 0x05, 0x20, 0x07, 0x0a, 0x0d, 0x0b, + 0x0b, 0x0d, 0x40, 0x03, 0x09, 0x20, 0x09, 0x0b, 0x02, 0x0b, 0x0c, 0x0e, + 0x0c, 0x0c, 0x0e, 0x40, 0x03, 0x0a, 0x80, 0x20, 0x09, 0x0c, 0x0c, 0x0d, + 0x0f, 0x0d, 0x0d, 0x0f, 0xa2, 0x40, 0x03, 0x0b, 0x20, 0x09, 0x0d, 0x0d, + 0x0e, 0x39, 0x04, 0x10, 0x51, 0x0e, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0e, + 0x0e, 0x0f, 0x30, 0xfc, 0x29, 0x11, 0x0f, 0x20, 0x06, 0x0c, 0x20, 0x05, + 0x0f, 0x0f, 0xf9, 0x2f, 0xc0, 0xf1, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, + 0x30, 0x01, 0x28, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x60, 0x06, 0x72, 0xc7, 0x00, 0x00, 0x00, + 0x02, 0x28, 0xd1, 0x30, 0xca, 0x30, 0xde, 0x41, 0x30, 0x06, 0x98, 0x1b, + 0x50, 0x00, 0x61, 0x00, 0x6e, 0x20, 0x03, 0x17, 0x6d, 0x00, 0xe1, 0x06, + 0xe0, 0x7f, 0x61, 0x0e, 0xe0, 0x7f, 0x06, 0xf1, 0x7f, 0x06, 0x51, 0xff, + 0x00, 0xf4, 0x5d, 0xff, 0x62, 0x6c, 0x9a, 0x01, 0x77, 0x81, 0x06, 0x7b, + 0x1d, 0x0c, 0xd3, 0x98, 0xb0, 0xc8, 0xb9, 0x07, 0x33, 0x7f, 0x82, 0x0e, + 0x52, 0x7f, 0x1f, 0x04, 0x30, 0x04, 0x3d, 0x20, 0x03, 0x3c, 0xe2, 0x20, + 0x07, 0x10, 0x06, 0x33, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x01, 0x09, 0x09, + 0x20, 0x01, 0x01, 0x09, 0x01, 0x08, 0x09, 0x08, 0x20, 0x05, 0x01, 0x01, + 0x58, 0x17, 0x00, 0x03, 0x28, 0xdc, 0x30, 0xab, 0x30, 0xba, 0x30, 0x04, + 0xfb, 0x30, 0xc7, 0x30, 0xeb, 0x20, 0x05, 0xc8, 0x30, 0x10, 0xfc, 0x30, + 0xed, 0x05, 0xc8, 0x25, 0x42, 0x00, 0x6f, 0x00, 0x40, 0x63, 0x28, 0x1b, + 0x73, 0x00, 0x20, 0x00, 0x64, 0x00, 0x15, 0x65, 0x00, 0x6c, 0x20, 0x07, + 0x54, 0x20, 0x13, 0x72, 0x20, 0x17, 0x80, 0x10, 0x15, 0x30, 0x7f, 0x5a, + 0x53, 0x61, 0x53, 0xaf, 0x65, 0x2d, 0x00, 0x00, 0xb7, 0x5f, 0x14, 0x5c, + 0x58, 0x62, 0x57, 0x40, 0x7f, 0x05, 0xf8, 0x21, 0xf4, 0xbc, 0x74, 0xce, + 0xa4, 0xc2, 0x03, 0x78, 0xb3, 0xa0, 0xd1, 0x5c, 0xb8, 0x06, 0x3f, 0xb9, + 0x0e, 0xf3, 0x7f, 0x04, 0x11, 0x04, 0x3e, 0x04, 0x3a, 0x28, 0x1b, 0x41, + 0x04, 0x00, 0x2d, 0x00, 0x34, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x56, 0x4c, + 0x20, 0x09, 0x22, 0x20, 0x15, 0x40, 0x20, 0x19, 0x10, 0x1d, 0x14, 0xff, + 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, + 0x00, 0xa3, 0x06, 0x83, 0xc5, 0x00, 0x00, 0x04, 0x28, 0x06, 0xc1, 0x30, + 0xea, 0x30, 0xad, 0x05, 0xc8, 0x09, 0xdf, 0xff, 0x43, 0x08, 0x00, 0x68, + 0x00, 0x69, 0x28, 0x05, 0x69, 0x00, 0x71, 0x08, 0x00, 0x75, 0x00, 0xed, + 0x10, 0x16, 0x00, 0x7f, 0x47, 0x59, 0xcc, 0x18, 0x91, 0xfa, 0x57, 0x05, + 0xf8, 0x0d, 0x9f, 0xff, 0x58, 0xce, 0xac, 0x11, 0xb9, 0xa4, 0xd0, 0x10, + 0x06, 0x93, 0x7f, 0x27, 0x04, 0x38, 0x28, 0x01, 0x5a, 0x38, 0x28, 0x1b, + 0x38, 0x05, 0x28, 0x05, 0x10, 0x18, 0x14, 0xff, 0x03, 0x38, 0x0c, 0x02, + 0x50, 0x03, 0x20, 0x06, 0x09, 0x20, 0x05, 0x03, 0x03, 0xff, 0x05, 0x40, + 0x62, 0x28, 0x17, 0x05, 0x28, 0xb3, 0x30, 0xaf, 0x30, 0x62, 0xec, 0x06, + 0xc8, 0x17, 0x3f, 0xaf, 0x6c, 0x00, 0xe9, 0x10, 0x16, 0x60, 0x7f, 0xd1, + 0x04, 0x79, 0x4b, 0x51, 0xb1, 0x83, 0x06, 0x98, 0x17, 0x54, 0xcf, 0x08, + 0x74, 0xd0, 0x08, 0xb8, 0x10, 0x06, 0x93, 0x7f, 0x1a, 0x04, 0x3e, 0x8d, + 0x28, 0x13, 0x3b, 0x04, 0x35, 0x06, 0x48, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x04, 0x38, 0x0c, 0x28, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, + 0x04, 0x0e, 0x02, 0x06, 0xda, 0xc6, 0x00, 0x00, 0x06, 0x28, 0x17, 0xed, + 0x20, 0x30, 0xf3, 0x06, 0xe8, 0x17, 0x6c, 0x00, 0xf3, 0x00, 0x6e, 0x84, + 0x10, 0x16, 0x60, 0x7f, 0xd1, 0x79, 0x86, 0x96, 0x06, 0x98, 0x15, 0x00, + 0x00, 0x1d, 0x5c, 0xcf, 0x60, 0x06, 0xa8, 0x15, 0x0f, 0x13, 0x7f, 0x38, + 0x17, 0x3b, 0x28, 0x1b, 0x69, 0x3d, 0x06, 0xa8, 0x17, 0x10, 0x16, 0xb4, + 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, + 0x05, 0x05, 0xa7, 0x06, 0x2f, 0xc7, 0x00, 0x00, 0x00, 0x07, 0x28, 0xc0, + 0x30, 0xea, 0x30, 0x40, 0xa8, 0x06, 0xa8, 0x19, 0x44, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x70, 0x69, 0x2f, 0xaf, 0x06, 0x58, 0x19, 0x10, 0x0e, 0xf0, + 0x7f, 0xbe, 0x8f, 0xde, 0x8f, 0x81, 0x06, 0xb8, 0x17, 0xe4, 0xb2, 0xac, + 0xb9, 0xd4, 0xc5, 0x06, 0x9b, 0x97, 0x80, 0x0e, 0xf3, 0x7f, 0x14, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x4c, 0x34, 0x04, 0x35, 0x06, 0x68, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x06, 0x38, 0x0c, 0x05, 0x06, 0xa0, 0x20, 0x06, 0x03, + 0x20, 0x05, 0x06, 0x06, 0xf9, 0x05, 0x6f, 0x00, 0xc8, 0x00, 0x00, 0x08, + 0x28, 0xa8, 0x30, 0xec, 0x08, 0x30, 0xfc, 0x30, 0xe9, 0x06, 0x88, 0x17, + 0x48, 0x00, 0x65, 0xa8, 0x28, 0x17, 0x72, 0x40, 0x05, 0x61, 0x10, 0x16, + 0x20, 0x7f, 0xc3, 0x57, 0xf7, 0x10, 0x96, 0xc9, 0x62, 0x06, 0x98, 0x19, + 0xd0, 0xc5, 0x08, 0xb8, 0x35, 0x7c, 0xb7, 0x06, 0x98, 0x97, 0x0e, 0xf3, + 0x7f, 0x2d, 0x28, 0x15, 0x40, 0x28, 0x15, 0x69, 0x40, 0x28, 0x1f, 0x10, + 0x1e, 0x34, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0x20, 0x06, 0x40, 0x0a, + 0x20, 0x05, 0x07, 0x07, 0xaa, 0x05, 0xce, 0xc6, 0x00, 0x00, 0x00, 0x09, + 0x28, 0xed, 0x30, 0xb9, 0x30, 0x01, 0xfb, 0x30, 0xb5, 0x30, 0xf3, 0x30, + 0xc8, 0x20, 0x09, 0x80, 0x06, 0x1f, 0xb2, 0x4c, 0x00, 0x6f, 0x00, 0x73, + 0x00, 0x20, 0x23, 0x00, 0x53, 0x2f, 0xb7, 0x6e, 0x00, 0x74, 0x40, 0x0d, + 0x10, 0x15, 0xb0, 0x7f, 0x00, 0x1b, 0x6d, 0xaf, 0x65, 0x51, 0x68, 0x58, + 0x62, 0x20, 0xaf, 0x65, 0x06, 0x58, 0x1b, 0x5c, 0xb8, 0xa4, 0xc2, 0x20, + 0x01, 0x00, 0xb0, 0xc0, 0xa0, 0xd1, 0xa4, 0xc2, 0x06, 0x3f, 0xb0, 0x80, + 0x0f, 0x01, 0xff, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x2d, 0x00, 0x46, 0x21, + 0x28, 0x17, 0x3d, 0x04, 0x42, 0x40, 0x0d, 0x10, 0x1d, 0xb4, 0xff, 0x08, + 0x58, 0x08, 0x50, 0x01, 0x07, 0x20, 0x01, 0x30, 0x0b, 0x85, 0x05, 0xe9, + 0x91, 0x28, 0x17, 0x0a, 0x28, 0x38, 0x11, 0xd6, 0x30, 0xe9, 0x28, 0x1d, + 0x08, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x1f, 0xb0, 0x4b, 0x00, 0x75, 0xab, + 0x28, 0x0f, 0x61, 0x28, 0x19, 0x59, 0x2f, 0xaf, 0x6c, 0x06, 0x0f, 0xb3, + 0x10, 0x0e, 0xf0, 0x7f, 0x04, 0x23, 0x57, 0x03, 0x5e, 0xc9, 0x28, 0x15, + 0x79, 0x72, 0x20, 0x3a, 0x53, 0x06, 0x3f, 0xb5, 0xb0, 0xc0, 0x14, 0xbe, + 0x7c, 0x43, 0xb7, 0x38, 0x1b, 0x1c, 0xc8, 0xc4, 0xb3, 0x06, 0x1f, 0xb0, + 0x5b, 0x8f, 0x11, 0x20, 0x00, 0x42, 0x43, 0x7b, 0x73, 0x00, 0x2d, 0x2f, + 0xbf, 0x45, 0x69, 0x43, 0x87, 0x6e, 0x00, 0x64, 0x2f, 0xcb, 0x6e, 0x0c, + 0xe3, 0xff, 0x14, 0x1a, 0x04, 0x43, 0x28, 0x0f, 0x30, 0x28, 0x19, 0x2f, + 0x04, 0x62, 0x3b, 0x28, 0x1b, 0x10, 0x1d, 0xf4, 0xff, 0x09, 0x07, 0x07, + 0x20, 0x01, 0x09, 0x08, 0x09, 0x09, 0x07, 0x06, 0x30, 0x05, 0x09, 0xcd, + 0x06, 0x01, 0xdb, 0xc7, 0x00, 0x00, 0x0b, 0x28, 0xd9, 0x28, 0x13, 0x18, + 0xb0, 0x30, 0xa2, 0x28, 0x17, 0x06, 0x3d, 0x2d, 0x00, 0x00, 0x56, 0xae, + 0x24, 0x87, 0x72, 0x2f, 0xab, 0x67, 0x28, 0x1f, 0x34, 0x97, 0x10, 0x15, + 0xf0, 0x7f, 0x1d, 0x00, 0x8d, 0xc9, 0x62, 0xdc, 0x74, 0xaf, 0x65, 0x01, + 0x40, 0x77, 0x06, 0x52, 0xff, 0xa0, 0xbc, 0x7c, 0xb7, 0xfc, 0xac, 0x30, + 0xa4, 0xc2, 0x06, 0x53, 0x7d, 0x0f, 0x13, 0x7f, 0x12, 0x04, 0x35, 0x04, + 0x51, 0x40, 0x28, 0x17, 0x33, 0x28, 0x1f, 0x30, 0x04, 0x41, 0x06, 0x08, + 0x17, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x0a, 0x0a, 0x70, 0x01, 0x02, 0x40, + 0x0a, 0xc2, 0x05, 0x28, 0x6a, 0xc6, 0x00, 0x3f, 0xff, 0x01, 0x38, 0x34, + 0x09, 0x01, 0x01, 0x11, 0x08, 0x09, 0x08, 0x20, 0x05, 0x01, 0x01, 0x02, + 0x30, 0x04, 0x20, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, + 0x94, 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x09, 0x20, 0x05, 0x03, 0x03, + 0x4a, 0x04, 0x30, 0x04, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, + 0x25, 0x04, 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, + 0x12, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, 0x20, 0x06, 0x03, 0x89, + 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, 0x42, + 0x0a, 0x20, 0x05, 0x07, 0x07, 0x08, 0x08, 0x50, 0x01, 0x07, 0xf8, 0x20, + 0x01, 0x30, 0x0b, 0xf8, 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x04, 0x9b, 0x00, 0x11, 0x12, 0x00, 0x00, + 0x30, 0x01, 0x29, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x09, 0xee, 0xff, 0xd6, 0x00, 0x00, 0x00, + 0x02, 0x29, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x01, 0x30, 0xe9, 0x30, 0xeb, + 0x30, 0x0c, 0x77, 0x06, 0x38, 0x21, 0x00, 0x43, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x04, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x10, 0x16, 0x20, + 0x7f, 0x2d, 0x4e, 0x18, 0x2e, 0x59, 0x01, 0x06, 0x42, 0xf9, 0x5b, 0x98, + 0x3c, 0xc1, 0xb8, 0x01, 0xd2, 0x84, 0xb7, 0x20, 0x00, 0xfc, 0xc8, 0x06, + 0x5b, 0x9f, 0x80, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x42, 0x00, 0x04, 0x40, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x45, 0x04, + 0x10, 0x1d, 0xf4, 0xff, 0x01, 0x09, 0x09, 0x20, 0x01, 0x01, 0x20, 0x06, + 0x71, 0x12, 0x20, 0x05, 0x20, 0x07, 0x48, 0x17, 0x03, 0x29, 0xa2, 0x28, + 0x11, 0x05, 0xc8, 0x30, 0xfb, 0x30, 0xd1, 0x28, 0x1b, 0xca, 0x06, 0x28, + 0x1b, 0x40, 0x41, 0x28, 0x0d, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x62, + 0x50, 0x28, 0x19, 0x38, 0x1d, 0x6e, 0x00, 0xe1, 0x10, 0x15, 0xa0, 0x7f, + 0x0a, 0x01, 0x4e, 0xf4, 0x5d, 0xc9, 0x62, 0xa3, 0x90, 0x06, 0x78, 0x1b, + 0x00, 0x4c, 0xc5, 0xa0, 0xd1, 0x0c, 0xd3, 0x7c, 0xb7, 0x34, 0x98, 0xb0, + 0x06, 0x58, 0x1b, 0x0e, 0xf3, 0x7f, 0x10, 0x48, 0x0d, 0x42, 0x04, 0x06, + 0x3e, 0x04, 0x2d, 0x00, 0x1f, 0x28, 0x1b, 0x38, 0x1f, 0x3d, 0xc8, 0x28, + 0x23, 0x10, 0x1d, 0x74, 0xff, 0x02, 0x02, 0xd0, 0x01, 0xde, 0xed, 0x02, + 0x08, 0xd9, 0x00, 0x00, 0x04, 0x28, 0x17, 0xde, 0x30, 0xf3, 0x0d, 0x30, + 0xd0, 0x30, 0xa4, 0x06, 0x28, 0x13, 0x58, 0x17, 0x6d, 0x2f, 0xa9, 0x14, + 0x6d, 0x00, 0x62, 0x2f, 0xaf, 0x79, 0x10, 0x16, 0x20, 0x7f, 0x3f, 0x96, + 0x08, 0xfc, 0x66, 0xdc, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x44, 0x01, + 0xc5, 0xd8, 0xb9, 0x14, 0xbc, 0x74, 0xc7, 0x06, 0x58, 0x15, 0x88, 0x0f, + 0x13, 0x7f, 0x10, 0x04, 0x3c, 0x28, 0x0d, 0x3c, 0x04, 0x31, 0xb2, 0x28, + 0x13, 0x39, 0x05, 0x88, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x03, 0x03, 0xd0, + 0x01, 0xa5, 0x00, 0xef, 0x2e, 0xd8, 0x00, 0x00, 0x05, 0x29, 0xab, 0x08, + 0x30, 0xa2, 0x30, 0xb0, 0x20, 0x03, 0xb9, 0x30, 0xfc, 0xa0, 0x06, 0x48, + 0x19, 0x43, 0x2f, 0xa5, 0x61, 0x00, 0x67, 0x00, 0x75, 0x88, 0x2f, 0xad, + 0x7a, 0x00, 0xfa, 0x10, 0x16, 0x00, 0x7f, 0x61, 0x53, 0xdc, 0x10, 0x74, + 0xcf, 0x82, 0x06, 0x98, 0x17, 0x74, 0xce, 0x44, 0xc5, 0x0d, 0xfc, 0xac, + 0x18, 0xc2, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x15, 0x05, + 0x30, 0x04, 0x33, 0x04, 0x43, 0x28, 0x1d, 0x41, 0x20, 0x05, 0x8a, 0x10, + 0x1d, 0xf4, 0xff, 0x04, 0x06, 0x06, 0x20, 0x01, 0x04, 0x20, 0x06, 0x08, + 0x80, 0x20, 0x05, 0x04, 0x04, 0xee, 0xed, 0xdc, 0xd7, 0x00, 0x23, 0x00, + 0x06, 0x48, 0x17, 0xb5, 0x30, 0xd1, 0x06, 0x48, 0x13, 0x98, 0x17, 0x44, + 0x7a, 0x2f, 0xb3, 0x70, 0x00, 0xe1, 0x10, 0x16, 0x20, 0x7f, 0x61, 0x53, + 0x08, 0x28, 0x84, 0x15, 0x5e, 0x06, 0xd8, 0x17, 0xac, 0xc0, 0x0c, 0x75, + 0xd3, 0x06, 0xd8, 0x17, 0x0e, 0x93, 0x7f, 0x58, 0x17, 0x41, 0x28, 0x1d, + 0x3f, 0x28, 0x21, 0x8a, 0x10, 0x1e, 0x14, 0xff, 0x05, 0x07, 0x07, 0x20, + 0x01, 0x05, 0x20, 0x06, 0x09, 0x80, 0x20, 0x05, 0x05, 0x05, 0x65, 0xed, + 0x2e, 0xd8, 0x00, 0x00, 0x00, 0x07, 0x29, 0xb3, 0x30, 0xf3, 0x30, 0xbb, + 0x03, 0x30, 0xd7, 0x30, 0xb7, 0x30, 0xaa, 0x20, 0x09, 0x06, 0x18, 0x1d, + 0x00, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x41, 0x65, 0x28, + 0x17, 0x63, 0x00, 0x69, 0x00, 0xf3, 0x20, 0x0d, 0x80, 0x10, 0x15, 0xb0, + 0x7f, 0xb7, 0x5e, 0x5e, 0x58, 0x6e, 0x66, 0x7f, 0x10, 0x89, 0xc1, 0x7f, + 0x06, 0x58, 0x1b, 0x58, 0xcf, 0x49, 0xc1, 0x0c, 0xdc, 0xc2, 0x28, 0xc6, + 0x06, 0x98, 0x17, 0x07, 0x93, 0x7f, 0xe7, 0x00, 0x62, 0xe3, 0x24, 0x0d, + 0x05, 0xf8, 0x17, 0x3e, 0x04, 0x3d, 0x28, 0x17, 0x35, 0x8c, 0x28, 0x17, + 0x41, 0x04, 0x4c, 0x40, 0x0d, 0x10, 0x1d, 0xb4, 0xff, 0x06, 0x0a, 0x54, + 0x0a, 0x20, 0x01, 0x06, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x06, 0x06, 0x01, + 0x5b, 0xef, 0x29, 0xd7, 0x00, 0x00, 0x08, 0x28, 0x17, 0x00, 0xeb, 0x30, + 0xc7, 0x30, 0xa3, 0x30, 0xea, 0x30, 0x11, 0xa7, 0x30, 0xe9, 0x06, 0x68, + 0x17, 0x72, 0x00, 0x64, 0x28, 0x11, 0x54, 0x6c, 0x20, 0x01, 0x65, 0x20, + 0x0b, 0x61, 0x10, 0x15, 0xc0, 0x7f, 0xd1, 0x79, 0x02, 0xea, 0x8f, 0xd2, + 0x52, 0xc9, 0x62, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x54, 0xcf, 0x74, + 0xb9, 0x14, 0xb5, 0x08, 0x1c, 0xc6, 0x7c, 0xb7, 0x06, 0x58, 0x19, 0x0e, + 0xf3, 0x7f, 0x38, 0x17, 0x40, 0x04, 0x05, 0x34, 0x04, 0x38, 0x04, 0x3b, + 0x28, 0x15, 0x35, 0x20, 0x0b, 0x62, 0x30, 0x06, 0x08, 0x17, 0x10, 0x16, + 0xb4, 0xff, 0x07, 0x0b, 0x0b, 0x20, 0x01, 0x07, 0xa0, 0x20, 0x06, 0x0c, + 0x20, 0x05, 0x07, 0x07, 0xf4, 0xed, 0x5d, 0x80, 0x28, 0x17, 0x09, 0x29, + 0xb0, 0x30, 0xa2, 0x30, 0xa4, 0xb1, 0x28, 0x11, 0xfc, 0x06, 0x28, 0x13, + 0x3f, 0xff, 0x47, 0x00, 0x75, 0x28, 0x09, 0x58, 0x69, 0x28, 0x1b, 0xe1, + 0x06, 0x45, 0x98, 0x10, 0x0e, 0xf0, 0x7f, 0xdc, 0x74, 0x0a, 0x40, 0x4f, + 0x06, 0x98, 0x15, 0x00, 0x00, 0xfc, 0xac, 0x74, 0xc7, 0xc5, 0x06, 0x78, + 0x13, 0x0f, 0x33, 0x7f, 0x13, 0x04, 0x43, 0x28, 0x09, 0x39, 0x06, 0x08, + 0x0f, 0x8a, 0x10, 0x17, 0x74, 0xff, 0x08, 0x0c, 0x0c, 0x20, 0x01, 0x08, + 0x20, 0x06, 0x06, 0x82, 0x20, 0x05, 0x08, 0x08, 0xb1, 0xed, 0xdf, 0x28, + 0x17, 0x0a, 0x03, 0x29, 0xa4, 0x30, 0xbf, 0x30, 0xd7, 0x28, 0x1b, 0x06, + 0x58, 0x15, 0x04, 0x00, 0x00, 0x49, 0x00, 0x74, 0x2f, 0xa1, 0x70, 0x00, + 0x60, 0xfa, 0x05, 0xef, 0xa7, 0x10, 0x0f, 0x70, 0x7f, 0x0a, 0x4f, 0x54, + 0x58, 0x6e, 0x10, 0x66, 0x3f, 0x96, 0x06, 0x78, 0x19, 0x74, 0xc7, 0xc0, + 0xd0, 0x0c, 0x78, 0xd4, 0x44, 0xc5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, + 0x18, 0x04, 0x58, 0x42, 0x28, 0x17, 0x3f, 0x48, 0x1d, 0x10, 0x1e, 0x34, + 0xff, 0x09, 0x0d, 0x0d, 0xa8, 0x20, 0x01, 0x09, 0x20, 0x06, 0x07, 0x20, + 0x05, 0x09, 0x09, 0x91, 0x00, 0xec, 0x40, 0xd8, 0x00, 0x00, 0x0b, 0x29, + 0xdf, 0x00, 0x30, 0xb7, 0x30, 0xaa, 0x30, 0xcd, 0x30, 0xb9, 0xa8, 0x06, + 0x68, 0x19, 0x4d, 0x2f, 0xab, 0x73, 0x2f, 0xaf, 0x6f, 0x00, 0x6e, 0x30, + 0x00, 0x65, 0x20, 0x09, 0x10, 0x15, 0xf0, 0x7f, 0x73, 0x7c, 0x7f, 0x89, + 0x02, 0x65, 0x59, 0x85, 0x51, 0xaf, 0x65, 0x06, 0x58, 0x19, 0xf8, 0x00, + 0xbb, 0xdc, 0xc2, 0x24, 0xc6, 0x24, 0xb1, 0xa4, 0x60, 0xc2, 0x06, 0x58, + 0x19, 0x0e, 0xf3, 0x7f, 0x1c, 0x04, 0x38, 0x04, 0x41, 0x00, 0x04, 0x4c, + 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x35, 0xc5, 0x20, 0x09, 0x10, 0x1d, 0xf4, + 0xff, 0x0a, 0x0e, 0x0e, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x40, 0x0d, 0x20, + 0x05, 0x0a, 0x0a, 0xcd, 0xec, 0x78, 0xd7, 0x00, 0x00, 0x00, 0x0c, 0x29, + 0xcb, 0x30, 0xa7, 0x30, 0x01, 0xa8, 0x30, 0xf3, 0x30, 0xd6, 0x30, 0xaf, + 0x06, 0x48, 0x19, 0x40, 0xd1, 0x28, 0x0d, 0x65, 0x00, 0x6d, 0x00, 0x62, + 0x00, 0x18, 0x75, 0x00, 0x63, 0x2f, 0xb5, 0x10, 0x15, 0xf0, 0x7f, 0x85, + 0x6d, 0x69, 0x04, 0x60, 0x03, 0x5e, 0x93, 0x5e, 0x06, 0x58, 0x15, 0x00, + 0x00, 0x00, 0x24, 0xb1, 0xe0, 0xc5, 0x80, 0xbd, 0xe0, 0xcf, 0xd0, 0x06, + 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1d, 0x28, 0x13, 0x35, 0x04, 0x4d, 0x04, + 0x01, 0x3c, 0x04, 0x31, 0x04, 0x43, 0x04, 0x3a, 0x20, 0x03, 0x8a, 0x10, + 0x1d, 0xd4, 0xff, 0x0b, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, 0x06, 0x0e, + 0x80, 0x20, 0x05, 0x0b, 0x0b, 0xcd, 0xec, 0xc2, 0xd6, 0x00, 0x00, 0x00, + 0x0d, 0x29, 0xd1, 0x30, 0xe9, 0x30, 0xb0, 0x08, 0x30, 0xa2, 0x30, 0xea, + 0x06, 0x48, 0x15, 0x00, 0x00, 0x50, 0x0b, 0x00, 0x61, 0x00, 0x72, 0x20, + 0x03, 0x67, 0x28, 0x17, 0x30, 0x09, 0x40, 0xed, 0x10, 0x15, 0xe0, 0x7f, + 0xf4, 0x5d, 0xc9, 0x62, 0xdc, 0x74, 0x20, 0xcc, 0x91, 0x06, 0x78, 0x17, + 0x0c, 0xd3, 0x7c, 0xb7, 0xfc, 0x18, 0xac, 0xac, 0xb9, 0x06, 0x78, 0x17, + 0x0e, 0xf3, 0x7f, 0x1f, 0x04, 0x30, 0x2d, 0x04, 0x40, 0x20, 0x03, 0x33, + 0x28, 0x15, 0x30, 0x09, 0x38, 0x05, 0xe8, 0x17, 0x8a, 0x10, 0x16, 0xf4, + 0xff, 0x0c, 0x10, 0x10, 0x20, 0x01, 0x0c, 0x20, 0x06, 0x0f, 0x80, 0x20, + 0x05, 0x0c, 0x0c, 0xc6, 0xed, 0x5d, 0xd7, 0x00, 0x00, 0x00, 0x0e, 0x29, + 0xd7, 0x30, 0xec, 0x30, 0xb8, 0x00, 0x30, 0xc7, 0x30, 0xf3, 0x30, 0xc6, + 0x30, 0xfb, 0x8a, 0x28, 0x1f, 0xa8, 0x30, 0xb9, 0x05, 0xc8, 0x21, 0x50, + 0x28, 0x15, 0x65, 0x02, 0x00, 0x73, 0x00, 0x69, 0x00, 0x64, 0x2f, 0xb9, + 0x6e, 0x22, 0x00, 0x74, 0x2f, 0xbf, 0x20, 0x00, 0x48, 0x28, 0x2d, 0x79, + 0xc0, 0x40, 0x17, 0x10, 0x14, 0xf0, 0x7f, 0x3f, 0x96, 0x36, 0x80, 0xaf, + 0x65, 0x08, 0x3b, 0x60, 0xdf, 0x7e, 0x06, 0x58, 0x19, 0x04, 0xd5, 0x08, + 0x00, 0xb8, 0xdc, 0xc2, 0x74, 0xb3, 0x4c, 0xd1, 0x44, 0x06, 0xc5, 0x08, + 0xc6, 0xa4, 0xc2, 0x05, 0xf8, 0x1f, 0x0e, 0xf3, 0x7f, 0x1f, 0x8a, 0x28, + 0x15, 0x35, 0x04, 0x41, 0x28, 0x0f, 0x34, 0x20, 0x07, 0x3d, 0x23, 0x04, + 0x42, 0x20, 0x0d, 0x2d, 0x00, 0x10, 0x40, 0x13, 0x10, 0x1d, 0x34, 0xff, + 0x15, 0x0d, 0x11, 0x11, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x10, 0x20, 0x05, + 0x00, 0x0d, 0x0d, 0x4a, 0xef, 0x2a, 0xd6, 0x00, 0x00, 0x10, 0x0f, 0x29, + 0xb5, 0x28, 0x11, 0xfb, 0x30, 0xda, 0x30, 0x1a, 0xc9, 0x30, 0xed, 0x05, + 0xc8, 0x0f, 0x7f, 0xff, 0x53, 0x2f, 0xaf, 0x6e, 0xaa, 0x28, 0x09, 0x50, + 0x28, 0x1d, 0x64, 0x2f, 0xb9, 0x6f, 0x10, 0x15, 0xe0, 0x7f, 0x23, 0x01, + 0x57, 0x69, 0x4f, 0xb7, 0x5f, 0x57, 0x7f, 0x06, 0x58, 0x15, 0x00, 0x00, + 0x00, 0xb0, 0xc0, 0x98, 0xd3, 0xdc, 0xb4, 0x31, 0x5c, 0xb8, 0x05, 0xf8, + 0x0f, 0x0f, 0x73, 0x7f, 0x21, 0x04, 0x30, 0x28, 0x0d, 0x51, 0x2d, 0x28, + 0x1f, 0x35, 0x28, 0x19, 0x40, 0x04, 0x3e, 0x05, 0x48, 0x0d, 0x8a, 0x10, + 0x17, 0x94, 0xff, 0x0e, 0x12, 0x12, 0x20, 0x01, 0x0e, 0x20, 0x06, 0x11, + 0x80, 0x20, 0x05, 0x0e, 0x0e, 0xdd, 0xee, 0x69, 0xd7, 0x00, 0x02, 0x00, + 0x10, 0x29, 0xab, 0x30, 0xcb, 0x28, 0x19, 0xc7, 0x0a, 0x30, 0xb8, 0x30, + 0xe5, 0x06, 0x48, 0x17, 0x43, 0x48, 0x17, 0x69, 0xc4, 0x2f, 0xa9, 0x3f, + 0xaf, 0x79, 0x00, 0xfa, 0x10, 0x15, 0xe0, 0x7f, 0x61, 0x53, 0x02, 0x81, + 0x5b, 0xea, 0x8f, 0x24, 0x5c, 0x06, 0x78, 0x17, 0x74, 0x01, 0xce, 0x28, + 0xb1, 0x14, 0xb5, 0x20, 0xc7, 0x06, 0x78, 0x17, 0xa8, 0x0e, 0xf3, 0x7f, + 0x1a, 0x48, 0x17, 0x35, 0x28, 0x1b, 0x34, 0x04, 0x38, 0x31, 0x04, 0x4e, + 0x05, 0xe8, 0x15, 0x10, 0x17, 0x14, 0xff, 0x0f, 0x08, 0x08, 0x20, 0x01, + 0x50, 0x0f, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x0f, 0x0f, 0xe6, 0xee, 0x00, + 0x5a, 0xd9, 0x00, 0x00, 0x11, 0x29, 0xa2, 0x30, 0x44, 0xb9, 0x28, 0x17, + 0xb7, 0x30, 0xaa, 0x28, 0x1d, 0x02, 0x5e, 0x82, 0x06, 0x1d, 0x33, 0x41, + 0x00, 0x73, 0x00, 0x75, 0x2f, 0xb1, 0x63, 0xb0, 0x28, 0x1b, 0xf3, 0x2f, + 0xb9, 0x0e, 0xf0, 0x7f, 0x20, 0x00, 0x44, 0x00, 0x50, 0x2e, 0x29, 0x2d, + 0x2e, 0x10, 0x05, 0x61, 0x7f, 0x9a, 0x4e, 0x7e, 0x67, 0x00, 0xee, 0x68, + 0x96, 0x99, 0xfd, 0x90, 0x79, 0x72, 0x08, 0x2b, 0x52, 0x3a, 0x53, 0x05, + 0xff, 0xb3, 0x44, 0xc5, 0x1c, 0x07, 0xc2, 0xdc, 0xc2, 0x28, 0xc6, 0x06, + 0x58, 0x95, 0x07, 0x53, 0x7f, 0x54, 0x01, 0x18, 0xe7, 0x00, 0xe3, 0x06, + 0x0f, 0x2d, 0x2d, 0x19, 0x04, 0x41, 0x04, 0x41, 0x43, 0x28, 0x19, 0x41, + 0x04, 0x4c, 0x04, 0x3e, 0x28, 0x21, 0xc5, 0x10, 0x06, 0xf4, 0xff, 0x10, + 0x05, 0xf6, 0x7f, 0x10, 0x04, 0x04, 0x20, 0x01, 0x10, 0x40, 0x06, 0x00, + 0x10, 0x10, 0x10, 0x10, 0x09, 0xee, 0xff, 0xd6, 0x10, 0x00, 0x00, 0x12, + 0x28, 0x17, 0xeb, 0x30, 0xc8, 0x30, 0x00, 0xfb, 0x30, 0xd1, 0x30, 0xe9, + 0x30, 0xb0, 0x30, 0x04, 0xa2, 0x30, 0xa4, 0x30, 0x0c, 0x05, 0xcd, 0x39, + 0x41, 0x00, 0x11, 0x6c, 0x00, 0x74, 0x24, 0x0f, 0x20, 0x00, 0x50, 0x2f, + 0xb9, 0x56, 0x72, 0x2f, 0xbd, 0x67, 0x28, 0x27, 0x61, 0x2f, 0xb9, 0x10, + 0x15, 0x50, 0x7f, 0x0a, 0x00, 0x4e, 0xf4, 0x5d, 0xc9, 0x62, 0x2d, 0x57, + 0x01, 0xc0, 0x05, 0xc2, 0xf5, 0x9f, 0xff, 0x4c, 0xc5, 0xa0, 0xd1, 0x0c, + 0xd3, 0x00, 0x7c, 0xb7, 0xfc, 0xac, 0x74, 0xc7, 0x20, 0x00, 0x35, 0xfc, + 0xc8, 0x06, 0x1b, 0x97, 0x08, 0x53, 0x7f, 0x69, 0x05, 0x88, 0x17, 0x3b, + 0x28, 0x11, 0x40, 0x42, 0x28, 0x13, 0x2d, 0x00, 0x1f, 0x04, 0x30, 0x04, + 0x45, 0x40, 0x20, 0x03, 0x33, 0x04, 0x32, 0x20, 0x09, 0x39, 0x05, 0x48, + 0x23, 0x8a, 0x10, 0x16, 0xf4, 0xff, 0x11, 0x01, 0x01, 0x20, 0x01, 0x11, + 0x40, 0x06, 0x11, 0x02, 0x11, 0x11, 0x11, 0x0b, 0xf1, 0xd4, 0x28, 0x17, + 0x13, 0x00, 0x29, 0xdc, 0x30, 0xb1, 0x30, 0xed, 0x30, 0xf3, 0xd5, 0x05, + 0xe8, 0x0d, 0x9f, 0xff, 0x42, 0x2c, 0x23, 0x71, 0x2f, 0xb1, 0x65, 0x28, + 0x13, 0xc0, 0x06, 0x3f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x5a, 0x53, 0x4b, + 0x51, 0x99, 0x9f, 0x80, 0x06, 0x78, 0x15, 0x00, 0x00, 0xf4, 0xbc, 0x00, + 0xcf, 0x60, 0x68, 0xb8, 0x06, 0x38, 0x11, 0x0f, 0x53, 0x7f, 0x11, 0x28, + 0x11, 0x3a, 0x04, 0x35, 0x8c, 0x28, 0x0f, 0x3e, 0x04, 0x3d, 0x05, 0x48, + 0x09, 0x10, 0x17, 0xd4, 0xff, 0x12, 0x05, 0x50, 0x05, 0x20, 0x01, 0x12, + 0x40, 0x06, 0x12, 0x12, 0x12, 0x12, 0x08, 0x1c, 0xf0, 0x50, 0xd5, 0x00, + 0x3f, 0xff, 0x01, 0x09, 0x09, 0xa8, 0x20, 0x01, 0x01, 0x20, 0x06, 0x12, + 0x20, 0x05, 0x01, 0x01, 0x02, 0x48, 0x02, 0xd0, 0x01, 0x03, 0x03, 0xd0, + 0x01, 0x04, 0x06, 0x06, 0xa8, 0x20, 0x01, 0x04, 0x20, 0x06, 0x08, 0x20, + 0x05, 0x04, 0x04, 0x05, 0x2a, 0x07, 0x07, 0x20, 0x01, 0x05, 0x20, 0x06, + 0x09, 0x20, 0x05, 0x05, 0x0a, 0x05, 0x06, 0x0a, 0x0a, 0x20, 0x01, 0x06, + 0x20, 0x06, 0x0b, 0x82, 0x20, 0x05, 0x06, 0x06, 0x07, 0x0b, 0x0b, 0x20, + 0x01, 0x07, 0xa0, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x07, 0x07, 0x08, 0x0c, + 0x0c, 0xa8, 0x20, 0x01, 0x08, 0x20, 0x06, 0x06, 0x20, 0x05, 0x08, 0x08, + 0x09, 0x2a, 0x0d, 0x0d, 0x20, 0x01, 0x09, 0x20, 0x06, 0x07, 0x20, 0x05, + 0x09, 0x0a, 0x09, 0x0a, 0x0e, 0x0e, 0x20, 0x01, 0x0a, 0x20, 0x06, 0x0d, + 0xca, 0x20, 0x05, 0x20, 0x45, 0x0f, 0x0f, 0x20, 0x01, 0x0b, 0x20, 0x06, + 0x0e, 0xca, 0x20, 0x05, 0x20, 0x45, 0x10, 0x10, 0x20, 0x01, 0x0c, 0x20, + 0x06, 0x0f, 0x89, 0x20, 0x05, 0x0c, 0x0c, 0x0d, 0x38, 0xf4, 0x11, 0x0d, + 0x20, 0x06, 0x44, 0x10, 0x20, 0x05, 0x0d, 0x0d, 0x0e, 0x30, 0xec, 0x12, + 0x0e, 0xa2, 0x20, 0x06, 0x11, 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x30, 0x64, + 0x08, 0x51, 0x0f, 0x20, 0x06, 0x0a, 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x30, + 0xb4, 0x3e, 0x04, 0x10, 0x40, 0x06, 0x30, 0x4a, 0xf9, 0x3f, 0xf1, 0x37, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x1c, 0xd4, 0x00, 0x11, 0x19, 0x00, 0x00, 0x30, 0x01, 0x2a, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x6f, 0xf7, 0x36, 0xc9, 0x00, 0x01, 0x00, 0x02, 0x2a, 0xea, 0x30, + 0xde, 0x30, 0x06, 0xb8, 0x19, 0x01, 0x4c, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x06, 0x88, 0x9c, 0x01, 0x50, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x76, + 0x20, 0x85, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x65, 0x00, 0x20, 0x00, 0x71, + 0x64, 0x40, 0x05, 0x05, 0x70, 0x97, 0x70, 0xff, 0x20, 0x00, 0x4d, 0x20, + 0x7d, 0x55, 0x74, 0x40, 0x8d, 0x70, 0x20, 0x91, 0x6c, 0x21, 0x17, 0x74, + 0x21, 0x17, 0x70, 0x6e, 0x04, 0xe1, 0x1b, 0x06, 0xf1, 0x7f, 0x06, 0xf1, + 0xff, 0x29, 0x52, 0x6c, 0x9a, 0x21, 0x01, 0x77, 0x06, 0x9b, 0x1b, 0xac, + 0xb9, 0xc8, 0xb9, 0x0e, 0xb3, 0x7f, 0x80, 0x06, 0xf3, 0xff, 0x1b, 0x04, + 0x38, 0x04, 0x3c, 0x04, 0x30, 0x60, 0x04, 0x10, 0x06, 0x71, 0x7f, 0x10, + 0x06, 0xf0, 0xff, 0x01, 0x0f, 0x14, 0x0f, 0x0f, 0x02, 0x0f, 0x01, 0x01, + 0x0f, 0x0f, 0x0c, 0x20, 0x05, 0x01, 0x44, 0x01, 0x58, 0x17, 0x03, 0x2a, + 0xa2, 0x28, 0x17, 0xbd, 0x30, 0x15, 0xca, 0x30, 0xb9, 0x06, 0x68, 0x1d, + 0x41, 0x48, 0x15, 0x7a, 0x27, 0x9b, 0xac, 0x37, 0x01, 0x73, 0x06, 0xc0, + 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0x9a, 0x4e, 0x08, 0x6c, + 0x9a, 0x59, 0x5b, 0x06, 0x98, 0x19, 0x44, 0xc5, 0xc8, 0x01, 0xb9, 0x8c, + 0xc1, 0x98, 0xb0, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0xa0, 0x06, 0x33, 0xff, + 0x10, 0x48, 0x15, 0x41, 0x04, 0x3e, 0x04, 0x3d, 0xe9, 0x40, 0x07, 0x10, + 0x0d, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, + 0x06, 0x00, 0x02, 0x02, 0x02, 0x02, 0x95, 0xfb, 0xa4, 0xc8, 0x10, 0x00, + 0x00, 0x04, 0x28, 0x17, 0xf3, 0x30, 0xab, 0x30, 0x05, 0xc3, 0x30, 0xb7, + 0x30, 0xe5, 0x06, 0x48, 0x19, 0x41, 0x4f, 0xa7, 0xb0, 0x38, 0x11, 0x68, + 0x06, 0x68, 0x97, 0x10, 0x0e, 0xd0, 0x7f, 0x89, 0x5b, 0x61, 0x53, 0x20, + 0xc0, 0x4e, 0x06, 0x98, 0x17, 0x59, 0xc5, 0x74, 0xce, 0xdc, 0xd5, 0x06, + 0x68, 0x13, 0x0f, 0x33, 0x7f, 0x10, 0x28, 0x0f, 0x3a, 0x28, 0x19, 0x48, + 0x06, 0x08, 0x11, 0xa4, 0x10, 0x17, 0x54, 0xff, 0x03, 0x38, 0x0c, 0x02, + 0x03, 0x40, 0x06, 0x03, 0x03, 0x05, 0x03, 0x03, 0x39, 0xf9, 0xde, 0x28, + 0x17, 0x05, 0x28, 0x17, 0x05, 0xd7, 0x30, 0xea, 0x30, 0xde, 0x28, 0x19, + 0xaf, 0x06, 0x68, 0x17, 0x01, 0x70, 0x00, 0x75, 0x00, 0x72, 0x00, 0xed, + 0x4f, 0xb7, 0x40, 0x63, 0x10, 0x16, 0x00, 0x7f, 0x3f, 0x96, 0x6e, 0x66, + 0xcc, 0x91, 0x08, 0x6c, 0x9a, 0x4b, 0x51, 0x06, 0x58, 0x1b, 0x44, 0xc5, + 0x78, 0x06, 0xd4, 0xac, 0xb9, 0xc9, 0xb9, 0x06, 0x98, 0x17, 0x0e, 0xd3, + 0x7f, 0x10, 0x00, 0x04, 0x3f, 0x04, 0x43, 0x04, 0x40, 0x04, 0x38, 0x2d, + 0x04, 0x3c, 0x28, 0x1d, 0x3a, 0x06, 0x08, 0x1d, 0x10, 0x16, 0xf4, 0xff, + 0x04, 0x38, 0x0c, 0x20, 0x03, 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, + 0x4f, 0x02, 0xf6, 0x2d, 0xcc, 0x00, 0x00, 0x06, 0x28, 0x17, 0xec, 0x0c, + 0x30, 0xad, 0x30, 0xd1, 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x72, 0x00, 0x15, + 0x65, 0x00, 0x71, 0x28, 0x1b, 0x69, 0x28, 0x21, 0x61, 0x10, 0x16, 0x00, + 0x7f, 0x00, 0x3f, 0x96, 0xf7, 0x96, 0xfa, 0x57, 0x15, 0x5e, 0xc0, 0x06, + 0x58, 0x15, 0x38, 0x17, 0x08, 0xb8, 0xa4, 0xd0, 0x0c, 0xd3, 0xaa, 0x10, + 0x06, 0x73, 0x7f, 0x10, 0x28, 0x13, 0x35, 0x28, 0x0f, 0x38, 0x28, 0x1f, + 0x30, 0xd2, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x05, 0x38, 0x0c, + 0x04, 0x05, 0x40, 0x06, 0x05, 0x00, 0x05, 0x05, 0x05, 0x57, 0xf4, 0x22, + 0xcd, 0x00, 0x20, 0x00, 0x07, 0x28, 0x17, 0xe4, 0x30, 0xaf, 0x30, 0xfc, + 0x08, 0x30, 0xc1, 0x30, 0xe7, 0x06, 0x48, 0x1b, 0x41, 0x00, 0x79, 0xa2, + 0x4f, 0xa7, 0x75, 0x2f, 0xab, 0x68, 0x00, 0x6f, 0x10, 0x16, 0x00, 0x7f, + 0x3f, 0x01, 0x96, 0x9a, 0x4e, 0x93, 0x5e, 0x54, 0x4e, 0x06, 0x98, 0x17, + 0x07, 0x7c, 0xc5, 0xe0, 0xcf, 0x08, 0x23, 0x8b, 0x06, 0x7b, 0x97, 0x0e, + 0xd3, 0x7f, 0x10, 0x10, 0x04, 0x4f, 0x28, 0x15, 0x43, 0x04, 0x47, 0x04, + 0x69, 0x3e, 0x06, 0x28, 0x15, 0x10, 0x17, 0x14, 0xff, 0x06, 0x38, 0x0c, + 0x05, 0x06, 0x40, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0xa5, 0xf6, 0x38, + 0xcb, 0x00, 0x00, 0x00, 0x08, 0x2a, 0xab, 0x30, 0xcf, 0x30, 0x04, 0xde, + 0x30, 0xeb, 0x30, 0xab, 0x06, 0x48, 0x15, 0x00, 0x00, 0x55, 0x43, 0x2f, + 0xa3, 0x6a, 0x2f, 0xa7, 0x6d, 0x2f, 0xab, 0x72, 0x28, 0x1f, 0xc0, 0x05, + 0xff, 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x61, 0x53, 0xc8, 0x54, 0x6c, 0x9a, + 0x20, 0x61, 0x53, 0x06, 0x78, 0x17, 0x74, 0xce, 0x58, 0xd5, 0xc8, 0x04, + 0xb9, 0x74, 0xb9, 0x74, 0xce, 0x10, 0x06, 0x53, 0x7f, 0x1a, 0x04, 0x15, + 0x30, 0x04, 0x45, 0x20, 0x03, 0x3c, 0x20, 0x07, 0x40, 0x28, 0x21, 0x69, + 0x30, 0x05, 0xe8, 0x1d, 0x10, 0x16, 0xf4, 0xff, 0x07, 0x38, 0x0c, 0x06, + 0x07, 0x20, 0x06, 0x40, 0x08, 0x20, 0x05, 0x07, 0x07, 0xe8, 0xfa, 0x2b, + 0xc8, 0x11, 0x00, 0x00, 0x09, 0x28, 0x17, 0xe4, 0x30, 0xaa, 0x06, 0x68, + 0x13, 0xac, 0x78, 0x17, 0x6c, 0x20, 0x01, 0x61, 0x06, 0x2f, 0xab, 0x10, + 0x0f, 0x30, 0x7f, 0x61, 0x53, 0x02, 0x9a, 0x4e, 0xc4, 0x4f, 0x3a, 0x53, + 0x06, 0x7f, 0xaf, 0x74, 0x06, 0xce, 0x7c, 0xc5, 0x24, 0xc6, 0x10, 0x06, + 0x93, 0x7f, 0x38, 0x17, 0x3b, 0x03, 0x04, 0x4c, 0x04, 0x4f, 0x04, 0x3e, + 0x05, 0xe8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x48, 0x08, 0x38, 0x0c, 0x07, + 0x08, 0x40, 0x06, 0x08, 0x08, 0x08, 0x00, 0x08, 0x6c, 0xf7, 0x24, 0xc9, + 0x00, 0x00, 0x0a, 0x02, 0x2a, 0xaf, 0x30, 0xb9, 0x30, 0xb3, 0x06, 0xc8, + 0x17, 0x75, 0x3b, 0x00, 0x7a, 0x2f, 0xa7, 0x06, 0x58, 0x15, 0x07, 0x50, + 0x7f, 0x73, 0x0e, 0xe0, 0x7f, 0x06, 0xb1, 0xff, 0x00, 0x93, 0x5e, 0xaf, + 0x65, 0xd1, 0x79, 0x01, 0x77, 0x81, 0x06, 0x7b, 0x19, 0xe0, 0xcf, 0xa4, + 0xc2, 0x54, 0xcf, 0x10, 0x06, 0x93, 0x7f, 0x01, 0x1a, 0x04, 0x43, 0x04, + 0x41, 0x04, 0x3a, 0x06, 0x68, 0x15, 0xd2, 0x0f, 0x54, 0xff, 0x10, 0x06, + 0xb0, 0xff, 0x09, 0x38, 0x0c, 0x08, 0x09, 0x20, 0x06, 0x09, 0x80, 0x20, + 0x05, 0x09, 0x09, 0x64, 0xf6, 0xd1, 0xcc, 0x00, 0x00, 0x00, 0x0b, 0x2a, + 0xef, 0x30, 0xf3, 0x30, 0xab, 0x0d, 0x30, 0xd9, 0x30, 0xea, 0x20, 0x05, + 0x06, 0x3f, 0xb0, 0x48, 0x28, 0x17, 0x10, 0x61, 0x00, 0x6e, 0x28, 0x19, + 0x61, 0x00, 0x76, 0x00, 0x58, 0x65, 0x2f, 0xbb, 0x69, 0x40, 0x0b, 0x10, + 0x15, 0x70, 0x7f, 0x07, 0x4e, 0x61, 0x01, 0x53, 0xe6, 0x97, 0x29, 0x52, + 0x61, 0x53, 0x06, 0x58, 0x1b, 0x00, 0xb0, 0xc6, 0x59, 0xc5, 0x74, 0xce, + 0xa8, 0xbc, 0x08, 0xac, 0xb9, 0x74, 0xce, 0x10, 0x06, 0x33, 0x7f, 0x23, + 0x04, 0x30, 0x20, 0x04, 0x3d, 0x28, 0x17, 0x30, 0x04, 0x32, 0x04, 0x35, + 0x0d, 0x04, 0x3b, 0x04, 0x38, 0x40, 0x0b, 0x10, 0x1d, 0x94, 0xff, 0x0a, + 0x38, 0x0c, 0x28, 0x09, 0x0a, 0x20, 0x06, 0x16, 0x20, 0x05, 0x0a, 0x0a, + 0xec, 0x02, 0xf6, 0xae, 0xca, 0x00, 0x00, 0x0c, 0x28, 0x17, 0xcc, 0x35, + 0x30, 0xb3, 0x06, 0x48, 0x11, 0x98, 0x17, 0xe1, 0x28, 0x17, 0x75, 0x06, + 0x6f, 0xb3, 0x81, 0x10, 0x0e, 0xf0, 0x7f, 0xe6, 0x74, 0xaa, 0x52, 0xd1, + 0x79, 0x06, 0x58, 0x13, 0x81, 0x58, 0x17, 0x44, 0xc5, 0x04, 0xb2, 0x54, + 0xcf, 0x10, 0x06, 0x73, 0x7f, 0xad, 0x58, 0x17, 0x43, 0x28, 0x19, 0x3e, + 0x05, 0xa8, 0x0d, 0x10, 0x17, 0x94, 0xff, 0x0b, 0x38, 0x0c, 0x28, 0x0a, + 0x0b, 0x20, 0x06, 0x17, 0x20, 0x05, 0x0b, 0x0b, 0xf3, 0x00, 0xf8, 0xcb, + 0xc9, 0x00, 0x00, 0x0d, 0x2a, 0xa4, 0x23, 0x30, 0xab, 0x06, 0xa8, 0x15, + 0x00, 0x00, 0x49, 0x05, 0xcf, 0x9d, 0x10, 0x10, 0x10, 0x7f, 0x08, 0x0a, + 0x4f, 0x61, 0x53, 0x06, 0x98, 0x15, 0x00, 0x00, 0x74, 0x15, 0xc7, 0x74, + 0xce, 0x10, 0x06, 0xb3, 0x7f, 0x18, 0x28, 0x11, 0x30, 0x06, 0x48, 0x11, + 0xa5, 0x10, 0x17, 0x54, 0xff, 0x0c, 0x38, 0x0c, 0x0b, 0x0c, 0x20, 0x06, + 0x06, 0x20, 0x05, 0x00, 0x0c, 0x0c, 0xff, 0xf5, 0x27, 0xca, 0x00, 0x00, + 0x01, 0x0e, 0x2a, 0xd5, 0x30, 0xcb, 0x30, 0xf3, 0x06, 0xa8, 0x19, 0x46, + 0x4a, 0x2f, 0xaf, 0x6e, 0x00, 0xed, 0x2f, 0xb1, 0x10, 0x16, 0x50, 0x7f, + 0xe1, 0x10, 0x80, 0x81, 0x5b, 0x06, 0xb8, 0x17, 0xc4, 0xd6, 0xcc, 0xb2, + 0xc0, 0x06, 0xbb, 0x97, 0x0e, 0xf3, 0x7f, 0x25, 0x04, 0x43, 0x04, 0x3d, + 0x04, 0x69, 0x38, 0x20, 0x03, 0x10, 0x1e, 0x54, 0xff, 0x0d, 0x38, 0x0c, + 0x0c, 0x0d, 0x20, 0x06, 0x41, 0x19, 0x20, 0x05, 0x0d, 0x0d, 0x6c, 0xf7, + 0x81, 0x28, 0x17, 0x00, 0x0f, 0x2a, 0xe9, 0x30, 0xfb, 0x30, 0xea, 0x30, + 0x01, 0xd9, 0x30, 0xeb, 0x30, 0xbf, 0x30, 0xfc, 0x06, 0x28, 0x1f, 0x50, + 0x4c, 0x2f, 0xad, 0x20, 0x20, 0x05, 0x69, 0x00, 0x62, 0x00, 0x05, 0x65, + 0x00, 0x72, 0x00, 0x74, 0x2f, 0xbd, 0x64, 0x10, 0x15, 0xa0, 0x7f, 0x00, + 0xc9, 0x62, 0x29, 0x52, 0x2f, 0x4f, 0x54, 0x58, 0x20, 0xb7, 0x5f, 0x06, + 0x58, 0x1d, 0x7c, 0xb7, 0xac, 0xb9, 0xa0, 0x01, 0xbc, 0x74, 0xb9, 0xc0, + 0xd0, 0xdc, 0xb4, 0x06, 0x3f, 0xb6, 0x82, 0x0e, 0xf3, 0x7f, 0x1b, 0x04, + 0x30, 0x04, 0x2d, 0x20, 0x05, 0x38, 0x00, 0x04, 0x31, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x42, 0xb4, 0x20, 0x0f, 0x34, 0x05, 0xa8, 0x23, 0x10, 0x16, + 0xf4, 0xff, 0x0e, 0x38, 0x0c, 0x0d, 0x0e, 0xa0, 0x20, 0x06, 0x0a, 0x20, + 0x05, 0x0e, 0x0e, 0x3c, 0xfa, 0xce, 0x08, 0xc7, 0x00, 0x00, 0x10, 0x28, + 0x17, 0xf3, 0x30, 0xd0, 0x03, 0x30, 0xa4, 0x30, 0xa7, 0x30, 0xb1, 0x06, + 0x28, 0x15, 0x58, 0x17, 0x45, 0x6d, 0x28, 0x13, 0x61, 0x00, 0x79, 0x28, + 0x17, 0x71, 0x2f, 0xbd, 0x40, 0x65, 0x10, 0x15, 0xc0, 0x7f, 0x70, 0x51, + 0xf4, 0x5d, 0x36, 0x80, 0x20, 0x4b, 0x51, 0x06, 0x58, 0x15, 0x00, 0x00, + 0x8c, 0xb7, 0x14, 0x07, 0xbc, 0x08, 0xc6, 0x00, 0xcf, 0x06, 0x6f, 0xae, + 0x0f, 0x03, 0x7f, 0x38, 0x17, 0x45, 0x3c, 0x28, 0x13, 0x30, 0x04, 0x39, + 0x28, 0x17, 0x3a, 0x28, 0x1b, 0xa5, 0x10, 0x1d, 0xd4, 0xff, 0x0f, 0x38, + 0x0c, 0x0e, 0x0f, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x04, 0x0f, 0x0f, 0x2f, + 0xfb, 0x3a, 0x28, 0x17, 0x11, 0x2a, 0x06, 0xed, 0x30, 0xec, 0x30, 0xc8, + 0x06, 0x48, 0x11, 0x7f, 0xaf, 0x6f, 0xa8, 0x2f, 0xa5, 0x65, 0x2f, 0xa7, + 0x6f, 0x10, 0x16, 0x40, 0x7f, 0x1b, 0x6d, 0xf7, 0x10, 0x96, 0x58, 0x62, + 0x06, 0x78, 0x15, 0x00, 0x00, 0x5c, 0xb8, 0x08, 0x08, 0xb8, 0xa0, 0xd1, + 0x10, 0x06, 0x93, 0x7f, 0x1b, 0x04, 0x3e, 0x2c, 0x04, 0x40, 0x28, 0x11, + 0x42, 0x20, 0x07, 0x10, 0x1e, 0x34, 0xff, 0x10, 0x10, 0x14, 0x0f, 0x10, + 0x10, 0x40, 0x01, 0x0d, 0x40, 0x07, 0x56, 0xfd, 0x00, 0xea, 0xcb, 0x00, + 0x00, 0x12, 0x2a, 0xde, 0x30, 0x44, 0xc9, 0x28, 0x19, 0xfb, 0x30, 0xc7, + 0x40, 0x03, 0xa3, 0x30, 0x15, 0xaa, 0x30, 0xb9, 0x05, 0xc8, 0x25, 0x4d, + 0x2f, 0xaf, 0x64, 0x48, 0x19, 0x62, 0x20, 0x20, 0x07, 0x30, 0x05, 0x44, + 0x00, 0x69, 0x28, 0x2b, 0x73, 0x80, 0x10, 0x15, 0x60, 0x7f, 0x6c, 0x9a, + 0xb7, 0x5f, 0xf7, 0x96, 0xb7, 0x01, 0x5f, 0xea, 0x8f, 0x65, 0x59, 0xaf, + 0x65, 0x06, 0x18, 0x1f, 0x00, 0xc8, 0xb9, 0xdc, 0xb4, 0x08, 0xb8, 0x70, + 0xb3, 0x03, 0x14, 0xb5, 0x24, 0xc6, 0xa4, 0xc2, 0x06, 0x1b, 0x9f, 0x0e, + 0xf3, 0x7f, 0x04, 0x1c, 0x04, 0x30, 0x04, 0x34, 0x48, 0x19, 0x2d, 0x00, + 0x45, 0x34, 0x40, 0x05, 0x14, 0x04, 0x38, 0x28, 0x2b, 0x41, 0x05, 0x68, + 0x25, 0x82, 0x10, 0x16, 0xf4, 0xff, 0x11, 0x11, 0x10, 0x11, 0x11, 0x40, + 0x01, 0x0e, 0x80, 0x40, 0x07, 0x0b, 0xf7, 0xce, 0xce, 0x00, 0x00, 0x13, + 0x00, 0x2a, 0xe2, 0x30, 0xb1, 0x30, 0xb0, 0x30, 0xa2, 0xc1, 0x05, 0xc8, + 0x0b, 0xd8, 0x17, 0x6f, 0x00, 0x71, 0x00, 0x75, 0x2f, 0xb1, 0x50, 0x67, + 0x20, 0x05, 0x61, 0x10, 0x16, 0x00, 0x7f, 0xab, 0x83, 0x4b, 0x51, 0x30, + 0xdc, 0x74, 0x06, 0x18, 0x0f, 0x7f, 0xff, 0xa8, 0xba, 0x00, 0xcf, 0x35, + 0xfc, 0xac, 0x06, 0x73, 0x7d, 0x0f, 0x13, 0x7f, 0x1c, 0x28, 0x03, 0x3a, + 0x28, 0x15, 0x18, 0x33, 0x04, 0x43, 0x28, 0x21, 0x10, 0x1e, 0x14, 0xff, + 0x12, 0x12, 0x11, 0x28, 0x12, 0x12, 0x40, 0x01, 0x0f, 0x40, 0x07, 0xc6, + 0xf3, 0x8f, 0x00, 0xcd, 0x00, 0x00, 0x14, 0x2a, 0xd1, 0x30, 0xb9, 0x22, + 0x30, 0xb3, 0x06, 0x88, 0x15, 0x00, 0x00, 0x50, 0x2f, 0xaf, 0x73, 0x30, + 0x00, 0x63, 0x2f, 0xa1, 0x10, 0x16, 0x50, 0x7f, 0x15, 0x5e, 0xaf, 0x65, + 0x20, 0xd1, 0x79, 0x06, 0x98, 0x17, 0x0c, 0xd3, 0xa4, 0xc2, 0x54, 0x55, + 0xcf, 0x10, 0x06, 0x93, 0x7f, 0x1f, 0x28, 0x0d, 0x41, 0x28, 0x19, 0x3e, + 0x06, 0x28, 0x13, 0x82, 0x10, 0x17, 0x34, 0xff, 0x13, 0x13, 0x12, 0x13, + 0x13, 0x40, 0x01, 0x10, 0x84, 0x40, 0x07, 0x68, 0xf8, 0xc5, 0xc9, 0x25, + 0x15, 0x2a, 0xd4, 0x0a, 0x30, 0xa6, 0x30, 0xe9, 0x06, 0xc8, 0x17, 0x69, + 0x2f, 0xad, 0x72, 0xc0, 0x06, 0x2f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xae, + 0x76, 0x4c, 0x4e, 0xc9, 0x62, 0x81, 0x06, 0x98, 0x17, 0x3c, 0xd5, 0xb0, + 0xc6, 0x7c, 0xb7, 0x10, 0x06, 0x93, 0x7f, 0x01, 0x1f, 0x04, 0x38, 0x04, + 0x43, 0x04, 0x40, 0x28, 0x1d, 0x82, 0x10, 0x1e, 0x54, 0xff, 0x14, 0x14, + 0x13, 0x14, 0x14, 0x40, 0x01, 0x11, 0x80, 0x40, 0x07, 0x4e, 0xfc, 0xaa, + 0xc6, 0x00, 0x00, 0x16, 0x02, 0x2a, 0xd7, 0x30, 0xfc, 0x30, 0xce, 0x06, + 0xc8, 0x17, 0x75, 0x30, 0x00, 0x6e, 0x06, 0x8f, 0xad, 0x10, 0x0f, 0x10, + 0x7f, 0x6e, 0x66, 0xfa, 0x8b, 0x81, 0x06, 0x98, 0x15, 0x00, 0x00, 0x78, + 0xd4, 0x78, 0xb1, 0x06, 0x9b, 0x95, 0xa3, 0x0f, 0x13, 0x7f, 0x1f, 0x28, + 0x15, 0x3d, 0x04, 0x3e, 0x06, 0x68, 0x15, 0x10, 0x17, 0x14, 0xff, 0x28, + 0x15, 0x15, 0x70, 0x01, 0x12, 0x40, 0x0a, 0xbe, 0xf4, 0x33, 0x00, 0xce, + 0x00, 0x00, 0x17, 0x2a, 0xb5, 0x30, 0xf3, 0x00, 0x30, 0xfb, 0x30, 0xde, + 0x30, 0xeb, 0x30, 0xc6, 0x34, 0x30, 0xa3, 0x20, 0x0b, 0x05, 0xff, 0xb6, + 0x53, 0x2f, 0xa9, 0x6e, 0x00, 0x10, 0x20, 0x00, 0x4d, 0x2f, 0xb1, 0x72, + 0x00, 0x74, 0x00, 0x60, 0xed, 0x28, 0x25, 0x10, 0x15, 0xb0, 0x7f, 0x23, + 0x57, 0x6c, 0x9a, 0x01, 0x40, 0x4e, 0x06, 0x98, 0x19, 0xb0, 0xc0, 0xc8, + 0xb9, 0x74, 0xb9, 0x31, 0xf4, 0xd2, 0x06, 0x7b, 0x99, 0x0e, 0xf3, 0x7f, + 0x21, 0x04, 0x30, 0x28, 0x17, 0x10, 0x2d, 0x00, 0x1c, 0x20, 0x07, 0x40, + 0x04, 0x42, 0x04, 0x65, 0x38, 0x28, 0x25, 0x10, 0x1d, 0xb4, 0xff, 0x16, + 0x16, 0x70, 0x01, 0x13, 0x40, 0x0a, 0x00, 0xb3, 0xfb, 0x45, 0xc9, 0x00, + 0x00, 0x18, 0x2a, 0x06, 0xbf, 0x30, 0xaf, 0x30, 0xca, 0x06, 0x08, 0x0d, + 0x9f, 0xff, 0x54, 0xa8, 0x28, 0x17, 0x63, 0x2f, 0xb1, 0x61, 0x10, 0x16, + 0x70, 0x7f, 0x58, 0x4b, 0x51, 0x20, 0xb3, 0x7e, 0x06, 0x98, 0x17, 0xc0, + 0xd0, 0x6c, 0xd0, 0x98, 0x55, 0xb0, 0x10, 0x06, 0x93, 0x7f, 0x22, 0x28, + 0x17, 0x3a, 0x28, 0x19, 0x30, 0x05, 0xc8, 0x0d, 0x94, 0x10, 0x17, 0x94, + 0xff, 0x17, 0x17, 0x70, 0x01, 0x14, 0x40, 0x0a, 0x33, 0xf3, 0x00, 0x0c, + 0xce, 0x00, 0x00, 0x19, 0x2a, 0xc8, 0x30, 0x01, 0xa5, 0x30, 0xf3, 0x30, + 0xd9, 0x30, 0xb9, 0x06, 0x68, 0x1b, 0x00, 0x54, 0x00, 0x75, 0x00, 0x6d, + 0x00, 0x62, 0x00, 0x10, 0x65, 0x00, 0x73, 0x10, 0x16, 0x40, 0x7f, 0x1a, + 0x90, 0x1d, 0x8d, 0x20, 0xaf, 0x65, 0x06, 0x98, 0x17, 0x3c, 0xd2, 0xa0, + 0xbc, 0xa4, 0x60, 0xc2, 0x06, 0xbb, 0x97, 0x0e, 0xd3, 0x7f, 0x22, 0x04, + 0x43, 0x04, 0x3c, 0x03, 0x04, 0x31, 0x04, 0x35, 0x04, 0x41, 0x06, 0x48, + 0x19, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x18, 0x18, 0x70, 0x01, 0x15, 0x40, + 0x0a, 0x77, 0xfd, 0xcd, 0x40, 0xc6, 0x25, 0x15, 0x2a, 0xa6, 0x30, 0xab, + 0x30, 0xe4, 0x22, 0x30, 0xea, 0x06, 0x68, 0x15, 0x00, 0x00, 0x55, 0x2f, + 0xad, 0x61, 0x22, 0x00, 0x79, 0x2f, 0xb5, 0x6c, 0x00, 0x69, 0x10, 0x16, + 0x20, 0x7f, 0x4c, 0x01, 0x4e, 0x61, 0x53, 0x9a, 0x4e, 0x29, 0x52, 0x06, + 0x78, 0x19, 0x00, 0xb0, 0xc6, 0x74, 0xce, 0x84, 0xc5, 0xac, 0xb9, 0x80, + 0x10, 0x06, 0x73, 0x7f, 0x23, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x4f, 0x0c, + 0x04, 0x3b, 0x04, 0x38, 0x06, 0x48, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x19, + 0x19, 0xa1, 0x70, 0x01, 0x18, 0x40, 0x0a, 0x0b, 0xfa, 0xff, 0xca, 0x00, + 0x3f, 0xff, 0x00, 0x01, 0x0f, 0x14, 0x0f, 0x0f, 0x0f, 0x01, 0x01, 0x11, + 0x0f, 0x0f, 0x0c, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x20, 0x01, + 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x90, 0x30, 0x04, 0x02, + 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x48, 0x04, 0x30, 0x04, 0x03, + 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x24, 0x04, 0x05, 0x30, 0x04, 0x04, + 0x05, 0x40, 0x06, 0x05, 0x05, 0x12, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, + 0x06, 0x40, 0x06, 0x06, 0x09, 0x06, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, + 0x07, 0x20, 0x06, 0x44, 0x08, 0x20, 0x05, 0x07, 0x07, 0x08, 0x30, 0x04, + 0x07, 0x08, 0x82, 0x40, 0x06, 0x08, 0x08, 0x08, 0x08, 0x09, 0x30, 0x04, + 0x08, 0x51, 0x09, 0x20, 0x06, 0x09, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, + 0x04, 0x28, 0x09, 0x0a, 0x20, 0x06, 0x16, 0x20, 0x05, 0x0a, 0x0a, 0x0b, + 0x94, 0x30, 0x04, 0x0a, 0x0b, 0x20, 0x06, 0x17, 0x20, 0x05, 0x0b, 0x0b, + 0x4a, 0x0c, 0x30, 0x04, 0x0b, 0x0c, 0x20, 0x06, 0x06, 0x20, 0x05, 0x0c, + 0x25, 0x0c, 0x0d, 0x30, 0x04, 0x0c, 0x0d, 0x20, 0x06, 0x19, 0x20, 0x05, + 0x12, 0x0d, 0x0d, 0x0e, 0x30, 0x04, 0x0d, 0x0e, 0x20, 0x06, 0x0a, 0x89, + 0x20, 0x05, 0x0e, 0x0e, 0x0f, 0x30, 0x04, 0x0e, 0x0f, 0x20, 0x06, 0x43, + 0x0b, 0x20, 0x05, 0x0f, 0x0f, 0x10, 0x10, 0x20, 0x02, 0x40, 0x01, 0x4d, + 0x0d, 0x40, 0x07, 0x11, 0x11, 0x20, 0x02, 0x40, 0x01, 0x0e, 0x40, 0x07, + 0x34, 0x12, 0x12, 0x20, 0x02, 0x40, 0x01, 0x0f, 0x40, 0x07, 0x13, 0x13, + 0xd3, 0x20, 0x02, 0x40, 0x01, 0x10, 0x40, 0x07, 0x14, 0x14, 0x20, 0x02, + 0x40, 0x01, 0x4a, 0x11, 0x40, 0x07, 0x15, 0x15, 0x70, 0x01, 0x12, 0x40, + 0x0a, 0x16, 0x52, 0x16, 0x70, 0x01, 0x13, 0x40, 0x0a, 0x17, 0x17, 0x70, + 0x01, 0x14, 0xf0, 0x40, 0x0a, 0xf9, 0xaf, 0xf1, 0xa7, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x64, 0x7a, 0x00, 0x11, 0x0e, 0x00, 0x00, + 0x30, 0x01, 0x2b, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x4d, 0x0c, 0x67, 0xd3, 0x00, 0x00, 0x00, + 0x02, 0x2b, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x00, 0x30, 0xfb, 0x30, 0xb8, + 0x30, 0xe7, 0x30, 0xfc, 0x80, 0x20, 0x05, 0xfb, 0x30, 0xd0, 0x30, 0xbb, + 0x30, 0xc6, 0x90, 0x20, 0x0b, 0xeb, 0x30, 0x05, 0x38, 0x31, 0x53, 0x00, + 0x61, 0x00, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x00, + 0x47, 0x00, 0x65, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x45, 0x67, 0x20, 0x07, + 0x20, 0x00, 0x42, 0x20, 0x19, 0x73, 0x20, 0x01, 0x56, 0x65, 0x20, 0x1b, + 0x65, 0x20, 0x15, 0x72, 0x20, 0x1d, 0x10, 0x14, 0x10, 0x7f, 0x23, 0x00, + 0x57, 0x54, 0x4e, 0xbb, 0x6c, 0xf4, 0x5d, 0xaf, 0x01, 0x65, 0x79, 0x72, + 0x14, 0x5c, 0x3a, 0x53, 0x05, 0xfb, 0x25, 0x00, 0x38, 0xc1, 0x78, 0xc7, + 0xb8, 0xd2, 0x70, 0xc8, 0x00, 0xc0, 0xc9, 0x14, 0xbc, 0xa4, 0xc2, 0x4c, + 0xd1, 0x30, 0x74, 0xb9, 0x05, 0xdb, 0xa7, 0x0e, 0xf3, 0x7f, 0x21, 0x04, + 0x35, 0x04, 0x00, 0x3d, 0x04, 0x42, 0x04, 0x2d, 0x00, 0x14, 0x04, 0x01, + 0x36, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x34, 0x20, 0x07, 0x01, 0x2d, 0x00, + 0x11, 0x04, 0x30, 0x04, 0x41, 0x20, 0x17, 0x62, 0x35, 0x20, 0x11, 0x10, + 0x1c, 0xb4, 0xff, 0x01, 0x03, 0x03, 0x20, 0x01, 0x01, 0xa4, 0x20, 0x06, + 0x05, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x2b, 0x01, 0xaf, 0x30, + 0xe9, 0x30, 0xa4, 0x30, 0xb9, 0x48, 0x1b, 0x14, 0xc1, 0x30, 0xe3, 0x28, + 0x1b, 0xc1, 0x28, 0x25, 0xcb, 0x30, 0x46, 0xb3, 0x20, 0x17, 0xbf, 0x30, + 0xa6, 0x28, 0x35, 0x04, 0xdf, 0xcf, 0x43, 0x2e, 0x00, 0x68, 0x28, 0x09, + 0x69, 0x28, 0x01, 0x38, 0x19, 0x30, 0x0d, 0x75, 0xa3, 0x28, 0x19, 0x63, + 0x20, 0x15, 0x20, 0x00, 0x4e, 0x28, 0x31, 0x30, 0x09, 0x11, 0x6f, 0x00, + 0x6c, 0x28, 0x3d, 0x20, 0x00, 0x54, 0x28, 0x35, 0x61, 0x77, 0x28, 0x43, + 0x10, 0x13, 0xb0, 0x7f, 0x4b, 0x51, 0x56, 0x8d, 0x38, 0x13, 0x00, 0x7b, + 0x5f, 0x47, 0x59, 0x3c, 0x5c, 0xe4, 0x53, 0x08, 0xc9, 0x62, 0x47, 0x95, + 0x05, 0xb8, 0x1d, 0x6c, 0xd0, 0x7c, 0x00, 0xb7, 0x74, 0xc7, 0xa4, 0xc2, + 0xb8, 0xd2, 0x98, 0x00, 0xcc, 0x58, 0xce, 0xc8, 0xb2, 0x5c, 0xcf, 0x7c, + 0x06, 0xb7, 0xc0, 0xd0, 0xb4, 0xc6, 0x05, 0x7f, 0xc5, 0x0e, 0xf3, 0x7f, + 0x1a, 0x88, 0x28, 0x09, 0x30, 0x04, 0x39, 0x48, 0x03, 0x2d, 0x00, 0x27, + 0x28, 0x04, 0x51, 0x28, 0x19, 0x47, 0x28, 0x25, 0x1d, 0x04, 0x38, 0x28, + 0x04, 0x3a, 0x28, 0x27, 0x3b, 0x28, 0x1f, 0x2d, 0x00, 0x22, 0xb4, 0x28, + 0x25, 0x43, 0x28, 0x3f, 0x10, 0x1c, 0x14, 0xff, 0x02, 0x38, 0x0c, 0x01, + 0x02, 0x80, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x59, 0x0c, 0x61, 0x8d, + 0x28, 0x17, 0x04, 0x2b, 0xbb, 0x27, 0xf9, 0x38, 0x13, 0xa2, 0x28, 0x01, + 0x11, 0xfb, 0x30, 0xb5, 0x28, 0x07, 0xc7, 0x30, 0xa3, 0x28, 0x23, 0x75, + 0xdd, 0x28, 0x2d, 0x30, 0x19, 0x05, 0xbc, 0xaf, 0x41, 0x2f, 0xb7, 0x6e, + 0x4f, 0xab, 0x82, 0x3f, 0xc5, 0x6e, 0x00, 0x64, 0x00, 0x79, 0x2f, 0xc5, + 0x50, 0xe0, 0x2f, 0xc3, 0x5f, 0xd1, 0x10, 0x14, 0x30, 0x7f, 0x23, 0x57, + 0x89, 0x5b, 0xae, 0x00, 0x59, 0x51, 0x68, 0xea, 0x8f, 0xe2, 0x6c, 0xe0, + 0x18, 0x56, 0x79, 0x72, 0x05, 0xb8, 0x13, 0x3f, 0xff, 0x38, 0xc1, 0x78, + 0x00, 0xc7, 0xb8, 0xd2, 0x64, 0xc5, 0xcc, 0xc0, 0x14, 0x1c, 0xb5, 0xec, + 0xd3, 0x30, 0x0b, 0x05, 0xd0, 0x7f, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x6a, + 0x35, 0x27, 0xef, 0x38, 0x13, 0x2d, 0x27, 0xf7, 0x3d, 0x28, 0x1b, 0x21, + 0x28, 0x04, 0x4d, 0x28, 0x01, 0x34, 0x28, 0x17, 0x2d, 0x00, 0x1f, 0xb4, + 0x28, 0x19, 0x39, 0x40, 0x1f, 0x10, 0x1c, 0x74, 0xff, 0x03, 0x38, 0x0c, + 0x02, 0x03, 0xa0, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x03, 0x03, 0x56, 0x0c, + 0x52, 0xa0, 0x28, 0x17, 0x05, 0x88, 0x17, 0xb8, 0x30, 0xe7, 0x30, 0xfc, + 0xd5, 0x20, 0x05, 0x30, 0x09, 0xf3, 0x20, 0x0d, 0xe3, 0x20, 0x0d, 0xe9, + 0x28, 0x33, 0x6a, 0xc9, 0x04, 0xe8, 0x19, 0xb8, 0x17, 0x47, 0x28, 0x13, + 0x6f, 0x2f, 0xbd, 0x67, 0xb7, 0x48, 0x1b, 0x47, 0x48, 0x2f, 0x30, 0x0b, + 0x72, 0x4f, 0xaf, 0x38, 0x27, 0x10, 0x14, 0x10, 0x7f, 0x00, 0x23, 0x57, + 0x54, 0x4e, 0xbb, 0x6c, 0xd1, 0x91, 0x0c, 0x70, 0x67, 0x70, 0x51, 0x05, + 0xf8, 0x13, 0x98, 0x17, 0x70, 0xc8, 0x00, 0xc0, 0xc9, 0xc4, 0xc9, 0x00, + 0xc8, 0x9c, 0xb7, 0x38, 0xdc, 0xb4, 0x06, 0x98, 0x17, 0x0e, 0x33, 0x7f, + 0x98, 0x17, 0x14, 0x04, 0x36, 0xaa, 0x28, 0x05, 0x40, 0x28, 0x11, 0x36, + 0x60, 0x0d, 0x38, 0x48, 0x1f, 0x36, 0x83, 0x28, 0x39, 0x40, 0x04, 0x3b, + 0x04, 0x30, 0x48, 0x2d, 0x10, 0x1b, 0xf4, 0xff, 0x28, 0x04, 0x04, 0x70, + 0x01, 0x06, 0x40, 0x0a, 0x2f, 0x0c, 0x86, 0xa8, 0x28, 0x17, 0x06, 0xa8, + 0x17, 0xa7, 0x28, 0x17, 0xe0, 0x30, 0xba, 0x8b, 0x28, 0x23, 0xa6, 0x30, + 0xa3, 0x48, 0x11, 0xef, 0x28, 0x29, 0x05, 0xb8, 0x17, 0x55, 0x4a, 0x2f, + 0xbb, 0x6d, 0x2f, 0xaf, 0x73, 0x2f, 0xbb, 0x57, 0x4f, 0xc5, 0x16, 0x64, + 0x00, 0x77, 0x2f, 0xcf, 0x72, 0x04, 0x48, 0x11, 0x10, 0x0f, 0x50, 0x7f, + 0x23, 0x00, 0x57, 0x79, 0x8a, 0xc6, 0x59, 0xaf, 0x65, 0x29, 0x01, 0x6e, + 0xb7, 0x5f, 0x83, 0x6c, 0xb7, 0x5f, 0x05, 0xf8, 0x1b, 0x80, 0x58, 0x17, + 0x1c, 0xc8, 0x84, 0xc7, 0xa4, 0xc2, 0x08, 0x07, 0xc7, 0xdc, 0xb4, 0xcc, + 0xc6, 0x05, 0xd8, 0x19, 0x0e, 0xf3, 0x7f, 0xd8, 0x17, 0x01, 0x35, 0x04, + 0x39, 0x04, 0x3c, 0x04, 0x41, 0x28, 0x25, 0x59, 0x23, 0x68, 0x15, 0x43, + 0x68, 0x2b, 0x10, 0x1c, 0x74, 0xff, 0x05, 0x05, 0x70, 0x01, 0x45, 0x02, + 0x40, 0x0a, 0x3b, 0x0c, 0x80, 0x28, 0x17, 0x07, 0xa8, 0x17, 0x40, 0xe7, + 0x28, 0x21, 0xfb, 0x30, 0xab, 0x30, 0xd4, 0x30, 0x16, 0xb9, 0x30, 0xc6, + 0x28, 0x23, 0xeb, 0x04, 0xe8, 0x11, 0x00, 0x38, 0x17, 0x6f, 0x22, 0x00, + 0x68, 0x2f, 0xbb, 0x20, 0x00, 0x43, 0x2f, 0xc5, 0x70, 0xad, 0x48, 0x21, + 0x74, 0x4f, 0xaf, 0x72, 0x2f, 0xc9, 0x0e, 0x10, 0x7f, 0x69, 0x0e, 0xe0, + 0x7f, 0x80, 0x05, 0x31, 0xff, 0x23, 0x57, 0xa6, 0x7e, 0xf0, 0x7f, 0x61, + 0x00, 0x53, 0xae, 0x76, 0xaf, 0x65, 0x79, 0x72, 0x14, 0x40, 0x5c, 0x06, + 0x58, 0x17, 0x74, 0xc8, 0x74, 0xce, 0x98, 0xd3, 0x03, 0xa4, 0xc2, 0x4c, + 0xd1, 0x74, 0xb9, 0x05, 0xd8, 0x97, 0x0e, 0xf3, 0x7f, 0xa0, 0xd8, 0x17, + 0x3e, 0x28, 0x23, 0x2d, 0x00, 0x1a, 0x04, 0x30, 0x2b, 0x04, 0x3f, 0x28, + 0x17, 0x41, 0x28, 0x2f, 0x35, 0x28, 0x15, 0x10, 0x06, 0x74, 0xff, 0x94, + 0x10, 0x05, 0x30, 0xff, 0x06, 0x06, 0x70, 0x01, 0x03, 0x40, 0x0a, 0x5f, + 0x0c, 0x50, 0x5b, 0x28, 0x17, 0x08, 0x00, 0x08, 0x17, 0xd5, 0x30, 0xa3, + 0x30, 0x16, 0xc3, 0x30, 0xb0, 0x28, 0x2b, 0xea, 0x28, 0x1b, 0x06, 0x78, + 0x17, 0x46, 0xbe, 0x2f, 0xc3, 0x67, 0x2f, 0xc3, 0x38, 0x0f, 0x04, 0x78, + 0x11, 0x10, 0x0f, 0x50, 0x7f, 0x58, 0x17, 0xf2, 0x01, 0x83, 0x3c, 0x68, + 0x79, 0x72, 0xcc, 0x91, 0x05, 0xf8, 0x15, 0x80, 0x98, 0x17, 0x3c, 0xd5, + 0xf8, 0xad, 0xb8, 0xd2, 0xac, 0xea, 0x05, 0xe8, 0x15, 0x0f, 0x13, 0x7f, + 0x00, 0x38, 0x17, 0x24, 0x28, 0x13, 0x33, 0x28, 0x2b, 0x40, 0xca, 0x28, + 0x1b, 0x10, 0x1c, 0xf4, 0xff, 0x07, 0x07, 0x70, 0x01, 0x04, 0x40, 0x0a, + 0x2b, 0x2a, 0x0c, 0x7d, 0x28, 0x17, 0x09, 0x88, 0x17, 0xe1, 0x48, 0x07, + 0xfb, 0x2d, 0x30, 0xb1, 0x28, 0x0d, 0xe8, 0x28, 0x2b, 0x06, 0x3c, 0xaf, + 0x4d, 0x2f, 0xbb, 0x15, 0x72, 0x00, 0x79, 0x6f, 0xaf, 0x79, 0x2f, 0xbd, + 0x6e, 0x10, 0x15, 0x00, 0x7f, 0x00, 0x23, 0x57, 0x9b, 0x73, 0x3d, 0x4e, + 0x61, 0x53, 0x32, 0x38, 0x6c, 0x06, 0x18, 0x13, 0x98, 0x17, 0x54, 0xba, + 0x28, 0x11, 0xcf, 0x0e, 0x74, 0xc7, 0xb8, 0xc5, 0x06, 0xb8, 0x17, 0x0e, + 0x33, 0x7f, 0x98, 0x17, 0x1c, 0xc0, 0x28, 0x21, 0x38, 0x09, 0x2d, 0x00, + 0x1a, 0x04, 0x30, 0x04, 0x65, 0x39, 0x48, 0x23, 0x10, 0x1d, 0x14, 0xff, + 0x08, 0x08, 0x70, 0x01, 0x07, 0x40, 0x0a, 0x15, 0x56, 0x0c, 0x64, 0x28, + 0x17, 0x0a, 0x88, 0x17, 0xdd, 0x28, 0x15, 0x40, 0xeb, 0x28, 0x1f, 0xab, + 0x30, 0xd4, 0x30, 0xb9, 0x30, 0x68, 0xc6, 0x40, 0x0d, 0x05, 0xfc, 0xaf, + 0x50, 0x2f, 0xbb, 0x75, 0x00, 0x6c, 0xab, 0x68, 0x17, 0x70, 0x2f, 0xab, + 0x73, 0x2f, 0xc7, 0x65, 0x2f, 0xb5, 0x3f, 0xb7, 0xb0, 0x0e, 0x10, 0x7f, + 0x69, 0x0e, 0xe0, 0x7f, 0x05, 0x31, 0xff, 0x23, 0x57, 0xdd, 0x4f, 0x00, + 0x57, 0x7f, 0x61, 0x53, 0xae, 0x76, 0xaf, 0x65, 0x0c, 0x79, 0x72, 0x14, + 0x5c, 0x05, 0xf8, 0x1d, 0x58, 0x17, 0xf4, 0xd3, 0x00, 0x74, 0xce, 0x98, + 0xd3, 0xa4, 0xc2, 0x4c, 0xd1, 0x3a, 0x74, 0xb9, 0x06, 0x98, 0x17, 0x0e, + 0x33, 0x7f, 0x98, 0x17, 0x1f, 0x28, 0x09, 0x3b, 0xaf, 0x68, 0x15, 0x3f, + 0x28, 0x1f, 0x41, 0x28, 0x2d, 0x38, 0x29, 0x10, 0x06, 0x94, 0xff, 0x10, + 0x05, 0x30, 0xff, 0x22, 0x09, 0x09, 0xd0, 0x01, 0x5f, 0x0c, 0x55, 0x28, + 0x17, 0x0b, 0x88, 0x00, 0x08, 0x17, 0xc1, 0x30, 0xe3, 0x48, 0x21, 0xba, + 0x30, 0xbf, 0x35, 0x30, 0xa6, 0x28, 0x33, 0x06, 0x78, 0x17, 0x68, 0x4f, + 0xbb, 0x6c, 0x68, 0x1b, 0x1c, 0x6f, 0x00, 0x77, 0x04, 0x6f, 0xbb, 0x10, + 0x0e, 0xf0, 0x7f, 0x58, 0x17, 0xe5, 0x67, 0x03, 0x14, 0x5c, 0xaf, 0x65, + 0x66, 0x65, 0x05, 0xf8, 0x15, 0x98, 0x17, 0x00, 0x30, 0xcc, 0xa4, 0xc2, + 0xc0, 0xd0, 0xb4, 0xc6, 0xeb, 0x05, 0xf0, 0x7f, 0x0e, 0xf3, 0x7f, 0x00, + 0x18, 0x17, 0x27, 0x28, 0x17, 0x40, 0x28, 0x21, 0x38, 0x17, 0x19, 0x30, + 0x04, 0x43, 0x28, 0x35, 0x10, 0x1c, 0xb4, 0xff, 0x0a, 0x0a, 0xd0, 0x01, + 0x15, 0x2f, 0x0c, 0x79, 0x28, 0x17, 0x0c, 0x88, 0x17, 0xd4, 0x28, 0x17, + 0x40, 0xbf, 0x28, 0x1b, 0xfb, 0x30, 0xd0, 0x30, 0xbb, 0x30, 0x68, 0xc6, + 0x48, 0x25, 0x06, 0x1c, 0xaf, 0x65, 0x6f, 0x9f, 0x20, 0x00, 0x42, 0xbc, + 0x2f, 0xc7, 0x73, 0x2f, 0xaf, 0x70, 0x11, 0x04, 0x7f, 0xb1, 0x10, 0x0e, + 0xf0, 0x7f, 0x23, 0x57, 0x00, 0x7c, 0x5f, 0x97, 0x5f, 0xf4, 0x5d, 0xaf, + 0x65, 0x08, 0x79, 0x72, 0x14, 0x5c, 0x06, 0x78, 0x17, 0x3c, 0xd5, 0x30, + 0x00, 0xd1, 0x14, 0xbc, 0xa4, 0xc2, 0x4c, 0xd1, 0x74, 0x75, 0xb9, 0x06, + 0xb8, 0x17, 0x0e, 0x13, 0x7f, 0xb8, 0x17, 0x38, 0x28, 0x1f, 0x35, 0x28, + 0x13, 0x1e, 0x2d, 0x00, 0x11, 0x28, 0x1b, 0x38, 0x17, 0x30, 0x0d, 0x10, + 0x1c, 0xd4, 0xff, 0x0b, 0x51, 0x0b, 0x70, 0x01, 0x08, 0x40, 0x0a, 0x50, + 0x0c, 0x67, 0x28, 0x17, 0x51, 0x0d, 0x88, 0x17, 0xc8, 0x28, 0x17, 0xde, + 0x30, 0xb9, 0x28, 0x21, 0x05, 0xed, 0x30, 0xa6, 0x30, 0xe9, 0x28, 0x2d, + 0xc9, 0x06, 0x08, 0x17, 0x44, 0x54, 0x2f, 0xa5, 0x6f, 0x00, 0x6d, 0x48, + 0x11, 0x20, 0x00, 0x51, 0x4c, 0x4f, 0xa5, 0x6c, 0x2f, 0xcf, 0x6e, 0x00, + 0x64, 0x10, 0x14, 0x80, 0x7f, 0x00, 0x23, 0x57, 0x58, 0x62, 0x6c, 0x9a, + 0xaf, 0x65, 0x0c, 0x1b, 0x6d, 0x70, 0x51, 0x06, 0x18, 0x15, 0x78, 0x17, + 0xa0, 0xd1, 0x00, 0x38, 0xba, 0xa4, 0xc2, 0x64, 0xb8, 0x9c, 0xb7, 0x38, + 0xdc, 0xb4, 0x06, 0x98, 0x17, 0x0e, 0x33, 0x7f, 0x98, 0x17, 0x22, 0x04, + 0x3e, 0x22, 0x04, 0x3c, 0x48, 0x0f, 0x2d, 0x00, 0x1b, 0x20, 0x0b, 0x43, + 0x2c, 0x04, 0x3b, 0x48, 0x33, 0x34, 0x04, 0xc8, 0x19, 0x10, 0x16, 0xf4, + 0xff, 0x0c, 0x0c, 0xa2, 0x70, 0x01, 0x0b, 0x40, 0x0a, 0x35, 0x0c, 0x79, + 0x28, 0x17, 0x0e, 0xa0, 0x00, 0x28, 0x17, 0xdf, 0x28, 0x11, 0xeb, 0x30, + 0xa2, 0x30, 0xa4, 0xd5, 0x05, 0x48, 0x1d, 0x00, 0x98, 0x17, 0x4d, 0x2f, + 0xc7, 0x64, 0x28, 0x11, 0x6c, 0x2f, 0xc5, 0x1e, 0x20, 0x00, 0x49, 0x2f, + 0xbd, 0x04, 0x38, 0x23, 0x10, 0x0e, 0xf0, 0x7f, 0x78, 0x17, 0x73, 0x01, + 0x7c, 0xb7, 0x5f, 0x14, 0x5c, 0x7e, 0x82, 0x05, 0xf8, 0x1d, 0x80, 0xb8, + 0x17, 0xf8, 0xbb, 0xe4, 0xb4, 0x44, 0xc5, 0x7c, 0x71, 0xc7, 0x05, 0xb8, + 0x1d, 0x0e, 0xf3, 0x7f, 0x00, 0x58, 0x17, 0x1c, 0x04, 0x38, 0x28, 0x0f, + 0x46, 0x3b, 0x28, 0x2d, 0x10, 0x04, 0x39, 0x04, 0xc8, 0x1f, 0x10, 0x16, + 0xf4, 0xff, 0x0d, 0x51, 0x0d, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x50, 0x0c, + 0x55, 0x28, 0x17, 0x00, 0x0f, 0x2b, 0xc8, 0x30, 0xea, 0x30, 0xcb, 0x30, + 0x14, 0xc6, 0x30, 0xa3, 0x28, 0x1b, 0xd1, 0x28, 0x0f, 0xe1, 0x30, 0x5c, + 0xc3, 0x48, 0x27, 0xdd, 0x28, 0x17, 0x38, 0x31, 0x04, 0xfd, 0x41, 0x54, + 0x00, 0x55, 0x72, 0x4f, 0xaf, 0x69, 0x2f, 0xb1, 0x79, 0x2f, 0xb3, 0x50, + 0x2f, 0xbf, 0x56, 0x6c, 0x2f, 0xb3, 0x65, 0x2f, 0xc1, 0x74, 0x2f, 0xbd, + 0x30, 0x11, 0x6f, 0xc0, 0x6f, 0xd1, 0x10, 0x14, 0x30, 0x7f, 0x79, 0x72, + 0xcc, 0x91, 0x3c, 0x5c, 0x00, 0x82, 0x84, 0x15, 0x5e, 0x14, 0x5c, 0x85, + 0x68, 0x00, 0x58, 0x62, 0xe2, 0x6c, 0xe0, 0x56, 0x79, 0x72, 0x80, 0x05, + 0x98, 0x1b, 0xb8, 0xd2, 0xac, 0xb9, 0xc8, 0xb2, 0xf0, 0x00, 0xd2, 0x30, + 0xd3, 0x38, 0xba, 0xa0, 0xd1, 0xec, 0x71, 0xd3, 0x38, 0x25, 0x05, 0xb8, + 0x97, 0x0e, 0xf3, 0x7f, 0x22, 0x04, 0x40, 0x28, 0x03, 0x51, 0x3d, 0x28, + 0x07, 0x42, 0x28, 0x0b, 0x2d, 0x00, 0x1f, 0x28, 0x19, 0x56, 0x3b, 0x28, + 0x1f, 0x35, 0x28, 0x2b, 0x42, 0x28, 0x29, 0x30, 0x11, 0x3e, 0xe4, 0x28, + 0x1b, 0x38, 0x3b, 0x10, 0x1c, 0x34, 0xff, 0x0e, 0x0e, 0xd0, 0x01, 0x4a, + 0x0c, 0x62, 0x5e, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x01, 0x03, 0x03, 0x20, + 0x01, 0x01, 0xa2, 0x20, 0x06, 0x05, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, + 0x04, 0x01, 0x41, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, + 0x04, 0x28, 0x02, 0x03, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x03, 0x03, 0x04, + 0x52, 0x04, 0x70, 0x01, 0x06, 0x40, 0x0a, 0x05, 0x05, 0x70, 0x01, 0x02, + 0x94, 0x40, 0x0a, 0x06, 0x06, 0x70, 0x01, 0x03, 0x40, 0x0a, 0x07, 0x07, + 0xa6, 0x70, 0x01, 0x04, 0x40, 0x0a, 0x08, 0x08, 0x70, 0x01, 0x50, 0x0a, + 0x09, 0x49, 0x09, 0xd0, 0x01, 0x0a, 0x0a, 0xd0, 0x01, 0x0b, 0x0b, 0x70, + 0x01, 0x4f, 0x08, 0x40, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x50, 0x0a, 0xf8, + 0xff, 0xf0, 0xf7, 0x80, 0x3f, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x2c, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xf4, 0x09, 0xa0, 0xd4, 0x00, 0x00, 0x00, + 0x01, 0x2c, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x01, 0x30, 0xeb, 0x30, 0xb7, + 0x30, 0xa2, 0x30, 0x06, 0x38, 0x21, 0x00, 0x53, 0x00, 0x74, 0x00, 0x2e, + 0x00, 0x20, 0x00, 0x00, 0x4c, 0x00, 0x75, 0x00, 0x63, 0x00, 0x69, 0x00, + 0x54, 0x61, 0x06, 0x00, 0x7f, 0x61, 0x20, 0x75, 0x6e, 0x20, 0x85, 0x65, + 0x00, 0x5b, 0x2d, 0x80, 0x85, 0x65, 0x0d, 0xc0, 0xff, 0x30, 0xfd, 0x61, + 0x06, 0x61, 0x83, 0x00, 0x10, 0x7f, 0x40, 0xed, 0x05, 0xc2, 0x03, 0x23, + 0x57, 0x62, 0x53, 0x7f, 0x89, 0x20, 0x9a, 0x4e, 0x06, 0x7b, 0x1d, 0x38, + 0xc1, 0x78, 0xc7, 0xb8, 0x01, 0xd2, 0xe8, 0xb8, 0xdc, 0xc2, 0x44, 0xc5, + 0x06, 0x53, 0x7f, 0xd0, 0x72, 0xff, 0x07, 0x31, 0xff, 0xfa, 0x06, 0x04, + 0x03, 0x21, 0x04, 0x35, 0x04, 0x00, 0x3d, 0x04, 0x42, 0x04, 0x2d, 0x00, + 0x1b, 0x04, 0x00, 0x4e, 0x04, 0x41, 0x04, 0x38, 0x04, 0x4f, 0x04, 0xcf, + 0x0d, 0xd4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, 0x01, 0xd0, 0x01, 0x58, + 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x2d, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x56, 0x09, 0x78, 0xd4, 0x00, 0x00, 0x00, + 0x01, 0x2d, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x30, 0x30, 0xd3, 0x20, 0x05, + 0x50, 0x09, 0xfb, 0x30, 0xb0, 0x30, 0x00, 0xec, 0x30, 0xca, 0x30, 0xc7, + 0x30, 0xa3, 0x30, 0x60, 0xfc, 0x20, 0x1b, 0x04, 0xf8, 0x35, 0x53, 0x00, + 0x74, 0x00, 0x2e, 0x00, 0x00, 0x20, 0x00, 0x56, 0x00, 0x69, 0x00, 0x6e, + 0x0a, 0x00, 0x63, 0x00, 0x65, 0x20, 0x05, 0x74, 0x20, 0x0f, 0x61, 0xa2, + 0x20, 0x0d, 0x64, 0x20, 0x17, 0x74, 0x00, 0x68, 0x20, 0x13, 0x20, 0x0b, + 0x00, 0x47, 0x00, 0x72, 0x40, 0x1b, 0x61, 0x20, 0x15, 0x30, 0x29, 0x14, + 0x65, 0x00, 0x73, 0x03, 0x60, 0x7f, 0x61, 0x40, 0x79, 0x74, 0x00, 0x5a, + 0x2d, 0xe0, 0x83, 0x2d, 0x20, 0x8b, 0x30, 0x15, 0x6c, 0x40, 0x6b, 0x2d, + 0xdd, 0x04, 0x60, 0x81, 0x00, 0x70, 0xff, 0x75, 0x60, 0xff, 0x30, 0xed, + 0x00, 0x50, 0xff, 0x6e, 0x03, 0xe0, 0xff, 0xfe, 0x00, 0x11, 0x83, 0x00, + 0x51, 0x77, 0x03, 0xf1, 0xff, 0x31, 0xe9, 0x51, 0xff, 0x71, 0xfd, 0x31, + 0xef, 0x79, 0xaf, 0x22, 0x13, 0x6c, 0x22, 0x05, 0x73, 0x61, 0xfb, 0x32, + 0x0f, 0x71, 0xfb, 0x30, 0x15, 0x80, 0x03, 0x7a, 0xcd, 0x23, 0x57, 0x87, + 0x65, 0xee, 0x68, 0x79, 0x00, 0x72, 0x8c, 0x54, 0x3c, 0x68, 0x97, 0x67, + 0xb3, 0x0c, 0x7e, 0x01, 0x4e, 0xaf, 0x03, 0xf0, 0xe2, 0x00, 0xcb, 0x78, + 0x38, 0xc1, 0x00, 0x78, 0xc7, 0xb8, 0xd2, 0x48, 0xbe, 0x3c, 0xc1, 0x00, + 0xb8, 0xd2, 0x20, 0x00, 0xf8, 0xad, 0x08, 0xb8, 0x0e, 0x98, 0xb0, 0x18, + 0xb5, 0x05, 0x9b, 0xab, 0x00, 0xd1, 0xff, 0x31, 0x99, 0x64, 0xfc, 0x04, + 0xe3, 0x7f, 0x73, 0xfd, 0xb1, 0xfd, 0x33, 0xf1, 0x05, 0x11, 0xfb, 0x3d, + 0x1a, 0x21, 0x04, 0x00, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x2d, 0x00, + 0x14, 0x12, 0x04, 0x38, 0x20, 0x09, 0x41, 0x60, 0x0f, 0x20, 0x00, 0x44, + 0x38, 0x20, 0x03, 0x13, 0x04, 0x40, 0x40, 0x1f, 0x30, 0x04, 0x4c, 0x34, + 0x40, 0x1d, 0x4b, 0x04, 0x0c, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x01, + 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0xc4, 0x59, 0x00, 0x11, 0x0a, 0x00, 0x00, + 0x30, 0x01, 0x2e, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x25, 0x04, 0xc6, 0xd8, 0x00, 0x00, 0x00, + 0x02, 0x2e, 0xd1, 0x30, 0xe9, 0x30, 0xde, 0x04, 0x30, 0xea, 0x30, 0xdc, + 0x30, 0x06, 0x58, 0x1f, 0x50, 0x00, 0x14, 0x61, 0x00, 0x72, 0x20, 0x03, + 0x6d, 0x40, 0x07, 0x69, 0x00, 0x10, 0x62, 0x00, 0x6f, 0x10, 0x15, 0xc0, + 0x7f, 0x15, 0x5e, 0xc9, 0x62, 0x00, 0x6c, 0x9a, 0xcc, 0x91, 0x5a, 0x53, + 0x02, 0x5e, 0x80, 0x06, 0x3b, 0x21, 0x0c, 0xd3, 0x7c, 0xb7, 0xc8, 0xb9, + 0xac, 0x10, 0xb9, 0xf4, 0xbc, 0x10, 0x06, 0x53, 0x7f, 0x1f, 0x04, 0x30, + 0x04, 0x50, 0x40, 0x20, 0x03, 0x3c, 0x40, 0x07, 0x38, 0x04, 0x31, 0x04, + 0x22, 0x3e, 0x04, 0x10, 0x1d, 0xb4, 0xff, 0x01, 0x07, 0x07, 0x20, 0x01, + 0x01, 0xa4, 0x20, 0x06, 0x08, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, + 0x2e, 0x00, 0xd6, 0x30, 0xed, 0x30, 0xb3, 0x30, 0xdd, 0x30, 0x14, 0xf3, + 0x30, 0xc9, 0x06, 0x48, 0x19, 0x42, 0x28, 0x15, 0x6f, 0x00, 0x51, 0x6b, + 0x28, 0x0d, 0x70, 0x28, 0x11, 0x6e, 0x00, 0x64, 0x05, 0xe8, 0x17, 0x80, + 0x10, 0x0e, 0xf0, 0x7f, 0x03, 0x5e, 0x57, 0x7f, 0xd1, 0x79, 0xec, 0x04, + 0x84, 0x1a, 0x59, 0x3a, 0x53, 0x06, 0x48, 0x17, 0xbe, 0x5c, 0x01, 0xb8, + 0x54, 0xcf, 0xf0, 0xd3, 0xc4, 0xb3, 0x06, 0x5f, 0xb7, 0xa2, 0x0e, 0xf3, + 0x7f, 0x11, 0x28, 0x15, 0x3e, 0x04, 0x3a, 0x28, 0x0d, 0x3f, 0x8d, 0x28, + 0x11, 0x3d, 0x04, 0x34, 0x05, 0xe8, 0x17, 0x10, 0x16, 0xf4, 0xff, 0x02, + 0x38, 0x0c, 0x20, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x9a, + 0x20, 0x03, 0xea, 0x28, 0x17, 0x04, 0x2e, 0xb3, 0x30, 0xe1, 0x02, 0x30, + 0xa6, 0x30, 0xa3, 0x30, 0xcd, 0x06, 0x48, 0x15, 0x00, 0x28, 0x00, 0x43, + 0x2f, 0x9f, 0x6d, 0x2f, 0xad, 0x65, 0x00, 0x77, 0xa8, 0x2f, 0xad, 0x6a, + 0x28, 0x19, 0x65, 0x10, 0x15, 0xc0, 0x7f, 0xd1, 0x79, 0xd8, 0x04, 0x9e, + 0xe6, 0x97, 0xb7, 0x8b, 0x06, 0x58, 0x15, 0x00, 0x00, 0x00, 0x54, 0xcf, + 0x54, 0xba, 0xa0, 0xbc, 0x74, 0xc7, 0x2a, 0x08, 0xb1, 0x10, 0x06, 0x53, + 0x7f, 0x1a, 0x28, 0x15, 0x3c, 0x20, 0x01, 0x35, 0x03, 0x04, 0x32, 0x04, + 0x38, 0x04, 0x39, 0x28, 0x19, 0x10, 0x1d, 0xd4, 0xff, 0x4a, 0x03, 0x38, + 0x0c, 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x0a, 0x03, 0x2f, + 0x04, 0xd5, 0x28, 0x17, 0x05, 0x28, 0x17, 0xed, 0x0e, 0x30, 0xcb, 0x30, + 0xfc, 0x06, 0x68, 0x15, 0x58, 0x17, 0x3f, 0xb1, 0x6e, 0xe0, 0x28, 0x15, + 0x05, 0xd8, 0x11, 0x10, 0x0f, 0x50, 0x7f, 0xd1, 0x79, 0x57, 0x7f, 0x3c, + 0x61, 0x5c, 0x06, 0x78, 0x15, 0x38, 0x17, 0x5c, 0xb8, 0xc8, 0xb2, 0x06, + 0x73, 0x7d, 0xd6, 0x0f, 0x13, 0x7f, 0x38, 0x17, 0x40, 0x28, 0x1b, 0x3d, + 0x28, 0x15, 0x10, 0x1e, 0x34, 0xff, 0x04, 0x94, 0x38, 0x0c, 0x03, 0x04, + 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, 0x04, 0x00, 0x2f, 0x04, 0xf4, 0xd7, + 0x00, 0x00, 0x06, 0x2e, 0x41, 0xde, 0x28, 0x17, 0xa6, 0x30, 0xa3, 0x30, + 0xcd, 0x06, 0x68, 0x19, 0x1c, 0x4d, 0x00, 0x61, 0x48, 0x17, 0x06, 0x5f, + 0xad, 0x10, 0x0f, 0x10, 0x7f, 0x6c, 0x9a, 0x02, 0x57, 0x7f, 0xe6, 0x97, + 0xb7, 0x8b, 0x06, 0x78, 0x19, 0xc8, 0x00, 0xb9, 0x5c, 0xb8, 0xa0, 0xbc, + 0x74, 0xc7, 0x08, 0x45, 0xb1, 0x10, 0x06, 0x53, 0x7f, 0x1c, 0x04, 0x30, + 0x48, 0x17, 0x32, 0x28, 0x17, 0x69, 0x39, 0x28, 0x1d, 0x10, 0x1d, 0xf4, + 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x20, 0x06, 0x40, 0x05, 0x20, 0x05, + 0x05, 0x05, 0xe9, 0x03, 0x91, 0xd9, 0x00, 0x00, 0x00, 0x07, 0x2e, 0xcb, + 0x30, 0xc3, 0x30, 0x05, 0xb1, 0x30, 0xea, 0x30, 0xfc, 0x06, 0x68, 0x17, + 0x4e, 0x2f, 0xa7, 0x16, 0x63, 0x00, 0x6b, 0x2f, 0xab, 0x72, 0x06, 0x4f, + 0xb1, 0x10, 0x0e, 0xf0, 0x7f, 0x3c, 0x06, 0x5c, 0x4b, 0x51, 0xcc, 0x91, + 0x06, 0x78, 0x15, 0x28, 0x17, 0xb2, 0x0d, 0x00, 0xcf, 0xac, 0xb9, 0x06, + 0x70, 0x7d, 0x0f, 0x13, 0x7f, 0x1d, 0x28, 0x0f, 0x56, 0x3a, 0x20, 0x01, + 0x35, 0x28, 0x1d, 0x38, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x06, + 0x94, 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x06, + 0x00, 0x3b, 0x04, 0x7b, 0xd7, 0x00, 0x00, 0x08, 0x2e, 0x1a, 0xd1, 0x30, + 0xe9, 0x06, 0x68, 0x11, 0x5f, 0xff, 0x50, 0x4f, 0xaf, 0x61, 0x84, 0x10, + 0x16, 0x80, 0x7f, 0x15, 0x5e, 0xc9, 0x62, 0x06, 0x98, 0x15, 0x00, 0x00, + 0x08, 0x0c, 0xd3, 0x7c, 0xb7, 0x10, 0x06, 0xb3, 0x7f, 0x1f, 0x04, 0x30, + 0xb4, 0x28, 0x11, 0x30, 0x06, 0x28, 0x11, 0x10, 0x17, 0x54, 0xff, 0x07, + 0x38, 0x0c, 0x06, 0x07, 0xa0, 0x20, 0x06, 0x07, 0x20, 0x05, 0x07, 0x07, + 0xf8, 0x03, 0xc3, 0x02, 0xd8, 0x00, 0x00, 0x09, 0x2e, 0xb5, 0x28, 0x17, + 0xde, 0x0a, 0x30, 0xc3, 0x30, 0xab, 0x06, 0x68, 0x1d, 0x53, 0x68, 0x17, + 0x6d, 0xb8, 0x28, 0x1f, 0x63, 0x2f, 0xb9, 0x05, 0xf8, 0x21, 0x10, 0x0e, + 0xf0, 0x7f, 0x28, 0x84, 0xc9, 0x04, 0x62, 0x6c, 0x9a, 0x61, 0x53, 0x06, + 0x78, 0x1b, 0xac, 0xc0, 0x03, 0x7c, 0xb7, 0xc8, 0xb9, 0x74, 0xce, 0x06, + 0x7b, 0x9b, 0x0e, 0xf3, 0x7f, 0x57, 0x21, 0x68, 0x17, 0x3c, 0x28, 0x1f, + 0x3a, 0x20, 0x01, 0x05, 0xf8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x08, + 0x08, 0x70, 0x01, 0x09, 0x40, 0x0a, 0x1f, 0x04, 0x8f, 0x80, 0x28, 0x17, + 0x0a, 0x2e, 0xb7, 0x30, 0xd1, 0x30, 0xea, 0x02, 0x30, 0xa6, 0x30, 0xa3, + 0x30, 0xcb, 0x06, 0x48, 0x19, 0x53, 0x0a, 0x00, 0x69, 0x00, 0x70, 0x2f, + 0xb3, 0x6c, 0x20, 0x07, 0x77, 0xb0, 0x20, 0x0b, 0x6e, 0x20, 0x0f, 0x10, + 0x15, 0xb0, 0x7f, 0x7f, 0x89, 0x15, 0x5e, 0x02, 0xcc, 0x91, 0xf4, 0x7e, + 0x3c, 0x5c, 0x06, 0x58, 0x19, 0xdc, 0x00, 0xc2, 0x14, 0xd3, 0xac, 0xb9, + 0x44, 0xbe, 0xc8, 0x60, 0xb2, 0x06, 0x7b, 0x97, 0x0e, 0xd3, 0x7f, 0x21, + 0x04, 0x38, 0x04, 0x3f, 0x8b, 0x28, 0x1b, 0x3b, 0x04, 0x43, 0x20, 0x09, + 0x3d, 0x20, 0x0d, 0x10, 0x1d, 0xd4, 0xff, 0x28, 0x09, 0x09, 0x70, 0x01, + 0x0a, 0x40, 0x0a, 0xb2, 0x03, 0x5a, 0x02, 0xd7, 0x00, 0x00, 0x0b, 0x2e, + 0xef, 0x28, 0x0f, 0xab, 0xde, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x57, 0x2f, + 0xaf, 0x38, 0x0b, 0x06, 0x1f, 0xa9, 0x10, 0x0f, 0x50, 0x7f, 0xe6, 0x06, + 0x74, 0x3c, 0x5c, 0x61, 0x53, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x14, 0x05, + 0xbc, 0xc8, 0xb2, 0x74, 0xce, 0x10, 0x06, 0x93, 0x7f, 0x12, 0x28, 0x13, + 0xb2, 0x38, 0x0d, 0x3a, 0x28, 0x1b, 0x10, 0x1e, 0x34, 0xff, 0x0a, 0x0a, + 0x70, 0x01, 0x02, 0x84, 0x40, 0x0a, 0x0d, 0x04, 0xba, 0xd8, 0x00, 0x3f, + 0xff, 0x01, 0x07, 0x54, 0x07, 0x20, 0x01, 0x01, 0x20, 0x06, 0x08, 0x20, + 0x05, 0x01, 0x01, 0x48, 0x02, 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, + 0x02, 0x02, 0x25, 0x02, 0x03, 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x03, + 0x20, 0x05, 0x12, 0x03, 0x03, 0x04, 0x30, 0x04, 0x03, 0x04, 0x20, 0x06, + 0x04, 0x89, 0x20, 0x05, 0x04, 0x04, 0x05, 0x30, 0x04, 0x04, 0x05, 0x20, + 0x06, 0x44, 0x05, 0x20, 0x05, 0x05, 0x05, 0x06, 0x30, 0x04, 0x05, 0x06, + 0xa2, 0x20, 0x06, 0x06, 0x20, 0x05, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, + 0x5a, 0x07, 0x20, 0x06, 0x07, 0x20, 0x05, 0x20, 0x65, 0x08, 0x70, 0x01, + 0x09, 0xf0, 0x50, 0x05, 0xe8, 0xbf, 0xf0, 0xb7, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x3c, 0x72, 0x00, 0x11, 0x0d, 0x00, 0x00, 0x30, 0x01, 0x2f, 0x14, + 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, + 0xfd, 0x92, 0x07, 0x42, 0xd4, 0x00, 0x00, 0x00, 0x02, 0x2f, 0xdd, 0x30, + 0xfc, 0x30, 0xc8, 0x02, 0x30, 0xfb, 0x30, 0xaa, 0x30, 0xd6, 0x20, 0x05, + 0xb9, 0x01, 0x30, 0xda, 0x30, 0xa4, 0x30, 0xf3, 0x30, 0x05, 0x98, 0x2b, + 0x00, 0x50, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x50, 0x2d, 0x20, + 0x07, 0x66, 0x20, 0x05, 0x53, 0x00, 0x70, 0x00, 0x04, 0x61, 0x00, 0x69, + 0x00, 0x6e, 0x05, 0xe0, 0x7f, 0x20, 0x00, 0x01, 0x64, 0x00, 0x27, 0x00, + 0x45, 0x00, 0x73, 0x40, 0x7f, 0x5a, 0x67, 0x20, 0x7f, 0x65, 0x0d, 0xe0, + 0xff, 0x31, 0x7f, 0x20, 0x06, 0x21, 0x7f, 0x75, 0xdb, 0x21, 0x69, 0x32, + 0x01, 0x6f, 0x21, 0x83, 0x71, 0x7f, 0xf1, 0x22, 0x03, 0x05, 0x5a, 0xaf, + 0x00, 0x7f, 0x89, 0xed, 0x73, 0x59, 0x72, 0x2f, 0x6e, 0x20, 0x02, 0x5e, + 0x06, 0x5b, 0x1f, 0xec, 0xd3, 0xb8, 0xd2, 0x24, 0x00, 0xc6, 0x0c, 0xbe, + 0xa4, 0xc2, 0x98, 0xd3, 0x78, 0x7b, 0xc7, 0x06, 0x1b, 0xa3, 0x07, 0x11, + 0xff, 0x53, 0xff, 0x31, 0xfd, 0x64, 0x23, 0x73, 0x92, 0x03, 0x10, 0x6e, + 0x00, 0x68, 0x05, 0x22, 0x05, 0x1f, 0x04, 0x3e, 0x04, 0x00, 0x40, 0x04, + 0x42, 0x04, 0x2d, 0x00, 0x3e, 0x04, 0x40, 0x44, 0x20, 0x05, 0x21, 0x04, + 0x3f, 0x04, 0x35, 0x04, 0x0c, 0x39, 0x04, 0x3d, 0x04, 0x0d, 0xd4, 0xff, + 0x10, 0x0e, 0x70, 0x7f, 0x01, 0x06, 0x54, 0x06, 0x20, 0x01, 0x01, 0x20, + 0x06, 0x07, 0x20, 0x05, 0x01, 0x01, 0x80, 0x58, 0x17, 0x03, 0x2f, 0xa2, + 0x30, 0xea, 0x30, 0xde, 0xd1, 0x05, 0xa8, 0x07, 0xff, 0xff, 0x41, 0x28, + 0x15, 0x69, 0x00, 0x6d, 0x05, 0x86, 0x07, 0x81, 0x10, 0x0f, 0xf0, 0x7f, + 0x3f, 0x96, 0xcc, 0x91, 0x6c, 0x9a, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, + 0x44, 0xc5, 0xac, 0xb9, 0xc8, 0xb9, 0xa0, 0x10, 0x06, 0x93, 0x7f, 0x10, + 0x28, 0x15, 0x38, 0x04, 0x3c, 0x04, 0x30, 0xd2, 0x05, 0x68, 0x07, 0x10, + 0x17, 0xf4, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x8f, 0x07, 0x6c, 0x28, 0x17, 0x04, 0x00, 0x2f, 0xab, + 0x30, 0xed, 0x30, 0xcb, 0x30, 0xde, 0x55, 0x5d, 0x06, 0x78, 0x19, 0x43, + 0x2f, 0x9d, 0x72, 0x2f, 0xb3, 0x6e, 0x2f, 0x23, 0x80, 0x10, 0x16, 0x30, + 0x7f, 0x61, 0x53, 0x57, 0x7f, 0x3c, 0x5c, 0xe1, 0x40, 0x90, 0x06, 0x7b, + 0x19, 0x74, 0xce, 0x5c, 0xb8, 0xc8, 0xb2, 0x0a, 0x20, 0x00, 0xfc, 0xc8, + 0x10, 0x06, 0x53, 0x7f, 0x1a, 0x28, 0x11, 0x40, 0x0d, 0x04, 0x3e, 0x04, + 0x3d, 0x28, 0x1d, 0x10, 0x1e, 0x34, 0xff, 0x03, 0x38, 0x0c, 0x28, 0x02, + 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x7a, 0x20, 0x07, 0x54, + 0x28, 0x17, 0x05, 0x2f, 0xde, 0x30, 0xb8, 0x35, 0x30, 0xe3, 0x28, 0x1b, + 0x06, 0x78, 0x19, 0x4d, 0x2f, 0xa9, 0x79, 0x68, 0x1b, 0x81, 0x10, 0x16, + 0x30, 0x7f, 0x6c, 0x9a, 0x9a, 0x4e, 0x57, 0x7f, 0x06, 0x98, 0x17, 0x03, + 0xc8, 0xb9, 0x7c, 0xc5, 0x5c, 0xb8, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, + 0x46, 0x1c, 0x28, 0x17, 0x39, 0x04, 0x4f, 0x48, 0x1b, 0x10, 0x1e, 0x34, + 0xff, 0x04, 0x94, 0x38, 0x0c, 0x03, 0x04, 0x20, 0x06, 0x04, 0x20, 0x05, + 0x04, 0x04, 0x10, 0x43, 0x07, 0xa0, 0x28, 0x17, 0x06, 0x2f, 0xca, 0x30, + 0x11, 0xea, 0x30, 0xd0, 0x06, 0x88, 0x15, 0x00, 0x00, 0x4e, 0x4f, 0xaf, + 0x18, 0x69, 0x00, 0x76, 0x2f, 0xb7, 0x10, 0x16, 0x30, 0x7f, 0xb3, 0x7e, + 0xcc, 0x10, 0x91, 0xe6, 0x74, 0x06, 0x98, 0x17, 0x98, 0xb0, 0xac, 0xb9, + 0x34, 0x14, 0xbc, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x1d, 0x28, 0x17, + 0x40, 0x04, 0x1a, 0x38, 0x04, 0x32, 0x28, 0x1f, 0x10, 0x1e, 0x34, 0xff, + 0x05, 0x38, 0x0c, 0x04, 0x50, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, 0x05, + 0x05, 0x53, 0x07, 0x40, 0x7e, 0x28, 0x17, 0x07, 0x2f, 0xbb, 0x30, 0xf3, + 0x30, 0x05, 0xc8, 0x30, 0xfb, 0x30, 0xa2, 0x20, 0x07, 0xc9, 0x28, 0x23, + 0x14, 0xe5, 0x30, 0xfc, 0x05, 0xc8, 0x25, 0x53, 0x2f, 0xaf, 0x69, 0x00, + 0x01, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x41, 0x20, 0x07, 0x44, 0x64, + 0x2f, 0xb9, 0x65, 0x00, 0x77, 0x10, 0x15, 0x80, 0x7f, 0x23, 0x57, 0x02, + 0x89, 0x5b, 0xb7, 0x5f, 0x81, 0x9c, 0x06, 0x78, 0x19, 0x38, 0x00, 0xc1, + 0x78, 0xc7, 0xb8, 0xd2, 0x64, 0xc5, 0xdc, 0x18, 0xb4, 0xe8, 0xb8, 0x06, + 0x38, 0x1d, 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x35, 0x00, 0x04, 0x39, 0x04, + 0x3d, 0x04, 0x42, 0x04, 0x20, 0x2b, 0x00, 0x2d, 0x20, 0x07, 0x34, 0x28, + 0x25, 0x4e, 0x05, 0xa8, 0x21, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x06, 0x07, + 0x07, 0x20, 0x01, 0x06, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x05, 0x06, 0x06, + 0x86, 0x07, 0x8b, 0x28, 0x17, 0x08, 0x88, 0x17, 0x07, 0xc7, 0x30, 0xd3, + 0x30, 0xc3, 0x28, 0x19, 0x05, 0xb8, 0x13, 0xf8, 0x17, 0x54, 0x44, 0x2f, + 0xbb, 0x76, 0x2f, 0xbb, 0x64, 0x10, 0x15, 0xa0, 0x7f, 0x23, 0x57, 0x0c, + 0x34, 0x62, 0xf4, 0x7e, 0x06, 0x78, 0x15, 0x78, 0x17, 0x70, 0xb3, 0x03, + 0x74, 0xc7, 0x44, 0xbe, 0xdc, 0xb4, 0x06, 0x18, 0x19, 0x0e, 0xf3, 0x7f, + 0x80, 0xb8, 0x17, 0x14, 0x04, 0x4d, 0x04, 0x32, 0x04, 0x38, 0xc5, 0x28, + 0x1b, 0x10, 0x1d, 0x94, 0xff, 0x07, 0x08, 0x08, 0x20, 0x01, 0x07, 0x20, + 0x06, 0x41, 0x0a, 0x20, 0x05, 0x07, 0x07, 0xae, 0x07, 0x9d, 0x28, 0x17, + 0x41, 0x09, 0x88, 0x17, 0xb8, 0x30, 0xe7, 0x30, 0xfc, 0x20, 0x05, 0xab, + 0x06, 0xb8, 0x17, 0x47, 0x2f, 0xa9, 0x6f, 0x2f, 0xaf, 0x67, 0x2f, 0xb1, + 0x10, 0x15, 0x70, 0x7f, 0x02, 0x23, 0x57, 0x54, 0x4e, 0xbb, 0x6c, 0x07, + 0x08, 0x17, 0xc8, 0x38, 0xc0, 0xc9, 0x06, 0x18, 0x13, 0x0f, 0x33, 0x7f, + 0xd8, 0x17, 0x36, 0x04, 0x3e, 0x2c, 0x04, 0x40, 0x28, 0x17, 0x36, 0x05, + 0x88, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x08, 0x09, 0x58, 0x09, 0x20, 0x01, + 0x08, 0x40, 0x06, 0x38, 0x22, 0x8f, 0x07, 0x5a, 0xa8, 0x28, 0x17, 0x0a, + 0x88, 0x17, 0xd1, 0x28, 0x1d, 0xea, 0x30, 0xc3, 0x35, 0x30, 0xaf, 0x05, + 0xe8, 0x19, 0xbf, 0xaf, 0x50, 0x2f, 0xbb, 0x74, 0x28, 0x17, 0x04, 0x69, + 0x00, 0x63, 0x00, 0x6b, 0x10, 0x15, 0x60, 0x7f, 0x23, 0x57, 0x00, 0x15, + 0x5e, 0x79, 0x72, 0xcc, 0x91, 0x4b, 0x51, 0xc0, 0x06, 0x58, 0x1b, 0x58, + 0x17, 0x28, 0xd3, 0xb8, 0xd2, 0xad, 0xb9, 0xe2, 0x06, 0x38, 0x19, 0x0e, + 0xf3, 0x7f, 0xb8, 0x17, 0x1f, 0x04, 0x30, 0x28, 0x1f, 0x40, 0x0c, 0x04, + 0x38, 0x04, 0x3a, 0x06, 0x48, 0x17, 0x10, 0x16, 0x34, 0xff, 0x09, 0x0a, + 0x54, 0x0a, 0x20, 0x01, 0x09, 0x20, 0x06, 0x0b, 0x20, 0x05, 0x09, 0x09, + 0x11, 0x3d, 0x07, 0x23, 0x28, 0x17, 0x0b, 0x2f, 0xb5, 0x28, 0x17, 0x00, + 0xfb, 0x30, 0xd5, 0x30, 0xa7, 0x30, 0xeb, 0x30, 0x4a, 0xca, 0x28, 0x23, + 0xc9, 0x30, 0x06, 0x1c, 0xaf, 0x6e, 0x2f, 0xab, 0x46, 0xb6, 0x2f, 0xab, + 0x72, 0x2f, 0xb7, 0x30, 0x0d, 0x64, 0x2f, 0xb5, 0x10, 0x15, 0x70, 0x7f, + 0x23, 0x00, 0x57, 0x39, 0x8d, 0x14, 0x5c, 0x57, 0x53, 0x1a, 0x10, 0x59, + 0x02, 0x5e, 0x06, 0x38, 0x17, 0xb0, 0xc0, 0x98, 0xd3, 0x03, 0x74, 0xb9, + 0x9c, 0xb0, 0xc4, 0xb3, 0x06, 0x38, 0x95, 0x0f, 0x13, 0x7f, 0x41, 0x21, + 0x28, 0x0b, 0x3d, 0x04, 0x2d, 0x00, 0x24, 0x28, 0x1f, 0x63, 0x40, 0x28, + 0x1f, 0x30, 0x0d, 0x34, 0x04, 0x3e, 0x05, 0xc8, 0x17, 0x10, 0x16, 0xb4, + 0xff, 0x19, 0x0a, 0x0b, 0x0b, 0x20, 0x01, 0x28, 0x15, 0x0b, 0x08, 0x20, + 0x05, 0x04, 0x0a, 0x0a, 0x50, 0x07, 0x4b, 0x28, 0x17, 0x0c, 0x2f, 0x00, + 0xc8, 0x30, 0xd0, 0x30, 0xb4, 0x30, 0xf6, 0x5c, 0x8a, 0x06, 0x54, 0x95, + 0x00, 0x00, 0x54, 0x28, 0x03, 0x62, 0x2f, 0xb3, 0x67, 0xc0, 0x05, 0xa8, + 0x0b, 0x10, 0x0f, 0xb0, 0x7f, 0x1a, 0x59, 0xf4, 0x5d, 0xe5, 0x54, 0x40, + 0x9b, 0x06, 0x82, 0xff, 0xa0, 0xd1, 0x14, 0xbc, 0xe0, 0xac, 0x0a, 0x20, + 0x00, 0x2c, 0xc1, 0x10, 0x06, 0x53, 0x7f, 0x22, 0x28, 0x03, 0x31, 0xb1, + 0x28, 0x1b, 0x33, 0x05, 0xa8, 0x0b, 0x10, 0x17, 0xb4, 0xff, 0x0b, 0x0c, + 0x0c, 0x20, 0x01, 0x50, 0x0b, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x0b, 0x0b, + 0xf3, 0x07, 0x40, 0xd0, 0x28, 0x17, 0x0d, 0x2f, 0xd3, 0x30, 0xaf, 0x30, + 0x00, 0xc8, 0x30, 0xea, 0x30, 0xa2, 0x30, 0xde, 0x5d, 0x80, 0x06, 0x3d, + 0x2f, 0x56, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0xa8, 0x2f, 0xa1, 0x72, + 0x20, 0x09, 0x61, 0x10, 0x16, 0x00, 0x7f, 0xf4, 0x7e, 0x1a, 0x01, 0x59, + 0x29, 0x52, 0x9a, 0x4e, 0xe1, 0x90, 0x06, 0x5f, 0xaf, 0x00, 0x45, 0xbe, + 0xa0, 0xd1, 0xac, 0xb9, 0x44, 0xc5, 0x08, 0x20, 0x00, 0xfc, 0xc8, 0x0e, + 0x73, 0x7f, 0x74, 0x00, 0xf3, 0x80, 0x06, 0x63, 0xfd, 0x00, 0x00, 0x12, + 0x04, 0x38, 0x04, 0x3a, 0x2b, 0x04, 0x42, 0x28, 0x1d, 0x40, 0x20, 0x09, + 0x4f, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x0c, 0x0d, 0x0d, + 0x20, 0x01, 0x28, 0x15, 0x0d, 0x02, 0x20, 0x05, 0x04, 0x0c, 0x0c, 0x4c, + 0x07, 0x5a, 0x28, 0x17, 0x0e, 0x2f, 0x04, 0xdd, 0x30, 0xa4, 0x30, 0xf3, + 0x28, 0x19, 0xd5, 0x30, 0x01, 0xa9, 0x30, 0xfc, 0x30, 0xc6, 0x30, 0xa3, + 0x20, 0x0d, 0xa2, 0x05, 0xbf, 0xb8, 0x50, 0x2f, 0xaf, 0x69, 0x00, 0x6e, + 0x28, 0x19, 0x20, 0x2c, 0x00, 0x46, 0x48, 0x1d, 0x74, 0x40, 0x0f, 0x10, + 0x15, 0x70, 0x7f, 0x8f, 0x79, 0x02, 0xf7, 0x5e, 0xac, 0x5c, 0x02, 0x5e, + 0x06, 0x5f, 0xad, 0x00, 0x00, 0x00, 0xec, 0xd3, 0x78, 0xc7, 0xb8, 0xd2, + 0xec, 0x07, 0xd3, 0x74, 0xb9, 0xf4, 0xd2, 0x06, 0x3f, 0xb0, 0x07, 0x33, + 0x7f, 0x33, 0xfd, 0x51, 0x6f, 0x06, 0x63, 0xff, 0x1f, 0x28, 0x11, 0x39, + 0x04, 0x3d, 0x28, 0x19, 0x15, 0x20, 0x00, 0x24, 0x48, 0x1d, 0x42, 0x28, + 0x29, 0x3d, 0x05, 0x88, 0x1f, 0x8a, 0x10, 0x16, 0xf4, 0xff, 0x0d, 0x05, + 0x05, 0x20, 0x01, 0x0d, 0x20, 0x06, 0x06, 0x83, 0x20, 0x05, 0x0d, 0x0d, + 0x3b, 0x07, 0x24, 0x28, 0x17, 0x00, 0x1f, 0xff, 0x15, 0x01, 0x06, 0x06, + 0x20, 0x01, 0x01, 0x20, 0x06, 0x07, 0x20, 0x05, 0x12, 0x01, 0x01, 0x02, + 0x30, 0x04, 0x01, 0x02, 0x40, 0x06, 0x02, 0x09, 0x02, 0x02, 0x02, 0x03, + 0x30, 0x04, 0x02, 0x03, 0x20, 0x06, 0x44, 0x03, 0x20, 0x05, 0x03, 0x03, + 0x04, 0x30, 0x04, 0x03, 0x04, 0xa2, 0x20, 0x06, 0x04, 0x20, 0x05, 0x04, + 0x04, 0x05, 0x30, 0x04, 0x04, 0x59, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, + 0x20, 0x6d, 0x07, 0x07, 0x20, 0x01, 0x99, 0x20, 0x4d, 0x07, 0x0c, 0x20, + 0x05, 0x20, 0x55, 0x08, 0x08, 0x20, 0x01, 0x59, 0x07, 0x20, 0x06, 0x0a, + 0x20, 0x05, 0x20, 0x07, 0x09, 0x09, 0x20, 0x01, 0x62, 0x08, 0x40, 0x06, + 0x30, 0x1a, 0x09, 0x0a, 0x0a, 0x20, 0x01, 0x09, 0xb3, 0x20, 0x06, 0x0b, + 0x20, 0x05, 0x20, 0x07, 0x0b, 0x0b, 0x20, 0x01, 0x20, 0x0d, 0x39, 0x0b, + 0x08, 0x20, 0x05, 0x20, 0x15, 0x38, 0xd4, 0x0c, 0x0b, 0x20, 0x06, 0x7c, + 0x0d, 0x20, 0x05, 0x20, 0x07, 0xe8, 0xef, 0xf0, 0xe7, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, 0x11, 0x01, 0x00, 0x00, + 0x30, 0x01, 0x30, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x43, 0x0f, 0x6b, 0xcd, 0x00, 0x00, 0x00, + 0x01, 0x30, 0xbf, 0x30, 0xfc, 0x30, 0xaf, 0x00, 0x30, 0xb9, 0x30, 0xfb, + 0x30, 0xab, 0x30, 0xa4, 0x21, 0x30, 0xb3, 0x20, 0x09, 0xf8, 0x8a, 0xf6, + 0x5c, 0x05, 0x98, 0x2b, 0x00, 0x54, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6b, + 0x00, 0x00, 0x73, 0x00, 0x20, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x50, 0x64, + 0x20, 0x07, 0x43, 0x20, 0x09, 0x69, 0x00, 0x63, 0x00, 0x55, 0x6f, 0x40, + 0x15, 0x49, 0x20, 0x1b, 0x6c, 0x60, 0x1b, 0x73, 0x04, 0x08, 0xc4, 0x5b, + 0xce, 0x20, 0x5b, 0x65, 0x40, 0x7d, 0x50, 0x89, 0x71, 0x20, 0x8f, 0x30, + 0x0f, 0x5b, 0x2d, 0x20, 0x15, 0x74, 0x20, 0x05, 0x30, 0x8b, 0xef, 0x80, + 0x15, 0x04, 0xb0, 0xff, 0x55, 0x2d, 0x21, 0x01, 0x75, 0x00, 0x21, 0x01, + 0x69, 0x21, 0x15, 0x73, 0x20, 0xa3, 0x77, 0x6c, 0x21, 0x1d, 0x04, 0x19, + 0xc3, 0x31, 0x5d, 0x6f, 0x41, 0x03, 0x71, 0x01, 0x51, 0x8b, 0xfa, 0x30, + 0x0f, 0xb1, 0x87, 0x04, 0x7a, 0x3d, 0x71, 0xdd, 0x91, 0x81, 0x63, 0x60, + 0x0d, 0x79, 0x80, 0x05, 0x40, 0x81, 0x79, 0x72, 0x4b, 0x51, 0xaf, 0x65, + 0x8c, 0x00, 0x54, 0xef, 0x51, 0xd1, 0x79, 0xaf, 0x65, 0xa4, 0x30, 0x7f, + 0x9b, 0x05, 0xa2, 0xfb, 0x4b, 0x98, 0xd1, 0x6c, 0xd0, 0xa4, 0x41, 0xc2, + 0x2b, 0x9c, 0xcf, 0x74, 0xc7, 0xe4, 0xce, 0x30, 0x09, 0x0d, 0x1c, 0xc8, + 0xc4, 0xb3, 0x06, 0x33, 0x7f, 0x32, 0x7f, 0x65, 0x23, 0x81, 0xbc, 0xd3, + 0x7f, 0x65, 0x23, 0x89, 0x73, 0x7d, 0x30, 0x1d, 0x04, 0x12, 0x7f, 0x6c, + 0x00, 0x60, 0x68, 0x00, 0x41, 0xff, 0x05, 0x52, 0x81, 0x22, 0x04, 0x51, + 0x04, 0x40, 0x00, 0x04, 0x3a, 0x04, 0x41, 0x04, 0x20, 0x00, 0x38, 0x82, + 0x20, 0x03, 0x1a, 0x04, 0x30, 0x04, 0x39, 0x20, 0x0f, 0x3e, 0xe7, 0x20, + 0x11, 0x0d, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x01, 0xd0, 0x01, + 0x58, 0x17, 0x01, 0x10, 0x27, 0x80, 0x3f, 0xff, 0x11, 0x58, 0xb0, 0x01, + 0x11, 0x34, 0x00, 0x00, 0x30, 0x01, 0x31, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xa8, 0x1b, 0x38, + 0xc9, 0x00, 0x00, 0x00, 0x02, 0x31, 0xb3, 0x30, 0xed, 0x30, 0xf3, 0x00, + 0x30, 0xd3, 0x30, 0xa2, 0x30, 0x79, 0x72, 0x25, 0x10, 0x52, 0x3a, 0x53, + 0x05, 0xf8, 0x25, 0x44, 0x00, 0x69, 0x00, 0x05, 0x73, 0x00, 0x74, 0x00, + 0x72, 0x20, 0x07, 0x63, 0x20, 0x07, 0x05, 0x20, 0x00, 0x6f, 0x00, 0x66, + 0x20, 0x05, 0x43, 0x20, 0x07, 0x01, 0x6c, 0x00, 0x75, 0x00, 0x6d, 0x00, + 0x62, 0x20, 0x21, 0x51, 0x61, 0x04, 0x88, 0xbc, 0x57, 0x20, 0x5b, 0x73, + 0x00, 0x68, 0x20, 0x85, 0x14, 0x6e, 0x00, 0x67, 0x20, 0x87, 0x6f, 0x20, + 0x07, 0x20, 0x00, 0x45, 0x28, 0x00, 0x20, 0x97, 0x64, 0x00, 0x65, 0x00, + 0x20, 0x97, 0x29, 0x0a, 0xe0, 0xff, 0xbb, 0x91, 0x7f, 0x65, 0x21, 0x85, + 0x30, 0xff, 0x30, 0xe9, 0x69, 0x05, 0x81, 0x81, 0xb1, 0xff, 0xe0, 0x70, + 0x7d, 0x00, 0x31, 0x67, 0x04, 0x7a, 0xbd, 0xe5, 0x54, 0x26, 0x4f, 0xd4, + 0x06, 0x6b, 0x9a, 0x4e, 0x79, 0x72, 0x06, 0x12, 0xfb, 0x3b, 0x9a, 0xec, + 0x00, 0xce, 0xfc, 0xb7, 0x44, 0xbe, 0x44, 0xc5, 0x20, 0x01, 0x00, 0xb9, + 0xd2, 0xc4, 0xbc, 0x6c, 0xad, 0x0d, 0xf3, 0x7f, 0xa0, 0x00, 0xd1, 0xff, + 0xfa, 0x05, 0x03, 0xff, 0x1e, 0x04, 0x3a, 0x04, 0x40, 0x00, 0x04, 0x43, + 0x04, 0x33, 0x04, 0x20, 0x00, 0x1a, 0x08, 0x04, 0x3e, 0x04, 0x3b, 0x20, + 0x0b, 0x3c, 0x04, 0x31, 0x06, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0d, 0xf1, + 0x7f, 0x10, 0x0e, 0x30, 0x7f, 0x01, 0x00, 0x09, 0x32, 0x08, 0x0d, 0x0d, + 0x01, 0x01, 0x09, 0x01, 0x0d, 0x28, 0x09, 0x01, 0x01, 0x01, 0x01, 0x58, + 0x17, 0x00, 0x03, 0x31, 0xa2, 0x30, 0xe9, 0x30, 0xb9, 0x30, 0x0b, 0xab, + 0x30, 0xde, 0x5d, 0x06, 0x5f, 0xb7, 0x41, 0x27, 0xfd, 0x37, 0x99, 0x60, + 0x6b, 0x04, 0xa7, 0xfb, 0x10, 0x10, 0xb0, 0x7f, 0x3f, 0x96, 0xc9, 0x62, + 0xaf, 0x10, 0x65, 0xa0, 0x52, 0x06, 0x72, 0xff, 0x4c, 0xc5, 0x98, 0xb7, + 0x00, 0xa4, 0xc2, 0x74, 0xce, 0x20, 0x00, 0xfc, 0xc8, 0xa8, 0x0e, 0xb3, + 0x7f, 0x63, 0x06, 0x63, 0xff, 0x10, 0x28, 0x09, 0x4f, 0x04, 0x41, 0xb2, + 0x28, 0x1d, 0x30, 0x05, 0x48, 0x07, 0x10, 0x17, 0xf4, 0xff, 0x02, 0x02, + 0x70, 0x01, 0x04, 0x80, 0x40, 0x0a, 0x75, 0x29, 0x6a, 0xa0, 0x00, 0x00, + 0x04, 0x8a, 0x48, 0x17, 0xd0, 0x30, 0xde, 0x06, 0xe8, 0x17, 0x62, 0x2f, + 0xb5, 0x6d, 0xc0, 0x06, 0x48, 0x19, 0x10, 0x0e, 0xf0, 0x7f, 0x9a, 0x4e, + 0xc9, 0x62, 0xf4, 0x5d, 0x20, 0x6c, 0x9a, 0x06, 0x7b, 0x17, 0x68, 0xc5, + 0x7c, 0xb7, 0x30, 0x1c, 0xbc, 0xc8, 0xb9, 0x06, 0xd8, 0x17, 0x0e, 0x93, + 0x7f, 0x38, 0x17, 0x30, 0x04, 0x58, 0x31, 0x28, 0x15, 0x3c, 0x06, 0x48, + 0x19, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x01, 0x01, 0xa8, 0x20, 0x01, 0x03, + 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x04, 0x02, 0x17, 0xa2, 0xc2, + 0x00, 0x00, 0x05, 0x28, 0x17, 0xfc, 0x03, 0x30, 0xab, 0x30, 0xf3, 0x30, + 0xbd, 0x20, 0x07, 0x06, 0x3d, 0x33, 0x17, 0x41, 0x00, 0x72, 0x4f, 0xab, + 0x6e, 0x2f, 0xb3, 0x3f, 0xb7, 0x10, 0x15, 0xf0, 0x7f, 0x02, 0x3f, 0x96, + 0xaf, 0x80, 0x72, 0x82, 0x06, 0x7b, 0x15, 0x00, 0x01, 0x00, 0x44, 0xc5, + 0x78, 0xce, 0x8c, 0xc1, 0x06, 0x78, 0x15, 0x82, 0x0f, 0x13, 0x7f, 0x10, + 0x04, 0x40, 0x04, 0x3a, 0x28, 0x19, 0x3d, 0x2c, 0x04, 0x37, 0x28, 0x1f, + 0x41, 0x06, 0x08, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x04, 0x04, 0xa0, 0x70, + 0x01, 0x06, 0x40, 0x0a, 0xb5, 0x18, 0x60, 0xbe, 0x00, 0x20, 0x00, 0x06, + 0x28, 0x17, 0xea, 0x30, 0xbe, 0x30, 0xca, 0xc1, 0x06, 0x48, 0x13, 0x78, + 0x17, 0x69, 0x00, 0x7a, 0x00, 0x6f, 0x28, 0x19, 0xc0, 0x06, 0x5f, 0xaf, + 0x10, 0x0e, 0xd0, 0x7f, 0x9a, 0x4e, 0x29, 0x52, 0x51, 0x68, 0x20, 0xa3, + 0x90, 0x06, 0x78, 0x19, 0x60, 0xc5, 0xac, 0xb9, 0x70, 0x1d, 0xc8, 0x98, + 0xb0, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x38, 0x17, 0x38, 0x28, 0x13, + 0x58, 0x3e, 0x28, 0x19, 0x30, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, + 0x05, 0x03, 0x03, 0xa8, 0x20, 0x01, 0x05, 0x20, 0x06, 0x05, 0x20, 0x05, + 0x05, 0x05, 0xc9, 0x00, 0x17, 0x4e, 0xb0, 0x00, 0x00, 0x07, 0x31, 0xab, + 0x80, 0x28, 0x17, 0xd5, 0x30, 0xa9, 0x30, 0xeb, 0x30, 0xcb, 0x2a, 0x30, + 0xa2, 0x06, 0x28, 0x1d, 0x43, 0x2f, 0xab, 0x6c, 0x28, 0x19, 0x66, 0xad, + 0x28, 0x19, 0x72, 0x2f, 0xb5, 0x69, 0x05, 0xe8, 0x1d, 0x00, 0x10, 0x7f, + 0x65, 0x05, 0xcf, 0xb3, 0x58, 0x4b, 0x00, 0x20, 0x7f, 0x6e, 0x0e, 0xc1, + 0x7f, 0x05, 0xda, 0x1d, 0xa0, 0x52, 0x29, 0x01, 0x52, 0x8f, 0x79, 0x3c, + 0x5c, 0x9a, 0x4e, 0x06, 0x5b, 0x19, 0x00, 0x98, 0xce, 0xac, 0xb9, 0xec, + 0xd3, 0xc8, 0xb2, 0x35, 0x44, 0xc5, 0x06, 0x58, 0x19, 0x00, 0x13, 0x7f, + 0xeb, 0x06, 0x63, 0xff, 0xf3, 0x06, 0x43, 0xff, 0x55, 0x1a, 0x28, 0x0d, + 0x3b, 0x28, 0x19, 0x44, 0x28, 0x19, 0x40, 0x28, 0x1b, 0x1c, 0x38, 0x04, + 0x4f, 0x05, 0xc8, 0x1d, 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x06, + 0x05, 0x05, 0x05, 0x10, 0x05, 0x05, 0x06, 0x20, 0x06, 0x12, 0x20, 0x05, + 0x00, 0x06, 0x06, 0x6f, 0x1b, 0x9b, 0xa9, 0x00, 0x00, 0x00, 0x08, 0x31, + 0xb3, 0x30, 0xed, 0x30, 0xe9, 0x30, 0x6c, 0xc9, 0x06, 0x28, 0x11, 0x78, + 0x17, 0x6f, 0x28, 0x17, 0x38, 0x13, 0x61, 0x00, 0x60, 0x64, 0x2f, 0xb5, + 0x10, 0x15, 0xf0, 0x7f, 0xd1, 0x79, 0x57, 0x7f, 0xc9, 0x10, 0x62, 0x1a, + 0x59, 0x06, 0x72, 0xff, 0x5c, 0xcf, 0x5c, 0xb8, 0x0d, 0x7c, 0xb7, 0xc4, + 0xb3, 0x06, 0x58, 0x15, 0x0f, 0x13, 0x7f, 0x1a, 0x28, 0x0f, 0x46, 0x3b, + 0x48, 0x13, 0x30, 0x04, 0x34, 0x28, 0x1b, 0x10, 0x1d, 0xf4, 0xff, 0x07, + 0x02, 0x06, 0x08, 0x05, 0x08, 0x08, 0x07, 0x20, 0x06, 0x15, 0x00, 0x06, + 0x07, 0x07, 0x07, 0x07, 0x42, 0x1c, 0x59, 0x08, 0xb5, 0x00, 0x00, 0x09, + 0x28, 0x17, 0xcd, 0x30, 0xc6, 0x00, 0x30, 0xa3, 0x30, 0xab, 0x30, 0xc3, + 0x30, 0xc8, 0xd0, 0x06, 0x28, 0x1d, 0x38, 0x17, 0x6e, 0x2f, 0xa7, 0x65, + 0x00, 0x63, 0x00, 0x46, 0x74, 0x2f, 0xb7, 0x63, 0x00, 0x75, 0x20, 0x07, + 0x10, 0x15, 0x90, 0x7f, 0xb7, 0x01, 0x5e, 0x85, 0x6d, 0xc4, 0x72, 0x3c, + 0x68, 0x06, 0x7b, 0x17, 0x00, 0x54, 0xcf, 0x24, 0xb1, 0xf0, 0xd2, 0xf7, + 0xce, 0xe8, 0x06, 0xb8, 0x17, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x3d, 0x20, + 0x01, 0x35, 0x04, 0x3a, 0x0b, 0x04, 0x42, 0x04, 0x38, 0x20, 0x05, 0x43, + 0x20, 0x07, 0x10, 0x1d, 0x94, 0xff, 0x02, 0x08, 0x07, 0x09, 0x06, 0x09, + 0x09, 0x28, 0x19, 0x09, 0x00, 0x16, 0x07, 0x08, 0x08, 0x08, 0x08, 0xb2, + 0x1d, 0x00, 0x50, 0xcc, 0x00, 0x00, 0x0a, 0x31, 0xc7, 0x30, 0x01, 0xe9, + 0x30, 0xa6, 0x30, 0xa7, 0x30, 0xa2, 0x06, 0x28, 0x13, 0xaa, 0x3f, 0xff, + 0x44, 0x28, 0x11, 0x6c, 0x2f, 0xab, 0x77, 0x2f, 0xaf, 0x72, 0xc0, 0x28, + 0x1d, 0x10, 0x15, 0xf0, 0x7f, 0x79, 0x72, 0xc9, 0x62, 0x4e, 0x53, 0x80, + 0x06, 0x78, 0x15, 0x00, 0x00, 0x78, 0xb3, 0x7c, 0xb7, 0xe8, 0x1a, 0xc6, + 0xb4, 0xc5, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x14, 0x28, 0x11, 0x3b, + 0x00, 0x04, 0x30, 0x04, 0x32, 0x04, 0x4d, 0x04, 0x40, 0xc0, 0x05, 0xa8, + 0x0f, 0x10, 0x17, 0x74, 0xff, 0x09, 0x08, 0x0c, 0x07, 0x0c, 0x0c, 0x80, + 0x28, 0x19, 0x0c, 0x0d, 0x08, 0x09, 0x09, 0x09, 0x09, 0x00, 0xd8, 0x1b, + 0x4c, 0xca, 0x00, 0x00, 0x0b, 0x31, 0x01, 0xd5, 0x30, 0xed, 0x30, 0xea, + 0x30, 0xc0, 0x06, 0x68, 0x15, 0x14, 0x00, 0x00, 0x46, 0x28, 0x15, 0x6f, + 0x28, 0x11, 0x69, 0x00, 0x7c, 0x64, 0x28, 0x1d, 0x06, 0xd0, 0x7f, 0x06, + 0x18, 0x95, 0x07, 0xd0, 0xff, 0x0e, 0x30, 0x7f, 0x5b, 0x4f, 0x02, 0x57, + 0x7f, 0xcc, 0x91, 0xbe, 0x8f, 0x06, 0x78, 0x19, 0x0c, 0x01, 0xd5, 0x5c, + 0xb8, 0xac, 0xb9, 0xe4, 0xb2, 0x06, 0x78, 0x17, 0xaa, 0x07, 0x33, 0x7f, + 0xf3, 0x06, 0xa3, 0xff, 0x24, 0x28, 0x15, 0x3e, 0x28, 0x11, 0x38, 0x38, + 0x04, 0x34, 0x28, 0x1d, 0x10, 0x0e, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x0a, + 0x0a, 0x0d, 0x00, 0x09, 0x0e, 0x0e, 0x0a, 0x0a, 0x0a, 0x0e, 0x31, 0x81, + 0x20, 0x04, 0x0a, 0x0a, 0xa5, 0x15, 0x12, 0xc4, 0x24, 0x95, 0x00, 0x31, + 0xb8, 0x30, 0xe7, 0x30, 0xfc, 0x30, 0xb8, 0x2d, 0x30, 0xa2, 0x06, 0x68, + 0x19, 0x47, 0x2f, 0xaf, 0x38, 0x17, 0x67, 0x28, 0x19, 0x8f, 0x06, 0x38, + 0x17, 0x47, 0x00, 0xe9, 0x80, 0x7f, 0x06, 0x38, 0x17, 0x07, 0x10, 0xff, + 0x0e, 0xd0, 0x7f, 0x02, 0x50, 0x4f, 0xbb, 0x6c, 0x9a, 0x4e, 0x06, 0x7b, + 0x15, 0x00, 0x01, 0x00, 0x70, 0xc8, 0xc0, 0xc9, 0x44, 0xc5, 0x06, 0x78, + 0x15, 0xe2, 0x07, 0x52, 0x7f, 0x38, 0x17, 0x06, 0x73, 0xff, 0x14, 0x04, + 0x36, 0x48, 0x17, 0x34, 0x8e, 0x20, 0x07, 0x38, 0x04, 0x4f, 0x06, 0x08, + 0x19, 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x0b, 0x00, 0x0b, 0x0e, + 0x0a, 0x0f, 0x0f, 0x0b, 0x0b, 0x0b, 0x20, 0x0f, 0x0e, 0x20, 0x04, 0x0b, + 0x0b, 0xff, 0x17, 0xfe, 0x00, 0xc3, 0x00, 0x00, 0x0d, 0x31, 0xcf, 0x30, + 0xef, 0x35, 0x30, 0xa4, 0x06, 0x68, 0x13, 0x3f, 0xff, 0x48, 0x2f, 0x25, + 0x77, 0x2f, 0x29, 0x6d, 0x69, 0x2f, 0xb1, 0x06, 0xb0, 0x7f, 0xef, 0x0e, + 0xe0, 0xff, 0x06, 0xd1, 0x7f, 0xe1, 0x06, 0x61, 0xfd, 0x00, 0x00, 0x00, + 0x0f, 0x59, 0x01, 0x5a, 0x37, 0x59, 0x81, 0x06, 0x98, 0x17, 0x58, 0xd5, + 0x40, 0xc6, 0x74, 0xc7, 0x06, 0x98, 0x17, 0xa8, 0x07, 0x32, 0xff, 0x76, + 0x2f, 0x29, 0xed, 0x06, 0x69, 0x98, 0x13, 0x04, 0x30, 0x2e, 0x04, 0x32, + 0x20, 0x03, 0x39, 0x28, 0x15, 0x10, 0x06, 0x93, 0xff, 0x10, 0x06, 0x90, + 0xff, 0x0c, 0x00, 0x0c, 0x0f, 0x0b, 0x10, 0x10, 0x0c, 0x0c, 0x0c, 0xc0, + 0x30, 0x03, 0x20, 0x06, 0x26, 0x0f, 0xbf, 0x8f, 0x00, 0x00, 0x16, 0x0e, + 0x31, 0xa2, 0x28, 0x15, 0xaa, 0x28, 0x1b, 0x06, 0x7d, 0x31, 0x49, 0xf0, + 0x2f, 0xad, 0x38, 0x17, 0x06, 0x7d, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x7e, + 0x82, 0x65, 0x59, 0x20, 0xe6, 0x74, 0x06, 0x9b, 0x17, 0x44, 0xc5, 0x74, + 0xc7, 0x24, 0x1a, 0xc6, 0x40, 0xc6, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, + 0x10, 0x28, 0x11, 0x3e, 0xc0, 0x48, 0x19, 0x10, 0x1e, 0x54, 0xff, 0x0d, + 0x10, 0x13, 0x0f, 0x14, 0x14, 0x00, 0x0d, 0x0d, 0x10, 0x14, 0x02, 0x10, + 0x0d, 0x0d, 0x03, 0x0d, 0x0d, 0x95, 0x1d, 0x70, 0xbd, 0x2d, 0x2d, 0x48, + 0x17, 0x15, 0xc0, 0x30, 0xdb, 0x06, 0xa8, 0x17, 0x64, 0x2f, 0xb1, 0x68, + 0x28, 0x1d, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x31, 0x72, 0xbe, 0x8f, 0x77, + 0x83, 0x06, 0xd8, 0x17, 0x0e, 0xe4, 0xb2, 0x38, 0xd6, 0x06, 0x98, 0x17, + 0x0e, 0xd3, 0x7f, 0x38, 0x17, 0x34, 0xb0, 0x28, 0x15, 0x45, 0x28, 0x1d, + 0x10, 0x1e, 0x34, 0xff, 0x0e, 0x0d, 0x10, 0x0c, 0x00, 0x11, 0x11, 0x0e, + 0x0e, 0x0d, 0x11, 0x01, 0x0d, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x03, 0x1f, + 0x5e, 0xad, 0x81, 0x2b, 0x2d, 0x31, 0xa4, 0x30, 0xea, 0x30, 0xce, 0x28, + 0x1b, 0xa2, 0x06, 0x98, 0x17, 0x6c, 0x20, 0x01, 0x69, 0x00, 0x6e, 0x2f, + 0xb7, 0x69, 0x20, 0x00, 0x73, 0x10, 0x16, 0x00, 0x7f, 0x0a, 0x4f, 0x29, + 0x52, 0xfa, 0x10, 0x8b, 0x0a, 0x4f, 0x06, 0x7b, 0x17, 0x7c, 0xc7, 0xac, + 0xb9, 0x0c, 0x78, 0xb1, 0x74, 0xc7, 0x06, 0x98, 0x17, 0x0e, 0xd3, 0x7f, + 0x18, 0x04, 0x44, 0x3b, 0x20, 0x01, 0x38, 0x04, 0x3d, 0x28, 0x17, 0x39, + 0x04, 0x60, 0x41, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x0f, 0x0e, + 0x11, 0x0d, 0x12, 0x00, 0x12, 0x0f, 0x0f, 0x0e, 0x12, 0x10, 0x0e, 0x0f, + 0x00, 0x0f, 0x0f, 0x0f, 0x4d, 0x1c, 0x41, 0xc0, 0x00, 0x20, 0x00, 0x11, + 0x28, 0x17, 0xf3, 0x30, 0xc7, 0x30, 0xa3, 0x0a, 0x30, 0xa2, 0x30, 0xca, + 0x06, 0x48, 0x1b, 0x49, 0x28, 0x11, 0x64, 0xac, 0x28, 0x17, 0x61, 0x28, + 0x19, 0x61, 0x06, 0x4f, 0xaf, 0x10, 0x0e, 0xd0, 0x7f, 0x70, 0x53, 0x02, + 0x2c, 0x7b, 0x89, 0x5b, 0xb3, 0x7e, 0x06, 0x7b, 0x17, 0x78, 0x01, 0xc7, + 0x14, 0xb5, 0x60, 0xc5, 0x98, 0xb0, 0x06, 0x98, 0x17, 0xaa, 0x0e, 0xd3, + 0x7f, 0x18, 0x28, 0x11, 0x34, 0x28, 0x17, 0x30, 0x28, 0x19, 0x30, 0xc0, + 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x10, 0x0f, 0x12, 0x0e, 0x13, + 0x13, 0x00, 0x10, 0x10, 0x0f, 0x13, 0x11, 0x0f, 0x10, 0x10, 0x00, 0x10, + 0x10, 0x47, 0x1c, 0xbc, 0xc2, 0x00, 0x00, 0x11, 0x12, 0x31, 0xab, 0x28, + 0x17, 0xb6, 0x30, 0xb9, 0x06, 0x48, 0x13, 0xae, 0x3f, 0xff, 0x4b, 0x48, + 0x11, 0x73, 0x28, 0x17, 0x06, 0x1f, 0xab, 0x10, 0x0f, 0x30, 0x7f, 0x2a, + 0x04, 0x58, 0x28, 0x84, 0xaf, 0x65, 0x06, 0x78, 0x15, 0x00, 0x00, 0x03, + 0x94, 0xce, 0x90, 0xc7, 0xa4, 0xc2, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, + 0x56, 0x1a, 0x48, 0x11, 0x37, 0x28, 0x17, 0x41, 0x06, 0x28, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x11, 0x00, 0x11, 0x14, 0x11, 0x15, 0x15, 0x11, 0x11, + 0x11, 0x20, 0x15, 0x13, 0x20, 0x04, 0x11, 0x11, 0xc4, 0x1b, 0xf7, 0x02, + 0xbb, 0x00, 0x00, 0x13, 0x31, 0xb1, 0x28, 0x17, 0xbf, 0x02, 0x30, 0xc3, + 0x30, 0xad, 0x30, 0xfc, 0x06, 0x48, 0x1b, 0x4b, 0x20, 0x00, 0x65, 0x2f, + 0xb1, 0x74, 0x00, 0x75, 0x00, 0x63, 0x08, 0x00, 0x6b, 0x00, 0x79, 0x10, + 0x16, 0x00, 0x7f, 0xaf, 0x80, 0x54, 0x10, 0x58, 0xfa, 0x57, 0x06, 0x98, + 0x17, 0x04, 0xcf, 0x30, 0xd1, 0x31, 0xa4, 0xd0, 0x06, 0xb8, 0x17, 0x0e, + 0xd3, 0x7f, 0x1a, 0x04, 0x35, 0x28, 0x17, 0x05, 0x42, 0x04, 0x43, 0x04, + 0x3a, 0x20, 0x01, 0x38, 0x06, 0x08, 0x1b, 0x80, 0x10, 0x16, 0xf4, 0xff, + 0x12, 0x12, 0x15, 0x12, 0x16, 0x16, 0x12, 0x08, 0x12, 0x12, 0x16, 0x14, + 0x20, 0x04, 0x12, 0x12, 0x2a, 0x00, 0x1b, 0xa6, 0xc3, 0x00, 0x00, 0x14, + 0x31, 0xeb, 0x00, 0x30, 0xa4, 0x30, 0xb8, 0x30, 0xa2, 0x30, 0xca, 0x82, + 0x06, 0x48, 0x15, 0x00, 0x00, 0x4c, 0x00, 0x6f, 0x28, 0x13, 0x69, 0xab, + 0x2f, 0xb1, 0x69, 0x4f, 0xb9, 0x61, 0x06, 0xe0, 0x7f, 0x65, 0x0e, 0x00, + 0xff, 0x06, 0xb1, 0x7d, 0x80, 0x07, 0x10, 0x7f, 0xef, 0x8d, 0x13, 0x66, + 0xaf, 0x65, 0x89, 0x10, 0x5b, 0xa3, 0x90, 0x06, 0x58, 0x1b, 0xe8, 0xb8, + 0x74, 0xc7, 0x03, 0xc0, 0xc9, 0x60, 0xc5, 0x98, 0xb0, 0x06, 0x58, 0x1b, + 0x0e, 0xf2, 0x7f, 0x45, 0x1b, 0x28, 0x11, 0x38, 0x04, 0x37, 0x28, 0x11, + 0x30, 0x28, 0x1f, 0x70, 0x30, 0x06, 0x08, 0x17, 0x07, 0xf4, 0xff, 0x10, + 0x0d, 0xf0, 0x7f, 0x13, 0x13, 0x16, 0x13, 0x08, 0x17, 0x17, 0x13, 0x13, + 0x50, 0x04, 0x13, 0x13, 0xa7, 0x00, 0x15, 0x2e, 0xbf, 0x00, 0x00, 0x15, + 0x31, 0xde, 0x00, 0x30, 0xb5, 0x30, 0xc1, 0x30, 0xe5, 0x30, 0xfc, 0x02, + 0x30, 0xbb, 0x30, 0xc3, 0x30, 0xc4, 0x06, 0x08, 0x1d, 0x4d, 0xaa, 0x28, + 0x0d, 0x73, 0x28, 0x15, 0x61, 0x2f, 0xaf, 0x68, 0x2f, 0xb5, 0x73, 0xa8, + 0x2f, 0xbf, 0x74, 0x2f, 0xbf, 0x73, 0x10, 0x15, 0x60, 0x7f, 0x6c, 0x9a, + 0x28, 0x04, 0x84, 0xf8, 0x8b, 0x5e, 0x58, 0x06, 0x5b, 0x15, 0x00, 0x00, + 0x00, 0xe4, 0xb9, 0xac, 0xc0, 0x94, 0xcd, 0x38, 0xc1, 0x35, 0x20, 0xce, + 0x06, 0x58, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x28, 0x0f, 0x41, 0x20, 0x01, + 0x10, 0x30, 0x04, 0x47, 0x28, 0x21, 0x41, 0x04, 0x35, 0x04, 0x60, 0x42, + 0x20, 0x0f, 0x10, 0x1d, 0x94, 0xff, 0x14, 0x16, 0x19, 0x16, 0x1a, 0x00, + 0x1a, 0x14, 0x14, 0x16, 0x1a, 0x18, 0x16, 0x14, 0x00, 0x14, 0x14, 0x14, + 0x1f, 0x1e, 0x78, 0xcd, 0x00, 0x02, 0x00, 0x16, 0x31, 0xe1, 0x30, 0xea, + 0x28, 0x13, 0xe9, 0x0c, 0x30, 0xf3, 0x30, 0xc9, 0x06, 0x08, 0x13, 0x78, + 0x17, 0x72, 0x00, 0x14, 0x79, 0x00, 0x6c, 0x4f, 0xad, 0x64, 0x10, 0x16, + 0x00, 0x7f, 0x6c, 0x9a, 0x08, 0xcc, 0x91, 0x70, 0x51, 0x06, 0x78, 0x15, + 0x00, 0x00, 0x54, 0x01, 0xba, 0xb4, 0xb9, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, + 0x58, 0x15, 0x80, 0x0f, 0x13, 0x7f, 0x1c, 0x04, 0x4d, 0x04, 0x40, 0x04, + 0x38, 0x23, 0x04, 0x3b, 0x28, 0x11, 0x3d, 0x04, 0x34, 0x05, 0xa8, 0x11, + 0x10, 0x17, 0x54, 0xff, 0x00, 0x15, 0x15, 0x18, 0x15, 0x19, 0x19, 0x15, + 0x15, 0x10, 0x15, 0x19, 0x1f, 0x20, 0x04, 0x15, 0x15, 0xb7, 0x1b, 0x05, + 0x9b, 0xc9, 0x00, 0x00, 0x17, 0x28, 0x17, 0xfc, 0x28, 0x13, 0xd4, 0x06, + 0x95, 0x17, 0x3f, 0xaf, 0x69, 0x28, 0x11, 0x65, 0x10, 0x16, 0x60, 0x7f, + 0x05, 0x7f, 0x33, 0xe0, 0x56, 0x06, 0x98, 0x15, 0x38, 0x17, 0x78, 0xc7, + 0x06, 0x78, 0x13, 0x0f, 0x33, 0x7f, 0xb0, 0x38, 0x17, 0x3d, 0x06, 0x08, + 0x0d, 0x10, 0x17, 0x94, 0xff, 0x16, 0x14, 0x17, 0x14, 0x00, 0x18, 0x18, + 0x16, 0x16, 0x14, 0x18, 0x1e, 0x14, 0x00, 0x16, 0x16, 0x16, 0x16, 0x82, + 0x1f, 0x61, 0xce, 0x00, 0x00, 0x00, 0x18, 0x31, 0xdf, 0x30, 0xb7, 0x30, + 0x51, 0xac, 0x06, 0xa8, 0x19, 0x4d, 0x28, 0x15, 0x63, 0x00, 0x68, 0x28, + 0x1b, 0x68, 0x67, 0x4f, 0xb1, 0x10, 0x0e, 0x10, 0x7f, 0xed, 0x06, 0xc1, + 0xff, 0xc6, 0x5b, 0x47, 0x10, 0x6b, 0x39, 0x68, 0x06, 0x9b, 0x17, 0xf8, + 0xbb, 0xdc, 0xc2, 0x30, 0x04, 0xac, 0x06, 0x98, 0x19, 0x0e, 0xf3, 0x7f, + 0x1c, 0x04, 0x38, 0x04, 0x47, 0x47, 0x20, 0x03, 0x33, 0x04, 0x30, 0x06, + 0x48, 0x1f, 0x10, 0x0f, 0x14, 0xff, 0x06, 0xd6, 0xff, 0x00, 0x17, 0x17, + 0x1a, 0x17, 0x1b, 0x1b, 0x17, 0x17, 0x10, 0x17, 0x1b, 0x1c, 0x20, 0x04, + 0x17, 0x17, 0x63, 0x1e, 0x04, 0xe0, 0xc3, 0x00, 0x00, 0x19, 0x28, 0x17, + 0xcd, 0x30, 0x14, 0xbd, 0x30, 0xbf, 0x06, 0xc8, 0x17, 0x6e, 0x4f, 0xaf, + 0x73, 0x00, 0x18, 0x6f, 0x00, 0x74, 0x2f, 0xbd, 0x10, 0x15, 0xd0, 0x7f, + 0x0e, 0x66, 0x3c, 0x04, 0x5c, 0xcf, 0x82, 0xbe, 0x8f, 0x06, 0x7b, 0x17, + 0xf8, 0xbb, 0x03, 0x24, 0xb1, 0x8c, 0xc1, 0xc0, 0xd0, 0x06, 0x78, 0x19, + 0x0e, 0xf3, 0x7f, 0xa0, 0x38, 0x17, 0x3d, 0x28, 0x11, 0x35, 0x04, 0x41, + 0x04, 0x3e, 0x30, 0x04, 0x42, 0x28, 0x1d, 0x10, 0x1d, 0xd4, 0xff, 0x18, + 0x18, 0x1b, 0x18, 0x01, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x1c, 0x19, 0x20, + 0x04, 0x00, 0x18, 0x18, 0xf5, 0x1f, 0xcd, 0xbd, 0x00, 0x00, 0x41, 0x1a, + 0x28, 0x17, 0xba, 0x30, 0xfc, 0x30, 0xea, 0x06, 0xc8, 0x17, 0x47, 0x73, + 0x48, 0x13, 0x75, 0x00, 0x72, 0x2f, 0xbb, 0x10, 0x0e, 0x50, 0x7f, 0x06, + 0x51, 0xfb, 0x81, 0x3f, 0xff, 0xc6, 0x5b, 0xcf, 0x82, 0xcc, 0x91, 0x06, + 0x7b, 0x15, 0x87, 0x38, 0x17, 0xfc, 0xc8, 0xac, 0xb9, 0x06, 0x78, 0x15, + 0x0f, 0x13, 0x7f, 0x38, 0x17, 0x47, 0x41, 0x28, 0x13, 0x43, 0x04, 0x40, + 0x28, 0x21, 0x10, 0x16, 0x74, 0xff, 0x06, 0x96, 0xff, 0x00, 0x19, 0x1a, + 0x1d, 0x1a, 0x1e, 0x1e, 0x19, 0x19, 0x00, 0x1a, 0x1e, 0x1b, 0x1a, 0x19, + 0x19, 0x19, 0x19, 0x01, 0x6e, 0x1b, 0x75, 0xbe, 0x00, 0x00, 0x1b, 0x28, + 0x17, 0x47, 0xb7, 0x20, 0x01, 0xc3, 0x30, 0xd4, 0x06, 0x68, 0x19, 0x78, + 0x17, 0x70, 0x05, 0x7e, 0x70, 0x20, 0x01, 0x05, 0xb8, 0x1d, 0x10, 0x07, + 0x50, 0x7f, 0x50, 0x03, 0x05, 0xd1, 0xf9, 0x78, 0x17, 0x7f, 0x04, 0x89, + 0x7f, 0x89, 0xd4, 0x6b, 0x06, 0x7b, 0x17, 0xf8, 0xbb, 0x03, 0xdc, 0xc2, + 0xdc, 0xc2, 0x3c, 0xd5, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0xc7, 0x78, + 0x17, 0x38, 0x1d, 0x38, 0x04, 0x3f, 0x06, 0x08, 0x1b, 0x10, 0x0f, 0x54, + 0xff, 0x06, 0x96, 0xff, 0x00, 0x1a, 0x19, 0x1c, 0x19, 0x1d, 0x1d, 0x1a, + 0x1a, 0x00, 0x19, 0x1d, 0x1a, 0x19, 0x1a, 0x1a, 0x1a, 0x1a, 0x08, 0xf7, + 0x16, 0xdf, 0xbf, 0x2b, 0x2d, 0x31, 0xe2, 0x30, 0x06, 0xf3, 0x30, 0xbf, + 0x30, 0xca, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x6f, 0x02, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x61, 0x20, 0x05, 0x61, 0x81, 0x10, 0x16, 0x20, 0x7f, 0x99, + 0x84, 0x27, 0x59, 0xff, 0x62, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0xac, + 0xba, 0xdc, 0xd0, 0x98, 0xb0, 0xc0, 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, + 0x1c, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x16, 0x42, 0x04, 0x30, 0x20, 0x05, + 0x30, 0x05, 0xe8, 0x13, 0x10, 0x17, 0x34, 0xff, 0x1b, 0x00, 0x1b, 0x1e, + 0x1b, 0x1f, 0x1f, 0x1b, 0x1b, 0x1b, 0x20, 0x1f, 0x1d, 0x20, 0x04, 0x1b, + 0x1b, 0x21, 0x21, 0x55, 0x00, 0xb0, 0x00, 0x00, 0x1d, 0x31, 0xce, 0x30, + 0xfc, 0x00, 0x30, 0xb9, 0x30, 0xab, 0x30, 0xed, 0x30, 0xe9, 0x2a, 0x30, + 0xa4, 0x06, 0x28, 0x1f, 0x4e, 0x28, 0x17, 0x72, 0x28, 0x17, 0x68, 0x0a, + 0x00, 0x20, 0x00, 0x43, 0x28, 0x1d, 0x72, 0x28, 0x27, 0x6c, 0xe8, 0x2f, + 0xc3, 0x05, 0x78, 0x25, 0xd0, 0x73, 0x65, 0x20, 0x85, 0x64, 0x00, 0x75, + 0xd5, 0x20, 0x8b, 0x50, 0x97, 0x64, 0x0d, 0xe0, 0xff, 0x61, 0x40, 0xff, + 0x65, 0x21, 0x81, 0xd8, 0x05, 0x71, 0x01, 0x00, 0xf0, 0x7f, 0x74, 0x21, + 0x93, 0x04, 0xbf, 0xc9, 0x17, 0x53, 0x61, 0x01, 0x53, 0x57, 0x7f, 0x65, + 0x67, 0xb3, 0x7e, 0x06, 0x5b, 0x19, 0x00, 0x78, 0xb1, 0xa4, 0xc2, 0x90, + 0xce, 0x64, 0xb8, 0x0d, 0x7c, 0xb7, 0x74, 0xc7, 0x06, 0x38, 0x1f, 0x08, + 0x32, 0x7f, 0x6f, 0x05, 0x81, 0xfd, 0x01, 0x00, 0x00, 0x21, 0x04, 0x35, + 0x04, 0x32, 0x20, 0x03, 0x41, 0x40, 0x48, 0x17, 0x4f, 0x04, 0x20, 0x00, + 0x1a, 0x28, 0x23, 0x47, 0x40, 0x28, 0x2d, 0x3b, 0x04, 0x38, 0x05, 0x28, + 0x2b, 0x06, 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x01, 0x1c, 0x22, 0x06, + 0x22, 0x06, 0x06, 0x1c, 0x20, 0x06, 0x00, 0x2e, 0x22, 0x1c, 0x1c, 0x1c, + 0x1c, 0x70, 0x19, 0x50, 0x15, 0x2c, 0xa1, 0x1e, 0x68, 0x17, 0xc0, 0x30, + 0xb3, 0x30, 0x6b, 0xbf, 0x06, 0x08, 0x13, 0xf8, 0x17, 0x44, 0x2f, 0xb5, + 0x6b, 0x2f, 0xbf, 0x3f, 0xbd, 0xff, 0x05, 0x7f, 0xba, 0xb0, 0x73, 0x05, + 0xf8, 0x13, 0x08, 0x30, 0xff, 0x05, 0xb8, 0x13, 0x00, 0xf0, 0x7f, 0x05, + 0x16, 0x15, 0x38, 0x17, 0x03, 0xbe, 0x8f, 0xd1, 0x79, 0xd6, 0x4e, 0x06, + 0x58, 0x15, 0x58, 0x17, 0x03, 0xe4, 0xb2, 0x54, 0xcf, 0xc0, 0xd0, 0x06, + 0x18, 0x13, 0x08, 0x33, 0x7f, 0xd5, 0x05, 0xb8, 0x13, 0x00, 0x58, 0x17, + 0x14, 0x28, 0x1f, 0x3a, 0x28, 0x17, 0x42, 0x05, 0x08, 0x13, 0xc0, 0x07, + 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x1d, 0x23, 0x0a, 0x23, 0x0a, 0x0a, + 0x40, 0x1d, 0x20, 0x06, 0x2d, 0x23, 0x1d, 0x1d, 0x1d, 0x1d, 0x00, 0x49, + 0x21, 0x55, 0xb8, 0x00, 0x00, 0x1f, 0x31, 0x05, 0xcd, 0x30, 0xd6, 0x30, + 0xe9, 0x28, 0x19, 0xab, 0x06, 0x48, 0x15, 0x88, 0x3f, 0x2f, 0x65, 0x00, + 0x62, 0x2f, 0xb1, 0x61, 0x00, 0x73, 0xe0, 0x28, 0x13, 0x05, 0x98, 0x0f, + 0x10, 0x0f, 0x70, 0x7f, 0x85, 0x51, 0x03, 0x5e, 0xc9, 0x04, 0x62, 0xaf, + 0x65, 0xa0, 0x52, 0x06, 0x58, 0x19, 0x24, 0xb1, 0x00, 0x0c, 0xbe, 0x98, + 0xb7, 0xa4, 0xc2, 0x74, 0xce, 0xd5, 0x06, 0x78, 0x17, 0x07, 0x93, 0x7f, + 0x63, 0x06, 0x23, 0xff, 0x1d, 0x28, 0x17, 0x31, 0x28, 0x15, 0x1c, 0x30, + 0x04, 0x41, 0x28, 0x0d, 0x05, 0x38, 0x09, 0x10, 0x17, 0xd4, 0xff, 0x1e, + 0x1c, 0x02, 0x1f, 0x1c, 0x20, 0x20, 0x1e, 0x1e, 0x20, 0x04, 0x1c, 0x00, + 0x1e, 0x1e, 0x1e, 0x1e, 0x03, 0x1d, 0x43, 0xbb, 0x00, 0x00, 0x00, 0x20, + 0x31, 0xcb, 0x30, 0xe5, 0x30, 0x00, 0xfc, 0x30, 0xcf, 0x30, 0xf3, 0x30, + 0xd7, 0x30, 0x1d, 0xb7, 0x30, 0xe3, 0x20, 0x0b, 0x05, 0xdd, 0x39, 0x38, + 0x17, 0x77, 0x2f, 0xa9, 0x44, 0x48, 0x2f, 0xb7, 0x6d, 0x00, 0x70, 0x28, + 0x1d, 0x68, 0x00, 0x75, 0x69, 0x2f, 0xad, 0x05, 0x3c, 0x2b, 0x10, 0x07, + 0x50, 0x7f, 0x75, 0x2e, 0x17, 0x76, 0x4e, 0x27, 0x80, 0x06, 0x32, 0x03, + 0xb0, 0x65, 0x55, 0x7f, 0x03, 0x5e, 0xc0, 0x10, 0x4e, 0x14, 0x5c, 0x06, + 0x5b, 0x17, 0x74, 0xb2, 0x84, 0xd5, 0x0d, 0x04, 0xd5, 0x54, 0xc1, 0x06, + 0x58, 0x15, 0x07, 0x33, 0x7f, 0x6f, 0x21, 0xfd, 0x40, 0x61, 0x06, 0x84, + 0x01, 0x1d, 0x04, 0x4c, 0x04, 0x4e, 0x04, 0x00, 0x2d, 0x00, 0x13, 0x04, + 0x4d, 0x04, 0x3c, 0x04, 0x07, 0x3f, 0x04, 0x48, 0x04, 0x38, 0x28, 0x25, + 0x10, 0x15, 0xb4, 0xff, 0x06, 0xd6, 0xff, 0x00, 0x1f, 0x1e, 0x21, 0x1e, + 0x22, 0x24, 0x1f, 0x1f, 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x1f, 0x1f, 0x1f, + 0x1f, 0x01, 0xb9, 0x1e, 0x21, 0xcd, 0x00, 0x00, 0x21, 0x68, 0x17, 0x5a, + 0xb8, 0x48, 0x11, 0xb8, 0x06, 0x08, 0x15, 0x98, 0x17, 0x4a, 0x2f, 0xb7, + 0x72, 0x8f, 0x2f, 0xb3, 0x65, 0x00, 0x79, 0x10, 0x0d, 0xe0, 0x7f, 0x58, + 0x17, 0x36, 0x19, 0x06, 0x32, 0x03, 0x03, 0xb0, 0x65, 0xfd, 0x6c, 0x7f, + 0x89, 0x06, 0x58, 0x13, 0x58, 0x17, 0x0e, 0x00, 0xc8, 0xc0, 0xc9, 0x06, + 0x78, 0x15, 0x07, 0x33, 0x7f, 0x78, 0x17, 0x4a, 0x2c, 0x00, 0xe9, 0x64, + 0x01, 0x69, 0x05, 0xaf, 0xb4, 0x78, 0x17, 0x14, 0x04, 0x17, 0x36, 0x04, + 0x35, 0x28, 0x11, 0x41, 0x28, 0x17, 0x10, 0x15, 0xd4, 0xff, 0x06, 0xd6, + 0xff, 0x00, 0x20, 0x1f, 0x22, 0x1f, 0x23, 0x22, 0x20, 0x20, 0x00, 0x1f, + 0x24, 0x23, 0x1f, 0x20, 0x20, 0x20, 0x20, 0x01, 0x99, 0x1c, 0xda, 0xca, + 0x00, 0x00, 0x22, 0x68, 0x17, 0x01, 0xe1, 0x30, 0xad, 0x30, 0xb7, 0x30, + 0xb3, 0x06, 0x08, 0x15, 0xab, 0x9f, 0xaf, 0x4d, 0x2f, 0xb7, 0x78, 0x2f, + 0xa9, 0x63, 0x2e, 0x39, 0x05, 0xf4, 0x97, 0x51, 0x75, 0x2e, 0xaf, 0x65, + 0x2f, 0xaf, 0x75, 0x00, 0x2d, 0x80, 0x87, 0x6e, 0x71, 0x4e, 0xc7, 0x0d, + 0x30, 0xff, 0x75, 0x4d, 0xb1, 0x3f, 0xaf, 0x31, 0x83, 0x73, 0xf4, 0x2f, + 0xad, 0x05, 0xb1, 0x85, 0x78, 0x17, 0x50, 0x7f, 0xe9, 0x06, 0x02, 0x03, + 0xb0, 0x65, 0x02, 0xa8, 0x58, 0x7f, 0x89, 0xe5, 0x54, 0x06, 0x78, 0x19, + 0x74, 0x01, 0xb2, 0x55, 0xba, 0xdc, 0xc2, 0x54, 0xcf, 0x06, 0x78, 0x19, + 0xea, 0x07, 0x33, 0x7f, 0x06, 0x91, 0xfd, 0x98, 0x17, 0x1c, 0x28, 0x15, + 0x3a, 0x48, 0x15, 0x3a, 0x38, 0x04, 0x3e, 0x05, 0xa8, 0x19, 0x07, 0x14, + 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x21, 0x20, 0x24, 0x04, 0x20, 0x25, 0x25, + 0x21, 0x21, 0x20, 0x04, 0x20, 0x21, 0x00, 0x21, 0x21, 0x21, 0x60, 0x19, + 0xab, 0xb4, 0x00, 0x00, 0x00, 0x23, 0x31, 0xcd, 0x30, 0xd0, 0x30, 0xc0, + 0xec, 0x06, 0x28, 0x0f, 0xbf, 0xaf, 0x3e, 0x2d, 0x64, 0x2e, 0x31, 0x10, + 0x16, 0x30, 0x7f, 0x85, 0x51, 0x08, 0x4e, 0x53, 0xbe, 0x8f, 0x06, 0x92, + 0xff, 0x24, 0xb1, 0x14, 0x1a, 0xbc, 0xe4, 0xb2, 0x06, 0x78, 0x15, 0x0f, + 0x13, 0x7f, 0x1d, 0x28, 0x0f, 0x32, 0x0c, 0x04, 0x30, 0x04, 0x34, 0x20, + 0x03, 0x10, 0x1e, 0x34, 0xff, 0x22, 0x1d, 0x02, 0x20, 0x1d, 0x21, 0x21, + 0x22, 0x22, 0x20, 0x04, 0x1d, 0x00, 0x22, 0x22, 0x22, 0x22, 0xd9, 0x1b, + 0xd6, 0xaa, 0x80, 0x24, 0x95, 0x31, 0xcb, 0x30, 0xe5, 0x30, 0xfc, 0x30, + 0x5a, 0xe8, 0x20, 0x03, 0xaf, 0x06, 0x48, 0x1d, 0x7f, 0x2f, 0x59, 0x2f, + 0xb7, 0x72, 0x2c, 0x00, 0x6b, 0x10, 0x0e, 0x20, 0x7f, 0x75, 0x6a, 0x19, + 0x06, 0x52, 0x03, 0xbd, 0x7e, 0x20, 0xa6, 0x7e, 0x06, 0x9b, 0x15, 0x00, + 0x00, 0x74, 0xb2, 0x95, 0x6a, 0xc6, 0x06, 0x98, 0x15, 0x07, 0x33, 0x7f, + 0x6f, 0x61, 0xfd, 0x49, 0x44, 0x01, 0x71, 0xc0, 0x42, 0x0f, 0x05, 0xb8, + 0x17, 0x4c, 0x04, 0x4e, 0x04, 0x2d, 0x00, 0x01, 0x19, 0x04, 0x3e, 0x04, + 0x40, 0x04, 0x3a, 0x06, 0x08, 0x1b, 0xc0, 0x10, 0x0f, 0x14, 0xff, 0x06, + 0xd6, 0xff, 0x23, 0x21, 0x23, 0x21, 0x24, 0x23, 0x48, 0x23, 0x20, 0x06, + 0x24, 0x21, 0x20, 0x06, 0x23, 0x54, 0x1e, 0x00, 0x8e, 0xcb, 0x00, 0x00, + 0x25, 0x31, 0xaa, 0x30, 0x06, 0xcf, 0x30, 0xa4, 0x30, 0xaa, 0x06, 0x48, + 0x13, 0x3f, 0xff, 0x4f, 0x0e, 0x00, 0x68, 0x00, 0x69, 0x28, 0x13, 0x06, + 0x7d, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0xc4, 0x04, 0x4f, 0xa5, 0x4e, 0xc4, + 0x4f, 0x06, 0x98, 0x19, 0x24, 0xc6, 0x06, 0x58, 0xd5, 0x74, 0xc7, 0x24, + 0x06, 0x88, 0x1b, 0x0e, 0xf3, 0x7f, 0x1e, 0x03, 0x04, 0x33, 0x04, 0x30, + 0x04, 0x39, 0x28, 0x15, 0x10, 0x1e, 0x54, 0xff, 0x00, 0x24, 0x24, 0x25, + 0x24, 0x26, 0x26, 0x24, 0x24, 0x80, 0x50, 0x04, 0x24, 0x24, 0x6a, 0x1c, + 0xfb, 0xc4, 0x00, 0x20, 0x00, 0x26, 0x28, 0x17, 0xaf, 0x30, 0xe9, 0x30, + 0xdb, 0x2a, 0x30, 0xde, 0x06, 0x68, 0x19, 0x4f, 0x2f, 0xa3, 0x6c, 0x2e, + 0x2d, 0x68, 0xb0, 0x2f, 0xaf, 0x6d, 0x2e, 0x35, 0x10, 0x15, 0xf0, 0x7f, + 0xc4, 0x4f, 0x4b, 0x51, 0x02, 0xc9, 0x62, 0x55, 0x4f, 0x6c, 0x9a, 0x06, + 0x5b, 0x19, 0x24, 0x00, 0xc6, 0x74, 0xd0, 0x7c, 0xb7, 0x38, 0xd6, 0xc8, + 0x60, 0xb9, 0x06, 0x58, 0x19, 0x0e, 0xf3, 0x7f, 0x1e, 0x04, 0x3a, 0x04, + 0x3b, 0xac, 0x28, 0x19, 0x45, 0x28, 0x19, 0x3c, 0x28, 0x21, 0x10, 0x1d, + 0xf4, 0xff, 0x25, 0x25, 0x02, 0x26, 0x25, 0x27, 0x27, 0x25, 0x25, 0x50, + 0x04, 0x25, 0x00, 0x25, 0x38, 0x19, 0xa8, 0xba, 0x00, 0x00, 0x27, 0x83, + 0x28, 0x17, 0xec, 0x30, 0xb4, 0x30, 0xf3, 0x06, 0x68, 0x15, 0x3f, 0xaf, + 0x05, 0x72, 0x00, 0x65, 0x00, 0x67, 0x2f, 0xb1, 0x6e, 0x10, 0x0e, 0xc0, + 0x7f, 0x40, 0xf3, 0x06, 0x61, 0xff, 0xc4, 0x4f, 0xd2, 0x52, 0x88, 0x51, + 0xc3, 0x06, 0x72, 0xfd, 0x38, 0x17, 0xac, 0xb9, 0x74, 0xac, 0x06, 0x58, + 0x13, 0x0f, 0x33, 0x7f, 0x01, 0x1e, 0x04, 0x40, 0x04, 0x35, 0x04, 0x33, + 0x28, 0x15, 0x70, 0x3d, 0x06, 0x08, 0x13, 0x10, 0x0f, 0xb4, 0xff, 0x06, + 0x76, 0xff, 0x26, 0x26, 0x27, 0x26, 0x01, 0x28, 0x28, 0x26, 0x26, 0x26, + 0x28, 0x29, 0x20, 0x04, 0x00, 0x26, 0x26, 0xf5, 0x1f, 0x83, 0xa8, 0x00, + 0x00, 0x10, 0x28, 0x31, 0xda, 0x28, 0x13, 0xb7, 0x30, 0xeb, 0x30, 0x05, + 0xd9, 0x30, 0xcb, 0x30, 0xa2, 0x06, 0x28, 0x1d, 0x50, 0x28, 0x15, 0x45, + 0x6e, 0x28, 0x13, 0x73, 0x00, 0x79, 0x2f, 0xb7, 0x76, 0x2f, 0xb9, 0x1b, + 0x6e, 0x00, 0x69, 0x05, 0xaf, 0xb7, 0x00, 0x50, 0x7f, 0x65, 0x0e, 0xe0, + 0xff, 0x05, 0xf1, 0x7f, 0x60, 0x73, 0x21, 0xf3, 0x06, 0x31, 0xfd, 0x00, + 0x00, 0xbe, 0x5b, 0x15, 0x01, 0x59, 0xd5, 0x6c, 0x3c, 0x5c, 0x9a, 0x4e, + 0x06, 0x5b, 0x19, 0x00, 0x9c, 0xd3, 0xe4, 0xc2, 0xa0, 0xbc, 0x74, 0xc7, + 0x0d, 0xc8, 0xb2, 0x44, 0xc5, 0x06, 0x38, 0x1d, 0x07, 0xd1, 0xff, 0xe2, + 0x06, 0x01, 0xff, 0x40, 0x1f, 0x28, 0x15, 0x3d, 0x04, 0x41, 0x04, 0x38, + 0x04, 0x01, 0x3b, 0x04, 0x4c, 0x04, 0x32, 0x04, 0x30, 0x28, 0x1f, 0x1c, + 0x38, 0x04, 0x4f, 0x05, 0x88, 0x23, 0x0f, 0x53, 0xff, 0x10, 0x06, 0x90, + 0xff, 0x27, 0x27, 0x00, 0x28, 0x27, 0x29, 0x29, 0x27, 0x27, 0x27, 0x29, + 0x40, 0x2a, 0x20, 0x04, 0x27, 0x27, 0xa3, 0x1c, 0x54, 0xc9, 0x00, 0x00, + 0x00, 0x29, 0x31, 0xed, 0x30, 0xfc, 0x30, 0x45, 0xc9, 0x28, 0x11, 0xa4, + 0x30, 0xe9, 0x28, 0x21, 0xc9, 0x06, 0x08, 0x19, 0x14, 0x52, 0x00, 0x68, + 0x2f, 0xab, 0x64, 0x2f, 0xb3, 0x20, 0x00, 0x54, 0x49, 0x28, 0x1d, 0x6c, + 0x48, 0x19, 0x64, 0x10, 0x15, 0x80, 0x7f, 0x57, 0x7f, 0x0c, 0x97, 0x5f, + 0x9b, 0x5c, 0x06, 0x58, 0x13, 0x3f, 0xff, 0x5c, 0xb8, 0x00, 0xdc, 0xb4, + 0x44, 0xc5, 0x7c, 0xc7, 0x9c, 0xb7, 0x30, 0xdc, 0xb4, 0x06, 0x38, 0x17, + 0x0e, 0xf3, 0x7f, 0x20, 0x04, 0x3e, 0x04, 0x01, 0x34, 0x04, 0x2d, 0x00, + 0x10, 0x04, 0x39, 0x28, 0x19, 0xb0, 0x38, 0x23, 0x34, 0x05, 0x88, 0x13, + 0x10, 0x17, 0x34, 0xff, 0x28, 0x29, 0x2a, 0x29, 0x00, 0x2b, 0x2b, 0x28, + 0x28, 0x29, 0x2b, 0x2c, 0x29, 0x00, 0x28, 0x28, 0x28, 0x28, 0xbd, 0x1d, + 0x38, 0xcd, 0x00, 0x00, 0x00, 0x2a, 0x31, 0xb5, 0x30, 0xa6, 0x30, 0x04, + 0xb9, 0x30, 0xab, 0x30, 0xed, 0x28, 0x17, 0xa4, 0x30, 0x51, 0xca, 0x06, + 0x08, 0x17, 0x53, 0x28, 0x15, 0x75, 0x00, 0x74, 0x28, 0x1d, 0x15, 0x20, + 0x00, 0x43, 0x2f, 0xad, 0x72, 0x28, 0x25, 0x6c, 0x2f, 0xb1, 0x75, 0x6e, + 0x05, 0x6f, 0x33, 0xd0, 0x73, 0x38, 0x9d, 0x64, 0x20, 0x8f, 0x20, 0x20, + 0x97, 0x6b, 0x75, 0x05, 0x48, 0x9d, 0x07, 0xd0, 0xff, 0x61, 0x40, 0xff, + 0x65, 0x2f, 0xbb, 0x05, 0x71, 0x01, 0xa0, 0x00, 0xd0, 0x7f, 0x72, 0x05, + 0x18, 0x17, 0x53, 0x61, 0x53, 0x57, 0x7f, 0x08, 0x65, 0x67, 0xb3, 0x7e, + 0x06, 0x58, 0x1b, 0xac, 0xc0, 0xb0, 0x00, 0xc6, 0xa4, 0xc2, 0x90, 0xce, + 0x64, 0xb8, 0x7c, 0x06, 0xb7, 0x74, 0xc7, 0x98, 0xb0, 0x05, 0xf8, 0x1b, + 0x08, 0x32, 0x7f, 0x6f, 0xa2, 0x63, 0x7f, 0x6c, 0x05, 0x2f, 0xb4, 0x2e, + 0x04, 0x36, 0x28, 0x0b, 0x30, 0x02, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x1a, + 0x20, 0x07, 0x40, 0x8e, 0x28, 0x27, 0x3b, 0x04, 0x38, 0x40, 0x13, 0x0d, + 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x29, 0x02, 0x2a, 0x07, 0x2a, 0x07, + 0x07, 0x29, 0x20, 0x06, 0x33, 0x00, 0x2a, 0x29, 0x29, 0x29, 0x29, 0x2d, + 0x18, 0x61, 0x08, 0xc6, 0x00, 0x00, 0x2b, 0x68, 0x17, 0xc0, 0x30, 0xb3, + 0x35, 0x30, 0xbf, 0x06, 0x08, 0x13, 0xf8, 0x17, 0x44, 0x2f, 0xab, 0x6b, + 0x2f, 0xbd, 0x7f, 0x74, 0x05, 0x68, 0x13, 0x3f, 0xff, 0xb0, 0x73, 0x05, + 0xf8, 0x13, 0x08, 0x30, 0xff, 0x05, 0xb8, 0x13, 0x00, 0xd0, 0x7f, 0xc0, + 0x05, 0x18, 0x13, 0x58, 0x17, 0xbe, 0x8f, 0xd1, 0x79, 0xd6, 0x4e, 0xc0, + 0x06, 0x58, 0x15, 0x78, 0x17, 0xe4, 0xb2, 0x54, 0xcf, 0xc0, 0xd0, 0xf5, + 0x05, 0xf8, 0x13, 0x08, 0x33, 0x7f, 0x05, 0xb8, 0x13, 0xf8, 0x17, 0x14, + 0x28, 0x1f, 0x3a, 0x28, 0x17, 0x70, 0x42, 0x05, 0x68, 0x13, 0x07, 0x34, + 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x2a, 0x2b, 0x0b, 0x2b, 0x10, 0x0b, 0x0b, + 0x2a, 0x20, 0x06, 0x32, 0x2b, 0x2a, 0x2a, 0x00, 0x2a, 0x2a, 0x8d, 0x1f, + 0xa4, 0xb8, 0x00, 0x00, 0x00, 0x2c, 0x31, 0xc6, 0x30, 0xcd, 0x30, 0xb7, + 0x30, 0x6a, 0xfc, 0x06, 0x48, 0x13, 0x3f, 0xff, 0x54, 0x2f, 0xa3, 0x6e, + 0x4f, 0xa9, 0x73, 0xb0, 0x20, 0x01, 0x65, 0x2f, 0xb1, 0x10, 0x15, 0xd0, + 0x7f, 0x30, 0x75, 0xb3, 0x7e, 0x20, 0x7f, 0x89, 0x06, 0x78, 0x15, 0x00, + 0x00, 0x4c, 0xd1, 0x24, 0x18, 0xb1, 0xdc, 0xc2, 0x06, 0x38, 0x11, 0x0f, + 0x53, 0x7f, 0x22, 0x04, 0x35, 0xab, 0x28, 0x17, 0x3d, 0x20, 0x05, 0x41, + 0x20, 0x01, 0x38, 0x05, 0x88, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x00, 0x2b, + 0x2c, 0x2b, 0x2c, 0x2d, 0x2c, 0x2b, 0x2b, 0x10, 0x2c, 0x2c, 0x2f, 0x20, + 0x05, 0x2b, 0x2b, 0xb7, 0x19, 0x04, 0x4a, 0xc2, 0x00, 0x00, 0x2d, 0x28, + 0x17, 0xad, 0x30, 0x15, 0xb5, 0x30, 0xb9, 0x06, 0xc8, 0x17, 0x78, 0x2f, + 0xb3, 0x73, 0x06, 0x65, 0x98, 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x97, 0x5f, + 0x4b, 0x51, 0x28, 0x84, 0xaf, 0x41, 0x65, 0x06, 0x7b, 0x17, 0x4d, 0xd1, + 0xac, 0xc0, 0xa4, 0x06, 0xe8, 0x17, 0xc7, 0x0e, 0xb3, 0x7f, 0x38, 0x17, + 0x45, 0x04, 0x30, 0x28, 0x15, 0x10, 0x1e, 0x54, 0xff, 0x28, 0x14, 0x00, + 0x2d, 0x2e, 0x2d, 0x2c, 0x2c, 0x2d, 0x2d, 0x30, 0x80, 0x20, 0x05, 0x2c, + 0x2c, 0x85, 0x15, 0x7f, 0xba, 0x00, 0x03, 0x00, 0x2e, 0x31, 0xe6, 0x30, + 0xbf, 0x06, 0x88, 0x13, 0x3f, 0xff, 0x14, 0x55, 0x00, 0x74, 0x28, 0x15, + 0x68, 0x10, 0x16, 0x80, 0x7f, 0xb9, 0x72, 0x21, 0xd6, 0x4e, 0x06, 0xb2, + 0xff, 0x20, 0xc7, 0xc0, 0xd0, 0x06, 0x98, 0x15, 0x8e, 0x0f, 0x13, 0x7f, + 0x2e, 0x04, 0x42, 0x28, 0x15, 0x10, 0x1e, 0x94, 0xff, 0x28, 0x14, 0x2e, + 0x01, 0x2f, 0x2e, 0x2d, 0x2d, 0x2e, 0x2e, 0x34, 0x20, 0x05, 0x00, 0x2d, + 0x2d, 0xfc, 0x1c, 0x6f, 0xb0, 0x00, 0x00, 0x00, 0x2f, 0x31, 0xd0, 0x30, + 0xfc, 0x30, 0xb8, 0x30, 0x10, 0xcb, 0x30, 0xa2, 0x06, 0x68, 0x1d, 0x56, + 0x00, 0x69, 0x00, 0x15, 0x72, 0x00, 0x67, 0x20, 0x05, 0x6e, 0x20, 0x09, + 0x61, 0x06, 0xe0, 0x7f, 0x60, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x10, 0x7f, + 0x17, 0x5f, 0x09, 0x54, 0x3c, 0x20, 0x5c, 0x9a, 0x06, 0x88, 0x1b, 0x84, + 0xbc, 0xc0, 0xc9, 0xc8, 0x1a, 0xb2, 0x44, 0xc5, 0x06, 0x78, 0x1b, 0x07, + 0x73, 0x7f, 0xed, 0x06, 0x63, 0xff, 0x12, 0x02, 0x04, 0x38, 0x04, 0x40, + 0x04, 0x33, 0x20, 0x05, 0x3d, 0xb8, 0x20, 0x09, 0x4f, 0x06, 0x08, 0x21, + 0x10, 0x06, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x2e, 0x30, 0x2f, 0x00, 0x30, + 0x31, 0x30, 0x2e, 0x2e, 0x30, 0x30, 0x0a, 0x82, 0x20, 0x05, 0x2e, 0x2e, + 0xb4, 0x1a, 0xeb, 0x2c, 0xa3, 0x30, 0x82, 0x48, 0x17, 0xe2, 0x30, 0xf3, + 0x30, 0xc8, 0x06, 0x88, 0x17, 0x65, 0x8a, 0x28, 0x17, 0x6d, 0x00, 0x6f, + 0x28, 0x17, 0x74, 0x10, 0x16, 0x20, 0x7f, 0x5b, 0x06, 0x4f, 0x99, 0x84, + 0x79, 0x72, 0x06, 0x78, 0x15, 0x38, 0x17, 0xac, 0x18, 0xba, 0xb8, 0xd2, + 0x06, 0x78, 0x15, 0x0f, 0x13, 0x7f, 0x12, 0x04, 0x35, 0x8b, 0x28, 0x17, + 0x3c, 0x04, 0x3e, 0x28, 0x17, 0x42, 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, + 0xff, 0x01, 0x2f, 0x2f, 0x2e, 0x2f, 0x30, 0x2f, 0x2f, 0x20, 0x01, 0x40, + 0x09, 0x40, 0x05, 0x79, 0x1f, 0x64, 0xcc, 0x00, 0x00, 0x05, 0x31, 0x31, + 0xef, 0x30, 0xb7, 0x48, 0x15, 0xf3, 0x06, 0x68, 0x17, 0x45, 0x57, 0x2f, + 0x23, 0x73, 0x00, 0x68, 0x4f, 0xaf, 0x67, 0x28, 0x19, 0xd4, 0x38, 0x1f, + 0x10, 0x05, 0xb0, 0x7f, 0x53, 0x29, 0x8d, 0x61, 0x41, 0x77, 0x20, 0x00, + 0x58, 0x64, 0x2f, 0xbb, 0x20, 0x05, 0xe1, 0x91, 0x06, 0xf1, 0xff, 0x4e, + 0x53, 0xdb, 0x10, 0x76, 0x7f, 0x98, 0x06, 0x98, 0x17, 0xcc, 0xc6, 0xf1, + 0xc2, 0x30, 0x34, 0xd1, 0x06, 0x98, 0x17, 0x0e, 0xf3, 0x7f, 0x12, 0x04, + 0x30, 0x04, 0x16, 0x48, 0x04, 0x38, 0x28, 0x15, 0x33, 0x28, 0x17, 0x38, + 0x1d, 0x20, 0x0a, 0x00, 0x28, 0x00, 0x48, 0x28, 0x23, 0x30, 0x28, 0x27, + 0x29, 0xc0, 0x10, 0x0d, 0x04, 0xff, 0x0e, 0xf6, 0x7f, 0x30, 0x31, 0x31, + 0x31, 0x2c, 0x32, 0x00, 0x30, 0x30, 0x31, 0x32, 0x08, 0x31, 0x30, 0x30, + 0x00, 0x30, 0x30, 0x73, 0x21, 0x9b, 0xa8, 0x00, 0x00, 0x00, 0x32, 0x31, + 0xa6, 0x30, 0xa3, 0x30, 0xb9, 0x30, 0x74, 0xb3, 0x28, 0x1b, 0x38, 0x1f, + 0x06, 0x1d, 0x37, 0x57, 0x28, 0x11, 0x73, 0x00, 0x58, 0x63, 0x4f, 0xaf, + 0x73, 0x48, 0x1d, 0x10, 0x15, 0xd0, 0x7f, 0x01, 0x5a, 0xaf, 0x04, 0x65, + 0xb7, 0x5e, 0x1f, 0x66, 0x06, 0x78, 0x19, 0x04, 0xc7, 0x03, 0xa4, 0xc2, + 0x58, 0xcf, 0xe0, 0xc2, 0x06, 0x78, 0x19, 0x0e, 0xf3, 0x7f, 0x45, 0x12, + 0x28, 0x13, 0x41, 0x04, 0x3a, 0x48, 0x11, 0x41, 0x48, 0x1f, 0x8a, 0x10, + 0x1d, 0xd4, 0xff, 0x31, 0x33, 0x33, 0x20, 0x01, 0x31, 0x20, 0x06, 0x0b, + 0x80, 0x20, 0x05, 0x31, 0x31, 0xa1, 0x1e, 0x6e, 0xc0, 0x00, 0x28, 0x00, + 0x33, 0x28, 0x17, 0xa7, 0x28, 0x17, 0xc8, 0x30, 0xd0, 0x00, 0x30, 0xfc, + 0x30, 0xb8, 0x30, 0xcb, 0x30, 0xa2, 0x8a, 0x05, 0xe8, 0x1b, 0x57, 0x00, + 0x65, 0x2f, 0xaf, 0x74, 0x2e, 0xad, 0x56, 0xb7, 0x2f, 0xb3, 0x72, 0x2f, + 0xb3, 0x3f, 0xb9, 0x69, 0x2f, 0xc5, 0x05, 0x5f, 0xb6, 0xd0, 0x75, 0x55, + 0x65, 0x2f, 0x35, 0x4f, 0x28, 0xa5, 0x63, 0x2f, 0xbf, 0x64, 0x20, 0x99, + 0x5b, 0x6e, 0x4f, 0x4d, 0x6c, 0x20, 0xa3, 0x0d, 0x50, 0xff, 0x61, 0x06, + 0x00, 0xff, 0x01, 0x50, 0x7f, 0x80, 0x04, 0x9f, 0xcd, 0x7f, 0x89, 0x17, + 0x5f, 0x09, 0x54, 0x3c, 0x10, 0x5c, 0x9a, 0x4e, 0x06, 0x58, 0x19, 0xe8, + 0xc6, 0xa4, 0xc2, 0x00, 0xb8, 0xd2, 0x84, 0xbc, 0xc0, 0xc9, 0xc8, 0xb2, + 0x36, 0x44, 0xc5, 0x06, 0x18, 0x1d, 0x07, 0x73, 0x7f, 0xed, 0xc2, 0x7f, + 0x05, 0x71, 0xfd, 0x00, 0x02, 0x00, 0x17, 0x04, 0x30, 0x04, 0x3f, 0x20, + 0x03, 0x34, 0x82, 0x28, 0x17, 0x30, 0x04, 0x4f, 0x04, 0x20, 0x48, 0x29, + 0x40, 0x2e, 0x04, 0x33, 0x48, 0x23, 0x38, 0x20, 0x11, 0x0c, 0xd4, 0xff, + 0x10, 0x0e, 0xf0, 0x7f, 0x32, 0x02, 0x32, 0x30, 0x32, 0x32, 0x31, 0x32, + 0x20, 0x03, 0x0f, 0x80, 0x20, 0x04, 0x32, 0x32, 0x45, 0x1b, 0xf4, 0xc5, + 0x00, 0x00, 0x00, 0x34, 0x31, 0xef, 0x30, 0xa4, 0x30, 0xaa, 0x03, 0x30, + 0xdf, 0x30, 0xf3, 0x30, 0xb0, 0x05, 0xe8, 0x11, 0x7f, 0xaf, 0x56, 0x79, + 0x2f, 0xab, 0x6d, 0x4f, 0xa9, 0x67, 0x06, 0x4d, 0x2f, 0x10, 0x0e, 0xd0, + 0x7f, 0x00, 0x06, 0x60, 0xc4, 0x4f, 0x0e, 0x66, 0x06, 0x58, 0x13, 0x3f, + 0xff, 0x40, 0x01, 0xc6, 0x74, 0xc7, 0x24, 0xc6, 0x0d, 0xbc, 0x06, 0x18, + 0x11, 0xa0, 0x0f, 0x53, 0x7f, 0x12, 0x28, 0x17, 0x39, 0x04, 0x3e, 0x04, + 0x3c, 0xb1, 0x48, 0x07, 0x33, 0x04, 0xe8, 0x05, 0x10, 0x18, 0x14, 0xff, + 0x33, 0x34, 0x34, 0x20, 0x01, 0x50, 0x33, 0x20, 0x06, 0x07, 0x20, 0x05, + 0x33, 0x33, 0x41, 0x1d, 0x00, 0x77, 0xb5, 0x00, 0x00, 0x35, 0x31, 0xd7, + 0x30, 0x00, 0xa8, 0x30, 0xeb, 0x30, 0xc8, 0x30, 0xea, 0x30, 0x22, 0xb3, + 0x30, 0x06, 0x3d, 0x2f, 0x50, 0x00, 0x75, 0x2f, 0xa5, 0x72, 0xab, 0x2f, + 0x97, 0x6f, 0x2f, 0xab, 0x52, 0x2f, 0xbd, 0x63, 0x28, 0x27, 0x05, 0xb0, + 0x7f, 0x60, 0x6f, 0x06, 0xa0, 0x7d, 0x10, 0x07, 0x10, 0xff, 0xe2, 0x6c, + 0x1a, 0x59, 0xce, 0x10, 0x9e, 0x04, 0x54, 0x06, 0x78, 0x17, 0x78, 0xd4, + 0xd0, 0xc5, 0x00, 0x74, 0xb9, 0xa0, 0xd1, 0xac, 0xb9, 0x54, 0xcf, 0x80, + 0x10, 0x06, 0x33, 0x7f, 0x1f, 0x04, 0x43, 0x04, 0x4d, 0x04, 0x40, 0x22, + 0x04, 0x42, 0x28, 0x1b, 0x2d, 0x00, 0x20, 0x28, 0x1d, 0x3a, 0xe0, 0x28, + 0x25, 0x0d, 0xb4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x34, 0x28, 0x29, 0x28, + 0x2a, 0x01, 0x2a, 0x34, 0x34, 0x28, 0x2a, 0x2b, 0x28, 0x38, 0x22, 0x08, + 0x22, 0x0d, 0xfe, 0xd0, 0x00, 0x3f, 0xff, 0x01, 0x09, 0x32, 0x00, 0x08, + 0x0d, 0x0d, 0x01, 0x01, 0x09, 0x0d, 0x28, 0x01, 0x09, 0x01, 0x01, 0x01, + 0x01, 0x02, 0x02, 0x70, 0x01, 0x52, 0x04, 0x40, 0x0a, 0x03, 0x30, 0x14, + 0x01, 0x03, 0x20, 0x06, 0x03, 0x85, 0x20, 0x05, 0x03, 0x03, 0x04, 0x04, + 0x70, 0x01, 0x06, 0x40, 0x0a, 0x4a, 0x05, 0x30, 0x14, 0x03, 0x05, 0x20, + 0x06, 0x05, 0x20, 0x05, 0x05, 0x06, 0x05, 0x06, 0x05, 0x05, 0x10, 0x20, + 0x05, 0x20, 0x06, 0x12, 0x80, 0x20, 0x05, 0x06, 0x06, 0x07, 0x06, 0x08, + 0x05, 0x08, 0x20, 0x08, 0x07, 0x20, 0x06, 0x15, 0x06, 0x07, 0x07, 0x07, + 0x01, 0x07, 0x08, 0x07, 0x09, 0x06, 0x09, 0x09, 0x20, 0x11, 0x00, 0x09, + 0x16, 0x07, 0x08, 0x08, 0x08, 0x08, 0x09, 0x04, 0x08, 0x0c, 0x07, 0x0c, + 0x0c, 0x20, 0x11, 0x0c, 0x0d, 0x00, 0x08, 0x09, 0x09, 0x09, 0x09, 0x0a, + 0x0a, 0x0d, 0x00, 0x09, 0x0e, 0x0e, 0x0a, 0x0a, 0x0a, 0x0e, 0x31, 0x80, + 0x20, 0x04, 0x0a, 0x0a, 0x0b, 0x0b, 0x0e, 0x0a, 0x0f, 0x02, 0x0f, 0x0b, + 0x0b, 0x0b, 0x0f, 0x0e, 0x20, 0x04, 0x0b, 0x00, 0x0b, 0x0c, 0x0c, 0x0f, + 0x0b, 0x10, 0x10, 0x0c, 0x30, 0x0c, 0x0c, 0x30, 0x03, 0x20, 0x06, 0x0d, + 0x10, 0x13, 0x0f, 0x00, 0x14, 0x14, 0x0d, 0x0d, 0x10, 0x14, 0x02, 0x10, + 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x10, 0x0c, 0x00, 0x11, 0x11, + 0x0e, 0x0e, 0x0d, 0x11, 0x01, 0x0d, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, + 0x0e, 0x11, 0x0d, 0x00, 0x12, 0x12, 0x0f, 0x0f, 0x0e, 0x12, 0x10, 0x0e, + 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x0f, 0x12, 0x0e, 0x00, 0x13, 0x13, + 0x10, 0x10, 0x0f, 0x13, 0x11, 0x0f, 0x00, 0x10, 0x10, 0x10, 0x10, 0x11, + 0x11, 0x14, 0x11, 0x01, 0x15, 0x15, 0x11, 0x11, 0x11, 0x15, 0x13, 0x20, + 0x04, 0x00, 0x11, 0x11, 0x12, 0x12, 0x15, 0x12, 0x16, 0x16, 0x04, 0x12, + 0x12, 0x12, 0x16, 0x14, 0x20, 0x04, 0x12, 0x12, 0x00, 0x13, 0x13, 0x16, + 0x13, 0x17, 0x17, 0x13, 0x13, 0x80, 0x50, 0x04, 0x13, 0x13, 0x14, 0x16, + 0x19, 0x16, 0x1a, 0x00, 0x1a, 0x14, 0x14, 0x16, 0x1a, 0x18, 0x16, 0x14, + 0x00, 0x14, 0x14, 0x14, 0x15, 0x15, 0x18, 0x15, 0x19, 0x02, 0x19, 0x15, + 0x15, 0x15, 0x19, 0x1f, 0x20, 0x04, 0x15, 0x00, 0x15, 0x16, 0x14, 0x17, + 0x14, 0x18, 0x18, 0x16, 0x00, 0x16, 0x14, 0x18, 0x1e, 0x14, 0x16, 0x16, + 0x16, 0x00, 0x16, 0x17, 0x17, 0x1a, 0x17, 0x1b, 0x1b, 0x17, 0x08, 0x17, + 0x17, 0x1b, 0x1c, 0x20, 0x04, 0x17, 0x17, 0x18, 0x00, 0x18, 0x1b, 0x18, + 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x20, 0x1c, 0x19, 0x20, 0x04, 0x18, 0x18, + 0x19, 0x1a, 0x1d, 0x00, 0x1a, 0x1e, 0x1e, 0x19, 0x19, 0x1a, 0x1e, 0x1b, + 0x10, 0x1a, 0x19, 0x19, 0x20, 0x07, 0x19, 0x1c, 0x19, 0x1d, 0x00, 0x1d, + 0x1a, 0x1a, 0x19, 0x1d, 0x1a, 0x19, 0x1a, 0x00, 0x1a, 0x1a, 0x1a, 0x1b, + 0x1b, 0x1e, 0x1b, 0x1f, 0x02, 0x1f, 0x1b, 0x1b, 0x1b, 0x1f, 0x1d, 0x20, + 0x04, 0x1b, 0x00, 0x1b, 0x1c, 0x22, 0x06, 0x22, 0x06, 0x06, 0x1c, 0x80, + 0x20, 0x06, 0x2e, 0x22, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x02, 0x23, 0x0a, + 0x23, 0x0a, 0x0a, 0x1d, 0x20, 0x06, 0x2d, 0x00, 0x23, 0x1d, 0x1d, 0x1d, + 0x1d, 0x1e, 0x1c, 0x1f, 0x04, 0x1c, 0x20, 0x20, 0x1e, 0x1e, 0x20, 0x04, + 0x1c, 0x1e, 0x00, 0x1e, 0x1e, 0x1e, 0x1f, 0x1e, 0x21, 0x1e, 0x22, 0x00, + 0x24, 0x1f, 0x1f, 0x1e, 0x22, 0x22, 0x1e, 0x1f, 0x00, 0x1f, 0x1f, 0x1f, + 0x20, 0x1f, 0x22, 0x1f, 0x23, 0x00, 0x22, 0x20, 0x20, 0x1f, 0x24, 0x23, + 0x1f, 0x20, 0x00, 0x20, 0x20, 0x20, 0x21, 0x20, 0x24, 0x20, 0x25, 0x10, + 0x25, 0x21, 0x21, 0x20, 0x04, 0x20, 0x21, 0x21, 0x21, 0x05, 0x21, 0x22, + 0x1d, 0x20, 0x1d, 0x20, 0x05, 0x22, 0x20, 0x04, 0x00, 0x1d, 0x22, 0x22, + 0x22, 0x22, 0x23, 0x21, 0x23, 0x09, 0x21, 0x24, 0x23, 0x23, 0x20, 0x06, + 0x24, 0x21, 0x20, 0x06, 0x00, 0x23, 0x24, 0x24, 0x25, 0x24, 0x26, 0x26, + 0x24, 0x60, 0x24, 0x50, 0x04, 0x20, 0x0d, 0x25, 0x26, 0x25, 0x27, 0x27, + 0x30, 0x25, 0x25, 0x50, 0x04, 0x20, 0x0d, 0x26, 0x27, 0x26, 0x28, 0x03, + 0x28, 0x26, 0x26, 0x26, 0x28, 0x29, 0x20, 0x04, 0x20, 0x0d, 0x00, 0x27, + 0x28, 0x27, 0x29, 0x29, 0x27, 0x27, 0x27, 0x30, 0x29, 0x2a, 0x20, 0x04, + 0x20, 0x0d, 0x29, 0x2a, 0x29, 0x2b, 0x00, 0x2b, 0x28, 0x28, 0x29, 0x2b, + 0x2c, 0x29, 0x28, 0x40, 0x28, 0x20, 0x07, 0x2a, 0x07, 0x2a, 0x07, 0x07, + 0x29, 0x84, 0x20, 0x06, 0x33, 0x2a, 0x29, 0x29, 0x20, 0x07, 0x2b, 0x0b, + 0x08, 0x2b, 0x0b, 0x0b, 0x2a, 0x20, 0x06, 0x32, 0x2b, 0x2a, 0x40, 0x2a, + 0x20, 0x07, 0x2c, 0x2b, 0x2c, 0x2d, 0x2c, 0x2b, 0x0c, 0x2b, 0x2c, 0x2c, + 0x2f, 0x20, 0x05, 0x20, 0x07, 0x2d, 0x2c, 0x00, 0x2d, 0x2e, 0x2d, 0x2c, + 0x2c, 0x2d, 0x2d, 0x30, 0xc0, 0x20, 0x05, 0x20, 0x07, 0x2e, 0x2d, 0x2e, + 0x2f, 0x2e, 0x2d, 0x0c, 0x2d, 0x2e, 0x2e, 0x34, 0x20, 0x05, 0x20, 0x07, + 0x30, 0x2f, 0x00, 0x30, 0x31, 0x30, 0x2e, 0x2e, 0x30, 0x30, 0x0a, 0x80, + 0x20, 0x05, 0x2e, 0x2e, 0x2f, 0x2f, 0x2e, 0x2f, 0x30, 0x28, 0x2f, 0x2f, + 0x20, 0x01, 0x09, 0x40, 0x05, 0x30, 0x31, 0x31, 0x00, 0x31, 0x2c, 0x32, + 0x30, 0x30, 0x31, 0x32, 0x08, 0x19, 0x31, 0x30, 0x30, 0x20, 0x07, 0x3b, + 0x34, 0x33, 0x31, 0x20, 0x06, 0x40, 0x0b, 0x20, 0x05, 0x31, 0x31, 0x32, + 0x32, 0x30, 0x32, 0x44, 0x32, 0x20, 0x05, 0x32, 0x31, 0x0f, 0x20, 0x04, + 0x32, 0x32, 0xe0, 0xfb, 0x5f, 0xf3, 0x57, 0x7f, 0xf3, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x2c, 0xa3, 0x00, + 0x11, 0x13, 0x00, 0x00, 0x30, 0x01, 0x32, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x37, 0xe7, 0x0f, + 0xd8, 0x00, 0x00, 0x00, 0x02, 0x32, 0xe2, 0x30, 0xf3, 0x30, 0xc6, 0x01, + 0x30, 0xd3, 0x30, 0xc7, 0x30, 0xaa, 0x30, 0x06, 0x38, 0x21, 0x00, 0x4d, + 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x01, 0x65, 0x00, 0x76, 0x00, + 0x69, 0x00, 0x64, 0x20, 0x07, 0x40, 0x6f, 0x10, 0x15, 0xc0, 0x7f, 0x99, + 0x84, 0x97, 0x5f, 0xf4, 0x7e, 0x02, 0x84, 0x76, 0x9a, 0x4e, 0x01, 0x77, + 0x06, 0x3b, 0x21, 0xac, 0x00, 0xba, 0x4c, 0xd1, 0x44, 0xbe, 0x70, 0xb3, + 0x24, 0x68, 0xc6, 0x06, 0x5b, 0x9f, 0x08, 0x13, 0x7f, 0x75, 0x05, 0xcc, + 0xa8, 0x1c, 0x04, 0x3e, 0x00, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x35, 0x04, + 0x32, 0x09, 0x04, 0x38, 0x04, 0x34, 0x20, 0x07, 0x3e, 0x04, 0x10, 0x1d, + 0xb4, 0xff, 0x15, 0x01, 0x0a, 0x0a, 0x20, 0x01, 0x01, 0x20, 0x06, 0x07, + 0x20, 0x05, 0x20, 0x01, 0x01, 0x58, 0x17, 0x03, 0x32, 0xa2, 0x30, 0xeb, + 0x82, 0x28, 0x17, 0xa3, 0x30, 0xac, 0x30, 0xb9, 0x06, 0x48, 0x17, 0x41, + 0x20, 0x00, 0x72, 0x28, 0x15, 0x69, 0x00, 0x67, 0x00, 0x61, 0x20, 0x00, + 0x73, 0x10, 0x16, 0x20, 0x7f, 0x3f, 0x96, 0x82, 0x84, 0xa0, 0x10, 0x52, + 0xaf, 0x65, 0x06, 0x58, 0x15, 0x00, 0x00, 0x44, 0xc5, 0x00, 0x74, 0xb9, + 0xf0, 0xd2, 0x00, 0xac, 0xa4, 0xc2, 0xc4, 0x06, 0x5f, 0xb7, 0x0e, 0xf3, + 0x7f, 0x10, 0x04, 0x40, 0x28, 0x15, 0x38, 0x04, 0x06, 0x33, 0x04, 0x30, + 0x04, 0x41, 0x05, 0xc8, 0x11, 0x10, 0x17, 0x54, 0xff, 0x02, 0x90, 0x38, + 0x0c, 0x01, 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x00, 0x62, 0xea, + 0xd9, 0xd7, 0x00, 0x00, 0x04, 0x32, 0x06, 0xab, 0x30, 0xcd, 0x30, 0xed, + 0x20, 0x03, 0x06, 0x58, 0x15, 0x00, 0x2a, 0x00, 0x43, 0x28, 0x0f, 0x6e, + 0x2f, 0xad, 0x6c, 0x4f, 0xb7, 0x65, 0xc0, 0x06, 0x08, 0x1b, 0x10, 0x0e, + 0xf0, 0x7f, 0x61, 0x53, 0x85, 0x51, 0x1b, 0x6d, 0x20, 0x85, 0x51, 0x06, + 0x78, 0x19, 0x74, 0xce, 0x2c, 0xb1, 0x5c, 0x1a, 0xb8, 0x24, 0xb1, 0x06, + 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1a, 0x28, 0x0f, 0x3d, 0x03, 0x04, 0x35, + 0x04, 0x3b, 0x04, 0x3e, 0x40, 0x07, 0x05, 0xf8, 0x1b, 0xa5, 0x10, 0x16, + 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, + 0x04, 0x03, 0x03, 0x74, 0xe7, 0xfb, 0x28, 0x17, 0x05, 0x32, 0x40, 0xbb, + 0x28, 0x15, 0xfb, 0x30, 0xe9, 0x30, 0xeb, 0x30, 0x54, 0xb4, 0x06, 0x48, + 0x19, 0x43, 0x28, 0x13, 0x72, 0x2f, 0xb3, 0x6f, 0x00, 0x15, 0x20, 0x00, + 0x4c, 0x2f, 0xb3, 0x72, 0x2f, 0xb9, 0x6f, 0x10, 0x15, 0xa0, 0x7f, 0x00, + 0x5e, 0x58, 0x57, 0x7f, 0xc9, 0x62, 0x14, 0x5c, 0x20, 0x08, 0x62, 0x06, + 0x58, 0x17, 0x38, 0xc1, 0x5c, 0xb8, 0x7c, 0x06, 0xb7, 0x74, 0xb9, 0xe0, + 0xac, 0x06, 0x7b, 0x97, 0x0e, 0xd3, 0x7f, 0x21, 0xa0, 0x28, 0x13, 0x40, + 0x20, 0x01, 0x3e, 0x04, 0x2d, 0x00, 0x1b, 0x8d, 0x28, 0x23, 0x40, 0x04, + 0x33, 0x28, 0x21, 0x10, 0x1d, 0x94, 0xff, 0x04, 0x38, 0x0c, 0x28, 0x03, + 0x04, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x04, 0x04, 0xfc, 0x00, 0xe8, 0x79, + 0xd9, 0x00, 0x00, 0x06, 0x32, 0xb3, 0x8d, 0x28, 0x17, 0xcb, 0x30, 0xa2, + 0x06, 0x48, 0x13, 0x5f, 0xaf, 0x6f, 0x6f, 0xab, 0x60, 0x69, 0x2f, 0xb9, + 0x10, 0x16, 0x10, 0x7f, 0xd1, 0x79, 0x1b, 0x6d, 0x3c, 0x10, 0x5c, 0x9a, + 0x4e, 0x06, 0x58, 0x15, 0x00, 0x00, 0x5c, 0xcf, 0x02, 0x5c, 0xb8, 0xc8, + 0xb2, 0x44, 0xc5, 0x0e, 0xd3, 0x7f, 0xf4, 0xa8, 0x06, 0x83, 0xff, 0x1a, + 0x28, 0x11, 0x3b, 0x28, 0x15, 0x3d, 0x04, 0x38, 0x34, 0x04, 0x4f, 0x05, + 0xa8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x05, 0x38, 0x0c, 0x04, 0x05, 0x80, + 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x7e, 0xe7, 0xdd, 0x00, 0xd6, 0x00, + 0x00, 0x07, 0x32, 0xc9, 0x30, 0xa5, 0x02, 0x30, 0xe9, 0x30, 0xb9, 0x30, + 0xce, 0x06, 0x68, 0x19, 0x44, 0x23, 0x00, 0x75, 0x2f, 0xaf, 0x61, 0x00, + 0x7a, 0x28, 0x19, 0x05, 0xbf, 0xa7, 0x80, 0x10, 0x0f, 0x70, 0x7f, 0x5c, + 0x67, 0xc9, 0x62, 0xaf, 0x65, 0xfa, 0x40, 0x8b, 0x06, 0x78, 0x17, 0x50, + 0xb4, 0x7c, 0xb7, 0xa4, 0xc2, 0x30, 0x78, 0xb1, 0x06, 0x7b, 0x97, 0x0e, + 0xf3, 0x7f, 0x14, 0x04, 0x43, 0x04, 0x05, 0x40, 0x04, 0x30, 0x04, 0x41, + 0x28, 0x19, 0x3e, 0x06, 0x28, 0x17, 0xa5, 0x10, 0x16, 0xf4, 0xff, 0x06, + 0x38, 0x0c, 0x05, 0x06, 0x20, 0x06, 0x02, 0x20, 0x05, 0x00, 0x06, 0x06, + 0x3e, 0xe8, 0xd3, 0xd7, 0x00, 0x00, 0x01, 0x08, 0x32, 0xd5, 0x30, 0xed, + 0x30, 0xec, 0x28, 0x17, 0xa0, 0x06, 0x7c, 0xaf, 0x46, 0x4f, 0xad, 0x72, + 0x00, 0x65, 0x00, 0x73, 0x80, 0x10, 0x16, 0x40, 0x7f, 0x17, 0x5f, 0x1b, + 0x6d, 0xf7, 0x96, 0xaf, 0x40, 0x65, 0x06, 0x78, 0x17, 0x0c, 0xd5, 0x5c, + 0xb8, 0x08, 0xb8, 0x22, 0xa4, 0xc2, 0x10, 0x06, 0x73, 0x7f, 0x24, 0x04, + 0x3b, 0x28, 0x0f, 0x40, 0x34, 0x04, 0x35, 0x28, 0x19, 0x10, 0x1e, 0x34, + 0xff, 0x07, 0x38, 0x0c, 0x06, 0x07, 0xa0, 0x20, 0x06, 0x12, 0x20, 0x05, + 0x07, 0x07, 0x27, 0xe8, 0x8c, 0xa2, 0x28, 0x17, 0x09, 0x48, 0x17, 0xea, + 0x30, 0xc0, 0x07, 0x08, 0x17, 0x69, 0x30, 0x00, 0x64, 0x2f, 0xb5, 0x10, + 0x16, 0x10, 0x7f, 0x5b, 0x4f, 0x57, 0x7f, 0x08, 0xcc, 0x91, 0xbe, 0x8f, + 0x06, 0xb8, 0x17, 0xac, 0xb9, 0xe4, 0x60, 0xb2, 0x10, 0x06, 0x73, 0x7f, + 0x78, 0x17, 0x38, 0x04, 0x34, 0x04, 0x30, 0xd2, 0x06, 0x28, 0x19, 0x10, + 0x16, 0xf4, 0xff, 0x08, 0x38, 0x0c, 0x07, 0x08, 0x20, 0x06, 0x13, 0x80, + 0x20, 0x05, 0x08, 0x08, 0xc2, 0xe7, 0x07, 0xd8, 0x00, 0x00, 0x00, 0x0a, + 0x32, 0xe9, 0x30, 0xd0, 0x30, 0xb8, 0x0a, 0x30, 0xa7, 0x30, 0xcf, 0x06, + 0x68, 0x19, 0x4c, 0x28, 0x0d, 0x76, 0xa3, 0x28, 0x11, 0x6c, 0x2f, 0xb7, + 0x65, 0x00, 0x6a, 0x06, 0x08, 0x1b, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0xc9, + 0x62, 0xe6, 0x74, 0x36, 0x80, 0xc8, 0x54, 0x80, 0x06, 0x78, 0x17, 0x7c, + 0xb7, 0x14, 0xbc, 0x08, 0xc6, 0x58, 0x6a, 0xd5, 0x06, 0x7b, 0x97, 0x0e, + 0xf3, 0x7f, 0x1b, 0x28, 0x0d, 0x32, 0x28, 0x11, 0x3b, 0x03, 0x04, 0x4c, + 0x04, 0x35, 0x04, 0x45, 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x4a, + 0x09, 0x38, 0x0c, 0x08, 0x09, 0x20, 0x06, 0x05, 0x20, 0x05, 0x09, 0x08, + 0x09, 0x90, 0xe7, 0xbb, 0x28, 0x17, 0x0b, 0x32, 0xde, 0x03, 0x30, 0xeb, + 0x30, 0xc9, 0x30, 0xca, 0x20, 0x03, 0x06, 0x5d, 0x2f, 0x57, 0x4d, 0x48, + 0x13, 0x64, 0x2f, 0xb3, 0x6e, 0x2f, 0xaf, 0x30, 0x07, 0x10, 0x15, 0xd0, + 0x7f, 0x00, 0x6c, 0x9a, 0x14, 0x5c, 0x1a, 0x59, 0xb3, 0x7e, 0x20, 0x1a, + 0x59, 0x06, 0x58, 0x19, 0xd0, 0xb9, 0xc4, 0xb3, 0x98, 0x1a, 0xb0, 0xc4, + 0xb3, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1c, 0x68, 0x13, 0x34, 0x0e, + 0x04, 0x3e, 0x04, 0x3d, 0x28, 0x23, 0x30, 0x07, 0x10, 0x1d, 0xb4, 0xff, + 0x0a, 0x94, 0x38, 0x0c, 0x09, 0x0a, 0x20, 0x06, 0x06, 0x20, 0x05, 0x0a, + 0x0a, 0x10, 0x2f, 0xe7, 0xed, 0x28, 0x17, 0x0c, 0x32, 0xd1, 0x30, 0x05, + 0xa4, 0x30, 0xb5, 0x30, 0xf3, 0x28, 0x1b, 0xa5, 0x06, 0x48, 0x19, 0x45, + 0x50, 0x2f, 0xaf, 0x79, 0x00, 0x73, 0x2f, 0xb5, 0x6e, 0x28, 0x1d, 0x40, + 0xfa, 0x10, 0x16, 0x00, 0x7f, 0x3e, 0x6d, 0x51, 0x68, 0x5c, 0x67, 0xc0, + 0x06, 0x58, 0x13, 0x3f, 0xff, 0x0c, 0xd3, 0x74, 0xc7, 0xb0, 0xc0, 0x34, + 0x50, 0xb4, 0x06, 0x78, 0x17, 0x0e, 0xf3, 0x7f, 0x1f, 0x28, 0x17, 0x39, + 0x04, 0x56, 0x41, 0x28, 0x1d, 0x3d, 0x28, 0x1b, 0x43, 0x05, 0xc8, 0x13, + 0x10, 0x17, 0x34, 0xff, 0x0b, 0x50, 0x0b, 0x70, 0x01, 0x08, 0x40, 0x0a, + 0x05, 0xe9, 0xb4, 0xd6, 0x00, 0x00, 0x00, 0x0d, 0x32, 0xea, 0x30, 0xaa, + 0x30, 0x01, 0xfb, 0x30, 0xcd, 0x30, 0xb0, 0x30, 0xed, 0x06, 0x48, 0x17, + 0x10, 0x52, 0x00, 0xed, 0x2f, 0xab, 0x20, 0x00, 0x4e, 0x00, 0x06, 0x65, + 0x00, 0x67, 0x00, 0x72, 0x06, 0x0f, 0xaf, 0x10, 0x0e, 0xf0, 0x7f, 0x85, + 0x01, 0x51, 0x3c, 0x68, 0x57, 0x7f, 0xb3, 0x6c, 0x06, 0x78, 0x19, 0x00, + 0xac, 0xb9, 0x24, 0xc6, 0x24, 0xb1, 0xf8, 0xad, 0x30, 0x5c, 0xb8, 0x06, + 0x58, 0x99, 0x0e, 0xf3, 0x7f, 0x20, 0x04, 0x38, 0x04, 0x00, 0x3e, 0x04, + 0x2d, 0x00, 0x1d, 0x04, 0x35, 0x04, 0x19, 0x33, 0x04, 0x40, 0x20, 0x0b, + 0x10, 0x1d, 0xd4, 0xff, 0x0c, 0x0c, 0x70, 0x01, 0x45, 0x0a, 0x40, 0x0a, + 0x71, 0xe8, 0x8c, 0x28, 0x17, 0x0e, 0x28, 0x17, 0x18, 0xd9, 0x30, 0xe9, + 0x06, 0x48, 0x11, 0x78, 0x17, 0x69, 0x00, 0x76, 0xb0, 0x28, 0x13, 0x72, + 0x2f, 0xb7, 0x10, 0x16, 0x30, 0x7f, 0xcc, 0x91, 0xe6, 0x97, 0x30, 0xc9, + 0x62, 0x06, 0x78, 0x15, 0x38, 0x17, 0xa0, 0xbc, 0x7c, 0xb7, 0xd1, 0x10, + 0x06, 0x93, 0x7f, 0x38, 0x17, 0x32, 0x28, 0x13, 0x40, 0x04, 0x30, 0x05, + 0xe8, 0x11, 0x94, 0x10, 0x17, 0x54, 0xff, 0x0d, 0x0d, 0x70, 0x01, 0x09, + 0x40, 0x0a, 0x07, 0xea, 0x00, 0x86, 0xd8, 0x00, 0x00, 0x0f, 0x32, 0xed, + 0x30, 0x10, 0xc1, 0x30, 0xe3, 0x06, 0xc8, 0x17, 0x6f, 0x00, 0x63, 0x00, + 0x61, 0x68, 0x06, 0x68, 0x15, 0x10, 0x0f, 0x10, 0x7f, 0x57, 0x7f, 0x70, + 0x60, 0x06, 0x98, 0x15, 0x03, 0x00, 0x00, 0x5c, 0xb8, 0x28, 0xcc, 0x06, + 0x9b, 0x95, 0x0f, 0x13, 0x7f, 0x06, 0x20, 0x04, 0x3e, 0x04, 0x47, 0x06, + 0x68, 0x13, 0x10, 0x17, 0x34, 0xff, 0x0e, 0x50, 0x0e, 0x70, 0x01, 0x0b, + 0x40, 0x0a, 0x7b, 0xe7, 0x5d, 0xd9, 0x00, 0x00, 0x00, 0x10, 0x32, 0xb5, + 0x30, 0xeb, 0x30, 0x51, 0xc8, 0x06, 0xa8, 0x17, 0x53, 0x2f, 0xa7, 0x6c, + 0x00, 0x74, 0x28, 0x1d, 0x81, 0x10, 0x16, 0x50, 0x7f, 0x28, 0x84, 0x14, + 0x5c, 0x58, 0x62, 0x06, 0x98, 0x19, 0x0d, 0xb4, 0xc0, 0xa0, 0xd1, 0x06, + 0xb8, 0x17, 0x0e, 0xf3, 0x7f, 0x21, 0x28, 0x13, 0x06, 0x3b, 0x04, 0x4c, + 0x04, 0x42, 0x28, 0x1f, 0x10, 0x1e, 0x34, 0xff, 0x0f, 0x50, 0x0f, 0x70, + 0x01, 0x0c, 0x40, 0x0a, 0xaf, 0xe9, 0xc8, 0xd6, 0x10, 0x00, 0x00, 0x11, + 0x28, 0x17, 0xf3, 0x30, 0xfb, 0x30, 0x18, 0xdb, 0x30, 0xbb, 0x06, 0x68, + 0x1b, 0x38, 0x17, 0x6e, 0x00, 0x20, 0x22, 0x00, 0x4a, 0x2f, 0xb7, 0x73, + 0x00, 0xe9, 0x10, 0x16, 0x00, 0x7f, 0x23, 0x04, 0x57, 0x55, 0x4f, 0x5e, + 0x58, 0x06, 0x98, 0x17, 0xb0, 0xc0, 0x0e, 0x38, 0xd6, 0x38, 0xc1, 0x06, + 0xdb, 0x97, 0x0e, 0xb3, 0x7f, 0x38, 0x17, 0x3d, 0x08, 0x04, 0x2d, 0x00, + 0x25, 0x28, 0x17, 0x41, 0x04, 0x35, 0xca, 0x06, 0x08, 0x1b, 0x10, 0x16, + 0xf4, 0xff, 0x10, 0x10, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x96, 0x00, 0xe7, + 0xac, 0xd7, 0x00, 0x00, 0x12, 0x32, 0xbd, 0x03, 0x30, 0xea, 0x30, 0xa2, + 0x30, 0xce, 0x06, 0x68, 0x15, 0x3f, 0xaf, 0x07, 0x6f, 0x00, 0x72, 0x00, + 0x69, 0x48, 0x1d, 0x06, 0x3f, 0xb3, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x22, + 0x7d, 0xcc, 0x91, 0x9a, 0x4e, 0xfa, 0x8b, 0x80, 0x06, 0x78, 0x19, 0x8c, + 0xc1, 0xac, 0xb9, 0x44, 0xc5, 0x78, 0x50, 0xb1, 0x10, 0x06, 0x73, 0x7f, + 0x21, 0x28, 0x0f, 0x40, 0x04, 0x4c, 0x04, 0x59, 0x4f, 0x28, 0x1d, 0x3e, + 0x06, 0x08, 0x15, 0x10, 0x17, 0x14, 0xff, 0x11, 0x11, 0x70, 0x01, 0x40, + 0x0f, 0x40, 0x0a, 0x5a, 0xe8, 0xbe, 0xd6, 0x00, 0x00, 0x04, 0x13, 0x32, + 0xbf, 0x30, 0xaf, 0x28, 0x17, 0xec, 0x30, 0x14, 0xf3, 0x30, 0xdc, 0x06, + 0x48, 0x1b, 0x54, 0x2f, 0xaf, 0x63, 0x00, 0x40, 0x75, 0x2f, 0xb5, 0x72, + 0x00, 0x65, 0x00, 0x6d, 0x00, 0x10, 0x62, 0x00, 0xf3, 0x10, 0x15, 0xd0, + 0x7f, 0x58, 0x38, 0x59, 0x26, 0x10, 0x4f, 0x5a, 0x53, 0x06, 0x78, 0x17, + 0xc0, 0xd0, 0xe0, 0xcf, 0x03, 0x44, 0xc5, 0x18, 0xb8, 0xf4, 0xbc, 0x06, + 0x5b, 0x99, 0x0e, 0xf3, 0x7f, 0x01, 0x22, 0x04, 0x30, 0x04, 0x3a, 0x04, + 0x43, 0x20, 0x05, 0x01, 0x40, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x31, 0x05, + 0xe8, 0x1d, 0x94, 0x10, 0x16, 0xf4, 0xff, 0x12, 0x12, 0x70, 0x01, 0x10, + 0x40, 0x0a, 0x70, 0xe9, 0x01, 0x31, 0xd8, 0x00, 0x00, 0x14, 0x32, 0xc8, + 0x28, 0x13, 0x44, 0xa4, 0x28, 0x15, 0xbf, 0x30, 0xfb, 0x20, 0x07, 0xfb, + 0x30, 0xaa, 0x30, 0x0f, 0xb9, 0x05, 0xa8, 0x21, 0x54, 0x48, 0x0f, 0x69, + 0x2f, 0xad, 0x74, 0x8d, 0x2f, 0xb3, 0x20, 0x00, 0x79, 0x20, 0x03, 0x50, + 0x13, 0x73, 0x10, 0x15, 0x40, 0x7f, 0x00, 0x09, 0x4e, 0x41, 0x53, 0x09, + 0x4e, 0xba, 0x4e, 0x80, 0x06, 0x78, 0x17, 0xb8, 0xd2, 0x08, 0xb8, 0x78, + 0xc7, 0xc0, 0x13, 0xd0, 0x74, 0xc7, 0x30, 0x09, 0xa4, 0xc2, 0x06, 0x1b, + 0x97, 0x0e, 0xd3, 0x7f, 0x41, 0x22, 0x48, 0x0f, 0x39, 0x04, 0x3d, 0x04, + 0x42, 0x28, 0x21, 0x1b, 0x2d, 0x00, 0x38, 0x20, 0x03, 0x50, 0x13, 0x41, + 0x05, 0x48, 0x1f, 0x10, 0x16, 0xf4, 0xff, 0x28, 0x13, 0x13, 0x70, 0x01, + 0x11, 0x40, 0x0a, 0x5f, 0xe8, 0x54, 0x45, 0xd9, 0x00, 0x3f, 0xff, 0x01, + 0x0a, 0x0a, 0x20, 0x01, 0x01, 0x20, 0x06, 0x44, 0x07, 0x20, 0x05, 0x01, + 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, 0x02, 0x02, 0x02, + 0x02, 0x03, 0x30, 0x04, 0x02, 0x51, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, + 0x03, 0x03, 0x04, 0x30, 0x04, 0x28, 0x03, 0x04, 0x20, 0x06, 0x0e, 0x20, + 0x05, 0x04, 0x04, 0x05, 0x90, 0x30, 0x04, 0x04, 0x05, 0x40, 0x06, 0x05, + 0x05, 0x05, 0x05, 0x4a, 0x06, 0x30, 0x04, 0x05, 0x06, 0x20, 0x06, 0x02, + 0x20, 0x05, 0x06, 0x25, 0x06, 0x07, 0x30, 0x04, 0x06, 0x07, 0x20, 0x06, + 0x12, 0x20, 0x05, 0x12, 0x07, 0x07, 0x08, 0x30, 0x04, 0x07, 0x08, 0x20, + 0x06, 0x13, 0x89, 0x20, 0x05, 0x08, 0x08, 0x09, 0x30, 0x04, 0x08, 0x09, + 0x20, 0x06, 0x44, 0x05, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x30, 0x04, 0x09, + 0x0a, 0xa1, 0x20, 0x06, 0x06, 0x20, 0x05, 0x0a, 0x0a, 0x0b, 0x0b, 0x70, + 0x01, 0x4a, 0x08, 0x40, 0x0a, 0x0c, 0x0c, 0x70, 0x01, 0x0a, 0x40, 0x0a, + 0x0d, 0x52, 0x0d, 0x70, 0x01, 0x09, 0x40, 0x0a, 0x0e, 0x0e, 0x70, 0x01, + 0x0b, 0x94, 0x40, 0x0a, 0x0f, 0x0f, 0x70, 0x01, 0x0c, 0x40, 0x0a, 0x10, + 0x10, 0xa5, 0x70, 0x01, 0x0d, 0x40, 0x0a, 0x11, 0x11, 0x70, 0x01, 0x0f, + 0x40, 0x0a, 0xe0, 0xf9, 0x4f, 0xf1, 0x47, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x33, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x0b, 0x0d, 0xd4, + 0xd1, 0x00, 0x00, 0x00, 0x01, 0x33, 0x73, 0x7c, 0x18, 0x98, 0xd0, 0x00, + 0x30, 0xfc, 0x30, 0xb8, 0x30, 0xf3, 0x30, 0xf8, 0x10, 0x8a, 0xf6, 0x5c, + 0x05, 0xf8, 0x25, 0x55, 0x00, 0x53, 0x00, 0x00, 0x20, 0x00, 0x56, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x50, 0x67, 0x20, 0x05, 0x6e, 0x20, 0x0d, 0x49, + 0x00, 0x73, 0x00, 0x16, 0x6c, 0x00, 0x61, 0x20, 0x0b, 0x64, 0x20, 0x09, + 0x04, 0xd8, 0xb7, 0xce, 0xb6, 0x20, 0x69, 0x65, 0x20, 0x6f, 0x50, 0x83, + 0x65, 0x40, 0x85, 0x50, 0x0f, 0x61, 0x08, 0x00, 0x6d, 0x00, 0xe9, 0x20, + 0x95, 0x69, 0x00, 0x63, 0xf6, 0x20, 0x8b, 0x30, 0x99, 0x30, 0x27, 0x03, + 0xf9, 0x45, 0x41, 0x20, 0x65, 0x30, 0x75, 0x69, 0x28, 0x00, 0x6b, 0x40, + 0xf1, 0x69, 0x20, 0xfb, 0x63, 0x00, 0x68, 0x82, 0x20, 0x93, 0x20, 0x00, + 0x4a, 0x00, 0x75, 0x21, 0x0f, 0x67, 0x35, 0x00, 0x66, 0x40, 0x97, 0x30, + 0x1b, 0x6e, 0x21, 0x19, 0x65, 0x21, 0x1b, 0x6f, 0x6e, 0x03, 0x89, 0xcc, + 0x31, 0x6b, 0x6f, 0x41, 0x03, 0x31, 0x85, 0x50, 0xff, 0x31, 0x85, 0x45, + 0x69, 0x21, 0x95, 0x53, 0x00, 0x74, 0x21, 0x85, 0x74, 0x40, 0x85, 0x57, + 0x69, 0x20, 0x0b, 0x65, 0x40, 0x7f, 0x69, 0x03, 0xca, 0x48, 0x71, 0xeb, + 0x51, 0x81, 0x6d, 0xed, 0x61, 0x7f, 0x51, 0x6b, 0x20, 0x21, 0xff, 0x31, + 0x07, 0x6c, 0x20, 0xa1, 0xaa, 0x31, 0xa1, 0x45, 0x20, 0x01, 0x2e, 0x22, + 0x2d, 0x55, 0x22, 0x35, 0x2e, 0x80, 0x03, 0x6a, 0xce, 0x8e, 0x7f, 0x5e, + 0x5c, 0xf4, 0x7e, 0x14, 0x02, 0x5c, 0xac, 0x4e, 0xa4, 0x7f, 0x9b, 0x06, + 0x02, 0xfd, 0x00, 0x00, 0x00, 0xf8, 0xbb, 0x6d, 0xad, 0x39, 0xb8, 0x20, + 0x00, 0x00, 0x84, 0xbc, 0xc4, 0xc9, 0x44, 0xc5, 0x7c, 0x07, 0xc7, 0x9c, + 0xb7, 0xdc, 0xb4, 0x05, 0xbb, 0xa9, 0xd2, 0x7f, 0x33, 0x73, 0x8b, 0x32, + 0x61, 0x20, 0x00, 0x4d, 0x40, 0x0d, 0x67, 0x41, 0x81, 0x32, 0xf9, 0x77, + 0x69, 0x83, 0x91, 0x32, 0x05, 0x03, 0xb1, 0xff, 0x6c, 0x22, 0xed, 0x71, + 0xff, 0x54, 0x05, 0xb6, 0x52, 0x67, 0x20, 0xa3, 0x1b, 0x33, 0x81, 0x6e, + 0x42, 0x25, 0x03, 0xfc, 0xc5, 0x10, 0x00, 0x04, 0x3c, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x38, 0x00, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x41, + 0xa2, 0x20, 0x07, 0x38, 0x20, 0x11, 0x20, 0x00, 0x12, 0x20, 0x13, 0x40, + 0x35, 0x04, 0x33, 0x20, 0x19, 0xb0, 0x15, 0x3e, 0x20, 0x21, 0x42, 0x20, + 0x2f, 0x1c, 0x3e, 0x04, 0x32, 0x20, 0x2f, 0x0b, 0x14, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x01, 0x01, 0xf0, 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x1c, 0xd4, 0x00, 0x11, 0x19, 0x00, 0x00, + 0x30, 0x01, 0x34, 0x14, 0x20, 0x50, 0x08, 0xe0, 0x06, 0x70, 0x05, 0x10, + 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x77, 0x07, 0x6b, 0xd0, 0x00, 0x00, 0x00, + 0x02, 0x34, 0xc7, 0x30, 0xa3, 0x30, 0xb9, 0x08, 0x30, 0xc8, 0x30, 0xea, + 0x20, 0x03, 0x96, 0x99, 0xfd, 0x04, 0x90, 0x30, 0x57, 0x3a, 0x53, 0x05, + 0xb8, 0x29, 0x44, 0x00, 0x01, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, + 0x20, 0x07, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x46, 0x00, 0x10, + 0x65, 0x00, 0x64, 0x20, 0x03, 0x72, 0x00, 0x61, 0x00, 0x5a, 0x6c, 0x05, + 0xc0, 0x7f, 0x63, 0x20, 0x87, 0x30, 0x7f, 0xe9, 0x20, 0x7f, 0xe9, 0xb5, + 0x05, 0x60, 0x7f, 0x43, 0x20, 0xe5, 0x30, 0xe9, 0x63, 0x20, 0xed, 0x73, + 0x20, 0xfd, 0x15, 0x44, 0x00, 0x2e, 0x21, 0x01, 0x2e, 0x06, 0x21, 0x7f, + 0x65, 0x21, 0x85, 0xdb, 0x51, 0x81, 0x30, 0x93, 0x70, 0x41, 0x8f, 0x31, + 0x81, 0x65, 0x05, 0xe1, 0xff, 0xd0, 0x7d, 0xf0, 0x04, 0xfa, 0xb5, 0x32, + 0xf3, 0x05, 0xd2, 0xf1, 0xdb, 0x87, 0xa0, 0xbc, 0x24, 0xb1, 0x00, 0x18, + 0xc2, 0xd8, 0xc5, 0x7c, 0xb7, 0x20, 0x00, 0x02, 0xf0, 0xc5, 0x29, 0xbc, + 0x6c, 0xad, 0x05, 0xdb, 0xa7, 0x48, 0x8e, 0x23, 0x73, 0x6f, 0x00, 0x66, + 0x23, 0x71, 0x33, 0x85, 0x53, 0x79, 0x6c, 0x8e, 0x23, 0x93, 0x6a, 0x00, + 0x6b, 0x42, 0x8d, 0xd3, 0x1d, 0x0c, 0x13, 0xff, 0x24, 0x08, 0x04, 0x35, + 0x04, 0x34, 0x20, 0x03, 0x40, 0x04, 0x30, 0x00, 0x04, 0x3b, 0x04, 0x4c, + 0x04, 0x3d, 0x04, 0x4b, 0x00, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3e, 0x04, + 0x3a, 0x86, 0x20, 0x13, 0x43, 0x04, 0x33, 0x04, 0x0d, 0x94, 0xff, 0x10, + 0x0e, 0x30, 0x7f, 0x01, 0x00, 0x0b, 0x0b, 0x08, 0x0b, 0x0b, 0x01, 0x01, + 0x0d, 0x24, 0x0b, 0x18, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x34, + 0x01, 0xa2, 0x30, 0xde, 0x30, 0xbd, 0x30, 0xca, 0x28, 0x1b, 0x8a, 0x06, + 0x5f, 0xb7, 0x41, 0x00, 0x6d, 0x27, 0xff, 0x7a, 0x28, 0x11, 0x6e, 0xf8, + 0x47, 0x19, 0x06, 0xb0, 0x7f, 0x04, 0xd7, 0x01, 0x09, 0x10, 0xff, 0x0e, + 0x30, 0x7f, 0x9a, 0x4e, 0x6c, 0x01, 0x9a, 0x59, 0x5b, 0xb9, 0x8f, 0x86, + 0x75, 0x06, 0x58, 0x1d, 0x00, 0x44, 0xc5, 0xc8, 0xb9, 0x8c, 0xc1, 0x98, + 0xb0, 0x31, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0x06, 0x33, 0xff, 0x10, 0x04, + 0x3c, 0x28, 0x11, 0x1e, 0x41, 0x04, 0x3e, 0x28, 0x11, 0x30, 0x07, 0x10, + 0x0d, 0xf3, 0xff, 0x0e, 0xf5, 0x7f, 0x02, 0x90, 0x38, 0x0c, 0x01, 0x02, + 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, 0x04, 0xea, 0xcf, 0x00, + 0x00, 0x04, 0x28, 0x17, 0x41, 0xf3, 0x28, 0x17, 0xa2, 0x30, 0xc6, 0x30, + 0xae, 0x06, 0x48, 0x19, 0x68, 0x41, 0x28, 0x0f, 0x38, 0x15, 0xe1, 0x4c, + 0xad, 0x67, 0x00, 0x75, 0xc0, 0x2f, 0xbf, 0x10, 0x15, 0xb0, 0x7f, 0x89, + 0x5b, 0x22, 0x7d, 0x3f, 0x96, 0x02, 0x79, 0x72, 0x09, 0x54, 0xde, 0x5d, + 0x06, 0x3b, 0x19, 0x48, 0x00, 0xc5, 0x8c, 0xc1, 0x44, 0xc5, 0x4c, 0xd1, + 0x30, 0x6c, 0xae, 0x06, 0x7b, 0x97, 0x0e, 0xd3, 0x7f, 0x10, 0x28, 0x0f, + 0x38, 0x15, 0x30, 0x04, 0x01, 0x42, 0x04, 0x35, 0x04, 0x33, 0x04, 0x38, + 0x05, 0xe8, 0x19, 0xa4, 0x10, 0x16, 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x02, + 0x03, 0x40, 0x06, 0x03, 0x03, 0x00, 0x03, 0x03, 0x34, 0x07, 0xfe, 0xd1, + 0x00, 0x00, 0x46, 0x05, 0x28, 0x17, 0xd7, 0x30, 0xec, 0x06, 0x48, 0x11, + 0x7f, 0xaf, 0x70, 0xb0, 0x28, 0x0b, 0x72, 0x06, 0x4f, 0xab, 0x10, 0x0f, + 0x30, 0x7f, 0x3f, 0x96, 0x6e, 0x66, 0x30, 0xf7, 0x96, 0x06, 0x58, 0x13, + 0x3f, 0xff, 0x44, 0xc5, 0x78, 0xd4, 0x20, 0x08, 0xb8, 0x10, 0x06, 0x93, + 0x7f, 0x10, 0x04, 0x3f, 0x04, 0x43, 0x34, 0x04, 0x40, 0x28, 0x13, 0x10, + 0x1e, 0x54, 0xff, 0x04, 0x38, 0x0c, 0x03, 0x04, 0x80, 0x40, 0x06, 0x04, + 0x04, 0x04, 0x04, 0x9d, 0x05, 0x06, 0x08, 0xd0, 0x00, 0x00, 0x06, 0x28, + 0x17, 0xe9, 0x30, 0xb0, 0x2a, 0x30, 0xa2, 0x06, 0x88, 0x19, 0x41, 0x28, + 0x13, 0x61, 0x4f, 0xa7, 0x61, 0x81, 0x10, 0x16, 0x40, 0x7f, 0x3f, 0x96, + 0xc9, 0x62, 0xdc, 0x74, 0x06, 0xb8, 0x17, 0x0d, 0x7c, 0xb7, 0xfc, 0xac, + 0x06, 0xbb, 0x97, 0x0e, 0xd3, 0x7f, 0x10, 0x28, 0x13, 0x16, 0x30, 0x04, + 0x33, 0x28, 0x1b, 0x30, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x05, + 0x90, 0x38, 0x0c, 0x04, 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x05, 0x00, + 0x49, 0x07, 0xef, 0xcf, 0x00, 0x00, 0x07, 0x34, 0x01, 0xd0, 0x30, 0xea, + 0x30, 0xca, 0x30, 0xb9, 0x06, 0x88, 0x17, 0x41, 0x42, 0x28, 0x15, 0x72, + 0x00, 0x69, 0x00, 0x6e, 0x28, 0x1d, 0x40, 0x73, 0x10, 0x16, 0x20, 0x7f, + 0xf4, 0x5d, 0xcc, 0x91, 0xb3, 0x7e, 0x20, 0xaf, 0x65, 0x06, 0x78, 0x19, + 0x14, 0xbc, 0xac, 0xb9, 0x98, 0x14, 0xb0, 0xa4, 0xc2, 0x10, 0x06, 0x73, + 0x7f, 0x11, 0x28, 0x15, 0x40, 0x04, 0x16, 0x38, 0x04, 0x3d, 0x28, 0x1d, + 0x41, 0x06, 0x28, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x06, 0x90, 0x38, 0x0c, + 0x05, 0x06, 0x40, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x22, 0x06, 0x14, + 0xce, 0x00, 0x00, 0x08, 0x34, 0x41, 0xdc, 0x28, 0x17, 0xfc, 0x30, 0xd0, + 0x30, 0xeb, 0x06, 0x68, 0x19, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6c, 0x00, + 0xed, 0x00, 0x60, 0x76, 0x48, 0x1f, 0x10, 0x16, 0x10, 0x7f, 0xbb, 0x73, + 0x29, 0x52, 0xe6, 0x14, 0x74, 0x14, 0x5c, 0x06, 0x78, 0x17, 0xfc, 0x28, + 0x17, 0x14, 0xbc, 0x30, 0x74, 0xb9, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, + 0x11, 0x04, 0x3e, 0x04, 0x5a, 0x3b, 0x28, 0x17, 0x32, 0x48, 0x1f, 0x10, + 0x1e, 0x14, 0xff, 0x07, 0x38, 0x0c, 0x06, 0x40, 0x07, 0x40, 0x06, 0x07, + 0x07, 0x07, 0x07, 0xc6, 0x05, 0x00, 0xd0, 0xd2, 0x00, 0x00, 0x09, 0x34, + 0xab, 0x30, 0x1a, 0xe9, 0x30, 0xdc, 0x20, 0x01, 0x06, 0x7c, 0xaf, 0x43, + 0x4f, 0xaf, 0x61, 0x38, 0x00, 0x62, 0x28, 0x1f, 0x30, 0x03, 0x10, 0x15, + 0xf0, 0x7f, 0x61, 0x53, 0xc9, 0x04, 0x62, 0x83, 0x6c, 0x83, 0x6c, 0x06, + 0x78, 0x17, 0x74, 0xce, 0x02, 0x7c, 0xb7, 0xf4, 0xbc, 0xf4, 0xbc, 0x10, + 0x06, 0x73, 0x7f, 0x1a, 0x8e, 0x48, 0x0f, 0x30, 0x04, 0x31, 0x28, 0x1f, + 0x30, 0x03, 0x10, 0x1d, 0xf4, 0xff, 0x08, 0x94, 0x38, 0x0c, 0x07, 0x08, + 0x20, 0x06, 0x0a, 0x20, 0x05, 0x08, 0x08, 0x00, 0x3d, 0x07, 0xa5, 0xcf, + 0x00, 0x00, 0x0a, 0x34, 0x01, 0xb3, 0x30, 0xd8, 0x30, 0xc7, 0x30, 0xb9, + 0x06, 0xa8, 0x17, 0x01, 0x6f, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x64, 0x20, + 0x03, 0x40, 0x73, 0x10, 0x16, 0x20, 0x7f, 0xd1, 0x79, 0x6b, 0x8d, 0xb7, + 0x5f, 0x20, 0xaf, 0x65, 0x06, 0x78, 0x17, 0x54, 0xcf, 0xe4, 0xd5, 0x70, + 0x14, 0xb3, 0xa4, 0xc2, 0x10, 0x06, 0x73, 0x7f, 0x1a, 0x28, 0x0f, 0x45, + 0x04, 0x16, 0x35, 0x04, 0x34, 0x20, 0x03, 0x41, 0x06, 0x08, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x09, 0x34, 0x08, 0x08, 0x30, 0x02, 0x20, 0x06, 0x0b, + 0x20, 0x05, 0x09, 0x09, 0x10, 0xdf, 0x06, 0x38, 0x28, 0x17, 0x0b, 0x34, + 0xc7, 0x30, 0x00, 0xeb, 0x30, 0xbf, 0x30, 0xfb, 0x30, 0xa2, 0x30, 0x05, + 0xde, 0x30, 0xaf, 0x30, 0xed, 0x06, 0x08, 0x1f, 0x44, 0x28, 0x13, 0x10, + 0x6c, 0x00, 0x74, 0x2f, 0xb5, 0x20, 0x00, 0x41, 0x00, 0x47, 0x6d, 0x2f, + 0xbd, 0x63, 0x00, 0x75, 0x2f, 0xc1, 0x05, 0x7f, 0xb9, 0x10, 0x0e, 0xf0, + 0x7f, 0x00, 0x3f, 0x96, 0x6c, 0x9a, 0x93, 0x5e, 0x57, 0x7f, 0x00, 0x09, + 0x4e, 0xd2, 0x89, 0x32, 0x6d, 0xb9, 0x8f, 0x08, 0x86, 0x75, 0x3a, 0x53, + 0x05, 0xbf, 0xbb, 0x78, 0xb3, 0xc0, 0x00, 0xd0, 0x44, 0xc5, 0xc8, 0xb9, + 0xe0, 0xcf, 0x5c, 0x68, 0xb8, 0x06, 0x3b, 0x9b, 0x0e, 0xf3, 0x7f, 0x14, + 0x28, 0x13, 0x3b, 0x04, 0x4c, 0x00, 0x04, 0x42, 0x04, 0x30, 0x04, 0x2d, + 0x00, 0x10, 0x20, 0x04, 0x3c, 0x20, 0x07, 0x3a, 0x04, 0x43, 0x04, 0x40, + 0xc7, 0x28, 0x2f, 0x10, 0x1d, 0x34, 0xff, 0x0a, 0x09, 0x09, 0x30, 0x02, + 0x20, 0x06, 0x30, 0x05, 0x00, 0x0a, 0x0a, 0x72, 0x06, 0xe1, 0xd3, 0x00, + 0x00, 0x04, 0x0c, 0x34, 0xd5, 0x30, 0xa1, 0x28, 0x19, 0xb3, 0x30, 0x6a, + 0xf3, 0x06, 0x08, 0x11, 0x5f, 0xff, 0x46, 0x28, 0x11, 0x6c, 0x28, 0x0b, + 0xf3, 0x20, 0x00, 0x6e, 0x10, 0x16, 0x40, 0x7f, 0xd5, 0x6c, 0x14, 0x5c, + 0x54, 0x11, 0x5b, 0xde, 0x5d, 0x06, 0x7f, 0xaf, 0x14, 0xd3, 0x58, 0x2b, + 0x9f, 0xda, 0x06, 0x90, 0x01, 0x0e, 0xf3, 0x7f, 0x24, 0x28, 0x0f, 0x38, + 0x17, 0x3a, 0x28, 0x07, 0x3d, 0xc4, 0x05, 0x48, 0x09, 0x10, 0x17, 0xd4, + 0xff, 0x0b, 0x0c, 0x0c, 0x20, 0x01, 0x0b, 0x0b, 0x10, 0x0a, 0x0c, 0x16, + 0x20, 0x05, 0x0b, 0x0b, 0x1c, 0x08, 0x00, 0x76, 0xce, 0x00, 0x00, 0x0d, + 0x34, 0xb0, 0x30, 0x1a, 0xa2, 0x30, 0xea, 0x28, 0x17, 0x06, 0x75, 0x17, + 0x47, 0x2f, 0x9d, 0xe1, 0xb8, 0x2f, 0x9f, 0x69, 0x2f, 0xa7, 0x05, 0x7f, + 0xa3, 0x10, 0x0f, 0xb0, 0x7f, 0xdc, 0x74, 0xcc, 0x10, 0x91, 0xd1, 0x79, + 0x06, 0x98, 0x17, 0xfc, 0xac, 0xac, 0xb9, 0x62, 0x54, 0x06, 0xa8, 0x19, + 0x0e, 0xf3, 0x7f, 0x13, 0x04, 0x43, 0x28, 0x19, 0x40, 0x31, 0x04, 0x38, + 0x48, 0x19, 0x10, 0x1e, 0x14, 0xff, 0x0c, 0x0d, 0x0d, 0x20, 0x01, 0x90, + 0x28, 0x1c, 0x0d, 0x08, 0x30, 0x05, 0x0c, 0x0c, 0x07, 0x1a, 0x00, 0xd0, + 0x00, 0x00, 0x0e, 0x34, 0xe9, 0x30, 0xe9, 0xd6, 0x06, 0x88, 0x13, 0x3f, + 0xff, 0x4c, 0x2f, 0xaf, 0x72, 0x2f, 0xb3, 0x10, 0x16, 0x70, 0x7f, 0xc9, + 0x10, 0x62, 0x4a, 0x81, 0x06, 0x98, 0x15, 0x00, 0x00, 0x7c, 0xb7, 0x2b, + 0x7c, 0xb7, 0x10, 0x06, 0xb3, 0x7f, 0x1b, 0x48, 0x15, 0x30, 0x06, 0x28, + 0x11, 0x10, 0x17, 0x54, 0xff, 0x15, 0x0d, 0x0e, 0x0e, 0x20, 0x01, 0x0d, + 0x20, 0x06, 0x0c, 0x20, 0x05, 0x00, 0x0d, 0x0d, 0x29, 0x07, 0xb5, 0xce, + 0x00, 0x00, 0x01, 0x0f, 0x34, 0xe1, 0x30, 0xea, 0x30, 0xc0, 0x06, 0xa8, + 0x19, 0x16, 0x4d, 0x00, 0xe9, 0x4f, 0xad, 0x64, 0x06, 0x68, 0x1b, 0x10, + 0x0e, 0xf0, 0x7f, 0x85, 0x04, 0x68, 0xcc, 0x91, 0xbe, 0x8f, 0x06, 0x98, + 0x19, 0x54, 0xba, 0x08, 0xac, 0xb9, 0xe4, 0xb2, 0x10, 0x06, 0x93, 0x7f, + 0x1c, 0x04, 0x35, 0x8c, 0x28, 0x17, 0x38, 0x04, 0x34, 0x06, 0x68, 0x1b, + 0x10, 0x16, 0xf4, 0xff, 0x0e, 0x0f, 0x54, 0x0f, 0x20, 0x01, 0x0e, 0x20, + 0x06, 0x0d, 0x20, 0x05, 0x0e, 0x0e, 0x00, 0x1d, 0x06, 0x69, 0xcd, 0x00, + 0x00, 0x10, 0x34, 0x05, 0xdf, 0x30, 0xe9, 0x30, 0xf3, 0x06, 0xa8, 0x19, + 0x4d, 0x28, 0x13, 0xb0, 0x3f, 0xaf, 0x6e, 0x06, 0x68, 0x19, 0x10, 0x0e, + 0xf0, 0x7f, 0x73, 0x7c, 0x70, 0x51, 0x86, 0x06, 0xb8, 0x17, 0xf8, 0xbb, + 0x80, 0xb7, 0x06, 0xd8, 0x17, 0x0e, 0xd3, 0x7f, 0x1c, 0xac, 0x28, 0x13, + 0x40, 0x28, 0x13, 0x3d, 0x06, 0x68, 0x19, 0x10, 0x16, 0xf4, 0xff, 0x0f, + 0x10, 0x54, 0x10, 0x20, 0x01, 0x0f, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x0f, + 0x0f, 0x00, 0x5a, 0x07, 0x54, 0xd0, 0x00, 0x00, 0x11, 0x34, 0x01, 0xe2, + 0x30, 0xca, 0x30, 0xac, 0x30, 0xb9, 0x06, 0xa8, 0x17, 0x45, 0x6f, 0x28, + 0x13, 0x61, 0x00, 0x67, 0x2f, 0xaf, 0x73, 0x10, 0x16, 0x20, 0x7f, 0x00, + 0xab, 0x83, 0xb3, 0x7e, 0xa0, 0x52, 0xaf, 0x65, 0x80, 0x06, 0x78, 0x19, + 0xa8, 0xba, 0x98, 0xb0, 0x00, 0xac, 0xa4, 0x44, 0xc2, 0x10, 0x06, 0x73, + 0x7f, 0x1c, 0x04, 0x3e, 0x28, 0x13, 0x30, 0x04, 0x58, 0x33, 0x28, 0x1b, + 0x41, 0x06, 0x48, 0x17, 0x10, 0x16, 0xd4, 0xff, 0x10, 0x11, 0x11, 0xa8, + 0x20, 0x01, 0x10, 0x20, 0x06, 0x0f, 0x20, 0x05, 0x10, 0x10, 0xee, 0x00, + 0x06, 0x14, 0xd3, 0x00, 0x00, 0x12, 0x34, 0xcc, 0x08, 0x30, 0xa8, 0x30, + 0xd0, 0x20, 0x03, 0xb9, 0x30, 0xd1, 0x08, 0x30, 0xeb, 0x30, 0xbf, 0x06, + 0x08, 0x1f, 0x4e, 0x00, 0x75, 0x08, 0x00, 0x65, 0x00, 0x76, 0x2f, 0xb1, + 0x20, 0x00, 0x45, 0xa3, 0x28, 0x19, 0x70, 0x2f, 0xbb, 0x72, 0x00, 0x74, + 0x05, 0x8f, 0xbb, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0xb0, 0x65, 0xc3, 0x57, + 0xaf, 0x65, 0x15, 0x5e, 0x20, 0x54, 0x58, 0x06, 0x58, 0x19, 0x04, 0xb2, + 0xd0, 0xc5, 0x14, 0x00, 0xbc, 0xd0, 0xc5, 0xa4, 0xc2, 0x0c, 0xd3, 0x74, + 0x34, 0xb9, 0xc0, 0x2b, 0xab, 0x0d, 0xf3, 0x7f, 0x6f, 0x06, 0xa3, 0xfd, + 0x00, 0x00, 0x01, 0x1d, 0x04, 0x43, 0x04, 0x4d, 0x04, 0x32, 0x28, 0x19, + 0x14, 0x2d, 0x00, 0x2d, 0x28, 0x19, 0x3f, 0x28, 0x23, 0x40, 0x04, 0x62, + 0x42, 0x28, 0x29, 0x10, 0x1d, 0x54, 0xff, 0x11, 0x12, 0x12, 0x20, 0x01, + 0x11, 0xa0, 0x20, 0x06, 0x10, 0x20, 0x05, 0x11, 0x11, 0xd8, 0x07, 0x97, + 0x02, 0xd2, 0x00, 0x00, 0x13, 0x34, 0xdd, 0x28, 0x0d, 0xc8, 0x03, 0x30, + 0xa5, 0x30, 0xb2, 0x30, 0xb5, 0x06, 0x08, 0x13, 0x3f, 0xff, 0x6d, 0x50, + 0x2f, 0xaf, 0x38, 0x07, 0x75, 0x2f, 0xb1, 0x38, 0x21, 0x73, 0x05, 0xa4, + 0x13, 0x80, 0x10, 0x0f, 0x30, 0x7f, 0xe2, 0x6c, 0xfe, 0x56, 0x3c, 0x68, + 0x28, 0x44, 0x84, 0x06, 0x58, 0x15, 0x00, 0x00, 0xec, 0x28, 0x0d, 0x2c, + 0xd2, 0x0c, 0x8c, 0xac, 0xac, 0xc0, 0x06, 0x50, 0x7f, 0x0e, 0xf3, 0x7f, + 0x1f, 0x04, 0x41, 0x3e, 0x48, 0x07, 0x43, 0x04, 0x33, 0x04, 0x35, 0x28, + 0x17, 0xc5, 0x05, 0x78, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x12, 0x13, 0x13, + 0x20, 0x01, 0x12, 0x20, 0x06, 0x40, 0x11, 0x20, 0x05, 0x12, 0x12, 0x6f, + 0x06, 0x67, 0xce, 0x00, 0x00, 0x00, 0x14, 0x34, 0xb9, 0x30, 0xaf, 0x30, + 0x6a, 0xec, 0x06, 0x48, 0x11, 0x5f, 0xff, 0x53, 0x2f, 0xaf, 0x63, 0x2f, + 0xa1, 0x65, 0x81, 0x10, 0x16, 0x60, 0x7f, 0xcf, 0x82, 0x4b, 0x51, 0xf7, + 0x96, 0x06, 0x78, 0x15, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x6c, 0xd0, 0x08, + 0xb8, 0xab, 0x10, 0x06, 0x93, 0x7f, 0x21, 0x28, 0x11, 0x3a, 0x28, 0x19, + 0x35, 0x05, 0xe8, 0x0f, 0x10, 0x17, 0x74, 0xff, 0x15, 0x13, 0x14, 0x14, + 0x20, 0x01, 0x13, 0x20, 0x06, 0x12, 0x20, 0x05, 0x00, 0x13, 0x13, 0x71, + 0x07, 0x5f, 0xd2, 0x00, 0x00, 0x01, 0x15, 0x34, 0xbf, 0x30, 0xc1, 0x30, + 0xe9, 0x06, 0xa8, 0x17, 0x11, 0x54, 0x00, 0xe1, 0x28, 0x17, 0x68, 0x00, + 0x69, 0x2f, 0xb5, 0xc1, 0x05, 0xdf, 0xa9, 0x10, 0x0f, 0x60, 0x7f, 0x58, + 0x47, 0x59, 0xc9, 0x62, 0x06, 0x98, 0x17, 0x02, 0xc0, 0xd0, 0x58, 0xce, + 0x7c, 0xb7, 0x10, 0x06, 0x93, 0x7f, 0x22, 0x02, 0x04, 0x30, 0x04, 0x47, + 0x04, 0x38, 0x28, 0x19, 0x30, 0xc5, 0x06, 0x48, 0x19, 0x10, 0x16, 0xf4, + 0xff, 0x14, 0x15, 0x15, 0x20, 0x01, 0x14, 0x20, 0x06, 0x40, 0x14, 0x20, + 0x05, 0x14, 0x14, 0x85, 0x05, 0xa4, 0xcc, 0x00, 0x00, 0x00, 0x16, 0x34, + 0xc8, 0x30, 0xeb, 0x30, 0x05, 0xd2, 0x30, 0xfc, 0x30, 0xe8, 0x06, 0x68, + 0x1b, 0x54, 0x2f, 0xab, 0x15, 0x75, 0x00, 0x6a, 0x28, 0x17, 0x6c, 0x20, + 0x01, 0x6f, 0x10, 0x16, 0x00, 0x7f, 0x00, 0x79, 0x72, 0x81, 0x9c, 0x0c, + 0x5e, 0x65, 0x75, 0x80, 0x06, 0x78, 0x19, 0xb8, 0xd2, 0xe8, 0xb8, 0x88, + 0xd7, 0x94, 0x68, 0xc6, 0x06, 0x9b, 0x97, 0x0e, 0xd3, 0x7f, 0x22, 0x28, + 0x11, 0x43, 0x04, 0x45, 0x83, 0x28, 0x19, 0x3b, 0x04, 0x4c, 0x04, 0x3e, + 0x06, 0x08, 0x1b, 0x10, 0x16, 0xf4, 0xff, 0x15, 0x15, 0x16, 0x16, 0x20, + 0x01, 0x15, 0x20, 0x06, 0x15, 0x20, 0x05, 0x00, 0x15, 0x15, 0xa9, 0x06, + 0xeb, 0xcd, 0x00, 0x00, 0x00, 0x17, 0x34, 0xe4, 0x30, 0xe9, 0x30, 0xaf, + 0x30, 0x46, 0xa4, 0x06, 0x68, 0x15, 0x00, 0x00, 0x59, 0x2f, 0xa5, 0x3f, + 0xa9, 0x63, 0xa0, 0x28, 0x1d, 0x79, 0x10, 0x16, 0x20, 0x7f, 0x9a, 0x4e, + 0xc9, 0x62, 0x4e, 0x40, 0x59, 0x06, 0x78, 0x15, 0x00, 0x00, 0x7c, 0xc5, + 0x7c, 0xb7, 0x0a, 0xe0, 0xcf, 0x74, 0xc7, 0x10, 0x06, 0x73, 0x7f, 0x2f, + 0x28, 0x17, 0x30, 0x2c, 0x04, 0x3a, 0x28, 0x1b, 0x39, 0x06, 0x08, 0x13, + 0x10, 0x17, 0x34, 0xff, 0x16, 0x18, 0x54, 0x18, 0x20, 0x01, 0x16, 0x20, + 0x06, 0x19, 0x20, 0x05, 0x16, 0x16, 0x00, 0x5a, 0x07, 0x1f, 0xcf, 0x00, + 0x00, 0x18, 0x34, 0x04, 0xb9, 0x30, 0xea, 0x30, 0xa2, 0x06, 0x88, 0x15, + 0x00, 0x00, 0x54, 0x5a, 0x2f, 0xad, 0x6c, 0x2f, 0xad, 0x61, 0x10, 0x16, + 0x60, 0x7f, 0xcf, 0x82, 0x08, 0x29, 0x52, 0x9a, 0x4e, 0x06, 0x98, 0x17, + 0x20, 0xc2, 0xac, 0x14, 0xb9, 0x44, 0xc5, 0x10, 0x06, 0x93, 0x7f, 0x21, + 0x28, 0x11, 0x3b, 0x04, 0x18, 0x38, 0x04, 0x4f, 0x06, 0x48, 0x15, 0x10, + 0x17, 0x14, 0xff, 0x17, 0x19, 0x19, 0xa8, 0x20, 0x01, 0x17, 0x20, 0x06, + 0x13, 0x20, 0x05, 0x17, 0x17, 0x8f, 0x00, 0x07, 0x0f, 0xcd, 0x00, 0x00, + 0x19, 0x34, 0x23, 0x00, 0x90, 0xa6, 0x90, 0xdd, 0x4f, 0x77, 0x8b, 0x18, + 0x41, 0x98, 0x06, 0x5d, 0x31, 0x44, 0x00, 0x65, 0x00, 0x70, 0x20, 0x03, + 0x14, 0x6e, 0x00, 0x64, 0x40, 0x05, 0x63, 0x48, 0x23, 0x73, 0x00, 0x1d, + 0x20, 0x00, 0x46, 0x20, 0x19, 0x30, 0x13, 0x3f, 0xcd, 0x6c, 0x20, 0x25, + 0x57, 0x73, 0x04, 0x60, 0x7f, 0xe9, 0x80, 0x7f, 0x61, 0x40, 0x7f, 0x30, + 0x69, 0x30, 0x7d, 0x5a, 0xe9, 0x20, 0x91, 0xe9, 0x04, 0xe0, 0x7d, 0x07, + 0x30, 0xff, 0x69, 0xc1, 0x7f, 0x7a, 0xd0, 0x21, 0x8f, 0xf1, 0x7b, 0x69, + 0x0c, 0xa1, 0xff, 0x54, 0x80, 0xa6, 0x90, 0x08, 0x5e, 0x5c, 0x30, 0x57, + 0x06, 0x7f, 0xaf, 0xa0, 0xbc, 0x24, 0x00, 0xb1, 0x18, 0xc2, 0xd8, 0xc5, + 0x7c, 0xb7, 0x20, 0x00, 0x00, 0xf0, 0xc5, 0x29, 0xbc, 0x90, 0xc7, 0x58, + 0x18, 0xce, 0x39, 0xb8, 0x05, 0x9f, 0xb8, 0xf3, 0x65, 0x20, 0x00, 0x67, + 0xb5, 0x23, 0x91, 0x62, 0x2b, 0xa9, 0x53, 0x7d, 0x6e, 0x05, 0xa3, 0xff, + 0xea, 0x00, 0x83, 0xff, 0x41, 0x69, 0x04, 0x83, 0x7f, 0x24, 0x04, 0x35, + 0x04, 0x34, 0x20, 0x03, 0x10, 0x40, 0x04, 0x30, 0x28, 0x1f, 0x4c, 0x04, + 0x3d, 0x04, 0x45, 0x3e, 0x20, 0x11, 0x20, 0x00, 0x32, 0x28, 0x2d, 0x30, + 0x40, 0x19, 0x5c, 0x3d, 0x28, 0x35, 0x35, 0x04, 0x88, 0x35, 0x07, 0x14, + 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x18, 0x0a, 0x00, 0x0a, 0x0b, 0x0a, 0x0a, + 0x18, 0x18, 0x0b, 0x0a, 0x40, 0x17, 0x20, 0x05, 0x18, 0x18, 0x88, 0x08, + 0x12, 0xd1, 0x00, 0x00, 0x00, 0x1a, 0x34, 0xd0, 0x30, 0xeb, 0x30, 0x0a, + 0xac, 0x30, 0xb9, 0x30, 0x06, 0x7d, 0x2f, 0x56, 0x2f, 0xa9, 0x72, 0xe0, + 0x24, 0x8b, 0x38, 0x0b, 0x10, 0x16, 0x30, 0x7f, 0xf4, 0x5d, 0x14, 0x5c, + 0xa0, 0x04, 0x52, 0xaf, 0x65, 0xde, 0x5d, 0x06, 0x5f, 0xb3, 0x14, 0xbc, + 0x02, 0x74, 0xb9, 0x00, 0xac, 0xa4, 0xc2, 0x10, 0x06, 0x73, 0x7f, 0x12, + 0x8b, 0x28, 0x0f, 0x40, 0x04, 0x33, 0x28, 0x15, 0x41, 0x04, 0x87, 0xfb, + 0x10, 0x18, 0xb4, 0xff, 0x15, 0x19, 0x17, 0x17, 0x20, 0x01, 0x19, 0x20, + 0x06, 0x07, 0x20, 0x05, 0x02, 0x19, 0x19, 0x89, 0x07, 0x68, 0xd0, 0x00, + 0x3f, 0xff, 0x01, 0x00, 0x0b, 0x0b, 0x08, 0x0b, 0x0b, 0x01, 0x01, 0x0d, + 0x22, 0x0b, 0x18, 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x41, + 0x02, 0x40, 0x06, 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x20, 0x02, + 0x03, 0x40, 0x06, 0x03, 0x03, 0x03, 0x03, 0x04, 0x90, 0x30, 0x04, 0x03, + 0x04, 0x40, 0x06, 0x04, 0x04, 0x04, 0x04, 0x48, 0x05, 0x30, 0x04, 0x04, + 0x05, 0x40, 0x06, 0x05, 0x05, 0x05, 0x24, 0x05, 0x06, 0x30, 0x04, 0x05, + 0x06, 0x40, 0x06, 0x06, 0x06, 0x12, 0x06, 0x06, 0x07, 0x30, 0x04, 0x06, + 0x07, 0x40, 0x06, 0x07, 0x09, 0x07, 0x07, 0x07, 0x08, 0x30, 0x04, 0x07, + 0x08, 0x20, 0x06, 0x46, 0x0a, 0x20, 0x05, 0x08, 0x08, 0x09, 0x50, 0x02, + 0x20, 0x06, 0x0b, 0x8f, 0x20, 0x05, 0x09, 0x09, 0x0a, 0x50, 0x02, 0x20, + 0x06, 0x30, 0x05, 0x28, 0xdc, 0x20, 0x0c, 0x0c, 0x20, 0x01, 0x0b, 0x0b, + 0x0a, 0x0c, 0x16, 0x83, 0x20, 0x05, 0x0b, 0x0b, 0x0c, 0x0d, 0x0d, 0x20, + 0x01, 0x20, 0x14, 0x21, 0x0d, 0x08, 0x30, 0x05, 0x0c, 0x0d, 0x0e, 0x0e, + 0x20, 0x01, 0x59, 0x0d, 0x20, 0x06, 0x0c, 0x20, 0x05, 0x20, 0x07, 0x0f, + 0x0f, 0x20, 0x01, 0x59, 0x0e, 0x20, 0x06, 0x0d, 0x20, 0x05, 0x20, 0x07, + 0x10, 0x10, 0x20, 0x01, 0x59, 0x0f, 0x20, 0x06, 0x0e, 0x20, 0x05, 0x20, + 0x07, 0x11, 0x11, 0x20, 0x01, 0x59, 0x10, 0x20, 0x06, 0x0f, 0x20, 0x05, + 0x20, 0x07, 0x12, 0x12, 0x20, 0x01, 0x59, 0x11, 0x20, 0x06, 0x10, 0x20, + 0x05, 0x20, 0x07, 0x13, 0x13, 0x20, 0x01, 0x59, 0x12, 0x20, 0x06, 0x11, + 0x20, 0x05, 0x20, 0x07, 0x14, 0x14, 0x20, 0x01, 0x59, 0x13, 0x20, 0x06, + 0x12, 0x20, 0x05, 0x20, 0x07, 0x15, 0x15, 0x20, 0x01, 0x59, 0x14, 0x20, + 0x06, 0x14, 0x20, 0x05, 0x20, 0x07, 0x16, 0x16, 0x20, 0x01, 0x5c, 0x15, + 0x20, 0x06, 0x15, 0x20, 0x05, 0x20, 0x07, 0x39, 0x84, 0x18, 0x16, 0xa6, + 0x20, 0x06, 0x19, 0x20, 0x05, 0x16, 0x16, 0x41, 0x7c, 0x21, 0x8c, 0x19, + 0x3c, 0x19, 0x13, 0x41, 0x92, 0xf9, 0xaf, 0xf1, 0xa7, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x5c, 0x10, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x08, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0xf4, 0x0c, 0x2b, + 0xd3, 0x00, 0x00, 0x00, 0x01, 0x08, 0xa2, 0x30, 0xf3, 0x30, 0xae, 0x10, + 0x30, 0xe9, 0x30, 0x06, 0x78, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x01, 0x67, + 0x00, 0x75, 0x00, 0x69, 0x00, 0x6c, 0x20, 0x01, 0x60, 0x61, 0x10, 0x0e, + 0xc0, 0x7f, 0x06, 0x11, 0xfd, 0x00, 0x00, 0x89, 0x5b, 0x2d, 0x10, 0x57, + 0xc9, 0x62, 0x06, 0x9b, 0x1b, 0x75, 0xc5, 0xc8, 0xad, 0x34, 0x7c, 0xb7, + 0x06, 0x9b, 0x9b, 0x07, 0xb3, 0x7f, 0x68, 0x06, 0x23, 0xff, 0x10, 0x04, + 0x00, 0x3d, 0x04, 0x33, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x0c, 0x4c, 0x04, + 0x4f, 0x04, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x36, 0xff, 0x01, 0x01, 0xf0, + 0xd0, 0x01, 0x58, 0x17, 0x01, 0x10, 0x27, 0x3f, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x4c, 0x41, 0x00, + 0x11, 0x07, 0x00, 0x00, 0x30, 0x01, 0x09, 0x14, 0x20, 0x50, 0x08, 0xe0, + 0x06, 0x70, 0x05, 0x10, 0x66, 0xf0, 0x7f, 0xf7, 0xfd, 0x2b, 0x0c, 0x05, + 0xd4, 0x00, 0x00, 0x00, 0x02, 0x09, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x03, + 0x30, 0xfb, 0x30, 0xb8, 0x30, 0xe7, 0x20, 0x09, 0x06, 0x18, 0x23, 0x00, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x74, 0x00, 0x20, + 0x00, 0x4a, 0x00, 0x6f, 0x00, 0x6b, 0x68, 0x20, 0x0b, 0x06, 0x50, 0x7f, + 0x2d, 0x20, 0x7f, 0x65, 0x20, 0x8d, 0x06, 0x70, 0x7f, 0x8c, 0x90, 0xff, + 0x27, 0x00, 0x73, 0x0e, 0x21, 0x7f, 0x06, 0x51, 0xff, 0x23, 0x57, 0x02, + 0xa6, 0x7e, 0xf0, 0x7f, 0x3a, 0x53, 0x06, 0x7b, 0x1d, 0x38, 0x01, 0xc1, + 0x78, 0xc7, 0xb8, 0xd2, 0x74, 0xc8, 0x06, 0x7b, 0x9d, 0x80, 0x0e, 0xf1, + 0xff, 0x21, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x00, 0x04, 0x2d, 0x00, + 0x14, 0x04, 0x36, 0x04, 0x3e, 0xe2, 0x20, 0x0b, 0x10, 0x05, 0xd1, 0x7f, + 0x10, 0x06, 0xf0, 0xff, 0x01, 0x03, 0x03, 0x20, 0x01, 0x01, 0xa4, 0x20, + 0x06, 0x02, 0x20, 0x05, 0x01, 0x01, 0x58, 0x17, 0x03, 0x09, 0x04, 0xd0, + 0x30, 0xfc, 0x30, 0xd6, 0x20, 0x03, 0xc0, 0x30, 0x28, 0xf6, 0x5c, 0x06, + 0x3f, 0xb9, 0x42, 0x28, 0x17, 0x72, 0x00, 0x62, 0x0c, 0x00, 0x75, 0x00, + 0x64, 0x28, 0x21, 0x10, 0x16, 0x10, 0x7f, 0xf4, 0x5d, 0x06, 0x03, 0x5e, + 0xbe, 0x8f, 0x9b, 0x06, 0x42, 0xfb, 0x4f, 0xaf, 0xbc, 0x0c, 0x80, 0xbd, + 0xe4, 0xb2, 0x06, 0x9f, 0xb3, 0x0e, 0xf3, 0x7f, 0x11, 0x04, 0x00, 0x30, + 0x04, 0x40, 0x04, 0x31, 0x04, 0x43, 0x04, 0x69, 0x34, 0x20, 0x09, 0x10, + 0x1e, 0x14, 0xff, 0x02, 0x38, 0x0c, 0x01, 0x02, 0x40, 0x06, 0x01, 0x02, + 0x02, 0x02, 0x02, 0x8a, 0x0c, 0x08, 0x28, 0x17, 0x00, 0x04, 0x09, 0xbb, + 0x30, 0xf3, 0x30, 0xc8, 0x30, 0x04, 0xfb, 0x30, 0xb8, 0x30, 0xe7, 0x28, + 0x21, 0xb8, 0x30, 0xab, 0x06, 0xbc, 0xaf, 0x47, 0x2f, 0xaf, 0x6f, 0x28, + 0x25, 0x67, 0x2f, 0xb7, 0x06, 0x1f, 0xaf, 0x78, 0x2d, 0xc0, 0x7f, 0x05, + 0x7f, 0xb1, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0x54, 0x04, + 0x4e, 0xbb, 0x6c, 0x3a, 0x53, 0x06, 0x7f, 0xaf, 0x38, 0xc1, 0x00, 0x78, + 0xc7, 0xb8, 0xd2, 0x70, 0xc8, 0xc0, 0xc9, 0xc0, 0x06, 0x58, 0x99, 0x0e, + 0xf2, 0x7f, 0x21, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x00, 0x42, 0x04, 0x2d, + 0x00, 0x14, 0x04, 0x36, 0x04, 0x5d, 0x3e, 0x28, 0x23, 0x34, 0x20, 0x07, + 0x10, 0x05, 0x91, 0x7f, 0x10, 0x06, 0xf4, 0xff, 0x03, 0x38, 0x0c, 0x28, + 0x02, 0x03, 0x20, 0x06, 0x03, 0x20, 0x05, 0x03, 0x03, 0x2f, 0x28, 0x0c, + 0x0e, 0x28, 0x17, 0x05, 0x88, 0x17, 0xe1, 0x30, 0xa2, 0x35, 0x30, 0xea, + 0x28, 0x19, 0x06, 0xb8, 0x17, 0x4d, 0x4f, 0xbb, 0x79, 0x06, 0x68, 0x97, + 0x6e, 0x65, 0x28, 0x19, 0x50, 0x81, 0x69, 0x06, 0x67, 0x97, 0x06, 0xd0, + 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x04, 0x57, 0x9b, 0x73, 0x3d, 0x4e, 0x06, + 0xf8, 0x17, 0x54, 0xba, 0x38, 0xac, 0xb9, 0x07, 0x18, 0x17, 0x0e, 0x32, + 0x7f, 0x98, 0x17, 0x1c, 0x04, 0x4d, 0xb8, 0x28, 0x15, 0x38, 0x05, 0xa8, + 0x13, 0x10, 0x07, 0x33, 0xff, 0x0e, 0xf5, 0x7f, 0x04, 0x04, 0x07, 0x20, + 0x04, 0x04, 0xa0, 0x01, 0x1c, 0x0c, 0xff, 0xd3, 0x00, 0x2b, 0x00, 0x06, + 0x88, 0x17, 0xdd, 0x28, 0x13, 0xeb, 0x06, 0x08, 0x15, 0xdf, 0x2f, 0x45, + 0x50, 0x2f, 0xbb, 0x75, 0x00, 0x6c, 0x06, 0x6d, 0x2f, 0x2d, 0x06, 0xe0, + 0x7f, 0xc0, 0x06, 0xf0, 0xff, 0x0e, 0x50, 0x7f, 0x23, 0x57, 0xdd, 0x4f, + 0x57, 0x7f, 0xbc, 0x06, 0xf8, 0x17, 0xf4, 0x23, 0x8b, 0x07, 0x18, 0x17, + 0x0e, 0x32, 0xff, 0x98, 0x17, 0x1f, 0x04, 0x1c, 0x3e, 0x04, 0x3b, 0x05, + 0xe8, 0x15, 0x10, 0x07, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x05, 0x05, 0x14, + 0x04, 0x05, 0x05, 0x40, 0x01, 0x06, 0x40, 0x07, 0x1c, 0x0c, 0x05, 0x11, + 0xd4, 0x00, 0x00, 0x07, 0x88, 0x17, 0xd4, 0x28, 0x17, 0x6a, 0xbf, 0x28, + 0x1b, 0x06, 0xd8, 0x17, 0x65, 0x4f, 0xb7, 0x72, 0x06, 0x88, 0x17, 0x69, + 0xb8, 0x40, 0x7d, 0x72, 0x20, 0x87, 0x0e, 0x10, 0xff, 0x0e, 0x50, 0x7f, + 0x23, 0x57, 0x7c, 0x10, 0x5f, 0x97, 0x5f, 0x06, 0xf8, 0x17, 0x3c, 0xd5, + 0x30, 0xd1, 0xe8, 0x07, 0x38, 0x17, 0x0e, 0x12, 0x7f, 0xb8, 0x17, 0x35, + 0x28, 0x1f, 0x35, 0x04, 0x40, 0xe5, 0x05, 0xc8, 0x1b, 0x10, 0x06, 0xf3, + 0xff, 0x0e, 0xf5, 0x7f, 0x06, 0x06, 0x70, 0x01, 0x05, 0x40, 0x0a, 0x14, + 0x25, 0x0c, 0x14, 0x28, 0x17, 0x08, 0x88, 0x17, 0xd5, 0x30, 0x01, 0xa3, + 0x30, 0xea, 0x30, 0xc3, 0x30, 0xd7, 0x05, 0xe8, 0x19, 0xab, 0xdf, 0x2f, + 0x68, 0x2f, 0xbb, 0x6c, 0x2f, 0xbf, 0x70, 0x06, 0x68, 0x17, 0x90, 0x7f, + 0x70, 0x70, 0x05, 0x68, 0x1b, 0x07, 0x90, 0xff, 0x0e, 0x50, 0x7f, 0x23, + 0x57, 0xf2, 0x83, 0x0c, 0x29, 0x52, 0x6e, 0x66, 0x06, 0x78, 0x19, 0x58, + 0x17, 0x44, 0xd5, 0x38, 0xbd, 0xb9, 0x07, 0x38, 0x17, 0x0e, 0x12, 0x7f, + 0x98, 0x17, 0x24, 0x04, 0x38, 0x2e, 0x04, 0x3b, 0x20, 0x03, 0x3f, 0x06, + 0xa8, 0x17, 0x10, 0x06, 0x13, 0xff, 0x0e, 0xf5, 0x7f, 0x07, 0x08, 0x07, + 0x05, 0x07, 0x07, 0xa0, 0x01, 0x1f, 0x0c, 0x20, 0xc5, 0x28, 0x17, 0x00, + 0x1f, 0xff, 0x01, 0x03, 0x03, 0x20, 0x01, 0x01, 0x20, 0x06, 0x44, 0x02, + 0x20, 0x05, 0x01, 0x01, 0x02, 0x30, 0x04, 0x01, 0x02, 0x82, 0x40, 0x06, + 0x02, 0x02, 0x02, 0x02, 0x03, 0x30, 0x04, 0x02, 0xe0, 0x20, 0x1d, 0x20, + 0x09, 0x30, 0x2a, 0x04, 0x04, 0x07, 0x04, 0x04, 0x9b, 0xa0, 0x01, 0x05, + 0x05, 0x20, 0x02, 0x40, 0x01, 0x06, 0x50, 0x05, 0xe8, 0x8f, 0xc0, 0xf0, + 0x87, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xe8, 0x9e, 0x01, 0x12, 0x32, 0x00, 0x00, 0x30, 0x01, 0x08, 0x01, + 0x50, 0x07, 0x00, 0x00, 0xa2, 0x30, 0xf3, 0x30, 0xae, 0x30, 0xe9, 0x30, + 0xc0, 0x60, 0x0e, 0x06, 0x00, 0x06, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x05, 0x75, 0x00, 0x69, 0x00, 0x6c, 0x20, 0x01, 0x61, 0x10, 0x0e, 0xc0, + 0x7f, 0x80, 0x06, 0x11, 0xfd, 0x00, 0x00, 0x89, 0x5b, 0x2d, 0x57, 0xc9, + 0x40, 0x62, 0x06, 0x72, 0xfd, 0x00, 0x00, 0x75, 0xc5, 0xc8, 0xad, 0x34, + 0x7c, 0xb7, 0x06, 0x90, 0x7f, 0x07, 0xb3, 0x7f, 0x68, 0x06, 0x23, 0xff, + 0x10, 0x04, 0x00, 0x3d, 0x04, 0x33, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x0d, + 0x4c, 0x04, 0x4f, 0x04, 0x10, 0x16, 0xd4, 0xff, 0x06, 0x55, 0x01, 0x00, + 0x48, 0x0a, 0x64, 0x01, 0x50, 0x06, 0x01, 0x38, 0x06, 0x09, 0x07, 0xa8, + 0x3b, 0xc6, 0x30, 0x00, 0xa3, 0x30, 0xb0, 0x30, 0xa2, 0x30, 0xfb, 0x30, + 0x05, 0xd0, 0x30, 0xfc, 0x30, 0xd6, 0x20, 0x03, 0xc0, 0x05, 0x88, 0x4b, + 0xb1, 0x38, 0x3b, 0x74, 0x28, 0x39, 0x38, 0x3f, 0x61, 0x00, 0x20, 0x28, + 0x3d, 0x14, 0x6e, 0x00, 0x64, 0x20, 0x07, 0x42, 0x28, 0x47, 0x72, 0x00, + 0x58, 0x62, 0x28, 0x55, 0x64, 0x04, 0xc8, 0x51, 0xd0, 0x7f, 0x2d, 0x00, + 0x65, 0xb5, 0x20, 0x8d, 0x2d, 0x05, 0x80, 0x7d, 0x00, 0x10, 0xff, 0x75, + 0x06, 0xc0, 0xff, 0x20, 0x20, 0xff, 0xd0, 0x05, 0x91, 0x7b, 0x00, 0x31, + 0xff, 0x79, 0x05, 0xe0, 0x7f, 0x89, 0x5b, 0xd0, 0x63, 0x00, 0xdc, 0x74, + 0x8c, 0x54, 0xf4, 0x5d, 0x03, 0x5e, 0x20, 0xbe, 0x8f, 0x06, 0x1b, 0x41, + 0x64, 0xc5, 0xf0, 0xd2, 0x00, 0x00, 0xac, 0x20, 0x00, 0x14, 0xbc, 0x80, + 0xbd, 0xe4, 0x6d, 0xb2, 0x06, 0x5b, 0xbb, 0xd1, 0xff, 0x6e, 0x05, 0xc2, + 0x01, 0x53, 0xff, 0xed, 0x06, 0x82, 0x7f, 0xa0, 0x38, 0x3b, 0x42, 0x28, + 0x3b, 0x33, 0x04, 0x43, 0x04, 0x30, 0x0a, 0x04, 0x20, 0x00, 0x38, 0x20, + 0x03, 0x11, 0x20, 0x09, 0x40, 0x2e, 0x04, 0x31, 0x20, 0x11, 0x34, 0x20, + 0x13, 0x0d, 0xb4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x01, 0x1e, 0x01, 0x01, + 0x02, 0x20, 0x03, 0x20, 0x04, 0x40, 0x06, 0x01, 0x38, 0x40, 0x0a, 0x45, + 0x18, 0x88, 0x3b, 0xeb, 0x30, 0xbc, 0x28, 0x3f, 0xc1, 0x28, 0x43, 0xbb, + 0x06, 0x5c, 0xf7, 0x72, 0x2f, 0xf7, 0x34, 0xb1, 0x38, 0x41, 0x6e, 0x06, + 0x0f, 0xf9, 0xf0, 0x7f, 0x5c, 0x65, 0x06, 0xe0, 0xff, 0x69, 0x45, 0xbd, + 0x0e, 0x91, 0x7f, 0x05, 0xfe, 0xf9, 0x3f, 0x96, 0x08, 0x39, 0x68, 0xf7, + 0x5e, 0x06, 0x9f, 0xf7, 0x44, 0xc5, 0x74, 0x01, 0xb9, 0xe8, 0xd5, 0xf0, + 0xd2, 0x98, 0xb0, 0x06, 0x50, 0x83, 0xa8, 0x00, 0x12, 0x7f, 0xeb, 0x0d, + 0xc3, 0xff, 0x10, 0x28, 0x25, 0x33, 0x04, 0x35, 0xb8, 0x68, 0x41, 0x3d, + 0x05, 0x08, 0x2b, 0x0f, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x02, 0x02, + 0x04, 0x00, 0x03, 0x04, 0x04, 0x02, 0x02, 0x03, 0x04, 0x03, 0x36, 0x02, + 0x02, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x0b, 0x78, 0x60, 0x38, 0x3b, 0xd0, + 0xdc, 0x06, 0x48, 0x35, 0x98, 0x3b, 0x75, 0x2f, 0xe1, 0x05, 0xf8, 0x33, + 0x10, 0x0f, 0x70, 0x7f, 0x3f, 0x96, 0x08, 0x81, 0x9c, 0xf4, 0x5d, 0x06, + 0xb8, 0x3b, 0xe8, 0xb8, 0x14, 0x63, 0xbc, 0x10, 0x06, 0x93, 0x7f, 0x38, + 0x3b, 0x43, 0x04, 0x31, 0x06, 0x08, 0x33, 0x10, 0x17, 0x74, 0xff, 0x00, + 0x03, 0x03, 0x05, 0x04, 0x05, 0x05, 0x03, 0x03, 0x06, 0x04, 0x05, 0x04, + 0x03, 0x03, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x0c, 0x82, 0x78, 0x3b, 0xd0, + 0x30, 0xcf, 0x30, 0xde, 0x06, 0xa8, 0x3b, 0x42, 0xaa, 0x2e, 0xe9, 0x68, + 0x2e, 0xed, 0x6d, 0x2e, 0xf1, 0x73, 0x10, 0x16, 0x20, 0x7f, 0xf4, 0x04, + 0x5d, 0xc8, 0x54, 0x6c, 0x9a, 0x06, 0x9b, 0x3b, 0x14, 0xbc, 0x0b, 0x58, + 0xd5, 0xc8, 0xb9, 0x07, 0x53, 0x7f, 0x27, 0x06, 0x23, 0x81, 0x06, 0xf3, + 0xff, 0x50, 0x11, 0x28, 0x35, 0x33, 0x28, 0x39, 0x3c, 0x04, 0x41, 0x04, + 0x00, 0x3a, 0x04, 0x38, 0x04, 0x35, 0x04, 0x20, 0x00, 0x51, 0x3e, 0x20, + 0x0b, 0x42, 0x28, 0x53, 0x3e, 0x04, 0x32, 0x05, 0x08, 0x53, 0x80, 0x10, + 0x16, 0xf4, 0xff, 0x04, 0x04, 0x06, 0x05, 0x06, 0x06, 0x04, 0x03, 0x04, + 0x05, 0x06, 0x05, 0x04, 0x04, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x40, 0x0d, + 0x98, 0x3b, 0xeb, 0x30, 0xd0, 0x30, 0xc9, 0x30, 0x68, 0xb9, 0x06, 0x68, + 0x3f, 0x38, 0x3b, 0x72, 0x4f, 0xf7, 0x64, 0x00, 0x6f, 0xd8, 0x06, 0x64, + 0xbb, 0x70, 0x7f, 0x65, 0x0e, 0xe0, 0xff, 0x0e, 0x30, 0x7f, 0xf4, 0x5d, + 0xf4, 0x0c, 0x5d, 0x1a, 0x59, 0xaf, 0x06, 0x31, 0xfa, 0x68, 0x3b, 0xa0, + 0xbc, 0x03, 0x74, 0xc7, 0xc4, 0xb3, 0xa4, 0xc2, 0x0f, 0x13, 0x7f, 0x06, + 0x33, 0xff, 0x8a, 0x38, 0x3b, 0x40, 0x04, 0x31, 0x28, 0x41, 0x34, 0x28, + 0x2b, 0x41, 0xe0, 0x04, 0xe8, 0x29, 0x10, 0x08, 0x13, 0xff, 0x0e, 0xf5, + 0x7f, 0x05, 0x05, 0x07, 0x06, 0x07, 0x00, 0x07, 0x05, 0x05, 0x06, 0x07, + 0x06, 0x05, 0x05, 0xc8, 0x20, 0x01, 0x01, 0x2f, 0xff, 0x0e, 0x06, 0x6f, + 0xff, 0xd9, 0x30, 0xea, 0x0c, 0x30, 0xfc, 0x30, 0xba, 0x06, 0x68, 0x39, + 0x3f, 0xf7, 0x65, 0x00, 0x06, 0x6c, 0x00, 0x69, 0x00, 0x7a, 0x06, 0x47, + 0xb9, 0x10, 0x07, 0x90, 0x7f, 0x63, 0x81, 0x06, 0x61, 0xff, 0x2f, 0x4f, + 0x29, 0x52, 0x79, 0x51, 0x06, 0x9f, 0xf7, 0x03, 0xa8, 0xbc, 0xac, 0xb9, + 0x88, 0xc9, 0x06, 0x90, 0x7f, 0x0e, 0xf3, 0x7f, 0x00, 0x11, 0x04, 0x35, + 0x04, 0x3b, 0x04, 0x38, 0x04, 0x70, 0x37, 0x06, 0x08, 0x35, 0x10, 0x0f, + 0xd4, 0xff, 0x06, 0x76, 0xff, 0x06, 0x06, 0x08, 0x07, 0x00, 0x08, 0x08, + 0x06, 0x06, 0x07, 0x08, 0x07, 0x06, 0x65, 0x06, 0x20, 0x01, 0x01, 0x2f, + 0xff, 0x0f, 0x09, 0x6f, 0xff, 0xdc, 0x28, 0x3b, 0x15, 0xd3, 0x30, 0xa2, + 0x06, 0xa8, 0x3b, 0x6f, 0x48, 0x3b, 0x76, 0x28, 0x3f, 0x76, 0x61, 0x06, + 0xe0, 0x7f, 0x06, 0x3e, 0x7c, 0xd0, 0x7f, 0x6e, 0x0e, 0xc1, 0x7f, 0x06, + 0x31, 0xff, 0xbb, 0x01, 0x73, 0x29, 0x52, 0xf4, 0x7e, 0x9a, 0x4e, 0x06, + 0x7b, 0x3b, 0x42, 0xfc, 0x28, 0x3b, 0x44, 0xbe, 0x44, 0xc5, 0x0e, 0xd3, + 0x7f, 0xed, 0x8a, 0x06, 0x83, 0xff, 0x11, 0x04, 0x3e, 0x48, 0x3b, 0x32, + 0x28, 0x3f, 0x4f, 0xe0, 0x06, 0x28, 0x3f, 0x0e, 0xf3, 0x7f, 0x10, 0x06, + 0xf0, 0xff, 0x07, 0x08, 0x0a, 0x09, 0x0a, 0x00, 0x0a, 0x07, 0x07, 0x09, + 0x0a, 0x09, 0x08, 0x07, 0x12, 0x07, 0x07, 0x07, 0x01, 0x2f, 0xff, 0x10, + 0x1b, 0x6f, 0xff, 0xd6, 0x02, 0x30, 0xe9, 0x30, 0xb8, 0x30, 0xeb, 0x06, + 0xa8, 0x3b, 0x72, 0xa8, 0x28, 0x33, 0x7a, 0x2f, 0xf9, 0x6c, 0x06, 0x80, + 0x7f, 0xe9, 0x00, 0x73, 0xbf, 0x06, 0xc0, 0x7f, 0x61, 0x60, 0x7f, 0x06, + 0x38, 0x3d, 0xb0, 0x7f, 0x06, 0x59, 0x3b, 0x90, 0xff, 0x06, 0x3f, 0xfd, + 0x08, 0xf4, 0x5d, 0x7f, 0x89, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x0c, 0x06, + 0xbe, 0x7c, 0xb7, 0xc8, 0xc9, 0x06, 0x90, 0x81, 0xb3, 0x7f, 0x69, 0x20, + 0x00, 0xeb, 0x0e, 0x01, 0xff, 0x11, 0x04, 0x40, 0x04, 0x30, 0x3e, 0x04, + 0x37, 0x28, 0x3d, 0x38, 0x41, 0x06, 0x18, 0x3d, 0x07, 0x34, 0xff, 0x10, + 0x0e, 0xb0, 0x7f, 0x08, 0x00, 0x09, 0x0b, 0x0a, 0x0b, 0x0b, 0x08, 0x08, + 0x0a, 0x45, 0x0b, 0x28, 0x3c, 0x08, 0x08, 0x08, 0x01, 0x3b, 0x6e, 0x01, + 0x6f, 0xff, 0x00, 0xf1, 0x82, 0x18, 0x98, 0xf4, 0x30, 0xa1, 0x30, 0x40, + 0xfc, 0x28, 0x41, 0xf3, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x88, 0x06, 0x18, + 0x3b, 0x69, 0x00, 0x74, 0x2f, 0xf9, 0x73, 0x00, 0x68, 0x08, 0x00, 0x20, + 0x00, 0x56, 0x2f, 0xff, 0x72, 0x00, 0x67, 0xaa, 0x2f, 0x89, 0x6e, 0x20, + 0x0d, 0x49, 0x27, 0xd5, 0x6c, 0x2f, 0x0f, 0x6e, 0x35, 0x00, 0x64, 0x27, + 0xdf, 0x04, 0x3f, 0xff, 0xce, 0x47, 0x33, 0x73, 0x60, 0x79, 0x6d, 0x65, + 0x40, 0x7b, 0x50, 0x0f, 0x62, 0x60, 0x99, 0x30, 0x7d, 0x6e, 0x2f, 0x99, + 0x1a, 0x71, 0x00, 0x75, 0x40, 0x29, 0x04, 0x90, 0xff, 0x63, 0x21, 0x01, + 0x65, 0xab, 0x21, 0x03, 0x4a, 0x20, 0x69, 0x6e, 0x21, 0x03, 0x66, 0x40, + 0x8f, 0x30, 0x7b, 0x5f, 0x6e, 0x28, 0xdd, 0x65, 0x2f, 0x9f, 0x04, 0x18, + 0x59, 0x31, 0x61, 0x3f, 0xf9, 0x30, 0x77, 0x6f, 0x56, 0x60, 0xff, 0x31, + 0x7b, 0x69, 0x21, 0x8b, 0x71, 0x9b, 0x71, 0x01, 0x50, 0x9f, 0xeb, 0x04, + 0x10, 0x7f, 0x31, 0xe1, 0x51, 0x81, 0xed, 0x61, 0x7f, 0x6e, 0x61, 0x93, + 0x72, 0x1d, 0x70, 0xe1, 0x60, 0x7f, 0x39, 0x65, 0x03, 0xdf, 0xff, 0xf1, + 0x82, 0x5e, 0x5c, 0x00, 0xf4, 0x7e, 0x14, 0x5c, 0xac, 0x4e, 0xa4, 0x7f, + 0x60, 0x9b, 0x05, 0xe2, 0xfb, 0x3f, 0xff, 0x01, 0xc6, 0x6d, 0xad, 0x39, + 0x00, 0xb8, 0x20, 0x00, 0x84, 0xbc, 0xc4, 0xc9, 0x44, 0x01, 0xc5, 0x7c, + 0xc7, 0x9c, 0xb7, 0xdc, 0xb4, 0x06, 0x33, 0x7f, 0x8a, 0x32, 0x5f, 0x20, + 0x00, 0x4d, 0x2f, 0xfb, 0x61, 0x23, 0x7d, 0x64, 0xf5, 0x61, 0x83, 0x3b, + 0xd1, 0x53, 0x7d, 0x04, 0x7a, 0xd5, 0x49, 0x2f, 0x75, 0x68, 0x81, 0xff, + 0xec, 0x53, 0xfb, 0x3b, 0x41, 0xb1, 0xfd, 0xe2, 0x04, 0x81, 0xfd, 0x58, + 0x3b, 0x38, 0x04, 0x41, 0x42, 0x28, 0x3f, 0x3d, 0x04, 0x41, 0x04, 0x3a, + 0x28, 0x43, 0x04, 0x35, 0x04, 0x20, 0x00, 0x12, 0x28, 0x4b, 0x40, 0x04, + 0x6a, 0x33, 0x28, 0x51, 0xb0, 0x15, 0x3e, 0x20, 0x21, 0x42, 0x28, 0x6b, + 0x3e, 0x38, 0x04, 0x32, 0x28, 0x6f, 0x0b, 0x54, 0xff, 0x10, 0x0e, 0xf0, + 0x7f, 0x09, 0x0a, 0x1d, 0x01, 0x0b, 0x1e, 0x1e, 0x09, 0x09, 0x0b, 0x1f, + 0x28, 0x3c, 0x12, 0x09, 0x09, 0x09, 0x01, 0x2f, 0xff, 0x12, 0x0d, 0x6f, + 0xff, 0xab, 0x05, 0x30, 0xca, 0x30, 0xc0, 0x30, 0x06, 0x9d, 0x79, 0x43, + 0x48, 0x19, 0x56, 0x61, 0x28, 0x1b, 0x61, 0x0e, 0x40, 0x7f, 0x4b, 0x0e, + 0xe0, 0xff, 0x91, 0xff, 0xe1, 0x81, 0x06, 0x4f, 0xfe, 0xa0, 0x52, 0xff, + 0x62, 0x27, 0x59, 0x06, 0x9f, 0xf7, 0x03, 0x90, 0xce, 0x98, 0xb0, 0xe4, + 0xb2, 0x0f, 0x33, 0x7f, 0x06, 0x51, 0xff, 0x47, 0x1a, 0x48, 0x35, 0x30, + 0x04, 0x34, 0x03, 0x88, 0x0d, 0x10, 0x01, 0xd4, 0xff, 0x10, 0x06, 0xf0, + 0xff, 0x00, 0x0a, 0x0b, 0x0c, 0x1b, 0x0c, 0x0c, 0x0a, 0x0a, 0x00, 0x0c, + 0x0c, 0x16, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x90, 0x01, 0x2f, 0xff, 0x13, + 0x01, 0x6f, 0xff, 0xb1, 0x30, 0xa4, 0x30, 0x01, 0xde, 0x30, 0xf3, 0x30, + 0xf8, 0x8a, 0xf6, 0x06, 0x2d, 0x75, 0x8e, 0x58, 0x3b, 0x79, 0x00, 0x6d, + 0x4f, 0xdd, 0x05, 0x3b, 0x67, 0xff, 0xff, 0xce, 0xee, 0x4f, 0x73, 0x3e, + 0xf5, 0x38, 0xc5, 0xef, 0x60, 0x89, 0x05, 0x50, 0x7b, 0x78, 0x3b, 0x69, + 0xed, 0x60, 0xff, 0x3f, 0xef, 0x3d, 0xff, 0x6c, 0x04, 0x6d, 0xe3, 0x00, + 0x7f, 0xf7, 0x6f, 0x41, 0x03, 0xfd, 0x51, 0x01, 0x71, 0x8b, 0x05, 0xb0, + 0x7f, 0x3e, 0xdb, 0x71, 0x81, 0x31, 0x0b, 0xe1, 0x05, 0xa0, 0xff, 0x01, + 0x00, 0x5f, 0xfc, 0x66, 0xa4, 0x7f, 0x9b, 0x06, 0x42, 0xfb, 0x80, 0x4f, + 0xff, 0xcf, 0x74, 0xc7, 0xe8, 0xb9, 0x20, 0x00, 0x0d, 0x1c, 0xc8, 0xc4, + 0xb3, 0x06, 0x7a, 0xbb, 0x92, 0x81, 0x65, 0x2f, 0xf9, 0xed, 0x7e, 0xe7, + 0x3f, 0xfd, 0x05, 0x32, 0x7f, 0x6c, 0x2f, 0x6f, 0xd1, 0xff, 0xe3, 0x22, + 0x91, 0x88, 0x05, 0xb8, 0x3b, 0x39, 0x04, 0x3c, 0x48, 0x41, 0x3e, 0x04, + 0x32, 0x00, 0x04, 0x4b, 0x04, 0x20, 0x00, 0x3e, 0x04, 0x41, 0x0f, 0x04, + 0x42, 0x04, 0x40, 0x40, 0x0f, 0x04, 0xf8, 0x51, 0x06, 0xf4, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x00, 0x0b, 0x0c, 0x1a, 0x1a, 0x1c, 0x1c, 0x0b, 0x0b, + 0x00, 0x1c, 0x1c, 0x15, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x90, 0x01, 0x2f, + 0xff, 0x14, 0x0d, 0x6f, 0xff, 0xc1, 0x30, 0xea, 0x30, 0xd5, 0x06, 0x9d, + 0x75, 0x3f, 0xf7, 0x68, 0x44, 0xaf, 0x65, 0x06, 0xe0, 0x7f, 0x69, 0x0e, + 0x80, 0xff, 0xc2, 0x06, 0xb1, 0x7d, 0x07, 0x11, 0xff, 0x7a, 0x66, 0x29, + 0x52, 0x06, 0xb2, 0xff, 0x60, 0x18, 0xce, 0x08, 0xb8, 0x07, 0x33, 0x7f, + 0x0e, 0x72, 0xff, 0x27, 0x04, 0x38, 0x38, 0x04, 0x3b, 0x20, 0x03, 0x0e, + 0xf4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x0c, 0x0d, 0x0d, 0xd2, 0x30, 0x02, + 0x20, 0x06, 0x2f, 0x20, 0x05, 0x0c, 0x0c, 0x01, 0x2f, 0xff, 0x15, 0x40, + 0x21, 0x6f, 0xff, 0xb3, 0x30, 0xed, 0x30, 0xf3, 0x30, 0x15, 0xd3, 0x30, + 0xa2, 0x06, 0x68, 0x41, 0x43, 0x4e, 0xf5, 0x6f, 0x2f, 0xef, 0x5a, 0x62, + 0x2f, 0x7f, 0x61, 0x06, 0xe0, 0x7f, 0x06, 0x18, 0xc1, 0x4b, 0x4f, 0xf5, + 0x75, 0xf0, 0x80, 0x7f, 0x05, 0xaf, 0x71, 0x08, 0x21, 0x7f, 0x06, 0x11, + 0xff, 0xe5, 0x54, 0x26, 0x4f, 0x08, 0xd4, 0x6b, 0x9a, 0x4e, 0x06, 0x7b, + 0x3f, 0x5c, 0xcf, 0x6c, 0x06, 0xb8, 0x44, 0xbe, 0x44, 0xc5, 0x06, 0x9b, + 0xbb, 0x07, 0x33, 0x7f, 0xf4, 0x88, 0x06, 0x83, 0xff, 0x1a, 0x04, 0x3e, + 0x28, 0x3b, 0x43, 0x04, 0x3c, 0x2e, 0x04, 0x31, 0x28, 0x45, 0x4f, 0x06, + 0x08, 0x43, 0x0e, 0xf3, 0x7f, 0x10, 0x06, 0xf0, 0xff, 0x0d, 0x02, 0x0e, + 0x0e, 0x1c, 0x0e, 0x0e, 0x0d, 0x20, 0x06, 0x17, 0x92, 0x20, 0x05, 0x0d, + 0x0d, 0x01, 0x2f, 0xff, 0x16, 0x07, 0x88, 0x3b, 0xb9, 0x02, 0x30, 0xbf, + 0x30, 0xea, 0x30, 0xab, 0x06, 0xa8, 0x3b, 0x73, 0x22, 0x00, 0x74, 0x28, + 0x35, 0x20, 0x00, 0x52, 0x2f, 0xfd, 0x63, 0xc0, 0x05, 0xe8, 0x3f, 0x10, + 0x0e, 0xf0, 0x7f, 0xe5, 0x54, 0xaf, 0x65, 0xbe, 0x8f, 0x08, 0xce, 0x9e, + 0xa0, 0x52, 0x06, 0x5f, 0xfd, 0x54, 0xcf, 0xa4, 0x01, 0xc2, 0xc0, 0xd0, + 0xac, 0xb9, 0x74, 0xce, 0x10, 0x06, 0x53, 0x7f, 0x80, 0x38, 0x3b, 0x41, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x2d, 0x2c, 0x00, 0x20, 0x28, 0x3d, 0x3a, + 0x20, 0x09, 0x10, 0x1d, 0xb4, 0xff, 0x0e, 0x0f, 0x05, 0x0f, 0x0d, 0x0f, + 0x0f, 0x0e, 0x20, 0x06, 0x18, 0x20, 0x05, 0x24, 0x0e, 0x0e, 0x01, 0x2f, + 0xff, 0x17, 0x01, 0x6f, 0xff, 0xc9, 0x30, 0x12, 0xdf, 0x30, 0xcb, 0x28, + 0x39, 0xfd, 0x56, 0x06, 0x5d, 0x79, 0x44, 0xba, 0x4f, 0xf3, 0x69, 0x2f, + 0x6f, 0x06, 0x18, 0x37, 0xf0, 0x7f, 0x71, 0x2f, 0xff, 0x65, 0xc0, 0x0e, + 0xa0, 0xff, 0x0e, 0x30, 0x7f, 0x1a, 0x59, 0x73, 0x7c, 0x3c, 0x5c, 0x20, + 0x4b, 0x51, 0x06, 0x7f, 0xf7, 0xc4, 0xb3, 0xf8, 0xbb, 0xc8, 0x00, 0xb2, + 0x74, 0xce, 0x20, 0x00, 0xf0, 0xc5, 0x29, 0x6a, 0xbc, 0x0e, 0xd3, 0x7f, + 0x06, 0x33, 0xff, 0x14, 0x28, 0x3b, 0x3c, 0x28, 0x33, 0x3d, 0xe0, 0x06, + 0x28, 0x37, 0x10, 0x07, 0x33, 0xff, 0x0e, 0xf5, 0x7f, 0x0f, 0x10, 0x10, + 0x0e, 0x10, 0x29, 0x10, 0x0f, 0x20, 0x06, 0x13, 0x20, 0x05, 0x0f, 0x0f, + 0x01, 0x2f, 0xff, 0x21, 0x18, 0x1e, 0xe8, 0x3b, 0x71, 0x51, 0x8c, 0x54, + 0x06, 0x38, 0x3f, 0xa2, 0xf8, 0x3b, 0x6e, 0x4f, 0xff, 0x65, 0x00, 0x70, + 0x27, 0xc7, 0x62, 0x31, 0x00, 0x6c, 0x4f, 0x89, 0x04, 0xbf, 0xff, 0x52, + 0x00, 0xe9, 0xa0, 0x6b, 0x8f, 0x58, 0x3d, 0x20, 0x00, 0x64, 0xe8, 0xd1, + 0x38, 0xdb, 0x04, 0x58, 0x55, 0xb9, 0x3b, 0x51, 0x6b, 0x40, 0xff, 0x69, + 0x2f, 0x87, 0x63, 0x00, 0x68, 0x40, 0x87, 0xbf, 0xd1, 0x09, 0x6b, 0x04, + 0x40, 0xff, 0x71, 0x6b, 0x71, 0x6d, 0x3e, 0x81, 0x00, 0x11, 0x95, 0x04, + 0x7e, 0x8d, 0xb3, 0x51, 0xeb, 0xfa, 0x06, 0x60, 0x7d, 0x78, 0x3b, 0xa0, + 0x52, 0x06, 0x72, 0xff, 0x98, 0x3b, 0x03, 0xf5, 0xac, 0x54, 0xd6, 0x6d, + 0xad, 0x06, 0xfb, 0xbb, 0x33, 0x81, 0x5c, 0x73, 0x00, 0x22, 0x7b, 0x65, + 0x04, 0x42, 0x7d, 0x07, 0x11, 0xff, 0xf8, 0x3b, 0x3d, 0x04, 0x40, 0x41, + 0x48, 0x43, 0x4f, 0x04, 0x20, 0x00, 0x20, 0x04, 0x40, 0x35, 0x20, 0x0d, + 0x3f, 0x04, 0x43, 0x04, 0x31, 0x04, 0x70, 0x3b, 0x04, 0x68, 0x5b, 0x06, + 0xf4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x10, 0x11, 0x28, 0x0f, 0x00, 0x28, + 0x29, 0x10, 0x10, 0x11, 0x29, 0x14, 0x11, 0x09, 0x10, 0x10, 0x10, 0x10, + 0x01, 0x2f, 0xff, 0x19, 0x18, 0x6f, 0xff, 0x00, 0xa8, 0x30, 0xaf, 0x30, + 0xa2, 0x30, 0xc9, 0x30, 0x2b, 0xeb, 0x30, 0x06, 0x5d, 0x79, 0x45, 0x2f, + 0x6d, 0x75, 0x2f, 0x6f, 0x37, 0xad, 0x51, 0x72, 0x06, 0x2d, 0xfc, 0xc9, + 0x48, 0x2f, 0x61, 0x00, 0x74, 0x28, 0xaf, 0x70, 0x75, 0x06, 0x20, 0x81, + 0x06, 0xf0, 0xff, 0x0e, 0xf0, 0x7f, 0x84, 0x53, 0xdc, 0x74, 0x08, 0x1a, + 0x59, 0x14, 0x5c, 0x06, 0x52, 0xfd, 0x00, 0x00, 0xd0, 0x01, 0xc5, 0x70, + 0xcf, 0xc4, 0xb3, 0x74, 0xb9, 0x06, 0x70, 0x7f, 0xea, 0x07, 0x12, 0x7f, + 0x53, 0x7f, 0x06, 0x73, 0xff, 0x2d, 0x28, 0x31, 0x32, 0x28, 0x33, 0x34, + 0xb8, 0x28, 0x43, 0x40, 0x04, 0x08, 0x19, 0x10, 0x09, 0x13, 0xff, 0x0e, + 0xf5, 0x7f, 0x11, 0x12, 0x12, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11, 0x12, + 0x13, 0x30, 0x68, 0x12, 0x30, 0x07, 0x01, 0x3d, 0x6e, 0x0e, 0x88, 0x3b, + 0xeb, 0x30, 0xb5, 0xa8, 0x28, 0x39, 0xd0, 0x06, 0x68, 0x3f, 0x45, 0x2f, + 0xef, 0x20, 0x00, 0x53, 0x8f, 0x2f, 0xdb, 0x6c, 0x00, 0x76, 0x06, 0x28, + 0x43, 0x06, 0x90, 0x79, 0x07, 0x50, 0xff, 0x0e, 0xf0, 0x7f, 0x06, 0x28, + 0x84, 0x14, 0x5c, 0xe6, 0x28, 0x3d, 0x06, 0x78, 0x3b, 0xd8, 0x06, 0xc5, + 0xb4, 0xc0, 0x14, 0xbc, 0x06, 0x98, 0x3d, 0x0e, 0xf2, 0x7f, 0x21, 0x8e, + 0x28, 0x37, 0x3b, 0x04, 0x4c, 0x06, 0x88, 0x3f, 0x10, 0x06, 0xf3, 0xff, + 0x0e, 0xf5, 0x7f, 0x12, 0x20, 0x13, 0x2c, 0x28, 0x3e, 0x12, 0x12, 0x13, + 0x11, 0x23, 0x64, 0x13, 0x30, 0x07, 0x01, 0x2f, 0xff, 0x1b, 0x01, 0x6f, + 0xff, 0xd5, 0x30, 0x00, 0xe9, 0x30, 0xf3, 0x30, 0xb9, 0x30, 0x18, 0x98, + 0x05, 0xae, 0x30, 0xa2, 0x30, 0xca, 0x06, 0x08, 0x3d, 0x46, 0x2f, 0xeb, + 0x15, 0x65, 0x00, 0x6e, 0x2f, 0x7d, 0x68, 0x28, 0x43, 0x47, 0x2f, 0xfb, + 0x5d, 0x69, 0x2f, 0x85, 0x6e, 0x2f, 0x89, 0x05, 0x5f, 0xff, 0x30, 0x71, + 0x79, 0x40, 0x71, 0x70, 0x65, 0x06, 0x4e, 0x7a, 0x30, 0xff, 0x30, 0xef, + 0x7a, 0x00, 0xf6, 0x00, 0x57, 0x73, 0x20, 0xfb, 0x73, 0x41, 0x09, 0x2d, + 0xa0, 0x97, 0x04, 0xd1, 0x09, 0xb0, 0x67, 0x56, 0x20, 0x80, 0x8d, 0x63, + 0x21, 0x93, 0x73, 0x05, 0x41, 0x11, 0x31, 0xf1, 0x61, 0xc0, 0x00, 0x80, + 0x81, 0x05, 0x12, 0x05, 0xd5, 0x6c, 0x5e, 0x5c, 0x2d, 0x57, 0x08, 0x9a, + 0x4e, 0xa3, 0x90, 0x06, 0x5f, 0xf9, 0x04, 0xd5, 0x91, 0x00, 0xb7, 0xa4, + 0xc2, 0x39, 0xb8, 0x20, 0x00, 0x30, 0x05, 0xae, 0x44, 0xc5, 0x98, 0xb0, + 0x06, 0x72, 0x7f, 0x73, 0x05, 0xa2, 0x73, 0xe2, 0xf3, 0x7f, 0x73, 0xf1, + 0x06, 0x11, 0xfd, 0x00, 0x00, 0x24, 0x28, 0x2d, 0x30, 0x00, 0x04, 0x3d, + 0x04, 0x46, 0x04, 0x43, 0x04, 0x37, 0x08, 0x04, 0x41, 0x04, 0x3a, 0x28, + 0x4b, 0x4f, 0x04, 0x20, 0x2b, 0x00, 0x13, 0x28, 0x4d, 0x38, 0x40, 0x19, + 0x30, 0x04, 0xc8, 0x4d, 0x06, 0xf4, 0xff, 0x80, 0x10, 0x0e, 0xf0, 0x7f, + 0x13, 0x14, 0x17, 0x12, 0x19, 0x18, 0x13, 0x00, 0x13, 0x14, 0x19, 0x2e, + 0x14, 0x13, 0x13, 0x13, 0x51, 0x13, 0x01, 0x2f, 0xff, 0x1c, 0x78, 0x3b, + 0xb0, 0x30, 0xec, 0x28, 0x31, 0x7f, 0xc0, 0x06, 0x08, 0x33, 0x97, 0xbb, + 0x58, 0x3b, 0x3f, 0xf7, 0x05, 0x94, 0xb1, 0x00, 0x50, 0x7f, 0x06, 0x38, + 0x3d, 0xf0, 0x07, 0xb0, 0xff, 0x06, 0x71, 0x7f, 0x5a, 0x2b, 0x06, 0x51, + 0xff, 0x3c, 0x68, 0x97, 0x67, 0x08, 0xb3, 0x7e, 0xbe, 0x8f, 0x06, 0x72, + 0xff, 0xf8, 0xad, 0x08, 0x06, 0xb8, 0x98, 0xb0, 0xe4, 0xb2, 0x0e, 0xb3, + 0x7f, 0x06, 0xb1, 0xff, 0x13, 0xae, 0x28, 0x3b, 0x35, 0x48, 0x21, 0x34, + 0x04, 0xe8, 0x25, 0x10, 0x00, 0x93, 0xff, 0x10, 0x06, 0xb0, 0xff, 0x14, + 0x00, 0x15, 0x14, 0x13, 0x15, 0x15, 0x14, 0x14, 0x15, 0x25, 0x15, 0x12, + 0x20, 0x05, 0x14, 0x14, 0x01, 0x2f, 0xff, 0x1d, 0x98, 0x3b, 0x00, 0xa2, + 0x30, 0xc9, 0x30, 0xeb, 0x30, 0xfc, 0x30, 0x71, 0xd7, 0x06, 0x48, 0x3f, + 0x5e, 0x77, 0x37, 0xb7, 0x6c, 0x00, 0x6f, 0x2f, 0x6b, 0x6f, 0x70, 0x05, + 0xef, 0xff, 0x0f, 0x70, 0x7f, 0x61, 0x21, 0x7f, 0x31, 0x7d, 0x05, 0xf9, + 0xbf, 0xf0, 0x7f, 0x80, 0x05, 0xf9, 0xbf, 0xdc, 0x74, 0xb7, 0x5f, 0x57, + 0x7f, 0x6e, 0x40, 0x66, 0x06, 0x7b, 0x3b, 0xfc, 0xac, 0xe4, 0xb4, 0xe8, + 0xb8, 0x38, 0x04, 0xd5, 0x06, 0x9b, 0xbb, 0x07, 0xd2, 0x7f, 0x05, 0xfb, + 0xbf, 0x13, 0x04, 0x32, 0x80, 0x48, 0x37, 0x35, 0x04, 0x3b, 0x04, 0x43, + 0x04, 0x3f, 0xe0, 0x06, 0x08, 0x3f, 0x10, 0x07, 0x74, 0xff, 0x0e, 0x76, + 0x7f, 0x15, 0x16, 0x15, 0x14, 0x16, 0x02, 0x16, 0x15, 0x15, 0x16, 0x16, + 0x0f, 0x20, 0x05, 0x15, 0x48, 0x15, 0x01, 0x2f, 0xff, 0x1e, 0x16, 0xa8, + 0x3b, 0xc6, 0x30, 0xde, 0x35, 0x30, 0xe9, 0x06, 0x48, 0x39, 0x78, 0x3b, + 0x74, 0x2f, 0xfb, 0x6d, 0x46, 0xbf, 0xc0, 0x06, 0x56, 0xbb, 0x10, 0x0e, + 0x90, 0x7f, 0x71, 0x53, 0x30, 0x57, 0x6c, 0x9a, 0x20, 0xc9, 0x62, 0x06, + 0x98, 0x3b, 0x4c, 0xd1, 0xd0, 0xb9, 0x7c, 0x75, 0xb7, 0x06, 0xd8, 0x3b, + 0x0e, 0x93, 0x7f, 0x58, 0x3b, 0x42, 0x28, 0x3b, 0x3c, 0x28, 0x43, 0x60, + 0x3b, 0x06, 0x68, 0x3b, 0x10, 0x16, 0x94, 0xff, 0x16, 0x17, 0x16, 0x15, + 0x17, 0x02, 0x17, 0x16, 0x16, 0x17, 0x17, 0x10, 0x20, 0x05, 0x16, 0xc8, + 0x78, 0x16, 0x00, 0xbf, 0xff, 0x1f, 0x0a, 0x6f, 0xff, 0xac, 0x30, 0xa4, + 0xb5, 0x28, 0x3d, 0xca, 0x06, 0x68, 0x39, 0x5f, 0xf7, 0x79, 0x2f, 0xf9, + 0x6e, 0x06, 0x0e, 0xf1, 0x88, 0x5f, 0xff, 0x52, 0x00, 0xe9, 0x2f, 0xeb, + 0x75, 0x00, 0x62, 0x88, 0x2f, 0xf7, 0x69, 0x00, 0x71, 0x2f, 0xf9, 0x65, + 0x00, 0x20, 0x28, 0x00, 0x63, 0x2d, 0x83, 0x6f, 0x2f, 0x85, 0xe9, 0x00, + 0x72, 0x8d, 0x48, 0xd9, 0x69, 0x00, 0x76, 0x40, 0x17, 0x3d, 0x9f, 0x20, + 0x03, 0xc0, 0xb3, 0xc0, 0x06, 0xf0, 0xff, 0x0e, 0xf0, 0x7f, 0x2d, 0x57, + 0x9a, 0x4e, 0xa3, 0x90, 0xc0, 0x06, 0x7f, 0xf5, 0x33, 0x80, 0x74, 0xc7, + 0x44, 0xc5, 0x98, 0xb0, 0xd5, 0x0e, 0x73, 0x7f, 0x3f, 0x77, 0x69, 0x06, + 0xa3, 0xff, 0x13, 0x28, 0x39, 0x39, 0x28, 0x3d, 0x70, 0x3d, 0x06, 0x08, + 0x35, 0x10, 0x07, 0x53, 0xff, 0x0e, 0xf5, 0x7f, 0x17, 0x18, 0x27, 0x16, + 0x00, 0x18, 0x19, 0x17, 0x17, 0x18, 0x18, 0x0d, 0x18, 0x0a, 0x17, 0x17, + 0x17, 0x17, 0x01, 0x2f, 0xff, 0x20, 0x78, 0x3b, 0xcf, 0xa2, 0x28, 0x3b, + 0xc1, 0x06, 0x88, 0x39, 0x00, 0x00, 0x48, 0x2f, 0xf5, 0x69, 0xdd, 0x47, + 0x9d, 0x06, 0x90, 0x7f, 0xef, 0x06, 0xe0, 0x7f, 0x06, 0xf0, 0xff, 0x07, + 0x30, 0x7f, 0xed, 0x06, 0x6f, 0xf8, 0x08, 0x77, 0x6d, 0x30, 0x57, 0x06, + 0xa8, 0x39, 0x00, 0x44, 0xc5, 0x0e, 0x74, 0xc7, 0xf0, 0xd2, 0x06, 0xd3, + 0x7f, 0x0e, 0xb2, 0xff, 0x38, 0x3b, 0x38, 0x38, 0x04, 0x42, 0x20, 0x03, + 0x10, 0x06, 0xd3, 0xff, 0x10, 0x06, 0x75, 0x7f, 0x18, 0x19, 0x18, 0x00, + 0x17, 0x1a, 0x1a, 0x18, 0x18, 0x19, 0x1a, 0x0e, 0x04, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x01, 0x2f, 0xff, 0x21, 0x12, 0x80, 0x6f, 0xff, 0xdb, 0x30, + 0xf3, 0x30, 0xb8, 0x30, 0xe5, 0x0a, 0x30, 0xe9, 0x30, 0xb9, 0x06, 0x48, + 0x41, 0x48, 0x2f, 0xe1, 0x6e, 0xa8, 0x2f, 0xcf, 0x75, 0x4f, 0xe1, 0x73, + 0x10, 0x16, 0x00, 0x7f, 0x2a, 0x6d, 0xfd, 0x04, 0x90, 0xc9, 0x62, 0xaf, + 0x65, 0x06, 0x7f, 0xf7, 0x28, 0xc6, 0x03, 0x50, 0xb4, 0x7c, 0xb7, 0xa4, + 0xc2, 0x06, 0x9b, 0xbb, 0x0e, 0xd3, 0x7f, 0x00, 0x13, 0x04, 0x3e, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x16, 0x43, 0x04, 0x40, 0x28, 0x45, 0x41, 0x06, + 0x08, 0x41, 0x10, 0x16, 0xf4, 0xff, 0x19, 0x00, 0x1a, 0x19, 0x18, 0x1b, + 0x1b, 0x19, 0x19, 0x1a, 0x01, 0x1b, 0x11, 0x1a, 0x19, 0x19, 0x19, 0x19, + 0x01, 0x2f, 0xff, 0x20, 0x22, 0x0e, 0x6f, 0xff, 0xb8, 0x30, 0xe3, 0x30, + 0xde, 0x08, 0x30, 0xa4, 0x30, 0xab, 0x06, 0x48, 0x39, 0x00, 0x00, 0x4a, + 0xac, 0x2f, 0xf7, 0x6d, 0x4f, 0x7b, 0x63, 0x2f, 0x81, 0x06, 0x90, 0x7f, + 0xef, 0x00, 0x75, 0x71, 0x28, 0xbf, 0x06, 0x16, 0x42, 0x90, 0xff, 0x6b, + 0x06, 0x40, 0xff, 0x47, 0x2f, 0xf5, 0xc0, 0x06, 0xb1, 0x81, 0x06, 0xf1, + 0xff, 0x59, 0x72, 0x70, 0x4e, 0xa0, 0x52, 0x80, 0x06, 0x9f, 0xf7, 0x90, + 0xc7, 0x54, 0xba, 0x74, 0xc7, 0x74, 0x71, 0xce, 0x06, 0x78, 0xbb, 0x07, + 0x73, 0x7f, 0x06, 0x73, 0xff, 0x2f, 0x04, 0x3c, 0x28, 0x33, 0x1c, 0x39, + 0x04, 0x3a, 0x28, 0x39, 0x10, 0x06, 0x31, 0x7f, 0x10, 0x06, 0xf0, 0xff, + 0x1a, 0x1b, 0x00, 0x1e, 0x19, 0x14, 0x20, 0x1a, 0x1a, 0x1b, 0x20, 0x02, + 0x31, 0x1b, 0x1a, 0x1a, 0x1a, 0x1a, 0x01, 0x2f, 0xff, 0x23, 0x40, 0x01, + 0x6f, 0xff, 0xde, 0x30, 0xeb, 0x30, 0xc6, 0x30, 0x01, 0xa3, 0x30, 0xcb, + 0x30, 0xfc, 0x30, 0xaf, 0x06, 0x28, 0x3f, 0x45, 0x4d, 0x2f, 0xed, 0x72, + 0x00, 0x74, 0x28, 0x3b, 0x6e, 0x28, 0x3f, 0xf0, 0x06, 0x17, 0xbf, 0x0f, + 0xd0, 0x7f, 0x06, 0x19, 0xbf, 0x06, 0xf0, 0x7f, 0x6c, 0x9a, 0xd0, 0x63, + 0x08, 0x3c, 0x5c, 0x4b, 0x51, 0x06, 0x7f, 0xf7, 0xc8, 0xb9, 0x74, 0x01, + 0xb9, 0xf0, 0xd2, 0xc8, 0xb2, 0x6c, 0xd0, 0x06, 0x5b, 0xbb, 0xa0, 0x0e, + 0xf2, 0x7f, 0x1c, 0x28, 0x39, 0x40, 0x04, 0x42, 0x04, 0x38, 0x3c, 0x04, + 0x3d, 0x20, 0x03, 0x06, 0x18, 0x41, 0x10, 0x07, 0xd4, 0xff, 0x0e, 0x16, + 0x7f, 0x1b, 0x1d, 0x00, 0x20, 0x1e, 0x21, 0x22, 0x1b, 0x1b, 0x1e, 0x22, + 0x02, 0x1a, 0x1d, 0x1b, 0x1b, 0x1b, 0x1b, 0x01, 0x2f, 0xff, 0x24, 0x40, + 0x20, 0x6f, 0xff, 0xe1, 0x30, 0xad, 0x30, 0xb7, 0x30, 0x62, 0xb3, 0x06, + 0x28, 0x35, 0x78, 0x3b, 0x65, 0x00, 0x78, 0x4e, 0xf3, 0x6f, 0xeb, 0x06, + 0xc0, 0x7f, 0x06, 0x18, 0xb5, 0xd0, 0xff, 0x6b, 0x06, 0xa0, 0xff, 0x73, + 0x20, 0x01, 0x06, 0x71, 0x81, 0x10, 0x4d, 0x00, 0xe9, 0x06, 0xc1, 0xff, + 0xa8, 0x58, 0x7f, 0x89, 0x20, 0xe5, 0x54, 0x06, 0x7f, 0xf5, 0x00, 0x00, + 0x55, 0xba, 0xdc, 0x1c, 0xc2, 0x54, 0xcf, 0x06, 0x90, 0x7f, 0x07, 0x13, + 0x7f, 0x06, 0xd1, 0xff, 0x1c, 0x04, 0x5c, 0x35, 0x28, 0x31, 0x41, 0x06, + 0x48, 0x37, 0x07, 0xb4, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x1c, 0x1e, 0x00, + 0x21, 0x1f, 0x22, 0x23, 0x1c, 0x1c, 0x1f, 0x23, 0x02, 0x1b, 0x1e, 0x1c, + 0x1c, 0x1c, 0x1c, 0x01, 0x2f, 0xff, 0x25, 0x40, 0x01, 0x6f, 0xff, 0xe2, + 0x30, 0xf3, 0x30, 0xc8, 0x30, 0x1a, 0xbb, 0x30, 0xe9, 0x20, 0x05, 0x06, + 0x5c, 0xf7, 0x6f, 0x2f, 0xf1, 0x74, 0xaa, 0x26, 0xbf, 0x65, 0x2f, 0xff, + 0x72, 0x2f, 0x85, 0x74, 0x10, 0x15, 0xc0, 0x7f, 0x99, 0x00, 0x84, 0x79, + 0x72, 0x5e, 0x58, 0xc9, 0x62, 0x79, 0x40, 0x72, 0x06, 0x5f, 0xf7, 0xac, + 0xba, 0xb8, 0xd2, 0x38, 0xc1, 0x30, 0xab, 0xb7, 0x06, 0x9b, 0xbb, 0x0e, + 0xd3, 0x7f, 0x1c, 0x04, 0x3e, 0x04, 0x11, 0x3d, 0x04, 0x42, 0x28, 0x3d, + 0x35, 0x04, 0x40, 0x20, 0x01, 0x60, 0x30, 0x20, 0x0b, 0x10, 0x1d, 0xb4, + 0xff, 0x1d, 0x1f, 0x22, 0x20, 0x23, 0x00, 0x24, 0x1d, 0x1d, 0x20, 0x24, + 0x1c, 0x1f, 0x1d, 0x15, 0x1d, 0x1d, 0x1d, 0x01, 0x2f, 0xff, 0x26, 0x78, + 0x3b, 0xaa, 0x28, 0x35, 0x01, 0xf3, 0x30, 0xc0, 0x30, 0x18, 0x98, 0xa2, + 0x28, 0x45, 0x05, 0xc6, 0x30, 0xa3, 0x30, 0xeb, 0x05, 0xc8, 0x43, 0x4e, + 0x2f, 0xf7, 0x14, 0x74, 0x00, 0x68, 0x48, 0x39, 0x6c, 0x28, 0x39, 0x6e, + 0x00, 0x45, 0x64, 0x2f, 0x07, 0x20, 0x00, 0x41, 0x48, 0x51, 0x69, 0x20, + 0x13, 0x75, 0x6c, 0x4f, 0x19, 0x04, 0x7f, 0xff, 0xf0, 0x67, 0x20, 0x28, + 0xc9, 0xe9, 0xc0, 0x8d, 0x75, 0x61, 0x2f, 0x93, 0x38, 0xd9, 0x04, 0x50, + 0x83, 0x4e, 0x2f, 0xf1, 0x65, 0x20, 0xf3, 0xb6, 0x50, 0xff, 0xe4, 0x40, + 0xff, 0x30, 0x6f, 0x63, 0x41, 0x13, 0xf1, 0x07, 0x6e, 0x8d, 0x04, 0xe0, + 0xff, 0x20, 0x00, 0x4f, 0x81, 0x85, 0x31, 0x75, 0x69, 0x05, 0x0f, 0xff, + 0xbf, 0xb1, 0xe7, 0x61, 0x41, 0xf9, 0x32, 0x11, 0xb2, 0x0d, 0x31, 0xfd, + 0x30, 0x19, 0x04, 0x5f, 0xff, 0x00, 0x77, 0x83, 0x5e, 0x5c, 0x89, 0x5b, + 0x84, 0x76, 0x08, 0x17, 0x52, 0xaf, 0x65, 0x06, 0x3f, 0xfd, 0x24, 0xb1, + 0x5c, 0x00, 0xb3, 0x80, 0xb7, 0xdc, 0xb4, 0x39, 0xb8, 0x20, 0x00, 0x00, + 0x64, 0xc5, 0xf8, 0xd2, 0xac, 0xb9, 0xa4, 0x7d, 0xc2, 0x05, 0xf3, 0x7f, + 0x72, 0x7d, 0x73, 0x7d, 0x05, 0x32, 0x77, 0x00, 0x13, 0x7f, 0x68, 0x61, + 0xff, 0x70, 0x48, 0x2f, 0x81, 0x05, 0x51, 0xfb, 0x45, 0x3b, 0x04, 0x38, + 0x04, 0x34, 0xa8, 0x48, 0x37, 0x3b, 0x28, 0x37, 0x3d, 0x20, 0x0b, 0x41, + 0x04, 0x3a, 0x82, 0x20, 0x13, 0x35, 0x04, 0x20, 0x00, 0x10, 0x48, 0x55, + 0x38, 0xaa, 0x20, 0x19, 0x4c, 0xa0, 0x15, 0x3e, 0x28, 0x67, 0x42, 0x28, + 0x67, 0x3e, 0x38, 0x04, 0x32, 0x28, 0x69, 0x0a, 0xf4, 0xff, 0x10, 0x0e, + 0xf0, 0x7f, 0x1e, 0x20, 0x02, 0x00, 0x22, 0x02, 0x02, 0x1e, 0x1e, 0x21, + 0x02, 0x1d, 0x04, 0x20, 0x1e, 0x1e, 0x1e, 0x1e, 0x01, 0x2f, 0xff, 0x27, + 0x11, 0x88, 0x6f, 0xff, 0xcb, 0x30, 0xab, 0x28, 0x3d, 0xb0, 0x30, 0xa2, + 0xd8, 0x05, 0xc8, 0x31, 0xd7, 0x3b, 0x63, 0x2f, 0xed, 0x3f, 0xf1, 0x67, + 0x00, 0x75, 0xc0, 0x2f, 0xf7, 0x10, 0x15, 0xd0, 0x7f, 0x3c, 0x5c, 0xa0, + 0x52, 0xc9, 0x62, 0x60, 0xdc, 0x05, 0xdf, 0x6c, 0xaf, 0xff, 0xc8, 0xb2, + 0x74, 0xce, 0x7c, 0x1b, 0xb7, 0xfc, 0xac, 0x06, 0x70, 0x7f, 0x07, 0x93, + 0x7f, 0xe1, 0x06, 0x43, 0xff, 0x38, 0x3b, 0x51, 0x3a, 0x28, 0x35, 0x40, + 0x28, 0x39, 0x33, 0x04, 0x43, 0x03, 0x28, 0x0d, 0x80, 0x10, 0x19, 0xd4, + 0xff, 0x1f, 0x21, 0x23, 0x21, 0x24, 0x25, 0x1f, 0x00, 0x1f, 0x22, 0x25, + 0x1e, 0x21, 0x1f, 0x1f, 0x1f, 0x48, 0x1f, 0x01, 0x2f, 0xff, 0x28, 0x0a, + 0x6f, 0xff, 0xd1, 0x30, 0xca, 0x34, 0x30, 0xde, 0x06, 0x68, 0x37, 0x3f, + 0xff, 0x50, 0x4f, 0xdd, 0x61, 0x00, 0x68, 0x6d, 0x06, 0x08, 0x35, 0x0f, + 0xf0, 0x7f, 0xe1, 0x0e, 0x40, 0x7f, 0xf4, 0x5d, 0xff, 0x10, 0x62, 0x6c, + 0x9a, 0x06, 0x92, 0xff, 0x0c, 0xd3, 0x98, 0xb0, 0x35, 0xc8, 0xb9, 0x0f, + 0x33, 0x7f, 0x06, 0x52, 0x7f, 0x1f, 0x28, 0x37, 0x3d, 0x28, 0x3b, 0x70, + 0x3c, 0x06, 0x08, 0x35, 0x10, 0x07, 0xf4, 0xff, 0x0e, 0x56, 0x7f, 0x20, + 0x22, 0x24, 0x23, 0x00, 0x25, 0x26, 0x20, 0x20, 0x23, 0x26, 0x20, 0x22, + 0x09, 0x20, 0x20, 0x20, 0x20, 0x01, 0x2f, 0xff, 0x29, 0x12, 0x88, 0x3b, + 0x01, 0xe9, 0x30, 0xb0, 0x30, 0xa2, 0x30, 0xa4, 0x06, 0x68, 0x3f, 0xd0, + 0x38, 0x3b, 0x9f, 0xf3, 0x79, 0x10, 0x16, 0x00, 0x7f, 0xf4, 0x5d, 0xc9, + 0x62, 0x20, 0x2d, 0x57, 0x06, 0xb8, 0x3b, 0x7c, 0xb7, 0xfc, 0xac, 0x74, + 0x6a, 0xc7, 0x06, 0xbb, 0xbb, 0x07, 0x93, 0x7f, 0x69, 0x06, 0x48, 0x3b, + 0x40, 0x28, 0x3f, 0x33, 0x2c, 0x04, 0x32, 0x28, 0x45, 0x39, 0x06, 0x08, + 0x3f, 0x10, 0x16, 0xf4, 0xff, 0x21, 0x23, 0x00, 0x25, 0x24, 0x26, 0x27, + 0x21, 0x21, 0x24, 0x27, 0x02, 0x21, 0x23, 0x21, 0x21, 0x21, 0x21, 0x01, + 0x2f, 0xff, 0x2a, 0x41, 0x19, 0x6f, 0xff, 0xda, 0x30, 0xeb, 0x30, 0xfc, + 0x06, 0x68, 0x37, 0xaa, 0x5f, 0xf7, 0x65, 0x28, 0x3b, 0x75, 0x06, 0xad, + 0x77, 0xe9, 0x28, 0xbb, 0x6f, 0xea, 0x06, 0x80, 0x81, 0x07, 0x10, 0xff, + 0x31, 0x7f, 0xf9, 0x06, 0xe1, 0xff, 0xfa, 0x06, 0x8f, 0xf8, 0xd8, 0x10, + 0x79, 0x81, 0x9c, 0x06, 0x9f, 0xf5, 0x00, 0x00, 0x98, 0xd3, 0x38, 0xe8, + 0xb8, 0x06, 0xb0, 0x7f, 0x07, 0x52, 0x7f, 0x06, 0x93, 0xff, 0x1f, 0x04, + 0x35, 0xb8, 0x28, 0x3b, 0x43, 0x06, 0x08, 0x33, 0x0f, 0x71, 0x7f, 0x10, + 0x06, 0xf0, 0xff, 0x22, 0x24, 0x26, 0x00, 0x25, 0x27, 0x28, 0x22, 0x22, + 0x25, 0x28, 0x22, 0x04, 0x24, 0x22, 0x22, 0x22, 0x22, 0x01, 0x2f, 0xff, + 0x2b, 0x0e, 0x80, 0x6f, 0xff, 0xbb, 0x30, 0xf3, 0x30, 0xc8, 0x30, 0xad, + 0x00, 0x30, 0xc3, 0x30, 0xc4, 0x30, 0xfb, 0x30, 0xcd, 0x02, 0x30, 0xa4, + 0x30, 0xd3, 0x30, 0xb9, 0x05, 0xa8, 0x4b, 0x53, 0x00, 0x00, 0x74, 0x00, + 0x2e, 0x00, 0x20, 0x00, 0x4b, 0xa8, 0x2c, 0x73, 0x74, 0x20, 0x0b, 0x73, + 0x20, 0x0b, 0x61, 0x00, 0x6e, 0x2a, 0x00, 0x64, 0x20, 0x13, 0x4e, 0x28, + 0x57, 0x76, 0x2c, 0x8b, 0x73, 0xd0, 0x04, 0xc0, 0x7f, 0x3c, 0xed, 0x6e, + 0x20, 0x85, 0x2d, 0x00, 0x43, 0x00, 0x6a, 0x68, 0x2f, 0x83, 0x30, 0x6f, + 0x74, 0x28, 0x4d, 0x70, 0x20, 0x0d, 0x65, 0xaa, 0x20, 0x15, 0x65, 0x40, + 0x1b, 0x4e, 0x2d, 0x13, 0xe9, 0x20, 0x8d, 0xe8, 0xda, 0x03, 0xe0, 0x8d, + 0x00, 0x30, 0xff, 0x75, 0x06, 0x40, 0xff, 0xd1, 0x83, 0x65, 0x05, 0xa1, + 0x7f, 0x6e, 0xa2, 0x21, 0xff, 0x43, 0x81, 0x79, 0xf3, 0x00, 0x62, 0x2f, + 0x0b, 0x6c, 0xaa, 0x22, 0x13, 0x79, 0x42, 0x03, 0x69, 0x42, 0x05, 0x65, + 0x04, 0x62, 0x05, 0x23, 0x00, 0x57, 0xfa, 0x57, 0x28, 0x83, 0x8c, 0x54, + 0x3c, 0x04, 0x5c, 0xf4, 0x7e, 0xaf, 0x65, 0x06, 0x1f, 0xfd, 0x38, 0xc1, + 0x00, 0x78, 0xc7, 0xb8, 0xd2, 0xa4, 0xd0, 0x20, 0xce, 0x03, 0x24, 0xb1, + 0x44, 0xbe, 0xa4, 0xc2, 0x05, 0xff, 0xf8, 0x00, 0x91, 0xff, 0xc6, 0x31, + 0x95, 0x05, 0x13, 0x81, 0x53, 0x00, 0xe3, 0x2b, 0xb9, 0xd1, 0xff, 0x76, + 0xd0, 0x60, 0x13, 0x05, 0x32, 0x83, 0x21, 0x28, 0x3b, 0x3d, 0x04, 0x42, + 0x04, 0x04, 0x2d, 0x00, 0x1a, 0x04, 0x38, 0x20, 0x07, 0x41, 0x04, 0x15, + 0x20, 0x00, 0x38, 0x20, 0x03, 0x1d, 0x28, 0x53, 0x32, 0x20, 0x11, 0x70, + 0x41, 0x04, 0xe8, 0x55, 0x07, 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x23, + 0x27, 0x29, 0x28, 0x00, 0x29, 0x2a, 0x23, 0x23, 0x26, 0x2c, 0x26, 0x27, + 0x09, 0x23, 0x23, 0x23, 0x23, 0x01, 0x2f, 0xff, 0x2c, 0x01, 0xc8, 0x3b, + 0x06, 0xeb, 0x30, 0xb7, 0x30, 0xa2, 0x05, 0xa8, 0x31, 0x00, 0x18, 0x3b, + 0x4c, 0xaf, 0x2f, 0xf9, 0x63, 0x28, 0x3f, 0x61, 0x06, 0x85, 0x3b, 0x38, + 0x27, 0x70, 0x85, 0x05, 0x96, 0x44, 0xda, 0x07, 0x30, 0xff, 0x39, 0x39, + 0x61, 0x06, 0x61, 0x83, 0x00, 0x10, 0x7f, 0xed, 0x05, 0xc2, 0x03, 0x23, + 0x01, 0x57, 0x62, 0x53, 0x7f, 0x89, 0x9a, 0x4e, 0x06, 0x7f, 0xfb, 0x81, + 0x58, 0x3b, 0xe8, 0xb8, 0xdc, 0xc2, 0x44, 0xc5, 0x06, 0x53, 0x7f, 0xd8, + 0x9a, 0x3b, 0x07, 0x11, 0xff, 0xfa, 0x06, 0x04, 0x03, 0x98, 0x3b, 0x1b, + 0x04, 0x4e, 0x8e, 0x28, 0x39, 0x38, 0x04, 0x4f, 0x04, 0xe8, 0x2d, 0x07, + 0xf4, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x24, 0x00, 0x28, 0x2b, 0x29, 0x2b, + 0x2c, 0x24, 0x24, 0x27, 0x01, 0x2b, 0x27, 0x28, 0x24, 0x24, 0x24, 0x24, + 0x01, 0x2f, 0xff, 0x58, 0x2d, 0xd8, 0x3b, 0xd3, 0x28, 0x41, 0x58, 0x45, + 0xfb, 0x30, 0xb0, 0x00, 0x30, 0xec, 0x30, 0xca, 0x30, 0xc7, 0x30, 0xa3, + 0x35, 0x30, 0xfc, 0x28, 0x57, 0x05, 0x78, 0x3b, 0x56, 0x4f, 0xfd, 0x63, + 0x4c, 0xef, 0xd1, 0x3f, 0x03, 0x7b, 0x7b, 0x74, 0x4f, 0xfd, 0x20, 0x00, + 0x47, 0x2e, 0x97, 0xbd, 0x3d, 0x0b, 0x61, 0x2f, 0x91, 0x3f, 0x27, 0x03, + 0x7e, 0x87, 0x9f, 0x77, 0x2d, 0xe0, 0x83, 0x6b, 0x2d, 0x2f, 0xf5, 0x30, + 0x15, 0x6c, 0x4e, 0xf3, 0x2d, 0x04, 0x60, 0x81, 0x00, 0x70, 0xff, 0x77, + 0x75, 0x6c, 0x7b, 0x30, 0xed, 0x00, 0x50, 0xff, 0x6e, 0x04, 0x0e, 0x77, + 0xf1, 0x83, 0x00, 0x51, 0x77, 0xf5, 0x04, 0x38, 0xbb, 0x51, 0xff, 0x71, + 0xfd, 0x3e, 0x6f, 0x79, 0x2f, 0x07, 0x6c, 0x2f, 0x13, 0xfc, 0x3f, 0x03, + 0x31, 0xfb, 0x3d, 0x8b, 0x71, 0xfb, 0x30, 0x15, 0x03, 0x98, 0x3b, 0x87, + 0x65, 0x00, 0xee, 0x68, 0x79, 0x72, 0x8c, 0x54, 0x3c, 0x68, 0x01, 0x97, + 0x67, 0xb3, 0x7e, 0x01, 0x4e, 0xaf, 0x05, 0x9a, 0x38, 0x80, 0x88, 0x3b, + 0x48, 0xbe, 0x3c, 0xc1, 0xb8, 0xd2, 0x20, 0x00, 0x00, 0xf8, 0xad, 0x08, + 0xb8, 0x98, 0xb0, 0x18, 0x77, 0xb5, 0x06, 0x58, 0x3b, 0x00, 0x11, 0xff, + 0x31, 0x99, 0x64, 0x04, 0xe3, 0x7f, 0x73, 0xfd, 0xb1, 0xfd, 0xeb, 0x33, + 0xf1, 0x05, 0x11, 0xfb, 0xd8, 0x3b, 0x12, 0x28, 0x37, 0x3d, 0x28, 0x3d, + 0x58, 0x4b, 0x11, 0x20, 0x00, 0x38, 0x20, 0x03, 0x13, 0x04, 0x40, 0x48, + 0x5b, 0x17, 0x30, 0x04, 0x34, 0x40, 0x1d, 0x4b, 0x04, 0x08, 0x57, 0x07, + 0x14, 0xff, 0x10, 0x0e, 0xd0, 0x7f, 0x00, 0x25, 0x29, 0x2a, 0x2a, 0x2a, + 0x2b, 0x25, 0x25, 0x00, 0x28, 0x2a, 0x25, 0x29, 0x25, 0x25, 0x25, 0x25, + 0x91, 0x01, 0x2f, 0xff, 0x2e, 0x0a, 0x6f, 0xff, 0xb9, 0x30, 0xea, 0x28, + 0x29, 0x6d, 0xe0, 0x05, 0x08, 0x23, 0x00, 0x9f, 0xf7, 0x75, 0x28, 0x15, + 0x56, 0x11, 0x6d, 0x05, 0xaf, 0xef, 0xc0, 0x10, 0x08, 0x50, 0x7f, 0x06, + 0x1f, 0xfd, 0xcf, 0x82, 0xcc, 0x91, 0x57, 0x53, 0x80, 0x06, 0x72, 0xfd, + 0x00, 0x00, 0x18, 0xc2, 0xac, 0xb9, 0xa8, 0x63, 0xb0, 0x06, 0x90, 0x7f, + 0x0e, 0xf3, 0x7f, 0x21, 0x04, 0x43, 0x28, 0x1f, 0x38, 0x35, 0x1c, 0x30, + 0x04, 0x3c, 0x04, 0x08, 0x19, 0x10, 0x11, 0xf4, 0xff, 0x06, 0x16, 0xff, + 0x26, 0x2a, 0x00, 0x2e, 0x2b, 0x2e, 0x2e, 0x26, 0x26, 0x2b, 0x2e, 0x02, + 0x2a, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x01, 0x2f, 0xff, 0x2f, 0x50, 0x0d, + 0x6f, 0xff, 0xc8, 0x28, 0x3b, 0xcb, 0x30, 0xc0, 0x30, 0x00, 0xfc, 0x30, + 0xc9, 0x30, 0xfb, 0x30, 0xc8, 0x30, 0x15, 0xd0, 0x30, 0xb4, 0x05, 0xc8, + 0x47, 0x54, 0x68, 0x39, 0x69, 0x2f, 0xcd, 0xc1, 0x3f, 0xd1, 0x9b, 0x71, + 0x54, 0x00, 0x6f, 0x00, 0x62, 0x2f, 0xe5, 0x60, 0x67, 0x20, 0x07, 0x05, + 0x30, 0x7f, 0x74, 0x00, 0xe9, 0x00, 0x2d, 0xbb, 0x2f, 0xf7, 0x74, 0x20, + 0x05, 0x05, 0x50, 0x7b, 0x00, 0x50, 0xff, 0x75, 0x06, 0x60, 0xff, 0x71, + 0x7f, 0xd0, 0x3f, 0xf5, 0x06, 0xb0, 0xff, 0x79, 0x05, 0xc0, 0x7f, 0x79, + 0x72, 0xcb, 0x7a, 0x00, 0x3c, 0x5c, 0xbe, 0x8f, 0x8c, 0x54, 0x1a, 0x59, + 0x08, 0xf4, 0x5d, 0xe5, 0x54, 0x05, 0xfb, 0x43, 0xb8, 0xd2, 0xac, 0x00, + 0xb9, 0xc8, 0xb2, 0xe4, 0xb2, 0xdc, 0xb4, 0xa0, 0x06, 0xd1, 0x14, 0xbc, + 0xe0, 0xac, 0x05, 0xfb, 0xc3, 0x00, 0x31, 0xff, 0x6e, 0xf4, 0x05, 0xa2, + 0x01, 0xf3, 0xff, 0x3f, 0x63, 0x05, 0xb2, 0x81, 0x22, 0x68, 0x39, 0x38, + 0x04, 0x41, 0x34, 0x28, 0x3d, 0x34, 0x04, 0x20, 0x00, 0x38, 0x20, 0x03, + 0x05, 0x22, 0x04, 0x3e, 0x04, 0x31, 0x28, 0x4d, 0x33, 0x20, 0x07, 0xc0, + 0x0d, 0x74, 0xff, 0x10, 0x0e, 0x50, 0x7f, 0x27, 0x2b, 0x2f, 0x2c, 0x2f, + 0x2f, 0x00, 0x27, 0x27, 0x2c, 0x2f, 0x2c, 0x2b, 0x27, 0x27, 0x25, 0x27, + 0x27, 0x01, 0x2f, 0xff, 0x30, 0x01, 0x6f, 0xff, 0xbf, 0x28, 0x35, 0x10, + 0xaf, 0x30, 0xb9, 0x28, 0x37, 0xab, 0x30, 0xa4, 0x30, 0x43, 0xb3, 0x20, + 0x09, 0xf8, 0x8a, 0xf6, 0x5c, 0x05, 0xb8, 0x3b, 0x3f, 0xf7, 0x14, 0x6b, + 0x00, 0x73, 0xa8, 0x35, 0x43, 0x2f, 0x83, 0x69, 0x00, 0x6a, 0x63, 0x28, + 0x3b, 0x30, 0x15, 0x49, 0x20, 0x1b, 0x6c, 0x68, 0x51, 0x73, 0xad, 0x04, + 0x0f, 0xff, 0xce, 0x20, 0x5b, 0x65, 0x40, 0x7d, 0x50, 0x89, 0x71, 0x2f, + 0x87, 0xed, 0x30, 0x0f, 0x78, 0x45, 0x30, 0x8b, 0xef, 0x80, 0x15, 0x04, + 0xb0, 0xff, 0x2d, 0xa8, 0x37, 0xd7, 0xb1, 0x01, 0x3f, 0x93, 0x73, 0x2e, + 0x11, 0x6c, 0x2f, 0x9b, 0x04, 0x1f, 0xff, 0x31, 0x5d, 0x7f, 0x6f, 0x41, + 0x03, 0x71, 0x01, 0x51, 0x8b, 0x38, 0x41, 0xb1, 0x87, 0x04, 0x7f, 0xff, + 0x71, 0xdd, 0xb8, 0x91, 0x81, 0x63, 0x60, 0x0d, 0x38, 0x43, 0x05, 0x10, + 0x81, 0x79, 0x72, 0x4b, 0x00, 0x51, 0xaf, 0x65, 0x8c, 0x54, 0xef, 0x51, + 0xd1, 0x03, 0x79, 0xaf, 0x65, 0xa4, 0x7f, 0x9b, 0x05, 0xa2, 0xfb, 0x43, + 0x88, 0x00, 0xd1, 0x6c, 0xd0, 0xa4, 0xc2, 0x20, 0x00, 0x00, 0x04, 0xcf, + 0x74, 0xc7, 0xe4, 0xce, 0x30, 0x09, 0x1c, 0xc8, 0x3d, 0xc4, 0xb3, 0x06, + 0x33, 0x7f, 0x32, 0x7f, 0x58, 0x37, 0xb3, 0x7f, 0x65, 0x2f, 0x13, 0xe3, + 0x73, 0x7d, 0x38, 0x55, 0x04, 0x12, 0x7f, 0x6c, 0x00, 0x68, 0x00, 0x41, + 0xff, 0x05, 0x52, 0x81, 0x11, 0x22, 0x04, 0x51, 0x28, 0x3d, 0x3a, 0x04, + 0x41, 0x68, 0x35, 0x57, 0x1a, 0x28, 0x41, 0x39, 0x20, 0x0f, 0x3e, 0x20, + 0x11, 0x0d, 0x34, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x00, 0x28, 0x2c, 0x1b, + 0x2d, 0x1d, 0x1d, 0x28, 0x28, 0x00, 0x2d, 0x1d, 0x2b, 0x2c, 0x28, 0x28, + 0x28, 0x28, 0x90, 0x01, 0x2f, 0xff, 0x31, 0x34, 0x6f, 0xff, 0xa2, 0x30, + 0xe1, 0x30, 0x75, 0xea, 0x28, 0x37, 0x05, 0xfd, 0x6f, 0x7f, 0xff, 0x55, + 0x6f, 0xf3, 0x65, 0x4f, 0x73, 0x5d, 0x53, 0x2f, 0xfd, 0x61, 0x40, 0x0d, + 0x04, 0x96, 0xad, 0xdf, 0xff, 0xc9, 0x60, 0x71, 0xe0, 0x38, 0x2d, 0x50, + 0x8b, 0x38, 0xc5, 0x64, 0x00, 0x19, 0x20, 0x41, 0x0e, 0x00, 0x6d, 0x00, + 0xe9, 0x4f, 0x95, 0x58, 0x4f, 0x04, 0x5f, 0xfc, 0x56, 0xb7, 0x2f, 0xe7, + 0x72, 0x45, 0xa1, 0x3f, 0xfb, 0x67, 0x41, 0x09, 0x71, 0x07, 0x51, 0x09, + 0xee, 0x04, 0x38, 0x31, 0x9f, 0xff, 0x71, 0x71, 0x69, 0x2f, 0xf1, 0x71, + 0x8b, 0x30, 0x0b, 0x64, 0x1d, 0x00, 0x27, 0x00, 0x31, 0x01, 0x30, 0x9d, + 0x39, 0xc7, 0x61, 0x04, 0x6f, 0xff, 0x6f, 0x45, 0x2a, 0x35, 0x31, 0xf3, + 0x64, 0x6a, 0x29, 0x52, 0x0f, 0x70, 0x0d, 0x5e, 0x87, 0xc3, 0x91, 0x89, + 0x04, 0x10, 0x87, 0x8e, 0x7f, 0xfd, 0x56, 0x06, 0x72, 0xfb, 0x3f, 0xff, + 0x0f, 0xf8, 0xbb, 0x6d, 0xad, 0x06, 0xb0, 0x7f, 0x72, 0x7f, 0x52, 0x7d, + 0x5f, 0xf7, 0xf4, 0x93, 0x85, 0x04, 0xd2, 0x7b, 0x00, 0xf1, 0xff, 0x05, + 0x3c, 0xc1, 0x21, 0x28, 0x25, 0x35, 0x04, 0x05, 0x34, 0x04, 0x38, 0x04, + 0x3d, 0x28, 0x45, 0x3d, 0x20, 0x05, 0x41, 0x4b, 0x20, 0x0f, 0x20, 0x00, + 0x28, 0x04, 0x42, 0x28, 0x45, 0x41, 0x42, 0x20, 0x0d, 0x20, 0x00, 0x10, + 0x04, 0x3c, 0x20, 0x23, 0x5c, 0x40, 0x20, 0x23, 0x3a, 0x20, 0x27, 0x0b, + 0xd4, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x29, 0x2e, 0x00, 0x13, 0x31, 0x2d, + 0x14, 0x29, 0x29, 0x31, 0x14, 0x02, 0x29, 0x2e, 0x29, 0x29, 0x29, 0x29, + 0x01, 0x2f, 0xff, 0x32, 0x40, 0x13, 0x6f, 0xff, 0xa6, 0x30, 0xeb, 0x30, + 0xb0, 0x30, 0x15, 0xa2, 0x30, 0xa4, 0x06, 0x68, 0x3d, 0x55, 0x2f, 0xeb, + 0x75, 0x27, 0x33, 0x50, 0x75, 0x2f, 0xdf, 0x79, 0x10, 0x16, 0x20, 0x7f, + 0x4c, 0x4e, 0xc9, 0x62, 0x20, 0x2d, 0x57, 0x06, 0x98, 0x3d, 0xb0, 0xc6, + 0xe8, 0xb8, 0xfc, 0x1a, 0xac, 0x74, 0xc7, 0x06, 0x9b, 0xbb, 0x07, 0x93, + 0x7f, 0x69, 0x06, 0x2c, 0xc0, 0x23, 0x82, 0x28, 0x13, 0x43, 0x04, 0x33, + 0x04, 0x32, 0x28, 0x29, 0x39, 0xc0, 0x03, 0xe8, 0x17, 0x10, 0x19, 0x34, + 0xff, 0x2a, 0x2f, 0x30, 0x2e, 0x30, 0x30, 0x00, 0x2a, 0x2a, 0x2e, 0x30, + 0x2d, 0x2f, 0x2a, 0x2a, 0x24, 0x2a, 0x2a, 0x01, 0x2f, 0xff, 0x33, 0x01, + 0x6f, 0xff, 0x73, 0x7c, 0x00, 0x18, 0x98, 0xd0, 0x30, 0xfc, 0x30, 0xb8, + 0x30, 0x02, 0xf3, 0x30, 0xf8, 0x8a, 0xf6, 0x5c, 0x06, 0x18, 0x3b, 0x53, + 0xac, 0x2f, 0xe7, 0x56, 0x2f, 0xef, 0x72, 0x2f, 0x75, 0x3f, 0x7d, 0x20, + 0x00, 0x56, 0x49, 0x2f, 0xfb, 0x6c, 0x2f, 0x77, 0x6e, 0x2f, 0xff, 0x04, + 0xfc, 0x7d, 0xce, 0xf5, 0x20, 0x69, 0x3b, 0xe5, 0x50, 0x83, 0x3f, 0x65, + 0x67, 0x60, 0x0f, 0x61, 0xce, 0xed, 0xea, 0x30, 0x99, 0x04, 0x3c, 0x0d, + 0x9f, 0xdb, 0x6b, 0x40, 0xf1, 0x69, 0x2f, 0x87, 0x63, 0x2a, 0x00, 0x68, + 0x4f, 0x6f, 0x4a, 0x29, 0x55, 0x6e, 0x2e, 0x0d, 0x66, 0xd7, 0x4f, 0xfd, + 0x3f, 0x8f, 0x6e, 0x2f, 0xa5, 0x65, 0x21, 0x1b, 0x03, 0x9e, 0x0f, 0x31, + 0x6b, 0x7b, 0x6f, 0x41, 0x03, 0x31, 0x85, 0x50, 0xff, 0x31, 0x85, 0x69, + 0xae, 0x7f, 0x30, 0x85, 0xfb, 0x5d, 0x1b, 0x30, 0x7f, 0x03, 0xd5, 0xe1, + 0x71, 0xeb, 0x51, 0x81, 0xed, 0x61, 0x7f, 0x51, 0x6b, 0x55, 0x20, 0x6f, + 0x07, 0x6c, 0x6e, 0x93, 0x45, 0x2e, 0xa5, 0x2e, 0x4e, 0x9b, 0x60, 0x55, + 0x20, 0x07, 0x03, 0x5f, 0xff, 0x8e, 0x7f, 0x5e, 0x5c, 0xf4, 0x00, 0x7e, + 0x14, 0x5c, 0xac, 0x4e, 0xa4, 0x7f, 0x9b, 0x80, 0x06, 0x02, 0xfd, 0x00, + 0x00, 0xf8, 0xbb, 0x6d, 0xad, 0x39, 0x00, 0xb8, 0x20, 0x00, 0x84, 0xbc, + 0xc4, 0xc9, 0x44, 0x01, 0xc5, 0x7c, 0xc7, 0x9c, 0xb7, 0xdc, 0xb4, 0x05, + 0xbb, 0xc5, 0xe2, 0xd2, 0x7f, 0x33, 0x73, 0x32, 0x61, 0x20, 0x00, 0x4d, + 0x40, 0x0d, 0x67, 0xdd, 0x41, 0x81, 0x32, 0xf9, 0x69, 0x83, 0x91, 0x32, + 0x05, 0x03, 0xb1, 0xff, 0x6c, 0x22, 0xed, 0xed, 0x71, 0xff, 0x54, 0x05, + 0x52, 0x67, 0x20, 0xa3, 0x1b, 0x33, 0x81, 0x6e, 0x42, 0x25, 0x82, 0x03, + 0xff, 0x8e, 0x10, 0x04, 0x3c, 0x04, 0x35, 0x28, 0x3f, 0x38, 0x22, 0x04, + 0x3a, 0x28, 0x3d, 0x3d, 0x04, 0x41, 0x20, 0x07, 0x38, 0x8a, 0x20, 0x11, + 0x20, 0x00, 0x12, 0x20, 0x13, 0x40, 0x28, 0x55, 0x38, 0xab, 0xc0, 0x15, + 0x3e, 0x20, 0x21, 0x42, 0x28, 0x6f, 0x3e, 0x48, 0x6d, 0x0b, 0x14, 0xff, + 0x80, 0x10, 0x0e, 0xf0, 0x7f, 0x2b, 0x30, 0x1c, 0x00, 0x1f, 0x1f, 0x2b, + 0x01, 0x2b, 0x00, 0x1e, 0x00, 0x30, 0x2b, 0x2b, 0x20, 0x07, 0x90, 0x01, + 0x1f, 0xff, 0x34, 0x19, 0x6f, 0xff, 0xd9, 0x30, 0xcd, 0x30, 0x03, 0xba, + 0x30, 0xa8, 0x30, 0xe9, 0x30, 0x06, 0x5d, 0x7b, 0x36, 0xaf, 0xb4, 0x37, + 0x95, 0x7a, 0x2f, 0xfd, 0x37, 0x15, 0x61, 0x10, 0x15, 0xe0, 0x7f, 0xd4, + 0x59, 0x02, 0x85, 0x51, 0x5e, 0x74, 0xc9, 0x62, 0x06, 0x7f, 0xf7, 0xa0, + 0x00, 0xbc, 0x24, 0xb1, 0x18, 0xc2, 0xd8, 0xc5, 0x7c, 0x54, 0xb7, 0x10, + 0x06, 0x53, 0x7f, 0x12, 0x28, 0x39, 0x3d, 0x28, 0x3d, 0x41, 0x04, 0x06, + 0x43, 0x04, 0x4d, 0x04, 0x3b, 0x03, 0x48, 0x0f, 0x10, 0x19, 0xb4, 0xff, + 0x2c, 0x00, 0x31, 0x31, 0x2f, 0x31, 0x31, 0x2c, 0x2c, 0x2f, 0x24, 0x31, + 0x0c, 0x20, 0x05, 0x2c, 0x2c, 0x01, 0x2f, 0xff, 0x99, 0x01, 0x80, 0x6f, + 0xff, 0xb7, 0x30, 0xf3, 0x30, 0xac, 0x30, 0xdd, 0x0a, 0x30, 0xfc, 0x30, + 0xeb, 0x06, 0x48, 0x3d, 0x53, 0x4f, 0xd1, 0x67, 0xad, 0x2f, 0xe5, 0x70, + 0x2e, 0xff, 0x72, 0x2f, 0xf9, 0x06, 0xb0, 0x7f, 0x75, 0x2f, 0xdf, 0xf0, + 0x06, 0x90, 0xff, 0x06, 0x10, 0x7d, 0x07, 0xd1, 0x7f, 0x06, 0x30, 0xff, + 0xb0, 0x65, 0xa0, 0x52, 0x20, 0x61, 0x57, 0x06, 0x78, 0x39, 0x00, 0x00, + 0xf1, 0xc2, 0x00, 0x07, 0xac, 0xec, 0xd3, 0x74, 0xb9, 0x06, 0x78, 0xbb, + 0x07, 0xf1, 0xff, 0x05, 0xfc, 0x3b, 0x15, 0x21, 0x04, 0x38, 0x28, 0x3b, + 0x33, 0x28, 0x33, 0x3f, 0x28, 0x3d, 0x70, 0x40, 0x05, 0xe8, 0x39, 0x07, + 0xf4, 0xff, 0x10, 0x0e, 0x10, 0x7f, 0x2d, 0x26, 0x2d, 0x27, 0x00, 0x2c, + 0x2d, 0x2d, 0x2d, 0x2a, 0x2d, 0x28, 0x26, 0xa4, 0x20, 0x06, 0x2d, 0x01, + 0x2f, 0xff, 0x9c, 0x10, 0x6f, 0xff, 0xde, 0x30, 0x44, 0xec, 0x28, 0x37, + 0xb7, 0x30, 0xa2, 0x06, 0x48, 0x39, 0x00, 0x00, 0x63, 0x4d, 0x2f, 0xe9, + 0x3f, 0xed, 0x79, 0x00, 0x73, 0x28, 0x45, 0x05, 0xff, 0xf5, 0xbb, 0x90, + 0x7f, 0x69, 0x40, 0x7f, 0x05, 0xf8, 0xb9, 0x07, 0x70, 0xff, 0x65, 0x06, + 0x61, 0x7d, 0x91, 0xff, 0x80, 0x06, 0x70, 0x7f, 0x6c, 0x9a, 0x65, 0x67, + 0x7f, 0x89, 0x9a, 0x40, 0x4e, 0x06, 0x78, 0x3d, 0xd0, 0xb9, 0x08, 0xb8, + 0x74, 0xc7, 0x0a, 0xdc, 0xc2, 0x44, 0xc5, 0x06, 0xb3, 0x7f, 0x65, 0x62, + 0xff, 0xeb, 0xaa, 0x06, 0x63, 0xff, 0xe1, 0x06, 0x82, 0x7f, 0x1c, 0x28, + 0x35, 0x3b, 0x28, 0x39, 0x39, 0x2e, 0x04, 0x37, 0x28, 0x45, 0x4f, 0x06, + 0x08, 0x3b, 0x07, 0x74, 0xff, 0x10, 0x0e, 0x70, 0x7f, 0x2e, 0x00, 0x1c, + 0x1f, 0x1d, 0x20, 0x21, 0x2e, 0x2e, 0x1d, 0x01, 0x21, 0x19, 0x1c, 0x2e, + 0x2e, 0x2e, 0x2e, 0x01, 0x2f, 0xff, 0x20, 0xa8, 0x07, 0x6f, 0xff, 0xa2, + 0x30, 0xe9, 0x30, 0xd6, 0x00, 0x30, 0x96, 0x99, 0x77, 0x95, 0xfd, 0x56, + 0x23, 0x10, 0x90, 0xa6, 0x90, 0x05, 0xfe, 0xf8, 0x55, 0x00, 0x2e, 0x00, + 0x58, 0x41, 0x20, 0x03, 0x45, 0x20, 0x07, 0x06, 0x3d, 0xfd, 0xc9, 0x00, + 0x6d, 0xd6, 0x2f, 0xf9, 0x3c, 0xef, 0x74, 0x28, 0xbd, 0x20, 0x2f, 0xff, + 0x3c, 0xfb, 0x62, 0xad, 0x47, 0x4d, 0x20, 0x2f, 0x09, 0x6e, 0x48, 0x55, + 0x04, 0x9f, 0xff, 0x56, 0x2f, 0xe9, 0xd5, 0x3f, 0xed, 0x3f, 0xfd, 0x69, + 0x2f, 0xff, 0x74, 0x2f, 0xf9, 0x20, 0x21, 0x11, 0xc5, 0x50, 0x85, 0x38, + 0xd1, 0x63, 0x00, 0x68, 0x40, 0x13, 0x45, 0xa0, 0xa9, 0xd7, 0x03, 0x9e, + 0x1d, 0xb0, 0x55, 0x69, 0xc0, 0x79, 0x20, 0x21, 0x9b, 0x30, 0xfd, 0x30, + 0x17, 0xd6, 0x04, 0x9f, 0xff, 0xb0, 0xd5, 0x6f, 0x41, 0x81, 0xc1, 0xc1, + 0x81, 0x50, 0x83, 0x64, 0xc0, 0x40, 0x1b, 0x04, 0x3f, 0xff, 0x3f, 0x96, + 0xc9, 0x62, 0x2f, 0x4f, 0x01, 0x54, 0x80, 0x08, 0x54, 0x4b, 0x91, 0x7f, + 0x23, 0x03, 0x80, 0x05, 0xff, 0xff, 0x44, 0xc5, 0x8d, 0xb7, 0xd0, 0xc5, + 0xf8, 0x07, 0xbb, 0xac, 0xb9, 0xb8, 0xd2, 0x06, 0x3b, 0xbd, 0x72, 0x7f, + 0x52, 0x7d, 0x5c, 0x64, 0x01, 0x62, 0x7d, 0x6e, 0x04, 0x22, 0x7f, 0x51, + 0xe3, 0x05, 0xf1, 0xff, 0x1e, 0x04, 0x01, 0x31, 0x04, 0x4a, 0x04, 0x35, + 0x04, 0x34, 0x28, 0x39, 0x11, 0x3d, 0x04, 0x51, 0x20, 0x03, 0x3d, 0x04, + 0x4b, 0x20, 0x0f, 0x04, 0x20, 0x00, 0x10, 0x04, 0x40, 0x28, 0x57, 0x31, + 0x04, 0x18, 0x41, 0x04, 0x3a, 0x28, 0x55, 0x30, 0x11, 0x2d, 0x04, 0x3c, + 0xdc, 0x28, 0x5f, 0x30, 0x15, 0x42, 0x20, 0x23, 0x0b, 0x54, 0xff, 0x10, + 0x0e, 0xf0, 0x7f, 0x2f, 0x2d, 0x00, 0x11, 0x30, 0x13, 0x13, 0x2f, 0x2f, + 0x30, 0x12, 0x02, 0x1f, 0x2d, 0x2f, 0x2f, 0x2f, 0x2f, 0x01, 0x2f, 0xff, + 0xae, 0x40, 0x0d, 0x6f, 0xff, 0xb5, 0x30, 0xa6, 0x30, 0xb8, 0x30, 0xb5, + 0x38, 0x41, 0xd3, 0x20, 0x05, 0x06, 0x1e, 0x78, 0x53, 0x2f, 0xf7, 0x75, + 0x26, 0x1b, 0xf5, 0xd6, 0xb7, 0x05, 0x9f, 0x7f, 0x97, 0xa5, 0x37, 0xb3, + 0x73, 0x2f, 0xf9, 0x6f, 0x60, 0x8f, 0xdd, 0x03, 0xb7, 0xa1, 0x01, 0x30, + 0xff, 0x2d, 0xc0, 0x8b, 0x03, 0x95, 0x9d, 0x01, 0x70, 0xff, 0x61, 0x29, + 0x39, 0xb4, 0x91, 0x8d, 0x74, 0x05, 0x6e, 0x05, 0x00, 0x50, 0x7f, 0xed, + 0x05, 0x8f, 0xff, 0x99, 0x6c, 0x30, 0x79, 0x72, 0x58, 0x3f, 0x06, 0x5f, + 0xf7, 0xac, 0xc0, 0xb0, 0xc6, 0x00, 0x14, 0xb5, 0x44, 0xc5, 0x7c, 0xb7, + 0x44, 0xbe, 0x2d, 0x44, 0xc5, 0x06, 0x53, 0x7f, 0x6f, 0x2b, 0x29, 0xf2, + 0x81, 0xeb, 0x05, 0xa3, 0x7f, 0x54, 0xe1, 0x06, 0xa2, 0x7f, 0x21, 0x28, + 0x1f, 0x43, 0x28, 0x39, 0x3e, 0x04, 0x45, 0x32, 0x48, 0x25, 0x30, 0x04, + 0x4f, 0x88, 0x37, 0x32, 0x28, 0x4f, 0x70, 0x4f, 0x03, 0x68, 0x23, 0x08, + 0x74, 0xff, 0x10, 0x0e, 0xf0, 0x7f, 0x30, 0x25, 0x03, 0x26, 0x00, 0x03, + 0x03, 0x30, 0x30, 0x29, 0x03, 0x24, 0x25, 0x12, 0x30, 0x30, 0x30, 0x01, + 0x38, 0x01, 0xba, 0x01, 0x6f, 0xff, 0xd0, 0x02, 0x30, 0xfc, 0x30, 0xdf, + 0x30, 0xe5, 0x20, 0x05, 0xc0, 0x8b, 0x06, 0x28, 0x39, 0x00, 0x00, 0x42, + 0x4f, 0x77, 0x6d, 0x48, 0x3f, 0x05, 0x98, 0x31, 0xf8, 0x00, 0x50, 0x7f, + 0x3e, 0xe9, 0x0e, 0xd0, 0xff, 0x06, 0xf1, 0xff, 0x06, 0x11, 0x7f, 0x7e, + 0x76, 0x55, 0x18, 0x61, 0x27, 0x59, 0x06, 0x58, 0x37, 0x3f, 0xff, 0x84, + 0xbc, 0xa4, 0x1c, 0xbb, 0xe4, 0xb2, 0x06, 0x90, 0x7f, 0x07, 0xb3, 0x7f, + 0x06, 0x31, 0xff, 0x11, 0x04, 0x57, 0x35, 0x28, 0x27, 0x3c, 0x48, 0x3f, + 0x4b, 0x04, 0xe8, 0x27, 0x09, 0x11, 0x7f, 0x10, 0x0e, 0x10, 0xff, 0x00, + 0x31, 0x07, 0x09, 0x08, 0x09, 0x09, 0x31, 0x31, 0x00, 0x08, 0x09, 0x08, + 0x07, 0x31, 0x31, 0x31, 0x31, 0xd0, 0x01, 0x6f, 0xff, 0x48, 0x3e, 0x01, + 0x50, 0x06, 0x00, 0x01, 0x01, 0x01, 0x70, 0x02, 0x20, 0x03, 0x20, 0x04, + 0x40, 0x06, 0x01, 0x02, 0x02, 0x04, 0x00, 0x03, 0x04, 0x04, 0x02, 0x02, + 0x03, 0x04, 0x03, 0x20, 0x02, 0x02, 0x20, 0x01, 0x03, 0x03, 0x05, 0x04, + 0x05, 0x00, 0x05, 0x03, 0x03, 0x04, 0x05, 0x04, 0x03, 0x03, 0x80, 0x20, + 0x01, 0x04, 0x04, 0x06, 0x05, 0x06, 0x06, 0x04, 0x02, 0x04, 0x05, 0x06, + 0x05, 0x04, 0x04, 0x20, 0x01, 0x05, 0x00, 0x05, 0x07, 0x06, 0x07, 0x07, + 0x05, 0x05, 0x06, 0x08, 0x07, 0x06, 0x05, 0x05, 0x20, 0x01, 0x06, 0x06, + 0x08, 0x00, 0x07, 0x08, 0x08, 0x06, 0x06, 0x07, 0x08, 0x07, 0x20, 0x06, + 0x06, 0x20, 0x01, 0x07, 0x08, 0x0a, 0x09, 0x0a, 0x04, 0x0a, 0x07, 0x07, + 0x09, 0x0a, 0x20, 0xa4, 0x07, 0x07, 0x00, 0x07, 0x08, 0x09, 0x0b, 0x0a, + 0x0b, 0x0b, 0x08, 0x10, 0x08, 0x0a, 0x0b, 0x20, 0x10, 0x08, 0x08, 0x08, + 0x09, 0x00, 0x0a, 0x1d, 0x0b, 0x1e, 0x1e, 0x09, 0x09, 0x0b, 0x40, 0x1f, + 0x20, 0x10, 0x09, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x1b, 0x0c, 0x0c, + 0x0a, 0x0a, 0x0c, 0x0c, 0x16, 0x08, 0x0b, 0x0a, 0x0a, 0x0a, 0x20, 0x0e, + 0x1a, 0x1a, 0x1c, 0x00, 0x1c, 0x0b, 0x0b, 0x1c, 0x1c, 0x15, 0x0c, 0x0b, + 0x03, 0x0b, 0x0b, 0x0b, 0x0c, 0x0d, 0x0d, 0x30, 0x02, 0x20, 0x06, 0x60, + 0x2f, 0x20, 0x05, 0x20, 0x07, 0x0e, 0x0e, 0x1c, 0x0e, 0x0e, 0x58, 0x0d, + 0x20, 0x06, 0x17, 0x20, 0x05, 0x20, 0x07, 0x0f, 0x0f, 0x0d, 0x16, 0x0f, + 0x0f, 0x0e, 0x20, 0x06, 0x18, 0x20, 0x05, 0x20, 0x07, 0x10, 0x05, 0x10, + 0x0e, 0x10, 0x10, 0x0f, 0x20, 0x06, 0x13, 0x20, 0x05, 0x80, 0x20, 0x07, + 0x11, 0x28, 0x0f, 0x28, 0x29, 0x10, 0x10, 0x02, 0x11, 0x29, 0x14, 0x11, + 0x10, 0x10, 0x20, 0x07, 0x12, 0x00, 0x12, 0x10, 0x11, 0x11, 0x11, 0x11, + 0x12, 0x13, 0x28, 0x30, 0x12, 0x50, 0x07, 0x2c, 0x20, 0x12, 0x12, 0x12, + 0x13, 0x10, 0x11, 0x23, 0x13, 0x40, 0x07, 0x14, 0x17, 0x12, 0x19, 0x00, + 0x18, 0x13, 0x13, 0x14, 0x19, 0x2e, 0x14, 0x13, 0x40, 0x13, 0x20, 0x07, + 0x15, 0x14, 0x13, 0x15, 0x15, 0x14, 0x0c, 0x14, 0x15, 0x15, 0x12, 0x20, + 0x05, 0x20, 0x07, 0x16, 0x15, 0x00, 0x14, 0x16, 0x16, 0x15, 0x15, 0x16, + 0x16, 0x0f, 0xc0, 0x20, 0x05, 0x20, 0x07, 0x17, 0x16, 0x15, 0x17, 0x17, + 0x16, 0x0c, 0x16, 0x17, 0x17, 0x10, 0x20, 0x05, 0x20, 0x07, 0x18, 0x27, + 0x00, 0x16, 0x18, 0x19, 0x17, 0x17, 0x18, 0x18, 0x0d, 0x10, 0x18, 0x17, + 0x17, 0x20, 0x07, 0x19, 0x18, 0x17, 0x1a, 0x00, 0x1a, 0x18, 0x18, 0x19, + 0x1a, 0x0e, 0x19, 0x18, 0x40, 0x18, 0x30, 0x07, 0x19, 0x18, 0x1b, 0x1b, + 0x19, 0x19, 0x02, 0x1a, 0x1b, 0x11, 0x1a, 0x19, 0x19, 0x30, 0x07, 0x1e, + 0x00, 0x19, 0x14, 0x20, 0x1a, 0x1a, 0x1b, 0x20, 0x31, 0x10, 0x1b, 0x1a, + 0x1a, 0x20, 0x07, 0x1d, 0x20, 0x1e, 0x21, 0x00, 0x22, 0x1b, 0x1b, 0x1e, + 0x22, 0x1a, 0x1d, 0x1b, 0x00, 0x1b, 0x1b, 0x1b, 0x1c, 0x1e, 0x21, 0x1f, + 0x22, 0x00, 0x23, 0x1c, 0x1c, 0x1f, 0x23, 0x1b, 0x1e, 0x1c, 0x00, 0x1c, + 0x1c, 0x1c, 0x1d, 0x1f, 0x22, 0x20, 0x23, 0x00, 0x24, 0x1d, 0x1d, 0x20, + 0x24, 0x1c, 0x1f, 0x1d, 0x00, 0x1d, 0x1d, 0x1d, 0x1e, 0x20, 0x02, 0x22, + 0x02, 0x04, 0x02, 0x1e, 0x1e, 0x21, 0x02, 0x20, 0x38, 0x1e, 0x1e, 0x00, + 0x1e, 0x1f, 0x21, 0x23, 0x21, 0x24, 0x25, 0x1f, 0x10, 0x1f, 0x22, 0x25, + 0x20, 0x38, 0x1f, 0x1f, 0x1f, 0x20, 0x00, 0x22, 0x24, 0x23, 0x25, 0x26, + 0x20, 0x20, 0x23, 0x00, 0x26, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x21, + 0x00, 0x23, 0x25, 0x24, 0x26, 0x27, 0x21, 0x21, 0x24, 0x40, 0x27, 0x20, + 0x28, 0x21, 0x21, 0x21, 0x22, 0x24, 0x26, 0x00, 0x25, 0x27, 0x28, 0x22, + 0x22, 0x25, 0x28, 0x22, 0x00, 0x24, 0x22, 0x22, 0x22, 0x22, 0x23, 0x27, + 0x29, 0x00, 0x28, 0x29, 0x2a, 0x23, 0x23, 0x26, 0x2c, 0x26, 0x00, 0x27, + 0x23, 0x23, 0x23, 0x23, 0x24, 0x28, 0x2b, 0x00, 0x29, 0x2b, 0x2c, 0x24, + 0x24, 0x27, 0x2b, 0x27, 0x00, 0x28, 0x24, 0x24, 0x24, 0x24, 0x25, 0x29, + 0x2a, 0x00, 0x2a, 0x2a, 0x2b, 0x25, 0x25, 0x28, 0x2a, 0x25, 0x00, 0x29, + 0x25, 0x25, 0x25, 0x25, 0x26, 0x2a, 0x2e, 0x00, 0x2b, 0x2e, 0x2e, 0x26, + 0x26, 0x2b, 0x2e, 0x2a, 0x00, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x27, 0x2b, + 0x2f, 0x00, 0x2c, 0x2f, 0x2f, 0x27, 0x27, 0x2c, 0x2f, 0x2c, 0x00, 0x2b, + 0x27, 0x27, 0x27, 0x27, 0x28, 0x2c, 0x1b, 0x00, 0x2d, 0x1d, 0x1d, 0x28, + 0x28, 0x2d, 0x1d, 0x2b, 0x00, 0x2c, 0x28, 0x28, 0x28, 0x28, 0x29, 0x2e, + 0x13, 0x00, 0x31, 0x2d, 0x14, 0x29, 0x29, 0x31, 0x14, 0x29, 0x00, 0x2e, + 0x29, 0x29, 0x29, 0x29, 0x2a, 0x2f, 0x30, 0x00, 0x2e, 0x30, 0x30, 0x2a, + 0x2a, 0x2e, 0x30, 0x2d, 0x40, 0x2f, 0x20, 0x59, 0x2a, 0x2b, 0x30, 0x1c, + 0x00, 0x1f, 0x00, 0x1f, 0x2b, 0x2b, 0x00, 0x1e, 0x00, 0x30, 0x2b, 0x00, + 0x2b, 0x2b, 0x2b, 0x2c, 0x31, 0x31, 0x2f, 0x31, 0x02, 0x31, 0x2c, 0x2c, + 0x2f, 0x31, 0x0c, 0x20, 0x05, 0x2c, 0x00, 0x2c, 0x2d, 0x26, 0x2d, 0x27, + 0x2c, 0x2d, 0x2d, 0x04, 0x2d, 0x2a, 0x2d, 0x28, 0x26, 0x20, 0x06, 0x2d, + 0x2e, 0x80, 0x21, 0x06, 0x20, 0x21, 0x2e, 0x2e, 0x1d, 0x21, 0x19, 0x00, + 0x1c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2d, 0x11, 0x00, 0x30, 0x13, 0x13, + 0x2f, 0x2f, 0x30, 0x12, 0x1f, 0x1c, 0x2d, 0x2f, 0x2f, 0x20, 0x07, 0xeb, + 0x6f, 0x00, 0x73, 0x43 }; unsigned int COUNTRY_LIST_DATA_len = 219040; diff --git a/include/fs/mii_data.hpp b/include/fs/mii_data.hpp index ef971bfc..e21cbb5c 100644 --- a/include/fs/mii_data.hpp +++ b/include/fs/mii_data.hpp @@ -4,3073 +4,6140 @@ // Origin: https://www.flaticon.com/free-icon/red-panda_8686325?term=red+panda&page=1&position=2&origin=tag&related_id=8686325 // Git Hash: f470e0c9d341db73b8a24880295d2eab4cd81660 -constexpr unsigned char MII_DATA[] = { - 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x46, 0x00, 0x4c, 0x00, 0x5f, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x09, 0x05, 0x54, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x94, 0x04, 0x00, 0x00, 0x6c, 0x0a, 0x00, 0x00, 0x94, 0x0e, 0x00, 0x00, - 0xd4, 0x0e, 0x00, 0x00, 0x7c, 0x65, 0x00, 0x00, 0xd4, 0x69, 0x00, 0x00, 0xa4, 0x6e, 0x00, 0x00, 0xf4, 0x6e, 0x00, 0x00, 0x0c, 0x71, 0x00, 0x00, - 0xbc, 0x7b, 0x00, 0x00, 0xe4, 0x7f, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x88, 0x82, 0x00, 0x00, 0xa0, 0x84, 0x00, 0x00, 0x34, 0x86, 0x00, 0x00, - 0x94, 0x86, 0x00, 0x00, 0xf8, 0x8c, 0x00, 0x00, 0x08, 0x8e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x78, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, - 0xd0, 0x02, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x28, 0x05, 0x00, 0x00, - 0xa0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x03, 0x00, - 0x00, 0x01, 0x02, 0x00, 0x08, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00, - 0x20, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0xf0, 0x05, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, - 0xe0, 0x06, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xd0, 0x07, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, - 0xc0, 0x08, 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0xb0, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x50, 0x0a, 0x00, 0x00, - 0xa0, 0x0a, 0x00, 0x00, 0xf0, 0x0a, 0x00, 0x00, 0x40, 0x0b, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00, 0xe0, 0x0b, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, - 0x80, 0x0c, 0x00, 0x00, 0xd0, 0x0c, 0x00, 0x00, 0x20, 0x0d, 0x00, 0x00, 0x70, 0x0d, 0x00, 0x00, 0xc0, 0x0d, 0x00, 0x00, 0x10, 0x0e, 0x00, 0x00, - 0x60, 0x0e, 0x00, 0x00, 0xb0, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x50, 0x0f, 0x00, 0x00, 0xa0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, - 0x40, 0x10, 0x00, 0x00, 0x90, 0x10, 0x00, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x30, 0x11, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x00, - 0x20, 0x12, 0x00, 0x00, 0x70, 0x12, 0x00, 0x00, 0xc0, 0x12, 0x00, 0x00, 0x10, 0x13, 0x00, 0x00, 0x60, 0x13, 0x00, 0x00, 0xb0, 0x13, 0x00, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x50, 0x14, 0x00, 0x00, 0xa0, 0x14, 0x00, 0x00, 0xf0, 0x14, 0x00, 0x00, 0x40, 0x15, 0x00, 0x00, 0x90, 0x15, 0x00, 0x00, - 0xe0, 0x15, 0x00, 0x00, 0x30, 0x16, 0x00, 0x00, 0x80, 0x16, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x20, 0x17, 0x00, 0x00, 0x70, 0x17, 0x00, 0x00, - 0xc0, 0x17, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x60, 0x18, 0x00, 0x00, 0xb0, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x50, 0x19, 0x00, 0x00, - 0xa0, 0x19, 0x00, 0x00, 0xf0, 0x19, 0x00, 0x00, 0x40, 0x1a, 0x00, 0x00, 0x90, 0x1a, 0x00, 0x00, 0xe0, 0x1a, 0x00, 0x00, 0x30, 0x1b, 0x00, 0x00, - 0x80, 0x1b, 0x00, 0x00, 0xd0, 0x1b, 0x00, 0x00, 0x20, 0x1c, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x10, 0x1d, 0x00, 0x00, - 0x60, 0x1d, 0x00, 0x00, 0xb0, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x50, 0x1e, 0x00, 0x00, 0xa0, 0x1e, 0x00, 0x00, 0xf0, 0x1e, 0x00, 0x00, - 0x40, 0x1f, 0x00, 0x00, 0x90, 0x1f, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x30, 0x20, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0xd0, 0x20, 0x00, 0x00, - 0x20, 0x21, 0x00, 0x00, 0x70, 0x21, 0x00, 0x00, 0xc0, 0x21, 0x00, 0x00, 0x10, 0x22, 0x00, 0x00, 0x60, 0x22, 0x00, 0x00, 0xb0, 0x22, 0x00, 0x00, - 0x00, 0x23, 0x00, 0x00, 0x50, 0x23, 0x00, 0x00, 0xa0, 0x23, 0x00, 0x00, 0xf0, 0x23, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, 0x90, 0x24, 0x00, 0x00, - 0xe0, 0x24, 0x00, 0x00, 0x30, 0x25, 0x00, 0x00, 0x80, 0x25, 0x00, 0x00, 0xd0, 0x25, 0x00, 0x00, 0x20, 0x26, 0x00, 0x00, 0x70, 0x26, 0x00, 0x00, - 0xc0, 0x26, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x60, 0x27, 0x00, 0x00, 0xb0, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x50, 0x28, 0x00, 0x00, - 0xa0, 0x28, 0x00, 0x00, 0xf0, 0x28, 0x00, 0x00, 0x40, 0x29, 0x00, 0x00, 0x90, 0x29, 0x00, 0x00, 0xe0, 0x29, 0x00, 0x00, 0x30, 0x2a, 0x00, 0x00, - 0x80, 0x2a, 0x00, 0x00, 0xd0, 0x2a, 0x00, 0x00, 0x20, 0x2b, 0x00, 0x00, 0x70, 0x2b, 0x00, 0x00, 0xc0, 0x2b, 0x00, 0x00, 0x10, 0x2c, 0x00, 0x00, - 0x60, 0x2c, 0x00, 0x00, 0xb0, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x50, 0x2d, 0x00, 0x00, 0xa0, 0x2d, 0x00, 0x00, 0xf0, 0x2d, 0x00, 0x00, - 0x40, 0x2e, 0x00, 0x00, 0x90, 0x2e, 0x00, 0x00, 0xe0, 0x2e, 0x00, 0x00, 0x30, 0x2f, 0x00, 0x00, 0x80, 0x2f, 0x00, 0x00, 0xd0, 0x2f, 0x00, 0x00, - 0x20, 0x30, 0x00, 0x00, 0x70, 0x30, 0x00, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x10, 0x31, 0x00, 0x00, 0x60, 0x31, 0x00, 0x00, 0xb0, 0x31, 0x00, 0x00, - 0x00, 0x32, 0x00, 0x00, 0x50, 0x32, 0x00, 0x00, 0xa0, 0x32, 0x00, 0x00, 0xf0, 0x32, 0x00, 0x00, 0x40, 0x33, 0x00, 0x00, 0x90, 0x33, 0x00, 0x00, - 0xe0, 0x33, 0x00, 0x00, 0x30, 0x34, 0x00, 0x00, 0x80, 0x34, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x20, 0x35, 0x00, 0x00, 0x70, 0x35, 0x00, 0x00, - 0xc0, 0x35, 0x00, 0x00, 0x10, 0x36, 0x00, 0x00, 0x60, 0x36, 0x00, 0x00, 0xb0, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x50, 0x37, 0x00, 0x00, - 0xa0, 0x37, 0x00, 0x00, 0xf0, 0x37, 0x00, 0x00, 0x40, 0x38, 0x00, 0x00, 0x90, 0x38, 0x00, 0x00, 0xe0, 0x38, 0x00, 0x00, 0x30, 0x39, 0x00, 0x00, - 0x80, 0x39, 0x00, 0x00, 0xd0, 0x39, 0x00, 0x00, 0x20, 0x3a, 0x00, 0x00, 0x70, 0x3a, 0x00, 0x00, 0xc0, 0x3a, 0x00, 0x00, 0x10, 0x3b, 0x00, 0x00, - 0x60, 0x3b, 0x00, 0x00, 0xb0, 0x3b, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x50, 0x3c, 0x00, 0x00, 0xa0, 0x3c, 0x00, 0x00, 0xf0, 0x3c, 0x00, 0x00, - 0x40, 0x3d, 0x00, 0x00, 0x90, 0x3d, 0x00, 0x00, 0xe0, 0x3d, 0x00, 0x00, 0x30, 0x3e, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0xd0, 0x3e, 0x00, 0x00, - 0x20, 0x3f, 0x00, 0x00, 0x70, 0x3f, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x60, 0x40, 0x00, 0x00, 0xb0, 0x40, 0x00, 0x00, - 0x00, 0x41, 0x00, 0x00, 0x50, 0x41, 0x00, 0x00, 0xa0, 0x41, 0x00, 0x00, 0xf0, 0x41, 0x00, 0x00, 0x40, 0x42, 0x00, 0x00, 0x90, 0x42, 0x00, 0x00, - 0xe0, 0x42, 0x00, 0x00, 0x30, 0x43, 0x00, 0x00, 0x80, 0x43, 0x00, 0x00, 0xd0, 0x43, 0x00, 0x00, 0x20, 0x44, 0x00, 0x00, 0x70, 0x44, 0x00, 0x00, - 0xc0, 0x44, 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x60, 0x45, 0x00, 0x00, 0xb0, 0x45, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x50, 0x46, 0x00, 0x00, - 0xa0, 0x46, 0x00, 0x00, 0xf0, 0x46, 0x00, 0x00, 0x40, 0x47, 0x00, 0x00, 0x90, 0x47, 0x00, 0x00, 0xe0, 0x47, 0x00, 0x00, 0x30, 0x48, 0x00, 0x00, - 0x80, 0x48, 0x00, 0x00, 0xd0, 0x48, 0x00, 0x00, 0x20, 0x49, 0x00, 0x00, 0x70, 0x49, 0x00, 0x00, 0xc0, 0x49, 0x00, 0x00, 0x10, 0x4a, 0x00, 0x00, - 0x60, 0x4a, 0x00, 0x00, 0xb0, 0x4a, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x50, 0x4b, 0x00, 0x00, 0xa0, 0x4b, 0x00, 0x00, 0xf0, 0x4b, 0x00, 0x00, - 0x40, 0x4c, 0x00, 0x00, 0x90, 0x4c, 0x00, 0x00, 0xe0, 0x4c, 0x00, 0x00, 0x30, 0x4d, 0x00, 0x00, 0x80, 0x4d, 0x00, 0x00, 0xd0, 0x4d, 0x00, 0x00, - 0x20, 0x4e, 0x00, 0x00, 0x70, 0x4e, 0x00, 0x00, 0xc0, 0x4e, 0x00, 0x00, 0x10, 0x4f, 0x00, 0x00, 0x60, 0x4f, 0x00, 0x00, 0xb0, 0x4f, 0x00, 0x00, - 0x00, 0x50, 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, 0xa0, 0x50, 0x00, 0x00, 0xf0, 0x50, 0x00, 0x00, 0x40, 0x51, 0x00, 0x00, 0x90, 0x51, 0x00, 0x00, - 0xe0, 0x51, 0x00, 0x00, 0x30, 0x52, 0x00, 0x00, 0x80, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, - 0xb0, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, - 0xc0, 0x02, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0xc8, 0x03, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, - 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, - 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, - 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, - 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, - 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, - 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, - 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, - 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, - 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, - 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, - 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, - 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, - 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, - 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, - 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, - 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, - 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, - 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, - 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, - 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, - 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, - 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, - 0x02, 0x01, 0x03, 0x02, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x28, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, - 0xe0, 0x01, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, - 0xd0, 0x02, 0x00, 0x00, 0xf8, 0x02, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00, - 0xc0, 0x03, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x88, 0x04, 0x00, 0x00, - 0xb0, 0x04, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x28, 0x05, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x78, 0x05, 0x00, 0x00, - 0xa0, 0x05, 0x00, 0x00, 0xc8, 0x05, 0x00, 0x00, 0xf0, 0x05, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x68, 0x06, 0x00, 0x00, - 0x90, 0x06, 0x00, 0x00, 0xb8, 0x06, 0x00, 0x00, 0xe0, 0x06, 0x00, 0x00, 0x08, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, 0x58, 0x07, 0x00, 0x00, - 0x80, 0x07, 0x00, 0x00, 0xa8, 0x07, 0x00, 0x00, 0xd0, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x48, 0x08, 0x00, 0x00, - 0x70, 0x08, 0x00, 0x00, 0x98, 0x08, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0xe8, 0x08, 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x38, 0x09, 0x00, 0x00, - 0x60, 0x09, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0xb0, 0x09, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x28, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, - 0xe0, 0x01, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, - 0xd0, 0x02, 0x00, 0x00, 0xf8, 0x02, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00, - 0xc0, 0x03, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, - 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, - 0xb8, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, - 0x30, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00, 0xf8, 0x02, 0x00, 0x00, - 0x20, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x88, 0x04, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x28, 0x05, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x78, 0x05, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0xc8, 0x05, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x28, 0x28, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, - 0x58, 0x58, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x68, 0x68, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x90, 0x90, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, - 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, - 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, - 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, - 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, - 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, - 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, - 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, - 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, - 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, - 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, - 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, - 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, - 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, - 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, - 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, - 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, - 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, - 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, - 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, - 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, - 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, - 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, - 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, - 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, - 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, - 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, - 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, - 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, - 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, - 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, - 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, - 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, - 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, - 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, - 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, - 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, - 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, - 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, - 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, - 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, - 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, - 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, - 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, - 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, - 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, - 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, - 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, - 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, - 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, - 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, - 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, - 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, - 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, - 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, - 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, - 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, - 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, - 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, - 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, - 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, - 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, - 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, - 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, - 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, - 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, - 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, - 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, - 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, - 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, - 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, - 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, - 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, - 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, - 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, - 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, - 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, - 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, - 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, - 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, - 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, - 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, - 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, - 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, - 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, - 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, - 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, - 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, - 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, - 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, - 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, - 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, - 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, - 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, - 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, - 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, - 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, - 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, - 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, - 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, - 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, - 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, - 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, - 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, - 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, - 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, - 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, - 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, - 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, - 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, - 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, - 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, - 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, - 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, - 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, - 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, - 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, - 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, - 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, - 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, - 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, - 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, - 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, - 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, - 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, - 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, - 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, - 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, - 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, - 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, - 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, - 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, - 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, - 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, - 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, - 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, - 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, - 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, - 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, - 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, - 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, - 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, - 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, - 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, - 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, - 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, - 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, - 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, - 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, - 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, - 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, - 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, - 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, - 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, - 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, - 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, - 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, - 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, - 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, - 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, - 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, - 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, - 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, - 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, - 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, - 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, - 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, - 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, - 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, - 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, - 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, - 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, - 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, - 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, - 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, - 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, - 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, - 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, - 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, - 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, - 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, - 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, - 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, - 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, - 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, - 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, - 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, - 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, - 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, - 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, - 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, - 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, - 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, - 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, - 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, - 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, - 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, - 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, - 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, - 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, - 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, - 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, - 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, - 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, - 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, - 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, - 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, - 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, - 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, - 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, - 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, - 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, - 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, - 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, - 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, - 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, - 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, - 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, - 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, - 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, - 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, - 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, - 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, - 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, - 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, - 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, - 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, - 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, - 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, - 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, - 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, - 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, - 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, - 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, - 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, - 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, - 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, - 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, - 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, - 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, - 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, - 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, - 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, - 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, - 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, - 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, - 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, - 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, - 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, - 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, - 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, - 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, - 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, - 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, - 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, - 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, - 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, - 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, - 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, - 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, - 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, - 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, - 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, - 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, - 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, - 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, - 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, - 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, - 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, - 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, - 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, - 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, - 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, - 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, - 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, - 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, - 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, - 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, - 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, - 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, - 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, - 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, - 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, - 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, - 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, - 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, - 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, - 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, - 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, - 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, - 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, - 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, - 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, - 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, - 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, - 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, - 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, - 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, - 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, - 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, - 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, - 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, - 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, - 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, - 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, - 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, - 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, - 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, - 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, - 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, - 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, - 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, - 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, - 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, - 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, - 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, - 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, - 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, - 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, - 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, - 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, - 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, - 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, - 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, - 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, - 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, - 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, - 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, - 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, - 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, - 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, - 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, - 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, - 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, - 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, - 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, - 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, - 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, - 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, - 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, - 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, - 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, - 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, - 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, - 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, - 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, - 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, - 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, - 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, - 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, - 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, - 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, - 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, - 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, - 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, - 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, - 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, - 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, - 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, - 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, - 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, - 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, - 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, - 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, - 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, - 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, - 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, - 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, - 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, - 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, - 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, - 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, - 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, - 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, - 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, - 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, - 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, - 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, - 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, - 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, - 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, - 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, - 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, - 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, - 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, - 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, - 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, - 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, - 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, - 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, - 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, - 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, - 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, - 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, - 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, - 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, - 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, - 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, - 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, - 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, - 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, - 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, - 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, - 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, - 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, - 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, - 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, - 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, - 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, - 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, - 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, - 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, - 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, - 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, - 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, - 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, - 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, - 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, - 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, - 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, - 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, - 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, - 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, - 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, - 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, - 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, - 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, - 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, - 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, - 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, - 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, - 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, - 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, - 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, - 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, - 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, - 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, - 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, - 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, - 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, - 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, - 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, - 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, - 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, - 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, - 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, - 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, - 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, - 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, - 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, - 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, - 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, - 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, - 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, - 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, - 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, - 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, - 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, - 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, - 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, - 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, - 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, - 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, - 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, - 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, - 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, - 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, - 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, - 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, - 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, - 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, - 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, - 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, - 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, - 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, - 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, - 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, - 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, - 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, - 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, - 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, - 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, - 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, - 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, - 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, - 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, - 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, - 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, - 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, - 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, - 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, - 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, - 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, - 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, - 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, - 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, - 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, - 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, - 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, - 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, - 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, - 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, - 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, - 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, - 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, - 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, - 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, - 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, - 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, - 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, - 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, - 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, - 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, - 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, - 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, - 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, - 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, - 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, - 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, - 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, - 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, - 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, - 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, - 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, - 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, - 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, - 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, - 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, - 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, - 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, - 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, - 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, - 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, - 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, - 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, - 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, - 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, - 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, - 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, - 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, - 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, - 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, - 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, - 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, - 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, - 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, - 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, - 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, - 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, - 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, - 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, - 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, - 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, - 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, - 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, - 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, - 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, - 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, - 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, - 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, - 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, - 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, - 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, - 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, - 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, - 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, - 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, - 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, - 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, - 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, - 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, - 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, - 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, - 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, - 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +const unsigned char MII_DATA[] = { + 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x1e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, + 0x43, 0x00, 0x46, 0x00, 0x4c, 0x00, 0x5f, 0x00, 0x52, 0x00, 0x65, 0x00, + 0x73, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x09, 0x05, 0x54, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x94, 0x04, 0x00, 0x00, 0x6c, 0x0a, 0x00, 0x00, 0x94, 0x0e, 0x00, 0x00, + 0xd4, 0x0e, 0x00, 0x00, 0x7c, 0x65, 0x00, 0x00, 0xd4, 0x69, 0x00, 0x00, + 0xa4, 0x6e, 0x00, 0x00, 0xf4, 0x6e, 0x00, 0x00, 0x0c, 0x71, 0x00, 0x00, + 0xbc, 0x7b, 0x00, 0x00, 0xe4, 0x7f, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, + 0x88, 0x82, 0x00, 0x00, 0xa0, 0x84, 0x00, 0x00, 0x34, 0x86, 0x00, 0x00, + 0x94, 0x86, 0x00, 0x00, 0xf8, 0x8c, 0x00, 0x00, 0x08, 0x8e, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x68, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, + 0xd0, 0x02, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, + 0x38, 0x04, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x28, 0x05, 0x00, 0x00, + 0xa0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x19, 0x00, 0x32, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x08, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, + 0x30, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00, + 0x20, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, + 0x10, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, + 0xf0, 0x05, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, + 0xe0, 0x06, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, + 0xd0, 0x07, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, + 0xc0, 0x08, 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, + 0xb0, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x50, 0x0a, 0x00, 0x00, + 0xa0, 0x0a, 0x00, 0x00, 0xf0, 0x0a, 0x00, 0x00, 0x40, 0x0b, 0x00, 0x00, + 0x90, 0x0b, 0x00, 0x00, 0xe0, 0x0b, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, + 0x80, 0x0c, 0x00, 0x00, 0xd0, 0x0c, 0x00, 0x00, 0x20, 0x0d, 0x00, 0x00, + 0x70, 0x0d, 0x00, 0x00, 0xc0, 0x0d, 0x00, 0x00, 0x10, 0x0e, 0x00, 0x00, + 0x60, 0x0e, 0x00, 0x00, 0xb0, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x50, 0x0f, 0x00, 0x00, 0xa0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, + 0x40, 0x10, 0x00, 0x00, 0x90, 0x10, 0x00, 0x00, 0xe0, 0x10, 0x00, 0x00, + 0x30, 0x11, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x00, + 0x20, 0x12, 0x00, 0x00, 0x70, 0x12, 0x00, 0x00, 0xc0, 0x12, 0x00, 0x00, + 0x10, 0x13, 0x00, 0x00, 0x60, 0x13, 0x00, 0x00, 0xb0, 0x13, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x50, 0x14, 0x00, 0x00, 0xa0, 0x14, 0x00, 0x00, + 0xf0, 0x14, 0x00, 0x00, 0x40, 0x15, 0x00, 0x00, 0x90, 0x15, 0x00, 0x00, + 0xe0, 0x15, 0x00, 0x00, 0x30, 0x16, 0x00, 0x00, 0x80, 0x16, 0x00, 0x00, + 0xd0, 0x16, 0x00, 0x00, 0x20, 0x17, 0x00, 0x00, 0x70, 0x17, 0x00, 0x00, + 0xc0, 0x17, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x60, 0x18, 0x00, 0x00, + 0xb0, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x50, 0x19, 0x00, 0x00, + 0xa0, 0x19, 0x00, 0x00, 0xf0, 0x19, 0x00, 0x00, 0x40, 0x1a, 0x00, 0x00, + 0x90, 0x1a, 0x00, 0x00, 0xe0, 0x1a, 0x00, 0x00, 0x30, 0x1b, 0x00, 0x00, + 0x80, 0x1b, 0x00, 0x00, 0xd0, 0x1b, 0x00, 0x00, 0x20, 0x1c, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x10, 0x1d, 0x00, 0x00, + 0x60, 0x1d, 0x00, 0x00, 0xb0, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x50, 0x1e, 0x00, 0x00, 0xa0, 0x1e, 0x00, 0x00, 0xf0, 0x1e, 0x00, 0x00, + 0x40, 0x1f, 0x00, 0x00, 0x90, 0x1f, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, + 0x30, 0x20, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0xd0, 0x20, 0x00, 0x00, + 0x20, 0x21, 0x00, 0x00, 0x70, 0x21, 0x00, 0x00, 0xc0, 0x21, 0x00, 0x00, + 0x10, 0x22, 0x00, 0x00, 0x60, 0x22, 0x00, 0x00, 0xb0, 0x22, 0x00, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x50, 0x23, 0x00, 0x00, 0xa0, 0x23, 0x00, 0x00, + 0xf0, 0x23, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, 0x90, 0x24, 0x00, 0x00, + 0xe0, 0x24, 0x00, 0x00, 0x30, 0x25, 0x00, 0x00, 0x80, 0x25, 0x00, 0x00, + 0xd0, 0x25, 0x00, 0x00, 0x20, 0x26, 0x00, 0x00, 0x70, 0x26, 0x00, 0x00, + 0xc0, 0x26, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x60, 0x27, 0x00, 0x00, + 0xb0, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x50, 0x28, 0x00, 0x00, + 0xa0, 0x28, 0x00, 0x00, 0xf0, 0x28, 0x00, 0x00, 0x40, 0x29, 0x00, 0x00, + 0x90, 0x29, 0x00, 0x00, 0xe0, 0x29, 0x00, 0x00, 0x30, 0x2a, 0x00, 0x00, + 0x80, 0x2a, 0x00, 0x00, 0xd0, 0x2a, 0x00, 0x00, 0x20, 0x2b, 0x00, 0x00, + 0x70, 0x2b, 0x00, 0x00, 0xc0, 0x2b, 0x00, 0x00, 0x10, 0x2c, 0x00, 0x00, + 0x60, 0x2c, 0x00, 0x00, 0xb0, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, + 0x50, 0x2d, 0x00, 0x00, 0xa0, 0x2d, 0x00, 0x00, 0xf0, 0x2d, 0x00, 0x00, + 0x40, 0x2e, 0x00, 0x00, 0x90, 0x2e, 0x00, 0x00, 0xe0, 0x2e, 0x00, 0x00, + 0x30, 0x2f, 0x00, 0x00, 0x80, 0x2f, 0x00, 0x00, 0xd0, 0x2f, 0x00, 0x00, + 0x20, 0x30, 0x00, 0x00, 0x70, 0x30, 0x00, 0x00, 0xc0, 0x30, 0x00, 0x00, + 0x10, 0x31, 0x00, 0x00, 0x60, 0x31, 0x00, 0x00, 0xb0, 0x31, 0x00, 0x00, + 0x00, 0x32, 0x00, 0x00, 0x50, 0x32, 0x00, 0x00, 0xa0, 0x32, 0x00, 0x00, + 0xf0, 0x32, 0x00, 0x00, 0x40, 0x33, 0x00, 0x00, 0x90, 0x33, 0x00, 0x00, + 0xe0, 0x33, 0x00, 0x00, 0x30, 0x34, 0x00, 0x00, 0x80, 0x34, 0x00, 0x00, + 0xd0, 0x34, 0x00, 0x00, 0x20, 0x35, 0x00, 0x00, 0x70, 0x35, 0x00, 0x00, + 0xc0, 0x35, 0x00, 0x00, 0x10, 0x36, 0x00, 0x00, 0x60, 0x36, 0x00, 0x00, + 0xb0, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x50, 0x37, 0x00, 0x00, + 0xa0, 0x37, 0x00, 0x00, 0xf0, 0x37, 0x00, 0x00, 0x40, 0x38, 0x00, 0x00, + 0x90, 0x38, 0x00, 0x00, 0xe0, 0x38, 0x00, 0x00, 0x30, 0x39, 0x00, 0x00, + 0x80, 0x39, 0x00, 0x00, 0xd0, 0x39, 0x00, 0x00, 0x20, 0x3a, 0x00, 0x00, + 0x70, 0x3a, 0x00, 0x00, 0xc0, 0x3a, 0x00, 0x00, 0x10, 0x3b, 0x00, 0x00, + 0x60, 0x3b, 0x00, 0x00, 0xb0, 0x3b, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, + 0x50, 0x3c, 0x00, 0x00, 0xa0, 0x3c, 0x00, 0x00, 0xf0, 0x3c, 0x00, 0x00, + 0x40, 0x3d, 0x00, 0x00, 0x90, 0x3d, 0x00, 0x00, 0xe0, 0x3d, 0x00, 0x00, + 0x30, 0x3e, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0xd0, 0x3e, 0x00, 0x00, + 0x20, 0x3f, 0x00, 0x00, 0x70, 0x3f, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, + 0x10, 0x40, 0x00, 0x00, 0x60, 0x40, 0x00, 0x00, 0xb0, 0x40, 0x00, 0x00, + 0x00, 0x41, 0x00, 0x00, 0x50, 0x41, 0x00, 0x00, 0xa0, 0x41, 0x00, 0x00, + 0xf0, 0x41, 0x00, 0x00, 0x40, 0x42, 0x00, 0x00, 0x90, 0x42, 0x00, 0x00, + 0xe0, 0x42, 0x00, 0x00, 0x30, 0x43, 0x00, 0x00, 0x80, 0x43, 0x00, 0x00, + 0xd0, 0x43, 0x00, 0x00, 0x20, 0x44, 0x00, 0x00, 0x70, 0x44, 0x00, 0x00, + 0xc0, 0x44, 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x60, 0x45, 0x00, 0x00, + 0xb0, 0x45, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x50, 0x46, 0x00, 0x00, + 0xa0, 0x46, 0x00, 0x00, 0xf0, 0x46, 0x00, 0x00, 0x40, 0x47, 0x00, 0x00, + 0x90, 0x47, 0x00, 0x00, 0xe0, 0x47, 0x00, 0x00, 0x30, 0x48, 0x00, 0x00, + 0x80, 0x48, 0x00, 0x00, 0xd0, 0x48, 0x00, 0x00, 0x20, 0x49, 0x00, 0x00, + 0x70, 0x49, 0x00, 0x00, 0xc0, 0x49, 0x00, 0x00, 0x10, 0x4a, 0x00, 0x00, + 0x60, 0x4a, 0x00, 0x00, 0xb0, 0x4a, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, + 0x50, 0x4b, 0x00, 0x00, 0xa0, 0x4b, 0x00, 0x00, 0xf0, 0x4b, 0x00, 0x00, + 0x40, 0x4c, 0x00, 0x00, 0x90, 0x4c, 0x00, 0x00, 0xe0, 0x4c, 0x00, 0x00, + 0x30, 0x4d, 0x00, 0x00, 0x80, 0x4d, 0x00, 0x00, 0xd0, 0x4d, 0x00, 0x00, + 0x20, 0x4e, 0x00, 0x00, 0x70, 0x4e, 0x00, 0x00, 0xc0, 0x4e, 0x00, 0x00, + 0x10, 0x4f, 0x00, 0x00, 0x60, 0x4f, 0x00, 0x00, 0xb0, 0x4f, 0x00, 0x00, + 0x00, 0x50, 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, 0xa0, 0x50, 0x00, 0x00, + 0xf0, 0x50, 0x00, 0x00, 0x40, 0x51, 0x00, 0x00, 0x90, 0x51, 0x00, 0x00, + 0xe0, 0x51, 0x00, 0x00, 0x30, 0x52, 0x00, 0x00, 0x80, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0xb0, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, + 0xb8, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, + 0xc0, 0x02, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, + 0xc8, 0x03, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, + 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, + 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, + 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, + 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, + 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, + 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, + 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1e, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, + 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x40, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, + 0xc0, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, + 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, + 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, + 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, + 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, + 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, + 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, + 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, + 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, + 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, + 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x20, 0x00, 0x00, + 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x19, + 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, + 0x04, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xe7, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, + 0x00, 0x20, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x32, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x19, 0x00, 0x32, 0x00, 0x15, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x02, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, + 0xe0, 0x01, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, + 0x58, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, + 0xd0, 0x02, 0x00, 0x00, 0xf8, 0x02, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, + 0x48, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00, + 0xc0, 0x03, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, + 0x38, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x88, 0x04, 0x00, 0x00, + 0xb0, 0x04, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, + 0x28, 0x05, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x78, 0x05, 0x00, 0x00, + 0xa0, 0x05, 0x00, 0x00, 0xc8, 0x05, 0x00, 0x00, 0xf0, 0x05, 0x00, 0x00, + 0x18, 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x68, 0x06, 0x00, 0x00, + 0x90, 0x06, 0x00, 0x00, 0xb8, 0x06, 0x00, 0x00, 0xe0, 0x06, 0x00, 0x00, + 0x08, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, 0x58, 0x07, 0x00, 0x00, + 0x80, 0x07, 0x00, 0x00, 0xa8, 0x07, 0x00, 0x00, 0xd0, 0x07, 0x00, 0x00, + 0xf8, 0x07, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x48, 0x08, 0x00, 0x00, + 0x70, 0x08, 0x00, 0x00, 0x98, 0x08, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, + 0xe8, 0x08, 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x38, 0x09, 0x00, 0x00, + 0x60, 0x09, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0xb0, 0x09, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, + 0xe0, 0x01, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, + 0x58, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, + 0xd0, 0x02, 0x00, 0x00, 0xf8, 0x02, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, + 0x48, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00, + 0xc0, 0x03, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, + 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, + 0xb8, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, + 0xe0, 0x01, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x18, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, + 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, + 0xb8, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, + 0x30, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, + 0xa8, 0x02, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00, 0xf8, 0x02, 0x00, 0x00, + 0x20, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, + 0x98, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, + 0x10, 0x04, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, + 0x88, 0x04, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x28, 0x05, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, + 0x78, 0x05, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0xc8, 0x05, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0xa0, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x01, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, + 0x10, 0x10, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, + 0x28, 0x28, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, + 0x40, 0x40, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, + 0x58, 0x58, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x68, 0x68, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, + 0x88, 0x88, 0x00, 0x00, 0x90, 0x90, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 }; unsigned int MII_DATA_len = 73600; diff --git a/include/fs/romfs.hpp b/include/fs/romfs.hpp index 114b1c1e..20213761 100644 --- a/include/fs/romfs.hpp +++ b/include/fs/romfs.hpp @@ -18,12 +18,5 @@ namespace RomFS { std::vector> files; }; - // Result codes when dumping RomFS. These are used by the frontend to print appropriate error messages if RomFS dumping fails - enum class DumpingResult { - Success = 0, - InvalidFormat = 1, // ROM is a format that doesn't support RomFS, such as ELF - NoRomFS = 2 - }; - std::unique_ptr parseRomFSTree(uintptr_t romFS, u64 romFSSize); } // namespace RomFS \ No newline at end of file diff --git a/include/helpers.hpp b/include/helpers.hpp index a95931d4..afebc959 100644 --- a/include/helpers.hpp +++ b/include/helpers.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -82,20 +83,6 @@ namespace Helpers { return false; } - static constexpr bool isHydraCore() { -#ifdef PANDA3DS_HYDRA_CORE - return true; -#endif - return false; - } - - static constexpr bool isAndroid() { -#ifdef __ANDROID__ - return true; -#endif - return false; - } - static void debug_printf(const char* fmt, ...) { if constexpr (buildingInDebugMode()) { std::va_list args; @@ -161,6 +148,19 @@ namespace Helpers { return std::bit_cast(from); } #endif + + static std::vector split(const std::string& s, const char c) { + std::istringstream tmp(s); + std::vector result(1); + + while (std::getline(tmp, *result.rbegin(), c)) { + result.emplace_back(); + } + + // Remove temporary slot + result.pop_back(); + return result; + } }; // namespace Helpers // UDLs for memory size values diff --git a/include/http_server.hpp b/include/http_server.hpp index dc17a4b7..628ad057 100644 --- a/include/http_server.hpp +++ b/include/http_server.hpp @@ -19,7 +19,7 @@ class Emulator; namespace httplib { class Server; struct Response; -} // namespace httplib +} // Wrapper for httplib::Response that allows the HTTP server to wait for the response to be ready struct DeferredResponseWrapper { @@ -63,7 +63,7 @@ struct HttpServer { std::thread httpServerThread; std::queue> actionQueue; std::mutex actionQueueMutex; - std::unique_ptr currentStepAction{}; + std::unique_ptr currentStepAction {}; std::map keyMap; bool paused = false; diff --git a/include/hydra_icon.hpp b/include/hydra_icon.hpp deleted file mode 100644 index 6b0c2ac1..00000000 --- a/include/hydra_icon.hpp +++ /dev/null @@ -1,572 +0,0 @@ -/* -This file was autogenerated by the following Python script and post-processed via clang-format - -from PIL import Image -img = Image.open("her.png") -px = img.load() - -width = img.size[0] -height = img.size[1] - -print("#include \n") -print("constexpr const char* HYDRA_ICON_WIDTH = \"", width, "\";", sep= "") -print("constexpr const char* HYDRA_ICON_HEIGHT = \"", height, "\";", sep = "") - -print("") -print("static constexpr std::uint8_t HYDRA_ICON_DATA[] = {") - -for y in range(0, height): - for x in range(0, width): - pixel = px[x, y] - print(pixel[3], pixel[2], pixel[1], pixel[0], sep = ", ") - print(", ", end = "") - -print("};") -*/ - -#include - -constexpr const char* HYDRA_ICON_WIDTH = "61"; -constexpr const char* HYDRA_ICON_HEIGHT = "64"; - -static constexpr std::uint8_t HYDRA_ICON_DATA[] = { - 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, - 8, 4, 2, 255, 9, 5, 3, 255, 9, 5, 3, 255, 8, 4, 2, 255, 7, 3, 2, 255, 8, 4, 2, 255, 6, 2, 2, 255, 7, - 3, 3, 255, 7, 3, 2, 255, 7, 3, 3, 255, 7, 3, 3, 255, 8, 3, 3, 255, 8, 3, 3, 255, 10, 2, 3, 255, 10, 2, - 3, 255, 10, 2, 3, 255, 10, 2, 3, 255, 10, 4, 8, 255, 13, 7, 10, 255, 12, 6, 11, 255, 12, 5, 13, 255, 16, 7, 12, - 255, 13, 5, 10, 255, 11, 3, 7, 255, 13, 5, 9, 255, 12, 4, 7, 255, 9, 1, 5, 255, 11, 3, 6, 255, 10, 2, 5, 255, - 12, 3, 4, 255, 10, 2, 3, 255, 11, 3, 4, 255, 9, 4, 3, 255, 9, 4, 4, 255, 9, 4, 4, 255, 9, 4, 4, 255, 9, - 4, 4, 255, 11, 4, 3, 255, 11, 4, 3, 255, 13, 4, 3, 255, 14, 4, 4, 255, 15, 5, 7, 255, 14, 4, 6, 255, 14, 4, - 6, 255, 15, 5, 7, 255, 18, 7, 9, 255, 18, 10, 11, 255, 16, 8, 9, 255, 12, 7, 8, 255, 14, 5, 9, 255, 12, 4, 7, - 255, 13, 5, 9, 255, 10, 5, 6, 255, 10, 5, 6, 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, - 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, 8, 4, 2, 255, 6, 2, 1, 255, 6, 2, 1, 255, 8, 4, 2, 255, 8, - 4, 2, 255, 7, 3, 3, 255, 9, 3, 6, 255, 8, 2, 5, 255, 8, 3, 3, 255, 8, 3, 3, 255, 8, 3, 3, 255, 9, 4, - 4, 255, 9, 4, 4, 255, 10, 4, 7, 255, 10, 4, 7, 255, 10, 4, 7, 255, 10, 4, 7, 255, 11, 5, 9, 255, 14, 8, 14, - 255, 15, 8, 14, 255, 17, 10, 18, 255, 17, 10, 18, 255, 15, 7, 15, 255, 15, 7, 15, 255, 17, 9, 17, 255, 16, 10, 17, 255, - 14, 7, 14, 255, 12, 5, 11, 255, 14, 7, 13, 255, 11, 5, 10, 255, 9, 3, 7, 255, 9, 3, 6, 255, 9, 3, 5, 255, 7, - 4, 4, 255, 7, 4, 4, 255, 7, 4, 4, 255, 8, 4, 4, 255, 10, 3, 4, 255, 11, 4, 5, 255, 9, 3, 4, 255, 12, 6, - 7, 255, 15, 9, 12, 255, 23, 18, 21, 255, 28, 22, 25, 255, 29, 24, 27, 255, 37, 30, 34, 255, 33, 27, 30, 255, 28, 22, 25, - 255, 28, 22, 25, 255, 23, 17, 22, 255, 17, 11, 15, 255, 12, 7, 10, 255, 12, 7, 10, 255, 14, 7, 8, 255, 7, 3, 2, 255, - 8, 4, 2, 255, 10, 6, 4, 255, 9, 5, 3, 255, 10, 6, 4, 255, 10, 6, 4, 255, 10, 6, 4, 255, 10, 6, 4, 255, 9, - 5, 3, 255, 9, 5, 3, 255, 8, 4, 2, 255, 7, 3, 2, 255, 10, 5, 7, 255, 11, 5, 9, 255, 12, 7, 10, 255, 11, 6, - 8, 255, 11, 8, 11, 255, 10, 7, 10, 255, 10, 7, 10, 255, 11, 8, 11, 255, 11, 8, 11, 255, 10, 7, 10, 255, 9, 6, 9, - 255, 13, 9, 13, 255, 11, 7, 12, 255, 9, 4, 12, 255, 15, 9, 18, 255, 19, 13, 23, 255, 14, 9, 18, 255, 15, 10, 19, 255, - 13, 8, 16, 255, 17, 12, 20, 255, 18, 12, 22, 255, 17, 11, 21, 255, 12, 6, 16, 255, 15, 9, 19, 255, 13, 8, 16, 255, 12, - 8, 14, 255, 10, 6, 12, 255, 11, 7, 12, 255, 13, 8, 12, 255, 12, 6, 11, 255, 10, 4, 8, 255, 9, 2, 6, 255, 10, 5, - 8, 255, 8, 5, 8, 255, 15, 14, 16, 255, 35, 34, 37, 255, 43, 43, 46, 255, 46, 47, 49, 255, 45, 45, 48, 255, 45, 45, 48, - 255, 46, 45, 50, 255, 39, 37, 42, 255, 39, 36, 41, 255, 38, 34, 39, 255, 30, 25, 33, 255, 25, 21, 26, 255, 17, 13, 19, 255, - 13, 9, 12, 255, 14, 7, 8, 255, 13, 9, 7, 255, 22, 18, 16, 255, 16, 12, 10, 255, 13, 9, 7, 255, 10, 6, 4, 255, 10, - 6, 4, 255, 10, 6, 4, 255, 10, 6, 4, 255, 10, 6, 4, 255, 10, 5, 4, 255, 9, 4, 3, 255, 9, 5, 4, 255, 11, 6, - 9, 255, 14, 8, 13, 255, 16, 9, 15, 255, 14, 9, 13, 255, 13, 9, 12, 255, 14, 11, 14, 255, 13, 9, 13, 255, 15, 12, 16, - 255, 12, 10, 15, 255, 9, 8, 12, 255, 9, 8, 13, 255, 15, 14, 18, 255, 14, 10, 17, 255, 11, 6, 14, 255, 14, 9, 18, 255, - 16, 11, 21, 255, 13, 10, 21, 255, 18, 14, 26, 255, 10, 6, 18, 255, 17, 13, 25, 255, 17, 12, 25, 255, 19, 14, 28, 255, 15, - 11, 24, 255, 19, 15, 28, 255, 15, 13, 23, 255, 17, 14, 24, 255, 16, 13, 22, 255, 17, 12, 21, 255, 16, 11, 20, 255, 18, 13, - 22, 255, 16, 11, 20, 255, 16, 12, 19, 255, 22, 20, 25, 255, 38, 38, 42, 255, 52, 55, 59, 255, 60, 64, 68, 255, 61, 65, 69, - 255, 65, 69, 73, 255, 63, 68, 72, 255, 59, 63, 67, 255, 53, 57, 63, 255, 51, 52, 59, 255, 45, 45, 52, 255, 38, 36, 43, 255, - 33, 31, 38, 255, 29, 26, 34, 255, 26, 22, 27, 255, 18, 14, 18, 255, 16, 7, 9, 255, 11, 4, 3, 255, 13, 5, 4, 255, 11, - 4, 3, 255, 9, 5, 4, 255, 11, 3, 5, 255, 11, 3, 5, 255, 12, 5, 6, 255, 11, 3, 5, 255, 13, 3, 6, 255, 13, 5, - 8, 255, 13, 7, 12, 255, 11, 7, 12, 255, 12, 8, 15, 255, 14, 10, 17, 255, 15, 11, 18, 255, 14, 11, 18, 255, 12, 10, 15, - 255, 14, 12, 17, 255, 15, 14, 21, 255, 17, 16, 24, 255, 10, 10, 18, 255, 12, 12, 20, 255, 8, 7, 15, 255, 12, 11, 18, 255, - 12, 10, 17, 255, 9, 7, 15, 255, 13, 12, 20, 255, 16, 16, 26, 255, 17, 16, 30, 255, 19, 17, 32, 255, 19, 18, 33, 255, 24, - 22, 37, 255, 25, 23, 38, 255, 23, 21, 37, 255, 29, 27, 43, 255, 25, 23, 39, 255, 23, 21, 36, 255, 22, 18, 34, 255, 21, 18, - 32, 255, 23, 20, 33, 255, 23, 19, 32, 255, 22, 19, 32, 255, 28, 25, 38, 255, 33, 31, 43, 255, 57, 57, 65, 255, 67, 68, 75, - 255, 77, 80, 84, 255, 73, 79, 82, 255, 80, 86, 89, 255, 80, 85, 89, 255, 74, 82, 85, 255, 65, 73, 77, 255, 61, 66, 72, 255, - 54, 58, 64, 255, 44, 48, 55, 255, 41, 44, 51, 255, 34, 34, 41, 255, 29, 28, 35, 255, 26, 25, 30, 255, 24, 22, 25, 255, 17, - 10, 14, 255, 10, 2, 4, 255, 13, 3, 4, 255, 10, 2, 3, 255, 8, 3, 3, 255, 11, 3, 6, 255, 11, 3, 6, 255, 10, 2, - 5, 255, 11, 3, 6, 255, 13, 5, 11, 255, 13, 6, 13, 255, 13, 8, 16, 255, 11, 8, 17, 255, 13, 12, 21, 255, 13, 12, 21, - 255, 15, 14, 24, 255, 20, 19, 28, 255, 16, 16, 24, 255, 20, 19, 29, 255, 15, 16, 27, 255, 15, 16, 27, 255, 20, 21, 32, 255, - 17, 18, 29, 255, 14, 15, 26, 255, 12, 12, 23, 255, 14, 12, 23, 255, 15, 13, 24, 255, 15, 15, 27, 255, 21, 23, 36, 255, 24, - 24, 42, 255, 28, 28, 46, 255, 26, 27, 45, 255, 31, 32, 50, 255, 34, 37, 52, 255, 32, 35, 50, 255, 33, 36, 52, 255, 30, 32, - 48, 255, 31, 31, 50, 255, 30, 29, 47, 255, 28, 27, 45, 255, 26, 26, 42, 255, 26, 26, 42, 255, 31, 30, 46, 255, 31, 30, 46, - 255, 52, 53, 68, 255, 71, 74, 83, 255, 79, 82, 90, 255, 86, 91, 97, 255, 85, 90, 96, 255, 85, 90, 94, 255, 78, 83, 87, 255, - 67, 74, 78, 255, 67, 73, 77, 255, 63, 67, 75, 255, 53, 56, 65, 255, 49, 53, 62, 255, 46, 48, 57, 255, 39, 39, 46, 255, 31, - 31, 38, 255, 30, 29, 33, 255, 24, 22, 25, 255, 17, 10, 14, 255, 13, 7, 8, 255, 11, 3, 4, 255, 11, 4, 5, 255, 8, 4, - 5, 255, 12, 6, 9, 255, 11, 5, 9, 255, 12, 6, 9, 255, 10, 5, 9, 255, 10, 6, 13, 255, 12, 9, 19, 255, 12, 10, 21, - 255, 13, 13, 24, 255, 16, 17, 28, 255, 19, 19, 31, 255, 21, 22, 33, 255, 27, 27, 39, 255, 26, 26, 38, 255, 20, 21, 34, 255, - 28, 29, 43, 255, 19, 21, 36, 255, 29, 31, 45, 255, 27, 29, 43, 255, 30, 31, 46, 255, 23, 24, 38, 255, 27, 27, 40, 255, 26, - 27, 41, 255, 35, 37, 52, 255, 34, 38, 54, 255, 33, 38, 55, 255, 33, 37, 55, 255, 32, 37, 54, 255, 31, 37, 54, 255, 36, 42, - 60, 255, 40, 47, 64, 255, 36, 43, 60, 255, 36, 43, 60, 255, 36, 41, 59, 255, 35, 39, 57, 255, 33, 37, 55, 255, 30, 34, 52, - 255, 31, 34, 52, 255, 35, 37, 55, 255, 36, 38, 55, 255, 49, 52, 69, 255, 66, 74, 80, 255, 83, 90, 96, 255, 82, 87, 93, 255, - 77, 81, 85, 255, 69, 70, 76, 255, 51, 51, 58, 255, 52, 55, 61, 255, 58, 61, 67, 255, 64, 66, 72, 255, 63, 66, 72, 255, 57, - 60, 66, 255, 48, 50, 56, 255, 45, 45, 52, 255, 36, 36, 43, 255, 30, 29, 34, 255, 21, 18, 21, 255, 14, 7, 10, 255, 28, 23, - 26, 255, 22, 13, 17, 255, 14, 8, 12, 255, 11, 7, 12, 255, 13, 9, 15, 255, 14, 10, 15, 255, 13, 9, 15, 255, 14, 10, 17, - 255, 10, 8, 19, 255, 10, 10, 23, 255, 14, 16, 29, 255, 18, 20, 35, 255, 23, 26, 40, 255, 20, 23, 37, 255, 21, 24, 39, 255, - 31, 35, 49, 255, 28, 31, 47, 255, 27, 30, 46, 255, 23, 27, 44, 255, 24, 29, 46, 255, 29, 34, 51, 255, 32, 36, 54, 255, 34, - 38, 56, 255, 31, 35, 52, 255, 39, 43, 58, 255, 35, 38, 55, 255, 40, 45, 63, 255, 36, 43, 62, 255, 35, 44, 62, 255, 28, 36, - 55, 255, 29, 38, 57, 255, 33, 42, 60, 255, 41, 50, 69, 255, 43, 52, 71, 255, 37, 47, 66, 255, 44, 53, 72, 255, 41, 49, 69, - 255, 41, 48, 68, 255, 40, 47, 66, 255, 31, 39, 58, 255, 37, 44, 63, 255, 31, 38, 57, 255, 36, 42, 61, 255, 41, 48, 65, 255, - 51, 61, 68, 255, 67, 76, 82, 255, 63, 69, 74, 255, 58, 61, 65, 255, 53, 54, 58, 255, 45, 46, 51, 255, 57, 57, 62, 255, 61, - 65, 69, 255, 67, 69, 76, 255, 66, 68, 74, 255, 60, 62, 69, 255, 57, 59, 65, 255, 54, 54, 60, 255, 37, 37, 44, 255, 29, 27, - 32, 255, 19, 17, 20, 255, 11, 4, 7, 255, 40, 34, 39, 255, 34, 27, 33, 255, 29, 24, 31, 255, 19, 14, 22, 255, 18, 13, 21, - 255, 20, 16, 24, 255, 16, 13, 22, 255, 18, 15, 26, 255, 15, 13, 26, 255, 15, 15, 28, 255, 23, 25, 38, 255, 25, 30, 44, 255, - 29, 32, 50, 255, 28, 30, 50, 255, 23, 28, 47, 255, 30, 36, 54, 255, 34, 41, 59, 255, 39, 45, 64, 255, 25, 32, 51, 255, 28, - 37, 56, 255, 25, 33, 53, 255, 38, 47, 66, 255, 37, 46, 65, 255, 36, 45, 62, 255, 37, 45, 63, 255, 37, 45, 64, 255, 39, 48, - 68, 255, 37, 49, 70, 255, 30, 41, 62, 255, 28, 39, 60, 255, 29, 41, 62, 255, 38, 50, 71, 255, 39, 51, 72, 255, 41, 53, 74, - 255, 40, 51, 71, 255, 41, 53, 72, 255, 44, 55, 77, 255, 44, 54, 76, 255, 45, 55, 76, 255, 42, 52, 73, 255, 40, 49, 70, 255, - 40, 49, 70, 255, 34, 43, 64, 255, 39, 48, 67, 255, 43, 55, 65, 255, 53, 63, 72, 255, 59, 65, 74, 255, 46, 49, 57, 255, 42, - 42, 49, 255, 46, 46, 52, 255, 49, 53, 57, 255, 56, 59, 63, 255, 67, 66, 73, 255, 69, 72, 78, 255, 67, 69, 76, 255, 59, 61, - 68, 255, 47, 50, 54, 255, 39, 39, 44, 255, 35, 32, 37, 255, 23, 19, 22, 255, 16, 9, 13, 255, 36, 32, 37, 255, 38, 34, 39, - 255, 34, 31, 39, 255, 27, 23, 33, 255, 19, 16, 25, 255, 20, 17, 29, 255, 19, 17, 30, 255, 22, 21, 35, 255, 23, 22, 38, 255, - 21, 21, 37, 255, 24, 28, 43, 255, 30, 35, 51, 255, 28, 33, 52, 255, 31, 36, 56, 255, 43, 50, 69, 255, 37, 45, 64, 255, 36, - 47, 66, 255, 40, 51, 69, 255, 32, 45, 64, 255, 35, 48, 66, 255, 32, 45, 63, 255, 40, 53, 71, 255, 37, 50, 68, 255, 42, 55, - 73, 255, 47, 60, 79, 255, 41, 54, 74, 255, 40, 54, 76, 255, 36, 52, 75, 255, 37, 51, 74, 255, 33, 47, 71, 255, 39, 52, 76, - 255, 45, 60, 83, 255, 48, 64, 86, 255, 42, 57, 79, 255, 47, 60, 81, 255, 43, 57, 78, 255, 48, 58, 82, 255, 47, 58, 81, 255, - 55, 66, 88, 255, 54, 65, 86, 255, 48, 59, 80, 255, 51, 62, 83, 255, 42, 53, 74, 255, 49, 61, 81, 255, 46, 56, 73, 255, 45, - 54, 68, 255, 50, 56, 70, 255, 50, 52, 64, 255, 51, 52, 60, 255, 45, 48, 54, 255, 45, 48, 53, 255, 51, 54, 58, 255, 59, 62, - 68, 255, 67, 70, 76, 255, 68, 70, 77, 255, 58, 62, 68, 255, 50, 54, 58, 255, 39, 42, 46, 255, 37, 35, 40, 255, 31, 27, 30, - 255, 17, 10, 14, 255, 38, 37, 39, 255, 34, 32, 37, 255, 31, 30, 38, 255, 27, 26, 36, 255, 20, 18, 29, 255, 21, 19, 31, 255, - 25, 23, 36, 255, 26, 24, 39, 255, 28, 29, 45, 255, 30, 33, 48, 255, 26, 32, 47, 255, 28, 36, 52, 255, 33, 40, 59, 255, 27, - 34, 53, 255, 34, 44, 63, 255, 36, 46, 65, 255, 47, 59, 78, 255, 42, 54, 72, 255, 45, 59, 77, 255, 45, 59, 77, 255, 50, 62, - 80, 255, 45, 57, 75, 255, 42, 54, 72, 255, 43, 55, 74, 255, 51, 64, 85, 255, 47, 60, 83, 255, 44, 59, 82, 255, 46, 62, 87, - 255, 41, 57, 84, 255, 39, 55, 82, 255, 46, 62, 89, 255, 44, 60, 87, 255, 55, 72, 97, 255, 40, 57, 82, 255, 58, 73, 96, 255, - 62, 77, 100, 255, 55, 67, 93, 255, 49, 61, 87, 255, 59, 72, 95, 255, 56, 69, 91, 255, 60, 71, 91, 255, 54, 66, 84, 255, 50, - 62, 81, 255, 51, 63, 82, 255, 51, 62, 81, 255, 46, 56, 73, 255, 44, 52, 67, 255, 50, 55, 67, 255, 57, 60, 69, 255, 51, 53, - 62, 255, 51, 53, 60, 255, 52, 54, 61, 255, 55, 58, 62, 255, 64, 67, 71, 255, 65, 71, 74, 255, 57, 63, 66, 255, 52, 56, 60, - 255, 45, 47, 52, 255, 41, 39, 44, 255, 33, 31, 34, 255, 16, 9, 13, 255, 36, 38, 39, 255, 37, 38, 43, 255, 33, 33, 41, 255, - 26, 26, 38, 255, 25, 25, 38, 255, 25, 25, 39, 255, 25, 26, 41, 255, 23, 24, 41, 255, 27, 29, 47, 255, 31, 36, 53, 255, 29, - 36, 54, 255, 32, 40, 57, 255, 32, 41, 60, 255, 33, 43, 62, 255, 43, 52, 71, 255, 40, 52, 70, 255, 43, 57, 75, 255, 38, 52, - 71, 255, 45, 60, 78, 255, 44, 59, 77, 255, 45, 60, 77, 255, 42, 57, 75, 255, 45, 60, 78, 255, 43, 57, 78, 255, 42, 57, 80, - 255, 55, 69, 94, 255, 51, 67, 92, 255, 42, 59, 86, 255, 48, 66, 93, 255, 46, 65, 91, 255, 48, 67, 93, 255, 47, 65, 92, 255, - 56, 74, 101, 255, 60, 78, 105, 255, 53, 70, 95, 255, 63, 78, 103, 255, 61, 73, 98, 255, 60, 72, 97, 255, 59, 71, 96, 255, 59, - 72, 95, 255, 61, 76, 94, 255, 55, 70, 88, 255, 52, 66, 84, 255, 50, 64, 82, 255, 55, 68, 89, 255, 55, 66, 85, 255, 48, 57, - 73, 255, 45, 52, 64, 255, 53, 57, 67, 255, 49, 53, 61, 255, 47, 48, 57, 255, 50, 53, 59, 255, 56, 59, 63, 255, 64, 70, 74, - 255, 67, 73, 76, 255, 64, 70, 74, 255, 55, 61, 64, 255, 44, 48, 52, 255, 41, 41, 46, 255, 29, 27, 30, 255, 13, 6, 10, 255, - 38, 42, 43, 255, 38, 40, 45, 255, 29, 32, 41, 255, 26, 30, 41, 255, 29, 30, 45, 255, 32, 34, 49, 255, 34, 32, 51, 255, 30, - 29, 47, 255, 26, 28, 48, 255, 31, 35, 55, 255, 38, 45, 64, 255, 39, 46, 65, 255, 30, 40, 59, 255, 40, 52, 71, 255, 47, 59, - 77, 255, 44, 56, 75, 255, 44, 58, 78, 255, 41, 56, 77, 255, 46, 58, 79, 255, 50, 61, 82, 255, 49, 61, 80, 255, 43, 55, 73, - 255, 41, 56, 74, 255, 52, 66, 85, 255, 46, 62, 86, 255, 51, 68, 93, 255, 53, 71, 96, 255, 43, 62, 90, 255, 53, 73, 102, 255, - 50, 70, 99, 255, 49, 69, 98, 255, 53, 73, 102, 255, 61, 81, 109, 255, 62, 81, 110, 255, 54, 73, 99, 255, 65, 82, 109, 255, 60, - 73, 101, 255, 72, 86, 113, 255, 61, 75, 100, 255, 52, 68, 89, 255, 55, 68, 87, 255, 62, 76, 94, 255, 68, 82, 100, 255, 60, 75, - 91, 255, 66, 80, 100, 255, 61, 73, 91, 255, 52, 61, 78, 255, 55, 64, 78, 255, 50, 57, 68, 255, 43, 48, 56, 255, 48, 50, 57, - 255, 51, 54, 59, 255, 56, 59, 63, 255, 64, 67, 71, 255, 65, 71, 74, 255, 60, 66, 70, 255, 56, 59, 63, 255, 52, 55, 59, 255, - 39, 40, 44, 255, 23, 21, 23, 255, 15, 6, 10, 255, 39, 42, 45, 255, 40, 43, 48, 255, 34, 38, 47, 255, 29, 31, 44, 255, 30, - 32, 48, 255, 33, 35, 50, 255, 41, 42, 60, 255, 37, 40, 58, 255, 30, 34, 54, 255, 28, 33, 52, 255, 36, 43, 62, 255, 42, 52, - 71, 255, 39, 50, 69, 255, 42, 54, 73, 255, 48, 60, 79, 255, 54, 68, 87, 255, 42, 58, 76, 255, 53, 70, 89, 255, 49, 64, 83, - 255, 46, 61, 80, 255, 54, 67, 88, 255, 34, 48, 68, 255, 42, 57, 77, 255, 56, 72, 93, 255, 52, 70, 95, 255, 52, 70, 98, 255, - 57, 76, 105, 255, 40, 61, 90, 255, 59, 79, 108, 255, 52, 72, 101, 255, 61, 81, 109, 255, 59, 79, 107, 255, 64, 84, 112, 255, 55, - 75, 104, 255, 63, 81, 108, 255, 73, 91, 118, 255, 64, 78, 106, 255, 66, 80, 107, 255, 67, 82, 107, 255, 64, 79, 102, 255, 63, 79, - 100, 255, 60, 76, 95, 255, 68, 85, 103, 255, 69, 86, 103, 255, 72, 86, 106, 255, 68, 80, 99, 255, 62, 73, 89, 255, 60, 68, 83, - 255, 50, 58, 69, 255, 46, 51, 60, 255, 42, 45, 52, 255, 47, 52, 56, 255, 58, 62, 66, 255, 63, 66, 70, 255, 64, 70, 73, 255, - 62, 68, 71, 255, 57, 63, 66, 255, 48, 51, 55, 255, 33, 33, 37, 255, 16, 14, 17, 255, 12, 6, 9, 255, 29, 32, 36, 255, 31, - 33, 40, 255, 32, 36, 46, 255, 34, 36, 50, 255, 34, 36, 51, 255, 35, 39, 55, 255, 33, 38, 56, 255, 31, 39, 56, 255, 36, 43, - 62, 255, 33, 40, 60, 255, 39, 48, 67, 255, 46, 58, 77, 255, 42, 54, 72, 255, 50, 62, 80, 255, 57, 72, 90, 255, 64, 78, 97, - 255, 62, 77, 99, 255, 53, 70, 92, 255, 53, 67, 90, 255, 51, 64, 86, 255, 56, 69, 90, 255, 59, 73, 93, 255, 47, 63, 83, 255, - 53, 68, 89, 255, 55, 72, 97, 255, 56, 71, 101, 255, 72, 90, 119, 255, 57, 77, 105, 255, 54, 77, 103, 255, 58, 81, 107, 255, 69, - 92, 118, 255, 70, 93, 119, 255, 60, 82, 110, 255, 70, 92, 120, 255, 67, 88, 114, 255, 73, 92, 118, 255, 71, 87, 114, 255, 68, 85, - 110, 255, 70, 87, 111, 255, 68, 84, 109, 255, 64, 78, 101, 255, 64, 78, 98, 255, 65, 78, 99, 255, 71, 86, 104, 255, 75, 88, 109, - 255, 81, 93, 112, 255, 77, 87, 104, 255, 75, 84, 99, 255, 61, 70, 83, 255, 43, 50, 60, 255, 32, 37, 45, 255, 42, 47, 53, 255, - 55, 59, 63, 255, 65, 68, 72, 255, 68, 74, 77, 255, 68, 74, 77, 255, 58, 65, 69, 255, 49, 53, 57, 255, 34, 33, 38, 255, 20, - 17, 20, 255, 11, 5, 6, 255, 26, 29, 34, 255, 30, 32, 39, 255, 35, 38, 49, 255, 31, 34, 47, 255, 30, 34, 49, 255, 42, 48, - 63, 255, 34, 41, 58, 255, 36, 45, 62, 255, 43, 50, 70, 255, 36, 45, 64, 255, 43, 55, 73, 255, 50, 64, 83, 255, 56, 68, 86, - 255, 53, 67, 85, 255, 62, 77, 95, 255, 70, 87, 106, 255, 60, 77, 99, 255, 58, 76, 98, 255, 58, 74, 96, 255, 40, 56, 78, 255, - 52, 67, 89, 255, 56, 71, 94, 255, 56, 73, 96, 255, 50, 67, 91, 255, 64, 81, 107, 255, 53, 70, 103, 255, 70, 88, 120, 255, 65, - 85, 114, 255, 64, 86, 113, 255, 67, 90, 117, 255, 75, 98, 125, 255, 65, 88, 115, 255, 73, 95, 123, 255, 68, 90, 118, 255, 60, 81, - 108, 255, 76, 96, 123, 255, 72, 88, 115, 255, 62, 79, 103, 255, 74, 91, 115, 255, 72, 89, 114, 255, 80, 95, 118, 255, 61, 76, 99, - 255, 78, 94, 114, 255, 71, 86, 106, 255, 75, 88, 109, 255, 83, 95, 114, 255, 81, 91, 108, 255, 77, 85, 100, 255, 57, 68, 80, 255, - 42, 50, 60, 255, 30, 36, 44, 255, 39, 45, 52, 255, 51, 55, 59, 255, 58, 61, 65, 255, 60, 66, 69, 255, 63, 69, 73, 255, 60, - 68, 71, 255, 57, 62, 66, 255, 46, 46, 51, 255, 28, 25, 28, 255, 13, 8, 9, 255, 36, 37, 47, 255, 32, 36, 46, 255, 31, 35, - 48, 255, 39, 46, 58, 255, 57, 63, 78, 255, 50, 56, 71, 255, 48, 53, 71, 255, 40, 48, 65, 255, 47, 54, 73, 255, 56, 65, 84, - 255, 51, 63, 82, 255, 54, 68, 86, 255, 62, 74, 93, 255, 60, 74, 94, 255, 61, 75, 95, 255, 56, 72, 94, 255, 62, 77, 101, 255, - 58, 75, 100, 255, 56, 73, 97, 255, 48, 66, 90, 255, 48, 66, 91, 255, 54, 70, 96, 255, 54, 68, 94, 255, 56, 69, 96, 255, 54, - 67, 95, 255, 64, 80, 109, 255, 69, 88, 118, 255, 79, 97, 128, 255, 68, 86, 118, 255, 69, 90, 121, 255, 74, 96, 127, 255, 76, 98, - 129, 255, 79, 101, 132, 255, 73, 94, 125, 255, 63, 85, 115, 255, 76, 96, 125, 255, 70, 90, 117, 255, 72, 90, 116, 255, 73, 91, 118, - 255, 90, 106, 131, 255, 84, 100, 122, 255, 83, 97, 118, 255, 83, 96, 116, 255, 85, 98, 115, 255, 78, 90, 108, 255, 84, 96, 113, 255, - 83, 94, 110, 255, 84, 92, 107, 255, 69, 79, 91, 255, 53, 60, 72, 255, 41, 47, 57, 255, 36, 40, 48, 255, 39, 41, 49, 255, 31, - 33, 40, 255, 38, 40, 46, 255, 49, 53, 58, 255, 52, 59, 61, 255, 52, 57, 58, 255, 48, 49, 51, 255, 31, 28, 29, 255, 16, 10, - 11, 255, 29, 30, 41, 255, 32, 36, 46, 255, 25, 29, 42, 255, 49, 56, 69, 255, 41, 47, 62, 255, 43, 51, 66, 255, 45, 53, 70, - 255, 52, 60, 77, 255, 51, 60, 79, 255, 54, 66, 84, 255, 59, 71, 89, 255, 62, 76, 94, 255, 71, 82, 101, 255, 71, 85, 105, 255, - 65, 78, 99, 255, 53, 68, 91, 255, 59, 73, 100, 255, 61, 77, 104, 255, 59, 75, 102, 255, 52, 71, 97, 255, 53, 69, 98, 255, 56, - 71, 101, 255, 60, 74, 103, 255, 67, 80, 107, 255, 73, 85, 110, 255, 75, 91, 115, 255, 77, 92, 119, 255, 81, 96, 128, 255, 75, 92, - 124, 255, 70, 92, 122, 255, 72, 91, 124, 255, 78, 97, 131, 255, 72, 93, 125, 255, 76, 98, 128, 255, 63, 84, 115, 255, 81, 103, 134, - 255, 72, 95, 123, 255, 67, 87, 114, 255, 75, 93, 119, 255, 96, 112, 133, 255, 113, 125, 144, 255, 102, 114, 130, 255, 108, 119, 132, 255, - 93, 102, 116, 255, 84, 95, 115, 255, 91, 103, 122, 255, 96, 109, 125, 255, 103, 114, 128, 255, 84, 93, 107, 255, 67, 75, 87, 255, 53, - 58, 70, 255, 42, 45, 56, 255, 31, 33, 42, 255, 25, 27, 36, 255, 27, 30, 36, 255, 35, 38, 42, 255, 40, 45, 49, 255, 45, 48, - 52, 255, 36, 35, 40, 255, 20, 17, 20, 255, 13, 8, 8, 255, 27, 27, 39, 255, 39, 43, 53, 255, 73, 77, 90, 255, 48, 55, 67, - 255, 55, 62, 77, 255, 53, 62, 76, 255, 41, 49, 66, 255, 43, 53, 70, 255, 61, 71, 90, 255, 53, 65, 83, 255, 53, 65, 83, 255, - 62, 74, 93, 255, 72, 84, 102, 255, 65, 79, 99, 255, 66, 80, 100, 255, 63, 78, 101, 255, 56, 69, 96, 255, 66, 82, 109, 255, 69, - 85, 112, 255, 68, 87, 113, 255, 70, 88, 116, 255, 66, 85, 111, 255, 75, 92, 117, 255, 80, 97, 119, 255, 97, 113, 133, 255, 100, 113, - 130, 255, 99, 112, 131, 255, 97, 112, 136, 255, 88, 103, 133, 255, 81, 101, 132, 255, 67, 88, 121, 255, 81, 102, 135, 255, 75, 97, 130, - 255, 75, 98, 131, 255, 78, 98, 131, 255, 76, 97, 130, 255, 77, 99, 129, 255, 80, 100, 130, 255, 74, 91, 119, 255, 114, 125, 144, 255, - 138, 144, 159, 255, 146, 152, 161, 255, 121, 125, 133, 255, 106, 112, 121, 255, 106, 114, 132, 255, 109, 118, 136, 255, 102, 113, 129, 255, 104, - 115, 130, 255, 105, 115, 127, 255, 91, 99, 111, 255, 79, 85, 98, 255, 49, 52, 66, 255, 30, 30, 42, 255, 29, 30, 39, 255, 28, 30, - 37, 255, 34, 36, 43, 255, 36, 42, 46, 255, 35, 38, 42, 255, 24, 23, 28, 255, 17, 14, 17, 255, 23, 17, 18, 255, 46, 46, 58, - 255, 69, 72, 84, 255, 45, 50, 63, 255, 50, 58, 70, 255, 47, 56, 71, 255, 50, 58, 73, 255, 53, 64, 80, 255, 40, 50, 67, 255, - 58, 70, 89, 255, 68, 80, 99, 255, 68, 79, 98, 255, 66, 78, 97, 255, 69, 81, 100, 255, 79, 93, 113, 255, 76, 89, 110, 255, 75, - 90, 112, 255, 71, 86, 110, 255, 73, 89, 112, 255, 70, 86, 110, 255, 80, 98, 122, 255, 77, 94, 117, 255, 84, 101, 122, 255, 98, 114, - 134, 255, 102, 117, 134, 255, 116, 127, 142, 255, 131, 141, 153, 255, 131, 141, 152, 255, 118, 129, 142, 255, 120, 135, 156, 255, 99, 117, 145, - 255, 79, 100, 133, 255, 87, 110, 145, 255, 86, 113, 144, 255, 89, 114, 147, 255, 88, 109, 144, 255, 88, 107, 142, 255, 78, 97, 129, 255, - 79, 98, 131, 255, 78, 95, 127, 255, 117, 128, 149, 255, 152, 156, 168, 255, 164, 163, 168, 255, 156, 154, 156, 255, 140, 143, 147, 255, 141, - 148, 157, 255, 145, 153, 164, 255, 123, 132, 143, 255, 118, 129, 141, 255, 114, 127, 137, 255, 100, 112, 121, 255, 96, 104, 114, 255, 55, 62, - 72, 255, 30, 32, 41, 255, 30, 31, 40, 255, 30, 32, 40, 255, 33, 35, 44, 255, 30, 35, 42, 255, 29, 32, 38, 255, 28, 27, 34, - 255, 24, 20, 25, 255, 18, 13, 15, 255, 72, 73, 84, 255, 33, 35, 48, 255, 46, 50, 65, 255, 45, 52, 65, 255, 60, 69, 84, 255, - 71, 79, 94, 255, 68, 78, 94, 255, 55, 65, 82, 255, 53, 64, 85, 255, 71, 82, 103, 255, 85, 96, 117, 255, 90, 101, 122, 255, 93, - 104, 125, 255, 77, 90, 111, 255, 88, 99, 118, 255, 92, 106, 125, 255, 99, 111, 131, 255, 93, 107, 126, 255, 92, 106, 127, 255, 84, 99, - 122, 255, 98, 114, 134, 255, 107, 122, 140, 255, 130, 144, 160, 255, 135, 148, 162, 255, 138, 147, 159, 255, 153, 160, 168, 255, 182, 187, 194, - 255, 172, 179, 187, 255, 167, 176, 188, 255, 151, 164, 182, 255, 126, 145, 171, 255, 112, 136, 169, 255, 90, 120, 155, 255, 91, 123, 157, 255, - 105, 129, 164, 255, 83, 106, 141, 255, 92, 115, 150, 255, 78, 100, 135, 255, 81, 99, 133, 255, 130, 140, 160, 255, 171, 172, 180, 255, 195, - 190, 189, 255, 167, 162, 159, 255, 173, 174, 172, 255, 172, 175, 179, 255, 155, 160, 167, 255, 140, 148, 156, 255, 133, 143, 153, 255, 116, 126, - 136, 255, 115, 127, 136, 255, 99, 108, 118, 255, 72, 79, 87, 255, 51, 54, 65, 255, 43, 46, 57, 255, 32, 32, 44, 255, 28, 32, 42, - 255, 27, 33, 41, 255, 27, 30, 38, 255, 21, 19, 26, 255, 12, 8, 13, 255, 13, 6, 10, 255, 41, 42, 51, 255, 47, 50, 62, 255, - 77, 82, 95, 255, 65, 72, 83, 255, 52, 61, 75, 255, 55, 64, 78, 255, 60, 71, 87, 255, 78, 88, 105, 255, 80, 91, 112, 255, 77, - 88, 109, 255, 90, 101, 122, 255, 86, 97, 118, 255, 90, 101, 122, 255, 79, 93, 113, 255, 93, 105, 123, 255, 93, 107, 125, 255, 102, 116, - 135, 255, 105, 119, 137, 255, 102, 116, 135, 255, 109, 123, 143, 255, 111, 125, 143, 255, 132, 144, 160, 255, 140, 152, 166, 255, 158, 170, 182, - 255, 158, 168, 176, 255, 178, 184, 187, 255, 182, 189, 189, 255, 190, 198, 200, 255, 193, 201, 206, 255, 183, 192, 203, 255, 157, 171, 191, 255, - 114, 137, 167, 255, 94, 127, 165, 255, 95, 128, 166, 255, 102, 127, 164, 255, 90, 115, 151, 255, 100, 122, 159, 255, 83, 106, 143, 255, 96, - 116, 149, 255, 137, 149, 166, 255, 184, 183, 189, 255, 189, 182, 178, 255, 180, 171, 166, 255, 193, 188, 185, 255, 179, 179, 182, 255, 167, 170, - 175, 255, 151, 157, 164, 255, 135, 144, 151, 255, 122, 131, 138, 255, 117, 128, 136, 255, 111, 120, 130, 255, 88, 94, 104, 255, 55, 58, 69, - 255, 44, 48, 59, 255, 40, 41, 52, 255, 28, 31, 42, 255, 21, 27, 35, 255, 23, 25, 34, 255, 23, 22, 28, 255, 19, 15, 20, 255, - 17, 10, 14, 255, 72, 75, 82, 255, 84, 87, 96, 255, 50, 56, 66, 255, 53, 61, 70, 255, 53, 63, 75, 255, 70, 79, 92, 255, 68, - 79, 93, 255, 77, 87, 103, 255, 70, 81, 101, 255, 74, 85, 106, 255, 80, 91, 112, 255, 82, 93, 114, 255, 86, 97, 116, 255, 94, 109, - 127, 255, 84, 96, 115, 255, 94, 110, 125, 255, 119, 132, 148, 255, 127, 140, 156, 255, 127, 140, 156, 255, 129, 142, 157, 255, 134, 145, 160, - 255, 138, 148, 161, 255, 145, 155, 165, 255, 164, 173, 181, 255, 172, 179, 186, 255, 174, 179, 182, 255, 178, 183, 183, 255, 182, 188, 190, 255, - 194, 200, 202, 255, 195, 201, 206, 255, 181, 193, 205, 255, 131, 153, 177, 255, 83, 114, 151, 255, 85, 116, 159, 255, 100, 124, 164, 255, 94, - 120, 156, 255, 104, 125, 165, 255, 95, 119, 158, 255, 95, 118, 151, 255, 128, 144, 163, 255, 179, 183, 188, 255, 180, 175, 173, 255, 194, 185, - 181, 255, 193, 187, 186, 255, 180, 177, 179, 255, 163, 162, 166, 255, 154, 157, 163, 255, 139, 144, 150, 255, 140, 146, 154, 255, 129, 137, 145, - 255, 122, 130, 140, 255, 100, 104, 117, 255, 71, 74, 85, 255, 51, 55, 66, 255, 39, 39, 51, 255, 28, 31, 42, 255, 21, 27, 35, 255, - 21, 24, 32, 255, 23, 22, 29, 255, 17, 13, 18, 255, 13, 8, 11, 255, 76, 79, 84, 255, 72, 77, 84, 255, 73, 80, 88, 255, 66, - 75, 82, 255, 51, 61, 71, 255, 54, 64, 74, 255, 63, 74, 86, 255, 66, 78, 91, 255, 75, 86, 106, 255, 81, 92, 113, 255, 78, 89, - 110, 255, 87, 99, 120, 255, 93, 105, 124, 255, 101, 116, 134, 255, 114, 127, 143, 255, 108, 123, 139, 255, 109, 123, 139, 255, 130, 142, 158, - 255, 139, 150, 165, 255, 138, 148, 162, 255, 137, 146, 158, 255, 154, 161, 172, 255, 161, 169, 178, 255, 164, 171, 179, 255, 182, 188, 195, 255, - 191, 194, 198, 255, 200, 202, 204, 255, 194, 199, 201, 255, 190, 194, 196, 255, 198, 206, 206, 255, 188, 201, 208, 255, 138, 161, 178, 255, 87, - 115, 147, 255, 94, 123, 163, 255, 102, 126, 166, 255, 112, 137, 176, 255, 113, 137, 173, 255, 107, 133, 168, 255, 100, 125, 160, 255, 113, 133, - 155, 255, 157, 165, 176, 255, 187, 186, 188, 255, 204, 198, 197, 255, 202, 196, 198, 255, 182, 177, 179, 255, 170, 167, 170, 255, 156, 157, 161, - 255, 150, 152, 159, 255, 144, 149, 155, 255, 145, 151, 158, 255, 128, 135, 144, 255, 107, 112, 124, 255, 91, 94, 105, 255, 59, 63, 74, 255, - 47, 47, 59, 255, 35, 38, 49, 255, 22, 28, 37, 255, 20, 23, 31, 255, 23, 22, 28, 255, 17, 13, 18, 255, 12, 7, 10, 255, 82, - 87, 93, 255, 69, 75, 84, 255, 53, 61, 71, 255, 51, 58, 66, 255, 63, 71, 81, 255, 77, 84, 97, 255, 79, 89, 101, 255, 89, 98, - 113, 255, 84, 94, 113, 255, 84, 93, 112, 255, 84, 94, 113, 255, 81, 91, 110, 255, 92, 104, 123, 255, 96, 111, 127, 255, 110, 125, 139, - 255, 119, 133, 145, 255, 111, 121, 135, 255, 130, 141, 154, 255, 144, 153, 164, 255, 157, 165, 175, 255, 155, 164, 172, 255, 148, 154, 162, 255, - 159, 166, 172, 255, 169, 176, 181, 255, 182, 187, 193, 255, 189, 193, 197, 255, 207, 209, 212, 255, 211, 213, 214, 255, 203, 203, 204, 255, 203, - 206, 209, 255, 194, 206, 214, 255, 142, 163, 181, 255, 101, 127, 158, 255, 99, 127, 164, 255, 102, 126, 163, 255, 126, 147, 182, 255, 131, 153, - 185, 255, 125, 151, 182, 255, 96, 123, 154, 255, 95, 116, 145, 255, 137, 148, 165, 255, 171, 171, 177, 255, 190, 185, 186, 255, 179, 173, 175, - 255, 162, 157, 162, 255, 169, 167, 172, 255, 172, 170, 175, 255, 168, 169, 173, 255, 162, 165, 169, 255, 140, 145, 149, 255, 122, 127, 132, 255, - 126, 131, 136, 255, 111, 113, 122, 255, 81, 80, 92, 255, 49, 49, 62, 255, 30, 32, 47, 255, 24, 27, 39, 255, 23, 25, 32, 255, 20, - 21, 24, 255, 17, 15, 18, 255, 17, 10, 12, 255, 57, 62, 68, 255, 58, 64, 72, 255, 61, 69, 79, 255, 68, 74, 82, 255, 63, 71, - 81, 255, 69, 77, 89, 255, 71, 80, 92, 255, 75, 84, 98, 255, 90, 100, 116, 255, 95, 105, 122, 255, 106, 117, 133, 255, 109, 119, 136, - 255, 98, 109, 125, 255, 99, 111, 125, 255, 122, 134, 148, 255, 137, 149, 161, 255, 143, 152, 165, 255, 138, 147, 159, 255, 162, 169, 179, 255, - 163, 171, 178, 255, 165, 173, 181, 255, 169, 176, 181, 255, 168, 175, 181, 255, 162, 171, 177, 255, 169, 180, 185, 255, 169, 176, 182, 255, 182, - 187, 192, 255, 189, 192, 197, 255, 204, 204, 208, 255, 202, 205, 208, 255, 197, 208, 218, 255, 144, 161, 184, 255, 85, 110, 142, 255, 98, 126, - 161, 255, 122, 146, 178, 255, 146, 165, 195, 255, 153, 172, 197, 255, 137, 160, 186, 255, 110, 133, 162, 255, 93, 114, 144, 255, 111, 123, 145, - 255, 163, 166, 179, 255, 169, 166, 172, 255, 156, 154, 157, 255, 164, 162, 166, 255, 166, 164, 169, 255, 179, 178, 183, 255, 170, 168, 173, 255, - 163, 165, 169, 255, 140, 145, 149, 255, 134, 140, 143, 255, 132, 135, 140, 255, 118, 120, 128, 255, 93, 92, 103, 255, 48, 47, 61, 255, 30, - 31, 46, 255, 22, 24, 36, 255, 17, 18, 26, 255, 18, 18, 23, 255, 17, 15, 18, 255, 17, 11, 12, 255, 52, 57, 63, 255, 50, 57, - 65, 255, 42, 50, 60, 255, 50, 56, 64, 255, 58, 66, 77, 255, 65, 73, 85, 255, 76, 85, 98, 255, 80, 88, 103, 255, 82, 91, 104, - 255, 85, 94, 107, 255, 85, 94, 107, 255, 84, 94, 107, 255, 110, 121, 133, 255, 109, 119, 131, 255, 95, 105, 117, 255, 122, 133, 145, 255, - 132, 142, 152, 255, 142, 151, 161, 255, 147, 153, 162, 255, 165, 169, 176, 255, 179, 183, 188, 255, 188, 192, 198, 255, 180, 184, 190, 255, 172, - 181, 187, 255, 167, 177, 185, 255, 156, 167, 175, 255, 163, 171, 180, 255, 169, 174, 184, 255, 166, 168, 177, 255, 178, 182, 189, 255, 181, 192, - 205, 255, 125, 142, 167, 255, 88, 112, 142, 255, 102, 127, 159, 255, 141, 161, 188, 255, 178, 193, 215, 255, 176, 192, 209, 255, 166, 184, 203, - 255, 139, 158, 180, 255, 109, 126, 151, 255, 94, 104, 127, 255, 130, 135, 152, 255, 127, 127, 139, 255, 148, 148, 153, 255, 134, 132, 137, 255, - 154, 152, 157, 255, 169, 168, 172, 255, 173, 172, 177, 255, 157, 156, 161, 255, 140, 143, 147, 255, 138, 141, 145, 255, 143, 146, 150, 255, 129, - 129, 136, 255, 104, 101, 111, 255, 55, 53, 65, 255, 32, 32, 45, 255, 21, 22, 31, 255, 12, 11, 20, 255, 14, 12, 18, 255, 13, 9, - 13, 255, 15, 10, 10, 255, 66, 70, 76, 255, 60, 66, 74, 255, 62, 70, 80, 255, 62, 69, 77, 255, 60, 68, 78, 255, 70, 77, 90, - 255, 78, 87, 100, 255, 94, 103, 117, 255, 101, 111, 121, 255, 98, 109, 118, 255, 99, 109, 119, 255, 100, 111, 120, 255, 103, 113, 123, 255, - 120, 128, 138, 255, 130, 138, 148, 255, 122, 131, 142, 255, 135, 145, 155, 255, 149, 159, 166, 255, 170, 176, 182, 255, 179, 182, 186, 255, 186, - 186, 190, 255, 186, 186, 191, 255, 188, 191, 196, 255, 175, 182, 187, 255, 153, 160, 167, 255, 133, 141, 152, 255, 145, 153, 165, 255, 154, 163, - 176, 255, 135, 142, 155, 255, 138, 145, 158, 255, 158, 171, 188, 255, 109, 128, 150, 255, 101, 124, 150, 255, 128, 151, 178, 255, 158, 178, 198, - 255, 193, 209, 221, 255, 193, 207, 218, 255, 190, 202, 215, 255, 168, 179, 192, 255, 138, 149, 165, 255, 97, 107, 124, 255, 99, 106, 122, 255, - 112, 115, 127, 255, 105, 106, 114, 255, 75, 76, 80, 255, 79, 77, 82, 255, 129, 127, 132, 255, 166, 161, 167, 255, 162, 160, 165, 255, 137, - 138, 142, 255, 144, 146, 150, 255, 142, 143, 148, 255, 138, 138, 141, 255, 110, 108, 113, 255, 66, 65, 72, 255, 35, 36, 45, 255, 21, 23, - 30, 255, 19, 17, 27, 255, 13, 10, 18, 255, 13, 9, 13, 255, 12, 7, 8, 255, 101, 102, 111, 255, 84, 89, 98, 255, 77, 85, 93, - 255, 81, 85, 94, 255, 86, 91, 102, 255, 86, 94, 106, 255, 82, 89, 101, 255, 90, 99, 110, 255, 104, 112, 121, 255, 112, 121, 129, 255, - 113, 122, 130, 255, 116, 124, 132, 255, 115, 122, 130, 255, 121, 127, 135, 255, 132, 137, 146, 255, 128, 136, 144, 255, 137, 145, 153, 255, 148, - 158, 164, 255, 167, 172, 175, 255, 184, 184, 187, 255, 183, 182, 185, 255, 185, 181, 187, 255, 170, 169, 172, 255, 144, 146, 147, 255, 112, 114, - 120, 255, 89, 93, 101, 255, 91, 96, 108, 255, 124, 130, 144, 255, 124, 132, 148, 255, 115, 126, 143, 255, 111, 124, 143, 255, 91, 106, 129, - 255, 116, 134, 159, 255, 156, 176, 197, 255, 183, 202, 214, 255, 203, 216, 223, 255, 211, 219, 226, 255, 212, 217, 224, 255, 197, 203, 210, 255, - 176, 178, 187, 255, 111, 115, 125, 255, 60, 65, 75, 255, 85, 89, 97, 255, 54, 54, 61, 255, 24, 22, 29, 255, 29, 26, 34, 255, 61, - 58, 66, 255, 123, 121, 128, 255, 130, 129, 133, 255, 124, 125, 129, 255, 135, 135, 140, 255, 152, 151, 153, 255, 154, 153, 155, 255, 129, 125, - 127, 255, 86, 82, 87, 255, 36, 36, 45, 255, 32, 30, 38, 255, 22, 19, 30, 255, 17, 12, 22, 255, 18, 11, 18, 255, 17, 9, 11, - 255, 98, 98, 107, 255, 72, 75, 84, 255, 77, 84, 92, 255, 86, 90, 99, 255, 78, 83, 94, 255, 83, 89, 99, 255, 105, 111, 121, 255, - 117, 122, 131, 255, 122, 127, 134, 255, 120, 126, 131, 255, 127, 134, 139, 255, 143, 147, 152, 255, 144, 148, 152, 255, 143, 145, 149, 255, 144, - 145, 150, 255, 150, 151, 156, 255, 143, 147, 155, 255, 152, 158, 165, 255, 159, 164, 167, 255, 172, 174, 176, 255, 179, 179, 182, 255, 165, 161, - 166, 255, 100, 95, 99, 255, 58, 55, 56, 255, 42, 39, 42, 255, 36, 34, 39, 255, 32, 31, 40, 255, 62, 61, 73, 255, 91, 97, 110, - 255, 88, 97, 111, 255, 65, 78, 91, 255, 106, 121, 136, 255, 164, 179, 194, 255, 192, 205, 218, 255, 210, 223, 228, 255, 216, 226, 229, 255, - 226, 230, 232, 255, 228, 230, 233, 255, 219, 220, 223, 255, 196, 196, 199, 255, 157, 157, 161, 255, 69, 70, 75, 255, 57, 57, 61, 255, 48, - 47, 50, 255, 74, 69, 74, 255, 31, 26, 32, 255, 41, 37, 42, 255, 87, 85, 91, 255, 131, 128, 136, 255, 126, 126, 133, 255, 139, 139, - 145, 255, 174, 173, 176, 255, 175, 172, 173, 255, 153, 146, 146, 255, 102, 95, 96, 255, 65, 61, 66, 255, 35, 32, 41, 255, 18, 16, 27, - 255, 17, 11, 21, 255, 19, 12, 19, 255, 15, 7, 11, 255, 83, 84, 92, 255, 76, 78, 89, 255, 87, 92, 102, 255, 98, 105, 112, 255, - 95, 99, 107, 255, 95, 99, 107, 255, 96, 100, 107, 255, 105, 109, 114, 255, 114, 118, 121, 255, 136, 139, 141, 255, 150, 151, 151, 255, 156, - 156, 154, 255, 168, 168, 166, 255, 178, 177, 176, 255, 181, 180, 179, 255, 178, 176, 175, 255, 166, 168, 173, 255, 150, 154, 162, 255, 152, 159, - 164, 255, 144, 152, 156, 255, 132, 133, 137, 255, 93, 88, 96, 255, 50, 43, 49, 255, 52, 45, 49, 255, 112, 105, 106, 255, 66, 59, 63, - 255, 42, 36, 43, 255, 34, 31, 37, 255, 61, 63, 71, 255, 70, 74, 81, 255, 93, 100, 106, 255, 184, 193, 198, 255, 214, 222, 225, 255, - 226, 232, 235, 255, 226, 232, 230, 255, 233, 237, 236, 255, 242, 243, 242, 255, 239, 239, 238, 255, 237, 234, 233, 255, 216, 214, 213, 255, 187, - 184, 185, 255, 165, 160, 161, 255, 91, 86, 85, 255, 44, 38, 38, 255, 61, 52, 57, 255, 52, 43, 51, 255, 35, 29, 39, 255, 67, 63, - 73, 255, 115, 114, 124, 255, 120, 121, 130, 255, 129, 130, 139, 255, 161, 160, 166, 255, 177, 173, 175, 255, 154, 147, 145, 255, 145, 137, 135, - 255, 93, 86, 89, 255, 50, 46, 53, 255, 25, 22, 34, 255, 19, 13, 24, 255, 19, 12, 20, 255, 18, 9, 15, 255, 81, 83, 91, 255, - 70, 71, 82, 255, 62, 66, 76, 255, 64, 70, 77, 255, 88, 92, 100, 255, 100, 102, 109, 255, 109, 112, 116, 255, 119, 120, 122, 255, 133, - 133, 132, 255, 138, 136, 133, 255, 151, 148, 143, 255, 167, 164, 156, 255, 166, 162, 155, 255, 176, 172, 167, 255, 186, 183, 178, 255, 197, 196, - 190, 255, 176, 180, 179, 255, 147, 153, 160, 255, 136, 146, 155, 255, 139, 149, 157, 255, 130, 135, 140, 255, 79, 78, 85, 255, 59, 54, 61, - 255, 51, 43, 48, 255, 68, 61, 64, 255, 50, 45, 48, 255, 50, 46, 49, 255, 27, 24, 29, 255, 51, 49, 54, 255, 87, 87, 90, 255, - 191, 192, 193, 255, 220, 223, 221, 255, 229, 232, 228, 255, 237, 236, 234, 255, 241, 241, 238, 255, 243, 243, 241, 255, 250, 249, 247, 255, 247, - 247, 244, 255, 248, 244, 242, 255, 232, 229, 227, 255, 207, 201, 199, 255, 199, 190, 189, 255, 183, 173, 173, 255, 84, 74, 74, 255, 57, 47, - 51, 255, 54, 48, 54, 255, 26, 23, 30, 255, 67, 65, 75, 255, 101, 100, 112, 255, 106, 107, 118, 255, 90, 91, 102, 255, 144, 143, 150, - 255, 179, 174, 177, 255, 169, 161, 159, 255, 160, 152, 150, 255, 121, 114, 116, 255, 71, 67, 74, 255, 27, 24, 35, 255, 18, 12, 22, 255, - 20, 13, 20, 255, 17, 8, 13, 255, 63, 62, 71, 255, 65, 66, 77, 255, 66, 70, 79, 255, 70, 75, 80, 255, 74, 77, 83, 255, 86, - 88, 93, 255, 102, 105, 108, 255, 116, 116, 116, 255, 139, 133, 130, 255, 151, 144, 139, 255, 152, 144, 137, 255, 167, 160, 151, 255, 182, 171, - 163, 255, 187, 178, 171, 255, 193, 188, 180, 255, 198, 195, 188, 255, 177, 179, 180, 255, 132, 138, 147, 255, 106, 115, 130, 255, 103, 111, 125, - 255, 112, 116, 128, 255, 67, 66, 78, 255, 64, 60, 70, 255, 47, 42, 48, 255, 63, 57, 63, 255, 72, 66, 69, 255, 44, 39, 40, 255, - 30, 24, 28, 255, 72, 66, 68, 255, 135, 131, 132, 255, 218, 213, 212, 255, 234, 229, 226, 255, 239, 238, 231, 255, 243, 241, 235, 255, 249, - 246, 242, 255, 252, 248, 244, 255, 251, 248, 243, 255, 252, 253, 248, 255, 250, 249, 245, 255, 241, 237, 233, 255, 224, 217, 214, 255, 206, 196, - 193, 255, 206, 194, 191, 255, 150, 140, 138, 255, 52, 45, 46, 255, 33, 30, 32, 255, 39, 38, 45, 255, 58, 59, 68, 255, 91, 93, 104, - 255, 74, 78, 91, 255, 71, 73, 86, 255, 112, 111, 120, 255, 162, 159, 163, 255, 170, 163, 164, 255, 165, 156, 155, 255, 147, 138, 138, 255, - 121, 113, 119, 255, 44, 37, 47, 255, 20, 12, 22, 255, 18, 10, 15, 255, 13, 8, 11, 255, 53, 56, 65, 255, 58, 61, 74, 255, 75, - 78, 88, 255, 82, 85, 90, 255, 84, 87, 91, 255, 87, 88, 91, 255, 102, 104, 104, 255, 109, 107, 106, 255, 127, 120, 119, 255, 136, 130, - 127, 255, 158, 151, 146, 255, 163, 156, 149, 255, 179, 169, 162, 255, 186, 173, 169, 255, 201, 190, 184, 255, 189, 182, 178, 255, 169, 170, 174, - 255, 116, 121, 135, 255, 81, 90, 111, 255, 81, 92, 110, 255, 99, 105, 122, 255, 84, 82, 98, 255, 61, 59, 71, 255, 64, 62, 69, 255, - 65, 59, 66, 255, 45, 39, 43, 255, 47, 40, 42, 255, 62, 53, 55, 255, 81, 74, 75, 255, 187, 183, 182, 255, 227, 221, 219, 255, 240, - 234, 231, 255, 247, 242, 236, 255, 253, 248, 242, 255, 254, 249, 243, 255, 252, 247, 241, 255, 244, 242, 235, 255, 247, 247, 240, 255, 248, 248, - 241, 255, 247, 244, 237, 255, 236, 230, 224, 255, 213, 205, 200, 255, 203, 194, 188, 255, 203, 195, 189, 255, 134, 129, 125, 255, 60, 57, 56, - 255, 49, 48, 53, 255, 59, 62, 71, 255, 69, 72, 85, 255, 61, 66, 79, 255, 57, 60, 73, 255, 89, 89, 99, 255, 145, 144, 147, 255, - 165, 160, 160, 255, 174, 166, 164, 255, 177, 166, 167, 255, 120, 112, 116, 255, 43, 36, 44, 255, 24, 17, 24, 255, 17, 9, 14, 255, 15, - 10, 10, 255, 57, 62, 73, 255, 54, 59, 72, 255, 61, 66, 76, 255, 70, 74, 81, 255, 89, 91, 95, 255, 108, 107, 110, 255, 123, 120, - 121, 255, 134, 130, 128, 255, 135, 128, 129, 255, 142, 135, 134, 255, 166, 158, 154, 255, 174, 167, 161, 255, 184, 174, 167, 255, 200, 186, 182, - 255, 199, 186, 182, 255, 197, 189, 188, 255, 164, 166, 175, 255, 92, 99, 117, 255, 53, 66, 87, 255, 58, 70, 93, 255, 76, 85, 104, 255, - 89, 92, 110, 255, 72, 73, 89, 255, 55, 56, 67, 255, 56, 54, 63, 255, 46, 42, 49, 255, 45, 38, 44, 255, 50, 44, 45, 255, 141, - 136, 135, 255, 216, 210, 208, 255, 232, 228, 226, 255, 249, 243, 240, 255, 247, 242, 239, 255, 249, 243, 239, 255, 245, 240, 235, 255, 245, 240, - 234, 255, 239, 237, 230, 255, 243, 243, 237, 255, 242, 242, 235, 255, 243, 240, 234, 255, 243, 237, 231, 255, 229, 221, 215, 255, 213, 204, 198, - 255, 204, 196, 190, 255, 193, 187, 183, 255, 128, 123, 123, 255, 78, 76, 82, 255, 67, 68, 78, 255, 56, 60, 74, 255, 53, 56, 71, 255, - 51, 52, 67, 255, 74, 75, 86, 255, 110, 109, 115, 255, 148, 143, 146, 255, 176, 167, 169, 255, 155, 146, 148, 255, 100, 92, 96, 255, 54, - 48, 52, 255, 23, 17, 21, 255, 19, 11, 14, 255, 18, 10, 11, 255, 56, 59, 72, 255, 53, 57, 72, 255, 56, 63, 75, 255, 66, 74, - 81, 255, 78, 82, 85, 255, 96, 94, 95, 255, 112, 105, 105, 255, 127, 121, 119, 255, 146, 137, 135, 255, 149, 141, 138, 255, 159, 150, 145, - 255, 175, 165, 160, 255, 188, 176, 169, 255, 191, 180, 175, 255, 187, 179, 175, 255, 174, 171, 171, 255, 142, 148, 157, 255, 88, 96, 116, 255, - 44, 57, 79, 255, 39, 52, 75, 255, 50, 63, 80, 255, 67, 75, 92, 255, 72, 77, 95, 255, 71, 73, 90, 255, 56, 59, 72, 255, 62, - 64, 75, 255, 63, 62, 70, 255, 102, 100, 102, 255, 206, 202, 200, 255, 224, 216, 215, 255, 236, 231, 229, 255, 245, 240, 238, 255, 246, 242, - 241, 255, 244, 240, 238, 255, 240, 237, 233, 255, 234, 231, 227, 255, 234, 231, 227, 255, 233, 229, 225, 255, 232, 229, 225, 255, 230, 228, 224, - 255, 227, 220, 217, 255, 228, 218, 215, 255, 226, 214, 211, 255, 214, 204, 201, 255, 202, 193, 190, 255, 190, 182, 181, 255, 117, 113, 116, 255, - 70, 70, 77, 255, 61, 62, 77, 255, 48, 48, 66, 255, 39, 38, 54, 255, 45, 45, 57, 255, 86, 83, 93, 255, 131, 126, 132, 255, 149, - 142, 146, 255, 143, 135, 139, 255, 116, 109, 111, 255, 77, 73, 73, 255, 40, 35, 36, 255, 24, 16, 19, 255, 17, 9, 13, 255, 45, 47, - 63, 255, 46, 51, 64, 255, 57, 62, 74, 255, 85, 90, 100, 255, 104, 106, 111, 255, 119, 116, 119, 255, 126, 119, 118, 255, 141, 133, 130, - 255, 155, 148, 143, 255, 169, 159, 154, 255, 169, 159, 154, 255, 183, 174, 168, 255, 189, 180, 175, 255, 189, 181, 178, 255, 179, 174, 174, 255, - 156, 155, 160, 255, 110, 112, 125, 255, 68, 75, 96, 255, 46, 52, 76, 255, 37, 47, 69, 255, 44, 51, 73, 255, 44, 53, 72, 255, 71, - 77, 97, 255, 68, 73, 93, 255, 74, 80, 97, 255, 74, 77, 91, 255, 98, 96, 104, 255, 200, 192, 195, 255, 226, 218, 214, 255, 234, 225, - 221, 255, 242, 234, 230, 255, 249, 242, 238, 255, 248, 244, 242, 255, 240, 236, 235, 255, 236, 233, 229, 255, 228, 225, 221, 255, 228, 222, 218, - 255, 226, 221, 217, 255, 223, 217, 214, 255, 212, 205, 202, 255, 190, 182, 179, 255, 181, 173, 169, 255, 190, 182, 179, 255, 201, 192, 189, 255, - 210, 199, 199, 255, 206, 197, 196, 255, 177, 172, 173, 255, 71, 70, 76, 255, 46, 43, 58, 255, 43, 41, 57, 255, 37, 36, 51, 255, 41, - 37, 49, 255, 61, 57, 68, 255, 86, 85, 92, 255, 110, 107, 112, 255, 128, 123, 127, 255, 130, 125, 126, 255, 78, 73, 74, 255, 33, 28, - 31, 255, 21, 13, 16, 255, 14, 6, 10, 255, 40, 42, 56, 255, 56, 61, 74, 255, 75, 80, 91, 255, 79, 84, 92, 255, 85, 86, 92, - 255, 114, 111, 113, 255, 136, 129, 129, 255, 156, 148, 145, 255, 168, 161, 155, 255, 173, 165, 160, 255, 171, 163, 160, 255, 169, 161, 159, 255, - 180, 172, 171, 255, 173, 168, 168, 255, 155, 152, 158, 255, 118, 116, 128, 255, 74, 76, 94, 255, 46, 50, 72, 255, 30, 34, 56, 255, 33, - 39, 60, 255, 34, 39, 59, 255, 34, 43, 61, 255, 49, 56, 74, 255, 56, 62, 81, 255, 66, 69, 85, 255, 85, 85, 96, 255, 191, 185, - 190, 255, 228, 217, 217, 255, 230, 220, 215, 255, 234, 225, 219, 255, 240, 233, 227, 255, 247, 240, 235, 255, 245, 240, 238, 255, 235, 232, 228, - 255, 230, 227, 223, 255, 227, 222, 218, 255, 221, 214, 210, 255, 221, 216, 212, 255, 200, 194, 190, 255, 150, 142, 139, 255, 115, 107, 104, 255, - 105, 97, 93, 255, 103, 95, 91, 255, 108, 100, 97, 255, 156, 144, 146, 255, 211, 203, 202, 255, 201, 196, 196, 255, 129, 128, 131, 255, 87, - 83, 94, 255, 58, 54, 68, 255, 46, 43, 57, 255, 43, 39, 51, 255, 45, 43, 55, 255, 62, 61, 70, 255, 94, 93, 100, 255, 117, 116, - 118, 255, 105, 103, 103, 255, 83, 81, 81, 255, 65, 59, 62, 255, 22, 14, 18, 255, 13, 5, 9, 255, 46, 49, 60, 255, 53, 59, 69, - 255, 63, 69, 78, 255, 84, 90, 96, 255, 106, 108, 112, 255, 122, 119, 122, 255, 137, 130, 130, 255, 142, 134, 131, 255, 150, 143, 137, 255, - 167, 161, 157, 255, 177, 171, 169, 255, 175, 170, 169, 255, 165, 159, 163, 255, 143, 142, 147, 255, 108, 109, 120, 255, 75, 76, 94, 255, 48, - 49, 71, 255, 32, 32, 55, 255, 22, 27, 47, 255, 27, 31, 50, 255, 33, 39, 55, 255, 35, 40, 57, 255, 47, 51, 67, 255, 54, 55, - 68, 255, 88, 84, 92, 255, 188, 181, 184, 255, 225, 215, 213, 255, 236, 223, 218, 255, 238, 227, 219, 255, 238, 227, 219, 255, 234, 226, 218, - 255, 243, 235, 227, 255, 240, 235, 230, 255, 232, 227, 223, 255, 222, 216, 213, 255, 227, 222, 218, 255, 213, 208, 204, 255, 190, 184, 180, 255, - 129, 121, 118, 255, 91, 80, 77, 255, 95, 85, 82, 255, 92, 84, 80, 255, 70, 62, 59, 255, 61, 54, 52, 255, 52, 42, 44, 255, 97, - 90, 89, 255, 207, 201, 201, 255, 191, 187, 189, 255, 141, 135, 141, 255, 105, 99, 109, 255, 60, 54, 66, 255, 41, 38, 50, 255, 44, 44, - 55, 255, 72, 74, 85, 255, 118, 120, 128, 255, 139, 142, 145, 255, 145, 145, 145, 255, 129, 126, 127, 255, 83, 78, 81, 255, 50, 42, 46, - 255, 38, 33, 36, 255, 43, 47, 58, 255, 69, 75, 84, 255, 91, 98, 105, 255, 105, 111, 116, 255, 120, 122, 126, 255, 136, 134, 135, 255, - 151, 145, 144, 255, 164, 157, 153, 255, 163, 155, 151, 255, 159, 153, 150, 255, 162, 158, 157, 255, 164, 162, 163, 255, 150, 147, 154, 255, 118, - 118, 129, 255, 82, 84, 100, 255, 48, 51, 73, 255, 36, 39, 62, 255, 37, 34, 57, 255, 35, 42, 59, 255, 41, 49, 65, 255, 43, 50, - 66, 255, 51, 53, 69, 255, 106, 105, 117, 255, 160, 154, 159, 255, 211, 201, 198, 255, 225, 215, 209, 255, 231, 220, 213, 255, 236, 223, 215, - 255, 237, 226, 217, 255, 235, 225, 215, 255, 238, 228, 218, 255, 233, 224, 215, 255, 232, 225, 219, 255, 230, 224, 218, 255, 219, 213, 208, 255, - 212, 207, 203, 255, 196, 190, 187, 255, 143, 137, 134, 255, 102, 94, 91, 255, 98, 86, 83, 255, 86, 74, 72, 255, 76, 67, 64, 255, 71, - 63, 60, 255, 66, 60, 57, 255, 54, 47, 48, 255, 43, 37, 36, 255, 140, 134, 132, 255, 212, 207, 206, 255, 153, 147, 148, 255, 123, 116, - 122, 255, 100, 94, 104, 255, 82, 79, 90, 255, 66, 66, 78, 255, 82, 83, 97, 255, 110, 115, 124, 255, 130, 137, 139, 255, 136, 138, 137, - 255, 114, 113, 113, 255, 62, 56, 59, 255, 28, 20, 24, 255, 14, 8, 11, 255, 45, 52, 64, 255, 68, 76, 86, 255, 82, 87, 95, 255, - 87, 89, 94, 255, 108, 110, 113, 255, 127, 127, 126, 255, 138, 137, 133, 255, 147, 143, 140, 255, 153, 146, 147, 255, 159, 153, 156, 255, 158, - 155, 157, 255, 147, 146, 153, 255, 131, 133, 147, 255, 100, 106, 124, 255, 64, 66, 88, 255, 39, 42, 62, 255, 28, 29, 49, 255, 23, 23, - 42, 255, 27, 27, 45, 255, 34, 38, 53, 255, 61, 70, 78, 255, 109, 113, 118, 255, 169, 165, 167, 255, 198, 188, 186, 255, 220, 207, 201, - 255, 228, 215, 208, 255, 231, 218, 211, 255, 235, 222, 215, 255, 237, 224, 214, 255, 241, 228, 219, 255, 235, 222, 212, 255, 229, 217, 208, 255, - 227, 216, 207, 255, 234, 225, 216, 255, 229, 220, 214, 255, 217, 209, 206, 255, 184, 176, 173, 255, 113, 106, 105, 255, 85, 76, 76, 255, 116, - 104, 105, 255, 101, 86, 87, 255, 88, 75, 75, 255, 67, 57, 56, 255, 68, 59, 58, 255, 59, 49, 51, 255, 56, 46, 48, 255, 72, 62, - 62, 255, 221, 211, 211, 255, 199, 187, 187, 255, 161, 152, 154, 255, 120, 114, 120, 255, 94, 89, 98, 255, 81, 79, 90, 255, 91, 91, 104, - 255, 118, 119, 128, 255, 138, 140, 143, 255, 142, 139, 142, 255, 116, 113, 116, 255, 78, 72, 76, 255, 48, 43, 46, 255, 28, 20, 24, 255, - 62, 66, 79, 255, 53, 59, 70, 255, 76, 81, 90, 255, 107, 108, 115, 255, 118, 119, 123, 255, 128, 128, 127, 255, 135, 135, 130, 255, 136, - 132, 129, 255, 138, 133, 134, 255, 136, 132, 135, 255, 133, 132, 133, 255, 132, 132, 139, 255, 115, 118, 133, 255, 82, 90, 108, 255, 52, 57, - 78, 255, 36, 39, 57, 255, 33, 34, 50, 255, 32, 33, 51, 255, 39, 37, 52, 255, 68, 70, 83, 255, 111, 117, 123, 255, 153, 154, 157, - 255, 197, 191, 191, 255, 211, 200, 197, 255, 216, 202, 196, 255, 215, 201, 194, 255, 218, 204, 198, 255, 228, 215, 208, 255, 240, 227, 218, 255, - 242, 229, 220, 255, 231, 219, 209, 255, 229, 216, 207, 255, 231, 219, 209, 255, 228, 218, 208, 255, 219, 210, 204, 255, 208, 200, 196, 255, 146, - 138, 135, 255, 70, 64, 62, 255, 87, 78, 77, 255, 100, 88, 90, 255, 90, 77, 77, 255, 80, 68, 67, 255, 64, 55, 54, 255, 62, 55, - 54, 255, 60, 52, 54, 255, 53, 45, 47, 255, 74, 65, 64, 255, 208, 199, 198, 255, 205, 194, 192, 255, 172, 163, 163, 255, 143, 133, 136, - 255, 117, 111, 115, 255, 104, 100, 110, 255, 102, 101, 111, 255, 117, 117, 125, 255, 140, 139, 141, 255, 150, 146, 149, 255, 138, 135, 138, 255, - 109, 103, 106, 255, 83, 77, 80, 255, 62, 54, 57, 255, 41, 41, 54, 255, 56, 61, 72, 255, 78, 82, 91, 255, 100, 103, 109, 255, 125, - 126, 130, 255, 139, 139, 138, 255, 149, 148, 144, 255, 163, 159, 156, 255, 168, 165, 166, 255, 163, 161, 164, 255, 149, 150, 151, 255, 133, 136, - 142, 255, 105, 109, 122, 255, 74, 82, 99, 255, 49, 56, 75, 255, 35, 39, 56, 255, 33, 35, 50, 255, 48, 47, 63, 255, 71, 68, 82, - 255, 95, 94, 104, 255, 132, 133, 137, 255, 172, 170, 170, 255, 201, 193, 190, 255, 214, 203, 198, 255, 223, 210, 202, 255, 232, 219, 210, 255, - 233, 221, 211, 255, 232, 219, 210, 255, 234, 221, 212, 255, 231, 218, 208, 255, 222, 209, 200, 255, 224, 211, 202, 255, 226, 213, 203, 255, 219, - 209, 199, 255, 218, 209, 202, 255, 193, 185, 181, 255, 95, 87, 83, 255, 56, 50, 49, 255, 58, 49, 48, 255, 55, 43, 45, 255, 46, 34, - 36, 255, 74, 63, 65, 255, 64, 56, 57, 255, 62, 56, 57, 255, 65, 60, 61, 255, 60, 54, 55, 255, 73, 66, 65, 255, 211, 204, 203, - 255, 206, 197, 194, 255, 179, 171, 168, 255, 162, 152, 151, 255, 139, 134, 134, 255, 121, 119, 124, 255, 127, 126, 133, 255, 144, 143, 149, 255, - 154, 153, 154, 255, 145, 142, 145, 255, 124, 120, 123, 255, 89, 83, 86, 255, 79, 73, 76, 255, 78, 70, 74, 255, 43, 43, 57, 255, 51, - 54, 65, 255, 77, 81, 90, 255, 101, 103, 110, 255, 125, 126, 130, 255, 134, 134, 133, 255, 146, 145, 141, 255, 155, 151, 148, 255, 156, 153, - 154, 255, 163, 162, 165, 255, 151, 154, 155, 255, 131, 135, 141, 255, 102, 108, 121, 255, 76, 84, 101, 255, 55, 63, 81, 255, 48, 53, 68, - 255, 50, 52, 66, 255, 66, 65, 78, 255, 97, 93, 103, 255, 132, 129, 134, 255, 169, 167, 167, 255, 190, 184, 180, 255, 204, 196, 189, 255, - 222, 212, 203, 255, 233, 220, 211, 255, 234, 221, 212, 255, 242, 230, 220, 255, 241, 228, 219, 255, 233, 220, 211, 255, 226, 213, 204, 255, 229, - 216, 206, 255, 222, 209, 200, 255, 222, 209, 199, 255, 212, 202, 192, 255, 210, 201, 194, 255, 200, 192, 188, 255, 140, 132, 129, 255, 75, 69, - 68, 255, 65, 57, 56, 255, 51, 39, 41, 255, 44, 34, 35, 255, 69, 62, 63, 255, 68, 63, 64, 255, 61, 56, 57, 255, 65, 62, 63, - 255, 63, 60, 61, 255, 79, 75, 73, 255, 215, 208, 207, 255, 211, 205, 201, 255, 193, 186, 185, 255, 176, 168, 167, 255, 132, 127, 127, 255, - 97, 94, 98, 255, 105, 104, 109, 255, 131, 130, 135, 255, 133, 132, 133, 255, 129, 126, 129, 255, 117, 113, 116, 255, 80, 74, 77, 255, 59, - 54, 57, 255, 47, 39, 42, 255, 45, 45, 59, 255, 71, 74, 85, 255, 87, 89, 98, 255, 108, 110, 117, 255, 126, 127, 130, 255, 142, 142, - 142, 255, 151, 152, 148, 255, 152, 151, 148, 255, 157, 155, 156, 255, 157, 158, 158, 255, 160, 164, 163, 255, 146, 151, 155, 255, 128, 135, 146, - 255, 108, 117, 132, 255, 86, 95, 108, 255, 77, 82, 95, 255, 50, 52, 65, 255, 48, 48, 59, 255, 86, 83, 90, 255, 124, 120, 123, 255, - 166, 157, 155, 255, 193, 184, 179, 255, 217, 207, 200, 255, 227, 216, 206, 255, 232, 220, 208, 255, 235, 223, 211, 255, 240, 228, 216, 255, 239, - 227, 215, 255, 236, 224, 212, 255, 224, 212, 201, 255, 222, 210, 198, 255, 217, 205, 193, 255, 215, 202, 193, 255, 217, 205, 198, 255, 220, 208, - 203, 255, 218, 208, 203, 255, 206, 197, 194, 255, 135, 127, 126, 255, 92, 83, 84, 255, 77, 67, 69, 255, 74, 66, 69, 255, 71, 63, 67, - 255, 78, 72, 75, 255, 63, 57, 60, 255, 74, 71, 72, 255, 70, 68, 68, 255, 168, 164, 162, 255, 211, 207, 205, 255, 209, 203, 200, 255, - 196, 189, 188, 255, 160, 153, 156, 255, 133, 128, 133, 255, 125, 123, 130, 255, 126, 129, 137, 255, 131, 133, 141, 255, 160, 160, 162, 255, 146, - 143, 146, 255, 116, 113, 115, 255, 76, 71, 72, 255, 70, 65, 66, 255, 76, 68, 72, 255, 46, 46, 60, 255, 52, 56, 67, 255, 77, 79, - 88, 255, 104, 107, 114, 255, 124, 125, 130, 255, 142, 141, 143, 255, 152, 153, 151, 255, 169, 168, 166, 255, 172, 173, 174, 255, 165, 167, 167, - 255, 160, 162, 162, 255, 146, 148, 151, 255, 133, 135, 141, 255, 109, 116, 126, 255, 89, 96, 108, 255, 83, 85, 100, 255, 77, 77, 90, 255, - 90, 88, 98, 255, 122, 118, 124, 255, 164, 158, 160, 255, 185, 175, 173, 255, 197, 188, 182, 255, 217, 205, 198, 255, 221, 208, 199, 255, 228, - 215, 205, 255, 236, 224, 214, 255, 240, 227, 218, 255, 239, 226, 217, 255, 233, 223, 213, 255, 230, 219, 210, 255, 221, 211, 201, 255, 213, 202, - 193, 255, 210, 197, 187, 255, 207, 196, 189, 255, 218, 207, 200, 255, 217, 208, 201, 255, 218, 207, 202, 255, 199, 189, 184, 255, 163, 153, 150, - 255, 121, 110, 110, 255, 92, 84, 87, 255, 65, 57, 60, 255, 69, 63, 66, 255, 67, 62, 65, 255, 75, 72, 73, 255, 120, 118, 118, 255, - 199, 195, 193, 255, 212, 208, 206, 255, 216, 210, 207, 255, 199, 192, 192, 255, 146, 140, 143, 255, 94, 89, 95, 255, 83, 81, 90, 255, 108, - 108, 120, 255, 134, 135, 145, 255, 144, 144, 150, 255, 141, 140, 143, 255, 114, 113, 115, 255, 83, 81, 81, 255, 57, 54, 54, 255, 40, 33, - 37, 255, 37, 40, 51, 255, 67, 71, 82, 255, 76, 79, 90, 255, 102, 104, 113, 255, 120, 121, 130, 255, 143, 143, 148, 255, 152, 152, 153, - 255, 146, 146, 146, 255, 152, 154, 154, 255, 161, 164, 163, 255, 164, 166, 166, 255, 163, 165, 165, 255, 156, 157, 158, 255, 125, 129, 137, 255, - 92, 97, 108, 255, 69, 69, 85, 255, 71, 72, 84, 255, 90, 89, 98, 255, 131, 127, 133, 255, 154, 149, 150, 255, 178, 170, 168, 255, 193, - 184, 179, 255, 206, 195, 189, 255, 220, 207, 198, 255, 225, 215, 205, 255, 230, 219, 209, 255, 234, 224, 214, 255, 236, 226, 216, 255, 235, 225, - 215, 255, 235, 225, 215, 255, 232, 222, 212, 255, 225, 214, 204, 255, 221, 207, 200, 255, 225, 215, 205, 255, 224, 214, 204, 255, 223, 215, 205, - 255, 208, 197, 191, 255, 200, 188, 183, 255, 184, 171, 169, 255, 155, 144, 143, 255, 128, 120, 122, 255, 112, 103, 109, 255, 69, 62, 67, 255, - 97, 91, 94, 255, 114, 112, 112, 255, 152, 150, 150, 255, 206, 202, 201, 255, 213, 209, 208, 255, 207, 201, 197, 255, 183, 176, 176, 255, 136, - 130, 134, 255, 118, 114, 120, 255, 126, 125, 134, 255, 140, 141, 152, 255, 148, 149, 159, 255, 140, 139, 145, 255, 115, 114, 116, 255, 67, 66, - 69, 255, 32, 29, 30, 255, 35, 33, 33, 255, 48, 43, 44, 255, 40, 43, 54, 255, 37, 42, 51, 255, 56, 59, 70, 255, 80, 83, 94, - 255, 101, 103, 112, 255, 123, 123, 129, 255, 140, 142, 143, 255, 162, 162, 162, 255, 163, 166, 164, 255, 166, 169, 169, 255, 164, 167, 166, 255, - 158, 161, 159, 255, 150, 151, 152, 255, 143, 146, 153, 255, 143, 147, 158, 255, 133, 135, 150, 255, 114, 116, 129, 255, 99, 101, 110, 255, 88, - 86, 92, 255, 106, 103, 106, 255, 139, 135, 134, 255, 181, 175, 172, 255, 204, 195, 190, 255, 209, 199, 192, 255, 215, 203, 196, 255, 221, 209, - 202, 255, 226, 214, 207, 255, 226, 215, 208, 255, 234, 225, 217, 255, 229, 221, 213, 255, 228, 219, 211, 255, 223, 213, 206, 255, 221, 208, 201, - 255, 223, 212, 203, 255, 216, 206, 196, 255, 211, 203, 192, 255, 207, 198, 193, 255, 198, 185, 183, 255, 181, 168, 167, 255, 157, 147, 147, 255, - 137, 129, 132, 255, 103, 93, 100, 255, 65, 58, 65, 255, 133, 128, 131, 255, 153, 151, 152, 255, 174, 172, 173, 255, 200, 196, 195, 255, 203, - 199, 198, 255, 200, 194, 191, 255, 142, 136, 136, 255, 80, 75, 78, 255, 115, 112, 117, 255, 138, 139, 145, 255, 147, 147, 155, 255, 135, 134, - 142, 255, 119, 120, 124, 255, 88, 85, 88, 255, 53, 49, 52, 255, 22, 17, 18, 255, 14, 10, 10, 255, 11, 7, 7, 255, 16, 15, 27, - 255, 22, 24, 35, 255, 49, 53, 66, 255, 92, 96, 108, 255, 119, 121, 131, 255, 125, 127, 133, 255, 134, 135, 138, 255, 153, 155, 157, 255, - 159, 161, 161, 255, 154, 156, 156, 255, 163, 166, 165, 255, 177, 180, 178, 255, 178, 178, 179, 255, 162, 163, 168, 255, 134, 136, 145, 255, 101, - 103, 117, 255, 76, 78, 92, 255, 49, 54, 65, 255, 44, 46, 53, 255, 85, 86, 90, 255, 133, 132, 134, 255, 136, 133, 132, 255, 177, 170, - 169, 255, 194, 186, 181, 255, 202, 191, 185, 255, 216, 204, 198, 255, 219, 207, 201, 255, 222, 210, 204, 255, 226, 214, 209, 255, 224, 213, 206, - 255, 232, 221, 213, 255, 223, 212, 204, 255, 224, 213, 205, 255, 215, 206, 198, 255, 211, 203, 196, 255, 207, 201, 195, 255, 199, 187, 187, 255, - 181, 169, 172, 255, 140, 126, 133, 255, 109, 95, 104, 255, 91, 75, 89, 255, 59, 44, 60, 255, 48, 35, 52, 255, 82, 72, 87, 255, 138, - 132, 138, 255, 168, 162, 167, 255, 190, 184, 187, 255, 186, 181, 183, 255, 174, 166, 167, 255, 139, 135, 137, 255, 119, 117, 120, 255, 128, 127, - 131, 255, 156, 155, 156, 255, 145, 144, 147, 255, 128, 125, 130, 255, 81, 77, 83, 255, 58, 50, 54, 255, 62, 54, 58, 255, 43, 35, 37, - 255, 19, 12, 13, 255, 11, 6, 7, 255, 23, 22, 35, 255, 32, 34, 46, 255, 73, 77, 91, 255, 95, 99, 113, 255, 98, 101, 112, 255, - 113, 117, 124, 255, 135, 138, 143, 255, 146, 150, 151, 255, 156, 157, 159, 255, 172, 174, 174, 255, 164, 166, 166, 255, 159, 161, 161, 255, 155, - 157, 159, 255, 155, 157, 160, 255, 147, 149, 155, 255, 138, 138, 152, 255, 110, 112, 127, 255, 93, 98, 112, 255, 70, 73, 83, 255, 92, 95, - 103, 255, 91, 90, 97, 255, 105, 102, 105, 255, 117, 111, 113, 255, 156, 147, 147, 255, 167, 159, 156, 255, 187, 178, 175, 255, 206, 197, 194, - 255, 219, 210, 206, 255, 224, 212, 207, 255, 225, 213, 208, 255, 223, 211, 206, 255, 216, 204, 199, 255, 220, 208, 203, 255, 207, 198, 193, 255, - 193, 185, 182, 255, 181, 174, 174, 255, 150, 136, 144, 255, 100, 84, 97, 255, 75, 59, 75, 255, 69, 52, 72, 255, 60, 42, 67, 255, 54, - 38, 64, 255, 50, 36, 62, 255, 84, 72, 93, 255, 167, 159, 170, 255, 144, 137, 144, 255, 150, 144, 149, 255, 150, 144, 147, 255, 138, 131, - 132, 255, 129, 125, 128, 255, 117, 116, 119, 255, 139, 137, 142, 255, 144, 144, 146, 255, 132, 131, 133, 255, 105, 101, 104, 255, 71, 66, 69, - 255, 63, 55, 59, 255, 31, 23, 27, 255, 35, 28, 29, 255, 36, 29, 30, 255, 13, 8, 9, 255, 30, 29, 45, 255, 44, 43, 59, 255, - 58, 59, 77, 255, 66, 69, 87, 255, 90, 94, 109, 255, 108, 113, 125, 255, 128, 132, 140, 255, 146, 150, 156, 255, 143, 147, 151, 255, 139, - 143, 145, 255, 148, 152, 154, 255, 156, 161, 160, 255, 148, 149, 151, 255, 146, 148, 148, 255, 149, 152, 156, 255, 164, 165, 174, 255, 154, 157, - 168, 255, 133, 137, 146, 255, 109, 115, 123, 255, 70, 73, 80, 255, 55, 54, 62, 255, 77, 75, 80, 255, 91, 88, 91, 255, 89, 82, 83, - 255, 88, 80, 76, 255, 131, 123, 120, 255, 183, 175, 172, 255, 198, 190, 187, 255, 204, 196, 191, 255, 199, 191, 185, 255, 181, 173, 167, 255, - 194, 186, 181, 255, 194, 185, 182, 255, 171, 164, 162, 255, 141, 135, 139, 255, 147, 141, 147, 255, 140, 128, 144, 255, 69, 54, 74, 255, 75, - 59, 83, 255, 80, 63, 92, 255, 79, 62, 92, 255, 88, 73, 103, 255, 80, 66, 95, 255, 136, 124, 148, 255, 192, 181, 199, 255, 138, 130, - 142, 255, 153, 147, 152, 255, 153, 148, 148, 255, 129, 125, 125, 255, 101, 98, 101, 255, 101, 101, 103, 255, 103, 99, 105, 255, 121, 117, 122, - 255, 115, 111, 116, 255, 91, 85, 90, 255, 70, 64, 67, 255, 30, 22, 24, 255, 41, 34, 35, 255, 38, 31, 32, 255, 23, 16, 15, 255, - 31, 26, 27, 255, 30, 29, 45, 255, 40, 39, 55, 255, 35, 36, 54, 255, 44, 48, 65, 255, 74, 80, 94, 255, 92, 98, 109, 255, 91, - 97, 106, 255, 100, 105, 111, 255, 122, 125, 130, 255, 136, 139, 143, 255, 143, 147, 149, 255, 145, 149, 150, 255, 142, 146, 147, 255, 141, 145, - 146, 255, 156, 158, 161, 255, 169, 170, 175, 255, 169, 169, 177, 255, 154, 156, 165, 255, 121, 126, 135, 255, 86, 90, 96, 255, 72, 73, 79, - 255, 55, 55, 58, 255, 53, 49, 52, 255, 52, 47, 47, 255, 91, 86, 83, 255, 110, 104, 101, 255, 134, 129, 125, 255, 154, 148, 145, 255, - 156, 150, 145, 255, 122, 116, 113, 255, 108, 102, 99, 255, 151, 145, 143, 255, 128, 121, 121, 255, 126, 119, 123, 255, 103, 97, 105, 255, 135, - 128, 141, 255, 205, 194, 213, 255, 117, 104, 129, 255, 92, 77, 108, 255, 98, 82, 116, 255, 100, 85, 118, 255, 95, 80, 112, 255, 123, 109, - 138, 255, 171, 158, 182, 255, 153, 142, 161, 255, 127, 118, 132, 255, 172, 166, 171, 255, 159, 154, 155, 255, 121, 117, 117, 255, 101, 98, 101, - 255, 68, 66, 68, 255, 74, 70, 75, 255, 55, 50, 56, 255, 56, 51, 54, 255, 68, 63, 65, 255, 38, 31, 32, 255, 40, 33, 34, 255, - 32, 24, 25, 255, 25, 19, 18, 255, 45, 38, 37, 255, 19, 15, 15, 255, 27, 24, 39, 255, 27, 26, 40, 255, 42, 41, 56, 255, 46, - 47, 61, 255, 54, 56, 67, 255, 48, 49, 61, 255, 50, 52, 64, 255, 76, 78, 89, 255, 84, 86, 95, 255, 107, 108, 116, 255, 126, 129, - 134, 255, 127, 131, 134, 255, 137, 138, 142, 255, 146, 146, 152, 255, 142, 142, 147, 255, 139, 139, 144, 255, 147, 145, 152, 255, 138, 138, 147, - 255, 113, 116, 122, 255, 81, 84, 92, 255, 48, 48, 53, 255, 25, 23, 25, 255, 29, 24, 27, 255, 34, 27, 28, 255, 48, 41, 40, 255, - 63, 59, 57, 255, 94, 92, 90, 255, 126, 124, 122, 255, 110, 107, 105, 255, 136, 130, 131, 255, 147, 138, 141, 255, 149, 138, 141, 255, 102, - 93, 97, 255, 95, 86, 92, 255, 94, 85, 98, 255, 106, 95, 112, 255, 156, 142, 163, 255, 175, 159, 185, 255, 115, 98, 129, 255, 139, 122, - 157, 255, 144, 125, 160, 255, 147, 130, 161, 255, 147, 130, 158, 255, 125, 110, 133, 255, 94, 83, 101, 255, 122, 114, 125, 255, 185, 179, 184, - 255, 176, 172, 172, 255, 141, 135, 139, 255, 92, 87, 90, 255, 59, 54, 57, 255, 46, 40, 44, 255, 44, 36, 42, 255, 27, 19, 22, 255, - 32, 24, 28, 255, 53, 45, 49, 255, 22, 14, 16, 255, 21, 13, 15, 255, 23, 18, 19, 255, 23, 18, 19, 255, 40, 33, 34, 255, 28, - 24, 35, 255, 46, 44, 55, 255, 32, 31, 42, 255, 18, 18, 28, 255, 26, 26, 35, 255, 22, 22, 31, 255, 27, 25, 37, 255, 33, 32, - 44, 255, 33, 33, 46, 255, 73, 74, 85, 255, 86, 88, 97, 255, 92, 94, 102, 255, 115, 117, 125, 255, 105, 107, 116, 255, 77, 79, 88, - 255, 74, 75, 82, 255, 79, 78, 88, 255, 80, 82, 88, 255, 53, 55, 64, 255, 54, 57, 63, 255, 24, 23, 27, 255, 24, 21, 24, 255, - 26, 20, 23, 255, 33, 25, 27, 255, 47, 40, 41, 255, 78, 74, 75, 255, 83, 83, 83, 255, 93, 93, 93, 255, 121, 120, 120, 255, 151, - 147, 148, 255, 175, 166, 168, 255, 171, 161, 162, 255, 124, 115, 115, 255, 76, 68, 70, 255, 64, 53, 64, 255, 94, 85, 98, 255, 100, 87, - 107, 255, 112, 98, 123, 255, 114, 99, 129, 255, 119, 105, 136, 255, 112, 98, 126, 255, 96, 84, 108, 255, 92, 80, 102, 255, 90, 79, 97, - 255, 90, 81, 94, 255, 147, 139, 147, 255, 198, 192, 196, 255, 184, 179, 180, 255, 138, 133, 136, 255, 99, 93, 96, 255, 51, 46, 49, 255, - 41, 35, 38, 255, 30, 21, 25, 255, 25, 17, 21, 255, 15, 7, 11, 255, 21, 13, 14, 255, 38, 30, 32, 255, 23, 16, 17, 255, 16, - 11, 12, 255, 16, 11, 11, 255, 13, 8, 9, 255, 41, 36, 43, 255, 21, 18, 24, 255, 24, 22, 28, 255, 24, 22, 28, 255, 25, 22, - 30, 255, 23, 19, 27, 255, 25, 21, 31, 255, 27, 23, 35, 255, 28, 28, 41, 255, 42, 42, 55, 255, 47, 48, 59, 255, 54, 55, 67, - 255, 46, 45, 55, 255, 42, 40, 52, 255, 48, 47, 58, 255, 44, 43, 52, 255, 35, 34, 41, 255, 19, 18, 24, 255, 55, 54, 60, 255, - 32, 30, 38, 255, 25, 22, 27, 255, 30, 25, 28, 255, 31, 23, 27, 255, 30, 20, 21, 255, 72, 65, 66, 255, 69, 64, 65, 255, 88, - 88, 88, 255, 75, 78, 78, 255, 130, 131, 133, 255, 168, 166, 166, 255, 191, 185, 183, 255, 193, 184, 180, 255, 179, 171, 167, 255, 119, 113, - 110, 255, 85, 76, 82, 255, 82, 73, 81, 255, 86, 72, 86, 255, 81, 67, 87, 255, 86, 71, 94, 255, 84, 72, 94, 255, 93, 83, 102, - 255, 93, 83, 99, 255, 85, 76, 89, 255, 111, 103, 113, 255, 138, 131, 139, 255, 196, 190, 194, 255, 204, 199, 200, 255, 186, 181, 181, 255, - 138, 130, 131, 255, 87, 79, 81, 255, 61, 53, 55, 255, 41, 34, 35, 255, 34, 26, 30, 255, 30, 22, 25, 255, 28, 21, 22, 255, 18, - 11, 12, 255, 12, 5, 6, 255, 17, 9, 11, 255, 14, 9, 10, 255, 14, 9, 10, 255, 11, 3, 5, 255, 24, 18, 23, 255, 24, 18, - 24, 255, 24, 19, 24, 255, 22, 19, 24, 255, 25, 18, 24, 255, 25, 17, 25, 255, 20, 12, 21, 255, 23, 16, 27, 255, 25, 24, 33, - 255, 38, 38, 47, 255, 37, 38, 46, 255, 20, 20, 28, 255, 24, 21, 29, 255, 33, 29, 38, 255, 33, 29, 38, 255, 26, 22, 29, 255, - 20, 16, 22, 255, 28, 22, 29, 255, 34, 29, 35, 255, 16, 10, 17, 255, 17, 12, 17, 255, 19, 14, 17, 255, 22, 14, 18, 255, 57, - 48, 50, 255, 64, 56, 60, 255, 81, 75, 78, 255, 74, 73, 76, 255, 86, 90, 92, 255, 149, 151, 153, 255, 176, 175, 175, 255, 198, 192, - 190, 255, 206, 197, 192, 255, 206, 197, 189, 255, 185, 176, 170, 255, 163, 153, 155, 255, 142, 131, 136, 255, 140, 128, 135, 255, 133, 123, 132, - 255, 111, 101, 111, 255, 96, 88, 98, 255, 110, 105, 115, 255, 95, 89, 98, 255, 105, 100, 108, 255, 145, 141, 146, 255, 182, 176, 180, 255, - 212, 207, 208, 255, 202, 197, 198, 255, 170, 163, 167, 255, 99, 92, 93, 255, 45, 38, 39, 255, 24, 16, 17, 255, 35, 27, 29, 255, 32, - 25, 27, 255, 22, 15, 16, 255, 16, 8, 9, 255, 12, 6, 4, 255, 11, 3, 5, 255, 12, 4, 5, 255, 13, 8, 8, 255, 13, 9, - 9, 255, 14, 9, 9, 255, 24, 16, 19, 255, 22, 14, 18, 255, 24, 17, 20, 255, 22, 14, 18, 255, 25, 15, 19, 255, 22, 13, 17, - 255, 24, 16, 21, 255, 26, 18, 23, 255, 32, 28, 32, 255, 31, 27, 31, 255, 18, 13, 18, 255, 22, 18, 22, 255, 27, 20, 24, 255, - 27, 20, 24, 255, 31, 23, 28, 255, 25, 18, 22, 255, 18, 10, 15, 255, 45, 36, 41, 255, 22, 14, 18, 255, 17, 9, 12, 255, 19, - 13, 14, 255, 16, 10, 11, 255, 27, 22, 23, 255, 54, 49, 50, 255, 61, 56, 57, 255, 62, 56, 57, 255, 46, 43, 46, 255, 64, 69, - 70, 255, 132, 133, 137, 255, 169, 168, 169, 255, 202, 197, 196, 255, 211, 205, 201, 255, 214, 206, 199, 255, 212, 203, 197, 255, 206, 194, 195, - 255, 196, 185, 186, 255, 195, 183, 186, 255, 187, 177, 179, 255, 172, 162, 165, 255, 162, 158, 160, 255, 140, 135, 142, 255, 105, 100, 109, 255, - 144, 139, 146, 255, 189, 186, 188, 255, 205, 201, 201, 255, 207, 202, 203, 255, 193, 185, 187, 255, 142, 134, 136, 255, 85, 75, 76, 255, 52, - 42, 44, 255, 29, 20, 19, 255, 18, 12, 11, 255, 16, 12, 10, 255, 27, 23, 22, 255, 18, 13, 14, 255, 9, 4, 4, 255, 12, 4, - 6, 255, 11, 3, 5, 255, 9, 4, 5, 255, 11, 6, 7, 255, 11, 7, 7, 255, 23, 13, 15, 255, 24, 14, 16, 255, 27, 17, 19, - 255, 25, 15, 16, 255, 23, 13, 15, 255, 23, 14, 15, 255, 24, 16, 17, 255, 26, 18, 19, 255, 26, 18, 20, 255, 22, 14, 15, 255, - 22, 14, 15, 255, 23, 15, 16, 255, 25, 16, 17, 255, 30, 22, 23, 255, 24, 15, 16, 255, 23, 15, 16, 255, 22, 13, 15, 255, 52, - 43, 45, 255, 19, 11, 12, 255, 19, 10, 12, 255, 21, 11, 13, 255, 20, 10, 12, 255, 30, 23, 24, 255, 56, 49, 50, 255, 40, 34, - 35, 255, 36, 28, 29, 255, 40, 37, 40, 255, 65, 69, 70, 255, 113, 114, 118, 255, 148, 146, 149, 255, 191, 187, 188, 255, 204, 198, 197, - 255, 211, 204, 199, 255, 207, 197, 194, 255, 214, 202, 203, 255, 222, 209, 209, 255, 217, 201, 204, 255, 208, 194, 196, 255, 199, 188, 190, 255, - 189, 182, 184, 255, 160, 155, 162, 255, 110, 105, 115, 255, 147, 143, 149, 255, 187, 184, 185, 255, 203, 198, 199, 255, 197, 192, 193, 255, 147, - 140, 141, 255, 79, 70, 72, 255, 38, 26, 28, 255, 25, 15, 16, 255, 26, 17, 16, 255, 19, 12, 11, 255, 12, 8, 6, 255, 10, 6, - 4, 255, 18, 14, 14, 255, 20, 15, 16, 255, 10, 3, 4, 255, 11, 4, 5, 255, 9, 4, 5, 255, 9, 4, 5, 255, 11, 6, 7, - 255, 20, 10, 12, 255, 23, 14, 15, 255, 25, 15, 17, 255, 22, 12, 14, 255, 25, 13, 15, 255, 26, 14, 15, 255, 26, 16, 17, 255, - 29, 19, 21, 255, 26, 15, 17, 255, 26, 14, 16, 255, 24, 12, 14, 255, 23, 11, 13, 255, 25, 13, 15, 255, 27, 15, 17, 255, 28, - 16, 18, 255, 27, 15, 16, 255, 28, 16, 18, 255, 57, 45, 47, 255, 25, 13, 14, 255, 28, 16, 18, 255, 24, 14, 16, 255, 24, 14, - 16, 255, 29, 20, 21, 255, 41, 33, 34, 255, 31, 22, 23, 255, 35, 25, 27, 255, 48, 43, 47, 255, 62, 63, 66, 255, 91, 92, 99, - 255, 132, 131, 137, 255, 165, 161, 165, 255, 174, 168, 169, 255, 199, 192, 191, 255, 205, 196, 196, 255, 209, 199, 198, 255, 210, 200, 199, 255, - 221, 208, 210, 255, 212, 201, 202, 255, 199, 189, 190, 255, 173, 167, 169, 255, 130, 125, 132, 255, 100, 94, 104, 255, 116, 112, 118, 255, 171, - 169, 170, 255, 188, 183, 184, 255, 171, 167, 167, 255, 102, 94, 96, 255, 49, 41, 42, 255, 50, 38, 40, 255, 16, 6, 8, 255, 13, 5, - 4, 255, 15, 9, 7, 255, 17, 13, 12, 255, 14, 10, 8, 255, 9, 4, 5, 255, 15, 10, 10, 255, 16, 11, 11, 255, 9, 4, 5, - 255, 11, 3, 5, 255, 11, 3, 4, 255, 12, 4, 6, 255, 21, 10, 9, 255, 24, 13, 13, 255, 26, 15, 14, 255, 23, 12, 11, 255, - 23, 12, 12, 255, 26, 15, 14, 255, 26, 15, 15, 255, 28, 19, 18, 255, 25, 12, 12, 255, 26, 12, 12, 255, 25, 11, 11, 255, 25, - 11, 11, 255, 23, 12, 12, 255, 27, 16, 16, 255, 26, 15, 15, 255, 23, 11, 11, 255, 26, 15, 14, 255, 55, 44, 43, 255, 21, 10, - 9, 255, 29, 17, 19, 255, 28, 14, 17, 255, 28, 16, 18, 255, 35, 23, 25, 255, 28, 19, 20, 255, 28, 18, 20, 255, 34, 24, 26, - 255, 37, 31, 34, 255, 55, 55, 58, 255, 64, 65, 73, 255, 76, 75, 82, 255, 113, 110, 114, 255, 137, 132, 135, 255, 172, 166, 166, 255, - 181, 174, 175, 255, 188, 182, 181, 255, 198, 193, 192, 255, 194, 190, 191, 255, 179, 173, 174, 255, 172, 166, 167, 255, 149, 146, 147, 255, 91, - 87, 93, 255, 75, 70, 79, 255, 82, 77, 84, 255, 114, 112, 113, 255, 131, 126, 127, 255, 96, 91, 92, 255, 45, 38, 39, 255, 25, 18, - 19, 255, 27, 15, 17, 255, 40, 31, 32, 255, 20, 11, 11, 255, 10, 3, 2, 255, 10, 6, 4, 255, 15, 11, 9, 255, 15, 10, 11, - 255, 9, 4, 5, 255, 13, 8, 9, 255, 11, 6, 7, 255, 13, 5, 7, 255, 12, 5, 6, 255, 11, 3, 4, 255, 19, 8, 8, 255, - 23, 12, 11, 255, 24, 13, 12, 255, 22, 10, 10, 255, 24, 10, 10, 255, 25, 12, 12, 255, 26, 13, 13, 255, 27, 13, 13, 255, 26, - 12, 12, 255, 24, 10, 10, 255, 24, 10, 10, 255, 26, 12, 12, 255, 22, 11, 10, 255, 24, 13, 13, 255, 24, 13, 13, 255, 23, 12, - 11, 255, 26, 13, 13, 255, 55, 43, 43, 255, 22, 11, 11, 255, 20, 11, 10, 255, 21, 9, 11, 255, 26, 14, 16, 255, 29, 17, 18, - 255, 26, 14, 16, 255, 28, 15, 19, 255, 25, 15, 19, 255, 36, 28, 32, 255, 35, 32, 35, 255, 32, 28, 36, 255, 48, 44, 52, 255, - 52, 50, 57, 255, 74, 70, 77, 255, 95, 90, 92, 255, 132, 127, 128, 255, 140, 135, 136, 255, 157, 154, 154, 255, 129, 126, 127, 255, 109, - 106, 107, 255, 118, 116, 116, 255, 86, 83, 85, 255, 64, 60, 65, 255, 68, 63, 70, 255, 57, 52, 59, 255, 60, 56, 61, 255, 61, 56, - 59, 255, 35, 30, 31, 255, 20, 15, 16, 255, 11, 5, 6, 255, 19, 10, 9, 255, 14, 5, 4, 255, 22, 13, 13, 255, 10, 3, 2, - 255, 9, 5, 3, 255, 9, 5, 3, 255, 13, 9, 8, 255, 11, 7, 5, 255, 10, 5, 6, 255, 10, 5, 6, 255, 9, 4, 5, 255, - 9, 4, 5, 255, 11, 3, 5, 255, 22, 11, 10, 255, 25, 14, 14, 255, 24, 13, 12, 255, 22, 11, 10, 255, 20, 9, 9, 255, 22, - 10, 10, 255, 21, 10, 9, 255, 22, 11, 10, 255, 21, 10, 9, 255, 23, 12, 11, 255, 24, 13, 12, 255, 23, 12, 11, 255, 22, 11, - 10, 255, 22, 11, 10, 255, 22, 11, 11, 255, 22, 11, 10, 255, 21, 7, 7, 255, 46, 35, 34, 255, 23, 12, 11, 255, 16, 7, 6, - 255, 22, 11, 10, 255, 24, 12, 12, 255, 24, 13, 13, 255, 24, 13, 13, 255, 22, 11, 11, 255, 22, 10, 11, 255, 27, 17, 17, 255, - 23, 13, 13, 255, 20, 12, 15, 255, 18, 10, 15, 255, 26, 20, 24, 255, 42, 38, 41, 255, 53, 45, 49, 255, 58, 52, 55, 255, 83, - 77, 80, 255, 91, 85, 88, 255, 81, 76, 79, 255, 60, 55, 58, 255, 64, 58, 61, 255, 51, 45, 48, 255, 48, 42, 47, 255, 38, 32, - 36, 255, 27, 21, 25, 255, 24, 17, 23, 255, 22, 17, 19, 255, 18, 13, 14, 255, 20, 15, 16, 255, 10, 6, 4, 255, 9, 4, 2, - 255, 14, 9, 8, 255, 10, 5, 4, 255, 10, 5, 4, 255, 9, 5, 3, 255, 9, 5, 3, 255, 8, 4, 2, 255, 9, 5, 3, 255, - 9, 4, 5, 255, 9, 4, 5, 255, 10, 5, 6, 255, 10, 5, 6, 255, 11, 3, 5, 255, 23, 12, 11, 255, 25, 14, 13, 255, 22, - 10, 10, 255, 21, 10, 9, 255, 19, 8, 7, 255, 21, 10, 10, 255, 22, 11, 11, 255, 26, 14, 14, 255, 20, 9, 8, 255, 23, 12, - 11, 255, 23, 11, 11, 255, 17, 6, 5, 255, 19, 8, 7, 255, 18, 7, 6, 255, 17, 6, 6, 255, 16, 5, 4, 255, 18, 4, 4, - 255, 27, 16, 15, 255, 25, 14, 13, 255, 11, 3, 2, 255, 13, 4, 3, 255, 14, 5, 5, 255, 15, 7, 6, 255, 15, 6, 5, 255, - 16, 5, 4, 255, 18, 7, 7, 255, 18, 7, 6, 255, 17, 5, 5, 255, 12, 2, 3, 255, 8, 1, 2, 255, 13, 8, 9, 255, 29, - 24, 25, 255, 24, 15, 19, 255, 25, 17, 21, 255, 42, 34, 38, 255, 31, 26, 29, 255, 37, 31, 34, 255, 26, 21, 24, 255, 29, 24, - 27, 255, 23, 18, 21, 255, 20, 14, 18, 255, 13, 7, 10, 255, 8, 2, 5, 255, 10, 4, 8, 255, 11, 6, 8, 255, 10, 5, 6, - 255, 13, 9, 7, 255, 15, 11, 9, 255, 9, 5, 3, 255, 8, 4, 3, 255, 15, 11, 9, 255, 10, 6, 5, 255, 9, 5, 3, 255, - 9, 5, 3, 255, 9, 5, 3, 255, 9, 5, 3, 255, 9, 5, 3, 255, 9, 5, 3, 255, 11, 7, 5, 255, 11, 7, 5, 255, 11, - 3, 5, 255, 23, 12, 11, 255, 23, 12, 11, 255, 20, 9, 8, 255, 19, 7, 7, 255, 16, 7, 6, 255, 16, 7, 6, 255, 20, 11, - 10, 255, 21, 12, 11, 255, 16, 7, 7, 255, 18, 9, 8, 255, 17, 8, 8, 255, 14, 5, 4, 255, 17, 6, 5, 255, 16, 5, 4, - 255, 17, 6, 5, 255, 16, 5, 4, 255, 18, 4, 4, 255, 16, 5, 4, 255, 15, 4, 4, 255, 12, 3, 2, 255, 11, 3, 0, 255, - 13, 5, 1, 255, 13, 5, 1, 255, 14, 6, 3, 255, 15, 4, 3, 255, 15, 4, 3, 255, 15, 4, 3, 255, 15, 4, 3, 255, 12, - 3, 4, 255, 10, 2, 3, 255, 12, 4, 6, 255, 27, 20, 21, 255, 13, 3, 5, 255, 20, 10, 12, 255, 25, 18, 19, 255, 13, 6, - 7, 255, 16, 9, 10, 255, 14, 6, 7, 255, 15, 7, 8, 255, 18, 10, 12, 255, 14, 7, 9, 255, 12, 4, 7, 255, 10, 1, 5, - 255, 11, 3, 4, 255, 10, 5, 6, 255, 9, 5, 3, 255, 11, 7, 5, 255, 8, 5, 1, 255, 11, 7, 6, 255, 8, 4, 2, 255, - 8, 4, 2, 255, 13, 9, 8, 255, 10, 6, 4, 255, 9, 5, 3, 255, 9, 5, 3, 255, 9, 5, 3, 255, 9, 5, 3, 255, 9, - 5, 3, 255, 10, 6, 4, 255, 10, 6, 4, 255, 11, 3, 5, -}; diff --git a/include/input_mappings.hpp b/include/input_mappings.hpp deleted file mode 100644 index a17cb1de..00000000 --- a/include/input_mappings.hpp +++ /dev/null @@ -1,127 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#include "helpers.hpp" -#include "services/hid.hpp" - -struct InputMappings { - using Scancode = u32; - using Container = std::unordered_map; - - u32 getMapping(Scancode scancode) const { - auto it = container.find(scancode); - return it != container.end() ? it->second : HID::Keys::Null; - } - - void setMapping(Scancode scancode, u32 key) { container[scancode] = key; } - - template - void serialize(const std::filesystem::path& path, const std::string& frontend, ScancodeToString scancodeToString) const { - toml::basic_value data; - - std::error_code error; - if (std::filesystem::exists(path, error)) { - try { - data = toml::parse(path); - } catch (const std::exception& ex) { - Helpers::warn("Exception trying to parse mappings file. Exception: %s\n", ex.what()); - return; - } - } else { - if (error) { - Helpers::warn("Filesystem error accessing %s (error: %s)\n", path.string().c_str(), error.message().c_str()); - } - printf("Saving new mappings file %s\n", path.string().c_str()); - } - - data["Metadata"]["Name"] = name.empty() ? "Unnamed Mappings" : name; - data["Metadata"]["Device"] = device.empty() ? "Unknown Device" : device; - data["Metadata"]["Frontend"] = frontend; - - data["Mappings"] = toml::table{}; - - for (const auto& [scancode, key] : container) { - const std::string& keyName = HID::Keys::keyToName(key); - if (!data["Mappings"].contains(keyName)) { - data["Mappings"][keyName] = toml::array{}; - } - data["Mappings"][keyName].push_back(scancodeToString(scancode)); - } - - std::ofstream file(path, std::ios::out); - file << data; - } - - template - static std::optional deserialize( - const std::filesystem::path& path, const std::string& wantFrontend, ScancodeFromString stringToScancode - ) { - toml::basic_value data; - std::error_code error; - - if (!std::filesystem::exists(path, error)) { - if (error) { - Helpers::warn("Filesystem error accessing %s (error: %s)\n", path.string().c_str(), error.message().c_str()); - } - - return std::nullopt; - } - - InputMappings mappings; - - try { - data = toml::parse(path); - - const auto metadata = toml::find(data, "Metadata"); - mappings.name = toml::find_or(metadata, "Name", "Unnamed Mappings"); - mappings.device = toml::find_or(metadata, "Device", "Unknown Device"); - - std::string haveFrontend = toml::find_or(metadata, "Frontend", "Unknown Frontend"); - - bool equal = std::equal(haveFrontend.begin(), haveFrontend.end(), wantFrontend.begin(), wantFrontend.end(), [](char a, char b) { - return std::tolower(a) == std::tolower(b); - }); - - if (!equal) { - Helpers::warn( - "Mappings file %s was created for frontend %s, but we are using frontend %s\n", path.string().c_str(), haveFrontend.c_str(), - wantFrontend.c_str() - ); - - return std::nullopt; - } - } catch (const std::exception& ex) { - Helpers::warn("Exception trying to parse config file. Exception: %s\n", ex.what()); - return std::nullopt; - } - - const auto& mappingsTable = toml::find_or(data, "Mappings", toml::table{}); - for (const auto& [keyName, scancodes] : mappingsTable) { - for (const auto& scancodeVal : scancodes.as_array()) { - std::string scancodeStr = scancodeVal.as_string(); - mappings.setMapping(stringToScancode(scancodeStr), HID::Keys::nameToKey(keyName)); - } - } - - return mappings; - } - - static InputMappings defaultKeyboardMappings(); - - auto begin() { return container.begin(); } - auto end() { return container.end(); } - - auto begin() const { return container.begin(); } - auto end() const { return container.end(); } - - private: - Container container; - std::string name; - std::string device; -}; diff --git a/include/ios_driver.h b/include/ios_driver.h deleted file mode 100644 index 85b3be2c..00000000 --- a/include/ios_driver.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#include -#include -#include - -void iosCreateEmulator(); -void iosLoadROM(NSString* pathNS); -void iosRunFrame(CAMetalLayer* layer); -void iosSetOutputSize(uint32_t width, uint32_t height); \ No newline at end of file diff --git a/include/ipc.hpp b/include/ipc.hpp index 07a77f02..67a8897e 100644 --- a/include/ipc.hpp +++ b/include/ipc.hpp @@ -2,19 +2,8 @@ #include namespace IPC { - namespace BufferType { - enum : std::uint32_t { - Send = 1, - Receive = 2, - }; - } - constexpr std::uint32_t responseHeader(std::uint32_t commandID, std::uint32_t normalResponses, std::uint32_t translateResponses) { // TODO: Maybe validate the response count stuff fits in 6 bits return (commandID << 16) | (normalResponses << 6) | translateResponses; } - - constexpr std::uint32_t pointerHeader(std::uint32_t index, std::uint32_t size, std::uint32_t type) { - return (size << 14) | (index << 10) | (type << 1); - } -} // namespace IPC \ No newline at end of file +} \ No newline at end of file diff --git a/include/kernel/config_mem.hpp b/include/kernel/config_mem.hpp index 7d1890a0..71f46390 100644 --- a/include/kernel/config_mem.hpp +++ b/include/kernel/config_mem.hpp @@ -8,7 +8,6 @@ namespace ConfigMem { KernelVersionMajor = 0x1FF80003, SyscoreVer = 0x1FF80010, EnvInfo = 0x1FF80014, - PrevFirm = 0x1FF80016, AppMemAlloc = 0x1FF80040, FirmUnknown = 0x1FF80060, FirmRevision = 0x1FF80061, @@ -20,7 +19,6 @@ namespace ConfigMem { HardwareType = 0x1FF81004, Datetime0 = 0x1FF81020, WifiMac = 0x1FF81060, - WifiLevel = 0x1FF81066, NetworkState = 0x1FF81067, SliderState3D = 0x1FF81080, LedState3D = 0x1FF81084, @@ -31,11 +29,6 @@ namespace ConfigMem { // Shows what type of hardware we're running on namespace HardwareCodes { - enum : u8 { - Product = 1, - Devboard = 2, - Debugger = 3, - Capture = 4, - }; + enum : u8 { Product = 1, Devboard = 2, Debugger = 3, Capture = 4 }; } } // namespace ConfigMem diff --git a/include/kernel/handles.hpp b/include/kernel/handles.hpp index 158c7501..746f51c6 100644 --- a/include/kernel/handles.hpp +++ b/include/kernel/handles.hpp @@ -1,7 +1,7 @@ #pragma once #include "helpers.hpp" -using HorizonHandle = u32; +using Handle = u32; namespace KernelHandles { enum : u32 { @@ -19,16 +19,12 @@ namespace KernelHandles { CECD, // More Streetpass stuff? CFG_U, // CFG service (Console & region info) CFG_I, - CFG_S, // Used by most system apps in lieu of cfg:u - CFG_NOR, // Used by system settings app - CSND, // Plays audio directly from PCM samples DLP_SRVR, // Download Play: Server. Used for network play. DSP, // DSP service (Used for audio decoding and output) HID, // HID service (Handles input-related things including gyro. Does NOT handle New3DS controls or CirclePadPro) HTTP, // HTTP service (Handles HTTP requests) IR_USER, // One of 3 infrared communication services - FRD_A, // Friend service (Miiverse friend service) - FRD_U, + FRD, // Friend service (Miiverse friend service) FS, // Filesystem service GPU, // GPU service LCD, // LCD service (Used for configuring the displays) @@ -38,15 +34,8 @@ namespace KernelHandles { NFC, // NFC (Duh), used for Amiibo NIM, // Updates, DLC, etc NDM, // ????? - NS_S, // Nintendo Shell service - NWM_EXT, // ????? - NWM_UDS, // Local multiplayer - NEWS_S, // news:u on steroids - NEWS_U, // This service literally has 1 command (AddNotification) - PTM_U, // PTM service (Used for accessing various console info, such as battery, shell and pedometer state) - PTM_SYSM, // PTM system service - PTM_PLAY, // PTM Play service, used for retrieving play history - PTM_GETS, // PTM RTC service (GetSystemTime) + NEWS_U, // This service literally has 1 command (AddNotification) and I don't even understand what it does + PTM, // PTM service (Used for accessing various console info, such as battery, shell and pedometer state) SOC, // Socket service SSL, // SSL service (Totally didn't expect that) Y2R, // Also does camera stuff @@ -56,8 +45,6 @@ namespace KernelHandles { GSPSharedMemHandle = MaxServiceHandle + 1, // Handle for the GSP shared memory FontSharedMemHandle, - CSNDSharedMemHandle, - APTCaptureSharedMemHandle, // Shared memory for display capture info, HIDSharedMemHandle, MinSharedMemHandle = GSPSharedMemHandle, @@ -65,17 +52,17 @@ namespace KernelHandles { }; // Returns whether "handle" belongs to one of the OS services - static constexpr bool isServiceHandle(HorizonHandle handle) { + static constexpr bool isServiceHandle(Handle handle) { return handle >= MinServiceHandle && handle <= MaxServiceHandle; } // Returns whether "handle" belongs to one of the OS services' shared memory areas - static constexpr bool isSharedMemHandle(HorizonHandle handle) { + static constexpr bool isSharedMemHandle(Handle handle) { return handle >= MinSharedMemHandle && handle <= MaxSharedMemHandle; } // Returns the name of a handle as a string based on the given handle - static const char* getServiceName(HorizonHandle handle) { + static const char* getServiceName(Handle handle) { switch (handle) { case AC: return "AC"; case ACT: return "ACT"; @@ -86,16 +73,12 @@ namespace KernelHandles { case CECD: return "CECD"; case CFG_U: return "CFG:U"; case CFG_I: return "CFG:I"; - case CFG_S: return "CFG:S"; - case CFG_NOR: return "CFG:NOR"; - case CSND: return "CSND"; case DSP: return "DSP"; case DLP_SRVR: return "DLP::SRVR"; case HID: return "HID"; case HTTP: return "HTTP"; case IR_USER: return "IR:USER"; - case FRD_A: return "FRD:A"; - case FRD_U: return "FRD:U"; + case FRD: return "FRD"; case FS: return "FS"; case GPU: return "GSP::GPU"; case LCD: return "GSP::LCD"; @@ -103,20 +86,14 @@ namespace KernelHandles { case MCU_HWC: return "MCU::HWC"; case MIC: return "MIC"; case NDM: return "NDM"; - case NEWS_S: return "NEWS_S"; case NEWS_U: return "NEWS_U"; - case NWM_EXT: return "nwm::EXT"; - case NWM_UDS: return "nwm::UDS"; case NFC: return "NFC"; case NIM: return "NIM"; - case PTM_U: return "PTM:U"; - case PTM_SYSM: return "PTM:SYSM"; - case PTM_PLAY: return "PTM:PLAY"; - case PTM_GETS: return "PTM:GETS"; + case PTM: return "PTM"; case SOC: return "SOC"; case SSL: return "SSL"; case Y2R: return "Y2R"; default: return "Unknown"; } } -} +} \ No newline at end of file diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index 3d801c7a..3d4b6917 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -15,12 +15,8 @@ #include "services/service_manager.hpp" class CPU; -class LuaManager; -struct Scheduler; class Kernel { - using Handle = HorizonHandle; - std::span regs; CPU& cpu; Memory& mem; @@ -40,7 +36,6 @@ class Kernel { std::vector objects; std::vector portHandles; std::vector mutexHandles; - std::vector timerHandles; // Thread indices, sorted by priority std::vector threadIndices; @@ -48,12 +43,12 @@ class Kernel { Handle currentProcess; Handle mainThread; int currentThreadIndex; - Handle srvHandle; // Handle for the special service manager port "srv:" - Handle errorPortHandle; // Handle for the err:f port used for displaying errors + Handle srvHandle; // Handle for the special service manager port "srv:" + Handle errorPortHandle; // Handle for the err:f port used for displaying errors u32 arbiterCount; - u32 threadCount; // How many threads in our thread pool have been used as of now (Up to 32) - u32 aliveThreadCount; // How many of these threads are actually alive? + u32 threadCount; // How many threads in our thread pool have been used as of now (Up to 32) + u32 aliveThreadCount; // How many of these threads are actually alive? ServiceManager serviceManager; // Top 8 bits are the major version, bottom 8 are the minor version @@ -66,32 +61,18 @@ class Kernel { Handle makeProcess(u32 id); Handle makePort(const char* name); Handle makeSession(Handle port); - Handle makeThread(u32 entrypoint, u32 initialSP, u32 priority, ProcessorID id, u32 arg, ThreadStatus status = ThreadStatus::Dormant); + Handle makeThread(u32 entrypoint, u32 initialSP, u32 priority, ProcessorID id, u32 arg,ThreadStatus status = ThreadStatus::Dormant); Handle makeMemoryBlock(u32 addr, u32 size, u32 myPermission, u32 otherPermission); - public: - // Needs to be public to be accessible to the APT/HID services - Handle makeEvent(ResetType resetType, Event::CallbackType callback = Event::CallbackType::None); - // Needs to be public to be accessible to the APT/DSP services - Handle makeMutex(bool locked = false); - // Needs to be public to be accessible to the service manager port - Handle makeSemaphore(u32 initialCount, u32 maximumCount); +public: + Handle makeEvent(ResetType resetType); // Needs to be public to be accessible to the APT/HID services + Handle makeMutex(bool locked = false); // Needs to be public to be accessible to the APT/DSP services + Handle makeSemaphore(u32 initialCount, u32 maximumCount); // Needs to be public to be accessible to the service manager port Handle makeTimer(ResetType resetType); - void pollTimers(); // Signals an event, returns true on success or false if the event does not exist bool signalEvent(Handle e); - // Run the callback for "special" events that have callbacks - void runEventCallback(Event::CallbackType callback); - - void clearEvent(Handle e) { - KernelObject* object = getObject(e, KernelObjectType::Event); - if (object != nullptr) { - object->getData()->fired = false; - } - } - - private: +private: void signalArbiter(u32 waitingAddress, s32 threadCount); void sleepThread(s64 ns); void sleepThreadOnArbiter(u32 waitingAddress); @@ -104,7 +85,7 @@ class Kernel { void releaseMutex(Mutex* moo); void cancelTimer(Timer* timer); void signalTimer(Handle timerHandle, Timer* timer); - u64 getWakeupTick(s64 ns); + void updateTimer(Handle timerHandle, Timer* timer); // Wake up the thread with the highest priority out of all threads in the waitlist // Returns the index of the woken up thread @@ -147,7 +128,6 @@ class Kernel { void duplicateHandle(); void exitThread(); void mapMemoryBlock(); - void unmapMemoryBlock(); void queryMemory(); void getCurrentProcessorNumber(); void getProcessID(); @@ -157,7 +137,6 @@ class Kernel { void getResourceLimitCurrentValues(); void getSystemInfo(); void getSystemTick(); - void getThreadContext(); void getThreadID(); void getThreadIdealProcessor(); void getThreadPriority(); @@ -176,8 +155,6 @@ class Kernel { void svcSignalEvent(); void svcSetTimer(); void svcSleepThread(); - void svcInvalidateInstructionCacheRange(); - void svcInvalidateEntireInstructionCache(); void connectToPort(); void outputDebugString(); void waitSynchronization1(); @@ -199,8 +176,8 @@ class Kernel { void closeDirectory(u32 messagePointer, Handle directory); void readDirectory(u32 messagePointer, Handle directory); - public: - Kernel(CPU& cpu, Memory& mem, GPU& gpu, const EmulatorConfig& config, LuaManager& lua); +public: + Kernel(CPU& cpu, Memory& mem, GPU& gpu, const EmulatorConfig& config); void initializeFS() { return serviceManager.initializeFS(); } void setVersion(u8 major, u8 minor); void serviceSVC(u32 svc); @@ -225,7 +202,9 @@ class Kernel { return handleCounter++; } - std::vector& getObjects() { return objects; } + std::vector& getObjects() { + return objects; + } // Get pointer to the object with the specified handle KernelObject* getObject(Handle handle) { @@ -247,20 +226,7 @@ class Kernel { } ServiceManager& getServiceManager() { return serviceManager; } - Scheduler& getScheduler(); void sendGPUInterrupt(GPUInterrupt type) { serviceManager.sendGPUInterrupt(type); } - void clearInstructionCache(); - void clearInstructionCacheRange(u32 start, u32 size); - u32 getSharedFontVaddr(); - - // For debuggers: Returns information about the main process' (alive) threads in a vector for the frontend to display - std::vector getMainProcessThreads(); - - // For debuggers: Sets the entrypoint and initial SP for the main thread (thread 0) so that the debugger can display them - void setMainThreadEntrypointAndSP(u32 entrypoint, u32 initialSP) { - auto& t = threads[0]; - t.entrypoint = entrypoint; - t.initialSP = initialSP; - } + void signalDSPEvents() { serviceManager.signalDSPEvents(); } }; \ No newline at end of file diff --git a/include/kernel/kernel_types.hpp b/include/kernel/kernel_types.hpp index a3a60c34..53c60774 100644 --- a/include/kernel/kernel_types.hpp +++ b/include/kernel/kernel_types.hpp @@ -47,7 +47,7 @@ enum class ProcessorID : s32 { struct AddressArbiter {}; struct ResourceLimits { - HorizonHandle handle; + Handle handle; s32 currentCommit = 0; }; @@ -62,19 +62,11 @@ struct Process { }; struct Event { - // Some events (for now, only the DSP semaphore events) need to execute a callback when signalled - // This enum stores what kind of callback they should execute - enum class CallbackType : u32 { - None, DSPSemaphore, - }; - u64 waitlist; // A bitfield where each bit symbolizes if the thread with thread with the corresponding index is waiting on the event ResetType resetType = ResetType::OneShot; - CallbackType callback = CallbackType::None; bool fired = false; Event(ResetType resetType) : resetType(resetType), waitlist(0) {} - Event(ResetType resetType, CallbackType cb) : resetType(resetType), waitlist(0), callback(cb) {} }; struct Port { @@ -91,57 +83,56 @@ struct Port { }; struct Session { - using Handle = HorizonHandle; - - Handle portHandle; // The port this session is subscribed to - Session(Handle portHandle) : portHandle(portHandle) {} + Handle portHandle; // The port this session is subscribed to + Session(Handle portHandle) : portHandle(portHandle) {} }; enum class ThreadStatus { - Running, // Currently running - Ready, // Ready to run - WaitArbiter, // Waiting on an address arbiter - WaitSleep, // Waiting due to a SleepThread SVC - WaitSync1, // Waiting for the single object in the wait list to be ready - WaitSyncAny, // Wait for one object of the many that might be in the wait list to be ready - WaitSyncAll, // Waiting for ALL sync objects in its wait list to be ready - WaitIPC, // Waiting for the reply from an IPC request - Dormant, // Created but not yet made ready - Dead // Run to completion, or forcefully terminated + Running, // Currently running + Ready, // Ready to run + WaitArbiter, // Waiting on an address arbiter + WaitSleep, // Waiting due to a SleepThread SVC + WaitSync1, // Waiting for the single object in the wait list to be ready + WaitSyncAny, // Wait for one object of the many that might be in the wait list to be ready + WaitSyncAll, // Waiting for ALL sync objects in its wait list to be ready + WaitIPC, // Waiting for the reply from an IPC request + Dormant, // Created but not yet made ready + Dead // Run to completion, or forcefully terminated }; struct Thread { - using Handle = HorizonHandle; + u32 initialSP; // Initial r13 value + u32 entrypoint; // Initial r15 value + u32 priority; + u32 arg; + ProcessorID processorID; + ThreadStatus status; + Handle handle; // OS handle for this thread + int index; // Index of the thread. 0 for the first thread, 1 for the second, and so on - u32 initialSP; // Initial r13 value - u32 entrypoint; // Initial r15 value - u32 priority; - u32 arg; - ProcessorID processorID; - ThreadStatus status; - Handle handle; // OS handle for this thread - int index; // Index of the thread. 0 for the first thread, 1 for the second, and so on + // The waiting address for threads that are waiting on an AddressArbiter + u32 waitingAddress; - // The waiting address for threads that are waiting on an AddressArbiter - u32 waitingAddress; + // The nanoseconds until a thread wakes up from being asleep or from timing out while waiting on an arbiter + u64 waitingNanoseconds; + // The tick this thread went to sleep on + u64 sleepTick; + // For WaitSynchronization(N): A vector of objects this thread is waiting for + std::vector waitList; + // For WaitSynchronizationN: Shows whether the object should wait for all objects in the wait list or just one + bool waitAll; + // For WaitSynchronizationN: The "out" pointer + u32 outPointer; - // For WaitSynchronization(N): A vector of objects this thread is waiting for - std::vector waitList; - // For WaitSynchronizationN: Shows whether the object should wait for all objects in the wait list or just one - bool waitAll; - // For WaitSynchronizationN: The "out" pointer - u32 outPointer; - u64 wakeupTick; + // Thread context used for switching between threads + std::array gprs; + std::array fprs; // Stored as u32 because dynarmic does it + u32 cpsr; + u32 fpscr; + u32 tlsBase; // Base pointer for thread-local storage - // Thread context used for switching between threads - std::array gprs; - std::array fprs; // Stored as u32 because dynarmic does it - u32 cpsr; - u32 fpscr; - u32 tlsBase; // Base pointer for thread-local storage - - // A list of threads waiting for this thread to terminate. Yes, threads are sync objects too. - u64 threadsWaitingForTermination; + // A list of threads waiting for this thread to terminate. Yes, threads are sync objects too. + u64 threadsWaitingForTermination; }; static const char* kernelObjectTypeToString(KernelObjectType t) { @@ -165,8 +156,6 @@ static const char* kernelObjectTypeToString(KernelObjectType t) { } struct Mutex { - using Handle = HorizonHandle; - u64 waitlist; // Refer to the getWaitlist function below for documentation Handle ownerThread = 0; // Index of the thread that holds the mutex if it's locked Handle handle; // Handle of the mutex itself @@ -188,12 +177,13 @@ struct Timer { u64 waitlist; // Refer to the getWaitlist function below for documentation ResetType resetType = ResetType::OneShot; - u64 fireTick; // CPU tick the timer will be fired + u64 startTick; // CPU tick the timer started + u64 currentDelay; // Number of ns until the timer fires next time u64 interval; // Number of ns until the timer fires for the second and future times bool fired; // Has this timer been signalled? bool running; // Is this timer running or stopped? - Timer(ResetType type) : resetType(type), fireTick(0), interval(0), waitlist(0), fired(false), running(false) {} + Timer(ResetType type) : resetType(type), startTick(0), currentDelay(0), interval(0), waitlist(0), fired(false), running(false) {} }; struct MemoryBlock { @@ -209,8 +199,6 @@ struct MemoryBlock { // Generic kernel object class struct KernelObject { - using Handle = HorizonHandle; - Handle handle = 0; // A u32 the OS will use to identify objects void* data = nullptr; KernelObjectType type; diff --git a/include/kernel/resource_limits.hpp b/include/kernel/resource_limits.hpp index fe1154ff..85f1a59b 100644 --- a/include/kernel/resource_limits.hpp +++ b/include/kernel/resource_limits.hpp @@ -19,7 +19,7 @@ struct ResourceLimitValues { // APPLICATION resource limit static constexpr ResourceLimitValues appResourceLimits = { .maxPriority = 0x18, - .maxCommit = 64_MB + 16_MB, // We're currently giving 80MB to all apps. TODO: Implement extended memory properly + .maxCommit = 0x4000000, .maxThreads = 0x20, .maxEvents = 0x20, .maxMutexes = 0x20, @@ -33,7 +33,7 @@ static constexpr ResourceLimitValues appResourceLimits = { // SYS_APPLET resource limit static constexpr ResourceLimitValues sysAppletResourceLimits = { .maxPriority = 0x4, - .maxCommit = 0x5E00000 - 16_MB, + .maxCommit = 0x5E00000, .maxThreads = 0x1D, .maxEvents = 0xB, .maxMutexes = 0x8, diff --git a/include/loader/ncch.hpp b/include/loader/ncch.hpp index 92ad5040..7f0ff37f 100644 --- a/include/loader/ncch.hpp +++ b/include/loader/ncch.hpp @@ -36,7 +36,6 @@ struct NCCH { }; u64 partitionIndex = 0; - u64 programID = 0; u64 fileOffset = 0; bool isNew3DS = false; @@ -50,7 +49,6 @@ struct NCCH { static constexpr u64 mediaUnit = 0x200; u64 size = 0; // Size of NCCH converted to bytes - u64 saveDataSize = 0; u32 stackSize = 0; u32 bssSize = 0; u32 exheaderSize = 0; @@ -59,15 +57,13 @@ struct NCCH { FSInfo exeFS; FSInfo romFS; CodeSetInfo text, data, rodata; - FSInfo partitionInfo; - - std::optional primaryKey, secondaryKey; // Contents of the .code file in the ExeFS std::vector codeFile; + // Contains of the cart's save data + std::vector saveData; // The cart region. Only the CXI's region matters to us. Necessary to get past region locking std::optional region = std::nullopt; - std::vector smdh; // Returns true on success, false on failure // Partition index/offset/size must have been set before this @@ -77,7 +73,7 @@ struct NCCH { bool hasExeFS() { return exeFS.size != 0; } bool hasRomFS() { return romFS.size != 0; } bool hasCode() { return codeFile.size() != 0; } - bool hasSaveData() { return saveDataSize != 0; } + bool hasSaveData() { return saveData.size() != 0; } // Parse SMDH for region info and such. Returns false on failure, true on success bool parseSMDH(const std::vector &smdh); diff --git a/include/logger.hpp b/include/logger.hpp index 626025fa..c5a62ea9 100644 --- a/include/logger.hpp +++ b/include/logger.hpp @@ -2,10 +2,6 @@ #include #include -#ifdef __ANDROID__ -#include -#endif - namespace Log { // Our logger class template @@ -16,11 +12,7 @@ namespace Log { std::va_list args; va_start(args, fmt); -#ifdef __ANDROID__ - __android_log_vprint(ANDROID_LOG_DEFAULT, "Panda3DS", fmt, args); -#else std::vprintf(fmt, args); -#endif va_end(args); } }; @@ -36,7 +28,6 @@ namespace Log { static Logger gpuLogger; static Logger rendererLogger; static Logger shaderJITLogger; - static Logger dspLogger; // Service loggers static Logger acLogger; @@ -47,7 +38,6 @@ namespace Log { static Logger camLogger; static Logger cecdLogger; static Logger cfgLogger; - static Logger csndLogger; static Logger dspServiceLogger; static Logger dlpSrvrLogger; static Logger frdLogger; @@ -62,10 +52,8 @@ namespace Log { static Logger micLogger; static Logger newsLogger; static Logger nfcLogger; - static Logger nwmUdsLogger; static Logger nimLogger; static Logger ndmLogger; - static Logger nsLogger; static Logger ptmLogger; static Logger socLogger; static Logger sslLogger; @@ -91,4 +79,4 @@ namespace Log { #else #define MAKE_LOG_FUNCTION(functionName, logger) MAKE_LOG_FUNCTION_USER(functionName, logger) #endif -} \ No newline at end of file +} diff --git a/include/lua_manager.hpp b/include/lua_manager.hpp deleted file mode 100644 index c16292d6..00000000 --- a/include/lua_manager.hpp +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once -#include - -#include "helpers.hpp" - -// The kinds of events that can cause a Lua call. -// Frame: Call program on frame end -// TODO: Add more -enum class LuaEvent { - Frame, -}; - -class Emulator; - -#ifdef PANDA3DS_ENABLE_LUA -extern "C" { -#include -#include -#include - -#include "luajit.h" -} - -class LuaManager { - lua_State* L = nullptr; - bool initialized = false; - bool haveScript = false; - - void signalEventInternal(LuaEvent e); - - public: - // For Lua we must have some global pointers to our emulator objects to use them in script code via thunks. See the thunks in lua.cpp as an - // example - static Emulator* g_emulator; - - LuaManager(Emulator& emulator) { g_emulator = &emulator; } - - void close(); - void initialize(); - void initializeThunks(); - void loadFile(const char* path); - void loadString(const std::string& code); - - void reset(); - void signalEvent(LuaEvent e) { - if (haveScript) [[unlikely]] { - signalEventInternal(e); - } - } - - bool signalInterceptedService(const std::string& service, u32 function, u32 messagePointer, int callbackRef); - void removeInterceptedService(const std::string& service, u32 function, int callbackRef); -}; - -#else // Lua not enabled, Lua manager does nothing -class LuaManager { - public: - LuaManager(Emulator& emulator) {} - - void close() {} - void initialize() {} - void loadFile(const char* path) {} - void loadString(const std::string& code) {} - void reset() {} - void signalEvent(LuaEvent e) {} - bool signalInterceptedService(const std::string& service, u32 function, u32 messagePointer, int callbackRef) { return false; } - void removeInterceptedService(const std::string& service, u32 function, int callbackRef) {} -}; -#endif diff --git a/include/memory.hpp b/include/memory.hpp index b1dd09de..804d1e54 100644 --- a/include/memory.hpp +++ b/include/memory.hpp @@ -19,10 +19,7 @@ namespace PhysicalAddrs { VRAM = 0x18000000, VRAMEnd = VRAM + 0x005FFFFF, FCRAM = 0x20000000, - FCRAMEnd = FCRAM + 0x07FFFFFF, - - DSP_RAM = 0x1FF00000, - DSP_RAM_End = DSP_RAM + 0x0007FFFF + FCRAMEnd = FCRAM + 0x07FFFFFF }; } @@ -102,11 +99,9 @@ namespace KernelMemoryTypes { } class Memory { - using Handle = HorizonHandle; - u8* fcram; - u8* dspRam; // Provided to us by Audio - u8* vram; // Provided to the memory class by the GPU class + u8* dspRam; + u8* vram; // Provided to the memory class by the GPU class u64& cpuTicks; // Reference to the CPU tick counter using SharedMemoryBlock = KernelMemoryTypes::SharedMemoryBlock; @@ -117,12 +112,10 @@ class Memory { // This tracks our OS' memory allocations std::vector memoryInfo; - std::array sharedMemBlocks = { + std::array sharedMemBlocks = { SharedMemoryBlock(0, 0, KernelHandles::FontSharedMemHandle), // Shared memory for the system font (size is 0 because we read the size from the cmrc filesystem SharedMemoryBlock(0, 0x1000, KernelHandles::GSPSharedMemHandle), // GSP shared memory - SharedMemoryBlock(0, 0x1000, KernelHandles::HIDSharedMemHandle), // HID shared memory - SharedMemoryBlock(0, 0x3000, KernelHandles::CSNDSharedMemHandle), // CSND shared memory - SharedMemoryBlock(0, 0xE7000, KernelHandles::APTCaptureSharedMemHandle), // APT Capture Buffer memory + SharedMemoryBlock(0, 0x1000, KernelHandles::HIDSharedMemHandle) // HID shared memory }; public: @@ -132,7 +125,7 @@ public: static constexpr u32 totalPageCount = 1 << (32 - pageShift); static constexpr u32 FCRAM_SIZE = u32(128_MB); - static constexpr u32 FCRAM_APPLICATION_SIZE = u32(80_MB); + static constexpr u32 FCRAM_APPLICATION_SIZE = u32(64_MB); static constexpr u32 FCRAM_PAGE_COUNT = FCRAM_SIZE / pageSize; static constexpr u32 FCRAM_APPLICATION_PAGE_COUNT = FCRAM_APPLICATION_SIZE / pageSize; @@ -165,9 +158,7 @@ private: Regions region = Regions::USA; const EmulatorConfig& config; - static constexpr std::array MACAddress = {0x40, 0xF4, 0x07, 0xFF, 0xFF, 0xEE}; - - public: +public: u16 kernelVersion = 0; u32 usedUserMemory = u32(0_MB); // How much of the APPLICATION FCRAM range is used (allocated to the appcore) u32 usedSystemMemory = u32(0_MB); // Similar for the SYSTEM range (reserved for the syscore) @@ -215,14 +206,8 @@ private: } enum class BatteryLevel { - Empty = 0, - AlmostEmpty, - OneBar, - TwoBars, - ThreeBars, - FourBars, + Empty = 0, AlmostEmpty, OneBar, TwoBars, ThreeBars, FourBars }; - u8 getBatteryState(bool adapterConnected, bool charging, BatteryLevel batteryLevel) { u8 value = static_cast(batteryLevel) << 2; // Bits 2:4 are the battery level from 0 to 5 if (adapterConnected) value |= 1 << 0; // Bit 0 shows if the charger is connected @@ -286,17 +271,13 @@ private: // File handle for reading the loaded ncch IOFile CXIFile; - std::optional getProgramID(); - u8* getDSPMem() { return dspRam; } u8* getDSPDataMem() { return &dspRam[DSP_DATA_MEMORY_OFFSET]; } u8* getDSPCodeMem() { return &dspRam[DSP_CODE_MEMORY_OFFSET]; } u32 getUsedUserMem() { return usedUserMemory; } void setVRAM(u8* pointer) { vram = pointer; } - void setDSPMem(u8* pointer) { dspRam = pointer; } - bool allocateMainThreadStack(u32 size); Regions getConsoleRegion(); - void copySharedFont(u8* ptr, u32 vaddr); + void copySharedFont(u8* ptr); }; diff --git a/include/memory_mapped_file.hpp b/include/memory_mapped_file.hpp deleted file mode 100644 index e8314155..00000000 --- a/include/memory_mapped_file.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include -#include - -#include "helpers.hpp" -#include "mio/mio.hpp" - -// Minimal RAII wrapper over memory mapped files - -class MemoryMappedFile { - std::filesystem::path filePath = ""; // path of our file - mio::mmap_sink map; // mmap sink for our file - - u8* pointer = nullptr; // Pointer to the contents of the memory mapped file - bool opened = false; - - public: - bool exists() const { return opened; } - u8* data() const { return pointer; } - - std::error_code flush(); - MemoryMappedFile(); - MemoryMappedFile(const std::filesystem::path& path); - - ~MemoryMappedFile(); - // Returns true on success - bool open(const std::filesystem::path& path); - void close(); - - // TODO: For memory-mapped output files we'll need some more stuff such as a constructor that takes path/size/shouldCreate as parameters - - u8& operator[](size_t index) { return pointer[index]; } - const u8& operator[](size_t index) const { return pointer[index]; } - - auto begin() { return map.begin(); } - auto end() { return map.end(); } - auto cbegin() { return map.cbegin(); } - auto cend() { return map.cend(); } - - mio::mmap_sink& getSink() { return map; } -}; \ No newline at end of file diff --git a/include/metaprogramming.hpp b/include/metaprogramming.hpp index ebac93cb..e43decef 100644 --- a/include/metaprogramming.hpp +++ b/include/metaprogramming.hpp @@ -13,4 +13,4 @@ namespace Helpers { static constexpr void static_for(Func&& f) { static_for_impl(std::forward(f), std::make_integer_sequence{}); } -} // namespace Helpers \ No newline at end of file +} \ No newline at end of file diff --git a/include/panda_qt/about_window.hpp b/include/panda_qt/about_window.hpp deleted file mode 100644 index 78812d14..00000000 --- a/include/panda_qt/about_window.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include -#include -#include - -class AboutWindow : public QDialog { - Q_OBJECT - - public: - AboutWindow(QWidget* parent = nullptr); -}; \ No newline at end of file diff --git a/include/panda_qt/cheats_window.hpp b/include/panda_qt/cheats_window.hpp deleted file mode 100644 index 93228d5e..00000000 --- a/include/panda_qt/cheats_window.hpp +++ /dev/null @@ -1,90 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "emulator.hpp" - -class QListWidget; - -class CheatsWindow final : public QWidget { - Q_OBJECT - - public: - CheatsWindow(Emulator* emu, const std::filesystem::path& path, QWidget* parent = nullptr); - ~CheatsWindow() = default; - - private: - void addEntry(); - void removeClicked(); - - QListWidget* cheatList; - std::filesystem::path cheatPath; - Emulator* emu; -}; - -struct CheatMetadata { - u32 handle = Cheats::badCheatHandle; - std::string name = "New cheat"; - std::string code; - bool enabled = true; -}; - -class CheatEntryWidget : public QWidget { - Q_OBJECT - - public: - CheatEntryWidget(Emulator* emu, CheatMetadata metadata, QListWidget* parent); - - void Update() { - name->setText(metadata.name.c_str()); - enabled->setChecked(metadata.enabled); - update(); - } - - void Remove() { - emu->getCheats().removeCheat(metadata.handle); - cheatList->takeItem(cheatList->row(listItem)); - deleteLater(); - } - - const CheatMetadata& getMetadata() { return metadata; } - void setMetadata(const CheatMetadata& metadata) { this->metadata = metadata; } - - private: - void checkboxChanged(int state); - void editClicked(); - - Emulator* emu; - CheatMetadata metadata; - u32 handle; - QLabel* name; - QCheckBox* enabled; - QListWidget* cheatList; - QListWidgetItem* listItem; -}; - -class CheatEditDialog : public QDialog { - Q_OBJECT - - public: - CheatEditDialog(Emulator* emu, CheatEntryWidget& cheatEntry); - - void accepted(); - void rejected(); - - private: - Emulator* emu; - CheatEntryWidget& cheatEntry; - QTextEdit* codeEdit; - QLineEdit* nameEdit; -}; \ No newline at end of file diff --git a/include/panda_qt/config_window.hpp b/include/panda_qt/config_window.hpp deleted file mode 100644 index 1e9648de..00000000 --- a/include/panda_qt/config_window.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "emulator.hpp" -#include "frontend_settings.hpp" -#include "panda_qt/input_window.hpp" - -class ConfigWindow : public QDialog { - Q_OBJECT - - private: - using ConfigCallback = std::function; - using MainWindowCallback = std::function; - - using Theme = FrontendSettings::Theme; - using WindowIcon = FrontendSettings::WindowIcon; - - QTextEdit* helpText = nullptr; - QListWidget* widgetList = nullptr; - QStackedWidget* widgetContainer = nullptr; - InputWindow* inputWindow = nullptr; - - static constexpr size_t settingWidgetCount = 7; - std::array helpTexts; - - // The config class holds a copy of the emulator config which it edits and sends - // over to the emulator in a thread-safe manner - EmulatorConfig config; - - ConfigCallback updateConfig; - MainWindowCallback getMainWindow; - - void addWidget(QWidget* widget, QString title, QString icon, QString helpText); - void setTheme(FrontendSettings::Theme theme); - void setIcon(FrontendSettings::WindowIcon icon); - - QComboBox* createLanguageSelect(); - - public: - ConfigWindow(ConfigCallback configCallback, MainWindowCallback windowCallback, const EmulatorConfig& config, QWidget* parent = nullptr); - ~ConfigWindow(); - - EmulatorConfig& getConfig() { return config; } - InputWindow* getInputWindow() { return inputWindow; } - - private: - Emulator* emu; -}; diff --git a/include/panda_qt/cpu_debugger.hpp b/include/panda_qt/cpu_debugger.hpp deleted file mode 100644 index de04d22e..00000000 --- a/include/panda_qt/cpu_debugger.hpp +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include - -#include "capstone.hpp" -#include "emulator.hpp" -#include "panda_qt/disabled_widget_overlay.hpp" - -class CPUDebugger : public QWidget { - Q_OBJECT - Emulator* emu; - - QListWidget* disasmListWidget; - QScrollBar* verticalScrollBar; - QPlainTextEdit* registerTextEdit; - QTimer* updateTimer; - QLineEdit* addressInput; - - DisabledWidgetOverlay* disabledOverlay; - - bool enabled = false; - bool followPC = false; - Common::CapstoneDisassembler disassembler; - - public: - CPUDebugger(Emulator* emulator, QWidget* parent = nullptr); - void enable(); - void disable(); - - private: - // Update the state of the disassembler. Qt events should always call update, not updateDisasm/updateRegister - // As update properly handles thread safety - void update(); - void updateDisasm(); - void updateRegisters(); - void scrollToPC(); - - bool eventFilter(QObject* obj, QEvent* event) override; - void showEvent(QShowEvent* event) override; - void resizeEvent(QResizeEvent* event) override; - void keyPressEvent(QKeyEvent* event) override; -}; diff --git a/include/panda_qt/disabled_widget_overlay.hpp b/include/panda_qt/disabled_widget_overlay.hpp deleted file mode 100644 index 12e7c26e..00000000 --- a/include/panda_qt/disabled_widget_overlay.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include - -class DisabledWidgetOverlay : public QWidget { - Q_OBJECT - - public: - DisabledWidgetOverlay(QWidget *parent = nullptr, QString overlayText = tr("This widget is disabled")) : text(overlayText), QWidget(parent) { - setVisible(false); - } - - private: - QString text; - - void paintEvent(QPaintEvent *) override { - QPainter painter = QPainter(this); - painter.fillRect(rect(), QColor(60, 60, 60, 128)); - painter.setPen(Qt::gray); - - QFont font = painter.font(); - font.setBold(true); - font.setPointSize(18); - - painter.setFont(font); - painter.drawText(rect(), Qt::AlignCenter, text); - } -}; \ No newline at end of file diff --git a/include/panda_qt/dsp_debugger.hpp b/include/panda_qt/dsp_debugger.hpp deleted file mode 100644 index e0067690..00000000 --- a/include/panda_qt/dsp_debugger.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include - -#include "emulator.hpp" -#include "panda_qt/disabled_widget_overlay.hpp" - -class DSPDebugger : public QWidget { - Q_OBJECT - Emulator* emu; - - QListWidget* disasmListWidget; - QScrollBar* verticalScrollBar; - QPlainTextEdit* registerTextEdit; - QTimer* updateTimer; - QLineEdit* addressInput; - - DisabledWidgetOverlay* disabledOverlay; - DisabledWidgetOverlay* disabledRegisterEditOverlay; - - bool enabled = false; - bool followPC = false; - - public: - DSPDebugger(Emulator* emulator, QWidget* parent = nullptr); - void enable(); - void disable(); - - private: - // Get the full PC value of the DSP, including the current progrma page value - u32 getPC(); - - // Update the state of the disassembler. Qt events should always call update, not updateDisasm/updateRegister - // As update properly handles thread safety - void update(); - void updateDisasm(); - void updateRegisters(); - void scrollToPC(); - - bool eventFilter(QObject* obj, QEvent* event) override; - void showEvent(QShowEvent* event) override; - void resizeEvent(QResizeEvent* event) override; - void keyPressEvent(QKeyEvent* event) override; -}; diff --git a/include/panda_qt/elided_label.hpp b/include/panda_qt/elided_label.hpp deleted file mode 100644 index 9d937f9b..00000000 --- a/include/panda_qt/elided_label.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once -#include -#include -#include -#include - -class ElidedLabel : public QLabel { - Q_OBJECT - public: - explicit ElidedLabel(Qt::TextElideMode elideMode = Qt::ElideLeft, QWidget* parent = nullptr); - explicit ElidedLabel(QString text, Qt::TextElideMode elideMode = Qt::ElideLeft, QWidget* parent = nullptr); - void setText(QString text); - - protected: - void resizeEvent(QResizeEvent* event); - - private: - void updateText(); - QString m_text; - Qt::TextElideMode m_elideMode; -}; \ No newline at end of file diff --git a/include/panda_qt/input_window.hpp b/include/panda_qt/input_window.hpp deleted file mode 100644 index 7fe33912..00000000 --- a/include/panda_qt/input_window.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#include "input_mappings.hpp" - -class InputWindow : public QDialog { - Q_OBJECT - - public: - InputWindow(QWidget* parent = nullptr); - - void loadFromMappings(const InputMappings& mappings); - void applyToMappings(InputMappings& mappings) const; - - signals: - void mappingsChanged(); - - protected: - bool eventFilter(QObject* obj, QEvent* event) override; - - private: - QMap buttonMap; - QMap keyMappings; - - QString waitingForAction; - - void startKeyCapture(const QString& action); -}; diff --git a/include/panda_qt/main_window.hpp b/include/panda_qt/main_window.hpp deleted file mode 100644 index b259a1bc..00000000 --- a/include/panda_qt/main_window.hpp +++ /dev/null @@ -1,174 +0,0 @@ -#pragma once - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "emulator.hpp" -#include "input_mappings.hpp" -#include "panda_qt/about_window.hpp" -#include "panda_qt/cheats_window.hpp" -#include "panda_qt/config_window.hpp" -#include "panda_qt/cpu_debugger.hpp" -#include "panda_qt/dsp_debugger.hpp" -#include "panda_qt/patch_window.hpp" -#include "panda_qt/screen/screen.hpp" -#include "panda_qt/shader_editor.hpp" -#include "panda_qt/text_editor.hpp" -#include "panda_qt/thread_debugger.hpp" -#include "services/hid.hpp" - -struct CheatMessage { - u32 handle; - std::vector cheat; - std::function callback; -}; - -class MainWindow : public QMainWindow { - Q_OBJECT - - private: - // Types of messages we might send from the GUI thread to the emulator thread - enum class MessageType { - LoadROM, - Reset, - Pause, - Resume, - TogglePause, - PressKey, - ReleaseKey, - SetCirclePadX, - SetCirclePadY, - LoadLuaScript, - EditCheat, - PressTouchscreen, - ReleaseTouchscreen, - ReloadUbershader, - SetScreenSize, - UpdateConfig, - }; - - // Tagged union representing our message queue messages - struct EmulatorMessage { - MessageType type; - - union { - struct { - std::filesystem::path* p; - } path; - - struct { - u32 key; - } key; - - struct { - s16 value; - } circlepad; - - struct { - std::string* str; - } string; - - struct { - CheatMessage* c; - } cheat; - - struct { - u16 x; - u16 y; - } touchscreen; - - struct { - u32 width; - u32 height; - } screenSize; - }; - }; - - // This would normally be an std::unique_ptr but it's shared between threads so definitely not - Emulator* emu = nullptr; - std::thread emuThread; - - std::atomic appRunning = true; // Is the application itself running? - // Used for synchronizing messages between the emulator and UI - std::mutex messageQueueMutex; - std::vector messageQueue; - - QMenuBar* menuBar = nullptr; - InputMappings keyboardMappings; - ScreenWidget* screen; - AboutWindow* aboutWindow; - ConfigWindow* configWindow; - CheatsWindow* cheatsEditor; - TextEditorWindow* luaEditor; - PatchWindow* patchWindow; - ShaderEditorWindow* shaderEditor; - CPUDebugger* cpuDebugger; - DSPDebugger* dspDebugger; - ThreadDebugger* threadDebugger; - - // We use SDL's game controller API since it's the sanest API that supports as many controllers as possible - SDL_GameController* gameController = nullptr; - int gameControllerID = 0; - - void swapEmuBuffer(); - void emuThreadMainLoop(); - void selectLuaFile(); - void selectROM(); - void dumpDspFirmware(); - void dumpRomFS(); - void showAboutMenu(); - void initControllers(); - void pollControllers(); - void setupControllerSensors(SDL_GameController* controller); - void sendMessage(const EmulatorMessage& message); - void dispatchMessage(const EmulatorMessage& message); - void loadTranslation(); - - void loadKeybindings(); - void saveKeybindings(); - - // Tracks what graphics API is backing our renderer - bool usingGL = false; - bool usingVk = false; - bool usingMtl = false; - - // Variables to keep track of whether the user is controlling the 3DS analog stick with their keyboard - // This is done so when a gamepad is connected, we won't automatically override the 3DS analog stick settings with the gamepad's state - // And so the user can still use the keyboard to control the analog - bool keyboardAnalogX = false; - bool keyboardAnalogY = false; - - // Tracks if keybindings changed, in which case we should update the keybindings file when closing the emulator - bool keybindingsChanged = false; - - public: - MainWindow(QApplication* app, QWidget* parent = nullptr); - ~MainWindow(); - - void closeEvent(QCloseEvent* event) override; - void keyPressEvent(QKeyEvent* event) override; - void keyReleaseEvent(QKeyEvent* event) override; - - void mousePressEvent(QMouseEvent* event) override; - void mouseReleaseEvent(QMouseEvent* event) override; - void mouseMoveEvent(QMouseEvent* event) override; - - void loadLuaScript(const std::string& code); - void reloadShader(const std::string& shader); - void editCheat(u32 handle, const std::vector& cheat, const std::function& callback); - - void handleScreenResize(u32 width, u32 height); - void handleTouchscreenPress(QMouseEvent* event); - - signals: - void emulatorPaused(); -}; diff --git a/include/panda_qt/patch_window.hpp b/include/panda_qt/patch_window.hpp deleted file mode 100644 index a6e1a129..00000000 --- a/include/panda_qt/patch_window.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once -#include -#include -#include -#include - -#include "panda_qt/elided_label.hpp" - -class PatchWindow final : public QWidget { - Q_OBJECT - - public: - PatchWindow(QWidget* parent = nullptr); - ~PatchWindow() = default; - - private: - // Show a message box - // Title: Title of the message box to display - // Message: Message to display - // Icon: The type of icon (error, warning, information, etc) to display - // IconPath: If non-null, then a path to an icon in our assets to display on the OK button - void displayMessage( - const QString& title, const QString& message, QMessageBox::Icon icon = QMessageBox::Icon::Warning, const char* iconPath = nullptr - ); - - std::filesystem::path inputPath = ""; - std::filesystem::path patchPath = ""; - - ElidedLabel* inputPathLabel = nullptr; - ElidedLabel* patchPathLabel = nullptr; -}; diff --git a/include/panda_qt/screen/screen.hpp b/include/panda_qt/screen/screen.hpp deleted file mode 100644 index 4908b096..00000000 --- a/include/panda_qt/screen/screen.hpp +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once -#include -#include - -#include "gl/context.h" -#include "screen_layout.hpp" -#include "window_info.h" - -// Abstract screen widget for drawing the 3DS screen. We've got a child class for each graphics API (ScreenWidgetGL, ScreenWidgetMTL, ...) -class ScreenWidget : public QWidget { - Q_OBJECT - - public: - using ResizeCallback = std::function; - - enum class API { OpenGL, Metal, Vulkan }; - - ScreenWidget(API api, ResizeCallback resizeCallback, QWidget* parent = nullptr); - virtual ~ScreenWidget() {} - - void resizeEvent(QResizeEvent* event) override; - - virtual GL::Context* getGLContext() { return nullptr; } - virtual void* getMTKLayer() { return nullptr; } - - // Dimensions of our output surface - u32 surfaceWidth = 0; - u32 surfaceHeight = 0; - WindowInfo windowInfo; - - // Cached "previous" dimensions, used when resizing our window - u32 previousWidth = 0; - u32 previousHeight = 0; - - API api = API::OpenGL; - - // Coordinates (x/y/width/height) for the two screens in window space, used for properly handling touchscreen - ScreenLayout::WindowCoordinates screenCoordinates; - // Screen layouts and sizes - ScreenLayout::Layout screenLayout = ScreenLayout::Layout::Default; - float topScreenSize = 0.5f; - - void reloadScreenLayout(ScreenLayout::Layout newLayout, float newTopScreenSize); - - // Creates a screen widget depending on the graphics API we're using - static ScreenWidget* getWidget(API api, ResizeCallback resizeCallback, QWidget* parent = nullptr); - - // Called by the emulator thread on OpenGL for resizing the actual GL surface, since the emulator thread owns the GL context - virtual void resizeSurface(u32 width, u32 height) {}; - - protected: - ResizeCallback resizeCallback; - - virtual bool createContext() = 0; - virtual void resizeDisplay() = 0; - std::optional getWindowInfo(); - - private: - qreal devicePixelRatioFromScreen() const; - int scaledWindowWidth() const; - int scaledWindowHeight() const; - - void reloadScreenCoordinates(); -}; diff --git a/include/panda_qt/screen/screen_gl.hpp b/include/panda_qt/screen/screen_gl.hpp deleted file mode 100644 index 04a2c11b..00000000 --- a/include/panda_qt/screen/screen_gl.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include - -#include "gl/context.h" -#include "panda_qt/screen/screen.hpp" - -class ScreenWidgetGL : public ScreenWidget { - std::unique_ptr glContext = nullptr; - - public: - ScreenWidgetGL(API api, ResizeCallback resizeCallback, QWidget* parent = nullptr); - - virtual GL::Context* getGLContext() override; - virtual bool createContext() override; - - virtual void resizeDisplay() override; - virtual void resizeSurface(u32 width, u32 height) override; -}; \ No newline at end of file diff --git a/include/panda_qt/screen/screen_mtl.hpp b/include/panda_qt/screen/screen_mtl.hpp deleted file mode 100644 index cdd240e6..00000000 --- a/include/panda_qt/screen/screen_mtl.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include "panda_qt/screen/screen.hpp" - -class ScreenWidgetMTL : public ScreenWidget { - void* mtkLayer = nullptr; - - // Objective-C++ functions for handling the Metal context - bool createMetalContext(); - void resizeMetalView(); - - public: - ScreenWidgetMTL(API api, ResizeCallback resizeCallback, QWidget* parent = nullptr); - ~ScreenWidgetMTL() override; - - virtual void* getMTKLayer() override; - virtual bool createContext() override; - virtual void resizeDisplay() override; -}; \ No newline at end of file diff --git a/include/panda_qt/shader_editor.hpp b/include/panda_qt/shader_editor.hpp deleted file mode 100644 index 86bc1149..00000000 --- a/include/panda_qt/shader_editor.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#include "zep.h" -#include "zep/mode_repl.h" -#include "zep/regress.h" - -class ShaderEditorWindow : public QDialog { - Q_OBJECT - - private: - Zep::ZepWidget_Qt zepWidget; - Zep::IZepReplProvider replProvider; - static constexpr float fontSize = 14.0f; - - public: - // Whether this backend supports shader editor - bool supported = true; - - ShaderEditorWindow(QWidget* parent, const std::string& filename, const std::string& initialText); - void setText(const std::string& text) { zepWidget.GetEditor().GetMRUBuffer()->SetText(text); } - void setEnable(bool enable); -}; \ No newline at end of file diff --git a/include/panda_qt/text_editor.hpp b/include/panda_qt/text_editor.hpp deleted file mode 100644 index 0da98294..00000000 --- a/include/panda_qt/text_editor.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#include "zep.h" -#include "zep/mode_repl.h" -#include "zep/regress.h" - -class TextEditorWindow : public QDialog { - Q_OBJECT - - private: - Zep::ZepWidget_Qt zepWidget; - Zep::IZepReplProvider replProvider; - static constexpr float fontSize = 14.0f; - - public: - TextEditorWindow(QWidget* parent, const std::string& filename, const std::string& initialText); - void setText(const std::string& text) { zepWidget.GetEditor().GetMRUBuffer()->SetText(text); } -}; \ No newline at end of file diff --git a/include/panda_qt/thread_debugger.hpp b/include/panda_qt/thread_debugger.hpp deleted file mode 100644 index eab9cffc..00000000 --- a/include/panda_qt/thread_debugger.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -#include "emulator.hpp" - -class ThreadDebugger : public QWidget { - Q_OBJECT - Emulator* emu; - - QVBoxLayout* mainLayout; - QTableWidget* threadTable; - - public: - ThreadDebugger(Emulator* emu, QWidget* parent = nullptr); - void update(); - - private: - void setListItem(int row, int column, const QString& str); - void setListItem(int row, int column, const std::string& str); -}; \ No newline at end of file diff --git a/include/panda_sdl/frontend_sdl.hpp b/include/panda_sdl/frontend_sdl.hpp deleted file mode 100644 index 3fc50af1..00000000 --- a/include/panda_sdl/frontend_sdl.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include - -#include - -#include "emulator.hpp" -#include "input_mappings.hpp" -#include "screen_layout.hpp" - -class FrontendSDL { - Emulator emu; -#ifdef PANDA3DS_ENABLE_OPENGL - SDL_GLContext glContext; -#endif - - public: - FrontendSDL(); - bool loadROM(const std::filesystem::path& path); - void run(); - u32 getMapping(InputMappings::Scancode scancode) { return keyboardMappings.getMapping(scancode); } - - SDL_Window* window = nullptr; - SDL_GameController* gameController = nullptr; - InputMappings keyboardMappings; - - u32 windowWidth = 400; - u32 windowHeight = 480; - int gameControllerID; - bool programRunning = true; - - // Coordinates (x/y/width/height) for the two screens in window space, used for properly handling touchscreen regardless - // of layout or resizing - ScreenLayout::WindowCoordinates screenCoordinates; - - // For tracking whether to update gyroscope - // We bind gyro to right click + mouse movement - bool holdingRightClick = false; - - // Variables to keep track of whether the user is controlling the 3DS analog stick with their keyboard - // This is done so when a gamepad is connected, we won't automatically override the 3DS analog stick settings with the gamepad's state - // And so the user can still use the keyboard to control the analog - bool keyboardAnalogX = false; - bool keyboardAnalogY = false; - - private: - void setupControllerSensors(SDL_GameController* controller); - void handleLeftClick(int mouseX, int mouseY); -}; \ No newline at end of file diff --git a/include/renderdoc.hpp b/include/renderdoc.hpp deleted file mode 100644 index 9c7de1e3..00000000 --- a/include/renderdoc.hpp +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once -#include - -#include "helpers.hpp" - -#ifdef PANDA3DS_ENABLE_RENDERDOC -namespace Renderdoc { - // Loads renderdoc dynamic library module. - void loadRenderdoc(); - - // Begins a capture if a renderdoc instance is attached. - void startCapture(); - - // Ends current renderdoc capture. - void endCapture(); - - // Triggers capturing process. - void triggerCapture(); - - // Sets output directory for captures - void setOutputDir(const std::string& path, const std::string& prefix); - - // Returns whether Renderdoc has been loaded - bool isLoaded(); - - // Returns whether we've compiled with Renderdoc support - static constexpr bool isSupported() { return true; } -} // namespace Renderdoc -#else -namespace Renderdoc { - static void loadRenderdoc() {} - static void startCapture() { Helpers::panic("Tried to start a Renderdoc capture while support for renderdoc is disabled"); } - static void endCapture() { Helpers::panic("Tried to end a Renderdoc capture while support for renderdoc is disabled"); } - static void triggerCapture() { Helpers::panic("Tried to trigger a Renderdoc capture while support for renderdoc is disabled"); } - static void setOutputDir(const std::string& path, const std::string& prefix) {} - static constexpr bool isSupported() { return false; } - static constexpr bool isLoaded() { return false; } -} // namespace Renderdoc -#endif - -namespace Renderdoc { - // RAII scope class that encloses a Renderdoc capture, as long as it's triggered by triggerCapture - struct Scope { - Scope() { Renderdoc::startCapture(); } - ~Scope() { Renderdoc::endCapture(); } - - Scope(const Scope&) = delete; - Scope& operator=(const Scope&) = delete; - - Scope(Scope&&) = delete; - Scope& operator=(const Scope&&) = delete; - }; - - // RAII scope class that encloses a Renderdoc capture. Unlike regular Scope it doesn't wait for a trigger, it will always issue the capture - // trigger on its own and take a capture - struct InstantScope { - InstantScope() { - Renderdoc::triggerCapture(); - Renderdoc::startCapture(); - } - - ~InstantScope() { Renderdoc::endCapture(); } - - InstantScope(const InstantScope&) = delete; - InstantScope& operator=(const InstantScope&) = delete; - - InstantScope(InstantScope&&) = delete; - InstantScope& operator=(const InstantScope&&) = delete; - }; -} // namespace Renderdoc diff --git a/include/renderer.hpp b/include/renderer.hpp index b3f81faf..c189da7f 100644 --- a/include/renderer.hpp +++ b/include/renderer.hpp @@ -1,32 +1,22 @@ #pragma once #include -#include #include -#include +#include -#include "PICA/draw_acceleration.hpp" #include "PICA/pica_vertex.hpp" #include "PICA/regs.hpp" #include "helpers.hpp" -#ifdef PANDA3DS_FRONTEND_QT -#include "gl/context.h" -#endif - enum class RendererType : s8 { // Todo: Auto = -1, Null = 0, OpenGL = 1, Vulkan = 2, - Metal = 3, - Software = 4, + Software = 3, }; -struct EmulatorConfig; -struct SDL_Window; - class GPU; -class ShaderUnit; +struct SDL_Window; class Renderer { protected: @@ -46,19 +36,6 @@ class Renderer { u32 depthBufferLoc; PICA::DepthFmt depthBufferFormat; - // Width and height of the window we're outputting to, needed for properly scaling the final image - // We initialize it to the 3DS resolution by default and the frontend can notify us if it changes via the setOutputSize function - u32 outputWindowWidth = 400; - u32 outputWindowHeight = 240 * 2; - - // Should hw renderers hash textures? Stored separately from emulatorConfig because we'll be accessing it constantly, might be merged eventually - bool hashTextures = false; - bool outputSizeChanged = true; - - EmulatorConfig* emulatorConfig = nullptr; - - void doSoftwareTextureCopy(u32 inputAddr, u32 outputAddr, u32 copySize, u32 inputWidth, u32 inputGap, u32 outputWidth, u32 outputGap); - public: Renderer(GPU& gpu, const std::array& internalRegs, const std::array& externalRegs); virtual ~Renderer(); @@ -69,37 +46,13 @@ class Renderer { virtual void reset() = 0; virtual void display() = 0; // Display the 3DS screen contents to the window - virtual void initGraphicsContext(void* context) = 0; // Initialize graphics context + virtual void initGraphicsContext(SDL_Window* window) = 0; // Initialize graphics context virtual void clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) = 0; // Clear a GPU buffer in VRAM virtual void displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) = 0; // Perform display transfer virtual void textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) = 0; - virtual void drawVertices(PICA::PrimType primType, std::span vertices) = 0; // Draw the given vertices + virtual void drawVertices(PICA::PrimType primType, std::span vertices) = 0; // Draw the given vertices virtual void screenshot(const std::string& name) = 0; - // Some frontends and platforms may require that we delete our GL or misc context and obtain a new one for things like exclusive fullscreen - // This function does things like write back or cache necessary state before we delete our context - virtual void deinitGraphicsContext() = 0; - - // Functions for hooking up the renderer core to the frontend's shader editor for editing ubershaders in real time - // SupportsShaderReload: Indicates whether the backend offers ubershader reload support or not - // GetUbershader/SetUbershader: Gets or sets the renderer's current ubershader - virtual bool supportsShaderReload() { return false; } - virtual std::string getUbershader() { return ""; } - virtual void setUbershader(const std::string& shader) {} - - // Only relevant for OpenGL renderer and other OpenGL-based backends (eg software) - // Called to notify the core to use OpenGL ES and not desktop GL - virtual void setupGLES() {} - - // Used for Metal renderer on Qt and iOS - // Passes an NSView's backing layer (CAMetalLayer) to the renderer - virtual void setMTKLayer(void* layer) { Helpers::panic("Renderer doesn't support MTK Layer"); }; - - // This function is called on every draw call before parsing vertex data. - // It is responsible for things like looking up which vertex/fragment shaders to use, recompiling them if they don't exist, choosing between - // ubershaders and shadergen, and so on. - // Returns whether this draw is eligible for using hardware-accelerated shaders or if shaders should run on the CPU - virtual bool prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) { return false; } void setFBSize(u32 width, u32 height) { fbSize[0] = width; @@ -116,14 +69,4 @@ class Renderer { void setColourBufferLoc(u32 loc) { colourBufferLoc = loc; } void setDepthBufferLoc(u32 loc) { depthBufferLoc = loc; } - - void setOutputSize(u32 width, u32 height) { - outputSizeChanged = true; - outputWindowWidth = width; - outputWindowHeight = height; - } - - void setConfig(EmulatorConfig* config) { emulatorConfig = config; } - void setHashTextures(bool setting) { hashTextures = setting; } - void reloadScreenLayout() { outputSizeChanged = true; } }; diff --git a/include/renderer_gl/gl_driver.hpp b/include/renderer_gl/gl_driver.hpp deleted file mode 100644 index dfb78ffe..00000000 --- a/include/renderer_gl/gl_driver.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once -#include "opengl.hpp" - -// Information about our OpenGL/OpenGL ES driver that we should keep track of -// Stuff like whether specific extensions are supported, and potentially things like OpenGL context information -namespace OpenGL { - struct Driver { - bool usingGLES = false; - bool supportsExtFbFetch = false; - bool supportsArmFbFetch = false; - - // Minimum alignment for UBO offsets. Fetched by the OpenGL renderer using glGetIntegerV. - GLuint uboAlignment = 16; - - bool supportFbFetch() const { return supportsExtFbFetch || supportsArmFbFetch; } - }; -} // namespace OpenGL \ No newline at end of file diff --git a/include/renderer_gl/gl_state.hpp b/include/renderer_gl/gl_state.hpp index d6cbcbc0..69960f1e 100644 --- a/include/renderer_gl/gl_state.hpp +++ b/include/renderer_gl/gl_state.hpp @@ -35,17 +35,14 @@ struct GLStateManager { bool depthMask; float clearRed, clearBlue, clearGreen, clearAlpha; - + GLuint stencilMask; GLuint boundVAO; + GLuint boundVBO; GLuint currentProgram; - GLuint boundUBO; GLenum depthFunc; GLenum logicOp; - GLenum blendEquationRGB, blendEquationAlpha; - GLenum blendFuncSourceRGB, blendFuncSourceAlpha; - GLenum blendFuncDestRGB, blendFuncDestAlpha; void reset(); void resetBlend(); @@ -54,7 +51,7 @@ struct GLStateManager { void resetColourMask(); void resetDepth(); void resetVAO(); - void resetBuffers(); + void resetVBO(); void resetProgram(); void resetScissor(); void resetStencil(); @@ -172,6 +169,13 @@ struct GLStateManager { } } + void bindVBO(GLuint handle) { + if (boundVBO != handle) { + boundVBO = handle; + glBindBuffer(GL_ARRAY_BUFFER, handle); + } + } + void useProgram(GLuint handle) { if (currentProgram != handle) { currentProgram = handle; @@ -179,14 +183,8 @@ struct GLStateManager { } } - void bindUBO(GLuint handle) { - if (boundUBO != handle) { - boundUBO = handle; - glBindBuffer(GL_UNIFORM_BUFFER, boundUBO); - } - } - void bindVAO(const OpenGL::VertexArray& vao) { bindVAO(vao.handle()); } + void bindVBO(const OpenGL::VertexBuffer& vbo) { bindVBO(vbo.handle()); } void useProgram(const OpenGL::Program& program) { useProgram(program.handle()); } void setColourMask(bool r, bool g, bool b, bool a) { @@ -226,40 +224,6 @@ struct GLStateManager { } void setDepthFunc(OpenGL::DepthFunc func) { setDepthFunc(static_cast(func)); } - - // Counterpart to glBlendEquationSeparate - void setBlendEquation(GLenum modeRGB, GLenum modeAlpha) { - if (blendEquationRGB != modeRGB || blendEquationAlpha != modeAlpha) { - blendEquationRGB = modeRGB; - blendEquationAlpha = modeAlpha; - - glBlendEquationSeparate(modeRGB, modeAlpha); - } - } - - // Counterpart to glBlendFuncSeparate - void setBlendFunc(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha) { - if (blendFuncSourceRGB != sourceRGB || blendFuncDestRGB != destRGB || blendFuncSourceAlpha != sourceAlpha || - blendFuncDestAlpha != destAlpha) { - blendFuncSourceRGB = sourceRGB; - blendFuncDestRGB = destRGB; - blendFuncSourceAlpha = sourceAlpha; - blendFuncDestAlpha = destAlpha; - - glBlendFuncSeparate(sourceRGB, destRGB, sourceAlpha, destAlpha); - } - } - - // Counterpart to regular glBlendEquation - void setBlendEquation(GLenum mode) { setBlendEquation(mode, mode); } - - void setBlendEquation(OpenGL::BlendEquation modeRGB, OpenGL::BlendEquation modeAlpha) { - setBlendEquation(static_cast(modeRGB), static_cast(modeAlpha)); - } - - void setBlendEquation(OpenGL::BlendEquation mode) { - setBlendEquation(static_cast(mode)); - } }; static_assert(std::is_trivially_constructible(), "OpenGL State Manager class is not trivially constructible!"); diff --git a/include/renderer_gl/renderer_gl.hpp b/include/renderer_gl/renderer_gl.hpp index 2023966f..dab33ae8 100644 --- a/include/renderer_gl/renderer_gl.hpp +++ b/include/renderer_gl/renderer_gl.hpp @@ -1,23 +1,11 @@ #pragma once #include -#include -#include -#include -#include #include -#include -#include #include "PICA/float_types.hpp" -#include "PICA/pica_frag_config.hpp" -#include "PICA/pica_hash.hpp" -#include "PICA/pica_vert_config.hpp" #include "PICA/pica_vertex.hpp" #include "PICA/regs.hpp" -#include "PICA/shader_gen.hpp" -#include "gl/stream_buffer.h" -#include "gl_driver.hpp" #include "gl_state.hpp" #include "helpers.hpp" #include "logger.hpp" @@ -34,48 +22,27 @@ class RendererGL final : public Renderer { OpenGL::Program triangleProgram; OpenGL::Program displayProgram; - // VAO for when not using accelerated vertex shaders. Contains attribute declarations matching to the PICA fixed function fragment attributes - OpenGL::VertexArray defaultVAO; - // VAO for when using accelerated vertex shaders. The PICA vertex shader inputs are passed as attributes without CPU processing. - OpenGL::VertexArray hwShaderVAO; + OpenGL::VertexArray vao; OpenGL::VertexBuffer vbo; - // Data that will be uploaded to the ubershader - struct { - // TEV configuration uniform locations - GLint textureEnvSourceLoc = -1; - GLint textureEnvOperandLoc = -1; - GLint textureEnvCombinerLoc = -1; - GLint textureEnvColorLoc = -1; - GLint textureEnvScaleLoc = -1; + // TEV configuration uniform locations + GLint textureEnvSourceLoc = -1; + GLint textureEnvOperandLoc = -1; + GLint textureEnvCombinerLoc = -1; + GLint textureEnvColorLoc = -1; + GLint textureEnvScaleLoc = -1; - // Uniform of PICA registers - GLint picaRegLoc = -1; + // Uniform of PICA registers + GLint picaRegLoc = -1; - // Depth configuration uniform locations - GLint depthOffsetLoc = -1; - GLint depthScaleLoc = -1; - GLint depthmapEnableLoc = -1; - } ubershaderData; + // Depth configuration uniform locations + GLint depthOffsetLoc = -1; + GLint depthScaleLoc = -1; + GLint depthmapEnableLoc = -1; float oldDepthScale = -1.0; float oldDepthOffset = 0.0; bool oldDepthmapEnable = false; - // Set by prepareForDraw, tells us whether the current draw is using hw-accelerated shader - bool usingAcceleratedShader = false; - bool performIndexedRender = false; - bool usingShortIndices = false; - - // Set by prepareForDraw, metadata for indexed renders - GLuint minimumIndex = 0; - GLuint maximumIndex = 0; - void* hwIndexBufferOffset = nullptr; - - // When doing hw shaders, we cache which attributes are enabled in our VAO to avoid having to enable/disable all attributes on each draw - u32 previousAttributeMask = 0; - - // Cached pointer to the current vertex shader when using HW accelerated shaders - OpenGL::Shader* generatedVertexShader = nullptr; SurfaceCache depthBufferCache; SurfaceCache colourBufferCache; @@ -86,131 +53,36 @@ class RendererGL final : public Renderer { OpenGL::VertexBuffer dummyVBO; OpenGL::Texture screenTexture; - OpenGL::Texture LUTTexture; + GLuint lightLUTTextureArray; OpenGL::Framebuffer screenFramebuffer; OpenGL::Texture blankTexture; - // The "default" vertex shader to use when using specialized shaders but not PICA vertex shader -> GLSL recompilation - // We can compile this once and then link it with all other generated fragment shaders - OpenGL::Shader defaultShadergenVs; - - using StreamBuffer = OpenGLStreamBuffer; - - std::unique_ptr shadergenFragmentUBO; - // UBO for uploading the PICA uniforms when using hw shaders - std::unique_ptr hwShaderUniformUBO; - std::unique_ptr hwVertexBuffer; - std::unique_ptr hwIndexBuffer; - - // Current offset for our hw shader uniform UBO - u32 hwShaderUniformUBOOffset = 0; - - // Cache of fixed attribute values so that we don't do any duplicate updates - std::array, 16> fixedAttrValues; - - // Cached recompiled fragment shader - struct CachedProgram { - OpenGL::Program program; - }; - - struct ShaderCache { - std::unordered_map> vertexShaderCache; - std::unordered_map fragmentShaderCache; - - // Program cache indexed by GLuints for the vertex and fragment shader to use - // Top 32 bits are the vertex shader GLuint, bottom 32 bits are the fs GLuint - std::unordered_map programCache; - - void clear() { - for (auto& it : programCache) { - CachedProgram& cachedProgram = it.second; - cachedProgram.program.free(); - } - - for (auto& it : vertexShaderCache) { - if (it.second.has_value()) { - it.second->free(); - } - } - - for (auto& it : fragmentShaderCache) { - it.second.free(); - } - - programCache.clear(); - vertexShaderCache.clear(); - fragmentShaderCache.clear(); - } - }; - ShaderCache shaderCache; OpenGL::Framebuffer getColourFBO(); OpenGL::Texture getTexture(Texture& tex); - OpenGL::Program& getSpecializedShader(); - - PICA::ShaderGen::FragmentGenerator fragShaderGen; - OpenGL::Driver driverInfo; - - // Information about the final 3DS screen -> Window blit, accounting for things like scaling and shifting the output based on - // the window's dimensions. Updated whenever the screen size or layout changes. - struct { - int topScreenX = 0; - int topScreenY = 0; - int topScreenWidth = 400; - int topScreenHeight = 240; - - int bottomScreenX = 40; - int bottomScreenY = 240; - int bottomScreenWidth = 320; - int bottomScreenHeight = 240; - - // For optimizing the final screen blit into a single blit instead of 2 when possible: - int destX = 0; - int destY = 0; - int destWidth = 400; - int destHeight = 480; - bool canDoSingleBlit = true; - } blitInfo; MAKE_LOG_FUNCTION(log, rendererLogger) void setupBlending(); void setupStencilTest(bool stencilEnable); void bindDepthBuffer(); - void setupUbershaderTexEnv(); + void setupTextureEnvState(); void bindTexturesToSlots(); void updateLightingLUT(); - void updateFogLUT(); - void initGraphicsContextInternal(); - - void accelerateVertexUpload(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel); - void compileDisplayShader(); public: RendererGL(GPU& gpu, const std::array& internalRegs, const std::array& externalRegs) - : Renderer(gpu, internalRegs, externalRegs), fragShaderGen(PICA::ShaderGen::API::GL, PICA::ShaderGen::Language::GLSL) {} + : Renderer(gpu, internalRegs, externalRegs) {} ~RendererGL() override; void reset() override; void display() override; // Display the 3DS screen contents to the window - void initGraphicsContext(void* context) override; // Initialize graphics context + void initGraphicsContext(SDL_Window* window) override; // Initialize graphics context void clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) override; // Clear a GPU buffer in VRAM void displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) override; // Perform display transfer void textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) override; - void drawVertices(PICA::PrimType primType, std::span vertices) override; // Draw the given vertices - void deinitGraphicsContext() override; - - virtual bool supportsShaderReload() override { return true; } - virtual std::string getUbershader() override; - virtual void setUbershader(const std::string& shader) override; - virtual bool prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) override; - virtual void setupGLES() override; + void drawVertices(PICA::PrimType primType, std::span vertices) override; // Draw the given vertices std::optional getColourBuffer(u32 addr, PICA::ColorFmt format, u32 width, u32 height, bool createIfnotFound = true); - // Note: The caller is responsible for deleting the currently bound FBO before calling this - void setFBO(uint handle) { screenFramebuffer.m_handle = handle; } - void resetStateManager() { gl.reset(); } - void initUbershader(OpenGL::Program& program); - // Take a screenshot of the screen and store it in a file void screenshot(const std::string& name) override; -}; \ No newline at end of file +}; diff --git a/include/renderer_gl/surface_cache.hpp b/include/renderer_gl/surface_cache.hpp index 214ee7fb..5323741f 100644 --- a/include/renderer_gl/surface_cache.hpp +++ b/include/renderer_gl/surface_cache.hpp @@ -1,9 +1,6 @@ #pragma once -#include #include -#include #include - #include "surfaces.hpp" #include "textures.hpp" @@ -20,69 +17,43 @@ // - A "location" member which tells us which location in 3DS memory this surface occupies template class SurfaceCache { - // Vanilla std::optional can't hold actual references - using OptionalRef = std::optional>; + // Vanilla std::optional can't hold actual references + using OptionalRef = std::optional>; + static_assert(std::is_same() || std::is_same() || + std::is_same(), "Invalid surface type"); - size_t size = 0; - size_t evictionIndex = 0; - std::array buffer; + size_t size; + size_t evictionIndex; + std::array buffer; - // Map from address to a surface in the above buffer. - // Several cached surfaces may have the same starting address, so we use a multimap. - std::multimap surfaceMap; +public: + void reset() { + size = 0; + evictionIndex = 0; + for (auto& e : buffer) { // Free the VRAM of all surfaces + e.free(); + } + } - // Adds a surface to our map - void indexSurface(SurfaceType& surface) { surfaceMap.emplace(surface.location, &surface); } + OptionalRef find(SurfaceType& other) { + for (auto& e : buffer) { + if (e.matches(other) && e.valid) + return e; + } - // Removes a surface from our map - void unindexSurface(SurfaceType& surface) { - auto range = surfaceMap.equal_range(surface.location); - for (auto it = range.first; it != range.second; ++it) { - if (it->second == &surface) { - surfaceMap.erase(it); - break; - } - } - } + return std::nullopt; + } - public: - void reset() { - size = 0; - evictionIndex = 0; - surfaceMap.clear(); + OptionalRef findFromAddress(u32 address) { + for (auto& e : buffer) { + if (e.location <= address && e.location + e.sizeInBytes() > address && e.valid) + return e; + } - // Free the memory of all surfaces - for (auto& e : buffer) { - e.free(); - e.valid = false; - } - } + return std::nullopt; + } - // Use our map to only scan the surfaces with the same starting location - OptionalRef find(SurfaceType& other) { - auto range = surfaceMap.equal_range(other.location); - for (auto it = range.first; it != range.second; ++it) { - SurfaceType* candidate = it->second; - if (candidate->valid && candidate->matches(other)) { - return *candidate; - } - } - - return std::nullopt; - } - - OptionalRef findFromAddress(u32 address) { - for (auto it = surfaceMap.begin(); it != surfaceMap.end(); ++it) { - SurfaceType* surface = it->second; - if (surface->valid && surface->location <= address && surface->location + surface->sizeInBytes() > address) { - return *surface; - } - } - - return std::nullopt; - } - - // Adds a surface object to the cache and returns it + // Adds a surface object to the cache and returns it SurfaceType& add(const SurfaceType& surface) { if (size >= capacity) { if constexpr (evictOnOverflow) { // Do a ring buffer if evictOnOverflow is true @@ -91,14 +62,12 @@ class SurfaceCache { } auto& e = buffer[evictionIndex]; - unindexSurface(e); evictionIndex = (evictionIndex + 1) % capacity; e.valid = false; e.free(); e = surface; e.allocate(); - indexSurface(e); return e; } else { Helpers::panic("Surface cache full! Add emptying!"); @@ -107,14 +76,12 @@ class SurfaceCache { size++; - // See if any existing surface fully overlaps + // Find an existing surface we completely invalidate and overwrite it with the new surface for (auto& e : buffer) { if (e.valid && e.range.lower() >= surface.range.lower() && e.range.upper() <= surface.range.upper()) { - unindexSurface(e); e.free(); e = surface; e.allocate(); - indexSurface(e); return e; } } @@ -124,7 +91,6 @@ class SurfaceCache { if (!e.valid) { e = surface; e.allocate(); - indexSurface(e); return e; } } @@ -133,6 +99,11 @@ class SurfaceCache { Helpers::panic("Couldn't add surface to cache\n"); } - SurfaceType& operator[](size_t i) { return buffer[i]; } - const SurfaceType& operator[](size_t i) const { return buffer[i]; } -}; \ No newline at end of file + SurfaceType& operator[](size_t i) { + return buffer[i]; + } + + const SurfaceType& operator[](size_t i) const { + return buffer[i]; + } +}; diff --git a/include/renderer_gl/surfaces.hpp b/include/renderer_gl/surfaces.hpp index ad1a1f5f..1c2976d6 100644 --- a/include/renderer_gl/surfaces.hpp +++ b/include/renderer_gl/surfaces.hpp @@ -48,7 +48,7 @@ struct ColourBuffer { fbo.bind(OpenGL::DrawAndReadFramebuffer); if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { - Helpers::warn("ColourBuffer: Incomplete framebuffer"); + Helpers::panic("Incomplete framebuffer"); } // TODO: This should not clear the framebuffer contents. It should load them from VRAM. @@ -133,7 +133,7 @@ struct DepthBuffer { GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, }; - + static constexpr std::array types = { GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, @@ -172,4 +172,4 @@ struct DepthBuffer { size_t sizeInBytes() { return (size_t)size.x() * (size_t)size.y() * PICA::sizePerPixel(format); } -}; \ No newline at end of file +}; diff --git a/include/renderer_gl/textures.hpp b/include/renderer_gl/textures.hpp index 9663c2b4..4c6ca2dd 100644 --- a/include/renderer_gl/textures.hpp +++ b/include/renderer_gl/textures.hpp @@ -1,8 +1,6 @@ #pragma once #include #include - -#include "PICA/pica_hash.hpp" #include "PICA/regs.hpp" #include "boost/icl/interval.hpp" #include "helpers.hpp" @@ -13,55 +11,55 @@ template using Interval = boost::icl::right_open_interval; struct Texture { - using Hash = PICAHash::HashType; + u32 location; + u32 config; // Magnification/minification filter, wrapping configs, etc + PICA::TextureFmt format; + OpenGL::uvec2 size; + bool valid; - u32 location; - u32 config; // Magnification/minification filter, wrapping configs, etc - Hash hash = Hash(0); + // Range of VRAM taken up by buffer + Interval range; + // OpenGL resources allocated to buffer + OpenGL::Texture texture; - PICA::TextureFmt format; - OpenGL::uvec2 size; - bool valid; + Texture() : valid(false) {} - // Range of VRAM taken up by buffer - Interval range; - // OpenGL resources allocated to buffer - OpenGL::Texture texture; + Texture(u32 loc, PICA::TextureFmt format, u32 x, u32 y, u32 config, bool valid = true) + : location(loc), format(format), size({x, y}), config(config), valid(valid) { - Texture() : valid(false) {} + u64 endLoc = (u64)loc + sizeInBytes(); + // Check if start and end are valid here + range = Interval(loc, (u32)endLoc); + } - Texture(u32 loc, PICA::TextureFmt format, u32 x, u32 y, u32 config, bool valid = true) - : location(loc), format(format), size({x, y}), config(config), valid(valid) { - u64 endLoc = (u64)loc + sizeInBytes(); - // Check if start and end are valid here - range = Interval(loc, (u32)endLoc); - } + // For 2 textures to "match" we only care about their locations, formats, and dimensions to match + // For other things, such as filtering mode, etc, we can just switch the attributes of the cached texture + bool matches(Texture& other) { + return location == other.location && format == other.format && + size.x() == other.size.x() && size.y() == other.size.y(); + } - // For 2 textures to "match" we only care about their locations, formats, and dimensions to match - // For other things, such as filtering mode, etc, we can just switch the attributes of the cached texture - bool matches(Texture& other) { - return location == other.location && hash == other.hash && format == other.format && size.x() == other.size.x() && size.y() == other.size.y(); - } + void allocate(); + void setNewConfig(u32 newConfig); + void decodeTexture(std::span data); + void free(); + u64 sizeInBytes(); - void allocate(); - void setNewConfig(u32 newConfig); - void decodeTexture(std::span data); - void free(); - u64 sizeInBytes(); + u32 decodeTexel(u32 u, u32 v, PICA::TextureFmt fmt, std::span data); - u32 decodeTexel(u32 u, u32 v, PICA::TextureFmt fmt, std::span data); + // Get the morton interleave offset of a texel based on its U and V values + static u32 mortonInterleave(u32 u, u32 v); + // Get the byte offset of texel (u, v) in the texture + static u32 getSwizzledOffset(u32 u, u32 v, u32 width, u32 bytesPerPixel); + static u32 getSwizzledOffset_4bpp(u32 u, u32 v, u32 width); - // Get the morton interleave offset of a texel based on its U and V values - static u32 mortonInterleave(u32 u, u32 v); - // Get the byte offset of texel (u, v) in the texture - static u32 getSwizzledOffset(u32 u, u32 v, u32 width, u32 bytesPerPixel); - static u32 getSwizzledOffset_4bpp(u32 u, u32 v, u32 width); + // Returns the format of this texture as a string + std::string_view formatToString() { + return PICA::textureFormatToString(format); + } - // Returns the format of this texture as a string - std::string_view formatToString() { return PICA::textureFormatToString(format); } - - // Returns the texel at coordinates (u, v) of an ETC1(A4) texture - // TODO: Make hasAlpha a template parameter - u32 getTexelETC(bool hasAlpha, u32 u, u32 v, u32 width, std::span data); - u32 decodeETC(u32 alpha, u32 u, u32 v, u64 colourData); + // Returns the texel at coordinates (u, v) of an ETC1(A4) texture + // TODO: Make hasAlpha a template parameter + u32 getTexelETC(bool hasAlpha, u32 u, u32 v, u32 width, std::span data); + u32 decodeETC(u32 alpha, u32 u, u32 v, u64 colourData); }; diff --git a/include/renderer_mtl/mtl_blit_pipeline_cache.hpp b/include/renderer_mtl/mtl_blit_pipeline_cache.hpp deleted file mode 100644 index 1fa47f42..00000000 --- a/include/renderer_mtl/mtl_blit_pipeline_cache.hpp +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - -#include - -#include "objc_helper.hpp" -#include "pica_to_mtl.hpp" - -using namespace PICA; - -namespace Metal { - struct BlitPipelineHash { - // Formats - ColorFmt colorFmt; - DepthFmt depthFmt; - }; - - // This pipeline only caches the pipeline with all of its color and depth attachment variations - class BlitPipelineCache { - public: - BlitPipelineCache() = default; - - ~BlitPipelineCache() { - reset(); - vertexFunction->release(); - fragmentFunction->release(); - } - - void set(MTL::Device* dev, MTL::Function* vert, MTL::Function* frag) { - device = dev; - vertexFunction = vert; - fragmentFunction = frag; - } - - MTL::RenderPipelineState* get(BlitPipelineHash hash) { - u8 intHash = ((u8)hash.colorFmt << 3) | (u8)hash.depthFmt; - auto& pipeline = pipelineCache[intHash]; - if (!pipeline) { - MTL::RenderPipelineDescriptor* desc = MTL::RenderPipelineDescriptor::alloc()->init(); - desc->setVertexFunction(vertexFunction); - desc->setFragmentFunction(fragmentFunction); - - auto colorAttachment = desc->colorAttachments()->object(0); - colorAttachment->setPixelFormat(toMTLPixelFormatColor(hash.colorFmt)); - - desc->setDepthAttachmentPixelFormat(toMTLPixelFormatDepth(hash.depthFmt)); - - NS::Error* error = nullptr; - desc->setLabel(toNSString("Blit pipeline")); - pipeline = device->newRenderPipelineState(desc, &error); - if (error) { - Helpers::panic("Error creating blit pipeline state: %s", error->description()->cString(NS::ASCIIStringEncoding)); - } - - desc->release(); - } - - return pipeline; - } - - void reset() { - for (auto& pair : pipelineCache) { - pair.second->release(); - } - pipelineCache.clear(); - } - - private: - std::map pipelineCache; - - MTL::Device* device; - MTL::Function* vertexFunction; - MTL::Function* fragmentFunction; - }; -} // namespace Metal diff --git a/include/renderer_mtl/mtl_command_encoder.hpp b/include/renderer_mtl/mtl_command_encoder.hpp deleted file mode 100644 index 562e6b79..00000000 --- a/include/renderer_mtl/mtl_command_encoder.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -#include - -namespace Metal { - struct RenderState { - MTL::RenderPipelineState* renderPipelineState = nullptr; - MTL::DepthStencilState* depthStencilState = nullptr; - MTL::Texture* textures[3] = {nullptr}; - MTL::SamplerState* samplerStates[3] = {nullptr}; - }; - - class CommandEncoder { - public: - void newRenderCommandEncoder(MTL::RenderCommandEncoder* rce) { - renderCommandEncoder = rce; - - // Reset the render state - renderState = RenderState{}; - } - - // Resource binding - void setRenderPipelineState(MTL::RenderPipelineState* renderPipelineState) { - if (renderPipelineState != renderState.renderPipelineState) { - renderCommandEncoder->setRenderPipelineState(renderPipelineState); - renderState.renderPipelineState = renderPipelineState; - } - } - - void setDepthStencilState(MTL::DepthStencilState* depthStencilState) { - if (depthStencilState != renderState.depthStencilState) { - renderCommandEncoder->setDepthStencilState(depthStencilState); - renderState.depthStencilState = depthStencilState; - } - } - - void setFragmentTexture(MTL::Texture* texture, u32 index) { - if (texture != renderState.textures[index]) { - renderCommandEncoder->setFragmentTexture(texture, index); - renderState.textures[index] = texture; - } - } - - void setFragmentSamplerState(MTL::SamplerState* samplerState, u32 index) { - if (samplerState != renderState.samplerStates[index]) { - renderCommandEncoder->setFragmentSamplerState(samplerState, index); - renderState.samplerStates[index] = samplerState; - } - } - - private: - MTL::RenderCommandEncoder* renderCommandEncoder = nullptr; - - RenderState renderState; - }; -} // namespace Metal diff --git a/include/renderer_mtl/mtl_common.hpp b/include/renderer_mtl/mtl_common.hpp deleted file mode 100644 index a148520f..00000000 --- a/include/renderer_mtl/mtl_common.hpp +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -#include - -#define GET_HELPER_TEXTURE_BINDING(binding) (30 - binding) -#define GET_HELPER_SAMPLER_STATE_BINDING(binding) (15 - binding) diff --git a/include/renderer_mtl/mtl_depth_stencil_cache.hpp b/include/renderer_mtl/mtl_depth_stencil_cache.hpp deleted file mode 100644 index 8f7256a9..00000000 --- a/include/renderer_mtl/mtl_depth_stencil_cache.hpp +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include - -#include "pica_to_mtl.hpp" - -using namespace PICA; - -namespace Metal { - struct DepthStencilHash { - u32 stencilConfig; - u16 stencilOpConfig; - bool depthStencilWrite; - u8 depthFunc; - }; - - class DepthStencilCache { - public: - DepthStencilCache() = default; - - ~DepthStencilCache() { reset(); } - - void set(MTL::Device* dev) { device = dev; } - - MTL::DepthStencilState* get(DepthStencilHash hash) { - u64 intHash = - ((u64)hash.depthStencilWrite << 56) | ((u64)hash.depthFunc << 48) | ((u64)hash.stencilConfig << 16) | (u64)hash.stencilOpConfig; - auto& depthStencilState = depthStencilCache[intHash]; - if (!depthStencilState) { - MTL::DepthStencilDescriptor* desc = MTL::DepthStencilDescriptor::alloc()->init(); - desc->setDepthWriteEnabled(hash.depthStencilWrite); - desc->setDepthCompareFunction(toMTLCompareFunc(hash.depthFunc)); - - const bool stencilEnable = Helpers::getBit<0>(hash.stencilConfig); - MTL::StencilDescriptor* stencilDesc = nullptr; - if (stencilEnable) { - const u8 stencilFunc = Helpers::getBits<4, 3>(hash.stencilConfig); - const u8 stencilRefMask = Helpers::getBits<24, 8>(hash.stencilConfig); - - const u32 stencilBufferMask = hash.depthStencilWrite ? Helpers::getBits<8, 8>(hash.stencilConfig) : 0; - - const u8 stencilFailOp = Helpers::getBits<0, 3>(hash.stencilOpConfig); - const u8 depthFailOp = Helpers::getBits<4, 3>(hash.stencilOpConfig); - const u8 passOp = Helpers::getBits<8, 3>(hash.stencilOpConfig); - - stencilDesc = MTL::StencilDescriptor::alloc()->init(); - stencilDesc->setStencilFailureOperation(toMTLStencilOperation(stencilFailOp)); - stencilDesc->setDepthFailureOperation(toMTLStencilOperation(depthFailOp)); - stencilDesc->setDepthStencilPassOperation(toMTLStencilOperation(passOp)); - stencilDesc->setStencilCompareFunction(toMTLCompareFunc(stencilFunc)); - stencilDesc->setReadMask(stencilRefMask); - stencilDesc->setWriteMask(stencilBufferMask); - - desc->setFrontFaceStencil(stencilDesc); - desc->setBackFaceStencil(stencilDesc); - } - - depthStencilState = device->newDepthStencilState(desc); - - desc->release(); - if (stencilDesc) { - stencilDesc->release(); - } - } - - return depthStencilState; - } - - void reset() { - for (auto& pair : depthStencilCache) { - pair.second->release(); - } - depthStencilCache.clear(); - } - - private: - std::map depthStencilCache; - MTL::Device* device; - }; -} // namespace Metal diff --git a/include/renderer_mtl/mtl_draw_pipeline_cache.hpp b/include/renderer_mtl/mtl_draw_pipeline_cache.hpp deleted file mode 100644 index 7178785e..00000000 --- a/include/renderer_mtl/mtl_draw_pipeline_cache.hpp +++ /dev/null @@ -1,162 +0,0 @@ -#pragma once - -#include - -#include "objc_helper.hpp" -#include "pica_to_mtl.hpp" - -using namespace PICA; - -namespace Metal { - struct DrawFragmentFunctionHash { - u32 lightingConfig1; // 32 bits (TODO: check this) - bool lightingEnabled; // 1 bit - u8 lightingNumLights; // 3 bits - // | ref | func | on | - u16 alphaControl; // 12 bits (mask: 11111111 0111 0001) - }; - - inline bool operator<(const DrawFragmentFunctionHash& l, const DrawFragmentFunctionHash& r) { - if (!l.lightingEnabled && r.lightingEnabled) return true; - if (l.lightingNumLights < r.lightingNumLights) return true; - if (l.lightingConfig1 < r.lightingConfig1) return true; - if (l.alphaControl < r.alphaControl) return true; - - return false; - } - - struct DrawPipelineHash { // 56 bits - // Formats - ColorFmt colorFmt; // 3 bits - DepthFmt depthFmt; // 3 bits - - // Blending - bool blendEnabled; // 1 bit - // | functions | aeq | ceq | - u32 blendControl; // 22 bits (mask: 1111111111111111 00000111 00000111) - u8 colorWriteMask; // 4 bits - - DrawFragmentFunctionHash fragHash; - }; - - inline bool operator<(const DrawPipelineHash& l, const DrawPipelineHash& r) { - if ((u32)l.colorFmt < (u32)r.colorFmt) return true; - if ((u32)l.depthFmt < (u32)r.depthFmt) return true; - if (!l.blendEnabled && r.blendEnabled) return true; - if (l.blendControl < r.blendControl) return true; - if (l.colorWriteMask < r.colorWriteMask) return true; - if (l.fragHash < r.fragHash) return true; - - return false; - } - - // This pipeline only caches the pipeline with all of its color and depth attachment variations - class DrawPipelineCache { - public: - DrawPipelineCache() = default; - - ~DrawPipelineCache() { - reset(); - vertexDescriptor->release(); - vertexFunction->release(); - } - - void set(MTL::Device* dev, MTL::Library* lib, MTL::Function* vert, MTL::VertexDescriptor* vertDesc) { - device = dev; - library = lib; - vertexFunction = vert; - vertexDescriptor = vertDesc; - } - - MTL::RenderPipelineState* get(DrawPipelineHash hash) { - auto& pipeline = pipelineCache[hash]; - - if (!pipeline) { - auto& fragmentFunction = fragmentFunctionCache[hash.fragHash]; - if (!fragmentFunction) { - MTL::FunctionConstantValues* constants = MTL::FunctionConstantValues::alloc()->init(); - constants->setConstantValue(&hash.fragHash.lightingEnabled, MTL::DataTypeBool, NS::UInteger(0)); - constants->setConstantValue(&hash.fragHash.lightingNumLights, MTL::DataTypeUChar, NS::UInteger(1)); - constants->setConstantValue(&hash.fragHash.lightingConfig1, MTL::DataTypeUInt, NS::UInteger(2)); - constants->setConstantValue(&hash.fragHash.alphaControl, MTL::DataTypeUShort, NS::UInteger(3)); - - NS::Error* error = nullptr; - fragmentFunction = library->newFunction(NS::String::string("fragmentDraw", NS::ASCIIStringEncoding), constants, &error); - if (error) { - Helpers::panic("Error creating draw fragment function: %s", error->description()->cString(NS::ASCIIStringEncoding)); - } - constants->release(); - } - - MTL::RenderPipelineDescriptor* desc = MTL::RenderPipelineDescriptor::alloc()->init(); - desc->setVertexFunction(vertexFunction); - desc->setFragmentFunction(fragmentFunction); - desc->setVertexDescriptor(vertexDescriptor); - - auto colorAttachment = desc->colorAttachments()->object(0); - colorAttachment->setPixelFormat(toMTLPixelFormatColor(hash.colorFmt)); - MTL::ColorWriteMask writeMask = 0; - if (hash.colorWriteMask & 0x1) writeMask |= MTL::ColorWriteMaskRed; - if (hash.colorWriteMask & 0x2) writeMask |= MTL::ColorWriteMaskGreen; - if (hash.colorWriteMask & 0x4) writeMask |= MTL::ColorWriteMaskBlue; - if (hash.colorWriteMask & 0x8) writeMask |= MTL::ColorWriteMaskAlpha; - colorAttachment->setWriteMask(writeMask); - if (hash.blendEnabled) { - const u8 rgbEquation = hash.blendControl & 0x7; - const u8 alphaEquation = Helpers::getBits<8, 3>(hash.blendControl); - - // Get blending functions - const u8 rgbSourceFunc = Helpers::getBits<16, 4>(hash.blendControl); - const u8 rgbDestFunc = Helpers::getBits<20, 4>(hash.blendControl); - const u8 alphaSourceFunc = Helpers::getBits<24, 4>(hash.blendControl); - const u8 alphaDestFunc = Helpers::getBits<28, 4>(hash.blendControl); - - colorAttachment->setBlendingEnabled(true); - colorAttachment->setRgbBlendOperation(toMTLBlendOperation(rgbEquation)); - colorAttachment->setAlphaBlendOperation(toMTLBlendOperation(alphaEquation)); - colorAttachment->setSourceRGBBlendFactor(toMTLBlendFactor(rgbSourceFunc)); - colorAttachment->setDestinationRGBBlendFactor(toMTLBlendFactor(rgbDestFunc)); - colorAttachment->setSourceAlphaBlendFactor(toMTLBlendFactor(alphaSourceFunc)); - colorAttachment->setDestinationAlphaBlendFactor(toMTLBlendFactor(alphaDestFunc)); - } - - MTL::PixelFormat depthFormat = toMTLPixelFormatDepth(hash.depthFmt); - desc->setDepthAttachmentPixelFormat(depthFormat); - if (hash.depthFmt == DepthFmt::Depth24Stencil8) desc->setStencilAttachmentPixelFormat(depthFormat); - - NS::Error* error = nullptr; - desc->setLabel(toNSString("Draw pipeline")); - pipeline = device->newRenderPipelineState(desc, &error); - if (error) { - Helpers::panic("Error creating draw pipeline state: %s", error->description()->cString(NS::ASCIIStringEncoding)); - } - - desc->release(); - } - - return pipeline; - } - - void reset() { - for (auto& pair : pipelineCache) { - pair.second->release(); - } - pipelineCache.clear(); - - for (auto& pair : fragmentFunctionCache) { - pair.second->release(); - } - fragmentFunctionCache.clear(); - } - - private: - std::map pipelineCache; - std::map fragmentFunctionCache; - - MTL::Device* device; - MTL::Library* library; - MTL::Function* vertexFunction; - MTL::VertexDescriptor* vertexDescriptor; - }; - -} // namespace Metal diff --git a/include/renderer_mtl/mtl_lut_texture.hpp b/include/renderer_mtl/mtl_lut_texture.hpp deleted file mode 100644 index 531dc73c..00000000 --- a/include/renderer_mtl/mtl_lut_texture.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include - -namespace Metal { - -class LutTexture { -public: - LutTexture(MTL::Device* device, MTL::TextureType type, MTL::PixelFormat pixelFormat, u32 width, u32 height, const char* name); - ~LutTexture(); - u32 getNextIndex(); - - MTL::Texture* getTexture() { return texture; } - u32 getCurrentIndex() { return currentIndex; } -private: - MTL::Texture* texture; - u32 currentIndex = 0; -}; - -} // namespace Metal diff --git a/include/renderer_mtl/mtl_render_target.hpp b/include/renderer_mtl/mtl_render_target.hpp deleted file mode 100644 index 65f921da..00000000 --- a/include/renderer_mtl/mtl_render_target.hpp +++ /dev/null @@ -1,91 +0,0 @@ -#pragma once -#include -#include -#include - -#include "boost/icl/interval.hpp" -#include "helpers.hpp" -#include "math_util.hpp" -#include "objc_helper.hpp" -#include "opengl.hpp" -#include "pica_to_mtl.hpp" - -template -using Interval = boost::icl::right_open_interval; - -namespace Metal { - template - struct RenderTarget { - MTL::Device* device; - - u32 location; - Format_t format; - OpenGL::uvec2 size; - bool valid; - - // Range of VRAM taken up by buffer - Interval range; - - MTL::Texture* texture = nullptr; - - RenderTarget() : valid(false) {} - - RenderTarget(MTL::Device* dev, u32 loc, Format_t format, u32 x, u32 y, bool valid = true) - : device(dev), location(loc), format(format), size({x, y}), valid(valid) { - u64 endLoc = (u64)loc + sizeInBytes(); - // Check if start and end are valid here - range = Interval(loc, (u32)endLoc); - } - - Math::Rect getSubRect(u32 inputAddress, u32 width, u32 height) { - const u32 startOffset = (inputAddress - location) / sizePerPixel(format); - const u32 x0 = (startOffset % (size.x() * 8)) / 8; - const u32 y0 = (startOffset / (size.x() * 8)) * 8; - return Math::Rect{x0, size.y() - y0, x0 + width, size.y() - height - y0}; - } - - // For 2 textures to "match" we only care about their locations, formats, and dimensions to match - // For other things, such as filtering mode, etc, we can just switch the attributes of the cached texture - bool matches(RenderTarget& other) { - return location == other.location && format == other.format && size.x() == other.size.x() && size.y() == other.size.y(); - } - - void allocate() { - MTL::PixelFormat pixelFormat = MTL::PixelFormatInvalid; - if (std::is_same::value) { - pixelFormat = PICA::toMTLPixelFormatColor((PICA::ColorFmt)format); - } else if (std::is_same::value) { - pixelFormat = PICA::toMTLPixelFormatDepth((PICA::DepthFmt)format); - } else { - Helpers::panic("Invalid format type"); - } - - MTL::TextureDescriptor* descriptor = MTL::TextureDescriptor::alloc()->init(); - descriptor->setTextureType(MTL::TextureType2D); - descriptor->setPixelFormat(pixelFormat); - descriptor->setWidth(size.u()); - descriptor->setHeight(size.v()); - descriptor->setUsage(MTL::TextureUsageRenderTarget | MTL::TextureUsageShaderRead); - descriptor->setStorageMode(MTL::StorageModePrivate); - texture = device->newTexture(descriptor); - texture->setLabel(toNSString( - std::string(std::is_same::value ? "Color" : "Depth") + " render target " + std::to_string(size.u()) + "x" + - std::to_string(size.v()) - )); - descriptor->release(); - } - - void free() { - valid = false; - - if (texture) { - texture->release(); - } - } - - u64 sizeInBytes() { return (size_t)size.x() * (size_t)size.y() * PICA::sizePerPixel(format); } - }; - - using ColorRenderTarget = RenderTarget; - using DepthStencilRenderTarget = RenderTarget; -} // namespace Metal diff --git a/include/renderer_mtl/mtl_texture.hpp b/include/renderer_mtl/mtl_texture.hpp deleted file mode 100644 index b6989434..00000000 --- a/include/renderer_mtl/mtl_texture.hpp +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "PICA/pica_hash.hpp" -#include "PICA/regs.hpp" -#include "boost/icl/interval.hpp" -#include "helpers.hpp" -#include "math_util.hpp" -#include "renderer_mtl/pica_to_mtl.hpp" -// TODO: remove dependency on OpenGL -#include "opengl.hpp" - -template -using Interval = boost::icl::right_open_interval; - -namespace Metal { - struct Texture { - using Hash = PICAHash::HashType; - - MTL::Device* device; - - u32 location; - u32 config; // Magnification/minification filter, wrapping configs, etc - Hash hash = Hash(0); - - PICA::TextureFmt format; - OpenGL::uvec2 size; - bool valid; - - // Range of VRAM taken up by buffer - Interval range; - - PICA::MTLPixelFormatInfo formatInfo; - MTL::Texture* base = nullptr; - MTL::Texture* texture = nullptr; - MTL::SamplerState* sampler = nullptr; - - Texture() : valid(false) {} - - Texture(MTL::Device* dev, u32 loc, PICA::TextureFmt format, u32 x, u32 y, u32 config, bool valid = true) - : device(dev), location(loc), format(format), size({x, y}), config(config), valid(valid) { - u64 endLoc = (u64)loc + sizeInBytes(); - // Check if start and end are valid here - range = Interval(loc, (u32)endLoc); - } - - // For 2 textures to "match" we only care about their locations, formats, and dimensions to match - // For other things, such as filtering mode, etc, we can just switch the attributes of the cached texture - bool matches(Texture& other) { - return location == other.location && hash == other.hash && format == other.format && size.x() == other.size.x() && - size.y() == other.size.y(); - } - - void allocate(); - void setNewConfig(u32 newConfig); - void decodeTexture(std::span data); - void free(); - u64 sizeInBytes(); - - // Returns the format of this texture as a string - std::string_view formatToString() { return PICA::textureFormatToString(format); } - }; -} // namespace Metal diff --git a/include/renderer_mtl/mtl_vertex_buffer_cache.hpp b/include/renderer_mtl/mtl_vertex_buffer_cache.hpp deleted file mode 100644 index b392389c..00000000 --- a/include/renderer_mtl/mtl_vertex_buffer_cache.hpp +++ /dev/null @@ -1,83 +0,0 @@ -#pragma once - -#include - -#include "helpers.hpp" -#include "pica_to_mtl.hpp" - - -using namespace PICA; - -namespace Metal { - struct BufferHandle { - MTL::Buffer* buffer; - usize offset; - }; - - class VertexBufferCache { - // 128MB buffer for caching vertex data - static constexpr usize CACHE_BUFFER_SIZE = 128 * 1024 * 1024; - - public: - VertexBufferCache() = default; - - ~VertexBufferCache() { - endFrame(); - buffer->release(); - } - - void set(MTL::Device* dev) { - device = dev; - create(); - } - - void endFrame() { - ptr = 0; - for (auto buffer : additionalAllocations) { - buffer->release(); - } - additionalAllocations.clear(); - } - - BufferHandle get(const void* data, usize size) { - // If the vertex buffer is too large, just create a new one - if (ptr + size > CACHE_BUFFER_SIZE) { - MTL::Buffer* newBuffer = device->newBuffer(data, size, MTL::ResourceStorageModeShared); - newBuffer->setLabel(toNSString("Additional vertex buffer")); - additionalAllocations.push_back(newBuffer); - Helpers::warn("Vertex buffer doesn't have enough space, creating a new buffer"); - - return BufferHandle{newBuffer, 0}; - } - - // Copy the data into the buffer - std::memcpy((char*)buffer->contents() + ptr, data, size); - - auto oldPtr = ptr; - ptr += size; - - return BufferHandle{buffer, oldPtr}; - } - - void reset() { - endFrame(); - - if (buffer) { - buffer->release(); - create(); - } - } - - private: - MTL::Buffer* buffer = nullptr; - usize ptr = 0; - std::vector additionalAllocations; - - MTL::Device* device; - - void create() { - buffer = device->newBuffer(CACHE_BUFFER_SIZE, MTL::ResourceStorageModeShared); - buffer->setLabel(toNSString("Shared vertex buffer")); - } - }; -} // namespace Metal diff --git a/include/renderer_mtl/objc_helper.hpp b/include/renderer_mtl/objc_helper.hpp deleted file mode 100644 index 86992f1d..00000000 --- a/include/renderer_mtl/objc_helper.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include - -#include "mtl_common.hpp" - -namespace Metal { - dispatch_data_t createDispatchData(const void* data, size_t size); -} // namespace Metal - -// Cast from std::string to NS::String* -inline NS::String* toNSString(const std::string& str) { return NS::String::string(str.c_str(), NS::ASCIIStringEncoding); } \ No newline at end of file diff --git a/include/renderer_mtl/pica_to_mtl.hpp b/include/renderer_mtl/pica_to_mtl.hpp deleted file mode 100644 index d4c6dc7c..00000000 --- a/include/renderer_mtl/pica_to_mtl.hpp +++ /dev/null @@ -1,153 +0,0 @@ -#pragma once - -#include - -#include "PICA/regs.hpp" -// TODO: remove dependency on OpenGL -#include "opengl.hpp" - -namespace PICA { - struct MTLPixelFormatInfo { - MTL::PixelFormat pixelFormat; - size_t bytesPerTexel; - void (*decoder)(OpenGL::uvec2, u32, u32, std::span, u8*); - - bool needsSwizzle = false; - MTL::TextureSwizzleChannels swizzle{ - .red = MTL::TextureSwizzleRed, - .green = MTL::TextureSwizzleGreen, - .blue = MTL::TextureSwizzleBlue, - .alpha = MTL::TextureSwizzleAlpha, - }; - }; - - extern MTLPixelFormatInfo mtlPixelFormatInfos[14]; - - void checkForMTLPixelFormatSupport(MTL::Device* device); - inline MTLPixelFormatInfo getMTLPixelFormatInfo(TextureFmt format) { return mtlPixelFormatInfos[static_cast(format)]; } - - inline MTL::PixelFormat toMTLPixelFormatColor(ColorFmt format) { - switch (format) { - case ColorFmt::RGBA8: return MTL::PixelFormatRGBA8Unorm; - case ColorFmt::RGB8: return MTL::PixelFormatRGBA8Unorm; - case ColorFmt::RGBA5551: return MTL::PixelFormatRGBA8Unorm; // TODO: use MTL::PixelFormatBGR5A1Unorm? - case ColorFmt::RGB565: return MTL::PixelFormatRGBA8Unorm; // TODO: use MTL::PixelFormatB5G6R5Unorm? -#ifdef PANDA3DS_IOS - case ColorFmt::RGBA4: return MTL::PixelFormatRGBA8Unorm; // IOS + Metal doesn't support AGBR4 properly, at least on simulator -#else - case ColorFmt::RGBA4: return MTL::PixelFormatABGR4Unorm; -#endif - } - } - - inline MTL::PixelFormat toMTLPixelFormatDepth(DepthFmt format) { - switch (format) { - case DepthFmt::Depth16: return MTL::PixelFormatDepth16Unorm; - case DepthFmt::Unknown1: return MTL::PixelFormatInvalid; - case DepthFmt::Depth24: - return MTL::PixelFormatDepth32Float; // Metal does not support 24-bit depth formats - // Apple sillicon doesn't support 24-bit depth buffers, so we use 32-bit instead - case DepthFmt::Depth24Stencil8: return MTL::PixelFormatDepth32Float_Stencil8; - } - } - - inline MTL::CompareFunction toMTLCompareFunc(u8 func) { - switch (func) { - case 0: return MTL::CompareFunctionNever; - case 1: return MTL::CompareFunctionAlways; - case 2: return MTL::CompareFunctionEqual; - case 3: return MTL::CompareFunctionNotEqual; - case 4: return MTL::CompareFunctionLess; - case 5: return MTL::CompareFunctionLessEqual; - case 6: return MTL::CompareFunctionGreater; - case 7: return MTL::CompareFunctionGreaterEqual; - default: Helpers::panic("Unknown compare function %u", func); - } - - return MTL::CompareFunctionAlways; - } - - inline MTL::BlendOperation toMTLBlendOperation(u8 op) { - switch (op) { - case 0: return MTL::BlendOperationAdd; - case 1: return MTL::BlendOperationSubtract; - case 2: return MTL::BlendOperationReverseSubtract; - case 3: return MTL::BlendOperationMin; - case 4: return MTL::BlendOperationMax; - case 5: return MTL::BlendOperationAdd; // Unused (same as 0) - case 6: return MTL::BlendOperationAdd; // Unused (same as 0) - case 7: return MTL::BlendOperationAdd; // Unused (same as 0) - default: Helpers::panic("Unknown blend operation %u", op); - } - - return MTL::BlendOperationAdd; - } - - inline MTL::BlendFactor toMTLBlendFactor(u8 factor) { - switch (factor) { - case 0: return MTL::BlendFactorZero; - case 1: return MTL::BlendFactorOne; - case 2: return MTL::BlendFactorSourceColor; - case 3: return MTL::BlendFactorOneMinusSourceColor; - case 4: return MTL::BlendFactorDestinationColor; - case 5: return MTL::BlendFactorOneMinusDestinationColor; - case 6: return MTL::BlendFactorSourceAlpha; - case 7: return MTL::BlendFactorOneMinusSourceAlpha; - case 8: return MTL::BlendFactorDestinationAlpha; - case 9: return MTL::BlendFactorOneMinusDestinationAlpha; - case 10: return MTL::BlendFactorBlendColor; - case 11: return MTL::BlendFactorOneMinusBlendColor; - case 12: return MTL::BlendFactorBlendAlpha; - case 13: return MTL::BlendFactorOneMinusBlendAlpha; - case 14: return MTL::BlendFactorSourceAlphaSaturated; - case 15: return MTL::BlendFactorOne; // Undocumented - default: Helpers::panic("Unknown blend factor %u", factor); - } - - return MTL::BlendFactorOne; - } - - inline MTL::StencilOperation toMTLStencilOperation(u8 op) { - switch (op) { - case 0: return MTL::StencilOperationKeep; - case 1: return MTL::StencilOperationZero; - case 2: return MTL::StencilOperationReplace; - case 3: return MTL::StencilOperationIncrementClamp; - case 4: return MTL::StencilOperationDecrementClamp; - case 5: return MTL::StencilOperationInvert; - case 6: return MTL::StencilOperationIncrementWrap; - case 7: return MTL::StencilOperationDecrementWrap; - default: Helpers::panic("Unknown stencil operation %u", op); - } - - return MTL::StencilOperationKeep; - } - - inline MTL::PrimitiveType toMTLPrimitiveType(PrimType primType) { - switch (primType) { - case PrimType::TriangleList: return MTL::PrimitiveTypeTriangle; - case PrimType::TriangleStrip: return MTL::PrimitiveTypeTriangleStrip; - case PrimType::TriangleFan: - Helpers::warn("Triangle fans are not supported on Metal, using triangles instead"); - return MTL::PrimitiveTypeTriangle; - case PrimType::GeometryPrimitive: - return MTL::PrimitiveTypeTriangle; - } - } - - inline MTL::SamplerAddressMode toMTLSamplerAddressMode(u8 addrMode) { - switch (addrMode) { - case 0: return MTL::SamplerAddressModeClampToEdge; - case 1: return MTL::SamplerAddressModeClampToBorderColor; - case 2: return MTL::SamplerAddressModeRepeat; - case 3: return MTL::SamplerAddressModeMirrorRepeat; - case 4: return MTL::SamplerAddressModeClampToEdge; - case 5: return MTL::SamplerAddressModeClampToBorderColor; - case 6: return MTL::SamplerAddressModeRepeat; - case 7: return MTL::SamplerAddressModeRepeat; - default: Helpers::panic("Unknown sampler address mode %u", addrMode); - } - - return MTL::SamplerAddressModeClampToEdge; - } -} // namespace PICA diff --git a/include/renderer_mtl/renderer_mtl.hpp b/include/renderer_mtl/renderer_mtl.hpp deleted file mode 100644 index 29eb02d4..00000000 --- a/include/renderer_mtl/renderer_mtl.hpp +++ /dev/null @@ -1,219 +0,0 @@ -#pragma once - -#include -#include - -#include "mtl_blit_pipeline_cache.hpp" -#include "mtl_command_encoder.hpp" -#include "mtl_depth_stencil_cache.hpp" -#include "mtl_draw_pipeline_cache.hpp" -#include "mtl_lut_texture.hpp" -#include "mtl_render_target.hpp" -#include "mtl_texture.hpp" -#include "mtl_vertex_buffer_cache.hpp" -#include "renderer.hpp" - -// HACK: use the OpenGL cache -#include "../renderer_gl/surface_cache.hpp" - -class GPU; - -struct Color4 { - float r, g, b, a; -}; - -class RendererMTL final : public Renderer { - public: - RendererMTL(GPU& gpu, const std::array& internalRegs, const std::array& externalRegs); - ~RendererMTL() override; - - void reset() override; - void display() override; - void initGraphicsContext(void* context) override; - void clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) override; - void displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) override; - void textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) override; - void drawVertices(PICA::PrimType primType, std::span vertices) override; - void screenshot(const std::string& name) override; - void deinitGraphicsContext() override; - - virtual void setMTKLayer(void* layer) override; - - private: - CA::MetalLayer* metalLayer = nullptr; - - MTL::Device* device = nullptr; - MTL::CommandQueue* commandQueue = nullptr; - - Metal::CommandEncoder commandEncoder; - - // Libraries - MTL::Library* library; - - // Caches - SurfaceCache colorRenderTargetCache; - SurfaceCache depthStencilRenderTargetCache; - SurfaceCache textureCache; - Metal::BlitPipelineCache blitPipelineCache; - Metal::DrawPipelineCache drawPipelineCache; - Metal::DepthStencilCache depthStencilCache; - Metal::VertexBufferCache vertexBufferCache; - - // Resources - MTL::SamplerState* nearestSampler; - MTL::SamplerState* linearSampler; - MTL::Texture* nullTexture; - MTL::DepthStencilState* defaultDepthStencilState; - - Metal::LutTexture* lutLightingTexture; - Metal::LutTexture* lutFogTexture; - - // Pipelines - MTL::RenderPipelineState* displayPipeline; - // MTL::RenderPipelineState* copyToLutTexturePipeline; - - // Clears - std::map colorClearOps; - std::map depthClearOps; - std::map stencilClearOps; - - // Active state - MTL::CommandBuffer* commandBuffer = nullptr; - MTL::RenderCommandEncoder* renderCommandEncoder = nullptr; - MTL::Texture* lastColorTexture = nullptr; - MTL::Texture* lastDepthTexture = nullptr; - - // Information about the final 3DS screen -> Window blit, accounting for things like scaling and shifting the output based on - // the window's dimensions. Updated whenever the screen size or layout changes. - struct { - float topScreenX = 0; - float topScreenY = 0; - float topScreenWidth = 400; - float topScreenHeight = 240; - - float bottomScreenX = 40; - float bottomScreenY = 240; - float bottomScreenWidth = 320; - float bottomScreenHeight = 240; - } blitInfo; - - // Debug - std::string nextRenderPassName; - - void createCommandBufferIfNeeded() { - if (!commandBuffer) { - commandBuffer = commandQueue->commandBuffer(); - } - } - - void endRenderPass() { - if (renderCommandEncoder) { - renderCommandEncoder->endEncoding(); - renderCommandEncoder->release(); - renderCommandEncoder = nullptr; - } - } - - void beginRenderPassIfNeeded( - MTL::RenderPassDescriptor* renderPassDescriptor, bool doesClears, MTL::Texture* colorTexture, MTL::Texture* depthTexture = nullptr - ); - - void commitCommandBuffer() { - if (renderCommandEncoder) { - renderCommandEncoder->endEncoding(); - renderCommandEncoder->release(); - renderCommandEncoder = nullptr; - } - if (commandBuffer) { - commandBuffer->commit(); - // HACK - commandBuffer->waitUntilCompleted(); - commandBuffer->release(); - commandBuffer = nullptr; - } - } - - template - inline void clearAttachment( - MTL::RenderPassDescriptor* renderPassDescriptor, MTL::Texture* texture, ClearDataT clearData, GetAttachmentT getAttachment, - SetClearDataT setClearData - ) { - bool beginRenderPass = (renderPassDescriptor == nullptr); - if (!renderPassDescriptor) { - renderPassDescriptor = MTL::RenderPassDescriptor::alloc()->init(); - } - - AttachmentT* attachment = getAttachment(renderPassDescriptor); - attachment->setTexture(texture); - setClearData(attachment, clearData); - attachment->setLoadAction(MTL::LoadActionClear); - attachment->setStoreAction(MTL::StoreActionStore); - - if (beginRenderPass) { - if (std::is_same::value) - beginRenderPassIfNeeded(renderPassDescriptor, true, texture); - else - beginRenderPassIfNeeded(renderPassDescriptor, true, nullptr, texture); - } - } - - template - inline bool clearAttachment( - MTL::RenderPassDescriptor* renderPassDescriptor, MTL::Texture* texture, std::map& clearOps, - GetAttachmentT getAttachment, SetClearDataT setClearData - ) { - auto it = clearOps.find(texture); - if (it != clearOps.end()) { - clearAttachment(renderPassDescriptor, texture, it->second, getAttachment, setClearData); - clearOps.erase(it); - return true; - } - - if (renderPassDescriptor) { - AttachmentT* attachment = getAttachment(renderPassDescriptor); - attachment->setTexture(texture); - attachment->setLoadAction(MTL::LoadActionLoad); - attachment->setStoreAction(MTL::StoreActionStore); - } - - return false; - } - - bool clearColor(MTL::RenderPassDescriptor* renderPassDescriptor, MTL::Texture* texture) { - return clearAttachment( - renderPassDescriptor, texture, colorClearOps, - [](MTL::RenderPassDescriptor* renderPassDescriptor) { return renderPassDescriptor->colorAttachments()->object(0); }, - [](auto attachment, auto& color) { attachment->setClearColor(MTL::ClearColor(color.r, color.g, color.b, color.a)); } - ); - } - - bool clearDepth(MTL::RenderPassDescriptor* renderPassDescriptor, MTL::Texture* texture) { - return clearAttachment( - renderPassDescriptor, texture, depthClearOps, - [](MTL::RenderPassDescriptor* renderPassDescriptor) { return renderPassDescriptor->depthAttachment(); }, - [](auto attachment, auto& depth) { attachment->setClearDepth(depth); } - ); - } - - bool clearStencil(MTL::RenderPassDescriptor* renderPassDescriptor, MTL::Texture* texture) { - return clearAttachment( - renderPassDescriptor, texture, stencilClearOps, - [](MTL::RenderPassDescriptor* renderPassDescriptor) { return renderPassDescriptor->stencilAttachment(); }, - [](auto attachment, auto& stencil) { attachment->setClearStencil(stencil); } - ); - } - - std::optional getColorRenderTarget( - u32 addr, PICA::ColorFmt format, u32 width, u32 height, bool createIfnotFound = true - ); - Metal::DepthStencilRenderTarget& getDepthRenderTarget(); - Metal::Texture& getTexture(Metal::Texture& tex); - void setupTextureEnvState(MTL::RenderCommandEncoder* encoder); - void bindTexturesToSlots(); - void updateLightingLUT(MTL::RenderCommandEncoder* encoder); - void updateFogLUT(MTL::RenderCommandEncoder* encoder); - void textureCopyImpl( - Metal::ColorRenderTarget& srcFramebuffer, Metal::ColorRenderTarget& destFramebuffer, const Math::Rect& srcRect, - const Math::Rect& destRect - ); -}; diff --git a/include/renderer_mtl/texture_decoder.hpp b/include/renderer_mtl/texture_decoder.hpp deleted file mode 100644 index 376231c0..00000000 --- a/include/renderer_mtl/texture_decoder.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include "helpers.hpp" -// TODO: remove dependency on OpenGL -#include "opengl.hpp" - -void decodeTexelABGR8ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelBGR8ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelA1BGR5ToBGR5A1(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelA1BGR5ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelB5G6R5ToB5G6R5(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelB5G6R5ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelABGR4ToABGR4(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelABGR4ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelAI8ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelGR8ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelI8ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelA8ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelAI4ToABGR4(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelAI4ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelI4ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelA4ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelETC1ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); -void decodeTexelETC1A4ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData); diff --git a/include/renderer_null/renderer_null.hpp b/include/renderer_null/renderer_null.hpp index 28ab41af..231ed41d 100644 --- a/include/renderer_null/renderer_null.hpp +++ b/include/renderer_null/renderer_null.hpp @@ -9,15 +9,10 @@ class RendererNull final : public Renderer { void reset() override; void display() override; - void initGraphicsContext(void* context) override; + void initGraphicsContext(SDL_Window* window) override; void clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) override; void displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) override; void textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) override; void drawVertices(PICA::PrimType primType, std::span vertices) override; void screenshot(const std::string& name) override; - void deinitGraphicsContext() override; - - // Tell the GPU core that we'll handle vertex fetch & shader execution in the renderer in order to speed up execution. - // Of course, we don't do this and geometry is never actually processed, since this is the null renderer. - virtual bool prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) override { return true; }; }; diff --git a/include/renderer_sw/renderer_sw.hpp b/include/renderer_sw/renderer_sw.hpp index e2dd90cb..9e68b00f 100644 --- a/include/renderer_sw/renderer_sw.hpp +++ b/include/renderer_sw/renderer_sw.hpp @@ -9,11 +9,10 @@ class RendererSw final : public Renderer { void reset() override; void display() override; - void initGraphicsContext(void* context) override; + void initGraphicsContext(SDL_Window* window) override; void clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) override; void displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) override; void textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) override; void drawVertices(PICA::PrimType primType, std::span vertices) override; void screenshot(const std::string& name) override; - void deinitGraphicsContext() override; }; diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index a274e1c7..92007674 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -113,11 +113,10 @@ class RendererVK final : public Renderer { void reset() override; void display() override; - void initGraphicsContext(void* context) override; + void initGraphicsContext(SDL_Window* window) override; void clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) override; void displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) override; void textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) override; void drawVertices(PICA::PrimType primType, std::span vertices) override; void screenshot(const std::string& name) override; - void deinitGraphicsContext() override; }; diff --git a/include/renderer_vk/vk_debug.hpp b/include/renderer_vk/vk_debug.hpp index 0cf3f938..ed712269 100644 --- a/include/renderer_vk/vk_debug.hpp +++ b/include/renderer_vk/vk_debug.hpp @@ -9,8 +9,8 @@ namespace Vulkan { VKAPI_ATTR VkBool32 VKAPI_CALL debugMessageCallback( - vk::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, vk::DebugUtilsMessageTypeFlagsEXT messageType, - const vk::DebugUtilsMessengerCallbackDataEXT* callbackData, void* userData + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, + const VkDebugUtilsMessengerCallbackDataEXT* callbackData, void* userData ); void setObjectName(vk::Device device, vk::ObjectType objectType, const void* objectHandle, const char* format, ...); diff --git a/include/result/result.hpp b/include/result/result.hpp index 94fe34e1..53bb725d 100644 --- a/include/result/result.hpp +++ b/include/result/result.hpp @@ -2,9 +2,8 @@ #include "result_cfg.hpp" #include "result_common.hpp" +#include "result_kernel.hpp" +#include "result_os.hpp" #include "result_fnd.hpp" #include "result_fs.hpp" -#include "result_gsp.hpp" -#include "result_ir.hpp" -#include "result_kernel.hpp" -#include "result_os.hpp" \ No newline at end of file +#include "result_gsp.hpp" \ No newline at end of file diff --git a/include/result/result_common.hpp b/include/result/result_common.hpp index 5bc6592a..6a7d9bdb 100644 --- a/include/result/result_common.hpp +++ b/include/result/result_common.hpp @@ -42,7 +42,7 @@ namespace Result { OS = 6, DBG = 7, DMNT = 8, - PDN = 9, + PDN = 9 , GSP = 10, I2C = 11, GPIO = 12, @@ -132,7 +132,7 @@ namespace Result { }; class HorizonResult { - private: + private: static const uint32_t DescriptionBits = 10; static const uint32_t ModuleBits = 8; static const uint32_t ReservedBits = 3; @@ -156,8 +156,8 @@ namespace Result { return (description << DescriptionOffset) | (module << ModuleOffset) | (summary << SummaryOffset) | (level << LevelOffset); } - public: - constexpr HorizonResult() : m_value(0) {} + public: + constexpr HorizonResult() {} constexpr HorizonResult(uint32_t value) : m_value(value) {} constexpr HorizonResult(uint32_t description, HorizonResultModule module, HorizonResultSummary summary, HorizonResultLevel level) : m_value(makeValue(description, static_cast(module), static_cast(summary), static_cast(level))) {} constexpr operator uint32_t() const { return m_value; } @@ -193,14 +193,14 @@ namespace Result { static_assert(std::is_trivially_destructible::value, "std::is_trivially_destructible::value"); -#define DEFINE_HORIZON_RESULT_MODULE(ns, value) \ - namespace ns::Detail { \ - static constexpr HorizonResultModule ModuleId = HorizonResultModule::value; \ - } + #define DEFINE_HORIZON_RESULT_MODULE(ns, value) \ + namespace ns::Detail {\ + static constexpr HorizonResultModule ModuleId = HorizonResultModule::value; \ + } -#define DEFINE_HORIZON_RESULT(name, description, summary, level) \ - static constexpr HorizonResult name(description, Detail::ModuleId, HorizonResultSummary::summary, HorizonResultLevel::level); + #define DEFINE_HORIZON_RESULT(name, description, summary, level) \ + static constexpr HorizonResult name(description, Detail::ModuleId, HorizonResultSummary::summary, HorizonResultLevel::level); static constexpr HorizonResult Success(0); static constexpr HorizonResult FailurePlaceholder(UINT32_MAX); -}; // namespace Result +}; diff --git a/include/result/result_fnd.hpp b/include/result/result_fnd.hpp index 9618be1c..9d8cfba7 100644 --- a/include/result/result_fnd.hpp +++ b/include/result/result_fnd.hpp @@ -4,5 +4,5 @@ DEFINE_HORIZON_RESULT_MODULE(Result::FND, FND); namespace Result::FND { - DEFINE_HORIZON_RESULT(InvalidEnumValue, 1005, InvalidArgument, Permanent); + DEFINE_HORIZON_RESULT(InvalidEnumValue, 1005, InvalidArgument, Permanent); }; diff --git a/include/result/result_fs.hpp b/include/result/result_fs.hpp index b7e798f9..96df0995 100644 --- a/include/result/result_fs.hpp +++ b/include/result/result_fs.hpp @@ -4,21 +4,15 @@ DEFINE_HORIZON_RESULT_MODULE(Result::FS, FS); namespace Result::FS { - // TODO: Verify this - DEFINE_HORIZON_RESULT(FileNotFound, 100, NotFound, Status); - // TODO: Verify this - DEFINE_HORIZON_RESULT(FileNotFoundAlt, 112, NotFound, Status); - // Also a not found error code used here and there in the FS module. - DEFINE_HORIZON_RESULT(NotFoundInvalid, 120, InvalidState, Status); - DEFINE_HORIZON_RESULT(AlreadyExists, 190, NothingHappened, Info); - DEFINE_HORIZON_RESULT(FileTooLarge, 210, OutOfResource, Info); - // Trying to access an archive that needs formatting and has not been formatted - DEFINE_HORIZON_RESULT(NotFormatted, 340, InvalidState, Status); - DEFINE_HORIZON_RESULT(UnexpectedFileOrDir, 770, NotSupported, Usage); - - // Trying to rename a file that doesn't exist or is a directory - DEFINE_HORIZON_RESULT(RenameNonexistentFileOrDir, 120, NotFound, Status); - - // Trying to rename a file but the destination already exists - DEFINE_HORIZON_RESULT(RenameFileDestExists, 190, NothingHappened, Status); -}; // namespace Result::FS + // TODO: Verify this + DEFINE_HORIZON_RESULT(FileNotFound, 100, NotFound, Status); + // TODO: Verify this + DEFINE_HORIZON_RESULT(FileNotFoundAlt, 112, NotFound, Status); + // Also a not found error code used here and there in the FS module. + DEFINE_HORIZON_RESULT(NotFoundInvalid, 120, InvalidState, Status); + DEFINE_HORIZON_RESULT(AlreadyExists, 190, NothingHappened, Info); + DEFINE_HORIZON_RESULT(FileTooLarge, 210, OutOfResource, Info); + // Trying to access an archive that needs formatting and has not been formatted + DEFINE_HORIZON_RESULT(NotFormatted, 340, InvalidState, Status); + DEFINE_HORIZON_RESULT(UnexpectedFileOrDir, 770, NotSupported, Usage); +}; diff --git a/include/result/result_gsp.hpp b/include/result/result_gsp.hpp index 00af9c37..03c51f30 100644 --- a/include/result/result_gsp.hpp +++ b/include/result/result_gsp.hpp @@ -4,5 +4,5 @@ DEFINE_HORIZON_RESULT_MODULE(Result::GSP, GSP); namespace Result::GSP { - DEFINE_HORIZON_RESULT(SuccessRegisterIRQ, 519, Success, Success); + DEFINE_HORIZON_RESULT(SuccessRegisterIRQ, 519, Success, Success); }; diff --git a/include/result/result_ir.hpp b/include/result/result_ir.hpp deleted file mode 100644 index ef38fd1f..00000000 --- a/include/result/result_ir.hpp +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once -#include "result_common.hpp" - -DEFINE_HORIZON_RESULT_MODULE(Result::IR, IR); - -namespace Result::IR { - DEFINE_HORIZON_RESULT(NoDeviceConnected, 13, InvalidState, Status); -}; diff --git a/include/result/result_kernel.hpp b/include/result/result_kernel.hpp index f788d5f7..308745ec 100644 --- a/include/result/result_kernel.hpp +++ b/include/result/result_kernel.hpp @@ -4,11 +4,12 @@ DEFINE_HORIZON_RESULT_MODULE(Result::Kernel, Kernel); namespace Result::Kernel { - // Returned when a thread releases a mutex it does not own - DEFINE_HORIZON_RESULT(InvalidMutexRelease, 31, InvalidArgument, Permanent); - DEFINE_HORIZON_RESULT(NotFound, 1018, NotFound, Permanent); - DEFINE_HORIZON_RESULT(InvalidEnumValue, 1005, InvalidArgument, Permanent); - DEFINE_HORIZON_RESULT(InvalidHandle, 1015, InvalidArgument, Permanent); + // Returned when a thread releases a mutex it does not own + DEFINE_HORIZON_RESULT(InvalidMutexRelease, 31, InvalidArgument, Permanent); + DEFINE_HORIZON_RESULT(NotFound, 1018, NotFound, Permanent); + DEFINE_HORIZON_RESULT(InvalidEnumValue, 1005, InvalidArgument, Permanent); + DEFINE_HORIZON_RESULT(InvalidHandle, 1015, InvalidArgument, Permanent); - static_assert(InvalidHandle == 0xD8E007F7, "conversion broken"); -}; // namespace Result::Kernel + + static_assert(InvalidHandle == 0xD8E007F7, "conversion broken"); +}; diff --git a/include/result/result_os.hpp b/include/result/result_os.hpp index 92025366..f9b6d4dc 100644 --- a/include/result/result_os.hpp +++ b/include/result/result_os.hpp @@ -4,12 +4,11 @@ DEFINE_HORIZON_RESULT_MODULE(Result::OS, OS); namespace Result::OS { - DEFINE_HORIZON_RESULT(PortNameTooLong, 30, InvalidArgument, Usage); - DEFINE_HORIZON_RESULT(InvalidCombination, 1006, InvalidArgument, Usage); - DEFINE_HORIZON_RESULT(MisalignedAddress, 1009, InvalidArgument, Usage); - DEFINE_HORIZON_RESULT(MisalignedSize, 1010, InvalidArgument, Usage); - DEFINE_HORIZON_RESULT(NotImplemented, 1012, InvalidArgument, Usage); - DEFINE_HORIZON_RESULT(InvalidHandle, 1015, WrongArgument, Permanent); - DEFINE_HORIZON_RESULT(OutOfRange, 1021, InvalidArgument, Usage); - DEFINE_HORIZON_RESULT(Timeout, 1022, StatusChanged, Info); -}; // namespace Result::OS + DEFINE_HORIZON_RESULT(PortNameTooLong, 30, InvalidArgument, Usage); + DEFINE_HORIZON_RESULT(InvalidHandle, 1015, WrongArgument, Permanent); + DEFINE_HORIZON_RESULT(InvalidCombination, 1006, InvalidArgument, Usage); + DEFINE_HORIZON_RESULT(MisalignedAddress, 1009, InvalidArgument, Usage); + DEFINE_HORIZON_RESULT(MisalignedSize, 1010, InvalidArgument, Usage); + DEFINE_HORIZON_RESULT(OutOfRange, 1021, InvalidArgument, Usage); + DEFINE_HORIZON_RESULT(Timeout, 1022, StatusChanged, Info); +}; diff --git a/include/ring_buffer.hpp b/include/ring_buffer.hpp deleted file mode 100644 index 35d7d935..00000000 --- a/include/ring_buffer.hpp +++ /dev/null @@ -1,111 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Common { - /// SPSC ring buffer - /// @tparam T Element type - /// @tparam capacity Number of slots in ring buffer - template - class RingBuffer { - /// A "slot" is made of a single `T`. - static constexpr std::size_t slot_size = sizeof(T); - // T must be safely memcpy-able and have a trivial default constructor. - static_assert(std::is_trivial_v); - // Ensure capacity is sensible. - static_assert(capacity < std::numeric_limits::max() / 2); - static_assert((capacity & (capacity - 1)) == 0, "capacity must be a power of two"); - // Ensure lock-free. - static_assert(std::atomic_size_t::is_always_lock_free); - - public: - /// Pushes slots into the ring buffer - /// @param new_slots Pointer to the slots to push - /// @param slot_count Number of slots to push - /// @returns The number of slots actually pushed - std::size_t push(const void* new_slots, std::size_t slot_count) { - const std::size_t write_index = m_write_index.load(); - const std::size_t slots_free = capacity + m_read_index.load() - write_index; - const std::size_t push_count = std::min(slot_count, slots_free); - - const std::size_t pos = write_index % capacity; - const std::size_t first_copy = std::min(capacity - pos, push_count); - const std::size_t second_copy = push_count - first_copy; - - const char* in = static_cast(new_slots); - std::memcpy(m_data.data() + pos, in, first_copy * slot_size); - in += first_copy * slot_size; - std::memcpy(m_data.data(), in, second_copy * slot_size); - - m_write_index.store(write_index + push_count); - - return push_count; - } - - std::size_t push(std::span input) { return push(input.data(), input.size()); } - - /// Pops slots from the ring buffer - /// @param output Where to store the popped slots - /// @param max_slots Maximum number of slots to pop - /// @returns The number of slots actually popped - std::size_t pop(void* output, std::size_t max_slots = ~std::size_t(0)) { - const std::size_t read_index = m_read_index.load(); - const std::size_t slots_filled = m_write_index.load() - read_index; - const std::size_t pop_count = std::min(slots_filled, max_slots); - - const std::size_t pos = read_index % capacity; - const std::size_t first_copy = std::min(capacity - pos, pop_count); - const std::size_t second_copy = pop_count - first_copy; - - char* out = static_cast(output); - std::memcpy(out, m_data.data() + pos, first_copy * slot_size); - out += first_copy * slot_size; - std::memcpy(out, m_data.data(), second_copy * slot_size); - - m_read_index.store(read_index + pop_count); - - return pop_count; - } - - std::vector pop(std::size_t max_slots = ~std::size_t(0)) { - std::vector out(std::min(max_slots, capacity)); - const std::size_t count = Pop(out.data(), out.size()); - out.resize(count); - return out; - } - - /// @returns Number of slots used - [[nodiscard]] std::size_t size() const { return m_write_index.load() - m_read_index.load(); } - - /// @returns Maximum size of ring buffer - [[nodiscard]] constexpr std::size_t Capacity() const { return capacity; } - - private: - // It is important to align the below variables for performance reasons: - // Having them on the same cache-line would result in false-sharing between them. - // TODO: Remove this ifdef whenever clang and GCC support - // std::hardware_destructive_interference_size. -#if defined(__cpp_lib_hardware_interference_size) && !defined(__ANDROID__) - alignas(std::hardware_destructive_interference_size) std::atomic_size_t m_read_index{0}; - alignas(std::hardware_destructive_interference_size) std::atomic_size_t m_write_index{0}; -#else - alignas(128) std::atomic_size_t m_read_index{0}; - alignas(128) std::atomic_size_t m_write_index{0}; -#endif - - std::array m_data; - }; - -} // namespace Common diff --git a/include/scheduler.hpp b/include/scheduler.hpp deleted file mode 100644 index 8765ae66..00000000 --- a/include/scheduler.hpp +++ /dev/null @@ -1,92 +0,0 @@ -#pragma once -#include -#include -#include - -#include "helpers.hpp" -#include "logger.hpp" - -struct Scheduler { - enum class EventType { - VBlank = 0, // End of frame event - UpdateTimers = 1, // Update kernel timer objects - RunDSP = 2, // Make the emulated DSP run for one audio frame - SignalY2R = 3, // Signal that a Y2R conversion has finished - UpdateIR = 4, // Update an IR device (For now, just the CirclePad Pro/N3DS controls) - Panic = 5, // Dummy event that is always pending and should never be triggered (Timestamp = UINT64_MAX) - TotalNumberOfEvents // How many event types do we have in total? - }; - static constexpr usize totalNumberOfEvents = static_cast(EventType::TotalNumberOfEvents); - static constexpr u64 arm11Clock = 268111856; - - template - using EventMap = boost::container::flat_multimap, boost::container::static_vector, size>>; - - EventMap events; - u64 currentTimestamp = 0; - u64 nextTimestamp = 0; - - // Set nextTimestamp to the timestamp of the next event - void updateNextTimestamp() { nextTimestamp = events.cbegin()->first; } - - void addEvent(EventType type, u64 timestamp) { - events.emplace(timestamp, type); - updateNextTimestamp(); - } - - void removeEvent(EventType type) { - for (auto it = events.begin(); it != events.end(); it++) { - // Find first event of type "type" and remove it. - // Our scheduler shouldn't have duplicate events, so it's safe to exit when an event is found - if (it->second == type) { - events.erase(it); - updateNextTimestamp(); - break; - } - } - }; - - void reset() { - currentTimestamp = 0; - - // Clear any pending events - events.clear(); - addEvent(Scheduler::EventType::VBlank, arm11Clock / 60); - - // Add a dummy event to always keep the scheduler non-empty - addEvent(EventType::Panic, std::numeric_limits::max()); - } - - private: - static constexpr u64 MAX_VALUE_TO_MULTIPLY = std::numeric_limits::max() / arm11Clock; - - public: - // Function for converting time units to cycles for various kernel functions - // Thank you Citra - static constexpr s64 nsToCycles(float ns) { return s64(arm11Clock * (0.000000001f) * ns); } - static constexpr s64 nsToCycles(int ns) { return arm11Clock * s64(ns) / 1000000000; } - - static constexpr s64 nsToCycles(s64 ns) { - if (ns / 1000000000 > static_cast(MAX_VALUE_TO_MULTIPLY)) { - return std::numeric_limits::max(); - } - - if (ns > static_cast(MAX_VALUE_TO_MULTIPLY)) { - return arm11Clock * (ns / 1000000000); - } - - return (arm11Clock * ns) / 1000000000; - } - - static constexpr s64 nsToCycles(u64 ns) { - if (ns / 1000000000 > MAX_VALUE_TO_MULTIPLY) { - return std::numeric_limits::max(); - } - - if (ns > MAX_VALUE_TO_MULTIPLY) { - return arm11Clock * (s64(ns) / 1000000000); - } - - return (arm11Clock * s64(ns)) / 1000000000; - } -}; \ No newline at end of file diff --git a/include/screen_layout.hpp b/include/screen_layout.hpp deleted file mode 100644 index fc3f1c40..00000000 --- a/include/screen_layout.hpp +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once -#include - -#include "helpers.hpp" - -namespace ScreenLayout { - static constexpr u32 TOP_SCREEN_WIDTH = 400; - static constexpr u32 BOTTOM_SCREEN_WIDTH = 320; - static constexpr u32 TOP_SCREEN_HEIGHT = 240; - static constexpr u32 BOTTOM_SCREEN_HEIGHT = 240; - - // The bottom screen is less wide by 80 pixels, so we center it by offsetting it 40 pixels right - static constexpr u32 BOTTOM_SCREEN_X_OFFSET = 40; - static constexpr u32 CONSOLE_HEIGHT = TOP_SCREEN_HEIGHT + BOTTOM_SCREEN_HEIGHT; - - enum class Layout { - Default = 0, // Top screen up, bottom screen down - DefaultFlipped, // Top screen down, bottom screen up - SideBySide, // Top screen left, bottom screen right, - SideBySideFlipped, // Top screen right, bottom screen left, - }; - - // For properly handling touchscreen, we have to remember what window coordinates our screens map to - // We also remember some more information that is useful to our renderers, particularly for the final screen blit. - struct WindowCoordinates { - u32 topScreenX = 0; - u32 topScreenY = 0; - u32 topScreenWidth = TOP_SCREEN_WIDTH; - u32 topScreenHeight = TOP_SCREEN_HEIGHT; - - u32 bottomScreenX = BOTTOM_SCREEN_X_OFFSET; - u32 bottomScreenY = TOP_SCREEN_HEIGHT; - u32 bottomScreenWidth = BOTTOM_SCREEN_WIDTH; - u32 bottomScreenHeight = BOTTOM_SCREEN_HEIGHT; - - u32 windowWidth = topScreenWidth; - u32 windowHeight = topScreenHeight + bottomScreenHeight; - - // Information used when optimizing the final screen blit into a single blit - struct { - // Can we actually render both of the screens in a single blit? - bool canDoSingleBlit = false; - // Blit information used if we can - int destX = 0, destY = 0; - int destWidth = TOP_SCREEN_WIDTH; - int destHeight = CONSOLE_HEIGHT; - } singleBlitInfo; - }; - - // Calculate screen coordinates on the screen for a given layout & a given size for the output window - // Used in both the renderers and in the frontends (To eg calculate touch screen boundaries) - void calculateCoordinates( - WindowCoordinates& coordinates, u32 outputWindowWidth, u32 outputWindowHeight, float topScreenPercentage, Layout layout - ); - - Layout layoutFromString(std::string inString); - const char* layoutToString(Layout layout); -} // namespace ScreenLayout diff --git a/include/sdl_sensors.hpp b/include/sdl_sensors.hpp deleted file mode 100644 index db982cec..00000000 --- a/include/sdl_sensors.hpp +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include -#include - -#include "helpers.hpp" -#include "services/hid.hpp" - -// Convert SDL sensor readings to 3DS format -// We use the same code for Android as well, since the values we get from Android are in the same format as SDL (m/s^2 for acceleration, rad/s for -// rotation) -namespace Sensors::SDL { - // Convert the rotation data we get from SDL sensor events to rotation data we can feed right to HID - // Returns [pitch, roll, yaw] - static glm::vec3 convertRotation(glm::vec3 rotation) { - // Annoyingly, Android doesn't support the header yet so we define pi ourselves - static constexpr double pi = 3.141592653589793; - // Convert the rotation from rad/s to deg/s and scale by the gyroscope coefficient in HID - constexpr float scale = 180.f / pi * HIDService::gyroscopeCoeff; - // The axes are also inverted, so invert scale before the multiplication. - return rotation * -scale; - } - - static glm::vec3 convertAcceleration(float* data) { - // Set our cap to ~9 m/s^2. The 3DS sensors cap at -930 and +930, so values above this value will get clamped to 930 - // At rest (3DS laid flat on table), hardware reads around ~0 for x and z axis, and around ~480 for y axis due to gravity. - // This code tries to mimic this approximately, with offsets based on measurements from my DualShock 4. - static constexpr float accelMax = 9.f; - // We define standard gravity(g) ourself instead of using the SDL one in order for the code to work on Android too. - static constexpr float standardGravity = 9.80665f; - - s16 x = std::clamp(s16(data[0] / accelMax * 930.f), -930, +930); - s16 y = std::clamp(s16(data[1] / (standardGravity * accelMax) * 930.f - 350.f), -930, +930); - s16 z = std::clamp(s16((data[2] - 2.1f) / accelMax * 930.f), -930, +930); - - return glm::vec3(x, y, z); - } -} // namespace Sensors::SDL diff --git a/include/services/ac.hpp b/include/services/ac.hpp index 02775e18..55f46d3e 100644 --- a/include/services/ac.hpp +++ b/include/services/ac.hpp @@ -8,8 +8,6 @@ #include "result/result.hpp" class ACService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::AC; Memory& mem; MAKE_LOG_FUNCTION(log, acLogger) @@ -18,11 +16,7 @@ class ACService { void cancelConnectAsync(u32 messagePointer); void closeAsync(u32 messagePointer); void createDefaultConfig(u32 messagePointer); - void getConnectingInfraPriority(u32 messagePointer); - void getNZoneBeaconNotFoundEvent(u32 messagePointer); - void getStatus(u32 messagePointer); void getLastErrorCode(u32 messagePointer); - void getWifiStatus(u32 messagePointer); void isConnected(u32 messagePointer); void registerDisconnectEvent(u32 messagePointer); void setClientVersion(u32 messagePointer); diff --git a/include/services/act.hpp b/include/services/act.hpp index 3fe68993..92c69c60 100644 --- a/include/services/act.hpp +++ b/include/services/act.hpp @@ -6,8 +6,6 @@ #include "result/result.hpp" class ACTService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::ACT; Memory& mem; MAKE_LOG_FUNCTION(log, actLogger) @@ -17,7 +15,7 @@ class ACTService { void generateUUID(u32 messagePointer); void getAccountDataBlock(u32 messagePointer); - public: +public: ACTService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/am.hpp b/include/services/am.hpp index f72a5efc..672909ff 100644 --- a/include/services/am.hpp +++ b/include/services/am.hpp @@ -6,8 +6,6 @@ #include "result/result.hpp" class AMService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::AM; Memory& mem; MAKE_LOG_FUNCTION(log, amLogger) @@ -17,7 +15,7 @@ class AMService { void getPatchTitleInfo(u32 messagePointer); void listTitleInfo(u32 messagePointer); - public: +public: AMService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/amiibo_device.hpp b/include/services/amiibo_device.hpp deleted file mode 100644 index ecc4e981..00000000 --- a/include/services/amiibo_device.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include - -#include "helpers.hpp" -#include "io_file.hpp" -#include "nfc_types.hpp" - -class AmiiboDevice { - bool loaded = false; - bool encrypted = false; - - public: - static constexpr size_t tagSize = 0x21C; - std::array raw; - - void loadFromRaw(); - void reset(); -}; \ No newline at end of file diff --git a/include/services/apt.hpp b/include/services/apt.hpp index 05881382..a7df056f 100644 --- a/include/services/apt.hpp +++ b/include/services/apt.hpp @@ -1,49 +1,21 @@ #pragma once #include - -#include "applets/applet_manager.hpp" #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" #include "memory.hpp" #include "result/result.hpp" +#include "applets/applet_manager.hpp" + // Yay, more circular dependencies class Kernel; enum class ConsoleModel : u32 { - Old3DS, - New3DS, + Old3DS, New3DS }; -// https://www.3dbrew.org/wiki/NS_and_APT_Services#Command -namespace APT::Transitions { - enum : u32 { - None = 0, - Wakeup = 1, - Request = 2, - Response = 3, - Exit = 4, - Message = 5, - HomeButtonSingle = 6, - HomeButtonDouble = 7, - DSPSleep = 8, - DSPWakeup = 9, - WakeupByExit = 10, - WakuepByPause = 11, - WakeupByCancel = 12, - WakeupByCancelAll = 13, - WakeupByPowerButton = 14, - WakeupToJumpHome = 15, - RequestForApplet = 16, - WakeupToLaunchApp = 17, - ProcessDed = 0x41 - }; -} - class APTService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::APT; Memory& mem; Kernel& kernel; @@ -102,7 +74,7 @@ class APTService { u32 screencapPostPermission; - public: +public: APTService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel), appletManager(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/boss.hpp b/include/services/boss.hpp index bf5cd88d..b2ea1363 100644 --- a/include/services/boss.hpp +++ b/include/services/boss.hpp @@ -6,46 +6,34 @@ #include "result/result.hpp" class BOSSService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::BOSS; Memory& mem; MAKE_LOG_FUNCTION(log, bossLogger) // Service commands void cancelTask(u32 messagePointer); - void deleteNsData(u32 messagePointer); void initializeSession(u32 messagePointer); - void getAppNewFlag(u32 messagePointer); void getErrorCode(u32 messagePointer); - void getNsDataHeaderInfo(u32 messagePointer); - void getNewArrivalFlag(u32 messagePointer); void getNsDataIdList(u32 messagePointer, u32 commandWord); - void getNsDataLastUpdated(u32 messagePointer); void getOptoutFlag(u32 messagePointer); - void getStorageEntryInfo(u32 messagePointer); // Unknown what this is, name taken from Citra + void getStorageEntryInfo(u32 messagePointer); // Unknown what this is, name taken from Citra void getTaskIdList(u32 messagePointer); void getTaskInfo(u32 messagePointer); void getTaskServiceStatus(u32 messagePointer); void getTaskState(u32 messagePointer); void getTaskStatus(u32 messagePointer); void getTaskStorageInfo(u32 messagePointer); - void readNsData(u32 messagePointer); void receiveProperty(u32 messagePointer); void registerNewArrivalEvent(u32 messagePointer); void registerStorageEntry(u32 messagePointer); void registerTask(u32 messagePointer); void sendProperty(u32 messagePointer); - void setAppNewFlag(u32 messagePointer); - void setOptoutFlag(u32 messagePointer); - void startBgImmediate(u32 messagePointer); void startTask(u32 messagePointer); void unregisterStorage(u32 messagePointer); void unregisterTask(u32 messagePointer); s8 optoutFlag; - - public: +public: BOSSService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/cam.hpp b/include/services/cam.hpp index e5254997..97729209 100644 --- a/include/services/cam.hpp +++ b/include/services/cam.hpp @@ -12,46 +12,19 @@ class Kernel; class CAMService { - using Handle = HorizonHandle; - using Event = std::optional; - - struct Port { - Event bufferErrorInterruptEvent = std::nullopt; - Event receiveEvent = std::nullopt; - u16 transferBytes; - - void reset() { - bufferErrorInterruptEvent = std::nullopt; - receiveEvent = std::nullopt; - transferBytes = 256; - } - }; - Handle handle = KernelHandles::CAM; Memory& mem; Kernel& kernel; MAKE_LOG_FUNCTION(log, camLogger) - static constexpr size_t portCount = 2; - std::array ports; + using Event = std::optional; + static constexpr size_t portCount = 4; // PORT_NONE, PORT_CAM1, PORT_CAM2, PORT_BOTH + std::array bufferErrorInterruptEvents; // Service commands void driverInitialize(u32 messagePointer); - void driverFinalize(u32 messagePointer); - void getMaxBytes(u32 messagePointer); void getMaxLines(u32 messagePointer); void getBufferErrorInterruptEvent(u32 messagePointer); - void getSuitableY2RCoefficients(u32 messagePointer); - void getTransferBytes(u32 messagePointer); - void setContrast(u32 messagePointer); - void setFrameRate(u32 messagePointer); - void setReceiving(u32 messagePointer); - void setSize(u32 messagePointer); - void setTransferBytes(u32 messagePointer); - void setTransferLines(u32 messagePointer); - void setTrimming(u32 messagePointer); - void setTrimmingParamsCenter(u32 messagePointer); - void startCapture(u32 messagePointer); public: CAMService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} diff --git a/include/services/cecd.hpp b/include/services/cecd.hpp index b9374844..656e38ad 100644 --- a/include/services/cecd.hpp +++ b/include/services/cecd.hpp @@ -1,6 +1,5 @@ #pragma once #include - #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" @@ -10,23 +9,18 @@ class Kernel; class CECDService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::CECD; Memory& mem; Kernel& kernel; MAKE_LOG_FUNCTION(log, cecdLogger) std::optional infoEvent; - std::optional changeStateEvent; // Service commands - void getChangeStateEventHandle(u32 messagePointer); void getInfoEventHandle(u32 messagePointer); void openAndRead(u32 messagePointer); - void stop(u32 messagePointer); - public: +public: CECDService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/cfg.hpp b/include/services/cfg.hpp index bac2cd87..c8c8adde 100644 --- a/include/services/cfg.hpp +++ b/include/services/cfg.hpp @@ -1,7 +1,5 @@ #pragma once #include - -#include "config.hpp" #include "helpers.hpp" #include "logger.hpp" #include "memory.hpp" @@ -9,47 +7,22 @@ #include "result/result.hpp" class CFGService { - using Handle = HorizonHandle; - Memory& mem; - const EmulatorConfig& settings; - - CountryCodes country = CountryCodes::US; // Default to USA + CountryCodes country = CountryCodes::US; // Default to USA MAKE_LOG_FUNCTION(log, cfgLogger) void writeStringU16(u32 pointer, const std::u16string& string); // Service functions void getConfigInfoBlk2(u32 messagePointer); - void getConfigInfoBlk8(u32 messagePointer, u32 commandWord); void getCountryCodeID(u32 messagePointer); - void getCountryCodeString(u32 messagePointer); - void getLocalFriendCodeSeed(u32 messagePointer); void getRegionCanadaUSA(u32 messagePointer); void getSystemModel(u32 messagePointer); void genUniqueConsoleHash(u32 messagePointer); - void secureInfoGetByte101(u32 messagePointer); void secureInfoGetRegion(u32 messagePointer); - void setConfigInfoBlk4(u32 messagePointer); - void updateConfigNANDSavegame(u32 messagePointer); - void translateCountryInfo(u32 messagePointer); - void isFangateSupported(u32 messagePointer); - // cfg:nor functions - void norInitialize(u32 messagePointer); - void norReadData(u32 messagePointer); - - void getConfigInfo(u32 output, u32 blockID, u32 size, u32 permissionMask); - - public: - enum class Type { - U, // cfg:u - I, // cfg:i - S, // cfg:s - NOR, // cfg:nor - }; - - CFGService(Memory& mem, const EmulatorConfig& settings) : mem(mem), settings(settings) {} +public: + CFGService(Memory& mem) : mem(mem) {} void reset(); - void handleSyncRequest(u32 messagePointer, Type type); + void handleSyncRequest(u32 messagePointer); }; \ No newline at end of file diff --git a/include/services/csnd.hpp b/include/services/csnd.hpp deleted file mode 100644 index 93fa941d..00000000 --- a/include/services/csnd.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#include - -#include "helpers.hpp" -#include "kernel_types.hpp" -#include "logger.hpp" -#include "memory.hpp" - -// Circular dependencies ^-^ -class Kernel; - -class CSNDService { - using Handle = HorizonHandle; - - Handle handle = KernelHandles::CSND; - Memory& mem; - Kernel& kernel; - MAKE_LOG_FUNCTION(log, csndLogger) - - u8* sharedMemory = nullptr; - std::optional csndMutex = std::nullopt; - size_t sharedMemSize = 0; - bool initialized = false; - - // Service functions - void acquireSoundChannels(u32 messagePointer); - void executeCommands(u32 messagePointer); - void initialize(u32 messagePointer); - - public: - CSNDService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} - void reset(); - void handleSyncRequest(u32 messagePointer); - - void setSharedMemory(u8* ptr) { sharedMemory = ptr; } -}; \ No newline at end of file diff --git a/include/services/dlp_srvr.hpp b/include/services/dlp_srvr.hpp index ae9cc96f..1e714283 100644 --- a/include/services/dlp_srvr.hpp +++ b/include/services/dlp_srvr.hpp @@ -8,8 +8,6 @@ // Please forgive me for how everything in this file is named // "dlp:SRVR" is not a nice name to work with class DlpSrvrService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::DLP_SRVR; Memory& mem; MAKE_LOG_FUNCTION(log, dlpSrvrLogger) @@ -17,7 +15,7 @@ class DlpSrvrService { // Service commands void isChild(u32 messagePointer); - public: +public: DlpSrvrService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/dsp.hpp b/include/services/dsp.hpp index 3013c94d..ab9fb106 100644 --- a/include/services/dsp.hpp +++ b/include/services/dsp.hpp @@ -1,32 +1,33 @@ #pragma once #include -#include #include -#include - -#include "audio/dsp_core.hpp" #include "helpers.hpp" #include "logger.hpp" #include "memory.hpp" #include "result/result.hpp" -struct EmulatorConfig; +namespace DSPPipeType { + enum : u32 { + Debug = 0, DMA = 1, Audio = 2, Binary = 3 + }; +} + // Circular dependencies! class Kernel; class DSPService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::DSP; Memory& mem; Kernel& kernel; - const EmulatorConfig& config; - Audio::DSPCore* dsp = nullptr; - MAKE_LOG_FUNCTION(log, dspServiceLogger) + enum class DSPState : u32 { + Off, On, Slep + }; + // Number of DSP pipes static constexpr size_t pipeCount = 8; + DSPState dspState; // DSP service event handles using DSPEvent = std::optional; @@ -35,21 +36,20 @@ class DSPService { DSPEvent interrupt0; DSPEvent interrupt1; std::array pipeEvents; - u16 semaphoreMask = 0; + std::array, pipeCount> pipeData; // The data of each pipe + + void resetAudioPipe(); + std::vector readPipe(u32 pipe, u32 size); DSPEvent& getEventRef(u32 type, u32 pipe); static constexpr size_t maxEventCount = 6; // Total number of DSP service events registered with registerInterruptEvents size_t totalEventCount; - std::vector loadedComponent; - - bool headphonesInserted = true; // Service functions - void convertProcessAddressFromDspDram(u32 messagePointer); // Nice function name + void convertProcessAddressFromDspDram(u32 messagePointer); // Nice function name void flushDataCache(u32 messagePointer); - void forceHeadphoneOut(u32 messagePointer); void getHeadphoneStatus(u32 messagePointer); void getSemaphoreEventHandle(u32 messagePointer); void invalidateDCache(u32 messagePointer); @@ -63,32 +63,16 @@ class DSPService { void unloadComponent(u32 messagePointer); void writeProcessPipe(u32 messagePointer); - public: - DSPService(Memory& mem, Kernel& kernel, const EmulatorConfig& config) : mem(mem), kernel(kernel), config(config) {} +public: + DSPService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); - void setDSPCore(Audio::DSPCore* pointer) { dsp = pointer; } - - // Special callback that's ran when the semaphore event is signalled - void onSemaphoreEventSignal() { dsp->setSemaphore(semaphoreMask); } enum class SoundOutputMode : u8 { Mono = 0, Stereo = 1, - Surround = 2, + Surround = 2 }; - enum class ComponentDumpResult : u8 { - Success = 0, - NotLoaded, - FileFailure, - }; - - void triggerPipeEvent(int index); - void triggerSemaphoreEvent(); - void triggerInterrupt0(); - void triggerInterrupt1(); - - ComponentDumpResult dumpComponent(const std::filesystem::path& path); - void printFirmwareInfo(); + void signalEvents(); }; \ No newline at end of file diff --git a/include/services/dsp_firmware_db.hpp b/include/services/dsp_firmware_db.hpp deleted file mode 100644 index bac11d73..00000000 --- a/include/services/dsp_firmware_db.hpp +++ /dev/null @@ -1,76 +0,0 @@ -#pragma once - -#include - -#include "helpers.hpp" - -namespace DSP { - struct FirmwareInfo { - using Hash = std::array; - - Hash hash; // Firmware hash (SHA-256) - u32 size; // Firmware size in bytes - - bool supportsAAC; // Does this firmware support AAC decoding? - const char* notes; // Miscellaneous notes about the firmware - - explicit constexpr FirmwareInfo(const Hash& hash, u32 size, bool supportsAAC, const char* notes) - : hash(hash), size(size), supportsAAC(supportsAAC), notes(notes) {} - }; - - static constexpr std::array firmwareDB = { - FirmwareInfo( - {0x47, 0xD6, 0x6C, 0xD2, 0x13, 0x1, 0xFF, 0x62, 0xAD, 0x16, 0x98, 0x2, 0x46, 0x67, 0xF3, 0x9, - 0xDA, 0x7, 0x20, 0x9E, 0xFB, 0xB, 0x6A, 0x81, 0x98, 0xFF, 0x9B, 0xE0, 0x51, 0x67, 0xC9, 0xA6}, - 48480, false, "Spotted in some versions of Activity Log potentially other apps" - ), - - FirmwareInfo( - {0xF5, 0xDA, 0x79, 0xE7, 0x24, 0x6C, 0x51, 0x9A, 0x28, 0x6C, 0x50, 0xC9, 0x9F, 0xA1, 0xE6, 0x4D, - 0xA5, 0x72, 0x96, 0x5F, 0xEA, 0x14, 0x20, 0xA7, 0x70, 0x90, 0x57, 0x42, 0x34, 0x6E, 0x18, 0xD1}, - 49674, false, "One of the most common firmwares. Found in NSMB2 and others" - ), - - FirmwareInfo( - {0x94, 0x4B, 0x40, 0xB5, 0x46, 0x93, 0xF4, 0xB1, 0xD9, 0x52, 0xBE, 0x84, 0x87, 0xE9, 0xE9, 0x1F, - 0x66, 0x7F, 0xC4, 0x89, 0xF8, 0x15, 0x79, 0xF, 0x3D, 0x3E, 0x89, 0x26, 0x5F, 0xE0, 0x89, 0xC4}, - 49800, false, "One of the most common firmwares. Found in Majora's Mask and others" - ), - - FirmwareInfo( - {0x8E, 0x21, 0x3F, 0x3E, 0x71, 0xD2, 0xE3, 0xE4, 0x5D, 0x11, 0x69, 0xBA, 0xC6, 0x46, 0x5A, 0x70, - 0xEA, 0xBE, 0xB2, 0x2B, 0x30, 0x3F, 0x1F, 0xA6, 0xD7, 0x67, 0x93, 0x70, 0xFF, 0xAD, 0xF, 0x54}, - 49756, false, "Fairly common firmware. Found in PSMD and others" - ), - - FirmwareInfo( - {0xA2, 0x6C, 0x74, 0xD1, 0xEF, 0x7F, 0x4F, 0xA5, 0xFF, 0xFF, 0xFB, 0xEC, 0x75, 0x8A, 0x40, 0x8D, - 0x8F, 0x22, 0x87, 0x72, 0x78, 0x1B, 0x81, 0x88, 0x86, 0x5F, 0x83, 0x4D, 0x1D, 0x90, 0x6B, 0xAA}, - 48804, false, "Spotted in MK7" - ), - - FirmwareInfo( - {0x75, 0x12, 0x70, 0xB2, 0x43, 0xB0, 0xCA, 0xFB, 0x51, 0x99, 0xF2, 0x98, 0x2, 0x2, 0xC9, 0xB4, - 0xC7, 0x7A, 0x67, 0x5E, 0xF0, 0x43, 0x8F, 0xD5, 0xA8, 0x9E, 0x83, 0xAA, 0xB9, 0xA8, 0x7, 0x9B}, - 48652, false, "One of the most common firmwares. Found in OoT, Pokemon Rumble Blast, and others" - ), - - FirmwareInfo( - {0xF2, 0x96, 0xE2, 0xE5, 0xEC, 0x34, 0x9F, 0x6A, 0x6C, 0xF3, 0xE1, 0xC7, 0xC, 0xDD, 0x65, 0xC2, - 0x2, 0x72, 0xB6, 0xE7, 0xFF, 0xE5, 0x57, 0x92, 0x69, 0x4E, 0x83, 0xAE, 0x24, 0xF1, 0x68, 0xBF}, - 217976, true, "Most common AAC-enabled firmware. Found in Rhythm Heaven, Fire Emblem Fates/Echoes, Pokemon X/Y, and others" - ), - - FirmwareInfo( - {0xF0, 0x6C, 0x1B, 0x59, 0x23, 0xE1, 0x71, 0x19, 0x5, 0x66, 0x59, 0xCB, 0x3D, 0x9B, 0xF0, 0x26, - 0x62, 0x84, 0xE9, 0xA6, 0xC0, 0x8, 0x23, 0x99, 0xD7, 0x45, 0x8D, 0x7C, 0x52, 0xAE, 0x32, 0x1C}, - 48708, false, "Spotted in Super Mario 3D Land" - ), - - FirmwareInfo( - {0x7E, 0xA3, 0xC4, 0x4A, 0x1C, 0x57, 0x51, 0x4B, 0xEB, 0xBE, 0xBC, 0xE8, 0xA7, 0x99, 0x5F, 0x7F, - 0x3A, 0x29, 0x1, 0x70, 0xEA, 0x3B, 0x6C, 0x14, 0x57, 0x49, 0xAD, 0x93, 0x58, 0x67, 0x2C, 0x97}, - 49716, false, "Spotted in PMD: GTI" - ), - }; -} // namespace DSP \ No newline at end of file diff --git a/include/services/fonts.hpp b/include/services/fonts.hpp deleted file mode 100644 index 9fa84be1..00000000 --- a/include/services/fonts.hpp +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -// Adapted from https://github.com/PabloMK7/citra/blob/master/src/core/hle/service/apt/bcfnt/bcfnt.h - -#pragma once - -#include - -#include "helpers.hpp" -#include "swap.hpp" - -namespace HLE::Fonts { - struct CFNT { - u8 magic[4]; - u16_le endianness; - u16_le headerSize; - u32_le version; - u32_le fileSize; - u32_le numBlocks; - }; - - struct SectionHeader { - u8 magic[4]; - u32_le sectionSize; - }; - - struct FINF { - u8 magic[4]; - u32_le sectionSize; - u8 fontType; - u8 lineFeed; - u16_le alterCharIndex; - u8 default_width[3]; - u8 encoding; - u32_le tglpOffset; - u32_le cwdhOffset; - u32_le cmapOffset; - u8 height; - u8 width; - u8 ascent; - u8 reserved; - }; - - struct TGLP { - u8 magic[4]; - u32_le sectionSize; - u8 cellWidth; - u8 cellHeight; - u8 baselinePosition; - u8 maxCharacterWidth; - u32_le sheetSize; - u16_le numSheets; - u16_le sheetImageFormat; - u16_le numColumns; - u16_le numRows; - u16_le sheetWidth; - u16_le sheetHeight; - u32_le sheetDataOffset; - }; - - struct CMAP { - u8 magic[4]; - u32_le sectionSize; - u16_le codeBegin; - u16_le codeEnd; - u16_le mappingMethod; - u16_le reserved; - u32_le nextCmapOffset; - }; - - struct CWDH { - u8 magic[4]; - u32_le sectionSize; - u16_le startIndex; - u16_le endIndex; - u32_le nextCwdhOffset; - }; - - // Relocates the internal addresses of the BCFNT Shared Font to the new base. The current base will - // be auto-detected based on the file headers. - void relocateSharedFont(u8* sharedFont, u32 newAddress); -} // namespace HLE::Fonts \ No newline at end of file diff --git a/include/services/frd.hpp b/include/services/frd.hpp index 914d9251..65eb7041 100644 --- a/include/services/frd.hpp +++ b/include/services/frd.hpp @@ -1,6 +1,5 @@ #pragma once #include - #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" @@ -16,8 +15,7 @@ struct FriendKey { static_assert(sizeof(FriendKey) == 16); class FRDService { - using Handle = HorizonHandle; - + Handle handle = KernelHandles::FRD; Memory& mem; MAKE_LOG_FUNCTION(log, frdLogger) @@ -29,21 +27,16 @@ class FRDService { void getFriendKeyList(u32 messagePointer); void getFriendPresence(u32 messagePointer); void getFriendProfile(u32 messagePointer); - void getFriendRelationship(u32 messagePointer); - void getMyComment(u32 messagePointer); - void getMyFavoriteGame(u32 messagePointer); void getMyFriendKey(u32 messagePointer); void getMyMii(u32 messagePointer); void getMyPresence(u32 messagePointer); void getMyProfile(u32 messagePointer); void getMyScreenName(u32 messsagePointer); void hasLoggedIn(u32 messagePointer); - void isOnline(u32 messagePointer); void logout(u32 messagePointer); void setClientSDKVersion(u32 messagePointer); void setNotificationMask(u32 messagePointer); void updateGameModeDescription(u32 messagePointer); - void updateMii(u32 messagePointer); struct Profile { u8 region; @@ -54,14 +47,8 @@ class FRDService { }; static_assert(sizeof(Profile) == 8); - public: - enum class Type { - A, // frd:a - N, // frd:n - U, // frd:u - }; - +public: FRDService(Memory& mem) : mem(mem) {} void reset(); - void handleSyncRequest(u32 messagePointer, Type type); + void handleSyncRequest(u32 messagePointer); }; \ No newline at end of file diff --git a/include/services/fs.hpp b/include/services/fs.hpp index 82f07077..775c129a 100644 --- a/include/services/fs.hpp +++ b/include/services/fs.hpp @@ -1,26 +1,20 @@ #pragma once -#include "config.hpp" -#include "fs/archive_card_spi.hpp" #include "fs/archive_ext_save_data.hpp" #include "fs/archive_ncch.hpp" #include "fs/archive_save_data.hpp" #include "fs/archive_sdmc.hpp" #include "fs/archive_self_ncch.hpp" -#include "fs/archive_system_save_data.hpp" -#include "fs/archive_twl_photo.hpp" -#include "fs/archive_twl_sound.hpp" #include "fs/archive_user_save_data.hpp" #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" #include "memory.hpp" +#include "result/result.hpp" // Yay, more circular dependencies class Kernel; class FSService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::FS; Memory& mem; Kernel& kernel; @@ -31,7 +25,6 @@ class FSService { SelfNCCHArchive selfNcch; SaveDataArchive saveData; SDMCArchive sdmc; - SDMCArchive sdmcWriteOnly; NCCHArchive ncch; // UserSaveData archives @@ -40,11 +33,6 @@ class FSService { ExtSaveDataArchive extSaveData_sdmc; ExtSaveDataArchive sharedExtSaveData_nand; - SystemSaveDataArchive systemSaveData; - - TWLPhotoArchive twlPhoto; - TWLSoundArchive twlSound; - CardSPIArchive cardSpi; ArchiveBase* getArchiveFromID(u32 id, const FSPath& archivePath); Rust::Result openArchiveHandle(u32 archiveID, const FSPath& path); @@ -52,17 +40,13 @@ class FSService { std::optional openFileHandle(ArchiveBase* archive, const FSPath& path, const FSPath& archivePath, const FilePerms& perms); FSPath readPath(u32 type, u32 pointer, u32 size); - const EmulatorConfig& config; - // Service commands void abnegateAccessRight(u32 messagePointer); - void cardSlotIsInserted(u32 messagePointer); void createDirectory(u32 messagePointer); void createExtSaveData(u32 messagePointer); void createFile(u32 messagePointer); void closeArchive(u32 messagePointer); void controlArchive(u32 messagePointer); - void deleteDirectory(u32 messagePointer); void deleteExtSaveData(u32 messagePointer); void deleteFile(u32 messagePointer); void formatSaveData(u32 messagePointer); @@ -71,7 +55,6 @@ class FSService { void getFreeBytes(u32 messagePointer); void getFormatInfo(u32 messagePointer); void getPriority(u32 messagePointer); - void getSdmcArchiveResource(u32 messagePointer); void getThisSaveDataSecureValue(u32 messagePointer); void theGameboyVCFunction(u32 messagePointer); void initialize(u32 messagePointer); @@ -82,7 +65,6 @@ class FSService { void openDirectory(u32 messagePointer); void openFile(u32 messagePointer); void openFileDirectly(u32 messagePointer); - void renameFile(u32 messagePointer); void setArchivePriority(u32 messagePointer); void setPriority(u32 messagePointer); void setThisSaveDataSecureValue(u32 messagePointer); @@ -90,12 +72,10 @@ class FSService { // Used for set/get priority: Not sure what sort of priority this is referring to u32 priority; - public: - FSService(Memory& mem, Kernel& kernel, const EmulatorConfig& config) - : mem(mem), saveData(mem), sharedExtSaveData_nand(mem, "../SharedFiles/NAND", true), extSaveData_sdmc(mem, "SDMC"), sdmc(mem), - sdmcWriteOnly(mem, true), selfNcch(mem), ncch(mem), userSaveData1(mem, ArchiveID::UserSaveData1), - userSaveData2(mem, ArchiveID::UserSaveData2), systemSaveData(mem), twlPhoto(mem), twlSound(mem), cardSpi(mem), kernel(kernel), - config(config) {} +public: + FSService(Memory& mem, Kernel& kernel) + : mem(mem), saveData(mem), sharedExtSaveData_nand(mem, "../SharedFiles/NAND", true), extSaveData_sdmc(mem, "SDMC"), sdmc(mem), selfNcch(mem), + ncch(mem), userSaveData1(mem, ArchiveID::UserSaveData1), userSaveData2(mem, ArchiveID::UserSaveData2), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/gsp_gpu.hpp b/include/services/gsp_gpu.hpp index 4ac8e747..92ca36e2 100644 --- a/include/services/gsp_gpu.hpp +++ b/include/services/gsp_gpu.hpp @@ -1,7 +1,6 @@ #pragma once #include #include - #include "PICA/gpu.hpp" #include "helpers.hpp" #include "kernel_types.hpp" @@ -10,12 +9,12 @@ #include "result/result.hpp" enum class GPUInterrupt : u8 { - PSC0 = 0, // Memory fill completed - PSC1 = 1, // ? - VBlank0 = 2, // ? - VBlank1 = 3, // ? - PPF = 4, // Display transfer finished - P3D = 5, // Command list processing finished + PSC0 = 0, // Memory fill completed + PSC1 = 1, // ? + VBlank0 = 2, // ? + VBlank1 = 3, // ? + PPF = 4, // Display transfer finished + P3D = 5, // Command list processing finished DMA = 6 }; @@ -23,14 +22,12 @@ enum class GPUInterrupt : u8 { class Kernel; class GPUService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::GPU; Memory& mem; GPU& gpu; Kernel& kernel; - u32& currentPID; // Process ID of the current process - u8* sharedMem; // Pointer to GSP shared memory + u32& currentPID; // Process ID of the current process + u8* sharedMem; // Pointer to GSP shared memory // At any point in time only 1 process has privileges to use rendering functions // This is the PID of that process @@ -63,24 +60,11 @@ class GPUService { }; static_assert(sizeof(FramebufferUpdate) == 64, "GSP::GPU::FramebufferUpdate has the wrong size"); - // Used for saving and restoring GPU state via ImportDisplayCaptureInfo - struct CaptureInfo { - u32 leftFramebuffer; // Left framebuffer VA - u32 rightFramebuffer; // Right framebuffer VA (Top screen only) - u32 format; - u32 stride; - }; - static_assert(sizeof(CaptureInfo) == 16, "GSP::GPU::CaptureInfo has the wrong size"); - // Service commands void acquireRight(u32 messagePointer); void flushDataCache(u32 messagePointer); - void invalidateDataCache(u32 messagePointer); void importDisplayCaptureInfo(u32 messagePointer); - void readHwRegs(u32 messagePointer); void registerInterruptRelayQueue(u32 messagePointer); - void releaseRight(u32 messagePointer); - void restoreVramSysArea(u32 messagePointer); void saveVramSysArea(u32 messagePointer); void setAxiConfigQoSMode(u32 messagePointer); void setBufferSwap(u32 messagePointer); @@ -101,24 +85,16 @@ class GPUService { void setBufferSwapImpl(u32 screen_id, const FramebufferInfo& info); - // Get the framebuffer info in shared memory for a given screen - FramebufferUpdate* getFramebufferInfo(int screen) { - // TODO: Offset depends on GSP thread being triggered - return reinterpret_cast(&sharedMem[0x200 + screen * sizeof(FramebufferUpdate)]); - } - - FramebufferUpdate* getTopFramebufferInfo() { return getFramebufferInfo(0); } - FramebufferUpdate* getBottomFramebufferInfo() { return getFramebufferInfo(1); } - - public: - GPUService(Memory& mem, GPU& gpu, Kernel& kernel, u32& currentPID) : mem(mem), gpu(gpu), kernel(kernel), currentPID(currentPID) {} +public: + GPUService(Memory& mem, GPU& gpu, Kernel& kernel, u32& currentPID) : mem(mem), gpu(gpu), + kernel(kernel), currentPID(currentPID) {} void reset(); void handleSyncRequest(u32 messagePointer); void requestInterrupt(GPUInterrupt type); void setSharedMem(u8* ptr) { sharedMem = ptr; - if (ptr != nullptr) { // Zero-fill shared memory in case the process tries to read stale service data or vice versa + if (ptr != nullptr) { // Zero-fill shared memory in case the process tries to read stale service data or vice versa std::memset(ptr, 0, 0x1000); } } -}; \ No newline at end of file +}; diff --git a/include/services/gsp_lcd.hpp b/include/services/gsp_lcd.hpp index 7dbdae8f..e7672d4f 100644 --- a/include/services/gsp_lcd.hpp +++ b/include/services/gsp_lcd.hpp @@ -6,13 +6,13 @@ #include "result/result.hpp" class LCDService { + Handle handle = KernelHandles::LCD; Memory& mem; MAKE_LOG_FUNCTION(log, gspLCDLogger) // Service commands - void setLedForceOff(u32 messagePointer); - public: +public: LCDService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/hid.hpp b/include/services/hid.hpp index 33e61a35..1db0fa5d 100644 --- a/include/services/hid.hpp +++ b/include/services/hid.hpp @@ -1,7 +1,6 @@ #pragma once #include #include -#include #include "helpers.hpp" #include "kernel_types.hpp" @@ -11,7 +10,6 @@ namespace HID::Keys { enum : u32 { - Null = 0, A = 1 << 0, B = 1 << 1, Select = 1 << 2, @@ -28,28 +26,17 @@ namespace HID::Keys { GPIO0Inv = 1 << 12, // Inverted value of GPIO bit 0 GPIO14Inv = 1 << 13, // Inverted value of GPIO bit 14 - // CirclePad Pro buttons. We store them in the HID service for ease, even though they're only used by the IR service - // Whenever the HID service writes to shared memory, we remember to mask them out - ZL = 1 << 14, - ZR = 1 << 15, - CirclePadProButtons = ZL | ZR, - CirclePadRight = 1 << 28, // X >= 41 CirclePadLeft = 1 << 29, // X <= -41 CirclePadUp = 1 << 30, // Y >= 41 CirclePadDown = 1u << 31 // Y <= -41 }; - - const char* keyToName(u32 key); - u32 nameToKey(std::string name); -} // namespace HID::Keys +} // Circular dependency because we need HID to spawn events class Kernel; class HIDService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::HID; Memory& mem; Kernel& kernel; @@ -66,10 +53,6 @@ class HIDService { s16 circlePadX, circlePadY; // Circlepad state s16 touchScreenX, touchScreenY; // Touchscreen state s16 roll, pitch, yaw; // Gyroscope state - s16 accelX, accelY, accelZ; // Accelerometer state - - // New 3DS/CirclePad Pro C-stick state - s16 cStickX, cStickY; bool accelerometerEnabled; bool eventsInitialized; @@ -101,21 +84,13 @@ class HIDService { *(T*)&sharedMem[offset] = value; } - template - T* getSharedMemPointer(size_t offset) { - return (T*)&sharedMem[offset]; - } - public: - static constexpr float gyroscopeCoeff = 14.375f; // Same as retail 3DS - HIDService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); void pressKey(u32 mask) { newButtons |= mask; } void releaseKey(u32 mask) { newButtons &= ~mask; } - void setKey(u32 mask, bool pressed) { pressed ? pressKey(mask) : releaseKey(mask); } u32 getOldButtons() const { return oldButtons; } s16 getCirclepadX() const { return circlePadX; } @@ -126,11 +101,11 @@ class HIDService { // Turn bits 28 and 29 off in the new button state, which indicate whether the circlepad is steering left or right // Then, set them according to the new value of x - newButtons &= ~(HID::Keys::CirclePadLeft | HID::Keys::CirclePadRight); + newButtons &= ~0x3000'0000; if (x >= 41) // Pressing right - newButtons |= HID::Keys::CirclePadRight; + newButtons |= 1 << 28; else if (x <= -41) // Pressing left - newButtons |= HID::Keys::CirclePadLeft; + newButtons |= 1 << 29; } void setCirclepadY(s16 y) { @@ -138,29 +113,17 @@ class HIDService { // Turn bits 30 and 31 off in the new button state, which indicate whether the circlepad is steering up or down // Then, set them according to the new value of y - newButtons &= ~(HID::Keys::CirclePadUp | HID::Keys::CirclePadDown); + newButtons &= ~0xC000'0000; if (y >= 41) // Pressing up - newButtons |= HID::Keys::CirclePadUp; + newButtons |= 1 << 30; else if (y <= -41) // Pressing down - newButtons |= HID::Keys::CirclePadDown; + newButtons |= 1 << 31; } - void setCStickX(s16 x) { cStickX = x; } - void setCStickY(s16 y) { cStickY = y; } - - s16 getCStickX() { return cStickX; } - s16 getCStickY() { return cStickY; } - void setRoll(s16 value) { roll = value; } void setPitch(s16 value) { pitch = value; } void setYaw(s16 value) { yaw = value; } - void setAccel(s16 x, s16 y, s16 z) { - accelX = x; - accelY = y; - accelZ = z; - } - void updateInputs(u64 currentTimestamp); void setSharedMem(u8* ptr) { @@ -176,6 +139,9 @@ class HIDService { touchScreenPressed = true; } - void releaseTouchScreen() { touchScreenPressed = false; } + void releaseTouchScreen() { + touchScreenPressed = false; + } + bool isTouchScreenPressed() { return touchScreenPressed; } }; diff --git a/include/services/http.hpp b/include/services/http.hpp index 8b23fb2d..8dccc0c5 100644 --- a/include/services/http.hpp +++ b/include/services/http.hpp @@ -5,8 +5,6 @@ #include "memory.hpp" class HTTPService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::HTTP; Memory& mem; MAKE_LOG_FUNCTION(log, httpLogger) @@ -14,9 +12,7 @@ class HTTPService { bool initialized = false; // Service commands - void createRootCertChain(u32 messagePointer); void initialize(u32 messagePointer); - void rootCertChainAddDefaultCert(u32 messagePointer); public: HTTPService(Memory& mem) : mem(mem) {} diff --git a/include/services/ir/circlepad_pro.hpp b/include/services/ir/circlepad_pro.hpp deleted file mode 100644 index 9edc068c..00000000 --- a/include/services/ir/circlepad_pro.hpp +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once -#include "bitfield.hpp" -#include "services/ir/ir_device.hpp" -#include "services/ir/ir_types.hpp" - -namespace IR { - class CirclePadPro : public IR::Device { - public: - struct ButtonState { - static constexpr int C_STICK_CENTER = 0x800; - - union { - BitField<0, 8, u32> header; - BitField<8, 12, u32> x; - BitField<20, 12, u32> y; - } cStick; - - union { - BitField<0, 5, u8> batteryLevel; - BitField<5, 1, u8> zlNotPressed; - BitField<6, 1, u8> zrNotPressed; - BitField<7, 1, u8> rNotPressed; - } buttons; - - u8 unknown; - - ButtonState() { - // Response header for button state reads - cStick.header = u8(CPPResponseID::PollButtons); - cStick.x = u32(CirclePadPro::ButtonState::C_STICK_CENTER); - cStick.y = u32(CirclePadPro::ButtonState::C_STICK_CENTER); - - // Fully charged - buttons.batteryLevel = 0x1F; - buttons.zrNotPressed = 1; - buttons.zlNotPressed = 1; - buttons.rNotPressed = 1; - unknown = 0; - } - }; - static_assert(sizeof(ButtonState) == 6, "Circlepad Pro button state has wrong size"); - - virtual void connect() override; - virtual void disconnect() override; - virtual void receivePayload(Payload payload) override; - - CirclePadPro(SendCallback sendCallback, Scheduler& scheduler) : IR::Device(sendCallback, scheduler) {} - - ButtonState state; - // The current polling period in cycles, configured via the ConfigurePolling command - s64 period = Scheduler::nsToCycles(16000); - }; -} // namespace IR \ No newline at end of file diff --git a/include/services/ir/ir_device.hpp b/include/services/ir/ir_device.hpp deleted file mode 100644 index db82ea99..00000000 --- a/include/services/ir/ir_device.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include -#include - -#include "helpers.hpp" -#include "scheduler.hpp" - -namespace IR { - class Device { - public: - using Payload = std::span; - - protected: - using SendCallback = std::function; // Callback for sending data from IR device->3DS - Scheduler& scheduler; - SendCallback sendCallback; - - public: - virtual void connect() = 0; - virtual void disconnect() = 0; - virtual void receivePayload(Payload payload) = 0; - - Device(SendCallback sendCallback, Scheduler& scheduler) : sendCallback(sendCallback), scheduler(scheduler) {} - }; -} // namespace IR \ No newline at end of file diff --git a/include/services/ir/ir_types.hpp b/include/services/ir/ir_types.hpp deleted file mode 100644 index 8fcd68ba..00000000 --- a/include/services/ir/ir_types.hpp +++ /dev/null @@ -1,132 +0,0 @@ -#pragma once -#include - -#include "bitfield.hpp" -#include "helpers.hpp" -#include "memory.hpp" -#include "swap.hpp" - -// Type definitions for the IR service -// Based off https://github.com/azahar-emu/azahar/blob/de7b457ee466e432047c4ee8d37fca9eae7e031e/src/core/hle/service/ir/ir_user.cpp#L88 - -namespace IR { - class Buffer { - public: - Buffer(Memory& memory, u32 sharedMemBaseVaddr, u32 infoOffset, u32 bufferOffset, u32 maxPackets, u32 bufferSize) - : memory(memory), sharedMemBaseVaddr(sharedMemBaseVaddr), infoOffset(infoOffset), bufferOffset(bufferOffset), maxPackets(maxPackets), - maxDataSize(bufferSize - sizeof(PacketInfo) * maxPackets) { - updateBufferInfo(); - } - - u8* getPointer(u32 offset) { return (u8*)memory.getReadPointer(sharedMemBaseVaddr + offset); } - - bool put(std::span packet) { - if (info.packetCount == maxPackets) { - return false; - } - - u32 offset; - - // finds free space offset in data buffer - if (info.packetCount == 0) { - offset = 0; - if (packet.size() > maxDataSize) { - return false; - } - } else { - const u32 lastIndex = (info.endIndex + maxPackets - 1) % maxPackets; - const PacketInfo first = getPacketInfo(info.beginIndex); - const PacketInfo last = getPacketInfo(lastIndex); - offset = (last.offset + last.size) % maxDataSize; - const u32 freeSpace = (first.offset + maxDataSize - offset) % maxDataSize; - - if (packet.size() > freeSpace) { - return false; - } - } - - // Writes packet info - PacketInfo packet_info{offset, static_cast(packet.size())}; - setPacketInfo(info.endIndex, packet_info); - - // Writes packet data - for (std::size_t i = 0; i < packet.size(); ++i) { - *getDataBufferPointer((offset + i) % maxDataSize) = packet[i]; - } - - // Updates buffer info - info.endIndex++; - info.endIndex %= maxPackets; - info.packetCount++; - updateBufferInfo(); - return true; - } - - bool release(u32 count) { - if (info.packetCount < count) { - return false; - } - - info.packetCount -= count; - info.beginIndex += count; - info.beginIndex %= maxPackets; - updateBufferInfo(); - return true; - } - - u32 getPacketCount() { return info.packetCount; } - - private: - struct BufferInfo { - u32_le beginIndex; - u32_le endIndex; - u32_le packetCount; - u32_le unknown; - }; - static_assert(sizeof(BufferInfo) == 16, "IR::BufferInfo has wrong size!"); - - struct PacketInfo { - u32_le offset; - u32_le size; - }; - static_assert(sizeof(PacketInfo) == 8, "IR::PacketInfo has wrong size!"); - - u8* getPacketInfoPointer(u32 index) { return getPointer(bufferOffset + sizeof(PacketInfo) * index); } - void setPacketInfo(u32 index, const PacketInfo& packet_info) { std::memcpy(getPacketInfoPointer(index), &packet_info, sizeof(PacketInfo)); } - - PacketInfo getPacketInfo(u32 index) { - PacketInfo packet_info; - std::memcpy(&packet_info, getPacketInfoPointer(index), sizeof(PacketInfo)); - return packet_info; - } - - u8* getDataBufferPointer(u32 offset) { return getPointer(bufferOffset + sizeof(PacketInfo) * maxPackets + offset); } - void updateBufferInfo() { - if (infoOffset) { - std::memcpy(getPointer(infoOffset), &info, sizeof(info)); - } - } - - BufferInfo info{0, 0, 0, 0}; - Memory& memory; - u32 sharedMemBaseVaddr; - u32 infoOffset; - u32 bufferOffset; - u32 maxPackets; - u32 maxDataSize; - }; - - namespace CPPResponseID { - enum : u8 { - PollButtons = 0x10, // This response contains the current Circlepad Pro button/stick state - ReadCalibrationData = 0x11, // Responding to a ReadCalibrationData request - }; - } - - namespace CPPRequestID { - enum : u8 { - ConfigurePolling = 1, // Configures if & how often to poll the Circlepad Pro button/stick state - ReadCalibrationData = 2, // Reads the Circlepad Pro calibration data - }; - } -} // namespace IR diff --git a/include/services/ir/ir_user.hpp b/include/services/ir_user.hpp similarity index 57% rename from include/services/ir/ir_user.hpp rename to include/services/ir_user.hpp index 797e5d9c..186d9717 100644 --- a/include/services/ir/ir_user.hpp +++ b/include/services/ir_user.hpp @@ -1,24 +1,16 @@ #pragma once -#include #include -#include -#include "config.hpp" #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" #include "memory.hpp" #include "result/result.hpp" -#include "services/hid.hpp" -#include "services/ir/circlepad_pro.hpp" // Circular dependencies in this project? Never class Kernel; class IRUserService { - using Payload = IR::Device::Payload; - using Handle = HorizonHandle; - enum class DeviceID : u8 { CirclePadPro = 1, }; @@ -26,34 +18,23 @@ class IRUserService { Handle handle = KernelHandles::IR_USER; Memory& mem; Kernel& kernel; - // The IR service has a reference to the HID service as that's where the frontends store CirclePad Pro button state in - HIDService& hid; - const EmulatorConfig& config; - MAKE_LOG_FUNCTION(log, irUserLogger) // Service commands - void clearReceiveBuffer(u32 messagePointer); - void clearSendBuffer(u32 messagePointer); void disconnect(u32 messagePointer); void finalizeIrnop(u32 messagePointer); void getConnectionStatusEvent(u32 messagePointer); void getReceiveEvent(u32 messagePointer); - void getSendEvent(u32 messagePointer); void initializeIrnopShared(u32 messagePointer); void requireConnection(u32 messagePointer); void sendIrnop(u32 messagePointer); - void releaseReceivedData(u32 messagePointer); using IREvent = std::optional; IREvent connectionStatusEvent = std::nullopt; IREvent receiveEvent = std::nullopt; - IREvent sendEvent = std::nullopt; - IR::CirclePadPro cpp; std::optional sharedMemory = std::nullopt; - std::unique_ptr receiveBuffer; bool connectedDevice = false; // Header of the IR shared memory containing various bits of info @@ -73,19 +54,8 @@ class IRUserService { }; static_assert(sizeof(SharedMemoryStatus) == 16); - // The IR service uses CRC8 with generator polynomial = 0x07 for verifying packets received from IR devices - static u8 crc8(std::span data); - - // IR devices call this to send a device->console payload - void sendPayload(Payload payload); - public: - IRUserService(Memory& mem, HIDService& hid, const EmulatorConfig& config, Kernel& kernel); - - void setCStickX(s16 value) { cpp.state.cStick.x = value; } - void setCStickY(s16 value) { cpp.state.cStick.y = value; } - + IRUserService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); - void updateCirclePadPro(); }; \ No newline at end of file diff --git a/include/services/ldr_ro.hpp b/include/services/ldr_ro.hpp index cf60e036..7acfce69 100644 --- a/include/services/ldr_ro.hpp +++ b/include/services/ldr_ro.hpp @@ -5,27 +5,17 @@ #include "memory.hpp" #include "result/result.hpp" -class Kernel; - class LDRService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::LDR_RO; Memory& mem; - Kernel& kernel; MAKE_LOG_FUNCTION(log, ldrLogger) - u32 loadedCRS; - // Service commands void initialize(u32 messagePointer); - void linkCRO(u32 messagePointer); - void loadCRO(u32 messagePointer, bool isNew); void loadCRR(u32 messagePointer); - void unloadCRO(u32 messagePointer); - public: - LDRService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} +public: + LDRService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); }; \ No newline at end of file diff --git a/include/services/mcu/mcu_hwc.hpp b/include/services/mcu/mcu_hwc.hpp index c2fada28..354a0c20 100644 --- a/include/services/mcu/mcu_hwc.hpp +++ b/include/services/mcu/mcu_hwc.hpp @@ -7,8 +7,6 @@ namespace MCU { class HWCService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::MCU_HWC; Memory& mem; MAKE_LOG_FUNCTION(log, mcuLogger) @@ -17,7 +15,6 @@ namespace MCU { // Service commands void getBatteryLevel(u32 messagePointer); - void setInfoLEDPattern(u32 messagePointer); public: HWCService(Memory& mem, const EmulatorConfig& config) : mem(mem), config(config) {} diff --git a/include/services/mic.hpp b/include/services/mic.hpp index f166c5aa..f709c27f 100644 --- a/include/services/mic.hpp +++ b/include/services/mic.hpp @@ -9,8 +9,6 @@ class Kernel; class MICService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::MIC; Memory& mem; Kernel& kernel; @@ -31,14 +29,14 @@ class MICService { void unmapSharedMem(u32 messagePointer); void theCaptainToadFunction(u32 messagePointer); - u8 gain = 0; // How loud our microphone input signal is + u8 gain = 0; // How loud our microphone input signal is bool micEnabled = false; bool shouldClamp = false; bool currentlySampling = false; std::optional eventHandle; - public: +public: MICService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/ndm.hpp b/include/services/ndm.hpp index 67679403..4d21ea3e 100644 --- a/include/services/ndm.hpp +++ b/include/services/ndm.hpp @@ -6,33 +6,19 @@ #include "result/result.hpp" class NDMService { - using Handle = HorizonHandle; - enum class ExclusiveState : u32 { - None = 0, - Infrastructure = 1, - LocalComms = 2, - StreetPass = 3, - StreetPassData = 4, - }; - Handle handle = KernelHandles::NDM; Memory& mem; MAKE_LOG_FUNCTION(log, ndmLogger) // Service commands void clearHalfAwakeMacFilter(u32 messagePointer); - void enterExclusiveState(u32 messagePointer); - void exitExclusiveState(u32 messagePointer); void overrideDefaultDaemons(u32 messagePointer); - void queryExclusiveState(u32 messagePointer); void resumeDaemons(u32 messagePointer); void resumeScheduler(u32 messagePointer); void suspendDaemons(u32 messagePointer); void suspendScheduler(u32 messagePointer); - ExclusiveState exclusiveState = ExclusiveState::None; - - public: +public: NDMService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/news_u.hpp b/include/services/news_u.hpp index 15ae0b16..61266e9a 100644 --- a/include/services/news_u.hpp +++ b/include/services/news_u.hpp @@ -5,8 +5,6 @@ #include "memory.hpp" class NewsUService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::NEWS_U; Memory& mem; MAKE_LOG_FUNCTION(log, newsLogger) diff --git a/include/services/nfc.hpp b/include/services/nfc.hpp index e242a326..e65c42c1 100644 --- a/include/services/nfc.hpp +++ b/include/services/nfc.hpp @@ -1,7 +1,4 @@ #pragma once -#include - -#include "amiibo_device.hpp" #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" @@ -12,8 +9,6 @@ class Kernel; class NFCService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::NFC; Memory& mem; Kernel& kernel; @@ -38,7 +33,6 @@ class NFCService { // Kernel events signaled when an NFC tag goes in and out of range respectively std::optional tagInRangeEvent, tagOutOfRangeEvent; - AmiiboDevice device; Old3DSAdapterStatus adapterStatus; TagStatus tagStatus; bool initialized = false; @@ -47,22 +41,16 @@ class NFCService { void communicationGetResult(u32 messagePointer); void communicationGetStatus(u32 messagePointer); void initialize(u32 messagePointer); - void getModelInfo(u32 messagePointer); - void getTagInfo(u32 messagePointer); void getTagInRangeEvent(u32 messagePointer); void getTagOutOfRangeEvent(u32 messagePointer); void getTagState(u32 messagePointer); - void loadAmiiboPartially(u32 messagePointer); void shutdown(u32 messagePointer); void startCommunication(u32 messagePointer); void startTagScanning(u32 messagePointer); void stopCommunication(u32 messagePointer); - void stopTagScanning(u32 messagePointer); - public: +public: NFCService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); - - bool loadAmiibo(const std::filesystem::path& path); }; \ No newline at end of file diff --git a/include/services/nfc_types.hpp b/include/services/nfc_types.hpp deleted file mode 100644 index c1a8ba9a..00000000 --- a/include/services/nfc_types.hpp +++ /dev/null @@ -1,412 +0,0 @@ -// Copyright 2022 yuzu Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#pragma once - -#include -#include - -#include "helpers.hpp" -#include "swap.hpp" - -namespace Service::NFC { - static constexpr std::size_t amiiboNameLength = 0xA; - static constexpr std::size_t applicationIDVersionOffset = 0x1c; - static constexpr std::size_t counterLimit = 0xffff; - - enum class ServiceType : u32 { - User, - Debug, - System, - }; - - enum class CommunicationState : u8 { - Idle = 0, - SearchingForAdapter = 1, - Initialized = 2, - Active = 3, - }; - - enum class ConnectionState : u8 { - Success = 0, - NoAdapter = 1, - Lost = 2, - }; - - enum class DeviceState : u32 { - NotInitialized = 0, - Initialized = 1, - SearchingForTag = 2, - TagFound = 3, - TagRemoved = 4, - TagMounted = 5, - TagPartiallyMounted = 6, // Validate this one seems to have other name - }; - - enum class ModelType : u32 { - Amiibo, - }; - - enum class MountTarget : u32 { - None, - Rom, - Ram, - All, - }; - - enum class AmiiboType : u8 { - Figure, - Card, - Yarn, - }; - - enum class AmiiboSeries : u8 { - SuperSmashBros, - SuperMario, - ChibiRobo, - YoshiWoollyWorld, - Splatoon, - AnimalCrossing, - EightBitMario, - Skylanders, - Unknown8, - TheLegendOfZelda, - ShovelKnight, - Unknown11, - Kiby, - Pokemon, - MarioSportsSuperstars, - MonsterHunter, - BoxBoy, - Pikmin, - FireEmblem, - Metroid, - Others, - MegaMan, - Diablo, - }; - - struct ChecksummedMiiData { - u8 raw[0x60]; - }; - static_assert(sizeof(ChecksummedMiiData) == 0x60); - - enum class TagType : u32 { - None, - Type1, // ISO14443A RW 96-2k bytes 106kbit/s - Type2, // ISO14443A RW/RO 540 bytes 106kbit/s - Type3, // Sony Felica RW/RO 2k bytes 212kbit/s - Type4, // ISO14443A RW/RO 4k-32k bytes 424kbit/s - Type5, // ISO15693 RW/RO 540 bytes 106kbit/s - }; - - enum class PackedTagType : u8 { - None, - Type1, // ISO14443A RW 96-2k bytes 106kbit/s - Type2, // ISO14443A RW/RO 540 bytes 106kbit/s - Type3, // Sony Felica RW/RO 2k bytes 212kbit/s - Type4, // ISO14443A RW/RO 4k-32k bytes 424kbit/s - Type5, // ISO15693 RW/RO 540 bytes 106kbit/s - }; - - // Verify this enum. It might be completely wrong default protocol is 0x0 - enum class TagProtocol : u32 { - None, - TypeA = 1U << 0, // ISO14443A - TypeB = 1U << 1, // ISO14443B - TypeF = 1U << 2, // Sony Felica - Unknown1 = 1U << 3, - Unknown2 = 1U << 5, - All = 0xFFFFFFFFU, - }; - - // Verify this enum. It might be completely wrong default protocol is 0x0 - enum class PackedTagProtocol : u8 { - None, - TypeA = 1U << 0, // ISO14443A - TypeB = 1U << 1, // ISO14443B - TypeF = 1U << 2, // Sony Felica - Unknown1 = 1U << 3, - Unknown2 = 1U << 5, - All = 0xFF, - }; - - enum class AppAreaVersion : u8 { - Nintendo3DS = 0, - NintendoWiiU = 1, - Nintendo3DSv2 = 2, - NintendoSwitch = 3, - NotSet = 0xFF, - }; - - using UniqueSerialNumber = std::array; - using LockBytes = std::array; - using HashData = std::array; - using ApplicationArea = std::array; - using AmiiboName = std::array; - using DataBlock = std::array; - using KeyData = std::array; - - struct TagUuid { - UniqueSerialNumber uid; - u8 nintendo_id; - LockBytes lock_bytes; - }; - static_assert(sizeof(TagUuid) == 10, "TagUuid is an invalid size"); - - struct WriteDate { - u16 year; - u8 month; - u8 day; - }; - static_assert(sizeof(WriteDate) == 0x4, "WriteDate is an invalid size"); - - struct AmiiboDate { - u16 raw_date{}; - - u16 GetValue() const { return Common::swap16(raw_date); } - - u16 GetYear() const { return static_cast(((GetValue() & 0xFE00) >> 9) + 2000); } - u8 GetMonth() const { return static_cast((GetValue() & 0x01E0) >> 5); } - u8 GetDay() const { return static_cast(GetValue() & 0x001F); } - - WriteDate GetWriteDate() const { - if (!IsValidDate()) { - return { - .year = 2000, - .month = 1, - .day = 1, - }; - } - return { - .year = GetYear(), - .month = GetMonth(), - .day = GetDay(), - }; - } - - void SetYear(u16 year) { - const u16 year_converted = static_cast((year - 2000) << 9); - raw_date = Common::swap16((GetValue() & ~0xFE00) | year_converted); - } - void SetMonth(u8 month) { - const u16 month_converted = static_cast(month << 5); - raw_date = Common::swap16((GetValue() & ~0x01E0) | month_converted); - } - void SetDay(u8 day) { - const u16 day_converted = static_cast(day); - raw_date = Common::swap16((GetValue() & ~0x001F) | day_converted); - } - - bool IsValidDate() const { - const bool is_day_valid = GetDay() > 0 && GetDay() < 32; - const bool is_month_valid = GetMonth() > 0 && GetMonth() < 13; - const bool is_year_valid = GetYear() >= 2000; - return is_year_valid && is_month_valid && is_day_valid; - } - }; - static_assert(sizeof(AmiiboDate) == 2, "AmiiboDate is an invalid size"); - - struct Settings { - u8 raw{}; - }; - static_assert(sizeof(Settings) == 1, "AmiiboDate is an invalid size"); - - struct AmiiboSettings { - Settings settings; - u8 country_code_id; - u16_be crc_counter; // Incremented each time crc is changed - AmiiboDate init_date; - AmiiboDate write_date; - u32_be crc; - AmiiboName amiibo_name; // UTF-16 text - }; - static_assert(sizeof(AmiiboSettings) == 0x20, "AmiiboSettings is an invalid size"); - - struct AmiiboModelInfo { - u16 character_id; - u8 character_variant; - AmiiboType amiibo_type; - u16_be model_number; - AmiiboSeries series; - PackedTagType tag_type; - u32 pad; // Unknown - }; - static_assert(sizeof(AmiiboModelInfo) == 0xC, "AmiiboModelInfo is an invalid size"); - - struct NTAG215Password { - u32 PWD; // Password to allow write access - u16 PACK; // Password acknowledge reply - u16 RFUI; // Reserved for future use - }; - static_assert(sizeof(NTAG215Password) == 0x8, "NTAG215Password is an invalid size"); - -#pragma pack(1) - struct EncryptedAmiiboFile { - u8 constant_value; // Must be A5 - u16_be write_counter; // Number of times the amiibo has been written? - u8 amiibo_version; // Amiibo file version - AmiiboSettings settings; // Encrypted amiibo settings - HashData hmac_tag; // Hash - AmiiboModelInfo model_info; // Encrypted amiibo model info - HashData keygen_salt; // Salt - HashData hmac_data; // Hash - ChecksummedMiiData owner_mii; // Encrypted Mii data - u64_be application_id; // Encrypted Game id - u16_be application_write_counter; // Encrypted Counter - u32_be application_area_id; // Encrypted Game id - u8 application_id_byte; - u8 unknown; - u64 mii_extension; - std::array unknown2; - u32_be register_info_crc; - ApplicationArea application_area; // Encrypted Game data - }; - static_assert(sizeof(EncryptedAmiiboFile) == 0x1F8, "AmiiboFile is an invalid size"); - - struct NTAG215File { - LockBytes lock_bytes; // Tag UUID - u16 static_lock; // Set defined pages as read only - u32 compability_container; // Defines available memory - HashData hmac_data; // Hash - u8 constant_value; // Must be A5 - u16_be write_counter; // Number of times the amiibo has been written? - u8 amiibo_version; // Amiibo file version - AmiiboSettings settings; - ChecksummedMiiData owner_mii; // Mii data - u64_be application_id; // Game id - u16_be application_write_counter; // Counter - u32_be application_area_id; - u8 application_id_byte; - u8 unknown; - u64 mii_extension; - std::array unknown2; - u32_be register_info_crc; - ApplicationArea application_area; // Game data - HashData hmac_tag; // Hash - UniqueSerialNumber uid; // Unique serial number - u8 nintendo_id; // Tag UUID - AmiiboModelInfo model_info; - HashData keygen_salt; // Salt - u32 dynamic_lock; // Dynamic lock - u32 CFG0; // Defines memory protected by password - u32 CFG1; // Defines number of verification attempts - NTAG215Password password; // Password data - }; - static_assert(sizeof(NTAG215File) == 0x21C, "NTAG215File is an invalid size"); - static_assert(std::is_trivially_copyable_v, "NTAG215File must be trivially copyable."); -#pragma pack() - - struct EncryptedNTAG215File { - TagUuid uuid; // Unique serial number - u16 static_lock; // Set defined pages as read only - u32 compability_container; // Defines available memory - EncryptedAmiiboFile user_memory; // Writable data - u32 dynamic_lock; // Dynamic lock - u32 CFG0; // Defines memory protected by password - u32 CFG1; // Defines number of verification attempts - NTAG215Password password; // Password data - }; - static_assert(sizeof(EncryptedNTAG215File) == 0x21C, "EncryptedNTAG215File is an invalid size"); - static_assert(std::is_trivially_copyable_v, "EncryptedNTAG215File must be trivially copyable."); - - struct SerializableAmiiboFile { - union { - std::array raw; - NTAG215File file; - }; - }; - static_assert(sizeof(SerializableAmiiboFile) == 0x21C, "SerializableAmiiboFile is an invalid size"); - static_assert(std::is_trivially_copyable_v, "SerializableAmiiboFile must be trivially copyable."); - - struct SerializableEncryptedAmiiboFile { - union { - std::array raw; - EncryptedNTAG215File file; - }; - }; - static_assert(sizeof(SerializableEncryptedAmiiboFile) == 0x21C, "SerializableEncryptedAmiiboFile is an invalid size"); - static_assert(std::is_trivially_copyable_v, "SerializableEncryptedAmiiboFile must be trivially copyable."); - - struct TagInfo { - u16 uuid_length; - PackedTagProtocol protocol; - PackedTagType tag_type; - UniqueSerialNumber uuid; - std::array extra_data; - }; - static_assert(sizeof(TagInfo) == 0x2C, "TagInfo is an invalid size"); - - struct TagInfo2 { - u16 uuid_length; - u8 pad; - PackedTagType tag_type; - UniqueSerialNumber uuid; - std::array extra_data; - TagProtocol protocol; - std::array extra_data2; - }; - static_assert(sizeof(TagInfo2) == 0x60, "TagInfo2 is an invalid size"); - - struct CommonInfo { - WriteDate last_write_date; - u16 application_write_counter; - u16 character_id; - u8 character_variant; - AmiiboSeries series; - u16 model_number; - AmiiboType amiibo_type; - u8 version; - u16 application_area_size; - u8 pad[0x30]; - }; - static_assert(sizeof(CommonInfo) == 0x40, "CommonInfo is an invalid size"); - - struct ModelInfo { - u16 character_id; - u8 character_variant; - AmiiboSeries series; - u16 model_number; - AmiiboType amiibo_type; - u8 pad[0x2F]; - }; - static_assert(sizeof(ModelInfo) == 0x36, "ModelInfo is an invalid size"); - - struct RegisterInfo { - ChecksummedMiiData mii_data; - AmiiboName amiibo_name; - u16 pad; // Zero string terminator - u8 flags; - u8 font_region; - WriteDate creation_date; - u8 pad2[0x2C]; - }; - static_assert(sizeof(RegisterInfo) == 0xA8, "RegisterInfo is an invalid size"); - - struct RegisterInfoPrivate { - ChecksummedMiiData mii_data; - AmiiboName amiibo_name; - u16 pad; // Zero string terminator - u8 flags; - u8 font_region; - WriteDate creation_date; - u8 pad2[0x28]; - }; - static_assert(sizeof(RegisterInfoPrivate) == 0xA4, "RegisterInfoPrivate is an invalid size"); - static_assert(std::is_trivial_v, "RegisterInfoPrivate must be trivial."); - static_assert(std::is_trivially_copyable_v, "RegisterInfoPrivate must be trivially copyable."); - - struct AdminInfo { - u64_be application_id; - u32_be application_area_id; - u16 crc_counter; - u8 flags; - PackedTagType tag_type; - AppAreaVersion app_area_version; - u8 pad[0x7]; - u8 pad2[0x28]; - }; - static_assert(sizeof(AdminInfo) == 0x40, "AdminInfo is an invalid size"); - -} // namespace Service::NFC diff --git a/include/services/nim.hpp b/include/services/nim.hpp index dbb3bb8b..dfe13694 100644 --- a/include/services/nim.hpp +++ b/include/services/nim.hpp @@ -6,8 +6,6 @@ #include "result/result.hpp" class NIMService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::NIM; Memory& mem; MAKE_LOG_FUNCTION(log, nimLogger) @@ -15,7 +13,7 @@ class NIMService { // Service commands void initialize(u32 messagePointer); - public: +public: NIMService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/ns.hpp b/include/services/ns.hpp deleted file mode 100644 index cb00e49b..00000000 --- a/include/services/ns.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include "helpers.hpp" -#include "kernel_types.hpp" -#include "logger.hpp" -#include "memory.hpp" -#include "result/result.hpp" - -class NSService { - Memory& mem; - MAKE_LOG_FUNCTION(log, nsLogger) - - // Service commands - void launchTitle(u32 messagePointer); - - public: - enum class Type { - S, // ns:s - P, // ns:p - C, // ns:c - }; - - NSService(Memory& mem) : mem(mem) {} - void reset(); - void handleSyncRequest(u32 messagePointer, Type type); -}; diff --git a/include/services/nwm_uds.hpp b/include/services/nwm_uds.hpp deleted file mode 100644 index a3b342b8..00000000 --- a/include/services/nwm_uds.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include - -#include "helpers.hpp" -#include "kernel_types.hpp" -#include "logger.hpp" -#include "memory.hpp" - -// More circular dependencies -class Kernel; - -class NwmUdsService { - using Handle = HorizonHandle; - - Handle handle = KernelHandles::NWM_UDS; - Memory& mem; - Kernel& kernel; - MAKE_LOG_FUNCTION(log, nwmUdsLogger) - - bool initialized = false; - std::optional eventHandle = std::nullopt; - - // Service commands - void initializeWithVersion(u32 messagePointer); - - public: - NwmUdsService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} - void reset(); - void handleSyncRequest(u32 messagePointer); -}; \ No newline at end of file diff --git a/include/services/ptm.hpp b/include/services/ptm.hpp index 5480c398..62fa6f65 100644 --- a/include/services/ptm.hpp +++ b/include/services/ptm.hpp @@ -7,35 +7,23 @@ #include "result/result.hpp" class PTMService { + Handle handle = KernelHandles::PTM; Memory& mem; MAKE_LOG_FUNCTION(log, ptmLogger) const EmulatorConfig& config; // Service commands - void clearSoftwareClosedFlag(u32 messagePointer); void configureNew3DSCPU(u32 messagePointer); void getAdapterState(u32 messagePointer); - void getBatteryChargeState(u32 messagePointer); void getBatteryLevel(u32 messagePointer); - void getSoftwareClosedFlag(u32 messagePointer); - void getPedometerState(u32 messagePointer); void getStepHistory(u32 messagePointer); - void getStepHistoryAll(u32 messagePointer); - void getSystemTime(u32 messagePointer); void getTotalStepCount(u32 messagePointer); - public: - enum class Type { - GETS, // ptm:gets - U, // ptm:u - SYSM, // ptm:sysm - PLAY, // ptm:play - }; - +public: PTMService(Memory& mem, const EmulatorConfig& config) : mem(mem), config(config) {} void reset(); - void handleSyncRequest(u32 messagePointer, Type type); + void handleSyncRequest(u32 messagePointer); // 0% -> 0 (shutting down) // 1-5% -> 1 diff --git a/include/services/region_codes.hpp b/include/services/region_codes.hpp index dba10e34..e06894cd 100644 --- a/include/services/region_codes.hpp +++ b/include/services/region_codes.hpp @@ -9,7 +9,7 @@ enum class Regions : u32 { Australia = 3, China = 4, Korea = 5, - Taiwan = 6, + Taiwan = 6 }; // Used for the language field in the NAND user data @@ -42,137 +42,137 @@ enum class LanguageCodes : u32 { }; enum class CountryCodes : u32 { - JP = 1, - AI = 8, - AG = 9, - AR = 10, - AW = 11, - BS = 12, - BB = 13, - BZ = 14, - BO = 15, - BR = 16, - VG = 17, - CA = 18, - KY = 19, - CL = 20, - CO = 21, - CR = 22, - DM = 23, - DO = 24, - EC = 25, - SV = 26, - GF = 27, - GD = 28, - GP = 29, - GT = 30, - GY = 31, - HT = 32, - HN = 33, - JM = 34, - MQ = 35, - MX = 36, - MS = 37, - AN = 38, - NI = 39, - PA = 40, - PY = 41, - PE = 42, - KN = 43, - LC = 44, - VC = 45, - SR = 46, - TT = 47, - TC = 48, - US = 49, - UY = 50, - VI = 51, - VE = 52, - AL = 64, - AU = 65, - AT = 66, - BE = 67, - BA = 68, - BW = 69, - BG = 70, - HR = 71, - CY = 72, - CZ = 73, - DK = 74, - EE = 75, - FI = 76, - FR = 77, - DE = 78, - GR = 79, - HU = 80, - IS = 81, - IE = 82, - IT = 83, - LV = 84, - LS = 85, - LI = 86, - LT = 87, - LU = 88, - MK = 89, - MT = 90, - ME = 91, - MZ = 92, - NA = 93, - NL = 94, - NZ = 95, - NO = 96, - PL = 97, - PT = 98, - RO = 99, - RU = 100, - RS = 101, - SK = 102, - SI = 103, - ZA = 104, - ES = 105, - SZ = 106, - SE = 107, - CH = 108, - TR = 109, - GB = 110, - ZM = 111, - ZW = 112, - AZ = 113, - MR = 114, - ML = 115, - NE = 116, - TD = 117, - SD = 118, - ER = 119, - DJ = 120, - SO = 121, - AD = 122, - GI = 123, - GG = 124, - IM = 125, - JE = 126, - MC = 127, - TW = 128, - KR = 136, - HK = 144, - MO = 145, - ID = 152, - SG = 153, - TH = 154, - PH = 155, - MY = 156, - CN = 160, - AE = 168, - IND = 169, // We can't use the 2-letter country code for India because the Windows SDK does #define IN... - EG = 170, - OM = 171, - QA = 172, - KW = 173, - SA = 174, - SY = 175, - BH = 176, - JO = 177, - SM = 184, - VA = 185, - BM = 186, + JP = 1, + AI = 8, + AG = 9, + AR = 10, + AW = 11, + BS = 12, + BB = 13, + BZ = 14, + BO = 15, + BR = 16, + VG = 17, + CA = 18, + KY = 19, + CL = 20, + CO = 21, + CR = 22, + DM = 23, + DO = 24, + EC = 25, + SV = 26, + GF = 27, + GD = 28, + GP = 29, + GT = 30, + GY = 31, + HT = 32, + HN = 33, + JM = 34, + MQ = 35, + MX = 36, + MS = 37, + AN = 38, + NI = 39, + PA = 40, + PY = 41, + PE = 42, + KN = 43, + LC = 44, + VC = 45, + SR = 46, + TT = 47, + TC = 48, + US = 49, + UY = 50, + VI = 51, + VE = 52, + AL = 64, + AU = 65, + AT = 66, + BE = 67, + BA = 68, + BW = 69, + BG = 70, + HR = 71, + CY = 72, + CZ = 73, + DK = 74, + EE = 75, + FI = 76, + FR = 77, + DE = 78, + GR = 79, + HU = 80, + IS = 81, + IE = 82, + IT = 83, + LV = 84, + LS = 85, + LI = 86, + LT = 87, + LU = 88, + MK = 89, + MT = 90, + ME = 91, + MZ = 92, + NA = 93, + NL = 94, + NZ = 95, + NO = 96, + PL = 97, + PT = 98, + RO = 99, + RU = 100, + RS = 101, + SK = 102, + SI = 103, + ZA = 104, + ES = 105, + SZ = 106, + SE = 107, + CH = 108, + TR = 109, + GB = 110, + ZM = 111, + ZW = 112, + AZ = 113, + MR = 114, + ML = 115, + NE = 116, + TD = 117, + SD = 118, + ER = 119, + DJ = 120, + SO = 121, + AD = 122, + GI = 123, + GG = 124, + IM = 125, + JE = 126, + MC = 127, + TW = 128, + KR = 136, + HK = 144, + MO = 145, + ID = 152, + SG = 153, + TH = 154, + PH = 155, + MY = 156, + CN = 160, + AE = 168, + IND = 169, // We can't use the 2-letter country code for India because the Windows SDK does #define IN... + EG = 170, + OM = 171, + QA = 172, + KW = 173, + SA = 174, + SY = 175, + BH = 176, + JO = 177, + SM = 184, + VA = 185, + BM = 186, }; \ No newline at end of file diff --git a/include/services/service_intercept.hpp b/include/services/service_intercept.hpp deleted file mode 100644 index b8e19c88..00000000 --- a/include/services/service_intercept.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once -#include -#include - -#include "helpers.hpp" - -// We allow Lua scripts to intercept service calls and allow their own code to be ran on SyncRequests -// For example, if we want to intercept dsp::DSP ReadPipe (Header: 0x000E00C0), the "serviceName" field would be "dsp::DSP" -// and the "function" field would be 0x000E00C0 -struct InterceptedService { - std::string serviceName; // Name of the service whose function - u32 function; // Header of the function to intercept - - InterceptedService(const std::string& name, u32 header) : serviceName(name), function(header) {} - bool operator==(const InterceptedService& other) const { return serviceName == other.serviceName && function == other.function; } -}; - -// Define hashing function for InterceptedService to use it with unordered_map -namespace std { - template <> - struct hash { - usize operator()(const InterceptedService& s) const noexcept { - const usize hash1 = std::hash{}(s.serviceName); - const usize hash2 = std::hash{}(s.function); - return hash1 ^ (hash2 << 1); - } - }; -} // namespace std diff --git a/include/services/service_manager.hpp b/include/services/service_manager.hpp index f51ddf2d..42025a3e 100644 --- a/include/services/service_manager.hpp +++ b/include/services/service_manager.hpp @@ -2,12 +2,9 @@ #include #include #include -#include -#include #include "kernel_types.hpp" #include "logger.hpp" -#include "lua_manager.hpp" #include "memory.hpp" #include "services/ac.hpp" #include "services/act.hpp" @@ -17,7 +14,6 @@ #include "services/cam.hpp" #include "services/cecd.hpp" #include "services/cfg.hpp" -#include "services/csnd.hpp" #include "services/dlp_srvr.hpp" #include "services/dsp.hpp" #include "services/frd.hpp" @@ -26,7 +22,7 @@ #include "services/gsp_lcd.hpp" #include "services/hid.hpp" #include "services/http.hpp" -#include "services/ir/ir_user.hpp" +#include "services/ir_user.hpp" #include "services/ldr_ro.hpp" #include "services/mcu/mcu_hwc.hpp" #include "services/mic.hpp" @@ -34,10 +30,7 @@ #include "services/news_u.hpp" #include "services/nfc.hpp" #include "services/nim.hpp" -#include "services/ns.hpp" -#include "services/nwm_uds.hpp" #include "services/ptm.hpp" -#include "services/service_intercept.hpp" #include "services/soc.hpp" #include "services/ssl.hpp" #include "services/y2r.hpp" @@ -47,8 +40,6 @@ struct EmulatorConfig; class Kernel; class ServiceManager { - using Handle = HorizonHandle; - std::span regs; Memory& mem; Kernel& kernel; @@ -57,15 +48,14 @@ class ServiceManager { MAKE_LOG_FUNCTION(log, srvLogger) - ACService ac; + ACService ac; ACTService act; - AMService am; + AMService am; APTService apt; - BOSSService boss; + BOSSService boss; CAMService cam; CECDService cecd; CFGService cfg; - CSNDService csnd; DlpSrvrService dlp_srvr; DSPService dsp; HIDService hid; @@ -80,9 +70,7 @@ class ServiceManager { NDMService ndm; NewsUService news_u; NFCService nfc; - NwmUdsService nwm_uds; - NIMService nim; - NSService ns; + NIMService nim; PTMService ptm; SOCService soc; SSLService ssl; @@ -90,32 +78,16 @@ class ServiceManager { MCU::HWCService mcu_hwc; - // We allow Lua scripts to intercept service calls and allow their own code to be ran on SyncRequests - // For example, if we want to intercept dsp::DSP ReadPipe (Header: 0x000E00C0), the "serviceName" field would be "dsp::DSP" - // and the "function" field would be 0x000E00C0 - LuaManager& lua; - - // Map from service intercept entries to their corresponding Lua callbacks - std::unordered_map interceptedServices = {}; - // Calling std::unordered_map::size() compiles to a non-trivial function call on Clang, so we store this - // separately and check it on service calls, for performance reasons - bool haveServiceIntercepts = false; - - // Checks for whether a service call is intercepted by Lua and handles it. Returns true if Lua told us not to handle the function, - // or false if we should handle it as normal - bool checkForIntercept(u32 messagePointer, Handle handle); - // "srv:" commands void enableNotification(u32 messagePointer); void getServiceHandle(u32 messagePointer); - void publishToSubscriber(u32 messagePointer); void receiveNotification(u32 messagePointer); void registerClient(u32 messagePointer); void subscribe(u32 messagePointer); void unsubscribe(u32 messagePointer); public: - ServiceManager(std::span regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel, const EmulatorConfig& config, LuaManager& lua); + ServiceManager(std::span regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel, const EmulatorConfig& config); void reset(); void initializeFS() { fs.initializeFilesystem(); } void handleSyncRequest(u32 messagePointer); @@ -127,33 +99,9 @@ class ServiceManager { void sendGPUInterrupt(GPUInterrupt type) { gsp_gpu.requestInterrupt(type); } void setGSPSharedMem(u8* ptr) { gsp_gpu.setSharedMem(ptr); } void setHIDSharedMem(u8* ptr) { hid.setSharedMem(ptr); } - void setCSNDSharedMem(u8* ptr) { csnd.setSharedMemory(ptr); } + + void signalDSPEvents() { dsp.signalEvents(); } // Input function wrappers HIDService& getHID() { return hid; } - NFCService& getNFC() { return nfc; } - DSPService& getDSP() { return dsp; } - Y2RService& getY2R() { return y2r; } - IRUserService& getIRUser() { return ir_user; } - - void addServiceIntercept(const std::string& service, u32 function, int callbackRef) { - auto success = interceptedServices.try_emplace(InterceptedService(service, function), callbackRef); - if (!success.second) { - // An intercept for this service function already exists - // Remove the old callback and set the new one - lua.removeInterceptedService(service, function, success.first->second); - success.first->second = callbackRef; - } - - haveServiceIntercepts = true; - } - - void clearServiceIntercepts() { - for (const auto& [interceptedService, callbackRef] : interceptedServices) { - lua.removeInterceptedService(interceptedService.serviceName, interceptedService.function, callbackRef); - } - - interceptedServices.clear(); - haveServiceIntercepts = false; - } }; diff --git a/include/services/service_map.hpp b/include/services/service_map.hpp deleted file mode 100644 index 92f6a596..00000000 --- a/include/services/service_map.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include -#include -#include - -#include "handles.hpp" - -// Helpers for constructing std::maps to look up OS services. -// We want to be able to map both service names -> services (Used for OS emulation) -// And service handles -> services (For Lua service call intercepts) -using ServiceMapEntry = std::pair; - -// Comparator for constructing a name->handle service map -struct ServiceMapByNameComparator { - // The comparators must be transparent, as our search key is different from our set key - // Our set key is a ServiceMapEntry, while the comparator each time is either the name or the service handle - using is_transparent = std::true_type; - bool operator()(const ServiceMapEntry& lhs, std::string_view rhs) const { return lhs.first < rhs; } - bool operator()(std::string_view lhs, const ServiceMapEntry& rhs) const { return lhs < rhs.first; } - bool operator()(const ServiceMapEntry& lhs, const ServiceMapEntry& rhs) const { return lhs.first < rhs.first; } -}; - -// Comparator for constructing a handle->name service map -struct ServiceMapByHandleComparator { - using is_transparent = std::true_type; - bool operator()(const ServiceMapEntry& lhs, HorizonHandle rhs) const { return lhs.second < rhs; } - bool operator()(HorizonHandle lhs, const ServiceMapEntry& rhs) const { return lhs < rhs.second; } - bool operator()(const ServiceMapEntry& lhs, const ServiceMapEntry& rhs) const { return lhs.second < rhs.second; } -}; diff --git a/include/services/soc.hpp b/include/services/soc.hpp index ff334a2c..88f0b456 100644 --- a/include/services/soc.hpp +++ b/include/services/soc.hpp @@ -5,8 +5,6 @@ #include "memory.hpp" class SOCService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::SOC; Memory& mem; MAKE_LOG_FUNCTION(log, socLogger) @@ -16,7 +14,7 @@ class SOCService { // Service commands void initializeSockets(u32 messagePointer); - public: +public: SOCService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); diff --git a/include/services/ssl.hpp b/include/services/ssl.hpp index 4b45fc81..0282049a 100644 --- a/include/services/ssl.hpp +++ b/include/services/ssl.hpp @@ -1,19 +1,17 @@ #pragma once -#include - #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" #include "memory.hpp" -class SSLService { - using Handle = HorizonHandle; +#include +class SSLService { Handle handle = KernelHandles::SSL; Memory& mem; MAKE_LOG_FUNCTION(log, sslLogger) - std::mt19937 rng; // Use a Mersenne Twister for RNG since this service is supposed to have better rng than just rand() + std::mt19937 rng; // Use a Mersenne Twister for RNG since this service is supposed to have better rng than just rand() bool initialized; // Service commands diff --git a/include/services/y2r.hpp b/include/services/y2r.hpp index 6afebdb8..17ceaafa 100644 --- a/include/services/y2r.hpp +++ b/include/services/y2r.hpp @@ -1,7 +1,5 @@ #pragma once -#include #include - #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" @@ -11,8 +9,6 @@ class Kernel; class Y2RService { - using Handle = HorizonHandle; - Handle handle = KernelHandles::Y2R; Memory& mem; Kernel& kernel; @@ -23,7 +19,7 @@ class Y2RService { enum class BusyStatus : u32 { NotBusy = 0, - Busy = 1, + Busy = 1 }; enum class InputFormat : u32 { @@ -38,7 +34,7 @@ class Y2RService { RGB32 = 0, RGB24 = 1, RGB15 = 2, - RGB565 = 3, + RGB565 = 3 }; // Clockwise rotation @@ -46,25 +42,14 @@ class Y2RService { None = 0, Rotate90 = 1, Rotate180 = 2, - Rotate270 = 3, + Rotate270 = 3 }; enum class BlockAlignment : u32 { - Line = 0, // Output buffer's pixels are arranged linearly. Used when outputting to the framebuffer. - Block8x8 = 1, // Output buffer's pixels are morton swizzled. Used when outputting to a GPU texture. + Line = 0, // Output buffer's pixels are arranged linearly. Used when outputting to the framebuffer. + Block8x8 = 1, // Output buffer's pixels are morton swizzled. Used when outputting to a GPU texture. }; - // https://github.com/citra-emu/citra/blob/ac9d72a95ca9a60de8d39484a14aecf489d6d016/src/core/hle/service/cam/y2r_u.cpp#L33 - using CoefficientSet = std::array; - static constexpr std::array standardCoefficients{{ - {{0x100, 0x166, 0xB6, 0x58, 0x1C5, -0x166F, 0x10EE, -0x1C5B}}, // ITU_Rec601 - {{0x100, 0x193, 0x77, 0x2F, 0x1DB, -0x1933, 0xA7C, -0x1D51}}, // ITU_Rec709 - {{0x12A, 0x198, 0xD0, 0x64, 0x204, -0x1BDE, 0x10F2, -0x229B}}, // ITU_Rec601_Scaling - {{0x12A, 0x1CA, 0x88, 0x36, 0x21C, -0x1F04, 0x99C, -0x2421}}, // ITU_Rec709_Scaling - }}; - - CoefficientSet conversionCoefficients; // Current conversion coefficients - InputFormat inputFmt; OutputFormat outputFmt; Rotation rotation; @@ -85,17 +70,11 @@ class Y2RService { void getInputLineWidth(u32 messagePointer); void getOutputFormat(u32 messagePointer); void isBusyConversion(u32 messagePointer); - void isFinishedReceiving(u32 messagePointer); - void isFinishedSendingY(u32 messagePointer); - void isFinishedSendingU(u32 messagePointer); - void isFinishedSendingV(u32 messagePointer); - void isFinishedSendingYUV(u32 messagePointer); void pingProcess(u32 messagePointer); void setTransferEndInterrupt(u32 messagePointer); void setAlpha(u32 messagePointer); void setBlockAlignment(u32 messagePointer); - void setCoefficientParams(u32 messagePointer); void setInputFormat(u32 messagePointer); void setInputLineWidth(u32 messagePointer); void setInputLines(u32 messagePointer); @@ -106,22 +85,15 @@ class Y2RService { void setSendingY(u32 messagePointer); void setSendingU(u32 messagePointer); void setSendingV(u32 messagePointer); - void setSendingYUV(u32 messagePointer); void setSpacialDithering(u32 messagePointer); void setStandardCoeff(u32 messagePointer); void setTemporalDithering(u32 messagePointer); - void getCoefficientParams(u32 messagePointer); - void getStandardCoefficientParams(u32 messagePointer); void startConversion(u32 messagePointer); void stopConversion(u32 messagePointer); - bool isBusy; - - public: +public: Y2RService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {} void reset(); void handleSyncRequest(u32 messagePointer); - - void signalConversionDone(); }; \ No newline at end of file diff --git a/include/swap.hpp b/include/swap.hpp deleted file mode 100644 index c0910f08..00000000 --- a/include/swap.hpp +++ /dev/null @@ -1,629 +0,0 @@ -// Copyright (c) 2012- PPSSPP Project / Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0 or later versions. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official git repository and contact information can be found at -// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. - -#pragma once - -#include - -#if defined(_MSC_VER) -#include -#endif -#include - -#include "helpers.hpp" - -// GCC -#ifdef __GNUC__ - -#if __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && !defined(COMMON_LITTLE_ENDIAN) -#define COMMON_LITTLE_ENDIAN 1 -#elif __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) && !defined(COMMON_BIG_ENDIAN) -#define COMMON_BIG_ENDIAN 1 -#endif - -// LLVM/clang -#elif defined(__clang__) - -#if __LITTLE_ENDIAN__ && !defined(COMMON_LITTLE_ENDIAN) -#define COMMON_LITTLE_ENDIAN 1 -#elif __BIG_ENDIAN__ && !defined(COMMON_BIG_ENDIAN) -#define COMMON_BIG_ENDIAN 1 -#endif - -// MSVC -#elif defined(_MSC_VER) && !defined(COMMON_BIG_ENDIAN) && !defined(COMMON_LITTLE_ENDIAN) - -#define COMMON_LITTLE_ENDIAN 1 -#endif - -// Worst case, default to little endian. -#if !COMMON_BIG_ENDIAN && !COMMON_LITTLE_ENDIAN -#define COMMON_LITTLE_ENDIAN 1 -#endif - -namespace Common { - -#ifdef _MSC_VER - [[nodiscard]] inline u16 swap16(u16 data) noexcept { return _byteswap_ushort(data); } - [[nodiscard]] inline u32 swap32(u32 data) noexcept { return _byteswap_ulong(data); } - [[nodiscard]] inline u64 swap64(u64 data) noexcept { return _byteswap_uint64(data); } -#elif defined(__clang__) || defined(__GNUC__) -#if defined(__Bitrig__) || defined(__OpenBSD__) -// redefine swap16, swap32, swap64 as inline functions -#undef swap16 -#undef swap32 -#undef swap64 -#endif - [[nodiscard]] inline u16 swap16(u16 data) noexcept { return __builtin_bswap16(data); } - [[nodiscard]] inline u32 swap32(u32 data) noexcept { return __builtin_bswap32(data); } - [[nodiscard]] inline u64 swap64(u64 data) noexcept { return __builtin_bswap64(data); } -#else - // Generic implementation. - [[nodiscard]] inline u16 swap16(u16 data) noexcept { return (data >> 8) | (data << 8); } - [[nodiscard]] inline u32 swap32(u32 data) noexcept { - return ((data & 0xFF000000U) >> 24) | ((data & 0x00FF0000U) >> 8) | ((data & 0x0000FF00U) << 8) | ((data & 0x000000FFU) << 24); - } - [[nodiscard]] inline u64 swap64(u64 data) noexcept { - return ((data & 0xFF00000000000000ULL) >> 56) | ((data & 0x00FF000000000000ULL) >> 40) | ((data & 0x0000FF0000000000ULL) >> 24) | - ((data & 0x000000FF00000000ULL) >> 8) | ((data & 0x00000000FF000000ULL) << 8) | ((data & 0x0000000000FF0000ULL) << 24) | - ((data & 0x000000000000FF00ULL) << 40) | ((data & 0x00000000000000FFULL) << 56); - } -#endif - - [[nodiscard]] inline float swapf(float f) noexcept { - static_assert(sizeof(u32) == sizeof(float), "float must be the same size as uint32_t."); - - u32 value; - std::memcpy(&value, &f, sizeof(u32)); - - value = swap32(value); - std::memcpy(&f, &value, sizeof(u32)); - - return f; - } - - [[nodiscard]] inline double swapd(double f) noexcept { - static_assert(sizeof(u64) == sizeof(double), "double must be the same size as uint64_t."); - - u64 value; - std::memcpy(&value, &f, sizeof(u64)); - - value = swap64(value); - std::memcpy(&f, &value, sizeof(u64)); - - return f; - } - -} // Namespace Common - -template -struct swap_struct_t { - using swapped_t = swap_struct_t; - - protected: - T value; - - static T swap(T v) { return F::swap(v); } - - public: - T swap() const { return swap(value); } - swap_struct_t() = default; - swap_struct_t(const T& v) : value(swap(v)) {} - - template - swapped_t& operator=(const S& source) { - value = swap(static_cast(source)); - return *this; - } - - operator s8() const { return static_cast(swap()); } - operator u8() const { return static_cast(swap()); } - operator s16() const { return static_cast(swap()); } - operator u16() const { return static_cast(swap()); } - operator s32() const { return static_cast(swap()); } - operator u32() const { return static_cast(swap()); } - operator s64() const { return static_cast(swap()); } - operator u64() const { return static_cast(swap()); } - operator float() const { return static_cast(swap()); } - operator double() const { return static_cast(swap()); } - - // +v - swapped_t operator+() const { return +swap(); } - // -v - swapped_t operator-() const { return -swap(); } - - // v / 5 - swapped_t operator/(const swapped_t& i) const { return swap() / i.swap(); } - template - swapped_t operator/(const S& i) const { - return swap() / i; - } - - // v * 5 - swapped_t operator*(const swapped_t& i) const { return swap() * i.swap(); } - template - swapped_t operator*(const S& i) const { - return swap() * i; - } - - // v + 5 - swapped_t operator+(const swapped_t& i) const { return swap() + i.swap(); } - template - swapped_t operator+(const S& i) const { - return swap() + static_cast(i); - } - // v - 5 - swapped_t operator-(const swapped_t& i) const { return swap() - i.swap(); } - template - swapped_t operator-(const S& i) const { - return swap() - static_cast(i); - } - - // v += 5 - swapped_t& operator+=(const swapped_t& i) { - value = swap(swap() + i.swap()); - return *this; - } - template - swapped_t& operator+=(const S& i) { - value = swap(swap() + static_cast(i)); - return *this; - } - // v -= 5 - swapped_t& operator-=(const swapped_t& i) { - value = swap(swap() - i.swap()); - return *this; - } - template - swapped_t& operator-=(const S& i) { - value = swap(swap() - static_cast(i)); - return *this; - } - - // ++v - swapped_t& operator++() { - value = swap(swap() + 1); - return *this; - } - // --v - swapped_t& operator--() { - value = swap(swap() - 1); - return *this; - } - - // v++ - swapped_t operator++(int) { - swapped_t old = *this; - value = swap(swap() + 1); - return old; - } - // v-- - swapped_t operator--(int) { - swapped_t old = *this; - value = swap(swap() - 1); - return old; - } - // Comparaison - // v == i - bool operator==(const swapped_t& i) const { return swap() == i.swap(); } - template - bool operator==(const S& i) const { - return swap() == i; - } - - // v != i - bool operator!=(const swapped_t& i) const { return swap() != i.swap(); } - template - bool operator!=(const S& i) const { - return swap() != i; - } - - // v > i - bool operator>(const swapped_t& i) const { return swap() > i.swap(); } - template - bool operator>(const S& i) const { - return swap() > i; - } - - // v < i - bool operator<(const swapped_t& i) const { return swap() < i.swap(); } - template - bool operator<(const S& i) const { - return swap() < i; - } - - // v >= i - bool operator>=(const swapped_t& i) const { return swap() >= i.swap(); } - template - bool operator>=(const S& i) const { - return swap() >= i; - } - - // v <= i - bool operator<=(const swapped_t& i) const { return swap() <= i.swap(); } - template - bool operator<=(const S& i) const { - return swap() <= i; - } - - // logical - swapped_t operator!() const { return !swap(); } - - // bitmath - swapped_t operator~() const { return ~swap(); } - - swapped_t operator&(const swapped_t& b) const { return swap() & b.swap(); } - template - swapped_t operator&(const S& b) const { - return swap() & b; - } - swapped_t& operator&=(const swapped_t& b) { - value = swap(swap() & b.swap()); - return *this; - } - template - swapped_t& operator&=(const S b) { - value = swap(swap() & b); - return *this; - } - - swapped_t operator|(const swapped_t& b) const { return swap() | b.swap(); } - template - swapped_t operator|(const S& b) const { - return swap() | b; - } - swapped_t& operator|=(const swapped_t& b) { - value = swap(swap() | b.swap()); - return *this; - } - template - swapped_t& operator|=(const S& b) { - value = swap(swap() | b); - return *this; - } - - swapped_t operator^(const swapped_t& b) const { return swap() ^ b.swap(); } - template - swapped_t operator^(const S& b) const { - return swap() ^ b; - } - swapped_t& operator^=(const swapped_t& b) { - value = swap(swap() ^ b.swap()); - return *this; - } - template - swapped_t& operator^=(const S& b) { - value = swap(swap() ^ b); - return *this; - } - - template - swapped_t operator<<(const S& b) const { - return swap() << b; - } - template - swapped_t& operator<<=(const S& b) const { - value = swap(swap() << b); - return *this; - } - - template - swapped_t operator>>(const S& b) const { - return swap() >> b; - } - template - swapped_t& operator>>=(const S& b) const { - value = swap(swap() >> b); - return *this; - } - - // Member - /** todo **/ - - // Arithmetics - template - friend S operator+(const S& p, const swapped_t v); - - template - friend S operator-(const S& p, const swapped_t v); - - template - friend S operator/(const S& p, const swapped_t v); - - template - friend S operator*(const S& p, const swapped_t v); - - template - friend S operator%(const S& p, const swapped_t v); - - // Arithmetics + assignments - template - friend S operator+=(const S& p, const swapped_t v); - - template - friend S operator-=(const S& p, const swapped_t v); - - // Bitmath - template - friend S operator&(const S& p, const swapped_t v); - - // Comparison - template - friend bool operator<(const S& p, const swapped_t v); - - template - friend bool operator>(const S& p, const swapped_t v); - - template - friend bool operator<=(const S& p, const swapped_t v); - - template - friend bool operator>=(const S& p, const swapped_t v); - - template - friend bool operator!=(const S& p, const swapped_t v); - - template - friend bool operator==(const S& p, const swapped_t v); -}; - -// Arithmetics -template -S operator+(const S& i, const swap_struct_t v) { - return i + v.swap(); -} - -template -S operator-(const S& i, const swap_struct_t v) { - return i - v.swap(); -} - -template -S operator/(const S& i, const swap_struct_t v) { - return i / v.swap(); -} - -template -S operator*(const S& i, const swap_struct_t v) { - return i * v.swap(); -} - -template -S operator%(const S& i, const swap_struct_t v) { - return i % v.swap(); -} - -// Arithmetics + assignments -template -S& operator+=(S& i, const swap_struct_t v) { - i += v.swap(); - return i; -} - -template -S& operator-=(S& i, const swap_struct_t v) { - i -= v.swap(); - return i; -} - -// Logical -template -S operator&(const S& i, const swap_struct_t v) { - return i & v.swap(); -} - -template -S operator&(const swap_struct_t v, const S& i) { - return static_cast(v.swap() & i); -} - -// Comparaison -template -bool operator<(const S& p, const swap_struct_t v) { - return p < v.swap(); -} -template -bool operator>(const S& p, const swap_struct_t v) { - return p > v.swap(); -} -template -bool operator<=(const S& p, const swap_struct_t v) { - return p <= v.swap(); -} -template -bool operator>=(const S& p, const swap_struct_t v) { - return p >= v.swap(); -} -template -bool operator!=(const S& p, const swap_struct_t v) { - return p != v.swap(); -} -template -bool operator==(const S& p, const swap_struct_t v) { - return p == v.swap(); -} - -template -struct swap_64_t { - static T swap(T x) { return static_cast(Common::swap64(x)); } -}; - -template -struct swap_32_t { - static T swap(T x) { return static_cast(Common::swap32(x)); } -}; - -template -struct swap_16_t { - static T swap(T x) { return static_cast(Common::swap16(x)); } -}; - -template -struct swap_float_t { - static T swap(T x) { return static_cast(Common::swapf(x)); } -}; - -template -struct swap_double_t { - static T swap(T x) { return static_cast(Common::swapd(x)); } -}; - -template -struct swap_enum_t { - static_assert(std::is_enum_v); - using base = std::underlying_type_t; - - public: - swap_enum_t() = default; - swap_enum_t(const T& v) : value(swap(v)) {} - - swap_enum_t& operator=(const T& v) { - value = swap(v); - return *this; - } - - operator T() const { return swap(value); } - - explicit operator base() const { return static_cast(swap(value)); } - - protected: - T value{}; - // clang-format off - using swap_t = std::conditional_t< - std::is_same_v, swap_16_t, std::conditional_t< - std::is_same_v, swap_16_t, std::conditional_t< - std::is_same_v, swap_32_t, std::conditional_t< - std::is_same_v, swap_32_t, std::conditional_t< - std::is_same_v, swap_64_t, std::conditional_t< - std::is_same_v, swap_64_t, void>>>>>>; - // clang-format on - static T swap(T x) { return static_cast(swap_t::swap(static_cast(x))); } -}; - -struct SwapTag {}; // Use the different endianness from the system -struct KeepTag {}; // Use the same endianness as the system - -template -struct AddEndian; - -// KeepTag specializations - -template -struct AddEndian { - using type = T; -}; - -// SwapTag specializations - -template <> -struct AddEndian { - using type = u8; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template <> -struct AddEndian { - using type = s8; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template <> -struct AddEndian { - using type = swap_struct_t>; -}; - -template -struct AddEndian { - static_assert(std::is_enum_v); - using type = swap_enum_t; -}; - -// Alias LETag/BETag as KeepTag/SwapTag depending on the system -#if COMMON_LITTLE_ENDIAN - -using LETag = KeepTag; -using BETag = SwapTag; - -#else - -using BETag = KeepTag; -using LETag = SwapTag; - -#endif - -// Aliases for LE types -using u16_le = AddEndian::type; -using u32_le = AddEndian::type; -using u64_le = AddEndian::type; - -using s16_le = AddEndian::type; -using s32_le = AddEndian::type; -using s64_le = AddEndian::type; - -template -using enum_le = std::enable_if_t, typename AddEndian::type>; - -using float_le = AddEndian::type; -using double_le = AddEndian::type; - -// Aliases for BE types -using u16_be = AddEndian::type; -using u32_be = AddEndian::type; -using u64_be = AddEndian::type; - -using s16_be = AddEndian::type; -using s32_be = AddEndian::type; -using s64_be = AddEndian::type; - -template -using enum_be = std::enable_if_t, typename AddEndian::type>; - -using float_be = AddEndian::type; -using double_be = AddEndian::type; \ No newline at end of file diff --git a/include/system_models.hpp b/include/system_models.hpp index 0fd0b635..b24bfdcd 100644 --- a/include/system_models.hpp +++ b/include/system_models.hpp @@ -18,6 +18,6 @@ namespace SystemModel { KTR = NewNintendo3DS, FTR = Nintendo2DS, RED = NewNintendo3DS_XL, - JAN = NewNintendo2DS_XL, + JAN = NewNintendo2DS_XL }; } \ No newline at end of file diff --git a/readme.md b/readme.md index 438a2b95..a1ce1eaf 100644 --- a/readme.md +++ b/readme.md @@ -1,41 +1,32 @@ # Panda3DS -[![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml) [![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml) [![Android Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml) [![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml) [![AUR Package](https://img.shields.io/aur/version/panda3ds-git)](https://aur.archlinux.org/packages/panda3ds-git) +[![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml) [![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml) [![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml) [![AUR Package](https://img.shields.io/aur/version/panda3ds-git)](https://aur.archlinux.org/packages/panda3ds-git) Panda3DS is an HLE, red-panda-themed Nintendo 3DS emulator written in C++ which started out as a fun project out of curiosity, but evolved into something that can sort of play games! -Experimenting with new methods in emulation and unique features such as Lua scripting, we're here to make a difference! - # Discussion -Join our Discord server by pressing on the banner below, or find us on other platforms via [our website](https://panda3ds.com/)! +Join our Discord server by pressing on the banner below! [![Discord Banner 2](https://discord.com/api/guilds/1118695732958994532/widget.png?style=banner2)](https://discord.gg/ZYbugsEmsw) -![screenshot1](docs/img/KirbyRobobot.png) ![screenshot2](docs/img/OoT_Title.png) ![screenshot3](docs/img/pokegang.png) ![screenshot4](docs/img/KirbyAndroid.png) +![screenshot1](docs/img/KirbyRobobot.png) ![screenshot2](docs/img/OoT_Title.png) ![screenshot3](docs/img/pokegang.png) # Download -You can download stable builds from the Releases tab, or you can download the latest build from the tables below. Additionally, Panda3DS comes in 2 flavours on PC: A minimal SDL frontend, which does not have a GUI, and an experimental Qt 6 frontend with a proper user interface. +You can download stable builds from the Releases tab, or you can download the latest build from the table below -SDL builds (No GUI): |Platform|Status|Download| |--------|------------|--------| |Windows build|[![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml)|[Windows Executable](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Windows_Build/master/Windows%20executable.zip)| -|MacOS build|[![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml)|[MacOS App Bundle](https://nightly.link/wheremyfoodat/Panda3DS/workflows/MacOS_Build/master/MacOS%20Alber%20App%20Bundle%20(universal).zip)| +|MacOS build|[![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml)|[MacOS App Bundle](https://nightly.link/wheremyfoodat/Panda3DS/workflows/MacOS_Build/master/MacOS%20Alber%20App%20Bundle.zip)| |Linux build|[![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml)|[Linux AppImage](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Linux_AppImage_Build/master/Linux%20executable.zip)| -Qt and Android builds: -|Platform|Status|Download| -|--------|------------|--------| -|Windows build|[![Qt Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml)|[Windows Executable](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Qt_Build/master/Windows%20executable.zip)| -|MacOS build|[![Qt Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml)|[MacOS App Bundle](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Qt_Build/master/MacOS%20Alber%20App%20Bundle%20(universal).zip)| -|Linux build|[![Qt Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml)|[Linux AppImage](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Qt_Build/master/Linux%20executable.zip)| -|Android build (arm64)|[![Android Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml)|[Android APK](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Android_Build/master/Android%20APKs%20(arm64).zip)| - # Compatibility -Panda3DS is still in the early stages of development. Many games boot, many don't. Lots of games have at least some hilariously broken graphics, audio is WIP, and some QoL features are missing. However, even more things are implemented, such as most of the 3DS core required to play games, and various neat features, such as Lua scripting, discord bot support, support for some system apps, cheats, controller support, WIP amiibo support and many more! The emulator is constantly evolving, so make sure to take a peek every now and then! +Panda3DS is still in the early stages of development. Many games boot, many don't. Most games have at least some hilariously broken graphics, audio is not supported, and some QoL features (including a GUI) are missing. -For documenting game compatibility, make sure to visit the [games list repository](https://github.com/Panda3DS-emu/Panda3DS-Games-List). For miscellaneous issues or more technical issues, feel free to use this repo's issues tab. +In addition, some games don't quiiite work with the upstream code. A lot of them might need some panics in the source code to be commented out before they work, etc. However, just the fact things can work as well as they do now is promising in itself. + +Check out [this Google spreadsheet](https://docs.google.com/spreadsheets/d/1nWZTzfaMPkZdyhqHEawMRBaP0qSMmQdxrVfAbgapYrM/edit?usp=sharing) for an unofficial compatibility list. # Why? -The 3DS emulation scene is already pretty mature, with offerings such as Citra which can offer a great playing experience for most games in the library, [Corgi3DS](https://github.com/PSI-Rockin/Corgi3DS), an innovative LLE emulator, or [Mikage](https://mikage.app/). However, there's always room for more emulators! While Panda3DS was initially a mere curiosity, there's many different concepts I would like to explore with it in the future, such as: +The 3DS emulation scene is already pretty mature, with offerings such as [Citra](https://github.com/citra-emu/citra) which can offer a great playing experience for most games in the library, [Corgi3DS](https://github.com/PSI-Rockin/Corgi3DS), an innovative LLE emulator, or [Mikage](https://mikage.app/). However, there's always room for more emulators! While Panda3DS was initially a mere curiosity, there's many different concepts I would like to explore with it in the future, such as: - Virtualization. What motivated the creation of this emulator was actually a discussion on whether it is possible to get fast 3DS emulation on low-end hardware such as the Raspberry Pi 4, using the KVM API. At the moment, Panda3DS is powered by Dynarmic rather than using virtualization, but this is definitely a concept I want to explore in the future. @@ -68,7 +59,7 @@ Simply drag and drop a ROM to the executable if supported, or invoke the executa
Panda3DS can load ROMs in the following formats: - .3ds/.cci -- .cxi/.app/.ncch +- .cxi/.app - .elf/.axf - .3dsx @@ -76,11 +67,10 @@ Both decrypted and encrypted dumps are supported. However for encrypted dumps yo ## Controls Keyboard & Mouse -- Up analog W -- Down analog S -- Left analog A -- Right analog D -- D-pad Arrows +- Up button W +- Down button S +- Left button A +- Right button D - A button L - B button K - X button O @@ -101,7 +91,6 @@ Panda3DS also supports controller input using the SDL2 GameController API. - [3DBrew](https://www.3dbrew.org/wiki/Main_Page), a wiki full of 3DS information and the main source of documentation used. - [GBATek](https://www.problemkaputt.de/gbatek.htm#3dsreference), a GBA, DS and 3DS reference which provided insights on some pieces of hardware as well as neatly documenting things like certain file formats used in games. - [Libctru](https://github.com/devkitPro/libctru), the most well-known 3DS homebrew SDK. Used for developing test ROMs, as well as a source of documentation thanks to its doxygen wiki. -- [ctru-rs](https://github.com/rust3ds/ctru-rs), a wrapper around libctru for writing 3DS homebrew in Rust. - [Citra](https://github.com/citra-emu/citra), an HLE 3DS emulator. Very useful as a reference, with some code snippets inspired or adapted from it. - [3dmoo](https://github.com/plutooo/3dmoo), an HLE 3DS emulator which helped similarly to Citra @@ -113,17 +102,16 @@ Panda3DS also supports controller input using the SDL2 GameController API. - [SkyEmu](https://github.com/skylersaleh/SkyEmu): A seagull-themed low-level GameBoy, GameBoy Color, GameBoy Advance and Nintendo DS emulator that is designed to be easy to use, cross platform and accurate. - [NanoBoyAdvance](https://github.com/nba-emu/NanoBoyAdvance): A Game Boy Advance emulator focusing on hardware research and cycle-accurate emulation - [Dust](https://github.com/kelpsyberry/dust): Nintendo DS emulator for desktop devices and the web -- [felix86](https://github.com/OFFTKP/felix86): A new x86-64 → RISC-V Linux userspace emulator -- [ChonkyStation](https://github.com/liuk7071/ChonkyStation): Work-in-progress PlayStation emulator -- [ChonkyStation 3](https://github.com/liuk7071/ChonkyStation3): Experimental HLE PS3 emulator for Windows, MacOS and Linux - [MelonDS](https://github.com/melonDS-emu/melonDS): "DS emulator, sorta" - Arisotura - [Kaizen](https://github.com/SimoneN64/Kaizen): Experimental work-in-progress low-level N64 emulator -- [shadPS4](https://github.com/shadps4-emu/shadPS4): Work-in-progress PS4 emulator by the founder of PCSX, PCSX2 and more -- [Tanuki3DS](https://github.com/burhanr13/Tanuki3DS/): A new 3DS emulator for MacOS and Linux +- [ChonkyStation](https://github.com/liuk7071/ChonkyStation): Work-in-progress PlayStation emulator +- [shadPS4](https://github.com/georgemoralis/shadPS4): Work-in-progress PS4 emulator by the founder of PCSX, PCSX2 and more +- [Hydra](https://github.com/hydra-emu/hydra): Cross-platform GameBoy, NES, N64 and Chip-8 emulator + # Support -If you find this project exciting and want to support the founder, check out [his Patreon](https://www.patreon.com/wheremyfoodat) or [Ko-fi](https://ko-fi.com/wheremyfoodat) +If you find this project exciting and want to support the founder, check out [his Patreon page](https://www.patreon.com/wheremyfoodat)
-Keep in mind that funding is only aimed to cover various life costs and support development. Panda3DS is a free product and on no occasion will official builds ever be made private or limited to sponsors! Any donation is much appreciated! +Keep in mind, funding is only aimed to cover various life costs and support development. Panda3DS is a free product and on no occasion will official builds ever be made private or limited to sponsors! Any donation is much appreciated! Nintendo 3DS is a registered trademark of Nintendo Co., Ltd. diff --git a/src/config.cpp b/src/config.cpp index f2cddaba..b262a8a5 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -1,12 +1,8 @@ #include "config.hpp" -#include -#include #include #include -#include #include -#include #include "helpers.hpp" #include "toml.hpp" @@ -15,19 +11,16 @@ // We are legally allowed, as per the author's wish, to use the above code without any licensing restrictions // However we still want to follow the license as closely as possible and offer the proper attributions. -EmulatorConfig::EmulatorConfig(const std::filesystem::path& path) : filePath(path) { load(); } - -void EmulatorConfig::load() { - const std::filesystem::path& path = filePath; +EmulatorConfig::EmulatorConfig(const std::filesystem::path& path) { load(path); } +void EmulatorConfig::load(const std::filesystem::path& path) { // If the configuration file does not exist, create it and return std::error_code error; if (!std::filesystem::exists(path, error)) { - save(); + save(path); return; } - printf("Loading existing configuration file %s\n", path.string().c_str()); toml::value data; try { @@ -43,27 +36,6 @@ void EmulatorConfig::load() { auto general = generalResult.unwrap(); discordRpcEnabled = toml::find_or(general, "EnableDiscordRPC", false); - usePortableBuild = toml::find_or(general, "UsePortableBuild", false); - defaultRomPath = toml::find_or(general, "DefaultRomPath", ""); - - printAppVersion = toml::find_or(general, "PrintAppVersion", true); - circlePadProEnabled = toml::find_or(general, "EnableCirclePadPro", true); - systemLanguage = languageCodeFromString(toml::find_or(general, "SystemLanguage", "en")); - } - } - - if (data.contains("Window")) { - auto windowResult = toml::expect(data.at("Window")); - if (windowResult.is_ok()) { - auto window = windowResult.unwrap(); - - windowSettings.showAppVersion = toml::find_or(window, "AppVersionOnWindow", false); - windowSettings.rememberPosition = toml::find_or(window, "RememberWindowPosition", false); - - windowSettings.x = toml::find_or(window, "WindowPosX", WindowSettings::defaultX); - windowSettings.y = toml::find_or(window, "WindowPosY", WindowSettings::defaultY); - windowSettings.width = toml::find_or(window, "WindowWidth", WindowSettings::defaultWidth); - windowSettings.height = toml::find_or(window, "WindowHeight", WindowSettings::defaultHeight); } } @@ -73,50 +45,17 @@ void EmulatorConfig::load() { auto gpu = gpuResult.unwrap(); // Get renderer - auto rendererName = toml::find_or(gpu, "Renderer", Renderer::typeToString(rendererDefault)); + auto rendererName = toml::find_or(gpu, "Renderer", "OpenGL"); auto configRendererType = Renderer::typeFromString(rendererName); if (configRendererType.has_value()) { rendererType = configRendererType.value(); } else { Helpers::warn("Invalid renderer specified: %s\n", rendererName.c_str()); - rendererType = rendererDefault; + rendererType = RendererType::OpenGL; } - shaderJitEnabled = toml::find_or(gpu, "EnableShaderJIT", shaderJitDefault); - vsyncEnabled = toml::find_or(gpu, "EnableVSync", true); - useUbershaders = toml::find_or(gpu, "UseUbershaders", ubershaderDefault); - accurateShaderMul = toml::find_or(gpu, "AccurateShaderMultiplication", false); - accelerateShaders = toml::find_or(gpu, "AccelerateShaders", accelerateShadersDefault); - - forceShadergenForLights = toml::find_or(gpu, "ForceShadergenForLighting", true); - lightShadergenThreshold = toml::find_or(gpu, "ShadergenLightThreshold", 1); - hashTextures = toml::find_or(gpu, "HashTextures", hashTexturesDefault); - enableRenderdoc = toml::find_or(gpu, "EnableRenderdoc", false); - - auto screenLayoutName = toml::find_or(gpu, "ScreenLayout", "Default"); - screenLayout = ScreenLayout::layoutFromString(screenLayoutName); - topScreenSize = float(std::clamp(toml::find_or(gpu, "TopScreenSize", 0.5), 0.0, 1.0)); - } - } - - if (data.contains("Audio")) { - auto audioResult = toml::expect(data.at("Audio")); - if (audioResult.is_ok()) { - auto audio = audioResult.unwrap(); - - auto dspCoreName = toml::find_or(audio, "DSPEmulation", "HLE"); - dspType = Audio::DSPCore::typeFromString(dspCoreName); - - audioEnabled = toml::find_or(audio, "EnableAudio", audioEnabledDefault); - aacEnabled = toml::find_or(audio, "EnableAACAudio", true); - printDSPFirmware = toml::find_or(audio, "PrintDSPFirmware", false); - - audioDeviceConfig.muteAudio = toml::find_or(audio, "MuteAudio", false); - // Our volume ranges from 0.0 (muted) to 2.0 (boosted, using a logarithmic scale). 1.0 is the "default" volume, ie we don't adjust the PCM - // samples at all. - audioDeviceConfig.volumeRaw = float(std::clamp(toml::find_or(audio, "AudioVolume", 1.0), 0.0, 2.0)); - audioDeviceConfig.volumeCurve = AudioDeviceConfig::volumeCurveFromString(toml::find_or(audio, "VolumeCurve", "cubic")); + shaderJitEnabled = toml::find_or(gpu, "EnableShaderJIT", true); } } @@ -142,27 +81,15 @@ void EmulatorConfig::load() { sdWriteProtected = toml::find_or(sd, "WriteProtectVirtualSD", false); } } - - if (data.contains("UI")) { - auto uiResult = toml::expect(data.at("UI")); - if (uiResult.is_ok()) { - auto ui = uiResult.unwrap(); - - frontendSettings.theme = FrontendSettings::themeFromString(toml::find_or(ui, "Theme", "dark")); - frontendSettings.icon = FrontendSettings::iconFromString(toml::find_or(ui, "WindowIcon", "rpog")); - frontendSettings.language = toml::find_or(ui, "Language", "en"); - } - } } -void EmulatorConfig::save() { - toml::basic_value data; - const std::filesystem::path& path = filePath; +void EmulatorConfig::save(const std::filesystem::path& path) { + toml::basic_value data; std::error_code error; if (std::filesystem::exists(path, error)) { try { - data = toml::parse(path); + data = toml::parse(path); } catch (const std::exception& ex) { Helpers::warn("Exception trying to parse config file. Exception: %s\n", ex.what()); return; @@ -175,39 +102,8 @@ void EmulatorConfig::save() { } data["General"]["EnableDiscordRPC"] = discordRpcEnabled; - data["General"]["UsePortableBuild"] = usePortableBuild; - data["General"]["DefaultRomPath"] = defaultRomPath.string(); - data["General"]["PrintAppVersion"] = printAppVersion; - data["General"]["SystemLanguage"] = languageCodeToString(systemLanguage); - data["General"]["EnableCirclePadPro"] = circlePadProEnabled; - - data["Window"]["AppVersionOnWindow"] = windowSettings.showAppVersion; - data["Window"]["RememberWindowPosition"] = windowSettings.rememberPosition; - data["Window"]["WindowPosX"] = windowSettings.x; - data["Window"]["WindowPosY"] = windowSettings.y; - data["Window"]["WindowWidth"] = windowSettings.width; - data["Window"]["WindowHeight"] = windowSettings.height; - data["GPU"]["EnableShaderJIT"] = shaderJitEnabled; data["GPU"]["Renderer"] = std::string(Renderer::typeToString(rendererType)); - data["GPU"]["EnableVSync"] = vsyncEnabled; - data["GPU"]["AccurateShaderMultiplication"] = accurateShaderMul; - data["GPU"]["UseUbershaders"] = useUbershaders; - data["GPU"]["ForceShadergenForLighting"] = forceShadergenForLights; - data["GPU"]["ShadergenLightThreshold"] = lightShadergenThreshold; - data["GPU"]["AccelerateShaders"] = accelerateShaders; - data["GPU"]["EnableRenderdoc"] = enableRenderdoc; - data["GPU"]["HashTextures"] = hashTextures; - data["GPU"]["ScreenLayout"] = std::string(ScreenLayout::layoutToString(screenLayout)); - data["GPU"]["TopScreenSize"] = double(topScreenSize); - - data["Audio"]["DSPEmulation"] = std::string(Audio::DSPCore::typeToString(dspType)); - data["Audio"]["EnableAudio"] = audioEnabled; - data["Audio"]["EnableAACAudio"] = aacEnabled; - data["Audio"]["MuteAudio"] = audioDeviceConfig.muteAudio; - data["Audio"]["AudioVolume"] = double(audioDeviceConfig.volumeRaw); - data["Audio"]["VolumeCurve"] = std::string(AudioDeviceConfig::volumeCurveToString(audioDeviceConfig.volumeCurve)); - data["Audio"]["PrintDSPFirmware"] = printDSPFirmware; data["Battery"]["ChargerPlugged"] = chargerPlugged; data["Battery"]["BatteryPercentage"] = batteryPercentage; @@ -215,64 +111,7 @@ void EmulatorConfig::save() { data["SD"]["UseVirtualSD"] = sdCardInserted; data["SD"]["WriteProtectVirtualSD"] = sdWriteProtected; - data["UI"]["Theme"] = std::string(FrontendSettings::themeToString(frontendSettings.theme)); - data["UI"]["WindowIcon"] = std::string(FrontendSettings::iconToString(frontendSettings.icon)); - data["UI"]["Language"] = frontendSettings.language; - std::ofstream file(path, std::ios::out); file << data; file.close(); } - -AudioDeviceConfig::VolumeCurve AudioDeviceConfig::volumeCurveFromString(std::string inString) { - // Transform to lower-case to make the setting case-insensitive - std::transform(inString.begin(), inString.end(), inString.begin(), [](unsigned char c) { return std::tolower(c); }); - - if (inString == "cubic") { - return VolumeCurve::Cubic; - } else if (inString == "linear") { - return VolumeCurve::Linear; - } - - // Default to cubic curve - return VolumeCurve::Cubic; -} - -const char* AudioDeviceConfig::volumeCurveToString(AudioDeviceConfig::VolumeCurve curve) { - switch (curve) { - case VolumeCurve::Linear: return "linear"; - - case VolumeCurve::Cubic: - default: return "cubic"; - } -} - -LanguageCodes EmulatorConfig::languageCodeFromString(std::string inString) { // Transform to lower-case to make the setting case-insensitive - std::transform(inString.begin(), inString.end(), inString.begin(), [](unsigned char c) { return std::tolower(c); }); - - static const std::unordered_map map = { - {"ja", LanguageCodes::Japanese}, {"en", LanguageCodes::English}, {"fr", LanguageCodes::French}, {"de", LanguageCodes::German}, - {"it", LanguageCodes::Italian}, {"es", LanguageCodes::Spanish}, {"zh", LanguageCodes::Chinese}, {"ko", LanguageCodes::Korean}, - {"nl", LanguageCodes::Dutch}, {"pt", LanguageCodes::Portuguese}, {"ru", LanguageCodes::Russian}, {"tw", LanguageCodes::Taiwanese}, - }; - - if (auto search = map.find(inString); search != map.end()) { - return search->second; - } - - // Default to English if no language code in our map matches - return LanguageCodes::English; -} - -const char* EmulatorConfig::languageCodeToString(LanguageCodes code) { - static constexpr std::array codes = { - "ja", "en", "fr", "de", "it", "es", "zh", "ko", "nl", "pt", "ru", "tw", - }; - - // Invalid country code, return english - if (static_cast(code) > static_cast(LanguageCodes::Taiwanese)) { - return "en"; - } else { - return codes[static_cast(code)]; - } -} \ No newline at end of file diff --git a/src/core/CPU/cpu_dynarmic.cpp b/src/core/CPU/cpu_dynarmic.cpp index 85dc70d9..29ca49d1 100644 --- a/src/core/CPU/cpu_dynarmic.cpp +++ b/src/core/CPU/cpu_dynarmic.cpp @@ -1,58 +1,32 @@ #ifdef CPU_DYNARMIC #include "cpu_dynarmic.hpp" - #include "arm_defs.hpp" -#include "emulator.hpp" -CPU::CPU(Memory& mem, Kernel& kernel, Emulator& emu) : mem(mem), emu(emu), scheduler(emu.getScheduler()), env(mem, kernel, emu.getScheduler()) { - cp15 = std::make_shared(); +CPU::CPU(Memory& mem, Kernel& kernel) : mem(mem), env(mem, kernel) { + cp15 = std::make_shared(); - Dynarmic::A32::UserConfig config; - config.arch_version = Dynarmic::A32::ArchVersion::v6K; - config.callbacks = &env; - config.coprocessors[15] = cp15; - config.define_unpredictable_behaviour = true; - config.global_monitor = &exclusiveMonitor; - config.processor_id = 0; - - jit = std::make_unique(config); + Dynarmic::A32::UserConfig config; + config.arch_version = Dynarmic::A32::ArchVersion::v6K; + config.callbacks = &env; + config.coprocessors[15] = cp15; + config.define_unpredictable_behaviour = true; + config.global_monitor = &exclusiveMonitor; + config.processor_id = 0; + + jit = std::make_unique(config); } void CPU::reset() { - setCPSR(CPSR::UserMode); - setFPSCR(FPSCR::MainThreadDefault); + setCPSR(CPSR::UserMode); + setFPSCR(FPSCR::MainThreadDefault); + env.totalTicks = 0; - cp15->reset(); - cp15->setTLSBase(VirtualAddrs::TLSBase); // Set cp15 TLS pointer to the main thread's thread-local storage - jit->Reset(); - jit->ClearCache(); - jit->Regs().fill(0); - jit->ExtRegs().fill(0); + cp15->reset(); + cp15->setTLSBase(VirtualAddrs::TLSBase); // Set cp15 TLS pointer to the main thread's thread-local storage + jit->Reset(); + jit->ClearCache(); + jit->Regs().fill(0); + jit->ExtRegs().fill(0); } -void CPU::runFrame() { - emu.frameDone = false; - - while (!emu.frameDone) { - // Run CPU until the next scheduler event - env.ticksLeft = scheduler.nextTimestamp - scheduler.currentTimestamp; - - execute: - const auto exitReason = jit->Run(); - - // Handle any scheduler events that need handling. - emu.pollScheduler(); - - if (static_cast(exitReason) != 0) [[unlikely]] { - // Cache invalidation needs to exit the JIT so it returns a CacheInvalidation HaltReason. In our case, we just go back to executing - // The goto might be terrible but it does guarantee that this does not recursively call run and crash, instead getting optimized to a jump - if (Dynarmic::Has(exitReason, Dynarmic::HaltReason::CacheInvalidation)) { - goto execute; - } else { - Helpers::panic("Exit reason: %d\nPC: %08X", static_cast(exitReason), getReg(15)); - } - } - } -} - -#endif // CPU_DYNARMIC \ No newline at end of file +#endif // CPU_DYNARMIC \ No newline at end of file diff --git a/src/core/CPU/dynarmic_cycles.cpp b/src/core/CPU/dynarmic_cycles.cpp index 934dd559..e85abc71 100644 --- a/src/core/CPU/dynarmic_cycles.cpp +++ b/src/core/CPU/dynarmic_cycles.cpp @@ -6,114 +6,118 @@ #include #include - #include "cpu_dynarmic.hpp" #include "helpers.hpp" namespace { - template - struct StringLiteral { - constexpr StringLiteral(const char (&str)[N]) { std::copy_n(str, N, value); } + template + struct StringLiteral { + constexpr StringLiteral(const char(&str)[N]) { + std::copy_n(str, N, value); + } - static constexpr std::size_t strlen = N - 1; - static constexpr std::size_t size = N; + static constexpr std::size_t strlen = N - 1; + static constexpr std::size_t size = N; - char value[N]; - }; + char value[N]; + }; - template - constexpr u32 GetMatchingBitsFromStringLiteral() { - u32 result = 0; - for (size_t i = 0; i < haystack.strlen; i++) { - for (size_t a = 0; a < needle.strlen; a++) { - if (haystack.value[i] == needle.value[a]) { - result |= 1 << (haystack.strlen - 1 - i); - } - } - } - return result; - } + template + constexpr u32 GetMatchingBitsFromStringLiteral() { + u32 result = 0; + for (size_t i = 0; i < haystack.strlen; i++) { + for (size_t a = 0; a < needle.strlen; a++) { + if (haystack.value[i] == needle.value[a]) { + result |= 1 << (haystack.strlen - 1 - i); + } + } + } + return result; + } - template - constexpr u32 DepositBits(u32 val) { - u32 mask = mask_; - u32 res = 0; - for (u32 bb = 1; mask; bb += bb) { - u32 neg_mask = 0 - mask; - if (val & bb) res |= mask & neg_mask; - mask &= mask - 1; - } - return res; - } + template + constexpr u32 DepositBits(u32 val) { + u32 mask = mask_; + u32 res = 0; + for (u32 bb = 1; mask; bb += bb) { + u32 neg_mask = 0 - mask; + if (val & bb) + res |= mask & neg_mask; + mask &= mask - 1; + } + return res; + } - template - struct MatcherArg { - template - u32 Get() { - return DepositBits()>(instruction); - } + template + struct MatcherArg { + template + u32 Get() { + return DepositBits()>(instruction); + } - u32 instruction; - }; + u32 instruction; + }; - struct Matcher { - u32 mask; - u32 expect; - std::function fn; - }; + struct Matcher { + u32 mask; + u32 expect; + std::function fn; + }; - u64 DataProcessing_imm(auto i) { - if (i.template Get<"d">() == 15) { - return 7; - } - return 1; - } - u64 DataProcessing_reg(auto i) { - if (i.template Get<"d">() == 15) { - return 7; - } - return 1; - } - u64 DataProcessing_rsr(auto i) { - if (i.template Get<"d">() == 15) { - return 8; - } - return 2; - } - u64 LoadStoreSingle_imm(auto) { return 2; } - u64 LoadStoreSingle_reg(auto i) { - // TODO: Load PC - if (i.template Get<"u">() == 1 && i.template Get<"r">() == 0 && (i.template Get<"v">() == 0 || i.template Get<"v">() == 2)) { - return 2; - } - return 4; - } - u64 LoadStoreMultiple(auto i) { - // TODO: Load PC - return 1 + std::popcount(i.template Get<"x">()) / 2; - } + u64 DataProcessing_imm(auto i) { + if (i.template Get<"d">() == 15) { + return 7; + } + return 1; + } + u64 DataProcessing_reg(auto i) { + if (i.template Get<"d">() == 15) { + return 7; + } + return 1; + } + u64 DataProcessing_rsr(auto i) { + if (i.template Get<"d">() == 15) { + return 8; + } + return 2; + } + u64 LoadStoreSingle_imm(auto) { + return 2; + } + u64 LoadStoreSingle_reg(auto i) { + // TODO: Load PC + if (i.template Get<"u">() == 1 && i.template Get<"r">() == 0 && + (i.template Get<"v">() == 0 || i.template Get<"v">() == 2)) { + return 2; + } + return 4; + } + u64 LoadStoreMultiple(auto i) { + // TODO: Load PC + return 1 + std::popcount(i.template Get<"x">()) / 2; + } - u64 SupervisorCall(auto i) { - // Consume extra cycles for the GetSystemTick SVC since some games wait with it in a loop rather than - // Properly sleeping until a VBlank interrupt - if (i.template Get<"v">() == 0x28) { - return 152; - } + u64 SupervisorCall(auto i) { + // Consume extra cycles for the GetSystemTick SVC since some games wait with it in a loop rather than + // Properly sleeping until a VBlank interrupt + if (i.template Get<"v">() == 0x28) { + return 152; + } - return 8; - } + return 8; + } #define INST(NAME, BS, CYCLES) \ - Matcher{ \ - GetMatchingBitsFromStringLiteral(), GetMatchingBitsFromStringLiteral(), \ - std::function{[](u32 instruction) -> u64 { \ - [[maybe_unused]] MatcherArg i{instruction}; \ - return (CYCLES); \ - }} \ - }, + Matcher{GetMatchingBitsFromStringLiteral(), \ + GetMatchingBitsFromStringLiteral(), \ + std::function{[](u32 instruction) -> u64 { \ + [[maybe_unused]] MatcherArg i{instruction}; \ + return (CYCLES); \ + }}}, - const std::array arm_matchers{ - // clang-format off + const std::array arm_matchers{ + // clang-format off // Branch instructions INST("BLX (imm)", "1111101hvvvvvvvvvvvvvvvvvvvvvvvv", 5) // v5 @@ -385,11 +389,11 @@ namespace { INST("RFE", "1111100--0-1----0000101000000000", 9) // v6 INST("SRS", "1111100--1-0110100000101000-----", 1) // v6 - // clang-format on - }; + // clang-format on + }; - const std::array thumb_matchers{ - // clang-format off + const std::array thumb_matchers{ + // clang-format off // Shift (immediate) add, subtract, move and compare instructions INST("LSL (imm)", "00000vvvvvmmmddd", 1) @@ -483,21 +487,23 @@ namespace { INST("BL (imm)", "11110Svvvvvvvvvv11j1jvvvvvvvvvvv", 4) // v4T INST("BLX (imm)", "11110Svvvvvvvvvv11j0jvvvvvvvvvvv", 5) // v5T - // clang-format on - }; + // clang-format on + }; -} // namespace +} // namespace u64 MyEnvironment::getCyclesForInstruction(bool is_thumb, u32 instruction) { - if (is_thumb) { - return 1; - } + if (is_thumb) { + return 1; + } - const auto matches_instruction = [instruction](const auto& matcher) { return (instruction & matcher.mask) == matcher.expect; }; + const auto matches_instruction = [instruction](const auto& matcher) { + return (instruction & matcher.mask) == matcher.expect; + }; - auto iter = std::find_if(arm_matchers.begin(), arm_matchers.end(), matches_instruction); - if (iter != arm_matchers.end()) { - return iter->fn(instruction); - } - return 1; + auto iter = std::find_if(arm_matchers.begin(), arm_matchers.end(), matches_instruction); + if (iter != arm_matchers.end()) { + return iter->fn(instruction); + } + return 1; } diff --git a/src/core/PICA/draw_acceleration.cpp b/src/core/PICA/draw_acceleration.cpp deleted file mode 100644 index fe21fe1a..00000000 --- a/src/core/PICA/draw_acceleration.cpp +++ /dev/null @@ -1,141 +0,0 @@ -#include "PICA/draw_acceleration.hpp" - -#include -#include - -#include "PICA/gpu.hpp" -#include "PICA/pica_simd.hpp" -#include "PICA/regs.hpp" - -void GPU::getAcceleratedDrawInfo(PICA::DrawAcceleration& accel, bool indexed) { - accel.indexed = indexed; - accel.totalAttribCount = totalAttribCount; - accel.enabledAttributeMask = 0; - - const u32 vertexBase = ((regs[PICA::InternalRegs::VertexAttribLoc] >> 1) & 0xfffffff) * 16; - const u32 vertexCount = regs[PICA::InternalRegs::VertexCountReg]; // Total # of vertices to transfer - - if (indexed) { - u32 indexBufferConfig = regs[PICA::InternalRegs::IndexBufferConfig]; - u32 indexBufferPointer = vertexBase + (indexBufferConfig & 0xfffffff); - - u8* indexBuffer = getPointerPhys(indexBufferPointer); - u16 minimumIndex = std::numeric_limits::max(); - u16 maximumIndex = 0; - - // Check whether the index buffer uses u16 indices or u8 - accel.useShortIndices = Helpers::getBit<31>(indexBufferConfig); // Indicates whether vert indices are 16-bit or 8-bit - - // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them - if (accel.useShortIndices) { - std::tie(accel.minimumIndex, accel.maximumIndex) = PICA::IndexBuffer::analyze(indexBuffer, vertexCount); - } else { - std::tie(accel.minimumIndex, accel.maximumIndex) = PICA::IndexBuffer::analyze(indexBuffer, vertexCount); - } - - accel.indexBuffer = indexBuffer; - } else { - accel.indexBuffer = nullptr; - accel.minimumIndex = regs[PICA::InternalRegs::VertexOffsetReg]; - accel.maximumIndex = accel.minimumIndex + vertexCount - 1; - } - - const u64 vertexCfg = u64(regs[PICA::InternalRegs::AttribFormatLow]) | (u64(regs[PICA::InternalRegs::AttribFormatHigh]) << 32); - const u64 inputAttrCfg = getVertexShaderInputConfig(); - - u32 attrCount = 0; - u32 loaderOffset = 0; - accel.vertexDataSize = 0; - accel.totalLoaderCount = 0; - - for (int i = 0; i < PICA::DrawAcceleration::maxLoaderCount; i++) { - auto& loaderData = attributeInfo[i]; // Get information for this attribute loader - - // This loader is empty, skip it - if (loaderData.componentCount == 0 || loaderData.size == 0) { - continue; - } - - auto& loader = accel.loaders[accel.totalLoaderCount++]; - - // The size of the loader in bytes is equal to the bytes supplied for 1 vertex, multiplied by the number of vertices we'll be uploading - // Which is equal to maximumIndex - minimumIndex + 1 - const u32 bytes = loaderData.size * (accel.maximumIndex - accel.minimumIndex + 1); - loader.size = bytes; - - // Add it to the total vertex data size, aligned to 4 bytes. - accel.vertexDataSize += (bytes + 3) & ~3; - - // Get a pointer to the data where this loader's data is stored - const u32 loaderAddress = vertexBase + loaderData.offset + (accel.minimumIndex * loaderData.size); - loader.data = getPointerPhys(loaderAddress); - - u64 attrCfg = loaderData.getConfigFull(); // Get config1 | (config2 << 32) - u32 attributeOffset = 0; - - for (int component = 0; component < loaderData.componentCount; component++) { - uint attributeIndex = (attrCfg >> (component * 4)) & 0xf; // Get index of attribute in vertexCfg - - // Vertex attributes used as padding - // 12, 13, 14 and 15 are equivalent to 4, 8, 12 and 16 bytes of padding respectively - if (attributeIndex >= 12) [[unlikely]] { - // Align attribute address up to a 4 byte boundary - attributeOffset = (attributeOffset + 3) & -4; - attributeOffset += (attributeIndex - 11) << 2; - continue; - } - - const u32 attribInfo = (vertexCfg >> (attributeIndex * 4)) & 0xf; - const u32 attribType = attribInfo & 0x3; // Type of attribute (sbyte/ubyte/short/float) - const u32 size = (attribInfo >> 2) + 1; // Total number of components - - // Size of each component based on the attribute type - [[maybe_unused]] static constexpr u32 sizePerComponent[4] = {1, 1, 2, 4}; - // To avoid a multiplication, instead of multiplying by the above values, we shift left instead - // So multiplication by 1 becomes a shift by 0, mul by 2 becomes a shift by 1, and mul by 4 becomes a shift by 2 - static constexpr u32 sizeShiftPerComponent[4] = {0, 0, 1, 2}; - - const u32 inputReg = (inputAttrCfg >> (attributeIndex * 4)) & 0xf; - // Mark the attribute as enabled - accel.enabledAttributeMask |= 1 << inputReg; - - auto& attr = accel.attributeInfo[inputReg]; - attr.componentCount = size; - attr.offset = attributeOffset + loaderOffset; - attr.stride = loaderData.size; - attr.type = attribType; - attributeOffset += size << sizeShiftPerComponent[attribType]; - } - - loaderOffset += loader.size; - } - - u32 fixedAttributes = fixedAttribMask; - accel.fixedAttributes = 0; - - // Fetch values for all fixed attributes using CLZ on the fixed attribute mask to find the attributes that are actually fixed - while (fixedAttributes != 0) { - // Get index of next fixed attribute and turn it off - const u32 index = std::countr_zero(fixedAttributes); - const u32 mask = 1u << index; - fixedAttributes ^= mask; - - // PICA register this fixed attribute is meant to go to - const u32 inputReg = (inputAttrCfg >> (index * 4)) & 0xf; - const u32 inputRegMask = 1u << inputReg; - - // If this input reg is already used for a non-fixed attribute then it will not be replaced by a fixed attribute - if ((accel.enabledAttributeMask & inputRegMask) == 0) { - vec4f& fixedAttr = shaderUnit.vs.fixedAttributes[index]; - auto& attr = accel.attributeInfo[inputReg]; - - accel.fixedAttributes |= inputRegMask; - - for (int i = 0; i < 4; i++) { - attr.fixedValue[i] = fixedAttr[i].toFloat32(); - } - } - } - - accel.canBeAccelerated = true; -} diff --git a/src/core/PICA/dynapica/shader_rec.cpp b/src/core/PICA/dynapica/shader_rec.cpp index e3c13c1e..20e171d7 100644 --- a/src/core/PICA/dynapica/shader_rec.cpp +++ b/src/core/PICA/dynapica/shader_rec.cpp @@ -16,7 +16,7 @@ void ShaderJIT::prepare(PICAShader& shaderUnit) { auto it = cache.find(hash); if (it == cache.end()) { // Block has not been compiled yet - auto emitter = std::make_unique(accurateMul); + auto emitter = std::make_unique(); emitter->compile(shaderUnit); // Get pointer to callbacks entrypointCallback = emitter->getInstructionCallback(shaderUnit.entrypoint); diff --git a/src/core/PICA/dynapica/shader_rec_emitter_arm64.cpp b/src/core/PICA/dynapica/shader_rec_emitter_arm64.cpp deleted file mode 100644 index 296ec932..00000000 --- a/src/core/PICA/dynapica/shader_rec_emitter_arm64.cpp +++ /dev/null @@ -1,1250 +0,0 @@ -#if defined(PANDA3DS_DYNAPICA_SUPPORTED) && defined(PANDA3DS_ARM64_HOST) -#include "PICA/dynapica/shader_rec_emitter_arm64.hpp" - -#include - -using namespace Helpers; -using namespace oaknut; -using namespace oaknut::util; - -// Similar to the x64 recompiler, we use an odd internal ABI, which abuses the fact that we'll very rarely be calling C++ functions -// So to avoid pushing and popping, we'll be making use of volatile registers as much as possible -static constexpr QReg src1Vec = Q1; -static constexpr QReg src2Vec = Q2; -static constexpr QReg src3Vec = Q3; -static constexpr QReg scratch1Vec = Q16; -static constexpr QReg scratch2Vec = Q17; -static constexpr QReg scratch3Vec = Q18; -static constexpr QReg onesVector = Q31; - -static constexpr XReg arg1 = X0; -static constexpr XReg arg2 = X1; -static constexpr XReg scratch1 = X9; -static constexpr XReg scratch2 = X10; -static constexpr XReg statePointer = X15; - -void ShaderEmitter::compile(const PICAShader& shaderUnit) { - oaknut::CodeBlock::unprotect(); // Unprotect the memory before writing to it - - // Constants - align(16); - // Generate blending masks for doing masked writes to registers - l(blendMasks); - for (int i = 0; i < 16; i++) { - dw((i & 0x8) ? 0xFFFFFFFF : 0); // Mask for x component - dw((i & 0x4) ? 0xFFFFFFFF : 0); // Mask for y component - dw((i & 0x2) ? 0xFFFFFFFF : 0); // Mask for z component - dw((i & 0x1) ? 0xFFFFFFFF : 0); // Mask for w component - } - - // Emit prologue first - oaknut::Label prologueLabel; - align(16); - - l(prologueLabel); - prologueCb = getLabelPointer(prologueLabel); - - // Set state pointer to the proper pointer - // state pointer is volatile, no need to preserve it - MOV(statePointer, arg1); - // Generate a vector of all 1.0s for SLT/SGE/RCP/RSQ - FMOV(onesVector.S4(), FImm8(0x70)); - - // Push a return guard on the stack. This happens due to the way we handle the PICA callstack, by pushing the return PC to stack - // By pushing -1, we make it impossible for a return check to erroneously pass - MOV(arg1, 0xffffffffffffffffll); - // Backup link register (X30) and push return guard - STP(arg1, X30, SP, PRE_INDEXED, -16); - - // Jump to code with a tail call - BR(arg2); - - // Scan the code for call, exp2, log2, etc instructions which need some special care - // After that, emit exp2 and log2 functions if the corresponding instructions are present - scanCode(shaderUnit); - if (codeHasExp2) { - exp2Func = emitExp2Func(); - } - if (codeHasLog2) { - log2Func = emitLog2Func(); - } - - align(16); - // Compile every instruction in the shader - // This sounds horrible but the PICA instruction memory is tiny, and most of the time it's padded wtih nops that compile to nothing - recompilerPC = 0; - loopLevel = 0; - compileUntil(shaderUnit, PICAShader::maxInstructionCount); - - // Protect the memory and invalidate icache before executing the code - oaknut::CodeBlock::protect(); - oaknut::CodeBlock::invalidate_all(); -} - -void ShaderEmitter::scanCode(const PICAShader& shaderUnit) { - returnPCs.clear(); - - for (u32 i = 0; i < PICAShader::maxInstructionCount; i++) { - const u32 instruction = shaderUnit.loadedShader[i]; - const u32 opcode = instruction >> 26; - - if (isCall(instruction)) { - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - const u32 returnPC = num + dest; // Add them to get the return PC - - returnPCs.push_back(returnPC); - } else if (opcode == ShaderOpcodes::EX2) { - codeHasExp2 = true; - } else if (opcode == ShaderOpcodes::LG2) { - codeHasLog2 = true; - } - } - - // Sort return PCs so they can be binary searched - std::sort(returnPCs.begin(), returnPCs.end()); -} - -void ShaderEmitter::compileUntil(const PICAShader& shaderUnit, u32 end) { - while (recompilerPC < end) { - compileInstruction(shaderUnit); - } -} - -void ShaderEmitter::compileInstruction(const PICAShader& shaderUnit) { - // Write current location to label for this instruction - l(instructionLabels[recompilerPC]); - - // See if PC is a possible return PC and emit the proper code if so - if (std::binary_search(returnPCs.begin(), returnPCs.end(), recompilerPC)) { - Label skipReturn; - - LDP(X0, XZR, SP); // W0 = Next return address - MOV(W1, recompilerPC); // W1 = Current PC - CMP(W0, W1); // If they're equal, execute a RET, otherwise skip it - B(NE, skipReturn); - RET(); - - l(skipReturn); - } - - // Fetch instruction and inc PC - const u32 instruction = shaderUnit.loadedShader[recompilerPC++]; - const u32 opcode = instruction >> 26; - - switch (opcode) { - case ShaderOpcodes::ADD: recADD(shaderUnit, instruction); break; - case ShaderOpcodes::CALL: recCALL(shaderUnit, instruction); break; - case ShaderOpcodes::CALLC: recCALLC(shaderUnit, instruction); break; - case ShaderOpcodes::CALLU: recCALLU(shaderUnit, instruction); break; - case ShaderOpcodes::CMP1: - case ShaderOpcodes::CMP2: recCMP(shaderUnit, instruction); break; - case ShaderOpcodes::DP3: recDP3(shaderUnit, instruction); break; - case ShaderOpcodes::DP4: recDP4(shaderUnit, instruction); break; - case ShaderOpcodes::DPH: - case ShaderOpcodes::DPHI: recDPH(shaderUnit, instruction); break; - case ShaderOpcodes::END: recEND(shaderUnit, instruction); break; - case ShaderOpcodes::EX2: recEX2(shaderUnit, instruction); break; - case ShaderOpcodes::FLR: recFLR(shaderUnit, instruction); break; - case ShaderOpcodes::IFC: recIFC(shaderUnit, instruction); break; - case ShaderOpcodes::IFU: recIFU(shaderUnit, instruction); break; - case ShaderOpcodes::JMPC: recJMPC(shaderUnit, instruction); break; - case ShaderOpcodes::JMPU: recJMPU(shaderUnit, instruction); break; - case ShaderOpcodes::LG2: recLG2(shaderUnit, instruction); break; - case ShaderOpcodes::LOOP: recLOOP(shaderUnit, instruction); break; - case ShaderOpcodes::MOV: recMOV(shaderUnit, instruction); break; - case ShaderOpcodes::MOVA: recMOVA(shaderUnit, instruction); break; - case ShaderOpcodes::MAX: recMAX(shaderUnit, instruction); break; - case ShaderOpcodes::MIN: recMIN(shaderUnit, instruction); break; - case ShaderOpcodes::MUL: recMUL(shaderUnit, instruction); break; - case ShaderOpcodes::NOP: break; - case ShaderOpcodes::RCP: recRCP(shaderUnit, instruction); break; - case ShaderOpcodes::RSQ: recRSQ(shaderUnit, instruction); break; - - // Unimplemented opcodes that don't seem to actually be used but exist in the binary - // EMIT/SETEMIT are used in geometry shaders, however are sometimes found in vertex shaders? - case ShaderOpcodes::EMIT: - case ShaderOpcodes::SETEMIT: log("[ShaderJIT] Unimplemented PICA opcode: %02X\n", opcode); break; - - case ShaderOpcodes::BREAK: - case ShaderOpcodes::BREAKC: Helpers::warn("[Shader JIT] Unimplemented BREAK(C) instruction!"); break; - - // We consider both MAD and MADI to be the same instruction and decode which one we actually have in recMAD - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3A: - case 0x3B: - case 0x3C: - case 0x3D: - case 0x3E: - case 0x3F: recMAD(shaderUnit, instruction); break; - - case ShaderOpcodes::SLT: - case ShaderOpcodes::SLTI: recSLT(shaderUnit, instruction); break; - - case ShaderOpcodes::SGE: - case ShaderOpcodes::SGEI: recSGE(shaderUnit, instruction); break; - - default: Helpers::panic("Shader JIT: Unimplemented PICA opcode %X", opcode); - } -} - -const ShaderEmitter::vec4f& ShaderEmitter::getSourceRef(const PICAShader& shader, u32 src) { - if (src < 0x10) - return shader.inputs[src]; - else if (src < 0x20) - return shader.tempRegisters[src - 0x10]; - else if (src <= 0x7f) - return shader.floatUniforms[src - 0x20]; - else { - Helpers::warn("[Shader JIT] Unimplemented source value: %X\n", src); - return shader.dummy; - } -} - -const ShaderEmitter::vec4f& ShaderEmitter::getDestRef(const PICAShader& shader, u32 dest) { - if (dest < 0x10) { - return shader.outputs[dest]; - } else if (dest < 0x20) { - return shader.tempRegisters[dest - 0x10]; - } - Helpers::panic("[Shader JIT] Unimplemented dest: %X", dest); -} - -// See shader.hpp header for docs on how the swizzle and negate works -template -void ShaderEmitter::loadRegister(QReg dest, const PICAShader& shader, u32 src, u32 index, u32 operandDescriptor) { - u32 compSwizzle; // Component swizzle pattern for the register - bool negate; // If true, negate all lanes of the register - - if constexpr (sourceIndex == 1) { // src1Vec - negate = (getBit<4>(operandDescriptor)) != 0; - compSwizzle = getBits<5, 8>(operandDescriptor); - } else if constexpr (sourceIndex == 2) { // SRC2 - negate = (getBit<13>(operandDescriptor)) != 0; - compSwizzle = getBits<14, 8>(operandDescriptor); - } else if constexpr (sourceIndex == 3) { // SRC3 - negate = (getBit<22>(operandDescriptor)) != 0; - compSwizzle = getBits<23, 8>(operandDescriptor); - } - - // TODO: Do indexes get applied if src < 0x20? - - switch (index) { - case 0: - [[likely]] { // Keep src as is, no need to offset it - const vec4f& srcRef = getSourceRef(shader, src); - const uintptr_t offset = uintptr_t(&srcRef) - uintptr_t(&shader); // Calculate offset of register from start of the state struct - - LDR(dest, statePointer, offset); - switch (compSwizzle) { - case noSwizzle: break; // .xyzw - case 0x0: DUP(dest.S4(), dest.Selem()[0]); break; // .xxxx - case 0x55: DUP(dest.S4(), dest.Selem()[1]); break; // .yyyy - case 0xAA: DUP(dest.S4(), dest.Selem()[2]); break; // .zzzz - case 0xFF: - DUP(dest.S4(), dest.Selem()[3]); - break; // .wwww - - // Some of these cases may still be optimizable - default: { - MOV(scratch1Vec.B16(), dest.B16()); // Make a copy of the register - - const auto newX = getBits<6, 2>(compSwizzle); - const auto newY = getBits<4, 2>(compSwizzle); - const auto newZ = getBits<2, 2>(compSwizzle); - const auto newW = getBits<0, 2>(compSwizzle); - - // If the lane swizzled into the new x component is NOT the current x component, swizzle the correct lane with a mov - // Repeat for each component of the vector - if (newX != 0) { - MOV(dest.Selem()[0], scratch1Vec.Selem()[newX]); - } - - if (newY != 1) { - MOV(dest.Selem()[1], scratch1Vec.Selem()[newY]); - } - - if (newZ != 2) { - MOV(dest.Selem()[2], scratch1Vec.Selem()[newZ]); - } - - if (newW != 3) { - MOV(dest.Selem()[3], scratch1Vec.Selem()[newW]); - } - - break; - } - } - - // Negate the register if necessary - if (negate) { - FNEG(dest.S4(), dest.S4()); - } - return; // Return. Rest of the function handles indexing which is not used if index == 0 - } - - case 1: { - const uintptr_t addrXOffset = uintptr_t(&shader.addrRegister[0]) - uintptr_t(&shader); - LDRSW(X0, statePointer, addrXOffset); // X0 = address register X - break; - } - - case 2: { - const uintptr_t addrYOffset = uintptr_t(&shader.addrRegister[1]) - uintptr_t(&shader); - LDRSW(X0, statePointer, addrYOffset); // X0 = address register Y - break; - } - - case 3: { - const uintptr_t loopCounterOffset = uintptr_t(&shader.loopCounter) - uintptr_t(&shader); - LDR(W0, statePointer, loopCounterOffset); // X0 = loop counter - break; - } - - default: Helpers::panic("[ShaderJIT]: Unimplemented source index type %d", index); - } - - // Swizzle and load register into dest, from [state pointer + X1 + offset] and apply the relevant swizzle. Thrashes X2 - auto swizzleAndLoadReg = [this, &dest, &compSwizzle](size_t offset) { - MOV(X2, offset); - ADD(X1, X1, X2); - LDR(dest, statePointer, X1); - - switch (compSwizzle) { - case noSwizzle: break; // .xyzw - case 0x0: DUP(dest.S4(), dest.Selem()[0]); break; // .xxxx - case 0x55: DUP(dest.S4(), dest.Selem()[1]); break; // .yyyy - case 0xAA: DUP(dest.S4(), dest.Selem()[2]); break; // .zzzz - case 0xFF: - DUP(dest.S4(), dest.Selem()[3]); - break; // .wwww - - // Some of these cases may still be optimizable - default: { - MOV(scratch1Vec.B16(), dest.B16()); // Make a copy of the register - - const auto newX = getBits<6, 2>(compSwizzle); - const auto newY = getBits<4, 2>(compSwizzle); - const auto newZ = getBits<2, 2>(compSwizzle); - const auto newW = getBits<0, 2>(compSwizzle); - - // If the lane swizzled into the new x component is NOT the current x component, swizzle the correct lane with a mov - // Repeat for each component of the vector - if (newX != 0) { - MOV(dest.Selem()[0], scratch1Vec.Selem()[newX]); - } - - if (newY != 1) { - MOV(dest.Selem()[1], scratch1Vec.Selem()[newY]); - } - - if (newZ != 2) { - MOV(dest.Selem()[2], scratch1Vec.Selem()[newZ]); - } - - if (newW != 3) { - MOV(dest.Selem()[3], scratch1Vec.Selem()[newW]); - } - - break; - } - } - }; - - // Here we handle what happens when using indexed addressing & we can't predict what register will be read at compile time - // The index of the access is assumed to be in X0 - // Add source register (src) and index (X0) to form the final register - ADD(X0, X0, src); - - Label maybeTemp, maybeUniform, unknownReg, end; - const uintptr_t inputOffset = uintptr_t(&shader.inputs[0]) - uintptr_t(&shader); - const uintptr_t tempOffset = uintptr_t(&shader.tempRegisters[0]) - uintptr_t(&shader); - const uintptr_t uniformOffset = uintptr_t(&shader.floatUniforms[0]) - uintptr_t(&shader); - - // If reg < 0x10, return inputRegisters[reg] - CMP(X0, 0x10); - B(HS, maybeTemp); - LSL(X1, X0, 4); - swizzleAndLoadReg(inputOffset); - B(end); - - // If (reg < 0x1F) return tempRegisters[reg - 0x10] - l(maybeTemp); - CMP(X0, 0x20); - B(HS, maybeUniform); - SUB(X1, X0, 0x10); - LSL(X1, X1, 4); - swizzleAndLoadReg(tempOffset); - B(end); - - // If (reg < 0x80) return floatUniforms[reg - 0x20] - l(maybeUniform); - CMP(X0, 0x80); - B(HS, unknownReg); - SUB(X1, X0, 0x20); - LSL(X1, X1, 4); - swizzleAndLoadReg(uniformOffset); - B(end); - - l(unknownReg); - MOVI(dest.S4(), 0); // Set dest to 0 if we're reading from a garbage register - - l(end); - // Negate the register if necessary - if (negate) { - FNEG(dest.S4(), dest.S4()); - } -} - -void ShaderEmitter::storeRegister(QReg source, const PICAShader& shader, u32 dest, u32 operandDescriptor) { - const vec4f& destRef = getDestRef(shader, dest); - const uintptr_t offset = uintptr_t(&destRef) - uintptr_t(&shader); // Calculate offset of register from start of the state struct - - // Mask of which lanes to write - u32 writeMask = operandDescriptor & 0xf; - if (writeMask == 0xf) { // No lanes are masked, just use STR - STR(source, statePointer, offset); - } else { - u8* blendMaskPointer = getLabelPointer(blendMasks); - LDR(scratch1Vec, statePointer, offset); // Load current value - LDR(scratch2Vec, blendMaskPointer + writeMask * 16); // Load write mask for blending - - BSL(scratch2Vec.B16(), source.B16(), scratch1Vec.B16()); // Scratch2 = (Source & mask) | (original & ~mask) - STR(scratch2Vec, statePointer, offset); // Write it back - } -} - -void ShaderEmitter::recMOV(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src, idx, operandDescriptor); // Load source 1 into scratch1Vec - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recFLR(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src, idx, operandDescriptor); // Load source 1 into scratch1Vec - FRINTM(src1Vec.S4(), src1Vec.S4()); // Floor it and store into dest - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recMOVA(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - - const bool writeX = getBit<3>(operandDescriptor); // Should we write the x component of the address register? - const bool writeY = getBit<2>(operandDescriptor); - - static_assert(sizeof(shader.addrRegister) == 2 * sizeof(s32)); // Assert that the address register is 2 s32s - const uintptr_t addrRegisterOffset = uintptr_t(&shader.addrRegister[0]) - uintptr_t(&shader); - const uintptr_t addrRegisterYOffset = addrRegisterOffset + sizeof(shader.addrRegister[0]); - - // If no register is being written to then it is a nop. Probably not common but whatever - if (!writeX && !writeY) return; - - loadRegister<1>(src1Vec, shader, src, idx, operandDescriptor); - FCVTZS(src1Vec.S4(), src1Vec.S4()); // Convert src1 from floats to s32s with truncation - - // Write both together - if (writeX && writeY) { - STR(src1Vec.toD(), statePointer, addrRegisterOffset); - } else if (writeX) { - STR(src1Vec.toS(), statePointer, addrRegisterOffset); - } else if (writeY) { - MOV(W0, src1Vec.Selem()[1]); // W0 = Y component - STR(W0, statePointer, addrRegisterYOffset); - } -} - -void ShaderEmitter::recDP3(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - const u32 writeMask = getBits<0, 4>(operandDescriptor); - - loadRegister<1>(src1Vec, shader, src1, idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, 0, operandDescriptor); - // Set W component of src1 to 0.0, so that the w factor of the following dp4 will become 0, making it equivalent to a dp3 - INS(src1Vec.Selem()[3], WZR); - - // Now do a full DP4 - // Do a piecewise multiplication of the vectors first - if (useSafeMUL) { - emitSafeMUL(src1Vec, src2Vec, scratch1Vec); - } else { - FMUL(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - } - FADDP(src1Vec.S4(), src1Vec.S4(), src1Vec.S4()); // Now add the adjacent components together - FADDP(src1Vec.toS(), src1Vec.toD().S2()); // Again for the bottom 2 lanes. Now the bottom lane contains the dot product - - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - DUP(src1Vec.S4(), src1Vec.Selem()[0]); // src1Vec = src1Vec.xxxx - } - - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recDP4(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - const u32 writeMask = getBits<0, 4>(operandDescriptor); - - loadRegister<1>(src1Vec, shader, src1, idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, 0, operandDescriptor); - - // Do a piecewise multiplication of the vectors first - if (useSafeMUL) { - emitSafeMUL(src1Vec, src2Vec, scratch1Vec); - } else { - FMUL(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - } - FADDP(src1Vec.S4(), src1Vec.S4(), src1Vec.S4()); // Now add the adjacent components together - FADDP(src1Vec.toS(), src1Vec.toD().S2()); // Again for the bottom 2 lanes. Now the bottom lane contains the dot product - - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - DUP(src1Vec.S4(), src1Vec.Selem()[0]); // src1Vec = src1Vec.xxxx - } - - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recDPH(const PICAShader& shader, u32 instruction) { - const bool isDPHI = (instruction >> 26) == ShaderOpcodes::DPHI; - - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = isDPHI ? getBits<14, 5>(instruction) : getBits<12, 7>(instruction); - const u32 src2 = isDPHI ? getBits<7, 7>(instruction) : getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - const u32 writeMask = getBits<0, 4>(operandDescriptor); - - // TODO: Safe multiplication equivalent (Multiplication is not IEEE compliant on the PICA) - loadRegister<1>(src1Vec, shader, src1, isDPHI ? 0 : idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, isDPHI ? idx : 0, operandDescriptor); - // // Attach 1.0 to the w component of src1 - MOV(src1Vec.Selem()[3], onesVector.Selem()[0]); - - // Now perform a DP4 - // Do a piecewise multiplication of the vectors first - if (useSafeMUL) { - emitSafeMUL(src1Vec, src2Vec, scratch1Vec); - } else { - FMUL(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - } - FADDP(src1Vec.S4(), src1Vec.S4(), src1Vec.S4()); // Now add the adjacent components together - FADDP(src1Vec.toS(), src1Vec.toD().S2()); // Again for the bottom 2 lanes. Now the bottom lane contains the dot product - - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - DUP(src1Vec.S4(), src1Vec.Selem()[0]); // src1Vec = src1Vec.xxxx - } - - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -oaknut::Label ShaderEmitter::emitLog2Func() { - oaknut::Label funcStart; - - // We perform this approximation by first performing a range reduction into the range - // [1.0, 2.0). A minimax polynomial which was fit for the function log2(x) / (x - 1) is then - // evaluated. We multiply the result by (x - 1) then restore the result into the appropriate - // range. Coefficients for the minimax polynomial. - // f(x) computes approximately log2(x) / (x - 1). - // f(x) = c4 + x * (c3 + x * (c2 + x * (c1 + x * c0)). - oaknut::Label c0; - l(c0); - dw(0x3d74552f); - - oaknut::Label c14; - l(c14); - dw(0xbeee7397); - dw(0x3fbd96dd); - dw(0xc02153f6); - dw(0x4038d96c); - - oaknut::Label negativeInfinityVec; - l(negativeInfinityVec); - dw(0xff800000); - dw(0xff800000); - dw(0xff800000); - dw(0xff800000); - - oaknut::Label defaultQnanVec; - l(defaultQnanVec); - dw(0x7fc00000); - dw(0x7fc00000); - dw(0x7fc00000); - dw(0x7fc00000); - - oaknut::Label exit; - oaknut::Label inputIsZero; - oaknut::Label inputOutOfRange; - - l(inputOutOfRange); - B(Cond::EQ, inputIsZero); - ADR(scratch1, defaultQnanVec); - LDR(src1Vec, scratch1); - RET(); - - l(inputIsZero); - ADR(scratch1, negativeInfinityVec); - LDR(src1Vec, scratch1); - RET(); - - l(funcStart); - - // Here we handle edge cases: input in {NaN, 0, -Inf, Negative} - // Ordinal(n) ? 0xFFFFFFFF : 0x0 - FCMEQ(scratch1Vec.toS(), src1Vec.toS(), src1Vec.toS()); - MOV(scratch1.toW(), scratch1Vec.Selem()[0]); - - // src1Vec == NaN - CMP(scratch1.toW(), 0); - B(Cond::EQ, exit); - - // (0.0 >= n) ? 0xFFFFFFFF : 0x0 - MOV(scratch1.toW(), src1Vec.Selem()[0]); - - // src1Vec <= 0.0 - CMP(scratch1.toW(), 0); - B(Cond::LE, inputOutOfRange); - - // Split input: - // src1Vec = MANT[1,2) - // scratch2Vec = Exponent - MOV(scratch1.toW(), src1Vec.Selem()[0]); - MOV(scratch2.toW(), scratch1.toW()); - AND(scratch2.toW(), scratch2.toW(), 0x007fffff); - ORR(scratch2.toW(), scratch2.toW(), 0x3f800000); - MOV(src1Vec.Selem()[0], scratch2.toW()); - // src1Vec now contains the mantissa of the input - UBFX(scratch1.toW(), scratch1.toW(), 23, 8); - SUB(scratch1.toW(), scratch1.toW(), 0x7F); - MOV(scratch2Vec.Selem()[0], scratch1.toW()); - UCVTF(scratch2Vec.toS(), scratch2Vec.toS()); - // scratch2Vec now contains the exponent of the input - - ADR(scratch1, c0); - LDR(scratch1.toW(), scratch1); - MOV(scratch1Vec.Selem()[0], scratch1.toW()); - - // Complete computation of polynomial - // Load C1, C2, C3, C4 into a single scratch register - const QReg C14 = src2Vec; - ADR(scratch1, c14); - LDR(C14, scratch1); - FMUL(scratch1Vec.toS(), scratch1Vec.toS(), src1Vec.toS()); - FMLA(scratch1Vec.toS(), onesVector.toS(), C14.Selem()[0]); - FMUL(scratch1Vec.toS(), scratch1Vec.toS(), src1Vec.toS()); - FMLA(scratch1Vec.toS(), onesVector.toS(), C14.Selem()[1]); - FMUL(scratch1Vec.toS(), scratch1Vec.toS(), src1Vec.toS()); - FMLA(scratch1Vec.toS(), onesVector.toS(), C14.Selem()[2]); - FMUL(scratch1Vec.toS(), scratch1Vec.toS(), src1Vec.toS()); - - FSUB(src1Vec.toS(), src1Vec.toS(), onesVector.toS()); - FMLA(scratch1Vec.toS(), onesVector.toS(), C14.Selem()[3]); - - FMUL(scratch1Vec.toS(), scratch1Vec.toS(), src1Vec.toS()); - FADD(scratch2Vec.toS(), scratch1Vec.toS(), scratch2Vec.toS()); - - // Duplicate result across vector - MOV(src1Vec.Selem()[0], scratch2Vec.Selem()[0]); - l(exit); - DUP(src1Vec.S4(), src1Vec.Selem()[0]); - - RET(); - - return funcStart; -} - -oaknut::Label ShaderEmitter::emitExp2Func() { - oaknut::Label funcStart; - - // This performs a range reduction into the range [-0.5, 0.5) - // A minmax polynomial which was fit for the function exp2(x) is then evaluated - // Then restore the result into the appropriate range - - oaknut::Label inputMax; - l(inputMax); - dw(0x43010000); - oaknut::Label inputMin; - l(inputMin); - dw(0xc2fdffff); - oaknut::Label half; - l(half); - dw(0x3f000000); - oaknut::Label c0; - l(c0); - dw(0x3c5dbe69); - dw(0x3d5509f9); - dw(0x3e773cc5); - dw(0x3f3168b3); - dw(0x3f800016); - - oaknut::Label exit; - - l(funcStart); - - FCMP(src1Vec.toS(), src1Vec.toS()); - // Branch if NaN - B(Cond::NE, exit); - - // Decompose input: - // scratch1Vec = 2^round(input) - // src1Vec = input-round(input) [-0.5, 0.5) - // Clamp to maximum range since we shift the value directly into the exponent - ADR(scratch1, inputMax); - LDR(scratch1Vec.toS(), scratch1, 0); - FMIN(src1Vec.toS(), src1Vec.toS(), scratch1Vec.toS()); - - LDR(scratch1Vec.toS(), scratch1, 4); - FMAX(src1Vec.toS(), src1Vec.toS(), scratch1Vec.toS()); - - ADR(scratch1, half); - LDR(scratch1Vec.toS(), scratch1); - FSUB(scratch1Vec.toS(), src1Vec.toS(), scratch1Vec.toS()); - - FCVTNS(scratch1Vec.toS(), scratch1Vec.toS()); - MOV(scratch1.toW(), scratch1Vec.Selem()[0]); - SCVTF(scratch1Vec.toS(), scratch1.toW()); - - // scratch1Vec now contains input rounded to the nearest integer - ADD(scratch1.toW(), scratch1.toW(), 0x7F); - FSUB(src1Vec.toS(), src1Vec.toS(), scratch1Vec.toS()); - // src1Vec contains input - round(input), which is in [-0.5, 0.5) - LSL(scratch1.toW(), scratch1.toW(), 23); - MOV(scratch1Vec.Selem()[0], scratch1.toW()); - // scratch1Vec contains 2^(round(input)) - - // Complete computation of polynomial - ADR(scratch2, c0); - LDR(scratch2Vec.toS(), scratch2, 0); - FMUL(scratch2Vec.toS(), src1Vec.toS(), scratch2Vec.toS()); - - LDR(scratch3Vec.toS(), scratch2, 4); - FADD(scratch2Vec.toS(), scratch2Vec.toS(), scratch3Vec.toS()); - FMUL(scratch2Vec.toS(), scratch2Vec.toS(), src1Vec.toS()); - - LDR(scratch3Vec.toS(), scratch2, 8); - FADD(scratch2Vec.toS(), scratch2Vec.toS(), scratch3Vec.toS()); - FMUL(scratch2Vec.toS(), scratch2Vec.toS(), src1Vec.toS()); - - LDR(scratch3Vec.toS(), scratch2, 12); - FADD(scratch2Vec.toS(), scratch2Vec.toS(), scratch3Vec.toS()); - FMUL(src1Vec.toS(), scratch2Vec.toS(), src1Vec.toS()); - - LDR(scratch3Vec.toS(), scratch2, 16); - FADD(src1Vec.toS(), scratch3Vec.toS(), src1Vec.toS()); - - FMUL(src1Vec.toS(), src1Vec.toS(), scratch1Vec.toS()); - - // Duplicate result across vector - l(exit); - DUP(src1Vec.S4(), src1Vec.Selem()[0]); - - RET(); - - return funcStart; -} - -void ShaderEmitter::emitSafeMUL(oaknut::QReg src1, oaknut::QReg src2, oaknut::QReg scratch0) { - // 0 * inf and inf * 0 in the PICA should return 0 instead of NaN - // This can be done by checking for NaNs before and after a multiplication - - // FMULX returns 2.0 in the case of 0.0 * inf or inf * 0.0 - // Both a FMUL and FMULX are done and the results are compared to each other - // In the case that the results are diferent(a 0.0*inf happened), then - // a 0.0 is written - FMULX(scratch1Vec.S4(), src1.S4(), src2.S4()); - FMUL(src1.S4(), src1.S4(), src2.S4()); - CMEQ(scratch1Vec.S4(), scratch1Vec.S4(), src1.S4()); - AND(src1.B16(), src1.B16(), scratch1Vec.B16()); -} - -void ShaderEmitter::recADD(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src1, idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, 0, operandDescriptor); - FADD(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recMAX(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src1, idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, 0, operandDescriptor); - FMAX(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recMIN(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src1, idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, 0, operandDescriptor); - FMIN(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recMUL(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); // src2 coming first because PICA moment - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src1, idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, 0, operandDescriptor); - - if (useSafeMUL) { - emitSafeMUL(src1Vec, src2Vec, scratch1Vec); - } else { - FMUL(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - } - - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recRCP(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - const u32 writeMask = operandDescriptor & 0xf; - - loadRegister<1>(src1Vec, shader, src, idx, operandDescriptor); // Load source 1 into scratch1Vec - FDIV(src1Vec.toS(), onesVector.toS(), src1Vec.toS()); // src1 = 1.0 / src1 - - // If we only write back the x component to the result, we needn't perform a shuffle to do res = res.xxxx - // Otherwise we do - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - DUP(src1Vec.S4(), src1Vec.Selem()[0]); // src1Vec = src1Vec.xxxx - } - - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recRSQ(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - const u32 writeMask = operandDescriptor & 0xf; - constexpr bool useAccurateRSQ = true; - - loadRegister<1>(src1Vec, shader, src, idx, operandDescriptor); // Load source 1 into scratch1Vec - - // Compute reciprocal square root approximation - // TODO: Should this use frsqte or fsqrt+div? The former is faster but less accurate - // PICA RSQ uses f24 precision though, so it'll be inherently innacurate, and it's likely using an inaccurate approximation too, seeing as - // It doesn't have regular sqrt/div instructions. - // For now, we default to accurate inverse square root - if constexpr (useAccurateRSQ) { - FSQRT(src1Vec.toS(), src1Vec.toS()); // src1 = sqrt(src1), scalar - FDIV(src1Vec.toS(), onesVector.toS(), src1Vec.toS()); // Now invert src1 - } else { - FRSQRTE(src1Vec.toS(), src1Vec.toS()); // Much nicer - } - - // If we only write back the x component to the result, we needn't perform a shuffle to do res = res.xxxx - // Otherwise we do - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - DUP(src1Vec.S4(), src1Vec.Selem()[0]); // src1Vec = src1Vec.xxxx - } - - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recMAD(const PICAShader& shader, u32 instruction) { - const bool isMADI = getBit<29>(instruction) == 0; - - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x1f]; - const u32 src1 = getBits<17, 5>(instruction); - const u32 src2 = isMADI ? getBits<12, 5>(instruction) : getBits<10, 7>(instruction); - const u32 src3 = isMADI ? getBits<5, 7>(instruction) : getBits<5, 5>(instruction); - const u32 idx = getBits<22, 2>(instruction); - const u32 dest = getBits<24, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src1, 0, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, isMADI ? 0 : idx, operandDescriptor); - loadRegister<3>(src3Vec, shader, src3, isMADI ? idx : 0, operandDescriptor); - - if (useSafeMUL) { - emitSafeMUL(src1Vec, src2Vec, scratch1Vec); - FADD(src3Vec.S4(), src3Vec.S4(), src1Vec.S4()); - } else { - FMLA(src3Vec.S4(), src1Vec.S4(), src2Vec.S4()); - } - storeRegister(src3Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recSLT(const PICAShader& shader, u32 instruction) { - const bool isSLTI = (instruction >> 26) == ShaderOpcodes::SLTI; - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - - const u32 src1 = isSLTI ? getBits<14, 5>(instruction) : getBits<12, 7>(instruction); - const u32 src2 = isSLTI ? getBits<7, 7>(instruction) : getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src1, isSLTI ? 0 : idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, isSLTI ? idx : 0, operandDescriptor); - // Set each lane of src1Vec to FFFFFFFF if src2 > src1, else to 0. NEON does not have FCMLT so we use FCMGT with inverted operands - // This is more or less a direct port of the relevant x64 JIT code - FCMGT(src1Vec.S4(), src2Vec.S4(), src1Vec.S4()); - AND(src1Vec.B16(), src1Vec.B16(), onesVector.B16()); // AND with vec4(1.0) to convert the FFFFFFFF lanes into 1.0 - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recSGE(const PICAShader& shader, u32 instruction) { - const bool isSGEI = (instruction >> 26) == ShaderOpcodes::SGEI; - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - - const u32 src1 = isSGEI ? getBits<14, 5>(instruction) : getBits<12, 7>(instruction); - const u32 src2 = isSGEI ? getBits<7, 7>(instruction) : getBits<7, 5>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src1, isSGEI ? 0 : idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, isSGEI ? idx : 0, operandDescriptor); - // Set each lane of src1Vec to FFFFFFFF if src1 >= src2, else to 0. - // This is more or less a direct port of the relevant x64 JIT code - FCMGE(src1Vec.S4(), src1Vec.S4(), src2Vec.S4()); - AND(src1Vec.B16(), src1Vec.B16(), onesVector.B16()); // AND with vec4(1.0) to convert the FFFFFFFF lanes into 1.0 - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recCMP(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); // src2 coming first because PICA moment - const u32 idx = getBits<19, 2>(instruction); - const u32 cmpY = getBits<21, 3>(instruction); - const u32 cmpX = getBits<24, 3>(instruction); - - loadRegister<1>(src1Vec, shader, src1, idx, operandDescriptor); - loadRegister<2>(src2Vec, shader, src2, 0, operandDescriptor); - - // Map from PICA condition codes (used as index) to x86 condition codes - // We treat invalid condition codes as "always" as suggested by 3DBrew - static constexpr std::array conditionCodes = { - oaknut::util::EQ, oaknut::util::NE, oaknut::util::LT, oaknut::util::LE, - oaknut::util::GT, oaknut::util::GE, oaknut::util::AL, oaknut::util::AL, - }; - - static_assert(sizeof(shader.cmpRegister[0]) == 1 && sizeof(shader.cmpRegister) == 2); // The code below relies on bool being 1 byte exactly - const size_t cmpRegXOffset = uintptr_t(&shader.cmpRegister[0]) - uintptr_t(&shader); - - // NEON doesn't have SIMD comparisons to do fun stuff with like on x64 - FCMP(src1Vec.toS(), src2Vec.toS()); - CSET(W0, conditionCodes[cmpX]); - - // Compare Y components, which annoyingly enough can't be done without moving - MOV(scratch1Vec.toS(), src1Vec.Selem()[1]); - MOV(scratch2Vec.toS(), src2Vec.Selem()[1]); - FCMP(scratch1Vec.toS(), scratch2Vec.toS()); - CSET(W1, conditionCodes[cmpY]); - - // Merge the booleans and write them back in one STRh - ORR(W0, W0, W1, LogShift::LSL, 8); - STRH(W0, statePointer, cmpRegXOffset); -} - -void ShaderEmitter::checkBoolUniform(const PICAShader& shader, u32 instruction) { - const u32 bit = getBits<22, 4>(instruction); // Bit of the bool uniform to check - const uintptr_t boolUniformOffset = uintptr_t(&shader.boolUniform) - uintptr_t(&shader); - - LDRH(W0, statePointer, boolUniformOffset); // Load bool uniform into w0 - TST(W0, 1 << bit); // Check if bit is set -} - -void ShaderEmitter::checkCmpRegister(const PICAShader& shader, u32 instruction) { - static_assert(sizeof(bool) == 1 && sizeof(shader.cmpRegister) == 2); // The code below relies on bool being 1 byte exactly - const size_t cmpRegXOffset = uintptr_t(&shader.cmpRegister[0]) - uintptr_t(&shader); - const size_t cmpRegYOffset = cmpRegXOffset + sizeof(bool); - - const u32 condition = getBits<22, 2>(instruction); - const uint refY = getBit<24>(instruction); - const uint refX = getBit<25>(instruction); - - // refX in the bottom byte, refY in the top byte. This is done for condition codes 0 and 1 which check both x and y, so we can emit a single - // instruction that checks both - const u16 refX_refY_merged = refX | (refY << 8); - - switch (condition) { - case 0: // Either cmp register matches - LDRB(W0, statePointer, cmpRegXOffset); - LDRB(W1, statePointer, cmpRegYOffset); - - // Check if x matches refX - CMP(W0, refX); - CSET(W0, EQ); - - // Check if y matches refY - CMP(W1, refY); - CSET(W1, EQ); - - // Set Z to 1 if at least one of them matches - ORR(W0, W0, W1); - CMP(W0, 1); - break; - case 1: // Both cmp registers match - LDRH(W0, statePointer, cmpRegXOffset); - - // If ref fits in 8 bits, use a single CMP, otherwise move into register and then CMP - if (refX_refY_merged <= 0xff) { - CMP(W0, refX_refY_merged); - } else { - MOV(W1, refX_refY_merged); - CMP(W0, W1); - } - break; - case 2: // At least cmp.x matches - LDRB(W0, statePointer, cmpRegXOffset); - CMP(W0, refX); - break; - default: // At least cmp.y matches - LDRB(W0, statePointer, cmpRegYOffset); - CMP(W0, refY); - break; - } -} - -void ShaderEmitter::recCALL(const PICAShader& shader, u32 instruction) { - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - - // Push return PC as stack parameter. This is a decently fast solution and Citra does the same but we should probably switch to a proper PICA-like - // Callstack, because it's not great to have an infinitely expanding call stack - MOV(X0, dest + num); - // Push return PC + current link register so that we'll be able to return later - STP(X0, X30, SP, PRE_INDEXED, -16); - // Call subroutine, Oaknut will update the label if it hasn't been initialized yet - BL(instructionLabels[dest]); - - // Fetch original LR and return. This also restores SP to its original value, discarding the return guard into XZR - LDP(XZR, X30, SP, POST_INDEXED, 16); -} - -void ShaderEmitter::recCALLC(const PICAShader& shader, u32 instruction) { - Label skipCall; - - // z is 1 if the call should be taken, 0 otherwise - checkCmpRegister(shader, instruction); - B(NE, skipCall); - recCALL(shader, instruction); - - l(skipCall); -} - -void ShaderEmitter::recCALLU(const PICAShader& shader, u32 instruction) { - Label skipCall; - - // z is 0 if the call should be taken, 1 otherwise - checkBoolUniform(shader, instruction); - B(EQ, skipCall); - recCALL(shader, instruction); - - l(skipCall); -} - -void ShaderEmitter::recIFC(const PICAShader& shader, u32 instruction) { - // z is 1 if true, else 0 - checkCmpRegister(shader, instruction); - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - - if (dest < recompilerPC) { - Helpers::warn("Shader JIT: IFC instruction with dest < current PC\n"); - } - Label elseBlock, endIf; - - // Jump to else block if z is 0 - B(NE, elseBlock); - compileUntil(shader, dest); - - if (num == 0) { // Else block is empty, - l(elseBlock); - } else { // Else block is NOT empty - B(endIf); // Skip executing the else branch if the if branch was ran - l(elseBlock); - compileUntil(shader, dest + num); - l(endIf); - } -} - -void ShaderEmitter::recIFU(const PICAShader& shader, u32 instruction) { - // z is 0 if true, else 1 - checkBoolUniform(shader, instruction); - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - - if (dest < recompilerPC) { - Helpers::warn("Shader JIT: IFC instruction with dest < current PC\n"); - } - Label elseBlock, endIf; - - // Jump to else block if z is 1 - B(EQ, elseBlock); - compileUntil(shader, dest); - - if (num == 0) { // Else block is empty, - l(elseBlock); - } else { // Else block is NOT empty - B(endIf); // Skip executing the else branch if the if branch was ran - l(elseBlock); - compileUntil(shader, dest + num); - l(endIf); - } -} - -void ShaderEmitter::recJMPC(const PICAShader& shader, u32 instruction) { - const u32 dest = getBits<10, 12>(instruction); - - Label& l = instructionLabels[dest]; - // Z is 1 if the comparison is true - checkCmpRegister(shader, instruction); - B(EQ, l); -} - -void ShaderEmitter::recJMPU(const PICAShader& shader, u32 instruction) { - bool jumpIfFalse = instruction & 1; // If the LSB is 0 we want to compare to true, otherwise compare to false - const u32 dest = getBits<10, 12>(instruction); - - Label& l = instructionLabels[dest]; - // Z is 0 if the uniform is true - checkBoolUniform(shader, instruction); - - if (jumpIfFalse) { - B(EQ, l); - } else { - B(NE, l); - } -} - -void ShaderEmitter::recLG2(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src, idx, operandDescriptor); // Load source 1 into scratch1Vec - STR(X30, SP, POST_INDEXED, -16); - BL(log2Func); - LDR(X30, SP, PRE_INDEXED, 16); - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -void ShaderEmitter::recLOOP(const PICAShader& shader, u32 instruction) { - const u32 dest = getBits<10, 12>(instruction); - const u32 uniformIndex = getBits<22, 2>(instruction); - - if (loopLevel > 0) { - log("[Shader JIT] Detected nested loop. Might be broken?\n"); - } - - if (dest < recompilerPC) { - Helpers::panic("[Shader JIT] Detected backwards loop\n"); - } - - loopLevel++; - - // Offset of the uniform - const auto& uniform = shader.intUniforms[uniformIndex]; - const uintptr_t uniformOffset = uintptr_t(&uniform[0]) - uintptr_t(&shader); - // Offset of the loop register - const uintptr_t loopRegOffset = uintptr_t(&shader.loopCounter) - uintptr_t(&shader); - - LDRB(W0, statePointer, uniformOffset); // W0 = loop iteration count - LDRB(W1, statePointer, uniformOffset + sizeof(u8)); // W1 = initial loop counter value - LDRB(W2, statePointer, uniformOffset + 2 * sizeof(u8)); // W2 = Loop increment - - ADD(W0, W0, 1); // The iteration count is actually uniform.x + 1 - STR(W1, statePointer, loopRegOffset); // Set loop counter - - // Push loop iteration counter & loop increment - // TODO: This might break if an instruction in a loop decides to yield... - STP(X0, X2, SP, PRE_INDEXED, -16); - - Label loopStart, loopEnd; - l(loopStart); - compileUntil(shader, dest + 1); - - const size_t stackOffsetOfLoopIncrement = 0; - const size_t stackOffsetOfIterationCounter = stackOffsetOfLoopIncrement + 8; - - LDP(X0, X2, SP); // W0 = loop iteration, W2 = loop increment - LDR(W1, statePointer, loopRegOffset); // W1 = loop register - - // Increment loop counter - ADD(W1, W1, W2); - STR(W1, statePointer, loopRegOffset); - // Subtract 1 from loop iteration counter, - SUBS(W0, W0, 1); - B(EQ, loopEnd); - - // Loop hasn't ended: Write back new iteration counter and go back to the start - STR(X0, SP); - B(loopStart); - - l(loopEnd); - // Remove the stuff we pushed on the stack earlier - ADD(SP, SP, 16); - loopLevel--; -} - -void ShaderEmitter::recEND(const PICAShader& shader, u32 instruction) { - // Fetch original LR and return. This also restores SP to its original value, discarding the return guard into XZR - LDP(XZR, X30, SP, POST_INDEXED, 16); - RET(); -} - -void ShaderEmitter::recEX2(const PICAShader& shader, u32 instruction) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - loadRegister<1>(src1Vec, shader, src, idx, operandDescriptor); // Load source 1 into scratch1Vec - STR(X30, SP, POST_INDEXED, -16); - BL(exp2Func); - LDR(X30, SP, PRE_INDEXED, 16); - storeRegister(src1Vec, shader, dest, operandDescriptor); -} - -#endif diff --git a/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp b/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp index 5cc37878..d95f7bf5 100644 --- a/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp +++ b/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp @@ -27,7 +27,6 @@ static constexpr Xmm scratch2 = xmm1; static constexpr Xmm src1_xmm = xmm2; static constexpr Xmm src2_xmm = xmm3; static constexpr Xmm src3_xmm = xmm4; -static constexpr Xmm scratch3 = xmm5; #if defined(PANDA3DS_MS_ABI) // Register that points to PICA state. Must be volatile for the aforementioned reasons @@ -46,16 +45,6 @@ void ShaderEmitter::compile(const PICAShader& shaderUnit) { L(onesVector); dd(0x3f800000); dd(0x3f800000); dd(0x3f800000); dd(0x3f800000); // 1.0 4 times - if (useSafeMUL) { - // When doing safe mul, we need a vector to set only the w component to 0 for DP3 - L(dp3Vector); - - dd(0xFFFFFFFF); - dd(0xFFFFFFFF); - dd(0xFFFFFFFF); - dd(0); - } - // Emit prologue first align(16); prologueCb = getCurr(); @@ -183,9 +172,6 @@ void ShaderEmitter::compileInstruction(const PICAShader& shaderUnit) { emitPrintLog(shaderUnit); break; - case ShaderOpcodes::BREAK: - case ShaderOpcodes::BREAKC: Helpers::warn("[Shader JIT] Unimplemented BREAK(C) instruction!"); break; - // We consider both MAD and MADI to be the same instruction and decode which one we actually have in recMAD case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3C: case 0x3D: case 0x3E: case 0x3F: @@ -246,8 +232,6 @@ void ShaderEmitter::loadRegister(Xmm dest, const PICAShader& shader, u32 src, u3 compSwizzle = getBits<23, 8>(operandDescriptor); } - // TODO: Do indexes get applied if src < 0x20? - // PICA has the swizzle descriptor inverted in comparison to x86. For the PICA, the descriptor is (lowest to highest bits) wzyx while it's xyzw for x86 u32 convertedSwizzle = ((compSwizzle >> 6) & 0b11) | (((compSwizzle >> 4) & 0b11) << 2) | (((compSwizzle >> 2) & 0b11) << 4) | ((compSwizzle & 0b11) << 6); @@ -355,10 +339,10 @@ void ShaderEmitter::storeRegister(Xmm source, const PICAShader& shader, u32 dest } else if (std::popcount(writeMask) == 1) { // Only 1 register needs to be written back. This can be done with a simple shift right + movss int bit = std::countr_zero(writeMask); // Get which PICA register needs to be written to (0 = w, 1 = z, etc) size_t index = 3 - bit; - const uintptr_t laneOffset = offset + index * sizeof(float); + const uintptr_t lane_offset = offset + index * sizeof(float); if (index == 0) { // Bottom lane, no need to shift - movss(dword[statePointer + laneOffset], source); + movss(dword[statePointer + lane_offset], source); } else { // Shift right by 32 * index, then write bottom lane if (haveAVX) { vpsrldq(scratch1, source, index * sizeof(float)); @@ -366,16 +350,17 @@ void ShaderEmitter::storeRegister(Xmm source, const PICAShader& shader, u32 dest movaps(scratch1, source); psrldq(scratch1, index * sizeof(float)); } - movss(dword[statePointer + laneOffset], scratch1); + movss(dword[statePointer + lane_offset], scratch1); } } else if (haveSSE4_1) { // Bit reverse the write mask because that is what blendps expects u32 adjustedMask = ((writeMask >> 3) & 0b1) | ((writeMask >> 1) & 0b10) | ((writeMask << 1) & 0b100) | ((writeMask << 3) & 0b1000); + // Don't accidentally overwrite scratch1 if that is what we're writing derp + Xmm temp = (source == scratch1) ? scratch2 : scratch1; - // Blend current value of dest with source. We have to invert the bits of the mask, as we do blendps source, dest instead of dest, source - // Note: This destroys source - blendps(source, xword[statePointer + offset], adjustedMask ^ 0xF); - movaps(xword[statePointer + offset], source); // Write back + movaps(temp, xword[statePointer + offset]); // Read current value of dest + blendps(temp, source, adjustedMask); // Blend with source + movaps(xword[statePointer + offset], temp); // Write back } else { // Blend algo referenced from Citra const u8 selector = (((writeMask & 0b1000) ? 1 : 0) << 0) | @@ -383,12 +368,20 @@ void ShaderEmitter::storeRegister(Xmm source, const PICAShader& shader, u32 dest (((writeMask & 0b0010) ? 0 : 1) << 4) | (((writeMask & 0b0001) ? 2 : 3) << 6); - movaps(scratch3, xword[statePointer + offset]); - movaps(scratch2, source); - unpckhps(scratch2, scratch3); // Unpack X/Y components of source and destination - unpcklps(scratch3, source); // Unpack Z/W components of source and destination - shufps(scratch3, scratch2, selector); // "merge-shuffle" dest and source using selecto - movaps(xword[statePointer + offset], scratch3); // Write back + // Reorder instructions based on whether the source == scratch1. This is to avoid overwriting scratch1 if it's the source, + // While also having the memory load come first to mitigate execution hazards and give the load more time to complete before reading if possible + if (source != scratch1) { + movaps(scratch1, xword[statePointer + offset]); + movaps(scratch2, source); + } else { + movaps(scratch2, source); + movaps(scratch1, xword[statePointer + offset]); + } + + unpckhps(scratch2, scratch1); // Unpack X/Y components of source and destination + unpcklps(scratch1, source); // Unpack Z/W components of source and destination + shufps(scratch1, scratch2, selector); // "merge-shuffle" dest and source using selecto + movaps(xword[statePointer + offset], scratch1); // Write back } } @@ -407,18 +400,11 @@ void ShaderEmitter::checkCmpRegister(const PICAShader& shader, u32 instruction) switch (condition) { case 0: // Either cmp register matches // Z flag is 0 if at least 1 of them is set + test(word[statePointer + cmpRegXOffset], refX_refY_merged); - // Check if X matches - cmp(byte[statePointer + cmpRegXOffset], refX); - sete(al); - - // Or if Y matches - cmp(byte[statePointer + cmpRegYOffset], refY); - sete(cl); - or_(al, cl); - - // If either of them matches, set Z to 1, else set it to 0 - xor_(al, 1); + // Invert z flag + setz(al); + test(al, al); break; case 1: // Both cmp registers match cmp(word[statePointer + cmpRegXOffset], refX_refY_merged); @@ -525,60 +511,24 @@ void ShaderEmitter::recDP3(const PICAShader& shader, u32 instruction) { const u32 idx = getBits<19, 2>(instruction); const u32 dest = getBits<21, 5>(instruction); + // TODO: Safe multiplication equivalent (Multiplication is not IEEE compliant on the PICA) loadRegister<1>(src1_xmm, shader, src1, idx, operandDescriptor); loadRegister<2>(src2_xmm, shader, src2, 0, operandDescriptor); - - if (!useSafeMUL) { - dpps(src1_xmm, src2_xmm, 0b01111111); - } else { - const u32 writeMask = operandDescriptor & 0xf; - - // Set w component to 0 and do a DP4 - andps(src1_xmm, xword[rip + dp3Vector]); - - // Set src1 to src1 * src2, then get the dot product by doing 2 horizontal adds - emitSafeMUL(src1_xmm, src2_xmm, scratch1); - haddps(src1_xmm, src1_xmm); - haddps(src1_xmm, src1_xmm); - - // If we only write back the x component to the result, we needn't perform a shuffle to do res = res.xxxx - // Otherwise we do - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - shufps(src1_xmm, src1_xmm, 0); // src1_xmm = src1_xmm.xxxx - } - } - + dpps(src1_xmm, src2_xmm, 0b01111111); // 3-lane dot product between the 2 registers, store the result in all lanes of scratch1 similarly to PICA storeRegister(src1_xmm, shader, dest, operandDescriptor); } void ShaderEmitter::recDP4(const PICAShader& shader, u32 instruction) { const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; const u32 src1 = getBits<12, 7>(instruction); - const u32 src2 = getBits<7, 5>(instruction); // src2 coming first because PICA moment + const u32 src2 = getBits<7, 5>(instruction); // src2 coming first because PICA moment const u32 idx = getBits<19, 2>(instruction); const u32 dest = getBits<21, 5>(instruction); + // TODO: Safe multiplication equivalent (Multiplication is not IEEE compliant on the PICA) loadRegister<1>(src1_xmm, shader, src1, idx, operandDescriptor); loadRegister<2>(src2_xmm, shader, src2, 0, operandDescriptor); - - if (!useSafeMUL) { - // 4-lane dot product between the 2 registers, store the result in all lanes of scratch1 similarly to PICA - dpps(src1_xmm, src2_xmm, 0b11111111); - } else { - const u32 writeMask = operandDescriptor & 0xf; - - // Set src1 to src1 * src2, then get the dot product by doing 2 horizontal adds - emitSafeMUL(src1_xmm, src2_xmm, scratch1); - haddps(src1_xmm, src1_xmm); - haddps(src1_xmm, src1_xmm); - - // If we only write back the x component to the result, we needn't perform a shuffle to do res = res.xxxx - // Otherwise we do - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - shufps(src1_xmm, src1_xmm, 0); // src1_xmm = src1_xmm.xxxx - } - } - + dpps(src1_xmm, src2_xmm, 0b11111111); // 4-lane dot product between the 2 registers, store the result in all lanes of scratch1 similarly to PICA storeRegister(src1_xmm, shader, dest, operandDescriptor); } @@ -591,6 +541,7 @@ void ShaderEmitter::recDPH(const PICAShader& shader, u32 instruction) { const u32 idx = getBits<19, 2>(instruction); const u32 dest = getBits<21, 5>(instruction); + // TODO: Safe multiplication equivalent (Multiplication is not IEEE compliant on the PICA) loadRegister<1>(src1_xmm, shader, src1, isDPHI ? 0 : idx, operandDescriptor); loadRegister<2>(src2_xmm, shader, src2, isDPHI ? idx : 0, operandDescriptor); @@ -603,25 +554,7 @@ void ShaderEmitter::recDPH(const PICAShader& shader, u32 instruction) { unpcklpd(src1_xmm, scratch1); } - // Now perform a DP4 - if (!useSafeMUL) { - // 4-lane dot product between the 2 registers, store the result in all lanes of scratch1 similarly to PICA - dpps(src1_xmm, src2_xmm, 0b11111111); - } else { - const u32 writeMask = operandDescriptor & 0xf; - - // Set src1 to src1 * src2, then get the dot product by doing 2 horizontal adds - emitSafeMUL(src1_xmm, src2_xmm, scratch1); - haddps(src1_xmm, src1_xmm); - haddps(src1_xmm, src1_xmm); - - // If we only write back the x component to the result, we needn't perform a shuffle to do res = res.xxxx - // Otherwise we do - if (writeMask != 0x8) { // Copy bottom lane to all lanes if we're not simply writing back x - shufps(src1_xmm, src1_xmm, 0); // src1_xmm = src1_xmm.xxxx - } - } - + dpps(src1_xmm, src2_xmm, 0b11111111); // 4-lane dot product between the 2 registers, store the result in all lanes of scratch1 similarly to PICA storeRegister(src1_xmm, shader, dest, operandDescriptor); } @@ -658,15 +591,10 @@ void ShaderEmitter::recMUL(const PICAShader& shader, u32 instruction) { const u32 idx = getBits<19, 2>(instruction); const u32 dest = getBits<21, 5>(instruction); + // TODO: Safe multiplication equivalent (Multiplication is not IEEE compliant on the PICA) loadRegister<1>(src1_xmm, shader, src1, idx, operandDescriptor); loadRegister<2>(src2_xmm, shader, src2, 0, operandDescriptor); - - if (!useSafeMUL) { - mulps(src1_xmm, src2_xmm); - } else { - emitSafeMUL(src1_xmm, src2_xmm, scratch1); - } - + mulps(src1_xmm, src2_xmm); storeRegister(src1_xmm, shader, dest, operandDescriptor); } @@ -722,31 +650,23 @@ void ShaderEmitter::recMAD(const PICAShader& shader, u32 instruction) { loadRegister<2>(src2_xmm, shader, src2, isMADI ? 0 : idx, operandDescriptor); loadRegister<3>(src3_xmm, shader, src3, isMADI ? idx : 0, operandDescriptor); + // TODO: Implement safe PICA mul // If we have FMA3, optimize MAD to use FMA - if (!useSafeMUL) { - if (haveFMA3) { - vfmadd213ps(src1_xmm, src2_xmm, src3_xmm); - storeRegister(src1_xmm, shader, dest, operandDescriptor); + if (haveFMA3) { + vfmadd213ps(src1_xmm, src2_xmm, src3_xmm); + storeRegister(src1_xmm, shader, dest, operandDescriptor); + } + + // If we don't have FMA3, do a multiplication and addition + else { + // Multiply src1 * src2 + if (haveAVX) { + vmulps(scratch1, src1_xmm, src2_xmm); + } else { + movaps(scratch1, src1_xmm); + mulps(scratch1, src2_xmm); } - // If we don't have FMA3, do a multiplication and addition - else { - // Multiply src1 * src2 - if (haveAVX) { - vmulps(scratch1, src1_xmm, src2_xmm); - } else { - movaps(scratch1, src1_xmm); - mulps(scratch1, src2_xmm); - } - - // Add src3 - addps(scratch1, src3_xmm); - storeRegister(scratch1, shader, dest, operandDescriptor); - } - } else { - movaps(scratch1, src1_xmm); - emitSafeMUL(scratch1, src2_xmm, src1_xmm); - // Add src3 addps(scratch1, src3_xmm); storeRegister(scratch1, shader, dest, operandDescriptor); @@ -915,7 +835,7 @@ void ShaderEmitter::recCALL(const PICAShader& shader, u32 instruction) { const u32 dest = getBits<10, 12>(instruction); // Push return PC as stack parameter. This is a decently fast solution and Citra does the same but we should probably switch to a proper PICA-like - // Callstack, because it's not great to have an infinitely expanding call stack where popping from empty stack is undefined + // Callstack, because it's not great to have an infinitely expanding call stack where popping from empty stack is undefined as hell push(qword, dest + num); // Call subroutine, Xbyak will update the label if it hasn't been initialized yet call(instructionLabels[dest]); @@ -1183,41 +1103,6 @@ Xbyak::Label ShaderEmitter::emitLog2Func() { return subroutine; } -void ShaderEmitter::emitSafeMUL(Xmm src1, Xmm src2, Xmm scratch) { - // 0 * inf and inf * 0 in the PICA should return 0 instead of NaN - // This can be done by checking for NaNs before and after a multiplication - // To do this we can create a mask of which components of src1/src2 are NOT NaN using cmpordsps (cmpps with imm = 7) - // Then we multiply src1 and src2 and reate a mask of which components of the result ARE NaN using cmpunordps - // If the NaNs didn't exist (ie they were created by 0 * inf) before then we set them to 0 by XORing the 2 masks and ANDing the multiplication - // result with the xor result - // Based on Citra implementation, particularly the AVX-512 version - - if (cpuCaps.has(Cpu::tAVX512F | Cpu::tAVX512VL)) { - const Xbyak::Opmask zeroMask = k1; - - vmulps(scratch, src1, src2); - // Mask of any NaN values found in the result - vcmpunordps(zeroMask, scratch, scratch); - // Mask of any non-NaN inputs producing NaN results - vcmpordps(zeroMask | zeroMask, src1, src2); - - knotb(zeroMask, zeroMask); - vmovaps(src1 | zeroMask | T_z, scratch); - } else { - if (haveAVX) { - vcmpordps(scratch, src1, src2); - } else { - movaps(scratch, src1); - cmpordps(scratch, src2); - } - - mulps(src1, src2); - cmpunordps(src2, src1); - xorps(src2, scratch); - andps(src1, src2); - } -} - Xbyak::Label ShaderEmitter::emitExp2Func() { Xbyak::Label subroutine; diff --git a/src/core/PICA/gpu.cpp b/src/core/PICA/gpu.cpp index e38f4416..c0499382 100644 --- a/src/core/PICA/gpu.cpp +++ b/src/core/PICA/gpu.cpp @@ -15,9 +15,6 @@ #ifdef PANDA3DS_ENABLE_VULKAN #include "renderer_vk/renderer_vk.hpp" #endif -#ifdef PANDA3DS_ENABLE_METAL -#include "renderer_mtl/renderer_mtl.hpp" -#endif constexpr u32 topScreenWidth = 240; constexpr u32 topScreenHeight = 400; @@ -55,37 +52,22 @@ GPU::GPU(Memory& mem, EmulatorConfig& config) : mem(mem), config(config) { renderer.reset(new RendererVK(*this, regs, externalRegs)); break; } -#endif -#ifdef PANDA3DS_ENABLE_METAL - case RendererType::Metal: { - renderer.reset(new RendererMTL(*this, regs, externalRegs)); - break; - } #endif default: { Helpers::panic("Rendering backend not supported: %s", Renderer::typeToString(config.rendererType)); break; } } - - if (renderer != nullptr) { - renderer->setConfig(&config); - } } void GPU::reset() { regs.fill(0); shaderUnit.reset(); shaderJIT.reset(); - shaderJIT.setAccurateMul(config.accurateShaderMul); - std::memset(vram, 0, vramSize); lightingLUT.fill(0); lightingLUTDirty = true; - fogLUT.fill(0); - fogLUTDirty = true; - totalAttribCount = 0; fixedAttribMask = 0; fixedAttribIndex = 0; @@ -95,9 +77,6 @@ void GPU::reset() { fixedAttrBuff.fill(0); - oldVsOutputMask = 0; - setVsOutputMask(0xFFFF); - for (auto& e : attributeInfo) { e.offset = 0; e.size = 0; @@ -129,60 +108,31 @@ void GPU::reset() { renderer->reset(); } -static std::array vertices; - // Call the correct version of drawArrays based on whether this is an indexed draw (first template parameter) // And whether we are going to use the shader JIT (second template parameter) void GPU::drawArrays(bool indexed) { - PICA::DrawAcceleration accel; + const bool shaderJITEnabled = ShaderJIT::isAvailable() && config.shaderJitEnabled; - if (config.accelerateShaders) { - // If we are potentially going to use hw shaders, gather necessary to do vertex fetch, index buffering, etc on the GPU - // This includes parsing which vertices to upload, getting pointers to the index buffer data & vertex data, and so on - getAcceleratedDrawInfo(accel, indexed); - } - - const bool hwShaders = renderer->prepareForDraw(shaderUnit, &accel); - - if (hwShaders) { - // Hardware shaders have their own accelerated code path for draws, so they skip everything here - const PICA::PrimType primType = static_cast(Helpers::getBits<8, 2>(regs[PICA::InternalRegs::PrimitiveConfig])); - // Total # of vertices to render - const u32 vertexCount = regs[PICA::InternalRegs::VertexCountReg]; - - // Note: In the hardware shader path the vertices span shouldn't actually be used as the renderer will perform its own attribute fetching - renderer->drawVertices(primType, std::span(vertices).first(vertexCount)); + if (indexed) { + if (shaderJITEnabled) + drawArrays(); + else + drawArrays(); } else { - const bool shaderJITEnabled = ShaderJIT::isAvailable() && config.shaderJitEnabled; - - if (indexed) { - if (shaderJITEnabled) { - drawArrays(); - } else { - drawArrays(); - } - } else { - if (shaderJITEnabled) { - drawArrays(); - } else { - drawArrays(); - } - } + if (shaderJITEnabled) + drawArrays(); + else + drawArrays(); } } -template -void GPU::drawArrays() { - if constexpr (mode == ShaderExecMode::JIT) { - shaderJIT.prepare(shaderUnit.vs); - } else if constexpr (mode == ShaderExecMode::Hardware) { - // Hardware shaders have their own accelerated code path for draws, so they're not meant to take this path - Helpers::panic("GPU::DrawArrays: Hardware shaders shouldn't take this path!"); - } +static std::array vertices; - // We can have up to 16 attributes, each one consisting of 4 floats - constexpr u32 maxAttrSizeInFloats = 16 * 4; - setVsOutputMask(regs[PICA::InternalRegs::VertexShaderOutputMask]); +template +void GPU::drawArrays() { + if constexpr (useShaderJIT) { + shaderJIT.prepare(shaderUnit.vs); + } // Base address for vertex attributes // The vertex base is always on a quadword boundary because the PICA does weird alignment shit any time possible @@ -192,10 +142,7 @@ void GPU::drawArrays() { // Configures the type of primitive and the number of vertex shader outputs const u32 primConfig = regs[PICA::InternalRegs::PrimitiveConfig]; const PICA::PrimType primType = static_cast(Helpers::getBits<8, 2>(primConfig)); - if (vertexCount > Renderer::vertexBufferSize) [[unlikely]] { - Helpers::warn("[PICA] vertexCount > vertexBufferSize"); - return; - } + if (vertexCount > Renderer::vertexBufferSize) Helpers::panic("[PICA] vertexCount > vertexBufferSize"); if ((primType == PICA::PrimType::TriangleList && vertexCount % 3) || (primType == PICA::PrimType::TriangleStrip && vertexCount < 3) || (primType == PICA::PrimType::TriangleFan && vertexCount < 3)) { @@ -347,6 +294,8 @@ void GPU::drawArrays() { } // Fill the remaining attribute lanes with default parameters (1.0 for alpha/w, 0.0) for everything else + // Corgi does this although I'm not sure if it's actually needed for anything. + // TODO: Find out while (component < 4) { attribute[component] = (component == 3) ? f24::fromFloat32(1.0) : f24::fromFloat32(0.0); component++; @@ -360,13 +309,13 @@ void GPU::drawArrays() { // Before running the shader, the PICA maps the fetched attributes from the attribute registers to the shader input registers // Based on the SH_ATTRIBUTES_PERMUTATION registers. - // Ie it might map attribute #0 to v2, #1 to v7, etc + // Ie it might attribute #0 to v2, #1 to v7, etc for (int j = 0; j < totalAttribCount; j++) { const u32 mapping = (inputAttrCfg >> (j * 4)) & 0xf; std::memcpy(&shaderUnit.vs.inputs[mapping], ¤tAttributes[j], sizeof(vec4f)); } - if constexpr (mode == ShaderExecMode::JIT) { + if constexpr (useShaderJIT) { shaderJIT.run(shaderUnit.vs); } else { shaderUnit.vs.run(); @@ -380,7 +329,7 @@ void GPU::drawArrays() { for (int j = 0; j < 4; j++) { // pls unroll const u32 mapping = (config >> (j * 8)) & 0x1F; - out.raw[mapping] = vsOutputRegisters[i][j]; + out.raw[mapping] = shaderUnit.vs.outputs[i][j]; } } } @@ -389,8 +338,6 @@ void GPU::drawArrays() { } PICA::Vertex GPU::getImmediateModeVertex() { - setVsOutputMask(regs[PICA::InternalRegs::VertexShaderOutputMask]); - PICA::Vertex v; const int totalAttrCount = (regs[PICA::InternalRegs::VertexShaderAttrNum] & 0xf) + 1; @@ -401,7 +348,7 @@ PICA::Vertex GPU::getImmediateModeVertex() { // Run VS and return vertex data. TODO: Don't hardcode offsets for each attribute shaderUnit.vs.run(); - + // Map shader outputs to fixed function properties const u32 totalShaderOutputs = regs[PICA::InternalRegs::ShaderOutputCount] & 7; for (int i = 0; i < totalShaderOutputs; i++) { @@ -409,7 +356,7 @@ PICA::Vertex GPU::getImmediateModeVertex() { for (int j = 0; j < 4; j++) { // pls unroll const u32 mapping = (config >> (j * 8)) & 0x1F; - v.raw[mapping] = vsOutputRegisters[i][j]; + v.raw[mapping] = shaderUnit.vs.outputs[i][j]; } } @@ -442,7 +389,7 @@ void GPU::fireDMA(u32 dest, u32 source, u32 size) { u8* fcram = mem.getFCRAM(); std::memcpy(&vram[dest - vramStart], &fcram[source - fcramStart], size); } else { - log("Non-trivially optimizable GPU DMA. Falling back to byte-by-byte transfer\n"); + printf("Non-trivially optimizable GPU DMA. Falling back to byte-by-byte transfer\n"); for (u32 i = 0; i < size; i++) { mem.write8(dest + i, mem.read8(source + i)); diff --git a/src/core/PICA/regs.cpp b/src/core/PICA/regs.cpp index f63ee186..baaa2256 100644 --- a/src/core/PICA/regs.cpp +++ b/src/core/PICA/regs.cpp @@ -135,21 +135,6 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { break; } - case FogLUTData0: - case FogLUTData1: - case FogLUTData2: - case FogLUTData3: - case FogLUTData4: - case FogLUTData5: - case FogLUTData6: - case FogLUTData7: { - const uint32_t index = regs[FogLUTIndex] & 0x7F; - fogLUT[index] = value; - fogLUTDirty = true; - regs[FogLUTIndex] = (index + 1) & 0x7F; - break; - } - case LightingLUTData0: case LightingLUTData1: case LightingLUTData2: @@ -249,7 +234,6 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { // If we've reached 3 verts, issue a draw call // Handle rendering depending on the primitive type if (immediateModeVertIndex == 3) { - renderer->prepareForDraw(shaderUnit, nullptr); renderer->drawVertices(PICA::PrimType::TriangleList, immediateModeVertices); switch (primType) { @@ -284,7 +268,7 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { break; case VertexShaderOpDescriptorIndex: { - shaderUnit.vs.setOpDescriptorIndex(newValue); + shaderUnit.vs.setOpDescriptorIndex(value); break; } @@ -301,7 +285,7 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { } case VertexBoolUniform: { - shaderUnit.vs.uploadBoolUniform(newValue & 0xffff); + shaderUnit.vs.boolUniform = value & 0xffff; break; } @@ -309,7 +293,7 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { case VertexIntUniform1: case VertexIntUniform2: case VertexIntUniform3: { - shaderUnit.vs.uploadIntUniform(index - VertexIntUniform0, newValue); + shaderUnit.vs.uploadIntUniform(index - VertexIntUniform0, value); break; } @@ -326,23 +310,21 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { } case VertexShaderEntrypoint: { - shaderUnit.vs.entrypoint = newValue & 0xffff; + shaderUnit.vs.entrypoint = value & 0xffff; break; } - /* TODO: Find out if this actually does anything case VertexShaderTransferEnd: if (value != 0) shaderUnit.vs.finalize(); break; - */ - case VertexShaderTransferIndex: shaderUnit.vs.setBufferIndex(newValue); break; + case VertexShaderTransferIndex: shaderUnit.vs.setBufferIndex(value); break; // Command lists can write to the command processor registers and change the command list stream // Several games are known to do this, including New Super Mario Bros 2 and Super Mario 3D Land case CmdBufTrigger0: case CmdBufTrigger1: { - if (newValue != 0) { // A non-zero value triggers command list processing + if (value != 0) { // A non-zero value triggers command list processing int bufferIndex = index - CmdBufTrigger0; // Index of the command buffer to execute (0 or 1) u32 addr = (regs[CmdBufAddr0 + bufferIndex] & 0xfffffff) << 3; u32 size = (regs[CmdBufSize0 + bufferIndex] & 0xfffff) << 3; diff --git a/src/core/PICA/shader_decompiler.cpp b/src/core/PICA/shader_decompiler.cpp deleted file mode 100644 index 467c4727..00000000 --- a/src/core/PICA/shader_decompiler.cpp +++ /dev/null @@ -1,832 +0,0 @@ -#include "PICA/shader_decompiler.hpp" - -#include - -#include -#include - -#include "config.hpp" - -using namespace PICA; -using namespace PICA::ShaderGen; -using namespace Helpers; - -using Function = ControlFlow::Function; -using ExitMode = Function::ExitMode; - -void ControlFlow::analyze(const PICAShader& shader, u32 entrypoint) { - analysisFailed = false; - - const Function* function = addFunction(shader, entrypoint, PICAShader::maxInstructionCount); - if (function == nullptr || function->exitMode != ExitMode::AlwaysEnd) { - analysisFailed = true; - } -} - -// Helpers for merging parallel/series exit methods from Citra -// Merges exit method of two parallel branches. -static ExitMode exitParallel(ExitMode a, ExitMode b) { - if (a == ExitMode::Unknown) { - return b; - } - else if (b == ExitMode::Unknown) { - return a; - } - else if (a == b) { - return a; - } - return ExitMode::Conditional; -} - -// Cascades exit method of two blocks of code. -static ExitMode exitSeries(ExitMode a, ExitMode b) { - assert(a != ExitMode::AlwaysEnd); - - if (a == ExitMode::Unknown) { - return ExitMode::Unknown; - } - - if (a == ExitMode::AlwaysReturn) { - return b; - } - - if (b == ExitMode::Unknown || b == ExitMode::AlwaysEnd) { - return ExitMode::AlwaysEnd; - } - - return ExitMode::Conditional; -} - -ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 end, Function::Labels& labels) { - // Initialize exit mode to unknown by default, in order to detect things like unending loops - auto [it, inserted] = exitMap.emplace(AddressRange(start, end), ExitMode::Unknown); - // Function has already been analyzed and is in the map so it wasn't added, don't analyze again - if (!inserted) { - return it->second; - } - - // Make sure not to go out of bounds on the shader - for (u32 pc = start; pc < PICAShader::maxInstructionCount && pc != end; pc++) { - const u32 instruction = shader.loadedShader[pc]; - const u32 opcode = instruction >> 26; - - switch (opcode) { - case ShaderOpcodes::JMPC: - case ShaderOpcodes::JMPU: { - const u32 dest = getBits<10, 12>(instruction); - // Register this jump address to our outLabels set - labels.insert(dest); - - // This opens up 2 parallel paths of execution - auto branchTakenExit = analyzeFunction(shader, dest, end, labels); - auto branchNotTakenExit = analyzeFunction(shader, pc + 1, end, labels); - it->second = exitParallel(branchTakenExit, branchNotTakenExit); - return it->second; - } - - case ShaderOpcodes::IFU: - case ShaderOpcodes::IFC: { - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - - const Function* branchTakenFunc = addFunction(shader, pc + 1, dest); - // Check if analysis of the branch taken func failed and return unknown if it did - if (analysisFailed) { - it->second = ExitMode::Unknown; - return it->second; - } - - // Next analyze the not taken func - ExitMode branchNotTakenExitMode = ExitMode::AlwaysReturn; - if (num != 0) { - const Function* branchNotTakenFunc = addFunction(shader, dest, dest + num); - // Check if analysis failed and return unknown if it did - if (analysisFailed) { - it->second = ExitMode::Unknown; - return it->second; - } - - branchNotTakenExitMode = branchNotTakenFunc->exitMode; - } - - auto parallel = exitParallel(branchTakenFunc->exitMode, branchNotTakenExitMode); - // Both branches of the if/else end, so there's nothing after the call - if (parallel == ExitMode::AlwaysEnd) { - it->second = parallel; - return it->second; - } else { - ExitMode afterConditional = analyzeFunction(shader, dest + num, end, labels); - ExitMode conditionalExitMode = exitSeries(parallel, afterConditional); - it->second = conditionalExitMode; - return it->second; - } - break; - } - - case ShaderOpcodes::CALL: { - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - const Function* calledFunction = addFunction(shader, dest, dest + num); - - // Check if analysis of the branch taken func failed and return unknown if it did - if (analysisFailed) { - it->second = ExitMode::Unknown; - return it->second; - } - - if (calledFunction->exitMode == ExitMode::AlwaysEnd) { - it->second = ExitMode::AlwaysEnd; - return it->second; - } - - // Exit mode of the remainder of this function, after we return from the callee - const ExitMode postCallExitMode = analyzeFunction(shader, pc + 1, end, labels); - const ExitMode exitMode = exitSeries(calledFunction->exitMode, postCallExitMode); - - it->second = exitMode; - return exitMode; - } - - case ShaderOpcodes::CALLC: - case ShaderOpcodes::CALLU: { - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - const Function* calledFunction = addFunction(shader, dest, dest + num); - - // Check if analysis of the branch taken func failed and return unknown if it did - if (analysisFailed) { - it->second = ExitMode::Unknown; - return it->second; - } - - // Exit mode of the remainder of this function, after we return from the callee - const ExitMode postCallExitMode = analyzeFunction(shader, pc + 1, end, labels); - const ExitMode exitMode = exitSeries(exitParallel(calledFunction->exitMode, ExitMode::AlwaysReturn), postCallExitMode); - - it->second = exitMode; - return exitMode; - } - - case ShaderOpcodes::LOOP: { - u32 dest = getBits<10, 12>(instruction); - const Function* loopFunction = addFunction(shader, pc + 1, dest + 1); - if (analysisFailed) { - it->second = ExitMode::Unknown; - return it->second; - } - - if (loopFunction->exitMode == ExitMode::AlwaysEnd) { - it->second = ExitMode::AlwaysEnd; - return it->second; - } - - const ExitMode afterLoop = analyzeFunction(shader, dest + 1, end, labels); - const ExitMode exitMode = exitSeries(loopFunction->exitMode, afterLoop); - it->second = exitMode; - return it->second; - } - - case ShaderOpcodes::END: it->second = ExitMode::AlwaysEnd; return it->second; - default: break; - } - } - - // A function without control flow instructions will always reach its "return point" and return - it->second = ExitMode::AlwaysReturn; - return it->second; -} - -std::pair ShaderDecompiler::compileRange(const AddressRange& range) { - u32 pc = range.start; - const u32 end = range.end >= range.start ? range.end : PICAShader::maxInstructionCount; - bool finished = false; - - while (pc < end && !finished) { - compileInstruction(pc, finished); - } - - return std::make_pair(pc, finished); -} - -const Function* ShaderDecompiler::findFunction(const AddressRange& range) { - for (const Function& func : controlFlow.functions) { - if (range.start == func.start && range.end == func.end) { - return &func; - } - } - - return nullptr; -} - -void ShaderDecompiler::writeAttributes() { - // Annoyingly, GLES does not support having an array as an input attribute, so declare each attribute separately for now - decompiledShader += R"( - layout(location = 0) in vec4 attr0; - layout(location = 1) in vec4 attr1; - layout(location = 2) in vec4 attr2; - layout(location = 3) in vec4 attr3; - layout(location = 4) in vec4 attr4; - layout(location = 5) in vec4 attr5; - layout(location = 6) in vec4 attr6; - layout(location = 7) in vec4 attr7; - layout(location = 8) in vec4 attr8; - layout(location = 9) in vec4 attr9; - layout(location = 10) in vec4 attr10; - layout(location = 11) in vec4 attr11; - layout(location = 12) in vec4 attr12; - layout(location = 13) in vec4 attr13; - layout(location = 14) in vec4 attr14; - layout(location = 15) in vec4 attr15; - - layout(std140) uniform PICAShaderUniforms { - vec4 uniform_f[96]; - uvec4 uniform_i; - uint uniform_bool; - }; - - vec4 temp[16]; - vec4 out_regs[16]; - vec4 dummy_vec = vec4(0.0); - ivec3 addr_reg = ivec3(0); - bvec2 cmp_reg = bvec2(false); - - vec4 uniform_indexed(int source, int offset) { - int clipped_offs = (offset >= -128 && offset <= 127) ? offset : 0; - uint index = uint(clipped_offs + source) & 127u; - return (index < 96u) ? uniform_f[index] : vec4(1.0); - } -)"; -} - -std::string ShaderDecompiler::decompile() { - controlFlow.analyze(shader, entrypoint); - - if (controlFlow.analysisFailed) { - return ""; - } - - compilationError = false; - decompiledShader.clear(); - // Reserve some memory for the shader string to avoid memory allocations - decompiledShader.reserve(256 * 1024); - - switch (api) { - case API::GL: decompiledShader += "#version 410 core\n"; break; - case API::GLES: decompiledShader += "#version 300 es\nprecision mediump float;\nprecision mediump int;\n"; break; - default: break; - } - - writeAttributes(); - - if (config.accurateShaderMul) { - // Safe multiplication handler from Citra: Handles the PICA's 0 * inf = 0 edge case - decompiledShader += R"( - vec4 safe_mul(vec4 a, vec4 b) { - vec4 res = a * b; - return mix(res, mix(mix(vec4(0.0), res, isnan(b)), res, isnan(a)), isnan(res)); - } - )"; - } - - // Forward declare every generated function first so that we can easily call anything from anywhere. - for (auto& func : controlFlow.functions) { - decompiledShader += func.getForwardDecl(); - } - - decompiledShader += "void pica_shader_main() {\n"; - AddressRange mainFunctionRange(entrypoint, PICAShader::maxInstructionCount); - auto mainFunc = findFunction(mainFunctionRange); - - decompiledShader += mainFunc->getCallStatement() + ";\n}\n"; - - for (const Function& func : controlFlow.functions) { - if (func.outLabels.empty()) { - decompiledShader += fmt::format("bool {}() {{\n", func.getIdentifier()); - - auto [pc, finished] = compileRange(AddressRange(func.start, func.end)); - if (!finished) { - decompiledShader += "return false;"; - } - - decompiledShader += "}\n"; - } else { - auto labels = func.outLabels; - labels.insert(func.start); - - // If a function has jumps and "labels", this needs to be emulated using a switch-case, with the variable being switched on being the - // current PC - decompiledShader += fmt::format("bool {}() {{\n", func.getIdentifier()); - decompiledShader += fmt::format("uint pc = {}u;\n", func.start); - decompiledShader += "while(true){\nswitch(pc){\n"; - - for (u32 label : labels) { - decompiledShader += fmt::format("case {}u: {{", label); - // Fetch the next label whose address > label - auto it = labels.lower_bound(label + 1); - u32 next = (it == labels.end()) ? func.end : *it; - - auto [endPC, finished] = compileRange(AddressRange(label, next)); - if (endPC > next && !finished) { - labels.insert(endPC); - decompiledShader += fmt::format("pc = {}u; break;", endPC); - } - - // Fallthrough to next label - decompiledShader += "}\n"; - } - - decompiledShader += "default: return false;\n"; - // Exit the switch and loop - decompiledShader += "} }\n"; - - // Exit the function - decompiledShader += "return false;\n"; - decompiledShader += "}\n"; - } - } - - // We allow some leeway for "compilation errors" in addition to control flow errors, in cases where eg an unimplemented instruction - // or an instruction that we can't emulate in GLSL is found in the instruction stream. Just like control flow errors, these return an empty string - // and the renderer core will decide to use CPU shaders instead - if (compilationError) [[unlikely]] { - return ""; - } - - return decompiledShader; -} - -std::string ShaderDecompiler::getSource(u32 source, [[maybe_unused]] u32 index) const { - if (source < 0x10) { - return "attr" + std::to_string(source); - } else if (source < 0x20) { - return "temp[" + std::to_string(source - 0x10) + "]"; - } else { - const usize floatIndex = (source - 0x20) & 0x7f; - - if (index == 0) { - if (floatIndex >= 96) [[unlikely]] { - return "dummy_vec"; - } - return "uniform_f[" + std::to_string(floatIndex) + "]"; - } else { - static constexpr std::array offsets = {"0", "addr_reg.x", "addr_reg.y", "addr_reg.z"}; - return fmt::format("uniform_indexed({}, {})", floatIndex, offsets[index]); - } - } -} - -std::string ShaderDecompiler::getDest(u32 dest) const { - if (dest < 0x10) { - return "out_regs[" + std::to_string(dest) + "]"; - } else if (dest < 0x20) { - return "temp[" + std::to_string(dest - 0x10) + "]"; - } else { - return "dummy_vec"; - } -} - -std::string ShaderDecompiler::getSwizzlePattern(u32 swizzle) const { - // If the swizzle field is this value then the swizzle pattern is .xyzw so we don't need a shuffle - static constexpr uint noSwizzle = 0x1B; - if (swizzle == noSwizzle) { - return ""; - } - - static constexpr std::array names = {'x', 'y', 'z', 'w'}; - std::string ret(". "); - - for (int i = 0; i < 4; i++) { - ret[3 - i + 1] = names[swizzle & 0x3]; - swizzle >>= 2; - } - - return ret; -} - -std::string ShaderDecompiler::getDestSwizzle(u32 destinationMask) const { - std::string ret = "."; - if (destinationMask & 0b1000) { - ret += "x"; - } - - if (destinationMask & 0b100) { - ret += "y"; - } - - if (destinationMask & 0b10) { - ret += "z"; - } - - if (destinationMask & 0b1) { - ret += "w"; - } - - return ret; -} - -void ShaderDecompiler::setDest(u32 operandDescriptor, const std::string& dest, const std::string& value) { - u32 destinationMask = operandDescriptor & 0xF; - - std::string destSwizzle = getDestSwizzle(destinationMask); - // We subtract 1 for the "." character of the swizzle descriptor - u32 writtenLaneCount = destSwizzle.size() - 1; - - // All lanes are masked out, so the operation is a nop. - if (writtenLaneCount == 0) { - return; - } - - // Don't write destination swizzle if all lanes are getting written to - decompiledShader += fmt::format("{}{} = ", dest, writtenLaneCount == 4 ? "" : destSwizzle); - if (writtenLaneCount <= 3) { - decompiledShader += fmt::format("({}){};\n", value, destSwizzle); - } else if (writtenLaneCount == 4) { - decompiledShader += fmt::format("{};\n", value); - } -} - -void ShaderDecompiler::compileInstruction(u32& pc, bool& finished) { - const u32 instruction = shader.loadedShader[pc]; - const u32 opcode = instruction >> 26; - - if (usesCommonEncoding(instruction)) { - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x7f]; - const bool invertSources = (opcode == ShaderOpcodes::SLTI || opcode == ShaderOpcodes::SGEI || opcode == ShaderOpcodes::DPHI); - - // src1 and src2 indexes depend on whether this is one of the inverting instructions or not - const u32 src1Index = invertSources ? getBits<14, 5>(instruction) : getBits<12, 7>(instruction); - const u32 src2Index = invertSources ? getBits<7, 7>(instruction) : getBits<7, 5>(instruction); - - const u32 idx = getBits<19, 2>(instruction); - const u32 destIndex = getBits<21, 5>(instruction); - - const bool negate1 = (getBit<4>(operandDescriptor)) != 0; - const u32 swizzle1 = getBits<5, 8>(operandDescriptor); - const bool negate2 = (getBit<13>(operandDescriptor)) != 0; - const u32 swizzle2 = getBits<14, 8>(operandDescriptor); - - std::string src1 = negate1 ? "-" : ""; - src1 += getSource(src1Index, invertSources ? 0 : idx); - src1 += getSwizzlePattern(swizzle1); - - std::string src2 = negate2 ? "-" : ""; - src2 += getSource(src2Index, invertSources ? idx : 0); - src2 += getSwizzlePattern(swizzle2); - - std::string dest = getDest(destIndex); - - switch (opcode) { - case ShaderOpcodes::MOV: setDest(operandDescriptor, dest, src1); break; - case ShaderOpcodes::ADD: setDest(operandDescriptor, dest, fmt::format("{} + {}", src1, src2)); break; - case ShaderOpcodes::MUL: - if (!config.accurateShaderMul) { - setDest(operandDescriptor, dest, fmt::format("{} * {}", src1, src2)); - } else { - setDest(operandDescriptor, dest, fmt::format("safe_mul({}, {})", src1, src2)); - } - break; - case ShaderOpcodes::MAX: setDest(operandDescriptor, dest, fmt::format("max({}, {})", src1, src2)); break; - case ShaderOpcodes::MIN: setDest(operandDescriptor, dest, fmt::format("min({}, {})", src1, src2)); break; - - case ShaderOpcodes::DP3: - if (!config.accurateShaderMul) { - setDest(operandDescriptor, dest, fmt::format("vec4(dot({}.xyz, {}.xyz))", src1, src2)); - } else { - // A dot product between a and b is equivalent to the per-lane multiplication of a and b followed by a dot product with vec3(1.0) - setDest(operandDescriptor, dest, fmt::format("vec4(dot(safe_mul({}, {}).xyz, vec3(1.0)))", src1, src2)); - } - break; - case ShaderOpcodes::DP4: - if (!config.accurateShaderMul) { - setDest(operandDescriptor, dest, fmt::format("vec4(dot({}, {}))", src1, src2)); - } else { - // A dot product between a and b is equivalent to the per-lane multiplication of a and b followed by a dot product with vec4(1.0) - setDest(operandDescriptor, dest, fmt::format("vec4(dot(safe_mul({}, {}), vec4(1.0)))", src1, src2)); - } - break; - case ShaderOpcodes::FLR: setDest(operandDescriptor, dest, fmt::format("floor({})", src1)); break; - case ShaderOpcodes::RSQ: setDest(operandDescriptor, dest, fmt::format("vec4(inversesqrt({}.x))", src1)); break; - case ShaderOpcodes::RCP: setDest(operandDescriptor, dest, fmt::format("vec4(1.0 / {}.x)", src1)); break; - case ShaderOpcodes::LG2: setDest(operandDescriptor, dest, fmt::format("vec4(log2({}.x))", src1)); break; - case ShaderOpcodes::EX2: setDest(operandDescriptor, dest, fmt::format("vec4(exp2({}.x))", src1)); break; - - case ShaderOpcodes::SLT: - case ShaderOpcodes::SLTI: setDest(operandDescriptor, dest, fmt::format("vec4(lessThan({}, {}))", src1, src2)); break; - - case ShaderOpcodes::SGE: - case ShaderOpcodes::SGEI: setDest(operandDescriptor, dest, fmt::format("vec4(greaterThanEqual({}, {}))", src1, src2)); break; - - case ShaderOpcodes::DPH: - case ShaderOpcodes::DPHI: - if (!config.accurateShaderMul) { - setDest(operandDescriptor, dest, fmt::format("vec4(dot(vec4({}.xyz, 1.0), {}))", src1, src2)); - } else { - // A dot product between a and b is equivalent to the per-lane multiplication of a and b followed by a dot product with vec4(1.0) - setDest(operandDescriptor, dest, fmt::format("vec4(dot(safe_mul(vec4({}.xyz, 1.0), {}), vec4(1.0)))", src1, src2)); - } - break; - - case ShaderOpcodes::CMP1: - case ShaderOpcodes::CMP2: { - static constexpr std::array operators = { - // The last 2 operators always return true and are handled specially - "==", "!=", "<", "<=", ">", ">=", "", "", - }; - - const u32 cmpY = getBits<21, 3>(instruction); - const u32 cmpX = getBits<24, 3>(instruction); - - // Compare x first - if (cmpX >= 6) { - decompiledShader += "cmp_reg.x = true;\n"; - } else { - decompiledShader += fmt::format("cmp_reg.x = {}.x {} {}.x;\n", src1, operators[cmpX], src2); - } - - // Then compare Y - if (cmpY >= 6) { - decompiledShader += "cmp_reg.y = true;\n"; - } else { - decompiledShader += fmt::format("cmp_reg.y = {}.y {} {}.y;\n", src1, operators[cmpY], src2); - } - break; - } - - case ShaderOpcodes::MOVA: { - const bool writeX = getBit<3>(operandDescriptor); // Should we write the x component of the address register? - const bool writeY = getBit<2>(operandDescriptor); - - if (writeX && writeY) { - decompiledShader += fmt::format("addr_reg.xy = ivec2({}.xy);\n", src1); - } else if (writeX) { - decompiledShader += fmt::format("addr_reg.x = int({}.x);\n", src1); - } else if (writeY) { - decompiledShader += fmt::format("addr_reg.y = int({}.y);\n", src1); - } - break; - } - - default: - Helpers::warn("GLSL recompiler: Unknown common opcode: %02X. Falling back to CPU shaders", opcode); - compilationError = true; - break; - } - } else if (opcode >= 0x30 && opcode <= 0x3F) { // MAD and MADI - const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x1f]; - const bool isMADI = getBit<29>(instruction) == 0; // We detect MADI based on bit 29 of the instruction - - // src1 and src2 indexes depend on whether this is one of the inverting instructions or not - const u32 src1Index = getBits<17, 5>(instruction); - const u32 src2Index = isMADI ? getBits<12, 5>(instruction) : getBits<10, 7>(instruction); - const u32 src3Index = isMADI ? getBits<5, 7>(instruction) : getBits<5, 5>(instruction); - const u32 idx = getBits<22, 2>(instruction); - const u32 destIndex = getBits<24, 5>(instruction); - - const bool negate1 = (getBit<4>(operandDescriptor)) != 0; - const u32 swizzle1 = getBits<5, 8>(operandDescriptor); - const bool negate2 = (getBit<13>(operandDescriptor)) != 0; - const u32 swizzle2 = getBits<14, 8>(operandDescriptor); - - const bool negate3 = (getBit<22>(operandDescriptor)) != 0; - const u32 swizzle3 = getBits<23, 8>(operandDescriptor); - - std::string src1 = negate1 ? "-" : ""; - src1 += getSource(src1Index, 0); - src1 += getSwizzlePattern(swizzle1); - - std::string src2 = negate2 ? "-" : ""; - src2 += getSource(src2Index, isMADI ? 0 : idx); - src2 += getSwizzlePattern(swizzle2); - - std::string src3 = negate3 ? "-" : ""; - src3 += getSource(src3Index, isMADI ? idx : 0); - src3 += getSwizzlePattern(swizzle3); - - std::string dest = getDest(destIndex); - if (!config.accurateShaderMul) { - setDest(operandDescriptor, dest, fmt::format("{} * {} + {}", src1, src2, src3)); - } else { - setDest(operandDescriptor, dest, fmt::format("safe_mul({}, {}) + {}", src1, src2, src3)); - } - } else { - switch (opcode) { - case ShaderOpcodes::JMPC: { - const u32 dest = getBits<10, 12>(instruction); - const u32 condOp = getBits<22, 2>(instruction); - const uint refY = getBit<24>(instruction); - const uint refX = getBit<25>(instruction); - const char* condition = getCondition(condOp, refX, refY); - - decompiledShader += fmt::format("if ({}) {{ pc = {}u; break; }}\n", condition, dest); - break; - } - - case ShaderOpcodes::JMPU: { - const u32 dest = getBits<10, 12>(instruction); - const u32 bit = getBits<22, 4>(instruction); // Bit of the bool uniform to check - const u32 mask = 1u << bit; - const u32 test = (instruction & 1) ^ 1; // If the LSB is 0 we jump if bit = 1, otherwise 0 - - decompiledShader += fmt::format("if ((uniform_bool & {}u) {} 0u) {{ pc = {}u; break; }}\n", mask, (test != 0) ? "!=" : "==", dest); - break; - } - - case ShaderOpcodes::IFU: - case ShaderOpcodes::IFC: { - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - const Function* conditionalFunc = findFunction(AddressRange(pc + 1, dest)); - - if (opcode == ShaderOpcodes::IFC) { - const u32 condOp = getBits<22, 2>(instruction); - const uint refY = getBit<24>(instruction); - const uint refX = getBit<25>(instruction); - const char* condition = getCondition(condOp, refX, refY); - - decompiledShader += fmt::format("if ({}) {{", condition); - } else { - const u32 bit = getBits<22, 4>(instruction); // Bit of the bool uniform to check - const u32 mask = 1u << bit; - - decompiledShader += fmt::format("if ((uniform_bool & {}u) != 0u) {{", mask); - } - - callFunction(*conditionalFunc); - decompiledShader += "}\n"; - - pc = dest; - if (num > 0) { - const Function* elseFunc = findFunction(AddressRange(dest, dest + num)); - pc = dest + num; - - decompiledShader += "else { "; - callFunction(*elseFunc); - decompiledShader += "}\n"; - - if (conditionalFunc->exitMode == ExitMode::AlwaysEnd && elseFunc->exitMode == ExitMode::AlwaysEnd) { - finished = true; - return; - } - } - - return; - } - - case ShaderOpcodes::CALL: - case ShaderOpcodes::CALLC: - case ShaderOpcodes::CALLU: { - const u32 num = instruction & 0xff; - const u32 dest = getBits<10, 12>(instruction); - const Function* calledFunc = findFunction(AddressRange(dest, dest + num)); - - // Handle conditions for CALLC/CALLU - if (opcode == ShaderOpcodes::CALLC) { - const u32 condOp = getBits<22, 2>(instruction); - const uint refY = getBit<24>(instruction); - const uint refX = getBit<25>(instruction); - const char* condition = getCondition(condOp, refX, refY); - - decompiledShader += fmt::format("if ({}) {{", condition); - } else if (opcode == ShaderOpcodes::CALLU) { - const u32 bit = getBits<22, 4>(instruction); // Bit of the bool uniform to check - const u32 mask = 1u << bit; - - decompiledShader += fmt::format("if ((uniform_bool & {}u) != 0u) {{", mask); - } - - callFunction(*calledFunc); - - // Close brackets for CALLC/CALLU - if (opcode != ShaderOpcodes::CALL) { - decompiledShader += "}"; - } - - if (opcode == ShaderOpcodes::CALL && calledFunc->exitMode == ExitMode::AlwaysEnd) { - finished = true; - return; - } - break; - } - - case ShaderOpcodes::LOOP: { - const u32 dest = getBits<10, 12>(instruction); - const u32 uniformIndex = getBits<22, 2>(instruction); - - // loop counter = uniform.y - decompiledShader += fmt::format("addr_reg.z = int((uniform_i[{}] >> 8u) & 0xFFu);\n", uniformIndex); - decompiledShader += fmt::format( - "for (uint loopCtr{} = 0u; loopCtr{} <= (uniform_i[{}] & 0xFFu); loopCtr{}++, addr_reg.z += int((uniform_i[{}] >> " - "16u) & 0xFFu)) {{\n", - pc, pc, uniformIndex, pc, uniformIndex - ); - - AddressRange range(pc + 1, dest + 1); - const Function* func = findFunction(range); - callFunction(*func); - decompiledShader += "}\n"; - - // Jump to the end of the loop. We don't want to compile the code inside the loop again. - // This will be incremented by 1 due to the pc++ at the end of this loop. - pc = dest; - - if (func->exitMode == ExitMode::AlwaysEnd) { - finished = true; - return; - } - break; - } - - case ShaderOpcodes::END: - decompiledShader += "return true;\n"; - finished = true; - return; - - case ShaderOpcodes::NOP: break; - - default: - Helpers::warn("GLSL recompiler: Unknown opcode: %02X. Falling back to CPU shaders", opcode); - compilationError = true; - break; - } - } - - pc++; -} - -bool ShaderDecompiler::usesCommonEncoding(u32 instruction) const { - const u32 opcode = instruction >> 26; - switch (opcode) { - case ShaderOpcodes::ADD: - case ShaderOpcodes::CMP1: - case ShaderOpcodes::CMP2: - case ShaderOpcodes::MUL: - case ShaderOpcodes::MIN: - case ShaderOpcodes::MAX: - case ShaderOpcodes::FLR: - case ShaderOpcodes::DP3: - case ShaderOpcodes::DP4: - case ShaderOpcodes::DPH: - case ShaderOpcodes::DPHI: - case ShaderOpcodes::LG2: - case ShaderOpcodes::EX2: - case ShaderOpcodes::RCP: - case ShaderOpcodes::RSQ: - case ShaderOpcodes::MOV: - case ShaderOpcodes::MOVA: - case ShaderOpcodes::SLT: - case ShaderOpcodes::SLTI: - case ShaderOpcodes::SGE: - case ShaderOpcodes::SGEI: - case ShaderOpcodes::LITP: return true; - - default: return false; - } -} - -void ShaderDecompiler::callFunction(const Function& function) { - switch (function.exitMode) { - // This function always ends, so call it and return true to signal that we're gonna be ending the shader - case ExitMode::AlwaysEnd: decompiledShader += function.getCallStatement() + ";\nreturn true;\n"; break; - // This function will potentially end. Call it, see if it returns that it ended, and return that we're ending if it did - case ExitMode::Conditional: decompiledShader += fmt::format("if ({}) {{ return true; }}\n", function.getCallStatement()); break; - // This function will not end. Just call it like a normal function. - default: decompiledShader += function.getCallStatement() + ";\n"; break; - } -} - -std::string ShaderGen::decompileShader(PICAShader& shader, EmulatorConfig& config, u32 entrypoint, API api, Language language) { - ShaderDecompiler decompiler(shader, config, entrypoint, api, language); - - return decompiler.decompile(); -} - -const char* ShaderDecompiler::getCondition(u32 cond, u32 refX, u32 refY) { - static constexpr std::array conditions = { - // ref(Y, X) = (0, 0) - "!all(cmp_reg)", - "all(not(cmp_reg))", - "!cmp_reg.x", - "!cmp_reg.y", - - // ref(Y, X) = (0, 1) - "cmp_reg.x || !cmp_reg.y", - "cmp_reg.x && !cmp_reg.y", - "cmp_reg.x", - "!cmp_reg.y", - - // ref(Y, X) = (1, 0) - "!cmp_reg.x || cmp_reg.y", - "!cmp_reg.x && cmp_reg.y", - "!cmp_reg.x", - "cmp_reg.y", - - // ref(Y, X) = (1, 1) - "any(cmp_reg)", - "all(cmp_reg)", - "cmp_reg.x", - "cmp_reg.y", - }; - const u32 key = (cond & 0b11) | (refX << 2) | (refY << 3); - - return conditions[key]; -} diff --git a/src/core/PICA/shader_gen_glsl.cpp b/src/core/PICA/shader_gen_glsl.cpp deleted file mode 100644 index a9ad3a90..00000000 --- a/src/core/PICA/shader_gen_glsl.cpp +++ /dev/null @@ -1,839 +0,0 @@ -#include - -#include - -#include "PICA/pica_frag_config.hpp" -#include "PICA/regs.hpp" -#include "PICA/shader_gen.hpp" - -// We can include the driver headers here since they shouldn't have any actual API-specific code -#include "renderer_gl/gl_driver.hpp" - -using namespace PICA; -using namespace PICA::ShaderGen; - -// Note: We upload global ambient and fog colour as u32 and decode on the GPU -// This shouldn't matter much for GPU performance, especially fog since it's relatively rare -static constexpr const char* uniformDefinition = R"( - struct LightSource { - vec3 specular0; - vec3 specular1; - vec3 diffuse; - vec3 ambient; - vec3 position; - vec3 spotlightDirection; - float distanceAttenuationBias; - float distanceAttenuationScale; - }; - - layout(std140) uniform FragmentUniforms { - int alphaReference; - float depthScale; - float depthOffset; - - vec4 constantColors[6]; - vec4 tevBufferColor; - vec4 clipCoords; - uint globalAmbientLight; - uint inFogColor; - LightSource lightSources[8]; - }; -)"; - -std::string FragmentGenerator::getDefaultVertexShader() { - std::string ret = ""; - // Reserve some space (128KB) in the output string to avoid too many allocations later - ret.reserve(128 * 1024); - - switch (api) { - case API::GL: ret += "#version 410 core"; break; - case API::GLES: ret += "#version 300 es"; break; - default: break; - } - - if (api == API::GLES) { - ret += R"( - #define USING_GLES 1 - - precision mediump int; - precision mediump float; - )"; - } - - ret += uniformDefinition; - - ret += R"( - layout(location = 0) in vec4 a_coords; - layout(location = 1) in vec4 a_quaternion; - layout(location = 2) in vec4 a_vertexColour; - layout(location = 3) in vec2 a_texcoord0; - layout(location = 4) in vec2 a_texcoord1; - layout(location = 5) in float a_texcoord0_w; - layout(location = 6) in vec3 a_view; - layout(location = 7) in vec2 a_texcoord2; - - out vec4 v_quaternion; - out vec4 v_colour; - out vec3 v_texcoord0; - out vec2 v_texcoord1; - out vec3 v_view; - out vec2 v_texcoord2; - - #ifndef USING_GLES - out float gl_ClipDistance[2]; - #endif - - void main() { - gl_Position = a_coords; - vec4 colourAbs = abs(a_vertexColour); - v_colour = min(colourAbs, vec4(1.f)); - - v_texcoord0 = vec3(a_texcoord0.x, 1.0 - a_texcoord0.y, a_texcoord0_w); - v_texcoord1 = vec2(a_texcoord1.x, 1.0 - a_texcoord1.y); - v_texcoord2 = vec2(a_texcoord2.x, 1.0 - a_texcoord2.y); - v_view = a_view; - v_quaternion = a_quaternion; - - #ifndef USING_GLES - gl_ClipDistance[0] = -a_coords.z; - gl_ClipDistance[1] = dot(clipCoords, a_coords); - #endif - } -)"; - - return ret; -} - -std::string FragmentGenerator::generate(const FragmentConfig& config, void* driverInfo) { - std::string ret = ""; - - switch (api) { - case API::GL: ret += "#version 410 core"; break; - case API::GLES: ret += "#version 300 es"; break; - default: break; - } - - // For GLES we need to enable & use the framebuffer fetch extension in order to emulate logic ops - bool emitLogicOps = api == API::GLES && config.outConfig.logicOpMode != PICA::LogicOpMode::Copy && driverInfo != nullptr; - - if (emitLogicOps) { - auto driver = static_cast(driverInfo); - - // If the driver does not support framebuffer fetch at all, don't emit logic op code - if (!driver->supportFbFetch()) { - emitLogicOps = false; - } - - // Figure out which fb fetch extension we have and enable it - else { - if (driver->supportsExtFbFetch) { - ret += "\n#extension GL_EXT_shader_framebuffer_fetch : enable\n#define fb_color fragColor\n"; - } else if (driver->supportsArmFbFetch) { - ret += "\n#extension GL_ARM_shader_framebuffer_fetch : enable\n#define fb_color gl_LastFragColorARM[0]\n"; - } - } - } - - bool unimplementedFlag = false; - if (api == API::GLES) { - ret += R"( - #define USING_GLES 1 - #define fma(a, b, c) ((a) * (b) + (c)) - - precision mediump int; - precision mediump float; - )"; - } - - // Input and output attributes - ret += R"( - in vec4 v_quaternion; - in vec4 v_colour; - in vec3 v_texcoord0; - in vec2 v_texcoord1; - in vec3 v_view; - in vec2 v_texcoord2; - - out vec4 fragColor; - uniform sampler2D u_tex0; - uniform sampler2D u_tex1; - uniform sampler2D u_tex2; - uniform sampler2D u_tex_luts; - )"; - - ret += uniformDefinition; - - if (config.lighting.enable) { - ret += R"( - vec3 rotateVec3ByQuaternion(vec3 v, vec4 q) { - vec3 u = q.xyz; - float s = q.w; - return 2.0 * dot(u, v) * u + (s * s - dot(u, u)) * v + 2.0 * s * cross(u, v); - } - - float lutLookup(uint lut, int index) { - return texelFetch(u_tex_luts, ivec2(index, int(lut)), 0).r; - } - - vec3 regToColor(uint reg) { - return (1.0 / 255.0) * vec3(float((reg >> 20u) & 0xFFu), float((reg >> 10u) & 0xFFu), float(reg & 0xFFu)); - } - )"; - } - - // Emit main function for fragment shader - // When not initialized, source 13 is set to vec4(0.0) and 15 is set to the vertex colour - ret += R"( - void main() { - vec4 combinerOutput = v_colour; - vec4 previousBuffer = vec4(0.0); - vec4 tevNextPreviousBuffer = tevBufferColor; - - vec4 primaryColor = vec4(0.0); - vec4 secondaryColor = vec4(0.0); - )"; - - compileLights(ret, config); - - ret += R"( - vec3 colorOp1 = vec3(0.0); - vec3 colorOp2 = vec3(0.0); - vec3 colorOp3 = vec3(0.0); - - float alphaOp1 = 0.0; - float alphaOp2 = 0.0; - float alphaOp3 = 0.0; - )"; - - // Get original depth value by converting from [near, far] = [0, 1] to [-1, 1] - // We do this by converting to [0, 2] first and subtracting 1 to go to [-1, 1] - ret += R"( - float z_over_w = gl_FragCoord.z * 2.0f - 1.0f; - float depth = z_over_w * depthScale + depthOffset; - )"; - - if (!config.outConfig.depthMapEnable) { - ret += "depth /= gl_FragCoord.w;\n"; - } - - ret += "gl_FragDepth = depth;\n"; - - for (int i = 0; i < 6; i++) { - compileTEV(ret, i, config); - } - - compileFog(ret, config); - applyAlphaTest(ret, config); - - if (!emitLogicOps) { - ret += "fragColor = combinerOutput;\n}"; // End of main function - } else { - compileLogicOps(ret, config); - } - - return ret; -} - -void FragmentGenerator::compileTEV(std::string& shader, int stage, const PICA::FragmentConfig& config) { - const u32* tevValues = config.texConfig.tevConfigs.data() + stage * 4; - - // Pass a 0 to constColor here, as it doesn't matter for compilation - TexEnvConfig tev(tevValues[0], tevValues[1], tevValues[2], 0, tevValues[3]); - - if (!tev.isPassthroughStage()) { - // Get color operands - shader += "colorOp1 = "; - getColorOperand(shader, tev.colorSource1, tev.colorOperand1, stage, config); - - shader += ";\ncolorOp2 = "; - getColorOperand(shader, tev.colorSource2, tev.colorOperand2, stage, config); - - shader += ";\ncolorOp3 = "; - getColorOperand(shader, tev.colorSource3, tev.colorOperand3, stage, config); - - shader += ";\nvec3 outputColor" + std::to_string(stage) + " = clamp("; - getColorOperation(shader, tev.colorOp); - shader += ", vec3(0.0), vec3(1.0));\n"; - - if (tev.colorOp == TexEnvConfig::Operation::Dot3RGBA) { - // Dot3 RGBA also writes to the alpha component so we don't need to do anything more - shader += "float outputAlpha" + std::to_string(stage) + " = outputColor" + std::to_string(stage) + ".x;\n"; - } else { - // Get alpha operands - shader += "alphaOp1 = "; - getAlphaOperand(shader, tev.alphaSource1, tev.alphaOperand1, stage, config); - - shader += ";\nalphaOp2 = "; - getAlphaOperand(shader, tev.alphaSource2, tev.alphaOperand2, stage, config); - - shader += ";\nalphaOp3 = "; - getAlphaOperand(shader, tev.alphaSource3, tev.alphaOperand3, stage, config); - - shader += ";\nfloat outputAlpha" + std::to_string(stage) + " = clamp("; - getAlphaOperation(shader, tev.alphaOp); - // Clamp the alpha value to [0.0, 1.0] - shader += ", 0.0, 1.0);\n"; - } - - shader += "combinerOutput = vec4(clamp(outputColor" + std::to_string(stage) + " * " + std::to_string(tev.getColorScale()) + - ".0, vec3(0.0), vec3(1.0)), clamp(outputAlpha" + std::to_string(stage) + " * " + std::to_string(tev.getAlphaScale()) + - ".0, 0.0, 1.0));\n"; - } - - shader += "previousBuffer = tevNextPreviousBuffer;\n\n"; - - // Update the "next previous buffer" if necessary - const u32 textureEnvUpdateBuffer = config.texConfig.texEnvUpdateBuffer; - if (stage < 4) { - // Check whether to update rgb - if ((textureEnvUpdateBuffer & (0x100 << stage))) { - shader += "tevNextPreviousBuffer.rgb = combinerOutput.rgb;\n"; - } - - // And whether to update alpha - if ((textureEnvUpdateBuffer & (0x1000u << stage))) { - shader += "tevNextPreviousBuffer.a = combinerOutput.a;\n"; - } - } -} - -void FragmentGenerator::getColorOperand(std::string& shader, TexEnvConfig::Source source, TexEnvConfig::ColorOperand color, int index, const PICA::FragmentConfig& config) { - using OperandType = TexEnvConfig::ColorOperand; - - // For inverting operands, add the 1.0 - x subtraction - if (color == OperandType::OneMinusSourceColor || color == OperandType::OneMinusSourceRed || color == OperandType::OneMinusSourceGreen || - color == OperandType::OneMinusSourceBlue || color == OperandType::OneMinusSourceAlpha) { - shader += "vec3(1.0, 1.0, 1.0) - "; - } - - switch (color) { - case OperandType::SourceColor: - case OperandType::OneMinusSourceColor: - getSource(shader, source, index, config); - shader += ".rgb"; - break; - - case OperandType::SourceRed: - case OperandType::OneMinusSourceRed: - getSource(shader, source, index, config); - shader += ".rrr"; - break; - - case OperandType::SourceGreen: - case OperandType::OneMinusSourceGreen: - getSource(shader, source, index, config); - shader += ".ggg"; - break; - - case OperandType::SourceBlue: - case OperandType::OneMinusSourceBlue: - getSource(shader, source, index, config); - shader += ".bbb"; - break; - - case OperandType::SourceAlpha: - case OperandType::OneMinusSourceAlpha: - getSource(shader, source, index, config); - shader += ".aaa"; - break; - - default: - shader += "vec3(1.0, 1.0, 1.0)"; - Helpers::warn("FragmentGenerator: Invalid TEV color operand"); - break; - } -} - -void FragmentGenerator::getAlphaOperand(std::string& shader, TexEnvConfig::Source source, TexEnvConfig::AlphaOperand color, int index, const PICA::FragmentConfig& config) { - using OperandType = TexEnvConfig::AlphaOperand; - - // For inverting operands, add the 1.0 - x subtraction - if (color == OperandType::OneMinusSourceRed || color == OperandType::OneMinusSourceGreen || color == OperandType::OneMinusSourceBlue || - color == OperandType::OneMinusSourceAlpha) { - shader += "1.0 - "; - } - - switch (color) { - case OperandType::SourceRed: - case OperandType::OneMinusSourceRed: - getSource(shader, source, index, config); - shader += ".r"; - break; - - case OperandType::SourceGreen: - case OperandType::OneMinusSourceGreen: - getSource(shader, source, index, config); - shader += ".g"; - break; - - case OperandType::SourceBlue: - case OperandType::OneMinusSourceBlue: - getSource(shader, source, index, config); - shader += ".b"; - break; - - case OperandType::SourceAlpha: - case OperandType::OneMinusSourceAlpha: - getSource(shader, source, index, config); - shader += ".a"; - break; - - default: - shader += "1.0"; - Helpers::warn("FragmentGenerator: Invalid TEV color operand"); - break; - } -} - -void FragmentGenerator::getSource(std::string& shader, TexEnvConfig::Source source, int index, const PICA::FragmentConfig& config) { - switch (source) { - case TexEnvConfig::Source::PrimaryColor: shader += "v_colour"; break; - case TexEnvConfig::Source::Texture0: shader += "texture(u_tex0, v_texcoord0.xy)"; break; - case TexEnvConfig::Source::Texture1: shader += "texture(u_tex1, v_texcoord1)"; break; - case TexEnvConfig::Source::Texture2: { - // If bit 13 in texture config is set then we use the texcoords for texture 1, otherwise for texture 2 - if (Helpers::getBit<13>(config.texConfig.texUnitConfig)) { - shader += "texture(u_tex2, v_texcoord1)"; - } else { - shader += "texture(u_tex2, v_texcoord2)"; - } - break; - } - - case TexEnvConfig::Source::Previous: shader += "combinerOutput"; break; - case TexEnvConfig::Source::Constant: shader += "constantColors[" + std::to_string(index) + "]"; break; - case TexEnvConfig::Source::PreviousBuffer: shader += "previousBuffer"; break; - - // Lighting - case TexEnvConfig::Source::PrimaryFragmentColor: shader += "primaryColor"; break; - case TexEnvConfig::Source::SecondaryFragmentColor: shader += "secondaryColor"; break; - - default: - Helpers::warn("Unimplemented TEV source: %d", static_cast(source)); - shader += "vec4(1.0, 1.0, 1.0, 1.0)"; - break; - } -} - -void FragmentGenerator::getColorOperation(std::string& shader, TexEnvConfig::Operation op) { - switch (op) { - case TexEnvConfig::Operation::Replace: shader += "colorOp1"; break; - case TexEnvConfig::Operation::Add: shader += "colorOp1 + colorOp2"; break; - case TexEnvConfig::Operation::AddSigned: shader += "colorOp1 + colorOp2 - vec3(0.5)"; break; - case TexEnvConfig::Operation::Subtract: shader += "colorOp1 - colorOp2"; break; - case TexEnvConfig::Operation::Modulate: shader += "colorOp1 * colorOp2"; break; - case TexEnvConfig::Operation::Lerp: shader += "mix(colorOp2, colorOp1, colorOp3)"; break; - - case TexEnvConfig::Operation::AddMultiply: shader += "min(colorOp1 + colorOp2, vec3(1.0)) * colorOp3"; break; - case TexEnvConfig::Operation::MultiplyAdd: shader += "fma(colorOp1, colorOp2, colorOp3)"; break; - case TexEnvConfig::Operation::Dot3RGB: - case TexEnvConfig::Operation::Dot3RGBA: shader += "vec3(4.0 * dot(colorOp1 - vec3(0.5), colorOp2 - vec3(0.5)))"; break; - default: - Helpers::warn("FragmentGenerator: Unimplemented color op"); - shader += "vec3(1.0)"; - break; - } -} - -void FragmentGenerator::getAlphaOperation(std::string& shader, TexEnvConfig::Operation op) { - switch (op) { - case TexEnvConfig::Operation::Replace: shader += "alphaOp1"; break; - case TexEnvConfig::Operation::Add: shader += "alphaOp1 + alphaOp2"; break; - case TexEnvConfig::Operation::AddSigned: shader += "alphaOp1 + alphaOp2 - 0.5"; break; - case TexEnvConfig::Operation::Subtract: shader += "alphaOp1 - alphaOp2"; break; - case TexEnvConfig::Operation::Modulate: shader += "alphaOp1 * alphaOp2"; break; - case TexEnvConfig::Operation::Lerp: shader += "mix(alphaOp2, alphaOp1, alphaOp3)"; break; - - case TexEnvConfig::Operation::AddMultiply: shader += "min(alphaOp1 + alphaOp2, 1.0) * alphaOp3"; break; - case TexEnvConfig::Operation::MultiplyAdd: shader += "fma(alphaOp1, alphaOp2, alphaOp3)"; break; - default: - Helpers::warn("FragmentGenerator: Unimplemented alpha op"); - shader += "1.0"; - break; - } -} - -void FragmentGenerator::applyAlphaTest(std::string& shader, const PICA::FragmentConfig& config) { - const CompareFunction function = config.outConfig.alphaTestFunction; - - // Alpha test disabled - if (function == CompareFunction::Always) { - return; - } - - shader += "int testingAlpha = int(combinerOutput.a * 255.0);\n"; - shader += "if ("; - switch (function) { - case CompareFunction::Never: shader += "true"; break; - case CompareFunction::Always: shader += "false"; break; - case CompareFunction::Equal: shader += "testingAlpha != alphaReference"; break; - case CompareFunction::NotEqual: shader += "testingAlpha == alphaReference"; break; - case CompareFunction::Less: shader += "testingAlpha >= alphaReference"; break; - case CompareFunction::LessOrEqual: shader += "testingAlpha > alphaReference"; break; - case CompareFunction::Greater: shader += "testingAlpha <= alphaReference"; break; - case CompareFunction::GreaterOrEqual: shader += "testingAlpha < alphaReference"; break; - - default: - Helpers::warn("Unimplemented alpha test function"); - shader += "false"; - break; - } - - shader += ") { discard; }\n"; -} - -void FragmentGenerator::compileLights(std::string& shader, const PICA::FragmentConfig& config) { - if (!config.lighting.enable) { - return; - } - - // Currently ignore bump mode - shader += "vec3 normal = rotateVec3ByQuaternion(vec3(0.0, 0.0, 1.0), v_quaternion);\n"; - shader += R"( - vec4 diffuse_sum = vec4(0.0, 0.0, 0.0, 1.0); - vec4 specular_sum = vec4(0.0, 0.0, 0.0, 1.0); - vec3 light_position, light_vector, half_vector, specular0, specular1, reflected_color; - - float light_distance, NdotL, light_factor, geometric_factor, distance_attenuation, distance_att_delta; - float spotlight_attenuation, specular0_dist, specular1_dist; - float lut_lookup_result, lut_lookup_delta; - int lut_lookup_index; - )"; - - uint lightID = 0; - - for (int i = 0; i < config.lighting.lightNum; i++) { - lightID = config.lighting.lights[i].num; - - const auto& lightConfig = config.lighting.lights[i]; - shader += "light_position = lightSources[" + std::to_string(lightID) + "].position;\n"; - - if (lightConfig.directional) { // Directional lighting - shader += "light_vector = light_position;\n"; - } else { // Positional lighting - shader += "light_vector = light_position + v_view;\n"; - } - - shader += R"( - light_distance = length(light_vector); - light_vector = normalize(light_vector); - half_vector = light_vector + normalize(v_view); - - distance_attenuation = 1.0; - NdotL = dot(normal, light_vector); - )"; - - shader += lightConfig.twoSidedDiffuse ? "NdotL = abs(NdotL);\n" : "NdotL = max(NdotL, 0.0);\n"; - - if (lightConfig.geometricFactor0 || lightConfig.geometricFactor1) { - shader += R"( - geometric_factor = dot(half_vector, half_vector); - geometric_factor = (geometric_factor == 0.0) ? 0.0 : min(NdotL / geometric_factor, 1.0); - )"; - } - - if (lightConfig.distanceAttenuationEnable) { - shader += "distance_att_delta = clamp(light_distance * lightSources[" + std::to_string(lightID) + - "].distanceAttenuationScale + lightSources[" + std::to_string(lightID) + "].distanceAttenuationBias, 0.0, 1.0);\n"; - - shader += "distance_attenuation = lutLookup(" + std::to_string(16 + lightID) + - "u, int(clamp(floor(distance_att_delta * 256.0), 0.0, 255.0)));\n"; - } - - compileLUTLookup(shader, config, i, spotlightLutIndex); - shader += "spotlight_attenuation = lut_lookup_result;\n"; - - compileLUTLookup(shader, config, i, PICA::Lights::LUT_D0); - shader += "specular0_dist = lut_lookup_result;\n"; - - compileLUTLookup(shader, config, i, PICA::Lights::LUT_D1); - shader += "specular1_dist = lut_lookup_result;\n"; - - compileLUTLookup(shader, config, i, PICA::Lights::LUT_RR); - shader += "reflected_color.r = lut_lookup_result;\n"; - - if (isSamplerEnabled(config.lighting.config, PICA::Lights::LUT_RG)) { - compileLUTLookup(shader, config, i, PICA::Lights::LUT_RG); - shader += "reflected_color.g = lut_lookup_result;\n"; - } else { - shader += "reflected_color.g = reflected_color.r;\n"; - } - - if (isSamplerEnabled(config.lighting.config, PICA::Lights::LUT_RB)) { - compileLUTLookup(shader, config, i, PICA::Lights::LUT_RB); - shader += "reflected_color.b = lut_lookup_result;\n"; - } else { - shader += "reflected_color.b = reflected_color.r;\n"; - } - - shader += "specular0 = lightSources[" + std::to_string(lightID) + "].specular0 * specular0_dist;\n"; - if (lightConfig.geometricFactor0) { - shader += "specular0 *= geometric_factor;\n"; - } - - shader += "specular1 = lightSources[" + std::to_string(lightID) + "].specular1 * specular1_dist * reflected_color;\n"; - if (lightConfig.geometricFactor1) { - shader += "specular1 *= geometric_factor;\n"; - } - - shader += "light_factor = distance_attenuation * spotlight_attenuation;\n"; - - if (config.lighting.clampHighlights) { - shader += "specular_sum.rgb += light_factor * (NdotL == 0.0 ? 0.0 : 1.0) * (specular0 + specular1);\n"; - } else { - shader += "specular_sum.rgb += light_factor * (specular0 + specular1);\n"; - } - - shader += "diffuse_sum.rgb += light_factor * (lightSources[" + std::to_string(lightID) + "].ambient + lightSources[" + - std::to_string(lightID) + "].diffuse * NdotL);\n"; - } - - if (config.lighting.enablePrimaryAlpha || config.lighting.enableSecondaryAlpha) { - compileLUTLookup(shader, config, config.lighting.lightNum - 1, PICA::Lights::LUT_FR); - shader += "float fresnel_factor = lut_lookup_result;\n"; - } - - if (config.lighting.enablePrimaryAlpha) { - shader += "diffuse_sum.a = fresnel_factor;\n"; - } - - if (config.lighting.enableSecondaryAlpha) { - shader += "specular_sum.a = fresnel_factor;\n"; - } - - shader += R"( - vec4 global_ambient = vec4(regToColor(globalAmbientLight), 1.0); - - primaryColor = clamp(global_ambient + diffuse_sum, vec4(0.0), vec4(1.0)); - secondaryColor = clamp(specular_sum, vec4(0.0), vec4(1.0)); - )"; -} - -bool FragmentGenerator::isSamplerEnabled(u32 environmentID, u32 lutID) { - static constexpr bool samplerEnabled[9 * 7] = { - // D0 D1 SP FR RB RG RR - true, false, true, false, false, false, true, // Configuration 0: D0, SP, RR - false, false, true, true, false, false, true, // Configuration 1: FR, SP, RR - true, true, false, false, false, false, true, // Configuration 2: D0, D1, RR - true, true, false, true, false, false, false, // Configuration 3: D0, D1, FR - true, true, true, false, true, true, true, // Configuration 4: All except for FR - true, false, true, true, true, true, true, // Configuration 5: All except for D1 - true, true, true, true, false, false, true, // Configuration 6: All except for RB and RG - false, false, false, false, false, false, false, // Configuration 7: Unused - true, true, true, true, true, true, true, // Configuration 8: All - }; - - return samplerEnabled[environmentID * 7 + lutID]; -} - -void FragmentGenerator::compileLUTLookup(std::string& shader, const PICA::FragmentConfig& config, u32 lightIndex, u32 lutID) { - const LightingLUTConfig& lut = config.lighting.luts[lutID]; - uint lightID = config.lighting.lights[lightIndex].num; - uint lutIndex = 0; - bool lutEnabled = false; - - if (lutID == spotlightLutIndex) { - // These are the spotlight attenuation LUTs - lutIndex = 8u + lightID; - lutEnabled = config.lighting.lights[lightIndex].spotAttenuationEnable; - } else if (lutID <= 6) { - lutIndex = lutID; - lutEnabled = lut.enable; - } else { - Helpers::warn("Shadergen: Unimplemented LUT value"); - } - - const bool samplerEnabled = isSamplerEnabled(config.lighting.config, lutID); - - if (!samplerEnabled || !lutEnabled) { - shader += "lut_lookup_result = 1.0;\n"; - return; - } - - uint scale = lut.scale; - uint inputID = lut.type; - bool absEnabled = lut.absInput; - - switch (inputID) { - case 0: shader += "lut_lookup_delta = dot(normal, normalize(half_vector));\n"; break; - case 1: shader += "lut_lookup_delta = dot(normalize(v_view), normalize(half_vector));\n"; break; - case 2: shader += "lut_lookup_delta = dot(normal, normalize(v_view));\n"; break; - case 3: shader += "lut_lookup_delta = dot(normal, light_vector);\n"; break; - case 4: shader += "lut_lookup_delta = dot(light_vector, lightSources[" + std ::to_string(lightID) + "].spotlightDirection);\n"; break; - - default: - Helpers::warn("Shadergen: Unimplemented LUT select %d", inputID); - shader += "lut_lookup_delta = 1.0;\n"; - break; - } - - static constexpr float scales[] = {1.0f, 2.0f, 4.0f, 8.0f, 0.0f, 0.0f, 0.25f, 0.5f}; - - if (absEnabled) { - bool twoSidedDiffuse = config.lighting.lights[lightIndex].twoSidedDiffuse; - shader += twoSidedDiffuse ? "lut_lookup_delta = abs(lut_lookup_delta);\n" : "lut_lookup_delta = max(lut_lookup_delta, 0.0);\n"; - shader += "lut_lookup_result = lutLookup(" + std::to_string(lutIndex) + "u, int(clamp(floor(lut_lookup_delta * 256.0), 0.0, 255.0)));\n"; - if (scale != 0) { - shader += "lut_lookup_result *= " + std::to_string(scales[scale]) + ";\n"; - } - } else { - // Range is [-1, 1] so we need to map it to [0, 1] - shader += "lut_lookup_index = int(clamp(floor(lut_lookup_delta * 128.0), -128.f, 127.f));\n"; - shader += "if (lut_lookup_index < 0) lut_lookup_index += 256;\n"; - shader += "lut_lookup_result = lutLookup(" + std::to_string(lutIndex) + "u, lut_lookup_index);\n"; - if (scale != 0) { - shader += "lut_lookup_result *= " + std::to_string(scales[scale]) + ";\n"; - } - } -} - -void FragmentGenerator::compileFog(std::string& shader, const PICA::FragmentConfig& config) { - if (config.fogConfig.mode != FogMode::Fog) { - return; - } - - if (config.fogConfig.flipDepth) { - shader += "float fog_index = (1.0 - depth) * 128.0;\n"; - } else { - shader += "float fog_index = depth * 128.0;\n"; - } - - shader += "float clamped_index = clamp(floor(fog_index), 0.0, 127.0);"; - shader += "float delta = fog_index - clamped_index;"; - shader += "vec3 fog_color = (1.0 / 255.0) * vec3(float(inFogColor & 0xffu), float((inFogColor >> 8u) & 0xffu), float((inFogColor >> 16u) & 0xffu));"; - shader += "vec2 value = texelFetch(u_tex_luts, ivec2(int(clamped_index), 24), 0).rg;"; // fog LUT is past the light LUTs - shader += "float fog_factor = clamp(value.r + value.g * delta, 0.0, 1.0);"; - shader += "combinerOutput.rgb = mix(fog_color, combinerOutput.rgb, fog_factor);"; -} - -std::string FragmentGenerator::getVertexShaderAccelerated(const std::string& picaSource, const PICA::VertConfig& vertConfig, bool usingUbershader) { - // First, calculate output register -> Fixed function fragment semantics based on the VAO config - // This array contains the mappings for the 32 fixed function semantics (8 variables, with 4 lanes each). - // Each entry is a pair, containing the output reg to use for this semantic (first) and which lane of that register (second) - std::array, 32> outputMappings{}; - // Output registers adjusted according to VS_OUTPUT_MASK, which handles enabling and disabling output attributes - std::array vsOutputRegisters; - - { - uint count = 0; - u16 outputMask = vertConfig.outputMask; - - // See which registers are actually enabled and ignore the disabled ones - for (int i = 0; i < 16; i++) { - if (outputMask & 1) { - vsOutputRegisters[count++] = i; - } - - outputMask >>= 1; - } - - // For the others, map the index to a vs output directly (TODO: What does hw actually do?) - for (; count < 16; count++) { - vsOutputRegisters[count] = count; - } - - for (int i = 0; i < vertConfig.outputCount; i++) { - const u32 config = vertConfig.outmaps[i]; - for (int j = 0; j < 4; j++) { - const u32 mapping = (config >> (j * 8)) & 0x1F; - outputMappings[mapping] = std::make_pair(vsOutputRegisters[i], j); - } - } - } - - auto getSemanticName = [&](u32 semanticIndex) { - auto [reg, lane] = outputMappings[semanticIndex]; - return fmt::format("out_regs[{}][{}]", reg, lane); - }; - - std::string semantics = fmt::format( - R"( - vec4 a_coords = vec4({}, {}, {}, {}); - vec4 a_quaternion = vec4({}, {}, {}, {}); - vec4 a_vertexColour = vec4({}, {}, {}, {}); - vec2 a_texcoord0 = vec2({}, {}); - float a_texcoord0_w = {}; - vec2 a_texcoord1 = vec2({}, {}); - vec2 a_texcoord2 = vec2({}, {}); - vec3 a_view = vec3({}, {}, {}); -)", - getSemanticName(0), getSemanticName(1), getSemanticName(2), getSemanticName(3), getSemanticName(4), getSemanticName(5), getSemanticName(6), - getSemanticName(7), getSemanticName(8), getSemanticName(9), getSemanticName(10), getSemanticName(11), getSemanticName(12), - getSemanticName(13), getSemanticName(16), getSemanticName(14), getSemanticName(15), getSemanticName(22), getSemanticName(23), - getSemanticName(18), getSemanticName(19), getSemanticName(20) - ); - - if (usingUbershader) { - Helpers::panic("Unimplemented: GetVertexShaderAccelerated for ubershader"); - return picaSource; - } else { - // TODO: Uniforms and don't hardcode fixed-function semantic indices... - std::string ret = picaSource; - if (api == API::GLES) { - ret += "\n#define USING_GLES\n"; - } - - ret += uniformDefinition; - - ret += R"( -out vec4 v_quaternion; -out vec4 v_colour; -out vec3 v_texcoord0; -out vec2 v_texcoord1; -out vec3 v_view; -out vec2 v_texcoord2; - -#ifndef USING_GLES - out float gl_ClipDistance[2]; -#endif - -void main() { - pica_shader_main(); -)"; - // Transfer fixed function fragment registers from vertex shader output to the fragment shader - ret += semantics; - - ret += R"( - gl_Position = a_coords; - vec4 colourAbs = abs(a_vertexColour); - v_colour = min(colourAbs, vec4(1.f)); - - v_texcoord0 = vec3(a_texcoord0.x, 1.0 - a_texcoord0.y, a_texcoord0_w); - v_texcoord1 = vec2(a_texcoord1.x, 1.0 - a_texcoord1.y); - v_texcoord2 = vec2(a_texcoord2.x, 1.0 - a_texcoord2.y); - v_view = a_view; - v_quaternion = a_quaternion; - -#ifndef USING_GLES - gl_ClipDistance[0] = -a_coords.z; - gl_ClipDistance[1] = dot(clipCoords, a_coords); -#endif -})"; - return ret; - } -} - -void FragmentGenerator::compileLogicOps(std::string& shader, const PICA::FragmentConfig& config) { - if (api != API::GLES) [[unlikely]] { - Helpers::warn("Shadergen: Unsupported API for compileLogicOps"); - shader += "fragColor = combinerOutput;\n}"; // End of main function - - return; - } - - shader += "fragColor = "; - switch (config.outConfig.logicOpMode) { - case PICA::LogicOpMode::Copy: shader += "combinerOutput"; break; - case PICA::LogicOpMode::Nop: shader += "fb_color"; break; - case PICA::LogicOpMode::Clear: shader += "vec4(0.0)"; break; - case PICA::LogicOpMode::Set: shader += "vec4(1.0)"; break; - case PICA::LogicOpMode::InvertedCopy: shader += "vec4(uvec4(combinerOutput * 255.0) ^ uvec4(0xFFu)) * (1.0 / 255.0)"; break; - - default: - shader += "combinerOutput"; - Helpers::warn("Shadergen: Unimplemented logic op mode"); - break; - } - - shader += ";\n}"; // End of main function -} diff --git a/src/core/PICA/shader_interpreter.cpp b/src/core/PICA/shader_interpreter.cpp index 9be382b3..85ca3c6e 100644 --- a/src/core/PICA/shader_interpreter.cpp +++ b/src/core/PICA/shader_interpreter.cpp @@ -74,9 +74,6 @@ void PICAShader::run() { break; } - // Undocumented, implementation based on 3DBrew and hw testing (see tests/PICA_LITP) - case ShaderOpcodes::LITP: [[unlikely]] litp(instruction); break; - default: Helpers::panic("Unimplemented PICA instruction %08X (Opcode = %02X)", instruction, opcode); } @@ -122,26 +119,10 @@ u8 PICAShader::getIndexedSource(u32 source, u32 index) { return source; switch (index) { - // No offset applied - case 0: [[likely]] return u8(source); - - // An address register (if index == 1 or 2) or the loop counter (if index == 3) is used as the offset - // There's several edge cases to handle, which have been verified with our shader tests and on a real 3DS - case 1: - case 2: - case 3: { - s32 offset = (index == 3) ? s32(loopCounter) : addrRegister[index - 1]; - if (offset < -128 || offset > 127) [[unlikely]] { - offset = 0; - } - - // Subtract 0x20 to get the index of the float uniform. Add the offset to it, then mask the sum with 0x7F like the PICA does - // After that, add 0x20 again to undo the initial subtraction - u8 floatUniformIndex = u8(((source - 0x20) + offset) & 0x7F); - floatUniformIndex += 0x20; - - return floatUniformIndex; - } + case 0: [[likely]] return u8(source); // No offset applied + case 1: return u8(source + addrRegister[0]); + case 2: return u8(source + addrRegister[1]); + case 3: return u8(source + loopCounter); } Helpers::panic("Reached unreachable path in PICAShader::getIndexedSource"); @@ -149,16 +130,15 @@ u8 PICAShader::getIndexedSource(u32 source, u32 index) { } PICAShader::vec4f PICAShader::getSource(u32 source) { - if (source < 0x10) { + if (source < 0x10) return inputs[source]; - } else if (source < 0x20) { + else if (source < 0x20) return tempRegisters[source - 0x10]; - } else { - const usize floatIndex = (source - 0x20) & 0x7f; - if (floatIndex >= 96) [[unlikely]] { - return vec4f({f24::fromFloat32(1.0f), f24::fromFloat32(1.0f), f24::fromFloat32(1.0f), f24::fromFloat32(1.0f)}); - } - return floatUniforms[floatIndex]; + else if (source <= 0x7f) + return floatUniforms[source - 0x20]; + else { + Helpers::warn("[PICA] Unimplemented source value: %X\n", source); + return vec4f({f24::zero(), f24::zero(), f24::zero(), f24::zero()}); } } @@ -243,7 +223,7 @@ void PICAShader::flr(u32 instruction) { u32 componentMask = operandDescriptor & 0xf; for (int i = 0; i < 4; i++) { if (componentMask & (1 << i)) { - destVector[3 - i] = f24::fromFloat32(std::floor(srcVector[3 - i].toFloat32())); + destVector[3 - i] = f24::fromFloat32(std::floor(srcVector[3 - 1].toFloat32())); } } } @@ -264,12 +244,8 @@ void PICAShader::max(u32 instruction) { u32 componentMask = operandDescriptor & 0xf; for (int i = 0; i < 4; i++) { if (componentMask & (1 << i)) { - const float inputA = srcVec1[3 - i].toFloat32(); - const float inputB = srcVec2[3 - i].toFloat32(); - // max(NaN, 2.f) -> NaN - // max(2.f, NaN) -> 2 - const auto& maximum = std::isinf(inputB) ? inputB : std::max(inputB, inputA); - destVector[3 - i] = f24::fromFloat32(maximum); + const auto maximum = srcVec1[3 - i] > srcVec2[3 - i] ? srcVec1[3 - i] : srcVec2[3 - i]; + destVector[3 - i] = maximum; } } } @@ -290,12 +266,8 @@ void PICAShader::min(u32 instruction) { u32 componentMask = operandDescriptor & 0xf; for (int i = 0; i < 4; i++) { if (componentMask & (1 << i)) { - const float inputA = srcVec1[3 - i].toFloat32(); - const float inputB = srcVec2[3 - i].toFloat32(); - // min(NaN, 2.f) -> NaN - // min(2.f, NaN) -> 2 - const auto& mininum = std::min(inputB, inputA); - destVector[3 - i] = f24::fromFloat32(mininum); + const auto mininum = srcVec1[3 - i] < srcVec2[3 - i] ? srcVec1[3 - i] : srcVec2[3 - i]; + destVector[3 - i] = mininum; } } } @@ -320,10 +292,10 @@ void PICAShader::mov(u32 instruction) { void PICAShader::mova(u32 instruction) { const u32 operandDescriptor = operandDescriptors[instruction & 0x7f]; - u32 src = getBits<12, 7>(instruction); + const u32 src = getBits<12, 7>(instruction); const u32 idx = getBits<19, 2>(instruction); - src = getIndexedSource(src, idx); + if (idx) Helpers::panic("[PICA] MOVA: idx != 0"); vec4f srcVector = getSourceSwizzled<1>(src, operandDescriptor); u32 componentMask = operandDescriptor & 0xf; @@ -410,11 +382,7 @@ void PICAShader::rcp(u32 instruction) { vec4f srcVec1 = getSourceSwizzled<1>(src1, operandDescriptor); vec4f& destVector = getDest(dest); - float input = srcVec1[0].toFloat32(); - if (input == -0.0f) { - input = 0.0f; - } - const f24 res = f24::fromFloat32(1.0f / input); + f24 res = f24::fromFloat32(1.0f) / srcVec1[0]; u32 componentMask = operandDescriptor & 0xf; for (int i = 0; i < 4; i++) { @@ -434,11 +402,7 @@ void PICAShader::rsq(u32 instruction) { vec4f srcVec1 = getSourceSwizzled<1>(src1, operandDescriptor); vec4f& destVector = getDest(dest); - float input = srcVec1[0].toFloat32(); - if (input == -0.0f) { - input = 0.0f; - } - const f24 res = f24::fromFloat32(1.0f / std::sqrt(input)); + f24 res = f24::fromFloat32(1.0f / std::sqrt(srcVec1[0].toFloat32())); u32 componentMask = operandDescriptor & 0xf; for (int i = 0; i < 4; i++) { @@ -764,33 +728,4 @@ void PICAShader::jmpu(u32 instruction) { if (((boolUniform >> bit) & 1) == test) // Jump if the bool uniform is the value we want pc = dest; -} - -void PICAShader::litp(u32 instruction) { - const u32 operandDescriptor = operandDescriptors[instruction & 0x7f]; - u32 src = getBits<12, 7>(instruction); - const u32 idx = getBits<19, 2>(instruction); - const u32 dest = getBits<21, 5>(instruction); - - src = getIndexedSource(src, idx); - vec4f srcVec = getSourceSwizzled<1>(src, operandDescriptor); - vec4f& destVector = getDest(dest); - - // Compare registers are set based on whether src.x and src.w are >= 0.0 - cmpRegister[0] = (srcVec[0].toFloat32() >= 0.0f); - cmpRegister[1] = (srcVec[3].toFloat32() >= 0.0f); - - vec4f result; - // TODO: Does max here have the same non-IEEE NaN behavior as the max instruction? - result[0] = f24::fromFloat32(std::max(srcVec[0].toFloat32(), 0.0f)); - result[1] = f24::fromFloat32(std::clamp(srcVec[1].toFloat32(), -127.9961f, 127.9961f)); - result[2] = f24::zero(); - result[3] = f24::fromFloat32(std::max(srcVec[3].toFloat32(), 0.0f)); - - u32 componentMask = operandDescriptor & 0xf; - for (int i = 0; i < 4; i++) { - if (componentMask & (1 << i)) { - destVector[3 - i] = result[3 - i]; - } - } } \ No newline at end of file diff --git a/src/core/PICA/shader_unit.cpp b/src/core/PICA/shader_unit.cpp index 6b291d31..aa7b4c12 100644 --- a/src/core/PICA/shader_unit.cpp +++ b/src/core/PICA/shader_unit.cpp @@ -9,6 +9,7 @@ void ShaderUnit::reset() { void PICAShader::reset() { loadedShader.fill(0); + bufferedShader.fill(0); operandDescriptors.fill(0); boolUniform = 0; @@ -34,5 +35,4 @@ void PICAShader::reset() { codeHashDirty = true; opdescHashDirty = true; - uniformsDirty = true; } \ No newline at end of file diff --git a/src/core/action_replay.cpp b/src/core/action_replay.cpp index 2f9acd57..e8467425 100644 --- a/src/core/action_replay.cpp +++ b/src/core/action_replay.cpp @@ -96,7 +96,7 @@ void ActionReplay::runInstruction(const Cheat& cheat, u32 instruction) { break; } - // clang-format off +// clang-format off #define MAKE_IF_INSTRUCTION(opcode, comparator) \ case opcode: { \ const u32 baseAddr = Helpers::getBits<0, 28>(instruction); \ @@ -119,7 +119,7 @@ void ActionReplay::runInstruction(const Cheat& cheat, u32 instruction) { // Not Equal (YYYYYYYY != [XXXXXXX + offset]) MAKE_IF_INSTRUCTION(6, !=) #undef MAKE_IF_INSTRUCTION - // clang-format on +// clang-format on // BXXXXXXX 00000000 - offset = *(XXXXXXX + offset) case 0xB: { @@ -139,64 +139,6 @@ void ActionReplay::executeDType(const Cheat& cheat, u32 instruction) { switch (instruction) { case 0xD3000000: offset1 = cheat[pc++]; break; case 0xD3000001: offset2 = cheat[pc++]; break; - - case 0xD6000000: - write32(*activeOffset + cheat[pc++], u32(*activeData)); - *activeOffset += 4; - break; - - case 0xD6000001: - write32(*activeOffset + cheat[pc++], u32(data1)); - *activeOffset += 4; - break; - - case 0xD6000002: - write32(*activeOffset + cheat[pc++], u32(data2)); - *activeOffset += 4; - break; - - case 0xD7000000: - write16(*activeOffset + cheat[pc++], u16(*activeData)); - *activeOffset += 2; - break; - - case 0xD7000001: - write16(*activeOffset + cheat[pc++], u16(data1)); - *activeOffset += 2; - break; - - case 0xD7000002: - write16(*activeOffset + cheat[pc++], u16(data2)); - *activeOffset += 2; - break; - - case 0xD8000000: - write8(*activeOffset + cheat[pc++], u8(*activeData)); - *activeOffset += 1; - break; - - case 0xD8000001: - write8(*activeOffset + cheat[pc++], u8(data1)); - *activeOffset += 1; - break; - - case 0xD8000002: - write8(*activeOffset + cheat[pc++], u8(data2)); - *activeOffset += 1; - break; - - case 0xD9000000: *activeData = read32(cheat[pc++] + *activeOffset); break; - case 0xD9000001: data1 = read32(cheat[pc++] + *activeOffset); break; - case 0xD9000002: data2 = read32(cheat[pc++] + *activeOffset); break; - - case 0xDA000000: *activeData = read16(cheat[pc++] + *activeOffset); break; - case 0xDA000001: data1 = read16(cheat[pc++] + *activeOffset); break; - case 0xDA000002: data2 = read16(cheat[pc++] + *activeOffset); break; - - case 0xDB000000: *activeData = read8(cheat[pc++] + *activeOffset); break; - case 0xDB000001: data1 = read8(cheat[pc++] + *activeOffset); break; - case 0xDB000002: data2 = read8(cheat[pc++] + *activeOffset); break; - case 0xDC000000: *activeOffset += cheat[pc++]; break; // DD000000 XXXXXXXX - if KEYPAD has value XXXXXXXX execute next block diff --git a/src/core/applets/applet_manager.cpp b/src/core/applets/applet_manager.cpp index cdb19319..c94eee28 100644 --- a/src/core/applets/applet_manager.cpp +++ b/src/core/applets/applet_manager.cpp @@ -1,17 +1,11 @@ #include "applets/applet_manager.hpp" - -#include "services/apt.hpp" - using namespace Applets; -AppletManager::AppletManager(Memory& mem) : miiSelector(mem, nextParameter), swkbd(mem, nextParameter), error(mem, nextParameter) {} +AppletManager::AppletManager(Memory& mem) : miiSelector(mem), swkbd(mem) {} void AppletManager::reset() { - nextParameter = std::nullopt; - miiSelector.reset(); swkbd.reset(); - error.reset(); } AppletBase* AppletManager::getApplet(u32 id) { @@ -22,40 +16,6 @@ AppletBase* AppletManager::getApplet(u32 id) { case AppletIDs::SoftwareKeyboard: case AppletIDs::SoftwareKeyboard2: return &swkbd; - case AppletIDs::ErrDisp: - case AppletIDs::ErrDisp2: return &error; - default: return nullptr; } -} - -Applets::Parameter AppletManager::glanceParameter() { - if (nextParameter) { - // Copy parameter - Applets::Parameter param = nextParameter.value(); - // APT module clears next parameter even for GlanceParameter for these 2 signals - if (param.signal == static_cast(APTSignal::DspWakeup) || param.signal == static_cast(APTSignal::DspSleep)) { - nextParameter = std::nullopt; - } - - return param; - } - - // Default return value. This is legacy code from before applets were implemented. TODO: Update it - else { - return Applets::Parameter{ - .senderID = 0, - .destID = Applets::AppletIDs::Application, - .signal = static_cast(APTSignal::Wakeup), - .data = {}, - }; - } -} - -Applets::Parameter AppletManager::receiveParameter() { - Applets::Parameter param = glanceParameter(); - // ReceiveParameter always clears nextParameter whereas glanceParameter does not - nextParameter = std::nullopt; - - return param; } \ No newline at end of file diff --git a/src/core/applets/error_applet.cpp b/src/core/applets/error_applet.cpp deleted file mode 100644 index a87bca30..00000000 --- a/src/core/applets/error_applet.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "applets/error_applet.hpp" - -#include "kernel/handles.hpp" - -using namespace Applets; - -void ErrorApplet::reset() {} - -Result::HorizonResult ErrorApplet::start(const MemoryBlock* sharedMem, const std::vector& parameters, u32 appID) { - Applets::Parameter param = Applets::Parameter{ - .senderID = appID, - .destID = AppletIDs::Application, - .signal = static_cast(APTSignal::WakeupByExit), - .object = 0, - .data = parameters, // TODO: Figure out how the data format for this applet - }; - - nextParameter = param; - return Result::Success; -} - -Result::HorizonResult ErrorApplet::receiveParameter(const Applets::Parameter& parameter) { - Applets::Parameter param = Applets::Parameter{ - .senderID = parameter.destID, - .destID = AppletIDs::Application, - .signal = static_cast(APTSignal::Response), - .object = KernelHandles::APTCaptureSharedMemHandle, - .data = {}, - }; - - nextParameter = param; - return Result::Success; -} \ No newline at end of file diff --git a/src/core/applets/mii_selector.cpp b/src/core/applets/mii_selector.cpp index ab6455fc..211e6f07 100644 --- a/src/core/applets/mii_selector.cpp +++ b/src/core/applets/mii_selector.cpp @@ -1,86 +1,11 @@ #include "applets/mii_selector.hpp" -#include -#include - -#include "kernel/handles.hpp" - using namespace Applets; void MiiSelectorApplet::reset() {} -Result::HorizonResult MiiSelectorApplet::start(const MemoryBlock* sharedMem, const std::vector& parameters, u32 appID) { - // Get mii configuration from the application - std::memcpy(&config, ¶meters[0], sizeof(config)); +Result::HorizonResult MiiSelectorApplet::start() { return Result::Success; } - Applets::Parameter param = Applets::Parameter{ - .senderID = appID, - .destID = AppletIDs::Application, - .signal = static_cast(APTSignal::WakeupByExit), - .object = 0, - }; - - // Thanks to Citra devs as always for the default mii data and other applet help - output = getDefaultMii(); - output.returnCode = 0; // Success - output.selectedGuestMiiIndex = std::numeric_limits::max(); - output.miiChecksum = boost::crc<16, 0x1021, 0, 0, false, false>(&output.selectedMiiData, sizeof(MiiData) + sizeof(output.unknown1)); - - // Copy output into the response parameter - param.data.resize(sizeof(output)); - std::memcpy(¶m.data[0], &output, sizeof(output)); - - nextParameter = param; +Result::HorizonResult MiiSelectorApplet::receiveParameter() { + Helpers::warn("Mii Selector: Unimplemented ReceiveParameter"); return Result::Success; -} - -Result::HorizonResult MiiSelectorApplet::receiveParameter(const Applets::Parameter& parameter) { - Applets::Parameter param = Applets::Parameter{ - .senderID = parameter.destID, - .destID = AppletIDs::Application, - .signal = static_cast(APTSignal::Response), - .object = KernelHandles::APTCaptureSharedMemHandle, - .data = {}, - }; - - nextParameter = param; - return Result::Success; -} - -MiiResult MiiSelectorApplet::getDefaultMii() { - // This data was obtained from Citra - MiiData miiData; - miiData.version = 0x03; - miiData.miiOptions = 0x00; - miiData.miiPos = 0x10; - miiData.consoleID = 0x30; - miiData.systemID = 0xD285B6B300C8850A; - miiData.miiID = 0x98391EE4; - miiData.creatorMAC = {0x40, 0xF4, 0x07, 0xB7, 0x37, 0x10}; - miiData.padding = 0x0000; - miiData.miiDetails = 0xA600; - miiData.miiName = {'P', 'a', 'n', 'd', 'a', '3', 'D', 'S', 0x0, 0x0}; - miiData.height = 0x40; - miiData.width = 0x40; - miiData.faceStyle = 0x00; - miiData.faceDetails = 0x00; - miiData.hairStyle = 0x21; - miiData.hairDetails = 0x01; - miiData.eyeDetails = 0x02684418; - miiData.eyebrowDetails = 0x26344614; - miiData.noseDetails = 0x8112; - miiData.mouthDetails = 0x1768; - miiData.moustacheDetails = 0x0D00; - miiData.beardDetails = 0x0029; - miiData.glassesDetails = 0x0052; - miiData.moleDetails = 0x4850; - miiData.authorName = {u'B', u'O', u'N', u'K', u'E', u'R'}; - - MiiResult result; - result.returnCode = 0x0; - result.isGuestMiiSelected = 0x0; - result.selectedGuestMiiIndex = std::numeric_limits::max(); - result.selectedMiiData = miiData; - result.guestMiiName.fill(0x0); - - return result; -} +} \ No newline at end of file diff --git a/src/core/applets/software_keyboard.cpp b/src/core/applets/software_keyboard.cpp index fc58a3ec..2ff22792 100644 --- a/src/core/applets/software_keyboard.cpp +++ b/src/core/applets/software_keyboard.cpp @@ -1,93 +1,11 @@ #include "applets/software_keyboard.hpp" -#include -#include - -#include "kernel/handles.hpp" - using namespace Applets; void SoftwareKeyboardApplet::reset() {} +Result::HorizonResult SoftwareKeyboardApplet::start() { return Result::Success; } -Result::HorizonResult SoftwareKeyboardApplet::receiveParameter(const Applets::Parameter& parameter) { - switch (parameter.signal) { - // Signal == request -> Applet is asking swkbd for a shared memory handle for backing up the framebuffer before opening the applet - case u32(APTSignal::Request): { - Applets::Parameter param = Applets::Parameter{ - .senderID = parameter.destID, - .destID = AppletIDs::Application, - .signal = static_cast(APTSignal::Response), - .object = KernelHandles::APTCaptureSharedMemHandle, - .data = {}, - }; - - nextParameter = param; - break; - } - - default: Helpers::panic("Unimplemented swkbd signal %d\n", parameter.signal); - } - +Result::HorizonResult SoftwareKeyboardApplet::receiveParameter() { + Helpers::warn("Software keyboard: Unimplemented ReceiveParameter"); return Result::Success; -} - -Result::HorizonResult SoftwareKeyboardApplet::start(const MemoryBlock* sharedMem, const std::vector& parameters, u32 appID) { - if (parameters.size() < sizeof(SoftwareKeyboardConfig)) { - Helpers::warn("SoftwareKeyboard::Start: Invalid size for keyboard configuration"); - return Result::Success; - } - - if (sharedMem == nullptr) { - Helpers::warn("SoftwareKeyboard: Missing shared memory"); - return Result::Success; - } - - // Get keyboard configuration from the application - std::memcpy(&config, ¶meters[0], sizeof(config)); - - const std::u16string text = u"Pand"; - u32 textAddress = sharedMem->addr; - - // Copy text to shared memory the app gave us - for (u32 i = 0; i < text.size(); i++) { - mem.write16(textAddress, u16(text[i])); - textAddress += sizeof(u16); - } - mem.write16(textAddress, 0); // Write UTF-16 null terminator - - // Temporarily hardcode the pressed button to be the firs tone - switch (config.numButtonsM1) { - case SoftwareKeyboardButtonConfig::SingleButton: config.returnCode = SoftwareKeyboardResult::D0Click; break; - case SoftwareKeyboardButtonConfig::DualButton: config.returnCode = SoftwareKeyboardResult::D1Click1; break; - case SoftwareKeyboardButtonConfig::TripleButton: config.returnCode = SoftwareKeyboardResult::D2Click2; break; - case SoftwareKeyboardButtonConfig::NoButton: config.returnCode = SoftwareKeyboardResult::None; break; - default: Helpers::warn("Software keyboard: Invalid button mode specification"); break; - } - - config.textOffset = 0; - config.textLength = static_cast(text.size()); - static_assert(offsetof(SoftwareKeyboardConfig, textOffset) == 324); - static_assert(offsetof(SoftwareKeyboardConfig, textLength) == 328); - - if (config.filterFlags & SoftwareKeyboardFilter::Callback) { - Helpers::warn("Unimplemented software keyboard profanity callback"); - } - - closeKeyboard(appID); - return Result::Success; -} - -void SoftwareKeyboardApplet::closeKeyboard(u32 appID) { - Applets::Parameter param = Applets::Parameter{ - .senderID = appID, - .destID = AppletIDs::Application, - .signal = static_cast(APTSignal::WakeupByExit), - .object = 0, - }; - - // Copy software keyboard configuration into the response parameter - param.data.resize(sizeof(config)); - std::memcpy(¶m.data[0], &config, sizeof(config)); - - nextParameter = param; } \ No newline at end of file diff --git a/src/core/audio/aac_decoder.cpp b/src/core/audio/aac_decoder.cpp deleted file mode 100644 index 58cebda6..00000000 --- a/src/core/audio/aac_decoder.cpp +++ /dev/null @@ -1,144 +0,0 @@ -#include "audio/aac_decoder.hpp" - -#include - -#include -using namespace Audio; - -void AAC::Decoder::decode(AAC::Message& response, const AAC::Message& request, AAC::Decoder::PaddrCallback paddrCallback, bool enableAudio) { - // Copy the command and mode fields of the request to the response - response.command = request.command; - response.mode = request.mode; - response.decodeResponse.size = request.decodeRequest.size; - - // Write a dummy response at first. We'll be overwriting it later if decoding goes well - response.resultCode = AAC::ResultCode::Success; - response.decodeResponse.channelCount = 2; - response.decodeResponse.sampleCount = 1024; - response.decodeResponse.sampleRate = AAC::SampleRate::Rate48000; - - if (!isInitialized()) { - initialize(); - - // AAC decoder failed to initialize, return dummy data and return without decoding - if (!isInitialized()) { - Helpers::warn("Failed to initialize AAC decoder"); - return; - } - } - - u8* input = paddrCallback(request.decodeRequest.address); - const u8* inputEnd = paddrCallback(request.decodeRequest.address + request.decodeRequest.size); - u8* outputLeft = paddrCallback(request.decodeRequest.destAddrLeft); - u8* outputRight = nullptr; - - if (input == nullptr || inputEnd == nullptr || outputLeft == nullptr) { - Helpers::warn("Invalid pointers passed to AAC decoder"); - return; - } - - u32 bytesValid = request.decodeRequest.size; - u32 bufferSize = request.decodeRequest.size; - - // Each frame is 2048 samples with 2 channels - static constexpr usize frameSize = 2048 * 2; - std::array frame; - std::array, 2> audioStreams; - - while (bytesValid != 0) { - if (aacDecoder_Fill(decoderHandle, &input, &bufferSize, &bytesValid) != AAC_DEC_OK) { - Helpers::warn("Failed to fill AAC decoder with samples"); - return; - } - - auto decodeResult = aacDecoder_DecodeFrame(decoderHandle, frame.data(), frameSize, 0); - - if (decodeResult == AAC_DEC_TRANSPORT_SYNC_ERROR) { - // https://android.googlesource.com/platform/external/aac/+/2ddc922/libAACdec/include/aacdecoder_lib.h#362 - // According to the above, if we get a sync error, we're not meant to stop decoding, but rather just continue feeding data - } else if (decodeResult == AAC_DEC_OK) { - auto getSampleRate = [](u32 rate) { - switch (rate) { - case 8000: return AAC::SampleRate::Rate8000; - case 11025: return AAC::SampleRate::Rate11025; - case 12000: return AAC::SampleRate::Rate12000; - case 16000: return AAC::SampleRate::Rate16000; - case 22050: return AAC::SampleRate::Rate22050; - case 24000: return AAC::SampleRate::Rate24000; - case 32000: return AAC::SampleRate::Rate32000; - case 44100: return AAC::SampleRate::Rate44100; - case 48000: - default: return AAC::SampleRate::Rate48000; - } - }; - - auto info = aacDecoder_GetStreamInfo(decoderHandle); - response.decodeResponse.sampleCount = info->frameSize; - response.decodeResponse.channelCount = info->numChannels; - response.decodeResponse.sampleRate = getSampleRate(info->sampleRate); - - int channels = info->numChannels; - // Reserve space in our output stream vectors so push_back doesn't do allocations - for (int i = 0; i < channels; i++) { - audioStreams[i].reserve(audioStreams[i].size() + info->frameSize); - } - - // Fetch output pointer for right output channel if we've got > 1 channel - if (channels > 1 && outputRight == nullptr) { - outputRight = paddrCallback(request.decodeRequest.destAddrRight); - // If the right output channel doesn't point to a proper padddr, return - if (outputRight == nullptr) { - Helpers::warn("Right AAC output channel doesn't point to valid physical address"); - return; - } - } - - if (enableAudio) { - for (int sample = 0; sample < info->frameSize; sample++) { - for (int stream = 0; stream < channels; stream++) { - audioStreams[stream].push_back(frame[(sample * channels) + stream]); - } - } - } else { - // If audio is not enabled, push 0s - for (int stream = 0; stream < channels; stream++) { - audioStreams[stream].resize(audioStreams[stream].size() + info->frameSize, 0); - } - } - } else { - Helpers::warn("Failed to decode AAC frame"); - return; - } - } - - for (int i = 0; i < 2; i++) { - auto& stream = audioStreams[i]; - u8* pointer = (i == 0) ? outputLeft : outputRight; - - if (!stream.empty() && pointer != nullptr) { - std::memcpy(pointer, stream.data(), stream.size() * sizeof(s16)); - } - } -} - -void AAC::Decoder::initialize() { - decoderHandle = aacDecoder_Open(TRANSPORT_TYPE::TT_MP4_ADTS, 1); - - if (decoderHandle == nullptr) [[unlikely]] { - return; - } - - // Cap output channel count to 2 - if (aacDecoder_SetParam(decoderHandle, AAC_PCM_MAX_OUTPUT_CHANNELS, 2) != AAC_DEC_OK) [[unlikely]] { - aacDecoder_Close(decoderHandle); - decoderHandle = nullptr; - return; - } -} - -AAC::Decoder::~Decoder() { - if (isInitialized()) { - aacDecoder_Close(decoderHandle); - decoderHandle = nullptr; - } -} diff --git a/src/core/audio/audio_interpolation.cpp b/src/core/audio/audio_interpolation.cpp deleted file mode 100644 index d13c786e..00000000 --- a/src/core/audio/audio_interpolation.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include "audio/audio_interpolation.hpp" - -#include - -#include "helpers.hpp" - -namespace Audio::Interpolation { - // Calculations are done in fixed point with 24 fractional bits. - // (This is not verified. This was chosen for minimal error.) - static constexpr u64 scaleFactor = 1 << 24; - static constexpr u64 scaleMask = scaleFactor - 1; - - /// Here we step over the input in steps of rate, until we consume all of the input. - /// Three adjacent samples are passed to fn each step. - template - static void stepOverSamples(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, usize& outputi, Function fn) { - if (input.empty()) { - return; - } - - input.insert(input.begin(), {state.xn2, state.xn1}); - - const u64 step_size = static_cast(rate * scaleFactor); - u64 fposition = state.fposition; - usize inputi = 0; - - while (outputi < output.size()) { - inputi = static_cast(fposition / scaleFactor); - - if (inputi + 2 >= input.size()) { - inputi = input.size() - 2; - break; - } - - u64 fraction = fposition & scaleMask; - output[outputi++] = fn(fraction, input[inputi], input[inputi + 1], input[inputi + 2]); - - fposition += step_size; - } - - state.xn2 = input[inputi]; - state.xn1 = input[inputi + 1]; - state.fposition = fposition - inputi * scaleFactor; - - input.erase(input.begin(), std::next(input.begin(), inputi + 2)); - } - - void none(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, usize& outputi) { - stepOverSamples(state, input, rate, output, outputi, [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { return x0; }); - } - - void linear(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, usize& outputi) { - // Note on accuracy: Some values that this produces are +/- 1 from the actual firmware. - stepOverSamples(state, input, rate, output, outputi, [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { - // This is a saturated subtraction. (Verified by black-box fuzzing.) - s64 delta0 = std::clamp(x1[0] - x0[0], -32768, 32767); - s64 delta1 = std::clamp(x1[1] - x0[1], -32768, 32767); - - return std::array{ - static_cast(x0[0] + fraction * delta0 / scaleFactor), - static_cast(x0[1] + fraction * delta1 / scaleFactor), - }; - }); - } - - void polyphase(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, usize& outputi) { - linear(state, input, rate, output, outputi); - } -} // namespace Audio::Interpolation \ No newline at end of file diff --git a/src/core/audio/dsp_core.cpp b/src/core/audio/dsp_core.cpp deleted file mode 100644 index c793fcf8..00000000 --- a/src/core/audio/dsp_core.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "audio/dsp_core.hpp" - -#include -#include -#include - -#include "audio/hle_core.hpp" -#include "audio/null_core.hpp" -#include "audio/teakra_core.hpp" - -std::unique_ptr Audio::makeDSPCore(EmulatorConfig& config, Memory& mem, Scheduler& scheduler, DSPService& dspService) { - std::unique_ptr core; - - switch (config.dspType) { - case DSPCore::Type::Null: core = std::make_unique(mem, scheduler, dspService, config); break; - case DSPCore::Type::Teakra: core = std::make_unique(mem, scheduler, dspService, config); break; - case DSPCore::Type::HLE: core = std::make_unique(mem, scheduler, dspService, config); break; - - default: - Helpers::warn("Invalid DSP core selected!"); - core = std::make_unique(mem, scheduler, dspService, config); - break; - } - - mem.setDSPMem(core->getDspMemory()); - return core; -} - -Audio::DSPCore::Type Audio::DSPCore::typeFromString(std::string inString) { - // Transform to lower-case to make the setting case-insensitive - std::transform(inString.begin(), inString.end(), inString.begin(), [](unsigned char c) { return std::tolower(c); }); - - static const std::unordered_map map = { - {"null", Audio::DSPCore::Type::Null}, {"none", Audio::DSPCore::Type::Null}, {"lle", Audio::DSPCore::Type::Teakra}, - {"teakra", Audio::DSPCore::Type::Teakra}, {"hle", Audio::DSPCore::Type::HLE}, {"fast", Audio::DSPCore::Type::HLE}, - }; - - if (auto search = map.find(inString); search != map.end()) { - return search->second; - } - - printf("Invalid DSP type. Defaulting to null\n"); - return Audio::DSPCore::Type::Null; -} - -const char* Audio::DSPCore::typeToString(Audio::DSPCore::Type type) { - switch (type) { - case Audio::DSPCore::Type::Null: return "null"; - case Audio::DSPCore::Type::Teakra: return "teakra"; - case Audio::DSPCore::Type::HLE: return "hle"; - default: return "invalid"; - } -} diff --git a/src/core/audio/hle_core.cpp b/src/core/audio/hle_core.cpp deleted file mode 100644 index 059318c8..00000000 --- a/src/core/audio/hle_core.cpp +++ /dev/null @@ -1,804 +0,0 @@ -#include "audio/hle_core.hpp" - -#include -#include -#include -#include -#include - -#include "audio/aac_decoder.hpp" -#include "audio/dsp_binary.hpp" -#include "audio/dsp_simd.hpp" -#include "config.hpp" -#include "services/dsp.hpp" - -namespace Audio { - namespace DSPPipeType { - enum : u32 { - Debug = 0, - DMA = 1, - Audio = 2, - Binary = 3, - }; - } - - HLE_DSP::HLE_DSP(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& config) - : DSPCore(mem, scheduler, dspService, config) { - // Set up source indices - for (int i = 0; i < sources.size(); i++) { - sources[i].index = i; - } - - aacDecoder.reset(new Audio::AAC::Decoder()); - } - - void HLE_DSP::resetAudioPipe() { -#define DSPOffset(var) (0x8000 + offsetof(Audio::HLE::SharedMemory, var) / 2) - - // These are DSP shared memory offsets for various variables - // https://www.3dbrew.org/wiki/DSP_Memory_Region - static constexpr std::array responses = { - 0x000F, // Number of responses - DSPOffset(frameCounter), // Frame counter - DSPOffset(sourceConfigurations), // Source configs - DSPOffset(sourceStatuses), // Source statuses - DSPOffset(adpcmCoefficients), // ADPCM coefficients - DSPOffset(dspConfiguration), // DSP configs - DSPOffset(dspStatus), // DSP status - DSPOffset(finalSamples), // Final samples - DSPOffset(intermediateMixSamples), // Intermediate mix samples - DSPOffset(compressor), // Compressor - DSPOffset(dspDebug), // Debug - DSPOffset(unknown10), // ?? - DSPOffset(unknown11), // ?? - DSPOffset(unknown12), // ?? - DSPOffset(unknown13), // Surround sound biquad filter 1 - DSPOffset(unknown14) // Surround sound biquad filter 2 - }; -#undef DSPOffset - - std::vector& audioPipe = pipeData[DSPPipeType::Audio]; - audioPipe.resize(responses.size() * sizeof(u16)); - - // Push back every response to the audio pipe - size_t index = 0; - for (auto e : responses) { - audioPipe[index++] = e & 0xff; - audioPipe[index++] = e >> 8; - } - } - - void HLE_DSP::reset() { - dspState = DSPState::Off; - loaded = false; - - for (auto& e : pipeData) { - e.clear(); - } - - for (auto& source : sources) { - source.reset(); - } - - mixer.reset(); - // Note: Reset audio pipe AFTER resetting all pipes, otherwise the new data will be yeeted - resetAudioPipe(); - } - - void HLE_DSP::loadComponent(std::vector& data, u32 programMask, u32 dataMask) { - if (loaded) { - Helpers::warn("Loading DSP component when already loaded"); - } - - // We load the DSP binary into DSP memory even though we don't use it in HLE, so that we can - // still see the DSP code in the DSP debugger - u8* dspCode = dspRam.rawMemory.data(); - u8* dspData = dspCode + 0x40000; - - Dsp1 dsp1; - std::memcpy(&dsp1, data.data(), sizeof(dsp1)); - - // TODO: verify DSP1 signature & hashes - // Load DSP segments to DSP RAM - for (uint i = 0; i < dsp1.segmentCount; i++) { - auto& segment = dsp1.segments[i]; - u32 addr = segment.dspAddr << 1; - u8* src = data.data() + segment.offs; - u8* dst = nullptr; - - switch (segment.type) { - case 0: - case 1: dst = dspCode + addr; break; - default: dst = dspData + addr; break; - } - - std::memcpy(dst, src, segment.size); - } - - bool loadSpecialSegment = (dsp1.flags >> 1) & 0x1; - if (loadSpecialSegment) { - log("LoadComponent: special segment not supported"); - } - - loaded = true; - scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::cyclesPerFrame); - } - - void HLE_DSP::unloadComponent() { - if (!loaded) { - Helpers::warn("Audio: unloadComponent called without a running program"); - } - - loaded = false; - scheduler.removeEvent(Scheduler::EventType::RunDSP); - } - - void HLE_DSP::runAudioFrame(u64 eventTimestamp) { - // Signal audio pipe when an audio frame is done - if (dspState == DSPState::On) [[likely]] { - dspService.triggerPipeEvent(DSPPipeType::Audio); - } - - // TODO: Should this be called if dspState != DSPState::On? - outputFrame(); - - // How many cycles we were late - const u64 cycleDrift = scheduler.currentTimestamp - eventTimestamp; - scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::cyclesPerFrame - cycleDrift); - } - - u16 HLE_DSP::recvData(u32 regId) { - if (regId != 0) { - Helpers::panic("Audio: invalid register in HLE frontend"); - } - - return dspState != DSPState::On; - } - - void HLE_DSP::writeProcessPipe(u32 channel, u32 size, u32 buffer) { - enum class StateChange : u8 { - Initialize = 0, - Shutdown = 1, - Wakeup = 2, - Sleep = 3, - }; - - switch (channel) { - case DSPPipeType::Audio: { - if (size != 4) { - printf("Invalid size written to DSP Audio Pipe\n"); - break; - } - - // Get new state - const u8 state = mem.read8(buffer); - if (state > 3) { - log("WriteProcessPipe::Audio: Unknown state change type"); - } else { - switch (static_cast(state)) { - case StateChange::Initialize: - // TODO: Other initialization stuff here - dspState = DSPState::On; - resetAudioPipe(); - - dspService.triggerPipeEvent(DSPPipeType::Audio); - break; - - case StateChange::Shutdown: dspState = DSPState::Off; break; - default: Helpers::panic("Unimplemented DSP audio pipe state change %d", state); - } - } - break; - } - - case DSPPipeType::Binary: { - log("Unimplemented write to binary pipe! Size: %d\n", size); - - AAC::Message request; - if (size == sizeof(request)) { - std::array raw; - for (uint i = 0; i < size; i++) { - raw[i] = mem.read32(buffer + i); - } - - std::memcpy(&request, raw.data(), sizeof(request)); - handleAACRequest(request); - } else { - Helpers::warn("Invalid size for AAC request"); - } - - // This pipe and interrupt are normally used for requests like AAC decode - dspService.triggerPipeEvent(DSPPipeType::Binary); - break; - } - - default: log("Audio::HLE_DSP: Wrote to unimplemented pipe %d\n", channel); break; - } - } - - std::vector HLE_DSP::readPipe(u32 pipe, u32 peer, u32 size, u32 buffer) { - if (size & 1) Helpers::panic("Tried to read odd amount of bytes from DSP pipe"); - if (pipe >= pipeCount || size > 0xffff) { - return {}; - } - - if (pipe != DSPPipeType::Audio) { - log("Reading from non-audio pipe! This might be broken, might need to check what pipe is being read from and implement writing to it\n"); - } - - std::vector& data = pipeData[pipe]; - size = std::min(size, data.size()); // Clamp size to the maximum available data size - - if (size == 0) { - return {}; - } - - // Return "size" bytes from the audio pipe and erase them - std::vector out(data.begin(), data.begin() + size); - data.erase(data.begin(), data.begin() + size); - return out; - } - - void HLE_DSP::outputFrame() { - StereoFrame frame; - generateFrame(frame); - - if (audioEnabled) { - // Wait until we've actually got room to push our frame - while (sampleBuffer.size() + frame.size() * 2 > sampleBuffer.Capacity()) { - std::this_thread::sleep_for(std::chrono::milliseconds{1}); - } - - sampleBuffer.push(frame.data(), frame.size() * 2); - } - } - - void HLE_DSP::generateFrame(StereoFrame& frame) { - using namespace Audio::HLE; - SharedMemory& read = readRegion(); - SharedMemory& write = writeRegion(); - - // TODO: Properly implement mixers - // The DSP checks the DSP configuration dirty bits on every frame, applies them, and clears them - read.dspConfiguration.dirtyRaw = 0; - read.dspConfiguration.dirtyRaw2 = 0; - - // The intermediate mix buffer is aligned to 16 for SIMD purposes - alignas(16) std::array mixes{}; - - for (int i = 0; i < sourceCount; i++) { - // Update source configuration from the read region of shared memory - auto& config = read.sourceConfigurations.config[i]; - auto& source = sources[i]; - updateSourceConfig(source, config, read.adpcmCoefficients.coeff[i]); - - // Generate audio - if (source.enabled) { - generateFrame(source); - } - - // Update write region of shared memory - auto& status = write.sourceStatuses.status[i]; - status.enabled = source.enabled; - status.syncCount = source.syncCount; - status.currentBufferIDDirty = (source.isBufferIDDirty ? 1 : 0); - status.currentBufferID = source.currentBufferID; - status.previousBufferID = source.previousBufferID; - status.samplePosition = source.samplePosition; - - source.isBufferIDDirty = false; - - // If the source is still enabled, mix its output into the intermediate mix buffers - if (source.enabled) { - for (int mix = 0; mix < mixes.size(); mix++) { - // Check if this stage is passthrough, and if it is, then skip it - if ((source.enabledMixStages & (1u << mix)) == 0) { - continue; - } - - IntermediateMix& intermediateMix = mixes[mix]; - const std::array& gains = source.gains[mix]; - - DSP::MixIntoQuad::mix(intermediateMix, source.currentFrame, gains.data()); - } - } - } - - for (int i = 0; i < Audio::samplesInFrame; i++) { - auto& mix0 = mixes[0]; - auto& sample = mix0[i]; - frame[i] = {s16(sample[0]), s16(sample[1])}; - } - - performMix(read, write); - } - - void HLE_DSP::updateSourceConfig(Source& source, HLE::SourceConfiguration::Configuration& config, s16_le* adpcmCoefficients) { - // Check if the any dirty bit is set, otherwise exit early - if (!config.dirtyRaw) { - return; - } - - // The reset flags take priority, as you can reset a source and set it up to be played again at the same time - if (config.resetFlag) { - config.resetFlag = 0; - source.reset(); - } - - if (config.partialResetFlag) { - config.partialResetFlag = 0; - source.buffers = {}; - } - - if (config.enableDirty) { - config.enableDirty = 0; - source.enabled = config.enable != 0; - } - - if (config.syncCountDirty) { - config.syncCountDirty = 0; - source.syncCount = config.syncCount; - } - - if (config.adpcmCoefficientsDirty) { - config.adpcmCoefficientsDirty = 0; - // Convert the ADPCM coefficients in DSP shared memory from s16_le to s16 and cache them in source.adpcmCoefficients - std::transform( - adpcmCoefficients, adpcmCoefficients + source.adpcmCoefficients.size(), source.adpcmCoefficients.begin(), - [](const s16_le& input) -> s16 { return s16(input); } - ); - } - - // TODO: Should we check bufferQueueDirty here too? - if (config.formatDirty || config.embeddedBufferDirty) { - source.sampleFormat = config.format; - } - - if (config.monoOrStereoDirty || config.embeddedBufferDirty) { - source.sourceType = config.monoOrStereo; - } - - if (config.interpolationDirty) { - source.interpolationMode = config.interpolationMode; - } - - if (config.rateMultiplierDirty) { - source.rateMultiplier = (config.rateMultiplier > 0.f) ? config.rateMultiplier : 1.f; - } - - if (config.embeddedBufferDirty) { - // Annoyingly, and only for embedded buffer, whether we use config.playPosition depends on the relevant dirty bit - const u32 playPosition = config.playPositionDirty ? config.playPosition : 0; - - config.embeddedBufferDirty = 0; - if (s32(config.length) >= 0) [[likely]] { - // TODO: Add sample format and channel count - Source::Buffer buffer{ - .paddr = config.physicalAddress, - .sampleCount = config.length, - .adpcmScale = u8(config.adpcm_ps), - .previousSamples = {s16(config.adpcm_yn[0]), s16(config.adpcm_yn[1])}, - .adpcmDirty = config.adpcmDirty != 0, - .looping = config.isLooping != 0, - .bufferID = config.bufferID, - .playPosition = playPosition, - .format = source.sampleFormat, - .sourceType = source.sourceType, - .fromQueue = false, - .hasPlayedOnce = false, - }; - - source.buffers.emplace(std::move(buffer)); - } else { - log("Invalid embedded buffer size for DSP voice %d\n", source.index); - } - } - - if (config.partialEmbeddedBufferDirty) { - config.partialEmbeddedBufferDirty = 0; - - const u8* data = getPointerPhys(source.currentBufferPaddr & ~0x3); - - if (data != nullptr) { - switch (source.sampleFormat) { - case SampleFormat::PCM8: source.currentSamples = decodePCM8(data, config.length, source); break; - case SampleFormat::PCM16: source.currentSamples = decodePCM16(data, config.length, source); break; - case SampleFormat::ADPCM: source.currentSamples = decodeADPCM(data, config.length, source); break; - - default: - Helpers::warn("Invalid DSP sample format"); - source.currentSamples = {}; - break; - } - - // We're skipping the first samplePosition samples, so remove them from the buffer so as not to consume them later - if (source.samplePosition > 0) { - auto start = source.currentSamples.begin(); - auto end = std::next(start, source.samplePosition); - source.currentSamples.erase(start, end); - } - } - } - - if (config.bufferQueueDirty) { - // printf("Buffer queue dirty for voice %d\n", source.index); - - u16 dirtyBuffers = config.buffersDirty; - config.bufferQueueDirty = 0; - config.buffersDirty = 0; - - for (int i = 0; i < 4; i++) { - bool dirty = ((dirtyBuffers >> i) & 1) != 0; - if (dirty) { - const auto& buffer = config.buffers[i]; - - if (s32(buffer.length) >= 0) [[likely]] { - // TODO: Add sample format and channel count - Source::Buffer newBuffer{ - .paddr = buffer.physicalAddress, - .sampleCount = buffer.length, - .adpcmScale = u8(buffer.adpcm_ps), - .previousSamples = {s16(buffer.adpcm_yn[0]), s16(buffer.adpcm_yn[1])}, - .adpcmDirty = buffer.adpcmDirty != 0, - .looping = buffer.isLooping != 0, - .bufferID = buffer.bufferID, - .playPosition = 0, - .format = source.sampleFormat, - .sourceType = source.sourceType, - .fromQueue = true, - .hasPlayedOnce = false, - }; - - source.buffers.emplace(std::move(newBuffer)); - } else { - printf("Buffer queue dirty: Invalid buffer size for DSP voice %d\n", source.index); - } - } - } - } - -#define CONFIG_GAIN(index) \ - if (config.gain##index##Dirty) { \ - auto& dest = source.gains[index]; \ - auto& sourceGain = config.gain[index]; \ - \ - dest[0] = float(sourceGain[0]); \ - dest[1] = float(sourceGain[1]); \ - dest[2] = float(sourceGain[2]); \ - dest[3] = float(sourceGain[3]); \ - \ - if (dest[0] == 0.f && dest[1] == 0.f && dest[2] == 0.f && dest[3] == 0.f) { \ - source.enabledMixStages &= ~(1u << index); \ - } else { \ - source.enabledMixStages |= (1u << index); \ - } \ - } - - CONFIG_GAIN(0); - CONFIG_GAIN(1); - CONFIG_GAIN(2); -#undef CONFIG_GAIN - - config.dirtyRaw = 0; - } - - void HLE_DSP::decodeBuffer(DSPSource& source) { - if (source.buffers.empty()) { - // No queued buffers, there's nothing to decode so return - return; - } - - DSPSource::Buffer buffer = source.popBuffer(); - if (buffer.adpcmDirty) { - source.history1 = buffer.previousSamples[0]; - source.history2 = buffer.previousSamples[1]; - } - - const u8* data = getPointerPhys(buffer.paddr); - if (data == nullptr) { - return; - } - - source.currentBufferPaddr = buffer.paddr; - source.currentBufferID = buffer.bufferID; - source.previousBufferID = 0; - // For looping buffers, this is only set for the first time we play it. Loops do not set the dirty bit. - source.isBufferIDDirty = !buffer.hasPlayedOnce && buffer.fromQueue; - - if (buffer.hasPlayedOnce) { - source.samplePosition = 0; - } else { - // Mark that the buffer has already been played once, needed for looping buffers - buffer.hasPlayedOnce = true; - // Play position is only used for the initial time the buffer is played. Loops will start from the beginning of the buffer. - source.samplePosition = buffer.playPosition; - } - - switch (buffer.format) { - case SampleFormat::PCM8: source.currentSamples = decodePCM8(data, buffer.sampleCount, source); break; - case SampleFormat::PCM16: source.currentSamples = decodePCM16(data, buffer.sampleCount, source); break; - case SampleFormat::ADPCM: source.currentSamples = decodeADPCM(data, buffer.sampleCount, source); break; - - default: - Helpers::warn("Invalid DSP sample format"); - source.currentSamples = {}; - break; - } - - // If the buffer is a looping buffer, re-push it - if (buffer.looping) { - source.pushBuffer(buffer); - } - - // We're skipping the first samplePosition samples, so remove them from the buffer so as not to consume them later - if (source.samplePosition > 0) { - auto start = source.currentSamples.begin(); - auto end = std::next(start, source.samplePosition); - source.currentSamples.erase(start, end); - } - } - - void HLE_DSP::generateFrame(DSPSource& source) { - // Zero out all output samples at first. TODO: Don't zero out the entire frame initially, rather only zero-out the "unwritten" samples when - // the frame is done being processed. - source.currentFrame = {}; - - if (source.currentSamples.empty()) { - // There's no audio left to play, turn the voice off - if (source.buffers.empty()) { - source.enabled = false; - source.isBufferIDDirty = true; - source.previousBufferID = source.currentBufferID; - source.currentBufferID = 0; - - return; - } - - decodeBuffer(source); - } else { - usize outputCount = 0; - static constexpr usize maxSamples = Audio::samplesInFrame; - - while (outputCount < maxSamples) { - if (source.currentSamples.empty()) { - if (source.buffers.empty()) { - break; - } else { - decodeBuffer(source); - } - } - - switch (source.interpolationMode) { - case Source::InterpolationMode::Linear: - Audio::Interpolation::linear( - source.interpolationState, source.currentSamples, source.rateMultiplier, source.currentFrame, outputCount - ); - break; - case Source::InterpolationMode::None: - Audio::Interpolation::none( - source.interpolationState, source.currentSamples, source.rateMultiplier, source.currentFrame, outputCount - ); - break; - - case Source::InterpolationMode::Polyphase: - // Currently stubbed to be the same as linear - Audio::Interpolation::polyphase( - source.interpolationState, source.currentSamples, source.rateMultiplier, source.currentFrame, outputCount - ); - break; - } - } - - source.samplePosition += u32(outputCount * source.rateMultiplier); - } - } - - void HLE_DSP::performMix(Audio::HLE::SharedMemory& readRegion, Audio::HLE::SharedMemory& writeRegion) { - updateMixerConfig(readRegion); - // TODO: Do the actual audio mixing - - auto& dspStatus = writeRegion.dspStatus; - // Stub the DSP status. It's unknown what the "unknown" field is but Citra sets it to 0, so we do too to be safe - dspStatus.droppedFrames = 0; - dspStatus.unknown = 0; - } - - void HLE_DSP::updateMixerConfig(Audio::HLE::SharedMemory& sharedMem) { - auto& config = sharedMem.dspConfiguration; - // No configs have been changed, so there's nothing to update - if (config.dirtyRaw == 0) { - return; - } - - if (config.outputFormatDirty) { - mixer.channelFormat = config.outputFormat; - } - - if (config.masterVolumeDirty) { - mixer.volumes[0] = config.masterVolume; - } - - if (config.auxVolume0Dirty) { - mixer.volumes[1] = config.auxVolumes[0]; - } - - if (config.auxVolume1Dirty) { - mixer.volumes[2] = config.auxVolumes[1]; - } - - if (config.auxBusEnable0Dirty) { - mixer.enableAuxStages[0] = config.auxBusEnable[0] != 0; - } - - if (config.auxBusEnable1Dirty) { - mixer.enableAuxStages[1] = config.auxBusEnable[1] != 0; - } - - config.dirtyRaw = 0; - } - - HLE_DSP::SampleBuffer HLE_DSP::decodePCM8(const u8* data, usize sampleCount, Source& source) { - SampleBuffer decodedSamples(sampleCount); - - if (source.sourceType == SourceType::Stereo) { - for (usize i = 0; i < sampleCount; i++) { - const s16 left = s16(u16(*data++) << 8); - const s16 right = s16(u16(*data++) << 8); - decodedSamples[i] = {left, right}; - } - } else { - // Mono - for (usize i = 0; i < sampleCount; i++) { - const s16 sample = s16(u16(*data++) << 8); - decodedSamples[i] = {sample, sample}; - } - } - - return decodedSamples; - } - - HLE_DSP::SampleBuffer HLE_DSP::decodePCM16(const u8* data, usize sampleCount, Source& source) { - SampleBuffer decodedSamples(sampleCount); - const s16* data16 = reinterpret_cast(data); - - if (source.sourceType == SourceType::Stereo) { - for (usize i = 0; i < sampleCount; i++) { - const s16 left = *data16++; - const s16 right = *data16++; - decodedSamples[i] = {left, right}; - } - } else { - // Mono - for (usize i = 0; i < sampleCount; i++) { - const s16 sample = *data16++; - decodedSamples[i] = {sample, sample}; - } - } - - return decodedSamples; - } - - HLE_DSP::SampleBuffer HLE_DSP::decodeADPCM(const u8* data, usize sampleCount, Source& source) { - static constexpr uint samplesPerBlock = 14; - // An ADPCM block is comprised of a single header which contains the scale and predictor value for the block, and then 14 4bpp samples (hence - // the / 2) - static constexpr usize blockSize = sizeof(u8) + samplesPerBlock / 2; - - // How many ADPCM blocks we'll be consuming. It's sampleCount / samplesPerBlock, rounded up. - const usize blockCount = (sampleCount + (samplesPerBlock - 1)) / samplesPerBlock; - const usize outputSize = sampleCount + (sampleCount & 1); // Bump the output size to a multiple of 2 - - usize outputCount = 0; // How many stereo samples have we output thus far? - SampleBuffer decodedSamples(outputSize); - - s16 history1 = source.history1; - s16 history2 = source.history2; - - // Decode samples in frames. Stop when we reach sampleCount samples - for (uint blockIndex = 0; blockIndex < blockCount; blockIndex++) { - const u8 scaleAndPredictor = *data++; - - const u32 scale = 1 << u32(scaleAndPredictor & 0xF); - // This is referred to as 4-bit in some documentation, but I am pretty sure that's a mistake - const u32 predictor = (scaleAndPredictor >> 4) & 0x7; - - // Fixed point (s5.11) coefficients for the history samples - const s32 weight1 = source.adpcmCoefficients[predictor * 2]; - const s32 weight2 = source.adpcmCoefficients[predictor * 2 + 1]; - - // Decode samples in batches of 2 - // Each 4 bit ADPCM differential corresponds to 1 mono sample which will be output from both the left and right channel - // So each byte of ADPCM data ends up generating 2 stereo samples - for (uint sampleIndex = 0; sampleIndex < samplesPerBlock && outputCount < sampleCount; sampleIndex += 2) { - const auto decode = [&](s32 nibble) -> s16 { - static constexpr s32 ONE = 0x800; // 1.0 in S5.11 fixed point - static constexpr s32 HALF = ONE / 2; // 0.5 similarly - - // Sign extend our nibble from s4 to s32 - nibble = (nibble << 28) >> 28; - - // Scale the extended nibble by the scale specified in the ADPCM block header, to get the real value of the sample's differential - const s32 diff = nibble * scale; - - // Convert ADPCM to PCM using y[n] = x[n] + 0.5 + coeff1 * y[n - 1] + coeff2 * y[n - 2] - // The coefficients are in s5.11 fixed point so we also perform the proper conversions - s32 output = ((diff << 11) + HALF + weight1 * history1 + weight2 * history2) >> 11; - output = std::clamp(output, -32768, 32767); - - // Write back new history samples - history2 = history1; // y[n-2] = y[n-1] - history1 = output; // y[n-1] = y[n] - - return s16(output); - }; - - const u8 samples = *data++; // Fetch the byte containing 2 4-bpp samples - const s32 topNibble = s32(samples) >> 4; // First sample - const s32 bottomNibble = s32(samples) & 0xF; // Second sample - - // Decode and write first sample, then the second one - const s16 sample1 = decode(topNibble); - decodedSamples[outputCount].fill(sample1); - - const s16 sample2 = decode(bottomNibble); - decodedSamples[outputCount + 1].fill(sample2); - - outputCount += 2; - } - } - - // Store new history samples in the DSP source and return samples - source.history1 = history1; - source.history2 = history2; - return decodedSamples; - } - - void HLE_DSP::handleAACRequest(const AAC::Message& request) { - AAC::Message response; - - switch (request.command) { - case AAC::Command::EncodeDecode: - aacDecoder->decode(response, request, [this](u32 paddr) { return getPointerPhys(paddr); }, settings.aacEnabled); - break; - - case AAC::Command::Init: - case AAC::Command::Shutdown: - case AAC::Command::LoadState: - case AAC::Command::SaveState: - response = request; - response.resultCode = AAC::ResultCode::Success; - break; - - default: Helpers::warn("Unknown AAC command type"); break; - } - - // Copy response data to the binary pipe - auto& pipe = pipeData[DSPPipeType::Binary]; - pipe.resize(sizeof(response)); - std::memcpy(&pipe[0], &response, sizeof(response)); - } - - void DSPSource::reset() { - enabled = false; - isBufferIDDirty = false; - - // Initialize these to some sane defaults - sampleFormat = SampleFormat::ADPCM; - sourceType = SourceType::Stereo; - interpolationMode = InterpolationMode::Linear; - - samplePosition = 0; - currentBufferPaddr = 0; - previousBufferID = 0; - currentBufferID = 0; - syncCount = 0; - rateMultiplier = 1.f; - - buffers = {}; - interpolationState = {}; - currentSamples.clear(); - - gains.fill({}); - enabledMixStages = 0; - } -} // namespace Audio diff --git a/src/core/audio/miniaudio_device.cpp b/src/core/audio/miniaudio_device.cpp deleted file mode 100644 index 8e2a1e71..00000000 --- a/src/core/audio/miniaudio_device.cpp +++ /dev/null @@ -1,216 +0,0 @@ -#include "audio/miniaudio_device.hpp" - -#include -#include -#include -#include - -#include "helpers.hpp" - -MiniAudioDevice::MiniAudioDevice(const AudioDeviceConfig& audioSettings) : AudioDeviceInterface(nullptr, audioSettings), initialized(false) { - running = false; -} - -void MiniAudioDevice::init(Samples& samples, bool safe) { - this->samples = &samples; - running = false; - - // Probe for device and available backends and initialize audio - ma_backend backends[ma_backend_null + 1]; - uint count = 0; - - if (safe) { - backends[0] = ma_backend_null; - count = 1; - } else { - bool found = false; - for (uint i = 0; i <= ma_backend_null; i++) { - ma_backend backend = ma_backend(i); - if (!ma_is_backend_enabled(backend)) { - continue; - } - - backends[count++] = backend; - - // TODO: Make backend selectable here - found = true; - // count = 1; - // backends[0] = backend; - } - - if (!found) { - initialized = false; - - Helpers::warn("No valid audio backend found\n"); - return; - } - } - - if (ma_context_init(backends, count, nullptr, &context) != MA_SUCCESS) { - initialized = false; - - Helpers::warn("Unable to initialize audio context"); - return; - } - audioDevices.clear(); - - struct UserContext { - MiniAudioDevice* miniAudio; - ma_device_config& config; - bool found = false; - }; - UserContext userContext = {.miniAudio = this, .config = deviceConfig}; - - ma_context_enumerate_devices( - &context, - [](ma_context* pContext, ma_device_type deviceType, const ma_device_info* pInfo, void* pUserData) -> ma_bool32 { - if (deviceType != ma_device_type_playback) { - return true; - } - - UserContext* userContext = reinterpret_cast(pUserData); - userContext->miniAudio->audioDevices.push_back(pInfo->name); - - // TODO: Check if this is the device we want here - userContext->config.playback.pDeviceID = &pInfo->id; - userContext->found = true; - return true; - }, - &userContext - ); - - if (!userContext.found) { - Helpers::warn("MiniAudio: Device not found"); - } - - deviceConfig = ma_device_config_init(ma_device_type_playback); - // The 3DS outputs s16 stereo audio @ 32768 Hz - deviceConfig.playback.format = ma_format_s16; - deviceConfig.playback.channels = channelCount; - deviceConfig.sampleRate = sampleRate; - // deviceConfig.periodSizeInFrames = 64; - // deviceConfig.periods = 16; - deviceConfig.pUserData = this; - deviceConfig.aaudio.usage = ma_aaudio_usage_game; - deviceConfig.wasapi.noAutoConvertSRC = true; - - lastStereoSample = {0, 0}; - - deviceConfig.dataCallback = [](ma_device* device, void* out, const void* input, ma_uint32 frameCount) { - auto self = reinterpret_cast(device->pUserData); - if (!self->running) { - return; - } - - s16* output = reinterpret_cast(out); - usize samplesWritten = 0; - samplesWritten += self->samples->pop(output, frameCount * channelCount); - - // Get the last sample for underrun handling - if (samplesWritten != 0) { - std::memcpy(&self->lastStereoSample[0], &output[(samplesWritten - 1) * 2], sizeof(lastStereoSample)); - } - - // Adjust the volume of our samples based on the emulator's volume slider - float audioVolume = self->audioSettings.getVolume(); - // If volume is 1.0 we don't need to do anything - if (audioVolume != 1.0f) { - s16* sample = output; - - // If our volume is > 1.0 then we boost samples using a logarithmic scale, - // In this case we also have to clamp samples to make sure they don't wrap around - if (audioVolume > 1.0f) { - audioVolume = 0.6 + 20 * std::log10(audioVolume); - - constexpr s32 min = s32(std::numeric_limits::min()); - constexpr s32 max = s32(std::numeric_limits::max()); - - for (usize i = 0; i < samplesWritten; i += 2) { - s16 l = s16(std::clamp(s32(float(sample[0]) * audioVolume), min, max)); - s16 r = s16(std::clamp(s32(float(sample[1]) * audioVolume), min, max)); - - *sample++ = l; - *sample++ = r; - } - } else { - // If our volume is in [0.0, 1.0) then just multiply by the volume. No need to clamp, since there is no danger of our samples wrapping - // around due to overflow - - // If we're applying cubic volume curve, raise volume to the power of 3 - if (self->audioSettings.volumeCurve == AudioDeviceConfig::VolumeCurve::Cubic) { - audioVolume = audioVolume * audioVolume * audioVolume; - } - - for (usize i = 0; i < samplesWritten; i += 2) { - s16 l = s16(float(sample[0]) * audioVolume); - s16 r = s16(float(sample[1]) * audioVolume); - - *sample++ = l; - *sample++ = r; - } - } - } - - // If underruning, copy the last output sample - { - s16* pointer = &output[samplesWritten * 2]; - s16 l = self->lastStereoSample[0]; - s16 r = self->lastStereoSample[1]; - - for (usize i = samplesWritten; i < frameCount; i++) { - *pointer++ = l; - *pointer++ = r; - } - } - }; - - if (ma_device_init(&context, &deviceConfig, &device) != MA_SUCCESS) { - Helpers::warn("Unable to initialize audio device"); - initialized = false; - return; - } - - initialized = true; -} - -void MiniAudioDevice::start() { - if (!initialized) { - Helpers::warn("MiniAudio device not initialized, won't start"); - return; - } - - // Ignore the call to start if the device is already running - if (!running) { - if (ma_device_start(&device) == MA_SUCCESS) { - running = true; - } else { - Helpers::warn("Failed to start audio device"); - } - } -} - -void MiniAudioDevice::stop() { - if (!initialized) { - Helpers::warn("MiniAudio device not initialized, can't stop"); - return; - } - - if (running) { - running = false; - - if (ma_device_stop(&device) != MA_SUCCESS) { - Helpers::warn("Failed to stop audio device"); - } - } -} - -void MiniAudioDevice::close() { - stop(); - - if (initialized) { - initialized = false; - - ma_device_uninit(&device); - ma_context_uninit(&context); - } -} \ No newline at end of file diff --git a/src/core/audio/null_core.cpp b/src/core/audio/null_core.cpp deleted file mode 100644 index 7ba584cf..00000000 --- a/src/core/audio/null_core.cpp +++ /dev/null @@ -1,164 +0,0 @@ -#include "audio/null_core.hpp" - -#include "services/dsp.hpp" - -namespace Audio { - namespace DSPPipeType { - enum : u32 { - Debug = 0, - DMA = 1, - Audio = 2, - Binary = 3, - }; - } - - void NullDSP::resetAudioPipe() { - // Hardcoded responses for now - // These are DSP DRAM offsets for various variables - // https://www.3dbrew.org/wiki/DSP_Memory_Region - static constexpr std::array responses = { - 0x000F, // Number of responses - 0xBFFF, // Frame counter - 0x9E92, // Source configs - 0x8680, // Source statuses - 0xA792, // ADPCM coefficients - 0x9430, // DSP configs - 0x8400, // DSP status - 0x8540, // Final samples - 0x9492, // Intermediate mix samples - 0x8710, // Compressor - 0x8410, // Debug - 0xA912, // ?? - 0xAA12, // ?? - 0xAAD2, // ?? - 0xAC52, // Surround sound biquad filter 1 - 0xAC5C // Surround sound biquad filter 2 - }; - - std::vector& audioPipe = pipeData[DSPPipeType::Audio]; - audioPipe.resize(responses.size() * sizeof(u16)); - - // Push back every response to the audio pipe - size_t index = 0; - for (auto e : responses) { - audioPipe[index++] = e & 0xff; - audioPipe[index++] = e >> 8; - } - } - - void NullDSP::reset() { - loaded = false; - for (auto& e : pipeData) { - e.clear(); - } - - // Note: Reset audio pipe AFTER resetting all pipes, otherwise the new data will be yeeted - resetAudioPipe(); - } - - void NullDSP::loadComponent(std::vector& data, u32 programMask, u32 dataMask) { - if (loaded) { - Helpers::warn("Loading DSP component when already loaded"); - } - - loaded = true; - scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::cyclesPerFrame); - } - - void NullDSP::unloadComponent() { - if (!loaded) { - Helpers::warn("Audio: unloadComponent called without a running program"); - } - - loaded = false; - scheduler.removeEvent(Scheduler::EventType::RunDSP); - } - - void NullDSP::runAudioFrame(u64 eventTimestamp) { - // Signal audio pipe when an audio frame is done - if (dspState == DSPState::On) [[likely]] { - dspService.triggerPipeEvent(DSPPipeType::Audio); - } - - scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::cyclesPerFrame); - } - - u16 NullDSP::recvData(u32 regId) { - if (regId != 0) { - Helpers::panic("Audio: invalid register in null frontend"); - } - - return dspState == DSPState::On; - } - - void NullDSP::writeProcessPipe(u32 channel, u32 size, u32 buffer) { - enum class StateChange : u8 { - Initialize = 0, - Shutdown = 1, - Wakeup = 2, - Sleep = 3, - }; - - switch (channel) { - case DSPPipeType::Audio: { - if (size != 4) { - printf("Invalid size written to DSP Audio Pipe\n"); - break; - } - - // Get new state - const u8 state = mem.read8(buffer); - if (state > 3) { - log("WriteProcessPipe::Audio: Unknown state change type"); - } else { - switch (static_cast(state)) { - case StateChange::Initialize: - // TODO: Other initialization stuff here - dspState = DSPState::On; - resetAudioPipe(); - - dspService.triggerPipeEvent(DSPPipeType::Audio); - break; - - case StateChange::Shutdown: dspState = DSPState::Off; break; - - default: Helpers::panic("Unimplemented DSP audio pipe state change %d", state); - } - } - break; - } - - case DSPPipeType::Binary: - Helpers::warn("Unimplemented write to binary pipe! Size: %d\n", size); - - // This pipe and interrupt are normally used for requests like AAC decode - dspService.triggerPipeEvent(DSPPipeType::Binary); - break; - - default: log("Audio::NullDSP: Wrote to unimplemented pipe %d\n", channel); break; - } - } - - std::vector NullDSP::readPipe(u32 pipe, u32 peer, u32 size, u32 buffer) { - if (size & 1) Helpers::panic("Tried to read odd amount of bytes from DSP pipe"); - if (pipe >= pipeCount || size > 0xffff) { - return {}; - } - - if (pipe != DSPPipeType::Audio) { - log("Reading from non-audio pipe! This might be broken, might need to check what pipe is being read from and implement writing to it\n"); - } - - std::vector& data = pipeData[pipe]; - size = std::min(size, data.size()); // Clamp size to the maximum available data size - - if (size == 0) { - return {}; - } - - // Return "size" bytes from the audio pipe and erase them - std::vector out(data.begin(), data.begin() + size); - data.erase(data.begin(), data.begin() + size); - return out; - } -} // namespace Audio diff --git a/src/core/audio/teakra_core.cpp b/src/core/audio/teakra_core.cpp deleted file mode 100644 index 05d39487..00000000 --- a/src/core/audio/teakra_core.cpp +++ /dev/null @@ -1,321 +0,0 @@ -#include "audio/teakra_core.hpp" - -#include -#include -#include -#include - -#include "audio/dsp_binary.hpp" -#include "services/dsp.hpp" - -using namespace Audio; - -TeakraDSP::TeakraDSP(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& config) - : DSPCore(mem, scheduler, dspService, config), pipeBaseAddr(0), running(false) { - // Set up callbacks for Teakra - Teakra::AHBMCallback ahbm; - - // The AHBM read handlers read from paddrs rather than vaddrs which mem.read8 and the like use - // TODO: When we implement more efficient paddr accesses with a page table or similar, these handlers - // Should be made to properly use it, since this method is hacky and will segfault if given an invalid addr - ahbm.read8 = [&](u32 addr) -> u8 { return mem.getFCRAM()[addr - PhysicalAddrs::FCRAM]; }; - ahbm.read16 = [&](u32 addr) -> u16 { return *(u16*)&mem.getFCRAM()[addr - PhysicalAddrs::FCRAM]; }; - ahbm.read32 = [&](u32 addr) -> u32 { return *(u32*)&mem.getFCRAM()[addr - PhysicalAddrs::FCRAM]; }; - - ahbm.write8 = [&](u32 addr, u8 value) { mem.getFCRAM()[addr - PhysicalAddrs::FCRAM] = value; }; - ahbm.write16 = [&](u32 addr, u16 value) { *(u16*)&mem.getFCRAM()[addr - PhysicalAddrs::FCRAM] = value; }; - ahbm.write32 = [&](u32 addr, u32 value) { *(u32*)&mem.getFCRAM()[addr - PhysicalAddrs::FCRAM] = value; }; - - teakra.SetAHBMCallback(ahbm); - teakra.SetAudioCallback([](std::array sample) { /* Do nothing */ }); - - // Set up event handlers. These handlers forward a hardware interrupt to the DSP service, which is responsible - // For triggering the appropriate DSP kernel events - // Note: It's important not to fire any events if "loaded" is false, ie if we haven't fully loaded a DSP component yet - teakra.SetRecvDataHandler(0, [&]() { - if (loaded) { - dspService.triggerInterrupt0(); - } - }); - - teakra.SetRecvDataHandler(1, [&]() { - if (loaded) { - dspService.triggerInterrupt1(); - } - }); - - auto processPipeEvent = [&](bool dataEvent) { - if (!loaded) { - return; - } - - if (dataEvent) { - signalledData = true; - } else { - if ((teakra.GetSemaphore() & 0x8000) == 0) { - return; - } - - signalledSemaphore = true; - } - - if (signalledSemaphore && signalledData) { - signalledSemaphore = signalledData = false; - - u16 slot = teakra.RecvData(2); - u16 side = slot & 1; - u16 pipe = slot / 2; - - if (side != static_cast(PipeDirection::DSPtoCPU)) { - return; - } - - if (pipe == 0) { - Helpers::warn("Pipe event for debug pipe: Should be ignored and the data should be flushed"); - } else { - dspService.triggerPipeEvent(pipe); - } - } - }; - - teakra.SetRecvDataHandler(2, [processPipeEvent]() { processPipeEvent(true); }); - teakra.SetSemaphoreHandler([processPipeEvent]() { processPipeEvent(false); }); -} - -void TeakraDSP::reset() { - teakra.Reset(); - running = false; - loaded = false; - signalledData = signalledSemaphore = false; - - audioFrameIndex = 0; -} - -void TeakraDSP::setAudioEnabled(bool enable) { - if (audioEnabled != enable) { - audioEnabled = enable; - - // Set the appropriate audio callback for Teakra - if (audioEnabled) { - teakra.SetAudioCallback([this](std::array sample) { - audioFrame[audioFrameIndex++] = sample[0]; - audioFrame[audioFrameIndex++] = sample[1]; - - // Push our samples at the end of an audio frame - if (audioFrameIndex >= audioFrame.size()) { - audioFrameIndex -= audioFrame.size(); - - // Wait until we've actually got room to do so - while (sampleBuffer.size() + 2 > sampleBuffer.Capacity()) { - std::this_thread::sleep_for(std::chrono::milliseconds{1}); - } - - sampleBuffer.push(audioFrame.data(), audioFrame.size()); - } - }); - } else { - teakra.SetAudioCallback([](std::array sample) { /* Do nothing */ }); - } - } -} - -// https://github.com/citra-emu/citra/blob/master/src/audio_core/lle/lle.cpp -void TeakraDSP::writeProcessPipe(u32 channel, u32 size, u32 buffer) { - size &= 0xffff; - - PipeStatus status = getPipeStatus(channel, PipeDirection::CPUtoDSP); - bool needUpdate = false; // Do we need to update the pipe status and catch up Teakra? - - std::vector data; - data.reserve(size); - - // Read data to write - for (int i = 0; i < size; i++) { - const u8 byte = mem.read8(buffer + i); - data.push_back(byte); - } - u8* dataPointer = data.data(); - - while (size != 0) { - if (status.isFull()) { - Helpers::warn("Teakra: Writing to full pipe"); - } - - // Calculate begin/end/size for write - const u16 writeEnd = status.isWrapped() ? (status.readPointer & PipeStatus::pointerMask) : status.byteSize; - const u16 writeBegin = status.writePointer & PipeStatus::pointerMask; - const u16 writeSize = std::min(u16(size), writeEnd - writeBegin); - - if (writeEnd <= writeBegin) [[unlikely]] { - Helpers::warn("Teakra: Writing to pipe but end <= start"); - } - - // Write data to pipe, increment write and buffer pointers, decrement size - std::memcpy(getDataPointer(status.address * 2 + writeBegin), dataPointer, writeSize); - dataPointer += writeSize; - status.writePointer += writeSize; - size -= writeSize; - - if ((status.writePointer & PipeStatus::pointerMask) > status.byteSize) [[unlikely]] { - Helpers::warn("Teakra: Writing to pipe but write > size"); - } - - if ((status.writePointer & PipeStatus::pointerMask) == status.byteSize) { - status.writePointer &= PipeStatus::wrapBit; - status.writePointer ^= PipeStatus::wrapBit; - } - needUpdate = true; - } - - if (needUpdate) { - updatePipeStatus(status); - while (!teakra.SendDataIsEmpty(2)) { - runSlice(); - } - - teakra.SendData(2, status.slot); - } -} - -std::vector TeakraDSP::readPipe(u32 channel, u32 peer, u32 size, u32 buffer) { - size &= 0xffff; - - PipeStatus status = getPipeStatus(channel, PipeDirection::DSPtoCPU); - - std::vector pipeData(size); - u8* dataPointer = pipeData.data(); - bool needUpdate = false; // Do we need to update the pipe status and catch up Teakra? - - while (size != 0) { - if (status.isEmpty()) [[unlikely]] { - Helpers::warn("Teakra: Reading from empty pipe"); - return pipeData; - } - - // Read as many bytes as possible - const u16 readEnd = status.isWrapped() ? status.byteSize : (status.writePointer & PipeStatus::pointerMask); - const u16 readBegin = status.readPointer & PipeStatus::pointerMask; - const u16 readSize = std::min(u16(size), readEnd - readBegin); - - // Copy bytes to the output vector, increment the read and vector pointers and decrement the size appropriately - std::memcpy(dataPointer, getDataPointer(status.address * 2 + readBegin), readSize); - dataPointer += readSize; - status.readPointer += readSize; - size -= readSize; - - if ((status.readPointer & PipeStatus::pointerMask) > status.byteSize) [[unlikely]] { - Helpers::warn("Teakra: Reading from pipe but read > size"); - } - - if ((status.readPointer & PipeStatus::pointerMask) == status.byteSize) { - status.readPointer &= PipeStatus::wrapBit; - status.readPointer ^= PipeStatus::wrapBit; - } - - needUpdate = true; - } - - if (needUpdate) { - updatePipeStatus(status); - while (!teakra.SendDataIsEmpty(2)) { - runSlice(); - } - - teakra.SendData(2, status.slot); - } - - return pipeData; -} - -void TeakraDSP::loadComponent(std::vector& data, u32 programMask, u32 dataMask) { - // TODO: maybe move this to the DSP service - if (loaded) { - Helpers::warn("Loading DSP component when already loaded"); - return; - } - - teakra.Reset(); - running = true; - - u8* dspCode = teakra.GetDspMemory().data(); - u8* dspData = dspCode + 0x40000; - - Dsp1 dsp1; - std::memcpy(&dsp1, data.data(), sizeof(dsp1)); - - // TODO: verify DSP1 signature - - // Load DSP segments to DSP RAM - // TODO: verify hashes - for (uint i = 0; i < dsp1.segmentCount; i++) { - auto& segment = dsp1.segments[i]; - u32 addr = segment.dspAddr << 1; - u8* src = data.data() + segment.offs; - u8* dst = nullptr; - - switch (segment.type) { - case 0: - case 1: dst = dspCode + addr; break; - default: dst = dspData + addr; break; - } - - std::memcpy(dst, src, segment.size); - } - - bool syncWithDsp = dsp1.flags & 0x1; - bool loadSpecialSegment = (dsp1.flags >> 1) & 0x1; - - // TODO: how does the special segment work? - if (loadSpecialSegment) { - log("LoadComponent: special segment not supported"); - } - - if (syncWithDsp) { - // Wait for the DSP to reply with 1s in all RECV registers - for (int i = 0; i < 3; i++) { - do { - while (!teakra.RecvDataIsReady(i)) { - runSlice(); - } - } while (teakra.RecvData(i) != 1); - } - } - - // Retrieve the pipe base address - while (!teakra.RecvDataIsReady(2)) { - runSlice(); - } - pipeBaseAddr = teakra.RecvData(2); - - // Schedule next DSP event - scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::lleSlice * 2); - loaded = true; -} - -void TeakraDSP::unloadComponent() { - if (!loaded) { - Helpers::warn("Audio: unloadComponent called without a running program"); - return; - } - loaded = false; - // Stop scheduling DSP events - scheduler.removeEvent(Scheduler::EventType::RunDSP); - - // Wait for SEND2 to be ready, then send the shutdown command to the DSP - while (!teakra.SendDataIsEmpty(2)) { - runSlice(); - } - - teakra.SendData(2, 0x8000); - - // Wait for shutdown to be acknowledged - while (!teakra.RecvDataIsReady(2)) { - runSlice(); - } - - // Read the value and discard it, completing shutdown - teakra.RecvData(2); - running = false; -} - -void* TeakraDSP::getRegisters() { return &teakra.GetRegisterState(); } \ No newline at end of file diff --git a/src/core/cheats.cpp b/src/core/cheats.cpp index 9c605762..618460c5 100644 --- a/src/core/cheats.cpp +++ b/src/core/cheats.cpp @@ -1,7 +1,5 @@ #include "cheats.hpp" -#include "swap.hpp" - Cheats::Cheats(Memory& mem, HIDService& hid) : ar(mem, hid) { reset(); } void Cheats::reset() { @@ -9,70 +7,9 @@ void Cheats::reset() { ar.reset(); // Reset ActionReplay } -u32 Cheats::addCheat(const Cheat& cheat) { - cheatsLoaded = true; - - // Find an empty slot if a cheat was previously removed - for (size_t i = 0; i < cheats.size(); i++) { - if (cheats[i].type == CheatType::None) { - cheats[i] = cheat; - return i; - } - } - - // Otherwise, just add a new slot +void Cheats::addCheat(const Cheat& cheat) { cheats.push_back(cheat); - return cheats.size() - 1; -} - -u32 Cheats::addCheat(const u8* data, size_t size) { - if ((size % 8) != 0) { - return badCheatHandle; - } - - Cheats::Cheat cheat; - cheat.enabled = true; - cheat.type = Cheats::CheatType::ActionReplay; - - for (size_t i = 0; i < size; i += 8) { - auto read32 = [](const u8* ptr) { return (u32(ptr[3]) << 24) | (u32(ptr[2]) << 16) | (u32(ptr[1]) << 8) | u32(ptr[0]); }; - - // Data is passed to us in big endian so we bswap - u32 firstWord = Common::swap32(read32(data + i)); - u32 secondWord = Common::swap32(read32(data + i + 4)); - cheat.instructions.insert(cheat.instructions.end(), {firstWord, secondWord}); - } - - return addCheat(cheat); -} - -void Cheats::removeCheat(u32 id) { - if (id >= cheats.size()) { - return; - } - - // Not using std::erase because we don't want to invalidate cheat IDs - cheats[id].type = CheatType::None; - cheats[id].instructions.clear(); - - // Check if no cheats are loaded - for (const auto& cheat : cheats) { - if (cheat.type != CheatType::None) return; - } - - cheatsLoaded = false; -} - -void Cheats::enableCheat(u32 id) { - if (id < cheats.size()) { - cheats[id].enabled = true; - } -} - -void Cheats::disableCheat(u32 id) { - if (id < cheats.size()) { - cheats[id].enabled = false; - } + cheatsLoaded = true; } void Cheats::clear() { @@ -82,15 +19,12 @@ void Cheats::clear() { void Cheats::run() { for (const Cheat& cheat : cheats) { - if (!cheat.enabled) continue; - switch (cheat.type) { case CheatType::ActionReplay: { ar.runCheat(cheat.instructions); break; } - case CheatType::None: break; default: Helpers::panic("Unknown cheat device!"); } } diff --git a/src/core/crypto/aes_engine.cpp b/src/core/crypto/aes_engine.cpp index 1d7baad9..f4bf3494 100644 --- a/src/core/crypto/aes_engine.cpp +++ b/src/core/crypto/aes_engine.cpp @@ -1,36 +1,18 @@ -#include "crypto/aes_engine.hpp" - -#include #include -#include -#include -#include -#include +#include +#include "crypto/aes_engine.hpp" #include "helpers.hpp" namespace Crypto { void AESEngine::loadKeys(const std::filesystem::path& path) { std::ifstream file(path, std::ios::in); - + if (file.fail()) { Helpers::warn("Keys: Couldn't read key file: %s", path.c_str()); return; } - auto splitString = [](const std::string& s, const char c) -> std::vector { - std::istringstream tmp(s); - std::vector result(1); - - while (std::getline(tmp, *result.rbegin(), c)) { - result.emplace_back(); - } - - // Remove temporary slot - result.pop_back(); - return result; - }; - while (!file.eof()) { std::string line; std::getline(file, line); @@ -40,7 +22,7 @@ namespace Crypto { continue; } - const auto parts = splitString(line, '='); + const auto parts = Helpers::split(line, '='); if (parts.size() != 2) { Helpers::warn("Keys: Failed to parse %s", line.c_str()); continue; @@ -76,10 +58,18 @@ namespace Crypto { } switch (keyType) { - case 'X': setKeyX(slotId, key.value()); break; - case 'Y': setKeyY(slotId, key.value()); break; - case 'N': setNormalKey(slotId, key.value()); break; - default: Helpers::warn("Keys: Invalid key type %c", keyType); break; + case 'X': + setKeyX(slotId, key.value()); + break; + case 'Y': + setKeyY(slotId, key.value()); + break; + case 'N': + setNormalKey(slotId, key.value()); + break; + default: + Helpers::warn("Keys: Invalid key type %c", keyType); + break; } } @@ -90,65 +80,4 @@ namespace Crypto { keysLoaded = true; } - - void AESEngine::setSeedPath(const std::filesystem::path& path) { seedDatabase.open(path, "rb"); } - - // Loads seeds from a seed file, return true on success and false on failure - bool AESEngine::loadSeeds() { - if (!seedDatabase.isOpen()) { - return false; - } - - // The # of seeds is stored at offset 0 - u32_le seedCount = 0; - - if (!seedDatabase.rewind()) { - return false; - } - - auto [success, size] = seedDatabase.readBytes(&seedCount, sizeof(u32)); - if (!success || size != sizeof(u32)) { - return false; - } - - // Key data starts from offset 16 - if (!seedDatabase.seek(16)) { - return false; - } - - Crypto::Seed seed; - for (uint i = 0; i < seedCount; i++) { - std::tie(success, size) = seedDatabase.readBytes(&seed, sizeof(seed)); - if (!success || size != sizeof(seed)) { - return false; - } - - seeds.push_back(seed); - } - - return true; - } - - std::optional AESEngine::getSeedFromDB(u64 titleID) { - // We don't have a seed db nor any seeds loaded, return nullopt - if (!seedDatabase.isOpen() && seeds.empty()) { - return std::nullopt; - } - - // We have a seed DB but haven't loaded the seeds yet, so load them - if (seedDatabase.isOpen() && seeds.empty()) { - bool success = loadSeeds(); - if (!success) { - return std::nullopt; - } - } - - for (Crypto::Seed& seed : seeds) { - if (seed.titleID == titleID) { - return seed.seed; - } - } - - return std::nullopt; - } -}; // namespace Crypto \ No newline at end of file +}; \ No newline at end of file diff --git a/src/core/fs/archive_card_spi.cpp b/src/core/fs/archive_card_spi.cpp deleted file mode 100644 index 965ae982..00000000 --- a/src/core/fs/archive_card_spi.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include - -#include "fs/archive_card_spi.hpp" - -namespace fs = std::filesystem; - -HorizonResult CardSPIArchive::createFile(const FSPath& path, u64 size) { - Helpers::panic("[Card SPI] CreateFile not yet supported"); - return Result::Success; -} - -HorizonResult CardSPIArchive::deleteFile(const FSPath& path) { - Helpers::panic("[Card SPI] Unimplemented DeleteFile"); - return Result::Success; -} - -HorizonResult CardSPIArchive::createDirectory(const FSPath& path) { - Helpers::panic("[Card SPI] CreateDirectory not yet supported"); - return Result::Success; -} - -FileDescriptor CardSPIArchive::openFile(const FSPath& path, const FilePerms& perms) { - Helpers::panic("[Card SPI] OpenFile not yet supported"); - return FileError; -} - -Rust::Result CardSPIArchive::openArchive(const FSPath& path) { - if (!path.isEmptyType()) { - Helpers::panic("Unimplemented path type for CardSPIArchive::OpenArchive"); - } - - Helpers::warn("Unimplemented: Card SPI archive"); - return Err(Result::FailurePlaceholder); -} - -Rust::Result CardSPIArchive::openDirectory(const FSPath& path) { - Helpers::panic("[Card SPI] OpenDirectory not yet supported"); - return Err(Result::FailurePlaceholder); -} diff --git a/src/core/fs/archive_ext_save_data.cpp b/src/core/fs/archive_ext_save_data.cpp index 2aaa157e..87b3662b 100644 --- a/src/core/fs/archive_ext_save_data.cpp +++ b/src/core/fs/archive_ext_save_data.cpp @@ -7,13 +7,12 @@ HorizonResult ExtSaveDataArchive::createFile(const FSPath& path, u64 size) { if (size == 0) Helpers::panic("ExtSaveData file does not support size == 0"); - if (path.isTextPath()) { - if (!isSafeTextPath(path)) { - Helpers::panic("Unsafe path in ExtSaveData::OpenFile"); - } + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) + Helpers::panic("Unsafe path in ExtSaveData::CreateFile"); fs::path p = IOFile::getAppData() / backingFolder; - appendPath(p, path); + p += fs::path(path.utf16_string).make_preferred(); if (fs::exists(p)) return Result::FS::AlreadyExists; @@ -29,17 +28,17 @@ HorizonResult ExtSaveDataArchive::createFile(const FSPath& path, u64 size) { return Result::FS::FileTooLarge; } - Helpers::panic("ExtSaveDataArchive::CreateFile: Failed"); + Helpers::panic("ExtSaveDataArchive::OpenFile: Failed"); return Result::Success; } HorizonResult ExtSaveDataArchive::deleteFile(const FSPath& path) { - if (path.isTextPath()) { - if (!isSafeTextPath(path)) + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in ExtSaveData::DeleteFile"); fs::path p = IOFile::getAppData() / backingFolder; - appendPath(p, path); + p += fs::path(path.utf16_string).make_preferred(); if (fs::is_directory(p)) { Helpers::panic("ExtSaveData::DeleteFile: Tried to delete directory"); @@ -66,16 +65,15 @@ HorizonResult ExtSaveDataArchive::deleteFile(const FSPath& path) { } FileDescriptor ExtSaveDataArchive::openFile(const FSPath& path, const FilePerms& perms) { - if (path.isTextPath()) { - if (!isSafeTextPath(path)) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in ExtSaveData::OpenFile"); - } if (perms.create()) Helpers::panic("[ExtSaveData] Can't open file with create flag"); fs::path p = IOFile::getAppData() / backingFolder; - appendPath(p, path); + p += fs::path(path.utf16_string).make_preferred(); if (fs::exists(p)) { // Return file descriptor if the file exists IOFile file(p.string().c_str(), "r+b"); // According to Citra, this ignores the OpenFlags field and always opens as r+b? TODO: Check @@ -89,56 +87,16 @@ FileDescriptor ExtSaveDataArchive::openFile(const FSPath& path, const FilePerms& return FileError; } -HorizonResult ExtSaveDataArchive::renameFile(const FSPath& oldPath, const FSPath& newPath) { - if (!oldPath.isUTF16() || !newPath.isUTF16()) { - Helpers::panic("Invalid path type for ExtSaveData::RenameFile"); - } - - if (!isPathSafe(oldPath) || !isPathSafe(newPath)) { - Helpers::panic("Unsafe path in ExtSaveData::RenameFile"); - } - - // Construct host filesystem paths - fs::path sourcePath = IOFile::getAppData() / backingFolder; - fs::path destPath = sourcePath; - - sourcePath += fs::path(oldPath.utf16_string).make_preferred(); - destPath += fs::path(newPath.utf16_string).make_preferred(); - - if (!fs::is_regular_file(sourcePath) || fs::is_directory(sourcePath)) { - Helpers::warn("ExtSaveData::RenameFile: Source path is not a file or is directory"); - return Result::FS::RenameNonexistentFileOrDir; - } - - if (fs::is_regular_file(destPath) || fs::is_directory(destPath)) { - Helpers::warn("ExtSaveData::RenameFile: Dest path already exists"); - return Result::FS::RenameFileDestExists; - } - - std::error_code ec; - fs::rename(sourcePath, destPath, ec); - - if (ec) { - Helpers::warn("Error in ExtSaveData::RenameFile"); - return Result::FS::RenameNonexistentFileOrDir; - } - - return Result::Success; -} - HorizonResult ExtSaveDataArchive::createDirectory(const FSPath& path) { - if (path.isTextPath()) { - if (!isSafeTextPath(path)) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) { Helpers::panic("Unsafe path in ExtSaveData::OpenFile"); } fs::path p = IOFile::getAppData() / backingFolder; - appendPath(p, path); - - if (fs::is_directory(p)) { - return Result::FS::AlreadyExists; - } + p += fs::path(path.utf16_string).make_preferred(); + if (fs::is_directory(p)) return Result::FS::AlreadyExists; if (fs::is_regular_file(p)) { Helpers::panic("File path passed to ExtSaveData::CreateDirectory"); } @@ -161,7 +119,7 @@ std::string ExtSaveDataArchive::getExtSaveDataPathFromBinary(const FSPath& path) } Rust::Result ExtSaveDataArchive::openArchive(const FSPath& path) { - if (!path.isBinary() || path.binary.size() != 12) { + if (path.type != PathType::Binary || path.binary.size() != 12) { Helpers::panic("ExtSaveData accessed with an invalid path in OpenArchive"); } @@ -177,12 +135,12 @@ Rust::Result ExtSaveDataArchive::openArchive(const } Rust::Result ExtSaveDataArchive::openDirectory(const FSPath& path) { - if (path.isTextPath()) { - if (!isSafeTextPath(path)) + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in ExtSaveData::OpenDirectory"); fs::path p = IOFile::getAppData() / backingFolder; - appendPath(p, path); + p += fs::path(path.utf16_string).make_preferred(); if (fs::is_regular_file(p)) { printf("ExtSaveData: OpenArchive used with a file path"); diff --git a/src/core/fs/archive_ncch.cpp b/src/core/fs/archive_ncch.cpp index 5844bbda..d7dd1f57 100644 --- a/src/core/fs/archive_ncch.cpp +++ b/src/core/fs/archive_ncch.cpp @@ -32,7 +32,7 @@ HorizonResult NCCHArchive::deleteFile(const FSPath& path) { } FileDescriptor NCCHArchive::openFile(const FSPath& path, const FilePerms& perms) { - if (!path.isBinary() || path.binary.size() != 20) { + if (path.type != PathType::Binary || path.binary.size() != 20) { Helpers::panic("NCCHArchive::OpenFile: Invalid path"); } @@ -49,7 +49,7 @@ FileDescriptor NCCHArchive::openFile(const FSPath& path, const FilePerms& perms) } Rust::Result NCCHArchive::openArchive(const FSPath& path) { - if (!path.isBinary() || path.binary.size() != 16) { + if (path.type != PathType::Binary || path.binary.size() != 16) { Helpers::panic("NCCHArchive::OpenArchive: Invalid path"); } @@ -74,13 +74,12 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size const u32 lowProgramID = *(u32*)&archivePath[0]; const u32 highProgramID = *(u32*)&archivePath[4]; - // High Title ID of the archive: https://3dbrew.org/wiki/Title_list. + // High Title ID of the archive (from Citra). https://3dbrew.org/wiki/Title_list. constexpr u32 sharedDataArchive = 0x0004009B; constexpr u32 systemDataArchive = 0x000400DB; - // Low IDs + // Low ID (taken from Citra) constexpr u32 miiData = 0x00010202; - constexpr u32 tlsRootCertificates = 0x00010602; constexpr u32 regionManifest = 0x00010402; constexpr u32 badWordList = 0x00010302; constexpr u32 sharedFont = 0x00014002; @@ -89,10 +88,6 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size if (highProgramID == sharedDataArchive) { if (lowProgramID == miiData) fileData = std::vector(std::begin(MII_DATA), std::end(MII_DATA)); else if (lowProgramID == regionManifest) fileData = std::vector(std::begin(COUNTRY_LIST_DATA), std::end(COUNTRY_LIST_DATA)); - else if (lowProgramID == tlsRootCertificates) { - Helpers::warn("Read from Shared Data archive 00010602"); - return 0; - } else Helpers::panic("[NCCH archive] Read unimplemented NAND file. ID: %08X", lowProgramID); } else if (highProgramID == systemDataArchive && lowProgramID == badWordList) { fileData = std::vector(std::begin(BAD_WORD_LIST_DATA), std::end(BAD_WORD_LIST_DATA)); @@ -142,7 +137,7 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size case PathType::RomFS: { const u64 romFSSize = cxi->romFS.size; const u64 romFSOffset = cxi->romFS.offset; - if ((offset >> 32) || (offset >= romFSSize) || (offset + size > romFSSize)) { + if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { Helpers::panic("Tried to read from NCCH with too big of an offset"); } @@ -166,4 +161,4 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size } return u32(bytesRead); -} +} \ No newline at end of file diff --git a/src/core/fs/archive_save_data.cpp b/src/core/fs/archive_save_data.cpp index 35bc93e4..107aefde 100644 --- a/src/core/fs/archive_save_data.cpp +++ b/src/core/fs/archive_save_data.cpp @@ -5,16 +5,15 @@ namespace fs = std::filesystem; HorizonResult SaveDataArchive::createFile(const FSPath& path, u64 size) { - if (path.isUTF16()) { + if (path.type == PathType::UTF16) { if (!isPathSafe(path)) Helpers::panic("Unsafe path in SaveData::CreateFile"); fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); - if (fs::exists(p)) { + if (fs::exists(p)) return Result::FS::AlreadyExists; - } IOFile file(p.string().c_str(), "wb"); @@ -34,23 +33,20 @@ HorizonResult SaveDataArchive::createFile(const FSPath& path, u64 size) { return Result::FS::FileTooLarge; } - Helpers::panic("SaveDataArchive::CreateFile: Failed"); + Helpers::panic("SaveDataArchive::OpenFile: Failed"); return Result::Success; } HorizonResult SaveDataArchive::createDirectory(const FSPath& path) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in SaveData::OpenFile"); - } fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); - if (fs::is_directory(p)) { + if (fs::is_directory(p)) return Result::FS::AlreadyExists; - } - if (fs::is_regular_file(p)) { Helpers::panic("File path passed to SaveData::CreateDirectory"); } @@ -63,10 +59,9 @@ HorizonResult SaveDataArchive::createDirectory(const FSPath& path) { } HorizonResult SaveDataArchive::deleteFile(const FSPath& path) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in SaveData::DeleteFile"); - } fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); @@ -96,14 +91,12 @@ HorizonResult SaveDataArchive::deleteFile(const FSPath& path) { } FileDescriptor SaveDataArchive::openFile(const FSPath& path, const FilePerms& perms) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in SaveData::OpenFile"); - } - if (perms.raw == 0 || (perms.create() && !perms.write())) { + if (perms.raw == 0 || (perms.create() && !perms.write())) Helpers::panic("[SaveData] Unsupported flags for OpenFile"); - } fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); @@ -132,10 +125,9 @@ FileDescriptor SaveDataArchive::openFile(const FSPath& path, const FilePerms& pe } Rust::Result SaveDataArchive::openDirectory(const FSPath& path) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in SaveData::OpenDirectory"); - } fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); @@ -193,7 +185,7 @@ void SaveDataArchive::format(const FSPath& path, const ArchiveBase::FormatInfo& } Rust::Result SaveDataArchive::openArchive(const FSPath& path) { - if (!path.isEmptyType()) { + if (path.type != PathType::Empty) { Helpers::panic("Unimplemented path type for SaveData archive: %d\n", path.type); return Err(Result::FS::NotFoundInvalid); } diff --git a/src/core/fs/archive_sdmc.cpp b/src/core/fs/archive_sdmc.cpp index f5f999f3..5049df14 100644 --- a/src/core/fs/archive_sdmc.cpp +++ b/src/core/fs/archive_sdmc.cpp @@ -1,207 +1,24 @@ #include "fs/archive_sdmc.hpp" #include -namespace fs = std::filesystem; - HorizonResult SDMCArchive::createFile(const FSPath& path, u64 size) { - if (path.isTextPath()) { - if (!isSafeTextPath(path)) { - Helpers::panic("Unsafe path in SDMC::CreateFile"); - } - - fs::path p = IOFile::getAppData() / "SDMC"; - appendPath(p, path); - - if (fs::exists(p)) { - return Result::FS::AlreadyExists; - } - - IOFile file(p.string().c_str(), "wb"); - - // If the size is 0, leave the file empty and return success - if (size == 0) { - file.close(); - return Result::Success; - } - - // If it is not empty, seek to size - 1 and write a 0 to create a file of size "size" - else if (file.seek(size - 1, SEEK_SET) && file.writeBytes("", 1).second == 1) { - file.close(); - return Result::Success; - } - - file.close(); - return Result::FS::FileTooLarge; - } - - Helpers::panic("SDMC::CreateFile: Failed"); + Helpers::panic("[SDMC] CreateFile not yet supported"); return Result::Success; } HorizonResult SDMCArchive::deleteFile(const FSPath& path) { - if (path.isTextPath()) { - if (!isSafeTextPath(path)) { - Helpers::panic("Unsafe path in SDMC::DeleteFile"); - } - - fs::path p = IOFile::getAppData() / "SDMC"; - appendPath(p, path); - - if (fs::is_directory(p)) { - Helpers::panic("SDMC::DeleteFile: Tried to delete directory"); - } - - if (!fs::is_regular_file(p)) { - return Result::FS::FileNotFoundAlt; - } - - std::error_code ec; - bool success = fs::remove(p, ec); - - // It might still be possible for fs::remove to fail, if there's eg an open handle to a file being deleted - // In this case, print a warning, but still return success for now - if (!success) { - Helpers::warn("SDMC::DeleteFile: fs::remove failed\n"); - } - - return Result::Success; - } - - Helpers::panic("SDMCArchive::DeleteFile: Unknown path type"); + Helpers::panic("[SDMC] Unimplemented DeleteFile"); return Result::Success; } FileDescriptor SDMCArchive::openFile(const FSPath& path, const FilePerms& perms) { - FilePerms realPerms = perms; - - if (isWriteOnly) { - if (perms.read()) { - Helpers::warn("SDMC: Read flag is not allowed in SDMC Write-Only archive"); - return FileError; - } - } else { - // Regular SDMC archive always has read permission - realPerms.raw |= (1 << 0); - } - - if ((realPerms.create() && !realPerms.write())) { - Helpers::panic("[SDMC] Unsupported flags for OpenFile"); - } - - std::filesystem::path p = IOFile::getAppData() / "SDMC"; - - switch (path.type) { - case PathType::ASCII: - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); - } - - p += fs::path(path.string).make_preferred(); - break; - - case PathType::UTF16: - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); - } - - p += fs::path(path.utf16_string).make_preferred(); - break; - - default: Helpers::panic("SDMCArchive::OpenFile: Failed. Path type: %d", path.type); return FileError; - } - - const char* permString = perms.write() ? "r+b" : "rb"; - - if (fs::exists(p)) { // Return file descriptor if the file exists - IOFile file(p.string().c_str(), permString); - return file.isOpen() ? file.getHandle() : FileError; - } else { - // If the file is not found, create it if the create flag is on - if (realPerms.create()) { - IOFile file(p.string().c_str(), "wb"); // Create file - file.close(); // Close it - - file.open(p.string().c_str(), permString); // Reopen with proper perms - return file.isOpen() ? file.getHandle() : FileError; - } else { - return FileError; - } - } -} - -HorizonResult SDMCArchive::createDirectory(const FSPath& path) { - std::filesystem::path p = IOFile::getAppData() / "SDMC"; - - switch (path.type) { - case PathType::ASCII: - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); - } - - p += fs::path(path.string).make_preferred(); - break; - - case PathType::UTF16: - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); - } - - p += fs::path(path.utf16_string).make_preferred(); - break; - - default: Helpers::panic("SDMCArchive::CreateDirectory: Failed. Path type: %d", path.type); return Result::FailurePlaceholder; - } - - if (fs::is_directory(p)) { - return Result::FS::AlreadyExists; - } - - if (fs::is_regular_file(p)) { - Helpers::panic("File path passed to SDMCArchive::CreateDirectory"); - } - - std::error_code ec; - bool success = fs::create_directory(p, ec); - return success ? Result::Success : Result::FS::UnexpectedFileOrDir; -} - -Rust::Result SDMCArchive::openDirectory(const FSPath& path) { - if (isWriteOnly) { - Helpers::warn("SDMC: OpenDirectory is not allowed in SDMC Write-Only archive"); - return Err(Result::FS::UnexpectedFileOrDir); - } - - if (path.isTextPath()) { - if (!isSafeTextPath(path)) { - Helpers::panic("Unsafe path in SDMC::OpenDirectory"); - } - - fs::path p = IOFile::getAppData() / "SDMC"; - appendPath(p, path); - - if (fs::is_regular_file(p)) { - printf("SDMC: OpenDirectory used with a file path"); - return Err(Result::FS::UnexpectedFileOrDir); - } - - if (fs::is_directory(p)) { - return Ok(DirectorySession(this, p)); - } else { - return Err(Result::FS::FileNotFoundAlt); - } - } - - Helpers::panic("SDMCArchive::OpenDirectory: Unimplemented path type"); - return Err(Result::Success); + printf("SDMCArchive::OpenFile: Failed"); + return FileError; } Rust::Result SDMCArchive::openArchive(const FSPath& path) { - // TODO: Fail here if the SD is disabled in the connfig. - if (!path.isEmptyType()) { - Helpers::panic("Unimplemented path type for SDMC::OpenArchive"); - } - - return Ok((ArchiveBase*)this); + printf("SDMCArchive::OpenArchive: Failed\n"); + return Err(Result::FS::NotFormatted); } std::optional SDMCArchive::readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) { diff --git a/src/core/fs/archive_self_ncch.cpp b/src/core/fs/archive_self_ncch.cpp index 4d73300c..9c911769 100644 --- a/src/core/fs/archive_self_ncch.cpp +++ b/src/core/fs/archive_self_ncch.cpp @@ -26,7 +26,7 @@ FileDescriptor SelfNCCHArchive::openFile(const FSPath& path, const FilePerms& pe return FileError; } - if (!path.isBinary() || path.binary.size() != 12) { + if (path.type != PathType::Binary || path.binary.size() != 12) { printf("Invalid SelfNCCH path type\n"); return FileError; } @@ -42,7 +42,7 @@ FileDescriptor SelfNCCHArchive::openFile(const FSPath& path, const FilePerms& pe } Rust::Result SelfNCCHArchive::openArchive(const FSPath& path) { - if (!path.isEmptyType()) { + if (path.type != PathType::Empty) { Helpers::panic("Invalid path type for SelfNCCH archive: %d\n", path.type); return Err(Result::FS::NotFoundInvalid); } @@ -83,7 +83,7 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 case PathType::RomFS: { const u64 romFSSize = cxi->romFS.size; const u64 romFSOffset = cxi->romFS.offset; - if ((offset >> 32) || (offset >= romFSSize) || (offset + size > romFSSize)) { + if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); } @@ -95,7 +95,7 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 case PathType::ExeFS: { const u64 exeFSSize = cxi->exeFS.size; const u64 exeFSOffset = cxi->exeFS.offset; - if ((offset >> 32) || (offset >= exeFSSize) || (offset + size > exeFSSize)) { + if ((offset >> 32) || (offset >= exeFSSize) || (offset + size >= exeFSSize)) { Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); } @@ -110,7 +110,7 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 const u64 romFSSize = cxi->romFS.size; const u64 romFSOffset = cxi->romFS.offset; - if ((offset >> 32) || (offset >= romFSSize) || (offset + size > romFSSize)) { + if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); } @@ -129,7 +129,7 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 switch (type) { case PathType::RomFS: { const u64 romFSSize = hb3dsx->romFSSize; - if ((offset >> 32) || (offset >= romFSSize) || (offset + size > romFSSize)) { + if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); } break; @@ -150,4 +150,4 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 } return u32(bytesRead); -} +} \ No newline at end of file diff --git a/src/core/fs/archive_system_save_data.cpp b/src/core/fs/archive_system_save_data.cpp deleted file mode 100644 index 038b2fc8..00000000 --- a/src/core/fs/archive_system_save_data.cpp +++ /dev/null @@ -1,169 +0,0 @@ -#include -#include "fs/archive_system_save_data.hpp" - -namespace fs = std::filesystem; - -Rust::Result SystemSaveDataArchive::openArchive(const FSPath& path) { - if (!path.isBinary()) { - Helpers::panic("Unimplemented path type for SystemSaveData::OpenArchive"); - } - - return Ok((ArchiveBase*)this); -} - -FileDescriptor SystemSaveDataArchive::openFile(const FSPath& path, const FilePerms& perms) { - // TODO: Validate this. Temporarily copied from SaveData archive - - if (path.isUTF16()) { - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SystemSaveData::OpenFile"); - } - - if (perms.raw == 0 || (perms.create() && !perms.write())) { - Helpers::panic("[SystemSaveData] Unsupported flags for OpenFile"); - } - - fs::path p = IOFile::getAppData() / ".." / "SharedFiles" / "SystemSaveData"; - p += fs::path(path.utf16_string).make_preferred(); - - const char* permString = perms.write() ? "r+b" : "rb"; - - if (fs::exists(p)) { // Return file descriptor if the file exists - IOFile file(p.string().c_str(), permString); - return file.isOpen() ? file.getHandle() : FileError; - } else { - // If the file is not found, create it if the create flag is on - if (perms.create()) { - IOFile file(p.string().c_str(), "wb"); // Create file - file.close(); // Close it - - file.open(p.string().c_str(), permString); // Reopen with proper perms - return file.isOpen() ? file.getHandle() : FileError; - } else { - return FileError; - } - } - } - - Helpers::panic("SystemSaveData::OpenFile: Failed"); - return FileError; -} - -HorizonResult SystemSaveDataArchive::createFile(const FSPath& path, u64 size) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SystemSaveData::CreateFile"); - } - - fs::path p = IOFile::getAppData() / ".." / "SharedFiles" / "SystemSaveData"; - p += fs::path(path.utf16_string).make_preferred(); - - if (fs::exists(p)) { - return Result::FS::AlreadyExists; - } - - IOFile file(p.string().c_str(), "wb"); - - // If the size is 0, leave the file empty and return success - if (size == 0) { - file.close(); - return Result::Success; - } - - // If it is not empty, seek to size - 1 and write a 0 to create a file of size "size" - else if (file.seek(size - 1, SEEK_SET) && file.writeBytes("", 1).second == 1) { - file.close(); - return Result::Success; - } - - file.close(); - return Result::FS::FileTooLarge; - } - - Helpers::panic("SystemSaveData::CreateFile: Failed"); - return Result::Success; -} - -HorizonResult SystemSaveDataArchive::createDirectory(const FSPath& path) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SystemSaveData::CreateDirectory"); - } - - fs::path p = IOFile::getAppData() / ".." / "SharedFiles" / "SystemSaveData"; - p += fs::path(path.utf16_string).make_preferred(); - - if (fs::is_directory(p)) { - return Result::FS::AlreadyExists; - } - - if (fs::is_regular_file(p)) { - Helpers::panic("File path passed to SystemSaveData::CreateDirectory"); - } - - bool success = fs::create_directory(p); - return success ? Result::Success : Result::FS::UnexpectedFileOrDir; - } else { - Helpers::panic("Unimplemented SystemSaveData::CreateDirectory"); - } -} - - -HorizonResult SystemSaveDataArchive::deleteFile(const FSPath& path) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SystemSaveData::DeleteFile"); - } - - fs::path p = IOFile::getAppData() / ".." / "SharedFiles" / "SystemSaveData"; - p += fs::path(path.utf16_string).make_preferred(); - - if (fs::is_directory(p)) { - Helpers::panic("SystemSaveData::DeleteFile: Tried to delete directory"); - } - - if (!fs::is_regular_file(p)) { - return Result::FS::FileNotFoundAlt; - } - - std::error_code ec; - bool success = fs::remove(p, ec); - - // It might still be possible for fs::remove to fail, if there's eg an open handle to a file being deleted - // In this case, print a warning, but still return success for now - if (!success) { - Helpers::warn("SystemSaveData::DeleteFile: fs::remove failed\n"); - } - - return Result::Success; - } - - Helpers::panic("SystemSaveData::DeleteFile: Unknown path type"); - return Result::Success; -} - -Rust::Result SystemSaveDataArchive::openDirectory(const FSPath& path) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { - Helpers::warn("Unsafe path in SystemSaveData::OpenDirectory"); - return Err(Result::FS::FileNotFoundAlt); - } - - fs::path p = IOFile::getAppData() / ".." / "SharedFiles" / "SystemSaveData"; - p += fs::path(path.utf16_string).make_preferred(); - - if (fs::is_regular_file(p)) { - printf("SystemSaveData: OpenDirectory used with a file path"); - return Err(Result::FS::UnexpectedFileOrDir); - } - - if (fs::is_directory(p)) { - return Ok(DirectorySession(this, p)); - } else { - return Err(Result::FS::FileNotFoundAlt); - } - } - - Helpers::panic("SystemSaveData::OpenDirectory: Unimplemented path type"); - return Err(Result::Success); -} \ No newline at end of file diff --git a/src/core/fs/archive_twl_photo.cpp b/src/core/fs/archive_twl_photo.cpp deleted file mode 100644 index 4d56a5d7..00000000 --- a/src/core/fs/archive_twl_photo.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include - -#include "fs/archive_twl_photo.hpp" - -namespace fs = std::filesystem; - -HorizonResult TWLPhotoArchive::createFile(const FSPath& path, u64 size) { - Helpers::panic("[TWL_PHOTO] CreateFile not yet supported"); - return Result::Success; -} - -HorizonResult TWLPhotoArchive::deleteFile(const FSPath& path) { - Helpers::panic("[TWL_PHOTO] Unimplemented DeleteFile"); - return Result::Success; -} - -HorizonResult TWLPhotoArchive::createDirectory(const FSPath& path) { - Helpers::panic("[TWL_PHOTO] CreateDirectory not yet supported"); - return Result::Success; -} - -FileDescriptor TWLPhotoArchive::openFile(const FSPath& path, const FilePerms& perms) { - Helpers::panic("[TWL_PHOTO] OpenFile not yet supported"); - return FileError; -} - -Rust::Result TWLPhotoArchive::openArchive(const FSPath& path) { - if (!path.isEmptyType()) { - Helpers::panic("Unimplemented path type for TWLPhotoArchive::OpenArchive"); - } - - Helpers::warn("Unimplemented: TWL_PHOTO archive"); - return Err(Result::FailurePlaceholder); -} - -Rust::Result TWLPhotoArchive::openDirectory(const FSPath& path) { - Helpers::panic("[TWL_PHOTO] OpenDirectory not yet supported"); - return Err(Result::FailurePlaceholder); -} diff --git a/src/core/fs/archive_twl_sound.cpp b/src/core/fs/archive_twl_sound.cpp deleted file mode 100644 index a5f86c32..00000000 --- a/src/core/fs/archive_twl_sound.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include - -#include "fs/archive_twl_sound.hpp" - -namespace fs = std::filesystem; - -HorizonResult TWLSoundArchive::createFile(const FSPath& path, u64 size) { - Helpers::panic("[TWL_SOUND] CreateFile not yet supported"); - return Result::Success; -} - -HorizonResult TWLSoundArchive::deleteFile(const FSPath& path) { - Helpers::panic("[TWL_SOUND] Unimplemented DeleteFile"); - return Result::Success; -} - -HorizonResult TWLSoundArchive::createDirectory(const FSPath& path) { - Helpers::panic("[TWL_SOUND] CreateDirectory not yet supported"); - return Result::Success; -} - -FileDescriptor TWLSoundArchive::openFile(const FSPath& path, const FilePerms& perms) { - Helpers::panic("[TWL_SOUND] OpenFile not yet supported"); - return FileError; -} - -Rust::Result TWLSoundArchive::openArchive(const FSPath& path) { - if (!path.isEmptyType()) { - Helpers::panic("Unimplemented path type for TWLSoundArchive::OpenArchive"); - } - - Helpers::warn("Unimplemented: TWL_SOUND archive"); - return Err(Result::FailurePlaceholder); -} - -Rust::Result TWLSoundArchive::openDirectory(const FSPath& path) { - Helpers::panic("[TWL_SOUND] OpenDirectory not yet supported"); - return Err(Result::FailurePlaceholder); -} diff --git a/src/core/fs/archive_user_save_data.cpp b/src/core/fs/archive_user_save_data.cpp index dc558954..cba9bff8 100644 --- a/src/core/fs/archive_user_save_data.cpp +++ b/src/core/fs/archive_user_save_data.cpp @@ -6,15 +6,13 @@ namespace fs = std::filesystem; HorizonResult UserSaveDataArchive::createFile(const FSPath& path, u64 size) { - if (path.isUTF16()) { + if (path.type == PathType::UTF16) { if (!isPathSafe(path)) Helpers::panic("Unsafe path in UserSaveData::CreateFile"); fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); - if (fs::exists(p)) { - return Result::FS::AlreadyExists; - } + if (fs::exists(p)) return Result::FS::AlreadyExists; IOFile file(p.string().c_str(), "wb"); @@ -39,10 +37,8 @@ HorizonResult UserSaveDataArchive::createFile(const FSPath& path, u64 size) { } HorizonResult UserSaveDataArchive::createDirectory(const FSPath& path) { - if (path.isUTF16()) { - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in UserSaveData::OpenFile"); - } + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) Helpers::panic("Unsafe path in UserSaveData::OpenFile"); fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); @@ -60,7 +56,7 @@ HorizonResult UserSaveDataArchive::createDirectory(const FSPath& path) { } HorizonResult UserSaveDataArchive::deleteFile(const FSPath& path) { - if (path.isUTF16()) { + if (path.type == PathType::UTF16) { if (!isPathSafe(path)) Helpers::panic("Unsafe path in UserSaveData::DeleteFile"); fs::path p = IOFile::getAppData() / "SaveData"; @@ -91,7 +87,7 @@ HorizonResult UserSaveDataArchive::deleteFile(const FSPath& path) { } FileDescriptor UserSaveDataArchive::openFile(const FSPath& path, const FilePerms& perms) { - if (path.isUTF16()) { + if (path.type == PathType::UTF16) { if (!isPathSafe(path)) Helpers::panic("Unsafe path in UserSaveData::OpenFile"); if (perms.raw == 0 || (perms.create() && !perms.write())) Helpers::panic("[UserSaveData] Unsupported flags for OpenFile"); @@ -123,7 +119,7 @@ FileDescriptor UserSaveDataArchive::openFile(const FSPath& path, const FilePerms } Rust::Result UserSaveDataArchive::openDirectory(const FSPath& path) { - if (path.isUTF16()) { + if (path.type == PathType::UTF16) { if (!isPathSafe(path)) Helpers::panic("Unsafe path in UserSaveData::OpenDirectory"); fs::path p = IOFile::getAppData() / "SaveData"; diff --git a/src/core/kernel/address_arbiter.cpp b/src/core/kernel/address_arbiter.cpp index 4d3a6c2e..8c07b423 100644 --- a/src/core/kernel/address_arbiter.cpp +++ b/src/core/kernel/address_arbiter.cpp @@ -12,7 +12,7 @@ static const char* arbitrationTypeToString(u32 type) { } } -HorizonHandle Kernel::makeArbiter() { +Handle Kernel::makeArbiter() { if (arbiterCount >= appResourceLimits.maxAddressArbiters) { Helpers::panic("Overflowed the number of address arbiters"); } @@ -38,9 +38,8 @@ void Kernel::arbitrateAddress() { const s32 value = s32(regs[3]); const s64 ns = s64(u64(regs[4]) | (u64(regs[5]) << 32)); - logSVC( - "ArbitrateAddress(Handle = %X, address = %08X, type = %s, value = %d, ns = %lld)\n", handle, address, arbitrationTypeToString(type), value, ns - ); + logSVC("ArbitrateAddress(Handle = %X, address = %08X, type = %s, value = %d, ns = %lld)\n", handle, address, + arbitrationTypeToString(type), value, ns); const auto arbiter = getObject(handle, KernelObjectType::AddressArbiter); if (arbiter == nullptr) [[unlikely]] { @@ -62,7 +61,7 @@ void Kernel::arbitrateAddress() { switch (static_cast(type)) { // Puts this thread to sleep if word < value until another thread arbitrates the address using SIGNAL case ArbitrationType::WaitIfLess: { - s32 word = static_cast(mem.read32(address)); // Yes this is meant to be signed + s32 word = static_cast(mem.read32(address)); // Yes this is meant to be signed if (word < value) { sleepThreadOnArbiter(address); } @@ -72,7 +71,7 @@ void Kernel::arbitrateAddress() { // Puts this thread to sleep if word < value until another thread arbitrates the address using SIGNAL // If the thread is put to sleep, the arbiter address is decremented case ArbitrationType::DecrementAndWaitIfLess: { - s32 word = static_cast(mem.read32(address)); // Yes this is meant to be signed + s32 word = static_cast(mem.read32(address)); // Yes this is meant to be signed if (word < value) { mem.write32(address, word - 1); sleepThreadOnArbiter(address); @@ -80,8 +79,12 @@ void Kernel::arbitrateAddress() { break; } - case ArbitrationType::Signal: signalArbiter(address, value); break; - default: Helpers::panic("ArbitrateAddress: Unimplemented type %s", arbitrationTypeToString(type)); + case ArbitrationType::Signal: + signalArbiter(address, value); + break; + + default: + Helpers::panic("ArbitrateAddress: Unimplemented type %s", arbitrationTypeToString(type)); } requireReschedule(); @@ -89,9 +92,8 @@ void Kernel::arbitrateAddress() { // Signal up to "threadCount" threads waiting on the arbiter indicated by "waitingAddress" void Kernel::signalArbiter(u32 waitingAddress, s32 threadCount) { - if (threadCount == 0) [[unlikely]] - return; - s32 count = 0; // Number of threads we've woken up + if (threadCount == 0) [[unlikely]] return; + s32 count = 0; // Number of threads we've woken up // Wake threads with the highest priority threads being woken up first for (auto index : threadIndices) { diff --git a/src/core/kernel/directory_operations.cpp b/src/core/kernel/directory_operations.cpp index 235cd80a..d4cac064 100644 --- a/src/core/kernel/directory_operations.cpp +++ b/src/core/kernel/directory_operations.cpp @@ -10,7 +10,7 @@ namespace DirectoryOps { enum : u32 { Read = 0x08010042, - Close = 0x08020000, + Close = 0x08020000 }; } @@ -28,7 +28,7 @@ Filename83 convertTo83(const std::string& path) { // Convert a character to add it to the 8.3 name // "Characters such as + are changed to the underscore _, and letters are put in uppercase" // For now we put letters in uppercase until we find out what is supposed to be converted to _ and so on - auto convertCharacter = [](char c) { return (char)std::toupper(c); }; + auto convertCharacter = [](char c) { return (char) std::toupper(c); }; // List of forbidden character for 8.3 filenames, from Citra // TODO: Use constexpr when C++20 support is solid @@ -66,7 +66,7 @@ Filename83 convertTo83(const std::string& path) { filenameTooBig = true; break; } - filename[validCharacterCount++] = convertCharacter(c); // Append character to filename + filename[validCharacterCount++] = convertCharacter(c); // Append character to filename } // Truncate name to 6 characters and denote that it is too big @@ -113,7 +113,7 @@ void Kernel::readDirectory(u32 messagePointer, Handle directory) { const u32 entryCount = mem.read32(messagePointer + 4); const u32 outPointer = mem.read32(messagePointer + 12); logFileIO("Directory::Read (handle = %X, entry count = %d, out pointer = %08X)\n", directory, entryCount, outPointer); - + const auto p = getObject(directory, KernelObjectType::Directory); if (p == nullptr) [[unlikely]] { Helpers::panic("Called ReadDirectory on non-existent directory"); @@ -136,9 +136,9 @@ void Kernel::readDirectory(u32 messagePointer, Handle directory) { bool isDirectory = std::filesystem::is_directory(relative); std::u16string nameU16 = relative.u16string(); - bool isHidden = nameU16[0] == u'.'; // If the first character is a dot then this is a hidden file/folder + bool isHidden = nameU16[0] == u'.'; // If the first character is a dot then this is a hidden file/folder - const u32 entryPointer = outPointer + (count * 0x228); // 0x228 is the size of a single entry + const u32 entryPointer = outPointer + (count * 0x228); // 0x228 is the size of a single entry u32 utfPointer = entryPointer; u32 namePointer = entryPointer + 0x20C; u32 extensionPointer = entryPointer + 0x216; @@ -152,7 +152,7 @@ void Kernel::readDirectory(u32 messagePointer, Handle directory) { mem.write16(utfPointer, u16(c)); utfPointer += sizeof(u16); } - mem.write16(utfPointer, 0); // Null terminate the UTF16 name + mem.write16(utfPointer, 0); // Null terminate the UTF16 name // Write 8.3 filename-extension for (auto c : shortFilename) { diff --git a/src/core/kernel/error.cpp b/src/core/kernel/error.cpp index f419ba1f..669ebc49 100644 --- a/src/core/kernel/error.cpp +++ b/src/core/kernel/error.cpp @@ -2,7 +2,7 @@ namespace Commands { enum : u32 { - Throw = 0x00010800, + Throw = 0x00010800 }; } @@ -13,7 +13,7 @@ namespace FatalErrorType { CardRemoved = 2, Exception = 3, ResultFailure = 4, - Logged = 5, + Logged = 5 }; } @@ -21,14 +21,18 @@ namespace FatalErrorType { void Kernel::handleErrorSyncRequest(u32 messagePointer) { u32 cmd = mem.read32(messagePointer); switch (cmd) { - case Commands::Throw: throwError(messagePointer); break; + case Commands::Throw: + throwError(messagePointer); + break; - default: Helpers::panic("Unimplemented err:f command %08X\n", cmd); break; + default: + Helpers::panic("Unimplemented err:f command %08X\n", cmd); + break; } } void Kernel::throwError(u32 messagePointer) { - const auto type = mem.read8(messagePointer + 4); // Fatal error type + const auto type = mem.read8(messagePointer + 4); // Fatal error type const u32 pc = mem.read32(messagePointer + 12); const u32 pid = mem.read32(messagePointer + 16); logError("Thrown fatal error @ %08X (pid = %X, type = %d)\n", pc, pid, type); diff --git a/src/core/kernel/events.cpp b/src/core/kernel/events.cpp index 2509ceb3..ca72add1 100644 --- a/src/core/kernel/events.cpp +++ b/src/core/kernel/events.cpp @@ -1,9 +1,8 @@ +#include "kernel.hpp" +#include "cpu.hpp" #include #include -#include "cpu.hpp" -#include "kernel.hpp" - const char* Kernel::resetTypeToString(u32 type) { switch (type) { case 0: return "One shot"; @@ -13,9 +12,9 @@ const char* Kernel::resetTypeToString(u32 type) { } } -HorizonHandle Kernel::makeEvent(ResetType resetType, Event::CallbackType callback) { +Handle Kernel::makeEvent(ResetType resetType) { Handle ret = makeObject(KernelObjectType::Event); - objects[ret].data = new Event(resetType, callback); + objects[ret].data = new Event(resetType); return ret; } @@ -29,7 +28,7 @@ bool Kernel::signalEvent(Handle handle) { Event* event = object->getData(); event->fired = true; - // Pulse events go back to being not fired once they are signaled + // One shot events go back to being not fired once they are signaled if (event->resetType == ResetType::Pulse) { event->fired = false; } @@ -43,13 +42,8 @@ bool Kernel::signalEvent(Handle handle) { event->fired = false; } } - + rescheduleThreads(); - // Run the callback for events that require a special callback - if (event->callback != Event::CallbackType::None) [[unlikely]] { - runEventCallback(event->callback); - } - return true; } @@ -58,11 +52,11 @@ void Kernel::svcCreateEvent() { const u32 outPointer = regs[0]; const u32 resetType = regs[1]; - if (resetType > 2) { + if (resetType > 2) Helpers::panic("Invalid reset type for event %d", resetType); - } logSVC("CreateEvent(handle pointer = %08X, resetType = %s)\n", outPointer, resetTypeToString(resetType)); + regs[0] = Result::Success; regs[1] = makeEvent(static_cast(resetType)); } @@ -102,7 +96,7 @@ void Kernel::svcSignalEvent() { // Result WaitSynchronization1(Handle handle, s64 timeout_nanoseconds) void Kernel::waitSynchronization1() { const Handle handle = regs[0]; - const s64 ns = s64(u64(regs[2]) | (u64(regs[3]) << 32)); + const s64 ns = s64(u64(regs[1]) | (u64(regs[2]) << 32)); logSVC("WaitSynchronization1(handle = %X, ns = %lld)\n", handle, ns); const auto object = getObject(handle); @@ -118,7 +112,7 @@ void Kernel::waitSynchronization1() { } if (!shouldWaitOnObject(object)) { - acquireSyncObject(object, threads[currentThreadIndex]); // Acquire the object since it's ready + acquireSyncObject(object, threads[currentThreadIndex]); // Acquire the object since it's ready regs[0] = Result::Success; } else { // Timeout is 0, don't bother waiting, instantly timeout @@ -127,12 +121,13 @@ void Kernel::waitSynchronization1() { return; } - regs[0] = Result::OS::Timeout; // This will be overwritten with success if we don't timeout + regs[0] = Result::OS::Timeout; // This will be overwritten with success if we don't timeout auto& t = threads[currentThreadIndex]; t.waitList.resize(1); t.status = ThreadStatus::WaitSync1; - t.wakeupTick = getWakeupTick(ns); + t.sleepTick = cpu.getTicks(); + t.waitingNanoseconds = ns; t.waitList[0] = handle; // Add the current thread to the object's wait list @@ -150,28 +145,19 @@ void Kernel::waitSynchronizationN() { s32 handleCount = regs[2]; bool waitAll = regs[3] != 0; u32 ns2 = regs[4]; - s32 outPointer = regs[5]; // "out" pointer - shows which object got bonked if we're waiting on multiple objects + s32 outPointer = regs[5]; // "out" pointer - shows which object got bonked if we're waiting on multiple objects s64 ns = s64(ns1) | (s64(ns2) << 32); logSVC("WaitSynchronizationN (handle pointer: %08X, count: %d, timeout = %lld)\n", handles, handleCount, ns); - if (handleCount <= 0) { + if (handleCount <= 0) Helpers::panic("WaitSyncN: Invalid handle count"); - } - - // Temporary hack: Until we implement service sessions properly, don't bother sleeping when WaitSyncN targets a service handle - // This is necessary because a lot of games use WaitSyncN with eg the CECD service - if (handleCount == 1 && KernelHandles::isServiceHandle(mem.read32(handles))) { - regs[0] = Result::Success; - regs[1] = 0; - return; - } using WaitObject = std::pair; std::vector waitObjects(handleCount); // We don't actually need to wait if waitAll == true unless one of the objects is not ready - bool allReady = true; // Default initialize to true, set to fault if one of the objects is not ready + bool allReady = true; // Default initialize to true, set to fault if one of the objects is not ready // Tracks whether at least one object is ready, + the index of the first ready object // This is used when waitAll == false, because if one object is already available then we can skip the sleeping @@ -192,12 +178,13 @@ void Kernel::waitSynchronizationN() { // Panic if one of the objects is not a valid sync object if (!isWaitable(object)) [[unlikely]] { - Helpers::panic("Tried to wait on a non waitable object in WaitSyncN. Type: %s, handle: %X\n", object->getTypeName(), handle); + Helpers::panic("Tried to wait on a non waitable object in WaitSyncN. Type: %s, handle: %X\n", + object->getTypeName(), handle); } if (shouldWaitOnObject(object)) { - allReady = false; // Derp, not all objects are ready :( - } else { /// At least one object is ready to be acquired ahead of time. If it's the first one, write it down + allReady = false; // Derp, not all objects are ready :( + } else { /// At least one object is ready to be acquired ahead of time. If it's the first one, write it down if (!oneObjectReady) { oneObjectReady = true; firstReadyObjectIndex = i; @@ -214,34 +201,27 @@ void Kernel::waitSynchronizationN() { // If there's ready objects, acquire the first one and return if (oneObjectReady) { regs[0] = Result::Success; - regs[1] = firstReadyObjectIndex; // Return index of the acquired object - acquireSyncObject(waitObjects[firstReadyObjectIndex].second, t); // Acquire object + regs[1] = firstReadyObjectIndex; // Return index of the acquired object + acquireSyncObject(waitObjects[firstReadyObjectIndex].second, t); // Acquire object return; } - regs[0] = Result::OS::Timeout; // This will be overwritten with success if we don't timeout + regs[0] = Result::OS::Timeout; // This will be overwritten with success if we don't timeout // If the thread wakes up without timeout, this will be adjusted to the index of the handle that woke us up regs[1] = 0xFFFFFFFF; t.waitList.resize(handleCount); t.status = ThreadStatus::WaitSyncAny; t.outPointer = outPointer; - t.wakeupTick = getWakeupTick(ns); + t.waitingNanoseconds = ns; + t.sleepTick = cpu.getTicks(); for (s32 i = 0; i < handleCount; i++) { - t.waitList[i] = waitObjects[i].first; // Add object to this thread's waitlist - waitObjects[i].second->getWaitlist() |= (1ull << currentThreadIndex); // And add the thread to the object's waitlist + t.waitList[i] = waitObjects[i].first; // Add object to this thread's waitlist + waitObjects[i].second->getWaitlist() |= (1ull << currentThreadIndex); // And add the thread to the object's waitlist } requireReschedule(); } else { Helpers::panic("WaitSynchronizationN with waitAll"); } -} - -void Kernel::runEventCallback(Event::CallbackType callback) { - switch (callback) { - case Event::CallbackType::None: break; - case Event::CallbackType::DSPSemaphore: serviceManager.getDSP().onSemaphoreEventSignal(); break; - default: Helpers::panic("Unimplemented special callback for kernel event!"); break; - } -} +} \ No newline at end of file diff --git a/src/core/kernel/file_operations.cpp b/src/core/kernel/file_operations.cpp index becf88e6..c7837100 100644 --- a/src/core/kernel/file_operations.cpp +++ b/src/core/kernel/file_operations.cpp @@ -14,6 +14,7 @@ namespace FileOps { }; } + void Kernel::handleFileOperation(u32 messagePointer, Handle file) { const u32 cmd = mem.read32(messagePointer); switch (cmd) { @@ -69,7 +70,8 @@ void Kernel::readFile(u32 messagePointer, Handle fileHandle) { u32 size = mem.read32(messagePointer + 12); u32 dataPointer = mem.read32(messagePointer + 20); - logFileIO("Trying to read %X bytes from file %X, starting from offset %llX into memory address %08X\n", size, fileHandle, offset, dataPointer); + logFileIO("Trying to read %X bytes from file %X, starting from offset %llX into memory address %08X\n", + size, fileHandle, offset, dataPointer); const auto p = getObject(fileHandle, KernelObjectType::File); if (p == nullptr) [[unlikely]] { @@ -87,14 +89,14 @@ void Kernel::readFile(u32 messagePointer, Handle fileHandle) { if (file->fd) { std::unique_ptr data(new u8[size]); IOFile f(file->fd); - f.seek(offset); auto [success, bytesRead] = f.readBytes(data.get(), size); if (!success) { Helpers::panic("Kernel::ReadFile with file descriptor failed"); - } else { - for (usize i = 0; i < bytesRead; i++) { + } + else { + for (size_t i = 0; i < bytesRead; i++) { mem.write8(u32(dataPointer + i), data[i]); } @@ -122,7 +124,8 @@ void Kernel::writeFile(u32 messagePointer, Handle fileHandle) { u32 writeOption = mem.read32(messagePointer + 16); u32 dataPointer = mem.read32(messagePointer + 24); - logFileIO("Trying to write %X bytes to file %X, starting from file offset %llX and memory address %08X\n", size, fileHandle, offset, dataPointer); + logFileIO("Trying to write %X bytes to file %X, starting from file offset %llX and memory address %08X\n", + size, fileHandle, offset, dataPointer); const auto p = getObject(fileHandle, KernelObjectType::File); if (p == nullptr) [[unlikely]] { @@ -134,9 +137,8 @@ void Kernel::writeFile(u32 messagePointer, Handle fileHandle) { Helpers::panic("Tried to write closed file"); } - if (!file->fd) { + if (!file->fd) Helpers::panic("[Kernel::File::WriteFile] Tried to write to file without a valid file descriptor"); - } std::unique_ptr data(new u8[size]); for (size_t i = 0; i < size; i++) { @@ -144,14 +146,8 @@ void Kernel::writeFile(u32 messagePointer, Handle fileHandle) { } IOFile f(file->fd); - f.seek(offset); auto [success, bytesWritten] = f.writeBytes(data.get(), size); - // TODO: Should this check only the byte? - if (writeOption) { - f.flush(); - } - mem.write32(messagePointer, IPC::responseHeader(0x0803, 2, 2)); if (!success) { Helpers::panic("Kernel::WriteFile failed"); @@ -183,8 +179,7 @@ void Kernel::setFileSize(u32 messagePointer, Handle fileHandle) { if (success) { mem.write32(messagePointer + 4, Result::Success); } else { - Helpers::warn("FileOp::SetFileSize failed"); - mem.write32(messagePointer + 4, Result::FailurePlaceholder); + Helpers::panic("FileOp::SetFileSize failed"); } } else { Helpers::panic("Tried to set file size of file without file descriptor"); diff --git a/src/core/kernel/idle_thread.cpp b/src/core/kernel/idle_thread.cpp index d6f79360..5abba373 100644 --- a/src/core/kernel/idle_thread.cpp +++ b/src/core/kernel/idle_thread.cpp @@ -1,5 +1,4 @@ #include - #include "arm_defs.hpp" #include "kernel.hpp" @@ -9,6 +8,13 @@ The code for our idle thread looks like this idle_thread_main: + mov r0, #4096 @ Loop counter + + .loop: + nop; nop; nop; nop @ NOP 4 times to waste some cycles + subs r0, #1 @ Decrement counter by 1, go back to looping if loop counter != 0 + bne .loop + // Sleep for 0 seconds with the SleepThread SVC, which just yields execution mov r0, #0 mov r1, #0 @@ -18,10 +24,14 @@ idle_thread_main: */ static constexpr u8 idleThreadCode[] = { + 0x01, 0x0A, 0xA0, 0xE3, // mov r0, #4096 + 0x00, 0xF0, 0x20, 0xE3, 0x00, 0xF0, 0x20, 0xE3, 0x00, 0xF0, 0x20, 0xE3, 0x00, 0xF0, 0x20, 0xE3, // nop (4 times) + 0x01, 0x00, 0x50, 0xE2, // subs r0, #1 + 0xF9, 0xFF, 0xFF, 0x1A, // bne loop 0x00, 0x00, 0xA0, 0xE3, // mov r0, #0 0x00, 0x10, 0xA0, 0xE3, // mov r1, #0 0x0A, 0x00, 0x00, 0xEF, // svc SleepThread - 0xFB, 0xFF, 0xFF, 0xEA // b idle_thread_main + 0xF4, 0xFF, 0xFF, 0xEA // b idle_thread_main }; // Set up an idle thread to run when no thread is able to run @@ -36,14 +46,13 @@ void Kernel::setupIdleThread() { if (!vaddr.has_value() || vaddr.value() != codeAddress) { Helpers::panic("Failed to setup idle thread"); } - + // Copy idle thread code to the allocated FCRAM std::memcpy(&mem.getFCRAM()[fcramIndex], idleThreadCode, sizeof(idleThreadCode)); t.entrypoint = codeAddress; - t.initialSP = 0; t.tlsBase = 0; - t.gprs[13] = 0; // Set SP & LR to 0 just in case. The idle thread should never access memory, but let's be safe + t.gprs[13] = 0; // Set SP & LR to 0 just in case. The idle thread should never access memory, but let's be safe t.gprs[14] = 0; t.gprs[15] = codeAddress; t.cpsr = CPSR::UserMode; diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index c5dd3db2..5eb3cddb 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -1,13 +1,11 @@ -#include "kernel.hpp" - #include - -#include "cpu.hpp" +#include "kernel.hpp" #include "kernel_types.hpp" +#include "cpu.hpp" -Kernel::Kernel(CPU& cpu, Memory& mem, GPU& gpu, const EmulatorConfig& config, LuaManager& lua) - : cpu(cpu), regs(cpu.regs()), mem(mem), handleCounter(0), serviceManager(regs, mem, gpu, currentProcess, *this, config, lua) { - objects.reserve(512); // Make room for a few objects to avoid further memory allocs later +Kernel::Kernel(CPU& cpu, Memory& mem, GPU& gpu, const EmulatorConfig& config) + : cpu(cpu), regs(cpu.regs()), mem(mem), handleCounter(0), serviceManager(regs, mem, gpu, currentProcess, *this, config) { + objects.reserve(512); // Make room for a few objects to avoid further memory allocs later mutexHandles.reserve(8); portHandles.reserve(32); threadIndices.reserve(appResourceLimits.maxThreads); @@ -19,7 +17,7 @@ Kernel::Kernel(CPU& cpu, Memory& mem, GPU& gpu, const EmulatorConfig& config, Lu t.tlsBase = VirtualAddrs::TLSBase + i * VirtualAddrs::TLSSize; t.status = ThreadStatus::Dead; t.waitList.clear(); - t.waitList.reserve(10); // Reserve some space for the wait list to avoid further memory allocs later + t.waitList.reserve(10); // Reserve some space for the wait list to avoid further memory allocs later // The state below isn't necessary to initialize but we do it anyways out of caution t.outPointer = 0; t.waitAll = false; @@ -52,7 +50,6 @@ void Kernel::serviceSVC(u32 svc) { case 0x1D: svcClearTimer(); break; case 0x1E: createMemoryBlock(); break; case 0x1F: mapMemoryBlock(); break; - case 0x20: unmapMemoryBlock(); break; case 0x21: createAddressArbiter(); break; case 0x22: arbitrateAddress(); break; case 0x23: svcCloseHandle(); break; @@ -69,12 +66,7 @@ void Kernel::serviceSVC(u32 svc) { case 0x38: getResourceLimit(); break; case 0x39: getResourceLimitLimitValues(); break; case 0x3A: getResourceLimitCurrentValues(); break; - case 0x3B: getThreadContext(); break; case 0x3D: outputDebugString(); break; - - // Luma SVCs - case 0x93: svcInvalidateInstructionCacheRange(); break; - case 0x94: svcInvalidateEntireInstructionCache(); break; default: Helpers::panic("Unimplemented svc: %X @ %08X", svc, regs[15]); break; } @@ -85,10 +77,10 @@ void Kernel::setVersion(u8 major, u8 minor) { u16 descriptor = (u16(major) << 8) | u16(minor); kernelVersion = descriptor; - mem.kernelVersion = descriptor; // The memory objects needs a copy because you can read the kernel ver from config mem + mem.kernelVersion = descriptor; // The memory objects needs a copy because you can read the kernel ver from config mem } -HorizonHandle Kernel::makeProcess(u32 id) { +Handle Kernel::makeProcess(u32 id) { const Handle processHandle = makeObject(KernelObjectType::Process); const Handle resourceLimitHandle = makeObject(KernelObjectType::ResourceLimit); @@ -148,7 +140,7 @@ void Kernel::reset() { for (auto& t : threads) { t.status = ThreadStatus::Dead; t.waitList.clear(); - t.threadsWaitingForTermination = 0; // No threads are waiting for this thread to terminate cause it's dead + t.threadsWaitingForTermination = 0; // No threads are waiting for this thread to terminate cause it's dead } for (auto& object : objects) { @@ -156,7 +148,6 @@ void Kernel::reset() { } objects.clear(); mutexHandles.clear(); - timerHandles.clear(); portHandles.clear(); threadIndices.clear(); serviceManager.reset(); @@ -165,7 +156,7 @@ void Kernel::reset() { // Allocate handle #0 to a dummy object and make a main process object makeObject(KernelObjectType::Dummy); - currentProcess = makeProcess(1); // Use ID = 1 for main process + currentProcess = makeProcess(1); // Use ID = 1 for main process // Make main thread object. We do not have to set the entrypoint and SP for it as the ROM loader does. // Main thread seems to have a priority of 0x30. TODO: This creates a dummy context for thread 0, @@ -175,8 +166,8 @@ void Kernel::reset() { setupIdleThread(); // Create some of the OS ports - srvHandle = makePort("srv:"); // Service manager port - errorPortHandle = makePort("err:f"); // Error display port + srvHandle = makePort("srv:"); // Service manager port + errorPortHandle = makePort("err:f"); // Error display port } // Get pointer to thread-local storage @@ -187,30 +178,6 @@ u32 Kernel::getTLSPointer() { // Result CloseHandle(Handle handle) void Kernel::svcCloseHandle() { logSVC("CloseHandle(handle = %d) (Unimplemented)\n", regs[0]); - const Handle handle = regs[0]; - - KernelObject* object = getObject(handle); - if (object != nullptr) { - switch (object->type) { - // Close file descriptor when closing a file to prevent leaks and properly flush file contents - case KernelObjectType::File: { - FileSession* file = object->getData(); - if (file->isOpen) { - file->isOpen = false; - - if (file->fd != nullptr) { - fclose(file->fd); - file->fd = nullptr; - } - } - break; - } - - default: break; - } - } - - // Stub to always succeed for now regs[0] = Result::Success; } @@ -261,13 +228,6 @@ void Kernel::getProcessInfo() { } switch (type) { - // Returns the amount of + total supervisor-mode stack size + page-rounded size of the external handle table - case 1: - Helpers::warn("GetProcessInfo: Unimplemented type 1"); - regs[1] = 0; - regs[2] = 0; - break; - // According to 3DBrew: Amount of private (code, data, heap) memory used by the process + total supervisor-mode // stack size + page-rounded size of the external handle table case 2: @@ -275,12 +235,13 @@ void Kernel::getProcessInfo() { regs[2] = 0; break; - case 20: // Returns 0x20000000 - + case 20: // Returns 0x20000000 - regs[1] = PhysicalAddrs::FCRAM - mem.getLinearHeapVaddr(); regs[2] = 0; break; - default: Helpers::panic("GetProcessInfo: unimplemented type %d", type); + default: + Helpers::panic("GetProcessInfo: unimplemented type %d", type); } regs[0] = Result::Success; @@ -302,25 +263,6 @@ void Kernel::duplicateHandle() { } } -void Kernel::clearInstructionCache() { cpu.clearCache(); } -void Kernel::clearInstructionCacheRange(u32 start, u32 size) { cpu.clearCacheRange(start, size); } - -void Kernel::svcInvalidateInstructionCacheRange() { - const u32 start = regs[0]; - const u32 size = regs[1]; - logSVC("svcInvalidateInstructionCacheRange(start = %08X, size = %08X)\n", start, size); - - clearInstructionCacheRange(start, size); - regs[0] = Result::Success; -} - -void Kernel::svcInvalidateEntireInstructionCache() { - logSVC("svcInvalidateEntireInstructionCache()\n"); - - clearInstructionCache(); - regs[0] = Result::Success; -} - namespace SystemInfoType { enum : u32 { MemoryInformation = 0, @@ -401,7 +343,7 @@ void Kernel::getSystemInfo() { regs[2] = 0; break; - default: + default: Helpers::warn("GetSystemInfo: Unknown PandaInformation subtype %x\n", subtype); regs[0] = Result::FailurePlaceholder; break; @@ -421,5 +363,3 @@ std::string Kernel::getProcessName(u32 pid) { Helpers::panic("Attempted to name non-current process"); } } - -Scheduler& Kernel::getScheduler() { return cpu.getScheduler(); } diff --git a/src/core/kernel/memory_management.cpp b/src/core/kernel/memory_management.cpp index 58a46c4d..8138c00d 100644 --- a/src/core/kernel/memory_management.cpp +++ b/src/core/kernel/memory_management.cpp @@ -17,14 +17,14 @@ namespace Operation { namespace MemoryPermissions { enum : u32 { - None = 0, // --- - Read = 1, // R-- - Write = 2, // -W- - ReadWrite = 3, // RW- - Execute = 4, // --X - ReadExecute = 5, // R-X - WriteExecute = 6, // -WX - ReadWriteExecute = 7, // RWX + None = 0, // --- + Read = 1, // R-- + Write = 2, // -W- + ReadWrite = 3, // RW- + Execute = 4, // --X + ReadExecute = 5, // R-X + WriteExecute = 6, // -WX + ReadWriteExecute = 7, // RWX DontCare = 0x10000000 }; @@ -40,14 +40,14 @@ static constexpr bool isAligned(u32 value) { // This has a weird ABI documented here https://www.3dbrew.org/wiki/Kernel_ABI // TODO: Does this need to write to outaddr? void Kernel::controlMemory() { - u32 operation = regs[0]; // The base address is written here + u32 operation = regs[0]; // The base address is written here u32 addr0 = regs[1]; u32 addr1 = regs[2]; u32 size = regs[3]; u32 perms = regs[4]; if (perms == MemoryPermissions::DontCare) { - perms = MemoryPermissions::ReadWrite; // We make "don't care" equivalent to read-write + perms = MemoryPermissions::ReadWrite; // We make "don't care" equivalent to read-write Helpers::panic("Unimplemented allocation permission: DONTCARE"); } @@ -57,37 +57,33 @@ void Kernel::controlMemory() { bool x = perms & 0b100; bool linear = operation & Operation::Linear; - if (x) { + if (x) Helpers::panic("ControlMemory: attempted to allocate executable memory"); - } if (!isAligned(addr0) || !isAligned(addr1) || !isAligned(size)) { Helpers::panic("ControlMemory: Unaligned parameters\nAddr0: %08X\nAddr1: %08X\nSize: %08X", addr0, addr1, size); } - logSVC( - "ControlMemory(addr0 = %08X, addr1 = %08X, size = %08X, operation = %X (%c%c%c)%s\n", addr0, addr1, size, operation, r ? 'r' : '-', - w ? 'w' : '-', x ? 'x' : '-', linear ? ", linear" : "" + logSVC("ControlMemory(addr0 = %08X, addr1 = %08X, size = %08X, operation = %X (%c%c%c)%s\n", + addr0, addr1, size, operation, r ? 'r' : '-', w ? 'w' : '-', x ? 'x' : '-', linear ? ", linear" : "" ); switch (operation & 0xFF) { case Operation::Commit: { std::optional address = mem.allocateMemory(addr0, 0, size, linear, r, w, x, true); - if (!address.has_value()) { + if (!address.has_value()) Helpers::panic("ControlMemory: Failed to allocate memory"); - } regs[1] = address.value(); break; } - case Operation::Map: mem.mirrorMapping(addr0, addr1, size); break; + case Operation::Map: + mem.mirrorMapping(addr0, addr1, size); + break; case Operation::Protect: - Helpers::warn( - "Ignoring mprotect! Hope nothing goes wrong but if the game accesses invalid memory or crashes then we prolly need to implement " - "this\n" - ); + Helpers::warn("Ignoring mprotect! Hope nothing goes wrong but if the game accesses invalid memory or crashes then we prolly need to implement this\n"); break; default: Helpers::warn("ControlMemory: unknown operation %X\n", operation); break; @@ -110,7 +106,7 @@ void Kernel::queryMemory() { regs[2] = info.size; regs[3] = info.perms; regs[4] = info.state; - regs[5] = 0; // page flags + regs[5] = 0; // page flags } // Result MapMemoryBlock(Handle memblock, u32 addr, MemoryPermission myPermissions, MemoryPermission otherPermission) @@ -126,24 +122,23 @@ void Kernel::mapMemoryBlock() { } if (KernelHandles::isSharedMemHandle(block)) { - if (block == KernelHandles::FontSharedMemHandle && addr == 0) { - addr = getSharedFontVaddr(); - } - - u8* ptr = mem.mapSharedMemory(block, addr, myPerms, otherPerms); // Map shared memory block + if (block == KernelHandles::FontSharedMemHandle && addr == 0) addr = 0x18000000; + u8* ptr = mem.mapSharedMemory(block, addr, myPerms, otherPerms); // Map shared memory block // Pass pointer to shared memory to the appropriate service switch (block) { - case KernelHandles::HIDSharedMemHandle: serviceManager.setHIDSharedMem(ptr); break; - case KernelHandles::GSPSharedMemHandle: serviceManager.setGSPSharedMem(ptr); break; - case KernelHandles::FontSharedMemHandle: mem.copySharedFont(ptr, addr); break; - - case KernelHandles::CSNDSharedMemHandle: - serviceManager.setCSNDSharedMem(ptr); - printf("Mapping CSND memory block\n"); + case KernelHandles::HIDSharedMemHandle: + serviceManager.setHIDSharedMem(ptr); + break; + + case KernelHandles::GSPSharedMemHandle: + serviceManager.setGSPSharedMem(ptr); + break; + + case KernelHandles::FontSharedMemHandle: + mem.copySharedFont(ptr); break; - case KernelHandles::APTCaptureSharedMemHandle: break; default: Helpers::panic("Mapping unknown shared memory block: %X", block); } } else { @@ -153,7 +148,7 @@ void Kernel::mapMemoryBlock() { regs[0] = Result::Success; } -HorizonHandle Kernel::makeMemoryBlock(u32 addr, u32 size, u32 myPermission, u32 otherPermission) { +Handle Kernel::makeMemoryBlock(u32 addr, u32 size, u32 myPermission, u32 otherPermission) { Handle ret = makeObject(KernelObjectType::MemoryBlock); objects[ret].data = new MemoryBlock(addr, size, myPermission, otherPermission); @@ -164,7 +159,7 @@ void Kernel::createMemoryBlock() { const u32 addr = regs[1]; const u32 size = regs[2]; u32 myPermission = regs[3]; - u32 otherPermission = mem.read32(regs[13] + 4); // This is placed on the stack rather than r4 + u32 otherPermission = mem.read32(regs[13] + 4); // This is placed on the stack rather than r4 logSVC("CreateMemoryBlock (addr = %08X, size = %08X, myPermission = %d, otherPermission = %d)\n", addr, size, myPermission, otherPermission); // Returns whether a permission is valid @@ -174,9 +169,10 @@ void Kernel::createMemoryBlock() { case MemoryPermissions::Read: case MemoryPermissions::Write: case MemoryPermissions::ReadWrite: - case MemoryPermissions::DontCare: return true; + case MemoryPermissions::DontCare: + return true; - default: // Permissions with the executable flag enabled or invalid permissions are not allowed + default: // Permissions with the executable flag enabled or invalid permissions are not allowed return false; } }; @@ -195,9 +191,8 @@ void Kernel::createMemoryBlock() { // TODO: The address needs to be in a specific range otherwise it throws an invalid address error - if (addr == 0) { + if (addr == 0) Helpers::panic("CreateMemoryBlock: Tried to use addr = 0"); - } // Implement "Don't care" permission as RW if (myPermission == MemoryPermissions::DontCare) myPermission = MemoryPermissions::ReadWrite; @@ -206,17 +201,3 @@ void Kernel::createMemoryBlock() { regs[0] = Result::Success; regs[1] = makeMemoryBlock(addr, size, myPermission, otherPermission); } - -void Kernel::unmapMemoryBlock() { - Handle block = regs[0]; - u32 addr = regs[1]; - logSVC("Unmap memory block (block handle = %X, addr = %08X)\n", block, addr); - - Helpers::warn("Stubbed svcUnmapMemoryBlock!"); - regs[0] = Result::Success; -} - -u32 Kernel::getSharedFontVaddr() { - // Place shared font at the very beginning of system FCRAM - return mem.getLinearHeapVaddr() + Memory::FCRAM_APPLICATION_SIZE; -} \ No newline at end of file diff --git a/src/core/kernel/ports.cpp b/src/core/kernel/ports.cpp index ace36845..6038de44 100644 --- a/src/core/kernel/ports.cpp +++ b/src/core/kernel/ports.cpp @@ -1,16 +1,15 @@ +#include "kernel.hpp" #include -#include "kernel.hpp" - -HorizonHandle Kernel::makePort(const char* name) { +Handle Kernel::makePort(const char* name) { Handle ret = makeObject(KernelObjectType::Port); - portHandles.push_back(ret); // Push the port handle to our cache of port handles + portHandles.push_back(ret); // Push the port handle to our cache of port handles objects[ret].data = new Port(name); return ret; } -HorizonHandle Kernel::makeSession(Handle portHandle) { +Handle Kernel::makeSession(Handle portHandle) { const auto port = getObject(portHandle, KernelObjectType::Port); if (port == nullptr) [[unlikely]] { Helpers::panic("Trying to make session for non-existent port"); @@ -24,7 +23,7 @@ HorizonHandle Kernel::makeSession(Handle portHandle) { // Get the handle of a port based on its name // If there's no such port, return nullopt -std::optional Kernel::getPortHandle(const char* name) { +std::optional Kernel::getPortHandle(const char* name) { for (auto handle : portHandles) { const auto data = objects[handle].getData(); if (std::strncmp(name, data->name, Port::maxNameLen) == 0) { @@ -74,7 +73,7 @@ void Kernel::connectToPort() { // Send an IPC message to a port (typically "srv:") or a service void Kernel::sendSyncRequest() { const auto handle = regs[0]; - u32 messagePointer = getTLSPointer() + 0x80; // The message is stored starting at TLS+0x80 + u32 messagePointer = getTLSPointer() + 0x80; // The message is stored starting at TLS+0x80 logSVC("SendSyncRequest(session handle = %X)\n", handle); // Service calls via SendSyncRequest and file access needs to put the caller to sleep for a given amount of time @@ -94,7 +93,7 @@ void Kernel::sendSyncRequest() { // Check if our sync request is targetting a file instead of a service bool isFileOperation = getObject(handle, KernelObjectType::File) != nullptr; if (isFileOperation) { - regs[0] = Result::Success; // r0 goes first here too + regs[0] = Result::Success; // r0 goes first here too handleFileOperation(messagePointer, handle); return; } @@ -102,7 +101,7 @@ void Kernel::sendSyncRequest() { // Check if our sync request is targetting a directory instead of a service bool isDirectoryOperation = getObject(handle, KernelObjectType::Directory) != nullptr; if (isDirectoryOperation) { - regs[0] = Result::Success; // r0 goes first here too + regs[0] = Result::Success; // r0 goes first here too handleDirectoryOperation(messagePointer, handle); return; } @@ -118,10 +117,10 @@ void Kernel::sendSyncRequest() { const auto sessionData = static_cast(session->data); const Handle portHandle = sessionData->portHandle; - if (portHandle == srvHandle) { // Special-case SendSyncRequest targetting the "srv: port" + if (portHandle == srvHandle) { // Special-case SendSyncRequest targetting the "srv: port" regs[0] = Result::Success; serviceManager.handleSyncRequest(messagePointer); - } else if (portHandle == errorPortHandle) { // Special-case "err:f" for juicy logs too + } else if (portHandle == errorPortHandle) { // Special-case "err:f" for juicy logs too regs[0] = Result::Success; handleErrorSyncRequest(messagePointer); } else { diff --git a/src/core/kernel/resource_limits.cpp b/src/core/kernel/resource_limits.cpp index 28fbeea8..014787c7 100644 --- a/src/core/kernel/resource_limits.cpp +++ b/src/core/kernel/resource_limits.cpp @@ -1,5 +1,4 @@ #include "resource_limits.hpp" - #include "kernel.hpp" // Result GetResourceLimit(Handle* resourceLimit, Handle process) @@ -23,7 +22,7 @@ void Kernel::getResourceLimit() { // Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount) void Kernel::getResourceLimitLimitValues() { - u32 values = regs[0]; // Pointer to values (The resource limits get output here) + u32 values = regs[0]; // Pointer to values (The resource limits get output here) const Handle resourceLimit = regs[1]; u32 names = regs[2]; // Pointer to resources that we should return u32 count = regs[3]; // Number of resources @@ -52,7 +51,7 @@ void Kernel::getResourceLimitLimitValues() { // Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount) void Kernel::getResourceLimitCurrentValues() { - u32 values = regs[0]; // Pointer to values (The resource limits get output here) + u32 values = regs[0]; // Pointer to values (The resource limits get output here) const Handle resourceLimit = regs[1]; u32 names = regs[2]; // Pointer to resources that we should return u32 count = regs[3]; // Number of resources @@ -83,7 +82,6 @@ s32 Kernel::getCurrentResourceValue(const KernelObject* limit, u32 resourceName) const auto data = static_cast(limit->data); switch (resourceName) { case ResourceType::Commit: return mem.usedUserMemory; - case ResourceType::Thread: return threadIndices.size(); default: Helpers::panic("Attempted to get current value of unknown kernel resource: %d\n", resourceName); } } diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp index 4a933e6e..b9bbb9ad 100644 --- a/src/core/kernel/threads.cpp +++ b/src/core/kernel/threads.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -34,7 +33,7 @@ void Kernel::switchThread(int newThreadIndex) { std::memcpy(cpu.fprs().data(), newThread.fprs.data(), cpu.fprs().size_bytes()); // Load 32 FPRs cpu.setCPSR(newThread.cpsr); // Load CPSR cpu.setFPSCR(newThread.fpscr); // Load FPSCR - cpu.setTLSBase(newThread.tlsBase); // Load CP15 thread-local-storage pointer register + cpu.setTLSBase(newThread.tlsBase); // Load CP15 thread-local-storage pointer register currentThreadIndex = newThreadIndex; } @@ -43,16 +42,24 @@ void Kernel::switchThread(int newThreadIndex) { // The threads with higher priority (aka the ones with a lower priority value) should come first in the vector void Kernel::sortThreads() { std::vector& v = threadIndices; - std::sort(v.begin(), v.end(), [&](int a, int b) { return threads[a].priority < threads[b].priority; }); + std::sort(v.begin(), v.end(), [&](int a, int b) { + return threads[a].priority < threads[b].priority; + }); } bool Kernel::canThreadRun(const Thread& t) { if (t.status == ThreadStatus::Ready) { return true; - } else if (t.status == ThreadStatus::WaitSleep || t.status == ThreadStatus::WaitSync1 || t.status == ThreadStatus::WaitSyncAny || - t.status == ThreadStatus::WaitSyncAll) { + } else if (t.status == ThreadStatus::WaitSleep || t.status == ThreadStatus::WaitSync1 + || t.status == ThreadStatus::WaitSyncAny || t.status == ThreadStatus::WaitSyncAll) { + const u64 elapsedTicks = cpu.getTicks() - t.sleepTick; + + constexpr double ticksPerSec = double(CPU::ticksPerSec); + constexpr double nsPerTick = ticksPerSec / 1000000000.0; + // TODO: Set r0 to the correct error code on timeout for WaitSync{1/Any/All} - return cpu.getTicks() >= t.wakeupTick; + const s64 elapsedNs = s64(double(elapsedTicks) * nsPerTick); + return elapsedNs >= t.waitingNanoseconds; } // Handle timeouts and stuff here @@ -75,15 +82,6 @@ std::optional Kernel::getNextThread() { return std::nullopt; } -u64 Kernel::getWakeupTick(s64 ns) { - // Timeout == -1 means that the thread doesn't plan on waking up automatically - if (ns == -1) { - return std::numeric_limits::max(); - } - - return cpu.getTicks() + Scheduler::nsToCycles(ns); -} - // See if there is a higher priority, ready thread and switch to that void Kernel::rescheduleThreads() { Thread& current = threads[currentThreadIndex]; // Current running thread @@ -99,8 +97,8 @@ void Kernel::rescheduleThreads() { // Case 1: A thread can run if (newThreadIndex.has_value()) { switchThread(newThreadIndex.value()); - } - + } + // Case 2: No other thread can run, straight to the idle thread else { switchThread(idleThreadIndex); @@ -108,30 +106,30 @@ void Kernel::rescheduleThreads() { } // Internal OS function to spawn a thread -HorizonHandle Kernel::makeThread(u32 entrypoint, u32 initialSP, u32 priority, ProcessorID id, u32 arg, ThreadStatus status) { - int index; // Index of the created thread in the threads array +Handle Kernel::makeThread(u32 entrypoint, u32 initialSP, u32 priority, ProcessorID id, u32 arg, ThreadStatus status) { + int index; // Index of the created thread in the threads array - if (threadCount < appResourceLimits.maxThreads) [[likely]] { // If we have not yet created over too many threads + if (threadCount < appResourceLimits.maxThreads) [[likely]] { // If we have not yet created over too many threads index = threadCount++; - } else if (aliveThreadCount < appResourceLimits.maxThreads) { // If we have created many threads but at least one is dead & reusable + } else if (aliveThreadCount < appResourceLimits.maxThreads) { // If we have created many threads but at least one is dead & reusable for (int i = 0; i < threads.size(); i++) { if (threads[i].status == ThreadStatus::Dead) { index = i; break; } } - } else { // There is no thread we can use, we're screwed + } else { // There is no thread we can use, we're screwed Helpers::panic("Overflowed thread count!!"); } aliveThreadCount++; threadIndices.push_back(index); - Thread& t = threads[index]; // Reference to thread data + Thread& t = threads[index]; // Reference to thread data Handle ret = makeObject(KernelObjectType::Thread); objects[ret].data = &t; - const bool isThumb = (entrypoint & 1) != 0; // Whether the thread starts in thumb mode or not + const bool isThumb = (entrypoint & 1) != 0; // Whether the thread starts in thumb mode or not // Set up initial thread context t.gprs.fill(0); @@ -149,7 +147,7 @@ HorizonHandle Kernel::makeThread(u32 entrypoint, u32 initialSP, u32 priority, Pr t.status = status; t.handle = ret; t.waitingAddress = 0; - t.threadsWaitingForTermination = 0; // Thread just spawned, no other threads waiting for it to terminate + t.threadsWaitingForTermination = 0; // Thread just spawned, no other threads waiting for it to terminate t.cpsr = CPSR::UserMode | (isThumb ? CPSR::Thumb : 0); t.fpscr = FPSCR::ThreadDefault; @@ -160,7 +158,7 @@ HorizonHandle Kernel::makeThread(u32 entrypoint, u32 initialSP, u32 priority, Pr return ret; } -HorizonHandle Kernel::makeMutex(bool locked) { +Handle Kernel::makeMutex(bool locked) { Handle ret = makeObject(KernelObjectType::Mutex); objects[ret].data = new Mutex(locked, ret); @@ -180,15 +178,15 @@ HorizonHandle Kernel::makeMutex(bool locked) { void Kernel::releaseMutex(Mutex* moo) { // TODO: Assert lockCount > 0 before release, maybe. The SVC should be safe at least. - moo->lockCount--; // Decrement lock count + moo->lockCount--; // Decrement lock count // If the lock count reached 0 then the thread no longer owns the mootex and it can be given to a new one if (moo->lockCount == 0) { moo->locked = false; if (moo->waitlist != 0) { - int index = wakeupOneThread(moo->waitlist, moo->handle); // Wake up one thread and get its index - moo->waitlist ^= (1ull << index); // Remove thread from waitlist + int index = wakeupOneThread(moo->waitlist, moo->handle); // Wake up one thread and get its index + moo->waitlist ^= (1ull << index); // Remove thread from waitlist // Have new thread acquire mutex moo->locked = true; @@ -200,7 +198,7 @@ void Kernel::releaseMutex(Mutex* moo) { } } -HorizonHandle Kernel::makeSemaphore(u32 initialCount, u32 maximumCount) { +Handle Kernel::makeSemaphore(u32 initialCount, u32 maximumCount) { Handle ret = makeObject(KernelObjectType::Semaphore); objects[ret].data = new Semaphore(initialCount, maximumCount); @@ -220,7 +218,7 @@ void Kernel::acquireSyncObject(KernelObject* object, const Thread& thread) { switch (object->type) { case KernelObjectType::Event: { Event* e = object->getData(); - if (e->resetType == ResetType::OneShot) { // One-shot events automatically get cleared after waking up a thread + if (e->resetType == ResetType::OneShot) { // One-shot events automatically get cleared after waking up a thread e->fired = false; } break; @@ -244,14 +242,15 @@ void Kernel::acquireSyncObject(KernelObject* object, const Thread& thread) { case KernelObjectType::Semaphore: { Semaphore* s = object->getData(); - if (s->availableCount <= 0) [[unlikely]] // This should be unreachable but let's check anyways + if (s->availableCount <= 0) [[unlikely]] // This should be unreachable but let's check anyways Helpers::panic("Tried to acquire unacquirable semaphore"); s->availableCount -= 1; break; } - case KernelObjectType::Thread: break; + case KernelObjectType::Thread: + break; case KernelObjectType::Timer: { Timer* timer = object->getData(); @@ -273,30 +272,30 @@ int Kernel::wakeupOneThread(u64 waitlist, Handle handle) { // Find the waiting thread with the highest priority. // We do this by first picking the first thread in the waitlist, then checking each other thread and comparing priority - int threadIndex = std::countr_zero(waitlist); // Index of first thread - int maxPriority = threads[threadIndex].priority; // Set initial max prio to the prio of the first thread - waitlist ^= (1ull << threadIndex); // Remove thread from the waitlist + int threadIndex = std::countr_zero(waitlist); // Index of first thread + int maxPriority = threads[threadIndex].priority; // Set initial max prio to the prio of the first thread + waitlist ^= (1ull << threadIndex); // Remove thread from the waitlist while (waitlist != 0) { - int newThread = std::countr_zero(waitlist); // Get new thread and evaluate whether it has a higher priority - if (threads[newThread].priority < maxPriority) { // Low priority value means high priority + int newThread = std::countr_zero(waitlist); // Get new thread and evaluate whether it has a higher priority + if (threads[newThread].priority < maxPriority) { // Low priority value means high priority threadIndex = newThread; maxPriority = threads[newThread].priority; } - waitlist ^= (1ull << threadIndex); // Remove thread from waitlist + waitlist ^= (1ull << threadIndex); // Remove thread from waitlist } Thread& t = threads[threadIndex]; switch (t.status) { case ThreadStatus::WaitSync1: t.status = ThreadStatus::Ready; - t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 + t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 break; case ThreadStatus::WaitSyncAny: t.status = ThreadStatus::Ready; - t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 + t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 // Get the index of the event in the object's waitlist, write it to r1 for (size_t i = 0; i < t.waitList.size(); i++) { @@ -307,7 +306,9 @@ int Kernel::wakeupOneThread(u64 waitlist, Handle handle) { } break; - case ThreadStatus::WaitSyncAll: Helpers::panic("WakeupOneThread: Thread on WaitSyncAll"); break; + case ThreadStatus::WaitSyncAll: + Helpers::panic("WakeupOneThread: Thread on WaitSyncAll"); + break; } return threadIndex; @@ -316,31 +317,33 @@ int Kernel::wakeupOneThread(u64 waitlist, Handle handle) { // Wake up every single thread in the waitlist using a bit scanning algorithm void Kernel::wakeupAllThreads(u64 waitlist, Handle handle) { while (waitlist != 0) { - const uint index = std::countr_zero(waitlist); // Get one of the set bits to see which thread is waiting - waitlist ^= (1ull << index); // Remove thread from waitlist by toggling its bit + const uint index = std::countr_zero(waitlist); // Get one of the set bits to see which thread is waiting + waitlist ^= (1ull << index); // Remove thread from waitlist by toggling its bit // Get the thread we'll be signalling Thread& t = threads[index]; switch (t.status) { - case ThreadStatus::WaitSync1: - t.status = ThreadStatus::Ready; - t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 - break; + case ThreadStatus::WaitSync1: + t.status = ThreadStatus::Ready; + t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 + break; - case ThreadStatus::WaitSyncAny: - t.status = ThreadStatus::Ready; - t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 + case ThreadStatus::WaitSyncAny: + t.status = ThreadStatus::Ready; + t.gprs[0] = Result::Success; // The thread did not timeout, so write success to r0 - // Get the index of the event in the object's waitlist, write it to r1 - for (size_t i = 0; i < t.waitList.size(); i++) { - if (t.waitList[i] == handle) { - t.gprs[1] = u32(i); - break; - } + // Get the index of the event in the object's waitlist, write it to r1 + for (size_t i = 0; i < t.waitList.size(); i++) { + if (t.waitList[i] == handle) { + t.gprs[1] = u32(i); + break; } - break; + } + break; - case ThreadStatus::WaitSyncAll: Helpers::panic("WakeupAllThreads: Thread on WaitSyncAll"); break; + case ThreadStatus::WaitSyncAll: + Helpers::panic("WakeupAllThreads: Thread on WaitSyncAll"); + break; } } } @@ -365,30 +368,13 @@ void Kernel::sleepThread(s64 ns) { if (index != idleThreadIndex) { switchThread(index); } - } else { - if (currentThreadIndex == idleThreadIndex) { - const Scheduler& scheduler = cpu.getScheduler(); - u64 timestamp = scheduler.nextTimestamp; - - for (auto i : threadIndices) { - const Thread& t = threads[i]; - if (t.status == ThreadStatus::WaitSleep || t.status == ThreadStatus::WaitSync1 || t.status == ThreadStatus::WaitSyncAny || - t.status == ThreadStatus::WaitSyncAll) { - timestamp = std::min(timestamp, t.wakeupTick); - } - } - - if (timestamp > scheduler.currentTimestamp) { - u64 idleCycles = timestamp - scheduler.currentTimestamp; - cpu.addTicks(idleCycles); - } - } } } else { // If we're sleeping for >= 0 ns Thread& t = threads[currentThreadIndex]; t.status = ThreadStatus::WaitSleep; - t.wakeupTick = getWakeupTick(ns); + t.waitingNanoseconds = ns; + t.sleepTick = cpu.getTicks(); requireReschedule(); } @@ -398,11 +384,12 @@ void Kernel::sleepThread(s64 ns) { void Kernel::createThread() { u32 priority = regs[0]; u32 entrypoint = regs[1]; - u32 arg = regs[2]; // An argument value stored in r0 of the new thread - u32 initialSP = regs[3] & ~7; // SP is force-aligned to 8 bytes + u32 arg = regs[2]; // An argument value stored in r0 of the new thread + u32 initialSP = regs[3] & ~7; // SP is force-aligned to 8 bytes s32 id = static_cast(regs[4]); - logSVC("CreateThread(entry = %08X, stacktop = %08X, arg = %X, priority = %X, processor ID = %d)\n", entrypoint, initialSP, arg, priority, id); + logSVC("CreateThread(entry = %08X, stacktop = %08X, arg = %X, priority = %X, processor ID = %d)\n", entrypoint, + initialSP, arg, priority, id); if (priority > 0x3F) [[unlikely]] { Helpers::panic("Created thread with bad priority value %X", priority); @@ -422,7 +409,7 @@ void Kernel::createThread() { // void SleepThread(s64 nanoseconds) void Kernel::svcSleepThread() { const s64 ns = s64(u64(regs[0]) | (u64(regs[1]) << 32)); - // logSVC("SleepThread(ns = %lld)\n", ns); + //logSVC("SleepThread(ns = %lld)\n", ns); regs[0] = Result::Success; sleepThread(ns); @@ -475,13 +462,6 @@ void Kernel::getThreadIdealProcessor() { regs[1] = static_cast(ProcessorID::AppCore); } -void Kernel::getThreadContext() { - Helpers::warn("Stubbed Kernel::GetThreadContext"); - - // TODO: Decompile this from Kernel11. 3DBrew says function is stubbed. - regs[0] = Result::Success; -} - void Kernel::setThreadPriority() { const Handle handle = regs[0]; const u32 priority = regs[1]; @@ -517,7 +497,9 @@ void Kernel::getCurrentProcessorNumber() { // Until we properly implement per-core schedulers, return whatever processor ID passed to svcCreateThread switch (id) { // TODO: This is picked from exheader - case ProcessorID::Default: ret = static_cast(ProcessorID::AppCore); break; + case ProcessorID::Default: + ret = static_cast(ProcessorID::AppCore); + break; case ProcessorID::AllCPUs: ret = static_cast(ProcessorID::AppCore); @@ -556,9 +538,8 @@ void Kernel::exitThread() { // Remove the index of this thread from the thread indices vector for (int i = 0; i < threadIndices.size(); i++) { - if (threadIndices[i] == currentThreadIndex) { + if (threadIndices[i] == currentThreadIndex) threadIndices.erase(threadIndices.begin() + i); - } } Thread& t = threads[currentThreadIndex]; @@ -570,7 +551,7 @@ void Kernel::exitThread() { if (t.threadsWaitingForTermination != 0) { // TODO: Handle cloned handles? Not sure how those interact with wait object signalling wakeupAllThreads(t.threadsWaitingForTermination, t.handle); - t.threadsWaitingForTermination = 0; // No other threads waiting + t.threadsWaitingForTermination = 0; // No other threads waiting } requireReschedule(); @@ -611,13 +592,11 @@ void Kernel::svcCreateSemaphore() { s32 maxCount = static_cast(regs[2]); logSVC("CreateSemaphore (initial count = %d, max count = %d)\n", initialCount, maxCount); - if (initialCount > maxCount) { + if (initialCount > maxCount) Helpers::panic("CreateSemaphore: Initial count higher than max count"); - } - if (initialCount < 0 || maxCount < 0) { + if (initialCount < 0 || maxCount < 0) Helpers::panic("CreateSemaphore: Negative count value"); - } regs[0] = Result::Success; regs[1] = makeSemaphore(initialCount, maxCount); @@ -635,10 +614,12 @@ void Kernel::svcReleaseSemaphore() { return; } - if (releaseCount < 0) Helpers::panic("ReleaseSemaphore: Negative count"); + if (releaseCount < 0) + Helpers::panic("ReleaseSemaphore: Negative count"); Semaphore* s = object->getData(); - if (s->maximumCount - s->availableCount < releaseCount) Helpers::panic("ReleaseSemaphore: Release count too high"); + if (s->maximumCount - s->availableCount < releaseCount) + Helpers::panic("ReleaseSemaphore: Release count too high"); // Write success and old available count to r0 and r1 respectively regs[0] = Result::Success; @@ -648,10 +629,10 @@ void Kernel::svcReleaseSemaphore() { // Wake up threads one by one until the available count hits 0 or we run out of threads to wake up while (s->availableCount > 0 && s->waitlist != 0) { - int index = wakeupOneThread(s->waitlist, handle); // Wake up highest priority thread - s->waitlist ^= (1ull << index); // Remove thread from waitlist + int index = wakeupOneThread(s->waitlist, handle); // Wake up highest priority thread + s->waitlist ^= (1ull << index); // Remove thread from waitlist - s->availableCount--; // Decrement available count + s->availableCount--; // Decrement available count } } @@ -660,45 +641,33 @@ void Kernel::svcReleaseSemaphore() { // can simply compile to a fast sub+cmp+set despite looking slow bool Kernel::isWaitable(const KernelObject* object) { auto type = object->type; - return type == KernelObjectType::Event || type == KernelObjectType::Mutex || type == KernelObjectType::Port || - type == KernelObjectType::Semaphore || type == KernelObjectType::Timer || type == KernelObjectType::Thread; + using enum KernelObjectType; + + return type == Event || type == Mutex || type == Port || type == Semaphore || type == Timer || type == Thread; } // Returns whether we should wait on a sync object or not bool Kernel::shouldWaitOnObject(KernelObject* object) { switch (object->type) { - case KernelObjectType::Event: // We should wait on an event only if it has not been signalled + case KernelObjectType::Event: // We should wait on an event only if it has not been signalled return !object->getData()->fired; case KernelObjectType::Mutex: { - Mutex* moo = object->getData(); // mooooooooooo - return moo->locked && moo->ownerThread != currentThreadIndex; // If the current thread owns the moo then no reason to wait + Mutex* moo = object->getData(); // mooooooooooo + return moo->locked && moo->ownerThread != currentThreadIndex; // If the current thread owns the moo then no reason to wait } - case KernelObjectType::Thread: // Waiting on a thread waits until it's dead. If it's dead then no need to wait + case KernelObjectType::Thread: // Waiting on a thread waits until it's dead. If it's dead then no need to wait return object->getData()->status != ThreadStatus::Dead; - case KernelObjectType::Timer: // We should wait on a timer only if it has not been signalled + case KernelObjectType::Timer: // We should wait on a timer only if it has not been signalled return !object->getData()->fired; - case KernelObjectType::Semaphore: // Wait if the semaphore count <= 0 + case KernelObjectType::Semaphore: // Wait if the semaphore count <= 0 return object->getData()->availableCount <= 0; - default: Helpers::panic("Not sure whether to wait on object (type: %s)", object->getTypeName()); return true; + default: + Helpers::panic("Not sure whether to wait on object (type: %s)", object->getTypeName()); + return true; } } - -std::vector Kernel::getMainProcessThreads() { - // Sort the thread indices so that they appear nicer in the debugger - auto indices = threadIndices; - std::sort(indices.begin(), indices.end()); - - std::vector ret; - ret.reserve(indices.size()); - - for (const auto& index : indices) { - ret.push_back(threads[index]); - } - - return ret; -} \ No newline at end of file diff --git a/src/core/kernel/timers.cpp b/src/core/kernel/timers.cpp index 0904b33a..1c18d9de 100644 --- a/src/core/kernel/timers.cpp +++ b/src/core/kernel/timers.cpp @@ -1,10 +1,7 @@ -#include - -#include "cpu.hpp" #include "kernel.hpp" -#include "scheduler.hpp" +#include "cpu.hpp" -HorizonHandle Kernel::makeTimer(ResetType type) { +Handle Kernel::makeTimer(ResetType type) { Handle ret = makeObject(KernelObjectType::Timer); objects[ret].data = new Timer(type); @@ -12,48 +9,31 @@ HorizonHandle Kernel::makeTimer(ResetType type) { Helpers::panic("Created pulse timer"); } - timerHandles.push_back(ret); + // timerHandles.push_back(ret); return ret; } -void Kernel::pollTimers() { - u64 currentTick = cpu.getTicks(); +void Kernel::updateTimer(Handle handle, Timer* timer) { + if (timer->running) { + const u64 currentTicks = cpu.getTicks(); + u64 elapsedTicks = currentTicks - timer->startTick; - // Find the next timestamp we'll poll KTimers on. To do this, we find the minimum tick one of our timers will fire - u64 nextTimestamp = std::numeric_limits::max(); - // Do we have any active timers anymore? If not, then we won't need to schedule a new timer poll event - bool haveActiveTimers = false; + constexpr double ticksPerSec = double(CPU::ticksPerSec); + constexpr double nsPerTick = ticksPerSec / 1000000000.0; + const s64 elapsedNs = s64(double(elapsedTicks) * nsPerTick); - for (auto handle : timerHandles) { - KernelObject* object = getObject(handle, KernelObjectType::Timer); - if (object != nullptr) { - Timer* timer = object->getData(); - - if (timer->running) { - // If timer has fired, signal it and set the tick it will next time - if (currentTick >= timer->fireTick) { - signalTimer(handle, timer); - } - - // Update our next timer fire timestamp and mark that we should schedule a new event to poll timers - // We recheck timer->running because signalling a timer stops it if interval == 0 - if (timer->running) { - nextTimestamp = std::min(nextTimestamp, timer->fireTick); - haveActiveTimers = true; - } - } + // Timer has fired + if (elapsedNs >= timer->currentDelay) { + timer->startTick = currentTicks; + timer->currentDelay = timer->interval; + signalTimer(handle, timer); } } - - // If we still have active timers, schedule next poll event - if (haveActiveTimers) { - Scheduler& scheduler = cpu.getScheduler(); - scheduler.addEvent(Scheduler::EventType::UpdateTimers, nextTimestamp); - } } void Kernel::cancelTimer(Timer* timer) { timer->running = false; + // TODO: When we have a scheduler this should properly cancel timer events in the scheduler } void Kernel::signalTimer(Handle timerHandle, Timer* timer) { @@ -71,12 +51,6 @@ void Kernel::signalTimer(Handle timerHandle, Timer* timer) { case ResetType::Pulse: Helpers::panic("Signalled pulsing timer"); break; } } - - if (timer->interval == 0) { - cancelTimer(timer); - } else { - timer->fireTick = cpu.getTicks() + Scheduler::nsToCycles(timer->interval); - } } void Kernel::svcCreateTimer() { @@ -96,8 +70,8 @@ void Kernel::svcCreateTimer() { void Kernel::svcSetTimer() { Handle handle = regs[0]; // TODO: Is this actually s64 or u64? 3DBrew says s64, but u64 makes more sense - const s64 initial = s64(u64(regs[2]) | (u64(regs[3]) << 32)); - const s64 interval = s64(u64(regs[1]) | (u64(regs[4]) << 32)); + const s64 initial = s64(u64(regs[1]) | (u64(regs[2]) << 32)); + const s64 interval = s64(u64(regs[3]) | (u64(regs[4]) << 32)); logSVC("SetTimer (handle = %X, initial delay = %llX, interval delay = %llX)\n", handle, initial, interval); KernelObject* object = getObject(handle, KernelObjectType::Timer); @@ -109,20 +83,18 @@ void Kernel::svcSetTimer() { Timer* timer = object->getData(); cancelTimer(timer); + timer->currentDelay = initial; timer->interval = interval; timer->running = true; - timer->fireTick = cpu.getTicks() + Scheduler::nsToCycles(initial); - - Scheduler& scheduler = cpu.getScheduler(); - // Signal an event to poll timers as soon as possible - scheduler.removeEvent(Scheduler::EventType::UpdateTimers); - scheduler.addEvent(Scheduler::EventType::UpdateTimers, cpu.getTicks() + 1); + timer->startTick = cpu.getTicks(); // If the initial delay is 0 then instantly signal the timer if (initial == 0) { signalTimer(handle, timer); + } else { + // This should schedule an event in the scheduler when we have one } - + regs[0] = Result::Success; } diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index 8b2a7807..cb854e07 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp @@ -1,12 +1,12 @@ -#include - -#include "elfio/elfio.hpp" #include "memory.hpp" +#include +#include "elfio/elfio.hpp" + using namespace ELFIO; std::optional Memory::loadELF(std::ifstream& file) { - loadedCXI = std::nullopt; // ELF files don't have a CXI, so set this to null + loadedCXI = std::nullopt; // ELF files don't have a CXI, so set this to null elfio reader; if (!file.good() || !reader.load(file)) { @@ -14,56 +14,56 @@ std::optional Memory::loadELF(std::ifstream& file) { return std::nullopt; } - // Allocate stack space. For ELFs we use the default stack size, which is 16KB + // Allocate stack space. For ELFs we use the default stack size, which is 16KB if (!allocateMainThreadStack(VirtualAddrs::DefaultStackSize)) { // Should be unreachable printf("Failed to allocate stack space for ELF file\n"); return std::nullopt; } - auto segNum = reader.segments.size(); - printf("Number of segments: %d\n", segNum); - printf(" # Perms Vaddr File Size Mem Size\n"); - for (int i = 0; i < segNum; ++i) { - const auto seg = reader.segments[i]; - const auto flags = seg->get_flags(); - const u32 vaddr = static_cast(seg->get_virtual_address()); // Vaddr the segment is loaded in - u32 fileSize = static_cast(seg->get_file_size()); // Size of segment in file - u32 memorySize = static_cast(seg->get_memory_size()); // Size of segment in memory - u8* data = (u8*)seg->get_data(); + auto segNum = reader.segments.size(); + printf("Number of segments: %d\n", segNum); + printf(" # Perms Vaddr File Size Mem Size\n"); + for (int i = 0; i < segNum; ++i) { + const auto seg = reader.segments[i]; + const auto flags = seg->get_flags(); + const u32 vaddr = static_cast(seg->get_virtual_address()); // Vaddr the segment is loaded in + u32 fileSize = static_cast(seg->get_file_size()); // Size of segment in file + u32 memorySize = static_cast(seg->get_memory_size()); // Size of segment in memory + u8* data = (u8*)seg->get_data(); - // Get read/write/execute permissions for segment - const bool r = (flags & 0b100) != 0; - const bool w = (flags & 0b010) != 0; - const bool x = (flags & 0b001) != 0; + // Get read/write/execute permissions for segment + const bool r = (flags & 0b100) != 0; + const bool w = (flags & 0b010) != 0; + const bool x = (flags & 0b001) != 0; - printf("[%d] (%c%c%c)\t%08X\t%08X\t%08X\n", i, r ? 'r' : '-', w ? 'w' : '-', x ? 'x' : '-', vaddr, fileSize, memorySize); + printf("[%d] (%c%c%c)\t%08X\t%08X\t%08X\n", i, r ? 'r' : '-', w ? 'w' : '-', x ? 'x' : '-', vaddr, fileSize, memorySize); + + // Assert that the segment will be loaded in the executable region. If it isn't then panic. + // The executable region starts at 0x00100000 and has a maximum size of 0x03F00000 + u64 endAddress = (u64)vaddr + (u64)fileSize; + const bool isGood = vaddr >= VirtualAddrs::ExecutableStart && endAddress < VirtualAddrs::ExecutableEnd; + if (!isGood) { + // We're ignoring this for now because some ELFs define a segment at the vaddr for IPC buffer mapping + // Helpers::panic("ELF is loaded at invalid place"); + // return std::nullopt; + } - // Assert that the segment will be loaded in the executable region. If it isn't then panic. - // The executable region starts at 0x00100000 and has a maximum size of 0x03F00000 - u64 endAddress = (u64)vaddr + (u64)fileSize; - const bool isGood = vaddr >= VirtualAddrs::ExecutableStart && endAddress < VirtualAddrs::ExecutableEnd; - if (!isGood) { - // We're ignoring this for now because some ELFs define a segment at the vaddr for IPC buffer mapping - // Helpers::panic("ELF is loaded at invalid place"); - // return std::nullopt; - } + if (memorySize & pageMask) { + // Round up the size of the ELF segment to a page (4KB) boundary, as the OS can only alloc this way + memorySize = (memorySize + pageSize - 1) & -pageSize; + Helpers::warn("Rounding ELF segment size to %08X\n", memorySize); + } - if (memorySize & pageMask) { - // Round up the size of the ELF segment to a page (4KB) boundary, as the OS can only alloc this way - memorySize = (memorySize + pageSize - 1) & -pageSize; - Helpers::warn("Rounding ELF segment size to %08X\n", memorySize); - } + // This should also assert that findPaddr doesn't fail + u32 fcramAddr = findPaddr(memorySize).value(); + std::memcpy(&fcram[fcramAddr], data, fileSize); - // This should also assert that findPaddr doesn't fail - u32 fcramAddr = findPaddr(memorySize).value(); - std::memcpy(&fcram[fcramAddr], data, fileSize); + // Allocate the segment on the OS side + allocateMemory(vaddr, fcramAddr, memorySize, true, r, w, x); + } - // Allocate the segment on the OS side - allocateMemory(vaddr, fcramAddr, memorySize, true, r, w, x); - } - - // ELF can't specify a region, make it default to USA - region = Regions::USA; - return static_cast(reader.get_entry()); + // ELF can't specify a region, make it default to USA + region = Regions::USA; + return static_cast(reader.get_entry()); } \ No newline at end of file diff --git a/src/core/loader/lz77.cpp b/src/core/loader/lz77.cpp index ba1ff310..60021b13 100644 --- a/src/core/loader/lz77.cpp +++ b/src/core/loader/lz77.cpp @@ -1,76 +1,79 @@ -#include "loader/lz77.hpp" - #include #include +#include "loader/lz77.hpp" // The difference in size between the compressed and decompressed file is stored // As a footer in the compressed file. To get the decompressed size, we extract the diff // And add it to the compressed size u32 CartLZ77::decompressedSize(const u8* buffer, u32 compressedSize) { - u32 sizeDiff; - std::memcpy(&sizeDiff, buffer + compressedSize - 4, sizeof(u32)); - return sizeDiff + compressedSize; + u32 sizeDiff; + std::memcpy(&sizeDiff, buffer + compressedSize - 4, sizeof(u32)); + return sizeDiff + compressedSize; } bool CartLZ77::decompress(std::vector& output, const std::vector& input) { - u32 sizeCompressed = u32(input.size() * sizeof(u8)); - u32 sizeDecompressed = decompressedSize(input); - output.resize(sizeDecompressed); + u32 sizeCompressed = u32(input.size() * sizeof(u8)); + u32 sizeDecompressed = decompressedSize(input); + output.resize(sizeDecompressed); - const u8* compressed = (u8*)input.data(); - const u8* footer = compressed + sizeCompressed - 8; + const u8* compressed = (u8*)input.data(); + const u8* footer = compressed + sizeCompressed - 8; - u32 bufferTopAndBottom; - std::memcpy(&bufferTopAndBottom, footer, sizeof(u32)); + u32 bufferTopAndBottom; + std::memcpy(&bufferTopAndBottom, footer, sizeof(u32)); - u32 out = sizeDecompressed; // TODO: Is this meant to be u32 or s32? - u32 index = sizeCompressed - (Helpers::getBits<24, 8>(bufferTopAndBottom)); - u32 stopIndex = sizeCompressed - (bufferTopAndBottom & 0xffffff); + u32 out = sizeDecompressed; // TODO: Is this meant to be u32 or s32? + u32 index = sizeCompressed - (Helpers::getBits<24, 8>(bufferTopAndBottom)); + u32 stopIndex = sizeCompressed - (bufferTopAndBottom & 0xffffff); - // Set all of the decompressed buffer to 0 and copy the compressed buffer to the start of it - std::fill(output.begin(), output.end(), 0); - std::copy(input.begin(), input.end(), output.begin()); + // Set all of the decompressed buffer to 0 and copy the compressed buffer to the start of it + std::fill(output.begin(), output.end(), 0); + std::copy(input.begin(), input.end(), output.begin()); - while (index > stopIndex) { - u8 control = compressed[--index]; + while (index > stopIndex) { + u8 control = compressed[--index]; - for (uint i = 0; i < 8; i++) { - if (index <= stopIndex) break; - if (index <= 0) break; - if (out <= 0) break; + for (uint i = 0; i < 8; i++) { + if (index <= stopIndex) + break; + if (index <= 0) + break; + if (out <= 0) + break; - if (control & 0x80) { - // Check if compression is out of bounds - if (index < 2) { - return false; - } - index -= 2; + if (control & 0x80) { + // Check if compression is out of bounds + if (index < 2) + return false; + index -= 2; - u32 segmentOffset = compressed[index] | (compressed[index + 1] << 8); - u32 segment_size = (Helpers::getBits<12, 4>(segmentOffset)) + 3; - segmentOffset &= 0x0FFF; - segmentOffset += 2; + u32 segmentOffset = compressed[index] | (compressed[index + 1] << 8); + u32 segment_size = (Helpers::getBits<12, 4>(segmentOffset)) + 3; + segmentOffset &= 0x0FFF; + segmentOffset += 2; - // Check if compression is out of bounds - if (out < segment_size) return false; + // Check if compression is out of bounds + if (out < segment_size) + return false; - for (uint j = 0; j < segment_size; j++) { - // Check if compression is out of bounds - if (out + segmentOffset >= sizeDecompressed) return false; + for (uint j = 0; j < segment_size; j++) { + // Check if compression is out of bounds + if (out + segmentOffset >= sizeDecompressed) + return false; - u8 data = output[out + segmentOffset]; - output[--out] = data; - } - } else { - // Check if compression is out of bounds - if (out < 1) { - return false; - } - output[--out] = compressed[--index]; - } - control <<= 1; - } - } + u8 data = output[out + segmentOffset]; + output[--out] = data; + } + } + else { + // Check if compression is out of bounds + if (out < 1) + return false; + output[--out] = compressed[--index]; + } + control <<= 1; + } + } - return true; + return true; } \ No newline at end of file diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 96d13813..d3d05839 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -1,16 +1,13 @@ -#include "loader/ncch.hpp" - #include #include -#include - #include -#include #include - #include "loader/lz77.hpp" +#include "loader/ncch.hpp" #include "memory.hpp" +#include + bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSInfo &info) { // 0x200 bytes for the NCCH header constexpr u64 headerSize = 0x200; @@ -28,16 +25,12 @@ bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSIn } codeFile.clear(); - smdh.clear(); - partitionInfo = info; - - primaryKey = {}; - secondaryKey = {}; + saveData.clear(); size = u64(*(u32*)&header[0x104]) * mediaUnit; // TODO: Maybe don't type pun because big endian will break exheaderSize = *(u32*)&header[0x180]; - programID = *(u64*)&header[0x118]; + const u64 programID = *(u64*)&header[0x118]; // Read NCCH flags secondaryKeySlot = header[0x188 + 3]; @@ -73,26 +66,8 @@ bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSIn if (!seedCrypto) { secondaryKeyY = primaryKeyY; } else { - // In seed crypto mode, the secondary key is computed through a SHA256 hash of the primary key and a title-specific seed, which we fetch - // from seeddb.bin - std::optional seedOptional = aesEngine.getSeedFromDB(programID); - if (seedOptional.has_value()) { - auto seed = *seedOptional; - - CryptoPP::SHA256 shaEngine; - std::array data; - std::array hash; - - std::memcpy(&data[0], primaryKeyY.data(), primaryKeyY.size()); - std::memcpy(&data[16], seed.data(), seed.size()); - shaEngine.CalculateDigest(hash.data(), data.data(), data.size()); - // Note that SHA256 will produce a 256-bit hash, while we only need 128 bits cause this is an AES key - // So the latter 16 bytes of the SHA256 are thrown out. - std::memcpy(secondaryKeyY.data(), hash.data(), secondaryKeyY.size()); - } else { - Helpers::warn("Couldn't find a seed value for this title. Make sure you have a seeddb.bin file alongside your aes_keys.txt"); - gotCryptoKeys = false; - } + Helpers::warn("Seed crypto is not supported"); + gotCryptoKeys = false; } auto primaryResult = getPrimaryKey(aesEngine, primaryKeyY); @@ -101,15 +76,15 @@ bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSIn if (!primaryResult.first || !secondaryResult.first) { gotCryptoKeys = false; } else { - primaryKey = primaryResult.second; - secondaryKey = secondaryResult.second; + Crypto::AESKey primaryKey = primaryResult.second; + Crypto::AESKey secondaryKey = secondaryResult.second; EncryptionInfo encryptionInfoTmp; - encryptionInfoTmp.normalKey = *primaryKey; + encryptionInfoTmp.normalKey = primaryKey; encryptionInfoTmp.initialCounter.fill(0); - for (usize i = 0; i < 8; i++) { - encryptionInfoTmp.initialCounter[i] = header[0x108 + 7 - i]; + for (std::size_t i = 1; i <= sizeof(std::uint64_t) - 1; i++) { + encryptionInfoTmp.initialCounter[i] = header[0x108 + sizeof(std::uint64_t) - 1 - i]; } encryptionInfoTmp.initialCounter[8] = 1; exheaderInfo.encryptionInfo = encryptionInfoTmp; @@ -117,7 +92,7 @@ bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSIn encryptionInfoTmp.initialCounter[8] = 2; exeFS.encryptionInfo = encryptionInfoTmp; - encryptionInfoTmp.normalKey = *secondaryKey; + encryptionInfoTmp.normalKey = secondaryKey; encryptionInfoTmp.initialCounter[8] = 3; romFS.encryptionInfo = encryptionInfoTmp; } @@ -175,7 +150,8 @@ bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSIn } } - saveDataSize = *(u64*)&exheader[0x1C0 + 0x0]; // Size of save data in bytes + const u64 saveDataSize = *(u64*)&exheader[0x1C0 + 0x0]; // Size of save data in bytes + saveData.resize(saveDataSize, 0xff); compressCode = (exheader[0xD] & 1) != 0; stackSize = *(u32*)&exheader[0x1C]; @@ -223,20 +199,13 @@ bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSIn Helpers::panic("Second code file in a single NCCH partition. What should this do?\n"); } - // All files in ExeFS use the same IV, though .code uses the secondary key for decryption - // whereas .icon/.banner use the primary key. - FSInfo info = exeFS; - if (encrypted && secondaryKey.has_value() && info.encryptionInfo.has_value()) { - info.encryptionInfo->normalKey = *secondaryKey; - } - if (compressCode) { std::vector tmp; tmp.resize(fileSize); // A file offset of 0 means our file is located right after the ExeFS header // So in the ROM, files are located at (file offset + exeFS offset + exeFS header size) - readFromFile(file, info, tmp.data(), fileOffset + exeFSHeaderSize, fileSize); + readFromFile(file, exeFS, tmp.data(), fileOffset + exeFSHeaderSize, fileSize); // Decompress .code file from the tmp vector to the "code" vector if (!CartLZ77::decompress(codeFile, tmp)) { @@ -245,14 +214,15 @@ bool NCCH::loadFromHeader(Crypto::AESEngine &aesEngine, IOFile& file, const FSIn } } else { codeFile.resize(fileSize); - readFromFile(file, info, codeFile.data(), fileOffset + exeFSHeaderSize, fileSize); + readFromFile(file, exeFS, codeFile.data(), fileOffset + exeFSHeaderSize, fileSize); } } else if (std::strcmp(name, "icon") == 0) { // Parse icon file to extract region info and more in the future (logo, etc) - smdh.resize(fileSize); - readFromFile(file, exeFS, smdh.data(), fileOffset + exeFSHeaderSize, fileSize); + std::vector tmp; + tmp.resize(fileSize); + readFromFile(file, exeFS, tmp.data(), fileOffset + exeFSHeaderSize, fileSize); - if (!parseSMDH(smdh)) { + if (!parseSMDH(tmp)) { printf("Failed to parse SMDH!\n"); } } @@ -324,7 +294,6 @@ std::pair NCCH::getPrimaryKey(Crypto::AESEngine &aesEngine if (encrypted) { if (fixedCryptoKey) { - result.fill(0); return {true, result}; } @@ -346,7 +315,6 @@ std::pair NCCH::getSecondaryKey(Crypto::AESEngine &aesEngi if (encrypted) { if (fixedCryptoKey) { - result.fill(0); return {true, result}; } diff --git a/src/core/loader/ncsd.cpp b/src/core/loader/ncsd.cpp index 13d68892..8e8a5839 100644 --- a/src/core/loader/ncsd.cpp +++ b/src/core/loader/ncsd.cpp @@ -11,7 +11,7 @@ bool Memory::mapCXI(NCSD& ncsd, NCCH& cxi) { printf("Data address = %08X, size = %08X\n", cxi.data.address, cxi.data.size); printf("Stack size: %08X\n", cxi.stackSize); - static constexpr std::array regionNames = {"Japan", "North America", "Europe", "Australia", "China", "Korea", "Taiwan"}; + static constexpr std::array regionNames = {"Japan", "North America", "Europe", "Australia", "China", "Korea", "Taiwan" }; // Set autodetected 3DS region to one of the values allowed by the CXI's SMDH region = cxi.region.value(); diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 57eac8ca..5bf0f79b 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -7,7 +7,6 @@ #include "config_mem.hpp" #include "resource_limits.hpp" -#include "services/fonts.hpp" #include "services/ptm.hpp" CMRC_DECLARE(ConsoleFonts); @@ -16,6 +15,7 @@ using namespace KernelMemoryTypes; Memory::Memory(u64& cpuTicks, const EmulatorConfig& config) : cpuTicks(cpuTicks), config(config) { fcram = new uint8_t[FCRAM_SIZE](); + dspRam = new uint8_t[DSP_RAM_SIZE](); readTable.resize(totalPageCount, 0); writeTable.resize(totalPageCount, 0); @@ -52,7 +52,7 @@ void Memory::reset() { if (e.handle == KernelHandles::FontSharedMemHandle) { // Read font size from the cmrc filesystem the font is stored in auto fonts = cmrc::ConsoleFonts::get_filesystem(); - e.size = fonts.open("SharedFontReplacement.bin").size(); + e.size = fonts.open("CitraSharedFontUSRelocated.bin").size(); } e.mapped = false; @@ -120,14 +120,6 @@ u8 Memory::read8(u32 vaddr) { case ConfigMem::FirmRevision: return firm.revision; case ConfigMem::FirmVersionMinor: return firm.minor; case ConfigMem::FirmVersionMajor: return firm.major; - case ConfigMem::WifiLevel: return 0; // No wifi :( - - case ConfigMem::WifiMac: - case ConfigMem::WifiMac + 1: - case ConfigMem::WifiMac + 2: - case ConfigMem::WifiMac + 3: - case ConfigMem::WifiMac + 4: - case ConfigMem::WifiMac + 5: return MACAddress[vaddr - ConfigMem::WifiMac]; default: Helpers::panic("Unimplemented 8-bit read, addr: %08X", vaddr); } @@ -143,7 +135,7 @@ u16 Memory::read16(u32 vaddr) { return *(u16*)(pointer + offset); } else { switch (vaddr) { - case ConfigMem::WifiMac + 4: return (MACAddress[5] << 8) | MACAddress[4]; // Wifi MAC: Last 2 bytes of MAC Address + case ConfigMem::WifiMac + 4: return 0xEEFF; // Wifi MAC: Last 2 bytes of MAC Address default: Helpers::panic("Unimplemented 16-bit read, addr: %08X", vaddr); } } @@ -173,10 +165,7 @@ u32 Memory::read32(u32 vaddr) { case ConfigMem::AppMemAlloc: return appResourceLimits.maxCommit; case ConfigMem::SyscoreVer: return 2; case 0x1FF81000: return 0; // TODO: Figure out what this config mem address does - // Wifi MAC: First 4 bytes of MAC Address - case ConfigMem::WifiMac: - return (u32(MACAddress[3]) << 24) | (u32(MACAddress[2]) << 16) | (u32(MACAddress[1]) << 8) | - MACAddress[0]; + case ConfigMem::WifiMac: return 0xFF07F440; // Wifi MAC: First 4 bytes of MAC Address // 3D slider. Float in range 0.0 = off, 1.0 = max. case ConfigMem::SliderState3D: return Helpers::bit_cast(0.0f); @@ -521,21 +510,8 @@ Regions Memory::getConsoleRegion() { return region; } -void Memory::copySharedFont(u8* pointer, u32 vaddr) { +void Memory::copySharedFont(u8* pointer) { auto fonts = cmrc::ConsoleFonts::get_filesystem(); - auto font = fonts.open("SharedFontReplacement.bin"); + auto font = fonts.open("CitraSharedFontUSRelocated.bin"); std::memcpy(pointer, font.begin(), font.size()); - - // Relocate shared font to the address it's being loaded to - HLE::Fonts::relocateSharedFont(pointer, vaddr); -} - -std::optional Memory::getProgramID() { - auto cxi = getCXI(); - - if (cxi) { - return cxi->programID; - } - - return std::nullopt; } \ No newline at end of file diff --git a/src/core/renderer_gl/etc1.cpp b/src/core/renderer_gl/etc1.cpp index 0b4ed1a5..8aefd622 100644 --- a/src/core/renderer_gl/etc1.cpp +++ b/src/core/renderer_gl/etc1.cpp @@ -12,9 +12,8 @@ static constexpr u32 signExtend3To32(u32 val) { u32 Texture::getTexelETC(bool hasAlpha, u32 u, u32 v, u32 width, std::span data) { // Pixel offset of the 8x8 tile based on u, v and the width of the texture u32 offs = ((u & ~7) * 8) + ((v & ~7) * width); - if (!hasAlpha) { + if (!hasAlpha) offs >>= 1; - } // In-tile offsets for u/v u &= 7; diff --git a/src/core/renderer_gl/gl_state.cpp b/src/core/renderer_gl/gl_state.cpp index 785cac41..d2eec0d5 100644 --- a/src/core/renderer_gl/gl_state.cpp +++ b/src/core/renderer_gl/gl_state.cpp @@ -5,20 +5,9 @@ void GLStateManager::resetBlend() { logicOpEnabled = false; logicOp = GL_COPY; - blendEquationRGB = GL_FUNC_ADD; - blendEquationAlpha = GL_FUNC_ADD; - - blendFuncSourceRGB = GL_SRC_COLOR; - blendFuncDestRGB = GL_DST_COLOR; - blendFuncSourceAlpha = GL_SRC_ALPHA; - blendFuncDestAlpha = GL_DST_ALPHA; - OpenGL::disableBlend(); OpenGL::disableLogicOp(); OpenGL::setLogicOp(GL_COPY); - - glBlendEquationSeparate(blendEquationRGB, blendEquationAlpha); - glBlendFuncSeparate(blendFuncSourceRGB, blendFuncDestRGB, blendFuncSourceAlpha, blendFuncDestAlpha); } void GLStateManager::resetClearing() { @@ -72,9 +61,9 @@ void GLStateManager::resetVAO() { glBindVertexArray(0); } -void GLStateManager::resetBuffers() { - boundUBO = 0; - glBindBuffer(GL_UNIFORM_BUFFER, 0); +void GLStateManager::resetVBO() { + boundVBO = 0; + glBindBuffer(GL_ARRAY_BUFFER, 0); } void GLStateManager::resetProgram() { @@ -90,7 +79,7 @@ void GLStateManager::reset() { resetDepth(); resetVAO(); - resetBuffers(); + resetVBO(); resetProgram(); resetScissor(); resetStencil(); diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index 659a1e1d..6d29e7d3 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -2,20 +2,12 @@ #include -#include -#include #include #include "PICA/float_types.hpp" #include "PICA/gpu.hpp" -#include "PICA/pica_frag_uniforms.hpp" -#include "PICA/pica_hash.hpp" -#include "PICA/pica_simd.hpp" #include "PICA/regs.hpp" -#include "PICA/shader_decompiler.hpp" -#include "config.hpp" #include "math_util.hpp" -#include "screen_layout.hpp" CMRC_DECLARE(RendererGL); @@ -30,8 +22,6 @@ void RendererGL::reset() { colourBufferCache.reset(); textureCache.reset(); - shaderCache.clear(); - // Init the colour/depth buffer settings to some random defaults on reset colourBufferLoc = 0; colourBufferFormat = PICA::ColorFmt::RGBA8; @@ -48,71 +38,83 @@ void RendererGL::reset() { oldDepthOffset = 0.0; // Default depth offset to 0 oldDepthmapEnable = false; // Enable w buffering - glUniform1f(ubershaderData.depthScaleLoc, oldDepthScale); - glUniform1f(ubershaderData.depthOffsetLoc, oldDepthOffset); - glUniform1i(ubershaderData.depthmapEnableLoc, oldDepthmapEnable); + glUniform1f(depthScaleLoc, oldDepthScale); + glUniform1f(depthOffsetLoc, oldDepthOffset); + glUniform1i(depthmapEnableLoc, oldDepthmapEnable); gl.useProgram(oldProgram); // Switch to old GL program } } -void RendererGL::initGraphicsContextInternal() { +void RendererGL::initGraphicsContext(SDL_Window* window) { gl.reset(); auto gl_resources = cmrc::RendererGL::get_filesystem(); + auto vertexShaderSource = gl_resources.open("opengl_vertex_shader.vert"); auto fragmentShaderSource = gl_resources.open("opengl_fragment_shader.frag"); OpenGL::Shader vert({vertexShaderSource.begin(), vertexShaderSource.size()}, OpenGL::Vertex); OpenGL::Shader frag({fragmentShaderSource.begin(), fragmentShaderSource.size()}, OpenGL::Fragment); triangleProgram.create({vert, frag}); - initUbershader(triangleProgram); + gl.useProgram(triangleProgram); - compileDisplayShader(); - // Create stream buffers for vertex, index and uniform buffers - static constexpr usize hwIndexBufferSize = 2_MB; - static constexpr usize hwVertexBufferSize = 16_MB; - static constexpr usize hwShaderUniformUBOSize = 4_MB; - static constexpr usize shadergenFragmentUBOSize = 4_MB; + textureEnvSourceLoc = OpenGL::uniformLocation(triangleProgram, "u_textureEnvSource"); + textureEnvOperandLoc = OpenGL::uniformLocation(triangleProgram, "u_textureEnvOperand"); + textureEnvCombinerLoc = OpenGL::uniformLocation(triangleProgram, "u_textureEnvCombiner"); + textureEnvColorLoc = OpenGL::uniformLocation(triangleProgram, "u_textureEnvColor"); + textureEnvScaleLoc = OpenGL::uniformLocation(triangleProgram, "u_textureEnvScale"); - hwIndexBuffer = StreamBuffer::Create(GL_ELEMENT_ARRAY_BUFFER, hwIndexBufferSize); - hwVertexBuffer = StreamBuffer::Create(GL_ARRAY_BUFFER, hwVertexBufferSize); - hwShaderUniformUBO = StreamBuffer::Create(GL_UNIFORM_BUFFER, hwShaderUniformUBOSize); - shadergenFragmentUBO = StreamBuffer::Create(GL_UNIFORM_BUFFER, shadergenFragmentUBOSize); + depthScaleLoc = OpenGL::uniformLocation(triangleProgram, "u_depthScale"); + depthOffsetLoc = OpenGL::uniformLocation(triangleProgram, "u_depthOffset"); + depthmapEnableLoc = OpenGL::uniformLocation(triangleProgram, "u_depthmapEnable"); + picaRegLoc = OpenGL::uniformLocation(triangleProgram, "u_picaRegs"); - vbo.createFixedSize(sizeof(Vertex) * vertexBufferSize * 2, GL_STREAM_DRAW); - vbo.bind(); - // Initialize the VAO used when not using hw shaders - defaultVAO.create(); - gl.bindVAO(defaultVAO); + // Init sampler objects. Texture 0 goes in texture unit 0, texture 1 in TU 1, texture 2 in TU 2, and the light maps go in TU 3 + glUniform1i(OpenGL::uniformLocation(triangleProgram, "u_tex0"), 0); + glUniform1i(OpenGL::uniformLocation(triangleProgram, "u_tex1"), 1); + glUniform1i(OpenGL::uniformLocation(triangleProgram, "u_tex2"), 2); + glUniform1i(OpenGL::uniformLocation(triangleProgram, "u_tex_lighting_lut"), 3); + + auto displayVertexShaderSource = gl_resources.open("opengl_display.vert"); + auto displayFragmentShaderSource = gl_resources.open("opengl_display.frag"); + + OpenGL::Shader vertDisplay({displayVertexShaderSource.begin(), displayVertexShaderSource.size()}, OpenGL::Vertex); + OpenGL::Shader fragDisplay({displayFragmentShaderSource.begin(), displayFragmentShaderSource.size()}, OpenGL::Fragment); + displayProgram.create({vertDisplay, fragDisplay}); + + gl.useProgram(displayProgram); + glUniform1i(OpenGL::uniformLocation(displayProgram, "u_texture"), 0); // Init sampler object + + vbo.createFixedSize(sizeof(Vertex) * vertexBufferSize, GL_STREAM_DRAW); + gl.bindVBO(vbo); + vao.create(); + gl.bindVAO(vao); // Position (x, y, z, w) attributes - defaultVAO.setAttributeFloat(0, 4, sizeof(Vertex), offsetof(Vertex, s.positions)); - defaultVAO.enableAttribute(0); + vao.setAttributeFloat(0, 4, sizeof(Vertex), offsetof(Vertex, s.positions)); + vao.enableAttribute(0); // Quaternion attribute - defaultVAO.setAttributeFloat(1, 4, sizeof(Vertex), offsetof(Vertex, s.quaternion)); - defaultVAO.enableAttribute(1); + vao.setAttributeFloat(1, 4, sizeof(Vertex), offsetof(Vertex, s.quaternion)); + vao.enableAttribute(1); // Colour attribute - defaultVAO.setAttributeFloat(2, 4, sizeof(Vertex), offsetof(Vertex, s.colour)); - defaultVAO.enableAttribute(2); + vao.setAttributeFloat(2, 4, sizeof(Vertex), offsetof(Vertex, s.colour)); + vao.enableAttribute(2); // UV 0 attribute - defaultVAO.setAttributeFloat(3, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord0)); - defaultVAO.enableAttribute(3); + vao.setAttributeFloat(3, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord0)); + vao.enableAttribute(3); // UV 1 attribute - defaultVAO.setAttributeFloat(4, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord1)); - defaultVAO.enableAttribute(4); + vao.setAttributeFloat(4, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord1)); + vao.enableAttribute(4); // UV 0 W-component attribute - defaultVAO.setAttributeFloat(5, 1, sizeof(Vertex), offsetof(Vertex, s.texcoord0_w)); - defaultVAO.enableAttribute(5); + vao.setAttributeFloat(5, 1, sizeof(Vertex), offsetof(Vertex, s.texcoord0_w)); + vao.enableAttribute(5); // View - defaultVAO.setAttributeFloat(6, 3, sizeof(Vertex), offsetof(Vertex, s.view)); - defaultVAO.enableAttribute(6); + vao.setAttributeFloat(6, 3, sizeof(Vertex), offsetof(Vertex, s.view)); + vao.enableAttribute(6); // UV 2 attribute - defaultVAO.setAttributeFloat(7, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord2)); - defaultVAO.enableAttribute(7); - - // Initialize the VAO used for hw shaders - hwShaderVAO.create(); + vao.setAttributeFloat(7, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord2)); + vao.enableAttribute(7); dummyVBO.create(); dummyVAO.create(); @@ -122,16 +124,12 @@ void RendererGL::initGraphicsContextInternal() { const u32 screenTextureWidth = 400; // Top screen is 400 pixels wide, bottom is 320 const u32 screenTextureHeight = 2 * 240; // Both screens are 240 pixels tall - // 24 rows for light, 1 for fog - LUTTexture.create(256, Lights::LUT_Count + 1, GL_RG32F); - LUTTexture.bind(); - LUTTexture.setMinFilter(OpenGL::Linear); - LUTTexture.setMagFilter(OpenGL::Linear); + glGenTextures(1, &lightLUTTextureArray); auto prevTexture = OpenGL::getTex2D(); - // Create a plain black texture for when a game reads an invalid texture. It is common for games to configure the PICA to read texture info from - // NULL. Some games that do this are Pokemon X, Cars 2, Tomodachi Life, and more. We bind the texture to an FBO, clear it, and free the FBO + // Create a plain black texture for when a game reads an invalid texture. It is common for games to configure the PICA to read texture info from NULL. + // Some games that do this are Pokemon X, Cars 2, Tomodachi Life, and more. We bind the texture to an FBO, clear it, and free the FBO blankTexture.create(8, 8, GL_RGBA8); blankTexture.bind(); blankTexture.setMinFilter(OpenGL::Linear); @@ -143,7 +141,7 @@ void RendererGL::initGraphicsContextInternal() { // Clear the texture and then delete FBO OpenGL::setViewport(8, 8); - gl.setClearColour(0.0, 0.0, 0.0, 0.0); + gl.setClearColour(0.0, 0.0, 0.0, 1.0); OpenGL::clearColor(); dummyFBO.free(); @@ -167,32 +165,9 @@ void RendererGL::initGraphicsContextInternal() { OpenGL::clearColor(); OpenGL::setViewport(oldViewport[0], oldViewport[1], oldViewport[2], oldViewport[3]); - // Initialize fixed attributes - for (int i = 0; i < fixedAttrValues.size(); i++) { - fixedAttrValues[i] = {0.f, 0.f, 0.f, 0.f}; - glVertexAttrib4f(i, 0.0, 0.0, 0.0, 0.0); - } - reset(); - fragShaderGen.setTarget(driverInfo.usingGLES ? PICA::ShaderGen::API::GLES : PICA::ShaderGen::API::GL, PICA::ShaderGen::Language::GLSL); - - // Populate our driver info structure - driverInfo.supportsExtFbFetch = (GLAD_GL_EXT_shader_framebuffer_fetch != 0); - driverInfo.supportsArmFbFetch = (GLAD_GL_ARM_shader_framebuffer_fetch != 0); - - // UBOs have an alignment requirement we have to respect - glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, reinterpret_cast(&driverInfo.uboAlignment)); - driverInfo.uboAlignment = std::max(driverInfo.uboAlignment, 16); - - // Initialize the default vertex shader used with shadergen - std::string defaultShadergenVSSource = fragShaderGen.getDefaultVertexShader(); - defaultShadergenVs.create({defaultShadergenVSSource.c_str(), defaultShadergenVSSource.size()}, OpenGL::Vertex); } -// The OpenGL renderer doesn't need to do anything with the GL context (For Qt frontend) or the SDL window (For SDL frontend) -// So we just call initGraphicsContextInternal for both -void RendererGL::initGraphicsContext([[maybe_unused]] void* context) { initGraphicsContextInternal(); } - // Set up the OpenGL blending context to match the emulated PICA void RendererGL::setupBlending() { // Map of PICA blending equations to OpenGL blending equations. The unused blending equations are equivalent to equation 0 (add) @@ -228,7 +203,7 @@ void RendererGL::setupBlending() { // Shows if blending is enabled. If it is not enabled, then logic ops are enabled instead const bool blendingEnabled = (regs[PICA::InternalRegs::ColourOperation] & (1 << 8)) != 0; - if (!blendingEnabled) { // Logic ops are enabled + if (!blendingEnabled) { // Logic ops are enabled const u32 logicOp = getBits<0, 4>(regs[PICA::InternalRegs::LogicOp]); gl.setLogicOp(logicOps[logicOp]); @@ -257,8 +232,8 @@ void RendererGL::setupBlending() { OpenGL::setBlendColor(float(r) / 255.f, float(g) / 255.f, float(b) / 255.f, float(a) / 255.f); // Translate equations and funcs to their GL equivalents and set them - gl.setBlendEquation(blendingEquations[rgbEquation], blendingEquations[alphaEquation]); - gl.setBlendFunc(blendingFuncs[rgbSourceFunc], blendingFuncs[rgbDestFunc], blendingFuncs[alphaSourceFunc], blendingFuncs[alphaDestFunc]); + glBlendEquationSeparate(blendingEquations[rgbEquation], blendingEquations[alphaEquation]); + glBlendFuncSeparate(blendingFuncs[rgbSourceFunc], blendingFuncs[rgbDestFunc], blendingFuncs[alphaSourceFunc], blendingFuncs[alphaDestFunc]); } } @@ -269,13 +244,20 @@ void RendererGL::setupStencilTest(bool stencilEnable) { } static constexpr std::array stencilFuncs = { - GL_NEVER, GL_ALWAYS, GL_EQUAL, GL_NOTEQUAL, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL, + GL_NEVER, + GL_ALWAYS, + GL_EQUAL, + GL_NOTEQUAL, + GL_LESS, + GL_LEQUAL, + GL_GREATER, + GL_GEQUAL }; gl.enableStencil(); const u32 stencilConfig = regs[PICA::InternalRegs::StencilTest]; const u32 stencilFunc = getBits<4, 3>(stencilConfig); - const s32 reference = s8(getBits<16, 8>(stencilConfig)); // Signed reference value + const s32 reference = s8(getBits<16, 8>(stencilConfig)); // Signed reference value const u32 stencilRefMask = getBits<24, 8>(stencilConfig); const bool stencilWrite = regs[PICA::InternalRegs::DepthBufferWrite]; @@ -286,9 +268,15 @@ void RendererGL::setupStencilTest(bool stencilEnable) { gl.setStencilMask(stencilBufferMask); static constexpr std::array stencilOps = { - GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP, + GL_KEEP, + GL_ZERO, + GL_REPLACE, + GL_INCR, + GL_DECR, + GL_INVERT, + GL_INCR_WRAP, + GL_DECR_WRAP }; - const u32 stencilOpConfig = regs[PICA::InternalRegs::StencilOp]; const u32 stencilFailOp = getBits<0, 3>(stencilOpConfig); const u32 depthFailOp = getBits<4, 3>(stencilOpConfig); @@ -297,8 +285,10 @@ void RendererGL::setupStencilTest(bool stencilEnable) { glStencilOp(stencilOps[stencilFailOp], stencilOps[depthFailOp], stencilOps[passOp]); } -void RendererGL::setupUbershaderTexEnv() { + +void RendererGL::setupTextureEnvState() { // TODO: Only update uniforms when the TEV config changed. Use an UBO potentially. + static constexpr std::array ioBases = { PICA::InternalRegs::TexEnv0Source, PICA::InternalRegs::TexEnv1Source, PICA::InternalRegs::TexEnv2Source, PICA::InternalRegs::TexEnv3Source, PICA::InternalRegs::TexEnv4Source, PICA::InternalRegs::TexEnv5Source, @@ -320,11 +310,11 @@ void RendererGL::setupUbershaderTexEnv() { textureEnvScaleRegs[i] = regs[ioBase + 4]; } - glUniform1uiv(ubershaderData.textureEnvSourceLoc, 6, textureEnvSourceRegs); - glUniform1uiv(ubershaderData.textureEnvOperandLoc, 6, textureEnvOperandRegs); - glUniform1uiv(ubershaderData.textureEnvCombinerLoc, 6, textureEnvCombinerRegs); - glUniform1uiv(ubershaderData.textureEnvColorLoc, 6, textureEnvColourRegs); - glUniform1uiv(ubershaderData.textureEnvScaleLoc, 6, textureEnvScaleRegs); + glUniform1uiv(textureEnvSourceLoc, 6, textureEnvSourceRegs); + glUniform1uiv(textureEnvOperandLoc, 6, textureEnvOperandRegs); + glUniform1uiv(textureEnvCombinerLoc, 6, textureEnvCombinerRegs); + glUniform1uiv(textureEnvColorLoc, 6, textureEnvColourRegs); + glUniform1uiv(textureEnvScaleLoc, 6, textureEnvScaleRegs); } void RendererGL::bindTexturesToSlots() { @@ -347,77 +337,42 @@ void RendererGL::bindTexturesToSlots() { const u32 width = getBits<16, 11>(dim); const u32 addr = (regs[ioBase + 4] & 0x0FFFFFFF) << 3; u32 format = regs[ioBase + (i == 0 ? 13 : 5)] & 0xF; + glActiveTexture(GL_TEXTURE0 + i); if (addr != 0) [[likely]] { Texture targetTex(addr, static_cast(format), width, height, config); - - if (hashTextures) { - const u8* startPointer = gpu.getPointerPhys(targetTex.location); - const usize sizeInBytes = targetTex.sizeInBytes(); - - if (startPointer == nullptr || (sizeInBytes > 0 && gpu.getPointerPhys(targetTex.location + sizeInBytes - 1) == nullptr)) - [[unlikely]] { - Helpers::warn("Out-of-bounds texture fetch"); - } else { - targetTex.hash = PICAHash::computeHash((const char*)startPointer, sizeInBytes); - } - } - OpenGL::Texture tex = getTexture(targetTex); tex.bind(); } else { - // Mapping a texture from NULL. PICA seems to read the last sampled colour, but for now we will display a black texture instead since it - // is far easier. Games that do this don't really care what it does, they just expect the PICA to not crash, since it doesn't have a - // PU/MMU and can do all sorts of Weird invalid memory accesses without crashing + // Mapping a texture from NULL. PICA seems to read the last sampled colour, but for now we will display a black texture instead since it is far easier. + // Games that do this don't really care what it does, they just expect the PICA to not crash, since it doesn't have a PU/MMU and can do all sorts of + // Weird invalid memory accesses without crashing blankTexture.bind(); } } glActiveTexture(GL_TEXTURE0 + 3); - LUTTexture.bind(); + glBindTexture(GL_TEXTURE_1D_ARRAY, lightLUTTextureArray); glActiveTexture(GL_TEXTURE0); } void RendererGL::updateLightingLUT() { gpu.lightingLUTDirty = false; - std::array lightingLut; + std::array u16_lightinglut; - for (int i = 0; i < lightingLut.size(); i += 2) { - uint64_t value = gpu.lightingLUT[i >> 1] & 0xFFF; - lightingLut[i] = (float)(value << 4) / 65535.0f; + for (int i = 0; i < gpu.lightingLUT.size(); i++) { + uint64_t value = gpu.lightingLUT[i] & ((1 << 12) - 1); + u16_lightinglut[i] = value * 65535 / 4095; } glActiveTexture(GL_TEXTURE0 + 3); - LUTTexture.bind(); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, Lights::LUT_Count, GL_RG, GL_FLOAT, lightingLut.data()); - glActiveTexture(GL_TEXTURE0); -} - -void RendererGL::updateFogLUT() { - gpu.fogLUTDirty = false; - - // Fog LUT elements are of this type: - // 0-12 fixed1.1.11, Difference from next element - // 13-23 fixed0.0.11, Value - // We will store them as a 128x1 RG texture with R being the value and G being the difference - std::array fogLut; - - for (int i = 0; i < fogLut.size(); i += 2) { - const uint32_t value = gpu.fogLUT[i >> 1]; - int32_t diff = value & 0x1fff; - diff = (diff << 19) >> 19; // Sign extend the 13-bit value to 32 bits - const float fogDifference = float(diff) / 2048.0f; - const float fogValue = float((value >> 13) & 0x7ff) / 2048.0f; - - fogLut[i] = fogValue; - fogLut[i + 1] = fogDifference; - } - - glActiveTexture(GL_TEXTURE0 + 3); - LUTTexture.bind(); - // The fog LUT exists at the end of the lighting LUT - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, Lights::LUT_Count, 128, 1, GL_RG, GL_FLOAT, fogLut.data()); + glBindTexture(GL_TEXTURE_1D_ARRAY, lightLUTTextureArray); + glTexImage2D(GL_TEXTURE_1D_ARRAY, 0, GL_R16, 256, Lights::LUT_Count, 0, GL_RED, GL_UNSIGNED_SHORT, u16_lightinglut.data()); + glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glActiveTexture(GL_TEXTURE0); } @@ -432,12 +387,9 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span v const auto primitiveTopology = primTypes[static_cast(primType)]; gl.disableScissor(); - - // If we're using accelerated shaders, the hw VAO, VBO and EBO objects will have already been bound in prepareForDraw - if (!usingAcceleratedShader) { - vbo.bind(); - gl.bindVAO(defaultVAO); - } + gl.bindVBO(vbo); + gl.bindVAO(vao); + gl.useProgram(triangleProgram); gl.enableClipPlane(0); // Clipping plane 0 is always enabled if (regs[PICA::InternalRegs::ClipEnable] & 1) { @@ -456,15 +408,35 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span v const int colourMask = getBits<8, 4>(depthControl); gl.setColourMask(colourMask & 1, colourMask & 2, colourMask & 4, colourMask & 8); - static constexpr std::array depthModes = { - GL_NEVER, GL_ALWAYS, GL_EQUAL, GL_NOTEQUAL, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL, - }; + static constexpr std::array depthModes = {GL_NEVER, GL_ALWAYS, GL_EQUAL, GL_NOTEQUAL, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL}; - bindTexturesToSlots(); - if (gpu.fogLUTDirty) { - updateFogLUT(); + const float depthScale = f24::fromRaw(regs[PICA::InternalRegs::DepthScale] & 0xffffff).toFloat32(); + const float depthOffset = f24::fromRaw(regs[PICA::InternalRegs::DepthOffset] & 0xffffff).toFloat32(); + const bool depthMapEnable = regs[PICA::InternalRegs::DepthmapEnable] & 1; + + // Update depth uniforms + if (oldDepthScale != depthScale) { + oldDepthScale = depthScale; + glUniform1f(depthScaleLoc, depthScale); } + if (oldDepthOffset != depthOffset) { + oldDepthOffset = depthOffset; + glUniform1f(depthOffsetLoc, depthOffset); + } + + if (oldDepthmapEnable != depthMapEnable) { + oldDepthmapEnable = depthMapEnable; + glUniform1i(depthmapEnableLoc, depthMapEnable); + } + + setupTextureEnvState(); + bindTexturesToSlots(); + + // Upload PICA Registers as a single uniform. The shader needs access to the rasterizer registers (for depth, starting from index 0x48) + // The texturing and the fragment lighting registers. Therefore we upload them all in one go to avoid multiple slow uniform updates + glUniform1uiv(picaRegLoc, 0x200 - 0x48, ®s[0x48]); + if (gpu.lightingLUTDirty) { updateLightingLUT(); } @@ -503,38 +475,15 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span v setupStencilTest(stencilEnable); - if (!usingAcceleratedShader) { - vbo.bufferVertsSub(vertices); - OpenGL::draw(primitiveTopology, GLsizei(vertices.size())); - } else { - if (performIndexedRender) { - // When doing indexed rendering, use glDrawRangeElementsBaseVertex to issue the indexed draw - hwIndexBuffer->Bind(); - - if (glDrawRangeElementsBaseVertex != nullptr) [[likely]] { - glDrawRangeElementsBaseVertex( - primitiveTopology, minimumIndex, maximumIndex, GLsizei(vertices.size()), usingShortIndices ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, - hwIndexBufferOffset, -GLint(minimumIndex) - ); - } else { - // If glDrawRangeElementsBaseVertex is not available then prepareForDraw will have subtracted the base vertex from the index buffer - // for us, so just use glDrawRangeElements - glDrawRangeElements( - primitiveTopology, 0, GLint(maximumIndex - minimumIndex), GLsizei(vertices.size()), - usingShortIndices ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, hwIndexBufferOffset - ); - } - } else { - // When doing non-indexed rendering, just use glDrawArrays - OpenGL::draw(primitiveTopology, GLsizei(vertices.size())); - } - } + vbo.bufferVertsSub(vertices); + OpenGL::draw(primitiveTopology, GLsizei(vertices.size())); } void RendererGL::display() { gl.disableScissor(); gl.disableBlend(); gl.disableDepth(); + gl.disableScissor(); // This will work fine whether or not logic ops are enabled. We set logic op to copy instead of disabling to avoid state changes gl.setLogicOp(GL_COPY); gl.setColourMask(true, true, true, true); @@ -555,76 +504,23 @@ void RendererGL::display() { if (topScreen) { topScreen->get().texture.bind(); - OpenGL::setViewport(0, 240, 400, 240); // Top screen viewport - OpenGL::draw(OpenGL::TriangleStrip, 4); // Actually draw our 3DS screen + OpenGL::setViewport(0, 240, 400, 240); // Top screen viewport + OpenGL::draw(OpenGL::TriangleStrip, 4); // Actually draw our 3DS screen } const u32 bottomActiveFb = externalRegs[Framebuffer1Select] & 1; const u32 bottomScreenAddr = externalRegs[bottomActiveFb == 0 ? Framebuffer1AFirstAddr : Framebuffer1ASecondAddr]; auto bottomScreen = colourBufferCache.findFromAddress(bottomScreenAddr); - + if (bottomScreen) { bottomScreen->get().texture.bind(); OpenGL::setViewport(40, 0, 320, 240); OpenGL::draw(OpenGL::TriangleStrip, 4); } - if constexpr (!Helpers::isHydraCore()) { - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); - OpenGL::clearColor(); - - screenFramebuffer.bind(OpenGL::ReadFramebuffer); - - if (outputSizeChanged) { - outputSizeChanged = false; - - auto layout = emulatorConfig->screenLayout; - - // Get information about our new screen layout to use for blitting the output - ScreenLayout::WindowCoordinates windowCoords; - ScreenLayout::calculateCoordinates(windowCoords, outputWindowWidth, outputWindowHeight, emulatorConfig->topScreenSize, layout); - - blitInfo.topScreenX = windowCoords.topScreenX; - blitInfo.topScreenY = windowCoords.topScreenY; - blitInfo.topScreenWidth = windowCoords.topScreenWidth; - blitInfo.topScreenHeight = windowCoords.topScreenHeight; - - blitInfo.bottomScreenX = windowCoords.bottomScreenX; - blitInfo.bottomScreenY = windowCoords.bottomScreenY; - blitInfo.bottomScreenWidth = windowCoords.bottomScreenWidth; - blitInfo.bottomScreenHeight = windowCoords.bottomScreenHeight; - - // Flip topScreenY and bottomScreenY because glBlitFramebuffer uses bottom-left origin - blitInfo.topScreenY = outputWindowHeight - (blitInfo.topScreenY + blitInfo.topScreenHeight); - blitInfo.bottomScreenY = outputWindowHeight - (blitInfo.bottomScreenY + blitInfo.bottomScreenHeight); - - // Used for optimizing the screen blit into a single blit - blitInfo.canDoSingleBlit = windowCoords.singleBlitInfo.canDoSingleBlit; - blitInfo.destX = windowCoords.singleBlitInfo.destX; - blitInfo.destY = windowCoords.singleBlitInfo.destY; - blitInfo.destWidth = windowCoords.singleBlitInfo.destWidth; - blitInfo.destHeight = windowCoords.singleBlitInfo.destHeight; - } - - if (blitInfo.canDoSingleBlit) { - glBlitFramebuffer( - 0, 0, 400, 480, blitInfo.destX, blitInfo.destY, blitInfo.destX + blitInfo.destWidth, blitInfo.destY + blitInfo.destHeight, - GL_COLOR_BUFFER_BIT, GL_LINEAR - ); - } else { - // Blit top screen - glBlitFramebuffer( - 0, 240, 400, 480, blitInfo.topScreenX, blitInfo.topScreenY, blitInfo.topScreenX + blitInfo.topScreenWidth, - blitInfo.topScreenY + blitInfo.topScreenHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR - ); - - // Blit bottom screen - glBlitFramebuffer( - 40, 0, 360, 240, blitInfo.bottomScreenX, blitInfo.bottomScreenY, blitInfo.bottomScreenX + blitInfo.bottomScreenWidth, - blitInfo.bottomScreenY + blitInfo.bottomScreenHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR - ); - } - } + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + screenFramebuffer.bind(OpenGL::ReadFramebuffer); + glBlitFramebuffer(0, 0, 400, 480, 0, 0, 400, 480, GL_COLOR_BUFFER_BIT, GL_LINEAR); } void RendererGL::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) { @@ -714,15 +610,7 @@ OpenGL::Texture RendererGL::getTexture(Texture& tex) { if (buffer.has_value()) { return buffer.value().get().texture; } else { - const u8* startPointer = gpu.getPointerPhys(tex.location); - const usize sizeInBytes = tex.sizeInBytes(); - - if (startPointer == nullptr || (sizeInBytes > 0 && gpu.getPointerPhys(tex.location + sizeInBytes - 1) == nullptr)) [[unlikely]] { - Helpers::warn("Out-of-bounds texture fetch"); - return blankTexture; - } - - const auto textureData = std::span{startPointer, tex.sizeInBytes()}; // Get pointer to the texture data in 3DS memory + const auto textureData = std::span{gpu.getPointerPhys(tex.location), tex.sizeInBytes()}; // Get pointer to the texture data in 3DS memory Texture& newTex = textureCache.add(tex); newTex.decodeTexture(textureData); @@ -750,10 +638,8 @@ void RendererGL::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u u32 outputWidth = outputSize & 0xffff; u32 outputHeight = outputSize >> 16; - OpenGL::DebugScope scope( - "DisplayTransfer inputAddr 0x%08X outputAddr 0x%08X inputWidth %d outputWidth %d inputHeight %d outputHeight %d", inputAddr, outputAddr, - inputWidth, outputWidth, inputHeight, outputHeight - ); + OpenGL::DebugScope scope("DisplayTransfer inputAddr 0x%08X outputAddr 0x%08X inputWidth %d outputWidth %d inputHeight %d outputHeight %d", + inputAddr, outputAddr, inputWidth, outputWidth, inputHeight, outputHeight); auto srcFramebuffer = getColourBuffer(inputAddr, inputFormat, inputWidth, outputHeight); Math::Rect srcRect = srcFramebuffer->getSubRect(inputAddr, outputWidth, outputHeight); @@ -803,15 +689,12 @@ void RendererGL::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 const u32 outputWidth = (outputSize & 0xffff) << 4; const u32 outputGap = (outputSize >> 16) << 4; - OpenGL::DebugScope scope( - "TextureCopy inputAddr 0x%08X outputAddr 0x%08X totalBytes %d inputWidth %d inputGap %d outputWidth %d outputGap %d", inputAddr, outputAddr, - totalBytes, inputWidth, inputGap, outputWidth, outputGap - ); + OpenGL::DebugScope scope("TextureCopy inputAddr 0x%08X outputAddr 0x%08X totalBytes %d inputWidth %d inputGap %d outputWidth %d outputGap %d", + inputAddr, outputAddr, totalBytes, inputWidth, inputGap, outputWidth, outputGap); if (inputGap != 0 || outputGap != 0) { // Helpers::warn("Strided texture copy\n"); } - if (inputWidth != outputWidth) { Helpers::warn("Input width does not match output width, cannot accelerate texture copy!"); return; @@ -833,25 +716,17 @@ void RendererGL::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 // inputHeight/outputHeight are typically set to zero so they cannot be used to get the height of the copy region // in contrast to display transfer. Compute height manually by dividing the copy size with the copy width. The result // is the number of vertical tiles so multiply that by eight to get the actual copy height. - u32 copyHeight; - if (inputWidth != 0) [[likely]] { - copyHeight = (copySize / inputWidth) * 8; - } else { - Helpers::warn("Zero-width texture copy"); - return; - } + const u32 copyHeight = (copySize / inputWidth) * 8; // Find the source surface. auto srcFramebuffer = getColourBuffer(inputAddr, PICA::ColorFmt::RGBA8, copyStride, copyHeight, false); if (!srcFramebuffer) { - static int shutUpCounter = 0; // Don't want to spam the console too much, so shut up after 5 times + static int shutUpCounter = 0; // Don't want to spam the console too much, so shut up after 5 times if (shutUpCounter < 5) { shutUpCounter++; printf("RendererGL::TextureCopy failed to locate src framebuffer!\n"); } - - doSoftwareTextureCopy(inputAddr, outputAddr, copySize, inputWidth, inputGap, outputWidth, outputGap); return; } @@ -891,253 +766,6 @@ std::optional RendererGL::getColourBuffer(u32 addr, PICA::ColorFmt return colourBufferCache.add(sampleBuffer); } -OpenGL::Program& RendererGL::getSpecializedShader() { - constexpr uint vsUBOBlockBinding = 1; - constexpr uint fsUBOBlockBinding = 2; - - PICA::FragmentConfig fsConfig(regs); - // If we're not on GLES, ignore the logic op configuration and don't generate redundant shaders for it, since we use hw logic ops - if (!driverInfo.usingGLES) { - fsConfig.outConfig.logicOpMode = PICA::LogicOpMode(0); - } - - OpenGL::Shader& fragShader = shaderCache.fragmentShaderCache[fsConfig]; - if (!fragShader.exists()) { - std::string fs = fragShaderGen.generate(fsConfig); - fragShader.create({fs.c_str(), fs.size()}, OpenGL::Fragment); - } - - // Get the handle of the current vertex shader - OpenGL::Shader& vertexShader = usingAcceleratedShader ? *generatedVertexShader : defaultShadergenVs; - // And form the key for looking up a shader program - const u64 programKey = (u64(vertexShader.handle()) << 32) | u64(fragShader.handle()); - - CachedProgram& programEntry = shaderCache.programCache[programKey]; - OpenGL::Program& program = programEntry.program; - - if (!program.exists()) { - program.create({vertexShader, fragShader}); - gl.useProgram(program); - - // Init sampler objects. Texture 0 goes in texture unit 0, texture 1 in TU 1, texture 2 in TU 2, and the light maps go in TU 3 - glUniform1i(OpenGL::uniformLocation(program, "u_tex0"), 0); - glUniform1i(OpenGL::uniformLocation(program, "u_tex1"), 1); - glUniform1i(OpenGL::uniformLocation(program, "u_tex2"), 2); - glUniform1i(OpenGL::uniformLocation(program, "u_tex_luts"), 3); - - // Set up the binding for our UBOs. Sadly we can't specify it in the shader like normal people, - // As it's an OpenGL 4.2 feature that MacOS doesn't support... - uint fsUBOIndex = glGetUniformBlockIndex(program.handle(), "FragmentUniforms"); - glUniformBlockBinding(program.handle(), fsUBOIndex, fsUBOBlockBinding); - - if (usingAcceleratedShader) { - uint vertexUBOIndex = glGetUniformBlockIndex(program.handle(), "PICAShaderUniforms"); - glUniformBlockBinding(program.handle(), vertexUBOIndex, vsUBOBlockBinding); - } - } - - // Upload uniform data to our shader's UBO - PICA::FragmentUniforms uniforms; - uniforms.alphaReference = Helpers::getBits<8, 8>(regs[InternalRegs::AlphaTestConfig]); - - // Set up the texenv buffer color - const u32 texEnvBufferColor = regs[InternalRegs::TexEnvBufferColor]; - uniforms.tevBufferColor[0] = float(texEnvBufferColor & 0xFF) / 255.0f; - uniforms.tevBufferColor[1] = float((texEnvBufferColor >> 8) & 0xFF) / 255.0f; - uniforms.tevBufferColor[2] = float((texEnvBufferColor >> 16) & 0xFF) / 255.0f; - uniforms.tevBufferColor[3] = float((texEnvBufferColor >> 24) & 0xFF) / 255.0f; - - uniforms.depthScale = f24::fromRaw(regs[PICA::InternalRegs::DepthScale] & 0xffffff).toFloat32(); - uniforms.depthOffset = f24::fromRaw(regs[PICA::InternalRegs::DepthOffset] & 0xffffff).toFloat32(); - - if (regs[InternalRegs::ClipEnable] & 1) { - uniforms.clipCoords[0] = f24::fromRaw(regs[PICA::InternalRegs::ClipData0] & 0xffffff).toFloat32(); - uniforms.clipCoords[1] = f24::fromRaw(regs[PICA::InternalRegs::ClipData1] & 0xffffff).toFloat32(); - uniforms.clipCoords[2] = f24::fromRaw(regs[PICA::InternalRegs::ClipData2] & 0xffffff).toFloat32(); - uniforms.clipCoords[3] = f24::fromRaw(regs[PICA::InternalRegs::ClipData3] & 0xffffff).toFloat32(); - } - - // Set up the constant color for the 6 TEV stages - for (int i = 0; i < 6; i++) { - static constexpr std::array ioBases = { - PICA::InternalRegs::TexEnv0Source, PICA::InternalRegs::TexEnv1Source, PICA::InternalRegs::TexEnv2Source, - PICA::InternalRegs::TexEnv3Source, PICA::InternalRegs::TexEnv4Source, PICA::InternalRegs::TexEnv5Source, - }; - - auto& vec = uniforms.constantColors[i]; - u32 base = ioBases[i]; - u32 color = regs[base + 3]; - - vec[0] = float(color & 0xFF) / 255.0f; - vec[1] = float((color >> 8) & 0xFF) / 255.0f; - vec[2] = float((color >> 16) & 0xFF) / 255.0f; - vec[3] = float((color >> 24) & 0xFF) / 255.0f; - } - - uniforms.fogColor = regs[PICA::InternalRegs::FogColor]; - - // Append lighting uniforms - if (fsConfig.lighting.enable) { - uniforms.globalAmbientLight = regs[InternalRegs::LightGlobalAmbient]; - for (int i = 0; i < 8; i++) { - auto& light = uniforms.lightUniforms[i]; - const u32 specular0 = regs[InternalRegs::Light0Specular0 + i * 0x10]; - const u32 specular1 = regs[InternalRegs::Light0Specular1 + i * 0x10]; - const u32 diffuse = regs[InternalRegs::Light0Diffuse + i * 0x10]; - const u32 ambient = regs[InternalRegs::Light0Ambient + i * 0x10]; - const u32 lightXY = regs[InternalRegs::Light0XY + i * 0x10]; - const u32 lightZ = regs[InternalRegs::Light0Z + i * 0x10]; - - const u32 spotlightXY = regs[InternalRegs::Light0SpotlightXY + i * 0x10]; - const u32 spotlightZ = regs[InternalRegs::Light0SpotlightZ + i * 0x10]; - const u32 attenuationBias = regs[InternalRegs::Light0AttenuationBias + i * 0x10]; - const u32 attenuationScale = regs[InternalRegs::Light0AttenuationScale + i * 0x10]; - -#define lightColorToVec3(value) \ - { \ - float(Helpers::getBits<20, 8>(value)) / 255.0f, \ - float(Helpers::getBits<10, 8>(value)) / 255.0f, \ - float(Helpers::getBits<0, 8>(value)) / 255.0f, \ - } - light.specular0 = lightColorToVec3(specular0); - light.specular1 = lightColorToVec3(specular1); - light.diffuse = lightColorToVec3(diffuse); - light.ambient = lightColorToVec3(ambient); - light.position[0] = Floats::f16::fromRaw(u16(lightXY)).toFloat32(); - light.position[1] = Floats::f16::fromRaw(u16(lightXY >> 16)).toFloat32(); - light.position[2] = Floats::f16::fromRaw(u16(lightZ)).toFloat32(); - - // Fixed point 1.11.1 to float, without negation - light.spotlightDirection[0] = float(s32(spotlightXY & 0x1FFF) << 19 >> 19) / 2047.0; - light.spotlightDirection[1] = float(s32((spotlightXY >> 16) & 0x1FFF) << 19 >> 19) / 2047.0; - light.spotlightDirection[2] = float(s32(spotlightZ & 0x1FFF) << 19 >> 19) / 2047.0; - - light.distanceAttenuationBias = Floats::f20::fromRaw(attenuationBias & 0xFFFFF).toFloat32(); - light.distanceAttenuationScale = Floats::f20::fromRaw(attenuationScale & 0xFFFFF).toFloat32(); -#undef lightColorToVec3 - } - } - - // Upload fragment uniforms to UBO - shadergenFragmentUBO->Bind(); - auto uboRes = shadergenFragmentUBO->Map(driverInfo.uboAlignment, sizeof(PICA::FragmentUniforms)); - std::memcpy(uboRes.pointer, &uniforms, sizeof(PICA::FragmentUniforms)); - shadergenFragmentUBO->Unmap(sizeof(PICA::FragmentUniforms)); - - // Bind our UBOs - glBindBufferRange( - GL_UNIFORM_BUFFER, fsUBOBlockBinding, shadergenFragmentUBO->GetGLBufferId(), uboRes.buffer_offset, sizeof(PICA::FragmentUniforms) - ); - - if (usingAcceleratedShader) { - glBindBufferRange( - GL_UNIFORM_BUFFER, vsUBOBlockBinding, hwShaderUniformUBO->GetGLBufferId(), hwShaderUniformUBOOffset, PICAShader::totalUniformSize() - ); - } - - return program; -} - -bool RendererGL::prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) { - // First we figure out if we will be using an ubershader - bool usingUbershader = emulatorConfig->useUbershaders; - if (usingUbershader) { - const bool lightsEnabled = (regs[InternalRegs::LightingEnable] & 1) != 0; - const uint lightCount = (regs[InternalRegs::LightNumber] & 0x7) + 1; - - // Emulating lights in the ubershader is incredibly slow, so we've got an option to render draws using moret han N lights via shadergen - // This way we generate fewer shaders overall than with full shadergen, but don't tank performance - if (emulatorConfig->forceShadergenForLights && lightsEnabled && lightCount >= emulatorConfig->lightShadergenThreshold) { - usingUbershader = false; - } - } - - // Then we figure out if we will use hw accelerated shaders, and try to fetch our shader - // TODO: Ubershader support for accelerated shaders - usingAcceleratedShader = emulatorConfig->accelerateShaders && !usingUbershader && accel != nullptr && accel->canBeAccelerated; - - if (usingAcceleratedShader) { - PICA::VertConfig vertexConfig(shaderUnit.vs, regs, usingUbershader); - - std::optional& shader = shaderCache.vertexShaderCache[vertexConfig]; - // If the optional is false, we have never tried to recompile the shader before. Try to recompile it and see if it works. - if (!shader.has_value()) { - // Initialize shader to a "null" shader (handle == 0) - shader = OpenGL::Shader(); - - std::string picaShaderSource = PICA::ShaderGen::decompileShader( - shaderUnit.vs, *emulatorConfig, shaderUnit.vs.entrypoint, - driverInfo.usingGLES ? PICA::ShaderGen::API::GLES : PICA::ShaderGen::API::GL, PICA::ShaderGen::Language::GLSL - ); - - // Empty source means compilation error, if the source is not empty then we convert the recompiled PICA code into a valid shader and - // upload it to the GPU - if (!picaShaderSource.empty()) { - std::string vertexShaderSource = fragShaderGen.getVertexShaderAccelerated(picaShaderSource, vertexConfig, usingUbershader); - shader->create({vertexShaderSource}, OpenGL::Vertex); - } - } - - // Shader generation did not work out, so set usingAcceleratedShader to false - if (!shader->exists()) { - usingAcceleratedShader = false; - } else { - generatedVertexShader = &(*shader); - hwShaderUniformUBO->Bind(); - - // Upload shader uniforms to our UBO - if (shaderUnit.vs.uniformsDirty) { - shaderUnit.vs.uniformsDirty = false; - auto uboRes = hwShaderUniformUBO->Map(driverInfo.uboAlignment, PICAShader::totalUniformSize()); - std::memcpy(uboRes.pointer, shaderUnit.vs.getUniformPointer(), PICAShader::totalUniformSize()); - hwShaderUniformUBO->Unmap(PICAShader::totalUniformSize()); - - hwShaderUniformUBOOffset = uboRes.buffer_offset; - } - - performIndexedRender = accel->indexed; - minimumIndex = GLsizei(accel->minimumIndex); - maximumIndex = GLsizei(accel->maximumIndex); - - // Upload vertex data and index buffer data to our GPU - accelerateVertexUpload(shaderUnit, accel); - } - } - - if (!usingUbershader) { - OpenGL::Program& program = getSpecializedShader(); - gl.useProgram(program); - } else { // Bind ubershader & load ubershader uniforms - gl.useProgram(triangleProgram); - - const float depthScale = f24::fromRaw(regs[PICA::InternalRegs::DepthScale] & 0xffffff).toFloat32(); - const float depthOffset = f24::fromRaw(regs[PICA::InternalRegs::DepthOffset] & 0xffffff).toFloat32(); - const bool depthMapEnable = regs[PICA::InternalRegs::DepthmapEnable] & 1; - - if (oldDepthScale != depthScale) { - oldDepthScale = depthScale; - glUniform1f(ubershaderData.depthScaleLoc, depthScale); - } - - if (oldDepthOffset != depthOffset) { - oldDepthOffset = depthOffset; - glUniform1f(ubershaderData.depthOffsetLoc, depthOffset); - } - - if (oldDepthmapEnable != depthMapEnable) { - oldDepthmapEnable = depthMapEnable; - glUniform1i(ubershaderData.depthmapEnableLoc, depthMapEnable); - } - - // Upload PICA Registers as a single uniform. The shader needs access to the rasterizer registers (for depth, starting from index 0x48) - // The texturing and the fragment lighting registers. Therefore we upload them all in one go to avoid multiple slow uniform updates - glUniform1uiv(ubershaderData.picaRegLoc, 0x200 - 0x48, ®s[0x48]); - setupUbershaderTexEnv(); - } - - return usingAcceleratedShader; -} - void RendererGL::screenshot(const std::string& name) { constexpr uint width = 400; constexpr uint height = 2 * 240; @@ -1151,7 +779,7 @@ void RendererGL::screenshot(const std::string& name) { // Flip the image vertically for (int y = 0; y < height; y++) { - std::memcpy(&flippedPixels[y * width * 4], &pixels[(height - y - 1) * width * 4], width * 4); + memcpy(&flippedPixels[y * width * 4], &pixels[(height - y - 1) * width * 4], width * 4); // Swap R and B channels for (int x = 0; x < width; x++) { std::swap(flippedPixels[y * width * 4 + x * 4 + 0], flippedPixels[y * width * 4 + x * 4 + 2]); @@ -1162,183 +790,3 @@ void RendererGL::screenshot(const std::string& name) { stbi_write_png(name.c_str(), width, height, 4, flippedPixels.data(), 0); } - -void RendererGL::deinitGraphicsContext() { - // Invalidate all surface caches since they'll no longer be valid - textureCache.reset(); - depthBufferCache.reset(); - colourBufferCache.reset(); - shaderCache.clear(); - - // All other GL objects should be invalidated automatically and be recreated by the next call to initGraphicsContext - // TODO: Make it so that depth and colour buffers get written back to 3DS memory - printf("RendererGL::DeinitGraphicsContext called\n"); -} - -std::string RendererGL::getUbershader() { - auto gl_resources = cmrc::RendererGL::get_filesystem(); - auto fragmentShader = gl_resources.open("opengl_fragment_shader.frag"); - - return std::string(fragmentShader.begin(), fragmentShader.end()); -} - -void RendererGL::setUbershader(const std::string& shader) { - auto gl_resources = cmrc::RendererGL::get_filesystem(); - auto vertexShaderSource = gl_resources.open("opengl_vertex_shader.vert"); - - OpenGL::Shader vert({vertexShaderSource.begin(), vertexShaderSource.size()}, OpenGL::Vertex); - OpenGL::Shader frag(shader, OpenGL::Fragment); - triangleProgram.create({vert, frag}); - - initUbershader(triangleProgram); - - glUniform1f(ubershaderData.depthScaleLoc, oldDepthScale); - glUniform1f(ubershaderData.depthOffsetLoc, oldDepthOffset); - glUniform1i(ubershaderData.depthmapEnableLoc, oldDepthmapEnable); -} - -void RendererGL::initUbershader(OpenGL::Program& program) { - gl.useProgram(program); - - ubershaderData.textureEnvSourceLoc = OpenGL::uniformLocation(program, "u_textureEnvSource"); - ubershaderData.textureEnvOperandLoc = OpenGL::uniformLocation(program, "u_textureEnvOperand"); - ubershaderData.textureEnvCombinerLoc = OpenGL::uniformLocation(program, "u_textureEnvCombiner"); - ubershaderData.textureEnvColorLoc = OpenGL::uniformLocation(program, "u_textureEnvColor"); - ubershaderData.textureEnvScaleLoc = OpenGL::uniformLocation(program, "u_textureEnvScale"); - - ubershaderData.depthScaleLoc = OpenGL::uniformLocation(program, "u_depthScale"); - ubershaderData.depthOffsetLoc = OpenGL::uniformLocation(program, "u_depthOffset"); - ubershaderData.depthmapEnableLoc = OpenGL::uniformLocation(program, "u_depthmapEnable"); - ubershaderData.picaRegLoc = OpenGL::uniformLocation(program, "u_picaRegs"); - - // Init sampler objects. Texture 0 goes in texture unit 0, texture 1 in TU 1, texture 2 in TU 2 and the LUTs go in TU 3 - glUniform1i(OpenGL::uniformLocation(program, "u_tex0"), 0); - glUniform1i(OpenGL::uniformLocation(program, "u_tex1"), 1); - glUniform1i(OpenGL::uniformLocation(program, "u_tex2"), 2); - glUniform1i(OpenGL::uniformLocation(program, "u_tex_luts"), 3); -} - -void RendererGL::compileDisplayShader() { - auto gl_resources = cmrc::RendererGL::get_filesystem(); - auto displayVertexShaderSource = driverInfo.usingGLES ? gl_resources.open("opengl_es_display.vert") : gl_resources.open("opengl_display.vert"); - auto displayFragmentShaderSource = driverInfo.usingGLES ? gl_resources.open("opengl_es_display.frag") : gl_resources.open("opengl_display.frag"); - - OpenGL::Shader vertDisplay({displayVertexShaderSource.begin(), displayVertexShaderSource.size()}, OpenGL::Vertex); - OpenGL::Shader fragDisplay({displayFragmentShaderSource.begin(), displayFragmentShaderSource.size()}, OpenGL::Fragment); - displayProgram.create({vertDisplay, fragDisplay}); - - gl.useProgram(displayProgram); - glUniform1i(OpenGL::uniformLocation(displayProgram, "u_texture"), 0); // Init sampler object -} - -void RendererGL::accelerateVertexUpload(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) { - u32 buffer = 0; // Vertex buffer index for non-fixed attributes - u32 attrCount = 0; - - const u32 totalAttribCount = accel->totalAttribCount; - - static constexpr GLenum attributeFormats[4] = { - GL_BYTE, // 0: Signed byte - GL_UNSIGNED_BYTE, // 1: Unsigned byte - GL_SHORT, // 2: Short - GL_FLOAT, // 3: Float - }; - - const u32 vertexCount = accel->maximumIndex - accel->minimumIndex + 1; - - // Update index buffer if necessary - if (accel->indexed) { - usingShortIndices = accel->useShortIndices; - const usize indexBufferSize = regs[PICA::InternalRegs::VertexCountReg] * (usingShortIndices ? sizeof(u16) : sizeof(u8)); - - hwIndexBuffer->Bind(); - auto indexBufferRes = hwIndexBuffer->Map(4, indexBufferSize); - hwIndexBufferOffset = reinterpret_cast(usize(indexBufferRes.buffer_offset)); - - std::memcpy(indexBufferRes.pointer, accel->indexBuffer, indexBufferSize); - // If we don't have glDrawRangeElementsBaseVertex, we must subtract the base index value from our index buffer manually - if (glDrawRangeElementsBaseVertex == nullptr) [[unlikely]] { - const u32 indexCount = regs[PICA::InternalRegs::VertexCountReg]; - usingShortIndices ? PICA::IndexBuffer::subtractBaseIndex((u8*)indexBufferRes.pointer, indexCount, accel->minimumIndex) - : PICA::IndexBuffer::subtractBaseIndex((u8*)indexBufferRes.pointer, indexCount, accel->minimumIndex); - } - - hwIndexBuffer->Unmap(indexBufferSize); - } - - hwVertexBuffer->Bind(); - auto vertexBufferRes = hwVertexBuffer->Map(4, accel->vertexDataSize); - u8* vertexData = static_cast(vertexBufferRes.pointer); - const u32 vertexBufferOffset = vertexBufferRes.buffer_offset; - - gl.bindVAO(hwShaderVAO); - - // Enable or disable vertex attributes as needed - const u32 currentAttributeMask = accel->enabledAttributeMask; - // Use bitwise xor to calculate which attributes changed - u32 attributeMaskDiff = currentAttributeMask ^ previousAttributeMask; - - while (attributeMaskDiff != 0) { - // Get index of next different attribute and turn it off - const u32 index = 31 - std::countl_zero(attributeMaskDiff); - const u32 mask = 1u << index; - attributeMaskDiff ^= mask; - - if ((currentAttributeMask & mask) != 0) { - // Attribute was disabled and is now enabled - hwShaderVAO.enableAttribute(index); - } else { - // Attribute was enabled and is now disabled - hwShaderVAO.disableAttribute(index); - } - } - - previousAttributeMask = currentAttributeMask; - - // Upload the data for each (enabled) attribute loader into our vertex buffer - for (int i = 0; i < accel->totalLoaderCount; i++) { - auto& loader = accel->loaders[i]; - - std::memcpy(vertexData, loader.data, loader.size); - vertexData += loader.size; - } - - hwVertexBuffer->Unmap(accel->vertexDataSize); - - // Iterate over the 16 PICA input registers and configure how they should be fetched. - for (int i = 0; i < 16; i++) { - const auto& attrib = accel->attributeInfo[i]; - const u32 attributeMask = 1u << i; - - if (accel->fixedAttributes & attributeMask) { - auto& attrValue = fixedAttrValues[i]; - // This is a fixed attribute, so set its fixed value, but only if it actually needs to be updated - if (attrValue[0] != attrib.fixedValue[0] || attrValue[1] != attrib.fixedValue[1] || attrValue[2] != attrib.fixedValue[2] || - attrValue[3] != attrib.fixedValue[3]) { - std::memcpy(attrValue.data(), attrib.fixedValue.data(), sizeof(attrib.fixedValue)); - glVertexAttrib4f(i, attrib.fixedValue[0], attrib.fixedValue[1], attrib.fixedValue[2], attrib.fixedValue[3]); - } - } else if (accel->enabledAttributeMask & attributeMask) { - glVertexAttribPointer( - i, attrib.componentCount, attributeFormats[attrib.type], GL_FALSE, attrib.stride, - reinterpret_cast(vertexBufferOffset + attrib.offset) - ); - } - } -} - -void RendererGL::setupGLES() { - driverInfo.usingGLES = true; - - // OpenGL ES hardware is typically way too slow to use the ubershader (eg RPi, mobile phones, handhelds) or has other issues with it. - // So, display a warning and turn them off on OpenGL ES. - if (emulatorConfig->useUbershaders) { - emulatorConfig->useUbershaders = false; - Helpers::warn("Ubershaders enabled on OpenGL ES. This usually results in a worse experience, turning it off..."); - } - - // Stub out logic operations so that calling them doesn't crash the emulator - if (!glLogicOp) { - glLogicOp = [](GLenum) {}; - } -} diff --git a/src/core/renderer_mtl/metal_cpp_impl.cpp b/src/core/renderer_mtl/metal_cpp_impl.cpp deleted file mode 100644 index 7fa7137b..00000000 --- a/src/core/renderer_mtl/metal_cpp_impl.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#define NS_PRIVATE_IMPLEMENTATION -#define CA_PRIVATE_IMPLEMENTATION -#define MTL_PRIVATE_IMPLEMENTATION -#include -#include -#include diff --git a/src/core/renderer_mtl/mtl_lut_texture.cpp b/src/core/renderer_mtl/mtl_lut_texture.cpp deleted file mode 100644 index 8486a50c..00000000 --- a/src/core/renderer_mtl/mtl_lut_texture.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "renderer_mtl/renderer_mtl.hpp" - -namespace Metal { - static constexpr u32 LAYER_COUNT = 1024; - - LutTexture::LutTexture(MTL::Device* device, MTL::TextureType type, MTL::PixelFormat pixelFormat, u32 width, u32 height, const char* name) { - MTL::TextureDescriptor* desc = MTL::TextureDescriptor::alloc()->init(); - desc->setTextureType(type); - desc->setPixelFormat(pixelFormat); - desc->setWidth(width); - desc->setHeight(height); - desc->setArrayLength(LAYER_COUNT); - desc->setUsage(MTL::TextureUsageShaderRead /* | MTL::TextureUsageShaderWrite*/); - desc->setStorageMode(MTL::StorageModeShared); - - texture = device->newTexture(desc); - texture->setLabel(toNSString(name)); - desc->release(); - } - - LutTexture::~LutTexture() { texture->release(); } - - u32 LutTexture::getNextIndex() { - currentIndex = (currentIndex + 1) % LAYER_COUNT; - return currentIndex; - } -} // namespace Metal diff --git a/src/core/renderer_mtl/mtl_texture.cpp b/src/core/renderer_mtl/mtl_texture.cpp deleted file mode 100644 index 29d4024a..00000000 --- a/src/core/renderer_mtl/mtl_texture.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "renderer_mtl/mtl_texture.hpp" - -#include - -#include -#include - -#include "colour.hpp" -#include "renderer_mtl/objc_helper.hpp" - -using namespace Helpers; - -namespace Metal { - void Texture::allocate() { - formatInfo = PICA::getMTLPixelFormatInfo(format); - - MTL::TextureDescriptor* descriptor = MTL::TextureDescriptor::alloc()->init(); - descriptor->setTextureType(MTL::TextureType2D); - descriptor->setPixelFormat(formatInfo.pixelFormat); - descriptor->setWidth(size.u()); - descriptor->setHeight(size.v()); - descriptor->setUsage(MTL::TextureUsageShaderRead); - descriptor->setStorageMode(MTL::StorageModeShared); // TODO: use private + staging buffers? - texture = device->newTexture(descriptor); - texture->setLabel(toNSString(fmt::format("Base texture {} {}x{}", std::string(PICA::textureFormatToString(format)), size.u(), size.v()))); - descriptor->release(); - - if (formatInfo.needsSwizzle) { - base = texture; - texture = base->newTextureView(formatInfo.pixelFormat, MTL::TextureType2D, NS::Range(0, 1), NS::Range(0, 1), formatInfo.swizzle); - } - - setNewConfig(config); - } - - // Set the texture's configuration, which includes min/mag filters, wrapping S/T modes, and so on - void Texture::setNewConfig(u32 cfg) { - config = cfg; - - if (sampler) { - sampler->release(); - } - - const auto magFilter = (cfg & 0x2) != 0 ? MTL::SamplerMinMagFilterLinear : MTL::SamplerMinMagFilterNearest; - const auto minFilter = (cfg & 0x4) != 0 ? MTL::SamplerMinMagFilterLinear : MTL::SamplerMinMagFilterNearest; - const auto wrapT = PICA::toMTLSamplerAddressMode(getBits<8, 3>(cfg)); - const auto wrapS = PICA::toMTLSamplerAddressMode(getBits<12, 3>(cfg)); - - MTL::SamplerDescriptor* samplerDescriptor = MTL::SamplerDescriptor::alloc()->init(); - samplerDescriptor->setMinFilter(minFilter); - samplerDescriptor->setMagFilter(magFilter); - samplerDescriptor->setSAddressMode(wrapS); - samplerDescriptor->setTAddressMode(wrapT); - - samplerDescriptor->setLabel(toNSString("Sampler")); - sampler = device->newSamplerState(samplerDescriptor); - samplerDescriptor->release(); - } - - void Texture::free() { - valid = false; - - if (texture) { - texture->release(); - } - - if (base) { - base->release(); - } - - if (sampler) { - sampler->release(); - } - } - - u64 Texture::sizeInBytes() { - u64 pixelCount = u64(size.x()) * u64(size.y()); - - switch (format) { - case PICA::TextureFmt::RGBA8: // 4 bytes per pixel - return pixelCount * 4; - - case PICA::TextureFmt::RGB8: // 3 bytes per pixel - return pixelCount * 3; - - case PICA::TextureFmt::RGBA5551: // 2 bytes per pixel - case PICA::TextureFmt::RGB565: - case PICA::TextureFmt::RGBA4: - case PICA::TextureFmt::RG8: - case PICA::TextureFmt::IA8: return pixelCount * 2; - - case PICA::TextureFmt::A8: // 1 byte per pixel - case PICA::TextureFmt::I8: - case PICA::TextureFmt::IA4: return pixelCount; - - case PICA::TextureFmt::I4: // 4 bits per pixel - case PICA::TextureFmt::A4: return pixelCount / 2; - - case PICA::TextureFmt::ETC1: // Compressed formats - case PICA::TextureFmt::ETC1A4: { - // Number of 4x4 tiles - const u64 tileCount = pixelCount / 16; - // Tiles are 8 bytes each on ETC1 and 16 bytes each on ETC1A4 - const u64 tileSize = format == PICA::TextureFmt::ETC1 ? 8 : 16; - return tileCount * tileSize; - } - - default: Helpers::panic("[PICA] Attempted to get size of invalid texture type"); - } - } - - void Texture::decodeTexture(std::span data) { - std::unique_ptr decodedData(new u8[u64(size.u()) * u64(size.v()) * formatInfo.bytesPerTexel]); - // This pointer will be incremented by our texture decoders - u8* decodePtr = decodedData.get(); - - // Decode texels line by line - for (u32 v = 0; v < size.v(); v++) { - for (u32 u = 0; u < size.u(); u++) { - formatInfo.decoder(size, u, v, data, decodePtr); - decodePtr += formatInfo.bytesPerTexel; - } - } - - texture->replaceRegion(MTL::Region(0, 0, size.u(), size.v()), 0, 0, decodedData.get(), formatInfo.bytesPerTexel * size.u(), 0); - } -} // namespace Metal diff --git a/src/core/renderer_mtl/objc_helper.mm b/src/core/renderer_mtl/objc_helper.mm deleted file mode 100644 index eeea56a0..00000000 --- a/src/core/renderer_mtl/objc_helper.mm +++ /dev/null @@ -1,12 +0,0 @@ -#include "renderer_mtl/objc_helper.hpp" - -// TODO: change the include -#import - -namespace Metal { - -dispatch_data_t createDispatchData(const void* data, size_t size) { - return dispatch_data_create(data, size, dispatch_get_global_queue(0, 0), ^{}); -} - -} // namespace Metal diff --git a/src/core/renderer_mtl/pica_to_mtl.cpp b/src/core/renderer_mtl/pica_to_mtl.cpp deleted file mode 100644 index 973ad1bf..00000000 --- a/src/core/renderer_mtl/pica_to_mtl.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include "renderer_mtl/pica_to_mtl.hpp" - -#include "renderer_mtl/texture_decoder.hpp" - -using namespace Helpers; - -namespace PICA { - MTLPixelFormatInfo mtlPixelFormatInfos[14] = { - {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelABGR8ToRGBA8}, // RGBA8 - {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelBGR8ToRGBA8}, // RGB8 - {MTL::PixelFormatBGR5A1Unorm, 2, decodeTexelA1BGR5ToBGR5A1}, // RGBA5551 - {MTL::PixelFormatB5G6R5Unorm, 2, decodeTexelB5G6R5ToB5G6R5}, // RGB565 - {MTL::PixelFormatABGR4Unorm, 2, decodeTexelABGR4ToABGR4}, // RGBA4 - {MTL::PixelFormatRG8Unorm, - 2, - decodeTexelAI8ToRG8, - true, - { - .red = MTL::TextureSwizzleRed, - .green = MTL::TextureSwizzleRed, - .blue = MTL::TextureSwizzleRed, - .alpha = MTL::TextureSwizzleGreen, - }}, // IA8 - {MTL::PixelFormatRG8Unorm, 2, decodeTexelGR8ToRG8}, // RG8 - {MTL::PixelFormatR8Unorm, - 1, - decodeTexelI8ToR8, - true, - {.red = MTL::TextureSwizzleRed, .green = MTL::TextureSwizzleRed, .blue = MTL::TextureSwizzleRed, .alpha = MTL::TextureSwizzleOne}}, // I8 - {MTL::PixelFormatA8Unorm, 1, decodeTexelA8ToA8}, // A8 - {MTL::PixelFormatABGR4Unorm, 2, decodeTexelAI4ToABGR4}, // IA4 - {MTL::PixelFormatR8Unorm, - 1, - decodeTexelI4ToR8, - true, - {.red = MTL::TextureSwizzleRed, .green = MTL::TextureSwizzleRed, .blue = MTL::TextureSwizzleRed, .alpha = MTL::TextureSwizzleOne}}, // I4 - {MTL::PixelFormatA8Unorm, 1, decodeTexelA4ToA8}, // A4 - {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelETC1ToRGBA8}, // ETC1 - {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelETC1A4ToRGBA8}, // ETC1A4 - }; - - void checkForMTLPixelFormatSupport(MTL::Device* device) { -#ifndef PANDA3DS_IOS_SIMULATOR - const bool supportsApple1 = device->supportsFamily(MTL::GPUFamilyApple1); -#else - // iOS simulator claims to support Apple1, yet doesn't support a bunch of texture formats from it... - const bool supportsApple1 = false; -#endif - if (!supportsApple1) { - mtlPixelFormatInfos[2] = {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelA1BGR5ToRGBA8}; - mtlPixelFormatInfos[3] = {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelB5G6R5ToRGBA8}; - mtlPixelFormatInfos[4] = {MTL::PixelFormatRGBA8Unorm, 4, decodeTexelABGR4ToRGBA8}; - - mtlPixelFormatInfos[9] = { - MTL::PixelFormatRG8Unorm, - 2, - decodeTexelAI4ToRG8, - true, - { - .red = MTL::TextureSwizzleRed, - .green = MTL::TextureSwizzleRed, - .blue = MTL::TextureSwizzleRed, - .alpha = MTL::TextureSwizzleGreen, - } - }; - } - } -} // namespace PICA diff --git a/src/core/renderer_mtl/renderer_mtl.cpp b/src/core/renderer_mtl/renderer_mtl.cpp deleted file mode 100644 index adee8f3c..00000000 --- a/src/core/renderer_mtl/renderer_mtl.cpp +++ /dev/null @@ -1,877 +0,0 @@ -#include "renderer_mtl/renderer_mtl.hpp" - -#include -#include - -#include "renderer_mtl/mtl_lut_texture.hpp" - -// Hack: Apple annoyingly defines a global "NO" macro which ends up conflicting with our own code... -#undef NO - -#include "PICA/gpu.hpp" -#include "PICA/pica_hash.hpp" -#include "SDL_metal.h" -#include "screen_layout.hpp" - -using namespace PICA; - -CMRC_DECLARE(RendererMTL); - -static constexpr u16 LIGHTING_LUT_TEXTURE_WIDTH = 256; -static constexpr u32 FOG_LUT_TEXTURE_WIDTH = 128; -// Bind the vertex buffer to binding 30 so that it doesn't occupy the lower indices -static constexpr uint VERTEX_BUFFER_BINDING_INDEX = 30; - -// HACK: redefinition... -PICA::ColorFmt ToColorFormat(u32 format) { - switch (format) { - case 2: return PICA::ColorFmt::RGB565; - case 3: return PICA::ColorFmt::RGBA5551; - default: return static_cast(format); - } -} - -MTL::Library* loadLibrary(MTL::Device* device, const cmrc::file& shaderSource) { - NS::Error* error = nullptr; - MTL::Library* library = device->newLibrary(Metal::createDispatchData(shaderSource.begin(), shaderSource.size()), &error); - // MTL::Library* library = device->newLibrary(NS::String::string(source.c_str(), NS::ASCIIStringEncoding), compileOptions, &error); - if (error) { - Helpers::panic("Error loading shaders: %s", error->description()->cString(NS::ASCIIStringEncoding)); - } - - return library; -} - -RendererMTL::RendererMTL(GPU& gpu, const std::array& internalRegs, const std::array& externalRegs) - : Renderer(gpu, internalRegs, externalRegs) {} - -RendererMTL::~RendererMTL() {} - -void RendererMTL::reset() { - vertexBufferCache.reset(); - depthStencilCache.reset(); - drawPipelineCache.reset(); - blitPipelineCache.reset(); - textureCache.reset(); - depthStencilRenderTargetCache.reset(); - colorRenderTargetCache.reset(); -} - -void RendererMTL::setMTKLayer(void* layer) { metalLayer = (CA::MetalLayer*)layer; } - -void RendererMTL::display() { - CA::MetalDrawable* drawable = metalLayer->nextDrawable(); - if (!drawable) { - return; - } - - MTL::Texture* texture = drawable->texture(); - - using namespace PICA::ExternalRegs; - - // Top screen - const u32 topActiveFb = externalRegs[Framebuffer0Select] & 1; - const u32 topScreenAddr = externalRegs[topActiveFb == 0 ? Framebuffer0AFirstAddr : Framebuffer0ASecondAddr]; - auto topScreen = colorRenderTargetCache.findFromAddress(topScreenAddr); - - if (topScreen) { - clearColor(nullptr, topScreen->get().texture); - } - - // Bottom screen - const u32 bottomActiveFb = externalRegs[Framebuffer1Select] & 1; - const u32 bottomScreenAddr = externalRegs[bottomActiveFb == 0 ? Framebuffer1AFirstAddr : Framebuffer1ASecondAddr]; - auto bottomScreen = colorRenderTargetCache.findFromAddress(bottomScreenAddr); - - if (bottomScreen) { - clearColor(nullptr, bottomScreen->get().texture); - } - - // Draw - commandBuffer->pushDebugGroup(toNSString("Display")); - - MTL::RenderPassDescriptor* renderPassDescriptor = MTL::RenderPassDescriptor::alloc()->init(); - MTL::RenderPassColorAttachmentDescriptor* colorAttachment = renderPassDescriptor->colorAttachments()->object(0); - colorAttachment->setTexture(texture); - colorAttachment->setLoadAction(MTL::LoadActionClear); - colorAttachment->setClearColor(MTL::ClearColor{0.0f, 0.0f, 0.0f, 1.0f}); - colorAttachment->setStoreAction(MTL::StoreActionStore); - - nextRenderPassName = "Display"; - beginRenderPassIfNeeded(renderPassDescriptor, false, texture); - renderCommandEncoder->setRenderPipelineState(displayPipeline); - renderCommandEncoder->setFragmentSamplerState(nearestSampler, 0); - - if (outputSizeChanged) { - outputSizeChanged = false; - ScreenLayout::WindowCoordinates windowCoords; - ScreenLayout::calculateCoordinates( - windowCoords, outputWindowWidth, outputWindowHeight, emulatorConfig->topScreenSize, emulatorConfig->screenLayout - ); - - blitInfo.topScreenX = float(windowCoords.topScreenX); - blitInfo.topScreenY = float(windowCoords.topScreenY); - blitInfo.bottomScreenX = float(windowCoords.bottomScreenX); - blitInfo.bottomScreenY = float(windowCoords.bottomScreenY); - - blitInfo.topScreenWidth = float(windowCoords.topScreenWidth); - blitInfo.topScreenHeight = float(windowCoords.topScreenHeight); - blitInfo.bottomScreenWidth = float(windowCoords.bottomScreenWidth); - blitInfo.bottomScreenHeight = float(windowCoords.bottomScreenHeight); - } - - // Top screen - if (topScreen) { - renderCommandEncoder->setViewport( - MTL::Viewport{blitInfo.topScreenX, blitInfo.topScreenY, blitInfo.topScreenWidth, blitInfo.topScreenHeight, 0.0f, 1.0f} - ); - renderCommandEncoder->setFragmentTexture(topScreen->get().texture, 0); - renderCommandEncoder->drawPrimitives(MTL::PrimitiveTypeTriangleStrip, NS::UInteger(0), NS::UInteger(4)); - } - - // Bottom screen - if (bottomScreen) { - renderCommandEncoder->setViewport( - MTL::Viewport{blitInfo.bottomScreenX, blitInfo.bottomScreenY, blitInfo.bottomScreenWidth, blitInfo.bottomScreenHeight, 0.0f, 1.0f} - ); - renderCommandEncoder->setFragmentTexture(bottomScreen->get().texture, 0); - renderCommandEncoder->drawPrimitives(MTL::PrimitiveTypeTriangleStrip, NS::UInteger(0), NS::UInteger(4)); - } - - endRenderPass(); - - commandBuffer->presentDrawable(drawable); - commandBuffer->popDebugGroup(); - commitCommandBuffer(); - - // Inform the vertex buffer cache that the frame ended - vertexBufferCache.endFrame(); - drawable->release(); -} - -void RendererMTL::initGraphicsContext(void* window) { - // On Qt and iOS, the frontend handles the Metal layer -#if defined(PANDA3DS_FRONTEND_QT) || defined(PANDA3DS_IOS) - device = MTL::CreateSystemDefaultDevice(); -#else - // TODO: what should be the type of the view? - void* view = SDL_Metal_CreateView((SDL_Window*)window); - metalLayer = (CA::MetalLayer*)SDL_Metal_GetLayer(view); - device = MTL::CreateSystemDefaultDevice(); - metalLayer->setDevice(device); -#endif - checkForMTLPixelFormatSupport(device); - - commandQueue = device->newCommandQueue(); - - // Textures - MTL::TextureDescriptor* textureDescriptor = MTL::TextureDescriptor::alloc()->init(); - textureDescriptor->setTextureType(MTL::TextureType2D); - textureDescriptor->setPixelFormat(MTL::PixelFormatRGBA8Unorm); - textureDescriptor->setWidth(1); - textureDescriptor->setHeight(1); - textureDescriptor->setStorageMode(MTL::StorageModePrivate); - textureDescriptor->setUsage(MTL::TextureUsageShaderRead); - - nullTexture = device->newTexture(textureDescriptor); - nullTexture->setLabel(toNSString("Null texture")); - textureDescriptor->release(); - - // Samplers - MTL::SamplerDescriptor* samplerDescriptor = MTL::SamplerDescriptor::alloc()->init(); - samplerDescriptor->setLabel(toNSString("Sampler (nearest)")); - nearestSampler = device->newSamplerState(samplerDescriptor); - - samplerDescriptor->setMinFilter(MTL::SamplerMinMagFilterLinear); - samplerDescriptor->setMagFilter(MTL::SamplerMinMagFilterLinear); - samplerDescriptor->setLabel(toNSString("Sampler (linear)")); - linearSampler = device->newSamplerState(samplerDescriptor); - - samplerDescriptor->release(); - - lutLightingTexture = new Metal::LutTexture( - device, MTL::TextureType2DArray, MTL::PixelFormatR16Unorm, LIGHTING_LUT_TEXTURE_WIDTH, Lights::LUT_Count, "Lighting LUT texture" - ); - lutFogTexture = new Metal::LutTexture(device, MTL::TextureType1DArray, MTL::PixelFormatRG32Float, FOG_LUT_TEXTURE_WIDTH, 1, "Fog LUT texture"); - - // -------- Pipelines -------- - - // Load shaders - auto mtlResources = cmrc::RendererMTL::get_filesystem(); - library = loadLibrary(device, mtlResources.open("metal_shaders.metallib")); - MTL::Library* blitLibrary = loadLibrary(device, mtlResources.open("metal_blit.metallib")); - // MTL::Library* copyToLutTextureLibrary = loadLibrary(device, mtlResources.open("metal_copy_to_lut_texture.metallib")); - - // Display - MTL::Function* vertexDisplayFunction = library->newFunction(NS::String::string("vertexDisplay", NS::ASCIIStringEncoding)); - MTL::Function* fragmentDisplayFunction = library->newFunction(NS::String::string("fragmentDisplay", NS::ASCIIStringEncoding)); - - MTL::RenderPipelineDescriptor* displayPipelineDescriptor = MTL::RenderPipelineDescriptor::alloc()->init(); - displayPipelineDescriptor->setVertexFunction(vertexDisplayFunction); - displayPipelineDescriptor->setFragmentFunction(fragmentDisplayFunction); - auto* displayColorAttachment = displayPipelineDescriptor->colorAttachments()->object(0); - displayColorAttachment->setPixelFormat(MTL::PixelFormat::PixelFormatBGRA8Unorm); - - NS::Error* error = nullptr; - displayPipelineDescriptor->setLabel(toNSString("Display pipeline")); - displayPipeline = device->newRenderPipelineState(displayPipelineDescriptor, &error); - if (error) { - Helpers::panic("Error creating display pipeline state: %s", error->description()->cString(NS::ASCIIStringEncoding)); - } - displayPipelineDescriptor->release(); - vertexDisplayFunction->release(); - fragmentDisplayFunction->release(); - - // Blit - MTL::Function* vertexBlitFunction = blitLibrary->newFunction(NS::String::string("vertexBlit", NS::ASCIIStringEncoding)); - MTL::Function* fragmentBlitFunction = blitLibrary->newFunction(NS::String::string("fragmentBlit", NS::ASCIIStringEncoding)); - - blitPipelineCache.set(device, vertexBlitFunction, fragmentBlitFunction); - - // Draw - MTL::Function* vertexDrawFunction = library->newFunction(NS::String::string("vertexDraw", NS::ASCIIStringEncoding)); - - // -------- Vertex descriptor -------- - MTL::VertexDescriptor* vertexDescriptor = MTL::VertexDescriptor::alloc()->init(); - - // Position - MTL::VertexAttributeDescriptor* positionAttribute = vertexDescriptor->attributes()->object(0); - positionAttribute->setFormat(MTL::VertexFormatFloat4); - positionAttribute->setOffset(offsetof(Vertex, s.positions)); - positionAttribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - // Quaternion - MTL::VertexAttributeDescriptor* quaternionAttribute = vertexDescriptor->attributes()->object(1); - quaternionAttribute->setFormat(MTL::VertexFormatFloat4); - quaternionAttribute->setOffset(offsetof(Vertex, s.quaternion)); - quaternionAttribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - // Color - MTL::VertexAttributeDescriptor* colorAttribute = vertexDescriptor->attributes()->object(2); - colorAttribute->setFormat(MTL::VertexFormatFloat4); - colorAttribute->setOffset(offsetof(Vertex, s.colour)); - colorAttribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - // Texture coordinate 0 - MTL::VertexAttributeDescriptor* texCoord0Attribute = vertexDescriptor->attributes()->object(3); - texCoord0Attribute->setFormat(MTL::VertexFormatFloat2); - texCoord0Attribute->setOffset(offsetof(Vertex, s.texcoord0)); - texCoord0Attribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - // Texture coordinate 1 - MTL::VertexAttributeDescriptor* texCoord1Attribute = vertexDescriptor->attributes()->object(4); - texCoord1Attribute->setFormat(MTL::VertexFormatFloat2); - texCoord1Attribute->setOffset(offsetof(Vertex, s.texcoord1)); - texCoord1Attribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - // Texture coordinate 0 W - MTL::VertexAttributeDescriptor* texCoord0WAttribute = vertexDescriptor->attributes()->object(5); - texCoord0WAttribute->setFormat(MTL::VertexFormatFloat); - texCoord0WAttribute->setOffset(offsetof(Vertex, s.texcoord0_w)); - texCoord0WAttribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - // View - MTL::VertexAttributeDescriptor* viewAttribute = vertexDescriptor->attributes()->object(6); - viewAttribute->setFormat(MTL::VertexFormatFloat3); - viewAttribute->setOffset(offsetof(Vertex, s.view)); - viewAttribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - // Texture coordinate 2 - MTL::VertexAttributeDescriptor* texCoord2Attribute = vertexDescriptor->attributes()->object(7); - texCoord2Attribute->setFormat(MTL::VertexFormatFloat2); - texCoord2Attribute->setOffset(offsetof(Vertex, s.texcoord2)); - texCoord2Attribute->setBufferIndex(VERTEX_BUFFER_BINDING_INDEX); - - MTL::VertexBufferLayoutDescriptor* vertexBufferLayout = vertexDescriptor->layouts()->object(VERTEX_BUFFER_BINDING_INDEX); - vertexBufferLayout->setStride(sizeof(Vertex)); - vertexBufferLayout->setStepFunction(MTL::VertexStepFunctionPerVertex); - vertexBufferLayout->setStepRate(1); - - drawPipelineCache.set(device, library, vertexDrawFunction, vertexDescriptor); - - // Copy to LUT texture - /* - MTL::FunctionConstantValues* constants = MTL::FunctionConstantValues::alloc()->init(); - constants->setConstantValue(&LIGHTING_LUT_TEXTURE_WIDTH, MTL::DataTypeUShort, NS::UInteger(0)); - - error = nullptr; - MTL::Function* vertexCopyToLutTextureFunction = - copyToLutTextureLibrary->newFunction(NS::String::string("vertexCopyToLutTexture", NS::ASCIIStringEncoding), constants, &error); - if (error) { - Helpers::panic("Error creating copy_to_lut_texture vertex function: %s", error->description()->cString(NS::ASCIIStringEncoding)); - } - constants->release(); - - MTL::RenderPipelineDescriptor* copyToLutTexturePipelineDescriptor = MTL::RenderPipelineDescriptor::alloc()->init(); - copyToLutTexturePipelineDescriptor->setVertexFunction(vertexCopyToLutTextureFunction); - // Disable rasterization - copyToLutTexturePipelineDescriptor->setRasterizationEnabled(false); - - error = nullptr; - copyToLutTexturePipelineDescriptor->setLabel(toNSString("Copy to LUT texture pipeline")); - copyToLutTexturePipeline = device->newRenderPipelineState(copyToLutTexturePipelineDescriptor, &error); - if (error) { - Helpers::panic("Error creating copy_to_lut_texture pipeline state: %s", error->description()->cString(NS::ASCIIStringEncoding)); - } - copyToLutTexturePipelineDescriptor->release(); - vertexCopyToLutTextureFunction->release(); - */ - - // Depth stencil cache - depthStencilCache.set(device); - - // Vertex buffer cache - vertexBufferCache.set(device); - - // -------- Depth stencil state -------- - MTL::DepthStencilDescriptor* depthStencilDescriptor = MTL::DepthStencilDescriptor::alloc()->init(); - depthStencilDescriptor->setLabel(toNSString("Default depth stencil state")); - defaultDepthStencilState = device->newDepthStencilState(depthStencilDescriptor); - depthStencilDescriptor->release(); - - blitLibrary->release(); - // copyToLutTextureLibrary->release(); -} - -void RendererMTL::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) { - const auto color = colorRenderTargetCache.findFromAddress(startAddress); - if (color) { - const float r = Helpers::getBits<24, 8>(value) / 255.0f; - const float g = Helpers::getBits<16, 8>(value) / 255.0f; - const float b = Helpers::getBits<8, 8>(value) / 255.0f; - const float a = (value & 0xff) / 255.0f; - - colorClearOps[color->get().texture] = {r, g, b, a}; - - return; - } - - const auto depth = depthStencilRenderTargetCache.findFromAddress(startAddress); - if (depth) { - float depthVal; - const auto format = depth->get().format; - if (format == DepthFmt::Depth16) { - depthVal = (value & 0xffff) / 65535.0f; - } else { - depthVal = (value & 0xffffff) / 16777215.0f; - } - - depthClearOps[depth->get().texture] = depthVal; - - if (format == DepthFmt::Depth24Stencil8) { - const u8 stencilVal = value >> 24; - stencilClearOps[depth->get().texture] = stencilVal; - } - - return; - } - - Helpers::warn("[RendererMTL::ClearBuffer] No buffer found!\n"); -} - -void RendererMTL::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) { - const u32 inputWidth = inputSize & 0xffff; - const u32 inputHeight = inputSize >> 16; - const auto inputFormat = ToColorFormat(Helpers::getBits<8, 3>(flags)); - const auto outputFormat = ToColorFormat(Helpers::getBits<12, 3>(flags)); - const bool verticalFlip = flags & 1; - const PICA::Scaling scaling = static_cast(Helpers::getBits<24, 2>(flags)); - - u32 outputWidth = outputSize & 0xffff; - u32 outputHeight = outputSize >> 16; - - auto srcFramebuffer = getColorRenderTarget(inputAddr, inputFormat, inputWidth, outputHeight); - nextRenderPassName = "Clear before display transfer"; - clearColor(nullptr, srcFramebuffer->texture); - Math::Rect srcRect = srcFramebuffer->getSubRect(inputAddr, outputWidth, outputHeight); - - if (verticalFlip) { - std::swap(srcRect.bottom, srcRect.top); - } - - // Apply scaling for the destination rectangle. - if (scaling == PICA::Scaling::X || scaling == PICA::Scaling::XY) { - outputWidth >>= 1; - } - - if (scaling == PICA::Scaling::XY) { - outputHeight >>= 1; - } - - auto destFramebuffer = getColorRenderTarget(outputAddr, outputFormat, outputWidth, outputHeight); - // TODO: clear if not blitting to the whole framebuffer - Math::Rect destRect = destFramebuffer->getSubRect(outputAddr, outputWidth, outputHeight); - - if (inputWidth != outputWidth) { - // Helpers::warn("Strided display transfer is not handled correctly!\n"); - } - - textureCopyImpl(*srcFramebuffer, *destFramebuffer, srcRect, destRect); -} - -void RendererMTL::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) { - // Texture copy size is aligned to 16 byte units - const u32 copySize = totalBytes & ~0xf; - if (copySize == 0) { - Helpers::warn("TextureCopy total bytes less than 16!\n"); - return; - } - - // The width and gap are provided in 16-byte units. - const u32 inputWidth = (inputSize & 0xffff) << 4; - const u32 inputGap = (inputSize >> 16) << 4; - const u32 outputWidth = (outputSize & 0xffff) << 4; - const u32 outputGap = (outputSize >> 16) << 4; - - if (inputGap != 0 || outputGap != 0) { - // Helpers::warn("Strided texture copy\n"); - } - - if (inputWidth != outputWidth) { - Helpers::warn("Input width does not match output width, cannot accelerate texture copy!"); - return; - } - - // Texture copy is a raw data copy in PICA, which means no format or tiling information is provided to the engine. - // Depending if the target surface is linear or tiled, games set inputWidth to either the width of the texture or - // the width multiplied by eight (because tiles are stored linearly in memory). - // To properly accelerate this we must examine each surface individually. For now we assume the most common case - // of tiled surface with RGBA8 format. If our assumption does not hold true, we abort the texture copy as inserting - // that surface is not correct. - - // We assume the source surface is tiled and RGBA8. inputWidth is in bytes so divide it - // by eight * sizePerPixel(RGBA8) to convert it to a useable width. - const u32 bpp = sizePerPixel(PICA::ColorFmt::RGBA8); - const u32 copyStride = (inputWidth + inputGap) / (8 * bpp); - const u32 copyWidth = inputWidth / (8 * bpp); - - // inputHeight/outputHeight are typically set to zero so they cannot be used to get the height of the copy region - // in contrast to display transfer. Compute height manually by dividing the copy size with the copy width. The result - // is the number of vertical tiles so multiply that by eight to get the actual copy height. - u32 copyHeight; - if (inputWidth != 0) [[likely]] { - copyHeight = (copySize / inputWidth) * 8; - } else { - copyHeight = 0; - } - - // Find the source surface. - auto srcFramebuffer = getColorRenderTarget(inputAddr, PICA::ColorFmt::RGBA8, copyStride, copyHeight, false); - if (!srcFramebuffer) { - doSoftwareTextureCopy(inputAddr, outputAddr, copySize, inputWidth, inputGap, outputWidth, outputGap); - return; - } - nextRenderPassName = "Clear before texture copy"; - clearColor(nullptr, srcFramebuffer->texture); - - Math::Rect srcRect = srcFramebuffer->getSubRect(inputAddr, copyWidth, copyHeight); - - // Assume the destination surface has the same format. Unless the surfaces have the same block width, - // texture copy does not make sense. - auto destFramebuffer = getColorRenderTarget(outputAddr, srcFramebuffer->format, copyWidth, copyHeight); - // TODO: clear if not blitting to the whole framebuffer - Math::Rect destRect = destFramebuffer->getSubRect(outputAddr, copyWidth, copyHeight); - - textureCopyImpl(*srcFramebuffer, *destFramebuffer, srcRect, destRect); -} - -void RendererMTL::drawVertices(PICA::PrimType primType, std::span vertices) { - // Color - auto colorRenderTarget = getColorRenderTarget(colourBufferLoc, colourBufferFormat, fbSize[0], fbSize[1]); - - // Depth stencil - const u32 depthControl = regs[PICA::InternalRegs::DepthAndColorMask]; - const bool depthStencilWrite = regs[PICA::InternalRegs::DepthBufferWrite]; - const bool depthEnable = depthControl & 0x1; - const bool depthWriteEnable = Helpers::getBit<12>(depthControl); - const u8 depthFunc = Helpers::getBits<4, 3>(depthControl); - const u8 colorMask = Helpers::getBits<8, 4>(depthControl); - - Metal::DepthStencilHash depthStencilHash; - depthStencilHash.stencilConfig = regs[PICA::InternalRegs::StencilTest]; - depthStencilHash.stencilOpConfig = regs[PICA::InternalRegs::StencilOp]; - depthStencilHash.depthStencilWrite = false; - depthStencilHash.depthFunc = 1; - const bool stencilEnable = Helpers::getBit<0>(depthStencilHash.stencilConfig); - - std::optional depthStencilRenderTarget = std::nullopt; - if (depthEnable) { - depthStencilHash.depthStencilWrite = depthWriteEnable && depthStencilWrite; - depthStencilHash.depthFunc = depthFunc; - depthStencilRenderTarget = getDepthRenderTarget(); - } else { - if (depthWriteEnable) { - depthStencilHash.depthStencilWrite = true; - depthStencilRenderTarget = getDepthRenderTarget(); - } else if (stencilEnable) { - depthStencilRenderTarget = getDepthRenderTarget(); - } - } - - // Depth uniforms - struct { - float depthScale; - float depthOffset; - bool depthMapEnable; - } depthUniforms; - depthUniforms.depthScale = Floats::f24::fromRaw(regs[PICA::InternalRegs::DepthScale] & 0xffffff).toFloat32(); - depthUniforms.depthOffset = Floats::f24::fromRaw(regs[PICA::InternalRegs::DepthOffset] & 0xffffff).toFloat32(); - depthUniforms.depthMapEnable = regs[PICA::InternalRegs::DepthmapEnable] & 1; - - // -------- Pipeline -------- - Metal::DrawPipelineHash pipelineHash; - pipelineHash.colorFmt = colorRenderTarget->format; - if (depthStencilRenderTarget) { - pipelineHash.depthFmt = depthStencilRenderTarget->format; - } else { - pipelineHash.depthFmt = DepthFmt::Unknown1; - } - pipelineHash.fragHash.lightingEnabled = regs[0x008F] & 1; - pipelineHash.fragHash.lightingNumLights = regs[0x01C2] & 0x7; - pipelineHash.fragHash.lightingConfig1 = regs[0x01C4u]; - pipelineHash.fragHash.alphaControl = regs[0x104]; - - // Blending and logic op - pipelineHash.blendEnabled = (regs[PICA::InternalRegs::ColourOperation] & (1 << 8)) != 0; - pipelineHash.colorWriteMask = colorMask; - - u8 logicOp = 3; // Copy - if (pipelineHash.blendEnabled) { - pipelineHash.blendControl = regs[PICA::InternalRegs::BlendFunc]; - } else { - logicOp = Helpers::getBits<0, 4>(regs[PICA::InternalRegs::LogicOp]); - } - - MTL::RenderPipelineState* pipeline = drawPipelineCache.get(pipelineHash); - - // Depth stencil state - MTL::DepthStencilState* depthStencilState = depthStencilCache.get(depthStencilHash); - - // -------- Render -------- - MTL::RenderPassDescriptor* renderPassDescriptor = MTL::RenderPassDescriptor::alloc()->init(); - bool doesClear = clearColor(renderPassDescriptor, colorRenderTarget->texture); - if (depthStencilRenderTarget) { - if (clearDepth(renderPassDescriptor, depthStencilRenderTarget->texture)) doesClear = true; - if (depthStencilRenderTarget->format == DepthFmt::Depth24Stencil8) { - if (clearStencil(renderPassDescriptor, depthStencilRenderTarget->texture)) doesClear = true; - } - } - - nextRenderPassName = "Draw vertices"; - beginRenderPassIfNeeded( - renderPassDescriptor, doesClear, colorRenderTarget->texture, (depthStencilRenderTarget ? depthStencilRenderTarget->texture : nullptr) - ); - - // Update the LUT texture if necessary - if (gpu.lightingLUTDirty) { - updateLightingLUT(renderCommandEncoder); - } - if (gpu.fogLUTDirty) { - updateFogLUT(renderCommandEncoder); - } - - commandEncoder.setRenderPipelineState(pipeline); - commandEncoder.setDepthStencilState(depthStencilState); - // If size is < 4KB, use inline vertex data, otherwise use a buffer - if (vertices.size_bytes() < 4 * 1024) { - renderCommandEncoder->setVertexBytes(vertices.data(), vertices.size_bytes(), VERTEX_BUFFER_BINDING_INDEX); - } else { - Metal::BufferHandle buffer = vertexBufferCache.get(vertices.data(), vertices.size_bytes()); - renderCommandEncoder->setVertexBuffer(buffer.buffer, buffer.offset, VERTEX_BUFFER_BINDING_INDEX); - } - - // Viewport - const u32 viewportX = regs[PICA::InternalRegs::ViewportXY] & 0x3ff; - const u32 viewportY = (regs[PICA::InternalRegs::ViewportXY] >> 16) & 0x3ff; - const u32 viewportWidth = Floats::f24::fromRaw(regs[PICA::InternalRegs::ViewportWidth] & 0xffffff).toFloat32() * 2.0f; - const u32 viewportHeight = Floats::f24::fromRaw(regs[PICA::InternalRegs::ViewportHeight] & 0xffffff).toFloat32() * 2.0f; - const auto rect = colorRenderTarget->getSubRect(colourBufferLoc, fbSize[0], fbSize[1]); - MTL::Viewport viewport{double(rect.left + viewportX), double(rect.bottom + viewportY), double(viewportWidth), double(viewportHeight), 0.0, 1.0}; - renderCommandEncoder->setViewport(viewport); - - // Blend color - if (pipelineHash.blendEnabled) { - u32 constantColor = regs[PICA::InternalRegs::BlendColour]; - const u8 r = constantColor & 0xff; - const u8 g = Helpers::getBits<8, 8>(constantColor); - const u8 b = Helpers::getBits<16, 8>(constantColor); - const u8 a = Helpers::getBits<24, 8>(constantColor); - - renderCommandEncoder->setBlendColor(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f); - } - - // Stencil reference - if (stencilEnable) { - const s8 reference = s8(Helpers::getBits<16, 8>(depthStencilHash.stencilConfig)); // Signed reference value - renderCommandEncoder->setStencilReferenceValue(reference); - } - - // Bind resources - setupTextureEnvState(renderCommandEncoder); - bindTexturesToSlots(); - renderCommandEncoder->setVertexBytes(®s[0x48], (0x200 - 0x48) * sizeof(regs[0]), 0); - renderCommandEncoder->setFragmentBytes(®s[0x48], (0x200 - 0x48) * sizeof(regs[0]), 0); - renderCommandEncoder->setVertexBytes(&depthUniforms, sizeof(depthUniforms), 2); - renderCommandEncoder->setFragmentBytes(&logicOp, sizeof(logicOp), 2); - u32 lutSlices[2] = {lutLightingTexture->getCurrentIndex(), lutFogTexture->getCurrentIndex()}; - renderCommandEncoder->setFragmentBytes(&lutSlices, sizeof(lutSlices), 3); - - renderCommandEncoder->drawPrimitives(toMTLPrimitiveType(primType), NS::UInteger(0), NS::UInteger(vertices.size())); -} - -void RendererMTL::screenshot(const std::string& name) { - // TODO: implement - Helpers::warn("RendererMTL::screenshot not implemented"); -} - -void RendererMTL::deinitGraphicsContext() { - reset(); - - delete lutLightingTexture; - delete lutFogTexture; - - // copyToLutTexturePipeline->release(); - displayPipeline->release(); - defaultDepthStencilState->release(); - nullTexture->release(); - linearSampler->release(); - nearestSampler->release(); - library->release(); - commandQueue->release(); - device->release(); -} - -std::optional RendererMTL::getColorRenderTarget( - u32 addr, PICA::ColorFmt format, u32 width, u32 height, bool createIfnotFound -) { - // Try to find an already existing buffer that contains the provided address - // This is a more relaxed check compared to getColourFBO as display transfer/texcopy may refer to - // subrect of a surface and in case of texcopy we don't know the format of the surface. - auto buffer = colorRenderTargetCache.findFromAddress(addr); - if (buffer.has_value()) { - return buffer.value().get(); - } - - if (!createIfnotFound) { - return std::nullopt; - } - - // Otherwise create and cache a new buffer. - Metal::ColorRenderTarget sampleBuffer(device, addr, format, width, height); - auto& colorBuffer = colorRenderTargetCache.add(sampleBuffer); - - // Clear the color buffer - colorClearOps[colorBuffer.texture] = {0, 0, 0, 0}; - return colorBuffer; -} - -Metal::DepthStencilRenderTarget& RendererMTL::getDepthRenderTarget() { - Metal::DepthStencilRenderTarget sampleBuffer(device, depthBufferLoc, depthBufferFormat, fbSize[0], fbSize[1]); - auto buffer = depthStencilRenderTargetCache.find(sampleBuffer); - - if (buffer.has_value()) { - return buffer.value().get(); - } else { - auto& depthBuffer = depthStencilRenderTargetCache.add(sampleBuffer); - - // Clear the depth buffer - depthClearOps[depthBuffer.texture] = 0.0f; - if (depthBuffer.format == DepthFmt::Depth24Stencil8) { - stencilClearOps[depthBuffer.texture] = 0; - } - - return depthBuffer; - } -} - -Metal::Texture& RendererMTL::getTexture(Metal::Texture& tex) { - auto buffer = textureCache.find(tex); - - if (buffer.has_value()) { - return buffer.value().get(); - } else { - const auto textureData = std::span{gpu.getPointerPhys(tex.location), tex.sizeInBytes()}; // Get pointer to the texture data in 3DS memory - Metal::Texture& newTex = textureCache.add(tex); - newTex.decodeTexture(textureData); - - return newTex; - } -} - -void RendererMTL::setupTextureEnvState(MTL::RenderCommandEncoder* encoder) { - static constexpr std::array ioBases = { - PICA::InternalRegs::TexEnv0Source, PICA::InternalRegs::TexEnv1Source, PICA::InternalRegs::TexEnv2Source, - PICA::InternalRegs::TexEnv3Source, PICA::InternalRegs::TexEnv4Source, PICA::InternalRegs::TexEnv5Source, - }; - - struct { - u32 textureEnvSourceRegs[6]; - u32 textureEnvOperandRegs[6]; - u32 textureEnvCombinerRegs[6]; - u32 textureEnvScaleRegs[6]; - } envState; - u32 textureEnvColourRegs[6]; - - for (int i = 0; i < 6; i++) { - const u32 ioBase = ioBases[i]; - - envState.textureEnvSourceRegs[i] = regs[ioBase]; - envState.textureEnvOperandRegs[i] = regs[ioBase + 1]; - envState.textureEnvCombinerRegs[i] = regs[ioBase + 2]; - textureEnvColourRegs[i] = regs[ioBase + 3]; - envState.textureEnvScaleRegs[i] = regs[ioBase + 4]; - } - - encoder->setVertexBytes(&textureEnvColourRegs, sizeof(textureEnvColourRegs), 1); - encoder->setFragmentBytes(&envState, sizeof(envState), 1); -} - -void RendererMTL::bindTexturesToSlots() { - static constexpr std::array ioBases = { - PICA::InternalRegs::Tex0BorderColor, - PICA::InternalRegs::Tex1BorderColor, - PICA::InternalRegs::Tex2BorderColor, - }; - - for (int i = 0; i < 3; i++) { - if ((regs[PICA::InternalRegs::TexUnitCfg] & (1 << i)) == 0) { - commandEncoder.setFragmentTexture(nullTexture, i); - commandEncoder.setFragmentSamplerState(nearestSampler, i); - continue; - } - - const size_t ioBase = ioBases[i]; - - const u32 dim = regs[ioBase + 1]; - const u32 config = regs[ioBase + 2]; - const u32 height = dim & 0x7ff; - const u32 width = Helpers::getBits<16, 11>(dim); - const u32 addr = (regs[ioBase + 4] & 0x0FFFFFFF) << 3; - u32 format = regs[ioBase + (i == 0 ? 13 : 5)] & 0xF; - - if (addr != 0) [[likely]] { - Metal::Texture targetTex(device, addr, static_cast(format), width, height, config); - - if (hashTextures) { - const u8* startPointer = gpu.getPointerPhys(targetTex.location); - const usize sizeInBytes = targetTex.sizeInBytes(); - - if (startPointer == nullptr || (sizeInBytes > 0 && gpu.getPointerPhys(targetTex.location + sizeInBytes - 1) == nullptr)) - [[unlikely]] { - Helpers::warn("Out-of-bounds texture fetch"); - } else { - targetTex.hash = PICAHash::computeHash((const char*)startPointer, sizeInBytes); - } - } - - auto tex = getTexture(targetTex); - commandEncoder.setFragmentTexture(tex.texture, i); - commandEncoder.setFragmentSamplerState(tex.sampler ? tex.sampler : nearestSampler, i); - } else { - // TODO: Bind a blank texture here. Some games, like Pokemon X, will render with a texture bound to nullptr, triggering GPU open bus - // Binding a blank texture makes all of those games look normal - } - } -} - -void RendererMTL::updateLightingLUT(MTL::RenderCommandEncoder* encoder) { - gpu.lightingLUTDirty = false; - - std::array lightingLut; - - for (int i = 0; i < gpu.lightingLUT.size(); i++) { - uint64_t value = gpu.lightingLUT[i] & 0xFFF; - lightingLut[i] = (value << 4); - } - - u32 index = lutLightingTexture->getNextIndex(); - lutLightingTexture->getTexture()->replaceRegion( - MTL::Region(0, 0, LIGHTING_LUT_TEXTURE_WIDTH, Lights::LUT_Count), 0, index, lightingLut.data(), LIGHTING_LUT_TEXTURE_WIDTH * 2, 0 - ); -} - -void RendererMTL::updateFogLUT(MTL::RenderCommandEncoder* encoder) { - gpu.fogLUTDirty = false; - - std::array fogLut = {0.0f}; - - for (int i = 0; i < fogLut.size(); i += 2) { - const uint32_t value = gpu.fogLUT[i >> 1]; - int32_t diff = value & 0x1fff; - diff = (diff << 19) >> 19; // Sign extend the 13-bit value to 32 bits - const float fogDifference = float(diff) / 2048.0f; - const float fogValue = float((value >> 13) & 0x7ff) / 2048.0f; - - fogLut[i] = fogValue; - fogLut[i + 1] = fogDifference; - } - - u32 index = lutFogTexture->getNextIndex(); - lutFogTexture->getTexture()->replaceRegion(MTL::Region(0, 0, FOG_LUT_TEXTURE_WIDTH, 1), 0, index, fogLut.data(), 0, 0); -} - -void RendererMTL::textureCopyImpl( - Metal::ColorRenderTarget& srcFramebuffer, Metal::ColorRenderTarget& destFramebuffer, const Math::Rect& srcRect, - const Math::Rect& destRect -) { - nextRenderPassName = "Texture copy"; - MTL::RenderPassDescriptor* renderPassDescriptor = MTL::RenderPassDescriptor::alloc()->init(); - // TODO: clearColor sets the load action to load if it didn't find any clear, but that is unnecessary if we are doing a copy to the whole - // texture - bool doesClear = clearColor(renderPassDescriptor, destFramebuffer.texture); - beginRenderPassIfNeeded(renderPassDescriptor, doesClear, destFramebuffer.texture); - - // Pipeline - Metal::BlitPipelineHash hash{destFramebuffer.format, DepthFmt::Unknown1}; - auto blitPipeline = blitPipelineCache.get(hash); - - commandEncoder.setRenderPipelineState(blitPipeline); - - // Viewport - renderCommandEncoder->setViewport( - MTL::Viewport{ - double(destRect.left), double(destRect.bottom), double(destRect.right - destRect.left), double(destRect.top - destRect.bottom), 0.0, 1.0 - } - ); - - float srcRectNDC[4] = { - srcRect.left / (float)srcFramebuffer.size.u(), - srcRect.bottom / (float)srcFramebuffer.size.v(), - (srcRect.right - srcRect.left) / (float)srcFramebuffer.size.u(), - (srcRect.top - srcRect.bottom) / (float)srcFramebuffer.size.v(), - }; - - // Bind resources - renderCommandEncoder->setVertexBytes(&srcRectNDC, sizeof(srcRectNDC), 0); - renderCommandEncoder->setFragmentTexture(srcFramebuffer.texture, GET_HELPER_TEXTURE_BINDING(0)); - renderCommandEncoder->setFragmentSamplerState(nearestSampler, GET_HELPER_SAMPLER_STATE_BINDING(0)); - - renderCommandEncoder->drawPrimitives(MTL::PrimitiveTypeTriangleStrip, NS::UInteger(0), NS::UInteger(4)); -} - -void RendererMTL::beginRenderPassIfNeeded( - MTL::RenderPassDescriptor* renderPassDescriptor, bool doesClears, MTL::Texture* colorTexture, MTL::Texture* depthTexture -) { - createCommandBufferIfNeeded(); - - if (doesClears || !renderCommandEncoder || colorTexture != lastColorTexture || - (depthTexture != lastDepthTexture && !(lastDepthTexture && !depthTexture))) { - endRenderPass(); - - renderCommandEncoder = commandBuffer->renderCommandEncoder(renderPassDescriptor); - renderCommandEncoder->setLabel(toNSString(nextRenderPassName)); - commandEncoder.newRenderCommandEncoder(renderCommandEncoder); - - // Bind persistent resources - - // LUT texture - renderCommandEncoder->setFragmentTexture(lutLightingTexture->getTexture(), 3); - renderCommandEncoder->setFragmentTexture(lutFogTexture->getTexture(), 4); - renderCommandEncoder->setFragmentSamplerState(linearSampler, 3); - - lastColorTexture = colorTexture; - lastDepthTexture = depthTexture; - } - - renderPassDescriptor->release(); -} diff --git a/src/core/renderer_mtl/texture_decoder.cpp b/src/core/renderer_mtl/texture_decoder.cpp deleted file mode 100644 index 06db2d76..00000000 --- a/src/core/renderer_mtl/texture_decoder.cpp +++ /dev/null @@ -1,334 +0,0 @@ -#include "renderer_mtl/texture_decoder.hpp" - -#include -#include - -#include "colour.hpp" -#include "math_util.hpp" - -using namespace Helpers; - -// u and v are the UVs of the relevant texel -// Texture data is stored interleaved in Morton order, ie in a Z - order curve as shown here -// https://en.wikipedia.org/wiki/Z-order_curve -// Textures are split into 8x8 tiles.This function returns the in - tile offset depending on the u & v of the texel -// The in - tile offset is the sum of 2 offsets, one depending on the value of u % 8 and the other on the value of y % 8 -// As documented in this picture https ://en.wikipedia.org/wiki/File:Moser%E2%80%93de_Bruijn_addition.svg -u32 mortonInterleave(u32 u, u32 v) { - static constexpr u32 xOffsets[] = {0, 1, 4, 5, 16, 17, 20, 21}; - static constexpr u32 yOffsets[] = {0, 2, 8, 10, 32, 34, 40, 42}; - - return xOffsets[u & 7] + yOffsets[v & 7]; -} - -// Get the byte offset of texel (u, v) in the texture -u32 getSwizzledOffset(u32 u, u32 v, u32 width, u32 bytesPerPixel) { - u32 offset = ((u & ~7) * 8) + ((v & ~7) * width); // Offset of the 8x8 tile the texel belongs to - offset += mortonInterleave(u, v); // Add the in-tile offset of the texel - - return offset * bytesPerPixel; -} - -// Same as the above code except we need to divide by 2 because 4 bits is smaller than a byte -u32 getSwizzledOffset_4bpp(u32 u, u32 v, u32 width) { - u32 offset = ((u & ~7) * 8) + ((v & ~7) * width); // Offset of the 8x8 tile the texel belongs to - offset += mortonInterleave(u, v); // Add the in-tile offset of the texel - - return offset / 2; -} - -void decodeTexelABGR8ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 4); - const u8 alpha = inData[offset]; - const u8 b = inData[offset + 1]; - const u8 g = inData[offset + 2]; - const u8 r = inData[offset + 3]; - - *outData++ = r; - *outData++ = g; - *outData++ = b; - *outData++ = alpha; -} - -void decodeTexelBGR8ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 3); - const u8 b = inData[offset]; - const u8 g = inData[offset + 1]; - const u8 r = inData[offset + 2]; - - *outData++ = r; - *outData++ = g; - *outData++ = b; - *outData++ = 0xff; -} - -void decodeTexelA1BGR5ToBGR5A1(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 2); - const u16 texel = u16(inData[offset]) | (u16(inData[offset + 1]) << 8); - - u8 alpha = getBit<0>(texel); - u8 b = getBits<1, 5, u8>(texel); - u8 g = getBits<6, 5, u8>(texel); - u8 r = getBits<11, 5, u8>(texel); - - u16 outTexel = (alpha << 15) | (r << 10) | (g << 5) | b; - *outData++ = outTexel & 0xff; - *outData++ = (outTexel >> 8) & 0xff; -} - -void decodeTexelA1BGR5ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 2); - const u16 texel = u16(inData[offset]) | (u16(inData[offset + 1]) << 8); - - u8 alpha = getBit<0>(texel) ? 0xff : 0; - u8 b = Colour::convert5To8Bit(getBits<1, 5, u8>(texel)); - u8 g = Colour::convert5To8Bit(getBits<6, 5, u8>(texel)); - u8 r = Colour::convert5To8Bit(getBits<11, 5, u8>(texel)); - - *outData++ = r; - *outData++ = g; - *outData++ = b; - *outData++ = alpha; -} - -void decodeTexelB5G6R5ToB5G6R5(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 2); - const u16 texel = u16(inData[offset]) | (u16(inData[offset + 1]) << 8); - - *outData++ = texel & 0xff; - *outData++ = (texel >> 8) & 0xff; -} - -void decodeTexelB5G6R5ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 2); - const u16 texel = u16(inData[offset]) | (u16(inData[offset + 1]) << 8); - - const u8 b = Colour::convert5To8Bit(getBits<0, 5, u8>(texel)); - const u8 g = Colour::convert6To8Bit(getBits<5, 6, u8>(texel)); - const u8 r = Colour::convert5To8Bit(getBits<11, 5, u8>(texel)); - - *outData++ = r; - *outData++ = g; - *outData++ = b; - *outData++ = 0xff; -} - -void decodeTexelABGR4ToABGR4(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - u32 offset = getSwizzledOffset(u, v, size.u(), 2); - u16 texel = u16(inData[offset]) | (u16(inData[offset + 1]) << 8); - - u8 alpha = getBits<0, 4, u8>(texel); - u8 b = getBits<4, 4, u8>(texel); - u8 g = getBits<8, 4, u8>(texel); - u8 r = getBits<12, 4, u8>(texel); - - *outData++ = (b << 4) | alpha; - *outData++ = (r << 4) | g; -} - -void decodeTexelABGR4ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - u32 offset = getSwizzledOffset(u, v, size.u(), 2); - u16 texel = u16(inData[offset]) | (u16(inData[offset + 1]) << 8); - - u8 alpha = Colour::convert4To8Bit(getBits<0, 4, u8>(texel)); - u8 b = Colour::convert4To8Bit(getBits<4, 4, u8>(texel)); - u8 g = Colour::convert4To8Bit(getBits<8, 4, u8>(texel)); - u8 r = Colour::convert4To8Bit(getBits<12, 4, u8>(texel)); - - *outData++ = r; - *outData++ = g; - *outData++ = b; - *outData++ = alpha; -} - -void decodeTexelAI8ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - u32 offset = getSwizzledOffset(u, v, size.u(), 2); - - // Same as I8 except each pixel gets its own alpha value too - const u8 alpha = inData[offset]; - const u8 intensity = inData[offset + 1]; - - *outData++ = intensity; - *outData++ = alpha; -} - -void decodeTexelGR8ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - u32 offset = getSwizzledOffset(u, v, size.u(), 2); - constexpr u8 b = 0; - const u8 g = inData[offset]; - const u8 r = inData[offset + 1]; - - *outData++ = r; - *outData++ = g; -} - -void decodeTexelI8ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - u32 offset = getSwizzledOffset(u, v, size.u(), 1); - const u8 intensity = inData[offset]; - - *outData++ = intensity; -} - -void decodeTexelA8ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - u32 offset = getSwizzledOffset(u, v, size.u(), 1); - const u8 alpha = inData[offset]; - - *outData++ = alpha; -} - -void decodeTexelAI4ToABGR4(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 1); - const u8 texel = inData[offset]; - const u8 alpha = texel & 0xf; - const u8 intensity = texel >> 4; - - *outData++ = (intensity << 4) | intensity; - *outData++ = (alpha << 4) | intensity; -} - -void decodeTexelAI4ToRG8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset(u, v, size.u(), 1); - const u8 texel = inData[offset]; - const u8 alpha = Colour::convert4To8Bit(texel & 0xf); - const u8 intensity = Colour::convert4To8Bit(texel >> 4); - - *outData++ = intensity; - *outData++ = alpha; -} - -void decodeTexelI4ToR8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - u32 offset = getSwizzledOffset_4bpp(u, v, size.u()); - - // For odd U coordinates, grab the top 4 bits, and the low 4 bits for even coordinates - u8 intensity = inData[offset] >> ((u % 2) ? 4 : 0); - intensity = Colour::convert4To8Bit(getBits<0, 4>(intensity)); - - *outData++ = intensity; -} - -void decodeTexelA4ToA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - const u32 offset = getSwizzledOffset_4bpp(u, v, size.u()); - - // For odd U coordinates, grab the top 4 bits, and the low 4 bits for even coordinates - u8 alpha = inData[offset] >> ((u % 2) ? 4 : 0); - alpha = Colour::convert4To8Bit(getBits<0, 4>(alpha)); - - *outData++ = alpha; -} - -static constexpr u32 signExtend3To32(u32 val) { return (u32)(s32(val) << 29 >> 29); } - -void decodeETC(u32 u, u32 v, u64 colourData, u32 alpha, u8* outData) { - static constexpr u32 modifiers[8][2] = { - {2, 8}, {5, 17}, {9, 29}, {13, 42}, {18, 60}, {24, 80}, {33, 106}, {47, 183}, - }; - - // Parse colour data for 4x4 block - const u32 subindices = getBits<0, 16, u32>(colourData); - const u32 negationFlags = getBits<16, 16, u32>(colourData); - const bool flip = getBit<32>(colourData); - const bool diffMode = getBit<33>(colourData); - - // Note: index1 is indeed stored on the higher bits, with index2 in the lower bits - const u32 tableIndex1 = getBits<37, 3, u32>(colourData); - const u32 tableIndex2 = getBits<34, 3, u32>(colourData); - const u32 texelIndex = u * 4 + v; // Index of the texel in the block - - if (flip) std::swap(u, v); - - s32 r, g, b; - if (diffMode) { - r = getBits<59, 5, s32>(colourData); - g = getBits<51, 5, s32>(colourData); - b = getBits<43, 5, s32>(colourData); - - if (u >= 2) { - r += signExtend3To32(getBits<56, 3, u32>(colourData)); - g += signExtend3To32(getBits<48, 3, u32>(colourData)); - b += signExtend3To32(getBits<40, 3, u32>(colourData)); - } - - // Expand from 5 to 8 bits per channel - r = Colour::convert5To8Bit(r); - g = Colour::convert5To8Bit(g); - b = Colour::convert5To8Bit(b); - } else { - if (u < 2) { - r = getBits<60, 4, s32>(colourData); - g = getBits<52, 4, s32>(colourData); - b = getBits<44, 4, s32>(colourData); - } else { - r = getBits<56, 4, s32>(colourData); - g = getBits<48, 4, s32>(colourData); - b = getBits<40, 4, s32>(colourData); - } - - // Expand from 4 to 8 bits per channel - r = Colour::convert4To8Bit(r); - g = Colour::convert4To8Bit(g); - b = Colour::convert4To8Bit(b); - } - - const u32 index = (u < 2) ? tableIndex1 : tableIndex2; - s32 modifier = modifiers[index][(subindices >> texelIndex) & 1]; - - if (((negationFlags >> texelIndex) & 1) != 0) { - modifier = -modifier; - } - - r = std::clamp(r + modifier, 0, 255); - g = std::clamp(g + modifier, 0, 255); - b = std::clamp(b + modifier, 0, 255); - - *outData++ = r; - *outData++ = g; - *outData++ = b; - *outData++ = alpha; -} - -template -void getTexelETC(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - // Pixel offset of the 8x8 tile based on u, v and the width of the texture - u32 offs = ((u & ~7) * 8) + ((v & ~7) * size.u()); - if (!hasAlpha) { - offs >>= 1; - } - - // In-tile offsets for u/v - u &= 7; - v &= 7; - - // ETC1(A4) also subdivide the 8x8 tile to 4 4x4 tiles - // Each tile is 8 bytes for ETC1, but since ETC1A4 has 4 alpha bits per pixel, that becomes 16 bytes - const u32 subTileSize = hasAlpha ? 16 : 8; - const u32 subTileIndex = (u / 4) + 2 * (v / 4); // Which of the 4 subtiles is this texel in? - - // In-subtile offsets for u/v - u &= 3; - v &= 3; - offs += subTileSize * subTileIndex; - - u32 alpha; - const u64* ptr = reinterpret_cast(inData.data() + offs); // Cast to u64* - - if (hasAlpha) { - // First 64 bits of the 4x4 subtile are alpha data - const u64 alphaData = *ptr++; - alpha = Colour::convert4To8Bit((alphaData >> (4 * (u * 4 + v))) & 0xf); - } else { - alpha = 0xff; // ETC1 without alpha uses ff for every pixel - } - - // Next 64 bits of the subtile are colour data - u64 colourData = *ptr; - - decodeETC(u, v, colourData, alpha, outData); -} - -void decodeTexelETC1ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - getTexelETC(size, u, v, inData, outData); -} - -void decodeTexelETC1A4ToRGBA8(OpenGL::uvec2 size, u32 u, u32 v, std::span inData, u8* outData) { - getTexelETC(size, u, v, inData, outData); -} diff --git a/src/core/renderer_null/renderer_null.cpp b/src/core/renderer_null/renderer_null.cpp index 4db2696f..b2ebd1d6 100644 --- a/src/core/renderer_null/renderer_null.cpp +++ b/src/core/renderer_null/renderer_null.cpp @@ -6,10 +6,9 @@ RendererNull::~RendererNull() {} void RendererNull::reset() {} void RendererNull::display() {} -void RendererNull::initGraphicsContext(void* context) {} +void RendererNull::initGraphicsContext(SDL_Window* window) {} void RendererNull::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {} void RendererNull::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) {} void RendererNull::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) {} void RendererNull::drawVertices(PICA::PrimType primType, std::span vertices) {} void RendererNull::screenshot(const std::string& name) {} -void RendererNull::deinitGraphicsContext() {} \ No newline at end of file diff --git a/src/core/renderer_sw/renderer_sw.cpp b/src/core/renderer_sw/renderer_sw.cpp index a117e373..b671c180 100644 --- a/src/core/renderer_sw/renderer_sw.cpp +++ b/src/core/renderer_sw/renderer_sw.cpp @@ -7,7 +7,7 @@ RendererSw::~RendererSw() {} void RendererSw::reset() { printf("RendererSW: Unimplemented reset call\n"); } void RendererSw::display() { printf("RendererSW: Unimplemented display call\n"); } -void RendererSw::initGraphicsContext(void* context) { printf("RendererSW: Unimplemented initGraphicsContext call\n"); } +void RendererSw::initGraphicsContext(SDL_Window* window) { printf("RendererSW: Unimplemented initGraphicsContext call\n"); } void RendererSw::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) { printf("RendererSW: Unimplemented clearBuffer call\n"); } void RendererSw::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) { @@ -23,4 +23,3 @@ void RendererSw::drawVertices(PICA::PrimType primType, std::span createGraphicsPipeline( vk::PipelineDynamicStateCreateInfo dynamicState = {}; static vk::DynamicState dynamicStates[] = {// The viewport and scissor of the framebuffer will be dynamic at // run-time - vk::DynamicState::eViewport, vk::DynamicState::eScissor - }; + vk::DynamicState::eViewport, vk::DynamicState::eScissor}; dynamicState.dynamicStateCount = std::size(dynamicStates); dynamicState.pDynamicStates = dynamicStates; @@ -470,8 +469,7 @@ vk::RenderPass RendererVK::getRenderPass(vk::Format colorFormat, std::optional= 301 -using VulkanDynamicLoader = vk::detail::DynamicLoader; -#else -using VulkanDynamicLoader = vk::DynamicLoader; -#endif - -void RendererVK::initGraphicsContext(void* windowPointer) { - targetWindow = (SDL_Window*)windowPointer; +void RendererVK::initGraphicsContext(SDL_Window* window) { + targetWindow = window; // Resolve all instance function pointers - static VulkanDynamicLoader dl; + static vk::DynamicLoader dl; VULKAN_HPP_DEFAULT_DISPATCHER.init(dl.getProcAddress("vkGetInstanceProcAddr")); // Create Instance @@ -980,8 +971,8 @@ void RendererVK::initGraphicsContext(void* windowPointer) { } // Create surface - if (targetWindow) { - if (VkSurfaceKHR newSurface; SDL_Vulkan_CreateSurface(targetWindow, instance.get(), &newSurface)) { + if (window) { + if (VkSurfaceKHR newSurface; SDL_Vulkan_CreateSurface(window, instance.get(), &newSurface)) { swapchainSurface = newSurface; } else { Helpers::warn("Error creating Vulkan surface"); @@ -1129,7 +1120,7 @@ void RendererVK::initGraphicsContext(void* windowPointer) { vk::Extent2D swapchainExtent; { int windowWidth, windowHeight; - SDL_Vulkan_GetDrawableSize(targetWindow, &windowWidth, &windowHeight); + SDL_Vulkan_GetDrawableSize(window, &windowWidth, &windowHeight); swapchainExtent.width = windowWidth; swapchainExtent.height = windowHeight; } @@ -1277,8 +1268,7 @@ void RendererVK::initGraphicsContext(void* windowPointer) { static vk::DescriptorSetLayoutBinding displayShaderLayout[] = { {// Just a singular texture slot - 0, vk::DescriptorType::eCombinedImageSampler, 1, vk::ShaderStageFlagBits::eFragment - }, + 0, vk::DescriptorType::eCombinedImageSampler, 1, vk::ShaderStageFlagBits::eFragment}, }; if (auto createResult = Vulkan::DescriptorUpdateBatch::create(device.get()); createResult.has_value()) { @@ -1410,8 +1400,7 @@ void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 co static vk::ImageSubresourceRange depthStencilRanges[2] = { vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1), - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1) - }; + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1)}; // Clear RenderTarget getCurrentCommandBuffer().clearDepthStencilImage( @@ -1592,11 +1581,3 @@ void RendererVK::drawVertices(PICA::PrimType primType, std::span -#include -#include - -using namespace ScreenLayout; - -// Calculate screen coordinates on the screen for a given layout & a given size for the output window -// Used in both the renderers and in the frontends (To eg calculate touch screen boundaries) -void ScreenLayout::calculateCoordinates( - WindowCoordinates& coordinates, u32 outputWindowWidth, u32 outputWindowHeight, float topScreenPercentage, Layout layout -) { - if (layout == Layout::Default || layout == Layout::DefaultFlipped) { - // Calculate available height for each screen based on split - int availableTopHeight = int(outputWindowHeight * topScreenPercentage + 0.5f); - int availableBottomHeight = outputWindowHeight - availableTopHeight; - - // Calculate scales for top and bottom screens, and then the actual sizes - float scaleTop = std::min(float(outputWindowWidth) / float(TOP_SCREEN_WIDTH), float(availableTopHeight) / float(TOP_SCREEN_HEIGHT)); - float scaleBottom = - std::min(float(outputWindowWidth) / float(BOTTOM_SCREEN_WIDTH), float(availableBottomHeight) / float(BOTTOM_SCREEN_HEIGHT)); - - int topScreenWidth = int(TOP_SCREEN_WIDTH * scaleTop + 0.5f); - int topScreenHeight = int(TOP_SCREEN_HEIGHT * scaleTop + 0.5f); - int bottomScreenWidth = int(BOTTOM_SCREEN_WIDTH * scaleBottom + 0.5f); - int bottomScreenHeight = int(BOTTOM_SCREEN_HEIGHT * scaleBottom + 0.5f); - - // Center screens horizontally - int topScreenX = (outputWindowWidth - topScreenWidth) / 2; - int bottomScreenX = (outputWindowWidth - bottomScreenWidth) / 2; - - coordinates.topScreenWidth = topScreenWidth; - coordinates.topScreenHeight = topScreenHeight; - coordinates.bottomScreenWidth = bottomScreenWidth; - coordinates.bottomScreenHeight = bottomScreenHeight; - - coordinates.topScreenX = topScreenX; - coordinates.bottomScreenX = bottomScreenX; - - if (layout == Layout::Default) { - coordinates.topScreenY = 0; - coordinates.bottomScreenY = topScreenHeight; - } else { - coordinates.bottomScreenY = 0; - coordinates.topScreenY = bottomScreenHeight; - } - - coordinates.windowWidth = outputWindowWidth; - coordinates.windowHeight = outputWindowHeight; - - // Default layout can be rendered using a single blit, flipped layout can't - if (layout == Layout::Default) { - coordinates.singleBlitInfo.destX = coordinates.topScreenX; - coordinates.singleBlitInfo.destY = coordinates.topScreenY; - coordinates.singleBlitInfo.destWidth = coordinates.topScreenWidth; - coordinates.singleBlitInfo.destHeight = coordinates.topScreenHeight + coordinates.bottomScreenHeight; - } else { - // Dummy data for the single blit info, as we can't render the screen in 1 blit when the screens are side-by-sid - coordinates.singleBlitInfo.destX = 0; - coordinates.singleBlitInfo.destY = 0; - coordinates.singleBlitInfo.destWidth = 0; - coordinates.singleBlitInfo.destHeight = 0; - } - - // Check if we can blit the screens in 1 blit. If not, we'll break it into two. - // TODO: Maybe add some more size-related checks too. - coordinates.singleBlitInfo.canDoSingleBlit = layout == Layout::Default && topScreenPercentage == 0.5 && - coordinates.topScreenY + coordinates.topScreenHeight == coordinates.bottomScreenY; - } else if (layout == Layout::SideBySide || layout == Layout::SideBySideFlipped) { - // Calculate available width for each screen based on split - int availableTopWidth = int(outputWindowWidth * topScreenPercentage + 0.5f); - int availableBottomWidth = outputWindowWidth - availableTopWidth; - - // Calculate scales for top and bottom screens, and then the actual sizes - float scaleTop = std::min(float(availableTopWidth) / float(TOP_SCREEN_WIDTH), float(outputWindowHeight) / float(TOP_SCREEN_HEIGHT)); - float scaleBottom = - std::min(float(availableBottomWidth) / float(BOTTOM_SCREEN_WIDTH), float(outputWindowHeight) / float(BOTTOM_SCREEN_HEIGHT)); - - int topScreenWidth = int(TOP_SCREEN_WIDTH * scaleTop + 0.5f); - int topScreenHeight = int(TOP_SCREEN_HEIGHT * scaleTop + 0.5f); - int bottomScreenWidth = int(BOTTOM_SCREEN_WIDTH * scaleBottom + 0.5f); - int bottomScreenHeight = int(BOTTOM_SCREEN_HEIGHT * scaleBottom + 0.5f); - - // Vertically center the tallest screen - int maxHeight = std::max(topScreenHeight, bottomScreenHeight); - int centerY = (outputWindowHeight - maxHeight) / 2; - - int topScreenY = centerY + (maxHeight - topScreenHeight) / 2; - int bottomScreenY = centerY + (maxHeight - bottomScreenHeight) / 2; - - if (layout == Layout::SideBySide) { - coordinates.topScreenX = (outputWindowWidth - (topScreenWidth + bottomScreenWidth)) / 2; - coordinates.bottomScreenX = coordinates.topScreenX + topScreenWidth; - } else { - coordinates.bottomScreenX = (outputWindowWidth - (topScreenWidth + bottomScreenWidth)) / 2; - coordinates.topScreenX = coordinates.bottomScreenX + bottomScreenWidth; - } - - coordinates.topScreenY = topScreenY; - coordinates.topScreenWidth = topScreenWidth; - coordinates.topScreenHeight = topScreenHeight; - - coordinates.bottomScreenY = bottomScreenY; - coordinates.bottomScreenWidth = bottomScreenWidth; - coordinates.bottomScreenHeight = bottomScreenHeight; - - coordinates.windowWidth = outputWindowWidth; - coordinates.windowHeight = outputWindowHeight; - - // Dummy data for the single blit info, as we can't render the screen in 1 blit when the screens are side-by-side - coordinates.singleBlitInfo.canDoSingleBlit = false; - coordinates.singleBlitInfo.destX = 0; - coordinates.singleBlitInfo.destY = 0; - coordinates.singleBlitInfo.destWidth = 0; - coordinates.singleBlitInfo.destHeight = 0; - } else { - Helpers::panic("Unimplemented screen layout"); - } -} - -Layout ScreenLayout::layoutFromString(std::string inString) { - // Transform to lower-case to make the setting case-insensitive - std::transform(inString.begin(), inString.end(), inString.begin(), [](unsigned char c) { return std::tolower(c); }); - - static const std::unordered_map map = { - {"default", Layout::Default}, - {"defaultflipped", Layout::DefaultFlipped}, - {"sidebyside", Layout::SideBySide}, - {"sidebysideflipped", Layout::SideBySideFlipped}, - }; - - if (auto search = map.find(inString); search != map.end()) { - return search->second; - } - - printf("Invalid screen layout. Defaulting to Default\n"); - return Layout::Default; -} - -const char* ScreenLayout::layoutToString(Layout layout) { - switch (layout) { - case Layout::Default: return "default"; - case Layout::DefaultFlipped: return "defaultFlipped"; - case Layout::SideBySide: return "sideBySide"; - case Layout::SideBySideFlipped: return "sideBySideFlipped"; - default: return "invalid"; - } -} diff --git a/src/core/services/ac.cpp b/src/core/services/ac.cpp index f3cb5e83..25efdce6 100644 --- a/src/core/services/ac.cpp +++ b/src/core/services/ac.cpp @@ -1,5 +1,4 @@ #include "services/ac.hpp" - #include "ipc.hpp" namespace ACCommands { @@ -8,10 +7,6 @@ namespace ACCommands { CancelConnectAsync = 0x00070002, CloseAsync = 0x00080004, GetLastErrorCode = 0x000A0000, - GetStatus = 0x000C0000, - GetWifiStatus = 0x000D0000, - GetConnectingInfraPriority = 0x000F0000, - GetNZoneBeaconNotFoundEvent = 0x002F0004, RegisterDisconnectEvent = 0x00300004, IsConnected = 0x003E0042, SetClientVersion = 0x00400042, @@ -29,19 +24,11 @@ void ACService::handleSyncRequest(u32 messagePointer) { case ACCommands::CancelConnectAsync: cancelConnectAsync(messagePointer); break; case ACCommands::CloseAsync: closeAsync(messagePointer); break; case ACCommands::CreateDefaultConfig: createDefaultConfig(messagePointer); break; - case ACCommands::GetConnectingInfraPriority: getConnectingInfraPriority(messagePointer); break; case ACCommands::GetLastErrorCode: getLastErrorCode(messagePointer); break; - case ACCommands::GetNZoneBeaconNotFoundEvent: getNZoneBeaconNotFoundEvent(messagePointer); break; - case ACCommands::GetStatus: getStatus(messagePointer); break; - case ACCommands::GetWifiStatus: getWifiStatus(messagePointer); break; case ACCommands::IsConnected: isConnected(messagePointer); break; case ACCommands::RegisterDisconnectEvent: registerDisconnectEvent(messagePointer); break; case ACCommands::SetClientVersion: setClientVersion(messagePointer); break; - - default: - mem.write32(messagePointer + 4, Result::Success); - Helpers::warn("AC service requested. Command: %08X\n", command); - break; + default: Helpers::panic("AC service requested. Command: %08X\n", command); } } @@ -79,40 +66,7 @@ void ACService::getLastErrorCode(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x0A, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // Hopefully this means no error? -} - -void ACService::getConnectingInfraPriority(u32 messagePointer) { - log("AC::GetConnectingInfraPriority (stubbed)\n"); - - // TODO: Find out what this is - mem.write32(messagePointer, IPC::responseHeader(0x0F, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); -} - -void ACService::getStatus(u32 messagePointer) { - log("AC::GetStatus (stubbed)\n"); - - // TODO: Find out what this is - mem.write32(messagePointer, IPC::responseHeader(0x0C, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); -} - -void ACService::getWifiStatus(u32 messagePointer) { - log("AC::GetWifiStatus (stubbed)\n"); - - enum class WifiStatus : u32 { - None = 0, - Slot1 = 1, - Slot2 = 2, - Slot3 = 4, - }; - - mem.write32(messagePointer, IPC::responseHeader(0x0D, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, static_cast(WifiStatus::None)); + mem.write32(messagePointer + 8, 0); // Hopefully this means no error? } void ACService::isConnected(u32 messagePointer) { @@ -143,13 +97,4 @@ void ACService::registerDisconnectEvent(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x30, 1, 0)); mem.write32(messagePointer + 4, Result::Success); -} - -void ACService::getNZoneBeaconNotFoundEvent(u32 messagePointer) { - const u32 processID = mem.read32(messagePointer + 8); - const Handle event = mem.read32(messagePointer + 16); - log("AC::GetNZoneBeaconNotFoundEvent (process ID = %X, event = %X) (stubbed)\n", processID, event); - - mem.write32(messagePointer, IPC::responseHeader(0x2F, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/act.cpp b/src/core/services/act.cpp index 59421d7d..1434b59b 100644 --- a/src/core/services/act.cpp +++ b/src/core/services/act.cpp @@ -1,5 +1,4 @@ #include "services/act.hpp" - #include "ipc.hpp" namespace ACTCommands { @@ -34,7 +33,7 @@ void ACTService::initialize(u32 messagePointer) { void ACTService::generateUUID(u32 messagePointer) { log("ACT::GenerateUUID (stubbed)\n"); - + // TODO: The header is probably wrong mem.write32(messagePointer, IPC::responseHeader(0xD, 1, 0)); mem.write32(messagePointer + 4, Result::Success); diff --git a/src/core/services/am.cpp b/src/core/services/am.cpp index 507532b7..32e6a0b3 100644 --- a/src/core/services/am.cpp +++ b/src/core/services/am.cpp @@ -1,5 +1,4 @@ #include "services/am.hpp" - #include "ipc.hpp" namespace AMCommands { @@ -23,19 +22,19 @@ void AMService::handleSyncRequest(u32 messagePointer) { } void AMService::listTitleInfo(u32 messagePointer) { - log("AM::ListDLCOrLicenseTicketInfos\n"); // Yes this is the actual name + log("AM::ListDLCOrLicenseTicketInfos\n"); // Yes this is the actual name u32 ticketCount = mem.read32(messagePointer + 4); u64 titleID = mem.read64(messagePointer + 8); u32 pointer = mem.read32(messagePointer + 24); for (u32 i = 0; i < ticketCount; i++) { - mem.write64(pointer, titleID); // Title ID - mem.write64(pointer + 8, 0); // Ticket ID - mem.write16(pointer + 16, 0); // Version - mem.write16(pointer + 18, 0); // Padding - mem.write32(pointer + 20, 0); // Size + mem.write64(pointer, titleID); // Title ID + mem.write64(pointer + 8, 0); // Ticket ID + mem.write16(pointer + 16, 0); // Version + mem.write16(pointer + 18, 0); // Padding + mem.write32(pointer + 20, 0); // Size - pointer += 24; // = sizeof(TicketInfo) + pointer += 24; // = sizeof(TicketInfo) } mem.write32(messagePointer, IPC::responseHeader(0x1007, 2, 2)); diff --git a/src/core/services/amiibo_device.cpp b/src/core/services/amiibo_device.cpp deleted file mode 100644 index 3dc90c5f..00000000 --- a/src/core/services/amiibo_device.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "services/amiibo_device.hpp" - -void AmiiboDevice::reset() { - encrypted = false; - loaded = false; -} - -// Load amiibo information from our raw 540 byte array -void AmiiboDevice::loadFromRaw() {} \ No newline at end of file diff --git a/src/core/services/apt.cpp b/src/core/services/apt.cpp index dbcfb957..78ec80bc 100644 --- a/src/core/services/apt.cpp +++ b/src/core/services/apt.cpp @@ -1,11 +1,9 @@ #include "services/apt.hpp" - -#include -#include - #include "ipc.hpp" #include "kernel.hpp" +#include + namespace APTCommands { enum : u32 { GetLockHandle = 0x00010040, @@ -34,9 +32,34 @@ namespace APTCommands { }; } +// https://www.3dbrew.org/wiki/NS_and_APT_Services#Command +namespace APTTransitions { + enum : u32 { + None = 0, + Wakeup = 1, + Request = 2, + Response = 3, + Exit = 4, + Message = 5, + HomeButtonSingle = 6, + HomeButtonDouble = 7, + DSPSleep = 8, + DSPWakeup = 9, + WakeupByExit = 10, + WakuepByPause = 11, + WakeupByCancel = 12, + WakeupByCancelAll = 13, + WakeupByPowerButton = 14, + WakeupToJumpHome = 15, + RequestForApplet = 16, + WakeupToLaunchApp = 17, + ProcessDed = 0x41 + }; +} + void APTService::reset() { - // Set the default CPU time limit to 0%. Appears to be the default value on hardware - cpuTimeLimit = 0; + // Set the default CPU time limit to 30%. Seems safe, as this is what Metroid 2 uses by default + cpuTimeLimit = 30; // Reset the handles for the various service objects lockHandle = std::nullopt; @@ -65,7 +88,6 @@ void APTService::handleSyncRequest(u32 messagePointer) { case APTCommands::NotifyToWait: notifyToWait(messagePointer); break; case APTCommands::PreloadLibraryApplet: preloadLibraryApplet(messagePointer); break; case APTCommands::PrepareToStartLibraryApplet: prepareToStartLibraryApplet(messagePointer); break; - case APTCommands::StartLibraryApplet: startLibraryApplet(messagePointer); break; case APTCommands::ReceiveParameter: [[likely]] receiveParameter(messagePointer); break; case APTCommands::ReplySleepQuery: replySleepQuery(messagePointer); break; case APTCommands::SetApplicationCpuTimeLimit: setApplicationCpuTimeLimit(messagePointer); break; @@ -85,7 +107,8 @@ void APTService::appletUtility(u32 messagePointer) { u32 outputSize = mem.read32(messagePointer + 12); u32 inputPointer = mem.read32(messagePointer + 20); - log("APT::AppletUtility(utility = %d, input size = %x, output size = %x, inputPointer = %08X)\n", utility, inputSize, outputSize, inputPointer); + log("APT::AppletUtility(utility = %d, input size = %x, output size = %x, inputPointer = %08X) (Stubbed)\n", utility, inputSize, outputSize, + inputPointer); std::vector out(outputSize); const u32 outputBuffer = mem.read32(messagePointer + 0x104); @@ -111,9 +134,8 @@ void APTService::getAppletInfo(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x06, 7, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 20, 1); // 1 = registered - mem.write8(messagePointer + 24, 1); // 1 = loaded - + mem.write8(messagePointer + 20, 1); // 1 = registered + mem.write8(messagePointer + 24, 1); // 1 = loaded // TODO: The rest of this } @@ -123,7 +145,7 @@ void APTService::isRegistered(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x09, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, 1); // Return that the app is always registered. This might break with home menu? + mem.write8(messagePointer + 8, 1); // Return that the app is always registered. This might break with home menu? } void APTService::preloadLibraryApplet(u32 messagePointer) { @@ -142,44 +164,11 @@ void APTService::prepareToStartLibraryApplet(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void APTService::startLibraryApplet(u32 messagePointer) { - const u32 appID = mem.read32(messagePointer + 4); - const u32 bufferSize = mem.read32(messagePointer + 8); - const Handle parameters = mem.read32(messagePointer + 16); - const u32 buffer = mem.read32(messagePointer + 24); - log("APT::StartLibraryApplet (app ID = %X)\n", appID); - - Applets::AppletBase* destApplet = appletManager.getApplet(appID); - if (destApplet == nullptr) { - Helpers::warn("APT::StartLibraryApplet: Unimplemented dest applet ID"); - mem.write32(messagePointer, IPC::responseHeader(0x1E, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); - } else { - KernelObject* sharedMemObject = kernel.getObject(parameters); - - const MemoryBlock* sharedMem = sharedMemObject ? sharedMemObject->getData() : nullptr; - std::vector data; - data.reserve(bufferSize); - - for (u32 i = 0; i < bufferSize; i++) { - data.push_back(mem.read8(buffer + i)); - } - - Result::HorizonResult result = destApplet->start(sharedMem, data, appID); - if (resumeEvent.has_value()) { - kernel.signalEvent(resumeEvent.value()); - } - - mem.write32(messagePointer, IPC::responseHeader(0x1E, 1, 0)); - mem.write32(messagePointer + 4, result); - } -} - void APTService::checkNew3DS(u32 messagePointer) { log("APT::CheckNew3DS\n"); mem.write32(messagePointer, IPC::responseHeader(0x102, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, (model == ConsoleModel::New3DS) ? 1 : 0); // u8, Status (0 = Old 3DS, 1 = New 3DS) + mem.write8(messagePointer + 8, (model == ConsoleModel::New3DS) ? 1 : 0); // u8, Status (0 = Old 3DS, 1 = New 3DS) } // TODO: Figure out the slight way this differs from APT::CheckNew3DS @@ -187,18 +176,13 @@ void APTService::checkNew3DSApp(u32 messagePointer) { log("APT::CheckNew3DSApp\n"); mem.write32(messagePointer, IPC::responseHeader(0x101, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, (model == ConsoleModel::New3DS) ? 1 : 0); // u8, Status (0 = Old 3DS, 1 = New 3DS) + mem.write8(messagePointer + 8, (model == ConsoleModel::New3DS) ? 1 : 0); // u8, Status (0 = Old 3DS, 1 = New 3DS) } void APTService::enable(u32 messagePointer) { log("APT::Enable\n"); mem.write32(messagePointer, IPC::responseHeader(0x3, 1, 0)); mem.write32(messagePointer + 4, Result::Success); - - // Some apps like Home Menu and Game Notes seem to rely on resume event being triggered here. Doesn't seem to break anything, so - if (resumeEvent.has_value()) { - kernel.signalEvent(resumeEvent.value()); - } } void APTService::initialize(u32 messagePointer) { @@ -208,18 +192,18 @@ void APTService::initialize(u32 messagePointer) { notificationEvent = kernel.makeEvent(ResetType::OneShot); resumeEvent = kernel.makeEvent(ResetType::OneShot); - kernel.signalEvent(resumeEvent.value()); // Seems to be signalled on startup + kernel.signalEvent(resumeEvent.value()); // Seems to be signalled on startup } mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 3)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0x04000000); // Translation descriptor - mem.write32(messagePointer + 12, notificationEvent.value()); // Notification Event Handle - mem.write32(messagePointer + 16, resumeEvent.value()); // Resume Event Handle + mem.write32(messagePointer + 8, 0x04000000); // Translation descriptor + mem.write32(messagePointer + 12, notificationEvent.value()); // Notification Event Handle + mem.write32(messagePointer + 16, resumeEvent.value()); // Resume Event Handle } void APTService::inquireNotification(u32 messagePointer) { - log("APT::InquireNotification\n"); + log("APT::InquireNotification (STUBBED TO RETURN NONE)\n"); mem.write32(messagePointer, IPC::responseHeader(0xB, 2, 0)); mem.write32(messagePointer + 4, Result::Success); @@ -235,11 +219,11 @@ void APTService::getLockHandle(u32 messagePointer) { } mem.write32(messagePointer, IPC::responseHeader(0x1, 3, 2)); - mem.write32(messagePointer + 4, Result::Success); // Result code - mem.write32(messagePointer + 8, 0); // AppletAttr - mem.write32(messagePointer + 12, 0); // APT State (bit0 = Power Button State, bit1 = Order To Close State) - mem.write32(messagePointer + 16, 0); // Translation descriptor - mem.write32(messagePointer + 20, lockHandle.value()); // Lock handle + mem.write32(messagePointer + 4, Result::Success); // Result code + mem.write32(messagePointer + 8, 0); // AppletAttr + mem.write32(messagePointer + 12, 0); // APT State (bit0 = Power Button State, bit1 = Order To Close State) + mem.write32(messagePointer + 16, 0); // Translation descriptor + mem.write32(messagePointer + 20, lockHandle.value()); // Lock handle } // This apparently does nothing on the original kernel either? @@ -255,9 +239,9 @@ void APTService::sendParameter(u32 messagePointer) { const u32 cmd = mem.read32(messagePointer + 12); const u32 paramSize = mem.read32(messagePointer + 16); - const u32 parameterHandle = mem.read32(messagePointer + 24); // What dis? + const u32 parameterHandle = mem.read32(messagePointer + 24); // What dis? const u32 parameterPointer = mem.read32(messagePointer + 32); - log("APT::SendParameter (source app = %X, dest app = %X, cmd = %X, size = %X)", sourceAppID, destAppID, cmd, paramSize); + log("APT::SendParameter (source app = %X, dest app = %X, cmd = %X, size = %X) (Stubbed)", sourceAppID, destAppID, cmd, paramSize); mem.write32(messagePointer, IPC::responseHeader(0x0C, 1, 0)); mem.write32(messagePointer + 4, Result::Success); @@ -270,21 +254,7 @@ void APTService::sendParameter(u32 messagePointer) { if (destApplet == nullptr) { Helpers::warn("APT::SendParameter: Unimplemented dest applet ID"); } else { - // Construct parameter, send it to applet - Applets::Parameter param; - param.senderID = sourceAppID; - param.destID = destAppID; - param.signal = cmd; - - // Fetch parameter data buffer - param.data.reserve(paramSize); - u32 pointer = parameterPointer; - - for (u32 i = 0; i < paramSize; i++) { - param.data.push_back(mem.read8(pointer++)); - } - - auto result = destApplet->receiveParameter(param); + auto result = destApplet->receiveParameter(); } if (resumeEvent.has_value()) { @@ -295,62 +265,37 @@ void APTService::sendParameter(u32 messagePointer) { void APTService::receiveParameter(u32 messagePointer) { const u32 app = mem.read32(messagePointer + 4); const u32 size = mem.read32(messagePointer + 8); - // Parameter data pointer is in the thread static buffer, which starts 0x100 bytes after the command buffer - const u32 buffer = mem.read32(messagePointer + 0x100 + 4); - log("APT::ReceiveParameter(app ID = %X, size = %04X)\n", app, size); + log("APT::ReceiveParameter(app ID = %X, size = %04X) (STUBBED)\n", app, size); - if (size > 0x1000) { - Helpers::panic("APT::ReceiveParameter with size > 0x1000"); - } - auto parameter = appletManager.receiveParameter(); + if (size > 0x1000) Helpers::panic("APT::ReceiveParameter with size > 0x1000"); + // TODO: Properly implement this. We currently stub somewhat like 3dmoo mem.write32(messagePointer, IPC::responseHeader(0xD, 4, 4)); mem.write32(messagePointer + 4, Result::Success); - // Sender App ID - mem.write32(messagePointer + 8, parameter.senderID); - // Command - mem.write32(messagePointer + 12, parameter.signal); - // Size of parameter data - mem.write32(messagePointer + 16, parameter.data.size()); + mem.write32(messagePointer + 8, 0); // Sender App ID + mem.write32(messagePointer + 12, APTTransitions::Wakeup); // Command + mem.write32(messagePointer + 16, 0); mem.write32(messagePointer + 20, 0x10); - mem.write32(messagePointer + 24, parameter.object); + mem.write32(messagePointer + 24, 0); mem.write32(messagePointer + 28, 0); - - const u32 transferSize = std::min(size, parameter.data.size()); - for (u32 i = 0; i < transferSize; i++) { - mem.write8(buffer + i, parameter.data[i]); - } } void APTService::glanceParameter(u32 messagePointer) { const u32 app = mem.read32(messagePointer + 4); const u32 size = mem.read32(messagePointer + 8); - // Parameter data pointer is in the thread static buffer, which starts 0x100 bytes after the command buffer - const u32 buffer = mem.read32(messagePointer + 0x100 + 4); - log("APT::GlanceParameter(app ID = %X, size = %04X)\n", app, size); + log("APT::GlanceParameter(app ID = %X, size = %04X) (STUBBED)\n", app, size); - if (size > 0x1000) { - Helpers::panic("APT::GlanceParameter with size > 0x1000"); - } - auto parameter = appletManager.glanceParameter(); + if (size > 0x1000) Helpers::panic("APT::GlanceParameter with size > 0x1000"); // TODO: Properly implement this. We currently stub it similar mem.write32(messagePointer, IPC::responseHeader(0xE, 4, 4)); mem.write32(messagePointer + 4, Result::Success); - // Sender App ID - mem.write32(messagePointer + 8, parameter.senderID); - // Command - mem.write32(messagePointer + 12, parameter.signal); - // Size of parameter data - mem.write32(messagePointer + 16, parameter.data.size()); + mem.write32(messagePointer + 8, 0); // Sender App ID + mem.write32(messagePointer + 12, APTTransitions::Wakeup); // Command + mem.write32(messagePointer + 16, 0); mem.write32(messagePointer + 20, 0); - mem.write32(messagePointer + 24, parameter.object); + mem.write32(messagePointer + 24, 0); mem.write32(messagePointer + 28, 0); - - const u32 transferSize = std::min(size, parameter.data.size()); - for (u32 i = 0; i < transferSize; i++) { - mem.write8(buffer + i, parameter.data[i]); - } } void APTService::replySleepQuery(u32 messagePointer) { @@ -360,17 +305,14 @@ void APTService::replySleepQuery(u32 messagePointer) { } void APTService::setApplicationCpuTimeLimit(u32 messagePointer) { - u32 fixed = mem.read32(messagePointer + 4); // MUST be 1. - u32 percentage = mem.read32(messagePointer + 8); // CPU time percentage between 5% and 89% + u32 fixed = mem.read32(messagePointer + 4); // MUST be 1. + u32 percentage = mem.read32(messagePointer + 8); // CPU time percentage between 5% and 89% log("APT::SetApplicationCpuTimeLimit (percentage = %d%%)\n", percentage); - mem.write32(messagePointer, IPC::responseHeader(0x4F, 1, 0)); - - // If called with invalid parameters, the current time limit is left unchanged, and OS::NotImplemented is returned if (percentage < 5 || percentage > 89 || fixed != 1) { - Helpers::warn("Invalid parameter passed to APT::SetApplicationCpuTimeLimit: (percentage, fixed) = (%d, %d)\n", percentage, fixed); - mem.write32(messagePointer + 4, Result::OS::NotImplemented); + Helpers::panic("Invalid parameters passed to APT::SetApplicationCpuTimeLimit"); } else { + mem.write32(messagePointer, IPC::responseHeader(0x4F, 1, 0)); mem.write32(messagePointer + 4, Result::Success); cpuTimeLimit = percentage; } @@ -396,7 +338,7 @@ void APTService::setScreencapPostPermission(u32 messagePointer) { void APTService::getSharedFont(u32 messagePointer) { log("APT::GetSharedFont\n"); - const u32 fontVaddr = kernel.getSharedFontVaddr(); + constexpr u32 fontVaddr = 0x18000000; mem.write32(messagePointer, IPC::responseHeader(0x44, 2, 2)); mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 8, fontVaddr); @@ -414,16 +356,15 @@ void APTService::theSmashBrosFunction(u32 messagePointer) { } void APTService::getWirelessRebootInfo(u32 messagePointer) { - const u32 size = mem.read32(messagePointer + 4); // Size of data to read + const u32 size = mem.read32(messagePointer + 4); // Size of data to read log("APT::GetWirelessRebootInfo (size = %X)\n", size); - if (size > 0x10) { + if (size > 0x10) Helpers::panic("APT::GetWirelessInfo with size > 0x10 bytes"); - } mem.write32(messagePointer, IPC::responseHeader(0x45, 1, 2)); mem.write32(messagePointer + 4, Result::Success); for (u32 i = 0; i < size; i++) { - mem.write8(messagePointer + 0x104 + i, 0); // Temporarily stub this until we add SetWirelessRebootInfo + mem.write8(messagePointer + 0x104 + i, 0); // Temporarily stub this until we add SetWirelessRebootInfo } } diff --git a/src/core/services/boss.cpp b/src/core/services/boss.cpp index 34d33942..621830db 100644 --- a/src/core/services/boss.cpp +++ b/src/core/services/boss.cpp @@ -1,5 +1,4 @@ #include "services/boss.hpp" - #include "ipc.hpp" namespace BOSSCommands { @@ -7,17 +6,13 @@ namespace BOSSCommands { InitializeSession = 0x00010082, UnregisterStorage = 0x00030000, GetTaskStorageInfo = 0x00040000, - GetNewArrivalFlag = 0x00070000, RegisterNewArrivalEvent = 0x00080002, - SetOptoutFlag = 0x00090040, GetOptoutFlag = 0x000A0000, RegisterTask = 0x000B00C2, UnregisterTask = 0x000C0082, GetTaskIdList = 0x000E0000, GetNsDataIdList = 0x00100102, GetNsDataIdList1 = 0x00110102, - GetNsDataIdList2 = 0x00120102, - GetNsDataIdList3 = 0x00130102, SendProperty = 0x00140082, ReceiveProperty = 0x00160082, GetTaskServiceStatus = 0x001B0042, @@ -26,36 +21,24 @@ namespace BOSSCommands { GetTaskState = 0x00200082, GetTaskStatus = 0x002300C2, GetTaskInfo = 0x00250082, - DeleteNsData = 0x00260040, - GetNsDataHeaderInfo = 0x002700C2, - ReadNsData = 0x00280102, - GetNsDataLastUpdated = 0x002D0040, GetErrorCode = 0x002E0040, RegisterStorageEntry = 0x002F0140, GetStorageEntryInfo = 0x00300000, - StartBgImmediate = 0x00330042, - InitializeSessionPrivileged = 0x04010082, - GetAppNewFlag = 0x04040080, - SetAppNewFlag = 0x040500C0, // Probably }; } -void BOSSService::reset() { optoutFlag = 0; } +void BOSSService::reset() { + optoutFlag = 0; +} void BOSSService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case BOSSCommands::CancelTask: cancelTask(messagePointer); break; - case BOSSCommands::DeleteNsData: deleteNsData(messagePointer); break; - case BOSSCommands::GetAppNewFlag: getAppNewFlag(messagePointer); break; case BOSSCommands::GetErrorCode: getErrorCode(messagePointer); break; - case BOSSCommands::GetNsDataHeaderInfo: getNsDataHeaderInfo(messagePointer); break; - case BOSSCommands::GetNewArrivalFlag: getNewArrivalFlag(messagePointer); break; case BOSSCommands::GetNsDataIdList: - case BOSSCommands::GetNsDataIdList1: - case BOSSCommands::GetNsDataIdList2: - case BOSSCommands::GetNsDataIdList3: getNsDataIdList(messagePointer, command); break; - case BOSSCommands::GetNsDataLastUpdated: getNsDataLastUpdated(messagePointer); break; + case BOSSCommands::GetNsDataIdList1: + getNsDataIdList(messagePointer, command); break; case BOSSCommands::GetOptoutFlag: getOptoutFlag(messagePointer); break; case BOSSCommands::GetStorageEntryInfo: getStorageEntryInfo(messagePointer); break; case BOSSCommands::GetTaskIdList: getTaskIdList(messagePointer); break; @@ -64,31 +47,16 @@ void BOSSService::handleSyncRequest(u32 messagePointer) { case BOSSCommands::GetTaskState: getTaskState(messagePointer); break; case BOSSCommands::GetTaskStatus: getTaskStatus(messagePointer); break; case BOSSCommands::GetTaskStorageInfo: getTaskStorageInfo(messagePointer); break; - case BOSSCommands::InitializeSession: - case BOSSCommands::InitializeSessionPrivileged: initializeSession(messagePointer); break; - case BOSSCommands::ReadNsData: readNsData(messagePointer); break; + case BOSSCommands::InitializeSession: initializeSession(messagePointer); break; case BOSSCommands::ReceiveProperty: receiveProperty(messagePointer); break; case BOSSCommands::RegisterNewArrivalEvent: registerNewArrivalEvent(messagePointer); break; case BOSSCommands::RegisterStorageEntry: registerStorageEntry(messagePointer); break; case BOSSCommands::RegisterTask: registerTask(messagePointer); break; case BOSSCommands::SendProperty: sendProperty(messagePointer); break; - case BOSSCommands::SetAppNewFlag: setAppNewFlag(messagePointer); break; - case BOSSCommands::SetOptoutFlag: setOptoutFlag(messagePointer); break; - case BOSSCommands::StartBgImmediate: startBgImmediate(messagePointer); break; case BOSSCommands::StartTask: startTask(messagePointer); break; case BOSSCommands::UnregisterStorage: unregisterStorage(messagePointer); break; case BOSSCommands::UnregisterTask: unregisterTask(messagePointer); break; - - case 0x04500102: // Home Menu uses this command, what is this? - Helpers::warn("BOSS command 0x04500102"); - mem.write32(messagePointer, IPC::responseHeader(0x450, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); - break; - - default: - mem.write32(messagePointer + 4, Result::Success); - Helpers::warn("BOSS service requested. Command: %08X\n", command); - break; + default: Helpers::panic("BOSS service requested. Command: %08X\n", command); } } @@ -98,15 +66,6 @@ void BOSSService::initializeSession(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void BOSSService::setOptoutFlag(u32 messagePointer) { - const s8 flag = static_cast(mem.read8(messagePointer + 4)); - log("BOSS::SetOptoutFlag (flag = %d)\n", flag); - optoutFlag = flag; - - mem.write32(messagePointer, IPC::responseHeader(0x9, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - void BOSSService::getOptoutFlag(u32 messagePointer) { log("BOSS::GetOptoutFlag\n"); mem.write32(messagePointer, IPC::responseHeader(0xA, 2, 0)); @@ -123,7 +82,7 @@ void BOSSService::getTaskState(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); mem.write8(messagePointer + 8, 0); // TaskStatus: Report the task finished successfully mem.write32(messagePointer + 12, 0); // Current state value for task PropertyID 0x4 - mem.write8(messagePointer + 16, 0); // TODO: Figure out what this should be + mem.write8(messagePointer + 16, 0); // TODO: Figure out what this should be } void BOSSService::getTaskStatus(u32 messagePointer) { @@ -174,15 +133,15 @@ void BOSSService::getErrorCode(u32 messagePointer) { log("BOSS::GetErrorCode (stubbed)\n"); mem.write32(messagePointer, IPC::responseHeader(0x2E, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, Result::Success); // No error code + mem.write32(messagePointer + 8, Result::Success); // No error code } void BOSSService::getStorageEntryInfo(u32 messagePointer) { log("BOSS::GetStorageEntryInfo (undocumented)\n"); mem.write32(messagePointer, IPC::responseHeader(0x30, 3, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // u32, unknown meaning - mem.write16(messagePointer + 12, 0); // s16, unknown meaning + mem.write32(messagePointer + 8, 0); // u32, unknown meaning + mem.write16(messagePointer + 12, 0); // s16, unknown meaning } void BOSSService::sendProperty(u32 messagePointer) { @@ -194,10 +153,10 @@ void BOSSService::sendProperty(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x14, 1, 2)); mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 8, 0); // Read size - // TODO: Should this do anything else? } + void BOSSService::receiveProperty(u32 messagePointer) { const u32 id = mem.read32(messagePointer + 4); const u32 size = mem.read32(messagePointer + 8); @@ -206,13 +165,13 @@ void BOSSService::receiveProperty(u32 messagePointer) { log("BOSS::ReceiveProperty (id = %d, size = %08X, ptr = %08X) (stubbed)\n", id, size, ptr); mem.write32(messagePointer, IPC::responseHeader(0x16, 2, 2)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // Read size + mem.write32(messagePointer + 8, 0); // Read size } // This seems to accept a KEvent as a parameter and register it for something Spotpass related // I need to update the 3DBrew page when it's known what it does properly void BOSSService::registerNewArrivalEvent(u32 messagePointer) { - const Handle eventHandle = mem.read32(messagePointer + 4); // Kernel event handle to register + const Handle eventHandle = mem.read32(messagePointer + 4); // Kernel event handle to register log("BOSS::RegisterNewArrivalEvent (handle = %X)\n", eventHandle); mem.write32(messagePointer, IPC::responseHeader(0x8, 1, 0)); @@ -270,98 +229,4 @@ void BOSSService::unregisterStorage(u32 messagePointer) { log("BOSS::UnregisterStorage (stubbed)\n"); mem.write32(messagePointer, IPC::responseHeader(0x3, 1, 0)); mem.write32(messagePointer + 4, Result::Success); -} - -void BOSSService::getNewArrivalFlag(u32 messagePointer) { - log("BOSS::GetNewArrivalFlag (stubbed)\n"); - mem.write32(messagePointer, IPC::responseHeader(0x7, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, 0); // Flag -} - -void BOSSService::startBgImmediate(u32 messagePointer) { - const u32 size = mem.read32(messagePointer + 8); - const u32 taskIDs = mem.read32(messagePointer + 12); - log("BOSS::StartBgImmediate (size = %X, task ID pointer = %X) (stubbed)\n", size, taskIDs); - - mem.write32(messagePointer, IPC::responseHeader(0x33, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, IPC::pointerHeader(0, size, IPC::BufferType::Send)); - mem.write32(messagePointer + 12, taskIDs); -} - -void BOSSService::getAppNewFlag(u32 messagePointer) { - const u64 appID = mem.read64(messagePointer + 4); - log("BOSS::GetAppNewFlag (app ID = %llX)\n", appID); - - mem.write32(messagePointer, IPC::responseHeader(0x404, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, 0); // No new content -} - -void BOSSService::getNsDataHeaderInfo(u32 messagePointer) { - const u32 nsDataID = mem.read32(messagePointer + 4); - const u8 type = mem.read8(messagePointer + 8); - const u32 size = mem.read32(messagePointer + 12); - const u32 nsDataHeaderInfo = mem.read32(messagePointer + 20); - log("BOSS::GetNsDataHeaderInfo (NS data ID = %X, type = %X, size = %X, NS data header info pointer = %X) (stubbed)\n", nsDataID, type, size, - nsDataHeaderInfo); - - switch (type) { - case 3: - case 5: mem.write32(nsDataHeaderInfo, 0); break; // ?? - - default: Helpers::panic("Unimplemented NS data header info type %X", type); - } - - mem.write32(messagePointer, IPC::responseHeader(0x27, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, IPC::pointerHeader(0, size, IPC::BufferType::Receive)); - mem.write32(messagePointer + 12, nsDataHeaderInfo); -} - -void BOSSService::getNsDataLastUpdated(u32 messagePointer) { - const u32 nsDataID = mem.read32(messagePointer + 4); - log("BOSS::GetNsDataLastUpdated (NS data ID = %X) (stubbed)\n", nsDataID); - - mem.write32(messagePointer, IPC::responseHeader(0x2D, 3, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write64(messagePointer + 8, 0); // Milliseconds since last update? -} - -void BOSSService::readNsData(u32 messagePointer) { - const u32 nsDataID = mem.read32(messagePointer + 4); - const s64 offset = mem.read64(messagePointer + 8); - const u32 size = mem.read32(messagePointer + 20); - const u32 data = mem.read32(messagePointer + 24); - log("BOSS::ReadNsData (NS data ID = %X, offset = %llX, size = %X, data pointer = %X) (stubbed)\n", nsDataID, offset, size, data); - - for (u32 i = 0; i < size; i++) { - mem.write8(data + i, 0); - } - - mem.write32(messagePointer, IPC::responseHeader(0x28, 3, 2)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, size); // Technically how many bytes have been read - mem.write32(messagePointer + 12, 0); // ?? - mem.write32(messagePointer + 16, IPC::pointerHeader(0, size, IPC::BufferType::Receive)); - mem.write32(messagePointer + 20, data); -} - -void BOSSService::deleteNsData(u32 messagePointer) { - const u32 nsDataID = mem.read32(messagePointer + 4); - log("BOSS::DeleteNsData (NS data ID = %X) (stubbed)\n", nsDataID); - - mem.write32(messagePointer, IPC::responseHeader(0x26, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -// Judging by the inputs and command number, this could very well be a "SetAppNewFlag" -void BOSSService::setAppNewFlag(u32 messagePointer) { - const u64 appID = mem.read64(messagePointer + 4); - const u8 flag = mem.read32(messagePointer + 12); - log("BOSS::SetAppNewFlag (app ID = %llX, flag = %X)\n", appID, flag); - - mem.write32(messagePointer, IPC::responseHeader(0x405, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/cam.cpp b/src/core/services/cam.cpp index d9c005e7..e0acab37 100644 --- a/src/core/services/cam.cpp +++ b/src/core/services/cam.cpp @@ -1,97 +1,24 @@ #include "services/cam.hpp" - -#include - #include "ipc.hpp" #include "kernel.hpp" namespace CAMCommands { enum : u32 { - StartCapture = 0x00010040, GetBufferErrorInterruptEvent = 0x00060040, - SetReceiving = 0x00070102, DriverInitialize = 0x00390000, - DriverFinalize = 0x003A0000, - SetTransferLines = 0x00090100, GetMaxLines = 0x000A0080, - SetTransferBytes = 0x000B0100, - GetTransferBytes = 0x000C0040, - GetMaxBytes = 0x000D0080, - SetTrimming = 0x000E0080, - SetTrimmingParamsCenter = 0x00120140, - SetSize = 0x001F00C0, // Set size has different headers between cam:u and New3DS QTM module - SetFrameRate = 0x00200080, - SetContrast = 0x00230080, - GetSuitableY2rStandardCoefficient = 0x00360000, }; } -// Helper struct for working with camera ports -class PortSelect { - u32 value; - - public: - PortSelect(u32 val) : value(val) {} - bool isValid() const { return value < 4; } - - bool isSinglePort() const { - // 1 corresponds to the first camera port and 2 corresponds to the second port - return value == 1 || value == 2; - } - - bool isBothPorts() const { - // 3 corresponds to both ports - return value == 3; - } - - // Returns the index of the camera port, assuming that it's only a single port - int getSingleIndex() const { - if (!isSinglePort()) [[unlikely]] { - Helpers::panic("Camera: getSingleIndex called for port with invalid value"); - } - - return value - 1; - } - - std::vector getPortIndices() const { - switch (value) { - case 1: return {0}; // Only port 1 - case 2: return {1}; // Only port 2 - case 3: return {0, 1}; // Both port 1 and port 2 - default: return {}; // No ports or invalid ports - } - } -}; - -void CAMService::reset() { - for (auto& port : ports) { - port.reset(); - } -} +void CAMService::reset() { bufferErrorInterruptEvents.fill(std::nullopt); } void CAMService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case CAMCommands::DriverInitialize: driverInitialize(messagePointer); break; - case CAMCommands::DriverFinalize: driverFinalize(messagePointer); break; case CAMCommands::GetBufferErrorInterruptEvent: getBufferErrorInterruptEvent(messagePointer); break; - case CAMCommands::GetMaxBytes: getMaxBytes(messagePointer); break; case CAMCommands::GetMaxLines: getMaxLines(messagePointer); break; - case CAMCommands::GetSuitableY2rStandardCoefficient: getSuitableY2RCoefficients(messagePointer); break; - case CAMCommands::GetTransferBytes: getTransferBytes(messagePointer); break; - case CAMCommands::SetContrast: setContrast(messagePointer); break; - case CAMCommands::SetFrameRate: setFrameRate(messagePointer); break; - case CAMCommands::SetReceiving: setReceiving(messagePointer); break; - case CAMCommands::SetSize: setSize(messagePointer); break; - case CAMCommands::SetTransferLines: setTransferLines(messagePointer); break; - case CAMCommands::SetTrimming: setTrimming(messagePointer); break; - case CAMCommands::SetTrimmingParamsCenter: setTrimmingParamsCenter(messagePointer); break; - case CAMCommands::StartCapture: startCapture(messagePointer); break; - - default: - Helpers::warn("Unimplemented CAM service requested. Command: %08X\n", command); - mem.write32(messagePointer + 4, Result::Success); - break; + default: Helpers::panic("CAM service requested. Command: %08X\n", command); } } @@ -101,112 +28,6 @@ void CAMService::driverInitialize(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void CAMService::driverFinalize(u32 messagePointer) { - log("CAM::DriverFinalize\n"); - mem.write32(messagePointer, IPC::responseHeader(0x3A, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CAMService::setContrast(u32 messagePointer) { - const u32 cameraSelect = mem.read32(messagePointer + 4); - const u32 contrast = mem.read32(messagePointer + 8); - - log("CAM::SetPhotoMode (camera select = %d, contrast = %d)\n", cameraSelect, contrast); - - mem.write32(messagePointer, IPC::responseHeader(0x23, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CAMService::setTransferBytes(u32 messagePointer) { - const u32 portIndex = mem.read8(messagePointer + 4); - const u32 bytes = mem.read16(messagePointer + 8); - // ...why do these parameters even exist? - const u16 width = mem.read16(messagePointer + 12); - const u16 height = mem.read16(messagePointer + 16); - const PortSelect port(portIndex); - - if (port.isValid()) { - for (int i : port.getPortIndices()) { - ports[i].transferBytes = bytes; - } - } else { - Helpers::warn("CAM::SetTransferBytes: Invalid port\n"); - } - - log("CAM::SetTransferBytes (port = %d, bytes = %d, width = %d, height = %d)\n", portIndex, bytes, width, height); - - mem.write32(messagePointer, IPC::responseHeader(0x9, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CAMService::setTransferLines(u32 messagePointer) { - const u32 portIndex = mem.read8(messagePointer + 4); - const u16 lines = mem.read16(messagePointer + 8); - const u16 width = mem.read16(messagePointer + 12); - const u16 height = mem.read16(messagePointer + 16); - const PortSelect port(portIndex); - - if (port.isValid()) { - const u32 transferBytes = lines * width * 2; - - for (int i : port.getPortIndices()) { - ports[i].transferBytes = transferBytes; - } - } else { - Helpers::warn("CAM::SetTransferLines: Invalid port\n"); - } - - log("CAM::SetTransferLines (port = %d, lines = %d, width = %d, height = %d)\n", portIndex, lines, width, height); - - mem.write32(messagePointer, IPC::responseHeader(0x9, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CAMService::setFrameRate(u32 messagePointer) { - const u32 cameraSelect = mem.read32(messagePointer + 4); - const u32 framerate = mem.read32(messagePointer + 8); - - log("CAM::SetPhotoMode (camera select = %d, framerate = %d)\n", cameraSelect, framerate); - - mem.write32(messagePointer, IPC::responseHeader(0x20, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CAMService::setSize(u32 messagePointer) { - const u32 cameraSelect = mem.read32(messagePointer + 4); - const u32 size = mem.read32(messagePointer + 8); - const u32 context = mem.read32(messagePointer + 12); - - log("CAM::SetSize (camera select = %d, size = %d, context = %d)\n", cameraSelect, size, context); - - mem.write32(messagePointer, IPC::responseHeader(0x1F, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CAMService::setTrimming(u32 messagePointer) { - const u32 port = mem.read8(messagePointer + 4); - const bool trim = mem.read8(messagePointer + 8) != 0; - - log("CAM::SetTrimming (port = %d, trimming = %s)\n", port, trim ? "enabled" : "disabled"); - - mem.write32(messagePointer, IPC::responseHeader(0x0E, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CAMService::setTrimmingParamsCenter(u32 messagePointer) { - const u32 port = mem.read8(messagePointer + 4); - const s16 trimWidth = s16(mem.read16(messagePointer + 8)); - const s16 trimHeight = s16(mem.read16(messagePointer + 12)); - const s16 cameraWidth = s16(mem.read16(messagePointer + 16)); - const s16 cameraHeight = s16(mem.read16(messagePointer + 20)); - - log("CAM::SetTrimmingParamsCenter (port = %d), trim size = (%d, %d), camera size = (%d, %d)\n", port, trimWidth, trimHeight, cameraWidth, - cameraHeight); - - mem.write32(messagePointer, IPC::responseHeader(0x12, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - // Algorithm taken from Citra // https://github.com/citra-emu/citra/blob/master/src/core/hle/service/cam/cam.cpp#L465 void CAMService::getMaxLines(u32 messagePointer) { @@ -239,88 +60,16 @@ void CAMService::getMaxLines(u32 messagePointer) { } } -void CAMService::getMaxBytes(u32 messagePointer) { - const u16 width = mem.read16(messagePointer + 4); - const u16 height = mem.read16(messagePointer + 8); - log("CAM::GetMaxBytes (width = %d, height = %d)\n", width, height); - - constexpr u32 MIN_TRANSFER_UNIT = 256; - constexpr u32 MAX_BUFFER_SIZE = 2560; - if (width * height * 2 % MIN_TRANSFER_UNIT != 0) { - Helpers::panic("CAM::GetMaxLines out of range"); - } else { - u32 bytes = MAX_BUFFER_SIZE; - - while (width * height * 2 % bytes != 0) { - bytes -= MIN_TRANSFER_UNIT; - } - - mem.write32(messagePointer, IPC::responseHeader(0xA, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, bytes); - } -} - -void CAMService::getSuitableY2RCoefficients(u32 messagePointer) { - log("CAM::GetSuitableY2RCoefficients\n"); - mem.write32(messagePointer, IPC::responseHeader(0x36, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - // Y2R standard coefficient value - mem.write32(messagePointer + 8, 0); -} - -void CAMService::getTransferBytes(u32 messagePointer) { - const u32 portIndex = mem.read8(messagePointer + 4); - const PortSelect port(portIndex); - log("CAM::GetTransferBytes (port = %d)\n", portIndex); - - mem.write32(messagePointer, IPC::responseHeader(0x0C, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - - if (port.isSinglePort()) { - mem.write32(messagePointer + 8, ports[port.getSingleIndex()].transferBytes); - } else { - // TODO: This should return the proper error code - Helpers::warn("CAM::GetTransferBytes: Invalid port index"); - mem.write32(messagePointer + 8, 0); - } -} - void CAMService::getBufferErrorInterruptEvent(u32 messagePointer) { - const u32 portIndex = mem.read8(messagePointer + 4); - const PortSelect port(portIndex); - log("CAM::GetBufferErrorInterruptEvent (port = %d)\n", portIndex); + const u32 port = mem.read32(messagePointer + 4); + log("CAM::GetBufferErrorInterruptEvent (port = %d)\n", port); mem.write32(messagePointer, IPC::responseHeader(0x6, 1, 2)); - if (port.isSinglePort()) { - auto& event = ports[port.getSingleIndex()].bufferErrorInterruptEvent; - if (!event.has_value()) { - event = kernel.makeEvent(ResetType::OneShot); - } - - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); - mem.write32(messagePointer + 12, event.value()); - } else { + if (port >= portCount) { Helpers::panic("CAM::GetBufferErrorInterruptEvent: Invalid port"); - } -} - -void CAMService::setReceiving(u32 messagePointer) { - const u32 destination = mem.read32(messagePointer + 4); - const u32 portIndex = mem.read8(messagePointer + 8); - const u32 size = mem.read32(messagePointer + 12); - const u16 transferUnit = mem.read16(messagePointer + 16); - const Handle process = mem.read32(messagePointer + 24); - - const PortSelect port(portIndex); - log("CAM::SetReceiving (port = %d)\n", portIndex); - - mem.write32(messagePointer, IPC::responseHeader(0x7, 1, 2)); - - if (port.isSinglePort()) { - auto& event = ports[port.getSingleIndex()].receiveEvent; + } else { + auto& event = bufferErrorInterruptEvents[port]; if (!event.has_value()) { event = kernel.makeEvent(ResetType::OneShot); } @@ -328,29 +77,5 @@ void CAMService::setReceiving(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 8, 0); mem.write32(messagePointer + 12, event.value()); - } else { - Helpers::panic("CAM::SetReceiving: Invalid port"); } -} - -void CAMService::startCapture(u32 messagePointer) { - const u32 portIndex = mem.read8(messagePointer + 4); - const PortSelect port(portIndex); - log("CAM::StartCapture (port = %d)\n", portIndex); - - mem.write32(messagePointer, IPC::responseHeader(0x01, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); - - if (port.isValid()) { - for (int i : port.getPortIndices()) { - auto& event = ports[i].receiveEvent; - - // Until we properly implement cameras, immediately signal the receive event - if (event.has_value()) { - kernel.signalEvent(event.value()); - } - } - } else { - Helpers::warn("CAM::StartCapture: Invalid port index"); - } -} +} \ No newline at end of file diff --git a/src/core/services/cecd.cpp b/src/core/services/cecd.cpp index 18ccbf53..6607884f 100644 --- a/src/core/services/cecd.cpp +++ b/src/core/services/cecd.cpp @@ -5,27 +5,18 @@ namespace CECDCommands { enum : u32 { - Stop = 0x000C0040, GetInfoEventHandle = 0x000F0000, - GetChangeStateEventHandle = 0x00100000, OpenAndRead = 0x00120104, }; } -void CECDService::reset() { - changeStateEvent = std::nullopt; - infoEvent = std::nullopt; -} +void CECDService::reset() { infoEvent = std::nullopt; } void CECDService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); - switch (command) { case CECDCommands::GetInfoEventHandle: getInfoEventHandle(messagePointer); break; - case CECDCommands::GetChangeStateEventHandle: getChangeStateEventHandle(messagePointer); break; case CECDCommands::OpenAndRead: openAndRead(messagePointer); break; - case CECDCommands::Stop: stop(messagePointer); break; - default: Helpers::panicDev("CECD service requested. Command: %08X\n", command); mem.write32(messagePointer + 4, Result::Success); @@ -43,20 +34,7 @@ void CECDService::getInfoEventHandle(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0xF, 1, 2)); mem.write32(messagePointer + 4, Result::Success); // TODO: Translation descriptor here? - mem.write32(messagePointer + 12, *infoEvent); -} - -void CECDService::getChangeStateEventHandle(u32 messagePointer) { - log("CECD::GetChangeStateEventHandle (stubbed)\n"); - - if (!changeStateEvent.has_value()) { - changeStateEvent = kernel.makeEvent(ResetType::OneShot); - } - - mem.write32(messagePointer, IPC::responseHeader(0x10, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - // TODO: Translation descriptor here? - mem.write32(messagePointer + 12, *changeStateEvent); + mem.write32(messagePointer + 12, infoEvent.value()); } void CECDService::openAndRead(u32 messagePointer) { @@ -69,16 +47,5 @@ void CECDService::openAndRead(u32 messagePointer) { // TODO: We should implement this properly the time comes mem.write32(messagePointer, IPC::responseHeader(0x12, 2, 2)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // Bytes read -} - -void CECDService::stop(u32 messagePointer) { - log("CECD::Stop (stubbed)\n"); - - if (changeStateEvent.has_value()) { - kernel.signalEvent(*changeStateEvent); - } - - mem.write32(messagePointer, IPC::responseHeader(0x0C, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} + mem.write32(messagePointer + 8, 0); // Bytes read +} \ No newline at end of file diff --git a/src/core/services/cfg.cpp b/src/core/services/cfg.cpp index cd47069b..882de420 100644 --- a/src/core/services/cfg.cpp +++ b/src/core/services/cfg.cpp @@ -1,99 +1,36 @@ #include "services/cfg.hpp" +#include "services/dsp.hpp" +#include "system_models.hpp" +#include "ipc.hpp" #include #include #include #include -#include "ipc.hpp" -#include "services/dsp.hpp" -#include "system_models.hpp" - namespace CFGCommands { enum : u32 { GetConfigInfoBlk2 = 0x00010082, - GetConfigInfoBlk8 = 0x04010082, SecureInfoGetRegion = 0x00020000, GenHashConsoleUnique = 0x00030040, GetRegionCanadaUSA = 0x00040000, GetSystemModel = 0x00050000, - TranslateCountryInfo = 0x00080080, - - GetCountryCodeString = 0x00090040, GetCountryCodeID = 0x000A0040, - IsFangateSupported = 0x000B0000, - SetConfigInfoBlk4 = 0x04020082, - UpdateConfigNANDSavegame = 0x04030000, - GetLocalFriendCodeSeed = 0x04050000, - SecureInfoGetByte101 = 0x04070000, - }; -} - -// cfg:i commands -namespace CFGICommands { - enum : u32 { - GetConfigInfoBlk8 = 0x08010082, - }; -} - -// cfg:nor commands -namespace NORCommands { - enum : u32 { - Initialize = 0x00010040, - ReadData = 0x00050082, }; } void CFGService::reset() {} -void CFGService::handleSyncRequest(u32 messagePointer, CFGService::Type type) { +void CFGService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); - - if (type != Type::NOR) { - switch (command) { - case CFGCommands::GetConfigInfoBlk2: [[likely]] getConfigInfoBlk2(messagePointer); break; - case CFGCommands::GetCountryCodeString: getCountryCodeString(messagePointer); break; - case CFGCommands::GetCountryCodeID: getCountryCodeID(messagePointer); break; - case CFGCommands::GetRegionCanadaUSA: getRegionCanadaUSA(messagePointer); break; - case CFGCommands::GetSystemModel: getSystemModel(messagePointer); break; - case CFGCommands::GenHashConsoleUnique: genUniqueConsoleHash(messagePointer); break; - case CFGCommands::IsFangateSupported: isFangateSupported(messagePointer); break; - case CFGCommands::SecureInfoGetRegion: secureInfoGetRegion(messagePointer); break; - case CFGCommands::TranslateCountryInfo: translateCountryInfo(messagePointer); break; - - default: - if (type == Type::S) { - // cfg:s (and cfg:i) functions only functions - switch (command) { - case CFGCommands::GetConfigInfoBlk8: getConfigInfoBlk8(messagePointer, command); break; - case CFGCommands::GetLocalFriendCodeSeed: getLocalFriendCodeSeed(messagePointer); break; - case CFGCommands::SecureInfoGetByte101: secureInfoGetByte101(messagePointer); break; - case CFGCommands::SetConfigInfoBlk4: setConfigInfoBlk4(messagePointer); break; - case CFGCommands::UpdateConfigNANDSavegame: updateConfigNANDSavegame(messagePointer); break; - - default: Helpers::panic("CFG:S service requested. Command: %08X\n", command); - } - } else if (type == Type::I) { - switch (command) { - case CFGCommands::GetConfigInfoBlk8: - case CFGICommands::GetConfigInfoBlk8: getConfigInfoBlk8(messagePointer, command); break; - - default: Helpers::panic("CFG:I service requested. Command: %08X\n", command); - } - } else { - Helpers::panic("CFG service requested. Command: %08X\n", command); - } - - break; - } - } else { - // cfg:nor functions - switch (command) { - case NORCommands::Initialize: norInitialize(messagePointer); break; - case NORCommands::ReadData: norReadData(messagePointer); break; - - default: Helpers::panic("CFG:NOR service requested. Command: %08X\n", command); - } + switch (command) { + case CFGCommands::GetConfigInfoBlk2: [[likely]] getConfigInfoBlk2(messagePointer); break; + case CFGCommands::GetCountryCodeID: getCountryCodeID(messagePointer); break; + case CFGCommands::GetRegionCanadaUSA: getRegionCanadaUSA(messagePointer); break; + case CFGCommands::GetSystemModel: getSystemModel(messagePointer); break; + case CFGCommands::GenHashConsoleUnique: genUniqueConsoleHash(messagePointer); break; + case CFGCommands::SecureInfoGetRegion: secureInfoGetRegion(messagePointer); break; + default: Helpers::panic("CFG service requested. Command: %08X\n", command); } } @@ -102,7 +39,7 @@ void CFGService::getSystemModel(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x05, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, SystemModel::Nintendo3DS); // TODO: Make this adjustable via GUI + mem.write8(messagePointer + 8, SystemModel::Nintendo3DS); // TODO: Make this adjustable via GUI } // Write a UTF16 string to 3DS memory starting at "pointer". Appends a null terminator. @@ -112,130 +49,84 @@ void CFGService::writeStringU16(u32 pointer, const std::u16string& string) { pointer += 2; } - mem.write16(pointer, static_cast(u'\0')); // Null terminator + mem.write16(pointer, static_cast(u'\0')); // Null terminator } void CFGService::getConfigInfoBlk2(u32 messagePointer) { u32 size = mem.read32(messagePointer + 4); u32 blockID = mem.read32(messagePointer + 8); - u32 output = mem.read32(messagePointer + 16); // Pointer to write the output data to + u32 output = mem.read32(messagePointer + 16); // Pointer to write the output data to log("CFG::GetConfigInfoBlk2 (size = %X, block ID = %X, output pointer = %08X\n", size, blockID, output); - getConfigInfo(output, blockID, size, 0x2); - mem.write32(messagePointer, IPC::responseHeader(0x1, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CFGService::getConfigInfoBlk8(u32 messagePointer, u32 commandWord) { - u32 size = mem.read32(messagePointer + 4); - u32 blockID = mem.read32(messagePointer + 8); - u32 output = mem.read32(messagePointer + 16); // Pointer to write the output data to - log("CFG::GetConfigInfoBlk8 (size = %X, block ID = %X, output pointer = %08X\n", size, blockID, output); - - getConfigInfo(output, blockID, size, 0x8); - mem.write32(messagePointer, IPC::responseHeader(commandWord >> 16, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CFGService::getConfigInfo(u32 output, u32 blockID, u32 size, u32 permissionMask) { // TODO: Make this not bad - if (size == 1 && blockID == 0x70001) { // Sound output mode + if (size == 1 && blockID == 0x70001) { // Sound output mode mem.write8(output, static_cast(DSPService::SoundOutputMode::Stereo)); - } else if (size == 1 && blockID == 0xA0002) { // System language - mem.write8(output, static_cast(settings.systemLanguage)); - } else if (size == 4 && blockID == 0xB0000) { // Country info - mem.write8(output, 0); // Unknown - mem.write8(output + 1, 0); // Unknown - mem.write8(output + 2, 2); // Province (Temporarily stubbed to Washington DC like Citra) - mem.write8(output + 3, static_cast(country)); // Country code + } else if (size == 1 && blockID == 0xA0002){ // System language + mem.write8(output, static_cast(LanguageCodes::English)); + } else if (size == 4 && blockID == 0xB0000) { // Country info + mem.write8(output, 0); // Unknown + mem.write8(output + 1, 0); // Unknown + mem.write8(output + 2, 2); // Province (Temporarily stubbed to Washington DC like Citra) + mem.write8(output + 3, static_cast(country)); // Country code } else if (size == 0x20 && blockID == 0x50005) { // "Stereo Camera settings" // Implementing this properly fixes NaN uniforms in some games. Values taken from 3dmoo & Citra static constexpr std::array STEREO_CAMERA_SETTINGS = { - 62.0f, 289.0f, 76.80000305175781f, 46.08000183105469f, 10.0f, 5.0f, 55.58000183105469f, 21.56999969482422f, + 62.0f, 289.0f, 76.80000305175781f, 46.08000183105469f, + 10.0f, 5.0f, 55.58000183105469f, 21.56999969482422f }; for (int i = 0; i < 8; i++) { mem.write32(output + i * 4, Helpers::bit_cast(STEREO_CAMERA_SETTINGS[i])); } - } else if (size == 0x1C && blockID == 0xA0000) { // Username + } else if (size == 0x1C && blockID == 0xA0000) { // Username writeStringU16(output, u"Pander"); - } else if (size == 0xC0 && blockID == 0xC0000) { // Parental restrictions info - for (int i = 0; i < 0xC0; i++) mem.write8(output + i, 0); - } else if (size == 4 && blockID == 0xD0000) { // Agreed EULA version (first 2 bytes) and latest EULA version (next 2 bytes) + } else if (size == 0xC0 && blockID == 0xC0000) { // Parental restrictions info + for (int i = 0; i < 0xC0; i++) + mem.write8(output + i, 0); + } else if (size == 4 && blockID == 0xD0000) { // Agreed EULA version (first 2 bytes) and latest EULA version (next 2 bytes) log("Read EULA info\n"); - mem.write16(output, 0x0202); // Agreed EULA version = 2.2 (Random number. TODO: Check) - mem.write16(output + 2, 0x0202); // Latest EULA version = 2.2 - } else if (size == 0x800 && blockID == 0xB0001) { // UTF-16 name for our country in every language at 0x80 byte intervals + mem.write16(output, 0x0202); // Agreed EULA version = 2.2 (Random number. TODO: Check) + mem.write16(output + 2, 0x0202); // Latest EULA version = 2.2 + } else if (size == 0x800 && blockID == 0xB0001) { // UTF-16 name for our country in every language at 0x80 byte intervals constexpr size_t languageCount = 16; - constexpr size_t nameSize = 0x80; // Max size of each name in bytes - std::u16string name = u"PandaLand (Home of PandaSemi LLC) (aka Pandistan)"; // Note: This + the null terminator needs to fit in 0x80 bytes + constexpr size_t nameSize = 0x80; // Max size of each name in bytes + std::u16string name = u"PandaLand (Home of PandaSemi LLC) (aka Pandistan)"; // Note: This + the null terminator needs to fit in 0x80 bytes for (int i = 0; i < languageCount; i++) { u32 pointer = output + i * nameSize; writeStringU16(pointer, name); } - } else if (size == 0x800 && blockID == 0xB0002) { // UTF-16 name for our state in every language at 0x80 byte intervals + } else if (size == 0x800 && blockID == 0xB0002) { // UTF-16 name for our state in every language at 0x80 byte intervals constexpr size_t languageCount = 16; - constexpr size_t nameSize = 0x80; // Max size of each name in bytes - std::u16string name = u"Pandington"; // Note: This + the null terminator needs to fit in 0x80 bytes + constexpr size_t nameSize = 0x80; // Max size of each name in bytes + std::u16string name = u"Pandington"; // Note: This + the null terminator needs to fit in 0x80 bytes for (int i = 0; i < languageCount; i++) { u32 pointer = output + i * nameSize; writeStringU16(pointer, name); } - } else if (size == 4 && blockID == 0xB0003) { // Coordinates (latidude and longtitude) as s16 - mem.write16(output, 0); // Latitude - mem.write16(output + 2, 0); // Longtitude - } else if (size == 2 && blockID == 0xA0001) { // Birthday - mem.write8(output, 5); // Month (May) - mem.write8(output + 1, 5); // Day (Fifth) - } else if (size == 8 && blockID == 0x30001) { // User time offset + } else if (size == 4 && blockID == 0xB0003) { // Coordinates (latidude and longtitude) as s16 + mem.write16(output, 0); // Latitude + mem.write16(output + 2, 0); // Longtitude + } else if (size == 2 && blockID == 0xA0001) { // Birthday + mem.write8(output, 5); // Month (May) + mem.write8(output + 1, 5); // Day (Fifth) + } else if (size == 8 && blockID == 0x30001) { // User time offset printf("Read from user time offset field in NAND. TODO: What is this\n"); mem.write64(output, 0); - } else if (size == 20 && blockID == 0xC0001) { // COPPACS restriction data, used by games when they detect a USA/Canada region for market - // restriction stuff + } else if (size == 20 && blockID == 0xC0001) { // COPPACS restriction data, used by games when they detect a USA/Canada region for market restriction stuff for (u32 i = 0; i < size; i += 4) { mem.write32(output + i, 0); } } else if (size == 4 && blockID == 0x170000) { // Miiverse access key mem.write32(output, 0); - } else if (size == 8 && blockID == 0x00090000) { - mem.write64(output, 0); // Some sort of key used with nwm::UDS::InitializeWithVersion - } else if (size == 4 && blockID == 0x110000) { - mem.write32(output, 1); // According to 3Dbrew, 0 means system setup is required - } else if (size == 2 && blockID == 0x50001) { - // Backlight controls. Values taken from Citra - mem.write8(output, 0); - mem.write8(output + 1, 2); - } else if (size == 8 && blockID == 0x50009) { - // N3DS Backlight controls? - mem.write64(output, 0); - } else if (size == 4 && blockID == 0x180000) { - // Infrared LED related? - mem.write32(output, 0); - } else if (size == 1 && blockID == 0xE0000) { - mem.write8(output, 0); - } else if ((size == 512 && blockID == 0xC0002) || (size == 148 && blockID == 0x100001)) { - // CTR parental controls block (0xC0002) and TWL parental controls block (0x100001) - for (u32 i = 0; i < size; i++) { - mem.write8(output + i, 0); - } - } else if (size == 2 && blockID == 0x100000) { - // EULA agreed - mem.write8(output, 1); // We have agreed to the EULA - mem.write8(output + 1, 1); // EULA version = 1 - } else if (size == 1 && blockID == 0x100002) { - Helpers::warn("Unimplemented TWL country code access"); - mem.write8(output, 0); - } else if (size == 24 && blockID == 0x180001) { - // QTM calibration data - for (u32 i = 0; i < size; i++) { - mem.write8(output + i, 0); - } } else { Helpers::panic("Unhandled GetConfigInfoBlk2 configuration. Size = %d, block = %X", size, blockID); } + + mem.write32(messagePointer, IPC::responseHeader(0x1, 1, 2)); + mem.write32(messagePointer + 4, Result::Success); } void CFGService::secureInfoGetRegion(u32 messagePointer) { @@ -254,7 +145,7 @@ void CFGService::genUniqueConsoleHash(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); // We need to implement hash generation & the SHA-256 digest properly later on. We have cryptopp so the hashing isn't too hard to do // Let's stub it for now - mem.write32(messagePointer + 8, 0x33646D6F ^ salt); // Lower word of hash + mem.write32(messagePointer + 8, 0x33646D6F ^ salt); // Lower word of hash mem.write32(messagePointer + 12, 0xA3534841 ^ salt); // Upper word of hash } @@ -303,127 +194,16 @@ void CFGService::getCountryCodeID(u32 messagePointer) { log("CFG::GetCountryCodeID (code = %04X)\n", characterCode); mem.write32(messagePointer, IPC::responseHeader(0x0A, 2, 0)); - + // If the character code is valid, return its table ID and a success code if (auto search = countryCodeToTableIDMap.find(characterCode); search != countryCodeToTableIDMap.end()) { mem.write32(messagePointer + 4, Result::Success); mem.write16(messagePointer + 8, search->second); } - + else { Helpers::warn("CFG::GetCountryCodeID: Invalid country code %X", characterCode); mem.write32(messagePointer + 4, Result::CFG::NotFound); mem.write16(messagePointer + 8, 0xFF); } -} - -void CFGService::getCountryCodeString(u32 messagePointer) { - const u16 id = mem.read16(messagePointer + 4); - log("CFG::getCountryCodeString (id = %04X)\n", id); - - mem.write32(messagePointer, IPC::responseHeader(0x09, 2, 0)); - - for (auto [string, code] : countryCodeToTableIDMap) { - if (code == id) { - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, u32(string)); - return; - } - } - - // Code is not a valid country code, return an appropriate error - mem.write32(messagePointer + 4, 0xD90103FA); -} - -void CFGService::secureInfoGetByte101(u32 messagePointer) { - log("CFG::SecureInfoGetByte101\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x407, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, 0); // Secure info byte 0x101 is usually 0 according to 3DBrew -} - -void CFGService::getLocalFriendCodeSeed(u32 messagePointer) { - log("CFG::GetLocalFriendCodeSeed\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x405, 3, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write64(messagePointer + 8, 0); -} - -void CFGService::setConfigInfoBlk4(u32 messagePointer) { - u32 blockID = mem.read32(messagePointer + 4); - u32 size = mem.read32(messagePointer + 8); - u32 input = mem.read32(messagePointer + 16); - log("CFG::SetConfigInfoBlk4 (block ID = %X, size = %X, input pointer = %08X)\n", blockID, size, input); - - mem.write32(messagePointer, IPC::responseHeader(0x401, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, IPC::pointerHeader(0, size, IPC::BufferType::Receive)); - mem.write32(messagePointer + 12, input); -} - -void CFGService::updateConfigNANDSavegame(u32 messagePointer) { - log("CFG::UpdateConfigNANDSavegame\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x403, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -// https://www.3dbrew.org/wiki/Cfg:TranslateCountryInfo -void CFGService::translateCountryInfo(u32 messagePointer) { - const u32 country = mem.read32(messagePointer + 4); - const u8 direction = mem.read8(messagePointer + 8); - log("CFG::TranslateCountryInfo (country = %d, direction = %d)\n", country, direction); - - // By default the translated code is the input - u32 result = country; - - if (direction == 0) { // Translate from version B to version A - switch (country) { - case 0x6E040000: result = 0x6E030000; break; - case 0x6E050000: result = 0x6E040000; break; - case 0x6E060000: result = 0x6E050000; break; - case 0x6E070000: result = 0x6E060000; break; - case 0x6E030000: result = 0x6E070000; break; - default: break; - } - } else if (direction == 1) { // Translate from version A to version B - switch (country) { - case 0x6E030000: result = 0x6E040000; break; - case 0x6E040000: result = 0x6E050000; break; - case 0x6E050000: result = 0x6E060000; break; - case 0x6E060000: result = 0x6E070000; break; - case 0x6E070000: result = 0x6E030000; break; - default: break; - } - } - - mem.write32(messagePointer, IPC::responseHeader(0x8, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, result); -} - -void CFGService::isFangateSupported(u32 messagePointer) { - log("CFG::IsFangateSupported\n"); - - // TODO: What even is fangate? - mem.write32(messagePointer, IPC::responseHeader(0xB, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 1); -} - -void CFGService::norInitialize(u32 messagePointer) { - log("CFG::NOR::Initialize\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x1, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void CFGService::norReadData(u32 messagePointer) { - log("CFG::NOR::ReadData\n"); - Helpers::warn("Unimplemented CFG::NOR::ReadData"); - - mem.write32(messagePointer, IPC::responseHeader(0x5, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/csnd.cpp b/src/core/services/csnd.cpp deleted file mode 100644 index f0cc3faa..00000000 --- a/src/core/services/csnd.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "services/csnd.hpp" - -#include "ipc.hpp" -#include "kernel.hpp" -#include "result/result.hpp" - -namespace CSNDCommands { - enum : u32 { - Initialize = 0x00010140, - ExecuteCommands = 0x00030040, - AcquireSoundChannels = 0x00050000, - }; -} - -void CSNDService::reset() { - csndMutex = std::nullopt; - initialized = false; - sharedMemory = nullptr; - sharedMemSize = 0; -} - -void CSNDService::handleSyncRequest(u32 messagePointer) { - const u32 command = mem.read32(messagePointer); - - switch (command) { - case CSNDCommands::AcquireSoundChannels: acquireSoundChannels(messagePointer); break; - case CSNDCommands::ExecuteCommands: executeCommands(messagePointer); break; - case CSNDCommands::Initialize: initialize(messagePointer); break; - - default: - Helpers::warn("Unimplemented CSND service requested. Command: %08X\n", command); - mem.write32(messagePointer + 4, Result::Success); - break; - } -} - -void CSNDService::acquireSoundChannels(u32 messagePointer) { - log("CSND::AcquireSoundChannels\n"); - // The CSND service talks to the DSP using the DSP FIFO to negotiate what CSND channels are allocated to the DSP, and this seems to be channels - // 0-7 (usually). The rest are dedicated to CSND services. https://www.3dbrew.org/wiki/CSND_Services - constexpr u32 csndChannelMask = 0xFFFFFF00; - - mem.write32(messagePointer, IPC::responseHeader(0x5, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, csndChannelMask); -} - -void CSNDService::initialize(u32 messagePointer) { - u32 blockSize = mem.read32(messagePointer + 4); - const u32 offset0 = mem.read32(messagePointer + 8); - const u32 offset1 = mem.read32(messagePointer + 12); - const u32 offset2 = mem.read32(messagePointer + 16); - const u32 offset3 = mem.read32(messagePointer + 20); - - log("CSND::Initialize (Block size = %08X, offset0 = %X, offset1 = %X, offset2 = %X, offset3 = %X)\n", blockSize, offset0, offset1, offset2, - offset3); - - // Align block size to 4KB. CSND shared memory block is currently stubbed to be 0x3000 == 12KB, so panic if this is more than requested - blockSize = (blockSize + 0xFFF) & ~0xFFF; - if (blockSize != 12_KB) { - Helpers::panic("Unhandled size for CSND shared memory block"); - } - - if (initialized) { - printf("CSND initialized twice\n"); - } - - if (!csndMutex.has_value()) { - csndMutex = kernel.makeMutex(false); - } - - initialized = true; - sharedMemSize = blockSize; - - mem.write32(messagePointer, IPC::responseHeader(0x1, 1, 3)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0x4000000); - mem.write32(messagePointer + 12, csndMutex.value()); - mem.write32(messagePointer + 16, KernelHandles::CSNDSharedMemHandle); -} - -void CSNDService::executeCommands(u32 messagePointer) { - const u32 offset = mem.read32(messagePointer + 4); - log("CSND::ExecuteCommands (command offset = %X)\n", offset); - - mem.write32(messagePointer, IPC::responseHeader(0x5, 2, 0)); - - if (!sharedMemory) { - Helpers::warn("CSND::Execute commands without shared memory"); - mem.write32(messagePointer + 4, Result::FailurePlaceholder); - return; - } - - mem.write32(messagePointer + 4, Result::Success); - - // This is initially zero when this command data is written by the user process, once the CSND module finishes processing the command this is set - // to 0x1. This flag is only set to value 1 for the first command(once processing for the entire command chain is finished) at the offset - // specified in the service command, not all type0 commands in the chain. - constexpr u32 commandListDoneOffset = 0x4; - - // Make sure to not access OoB of the shared memory block when marking command list processing as finished - if (offset + commandListDoneOffset < sharedMemSize) { - sharedMemory[offset + commandListDoneOffset] = 1; - } -} \ No newline at end of file diff --git a/src/core/services/dlp_srvr.cpp b/src/core/services/dlp_srvr.cpp index 46d6803f..e3ef25e9 100644 --- a/src/core/services/dlp_srvr.cpp +++ b/src/core/services/dlp_srvr.cpp @@ -1,10 +1,9 @@ #include "services/dlp_srvr.hpp" - #include "ipc.hpp" namespace DlpSrvrCommands { enum : u32 { - IsChild = 0x000E0040, + IsChild = 0x000E0040 }; } @@ -23,5 +22,5 @@ void DlpSrvrService::isChild(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x0E, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // We are responsible adults + mem.write32(messagePointer + 8, 0); // We are responsible adults } \ No newline at end of file diff --git a/src/core/services/dsp.cpp b/src/core/services/dsp.cpp index 3f976f6a..69eb9fb3 100644 --- a/src/core/services/dsp.cpp +++ b/src/core/services/dsp.cpp @@ -1,17 +1,8 @@ #include "services/dsp.hpp" - -#include -#include -#include - -#include -#include -#include - -#include "config.hpp" #include "ipc.hpp" #include "kernel.hpp" -#include "services/dsp_firmware_db.hpp" + +#include namespace DSPCommands { enum : u32 { @@ -28,22 +19,25 @@ namespace DSPCommands { RegisterInterruptEvents = 0x00150082, GetSemaphoreEventHandle = 0x00160000, SetSemaphoreMask = 0x00170040, - GetHeadphoneStatus = 0x001F0000, - ForceHeadphoneOut = 0x00200040, + GetHeadphoneStatus = 0x001F0000 }; } namespace Result { enum : u32 { HeadphonesNotInserted = 0, - HeadphonesInserted = 1, + HeadphonesInserted = 1 }; } void DSPService::reset() { + for (auto& e : pipeData) + e.clear(); + + // Note: Reset audio pipe AFTER resetting all pipes, otherwise the new data will be yeeted + resetAudioPipe(); totalEventCount = 0; - semaphoreMask = 0; - headphonesInserted = true; + dspState = DSPState::Off; semaphoreEvent = std::nullopt; interrupt0 = std::nullopt; @@ -52,8 +46,40 @@ void DSPService::reset() { for (DSPEvent& e : pipeEvents) { e = std::nullopt; } +} - loadedComponent.clear(); +void DSPService::resetAudioPipe() { + // Hardcoded responses for now + // These are DSP DRAM offsets for various variables + // https://www.3dbrew.org/wiki/DSP_Memory_Region + static constexpr std::array responses = { + 0x000F, // Number of responses + 0xBFFF, // Frame counter + 0x9E92, // Source configs + 0x8680, // Source statuses + 0xA792, // ADPCM coefficients + 0x9430, // DSP configs + 0x8400, // DSP status + 0x8540, // Final samples + 0x9492, // Intermediate mix samples + 0x8710, // Compressor + 0x8410, // Debug + 0xA912, // ?? + 0xAA12, // ?? + 0xAAD2, // ?? + 0xAC52, // Surround sound biquad filter 1 + 0xAC5C // Surround sound biquad filter 2 + }; + + std::vector& audioPipe = pipeData[DSPPipeType::Audio]; + audioPipe.resize(responses.size() * sizeof(u16)); + + // Push back every response to the audio pipe + size_t index = 0; + for (auto e : responses) { + audioPipe[index++] = e & 0xff; + audioPipe[index++] = e >> 8; + } } void DSPService::handleSyncRequest(u32 messagePointer) { @@ -62,7 +88,6 @@ void DSPService::handleSyncRequest(u32 messagePointer) { case DSPCommands::ConvertProcessAddressFromDspDram: convertProcessAddressFromDspDram(messagePointer); break; case DSPCommands::FlushDataCache: flushDataCache(messagePointer); break; case DSPCommands::InvalidateDataCache: invalidateDCache(messagePointer); break; - case DSPCommands::ForceHeadphoneOut: forceHeadphoneOut(messagePointer); break; case DSPCommands::GetHeadphoneStatus: getHeadphoneStatus(messagePointer); break; case DSPCommands::GetSemaphoreEventHandle: getSemaphoreEventHandle(messagePointer); break; case DSPCommands::LoadComponent: loadComponent(messagePointer); break; @@ -85,43 +110,50 @@ void DSPService::convertProcessAddressFromDspDram(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0xC, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, converted); // Converted address + mem.write32(messagePointer + 8, converted); // Converted address } void DSPService::loadComponent(u32 messagePointer) { u32 size = mem.read32(messagePointer + 4); u32 programMask = mem.read32(messagePointer + 8); u32 dataMask = mem.read32(messagePointer + 12); - u32 buffer = mem.read32(messagePointer + 20); - - loadedComponent.resize(size); - - for (u32 i = 0; i < size; i++) { - loadedComponent[i] = mem.read8(buffer + i); - } log("DSP::LoadComponent (size = %08X, program mask = %X, data mask = %X\n", size, programMask, dataMask); - dsp->loadComponent(loadedComponent, programMask, dataMask); - - if (config.printDSPFirmware) { - printFirmwareInfo(); - } - mem.write32(messagePointer, IPC::responseHeader(0x11, 2, 2)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 1); // Component loaded + mem.write32(messagePointer + 8, 1); // Component loaded mem.write32(messagePointer + 12, (size << 4) | 0xA); - mem.write32(messagePointer + 16, mem.read32(messagePointer + 20)); // Component buffer + mem.write32(messagePointer + 16, mem.read32(messagePointer + 20)); // Component buffer } void DSPService::unloadComponent(u32 messagePointer) { log("DSP::UnloadComponent\n"); - dsp->unloadComponent(); - mem.write32(messagePointer, IPC::responseHeader(0x12, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } +std::vector DSPService::readPipe(u32 pipe, u32 size) { + if (size & 1) Helpers::panic("Tried to read odd amount of bytes from DSP pipe"); + if (pipe >= pipeCount || size > 0xffff) { + return {}; + } + + if (pipe != DSPPipeType::Audio) { + log("Reading from non-audio pipe! This might be broken, might need to check what pipe is being read from and implement writing to it\n"); + } + + std::vector& data = pipeData[pipe]; + size = std::min(size, u32(data.size())); // Clamp size to the maximum available data size + + if (size == 0) + return {}; + + // Return "size" bytes from the audio pipe and erase them + std::vector out(data.begin(), data.begin() + size); + data.erase(data.begin(), data.begin() + size); + return out; +} + void DSPService::readPipeIfPossible(u32 messagePointer) { u32 channel = mem.read32(messagePointer + 4); u32 peer = mem.read32(messagePointer + 8); @@ -130,13 +162,13 @@ void DSPService::readPipeIfPossible(u32 messagePointer) { log("DSP::ReadPipeIfPossible (channel = %d, peer = %d, size = %04X, buffer = %08X)\n", channel, peer, size, buffer); mem.write32(messagePointer, IPC::responseHeader(0x10, 2, 2)); - std::vector data = dsp->readPipe(channel, peer, size, buffer); + std::vector data = readPipe(channel, size); for (uint i = 0; i < data.size(); i++) { mem.write8(buffer + i, data[i]); } mem.write32(messagePointer + 4, Result::Success); - mem.write16(messagePointer + 8, u16(data.size())); // Number of bytes read + mem.write16(messagePointer + 8, u16(data.size())); // Number of bytes read } void DSPService::recvData(u32 messagePointer) { @@ -144,22 +176,22 @@ void DSPService::recvData(u32 messagePointer) { log("DSP::RecvData (register = %d)\n", registerIndex); if (registerIndex != 0) Helpers::panic("Unknown register in DSP::RecvData"); - const u16 data = dsp->recvData(registerIndex); + // Return 0 if the DSP is running, otherwise 1 + const u16 ret = dspState == DSPState::On ? 0 : 1; mem.write32(messagePointer, IPC::responseHeader(0x01, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write16(messagePointer + 8, data); + mem.write16(messagePointer + 8, ret); } void DSPService::recvDataIsReady(u32 messagePointer) { const u32 registerIndex = mem.read32(messagePointer + 4); log("DSP::RecvDataIsReady (register = %d)\n", registerIndex); - - bool isReady = dsp->recvDataIsReady(registerIndex); + if (registerIndex != 0) Helpers::panic("Unknown register in DSP::RecvDataIsReady"); mem.write32(messagePointer, IPC::responseHeader(0x02, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, isReady ? 1 : 0); + mem.write32(messagePointer + 8, 1); // Always return that the register is ready for now } DSPService::DSPEvent& DSPService::getEventRef(u32 type, u32 pipe) { @@ -168,10 +200,12 @@ DSPService::DSPEvent& DSPService::getEventRef(u32 type, u32 pipe) { case 1: return interrupt1; case 2: - if (pipe >= pipeCount) Helpers::panic("Tried to access the event of an invalid pipe"); + if (pipe >= pipeCount) + Helpers::panic("Tried to access the event of an invalid pipe"); return pipeEvents[pipe]; - default: Helpers::panic("Unknown type for DSP::getEventRef"); + default: + Helpers::panic("Unknown type for DSP::getEventRef"); } } @@ -183,8 +217,8 @@ void DSPService::registerInterruptEvents(u32 messagePointer) { // The event handle being 0 means we're removing an event if (eventHandle == 0) { - DSPEvent& e = getEventRef(interrupt, channel); // Get event - if (e.has_value()) { // Remove if it exists + DSPEvent& e = getEventRef(interrupt, channel); // Get event + if (e.has_value()) { // Remove if it exists totalEventCount--; e = std::nullopt; } @@ -202,6 +236,7 @@ void DSPService::registerInterruptEvents(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); totalEventCount++; + kernel.signalEvent(eventHandle); } } } @@ -211,21 +246,20 @@ void DSPService::getHeadphoneStatus(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x1F, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - // This should be toggleable for shits and giggles - mem.write32(messagePointer + 8, headphonesInserted ? Result::HeadphonesInserted : Result::HeadphonesNotInserted); + mem.write32(messagePointer + 8, Result::HeadphonesInserted); // This should be toggleable for shits and giggles } void DSPService::getSemaphoreEventHandle(u32 messagePointer) { log("DSP::GetSemaphoreEventHandle\n"); if (!semaphoreEvent.has_value()) { - semaphoreEvent = kernel.makeEvent(ResetType::OneShot, Event::CallbackType::DSPSemaphore); + semaphoreEvent = kernel.makeEvent(ResetType::OneShot); } mem.write32(messagePointer, IPC::responseHeader(0x16, 1, 2)); mem.write32(messagePointer + 4, Result::Success); // TODO: Translation descriptor here? - mem.write32(messagePointer + 12, semaphoreEvent.value()); // Semaphore event handle + mem.write32(messagePointer + 12, semaphoreEvent.value()); // Semaphore event handle kernel.signalEvent(semaphoreEvent.value()); } @@ -233,7 +267,6 @@ void DSPService::setSemaphore(u32 messagePointer) { const u16 value = mem.read16(messagePointer + 4); log("DSP::SetSemaphore(value = %04X)\n", value); - dsp->setSemaphore(value); mem.write32(messagePointer, IPC::responseHeader(0x7, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } @@ -242,9 +275,6 @@ void DSPService::setSemaphoreMask(u32 messagePointer) { const u16 mask = mem.read16(messagePointer + 4); log("DSP::SetSemaphoreMask(mask = %04X)\n", mask); - dsp->setSemaphoreMask(mask); - semaphoreMask = mask; - mem.write32(messagePointer, IPC::responseHeader(0x17, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } @@ -255,7 +285,51 @@ void DSPService::writeProcessPipe(u32 messagePointer) { const u32 buffer = mem.read32(messagePointer + 16); log("DSP::writeProcessPipe (channel = %d, size = %X, buffer = %08X)\n", channel, size, buffer); - dsp->writeProcessPipe(channel, size, buffer); + enum class StateChange : u8 { + Initialize = 0, + Shutdown = 1, + Wakeup = 2, + Sleep = 3, + }; + + switch (channel) { + case DSPPipeType::Audio: { + if (size != 4) { + printf("Invalid size written to DSP Audio Pipe\n"); + break; + } + + // Get new state + const u8 state = mem.read8(buffer); + if (state > 3) { + log("WriteProcessPipe::Audio: Unknown state change type"); + } else { + switch (static_cast(state)) { + case StateChange::Initialize: + // TODO: Other initialization stuff here + dspState = DSPState::On; + resetAudioPipe(); + break; + + case StateChange::Shutdown: + dspState = DSPState::Off; + break; + + default: Helpers::panic("Unimplemented DSP audio pipe state change %d", state); + } + } + break; + } + + case DSPPipeType::Binary: + Helpers::warn("Unimplemented write to binary pipe! Size: %d\n", size); + break; + + default: + log("DSP: Wrote to unimplemented pipe %d\n", channel); + break; + } + mem.write32(messagePointer, IPC::responseHeader(0xD, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } @@ -280,89 +354,12 @@ void DSPService::invalidateDCache(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void DSPService::forceHeadphoneOut(u32 messagePointer) { - headphonesInserted = mem.read8(messagePointer + 4) != 0; - - log("DSP::ForceHeadphoneOut\n"); - mem.write32(messagePointer, IPC::responseHeader(0x20, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -DSPService::ComponentDumpResult DSPService::dumpComponent(const std::filesystem::path& path) { - if (loadedComponent.empty()) { - return ComponentDumpResult::NotLoaded; +void DSPService::signalEvents() { + for (const DSPEvent& e : pipeEvents) { + if (e.has_value()) { kernel.signalEvent(e.value()); } } - std::ofstream file(path, std::ios::out | std::ios::binary); - if (file.bad()) { - return ComponentDumpResult::FileFailure; - } - - file.write((char*)&loadedComponent[0], loadedComponent.size() * sizeof(u8)); - file.close(); - return ComponentDumpResult::Success; -} - -void DSPService::triggerPipeEvent(int index) { - if (index < pipeCount && pipeEvents[index].has_value()) { - kernel.signalEvent(*pipeEvents[index]); - } -} - -void DSPService::triggerSemaphoreEvent() { - if (semaphoreEvent.has_value()) { - kernel.signalEvent(*semaphoreEvent); - } -} - -void DSPService::triggerInterrupt0() { - if (interrupt0.has_value()) { - kernel.signalEvent(*interrupt0); - } -} - -void DSPService::triggerInterrupt1() { - if (interrupt1.has_value()) { - kernel.signalEvent(*interrupt1); - } -} - -void DSPService::printFirmwareInfo() { - // No component has been loaded, do nothing. - if (!loadedComponent.size()) { - return; - } - - const auto& firmwareDB = DSP::firmwareDB; - const usize firmwareSize = loadedComponent.size(); - std::array hash; - - CryptoPP::SHA256 sha; - sha.CalculateDigest(hash.data(), loadedComponent.data(), firmwareSize); - - fmt::print("\nLoaded DSP firmware\n"); - fmt::print("Firmware SHA-256 hash: {:X}\n", fmt::join(hash, "")); - fmt::print("Size: {} bytes ({} KB)\n", firmwareSize, firmwareSize / 1024); - - bool knownFirmware = false; - - for (int i = 0; i < firmwareDB.size(); i++) { - const auto& entry = firmwareDB[i]; - if (entry.size == firmwareSize && std::memcmp(hash.data(), entry.hash.data(), hash.size()) == 0) { - knownFirmware = true; - fmt::print( - "Firmware found in DSP firmware DB.\nFeatures AAC decoder: {}\nOther notes: {}\n", entry.supportsAAC ? "yes" : "no", entry.notes - ); - - break; - } - } - - if (!knownFirmware) { - fmt::print("Firmware not found in DSP firmware DB.\nHash in case you want to add it to the DB: {{{:#X}}}\n", fmt::join(hash, ", ")); - // DSP firmwares that feature AAC decoding are usually around 210KB as opposed to the average DSP firmware which is around 48KB - fmt::print("Features AAC decoder: {}\n", firmwareSize >= 200_KB ? "probably yes" : "probably not"); - } - - fmt::print("\n"); -} + if (semaphoreEvent.has_value()) { kernel.signalEvent(semaphoreEvent.value()); } + if (interrupt0.has_value()) { kernel.signalEvent(interrupt0.value()); } + if (interrupt1.has_value()) { kernel.signalEvent(interrupt1.value()); } +} \ No newline at end of file diff --git a/src/core/services/fonts.cpp b/src/core/services/fonts.cpp deleted file mode 100644 index ec4652ee..00000000 --- a/src/core/services/fonts.cpp +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -// Adapted from https://github.com/PabloMK7/citra/blob/master/src/core/hle/service/apt/bcfnt/bcfnt.cpp - -#include "services/fonts.hpp" - -#include - -namespace HLE::Fonts { - void relocateSharedFont(u8* sharedFont, u32 newAddress) { - constexpr u32 sharedFontStartOffset = 0x80; - const u8* cfntData = &sharedFont[sharedFontStartOffset]; - - CFNT cfnt; - std::memcpy(&cfnt, cfntData, sizeof(cfnt)); - - u32 assumedCmapOffset = 0; - u32 assumedCwdhOffset = 0; - u32 assumedTglpOffset = 0; - u32 firstCmapOffset = 0; - u32 firstCwdhOffset = 0; - u32 firstTglpOffset = 0; - - // First discover the location of sections so that the rebase offset can be auto-detected - u32 currentOffset = sharedFontStartOffset + cfnt.headerSize; - for (uint block = 0; block < cfnt.numBlocks; ++block) { - const u8* data = &sharedFont[currentOffset]; - - SectionHeader sectionHeader; - std::memcpy(§ionHeader, data, sizeof(sectionHeader)); - - if (firstCmapOffset == 0 && std::memcmp(sectionHeader.magic, "CMAP", 4) == 0) { - firstCmapOffset = currentOffset; - } else if (firstCwdhOffset == 0 && std::memcmp(sectionHeader.magic, "CWDH", 4) == 0) { - firstCwdhOffset = currentOffset; - } else if (firstTglpOffset == 0 && std::memcmp(sectionHeader.magic, "TGLP", 4) == 0) { - firstTglpOffset = currentOffset; - } else if (std::memcmp(sectionHeader.magic, "FINF", 4) == 0) { - Fonts::FINF finf; - std::memcpy(&finf, data, sizeof(finf)); - - assumedCmapOffset = finf.cmapOffset - sizeof(SectionHeader); - assumedCwdhOffset = finf.cwdhOffset - sizeof(SectionHeader); - assumedTglpOffset = finf.tglpOffset - sizeof(SectionHeader); - } - - currentOffset += sectionHeader.sectionSize; - } - - u32 previousBase = assumedCmapOffset - firstCmapOffset; - if ((previousBase != assumedCwdhOffset - firstCwdhOffset) || (previousBase != assumedTglpOffset - firstTglpOffset)) { - Helpers::warn("You shouldn't be seeing this. Shared Font file offsets might be borked?"); - } - - u32 offset = newAddress - previousBase; - - // Reset pointer back to start of sections and do the actual rebase - currentOffset = sharedFontStartOffset + cfnt.headerSize; - for (uint block = 0; block < cfnt.numBlocks; ++block) { - u8* data = &sharedFont[currentOffset]; - - SectionHeader sectionHeader; - std::memcpy(§ionHeader, data, sizeof(sectionHeader)); - - if (std::memcmp(sectionHeader.magic, "FINF", 4) == 0) { - Fonts::FINF finf; - std::memcpy(&finf, data, sizeof(finf)); - - // Relocate the offsets in the FINF section - finf.cmapOffset += offset; - finf.cwdhOffset += offset; - finf.tglpOffset += offset; - - std::memcpy(data, &finf, sizeof(finf)); - } else if (std::memcmp(sectionHeader.magic, "CMAP", 4) == 0) { - Fonts::CMAP cmap; - std::memcpy(&cmap, data, sizeof(cmap)); - - // Relocate the offsets in the CMAP section - if (cmap.nextCmapOffset != 0) { - cmap.nextCmapOffset += offset; - } - - std::memcpy(data, &cmap, sizeof(cmap)); - } else if (std::memcmp(sectionHeader.magic, "CWDH", 4) == 0) { - Fonts::CWDH cwdh; - std::memcpy(&cwdh, data, sizeof(cwdh)); - - // Relocate the offsets in the CWDH section - if (cwdh.nextCwdhOffset != 0) { - cwdh.nextCwdhOffset += offset; - } - - std::memcpy(data, &cwdh, sizeof(cwdh)); - } else if (std::memcmp(sectionHeader.magic, "TGLP", 4) == 0) { - Fonts::TGLP tglp; - std::memcpy(&tglp, data, sizeof(tglp)); - - // Relocate the offsets in the TGLP section - tglp.sheetDataOffset += offset; - std::memcpy(data, &tglp, sizeof(tglp)); - } - - currentOffset += sectionHeader.sectionSize; - } - } -} // namespace HLE::Fonts diff --git a/src/core/services/fonts/SharedFontReplacement.bin b/src/core/services/fonts/CitraSharedFontUSRelocated.bin similarity index 100% rename from src/core/services/fonts/SharedFontReplacement.bin rename to src/core/services/fonts/CitraSharedFontUSRelocated.bin diff --git a/src/core/services/frd.cpp b/src/core/services/frd.cpp index 63e951a6..d4a439df 100644 --- a/src/core/services/frd.cpp +++ b/src/core/services/frd.cpp @@ -8,7 +8,6 @@ namespace FRDCommands { enum : u32 { HasLoggedIn = 0x00010000, - IsOnline = 0x00020000, AttachToEventNotification = 0x00200002, SetNotificationMask = 0x00210040, SetClientSdkVersion = 0x00320042, @@ -18,22 +17,17 @@ namespace FRDCommands { GetMyPresence = 0x00080000, GetMyScreenName = 0x00090000, GetMyMii = 0x000A0000, - GetMyFavoriteGame = 0x000D0000, - GetMyComment = 0x000F0000, GetFriendKeyList = 0x00110080, GetFriendPresence = 0x00120042, GetFriendProfile = 0x00150042, - GetFriendRelationship = 0x00160042, GetFriendAttributeFlags = 0x00170042, UpdateGameModeDescription = 0x001D0002, - - UpdateMii = 0x040C0800, }; } void FRDService::reset() { loggedIn = false; } -void FRDService::handleSyncRequest(u32 messagePointer, FRDService::Type type) { +void FRDService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case FRDCommands::AttachToEventNotification: attachToEventNotification(messagePointer); break; @@ -41,33 +35,17 @@ void FRDService::handleSyncRequest(u32 messagePointer, FRDService::Type type) { case FRDCommands::GetFriendKeyList: getFriendKeyList(messagePointer); break; case FRDCommands::GetFriendPresence: getFriendPresence(messagePointer); break; case FRDCommands::GetFriendProfile: getFriendProfile(messagePointer); break; - case FRDCommands::GetFriendRelationship: getFriendRelationship(messagePointer); break; - case FRDCommands::GetMyComment: getMyComment(messagePointer); break; case FRDCommands::GetMyFriendKey: getMyFriendKey(messagePointer); break; case FRDCommands::GetMyMii: getMyMii(messagePointer); break; - case FRDCommands::GetMyFavoriteGame: getMyFavoriteGame(messagePointer); break; case FRDCommands::GetMyPresence: getMyPresence(messagePointer); break; case FRDCommands::GetMyProfile: getMyProfile(messagePointer); break; case FRDCommands::GetMyScreenName: getMyScreenName(messagePointer); break; case FRDCommands::HasLoggedIn: hasLoggedIn(messagePointer); break; - case FRDCommands::IsOnline: isOnline(messagePointer); break; case FRDCommands::Logout: logout(messagePointer); break; case FRDCommands::SetClientSdkVersion: setClientSDKVersion(messagePointer); break; case FRDCommands::SetNotificationMask: setNotificationMask(messagePointer); break; case FRDCommands::UpdateGameModeDescription: updateGameModeDescription(messagePointer); break; - - default: - // FRD:A functions - if (type == Type::A) { - switch (command) { - case FRDCommands::UpdateMii: updateMii(messagePointer); break; - default: Helpers::panic("FRD:A service requested. Command: %08X\n", command); break; - } - } else { - Helpers::panic("FRD service requested. Command: %08X\n", command); - } - - break; + default: Helpers::panic("FRD service requested. Command: %08X\n", command); } } @@ -89,17 +67,17 @@ void FRDService::getMyFriendKey(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x5, 5, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // Principal ID - mem.write32(messagePointer + 12, 0); // Padding (?) - mem.write32(messagePointer + 16, 0); // Local friend code + mem.write32(messagePointer + 8, 0); // Principal ID + mem.write32(messagePointer + 12, 0); // Padding (?) + mem.write32(messagePointer + 16, 0); // Local friend code mem.write32(messagePointer + 20, 0); } void FRDService::getFriendKeyList(u32 messagePointer) { log("FRD::GetFriendKeyList\n"); - const u32 count = mem.read32(messagePointer + 8); // From what I understand this is a cap on the number of keys to receive? - constexpr u32 friendCount = 0; // And this should be the number of friends whose keys were actually received? + const u32 count = mem.read32(messagePointer + 8); // From what I understand this is a cap on the number of keys to receive? + constexpr u32 friendCount = 0; // And this should be the number of friends whose keys were actually received? mem.write32(messagePointer, IPC::responseHeader(0x11, 2, 2)); mem.write32(messagePointer + 4, Result::Success); @@ -147,11 +125,11 @@ void FRDService::getFriendAttributeFlags(u32 messagePointer) { } void FRDService::getMyPresence(u32 messagePointer) { - static constexpr u32 presenceSize = 0x12C; // A presence seems to be 12C bytes of data, not sure what it contains + static constexpr u32 presenceSize = 0x12C; // A presence seems to be 12C bytes of data, not sure what it contains log("FRD::GetMyPresence\n"); - u32 buffer = mem.read32(messagePointer + 0x104); // Buffer to write presence info to. + u32 buffer = mem.read32(messagePointer + 0x104); // Buffer to write presence info to. - for (u32 i = 0; i < presenceSize; i += 4) { // Clear presence info with 0s for now + for (u32 i = 0; i < presenceSize; i += 4) { // Clear presence info with 0s for now mem.write32(buffer + i, 0); } @@ -168,15 +146,15 @@ void FRDService::getFriendPresence(u32 messagePointer) { } void FRDService::getMyProfile(u32 messagePointer) { - mem.write32(messagePointer, IPC::responseHeader(0x7, 3, 0)); // Not sure if the header here has the correct # of responses? + mem.write32(messagePointer, IPC::responseHeader(0x7, 3, 0)); // Not sure if the header here has the correct # of responses? mem.write32(messagePointer + 4, Result::Success); // TODO: Should maybe make these user-configurable. Not super important though - mem.write8(messagePointer + 8, static_cast(Regions::USA)); // Region - mem.write8(messagePointer + 9, static_cast(CountryCodes::US)); // Country - mem.write8(messagePointer + 10, 2); // Area (this should be Washington) - mem.write8(messagePointer + 11, static_cast(LanguageCodes::English)); // Language - mem.write8(messagePointer + 12, 2); // Platform (always 2 for CTR) + mem.write8(messagePointer + 8, static_cast(Regions::USA)); // Region + mem.write8(messagePointer + 9, static_cast(CountryCodes::US)); // Country + mem.write8(messagePointer + 10, 2); // Area (this should be Washington) + mem.write8(messagePointer + 11, static_cast(LanguageCodes::English)); // Language + mem.write8(messagePointer + 12, 2); // Platform (always 2 for CTR) // Padding mem.write8(messagePointer + 13, 0); @@ -223,23 +201,6 @@ void FRDService::getMyMii(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void FRDService::getMyFavoriteGame(u32 messagePointer) { - log("FRD::GetMyFavoriteGame (stubbed)\n"); - constexpr u64 titleID = 0; - - mem.write32(messagePointer, IPC::responseHeader(0xD, 3, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write64(messagePointer + 8, titleID); -} - -void FRDService::getMyComment(u32 messagePointer) { - log("FRD::GetMyComment"); - - mem.write32(messagePointer, IPC::responseHeader(0xF, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); -} - void FRDService::hasLoggedIn(u32 messagePointer) { log("FRD::HasLoggedIn\n"); @@ -248,34 +209,10 @@ void FRDService::hasLoggedIn(u32 messagePointer) { mem.write8(messagePointer + 8, loggedIn ? 1 : 0); } -void FRDService::isOnline(u32 messagePointer) { - log("FRD::IsOnline\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x2, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - // TODO: When is this 0? - mem.write8(messagePointer + 8, 1); -} - void FRDService::logout(u32 messagePointer) { log("FRD::Logout\n"); loggedIn = false; mem.write32(messagePointer, IPC::responseHeader(0x4, 1, 0)); mem.write32(messagePointer + 4, Result::Success); -} - -void FRDService::updateMii(u32 messagePointer) { - log("FRD::UpdateMii (stubbed)\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x40C, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void FRDService::getFriendRelationship(u32 messagePointer) { - log("FRD::GetFriendRelationship (stubbed)\n"); - - // TODO: What does this return? - mem.write32(messagePointer, IPC::responseHeader(0x16, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp index 18dd0b21..00b66f0c 100644 --- a/src/core/services/fs.cpp +++ b/src/core/services/fs.cpp @@ -1,11 +1,9 @@ #include "services/fs.hpp" - +#include "kernel/kernel.hpp" #include "io_file.hpp" #include "ipc.hpp" -#include "kernel/kernel.hpp" -#include "result/result.hpp" -#ifdef CreateFile // windows.h defines CreateFile & DeleteFile because of course it does. +#ifdef CreateFile // windows.h defines CreateFile & DeleteFile because of course it does. #undef CreateDirectory #undef CreateFile #undef DeleteFile @@ -17,9 +15,6 @@ namespace FSCommands { OpenFile = 0x080201C2, OpenFileDirectly = 0x08030204, DeleteFile = 0x08040142, - RenameFile = 0x08050244, - DeleteDirectory = 0x08060142, - DeleteDirectoryRecursively = 0x08070142, CreateFile = 0x08080202, CreateDirectory = 0x08090182, OpenDirectory = 0x080B0102, @@ -28,10 +23,8 @@ namespace FSCommands { CloseArchive = 0x080E0080, FormatThisUserSaveData = 0x080F0180, GetFreeBytes = 0x08120080, - GetSdmcArchiveResource = 0x08140000, IsSdmcDetected = 0x08170000, IsSdmcWritable = 0x08180000, - CardSlotIsInserted = 0x08210000, AbnegateAccessRight = 0x08400040, GetFormatInfo = 0x084500C2, GetArchiveResource = 0x08490040, @@ -48,18 +41,20 @@ namespace FSCommands { }; } -void FSService::reset() { priority = 0; } +void FSService::reset() { + priority = 0; +} // Creates directories for NAND, ExtSaveData, etc if they don't already exist. Should be executed after loading a new ROM. void FSService::initializeFilesystem() { - const auto sdmcPath = IOFile::getAppData() / "SDMC"; // Create SDMC directory + const auto sdmcPath = IOFile::getAppData() / "SDMC"; // Create SDMC directory const auto nandSharedpath = IOFile::getAppData() / ".." / "SharedFiles" / "NAND"; - const auto savePath = IOFile::getAppData() / "SaveData"; // Create SaveData - const auto formatPath = IOFile::getAppData() / "FormatInfo"; // Create folder for storing archive formatting info - const auto systemSaveDataPath = IOFile::getAppData() / ".." / "SharedFiles" / "SystemSaveData"; + const auto savePath = IOFile::getAppData() / "SaveData"; // Create SaveData + const auto formatPath = IOFile::getAppData() / "FormatInfo"; // Create folder for storing archive formatting info namespace fs = std::filesystem; + if (!fs::is_directory(nandSharedpath)) { fs::create_directories(nandSharedpath); } @@ -75,10 +70,6 @@ void FSService::initializeFilesystem() { if (!fs::is_directory(formatPath)) { fs::create_directories(formatPath); } - - if (!fs::is_directory(systemSaveDataPath)) { - fs::create_directories(systemSaveDataPath); - } } ArchiveBase* FSService::getArchiveFromID(u32 id, const FSPath& archivePath) { @@ -87,26 +78,23 @@ ArchiveBase* FSService::getArchiveFromID(u32 id, const FSPath& archivePath) { case ArchiveID::SaveData: return &saveData; case ArchiveID::UserSaveData2: return &userSaveData2; - case ArchiveID::ExtSaveData: return &extSaveData_sdmc; + case ArchiveID::ExtSaveData: + return &extSaveData_sdmc; - case ArchiveID::SharedExtSaveData: return &sharedExtSaveData_nand; + case ArchiveID::SharedExtSaveData: + return &sharedExtSaveData_nand; - case ArchiveID::SystemSaveData: return &systemSaveData; case ArchiveID::SDMC: return &sdmc; - case ArchiveID::SDMCWriteOnly: return &sdmcWriteOnly; - case ArchiveID::SavedataAndNcch: return &ncch; // This can only access NCCH outside of FSPXI - - case ArchiveID::TwlPhoto: return &twlPhoto; - case ArchiveID::TwlSound: return &twlSound; - case ArchiveID::CardSPI: return &cardSpi; - - default: Helpers::panic("Unknown archive. ID: %d\n", id); return nullptr; + case ArchiveID::SavedataAndNcch: return &ncch; // This can only access NCCH outside of FSPXI + default: + Helpers::panic("Unknown archive. ID: %d\n", id); + return nullptr; } } -std::optional FSService::openFileHandle(ArchiveBase* archive, const FSPath& path, const FSPath& archivePath, const FilePerms& perms) { +std::optional FSService::openFileHandle(ArchiveBase* archive, const FSPath& path, const FSPath& archivePath, const FilePerms& perms) { FileDescriptor opened = archive->openFile(path, perms); - if (opened.has_value()) { // If opened doesn't have a value, we failed to open the file + if (opened.has_value()) { // If opened doesn't have a value, we failed to open the file auto handle = kernel.makeObject(KernelObjectType::File); auto& file = kernel.getObjects()[handle]; @@ -118,9 +106,9 @@ std::optional FSService::openFileHandle(ArchiveBase* archive, con } } -Rust::Result FSService::openDirectoryHandle(ArchiveBase* archive, const FSPath& path) { +Rust::Result FSService::openDirectoryHandle(ArchiveBase* archive, const FSPath& path) { Rust::Result opened = archive->openDirectory(path); - if (opened.isOk()) { // If opened doesn't have a value, we failed to open the directory + if (opened.isOk()) { // If opened doesn't have a value, we failed to open the directory auto handle = kernel.makeObject(KernelObjectType::Directory); auto& object = kernel.getObjects()[handle]; object.data = new DirectorySession(opened.unwrap()); @@ -131,7 +119,7 @@ Rust::Result FSService::openDirectoryHandl } } -Rust::Result FSService::openArchiveHandle(u32 archiveID, const FSPath& path) { +Rust::Result FSService::openArchiveHandle(u32 archiveID, const FSPath& path) { ArchiveBase* archive = getArchiveFromID(archiveID, path); if (archive == nullptr) [[unlikely]] { @@ -146,7 +134,8 @@ Rust::Result FSService::openArchiveHandle( archiveObject.data = new ArchiveSession(res.unwrap(), path); return Ok(handle); - } else { + } + else { return Err(res.unwrapErr()); } } @@ -155,7 +144,8 @@ FSPath FSService::readPath(u32 type, u32 pointer, u32 size) { std::vector data; data.resize(size); - for (u32 i = 0; i < size; i++) data[i] = mem.read8(pointer + i); + for (u32 i = 0; i < size; i++) + data[i] = mem.read8(pointer + i); return FSPath(type, data); } @@ -163,13 +153,11 @@ FSPath FSService::readPath(u32 type, u32 pointer, u32 size) { void FSService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { - case FSCommands::CardSlotIsInserted: cardSlotIsInserted(messagePointer); break; case FSCommands::CreateDirectory: createDirectory(messagePointer); break; case FSCommands::CreateExtSaveData: createExtSaveData(messagePointer); break; case FSCommands::CreateFile: createFile(messagePointer); break; case FSCommands::ControlArchive: controlArchive(messagePointer); break; case FSCommands::CloseArchive: closeArchive(messagePointer); break; - case FSCommands::DeleteDirectory: deleteDirectory(messagePointer); break; case FSCommands::DeleteExtSaveData: deleteExtSaveData(messagePointer); break; case FSCommands::DeleteFile: deleteFile(messagePointer); break; case FSCommands::FormatSaveData: formatSaveData(messagePointer); break; @@ -178,7 +166,6 @@ void FSService::handleSyncRequest(u32 messagePointer) { case FSCommands::GetFreeBytes: getFreeBytes(messagePointer); break; case FSCommands::GetFormatInfo: getFormatInfo(messagePointer); break; case FSCommands::GetPriority: getPriority(messagePointer); break; - case FSCommands::GetSdmcArchiveResource: getSdmcArchiveResource(messagePointer); break; case FSCommands::GetThisSaveDataSecureValue: getThisSaveDataSecureValue(messagePointer); break; case FSCommands::Initialize: initialize(messagePointer); break; case FSCommands::InitializeWithSdkVersion: initializeWithSdkVersion(messagePointer); break; @@ -188,7 +175,6 @@ void FSService::handleSyncRequest(u32 messagePointer) { case FSCommands::OpenDirectory: openDirectory(messagePointer); break; case FSCommands::OpenFile: [[likely]] openFile(messagePointer); break; case FSCommands::OpenFileDirectly: [[likely]] openFileDirectly(messagePointer); break; - case FSCommands::RenameFile: renameFile(messagePointer); break; case FSCommands::SetArchivePriority: setArchivePriority(messagePointer); break; case FSCommands::SetPriority: setPriority(messagePointer); break; case FSCommands::SetThisSaveDataSecureValue: setThisSaveDataSecureValue(messagePointer); break; @@ -214,7 +200,7 @@ void FSService::initializeWithSdkVersion(u32 messagePointer) { } void FSService::closeArchive(u32 messagePointer) { - const Handle handle = static_cast(mem.read64(messagePointer + 4)); // TODO: archive handles should be 64-bit + const Handle handle = static_cast(mem.read64(messagePointer + 4)); // TODO: archive handles should be 64-bit const auto object = kernel.getObject(handle, KernelObjectType::Archive); log("FSService::CloseArchive(handle = %X)\n", handle); @@ -280,7 +266,7 @@ void FSService::openFile(u32 messagePointer) { mem.write32(messagePointer + 4, Result::FS::FileNotFound); } else { mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0x10); // "Move handle descriptor" + mem.write32(messagePointer + 8, 0x10); // "Move handle descriptor" mem.write32(messagePointer + 12, handle.value()); } } @@ -366,8 +352,7 @@ void FSService::openFileDirectly(u32 messagePointer) { std::optional handle = openFileHandle(archive, filePath, archivePath, perms); mem.write32(messagePointer, IPC::responseHeader(0x803, 1, 2)); if (!handle.has_value()) { - printf("OpenFileDirectly failed\n"); - mem.write32(messagePointer + 4, Result::FS::FileNotFound); + Helpers::panic("OpenFileDirectly: Failed to open file with given path"); } else { mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 12, handle.value()); @@ -421,18 +406,6 @@ void FSService::deleteFile(u32 messagePointer) { mem.write32(messagePointer + 4, static_cast(res)); } -void FSService::deleteDirectory(u32 messagePointer) { - const Handle archiveHandle = Handle(mem.read64(messagePointer + 8)); - const u32 filePathType = mem.read32(messagePointer + 16); - const u32 filePathSize = mem.read32(messagePointer + 20); - const u32 filePathPointer = mem.read32(messagePointer + 28); - log("FS::DeleteDirectory\n"); - - Helpers::warn("Stubbed FS::DeleteDirectory call!"); - mem.write32(messagePointer, IPC::responseHeader(0x806, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - void FSService::getFormatInfo(u32 messagePointer) { const u32 archiveID = mem.read32(messagePointer + 4); const u32 pathType = mem.read32(messagePointer + 8); @@ -467,9 +440,8 @@ void FSService::formatSaveData(u32 messagePointer) { log("FS::FormatSaveData\n"); const u32 archiveID = mem.read32(messagePointer + 4); - if (archiveID != ArchiveID::SaveData) { + if (archiveID != ArchiveID::SaveData) Helpers::panic("FS::FormatSaveData: Archive is not SaveData"); - } // Read path and path info const u32 pathType = mem.read32(messagePointer + 8); @@ -479,24 +451,24 @@ void FSService::formatSaveData(u32 messagePointer) { // Size of a block. Seems to always be 0x200 const u32 blockSize = mem.read32(messagePointer + 16); - if (blockSize != 0x200 && blockSize != 0x1000) { + if (blockSize != 0x200 && blockSize != 0x1000) Helpers::panic("FS::FormatSaveData: Invalid SaveData block size"); - } - const u32 directoryNum = mem.read32(messagePointer + 20); // Max number of directories - const u32 fileNum = mem.read32(messagePointer + 24); // Max number of files - const u32 directoryBucketNum = mem.read32(messagePointer + 28); // Not sure what a directory bucket is...? - const u32 fileBucketNum = mem.read32(messagePointer + 32); // Same here + const u32 directoryNum = mem.read32(messagePointer + 20); // Max number of directories + const u32 fileNum = mem.read32(messagePointer + 24); // Max number of files + const u32 directoryBucketNum = mem.read32(messagePointer + 28); // Not sure what a directory bucket is...? + const u32 fileBucketNum = mem.read32(messagePointer + 32); // Same here const bool duplicateData = mem.read8(messagePointer + 36) != 0; - ArchiveBase::FormatInfo info{ + ArchiveBase::FormatInfo info { .size = blockSize * 0x200, .numOfDirectories = directoryNum, .numOfFiles = fileNum, - .duplicateData = duplicateData, + .duplicateData = duplicateData }; saveData.format(path, info); + mem.write32(messagePointer, IPC::responseHeader(0x84C, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } @@ -510,8 +482,8 @@ void FSService::deleteExtSaveData(u32 messagePointer) { log("FS::DeleteExtSaveData (media type = %d, saveID = %llx) (stubbed)\n", mediaType, saveID); mem.write32(messagePointer, IPC::responseHeader(0x0852, 1, 0)); - // TODO: We can't properly implement this yet until we properly support title/save IDs. We will stub this and insert a warning for now. Required - // for Planet Robobot When we properly implement it, it will just be a recursive directory deletion + // TODO: We can't properly implement this yet until we properly support title/save IDs. We will stub this and insert a warning for now. Required for Planet Robobot + // When we properly implement it, it will just be a recursive directory deletion mem.write32(messagePointer + 4, Result::Success); } @@ -519,8 +491,7 @@ void FSService::createExtSaveData(u32 messagePointer) { Helpers::warn("Stubbed call to FS::CreateExtSaveData!"); // First 4 words of parameters are the ExtSaveData info // https://www.3dbrew.org/wiki/Filesystem_services#ExtSaveDataInfo - // This creates the ExtSaveData with the specified saveid in the specified media type. It stores the SMDH as "icon" in the root of the created - // directory. + // This creates the ExtSaveData with the specified saveid in the specified media type. It stores the SMDH as "icon" in the root of the created directory. const u8 mediaType = mem.read8(messagePointer + 4); const u64 saveID = mem.read64(messagePointer + 8); const u32 numOfDirectories = mem.read32(messagePointer + 20); @@ -540,13 +511,18 @@ void FSService::formatThisUserSaveData(u32 messagePointer) { log("FS::FormatThisUserSaveData\n"); const u32 blockSize = mem.read32(messagePointer + 4); - const u32 directoryNum = mem.read32(messagePointer + 8); // Max number of directories - const u32 fileNum = mem.read32(messagePointer + 12); // Max number of files - const u32 directoryBucketNum = mem.read32(messagePointer + 16); // Not sure what a directory bucket is...? - const u32 fileBucketNum = mem.read32(messagePointer + 20); // Same here + const u32 directoryNum = mem.read32(messagePointer + 8); // Max number of directories + const u32 fileNum = mem.read32(messagePointer + 12); // Max number of files + const u32 directoryBucketNum = mem.read32(messagePointer + 16); // Not sure what a directory bucket is...? + const u32 fileBucketNum = mem.read32(messagePointer + 20); // Same here const bool duplicateData = mem.read8(messagePointer + 24) != 0; - ArchiveBase::FormatInfo info{.size = blockSize * 0x200, .numOfDirectories = directoryNum, .numOfFiles = fileNum, .duplicateData = duplicateData}; + ArchiveBase::FormatInfo info { + .size = blockSize * 0x200, + .numOfDirectories = directoryNum, + .numOfFiles = fileNum, + .duplicateData = duplicateData + }; FSPath emptyPath; mem.write32(messagePointer, IPC::responseHeader(0x080F, 1, 0)); @@ -572,16 +548,18 @@ void FSService::controlArchive(u32 messagePointer) { } switch (action) { - case 0: // Commit save data changes. Shouldn't need us to do anything + case 0: // Commit save data changes. Shouldn't need us to do anything mem.write32(messagePointer + 4, Result::Success); break; - case 1: // Retrieves a file's last-modified timestamp. Seen in DDLC, stubbed for the moment + case 1: // Retrieves a file's last-modified timestamp. Seen in DDLC, stubbed for the moment Helpers::warn("FS::ControlArchive: Tried to retrieve a file's last-modified timestamp"); mem.write32(messagePointer + 4, Result::Success); break; - default: Helpers::panic("Unimplemented action for ControlArchive (action = %X)\n", action); break; + default: + Helpers::panic("Unimplemented action for ControlArchive (action = %X)\n", action); + break; } } @@ -665,9 +643,6 @@ void FSService::getThisSaveDataSecureValue(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x86F, 1, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, 0); // Secure value does not exist - mem.write8(messagePointer + 12, 1); // TODO: What is this? - mem.write64(messagePointer + 16, 0); // Secure value } void FSService::setThisSaveDataSecureValue(u32 messagePointer) { @@ -690,91 +665,21 @@ void FSService::theGameboyVCFunction(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +// Shows whether an SD card is inserted. At the moment stubbed to no +constexpr bool sdInserted = false; + void FSService::isSdmcDetected(u32 messagePointer) { log("FS::IsSdmcDetected\n"); - mem.write32(messagePointer, IPC::responseHeader(0x817, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, config.sdCardInserted ? 1 : 0); + mem.write8(messagePointer + 8, sdInserted ? 1 : 0); } -// We consider our SD card to always be writable if one is inserted for now -// However we do make sure to respect the configs and properly return the correct value here +// We consider our SD card to always be writable if oen is inserted for now +// So isSdmcWritable returns 1 if an SD card is inserted (because it's always writable) and 0 if not. void FSService::isSdmcWritable(u32 messagePointer) { log("FS::isSdmcWritable\n"); - const bool writeProtected = (!config.sdCardInserted) || (config.sdCardInserted && config.sdWriteProtected); - mem.write32(messagePointer, IPC::responseHeader(0x818, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, writeProtected ? 0 : 1); -} - -void FSService::cardSlotIsInserted(u32 messagePointer) { - log("FS::CardSlotIsInserted\n"); - constexpr bool cardInserted = false; - - mem.write32(messagePointer, IPC::responseHeader(0x821, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, cardInserted ? 1 : 0); -} - -void FSService::renameFile(u32 messagePointer) { - log("FS::RenameFile\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x805, 1, 0)); - - const Handle sourceArchiveHandle = mem.read64(messagePointer + 8); - const Handle destArchiveHandle = mem.read64(messagePointer + 24); - - // Read path info - const u32 sourcePathType = mem.read32(messagePointer + 16); - const u32 sourcePathSize = mem.read32(messagePointer + 20); - const u32 sourcePathPointer = mem.read32(messagePointer + 44); - const FSPath sourcePath = readPath(sourcePathType, sourcePathPointer, sourcePathSize); - - const u32 destPathType = mem.read32(messagePointer + 32); - const u32 destPathSize = mem.read32(messagePointer + 36); - const u32 destPathPointer = mem.read32(messagePointer + 52); - const FSPath destPath = readPath(destPathType, destPathPointer, destPathSize); - - const auto sourceArchiveObject = kernel.getObject(sourceArchiveHandle, KernelObjectType::Archive); - const auto destArchiveObject = kernel.getObject(destArchiveHandle, KernelObjectType::Archive); - - if (sourceArchiveObject == nullptr || destArchiveObject == nullptr) { - Helpers::panic("FS::RenameFile: One of the archive handles is invalid"); - } - - const auto sourceArchive = sourceArchiveObject->getData(); - const auto destArchive = destArchiveObject->getData(); - if (!sourceArchive->isOpen || !destArchive->isOpen) { - Helpers::warn("FS::RenameFile: Not both archive sessions are open"); - } - - // This returns error 0xE0C046F8 according to 3DBrew - if (sourceArchive->archive->name() != destArchive->archive->name()) { - Helpers::panic("FS::RenameFile: Both archive handles should belong to the same archive"); - } - - // Everything is OK, let's do the rename. Both archives should match so we don't need the dest anymore - const HorizonResult res = sourceArchive->archive->renameFile(sourcePath, destPath); - mem.write32(messagePointer + 4, static_cast(res)); -} - -void FSService::getSdmcArchiveResource(u32 messagePointer) { - log("FS::GetSdmcArchiveResource"); // For the time being, return the same stubbed archive resource for every media type - - static constexpr ArchiveResource resource = { - .sectorSize = 512, - .clusterSize = 16_KB, - .partitionCapacityInClusters = 0x80000, // 0x80000 * 16 KB = 8GB - .freeSpaceInClusters = 0x80000, // Same here - }; - - mem.write32(messagePointer, IPC::responseHeader(0x814, 5, 0)); - mem.write32(messagePointer + 4, Result::Success); - - mem.write32(messagePointer + 8, resource.sectorSize); - mem.write32(messagePointer + 12, resource.clusterSize); - mem.write32(messagePointer + 16, resource.partitionCapacityInClusters); - mem.write32(messagePointer + 20, resource.freeSpaceInClusters); + mem.write8(messagePointer + 8, sdInserted ? 1 : 0); } \ No newline at end of file diff --git a/src/core/services/gsp_gpu.cpp b/src/core/services/gsp_gpu.cpp index 37964d83..0e27c0ec 100644 --- a/src/core/services/gsp_gpu.cpp +++ b/src/core/services/gsp_gpu.cpp @@ -1,5 +1,4 @@ #include "services/gsp_gpu.hpp" - #include "PICA/regs.hpp" #include "ipc.hpp" #include "kernel.hpp" @@ -8,22 +7,18 @@ namespace ServiceCommands { enum : u32 { SetAxiConfigQoSMode = 0x00100040, - ReadHwRegs = 0x00040080, AcquireRight = 0x00160042, RegisterInterruptRelayQueue = 0x00130042, WriteHwRegs = 0x00010082, WriteHwRegsWithMask = 0x00020084, SetBufferSwap = 0x00050200, FlushDataCache = 0x00080082, - InvalidateDataCache = 0x00090082, SetLCDForceBlack = 0x000B0040, TriggerCmdReqQueue = 0x000C0000, - ReleaseRight = 0x00170000, ImportDisplayCaptureInfo = 0x00180000, SaveVramSysArea = 0x00190000, - RestoreVramSysArea = 0x001A0000, SetInternalPriorities = 0x001E0080, - StoreDataCache = 0x001F0082, + StoreDataCache = 0x001F0082 }; } @@ -40,7 +35,7 @@ namespace GXCommands { } void GPUService::reset() { - privilegedProcess = 0xFFFFFFFF; // Set the privileged process to an invalid handle + privilegedProcess = 0xFFFFFFFF; // Set the privileged process to an invalid handle interruptEvent = std::nullopt; gspThreadCount = 0; sharedMem = nullptr; @@ -54,22 +49,15 @@ void GPUService::handleSyncRequest(u32 messagePointer) { case ServiceCommands::FlushDataCache: flushDataCache(messagePointer); break; case ServiceCommands::ImportDisplayCaptureInfo: importDisplayCaptureInfo(messagePointer); break; case ServiceCommands::RegisterInterruptRelayQueue: registerInterruptRelayQueue(messagePointer); break; - case ServiceCommands::ReleaseRight: releaseRight(messagePointer); break; - case ServiceCommands::RestoreVramSysArea: restoreVramSysArea(messagePointer); break; case ServiceCommands::SaveVramSysArea: saveVramSysArea(messagePointer); break; case ServiceCommands::SetAxiConfigQoSMode: setAxiConfigQoSMode(messagePointer); break; case ServiceCommands::SetBufferSwap: setBufferSwap(messagePointer); break; case ServiceCommands::SetInternalPriorities: setInternalPriorities(messagePointer); break; case ServiceCommands::SetLCDForceBlack: setLCDForceBlack(messagePointer); break; case ServiceCommands::StoreDataCache: storeDataCache(messagePointer); break; - case ServiceCommands::ReadHwRegs: readHwRegs(messagePointer); break; case ServiceCommands::WriteHwRegs: writeHwRegs(messagePointer); break; case ServiceCommands::WriteHwRegsWithMask: writeHwRegsWithMask(messagePointer); break; - case ServiceCommands::InvalidateDataCache: invalidateDataCache(messagePointer); break; - default: - Helpers::warn("GPU service requested. Command: %08X\n", command); - mem.write32(messagePointer + 4, Result::Success); - break; + default: Helpers::panic("GPU service requested. Command: %08X\n", command); } } @@ -92,16 +80,6 @@ void GPUService::acquireRight(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void GPUService::releaseRight(u32 messagePointer) { - log("GSP::GPU::ReleaseRight\n"); - if (privilegedProcess == currentPID) { - privilegedProcess = 0xFFFFFFFF; - } - - mem.write32(messagePointer, IPC::responseHeader(0x17, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - // TODO: What is the flags field meant to be? // What is the "GSP module thread index" meant to be? // How does the shared memory handle thing work? @@ -117,39 +95,44 @@ void GPUService::registerInterruptRelayQueue(u32 messagePointer) { log("GSP::GPU::RegisterInterruptRelayQueue (flags = %X, event handle = %X)\n", flags, eventHandle); const auto event = kernel.getObject(eventHandle, KernelObjectType::Event); - if (event == nullptr) { // Check if interrupt event is invalid + if (event == nullptr) { // Check if interrupt event is invalid Helpers::panic("Invalid event passed to GSP::GPU::RegisterInterruptRelayQueue"); } else { interruptEvent = eventHandle; } mem.write32(messagePointer, IPC::responseHeader(0x13, 2, 2)); - mem.write32(messagePointer + 4, Result::GSP::SuccessRegisterIRQ); // First init returns a unique result - mem.write32(messagePointer + 8, 0); // TODO: GSP module thread index - mem.write32(messagePointer + 12, 0); // Translation descriptor + mem.write32(messagePointer + 4, Result::GSP::SuccessRegisterIRQ); // First init returns a unique result + mem.write32(messagePointer + 8, 0); // TODO: GSP module thread index + mem.write32(messagePointer + 12, 0); // Translation descriptor mem.write32(messagePointer + 16, KernelHandles::GSPSharedMemHandle); } void GPUService::requestInterrupt(GPUInterrupt type) { - if (sharedMem == nullptr) [[unlikely]] { // Shared memory hasn't been set up yet + // HACK: Signal DSP events on GPU interrupt for now until we have the DSP since games need DSP events + // Maybe there's a better alternative? + kernel.signalDSPEvents(); + + if (sharedMem == nullptr) [[unlikely]] { // Shared memory hasn't been set up yet return; } // TODO: Add support for multiple GSP threads - u8 index = sharedMem[0]; // The interrupt block is normally located at sharedMem + processGSPIndex*0x40 + u8 index = sharedMem[0]; // The interrupt block is normally located at sharedMem + processGSPIndex*0x40 u8& interruptCount = sharedMem[1]; u8 flagIndex = (index + interruptCount) % 0x34; interruptCount++; - sharedMem[2] = 0; // Set error code to 0 - sharedMem[0xC + flagIndex] = static_cast(type); // Write interrupt type to queue + sharedMem[2] = 0; // Set error code to 0 + sharedMem[0xC + flagIndex] = static_cast(type); // Write interrupt type to queue // Update framebuffer info in shared memory // Most new games check to make sure that the "flag" byte of the framebuffer info header is set to 0 // Not emulating this causes Yoshi's Wooly World, Captain Toad, Metroid 2 et al to hang if (type == GPUInterrupt::VBlank0 || type == GPUInterrupt::VBlank1) { - int screen = static_cast(type) - static_cast(GPUInterrupt::VBlank0); // 0 for top screen, 1 for bottom - FramebufferUpdate* update = getFramebufferInfo(screen); + int screen = static_cast(type) - static_cast(GPUInterrupt::VBlank0); // 0 for top screen, 1 for bottom + // TODO: Offset depends on GSP thread being triggered + FramebufferUpdate* update = reinterpret_cast(&sharedMem[0x200 + screen * sizeof(FramebufferUpdate)]); if (update->dirtyFlag & 1) { setBufferSwapImpl(screen, update->framebufferInfo[update->index]); @@ -163,45 +146,9 @@ void GPUService::requestInterrupt(GPUInterrupt type) { } } -void GPUService::readHwRegs(u32 messagePointer) { - u32 ioAddr = mem.read32(messagePointer + 4); // GPU address based at 0x1EB00000, word aligned - const u32 size = mem.read32(messagePointer + 8); // Size in bytes - const u32 initialDataPointer = mem.read32(messagePointer + 0x104); - u32 dataPointer = initialDataPointer; - log("GSP::GPU::ReadHwRegs (GPU address = %08X, size = %X, data address = %08X)\n", ioAddr, size, dataPointer); - - // Check for alignment - if ((size & 3) || (ioAddr & 3) || (dataPointer & 3)) { - Helpers::panic("GSP::GPU::ReadHwRegs misalignment"); - } - - if (size > 0x80) { - Helpers::panic("GSP::GPU::ReadHwRegs size too big"); - } - - if (ioAddr >= 0x420000) { - Helpers::panic("GSP::GPU::ReadHwRegs offset too big"); - } - - ioAddr += 0x1EB00000; - // Read the PICA registers and write them to the output buffer - for (u32 i = 0; i < size; i += 4) { - const u32 value = gpu.readReg(ioAddr); - mem.write32(dataPointer, value); - dataPointer += 4; - ioAddr += 4; - } - - mem.write32(messagePointer, IPC::responseHeader(0x4, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - // Translation descriptor. TODO: Make a more generic interface for this - mem.write32(messagePointer + 8, u32(size << 14) | 2); - mem.write32(messagePointer + 12, initialDataPointer); -} - void GPUService::writeHwRegs(u32 messagePointer) { - u32 ioAddr = mem.read32(messagePointer + 4); // GPU address based at 0x1EB00000, word aligned - const u32 size = mem.read32(messagePointer + 8); // Size in bytes + u32 ioAddr = mem.read32(messagePointer + 4); // GPU address based at 0x1EB00000, word aligned + const u32 size = mem.read32(messagePointer + 8); // Size in bytes u32 dataPointer = mem.read32(messagePointer + 16); log("GSP::GPU::writeHwRegs (GPU address = %08X, size = %X, data address = %08X)\n", ioAddr, size, dataPointer); @@ -233,14 +180,14 @@ void GPUService::writeHwRegs(u32 messagePointer) { // Update sequential GPU registers using an array of data and mask values using this formula // GPU register = (register & ~mask) | (data & mask). void GPUService::writeHwRegsWithMask(u32 messagePointer) { - u32 ioAddr = mem.read32(messagePointer + 4); // GPU address based at 0x1EB00000, word aligned - const u32 size = mem.read32(messagePointer + 8); // Size in bytes + u32 ioAddr = mem.read32(messagePointer + 4); // GPU address based at 0x1EB00000, word aligned + const u32 size = mem.read32(messagePointer + 8); // Size in bytes - u32 dataPointer = mem.read32(messagePointer + 16); // Data pointer - u32 maskPointer = mem.read32(messagePointer + 24); // Mask pointer + u32 dataPointer = mem.read32(messagePointer + 16); // Data pointer + u32 maskPointer = mem.read32(messagePointer + 24); // Mask pointer - log("GSP::GPU::writeHwRegsWithMask (GPU address = %08X, size = %X, data address = %08X, mask address = %08X)\n", ioAddr, size, dataPointer, - maskPointer); + log("GSP::GPU::writeHwRegsWithMask (GPU address = %08X, size = %X, data address = %08X, mask address = %08X)\n", + ioAddr, size, dataPointer, maskPointer); // Check for alignment if ((size & 3) || (ioAddr & 3) || (dataPointer & 3) || (maskPointer & 3)) { @@ -283,16 +230,6 @@ void GPUService::flushDataCache(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void GPUService::invalidateDataCache(u32 messagePointer) { - u32 address = mem.read32(messagePointer + 4); - u32 size = mem.read32(messagePointer + 8); - u32 processHandle = handle = mem.read32(messagePointer + 16); - log("GSP::GPU::InvalidateDataCache(address = %08X, size = %X, process = %X)\n", address, size, processHandle); - - mem.write32(messagePointer, IPC::responseHeader(0x9, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - void GPUService::storeDataCache(u32 messagePointer) { u32 address = mem.read32(messagePointer + 4); u32 size = mem.read32(messagePointer + 8); @@ -339,7 +276,7 @@ void GPUService::setBufferSwap(u32 messagePointer) { info.displayFb = mem.read32(messagePointer + 28); // Selects either framebuffer A or B log("GSP::GPU::SetBufferSwap\n"); - Helpers::warn("Untested GSP::GPU::SetBufferSwap call"); + Helpers::panic("Untested GSP::GPU::SetBufferSwap call"); setBufferSwapImpl(screenId, info); mem.write32(messagePointer, IPC::responseHeader(0x05, 1, 0)); @@ -354,11 +291,11 @@ void GPUService::setInternalPriorities(u32 messagePointer) { } void GPUService::processCommandBuffer() { - if (sharedMem == nullptr) [[unlikely]] { // Shared memory hasn't been set up yet + if (sharedMem == nullptr) [[unlikely]] { // Shared memory hasn't been set up yet return; } - constexpr int threadCount = 1; // TODO: More than 1 thread can have GSP commands at a time + constexpr int threadCount = 1; // TODO: More than 1 thread can have GSP commands at a time for (int t = 0; t < threadCount; t++) { u8* cmdBuffer = &sharedMem[0x800 + t * 0x200]; u8& commandsLeft = cmdBuffer[1]; @@ -411,9 +348,9 @@ void GPUService::memoryFill(u32* cmd) { u32 control = cmd[7]; // buf0 parameters - u32 start0 = cmd[1]; // Start address for the fill. If 0, don't fill anything - u32 value0 = cmd[2]; // Value to fill the framebuffer with - u32 end0 = cmd[3]; // End address for the fill + u32 start0 = cmd[1]; // Start address for the fill. If 0, don't fill anything + u32 value0 = cmd[2]; // Value to fill the framebuffer with + u32 end0 = cmd[3]; // End address for the fill u32 control0 = control & 0xffff; // buf1 parameters @@ -442,7 +379,7 @@ void GPUService::triggerDisplayTransfer(u32* cmd) { log("GSP::GPU::TriggerDisplayTransfer (Stubbed)\n"); gpu.displayTransfer(inputAddr, outputAddr, inputSize, outputSize, flags); - requestInterrupt(GPUInterrupt::PPF); // Send "Display transfer finished" interrupt + requestInterrupt(GPUInterrupt::PPF); // Send "Display transfer finished" interrupt } void GPUService::triggerDMARequest(u32* cmd) { @@ -456,14 +393,22 @@ void GPUService::triggerDMARequest(u32* cmd) { requestInterrupt(GPUInterrupt::DMA); } -void GPUService::flushCacheRegions(u32* cmd) { log("GSP::GPU::FlushCacheRegions (Stubbed)\n"); } +void GPUService::flushCacheRegions(u32* cmd) { + log("GSP::GPU::FlushCacheRegions (Stubbed)\n"); +} void GPUService::setBufferSwapImpl(u32 screenId, const FramebufferInfo& info) { using namespace PICA::ExternalRegs; static constexpr std::array fbAddresses = { - Framebuffer0AFirstAddr, Framebuffer0BFirstAddr, Framebuffer1AFirstAddr, Framebuffer1BFirstAddr, - Framebuffer0ASecondAddr, Framebuffer0BSecondAddr, Framebuffer1ASecondAddr, Framebuffer1BSecondAddr, + Framebuffer0AFirstAddr, + Framebuffer0BFirstAddr, + Framebuffer1AFirstAddr, + Framebuffer1BFirstAddr, + Framebuffer0ASecondAddr, + Framebuffer0BSecondAddr, + Framebuffer1ASecondAddr, + Framebuffer1BSecondAddr, }; auto& regs = gpu.getExtRegisters(); @@ -473,7 +418,12 @@ void GPUService::setBufferSwapImpl(u32 screenId, const FramebufferInfo& info) { regs[fbAddresses[fbIndex + 1]] = VaddrToPaddr(info.rightFramebufferVaddr); static constexpr std::array configAddresses = { - Framebuffer0Config, Framebuffer0Select, Framebuffer0Stride, Framebuffer1Config, Framebuffer1Select, Framebuffer1Stride, + Framebuffer0Config, + Framebuffer0Select, + Framebuffer0Stride, + Framebuffer1Config, + Framebuffer1Select, + Framebuffer1Stride, }; const u32 configIndex = screenId * 3; @@ -484,14 +434,14 @@ void GPUService::setBufferSwapImpl(u32 screenId, const FramebufferInfo& info) { // Actually send command list (aka display list) to GPU void GPUService::processCommandList(u32* cmd) { - const u32 address = cmd[1] & ~7; // Buffer address - const u32 size = cmd[2] & ~3; // Buffer size in bytes - [[maybe_unused]] const bool updateGas = cmd[3] == 1; // Update gas additive blend results (0 = don't update, 1 = update) - [[maybe_unused]] const bool flushBuffer = cmd[7] == 1; // Flush buffer (0 = don't flush, 1 = flush) + const u32 address = cmd[1] & ~7; // Buffer address + const u32 size = cmd[2] & ~3; // Buffer size in bytes + [[maybe_unused]] const bool updateGas = cmd[3] == 1; // Update gas additive blend results (0 = don't update, 1 = update) + [[maybe_unused]] const bool flushBuffer = cmd[7] == 1; // Flush buffer (0 = don't flush, 1 = flush) log("GPU::GSP::processCommandList. Address: %08X, size in bytes: %08X\n", address, size); gpu.startCommandList(address, size); - requestInterrupt(GPUInterrupt::P3D); // Send an IRQ when command list processing is over + requestInterrupt(GPUInterrupt::P3D); // Send an IRQ when command list processing is over } // TODO: Emulate the transfer engine & its registers @@ -520,50 +470,10 @@ void GPUService::saveVramSysArea(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void GPUService::restoreVramSysArea(u32 messagePointer) { - Helpers::warn("GSP::GPU::RestoreVramSysArea (stubbed)"); - - mem.write32(messagePointer, IPC::responseHeader(0x1A, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - // Used in similar fashion to the SaveVramSysArea function void GPUService::importDisplayCaptureInfo(u32 messagePointer) { Helpers::warn("GSP::GPU::ImportDisplayCaptureInfo (stubbed)"); mem.write32(messagePointer, IPC::responseHeader(0x18, 9, 0)); mem.write32(messagePointer + 4, Result::Success); - - if (sharedMem == nullptr) { - Helpers::warn("GSP::GPU::ImportDisplayCaptureInfo called without GSP module being properly initialized!"); - return; - } - - FramebufferUpdate* topScreen = getTopFramebufferInfo(); - FramebufferUpdate* bottomScreen = getBottomFramebufferInfo(); - - // Capture the relevant data for both screens and return them to the caller - CaptureInfo topScreenCapture = { - .leftFramebuffer = topScreen->framebufferInfo[topScreen->index].leftFramebufferVaddr, - .rightFramebuffer = topScreen->framebufferInfo[topScreen->index].rightFramebufferVaddr, - .format = topScreen->framebufferInfo[topScreen->index].format, - .stride = topScreen->framebufferInfo[topScreen->index].stride, - }; - - CaptureInfo bottomScreenCapture = { - .leftFramebuffer = bottomScreen->framebufferInfo[bottomScreen->index].leftFramebufferVaddr, - .rightFramebuffer = bottomScreen->framebufferInfo[bottomScreen->index].rightFramebufferVaddr, - .format = bottomScreen->framebufferInfo[bottomScreen->index].format, - .stride = bottomScreen->framebufferInfo[bottomScreen->index].stride, - }; - - mem.write32(messagePointer + 8, topScreenCapture.leftFramebuffer); - mem.write32(messagePointer + 12, topScreenCapture.rightFramebuffer); - mem.write32(messagePointer + 16, topScreenCapture.format); - mem.write32(messagePointer + 20, topScreenCapture.stride); - - mem.write32(messagePointer + 24, bottomScreenCapture.leftFramebuffer); - mem.write32(messagePointer + 28, bottomScreenCapture.rightFramebuffer); - mem.write32(messagePointer + 32, bottomScreenCapture.format); - mem.write32(messagePointer + 36, bottomScreenCapture.stride); } \ No newline at end of file diff --git a/src/core/services/gsp_lcd.cpp b/src/core/services/gsp_lcd.cpp index d2e0ac21..d018166b 100644 --- a/src/core/services/gsp_lcd.cpp +++ b/src/core/services/gsp_lcd.cpp @@ -1,10 +1,8 @@ #include "services/gsp_lcd.hpp" - #include "ipc.hpp" namespace LCDCommands { enum : u32 { - SetLedForceOff = 0x00130040, }; } @@ -13,16 +11,6 @@ void LCDService::reset() {} void LCDService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { - case LCDCommands::SetLedForceOff: setLedForceOff(messagePointer); break; - default: Helpers::panic("LCD service requested. Command: %08X\n", command); } -} - -void LCDService::setLedForceOff(u32 messagePointer) { - const u8 state = mem.read8(messagePointer + 4); - log("LCD::SetLedForceOff (state = %X)\n", state); - - mem.write32(messagePointer, IPC::responseHeader(0x13, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/hid.cpp b/src/core/services/hid.cpp index c149a2a3..ef6cbb41 100644 --- a/src/core/services/hid.cpp +++ b/src/core/services/hid.cpp @@ -1,12 +1,7 @@ #include "services/hid.hpp" - -#include -#include -#include - #include "ipc.hpp" #include "kernel.hpp" -#include "services/ir/circlepad_pro.hpp" +#include namespace HIDCommands { enum : u32 { @@ -40,9 +35,6 @@ void HIDService::reset() { circlePadX = circlePadY = 0; touchScreenX = touchScreenY = 0; roll = pitch = yaw = 0; - accelX = accelY = accelZ = 0; - - cStickX = cStickY = IR::CirclePadPro::ButtonState::C_STICK_CENTER; } void HIDService::handleSyncRequest(u32 messagePointer) { @@ -94,23 +86,24 @@ void HIDService::disableGyroscopeLow(u32 messagePointer) { void HIDService::getGyroscopeLowCalibrateParam(u32 messagePointer) { log("HID::GetGyroscopeLowCalibrateParam\n"); - constexpr s16 unit = 6700; // Approximately from Citra which took it from hardware + constexpr s16 unit = 6700; // Approximately from Citra which took it from hardware mem.write32(messagePointer, IPC::responseHeader(0x16, 6, 0)); mem.write32(messagePointer + 4, Result::Success); // Fill calibration data (for x/y/z depending on i) for (int i = 0; i < 3; i++) { - const u32 pointer = messagePointer + 8 + i * 3 * sizeof(u16); // Pointer to write the calibration info for the current coordinate + const u32 pointer = messagePointer + 8 + i * 3 * sizeof(u16); // Pointer to write the calibration info for the current coordinate - mem.write16(pointer, 0); // Zero point - mem.write16(pointer + 1 * sizeof(u16), unit); // Positive unit point - mem.write16(pointer + 2 * sizeof(u16), -unit); // Negative unit point + mem.write16(pointer, 0); // Zero point + mem.write16(pointer + 1 * sizeof(u16), unit); // Positive unit point + mem.write16(pointer + 2 * sizeof(u16), -unit); // Negative unit point } } void HIDService::getGyroscopeCoefficient(u32 messagePointer) { log("HID::GetGyroscopeLowRawToDpsCoefficient\n"); + constexpr float gyroscopeCoeff = 14.375f; // Same as retail 3DS mem.write32(messagePointer, IPC::responseHeader(0x15, 2, 0)); mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 8, Helpers::bit_cast(gyroscopeCoeff)); @@ -118,6 +111,7 @@ void HIDService::getGyroscopeCoefficient(u32 messagePointer) { // The volume here is in the range [0, 0x3F] // It is read directly from I2C Device 3 register 0x09 +// Since we currently do not have audio, set the volume a bit below max (0x30) void HIDService::getSoundVolume(u32 messagePointer) { log("HID::GetSoundVolume\n"); constexpr u8 volume = 0x30; @@ -140,9 +134,9 @@ void HIDService::getIPCHandles(u32 messagePointer) { } mem.write32(messagePointer, IPC::responseHeader(0xA, 1, 7)); - mem.write32(messagePointer + 4, Result::Success); // Result code - mem.write32(messagePointer + 8, 0x14000000); // Translation descriptor - mem.write32(messagePointer + 12, KernelHandles::HIDSharedMemHandle); // Shared memory handle + mem.write32(messagePointer + 4, Result::Success); // Result code + mem.write32(messagePointer + 8, 0x14000000); // Translation descriptor + mem.write32(messagePointer + 12, KernelHandles::HIDSharedMemHandle); // Shared memory handle // Write HID event handles for (int i = 0; i < events.size(); i++) { @@ -155,27 +149,23 @@ void HIDService::updateInputs(u64 currentTick) { if (sharedMem) { // First, update the pad state if (nextPadIndex == 0) { - writeSharedMem(0x8, readSharedMem(0x0)); // Copy previous tick count - writeSharedMem(0x0, currentTick); // Write new tick count + writeSharedMem(0x8, readSharedMem(0x0)); // Copy previous tick count + writeSharedMem(0x0, currentTick); // Write new tick count } - // Mask out the CirclePadPro buttons when writing to HID shared memory, since the actual OS doesn't store anything in those bits - const u32 currentButtons = newButtons & ~HID::Keys::CirclePadProButtons; - const u32 previousButtons = oldButtons & ~HID::Keys::CirclePadProButtons; - oldButtons = newButtons; - - writeSharedMem(0x10, nextPadIndex); // Index last updated by the HID module - writeSharedMem(0x1C, currentButtons); // Current PAD state - writeSharedMem(0x20, circlePadX); // Current circle pad state + writeSharedMem(0x10, nextPadIndex); // Index last updated by the HID module + writeSharedMem(0x1C, newButtons); // Current PAD state + writeSharedMem(0x20, circlePadX); // Current circle pad state writeSharedMem(0x22, circlePadY); - const size_t padEntryOffset = 0x28 + (nextPadIndex * 0x10); // Offset in the array of 8 pad entries - nextPadIndex = (nextPadIndex + 1) % 8; // Move to next entry + const size_t padEntryOffset = 0x28 + (nextPadIndex * 0x10); // Offset in the array of 8 pad entries + nextPadIndex = (nextPadIndex + 1) % 8; // Move to next entry - const u32 pressed = (currentButtons ^ previousButtons) & currentButtons; // Pressed buttons - const u32 released = (currentButtons ^ previousButtons) & previousButtons; // Released buttons + const u32 pressed = (newButtons ^ oldButtons) & newButtons; // Pressed buttons + const u32 released = (newButtons ^ oldButtons) & oldButtons; // Released buttons + oldButtons = newButtons; - writeSharedMem(padEntryOffset, currentButtons); + writeSharedMem(padEntryOffset, newButtons); writeSharedMem(padEntryOffset + 4, pressed); writeSharedMem(padEntryOffset + 8, released); writeSharedMem(padEntryOffset + 12, circlePadX); @@ -183,12 +173,12 @@ void HIDService::updateInputs(u64 currentTick) { // Next, update touchscreen state if (nextTouchscreenIndex == 0) { - writeSharedMem(0xB0, readSharedMem(0xA8)); // Copy previous tick count - writeSharedMem(0xA8, currentTick); // Write new tick count + writeSharedMem(0xB0, readSharedMem(0xA8)); // Copy previous tick count + writeSharedMem(0xA8, currentTick); // Write new tick count } - writeSharedMem(0xB8, nextTouchscreenIndex); // Index last updated by the HID module - const size_t touchEntryOffset = 0xC8 + (nextTouchscreenIndex * 8); // Offset in the array of 8 touchscreen entries - nextTouchscreenIndex = (nextTouchscreenIndex + 1) % 8; // Move to next entry + writeSharedMem(0xB8, nextTouchscreenIndex); // Index last updated by the HID module + const size_t touchEntryOffset = 0xC8 + (nextTouchscreenIndex * 8); // Offset in the array of 8 touchscreen entries + nextTouchscreenIndex = (nextTouchscreenIndex + 1) % 8; // Move to next entry writeSharedMem(touchEntryOffset, touchScreenX); writeSharedMem(touchEntryOffset + 2, touchScreenY); @@ -196,108 +186,36 @@ void HIDService::updateInputs(u64 currentTick) { // Next, update accelerometer state if (nextAccelerometerIndex == 0) { - writeSharedMem(0x110, readSharedMem(0x108)); // Copy previous tick count - writeSharedMem(0x108, currentTick); // Write new tick count + writeSharedMem(0x110, readSharedMem(0x108)); // Copy previous tick count + writeSharedMem(0x108, currentTick); // Write new tick count } - writeSharedMem(0x118, nextAccelerometerIndex); // Index last updated by the HID module - const size_t accelEntryOffset = 0x128 + (nextAccelerometerIndex * 6); // Offset in the array of 8 accelerometer entries - - // Raw data of current accelerometer entry - // TODO: How is the "raw" data actually calculated? - s16* accelerometerDataRaw = getSharedMemPointer(0x120); - accelerometerDataRaw[0] = accelX; - accelerometerDataRaw[1] = accelY; - accelerometerDataRaw[2] = accelZ; - - // Accelerometer entry in entry table - s16* accelerometerData = getSharedMemPointer(accelEntryOffset); - accelerometerData[0] = accelX; - accelerometerData[1] = accelY; - accelerometerData[2] = accelZ; - nextAccelerometerIndex = (nextAccelerometerIndex + 1) % 8; // Move to next entry + writeSharedMem(0x118, nextAccelerometerIndex); // Index last updated by the HID module + nextAccelerometerIndex = (nextAccelerometerIndex + 1) % 8; // Move to next entry // Next, update gyro state if (nextGyroIndex == 0) { - writeSharedMem(0x160, readSharedMem(0x158)); // Copy previous tick count - writeSharedMem(0x158, currentTick); // Write new tick count + writeSharedMem(0x160, readSharedMem(0x158)); // Copy previous tick count + writeSharedMem(0x158, currentTick); // Write new tick count } const size_t gyroEntryOffset = 0x178 + (nextGyroIndex * 6); // Offset in the array of 8 touchscreen entries - s16* gyroData = getSharedMemPointer(gyroEntryOffset); - gyroData[0] = pitch; - gyroData[1] = yaw; - gyroData[2] = roll; + writeSharedMem(gyroEntryOffset, pitch); + writeSharedMem(gyroEntryOffset + 2, yaw); + writeSharedMem(gyroEntryOffset + 4, roll); // Since gyroscope euler angles are relative, we zero them out here and the frontend will update them again when we receive a new rotation roll = pitch = yaw = 0; - writeSharedMem(0x168, nextGyroIndex); // Index last updated by the HID module - nextGyroIndex = (nextGyroIndex + 1) % 32; // Move to next entry + writeSharedMem(0x168, nextGyroIndex); // Index last updated by the HID module + nextGyroIndex = (nextGyroIndex + 1) % 32; // Move to next entry } // For some reason, the original developers decided to signal the HID events each time the OS rescanned inputs // Rather than once every time the state of a key, or the accelerometer state, etc is updated - // This means that the OS will signal the events even if nothing happened + // This means that the OS will signal the events even if literally nothing happened // Some games such as Majora's Mask rely on this behaviour. if (eventsInitialized) { for (auto& e : events) { kernel.signalEvent(e.value()); } } -} - -// Key serialization helpers -namespace HID::Keys { - const char* keyToName(u32 key) { - static std::unordered_map keyMap = { - {A, "A"}, - {B, "B"}, - {Select, "Select"}, - {Start, "Start"}, - {Right, "D-Pad Right"}, - {Left, "D-Pad Left"}, - {Up, "D-Pad Up"}, - {Down, "D-Pad Down"}, - {R, "R"}, - {L, "L"}, - {X, "X"}, - {Y, "Y"}, - {ZL, "ZL"}, - {ZR, "ZR"}, - {CirclePadRight, "CirclePad Right"}, - {CirclePadLeft, "CirclePad Left"}, - {CirclePadUp, "CirclePad Up"}, - {CirclePadDown, "CirclePad Down"}, - }; - - auto it = keyMap.find(key); - return it != keyMap.end() ? it->second : "Unknown key"; - } - - u32 nameToKey(std::string name) { - static std::unordered_map keyMap = { - {"a", A}, - {"b", B}, - {"select", Select}, - {"start", Start}, - {"d-pad right", Right}, - {"d-pad left", Left}, - {"d-pad up", Up}, - {"d-pad down", Down}, - {"r", R}, - {"l", L}, - {"x", X}, - {"y", Y}, - {"zl", ZL}, - {"zr", ZR}, - {"circlepad right", CirclePadRight}, - {"circlepad left", CirclePadLeft}, - {"circlepad up", CirclePadUp}, - {"circlepad down", CirclePadDown}, - }; - - std::transform(name.begin(), name.end(), name.begin(), [](char c) { return std::tolower(c); }); - auto it = keyMap.find(name); - - return it != keyMap.end() ? it->second : HID::Keys::Null; - } -} // namespace HID::Keys +} \ No newline at end of file diff --git a/src/core/services/http.cpp b/src/core/services/http.cpp index 801cdabb..f61eca3b 100644 --- a/src/core/services/http.cpp +++ b/src/core/services/http.cpp @@ -6,8 +6,6 @@ namespace HTTPCommands { enum : u32 { Initialize = 0x00010044, - CreateRootCertChain = 0x002D0000, - RootCertChainAddDefaultCert = 0x00300080, }; } @@ -16,14 +14,8 @@ void HTTPService::reset() { initialized = false; } void HTTPService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { - case HTTPCommands::CreateRootCertChain: createRootCertChain(messagePointer); break; case HTTPCommands::Initialize: initialize(messagePointer); break; - case HTTPCommands::RootCertChainAddDefaultCert: rootCertChainAddDefaultCert(messagePointer); break; - - default: - Helpers::warn("HTTP service requested. Command: %08X\n", command); - mem.write32(messagePointer + 4, Result::FailurePlaceholder); - break; + default: Helpers::panic("HTTP service requested. Command: %08X\n", command); } } @@ -47,28 +39,4 @@ void HTTPService::initialize(u32 messagePointer) { initialized = true; // We currently don't emulate HTTP properly. TODO: Prepare POST buffer here mem.write32(messagePointer + 4, Result::Success); -} - -void HTTPService::createRootCertChain(u32 messagePointer) { - log("HTTP::CreateRootCertChain (Unimplemented)\n"); - - // TODO: Verify response header - mem.write32(messagePointer, IPC::responseHeader(0x2D, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - - // RootCertChain context handle. No need to emulate this yet - mem.write32(messagePointer + 8, 0x66666666); -} - -void HTTPService::rootCertChainAddDefaultCert(u32 messagePointer) { - log("HTTP::RootCertChainAddDefaultCert (Unimplemented)\n"); - const u32 contextHandle = mem.read32(messagePointer + 4); - const u32 certID = mem.read32(messagePointer + 8); - - // TODO: Verify response header - mem.write32(messagePointer, IPC::responseHeader(0x30, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - - // Cert context handle. No need to emulate this yet - mem.write32(messagePointer + 8, 0x66666666); } \ No newline at end of file diff --git a/src/core/services/ir/circlepad_pro.cpp b/src/core/services/ir/circlepad_pro.cpp deleted file mode 100644 index 0ed4d830..00000000 --- a/src/core/services/ir/circlepad_pro.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "services/ir/circlepad_pro.hpp" - -#include -#include -#include - -using namespace IR; - -void CirclePadPro::connect() {} -void CirclePadPro::disconnect() { scheduler.removeEvent(Scheduler::EventType::UpdateIR); } - -void CirclePadPro::receivePayload(Payload payload) { - const u8 type = payload[0]; - - switch (type) { - case CPPRequestID::ConfigurePolling: { - // Convert polling period from ms to ns for easier use with the scheduler - const s64 periodNs = s64(payload[1]) * 1000ll; - // Convert to cycles - period = Scheduler::nsToCycles(periodNs); - - scheduler.removeEvent(Scheduler::EventType::UpdateIR); - scheduler.addEvent(Scheduler::EventType::UpdateIR, scheduler.currentTimestamp + period); - break; - } - - case CPPRequestID::ReadCalibrationData: { - // Data from https://github.com/azahar-emu/azahar/blob/f8b8b6e53cf518a53c0ae5f0201660c1250c0393/src/core/hle/service/ir/extra_hid.cpp#L73 - static constexpr std::array calibrationData = { - 0x00, 0x00, 0x08, 0x80, 0x85, 0xEB, 0x11, 0x3F, 0x85, 0xEB, 0x11, 0x3F, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, 0x00, 0x08, 0x80, 0x85, 0xEB, - 0x11, 0x3F, 0x85, 0xEB, 0x11, 0x3F, 0xFF, 0xFF, 0xFF, 0x65, 0xFF, 0x00, 0x08, 0x80, 0x85, 0xEB, 0x11, 0x3F, 0x85, 0xEB, 0x11, 0x3F, - 0xFF, 0xFF, 0xFF, 0x65, 0xFF, 0x00, 0x08, 0x80, 0x85, 0xEB, 0x11, 0x3F, 0x85, 0xEB, 0x11, 0x3F, 0xFF, 0xFF, 0xFF, 0x65, - }; - - struct ReadCalibrationDataRequest { - u8 requestID; // Always CPPRequestID::ReadCalibrationData for this command - u8 unknown; - u16_le offset; // Offset in calibration data to read from - u16_le size; // Bytes in calibration data to read - }; - static_assert(sizeof(ReadCalibrationDataRequest) == 6, "ReadCalibrationDataRequest has wrong size"); - - if (payload.size() != sizeof(ReadCalibrationDataRequest)) { - Helpers::warn("IR::ReadCalibrationData: Wrong request size"); - return; - } - - ReadCalibrationDataRequest request; - std::memcpy(&request, payload.data(), sizeof(request)); - - // Get the offset and size for the calibration data read. Bottom 4 bits are ignored, aligning reads to 16 bytes - const auto offset = usize(request.offset & ~0xF); - const auto size = usize(request.size & ~0xF); - - if (offset + size > calibrationData.size()) { - Helpers::warn("IR::ReadCalibrationData: Read beyond the end of calibration data!!"); - return; - } - - std::vector response(size + 5); - response[0] = CPPResponseID::ReadCalibrationData; - std::memcpy(&response[1], &request.offset, sizeof(request.offset)); - std::memcpy(&response[3], &request.size, sizeof(request.size)); - std::memcpy(&response[5], calibrationData.data() + offset, size); - sendCallback(response); - break; - } - } -} diff --git a/src/core/services/ir/crc8.cpp b/src/core/services/ir/crc8.cpp deleted file mode 100644 index 4fdda868..00000000 --- a/src/core/services/ir/crc8.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include - -#include "services/ir/ir_user.hpp" - -u8 IRUserService::crc8(std::span data) { - // The IR service uses CRC8 with generator polynomial = 0x07 for verifying payloads received from IR devices - static constexpr std::array crcTable = { - 0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, - 0x62, 0x65, 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, 0xD8, 0xDF, 0xD6, 0xD1, - 0xC4, 0xC3, 0xCA, 0xCD, 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, 0xC7, 0xC0, - 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, - 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, - 0x0D, 0x0A, 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, 0x89, 0x8E, 0x87, 0x80, - 0x95, 0x92, 0x9B, 0x9C, 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, 0xC1, 0xC6, - 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, - 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, - 0x5C, 0x5B, 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, 0x06, 0x01, 0x08, 0x0F, - 0x1A, 0x1D, 0x14, 0x13, 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, 0xDE, 0xD9, - 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3, - }; - - u8 crc = 0; - - for (usize i = 0; i < data.size(); i++) { - const u8 byte = data[i]; - crc = crcTable[crc ^ byte]; - } - - return crc; -} \ No newline at end of file diff --git a/src/core/services/ir/ir_user.cpp b/src/core/services/ir/ir_user.cpp deleted file mode 100644 index 48aed958..00000000 --- a/src/core/services/ir/ir_user.cpp +++ /dev/null @@ -1,349 +0,0 @@ -#include "services/ir/ir_user.hpp" - -#include -#include -#include -#include -#include - -#include "ipc.hpp" -#include "kernel.hpp" -#include "services/ir/ir_types.hpp" - -using namespace IR; - -namespace IRUserCommands { - enum : u32 { - FinalizeIrnop = 0x00020000, - ClearReceiveBuffer = 0x00030000, - ClearSendBuffer = 0x00040000, - RequireConnection = 0x00060040, - Disconnect = 0x00090000, - GetReceiveEvent = 0x000A0000, - GetSendEvent = 0x000B0000, - GetConnectionStatusEvent = 0x000C0000, - SendIrnop = 0x000D0042, - InitializeIrnopShared = 0x00180182, - ReleaseReceivedData = 0x00190040, - }; -} - -IRUserService::IRUserService(Memory& mem, HIDService& hid, const EmulatorConfig& config, Kernel& kernel) - : mem(mem), hid(hid), config(config), kernel(kernel), cpp([&](IR::Device::Payload payload) { sendPayload(payload); }, kernel.getScheduler()) {} - -void IRUserService::reset() { - connectionStatusEvent = std::nullopt; - receiveEvent = std::nullopt; - sendEvent = std::nullopt; - sharedMemory = std::nullopt; - - receiveBuffer = nullptr; - connectedDevice = false; -} - -void IRUserService::handleSyncRequest(u32 messagePointer) { - const u32 command = mem.read32(messagePointer); - switch (command) { - case IRUserCommands::Disconnect: disconnect(messagePointer); break; - case IRUserCommands::FinalizeIrnop: finalizeIrnop(messagePointer); break; - case IRUserCommands::GetReceiveEvent: getReceiveEvent(messagePointer); break; - case IRUserCommands::GetSendEvent: getSendEvent(messagePointer); break; - case IRUserCommands::GetConnectionStatusEvent: getConnectionStatusEvent(messagePointer); break; - case IRUserCommands::InitializeIrnopShared: initializeIrnopShared(messagePointer); break; - case IRUserCommands::RequireConnection: requireConnection(messagePointer); break; - case IRUserCommands::SendIrnop: sendIrnop(messagePointer); break; - case IRUserCommands::ClearReceiveBuffer: clearReceiveBuffer(messagePointer); break; - case IRUserCommands::ClearSendBuffer: clearSendBuffer(messagePointer); break; - case IRUserCommands::ReleaseReceivedData: releaseReceivedData(messagePointer); break; - default: Helpers::panic("ir:USER service requested. Command: %08X\n", command); - } -} - -void IRUserService::initializeIrnopShared(u32 messagePointer) { - const u32 sharedMemSize = mem.read32(messagePointer + 4); - const u32 receiveBufferSize = mem.read32(messagePointer + 8); - const u32 receiveBufferPackageCount = mem.read32(messagePointer + 12); - const u32 sendBufferSize = mem.read32(messagePointer + 16); - const u32 sendBufferPackageCount = mem.read32(messagePointer + 20); - const u32 bitrate = mem.read32(messagePointer + 24); - const u32 descriptor = mem.read32(messagePointer + 28); - const u32 sharedMemHandle = mem.read32(messagePointer + 32); - - log("IR:USER: InitializeIrnopShared (shared mem size = %08X, sharedMemHandle = %X)\n", sharedMemSize, sharedMemHandle); - Helpers::warn("Game is initializing IR:USER. If it explodes, this is probably why"); - - KernelObject* object = kernel.getObject(sharedMemHandle, KernelObjectType::MemoryBlock); - if (object == nullptr) { - Helpers::panic("IR::InitializeIrnopShared: Shared memory object does not exist"); - } - - MemoryBlock* memoryBlock = object->getData(); - sharedMemory = *memoryBlock; - - receiveBuffer = std::make_unique(mem, memoryBlock->addr, 0x10, 0x20, receiveBufferPackageCount, receiveBufferSize); - - // Initialize the shared memory block to 0s - for (int i = 0; i < sizeof(SharedMemoryStatus); i++) { - mem.write8(memoryBlock->addr + i, 0); - } - // Set the initialized byte in shared mem to 1 - mem.write8(memoryBlock->addr + offsetof(SharedMemoryStatus, isInitialized), 1); - - mem.write32(messagePointer, IPC::responseHeader(0x18, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void IRUserService::finalizeIrnop(u32 messagePointer) { - log("IR:USER: FinalizeIrnop\n"); - - if (connectedDevice) { - connectedDevice = false; - cpp.disconnect(); - } - - sharedMemory = std::nullopt; - receiveBuffer = nullptr; - - // This should disconnect any connected device de-initialize the shared memory - mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void IRUserService::getConnectionStatusEvent(u32 messagePointer) { - log("IR:USER: GetConnectionStatusEvent\n"); - - if (!connectionStatusEvent.has_value()) { - connectionStatusEvent = kernel.makeEvent(ResetType::OneShot); - } - - mem.write32(messagePointer, IPC::responseHeader(0xC, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - // TOOD: Descriptor here - mem.write32(messagePointer + 12, connectionStatusEvent.value()); -} - -void IRUserService::getReceiveEvent(u32 messagePointer) { - log("IR:USER: GetReceiveEvent\n"); - - if (!receiveEvent.has_value()) { - receiveEvent = kernel.makeEvent(ResetType::OneShot); - } - - mem.write32(messagePointer, IPC::responseHeader(0xA, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0x40000000); - // TOOD: Descriptor here - mem.write32(messagePointer + 12, receiveEvent.value()); -} - -void IRUserService::getSendEvent(u32 messagePointer) { - log("IR:USER: GetSendEvent\n"); - - if (!sendEvent.has_value()) { - sendEvent = kernel.makeEvent(ResetType::OneShot); - } - - mem.write32(messagePointer, IPC::responseHeader(0xB, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0x40000000); - // TOOD: Descriptor here - mem.write32(messagePointer + 12, sendEvent.value()); -} - -void IRUserService::requireConnection(u32 messagePointer) { - const u8 deviceID = mem.read8(messagePointer + 4); - log("IR:USER: RequireConnection (device: %d)\n", deviceID); - - // Reference: https://github.com/citra-emu/citra/blob/c10ffda91feb3476a861c47fb38641c1007b9d33/src/core/hle/service/ir/ir_user.cpp#L306 - if (sharedMemory.has_value()) { - u32 sharedMemAddress = sharedMemory.value().addr; - - if (deviceID == u8(DeviceID::CirclePadPro)) { - const bool enableCirclePadPro = config.circlePadProEnabled; // TODO: This should always be true for N3DS too - - // Note: We temporarily pretend we don't have a CirclePad Pro. This code must change when we emulate it or N3DS C-stick - const u8 status = (enableCirclePadPro) ? 2 : 1; // Any value other than 2 is considered not connected. - const u8 role = (enableCirclePadPro) ? 2 : 0; - const u8 connected = (enableCirclePadPro) ? 1 : 0; - - if (enableCirclePadPro) { - cpp.connect(); - } - - mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), status); - mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionRole), role); - mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, isConnected), connected); - - connectedDevice = connected; - if (connectionStatusEvent.has_value()) { - kernel.signalEvent(connectionStatusEvent.value()); - } - } else { - log("IR:USER: Unknown device %d\n", deviceID); - mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), 1); - mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionAttemptStatus), 2); - } - } else { - Helpers::warn("RequireConnection without shmem"); - } - - mem.write32(messagePointer, IPC::responseHeader(0x6, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void IRUserService::sendIrnop(u32 messagePointer) { - const u32 bufferSize = mem.read32(messagePointer + 4); - const u32 inputPointer = mem.read32(messagePointer + 12); - - std::vector data; - data.reserve(bufferSize); - - for (u32 i = 0; i < bufferSize; i++) { - data.push_back(mem.read8(inputPointer + i)); - } - - mem.write32(messagePointer, IPC::responseHeader(0xD, 1, 0)); - - if (connectedDevice) { - cpp.receivePayload(data); - if (sendEvent.has_value()) { - kernel.signalEvent(sendEvent.value()); - } - - mem.write32(messagePointer + 4, Result::Success); - } else { - Helpers::warn("IR:USER: SendIrnop without connected device"); - mem.write32(messagePointer + 4, Result::IR::NoDeviceConnected); - } -} - -void IRUserService::disconnect(u32 messagePointer) { - log("IR:USER: Disconnect\n"); - - if (sharedMemory.has_value()) { - u32 sharedMemAddress = sharedMemory->addr; - - mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), 0); - mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, isConnected), 0); - } - - // If there's a connected device, disconnect it and trigger the status event - if (connectedDevice) { - connectedDevice = false; - cpp.disconnect(); - - if (connectionStatusEvent.has_value()) { - kernel.signalEvent(connectionStatusEvent.value()); - } - } - - mem.write32(messagePointer, IPC::responseHeader(0x9, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void IRUserService::releaseReceivedData(u32 messagePointer) { - const u32 size = mem.read32(messagePointer + 4); - log("IR:USER: ReleaseReceivedData (%08X)\n", size); - - mem.write32(messagePointer, IPC::responseHeader(0x19, 1, 0)); - - if (receiveBuffer) { - if (receiveBuffer->release(size)) { - mem.write32(messagePointer + 4, Result::Success); - } else { - Helpers::warn("IR:USER: ReleaseReceivedData failed to release\n"); - mem.write32(messagePointer + 4, Result::FailurePlaceholder); - } - } else { - Helpers::warn("IR:USER: ReleaseReceivedData with no receive buffer?\n"); - mem.write32(messagePointer + 4, Result::FailurePlaceholder); - } -} - -void IRUserService::clearReceiveBuffer(u32 messagePointer) { - log("IR:USER: ClearReceiveBuffer\n"); - mem.write32(messagePointer, IPC::responseHeader(0x0C, 1, 0)); - - if (receiveBuffer) { - if (receiveBuffer->release(receiveBuffer->getPacketCount())) { - mem.write32(messagePointer + 4, Result::Success); - } else { - Helpers::warn("IR:USER: ClearReceiveBuffer failed to release\n"); - mem.write32(messagePointer + 4, Result::FailurePlaceholder); - } - } else { - Helpers::warn("IR:USER: ClearReceiveBuffer with no receive buffer?\n"); - mem.write32(messagePointer + 4, Result::FailurePlaceholder); - } -} - -void IRUserService::clearSendBuffer(u32 messagePointer) { - log("IR:USER: ClearSendBuffer (Stubbed)\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x0D, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void IRUserService::sendPayload(IRUserService::Payload payload) { - if (!receiveBuffer) { - return; - } - - // Based on: https://github.com/azahar-emu/azahar/blob/df3c0c18e4b71ecb5c4e009bfc07b9fd14fd39d9/src/core/hle/service/ir/ir_user.cpp#L231 - std::vector packet; - - // Builds packet header. For the format info: - // https://www.3dbrew.org/wiki/IRUSER_Shared_Memory#Packet_structure - packet.push_back(0xA5); - const u8 networkID = *(receiveBuffer->getPointer(offsetof(SharedMemoryStatus, networkID))); - packet.push_back(networkID); - - // Append size info. - // The highest bit of the first byte is unknown, which is set to zero here. The second highest - // bit is a flag that determines whether the size info is in extended form. If the packet size - // can be represent within 6 bits, the short form (1 byte) of size info is chosen, the size is - // put to the lower bits of this byte, and the flag is clear. If the packet size cannot be - // represent within 6 bits, the extended form (2 bytes) is chosen, the lower 8 bits of the size - // is put to the second byte, the higher bits of the size is put to the lower bits of the first - // byte, and the flag is set. Note that the packet size must be within 14 bits due to this - // format restriction, or it will overlap with the flag bit. - usize size = payload.size(); - if (size < 0x40) { - packet.push_back(static_cast(size)); - } else if (size < 0x4000) { - packet.push_back(static_cast(size >> 8) | 0x40); - packet.push_back(static_cast(size)); - } - - // Insert the payload data + CRC8 checksum into the packet - packet.insert(packet.end(), payload.begin(), payload.end()); - packet.push_back(crc8(packet)); - - if (receiveBuffer->put(packet) && receiveEvent.has_value()) { - kernel.signalEvent(receiveEvent.value()); - } -} - -void IRUserService::updateCirclePadPro() { - if (!connectedDevice || !receiveBuffer) { - return; - } - - // The button state for the CirclePad Pro is stored in the HID service to make the frontend logic simpler - // We take the button state, format it nicely into the CirclePad Pro struct, and return it - auto& cppState = cpp.state; - u32 buttons = hid.getOldButtons(); - - cppState.buttons.zlNotPressed = (buttons & HID::Keys::ZL) ? 0 : 1; - cppState.buttons.zrNotPressed = (buttons & HID::Keys::ZR) ? 0 : 1; - cppState.cStick.x = hid.getCStickX(); - cppState.cStick.y = hid.getCStickY(); - - std::vector response(sizeof(cppState)); - std::memcpy(response.data(), &cppState, sizeof(cppState)); - sendPayload(response); - - // Schedule next IR event. TODO: Maybe account for cycle drift. - auto& scheduler = kernel.getScheduler(); - scheduler.addEvent(Scheduler::EventType::UpdateIR, scheduler.currentTimestamp + cpp.period); -} \ No newline at end of file diff --git a/src/core/services/ir_user.cpp b/src/core/services/ir_user.cpp new file mode 100644 index 00000000..47a2299a --- /dev/null +++ b/src/core/services/ir_user.cpp @@ -0,0 +1,168 @@ +#include "services/ir_user.hpp" + +#include + +#include "ipc.hpp" +#include "kernel.hpp" + +namespace IRUserCommands { + enum : u32 { + FinalizeIrnop = 0x00020000, + RequireConnection = 0x00060040, + Disconnect = 0x00090000, + GetReceiveEvent = 0x000A0000, + GetConnectionStatusEvent = 0x000C0000, + SendIrnop = 0x000D0042, + InitializeIrnopShared = 0x00180182 + }; +} + +void IRUserService::reset() { + connectionStatusEvent = std::nullopt; + receiveEvent = std::nullopt; + sharedMemory = std::nullopt; + connectedDevice = false; +} + +void IRUserService::handleSyncRequest(u32 messagePointer) { + const u32 command = mem.read32(messagePointer); + switch (command) { + case IRUserCommands::Disconnect: disconnect(messagePointer); break; + case IRUserCommands::FinalizeIrnop: finalizeIrnop(messagePointer); break; + case IRUserCommands::GetReceiveEvent: getReceiveEvent(messagePointer); break; + case IRUserCommands::GetConnectionStatusEvent: getConnectionStatusEvent(messagePointer); break; + case IRUserCommands::InitializeIrnopShared: initializeIrnopShared(messagePointer); break; + case IRUserCommands::RequireConnection: requireConnection(messagePointer); break; + case IRUserCommands::SendIrnop: sendIrnop(messagePointer); break; + default: Helpers::panic("ir:USER service requested. Command: %08X\n", command); + } +} + +void IRUserService::initializeIrnopShared(u32 messagePointer) { + const u32 sharedMemSize = mem.read32(messagePointer + 4); + const u32 receiveBufferSize = mem.read32(messagePointer + 8); + const u32 receiveBufferPackageCount = mem.read32(messagePointer + 12); + const u32 sendBufferSize = mem.read32(messagePointer + 16); + const u32 sendBufferPackageCount = mem.read32(messagePointer + 20); + const u32 bitrate = mem.read32(messagePointer + 24); + const u32 descriptor = mem.read32(messagePointer + 28); + const u32 sharedMemHandle = mem.read32(messagePointer + 32); + + log("IR:USER: InitializeIrnopShared (shared mem size = %08X, sharedMemHandle = %X) (stubbed)\n", sharedMemSize, sharedMemHandle); + Helpers::warn("Game is initializing IR:USER. If it explodes, this is probably why"); + + KernelObject* object = kernel.getObject(sharedMemHandle, KernelObjectType::MemoryBlock); + if (object == nullptr) { + Helpers::panic("IR::InitializeIrnopShared: Shared memory object does not exist"); + } + + MemoryBlock* memoryBlock = object->getData(); + sharedMemory = *memoryBlock; + + // Set the initialized byte in shared mem to 1 + mem.write8(memoryBlock->addr + offsetof(SharedMemoryStatus, isInitialized), 1); + mem.write64(memoryBlock->addr + 0x10, 0); // Initialize the receive buffer info to all 0s + mem.write64(memoryBlock->addr + 0x18, 0); + + mem.write32(messagePointer, IPC::responseHeader(0x18, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + +void IRUserService::finalizeIrnop(u32 messagePointer) { + log("IR:USER: FinalizeIrnop\n"); + + if (connectedDevice) { + connectedDevice = false; + // This should also disconnect CirclePad Pro? + } + + sharedMemory = std::nullopt; + + // This should disconnect any connected device de-initialize the shared memory + mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + +void IRUserService::getConnectionStatusEvent(u32 messagePointer) { + log("IR:USER: GetConnectionStatusEvent\n"); + + if (!connectionStatusEvent.has_value()) { + connectionStatusEvent = kernel.makeEvent(ResetType::OneShot); + } + //kernel.signalEvent(connectionStatusEvent.value()); // ?????????????? + + mem.write32(messagePointer, IPC::responseHeader(0xC, 1, 2)); + mem.write32(messagePointer + 4, Result::Success); + // TOOD: Descriptor here + mem.write32(messagePointer + 12, connectionStatusEvent.value()); +} + +void IRUserService::getReceiveEvent(u32 messagePointer) { + log("IR:USER: GetReceiveEvent\n"); + + if (!receiveEvent.has_value()) { + receiveEvent = kernel.makeEvent(ResetType::OneShot); + } + + mem.write32(messagePointer, IPC::responseHeader(0xA, 1, 2)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, 0x40000000); + // TOOD: Descriptor here + mem.write32(messagePointer + 12, receiveEvent.value()); +} + +void IRUserService::requireConnection(u32 messagePointer) { + const u8 deviceID = mem.read8(messagePointer + 4); + log("IR:USER: RequireConnection (device: %d)\n", deviceID); + + // Reference: https://github.com/citra-emu/citra/blob/c10ffda91feb3476a861c47fb38641c1007b9d33/src/core/hle/service/ir/ir_user.cpp#L306 + if (sharedMemory.has_value()) { + u32 sharedMemAddress = sharedMemory.value().addr; + + if (deviceID == u8(DeviceID::CirclePadPro)) { + mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), 2); // Citra uses 2 here but only 1 works?? + mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionRole), 2); + mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, isConnected), 1); + + connectedDevice = true; + if (connectionStatusEvent.has_value()) { + kernel.signalEvent(connectionStatusEvent.value()); + } + } else { + log("IR:USER: Unknown device %d\n", deviceID); + mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), 1); + mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionAttemptStatus), 2); + } + } + + mem.write32(messagePointer, IPC::responseHeader(0x6, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + +void IRUserService::sendIrnop(u32 messagePointer) { + Helpers::panic("IR:USER: SendIrnop\n"); + + mem.write32(messagePointer + 4, Result::Success); +} + +void IRUserService::disconnect(u32 messagePointer) { + log("IR:USER: Disconnect\n"); + + if (sharedMemory.has_value()) { + u32 sharedMemAddress = sharedMemory.value().addr; + + mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), 0); + mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, isConnected), 0); + } + + // If there's a connected device, disconnect it and trigger the status event + if (connectedDevice) { + connectedDevice = false; + if (connectionStatusEvent.has_value()) { + kernel.signalEvent(connectionStatusEvent.value()); + } + } + + mem.write32(messagePointer, IPC::responseHeader(0x9, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} \ No newline at end of file diff --git a/src/core/services/ldr_ro.cpp b/src/core/services/ldr_ro.cpp index e1c5bde6..4ea73b4e 100644 --- a/src/core/services/ldr_ro.cpp +++ b/src/core/services/ldr_ro.cpp @@ -1,1216 +1,20 @@ #include "services/ldr_ro.hpp" - -#include -#include - #include "ipc.hpp" -#include "kernel.hpp" namespace LDRCommands { enum : u32 { Initialize = 0x000100C2, - LoadCRR = 0x00020082, - LoadCRO = 0x000402C2, - UnloadCRO = 0x000500C2, - LinkCRO = 0x00060042, - LoadCRONew = 0x000902C2, + LoadCRR = 0x00020082 }; } -namespace CROHeader { - enum : u32 { - ID = 0x080, - NameOffset = 0x084, - NextCRO = 0x088, - PrevCRO = 0x08C, - FixedSize = 0x98, - OnUnresolved = 0x0AC, - CodeOffset = 0x0B0, - DataOffset = 0x0B8, - ModuleNameOffset = 0x0C0, - SegmentTableOffset = 0x0C8, - SegmentTableSize = 0x0CC, - NamedExportTableOffset = 0x0D0, - NamedExportTableSize = 0x0D4, - IndexedExportTableOffset = 0x0D8, - IndexedExportTableSize = 0x0DC, - ExportStringTableOffset = 0x0E0, - ExportStringSize = 0x0E4, - ExportTreeOffset = 0x0E8, - ImportModuleTableOffset = 0x0F0, - ImportModuleTableSize = 0x0F4, - ImportPatchTableOffset = 0x0F8, - ImportPatchTableSize = 0x0FC, - NamedImportTableOffset = 0x100, - NamedImportTableSize = 0x104, - IndexedImportTableOffset = 0x108, - IndexedImportTableSize = 0x10C, - AnonymousImportTableOffset = 0x110, - AnonymousImportTableSize = 0x114, - ImportStringTableOffset = 0x118, - ImportStringSize = 0x11C, - StaticAnonymousSymbolTableOffset = 0x120, - StaticAnonymousSymbolTableSize = 0x124, - RelocationPatchTableOffset = 0x128, - RelocationPatchTableSize = 0x12C, - StaticAnonymousPatchTableOffset = 0x130, - StaticAnonymousPatchTableSize = 0x134, - }; -} - -namespace SegmentTable { - enum : u32 { - Offset = 0, - Size = 4, - ID = 8, - }; - - namespace SegmentID { - enum : u32 { - TEXT, - RODATA, - DATA, - BSS, - }; - } -} // namespace SegmentTable - -namespace NamedExportTable { - enum : u32 { - NameOffset = 0, - SegmentOffset = 4, - }; -}; - -namespace IndexedExportTable { - enum : u32 { - SegmentOffset = 0, - }; -}; - -namespace NamedImportTable { - enum : u32 { - NameOffset = 0, - RelocationOffset = 4, - }; -}; - -namespace IndexedImportTable { - enum : u32 { - Index = 0, - RelocationOffset = 4, - }; -}; - -namespace AnonymousImportTable { - enum : u32 { - SegmentOffset = 0, - RelocationOffset = 4, - }; -}; - -namespace ImportModuleTable { - enum : u32 { - NameOffset = 0, - IndexedOffset = 4, - IndexedNum = 8, - AnonymousOffset = 12, - AnonymousNum = 16, - }; -}; - -namespace RelocationPatch { - enum : u32 { - SegmentOffset = 0, - PatchType = 4, - IsLastEntry = 5, // For import patches - SegmentIndex = 5, // For relocation patches - IsResolved = 6, - Addend = 8, - }; - - namespace RelocationPatchType { - enum : u32 { - AbsoluteAddress = 2, - }; - }; -}; // namespace RelocationPatch - -struct CROHeaderEntry { - u32 offset, size; -}; - -static constexpr u32 CRO_HEADER_SIZE = 0x138; - -static const std::string CRO_MAGIC("CRO0"); -static const std::string CRO_MAGIC_FIXED("FIXD"); -static const std::string CRR_MAGIC("CRR0"); - -class CRO { - Memory &mem; - - u32 croPointer; // Origin address of CRO in RAM - u32 oldDataSegmentOffset; - - bool isCRO; // False if CRS - - public: - CRO(Memory &mem, u32 croPointer, bool isCRO) : mem(mem), croPointer(croPointer), oldDataSegmentOffset(0), isCRO(isCRO) {} - ~CRO() = default; - - std::string getModuleName() { - const CROHeaderEntry moduleName = getHeaderEntry(CROHeader::ModuleNameOffset); - - return mem.readString(moduleName.offset, moduleName.size); - } - - u32 getNextCRO() { - return mem.read32(croPointer + CROHeader::NextCRO); - } - - u32 getPrevCRO() { - return mem.read32(croPointer + CROHeader::PrevCRO); - } - - u32 getFixedSize() { - return mem.read32(croPointer + CROHeader::FixedSize); - } - - void setNextCRO(u32 nextCRO) { - mem.write32(croPointer + CROHeader::NextCRO, nextCRO); - } - - void setPrevCRO(u32 prevCRO) { - mem.write32(croPointer + CROHeader::PrevCRO, prevCRO); - } - - void write32(u32 addr, u32 value) { - // Note: some games export symbols to the static module, which doesn't contain any segments. - // Instead, its segments point to ROM segments. We need this special write handler for writes to .text, which - // can't be accessed via mem.write32() - auto writePointer = mem.getWritePointer(addr); - if (writePointer) { - *(u32*)writePointer = value; - } else { - auto readPointer = mem.getReadPointer(addr); - if (readPointer) { - *(u32*)readPointer = value; - } else { - Helpers::panic("LDR_RO write to invalid address = %X\n", addr); - } - } - } - - // Returns CRO header offset-size pair - CROHeaderEntry getHeaderEntry(u32 entry) { - return CROHeaderEntry{.offset = mem.read32(croPointer + entry), .size = mem.read32(croPointer + entry + 4)}; - } - - u32 getSegmentAddr(u32 segmentOffset) { - // "Decoded" segment tag - const u32 segmentIndex = segmentOffset & 0xF; - const u32 offset = segmentOffset >> 4; - - const CROHeaderEntry segmentTable = getHeaderEntry(CROHeader::SegmentTableOffset); - - if (segmentIndex >= segmentTable.size) { - return 0; - } - - // Get segment table entry - const u32 entryOffset = mem.read32(segmentTable.offset + 12 * segmentIndex + SegmentTable::Offset); - const u32 entrySize = mem.read32(segmentTable.offset + 12 * segmentIndex + SegmentTable::Size); - - if (offset >= entrySize) { - return 0; - } - - return entryOffset + offset; - } - - u32 getOnUnresolvedAddr() { - return getSegmentAddr(mem.read32(croPointer + CROHeader::OnUnresolved)); - } - - u32 getNamedExportSymbolAddr(const std::string& symbolName) { - // Note: The CRO contains a trie for fast symbol lookup. For simplicity, - // we won't use it and instead look up the symbol in the named export symbol table - - const u32 exportStringSize = mem.read32(croPointer + CROHeader::ExportStringSize); - - const CROHeaderEntry namedExportTable = getHeaderEntry(CROHeader::NamedExportTableOffset); - - for (u32 namedExport = 0; namedExport < namedExportTable.size; namedExport++) { - const u32 nameOffset = mem.read32(namedExportTable.offset + 8 * namedExport + NamedExportTable::NameOffset); - - const std::string exportSymbolName = mem.readString(nameOffset, exportStringSize); - - if (symbolName.compare(exportSymbolName) == 0) { - return getSegmentAddr(mem.read32(namedExportTable.offset + 8 * namedExport + NamedExportTable::SegmentOffset)); - } - } - - return 0; - } - - // Patches one symbol - bool patchSymbol(u32 relocationTarget, u8 patchType, u32 addend, u32 symbolOffset) { - switch (patchType) { - case RelocationPatch::RelocationPatchType::AbsoluteAddress: write32(relocationTarget, symbolOffset + addend); break; - default: Helpers::panic("Unhandled relocation type = %X\n", patchType); - } - - return true; - } - - // Patches symbol batches - bool patchBatch(u32 batchAddr, u32 symbolAddr, bool makeUnresolved = false) { - u32 relocationPatch = batchAddr; - - while (true) { - const u32 segmentOffset = mem.read32(relocationPatch + RelocationPatch::SegmentOffset); - const u8 patchType = mem.read8(relocationPatch + RelocationPatch::PatchType); - const u8 isLastBatch = mem.read8(relocationPatch + RelocationPatch::IsLastEntry); - const u32 addend = mem.read32(relocationPatch + RelocationPatch::Addend); - - const u32 relocationTarget = getSegmentAddr(segmentOffset); - - if (relocationTarget == 0) { - Helpers::panic("Relocation target is NULL"); - } - - if (makeUnresolved) { - write32(relocationTarget, symbolAddr); - } else { - patchSymbol(relocationTarget, patchType, addend, symbolAddr); - } - - if (isLastBatch != 0) { - break; - } - - relocationPatch += 12; - } - - if (makeUnresolved) { - mem.write8(relocationPatch + RelocationPatch::IsResolved, 0); - } else { - mem.write8(relocationPatch + RelocationPatch::IsResolved, 1); - } - - return true; - } - - bool load() { - // TODO: verify SHA hashes? - - // Verify CRO magic - const std::string magic = mem.readString(croPointer + CROHeader::ID, 4); - if (magic.compare(CRO_MAGIC) != 0) { - return false; - } - - // These fields are initially 0, the RO service sets them on load. If non-0, - // this CRO has already been loaded - if ((getNextCRO() != 0) || (getPrevCRO() != 0)) { - return false; - } - - return true; - } - - bool fix(u32 fixLevel) { - if (fixLevel != 0) { - mem.write8(croPointer + CROHeader::ID + 0, 'F'); - mem.write8(croPointer + CROHeader::ID + 1, 'I'); - mem.write8(croPointer + CROHeader::ID + 2, 'X'); - mem.write8(croPointer + CROHeader::ID + 3, 'D'); - } - - return true; - } - - // Modifies CRO offsets to point at virtual addresses - bool rebase(u32 loadedCRS, u32 dataVaddr, u32 bssVaddr) { - rebaseHeader(); - - u32 oldDataVaddr = 0; - - // Note: Citra rebases the segment table only if the file is not a CRS. - // Presumably because CRS files don't contain segments? - if (isCRO) { - rebaseSegmentTable(dataVaddr, bssVaddr, &oldDataVaddr); - } - - rebaseNamedExportTable(); - rebaseImportModuleTable(); - rebaseNamedImportTable(); - rebaseIndexedImportTable(); - rebaseAnonymousImportTable(); - - // Note: Citra relocates static anonymous symbols and exit symbols only if the file is not a CRS - if (isCRO) { - relocateStaticAnonymousSymbols(); - relocateInternalSymbols(oldDataVaddr); - relocateExitSymbols(loadedCRS); - } - - return true; - } - - bool unrebase() { - unrebaseAnonymousImportTable(); - unrebaseIndexedImportTable(); - unrebaseNamedImportTable(); - unrebaseImportModuleTable(); - unrebaseNamedExportTable(); - - // Note: Citra unrebases the segment table only if the file is not a CRS. - // Presumably because CRS files don't contain segments? - if (isCRO) { - unrebaseSegmentTable(); - } - - unrebaseHeader(); - - setNextCRO(0); - setPrevCRO(0); - - return true; - } - - bool rebaseHeader() { - constexpr u32 headerOffsets[] = { - CROHeader::NameOffset, - CROHeader::CodeOffset, - CROHeader::DataOffset, - CROHeader::ModuleNameOffset, - CROHeader::SegmentTableOffset, - CROHeader::NamedExportTableOffset, - CROHeader::IndexedExportTableOffset, - CROHeader::ExportStringTableOffset, - CROHeader::ExportTreeOffset, - CROHeader::ImportModuleTableOffset, - CROHeader::ImportPatchTableOffset, - CROHeader::NamedImportTableOffset, - CROHeader::IndexedImportTableOffset, - CROHeader::AnonymousImportTableOffset, - CROHeader::ImportStringTableOffset, - CROHeader::StaticAnonymousSymbolTableOffset, - CROHeader::RelocationPatchTableOffset, - CROHeader::StaticAnonymousPatchTableOffset, - }; - - for (u32 offset : headerOffsets) { - mem.write32(croPointer + offset, mem.read32(croPointer + offset) + croPointer); - } - - return true; - } - - bool unrebaseHeader() { - constexpr u32 headerOffsets[] = { - CROHeader::NameOffset, - CROHeader::CodeOffset, - CROHeader::DataOffset, - CROHeader::ModuleNameOffset, - CROHeader::SegmentTableOffset, - CROHeader::NamedExportTableOffset, - CROHeader::IndexedExportTableOffset, - CROHeader::ExportStringTableOffset, - CROHeader::ExportTreeOffset, - CROHeader::ImportModuleTableOffset, - CROHeader::ImportPatchTableOffset, - CROHeader::NamedImportTableOffset, - CROHeader::IndexedImportTableOffset, - CROHeader::AnonymousImportTableOffset, - CROHeader::ImportStringTableOffset, - CROHeader::StaticAnonymousSymbolTableOffset, - CROHeader::RelocationPatchTableOffset, - CROHeader::StaticAnonymousPatchTableOffset, - }; - - for (u32 offset : headerOffsets) { - mem.write32(croPointer + offset, mem.read32(croPointer + offset) - croPointer); - } - - return true; - } - - bool rebaseSegmentTable(u32 dataVaddr, u32 bssVaddr, u32 *oldDataVaddr) { - const CROHeaderEntry segmentTable = getHeaderEntry(CROHeader::SegmentTableOffset); - - for (u32 segment = 0; segment < segmentTable.size; segment++) { - u32 segmentOffset = mem.read32(segmentTable.offset + 12 * segment + SegmentTable::Offset); - - const u32 segmentID = mem.read32(segmentTable.offset + 12 * segment + SegmentTable::ID); - switch (segmentID) { - case SegmentTable::SegmentID::DATA: - *oldDataVaddr = segmentOffset + croPointer; oldDataSegmentOffset = segmentOffset; segmentOffset = dataVaddr; break; - case SegmentTable::SegmentID::BSS: segmentOffset = bssVaddr; break; - case SegmentTable::SegmentID::TEXT: - case SegmentTable::SegmentID::RODATA: - if (segmentOffset != 0) segmentOffset += croPointer; break; - default: - Helpers::panic("Unknown segment ID = %u", segmentID); - } - - mem.write32(segmentTable.offset + 12 * segment + SegmentTable::Offset, segmentOffset); - } - - return true; - } - - bool unrebaseSegmentTable() { - const CROHeaderEntry segmentTable = getHeaderEntry(CROHeader::SegmentTableOffset); - - for (u32 segment = 0; segment < segmentTable.size; segment++) { - u32 segmentOffset = mem.read32(segmentTable.offset + 12 * segment + SegmentTable::Offset); - - const u32 segmentID = mem.read32(segmentTable.offset + 12 * segment + SegmentTable::ID); - switch (segmentID) { - case SegmentTable::SegmentID::DATA: segmentOffset = oldDataSegmentOffset; break; - case SegmentTable::SegmentID::BSS: segmentOffset = 0; break; - case SegmentTable::SegmentID::TEXT: - case SegmentTable::SegmentID::RODATA: - if (segmentOffset != 0) segmentOffset -= croPointer; break; - default: - Helpers::panic("Unknown segment ID = %u", segmentID); - } - - mem.write32(segmentTable.offset + 12 * segment + SegmentTable::Offset, segmentOffset); - } - - return true; - } - - bool rebaseNamedExportTable() { - const CROHeaderEntry namedExportTable = getHeaderEntry(CROHeader::NamedExportTableOffset); - - for (u32 namedExport = 0; namedExport < namedExportTable.size; namedExport++) { - u32 nameOffset = mem.read32(namedExportTable.offset + 8 * namedExport); - - if (nameOffset != 0) { - mem.write32(namedExportTable.offset + 8 * namedExport, nameOffset + croPointer); - } - } - - return true; - } - - bool unrebaseNamedExportTable() { - const CROHeaderEntry namedExportTable = getHeaderEntry(CROHeader::NamedExportTableOffset); - - for (u32 namedExport = 0; namedExport < namedExportTable.size; namedExport++) { - u32 nameOffset = mem.read32(namedExportTable.offset + 8 * namedExport); - - if (nameOffset != 0) { - mem.write32(namedExportTable.offset + 8 * namedExport, nameOffset - croPointer); - } - } - - return true; - } - - bool rebaseImportModuleTable() { - const CROHeaderEntry importModuleTable = getHeaderEntry(CROHeader::ImportModuleTableOffset); - - for (u32 importModule = 0; importModule < importModuleTable.size; importModule++) { - u32 nameOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::NameOffset); - - if (nameOffset != 0) { - mem.write32(importModuleTable.offset + 20 * importModule + ImportModuleTable::NameOffset, nameOffset + croPointer); - } - - u32 indexedOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset); - - if (indexedOffset != 0) { - mem.write32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset, indexedOffset + croPointer); - } - - u32 anonymousOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset); - - if (anonymousOffset != 0) { - mem.write32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset, anonymousOffset + croPointer); - } - } - - return true; - } - - bool unrebaseImportModuleTable() { - const CROHeaderEntry importModuleTable = getHeaderEntry(CROHeader::ImportModuleTableOffset); - - for (u32 importModule = 0; importModule < importModuleTable.size; importModule++) { - u32 nameOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::NameOffset); - - if (nameOffset != 0) { - mem.write32(importModuleTable.offset + 20 * importModule + ImportModuleTable::NameOffset, nameOffset - croPointer); - } - - u32 indexedOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset); - - if (indexedOffset != 0) { - mem.write32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset, indexedOffset - croPointer); - } - - u32 anonymousOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset); - - if (anonymousOffset != 0) { - mem.write32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset, anonymousOffset - croPointer); - } - } - - return true; - } - - bool rebaseNamedImportTable() { - const CROHeaderEntry namedImportTable = getHeaderEntry(CROHeader::NamedImportTableOffset); - - for (u32 namedImport = 0; namedImport < namedImportTable.size; namedImport++) { - u32 nameOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset); - - if (nameOffset != 0) { - mem.write32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset, nameOffset + croPointer); - } - - u32 relocationOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset); - - if (relocationOffset != 0) { - mem.write32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset, relocationOffset + croPointer); - } - } - - return true; - } - - bool unrebaseNamedImportTable() { - const CROHeaderEntry namedImportTable = getHeaderEntry(CROHeader::NamedImportTableOffset); - - for (u32 namedImport = 0; namedImport < namedImportTable.size; namedImport++) { - u32 nameOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset); - - if (nameOffset != 0) { - mem.write32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset, nameOffset - croPointer); - } - - u32 relocationOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset); - - if (relocationOffset != 0) { - mem.write32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset, relocationOffset - croPointer); - } - } - - return true; - } - - bool rebaseIndexedImportTable() { - const CROHeaderEntry indexedImportTable = getHeaderEntry(CROHeader::IndexedImportTableOffset); - - for (u32 indexedImport = 0; indexedImport < indexedImportTable.size; indexedImport++) { - u32 relocationOffset = mem.read32(indexedImportTable.offset + 8 * indexedImport + IndexedImportTable::RelocationOffset); - - if (relocationOffset != 0) { - mem.write32(indexedImportTable.offset + 8 * indexedImport + IndexedImportTable::RelocationOffset, relocationOffset + croPointer); - } - } - - return true; - } - - bool unrebaseIndexedImportTable() { - const CROHeaderEntry indexedImportTable = getHeaderEntry(CROHeader::IndexedImportTableOffset); - - for (u32 indexedImport = 0; indexedImport < indexedImportTable.size; indexedImport++) { - u32 relocationOffset = mem.read32(indexedImportTable.offset + 8 * indexedImport + IndexedImportTable::RelocationOffset); - - if (relocationOffset != 0) { - mem.write32(indexedImportTable.offset + 8 * indexedImport + IndexedImportTable::RelocationOffset, relocationOffset - croPointer); - } - } - - return true; - } - - bool rebaseAnonymousImportTable() { - const CROHeaderEntry anonymousImportTable = getHeaderEntry(CROHeader::AnonymousImportTableOffset); - - for (u32 anonymousImport = 0; anonymousImport < anonymousImportTable.size; anonymousImport++) { - u32 relocationOffset = mem.read32(anonymousImportTable.offset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset); - - if (relocationOffset != 0) { - mem.write32(anonymousImportTable.offset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset, relocationOffset + croPointer); - } - } - - return true; - } - - bool unrebaseAnonymousImportTable() { - const CROHeaderEntry anonymousImportTable = getHeaderEntry(CROHeader::AnonymousImportTableOffset); - - for (u32 anonymousImport = 0; anonymousImport < anonymousImportTable.size; anonymousImport++) { - u32 relocationOffset = mem.read32(anonymousImportTable.offset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset); - - if (relocationOffset != 0) { - mem.write32(anonymousImportTable.offset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset, relocationOffset - croPointer); - } - } - - return true; - } - - bool relocateInternalSymbols(u32 oldDataVaddr) { - const u8* header = (u8*)mem.getReadPointer(croPointer); - - const CROHeaderEntry relocationPatchTable = getHeaderEntry(CROHeader::RelocationPatchTableOffset); - const CROHeaderEntry segmentTable = getHeaderEntry(CROHeader::SegmentTableOffset); - - for (u32 relocationPatch = 0; relocationPatch < relocationPatchTable.size; relocationPatch++) { - const u32 segmentOffset = mem.read32(relocationPatchTable.offset + 12 * relocationPatch + RelocationPatch::SegmentOffset); - const u8 patchType = mem.read8(relocationPatchTable.offset + 12 * relocationPatch + RelocationPatch::PatchType); - const u8 segmentIndex = mem.read8(relocationPatchTable.offset + 12 * relocationPatch + RelocationPatch::SegmentIndex); - const u32 addend = mem.read32(relocationPatchTable.offset + 12 * relocationPatch + RelocationPatch::Addend); - - const u32 segmentAddr = getSegmentAddr(segmentOffset); - - const u32 entryID = mem.read32(segmentTable.offset + 12 * (segmentOffset & 0xF) + SegmentTable::ID); - - u32 relocationTarget = segmentAddr; - if (entryID == SegmentTable::SegmentID::DATA) { - // Recompute relocation target for .data - relocationTarget = oldDataVaddr + (segmentOffset >> 4); - } - - if (relocationTarget == 0) { - Helpers::panic("Relocation target is NULL"); - } - - const u32 symbolOffset = mem.read32(segmentTable.offset + 12 * segmentIndex + SegmentTable::Offset); - - patchSymbol(relocationTarget, patchType, addend, symbolOffset); - } - - return true; - } - - bool relocateStaticAnonymousSymbols() { - const CROHeaderEntry staticAnonymousSymbolTable = getHeaderEntry(CROHeader::StaticAnonymousSymbolTableOffset); - - for (u32 symbol = 0; symbol < staticAnonymousSymbolTable.size; symbol++) { - Helpers::panic("TODO: relocate static anonymous symbols"); - } - - return true; - } - - // Patches "__aeabi_atexit" symbol to "nnroAeabiAtexit_" - bool relocateExitSymbols(u32 loadedCRS) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - const u32 importStringSize = mem.read32(croPointer + CROHeader::ImportStringSize); - - const CROHeaderEntry namedImportTable = getHeaderEntry(CROHeader::NamedImportTableOffset); - - for (u32 namedImport = 0; namedImport < namedImportTable.size; namedImport++) { - const u32 nameOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset); - const u32 relocationOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset); - - const std::string symbolName = mem.readString(nameOffset, importStringSize); - - if (symbolName.compare(std::string("__aeabi_atexit")) == 0) { - // Find exit symbol in other CROs - u32 currentCROPointer = loadedCRS; - while (currentCROPointer != 0) { - CRO cro(mem, currentCROPointer, true); - - const u32 exportSymbolAddr = cro.getNamedExportSymbolAddr(std::string("nnroAeabiAtexit_")); - if (exportSymbolAddr != 0) { - patchBatch(relocationOffset, exportSymbolAddr); - - return true; - } - - currentCROPointer = cro.getNextCRO(); - } - } - } - - Helpers::warn("Failed to relocate exit symbols"); - - return false; - } - - bool importNamedSymbols(u32 loadedCRS) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - const u32 importStringSize = mem.read32(croPointer + CROHeader::ImportStringSize); - - const CROHeaderEntry namedImportTable = getHeaderEntry(CROHeader::NamedImportTableOffset); - - for (u32 namedImport = 0; namedImport < namedImportTable.size; namedImport++) { - const u32 relocationOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset); - - u8 isResolved = mem.read8(relocationOffset + RelocationPatch::IsResolved); - - if (isResolved == 0) { - const u32 nameOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset); - - const std::string symbolName = mem.readString(nameOffset, importStringSize); - - // Check every loaded CRO for the symbol (the pain) - u32 currentCROPointer = loadedCRS; - while (currentCROPointer != 0) { - CRO cro(mem, currentCROPointer, true); - - const u32 exportSymbolAddr = cro.getNamedExportSymbolAddr(symbolName); - if (exportSymbolAddr != 0) { - patchBatch(relocationOffset, exportSymbolAddr); - - isResolved = 1; - break; - } - - currentCROPointer = cro.getNextCRO(); - } - - if (isResolved == 0) { - Helpers::panic("Failed to resolve symbol %s", symbolName.c_str()); - } - } - } - - return true; - } - - bool clearNamedSymbols() { - const u32 onUnresolvedAddr = getOnUnresolvedAddr(); - - const CROHeaderEntry namedImportTable = getHeaderEntry(CROHeader::NamedImportTableOffset); - - for (u32 namedImport = 0; namedImport < namedImportTable.size; namedImport++) { - const u32 relocationOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset); - - patchBatch(relocationOffset, onUnresolvedAddr, true); - } - - return true; - } - - bool importModules(u32 loadedCRS) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - const u32 importStringSize = mem.read32(croPointer + CROHeader::ImportStringSize); - - const CROHeaderEntry importModuleTable = getHeaderEntry(CROHeader::ImportModuleTableOffset); - - for (u32 importModule = 0; importModule < importModuleTable.size; importModule++) { - const u32 nameOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::NameOffset); - - const std::string importModuleName = mem.readString(nameOffset, importStringSize); - - // Find import module - u32 currentCROPointer = loadedCRS; - while (currentCROPointer != 0) { - CRO cro(mem, currentCROPointer, true); - - if (importModuleName.compare(cro.getModuleName()) == 0) { - // Import indexed symbols - const CROHeaderEntry indexedExportTable = cro.getHeaderEntry(CROHeader::IndexedExportTableOffset); - - const u32 indexedOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset); - const u32 indexedNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedNum); - - for (u32 indexedImport = 0; indexedImport < indexedNum; indexedImport++) { - if (indexedOffset == 0) { - Helpers::panic("Indexed symbol offset is NULL"); - } - - const u32 importIndex = mem.read32(indexedOffset + 8 * indexedImport + IndexedImportTable::Index); - - const u32 segmentOffset = mem.read32(indexedExportTable.offset + 4 * importIndex + IndexedExportTable::SegmentOffset); - const u32 relocationOffset = mem.read32(indexedOffset + 8 * indexedImport + IndexedImportTable::RelocationOffset); - - patchBatch(relocationOffset, cro.getSegmentAddr(segmentOffset)); - } - - // Import anonymous symbols - const u32 anonymousOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset); - const u32 anonymousNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousNum); - - for (u32 anonymousImport = 0; anonymousImport < anonymousNum; anonymousImport++) { - if (anonymousOffset == 0) { - Helpers::panic("Anonymous symbol offset is NULL"); - } - - const u32 segmentOffset = mem.read32(anonymousOffset + 8 * anonymousImport + AnonymousImportTable::SegmentOffset); - const u32 relocationOffset = mem.read32(anonymousOffset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset); - - patchBatch(relocationOffset, cro.getSegmentAddr(segmentOffset)); - } - - break; - } - - currentCROPointer = cro.getNextCRO(); - } - - if (currentCROPointer == 0) { - Helpers::warn("Unable to find import module \"%s\"", importModuleName.c_str()); - } - } - - return true; - } - - bool clearModules() { - const u32 onUnresolvedAddr = getOnUnresolvedAddr(); - - const CROHeaderEntry importModuleTable = getHeaderEntry(CROHeader::ImportModuleTableOffset); - - for (u32 importModule = 0; importModule < importModuleTable.size; importModule++) { - // Clear indexed symbol imports - const u32 indexedOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset); - const u32 indexedNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedNum); - - for (u32 indexedImport = 0; indexedImport < indexedNum; indexedImport++) { - if (indexedOffset == 0) { - Helpers::panic("Indexed symbol offset is NULL"); - } - - const u32 relocationOffset = mem.read32(indexedOffset + 8 * indexedImport + IndexedImportTable::RelocationOffset); - - patchBatch(relocationOffset, onUnresolvedAddr, true); - } - - // Clear anonymous import symbols - const u32 anonymousOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset); - const u32 anonymousNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousNum); - - for (u32 anonymousImport = 0; anonymousImport < anonymousNum; anonymousImport++) { - if (anonymousOffset == 0) { - Helpers::panic("Anonymous symbol offset is NULL"); - } - - const u32 relocationOffset = mem.read32(anonymousOffset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset); - - patchBatch(relocationOffset, onUnresolvedAddr, true); - } - } - - return true; - } - - bool exportSymbols(u32 loadedCRS) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - u32 currentCROPointer = loadedCRS; - while (currentCROPointer != 0) { - CRO cro(mem, currentCROPointer, true); - - // Export named symbols - const u32 importStringSize = mem.read32(currentCROPointer + CROHeader::ImportStringSize); - - const CROHeaderEntry namedImportTable = cro.getHeaderEntry(CROHeader::NamedImportTableOffset); - - for (u32 namedImport = 0; namedImport < namedImportTable.size; namedImport++) { - const u32 relocationOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset); - - u8 isResolved = mem.read8(relocationOffset + RelocationPatch::IsResolved); - - if (isResolved == 0) { - const u32 nameOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset); - - const std::string symbolName = mem.readString(nameOffset, importStringSize); - - // Check our current CRO for the symbol - const u32 exportSymbolAddr = getNamedExportSymbolAddr(symbolName); - if (exportSymbolAddr == 0) { - continue; - } - - cro.patchBatch(relocationOffset, exportSymbolAddr); - } - } - - // Export indexed and anonymous symbols - const CROHeaderEntry importModuleTable = cro.getHeaderEntry(CROHeader::ImportModuleTableOffset); - - for (u32 importModule = 0; importModule < importModuleTable.size; importModule++) { - // Check if other CROs request module imports from this CRO - const u32 nameOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::NameOffset); - - const std::string moduleName = mem.readString(nameOffset, importStringSize); - - if (moduleName.compare(getModuleName()) != 0) { - continue; - } - - // Export indexed symbols - const u32 indexedOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset); - const u32 indexedNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedNum); - - for (u32 indexedImport = 0; indexedImport < indexedNum; indexedImport++) { - Helpers::panic("TODO: indexed exports"); - } - - // Export anonymous symbols - const u32 anonymousOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset); - const u32 anonymousNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousNum); - - for (u32 anonymousImport = 0; anonymousImport < anonymousNum; anonymousImport++) { - if (anonymousOffset == 0) { - Helpers::panic("Anonymous symbol offset is NULL"); - } - - const u32 segmentOffset = mem.read32(anonymousOffset + 8 * anonymousImport + AnonymousImportTable::SegmentOffset); - const u32 relocationOffset = mem.read32(anonymousOffset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset); - - cro.patchBatch(relocationOffset, getSegmentAddr(segmentOffset)); - } - } - - currentCROPointer = cro.getNextCRO(); - } - - return true; - } - - bool clearSymbolExports(u32 loadedCRS) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - u32 currentCROPointer = loadedCRS; - while (currentCROPointer != 0) { - CRO cro(mem, currentCROPointer, true); - - const u32 onUnresolvedAddr = cro.getOnUnresolvedAddr(); - - const u32 importStringSize = mem.read32(currentCROPointer + CROHeader::ImportStringSize); - - // Clear named symbol exports - const CROHeaderEntry namedImportTable = cro.getHeaderEntry(CROHeader::NamedImportTableOffset); - - for (u32 namedImport = 0; namedImport < namedImportTable.size; namedImport++) { - const u32 relocationOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::RelocationOffset); - - u8 isResolved = mem.read8(relocationOffset + RelocationPatch::IsResolved); - - if (isResolved != 0) { - const u32 nameOffset = mem.read32(namedImportTable.offset + 8 * namedImport + NamedImportTable::NameOffset); - - const std::string symbolName = mem.readString(nameOffset, importStringSize); - - // Check our current CRO for the symbol - const u32 exportSymbolAddr = getNamedExportSymbolAddr(symbolName); - if (exportSymbolAddr == 0) { - continue; - } - - cro.patchBatch(relocationOffset, onUnresolvedAddr, true); - } - } - - // Clear indexed and anonymous symbol exports - const CROHeaderEntry importModuleTable = cro.getHeaderEntry(CROHeader::ImportModuleTableOffset); - - for (u32 importModule = 0; importModule < importModuleTable.size; importModule++) { - // Check if other CROs request module imports from this CRO - const u32 nameOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::NameOffset); - - const std::string moduleName = mem.readString(nameOffset, importStringSize); - - if (moduleName.compare(getModuleName()) != 0) { - continue; - } - - // Export indexed symbols - const u32 indexedOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedOffset); - const u32 indexedNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::IndexedNum); - - for (u32 indexedImport = 0; indexedImport < indexedNum; indexedImport++) { - Helpers::panic("TODO: clear indexed exports"); - } - - // Export anonymous symbols - const u32 anonymousOffset = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousOffset); - const u32 anonymousNum = mem.read32(importModuleTable.offset + 20 * importModule + ImportModuleTable::AnonymousNum); - - for (u32 anonymousImport = 0; anonymousImport < anonymousNum; anonymousImport++) { - if (anonymousOffset == 0) { - Helpers::panic("Anonymous symbol offset is NULL"); - } - - const u32 relocationOffset = mem.read32(anonymousOffset + 8 * anonymousImport + AnonymousImportTable::RelocationOffset); - - cro.patchBatch(relocationOffset, onUnresolvedAddr, true); - } - } - - currentCROPointer = cro.getNextCRO(); - } - - return true; - } - - // Links CROs. Heavily based on Citra's CRO linker - bool link(u32 loadedCRS, bool isNew) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - const CROHeaderEntry segmentTable = getHeaderEntry(CROHeader::SegmentTableOffset); - - // Fix data segment offset (LoadCRO_New) - // Note: the old LoadCRO does *not* fix .data - u32 dataVaddr; - if (isNew) { - if (segmentTable.size > 1) { - // Note: ldr:ro assumes that segment index 2 is .data - dataVaddr = mem.read32(segmentTable.offset + 24 + SegmentTable::Offset); - - mem.write32(segmentTable.offset + 24 + SegmentTable::Offset, mem.read32(croPointer + CROHeader::DataOffset)); - } - } - - importNamedSymbols(loadedCRS); - importModules(loadedCRS); - exportSymbols(loadedCRS); - - // Restore .data segment offset (LoadCRO_New) - if (isNew) { - if (segmentTable.size > 1) { - mem.write32(segmentTable.offset + 24 + SegmentTable::Offset, dataVaddr); - } - } - - return true; - } - - bool unlink(u32 loadedCRS) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - clearNamedSymbols(); - clearModules(); - clearSymbolExports(loadedCRS); - - return true; - } - - // Adds CRO to the linked list of loaded CROs - void registerCRO(u32 loadedCRS, bool autoLink) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - CRO crs(mem, loadedCRS, false); - - u32 headAddr = crs.getPrevCRO(); - if (autoLink) { - headAddr = crs.getNextCRO(); - } - - if (headAddr == 0) { - // Register first CRO - setPrevCRO(croPointer); - - if (autoLink) { - crs.setNextCRO(croPointer); - } else { - crs.setPrevCRO(croPointer); - } - } else { - // Register new CRO - CRO head(mem, headAddr, true); - CRO tail(mem, head.getPrevCRO(), true); - - if (tail.getNextCRO() != 0) { - Helpers::panic("Invalid CRO tail"); - } - - setPrevCRO(tail.croPointer); - - tail.setNextCRO(croPointer); - head.setPrevCRO(croPointer); - } - } - - // Thanks, Citra - void unregisterCRO(u32 loadedCRS) { - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - CRO crs(mem, loadedCRS, false); - - CRO next(mem, getNextCRO(), true); - CRO prev(mem, getPrevCRO(), true); - - CRO nextHead(mem, crs.getNextCRO(), true); - CRO prevHead(mem, crs.getPrevCRO(), true); - - if ((croPointer == nextHead.croPointer) || (croPointer == prevHead.croPointer)) { - // Our current CRO is the head, remove it - const u32 nextPointer = next.croPointer; - - if (nextPointer != 0) { - next.setPrevCRO(prev.croPointer); - } - - if (croPointer == prevHead.croPointer) { - crs.setPrevCRO(nextPointer); - } else { - crs.setNextCRO(nextPointer); - } - } else if (next.croPointer != 0) { - // Our current CRO is neither the head nor the tail, - // link the next and previous CRO with each other - prev.setNextCRO(next.croPointer); - next.setPrevCRO(prev.croPointer); - } else { - // Our current CRO is the tail, remove it - prev.setNextCRO(0); - - const u32 prevPointer = prev.croPointer; - - if ((nextHead.croPointer != 0) && (nextHead.getPrevCRO() == croPointer)) { - nextHead.setPrevCRO(prevPointer); - } else if ((prevHead.croPointer != 0) && (prevHead.getPrevCRO() == croPointer)) { - prevHead.setPrevCRO(prevPointer); - } else { - Helpers::panic("bwaaa"); - } - } - - setNextCRO(0); - setPrevCRO(0); - } -}; - -void LDRService::reset() { - loadedCRS = 0; -} +void LDRService::reset() {} void LDRService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case LDRCommands::Initialize: initialize(messagePointer); break; case LDRCommands::LoadCRR: loadCRR(messagePointer); break; - case LDRCommands::LoadCRO: loadCRO(messagePointer, false); break; - case LDRCommands::UnloadCRO: unloadCRO(messagePointer); break; - case LDRCommands::LinkCRO: linkCRO(messagePointer); break; - case LDRCommands::LoadCRONew: loadCRO(messagePointer, true); break; default: Helpers::panic("LDR::RO service requested. Command: %08X\n", command); } } @@ -1222,74 +26,10 @@ void LDRService::initialize(u32 messagePointer) { const Handle process = mem.read32(messagePointer + 20); log("LDR_RO::Initialize (buffer = %08X, size = %08X, vaddr = %08X, process = %X)\n", crsPointer, size, mapVaddr, process); - - // Sanity checks - if (loadedCRS != 0) { - Helpers::panic("CRS already loaded\n"); - } - - if (size < CRO_HEADER_SIZE) { - Helpers::panic("CRS too small\n"); - } - - if (!mem.isAligned(size)) { - Helpers::panic("Unaligned CRS size\n"); - } - - if (!mem.isAligned(crsPointer)) { - Helpers::panic("Unaligned CRS pointer\n"); - } - - if (!mem.isAligned(mapVaddr)) { - Helpers::panic("Unaligned CRS output vaddr\n"); - } - - // Map CRO to output address - mem.mirrorMapping(mapVaddr, crsPointer, size); - - CRO crs(mem, mapVaddr, false); - - if (!crs.load()) { - Helpers::panic("Failed to load CRS"); - } - - if (!crs.rebase(0, 0, 0)) { - Helpers::panic("Failed to rebase CRS"); - } - - kernel.clearInstructionCacheRange(mapVaddr, size); - loadedCRS = mapVaddr; - mem.write32(messagePointer, IPC::responseHeader(0x1, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } -void LDRService::linkCRO(u32 messagePointer) { - const u32 mapVaddr = mem.read32(messagePointer + 4); - const Handle process = mem.read32(messagePointer + 12); - - log("LDR_RO::LinkCRO (vaddr = %X, process = %X)\n", mapVaddr, process); - - if (loadedCRS == 0) { - Helpers::panic("CRS not loaded"); - } - - if (!mem.isAligned(mapVaddr)) { - Helpers::panic("Unaligned CRO vaddr\n"); - } - - CRO cro(mem, mapVaddr, true); - - // TODO: check if CRO has been loaded prior to calling this - - if (!cro.link(loadedCRS, false)) { - Helpers::panic("Failed to link CRO"); - } - - mem.write32(messagePointer, IPC::responseHeader(0x6, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - void LDRService::loadCRR(u32 messagePointer) { const u32 crrPointer = mem.read32(messagePointer + 4); const u32 size = mem.read32(messagePointer + 8); @@ -1298,101 +38,4 @@ void LDRService::loadCRR(u32 messagePointer) { log("LDR_RO::LoadCRR (buffer = %08X, size = %08X, process = %X)\n", crrPointer, size, process); mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0)); mem.write32(messagePointer + 4, Result::Success); -} - -void LDRService::loadCRO(u32 messagePointer, bool isNew) { - const u32 croPointer = mem.read32(messagePointer + 4); - const u32 mapVaddr = mem.read32(messagePointer + 8); - const u32 size = mem.read32(messagePointer + 12); - const u32 dataVaddr = mem.read32(messagePointer + 16); - const u32 dataSize = mem.read32(messagePointer + 24); - const u32 bssVaddr = mem.read32(messagePointer + 28); - const u32 bssSize = mem.read32(messagePointer + 32); - const bool autoLink = mem.read32(messagePointer + 36) != 0; - const u32 fixLevel = mem.read32(messagePointer + 40); - const Handle process = mem.read32(messagePointer + 52); - - log("LDR_RO::LoadCRO (isNew = %d, buffer = %08X, vaddr = %08X, size = %08X, .data vaddr = %08X, .data size = %08X, .bss vaddr = %08X, .bss size = %08X, auto link = %d, fix level = %X, process = %X)\n", isNew, croPointer, mapVaddr, size, dataVaddr, dataSize, bssVaddr, bssSize, autoLink, fixLevel, process); - - // Sanity checks - if (size < CRO_HEADER_SIZE) { - Helpers::panic("CRO too small\n"); - } - - if (!mem.isAligned(size)) { - Helpers::panic("Unaligned CRO size\n"); - } - - if (!mem.isAligned(croPointer)) { - Helpers::panic("Unaligned CRO pointer\n"); - } - - if (!mem.isAligned(mapVaddr)) { - Helpers::panic("Unaligned CRO output vaddr\n"); - } - - // Map CRO to output address - mem.mirrorMapping(mapVaddr, croPointer, size); - - CRO cro(mem, mapVaddr, true); - - if (!cro.load()) { - Helpers::panic("Failed to load CRO"); - } - - if (!cro.rebase(loadedCRS, dataVaddr, bssVaddr)) { - Helpers::panic("Failed to rebase CRO"); - } - - if (!cro.link(loadedCRS, isNew)) { - Helpers::panic("Failed to link CRO"); - } - - cro.registerCRO(loadedCRS, autoLink); - - // TODO: add fixing - cro.fix(fixLevel); - kernel.clearInstructionCacheRange(mapVaddr, size); - - if (isNew) { - mem.write32(messagePointer, IPC::responseHeader(0x9, 2, 0)); - } else { - mem.write32(messagePointer, IPC::responseHeader(0x4, 2, 0)); - } - - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, size); -} - -void LDRService::unloadCRO(u32 messagePointer) { - const u32 mapVaddr = mem.read32(messagePointer + 4); - const u32 croPointer = mem.read32(messagePointer + 12); - const Handle process = mem.read32(messagePointer + 20); - - log("LDR_RO::UnloadCRO (vaddr = %08X, buffer = %08X, process = %X)\n", mapVaddr, croPointer, process); - - // TODO: is CRO loaded? - - if (!mem.isAligned(croPointer)) { - Helpers::panic("Unaligned CRO pointer\n"); - } - - if (!mem.isAligned(mapVaddr)) { - Helpers::panic("Unaligned CRO output vaddr\n"); - } - - CRO cro(mem, mapVaddr, true); - cro.unregisterCRO(loadedCRS); - - if (!cro.unlink(loadedCRS)) { - Helpers::panic("Failed to unlink CRO"); - } - - if (!cro.unrebase()) { - Helpers::panic("Failed to unrebase CRO"); - } - - kernel.clearInstructionCacheRange(mapVaddr, cro.getFixedSize()); - mem.write32(messagePointer, IPC::responseHeader(0x5, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/mcu/mcu_hwc.cpp b/src/core/services/mcu/mcu_hwc.cpp index 0e4e6ed3..2873adf5 100644 --- a/src/core/services/mcu/mcu_hwc.cpp +++ b/src/core/services/mcu/mcu_hwc.cpp @@ -1,12 +1,10 @@ -#include "services/mcu/mcu_hwc.hpp" - #include "ipc.hpp" #include "result/result.hpp" +#include "services/mcu/mcu_hwc.hpp" namespace MCU::HWCCommands { enum : u32 { GetBatteryLevel = 0x00050000, - SetInfoLedPattern = 0x000A0640, }; } @@ -16,7 +14,6 @@ void MCU::HWCService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case HWCCommands::GetBatteryLevel: getBatteryLevel(messagePointer); break; - case HWCCommands::SetInfoLedPattern: setInfoLEDPattern(messagePointer); break; default: Helpers::panic("MCU::HWC service requested. Command: %08X\n", command); } } @@ -27,12 +24,4 @@ void MCU::HWCService::getBatteryLevel(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x5, 2, 0)); mem.write32(messagePointer + 4, Result::Success); mem.write8(messagePointer + 8, config.batteryPercentage); -} - -void MCU::HWCService::setInfoLEDPattern(u32 messagePointer) { - log("MCU::HWC::SetInfoLedPattern\n"); - - // 25 parameters to make some notification LEDs blink... - mem.write32(messagePointer, IPC::responseHeader(0xA, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/mic.cpp b/src/core/services/mic.cpp index aae9cb40..c20159f1 100644 --- a/src/core/services/mic.cpp +++ b/src/core/services/mic.cpp @@ -1,5 +1,4 @@ #include "services/mic.hpp" - #include "ipc.hpp" #include "kernel/kernel.hpp" @@ -128,8 +127,9 @@ void MICService::startSampling(u32 messagePointer) { u32 dataSize = mem.read32(messagePointer + 16); bool loop = mem.read8(messagePointer + 20); - log("MIC::StartSampling (encoding = %d, sample rate = %d, offset = %08X, size = %08X, loop: %s) (stubbed)\n", encoding, sampleRate, offset, - dataSize, loop ? "yes" : "no"); + log("MIC::StartSampling (encoding = %d, sample rate = %d, offset = %08X, size = %08X, loop: %s) (stubbed)\n", + encoding, sampleRate, offset, dataSize, loop ? "yes" : "no" + ); currentlySampling = true; mem.write32(messagePointer, IPC::responseHeader(0x3, 1, 0)); @@ -139,7 +139,7 @@ void MICService::startSampling(u32 messagePointer) { void MICService::stopSampling(u32 messagePointer) { log("MIC::StopSampling\n"); currentlySampling = false; - + mem.write32(messagePointer, IPC::responseHeader(0x5, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } diff --git a/src/core/services/ndm.cpp b/src/core/services/ndm.cpp index a2b63864..ecda3df9 100644 --- a/src/core/services/ndm.cpp +++ b/src/core/services/ndm.cpp @@ -1,12 +1,8 @@ #include "services/ndm.hpp" - #include "ipc.hpp" namespace NDMCommands { enum : u32 { - EnterExclusiveState = 0x00010042, - ExitExclusiveState = 0x00020002, - QueryExclusiveMode = 0x00030000, OverrideDefaultDaemons = 0x00140040, SuspendDaemons = 0x00060040, ResumeDaemons = 0x00070040, @@ -16,16 +12,13 @@ namespace NDMCommands { }; } -void NDMService::reset() { exclusiveState = ExclusiveState::None; } +void NDMService::reset() {} void NDMService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { - case NDMCommands::EnterExclusiveState: enterExclusiveState(messagePointer); break; - case NDMCommands::ExitExclusiveState: exitExclusiveState(messagePointer); break; case NDMCommands::ClearHalfAwakeMacFilter: clearHalfAwakeMacFilter(messagePointer); break; case NDMCommands::OverrideDefaultDaemons: overrideDefaultDaemons(messagePointer); break; - case NDMCommands::QueryExclusiveMode: queryExclusiveState(messagePointer); break; case NDMCommands::ResumeDaemons: resumeDaemons(messagePointer); break; case NDMCommands::ResumeScheduler: resumeScheduler(messagePointer); break; case NDMCommands::SuspendDaemons: suspendDaemons(messagePointer); break; @@ -34,37 +27,6 @@ void NDMService::handleSyncRequest(u32 messagePointer) { } } -void NDMService::enterExclusiveState(u32 messagePointer) { - log("NDM::EnterExclusiveState (stubbed)\n"); - const u32 state = mem.read32(messagePointer + 4); - - // Check that the exclusive state config is valid - if (state > 4) { - Helpers::warn("NDM::EnterExclusiveState: Invalid state %d", state); - } else { - exclusiveState = static_cast(state); - } - - mem.write32(messagePointer, IPC::responseHeader(0x1, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void NDMService::exitExclusiveState(u32 messagePointer) { - log("NDM::ExitExclusiveState (stubbed)\n"); - exclusiveState = ExclusiveState::None; - - mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void NDMService::queryExclusiveState(u32 messagePointer) { - log("NDM::QueryExclusiveState\n"); - - mem.write32(messagePointer, IPC::responseHeader(0x3, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, static_cast(exclusiveState)); -} - void NDMService::overrideDefaultDaemons(u32 messagePointer) { log("NDM::OverrideDefaultDaemons (stubbed)\n"); mem.write32(messagePointer, IPC::responseHeader(0x14, 1, 0)); diff --git a/src/core/services/news_u.cpp b/src/core/services/news_u.cpp index 44951fe6..ad5df595 100644 --- a/src/core/services/news_u.cpp +++ b/src/core/services/news_u.cpp @@ -1,6 +1,5 @@ -#include "services/news_u.hpp" - #include "ipc.hpp" +#include "services/news_u.hpp" namespace NewsCommands { enum : u32 {}; diff --git a/src/core/services/nfc.cpp b/src/core/services/nfc.cpp index 2c8b3256..b1e04ab2 100644 --- a/src/core/services/nfc.cpp +++ b/src/core/services/nfc.cpp @@ -1,6 +1,4 @@ #include "services/nfc.hpp" - -#include "io_file.hpp" #include "ipc.hpp" #include "kernel.hpp" @@ -11,20 +9,15 @@ namespace NFCCommands { StartCommunication = 0x00030000, StopCommunication = 0x00040000, StartTagScanning = 0x00050040, - StopTagScanning = 0x00060000, GetTagInRangeEvent = 0x000B0000, GetTagOutOfRangeEvent = 0x000C0000, GetTagState = 0x000D0000, CommunicationGetStatus = 0x000F0000, - GetTagInfo = 0x00110000, CommunicationGetResult = 0x00120000, - LoadAmiiboPartially = 0x001A0000, - GetModelInfo = 0x001B0000, }; } void NFCService::reset() { - device.reset(); tagInRangeEvent = std::nullopt; tagOutOfRangeEvent = std::nullopt; @@ -36,60 +29,19 @@ void NFCService::reset() { void NFCService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { - case NFCCommands::CommunicationGetResult: communicationGetResult(messagePointer); break; case NFCCommands::CommunicationGetStatus: communicationGetStatus(messagePointer); break; case NFCCommands::Initialize: initialize(messagePointer); break; - case NFCCommands::GetModelInfo: getModelInfo(messagePointer); break; - case NFCCommands::GetTagInfo: getTagInfo(messagePointer); break; case NFCCommands::GetTagInRangeEvent: getTagInRangeEvent(messagePointer); break; case NFCCommands::GetTagOutOfRangeEvent: getTagOutOfRangeEvent(messagePointer); break; case NFCCommands::GetTagState: getTagState(messagePointer); break; - case NFCCommands::LoadAmiiboPartially: loadAmiiboPartially(messagePointer); break; case NFCCommands::Shutdown: shutdown(messagePointer); break; case NFCCommands::StartCommunication: startCommunication(messagePointer); break; case NFCCommands::StartTagScanning: startTagScanning(messagePointer); break; case NFCCommands::StopCommunication: stopCommunication(messagePointer); break; - case NFCCommands::StopTagScanning: stopTagScanning(messagePointer); break; default: Helpers::panic("NFC service requested. Command: %08X\n", command); } } -bool NFCService::loadAmiibo(const std::filesystem::path& path) { - if (!initialized || tagStatus != TagStatus::Scanning) { - Helpers::warn("It's not the correct time to load an amiibo! Make sure to load amiibi when the game is searching for one!"); - return false; - } - - IOFile file(path, "rb"); - if (!file.isOpen()) { - printf("Failed to open Amiibo file"); - file.close(); - - return false; - } - - auto [success, bytesRead] = file.readBytes(&device.raw, AmiiboDevice::tagSize); - if (!success || bytesRead != AmiiboDevice::tagSize) { - printf("Failed to read entire tag from Amiibo file: File might not be a proper amiibo file\n"); - file.close(); - - return false; - } - - device.loadFromRaw(); - - if (tagOutOfRangeEvent.has_value()) { - kernel.clearEvent(tagOutOfRangeEvent.value()); - } - - if (tagInRangeEvent.has_value()) { - kernel.signalEvent(tagInRangeEvent.value()); - } - - file.close(); - return true; -} - void NFCService::initialize(u32 messagePointer) { const u8 type = mem.read8(messagePointer + 4); log("NFC::Initialize (type = %d)\n", type); @@ -148,7 +100,7 @@ void NFCService::getTagOutOfRangeEvent(u32 messagePointer) { } void NFCService::getTagState(u32 messagePointer) { - log("NFC::GetTagState\n"); + log("NFC::GetTagState"); mem.write32(messagePointer, IPC::responseHeader(0xD, 2, 0)); mem.write32(messagePointer + 4, Result::Success); @@ -156,7 +108,7 @@ void NFCService::getTagState(u32 messagePointer) { } void NFCService::communicationGetStatus(u32 messagePointer) { - log("NFC::CommunicationGetStatus\n"); + log("NFC::CommunicationGetStatus"); if (!initialized) { Helpers::warn("NFC::CommunicationGetStatus: Old 3DS NFC Adapter not initialized\n"); @@ -167,20 +119,6 @@ void NFCService::communicationGetStatus(u32 messagePointer) { mem.write8(messagePointer + 8, static_cast(adapterStatus)); } -void NFCService::communicationGetResult(u32 messagePointer) { - log("NFC::CommunicationGetResult\n"); - - if (!initialized) { - Helpers::warn("NFC::CommunicationGetResult: Old 3DS NFC Adapter not initialized\n"); - } - - mem.write32(messagePointer, IPC::responseHeader(0x12, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - // On N3DS: This always writes 0 here - // On O3DS with the NFC adapter: Returns a result code for NFC communication - mem.write32(messagePointer + 8, 0); -} - void NFCService::startCommunication(u32 messagePointer) { log("NFC::StartCommunication\n"); // adapterStatus = Old3DSAdapterStatus::Active; @@ -192,28 +130,12 @@ void NFCService::startCommunication(u32 messagePointer) { void NFCService::startTagScanning(u32 messagePointer) { log("NFC::StartTagScanning\n"); - if (!initialized) { - Helpers::warn("Scanning for NFC tags before NFC service is initialized"); - } - tagStatus = TagStatus::Scanning; mem.write32(messagePointer, IPC::responseHeader(0x5, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } -void NFCService::stopTagScanning(u32 messagePointer) { - log("NFC::StopTagScanning\n"); - if (!initialized) { - Helpers::warn("Stopping scanning for NFC tags before NFC service is initialized"); - } - - tagStatus = TagStatus::Initialized; - - mem.write32(messagePointer, IPC::responseHeader(0x6, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - void NFCService::stopCommunication(u32 messagePointer) { log("NFC::StopCommunication\n"); adapterStatus = Old3DSAdapterStatus::InitializationComplete; @@ -221,28 +143,4 @@ void NFCService::stopCommunication(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x4, 1, 0)); mem.write32(messagePointer + 4, Result::Success); -} - -void NFCService::getTagInfo(u32 messagePointer) { - log("NFC::GetTagInfo\n"); - Helpers::warn("Unimplemented NFC::GetTagInfo"); - - mem.write32(messagePointer, IPC::responseHeader(0x11, 12, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void NFCService::loadAmiiboPartially(u32 messagePointer) { - log("NFC::LoadAmiiboPartially\n"); - Helpers::warn("Unimplemented NFC::LoadAmiiboPartially"); - - mem.write32(messagePointer, IPC::responseHeader(0x1A, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void NFCService::getModelInfo(u32 messagePointer) { - log("NFC::GetModelInfo\n"); - Helpers::warn("Unimplemented NFC::GetModelInfo"); - - mem.write32(messagePointer, IPC::responseHeader(0x1B, 14, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/nim.cpp b/src/core/services/nim.cpp index 75d8ebac..e4e14c1c 100644 --- a/src/core/services/nim.cpp +++ b/src/core/services/nim.cpp @@ -1,10 +1,9 @@ #include "services/nim.hpp" - #include "ipc.hpp" namespace NIMCommands { enum : u32 { - Initialize = 0x00210000, + Initialize = 0x00210000 }; } diff --git a/src/core/services/ns.cpp b/src/core/services/ns.cpp deleted file mode 100644 index f26e72d3..00000000 --- a/src/core/services/ns.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "services/ns.hpp" - -#include "ipc.hpp" - -namespace NSCommands { - enum : u32 { - LaunchTitle = 0x000200C0, - }; -} - -void NSService::reset() {} - -void NSService::handleSyncRequest(u32 messagePointer, Type type) { - const u32 command = mem.read32(messagePointer); - - // ns:s commands - switch (command) { - case NSCommands::LaunchTitle: launchTitle(messagePointer); break; - - default: Helpers::panic("NS service requested. Command: %08X\n", command); - } -} - -void NSService::launchTitle(u32 messagePointer) { - const u64 titleID = mem.read64(messagePointer + 4); - const u32 launchFlags = mem.read32(messagePointer + 12); - Helpers::warn("NS::LaunchTitle (title ID = %llX, launch flags = %X) (stubbed)", titleID, launchFlags); - - mem.write32(messagePointer, IPC::responseHeader(0x2, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // Process ID -} diff --git a/src/core/services/nwm_uds.cpp b/src/core/services/nwm_uds.cpp deleted file mode 100644 index 2dc18db2..00000000 --- a/src/core/services/nwm_uds.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "services/nwm_uds.hpp" - -#include "ipc.hpp" -#include "kernel.hpp" -#include "result/result.hpp" - -namespace NWMCommands { - enum : u32 { - InitializeWithVersion = 0x001B0302, - }; -} - -void NwmUdsService::reset() { - eventHandle = std::nullopt; - initialized = false; -} - -void NwmUdsService::handleSyncRequest(u32 messagePointer) { - const u32 command = mem.read32(messagePointer); - - switch (command) { - case NWMCommands::InitializeWithVersion: initializeWithVersion(messagePointer); break; - default: Helpers::panic("NWM::UDS service requested. Command: %08X\n", command); - } -} - -void NwmUdsService::initializeWithVersion(u32 messagePointer) { - Helpers::warn("Initializing NWM::UDS (Local multiplayer, unimplemented)\n"); - log("NWM::UDS::InitializeWithVersion\n"); - - if (!eventHandle.has_value()) { - eventHandle = kernel.makeEvent(ResetType::OneShot); - } - - if (initialized) { - printf("NWM::UDS initialized twice\n"); - } - - initialized = true; - - // Stubbed to fail temporarily, since some games will break trying to establish networks otherwise - mem.write32(messagePointer + 4, Result::FailurePlaceholder); - mem.write32(messagePointer + 8, 0); - mem.write32(messagePointer + 12, eventHandle.value()); -} diff --git a/src/core/services/ptm.cpp b/src/core/services/ptm.cpp index d01a14ff..57fbf638 100644 --- a/src/core/services/ptm.cpp +++ b/src/core/services/ptm.cpp @@ -1,80 +1,27 @@ #include "services/ptm.hpp" - #include "ipc.hpp" namespace PTMCommands { enum : u32 { GetAdapterState = 0x00050000, GetBatteryLevel = 0x00070000, - GetBatteryChargeState = 0x00080000, - GetPedometerState = 0x00090000, GetStepHistory = 0x000B00C2, GetTotalStepCount = 0x000C0000, - GetStepHistoryAll = 0x000F0084, ConfigureNew3DSCPU = 0x08180040, - - // ptm:gets functions - GetSystemTime = 0x04010000, - - // ptm:play functions - GetPlayHistory = 0x08070082, - GetPlayHistoryStart = 0x08080000, - GetPlayHistoryLength = 0x08090000, - CalcPlayHistoryStart = 0x080B0080, - GetSoftwareClosedFlag = 0x080F0000, - ClearSoftwareClosedFlag = 0x08100000, }; } void PTMService::reset() {} -void PTMService::handleSyncRequest(u32 messagePointer, PTMService::Type type) { +void PTMService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); - - // ptm:play functions switch (command) { case PTMCommands::ConfigureNew3DSCPU: configureNew3DSCPU(messagePointer); break; case PTMCommands::GetAdapterState: getAdapterState(messagePointer); break; - case PTMCommands::GetBatteryChargeState: getBatteryChargeState(messagePointer); break; case PTMCommands::GetBatteryLevel: getBatteryLevel(messagePointer); break; - case PTMCommands::GetPedometerState: getPedometerState(messagePointer); break; case PTMCommands::GetStepHistory: getStepHistory(messagePointer); break; - case PTMCommands::GetStepHistoryAll: getStepHistoryAll(messagePointer); break; case PTMCommands::GetTotalStepCount: getTotalStepCount(messagePointer); break; - - default: - // ptm:play-only functions - if (type == Type::PLAY) { - switch (command) { - case PTMCommands::GetPlayHistory: - case PTMCommands::GetPlayHistoryStart: - case PTMCommands::GetPlayHistoryLength: - mem.write32(messagePointer + 4, Result::Success); - mem.write64(messagePointer + 8, 0); - Helpers::warn("Stubbed PTM:PLAY service requested. Command: %08X\n", command); - break; - - default: Helpers::panic("PTM PLAY service requested. Command: %08X\n", command); break; - } - } else if (type == Type::GETS) { - switch (command) { - case PTMCommands::GetSystemTime: getSystemTime(messagePointer); break; - - default: Helpers::panic("PTM GETS service requested. Command: %08X\n", command); break; - } - } else if (type == Type::SYSM) { - switch (command) { - case PTMCommands::GetSoftwareClosedFlag: getSoftwareClosedFlag(messagePointer); break; - case PTMCommands::ClearSoftwareClosedFlag: clearSoftwareClosedFlag(messagePointer); break; - - default: - mem.write32(messagePointer + 4, Result::Success); - Helpers::warn("PTM SYSM service requested. Command: %08X\n", command); - break; - } - } else { - Helpers::panic("PTM service requested. Command: %08X\n", command); - } + default: Helpers::panic("PTM service requested. Command: %08X\n", command); } } @@ -86,25 +33,6 @@ void PTMService::getAdapterState(u32 messagePointer) { mem.write8(messagePointer + 8, config.chargerPlugged ? 1 : 0); } -void PTMService::getBatteryChargeState(u32 messagePointer) { - log("PTM::GetBatteryChargeState"); - // We're only charging if the battery is not already full - const bool charging = config.chargerPlugged && (config.batteryPercentage < 100); - - mem.write32(messagePointer, IPC::responseHeader(0x8, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, charging ? 1 : 0); -} - -void PTMService::getPedometerState(u32 messagePointer) { - log("PTM::GetPedometerState"); - constexpr bool countingSteps = true; - - mem.write32(messagePointer, IPC::responseHeader(0x9, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, countingSteps ? 1 : 0); -} - void PTMService::getBatteryLevel(u32 messagePointer) { log("PTM::GetBatteryLevel"); @@ -119,43 +47,15 @@ void PTMService::getStepHistory(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void PTMService::getStepHistoryAll(u32 messagePointer) { - log("PTM::GetStepHistoryAll [stubbed]\n"); - mem.write32(messagePointer, IPC::responseHeader(0xF, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); -} - void PTMService::getTotalStepCount(u32 messagePointer) { log("PTM::GetTotalStepCount\n"); mem.write32(messagePointer, IPC::responseHeader(0xC, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 3); // We walk a lot + mem.write32(messagePointer + 8, 3); // We walk a lot } void PTMService::configureNew3DSCPU(u32 messagePointer) { log("PTM::ConfigureNew3DSCPU [stubbed]\n"); mem.write32(messagePointer, IPC::responseHeader(0x818, 1, 0)); mem.write32(messagePointer + 4, Result::Success); -} - -void PTMService::getSystemTime(u32 messagePointer) { - log("PTM::GetSystemTime [stubbed]\n"); - Helpers::warn("PTM::GetSystemTime called"); - - mem.write32(messagePointer, IPC::responseHeader(0x401, 3, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write64(messagePointer + 8, 0); // Milliseconds since 2000? -} - -void PTMService::getSoftwareClosedFlag(u32 messagePointer) { - log("PTM::GetSoftwareClosedFlag\n"); - mem.write32(messagePointer, IPC::responseHeader(0x80F, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, 0); // Show software closed dialog -} - -void PTMService::clearSoftwareClosedFlag(u32 messagePointer) { - log("PTM::ClearSoftwareClosedFlag\n"); - mem.write32(messagePointer, IPC::responseHeader(0x810, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file diff --git a/src/core/services/service_manager.cpp b/src/core/services/service_manager.cpp index bd4488e9..54e3ecf9 100644 --- a/src/core/services/service_manager.cpp +++ b/src/core/services/service_manager.cpp @@ -1,19 +1,15 @@ #include "services/service_manager.hpp" -#include +#include #include "ipc.hpp" #include "kernel.hpp" -#include "services/service_map.hpp" -ServiceManager::ServiceManager( - std::span regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel, const EmulatorConfig& config, LuaManager& lua -) - : regs(regs), mem(mem), kernel(kernel), lua(lua), ac(mem), am(mem), boss(mem), act(mem), apt(mem, kernel), cam(mem, kernel), cecd(mem, kernel), - cfg(mem, config), csnd(mem, kernel), dlp_srvr(mem), dsp(mem, kernel, config), hid(mem, kernel), http(mem), ir_user(mem, hid, config, kernel), - frd(mem), fs(mem, kernel, config), gsp_gpu(mem, gpu, kernel, currentPID), gsp_lcd(mem), ldr(mem, kernel), mcu_hwc(mem, config), - mic(mem, kernel), nfc(mem, kernel), nim(mem), ndm(mem), news_u(mem), ns(mem), nwm_uds(mem, kernel), ptm(mem, config), soc(mem), ssl(mem), - y2r(mem, kernel) {} +ServiceManager::ServiceManager(std::span regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel, const EmulatorConfig& config) + : regs(regs), mem(mem), kernel(kernel), ac(mem), am(mem), boss(mem), act(mem), apt(mem, kernel), cam(mem, kernel), cecd(mem, kernel), cfg(mem), + dlp_srvr(mem), dsp(mem, kernel), hid(mem, kernel), http(mem), ir_user(mem, kernel), frd(mem), fs(mem, kernel), + gsp_gpu(mem, gpu, kernel, currentPID), gsp_lcd(mem), ldr(mem), mcu_hwc(mem, config), mic(mem, kernel), nfc(mem, kernel), nim(mem), ndm(mem), + news_u(mem), ptm(mem, config), soc(mem), ssl(mem), y2r(mem, kernel) {} static constexpr int MAX_NOTIFICATION_COUNT = 16; @@ -27,7 +23,6 @@ void ServiceManager::reset() { cam.reset(); cecd.reset(); cfg.reset(); - csnd.reset(); dlp_srvr.reset(); dsp.reset(); hid.reset(); @@ -44,7 +39,6 @@ void ServiceManager::reset() { news_u.reset(); nfc.reset(); nim.reset(); - ns.reset(); ptm.reset(); soc.reset(); ssl.reset(); @@ -86,8 +80,7 @@ void ServiceManager::handleSyncRequest(u32 messagePointer) { case Commands::GetServiceHandle: getServiceHandle(messagePointer); break; case Commands::Subscribe: subscribe(messagePointer); break; case Commands::Unsubscribe: unsubscribe(messagePointer); break; - case Commands::PublishToSubscriber: publishToSubscriber(messagePointer); break; - default: Helpers::panic("Unknown \"srv:\" command: %08X", header); break; + default: Helpers::panic("Unknown \"srv:\" command: %08X", header); } } @@ -99,33 +92,24 @@ void ServiceManager::registerClient(u32 messagePointer) { } // clang-format off -static const ServiceMapEntry serviceMapArray[] = { +static std::map serviceMap = { { "ac:u", KernelHandles::AC }, - { "ac:i", KernelHandles::AC }, - { "act:a", KernelHandles::ACT }, { "act:u", KernelHandles::ACT }, { "am:app", KernelHandles::AM }, - { "am:sys", KernelHandles::AM }, { "APT:S", KernelHandles::APT }, // TODO: APT:A, APT:S and APT:U are slightly different { "APT:A", KernelHandles::APT }, { "APT:U", KernelHandles::APT }, { "boss:U", KernelHandles::BOSS }, - { "boss:P", KernelHandles::BOSS }, { "cam:u", KernelHandles::CAM }, { "cecd:u", KernelHandles::CECD }, { "cfg:u", KernelHandles::CFG_U }, { "cfg:i", KernelHandles::CFG_I }, - { "cfg:s", KernelHandles::CFG_S }, - { "cfg:nor", KernelHandles::CFG_NOR }, - { "csnd:SND", KernelHandles::CSND }, { "dlp:SRVR", KernelHandles::DLP_SRVR }, { "dsp::DSP", KernelHandles::DSP }, { "hid:USER", KernelHandles::HID }, - { "hid:SPVR", KernelHandles::HID }, { "http:C", KernelHandles::HTTP }, { "ir:USER", KernelHandles::IR_USER }, - { "frd:a", KernelHandles::FRD_A }, - { "frd:u", KernelHandles::FRD_U }, + { "frd:u", KernelHandles::FRD }, { "fs:USER", KernelHandles::FS }, { "gsp::Gpu", KernelHandles::GPU }, { "gsp::Lcd", KernelHandles::LCD }, @@ -135,23 +119,15 @@ static const ServiceMapEntry serviceMapArray[] = { { "ndm:u", KernelHandles::NDM }, { "news:u", KernelHandles::NEWS_U }, { "nfc:u", KernelHandles::NFC }, - { "ns:s", KernelHandles::NS_S }, - { "nwm::EXT", KernelHandles::NWM_EXT }, - { "nwm::UDS", KernelHandles::NWM_UDS }, { "nim:aoc", KernelHandles::NIM }, - { "ptm:u", KernelHandles::PTM_U }, // TODO: ptm:u and ptm:sysm have very different command sets - { "ptm:sysm", KernelHandles::PTM_SYSM }, - { "ptm:play", KernelHandles::PTM_PLAY }, - { "ptm:gets", KernelHandles::PTM_GETS }, + { "ptm:u", KernelHandles::PTM }, // TODO: ptm:u and ptm:sysm have very different command sets + { "ptm:sysm", KernelHandles::PTM }, { "soc:U", KernelHandles::SOC }, { "ssl:C", KernelHandles::SSL }, - { "y2r:u", KernelHandles::Y2R }, + { "y2r:u", KernelHandles::Y2R } }; // clang-format on -static std::set serviceMapByName{std::begin(serviceMapArray), std::end(serviceMapArray)}; -static std::set serviceMapByHandle{std::begin(serviceMapArray), std::end(serviceMapArray)}; - // https://www.3dbrew.org/wiki/SRV:GetServiceHandle void ServiceManager::getServiceHandle(u32 messagePointer) { u32 nameLength = mem.read32(messagePointer + 12); @@ -162,7 +138,7 @@ void ServiceManager::getServiceHandle(u32 messagePointer) { log("srv::getServiceHandle (Service: %s, nameLength: %d, flags: %d)\n", service.c_str(), nameLength, flags); // Look up service handle in map, panic if it does not exist - if (auto search = serviceMapByName.find(service); search != serviceMapByName.end()) + if (auto search = serviceMap.find(service); search != serviceMap.end()) handle = search->second; else Helpers::panic("srv: GetServiceHandle with unknown service %s", service.c_str()); @@ -181,8 +157,8 @@ void ServiceManager::enableNotification(u32 messagePointer) { } mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 2)); - mem.write32(messagePointer + 4, Result::Success); // Result code - mem.write32(messagePointer + 8, 0); // Translation descriptor + mem.write32(messagePointer + 4, Result::Success); // Result code + mem.write32(messagePointer + 8, 0); // Translation descriptor // Handle to semaphore signaled on process notification mem.write32(messagePointer + 12, notificationSemaphore.value()); } @@ -191,8 +167,8 @@ void ServiceManager::receiveNotification(u32 messagePointer) { log("srv::ReceiveNotification() (STUBBED)\n"); mem.write32(messagePointer, IPC::responseHeader(0xB, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); // Result code - mem.write32(messagePointer + 8, 0); // Notification ID + mem.write32(messagePointer + 4, Result::Success); // Result code + mem.write32(messagePointer + 8, 0); // Notification ID } void ServiceManager::subscribe(u32 messagePointer) { @@ -211,21 +187,7 @@ void ServiceManager::unsubscribe(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void ServiceManager::publishToSubscriber(u32 messagePointer) { - u32 id = mem.read32(messagePointer + 4); - log("srv::PublishToSubscriber (Notification ID = %d) (stubbed)\n", id); - - mem.write32(messagePointer, IPC::responseHeader(0xC, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { - if (haveServiceIntercepts) [[unlikely]] { - if (checkForIntercept(messagePointer, handle)) [[unlikely]] { - return; - } - } - switch (handle) { // Breaking alphabetical order a bit to place the ones I think are most common at the top case KernelHandles::GPU: [[likely]] gsp_gpu.handleSyncRequest(messagePointer); break; @@ -239,17 +201,12 @@ void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { case KernelHandles::BOSS: boss.handleSyncRequest(messagePointer); break; case KernelHandles::CAM: cam.handleSyncRequest(messagePointer); break; case KernelHandles::CECD: cecd.handleSyncRequest(messagePointer); break; - case KernelHandles::CFG_U: cfg.handleSyncRequest(messagePointer, CFGService::Type::U); break; - case KernelHandles::CFG_I: cfg.handleSyncRequest(messagePointer, CFGService::Type::I); break; - case KernelHandles::CFG_S: cfg.handleSyncRequest(messagePointer, CFGService::Type::S); break; - case KernelHandles::CFG_NOR: cfg.handleSyncRequest(messagePointer, CFGService::Type::NOR); break; - case KernelHandles::CSND: csnd.handleSyncRequest(messagePointer); break; + case KernelHandles::CFG_U: cfg.handleSyncRequest(messagePointer); break; case KernelHandles::DLP_SRVR: dlp_srvr.handleSyncRequest(messagePointer); break; case KernelHandles::HID: hid.handleSyncRequest(messagePointer); break; case KernelHandles::HTTP: http.handleSyncRequest(messagePointer); break; case KernelHandles::IR_USER: ir_user.handleSyncRequest(messagePointer); break; - case KernelHandles::FRD_A: frd.handleSyncRequest(messagePointer, FRDService::Type::A); break; - case KernelHandles::FRD_U: frd.handleSyncRequest(messagePointer, FRDService::Type::U); break; + case KernelHandles::FRD: frd.handleSyncRequest(messagePointer); break; case KernelHandles::LCD: gsp_lcd.handleSyncRequest(messagePointer); break; case KernelHandles::LDR_RO: ldr.handleSyncRequest(messagePointer); break; case KernelHandles::MCU_HWC: mcu_hwc.handleSyncRequest(messagePointer); break; @@ -258,33 +215,10 @@ void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { case KernelHandles::NIM: nim.handleSyncRequest(messagePointer); break; case KernelHandles::NDM: ndm.handleSyncRequest(messagePointer); break; case KernelHandles::NEWS_U: news_u.handleSyncRequest(messagePointer); break; - case KernelHandles::NS_S: ns.handleSyncRequest(messagePointer, NSService::Type::S); break; - case KernelHandles::NWM_UDS: nwm_uds.handleSyncRequest(messagePointer); break; - case KernelHandles::PTM_PLAY: ptm.handleSyncRequest(messagePointer, PTMService::Type::PLAY); break; - case KernelHandles::PTM_SYSM: ptm.handleSyncRequest(messagePointer, PTMService::Type::SYSM); break; - case KernelHandles::PTM_U: ptm.handleSyncRequest(messagePointer, PTMService::Type::U); break; - case KernelHandles::PTM_GETS: ptm.handleSyncRequest(messagePointer, PTMService::Type::GETS); break; + case KernelHandles::PTM: ptm.handleSyncRequest(messagePointer); break; case KernelHandles::SOC: soc.handleSyncRequest(messagePointer); break; case KernelHandles::SSL: ssl.handleSyncRequest(messagePointer); break; case KernelHandles::Y2R: y2r.handleSyncRequest(messagePointer); break; default: Helpers::panic("Sent IPC message to unknown service %08X\n Command: %08X", handle, mem.read32(messagePointer)); } -} - -bool ServiceManager::checkForIntercept(u32 messagePointer, Handle handle) { - // Check if there's a Lua handler for this function and call it - const u32 function = mem.read32(messagePointer); - - if (auto service_it = serviceMapByHandle.find(handle); service_it != serviceMapByHandle.end()) { - auto intercept = InterceptedService(service_it->first, function); - - if (auto intercept_it = interceptedServices.find(intercept); intercept_it != interceptedServices.end()) { - // If the Lua handler returns true, it means the service is handled entirely - // From Lua, and we shouldn't do anything else here. - return lua.signalInterceptedService(intercept.serviceName, function, messagePointer, intercept_it->second); - } - } - - // Lua did not intercept the service, so emulate it normally - return false; } \ No newline at end of file diff --git a/src/core/services/ssl.cpp b/src/core/services/ssl.cpp index 8d373bb9..47815188 100644 --- a/src/core/services/ssl.cpp +++ b/src/core/services/ssl.cpp @@ -1,7 +1,6 @@ -#include "services/ssl.hpp" - #include "ipc.hpp" #include "result/result.hpp" +#include "services/ssl.hpp" namespace SSLCommands { enum : u32 { @@ -32,10 +31,10 @@ void SSLService::initialize(u32 messagePointer) { if (initialized) { Helpers::warn("SSL service initialized twice"); - } + } initialized = true; - rng.seed(std::random_device()()); // Seed rng via std::random_device + rng.seed(std::random_device()()); // Seed rng via std::random_device mem.write32(messagePointer + 4, Result::Success); } @@ -49,8 +48,7 @@ void SSLService::generateRandomData(u32 messagePointer) { u32 data; for (u32 i = 0; i < size; i++) { - // We don't have an available random value since we're on a multiple of 4 bytes and our Twister is 32-bit, generate a new one from the - // Mersenne Twister + // We don't have an available random value since we're on a multiple of 4 bytes and our Twister is 32-bit, generate a new one from the Mersenne Twister if ((i & 3) == 0) { data = rng(); } diff --git a/src/core/services/y2r.cpp b/src/core/services/y2r.cpp index c864728b..40a6a04d 100644 --- a/src/core/services/y2r.cpp +++ b/src/core/services/y2r.cpp @@ -18,21 +18,12 @@ namespace Y2RCommands { SetSendingY = 0x00100102, SetSendingU = 0x00110102, SetSendingV = 0x00120102, - SetSendingYUV = 0x00130102, - IsFinishedSendingYUV = 0x00140000, - IsFinishedSendingY = 0x00150000, - IsFinishedSendingU = 0x00160000, - IsFinishedSendingV = 0x00170000, SetReceiving = 0x00180102, - IsFinishedReceiving = 0x00190000, SetInputLineWidth = 0x001A0040, GetInputLineWidth = 0x001B0000, SetInputLines = 0x001C0040, GetInputLines = 0x001D0000, - SetCoefficientParams = 0x001E0100, - GetCoefficientParams = 0x001F0000, SetStandardCoeff = 0x00200040, - GetStandardCoefficientParams = 0x00210040, SetAlpha = 0x00220040, StartConversion = 0x00260000, StopConversion = 0x00270000, @@ -59,9 +50,6 @@ void Y2RService::reset() { alpha = 0xFFFF; inputLines = 69; inputLineWidth = 420; - - conversionCoefficients.fill(0); - isBusy = false; } void Y2RService::handleSyncRequest(u32 messagePointer) { @@ -74,13 +62,7 @@ void Y2RService::handleSyncRequest(u32 messagePointer) { case Y2RCommands::GetInputLineWidth: getInputLineWidth(messagePointer); break; case Y2RCommands::GetOutputFormat: getOutputFormat(messagePointer); break; case Y2RCommands::GetTransferEndEvent: getTransferEndEvent(messagePointer); break; - case Y2RCommands::GetStandardCoefficientParams: getStandardCoefficientParams(messagePointer); break; case Y2RCommands::IsBusyConversion: isBusyConversion(messagePointer); break; - case Y2RCommands::IsFinishedReceiving: isFinishedReceiving(messagePointer); break; - case Y2RCommands::IsFinishedSendingY: isFinishedSendingY(messagePointer); break; - case Y2RCommands::IsFinishedSendingU: isFinishedSendingU(messagePointer); break; - case Y2RCommands::IsFinishedSendingV: isFinishedSendingV(messagePointer); break; - case Y2RCommands::IsFinishedSendingYUV: isFinishedSendingYUV(messagePointer); break; case Y2RCommands::PingProcess: pingProcess(messagePointer); break; case Y2RCommands::SetAlpha: setAlpha(messagePointer); break; case Y2RCommands::SetBlockAlignment: setBlockAlignment(messagePointer); break; @@ -94,17 +76,12 @@ void Y2RService::handleSyncRequest(u32 messagePointer) { case Y2RCommands::SetSendingY: setSendingY(messagePointer); break; case Y2RCommands::SetSendingU: setSendingU(messagePointer); break; case Y2RCommands::SetSendingV: setSendingV(messagePointer); break; - case Y2RCommands::SetSendingYUV: setSendingYUV(messagePointer); break; case Y2RCommands::SetSpacialDithering: setSpacialDithering(messagePointer); break; case Y2RCommands::SetStandardCoeff: setStandardCoeff(messagePointer); break; case Y2RCommands::SetTemporalDithering: setTemporalDithering(messagePointer); break; case Y2RCommands::SetTransferEndInterrupt: setTransferEndInterrupt(messagePointer); break; case Y2RCommands::StartConversion: [[likely]] startConversion(messagePointer); break; case Y2RCommands::StopConversion: stopConversion(messagePointer); break; - - // Intentionally break ordering a bit for less-used Y2R functions - case Y2RCommands::SetCoefficientParams: setCoefficientParams(messagePointer); break; - case Y2RCommands::GetCoefficientParams: getCoefficientParams(messagePointer); break; default: Helpers::panic("Y2R service requested. Command: %08X\n", command); } } @@ -120,8 +97,6 @@ void Y2RService::driverInitialize(u32 messagePointer) { log("Y2R::DriverInitialize\n"); mem.write32(messagePointer, IPC::responseHeader(0x2B, 1, 0)); mem.write32(messagePointer + 4, Result::Success); - - conversionCoefficients.fill(0); } void Y2RService::driverFinalize(u32 messagePointer) { @@ -157,11 +132,6 @@ void Y2RService::setTransferEndInterrupt(u32 messagePointer) { void Y2RService::stopConversion(u32 messagePointer) { log("Y2R::StopConversion\n"); - if (isBusy) { - isBusy = false; - kernel.getScheduler().removeEvent(Scheduler::EventType::SignalY2R); - } - mem.write32(messagePointer, IPC::responseHeader(0x27, 1, 0)); mem.write32(messagePointer + 4, Result::Success); } @@ -173,7 +143,7 @@ void Y2RService::isBusyConversion(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x28, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, static_cast(isBusy ? BusyStatus::Busy : BusyStatus::NotBusy)); + mem.write32(messagePointer + 8, static_cast(BusyStatus::NotBusy)); } void Y2RService::setBlockAlignment(u32 messagePointer) { @@ -306,7 +276,6 @@ void Y2RService::getInputLineWidth(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 8, inputLineWidth); } - void Y2RService::setInputLines(u32 messagePointer) { const u16 lines = mem.read16(messagePointer + 4); log("Y2R::SetInputLines (lines = %d)\n", lines); @@ -337,7 +306,7 @@ void Y2RService::setStandardCoeff(u32 messagePointer) { log("Y2R::SetStandardCoeff (coefficient = %d)\n", coeff); mem.write32(messagePointer, IPC::responseHeader(0x20, 1, 0)); - if (coeff > 3) { // Invalid coefficient, should have an error code + if (coeff > 3) { Helpers::panic("Y2R: Invalid standard coefficient (coefficient = %d)\n", coeff); } @@ -347,52 +316,6 @@ void Y2RService::setStandardCoeff(u32 messagePointer) { } } -void Y2RService::getStandardCoefficientParams(u32 messagePointer) { - const u32 coefficientIndex = mem.read32(messagePointer + 4); - log("Y2R::GetStandardCoefficientParams (coefficient = %d)\n", coefficientIndex); - - if (coefficientIndex > 3) { // Invalid coefficient, should have an error code - Helpers::panic("Y2R: Invalid standard coefficient (coefficient = %d)\n", coefficientIndex); - } else { - mem.write32(messagePointer, IPC::responseHeader(0x21, 5, 0)); - mem.write32(messagePointer + 4, Result::Success); - const auto& coeff = standardCoefficients[coefficientIndex]; - - // Write standard coefficient parameters to output buffer - for (int i = 0; i < 8; i++) { - const u32 pointer = messagePointer + 8 + i * sizeof(u16); // Pointer to write parameter to - mem.write16(pointer, coeff[i]); - } - } -} - -void Y2RService::setCoefficientParams(u32 messagePointer) { - log("Y2R::SetCoefficientParams\n"); - auto& coeff = conversionCoefficients; - - // Write coefficient parameters to output buffer - for (int i = 0; i < 8; i++) { - const u32 pointer = messagePointer + 4 + i * sizeof(u16); // Pointer to write parameter to - coeff[i] = mem.read16(pointer); - } - - mem.write32(messagePointer, IPC::responseHeader(0x1E, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - -void Y2RService::getCoefficientParams(u32 messagePointer) { - log("Y2R::GetCoefficientParams\n"); - mem.write32(messagePointer, IPC::responseHeader(0x1F, 5, 0)); - mem.write32(messagePointer + 4, Result::Success); - const auto& coeff = conversionCoefficients; - - // Write coefficient parameters to output buffer - for (int i = 0; i < 8; i++) { - const u32 pointer = messagePointer + 8 + i * sizeof(u16); // Pointer to write parameter to - mem.write16(pointer, coeff[i]); - } -} - void Y2RService::setSendingY(u32 messagePointer) { log("Y2R::SetSendingY\n"); Helpers::warn("Unimplemented Y2R::SetSendingY"); @@ -417,14 +340,6 @@ void Y2RService::setSendingV(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } -void Y2RService::setSendingYUV(u32 messagePointer) { - log("Y2R::SetSendingYUV\n"); - Helpers::warn("Unimplemented Y2R::SetSendingYUV"); - - mem.write32(messagePointer, IPC::responseHeader(0x13, 1, 0)); - mem.write32(messagePointer + 4, Result::Success); -} - void Y2RService::setReceiving(u32 messagePointer) { log("Y2R::SetReceiving\n"); Helpers::warn("Unimplemented Y2R::setReceiving"); @@ -440,69 +355,9 @@ void Y2RService::startConversion(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x26, 1, 0)); mem.write32(messagePointer + 4, Result::Success); - // Schedule Y2R conversion end event. - // The tick value is tweaked based on the minimum delay needed to get FIFA 15 to not hang due to a race condition on its title screen - static constexpr u64 delayTicks = 1'350'000; - isBusy = true; - - // Remove any potential pending Y2R event and schedule a new one - Scheduler& scheduler = kernel.getScheduler(); - scheduler.removeEvent(Scheduler::EventType::SignalY2R); - scheduler.addEvent(Scheduler::EventType::SignalY2R, scheduler.currentTimestamp + delayTicks); -} - -void Y2RService::isFinishedSendingYUV(u32 messagePointer) { - log("Y2R::IsFinishedSendingYUV"); - constexpr bool finished = true; // For now, Y2R transfers are instant - - mem.write32(messagePointer, IPC::responseHeader(0x14, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, finished ? 1 : 0); -} - -void Y2RService::isFinishedSendingY(u32 messagePointer) { - log("Y2R::IsFinishedSendingY"); - constexpr bool finished = true; - - mem.write32(messagePointer, IPC::responseHeader(0x15, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, finished ? 1 : 0); -} - -void Y2RService::isFinishedSendingU(u32 messagePointer) { - log("Y2R::IsFinishedSendingU"); - constexpr bool finished = true; - - mem.write32(messagePointer, IPC::responseHeader(0x16, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, finished ? 1 : 0); -} - -void Y2RService::isFinishedSendingV(u32 messagePointer) { - log("Y2R::IsFinishedSendingV"); - constexpr bool finished = true; - - mem.write32(messagePointer, IPC::responseHeader(0x17, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, finished ? 1 : 0); -} - -void Y2RService::isFinishedReceiving(u32 messagePointer) { - log("Y2R::IsFinishedSendingReceiving"); - constexpr bool finished = true; // For now, receiving components is also instant - - mem.write32(messagePointer, IPC::responseHeader(0x17, 2, 0)); - mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, finished ? 1 : 0); -} - -void Y2RService::signalConversionDone() { - if (isBusy) { - isBusy = false; - - // Signal the transfer end event if it's been created. TODO: Is this affected by SetTransferEndInterrupt? - if (transferEndEvent.has_value()) { - kernel.signalEvent(transferEndEvent.value()); - } + // Make Y2R conversion end instantly. + // Signal the transfer end event if it's been created. TODO: Is this affected by SetTransferEndInterrupt? + if (transferEndEvent.has_value()) { + kernel.signalEvent(transferEndEvent.value()); } -} \ No newline at end of file +} diff --git a/src/emulator.cpp b/src/emulator.cpp index 1079fc38..2f8c81cc 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -1,12 +1,5 @@ #include "emulator.hpp" - -#if !defined(__ANDROID__) && !defined(__LIBRETRO__) -#include -#endif - -#include - -#include "renderdoc.hpp" +#include #ifdef _WIN32 #include @@ -19,20 +12,28 @@ __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 1; #endif Emulator::Emulator() - : config(getConfigPath()), kernel(cpu, memory, gpu, config, lua), cpu(memory, kernel, *this), gpu(memory, config), - memory(cpu.getTicksRef(), config), cheats(memory, kernel.getServiceManager().getHID()), audioDevice(config.audioDeviceConfig), lua(*this), - running(false) + : config(std::filesystem::current_path() / "config.toml"), kernel(cpu, memory, gpu, config), cpu(memory, kernel), gpu(memory, config), + memory(cpu.getTicksRef(), config), cheats(memory, kernel.getServiceManager().getHID()), running(false), programRunning(false) #ifdef PANDA3DS_ENABLE_HTTP_SERVER - , - httpServer(this) + , httpServer(this) #endif { - DSPService& dspService = kernel.getServiceManager().getDSP(); + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) < 0) { + Helpers::panic("Failed to initialize SDL2"); + } - dsp = Audio::makeDSPCore(config, memory, scheduler, dspService); - dspService.setDSPCore(dsp.get()); + // Make SDL use consistent positional button mapping + SDL_SetHint(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS, "0"); + if (SDL_Init(SDL_INIT_GAMECONTROLLER) < 0) { + Helpers::warn("Failed to initialize SDL2 GameController: %s", SDL_GetError()); + } + + // We need OpenGL for software rendering or for OpenGL if it's enabled + bool needOpenGL = config.rendererType == RendererType::Software; +#ifdef PANDA3DS_ENABLE_OPENGL + needOpenGL = needOpenGL || (config.rendererType == RendererType::OpenGL); +#endif - audioDevice.init(dsp->getSamples()); #ifdef PANDA3DS_ENABLE_DISCORD_RPC if (config.discordRpcEnabled) { discordRpc.init(); @@ -40,14 +41,52 @@ Emulator::Emulator() } #endif - reloadSettings(); + if (needOpenGL) { + // Demand 3.3 core for software renderer, or 4.1 core for OpenGL renderer (max available on MacOS) + // MacOS gets mad if we don't explicitly demand a core profile + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, config.rendererType == RendererType::Software ? 3 : 4); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, config.rendererType == RendererType::Software ? 3 : 1); + window = SDL_CreateWindow("Alber", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL); + + if (window == nullptr) { + Helpers::panic("Window creation failed: %s", SDL_GetError()); + } + + glContext = SDL_GL_CreateContext(window); + if (glContext == nullptr) { + Helpers::panic("OpenGL context creation failed: %s", SDL_GetError()); + } + + if (!gladLoadGL(reinterpret_cast(SDL_GL_GetProcAddress))) { + Helpers::panic("OpenGL init failed: %s", SDL_GetError()); + } + } + +#ifdef PANDA3DS_ENABLE_VULKAN + if (config.rendererType == RendererType::Vulkan) { + window = SDL_CreateWindow("Alber", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_VULKAN); + + if (window == nullptr) { + Helpers::warn("Window creation failed: %s", SDL_GetError()); + } + } +#endif + + if (SDL_WasInit(SDL_INIT_GAMECONTROLLER)) { + gameController = SDL_GameControllerOpen(0); + + if (gameController != nullptr) { + SDL_Joystick* stick = SDL_GameControllerGetJoystick(gameController); + gameControllerID = SDL_JoystickInstanceID(stick); + } + } + reset(ReloadOption::NoReload); } Emulator::~Emulator() { - config.save(); - lua.close(); - audioDevice.close(); + config.save(std::filesystem::current_path() / "config.toml"); #ifdef PANDA3DS_ENABLE_DISCORD_RPC discordRpc.stop(); @@ -58,11 +97,6 @@ void Emulator::reset(ReloadOption reload) { cpu.reset(); gpu.reset(); memory.reset(); - dsp->reset(); - - // Reset scheduler and add a VBlank event - scheduler.reset(); - // Kernel must be reset last because it depends on CPU/Memory state kernel.reset(); @@ -88,53 +122,292 @@ void Emulator::reset(ReloadOption reload) { } } -#ifndef __LIBRETRO__ -std::filesystem::path Emulator::getAndroidAppPath() { - // SDL_GetPrefPath fails to get the path due to no JNI environment - std::ifstream cmdline("/proc/self/cmdline"); - std::string applicationName; - std::getline(cmdline, applicationName, '\0'); +void Emulator::step() {} +void Emulator::render() {} - return std::filesystem::path("/data") / "data" / applicationName / "files"; -} +void Emulator::run() { + programRunning = true; -std::filesystem::path Emulator::getConfigPath() { - if constexpr (Helpers::isAndroid()) { - return getAndroidAppPath() / "config.toml"; - } else { - std::filesystem::path localPath = std::filesystem::current_path() / "config.toml"; - - if (std::filesystem::exists(localPath)) { - return localPath; - } else { - return getAppDataRoot() / "config.toml"; - } - } -} + while (programRunning) { +#ifdef PANDA3DS_ENABLE_HTTP_SERVER + httpServer.processActions(); #endif -void Emulator::step() {} + runFrame(); + HIDService& hid = kernel.getServiceManager().getHID(); -// Only resume if a ROM is properly loaded -void Emulator::resume() { - running = (romType != ROMType::None); + SDL_Event event; + while (SDL_PollEvent(&event)) { + namespace Keys = HID::Keys; - if (running && config.audioEnabled) { - audioDevice.start(); + switch (event.type) { + case SDL_QUIT: + printf("Bye :(\n"); + programRunning = false; + return; + + case SDL_KEYDOWN: + if (romType == ROMType::None) break; + + switch (event.key.keysym.sym) { + case SDLK_l: hid.pressKey(Keys::A); break; + case SDLK_k: hid.pressKey(Keys::B); break; + case SDLK_o: hid.pressKey(Keys::X); break; + case SDLK_i: hid.pressKey(Keys::Y); break; + + case SDLK_q: hid.pressKey(Keys::L); break; + case SDLK_p: hid.pressKey(Keys::R); break; + + case SDLK_RIGHT: hid.pressKey(Keys::Right); break; + case SDLK_LEFT: hid.pressKey(Keys::Left); break; + case SDLK_UP: hid.pressKey(Keys::Up); break; + case SDLK_DOWN: hid.pressKey(Keys::Down); break; + + case SDLK_w: + hid.setCirclepadY(0x9C); + keyboardAnalogY = true; + break; + + case SDLK_a: + hid.setCirclepadX(-0x9C); + keyboardAnalogX = true; + break; + + case SDLK_s: + hid.setCirclepadY(-0x9C); + keyboardAnalogY = true; + break; + + case SDLK_d: + hid.setCirclepadX(0x9C); + keyboardAnalogX = true; + break; + + case SDLK_RETURN: hid.pressKey(Keys::Start); break; + case SDLK_BACKSPACE: hid.pressKey(Keys::Select); break; + + // Use the F4 button as a hot-key to pause or resume the emulator + // We can't use the audio play/pause buttons because it's annoying + case SDLK_F4: { + togglePause(); + break; + } + + // Use F5 as a reset button + case SDLK_F5: { + reset(ReloadOption::Reload); + break; + } + } + break; + + case SDL_KEYUP: + if (romType == ROMType::None) break; + + switch (event.key.keysym.sym) { + case SDLK_l: hid.releaseKey(Keys::A); break; + case SDLK_k: hid.releaseKey(Keys::B); break; + case SDLK_o: hid.releaseKey(Keys::X); break; + case SDLK_i: hid.releaseKey(Keys::Y); break; + + case SDLK_q: hid.releaseKey(Keys::L); break; + case SDLK_p: hid.releaseKey(Keys::R); break; + + case SDLK_RIGHT: hid.releaseKey(Keys::Right); break; + case SDLK_LEFT: hid.releaseKey(Keys::Left); break; + case SDLK_UP: hid.releaseKey(Keys::Up); break; + case SDLK_DOWN: hid.releaseKey(Keys::Down); break; + + // Err this is probably not ideal + case SDLK_w: + case SDLK_s: + hid.setCirclepadY(0); + keyboardAnalogY = false; + break; + + case SDLK_a: + case SDLK_d: + hid.setCirclepadX(0); + keyboardAnalogX = false; + break; + + case SDLK_RETURN: hid.releaseKey(Keys::Start); break; + case SDLK_BACKSPACE: hid.releaseKey(Keys::Select); break; + } + break; + + case SDL_MOUSEBUTTONDOWN: + if (romType == ROMType::None) break; + + if (event.button.button == SDL_BUTTON_LEFT) { + const s32 x = event.button.x; + const s32 y = event.button.y; + + // Check if touch falls in the touch screen area + if (y >= 240 && y <= 480 && x >= 40 && x < 40 + 320) { + // Convert to 3DS coordinates + u16 x_converted = static_cast(x) - 40; + u16 y_converted = static_cast(y) - 240; + + hid.setTouchScreenPress(x_converted, y_converted); + } else { + hid.releaseTouchScreen(); + } + } else if (event.button.button == SDL_BUTTON_RIGHT) { + holdingRightClick = true; + } + + break; + + case SDL_MOUSEBUTTONUP: + if (romType == ROMType::None) break; + + if (event.button.button == SDL_BUTTON_LEFT) { + hid.releaseTouchScreen(); + } else if (event.button.button == SDL_BUTTON_RIGHT) { + holdingRightClick = false; + } + break; + + case SDL_CONTROLLERDEVICEADDED: + if (gameController == nullptr) { + gameController = SDL_GameControllerOpen(event.cdevice.which); + gameControllerID = event.cdevice.which; + } + break; + + case SDL_CONTROLLERDEVICEREMOVED: + if (event.cdevice.which == gameControllerID) { + SDL_GameControllerClose(gameController); + gameController = nullptr; + gameControllerID = 0; + } + break; + + case SDL_CONTROLLERBUTTONUP: + case SDL_CONTROLLERBUTTONDOWN: { + if (romType == ROMType::None) break; + u32 key = 0; + + switch (event.cbutton.button) { + case SDL_CONTROLLER_BUTTON_A: key = Keys::B; break; + case SDL_CONTROLLER_BUTTON_B: key = Keys::A; break; + case SDL_CONTROLLER_BUTTON_X: key = Keys::Y; break; + case SDL_CONTROLLER_BUTTON_Y: key = Keys::X; break; + case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: key = Keys::L; break; + case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: key = Keys::R; break; + case SDL_CONTROLLER_BUTTON_DPAD_LEFT: key = Keys::Left; break; + case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: key = Keys::Right; break; + case SDL_CONTROLLER_BUTTON_DPAD_UP: key = Keys::Up; break; + case SDL_CONTROLLER_BUTTON_DPAD_DOWN: key = Keys::Down; break; + case SDL_CONTROLLER_BUTTON_BACK: key = Keys::Select; break; + case SDL_CONTROLLER_BUTTON_START: key = Keys::Start; break; + } + + if (key != 0) { + if (event.cbutton.state == SDL_PRESSED) { + hid.pressKey(key); + } else { + hid.releaseKey(key); + } + } + break; + } + + // Detect mouse motion events for gyroscope emulation + case SDL_MOUSEMOTION: { + if (romType == ROMType::None) break; + + // Handle "dragging" across the touchscreen + if (hid.isTouchScreenPressed()) { + const s32 x = event.motion.x; + const s32 y = event.motion.y; + + // Check if touch falls in the touch screen area and register the new touch screen position + if (y >= 240 && y <= 480 && x >= 40 && x < 40 + 320) { + // Convert to 3DS coordinates + u16 x_converted = static_cast(x) - 40; + u16 y_converted = static_cast(y) - 240; + + hid.setTouchScreenPress(x_converted, y_converted); + } + } + + // We use right click to indicate we want to rotate the console. If right click is not held, then this is not a gyroscope rotation + if (holdingRightClick) { + // Relative motion since last mouse motion event + const s32 motionX = event.motion.xrel; + const s32 motionY = event.motion.yrel; + + // The gyroscope involves lots of weird math I don't want to bother with atm + // So up until then, we will set the gyroscope euler angles to fixed values based on the direction of the relative motion + const s32 roll = motionX > 0 ? 0x7f : -0x7f; + const s32 pitch = motionY > 0 ? 0x7f : -0x7f; + hid.setRoll(roll); + hid.setPitch(pitch); + } + break; + } + + case SDL_DROPFILE: { + char* droppedDir = event.drop.file; + + if (droppedDir) { + loadROM(droppedDir); + SDL_free(droppedDir); + } + break; + } + } + } + + // Update controller analog sticks and HID service + if (romType != ROMType::None) { + if (gameController != nullptr) { + const s16 stickX = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_LEFTX); + const s16 stickY = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_LEFTY); + constexpr s16 deadzone = 3276; + constexpr s16 maxValue = 0x9C; + constexpr s16 div = 0x8000 / maxValue; + + // Avoid overriding the keyboard's circlepad input + if (abs(stickX) < deadzone && !keyboardAnalogX) { + hid.setCirclepadX(0); + } else { + hid.setCirclepadX(stickX / div); + } + + if (abs(stickY) < deadzone && !keyboardAnalogY) { + hid.setCirclepadY(0); + } else { + hid.setCirclepadY(-(stickY / div)); + } + } + + hid.updateInputs(cpu.getTicks()); + } + // TODO: Should this be uncommented? + // kernel.evalReschedule(); + + // Update inputs in the HID module + SDL_GL_SwapWindow(window); } } -void Emulator::pause() { - running = false; - audioDevice.stop(); -} - +// Only resume if a ROM is properly loaded +void Emulator::resume() { running = (romType != ROMType::None); } +void Emulator::pause() { running = false; } void Emulator::togglePause() { running ? pause() : resume(); } void Emulator::runFrame() { if (running) { - cpu.runFrame(); // Run 1 frame of instructions - gpu.display(); // Display graphics + cpu.runFrame(); // Run 1 frame of instructions + gpu.display(); // Display graphics + + // Send VBlank interrupts + ServiceManager& srv = kernel.getServiceManager(); + srv.sendGPUInterrupt(GPUInterrupt::VBlank0); + srv.sendGPUInterrupt(GPUInterrupt::VBlank1); // Run cheats if any are loaded if (cheats.haveCheats()) [[unlikely]] { @@ -147,76 +420,6 @@ void Emulator::runFrame() { } } -void Emulator::pollScheduler() { - auto& events = scheduler.events; - - // Pop events until there's none pending anymore - while (scheduler.currentTimestamp >= scheduler.nextTimestamp) { - // Read event timestamp and type, pop it from the scheduler and handle it - auto [time, eventType] = std::move(*events.begin()); - events.erase(events.begin()); - - scheduler.updateNextTimestamp(); - - switch (eventType) { - case Scheduler::EventType::VBlank: [[likely]] { - // Signal that we've reached the end of a frame - frameDone = true; - lua.signalEvent(LuaEvent::Frame); - - // Send VBlank interrupts - ServiceManager& srv = kernel.getServiceManager(); - srv.sendGPUInterrupt(GPUInterrupt::VBlank0); - srv.sendGPUInterrupt(GPUInterrupt::VBlank1); - - // Queue next VBlank event - scheduler.addEvent(Scheduler::EventType::VBlank, time + CPU::ticksPerSec / 60); - break; - } - - case Scheduler::EventType::UpdateTimers: kernel.pollTimers(); break; - case Scheduler::EventType::RunDSP: { - dsp->runAudioFrame(time); - break; - } - - case Scheduler::EventType::SignalY2R: kernel.getServiceManager().getY2R().signalConversionDone(); break; - case Scheduler::EventType::UpdateIR: kernel.getServiceManager().getIRUser().updateCirclePadPro(); break; - - default: { - Helpers::panic("Scheduler: Unimplemented event type received: %d\n", static_cast(eventType)); - break; - } - } - } -} - -#ifndef __LIBRETRO__ -// Get path for saving files (AppData on Windows, /home/user/.local/share/ApplicationName on Linux, etc) -// Inside that path, we be use a game-specific folder as well. Eg if we were loading a ROM called PenguinDemo.3ds, the savedata would be in -// %APPDATA%/Alber/PenguinDemo/SaveData on Windows, and so on. We do this because games save data in their own filesystem on the cart. -// If the portable build setting is enabled, then those saves go in the executable directory instead -std::filesystem::path Emulator::getAppDataRoot() { - std::filesystem::path appDataPath; - -#ifdef __ANDROID__ - appDataPath = getAndroidAppPath(); -#else - char* appData; - if (!config.usePortableBuild) { - appData = SDL_GetPrefPath(nullptr, "Alber"); - appDataPath = std::filesystem::path(appData); - } else { - appData = SDL_GetBasePath(); - appDataPath = std::filesystem::path(appData) / "Emulator Files"; - } - SDL_free(appData); -#endif - - return appDataPath; -} -#endif - bool Emulator::loadROM(const std::filesystem::path& path) { // Reset the emulator if we've already loaded a ROM if (romType != ROMType::None) { @@ -227,12 +430,15 @@ bool Emulator::loadROM(const std::filesystem::path& path) { memory.loadedCXI = std::nullopt; memory.loaded3DSX = std::nullopt; - const std::filesystem::path appDataPath = getAppDataRoot(); + // Get path for saving files (AppData on Windows, /home/user/.local/share/ApplcationName on Linux, etc) + // Inside that path, we be use a game-specific folder as well. Eg if we were loading a ROM called PenguinDemo.3ds, the savedata would be in + // %APPDATA%/Alber/PenguinDemo/SaveData on Windows, and so on. We do this because games save data in their own filesystem on the cart + char* appData = SDL_GetPrefPath(nullptr, "Alber"); + const std::filesystem::path appDataPath = std::filesystem::path(appData); const std::filesystem::path dataPath = appDataPath / path.filename().stem(); const std::filesystem::path aesKeysPath = appDataPath / "sysdata" / "aes_keys.txt"; - const std::filesystem::path seedDBPath = appDataPath / "sysdata" / "seeddb.bin"; - IOFile::setAppDataDir(dataPath); + SDL_free(appData); // Open the text file containing our AES keys if it exists. We use the std::filesystem::exists overload that takes an error code param to // avoid the call throwing exceptions @@ -241,10 +447,6 @@ bool Emulator::loadROM(const std::filesystem::path& path) { aesEngine.loadKeys(aesKeysPath); } - if (std::filesystem::exists(seedDBPath, ec) && !ec) { - aesEngine.setSeedPath(seedDBPath); - } - kernel.initializeFS(); auto extension = path.extension(); bool success; // Tracks if we loaded the ROM successfully @@ -253,7 +455,7 @@ bool Emulator::loadROM(const std::filesystem::path& path) { success = loadELF(path); else if (extension == ".3ds" || extension == ".cci") success = loadNCSD(path, ROMType::NCSD); - else if (extension == ".cxi" || extension == ".app" || extension == ".ncch") + else if (extension == ".cxi" || extension == ".app") success = loadNCSD(path, ROMType::CXI); else if (extension == ".3dsx") success = load3DSX(path); @@ -272,20 +474,10 @@ bool Emulator::loadROM(const std::filesystem::path& path) { romType = ROMType::None; } - if (success) { - // Update the main thread entrypoint and SP so that the thread debugger can display them. - kernel.setMainThreadEntrypointAndSP(cpu.getReg(15), cpu.getReg(13)); - } - resume(); // Start the emulator return success; } -bool Emulator::loadAmiibo(const std::filesystem::path& path) { - NFCService& nfc = kernel.getServiceManager().getNFC(); - return nfc.loadAmiibo(path); -} - // Used for loading both CXI and NCSD files since they are both so similar and use the same interface // (We promote CXI files to NCSD internally for ease) bool Emulator::loadNCSD(const std::filesystem::path& path, ROMType type) { @@ -320,11 +512,6 @@ bool Emulator::load3DSX(const std::filesystem::path& path) { } bool Emulator::loadELF(const std::filesystem::path& path) { - // We can't open a new file with this ifstream if it's associated with a file - if (loadedELF.is_open()) { - loadedELF.close(); - } - loadedELF.open(path, std::ios_base::binary); // Open ROM in binary mode romType = ROMType::ELF; @@ -349,16 +536,8 @@ bool Emulator::loadELF(std::ifstream& file) { return true; } -std::span Emulator::getSMDH() { - switch (romType) { - case ROMType::NCSD: - case ROMType::CXI: - return memory.getCXI()->smdh; - default: { - return std::span(); - } - } -} +// Reset our graphics context and initialize the GPU's graphics context +void Emulator::initGraphicsContext() { gpu.initGraphicsContext(window); } #ifdef PANDA3DS_ENABLE_DISCORD_RPC void Emulator::updateDiscord() { @@ -373,109 +552,4 @@ void Emulator::updateDiscord() { } #else void Emulator::updateDiscord() {} -#endif - -static void dumpRomFSNode(const RomFS::RomFSNode& node, const char* romFSBase, const std::filesystem::path& path) { - for (auto& file : node.files) { - const auto p = path / file->name; - std::ofstream outFile(p); - - outFile.write(romFSBase + file->dataOffset, file->dataSize); - } - - for (auto& directory : node.directories) { - const auto newPath = path / directory->name; - - // Create the directory for the new folder - std::error_code ec; - std::filesystem::create_directories(newPath, ec); - - if (!ec) { - dumpRomFSNode(*directory, romFSBase, newPath); - } - } -} - -RomFS::DumpingResult Emulator::dumpRomFS(const std::filesystem::path& path) { - using namespace RomFS; - - if (romType != ROMType::NCSD && romType != ROMType::CXI && romType != ROMType::HB_3DSX) { - return DumpingResult::InvalidFormat; - } - - // Contents of RomFS as raw bytes - std::vector romFS; - u64 size; - - if (romType == ROMType::HB_3DSX) { - auto hb3dsx = memory.get3DSX(); - if (!hb3dsx->hasRomFs()) { - return DumpingResult::NoRomFS; - } - size = hb3dsx->romFSSize; - - romFS.resize(size); - hb3dsx->readRomFSBytes(&romFS[0], 0, size); - } else { - auto cxi = memory.getCXI(); - if (!cxi->hasRomFS()) { - return DumpingResult::NoRomFS; - } - - const u64 offset = cxi->romFS.offset; - size = cxi->romFS.size; - - romFS.resize(size); - cxi->readFromFile(memory.CXIFile, cxi->partitionInfo, &romFS[0], offset - cxi->fileOffset, size); - } - - std::unique_ptr node = parseRomFSTree((uintptr_t)&romFS[0], size); - dumpRomFSNode(*node, (const char*)&romFS[0], path); - - return DumpingResult::Success; -} - -void Emulator::setAudioEnabled(bool enable) { - // Don't enable audio if we didn't manage to find an audio device and initialize it properly, otherwise audio sync will break, - // because the emulator will expect the audio device to drain the sample buffer, but there's no audio device running... - enable = enable && audioDevice.isInitialized(); - - if (!enable) { - audioDevice.stop(); - } else if (enable && romType != ROMType::None && running) { - // Don't start the audio device yet if there's no ROM loaded or the emulator is paused - // Resume and Pause will handle it - audioDevice.start(); - } - - dsp->setAudioEnabled(enable); -} - -void Emulator::loadRenderdoc() { - std::string capturePath = (std::filesystem::current_path() / "RenderdocCaptures").generic_string(); - Renderdoc::loadRenderdoc(); - Renderdoc::setOutputDir(capturePath, ""); -} - -void Emulator::reloadSettings() { - setAudioEnabled(config.audioEnabled); - - if (Renderdoc::isSupported() && config.enableRenderdoc && !Renderdoc::isLoaded()) { - loadRenderdoc(); - } - - gpu.getRenderer()->setHashTextures(config.hashTextures); - -#ifdef PANDA3DS_ENABLE_DISCORD_RPC - // Reload RPC setting if we're compiling with RPC support - - if (discordRpc.running() != config.discordRpcEnabled) { - if (config.discordRpcEnabled) { - discordRpc.init(); - updateDiscord(); - } else { - discordRpc.stop(); - } - } -#endif -} +#endif \ No newline at end of file diff --git a/src/frontend_settings.cpp b/src/frontend_settings.cpp deleted file mode 100644 index 2d1d37c6..00000000 --- a/src/frontend_settings.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "frontend_settings.hpp" - -#include -#include -#include - -// Frontend setting serialization/deserialization functions - -FrontendSettings::Theme FrontendSettings::themeFromString(std::string inString) { - // Transform to lower-case to make the setting case-insensitive - std::transform(inString.begin(), inString.end(), inString.begin(), [](unsigned char c) { return std::tolower(c); }); - - static const std::unordered_map map = { - {"system", Theme::System}, {"light", Theme::Light}, {"dark", Theme::Dark}, {"greetingscat", Theme::GreetingsCat}, {"cream", Theme::Cream}, {"oled", Theme::Oled} - }; - - if (auto search = map.find(inString); search != map.end()) { - return search->second; - } - - // Default to dark theme - return Theme::Dark; -} - -const char* FrontendSettings::themeToString(Theme theme) { - switch (theme) { - case Theme::System: return "system"; - case Theme::Light: return "light"; - case Theme::GreetingsCat: return "greetingscat"; - case Theme::Cream: return "cream"; - case Theme::Oled: return "oled"; - - case Theme::Dark: - default: return "dark"; - } -} - -FrontendSettings::WindowIcon FrontendSettings::iconFromString(std::string inString) { // Transform to lower-case to make the setting case-insensitive - std::transform(inString.begin(), inString.end(), inString.begin(), [](unsigned char c) { return std::tolower(c); }); - - static const std::unordered_map map = { - {"rpog", WindowIcon::Rpog}, {"rsyn", WindowIcon::Rsyn}, {"rcow", WindowIcon::Rcow}, - {"rnap", WindowIcon::Rnap}, {"skyemu", WindowIcon::SkyEmu}, {"runpog", WindowIcon::Runpog}, - }; - - if (auto search = map.find(inString); search != map.end()) { - return search->second; - } - - // Default to the icon rpog icon - return WindowIcon::Rpog; -} - -const char* FrontendSettings::iconToString(WindowIcon icon) { - switch (icon) { - case WindowIcon::Rsyn: return "rsyn"; - case WindowIcon::Rcow: return "rcow"; - case WindowIcon::Rnap: return "rnap"; - case WindowIcon::SkyEmu: return "skyemu"; - case WindowIcon::Runpog: return "runpog"; - - case WindowIcon::Rpog: - default: return "rpog"; - } -} \ No newline at end of file diff --git a/src/host_shaders/metal_blit.metal b/src/host_shaders/metal_blit.metal deleted file mode 100644 index 6709c82a..00000000 --- a/src/host_shaders/metal_blit.metal +++ /dev/null @@ -1,29 +0,0 @@ -#include -using namespace metal; - -#define GET_HELPER_TEXTURE_BINDING(binding) (30 - binding) -#define GET_HELPER_SAMPLER_STATE_BINDING(binding) (15 - binding) - -struct BasicVertexOut { - float4 position [[position]]; - float2 uv; -}; - -struct NDCViewport { - float2 offset; - float2 scale; -}; - -vertex BasicVertexOut vertexBlit(uint vid [[vertex_id]], constant NDCViewport& viewport [[buffer(0)]]) { - BasicVertexOut out; - out.uv = float2((vid << 1) & 2, vid & 2); - out.position = float4(out.uv * 2.0 - 1.0, 0.0, 1.0); - out.position.y = -out.position.y; - out.uv = out.uv * viewport.scale + viewport.offset; - - return out; -} - -fragment float4 fragmentBlit(BasicVertexOut in [[stage_in]], texture2d tex [[texture(GET_HELPER_TEXTURE_BINDING(0))]], sampler samplr [[sampler(GET_HELPER_SAMPLER_STATE_BINDING(0))]]) { - return tex.sample(samplr, in.uv); -} diff --git a/src/host_shaders/metal_copy_to_lut_texture.metal b/src/host_shaders/metal_copy_to_lut_texture.metal deleted file mode 100644 index c21246f1..00000000 --- a/src/host_shaders/metal_copy_to_lut_texture.metal +++ /dev/null @@ -1,9 +0,0 @@ -#include -using namespace metal; - -constant ushort lutTextureWidth [[function_constant(0)]]; - -// The copy is done in a vertex shader instead of a compute kernel, since dispatching compute would require ending the render pass -vertex void vertexCopyToLutTexture(uint vid [[vertex_id]], texture2d out [[texture(0)]], device float2* data [[buffer(0)]], constant uint& arrayOffset [[buffer(1)]]) { - out.write(float4(data[vid], 0.0, 0.0), uint2(vid % lutTextureWidth, arrayOffset + vid / lutTextureWidth)); -} diff --git a/src/host_shaders/metal_shaders.metal b/src/host_shaders/metal_shaders.metal deleted file mode 100644 index b9640816..00000000 --- a/src/host_shaders/metal_shaders.metal +++ /dev/null @@ -1,760 +0,0 @@ -#include -#include - -using namespace metal; - -struct BasicVertexOut { - float4 position [[position]]; - float2 uv; -}; - -constant float4 displayPositions[4] = { - float4(-1.0, -1.0, 0.0, 1.0), - float4( 1.0, -1.0, 0.0, 1.0), - float4(-1.0, 1.0, 0.0, 1.0), - float4( 1.0, 1.0, 0.0, 1.0) -}; - -constant float2 displayTexCoord[4] = { - float2(0.0, 1.0), - float2(0.0, 0.0), - float2(1.0, 1.0), - float2(1.0, 0.0) -}; - -vertex BasicVertexOut vertexDisplay(uint vid [[vertex_id]]) { - BasicVertexOut out; - out.position = displayPositions[vid]; - out.uv = displayTexCoord[vid]; - - return out; -} - -fragment float4 fragmentDisplay(BasicVertexOut in [[stage_in]], texture2d tex [[texture(0)]], sampler samplr [[sampler(0)]]) { - return tex.sample(samplr, in.uv); -} - -struct PicaRegs { - uint regs[0x200 - 0x48]; - - uint read(uint reg) constant { - return regs[reg - 0x48]; - } -}; - -struct VertTEV { - uint textureEnvColor[6]; -}; - -float4 abgr8888ToFloat4(uint abgr) { - const float scale = 1.0 / 255.0; - - return scale * float4(float(abgr & 0xffu), float((abgr >> 8) & 0xffu), float((abgr >> 16) & 0xffu), float(abgr >> 24)); -} - -struct DrawVertexIn { - float4 position [[attribute(0)]]; - float4 quaternion [[attribute(1)]]; - float4 color [[attribute(2)]]; - float2 texCoord0 [[attribute(3)]]; - float2 texCoord1 [[attribute(4)]]; - float texCoord0W [[attribute(5)]]; - float3 view [[attribute(6)]]; - float2 texCoord2 [[attribute(7)]]; -}; - -// Metal cannot return arrays from vertex functions, this is an ugly workaround -struct EnvColor { - float4 c0; - float4 c1; - float4 c2; - float4 c3; - float4 c4; - float4 c5; - - thread float4& operator[](int i) { - switch (i) { - case 0: return c0; - case 1: return c1; - case 2: return c2; - case 3: return c3; - case 4: return c4; - case 5: return c5; - default: return c0; - } - } -}; - -float3 rotateFloat3ByQuaternion(float3 v, float4 q) { - float3 u = q.xyz; - float s = q.w; - - return 2.0 * dot(u, v) * u + (s * s - dot(u, u)) * v + 2.0 * s * cross(u, v); -} - -// Convert an arbitrary-width floating point literal to an f32 -float decodeFP(uint hex, uint E, uint M) { - uint width = M + E + 1u; - uint bias = 128u - (1u << (E - 1u)); - uint exponent = (hex >> M) & ((1u << E) - 1u); - uint mantissa = hex & ((1u << M) - 1u); - uint sign = (hex >> (E + M)) << 31u; - - if ((hex & ((1u << (width - 1u)) - 1u)) != 0u) { - if (exponent == (1u << E) - 1u) - exponent = 255u; - else - exponent += bias; - hex = sign | (mantissa << (23u - M)) | (exponent << 23u); - } else { - hex = sign; - } - - return as_type(hex); -} - -struct DepthUniforms { - float depthScale; - float depthOffset; - bool depthMapEnable; -}; - -struct DrawVertexOut { - float4 position [[position]]; - float4 quaternion; - float4 color; - float3 texCoord0; - float2 texCoord1; - float2 texCoord2; - float3 view; - float3 normal; - float3 tangent; - float3 bitangent; - EnvColor textureEnvColor [[flat]]; - float4 textureEnvBufferColor [[flat]]; -}; - -struct DrawVertexOutWithClip { - DrawVertexOut out; - float clipDistance [[clip_distance]] [2]; -}; - -// TODO: check this -float transformZ(float z, float w, constant DepthUniforms& depthUniforms) { - z = z / w * depthUniforms.depthScale + depthUniforms.depthOffset; - if (!depthUniforms.depthMapEnable) { - z *= w; - } - - return z * w; -} - -vertex DrawVertexOutWithClip vertexDraw(DrawVertexIn in [[stage_in]], constant PicaRegs& picaRegs [[buffer(0)]], constant VertTEV& tev [[buffer(1)]], constant DepthUniforms& depthUniforms [[buffer(2)]]) { - DrawVertexOut out; - - // Position - out.position = in.position; - // Flip the y position - out.position.y = -out.position.y; - - // Apply depth uniforms - out.position.z = transformZ(out.position.z, out.position.w, depthUniforms); - - // Color - out.color = min(abs(in.color), 1.0); - - // Texture coordinates - out.texCoord0 = float3(in.texCoord0, in.texCoord0W); - out.texCoord0.y = 1.0 - out.texCoord0.y; - out.texCoord1 = in.texCoord1; - out.texCoord1.y = 1.0 - out.texCoord1.y; - out.texCoord2 = in.texCoord2; - out.texCoord2.y = 1.0 - out.texCoord2.y; - - // View - out.view = in.view; - - // TBN - out.normal = normalize(rotateFloat3ByQuaternion(float3(0.0, 0.0, 1.0), in.quaternion)); - out.tangent = normalize(rotateFloat3ByQuaternion(float3(1.0, 0.0, 0.0), in.quaternion)); - out.bitangent = normalize(rotateFloat3ByQuaternion(float3(0.0, 1.0, 0.0), in.quaternion)); - out.quaternion = in.quaternion; - - // Environment - for (int i = 0; i < 6; i++) { - out.textureEnvColor[i] = abgr8888ToFloat4(tev.textureEnvColor[i]); - } - - out.textureEnvBufferColor = abgr8888ToFloat4(picaRegs.read(0xFDu)); - - DrawVertexOutWithClip outWithClip; - outWithClip.out = out; - - // Parse clipping plane registers - float4 clipData = float4( - decodeFP(picaRegs.read(0x48u) & 0xffffffu, 7u, 16u), decodeFP(picaRegs.read(0x49u) & 0xffffffu, 7u, 16u), - decodeFP(picaRegs.read(0x4Au) & 0xffffffu, 7u, 16u), decodeFP(picaRegs.read(0x4Bu) & 0xffffffu, 7u, 16u) - ); - - // There's also another, always-on clipping plane based on vertex z - // TODO: transform - outWithClip.clipDistance[0] = -in.position.z; - outWithClip.clipDistance[1] = dot(clipData, in.position); - - return outWithClip; -} - -constant bool lightingEnabled [[function_constant(0)]]; -constant uint8_t lightingNumLights [[function_constant(1)]]; -constant uint32_t lightingConfig1 [[function_constant(2)]]; -constant uint16_t alphaControl [[function_constant(3)]]; - -struct Globals { - bool error_unimpl; - - float4 tevSources[16]; - float4 tevNextPreviousBuffer; - bool tevUnimplementedSourceFlag = false; - - uint GPUREG_LIGHTING_LUTINPUT_SCALE; - uint GPUREG_LIGHTING_LUTINPUT_ABS; - uint GPUREG_LIGHTING_LUTINPUT_SELECT; - uint GPUREG_LIGHTi_CONFIG; - - float3 normal; -}; - -// See docs/lighting.md -constant uint samplerEnabledBitfields[2] = {0x7170e645u, 0x7f013fefu}; - -bool isSamplerEnabled(uint environment_id, uint lut_id) { - uint index = 7 * environment_id + lut_id; - uint arrayIndex = (index >> 5); - return (samplerEnabledBitfields[arrayIndex] & (1u << (index & 31u))) != 0u; -} - -struct FragTEV { - uint textureEnvSource[6]; - uint textureEnvOperand[6]; - uint textureEnvCombiner[6]; - uint textureEnvScale[6]; - - float4 fetchSource(thread Globals& globals, uint src_id) constant { - if (src_id >= 6u && src_id < 13u) { - globals.tevUnimplementedSourceFlag = true; - } - - return globals.tevSources[src_id]; - } - - float4 getColorAndAlphaSource(thread Globals& globals, int tev_id, int src_id) constant { - float4 result; - - float4 colorSource = fetchSource(globals, (textureEnvSource[tev_id] >> (src_id * 4)) & 15u); - float4 alphaSource = fetchSource(globals, (textureEnvSource[tev_id] >> (src_id * 4 + 16)) & 15u); - - uint colorOperand = (textureEnvOperand[tev_id] >> (src_id * 4)) & 15u; - uint alphaOperand = (textureEnvOperand[tev_id] >> (12 + src_id * 4)) & 7u; - - // TODO: figure out what the undocumented values do - switch (colorOperand) { - case 0u: result.rgb = colorSource.rgb; break; // Source color - case 1u: result.rgb = 1.0 - colorSource.rgb; break; // One minus source color - case 2u: result.rgb = float3(colorSource.a); break; // Source alpha - case 3u: result.rgb = float3(1.0 - colorSource.a); break; // One minus source alpha - case 4u: result.rgb = float3(colorSource.r); break; // Source red - case 5u: result.rgb = float3(1.0 - colorSource.r); break; // One minus source red - case 8u: result.rgb = float3(colorSource.g); break; // Source green - case 9u: result.rgb = float3(1.0 - colorSource.g); break; // One minus source green - case 12u: result.rgb = float3(colorSource.b); break; // Source blue - case 13u: result.rgb = float3(1.0 - colorSource.b); break; // One minus source blue - default: break; - } - - // TODO: figure out what the undocumented values do - switch (alphaOperand) { - case 0u: result.a = alphaSource.a; break; // Source alpha - case 1u: result.a = 1.0 - alphaSource.a; break; // One minus source alpha - case 2u: result.a = alphaSource.r; break; // Source red - case 3u: result.a = 1.0 - alphaSource.r; break; // One minus source red - case 4u: result.a = alphaSource.g; break; // Source green - case 5u: result.a = 1.0 - alphaSource.g; break; // One minus source green - case 6u: result.a = alphaSource.b; break; // Source blue - case 7u: result.a = 1.0 - alphaSource.b; break; // One minus source blue - default: break; - } - - return result; - } - - float4 calculateCombiner(thread Globals& globals, int tev_id) constant { - float4 source0 = getColorAndAlphaSource(globals, tev_id, 0); - float4 source1 = getColorAndAlphaSource(globals, tev_id, 1); - float4 source2 = getColorAndAlphaSource(globals, tev_id, 2); - - uint colorCombine = textureEnvCombiner[tev_id] & 15u; - uint alphaCombine = (textureEnvCombiner[tev_id] >> 16) & 15u; - - float4 result = float4(1.0); - - // TODO: figure out what the undocumented values do - switch (colorCombine) { - case 0u: result.rgb = source0.rgb; break; // Replace - case 1u: result.rgb = source0.rgb * source1.rgb; break; // Modulate - case 2u: result.rgb = min(float3(1.0), source0.rgb + source1.rgb); break; // Add - case 3u: result.rgb = clamp(source0.rgb + source1.rgb - 0.5, 0.0, 1.0); break; // Add signed - case 4u: result.rgb = mix(source1.rgb, source0.rgb, source2.rgb); break; // Interpolate - case 5u: result.rgb = max(source0.rgb - source1.rgb, 0.0); break; // Subtract - case 6u: result.rgb = float3(4.0 * dot(source0.rgb - 0.5, source1.rgb - 0.5)); break; // Dot3 RGB - case 7u: result = float4(4.0 * dot(source0.rgb - 0.5, source1.rgb - 0.5)); break; // Dot3 RGBA - case 8u: result.rgb = min(source0.rgb * source1.rgb + source2.rgb, 1.0); break; // Multiply then add - case 9u: result.rgb = min((source0.rgb + source1.rgb), 1.0) * source2.rgb; break; // Add then multiply - default: break; - } - - if (colorCombine != 7u) { // The color combiner also writes the alpha channel in the "Dot3 RGBA" mode. - // TODO: figure out what the undocumented values do - // TODO: test if the alpha combiner supports all the same modes as the color combiner. - switch (alphaCombine) { - case 0u: result.a = source0.a; break; // Replace - case 1u: result.a = source0.a * source1.a; break; // Modulate - case 2u: result.a = min(1.0, source0.a + source1.a); break; // Add - case 3u: result.a = clamp(source0.a + source1.a - 0.5, 0.0, 1.0); break; // Add signed - case 4u: result.a = mix(source1.a, source0.a, source2.a); break; // Interpolate - case 5u: result.a = max(0.0, source0.a - source1.a); break; // Subtract - case 8u: result.a = min(source0.a * source1.a + source2.a, 1.0); break; // Multiply then add - case 9u: result.a = min(source0.a + source1.a, 1.0) * source2.a; break; // Add then multiply - default: break; - } - } - - result.rgb *= float(1 << (textureEnvScale[tev_id] & 3u)); - result.a *= float(1 << ((textureEnvScale[tev_id] >> 16) & 3u)); - - return result; - } -}; - -enum class LogicOp : uint8_t { - Clear = 0, - And = 1, - AndReverse = 2, - Copy = 3, - Set = 4, - CopyInverted = 5, - NoOp = 6, - Invert = 7, - Nand = 8, - Or = 9, - Nor = 10, - Xor = 11, - Equiv = 12, - AndInverted = 13, - OrReverse = 14, - OrInverted = 15 -}; - -uint4 performLogicOpU(LogicOp logicOp, uint4 s, uint4 d) { - switch (logicOp) { - case LogicOp::Clear: return as_type(float4(0.0)); - case LogicOp::And: return s & d; - case LogicOp::AndReverse: return s & ~d; - case LogicOp::Copy: return s; - case LogicOp::Set: return as_type(float4(1.0)); - case LogicOp::CopyInverted: return ~s; - case LogicOp::NoOp: return d; - case LogicOp::Invert: return ~d; - case LogicOp::Nand: return ~(s & d); - case LogicOp::Or: return s | d; - case LogicOp::Nor: return ~(s | d); - case LogicOp::Xor: return s ^ d; - case LogicOp::Equiv: return ~(s ^ d); - case LogicOp::AndInverted: return ~s & d; - case LogicOp::OrReverse: return s | ~d; - case LogicOp::OrInverted: return ~s | d; - } -} - -#define D0_LUT 0u -#define D1_LUT 1u -#define SP_LUT 2u -#define FR_LUT 3u -#define RB_LUT 4u -#define RG_LUT 5u -#define RR_LUT 6u - -float lutLookup(texture2d_array texLut, uint slice, uint lut, uint index) { - return texLut.read(uint2(index, lut), slice).r; -} - -float lightLutLookup(thread Globals& globals, thread DrawVertexOut& in, constant PicaRegs& picaRegs, texture2d_array texLut, uint slice, uint environment_id, uint lut_id, uint light_id, float3 light_vector, float3 half_vector) { - uint lut_index; - int bit_in_config1; - if (lut_id == SP_LUT) { - // These are the spotlight attenuation LUTs - bit_in_config1 = 8 + int(light_id & 7u); - lut_index = 8u + light_id; - } else if (lut_id <= 6) { - bit_in_config1 = 16 + int(lut_id); - lut_index = lut_id; - } else { - globals.error_unimpl = true; - } - - bool current_sampler_enabled = isSamplerEnabled(environment_id, lut_id); // 7 luts per environment - - if (!current_sampler_enabled || (extract_bits(lightingConfig1, bit_in_config1, 1) != 0u)) { - return 1.0; - } - - uint scale_id = extract_bits(globals.GPUREG_LIGHTING_LUTINPUT_SCALE, int(lut_id) << 2, 3); - float scale = float(1u << scale_id); - if (scale_id >= 6u) scale /= 256.0; - - float delta = 1.0; - uint input_id = extract_bits(globals.GPUREG_LIGHTING_LUTINPUT_SELECT, int(lut_id) << 2, 3); - switch (input_id) { - case 0u: { - delta = dot(globals.normal, normalize(half_vector)); - break; - } - case 1u: { - delta = dot(normalize(in.view), normalize(half_vector)); - break; - } - case 2u: { - delta = dot(globals.normal, normalize(in.view)); - break; - } - case 3u: { - delta = dot(light_vector, globals.normal); - break; - } - case 4u: { - int GPUREG_LIGHTi_SPOTDIR_LOW = int(picaRegs.read(0x0146u + (light_id << 4u))); - int GPUREG_LIGHTi_SPOTDIR_HIGH = int(picaRegs.read(0x0147u + (light_id << 4u))); - - // Sign extend them. Normally bitfieldExtract would do that but it's missing on some versions - // of GLSL so we do it manually - int se_x = extract_bits(GPUREG_LIGHTi_SPOTDIR_LOW, 0, 13); - int se_y = extract_bits(GPUREG_LIGHTi_SPOTDIR_LOW, 16, 13); - int se_z = extract_bits(GPUREG_LIGHTi_SPOTDIR_HIGH, 0, 13); - - if ((se_x & 0x1000) == 0x1000) se_x |= 0xffffe000; - if ((se_y & 0x1000) == 0x1000) se_y |= 0xffffe000; - if ((se_z & 0x1000) == 0x1000) se_z |= 0xffffe000; - - // These are fixed point 1.1.11 values, so we need to convert them to float - float x = float(se_x) / 2047.0; - float y = float(se_y) / 2047.0; - float z = float(se_z) / 2047.0; - float3 spotlight_vector = float3(x, y, z); - delta = dot(light_vector, spotlight_vector); // spotlight direction is negated so we don't negate light_vector - break; - } - case 5u: { - delta = 1.0; // TODO: cos (aka CP); - globals.error_unimpl = true; - break; - } - default: { - delta = 1.0; - globals.error_unimpl = true; - break; - } - } - - // 0 = enabled - if (extract_bits(globals.GPUREG_LIGHTING_LUTINPUT_ABS, 1 + (int(lut_id) << 2), 1) == 0u) { - // Two sided diffuse - if (extract_bits(globals.GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) { - delta = max(delta, 0.0); - } else { - delta = abs(delta); - } - int index = int(clamp(floor(delta * 255.0), 0.f, 255.f)); - return lutLookup(texLut, slice, lut_index, index) * scale; - } else { - // Range is [-1, 1] so we need to map it to [0, 1] - int index = int(clamp(floor(delta * 128.0), -128.f, 127.f)); - if (index < 0) index += 256; - return lutLookup(texLut, slice, lut_index, index) * scale; - } -} - -float3 regToColor(uint reg) { - // Normalization scale to convert from [0...255] to [0.0...1.0] - const float scale = 1.0 / 255.0; - - return scale * float3(float(extract_bits(reg, 20, 8)), float(extract_bits(reg, 10, 8)), float(extract_bits(reg, 00, 8))); -} - -// Implements the following algorthm: https://mathb.in/26766 -void calcLighting(thread Globals& globals, thread DrawVertexOut& in, constant PicaRegs& picaRegs, texture2d_array texLut, uint slice, sampler linearSampler, thread float4& primaryColor, thread float4& secondaryColor) { - // Quaternions describe a transformation from surface-local space to eye space. - // In surface-local space, by definition (and up to permutation) the normal vector is (0,0,1), - // the tangent vector is (1,0,0), and the bitangent vector is (0,1,0). - //float3 normal = normalize(in.normal); - //float3 tangent = normalize(in.tangent); - //float3 bitangent = normalize(in.bitangent); - //float3 view = normalize(in.view); - - uint GPUREG_LIGHTING_LIGHT_PERMUTATION = picaRegs.read(0x01D9u); - - primaryColor = float4(0.0, 0.0, 0.0, 1.0); - secondaryColor = float4(0.0, 0.0, 0.0, 1.0); - - uint GPUREG_LIGHTING_CONFIG0 = picaRegs.read(0x01C3u); - globals.GPUREG_LIGHTING_LUTINPUT_SCALE = picaRegs.read(0x01D2u); - globals.GPUREG_LIGHTING_LUTINPUT_ABS = picaRegs.read(0x01D0u); - globals.GPUREG_LIGHTING_LUTINPUT_SELECT = picaRegs.read(0x01D1u); - - uint bumpMode = extract_bits(GPUREG_LIGHTING_CONFIG0, 28, 2); - - // Bump mode is ignored for now because it breaks some games ie. Toad Treasure Tracker - switch (bumpMode) { - default: { - globals.normal = rotateFloat3ByQuaternion(float3(0.0, 0.0, 1.0), in.quaternion); - break; - } - } - - float4 diffuseSum = float4(0.0, 0.0, 0.0, 1.0); - float4 specularSum = float4(0.0, 0.0, 0.0, 1.0); - - uint environmentId = extract_bits(GPUREG_LIGHTING_CONFIG0, 4, 4); - bool clampHighlights = extract_bits(GPUREG_LIGHTING_CONFIG0, 27, 1) == 1u; - - uint lightId; - float3 lightVector = float3(0.0); - float3 halfVector = float3(0.0); - - for (uint i = 0u; i < lightingNumLights + 1; i++) { - lightId = extract_bits(GPUREG_LIGHTING_LIGHT_PERMUTATION, int(i) << 2, 3); - - uint GPUREG_LIGHTi_SPECULAR0 = picaRegs.read(0x0140u + (lightId << 4u)); - uint GPUREG_LIGHTi_SPECULAR1 = picaRegs.read(0x0141u + (lightId << 4u)); - uint GPUREG_LIGHTi_DIFFUSE = picaRegs.read(0x0142u + (lightId << 4u)); - uint GPUREG_LIGHTi_AMBIENT = picaRegs.read(0x0143u + (lightId << 4u)); - uint GPUREG_LIGHTi_VECTOR_LOW = picaRegs.read(0x0144u + (lightId << 4u)); - uint GPUREG_LIGHTi_VECTOR_HIGH = picaRegs.read(0x0145u + (lightId << 4u)); - globals.GPUREG_LIGHTi_CONFIG = picaRegs.read(0x0149u + (lightId << 4u)); - - float lightDistance; - float3 lightPosition = float3( - decodeFP(extract_bits(GPUREG_LIGHTi_VECTOR_LOW, 0, 16), 5u, 10u), decodeFP(extract_bits(GPUREG_LIGHTi_VECTOR_LOW, 16, 16), 5u, 10u), - decodeFP(extract_bits(GPUREG_LIGHTi_VECTOR_HIGH, 0, 16), 5u, 10u) - ); - - // Positional Light - if (extract_bits(globals.GPUREG_LIGHTi_CONFIG, 0, 1) == 0u) { - // error_unimpl = true; - lightVector = lightPosition + in.view; - } - - // Directional light - else { - lightVector = lightPosition; - } - - lightDistance = length(lightVector); - lightVector = normalize(lightVector); - halfVector = lightVector + normalize(in.view); - - float NdotL = dot(globals.normal, lightVector); // N dot Li - - // Two sided diffuse - if (extract_bits(globals.GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) - NdotL = max(0.0, NdotL); - else - NdotL = abs(NdotL); - - float geometricFactor; - bool useGeo0 = extract_bits(globals.GPUREG_LIGHTi_CONFIG, 2, 1) == 1u; - bool useGeo1 = extract_bits(globals.GPUREG_LIGHTi_CONFIG, 3, 1) == 1u; - if (useGeo0 || useGeo1) { - geometricFactor = dot(halfVector, halfVector); - geometricFactor = geometricFactor == 0.0 ? 0.0 : min(NdotL / geometricFactor, 1.0); - } - - float distanceAttenuation = 1.0; - if (extract_bits(lightingConfig1, 24 + int(lightId), 1) == 0u) { - uint GPUREG_LIGHTi_ATTENUATION_BIAS = extract_bits(picaRegs.read(0x014Au + (lightId << 4u)), 0, 20); - uint GPUREG_LIGHTi_ATTENUATION_SCALE = extract_bits(picaRegs.read(0x014Bu + (lightId << 4u)), 0, 20); - - float distanceAttenuationBias = decodeFP(GPUREG_LIGHTi_ATTENUATION_BIAS, 7u, 12u); - float distanceAttenuationScale = decodeFP(GPUREG_LIGHTi_ATTENUATION_SCALE, 7u, 12u); - - float delta = lightDistance * distanceAttenuationScale + distanceAttenuationBias; - delta = clamp(delta, 0.0, 1.0); - int index = int(clamp(floor(delta * 255.0), 0.0, 255.0)); - distanceAttenuation = lutLookup(texLut, slice, 16u + lightId, index); - } - - float spotlightAttenuation = lightLutLookup(globals, in, picaRegs, texLut, slice, environmentId, SP_LUT, lightId, lightVector, halfVector); - float specular0Distribution = lightLutLookup(globals, in, picaRegs, texLut, slice, environmentId, D0_LUT, lightId, lightVector, halfVector); - float specular1Distribution = lightLutLookup(globals, in, picaRegs, texLut, slice, environmentId, D1_LUT, lightId, lightVector, halfVector); - float3 reflectedColor; - reflectedColor.r = lightLutLookup(globals, in, picaRegs, texLut, slice, environmentId, RR_LUT, lightId, lightVector, halfVector); - - if (isSamplerEnabled(environmentId, RG_LUT)) { - reflectedColor.g = lightLutLookup(globals, in, picaRegs, texLut, slice, environmentId, RG_LUT, lightId, lightVector, halfVector); - } else { - reflectedColor.g = reflectedColor.r; - } - - if (isSamplerEnabled(environmentId, RB_LUT)) { - reflectedColor.b = lightLutLookup(globals, in, picaRegs, texLut, slice, environmentId, RB_LUT, lightId, lightVector, halfVector); - } else { - reflectedColor.b = reflectedColor.r; - } - - float3 specular0 = regToColor(GPUREG_LIGHTi_SPECULAR0) * specular0Distribution; - float3 specular1 = regToColor(GPUREG_LIGHTi_SPECULAR1) * specular1Distribution * reflectedColor; - - specular0 *= useGeo0 ? geometricFactor : 1.0; - specular1 *= useGeo1 ? geometricFactor : 1.0; - - float clampFactor = 1.0; - if (clampHighlights && NdotL == 0.0) { - clampFactor = 0.0; - } - - float lightFactor = distanceAttenuation * spotlightAttenuation; - diffuseSum.rgb += lightFactor * (regToColor(GPUREG_LIGHTi_AMBIENT) + regToColor(GPUREG_LIGHTi_DIFFUSE) * NdotL); - specularSum.rgb += lightFactor * clampFactor * (specular0 + specular1); - } - uint fresnelOutput1 = extract_bits(GPUREG_LIGHTING_CONFIG0, 2, 1); - uint fresnelOutput2 = extract_bits(GPUREG_LIGHTING_CONFIG0, 3, 1); - - float fresnelFactor; - - if (fresnelOutput1 == 1u || fresnelOutput2 == 1u) { - fresnelFactor = lightLutLookup(globals, in, picaRegs, texLut, slice, environmentId, FR_LUT, lightId, lightVector, halfVector); - } - - if (fresnelOutput1 == 1u) { - diffuseSum.a = fresnelFactor; - } - - if (fresnelOutput2 == 1u) { - specularSum.a = fresnelFactor; - } - - uint GPUREG_LIGHTING_AMBIENT = picaRegs.read(0x01C0u); - float4 globalAmbient = float4(regToColor(GPUREG_LIGHTING_AMBIENT), 1.0); - primaryColor = clamp(globalAmbient + diffuseSum, 0.0, 1.0); - secondaryColor = clamp(specularSum, 0.0, 1.0); -} - -float4 performLogicOp(LogicOp logicOp, float4 s, float4 d) { - return as_type(performLogicOpU(logicOp, as_type(s), as_type(d))); -} - -// iOS simulator doesn't support fb fetch, so don't enable it -#ifndef TARGET_OS_SIMULATOR -#define PREVIOUS_COLOR_DECL float4 prevColor [[color(0)]], -#else -#define PREVIOUS_COLOR_DECL -#endif - -fragment float4 fragmentDraw(DrawVertexOut in [[stage_in]], PREVIOUS_COLOR_DECL constant PicaRegs& picaRegs [[buffer(0)]], constant FragTEV& tev [[buffer(1)]], constant LogicOp& logicOp [[buffer(2)]], constant uint2& lutSlices [[buffer(3)]], texture2d tex0 [[texture(0)]], texture2d tex1 [[texture(1)]], texture2d tex2 [[texture(2)]], texture2d_array texLightingLut [[texture(3)]], texture1d_array texFogLut [[texture(4)]], sampler samplr0 [[sampler(0)]], sampler samplr1 [[sampler(1)]], sampler samplr2 [[sampler(2)]], sampler linearSampler [[sampler(3)]]) { - Globals globals; - - globals.tevSources[0] = in.color; - if (lightingEnabled) { - calcLighting(globals, in, picaRegs, texLightingLut, lutSlices.x, linearSampler, globals.tevSources[1], globals.tevSources[2]); - } else { - globals.tevSources[1] = float4(0.0); - globals.tevSources[2] = float4(0.0); - } - - uint textureConfig = picaRegs.read(0x80u); - float2 texCoord2 = (textureConfig & (1u << 13)) != 0u ? in.texCoord1 : in.texCoord2; - - if ((textureConfig & 1u) != 0u) globals.tevSources[3] = tex0.sample(samplr0, in.texCoord0.xy); - if ((textureConfig & 2u) != 0u) globals.tevSources[4] = tex1.sample(samplr1, in.texCoord1); - if ((textureConfig & 4u) != 0u) globals.tevSources[5] = tex2.sample(samplr2, texCoord2); - globals.tevSources[13] = float4(0.0); // Previous buffer - globals.tevSources[15] = in.color; // Previous combiner - - globals.tevNextPreviousBuffer = in.textureEnvBufferColor; - uint textureEnvUpdateBuffer = picaRegs.read(0xE0u); - - for (int i = 0; i < 6; i++) { - globals.tevSources[14] = in.textureEnvColor[i]; // Constant color - globals.tevSources[15] = tev.calculateCombiner(globals, i); - globals.tevSources[13] = globals.tevNextPreviousBuffer; - - if (i < 4) { - if ((textureEnvUpdateBuffer & (0x100u << i)) != 0u) { - globals.tevNextPreviousBuffer.rgb = globals.tevSources[15].rgb; - } - - if ((textureEnvUpdateBuffer & (0x1000u << i)) != 0u) { - globals.tevNextPreviousBuffer.a = globals.tevSources[15].a; - } - } - } - - float4 color = globals.tevSources[15]; - - // Fog - bool enable_fog = (textureEnvUpdateBuffer & 7u) == 5u; - - if (enable_fog) { - bool flipDepth = (textureEnvUpdateBuffer & (1u << 16)) != 0u; - float fogIndex = flipDepth ? 1.0 - in.position.z : in.position.z; - fogIndex *= 128.0; - float clampedIndex = clamp(floor(fogIndex), 0.0, 127.0); - float delta = fogIndex - clampedIndex; - float2 value = texFogLut.read(clampedIndex, lutSlices.y).rg; - float fogFactor = clamp(value.r + value.g * delta, 0.0, 1.0); - - uint GPUREG_FOG_COLOR = picaRegs.read(0x00E1u); - - // Annoyingly color is not encoded in the same way as light color - float r = (GPUREG_FOG_COLOR & 0xFFu) / 255.0; - float g = ((GPUREG_FOG_COLOR >> 8) & 0xFFu) / 255.0; - float b = ((GPUREG_FOG_COLOR >> 16) & 0xFFu) / 255.0; - float3 fogColor = float3(r, g, b); - - color.rgb = mix(fogColor, color.rgb, fogFactor); - } - - // Perform alpha test - if ((alphaControl & 1u) != 0u) { // Check if alpha test is on - uint func = (alphaControl >> 4u) & 7u; - float reference = float((alphaControl >> 8u) & 0xffu) / 255.0; - float alpha = color.a; - - switch (func) { - case 0u: discard_fragment(); // Never pass alpha test - case 1u: break; // Always pass alpha test - case 2u: // Pass if equal - if (alpha != reference) discard_fragment(); - break; - case 3u: // Pass if not equal - if (alpha == reference) discard_fragment(); - break; - case 4u: // Pass if less than - if (alpha >= reference) discard_fragment(); - break; - case 5u: // Pass if less than or equal - if (alpha > reference) discard_fragment(); - break; - case 6u: // Pass if greater than - if (alpha <= reference) discard_fragment(); - break; - case 7u: // Pass if greater than or equal - if (alpha < reference) discard_fragment(); - break; - } - } - -#ifndef TARGET_OS_SIMULATOR - return performLogicOp(logicOp, color, prevColor); -#else - return performLogicOp(logicOp, color, float4(0.0)); -#endif -} \ No newline at end of file diff --git a/src/host_shaders/opengl_es_display.frag b/src/host_shaders/opengl_es_display.frag deleted file mode 100644 index 600ebfcd..00000000 --- a/src/host_shaders/opengl_es_display.frag +++ /dev/null @@ -1,10 +0,0 @@ -#version 310 es -precision mediump float; - -in vec2 UV; -out vec4 FragColor; - -uniform sampler2D u_texture; -void main() { - FragColor = texture(u_texture, UV); -} \ No newline at end of file diff --git a/src/host_shaders/opengl_es_display.vert b/src/host_shaders/opengl_es_display.vert deleted file mode 100644 index 04fadfc6..00000000 --- a/src/host_shaders/opengl_es_display.vert +++ /dev/null @@ -1,25 +0,0 @@ -#version 310 es -precision mediump float; - -out vec2 UV; - -void main() { - const vec4 positions[4] = vec4[]( - vec4(-1.0, 1.0, 1.0, 1.0), // Top-left - vec4(1.0, 1.0, 1.0, 1.0), // Top-right - vec4(-1.0, -1.0, 1.0, 1.0), // Bottom-left - vec4(1.0, -1.0, 1.0, 1.0) // Bottom-right - ); - - // The 3DS displays both screens' framebuffer rotated 90 deg counter clockwise - // So we adjust our texcoords accordingly - const vec2 texcoords[4] = vec2[]( - vec2(1.0, 1.0), // Top-right - vec2(1.0, 0.0), // Bottom-right - vec2(0.0, 1.0), // Top-left - vec2(0.0, 0.0) // Bottom-left - ); - - gl_Position = positions[gl_VertexID]; - UV = texcoords[gl_VertexID]; -} \ No newline at end of file diff --git a/src/host_shaders/opengl_fragment_shader.frag b/src/host_shaders/opengl_fragment_shader.frag index 9f07df0b..2fd4146a 100644 --- a/src/host_shaders/opengl_fragment_shader.frag +++ b/src/host_shaders/opengl_fragment_shader.frag @@ -1,6 +1,8 @@ #version 410 core -in vec4 v_quaternion; +in vec3 v_tangent; +in vec3 v_normal; +in vec3 v_bitangent; in vec4 v_colour; in vec3 v_texcoord0; in vec2 v_texcoord1; @@ -25,26 +27,16 @@ uniform bool u_depthmapEnable; uniform sampler2D u_tex0; uniform sampler2D u_tex1; uniform sampler2D u_tex2; -uniform sampler2D u_tex_luts; +uniform sampler1DArray u_tex_lighting_lut; uniform uint u_picaRegs[0x200 - 0x48]; // Helper so that the implementation of u_pica_regs can be changed later -uint readPicaReg(uint reg_addr) { return u_picaRegs[reg_addr - 0x48u]; } +uint readPicaReg(uint reg_addr) { return u_picaRegs[reg_addr - 0x48]; } vec4 tevSources[16]; vec4 tevNextPreviousBuffer; bool tevUnimplementedSourceFlag = false; -vec3 normal; - -// See docs/lighting.md -const uint samplerEnabledBitfields[2] = uint[2](0x7170e645u, 0x7f013fefu); - -bool isSamplerEnabled(uint environment_id, uint lut_id) { - uint index = 7 * environment_id + lut_id; - uint arrayIndex = (index >> 5); - return (samplerEnabledBitfields[arrayIndex] & (1u << (index & 31u))) != 0u; -} // OpenGL ES 1.1 reference pages for TEVs (this is what the PICA200 implements): // https://registry.khronos.org/OpenGL-Refpages/es1.1/xhtml/glTexEnv.xml @@ -118,7 +110,7 @@ vec4 tevCalculateCombiner(int tev_id) { case 6u: result.rgb = vec3(4.0 * dot(source0.rgb - 0.5, source1.rgb - 0.5)); break; // Dot3 RGB case 7u: result = vec4(4.0 * dot(source0.rgb - 0.5, source1.rgb - 0.5)); break; // Dot3 RGBA case 8u: result.rgb = min(source0.rgb * source1.rgb + source2.rgb, 1.0); break; // Multiply then add - case 9u: result.rgb = min(source0.rgb + source1.rgb, 1.0) * source2.rgb; break; // Add then multiply + case 9u: result.rgb = min((source0.rgb + source1.rgb) * source2.rgb, 1.0); break; // Add then multiply default: break; } @@ -133,7 +125,7 @@ vec4 tevCalculateCombiner(int tev_id) { case 4u: result.a = mix(source1.a, source0.a, source2.a); break; // Interpolate case 5u: result.a = max(0.0, source0.a - source1.a); break; // Subtract case 8u: result.a = min(1.0, source0.a * source1.a + source2.a); break; // Multiply then add - case 9u: result.a = min(source0.a + source1.a, 1.0) * source2.a; break; // Add then multiply + case 9u: result.a = min(1.0, (source0.a + source1.a) * source2.a); break; // Add then multiply default: break; } } @@ -152,18 +144,10 @@ vec4 tevCalculateCombiner(int tev_id) { #define RG_LUT 5u #define RR_LUT 6u -#define FOG_INDEX 24 - -uint GPUREG_LIGHTi_CONFIG; -uint GPUREG_LIGHTING_CONFIG1; -uint GPUREG_LIGHTING_LUTINPUT_SELECT; -uint GPUREG_LIGHTING_LUTINPUT_SCALE; -uint GPUREG_LIGHTING_LUTINPUT_ABS; -bool error_unimpl = false; -vec4 unimpl_color = vec4(1.0, 0.0, 1.0, 1.0); - -float lutLookup(uint lut, int index) { - return texelFetch(u_tex_luts, ivec2(index, int(lut)), 0).r; +float lutLookup(uint lut, uint light, float value) { + if (lut >= FR_LUT && lut <= RR_LUT) lut -= 1; + if (lut == SP_LUT) lut = light + 8; + return texture(u_tex_lighting_lut, vec2(value, lut)).r; } vec3 regToColor(uint reg) { @@ -181,7 +165,7 @@ float decodeFP(uint hex, uint E, uint M) { uint mantissa = hex & ((1u << M) - 1u); uint sign = (hex >> (E + M)) << 31u; - if ((hex & ((1u << (width - 1u)) - 1u)) != 0u) { + if ((hex & ((1u << (width - 1u)) - 1u)) != 0) { if (exponent == (1u << E) - 1u) exponent = 255u; else @@ -194,266 +178,157 @@ float decodeFP(uint hex, uint E, uint M) { return uintBitsToFloat(hex); } -float lightLutLookup(uint environment_id, uint lut_id, uint light_id, vec3 light_vector, vec3 half_vector) { - uint lut_index; - int bit_in_config1; - if (lut_id == SP_LUT) { - // These are the spotlight attenuation LUTs - bit_in_config1 = 8 + int(light_id & 7u); - lut_index = 8u + light_id; - } else if (lut_id <= 6) { - bit_in_config1 = 16 + int(lut_id); - lut_index = lut_id; - } else { - error_unimpl = true; - } - - bool current_sampler_enabled = isSamplerEnabled(environment_id, lut_id); // 7 luts per environment - - if (!current_sampler_enabled || (bitfieldExtract(GPUREG_LIGHTING_CONFIG1, bit_in_config1, 1) != 0u)) { - return 1.0; - } - - uint scale_id = bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_SCALE, int(lut_id) << 2, 3); - float scale = float(1u << scale_id); - if (scale_id >= 6u) scale /= 256.0; - - float delta = 1.0; - uint input_id = bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_SELECT, int(lut_id) << 2, 3); - switch (input_id) { - case 0u: { - delta = dot(normal, normalize(half_vector)); - break; - } - case 1u: { - delta = dot(normalize(v_view), normalize(half_vector)); - break; - } - case 2u: { - delta = dot(normal, normalize(v_view)); - break; - } - case 3u: { - delta = dot(light_vector, normal); - break; - } - case 4u: { - int GPUREG_LIGHTi_SPOTDIR_LOW = int(readPicaReg(0x0146u + (light_id << 4u))); - int GPUREG_LIGHTi_SPOTDIR_HIGH = int(readPicaReg(0x0147u + (light_id << 4u))); - - // Sign extend them. Normally bitfieldExtract would do that but it's missing on some versions - // of GLSL so we do it manually - int se_x = bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_LOW, 0, 13); - int se_y = bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_LOW, 16, 13); - int se_z = bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_HIGH, 0, 13); - - if ((se_x & 0x1000) == 0x1000) se_x |= 0xffffe000; - if ((se_y & 0x1000) == 0x1000) se_y |= 0xffffe000; - if ((se_z & 0x1000) == 0x1000) se_z |= 0xffffe000; - - // These are fixed point 1.1.11 values, so we need to convert them to float - float x = float(se_x) / 2047.0; - float y = float(se_y) / 2047.0; - float z = float(se_z) / 2047.0; - vec3 spotlight_vector = vec3(x, y, z); - delta = dot(light_vector, spotlight_vector); // spotlight direction is negated so we don't negate light_vector - break; - } - case 5u: { - delta = 1.0; // TODO: cos (aka CP); - error_unimpl = true; - break; - } - default: { - delta = 1.0; - error_unimpl = true; - break; - } - } - - // 0 = enabled - if (bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_ABS, 1 + (int(lut_id) << 2), 1) == 0u) { - // Two sided diffuse - if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) { - delta = max(delta, 0.0); - } else { - delta = abs(delta); - } - int index = int(clamp(floor(delta * 255.0), 0.f, 255.f)); - return lutLookup(lut_index, index) * scale; - } else { - // Range is [-1, 1] so we need to map it to [0, 1] - int index = int(clamp(floor(delta * 128.0), -128.f, 127.f)); - if (index < 0) index += 256; - return lutLookup(lut_index, index) * scale; - } -} - -vec3 rotateVec3ByQuaternion(vec3 v, vec4 q) { - vec3 u = q.xyz; - float s = q.w; - return 2.0 * dot(u, v) * u + (s * s - dot(u, u)) * v + 2.0 * s * cross(u, v); -} - // Implements the following algorthm: https://mathb.in/26766 void calcLighting(out vec4 primary_color, out vec4 secondary_color) { - uint GPUREG_LIGHTING_ENABLE = readPicaReg(0x008Fu); - if (bitfieldExtract(GPUREG_LIGHTING_ENABLE, 0, 1) == 0u) { - primary_color = secondary_color = vec4(0.0); + // Quaternions describe a transformation from surface-local space to eye space. + // In surface-local space, by definition (and up to permutation) the normal vector is (0,0,1), + // the tangent vector is (1,0,0), and the bitangent vector is (0,1,0). + vec3 normal = normalize(v_normal); + vec3 tangent = normalize(v_tangent); + vec3 bitangent = normalize(v_bitangent); + vec3 view = normalize(v_view); + + uint GPUREG_LIGHTING_ENABLE = readPicaReg(0x008F); + if (bitfieldExtract(GPUREG_LIGHTING_ENABLE, 0, 1) == 0) { + primary_color = secondary_color = vec4(1.0); return; } - uint GPUREG_LIGHTING_NUM_LIGHTS = (readPicaReg(0x01C2u) & 0x7u) + 1u; - uint GPUREG_LIGHTING_LIGHT_PERMUTATION = readPicaReg(0x01D9u); + uint GPUREG_LIGHTING_AMBIENT = readPicaReg(0x01C0); + uint GPUREG_LIGHTING_NUM_LIGHTS = (readPicaReg(0x01C2) & 0x7u) + 1; + uint GPUREG_LIGHTING_LIGHT_PERMUTATION = readPicaReg(0x01D9); primary_color = vec4(vec3(0.0), 1.0); secondary_color = vec4(vec3(0.0), 1.0); - uint GPUREG_LIGHTING_CONFIG0 = readPicaReg(0x01C3u); - GPUREG_LIGHTING_LUTINPUT_SCALE = readPicaReg(0x01D2u); - GPUREG_LIGHTING_CONFIG1 = readPicaReg(0x01C4u); - GPUREG_LIGHTING_LUTINPUT_ABS = readPicaReg(0x01D0u); - GPUREG_LIGHTING_LUTINPUT_SELECT = readPicaReg(0x01D1u); + primary_color.rgb += regToColor(GPUREG_LIGHTING_AMBIENT); - uint bump_mode = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 28, 2); + uint GPUREG_LIGHTING_LUTINPUT_ABS = readPicaReg(0x01D0); + uint GPUREG_LIGHTING_LUTINPUT_SELECT = readPicaReg(0x01D1); + uint GPUREG_LIGHTING_CONFIG0 = readPicaReg(0x01C3); + uint GPUREG_LIGHTING_CONFIG1 = readPicaReg(0x01C4); + uint GPUREG_LIGHTING_LUTINPUT_SCALE = readPicaReg(0x01D2); + float d[7]; - // Bump mode is ignored for now because it breaks some games ie. Toad Treasure Tracker - switch (bump_mode) { - default: { - normal = rotateVec3ByQuaternion(vec3(0.0, 0.0, 1.0), v_quaternion); - break; - } - } + bool error_unimpl = false; - vec4 diffuse_sum = vec4(0.0, 0.0, 0.0, 1.0); - vec4 specular_sum = vec4(0.0, 0.0, 0.0, 1.0); + for (uint i = 0; i < GPUREG_LIGHTING_NUM_LIGHTS; i++) { + uint light_id = bitfieldExtract(GPUREG_LIGHTING_LIGHT_PERMUTATION, int(i * 3), 3); - uint environment_id = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 4, 4); - bool clamp_highlights = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 27, 1) == 1u; + uint GPUREG_LIGHTi_SPECULAR0 = readPicaReg(0x0140 + 0x10 * light_id); + uint GPUREG_LIGHTi_SPECULAR1 = readPicaReg(0x0141 + 0x10 * light_id); + uint GPUREG_LIGHTi_DIFFUSE = readPicaReg(0x0142 + 0x10 * light_id); + uint GPUREG_LIGHTi_AMBIENT = readPicaReg(0x0143 + 0x10 * light_id); + uint GPUREG_LIGHTi_VECTOR_LOW = readPicaReg(0x0144 + 0x10 * light_id); + uint GPUREG_LIGHTi_VECTOR_HIGH = readPicaReg(0x0145 + 0x10 * light_id); + uint GPUREG_LIGHTi_CONFIG = readPicaReg(0x0149 + 0x10 * light_id); - uint light_id; - vec3 light_vector; - vec3 half_vector; + vec3 light_vector = normalize(vec3( + decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_LOW, 0, 16), 5, 10), decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_LOW, 16, 16), 5, 10), + decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_HIGH, 0, 16), 5, 10) + )); - for (uint i = 0u; i < GPUREG_LIGHTING_NUM_LIGHTS; i++) { - light_id = bitfieldExtract(GPUREG_LIGHTING_LIGHT_PERMUTATION, int(i) << 2, 3); - - uint GPUREG_LIGHTi_SPECULAR0 = readPicaReg(0x0140u + (light_id << 4u)); - uint GPUREG_LIGHTi_SPECULAR1 = readPicaReg(0x0141u + (light_id << 4u)); - uint GPUREG_LIGHTi_DIFFUSE = readPicaReg(0x0142u + (light_id << 4u)); - uint GPUREG_LIGHTi_AMBIENT = readPicaReg(0x0143u + (light_id << 4u)); - uint GPUREG_LIGHTi_VECTOR_LOW = readPicaReg(0x0144u + (light_id << 4u)); - uint GPUREG_LIGHTi_VECTOR_HIGH = readPicaReg(0x0145u + (light_id << 4u)); - GPUREG_LIGHTi_CONFIG = readPicaReg(0x0149u + (light_id << 4u)); - - float light_distance; - vec3 light_position = vec3( - decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_LOW, 0, 16), 5u, 10u), decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_LOW, 16, 16), 5u, 10u), - decodeFP(bitfieldExtract(GPUREG_LIGHTi_VECTOR_HIGH, 0, 16), 5u, 10u) - ); + vec3 half_vector; // Positional Light - if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 0, 1) == 0u) { - light_vector = light_position + v_view; + if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 0, 1) == 0) { + // error_unimpl = true; + half_vector = normalize(normalize(light_vector + v_view) + view); } // Directional light else { - light_vector = light_position; + half_vector = normalize(normalize(light_vector) + view); } - light_distance = length(light_vector); - light_vector = normalize(light_vector); - half_vector = light_vector + normalize(v_view); + for (int c = 0; c < 7; c++) { + if (bitfieldExtract(GPUREG_LIGHTING_CONFIG1, 16 + c, 1) == 0) { + uint scale_id = bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_SCALE, c * 4, 3); + float scale = float(1u << scale_id); + if (scale_id >= 6u) scale /= 256.0; - float NdotL = dot(normal, light_vector); // N dot Li + uint input_id = bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_SELECT, c * 4, 3); + if (input_id == 0u) + d[c] = dot(normal, half_vector); + else if (input_id == 1u) + d[c] = dot(view, half_vector); + else if (input_id == 2u) + d[c] = dot(normal, view); + else if (input_id == 3u) + d[c] = dot(light_vector, normal); + else if (input_id == 4u) { + uint GPUREG_LIGHTi_SPOTDIR_LOW = readPicaReg(0x0146 + 0x10 * light_id); + uint GPUREG_LIGHTi_SPOTDIR_HIGH = readPicaReg(0x0147 + 0x10 * light_id); + vec3 spot_light_vector = normalize(vec3( + decodeFP(bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_LOW, 0, 16), 1, 11), + decodeFP(bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_LOW, 16, 16), 1, 11), + decodeFP(bitfieldExtract(GPUREG_LIGHTi_SPOTDIR_HIGH, 0, 16), 1, 11) + )); + d[c] = dot(-light_vector, spot_light_vector); // -L dot P (aka Spotlight aka SP); + } else if (input_id == 5u) { + d[c] = 1.0; // TODO: cos (aka CP); + error_unimpl = true; + } else { + d[c] = 1.0; + } + + d[c] = lutLookup(c, light_id, d[c] * 0.5 + 0.5) * scale; + if (bitfieldExtract(GPUREG_LIGHTING_LUTINPUT_ABS, 2 * c, 1) != 0u) d[c] = abs(d[c]); + } else { + d[c] = 1.0; + } + } + + uint lookup_config = bitfieldExtract(GPUREG_LIGHTi_CONFIG, 4, 4); + if (lookup_config == 0) { + d[D1_LUT] = 0.0; + d[FR_LUT] = 0.0; + d[RG_LUT] = d[RB_LUT] = d[RR_LUT]; + } else if (lookup_config == 1) { + d[D0_LUT] = 0.0; + d[D1_LUT] = 0.0; + d[RG_LUT] = d[RB_LUT] = d[RR_LUT]; + } else if (lookup_config == 2) { + d[FR_LUT] = 0.0; + d[SP_LUT] = 0.0; + d[RG_LUT] = d[RB_LUT] = d[RR_LUT]; + } else if (lookup_config == 3) { + d[SP_LUT] = 0.0; + d[RG_LUT] = d[RB_LUT] = d[RR_LUT] = 1.0; + } else if (lookup_config == 4) { + d[FR_LUT] = 0.0; + } else if (lookup_config == 5) { + d[D1_LUT] = 0.0; + } else if (lookup_config == 6) { + d[RG_LUT] = d[RB_LUT] = d[RR_LUT]; + } + + float distance_factor = 1.0; // a + float indirect_factor = 1.0; // fi + float shadow_factor = 1.0; // o + + float NdotL = dot(normal, light_vector); // Li dot N // Two sided diffuse - if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 1, 1) == 0u) + if (bitfieldExtract(GPUREG_LIGHTi_CONFIG, 1, 1) == 0) NdotL = max(0.0, NdotL); else NdotL = abs(NdotL); - float geometric_factor; - bool use_geo_0 = bitfieldExtract(GPUREG_LIGHTi_CONFIG, 2, 1) == 1u; - bool use_geo_1 = bitfieldExtract(GPUREG_LIGHTi_CONFIG, 3, 1) == 1u; - if (use_geo_0 || use_geo_1) { - geometric_factor = dot(half_vector, half_vector); - geometric_factor = geometric_factor == 0.0 ? 0.0 : min(NdotL / geometric_factor, 1.0); - } + float light_factor = distance_factor * d[SP_LUT] * indirect_factor * shadow_factor; - float distance_attenuation = 1.0; - if (bitfieldExtract(GPUREG_LIGHTING_CONFIG1, 24 + int(light_id), 1) == 0u) { - uint GPUREG_LIGHTi_ATTENUATION_BIAS = bitfieldExtract(readPicaReg(0x014Au + (light_id << 4u)), 0, 20); - uint GPUREG_LIGHTi_ATTENUATION_SCALE = bitfieldExtract(readPicaReg(0x014Bu + (light_id << 4u)), 0, 20); - - float distance_attenuation_bias = decodeFP(GPUREG_LIGHTi_ATTENUATION_BIAS, 7u, 12u); - float distance_attenuation_scale = decodeFP(GPUREG_LIGHTi_ATTENUATION_SCALE, 7u, 12u); - - float delta = light_distance * distance_attenuation_scale + distance_attenuation_bias; - delta = clamp(delta, 0.0, 1.0); - int index = int(clamp(floor(delta * 255.0), 0.0, 255.0)); - distance_attenuation = lutLookup(16u + light_id, index); - } - - float spotlight_attenuation = lightLutLookup(environment_id, SP_LUT, light_id, light_vector, half_vector); - float specular0_distribution = lightLutLookup(environment_id, D0_LUT, light_id, light_vector, half_vector); - float specular1_distribution = lightLutLookup(environment_id, D1_LUT, light_id, light_vector, half_vector); - vec3 reflected_color; - reflected_color.r = lightLutLookup(environment_id, RR_LUT, light_id, light_vector, half_vector); - - if (isSamplerEnabled(environment_id, RG_LUT)) { - reflected_color.g = lightLutLookup(environment_id, RG_LUT, light_id, light_vector, half_vector); - } else { - reflected_color.g = reflected_color.r; - } - - if (isSamplerEnabled(environment_id, RB_LUT)) { - reflected_color.b = lightLutLookup(environment_id, RB_LUT, light_id, light_vector, half_vector); - } else { - reflected_color.b = reflected_color.r; - } - - vec3 specular0 = regToColor(GPUREG_LIGHTi_SPECULAR0) * specular0_distribution; - vec3 specular1 = regToColor(GPUREG_LIGHTi_SPECULAR1) * specular1_distribution * reflected_color; - - specular0 *= use_geo_0 ? geometric_factor : 1.0; - specular1 *= use_geo_1 ? geometric_factor : 1.0; - - float clamp_factor = 1.0; - if (clamp_highlights && NdotL == 0.0) { - clamp_factor = 0.0; - } - - float light_factor = distance_attenuation * spotlight_attenuation; - diffuse_sum.rgb += light_factor * (regToColor(GPUREG_LIGHTi_AMBIENT) + regToColor(GPUREG_LIGHTi_DIFFUSE) * NdotL); - specular_sum.rgb += light_factor * clamp_factor * (specular0 + specular1); + primary_color.rgb += light_factor * (regToColor(GPUREG_LIGHTi_AMBIENT) + regToColor(GPUREG_LIGHTi_DIFFUSE) * NdotL); + secondary_color.rgb += light_factor * (regToColor(GPUREG_LIGHTi_SPECULAR0) * d[D0_LUT] + + regToColor(GPUREG_LIGHTi_SPECULAR1) * d[D1_LUT] * vec3(d[RR_LUT], d[RG_LUT], d[RB_LUT])); } - uint fresnel_output1 = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 2, 1); uint fresnel_output2 = bitfieldExtract(GPUREG_LIGHTING_CONFIG0, 3, 1); - // Uses parameters from the last light as Fresnel is only applied to the last light - float fresnel_factor; - - if (fresnel_output1 == 1u || fresnel_output2 == 1u) { - fresnel_factor = lightLutLookup(environment_id, FR_LUT, light_id, light_vector, half_vector); - } - - if (fresnel_output1 == 1u) { - diffuse_sum.a = fresnel_factor; - } - if (fresnel_output2 == 1u) { - specular_sum.a = fresnel_factor; - } - - uint GPUREG_LIGHTING_AMBIENT = readPicaReg(0x01C0u); - vec4 global_ambient = vec4(regToColor(GPUREG_LIGHTING_AMBIENT), 1.0); - primary_color = clamp(global_ambient + diffuse_sum, vec4(0.0), vec4(1.0)); - secondary_color = clamp(specular_sum, vec4(0.0), vec4(1.0)); + if (fresnel_output1 == 1u) primary_color.a = d[FR_LUT]; + if (fresnel_output2 == 1u) secondary_color.a = d[FR_LUT]; if (error_unimpl) { - // secondary_color = primary_color = unimpl_color; + // secondary_color = primary_color = vec4(1.0, 0., 1.0, 1.0); } } @@ -463,7 +338,7 @@ void main() { tevSources[0] = v_colour; // Primary/vertex color calcLighting(tevSources[1], tevSources[2]); - uint textureConfig = readPicaReg(0x80u); + uint textureConfig = readPicaReg(0x80); vec2 tex2UV = (textureConfig & (1u << 13)) != 0u ? v_texcoord1 : v_texcoord2; if ((textureConfig & 1u) != 0u) tevSources[3] = texture(u_tex0, v_texcoord0.xy); @@ -473,7 +348,7 @@ void main() { tevSources[15] = v_colour; // Previous combiner tevNextPreviousBuffer = v_textureEnvBufferColor; - uint textureEnvUpdateBuffer = readPicaReg(0xE0u); + uint textureEnvUpdateBuffer = readPicaReg(0xE0); for (int i = 0; i < 6; i++) { tevSources[14] = v_textureEnvColor[i]; // Constant color @@ -496,7 +371,7 @@ void main() { if (tevUnimplementedSourceFlag) { // fragColour = vec4(1.0, 0.0, 1.0, 1.0); } - // fragColour.rg = texture(u_tex_luts,vec2(gl_FragCoord.x/200.,float(int(gl_FragCoord.y/2)%24))).rr; + // fragColour.rg = texture(u_tex_lighting_lut,vec2(gl_FragCoord.x/200.,float(int(gl_FragCoord.y/2)%24))).rr; // Get original depth value by converting from [near, far] = [0, 1] to [-1, 1] // We do this by converting to [0, 2] first and subtracting 1 to go to [-1, 1] @@ -509,56 +384,34 @@ void main() { // Write final fragment depth gl_FragDepth = depth; - bool enable_fog = (textureEnvUpdateBuffer & 7u) == 5u; - - if (enable_fog) { - bool flip_depth = (textureEnvUpdateBuffer & (1u << 16)) != 0u; - float fog_index = flip_depth ? 1.0 - depth : depth; - fog_index *= 128.0; - float clamped_index = clamp(floor(fog_index), 0.0, 127.0); - float delta = fog_index - clamped_index; - vec2 value = texelFetch(u_tex_luts, ivec2(int(clamped_index), FOG_INDEX), 0).rg; - float fog_factor = clamp(value.r + value.g * delta, 0.0, 1.0); - - uint GPUREG_FOG_COLOR = readPicaReg(0x00E1u); - - // Annoyingly color is not encoded in the same way as light color - float r = float(GPUREG_FOG_COLOR & 0xFFu); - float g = float((GPUREG_FOG_COLOR >> 8u) & 0xFFu); - float b = float((GPUREG_FOG_COLOR >> 16u) & 0xFFu); - vec3 fog_color = (1.0 / 255.0) * vec3(r, g, b); - - fragColour.rgb = mix(fog_color, fragColour.rgb, fog_factor); - } - // Perform alpha test - uint alphaControl = readPicaReg(0x104u); + uint alphaControl = readPicaReg(0x104); if ((alphaControl & 1u) != 0u) { // Check if alpha test is on uint func = (alphaControl >> 4u) & 7u; float reference = float((alphaControl >> 8u) & 0xffu) / 255.0; float alpha = fragColour.a; switch (func) { - case 0u: discard; // Never pass alpha test - case 1u: break; // Always pass alpha test - case 2u: // Pass if equal + case 0: discard; // Never pass alpha test + case 1: break; // Always pass alpha test + case 2: // Pass if equal if (alpha != reference) discard; break; - case 3u: // Pass if not equal + case 3: // Pass if not equal if (alpha == reference) discard; break; - case 4u: // Pass if less than + case 4: // Pass if less than if (alpha >= reference) discard; break; - case 5u: // Pass if less than or equal + case 5: // Pass if less than or equal if (alpha > reference) discard; break; - case 6u: // Pass if greater than + case 6: // Pass if greater than if (alpha <= reference) discard; break; - case 7u: // Pass if greater than or equal + case 7: // Pass if greater than or equal if (alpha < reference) discard; break; } } -} +} \ No newline at end of file diff --git a/src/host_shaders/opengl_vertex_shader.vert b/src/host_shaders/opengl_vertex_shader.vert index 057f9a88..63ef1ae4 100644 --- a/src/host_shaders/opengl_vertex_shader.vert +++ b/src/host_shaders/opengl_vertex_shader.vert @@ -9,7 +9,9 @@ layout(location = 5) in float a_texcoord0_w; layout(location = 6) in vec3 a_view; layout(location = 7) in vec2 a_texcoord2; -out vec4 v_quaternion; +out vec3 v_normal; +out vec3 v_tangent; +out vec3 v_bitangent; out vec4 v_colour; out vec3 v_texcoord0; out vec2 v_texcoord1; @@ -25,7 +27,7 @@ uniform uint u_textureEnvColor[6]; uniform uint u_picaRegs[0x200 - 0x48]; // Helper so that the implementation of u_pica_regs can be changed later -uint readPicaReg(uint reg_addr) { return u_picaRegs[reg_addr - 0x48u]; } +uint readPicaReg(uint reg_addr) { return u_picaRegs[reg_addr - 0x48]; } vec4 abgr8888ToVec4(uint abgr) { const float scale = 1.0 / 255.0; @@ -33,6 +35,12 @@ vec4 abgr8888ToVec4(uint abgr) { return scale * vec4(float(abgr & 0xffu), float((abgr >> 8) & 0xffu), float((abgr >> 16) & 0xffu), float(abgr >> 24)); } +vec3 rotateVec3ByQuaternion(vec3 v, vec4 q) { + vec3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + (s * s - dot(u, u)) * v + 2.0 * s * cross(u, v); +} + // Convert an arbitrary-width floating point literal to an f32 float decodeFP(uint hex, uint E, uint M) { uint width = M + E + 1u; @@ -41,7 +49,7 @@ float decodeFP(uint hex, uint E, uint M) { uint mantissa = hex & ((1u << M) - 1u); uint sign = (hex >> (E + M)) << 31u; - if ((hex & ((1u << (width - 1u)) - 1u)) != 0u) { + if ((hex & ((1u << (width - 1u)) - 1u)) != 0) { if (exponent == (1u << E) - 1u) exponent = 255u; else @@ -65,24 +73,26 @@ void main() { v_texcoord2 = vec2(a_texcoord2.x, 1.0 - a_texcoord2.y); v_view = a_view; + v_normal = normalize(rotateVec3ByQuaternion(vec3(0.0, 0.0, 1.0), a_quaternion)); + v_tangent = normalize(rotateVec3ByQuaternion(vec3(1.0, 0.0, 0.0), a_quaternion)); + v_bitangent = normalize(rotateVec3ByQuaternion(vec3(0.0, 1.0, 0.0), a_quaternion)); + for (int i = 0; i < 6; i++) { v_textureEnvColor[i] = abgr8888ToVec4(u_textureEnvColor[i]); } - v_textureEnvBufferColor = abgr8888ToVec4(readPicaReg(0xFDu)); + v_textureEnvBufferColor = abgr8888ToVec4(readPicaReg(0xFD)); // Parse clipping plane registers // The plane registers describe a clipping plane in the form of Ax + By + Cz + D = 0 // With n = (A, B, C) being the normal vector and D being the origin point distance // Therefore, for the second clipping plane, we can just pass the dot product of the clip vector and the input coordinates to gl_ClipDistance[1] vec4 clipData = vec4( - decodeFP(readPicaReg(0x48u) & 0xffffffu, 7u, 16u), decodeFP(readPicaReg(0x49u) & 0xffffffu, 7u, 16u), - decodeFP(readPicaReg(0x4Au) & 0xffffffu, 7u, 16u), decodeFP(readPicaReg(0x4Bu) & 0xffffffu, 7u, 16u) + decodeFP(readPicaReg(0x48) & 0xffffffu, 7, 16), decodeFP(readPicaReg(0x49) & 0xffffffu, 7, 16), + decodeFP(readPicaReg(0x4A) & 0xffffffu, 7, 16), decodeFP(readPicaReg(0x4B) & 0xffffffu, 7, 16) ); // There's also another, always-on clipping plane based on vertex z gl_ClipDistance[0] = -a_coords.z; gl_ClipDistance[1] = dot(clipData, a_coords); - - v_quaternion = a_quaternion; } diff --git a/src/http_server.cpp b/src/http_server.cpp index c0114bc1..f595a25c 100644 --- a/src/http_server.cpp +++ b/src/http_server.cpp @@ -93,10 +93,8 @@ HttpServer::HttpServer(Emulator* emulator) {"Left", {HID::Keys::Left}}, {"Up", {HID::Keys::Up}}, {"Down", {HID::Keys::Down}}, - {"L", {HID::Keys::L}}, {"R", {HID::Keys::R}}, - {"ZL", {HID::Keys::ZL}}, - {"ZR", {HID::Keys::ZR}}, + {"L", {HID::Keys::L}}, {"X", {HID::Keys::X}}, {"Y", {HID::Keys::Y}}, }) { @@ -230,7 +228,7 @@ void HttpServer::startHttpServer() { } std::string HttpServer::status() { - HIDService& hid = emulator->getServiceManager().getHID(); + HIDService& hid = emulator->kernel.getServiceManager().getHID(); std::stringstream stringStream; stringStream << "Panda3DS\n"; @@ -273,7 +271,7 @@ void HttpServer::processActions() { return; } - HIDService& hid = emulator->getServiceManager().getHID(); + HIDService& hid = emulator->kernel.getServiceManager().getHID(); while (!actionQueue.empty()) { std::unique_ptr action = std::move(actionQueue.front()); diff --git a/src/hydra_core.cpp b/src/hydra_core.cpp deleted file mode 100644 index 2f80b8b0..00000000 --- a/src/hydra_core.cpp +++ /dev/null @@ -1,167 +0,0 @@ -#include -#include -#include -#include -#include - -#include "hydra_icon.hpp" -#include "swap.hpp" - -class HC_GLOBAL HydraCore final : public hydra::IBase, - public hydra::IOpenGlRendered, - public hydra::IFrontendDriven, - public hydra::IInput, - public hydra::ICheat { - HYDRA_CLASS - public: - HydraCore(); - - private: - // IBase - bool loadFile(const char* type, const char* path) override; - void reset() override; - hydra::Size getNativeSize() override; - void setOutputSize(hydra::Size size) override; - - // IOpenGlRendered - void resetContext() override; - void destroyContext() override; - void setFbo(unsigned handle) override; - void setGetProcAddress(void* function) override; - - // IFrontendDriven - void runFrame() override; - u16 getFps() override; - - // IInput - void setPollInputCallback(void (*callback)()) override; - void setCheckButtonCallback(s32 (*callback)(u32 player, hydra::ButtonType button)) override; - - // ICheat - u32 addCheat(const u8* data, u32 size) override; - void removeCheat(u32 id) override; - void enableCheat(u32 id) override; - void disableCheat(u32 id) override; - - std::unique_ptr emulator; - RendererGL* renderer; - void (*pollInputCallback)() = nullptr; - int32_t (*checkButtonCallback)(uint32_t player, hydra::ButtonType button) = nullptr; - void* getProcAddress = nullptr; -}; - -HydraCore::HydraCore() : emulator(new Emulator) { - if (emulator->getRendererType() != RendererType::OpenGL) { - throw std::runtime_error("HydraCore: Renderer is not OpenGL"); - } - renderer = static_cast(emulator->getRenderer()); -} - -bool HydraCore::loadFile(const char* type, const char* path) { - if (std::string(type) == "rom") { - return emulator->loadROM(path); - } else { - return false; - } -} - -void HydraCore::runFrame() { - renderer->resetStateManager(); - - pollInputCallback(); - HIDService& hid = emulator->getServiceManager().getHID(); - hid.setKey(HID::Keys::A, checkButtonCallback(0, hydra::ButtonType::A)); - hid.setKey(HID::Keys::B, checkButtonCallback(0, hydra::ButtonType::B)); - hid.setKey(HID::Keys::X, checkButtonCallback(0, hydra::ButtonType::X)); - hid.setKey(HID::Keys::Y, checkButtonCallback(0, hydra::ButtonType::Y)); - hid.setKey(HID::Keys::L, checkButtonCallback(0, hydra::ButtonType::L1)); - hid.setKey(HID::Keys::R, checkButtonCallback(0, hydra::ButtonType::R1)); - hid.setKey(HID::Keys::Start, checkButtonCallback(0, hydra::ButtonType::Start)); - hid.setKey(HID::Keys::Select, checkButtonCallback(0, hydra::ButtonType::Select)); - hid.setKey(HID::Keys::Up, checkButtonCallback(0, hydra::ButtonType::Keypad1Up)); - hid.setKey(HID::Keys::Down, checkButtonCallback(0, hydra::ButtonType::Keypad1Down)); - hid.setKey(HID::Keys::Left, checkButtonCallback(0, hydra::ButtonType::Keypad1Left)); - hid.setKey(HID::Keys::Right, checkButtonCallback(0, hydra::ButtonType::Keypad1Right)); - // TODO: N3DS buttons - - int x = !!checkButtonCallback(0, hydra::ButtonType::Analog1Right) - !!checkButtonCallback(0, hydra::ButtonType::Analog1Left); - int y = !!checkButtonCallback(0, hydra::ButtonType::Analog1Up) - !!checkButtonCallback(0, hydra::ButtonType::Analog1Down); - hid.setCirclepadX(x * 0x9C); - hid.setCirclepadY(y * 0x9C); - - u32 touch = checkButtonCallback(0, hydra::ButtonType::Touch); - if (touch != hydra::TOUCH_RELEASED) { - u16 x = touch >> 16; - u16 y = touch; - if (y >= 240 && y <= 480 && x >= 40 && x < 40 + 320) { - hid.setTouchScreenPress(x - 40, y - 240); - } else { - hid.releaseTouchScreen(); - } - } else { - hid.releaseTouchScreen(); - } - - hid.updateInputs(emulator->getTicks()); - emulator->runFrame(); -} - -u16 HydraCore::getFps() { return 60; } - -void HydraCore::reset() { emulator->reset(Emulator::ReloadOption::Reload); } -hydra::Size HydraCore::getNativeSize() { return {400, 480}; } - -// Size doesn't matter as the glBlitFramebuffer call is commented out for the core -void HydraCore::setOutputSize(hydra::Size size) {} - -void HydraCore::resetContext() { -#ifdef USING_GLES - if (!gladLoadGLES2Loader(reinterpret_cast(getProcAddress))) { - Helpers::panic("OpenGL ES init failed"); - } - emulator->getRenderer()->setupGLES(); -#else - if (!gladLoadGLLoader(reinterpret_cast(getProcAddress))) { - Helpers::panic("OpenGL init failed"); - } -#endif - // SDL_Window is not used, so we pass nullptr - emulator->initGraphicsContext(nullptr); -} - -void HydraCore::destroyContext() { emulator->deinitGraphicsContext(); } -void HydraCore::setFbo(unsigned handle) { renderer->setFBO(handle); } -void HydraCore::setGetProcAddress(void* function) { getProcAddress = function; } - -void HydraCore::setPollInputCallback(void (*callback)()) { pollInputCallback = callback; } -void HydraCore::setCheckButtonCallback(s32 (*callback)(u32 player, hydra::ButtonType button)) { checkButtonCallback = callback; } - -u32 HydraCore::addCheat(const u8* data, u32 size) { - return emulator->getCheats().addCheat(data, size); -}; - -void HydraCore::removeCheat(u32 id) { emulator->getCheats().removeCheat(id); } -void HydraCore::enableCheat(u32 id) { emulator->getCheats().enableCheat(id); } -void HydraCore::disableCheat(u32 id) { emulator->getCheats().disableCheat(id); } - -HC_API hydra::IBase* createEmulator() { return new HydraCore(); } -HC_API void destroyEmulator(hydra::IBase* emulator) { delete emulator; } - -HC_API const char* getInfo(hydra::InfoType type) { - switch (type) { - case hydra::InfoType::CoreName: return "Panda3DS"; - case hydra::InfoType::SystemName: return "Nintendo 3DS"; - case hydra::InfoType::Description: return "HLE 3DS emulator. There's a little Alber in your computer and he runs Nintendo 3DS games."; - case hydra::InfoType::Author: return "wheremyfoodat (Peach)"; - case hydra::InfoType::Version: return PANDA3DS_VERSION; - case hydra::InfoType::License: return "GPLv3"; - case hydra::InfoType::Website: return "https://panda3ds.com/"; - case hydra::InfoType::Extensions: return "3ds,cci,cxi,app,3dsx,elf,axf"; - case hydra::InfoType::Firmware: return ""; - case hydra::InfoType::IconWidth: return HYDRA_ICON_WIDTH; - case hydra::InfoType::IconHeight: return HYDRA_ICON_HEIGHT; - case hydra::InfoType::IconData: return (const char*)&HYDRA_ICON_DATA[0]; - - default: return nullptr; - } -} diff --git a/src/io_file.cpp b/src/io_file.cpp index 3bfac013..1f794284 100644 --- a/src/io_file.cpp +++ b/src/io_file.cpp @@ -21,10 +21,6 @@ #include // For ftruncate #endif -#ifdef __ANDROID__ -#include "android_utils.hpp" -#endif - IOFile::IOFile(const std::filesystem::path& path, const char* permissions) : handle(nullptr) { open(path, permissions); } bool IOFile::open(const std::filesystem::path& path, const char* permissions) { @@ -38,19 +34,8 @@ bool IOFile::open(const char* filename, const char* permissions) { if (isOpen()) { close(); } - #ifdef __ANDROID__ - std::string path(filename); - - // Check if this is a URI directory, which will need special handling due to SAF - if (path.find("://") != std::string::npos ) { - handle = fdopen(AndroidUtils::openDocument(filename, permissions), permissions); - } else { - handle = std::fopen(filename, permissions); - } - #else - handle = std::fopen(filename, permissions); - #endif + handle = std::fopen(filename, permissions); return isOpen(); } diff --git a/src/ios_driver.mm b/src/ios_driver.mm deleted file mode 100644 index 87bd057a..00000000 --- a/src/ios_driver.mm +++ /dev/null @@ -1,40 +0,0 @@ -#import - -extern "C" { -#include "ios_driver.h" -} - -// Apple's Foundation headers define some macros globablly that create issues with our own code, so remove the definitions -#undef ABS -#undef NO - -#include -#include "emulator.hpp" - -// The Objective-C++ bridge functions must be exported without name mangling in order for the SwiftUI frontend to be able to call them -#define IOS_EXPORT extern "C" __attribute__((visibility("default"))) - -std::unique_ptr emulator = nullptr; - -IOS_EXPORT void iosCreateEmulator() { - printf("Creating emulator\n"); - - emulator = std::make_unique(); - emulator->initGraphicsContext(nullptr); -} - -IOS_EXPORT void iosRunFrame(CAMetalLayer* layer) { - void* layerBridged = (__bridge void*)layer; - - emulator->getRenderer()->setMTKLayer(layerBridged); - emulator->runFrame(); -} - -IOS_EXPORT void iosLoadROM(NSString* pathNS) { - auto path = std::filesystem::path([pathNS UTF8String]); - emulator->loadROM(path); -} - -IOS_EXPORT void iosSetOutputSize(uint32_t width, uint32_t height) { - emulator->setOutputSize(width, height); -} \ No newline at end of file diff --git a/src/jni_driver.cpp b/src/jni_driver.cpp deleted file mode 100644 index 7274c9c4..00000000 --- a/src/jni_driver.cpp +++ /dev/null @@ -1,163 +0,0 @@ -#include -#include -#include - -#include - -#include "emulator.hpp" -#include "renderer_gl/renderer_gl.hpp" -#include "services/hid.hpp" -#include "android_utils.hpp" -#include "sdl_sensors.hpp" - -static std::unique_ptr emulator = nullptr; -static HIDService* hidService = nullptr; -static RendererGL* renderer = nullptr; -static bool romLoaded = false; -static JavaVM* jvm = nullptr; - -jclass alberClass; -jmethodID alberClassOpenDocument; - -#define AlberFunction(type, name) JNIEXPORT type JNICALL Java_com_panda3ds_pandroid_AlberDriver_##name - -void throwException(JNIEnv* env, const char* message) { - jclass exceptionClass = env->FindClass("java/lang/RuntimeException"); - env->ThrowNew(exceptionClass, message); -} - -JNIEnv* jniEnv() { - JNIEnv* env; - auto status = jvm->GetEnv((void**)&env, JNI_VERSION_1_6); - if (status == JNI_EDETACHED) { - jvm->AttachCurrentThread(&env, nullptr); - } else if (status != JNI_OK) { - throw std::runtime_error("Failed to obtain JNIEnv from JVM!!"); - } - - return env; -} - -extern "C" { - -#define MAKE_SETTING(functionName, type, settingName) \ -AlberFunction(void, functionName) (JNIEnv* env, jobject obj, type value) { emulator->getConfig().settingName = value; } - -MAKE_SETTING(setShaderJitEnabled, jboolean, shaderJitEnabled) -MAKE_SETTING(setAccurateShaderMulEnable, jboolean, accurateShaderMul) - -#undef MAKE_SETTING - -AlberFunction(void, setAudioEnabled)(JNIEnv* env, jobject obj, jboolean value) { - emulator->getConfig().audioEnabled = value; - emulator->setAudioEnabled(value); -} - -AlberFunction(void, Setup)(JNIEnv* env, jobject obj) { - env->GetJavaVM(&jvm); - - alberClass = (jclass)env->NewGlobalRef((jclass)env->FindClass("com/panda3ds/pandroid/AlberDriver")); - alberClassOpenDocument = env->GetStaticMethodID(alberClass, "openDocument", "(Ljava/lang/String;Ljava/lang/String;)I"); -} - -AlberFunction(void, Pause)(JNIEnv* env, jobject obj) { emulator->pause(); } -AlberFunction(void, Resume)(JNIEnv* env, jobject obj) { emulator->resume(); } - -AlberFunction(void, Initialize)(JNIEnv* env, jobject obj) { - emulator = std::make_unique(); - - if (emulator->getRendererType() != RendererType::OpenGL) { - return throwException(env, "Renderer type is not OpenGL"); - } - - renderer = static_cast(emulator->getRenderer()); - hidService = &emulator->getServiceManager().getHID(); - - if (!gladLoadGLES2Loader(reinterpret_cast(eglGetProcAddress))) { - return throwException(env, "Failed to load OpenGL ES 2.0"); - } - - __android_log_print(ANDROID_LOG_INFO, "AlberDriver", "OpenGL ES %d.%d", GLVersion.major, GLVersion.minor); - emulator->getRenderer()->setupGLES(); - emulator->initGraphicsContext(nullptr); -} - -AlberFunction(void, RunFrame)(JNIEnv* env, jobject obj, jint fbo) { - renderer->setFBO(fbo); - // TODO: don't reset entire state manager - renderer->resetStateManager(); - emulator->runFrame(); - - hidService->updateInputs(emulator->getTicks()); -} - -AlberFunction(void, Finalize)(JNIEnv* env, jobject obj) { - emulator = nullptr; - hidService = nullptr; - renderer = nullptr; - romLoaded = false; -} - -AlberFunction(jboolean, HasRomLoaded)(JNIEnv* env, jobject obj) { return romLoaded; } - -AlberFunction(jboolean, LoadRom)(JNIEnv* env, jobject obj, jstring path) { - const char* pathStr = env->GetStringUTFChars(path, nullptr); - romLoaded = emulator->loadROM(pathStr); - env->ReleaseStringUTFChars(path, pathStr); - - return romLoaded; -} - -AlberFunction(void, LoadLuaScript)(JNIEnv* env, jobject obj, jstring script) { - const char* scriptStr = env->GetStringUTFChars(script, nullptr); - emulator->getLua().loadString(scriptStr); - env->ReleaseStringUTFChars(script, scriptStr); -} - -AlberFunction(void, TouchScreenDown)(JNIEnv* env, jobject obj, jint x, jint y) { hidService->setTouchScreenPress((u16)x, (u16)y); } -AlberFunction(void, TouchScreenUp)(JNIEnv* env, jobject obj) { hidService->releaseTouchScreen(); } -AlberFunction(void, KeyUp)(JNIEnv* env, jobject obj, jint keyCode) { hidService->releaseKey((u32)keyCode); } -AlberFunction(void, KeyDown)(JNIEnv* env, jobject obj, jint keyCode) { hidService->pressKey((u32)keyCode); } - -AlberFunction(void, SetGyro)(JNIEnv* env, jobject obj, jfloat roll, jfloat pitch, jfloat yaw) { - auto rotation = Sensors::SDL::convertRotation({ float(roll), float(pitch), float(yaw) }); - hidService->setPitch(s16(rotation.x)); - hidService->setRoll(s16(rotation.y)); - hidService->setYaw(s16(rotation.z)); -} - -AlberFunction(void, SetAccel)(JNIEnv* env, jobject obj, jfloat rawX, jfloat rawY, jfloat rawZ) { - float data[3] = { float(rawX), float(rawY), float(rawZ) }; - auto accel = Sensors::SDL::convertAcceleration(data); - hidService->setAccel(accel.x, accel.y, accel.z); -} - -AlberFunction(void, SetCirclepadAxis)(JNIEnv* env, jobject obj, jint x, jint y) { - hidService->setCirclepadX((s16)x); - hidService->setCirclepadY((s16)y); -} - -AlberFunction(jbyteArray, GetSmdh)(JNIEnv* env, jobject obj) { - std::span smdh = emulator->getSMDH(); - - jbyteArray result = env->NewByteArray(smdh.size()); - env->SetByteArrayRegion(result, 0, smdh.size(), (jbyte*)smdh.data()); - - return result; -} -} - -#undef AlberFunction - -int AndroidUtils::openDocument(const char* path, const char* perms) { - auto env = jniEnv(); - - jstring uri = env->NewStringUTF(path); - jstring jmode = env->NewStringUTF(perms); - jint result = env->CallStaticIntMethod(alberClass, alberClassOpenDocument, uri, jmode); - - env->DeleteLocalRef(uri); - env->DeleteLocalRef(jmode); - - return (int)result; -} diff --git a/src/libretro_core.cpp b/src/libretro_core.cpp deleted file mode 100644 index b44687b2..00000000 --- a/src/libretro_core.cpp +++ /dev/null @@ -1,416 +0,0 @@ -#include - -#include -#include - -#include "emulator.hpp" -#include "renderer_gl/renderer_gl.hpp" -#include "version.hpp" - -static retro_environment_t envCallback; -static retro_video_refresh_t videoCallback; -static retro_audio_sample_batch_t audioBatchCallback; -static retro_input_poll_t inputPollCallback; -static retro_input_state_t inputStateCallback; - -static retro_hw_render_callback hwRender; -static std::filesystem::path savePath; - -static bool screenTouched = false; -static bool usingGLES = false; - -static std::unique_ptr emulator; -static RendererGL* renderer; - -std::filesystem::path Emulator::getConfigPath() { return std::filesystem::path(savePath / "config.toml"); } -std::filesystem::path Emulator::getAppDataRoot() { return std::filesystem::path(savePath / "Emulator Files"); } - -static void* getGLProcAddress(const char* name) { return (void*)hwRender.get_proc_address(name); } -static void videoDestroyContext() { emulator->deinitGraphicsContext(); } - -static void videoResetContext() { - if (usingGLES) { - if (!gladLoadGLES2Loader(reinterpret_cast(getGLProcAddress))) { - Helpers::panic("OpenGL ES init failed"); - } - - emulator->getRenderer()->setupGLES(); - } - - else { - if (!gladLoadGLLoader(reinterpret_cast(getGLProcAddress))) { - Helpers::panic("OpenGL init failed"); - } - } - - emulator->initGraphicsContext(nullptr); -} - -static bool setHWRender(retro_hw_context_type type) { - hwRender.context_type = type; - hwRender.context_reset = videoResetContext; - hwRender.context_destroy = videoDestroyContext; - hwRender.bottom_left_origin = true; - - switch (type) { - case RETRO_HW_CONTEXT_OPENGL_CORE: - hwRender.version_major = 4; - hwRender.version_minor = 1; - - if (envCallback(RETRO_ENVIRONMENT_SET_HW_RENDER, &hwRender)) { - return true; - } - break; - case RETRO_HW_CONTEXT_OPENGLES3: - case RETRO_HW_CONTEXT_OPENGL: - hwRender.version_major = 3; - hwRender.version_minor = 1; - - if (envCallback(RETRO_ENVIRONMENT_SET_HW_RENDER, &hwRender)) { - usingGLES = true; - return true; - } - break; - default: break; - } - - return false; -} - -static void videoInit() { - retro_hw_context_type preferred = RETRO_HW_CONTEXT_NONE; - envCallback(RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER, &preferred); - - if (preferred && setHWRender(preferred)) return; - if (setHWRender(RETRO_HW_CONTEXT_OPENGL_CORE)) return; - if (setHWRender(RETRO_HW_CONTEXT_OPENGL)) return; - if (setHWRender(RETRO_HW_CONTEXT_OPENGLES3)) return; - - hwRender.context_type = RETRO_HW_CONTEXT_NONE; -} - -static bool getButtonState(uint id) { return inputStateCallback(0, RETRO_DEVICE_JOYPAD, 0, id); } -static float getAxisState(uint index, uint id) { return inputStateCallback(0, RETRO_DEVICE_ANALOG, index, id); } - -static void inputInit() { - static const retro_controller_description controllers[] = { - {"Nintendo 3DS", RETRO_DEVICE_JOYPAD}, - {NULL, 0}, - }; - - static const retro_controller_info ports[] = { - {controllers, 1}, - {NULL, 0}, - }; - - envCallback(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); - - retro_input_descriptor desc[] = { - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "X"}, - {0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Y"}, - {0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Circle Pad X"}, - {0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Circle Pad Y"}, - {0}, - }; - - envCallback(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, &desc); -} - -static std::string fetchVariable(std::string key, std::string def) { - retro_variable var = {nullptr}; - var.key = key.c_str(); - - if (!envCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value == nullptr) { - Helpers::warn("Fetching variable %s failed.", key.c_str()); - return def; - } - - return std::string(var.value); -} - -static int fetchVariableInt(std::string key, int def) { - std::string value = fetchVariable(key, std::to_string(def)); - - if (!value.empty() && std::isdigit(value[0])) { - return std::stoi(value); - } - - return 0; -} - -static bool fetchVariableBool(std::string key, bool def) { return fetchVariable(key, def ? "enabled" : "disabled") == "enabled"; } -static int fetchVariableRange(std::string key, int min, int max) { return std::clamp(fetchVariableInt(key, min), min, max); } - -static void configInit() { - static const retro_variable values[] = { - {"panda3ds_use_shader_jit", EmulatorConfig::shaderJitDefault ? "Enable shader JIT; enabled|disabled" : "Enable shader JIT; disabled|enabled"}, - {"panda3ds_accelerate_shaders", - EmulatorConfig::accelerateShadersDefault ? "Run 3DS shaders on the GPU; enabled|disabled" : "Run 3DS shaders on the GPU; disabled|enabled"}, - {"panda3ds_accurate_shader_mul", "Enable accurate shader multiplication; disabled|enabled"}, - {"panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault ? "Use ubershaders (No stutter, maybe slower); enabled|disabled" - : "Use ubershaders (No stutter, maybe slower); disabled|enabled"}, - {"panda3ds_use_vsync", "Enable VSync; enabled|disabled"}, - {"panda3ds_hash_textures", EmulatorConfig::hashTexturesDefault ? "Hash textures (Better graphics, maybe slower); enabled|disabled" - : "Hash textures (Better graphics, maybe slower); disabled|enabled"}, - - {"panda3ds_system_language", "System language; En|Fr|Es|De|It|Pt|Nl|Ru|Ja|Zh|Ko|Tw"}, - {"panda3ds_dsp_emulation", "DSP emulation; HLE|LLE|Null"}, - {"panda3ds_use_audio", EmulatorConfig::audioEnabledDefault ? "Enable audio; enabled|disabled" : "Enable audio; disabled|enabled"}, - {"panda3ds_audio_volume", "Audio volume; 100|0|10|20|40|60|80|90|100|120|140|150|180|200"}, - {"panda3ds_mute_audio", "Mute audio; disabled|enabled"}, - {"panda3ds_enable_aac", "Enable AAC audio; enabled|disabled"}, - - {"panda3ds_ubershader_lighting_override", "Force shadergen when rendering lights; enabled|disabled"}, - {"panda3ds_ubershader_lighting_override_threshold", "Light threshold for forcing shadergen; 1|2|3|4|5|6|7|8"}, - {"panda3ds_use_virtual_sd", "Enable virtual SD card; enabled|disabled"}, - {"panda3ds_write_protect_virtual_sd", "Write protect virtual SD card; disabled|enabled"}, - {"panda3ds_battery_level", "Battery percentage; 5|10|20|30|50|70|90|100"}, - {"panda3ds_use_charger", "Charger plugged; enabled|disabled"}, - {nullptr, nullptr}, - }; - - envCallback(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)values); -} - -static void configUpdate() { - EmulatorConfig& config = emulator->getConfig(); - - config.rendererType = RendererType::OpenGL; - config.vsyncEnabled = fetchVariableBool("panda3ds_use_vsync", true); - config.shaderJitEnabled = fetchVariableBool("panda3ds_use_shader_jit", EmulatorConfig::shaderJitDefault); - config.chargerPlugged = fetchVariableBool("panda3ds_use_charger", true); - config.batteryPercentage = fetchVariableRange("panda3ds_battery_level", 5, 100); - config.systemLanguage = EmulatorConfig::languageCodeFromString(fetchVariable("panda3ds_system_language", "en")); - - config.dspType = Audio::DSPCore::typeFromString(fetchVariable("panda3ds_dsp_emulation", "null")); - config.audioEnabled = fetchVariableBool("panda3ds_use_audio", false); - config.aacEnabled = fetchVariableBool("panda3ds_enable_aac", true); - config.audioDeviceConfig.muteAudio = fetchVariableBool("panda3ds_mute_audio", false); - config.audioDeviceConfig.volumeRaw = float(fetchVariableRange("panda3ds_audio_volume", 0, 200)) / 100.0f; - - config.sdCardInserted = fetchVariableBool("panda3ds_use_virtual_sd", true); - config.sdWriteProtected = fetchVariableBool("panda3ds_write_protect_virtual_sd", false); - config.accurateShaderMul = fetchVariableBool("panda3ds_accurate_shader_mul", false); - config.useUbershaders = fetchVariableBool("panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault); - config.accelerateShaders = fetchVariableBool("panda3ds_accelerate_shaders", EmulatorConfig::accelerateShadersDefault); - config.hashTextures = fetchVariableBool("panda3ds_hash_textures", EmulatorConfig::hashTexturesDefault); - - config.forceShadergenForLights = fetchVariableBool("panda3ds_ubershader_lighting_override", true); - config.lightShadergenThreshold = fetchVariableRange("panda3ds_ubershader_lighting_override_threshold", 1, 8); - config.discordRpcEnabled = false; - - // Handle any settings that might need the emulator core to be notified when they're changed, and save the config. - emulator->setAudioEnabled(config.audioEnabled); - config.save(); -} - -static void configCheckVariables() { - bool updated = false; - envCallback(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated); - - if (updated) { - configUpdate(); - } -} - -void retro_get_system_info(retro_system_info* info) { - info->need_fullpath = true; - info->valid_extensions = "3ds|3dsx|elf|axf|cci|cxi|app"; - info->library_version = PANDA3DS_VERSION; - info->library_name = "Panda3DS"; - info->block_extract = false; -} - -void retro_get_system_av_info(retro_system_av_info* info) { - info->geometry.base_width = emulator->width; - info->geometry.base_height = emulator->height; - - info->geometry.max_width = info->geometry.base_width; - info->geometry.max_height = info->geometry.base_height; - - info->geometry.aspect_ratio = float(5.0 / 6.0); - info->timing.fps = 60.0; - info->timing.sample_rate = 32768; -} - -void retro_set_environment(retro_environment_t cb) { envCallback = cb; } -void retro_set_video_refresh(retro_video_refresh_t cb) { videoCallback = cb; } -void retro_set_audio_sample_batch(retro_audio_sample_batch_t cb) { audioBatchCallback = cb; } - -void retro_set_audio_sample(retro_audio_sample_t cb) {} -void retro_set_input_poll(retro_input_poll_t cb) { inputPollCallback = cb; } -void retro_set_input_state(retro_input_state_t cb) { inputStateCallback = cb; } - -void retro_init() { - enum retro_pixel_format xrgb888 = RETRO_PIXEL_FORMAT_XRGB8888; - envCallback(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &xrgb888); - - char* saveDir = nullptr; - - if (!envCallback(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &saveDir) || saveDir == nullptr) { - Helpers::warn("No save directory provided by LibRetro."); - savePath = std::filesystem::current_path(); - } else { - savePath = std::filesystem::path(saveDir); - } - - emulator = std::make_unique(); -} - -void retro_deinit() { emulator = nullptr; } - -bool retro_load_game(const retro_game_info* game) { - configInit(); - configUpdate(); - - if (emulator->getRendererType() != RendererType::OpenGL) { - Helpers::panic("Libretro: Renderer is not OpenGL"); - } - - renderer = static_cast(emulator->getRenderer()); - emulator->setOutputSize(emulator->width, emulator->height); - - inputInit(); - videoInit(); - - return emulator->loadROM(game->path); -} - -bool retro_load_game_special(uint type, const retro_game_info* info, usize num) { return false; } - -void retro_unload_game() { - renderer->setFBO(0); - renderer = nullptr; -} - -void retro_reset() { emulator->reset(Emulator::ReloadOption::Reload); } -void retro_cheat_reset() { emulator->getCheats().reset(); } - -void retro_run() { - configCheckVariables(); - - renderer->setFBO(hwRender.get_current_framebuffer()); - renderer->resetStateManager(); - - inputPollCallback(); - - HIDService& hid = emulator->getServiceManager().getHID(); - - hid.setKey(HID::Keys::A, getButtonState(RETRO_DEVICE_ID_JOYPAD_A)); - hid.setKey(HID::Keys::B, getButtonState(RETRO_DEVICE_ID_JOYPAD_B)); - hid.setKey(HID::Keys::X, getButtonState(RETRO_DEVICE_ID_JOYPAD_X)); - hid.setKey(HID::Keys::Y, getButtonState(RETRO_DEVICE_ID_JOYPAD_Y)); - hid.setKey(HID::Keys::L, getButtonState(RETRO_DEVICE_ID_JOYPAD_L)); - hid.setKey(HID::Keys::R, getButtonState(RETRO_DEVICE_ID_JOYPAD_R)); - hid.setKey(HID::Keys::ZL, getButtonState(RETRO_DEVICE_ID_JOYPAD_L2)); - hid.setKey(HID::Keys::ZR, getButtonState(RETRO_DEVICE_ID_JOYPAD_R2)); - - hid.setKey(HID::Keys::Start, getButtonState(RETRO_DEVICE_ID_JOYPAD_START)); - hid.setKey(HID::Keys::Select, getButtonState(RETRO_DEVICE_ID_JOYPAD_SELECT)); - hid.setKey(HID::Keys::Up, getButtonState(RETRO_DEVICE_ID_JOYPAD_UP)); - hid.setKey(HID::Keys::Down, getButtonState(RETRO_DEVICE_ID_JOYPAD_DOWN)); - hid.setKey(HID::Keys::Left, getButtonState(RETRO_DEVICE_ID_JOYPAD_LEFT)); - hid.setKey(HID::Keys::Right, getButtonState(RETRO_DEVICE_ID_JOYPAD_RIGHT)); - // TODO: C-Stick - - // Get analog values for the left analog stick (Right analog stick is N3DS-only and unimplemented) - float xLeft = getAxisState(RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X); - float yLeft = getAxisState(RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y); - - hid.setCirclepadX((xLeft / +32767) * 0x9C); - hid.setCirclepadY((yLeft / -32767) * 0x9C); - - bool touchScreen = false; - - const int posX = inputStateCallback(0, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_X); - const int posY = inputStateCallback(0, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_Y); - - const int newX = static_cast((posX + 0x7fff) / (float)(0x7fff * 2) * emulator->width); - const int newY = static_cast((posY + 0x7fff) / (float)(0x7fff * 2) * emulator->height); - - const int offsetX = 40; - const int offsetY = emulator->height / 2; - - const bool inScreenX = newX >= offsetX && newX <= emulator->width - offsetX; - const bool inScreenY = newY >= offsetY && newY <= emulator->height; - - if (inScreenX && inScreenY) { - touchScreen |= inputStateCallback(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); - touchScreen |= inputStateCallback(0, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_PRESSED); - } - - if (touchScreen) { - u16 x = static_cast(newX - offsetX); - u16 y = static_cast(newY - offsetY); - - hid.setTouchScreenPress(x, y); - screenTouched = true; - } else if (screenTouched) { - hid.releaseTouchScreen(); - screenTouched = false; - } - - hid.updateInputs(emulator->getTicks()); - emulator->runFrame(); - - videoCallback(RETRO_HW_FRAME_BUFFER_VALID, emulator->width, emulator->height, 0); - // Call audio batch callback - emulator->getAudioDevice().renderBatch(audioBatchCallback); -} - -void retro_set_controller_port_device(uint port, uint device) {} - -usize retro_serialize_size() { - usize size = 0; - return size; -} - -bool retro_serialize(void* data, usize size) { return false; } -bool retro_unserialize(const void* data, usize size) { return false; } - -uint retro_get_region() { return RETRO_REGION_NTSC; } -uint retro_api_version() { return RETRO_API_VERSION; } - -usize retro_get_memory_size(uint id) { - if (id == RETRO_MEMORY_SYSTEM_RAM) { - return Memory::FCRAM_SIZE; - } - - return 0; -} - -void* retro_get_memory_data(uint id) { - if (id == RETRO_MEMORY_SYSTEM_RAM) { - return emulator->getMemory().getFCRAM(); - } - - return nullptr; -} - -void retro_cheat_set(uint index, bool enabled, const char* code) { - std::string cheatCode = std::regex_replace(code, std::regex("[^0-9a-fA-F]"), ""); - std::vector bytes; - - for (usize i = 0; i < cheatCode.size(); i += 2) { - std::string hex = cheatCode.substr(i, 2); - bytes.push_back((u8)std::stoul(hex, nullptr, 16)); - } - - u32 id = emulator->getCheats().addCheat(bytes.data(), bytes.size()); - - if (enabled) { - emulator->getCheats().enableCheat(id); - } else { - emulator->getCheats().disableCheat(id); - } -} \ No newline at end of file diff --git a/src/lua.cpp b/src/lua.cpp deleted file mode 100644 index 8d3f7980..00000000 --- a/src/lua.cpp +++ /dev/null @@ -1,464 +0,0 @@ -#ifdef PANDA3DS_ENABLE_LUA -#include - -#include - -#include "capstone.hpp" -#include "emulator.hpp" -#include "lua_manager.hpp" - -#ifndef __ANDROID__ -extern "C" { -#include "luv.h" -} -#endif - -void LuaManager::initialize() { - L = luaL_newstate(); // Open Lua - - if (!L) { - printf("Lua initialization failed, continuing without Lua"); - initialized = false; - return; - } - luaL_openlibs(L); - -#ifndef __ANDROID__ - lua_pushstring(L, "luv"); - luaopen_luv(L); - lua_settable(L, LUA_GLOBALSINDEX); -#endif - - initializeThunks(); - initialized = true; - haveScript = false; -} - -void LuaManager::close() { - if (initialized) { - lua_close(L); - initialized = false; - haveScript = false; - L = nullptr; - } -} - -void LuaManager::loadFile(const char* path) { - // Initialize Lua if it has not been initialized - if (!initialized) { - initialize(); - } - - // If init failed, don't execute - if (!initialized) { - printf("Lua initialization failed, file won't run\n"); - haveScript = false; - - return; - } - - int status = luaL_loadfile(L, path); // load Lua script - int ret = lua_pcall(L, 0, 0, 0); // tell Lua to run the script - - if (ret != 0) { - haveScript = false; - fprintf(stderr, "%s\n", lua_tostring(L, -1)); // tell us what mistake we made - } else { - haveScript = true; - } -} - -void LuaManager::loadString(const std::string& code) { - // Initialize Lua if it has not been initialized - if (!initialized) { - initialize(); - } - - // If init failed, don't execute - if (!initialized) { - printf("Lua initialization failed, file won't run\n"); - haveScript = false; - - return; - } - - int status = luaL_loadstring(L, code.c_str()); // load Lua script - int ret = lua_pcall(L, 0, 0, 0); // tell Lua to run the script - - if (ret != 0) { - haveScript = false; - fprintf(stderr, "%s\n", lua_tostring(L, -1)); // tell us what mistake we made - } else { - haveScript = true; - } -} - -void LuaManager::signalEventInternal(LuaEvent e) { - lua_getglobal(L, "eventHandler"); // We want to call the event handler - lua_pushinteger(L, static_cast(e)); // Push event type - - // Call the function with 1 argument and 0 outputs, without an error handler - lua_pcall(L, 1, 0, 0); -} - -// Calls the callback passed to the addServiceIntercept function when a service call is intercepted -// It passes the service name, the function header, and a pointer to the call's TLS buffer as parameters -// The callback is expected to return a bool, indicating whether the C++ code should proceed to handle the service call -// or if the Lua code handles it entirely. -// If the bool is true, the Lua code handles the service call entirely and the C++ side doesn't do anything extra -// Otherwise, the C++ side calls its service call handling code as usual. -bool LuaManager::signalInterceptedService(const std::string& service, u32 function, u32 messagePointer, int callbackRef) { - lua_rawgeti(L, LUA_REGISTRYINDEX, callbackRef); - lua_pushstring(L, service.c_str()); // Push service name - lua_pushinteger(L, function); // Push function header - lua_pushinteger(L, messagePointer); // Push pointer to TLS buffer - - // Call the function with 3 arguments and 1 output, without an error handler - const int status = lua_pcall(L, 3, 1, 0); - - if (status != LUA_OK) { - const char* err = lua_tostring(L, -1); - fprintf(stderr, "Lua: Error in interceptService: %s\n", err); - lua_pop(L, 1); // Pop error message from stack - return false; // Have the C++ handle the service call - } - - // Return the value interceptService returned - const bool ret = lua_toboolean(L, -1); - lua_pop(L, 1); - return ret; -} - -// Removes a reference from the callback value in the registry -// Prevents memory leaks, otherwise the function object would stay forever -void LuaManager::removeInterceptedService(const std::string& service, u32 function, int callbackRef) { - luaL_unref(L, LUA_REGISTRYINDEX, callbackRef); -} - -void LuaManager::reset() { - // Reset scripts - haveScript = false; -} - -// Initialize C++ thunks for Lua code to call here -// All code beyond this point is terrible and full of global state, don't judge - -Emulator* LuaManager::g_emulator = nullptr; - -#define MAKE_MEMORY_FUNCTIONS(size) \ - static int read##size##Thunk(lua_State* L) { \ - const u32 vaddr = (u32)lua_tointeger(L, 1); \ - lua_pushinteger(L, LuaManager::g_emulator->getMemory().read##size(vaddr)); \ - return 1; \ - } \ - static int write##size##Thunk(lua_State* L) { \ - const u32 vaddr = (u32)lua_tointeger(L, 1); \ - const u##size value = (u##size)lua_tointeger(L, 2); \ - LuaManager::g_emulator->getMemory().write##size(vaddr, value); \ - return 0; \ - } - -MAKE_MEMORY_FUNCTIONS(8) -MAKE_MEMORY_FUNCTIONS(16) -MAKE_MEMORY_FUNCTIONS(32) -MAKE_MEMORY_FUNCTIONS(64) -#undef MAKE_MEMORY_FUNCTIONS - -static int readFloatThunk(lua_State* L) { - const u32 vaddr = (u32)lua_tointeger(L, 1); - lua_pushnumber(L, (lua_Number)Helpers::bit_cast(LuaManager::g_emulator->getMemory().read32(vaddr))); - return 1; -} - -static int writeFloatThunk(lua_State* L) { - const u32 vaddr = (u32)lua_tointeger(L, 1); - const float value = (float)lua_tonumber(L, 2); - LuaManager::g_emulator->getMemory().write32(vaddr, Helpers::bit_cast(value)); - return 0; -} - -static int readDoubleThunk(lua_State* L) { - const u32 vaddr = (u32)lua_tointeger(L, 1); - lua_pushnumber(L, (lua_Number)Helpers::bit_cast(LuaManager::g_emulator->getMemory().read64(vaddr))); - return 1; -} - -static int writeDoubleThunk(lua_State* L) { - const u32 vaddr = (u32)lua_tointeger(L, 1); - const double value = (double)lua_tonumber(L, 2); - LuaManager::g_emulator->getMemory().write64(vaddr, Helpers::bit_cast(value)); - return 0; -} - -static int getAppIDThunk(lua_State* L) { - std::optional id = LuaManager::g_emulator->getMemory().getProgramID(); - - // If the app has an ID, return true + its ID - // Otherwise return false and 0 as the ID - if (id.has_value()) { - lua_pushboolean(L, 1); // Return true - lua_pushnumber(L, u32(*id)); // Return bottom 32 bits - lua_pushnumber(L, u32(*id >> 32)); // Return top 32 bits - } else { - lua_pushboolean(L, 0); // Return false - // Return no ID - lua_pushnumber(L, 0); - lua_pushnumber(L, 0); - } - - return 3; -} - -static int pauseThunk(lua_State* L) { - LuaManager::g_emulator->pause(); - return 0; -} - -static int resumeThunk(lua_State* L) { - LuaManager::g_emulator->resume(); - return 0; -} - -static int resetThunk(lua_State* L) { - LuaManager::g_emulator->reset(Emulator::ReloadOption::Reload); - return 0; -} - -static int loadROMThunk(lua_State* L) { - // Path argument is invalid, report that loading failed and exit - if (lua_type(L, 1) != LUA_TSTRING) { - lua_pushboolean(L, 0); - lua_error(L); - return 1; - } - - usize pathLength; - const char* const str = lua_tolstring(L, 1, &pathLength); - - const auto path = std::filesystem::path(std::string(str, pathLength)); - // Load ROM and reply if it succeeded or not - lua_pushboolean(L, LuaManager::g_emulator->loadROM(path) ? 1 : 0); - return 1; -} - -static int addServiceInterceptThunk(lua_State* L) { - // Service name argument is invalid, report that loading failed and exit - if (lua_type(L, 1) != LUA_TSTRING) { - return luaL_error(L, "Argument 1 (service name) is not a string"); - } - - if (lua_type(L, 2) != LUA_TNUMBER) { - return luaL_error(L, "Argument 2 (function id) is not a number"); - } - - // Callback is not a function object directly, fail and exit - // Objects with a __call metamethod are not allowed (tables, userdata) - // Good: addServiceIntercept(serviceName, func, myLuaFunction) - // Good: addServiceIntercept(serviceName, func, function (service, func, buffer) ... end) - // Bad: addServiceIntercept(serviceName, func, obj:method) - if (lua_type(L, 3) != LUA_TFUNCTION) { - return luaL_error(L, "Argument 3 (callback) is not a function"); - } - - // Get the name of the service we want to intercept, as well as the header of the function to intercept - usize nameLength; - const char* const str = lua_tolstring(L, 1, &nameLength); - const u32 function = (u32)lua_tointeger(L, 2); - const auto serviceName = std::string(str, nameLength); - - // Stores a reference to the callback function object in the registry for later use - // Must be freed with lua_unref later, in order to avoid memory leaks - lua_pushvalue(L, 3); - const int callbackRef = luaL_ref(L, LUA_REGISTRYINDEX); - LuaManager::g_emulator->getServiceManager().addServiceIntercept(serviceName, function, callbackRef); - return 0; -} - -static int clearServiceInterceptsThunk(lua_State* L) { - LuaManager::g_emulator->getServiceManager().clearServiceIntercepts(); - return 0; -} - -static int getButtonsThunk(lua_State* L) { - auto buttons = LuaManager::g_emulator->getServiceManager().getHID().getOldButtons(); - lua_pushinteger(L, static_cast(buttons)); - - return 1; -} - -static int getCirclepadThunk(lua_State* L) { - auto& hid = LuaManager::g_emulator->getServiceManager().getHID(); - s16 x = hid.getCirclepadX(); - s16 y = hid.getCirclepadY(); - - lua_pushinteger(L, static_cast(x)); - lua_pushinteger(L, static_cast(y)); - return 2; -} - -static int getButtonThunk(lua_State* L) { - auto& hid = LuaManager::g_emulator->getServiceManager().getHID(); - // This function accepts a mask. You can use it to check if one or more buttons are pressed at a time - const u32 mask = (u32)lua_tonumber(L, 1); - const bool result = (hid.getOldButtons() & mask) == mask; - - // Return whether the selected buttons are all pressed - lua_pushboolean(L, result ? 1 : 0); - return 1; -} - -static int disassembleARMThunk(lua_State* L) { - static Common::CapstoneDisassembler disassembler; - // We want the disassembler to only be fully initialized when this function is first used - if (!disassembler.isInitialized()) { - disassembler.init(CS_ARCH_ARM, CS_MODE_ARM); - } - - const u32 pc = u32(lua_tonumber(L, 1)); - const u32 instruction = u32(lua_tonumber(L, 2)); - - std::string disassembly; - // Convert instruction to byte array to pass to Capstone - std::array bytes = { - u8(instruction & 0xff), - u8((instruction >> 8) & 0xff), - u8((instruction >> 16) & 0xff), - u8((instruction >> 24) & 0xff), - }; - - disassembler.disassemble(disassembly, pc, std::span(bytes)); - lua_pushstring(L, disassembly.c_str()); - - return 1; -} - -static int disassembleTeakThunk(lua_State* L) { - const u16 instruction = u16(lua_tonumber(L, 1)); - const u16 expansion = u16(lua_tonumber(L, 2)); - - std::string disassembly = Teakra::Disassembler::Do(instruction, expansion); - lua_pushstring(L, disassembly.c_str()); - return 1; -} - -// clang-format off -static constexpr luaL_Reg functions[] = { - { "__read8", read8Thunk }, - { "__read16", read16Thunk }, - { "__read32", read32Thunk }, - { "__read64", read64Thunk }, - { "__readFloat", readFloatThunk }, - { "__readDouble", readDoubleThunk }, - { "__write8", write8Thunk} , - { "__write16", write16Thunk }, - { "__write32", write32Thunk }, - { "__write64", write64Thunk }, - { "__writeFloat", writeFloatThunk }, - { "__writeDouble", writeDoubleThunk }, - { "__getAppID", getAppIDThunk }, - { "__pause", pauseThunk }, - { "__resume", resumeThunk }, - { "__reset", resetThunk }, - { "__loadROM", loadROMThunk }, - { "__getButtons", getButtonsThunk }, - { "__getCirclepad", getCirclepadThunk }, - { "__getButton", getButtonThunk }, - { "__disassembleARM", disassembleARMThunk }, - { "__disassembleTeak", disassembleTeakThunk }, - {"__addServiceIntercept", addServiceInterceptThunk }, - {"__clearServiceIntercepts", clearServiceInterceptsThunk }, - { nullptr, nullptr }, -}; -// clang-format on - -void LuaManager::initializeThunks() { - static const char* runtimeInit = R"( - Pand = { - read8 = function(addr) return GLOBALS.__read8(addr) end, - read16 = function(addr) return GLOBALS.__read16(addr) end, - read32 = function(addr) return GLOBALS.__read32(addr) end, - read64 = function(addr) return GLOBALS.__read64(addr) end, - readFloat = function(addr) return GLOBALS.__readFloat(addr) end, - readDouble = function(addr) return GLOBALS.__readDouble(addr) end, - - write8 = function(addr, value) GLOBALS.__write8(addr, value) end, - write16 = function(addr, value) GLOBALS.__write16(addr, value) end, - write32 = function(addr, value) GLOBALS.__write32(addr, value) end, - write64 = function(addr, value) GLOBALS.__write64(addr, value) end, - writeFloat = function(addr, value) GLOBALS.__writeFloat(addr, value) end, - writeDouble = function(addr, value) GLOBALS.__writeDouble(addr, value) end, - - getAppID = function() - local ffi = require("ffi") - - result, low, high = GLOBALS.__getAppID() - id = bit.bor(ffi.cast("uint64_t", low), (bit.lshift(ffi.cast("uint64_t", high), 32))) - return result, id - end, - - pause = function() GLOBALS.__pause() end, - resume = function() GLOBALS.__resume() end, - reset = function() GLOBALS.__reset() end, - loadROM = function(path) return GLOBALS.__loadROM(path) end, - - getButtons = function() return GLOBALS.__getButtons() end, - getButton = function(button) return GLOBALS.__getButton(button) end, - getCirclepad = function() return GLOBALS.__getCirclepad() end, - - disassembleARM = function(pc, instruction) return GLOBALS.__disassembleARM(pc, instruction) end, - disassembleTeak = function(opcode, exp) return GLOBALS.__disassembleTeak(opcode, exp or 0) end, - addServiceIntercept = function(service, func, cb) return GLOBALS.__addServiceIntercept(service, func, cb) end, - clearServiceIntercepts = function() return GLOBALS.__clearServiceIntercepts() end, - - Frame = __Frame, - ButtonA = __ButtonA, - ButtonB = __ButtonB, - ButtonX = __ButtonX, - ButtonY = __ButtonY, - ButtonL = __ButtonL, - ButtonR = __ButtonR, - ButtonZL = __ButtonZL, - ButtonZR = __ButtonZR, - ButtonUp = __ButtonUp, - ButtonDown = __ButtonDown, - ButtonLeft = __ButtonLeft, - ButtonRight= __ButtonRight, - } -)"; - - auto addIntConstant = [&](T x, const char* name) { - lua_pushinteger(L, (int)x); - lua_setglobal(L, name); - }; - - luaL_register(L, "GLOBALS", functions); - // Add values for event enum - addIntConstant(LuaEvent::Frame, "__Frame"); - - // Add enums for 3DS keys - addIntConstant(HID::Keys::A, "__ButtonA"); - addIntConstant(HID::Keys::B, "__ButtonB"); - addIntConstant(HID::Keys::X, "__ButtonX"); - addIntConstant(HID::Keys::Y, "__ButtonY"); - addIntConstant(HID::Keys::Up, "__ButtonUp"); - addIntConstant(HID::Keys::Down, "__ButtonDown"); - addIntConstant(HID::Keys::Left, "__ButtonLeft"); - addIntConstant(HID::Keys::Right, "__ButtonRight"); - addIntConstant(HID::Keys::L, "__ButtonL"); - addIntConstant(HID::Keys::R, "__ButtonR"); - addIntConstant(HID::Keys::ZL, "__ButtonZL"); - addIntConstant(HID::Keys::ZR, "__ButtonZR"); - - // Call our Lua runtime initialization before any Lua script runs - luaL_loadstring(L, runtimeInit); - int ret = lua_pcall(L, 0, 0, 0); // tell Lua to run the script - - if (ret != 0) { - initialized = false; - fprintf(stderr, "%s\n", lua_tostring(L, -1)); // Init should never fail! - } else { - initialized = true; - } -} - -#endif diff --git a/src/panda_sdl/main.cpp b/src/main.cpp similarity index 76% rename from src/panda_sdl/main.cpp rename to src/main.cpp index ef354c61..66a04b9e 100644 --- a/src/panda_sdl/main.cpp +++ b/src/main.cpp @@ -1,11 +1,13 @@ -#include "panda_sdl/frontend_sdl.hpp" +#include "emulator.hpp" int main(int argc, char *argv[]) { - FrontendSDL app; + Emulator emu; + + emu.initGraphicsContext(); if (argc > 1) { auto romPath = std::filesystem::current_path() / argv[1]; - if (!app.loadROM(romPath)) { + if (!emu.loadROM(romPath)) { // For some reason just .c_str() doesn't show the proper path Helpers::panic("Failed to load ROM file: %s", romPath.string().c_str()); } @@ -13,5 +15,5 @@ int main(int argc, char *argv[]) { printf("No ROM inserted! Load a ROM by dragging and dropping it into the emulator window!\n"); } - app.run(); -} + emu.run(); +} \ No newline at end of file diff --git a/src/memory_mapped_file.cpp b/src/memory_mapped_file.cpp deleted file mode 100644 index e62b4636..00000000 --- a/src/memory_mapped_file.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "memory_mapped_file.hpp" - -MemoryMappedFile::MemoryMappedFile() : opened(false), filePath(""), pointer(nullptr) {} -MemoryMappedFile::MemoryMappedFile(const std::filesystem::path& path) { open(path); } -MemoryMappedFile::~MemoryMappedFile() { close(); } - -// TODO: This should probably also return the error one way or another eventually -bool MemoryMappedFile::open(const std::filesystem::path& path) { - std::error_code error; - map = mio::make_mmap_sink(path.string(), 0, mio::map_entire_file, error); - - if (error) { - opened = false; - return false; - } - - filePath = path; - pointer = (u8*)map.data(); - opened = true; - return true; -} - -void MemoryMappedFile::close() { - if (opened) { - opened = false; - pointer = nullptr; // Set the pointer to nullptr to avoid errors related to lingering pointers - - map.unmap(); - } -} - -std::error_code MemoryMappedFile::flush() { - std::error_code ret; - map.sync(ret); - - return ret; -} \ No newline at end of file diff --git a/src/miniaudio/miniaudio.cpp b/src/miniaudio/miniaudio.cpp deleted file mode 100644 index aa816812..00000000 --- a/src/miniaudio/miniaudio.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// We do not need the ability to be able to encode or decode audio files for the time being -// So we disable said functionality to make the executable smaller. -#define MA_NO_DECODING -#define MA_NO_ENCODING -#define MINIAUDIO_IMPLEMENTATION - -#ifndef PANDA3DS_IOS -#include "miniaudio.h" -#endif \ No newline at end of file diff --git a/src/miniaudio/miniaudio.m b/src/miniaudio/miniaudio.m deleted file mode 100644 index 80934f06..00000000 --- a/src/miniaudio/miniaudio.m +++ /dev/null @@ -1,8 +0,0 @@ -// We do not need the ability to be able to encode or decode audio files for the time being -// So we disable said functionality to make the executable smaller. -#define MA_NO_DECODING -#define MA_NO_ENCODING -#define MINIAUDIO_IMPLEMENTATION - -// On iOS we have to compile miniaudio as Obj-C -#include "miniaudio.h" diff --git a/src/panda_qt/about_window.cpp b/src/panda_qt/about_window.cpp deleted file mode 100644 index a388dad3..00000000 --- a/src/panda_qt/about_window.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "panda_qt/about_window.hpp" - -#include -#include -#include -#include -#include - -#include "version.hpp" - -// Based on https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/DolphinQt/AboutDialog.cpp - -AboutWindow::AboutWindow(QWidget* parent) : QDialog(parent) { - resize(200, 200); - - setWindowTitle(tr("About Panda3DS")); - setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - - const QString text = - QStringLiteral(R"( -

Panda3DS

- -

v%VERSION_STRING%

- -

-%ABOUT_PANDA3DS%
-%SUPPORT%
-

- -

-%AUTHORS% -

-)") - .replace(QStringLiteral("%VERSION_STRING%"), PANDA3DS_VERSION) - .replace(QStringLiteral("%ABOUT_PANDA3DS%"), tr("Panda3DS is a free and open source Nintendo 3DS emulator, for Windows, MacOS and Linux")) - .replace(QStringLiteral("%SUPPORT%"), tr("Visit panda3ds.com for help with Panda3DS and links to our official support sites.")) - .replace( - QStringLiteral("%AUTHORS%"), tr("Panda3DS is developed by volunteers in their spare time. Below is a list of some of these" - " volunteers who've agreed to be listed here, in no particular order.
If you think you should be " - "listed here too, please inform us

" - "- Peach (wheremyfoodat)
" - "- noumidev
" - "- liuk707
" - "- Wunk
" - "- marysaka
" - "- Sky
" - "- merryhime
" - "- TGP17
" - "- Shadow
") - ); - - QLabel* textLabel = new QLabel(text); - textLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); - textLabel->setOpenExternalLinks(true); - - QLabel* logo = new QLabel(); - logo->setPixmap(QPixmap(":/docs/img/rstarstruck_icon.png")); - logo->setContentsMargins(30, 0, 30, 0); - - QVBoxLayout* mainLayout = new QVBoxLayout; - QHBoxLayout* hLayout = new QHBoxLayout; - - setLayout(mainLayout); - mainLayout->addLayout(hLayout); - - hLayout->setAlignment(Qt::AlignLeft); - hLayout->addWidget(logo); - hLayout->addWidget(textLabel); -} \ No newline at end of file diff --git a/src/panda_qt/cheats_window.cpp b/src/panda_qt/cheats_window.cpp deleted file mode 100644 index 3627406a..00000000 --- a/src/panda_qt/cheats_window.cpp +++ /dev/null @@ -1,215 +0,0 @@ -#include "panda_qt/cheats_window.hpp" - -#include -#include -#include -#include -#include - -#include "cheats.hpp" -#include "emulator.hpp" -#include "panda_qt/main_window.hpp" - -MainWindow* mainWindow = nullptr; - -void dispatchToMainThread(std::function callback) { - QTimer* timer = new QTimer(); - timer->moveToThread(qApp->thread()); - timer->setSingleShot(true); - QObject::connect(timer, &QTimer::timeout, [=]() { - callback(); - timer->deleteLater(); - }); - QMetaObject::invokeMethod(timer, "start", Qt::QueuedConnection, Q_ARG(int, 0)); -} - -CheatEntryWidget::CheatEntryWidget(Emulator* emu, CheatMetadata metadata, QListWidget* parent) - : QWidget(), emu(emu), metadata(metadata), cheatList(parent) { - QHBoxLayout* layout = new QHBoxLayout; - - enabled = new QCheckBox; - enabled->setChecked(metadata.enabled); - - name = new QLabel(metadata.name.c_str()); - QPushButton* buttonEdit = new QPushButton(tr("Edit")); - - connect(enabled, &QCheckBox::stateChanged, this, &CheatEntryWidget::checkboxChanged); - connect(buttonEdit, &QPushButton::clicked, this, &CheatEntryWidget::editClicked); - - layout->addWidget(enabled); - layout->addWidget(name); - layout->addWidget(buttonEdit); - setLayout(layout); - - listItem = new QListWidgetItem; - listItem->setSizeHint(sizeHint()); - parent->addItem(listItem); - parent->setItemWidget(listItem, this); -} - -void CheatEntryWidget::checkboxChanged(int state) { - bool enabled = state == Qt::Checked; - if (metadata.handle == Cheats::badCheatHandle) { - printf("Cheat handle is bad, this shouldn't happen\n"); - return; - } - - if (enabled) { - emu->getCheats().enableCheat(metadata.handle); - metadata.enabled = true; - } else { - emu->getCheats().disableCheat(metadata.handle); - metadata.enabled = false; - } -} - -void CheatEntryWidget::editClicked() { - CheatEditDialog* dialog = new CheatEditDialog(emu, *this); - dialog->show(); -} - -CheatEditDialog::CheatEditDialog(Emulator* emu, CheatEntryWidget& cheatEntry) : QDialog(), emu(emu), cheatEntry(cheatEntry) { - setWindowTitle(tr("Edit Cheat")); - setModal(true); - - QVBoxLayout* layout = new QVBoxLayout; - const CheatMetadata& metadata = cheatEntry.getMetadata(); - codeEdit = new QTextEdit; - nameEdit = new QLineEdit; - nameEdit->setText(metadata.name.c_str()); - nameEdit->setPlaceholderText(tr("Cheat name")); - layout->addWidget(nameEdit); - - QFont font; - font.setFamily("Courier"); - font.setFixedPitch(true); - font.setPointSize(10); - codeEdit->setFont(font); - - if (metadata.code.size() != 0) { - // Nicely format it like so: - // 01234567 89ABCDEF - // 01234567 89ABCDEF - std::string formattedCode; - for (size_t i = 0; i < metadata.code.size(); i += 2) { - if (i != 0) { - if (i % 8 == 0 && i % 16 != 0) { - formattedCode += " "; - } else if (i % 16 == 0) { - formattedCode += "\n"; - } - } - - formattedCode += metadata.code[i]; - formattedCode += metadata.code[i + 1]; - } - codeEdit->setText(formattedCode.c_str()); - } - - layout->addWidget(codeEdit); - setLayout(layout); - - auto buttons = QDialogButtonBox::Ok | QDialogButtonBox::Cancel; - QDialogButtonBox* buttonBox = new QDialogButtonBox(buttons); - layout->addWidget(buttonBox); - - connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); - connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - connect(this, &QDialog::rejected, this, &CheatEditDialog::rejected); - connect(this, &QDialog::accepted, this, &CheatEditDialog::accepted); -} - -void CheatEditDialog::accepted() { - QString code = codeEdit->toPlainText(); - code.replace(QRegularExpression("[^0-9a-fA-F]"), ""); - - CheatMetadata metadata = cheatEntry.getMetadata(); - metadata.name = nameEdit->text().toStdString(); - metadata.code = code.toStdString(); - cheatEntry.setMetadata(metadata); - - std::vector bytes; - for (size_t i = 0; i < metadata.code.size(); i += 2) { - std::string hex = metadata.code.substr(i, 2); - bytes.push_back((u8)std::stoul(hex, nullptr, 16)); - } - - mainWindow->editCheat(cheatEntry.getMetadata().handle, bytes, [this](u32 handle) { - dispatchToMainThread([this, handle]() { - if (handle == Cheats::badCheatHandle) { - cheatEntry.Remove(); - return; - } else { - CheatMetadata metadata = cheatEntry.getMetadata(); - metadata.handle = handle; - cheatEntry.setMetadata(metadata); - cheatEntry.Update(); - } - - // Delete the CheatEditDialog when the main thread is done using it - QObject::deleteLater(); - }); - }); -} - -void CheatEditDialog::rejected() { - bool isEditing = cheatEntry.getMetadata().handle != Cheats::badCheatHandle; - if (!isEditing) { - // Was adding a cheat but user pressed cancel - cheatEntry.Remove(); - } - - // We have to manually memory-manage the CheatEditDialog object since it's accessed via multiple threads - QObject::deleteLater(); -} - -CheatsWindow::CheatsWindow(Emulator* emu, const std::filesystem::path& cheatPath, QWidget* parent) - : QWidget(parent, Qt::Window), emu(emu), cheatPath(cheatPath) { - setWindowTitle(tr("Cheats")); - mainWindow = static_cast(parent); - - QVBoxLayout* layout = new QVBoxLayout; - layout->setContentsMargins(6, 6, 6, 6); - setLayout(layout); - - cheatList = new QListWidget; - layout->addWidget(cheatList); - - QWidget* buttonBox = new QWidget; - QHBoxLayout* buttonLayout = new QHBoxLayout; - - QPushButton* buttonAdd = new QPushButton(tr("Add")); - QPushButton* buttonRemove = new QPushButton(tr("Remove")); - - connect(buttonAdd, &QPushButton::clicked, this, &CheatsWindow::addEntry); - connect(buttonRemove, &QPushButton::clicked, this, &CheatsWindow::removeClicked); - - buttonLayout->addWidget(buttonAdd); - buttonLayout->addWidget(buttonRemove); - buttonBox->setLayout(buttonLayout); - - layout->addWidget(buttonBox); - - // TODO: load cheats from saved cheats per game - // for (const CheatMetadata& metadata : getSavedCheats()) - // { - // new CheatEntryWidget(emu, metadata, cheatList); - // } -} - -void CheatsWindow::addEntry() { - // CheatEntryWidget is added to the list when it's created - CheatEntryWidget* entry = new CheatEntryWidget(emu, {Cheats::badCheatHandle, "New cheat", "", true}, cheatList); - CheatEditDialog* dialog = new CheatEditDialog(emu, *entry); - dialog->show(); -} - -void CheatsWindow::removeClicked() { - QListWidgetItem* item = cheatList->currentItem(); - if (item == nullptr) { - return; - } - - CheatEntryWidget* entry = static_cast(cheatList->itemWidget(item)); - entry->Remove(); -} diff --git a/src/panda_qt/config_window.cpp b/src/panda_qt/config_window.cpp deleted file mode 100644 index 14b33156..00000000 --- a/src/panda_qt/config_window.cpp +++ /dev/null @@ -1,559 +0,0 @@ -#include "panda_qt/config_window.hpp" - -#include "version.hpp" - -ConfigWindow::ConfigWindow(ConfigCallback configCallback, MainWindowCallback windowCallback, const EmulatorConfig& emuConfig, QWidget* parent) - : QDialog(parent), config(emuConfig), updateConfig(std::move(configCallback)), getMainWindow(std::move(windowCallback)) { - setWindowTitle(tr("Configuration")); - - // Set up theme selection - setTheme(config.frontendSettings.theme); - setIcon(config.frontendSettings.icon); - - // Set the window title of the main window appropriately if we enable showing the app version on the window - if (config.windowSettings.showAppVersion) { - getMainWindow()->setWindowTitle(tr("Alber v%1").arg(PANDA3DS_VERSION)); - } - - // Initialize the widget list and the widget container widgets - widgetList = new QListWidget(this); - widgetContainer = new QStackedWidget(this); - - helpText = new QTextEdit(this); - helpText->setReadOnly(true); - - helpText->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - helpText->setFixedHeight(50); - - widgetList->setMinimumWidth(100); - widgetList->setMaximumWidth(100); - widgetList->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - widgetList->setPalette(QPalette(QColor(25, 25, 25))); - - widgetList->setCurrentRow(0); - widgetContainer->setCurrentIndex(0); - - connect(widgetList, &QListWidget::currentRowChanged, this, [&](int row) { - widgetContainer->setCurrentIndex(row); - helpText->setText(helpTexts[row]); - }); - - auto connectCheckbox = [&](QCheckBox* checkbox, bool& setting) { - checkbox->setChecked(setting); - - connect(checkbox, &QCheckBox::toggled, this, [&](bool checked) { - setting = checked; - updateConfig(); - }); - }; - - QVBoxLayout* mainLayout = new QVBoxLayout(); - QHBoxLayout* hLayout = new QHBoxLayout(); - - // Set up widget layouts - setLayout(mainLayout); - mainLayout->addLayout(hLayout); - mainLayout->addWidget(helpText); - - hLayout->setAlignment(Qt::AlignLeft); - hLayout->addWidget(widgetList); - hLayout->addWidget(widgetContainer); - - // Interface settings - QGroupBox* guiGroupBox = new QGroupBox(tr("Interface Settings"), this); - QFormLayout* guiLayout = new QFormLayout(guiGroupBox); - guiLayout->setHorizontalSpacing(20); - guiLayout->setVerticalSpacing(10); - - QComboBox* themeSelect = new QComboBox(); - themeSelect->addItem(tr("System")); - themeSelect->addItem(tr("Light")); - themeSelect->addItem(tr("Dark")); - themeSelect->addItem(tr("Greetings Cat")); - themeSelect->addItem(tr("Cream")); - themeSelect->addItem(tr("OLED")); - themeSelect->setCurrentIndex(static_cast(config.frontendSettings.theme)); - connect(themeSelect, &QComboBox::currentIndexChanged, this, [&](int index) { - config.frontendSettings.theme = static_cast(index); - setTheme(static_cast(index)); - - updateConfig(); - }); - guiLayout->addRow(tr("Color theme"), themeSelect); - - QComboBox* iconSelect = new QComboBox(); - iconSelect->addItem(tr("Happy panda")); - iconSelect->addItem(tr("Happy panda (colourful)")); - iconSelect->addItem(tr("Sleepy panda")); - iconSelect->addItem(tr("Cow panda")); - iconSelect->addItem(tr("The penguin from SkyEmu")); - iconSelect->addItem(tr("Unpog")); - iconSelect->setCurrentIndex(static_cast(config.frontendSettings.icon)); - - connect(iconSelect, &QComboBox::currentIndexChanged, this, [&](int index) { - config.frontendSettings.icon = static_cast(index); - setIcon(static_cast(index)); - - updateConfig(); - }); - guiLayout->addRow(tr("Window icon"), iconSelect); - - QComboBox* languageSelect = createLanguageSelect(); - guiLayout->addRow(tr("Language"), languageSelect); - - QCheckBox* showAppVersion = new QCheckBox(tr("Show version on window title")); - showAppVersion->setChecked(config.windowSettings.showAppVersion); - connect(showAppVersion, &QCheckBox::toggled, this, [&](bool checked) { - config.windowSettings.showAppVersion = checked; - updateConfig(); - - // Update main window title - getMainWindow()->setWindowTitle(checked ? tr("Alber v%1").arg(PANDA3DS_VERSION) : tr("Alber")); - }); - connectCheckbox(showAppVersion, config.windowSettings.showAppVersion); - guiLayout->addRow(showAppVersion); - - QCheckBox* rememberPosition = new QCheckBox(tr("Remember window position")); - connectCheckbox(rememberPosition, config.windowSettings.rememberPosition); - guiLayout->addRow(rememberPosition); - - // General settings - QGroupBox* genGroupBox = new QGroupBox(tr("General Settings"), this); - QFormLayout* genLayout = new QFormLayout(genGroupBox); - genLayout->setHorizontalSpacing(20); - genLayout->setVerticalSpacing(10); - - QLineEdit* defaultRomPath = new QLineEdit; - defaultRomPath->setText(QString::fromStdU16String(config.defaultRomPath.u16string())); - connect(defaultRomPath, &QLineEdit::textChanged, this, [&](const QString& text) { - config.defaultRomPath = text.toStdString(); - updateConfig(); - }); - QPushButton* browseRomPath = new QPushButton(tr("Browse...")); - browseRomPath->setAutoDefault(false); - connect(browseRomPath, &QPushButton::pressed, this, [&, defaultRomPath]() { - QString newPath = QFileDialog::getExistingDirectory( - this, tr("Select Directory"), QString::fromStdU16String(config.defaultRomPath.u16string()), - QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks - ); - if (!newPath.isEmpty()) { - defaultRomPath->setText(newPath); - } - }); - - QHBoxLayout* romLayout = new QHBoxLayout(); - romLayout->setSpacing(4); - romLayout->addWidget(defaultRomPath); - romLayout->addWidget(browseRomPath); - genLayout->addRow(tr("Default ROMs path"), romLayout); - - QComboBox* systemLanguage = new QComboBox(); - systemLanguage->addItem(tr("Japanese")); - systemLanguage->addItem(tr("English")); - systemLanguage->addItem(tr("French")); - systemLanguage->addItem(tr("German")); - systemLanguage->addItem(tr("Italian")); - systemLanguage->addItem(tr("Spanish")); - systemLanguage->addItem(tr("Chinese")); - systemLanguage->addItem(tr("Korean")); - systemLanguage->addItem(tr("Dutch")); - systemLanguage->addItem(tr("Portuguese")); - systemLanguage->addItem(tr("Russian")); - systemLanguage->addItem(tr("Taiwanese")); - - systemLanguage->setCurrentIndex(static_cast(config.systemLanguage)); - connect(systemLanguage, &QComboBox::currentIndexChanged, this, [&](int index) { - config.systemLanguage = static_cast(index); - updateConfig(); - }); - genLayout->addRow(tr("System language"), systemLanguage); - - QCheckBox* circlePadProEnabled = new QCheckBox(tr("Enable CirclePad Pro")); - connectCheckbox(circlePadProEnabled, config.circlePadProEnabled); - genLayout->addRow(circlePadProEnabled); - - QCheckBox* discordRpcEnabled = new QCheckBox(tr("Enable Discord RPC")); - connectCheckbox(discordRpcEnabled, config.discordRpcEnabled); - genLayout->addRow(discordRpcEnabled); - - QCheckBox* usePortableBuild = new QCheckBox(tr("Use portable build")); - connectCheckbox(usePortableBuild, config.usePortableBuild); - genLayout->addRow(usePortableBuild); - - QCheckBox* printAppVersion = new QCheckBox(tr("Print version in console output")); - connectCheckbox(printAppVersion, config.printAppVersion); - genLayout->addRow(printAppVersion); - - // Graphics settings - QGroupBox* gpuGroupBox = new QGroupBox(tr("Graphics Settings"), this); - QFormLayout* gpuLayout = new QFormLayout(gpuGroupBox); - gpuLayout->setHorizontalSpacing(20); - gpuLayout->setVerticalSpacing(10); - - QComboBox* rendererType = new QComboBox(); - rendererType->addItem(tr("Null")); - rendererType->addItem(tr("OpenGL")); - rendererType->addItem(tr("Vulkan")); - rendererType->setCurrentIndex(static_cast(config.rendererType)); - connect(rendererType, &QComboBox::currentIndexChanged, this, [&](int index) { - auto type = static_cast(index); - - if (type == RendererType::Vulkan) { - QMessageBox messageBox( - QMessageBox::Icon::Critical, tr("Vulkan renderer unavailable"), - tr("Qt UI doesn't currently support Vulkan, try again at a later time") - ); - messageBox.exec(); - } else { - config.rendererType = type; - updateConfig(); - } - }); - gpuLayout->addRow(tr("GPU renderer"), rendererType); - - QCheckBox* enableRenderdoc = new QCheckBox(tr("Enable Renderdoc")); - connectCheckbox(enableRenderdoc, config.enableRenderdoc); - gpuLayout->addRow(enableRenderdoc); - - QCheckBox* shaderJitEnabled = new QCheckBox(tr("Enable shader JIT")); - connectCheckbox(shaderJitEnabled, config.shaderJitEnabled); - gpuLayout->addRow(shaderJitEnabled); - - QCheckBox* vsyncEnabled = new QCheckBox(tr("Enable VSync")); - connectCheckbox(vsyncEnabled, config.vsyncEnabled); - gpuLayout->addRow(vsyncEnabled); - - QCheckBox* useUbershaders = new QCheckBox(tr("Use ubershaders (No stutter, maybe slower)")); - connectCheckbox(useUbershaders, config.useUbershaders); - gpuLayout->addRow(useUbershaders); - - QCheckBox* accurateShaderMul = new QCheckBox(tr("Accurate shader multiplication")); - connectCheckbox(accurateShaderMul, config.accurateShaderMul); - gpuLayout->addRow(accurateShaderMul); - - QCheckBox* accelerateShaders = new QCheckBox(tr("Accelerate shaders")); - connectCheckbox(accelerateShaders, config.accelerateShaders); - gpuLayout->addRow(accelerateShaders); - - QCheckBox* hashTextures = new QCheckBox(tr("Hash textures")); - hashTextures->setToolTip(tr("Enable this to reduce texture mismatches at the cost of slightly lower performance")); - connectCheckbox(hashTextures, config.hashTextures); - gpuLayout->addRow(hashTextures); - - QComboBox* screenLayout = new QComboBox(); - screenLayout->addItem(tr("Default")); - screenLayout->addItem(tr("Default (Flipped)")); - screenLayout->addItem(tr("Side-by-Side")); - screenLayout->addItem(tr("Side-by-Side (Flipped)")); - screenLayout->setCurrentIndex(static_cast(config.screenLayout)); - connect(screenLayout, &QComboBox::currentIndexChanged, this, [&](int index) { - config.screenLayout = static_cast(index); - updateConfig(); - }); - gpuLayout->addRow(tr("Screen Layout"), screenLayout); - - // Screen size slider widgets - QLabel* topScreenSizeLabel = new QLabel(QString::number(int(config.topScreenSize * 100))); - QSlider* topScreenSizeSlider = new QSlider(Qt::Horizontal); - - topScreenSizeSlider->setRange(0, 100); - topScreenSizeSlider->setValue(int(config.topScreenSize * 100)); - connect(topScreenSizeSlider, &QSlider::valueChanged, this, [this, topScreenSizeLabel](int value) { - config.topScreenSize = float(value) / 100.0f; - topScreenSizeLabel->setText(QString::number(value)); - updateConfig(); - }); - - QHBoxLayout* screenSizeLayout = new QHBoxLayout(); - screenSizeLayout->setSpacing(4); - screenSizeLayout->addWidget(topScreenSizeSlider); - screenSizeLayout->addWidget(topScreenSizeLabel); - gpuLayout->addRow(tr("Top screen size (%)"), screenSizeLayout); - - QCheckBox* forceShadergenForLights = new QCheckBox(tr("Force shadergen when rendering lights")); - connectCheckbox(forceShadergenForLights, config.forceShadergenForLights); - gpuLayout->addRow(forceShadergenForLights); - - QSpinBox* lightShadergenThreshold = new QSpinBox; - lightShadergenThreshold->setRange(1, 8); - lightShadergenThreshold->setValue(config.lightShadergenThreshold); - connect(lightShadergenThreshold, &QSpinBox::valueChanged, this, [&](int value) { - config.lightShadergenThreshold = static_cast(value); - updateConfig(); - }); - gpuLayout->addRow(tr("Light threshold for forcing shadergen"), lightShadergenThreshold); - - // Audio settings - QGroupBox* dspGroupBox = new QGroupBox(tr("Audio Settings"), this); - QFormLayout* audioLayout = new QFormLayout(dspGroupBox); - audioLayout->setHorizontalSpacing(20); - audioLayout->setVerticalSpacing(10); - - QComboBox* dspType = new QComboBox(); - dspType->addItem(tr("Null")); - dspType->addItem(tr("LLE")); - dspType->addItem(tr("HLE")); - dspType->setCurrentIndex(static_cast(config.dspType)); - connect(dspType, &QComboBox::currentIndexChanged, this, [&](int index) { - config.dspType = static_cast(index); - updateConfig(); - }); - audioLayout->addRow(tr("DSP emulation"), dspType); - - QCheckBox* audioEnabled = new QCheckBox(tr("Enable audio")); - connectCheckbox(audioEnabled, config.audioEnabled); - audioLayout->addRow(audioEnabled); - - QCheckBox* aacEnabled = new QCheckBox(tr("Enable AAC audio")); - connectCheckbox(aacEnabled, config.aacEnabled); - audioLayout->addRow(aacEnabled); - - QCheckBox* printDSPFirmware = new QCheckBox(tr("Print DSP firmware")); - connectCheckbox(printDSPFirmware, config.printDSPFirmware); - audioLayout->addRow(printDSPFirmware); - - QCheckBox* muteAudio = new QCheckBox(tr("Mute audio device")); - connectCheckbox(muteAudio, config.audioDeviceConfig.muteAudio); - audioLayout->addRow(muteAudio); - - QComboBox* volumeCurveType = new QComboBox(); - volumeCurveType->addItem(tr("Cubic")); - volumeCurveType->addItem(tr("Linear")); - volumeCurveType->setCurrentIndex(static_cast(config.audioDeviceConfig.volumeCurve)); - connect(volumeCurveType, &QComboBox::currentIndexChanged, this, [&](int index) { - config.audioDeviceConfig.volumeCurve = static_cast(index); - updateConfig(); - }); - audioLayout->addRow(tr("Volume curve"), volumeCurveType); - - QLabel* volumeLabel = new QLabel(QString::number(int(config.audioDeviceConfig.volumeRaw * 100))); - - QSlider* volumeSlider = new QSlider(Qt::Horizontal); - volumeSlider->setRange(0, 200); - volumeSlider->setValue(int(config.audioDeviceConfig.volumeRaw * 100)); - connect(volumeSlider, &QSlider::valueChanged, this, [this, volumeLabel](int value) { - config.audioDeviceConfig.volumeRaw = float(value) / 100.0f; - volumeLabel->setText(QString::number(value)); - - updateConfig(); - }); - - QHBoxLayout* volumeLayout = new QHBoxLayout(); - volumeLayout->setSpacing(4); - volumeLayout->addWidget(volumeSlider); - volumeLayout->addWidget(volumeLabel); - audioLayout->addRow(tr("Audio device volume"), volumeLayout); - - inputWindow = new InputWindow(this); - - // Battery settings - QGroupBox* batGroupBox = new QGroupBox(tr("Battery Settings"), this); - QFormLayout* batLayout = new QFormLayout(batGroupBox); - batLayout->setHorizontalSpacing(20); - batLayout->setVerticalSpacing(10); - - QSpinBox* batteryPercentage = new QSpinBox; - batteryPercentage->setRange(1, 100); - batteryPercentage->setValue(config.batteryPercentage); - connect(batteryPercentage, &QSpinBox::valueChanged, this, [&](int value) { - config.batteryPercentage = static_cast(value); - updateConfig(); - }); - batLayout->addRow(tr("Battery percentage"), batteryPercentage); - - QCheckBox* chargerPlugged = new QCheckBox(tr("Charger plugged")); - connectCheckbox(chargerPlugged, config.chargerPlugged); - batLayout->addRow(chargerPlugged); - - // SD Card settings - QGroupBox* sdcGroupBox = new QGroupBox(tr("SD Card Settings"), this); - QFormLayout* sdcLayout = new QFormLayout(sdcGroupBox); - sdcLayout->setHorizontalSpacing(20); - sdcLayout->setVerticalSpacing(10); - - QCheckBox* sdCardInserted = new QCheckBox(tr("Enable virtual SD card")); - connectCheckbox(sdCardInserted, config.sdCardInserted); - sdcLayout->addRow(sdCardInserted); - - QCheckBox* sdWriteProtected = new QCheckBox(tr("Write protect virtual SD card")); - connectCheckbox(sdWriteProtected, config.sdWriteProtected); - sdcLayout->addRow(sdWriteProtected); - - // Add all our settings widgets to our widget list - addWidget(guiGroupBox, tr("Interface"), ":/docs/img/sparkling_icon.png", tr("User Interface settings")); - addWidget(genGroupBox, tr("General"), ":/docs/img/settings_icon.png", tr("General emulator settings")); - addWidget(gpuGroupBox, tr("Graphics"), ":/docs/img/display_icon.png", tr("Graphics emulation and output settings")); - addWidget(dspGroupBox, tr("Audio"), ":/docs/img/speaker_icon.png", tr("Audio emulation and output settings")); - addWidget(inputWindow, tr("Input"), ":/docs/img/gamepad_icon.png", tr("Keyboard & controller input settings")); - addWidget(batGroupBox, tr("Battery"), ":/docs/img/battery_icon.png", tr("Battery emulation settings")); - addWidget(sdcGroupBox, tr("SD Card"), ":/docs/img/sdcard_icon.png", tr("SD Card emulation settings")); - - widgetList->setCurrentRow(0); -} - -void ConfigWindow::setTheme(Theme theme) { - switch (theme) { - case Theme::Dark: { - QApplication::setStyle(QStyleFactory::create("Fusion")); - - QPalette p; - p.setColor(QPalette::Window, QColor(53, 53, 53)); - p.setColor(QPalette::WindowText, Qt::white); - p.setColor(QPalette::Base, QColor(25, 25, 25)); - p.setColor(QPalette::AlternateBase, QColor(53, 53, 53)); - p.setColor(QPalette::ToolTipBase, Qt::white); - p.setColor(QPalette::ToolTipText, Qt::white); - p.setColor(QPalette::Text, Qt::white); - p.setColor(QPalette::Button, QColor(53, 53, 53)); - p.setColor(QPalette::ButtonText, Qt::white); - p.setColor(QPalette::BrightText, Qt::red); - p.setColor(QPalette::Link, QColor(42, 130, 218)); - - p.setColor(QPalette::Highlight, QColor(42, 130, 218)); - p.setColor(QPalette::HighlightedText, Qt::black); - qApp->setPalette(p); - break; - } - - case Theme::Light: { - QApplication::setStyle(QStyleFactory::create("Fusion")); - - QPalette p; - p.setColor(QPalette::Window, Qt::white); - p.setColor(QPalette::WindowText, Qt::black); - p.setColor(QPalette::Base, QColor(243, 243, 243)); - p.setColor(QPalette::AlternateBase, Qt::white); - p.setColor(QPalette::ToolTipBase, Qt::black); - p.setColor(QPalette::ToolTipText, Qt::black); - p.setColor(QPalette::Text, Qt::black); - p.setColor(QPalette::Button, Qt::white); - p.setColor(QPalette::ButtonText, Qt::black); - p.setColor(QPalette::BrightText, Qt::red); - p.setColor(QPalette::Link, QColor(42, 130, 218)); - - p.setColor(QPalette::Highlight, QColor(42, 130, 218)); - p.setColor(QPalette::HighlightedText, Qt::white); - qApp->setPalette(p); - break; - } - - case Theme::GreetingsCat: { - QApplication::setStyle(QStyleFactory::create("Fusion")); - - QPalette p; - p.setColor(QPalette::Window, QColor(250, 207, 228)); - p.setColor(QPalette::WindowText, QColor(225, 22, 137)); - p.setColor(QPalette::Base, QColor(250, 207, 228)); - p.setColor(QPalette::AlternateBase, QColor(250, 207, 228)); - p.setColor(QPalette::ToolTipBase, QColor(225, 22, 137)); - p.setColor(QPalette::ToolTipText, QColor(225, 22, 137)); - p.setColor(QPalette::Text, QColor(225, 22, 137)); - p.setColor(QPalette::Button, QColor(250, 207, 228)); - p.setColor(QPalette::ButtonText, QColor(225, 22, 137)); - p.setColor(QPalette::BrightText, Qt::black); - p.setColor(QPalette::Link, QColor(42, 130, 218)); - - p.setColor(QPalette::Highlight, QColor(42, 130, 218)); - p.setColor(QPalette::HighlightedText, Qt::black); - qApp->setPalette(p); - break; - } - - case Theme::Cream: { - QApplication::setStyle(QStyleFactory::create("Fusion")); - - QPalette p; - p.setColor(QPalette::Window, QColor(255, 229, 180)); - p.setColor(QPalette::WindowText, QColor(33, 37, 41)); - p.setColor(QPalette::Base, QColor(255, 229, 180)); - p.setColor(QPalette::AlternateBase, QColor(255, 229, 180)); - p.setColor(QPalette::ToolTipBase, QColor(33, 37, 41)); - p.setColor(QPalette::ToolTipText, QColor(33, 37, 41)); - p.setColor(QPalette::Text, QColor(33, 37, 41)); - p.setColor(QPalette::Button, QColor(255, 229, 180)); - p.setColor(QPalette::ButtonText, QColor(33, 37, 41)); - p.setColor(QPalette::BrightText, QColor(217, 113, 103)); - p.setColor(QPalette::Link, QColor(248, 148, 150)); - - p.setColor(QPalette::Highlight, QColor(217, 113, 103)); - p.setColor(QPalette::HighlightedText, QColor(63, 33, 29)); - qApp->setPalette(p); - break; - } - - case Theme::Oled: { - QApplication::setStyle(QStyleFactory::create("Fusion")); - - QPalette p; - p.setColor(QPalette::Window, Qt::black); - p.setColor(QPalette::WindowText, Qt::white); - p.setColor(QPalette::Base, Qt::black); - p.setColor(QPalette::AlternateBase, Qt::black); - p.setColor(QPalette::ToolTipBase, Qt::black); - p.setColor(QPalette::ToolTipText, Qt::white); - p.setColor(QPalette::Text, Qt::white); - p.setColor(QPalette::Button, QColor(5, 5, 5)); - p.setColor(QPalette::ButtonText, Qt::white); - p.setColor(QPalette::BrightText, Qt::red); - p.setColor(QPalette::Link, QColor(42, 130, 218)); - - p.setColor(QPalette::Highlight, QColor(42, 130, 218)); - p.setColor(QPalette::HighlightedText, Qt::black); - qApp->setPalette(p); - qApp->setStyleSheet( - "QLineEdit {" - "background-color: #000000; color: #ffffff; border: 1px solid #a0a0a0; " - "border-radius: 4px; padding: 5px; }" - - "QCheckBox::indicator:unchecked {" - "border: 1px solid #808080; border-radius: 4px; }" - ); - break; - } - - case Theme::System: { - qApp->setPalette(this->style()->standardPalette()); - qApp->setStyle(QStyleFactory::create("WindowsVista")); - qApp->setStyleSheet(""); - break; - } - } -} - -void ConfigWindow::setIcon(WindowIcon icon) { - auto updateIcon = [&](const QString& iconPath) { getMainWindow()->setWindowIcon(QIcon(iconPath)); }; - - switch (icon) { - case WindowIcon::Rsyn: updateIcon(":/docs/img/rsyn_icon.png"); break; - case WindowIcon::Rnap: updateIcon(":/docs/img/rnap_icon.png"); break; - case WindowIcon::Rcow: updateIcon(":/docs/img/rcow_icon.png"); break; - case WindowIcon::SkyEmu: updateIcon(":/docs/img/skyemu_icon.png"); break; - case WindowIcon::Runpog: updateIcon(":/docs/img/runpog_icon.png"); break; - - case WindowIcon::Rpog: - default: updateIcon(":/docs/img/rpog_icon.png"); break; - } -} - -void ConfigWindow::addWidget(QWidget* widget, QString title, QString icon, QString helpText) { - const int index = widgetList->count(); - - QListWidgetItem* item = new QListWidgetItem(widgetList); - item->setText(title); - if (!icon.isEmpty()) { - item->setIcon(QIcon::fromTheme(icon)); - } - - widgetContainer->addWidget(widget); - - if (index >= settingWidgetCount) { - Helpers::panic("Qt: ConfigWindow::settingWidgetCount has not been updated correctly!"); - } - helpTexts[index] = std::move(helpText); -} - -ConfigWindow::~ConfigWindow() { - delete helpText; - delete widgetList; - delete widgetContainer; -} diff --git a/src/panda_qt/cpu_debugger.cpp b/src/panda_qt/cpu_debugger.cpp deleted file mode 100644 index 61730c53..00000000 --- a/src/panda_qt/cpu_debugger.cpp +++ /dev/null @@ -1,265 +0,0 @@ -#include "panda_qt/cpu_debugger.hpp" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// TODO: Make this actually thread-safe by having it only work when paused -static int getLinesInViewport(QListWidget* listWidget) { - auto viewportHeight = listWidget->viewport()->height(); - QFontMetrics fm = QFontMetrics(listWidget->font()); - auto lineHeight = fm.height(); - - return int(viewportHeight / lineHeight); -} - -static std::pair getVisibleLineRange(QListWidget* listWidget, QScrollBar* scrollBar) { - int firstLine = scrollBar->value(); - int lineCount = getLinesInViewport(listWidget); - - return {firstLine, lineCount}; -} - -CPUDebugger::CPUDebugger(Emulator* emulator, QWidget* parent) : emu(emulator), disassembler(CS_ARCH_ARM, CS_MODE_ARM), QWidget(parent, Qt::Window) { - setWindowTitle(tr("CPU debugger")); - resize(1000, 600); - - QGridLayout* gridLayout = new QGridLayout(this); - QHBoxLayout* horizontalLayout = new QHBoxLayout(); - - // Set up the top line widgets - QPushButton* goToAddressButton = new QPushButton(tr("Go to address"), this); - QPushButton* goToPCButton = new QPushButton(tr("Go to PC"), this); - QCheckBox* followPCCheckBox = new QCheckBox(tr("Follow PC"), this); - addressInput = new QLineEdit(this); - - horizontalLayout->addWidget(goToAddressButton); - horizontalLayout->addWidget(goToPCButton); - horizontalLayout->addWidget(followPCCheckBox); - horizontalLayout->addWidget(addressInput); - - followPCCheckBox->setChecked(followPC); - connect(followPCCheckBox, &QCheckBox::toggled, this, [&](bool checked) { followPC = checked; }); - - addressInput->setPlaceholderText(tr("Address to jump to")); - addressInput->setMaximumWidth(150); - - gridLayout->addLayout(horizontalLayout, 0, 0); - - // Disassembly list on the left, scrollbar in the middle, register view on the right - disasmListWidget = new QListWidget(this); - gridLayout->addWidget(disasmListWidget, 1, 0); - - verticalScrollBar = new QScrollBar(Qt::Vertical, this); - gridLayout->addWidget(verticalScrollBar, 1, 1); - - registerTextEdit = new QPlainTextEdit(this); - registerTextEdit->setEnabled(true); - registerTextEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - registerTextEdit->setMaximumWidth(800); - gridLayout->addWidget(registerTextEdit, 1, 2); - - // Setup overlay for when the widget is disabled - disabledOverlay = new DisabledWidgetOverlay(this, tr("Pause the emulator to use the CPU Debugger")); - disabledOverlay->resize(size()); // Fill the whole widget - disabledOverlay->raise(); - disabledOverlay->hide(); - - // Use a monospace font for the disassembly to align it - QFont mono_font = QFont("Courier New"); - mono_font.setStyleHint(QFont::Monospace); - disasmListWidget->setFont(mono_font); - registerTextEdit->setFont(mono_font); - - // Forward scrolling from the list widget to our scrollbar - disasmListWidget->installEventFilter(this); - - // Annoyingly, due to a Qt limitation we can't set it to U32_MAX - verticalScrollBar->setRange(0, std::numeric_limits::max()); - verticalScrollBar->setSingleStep(8); - verticalScrollBar->setPageStep(getLinesInViewport(disasmListWidget)); - verticalScrollBar->show(); - connect(verticalScrollBar, &QScrollBar::valueChanged, this, &CPUDebugger::updateDisasm); - registerTextEdit->setReadOnly(true); - - connect(goToPCButton, &QPushButton::clicked, this, [&]() { scrollToPC(); }); - - // We have a QTimer that triggers every 500ms to update our widget when it's active - updateTimer = new QTimer(this); - connect(updateTimer, &QTimer::timeout, this, &CPUDebugger::update); - - // Go to address when the "Go to address" button is pressed, or when we press enter inside the address input box - connect(goToAddressButton, &QPushButton::clicked, this, [&]() { - QString text = addressInput->text().trimmed(); - - bool validAddr = false; - u32 addr = text.toUInt(&validAddr, 16); // Parse address as hex - if (validAddr) { - verticalScrollBar->setValue(addr); - } else { - addressInput->setText(tr("Invalid hexadecimal address")); - } - }); - connect(addressInput, &QLineEdit::returnPressed, goToAddressButton, &QPushButton::click); - - disable(); - hide(); -} - -void CPUDebugger::enable() { - enabled = true; - - disabledOverlay->hide(); - scrollToPC(); - - // Update the widget every 500ms - updateTimer->start(500); - update(); -} - -void CPUDebugger::disable() { - enabled = false; - - updateTimer->stop(); - disabledOverlay->show(); -} - -void CPUDebugger::update() { - if (enabled) { - if (followPC) { - scrollToPC(); - } - - updateDisasm(); - updateRegisters(); - } -} - -void CPUDebugger::updateDisasm() { - int currentRow = disasmListWidget->currentRow(); - disasmListWidget->clear(); - - auto [firstLine, lineCount] = getVisibleLineRange(disasmListWidget, verticalScrollBar); - const u32 startPC = (firstLine + 3) & ~3; // Align PC to 4 bytes - const u32 endPC = startPC + lineCount * sizeof(u32); - - auto& cpu = emu->getCPU(); - auto& mem = emu->getMemory(); - u32 pc = cpu.getReg(15); - - std::string disassembly; - - for (u32 addr = startPC; addr < endPC; addr += sizeof(u32)) { - if (auto pointer = (u32*)mem.getReadPointer(addr)) { - const u32 instruction = *pointer; - - // Convert instruction to byte array to pass to Capstone - const std::array bytes = { - u8(instruction & 0xff), - u8((instruction >> 8) & 0xff), - u8((instruction >> 16) & 0xff), - u8((instruction >> 24) & 0xff), - }; - - disassembler.disassemble(disassembly, addr, std::span(bytes)); - disassembly = fmt::format("{:08X} | {}", addr, disassembly); - - QListWidgetItem* item = new QListWidgetItem(QString::fromStdString(disassembly)); - if (addr == pc) { - item->setBackground(Qt::darkGreen); - } - disasmListWidget->addItem(item); - } else - disasmListWidget->addItem(QString::fromStdString(fmt::format("{:08X} | ???", addr))); - } - - disasmListWidget->setCurrentRow(currentRow); -} - -void CPUDebugger::scrollToPC() { - u32 pc = emu->getCPU().getReg(15); - verticalScrollBar->setValue(pc); -} - -void CPUDebugger::updateRegisters() { - auto& cpu = emu->getCPU(); - const std::span gprs = cpu.regs(); - const std::span fprs = cpu.fprs(); - const u32 pc = gprs[15]; - const u32 cpsr = cpu.getCPSR(); - const u32 fpscr = cpu.getFPSCR(); - - std::string text = ""; - text.reserve(2048); - - text += fmt::format("PC: {:08X}\nCPSR: {:08X}\nFPSCR: {:08X}\n", pc, cpsr, fpscr); - - text += "\nGeneral Purpose Registers\n"; - for (int i = 0; i < 10; i++) { - text += fmt::format("r{:01d}: 0x{:08X}\n", i, gprs[i]); - } - for (int i = 10; i < 16; i++) { - text += fmt::format("r{:02d}: 0x{:08X}\n", i, gprs[i]); - } - - text += "\nFloating Point Registers\n"; - for (int i = 0; i < 10; i++) { - text += fmt::format("f{:01d}: {:f}\n", i, Helpers::bit_cast(fprs[i])); - } - for (int i = 10; i < 32; i++) { - text += fmt::format("f{:01d}: {:f}\n", i, Helpers::bit_cast(fprs[i])); - } - - registerTextEdit->setPlainText(QString::fromStdString(text)); -} - -bool CPUDebugger::eventFilter(QObject* obj, QEvent* event) { - // Forward scroll events from the list widget to the scrollbar - if (obj == disasmListWidget && event->type() == QEvent::Wheel) { - QWheelEvent* wheelEvent = (QWheelEvent*)event; - - int wheelSteps = wheelEvent->angleDelta().y() / 60; - int newScrollValue = verticalScrollBar->value() - wheelSteps; - newScrollValue = qBound(verticalScrollBar->minimum(), newScrollValue, verticalScrollBar->maximum()); - verticalScrollBar->setValue(newScrollValue); - - return true; - } - - return QWidget::eventFilter(obj, event); -} - -void CPUDebugger::showEvent(QShowEvent* event) { - QWidget::showEvent(event); - - enable(); -} - -// Scroll 1 instruction up or down when the arrow keys are pressed and we're at the edge of the disassembly list -void CPUDebugger::keyPressEvent(QKeyEvent* event) { - constexpr usize instructionSize = sizeof(u32); - - if (event->key() == Qt::Key_Up) { - verticalScrollBar->setValue(verticalScrollBar->value() - instructionSize); - } else if (event->key() == Qt::Key_Down) { - verticalScrollBar->setValue(verticalScrollBar->value() + instructionSize); - } else { - QWidget::keyPressEvent(event); - } -} - -void CPUDebugger::resizeEvent(QResizeEvent* event) { - QWidget::resizeEvent(event); - disabledOverlay->resize(event->size()); - verticalScrollBar->setPageStep(getLinesInViewport(disasmListWidget)); - - update(); -} diff --git a/src/panda_qt/dsp_debugger.cpp b/src/panda_qt/dsp_debugger.cpp deleted file mode 100644 index 3cb1c0fa..00000000 --- a/src/panda_qt/dsp_debugger.cpp +++ /dev/null @@ -1,301 +0,0 @@ -#include "panda_qt/dsp_debugger.hpp" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "audio/dsp_core.hpp" -#include "teakra/disassembler.h" - -#undef Assert -#undef UNREACHABLE -#include "teakra/impl/register.h" - -// TODO: Make this actually thread-safe by having it only work when paused -static int getLinesInViewport(QListWidget* listWidget) { - auto viewportHeight = listWidget->viewport()->height(); - QFontMetrics fm = QFontMetrics(listWidget->font()); - auto lineHeight = fm.height(); - - return int(viewportHeight / lineHeight); -} - -static std::pair getVisibleLineRange(QListWidget* listWidget, QScrollBar* scrollBar) { - int firstLine = scrollBar->value(); - int lineCount = getLinesInViewport(listWidget); - - return {firstLine, lineCount}; -} - -DSPDebugger::DSPDebugger(Emulator* emulator, QWidget* parent) : emu(emulator), QWidget(parent, Qt::Window) { - setWindowTitle(tr("DSP debugger")); - resize(1000, 600); - - QGridLayout* gridLayout = new QGridLayout(this); - QHBoxLayout* horizontalLayout = new QHBoxLayout(); - - // Set up the top line widgets - QPushButton* goToAddressButton = new QPushButton(tr("Go to address"), this); - QPushButton* goToPCButton = new QPushButton(tr("Go to PC"), this); - QCheckBox* followPCCheckBox = new QCheckBox(tr("Follow PC"), this); - addressInput = new QLineEdit(this); - - horizontalLayout->addWidget(goToAddressButton); - horizontalLayout->addWidget(goToPCButton); - horizontalLayout->addWidget(followPCCheckBox); - horizontalLayout->addWidget(addressInput); - - followPCCheckBox->setChecked(followPC); - connect(followPCCheckBox, &QCheckBox::toggled, this, [&](bool checked) { followPC = checked; }); - - addressInput->setPlaceholderText(tr("Address to jump to")); - addressInput->setMaximumWidth(150); - - gridLayout->addLayout(horizontalLayout, 0, 0); - - // Disassembly list on the left, scrollbar in the middle, register view on the right - disasmListWidget = new QListWidget(this); - gridLayout->addWidget(disasmListWidget, 1, 0); - - verticalScrollBar = new QScrollBar(Qt::Vertical, this); - gridLayout->addWidget(verticalScrollBar, 1, 1); - - registerTextEdit = new QPlainTextEdit(this); - registerTextEdit->setEnabled(true); - registerTextEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - registerTextEdit->setMaximumWidth(800); - gridLayout->addWidget(registerTextEdit, 1, 2); - - // Setup overlay for when the debugger is disabled - disabledOverlay = new DisabledWidgetOverlay(this, tr("Pause the emulator to use the DSP Debugger")); - disabledOverlay->resize(size()); // Fill the whole widget - disabledOverlay->raise(); - disabledOverlay->hide(); - - // Setup overlay for when the register widget is disabled - disabledRegisterEditOverlay = new DisabledWidgetOverlay(registerTextEdit, tr("Register view is only supported\nwith LLE DSP")); - disabledRegisterEditOverlay->resize(registerTextEdit->size()); - disabledRegisterEditOverlay->raise(); - disabledRegisterEditOverlay->hide(); - - // Use a monospace font for the disassembly to align it - QFont mono_font = QFont("Courier New"); - mono_font.setStyleHint(QFont::Monospace); - disasmListWidget->setFont(mono_font); - registerTextEdit->setFont(mono_font); - - // Forward scrolling from the list widget to our scrollbar - disasmListWidget->installEventFilter(this); - - // Annoyingly, due to a Qt limitation we can't set it to U32_MAX - verticalScrollBar->setRange(0, std::numeric_limits::max()); - verticalScrollBar->setSingleStep(8); - verticalScrollBar->setPageStep(getLinesInViewport(disasmListWidget)); - verticalScrollBar->show(); - connect(verticalScrollBar, &QScrollBar::valueChanged, this, &DSPDebugger::updateDisasm); - registerTextEdit->setReadOnly(true); - - connect(goToPCButton, &QPushButton::clicked, this, [&]() { scrollToPC(); }); - - // We have a QTimer that triggers every 500ms to update our widget when it's active - updateTimer = new QTimer(this); - connect(updateTimer, &QTimer::timeout, this, &DSPDebugger::update); - - // Go to address when the "Go to address" button is pressed, or when we press enter inside the address input box - connect(goToAddressButton, &QPushButton::clicked, this, [&]() { - QString text = addressInput->text().trimmed(); - - bool validAddr = false; - u32 addr = text.toUInt(&validAddr, 16); // Parse address as hex - if (validAddr) { - verticalScrollBar->setValue(addr); - } else { - addressInput->setText(tr("Invalid hexadecimal address")); - } - }); - connect(addressInput, &QLineEdit::returnPressed, goToAddressButton, &QPushButton::click); - - disable(); - hide(); -} - -void DSPDebugger::enable() { - enabled = true; - - disabledOverlay->hide(); - scrollToPC(); - - // Update the widget every 500ms - updateTimer->start(500); - update(); -} - -void DSPDebugger::disable() { - enabled = false; - - updateTimer->stop(); - disabledOverlay->show(); -} - -void DSPDebugger::update() { - if (enabled) { - if (followPC) { - scrollToPC(); - } - - updateDisasm(); - updateRegisters(); - } -} - -void DSPDebugger::updateDisasm() { - int currentRow = disasmListWidget->currentRow(); - disasmListWidget->clear(); - - auto [firstLine, lineCount] = getVisibleLineRange(disasmListWidget, verticalScrollBar); - const u32 startPC = firstLine; - - auto dsp = emu->getDSP(); - auto dspRam = dsp->getDspMemory(); - - auto& mem = emu->getMemory(); - u32 pc = getPC(); - - std::string disassembly; - - for (u32 addr = startPC, instructionCount = 0; instructionCount < lineCount; instructionCount++) { - const u16 instruction = dsp->readProgramWord(addr); - const bool needExpansion = Teakra::Disassembler::NeedExpansion(instruction); - - const u16 expansion = needExpansion ? dsp->readProgramWord(addr + 2) : u16(0); - - std::string disassembly = Teakra::Disassembler::Do(instruction, expansion); - disassembly = fmt::format("{:08X} | {}", addr, disassembly); - - QListWidgetItem* item = new QListWidgetItem(QString::fromStdString(disassembly)); - if (addr == pc) { - item->setBackground(Qt::darkGreen); - } - - disasmListWidget->addItem(item); - addr += needExpansion ? sizeof(u32) : sizeof(u16); - } - - disasmListWidget->setCurrentRow(currentRow); -} - -// This is only supported on the Teakra core, as other cores don't actually have a register contexts -u32 DSPDebugger::getPC() { - auto dsp = emu->getDSP(); - auto dspType = dsp->getType(); - - if (dspType == Audio::DSPCore::Type::Teakra) { - auto regs = (Teakra::RegisterState*)dsp->getRegisters(); - return regs->pc | (u32(regs->prpage) << 18); - } else { - return 0; - } -} - -void DSPDebugger::scrollToPC() { - u32 pc = getPC(); - verticalScrollBar->setValue(pc); -} - -void DSPDebugger::updateRegisters() { - auto dsp = emu->getDSP(); - auto dspType = dsp->getType(); - - if (dspType == Audio::DSPCore::Type::Teakra) { - std::string text = ""; - text.reserve(4096); - - auto regs = (Teakra::RegisterState*)dsp->getRegisters(); - text += fmt::format( - "PC: 0x{:05X}\nProgram Page: 0x{:01X}\nStack Pointer: 0x{:04X}\n", regs->pc & 0x3FFFF, regs->prpage & 0xF, regs->sp - ); - - text += "\nGeneral Purpose Registers\n"; - for (int i = 0; i < 8; i++) { - text += fmt::format("r{:01d}: 0x{:08X}\n", i, regs->r[i]); - } - - text += "\nAccumulators (40-bit)\n"; - text += fmt::format("a0: 0x{:010X}\n", regs->a[0] & 0xFFFFFFFFFFull); - text += fmt::format("a1: 0x{:010X}\n", regs->a[1] & 0xFFFFFFFFFFull); - text += fmt::format("b0: 0x{:010X}\n", regs->b[0] & 0xFFFFFFFFFFull); - text += fmt::format("b1: 0x{:010X}\n", regs->b[1] & 0xFFFFFFFFFFull); - text += fmt::format("a1s: 0x{:010X}\n", regs->a1s & 0xFFFFFFFFFFull); - text += fmt::format("b1s: 0x{:010X}\n", regs->b1s & 0xFFFFFFFFFFull); - - text += "\nMultiplication Unit\n"; - text += fmt::format("x0: 0x{:04X}\n", regs->x[0]); - text += fmt::format("x1: 0x{:04X}\n", regs->x[1]); - text += fmt::format("y0: 0x{:04X}\n", regs->y[0]); - text += fmt::format("y1: 0x{:04X}\n", regs->y[1]); - text += fmt::format("p0: 0x{:08X}\n", regs->p[0]); - text += fmt::format("p1: 0x{:08X}\n", regs->p[1]); - - text += "\nOther Registers\n"; - text += fmt::format("mixp: 0x{:04X}\n", regs->mixp); - text += fmt::format("sv: 0x{:04X}\n", regs->sv); - text += fmt::format("Shift mode: {}\n", regs->s ? "Logic" : "Arithmetic"); - - registerTextEdit->setPlainText(QString::fromStdString(text)); - disabledRegisterEditOverlay->hide(); - } else { - registerTextEdit->setPlainText(QString::fromStdString("")); - disabledRegisterEditOverlay->show(); - } -} - -bool DSPDebugger::eventFilter(QObject* obj, QEvent* event) { - // Forward scroll events from the list widget to the scrollbar - if (obj == disasmListWidget && event->type() == QEvent::Wheel) { - QWheelEvent* wheelEvent = (QWheelEvent*)event; - - int wheelSteps = wheelEvent->angleDelta().y() / 60; - int newScrollValue = verticalScrollBar->value() - wheelSteps; - newScrollValue = qBound(verticalScrollBar->minimum(), newScrollValue, verticalScrollBar->maximum()); - verticalScrollBar->setValue(newScrollValue); - - return true; - } - - return QWidget::eventFilter(obj, event); -} - -void DSPDebugger::showEvent(QShowEvent* event) { - QWidget::showEvent(event); - - enable(); -} - -// Scroll 1 instruction up or down when the arrow keys are pressed and we're at the edge of the disassembly list -void DSPDebugger::keyPressEvent(QKeyEvent* event) { - constexpr usize instructionSize = sizeof(u16); - - if (event->key() == Qt::Key_Up) { - verticalScrollBar->setValue(verticalScrollBar->value() - instructionSize); - } else if (event->key() == Qt::Key_Down) { - verticalScrollBar->setValue(verticalScrollBar->value() + instructionSize); - } else { - QWidget::keyPressEvent(event); - } -} - -void DSPDebugger::resizeEvent(QResizeEvent* event) { - QWidget::resizeEvent(event); - disabledOverlay->resize(event->size()); - disabledRegisterEditOverlay->resize(registerTextEdit->size()); - - verticalScrollBar->setPageStep(getLinesInViewport(disasmListWidget)); - update(); -} \ No newline at end of file diff --git a/src/panda_qt/elided_label.cpp b/src/panda_qt/elided_label.cpp deleted file mode 100644 index f15cf11d..00000000 --- a/src/panda_qt/elided_label.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "panda_qt/elided_label.hpp" - -// Based on https://stackoverflow.com/questions/7381100/text-overflow-for-a-qlabel-s-text-rendering-in-qt -ElidedLabel::ElidedLabel(Qt::TextElideMode elideMode, QWidget* parent) : ElidedLabel("", elideMode, parent) {} - -ElidedLabel::ElidedLabel(QString text, Qt::TextElideMode elideMode, QWidget* parent) : QLabel(parent) { - m_elideMode = elideMode; - setText(text); -} - -void ElidedLabel::setText(QString text) { - m_text = text; - updateText(); -} - -void ElidedLabel::resizeEvent(QResizeEvent* event) { - QLabel::resizeEvent(event); - updateText(); -} - -void ElidedLabel::updateText() { - QFontMetrics metrics(font()); - QString elided = metrics.elidedText(m_text, m_elideMode, width()); - QLabel::setText(elided); -} \ No newline at end of file diff --git a/src/panda_qt/input_window.cpp b/src/panda_qt/input_window.cpp deleted file mode 100644 index 99d5a58e..00000000 --- a/src/panda_qt/input_window.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "panda_qt/input_window.hpp" - -#include -#include -#include -#include -#include - -#include "input_mappings.hpp" -#include "services/hid.hpp" - -InputWindow::InputWindow(QWidget* parent) : QDialog(parent) { - auto mainLayout = new QVBoxLayout(this); - - QStringList actions = { - "A", - "B", - "X", - "Y", - "L", - "R", - "ZL", - "ZR", - "Start", - "Select", - "D-Pad Up", - "D-Pad Down", - "D-Pad Left", - "D-Pad Right", - "CirclePad Up", - "CirclePad Down", - "CirclePad Left", - "CirclePad Right", - }; - - for (const QString& action : actions) { - auto row = new QHBoxLayout(); - row->addWidget(new QLabel(action)); - - auto button = new QPushButton(tr("Not set")); - buttonMap[action] = button; - keyMappings[action] = QKeySequence(); - - connect(button, &QPushButton::clicked, this, [=, this]() { startKeyCapture(action); }); - - row->addWidget(button); - mainLayout->addLayout(row); - } - - auto resetButton = new QPushButton(tr("Reset Defaults")); - connect(resetButton, &QPushButton::pressed, this, [&]() { - // Restore the keymappings to the default ones for Qt - auto defaultMappings = InputMappings::defaultKeyboardMappings(); - loadFromMappings(defaultMappings); - - emit mappingsChanged(); - }); - - mainLayout->addWidget(resetButton); - installEventFilter(this); -} - -void InputWindow::startKeyCapture(const QString& action) { - waitingForAction = action; - grabKeyboard(); -} - -bool InputWindow::eventFilter(QObject* obj, QEvent* event) { - // If we're waiting for a button to be inputted, handle the keypress - if (!waitingForAction.isEmpty() && event->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(event); - QKeySequence key(keyEvent->key()); - - // If this key is already bound to something else, unbind it - for (auto it = keyMappings.begin(); it != keyMappings.end(); ++it) { - if (it.key() != waitingForAction && it.value() == key) { - it.value() = QKeySequence(); - buttonMap[it.key()]->setText(tr("Not set")); - break; - } - } - - keyMappings[waitingForAction] = key; - buttonMap[waitingForAction]->setText(key.toString()); - - releaseKeyboard(); - waitingForAction.clear(); - - emit mappingsChanged(); - return true; - } - - return false; -} - -void InputWindow::loadFromMappings(const InputMappings& mappings) { - for (const auto& action : buttonMap.keys()) { - u32 key = HID::Keys::nameToKey(action.toStdString()); - - for (const auto& [scancode, mappedKey] : mappings) { - if (mappedKey == key) { - QKeySequence qkey(scancode); - keyMappings[action] = qkey; - buttonMap[action]->setText(qkey.toString()); - break; - } - } - } -} - -void InputWindow::applyToMappings(InputMappings& mappings) const { - // Clear existing keyboard mappings before mapping the buttons - mappings = InputMappings(); - - for (const auto& action : keyMappings.keys()) { - const QKeySequence& qkey = keyMappings[action]; - - if (!qkey.isEmpty()) { - InputMappings::Scancode scancode = qkey[0].key(); - u32 key = HID::Keys::nameToKey(action.toStdString()); - - if (key != HID::Keys::Null) { - mappings.setMapping(scancode, key); - } - } - } -} \ No newline at end of file diff --git a/src/panda_qt/main.cpp b/src/panda_qt/main.cpp deleted file mode 100644 index 0574ac68..00000000 --- a/src/panda_qt/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -#include "panda_qt/main_window.hpp" - -int main(int argc, char *argv[]) { - QApplication app(argc, argv); - MainWindow window(&app); - - return app.exec(); -} diff --git a/src/panda_qt/main_window.cpp b/src/panda_qt/main_window.cpp deleted file mode 100644 index f74f2061..00000000 --- a/src/panda_qt/main_window.cpp +++ /dev/null @@ -1,815 +0,0 @@ -#include "panda_qt/main_window.hpp" - -#include -#include -#include -#include -#include -#include - -#include "cheats.hpp" -#include "input_mappings.hpp" -#include "panda_qt/dsp_debugger.hpp" -#include "panda_qt/screen/screen.hpp" -#include "sdl_sensors.hpp" -#include "services/dsp.hpp" -#include "version.hpp" - -MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent), keyboardMappings(InputMappings()) { - emu = new Emulator(); - - loadTranslation(); - setWindowTitle(tr("Alber")); - - // Enable drop events for loading ROMs - setAcceptDrops(true); - resize(800, 240 * 4); - show(); - - const RendererType rendererType = emu->getConfig().rendererType; - usingGL = (rendererType == RendererType::OpenGL || rendererType == RendererType::Software || rendererType == RendererType::Null); - usingVk = (rendererType == RendererType::Vulkan); - usingMtl = (rendererType == RendererType::Metal); - - ScreenWidget::API api = ScreenWidget::API::OpenGL; - if (usingVk) - api = ScreenWidget::API::Vulkan; - else if (usingMtl) - api = ScreenWidget::API::Metal; - - // We pass a callback to the screen widget that will be triggered every time we resize the screen - screen = ScreenWidget::getWidget(api, [this](u32 width, u32 height) { handleScreenResize(width, height); }, this); - setCentralWidget(screen); - - appRunning = true; - // Set our menu bar up - menuBar = new QMenuBar(nullptr); - - // Create menu bar menus - auto fileMenu = menuBar->addMenu(tr("File")); - auto emulationMenu = menuBar->addMenu(tr("Emulation")); - auto toolsMenu = menuBar->addMenu(tr("Tools")); - auto aboutMenu = menuBar->addMenu(tr("About")); - - // Create and bind actions for them - auto loadGameAction = fileMenu->addAction(tr("Load game")); - auto loadLuaAction = fileMenu->addAction(tr("Load Lua script")); - auto openAppFolderAction = fileMenu->addAction(tr("Open Panda3DS folder")); - - connect(loadGameAction, &QAction::triggered, this, &MainWindow::selectROM); - connect(loadLuaAction, &QAction::triggered, this, &MainWindow::selectLuaFile); - connect(openAppFolderAction, &QAction::triggered, this, [this]() { - QString path = QString::fromStdU16String(emu->getAppDataRoot().u16string()); - QDesktopServices::openUrl(QUrl::fromLocalFile(path)); - }); - - auto pauseAction = emulationMenu->addAction(tr("Pause")); - auto resumeAction = emulationMenu->addAction(tr("Resume")); - auto resetAction = emulationMenu->addAction(tr("Reset")); - auto configureAction = emulationMenu->addAction(tr("Configure")); - configureAction->setMenuRole(QAction::PreferencesRole); - - connect(pauseAction, &QAction::triggered, this, [this]() { sendMessage(EmulatorMessage{.type = MessageType::Pause}); }); - connect(resumeAction, &QAction::triggered, this, [this]() { sendMessage(EmulatorMessage{.type = MessageType::Resume}); }); - connect(resetAction, &QAction::triggered, this, [this]() { sendMessage(EmulatorMessage{.type = MessageType::Reset}); }); - connect(configureAction, &QAction::triggered, this, [this]() { configWindow->show(); }); - - auto dumpRomFSAction = toolsMenu->addAction(tr("Dump RomFS")); - auto luaEditorAction = toolsMenu->addAction(tr("Open Lua Editor")); - auto cheatsEditorAction = toolsMenu->addAction(tr("Open Cheats Editor")); - auto patchWindowAction = toolsMenu->addAction(tr("Open Patch Window")); - auto shaderEditorAction = toolsMenu->addAction(tr("Open Shader Editor")); - auto cpuDebuggerAction = toolsMenu->addAction(tr("Open CPU Debugger")); - auto dspDebuggerAction = toolsMenu->addAction(tr("Open DSP Debugger")); - auto threadDebuggerAction = toolsMenu->addAction(tr("Open Thread Debugger")); - auto dumpDspFirmware = toolsMenu->addAction(tr("Dump loaded DSP firmware")); - - connect(dumpRomFSAction, &QAction::triggered, this, &MainWindow::dumpRomFS); - connect(luaEditorAction, &QAction::triggered, this, [this]() { luaEditor->show(); }); - connect(shaderEditorAction, &QAction::triggered, this, [this]() { shaderEditor->show(); }); - connect(cheatsEditorAction, &QAction::triggered, this, [this]() { cheatsEditor->show(); }); - connect(patchWindowAction, &QAction::triggered, this, [this]() { patchWindow->show(); }); - connect(cpuDebuggerAction, &QAction::triggered, this, [this]() { cpuDebugger->show(); }); - connect(dspDebuggerAction, &QAction::triggered, this, [this]() { dspDebugger->show(); }); - connect(threadDebuggerAction, &QAction::triggered, this, [this]() { threadDebugger->show(); }); - connect(dumpDspFirmware, &QAction::triggered, this, &MainWindow::dumpDspFirmware); - - connect(this, &MainWindow::emulatorPaused, this, [this]() { threadDebugger->update(); }, Qt::BlockingQueuedConnection); - - auto aboutAction = aboutMenu->addAction(tr("About Panda3DS")); - aboutAction->setMenuRole(QAction::AboutRole); - connect(aboutAction, &QAction::triggered, this, &MainWindow::showAboutMenu); - - setMenuBar(menuBar); - - emu->setOutputSize(screen->surfaceWidth, screen->surfaceHeight); - - // Set up misc objects - aboutWindow = new AboutWindow(nullptr); - cheatsEditor = new CheatsWindow(emu, {}, this); - patchWindow = new PatchWindow(this); - luaEditor = new TextEditorWindow(this, "script.lua", ""); - shaderEditor = new ShaderEditorWindow(this, "shader.glsl", ""); - threadDebugger = new ThreadDebugger(emu, this); - cpuDebugger = new CPUDebugger(emu, this); - dspDebugger = new DSPDebugger(emu, this); - - shaderEditor->setEnable(emu->getRenderer()->supportsShaderReload()); - if (shaderEditor->supported) { - shaderEditor->setText(emu->getRenderer()->getUbershader()); - } - - configWindow = new ConfigWindow( - [&]() { - EmulatorMessage message{.type = MessageType::UpdateConfig}; - sendMessage(message); - }, - [&]() { return this; }, emu->getConfig(), this - ); - - loadKeybindings(); - - connect(configWindow->getInputWindow(), &InputWindow::mappingsChanged, this, [&]() { - keybindingsChanged = true; - configWindow->getInputWindow()->applyToMappings(keyboardMappings); - }); - - auto args = QCoreApplication::arguments(); - if (args.size() > 1) { - auto romPath = std::filesystem::current_path() / args.at(1).toStdU16String(); - if (!emu->loadROM(romPath)) { - // For some reason just .c_str() doesn't show the proper path - Helpers::warn("Failed to load ROM file: %s", romPath.string().c_str()); - } - } - - // Handle UI configs before setting up the emulator thread - { - auto& config = emu->getConfig(); - auto& windowSettings = config.windowSettings; - - if (windowSettings.rememberPosition) { - setGeometry(windowSettings.x, windowSettings.y, windowSettings.width, config.windowSettings.height); - } - - if (config.printAppVersion) { - printf("Welcome to Panda3DS v%s!\n", PANDA3DS_VERSION); - } - - screen->reloadScreenLayout(config.screenLayout, config.topScreenSize); - } - - // The emulator graphics context for the thread should be initialized in the emulator thread due to how GL contexts work - emuThread = std::thread([this]() { - switch (screen->api) { - case ScreenWidget::API::OpenGL: { - // Make GL context current for this thread, enable VSync - GL::Context* glContext = screen->getGLContext(); - glContext->MakeCurrent(); - glContext->SetSwapInterval(emu->getConfig().vsyncEnabled ? 1 : 0); - - if (glContext->IsGLES()) { - emu->getRenderer()->setupGLES(); - } - - emu->initGraphicsContext(glContext); - break; - } - - case ScreenWidget::API::Metal: { - emu->initGraphicsContext(nullptr); - emu->getRenderer()->setMTKLayer(screen->getMTKLayer()); - break; - } - - case ScreenWidget::API::Vulkan: Helpers::panic("Vulkan on Qt is currently WIP, try the SDL frontend instead!"); break; - default: Helpers::panic("Unsupported graphics backend for Qt frontend!"); break; - } - - // We have to initialize controllers on the same thread they'll be polled in - initControllers(); - emuThreadMainLoop(); - }); -} - -void MainWindow::emuThreadMainLoop() { - while (appRunning) { - { - std::unique_lock lock(messageQueueMutex); - - // Dispatch all messages in the message queue - if (!messageQueue.empty()) { - for (const auto& msg : messageQueue) { - dispatchMessage(msg); - } - - messageQueue.clear(); - } - } - - emu->runFrame(); - pollControllers(); - - if (emu->romType != ROMType::None) { - emu->getServiceManager().getHID().updateInputs(emu->getTicks()); - } - - swapEmuBuffer(); - } - - // Unbind GL context if we're using GL, otherwise some setups seem to be unable to join this thread - if (usingGL) { - screen->getGLContext()->DoneCurrent(); - } -} - -void MainWindow::swapEmuBuffer() { - if (usingGL) { - screen->getGLContext()->SwapBuffers(); - } else if (usingMtl) { - // The renderer itself calls presentDrawable to swap buffers on Metal - } else { - Helpers::panic("[Qt] Don't know how to swap buffers for the current rendering backend :("); - } -} - -void MainWindow::selectROM() { - auto path = QFileDialog::getOpenFileName( - this, tr("Select 3DS ROM to load"), QString::fromStdU16String(emu->getConfig().defaultRomPath.u16string()), - tr("Nintendo 3DS ROMs (*.3ds *.cci *.cxi *.app *.ncch *.3dsx *.elf *.axf)") - ); - - if (!path.isEmpty()) { - std::filesystem::path* p = new std::filesystem::path(path.toStdU16String()); - - EmulatorMessage message{.type = MessageType::LoadROM}; - message.path.p = p; - sendMessage(message); - } -} - -void MainWindow::selectLuaFile() { - auto path = QFileDialog::getOpenFileName(this, tr("Select Lua script to load"), "", tr("Lua scripts (*.lua *.txt)")); - - if (!path.isEmpty()) { - std::ifstream file(std::filesystem::path(path.toStdU16String()), std::ios::in); - - if (file.fail()) { - printf("Failed to load selected lua file\n"); - return; - } - - // Read whole file into an std::string string - // Get file size, preallocate std::string to avoid furthermemory allocations - std::string code; - file.seekg(0, std::ios::end); - code.resize(file.tellg()); - - // Rewind and read the whole file - file.seekg(0, std::ios::beg); - file.read(&code[0], code.size()); - file.close(); - - loadLuaScript(code); - // Copy the Lua script to the Lua editor - luaEditor->setText(code); - } -} - -// Stop emulator thread when the main window closes -void MainWindow::closeEvent(QCloseEvent* event) { - appRunning = false; // Set our running atomic to false in order to make the emulator thread stop, and join it - - if (emuThread.joinable()) { - emuThread.join(); - } - - // Cache window position/size in config file to restore next time - const QRect& windowGeometry = geometry(); - auto& windowConfig = emu->getConfig().windowSettings; - - windowConfig.x = windowGeometry.x(); - windowConfig.y = windowGeometry.y(); - windowConfig.width = windowGeometry.width(); - windowConfig.height = windowGeometry.height(); -} - -// Cleanup when the main window closes -MainWindow::~MainWindow() { - if (keybindingsChanged) { - saveKeybindings(); - } - - delete emu; - delete menuBar; - delete aboutWindow; - delete configWindow; - delete cheatsEditor; - delete screen; - delete luaEditor; -} - -// Send a message to the emulator thread. Lock the mutex and just push back to the vector. -void MainWindow::sendMessage(const EmulatorMessage& message) { - std::unique_lock lock(messageQueueMutex); - messageQueue.push_back(message); -} - -void MainWindow::dumpRomFS() { - auto folder = QFileDialog::getExistingDirectory( - this, tr("Select folder to dump RomFS files to"), "", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks - ); - - if (folder.isEmpty()) { - return; - } - std::filesystem::path path(folder.toStdU16String()); - - messageQueueMutex.lock(); - RomFS::DumpingResult res = emu->dumpRomFS(path); - messageQueueMutex.unlock(); - - switch (res) { - case RomFS::DumpingResult::Success: break; // Yay! - case RomFS::DumpingResult::InvalidFormat: { - QMessageBox messageBox( - QMessageBox::Icon::Warning, tr("Invalid format for RomFS dumping"), - tr("The currently loaded app is not in a format that supports RomFS") - ); - - QAbstractButton* button = messageBox.addButton(tr("OK"), QMessageBox::ButtonRole::YesRole); - button->setIcon(QIcon(":/docs/img/rsob_icon.png")); - messageBox.exec(); - break; - } - - case RomFS::DumpingResult::NoRomFS: - QMessageBox::warning(this, tr("No RomFS found"), tr("No RomFS partition was found in the loaded app")); - break; - } -} - -void MainWindow::dumpDspFirmware() { - auto file = QFileDialog::getSaveFileName(this, tr("Select file"), "", tr("DSP firmware file (*.cdc)")); - - if (file.isEmpty()) { - return; - } - std::filesystem::path path(file.toStdU16String()); - - messageQueueMutex.lock(); - auto res = emu->getServiceManager().getDSP().dumpComponent(path); - messageQueueMutex.unlock(); - - switch (res) { - case DSPService::ComponentDumpResult::Success: break; - case DSPService::ComponentDumpResult::NotLoaded: { - QMessageBox messageBox( - QMessageBox::Icon::Warning, tr("No DSP firmware loaded"), tr("The currently loaded app has not uploaded a firmware to the DSP") - ); - - QAbstractButton* button = messageBox.addButton(tr("OK"), QMessageBox::ButtonRole::YesRole); - button->setIcon(QIcon(":/docs/img/rsob_icon.png")); - messageBox.exec(); - break; - } - - case DSPService::ComponentDumpResult::FileFailure: { - QMessageBox messageBox( - QMessageBox::Icon::Warning, tr("Failed to open output file"), - tr("The currently loaded DSP firmware could not be written to the selected file. Please make sure you have permission to access this " - "file") - ); - - QAbstractButton* button = messageBox.addButton(tr("OK"), QMessageBox::ButtonRole::YesRole); - button->setIcon(QIcon(":/docs/img/rstarstruck_icon.png")); - messageBox.exec(); - break; - } - } -} - -void MainWindow::showAboutMenu() { - AboutWindow about(this); - about.exec(); -} - -void MainWindow::dispatchMessage(const EmulatorMessage& message) { - switch (message.type) { - case MessageType::LoadROM: - emu->loadROM(*message.path.p); - // Clean up the allocated path - delete message.path.p; - break; - - case MessageType::LoadLuaScript: - emu->getLua().loadString(*message.string.str); - delete message.string.str; - break; - - case MessageType::EditCheat: { - u32 handle = message.cheat.c->handle; - const std::vector& cheat = message.cheat.c->cheat; - const std::function& callback = message.cheat.c->callback; - bool isEditing = handle != Cheats::badCheatHandle; - if (isEditing) { - emu->getCheats().removeCheat(handle); - u32 handle = emu->getCheats().addCheat(cheat.data(), cheat.size()); - } else { - u32 handle = emu->getCheats().addCheat(cheat.data(), cheat.size()); - callback(handle); - } - delete message.cheat.c; - } break; - - case MessageType::Resume: emu->resume(); break; - case MessageType::Pause: - emu->pause(); - emit emulatorPaused(); - break; - - case MessageType::TogglePause: - emu->togglePause(); - if (!emu->running) { - emit emulatorPaused(); - }; - break; - - case MessageType::Reset: emu->reset(Emulator::ReloadOption::Reload); break; - case MessageType::PressKey: emu->getServiceManager().getHID().pressKey(message.key.key); break; - case MessageType::ReleaseKey: emu->getServiceManager().getHID().releaseKey(message.key.key); break; - - // Track whether we're controlling the analog stick with our controller and update the CirclePad X/Y values in HID - // Controllers are polled on the emulator thread, so this message type is only used when the circlepad is changed via keyboard input - case MessageType::SetCirclePadX: { - keyboardAnalogX = message.circlepad.value != 0; - emu->getServiceManager().getHID().setCirclepadX(message.circlepad.value); - break; - } - - case MessageType::SetCirclePadY: { - keyboardAnalogY = message.circlepad.value != 0; - emu->getServiceManager().getHID().setCirclepadY(message.circlepad.value); - break; - } - - case MessageType::PressTouchscreen: - emu->getServiceManager().getHID().setTouchScreenPress(message.touchscreen.x, message.touchscreen.y); - break; - case MessageType::ReleaseTouchscreen: emu->getServiceManager().getHID().releaseTouchScreen(); break; - - case MessageType::ReloadUbershader: - emu->getRenderer()->setUbershader(*message.string.str); - delete message.string.str; - break; - - case MessageType::SetScreenSize: { - const u32 width = message.screenSize.width; - const u32 height = message.screenSize.height; - screen->resizeSurface(width, height); - emu->setOutputSize(width, height); - break; - } - - case MessageType::UpdateConfig: { - auto& emuConfig = emu->getConfig(); - auto& newConfig = configWindow->getConfig(); - // If the screen layout changed, we have to notify the emulator & the screen widget - bool reloadScreenLayout = (emuConfig.screenLayout != newConfig.screenLayout || emuConfig.topScreenSize != newConfig.topScreenSize); - - emuConfig = newConfig; - emu->reloadSettings(); - - if (reloadScreenLayout) { - emu->reloadScreenLayout(); - screen->reloadScreenLayout(newConfig.screenLayout, newConfig.topScreenSize); - } - - // Save new settings to disk - emuConfig.save(); - break; - } - } -} - -void MainWindow::keyPressEvent(QKeyEvent* event) { - auto pressKey = [this](u32 key) { - EmulatorMessage message{.type = MessageType::PressKey}; - message.key.key = key; - sendMessage(message); - }; - - auto setCirclePad = [this](MessageType type, s16 value) { - EmulatorMessage message{.type = type}; - message.circlepad.value = value; - sendMessage(message); - }; - - u32 key = keyboardMappings.getMapping(event->key()); - if (key != HID::Keys::Null) { - switch (key) { - case HID::Keys::CirclePadUp: setCirclePad(MessageType::SetCirclePadY, 0x9C); break; - case HID::Keys::CirclePadDown: setCirclePad(MessageType::SetCirclePadY, -0x9C); break; - case HID::Keys::CirclePadLeft: setCirclePad(MessageType::SetCirclePadX, -0x9C); break; - case HID::Keys::CirclePadRight: setCirclePad(MessageType::SetCirclePadX, 0x9C); break; - - default: pressKey(key); break; - } - } else { - switch (event->key()) { - case Qt::Key_F4: sendMessage(EmulatorMessage{.type = MessageType::TogglePause}); break; - case Qt::Key_F5: sendMessage(EmulatorMessage{.type = MessageType::Reset}); break; - } - } -} - -void MainWindow::keyReleaseEvent(QKeyEvent* event) { - auto releaseKey = [this](u32 key) { - EmulatorMessage message{.type = MessageType::ReleaseKey}; - message.key.key = key; - sendMessage(message); - }; - - auto releaseCirclePad = [this](MessageType type) { - EmulatorMessage message{.type = type}; - message.circlepad.value = 0; - sendMessage(message); - }; - - u32 key = keyboardMappings.getMapping(event->key()); - if (key != HID::Keys::Null) { - switch (key) { - case HID::Keys::CirclePadUp: releaseCirclePad(MessageType::SetCirclePadY); break; - case HID::Keys::CirclePadDown: releaseCirclePad(MessageType::SetCirclePadY); break; - case HID::Keys::CirclePadLeft: releaseCirclePad(MessageType::SetCirclePadX); break; - case HID::Keys::CirclePadRight: releaseCirclePad(MessageType::SetCirclePadX); break; - - default: releaseKey(key); break; - } - } -} - -void MainWindow::mousePressEvent(QMouseEvent* event) { - if (event->button() == Qt::MouseButton::LeftButton) { - // We handle actual mouse press & movement logic inside the mouseMoveEvent handler - handleTouchscreenPress(event); - } -} - -void MainWindow::mouseMoveEvent(QMouseEvent* event) { - if (event->buttons().testFlag(Qt::MouseButton::LeftButton)) { - handleTouchscreenPress(event); - } -} - -void MainWindow::mouseReleaseEvent(QMouseEvent* event) { - if (event->button() == Qt::MouseButton::LeftButton) { - sendMessage(EmulatorMessage{.type = MessageType::ReleaseTouchscreen}); - } -} - -void MainWindow::handleTouchscreenPress(QMouseEvent* event) { - const QPointF clickPos = event->globalPosition(); - const QPointF widgetPos = screen->mapFromGlobal(clickPos); - - const auto& coords = screen->screenCoordinates; - const float bottomScreenX = float(coords.bottomScreenX); - const float bottomScreenY = float(coords.bottomScreenY); - const float bottomScreenWidth = float(coords.bottomScreenWidth); - const float bottomScreenHeight = float(coords.bottomScreenHeight); - - // Press is inside the screen area - if (widgetPos.x() >= bottomScreenX && widgetPos.x() < bottomScreenX + bottomScreenWidth && widgetPos.y() >= bottomScreenY && - widgetPos.y() < bottomScreenY + bottomScreenHeight) { - // Map widget position to 3DS touchscreen coordinates, with (0, 0) = top left of touchscreen - float relX = (widgetPos.x() - bottomScreenX) / bottomScreenWidth; - float relY = (widgetPos.y() - bottomScreenY) / bottomScreenHeight; - - u16 x_converted = u16(std::clamp(relX * ScreenLayout::BOTTOM_SCREEN_WIDTH, 0.f, float(ScreenLayout::BOTTOM_SCREEN_WIDTH - 1))); - u16 y_converted = u16(std::clamp(relY * ScreenLayout::BOTTOM_SCREEN_HEIGHT, 0.f, float(ScreenLayout::BOTTOM_SCREEN_HEIGHT - 1))); - - EmulatorMessage message{.type = MessageType::PressTouchscreen}; - message.touchscreen.x = x_converted; - message.touchscreen.y = y_converted; - sendMessage(message); - } else { - sendMessage(EmulatorMessage{.type = MessageType::ReleaseTouchscreen}); - } -} - -void MainWindow::loadLuaScript(const std::string& code) { - EmulatorMessage message{.type = MessageType::LoadLuaScript}; - - // Make a copy of the code on the heap to send via the message queue - message.string.str = new std::string(code); - sendMessage(message); -} - -void MainWindow::reloadShader(const std::string& shader) { - EmulatorMessage message{.type = MessageType::ReloadUbershader}; - - // Make a copy of the code on the heap to send via the message queue - message.string.str = new std::string(shader); - sendMessage(message); -} - -void MainWindow::editCheat(u32 handle, const std::vector& cheat, const std::function& callback) { - EmulatorMessage message{.type = MessageType::EditCheat}; - - CheatMessage* c = new CheatMessage(); - c->handle = handle; - c->cheat = cheat; - c->callback = callback; - - message.cheat.c = c; - sendMessage(message); -} - -void MainWindow::handleScreenResize(u32 width, u32 height) { - EmulatorMessage message{.type = MessageType::SetScreenSize}; - message.screenSize.width = width; - message.screenSize.height = height; - - if (messageQueueMutex.try_lock()) { - messageQueue.push_back(message); - messageQueueMutex.unlock(); - } -} - -void MainWindow::initControllers() { - // Make SDL use consistent positional button mapping - SDL_SetHint(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS, "0"); - if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC) < 0) { - Helpers::warn("Failed to initialize SDL2 GameController: %s", SDL_GetError()); - return; - } - - if (SDL_WasInit(SDL_INIT_GAMECONTROLLER)) { - gameController = SDL_GameControllerOpen(0); - - if (gameController != nullptr) { - SDL_Joystick* stick = SDL_GameControllerGetJoystick(gameController); - gameControllerID = SDL_JoystickInstanceID(stick); - } - - setupControllerSensors(gameController); - } -} - -void MainWindow::pollControllers() { - // Update circlepad/c-stick/ZL/ZR if a controller is plugged in - if (gameController != nullptr) { - HIDService& hid = emu->getServiceManager().getHID(); - const s16 stickX = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_LEFTX); - const s16 stickY = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_LEFTY); - constexpr s16 deadzone = 3276; - constexpr s16 triggerThreshold = SDL_JOYSTICK_AXIS_MAX / 2; - - { - // Update circlepad - constexpr s16 circlepadMax = 0x9C; - constexpr s16 div = 0x8000 / circlepadMax; - - // Avoid overriding the keyboard's circlepad input - if (std::abs(stickX) < deadzone && !keyboardAnalogX) { - hid.setCirclepadX(0); - } else { - hid.setCirclepadX(stickX / div); - } - - if (std::abs(stickY) < deadzone && !keyboardAnalogY) { - hid.setCirclepadY(0); - } else { - hid.setCirclepadY(-(stickY / div)); - } - } - - const s16 l2 = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_TRIGGERLEFT); - const s16 r2 = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_TRIGGERRIGHT); - const s16 cStickX = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_RIGHTX); - const s16 cStickY = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_RIGHTY); - - hid.setKey(HID::Keys::ZL, l2 > triggerThreshold); - hid.setKey(HID::Keys::ZR, r2 > triggerThreshold); - - // Update C-Stick - // To convert from SDL coordinates, ie [-32768, 32767] to [-2048, 2047] we just divide by 8 - if (std::abs(cStickX) < deadzone) { - hid.setCStickX(IR::CirclePadPro::ButtonState::C_STICK_CENTER); - } else { - hid.setCStickX(cStickX / 8); - } - - if (std::abs(cStickY) < deadzone) { - hid.setCStickY(IR::CirclePadPro::ButtonState::C_STICK_CENTER); - } else { - hid.setCStickY(-(cStickY / 8)); - } - } - - SDL_Event event; - while (SDL_PollEvent(&event)) { - HIDService& hid = emu->getServiceManager().getHID(); - using namespace HID; - - switch (event.type) { - case SDL_CONTROLLERDEVICEADDED: - if (gameController == nullptr) { - gameController = SDL_GameControllerOpen(event.cdevice.which); - gameControllerID = event.cdevice.which; - - setupControllerSensors(gameController); - } - break; - - case SDL_CONTROLLERDEVICEREMOVED: - if (event.cdevice.which == gameControllerID) { - SDL_GameControllerClose(gameController); - gameController = nullptr; - gameControllerID = 0; - } - break; - - case SDL_CONTROLLERBUTTONUP: - case SDL_CONTROLLERBUTTONDOWN: { - if (emu->romType == ROMType::None) break; - u32 key = 0; - - switch (event.cbutton.button) { - case SDL_CONTROLLER_BUTTON_A: key = Keys::B; break; - case SDL_CONTROLLER_BUTTON_B: key = Keys::A; break; - case SDL_CONTROLLER_BUTTON_X: key = Keys::Y; break; - case SDL_CONTROLLER_BUTTON_Y: key = Keys::X; break; - case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: key = Keys::L; break; - case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: key = Keys::R; break; - case SDL_CONTROLLER_BUTTON_DPAD_LEFT: key = Keys::Left; break; - case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: key = Keys::Right; break; - case SDL_CONTROLLER_BUTTON_DPAD_UP: key = Keys::Up; break; - case SDL_CONTROLLER_BUTTON_DPAD_DOWN: key = Keys::Down; break; - case SDL_CONTROLLER_BUTTON_BACK: key = Keys::Select; break; - case SDL_CONTROLLER_BUTTON_START: key = Keys::Start; break; - } - - if (key != 0) { - if (event.cbutton.state == SDL_PRESSED) { - hid.pressKey(key); - } else { - hid.releaseKey(key); - } - } - break; - } - - case SDL_CONTROLLERSENSORUPDATE: { - if (event.csensor.sensor == SDL_SENSOR_GYRO) { - auto rotation = Sensors::SDL::convertRotation({ - event.csensor.data[0], - event.csensor.data[1], - event.csensor.data[2], - }); - - hid.setPitch(s16(rotation.x)); - hid.setRoll(s16(rotation.y)); - hid.setYaw(s16(rotation.z)); - } else if (event.csensor.sensor == SDL_SENSOR_ACCEL) { - auto accel = Sensors::SDL::convertAcceleration(event.csensor.data); - hid.setAccel(accel.x, accel.y, accel.z); - } - break; - } - } - } -} - -void MainWindow::setupControllerSensors(SDL_GameController* controller) { - bool haveGyro = SDL_GameControllerHasSensor(controller, SDL_SENSOR_GYRO) == SDL_TRUE; - bool haveAccelerometer = SDL_GameControllerHasSensor(controller, SDL_SENSOR_ACCEL) == SDL_TRUE; - - if (haveGyro) { - SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_GYRO, SDL_TRUE); - } - - if (haveAccelerometer) { - SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_ACCEL, SDL_TRUE); - } -} - -void MainWindow::loadKeybindings() { - auto mappings = InputMappings::deserialize(emu->getAppDataRoot() / "controls_qt.toml", "Qt", [](const std::string& name) { - return InputMappings::Scancode(QKeySequence(QString::fromStdString(name))[0].key()); - }); - - if (mappings.has_value()) { - keyboardMappings = *mappings; - } else { - keyboardMappings = InputMappings::defaultKeyboardMappings(); - } - - configWindow->getInputWindow()->loadFromMappings(keyboardMappings); -} - -void MainWindow::saveKeybindings() { - keyboardMappings.serialize(emu->getAppDataRoot() / "controls_qt.toml", "Qt", [](InputMappings::Scancode scancode) { - return QKeySequence(scancode).toString().toStdString(); - }); -} diff --git a/src/panda_qt/mappings.cpp b/src/panda_qt/mappings.cpp deleted file mode 100644 index b41debee..00000000 --- a/src/panda_qt/mappings.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include - -#include "input_mappings.hpp" - -InputMappings InputMappings::defaultKeyboardMappings() { - InputMappings mappings; - mappings.setMapping(Qt::Key_L, HID::Keys::A); - mappings.setMapping(Qt::Key_K, HID::Keys::B); - mappings.setMapping(Qt::Key_O, HID::Keys::X); - mappings.setMapping(Qt::Key_I, HID::Keys::Y); - mappings.setMapping(Qt::Key_Q, HID::Keys::L); - mappings.setMapping(Qt::Key_P, HID::Keys::R); - mappings.setMapping(Qt::Key_1, HID::Keys::ZL); - mappings.setMapping(Qt::Key_0, HID::Keys::ZR); - mappings.setMapping(Qt::Key_Up, HID::Keys::Up); - mappings.setMapping(Qt::Key_Down, HID::Keys::Down); - mappings.setMapping(Qt::Key_Right, HID::Keys::Right); - mappings.setMapping(Qt::Key_Left, HID::Keys::Left); - mappings.setMapping(Qt::Key_Return, HID::Keys::Start); - mappings.setMapping(Qt::Key_Backspace, HID::Keys::Select); - mappings.setMapping(Qt::Key_W, HID::Keys::CirclePadUp); - mappings.setMapping(Qt::Key_S, HID::Keys::CirclePadDown); - mappings.setMapping(Qt::Key_D, HID::Keys::CirclePadRight); - mappings.setMapping(Qt::Key_A, HID::Keys::CirclePadLeft); - - return mappings; -} \ No newline at end of file diff --git a/src/panda_qt/patch_window.cpp b/src/panda_qt/patch_window.cpp deleted file mode 100644 index 6096d89a..00000000 --- a/src/panda_qt/patch_window.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include "panda_qt/patch_window.hpp" - -#include -#include -#include -#include -#include -#include -#include - -#include "hips.hpp" -#include "io_file.hpp" - -PatchWindow::PatchWindow(QWidget* parent) : QWidget(parent, Qt::Window) { - setWindowTitle(tr("ROM patcher")); - - QVBoxLayout* layout = new QVBoxLayout; - layout->setContentsMargins(6, 6, 6, 6); - setLayout(layout); - - QWidget* inputBox = new QWidget; - QHBoxLayout* inputLayout = new QHBoxLayout; - QLabel* inputText = new QLabel(tr("Select input file")); - QPushButton* inputButton = new QPushButton(tr("Select")); - inputPathLabel = new ElidedLabel(""); - inputPathLabel->setFixedWidth(200); - - inputLayout->addWidget(inputText); - inputLayout->addWidget(inputButton); - inputLayout->addWidget(inputPathLabel); - inputBox->setLayout(inputLayout); - - QWidget* patchBox = new QWidget; - QHBoxLayout* patchLayout = new QHBoxLayout; - QLabel* patchText = new QLabel(tr("Select patch file")); - QPushButton* patchButton = new QPushButton(tr("Select")); - patchPathLabel = new ElidedLabel(""); - patchPathLabel->setFixedWidth(200); - - patchLayout->addWidget(patchText); - patchLayout->addWidget(patchButton); - patchLayout->addWidget(patchPathLabel); - patchBox->setLayout(patchLayout); - - QWidget* actionBox = new QWidget; - QHBoxLayout* actionLayout = new QHBoxLayout; - QPushButton* applyPatchButton = new QPushButton(tr("Apply patch")); - actionLayout->addWidget(applyPatchButton); - actionBox->setLayout(actionLayout); - - layout->addWidget(inputBox); - layout->addWidget(patchBox); - layout->addWidget(actionBox); - - connect(inputButton, &QPushButton::clicked, this, [this]() { - auto path = QFileDialog::getOpenFileName(this, tr("Select file to patch"), "", tr("All files (*.*)")); - inputPath = std::filesystem::path(path.toStdU16String()); - - inputPathLabel->setText(path); - }); - - connect(patchButton, &QPushButton::clicked, this, [this]() { - auto path = QFileDialog::getOpenFileName(this, tr("Select patch file"), "", tr("Patch files (*.ips *.ups *.bps)")); - patchPath = std::filesystem::path(path.toStdU16String()); - - patchPathLabel->setText(path); - }); - - connect(applyPatchButton, &QPushButton::clicked, this, [this]() { - if (inputPath.empty() || patchPath.empty()) { - displayMessage(tr("Paths not provided correctly"), tr("Please provide paths for both the input file and the patch file")); - return; - } - - // std::filesystem::path only has += and not + for reasons unknown to humanity - auto defaultPath = inputPath.parent_path() / inputPath.stem(); - defaultPath += "-patched"; - defaultPath += inputPath.extension(); - - auto path = QFileDialog::getSaveFileName(this, tr("Select file"), QString::fromStdU16String(defaultPath.u16string()), tr("All files (*.*)")); - std::filesystem::path outputPath = std::filesystem::path(path.toStdU16String()); - - if (outputPath.empty()) { - displayMessage(tr("No output path"), tr("No path was provided for the output file, no patching was done")); - return; - } - - Hips::PatchType patchType; - auto extension = patchPath.extension(); - - // Figure out what sort of patch we're dealing with - if (extension == ".ips") { - patchType = Hips::PatchType::IPS; - } else if (extension == ".ups") { - patchType = Hips::PatchType::UPS; - } else if (extension == ".bps") { - patchType = Hips::PatchType::BPS; - } else { - displayMessage(tr("Unknown patch format"), tr("Unknown format for patch file. Currently IPS, UPS and BPS are supported")); - return; - } - - // Read input and patch files into buffers - IOFile input(inputPath, "rb"); - IOFile patch(patchPath, "rb"); - - if (!input.isOpen() || !patch.isOpen()) { - displayMessage(tr("Failed to open input files"), tr("Make sure they're in a directory Panda3DS has access to")); - return; - } - - // Read the files into arrays - const auto inputSize = *input.size(); - const auto patchSize = *patch.size(); - - std::unique_ptr inputData(new uint8_t[inputSize]); - std::unique_ptr patchData(new uint8_t[patchSize]); - - input.rewind(); - patch.rewind(); - input.readBytes(inputData.get(), inputSize); - patch.readBytes(patchData.get(), patchSize); - - auto [bytes, result] = Hips::patch(inputData.get(), inputSize, patchData.get(), patchSize, patchType); - - // Write patched file - if (!bytes.empty()) { - IOFile output(outputPath, "wb"); - output.writeBytes(bytes.data(), bytes.size()); - } - - switch (result) { - case Hips::Result::Success: - displayMessage( - tr("Patching Success"), tr("Your file was patched successfully."), QMessageBox::Icon::Information, ":/docs/img/rpog_icon.png" - ); - break; - - case Hips::Result::ChecksumMismatch: - displayMessage( - tr("Checksum mismatch"), - tr("Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct") - ); - break; - - default: displayMessage(tr("Patching error"), tr("An error occured while patching")); break; - } - }); -} - -void PatchWindow::PatchWindow::displayMessage(const QString& title, const QString& message, QMessageBox::Icon icon, const char* iconPath) { - QMessageBox messageBox(icon, title, message); - QAbstractButton* button = messageBox.addButton(tr("OK"), QMessageBox::ButtonRole::YesRole); - - if (iconPath != nullptr) { - button->setIcon(QIcon(iconPath)); - } - - messageBox.exec(); -} diff --git a/src/panda_qt/screen/metal_context.mm b/src/panda_qt/screen/metal_context.mm deleted file mode 100644 index e7a508e4..00000000 --- a/src/panda_qt/screen/metal_context.mm +++ /dev/null @@ -1,71 +0,0 @@ -#import -#import -#import -#import -#import -#import - -#import "panda_qt/screen/screen_mtl.hpp" - -id metalDevice = nil; - -bool ScreenWidgetMTL::createMetalContext() { - NSView* nativeView = (NSView*)this->winId(); - // Retain the layer so that we can manually memory manage it. - CAMetalLayer* metalLayer = [[CAMetalLayer layer] retain]; - - if (!metalLayer) { - return false; - } - - metalDevice = MTLCreateSystemDefaultDevice(); - - if (!metalDevice) { - NSLog(@"Failed to create metal device"); - return false; - } - - metalLayer.device = metalDevice; - metalLayer.framebufferOnly = NO; - metalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm; - - CGFloat scale = [nativeView window].backingScaleFactor; - CGSize pointSize = nativeView.bounds.size; - - metalLayer.contentsScale = scale; - metalLayer.drawableSize = CGSizeMake(pointSize.width * scale, pointSize.height * scale); - - [nativeView setLayer:metalLayer]; - [nativeView setWantsLayer:YES]; - - CA::MetalLayer* cppLayer = (CA::MetalLayer*)metalLayer; - mtkLayer = static_cast(cppLayer); - - return true; -} - -void ScreenWidgetMTL::resizeMetalView() { - NSView* view = (NSView*)this->windowHandle()->winId(); - CAMetalLayer* metalLayer = (CAMetalLayer*)[view layer]; - - if (metalLayer) { - metalLayer.drawableSize = CGSizeMake(surfaceWidth, surfaceHeight); - } -} - -ScreenWidgetMTL::~ScreenWidgetMTL() { - if (mtkLayer) { - CAMetalLayer* metalLayer = (__bridge CAMetalLayer*)static_cast(mtkLayer); - - NSView* view = (NSView*)this->winId(); - [view setLayer:nil]; - [view setWantsLayer:NO]; - - // Release Metal device and layer - metalLayer.device = nil; - [metalLayer release]; - [metalDevice release]; - - mtkLayer = nullptr; - } -} \ No newline at end of file diff --git a/src/panda_qt/screen/screen.cpp b/src/panda_qt/screen/screen.cpp deleted file mode 100644 index 94835284..00000000 --- a/src/panda_qt/screen/screen.cpp +++ /dev/null @@ -1,134 +0,0 @@ -#ifdef PANDA3DS_ENABLE_OPENGL -#include "opengl.hpp" -#endif -// opengl.hpp must be included at the very top. This comment exists to make clang-format not reorder it :p - -#include -#include -#include -#include -#include -#include - -#if !defined(_WIN32) && !defined(APPLE) -#include -#endif - -#include "panda_qt/screen/screen.hpp" -#include "panda_qt/screen/screen_gl.hpp" -#include "panda_qt/screen/screen_mtl.hpp" - -// Screen widget, based on https://github.com/stenzek/duckstation/blob/master/src/duckstation-qt/displaywidget.cpp -// and https://github.com/melonDS-emu/melonDS/blob/master/src/frontend/qt_sdl/main.cpp - -#ifdef PANDA3DS_ENABLE_OPENGL -ScreenWidget::ScreenWidget(API api, ResizeCallback resizeCallback, QWidget* parent) : api(api), QWidget(parent), resizeCallback(resizeCallback) { - // Create a native window for use with our graphics API of choice - setAutoFillBackground(false); - setAttribute(Qt::WA_NativeWindow, true); - setAttribute(Qt::WA_NoSystemBackground, true); - setAttribute(Qt::WA_PaintOnScreen, true); - setAttribute(Qt::WA_KeyCompression, false); - setFocusPolicy(Qt::StrongFocus); - setMouseTracking(true); - - // The graphics context, as well as resizing and showing the widget, is handled by the screen backend -} - -void ScreenWidget::resizeEvent(QResizeEvent* event) { - previousWidth = surfaceWidth; - previousHeight = surfaceHeight; - QWidget::resizeEvent(event); - - // Update surfaceWidth/surfaceHeight following the resize - std::optional windowInfo = getWindowInfo(); - if (windowInfo) { - this->windowInfo = *windowInfo; - } - - reloadScreenCoordinates(); - resizeDisplay(); -} - -void ScreenWidget::reloadScreenCoordinates() { - ScreenLayout::calculateCoordinates(screenCoordinates, u32(width()), u32(height()), topScreenSize, screenLayout); -} - -void ScreenWidget::reloadScreenLayout(ScreenLayout::Layout newLayout, float newTopScreenSize) { - screenLayout = newLayout; - topScreenSize = newTopScreenSize; - - reloadScreenCoordinates(); -} - -qreal ScreenWidget::devicePixelRatioFromScreen() const { - const QScreen* screenForRatio = windowHandle()->screen(); - if (!screenForRatio) { - screenForRatio = QGuiApplication::primaryScreen(); - } - - return screenForRatio ? screenForRatio->devicePixelRatio() : static_cast(1); -} - -int ScreenWidget::scaledWindowWidth() const { - return std::max(static_cast(std::ceil(static_cast(width()) * devicePixelRatioFromScreen())), 1); -} - -int ScreenWidget::scaledWindowHeight() const { - return std::max(static_cast(std::ceil(static_cast(height()) * devicePixelRatioFromScreen())), 1); -} - -std::optional ScreenWidget::getWindowInfo() { - WindowInfo wi; - -// Windows and Apple are easy here since there's no display connection. -#if defined(_WIN32) - wi.type = WindowInfo::Type::Win32; - wi.window_handle = reinterpret_cast(winId()); -#elif defined(__APPLE__) - wi.type = WindowInfo::Type::MacOS; - wi.window_handle = reinterpret_cast(winId()); -#else - QPlatformNativeInterface* pni = QGuiApplication::platformNativeInterface(); - const QString platform_name = QGuiApplication::platformName(); - if (platform_name == QStringLiteral("xcb")) { - wi.type = WindowInfo::Type::X11; - wi.display_connection = pni->nativeResourceForWindow("display", windowHandle()); - wi.window_handle = reinterpret_cast(winId()); - } else if (platform_name == QStringLiteral("wayland")) { - wi.type = WindowInfo::Type::Wayland; - QWindow* handle = windowHandle(); - if (handle == nullptr) { - return std::nullopt; - } - - wi.display_connection = pni->nativeResourceForWindow("display", handle); - wi.window_handle = pni->nativeResourceForWindow("surface", handle); - } else { - qCritical() << "Unknown PNI platform " << platform_name; - return std::nullopt; - } -#endif - - wi.surface_width = static_cast(scaledWindowWidth()); - wi.surface_height = static_cast(scaledWindowHeight()); - wi.surface_scale = static_cast(devicePixelRatioFromScreen()); - - surfaceWidth = wi.surface_width; - surfaceHeight = wi.surface_height; - - return wi; -} -#endif - -ScreenWidget* ScreenWidget::getWidget(API api, ResizeCallback resizeCallback, QWidget* parent) { - if (api == API::OpenGL) { - return new ScreenWidgetGL(api, resizeCallback, parent); - } else if (api == API::Metal) { - return new ScreenWidgetMTL(api, resizeCallback, parent); - } else if (api == API::Vulkan) { - Helpers::panic("Vulkan is not yet supported on Panda3DS-Qt. Try SDL instead"); - } else { - Helpers::panic("ScreenWidget::getWidget: Unimplemented graphics API"); - } -} \ No newline at end of file diff --git a/src/panda_qt/screen/screen_gl.cpp b/src/panda_qt/screen/screen_gl.cpp deleted file mode 100644 index 87cb2738..00000000 --- a/src/panda_qt/screen/screen_gl.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "panda_qt/screen/screen_gl.hpp" - -#include - -#ifdef PANDA3DS_ENABLE_OPENGL -ScreenWidgetGL::ScreenWidgetGL(API api, ResizeCallback resizeCallback, QWidget* parent) : ScreenWidget(api, resizeCallback, parent) { - // On Wayland + OpenGL, we have to show the window before we can create a graphics context. - resize(800, 240 * 4); - show(); - - if (!createContext()) { - Helpers::panic("Failed to create GL context for display"); - } -} - -bool ScreenWidgetGL::createContext() { - // List of GL context versions we will try. Anything 4.1+ is good for desktop OpenGL, and 3.1+ for OpenGL ES - static constexpr std::array versionsToTry = { - GL::Context::Version{GL::Context::Profile::Core, 4, 6}, GL::Context::Version{GL::Context::Profile::Core, 4, 5}, - GL::Context::Version{GL::Context::Profile::Core, 4, 4}, GL::Context::Version{GL::Context::Profile::Core, 4, 3}, - GL::Context::Version{GL::Context::Profile::Core, 4, 2}, GL::Context::Version{GL::Context::Profile::Core, 4, 1}, - GL::Context::Version{GL::Context::Profile::ES, 3, 2}, GL::Context::Version{GL::Context::Profile::ES, 3, 1}, - }; - - std::optional windowInfo = getWindowInfo(); - if (windowInfo.has_value()) { - this->windowInfo = *windowInfo; - - glContext = GL::Context::Create(*getWindowInfo(), versionsToTry); - if (glContext == nullptr) { - return false; - } - - glContext->DoneCurrent(); - } - - return glContext != nullptr; -} - -void ScreenWidgetGL::resizeDisplay() { - // This will call take care of calling resizeSurface from the emulator thread, as the GL renderer must resize from the emu thread - resizeCallback(surfaceWidth, surfaceHeight); -} - -// Note: This will run on the emulator thread, we don't want any Qt calls happening there. -void ScreenWidgetGL::resizeSurface(u32 width, u32 height) { - if (previousWidth != width || previousHeight != height) { - if (glContext) { - glContext->ResizeSurface(width, height); - } - } -} - -GL::Context* ScreenWidgetGL::getGLContext() { return glContext.get(); } -#else -ScreenWidgetGL::ScreenWidgetGL(API api, ResizeCallback resizeCallback, QWidget* parent) : ScreenWidget(api, resizeCallback, parent) { - Helpers::panic("OpenGL renderer not supported. Make sure you've compiled with OpenGL support and that you're on a compatible platform"); -} - -GL::Context* ScreenWidgetGL::getGLContext() { return nullptr; } -bool ScreenWidgetGL::createContext() { return false; } -void ScreenWidgetGL::resizeDisplay() {} -void ScreenWidgetGL::resizeSurface(u32 width, u32 height) {} -#endif diff --git a/src/panda_qt/screen/screen_mtl.cpp b/src/panda_qt/screen/screen_mtl.cpp deleted file mode 100644 index 472b166b..00000000 --- a/src/panda_qt/screen/screen_mtl.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "panda_qt/screen/screen_mtl.hpp" - -#ifdef PANDA3DS_ENABLE_METAL -ScreenWidgetMTL::ScreenWidgetMTL(API api, ResizeCallback resizeCallback, QWidget* parent) : ScreenWidget(api, resizeCallback, parent) { - if (!createContext()) { - Helpers::panic("Failed to create Metal context for display"); - } - - resize(800, 240 * 4); - show(); -} - -void ScreenWidgetMTL::resizeDisplay() { - resizeMetalView(); - resizeCallback(surfaceWidth, surfaceHeight); -} - -bool ScreenWidgetMTL::createContext() { return createMetalContext(); } -void* ScreenWidgetMTL::getMTKLayer() { return mtkLayer; } - -#else -ScreenWidgetMTL::ScreenWidgetMTL(API api, ResizeCallback resizeCallback, QWidget* parent) : ScreenWidget(api, resizeCallback, parent) { - Helpers::panic("Metal renderer not supported. Make sure you've compiled with Metal support and that you're on a compatible platform"); -} - -ScreenWidgetMTL::~ScreenWidgetMTL() {} -bool ScreenWidgetMTL::createContext() { return false; } -bool ScreenWidgetMTL::createMetalContext() { return false; } -void* ScreenWidgetMTL::getMTKLayer() { return nullptr; } - -void ScreenWidgetMTL::resizeDisplay() {} -void ScreenWidgetMTL::resizeMetalView() {} -#endif \ No newline at end of file diff --git a/src/panda_qt/shader_editor.cpp b/src/panda_qt/shader_editor.cpp deleted file mode 100644 index 4ca41e22..00000000 --- a/src/panda_qt/shader_editor.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "panda_qt/shader_editor.hpp" - -#include -#include - -#include "panda_qt/main_window.hpp" - -using namespace Zep; - -ShaderEditorWindow::ShaderEditorWindow(QWidget* parent, const std::string& filename, const std::string& initialText) - : QDialog(parent), zepWidget(this, qApp->applicationDirPath().toStdString(), fontSize) { - resize(600, 600); - - // Register our extensions - ZepRegressExCommand::Register(zepWidget.GetEditor()); - ZepReplExCommand::Register(zepWidget.GetEditor(), &replProvider); - - // Default to standard mode instead of vim mode, initialize text box - zepWidget.GetEditor().InitWithText(filename, initialText); - zepWidget.GetEditor().SetGlobalMode(Zep::ZepMode_Standard::StaticName()); - - // Layout for widgets - QVBoxLayout* mainLayout = new QVBoxLayout(); - setLayout(mainLayout); - - QPushButton* button = new QPushButton(tr("Reload shader"), this); - button->setFixedSize(100, 20); - - // When the Load Script button is pressed, send the current text to the MainWindow, which will upload it to the emulator's lua object - connect(button, &QPushButton::pressed, this, [this]() { - if (parentWidget()) { - auto buffer = zepWidget.GetEditor().GetMRUBuffer(); - const std::string text = buffer->GetBufferText(buffer->Begin(), buffer->End()); - - static_cast(parentWidget())->reloadShader(text); - } else { - // This should be unreachable, only here for safety purposes - printf("Text editor does not have any parent widget, click doesn't work :(\n"); - } - }); - - mainLayout->addWidget(button); - mainLayout->addWidget(&zepWidget); -} - -void ShaderEditorWindow::setEnable(bool enable) { - supported = enable; - - if (enable) { - setDisabled(false); - } else { - setDisabled(true); - setText("Shader editor window is not available for this renderer backend"); - } -} diff --git a/src/panda_qt/text_editor.cpp b/src/panda_qt/text_editor.cpp deleted file mode 100644 index 7ac1d5f2..00000000 --- a/src/panda_qt/text_editor.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "panda_qt/text_editor.hpp" - -#include -#include - -#include "panda_qt/main_window.hpp" - -using namespace Zep; - -TextEditorWindow::TextEditorWindow(QWidget* parent, const std::string& filename, const std::string& initialText) - : QDialog(parent), zepWidget(this, qApp->applicationDirPath().toStdString(), fontSize) { - setWindowTitle(tr("Lua Editor")); - resize(600, 600); - - // Register our extensions - ZepRegressExCommand::Register(zepWidget.GetEditor()); - ZepReplExCommand::Register(zepWidget.GetEditor(), &replProvider); - - // Default to standard mode instead of vim mode, initialize text box - zepWidget.GetEditor().InitWithText(filename, initialText); - zepWidget.GetEditor().SetGlobalMode(Zep::ZepMode_Standard::StaticName()); - - // Layout for widgets - QVBoxLayout* mainLayout = new QVBoxLayout(); - setLayout(mainLayout); - - QPushButton* button = new QPushButton(tr("Load script"), this); - button->setFixedSize(100, 20); - - // When the Load Script button is pressed, send the current text to the MainWindow, which will upload it to the emulator's lua object - connect(button, &QPushButton::pressed, this, [this]() { - if (parentWidget()) { - auto buffer = zepWidget.GetEditor().GetMRUBuffer(); - const std::string text = buffer->GetBufferText(buffer->Begin(), buffer->End()); - - static_cast(parentWidget())->loadLuaScript(text); - } else { - // This should be unreachable, only here for safety purposes - printf("Text editor does not have any parent widget, click doesn't work :(\n"); - } - }); - - mainLayout->addWidget(button); - mainLayout->addWidget(&zepWidget); -} diff --git a/src/panda_qt/thread_debugger.cpp b/src/panda_qt/thread_debugger.cpp deleted file mode 100644 index 04dc495c..00000000 --- a/src/panda_qt/thread_debugger.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include "panda_qt/thread_debugger.hpp" - -#include - -static QString threadStatusToQString(ThreadStatus status) { - switch (status) { - case ThreadStatus::Running: return QObject::tr("Running"); - case ThreadStatus::Ready: return QObject::tr("Ready"); - case ThreadStatus::WaitArbiter: return QObject::tr("Waiting on arbiter"); - case ThreadStatus::WaitSleep: return QObject::tr("Sleeping"); - case ThreadStatus::WaitSync1: return QObject::tr("WaitSync (1)"); - case ThreadStatus::WaitSyncAny: return QObject::tr("WaitSync (Any)"); - case ThreadStatus::WaitSyncAll: return QObject::tr("WaitSync (All)"); - case ThreadStatus::WaitIPC: return QObject::tr("Waiting for IPC"); - case ThreadStatus::Dormant: return QObject::tr("Dormant"); - case ThreadStatus::Dead: return QObject::tr("Dead"); - default: return QObject::tr("Unknown thread status"); - } -} - -ThreadDebugger::ThreadDebugger(Emulator* emu, QWidget* parent) : emu(emu), QWidget(parent, Qt::Window) { - setWindowTitle(tr("Thread Debugger")); - resize(700, 600); - - mainLayout = new QVBoxLayout(this); - threadTable = new QTableWidget(this); - threadTable->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - - mainLayout->addWidget(threadTable); -} - -void ThreadDebugger::update() { - threadTable->clear(); - - threadTable->setSelectionMode(QAbstractItemView::NoSelection); - threadTable->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - threadTable->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - threadTable->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - threadTable->setColumnCount(5); - threadTable->verticalHeader()->setVisible(false); - threadTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - threadTable->setHorizontalHeaderLabels(QStringList({"ID", "Status", "PC", "Entrypoint", "Stack Top"})); - - const auto threads = emu->getKernel().getMainProcessThreads(); - const usize count = threads.size(); - threadTable->setRowCount(count); - - for (int i = 0; i < count; i++) { - const auto& thread = threads[i]; - setListItem(i, 0, fmt::format("{}", thread.index)); - setListItem(i, 1, threadStatusToQString(thread.status)); - setListItem(i, 2, fmt::format("{:08X}", thread.gprs[15])); - setListItem(i, 3, fmt::format("{:08X}", thread.entrypoint)); - setListItem(i, 4, fmt::format("{:08X}", thread.initialSP)); - } -} - -void ThreadDebugger::setListItem(int row, int column, const std::string& str) { setListItem(row, column, QString::fromStdString(str)); } - -void ThreadDebugger::setListItem(int row, int column, const QString& str) { - QTableWidgetItem* item = new QTableWidgetItem(); - QWidget* widget = new QWidget(this); - QVBoxLayout* layout = new QVBoxLayout(widget); - QLabel* label = new QLabel(widget); - - layout->setAlignment(Qt::AlignVCenter); - layout->setContentsMargins(5, 0, 5, 0); - - label->setText(str); - layout->addWidget(label); - widget->setLayout(layout); - - threadTable->setItem(row, column, item); - threadTable->setCellWidget(row, column, widget); -} diff --git a/src/panda_qt/translations.cpp b/src/panda_qt/translations.cpp deleted file mode 100644 index cefc6263..00000000 --- a/src/panda_qt/translations.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include -#include -#include -#include - -#include "panda_qt/config_window.hpp" -#include "panda_qt/main_window.hpp" - -void MainWindow::loadTranslation() { - // TODO: This should become a member variable when we allow changing language at runtime. - QTranslator* translator = nullptr; - - // Fetch the .qm file for our language and load it - auto language = QString::fromStdString(emu->getConfig().frontendSettings.language); - const QString baseDir = QStringLiteral(":/translations"); - const QString basePath = QStringLiteral("%1/%2.qm").arg(baseDir).arg(language); - - if (QFile::exists(basePath)) { - if (translator != nullptr) { - qApp->removeTranslator(translator); - } - - translator = new QTranslator(qApp); - if (!translator->load(basePath)) { - QMessageBox::warning( - nullptr, QStringLiteral("Translation Error"), - QStringLiteral("Failed to find load translation file for '%1':\n%2").arg(language).arg(basePath) - ); - delete translator; - } else { - qApp->installTranslator(translator); - } - } else { - printf("Language file %s does not exist. Defaulting to English\n", basePath.toStdString().c_str()); - } -} - -struct LanguageInfo { - QString name; // Full name of the language (for example "English (US)") - const char* code; // ISO 639 language code (for example "en_us") - - explicit LanguageInfo(const QString& name, const char* code) : name(name), code(code) {} -}; - -// List of languages in the order they should appear in the menu -// Please keep this list mostly in alphabetical order. -// Also, for Unicode characters in language names, use Unicode keycodes instead of writing out the name, -// as some compilers/toolchains may not enjoy Unicode in source files. -static std::array languages = { - LanguageInfo(QStringLiteral(u"English"), "en"), // English - LanguageInfo(QStringLiteral(u"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"), "el"), // Greek - LanguageInfo(QStringLiteral(u"Espa\u00F1ol"), "es"), // Spanish - LanguageInfo(QStringLiteral(u"Nederlands"), "nl"), // Dutch - LanguageInfo(QStringLiteral(u"Portugu\u00EAs (Brasil)"), "pt_br"), // Portuguese (Brazilian) - LanguageInfo(QStringLiteral(u"Svenska"), "sv"), // Swedish -}; - -QComboBox* ConfigWindow::createLanguageSelect() { - QComboBox* select = new QComboBox(); - - for (usize i = 0; i < languages.size(); i++) { - const auto& lang = languages[i]; - select->addItem(lang.name); - - if (config.frontendSettings.language == lang.code) { - select->setCurrentIndex(i); - } - } - - connect(select, &QComboBox::currentIndexChanged, this, [&](int index) { - const QString baseDir = QStringLiteral(":/translations"); - const QString basePath = QStringLiteral("%1/%2.qm").arg(baseDir).arg(languages[index].code); - - if (QFile::exists(basePath)) { - config.frontendSettings.language = languages[index].code; - updateConfig(); - - QMessageBox messageBox( - QMessageBox::Icon::Information, tr("Language change successful"), - tr("Restart Panda3DS for the new language to be used.") - ); - - messageBox.exec(); - } else { - QMessageBox messageBox( - QMessageBox::Icon::Warning, tr("Language change failed"), - tr("The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code...") - ); - - messageBox.exec(); - } - }); - - return select; -} diff --git a/src/panda_qt/zep.cpp b/src/panda_qt/zep.cpp deleted file mode 100644 index 570f0e64..00000000 --- a/src/panda_qt/zep.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#define ZEP_SINGLE_HEADER_BUILD -#include "zep.h" \ No newline at end of file diff --git a/src/panda_sdl/frontend_sdl.cpp b/src/panda_sdl/frontend_sdl.cpp deleted file mode 100644 index 8033165a..00000000 --- a/src/panda_sdl/frontend_sdl.cpp +++ /dev/null @@ -1,484 +0,0 @@ -#include "panda_sdl/frontend_sdl.hpp" - -#include - -#include "renderdoc.hpp" -#include "sdl_sensors.hpp" -#include "version.hpp" - -FrontendSDL::FrontendSDL() : keyboardMappings(InputMappings::defaultKeyboardMappings()) { - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) < 0) { - Helpers::panic("Failed to initialize SDL2"); - } - - // Make SDL use consistent positional button mapping - SDL_SetHint(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS, "0"); - if (SDL_Init(SDL_INIT_GAMECONTROLLER) < 0) { - Helpers::warn("Failed to initialize SDL2 GameController: %s", SDL_GetError()); - } - - if (SDL_WasInit(SDL_INIT_GAMECONTROLLER)) { - gameController = SDL_GameControllerOpen(0); - - if (gameController != nullptr) { - SDL_Joystick* stick = SDL_GameControllerGetJoystick(gameController); - gameControllerID = SDL_JoystickInstanceID(stick); - } - - setupControllerSensors(gameController); - } - - const EmulatorConfig& config = emu.getConfig(); - // We need OpenGL for software rendering/null renderer or for the OpenGL renderer if it's enabled. - bool needOpenGL = config.rendererType == RendererType::Software || config.rendererType == RendererType::Null; -#ifdef PANDA3DS_ENABLE_OPENGL - needOpenGL = needOpenGL || (config.rendererType == RendererType::OpenGL); -#endif - - const char* windowTitle = config.windowSettings.showAppVersion ? ("Alber v" PANDA3DS_VERSION) : "Alber"; - if (config.printAppVersion) { - printf("Welcome to Panda3DS v%s!\n", PANDA3DS_VERSION); - } - - // Positions of the window - int windowX, windowY; - - // Apply window size settings if the appropriate option is enabled - if (config.windowSettings.rememberPosition) { - windowX = config.windowSettings.x; - windowY = config.windowSettings.y; - windowWidth = config.windowSettings.width; - windowHeight = config.windowSettings.height; - } else { - windowX = SDL_WINDOWPOS_CENTERED; - windowY = SDL_WINDOWPOS_CENTERED; - windowWidth = 400; - windowHeight = 480; - } - - // Initialize output size and screen layout - emu.setOutputSize(windowWidth, windowHeight); - ScreenLayout::calculateCoordinates( - screenCoordinates, u32(windowWidth), u32(windowHeight), emu.getConfig().topScreenSize, emu.getConfig().screenLayout - ); - - if (needOpenGL) { - // Demand 4.1 core for OpenGL renderer (max available on MacOS), 3.3 for the software & null renderers - // MacOS gets mad if we don't explicitly demand a core profile - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, config.rendererType == RendererType::OpenGL ? 4 : 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, config.rendererType == RendererType::OpenGL ? 1 : 3); - window = SDL_CreateWindow(windowTitle, windowX, windowY, windowWidth, windowHeight, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); - - if (window == nullptr) { - Helpers::panic("Window creation failed: %s", SDL_GetError()); - } - - glContext = SDL_GL_CreateContext(window); - if (glContext == nullptr) { - Helpers::warn("OpenGL context creation failed: %s\nTrying again with OpenGL ES.", SDL_GetError()); - - // Some low end devices (eg RPi, emulation handhelds) don't support desktop GL, but only OpenGL ES, so fall back to that if GL context - // creation failed - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); - glContext = SDL_GL_CreateContext(window); - if (glContext == nullptr) { - Helpers::panic("OpenGL context creation failed: %s", SDL_GetError()); - } - - if (!gladLoadGLES2Loader(reinterpret_cast(SDL_GL_GetProcAddress))) { - Helpers::panic("OpenGL init failed"); - } - - emu.getRenderer()->setupGLES(); - } else { - if (!gladLoadGLLoader(reinterpret_cast(SDL_GL_GetProcAddress))) { - Helpers::panic("OpenGL init failed"); - } - } - - SDL_GL_SetSwapInterval(config.vsyncEnabled ? 1 : 0); - } - -#ifdef PANDA3DS_ENABLE_VULKAN - if (config.rendererType == RendererType::Vulkan) { - window = SDL_CreateWindow(windowTitle, windowX, windowY, windowWidth, windowHeight, SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE); - - if (window == nullptr) { - Helpers::warn("Window creation failed: %s", SDL_GetError()); - } - } -#endif - -#ifdef PANDA3DS_ENABLE_METAL - if (config.rendererType == RendererType::Metal) { - window = SDL_CreateWindow(windowTitle, windowX, windowY, windowWidth, windowHeight, SDL_WINDOW_METAL | SDL_WINDOW_RESIZABLE); - - if (window == nullptr) { - Helpers::warn("Window creation failed: %s", SDL_GetError()); - } - } -#endif - - emu.initGraphicsContext(window); -} - -bool FrontendSDL::loadROM(const std::filesystem::path& path) { return emu.loadROM(path); } - -void FrontendSDL::run() { - programRunning = true; - keyboardAnalogX = false; - keyboardAnalogY = false; - holdingRightClick = false; - - while (programRunning) { -#ifdef PANDA3DS_ENABLE_HTTP_SERVER - httpServer.processActions(); -#endif - - emu.runFrame(); - HIDService& hid = emu.getServiceManager().getHID(); - - SDL_Event event; - while (SDL_PollEvent(&event)) { - namespace Keys = HID::Keys; - - switch (event.type) { - case SDL_QUIT: { - printf("Bye :(\n"); - programRunning = false; - - // Remember window position & size for future runs - auto& windowSettings = emu.getConfig().windowSettings; - SDL_GetWindowPosition(window, &windowSettings.x, &windowSettings.y); - SDL_GetWindowSize(window, &windowSettings.width, &windowSettings.height); - return; - } - - case SDL_KEYDOWN: { - if (emu.romType == ROMType::None) break; - - u32 key = getMapping(event.key.keysym.sym); - if (key != HID::Keys::Null) { - switch (key) { - case HID::Keys::CirclePadRight: - hid.setCirclepadX(0x9C); - keyboardAnalogX = true; - break; - case HID::Keys::CirclePadLeft: - hid.setCirclepadX(-0x9C); - keyboardAnalogX = true; - break; - case HID::Keys::CirclePadUp: - hid.setCirclepadY(0x9C); - keyboardAnalogY = true; - break; - case HID::Keys::CirclePadDown: - hid.setCirclepadY(-0x9C); - keyboardAnalogY = true; - break; - default: hid.pressKey(key); break; - } - } else { - switch (event.key.keysym.sym) { - // Use the F4 button as a hot-key to pause or resume the emulator - // We can't use the audio play/pause buttons because it's annoying - case SDLK_F4: { - emu.togglePause(); - break; - } - - // Use F5 as a reset button - case SDLK_F5: { - emu.reset(Emulator::ReloadOption::Reload); - break; - } - - case SDLK_F11: { - if constexpr (Renderdoc::isSupported()) { - Renderdoc::triggerCapture(); - } - - break; - } - } - } - break; - } - - case SDL_KEYUP: { - if (emu.romType == ROMType::None) break; - - u32 key = getMapping(event.key.keysym.sym); - if (key != HID::Keys::Null) { - switch (key) { - // Err this is probably not ideal - case HID::Keys::CirclePadRight: - case HID::Keys::CirclePadLeft: - hid.setCirclepadX(0); - keyboardAnalogX = false; - break; - case HID::Keys::CirclePadUp: - case HID::Keys::CirclePadDown: - hid.setCirclepadY(0); - keyboardAnalogY = false; - break; - default: hid.releaseKey(key); break; - } - } - break; - } - - case SDL_MOUSEBUTTONDOWN: - if (emu.romType == ROMType::None) break; - - if (event.button.button == SDL_BUTTON_LEFT) { - handleLeftClick(event.button.x, event.button.y); - } else if (event.button.button == SDL_BUTTON_RIGHT) { - holdingRightClick = true; - } - - break; - - case SDL_MOUSEBUTTONUP: - if (emu.romType == ROMType::None) break; - - if (event.button.button == SDL_BUTTON_LEFT) { - hid.releaseTouchScreen(); - } else if (event.button.button == SDL_BUTTON_RIGHT) { - holdingRightClick = false; - } - break; - - case SDL_CONTROLLERDEVICEADDED: - if (gameController == nullptr) { - gameController = SDL_GameControllerOpen(event.cdevice.which); - gameControllerID = event.cdevice.which; - - setupControllerSensors(gameController); - } - break; - - case SDL_CONTROLLERDEVICEREMOVED: - if (event.cdevice.which == gameControllerID) { - SDL_GameControllerClose(gameController); - gameController = nullptr; - gameControllerID = 0; - } - break; - - case SDL_CONTROLLERBUTTONUP: - case SDL_CONTROLLERBUTTONDOWN: { - if (emu.romType == ROMType::None) break; - u32 key = 0; - - switch (event.cbutton.button) { - case SDL_CONTROLLER_BUTTON_A: key = Keys::B; break; - case SDL_CONTROLLER_BUTTON_B: key = Keys::A; break; - case SDL_CONTROLLER_BUTTON_X: key = Keys::Y; break; - case SDL_CONTROLLER_BUTTON_Y: key = Keys::X; break; - case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: key = Keys::L; break; - case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: key = Keys::R; break; - case SDL_CONTROLLER_BUTTON_DPAD_LEFT: key = Keys::Left; break; - case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: key = Keys::Right; break; - case SDL_CONTROLLER_BUTTON_DPAD_UP: key = Keys::Up; break; - case SDL_CONTROLLER_BUTTON_DPAD_DOWN: key = Keys::Down; break; - case SDL_CONTROLLER_BUTTON_BACK: key = Keys::Select; break; - case SDL_CONTROLLER_BUTTON_START: key = Keys::Start; break; - } - - if (key != 0) { - if (event.cbutton.state == SDL_PRESSED) { - hid.pressKey(key); - } else { - hid.releaseKey(key); - } - } - break; - } - - // Detect mouse motion events for gyroscope emulation - case SDL_MOUSEMOTION: { - if (emu.romType == ROMType::None) break; - - // Handle "dragging" across the touchscreen - if (hid.isTouchScreenPressed()) { - if (windowWidth == 0 || windowHeight == 0) [[unlikely]] { - break; - } - - handleLeftClick(event.motion.x, event.motion.y); - } - - // We use right click to indicate we want to rotate the console. If right click is not held, then this is not a gyroscope rotation - if (holdingRightClick) { - // Relative motion since last mouse motion event - const s32 motionX = event.motion.xrel; - const s32 motionY = event.motion.yrel; - - // The gyroscope involves lots of weird math I don't want to bother with atm - // So up until then, we will set the gyroscope euler angles to fixed values based on the direction of the relative motion - const s32 roll = motionX > 0 ? 0x7f : -0x7f; - const s32 pitch = motionY > 0 ? 0x7f : -0x7f; - hid.setRoll(roll); - hid.setPitch(pitch); - } - break; - } - - case SDL_CONTROLLERSENSORUPDATE: { - if (event.csensor.sensor == SDL_SENSOR_GYRO) { - auto rotation = Sensors::SDL::convertRotation({ - event.csensor.data[0], - event.csensor.data[1], - event.csensor.data[2], - }); - - hid.setPitch(s16(rotation.x)); - hid.setRoll(s16(rotation.y)); - hid.setYaw(s16(rotation.z)); - } else if (event.csensor.sensor == SDL_SENSOR_ACCEL) { - auto accel = Sensors::SDL::convertAcceleration(event.csensor.data); - hid.setAccel(accel.x, accel.y, accel.z); - } - break; - } - - case SDL_DROPFILE: { - char* droppedDir = event.drop.file; - - if (droppedDir) { - const std::filesystem::path path(droppedDir); - - if (path.extension() == ".amiibo") { - emu.loadAmiibo(path); - } else if (path.extension() == ".lua") { - emu.getLua().loadFile(droppedDir); - } else { - loadROM(path); - } - - SDL_free(droppedDir); - } - break; - } - - case SDL_WINDOWEVENT: { - auto type = event.window.event; - if (type == SDL_WINDOWEVENT_RESIZED) { - windowWidth = event.window.data1; - windowHeight = event.window.data2; - - const auto& config = emu.getConfig(); - ScreenLayout::calculateCoordinates( - screenCoordinates, u32(windowWidth), u32(windowHeight), emu.getConfig().topScreenSize, emu.getConfig().screenLayout - ); - - emu.setOutputSize(windowWidth, windowHeight); - } - } - } - } - - // Update controller analog sticks and HID service - if (emu.romType != ROMType::None) { - // Update circlepad/c-stick/ZL/ZR if a controller is plugged in - if (gameController != nullptr) { - const s16 stickX = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_LEFTX); - const s16 stickY = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_LEFTY); - constexpr s16 deadzone = 3276; - constexpr s16 triggerThreshold = SDL_JOYSTICK_AXIS_MAX / 2; - - { - // Update circlepad - constexpr s16 circlepadMax = 0x9C; - constexpr s16 div = 0x8000 / circlepadMax; - - // Avoid overriding the keyboard's circlepad input - if (std::abs(stickX) < deadzone && !keyboardAnalogX) { - hid.setCirclepadX(0); - } else { - hid.setCirclepadX(stickX / div); - } - - if (std::abs(stickY) < deadzone && !keyboardAnalogY) { - hid.setCirclepadY(0); - } else { - hid.setCirclepadY(-(stickY / div)); - } - } - - const s16 l2 = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_TRIGGERLEFT); - const s16 r2 = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_TRIGGERRIGHT); - const s16 cStickX = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_RIGHTX); - const s16 cStickY = SDL_GameControllerGetAxis(gameController, SDL_CONTROLLER_AXIS_RIGHTY); - - hid.setKey(HID::Keys::ZL, l2 > triggerThreshold); - hid.setKey(HID::Keys::ZR, r2 > triggerThreshold); - - // Update C-Stick - // To convert from SDL coordinates, ie [-32768, 32767] to [-2048, 2047] we just divide by 8 - if (std::abs(cStickX) < deadzone) { - hid.setCStickX(IR::CirclePadPro::ButtonState::C_STICK_CENTER); - } else { - hid.setCStickX(cStickX / 8); - } - - if (std::abs(cStickY) < deadzone) { - hid.setCStickY(IR::CirclePadPro::ButtonState::C_STICK_CENTER); - } else { - hid.setCStickY(-(cStickY / 8)); - } - } - - hid.updateInputs(emu.getTicks()); - } - // TODO: Should this be uncommented? - // kernel.evalReschedule(); - - SDL_GL_SwapWindow(window); - } -} - -void FrontendSDL::setupControllerSensors(SDL_GameController* controller) { - bool haveGyro = SDL_GameControllerHasSensor(controller, SDL_SENSOR_GYRO) == SDL_TRUE; - bool haveAccelerometer = SDL_GameControllerHasSensor(controller, SDL_SENSOR_ACCEL) == SDL_TRUE; - - if (haveGyro) { - SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_GYRO, SDL_TRUE); - } - - if (haveAccelerometer) { - SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_ACCEL, SDL_TRUE); - } -} - -void FrontendSDL::handleLeftClick(int mouseX, int mouseY) { - if (windowWidth == 0 || windowHeight == 0) [[unlikely]] { - return; - } - - const auto& coords = screenCoordinates; - const int bottomScreenX = int(coords.bottomScreenX); - const int bottomScreenY = int(coords.bottomScreenY); - const int bottomScreenWidth = int(coords.bottomScreenWidth); - const int bottomScreenHeight = int(coords.bottomScreenHeight); - auto& hid = emu.getServiceManager().getHID(); - - // Check if the mouse is inside the bottom screen area - if (mouseX >= int(bottomScreenX) && mouseX < int(bottomScreenX + bottomScreenWidth) && mouseY >= int(bottomScreenY) && - mouseY < int(bottomScreenY + bottomScreenHeight)) { - // Map to 3DS touchscreen coordinates - float relX = float(mouseX - bottomScreenX) / float(bottomScreenWidth); - float relY = float(mouseY - bottomScreenY) / float(bottomScreenHeight); - - u16 x_converted = static_cast(std::clamp(relX * ScreenLayout::BOTTOM_SCREEN_WIDTH, 0.f, float(ScreenLayout::BOTTOM_SCREEN_WIDTH - 1))); - u16 y_converted = static_cast(std::clamp(relY * ScreenLayout::BOTTOM_SCREEN_HEIGHT, 0.f, float(ScreenLayout::BOTTOM_SCREEN_HEIGHT - 1))); - - hid.setTouchScreenPress(x_converted, y_converted); - } else { - hid.releaseTouchScreen(); - } -} \ No newline at end of file diff --git a/src/panda_sdl/mappings.cpp b/src/panda_sdl/mappings.cpp deleted file mode 100644 index 7e982978..00000000 --- a/src/panda_sdl/mappings.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include - -#include "input_mappings.hpp" - -InputMappings InputMappings::defaultKeyboardMappings() { - InputMappings mappings; - mappings.setMapping(SDLK_l, HID::Keys::A); - mappings.setMapping(SDLK_k, HID::Keys::B); - mappings.setMapping(SDLK_o, HID::Keys::X); - mappings.setMapping(SDLK_i, HID::Keys::Y); - mappings.setMapping(SDLK_q, HID::Keys::L); - mappings.setMapping(SDLK_p, HID::Keys::R); - mappings.setMapping(SDLK_1, HID::Keys::ZL); - mappings.setMapping(SDLK_0, HID::Keys::ZR); - mappings.setMapping(SDLK_UP, HID::Keys::Up); - mappings.setMapping(SDLK_DOWN, HID::Keys::Down); - mappings.setMapping(SDLK_RIGHT, HID::Keys::Right); - mappings.setMapping(SDLK_LEFT, HID::Keys::Left); - mappings.setMapping(SDLK_RETURN, HID::Keys::Start); - mappings.setMapping(SDLK_BACKSPACE, HID::Keys::Select); - mappings.setMapping(SDLK_w, HID::Keys::CirclePadUp); - mappings.setMapping(SDLK_s, HID::Keys::CirclePadDown); - mappings.setMapping(SDLK_d, HID::Keys::CirclePadRight); - mappings.setMapping(SDLK_a, HID::Keys::CirclePadLeft); - - return mappings; -} \ No newline at end of file diff --git a/src/pandios/.gitignore b/src/pandios/.gitignore deleted file mode 100644 index 1bad9862..00000000 --- a/src/pandios/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -libAlber.dylib -Alber/Headers/ios_driver.h \ No newline at end of file diff --git a/src/pandios/Alber/Headers/ios_driver.h b/src/pandios/Alber/Headers/ios_driver.h deleted file mode 100644 index 85b3be2c..00000000 --- a/src/pandios/Alber/Headers/ios_driver.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#include -#include -#include - -void iosCreateEmulator(); -void iosLoadROM(NSString* pathNS); -void iosRunFrame(CAMetalLayer* layer); -void iosSetOutputSize(uint32_t width, uint32_t height); \ No newline at end of file diff --git a/src/pandios/Alber/module.map b/src/pandios/Alber/module.map deleted file mode 100644 index 54ca3f2a..00000000 --- a/src/pandios/Alber/module.map +++ /dev/null @@ -1,5 +0,0 @@ -module AlberDriver { - umbrella "Headers" // for multiple files - link "libAlber" - export * -} \ No newline at end of file diff --git a/src/pandios/Pandios.xcodeproj/project.pbxproj b/src/pandios/Pandios.xcodeproj/project.pbxproj deleted file mode 100644 index 3f698015..00000000 --- a/src/pandios/Pandios.xcodeproj/project.pbxproj +++ /dev/null @@ -1,587 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 70; - objects = { - -/* Begin PBXBuildFile section */ - 4F798C782D8747B000F5D23F /* libAlber.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 4F798C772D8747B000F5D23F /* libAlber.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 4F798C7A2D8747F400F5D23F /* libAlber.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F798C792D8747B800F5D23F /* libAlber.dylib */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 4F6E8FD32D77C0140025DD0D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 4F6E8FBA2D77C0120025DD0D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4F6E8FC12D77C0120025DD0D; - remoteInfo = Pandios; - }; - 4F6E8FDD2D77C0140025DD0D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 4F6E8FBA2D77C0120025DD0D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4F6E8FC12D77C0120025DD0D; - remoteInfo = Pandios; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 4F9EEBE82D78898B00E0B72D /* Copy Files */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 4F798C782D8747B000F5D23F /* libAlber.dylib in Copy Files */, - ); - name = "Copy Files"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 4F6E8FC22D77C0120025DD0D /* Pandios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pandios.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 4F6E8FD22D77C0140025DD0D /* PandiosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PandiosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 4F6E8FDC2D77C0140025DD0D /* PandiosUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PandiosUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 4F798C772D8747B000F5D23F /* libAlber.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libAlber.dylib; path = ../../build/libAlber.dylib; sourceTree = ""; }; - 4F798C792D8747B800F5D23F /* libAlber.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libAlber.dylib; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 4F6E8FC42D77C0120025DD0D /* Pandios */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Pandios; sourceTree = ""; }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4F6E8FCF2D77C0140025DD0D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F6E8FD92D77C0140025DD0D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F9EEBF82D78963D00E0B72D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4F798C7A2D8747F400F5D23F /* libAlber.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4F6E8FB92D77C0120025DD0D = { - isa = PBXGroup; - children = ( - 4F798C772D8747B000F5D23F /* libAlber.dylib */, - 4F6E8FC42D77C0120025DD0D /* Pandios */, - 4F9EEBF62D7895D700E0B72D /* Frameworks */, - 4F6E8FC32D77C0120025DD0D /* Products */, - ); - sourceTree = ""; - }; - 4F6E8FC32D77C0120025DD0D /* Products */ = { - isa = PBXGroup; - children = ( - 4F6E8FC22D77C0120025DD0D /* Pandios.app */, - 4F6E8FD22D77C0140025DD0D /* PandiosTests.xctest */, - 4F6E8FDC2D77C0140025DD0D /* PandiosUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 4F9EEBF62D7895D700E0B72D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 4F798C792D8747B800F5D23F /* libAlber.dylib */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4F6E8FC12D77C0120025DD0D /* Pandios */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4F6E8FE62D77C0140025DD0D /* Build configuration list for PBXNativeTarget "Pandios" */; - buildPhases = ( - 4F6E8FBE2D77C0120025DD0D /* Sources */, - 4F6E8FC02D77C0120025DD0D /* Resources */, - 4F9EEBE82D78898B00E0B72D /* Copy Files */, - 4F9EEBF82D78963D00E0B72D /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 4F6E8FC42D77C0120025DD0D /* Pandios */, - ); - name = Pandios; - packageProductDependencies = ( - ); - productName = Pandios; - productReference = 4F6E8FC22D77C0120025DD0D /* Pandios.app */; - productType = "com.apple.product-type.application"; - }; - 4F6E8FD12D77C0140025DD0D /* PandiosTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4F6E8FE92D77C0140025DD0D /* Build configuration list for PBXNativeTarget "PandiosTests" */; - buildPhases = ( - 4F6E8FCE2D77C0140025DD0D /* Sources */, - 4F6E8FCF2D77C0140025DD0D /* Frameworks */, - 4F6E8FD02D77C0140025DD0D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 4F6E8FD42D77C0140025DD0D /* PBXTargetDependency */, - ); - name = PandiosTests; - packageProductDependencies = ( - ); - productName = PandiosTests; - productReference = 4F6E8FD22D77C0140025DD0D /* PandiosTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 4F6E8FDB2D77C0140025DD0D /* PandiosUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4F6E8FEC2D77C0140025DD0D /* Build configuration list for PBXNativeTarget "PandiosUITests" */; - buildPhases = ( - 4F6E8FD82D77C0140025DD0D /* Sources */, - 4F6E8FD92D77C0140025DD0D /* Frameworks */, - 4F6E8FDA2D77C0140025DD0D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 4F6E8FDE2D77C0140025DD0D /* PBXTargetDependency */, - ); - name = PandiosUITests; - packageProductDependencies = ( - ); - productName = PandiosUITests; - productReference = 4F6E8FDC2D77C0140025DD0D /* PandiosUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4F6E8FBA2D77C0120025DD0D /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1620; - LastUpgradeCheck = 1620; - TargetAttributes = { - 4F6E8FC12D77C0120025DD0D = { - CreatedOnToolsVersion = 16.2; - }; - 4F6E8FD12D77C0140025DD0D = { - CreatedOnToolsVersion = 16.2; - TestTargetID = 4F6E8FC12D77C0120025DD0D; - }; - 4F6E8FDB2D77C0140025DD0D = { - CreatedOnToolsVersion = 16.2; - TestTargetID = 4F6E8FC12D77C0120025DD0D; - }; - }; - }; - buildConfigurationList = 4F6E8FBD2D77C0120025DD0D /* Build configuration list for PBXProject "Pandios" */; - compatibilityVersion = "Xcode 16.0.Superseded.1"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 4F6E8FB92D77C0120025DD0D; - minimizedProjectReferenceProxies = 1; - productRefGroup = 4F6E8FC32D77C0120025DD0D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 4F6E8FC12D77C0120025DD0D /* Pandios */, - 4F6E8FD12D77C0140025DD0D /* PandiosTests */, - 4F6E8FDB2D77C0140025DD0D /* PandiosUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 4F6E8FC02D77C0120025DD0D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F6E8FD02D77C0140025DD0D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F6E8FDA2D77C0140025DD0D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4F6E8FBE2D77C0120025DD0D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F6E8FCE2D77C0140025DD0D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F6E8FD82D77C0140025DD0D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 4F6E8FD42D77C0140025DD0D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4F6E8FC12D77C0120025DD0D /* Pandios */; - targetProxy = 4F6E8FD32D77C0140025DD0D /* PBXContainerItemProxy */; - }; - 4F6E8FDE2D77C0140025DD0D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4F6E8FC12D77C0120025DD0D /* Pandios */; - targetProxy = 4F6E8FDD2D77C0140025DD0D /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 4F6E8FE42D77C0140025DD0D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 4F6E8FE52D77C0140025DD0D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 4F6E8FE72D77C0140025DD0D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Pandios/Preview Content\""; - DEVELOPMENT_TEAM = 877A43U8RR; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Alber.Pandios; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INCLUDE_PATHS = "$(PROJECT_DIR)/Alber"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 4F6E8FE82D77C0140025DD0D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Pandios/Preview Content\""; - DEVELOPMENT_TEAM = 877A43U8RR; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Alber.Pandios; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INCLUDE_PATHS = "$(PROJECT_DIR)/Alber"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 4F6E8FEA2D77C0140025DD0D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Alber.PandiosTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Pandios.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Pandios"; - }; - name = Debug; - }; - 4F6E8FEB2D77C0140025DD0D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Alber.PandiosTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Pandios.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Pandios"; - }; - name = Release; - }; - 4F6E8FED2D77C0140025DD0D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Alber.PandiosUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Pandios; - }; - name = Debug; - }; - 4F6E8FEE2D77C0140025DD0D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Alber.PandiosUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Pandios; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4F6E8FBD2D77C0120025DD0D /* Build configuration list for PBXProject "Pandios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4F6E8FE42D77C0140025DD0D /* Debug */, - 4F6E8FE52D77C0140025DD0D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4F6E8FE62D77C0140025DD0D /* Build configuration list for PBXNativeTarget "Pandios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4F6E8FE72D77C0140025DD0D /* Debug */, - 4F6E8FE82D77C0140025DD0D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4F6E8FE92D77C0140025DD0D /* Build configuration list for PBXNativeTarget "PandiosTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4F6E8FEA2D77C0140025DD0D /* Debug */, - 4F6E8FEB2D77C0140025DD0D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4F6E8FEC2D77C0140025DD0D /* Build configuration list for PBXNativeTarget "PandiosUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4F6E8FED2D77C0140025DD0D /* Debug */, - 4F6E8FEE2D77C0140025DD0D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 4F6E8FBA2D77C0120025DD0D /* Project object */; -} diff --git a/src/pandios/Pandios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/src/pandios/Pandios.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/src/pandios/Pandios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/src/pandios/Pandios.xcodeproj/project.xcworkspace/xcuserdata/giorgos.xcuserdatad/UserInterfaceState.xcuserstate b/src/pandios/Pandios.xcodeproj/project.xcworkspace/xcuserdata/giorgos.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 3009b72b..00000000 Binary files a/src/pandios/Pandios.xcodeproj/project.xcworkspace/xcuserdata/giorgos.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/src/pandios/Pandios.xcodeproj/xcuserdata/giorgos.xcuserdatad/xcschemes/xcschememanagement.plist b/src/pandios/Pandios.xcodeproj/xcuserdata/giorgos.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 410128b7..00000000 --- a/src/pandios/Pandios.xcodeproj/xcuserdata/giorgos.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - SchemeUserState - - Pandios.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/src/pandios/Pandios/Assets.xcassets/AccentColor.colorset/Contents.json b/src/pandios/Pandios/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb878970..00000000 --- a/src/pandios/Pandios/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/src/pandios/Pandios/Assets.xcassets/AppIcon.appiconset/Contents.json b/src/pandios/Pandios/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 23058801..00000000 --- a/src/pandios/Pandios/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/src/pandios/Pandios/Assets.xcassets/Contents.json b/src/pandios/Pandios/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/src/pandios/Pandios/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/src/pandios/Pandios/ContentView.swift b/src/pandios/Pandios/ContentView.swift deleted file mode 100644 index d8f321f9..00000000 --- a/src/pandios/Pandios/ContentView.swift +++ /dev/null @@ -1,116 +0,0 @@ -import AlberDriver -import SwiftUI -import MetalKit -import Darwin - -final class DrawableSize { - var width: UInt32 = 0 - var height: UInt32 = 0 - var sizeChanged = false -} - -var emulatorLock = NSLock() -var drawableSize = DrawableSize() - -class ResizeAwareMTKView: MTKView { - var onResize: ((CGSize) -> Void)? - - override func layoutSubviews() { - super.layoutSubviews() - onResize?(self.drawableSize) - } -} - -class DocumentViewController: UIViewController, DocumentDelegate { - var documentPicker: DocumentPicker! - - override func viewDidLoad() { - super.viewDidLoad() - documentPicker = DocumentPicker(presentationController: self, delegate: self) - /// When the view loads (ie user opens the app) show the file picker - show() - } - - /// Callback from the document picker - func didPickDocument(document: Document?) { - if let pickedDoc = document { - let fileURL = pickedDoc.fileURL - - print("Loading ROM", fileURL) - emulatorLock.lock() - iosLoadROM(fileURL.path(percentEncoded: false)) - emulatorLock.unlock() - } - } - - func show() { - documentPicker.displayPicker() - } -} - -struct DocumentView: UIViewControllerRepresentable { - func makeUIViewController(context: Context) -> DocumentViewController { - DocumentViewController() - } - - func updateUIViewController(_ uiViewController: DocumentViewController, context: Context) {} -} - -struct ContentView: UIViewRepresentable { - func makeUIView(context: Context) -> ResizeAwareMTKView { - let mtkView = ResizeAwareMTKView() - mtkView.preferredFramesPerSecond = 60 - mtkView.enableSetNeedsDisplay = true - mtkView.isPaused = true - - if let metalDevice = MTLCreateSystemDefaultDevice() { - mtkView.device = metalDevice - } - - mtkView.framebufferOnly = false - mtkView.drawableSize = mtkView.frame.size - - mtkView.onResize = { newDrawableSize in - let newWidth = UInt32(newDrawableSize.width) - let newHeight = UInt32(newDrawableSize.height) - - emulatorLock.lock() - if drawableSize.width != newWidth || drawableSize.height != newHeight { - drawableSize.width = newWidth - drawableSize.height = newHeight - drawableSize.sizeChanged = true - } - emulatorLock.unlock() - } - - let dispatchQueue = DispatchQueue(label: "QueueIdentification", qos: .background) - let metalLayer = mtkView.layer as! CAMetalLayer - - dispatchQueue.async { - iosCreateEmulator() - - while (true) { - emulatorLock.lock() - if drawableSize.sizeChanged { - drawableSize.sizeChanged = false - iosSetOutputSize(drawableSize.width, drawableSize.height) - } - - iosRunFrame(metalLayer) - emulatorLock.unlock() - } - } - - return mtkView - } - - func updateUIView(_ uiView: ResizeAwareMTKView, context: Context) {} -} - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - DocumentView() - ContentView() - .frame(maxWidth: .infinity, maxHeight: .infinity) - } -} diff --git a/src/pandios/Pandios/DocumentPicker.swift b/src/pandios/Pandios/DocumentPicker.swift deleted file mode 100644 index a91b8b76..00000000 --- a/src/pandios/Pandios/DocumentPicker.swift +++ /dev/null @@ -1,75 +0,0 @@ -// From https://gist.github.com/aheze/dbc7f9b452e4f86f2d8fe278b3c5001f -// DocumentPicker.swift - -import UIKit -import MobileCoreServices -import UniformTypeIdentifiers - -protocol DocumentDelegate: AnyObject { - func didPickDocument(document: Document?) -} - -class Document: UIDocument { - var data: Data? - override func contents(forType typeName: String) throws -> Any { - guard let data = data else { return Data() } - return try NSKeyedArchiver.archivedData(withRootObject:data, - requiringSecureCoding: true) - } - override func load(fromContents contents: Any, ofType typeName: - String?) throws { - guard let data = contents as? Data else { return } - self.data = data - } -} - -open class DocumentPicker: NSObject { - private var pickerController: UIDocumentPickerViewController? - private weak var presentationController: UIViewController? - private weak var delegate: DocumentDelegate? - - private var pickedDocument: Document? - - init(presentationController: UIViewController, delegate: DocumentDelegate) { - super.init() - self.presentationController = presentationController - self.delegate = delegate - } - - public func displayPicker() { - self.pickerController = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.data]) - self.pickerController!.delegate = self - self.presentationController?.present(self.pickerController!, animated: true) - } -} - -extension DocumentPicker: UIDocumentPickerDelegate { - /// delegate method, when the user selects a file - public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { - guard let url = urls.first else { - return - } - documentFromURL(pickedURL: url) - delegate?.didPickDocument(document: pickedDocument) - } - - /// delegate method, when the user cancels - public func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) { - delegate?.didPickDocument(document: nil) - } - - private func documentFromURL(pickedURL: URL) { - /// start accessing the resource - let shouldStopAccessing = pickedURL.startAccessingSecurityScopedResource() - - defer { - if shouldStopAccessing { - pickedURL.stopAccessingSecurityScopedResource() - } - } - NSFileCoordinator().coordinate(readingItemAt: pickedURL, error: NSErrorPointer.none) { (readURL) in - let document = Document(fileURL: readURL) - pickedDocument = document - } - } -} diff --git a/src/pandios/Pandios/PandiosApp.swift b/src/pandios/Pandios/PandiosApp.swift deleted file mode 100644 index 63766574..00000000 --- a/src/pandios/Pandios/PandiosApp.swift +++ /dev/null @@ -1,11 +0,0 @@ -import SwiftUI - -@main -struct PandiosApp: App { - var body: some Scene { - WindowGroup { - ContentView() - DocumentView() - } - } -} diff --git a/src/pandios/Pandios/Preview Content/Preview Assets.xcassets/Contents.json b/src/pandios/Pandios/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/src/pandios/Pandios/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/src/pandios/build.sh b/src/pandios/build.sh deleted file mode 100755 index 63c954c3..00000000 --- a/src/pandios/build.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -# Settings for the SwiftUI frontend -ARCH=arm64 -CONFIGURATION=Release -SDK=iphonesimulator - -# Settings for the emulator core -EMULATOR_BUILD_TYPE=Release - -# Simulator settings -RUN_SIMULATOR=false - -# Fail on error -set -e - -# Go to the parent directory and build the emulator core -cd ../.. -cmake -B build -DENABLE_VULKAN=OFF -DBUILD_HYDRA_CORE=ON -DENABLE_USER_BUILD=ON -DCMAKE_TOOLCHAIN_FILE=third_party/ios_toolchain/ios.toolchain.cmake -DPLATFORM=SIMULATORARM64 -DDEPLOYMENT_TARGET="13.0" -cmake --build build --config ${EMULATOR_BUILD_TYPE} - -# Copy the bridging header and emulator dylib to the iOS folder -cp ./include/ios_driver.h ./src/pandios/Alber/Headers/ios_driver.h -cp ./build/libAlber.dylib ./src/pandios/ - -# Come back to the iOS directory, build the SwiftUI xcode project and link them together -cd src/pandios -xcodebuild build -configuration ${CONFIGURATION} -sdk ${SDK} -arch ${ARCH} - -# To run the app in the simulator: -# Boot the iPhone, install the app on the iphone, then open the sim & launch the app -if [ "$RUN_SIMULATOR" = true ] ; then - xcrun simctl boot "iPhone 16 Pro" - xcrun simctl install "iPhone 16 Pro" "build/Release-iphonesimulator/Pandios.app" - open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app - xcrun simctl launch --console booted "Alber.Pandios" -fi diff --git a/src/pandroid/.gitignore b/src/pandroid/.gitignore deleted file mode 100644 index aa724b77..00000000 --- a/src/pandroid/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/caches -/.idea/libraries -/.idea/modules.xml -/.idea/workspace.xml -/.idea/navEditor.xml -/.idea/assetWizardSettings.xml -.DS_Store -/build -/captures -.externalNativeBuild -.cxx -local.properties diff --git a/src/pandroid/app/build.gradle.kts b/src/pandroid/app/build.gradle.kts deleted file mode 100644 index b67f9419..00000000 --- a/src/pandroid/app/build.gradle.kts +++ /dev/null @@ -1,56 +0,0 @@ -plugins { - id("com.android.application") -} - -android { - namespace = "com.panda3ds.pandroid" - compileSdk = 33 - - defaultConfig { - applicationId = "com.panda3ds.pandroid" - minSdk = 24 - targetSdk = 33 - versionCode = 1 - versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - - ndk { - abiFilters += listOf("x86_64", "arm64-v8a") - } - } - - buildTypes { - getByName("release") { - isMinifyEnabled = true - isShrinkResources = true - isDebuggable = false - signingConfig = signingConfigs.getByName("debug") - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } - getByName("debug") { - isMinifyEnabled = false - isShrinkResources = false - isDebuggable = true - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } -} - -dependencies { - implementation("androidx.appcompat:appcompat:1.6.1") - implementation("com.google.android.material:material:1.8.0") - implementation("androidx.preference:preference:1.2.1") - implementation("androidx.constraintlayout:constraintlayout:2.1.4") - implementation("com.google.code.gson:gson:2.10.1") -} diff --git a/src/pandroid/app/proguard-rules.pro b/src/pandroid/app/proguard-rules.pro deleted file mode 100644 index 31c24c5a..00000000 --- a/src/pandroid/app/proguard-rules.pro +++ /dev/null @@ -1,24 +0,0 @@ -# Pandroid Proguard Rules -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Keep all JNI and C++ related classes and methods --keepclasseswithmembernames class * { - native ; -} - -# Keep all native libraries and their methods --keep class * { - native ; -} - -# Keep all classes in the specified package and its subpackages --keep class com.panda3ds.pandroid.** {*;} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/src/pandroid/app/src/main/AndroidManifest.xml b/src/pandroid/app/src/main/AndroidManifest.xml deleted file mode 100644 index d47ae2bb..00000000 --- a/src/pandroid/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/assets/fonts/comic_mono.ttf b/src/pandroid/app/src/main/assets/fonts/comic_mono.ttf deleted file mode 100644 index 9bc7354e..00000000 Binary files a/src/pandroid/app/src/main/assets/fonts/comic_mono.ttf and /dev/null differ diff --git a/src/pandroid/app/src/main/ic_launcher-playstore.png b/src/pandroid/app/src/main/ic_launcher-playstore.png deleted file mode 100644 index 04b65284..00000000 Binary files a/src/pandroid/app/src/main/ic_launcher-playstore.png and /dev/null differ diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java deleted file mode 100644 index 83392b0a..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.panda3ds.pandroid; - -import android.content.Context; -import android.net.Uri; -import android.os.ParcelFileDescriptor; - -import com.panda3ds.pandroid.app.PandroidApplication; -import com.panda3ds.pandroid.utils.FileUtils; -import com.panda3ds.pandroid.utils.GameUtils; - -import java.util.Objects; - -public class AlberDriver { - AlberDriver() { super(); } - - public static native void Setup(); - public static native void Initialize(); - public static native void RunFrame(int fbo); - public static native boolean HasRomLoaded(); - public static native boolean LoadRom(String path); - public static native void Finalize(); - - public static native void KeyDown(int code); - public static native void KeyUp(int code); - public static native void SetCirclepadAxis(int x, int y); - public static native void TouchScreenUp(); - public static native void TouchScreenDown(int x, int y);; - public static native void SetGyro(float roll, float pitch, float yaw); - public static native void SetAccel(float x, float y, float z); - public static native void Pause(); - public static native void Resume(); - public static native void LoadLuaScript(String script); - public static native byte[] GetSmdh(); - - public static native void setShaderJitEnabled(boolean enable); - public static native void setAccurateShaderMulEnable(boolean enable); - public static native void setAudioEnabled(boolean enable); - - public static int openDocument(String path, String mode) { - try { - mode = FileUtils.parseNativeMode(mode); - Context context = PandroidApplication.getAppContext(); - Uri uri = FileUtils.obtainUri(path); - ParcelFileDescriptor parcel; - if (Objects.equals(uri.getScheme(), "game")) { - if (mode.contains("w")) { - throw new IllegalArgumentException("Cannot open ROM file as writable"); - } - uri = FileUtils.obtainUri(GameUtils.getCurrentGame().getRealPath()); - } - parcel = context.getContentResolver().openFileDescriptor(uri, mode); - int fd = parcel.detachFd(); - parcel.close(); - - return fd; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - static { System.loadLibrary("Alber"); } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java deleted file mode 100644 index 6bbb2012..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.panda3ds.pandroid.app; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.google.android.material.color.DynamicColors; -import com.panda3ds.pandroid.data.config.GlobalConfig; - - -public class BaseActivity extends AppCompatActivity { - private int currentTheme = PandroidApplication.getThemeId(); - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - applyTheme(); - super.onCreate(savedInstanceState); - } - - @Override - protected void onResume() { - super.onResume(); - - if (PandroidApplication.getThemeId() != currentTheme) { - recreate(); - } - } - - private void applyTheme() { - currentTheme = PandroidApplication.getThemeId(); - setTheme(currentTheme); - - if (GlobalConfig.get(GlobalConfig.KEY_APP_THEME) == GlobalConfig.THEME_ANDROID) { - DynamicColors.applyToActivityIfAvailable(this); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java deleted file mode 100644 index c6764d38..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.panda3ds.pandroid.app; - -import android.app.ActivityManager; -import android.app.PictureInPictureParams; -import android.content.Intent; -import android.content.res.Configuration; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.opengl.Matrix; -import android.os.Build; -import android.os.Bundle; -import android.renderscript.Matrix3f; -import android.renderscript.Matrix4f; -import android.util.Log; -import android.util.Rational; -import android.view.Display; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.Surface; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.CheckBox; -import android.widget.FrameLayout; -import android.widget.Toast; - -import androidx.annotation.Nullable; - -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.game.AlberInputListener; -import com.panda3ds.pandroid.app.game.DrawerFragment; -import com.panda3ds.pandroid.app.game.EmulatorCallback; -import com.panda3ds.pandroid.data.config.GlobalConfig; -import com.panda3ds.pandroid.input.InputHandler; -import com.panda3ds.pandroid.input.InputMap; -import com.panda3ds.pandroid.math.Vector3; -import com.panda3ds.pandroid.utils.Constants; -import com.panda3ds.pandroid.view.PandaGlSurfaceView; -import com.panda3ds.pandroid.view.PandaLayoutController; -import com.panda3ds.pandroid.view.ds.DsLayoutManager; -import com.panda3ds.pandroid.view.renderer.ConsoleRenderer; -import com.panda3ds.pandroid.view.utils.PerformanceView; - -public class GameActivity extends BaseActivity implements EmulatorCallback, SensorEventListener { - private final DrawerFragment drawerFragment = new DrawerFragment(); - private final AlberInputListener inputListener = new AlberInputListener(this); - private ConsoleRenderer renderer; - private int currentDsLayout; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Intent intent = getIntent(); - if (!intent.hasExtra(Constants.ACTIVITY_PARAMETER_PATH)) { - setContentView(new FrameLayout(this)); - Toast.makeText(this, "Invalid rom path!", Toast.LENGTH_LONG).show(); - finish(); - return; - } - - PandaGlSurfaceView pandaSurface = new PandaGlSurfaceView(this, intent.getStringExtra(Constants.ACTIVITY_PARAMETER_PATH)); - setContentView(R.layout.game_activity); - - renderer = pandaSurface.getRenderer(); - - ((FrameLayout) findViewById(R.id.panda_gl_frame)) - .addView(pandaSurface, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - - PandaLayoutController controllerLayout = findViewById(R.id.controller_layout); - controllerLayout.initialize(); - - ((CheckBox) findViewById(R.id.hide_screen_controller)).setOnCheckedChangeListener((buttonView, checked) -> { - changeOverlayVisibility(checked); - GlobalConfig.set(GlobalConfig.KEY_SCREEN_GAMEPAD_VISIBLE, checked); - }); - ((CheckBox) findViewById(R.id.hide_screen_controller)).setChecked(GlobalConfig.get(GlobalConfig.KEY_SCREEN_GAMEPAD_VISIBLE)); - - getSupportFragmentManager().beginTransaction().replace(R.id.drawer_fragment, drawerFragment).commitNow(); - - if (GlobalConfig.get(GlobalConfig.KEY_SHOW_PERFORMANCE_OVERLAY)) { - PerformanceView view = new PerformanceView(this); - ((FrameLayout) findViewById(R.id.panda_gl_frame)).addView(view, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - } - swapScreens(GlobalConfig.get(GlobalConfig.KEY_CURRENT_DS_LAYOUT)); - registerSensors(); - } - - private void registerSensors() { - SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); - Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); - if (accel != null) { - sensorManager.registerListener(this, accel, 1); - } - Sensor gryro = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); - if (gryro != null) { - sensorManager.registerListener(this, gryro, 1); - } - } - - private void changeOverlayVisibility(boolean visible) { - findViewById(R.id.overlay_controller).setVisibility(visible ? View.VISIBLE : View.GONE); - findViewById(R.id.overlay_controller).invalidate(); - findViewById(R.id.overlay_controller).requestLayout(); - } - - @Override - protected void onResume() { - super.onResume(); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - InputHandler.reset(); - InputHandler.setMotionDeadZone(InputMap.getDeadZone()); - InputHandler.setEventListener(inputListener); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { - getTheme().applyStyle(R.style.GameActivityNavigationBar, true); - } - registerSensors(); - } - - private void enablePIP() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - builder.setAutoEnterEnabled(true); - builder.setSeamlessResizeEnabled(true); - } - - builder.setAspectRatio(new Rational(10, 14)); - enterPictureInPictureMode(builder.build()); - } - } - - @Override - protected void onPause() { - super.onPause(); - - ((SensorManager)getSystemService(SENSOR_SERVICE)).unregisterListener(this); - InputHandler.reset(); - if (GlobalConfig.get(GlobalConfig.KEY_PICTURE_IN_PICTURE)) { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { - enablePIP(); - } - } else { - drawerFragment.open(); - } - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP || event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) { - return super.dispatchKeyEvent(event); - } - - if ((!drawerFragment.isOpened()) && InputHandler.processKeyEvent(event)) { - return true; - } - - return super.dispatchKeyEvent(event); - } - - @Override - public void onBackPressed() { - if (drawerFragment.isOpened()) { - drawerFragment.close(); - } else { - drawerFragment.open(); - } - } - - @Override - public void swapScreens(int index) { - currentDsLayout = index; - GlobalConfig.set(GlobalConfig.KEY_CURRENT_DS_LAYOUT, index); - renderer.setLayout(DsLayoutManager.createLayout(currentDsLayout)); - } - - @Override - public boolean dispatchGenericMotionEvent(MotionEvent ev) { - if ((!drawerFragment.isOpened()) && InputHandler.processMotionEvent(ev)) { - return true; - } - - return super.dispatchGenericMotionEvent(ev); - } - - @Override - public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { - super.onPictureInPictureModeChanged(isInPictureInPictureMode); - - changeOverlayVisibility(!isInPictureInPictureMode && GlobalConfig.get(GlobalConfig.KEY_SCREEN_GAMEPAD_VISIBLE)); - findViewById(R.id.hide_screen_controller).setVisibility(isInPictureInPictureMode ? View.INVISIBLE : View.VISIBLE); - - if (isInPictureInPictureMode) { - getWindow().getDecorView().postDelayed(drawerFragment::close, 250); - } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { - ActivityManager manager = ((ActivityManager) getSystemService(ACTIVITY_SERVICE)); - manager.getAppTasks().forEach(ActivityManager.AppTask::moveToFront); - } - } - - @Override - protected void onDestroy() { - ((SensorManager)getSystemService(SENSOR_SERVICE)).unregisterListener(this); - if (AlberDriver.HasRomLoaded()) { - AlberDriver.Finalize(); - } - - super.onDestroy(); - } - - private float getDeviceRotationAngle() { - if (getWindow().getDecorView() == null || getWindow().getDecorView().getDisplay() == null) - return 0.0f; - - int rotation = getWindow().getDecorView().getDisplay().getRotation(); - switch (rotation) { - case Surface.ROTATION_90: return 90.0f; - case Surface.ROTATION_180: return 180.0f; - case Surface.ROTATION_270: return -90.0f; - default: return 0.0f; - } - } - - @Override - public void onSensorChanged(SensorEvent event) { - if (AlberDriver.HasRomLoaded()) { - Sensor sensor = event.sensor; - switch (sensor.getType()) { - case Sensor.TYPE_ACCELEROMETER: { - float[] values = event.values; - Vector3 vec3 = new Vector3(values[0], values[1], values[2]); - vec3.rotateByEuler(new Vector3(0, 0, (float) (getDeviceRotationAngle() * (Math.PI / 180.0f)))); - AlberDriver.SetAccel(vec3.x, vec3.y, vec3.z); - } break; - case Sensor.TYPE_GYROSCOPE: { - float[] values = event.values; - Vector3 vec3 = new Vector3(values[0], values[1], values[2]); - vec3.rotateByEuler(new Vector3(0, 0, (float) (getDeviceRotationAngle() * (Math.PI / 180.0f)))); - AlberDriver.SetGyro(vec3.x, vec3.y, vec3.z); - } break; - } - } - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) {} -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/MainActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/MainActivity.java deleted file mode 100644 index 1d57cdc5..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/MainActivity.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.panda3ds.pandroid.app; - -import android.os.Bundle; -import android.view.MenuItem; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import com.google.android.material.navigation.NavigationBarView; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.main.GamesFragment; -import com.panda3ds.pandroid.app.main.SearchFragment; -import com.panda3ds.pandroid.app.main.SettingsFragment; - -public class MainActivity extends BaseActivity implements NavigationBarView.OnItemSelectedListener { - private final GamesFragment gamesFragment = new GamesFragment(); - private final SearchFragment searchFragment = new SearchFragment(); - private final SettingsFragment settingsFragment = new SettingsFragment(); - private NavigationBarView navigationBar; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - navigationBar = findViewById(R.id.navigation); - navigationBar.setOnItemSelectedListener(this); - navigationBar.postDelayed(() -> navigationBar.setSelectedItemId(navigationBar.getSelectedItemId()), 5); - } - - @Override - public void onBackPressed() { - if (navigationBar.getSelectedItemId() != R.id.games) { - navigationBar.setSelectedItemId(R.id.games); - } else { - super.onBackPressed(); - } - } - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - int id = item.getItemId(); - FragmentManager manager = getSupportFragmentManager(); - Fragment fragment; - if (id == R.id.games) { - fragment = gamesFragment; - } else if (id == R.id.search) { - fragment = searchFragment; - } else if (id == R.id.settings) { - fragment = settingsFragment; - } else { - return false; - } - - manager.beginTransaction().replace(R.id.fragment_container, fragment).commitNow(); - return true; - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PandroidApplication.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PandroidApplication.java deleted file mode 100644 index b0cdc935..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PandroidApplication.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.panda3ds.pandroid.app; - -import android.app.Application; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.content.res.Resources; - -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.services.LoggerService; -import com.panda3ds.pandroid.data.config.GlobalConfig; -import com.panda3ds.pandroid.input.InputMap; -import com.panda3ds.pandroid.utils.GameUtils; - - -public class PandroidApplication extends Application { - private static Context appContext; - - @Override - public void onCreate() { - super.onCreate(); - appContext = this; - - GlobalConfig.initialize(); - GameUtils.initialize(); - InputMap.initialize(); - AlberDriver.Setup(); - - if (GlobalConfig.get(GlobalConfig.KEY_LOGGER_SERVICE)) { - startService(new Intent(this, LoggerService.class)); - } - } - - public static int getThemeId() { - switch (GlobalConfig.get(GlobalConfig.KEY_APP_THEME)) { - case GlobalConfig.THEME_LIGHT: - return R.style.Theme_Pandroid_Light; - case GlobalConfig.THEME_DARK: - return R.style.Theme_Pandroid_Dark; - case GlobalConfig.THEME_BLACK: - return R.style.Theme_Pandroid_Black; - } - - return R.style.Theme_Pandroid; - } - - public static boolean isDarkMode() { - switch (GlobalConfig.get(GlobalConfig.KEY_APP_THEME)) { - case GlobalConfig.THEME_DARK: - case GlobalConfig.THEME_BLACK: - return true; - case GlobalConfig.THEME_LIGHT: - return false; - } - - Resources res = Resources.getSystem(); - int nightFlags = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; - return nightFlags == Configuration.UI_MODE_NIGHT_YES; - } - - public static Context getAppContext() { return appContext; } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PreferenceActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PreferenceActivity.java deleted file mode 100644 index 9bc9900b..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/PreferenceActivity.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.panda3ds.pandroid.app; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.view.MenuItem; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.utils.Constants; - -public class PreferenceActivity extends BaseActivity { - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Intent intent = getIntent(); - - setContentView(R.layout.activity_preference); - setSupportActionBar(findViewById(R.id.toolbar)); - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - if (!intent.hasExtra(Constants.ACTIVITY_PARAMETER_FRAGMENT)) { - finish(); - return; - } - - try { - Class clazz = getClassLoader().loadClass(intent.getStringExtra(Constants.ACTIVITY_PARAMETER_FRAGMENT)); - Fragment fragment = (Fragment) clazz.newInstance(); - fragment.setArguments(intent.getExtras()); - getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commitNow(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public static void launch(Context context, Class clazz) { - launch(context, clazz, new Intent()); - } - - public static void launch(Context context, Class clazz, Intent extras) { - context.startActivity(new Intent(context, PreferenceActivity.class) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .putExtras(extras) - .putExtra(Constants.ACTIVITY_PARAMETER_FRAGMENT, clazz.getName())); - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == android.R.id.home) { - finish(); - } - - return super.onOptionsItemSelected(item); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BasePreferenceFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BasePreferenceFragment.java deleted file mode 100644 index ae8d49ad..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BasePreferenceFragment.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.panda3ds.pandroid.app.base; - -import android.annotation.SuppressLint; - -import androidx.annotation.StringRes; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.preference.Preference; -import androidx.preference.PreferenceFragmentCompat; -import androidx.preference.SwitchPreferenceCompat; - -import com.panda3ds.pandroid.lang.Function; - - -public abstract class BasePreferenceFragment extends PreferenceFragmentCompat { - @SuppressLint("RestrictedApi") - protected void setItemClick(String key, Function listener) { - findPreference(key).setOnPreferenceClickListener(preference -> { - listener.run(preference); - getPreferenceScreen().performClick(); - return false; - }); - } - - protected void setSwitchValue(String id, boolean value) { - ((SwitchPreferenceCompat)findPreference(id)).setChecked(value); - } - - protected void setSummaryValue(String id,String text) { - findPreference(id).setSummary(text); - } - - protected void setActivityTitle(@StringRes int titleId) { - ActionBar header = ((AppCompatActivity) requireActivity()).getSupportActionBar(); - if (header != null) { - header.setTitle(titleId); - } - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BaseSheetDialog.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BaseSheetDialog.java deleted file mode 100644 index 76e5208b..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BaseSheetDialog.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.panda3ds.pandroid.app.base; - -import android.content.Context; -import android.util.TypedValue; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.LinearLayout; - -import androidx.annotation.NonNull; - -import com.google.android.material.bottomsheet.BottomSheetDialog; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.utils.CompatUtils; - -import org.jetbrains.annotations.NotNull; - -public class BaseSheetDialog extends BottomSheetDialog { - private final LinearLayout contentView; - public BaseSheetDialog(@NonNull Context context) { - super(CompatUtils.findActivity(context)); - - int width = CompatUtils.findActivity(context).getWindow().getDecorView().getMeasuredWidth(); - int height = CompatUtils.findActivity(context).getWindow().getDecorView().getMeasuredHeight(); - float heightScale = 0.87f; // What percentage of the screen's height to use up - - getBehavior().setPeekHeight((int) (height * heightScale)); - getBehavior().setMaxHeight((int) (height * heightScale)); - getBehavior().setMaxWidth(width); - - super.setContentView(R.layout.dialog_bottom_sheet); - contentView = super.findViewById(R.id.content); - } - - @Override - public void setContentView(View view) { - contentView.removeAllViews(); - contentView.addView(view); - } - - @Override - public void setContentView(int layoutResId) { - setContentView(LayoutInflater.from(getContext()).inflate(layoutResId, null, false)); - } - - @NotNull - @Override - public T findViewById(int id) { - return contentView.findViewById(id); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BottomAlertDialog.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BottomAlertDialog.java deleted file mode 100644 index 7c5470f1..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BottomAlertDialog.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.panda3ds.pandroid.app.base; - -import android.content.Context; -import android.view.Gravity; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.widget.AppCompatEditText; -import androidx.appcompat.widget.LinearLayoutCompat; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.lang.Function; - -public class BottomAlertDialog extends AlertDialog.Builder { - private final LinearLayoutCompat layoutCompat; - - public BottomAlertDialog(@NonNull Context context) { - super(context, R.style.AlertDialog); - layoutCompat = new LinearLayoutCompat(context); - layoutCompat.setOrientation(LinearLayoutCompat.VERTICAL); - - int padding = getContext().getResources().getDimensionPixelSize(androidx.appcompat.R.dimen.abc_dialog_padding_material); - layoutCompat.setPadding(padding, 0, padding, 0); - - setView(layoutCompat); - } - - @NonNull - @Override - public AlertDialog create() { - AlertDialog dialog = super.create(); - dialog.getWindow().setGravity(Gravity.BOTTOM | Gravity.CENTER); - dialog.getWindow().getAttributes().y = Math.round(getContext().getResources().getDisplayMetrics().density * 15); - return dialog; - } - - public BottomAlertDialog setTextInput(String hint, Function listener) { - AppCompatEditText edit = new AppCompatEditText(getContext()); - edit.setHint(hint); - int margin = layoutCompat.getPaddingLeft() / 2; - LinearLayoutCompat.LayoutParams params = new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - params.setMargins(0, margin, 0, margin); - layoutCompat.addView(edit, params); - setPositiveButton(android.R.string.ok, (dialog, which) -> listener.run(String.valueOf(edit.getText()))); - setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss()); - return this; - } - - @Override - public AlertDialog show() { - AlertDialog dialog = create(); - dialog.show(); - - return dialog; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BottomDialogFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BottomDialogFragment.java deleted file mode 100644 index 4e54dc61..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BottomDialogFragment.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.panda3ds.pandroid.app.base; - -import android.app.Dialog; -import android.os.Bundle; -import android.view.Gravity; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; - -import com.panda3ds.pandroid.R; - -public class BottomDialogFragment extends DialogFragment { - @Override - public int getTheme() { - return R.style.AlertDialog; - } - - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - Dialog dialog = super.onCreateDialog(savedInstanceState); - dialog.getWindow().setGravity(Gravity.CENTER | Gravity.BOTTOM); - dialog.getWindow().getAttributes().y = Math.round(getContext().getResources().getDisplayMetrics().density * 15); - - return dialog; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/GameAboutDialog.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/GameAboutDialog.java deleted file mode 100644 index 7fd6ed36..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/GameAboutDialog.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.panda3ds.pandroid.app.base; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.core.content.pm.ShortcutInfoCompat; -import androidx.core.content.pm.ShortcutManagerCompat; -import androidx.core.graphics.drawable.IconCompat; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PandroidApplication; -import com.panda3ds.pandroid.app.game.GameLauncher; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.utils.CompatUtils; -import com.panda3ds.pandroid.utils.FileUtils; -import com.panda3ds.pandroid.utils.GameUtils; -import com.panda3ds.pandroid.view.gamesgrid.GameIconView; - -public class GameAboutDialog extends BaseSheetDialog { - private final GameMetadata game; - public GameAboutDialog(@NonNull Context context, GameMetadata game) { - super(context); - this.game = game; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.dialog_game_about); - - ((GameIconView) findViewById(R.id.game_icon)).setImageBitmap(game.getIcon()); - ((TextView) findViewById(R.id.game_title)).setText(game.getTitle()); - ((TextView) findViewById(R.id.game_publisher)).setText(game.getPublisher()); - ((TextView) findViewById(R.id.region)).setText(game.getRegions()[0].localizedName()); - ((TextView) findViewById(R.id.directory)).setText(FileUtils.obtainUri(game.getRealPath()).getPath()); - findViewById(R.id.play).setOnClickListener(v -> { - dismiss(); - GameUtils.launch(getContext(), game); - }); - findViewById(R.id.shortcut).setOnClickListener(v -> { - dismiss(); - makeShortcut(); - }); - - if (game.getRomPath().startsWith("folder:")) { - findViewById(R.id.remove).setVisibility(View.GONE); - } else { - findViewById(R.id.remove).setOnClickListener(v -> { - dismiss(); - if (game.getRomPath().startsWith("elf:")) { - FileUtils.delete(game.getRealPath()); - } - GameUtils.removeGame(game); - }); - } - } - - // Make a shortcut for a specific game - private void makeShortcut() { - Context context = CompatUtils.findActivity(getContext()); - ShortcutInfoCompat.Builder shortcut = new ShortcutInfoCompat.Builder(context, game.getId()); - if (game.getIcon() != null) { - shortcut.setIcon(IconCompat.createWithAdaptiveBitmap(game.getIcon())); - } else { - shortcut.setIcon(IconCompat.createWithResource(getContext(), R.mipmap.ic_launcher)); - } - - shortcut.setActivity(new ComponentName(context, GameLauncher.class)); - shortcut.setLongLabel(game.getTitle()); - shortcut.setShortLabel(game.getTitle()); - Intent intent = new Intent(PandroidApplication.getAppContext(), GameLauncher.class); - intent.setAction(Intent.ACTION_VIEW); - intent.setData(new Uri.Builder().scheme("pandroid-game").authority(game.getId()).build()); - shortcut.setIntent(intent); - ShortcutManagerCompat.requestPinShortcut(context, shortcut.build(), null); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/LoadingAlertDialog.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/LoadingAlertDialog.java deleted file mode 100644 index 881d12cf..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/LoadingAlertDialog.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.panda3ds.pandroid.app.base; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.StringRes; -import androidx.appcompat.widget.AppCompatTextView; - -import com.panda3ds.pandroid.R; - -public class LoadingAlertDialog extends BottomAlertDialog { - public LoadingAlertDialog(@NonNull Context context, @StringRes int title) { - super(context); - View view = LayoutInflater.from(context).inflate(R.layout.dialog_loading, null, false); - setView(view); - setCancelable(false); - ((AppCompatTextView)view.findViewById(R.id.title)) - .setText(title); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/editor/CodeEditorActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/editor/CodeEditorActivity.java deleted file mode 100644 index e5ced4b4..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/editor/CodeEditorActivity.java +++ /dev/null @@ -1,196 +0,0 @@ -package com.panda3ds.pandroid.app.editor; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.graphics.Rect; -import android.os.Bundle; -import android.view.KeyEvent; -import android.view.View; -import android.view.inputmethod.InputMethodManager; - -import androidx.activity.result.contract.ActivityResultContract; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatTextView; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.BaseActivity; -import com.panda3ds.pandroid.app.base.BottomAlertDialog; -import com.panda3ds.pandroid.lang.Task; -import com.panda3ds.pandroid.utils.FileUtils; -import com.panda3ds.pandroid.view.code.CodeEditor; -import com.panda3ds.pandroid.view.code.syntax.CodeSyntax; - -import java.io.Serializable; - -public class CodeEditorActivity extends BaseActivity { - private static final String TAB = " "; - private String path; - private String fileName; - private CodeEditor editor; - private AppCompatTextView title; - private View saveButton; - private boolean changed = false; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_code_editor); - Arguments args = (Arguments) getIntent().getSerializableExtra("args"); - - editor = findViewById(R.id.editor); - getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(this::onGlobalLayoutChanged); - - path = args.path; - fileName = args.fileName; - title = findViewById(R.id.title); - title.setText(fileName); - - saveButton = findViewById(R.id.save); - - saveButton.setVisibility(View.GONE); - saveButton.setOnClickListener(v -> save()); - - new Task(() -> { - String content = FileUtils.readTextFile(path + "/" + fileName); - - editor.post(() -> { - editor.setText(content); - editor.setSyntax(CodeSyntax.getFromFilename(fileName)); - editor.setOnContentChangedListener(this::onDocumentContentChanged); - }); - }).start(); - - switch (args.type) { - case LUA_SCRIPT_EDITOR: - setupLuaPatchEditor(); - break; - case READ_ONLY_EDITOR: - setupReadOnlyEditor(); - break; - } - - onGlobalLayoutChanged(); - - findViewById(R.id.key_hide).setOnClickListener(v -> { - ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0); - }); - findViewById(R.id.key_tab).setOnClickListener(v -> { - editor.insert(TAB); - }); - } - - // Detect virtual keyboard is visible - private void onGlobalLayoutChanged() { - View view = getWindow().getDecorView(); - Rect rect = new Rect(); - view.getWindowVisibleDisplayFrame(rect); - int currentHeight = rect.height(); - int height = view.getHeight(); - - if (currentHeight < height * 0.8) { - findViewById(R.id.keybar).setVisibility(View.VISIBLE); - } else { - findViewById(R.id.keybar).setVisibility(View.GONE); - } - } - - private void setupReadOnlyEditor() { - editor.setEnabled(false); - editor.setFocusable(false); - } - - private void setupLuaPatchEditor() { - findViewById(R.id.lua_toolbar).setVisibility(View.VISIBLE); - findViewById(R.id.lua_play).setOnClickListener(v -> { - if (changed) { - save(); - } - setResult(Activity.RESULT_OK, new Intent(Result.ACTION_PLAY.name())); - finish(); - }); - } - - @SuppressLint("SetTextI18n") - private void onDocumentContentChanged() { - changed = true; - - title.setText("*" + fileName); - saveButton.setVisibility(View.VISIBLE); - } - - public void save() { - title.setText(fileName); - saveButton.setVisibility(View.GONE); - - changed = false; - new Task(() -> FileUtils.writeTextFile(path, fileName, String.valueOf(editor.getText()))).runSync(); - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - if (event.getKeyCode() == KeyEvent.KEYCODE_TAB) { - if (event.getAction() == KeyEvent.ACTION_UP) { - editor.insert(TAB); - } - - return true; - } - - return super.dispatchKeyEvent(event); - } - - @Override - public void onBackPressed() { - if (changed) { - new BottomAlertDialog(this) - .setNeutralButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss()) - .setPositiveButton(R.string.save_and_exit, (dialog, which) -> { - save(); - finish(); - }) - .setNegativeButton(R.string.exit_without_saving, (dialog, which) -> finish()) - .setTitle(String.format(getString(R.string.exit_without_saving_title_ff), fileName)).show(); - } else { - super.onBackPressed(); - } - } - - public static final class Arguments implements Serializable { - private final String path; - private final String fileName; - private final EditorType type; - - public Arguments(String path, String fileName, EditorType type) { - this.path = path; - this.fileName = fileName; - this.type = type; - } - } - - public enum Result { - ACTION_PLAY, - NULL - } - - public enum EditorType { - LUA_SCRIPT_EDITOR, - READ_ONLY_EDITOR, - TEXT_EDITOR - } - - public static final class Contract extends ActivityResultContract { - @NonNull - @Override - public Intent createIntent(@NonNull Context context, Arguments args) { - return new Intent(context, CodeEditorActivity.class).putExtra("args", args); - } - - @Override - public Result parseResult(int i, @Nullable Intent intent) { - return i == RESULT_OK && intent != null ? Result.valueOf(intent.getAction()) : Result.NULL; - } - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/AlberInputListener.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/AlberInputListener.java deleted file mode 100644 index ca63f7ba..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/AlberInputListener.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.panda3ds.pandroid.app.game; - -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.input.InputEvent; -import com.panda3ds.pandroid.input.InputMap; -import com.panda3ds.pandroid.input.KeyName; -import com.panda3ds.pandroid.lang.Function; -import com.panda3ds.pandroid.math.Vector2; - -import java.util.Objects; - - -public class AlberInputListener implements Function { - private final EmulatorCallback emulator; - public AlberInputListener(EmulatorCallback emulator) { this.emulator = emulator; } - - private final Vector2 axis = new Vector2(0.0f, 0.0f); - - @Override - public void run(InputEvent event) { - KeyName key = InputMap.relative(event.getName()); - - if (Objects.equals(event.getName(), "KEYCODE_BACK")) { - emulator.onBackPressed(); - return; - } - - if (key == KeyName.NULL) { - return; - } - - boolean axisChanged = false; - - switch (key) { - case AXIS_UP: - axis.y = event.getValue(); - axisChanged = true; - break; - case AXIS_DOWN: - axis.y = -event.getValue(); - axisChanged = true; - break; - case AXIS_LEFT: - axis.x = -event.getValue(); - axisChanged = true; - break; - case AXIS_RIGHT: - axis.x = event.getValue(); - axisChanged = true; - break; - case CHANGE_DS_LAYOUT: - if (!event.isDown()) { - emulator.swapScreens(); - } - break; - default: - if (event.isDown()) { - AlberDriver.KeyDown(key.getKeyId()); - } else { - AlberDriver.KeyUp(key.getKeyId()); - } - break; - } - - if (axisChanged) { - AlberDriver.SetCirclepadAxis(Math.round(axis.x * 0x9C), Math.round(axis.y * 0x9C)); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/DrawerFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/DrawerFragment.java deleted file mode 100644 index 736a2cdc..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/DrawerFragment.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.panda3ds.pandroid.app.game; - -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.os.Build; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatTextView; -import androidx.drawerlayout.widget.DrawerLayout; -import androidx.fragment.app.Fragment; -import android.content.pm.ActivityInfo; - -import com.google.android.material.navigation.NavigationView; -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.utils.GameUtils; -import com.panda3ds.pandroid.view.gamesgrid.GameIconView; - -public class DrawerFragment extends Fragment implements DrawerLayout.DrawerListener, NavigationView.OnNavigationItemSelectedListener { - private DrawerLayout drawerContainer; - private View drawerLayout; - private EmulatorCallback emulator; - private GameMetadata game; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - emulator = ((EmulatorCallback) requireActivity()); - drawerContainer = requireActivity().findViewById(R.id.drawer_container); - drawerContainer.removeDrawerListener(this); - drawerContainer.addDrawerListener(this); - drawerContainer.setScrimColor(Color.argb(160, 0,0,0)); - drawerContainer.setVisibility(View.GONE); - - return inflater.inflate(R.layout.fragment_game_drawer, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - drawerContainer.setVisibility(View.GONE); - drawerLayout = view.findViewById(R.id.drawer_layout); - - ((NavigationView)view.findViewById(R.id.menu)).setNavigationItemSelectedListener(this); - refresh(); - } - - private void refresh() { - game = GameUtils.getCurrentGame(); - if (game.getIcon() != null && !game.getIcon().isRecycled()) { - ((GameIconView) drawerLayout.findViewById(R.id.game_icon)).setImageBitmap(game.getIcon()); - } else { - ((GameIconView) drawerLayout.findViewById(R.id.game_icon)).setImageDrawable(new ColorDrawable(Color.TRANSPARENT)); - } - ((AppCompatTextView)drawerLayout.findViewById(R.id.game_title)).setText(game.getTitle()); - ((AppCompatTextView)drawerLayout.findViewById(R.id.game_publisher)).setText(game.getPublisher()); - } - - @Override - public void onDetach() { - if (drawerContainer != null) { - drawerContainer.removeDrawerListener(this); - } - - super.onDetach(); - } - - private void refreshLayout() { - drawerContainer.measure(View.MeasureSpec.EXACTLY, View.MeasureSpec.EXACTLY); - drawerContainer.requestLayout(); - drawerContainer.invalidate(); - drawerContainer.forceLayout(); - } - - public void open() { - if (!drawerContainer.isOpen()) { - drawerContainer.setVisibility(View.VISIBLE); - drawerContainer.open(); - drawerContainer.postDelayed(this::refreshLayout, 20); - refresh(); - } - } - - public void close() { - if (drawerContainer.isOpen()) { - drawerContainer.close(); - } - } - - @Override - public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {} - - @Override - public void onDrawerOpened(@NonNull View drawerView) { - AlberDriver.Pause(); - } - - @Override - public void onDrawerClosed(@NonNull View drawerView) { - drawerContainer.setVisibility(View.GONE); - AlberDriver.Resume(); - } - - @Override - public void onDrawerStateChanged(int newState) {} - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - int id = item.getItemId(); - if (id == R.id.resume) { - close(); - } else if (id == R.id.ds_switch) { - emulator.swapScreens(); - close(); - } else if (id == R.id.exit) { - requireActivity().finishAndRemoveTask(); - } else if (id == R.id.lua_script) { - new LuaDialogFragment().show(getParentFragmentManager(), null); - } else if (id == R.id.change_orientation) { - boolean isLandscape = getResources().getDisplayMetrics().widthPixels > getResources().getDisplayMetrics().heightPixels; - requireActivity().setRequestedOrientation(isLandscape ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); - } - - return false; - } - - public boolean isOpened() { - return drawerContainer.isOpen(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/EmulatorCallback.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/EmulatorCallback.java deleted file mode 100644 index b2f57baf..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/EmulatorCallback.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.panda3ds.pandroid.app.game; - -import com.panda3ds.pandroid.data.config.GlobalConfig; - -public interface EmulatorCallback { - void onBackPressed(); - void swapScreens(int index); - - default void swapScreens() { - swapScreens(GlobalConfig.get(GlobalConfig.KEY_CURRENT_DS_LAYOUT) + 1); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/GameLauncher.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/GameLauncher.java deleted file mode 100644 index 63fe99c4..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/GameLauncher.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.panda3ds.pandroid.app.game; - -import android.net.Uri; -import android.os.Bundle; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.Nullable; -import androidx.core.content.pm.ShortcutManagerCompat; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.BaseActivity; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.utils.GameUtils; - -import java.util.Arrays; - -public class GameLauncher extends BaseActivity { - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(new TextView(this)); - Uri uri = getIntent().getData(); - if (uri != null && uri.getScheme().equals("pandroid-game")) { - String gameId = uri.getAuthority(); - GameMetadata game = GameUtils.findGameById(gameId); - - if (game != null) { - GameUtils.launch(this, game); - } else { - Toast.makeText(this, R.string.invalid_game, Toast.LENGTH_LONG).show(); - ShortcutManagerCompat.removeDynamicShortcuts(this, Arrays.asList(gameId)); - ShortcutManagerCompat.removeLongLivedShortcuts(this, Arrays.asList(gameId)); - } - } - - finish(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/LuaDialogFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/LuaDialogFragment.java deleted file mode 100644 index 1d573e42..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/LuaDialogFragment.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.panda3ds.pandroid.app.game; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; - -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.base.BottomAlertDialog; -import com.panda3ds.pandroid.app.base.BottomDialogFragment; -import com.panda3ds.pandroid.app.editor.CodeEditorActivity; -import com.panda3ds.pandroid.lang.Task; -import com.panda3ds.pandroid.utils.Constants; -import com.panda3ds.pandroid.utils.FileUtils; -import com.panda3ds.pandroid.view.recycler.AutoFitGridLayout; -import com.panda3ds.pandroid.view.recycler.SimpleListAdapter; - -import java.util.ArrayList; -import java.util.UUID; - -public class LuaDialogFragment extends BottomDialogFragment { - private final SimpleListAdapter adapter = new SimpleListAdapter<>(R.layout.holder_lua_script, this::onCreateListItem); - private ActivityResultLauncher codeEditorLauncher; - private LuaFile currentEditorFile; - - private ActivityResultLauncher openDocumentLauncher; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.dialog_lua_scripts, container, false); - } - - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - openDocumentLauncher = registerForActivityResult(new ActivityResultContracts.OpenDocument(), result -> { - if (result != null) { - String fileName = FileUtils.getName(result.toString()); - - if (fileName.toLowerCase().endsWith(".lua")) { - new Task(() -> { - String content = FileUtils.readTextFile(result.toString()); - createFile(FileUtils.getName(result.toString()), content); - }).start(); - } else { - Toast.makeText(getContext(), R.string.file_not_supported, Toast.LENGTH_SHORT).show(); - } - } - }); - - codeEditorLauncher = registerForActivityResult(new CodeEditorActivity.Contract(), result -> { - if (result != null) { - switch (result) { - case ACTION_PLAY: - loadScript(currentEditorFile); - break; - } - } - - orderByModified(); - }); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - view.findViewById(R.id.open_file).setOnClickListener(v -> { - openDocumentLauncher.launch(new String[]{"*/*"}); - }); - view.findViewById(R.id.create).setOnClickListener(v -> { - new BottomAlertDialog(requireContext()) - .setTextInput(getString(R.string.name), arg -> { - String name = arg.trim(); - if (name.length() > 1) { - new Task(() -> { - LuaFile file = createFile(name, ""); - currentEditorFile = file; - codeEditorLauncher.launch(new CodeEditorActivity.Arguments(file.path, file.name, CodeEditorActivity.EditorType.LUA_SCRIPT_EDITOR)); - }).start(); - } - }).setTitle(R.string.create_new) - .show(); - }); - - ((RecyclerView) view.findViewById(R.id.recycler)).setAdapter(adapter); - ((RecyclerView) view.findViewById(R.id.recycler)).setLayoutManager(new AutoFitGridLayout(getContext(), 140)); - ArrayList files = new ArrayList<>(); - String path = FileUtils.getResourcePath(Constants.RESOURCE_FOLDER_LUA_SCRIPTS); - for (String file : FileUtils.listFiles(path)) { - files.add(new LuaFile(file)); - } - - adapter.addAll(files); - orderByModified(); - } - - private LuaFile createFile(String name, String content) { - if (name.toLowerCase().endsWith(".lua")) { - name = name.substring(0, name.length() - 4); - } - - name = name.replaceAll("[^[a-zA-Z0-9-_ ]]", "-"); - - String fileName = name + "." + UUID.randomUUID().toString().substring(0, 4) + ".lua"; - LuaFile file = new LuaFile(fileName); - FileUtils.writeTextFile(file.path, fileName, content); - getView().post(() -> { - adapter.addAll(file); - orderByModified(); - }); - - return file; - } - - private void orderByModified() { - adapter.sort((o1, o2) -> Long.compare(o2.lastModified(), o1.lastModified())); - } - - private void onCreateListItem(int position, LuaFile file, View view) { - ((TextView) view.findViewById(R.id.title)) - .setText(file.name.split("\\.")[0]); - - view.setOnClickListener(v -> loadScript(file)); - view.findViewById(R.id.edit).setOnClickListener(v -> { - currentEditorFile = file; - codeEditorLauncher.launch(new CodeEditorActivity.Arguments(file.path, file.name, CodeEditorActivity.EditorType.LUA_SCRIPT_EDITOR)); - }); - } - - private void loadScript(LuaFile file) { - dismiss(); - - Toast.makeText(getContext(), String.format(getString(R.string.running_ff), file.name), Toast.LENGTH_SHORT).show(); - new Task(() -> { - String script = FileUtils.readTextFile(file.absolutePath()); - file.update(); - AlberDriver.LoadLuaScript(script); - }).start(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - openDocumentLauncher.unregister(); - codeEditorLauncher.unregister(); - } - - private static class LuaFile { - private final String name; - private final String path; - - private LuaFile(String path, String name) { - this.name = name; - this.path = path; - } - - private LuaFile(String name) { - this(FileUtils.getResourcePath(Constants.RESOURCE_FOLDER_LUA_SCRIPTS), name); - } - - private String absolutePath() { - return path + "/" + name; - } - - private void update() { - FileUtils.updateFile(absolutePath()); - } - - private long lastModified() { - return FileUtils.getLastModified(absolutePath()); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/GamesFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/GamesFragment.java deleted file mode 100644 index 337780b0..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/GamesFragment.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.panda3ds.pandroid.app.main; - -import android.net.Uri; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Toast; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.Fragment; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.base.GameAboutDialog; -import com.panda3ds.pandroid.app.base.LoadingAlertDialog; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.lang.Task; -import com.panda3ds.pandroid.utils.Constants; -import com.panda3ds.pandroid.utils.FileUtils; -import com.panda3ds.pandroid.utils.GameUtils; -import com.panda3ds.pandroid.view.gamesgrid.GamesGridView; -import java.util.UUID; - -public class GamesFragment extends Fragment implements ActivityResultCallback { - private final ActivityResultContracts.OpenDocument openRomContract = new ActivityResultContracts.OpenDocument(); - private ActivityResultLauncher pickFileRequest; - private GamesGridView gameListView; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_games, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - gameListView = view.findViewById(R.id.games); - gameListView.setItemLongClick((game)->{ - GameAboutDialog dialog = new GameAboutDialog(requireActivity(), game); - dialog.setOnDismissListener((x)-> { - gameListView.setGameList(GameUtils.getGames()); - }); - dialog.show(); - }); - - view.findViewById(R.id.add_rom).setOnClickListener((v) -> pickFileRequest.launch(new String[] {"*/*"})); - } - - @Override - public void onResume() { - super.onResume(); - gameListView.setGameList(GameUtils.getGames()); - } - - @Override - public void onActivityResult(Uri result) { - if (result != null) { - String uri = result.toString(); - if (GameUtils.findByRomPath(uri) == null) { - if (!FileUtils.exists(uri)) { - Toast.makeText(getContext(), "Invalid file path", Toast.LENGTH_LONG).show(); - return; - } - - String extension = FileUtils.extension(uri); - - // For ELF and AXF files the emulator core uses the C++ iostreams API to be compatible with elfio unlike other file types - // As such, instead of writing more SAF code for operating with iostreams we just copy the ELF/AXF file to our own private directory - // And use it without caring about SAF - if (extension.equals("elf") || extension.endsWith("axf")) { - importELF(uri); - } else { - FileUtils.makeUriPermanent(uri, FileUtils.MODE_READ); - - GameMetadata game = new GameMetadata(uri, FileUtils.getName(uri).split("\\.")[0], getString(R.string.unknown)); - GameUtils.addGame(game); - GameUtils.launch(requireActivity(), game); - } - } - } - } - - private void importELF(String uri) { - AlertDialog dialog = new LoadingAlertDialog(requireActivity(), R.string.loading).create(); - dialog.show(); - new Task(() -> { - String uuid = UUID.randomUUID().toString() + "." + FileUtils.extension(uri); - String name = FileUtils.getName(uri); - FileUtils.copyFile(uri, FileUtils.getResourcePath(Constants.RESOURCE_FOLDER_ELF), uuid); - gameListView.post(() -> { - dialog.hide(); - GameMetadata game = new GameMetadata("elf://" + uuid, name.substring(0, name.length() - 4).trim(), ""); - GameUtils.addGame(game); - GameUtils.launch(requireActivity(), game); - }); - }).start(); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - pickFileRequest = registerForActivityResult(openRomContract, this); - } - - @Override - public void onDestroy() { - if (pickFileRequest != null) { - pickFileRequest.unregister(); - pickFileRequest = null; - } - - super.onDestroy(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SearchFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SearchFragment.java deleted file mode 100644 index 6c2ee024..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SearchFragment.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.panda3ds.pandroid.app.main; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatEditText; -import androidx.fragment.app.Fragment; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.base.GameAboutDialog; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.utils.GameUtils; -import com.panda3ds.pandroid.utils.SearchAgent; -import com.panda3ds.pandroid.view.SimpleTextWatcher; -import com.panda3ds.pandroid.view.gamesgrid.GamesGridView; -import java.util.ArrayList; -import java.util.List; - - -public class SearchFragment extends Fragment { - private final SearchAgent searchAgent = new SearchAgent(); - private GamesGridView gamesListView; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_search, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - gamesListView = view.findViewById(R.id.games); - gamesListView.setItemLongClick((game)->{ - GameAboutDialog dialog = new GameAboutDialog(requireActivity(), game); - dialog.setOnDismissListener((x)-> search(((AppCompatEditText) view.findViewById(R.id.search_bar)).getText().toString())); - dialog.show(); - }); - ((AppCompatEditText) view.findViewById(R.id.search_bar)).addTextChangedListener((SimpleTextWatcher) this::search); - } - - @Override - public void onResume() { - super.onResume(); - searchAgent.clearBuffer(); - for (GameMetadata game : GameUtils.getGames()) { - searchAgent.addToBuffer(game.getId(), game.getTitle(), game.getPublisher()); - } - - search(""); - } - - private void search(String query) { - List resultIds = searchAgent.search(query); - ArrayList games = new ArrayList<>(GameUtils.getGames()); - Object[] resultObj = games.stream().filter(gameMetadata -> resultIds.contains(gameMetadata.getId())).toArray(); - - games.clear(); - for (Object res : resultObj) { - games.add((GameMetadata) res); - } - - gamesListView.setGameList(games); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SettingsFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SettingsFragment.java deleted file mode 100644 index fe35bad0..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SettingsFragment.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.panda3ds.pandroid.app.main; - -import android.content.Context; -import android.os.Bundle; - -import androidx.annotation.Nullable; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PandroidApplication; -import com.panda3ds.pandroid.app.PreferenceActivity; -import com.panda3ds.pandroid.app.base.BasePreferenceFragment; -import com.panda3ds.pandroid.app.preferences.GeneralPreferences; -import com.panda3ds.pandroid.app.preferences.AdvancedPreferences; -import com.panda3ds.pandroid.app.preferences.InputPreferences; - -public class SettingsFragment extends BasePreferenceFragment { - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { - setPreferencesFromResource(R.xml.start_preferences, rootKey); - findPreference("application").setSummary(getVersionName()); - setItemClick("input", (item) -> PreferenceActivity.launch(requireContext(), InputPreferences.class)); - setItemClick("general", (item)-> PreferenceActivity.launch(requireContext(), GeneralPreferences.class)); - setItemClick("advanced", (item)-> PreferenceActivity.launch(requireContext(), AdvancedPreferences.class)); - } - - private String getVersionName() { - try { - Context context = PandroidApplication.getAppContext(); - return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; - } catch (Exception e) { - return "Error: Unknown version"; - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AdvancedPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AdvancedPreferences.java deleted file mode 100644 index 13c579dd..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AdvancedPreferences.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.Build; - -import androidx.annotation.Nullable; -import androidx.preference.SwitchPreferenceCompat; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PandroidApplication; -import com.panda3ds.pandroid.app.base.BasePreferenceFragment; -import com.panda3ds.pandroid.app.services.LoggerService; -import com.panda3ds.pandroid.data.config.GlobalConfig; - -public class AdvancedPreferences extends BasePreferenceFragment { - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { - setPreferencesFromResource(R.xml.advanced_preferences, rootKey); - setActivityTitle(R.string.advanced_options); - - setItemClick("performanceMonitor", pref -> GlobalConfig.set(GlobalConfig.KEY_SHOW_PERFORMANCE_OVERLAY, ((SwitchPreferenceCompat) pref).isChecked())); - setItemClick("shaderJit", pref -> GlobalConfig.set(GlobalConfig.KEY_SHADER_JIT, ((SwitchPreferenceCompat) pref).isChecked())); - setItemClick("accurateShaderMul", pref -> GlobalConfig.set(GlobalConfig.KEY_ACCURATE_SHADER_MULTIPLY, ((SwitchPreferenceCompat) pref).isChecked())); - setItemClick("enableAudio", pref -> GlobalConfig.set(GlobalConfig.KEY_ENABLE_AUDIO, ((SwitchPreferenceCompat) pref).isChecked())); - setItemClick("loggerService", pref -> { - boolean checked = ((SwitchPreferenceCompat) pref).isChecked(); - Context ctx = PandroidApplication.getAppContext(); - if (checked) { - ctx.startService(new Intent(ctx, LoggerService.class)); - } else { - ctx.stopService(new Intent(ctx, LoggerService.class)); - } - GlobalConfig.set(GlobalConfig.KEY_LOGGER_SERVICE, checked); - }); - - refresh(); - } - - @Override - public void onResume() { - super.onResume(); - refresh(); - } - - private void refresh() { - ((SwitchPreferenceCompat) findPreference("performanceMonitor")).setChecked(GlobalConfig.get(GlobalConfig.KEY_SHOW_PERFORMANCE_OVERLAY)); - ((SwitchPreferenceCompat) findPreference("loggerService")).setChecked(GlobalConfig.get(GlobalConfig.KEY_LOGGER_SERVICE)); - ((SwitchPreferenceCompat) findPreference("shaderJit")).setChecked(GlobalConfig.get(GlobalConfig.KEY_SHADER_JIT)); - ((SwitchPreferenceCompat) findPreference("accurateShaderMul")).setChecked(GlobalConfig.get(GlobalConfig.KEY_ACCURATE_SHADER_MULTIPLY)); - ((SwitchPreferenceCompat) findPreference("enableAudio")).setChecked(GlobalConfig.get(GlobalConfig.KEY_ENABLE_AUDIO)); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/ControllerMapperPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/ControllerMapperPreferences.java deleted file mode 100644 index f643c88f..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/ControllerMapperPreferences.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.content.pm.ActivityInfo; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.BaseActivity; -import com.panda3ds.pandroid.app.base.BottomAlertDialog; -import com.panda3ds.pandroid.view.controller.mapping.ControllerMapper; -import com.panda3ds.pandroid.view.controller.mapping.ControllerProfileManager; -import com.panda3ds.pandroid.view.controller.mapping.ControllerItem; -import com.panda3ds.pandroid.view.controller.mapping.Profile; - -public class ControllerMapperPreferences extends Fragment { - private Profile currentProfile; - private ControllerMapper mapper; - private View saveButton; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.preference_controller_mapper, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - - currentProfile = ControllerProfileManager.get(getArguments().getString("profile")).clone(); - - if (((BaseActivity)requireActivity()).getSupportActionBar() != null) { - ((BaseActivity) requireActivity()).getSupportActionBar().hide(); - } - mapper = view.findViewById(R.id.mapper); - mapper.initialize(this::onLocationChanged, currentProfile); - - view.findViewById(R.id.change_visibility).setOnClickListener(v -> { - BottomAlertDialog builder = new BottomAlertDialog(v.getContext()); - builder.setTitle("Visibility"); - boolean[] visibleList = { - currentProfile.isVisible(ControllerItem.START), - currentProfile.isVisible(ControllerItem.SELECT), - currentProfile.isVisible(ControllerItem.L), - currentProfile.isVisible(ControllerItem.R), - currentProfile.isVisible(ControllerItem.DPAD), - currentProfile.isVisible(ControllerItem.JOYSTICK), - currentProfile.isVisible(ControllerItem.GAMEPAD), - }; - builder.setMultiChoiceItems(new CharSequence[]{ - "Start", "Select", "L", "R", "Dpad", getString(R.string.axis), "A/B/X/Y" - }, visibleList, (dialog, index, visibility) -> { - visibleList[index] = visibility; - }).setPositiveButton(android.R.string.ok, (dialog, which) -> { - - saveButton.setVisibility(View.VISIBLE); - - currentProfile.setVisible(ControllerItem.START, visibleList[0]); - currentProfile.setVisible(ControllerItem.SELECT, visibleList[1]); - currentProfile.setVisible(ControllerItem.L, visibleList[2]); - currentProfile.setVisible(ControllerItem.R, visibleList[3]); - currentProfile.setVisible(ControllerItem.DPAD, visibleList[4]); - currentProfile.setVisible(ControllerItem.JOYSTICK, visibleList[5]); - currentProfile.setVisible(ControllerItem.GAMEPAD, visibleList[6]); - - mapper.refreshLayout(); - }).setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss()); - builder.show(); - }); - - saveButton = view.findViewById(R.id.save); - saveButton.setOnClickListener(v -> { - ControllerProfileManager.add(currentProfile); - Toast.makeText(v.getContext(), R.string.saved, Toast.LENGTH_SHORT).show(); - requireActivity().finish(); - }); - - view.findViewById(R.id.delete).setOnClickListener(v -> { - ControllerProfileManager.remove(currentProfile.getId()); - requireActivity().finish(); - }); - - view.findViewById(R.id.rotate).setOnClickListener(v -> { - requireActivity().setRequestedOrientation(mapper.getCurrentWidth() > mapper.getCurrentHeight() ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); - }); - - view.findViewById(R.id.delete).setVisibility(ControllerProfileManager.getProfileCount() > 1 ? View.VISIBLE : View.GONE); - - saveButton.setVisibility(View.GONE); - } - - public void onLocationChanged(ControllerItem id) { - saveButton.setVisibility(View.VISIBLE); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GamesFoldersPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GamesFoldersPreferences.java deleted file mode 100644 index ec162c56..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GamesFoldersPreferences.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.annotation.SuppressLint; -import android.net.Uri; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.Nullable; -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.base.BasePreferenceFragment; -import com.panda3ds.pandroid.app.base.BaseSheetDialog; -import com.panda3ds.pandroid.data.game.GamesFolder; -import com.panda3ds.pandroid.utils.FileUtils; -import com.panda3ds.pandroid.utils.GameUtils; - -public class GamesFoldersPreferences extends BasePreferenceFragment implements ActivityResultCallback { - private final ActivityResultContracts.OpenDocumentTree openFolderContract = new ActivityResultContracts.OpenDocumentTree(); - private ActivityResultLauncher pickFolderRequest; - - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { - setPreferencesFromResource(R.xml.empty_preferences, rootKey); - setActivityTitle(R.string.pref_game_folders); - refreshList(); - pickFolderRequest = registerForActivityResult(openFolderContract, this); - } - - @SuppressLint("RestrictedApi") - private void refreshList() { - GamesFolder[] folders = GameUtils.getFolders(); - PreferenceScreen screen = getPreferenceScreen(); - screen.removeAll(); - for (GamesFolder folder : folders) { - Preference preference = new Preference(screen.getContext()); - preference.setOnPreferenceClickListener((item) -> { - showFolderInfo(folder); - screen.performClick(); - return false; - }); - preference.setTitle(FileUtils.getName(folder.getPath())); - preference.setSummary(String.format(getString(R.string.games_count_f), folder.getGames().size())); - preference.setIcon(R.drawable.ic_folder); - screen.addPreference(preference); - } - - Preference pref = new Preference(screen.getContext()); - pref.setTitle(R.string.import_folder); - pref.setIcon(R.drawable.ic_add); - pref.setOnPreferenceClickListener(preference -> { - pickFolderRequest.launch(null); - return false; - }); - screen.addPreference(pref); - } - - private void showFolderInfo(GamesFolder folder) { - BaseSheetDialog dialog = new BaseSheetDialog(requireActivity()); - View layout = LayoutInflater.from(requireActivity()).inflate(R.layout.dialog_games_folder, null, false); - dialog.setContentView(layout); - - ((TextView) layout.findViewById(R.id.name)).setText(FileUtils.getName(folder.getPath())); - ((TextView) layout.findViewById(R.id.directory)).setText(FileUtils.obtainUri(folder.getPath()).getPath()); - ((TextView) layout.findViewById(R.id.games)).setText(String.valueOf(folder.getGames().size())); - - layout.findViewById(R.id.ok).setOnClickListener(v -> dialog.dismiss()); - layout.findViewById(R.id.remove).setOnClickListener(v -> { - dialog.dismiss(); - GameUtils.removeFolder(folder); - refreshList(); - }); - - dialog.show(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - if (pickFolderRequest != null) { - pickFolderRequest.unregister(); - pickFolderRequest = null; - } - } - - @Override - public void onActivityResult(Uri result) { - if (result != null) { - FileUtils.makeUriPermanent(result.toString(), "r"); - GameUtils.registerFolder(result.toString()); - refreshList(); - } - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java deleted file mode 100644 index 86182c3b..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; -import android.widget.Toast; - -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.Nullable; -import androidx.preference.SwitchPreferenceCompat; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PreferenceActivity; -import com.panda3ds.pandroid.app.base.BasePreferenceFragment; -import com.panda3ds.pandroid.app.preferences.screen_editor.ScreenLayoutsPreference; -import com.panda3ds.pandroid.data.config.GlobalConfig; -import com.panda3ds.pandroid.utils.FileUtils; - -public class GeneralPreferences extends BasePreferenceFragment implements ActivityResultCallback { - private final ActivityResultContracts.OpenDocument openFolderContract = new ActivityResultContracts.OpenDocument(); - private ActivityResultLauncher pickFileRequest; - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { - setPreferencesFromResource(R.xml.general_preference, rootKey); - setItemClick("appearance.theme", (pref) -> new ThemeSelectorDialog(requireActivity()).show()); - setItemClick("appearance.ds", (pref) -> PreferenceActivity.launch(requireActivity(), ScreenLayoutsPreference.class)); - setItemClick("games.folders", (pref) -> PreferenceActivity.launch(requireActivity(), GamesFoldersPreferences.class)); - setItemClick("behavior.pictureInPicture", (pref)-> GlobalConfig.set(GlobalConfig.KEY_PICTURE_IN_PICTURE, ((SwitchPreferenceCompat)pref).isChecked())); - setActivityTitle(R.string.general); - refresh(); - - setItemClick("games.aes_key", pref -> pickFileRequest.launch(new String[]{ "text/plain" })); - setItemClick("games.seed_db", pref -> pickFileRequest.launch(new String[]{ "application/octet-stream" })); - - pickFileRequest = registerForActivityResult(openFolderContract, this); - } - - @Override - public void onResume() { - super.onResume(); - refresh(); - } - - private void refresh() { - setSwitchValue("behavior.pictureInPicture", GlobalConfig.get(GlobalConfig.KEY_PICTURE_IN_PICTURE)); - setSummaryValue("games.aes_key", String.format(getString(FileUtils.exists(FileUtils.getPrivatePath()+"/sysdata/aes_keys.txt") ? R.string.file_available : R.string.file_not_available), "aes_keys.txt")); - setSummaryValue("games.seed_db", String.format(getString(FileUtils.exists(FileUtils.getPrivatePath()+"/sysdata/seeddb.bin") ? R.string.file_available : R.string.file_not_available), "seeddb.bin")); - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (pickFileRequest != null) { - pickFileRequest.unregister(); - pickFileRequest = null; - } - } - - @Override - public void onActivityResult(Uri result) { - if (result != null) { - String path = result.toString(); - Log.w("File", path + " -> " + FileUtils.getName(path)); - switch (String.valueOf(FileUtils.getName(path))) { - case "aes_keys.txt": - case "seeddb.bin": { - String name = FileUtils.getName(path); - if (FileUtils.getLength(path) < 1024 * 256) { - String sysdataFolder = FileUtils.getPrivatePath() + "/sysdata"; - if (!FileUtils.exists(sysdataFolder)) { - FileUtils.createDir(FileUtils.getPrivatePath(), "sysdata"); - } - if (FileUtils.exists(sysdataFolder + "/" + name)) { - FileUtils.delete(sysdataFolder + "/" + name); - } - FileUtils.copyFile(path, FileUtils.getPrivatePath() + "/sysdata/", name); - Toast.makeText(getActivity(), String.format(getString(R.string.file_imported), name), Toast.LENGTH_LONG).show(); - } else { - Toast.makeText(getActivity(), R.string.invalid_file, Toast.LENGTH_LONG).show(); - } - } break; - default: Toast.makeText(getActivity(), R.string.invalid_file, Toast.LENGTH_LONG).show(); break; - } - refresh(); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapActivity.java deleted file mode 100644 index dce56a5f..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapActivity.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.widget.Toast; - -import androidx.activity.result.contract.ActivityResultContract; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.BaseActivity; -import com.panda3ds.pandroid.input.InputEvent; -import com.panda3ds.pandroid.input.InputHandler; - -import java.util.Objects; - -public class InputMapActivity extends BaseActivity { - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_input_map); - } - - @Override - protected void onResume() { - super.onResume(); - - InputHandler.reset(); - InputHandler.setMotionDeadZone(0.8f); - InputHandler.setEventListener(this::onInputEvent); - } - - @Override - protected void onPause() { - super.onPause(); - InputHandler.reset(); - } - - @Override - public boolean dispatchGenericMotionEvent(MotionEvent ev) { - return InputHandler.processMotionEvent(ev); - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - return InputHandler.processKeyEvent(event); - } - - private void onInputEvent(InputEvent event) { - if (Objects.equals(event.getName(), "KEYCODE_BACK")) { - onBackPressed(); - return; - } - setResult(RESULT_OK, new Intent(event.getName())); - Toast.makeText(this, event.getName(), Toast.LENGTH_SHORT).show(); - finish(); - } - - - public static final class Contract extends ActivityResultContract { - @NonNull - @Override - public Intent createIntent(@NonNull Context context, String s) { - return new Intent(context, InputMapActivity.class); - } - - @Override - public String parseResult(int i, @Nullable Intent intent) { - return i == RESULT_OK ? intent.getAction() : null; - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapPreferences.java deleted file mode 100644 index 10fa10f9..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapPreferences.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.content.Context; -import android.os.Bundle; - -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.preference.Preference; -import androidx.preference.SeekBarPreference; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.BaseActivity; -import com.panda3ds.pandroid.app.base.BasePreferenceFragment; -import com.panda3ds.pandroid.input.InputMap; -import com.panda3ds.pandroid.input.KeyName; - -public class InputMapPreferences extends BasePreferenceFragment implements ActivityResultCallback { - - private ActivityResultLauncher requestKey; - private String currentKey; - - private SeekBarPreference deadZonePreference; - - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { - setPreferencesFromResource(R.xml.input_map_preferences, rootKey); - - setActivityTitle(R.string.controller_mapping); - - for (KeyName key : KeyName.values()) { - if (key == KeyName.NULL) { - continue; - } - - setItemClick(key.name(), this::onItemPressed); - } - - deadZonePreference = getPreferenceScreen().findPreference("dead_zone"); - - deadZonePreference.setOnPreferenceChangeListener((preference, value) -> { - InputMap.setDeadZone(((int)value / 100.0f)); - refreshList(); - - return false; - }); - - refreshList(); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Override - public void onAttach(@NonNull Context context) { - super.onAttach(context); - requestKey = registerForActivityResult(new InputMapActivity.Contract(), this); - } - - @Override - public void onDetach() { - super.onDetach(); - - if (requestKey != null) { - requestKey.unregister(); - requestKey = null; - } - } - - private void onItemPressed(Preference pref) { - currentKey = pref.getKey(); - requestKey.launch(null); - } - - @Override - public void onResume() { - super.onResume(); - refreshList(); - } - - private void refreshList() { - deadZonePreference.setValue((int)(InputMap.getDeadZone() * 100)); - deadZonePreference.setSummary(deadZonePreference.getValue() + "%"); - - for (KeyName key : KeyName.values()) { - if (key == KeyName.NULL) { - continue; - } - - findPreference(key.name()).setSummary(InputMap.relative(key)); - } - } - - @Override - public void onActivityResult(String result) { - if (result != null) { - InputMap.set(KeyName.valueOf(currentKey), result); - refreshList(); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputPreferences.java deleted file mode 100644 index cc89accd..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputPreferences.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.annotation.SuppressLint; -import android.content.Intent; -import android.os.Bundle; -import android.widget.Toast; - -import androidx.annotation.Nullable; -import androidx.preference.Preference; -import androidx.preference.PreferenceCategory; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.BaseActivity; -import com.panda3ds.pandroid.app.PreferenceActivity; -import com.panda3ds.pandroid.app.base.BasePreferenceFragment; -import com.panda3ds.pandroid.app.base.BottomAlertDialog; -import com.panda3ds.pandroid.view.controller.mapping.ControllerProfileManager; -import com.panda3ds.pandroid.view.controller.mapping.Profile; - -import java.util.List; -import java.util.Objects; - -public class InputPreferences extends BasePreferenceFragment { - - public static final String ID_DEFAULT_CONTROLLER_PROFILE = "defaultControllerProfile"; - public static final String ID_INPUT_MAP = "inputMap"; - public static final String ID_CREATE_PROFILE = "createProfile"; - private static final CharSequence ID_GAMEPAD_PROFILE_LIST = "gamepadProfileList"; - - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { - setPreferencesFromResource(R.xml.input_preference, rootKey); - setItemClick(ID_INPUT_MAP, (item) -> PreferenceActivity.launch(requireContext(), InputMapPreferences.class)); - setItemClick(ID_CREATE_PROFILE, (item) -> { - new BottomAlertDialog(requireContext()) - .setTextInput(getString(R.string.name), (name) -> { - name = formatName(name); - if (name.length() > 0) { - Profile profile = ControllerProfileManager.makeDefaultProfile(); - profile.setName(name); - ControllerProfileManager.add(profile); - refreshScreenProfileList(); - } else { - Toast.makeText(requireContext(), R.string.invalid_name, Toast.LENGTH_SHORT).show(); - } - }).setTitle(R.string.create_profile).show(); - }); - - setItemClick(ID_DEFAULT_CONTROLLER_PROFILE, (item) -> { - List profiles = ControllerProfileManager.listAll(); - String defaultProfileId = ControllerProfileManager.getDefaultProfile().getId(); - int defaultProfileIndex = 0; - CharSequence[] names = new CharSequence[profiles.size()]; - for (int i = 0; i < names.length; i++) { - names[i] = profiles.get(i).getName(); - if (Objects.equals(profiles.get(i).getId(), defaultProfileId)) { - defaultProfileIndex = i; - } - } - new BottomAlertDialog(item.getContext()) - .setSingleChoiceItems(names, defaultProfileIndex, (dialog, which) -> { - dialog.dismiss(); - ControllerProfileManager.setDefaultProfileId(profiles.get(which).getId()); - item.setSummary(profiles.get(which).getName()); - }).setTitle(R.string.pref_default_controller_title).show(); - }); - - ((BaseActivity) requireActivity()).getSupportActionBar().setTitle(R.string.input); - } - - public String formatName(String name) { - return name.trim().replaceAll("\\s\\s", " "); - } - - private void refresh() { - findPreference(ID_DEFAULT_CONTROLLER_PROFILE).setSummary(ControllerProfileManager.getDefaultProfile().getName()); - refreshScreenProfileList(); - } - - @SuppressLint("RestrictedApi") - private void refreshScreenProfileList() { - PreferenceCategory category = findPreference(ID_GAMEPAD_PROFILE_LIST); - Preference pref = category.getPreference(category.getPreferenceCount() - 1); - category.removeAll(); - category.setOrderingAsAdded(true); - - for (Profile profile : ControllerProfileManager.listAll()) { - Preference item = new Preference(category.getContext()); - item.setOnPreferenceClickListener(preference -> { - category.performClick(); - PreferenceActivity.launch(requireActivity(), ControllerMapperPreferences.class, new Intent().putExtra("profile", profile.getId())); - return false; - }); - item.setOrder(category.getPreferenceCount()); - item.setIconSpaceReserved(false); - item.setTitle(profile.getName()); - category.addPreference(item); - } - - pref.setOrder(category.getPreferenceCount()); - category.addPreference(pref); - } - - @Override - public void onResume() { - super.onResume(); - refresh(); - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/ThemeSelectorDialog.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/ThemeSelectorDialog.java deleted file mode 100644 index fa22d884..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/ThemeSelectorDialog.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.panda3ds.pandroid.app.preferences; - -import android.content.Context; -import android.os.Bundle; -import android.view.ContextThemeWrapper; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.widget.AppCompatRadioButton; -import androidx.recyclerview.widget.RecyclerView; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.base.BaseSheetDialog; -import com.panda3ds.pandroid.utils.CompatUtils; -import com.panda3ds.pandroid.data.config.GlobalConfig; -import com.panda3ds.pandroid.view.recycler.AutoFitGridLayout; -import com.panda3ds.pandroid.view.recycler.SimpleListAdapter; - -import java.util.ArrayList; -import java.util.Arrays; - -public class ThemeSelectorDialog extends BaseSheetDialog { - - private final SimpleListAdapter adapter = new SimpleListAdapter<>(R.layout.hold_theme_preview_base, this::bindItemView); - private final int currentTheme = GlobalConfig.get(GlobalConfig.KEY_APP_THEME); - private static final ArrayList themes = new ArrayList<>(Arrays.asList( - new Theme(R.style.Theme_Pandroid, R.string.theme_device, GlobalConfig.THEME_ANDROID), - new Theme(R.style.Theme_Pandroid_Light, R.string.light, GlobalConfig.THEME_LIGHT), - new Theme(R.style.Theme_Pandroid_Dark, R.string.dark, GlobalConfig.THEME_DARK), - new Theme(R.style.Theme_Pandroid_Black, R.string.black, GlobalConfig.THEME_BLACK) - )); - - - public ThemeSelectorDialog(@NonNull Context context) { - super(context); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.dialog_select_theme); - adapter.clear(); - themes.sort((o1, o2) -> o1.value == currentTheme ? -1 : 0); - adapter.addAll(themes); - - RecyclerView recycler = findViewById(R.id.recycler); - recycler.setAdapter(adapter); - recycler.setLayoutManager(new AutoFitGridLayout(getContext(), 150)); - } - - private void bindItemView(int i, Theme theme, View view) { - ViewGroup container = view.findViewById(R.id.preview); - container.removeAllViews(); - container.addView(LayoutInflater.from(new ContextThemeWrapper(getContext(), theme.style)).inflate(R.layout.hold_theme_preview, null, false)); - ((TextView) view.findViewById(R.id.title)).setText(theme.name); - ((AppCompatRadioButton) view.findViewById(R.id.checkbox)).setChecked(GlobalConfig.get(GlobalConfig.KEY_APP_THEME) == theme.value); - view.setOnClickListener(v -> { - dismiss(); - if (theme.value != GlobalConfig.get(GlobalConfig.KEY_APP_THEME)) { - GlobalConfig.set(GlobalConfig.KEY_APP_THEME, theme.value); - CompatUtils.findActivity(getContext()).recreate(); - } - }); - } - - private static final class Theme { - private final int style; - private final int name; - private final int value; - - private Theme(int style, int name, int value) { - this.style = style; - this.name = name; - this.value = value; - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenEditorPreference.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenEditorPreference.java deleted file mode 100644 index 14c4e576..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenEditorPreference.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.panda3ds.pandroid.app.preferences.screen_editor; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.BaseActivity; -import com.panda3ds.pandroid.view.ds.DsEditorView; -import com.panda3ds.pandroid.view.ds.DsLayoutManager; - -public class ScreenEditorPreference extends Fragment { - private LinearLayout layout; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - layout = new LinearLayout(container.getContext()); - layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE); - return layout; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - int index = getArguments().getInt("index"); - layout.removeAllViews(); - layout.addView(new DsEditorView(view.getContext(), index), new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - ((BaseActivity)requireActivity()).getSupportActionBar().hide(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - DsLayoutManager.save(); - Toast.makeText(requireActivity(), R.string.saved, Toast.LENGTH_LONG).show(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenLayoutsPreference.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenLayoutsPreference.java deleted file mode 100644 index ac3e1039..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenLayoutsPreference.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.panda3ds.pandroid.app.preferences.screen_editor; - -import android.content.Intent; -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PreferenceActivity; -import com.panda3ds.pandroid.app.base.BasePreferenceFragment; -import com.panda3ds.pandroid.view.ds.DsLayoutManager; - -public class ScreenLayoutsPreference extends BasePreferenceFragment { - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { - setPreferencesFromResource(R.xml.empty_preferences, rootKey); - setActivityTitle(R.string.dual_screen_layouts); - refresh(); - } - - public void refresh() { - PreferenceScreen screen = getPreferenceScreen(); - screen.removeAll(); - - for (int i = 0; i < DsLayoutManager.getLayoutCount(); i++) { - Preference pref = new Preference(getPreferenceScreen().getContext()); - pref.setIconSpaceReserved(false); - pref.setTitle("Layout "+ (i + 1)); - pref.setSummary(R.string.click_to_change); - pref.setIcon(R.drawable.ic_edit); - pref.setKey(String.valueOf(i)); - - final int index = i; - pref.setOnPreferenceClickListener(preference -> { - PreferenceActivity.launch(requireContext(), ScreenEditorPreference.class, new Intent().putExtra("index", index)); - return false; - }); - screen.addPreference(pref); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/provider/AppDataDocumentProvider.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/provider/AppDataDocumentProvider.java deleted file mode 100644 index c260cb9f..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/provider/AppDataDocumentProvider.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.panda3ds.pandroid.app.provider; - -import android.content.Context; -import android.database.Cursor; -import android.database.MatrixCursor; -import android.os.CancellationSignal; -import android.os.ParcelFileDescriptor; -import android.provider.DocumentsContract.Document; -import android.provider.DocumentsContract.Root; -import android.provider.DocumentsProvider; - -import androidx.annotation.Nullable; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PandroidApplication; -import com.panda3ds.pandroid.utils.FileUtils; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Objects; - -public class AppDataDocumentProvider extends DocumentsProvider { - private static final String ROOT_ID = "root"; - private static final String[] DEFAULT_ROOT_PROJECTION = new String[]{ - Root.COLUMN_ROOT_ID, - Root.COLUMN_MIME_TYPES, - Root.COLUMN_FLAGS, - Root.COLUMN_ICON, - Root.COLUMN_TITLE, - Root.COLUMN_SUMMARY, - Root.COLUMN_DOCUMENT_ID, - Root.COLUMN_AVAILABLE_BYTES - }; - - private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[]{ - Document.COLUMN_DOCUMENT_ID, - Document.COLUMN_DISPLAY_NAME, - Document.COLUMN_MIME_TYPE, - Document.COLUMN_LAST_MODIFIED, - Document.COLUMN_FLAGS, - Document.COLUMN_SIZE - }; - - private String obtainDocumentId(File file) { - String basePath = baseDirectory().getAbsolutePath(); - String fullPath = file.getAbsolutePath(); - return (ROOT_ID + "/" + fullPath.substring(basePath.length())).replaceAll("//", "/"); - } - - private File obtainFile(String documentId) { - if (documentId.startsWith(ROOT_ID)) { - return new File(baseDirectory(), documentId.substring(ROOT_ID.length())); - } - throw new IllegalArgumentException("Invalid document id: " + documentId); - } - - private Context context() { - return PandroidApplication.getAppContext(); - } - - private File baseDirectory() { - return context().getFilesDir(); - } - - @Override - public boolean onCreate() { - return true; - } - - @Override - public Cursor queryRoots(String[] projection) throws FileNotFoundException { - MatrixCursor cursor = new MatrixCursor(projection == null ? DEFAULT_ROOT_PROJECTION : projection); - cursor.newRow() - .add(Root.COLUMN_ROOT_ID, ROOT_ID) - .add(Root.COLUMN_SUMMARY, null) - .add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE) - .add(Root.COLUMN_DOCUMENT_ID, ROOT_ID + "/") - .add(Root.COLUMN_AVAILABLE_BYTES, baseDirectory().getFreeSpace()) - .add(Root.COLUMN_TITLE, context().getString(R.string.app_name)) - .add(Root.COLUMN_MIME_TYPES, "*/*") - .add(Root.COLUMN_ICON, R.mipmap.ic_launcher); - - return cursor; - } - - @Override - public Cursor queryDocument(String documentId, String[] projection) throws FileNotFoundException { - File file = obtainFile(documentId); - MatrixCursor cursor = new MatrixCursor(projection == null ? DEFAULT_DOCUMENT_PROJECTION : projection); - includeFile(cursor, file); - - return cursor; - } - - private void includeFile(MatrixCursor cursor, File file) { - int flags = 0; - if (file.isDirectory()) { - flags = Document.FLAG_DIR_SUPPORTS_CREATE | Document.FLAG_SUPPORTS_DELETE; - } else { - flags = Document.FLAG_SUPPORTS_WRITE | Document.FLAG_SUPPORTS_REMOVE | Document.FLAG_SUPPORTS_DELETE; - } - cursor.newRow() - .add(Document.COLUMN_DOCUMENT_ID, obtainDocumentId(file)) - .add(Document.COLUMN_MIME_TYPE, file.isDirectory() ? Document.MIME_TYPE_DIR : "application/octet-stream") - .add(Document.COLUMN_FLAGS, flags) - .add(Document.COLUMN_LAST_MODIFIED, file.lastModified()) - .add(Document.COLUMN_DISPLAY_NAME, file.getName()) - .add(Document.COLUMN_SIZE, file.length()); - - } - - @Override - public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) throws FileNotFoundException { - File file = obtainFile(parentDocumentId); - MatrixCursor cursor = new MatrixCursor(projection == null ? DEFAULT_DOCUMENT_PROJECTION : projection); - File[] children = file.listFiles(); - if (children != null) { - for (File child : children) { - includeFile(cursor, child); - } - } - - return cursor; - } - - @Override - public String createDocument(String parentDocumentId, String mimeType, String displayName) throws FileNotFoundException { - File parent = obtainFile(parentDocumentId); - File file = new File(parent, displayName); - if (!parent.exists()) { - throw new FileNotFoundException("Parent doesn't exist"); - } - - if (Objects.equals(mimeType, Document.MIME_TYPE_DIR)) { - if (!file.mkdirs()) { - throw new FileNotFoundException("Error while creating directory"); - } - } else { - try { - if (!file.createNewFile()) { - throw new Exception("Error while creating file"); - } - } catch (Exception e) { - throw new FileNotFoundException(e.getMessage()); - } - } - return obtainDocumentId(file); - } - - @Override - public void deleteDocument(String documentId) throws FileNotFoundException { - File file = obtainFile(documentId); - if (file.exists()) { - FileUtils.delete(file.getAbsolutePath()); - } else { - throw new FileNotFoundException("File not exists"); - } - } - - @Override - public void removeDocument(String documentId, String parentDocumentId) throws FileNotFoundException { - deleteDocument(documentId); - } - - @Override - public ParcelFileDescriptor openDocument(String documentId, String mode, @Nullable CancellationSignal signal) throws FileNotFoundException { - return ParcelFileDescriptor.open(obtainFile(documentId), ParcelFileDescriptor.parseMode(mode)); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/services/LoggerService.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/services/LoggerService.java deleted file mode 100644 index e44f3503..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/services/LoggerService.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.panda3ds.pandroid.app.services; - -import android.app.Service; -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.os.Build; -import android.os.IBinder; -import android.util.Log; - -import androidx.annotation.Nullable; - -import com.panda3ds.pandroid.lang.PipeStreamTask; -import com.panda3ds.pandroid.lang.Task; -import com.panda3ds.pandroid.utils.Constants; -import com.panda3ds.pandroid.utils.FileUtils; - -import java.io.OutputStream; -import java.util.Arrays; - -public class LoggerService extends Service { - private static final long MAX_LOG_SIZE = 1024 * 1024 * 4; // 4MB - - private PipeStreamTask errorTask; - private PipeStreamTask outputTask; - private Process logcat; - - @Nullable - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - try { - Runtime.getRuntime().exec(new String[]{"logcat", "-c"}).waitFor(); - logcat = Runtime.getRuntime().exec(new String[]{"logcat"}); - String logPath = getExternalMediaDirs()[0].getAbsolutePath(); - FileUtils.createDir(logPath, "logs"); - logPath = logPath + "/logs"; - - if (FileUtils.exists(logPath + "/last.txt")) { - FileUtils.delete(logPath + "/last.txt"); - } - - if (FileUtils.exists(logPath + "/current.txt")) { - FileUtils.rename(logPath + "/current.txt", "last.txt"); - } - - OutputStream stream = FileUtils.getOutputStream(logPath + "/current.txt"); - errorTask = new PipeStreamTask(logcat.getErrorStream(), stream, MAX_LOG_SIZE); - outputTask = new PipeStreamTask(logcat.getInputStream(), stream, MAX_LOG_SIZE); - - errorTask.start(); - outputTask.start(); - - Log.i(Constants.LOG_TAG, "Started logger service"); - logDeviceInfo(); - } catch (Exception e) { - stopSelf(); - Log.e(Constants.LOG_TAG, "Failed to start logger service"); - } - } - - private void logDeviceInfo() { - Log.i(Constants.LOG_TAG, "----------------------"); - Log.i(Constants.LOG_TAG, "Android SDK: " + Build.VERSION.SDK_INT); - Log.i(Constants.LOG_TAG, "Device: " + Build.DEVICE); - Log.i(Constants.LOG_TAG, "Model: " + Build.MANUFACTURER + " " + Build.MODEL); - Log.i(Constants.LOG_TAG, "ABIs: " + Arrays.toString(Build.SUPPORTED_ABIS)); - try { - PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0); - Log.i(Constants.LOG_TAG, ""); - Log.i(Constants.LOG_TAG, "Package: " + info.packageName); - Log.i(Constants.LOG_TAG, "Install location: " + info.installLocation); - Log.i(Constants.LOG_TAG, "App version: " + info.versionName + " (" + info.versionCode + ")"); - } catch (Exception e) { - Log.e(Constants.LOG_TAG, "Error obtaining package info: " + e); - } - Log.i(Constants.LOG_TAG, "----------------------"); - } - - @Override - public void onTaskRemoved(Intent rootIntent) { - stopSelf(); - //This is a time for app save save log file - try { - Thread.sleep(1000); - } catch (Exception e) {} - super.onTaskRemoved(rootIntent); - } - - @Override - public void onDestroy() { - Log.i(Constants.LOG_TAG, "Logger service terminating"); - errorTask.close(); - outputTask.close(); - try { - logcat.destroy(); - } catch (Throwable t) {} - super.onDestroy(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/GsonConfigParser.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/GsonConfigParser.java deleted file mode 100644 index 6da6860c..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/GsonConfigParser.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.panda3ds.pandroid.data; - -import com.google.gson.ExclusionStrategy; -import com.google.gson.FieldAttributes; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.panda3ds.pandroid.lang.Task; -import com.panda3ds.pandroid.utils.FileUtils; - -public class GsonConfigParser { - private final Gson gson = new GsonBuilder().setPrettyPrinting().create(); - private final String name; - - public GsonConfigParser(String name) { - this.name = name; - } - - private String getPath() { - return FileUtils.getConfigPath()+ "/" + name + ".json"; - } - - public void save(Object data) { - synchronized (this) { - new Task(() -> { - String json = gson.toJson(data, data.getClass()); - FileUtils.writeTextFile(FileUtils.getConfigPath(), name + ".json", json); - }).runSync(); - } - } - - public T load(Class myClass) { - String[] content = new String[] {"{}"}; - new Task(()->{ - if (FileUtils.exists(getPath())) { - String src = FileUtils.readTextFile(getPath()); - if (src != null && src.length() > 2) { - content[0] = src; - } - } - }).runSync(); - - return gson.fromJson(content[0], myClass); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/SMDH.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/SMDH.java deleted file mode 100644 index b886ad3f..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/SMDH.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.panda3ds.pandroid.data; - -import android.graphics.Bitmap; -import android.graphics.Color; - -import com.panda3ds.pandroid.data.game.GameRegion; - -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; - -public class SMDH { - public static final int LANGUAGE_JAPANESE = 0; - public static final int LANGUAGE_ENGLISH = 1; - public static final int LANGUAGE_CHINESE = 6; - public static final int LANGUAGE_KOREAN = 7; - - public static final int REGION_JAPAN_MASK = 0x1; - public static final int REGION_NORTH_AMERICAN_MASK = 0x2; - public static final int REGION_EUROPE_MASK = 0x4; - public static final int REGION_AUSTRALIA_MASK = 0x8; - public static final int REGION_CHINA_MASK = 0x10; - public static final int REGION_KOREAN_MASK = 0x20; - public static final int REGION_TAIWAN_MASK = 0x40; - - private static final int ICON_SIZE = 48; - private static final int META_OFFSET = 0x8; - private static final int META_REGION_OFFSET = 0x2018; - private static final int IMAGE_OFFSET = 0x24C0; - - private int metaLanguage = LANGUAGE_ENGLISH; - private final ByteBuffer smdh; - private final String[] title = new String[12]; - private final String[] publisher = new String[12]; - private final int[] icon; - - private final GameRegion region; - - public SMDH(byte[] source) { - smdh = ByteBuffer.allocate(source.length); - smdh.position(0); - smdh.put(source); - smdh.position(0); - - region = parseRegion(); - icon = parseIcon(); - parseMeta(); - } - - private GameRegion parseRegion() { - GameRegion region; - smdh.position(META_REGION_OFFSET); - - int regionMasks = smdh.get() & 0xFF; - - final boolean japan = (regionMasks & REGION_JAPAN_MASK) != 0; - final boolean northAmerica = (regionMasks & REGION_NORTH_AMERICAN_MASK) != 0; - final boolean europe = (regionMasks & REGION_EUROPE_MASK) != 0; - final boolean australia = (regionMasks & REGION_AUSTRALIA_MASK) != 0; - final boolean china = (regionMasks & REGION_CHINA_MASK) != 0; - final boolean korea = (regionMasks & REGION_KOREAN_MASK) != 0; - final boolean taiwan = (regionMasks & REGION_TAIWAN_MASK) != 0; - - // Depending on the regions allowed in the region mask, pick one of the regions to use - // We prioritize English-speaking regions both here and in the emulator core, since users are most likely to speak English at least - if (northAmerica) { - region = GameRegion.NorthAmerican; - } else if (europe) { - region = GameRegion.Europe; - } else if (australia) { - region = GameRegion.Australia; - } else if (japan) { - region = GameRegion.Japan; - metaLanguage = LANGUAGE_JAPANESE; - } else if (korea) { - region = GameRegion.Korean; - metaLanguage = LANGUAGE_KOREAN; - } else if (china) { - region = GameRegion.China; - metaLanguage = LANGUAGE_CHINESE; - } else if (taiwan) { - region = GameRegion.Taiwan; - metaLanguage = LANGUAGE_CHINESE; - } else { - region = GameRegion.None; - } - - return region; - } - - private void parseMeta() { - byte[] data; - for (int i = 0; i < 12; i++) { - smdh.position(META_OFFSET + (512 * i) + 0x80); - data = new byte[0x100]; - smdh.get(data); - title[i] = convertString(data); - - smdh.position(META_OFFSET + (512 * i) + 0x180); - data = new byte[0x80]; - smdh.get(data); - publisher[i] = convertString(data); - } - } - - // The icons are stored in RGB562 but android need RGB888 - private int[] parseIcon() { - int[] icon = new int[ICON_SIZE * ICON_SIZE]; - smdh.position(0); - - for (int x = 0; x < ICON_SIZE; x++) { - for (int y = 0; y < ICON_SIZE; y++) { - int indexY = y & ~7; - int indexX = x & ~7; - - int interleave = mortonInterleave(x, y); - int offset = (interleave + (indexX * 8)) * 2; - - offset = offset + indexY * ICON_SIZE * 2; - - smdh.position(offset + IMAGE_OFFSET); - - int lowByte = smdh.get() & 0xFF; - int highByte = smdh.get() & 0xFF; - int texel = (highByte << 8) | lowByte; - - // Convert texel from RGB565 to RGB888 - int r = (texel >> 11) & 0x1F; - int g = (texel >> 5) & 0x3F; - int b = texel & 0x1F; - - r = (r << 3) | (r >> 2); - g = (g << 2) | (g >> 4); - b = (b << 3) | (b >> 2); - - icon[x + ICON_SIZE * y] = Color.rgb(r, g, b); - } - } - - return icon; - } - - - public GameRegion getRegion() { - return region; - } - - public Bitmap getBitmapIcon() { - Bitmap bitmap = Bitmap.createBitmap(ICON_SIZE, ICON_SIZE, Bitmap.Config.RGB_565); - bitmap.setPixels(icon, 0, ICON_SIZE, 0, 0, ICON_SIZE, ICON_SIZE); - return bitmap; - } - - public int[] getIcon() { - return icon; - } - - public String getTitle() { - return title[metaLanguage]; - } - - public String getPublisher() { - return publisher[metaLanguage]; - } - - // Strings in SMDH files are stored as UTF-16LE - private static String convertString(byte[] buffer) { - try { - return new String(buffer, 0, buffer.length, StandardCharsets.UTF_16LE) - .replaceAll("\0", ""); - } catch (Exception e) { - return ""; - } - } - - // Reference: https://github.com/wheremyfoodat/Panda3DS/blob/master/src/core/renderer_gl/textures.cpp#L88 - private static int mortonInterleave(int u, int v) { - int[] xlut = {0, 1, 4, 5, 16, 17, 20, 21}; - int[] ylut = {0, 2, 8, 10, 32, 34, 40, 42}; - - return xlut[u % 8] + ylut[v % 8]; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java deleted file mode 100644 index e9e32aed..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.panda3ds.pandroid.data.config; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.internal.LinkedTreeMap; -import com.panda3ds.pandroid.data.GsonConfigParser; -import com.panda3ds.pandroid.utils.Constants; - -import java.io.Serializable; -import java.util.Map; - -public class GlobalConfig { - - private static final GsonConfigParser parser = new GsonConfigParser(Constants.PREF_GLOBAL_CONFIG); - private static final Gson gson = new Gson(); - - public static final int THEME_ANDROID = 0; - public static final int THEME_LIGHT = 1; - public static final int THEME_DARK = 2; - public static final int THEME_BLACK = 3; - - public static DataModel data; - - public static final Key KEY_SHADER_JIT = new Key<>("emu.shader_jit", true); - public static final Key KEY_ACCURATE_SHADER_MULTIPLY = new Key<>("emu.accurate_shader_mul", false); - public static final Key KEY_ENABLE_AUDIO = new Key<>("emu.enable_audio", true); - public static final Key KEY_PICTURE_IN_PICTURE = new Key<>("app.behavior.pictureInPicture", false); - public static final Key KEY_SHOW_PERFORMANCE_OVERLAY = new Key<>("dev.performanceOverlay", false); - public static final Key KEY_LOGGER_SERVICE = new Key<>("dev.loggerService", false); - public static final Key KEY_APP_THEME = new Key<>("app.theme", THEME_ANDROID); - public static final Key KEY_SCREEN_GAMEPAD_VISIBLE = new Key<>("app.screen_gamepad.visible", true); - public static final Key KEY_CURRENT_DS_LAYOUT = new Key<>("app.ds.current_layout",0); - public static final Key KEY_DS_LAYOUTS = new Key<>("app.ds.layouts", ""); - - public static void initialize() { - data = parser.load(DataModel.class); - } - - public static T get(Key key) { - Serializable value; - - if (!data.configs.containsKey(key.name)) { - return key.defaultValue; - } - - if (key.defaultValue instanceof String) { - value = (String) data.configs.get(key.name); - } else if (key.defaultValue instanceof Integer) { - value = ((Number) data.get(key.name)).intValue(); - } else if (key.defaultValue instanceof Boolean) { - value = (boolean) data.get(key.name); - } else if (key.defaultValue instanceof Long) { - value = ((Number) data.get(key.name)).longValue(); - } else { - value = ((Number) data.get(key.name)).floatValue(); - } - return (T) value; - } - - public static synchronized void set(Key key, T value) { - data.configs.put(key.name, value); - writeChanges(); - } - - public static T getExtra(Key key, Class dataClass) { - if (data.extras.has(key.name)) { - return gson.fromJson(data.extras.getAsJsonObject(key.name), dataClass); - } - - return gson.fromJson("{}", dataClass); - } - - public static synchronized void putExtra(Key key, Object value) { - if (data.extras.has(key.name)) { - data.extras.remove(key.name); - } - - data.extras.add(key.name, gson.toJsonTree(value)); - writeChanges(); - } - - private static void writeChanges() { - parser.save(data); - } - - private static class Key { - private final String name; - private final T defaultValue; - - private Key(String name, T defaultValue) { - this.name = name; - this.defaultValue = defaultValue; - } - } - - private static class DataModel { - private final Map configs = new LinkedTreeMap<>(); - private final JsonObject extras = new JsonObject(); - - public Object get(String key) { - return configs.get(key); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameMetadata.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameMetadata.java deleted file mode 100644 index 50cc1992..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameMetadata.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.panda3ds.pandroid.data.game; - -import android.graphics.Bitmap; -import android.util.Log; - -import androidx.annotation.Nullable; - -import com.panda3ds.pandroid.data.SMDH; -import com.panda3ds.pandroid.utils.Constants; -import com.panda3ds.pandroid.utils.GameUtils; - -import java.util.Objects; -import java.util.UUID; - -public class GameMetadata { - private final String id; - private final String romPath; - private String title; - private String publisher; - private GameRegion[] regions; - private transient Bitmap icon; - - private GameMetadata(String id, String romPath, String title, String publisher, Bitmap icon, GameRegion[] regions) { - this.id = id; - this.title = title; - this.publisher = publisher; - this.romPath = romPath; - this.regions = regions; - if (icon != null) { - GameUtils.setGameIcon(id, icon); - } - } - - public GameMetadata(String romPath,String title, String publisher, GameRegion[] regions) { - this(UUID.randomUUID().toString(), romPath, title, publisher, null, regions); - } - - public GameMetadata(String romPath,String title, String publisher) { - this(romPath,title, publisher, new GameRegion[]{GameRegion.None}); - } - - public String getRomPath() { - return romPath; - } - - public String getRealPath() { - return GameUtils.resolvePath(romPath); - } - - public String getId() { - return id; - } - - public String getTitle() { - return title; - } - - public String getPublisher() { - return publisher; - } - - public Bitmap getIcon() { - if (icon == null || icon.isRecycled()) { - icon = GameUtils.loadGameIcon(id); - } - return icon; - } - - public GameRegion[] getRegions() { - return regions; - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof GameMetadata) { - return Objects.equals(((GameMetadata) obj).id, id); - } - return false; - } - - public void applySMDH(SMDH smdh) { - Bitmap icon = smdh.getBitmapIcon(); - this.title = smdh.getTitle(); - this.publisher = smdh.getPublisher(); - this.icon = icon; - if (icon != null) { - GameUtils.setGameIcon(id, icon); - } - - this.regions = new GameRegion[]{smdh.getRegion()}; - GameUtils.writeChanges(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameRegion.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameRegion.java deleted file mode 100644 index e369319a..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameRegion.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.panda3ds.pandroid.data.game; - -import com.panda3ds.pandroid.R; - -public enum GameRegion { - NorthAmerican, - Japan, - Europe, - Australia, - China, - Korean, - Taiwan, - None; - - public int localizedName() { - switch (this) { - case NorthAmerican: - return R.string.region_north_armerican; - case Japan: - return R.string.region_japan; - case Europe: - return R.string.region_europe; - case Australia: - return R.string.region_australia; - case Korean: - return R.string.region_korean; - case Taiwan: - return R.string.region_taiwan; - } - return R.string.unknown; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GamesFolder.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GamesFolder.java deleted file mode 100644 index fd486445..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GamesFolder.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.panda3ds.pandroid.data.game; - -import android.net.Uri; -import android.util.Log; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PandroidApplication; -import com.panda3ds.pandroid.utils.FileUtils; - -import java.util.Collection; -import java.util.HashMap; -import java.util.UUID; - -public class GamesFolder { - private final String id = UUID.randomUUID().toString(); - private final String path; - private final HashMap games = new HashMap<>(); - - public GamesFolder(String path) { - this.path = path; - } - - public boolean isValid() { - return FileUtils.exists(path); - } - - public String getId() { - return id; - } - - public String getPath() { - return path; - } - - public Collection getGames() { - return games.values(); - } - - public void refresh() { - String[] gamesId = games.keySet().toArray(new String[0]); - for (String file: gamesId) { - if (!FileUtils.exists(path + "/" + file)) { - games.remove(file); - } - } - - String unknown = PandroidApplication.getAppContext().getString(R.string.unknown); - - for (String file: FileUtils.listFiles(path)) { - String path = FileUtils.getChild(this.path, file); - if (FileUtils.isDirectory(path) || games.containsKey(file)) { - continue; - } - - String ext = FileUtils.extension(path); - if (ext.equals("3ds") || ext.equals("3dsx") || ext.equals("cci") || ext.equals("cxi") || ext.equals("app") || ext.equals("ncch")) { - String name = FileUtils.getName(path).trim().split("\\.")[0]; - games.put(file, new GameMetadata(new Uri.Builder().path(file).authority(id).scheme("folder").build().toString(), name, unknown)); - } - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputEvent.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputEvent.java deleted file mode 100644 index 7869e00a..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputEvent.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.panda3ds.pandroid.input; - -public class InputEvent { - private final String name; - private final float value; - - public InputEvent(String name, float value) { - this.name = name; - this.value = Math.max(0.0f, Math.min(1.0f, value)); - } - - public boolean isDown() { - return value > 0.0f; - } - - public String getName() { - return name; - } - - public float getValue() { - return value; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputHandler.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputHandler.java deleted file mode 100644 index c6440434..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputHandler.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.panda3ds.pandroid.input; - -import android.view.InputDevice; -import android.view.KeyEvent; -import android.view.MotionEvent; - -import com.panda3ds.pandroid.lang.Function; - -import java.util.HashMap; - -public class InputHandler { - private static Function eventListener; - private static float motionDeadZone = 0.0f; - - private static final int[] gamepadSources = { - InputDevice.SOURCE_GAMEPAD, - InputDevice.SOURCE_JOYSTICK - }; - - private static final int[] validSources = { - InputDevice.SOURCE_GAMEPAD, - InputDevice.SOURCE_JOYSTICK, - InputDevice.SOURCE_DPAD, - InputDevice.SOURCE_KEYBOARD - }; - - private static final HashMap motionDownEvents = new HashMap<>(); - private static final HashMap keyDownEvents = new HashMap<>(); - - private static boolean containsSource(int[] sources, int sourceMask) { - for (int source : sources) { - if ((source & sourceMask) == source) { - return true; - } - } - - return false; - } - - private static boolean isGamepadSource(int sourceMask) { - return containsSource(gamepadSources, sourceMask); - } - - private static boolean isSourceValid(int sourceMasked) { - return containsSource(validSources, sourceMasked); - } - - public static void setEventListener(Function eventListener) { - InputHandler.eventListener = eventListener; - } - - private static void handleEvent(InputEvent event) { - if (eventListener != null) { - eventListener.run(event); - } - } - - public static void setMotionDeadZone(float motionDeadZone) { - InputHandler.motionDeadZone = motionDeadZone; - } - - public static boolean processMotionEvent(MotionEvent event) { - if (!isSourceValid(event.getSource())) { - return false; - } - - if (isGamepadSource(event.getSource())) { - for (InputDevice.MotionRange range : event.getDevice().getMotionRanges()) { - float axisValue = event.getAxisValue(range.getAxis()); - float value = Math.abs(axisValue); - String name = (MotionEvent.axisToString(range.getAxis()) + (axisValue >= 0 ? "+" : "-")).toUpperCase(); - String reverseName = (MotionEvent.axisToString(range.getAxis()) + (axisValue >= 0 ? "-" : "+")).toUpperCase(); - - if (motionDownEvents.containsKey(reverseName)) { - motionDownEvents.remove(reverseName); - handleEvent(new InputEvent(reverseName.toUpperCase(), 0.0f)); - } - - if (value > motionDeadZone) { - motionDownEvents.put(name, value); - handleEvent(new InputEvent(name.toUpperCase(), (value - motionDeadZone) / (1.0f - motionDeadZone))); - } else if (motionDownEvents.containsKey(name)) { - motionDownEvents.remove(name); - handleEvent(new InputEvent(name.toUpperCase(), 0.0f)); - } - - } - } - - return true; - } - - public static boolean processKeyEvent(KeyEvent event) { - if (!isSourceValid(event.getSource())) { - return false; - } - - if (isGamepadSource(event.getSource())) { - // Dpad return motion event + key event, this remove the key event - switch (event.getKeyCode()) { - case KeyEvent.KEYCODE_DPAD_UP: - case KeyEvent.KEYCODE_DPAD_UP_LEFT: - case KeyEvent.KEYCODE_DPAD_UP_RIGHT: - case KeyEvent.KEYCODE_DPAD_DOWN: - case KeyEvent.KEYCODE_DPAD_DOWN_LEFT: - case KeyEvent.KEYCODE_DPAD_DOWN_RIGHT: - case KeyEvent.KEYCODE_DPAD_RIGHT: - case KeyEvent.KEYCODE_DPAD_LEFT: - return true; - } - } - String code = KeyEvent.keyCodeToString(event.getKeyCode()); - if (event.getAction() == KeyEvent.ACTION_UP) { - keyDownEvents.remove(code); - handleEvent(new InputEvent(code, 0.0f)); - } else if (!keyDownEvents.containsKey(code)) { - keyDownEvents.put(code, new InputEvent(code, 1.0f)); - } - - for (InputEvent env: keyDownEvents.values()) { - handleEvent(env); - } - - return true; - } - - public static void reset() { - eventListener = null; - motionDeadZone = 0.0f; - motionDownEvents.clear(); - keyDownEvents.clear(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputMap.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputMap.java deleted file mode 100644 index ab2cdd04..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputMap.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.panda3ds.pandroid.input; - -import com.panda3ds.pandroid.data.GsonConfigParser; -import com.panda3ds.pandroid.utils.Constants; - -public class InputMap { - public static final GsonConfigParser parser = new GsonConfigParser(Constants.PREF_INPUT_MAP); - private static DataModel data; - - public static void initialize() { - data = parser.load(DataModel.class); - } - - public static float getDeadZone() { - return data.deadZone; - } - - public static void set(KeyName key, String name) { - data.keys[key.ordinal()] = name; - writeConfig(); - } - - public static String relative(KeyName key) { - return data.keys[key.ordinal()] == null ? "-" : data.keys[key.ordinal()]; - } - - public static KeyName relative(String name) { - for (KeyName key : KeyName.values()) { - if (relative(key).equalsIgnoreCase(name)) - return key; - } - return KeyName.NULL; - } - - public static void setDeadZone(float value) { - data.deadZone = Math.max(0.0f, Math.min(1.0f, value)); - writeConfig(); - } - - private static void writeConfig() { - parser.save(data); - } - - private static class DataModel { - public float deadZone = 0.2f; - public final String[] keys = new String[32]; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/KeyName.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/KeyName.java deleted file mode 100644 index 24c420d3..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/KeyName.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.panda3ds.pandroid.input; - -import com.panda3ds.pandroid.utils.Constants; - -public enum KeyName { - A(Constants.INPUT_KEY_A), - B(Constants.INPUT_KEY_B), - X(Constants.INPUT_KEY_X), - Y(Constants.INPUT_KEY_Y), - UP(Constants.INPUT_KEY_UP), - DOWN(Constants.INPUT_KEY_DOWN), - LEFT(Constants.INPUT_KEY_LEFT), - RIGHT(Constants.INPUT_KEY_RIGHT), - AXIS_LEFT, - AXIS_RIGHT, - AXIS_UP, - AXIS_DOWN, - START(Constants.INPUT_KEY_START), - SELECT(Constants.INPUT_KEY_SELECT), - L(Constants.INPUT_KEY_L), - R(Constants.INPUT_KEY_R), - NULL, - CHANGE_DS_LAYOUT; - - private final int keyId; - - KeyName() { - this(-1); - } - - KeyName(int keyId) { - this.keyId = keyId; - } - - public int getKeyId() { - return keyId; - } - -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/Function.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/Function.java deleted file mode 100644 index 25a15875..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/Function.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.panda3ds.pandroid.lang; - -public interface Function { - void run(T arg); -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/PipeStreamTask.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/PipeStreamTask.java deleted file mode 100644 index e4bbda98..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/PipeStreamTask.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.panda3ds.pandroid.lang; - -import java.io.InputStream; -import java.io.OutputStream; - -public class PipeStreamTask extends Task { - private final InputStream input; - private final OutputStream output; - private final long limit; - private long size; - - public PipeStreamTask(InputStream input, OutputStream output, long limit) { - this.input = input; - this.output = output; - this.limit = limit; - } - - @Override - public void run() { - super.run(); - int data; - try { - while ((data = input.read()) != -1) { - output.write(data); - if (++size > limit) { - break; - } - } - } catch (Exception e) {} - close(); - } - - public void close() { - try { - output.flush(); - output.close(); - input.close(); - } catch (Exception e) {} - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/Task.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/Task.java deleted file mode 100644 index 8de344b4..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/lang/Task.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.panda3ds.pandroid.lang; - -public class Task extends Thread { - public Task(Runnable runnable) { - super(runnable); - } - - protected Task() {} - - public void runSync() { - start(); - waitFinish(); - } - - public void waitFinish() { - try { - join(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Quaternion.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Quaternion.java deleted file mode 100644 index 7c485c6c..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Quaternion.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.panda3ds.pandroid.math; - -public class Quaternion { - public float x, y, z, w; - public Quaternion(float x, float y, float z, float w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - public Quaternion fromEuler(Vector3 euler) { - float x = euler.x; - float y = euler.y; - float z = euler.z; - - double c1 = Math.cos(x / 2.0); - double c2 = Math.cos(y / 2.0); - double c3 = Math.cos(z / 2.0); - - double s1 = Math.sin(x / 2.0); - double s2 = Math.sin(y / 2.0); - double s3 = Math.sin(z / 2.0); - - this.x = (float) (s1 * c2 * c3 + c1 * s2 * s3); - this.y = (float) (c1 * s2 * c3 - s1 * c2 * s3); - this.z = (float) (c1 * c2 * s3 + s1 * s2 * c3); - this.w = (float) (c1 * c2 * c3 - s1 * s2 * s3); - return this; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector2.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector2.java deleted file mode 100644 index becec9e1..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector2.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.panda3ds.pandroid.math; - -public class Vector2 { - public float x, y; - public Vector2(float x, float y) { - this.x = x; - this.y = y; - } - - public static float distance(float x, float y, float x2, float y2) { return (float) Math.sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2)); } - - public void set(float x, float y) { - this.x = x; - this.y = y; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector3.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector3.java deleted file mode 100644 index 055972ec..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector3.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.panda3ds.pandroid.math; - -public class Vector3 { - private final Quaternion quaternion = new Quaternion(0, 0, 0, 0); - public float x, y, z; - - public Vector3(float x, float y, float z) { - this.x = x; - this.y = y; - this.z = z; - } - - public Vector3 rotateByEuler(Vector3 euler) { - this.quaternion.fromEuler(euler); - - float x = this.x, y = this.y, z = this.z; - float qx = this.quaternion.x; - float qy = this.quaternion.y; - float qz = this.quaternion.z; - float qw = this.quaternion.w; - - float ix = qw * x + qy * z - qz * y; - float iy = qw * y + qz * x - qx * z; - float iz = qw * z + qx * y - qy * x; - float iw = -qx * x - qy * qz * z; - - this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy; - this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz; - this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx; - return this; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/CompatUtils.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/CompatUtils.java deleted file mode 100644 index 91a37f55..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/CompatUtils.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.panda3ds.pandroid.utils; - -import android.app.Activity; -import android.app.ActivityManager; -import android.content.Context; -import android.content.ContextWrapper; -import android.content.res.TypedArray; -import android.graphics.Color; -import android.util.TypedValue; - -import androidx.annotation.AttrRes; - -import com.panda3ds.pandroid.app.PandroidApplication; - -public class CompatUtils { - public static Activity findActivity(Context context) { - if (context instanceof Activity) { - return (Activity) context; - } else if ((context instanceof ContextWrapper)) { - return findActivity(((ContextWrapper) context).getBaseContext()); - } - - return ((Activity) context); - } - - public static int resolveColor(Context context, @AttrRes int id) { - try { - TypedArray values = context.obtainStyledAttributes(new int[]{id}); - int color = values.getColor(0, Color.RED); - values.recycle(); - return color; - } catch (Exception e) { - return Color.rgb(255,0,255); - } - } - - public static float applyDimensions(int unit, int size) { - return TypedValue.applyDimension(unit, size, PandroidApplication.getAppContext().getResources().getDisplayMetrics()); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/Constants.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/Constants.java deleted file mode 100644 index 28276920..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/Constants.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.panda3ds.pandroid.utils; - -public class Constants { - public static final int INPUT_KEY_A = 1 << 0; - public static final int INPUT_KEY_B = 1 << 1; - public static final int INPUT_KEY_SELECT = 1 << 2; - public static final int INPUT_KEY_START = 1 << 3; - public static final int INPUT_KEY_RIGHT = 1 << 4; - public static final int INPUT_KEY_LEFT = 1 << 5; - public static final int INPUT_KEY_UP = 1 << 6; - public static final int INPUT_KEY_DOWN = 1 << 7; - public static final int INPUT_KEY_R = 1 << 8; - public static final int INPUT_KEY_L = 1 << 9; - public static final int INPUT_KEY_X = 1 << 10; - public static final int INPUT_KEY_Y = 1 << 11; - - public static final int N3DS_WIDTH = 400; - public static final int N3DS_FULL_HEIGHT = 480; - public static final int N3DS_HALF_HEIGHT = N3DS_FULL_HEIGHT / 2; - - public static final String ACTIVITY_PARAMETER_PATH = "path"; - public static final String ACTIVITY_PARAMETER_FRAGMENT = "fragment"; - public static final String LOG_TAG = "pandroid"; - - public static final String PREF_GLOBAL_CONFIG = "app.GlobalConfig"; - public static final String PREF_GAME_UTILS = "app.GameUtils"; - public static final String PREF_INPUT_MAP = "app.InputMap"; - public static final String PREF_SCREEN_CONTROLLER_PROFILES = "app.input.ScreenControllerManager"; - public static final String RESOURCE_FOLDER_ELF = "ELF"; // Folder for caching ELF files - public static final String RESOURCE_FOLDER_LUA_SCRIPTS = "Lua Scripts"; -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java deleted file mode 100644 index 26b029d9..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java +++ /dev/null @@ -1,298 +0,0 @@ -package com.panda3ds.pandroid.utils; - -import android.content.Context; -import android.content.Intent; -import android.database.Cursor; -import android.net.Uri; -import android.os.ParcelFileDescriptor; -import android.provider.DocumentsContract; -import android.system.Os; -import android.util.Log; - -import androidx.documentfile.provider.DocumentFile; - -import com.panda3ds.pandroid.app.PandroidApplication; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.util.Objects; - -public class FileUtils { - public static final String MODE_READ = "r"; - private static final String TREE_URI = "tree"; - - private static DocumentFile parseFile(String path) { - if (path.startsWith("/")) { - return DocumentFile.fromFile(new File(path)); - } - Uri uri = Uri.parse(path); - DocumentFile singleFile = DocumentFile.fromSingleUri(getContext(), uri); - if (singleFile.length() > 0 && singleFile.length() != 4096) { - return singleFile; - } - if (uri.getScheme().equals("content") && uri.getPath().startsWith("/" + TREE_URI)) { - return DocumentFile.fromTreeUri(getContext(), uri); - } - - return singleFile; - } - - private static Context getContext() { - return PandroidApplication.getAppContext(); - } - - public static String getName(String path) { - return parseFile(path).getName(); - } - - public static String getResourcesPath() { - File file = new File(getPrivatePath(), "config/resources"); - if (!file.exists()) { - file.mkdirs(); - } - - return file.getAbsolutePath(); - } - - public static String getResourcePath(String name) { - File file = new File(getResourcesPath(), name); - file.mkdirs(); - - return file.getAbsolutePath(); - } - - public static String getPrivatePath() { - File file = getContext().getFilesDir(); - if (!file.exists()) { - file.mkdirs(); - } - - return file.getAbsolutePath(); - } - - public static String getConfigPath() { - File file = new File(getPrivatePath(), "config"); - if (!file.exists()) { - file.mkdirs(); - } - - return file.getAbsolutePath(); - } - - public static String parseNativeMode(String mode) { - mode = mode.toLowerCase(); - switch (mode) { - case "r": - case "rb": - return "r"; - case "r+": - case "r+b": - case "rb+": - return "rw"; - case "w+": - return "rwt"; - case "w": - case "wb": - return "wt"; - case "wa": - return "wa"; - } - - throw new IllegalArgumentException("Invalid file mode: "+mode); - } - - public static boolean exists(String path) { - return parseFile(path).exists(); - } - - public static void rename(String path, String newName) { - parseFile(path).renameTo(newName); - } - - public static void delete(String path) { - DocumentFile file = parseFile(path); - - if (file.exists()) { - if (file.isDirectory()) { - String[] children = listFiles(path); - for (String child : children) { - delete(path + "/" + child); - } - } - - file.delete(); - } - } - - public static boolean createDir(String path, String name) { - DocumentFile folder = parseFile(path); - if (folder.findFile(name) != null) { - return true; - } - - return folder.createDirectory(name) != null; - } - - public static boolean createFile(String path, String name) { - DocumentFile folder = parseFile(path); - if (folder.findFile(name) != null) { - folder.findFile(name).delete(); - } - - return folder.createFile("", name) != null; - } - - public static boolean writeTextFile(String path, String name, String content) { - try { - createFile(path, name); - OutputStream stream = getOutputStream(path + "/" + name); - stream.write(content.getBytes(StandardCharsets.UTF_8)); - stream.flush(); - stream.close(); - } catch (Exception e) { - Log.e(Constants.LOG_TAG, "Error on write text file: ", e); - return false; - } - - return true; - } - - public static String readTextFile(String path) { - if (!exists(path)) { - return null; - } - - try { - InputStream stream = getInputStream(path); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - - int len; - byte[] buffer = new byte[1024 * 8]; - while ((len = stream.read(buffer)) != -1) { - output.write(buffer, 0, len); - } - - stream.close(); - output.flush(); - output.close(); - - byte[] data = output.toByteArray(); - return new String(data, 0, data.length); - } catch (Exception e) { - return null; - } - } - - public static InputStream getInputStream(String path) throws FileNotFoundException { - return getContext().getContentResolver().openInputStream(parseFile(path).getUri()); - } - - public static OutputStream getOutputStream(String path) throws FileNotFoundException { - return getContext().getContentResolver().openOutputStream(parseFile(path).getUri()); - } - - public static void makeUriPermanent(String uri, String mode) { - int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION; - if (mode.toLowerCase().contains("w")) { - flags &= Intent.FLAG_GRANT_WRITE_URI_PERMISSION; - } - - getContext().getContentResolver().takePersistableUriPermission(Uri.parse(uri), flags); - } - - public static void updateFile(String path) { - DocumentFile file = parseFile(path); - Uri uri = file.getUri(); - - switch (uri.getScheme()) { - case "file": { - new File(uri.getPath()).setLastModified(System.currentTimeMillis()); - break; - } - - case "content": { - getContext().getContentResolver().update(uri, null, null, null); - break; - } - - default: { - Log.w(Constants.LOG_TAG, "Cannot update file from scheme: " + uri.getScheme()); - break; - } - } - } - - public static long getLastModified(String path) { - return parseFile(path).lastModified(); - } - - public static long getLength(String path) { - return parseFile(path).length(); - } - - public static String[] listFiles(String path) { - DocumentFile folder = parseFile(path); - DocumentFile[] files = folder.listFiles(); - - String[] result = new String[files.length]; - for (int i = 0; i < result.length; i++) { - result[i] = files[i].getName(); - } - - return result; - } - - public static Uri obtainUri(String path) { - return parseFile(path).getUri(); - } - - public static String extension(String uri) { - String name = getName(uri); - if (!name.contains(".")) { - return name.toLowerCase(); - } - String[] parts = name.split("\\."); - - return parts[parts.length-1].toLowerCase(); - } - - public static boolean copyFile(String source, String path, String name) { - try { - String fullPath = path + "/" + name; - if (!FileUtils.exists(fullPath)) { - FileUtils.delete(fullPath); - } - FileUtils.createFile(path, name); - InputStream in = getInputStream(source); - OutputStream out = getOutputStream(fullPath); - // Make a 128KB temp buffer used for copying in chunks - byte[] buffer = new byte[1024 * 128]; - int length; - - while ((length = in.read(buffer)) != -1) { - out.write(buffer, 0, length); - } - - out.flush(); - out.close(); - in.close(); - } catch (Exception e) { - Log.e(Constants.LOG_TAG, "Error while trying to copy file", e); - return false; - } - - return true; - } - - public static String getChild(String path, String name) { - return parseFile(path).findFile(name).getUri().toString(); - } - - public static boolean isDirectory(String path) { - return parseFile(path).isDirectory(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/GameUtils.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/GameUtils.java deleted file mode 100644 index 1d865880..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/GameUtils.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.panda3ds.pandroid.utils; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.net.Uri; -import android.util.Log; - -import com.panda3ds.pandroid.app.GameActivity; -import com.panda3ds.pandroid.data.GsonConfigParser; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.data.game.GamesFolder; - -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; - -public class GameUtils { - private static final Bitmap DEFAULT_ICON = Bitmap.createBitmap(48, 48, Bitmap.Config.ARGB_8888); - private final static GsonConfigParser parser = new GsonConfigParser(Constants.PREF_GAME_UTILS); - - private static DataModel data; - - private static GameMetadata currentGame; - - public static void initialize() { - data = parser.load(DataModel.class); - refreshFolders(); - } - - public static GameMetadata findByRomPath(String romPath) { - ArrayList games = getGames(); - for (GameMetadata game : games) { - if (Objects.equals(romPath, game.getRealPath())) { - return game; - } - } - return null; - } - - public static void launch(Context context, GameMetadata game) { - currentGame = game; - String path = game.getRealPath(); - if (path.contains("://")) { - path = "game://internal/" + FileUtils.getName(game.getRealPath()); - } - - context.startActivity(new Intent(context, GameActivity.class).putExtra(Constants.ACTIVITY_PARAMETER_PATH, path)); - } - - public static GameMetadata getCurrentGame() { - return currentGame; - } - - public static void removeGame(GameMetadata game) { - data.games.remove(game); - writeChanges(); - } - - public static void addGame(GameMetadata game) { - data.games.add(0, game); - writeChanges(); - } - - public static String resolvePath(String path) { - String lower = path.toLowerCase(); - if (!lower.contains("://")) { - return path; - } - - Uri uri = Uri.parse(path); - switch (uri.getScheme().toLowerCase()) { - case "folder": { - return FileUtils.getChild(data.folders.get(uri.getAuthority()).getPath(), uri.getPathSegments().get(0)); - } - case "elf": { - return FileUtils.getResourcePath(Constants.RESOURCE_FOLDER_ELF) + "/" + uri.getAuthority(); - } - } - return path; - } - - public static void refreshFolders() { - String[] keys = data.folders.keySet().toArray(new String[0]); - for (String key : keys) { - GamesFolder folder = data.folders.get(key); - if (!folder.isValid()) { - data.folders.remove(key); - } else { - folder.refresh(); - } - } - writeChanges(); - } - - public static ArrayList getGames() { - ArrayList games = new ArrayList<>(); - games.addAll(data.games); - for (GamesFolder folder: data.folders.values()) { - games.addAll(folder.getGames()); - } - return games; - } - - public static void writeChanges() { - parser.save(data); - } - - public static void setGameIcon(String id, Bitmap icon) { - try { - String appPath = FileUtils.getPrivatePath(); - FileUtils.createDir(appPath, "cache_icons"); - FileUtils.createFile(appPath + "/cache_icons/", id + ".png"); - - OutputStream output = FileUtils.getOutputStream(appPath + "/cache_icons/" + id + ".png"); - icon.compress(Bitmap.CompressFormat.PNG, 100, output); - output.close(); - } catch (Exception e) { - Log.e(Constants.LOG_TAG, "Error on save game icon: ", e); - } - } - - public static Bitmap loadGameIcon(String id) { - try { - String path = FileUtils.getPrivatePath() + "/cache_icons/" + id + ".png"; - if (FileUtils.exists(path)) { - InputStream stream = FileUtils.getInputStream(path); - Bitmap image = BitmapFactory.decodeStream(stream); - stream.close(); - return image; - } - } catch (Exception e) { - Log.e(Constants.LOG_TAG, "Error on load game icon: ", e); - } - return DEFAULT_ICON; - } - - public static GamesFolder[] getFolders() { - return data.folders.values().toArray(new GamesFolder[0]); - } - - public static void registerFolder(String path) { - if (!data.folders.containsKey(path)) { - GamesFolder folder = new GamesFolder(path); - data.folders.put(folder.getId(), folder); - folder.refresh(); - writeChanges(); - } - } - - public static void removeFolder(GamesFolder folder) { - data.folders.remove(folder.getId()); - writeChanges(); - } - - public static GameMetadata findGameById(String id) { - for (GameMetadata game: getGames()) { - if (game.getId().equals(id)) { - return game; - } - } - - return null; - } - - private static class DataModel { - public final List games = new ArrayList<>(); - public final HashMap folders = new HashMap<>(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/PerformanceMonitor.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/PerformanceMonitor.java deleted file mode 100644 index 23adbf13..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/PerformanceMonitor.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.panda3ds.pandroid.utils; - -import android.app.ActivityManager; -import android.content.Context; -import android.os.Debug; -import android.os.Process; - -import com.panda3ds.pandroid.app.PandroidApplication; -import com.panda3ds.pandroid.data.config.GlobalConfig; - -public class PerformanceMonitor { - private static int fps = 1; - private static String backend = ""; - private static int frames = 0; - private static long lastUpdate = 0; - private static long totalMemory = 1; - private static long availableMemory = 0; - - public static void initialize(String backendName) { - fps = 1; - backend = backendName; - } - - public static void runFrame() { - if (GlobalConfig.get(GlobalConfig.KEY_SHOW_PERFORMANCE_OVERLAY)) { - frames++; - if (System.currentTimeMillis() - lastUpdate > 1000) { - lastUpdate = System.currentTimeMillis(); - fps = frames; - frames = 0; - try { - Context ctx = PandroidApplication.getAppContext(); - ActivityManager manager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); - ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo(); - manager.getMemoryInfo(info); - totalMemory = info.totalMem; - availableMemory = info.availMem; - } catch (Exception e) {} - } - } - } - - public static long getUsedMemory() { - return Math.max(1, totalMemory - availableMemory); - } - - public static long getTotalMemory() { - return totalMemory; - } - - public static long getAvailableMemory() { - return availableMemory; - } - - public static int getFps() { - return fps; - } - - public static String getBackend() { - return backend; - } - - public static void destroy() {} -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/SearchAgent.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/SearchAgent.java deleted file mode 100644 index 749e1bd6..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/SearchAgent.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.panda3ds.pandroid.utils; - -import java.text.Normalizer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; - -public class SearchAgent { - // Store all results in a hashmap - // Matches IDs -> Result string - private final HashMap searchBuffer = new HashMap<>(); - - // Add search item to list - public void addToBuffer(String id, String... words) { - StringBuilder string = new StringBuilder(); - for (String word : words) { - string.append(normalize(word)).append(" "); - } - - searchBuffer.put(id, string.toString()); - } - - // Convert string to lowercase alphanumeric string, converting all characters to ASCII and turning double spaces into single ones - // For example, é will be converted to e - private String normalize(String string) { - string = Normalizer.normalize(string, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", ""); - - return string.toLowerCase() - .replaceAll("(?!([a-z0-9 ])).*", "") - .replaceAll("\\s\\s", " "); - } - - // Execute search and return array with item id. - public List search(String query) { - String[] words = normalize(query).split("\\s"); - - if (words.length == 0) { - return Collections.emptyList(); - } - - // Map for add all search result: id -> probability - HashMap results = new HashMap<>(); - for (String key : searchBuffer.keySet()) { - int probability = 0; - String value = searchBuffer.get(key); - - for (String word : words) { - if (value.contains(word)) - probability++; - } - - if (probability > 0) { - results.put(key, probability); - } - } - - - // Filter by probability average, ie by how closely they match to our query - // Ex: A = 10% B = 30% C = 70% (formula is (10+30+70)/3=36) - // Afterwards remove all results with probability < 36 - int average = 0; - for (String key : results.keySet()) { - average += results.get(key); - } - average = average / Math.max(1, results.size()); - - int i = 0; - ArrayList resultKeys = new ArrayList<>(Arrays.asList(results.keySet().toArray(new String[0]))); - while ((i < resultKeys.size() && resultKeys.size() > 1)) { - if (results.get(resultKeys.get(i)) < average) { - String key = resultKeys.get(i); - resultKeys.remove(i); - results.remove(key); - i = 0; - continue; - } - - i++; - } - - return Arrays.asList(results.keySet().toArray(new String[0])); - } - - // Clear search buffer - public void clearBuffer() { - searchBuffer.clear(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java deleted file mode 100644 index dfdad225..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.panda3ds.pandroid.view; - -import static android.opengl.GLES32.*; - -import android.app.Activity; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Rect; -import android.opengl.GLSurfaceView; -import android.os.Handler; -import android.util.Log; - -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.base.BottomAlertDialog; -import com.panda3ds.pandroid.data.SMDH; -import com.panda3ds.pandroid.data.config.GlobalConfig; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.utils.CompatUtils; -import com.panda3ds.pandroid.utils.Constants; -import com.panda3ds.pandroid.utils.GameUtils; -import com.panda3ds.pandroid.utils.PerformanceMonitor; -import com.panda3ds.pandroid.view.ds.DsLayoutManager; -import com.panda3ds.pandroid.view.renderer.ConsoleRenderer; -import com.panda3ds.pandroid.view.renderer.layout.ConsoleLayout; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.opengles.GL10; - -public class PandaGlRenderer implements GLSurfaceView.Renderer, ConsoleRenderer { - private final String romPath; - private ConsoleLayout displayLayout; - private int screenWidth, screenHeight; - private int screenTexture; - public int screenFbo; - private final Context context; - - PandaGlRenderer(Context context, String romPath) { - super(); - this.context = context; - this.romPath = romPath; - - screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels; - screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels; - setLayout(DsLayoutManager.createLayout(0)); - } - - @Override - protected void finalize() throws Throwable { - if (screenTexture != 0) { - glDeleteTextures(1, new int[] {screenTexture}, 0); - } - - if (screenFbo != 0) { - glDeleteFramebuffers(1, new int[] {screenFbo}, 0); - } - - PerformanceMonitor.destroy(); - super.finalize(); - } - - public void onSurfaceCreated(GL10 unused, EGLConfig config) { - Log.i(Constants.LOG_TAG, glGetString(GL_EXTENSIONS)); - Log.w(Constants.LOG_TAG, glGetString(GL_VERSION)); - - int[] version = new int[2]; - glGetIntegerv(GL_MAJOR_VERSION, version, 0); - glGetIntegerv(GL_MINOR_VERSION, version, 1); - - if (version[0] < 3 || (version[0] == 3 && version[1] < 1)) { - Log.e(Constants.LOG_TAG, "OpenGL 3.1 or higher is required"); - } - - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); - - int[] generateBuffer = new int[1]; - glGenTextures(1, generateBuffer, 0); - screenTexture = generateBuffer[0]; - glBindTexture(GL_TEXTURE_2D, screenTexture); - glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, Constants.N3DS_WIDTH, Constants.N3DS_FULL_HEIGHT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_LINEAR); - glBindTexture(GL_TEXTURE_2D, 0); - - glGenFramebuffers(1, generateBuffer, 0); - screenFbo = generateBuffer[0]; - glBindFramebuffer(GL_FRAMEBUFFER, screenFbo); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, screenTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { - Log.e(Constants.LOG_TAG, "Framebuffer is not complete"); - } - glBindFramebuffer(GL_FRAMEBUFFER, 0); - - AlberDriver.Initialize(); - AlberDriver.setShaderJitEnabled(GlobalConfig.get(GlobalConfig.KEY_SHADER_JIT)); - AlberDriver.setAccurateShaderMulEnable(GlobalConfig.get(GlobalConfig.KEY_ACCURATE_SHADER_MULTIPLY)); - AlberDriver.setAudioEnabled(GlobalConfig.get(GlobalConfig.KEY_ENABLE_AUDIO)); - - // If loading the ROM failed, display an error message and early exit - if (!AlberDriver.LoadRom(romPath)) { - // Get a handler that can be used to post to the main thread - Handler mainHandler = new Handler(context.getMainLooper()); - mainHandler.post(()-> { - new BottomAlertDialog(context) - .setTitle(R.string.failed_load_rom) - .setMessage(R.string.dialog_message_invalid_rom) - .setPositiveButton(android.R.string.ok, (dialog, witch) -> { - dialog.dismiss(); - CompatUtils.findActivity(context).finishAndRemoveTask(); - }) - .setCancelable(false) - .show(); - }); - - GameMetadata game = GameUtils.getCurrentGame(); - GameUtils.removeGame(game); - return; - } - - // Load the SMDH - byte[] smdhData = AlberDriver.GetSmdh(); - if (smdhData.length == 0) { - Log.w(Constants.LOG_TAG, "Failed to load SMDH"); - } else { - SMDH smdh = new SMDH(smdhData); - Log.i(Constants.LOG_TAG, "Loaded rom SDMH"); - Log.i(Constants.LOG_TAG, String.format("You are playing '%s' published by '%s'", smdh.getTitle(), smdh.getPublisher())); - GameUtils.getCurrentGame().applySMDH(smdh); - } - - PerformanceMonitor.initialize(getBackendName()); - } - - public void onDrawFrame(GL10 unused) { - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); - - if (AlberDriver.HasRomLoaded()) { - AlberDriver.RunFrame(screenFbo); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); - glBindFramebuffer(GL_READ_FRAMEBUFFER, screenFbo); - - Rect topScreen = displayLayout.getTopDisplayBounds(); - Rect bottomScreen = displayLayout.getBottomDisplayBounds(); - - glBlitFramebuffer( - 0, Constants.N3DS_FULL_HEIGHT, Constants.N3DS_WIDTH, Constants.N3DS_HALF_HEIGHT, topScreen.left, screenHeight - topScreen.top, - topScreen.right, screenHeight - topScreen.bottom, GL_COLOR_BUFFER_BIT, GL_LINEAR - ); - - // Remove the black bars on the bottom screen - glBlitFramebuffer( - 40, Constants.N3DS_HALF_HEIGHT, Constants.N3DS_WIDTH - 40, 0, bottomScreen.left, screenHeight - bottomScreen.top, bottomScreen.right, - screenHeight - bottomScreen.bottom, GL_COLOR_BUFFER_BIT, GL_LINEAR - ); - } - - PerformanceMonitor.runFrame(); - } - - public void onSurfaceChanged(GL10 unused, int width, int height) { - screenWidth = width; - screenHeight = height; - - displayLayout.update(screenWidth, screenHeight); - } - - @Override - public void setLayout(ConsoleLayout layout) { - displayLayout = layout; - displayLayout.setTopDisplaySourceSize(Constants.N3DS_WIDTH, Constants.N3DS_HALF_HEIGHT); - displayLayout.setBottomDisplaySourceSize(Constants.N3DS_WIDTH - 40 - 40, Constants.N3DS_HALF_HEIGHT); - displayLayout.update(screenWidth, screenHeight); - } - - @Override - public ConsoleLayout getLayout() { - return displayLayout; - } - - @Override - public String getBackendName() { - return "OpenGL"; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlSurfaceView.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlSurfaceView.java deleted file mode 100644 index e3023fcb..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlSurfaceView.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.panda3ds.pandroid.view; - -import android.content.Context; -import android.opengl.GLSurfaceView; -import android.os.Debug; - -import androidx.annotation.NonNull; -import com.panda3ds.pandroid.math.Vector2; -import com.panda3ds.pandroid.view.controller.TouchEvent; -import com.panda3ds.pandroid.view.controller.nodes.TouchScreenNodeImpl; -import com.panda3ds.pandroid.view.renderer.ConsoleRenderer; - -public class PandaGlSurfaceView extends GLSurfaceView implements TouchScreenNodeImpl { - final PandaGlRenderer renderer; - private int width; - private int height; - - public PandaGlSurfaceView(Context context, String romPath) { - super(context); - setEGLContextClientVersion(3); - if (Debug.isDebuggerConnected()) { - setDebugFlags(DEBUG_LOG_GL_CALLS); - } - renderer = new PandaGlRenderer(getContext(), romPath); - setRenderer(renderer); - } - - public ConsoleRenderer getRenderer() { return renderer; } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - width = getMeasuredWidth(); - height = getMeasuredHeight(); - } - - @NonNull - @Override - public Vector2 getSize() { - return new Vector2(width, height); - } - - @Override - public void onTouch(TouchEvent event) { - onTouchScreenPress(renderer, event); - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaLayoutController.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaLayoutController.java deleted file mode 100644 index 2f341c7b..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaLayoutController.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.panda3ds.pandroid.view; - -import android.content.Context; -import android.util.AttributeSet; -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.utils.Constants; -import com.panda3ds.pandroid.view.controller.ControllerLayout; -import com.panda3ds.pandroid.view.controller.mapping.ControllerProfileManager; -import com.panda3ds.pandroid.view.controller.mapping.ControllerItem; -import com.panda3ds.pandroid.view.controller.mapping.Profile; -import com.panda3ds.pandroid.view.controller.nodes.Button; -import com.panda3ds.pandroid.view.controller.nodes.Joystick; - -public class PandaLayoutController extends ControllerLayout { - - private int width = -1; - private int height = -1; - - public PandaLayoutController(Context context) { super(context); } - public PandaLayoutController(Context context, AttributeSet attrs) { super(context, attrs); } - public PandaLayoutController(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } - - public PandaLayoutController(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - public void initialize() { - int[] keyButtonList = {R.id.button_a, Constants.INPUT_KEY_A, R.id.button_b, Constants.INPUT_KEY_B, - R.id.button_y, Constants.INPUT_KEY_Y, R.id.button_x, Constants.INPUT_KEY_X, - - R.id.button_left, Constants.INPUT_KEY_LEFT, R.id.button_right, Constants.INPUT_KEY_RIGHT, - R.id.button_up, Constants.INPUT_KEY_UP, R.id.button_down, Constants.INPUT_KEY_DOWN, - - R.id.button_start, Constants.INPUT_KEY_START, R.id.button_select, Constants.INPUT_KEY_SELECT, - - R.id.button_l, Constants.INPUT_KEY_L, R.id.button_r, Constants.INPUT_KEY_R}; - - for (int i = 0; i < keyButtonList.length; i += 2) { - final int keyCode = keyButtonList[i + 1]; - ((Button) findViewById(keyButtonList[i])).setStateListener((btn, pressed) -> { - if (pressed) - AlberDriver.KeyDown(keyCode); - else - AlberDriver.KeyUp(keyCode); - }); - } - - ((Joystick) findViewById(R.id.left_analog)).setJoystickListener((joystick, axisX, axisY) -> { - AlberDriver.SetCirclepadAxis((int) (axisX * 0x9C), (int) (axisY * 0x9C) * -1); - }); - - refreshChildren(); - measure(MeasureSpec.EXACTLY, MeasureSpec.EXACTLY); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int measuredWidth = getMeasuredWidth(); - int measuredHeight = getMeasuredHeight(); - - if (measuredWidth != width || measuredHeight != height) { - width = measuredWidth; - height = measuredHeight; - applyProfileMap(); - } - } - - private void applyProfileMap() { - Profile profile = ControllerProfileManager.getDefaultProfile(); - - profile.applyToView(ControllerItem.L,findViewById(R.id.button_l), width, height); - profile.applyToView(ControllerItem.R, findViewById(R.id.button_r), width, height); - profile.applyToView(ControllerItem.START, findViewById(R.id.button_start), width, height); - profile.applyToView(ControllerItem.SELECT, findViewById(R.id.button_select), width, height); - profile.applyToView(ControllerItem.JOYSTICK, findViewById(R.id.left_analog), width, height); - profile.applyToView(ControllerItem.GAMEPAD, findViewById(R.id.gamepad), width, height); - profile.applyToView(ControllerItem.DPAD, findViewById(R.id.dpad), width, height); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/SimpleTextWatcher.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/SimpleTextWatcher.java deleted file mode 100644 index baacd743..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/SimpleTextWatcher.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.panda3ds.pandroid.view; - -import android.text.Editable; -import android.text.TextWatcher; - -public interface SimpleTextWatcher extends TextWatcher { - void onChange(String value); - - @Override - default void onTextChanged(CharSequence s, int start, int before, int count) {} - - @Override - default void beforeTextChanged(CharSequence s, int start, int count, int after) {} - - @Override - default void afterTextChanged(Editable s) { - onChange(s.toString()); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BaseEditor.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BaseEditor.java deleted file mode 100644 index 4dba9f7c..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BaseEditor.java +++ /dev/null @@ -1,322 +0,0 @@ -package com.panda3ds.pandroid.view.code; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; -import android.text.Editable; -import android.text.Layout; -import android.util.AttributeSet; -import android.view.ViewTreeObserver; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.util.Arrays; - -public class BaseEditor extends BasicTextEditor { - private static final String HELLO_WORLD = "Hello World"; - private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG); - private final Rect rect = new Rect(); - private int currentLine; - private float spaceWidth; - private int lineHeight; - private int textOffset; - private int beginLine; - private int beginIndex; - private int endLine; - private int endIndex; - private int visibleHeight; - private int contentWidth; - private Layout textLayout; - private int currentWidth = -1; - private int currentHeight = -1; - - private final char[] textBuffer = new char[1]; - protected final int[] colors = new int[256]; - - // Allocate 512KB for the buffer - protected final byte[] syntaxBuffer = new byte[512 * 1024]; - private boolean requireUpdate = true; - - public BaseEditor(@NonNull Context context) { - super(context); - } - - public BaseEditor(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - public BaseEditor(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - { - EditorColors.obtainColorScheme(colors, getContext()); - } - - @Override - protected void initialize() { - super.initialize(); - getViewTreeObserver().addOnGlobalLayoutListener(() -> { - adjustScroll(); - requireUpdate = true; - }); - } - - @SuppressLint("MissingSuperCall") - @Override - public void draw(Canvas canvas) { - //super.draw(canvas); - canvas.drawColor(colors[EditorColors.COLOR_BACKGROUND]); - textLayout = getLayout(); - if (textLayout == null) { - postDelayed(this::invalidate, 25); - return; - } - - try { - prepareDraw(); - if (requireUpdate) { - onVisibleContentChanged(beginIndex, endIndex - beginIndex); - } - - if (getSelectionStart() == getSelectionEnd()) { - drawCaret(canvas); - drawCurrentLine(canvas); - } else { - drawSelection(canvas); - } - - drawText(canvas); - drawLineCount(canvas); - } catch (Throwable e) { - drawError(canvas, e); - } - } - - private void drawError(Canvas canvas, Throwable e) { - canvas.drawColor(Color.RED); - paint.setTextSize(getTextSize()); - paint.setColor(Color.WHITE); - canvas.drawText("Editor draw error:", getPaddingLeft(), getLineHeight(), paint); - canvas.drawText(String.valueOf(e), getPaddingLeft(), getLineHeight() * 2, paint); - - int index = 2; - for (StackTraceElement trace : e.getStackTrace()) { - index++; - if (index > 5) break; - canvas.drawText(trace.getClassName() + ":" + trace.getMethodName() + ":" + trace.getLineNumber(), getPaddingLeft(), getLineHeight() * index, paint); - } - } - - private void prepareDraw() { - paint.setTypeface(getTypeface()); - paint.setTextSize(getTextSize()); - - Paint.FontMetrics fontMetrics = paint.getFontMetrics(); - spaceWidth = paint.measureText(" "); - lineHeight = getLineHeight(); - - //Align text to center of line - { - int ascent = (int) Math.abs(fontMetrics.ascent); - paint.getTextBounds(HELLO_WORLD, 0, HELLO_WORLD.length(), rect); - textOffset = Math.max(((lineHeight - rect.height()) / 2), 0) + ascent; - } - - int lineCount = textLayout.getLineCount(); - currentLine = textLayout.getLineForOffset(getSelectionStart()); - - int oldBeginLine = beginLine; - int oldEndLine = endLine; - - beginLine = Math.max(0, Math.min((getScrollY() / lineHeight) - 1, lineCount)); - beginIndex = textLayout.getLineStart(beginLine); - - if (oldEndLine != endLine || beginLine != oldBeginLine) { - requireUpdate = true; - } - - getGlobalVisibleRect(rect); - visibleHeight = rect.height(); - - endLine = Math.round(((float) visibleHeight / lineHeight) + 2) + beginLine; - endIndex = getLayout().getLineStart(Math.min(lineCount, endLine)); - - int padding = (int) (paint.measureText(String.valueOf(lineCount)) + (spaceWidth * 4)); - if (getPaddingLeft() != padding) { - setPadding(padding, 0, 0, 0); - } - - contentWidth = getWidth() + getScrollX(); - } - - private void drawLineCount(Canvas canvas) { - int colorEnable = colors[EditorColors.COLOR_TEXT]; - int colorDisable = applyAlphaToColor(colors[EditorColors.COLOR_TEXT], 100); - - paint.setColor(colors[EditorColors.COLOR_BACKGROUND_SECONDARY]); - int scrollY = getScrollY(); - float x = getScrollX(); - - canvas.translate(x, 0); - canvas.drawRect(0, scrollY, getPaddingLeft() - spaceWidth, visibleHeight + scrollY, paint); - paint.setColor(colors[EditorColors.COLOR_CURRENT_LINE]); - canvas.drawRect(0, currentLine * lineHeight, getPaddingLeft() - spaceWidth, (currentLine * lineHeight) + lineHeight, paint); - - for (int i = beginLine; i < Math.min(getLineCount(), endLine); i++) { - String text = String.valueOf(i + 1); - if (i == currentLine) { - paint.setColor(colorEnable); - } else { - paint.setColor(colorDisable); - } - - float width = paint.measureText(text); - canvas.drawText(text, getPaddingLeft() - width - (spaceWidth * 2.5f), (i * lineHeight) + textOffset, paint); - } - - paint.setColor(applyAlphaToColor(colorEnable, 10)); - canvas.drawRect(getPaddingLeft() - spaceWidth - (spaceWidth / 4), scrollY, getPaddingLeft() - spaceWidth, visibleHeight + scrollY, paint); - - canvas.translate(-x, 0); - } - - private void drawCurrentLine(Canvas canvas) { - float y = currentLine * lineHeight; - paint.setColor(colors[EditorColors.COLOR_CURRENT_LINE]); - canvas.drawRect(0, y, contentWidth, y + lineHeight, paint); - } - - private void drawText(Canvas canvas) { - Editable edit = getText(); - float x = 0; - float y = textOffset; - int line = 0; - - canvas.translate(getPaddingLeft(), beginLine * lineHeight); - - paint.setColor(colors[EditorColors.COLOR_TEXT]); - for (int i = beginIndex; i < endIndex; i++) { - textBuffer[0] = edit.charAt(i); - switch (textBuffer[0]) { - case '\n': - line++; - x = 0; - y = (line * lineHeight) + textOffset; - break; - - case ' ': - x += spaceWidth; - break; - - default: - paint.setColor(colors[syntaxBuffer[i - beginIndex]]); - canvas.drawText(textBuffer, 0, 1, x, y, paint); - x += paint.measureText(textBuffer, 0, 1); - break; - } - } - - canvas.translate(-getPaddingLeft(), -(beginLine * lineHeight)); - } - - private void drawCaret(Canvas canvas) { - int start = textLayout.getLineStart(currentLine); - int end = textLayout.getLineEnd(currentLine); - int position = getSelectionStart(); - float x = getPaddingLeft(); - float y = (currentLine * lineHeight); - Editable text = getText(); - for (int i = start; i < end; i++) { - if (i == position) { - break; - } - - textBuffer[0] = text.charAt(i); - x += paint.measureText(textBuffer, 0, 1); - } - - paint.setColor(colors[EditorColors.COLOR_CARET]); - float caretWidth = spaceWidth / 2; - canvas.drawRect(x - (caretWidth / 2), y, x + (caretWidth / 2), y + lineHeight, paint); - } - - private void drawSelection(Canvas canvas) { - int start = getSelectionStart(); - int end = getSelectionEnd(); - int endLine = textLayout.getLineForOffset(end); - canvas.translate(getPaddingLeft(), 0); - - paint.setColor(colors[EditorColors.COLOR_SELECTION]); - - Editable text = getText(); - - for (int line = currentLine; line <= endLine; line++) { - - if (line < beginLine) continue; - if (line > this.endLine) break; - - if (line == endLine || line == currentLine) { - int lineStart = textLayout.getLineStart(line); - float x = 0; - - if (lineStart <= start) { - x = paint.measureText(text, lineStart, start); - lineStart = start; - } - float width; - if (line < endLine) { - width = contentWidth; - } else { - width = paint.measureText(text, lineStart, end); - } - - canvas.drawRect(x, lineHeight * line, x + width, (lineHeight * line) + lineHeight, paint); - } else { - canvas.drawRect(0, lineHeight * line, contentWidth, (lineHeight * line) + lineHeight, paint); - } - } - canvas.translate(-getPaddingLeft(), 0); - } - - public int applyAlphaToColor(int color, int alpha) { - return Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color)); - } - - protected void onVisibleContentChanged(int index, int length) { - requireUpdate = false; - - Arrays.fill(syntaxBuffer, (byte) 0); - if (length > 0) { - onRefreshColorScheme(syntaxBuffer, index, length); - } - } - - protected void onRefreshColorScheme(byte[] buffer, int index, int length) { - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - if (currentWidth != getMeasuredWidth() || currentHeight != getMeasuredHeight()) { - currentWidth = getMeasuredWidth(); - currentHeight = getMeasuredHeight(); - invalidateAll(); - } - } - - protected void invalidateAll() { - requireUpdate = true; - invalidate(); - } - - @Override - protected void onTextChanged() { - requireUpdate = true; - super.onTextChanged(); - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BasicTextEditor.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BasicTextEditor.java deleted file mode 100644 index caabae6b..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BasicTextEditor.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.panda3ds.pandroid.view.code; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Color; -import android.graphics.Rect; -import android.graphics.Typeface; -import android.text.Editable; -import android.text.InputType; -import android.text.TextWatcher; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.GestureDetector; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.inputmethod.EditorInfo; -import android.widget.Scroller; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatEditText; - -import com.panda3ds.pandroid.view.SimpleTextWatcher; - -public class BasicTextEditor extends AppCompatEditText { - private GestureDetector gestureDetector; - private final Rect visibleRect = new Rect(); - - public BasicTextEditor(@NonNull Context context) { - super(context); - initialize(); - } - - public BasicTextEditor(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - initialize(); - } - - public BasicTextEditor(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - initialize(); - } - - protected void initialize() { - setTypeface(Typeface.MONOSPACE); - gestureDetector = new GestureDetector(getContext(), new ScrollGesture()); - - setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/comic_mono.ttf")); - setGravity(Gravity.START | Gravity.TOP); - setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); - setLineSpacing(0, 1.3f); - setScroller(new Scroller(getContext())); - - setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | - InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE | - InputType.TYPE_TEXT_FLAG_MULTI_LINE | - InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); - - setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); - setBackgroundColor(Color.BLACK); - setTextColor(Color.WHITE); - - setFocusableInTouchMode(true); - setHorizontallyScrolling(true); - setHorizontalScrollBarEnabled(true); - - addTextChangedListener((SimpleTextWatcher) value -> BasicTextEditor.this.onTextChanged()); - } - - // Disable default Android scroll - @Override - public void scrollBy(int x, int y) {} - - @Override - public void scrollTo(int x, int y) {} - - public void setScroll(int x, int y) { - x = Math.max(0, x); - y = Math.max(0, y); - - int maxHeight = Math.round(getLineCount() * getLineHeight()); - getGlobalVisibleRect(visibleRect); - maxHeight = Math.max(0, maxHeight - visibleRect.height()); - - int maxWidth = (int) getPaint().measureText(getText(), 0, length()); - maxWidth += getPaddingLeft() + getPaddingRight(); - - int scrollX = x - Math.max(Math.min(maxWidth - visibleRect.width(), x), 0); - int scrollY = Math.min(maxHeight, y); - - super.scrollTo(scrollX, scrollY); - } - - public void adjustScroll() { - setScroll(getScrollX(), getScrollY()); - } - - protected void onTextChanged() {} - - private boolean onSuperTouchListener(MotionEvent event) { - return super.onTouchEvent(event); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouchEvent(MotionEvent event) { - return gestureDetector.onTouchEvent(event); - } - - private class ScrollGesture implements GestureDetector.OnGestureListener { - @Override - public boolean onDown(@NonNull MotionEvent e) { - return true; - } - - @Override - public void onShowPress(@NonNull MotionEvent e) { - onSuperTouchListener(e); - } - - @Override - public boolean onSingleTapUp(@NonNull MotionEvent e) { - return onSuperTouchListener(e); - } - - @Override - public boolean onScroll(@NonNull MotionEvent e1, @NonNull MotionEvent e2, float distanceX, float distanceY) { - int scrollX = (int) Math.max(0, getScrollX() + distanceX); - int scrollY = (int) Math.max(0, getScrollY() + distanceY); - setScroll(scrollX, scrollY); - return true; - } - - @Override - public void onLongPress(@NonNull MotionEvent e) { - onSuperTouchListener(e); - } - - @Override - public boolean onFling(@NonNull MotionEvent e1, @NonNull MotionEvent e2, float velocityX, float velocityY) { - return false; - } - } - - public void insert(CharSequence text) { - if (getSelectionStart() == getSelectionEnd()) { - getText().insert(getSelectionStart(), text); - } else { - getText().replace(getSelectionStart(), getSelectionEnd(), text); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/CodeEditor.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/CodeEditor.java deleted file mode 100644 index 96a8637b..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/CodeEditor.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.panda3ds.pandroid.view.code; - -import android.content.Context; -import android.util.AttributeSet; - -import com.panda3ds.pandroid.view.code.syntax.CodeSyntax; - -public class CodeEditor extends BaseEditor { - private CodeSyntax syntax; - private Runnable contentChangeListener; - - public CodeEditor(Context context) { - super(context); - } - - public CodeEditor(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public CodeEditor(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public void setSyntax(CodeSyntax syntax) { - this.syntax = syntax; - invalidateAll(); - } - - public void setOnContentChangedListener(Runnable contentChangeListener) { - this.contentChangeListener = contentChangeListener; - } - - @Override - protected void onTextChanged() { - super.onTextChanged(); - if (contentChangeListener != null) { - contentChangeListener.run(); - } - } - - @Override - protected void onRefreshColorScheme(byte[] buffer, int index, int length) { - super.onRefreshColorScheme(buffer, index, length); - - if (syntax != null) { - final CharSequence text = getText().subSequence(index, index + length); - syntax.apply(syntaxBuffer, text); - System.gc(); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/EditorColors.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/EditorColors.java deleted file mode 100644 index 3b12ddf9..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/EditorColors.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.panda3ds.pandroid.view.code; - -import android.content.Context; - -import com.panda3ds.pandroid.app.PandroidApplication; - -public class EditorColors { - public static final byte COLOR_TEXT = 0x0; - public static final byte COLOR_KEYWORDS = 0x1; - public static final byte COLOR_NUMBERS = 0x2; - public static final byte COLOR_STRING = 0x3; - public static final byte COLOR_METADATA = 0x4; - public static final byte COLOR_COMMENT = 0x5; - public static final byte COLOR_SYMBOLS = 0x6; - public static final byte COLOR_FIELDS = 0x7; - public static final byte COLOR_BACKGROUND = 0x1D; - public static final byte COLOR_BACKGROUND_SECONDARY = 0x2D; - public static final byte COLOR_SELECTION = 0x3D; - public static final byte COLOR_CARET = 0x4D; - public static final byte COLOR_CURRENT_LINE = 0x5D; - - public static void obtainColorScheme(int[] colors, Context context) { - if (PandroidApplication.isDarkMode()) { - applyDarkTheme(colors); - } else { - applyLightTheme(colors); - } - } - - private static void applyLightTheme(int[] colors) { - colors[EditorColors.COLOR_TEXT] = 0xFF000000; - colors[EditorColors.COLOR_KEYWORDS] = 0xFF3AE666; - colors[EditorColors.COLOR_NUMBERS] = 0xFF3A9EE6; - colors[EditorColors.COLOR_METADATA] = 0xFF806AE6; - colors[EditorColors.COLOR_SYMBOLS] = 0xFF202020; - colors[EditorColors.COLOR_STRING] = 0xFF2EB541; - colors[EditorColors.COLOR_FIELDS] = 0xFF9876AA; - colors[EditorColors.COLOR_COMMENT] = 0xFF808080; - - colors[EditorColors.COLOR_BACKGROUND] = 0xFFFFFFFF; - colors[EditorColors.COLOR_BACKGROUND_SECONDARY] = 0xFFF0F0F0; - colors[EditorColors.COLOR_SELECTION] = 0x701F9EDE; - colors[EditorColors.COLOR_CARET] = 0xFF000000; - colors[EditorColors.COLOR_CURRENT_LINE] = 0x05000050; - } - - private static void applyDarkTheme(int[] colors) { - colors[EditorColors.COLOR_TEXT] = 0xFFFFFFFF; - colors[EditorColors.COLOR_KEYWORDS] = 0xFFE37F3E; - colors[EditorColors.COLOR_NUMBERS] = 0xFF3A9EE6; - colors[EditorColors.COLOR_METADATA] = 0xFFC5CA1D; - colors[EditorColors.COLOR_SYMBOLS] = 0xFFC0C0C0; - colors[EditorColors.COLOR_STRING] = 0xFF2EB541; - colors[EditorColors.COLOR_FIELDS] = 0xFF9876AA; - colors[EditorColors.COLOR_COMMENT] = 0xFFBBBBBB; - - colors[EditorColors.COLOR_BACKGROUND] = 0xFF2B2B2B; - colors[EditorColors.COLOR_BACKGROUND_SECONDARY] = 0xFF313335; - colors[EditorColors.COLOR_SELECTION] = 0x701F9EDE; - colors[EditorColors.COLOR_CARET] = 0x60FFFFFF; - colors[EditorColors.COLOR_CURRENT_LINE] = 0x10FFFFFF; - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/CodeSyntax.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/CodeSyntax.java deleted file mode 100644 index 6c50865f..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/CodeSyntax.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.panda3ds.pandroid.view.code.syntax; - -public abstract class CodeSyntax { - public abstract void apply(byte[] syntaxBuffer, final CharSequence text); - - // Get syntax highlighting data for a file based on its filename, by looking at the extension - public static CodeSyntax getFromFilename(String name) { - name = name.trim().toLowerCase(); - String[] parts = name.split("\\."); - if (parts.length == 0) - return null; - - // Get syntax based on file extension - switch (parts[parts.length - 1]) { - case "lua": - return new LuaSyntax(); - default: - return null; - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/LuaSyntax.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/LuaSyntax.java deleted file mode 100644 index d53fb1d7..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/LuaSyntax.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.panda3ds.pandroid.view.code.syntax; - -import com.panda3ds.pandroid.view.code.EditorColors; - -import java.util.Arrays; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -class LuaSyntax extends CodeSyntax { - public static final Pattern comment = Pattern.compile("(\\-\\-.*)"); - - public static final Pattern keywords = PatternUtils.buildGenericKeywords( - "and", "break", "do", "else", "elseif", "end", "false", "for", "function", "if", "in", - "local", "nil", "not", "or", "repeat", "return", "then", "true", "until", "while"); - - public static final Pattern identifiers = PatternUtils.buildGenericKeywords( - "assert", "collectgarbage", "dofile", "error", "getmetatable", "ipairs", "loadfile", "load", "loadstring", "next", "pairs", "pcall", "print", "rawequal", "rawlen", "rawget", "rawset", - "select", "setmetatable", "tonumber", "tostring", "type", "xpcall", "_G", "_VERSION", "arshift", "band", "bnot", "bor", "bxor", "btest", "extract", "lrotate", "lshift", "replace", - "rrotate", "rshift", "create", "resume", "running", "status", "wrap", "yield", "isyieldable", "debug", "getuservalue", "gethook", "getinfo", "getlocal", "getregistry", "getmetatable", - "getupvalue", "upvaluejoin", "upvalueid", "setuservalue", "sethook", "setlocal", "setmetatable", "setupvalue", "traceback", "close", "flush", "input", "lines", "open", "output", "popen", - "read", "tmpfile", "type", "write", "close", "flush", "lines", "read", "seek", "setvbuf", "write", "__gc", "__tostring", "abs", "acos", "asin", "atan", "ceil", "cos", "deg", "exp", "tointeger", - "floor", "fmod", "ult", "log", "max", "min", "modf", "rad", "random", "randomseed", "sin", "sqrt", "string", "tan", "type", "atan2", "cosh", "sinh", "tanh", - "pow", "frexp", "ldexp", "log10", "pi", "huge", "maxinteger", "mininteger", "loadlib", "searchpath", "seeall", "preload", "cpath", "path", "searchers", "loaded", "module", "require", "clock", - "date", "difftime", "execute", "exit", "getenv", "remove", "rename", "setlocale", "time", "tmpname", "byte", "char", "dump", "find", "format", "gmatch", "gsub", "len", "lower", "match", "rep", - "reverse", "sub", "upper", "pack", "packsize", "unpack", "concat", "maxn", "insert", "pack", "unpack", "remove", "move", "sort", "offset", "codepoint", "char", "len", "codes", "charpattern", - "coroutine", "table", "io", "os", "string", "uint8_t", "bit32", "math", "debug", "package"); - - public static final Pattern string = Pattern.compile("((\")(.*?)([^\\\\]\"))|((\")(.+))|((')(.?)('))"); - public static final Pattern symbols = Pattern.compile("([.!&?:;*+/{}()\\]\\[,=-])"); - public static final Pattern numbers = Pattern.compile("\\b((\\d*[.]?\\d+([Ee][+-]?[\\d]+)?[LlfFdD]?)|(0[xX][0-9a-zA-Z]+)|(0[bB][0-1]+)|(0[0-7]+))\\b"); - - @Override - public void apply(byte[] syntaxBuffer, CharSequence text) { - for (Matcher matcher = keywords.matcher(text); matcher.find(); ) { - Arrays.fill(syntaxBuffer, matcher.start(), matcher.end(), EditorColors.COLOR_KEYWORDS); - } - - for (Matcher matcher = identifiers.matcher(text); matcher.find(); ) { - Arrays.fill(syntaxBuffer, matcher.start(), matcher.end(), EditorColors.COLOR_FIELDS); - } - - for (Matcher matcher = symbols.matcher(text); matcher.find(); ) { - Arrays.fill(syntaxBuffer, matcher.start(), matcher.end(), EditorColors.COLOR_SYMBOLS); - } - - for (Matcher matcher = numbers.matcher(text); matcher.find(); ) { - Arrays.fill(syntaxBuffer, matcher.start(), matcher.end(), EditorColors.COLOR_NUMBERS); - } - - for (Matcher matcher = string.matcher(text); matcher.find(); ) { - Arrays.fill(syntaxBuffer, matcher.start(), matcher.end(), EditorColors.COLOR_STRING); - } - - for (Matcher matcher = comment.matcher(text); matcher.find(); ) { - Arrays.fill(syntaxBuffer, matcher.start(), matcher.end(), EditorColors.COLOR_COMMENT); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/PatternUtils.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/PatternUtils.java deleted file mode 100644 index accb0326..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/PatternUtils.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.panda3ds.pandroid.view.code.syntax; - -import java.util.regex.Pattern; - -class PatternUtils { - public static Pattern buildGenericKeywords(String... keywords) { - StringBuilder builder = new StringBuilder(); - builder.append("\\b("); - for (int i = 0; i < keywords.length; i++) { - builder.append(keywords[i]); - if (i + 1 != keywords.length) { - builder.append("|"); - } - } - - builder.append(")\\b"); - return Pattern.compile(builder.toString()); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/ControllerLayout.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/ControllerLayout.java deleted file mode 100644 index 32451bc7..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/ControllerLayout.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.panda3ds.pandroid.view.controller; - -import android.content.Context; -import android.util.AttributeSet; -import android.util.Log; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import com.panda3ds.pandroid.math.Vector2; -import com.panda3ds.pandroid.utils.Constants; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; - -public class ControllerLayout extends RelativeLayout { - private final HashMap activeTouchEvents = new HashMap<>(); - private final ArrayList controllerNodes = new ArrayList<>(); - - public ControllerLayout(Context context) { this(context, null); } - public ControllerLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public ControllerLayout(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } - - public ControllerLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - public void refreshChildren() { - ArrayList nodes = new ArrayList<>(); - populateNodesArray(this, nodes); - - // Need Reverse: First view is in back and last view is in front for respect android View hierarchy - Collections.reverse(nodes); - - controllerNodes.clear(); - controllerNodes.addAll(nodes); - } - - private void populateNodesArray(ViewGroup group, ArrayList list) { - for (int i = 0; i < group.getChildCount(); i++) { - View view = group.getChildAt(i); - if (view instanceof ControllerNode) { - list.add((ControllerNode) view); - } else if (view instanceof ViewGroup) { - populateNodesArray((ViewGroup) view, list); - } - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - int index = event.getActionIndex(); - - switch (event.getActionMasked()) { - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_POINTER_UP: { - int id = event.getPointerId(index); - processTouch(true, event.getX(index), event.getY(index), id); - } break; - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_POINTER_DOWN: { - int id = event.getPointerId(index); - processTouch(false, event.getX(index), event.getY(index), id); - } break; - case MotionEvent.ACTION_MOVE: - for (int id = 0; id < event.getPointerCount(); id++) { - processTouch(false, event.getX(id), event.getY(id), id); - } - break; - } - return true; - } - - private void processTouch(boolean up, float x, float y, int index) { - int[] globalPosition = new int[2]; - getLocationInWindow(globalPosition); - - TouchType action = TouchType.ACTION_MOVE; - if ((!activeTouchEvents.containsKey(index))) { - if (up) return; - ControllerNode node = null; - for (ControllerNode item : controllerNodes) { - Vector2 pos = item.getPosition(); - Vector2 size = item.getSize(); - - float cx = (pos.x - globalPosition[0]); - float cy = (pos.y - globalPosition[1]); - if (item.isVisible() && x > cx && x < cx + size.x && y > cy && y < cy + size.y) { - node = item; - break; - } - } - if (node != null) { - activeTouchEvents.put(index, node); - action = TouchType.ACTION_DOWN; - } else { - return; - } - } - - if (up) action = TouchType.ACTION_UP; - - ControllerNode node = activeTouchEvents.get(index); - Vector2 pos = node.getPosition(); - pos.x -= globalPosition[0]; - pos.y -= globalPosition[1]; - - x -= pos.x; - y -= pos.y; - - node.onTouch(new TouchEvent(x, y, action)); - - if (up) { - activeTouchEvents.remove(index); - } - } - - @Override - public void onViewAdded(View child) { - super.onViewAdded(child); - refreshChildren(); - } - - @Override - public void onViewRemoved(View child) { - super.onViewRemoved(child); - refreshChildren(); - } - - // TODO: Need to replace these methods to prevent Android sending events directly to children - - @Override - public ArrayList getTouchables() { - return new ArrayList<>(); - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - return true; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/ControllerNode.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/ControllerNode.java deleted file mode 100644 index 7d45550a..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/ControllerNode.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.panda3ds.pandroid.view.controller; - -import android.view.View; -import androidx.annotation.NonNull; -import com.panda3ds.pandroid.math.Vector2; - -public interface ControllerNode { - @NonNull - default Vector2 getPosition() { - View view = (View) this; - - int[] position = new int[2]; - view.getLocationInWindow(position); - return new Vector2(position[0], position[1]); - } - - default boolean isVisible() { return ((View) this).isShown(); } - - @NonNull Vector2 getSize(); - void onTouch(TouchEvent event); -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/TouchEvent.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/TouchEvent.java deleted file mode 100644 index 6b82d201..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/TouchEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.panda3ds.pandroid.view.controller; - -public class TouchEvent { - private final TouchType action; - private final float x, y; - - public float getX() { return x; } - public float getY() { return y; } - public TouchType getAction() { return action; } - - public TouchEvent(float x, float y, TouchType action) { - this.x = x; - this.y = y; - this.action = action; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/TouchType.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/TouchType.java deleted file mode 100644 index 69772915..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/TouchType.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.panda3ds.pandroid.view.controller; - -public enum TouchType { - ACTION_DOWN, - ACTION_MOVE, - ACTION_UP -}; \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/listeners/ButtonStateListener.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/listeners/ButtonStateListener.java deleted file mode 100644 index eb5a693a..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/listeners/ButtonStateListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.panda3ds.pandroid.view.controller.listeners; - -import com.panda3ds.pandroid.view.controller.nodes.Button; - -public interface ButtonStateListener { - void onButtonPressedChange(Button button, boolean pressed); -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/listeners/JoystickListener.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/listeners/JoystickListener.java deleted file mode 100644 index 77225223..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/listeners/JoystickListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.panda3ds.pandroid.view.controller.listeners; - -import com.panda3ds.pandroid.view.controller.nodes.Joystick; - -public interface JoystickListener { - void onJoystickAxisChange(Joystick joystick, float axisX, float axisY); -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerItem.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerItem.java deleted file mode 100644 index 6be617b5..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerItem.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.panda3ds.pandroid.view.controller.mapping; - -public enum ControllerItem { - START, - SELECT, - L,R, - GAMEPAD, - DPAD, JOYSTICK -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerMapper.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerMapper.java deleted file mode 100644 index 04cb75c8..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerMapper.java +++ /dev/null @@ -1,202 +0,0 @@ -package com.panda3ds.pandroid.view.controller.mapping; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.DashPathEffect; -import android.graphics.Paint; -import android.graphics.drawable.ColorDrawable; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.widget.FrameLayout; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.lang.Function; -import com.panda3ds.pandroid.math.Vector2; - -public class ControllerMapper extends FrameLayout { - public static int COLOR_DARK = Color.rgb(20, 20, 20); - public static int COLOR_LIGHT = Color.rgb(60, 60, 60); - private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Profile profile; - private View selectedView; - private final Paint selectionPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private int width = -1; - private int height = -1; - private Function changeListener; - - public ControllerMapper(@NonNull Context context) { - this(context, null); - } - - public ControllerMapper(@NonNull Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public ControllerMapper(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - this(context, attrs, defStyleAttr, 0); - } - - public ControllerMapper(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - setBackground(new ColorDrawable(Color.YELLOW)); - float dp = getResources().getDisplayMetrics().density; - - selectionPaint.setColor(Color.RED); - selectionPaint.setStrokeWidth(dp * 2); - selectionPaint.setStyle(Paint.Style.STROKE); - selectionPaint.setPathEffect(new DashPathEffect(new float[]{dp * 10, dp * 10}, 0.0f)); - } - - public void initialize(Function changeListener, Profile profile) { - this.profile = profile; - this.changeListener = changeListener; - - measure(MeasureSpec.EXACTLY, MeasureSpec.EXACTLY); - - new MoveElementListener(ControllerItem.L, findViewById(R.id.button_l)); - new MoveElementListener(ControllerItem.R, findViewById(R.id.button_r)); - new MoveElementListener(ControllerItem.START, findViewById(R.id.button_start)); - new MoveElementListener(ControllerItem.SELECT, findViewById(R.id.button_select)); - new MoveElementListener(ControllerItem.DPAD, findViewById(R.id.dpad)); - new MoveElementListener(ControllerItem.GAMEPAD, findViewById(R.id.gamepad)); - new MoveElementListener(ControllerItem.JOYSTICK, findViewById(R.id.left_analog)); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - drawBackground(canvas); - if (selectedView != null) { - paint.setColor(Color.argb(30, 255, 0, 0)); - drawSelected(canvas, paint); - } - } - - @Override - protected void dispatchDraw(Canvas canvas) { - super.dispatchDraw(canvas); - if (selectedView != null) { - drawSelected(canvas, selectionPaint); - } - } - - public void drawSelected(Canvas canvas, Paint paint) { - int[] absolutePosition = new int[2]; - int[] selectedViewPosition = new int[2]; - - selectedView.getLocationOnScreen(selectedViewPosition); - getLocationOnScreen(absolutePosition); - - int width = selectedView.getLayoutParams().width; - int height = selectedView.getLayoutParams().height; - - int x = selectedViewPosition[0] - absolutePosition[0]; - int y = selectedViewPosition[1] - absolutePosition[1]; - - canvas.drawRect(x, y, x + width, y + height, paint); - } - - - private void drawBackground(Canvas canvas) { - paint.setStyle(Paint.Style.FILL); - - int shapeSize = Math.round(getResources().getDimension(R.dimen.SizePt) * 7.2f); - boolean dark = true; - boolean start = true; - - for (int x = 0; x < width + shapeSize; x += shapeSize) { - for (int y = 0; y < height + shapeSize; y += shapeSize) { - paint.setColor(dark ? COLOR_DARK : COLOR_LIGHT); - canvas.drawRect(x, y, x + shapeSize, y + shapeSize, paint); - dark = !dark; - } - start = !start; - dark = start; - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int measuredWidth = getMeasuredWidth(); - int measuredHeight = getMeasuredHeight(); - - if (measuredWidth != width || measuredHeight != height) { - width = measuredWidth; - height = measuredHeight; - refreshLayout(); - } - } - - public void refreshLayout() { - if (profile != null) { - profile.applyToView(ControllerItem.L, findViewById(R.id.button_l), width, height); - profile.applyToView(ControllerItem.R, findViewById(R.id.button_r), width, height); - profile.applyToView(ControllerItem.START, findViewById(R.id.button_start), width, height); - profile.applyToView(ControllerItem.SELECT, findViewById(R.id.button_select), width, height); - profile.applyToView(ControllerItem.DPAD, findViewById(R.id.dpad), width, height); - profile.applyToView(ControllerItem.GAMEPAD, findViewById(R.id.gamepad), width, height); - profile.applyToView(ControllerItem.JOYSTICK, findViewById(R.id.left_analog), width, height); - } - } - - public int getCurrentWidth() { - return width; - } - - public int getCurrentHeight() { - return height; - } - - public class MoveElementListener implements OnTouchListener { - private final ControllerItem id; - private final View view; - private final Vector2 downPosition = new Vector2(0.0f, 0.0f); - private boolean down = false; - - public MoveElementListener(ControllerItem id, View view) { - this.view = view; - this.id = id; - this.view.setOnTouchListener(this); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouch(View v, MotionEvent event) { - if (!down) { - down = true; - downPosition.set(event.getX() - (view.getLayoutParams().width / 2.0f), event.getY() - (view.getLayoutParams().height / 2.0f)); - } - - int[] viewPosition = new int[2]; - getLocationOnScreen(viewPosition); - - int x = Math.max(0, Math.min(Math.round(event.getRawX() - viewPosition[0] - downPosition.x), width)); - int y = Math.max(0, Math.min(Math.round(event.getRawY() - viewPosition[1] - downPosition.y), height)); - - profile.setLocation(id, x, y, width, height); - profile.applyToView(id, view, width, height); - - if (changeListener != null) { - changeListener.run(id); - } - - selectedView = view; - - if (event.getAction() == MotionEvent.ACTION_UP) { - selectedView = null; - down = false; - invalidate(); - return false; - } else { - return true; - } - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerProfileManager.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerProfileManager.java deleted file mode 100644 index c5b753d2..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/ControllerProfileManager.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.panda3ds.pandroid.view.controller.mapping; - -import android.annotation.SuppressLint; -import android.view.Gravity; - -import com.panda3ds.pandroid.data.GsonConfigParser; -import com.panda3ds.pandroid.utils.Constants; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; - -public class ControllerProfileManager { - - public static final GsonConfigParser parser; - private static final DataModel data; - - static { - parser = new GsonConfigParser(Constants.PREF_SCREEN_CONTROLLER_PROFILES); - data = parser.load(DataModel.class); - if (data.profiles.size() == 0) { - add(makeDefaultProfile()); - } - } - - public static void remove(String id) { - data.profiles.remove(id); - save(); - } - - public static void add(Profile profile) { - data.profiles.put(profile.getId(), profile); - save(); - } - - public static List listAll() { - return new ArrayList<>(data.profiles.values()); - } - - public static int getProfileCount() { - return data.profiles.size(); - } - - public static Profile getDefaultProfile() { - if (data.profiles.containsKey(data.profileId)) { - return data.profiles.get(data.profileId); - } else if (getProfileCount() > 0) { - data.profileId = data.profiles.keySet().iterator().next(); - save(); - return getDefaultProfile(); - } else { - add(makeDefaultProfile()); - return getDefaultProfile(); - } - } - - private static void save() { - if ((!data.profiles.containsKey(data.profileId)) && getProfileCount() > 0) { - data.profileId = data.profiles.keySet().iterator().next(); - } - parser.save(data); - } - - public static Profile makeDefaultProfile() { - return new Profile(UUID.randomUUID().toString(), "Default", createDefaultLayout(), createDefaultLayout()); - } - - @SuppressLint("RtlHardcoded") - public static Layout createDefaultLayout() { - Layout layout = new Layout(); - - layout.setLocation(ControllerItem.L, new Location(39, 145, Gravity.LEFT, true)); - layout.setLocation(ControllerItem.R, new Location(39, 145, Gravity.RIGHT, true)); - - layout.setLocation(ControllerItem.SELECT, new Location(32, 131, Gravity.LEFT, true)); - layout.setLocation(ControllerItem.START, new Location(32, 131, Gravity.RIGHT, true)); - - layout.setLocation(ControllerItem.DPAD, new Location(42, 90, Gravity.LEFT, true)); - layout.setLocation(ControllerItem.JOYSTICK, new Location(74, 45, Gravity.LEFT, true)); - layout.setLocation(ControllerItem.GAMEPAD, new Location(42, 75, Gravity.RIGHT, true)); - - return layout; - } - - public static Profile get(String profile) { - return data.profiles.getOrDefault(profile, null); - } - - public static void setDefaultProfileId(String id) { - if (data.profiles.containsKey(id) && !Objects.equals(id, data.profileId)) { - data.profileId = id; - save(); - } - } - - public static class DataModel { - public final Map profiles = new HashMap<>(); - public String profileId; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Layout.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Layout.java deleted file mode 100644 index a2e5f3ce..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Layout.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.panda3ds.pandroid.view.controller.mapping; - - -import androidx.annotation.NonNull; - -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -public class Layout { - private final Map mapLocations = new HashMap<>(); - - public void setLocation(ControllerItem item, Location location) { - mapLocations.put(item, location); - } - - @NotNull - public Location getLocation(ControllerItem item) { - if (!mapLocations.containsKey(item)) { - setLocation(item, new Location()); - } - return Objects.requireNonNull(mapLocations.get(item)); - } - - @NonNull - @Override - public Layout clone() { - Layout cloned = new Layout(); - for (ControllerItem key : mapLocations.keySet()) { - cloned.setLocation(key, getLocation(key).clone()); - } - return cloned; - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Location.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Location.java deleted file mode 100644 index 1d28758a..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Location.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.panda3ds.pandroid.view.controller.mapping; - -import android.view.Gravity; - -import androidx.annotation.NonNull; - -public class Location { - private float x = 0.0f; - private float y = 0.0f; - private int gravity = Gravity.LEFT; - private boolean visible = false; - - public Location() {} - - public Location(float x, float y, int gravity, boolean visible) { - this.x = x; - this.y = y; - this.gravity = gravity; - this.visible = visible; - } - - public int getGravity() { - return gravity; - } - - public float getX() { - return x; - } - - public float getY() { - return y; - } - - public void setVisible(boolean visible) { - this.visible = visible; - } - - public boolean isVisible() { - return visible; - } - - public void setGravity(int gravity) { - this.gravity = gravity; - } - - public void setPosition(float x, float y) { - this.x = x; - this.y = y; - } - - @NonNull - @Override - public Location clone() { - return new Location(x, y, gravity, visible); - } - -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Profile.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Profile.java deleted file mode 100644 index b537133b..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/mapping/Profile.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.panda3ds.pandroid.view.controller.mapping; - -import android.view.Gravity; -import android.view.View; -import android.widget.FrameLayout; - -import androidx.annotation.NonNull; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.app.PandroidApplication; - -import java.util.UUID; - -public class Profile { - private final String id; - private final Layout landscapeLayout; - private final Layout portraitLayout; - private String name; - - public Profile(String id, String name, Layout landscape, Layout portrait) { - this.id = id; - this.name = name; - this.landscapeLayout = landscape; - this.portraitLayout = portrait; - } - - public void applyToView(ControllerItem id, View view, int viewportWidth, int viewportHeight) { - float pt = view.getResources().getDimension(R.dimen.SizePt); - - int width = view.getLayoutParams().width; - int height = view.getLayoutParams().height; - - Layout layout = getLayoutBySize(viewportWidth, viewportHeight); - - FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, height); - Location location = layout.getLocation(id); - - int x = Math.round(location.getX() * pt); - int y = Math.round(location.getY() * pt); - - params.gravity = location.getGravity() | Gravity.BOTTOM; - params.bottomMargin = Math.max(Math.min(y - (height / 2), viewportHeight - height), 0); - - int gravity = location.getGravity() & Gravity.HORIZONTAL_GRAVITY_MASK; - if (gravity == Gravity.RIGHT) { - params.rightMargin = Math.max(x - (width / 2), 0); - } else { - params.leftMargin = Math.max(x - (width / 2), 0); - } - - view.setVisibility(location.isVisible() ? View.VISIBLE : View.GONE); - view.setLayoutParams(params); - } - - public void setLocation(ControllerItem item, int x, int y, int viewportWidth, int viewportHeight) { - float pt = PandroidApplication.getAppContext().getResources().getDimension(R.dimen.SizePt); - - Layout layout = getLayoutBySize(viewportWidth, viewportHeight); - Location location = layout.getLocation(item); - - y = viewportHeight - y; - - if (x < viewportWidth / 2) { - location.setGravity(Gravity.LEFT); - location.setPosition(x / pt, y / pt); - } else { - x = (viewportWidth / 2) - (x - (viewportWidth / 2)); - location.setGravity(Gravity.RIGHT); - location.setPosition(x / pt, y / pt); - } - } - - - public void setName(String name) { - this.name = name; - } - - public void setVisible(ControllerItem id, boolean visible) { - landscapeLayout.getLocation(id).setVisible(visible); - portraitLayout.getLocation(id).setVisible(visible); - } - - private Layout getLayoutBySize(int width, int height) { - return width > height ? landscapeLayout : portraitLayout; - } - - public String getName() { - return name; - } - - public String getId() { - return id; - } - - @NonNull - @Override - public Profile clone() { - return new Profile(id, name, landscapeLayout.clone(), portraitLayout.clone()); - } - - public boolean isVisible(ControllerItem id) { - return landscapeLayout.getLocation(id).isVisible(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/BasicControllerNode.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/BasicControllerNode.java deleted file mode 100644 index d196c7ec..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/BasicControllerNode.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.panda3ds.pandroid.view.controller.nodes; - -import android.content.Context; -import android.util.AttributeSet; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatTextView; -import com.panda3ds.pandroid.view.controller.ControllerNode; - -public abstract class BasicControllerNode extends AppCompatTextView implements ControllerNode { - public BasicControllerNode(@NonNull Context context) { super(context); } - public BasicControllerNode(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); } - public BasicControllerNode(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/Button.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/Button.java deleted file mode 100644 index 83c38d48..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/Button.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.panda3ds.pandroid.view.controller.nodes; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Canvas; -import android.util.AttributeSet; -import android.view.Gravity; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatTextView; -import com.panda3ds.pandroid.math.Vector2; -import com.panda3ds.pandroid.view.controller.ControllerNode; -import com.panda3ds.pandroid.view.controller.TouchEvent; -import com.panda3ds.pandroid.view.controller.TouchType; -import com.panda3ds.pandroid.view.controller.listeners.ButtonStateListener; - -public class Button extends BasicControllerNode { - private boolean pressed = false; - private int width, height; - - private ButtonStateListener stateListener; - - public Button(@NonNull Context context) { - super(context); - init(); - } - - public Button(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(); - } - - public Button(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - width = getWidth(); - height = getHeight(); - } - - private void init() { - setTextAlignment(TEXT_ALIGNMENT_CENTER); - setGravity(Gravity.CENTER); - } - - public void setStateListener(ButtonStateListener stateListener) { this.stateListener = stateListener; } - - public boolean isPressed() { return pressed; } - - @NonNull - @Override - public Vector2 getSize() { - return new Vector2(width, height); - } - - @Override - public void onTouch(TouchEvent event) { - pressed = event.getAction() != TouchType.ACTION_UP; - setAlpha(pressed ? 0.2f : 1.0f); - if (stateListener != null) { - stateListener.onButtonPressedChange(this, pressed); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/Joystick.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/Joystick.java deleted file mode 100644 index cf33afb6..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/Joystick.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.panda3ds.pandroid.view.controller.nodes; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import androidx.annotation.NonNull; - -import com.panda3ds.pandroid.math.Vector2; -import com.panda3ds.pandroid.view.controller.ControllerNode; -import com.panda3ds.pandroid.view.controller.TouchEvent; -import com.panda3ds.pandroid.view.controller.TouchType; -import com.panda3ds.pandroid.view.controller.listeners.JoystickListener; - -public class Joystick extends BasicControllerNode implements ControllerNode { - private float axisX = 0; - private float axisY = 0; - - private int width = 0; - private int height = 0; - private JoystickListener joystickListener; - - public Joystick(Context context) { this(context, null); } - public Joystick(Context context, AttributeSet attrs) { this(context, attrs, 0); } - - public Joystick(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - paint.setColor(Color.RED); - invalidate(); - } - - private final Paint paint = new Paint(); - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - } - - @Override - public void onDrawForeground(Canvas canvas) { - width = getWidth(); - height = getHeight(); - - int analogIconSize = width - getPaddingLeft(); - - float middleIconSize = analogIconSize / 2.0f; - float middle = width / 2.0f; - - float maxDistance = (middle - middleIconSize) * 0.9f; - - float tx = maxDistance * axisX; - float ty = maxDistance * axisY; - - float radius = Vector2.distance(0.0f, 0.0f, Math.abs(tx), Math.abs(ty)); - radius = Math.min(maxDistance, radius); - - double deg = Math.atan2(ty, tx) * (180.0 / Math.PI); - float rx = (float) (radius * Math.cos(2 * Math.PI * deg / 360.0)); - float ry = (float) (radius * Math.sin(2 * Math.PI * deg / 360.0)); - - axisX = Math.max(-1.0f, Math.min(1.0f, axisX)); - axisY = Math.max(-1.0f, Math.min(1.0f, axisY)); - - float x = middle - middleIconSize + rx; - float y = middle - middleIconSize + ry; - - Drawable foreground = getForeground(); - if (foreground != null) { - foreground.setBounds((int) x, (int) y, (int) (x + analogIconSize), (int) (y + analogIconSize)); - foreground.draw(canvas); - } else { - canvas.drawOval(x, y, x + analogIconSize, y + analogIconSize, paint); - } - } - - public Vector2 getAxis() { return new Vector2(Math.max(-1.0f, Math.min(1.0f, axisX)), Math.max(-1.0f, Math.min(1.0f, axisY))); } - - public void setJoystickListener(JoystickListener joystickListener) { this.joystickListener = joystickListener; } - - @NonNull - @Override - public Vector2 getSize() { - return new Vector2(width, height); - } - - @Override - public void onTouch(TouchEvent event) { - float middle = width / 2.0f; - - float x = event.getX(); - float y = event.getY(); - - x = Math.max(0, Math.min(middle * 2, x)); - y = Math.max(0, Math.min(middle * 2, y)); - - axisX = ((x - middle) / middle); - axisY = ((y - middle) / middle); - - if (event.getAction() == TouchType.ACTION_UP) { - axisX = 0; - axisY = 0; - } - - if (joystickListener != null) { - joystickListener.onJoystickAxisChange(this, axisX, axisY); - } - - invalidate(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/TouchScreenNodeImpl.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/TouchScreenNodeImpl.java deleted file mode 100644 index bf51d4fe..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/controller/nodes/TouchScreenNodeImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.panda3ds.pandroid.view.controller.nodes; - -import android.graphics.Rect; -import android.view.View; - -import com.panda3ds.pandroid.AlberDriver; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.view.controller.ControllerNode; -import com.panda3ds.pandroid.view.controller.TouchEvent; -import com.panda3ds.pandroid.view.controller.TouchType; -import com.panda3ds.pandroid.view.renderer.ConsoleRenderer; - -public interface TouchScreenNodeImpl extends ControllerNode { - default void onTouchScreenPress(ConsoleRenderer renderer, TouchEvent event) { - View view = (View) this; - boolean hasDownEvent = view.getTag(R.id.TagEventHasDown) != null && (boolean) view.getTag(R.id.TagEventHasDown); - - Rect bounds = renderer.getLayout().getBottomDisplayBounds(); - - if (event.getX() >= bounds.left && event.getY() >= bounds.top && event.getX() <= bounds.right && event.getY() <= bounds.bottom) { - int x = (int) (event.getX() - bounds.left); - int y = (int) (event.getY() - bounds.top); - - x = Math.round((x / (float) bounds.width()) * 320); - y = Math.round((y / (float) bounds.height()) * 240); - - AlberDriver.TouchScreenDown(x, y); - - view.setTag(R.id.TagEventHasDown, true); - } - - if (hasDownEvent && event.getAction() == TouchType.ACTION_UP) { - AlberDriver.TouchScreenUp(); - view.setTag(R.id.TagEventHasDown, false); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Bounds.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Bounds.java deleted file mode 100644 index fa6ef3c3..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Bounds.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.panda3ds.pandroid.view.ds; - -import android.graphics.Rect; - -class Bounds { - public int left = 0; - public int right = 0; - public int top = 0; - public int bottom = 0; - - public void normalize() { - left = Math.abs(left); - right = Math.abs(right); - top = Math.abs(top); - bottom = Math.abs(bottom); - } - - public void applyWithAspect(Rect rect, int width, double aspectRatio) { - normalize(); - rect.set(left, top, width-right, (int) Math.round((width-right-left)*aspectRatio)+top); - } - - public void apply(Rect rect, int width, int height) { - normalize(); - rect.set(left, top, width-right, height-bottom); - } - - public void move(int x, int y) { - left += x; - right -= x; - - top += y; - bottom -= y; - normalize(); - } - - public void fixOverlay(int width, int height, int size) { - if (left > (width - right) - size) { - right = (width - left) - size; - } - - if (top > (height - bottom) - size) { - bottom = (height - top) - size; - } - - normalize(); - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsEditorView.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsEditorView.java deleted file mode 100644 index 7ae0ec83..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsEditorView.java +++ /dev/null @@ -1,362 +0,0 @@ -package com.panda3ds.pandroid.view.ds; - -import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.DashPathEffect; -import android.graphics.Paint; -import android.graphics.Rect; -import android.graphics.drawable.ColorDrawable; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.FrameLayout; -import android.widget.LinearLayout; - -import androidx.appcompat.widget.AppCompatSpinner; -import androidx.appcompat.widget.AppCompatTextView; - -import com.google.android.material.checkbox.MaterialCheckBox; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.math.Vector2; -import com.panda3ds.pandroid.utils.CompatUtils; -import com.panda3ds.pandroid.utils.Constants; - -@SuppressLint("ViewConstructor") -public class DsEditorView extends FrameLayout { - private final float SIZE_DP; - - private final Paint selectionPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private final DsLayout layout; - private int width = 1, height = 1; - private final LinearLayout gravityAnchor; - private final LinearLayout aspectRatioFixLayout; - private final LinearLayout modeSelectorLayout; - private final AppCompatSpinner modeSelector; - private final PointView spacePoint; - private final PointView topDisplay; - private final PointView bottomDisplay; - private final PointView topDisplayResizer; - private final PointView bottomDisplayResizer; - - @SuppressLint("ClickableViewAccessibility") - public DsEditorView(Context context, int index) { - super(context); - layout = (DsLayout) DsLayoutManager.createLayout(index); - SIZE_DP = CompatUtils.applyDimensions(TypedValue.COMPLEX_UNIT_DIP, 1); - int colorBottomSelection = CompatUtils.resolveColor(context, androidx.appcompat.R.attr.colorPrimary); - int colorTopSelection = CompatUtils.resolveColor(context, com.google.android.material.R.attr.colorAccent); - - selectionPaint.setColor(colorTopSelection); - selectionPaint.setStrokeWidth(SIZE_DP * 2); - selectionPaint.setPathEffect(new DashPathEffect(new float[] { SIZE_DP * 10, SIZE_DP * 10 }, 0.0f)); - selectionPaint.setStyle(Paint.Style.STROKE); - - layout.setTopDisplaySourceSize(Constants.N3DS_WIDTH, Constants.N3DS_HALF_HEIGHT); - layout.setBottomDisplaySourceSize(Constants.N3DS_WIDTH - 40 - 40, Constants.N3DS_HALF_HEIGHT); - setBackgroundColor(Color.argb(2, 0, 0, 0)); - - LayoutInflater inflater = LayoutInflater.from(context); - - gravityAnchor = (LinearLayout) inflater.inflate(R.layout.ds_editor_gravity_anchor, this, false); - gravityAnchor.findViewById(R.id.up).setOnClickListener(v -> { - layout.getCurrentModel().gravity = Gravity.TOP; - refreshLayout(); - }); - - gravityAnchor.findViewById(R.id.center).setOnClickListener(v -> { - layout.getCurrentModel().gravity = Gravity.CENTER; - refreshLayout(); - }); - - gravityAnchor.findViewById(R.id.down).setOnClickListener(v -> { - layout.getCurrentModel().gravity = Gravity.BOTTOM; - refreshLayout(); - }); - - gravityAnchor.findViewById(R.id.revert).setOnClickListener(v -> { - layout.getCurrentModel().reverse = !layout.getCurrentModel().reverse; - refreshLayout(); - }); - - { - modeSelectorLayout = (LinearLayout) inflater.inflate(R.layout.ds_editor_spinner, this, false); - ArrayAdapter spinnerAdapter = new ArrayAdapter<>(getContext(), R.layout.ds_editor_spinner_label); - spinnerAdapter.addAll("Single", "Relative", "Absolute"); - modeSelector = modeSelectorLayout.findViewById(R.id.spinner); - modeSelector.setAdapter(spinnerAdapter); - modeSelector.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - layout.getCurrentModel().mode = Mode.values()[position]; - refreshLayout(); - } - - @Override - public void onNothingSelected(AdapterView parent) {} - }); - } - - aspectRatioFixLayout = (LinearLayout) inflater.inflate(R.layout.ds_editor_lock_aspect, this, false); - ((MaterialCheckBox) aspectRatioFixLayout.findViewById(R.id.checkbox)).setOnCheckedChangeListener((buttonView, checked) -> { - layout.getCurrentModel().lockAspect = checked; - refreshPoints(); - }); - - spacePoint = new PointView(); - spacePoint.setColor(CompatUtils.resolveColor(context, com.google.android.material.R.attr.colorOnPrimary), colorTopSelection); - spacePoint.setOnTouchListener((view, motion) -> { - layout.getCurrentModel().space = (motion.getX() + spacePoint.x()) / (float) width; - refreshPoints(); - return true; - }); - - spacePoint.setLayoutGravity(Gravity.START | Gravity.CENTER); - - setOnClickListener(v -> { - if (layout.getCurrentModel().mode == Mode.SINGLE) { - layout.getCurrentModel().onlyTop = !layout.getCurrentModel().onlyTop; - refreshPoints(); - } - }); - - topDisplay = new PointView(); - topDisplay.setText(R.string.top_display); - topDisplay.setOnTouchListener(new DisplayTouchEvent(true)); - topDisplay.setTextColor(colorTopSelection); - topDisplay.setBackground(new SelectionDrawable(colorTopSelection)); - - bottomDisplay = new PointView(); - bottomDisplay.setText(R.string.bottom_display); - bottomDisplay.setOnTouchListener(new DisplayTouchEvent(false)); - bottomDisplay.setTextColor(colorBottomSelection); - bottomDisplay.setBackground(new SelectionDrawable(colorBottomSelection)); - - topDisplayResizer = new PointView(); - topDisplayResizer.setColor(0, colorTopSelection); - topDisplayResizer.setOnTouchListener(new DisplayResizeTouchEvent(true)); - - bottomDisplayResizer = new PointView(); - bottomDisplayResizer.setColor(0, colorBottomSelection); - bottomDisplayResizer.setOnTouchListener(new DisplayResizeTouchEvent(false)); - } - - @Override - public void draw(Canvas canvas) { - super.draw(canvas); - - if (this.width != getWidth() || this.height != getHeight()) { - this.width = getWidth(); - this.height = getHeight(); - refreshLayout(); - } - } - - private void refreshPoints() { - Model data = layout.getCurrentModel(); - data.preferredTop.fixOverlay(width, height, (int) (SIZE_DP * 5)); - data.preferredBottom.fixOverlay(width, height, (int) (SIZE_DP * 30)); - layout.update(width, height); - Rect bottomDisplay = layout.getBottomDisplayBounds(); - Rect topDisplay = layout.getTopDisplayBounds(); - - switch (data.mode) { - case RELATIVE: { - if (width > height) { - Rect primaryDisplay = data.reverse ? bottomDisplay : topDisplay; - data.space = primaryDisplay.width() / (float) width; - spacePoint.setCenterPosition(primaryDisplay.width(), (int) (SIZE_DP * 15)); - spacePoint.setText(String.valueOf((int) (data.space * 100))); - } - - break; - } - - case SINGLE: - case ABSOLUTE: break; - } - - this.topDisplay.setSize(topDisplay.width(), topDisplay.height()); - this.topDisplay.setPosition(topDisplay.left, topDisplay.top); - - this.bottomDisplay.setSize(bottomDisplay.width(), bottomDisplay.height()); - this.bottomDisplay.setPosition(bottomDisplay.left, bottomDisplay.top); - - if (data.lockAspect) { - topDisplayResizer.setCenterPosition(topDisplay.right, topDisplay.top + (topDisplay.height() / 2)); - bottomDisplayResizer.setCenterPosition(bottomDisplay.right, bottomDisplay.top + (bottomDisplay.height() / 2)); - } else { - topDisplayResizer.setCenterPosition(topDisplay.right, topDisplay.bottom); - bottomDisplayResizer.setCenterPosition(bottomDisplay.right, bottomDisplay.bottom); - } - - invalidate(); - } - - private void refreshLayout() { - removeAllViews(); - layout.update(width, height); - boolean landscape = width > height; - addView(topDisplay); - addView(bottomDisplay); - - gravityAnchor.setOrientation(LinearLayout.HORIZONTAL); - addView(modeSelectorLayout, new FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER)); - switch (layout.getCurrentModel().mode) { - case RELATIVE: { - addView(gravityAnchor, new FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.CENTER | Gravity.TOP)); - if (landscape) { - addView(spacePoint); - } - - break; - } - - case ABSOLUTE: { - addView(aspectRatioFixLayout, new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.CENTER | Gravity.TOP)); - addView(topDisplayResizer); - addView(bottomDisplayResizer); - - break; - } - - case SINGLE: { - addView(aspectRatioFixLayout, new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.CENTER | Gravity.TOP)); - break; - } - } - ((MaterialCheckBox) aspectRatioFixLayout.findViewById(R.id.checkbox)).setChecked(layout.getCurrentModel().lockAspect); - - modeSelector.setSelection(layout.getCurrentModel().mode.ordinal()); - gravityAnchor.findViewById(R.id.revert).setRotation(landscape ? 0 : 90); - refreshPoints(); - } - - private class PointView extends AppCompatTextView { - public PointView() { - super(DsEditorView.this.getContext()); - setLayoutParams(new FrameLayout.LayoutParams((int) (SIZE_DP * 30), (int) (SIZE_DP * 30))); - setBackgroundResource(R.drawable.medium_card_background); - setGravity(Gravity.CENTER); - this.setFocusable(true); - this.setClickable(true); - } - - public int x() { - return ((LayoutParams) getLayoutParams()).leftMargin; - } - - public int y() { - return ((LayoutParams) getLayoutParams()).topMargin; - } - - public int width() { - return ((LayoutParams) getLayoutParams()).width; - } - - public void setColor(int text, int background) { - setTextColor(text); - setBackgroundTintList(ColorStateList.valueOf(background)); - } - - public void setSize(int width, int height) { - LayoutParams params = (LayoutParams) getLayoutParams(); - params.width = Math.max(0, width); - params.height = Math.max(0, height); - setLayoutParams(params); - } - - public void setPosition(int x, int y) { - LayoutParams params = (LayoutParams) getLayoutParams(); - params.leftMargin = x; - params.topMargin = y; - setLayoutParams(params); - } - - public void setCenterPosition(int x, int y) { - int middle = this.width() / 2; - setPosition(Math.max(-middle, Math.min(x - middle, width - middle)), Math.max(-middle, Math.min(y - middle, height - middle))); - } - - public void setLayoutGravity(int gravity) { - FrameLayout.LayoutParams params = (LayoutParams) getLayoutParams(); - params.gravity = gravity; - setLayoutParams(params); - } - } - - private class DisplayTouchEvent implements OnTouchListener { - private final boolean topScreen; - private Vector2 downEvent = null; - - private DisplayTouchEvent(boolean topScreen) { - this.topScreen = topScreen; - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - Bounds preferred = topScreen ? layout.getCurrentModel().preferredTop : layout.getCurrentModel().preferredBottom; - if (layout.getCurrentModel().mode == Mode.ABSOLUTE && event.getAction() != MotionEvent.ACTION_UP) { - if (downEvent == null) { - downEvent = new Vector2(event.getRawX(), event.getRawY()); - return true; - } - - preferred.move((int) (event.getRawX() - downEvent.x), (int) (event.getRawY() - downEvent.y)); - downEvent.set(event.getRawX(), event.getRawY()); - refreshPoints(); - return true; - } else if (layout.getCurrentModel().mode == Mode.SINGLE && event.getAction() == MotionEvent.ACTION_UP) { - callOnClick(); - } - downEvent = null; - return false; - } - } - - private class DisplayResizeTouchEvent implements OnTouchListener { - private final boolean topScreen; - - private DisplayResizeTouchEvent(boolean topScreen) { - this.topScreen = topScreen; - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - Bounds preferred = topScreen ? layout.getCurrentModel().preferredTop : layout.getCurrentModel().preferredBottom; - if (event.getAction() != MotionEvent.ACTION_UP) { - preferred.right = (int) (width - (((PointView) v).x() + event.getX())); - preferred.bottom = (int) (height - (((PointView) v).y() + event.getY())); - refreshPoints(); - return true; - } - - return false; - } - } - - private class SelectionDrawable extends ColorDrawable { - private final Paint solidPaint = new Paint(); - - public SelectionDrawable(int color) { - super(color); - } - - @Override - public void draw(Canvas canvas) { - int color = this.getColor(); - selectionPaint.setColor(color); - solidPaint.setColor(Color.argb(65, Color.red(color), Color.green(color), Color.blue(color))); - canvas.drawRect(this.getBounds(), solidPaint); - canvas.drawRect(this.getBounds(), selectionPaint); - } - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsLayout.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsLayout.java deleted file mode 100644 index f59a5b29..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsLayout.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.panda3ds.pandroid.view.ds; - -import android.graphics.Rect; -import android.view.Gravity; - -import com.panda3ds.pandroid.math.Vector2; -import com.panda3ds.pandroid.view.renderer.layout.ConsoleLayout; - -class DsLayout implements ConsoleLayout { - private final Rect topDisplay = new Rect(); - private final Rect bottomDisplay = new Rect(); - - private final Vector2 screenSize = new Vector2(0, 0); - private final Vector2 sourceTop = new Vector2(0, 0); - private final Vector2 sourceBottom = new Vector2(0, 0); - private final Model[] modes = new Model[2]; - - public DsLayout(Model landscape, Model portrait) { - modes[0] = landscape; - modes[1] = portrait; - } - - public DsLayout() { - this(new Model(), new Model()); - } - - @Override - public void update(int screenWidth, int screenHeight) { - screenSize.set(screenWidth, screenHeight); - update(); - } - - @Override - public void setBottomDisplaySourceSize(int width, int height) { - sourceBottom.set(width, height); - update(); - } - - @Override - public void setTopDisplaySourceSize(int width, int height) { - sourceTop.set(width, height); - update(); - } - - @Override - public Rect getBottomDisplayBounds() { - return bottomDisplay; - } - - @Override - public Rect getTopDisplayBounds() { - return topDisplay; - } - - public void update() { - Model data = getCurrentModel(); - Mode mode = data.mode; - switch (mode) { - case RELATIVE: - relative(data); - break; - case SINGLE: - single(data); - break; - case ABSOLUTE: - absolute(data); - break; - } - } - - private void absolute(Model data) { - if (data.lockAspect) { - data.preferredTop.applyWithAspect(topDisplay, (int) screenSize.x, (double) sourceTop.y / sourceTop.x); - data.preferredBottom.applyWithAspect(bottomDisplay, (int) screenSize.x, (double) sourceBottom.y / sourceBottom.x); - } else { - data.preferredTop.apply(topDisplay, (int) screenSize.x, (int) screenSize.y); - data.preferredBottom.apply(bottomDisplay, (int) screenSize.x, (int) screenSize.y); - } - } - - private void single(Model data) { - Vector2 source = data.onlyTop ? sourceTop : sourceBottom; - Rect dest = data.onlyTop ? topDisplay : bottomDisplay; - - if (data.lockAspect) { - int x = 0, y = 0; - int width = (int) ((screenSize.y / source.y) * source.x); - int height; - - if (width > screenSize.x) { - height = (int) ((screenSize.x / source.x) * source.y); - width = (int) screenSize.x; - y = (int) ((screenSize.y - height) / 2); - } else { - height = (int) screenSize.y; - x = (int) ((screenSize.x - width) / 2); - } - dest.set(x, y, x + width, y + height); - } else { - dest.set(0, 0, (int) screenSize.x, (int) screenSize.y); - } - (data.onlyTop ? bottomDisplay : topDisplay).set(0, 0, 0, 0); - } - - // Relative layout: Organize screen position based on gravity and space, the space determined by the top screen size in landscape mode - private void relative(Model data) { - int screenWidth = (int) screenSize.x; - int screenHeight = (int) screenSize.y; - - Vector2 topSourceSize = this.sourceTop; - Vector2 bottomSourceSize = this.sourceBottom; - - Rect topDisplay = this.topDisplay; - Rect bottomDisplay = this.bottomDisplay; - - if (data.reverse) { - topSourceSize = this.sourceBottom; - bottomSourceSize = this.sourceTop; - - topDisplay = this.bottomDisplay; - bottomDisplay = this.topDisplay; - } - - if (screenWidth > screenHeight) { - int topDisplayWidth = (int) ((screenHeight / topSourceSize.y) * topSourceSize.x); - int topDisplayHeight = screenHeight; - - if (topDisplayWidth > (screenWidth * data.space)) { - topDisplayWidth = (int) (screenWidth * data.space); - topDisplayHeight = (int) ((topDisplayWidth / topSourceSize.x) * topSourceSize.y); - } - - int bottomDisplayHeight = (int) (((screenWidth - topDisplayWidth) / bottomSourceSize.x) * bottomSourceSize.y); - - topDisplay.set(0, 0, topDisplayWidth, topDisplayHeight); - bottomDisplay.set(topDisplayWidth, 0, topDisplayWidth + (screenWidth - topDisplayWidth), bottomDisplayHeight); - - switch (data.gravity) { - case Gravity.CENTER: { - bottomDisplay.offset(0, (screenHeight - bottomDisplay.height()) / 2); - topDisplay.offset(0, (screenHeight - topDisplay.height()) / 2); - break; - } - - case Gravity.BOTTOM: { - bottomDisplay.offset(0, (screenHeight - bottomDisplay.height())); - topDisplay.offset(0, (screenHeight - topDisplay.height())); - break; - } - } - - } else { - int topScreenHeight = (int) ((screenWidth / topSourceSize.x) * topSourceSize.y); - topDisplay.set(0, 0, screenWidth, topScreenHeight); - - int bottomDisplayHeight = (int) ((screenWidth / bottomSourceSize.x) * bottomSourceSize.y); - int bottomDisplayWidth = screenWidth; - int bottomDisplayX = 0; - - if (topScreenHeight + bottomDisplayHeight > screenHeight) { - bottomDisplayHeight = (screenHeight - topScreenHeight); - bottomDisplayWidth = (int) ((bottomDisplayHeight / bottomSourceSize.y) * bottomSourceSize.x); - bottomDisplayX = (screenWidth - bottomDisplayX) / 2; - } - - topDisplay.set(0, 0, screenWidth, topScreenHeight); - bottomDisplay.set(bottomDisplayX, topScreenHeight, bottomDisplayX + bottomDisplayWidth, topScreenHeight + bottomDisplayHeight); - } - } - - public Model getCurrentModel() { - return screenSize.x > screenSize.y ? modes[0] : modes[1]; - } - -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsLayoutManager.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsLayoutManager.java deleted file mode 100644 index 6b044626..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/DsLayoutManager.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.panda3ds.pandroid.view.ds; - -import com.panda3ds.pandroid.data.config.GlobalConfig; -import com.panda3ds.pandroid.view.renderer.layout.ConsoleLayout; - -import java.util.ArrayList; - -public class DsLayoutManager { - private static final DataModel data; - - static { - data = GlobalConfig.getExtra(GlobalConfig.KEY_DS_LAYOUTS, DataModel.class); - if (data.models.size() == 0) { - setupBasicModels(); - } - } - - private static void setupBasicModels() { - Model model1 = new Model(); - - Model model2 = new Model(); - model2.mode = Mode.SINGLE; - model2.onlyTop = false; - - Model model3 = new Model(); - model3.mode = Mode.SINGLE; - model3.onlyTop = true; - - data.models.add(new Model[] {model1, model1.clone()}); - data.models.add(new Model[] {model2, model2.clone()}); - data.models.add(new Model[] {model3, model3.clone()}); - - save(); - } - - public static synchronized void save() { - GlobalConfig.putExtra(GlobalConfig.KEY_DS_LAYOUTS, data); - } - - public static int getLayoutCount() { - return data.models.size(); - } - - public static ConsoleLayout createLayout(int index) { - index = Math.min(getLayoutCount() - 1, index); - return new DsLayout(data.models.get(index)[0], data.models.get(index)[1]); - } - - private static class DataModel { - private final ArrayList models = new ArrayList<>(); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Mode.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Mode.java deleted file mode 100644 index 0a31f62d..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Mode.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.panda3ds.pandroid.view.ds; - -enum Mode { - SINGLE, - RELATIVE, - ABSOLUTE -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Model.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Model.java deleted file mode 100644 index 84209ba4..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/ds/Model.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.panda3ds.pandroid.view.ds; - -import android.util.Log; -import android.view.Gravity; - -import androidx.annotation.NonNull; - -import com.panda3ds.pandroid.utils.Constants; - -class Model implements Cloneable { - public Mode mode = Mode.RELATIVE; - public final Bounds preferredTop = new Bounds(); - public final Bounds preferredBottom = new Bounds(); - public boolean reverse = false; - public boolean onlyTop = true; - public float space = 0.6f; - public int gravity = Gravity.CENTER; - public boolean lockAspect = true; - - @NonNull - @Override - public Model clone() { - try { - return (Model) super.clone(); - } catch (Exception e) { - Log.e(Constants.LOG_TAG, "Error on clone DsModel!", e); - return new Model(); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GameAdapter.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GameAdapter.java deleted file mode 100644 index 3a07fbf7..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GameAdapter.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.panda3ds.pandroid.view.gamesgrid; - -import android.view.LayoutInflater; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.lang.Function; - -import java.util.ArrayList; -import java.util.List; - -class GameAdapter extends RecyclerView.Adapter { - private final ArrayList games = new ArrayList<>(); - private final Function clickListener; - private final Function longClickListener; - - GameAdapter(Function clickListener, Function longClickListener) { - this.clickListener = clickListener; - this.longClickListener = longClickListener; - } - - @NonNull - @Override - public ItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.holder_game, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemHolder holder, int position) { - holder.itemView.setOnClickListener(v -> clickListener.run(games.get(position))); - holder.itemView.setOnLongClickListener(v -> { - longClickListener.run(games.get(position)); - return false; - }); - holder.apply(games.get(position)); - } - - public void replace(List games) { - int oldCount = getItemCount(); - this.games.clear(); - notifyItemRangeRemoved(0, oldCount); - this.games.addAll(games); - notifyItemRangeInserted(0, getItemCount()); - } - - @Override - public int getItemCount() { - return games.size(); - } - -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GameIconView.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GameIconView.java deleted file mode 100644 index e73d8d08..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GameIconView.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.panda3ds.pandroid.view.gamesgrid; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatImageView; - -public class GameIconView extends AppCompatImageView { - public GameIconView(@NonNull Context context) { - super(context); - } - - public GameIconView(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - public GameIconView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int size = getMeasuredWidth(); - setMeasuredDimension(size, size); - } - - @Override - public void setImageBitmap(Bitmap bm) { - super.setImageBitmap(bm); - Drawable bitmapDrawable = getDrawable(); - if (bitmapDrawable instanceof BitmapDrawable) { - bitmapDrawable.setFilterBitmap(false); - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GamesGridView.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GamesGridView.java deleted file mode 100644 index ddb192aa..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GamesGridView.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.panda3ds.pandroid.view.gamesgrid; - -import android.content.Context; -import android.util.AttributeSet; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; - -import com.panda3ds.pandroid.data.game.GameMetadata; -import com.panda3ds.pandroid.lang.Function; -import com.panda3ds.pandroid.utils.GameUtils; -import com.panda3ds.pandroid.view.recycler.AutoFitGridLayout; - -import java.util.List; - -public class GamesGridView extends RecyclerView { - private final GameAdapter adapter; - private Function longClickListener = null; - - public GamesGridView(@NonNull Context context) { - this(context, null); - } - - public GamesGridView(@NonNull Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public GamesGridView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - setLayoutManager(new AutoFitGridLayout(getContext(), 170)); - setAdapter(adapter = new GameAdapter(this::onClickGame, this::onLongClickGame)); - } - - public void setItemLongClick(Function longClickListener) { - this.longClickListener = longClickListener; - } - - private void onClickGame(GameMetadata game) { - GameUtils.launch(getContext(), game); - } - - private void onLongClickGame(GameMetadata game) { - if (longClickListener != null) { - longClickListener.run(game); - } - } - - public void setGameList(List games) { - adapter.replace(games); - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/ItemHolder.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/ItemHolder.java deleted file mode 100644 index 2d55964f..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/ItemHolder.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.panda3ds.pandroid.view.gamesgrid; - -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.appcompat.widget.AppCompatTextView; -import androidx.recyclerview.widget.RecyclerView; -import com.panda3ds.pandroid.R; -import com.panda3ds.pandroid.data.game.GameMetadata; - -class ItemHolder extends RecyclerView.ViewHolder { - public ItemHolder(@NonNull View itemView) { - super(itemView); - } - - public void apply(GameMetadata game) { - ((AppCompatTextView) itemView.findViewById(R.id.title)) - .setText(game.getTitle()); - ((GameIconView) itemView.findViewById(R.id.icon)) - .setImageBitmap(game.getIcon()); - ((AppCompatTextView) itemView.findViewById(R.id.description)) - .setText(game.getPublisher()); - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/AutoFitGridLayout.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/AutoFitGridLayout.java deleted file mode 100644 index 26f80adb..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/AutoFitGridLayout.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.panda3ds.pandroid.view.recycler; - -import android.content.Context; -import android.util.TypedValue; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -public final class AutoFitGridLayout extends GridLayoutManager { - private final int iconSize; - private final Context context; - - public AutoFitGridLayout(Context context, int iconSize) { - super(context, 1); - - this.iconSize = iconSize; - this.context = context; - } - - @Override - public void onMeasure(@NonNull RecyclerView.Recycler recycler, @NonNull RecyclerView.State state, int widthSpec, int heightSpec) { - super.onMeasure(recycler, state, widthSpec, heightSpec); - int width = View.MeasureSpec.getSize(widthSpec); - int iconSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this.iconSize, context.getResources().getDisplayMetrics()); - int iconCount = Math.max(1, width / iconSize); - - if (getSpanCount() != iconCount) { - setSpanCount(iconCount); - } - } -} \ No newline at end of file diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/SimpleListAdapter.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/SimpleListAdapter.java deleted file mode 100644 index 7d4fa7c3..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/SimpleListAdapter.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.panda3ds.pandroid.view.recycler; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; - -public class SimpleListAdapter extends RecyclerView.Adapter { - private final ArrayList list = new ArrayList<>(); - private final Binder binder; - private final int layoutId; - - public SimpleListAdapter(@LayoutRes int layoutId, Binder binder) { - this.layoutId = layoutId; - this.binder = binder; - } - - @NonNull - @Override - public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new Holder(LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull Holder holder, int position) { - binder.bind(position, list.get(position), holder.getView()); - } - - public void addAll(T... items) { - addAll(Arrays.asList(items)); - } - - public void addAll(List items) { - int index = list.size(); - this.list.addAll(items); - notifyItemRangeInserted(index, getItemCount() - index); - } - - public void clear() { - int count = getItemCount(); - list.clear(); - notifyItemRangeRemoved(0, count); - } - - public void sort(Comparator comparator) { - list.sort(comparator); - notifyItemRangeChanged(0, getItemCount()); - } - - @Override - public int getItemCount() { - return list.size(); - } - - public interface Binder { - void bind(int position, I item, View view); - } - - public static class Holder extends RecyclerView.ViewHolder { - public Holder(@NonNull View itemView) { - super(itemView); - } - - public View getView() { - return itemView; - } - } -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/renderer/ConsoleRenderer.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/renderer/ConsoleRenderer.java deleted file mode 100644 index d5c99e8d..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/renderer/ConsoleRenderer.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.panda3ds.pandroid.view.renderer; - -import com.panda3ds.pandroid.view.renderer.layout.ConsoleLayout; - -public interface ConsoleRenderer { - void setLayout(ConsoleLayout layout); - ConsoleLayout getLayout(); - String getBackendName(); -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/renderer/layout/ConsoleLayout.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/renderer/layout/ConsoleLayout.java deleted file mode 100644 index 7ec00974..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/renderer/layout/ConsoleLayout.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.panda3ds.pandroid.view.renderer.layout; - -import android.graphics.Rect; - -public interface ConsoleLayout { - void update(int screenWidth, int screenHeight); - - void setBottomDisplaySourceSize(int width, int height); - void setTopDisplaySourceSize(int width, int height); - - Rect getBottomDisplayBounds(); - Rect getTopDisplayBounds(); -} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/utils/PerformanceView.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/utils/PerformanceView.java deleted file mode 100644 index 7688b44e..00000000 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/utils/PerformanceView.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.panda3ds.pandroid.view.utils; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.text.Html; -import android.util.AttributeSet; -import android.util.TypedValue; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatTextView; - -import com.panda3ds.pandroid.data.config.GlobalConfig; -import com.panda3ds.pandroid.utils.PerformanceMonitor; - -public class PerformanceView extends AppCompatTextView { - private boolean running = false; - - public PerformanceView(@NonNull Context context) { - this(context, null); - } - - public PerformanceView(@NonNull Context context, @Nullable AttributeSet attrs) { - this(context, attrs,0); - } - - public PerformanceView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); - setPadding(padding,padding,padding,padding); - setTextColor(Color.WHITE); - setShadowLayer(padding,0,0,Color.BLACK); - } - - public void refresh() { - running = isShown(); - if (!running) { - return; - } - - String debug = ""; - - // Calculate total memory in MB and the current memory usage - int memoryTotalMb = (int) Math.round(PerformanceMonitor.getTotalMemory() / (1024.0 * 1024.0)); - int memoryUsageMb = (int) Math.round(PerformanceMonitor.getUsedMemory() / (1024.0 * 1024.0)); - - debug += "FPS: " + PerformanceMonitor.getFps() + "
"; - debug += "RAM: " + Math.round(((float) memoryUsageMb / memoryTotalMb) * 100) + "% (" + memoryUsageMb + "MB/" + memoryTotalMb + "MB)
"; - debug += "BACKEND: " + PerformanceMonitor.getBackend() + (GlobalConfig.get(GlobalConfig.KEY_SHADER_JIT) ? " + JIT" : "") + "
"; - setText(Html.fromHtml(debug, Html.FROM_HTML_MODE_COMPACT)); - postDelayed(this::refresh, 250); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - if (!running) { - refresh(); - } - } -} diff --git a/src/pandroid/app/src/main/jniLibs/.gitignore b/src/pandroid/app/src/main/jniLibs/.gitignore deleted file mode 100644 index 0b469178..00000000 --- a/src/pandroid/app/src/main/jniLibs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Prebuilt Alber libraries will be placed in this directory, but we don't want to push them to the repo -libAlber.so \ No newline at end of file diff --git a/src/pandroid/app/src/main/jniLibs/arm64-v8a/.gitkeep b/src/pandroid/app/src/main/jniLibs/arm64-v8a/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pandroid/app/src/main/jniLibs/x86_64/.gitkeep b/src/pandroid/app/src/main/jniLibs/x86_64/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pandroid/app/src/main/res/color/bottom_navigation_indicator_tint.xml b/src/pandroid/app/src/main/res/color/bottom_navigation_indicator_tint.xml deleted file mode 100644 index e0fc9112..00000000 --- a/src/pandroid/app/src/main/res/color/bottom_navigation_indicator_tint.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/color/red_color.xml b/src/pandroid/app/src/main/res/color/red_color.xml deleted file mode 100644 index c42336f5..00000000 --- a/src/pandroid/app/src/main/res/color/red_color.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/color/text_secondary_dark.xml b/src/pandroid/app/src/main/res/color/text_secondary_dark.xml deleted file mode 100644 index 53a9cd15..00000000 --- a/src/pandroid/app/src/main/res/color/text_secondary_dark.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/color/text_secondary_light.xml b/src/pandroid/app/src/main/res/color/text_secondary_light.xml deleted file mode 100644 index 35136058..00000000 --- a/src/pandroid/app/src/main/res/color/text_secondary_light.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/alert_dialog_background.xml b/src/pandroid/app/src/main/res/drawable/alert_dialog_background.xml deleted file mode 100644 index 729e056b..00000000 --- a/src/pandroid/app/src/main/res/drawable/alert_dialog_background.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/analog_background.xml b/src/pandroid/app/src/main/res/drawable/analog_background.xml deleted file mode 100644 index 3f3747cd..00000000 --- a/src/pandroid/app/src/main/res/drawable/analog_background.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/analog_foreground.xml b/src/pandroid/app/src/main/res/drawable/analog_foreground.xml deleted file mode 100644 index c339e69f..00000000 --- a/src/pandroid/app/src/main/res/drawable/analog_foreground.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_a.xml b/src/pandroid/app/src/main/res/drawable/button_a.xml deleted file mode 100644 index d04306b9..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_a.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_b.xml b/src/pandroid/app/src/main/res/drawable/button_b.xml deleted file mode 100644 index 1611f28d..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_b.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_l.xml b/src/pandroid/app/src/main/res/drawable/button_l.xml deleted file mode 100644 index a2b2f5ad..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_l.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_r.xml b/src/pandroid/app/src/main/res/drawable/button_r.xml deleted file mode 100644 index 24cf739b..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_r.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_select.xml b/src/pandroid/app/src/main/res/drawable/button_select.xml deleted file mode 100644 index c71a3bff..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_select.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_start.xml b/src/pandroid/app/src/main/res/drawable/button_start.xml deleted file mode 100644 index 33e0a58b..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_start.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_x.xml b/src/pandroid/app/src/main/res/drawable/button_x.xml deleted file mode 100644 index 4050c539..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_x.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/button_y.xml b/src/pandroid/app/src/main/res/drawable/button_y.xml deleted file mode 100644 index 87799691..00000000 --- a/src/pandroid/app/src/main/res/drawable/button_y.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/color_surface.xml b/src/pandroid/app/src/main/res/drawable/color_surface.xml deleted file mode 100644 index b8655b87..00000000 --- a/src/pandroid/app/src/main/res/drawable/color_surface.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/dpad_down.xml b/src/pandroid/app/src/main/res/drawable/dpad_down.xml deleted file mode 100644 index 3a904b2d..00000000 --- a/src/pandroid/app/src/main/res/drawable/dpad_down.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/dpad_left.xml b/src/pandroid/app/src/main/res/drawable/dpad_left.xml deleted file mode 100644 index 8dad75be..00000000 --- a/src/pandroid/app/src/main/res/drawable/dpad_left.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/dpad_right.xml b/src/pandroid/app/src/main/res/drawable/dpad_right.xml deleted file mode 100644 index e0bea7ec..00000000 --- a/src/pandroid/app/src/main/res/drawable/dpad_right.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/dpad_up.xml b/src/pandroid/app/src/main/res/drawable/dpad_up.xml deleted file mode 100644 index 4bc0a96b..00000000 --- a/src/pandroid/app/src/main/res/drawable/dpad_up.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/ds_editor_popup_background.xml b/src/pandroid/app/src/main/res/drawable/ds_editor_popup_background.xml deleted file mode 100644 index 80fee9a8..00000000 --- a/src/pandroid/app/src/main/res/drawable/ds_editor_popup_background.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/ic_add.xml b/src/pandroid/app/src/main/res/drawable/ic_add.xml deleted file mode 100644 index db709d0b..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_add.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_align_center.xml b/src/pandroid/app/src/main/res/drawable/ic_align_center.xml deleted file mode 100644 index 1e2e0c74..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_align_center.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_arrow_down.xml b/src/pandroid/app/src/main/res/drawable/ic_arrow_down.xml deleted file mode 100644 index 5eff5d5d..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_arrow_down.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_arrow_up.xml b/src/pandroid/app/src/main/res/drawable/ic_arrow_up.xml deleted file mode 100644 index f5859d56..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_arrow_up.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_code.xml b/src/pandroid/app/src/main/res/drawable/ic_code.xml deleted file mode 100644 index 167935e2..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_code.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_compare_arrow.xml b/src/pandroid/app/src/main/res/drawable/ic_compare_arrow.xml deleted file mode 100644 index 937d53a8..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_compare_arrow.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_delete.xml b/src/pandroid/app/src/main/res/drawable/ic_delete.xml deleted file mode 100644 index 1efcc802..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_delete.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_done.xml b/src/pandroid/app/src/main/res/drawable/ic_done.xml deleted file mode 100644 index e007f1d1..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_done.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_edit.xml b/src/pandroid/app/src/main/res/drawable/ic_edit.xml deleted file mode 100644 index 6ddb5cb1..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_edit.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_exit.xml b/src/pandroid/app/src/main/res/drawable/ic_exit.xml deleted file mode 100644 index e052e1cb..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_exit.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_folder.xml b/src/pandroid/app/src/main/res/drawable/ic_folder.xml deleted file mode 100644 index ce1051f4..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_folder.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_key_a.xml b/src/pandroid/app/src/main/res/drawable/ic_key_a.xml deleted file mode 100644 index 3081c462..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_key_a.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_keyboard_hide.xml b/src/pandroid/app/src/main/res/drawable/ic_keyboard_hide.xml deleted file mode 100644 index d4e7929b..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_keyboard_hide.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_launcher_background.xml b/src/pandroid/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9c..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_launcher_foreground.xml b/src/pandroid/app/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d11..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/ic_play.xml b/src/pandroid/app/src/main/res/drawable/ic_play.xml deleted file mode 100644 index d75d7da3..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_play.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_rotate_screen.xml b/src/pandroid/app/src/main/res/drawable/ic_rotate_screen.xml deleted file mode 100644 index 4e95fb72..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_rotate_screen.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_save.xml b/src/pandroid/app/src/main/res/drawable/ic_save.xml deleted file mode 100644 index 82070aa2..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_save.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_search.xml b/src/pandroid/app/src/main/res/drawable/ic_search.xml deleted file mode 100644 index a5687c63..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_search.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_settings.xml b/src/pandroid/app/src/main/res/drawable/ic_settings.xml deleted file mode 100644 index 298a5a1f..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_shortcut.xml b/src/pandroid/app/src/main/res/drawable/ic_shortcut.xml deleted file mode 100644 index 8bb2a987..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_shortcut.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_switch_screen.xml b/src/pandroid/app/src/main/res/drawable/ic_switch_screen.xml deleted file mode 100644 index f577b24f..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_switch_screen.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_tab.xml b/src/pandroid/app/src/main/res/drawable/ic_tab.xml deleted file mode 100644 index 3f7efd95..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_tab.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_theme.xml b/src/pandroid/app/src/main/res/drawable/ic_theme.xml deleted file mode 100644 index c3d2c7b3..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_theme.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_videogame.xml b/src/pandroid/app/src/main/res/drawable/ic_videogame.xml deleted file mode 100644 index 8693be5f..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_videogame.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/ic_visibility.xml b/src/pandroid/app/src/main/res/drawable/ic_visibility.xml deleted file mode 100644 index b923c39d..00000000 --- a/src/pandroid/app/src/main/res/drawable/ic_visibility.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/medium_card_background.xml b/src/pandroid/app/src/main/res/drawable/medium_card_background.xml deleted file mode 100644 index 805248ea..00000000 --- a/src/pandroid/app/src/main/res/drawable/medium_card_background.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/rounded_selectable_item_background.xml b/src/pandroid/app/src/main/res/drawable/rounded_selectable_item_background.xml deleted file mode 100644 index 16b39ced..00000000 --- a/src/pandroid/app/src/main/res/drawable/rounded_selectable_item_background.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/src/pandroid/app/src/main/res/drawable/screen_gamepad_checkbox.xml b/src/pandroid/app/src/main/res/drawable/screen_gamepad_checkbox.xml deleted file mode 100644 index 8c61f4c8..00000000 --- a/src/pandroid/app/src/main/res/drawable/screen_gamepad_checkbox.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/screen_gamepad_hide.xml b/src/pandroid/app/src/main/res/drawable/screen_gamepad_hide.xml deleted file mode 100644 index f22e8c9d..00000000 --- a/src/pandroid/app/src/main/res/drawable/screen_gamepad_hide.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/screen_gamepad_show.xml b/src/pandroid/app/src/main/res/drawable/screen_gamepad_show.xml deleted file mode 100644 index 133f2e70..00000000 --- a/src/pandroid/app/src/main/res/drawable/screen_gamepad_show.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/src/pandroid/app/src/main/res/drawable/search_bar_background.xml b/src/pandroid/app/src/main/res/drawable/search_bar_background.xml deleted file mode 100644 index 44a1c5b4..00000000 --- a/src/pandroid/app/src/main/res/drawable/search_bar_background.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/simple_card_background.xml b/src/pandroid/app/src/main/res/drawable/simple_card_background.xml deleted file mode 100644 index f07f345c..00000000 --- a/src/pandroid/app/src/main/res/drawable/simple_card_background.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout-land/activity_main.xml b/src/pandroid/app/src/main/res/layout-land/activity_main.xml deleted file mode 100644 index 9741809d..00000000 --- a/src/pandroid/app/src/main/res/layout-land/activity_main.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/activity_code_editor.xml b/src/pandroid/app/src/main/res/layout/activity_code_editor.xml deleted file mode 100644 index 5cef8609..00000000 --- a/src/pandroid/app/src/main/res/layout/activity_code_editor.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/activity_input_map.xml b/src/pandroid/app/src/main/res/layout/activity_input_map.xml deleted file mode 100644 index 79249e62..00000000 --- a/src/pandroid/app/src/main/res/layout/activity_input_map.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/activity_main.xml b/src/pandroid/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 68b87bfb..00000000 --- a/src/pandroid/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/activity_preference.xml b/src/pandroid/app/src/main/res/layout/activity_preference.xml deleted file mode 100644 index 401c3d86..00000000 --- a/src/pandroid/app/src/main/res/layout/activity_preference.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/controller_dpad.xml b/src/pandroid/app/src/main/res/layout/controller_dpad.xml deleted file mode 100644 index b6f0f626..00000000 --- a/src/pandroid/app/src/main/res/layout/controller_dpad.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/controller_gamepad.xml b/src/pandroid/app/src/main/res/layout/controller_gamepad.xml deleted file mode 100644 index b2186a9d..00000000 --- a/src/pandroid/app/src/main/res/layout/controller_gamepad.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/controller_joystick.xml b/src/pandroid/app/src/main/res/layout/controller_joystick.xml deleted file mode 100644 index d758822f..00000000 --- a/src/pandroid/app/src/main/res/layout/controller_joystick.xml +++ /dev/null @@ -1,11 +0,0 @@ - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/controller_l.xml b/src/pandroid/app/src/main/res/layout/controller_l.xml deleted file mode 100644 index 96ec7582..00000000 --- a/src/pandroid/app/src/main/res/layout/controller_l.xml +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/src/pandroid/app/src/main/res/layout/controller_r.xml b/src/pandroid/app/src/main/res/layout/controller_r.xml deleted file mode 100644 index 8aa2fba1..00000000 --- a/src/pandroid/app/src/main/res/layout/controller_r.xml +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/src/pandroid/app/src/main/res/layout/controller_select.xml b/src/pandroid/app/src/main/res/layout/controller_select.xml deleted file mode 100644 index a77855be..00000000 --- a/src/pandroid/app/src/main/res/layout/controller_select.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/controller_start.xml b/src/pandroid/app/src/main/res/layout/controller_start.xml deleted file mode 100644 index 94f12eb7..00000000 --- a/src/pandroid/app/src/main/res/layout/controller_start.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/dialog_bottom_sheet.xml b/src/pandroid/app/src/main/res/layout/dialog_bottom_sheet.xml deleted file mode 100644 index 88124bf1..00000000 --- a/src/pandroid/app/src/main/res/layout/dialog_bottom_sheet.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/dialog_game_about.xml b/src/pandroid/app/src/main/res/layout/dialog_game_about.xml deleted file mode 100644 index 3a91ae2c..00000000 --- a/src/pandroid/app/src/main/res/layout/dialog_game_about.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/dialog_games_folder.xml b/src/pandroid/app/src/main/res/layout/dialog_games_folder.xml deleted file mode 100644 index c0b41d8f..00000000 --- a/src/pandroid/app/src/main/res/layout/dialog_games_folder.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/dialog_loading.xml b/src/pandroid/app/src/main/res/layout/dialog_loading.xml deleted file mode 100644 index 824aee72..00000000 --- a/src/pandroid/app/src/main/res/layout/dialog_loading.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/dialog_lua_scripts.xml b/src/pandroid/app/src/main/res/layout/dialog_lua_scripts.xml deleted file mode 100644 index b0484879..00000000 --- a/src/pandroid/app/src/main/res/layout/dialog_lua_scripts.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/dialog_select_theme.xml b/src/pandroid/app/src/main/res/layout/dialog_select_theme.xml deleted file mode 100644 index b3f9d0cf..00000000 --- a/src/pandroid/app/src/main/res/layout/dialog_select_theme.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/drawer_game_container.xml b/src/pandroid/app/src/main/res/layout/drawer_game_container.xml deleted file mode 100644 index 4b094e75..00000000 --- a/src/pandroid/app/src/main/res/layout/drawer_game_container.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/ds_editor_gravity_anchor.xml b/src/pandroid/app/src/main/res/layout/ds_editor_gravity_anchor.xml deleted file mode 100644 index 3945b27a..00000000 --- a/src/pandroid/app/src/main/res/layout/ds_editor_gravity_anchor.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/ds_editor_lock_aspect.xml b/src/pandroid/app/src/main/res/layout/ds_editor_lock_aspect.xml deleted file mode 100644 index 238b86c5..00000000 --- a/src/pandroid/app/src/main/res/layout/ds_editor_lock_aspect.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/ds_editor_spinner.xml b/src/pandroid/app/src/main/res/layout/ds_editor_spinner.xml deleted file mode 100644 index 515f917f..00000000 --- a/src/pandroid/app/src/main/res/layout/ds_editor_spinner.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/ds_editor_spinner_label.xml b/src/pandroid/app/src/main/res/layout/ds_editor_spinner_label.xml deleted file mode 100644 index 125072e0..00000000 --- a/src/pandroid/app/src/main/res/layout/ds_editor_spinner_label.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/fragment_game_drawer.xml b/src/pandroid/app/src/main/res/layout/fragment_game_drawer.xml deleted file mode 100644 index 30b08386..00000000 --- a/src/pandroid/app/src/main/res/layout/fragment_game_drawer.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/fragment_games.xml b/src/pandroid/app/src/main/res/layout/fragment_games.xml deleted file mode 100644 index 33033834..00000000 --- a/src/pandroid/app/src/main/res/layout/fragment_games.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/fragment_search.xml b/src/pandroid/app/src/main/res/layout/fragment_search.xml deleted file mode 100644 index e165ff32..00000000 --- a/src/pandroid/app/src/main/res/layout/fragment_search.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/game_activity.xml b/src/pandroid/app/src/main/res/layout/game_activity.xml deleted file mode 100644 index 9677ac70..00000000 --- a/src/pandroid/app/src/main/res/layout/game_activity.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/hold_theme_preview.xml b/src/pandroid/app/src/main/res/layout/hold_theme_preview.xml deleted file mode 100644 index 9bdab2f1..00000000 --- a/src/pandroid/app/src/main/res/layout/hold_theme_preview.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/hold_theme_preview_base.xml b/src/pandroid/app/src/main/res/layout/hold_theme_preview_base.xml deleted file mode 100644 index 9e7a6e6f..00000000 --- a/src/pandroid/app/src/main/res/layout/hold_theme_preview_base.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/holder_game.xml b/src/pandroid/app/src/main/res/layout/holder_game.xml deleted file mode 100644 index 275926c3..00000000 --- a/src/pandroid/app/src/main/res/layout/holder_game.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/holder_lua_script.xml b/src/pandroid/app/src/main/res/layout/holder_lua_script.xml deleted file mode 100644 index c4410011..00000000 --- a/src/pandroid/app/src/main/res/layout/holder_lua_script.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/material_switch_widget.xml b/src/pandroid/app/src/main/res/layout/material_switch_widget.xml deleted file mode 100644 index 3cffb5c1..00000000 --- a/src/pandroid/app/src/main/res/layout/material_switch_widget.xml +++ /dev/null @@ -1,11 +0,0 @@ - - diff --git a/src/pandroid/app/src/main/res/layout/preference_controller_mapper.xml b/src/pandroid/app/src/main/res/layout/preference_controller_mapper.xml deleted file mode 100644 index daecd2b2..00000000 --- a/src/pandroid/app/src/main/res/layout/preference_controller_mapper.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/preference_simple_about.xml b/src/pandroid/app/src/main/res/layout/preference_simple_about.xml deleted file mode 100644 index cf6370b9..00000000 --- a/src/pandroid/app/src/main/res/layout/preference_simple_about.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/layout/preference_start_item.xml b/src/pandroid/app/src/main/res/layout/preference_start_item.xml deleted file mode 100644 index ecb10436..00000000 --- a/src/pandroid/app/src/main/res/layout/preference_start_item.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/menu/game_drawer.xml b/src/pandroid/app/src/main/res/menu/game_drawer.xml deleted file mode 100644 index 2ac82b68..00000000 --- a/src/pandroid/app/src/main/res/menu/game_drawer.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/menu/main_activity_navigation.xml b/src/pandroid/app/src/main/res/menu/main_activity_navigation.xml deleted file mode 100644 index f457d8cf..00000000 --- a/src/pandroid/app/src/main/res/menu/main_activity_navigation.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/src/pandroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09bc..00000000 --- a/src/pandroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/src/pandroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc..00000000 --- a/src/pandroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 61d2084a..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp deleted file mode 100644 index 9cae8387..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index c3c7e5a2..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index 3f5d5d42..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp deleted file mode 100644 index 3c486012..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index b11dd67f..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index eebe375d..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp deleted file mode 100644 index aef35be5..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index a52a83b3..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 9368d16c..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index 95242200..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 56373697..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index 408caf75..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index df4f2156..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9c7b64f0..00000000 Binary files a/src/pandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml deleted file mode 100644 index 521f199e..00000000 --- a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - pandroid - Carregar ROM - Jogos - Configurações - Pesquisar - Desconhecido - Esquerda - Direita - Cima - Baixo - Outros - Pressione qualquer tecla - Eixos - Zona Morta - Opções - Mapeie um controle ou teclado - Mapeamento de controle - Tema - Defina a aparência do aplicativo - Aparência - Mesmo do dispositivo - Claro - Escuro - Preto - Ações - Sair - Continuar - Salvo - Criar perfil - Entrada - Altere o mapeamento de controles, disposição de controle na tela etc. - Nome - Disposições de controle - Disposição de controle padrão - Nome Invalido - Trapaças - Script Lua - Scripts - Esse arquivo não é suportado - Salvar e sair - Sair sem salvar - Salvar \"%s\" antes de sair? - Abrir arquivo - Criar novo - Executando \"%s\" ... - Opções avançada. - Depuração, mostrar fps, etc. - Monitor de desempenho - Mostrar um overlay com fps, memoria, etc. - Depuração - Grave os registros para um arquivo. - Shader Jit - Usar recompilador de shaders. - Picture In Picture - Entrar em modo picture in picture quando a janela sai de foco - Gráficos - Carregando - Rotacionar - Aplicar - Definir o tema do aplicativo - Tema do aplicativo - Falha ao carregar a ROM. - Falha ao carregar o arquivo ROM, por favor verifique se o arquivo não esta corrompido ou se o emulator tem permição para acessa-lo. - Sistema - Geral - Configurações gerais do emulador. - Tela inferior - Tela superior - Manter porporção - Disposição das telas - Altere as disposições disponiveis para as telas do console - Clique para mudar - Mudar telas - Pastas usadas para importar os jogos - Pastas de jogos - Adicionar pasta - %d Jogos - Diretorio - Remover - Jogar - Região - Estados Unidos - Japão - Europa - Australia - Coréia - Taiwan - Comportamento - Jogo invalido - Ferramentas - Multiplicação precisa de shader - Usar calculos mais precisos para shaders - Importar chaves - %s disponível - %s não disponível - Importar SeedDB - Arquivo inválido - %s Importado - diff --git a/src/pandroid/app/src/main/res/values-v27/themes.xml b/src/pandroid/app/src/main/res/values-v27/themes.xml deleted file mode 100644 index 8e960864..00000000 --- a/src/pandroid/app/src/main/res/values-v27/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/values/themes.xml b/src/pandroid/app/src/main/res/values/themes.xml deleted file mode 100644 index 5deec652..00000000 --- a/src/pandroid/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/values/values.xml b/src/pandroid/app/src/main/res/values/values.xml deleted file mode 100644 index 9a4071c7..00000000 --- a/src/pandroid/app/src/main/res/values/values.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/advanced_preferences.xml b/src/pandroid/app/src/main/res/xml/advanced_preferences.xml deleted file mode 100644 index 0f025994..00000000 --- a/src/pandroid/app/src/main/res/xml/advanced_preferences.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/pandroid/app/src/main/res/xml/backup_rules.xml b/src/pandroid/app/src/main/res/xml/backup_rules.xml deleted file mode 100644 index fa0f996d..00000000 --- a/src/pandroid/app/src/main/res/xml/backup_rules.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/data_extraction_rules.xml b/src/pandroid/app/src/main/res/xml/data_extraction_rules.xml deleted file mode 100644 index 9ee9997b..00000000 --- a/src/pandroid/app/src/main/res/xml/data_extraction_rules.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/empty_preferences.xml b/src/pandroid/app/src/main/res/xml/empty_preferences.xml deleted file mode 100644 index 624ed13a..00000000 --- a/src/pandroid/app/src/main/res/xml/empty_preferences.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/game_mode_config.xml b/src/pandroid/app/src/main/res/xml/game_mode_config.xml deleted file mode 100644 index b28dd3a1..00000000 --- a/src/pandroid/app/src/main/res/xml/game_mode_config.xml +++ /dev/null @@ -1,7 +0,0 @@ - - diff --git a/src/pandroid/app/src/main/res/xml/general_preference.xml b/src/pandroid/app/src/main/res/xml/general_preference.xml deleted file mode 100644 index 4352ee54..00000000 --- a/src/pandroid/app/src/main/res/xml/general_preference.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/input_map_preferences.xml b/src/pandroid/app/src/main/res/xml/input_map_preferences.xml deleted file mode 100644 index 2af485ec..00000000 --- a/src/pandroid/app/src/main/res/xml/input_map_preferences.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/input_preference.xml b/src/pandroid/app/src/main/res/xml/input_preference.xml deleted file mode 100644 index 8f91ab40..00000000 --- a/src/pandroid/app/src/main/res/xml/input_preference.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/start_preferences.xml b/src/pandroid/app/src/main/res/xml/start_preferences.xml deleted file mode 100644 index 788000d6..00000000 --- a/src/pandroid/app/src/main/res/xml/start_preferences.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/pandroid/build.gradle.kts b/src/pandroid/build.gradle.kts deleted file mode 100644 index c21801c7..00000000 --- a/src/pandroid/build.gradle.kts +++ /dev/null @@ -1,4 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -plugins { - id("com.android.application") version "8.1.2" apply false -} \ No newline at end of file diff --git a/src/pandroid/gradle.properties b/src/pandroid/gradle.properties deleted file mode 100644 index 3e927b11..00000000 --- a/src/pandroid/gradle.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Enables namespacing of each library's R class so that its R class includes only the -# resources declared in the library itself and none from the library's dependencies, -# thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file diff --git a/src/pandroid/gradle/wrapper/gradle-wrapper.jar b/src/pandroid/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c0..00000000 Binary files a/src/pandroid/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/src/pandroid/gradle/wrapper/gradle-wrapper.properties b/src/pandroid/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 22c9e5ab..00000000 --- a/src/pandroid/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Tue Nov 14 14:40:27 EET 2023 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/src/pandroid/gradlew b/src/pandroid/gradlew deleted file mode 100755 index 4f906e0c..00000000 --- a/src/pandroid/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/src/pandroid/gradlew.bat b/src/pandroid/gradlew.bat deleted file mode 100644 index ac1b06f9..00000000 --- a/src/pandroid/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/src/pandroid/settings.gradle.kts b/src/pandroid/settings.gradle.kts deleted file mode 100644 index 84d1ce30..00000000 --- a/src/pandroid/settings.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -pluginManagement { - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} -dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) - repositories { - google() - mavenCentral() - } -} - -rootProject.name = "pandroid" -include(":app") diff --git a/src/renderdoc.cpp b/src/renderdoc.cpp deleted file mode 100644 index 43627b66..00000000 --- a/src/renderdoc.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#ifdef PANDA3DS_ENABLE_RENDERDOC -#include "renderdoc.hpp" - -#include - -#ifdef _WIN32 -#include -#else -#include -#endif - -#include -#include - -namespace Renderdoc { - enum class CaptureState { - Idle, - Triggered, - InProgress, - }; - - static CaptureState captureState{CaptureState::Idle}; - static bool renderdocLoaded{false}; - - RENDERDOC_API_1_6_0* rdocAPI{}; - - void loadRenderdoc() { -#ifdef WIN32 - // Check if we are running in Renderdoc GUI - HMODULE mod = GetModuleHandleA("renderdoc.dll"); - if (!mod) { - // If enabled in config, try to load RDoc runtime in offline mode - HKEY h_reg_key; - LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Classes\\RenderDoc.RDCCapture.1\\DefaultIcon\\", 0, KEY_READ, &h_reg_key); - if (result != ERROR_SUCCESS) { - return; - } - std::array keyString{}; - DWORD stringSize{keyString.size()}; - result = RegQueryValueExW(h_reg_key, L"", 0, NULL, (LPBYTE)keyString.data(), &stringSize); - if (result != ERROR_SUCCESS) { - return; - } - - std::filesystem::path path{keyString.cbegin(), keyString.cend()}; - path = path.parent_path().append("renderdoc.dll"); - const auto path_to_lib = path.generic_string(); - mod = LoadLibraryA(path_to_lib.c_str()); - } - - if (mod) { - const auto RENDERDOC_GetAPI = reinterpret_cast(GetProcAddress(mod, "RENDERDOC_GetAPI")); - const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdocAPI); - - if (ret != 1) { - Helpers::panic("Invalid return value from RENDERDOC_GetAPI"); - } - } -#else -#ifdef ANDROID - static constexpr const char RENDERDOC_LIB[] = "libVkLayer_GLES_RenderDoc.so"; -#else - static constexpr const char RENDERDOC_LIB[] = "librenderdoc.so"; -#endif - if (void* mod = dlopen(RENDERDOC_LIB, RTLD_NOW | RTLD_NOLOAD)) { - const auto RENDERDOC_GetAPI = reinterpret_cast(dlsym(mod, "RENDERDOC_GetAPI")); - const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdocAPI); - - if (ret != 1) { - Helpers::panic("Invalid return value from RENDERDOC_GetAPI"); - } - } -#endif - if (rdocAPI) { - renderdocLoaded = true; - - // Disable default capture keys as they suppose to trigger present-to-present capturing - // and it is not what we want - rdocAPI->SetCaptureKeys(nullptr, 0); - - // Also remove rdoc crash handler - rdocAPI->UnloadCrashHandler(); - } - } - - void startCapture() { - if (!rdocAPI) { - return; - } - - if (captureState == CaptureState::Triggered) { - rdocAPI->StartFrameCapture(nullptr, nullptr); - captureState = CaptureState::InProgress; - } - } - - void endCapture() { - if (!rdocAPI) { - return; - } - - if (captureState == CaptureState::InProgress) { - rdocAPI->EndFrameCapture(nullptr, nullptr); - captureState = CaptureState::Idle; - } - } - - void triggerCapture() { - if (captureState == CaptureState::Idle) { - captureState = CaptureState::Triggered; - } - } - - void setOutputDir(const std::string& path, const std::string& prefix) { - if (rdocAPI) { - rdocAPI->SetCaptureFilePathTemplate((path + '\\' + prefix).c_str()); - } - } - - bool isLoaded() { return renderdocLoaded; } -} // namespace Renderdoc -#endif \ No newline at end of file diff --git a/src/renderer.cpp b/src/renderer.cpp index 390a3fa6..76c3e7a0 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -3,8 +3,6 @@ #include #include -#include "PICA/gpu.hpp" - Renderer::Renderer(GPU& gpu, const std::array& internalRegs, const std::array& externalRegs) : gpu(gpu), regs(internalRegs), externalRegs(externalRegs) {} Renderer::~Renderer() {} @@ -19,7 +17,6 @@ std::optional Renderer::typeFromString(std::string inString) { {"null", RendererType::Null}, {"nil", RendererType::Null}, {"none", RendererType::Null}, {"gl", RendererType::OpenGL}, {"ogl", RendererType::OpenGL}, {"opengl", RendererType::OpenGL}, {"vk", RendererType::Vulkan}, {"vulkan", RendererType::Vulkan}, {"vulcan", RendererType::Vulkan}, - {"mtl", RendererType::Metal}, {"metal", RendererType::Metal}, {"sw", RendererType::Software}, {"soft", RendererType::Software}, {"software", RendererType::Software}, {"softrast", RendererType::Software}, }; @@ -36,44 +33,7 @@ const char* Renderer::typeToString(RendererType rendererType) { case RendererType::Null: return "null"; case RendererType::OpenGL: return "opengl"; case RendererType::Vulkan: return "vulkan"; - case RendererType::Metal: return "metal"; case RendererType::Software: return "software"; default: return "Invalid"; } -} - -void Renderer::doSoftwareTextureCopy(u32 inputAddr, u32 outputAddr, u32 copySize, u32 inputWidth, u32 inputGap, u32 outputWidth, u32 outputGap) { - u8* inputPointer = gpu.getPointerPhys(inputAddr); - u8* outputPointer = gpu.getPointerPhys(outputAddr); - - if (inputPointer == nullptr || outputPointer == nullptr) { - return; - } - - u32 inputBytesLeft = inputWidth; - u32 outputBytesLeft = outputWidth; - u32 copyBytesLeft = copySize; - - while (copyBytesLeft > 0) { - const u32 bytes = std::min({inputBytesLeft, outputBytesLeft, copyBytesLeft}); - std::memcpy(outputPointer, inputPointer, bytes); - - inputPointer += bytes; - outputPointer += bytes; - - inputBytesLeft -= bytes; - outputBytesLeft -= bytes; - copyBytesLeft -= bytes; - - // Apply input and output gap when an input or output line ends - if (inputBytesLeft == 0) { - inputBytesLeft = inputWidth; - inputPointer += inputGap; - } - - if (outputBytesLeft == 0) { - outputBytesLeft = outputWidth; - outputPointer += outputGap; - } - } -} +} \ No newline at end of file diff --git a/tests/AppCpuTimeLimit/Makefile b/tests/AppCpuTimeLimit/Makefile deleted file mode 100644 index 9fc3a849..00000000 --- a/tests/AppCpuTimeLimit/Makefile +++ /dev/null @@ -1,258 +0,0 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- - -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif - -TOPDIR ?= $(CURDIR) -include $(DEVKITARM)/3ds_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# DATA is a list of directories containing data files -# INCLUDES is a list of directories containing header files -# GRAPHICS is a list of directories containing graphics files -# GFXBUILD is the directory where converted graphics files will be placed -# If set to $(BUILD), it will statically link in the converted -# files as if they were data files. -# -# NO_SMDH: if set to anything, no SMDH file is generated. -# ROMFS is the directory which contains the RomFS, relative to the Makefile (Optional) -# APP_TITLE is the name of the app stored in the SMDH file (Optional) -# APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional) -# APP_AUTHOR is the author of the app stored in the SMDH file (Optional) -# ICON is the filename of the icon (.png), relative to the project folder. -# If not set, it attempts to use one of the following (in this order): -# - .png -# - icon.png -# - /default_icon.png -#--------------------------------------------------------------------------------- -TARGET := AppCpuTimeLimit -BUILD := build -SOURCES := source -DATA := data -INCLUDES := include -GRAPHICS := gfx -GFXBUILD := $(BUILD) -#ROMFS := romfs -#GFXBUILD := $(ROMFS)/gfx -APP_TITLE := AppCpuTimeLimit -APP_DESCRIPTION := Tests Set/GetAppCpuTimeLimit -APP_AUTHOR := noumidev - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft - -CFLAGS := -g -Wall -O2 -mword-relocations \ - -ffunction-sections \ - $(ARCH) - -CFLAGS += $(INCLUDE) -D__3DS__ - -CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 - -ASFLAGS := -g $(ARCH) -LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) - -LIBS := -lctru -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(CTRULIB) - - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) -export TOPDIR := $(CURDIR) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -PICAFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.v.pica))) -SHLISTFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.shlist))) -GFXFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.t3s))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -#--------------------------------------------------------------------------------- -ifeq ($(GFXBUILD),$(BUILD)) -#--------------------------------------------------------------------------------- -export T3XFILES := $(GFXFILES:.t3s=.t3x) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- -export ROMFS_T3XFILES := $(patsubst %.t3s, $(GFXBUILD)/%.t3x, $(GFXFILES)) -export T3XHFILES := $(patsubst %.t3s, $(BUILD)/%.h, $(GFXFILES)) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) \ - $(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o) \ - $(addsuffix .o,$(T3XFILES)) - -export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PICAFILES:.v.pica=_shbin.h) $(SHLISTFILES:.shlist=_shbin.h) \ - $(addsuffix .h,$(subst .,_,$(BINFILES))) \ - $(GFXFILES:.t3s=.h) - -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) - -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -export _3DSXDEPS := $(if $(NO_SMDH),,$(OUTPUT).smdh) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.png) - ifneq (,$(findstring $(TARGET).png,$(icons))) - export APP_ICON := $(TOPDIR)/$(TARGET).png - else - ifneq (,$(findstring icon.png,$(icons))) - export APP_ICON := $(TOPDIR)/icon.png - endif - endif -else - export APP_ICON := $(TOPDIR)/$(ICON) -endif - -ifeq ($(strip $(NO_SMDH)),) - export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh -endif - -ifneq ($(ROMFS),) - export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS) -endif - -.PHONY: all clean - -#--------------------------------------------------------------------------------- -all: $(BUILD) $(GFXBUILD) $(DEPSDIR) $(ROMFS_T3XFILES) $(T3XHFILES) - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -$(BUILD): - @mkdir -p $@ - -ifneq ($(GFXBUILD),$(BUILD)) -$(GFXBUILD): - @mkdir -p $@ -endif - -ifneq ($(DEPSDIR),$(BUILD)) -$(DEPSDIR): - @mkdir -p $@ -endif - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf $(GFXBUILD) - -#--------------------------------------------------------------------------------- -$(GFXBUILD)/%.t3x $(BUILD)/%.h : %.t3s -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @tex3ds -i $< -H $(BUILD)/$*.h -d $(DEPSDIR)/$*.d -o $(GFXBUILD)/$*.t3x - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).3dsx : $(OUTPUT).elf $(_3DSXDEPS) - -$(OFILES_SOURCES) : $(HFILES) - -$(OUTPUT).elf : $(OFILES) - -#--------------------------------------------------------------------------------- -# you need a rule like this for each extension you use as binary data -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -.PRECIOUS : %.t3x -#--------------------------------------------------------------------------------- -%.t3x.o %_t3x.h : %.t3x -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# rules for assembling GPU shaders -#--------------------------------------------------------------------------------- -define shader-as - $(eval CURBIN := $*.shbin) - $(eval DEPSFILE := $(DEPSDIR)/$*.shbin.d) - echo "$(CURBIN).o: $< $1" > $(DEPSFILE) - echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(CURBIN) | tr . _)`.h - echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(CURBIN) | tr . _)`.h - echo "extern const u32" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(CURBIN) | tr . _)`.h - picasso -o $(CURBIN) $1 - bin2s $(CURBIN) | $(AS) -o $*.shbin.o -endef - -%.shbin.o %_shbin.h : %.v.pica %.g.pica - @echo $(notdir $^) - @$(call shader-as,$^) - -%.shbin.o %_shbin.h : %.v.pica - @echo $(notdir $<) - @$(call shader-as,$<) - -%.shbin.o %_shbin.h : %.shlist - @echo $(notdir $<) - @$(call shader-as,$(foreach file,$(shell cat $<),$(dir $<)$(file))) - -#--------------------------------------------------------------------------------- -%.t3x %.h : %.t3s -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @tex3ds -i $< -H $*.h -d $*.d -o $*.t3x - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- diff --git a/tests/AppCpuTimeLimit/o3ds.png b/tests/AppCpuTimeLimit/o3ds.png deleted file mode 100644 index b3da7ce7..00000000 Binary files a/tests/AppCpuTimeLimit/o3ds.png and /dev/null differ diff --git a/tests/AppCpuTimeLimit/source/main.c b/tests/AppCpuTimeLimit/source/main.c deleted file mode 100644 index e61dc498..00000000 --- a/tests/AppCpuTimeLimit/source/main.c +++ /dev/null @@ -1,55 +0,0 @@ -#include <3ds.h> - -#include - -int main(int argc, char **argv) { - gfxInitDefault(); - - consoleInit(GFX_TOP, NULL); - - printf("--- APT::SetAppCpuTimeLimit ---\n\n"); - - // Get initial percentage - u32 percentage; - APT_GetAppCpuTimeLimit(&percentage); - - printf("Initial percentage: %lu\n\n", percentage); - - // Try all percentages from 0-100%, print failed calls - for (int i = 0; i <= 100; i++) { - const Result res = APT_SetAppCpuTimeLimit(i); - - if (R_FAILED(res)) { - APT_GetAppCpuTimeLimit(&percentage); - - printf("[%d:%lu:%lX]\n", i, percentage, res); - } - } - - // Send command with invalid fixed value - u32 aptcmdbuf[16]; - aptcmdbuf[0] = 0x004F0080; - aptcmdbuf[1] = 0; - aptcmdbuf[2] = 20; - - aptSendCommand(aptcmdbuf); - - printf("\nWith fixed = 0: [%08lX:%08lX]\n", aptcmdbuf[0], aptcmdbuf[1]); - - while (aptMainLoop()) { - hidScanInput(); - - if ((hidKeysDown() & KEY_START) != 0) { - break; - } - - gfxFlushBuffers(); - gfxSwapBuffers(); - - gspWaitForVBlank(); - } - - gfxExit(); - - return 0; -} diff --git a/tests/DetectEmulator/source/main.c b/tests/DetectEmulator/source/main.c index 6e1e644d..a66edd69 100644 --- a/tests/DetectEmulator/source/main.c +++ b/tests/DetectEmulator/source/main.c @@ -6,16 +6,16 @@ #define CLEAR_COLOR 0x68B0D8FF #define DISPLAY_TRANSFER_FLAGS \ - (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ - GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ - GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) + (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ + GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ + GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) typedef struct { float x, y, z; } vertex; static const vertex vertex_list[] = { - { 200.0f, 200.0f, 0.5f }, - { 100.0f, 40.0f, 0.5f }, - { 300.0f, 40.0f, 0.5f }, + { 200.0f, 200.0f, 0.5f }, + { 100.0f, 40.0f, 0.5f }, + { 300.0f, 40.0f, 0.5f }, }; typedef enum { @@ -69,22 +69,22 @@ static C3D_Mtx projection; static void* vbo_data; static void sceneInit(void) { - // Load the vertex shader, create a shader program and bind it - vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size); - shaderProgramInit(&program); - shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); - C3D_BindProgram(&program); + // Load the vertex shader, create a shader program and bind it + vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size); + shaderProgramInit(&program); + shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); + C3D_BindProgram(&program); - // Get the location of the uniforms - uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); + // Get the location of the uniforms + uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); - // Configure attributes for use with the vertex shader - C3D_AttrInfo* attrInfo = C3D_GetAttrInfo(); - AttrInfo_Init(attrInfo); - AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position - AttrInfo_AddFixed(attrInfo, 1); // v1=color + // Configure attributes for use with the vertex shader + C3D_AttrInfo* attrInfo = C3D_GetAttrInfo(); + AttrInfo_Init(attrInfo); + AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position + AttrInfo_AddFixed(attrInfo, 1); // v1=color - // Set the fixed attribute (color) to a colour depending on the emulator + // Set the fixed attribute (color) to a colour depending on the emulator Platform platform = getPlatform(); switch (platform) { @@ -104,78 +104,78 @@ static void sceneInit(void) { break; } - // Compute the projection matrix - Mtx_OrthoTilt(&projection, 0.0, 400.0, 0.0, 240.0, 0.0, 1.0, true); + // Compute the projection matrix + Mtx_OrthoTilt(&projection, 0.0, 400.0, 0.0, 240.0, 0.0, 1.0, true); - // Create the VBO (vertex buffer object) - vbo_data = linearAlloc(sizeof(vertex_list)); - memcpy(vbo_data, vertex_list, sizeof(vertex_list)); + // Create the VBO (vertex buffer object) + vbo_data = linearAlloc(sizeof(vertex_list)); + memcpy(vbo_data, vertex_list, sizeof(vertex_list)); - // Configure buffers - C3D_BufInfo* bufInfo = C3D_GetBufInfo(); - BufInfo_Init(bufInfo); - BufInfo_Add(bufInfo, vbo_data, sizeof(vertex), 1, 0x0); + // Configure buffers + C3D_BufInfo* bufInfo = C3D_GetBufInfo(); + BufInfo_Init(bufInfo); + BufInfo_Add(bufInfo, vbo_data, sizeof(vertex), 1, 0x0); - // Configure the first fragment shading substage to just pass through the vertex color - // See https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml for more insight - C3D_TexEnv* env = C3D_GetTexEnv(0); - C3D_TexEnvInit(env); - C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR, 0, 0); - C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); + // Configure the first fragment shading substage to just pass through the vertex color + // See https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml for more insight + C3D_TexEnv* env = C3D_GetTexEnv(0); + C3D_TexEnvInit(env); + C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR, 0, 0); + C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); } static void sceneRender(void) { - // Update the uniforms - C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &projection); + // Update the uniforms + C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &projection); - // Draw the VBO - C3D_DrawArrays(GPU_TRIANGLES, 0, vertex_list_count); + // Draw the VBO + C3D_DrawArrays(GPU_TRIANGLES, 0, vertex_list_count); } static void sceneExit(void) { - // Free the VBO - linearFree(vbo_data); + // Free the VBO + linearFree(vbo_data); - // Free the shader program - shaderProgramFree(&program); - DVLB_Free(vshader_dvlb); + // Free the shader program + shaderProgramFree(&program); + DVLB_Free(vshader_dvlb); } int main() { emuPrint("Entering main\n"); - // Initialize graphics - gfxInitDefault(); - C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); + // Initialize graphics + gfxInitDefault(); + C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); - // Initialize the render target - C3D_RenderTarget* target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); - C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); + // Initialize the render target + C3D_RenderTarget* target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); + C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); - // Initialize the scene - sceneInit(); + // Initialize the scene + sceneInit(); - // Main loop - while (true) - { - // Render the scene + // Main loop + while (true) + { + // Render the scene emuPrint("Entering C3D_FrameBegin"); - C3D_FrameBegin(C3D_FRAME_SYNCDRAW); + C3D_FrameBegin(C3D_FRAME_SYNCDRAW); emuPrint("Clearing render target"); - C3D_RenderTargetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); + C3D_RenderTargetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); emuPrint("Calling C3D_FrameDrawOn"); - C3D_FrameDrawOn(target); + C3D_FrameDrawOn(target); emuPrint("Calling sceneRender"); - sceneRender(); + sceneRender(); emuPrint("Entering C3D_FrameEnd"); - C3D_FrameEnd(0); + C3D_FrameEnd(0); emuPrint("Exited C3D_FrameEnd"); - } + } - // Deinitialize the scene - sceneExit(); + // Deinitialize the scene + sceneExit(); - // Deinitialize graphics - C3D_Fini(); - gfxExit(); - return 0; + // Deinitialize graphics + C3D_Fini(); + gfxExit(); + return 0; } diff --git a/tests/HelloWorldSVC/source/main.c b/tests/HelloWorldSVC/source/main.c index 073c14a1..7c2a0972 100644 --- a/tests/HelloWorldSVC/source/main.c +++ b/tests/HelloWorldSVC/source/main.c @@ -1,4 +1,5 @@ #include <3ds.h> +#include #include #include #include @@ -15,5 +16,5 @@ int main(int argc, char** argv) { __asm__ volatile ("" ::: "memory"); } - return 0; + return 0; } diff --git a/tests/ImmediateModeTriangles/source/main.c b/tests/ImmediateModeTriangles/source/main.c index 57fd15be..4eda609f 100644 --- a/tests/ImmediateModeTriangles/source/main.c +++ b/tests/ImmediateModeTriangles/source/main.c @@ -6,9 +6,9 @@ #define CLEAR_COLOR 0x68B0D8FF #define DISPLAY_TRANSFER_FLAGS \ - (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ - GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ - GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) + (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ + GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ + GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) static DVLB_s* vshader_dvlb; static shaderProgram_s program; @@ -17,105 +17,105 @@ static C3D_Mtx projection; static void sceneInit(void) { - // Load the vertex shader, create a shader program and bind it - vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size); - shaderProgramInit(&program); - shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); - C3D_BindProgram(&program); + // Load the vertex shader, create a shader program and bind it + vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size); + shaderProgramInit(&program); + shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); + C3D_BindProgram(&program); - // Get the location of the uniforms - uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); + // Get the location of the uniforms + uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); - // Configure attributes for use with the vertex shader - // Attribute format and element count are ignored in immediate mode - C3D_AttrInfo* attrInfo = C3D_GetAttrInfo(); - AttrInfo_Init(attrInfo); - AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position - AttrInfo_AddLoader(attrInfo, 1, GPU_FLOAT, 3); // v1=color + // Configure attributes for use with the vertex shader + // Attribute format and element count are ignored in immediate mode + C3D_AttrInfo* attrInfo = C3D_GetAttrInfo(); + AttrInfo_Init(attrInfo); + AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position + AttrInfo_AddLoader(attrInfo, 1, GPU_FLOAT, 3); // v1=color - // Compute the projection matrix - Mtx_OrthoTilt(&projection, 0.0, 400.0, 0.0, 240.0, 0.0, 1.0, true); + // Compute the projection matrix + Mtx_OrthoTilt(&projection, 0.0, 400.0, 0.0, 240.0, 0.0, 1.0, true); - // Configure the first fragment shading substage to just pass through the vertex color - // See https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml for more insight - C3D_TexEnv* env = C3D_GetTexEnv(0); - C3D_TexEnvInit(env); - C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR, 0, 0); - C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); + // Configure the first fragment shading substage to just pass through the vertex color + // See https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml for more insight + C3D_TexEnv* env = C3D_GetTexEnv(0); + C3D_TexEnvInit(env); + C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR, 0, 0); + C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); } static void sceneRender(void) { - // Update the uniforms - C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &projection); + // Update the uniforms + C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &projection); - // Draw the triangle directly - C3D_ImmDrawBegin(GPU_TRIANGLES); + // Draw the triangle directly + C3D_ImmDrawBegin(GPU_TRIANGLES); // Triangle 1 - C3D_ImmSendAttrib(200.0f, 200.0f, 0.5f, 0.0f); // v0=position - C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); // v1=color + C3D_ImmSendAttrib(200.0f, 200.0f, 0.5f, 0.0f); // v0=position + C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); // v1=color - C3D_ImmSendAttrib(100.0f, 40.0f, 0.5f, 0.0f); - C3D_ImmSendAttrib(0.0f, 1.0f, 0.0f, 1.0f); + C3D_ImmSendAttrib(100.0f, 40.0f, 0.5f, 0.0f); + C3D_ImmSendAttrib(0.0f, 1.0f, 0.0f, 1.0f); - C3D_ImmSendAttrib(300.0f, 40.0f, 0.5f, 0.0f); - C3D_ImmSendAttrib(0.0f, 0.0f, 1.0f, 1.0f); + C3D_ImmSendAttrib(300.0f, 40.0f, 0.5f, 0.0f); + C3D_ImmSendAttrib(0.0f, 0.0f, 1.0f, 1.0f); // Triangle 2 C3D_ImmSendAttrib(10.0f, 20.0f, 0.5f, 0.0f); - C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); + C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); C3D_ImmSendAttrib(90.0f, 20.0f, 0.5f, 0.0f); - C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); + C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); C3D_ImmSendAttrib(40.0f, 40.0f, 0.5f, 0.0f); - C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); - C3D_ImmDrawEnd(); + C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); + C3D_ImmDrawEnd(); } static void sceneExit(void) { - // Free the shader program - shaderProgramFree(&program); - DVLB_Free(vshader_dvlb); + // Free the shader program + shaderProgramFree(&program); + DVLB_Free(vshader_dvlb); } int main() { - // Initialize graphics - gfxInitDefault(); - C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); + // Initialize graphics + gfxInitDefault(); + C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); - // Initialize the render target - C3D_RenderTarget* target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); - C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); + // Initialize the render target + C3D_RenderTarget* target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); + C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); - // Initialize the scene - sceneInit(); + // Initialize the scene + sceneInit(); - // Main loop - while (aptMainLoop()) - { - hidScanInput(); + // Main loop + while (aptMainLoop()) + { + hidScanInput(); - // Respond to user input - u32 kDown = hidKeysDown(); - if (kDown & KEY_START) - break; // break in order to return to hbmenu + // Respond to user input + u32 kDown = hidKeysDown(); + if (kDown & KEY_START) + break; // break in order to return to hbmenu - // Render the scene - C3D_FrameBegin(C3D_FRAME_SYNCDRAW); - C3D_RenderTargetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); - C3D_FrameDrawOn(target); - sceneRender(); - C3D_FrameEnd(0); - } + // Render the scene + C3D_FrameBegin(C3D_FRAME_SYNCDRAW); + C3D_RenderTargetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); + C3D_FrameDrawOn(target); + sceneRender(); + C3D_FrameEnd(0); + } - // Deinitialize the scene - sceneExit(); + // Deinitialize the scene + sceneExit(); - // Deinitialize graphics - C3D_Fini(); - gfxExit(); - return 0; + // Deinitialize graphics + C3D_Fini(); + gfxExit(); + return 0; } diff --git a/tests/PICA_LITP/Makefile b/tests/PICA_LITP/Makefile deleted file mode 100644 index 46a94048..00000000 --- a/tests/PICA_LITP/Makefile +++ /dev/null @@ -1,255 +0,0 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- - -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif - -TOPDIR ?= $(CURDIR) -include $(DEVKITARM)/3ds_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# DATA is a list of directories containing data files -# INCLUDES is a list of directories containing header files -# GRAPHICS is a list of directories containing graphics files -# GFXBUILD is the directory where converted graphics files will be placed -# If set to $(BUILD), it will statically link in the converted -# files as if they were data files. -# -# NO_SMDH: if set to anything, no SMDH file is generated. -# ROMFS is the directory which contains the RomFS, relative to the Makefile (Optional) -# APP_TITLE is the name of the app stored in the SMDH file (Optional) -# APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional) -# APP_AUTHOR is the author of the app stored in the SMDH file (Optional) -# ICON is the filename of the icon (.png), relative to the project folder. -# If not set, it attempts to use one of the following (in this order): -# - .png -# - icon.png -# - /default_icon.png -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := include -GRAPHICS := gfx -GFXBUILD := $(BUILD) -#ROMFS := romfs -#GFXBUILD := $(ROMFS)/gfx - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft - -CFLAGS := -g -Wall -O2 -mword-relocations \ - -ffunction-sections \ - $(ARCH) - -CFLAGS += $(INCLUDE) -D__3DS__ - -CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 - -ASFLAGS := -g $(ARCH) -LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) - -LIBS := -lcitro3d -lctru -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(CTRULIB) - - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) -export TOPDIR := $(CURDIR) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -PICAFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.v.pica))) -SHLISTFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.shlist))) -GFXFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.t3s))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -#--------------------------------------------------------------------------------- -ifeq ($(GFXBUILD),$(BUILD)) -#--------------------------------------------------------------------------------- -export T3XFILES := $(GFXFILES:.t3s=.t3x) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- -export ROMFS_T3XFILES := $(patsubst %.t3s, $(GFXBUILD)/%.t3x, $(GFXFILES)) -export T3XHFILES := $(patsubst %.t3s, $(BUILD)/%.h, $(GFXFILES)) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) \ - $(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o) \ - $(addsuffix .o,$(T3XFILES)) - -export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PICAFILES:.v.pica=_shbin.h) $(SHLISTFILES:.shlist=_shbin.h) \ - $(addsuffix .h,$(subst .,_,$(BINFILES))) \ - $(GFXFILES:.t3s=.h) - -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) - -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -export _3DSXDEPS := $(if $(NO_SMDH),,$(OUTPUT).smdh) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.png) - ifneq (,$(findstring $(TARGET).png,$(icons))) - export APP_ICON := $(TOPDIR)/$(TARGET).png - else - ifneq (,$(findstring icon.png,$(icons))) - export APP_ICON := $(TOPDIR)/icon.png - endif - endif -else - export APP_ICON := $(TOPDIR)/$(ICON) -endif - -ifeq ($(strip $(NO_SMDH)),) - export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh -endif - -ifneq ($(ROMFS),) - export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS) -endif - -.PHONY: all clean - -#--------------------------------------------------------------------------------- -all: $(BUILD) $(GFXBUILD) $(DEPSDIR) $(ROMFS_T3XFILES) $(T3XHFILES) - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -$(BUILD): - @mkdir -p $@ - -ifneq ($(GFXBUILD),$(BUILD)) -$(GFXBUILD): - @mkdir -p $@ -endif - -ifneq ($(DEPSDIR),$(BUILD)) -$(DEPSDIR): - @mkdir -p $@ -endif - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf $(GFXBUILD) - -#--------------------------------------------------------------------------------- -$(GFXBUILD)/%.t3x $(BUILD)/%.h : %.t3s -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @tex3ds -i $< -H $(BUILD)/$*.h -d $(DEPSDIR)/$*.d -o $(GFXBUILD)/$*.t3x - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).3dsx : $(OUTPUT).elf $(_3DSXDEPS) - -$(OFILES_SOURCES) : $(HFILES) - -$(OUTPUT).elf : $(OFILES) - -#--------------------------------------------------------------------------------- -# you need a rule like this for each extension you use as binary data -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -.PRECIOUS : %.t3x -#--------------------------------------------------------------------------------- -%.t3x.o %_t3x.h : %.t3x -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# rules for assembling GPU shaders -#--------------------------------------------------------------------------------- -define shader-as - $(eval CURBIN := $*.shbin) - $(eval DEPSFILE := $(DEPSDIR)/$*.shbin.d) - echo "$(CURBIN).o: $< $1" > $(DEPSFILE) - echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(CURBIN) | tr . _)`.h - echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(CURBIN) | tr . _)`.h - echo "extern const u32" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(CURBIN) | tr . _)`.h - picasso -o $(CURBIN) $1 - bin2s $(CURBIN) | $(AS) -o $*.shbin.o -endef - -%.shbin.o %_shbin.h : %.v.pica %.g.pica - @echo $(notdir $^) - @$(call shader-as,$^) - -%.shbin.o %_shbin.h : %.v.pica - @echo $(notdir $<) - @$(call shader-as,$<) - -%.shbin.o %_shbin.h : %.shlist - @echo $(notdir $<) - @$(call shader-as,$(foreach file,$(shell cat $<),$(dir $<)$(file))) - -#--------------------------------------------------------------------------------- -%.t3x %.h : %.t3s -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @tex3ds -i $< -H $*.h -d $*.d -o $*.t3x - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- diff --git a/tests/PICA_LITP/source/main.c b/tests/PICA_LITP/source/main.c deleted file mode 100644 index ea5b112f..00000000 --- a/tests/PICA_LITP/source/main.c +++ /dev/null @@ -1,122 +0,0 @@ -#include <3ds.h> -#include -#include - -#include "vshader_shbin.h" - -#define CLEAR_COLOR 0x68B0D8FF - -#define DISPLAY_TRANSFER_FLAGS \ - (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | \ - GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) - -static DVLB_s* vshader_dvlb; -static shaderProgram_s program; -static int uLoc_projection; -static C3D_Mtx projection; - -static void sceneInit(void) { - // Load the vertex shader, create a shader program and bind it - vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size); - shaderProgramInit(&program); - shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); - C3D_BindProgram(&program); - - // Get the location of the uniforms - uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); - - // Configure attributes for use with the vertex shader - // Attribute format and element count are ignored in immediate mode - C3D_AttrInfo* attrInfo = C3D_GetAttrInfo(); - AttrInfo_Init(attrInfo); - AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position - AttrInfo_AddLoader(attrInfo, 1, GPU_FLOAT, 3); // v1=color - - // Compute the projection matrix - Mtx_OrthoTilt(&projection, 0.0, 400.0, 0.0, 240.0, 0.0, 1.0, true); - - // Configure the first fragment shading substage to just pass through the vertex color - // See https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml for more insight - C3D_TexEnv* env = C3D_GetTexEnv(0); - C3D_TexEnvInit(env); - C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR, 0, 0); - C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); -} - -static void sceneRender(void) { - // Update the uniforms - C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &projection); - - // Draw the triangle directly - C3D_ImmDrawBegin(GPU_TRIANGLES); - // Triangle 1 - // This vertex has r >= 0 and a >= 0 so the shader should output magenta (cmp.x = cmp.y = 1) - C3D_ImmSendAttrib(200.0f, 200.0f, 0.5f, 0.0f); // v0=position - C3D_ImmSendAttrib(1.0f, 0.0f, 0.0f, 1.0f); // v1=color - - // This vertex only has a >= 0, so the shader should output lime (cmp.x = 0, cmp.y = 1) - C3D_ImmSendAttrib(100.0f, 40.0f, 0.5f, 0.0f); - C3D_ImmSendAttrib(-0.5f, 1.0f, 0.0f, 1.0f); - - // This vertex only has r >= 0, so the shader should output cyan (cmp.x = 1, cmp.y = 0) - C3D_ImmSendAttrib(300.0f, 40.0f, 0.5f, 0.0f); - C3D_ImmSendAttrib(0.5f, 0.0f, 1.0f, -1.0f); - - // Triangle 2 - // The next 3 vertices have r < 0, a < 0, so the output of the shader should be the output of litp with alpha set to 1 (cmp.x = cmp.y = 0) - C3D_ImmSendAttrib(10.0f, 20.0f, 0.5f, 0.0f); - // Output g component should be 64 / 128 = 0.5 - C3D_ImmSendAttrib(-1.0f, 64.0f, 0.0f, -1.0f); - - C3D_ImmSendAttrib(90.0f, 20.0f, 0.5f, 0.0f); - // Output g component should be 128 / 128 = 1.0 - C3D_ImmSendAttrib(-1.0f, 256.0f, 1.0f, -1.0f); - - C3D_ImmSendAttrib(40.0f, 40.0f, 0.5f, 0.0f); - // Output g component should be 0 / 128 = 0 - C3D_ImmSendAttrib(-1.0f, 0.0f, 0.5f, -1.0f); - C3D_ImmDrawEnd(); -} - -static void sceneExit(void) { - // Free the shader program - shaderProgramFree(&program); - DVLB_Free(vshader_dvlb); -} - -int main() { - // Initialize graphics - gfxInitDefault(); - C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); - - // Initialize the render target - C3D_RenderTarget* target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); - C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); - - // Initialize the scene - sceneInit(); - - // Main loop - while (aptMainLoop()) { - hidScanInput(); - - // Respond to user input - u32 kDown = hidKeysDown(); - if (kDown & KEY_START) break; // break in order to return to hbmenu - - // Render the scene - C3D_FrameBegin(C3D_FRAME_SYNCDRAW); - C3D_RenderTargetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); - C3D_FrameDrawOn(target); - sceneRender(); - C3D_FrameEnd(0); - } - - // Deinitialize the scene - sceneExit(); - - // Deinitialize graphics - C3D_Fini(); - gfxExit(); - return 0; -} \ No newline at end of file diff --git a/tests/PICA_LITP/source/vshader.v.pica b/tests/PICA_LITP/source/vshader.v.pica deleted file mode 100644 index d745f939..00000000 --- a/tests/PICA_LITP/source/vshader.v.pica +++ /dev/null @@ -1,73 +0,0 @@ -; Example PICA200 vertex shader - -; Uniforms -.fvec projection[4] - -; Constants -.constf myconst(0.0, 1.0, -1.0, 0.1) -.constf myconst2(0.3, 0.0, 0.0, 0.0) -.alias zeros myconst.xxxx ; Vector full of zeros -.alias ones myconst.yyyy ; Vector full of ones - -.constf magenta(0.8, 0.192, 0.812, 1.0) -.constf cyan(0.137, 0.949, 0.906, 1.0) -.constf lime(0.286, 0.929, 0.412, 1.0) - -.constf normalize_y(1.0, 1.0/128.0, 1.0, 1.0) - -; Outputs -.out outpos position -.out outclr color - -; Inputs (defined as aliases for convenience) -.alias inpos v0 -.alias inclr v1 - -.bool test - -.proc main - ; Force the w component of inpos to be 1.0 - mov r0.xyz, inpos - mov r0.w, ones - - ; outpos = projectionMatrix * inpos - dp4 outpos.x, projection[0], r0 - dp4 outpos.y, projection[1], r0 - dp4 outpos.z, projection[2], r0 - dp4 outpos.w, projection[3], r0 - - ; Test litp via the output fragment colour - ; r1 = input colour - mov r1, inclr - - ; This should perform the following operation: - ; cmp = (x >= 0, w >= 0) - ; dest = ( max(x, 0), clamp(y, -128, +128 ), 0, max(w, 0) ); - litp r2, r1 - - ifc cmp.x - ifc cmp.y - ; cmp.x = 1, cmp.y = 1, write magenta - mov outclr, magenta - end - .else - ; cmp.x = 1, cmp.y = 0, write cyan - mov outclr, cyan - end - .end - .else - ifc cmp.y - ; cmp.x = 0, cmp.y - mov outclr, lime - end - .end - .end - - ; cmp.x 0, cmp.y = 0, write output of litp to out colour, with y normalized to [-1, 1] - mul r2.xyz, normalize_y, r2 - ; Set alpha to one - mov r2.a, ones.a - - mov outclr, r2 - end -.end \ No newline at end of file diff --git a/tests/SimplerTri/source/main.c b/tests/SimplerTri/source/main.c index e8fdc4fb..0ebd936d 100644 --- a/tests/SimplerTri/source/main.c +++ b/tests/SimplerTri/source/main.c @@ -6,17 +6,17 @@ #define CLEAR_COLOR 0x68B0D8FF #define DISPLAY_TRANSFER_FLAGS \ - (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ - GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ - GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) + (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ + GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ + GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) typedef struct { float x, y, z; } vertex; static const vertex vertex_list[] = { - { 200.0f, 200.0f, 0.5f }, - { 100.0f, 40.0f, 0.5f }, - { 300.0f, 40.0f, 0.5f }, + { 200.0f, 200.0f, 0.5f }, + { 100.0f, 40.0f, 0.5f }, + { 300.0f, 40.0f, 0.5f }, }; #define vertex_list_count (sizeof(vertex_list)/sizeof(vertex_list[0])) @@ -30,61 +30,61 @@ static void* vbo_data; static void sceneInit(void) { - // Load the vertex shader, create a shader program and bind it - vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size); - shaderProgramInit(&program); - shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); - C3D_BindProgram(&program); + // Load the vertex shader, create a shader program and bind it + vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size); + shaderProgramInit(&program); + shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); + C3D_BindProgram(&program); - // Get the location of the uniforms - uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); + // Get the location of the uniforms + uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); - // Configure attributes for use with the vertex shader - C3D_AttrInfo* attrInfo = C3D_GetAttrInfo(); - AttrInfo_Init(attrInfo); - AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position - AttrInfo_AddFixed(attrInfo, 1); // v1=color + // Configure attributes for use with the vertex shader + C3D_AttrInfo* attrInfo = C3D_GetAttrInfo(); + AttrInfo_Init(attrInfo); + AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position + AttrInfo_AddFixed(attrInfo, 1); // v1=color - // Set the fixed attribute (color) to orange - C3D_FixedAttribSet(1, 1.0, 0.5, 0.2, 1.0); + // Set the fixed attribute (color) to orange + C3D_FixedAttribSet(1, 1.0, 0.5, 0.2, 1.0); - // Compute the projection matrix - Mtx_OrthoTilt(&projection, 0.0, 400.0, 0.0, 240.0, 0.0, 1.0, true); + // Compute the projection matrix + Mtx_OrthoTilt(&projection, 0.0, 400.0, 0.0, 240.0, 0.0, 1.0, true); - // Create the VBO (vertex buffer object) - vbo_data = linearAlloc(sizeof(vertex_list)); - memcpy(vbo_data, vertex_list, sizeof(vertex_list)); + // Create the VBO (vertex buffer object) + vbo_data = linearAlloc(sizeof(vertex_list)); + memcpy(vbo_data, vertex_list, sizeof(vertex_list)); - // Configure buffers - C3D_BufInfo* bufInfo = C3D_GetBufInfo(); - BufInfo_Init(bufInfo); - BufInfo_Add(bufInfo, vbo_data, sizeof(vertex), 1, 0x0); + // Configure buffers + C3D_BufInfo* bufInfo = C3D_GetBufInfo(); + BufInfo_Init(bufInfo); + BufInfo_Add(bufInfo, vbo_data, sizeof(vertex), 1, 0x0); - // Configure the first fragment shading substage to just pass through the vertex color - // See https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml for more insight - C3D_TexEnv* env = C3D_GetTexEnv(0); - C3D_TexEnvInit(env); - C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR, 0, 0); - C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); + // Configure the first fragment shading substage to just pass through the vertex color + // See https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml for more insight + C3D_TexEnv* env = C3D_GetTexEnv(0); + C3D_TexEnvInit(env); + C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR, 0, 0); + C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); } static void sceneRender(void) { - // Update the uniforms - C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &projection); + // Update the uniforms + C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &projection); - // Draw the VBO - C3D_DrawArrays(GPU_TRIANGLES, 0, vertex_list_count); + // Draw the VBO + C3D_DrawArrays(GPU_TRIANGLES, 0, vertex_list_count); } static void sceneExit(void) { - // Free the VBO - linearFree(vbo_data); + // Free the VBO + linearFree(vbo_data); - // Free the shader program - shaderProgramFree(&program); - DVLB_Free(vshader_dvlb); + // Free the shader program + shaderProgramFree(&program); + DVLB_Free(vshader_dvlb); } // Print string in emulator terminal @@ -96,39 +96,39 @@ static void emuPrint(const char* str) int main() { emuPrint("Entering main\n"); - // Initialize graphics - gfxInitDefault(); - C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); + // Initialize graphics + gfxInitDefault(); + C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); - // Initialize the render target - C3D_RenderTarget* target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); - C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); + // Initialize the render target + C3D_RenderTarget* target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); + C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); - // Initialize the scene - sceneInit(); + // Initialize the scene + sceneInit(); - // Main loop - while (true) - { - // Render the scene + // Main loop + while (true) + { + // Render the scene emuPrint("Entering C3D_FrameBegin"); - C3D_FrameBegin(C3D_FRAME_SYNCDRAW); + C3D_FrameBegin(C3D_FRAME_SYNCDRAW); emuPrint("Clearing render target"); - C3D_RenderTargetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); + C3D_RenderTargetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); emuPrint("Calling C3D_FrameDrawOn"); - C3D_FrameDrawOn(target); + C3D_FrameDrawOn(target); emuPrint("Calling sceneRender"); - sceneRender(); + sceneRender(); emuPrint("Entering C3D_FrameEnd"); - C3D_FrameEnd(0); + C3D_FrameEnd(0); emuPrint("Exited C3D_FrameEnd"); - } + } - // Deinitialize the scene - sceneExit(); + // Deinitialize the scene + sceneExit(); - // Deinitialize graphics - C3D_Fini(); - gfxExit(); - return 0; + // Deinitialize graphics + C3D_Fini(); + gfxExit(); + return 0; } diff --git a/tests/shader.cpp b/tests/shader.cpp deleted file mode 100644 index 12929c55..00000000 --- a/tests/shader.cpp +++ /dev/null @@ -1,371 +0,0 @@ -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Floats; -static const nihstro::SourceRegister input0 = nihstro::SourceRegister::MakeInput(0); -static const nihstro::SourceRegister input1 = nihstro::SourceRegister::MakeInput(1); -static const nihstro::DestRegister output0 = nihstro::DestRegister::MakeOutput(0); - -static const std::array vectorOnes = { - Floats::f24::fromFloat32(1.0f), - Floats::f24::fromFloat32(1.0f), - Floats::f24::fromFloat32(1.0f), - Floats::f24::fromFloat32(1.0f), -}; - -static std::unique_ptr assembleVertexShader(std::initializer_list code) { - const auto shaderBinary = nihstro::InlineAsm::CompileToRawBinary(code); - auto newShader = std::make_unique(ShaderType::Vertex); - newShader->reset(); - - for (const nihstro::Instruction& instruction : shaderBinary.program) { - newShader->uploadWord(instruction.hex); - } - for (const nihstro::SwizzlePattern& swizzle : shaderBinary.swizzle_table) { - newShader->uploadDescriptor(swizzle.hex); - } - return newShader; -} - -class ShaderInterpreterTest { - protected: - std::unique_ptr shader = {}; - - virtual void runShader() { shader->run(); } - - public: - explicit ShaderInterpreterTest(std::initializer_list code) : shader(assembleVertexShader(code)) {} - - std::span> runTest(std::span> inputs) { - std::copy(inputs.begin(), inputs.end(), shader->inputs.begin()); - runShader(); - return shader->outputs; - } - - // Each input is written to the x component of sequential input registers - // The first output vector is returned - const std::array& runVector(std::initializer_list inputs) { - std::vector> inputsVec; - for (const float& input : inputs) { - const std::array inputVec = { - f24::fromFloat32(input), - f24::zero(), - f24::zero(), - f24::zero(), - }; - inputsVec.emplace_back(inputVec); - } - return runTest(inputsVec)[0]; - } - - // Each input is written to the x component of sequential input registers - // The x component of the first output - float runScalar(std::initializer_list inputs) { return runVector(inputs)[0].toFloat32(); } - - [[nodiscard]] std::array, 96>& floatUniforms() const { return shader->floatUniforms; } - [[nodiscard]] std::array, 4>& intUniforms() const { return shader->intUniforms; } - [[nodiscard]] u32& boolUniforms() const { return shader->boolUniform; } - - static std::unique_ptr assembleTest(std::initializer_list code) { - return std::make_unique(code); - } -}; - -#if defined(PANDA3DS_SHADER_JIT_SUPPORTED) -class ShaderJITTest final : public ShaderInterpreterTest { - private: - ShaderJIT shaderJit = {}; - - void runShader() override { - // We prefer to run tests with accurate NaN emulation - shaderJit.setAccurateMul(true); - shaderJit.run(*shader); - } - - public: - explicit ShaderJITTest(std::initializer_list code) : ShaderInterpreterTest(code) { shaderJit.prepare(*shader); } - - static std::unique_ptr assembleTest(std::initializer_list code) { - return std::make_unique(code); - } -}; -#define SHADER_TEST_CASE(NAME, TAG) TEMPLATE_TEST_CASE(NAME, TAG, ShaderInterpreterTest, ShaderJITTest) -#else -#define SHADER_TEST_CASE(NAME, TAG) TEMPLATE_TEST_CASE(NAME, TAG, ShaderInterpreterTest) -#endif - -namespace Catch { - template <> - struct StringMaker> { - static std::string convert(std::array value) { - return fmt::format("({}, {}, {}, {})", value[0].toFloat32(), value[1].toFloat32(), value[2].toFloat32(), value[3].toFloat32()); - } - }; -} // namespace Catch - -SHADER_TEST_CASE("ADD", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::ADD, output0, input0, input1}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({+1.0f, -1.0f}) == +0.0f); - REQUIRE(shader->runScalar({+0.0f, -0.0f}) == -0.0f); - REQUIRE(std::isnan(shader->runScalar({+INFINITY, -INFINITY}))); - REQUIRE(std::isinf(shader->runScalar({INFINITY, +1.0f}))); - REQUIRE(std::isinf(shader->runScalar({INFINITY, -1.0f}))); -} - -SHADER_TEST_CASE("MUL", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::MUL, output0, input0, input1}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({+1.0f, -1.0f}) == -1.0f); - REQUIRE(shader->runScalar({-1.0f, +1.0f}) == -1.0f); - REQUIRE(shader->runScalar({INFINITY, 0.0f}) == 0.0f); - REQUIRE(shader->runScalar({+INFINITY, +INFINITY}) == INFINITY); - REQUIRE(shader->runScalar({+INFINITY, -INFINITY}) == -INFINITY); - REQUIRE(std::isnan(shader->runScalar({NAN, 0.0f}))); -} - -SHADER_TEST_CASE("RCP", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::RCP, output0, input0}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({-0.0f}) == INFINITY); - REQUIRE(shader->runScalar({0.0f}) == INFINITY); - REQUIRE(shader->runScalar({INFINITY}) == 0.0f); - REQUIRE(std::isnan(shader->runScalar({NAN}))); - - REQUIRE(shader->runScalar({16.0f}) == Catch::Approx(0.0625f).margin(0.001f)); - REQUIRE(shader->runScalar({8.0f}) == Catch::Approx(0.125f).margin(0.001f)); - REQUIRE(shader->runScalar({4.0f}) == Catch::Approx(0.25f).margin(0.001f)); - REQUIRE(shader->runScalar({2.0f}) == Catch::Approx(0.5f).margin(0.001f)); - REQUIRE(shader->runScalar({1.0f}) == Catch::Approx(1.0f).margin(0.001f)); - REQUIRE(shader->runScalar({0.5f}) == Catch::Approx(2.0f).margin(0.001f)); - REQUIRE(shader->runScalar({0.25f}) == Catch::Approx(4.0f).margin(0.001f)); - REQUIRE(shader->runScalar({0.125f}) == Catch::Approx(8.0f).margin(0.002f)); - REQUIRE(shader->runScalar({0.0625f}) == Catch::Approx(16.0f).margin(0.004f)); -} - -SHADER_TEST_CASE("RSQ", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::RSQ, output0, input0}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({-0.0f}) == INFINITY); - REQUIRE(shader->runScalar({INFINITY}) == 0.0f); - REQUIRE(std::isnan(shader->runScalar({-2.0f}))); - REQUIRE(std::isnan(shader->runScalar({-INFINITY}))); - REQUIRE(std::isnan(shader->runScalar({NAN}))); - REQUIRE(shader->runScalar({16.0f}) == Catch::Approx(0.25f).margin(0.001f)); - REQUIRE(shader->runScalar({8.0f}) == Catch::Approx(1.0f / std::sqrt(8.0f)).margin(0.001f)); - REQUIRE(shader->runScalar({4.0f}) == Catch::Approx(0.5f).margin(0.001f)); - REQUIRE(shader->runScalar({2.0f}) == Catch::Approx(1.0f / std::sqrt(2.0f)).margin(0.001f)); - REQUIRE(shader->runScalar({1.0f}) == Catch::Approx(1.0f).margin(0.001f)); - REQUIRE(shader->runScalar({0.5f}) == Catch::Approx(1.0f / std::sqrt(0.5f)).margin(0.001f)); - REQUIRE(shader->runScalar({0.25f}) == Catch::Approx(2.0f).margin(0.001f)); - REQUIRE(shader->runScalar({0.125f}) == Catch::Approx(1.0 / std::sqrt(0.125)).margin(0.002f)); - REQUIRE(shader->runScalar({0.0625f}) == Catch::Approx(4.0f).margin(0.004f)); -} - -SHADER_TEST_CASE("LG2", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::LG2, output0, input0}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(std::isnan(shader->runScalar({NAN}))); - REQUIRE(std::isnan(shader->runScalar({-1.f}))); - REQUIRE(std::isinf(shader->runScalar({0.f}))); - REQUIRE(shader->runScalar({4.f}) == Catch::Approx(2.f)); - REQUIRE(shader->runScalar({64.f}) == Catch::Approx(6.f)); - REQUIRE(shader->runScalar({1.e24f}) == Catch::Approx(79.7262742773f)); -} - -SHADER_TEST_CASE("EX2", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::EX2, output0, input0}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(std::isnan(shader->runScalar({NAN}))); - REQUIRE(shader->runScalar({-800.f}) == Catch::Approx(0.f)); - REQUIRE(shader->runScalar({0.f}) == Catch::Approx(1.f)); - REQUIRE(shader->runScalar({2.f}) == Catch::Approx(4.f)); - REQUIRE(shader->runScalar({6.f}) == Catch::Approx(64.f)); - REQUIRE(shader->runScalar({79.7262742773f}) == Catch::Approx(1.e24f)); - REQUIRE(std::isinf(shader->runScalar({800.f}))); -} - -SHADER_TEST_CASE("MAX", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::MAX, output0, input0, input1}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({1.0f, 0.0f}) == 1.0f); - REQUIRE(shader->runScalar({0.0f, 1.0f}) == 1.0f); - REQUIRE(shader->runScalar({0.0f, +INFINITY}) == +INFINITY); - REQUIRE(shader->runScalar({0.0f, -INFINITY}) == -INFINITY); - REQUIRE(shader->runScalar({NAN, 0.0f}) == 0.0f); - REQUIRE(shader->runScalar({-INFINITY, +INFINITY}) == +INFINITY); - REQUIRE(std::isnan(shader->runScalar({0.0f, NAN}))); -} - -SHADER_TEST_CASE("MIN", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::MIN, output0, input0, input1}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({1.0f, 0.0f}) == 0.0f); - REQUIRE(shader->runScalar({0.0f, 1.0f}) == 0.0f); - REQUIRE(shader->runScalar({0.0f, +INFINITY}) == 0.0f); - REQUIRE(shader->runScalar({0.0f, -INFINITY}) == -INFINITY); - REQUIRE(shader->runScalar({NAN, 0.0f}) == 0.0f); - REQUIRE(shader->runScalar({-INFINITY, +INFINITY}) == -INFINITY); - REQUIRE(std::isnan(shader->runScalar({0.0f, NAN}))); -} - -SHADER_TEST_CASE("SGE", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::SGE, output0, input0, input1}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({INFINITY, 0.0f}) == 1.0f); - REQUIRE(shader->runScalar({0.0f, INFINITY}) == 0.0f); - REQUIRE(shader->runScalar({NAN, 0.0f}) == 0.0f); - REQUIRE(shader->runScalar({0.0f, NAN}) == 0.0f); - REQUIRE(shader->runScalar({+INFINITY, +INFINITY}) == 1.0f); - REQUIRE(shader->runScalar({+INFINITY, -INFINITY}) == 1.0f); - REQUIRE(shader->runScalar({-INFINITY, +INFINITY}) == 0.0f); - REQUIRE(shader->runScalar({+1.0f, -1.0f}) == 1.0f); - REQUIRE(shader->runScalar({-1.0f, +1.0f}) == 0.0f); -} - -SHADER_TEST_CASE("SLT", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::SLT, output0, input0, input1}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({INFINITY, 0.0f}) == 0.0f); - REQUIRE(shader->runScalar({0.0f, INFINITY}) == 1.0f); - REQUIRE(shader->runScalar({NAN, 0.0f}) == 0.0f); - REQUIRE(shader->runScalar({0.0f, NAN}) == 0.0f); - REQUIRE(shader->runScalar({+INFINITY, +INFINITY}) == 0.0f); - REQUIRE(shader->runScalar({+INFINITY, -INFINITY}) == 0.0f); - REQUIRE(shader->runScalar({-INFINITY, +INFINITY}) == 1.0f); - REQUIRE(shader->runScalar({+1.0f, -1.0f}) == 0.0f); - REQUIRE(shader->runScalar({-1.0f, +1.0f}) == 1.0f); -} - -SHADER_TEST_CASE("FLR", "[shader][vertex]") { - const auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::FLR, output0, input0}, - {nihstro::OpCode::Id::END}, - }); - - REQUIRE(shader->runScalar({0.5}) == 0.0f); - REQUIRE(shader->runScalar({-0.5}) == -1.0f); - REQUIRE(shader->runScalar({1.5}) == 1.0f); - REQUIRE(shader->runScalar({-1.5}) == -2.0f); - REQUIRE(std::isnan(shader->runScalar({NAN}))); - REQUIRE(std::isinf(shader->runScalar({INFINITY}))); -} - -SHADER_TEST_CASE("Uniform Read", "[shader][vertex][uniform]") { - const auto constant0 = nihstro::SourceRegister::MakeFloat(0); - auto shader = TestType::assembleTest({ - {nihstro::OpCode::Id::MOVA, nihstro::DestRegister{}, "x", input0, "x", nihstro::SourceRegister{}, "", - nihstro::InlineAsm::RelativeAddress::A1}, - {nihstro::OpCode::Id::MOV, output0, "xyzw", constant0, "xyzw", nihstro::SourceRegister{}, "", nihstro::InlineAsm::RelativeAddress::A1}, - {nihstro::OpCode::Id::END}, - }); - - // Generate float uniforms - std::array, 96> floatUniforms = {}; - for (u32 i = 0; i < 96; ++i) { - const float color = (i * 2.0f) / 255.0f; - const Floats::f24 color24 = Floats::f24::fromFloat32(color); - const std::array testValue = {color24, color24, color24, Floats::f24::fromFloat32(1.0f)}; - shader->floatUniforms()[i] = testValue; - floatUniforms[i] = testValue; - } - - for (u32 i = 0; i < 96; ++i) { - const float index = static_cast(i); - // Intentionally use some fractional values to verify float->integer - // truncation during address translation - const float fractional = (i % 17) / 17.0f; - - REQUIRE(shader->runVector({index + fractional}) == floatUniforms[i]); - } -} - -SHADER_TEST_CASE("Address Register Offset", "[video_core][shader][shader_jit]") { - const auto constant40 = nihstro::SourceRegister::MakeFloat(40); - auto shader = TestType::assembleTest({ - // mova a0.x, sh_input.x - {nihstro::OpCode::Id::MOVA, nihstro::DestRegister{}, "x", input0, "x", nihstro::SourceRegister{}, "", - nihstro::InlineAsm::RelativeAddress::A1}, - // mov sh_output.xyzw, c40[a0.x].xyzw - {nihstro::OpCode::Id::MOV, output0, "xyzw", constant40, "xyzw", nihstro::SourceRegister{}, "", nihstro::InlineAsm::RelativeAddress::A1}, - {nihstro::OpCode::Id::END}, - }); - - // Generate uniforms - const bool inverted = true; - std::array, 96> floatUniforms = {}; - for (u8 i = 0; i < 0x80; i++) { - // Float uniforms - if (i >= 0x00 && i < 0x60) { - const u32 base = inverted ? (0x60 - i) : i; - const auto color = (base * 2.f) / 255.0f; - const auto color24 = Floats::f24::fromFloat32(color); - const std::array testValue = {color24, color24, color24, Floats::f24::fromFloat32(1.0f)}; - shader->floatUniforms()[i] = testValue; - floatUniforms[i] = testValue; - } - // Integer uniforms - else if (i >= 0x60 && i < 0x64) { - const u8 color = static_cast((i - 0x60) * 0x10); - shader->intUniforms()[i - 0x60] = {color, color, color, 255}; - } - // Bool uniforms(bools packed into an integer) - else if (i >= 0x70 && i < 0x80) { - shader->boolUniforms() |= (i >= 0x78) << (i - 0x70); - } - } - - REQUIRE(shader->runVector({0.f}) == floatUniforms[40]); - REQUIRE(shader->runVector({13.f}) == floatUniforms[53]); - REQUIRE(shader->runVector({50.f}) == floatUniforms[90]); - REQUIRE(shader->runVector({60.f}) == vectorOnes); - REQUIRE(shader->runVector({74.f}) == vectorOnes); - REQUIRE(shader->runVector({87.f}) == vectorOnes); - REQUIRE(shader->runVector({88.f}) == floatUniforms[0]); - REQUIRE(shader->runVector({128.f}) == floatUniforms[40]); - REQUIRE(shader->runVector({-40.f}) == floatUniforms[0]); - REQUIRE(shader->runVector({-42.f}) == vectorOnes); - REQUIRE(shader->runVector({-70.f}) == vectorOnes); - REQUIRE(shader->runVector({-73.f}) == floatUniforms[95]); - REQUIRE(shader->runVector({-127.f}) == floatUniforms[41]); - REQUIRE(shader->runVector({-129.f}) == floatUniforms[40]); -} diff --git a/third_party/Catch2 b/third_party/Catch2 deleted file mode 160000 index 4acc5182..00000000 --- a/third_party/Catch2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4acc51828f7f93f3b2058a63f54d112af4034503 diff --git a/third_party/LuaJIT b/third_party/LuaJIT deleted file mode 160000 index 8bf7686d..00000000 --- a/third_party/LuaJIT +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8bf7686d820f868eae1a522c481fee09c18c90b9 diff --git a/third_party/SDL2 b/third_party/SDL2 index f48a96a9..379d4780 160000 --- a/third_party/SDL2 +++ b/third_party/SDL2 @@ -1 +1 @@ -Subproject commit f48a96a976b50d1faae70598e71bfaf8f4526347 +Subproject commit 379d4780559690a9836444aeb5637f60953947be diff --git a/third_party/boost b/third_party/boost index 4532ae23..66937ea6 160000 --- a/third_party/boost +++ b/third_party/boost @@ -1 +1 @@ -Subproject commit 4532ae239c4d0b88a547d28e19348c3b05bfd4d6 +Subproject commit 66937ea62d126a92b5057e3fd9ceac7c44daf4f5 diff --git a/third_party/capstone b/third_party/capstone deleted file mode 160000 index eb4fc2d7..00000000 --- a/third_party/capstone +++ /dev/null @@ -1 +0,0 @@ -Subproject commit eb4fc2d7612db10379adf7aeb287a7923dcc0fc7 diff --git a/third_party/cityhash/swap.hpp b/third_party/cityhash/swap.hpp new file mode 100644 index 00000000..b7db9226 --- /dev/null +++ b/third_party/cityhash/swap.hpp @@ -0,0 +1,718 @@ +// Copyright (c) 2012- PPSSPP Project / Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0 or later versions. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official git repository and contact information can be found at +// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. + +#pragma once + +#include + +#if defined(_MSC_VER) +#include +#endif +#include +#include "helpers.hpp" + +// GCC +#ifdef __GNUC__ + +#if __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && !defined(COMMON_LITTLE_ENDIAN) +#define COMMON_LITTLE_ENDIAN 1 +#elif __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) && !defined(COMMON_BIG_ENDIAN) +#define COMMON_BIG_ENDIAN 1 +#endif + +// LLVM/clang +#elif defined(__clang__) + +#if __LITTLE_ENDIAN__ && !defined(COMMON_LITTLE_ENDIAN) +#define COMMON_LITTLE_ENDIAN 1 +#elif __BIG_ENDIAN__ && !defined(COMMON_BIG_ENDIAN) +#define COMMON_BIG_ENDIAN 1 +#endif + +// MSVC +#elif defined(_MSC_VER) && !defined(COMMON_BIG_ENDIAN) && !defined(COMMON_LITTLE_ENDIAN) + +#define COMMON_LITTLE_ENDIAN 1 +#endif + +// Worst case, default to little endian. +#if !COMMON_BIG_ENDIAN && !COMMON_LITTLE_ENDIAN +#define COMMON_LITTLE_ENDIAN 1 +#endif + +namespace Common { + +#ifdef _MSC_VER +[[nodiscard]] inline u16 swap16(u16 data) noexcept { + return _byteswap_ushort(data); +} +[[nodiscard]] inline u32 swap32(u32 data) noexcept { + return _byteswap_ulong(data); +} +[[nodiscard]] inline u64 swap64(u64 data) noexcept { + return _byteswap_uint64(data); +} +#elif defined(__clang__) || defined(__GNUC__) +#if defined(__Bitrig__) || defined(__OpenBSD__) +// redefine swap16, swap32, swap64 as inline functions +#undef swap16 +#undef swap32 +#undef swap64 +#endif +[[nodiscard]] inline u16 swap16(u16 data) noexcept { + return __builtin_bswap16(data); +} +[[nodiscard]] inline u32 swap32(u32 data) noexcept { + return __builtin_bswap32(data); +} +[[nodiscard]] inline u64 swap64(u64 data) noexcept { + return __builtin_bswap64(data); +} +#else +// Generic implementation. +[[nodiscard]] inline u16 swap16(u16 data) noexcept { + return (data >> 8) | (data << 8); +} +[[nodiscard]] inline u32 swap32(u32 data) noexcept { + return ((data & 0xFF000000U) >> 24) | ((data & 0x00FF0000U) >> 8) | + ((data & 0x0000FF00U) << 8) | ((data & 0x000000FFU) << 24); +} +[[nodiscard]] inline u64 swap64(u64 data) noexcept { + return ((data & 0xFF00000000000000ULL) >> 56) | ((data & 0x00FF000000000000ULL) >> 40) | + ((data & 0x0000FF0000000000ULL) >> 24) | ((data & 0x000000FF00000000ULL) >> 8) | + ((data & 0x00000000FF000000ULL) << 8) | ((data & 0x0000000000FF0000ULL) << 24) | + ((data & 0x000000000000FF00ULL) << 40) | ((data & 0x00000000000000FFULL) << 56); +} +#endif + +[[nodiscard]] inline float swapf(float f) noexcept { + static_assert(sizeof(u32) == sizeof(float), "float must be the same size as uint32_t."); + + u32 value; + std::memcpy(&value, &f, sizeof(u32)); + + value = swap32(value); + std::memcpy(&f, &value, sizeof(u32)); + + return f; +} + +[[nodiscard]] inline double swapd(double f) noexcept { + static_assert(sizeof(u64) == sizeof(double), "double must be the same size as uint64_t."); + + u64 value; + std::memcpy(&value, &f, sizeof(u64)); + + value = swap64(value); + std::memcpy(&f, &value, sizeof(u64)); + + return f; +} + +} // Namespace Common + +template +struct swap_struct_t { + using swapped_t = swap_struct_t; + +protected: + T value; + + static T swap(T v) { + return F::swap(v); + } + +public: + T swap() const { + return swap(value); + } + swap_struct_t() = default; + swap_struct_t(const T& v) : value(swap(v)) {} + + template + swapped_t& operator=(const S& source) { + value = swap(static_cast(source)); + return *this; + } + + operator s8() const { + return static_cast(swap()); + } + operator u8() const { + return static_cast(swap()); + } + operator s16() const { + return static_cast(swap()); + } + operator u16() const { + return static_cast(swap()); + } + operator s32() const { + return static_cast(swap()); + } + operator u32() const { + return static_cast(swap()); + } + operator s64() const { + return static_cast(swap()); + } + operator u64() const { + return static_cast(swap()); + } + operator float() const { + return static_cast(swap()); + } + operator double() const { + return static_cast(swap()); + } + + // +v + swapped_t operator+() const { + return +swap(); + } + // -v + swapped_t operator-() const { + return -swap(); + } + + // v / 5 + swapped_t operator/(const swapped_t& i) const { + return swap() / i.swap(); + } + template + swapped_t operator/(const S& i) const { + return swap() / i; + } + + // v * 5 + swapped_t operator*(const swapped_t& i) const { + return swap() * i.swap(); + } + template + swapped_t operator*(const S& i) const { + return swap() * i; + } + + // v + 5 + swapped_t operator+(const swapped_t& i) const { + return swap() + i.swap(); + } + template + swapped_t operator+(const S& i) const { + return swap() + static_cast(i); + } + // v - 5 + swapped_t operator-(const swapped_t& i) const { + return swap() - i.swap(); + } + template + swapped_t operator-(const S& i) const { + return swap() - static_cast(i); + } + + // v += 5 + swapped_t& operator+=(const swapped_t& i) { + value = swap(swap() + i.swap()); + return *this; + } + template + swapped_t& operator+=(const S& i) { + value = swap(swap() + static_cast(i)); + return *this; + } + // v -= 5 + swapped_t& operator-=(const swapped_t& i) { + value = swap(swap() - i.swap()); + return *this; + } + template + swapped_t& operator-=(const S& i) { + value = swap(swap() - static_cast(i)); + return *this; + } + + // ++v + swapped_t& operator++() { + value = swap(swap() + 1); + return *this; + } + // --v + swapped_t& operator--() { + value = swap(swap() - 1); + return *this; + } + + // v++ + swapped_t operator++(int) { + swapped_t old = *this; + value = swap(swap() + 1); + return old; + } + // v-- + swapped_t operator--(int) { + swapped_t old = *this; + value = swap(swap() - 1); + return old; + } + // Comparaison + // v == i + bool operator==(const swapped_t& i) const { + return swap() == i.swap(); + } + template + bool operator==(const S& i) const { + return swap() == i; + } + + // v != i + bool operator!=(const swapped_t& i) const { + return swap() != i.swap(); + } + template + bool operator!=(const S& i) const { + return swap() != i; + } + + // v > i + bool operator>(const swapped_t& i) const { + return swap() > i.swap(); + } + template + bool operator>(const S& i) const { + return swap() > i; + } + + // v < i + bool operator<(const swapped_t& i) const { + return swap() < i.swap(); + } + template + bool operator<(const S& i) const { + return swap() < i; + } + + // v >= i + bool operator>=(const swapped_t& i) const { + return swap() >= i.swap(); + } + template + bool operator>=(const S& i) const { + return swap() >= i; + } + + // v <= i + bool operator<=(const swapped_t& i) const { + return swap() <= i.swap(); + } + template + bool operator<=(const S& i) const { + return swap() <= i; + } + + // logical + swapped_t operator!() const { + return !swap(); + } + + // bitmath + swapped_t operator~() const { + return ~swap(); + } + + swapped_t operator&(const swapped_t& b) const { + return swap() & b.swap(); + } + template + swapped_t operator&(const S& b) const { + return swap() & b; + } + swapped_t& operator&=(const swapped_t& b) { + value = swap(swap() & b.swap()); + return *this; + } + template + swapped_t& operator&=(const S b) { + value = swap(swap() & b); + return *this; + } + + swapped_t operator|(const swapped_t& b) const { + return swap() | b.swap(); + } + template + swapped_t operator|(const S& b) const { + return swap() | b; + } + swapped_t& operator|=(const swapped_t& b) { + value = swap(swap() | b.swap()); + return *this; + } + template + swapped_t& operator|=(const S& b) { + value = swap(swap() | b); + return *this; + } + + swapped_t operator^(const swapped_t& b) const { + return swap() ^ b.swap(); + } + template + swapped_t operator^(const S& b) const { + return swap() ^ b; + } + swapped_t& operator^=(const swapped_t& b) { + value = swap(swap() ^ b.swap()); + return *this; + } + template + swapped_t& operator^=(const S& b) { + value = swap(swap() ^ b); + return *this; + } + + template + swapped_t operator<<(const S& b) const { + return swap() << b; + } + template + swapped_t& operator<<=(const S& b) const { + value = swap(swap() << b); + return *this; + } + + template + swapped_t operator>>(const S& b) const { + return swap() >> b; + } + template + swapped_t& operator>>=(const S& b) const { + value = swap(swap() >> b); + return *this; + } + + // Member + /** todo **/ + + // Arithmetics + template + friend S operator+(const S& p, const swapped_t v); + + template + friend S operator-(const S& p, const swapped_t v); + + template + friend S operator/(const S& p, const swapped_t v); + + template + friend S operator*(const S& p, const swapped_t v); + + template + friend S operator%(const S& p, const swapped_t v); + + // Arithmetics + assignments + template + friend S operator+=(const S& p, const swapped_t v); + + template + friend S operator-=(const S& p, const swapped_t v); + + // Bitmath + template + friend S operator&(const S& p, const swapped_t v); + + // Comparison + template + friend bool operator<(const S& p, const swapped_t v); + + template + friend bool operator>(const S& p, const swapped_t v); + + template + friend bool operator<=(const S& p, const swapped_t v); + + template + friend bool operator>=(const S& p, const swapped_t v); + + template + friend bool operator!=(const S& p, const swapped_t v); + + template + friend bool operator==(const S& p, const swapped_t v); +}; + +// Arithmetics +template +S operator+(const S& i, const swap_struct_t v) { + return i + v.swap(); +} + +template +S operator-(const S& i, const swap_struct_t v) { + return i - v.swap(); +} + +template +S operator/(const S& i, const swap_struct_t v) { + return i / v.swap(); +} + +template +S operator*(const S& i, const swap_struct_t v) { + return i * v.swap(); +} + +template +S operator%(const S& i, const swap_struct_t v) { + return i % v.swap(); +} + +// Arithmetics + assignments +template +S& operator+=(S& i, const swap_struct_t v) { + i += v.swap(); + return i; +} + +template +S& operator-=(S& i, const swap_struct_t v) { + i -= v.swap(); + return i; +} + +// Logical +template +S operator&(const S& i, const swap_struct_t v) { + return i & v.swap(); +} + +template +S operator&(const swap_struct_t v, const S& i) { + return static_cast(v.swap() & i); +} + +// Comparaison +template +bool operator<(const S& p, const swap_struct_t v) { + return p < v.swap(); +} +template +bool operator>(const S& p, const swap_struct_t v) { + return p > v.swap(); +} +template +bool operator<=(const S& p, const swap_struct_t v) { + return p <= v.swap(); +} +template +bool operator>=(const S& p, const swap_struct_t v) { + return p >= v.swap(); +} +template +bool operator!=(const S& p, const swap_struct_t v) { + return p != v.swap(); +} +template +bool operator==(const S& p, const swap_struct_t v) { + return p == v.swap(); +} + +template +struct swap_64_t { + static T swap(T x) { + return static_cast(Common::swap64(x)); + } +}; + +template +struct swap_32_t { + static T swap(T x) { + return static_cast(Common::swap32(x)); + } +}; + +template +struct swap_16_t { + static T swap(T x) { + return static_cast(Common::swap16(x)); + } +}; + +template +struct swap_float_t { + static T swap(T x) { + return static_cast(Common::swapf(x)); + } +}; + +template +struct swap_double_t { + static T swap(T x) { + return static_cast(Common::swapd(x)); + } +}; + +template +struct swap_enum_t { + static_assert(std::is_enum_v); + using base = std::underlying_type_t; + +public: + swap_enum_t() = default; + swap_enum_t(const T& v) : value(swap(v)) {} + + swap_enum_t& operator=(const T& v) { + value = swap(v); + return *this; + } + + operator T() const { + return swap(value); + } + + explicit operator base() const { + return static_cast(swap(value)); + } + +protected: + T value{}; + // clang-format off + using swap_t = std::conditional_t< + std::is_same_v, swap_16_t, std::conditional_t< + std::is_same_v, swap_16_t, std::conditional_t< + std::is_same_v, swap_32_t, std::conditional_t< + std::is_same_v, swap_32_t, std::conditional_t< + std::is_same_v, swap_64_t, std::conditional_t< + std::is_same_v, swap_64_t, void>>>>>>; + // clang-format on + static T swap(T x) { + return static_cast(swap_t::swap(static_cast(x))); + } +}; + +struct SwapTag {}; // Use the different endianness from the system +struct KeepTag {}; // Use the same endianness as the system + +template +struct AddEndian; + +// KeepTag specializations + +template +struct AddEndian { + using type = T; +}; + +// SwapTag specializations + +template <> +struct AddEndian { + using type = u8; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template <> +struct AddEndian { + using type = s8; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template <> +struct AddEndian { + using type = swap_struct_t>; +}; + +template +struct AddEndian { + static_assert(std::is_enum_v); + using type = swap_enum_t; +}; + +// Alias LETag/BETag as KeepTag/SwapTag depending on the system +#if COMMON_LITTLE_ENDIAN + +using LETag = KeepTag; +using BETag = SwapTag; + +#else + +using BETag = KeepTag; +using LETag = SwapTag; + +#endif + +// Aliases for LE types +using u16_le = AddEndian::type; +using u32_le = AddEndian::type; +using u64_le = AddEndian::type; + +using s16_le = AddEndian::type; +using s32_le = AddEndian::type; +using s64_le = AddEndian::type; + +template +using enum_le = std::enable_if_t, typename AddEndian::type>; + +using float_le = AddEndian::type; +using double_le = AddEndian::type; + +// Aliases for BE types +using u16_be = AddEndian::type; +using u32_be = AddEndian::type; +using u64_be = AddEndian::type; + +using s16_be = AddEndian::type; +using s32_be = AddEndian::type; +using s64_be = AddEndian::type; + +template +using enum_be = std::enable_if_t, typename AddEndian::type>; + +using float_be = AddEndian::type; +using double_be = AddEndian::type; \ No newline at end of file diff --git a/third_party/cryptopp/CMakeLists.txt b/third_party/cryptopp/CMakeLists.txt index aa915e3f..887e80d2 100644 --- a/third_party/cryptopp/CMakeLists.txt +++ b/third_party/cryptopp/CMakeLists.txt @@ -209,10 +209,7 @@ function(DumpMachine output pattern) set(${output} 0 PARENT_SCOPE) else () - if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "" AND CMAKE_SYSTEM_PROCESSOR MATCHES ${pattern}) - set(${output} TRUE PARENT_SCOPE) - endif() - if(CMAKE_OSX_ARCHITECTURES MATCHES ${pattern}) + if(CMAKE_SYSTEM_PROCESSOR MATCHES ${pattern}) set(${output} TRUE PARENT_SCOPE) endif() endif() @@ -446,8 +443,7 @@ find_package(Threads) target_link_libraries(cryptopp PRIVATE ${CMAKE_THREAD_LIBS_INIT}) if(ANDROID) - include_directories(${ANDROID_NDK}/sources/android/cpufeatures) - add_library(cpufeatures ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c) - target_link_libraries(cpufeatures dl) + include(AndroidNdkModules) + android_ndk_import_module_cpufeatures() target_link_libraries(cryptopp PRIVATE cpufeatures) endif() diff --git a/third_party/cryptoppwin/CMakeLists.txt b/third_party/cryptoppwin/CMakeLists.txt deleted file mode 100644 index 926fb483..00000000 --- a/third_party/cryptoppwin/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -add_library(cryptoppwin SHARED IMPORTED GLOBAL) - -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set_target_properties(cryptoppwin PROPERTIES IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib/cryptlibd.lib") -else() - set_target_properties(cryptoppwin PROPERTIES IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib/cryptlib.lib") -endif() \ No newline at end of file diff --git a/third_party/cryptoppwin/README.md b/third_party/cryptoppwin/README.md deleted file mode 100644 index 3a32b2c9..00000000 --- a/third_party/cryptoppwin/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# ext-cryptoppwin - -cryptopp library for windows - -This is the place for crypopp static library for linking with windows when using clang compiler with msvc since it is not supported - - diff --git a/third_party/cryptoppwin/include/cryptopp/3way.h b/third_party/cryptoppwin/include/cryptopp/3way.h deleted file mode 100644 index 868fa8ca..00000000 --- a/third_party/cryptoppwin/include/cryptopp/3way.h +++ /dev/null @@ -1,63 +0,0 @@ -// 3way.h - originally written and placed in the public domain by Wei Dai - -/// \file 3way.h -/// \brief Classes for the 3-Way block cipher - -#ifndef CRYPTOPP_THREEWAY_H -#define CRYPTOPP_THREEWAY_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief ThreeWay block cipher information -struct ThreeWay_Info : public FixedBlockSize<12>, public FixedKeyLength<12>, public VariableRounds<11> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "3-Way";} -}; - -/// \brief ThreeWay block cipher -/// \sa 3-Way -class ThreeWay : public ThreeWay_Info, public BlockCipherDocumentation -{ - /// \brief Class specific implementation and overrides used to operate the cipher. - /// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - - protected: - unsigned int m_rounds; - FixedSizeSecBlock m_k; - }; - - /// \brief Class specific methods used to operate the cipher in the forward direction. - /// \details Implementations and overrides in \p Enc apply to \p ENCRYPTION. - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Class specific methods used to operate the cipher in the reverse direction. - /// \details Implementations and overrides in \p Dec apply to \p DECRYPTION. - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef ThreeWay::Encryption ThreeWayEncryption; -typedef ThreeWay::Decryption ThreeWayDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/adler32.h b/third_party/cryptoppwin/include/cryptopp/adler32.h deleted file mode 100644 index 39f8deb5..00000000 --- a/third_party/cryptoppwin/include/cryptopp/adler32.h +++ /dev/null @@ -1,33 +0,0 @@ -// adler32.h - originally written and placed in the public domain by Wei Dai - -/// \file adler32.h -/// \brief Class file for ADLER-32 checksum calculations - -#ifndef CRYPTOPP_ADLER32_H -#define CRYPTOPP_ADLER32_H - -#include "cryptlib.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// ADLER-32 checksum calculations -class Adler32 : public HashTransformation -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = 4); - Adler32() {Reset();} - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *hash, size_t size); - unsigned int DigestSize() const {return DIGESTSIZE;} - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Adler32";} - std::string AlgorithmName() const {return StaticAlgorithmName();} - -private: - void Reset() {m_s1 = 1; m_s2 = 0;} - - word16 m_s1, m_s2; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/adv_simd.h b/third_party/cryptoppwin/include/cryptopp/adv_simd.h deleted file mode 100644 index 963d58ee..00000000 --- a/third_party/cryptoppwin/include/cryptopp/adv_simd.h +++ /dev/null @@ -1,1281 +0,0 @@ -// adv_simd.h - written and placed in the public domain by Jeffrey Walton - -/// \file adv_simd.h -/// \brief Template for AdvancedProcessBlocks and SIMD processing - -// The SIMD based implementations for ciphers that use SSE, NEON and Power7 -// have a common pattern. Namely, they have a specialized implementation of -// AdvancedProcessBlocks which processes multiple block using hardware -// acceleration. After several implementations we noticed a lot of copy and -// paste occurring. adv_simd.h provides a template to avoid the copy and paste. -// -// There are 6 templates provided in this file. The number following the -// function name, 128, is the block size in bits. The name following the -// block size is the arrangement and acceleration. For example 4x1_SSE means -// Intel SSE using two encrypt (or decrypt) functions: one that operates on -// 4 SIMD words, and one that operates on 1 SIMD words. -// -// * AdvancedProcessBlocks128_4x1_SSE -// * AdvancedProcessBlocks128_6x2_SSE -// * AdvancedProcessBlocks128_4x1_NEON -// * AdvancedProcessBlocks128_6x1_NEON -// * AdvancedProcessBlocks128_4x1_ALTIVEC -// * AdvancedProcessBlocks128_6x1_ALTIVEC -// -// If an arrangement ends in 2, like 6x2, then the template will handle the -// single block case by padding with 0's and using the two SIMD word -// function. This happens at most one time when processing multiple blocks. -// The extra processing of a zero block is trivial and worth the tradeoff. -// -// The MAYBE_CONST macro present on x86 is a SunCC workaround. Some versions -// of SunCC lose/drop the const-ness in the F1 and F4 functions. It eventually -// results in a failed link due to the const/non-const mismatch. -// -// In July 2020 the library stopped using 64-bit block version of -// AdvancedProcessBlocks. Testing showed unreliable results and failed -// self tests on occasion. Also see Issue 945 and -// https://github.com/weidai11/cryptopp/commit/dd7598e638bb. - -#ifndef CRYPTOPP_ADVANCED_SIMD_TEMPLATES -#define CRYPTOPP_ADVANCED_SIMD_TEMPLATES - -#include "config.h" -#include "misc.h" -#include "stdcpp.h" - -#if (CRYPTOPP_ARM_NEON_HEADER) -# include -#endif - -#if (CRYPTOPP_ARM_ACLE_HEADER) -# include -# include -#endif - -#if (CRYPTOPP_SSE2_INTRIN_AVAILABLE) -# include -# include -#endif - -// SunCC needs CRYPTOPP_SSSE3_AVAILABLE, too -#if (CRYPTOPP_SSSE3_AVAILABLE) -# include -# include -# include -#endif - -#if defined(__ALTIVEC__) -# include "ppc_simd.h" -#endif - -// ************************ All block ciphers *********************** // - -ANONYMOUS_NAMESPACE_BEGIN - -using CryptoPP::BlockTransformation; - -CRYPTOPP_CONSTANT(BT_XorInput = BlockTransformation::BT_XorInput); -CRYPTOPP_CONSTANT(BT_AllowParallel = BlockTransformation::BT_AllowParallel); -CRYPTOPP_CONSTANT(BT_InBlockIsCounter = BlockTransformation::BT_InBlockIsCounter); -CRYPTOPP_CONSTANT(BT_ReverseDirection = BlockTransformation::BT_ReverseDirection); -CRYPTOPP_CONSTANT(BT_DontIncrementInOutPointers = BlockTransformation::BT_DontIncrementInOutPointers); - -ANONYMOUS_NAMESPACE_END - -// *************************** ARM NEON ************************** // - -#if (CRYPTOPP_ARM_NEON_AVAILABLE) || (CRYPTOPP_ARM_ASIMD_AVAILABLE) || \ - defined(CRYPTOPP_DOXYGEN_PROCESSING) -NAMESPACE_BEGIN(CryptoPP) - -/// \brief AdvancedProcessBlocks for 1 and 6 blocks -/// \tparam F1 function to process 1 128-bit block -/// \tparam F6 function to process 6 128-bit blocks -/// \tparam W word type of the subkey table -/// \details AdvancedProcessBlocks128_6x1_NEON processes 6 and 2 NEON SIMD words -/// at a time. -/// \details The subkey type is usually word32 or word64. F1 and F6 must use the -/// same word type. -template -inline size_t AdvancedProcessBlocks128_6x1_NEON(F1 func1, F6 func6, - const W *subKeys, size_t rounds, const byte *inBlocks, - const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) -{ - CRYPTOPP_ASSERT(subKeys); - CRYPTOPP_ASSERT(inBlocks); - CRYPTOPP_ASSERT(outBlocks); - CRYPTOPP_ASSERT(length >= 16); - - const unsigned int w_one[] = {0, 0<<24, 0, 1<<24}; - const uint32x4_t s_one = vld1q_u32(w_one); - - const size_t blockSize = 16; - // const size_t neonBlockSize = 16; - - size_t inIncrement = (flags & (EnumToInt(BT_InBlockIsCounter)|EnumToInt(BT_DontIncrementInOutPointers))) ? 0 : blockSize; - size_t xorIncrement = (xorBlocks != NULLPTR) ? blockSize : 0; - size_t outIncrement = (flags & EnumToInt(BT_DontIncrementInOutPointers)) ? 0 : blockSize; - - // Clang and Coverity are generating findings using xorBlocks as a flag. - const bool xorInput = (xorBlocks != NULLPTR) && (flags & EnumToInt(BT_XorInput)); - const bool xorOutput = (xorBlocks != NULLPTR) && !(flags & EnumToInt(BT_XorInput)); - - if (flags & BT_ReverseDirection) - { - inBlocks = PtrAdd(inBlocks, length - blockSize); - xorBlocks = PtrAdd(xorBlocks, length - blockSize); - outBlocks = PtrAdd(outBlocks, length - blockSize); - inIncrement = 0-inIncrement; - xorIncrement = 0-xorIncrement; - outIncrement = 0-outIncrement; - } - - if (flags & BT_AllowParallel) - { - while (length >= 6*blockSize) - { - uint64x2_t block0, block1, block2, block3, block4, block5; - if (flags & BT_InBlockIsCounter) - { - const uint64x2_t one = vreinterpretq_u64_u32(s_one); - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - block1 = vaddq_u64(block0, one); - block2 = vaddq_u64(block1, one); - block3 = vaddq_u64(block2, one); - block4 = vaddq_u64(block3, one); - block5 = vaddq_u64(block4, one); - vst1q_u8(const_cast(inBlocks), - vreinterpretq_u8_u64(vaddq_u64(block5, one))); - } - else - { - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block4 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block5 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u64(block2, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u64(block3, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = veorq_u64(block4, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = veorq_u64(block5, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func6(block0, block1, block2, block3, block4, block5, subKeys, static_cast(rounds)); - - if (xorOutput) - { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u64(block2, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u64(block3, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = veorq_u64(block4, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = veorq_u64(block5, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block0)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block1)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block2)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block3)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block4)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block5)); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 6*blockSize; - } - } - - while (length >= blockSize) - { - uint64x2_t block; - block = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - - if (xorInput) - block = veorq_u64(block, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - - if (flags & BT_InBlockIsCounter) - const_cast(inBlocks)[15]++; - - func1(block, subKeys, static_cast(rounds)); - - if (xorOutput) - block = veorq_u64(block, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block)); - - inBlocks = PtrAdd(inBlocks, inIncrement); - outBlocks = PtrAdd(outBlocks, outIncrement); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - length -= blockSize; - } - - return length; -} - -/// \brief AdvancedProcessBlocks for 1 and 4 blocks -/// \tparam F1 function to process 1 128-bit block -/// \tparam F4 function to process 4 128-bit blocks -/// \tparam W word type of the subkey table -/// \details AdvancedProcessBlocks128_4x1_NEON processes 4 and 1 NEON SIMD words -/// at a time. -/// \details The subkey type is usually word32 or word64. V is the vector type and it is -/// usually uint32x4_t or uint32x4_t. F1, F4, and W must use the same word and -/// vector type. -template -inline size_t AdvancedProcessBlocks128_4x1_NEON(F1 func1, F4 func4, - const W *subKeys, size_t rounds, const byte *inBlocks, - const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) -{ - CRYPTOPP_ASSERT(subKeys); - CRYPTOPP_ASSERT(inBlocks); - CRYPTOPP_ASSERT(outBlocks); - CRYPTOPP_ASSERT(length >= 16); - - const unsigned int w_one[] = {0, 0<<24, 0, 1<<24}; - const uint32x4_t s_one = vld1q_u32(w_one); - - const size_t blockSize = 16; - // const size_t neonBlockSize = 16; - - size_t inIncrement = (flags & (EnumToInt(BT_InBlockIsCounter)|EnumToInt(BT_DontIncrementInOutPointers))) ? 0 : blockSize; - size_t xorIncrement = (xorBlocks != NULLPTR) ? blockSize : 0; - size_t outIncrement = (flags & EnumToInt(BT_DontIncrementInOutPointers)) ? 0 : blockSize; - - // Clang and Coverity are generating findings using xorBlocks as a flag. - const bool xorInput = (xorBlocks != NULLPTR) && (flags & EnumToInt(BT_XorInput)); - const bool xorOutput = (xorBlocks != NULLPTR) && !(flags & EnumToInt(BT_XorInput)); - - if (flags & BT_ReverseDirection) - { - inBlocks = PtrAdd(inBlocks, length - blockSize); - xorBlocks = PtrAdd(xorBlocks, length - blockSize); - outBlocks = PtrAdd(outBlocks, length - blockSize); - inIncrement = 0-inIncrement; - xorIncrement = 0-xorIncrement; - outIncrement = 0-outIncrement; - } - - if (flags & BT_AllowParallel) - { - while (length >= 4*blockSize) - { - uint32x4_t block0, block1, block2, block3; - if (flags & BT_InBlockIsCounter) - { - const uint32x4_t one = s_one; - block0 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); - block1 = vreinterpretq_u32_u64(vaddq_u64(vreinterpretq_u64_u32(block0), vreinterpretq_u64_u32(one))); - block2 = vreinterpretq_u32_u64(vaddq_u64(vreinterpretq_u64_u32(block1), vreinterpretq_u64_u32(one))); - block3 = vreinterpretq_u32_u64(vaddq_u64(vreinterpretq_u64_u32(block2), vreinterpretq_u64_u32(one))); - vst1q_u8(const_cast(inBlocks), vreinterpretq_u8_u64(vaddq_u64( - vreinterpretq_u64_u32(block3), vreinterpretq_u64_u32(one)))); - } - else - { - block0 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = veorq_u32(block0, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u32(block1, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u32(block2, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u32(block3, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func4(block0, block1, block2, block3, subKeys, static_cast(rounds)); - - if (xorOutput) - { - block0 = veorq_u32(block0, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u32(block1, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u32(block2, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u32(block3, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - vst1q_u8(outBlocks, vreinterpretq_u8_u32(block0)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u32(block1)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u32(block2)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u32(block3)); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 4*blockSize; - } - } - - while (length >= blockSize) - { - uint32x4_t block = vreinterpretq_u32_u8(vld1q_u8(inBlocks)); - - if (xorInput) - block = veorq_u32(block, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - - if (flags & BT_InBlockIsCounter) - const_cast(inBlocks)[15]++; - - func1(block, subKeys, static_cast(rounds)); - - if (xorOutput) - block = veorq_u32(block, vreinterpretq_u32_u8(vld1q_u8(xorBlocks))); - - vst1q_u8(outBlocks, vreinterpretq_u8_u32(block)); - - inBlocks = PtrAdd(inBlocks, inIncrement); - outBlocks = PtrAdd(outBlocks, outIncrement); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - length -= blockSize; - } - - return length; -} - -/// \brief AdvancedProcessBlocks for 2 and 6 blocks -/// \tparam F2 function to process 2 128-bit blocks -/// \tparam F6 function to process 6 128-bit blocks -/// \tparam W word type of the subkey table -/// \details AdvancedProcessBlocks128_6x2_NEON processes 6 and 2 NEON SIMD words -/// at a time. For a single block the template uses F2 with a zero block. -/// \details The subkey type is usually word32 or word64. F2 and F6 must use the -/// same word type. -template -inline size_t AdvancedProcessBlocks128_6x2_NEON(F2 func2, F6 func6, - const W *subKeys, size_t rounds, const byte *inBlocks, - const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) -{ - CRYPTOPP_ASSERT(subKeys); - CRYPTOPP_ASSERT(inBlocks); - CRYPTOPP_ASSERT(outBlocks); - CRYPTOPP_ASSERT(length >= 16); - - const unsigned int w_one[] = {0, 0<<24, 0, 1<<24}; - const uint32x4_t s_one = vld1q_u32(w_one); - - const size_t blockSize = 16; - // const size_t neonBlockSize = 16; - - size_t inIncrement = (flags & (EnumToInt(BT_InBlockIsCounter)|EnumToInt(BT_DontIncrementInOutPointers))) ? 0 : blockSize; - size_t xorIncrement = (xorBlocks != NULLPTR) ? blockSize : 0; - size_t outIncrement = (flags & EnumToInt(BT_DontIncrementInOutPointers)) ? 0 : blockSize; - - // Clang and Coverity are generating findings using xorBlocks as a flag. - const bool xorInput = (xorBlocks != NULLPTR) && (flags & EnumToInt(BT_XorInput)); - const bool xorOutput = (xorBlocks != NULLPTR) && !(flags & EnumToInt(BT_XorInput)); - - if (flags & BT_ReverseDirection) - { - inBlocks = PtrAdd(inBlocks, length - blockSize); - xorBlocks = PtrAdd(xorBlocks, length - blockSize); - outBlocks = PtrAdd(outBlocks, length - blockSize); - inIncrement = 0-inIncrement; - xorIncrement = 0-xorIncrement; - outIncrement = 0-outIncrement; - } - - if (flags & BT_AllowParallel) - { - while (length >= 6*blockSize) - { - uint64x2_t block0, block1, block2, block3, block4, block5; - if (flags & BT_InBlockIsCounter) - { - const uint64x2_t one = vreinterpretq_u64_u32(s_one); - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - block1 = vaddq_u64(block0, one); - block2 = vaddq_u64(block1, one); - block3 = vaddq_u64(block2, one); - block4 = vaddq_u64(block3, one); - block5 = vaddq_u64(block4, one); - vst1q_u8(const_cast(inBlocks), - vreinterpretq_u8_u64(vaddq_u64(block5, one))); - } - else - { - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block4 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block5 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u64(block2, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u64(block3, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = veorq_u64(block4, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = veorq_u64(block5, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func6(block0, block1, block2, block3, block4, block5, subKeys, static_cast(rounds)); - - if (xorOutput) - { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = veorq_u64(block2, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = veorq_u64(block3, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = veorq_u64(block4, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = veorq_u64(block5, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block0)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block1)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block2)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block3)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block4)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block5)); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 6*blockSize; - } - - while (length >= 2*blockSize) - { - uint64x2_t block0, block1; - if (flags & BT_InBlockIsCounter) - { - const uint64x2_t one = vreinterpretq_u64_u32(s_one); - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - block1 = vaddq_u64(block0, one); - vst1q_u8(const_cast(inBlocks), - vreinterpretq_u8_u64(vaddq_u64(block1, one))); - } - else - { - block0 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func2(block0, block1, subKeys, static_cast(rounds)); - - if (xorOutput) - { - block0 = veorq_u64(block0, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = veorq_u64(block1, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block0)); - outBlocks = PtrAdd(outBlocks, outIncrement); - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block1)); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 2*blockSize; - } - } - - while (length >= blockSize) - { - uint64x2_t block, zero = {0,0}; - block = vreinterpretq_u64_u8(vld1q_u8(inBlocks)); - - if (xorInput) - block = veorq_u64(block, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - - if (flags & BT_InBlockIsCounter) - const_cast(inBlocks)[15]++; - - func2(block, zero, subKeys, static_cast(rounds)); - - if (xorOutput) - block = veorq_u64(block, vreinterpretq_u64_u8(vld1q_u8(xorBlocks))); - - vst1q_u8(outBlocks, vreinterpretq_u8_u64(block)); - - inBlocks = PtrAdd(inBlocks, inIncrement); - outBlocks = PtrAdd(outBlocks, outIncrement); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - length -= blockSize; - } - - return length; -} - -NAMESPACE_END // CryptoPP - -#endif // CRYPTOPP_ARM_NEON_AVAILABLE - -// *************************** Intel SSE ************************** // - -#if defined(CRYPTOPP_SSSE3_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief SunCC workaround -/// \details SunCC loses the const on AES_Enc_Block and AES_Dec_Block -/// \sa Issue -/// 224, SunCC and failed compile for rijndael.cpp -# define MAYBE_CONST const -/// \brief SunCC workaround -/// \details SunCC loses the const on AES_Enc_Block and AES_Dec_Block -/// \sa Issue -/// 224, SunCC and failed compile for rijndael.cpp -# define MAYBE_UNCONST_CAST(T, x) (x) -#elif (__SUNPRO_CC >= 0x5130) -# define MAYBE_CONST -# define MAYBE_UNCONST_CAST(T, x) const_cast(x) -#else -# define MAYBE_CONST const -# define MAYBE_UNCONST_CAST(T, x) (x) -#endif - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Clang workaround -/// \details Clang issues spurious alignment warnings -/// \sa Issue -/// 20670, _mm_loadu_si128 parameter has wrong type -# define M128_CAST(x) ((__m128i *)(void *)(x)) -/// \brief Clang workaround -/// \details Clang issues spurious alignment warnings -/// \sa Issue -/// 20670, _mm_loadu_si128 parameter has wrong type -# define CONST_M128_CAST(x) ((const __m128i *)(const void *)(x)) -#else -# ifndef M128_CAST -# define M128_CAST(x) ((__m128i *)(void *)(x)) -# endif -# ifndef CONST_M128_CAST -# define CONST_M128_CAST(x) ((const __m128i *)(const void *)(x)) -# endif -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief AdvancedProcessBlocks for 2 and 6 blocks -/// \tparam F2 function to process 2 128-bit blocks -/// \tparam F6 function to process 6 128-bit blocks -/// \tparam W word type of the subkey table -/// \details AdvancedProcessBlocks128_6x2_SSE processes 6 and 2 SSE SIMD words -/// at a time. For a single block the template uses F2 with a zero block. -/// \details The subkey type is usually word32 or word64. F2 and F6 must use the -/// same word type. -template -inline size_t AdvancedProcessBlocks128_6x2_SSE(F2 func2, F6 func6, - MAYBE_CONST W *subKeys, size_t rounds, const byte *inBlocks, - const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) -{ - CRYPTOPP_ASSERT(subKeys); - CRYPTOPP_ASSERT(inBlocks); - CRYPTOPP_ASSERT(outBlocks); - CRYPTOPP_ASSERT(length >= 16); - - const size_t blockSize = 16; - // const size_t xmmBlockSize = 16; - - size_t inIncrement = (flags & (EnumToInt(BT_InBlockIsCounter)|EnumToInt(BT_DontIncrementInOutPointers))) ? 0 : blockSize; - size_t xorIncrement = (xorBlocks != NULLPTR) ? blockSize : 0; - size_t outIncrement = (flags & EnumToInt(BT_DontIncrementInOutPointers)) ? 0 : blockSize; - - // Clang and Coverity are generating findings using xorBlocks as a flag. - const bool xorInput = (xorBlocks != NULLPTR) && (flags & EnumToInt(BT_XorInput)); - const bool xorOutput = (xorBlocks != NULLPTR) && !(flags & EnumToInt(BT_XorInput)); - - if (flags & BT_ReverseDirection) - { - inBlocks = PtrAdd(inBlocks, length - blockSize); - xorBlocks = PtrAdd(xorBlocks, length - blockSize); - outBlocks = PtrAdd(outBlocks, length - blockSize); - inIncrement = 0-inIncrement; - xorIncrement = 0-xorIncrement; - outIncrement = 0-outIncrement; - } - - if (flags & BT_AllowParallel) - { - while (length >= 6*blockSize) - { - __m128i block0, block1, block2, block3, block4, block5; - if (flags & BT_InBlockIsCounter) - { - // Increment of 1 in big-endian compatible with the ctr byte array. - const __m128i s_one = _mm_set_epi32(1<<24, 0, 0, 0); - block0 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - block1 = _mm_add_epi32(block0, s_one); - block2 = _mm_add_epi32(block1, s_one); - block3 = _mm_add_epi32(block2, s_one); - block4 = _mm_add_epi32(block3, s_one); - block5 = _mm_add_epi32(block4, s_one); - _mm_storeu_si128(M128_CAST(inBlocks), _mm_add_epi32(block5, s_one)); - } - else - { - block0 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block4 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block5 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = _mm_xor_si128(block0, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = _mm_xor_si128(block1, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = _mm_xor_si128(block2, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = _mm_xor_si128(block3, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = _mm_xor_si128(block4, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = _mm_xor_si128(block5, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func6(block0, block1, block2, block3, block4, block5, subKeys, static_cast(rounds)); - - if (xorOutput) - { - block0 = _mm_xor_si128(block0, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = _mm_xor_si128(block1, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = _mm_xor_si128(block2, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = _mm_xor_si128(block3, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = _mm_xor_si128(block4, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = _mm_xor_si128(block5, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - _mm_storeu_si128(M128_CAST(outBlocks), block0); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block1); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block2); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block3); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block4); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block5); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 6*blockSize; - } - - while (length >= 2*blockSize) - { - __m128i block0, block1; - if (flags & BT_InBlockIsCounter) - { - // Increment of 1 in big-endian compatible with the ctr byte array. - const __m128i s_one = _mm_set_epi32(1<<24, 0, 0, 0); - block0 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - block1 = _mm_add_epi32(block0, s_one); - _mm_storeu_si128(M128_CAST(inBlocks), _mm_add_epi32(block1, s_one)); - } - else - { - block0 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = _mm_xor_si128(block0, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = _mm_xor_si128(block1, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func2(block0, block1, subKeys, static_cast(rounds)); - - if (xorOutput) - { - block0 = _mm_xor_si128(block0, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = _mm_xor_si128(block1, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - _mm_storeu_si128(M128_CAST(outBlocks), block0); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block1); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 2*blockSize; - } - } - - while (length >= blockSize) - { - __m128i block, zero = _mm_setzero_si128(); - block = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - - if (xorInput) - block = _mm_xor_si128(block, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - - if (flags & BT_InBlockIsCounter) - const_cast(inBlocks)[15]++; - - func2(block, zero, subKeys, static_cast(rounds)); - - if (xorOutput) - block = _mm_xor_si128(block, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - - _mm_storeu_si128(M128_CAST(outBlocks), block); - - inBlocks = PtrAdd(inBlocks, inIncrement); - outBlocks = PtrAdd(outBlocks, outIncrement); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - length -= blockSize; - } - - return length; -} - -/// \brief AdvancedProcessBlocks for 1 and 4 blocks -/// \tparam F1 function to process 1 128-bit block -/// \tparam F4 function to process 4 128-bit blocks -/// \tparam W word type of the subkey table -/// \details AdvancedProcessBlocks128_4x1_SSE processes 4 and 1 SSE SIMD words -/// at a time. -/// \details The subkey type is usually word32 or word64. F1 and F4 must use the -/// same word type. -template -inline size_t AdvancedProcessBlocks128_4x1_SSE(F1 func1, F4 func4, - MAYBE_CONST W *subKeys, size_t rounds, const byte *inBlocks, - const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) -{ - CRYPTOPP_ASSERT(subKeys); - CRYPTOPP_ASSERT(inBlocks); - CRYPTOPP_ASSERT(outBlocks); - CRYPTOPP_ASSERT(length >= 16); - - const size_t blockSize = 16; - // const size_t xmmBlockSize = 16; - - size_t inIncrement = (flags & (EnumToInt(BT_InBlockIsCounter)|EnumToInt(BT_DontIncrementInOutPointers))) ? 0 : blockSize; - size_t xorIncrement = (xorBlocks != NULLPTR) ? blockSize : 0; - size_t outIncrement = (flags & EnumToInt(BT_DontIncrementInOutPointers)) ? 0 : blockSize; - - // Clang and Coverity are generating findings using xorBlocks as a flag. - const bool xorInput = (xorBlocks != NULLPTR) && (flags & EnumToInt(BT_XorInput)); - const bool xorOutput = (xorBlocks != NULLPTR) && !(flags & EnumToInt(BT_XorInput)); - - if (flags & BT_ReverseDirection) - { - inBlocks = PtrAdd(inBlocks, length - blockSize); - xorBlocks = PtrAdd(xorBlocks, length - blockSize); - outBlocks = PtrAdd(outBlocks, length - blockSize); - inIncrement = 0-inIncrement; - xorIncrement = 0-xorIncrement; - outIncrement = 0-outIncrement; - } - - if (flags & BT_AllowParallel) - { - while (length >= 4*blockSize) - { - __m128i block0, block1, block2, block3; - if (flags & BT_InBlockIsCounter) - { - // Increment of 1 in big-endian compatible with the ctr byte array. - const __m128i s_one = _mm_set_epi32(1<<24, 0, 0, 0); - block0 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - block1 = _mm_add_epi32(block0, s_one); - block2 = _mm_add_epi32(block1, s_one); - block3 = _mm_add_epi32(block2, s_one); - _mm_storeu_si128(M128_CAST(inBlocks), _mm_add_epi32(block3, s_one)); - } - else - { - block0 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = _mm_xor_si128(block0, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = _mm_xor_si128(block1, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = _mm_xor_si128(block2, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = _mm_xor_si128(block3, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func4(block0, block1, block2, block3, subKeys, static_cast(rounds)); - - if (xorOutput) - { - block0 = _mm_xor_si128(block0, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = _mm_xor_si128(block1, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = _mm_xor_si128(block2, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = _mm_xor_si128(block3, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - _mm_storeu_si128(M128_CAST(outBlocks), block0); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block1); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block2); - outBlocks = PtrAdd(outBlocks, outIncrement); - _mm_storeu_si128(M128_CAST(outBlocks), block3); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 4*blockSize; - } - } - - while (length >= blockSize) - { - __m128i block = _mm_loadu_si128(CONST_M128_CAST(inBlocks)); - - if (xorInput) - block = _mm_xor_si128(block, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - - if (flags & BT_InBlockIsCounter) - const_cast(inBlocks)[15]++; - - func1(block, subKeys, static_cast(rounds)); - - if (xorOutput) - block = _mm_xor_si128(block, _mm_loadu_si128(CONST_M128_CAST(xorBlocks))); - - _mm_storeu_si128(M128_CAST(outBlocks), block); - - inBlocks = PtrAdd(inBlocks, inIncrement); - outBlocks = PtrAdd(outBlocks, outIncrement); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - length -= blockSize; - } - - return length; -} - -NAMESPACE_END // CryptoPP - -#endif // CRYPTOPP_SSSE3_AVAILABLE - -// ************************** Altivec/Power 4 ************************** // - -#if defined(__ALTIVEC__) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief AdvancedProcessBlocks for 1 and 4 blocks -/// \tparam F1 function to process 1 128-bit block -/// \tparam F4 function to process 4 128-bit blocks -/// \tparam W word type of the subkey table -/// \details AdvancedProcessBlocks128_4x1_ALTIVEC processes 4 and 1 Altivec SIMD words -/// at a time. -/// \details The subkey type is usually word32 or word64. F1 and F4 must use the -/// same word type. -template -inline size_t AdvancedProcessBlocks128_4x1_ALTIVEC(F1 func1, F4 func4, - const W *subKeys, size_t rounds, const byte *inBlocks, - const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) -{ - CRYPTOPP_ASSERT(subKeys); - CRYPTOPP_ASSERT(inBlocks); - CRYPTOPP_ASSERT(outBlocks); - CRYPTOPP_ASSERT(length >= 16); - -#if (CRYPTOPP_LITTLE_ENDIAN) - const uint32x4_p s_one = {1,0,0,0}; -#else - const uint32x4_p s_one = {0,0,0,1}; -#endif - - const size_t blockSize = 16; - // const size_t simdBlockSize = 16; - - size_t inIncrement = (flags & (EnumToInt(BT_InBlockIsCounter)|EnumToInt(BT_DontIncrementInOutPointers))) ? 0 : blockSize; - size_t xorIncrement = (xorBlocks != NULLPTR) ? blockSize : 0; - size_t outIncrement = (flags & EnumToInt(BT_DontIncrementInOutPointers)) ? 0 : blockSize; - - // Clang and Coverity are generating findings using xorBlocks as a flag. - const bool xorInput = (xorBlocks != NULLPTR) && (flags & EnumToInt(BT_XorInput)); - const bool xorOutput = (xorBlocks != NULLPTR) && !(flags & EnumToInt(BT_XorInput)); - - if (flags & BT_ReverseDirection) - { - inBlocks = PtrAdd(inBlocks, length - blockSize); - xorBlocks = PtrAdd(xorBlocks, length - blockSize); - outBlocks = PtrAdd(outBlocks, length - blockSize); - inIncrement = 0-inIncrement; - xorIncrement = 0-xorIncrement; - outIncrement = 0-outIncrement; - } - - if (flags & BT_AllowParallel) - { - while (length >= 4*blockSize) - { - uint32x4_p block0, block1, block2, block3; - - if (flags & BT_InBlockIsCounter) - { - block0 = VecLoadBE(inBlocks); - block1 = VecAdd(block0, s_one); - block2 = VecAdd(block1, s_one); - block3 = VecAdd(block2, s_one); - - // Hack due to big-endian loads used by POWER8 (and maybe ARM-BE). - // CTR_ModePolicy::OperateKeystream is wired such that after - // returning from this function CTR_ModePolicy will detect wrap on - // on the last counter byte and increment the next to last byte. - // The problem is, with a big-endian load, inBlocks[15] is really - // located at index 15. The vector addition using a 32-bit element - // generates a carry into inBlocks[14] and then CTR_ModePolicy - // increments inBlocks[14] too. - const_cast(inBlocks)[15] += 6; - } - else - { - block0 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = VecXor(block0, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = VecXor(block1, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = VecXor(block2, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = VecXor(block3, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func4(block0, block1, block2, block3, subKeys, rounds); - - if (xorOutput) - { - block0 = VecXor(block0, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = VecXor(block1, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = VecXor(block2, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = VecXor(block3, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - VecStoreBE(block0, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block1, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block2, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block3, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 4*blockSize; - } - } - - while (length >= blockSize) - { - uint32x4_p block = VecLoadBE(inBlocks); - - if (xorInput) - block = VecXor(block, VecLoadBE(xorBlocks)); - - if (flags & BT_InBlockIsCounter) - const_cast(inBlocks)[15]++; - - func1(block, subKeys, rounds); - - if (xorOutput) - block = VecXor(block, VecLoadBE(xorBlocks)); - - VecStoreBE(block, outBlocks); - - inBlocks = PtrAdd(inBlocks, inIncrement); - outBlocks = PtrAdd(outBlocks, outIncrement); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - length -= blockSize; - } - - return length; -} - -/// \brief AdvancedProcessBlocks for 1 and 6 blocks -/// \tparam F1 function to process 1 128-bit block -/// \tparam F6 function to process 6 128-bit blocks -/// \tparam W word type of the subkey table -/// \details AdvancedProcessBlocks128_6x1_ALTIVEC processes 6 and 1 Altivec SIMD words -/// at a time. -/// \details The subkey type is usually word32 or word64. F1 and F6 must use the -/// same word type. -template -inline size_t AdvancedProcessBlocks128_6x1_ALTIVEC(F1 func1, F6 func6, - const W *subKeys, size_t rounds, const byte *inBlocks, - const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) -{ - CRYPTOPP_ASSERT(subKeys); - CRYPTOPP_ASSERT(inBlocks); - CRYPTOPP_ASSERT(outBlocks); - CRYPTOPP_ASSERT(length >= 16); - -#if (CRYPTOPP_LITTLE_ENDIAN) - const uint32x4_p s_one = {1,0,0,0}; -#else - const uint32x4_p s_one = {0,0,0,1}; -#endif - - const size_t blockSize = 16; - // const size_t simdBlockSize = 16; - - size_t inIncrement = (flags & (EnumToInt(BT_InBlockIsCounter)|EnumToInt(BT_DontIncrementInOutPointers))) ? 0 : blockSize; - size_t xorIncrement = (xorBlocks != NULLPTR) ? blockSize : 0; - size_t outIncrement = (flags & EnumToInt(BT_DontIncrementInOutPointers)) ? 0 : blockSize; - - // Clang and Coverity are generating findings using xorBlocks as a flag. - const bool xorInput = (xorBlocks != NULLPTR) && (flags & EnumToInt(BT_XorInput)); - const bool xorOutput = (xorBlocks != NULLPTR) && !(flags & EnumToInt(BT_XorInput)); - - if (flags & BT_ReverseDirection) - { - inBlocks = PtrAdd(inBlocks, length - blockSize); - xorBlocks = PtrAdd(xorBlocks, length - blockSize); - outBlocks = PtrAdd(outBlocks, length - blockSize); - inIncrement = 0-inIncrement; - xorIncrement = 0-xorIncrement; - outIncrement = 0-outIncrement; - } - - if (flags & BT_AllowParallel) - { - while (length >= 6*blockSize) - { - uint32x4_p block0, block1, block2, block3, block4, block5; - - if (flags & BT_InBlockIsCounter) - { - block0 = VecLoadBE(inBlocks); - block1 = VecAdd(block0, s_one); - block2 = VecAdd(block1, s_one); - block3 = VecAdd(block2, s_one); - block4 = VecAdd(block3, s_one); - block5 = VecAdd(block4, s_one); - - // Hack due to big-endian loads used by POWER8 (and maybe ARM-BE). - // CTR_ModePolicy::OperateKeystream is wired such that after - // returning from this function CTR_ModePolicy will detect wrap on - // on the last counter byte and increment the next to last byte. - // The problem is, with a big-endian load, inBlocks[15] is really - // located at index 15. The vector addition using a 32-bit element - // generates a carry into inBlocks[14] and then CTR_ModePolicy - // increments inBlocks[14] too. - // - // To find this bug we needed a test case with a ctr of 0xNN...FA. - // The last octet is 0xFA and adding 6 creates the wrap to trigger - // the issue. If the last octet was 0xFC then 4 would trigger it. - // We dumb-lucked into the test with SPECK-128. The test case of - // interest is the one with IV 348ECA9766C09F04 826520DE47A212FA. - uint8x16_p temp = VecAdd((uint8x16_p)block5, (uint8x16_p)s_one); - VecStoreBE(temp, const_cast(inBlocks)); - } - else - { - block0 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block1 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block2 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block3 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block4 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - block5 = VecLoadBE(inBlocks); - inBlocks = PtrAdd(inBlocks, inIncrement); - } - - if (xorInput) - { - block0 = VecXor(block0, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = VecXor(block1, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = VecXor(block2, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = VecXor(block3, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = VecXor(block4, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = VecXor(block5, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - func6(block0, block1, block2, block3, block4, block5, subKeys, rounds); - - if (xorOutput) - { - block0 = VecXor(block0, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block1 = VecXor(block1, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block2 = VecXor(block2, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block3 = VecXor(block3, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block4 = VecXor(block4, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - block5 = VecXor(block5, VecLoadBE(xorBlocks)); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - } - - VecStoreBE(block0, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block1, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block2, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block3, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block4, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - VecStoreBE(block5, outBlocks); - outBlocks = PtrAdd(outBlocks, outIncrement); - - length -= 6*blockSize; - } - } - - while (length >= blockSize) - { - uint32x4_p block = VecLoadBE(inBlocks); - - if (xorInput) - block = VecXor(block, VecLoadBE(xorBlocks)); - - if (flags & BT_InBlockIsCounter) - const_cast(inBlocks)[15]++; - - func1(block, subKeys, rounds); - - if (xorOutput) - block = VecXor(block, VecLoadBE(xorBlocks)); - - VecStoreBE(block, outBlocks); - - inBlocks = PtrAdd(inBlocks, inIncrement); - outBlocks = PtrAdd(outBlocks, outIncrement); - xorBlocks = PtrAdd(xorBlocks, xorIncrement); - length -= blockSize; - } - - return length; -} - -NAMESPACE_END // CryptoPP - -#endif // __ALTIVEC__ - -#endif // CRYPTOPP_ADVANCED_SIMD_TEMPLATES diff --git a/third_party/cryptoppwin/include/cryptopp/aes.h b/third_party/cryptoppwin/include/cryptopp/aes.h deleted file mode 100644 index bcc5cf7e..00000000 --- a/third_party/cryptoppwin/include/cryptopp/aes.h +++ /dev/null @@ -1,30 +0,0 @@ -// aes.h - originally written and placed in the public domain by Wei Dai - -/// \file -/// \brief Class file for the AES cipher (Rijndael) -/// \details AES is a typdef for Rijndael classes. All key sizes are supported. -/// The library only provides Rijndael with 128-bit blocks, and not 192-bit or 256-bit blocks -/// \since Rijndael since Crypto++ 3.1, Intel AES-NI since Crypto++ 5.6.1, ARMv8 AES since Crypto++ 6.0, -/// Power8 AES since Crypto++ 6.0 - -#ifndef CRYPTOPP_AES_H -#define CRYPTOPP_AES_H - -#include "rijndael.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief AES block cipher (Rijndael) -/// \details AES is a typdef for Rijndael classes. All key sizes are supported. -/// The library only provides Rijndael with 128-bit blocks, and not 192-bit or 256-bit blocks -/// \sa AES winner, announced on 10/2/2000 -/// \since Rijndael since Crypto++ 3.1, Intel AES-NI since Crypto++ 5.6.1, ARMv8 AES since Crypto++ 6.0, -/// Power8 AES since Crypto++ 6.0 -DOCUMENTED_TYPEDEF(Rijndael, AES); - -typedef RijndaelEncryption AESEncryption; -typedef RijndaelDecryption AESDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/aes_armv4.h b/third_party/cryptoppwin/include/cryptopp/aes_armv4.h deleted file mode 100644 index 000dfec9..00000000 --- a/third_party/cryptoppwin/include/cryptopp/aes_armv4.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Header file for use with Cryptogam's ARMv4 AES. */ -/* Also see http://www.openssl.org/~appro/cryptogams/ and */ -/* https://wiki.openssl.org/index.php?title=Cryptogams_AES */ - -#ifndef CRYPTOGAMS_AES_ARMV4_H -#define CRYPTOGAMS_AES_ARMV4_H - -#ifdef __cplusplus -extern "C" { -#endif - -//#define AES_MAXNR 14 -//typedef struct AES_KEY_st { -// unsigned int rd_key[4 * (AES_MAXNR + 1)]; -// int rounds; -//} AES_KEY; - -// Instead of AES_KEY we use a 'word32 rkey[4*15+4]'. It has space for -// both the AES_MAXNR round keys and the number of rounds in the tail. - -int cryptogams_AES_set_encrypt_key(const unsigned char *userKey, const int bits, unsigned int *rkey); -int cryptogams_AES_set_decrypt_key(const unsigned char *userKey, const int bits, unsigned int *rkey); -void cryptogams_AES_encrypt_block(const unsigned char *in, unsigned char *out, const unsigned int *rkey); -void cryptogams_AES_decrypt_block(const unsigned char *in, unsigned char *out, const unsigned int *rkey); - -#ifdef __cplusplus -} -#endif - -#endif /* CRYPTOGAMS_AES_ARMV4_H */ diff --git a/third_party/cryptoppwin/include/cryptopp/algebra.h b/third_party/cryptoppwin/include/cryptopp/algebra.h deleted file mode 100644 index 1e04dfff..00000000 --- a/third_party/cryptoppwin/include/cryptopp/algebra.h +++ /dev/null @@ -1,453 +0,0 @@ -// algebra.h - originally written and placed in the public domain by Wei Dai - -/// \file algebra.h -/// \brief Classes for performing mathematics over different fields - -#ifndef CRYPTOPP_ALGEBRA_H -#define CRYPTOPP_ALGEBRA_H - -#include "config.h" -#include "integer.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -class Integer; - -/// \brief Abstract group -/// \tparam T element class or type -/// \details const Element& returned by member functions are references -/// to internal data members. Since each object may have only -/// one such data member for holding results, the following code -/// will produce incorrect results: -///
    abcd = group.Add(group.Add(a,b), group.Add(c,d));
-/// But this should be fine: -///
    abcd = group.Add(a, group.Add(b, group.Add(c,d));
-template class CRYPTOPP_NO_VTABLE AbstractGroup -{ -public: - typedef T Element; - - virtual ~AbstractGroup() {} - - /// \brief Compare two elements for equality - /// \param a first element - /// \param b second element - /// \return true if the elements are equal, false otherwise - /// \details Equal() tests the elements for equality using a==b - virtual bool Equal(const Element &a, const Element &b) const =0; - - /// \brief Provides the Identity element - /// \return the Identity element - virtual const Element& Identity() const =0; - - /// \brief Adds elements in the group - /// \param a first element - /// \param b second element - /// \return the sum of a and b - virtual const Element& Add(const Element &a, const Element &b) const =0; - - /// \brief Inverts the element in the group - /// \param a first element - /// \return the inverse of the element - virtual const Element& Inverse(const Element &a) const =0; - - /// \brief Determine if inversion is fast - /// \return true if inversion is fast, false otherwise - virtual bool InversionIsFast() const {return false;} - - /// \brief Doubles an element in the group - /// \param a the element - /// \return the element doubled - virtual const Element& Double(const Element &a) const; - - /// \brief Subtracts elements in the group - /// \param a first element - /// \param b second element - /// \return the difference of a and b. The element a must provide a Subtract member function. - virtual const Element& Subtract(const Element &a, const Element &b) const; - - /// \brief TODO - /// \param a first element - /// \param b second element - /// \return TODO - virtual Element& Accumulate(Element &a, const Element &b) const; - - /// \brief Reduces an element in the congruence class - /// \param a element to reduce - /// \param b the congruence class - /// \return the reduced element - virtual Element& Reduce(Element &a, const Element &b) const; - - /// \brief Performs a scalar multiplication - /// \param a multiplicand - /// \param e multiplier - /// \return the product - virtual Element ScalarMultiply(const Element &a, const Integer &e) const; - - /// \brief TODO - /// \param x first multiplicand - /// \param e1 the first multiplier - /// \param y second multiplicand - /// \param e2 the second multiplier - /// \return TODO - virtual Element CascadeScalarMultiply(const Element &x, const Integer &e1, const Element &y, const Integer &e2) const; - - /// \brief Multiplies a base to multiple exponents in a group - /// \param results an array of Elements - /// \param base the base to raise to the exponents - /// \param exponents an array of exponents - /// \param exponentsCount the number of exponents in the array - /// \details SimultaneousMultiply() multiplies the base to each exponent in the exponents array and stores the - /// result at the respective position in the results array. - /// \details SimultaneousMultiply() must be implemented in a derived class. - /// \pre COUNTOF(results) == exponentsCount - /// \pre COUNTOF(exponents) == exponentsCount - virtual void SimultaneousMultiply(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const; -}; - -/// \brief Abstract ring -/// \tparam T element class or type -/// \details const Element& returned by member functions are references -/// to internal data members. Since each object may have only -/// one such data member for holding results, the following code -/// will produce incorrect results: -///
    abcd = group.Add(group.Add(a,b), group.Add(c,d));
-/// But this should be fine: -///
    abcd = group.Add(a, group.Add(b, group.Add(c,d));
-template class CRYPTOPP_NO_VTABLE AbstractRing : public AbstractGroup -{ -public: - typedef T Element; - - /// \brief Construct an AbstractRing - AbstractRing() {m_mg.m_pRing = this;} - - /// \brief Copy construct an AbstractRing - /// \param source other AbstractRing - AbstractRing(const AbstractRing &source) - {CRYPTOPP_UNUSED(source); m_mg.m_pRing = this;} - - /// \brief Assign an AbstractRing - /// \param source other AbstractRing - AbstractRing& operator=(const AbstractRing &source) - {CRYPTOPP_UNUSED(source); return *this;} - - /// \brief Determines whether an element is a unit in the group - /// \param a the element - /// \return true if the element is a unit after reduction, false otherwise. - virtual bool IsUnit(const Element &a) const =0; - - /// \brief Retrieves the multiplicative identity - /// \return the multiplicative identity - virtual const Element& MultiplicativeIdentity() const =0; - - /// \brief Multiplies elements in the group - /// \param a the multiplicand - /// \param b the multiplier - /// \return the product of a and b - virtual const Element& Multiply(const Element &a, const Element &b) const =0; - - /// \brief Calculate the multiplicative inverse of an element in the group - /// \param a the element - virtual const Element& MultiplicativeInverse(const Element &a) const =0; - - /// \brief Square an element in the group - /// \param a the element - /// \return the element squared - virtual const Element& Square(const Element &a) const; - - /// \brief Divides elements in the group - /// \param a the dividend - /// \param b the divisor - /// \return the quotient - virtual const Element& Divide(const Element &a, const Element &b) const; - - /// \brief Raises a base to an exponent in the group - /// \param a the base - /// \param e the exponent - /// \return the exponentiation - virtual Element Exponentiate(const Element &a, const Integer &e) const; - - /// \brief TODO - /// \param x first element - /// \param e1 first exponent - /// \param y second element - /// \param e2 second exponent - /// \return TODO - virtual Element CascadeExponentiate(const Element &x, const Integer &e1, const Element &y, const Integer &e2) const; - - /// \brief Exponentiates a base to multiple exponents in the Ring - /// \param results an array of Elements - /// \param base the base to raise to the exponents - /// \param exponents an array of exponents - /// \param exponentsCount the number of exponents in the array - /// \details SimultaneousExponentiate() raises the base to each exponent in the exponents array and stores the - /// result at the respective position in the results array. - /// \details SimultaneousExponentiate() must be implemented in a derived class. - /// \pre COUNTOF(results) == exponentsCount - /// \pre COUNTOF(exponents) == exponentsCount - virtual void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const; - - /// \brief Retrieves the multiplicative group - /// \return the multiplicative group - virtual const AbstractGroup& MultiplicativeGroup() const - {return m_mg;} - -private: - class MultiplicativeGroupT : public AbstractGroup - { - public: - const AbstractRing& GetRing() const - {return *m_pRing;} - - bool Equal(const Element &a, const Element &b) const - {return GetRing().Equal(a, b);} - - const Element& Identity() const - {return GetRing().MultiplicativeIdentity();} - - const Element& Add(const Element &a, const Element &b) const - {return GetRing().Multiply(a, b);} - - Element& Accumulate(Element &a, const Element &b) const - {return a = GetRing().Multiply(a, b);} - - const Element& Inverse(const Element &a) const - {return GetRing().MultiplicativeInverse(a);} - - const Element& Subtract(const Element &a, const Element &b) const - {return GetRing().Divide(a, b);} - - Element& Reduce(Element &a, const Element &b) const - {return a = GetRing().Divide(a, b);} - - const Element& Double(const Element &a) const - {return GetRing().Square(a);} - - Element ScalarMultiply(const Element &a, const Integer &e) const - {return GetRing().Exponentiate(a, e);} - - Element CascadeScalarMultiply(const Element &x, const Integer &e1, const Element &y, const Integer &e2) const - {return GetRing().CascadeExponentiate(x, e1, y, e2);} - - void SimultaneousMultiply(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const - {GetRing().SimultaneousExponentiate(results, base, exponents, exponentsCount);} - - const AbstractRing *m_pRing; - }; - - MultiplicativeGroupT m_mg; -}; - -// ******************************************************** - -/// \brief Base and exponent -/// \tparam T base class or type -/// \tparam E exponent class or type -template -struct BaseAndExponent -{ -public: - BaseAndExponent() {} - BaseAndExponent(const T &base, const E &exponent) : base(base), exponent(exponent) {} - bool operator<(const BaseAndExponent &rhs) const {return exponent < rhs.exponent;} - T base; - E exponent; -}; - -// VC60 workaround: incomplete member template support -template - Element GeneralCascadeMultiplication(const AbstractGroup &group, Iterator begin, Iterator end); -template - Element GeneralCascadeExponentiation(const AbstractRing &ring, Iterator begin, Iterator end); - -// ******************************************************** - -/// \brief Abstract Euclidean domain -/// \tparam T element class or type -/// \details const Element& returned by member functions are references -/// to internal data members. Since each object may have only -/// one such data member for holding results, the following code -/// will produce incorrect results: -///
    abcd = group.Add(group.Add(a,b), group.Add(c,d));
-/// But this should be fine: -///
    abcd = group.Add(a, group.Add(b, group.Add(c,d));
-template class CRYPTOPP_NO_VTABLE AbstractEuclideanDomain : public AbstractRing -{ -public: - typedef T Element; - - /// \brief Performs the division algorithm on two elements in the ring - /// \param r the remainder - /// \param q the quotient - /// \param a the dividend - /// \param d the divisor - virtual void DivisionAlgorithm(Element &r, Element &q, const Element &a, const Element &d) const =0; - - /// \brief Performs a modular reduction in the ring - /// \param a the element - /// \param b the modulus - /// \return the result of a%b. - virtual const Element& Mod(const Element &a, const Element &b) const =0; - - /// \brief Calculates the greatest common denominator in the ring - /// \param a the first element - /// \param b the second element - /// \return the greatest common denominator of a and b. - virtual const Element& Gcd(const Element &a, const Element &b) const; - -protected: - mutable Element result; -}; - -// ******************************************************** - -/// \brief Euclidean domain -/// \tparam T element class or type -/// \details const Element& returned by member functions are references -/// to internal data members. Since each object may have only -/// one such data member for holding results, the following code -/// will produce incorrect results: -///
    abcd = group.Add(group.Add(a,b), group.Add(c,d));
-/// But this should be fine: -///
    abcd = group.Add(a, group.Add(b, group.Add(c,d));
-template class EuclideanDomainOf : public AbstractEuclideanDomain -{ -public: - typedef T Element; - - EuclideanDomainOf() {} - - bool Equal(const Element &a, const Element &b) const - {return a==b;} - - const Element& Identity() const - {return Element::Zero();} - - const Element& Add(const Element &a, const Element &b) const - {return result = a+b;} - - Element& Accumulate(Element &a, const Element &b) const - {return a+=b;} - - const Element& Inverse(const Element &a) const - {return result = -a;} - - const Element& Subtract(const Element &a, const Element &b) const - {return result = a-b;} - - Element& Reduce(Element &a, const Element &b) const - {return a-=b;} - - const Element& Double(const Element &a) const - {return result = a.Doubled();} - - const Element& MultiplicativeIdentity() const - {return Element::One();} - - const Element& Multiply(const Element &a, const Element &b) const - {return result = a*b;} - - const Element& Square(const Element &a) const - {return result = a.Squared();} - - bool IsUnit(const Element &a) const - {return a.IsUnit();} - - const Element& MultiplicativeInverse(const Element &a) const - {return result = a.MultiplicativeInverse();} - - const Element& Divide(const Element &a, const Element &b) const - {return result = a/b;} - - const Element& Mod(const Element &a, const Element &b) const - {return result = a%b;} - - void DivisionAlgorithm(Element &r, Element &q, const Element &a, const Element &d) const - {Element::Divide(r, q, a, d);} - - bool operator==(const EuclideanDomainOf &rhs) const - {CRYPTOPP_UNUSED(rhs); return true;} - -private: - mutable Element result; -}; - -/// \brief Quotient ring -/// \tparam T element class or type -/// \details const Element& returned by member functions are references -/// to internal data members. Since each object may have only -/// one such data member for holding results, the following code -/// will produce incorrect results: -///
    abcd = group.Add(group.Add(a,b), group.Add(c,d));
-/// But this should be fine: -///
    abcd = group.Add(a, group.Add(b, group.Add(c,d));
-template class QuotientRing : public AbstractRing -{ -public: - typedef T EuclideanDomain; - typedef typename T::Element Element; - - QuotientRing(const EuclideanDomain &domain, const Element &modulus) - : m_domain(domain), m_modulus(modulus) {} - - const EuclideanDomain & GetDomain() const - {return m_domain;} - - const Element& GetModulus() const - {return m_modulus;} - - bool Equal(const Element &a, const Element &b) const - {return m_domain.Equal(m_domain.Mod(m_domain.Subtract(a, b), m_modulus), m_domain.Identity());} - - const Element& Identity() const - {return m_domain.Identity();} - - const Element& Add(const Element &a, const Element &b) const - {return m_domain.Add(a, b);} - - Element& Accumulate(Element &a, const Element &b) const - {return m_domain.Accumulate(a, b);} - - const Element& Inverse(const Element &a) const - {return m_domain.Inverse(a);} - - const Element& Subtract(const Element &a, const Element &b) const - {return m_domain.Subtract(a, b);} - - Element& Reduce(Element &a, const Element &b) const - {return m_domain.Reduce(a, b);} - - const Element& Double(const Element &a) const - {return m_domain.Double(a);} - - bool IsUnit(const Element &a) const - {return m_domain.IsUnit(m_domain.Gcd(a, m_modulus));} - - const Element& MultiplicativeIdentity() const - {return m_domain.MultiplicativeIdentity();} - - const Element& Multiply(const Element &a, const Element &b) const - {return m_domain.Mod(m_domain.Multiply(a, b), m_modulus);} - - const Element& Square(const Element &a) const - {return m_domain.Mod(m_domain.Square(a), m_modulus);} - - const Element& MultiplicativeInverse(const Element &a) const; - - bool operator==(const QuotientRing &rhs) const - {return m_domain == rhs.m_domain && m_modulus == rhs.m_modulus;} - -protected: - EuclideanDomain m_domain; - Element m_modulus; -}; - -NAMESPACE_END - -#ifdef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES -#include "algebra.cpp" -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/algparam.h b/third_party/cryptoppwin/include/cryptopp/algparam.h deleted file mode 100644 index 72dae198..00000000 --- a/third_party/cryptoppwin/include/cryptopp/algparam.h +++ /dev/null @@ -1,520 +0,0 @@ -// algparam.h - originally written and placed in the public domain by Wei Dai - -/// \file algparam.h -/// \brief Classes for working with NameValuePairs - -#ifndef CRYPTOPP_ALGPARAM_H -#define CRYPTOPP_ALGPARAM_H - -#include "config.h" -#include "cryptlib.h" - -#include "smartptr.h" -#include "secblock.h" -#include "integer.h" -#include "misc.h" - -#include -#include -#include - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Used to pass byte array input as part of a NameValuePairs object -class ConstByteArrayParameter -{ -public: - /// \brief Construct a ConstByteArrayParameter - /// \param data a C-String - /// \param deepCopy flag indicating whether the data should be copied - /// \details The deepCopy option is used when the NameValuePairs object can't - /// keep a copy of the data available - ConstByteArrayParameter(const char *data = NULLPTR, bool deepCopy = false) - : m_deepCopy(false), m_data(NULLPTR), m_size(0) - { - Assign(reinterpret_cast(data), data ? strlen(data) : 0, deepCopy); - } - - /// \brief Construct a ConstByteArrayParameter - /// \param data a memory buffer - /// \param size the length of the memory buffer - /// \param deepCopy flag indicating whether the data should be copied - /// \details The deepCopy option is used when the NameValuePairs object can't - /// keep a copy of the data available - ConstByteArrayParameter(const byte *data, size_t size, bool deepCopy = false) - : m_deepCopy(false), m_data(NULLPTR), m_size(0) - { - Assign(data, size, deepCopy); - } - - /// \brief Construct a ConstByteArrayParameter - /// \tparam T a std::basic_string or std::vector class - /// \param string a std::basic_string or std::vector object - /// \param deepCopy flag indicating whether the data should be copied - /// \details The deepCopy option is used when the NameValuePairs object can't - /// keep a copy of the data available - template ConstByteArrayParameter(const T &string, bool deepCopy = false) - : m_deepCopy(false), m_data(NULLPTR), m_size(0) - { - CRYPTOPP_COMPILE_ASSERT(sizeof(typename T::value_type) == 1); - Assign(reinterpret_cast(&string[0]), string.size(), deepCopy); - } - - /// \brief Assign contents from a memory buffer - /// \param data a memory buffer - /// \param size the length of the memory buffer - /// \param deepCopy flag indicating whether the data should be copied - /// \details The deepCopy option is used when the NameValuePairs object can't - /// keep a copy of the data available - void Assign(const byte *data, size_t size, bool deepCopy) - { - // This fires, which means: no data with a size, or data with no size. - // CRYPTOPP_ASSERT((data && size) || !(data || size)); - if (deepCopy) - m_block.Assign(data, size); - else - { - m_data = data; - m_size = size; - } - m_deepCopy = deepCopy; - } - - /// \brief Pointer to the first byte in the memory block - const byte *begin() const {return m_deepCopy ? m_block.begin() : m_data;} - /// \brief Pointer beyond the last byte in the memory block - const byte *end() const {return m_deepCopy ? m_block.end() : m_data + m_size;} - /// \brief Length of the memory block - size_t size() const {return m_deepCopy ? m_block.size() : m_size;} - -private: - bool m_deepCopy; - const byte *m_data; - size_t m_size; - SecByteBlock m_block; -}; - -/// \brief Used to pass byte array input as part of a NameValuePairs object -class ByteArrayParameter -{ -public: - /// \brief Construct a ByteArrayParameter - /// \param data a memory buffer - /// \param size the length of the memory buffer - ByteArrayParameter(byte *data = NULLPTR, unsigned int size = 0) - : m_data(data), m_size(size) {} - - /// \brief Construct a ByteArrayParameter - /// \param block a SecByteBlock - ByteArrayParameter(SecByteBlock &block) - : m_data(block.begin()), m_size(block.size()) {} - - /// \brief Pointer to the first byte in the memory block - byte *begin() const {return m_data;} - /// \brief Pointer beyond the last byte in the memory block - byte *end() const {return m_data + m_size;} - /// \brief Length of the memory block - size_t size() const {return m_size;} - -private: - byte *m_data; - size_t m_size; -}; - -/// \brief Combines two sets of NameValuePairs -/// \details CombinedNameValuePairs allows you to provide two sets of of NameValuePairs. -/// If a name is not found in the first set, then the second set is searched for the -/// name and value pair. The second set of NameValuePairs often provides default values. -class CRYPTOPP_DLL CombinedNameValuePairs : public NameValuePairs -{ -public: - /// \brief Construct a CombinedNameValuePairs - /// \param pairs1 reference to the first set of NameValuePairs - /// \param pairs2 reference to the second set of NameValuePairs - CombinedNameValuePairs(const NameValuePairs &pairs1, const NameValuePairs &pairs2) - : m_pairs1(pairs1), m_pairs2(pairs2) {} - - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - -private: - const NameValuePairs &m_pairs1, &m_pairs2; -}; - -#ifndef CRYPTOPP_DOXYGEN_PROCESSING -template -class GetValueHelperClass -{ -public: - GetValueHelperClass(const T *pObject, const char *name, const std::type_info &valueType, void *pValue, const NameValuePairs *searchFirst) - : m_pObject(pObject), m_name(name), m_valueType(&valueType), m_pValue(pValue), m_found(false), m_getValueNames(false) - { - if (strcmp(m_name, "ValueNames") == 0) - { - m_found = m_getValueNames = true; - NameValuePairs::ThrowIfTypeMismatch(m_name, typeid(std::string), *m_valueType); - if (searchFirst) - searchFirst->GetVoidValue(m_name, valueType, pValue); - if (typeid(T) != typeid(BASE)) - pObject->BASE::GetVoidValue(m_name, valueType, pValue); - ((*reinterpret_cast(m_pValue) += "ThisPointer:") += typeid(T).name()) += ';'; - } - - if (!m_found && strncmp(m_name, "ThisPointer:", 12) == 0 && strcmp(m_name+12, typeid(T).name()) == 0) - { - NameValuePairs::ThrowIfTypeMismatch(m_name, typeid(T *), *m_valueType); - *reinterpret_cast(pValue) = pObject; - m_found = true; - return; - } - - if (!m_found && searchFirst) - m_found = searchFirst->GetVoidValue(m_name, valueType, pValue); - - if (!m_found && typeid(T) != typeid(BASE)) - m_found = pObject->BASE::GetVoidValue(m_name, valueType, pValue); - } - - operator bool() const {return m_found;} - - template - GetValueHelperClass & operator()(const char *name, const R & (T::*pm)() const) - { - if (m_getValueNames) - (*reinterpret_cast(m_pValue) += name) += ";"; - if (!m_found && strcmp(name, m_name) == 0) - { - NameValuePairs::ThrowIfTypeMismatch(name, typeid(R), *m_valueType); - *reinterpret_cast(m_pValue) = (m_pObject->*pm)(); - m_found = true; - } - return *this; - } - - GetValueHelperClass &Assignable() - { -#ifndef __INTEL_COMPILER // ICL 9.1 workaround: Intel compiler copies the vTable pointer for some reason - if (m_getValueNames) - ((*reinterpret_cast(m_pValue) += "ThisObject:") += typeid(T).name()) += ';'; - if (!m_found && strncmp(m_name, "ThisObject:", 11) == 0 && strcmp(m_name+11, typeid(T).name()) == 0) - { - NameValuePairs::ThrowIfTypeMismatch(m_name, typeid(T), *m_valueType); - *reinterpret_cast(m_pValue) = *m_pObject; - m_found = true; - } -#endif - return *this; - } - -private: - const T *m_pObject; - const char *m_name; - const std::type_info *m_valueType; - void *m_pValue; - bool m_found, m_getValueNames; -}; - -template -GetValueHelperClass GetValueHelper(const T *pObject, const char *name, const std::type_info &valueType, void *pValue, const NameValuePairs *searchFirst=NULLPTR) -{ - return GetValueHelperClass(pObject, name, valueType, pValue, searchFirst); -} - -template -GetValueHelperClass GetValueHelper(const T *pObject, const char *name, const std::type_info &valueType, void *pValue, const NameValuePairs *searchFirst=NULLPTR) -{ - return GetValueHelperClass(pObject, name, valueType, pValue, searchFirst); -} - -// ******************************************************** - -template -class AssignFromHelperClass -{ -public: - AssignFromHelperClass(T *pObject, const NameValuePairs &source) - : m_pObject(pObject), m_source(source), m_done(false) - { - if (source.GetThisObject(*pObject)) - m_done = true; - else if (typeid(BASE) != typeid(T)) - pObject->BASE::AssignFrom(source); - } - - template - AssignFromHelperClass & operator()(const char *name, void (T::*pm)(const R&)) - { - if (!m_done) - { - R value; - if (!m_source.GetValue(name, value)) - throw InvalidArgument(std::string(typeid(T).name()) + ": Missing required parameter '" + name + "'"); - (m_pObject->*pm)(value); - } - return *this; - } - - template - AssignFromHelperClass & operator()(const char *name1, const char *name2, void (T::*pm)(const R&, const S&)) - { - if (!m_done) - { - R value1; - if (!m_source.GetValue(name1, value1)) - throw InvalidArgument(std::string(typeid(T).name()) + ": Missing required parameter '" + name1 + "'"); - S value2; - if (!m_source.GetValue(name2, value2)) - throw InvalidArgument(std::string(typeid(T).name()) + ": Missing required parameter '" + name2 + "'"); - (m_pObject->*pm)(value1, value2); - } - return *this; - } - -private: - T *m_pObject; - const NameValuePairs &m_source; - bool m_done; -}; - -template -AssignFromHelperClass AssignFromHelper(T *pObject, const NameValuePairs &source) -{ - return AssignFromHelperClass(pObject, source); -} - -template -AssignFromHelperClass AssignFromHelper(T *pObject, const NameValuePairs &source) -{ - return AssignFromHelperClass(pObject, source); -} - -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -// ******************************************************** - -#ifndef CRYPTOPP_NO_ASSIGN_TO_INTEGER -// Allow the linker to discard Integer code if not needed. -// Also see http://github.com/weidai11/cryptopp/issues/389. -CRYPTOPP_DLL bool AssignIntToInteger(const std::type_info &valueType, void *pInteger, const void *pInt); -#endif - -CRYPTOPP_DLL const std::type_info & CRYPTOPP_API IntegerTypeId(); - -/// \brief Base class for AlgorithmParameters -class CRYPTOPP_DLL AlgorithmParametersBase -{ -public: - /// \brief Exception thrown when an AlgorithmParameter is unused - class ParameterNotUsed : public Exception - { - public: - ParameterNotUsed(const char *name) : Exception(OTHER_ERROR, std::string("AlgorithmParametersBase: parameter \"") + name + "\" not used") {} - }; - - virtual ~AlgorithmParametersBase() CRYPTOPP_THROW - { - -#if defined(CRYPTOPP_CXX17_UNCAUGHT_EXCEPTIONS) - if (std::uncaught_exceptions() == 0) -#elif defined(CRYPTOPP_CXX98_UNCAUGHT_EXCEPTION) - if (std::uncaught_exception() == false) -#else - try -#endif - { - if (m_throwIfNotUsed && !m_used) - throw ParameterNotUsed(m_name); - } -#if !defined(CRYPTOPP_CXX98_UNCAUGHT_EXCEPTION) -# if !defined(CRYPTOPP_CXX17_UNCAUGHT_EXCEPTIONS) - catch(const Exception&) - { - } -# endif -#endif - } - - // this is actually a move, not a copy - AlgorithmParametersBase(const AlgorithmParametersBase &x) - : m_name(x.m_name), m_throwIfNotUsed(x.m_throwIfNotUsed), m_used(x.m_used) - { - m_next.reset(const_cast(x).m_next.release()); - x.m_used = true; - } - - /// \brief Construct a AlgorithmParametersBase - /// \param name the parameter name - /// \param throwIfNotUsed flags indicating whether an exception should be thrown - /// \details If throwIfNotUsed is true, then a ParameterNotUsed exception - /// will be thrown in the destructor if the parameter is not not retrieved. - AlgorithmParametersBase(const char *name, bool throwIfNotUsed) - : m_name(name), m_throwIfNotUsed(throwIfNotUsed), m_used(false) {} - - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - -protected: - friend class AlgorithmParameters; - void operator=(const AlgorithmParametersBase& rhs); // assignment not allowed, declare this for VC60 - - virtual void AssignValue(const char *name, const std::type_info &valueType, void *pValue) const =0; - virtual void MoveInto(void *p) const =0; // not really const - - const char *m_name; - bool m_throwIfNotUsed; - mutable bool m_used; - member_ptr m_next; -}; - -/// \brief Template base class for AlgorithmParameters -/// \tparam T the class or type -template -class AlgorithmParametersTemplate : public AlgorithmParametersBase -{ -public: - /// \brief Construct an AlgorithmParametersTemplate - /// \param name the name of the value - /// \param value a reference to the value - /// \param throwIfNotUsed flags indicating whether an exception should be thrown - /// \details If throwIfNotUsed is true, then a ParameterNotUsed exception - /// will be thrown in the destructor if the parameter is not not retrieved. - AlgorithmParametersTemplate(const char *name, const T &value, bool throwIfNotUsed) - : AlgorithmParametersBase(name, throwIfNotUsed), m_value(value) - { - } - - void AssignValue(const char *name, const std::type_info &valueType, void *pValue) const - { -#ifndef CRYPTOPP_NO_ASSIGN_TO_INTEGER - // Special case for retrieving an Integer parameter when an int was passed in - if (!(typeid(T) == typeid(int) && AssignIntToInteger(valueType, pValue, &m_value))) -#endif - { - NameValuePairs::ThrowIfTypeMismatch(name, typeid(T), valueType); - *reinterpret_cast(pValue) = m_value; - } - } - -#if defined(DEBUG_NEW) && (CRYPTOPP_MSC_VERSION >= 1300) -# pragma push_macro("new") -# undef new -#endif - - void MoveInto(void *buffer) const - { - AlgorithmParametersTemplate* p = new(buffer) AlgorithmParametersTemplate(*this); - CRYPTOPP_UNUSED(p); // silence warning - } - -#if defined(DEBUG_NEW) && (CRYPTOPP_MSC_VERSION >= 1300) -# pragma pop_macro("new") -#endif - -protected: - T m_value; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS AlgorithmParametersTemplate; -CRYPTOPP_DLL_TEMPLATE_CLASS AlgorithmParametersTemplate; -CRYPTOPP_DLL_TEMPLATE_CLASS AlgorithmParametersTemplate; - -/// \brief An object that implements NameValuePairs -/// \note A NameValuePairs object containing an arbitrary number of name value pairs may be constructed by -/// repeatedly using operator() on the object returned by MakeParameters, for example: -///
-///     AlgorithmParameters parameters = MakeParameters(name1, value1)(name2, value2)(name3, value3);
-///   
-class CRYPTOPP_DLL AlgorithmParameters : public NameValuePairs -{ -public: - /// \brief Construct a AlgorithmParameters - /// \note A NameValuePairs object containing an arbitrary number of name value pairs may be constructed by - /// repeatedly using operator() on the object returned by MakeParameters, for example: - ///
-	///     AlgorithmParameters parameters = MakeParameters(name1, value1)(name2, value2)(name3, value3);
-	///   
- AlgorithmParameters(); - -#ifdef __BORLANDC__ - /// \brief Construct a AlgorithmParameters - /// \tparam T the class or type - /// \param name the name of the object or value to retrieve - /// \param value reference to a variable that receives the value - /// \param throwIfNotUsed if true, the object will throw an exception if the value is not accessed - /// \note throwIfNotUsed is ignored if using a compiler that does not support std::uncaught_exception(), - /// such as MSVC 7.0 and earlier. - /// \note A NameValuePairs object containing an arbitrary number of name value pairs may be constructed by - /// repeatedly using operator() on the object returned by MakeParameters, for example: - ///
-	///     AlgorithmParameters parameters = MakeParameters(name1, value1)(name2, value2)(name3, value3);
-	///   
- template - AlgorithmParameters(const char *name, const T &value, bool throwIfNotUsed=true) - : m_next(new AlgorithmParametersTemplate(name, value, throwIfNotUsed)) - , m_defaultThrowIfNotUsed(throwIfNotUsed) - { - } -#endif - - AlgorithmParameters(const AlgorithmParameters &x); - - AlgorithmParameters & operator=(const AlgorithmParameters &x); - - /// \tparam T the class or type - /// \param name the name of the object or value to retrieve - /// \param value reference to a variable that receives the value - /// \param throwIfNotUsed if true, the object will throw an exception if the value is not accessed - template - AlgorithmParameters & operator()(const char *name, const T &value, bool throwIfNotUsed) - { - member_ptr p(new AlgorithmParametersTemplate(name, value, throwIfNotUsed)); - p->m_next.reset(m_next.release()); - m_next.reset(p.release()); - m_defaultThrowIfNotUsed = throwIfNotUsed; - return *this; - } - - /// \brief Appends a NameValuePair to a collection of NameValuePairs - /// \tparam T the class or type - /// \param name the name of the object or value to retrieve - /// \param value reference to a variable that receives the value - template - AlgorithmParameters & operator()(const char *name, const T &value) - { - return operator()(name, value, m_defaultThrowIfNotUsed); - } - - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - -protected: - member_ptr m_next; - bool m_defaultThrowIfNotUsed; -}; - -/// \brief Create an object that implements NameValuePairs -/// \tparam T the class or type -/// \param name the name of the object or value to retrieve -/// \param value reference to a variable that receives the value -/// \param throwIfNotUsed if true, the object will throw an exception if the value is not accessed -/// \note throwIfNotUsed is ignored if using a compiler that does not support std::uncaught_exception(), -/// such as MSVC 7.0 and earlier. -/// \note A NameValuePairs object containing an arbitrary number of name value pairs may be constructed by -/// repeatedly using \p operator() on the object returned by \p MakeParameters, for example: -///
-///     AlgorithmParameters parameters = MakeParameters(name1, value1)(name2, value2)(name3, value3);
-///   
-#ifdef __BORLANDC__ -typedef AlgorithmParameters MakeParameters; -#else -template -AlgorithmParameters MakeParameters(const char *name, const T &value, bool throwIfNotUsed = true) -{ - return AlgorithmParameters()(name, value, throwIfNotUsed); -} -#endif - -#define CRYPTOPP_GET_FUNCTION_ENTRY(name) (Name::name(), &ThisClass::Get##name) -#define CRYPTOPP_SET_FUNCTION_ENTRY(name) (Name::name(), &ThisClass::Set##name) -#define CRYPTOPP_SET_FUNCTION_ENTRY2(name1, name2) (Name::name1(), Name::name2(), &ThisClass::Set##name1##And##name2) - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/allocate.h b/third_party/cryptoppwin/include/cryptopp/allocate.h deleted file mode 100644 index b106b078..00000000 --- a/third_party/cryptoppwin/include/cryptopp/allocate.h +++ /dev/null @@ -1,74 +0,0 @@ -// allocate.h - written and placed in the public domain by Jeffrey Walton - -// The functions in allocate.h and allocate.cpp were originally in misc.h -// and misc.cpp. They were extracted in September 2019 to sidestep a circular -// dependency with misc.h and secblock.h. - -/// \file allocate.h -/// \brief Functions for allocating aligned buffers - -#ifndef CRYPTOPP_ALLOCATE_H -#define CRYPTOPP_ALLOCATE_H - -#include "config.h" -#include "cryptlib.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Attempts to reclaim unused memory -/// \throw bad_alloc -/// \details In the normal course of running a program, a request for memory -/// normally succeeds. If a call to AlignedAllocate or UnalignedAllocate fails, -/// then CallNewHandler is called in n effort to recover. Internally, -/// CallNewHandler calls set_new_handler(nullptr) in an effort to free memory. -/// There is no guarantee CallNewHandler will be able to obtain more memory so -/// an allocation succeeds. If the call to set_new_handler fails, then CallNewHandler -/// throws a bad_alloc exception. -/// \throw bad_alloc on failure -/// \since Crypto++ 5.0 -/// \sa AlignedAllocate, AlignedDeallocate, UnalignedAllocate, UnalignedDeallocate -CRYPTOPP_DLL void CRYPTOPP_API CallNewHandler(); - -/// \brief Allocates a buffer on 16-byte boundary -/// \param size the size of the buffer -/// \details AlignedAllocate is primarily used when the data will be -/// processed by SSE, NEON, ARMv8 or PowerPC instructions. The assembly -/// language routines rely on the alignment. If the alignment is not -/// respected, then a SIGBUS could be generated on Unix and Linux, and an -/// EXCEPTION_DATATYPE_MISALIGNMENT could be generated on Windows. -/// \details Formerly, AlignedAllocate and AlignedDeallocate were only -/// available on certain platforms when CRYTPOPP_DISABLE_ASM was not in -/// effect. However, Android and iOS debug simulator builds got into a -/// state where the aligned allocator was not available and caused link -/// failures. -/// \since AlignedAllocate for SIMD since Crypto++ 1.0, AlignedAllocate -/// for all builds since Crypto++ 8.1 -/// \sa AlignedDeallocate, UnalignedAllocate, UnalignedDeallocate, CallNewHandler, -/// Issue 779 -CRYPTOPP_DLL void* CRYPTOPP_API AlignedAllocate(size_t size); - -/// \brief Frees a buffer allocated with AlignedAllocate -/// \param ptr the buffer to free -/// \since AlignedDeallocate for SIMD since Crypto++ 1.0, AlignedAllocate -/// for all builds since Crypto++ 8.1 -/// \sa AlignedAllocate, UnalignedAllocate, UnalignedDeallocate, CallNewHandler, -/// Issue 779 -CRYPTOPP_DLL void CRYPTOPP_API AlignedDeallocate(void *ptr); - -/// \brief Allocates a buffer -/// \param size the size of the buffer -/// \since Crypto++ 1.0 -/// \sa AlignedAllocate, AlignedDeallocate, UnalignedDeallocate, CallNewHandler, -/// Issue 779 -CRYPTOPP_DLL void * CRYPTOPP_API UnalignedAllocate(size_t size); - -/// \brief Frees a buffer allocated with UnalignedAllocate -/// \param ptr the buffer to free -/// \since Crypto++ 1.0 -/// \sa AlignedAllocate, AlignedDeallocate, UnalignedAllocate, CallNewHandler, -/// Issue 779 -CRYPTOPP_DLL void CRYPTOPP_API UnalignedDeallocate(void *ptr); - -NAMESPACE_END - -#endif // CRYPTOPP_ALLOCATE_H diff --git a/third_party/cryptoppwin/include/cryptopp/arc4.h b/third_party/cryptoppwin/include/cryptopp/arc4.h deleted file mode 100644 index ca444ce4..00000000 --- a/third_party/cryptoppwin/include/cryptopp/arc4.h +++ /dev/null @@ -1,89 +0,0 @@ -// arc4.h - originally written and placed in the public domain by Wei Dai - -/// \file arc4.h -/// \brief Classes for ARC4 cipher -/// \since Crypto++ 3.1 - -#ifndef CRYPTOPP_ARC4_H -#define CRYPTOPP_ARC4_H - -#include "cryptlib.h" -#include "strciphr.h" -#include "secblock.h" -#include "smartptr.h" - -NAMESPACE_BEGIN(CryptoPP) - -namespace Weak1 { - -/// \brief ARC4 base class -/// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions -/// \since Crypto++ 3.1 -class CRYPTOPP_NO_VTABLE ARC4_Base : public VariableKeyLength<16, 1, 256>, public RandomNumberGenerator, public SymmetricCipher, public SymmetricCipherDocumentation -{ -public: - ~ARC4_Base(); - - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "ARC4";} - - void GenerateBlock(byte *output, size_t size); - void DiscardBytes(size_t n); - - void ProcessData(byte *outString, const byte *inString, size_t length); - - bool IsRandomAccess() const {return false;} - bool IsSelfInverting() const {return true;} - bool IsForwardTransformation() const {return true;} - - typedef SymmetricCipherFinal Encryption; - typedef SymmetricCipherFinal Decryption; - -protected: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - virtual unsigned int GetDefaultDiscardBytes() const {return 0;} - - FixedSizeSecBlock m_state; - byte m_x, m_y; -}; - -/// \brief Alleged RC4 -/// \sa Alleged RC4 -/// \since Crypto++ 3.1 -DOCUMENTED_TYPEDEF(SymmetricCipherFinal, ARC4); - -/// \brief MARC4 base class -/// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions -/// \details MARC4 discards the first 256 bytes of keystream, which may be weaker than the rest -/// \since Crypto++ 3.1 -class CRYPTOPP_NO_VTABLE MARC4_Base : public ARC4_Base -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "MARC4";} - - typedef SymmetricCipherFinal Encryption; - typedef SymmetricCipherFinal Decryption; - -protected: - unsigned int GetDefaultDiscardBytes() const {return 256;} -}; - -/// \brief Modified Alleged RC4 -/// \sa Alleged RC4 -/// \since Crypto++ 3.1 -DOCUMENTED_TYPEDEF(SymmetricCipherFinal, MARC4); - -} -#if CRYPTOPP_ENABLE_NAMESPACE_WEAK >= 1 -namespace Weak {using namespace Weak1;} // import Weak1 into CryptoPP::Weak -#else -using namespace Weak1; // import Weak1 into CryptoPP with warning -#ifdef __GNUC__ -#warning "You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning." -#else -#pragma message("You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning.") -#endif -#endif - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/argnames.h b/third_party/cryptoppwin/include/cryptopp/argnames.h deleted file mode 100644 index 4f929d5d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/argnames.h +++ /dev/null @@ -1,99 +0,0 @@ -// argnames.h - originally written and placed in the public domain by Wei Dai - -/// \file argnames.h -/// \brief Standard names for retrieving values by name when working with \p NameValuePairs - -#ifndef CRYPTOPP_ARGNAMES_H -#define CRYPTOPP_ARGNAMES_H - -#include "cryptlib.h" - -NAMESPACE_BEGIN(CryptoPP) - -DOCUMENTED_NAMESPACE_BEGIN(Name) - -#define CRYPTOPP_DEFINE_NAME_STRING(name) inline const char *name() {return #name;} - -CRYPTOPP_DEFINE_NAME_STRING(ValueNames) ///< string, a list of value names with a semicolon (';') after each name -CRYPTOPP_DEFINE_NAME_STRING(Version) ///< int -CRYPTOPP_DEFINE_NAME_STRING(Seed) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(Key) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(IV) ///< ConstByteArrayParameter, also accepts const byte * for backwards compatibility -CRYPTOPP_DEFINE_NAME_STRING(StolenIV) ///< byte * -CRYPTOPP_DEFINE_NAME_STRING(Nonce) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(Rounds) ///< int -CRYPTOPP_DEFINE_NAME_STRING(FeedbackSize) ///< int -CRYPTOPP_DEFINE_NAME_STRING(WordSize) ///< int, in bytes -CRYPTOPP_DEFINE_NAME_STRING(BlockSize) ///< int, in bytes -CRYPTOPP_DEFINE_NAME_STRING(EffectiveKeyLength) ///< int, in bits -CRYPTOPP_DEFINE_NAME_STRING(KeySize) ///< int, in bits -CRYPTOPP_DEFINE_NAME_STRING(ModulusSize) ///< int, in bits -CRYPTOPP_DEFINE_NAME_STRING(SubgroupOrderSize) ///< int, in bits -CRYPTOPP_DEFINE_NAME_STRING(PrivateExponentSize)///< int, in bits -CRYPTOPP_DEFINE_NAME_STRING(Modulus) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(PublicExponent) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(PrivateExponent) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(PublicElement) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(SubgroupOrder) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(Cofactor) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(SubgroupGenerator) ///< Integer, ECP::Point, or EC2N::Point -CRYPTOPP_DEFINE_NAME_STRING(Curve) ///< ECP or EC2N -CRYPTOPP_DEFINE_NAME_STRING(GroupOID) ///< OID -CRYPTOPP_DEFINE_NAME_STRING(PointerToPrimeSelector) ///< const PrimeSelector * -CRYPTOPP_DEFINE_NAME_STRING(Prime1) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(Prime2) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(ModPrime1PrivateExponent) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(ModPrime2PrivateExponent) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(MultiplicativeInverseOfPrime2ModPrime1) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(QuadraticResidueModPrime1) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(QuadraticResidueModPrime2) ///< Integer -CRYPTOPP_DEFINE_NAME_STRING(PutMessage) ///< bool -CRYPTOPP_DEFINE_NAME_STRING(TruncatedDigestSize) ///< int -CRYPTOPP_DEFINE_NAME_STRING(BlockPaddingScheme) ///< StreamTransformationFilter::BlockPaddingScheme -CRYPTOPP_DEFINE_NAME_STRING(HashVerificationFilterFlags) ///< word32 -CRYPTOPP_DEFINE_NAME_STRING(AuthenticatedDecryptionFilterFlags) ///< word32 -CRYPTOPP_DEFINE_NAME_STRING(SignatureVerificationFilterFlags) ///< word32 -CRYPTOPP_DEFINE_NAME_STRING(InputBuffer) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(OutputBuffer) ///< ByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(InputFileName) ///< const char * -CRYPTOPP_DEFINE_NAME_STRING(InputFileNameWide) ///< const wchar_t * -CRYPTOPP_DEFINE_NAME_STRING(InputStreamPointer) ///< std::istream * -CRYPTOPP_DEFINE_NAME_STRING(InputBinaryMode) ///< bool -CRYPTOPP_DEFINE_NAME_STRING(OutputFileName) ///< const char * -CRYPTOPP_DEFINE_NAME_STRING(OutputFileNameWide) ///< const wchar_t * -CRYPTOPP_DEFINE_NAME_STRING(OutputStreamPointer) ///< std::ostream * -CRYPTOPP_DEFINE_NAME_STRING(OutputBinaryMode) ///< bool -CRYPTOPP_DEFINE_NAME_STRING(EncodingParameters) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(KeyDerivationParameters) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(Separator) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(Terminator) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(Uppercase) ///< bool -CRYPTOPP_DEFINE_NAME_STRING(GroupSize) ///< int -CRYPTOPP_DEFINE_NAME_STRING(Pad) ///< bool -CRYPTOPP_DEFINE_NAME_STRING(PaddingByte) ///< byte -CRYPTOPP_DEFINE_NAME_STRING(Log2Base) ///< int -CRYPTOPP_DEFINE_NAME_STRING(EncodingLookupArray) ///< const byte * -CRYPTOPP_DEFINE_NAME_STRING(DecodingLookupArray) ///< const byte * -CRYPTOPP_DEFINE_NAME_STRING(InsertLineBreaks) ///< bool -CRYPTOPP_DEFINE_NAME_STRING(MaxLineLength) ///< int -CRYPTOPP_DEFINE_NAME_STRING(DigestSize) ///< int, in bytes -CRYPTOPP_DEFINE_NAME_STRING(L1KeyLength) ///< int, in bytes -CRYPTOPP_DEFINE_NAME_STRING(TableSize) ///< int, in bytes -CRYPTOPP_DEFINE_NAME_STRING(Blinding) ///< bool, timing attack mitigations, ON by default -CRYPTOPP_DEFINE_NAME_STRING(DerivedKey) ///< ByteArrayParameter, key derivation, derived key -CRYPTOPP_DEFINE_NAME_STRING(DerivedKeyLength) ///< int, key derivation, derived key length in bytes -CRYPTOPP_DEFINE_NAME_STRING(Personalization) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(PersonalizationSize) ///< int, in bytes -CRYPTOPP_DEFINE_NAME_STRING(Salt) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(Tweak) ///< ConstByteArrayParameter -CRYPTOPP_DEFINE_NAME_STRING(SaltSize) ///< int, in bytes -CRYPTOPP_DEFINE_NAME_STRING(TreeMode) ///< byte -CRYPTOPP_DEFINE_NAME_STRING(FileName) ///< const char * -CRYPTOPP_DEFINE_NAME_STRING(FileTime) ///< int -CRYPTOPP_DEFINE_NAME_STRING(Comment) ///< const char * -CRYPTOPP_DEFINE_NAME_STRING(Identity) ///< ConstByteArrayParameter -DOCUMENTED_NAMESPACE_END - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/aria.h b/third_party/cryptoppwin/include/cryptopp/aria.h deleted file mode 100644 index da623a16..00000000 --- a/third_party/cryptoppwin/include/cryptopp/aria.h +++ /dev/null @@ -1,71 +0,0 @@ -// aria.h - written and placed in the public domain by Jeffrey Walton - -/// \file aria.h -/// \brief Classes for the ARIA block cipher -/// \details The Crypto++ ARIA implementation is based on the 32-bit implementation by Aaram Yun -/// from the National Security Research Institute, KOREA. Aaram Yun's implementation is based on -/// the 8-bit implementation by Jin Hong. The source files are available in ARIA.zip from the Korea -/// Internet & Security Agency website. -/// \sa RFC 5794, A Description of the ARIA Encryption Algorithm, -/// Korea -/// Internet & Security Agency homepage - -#ifndef CRYPTOPP_ARIA_H -#define CRYPTOPP_ARIA_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief ARIA block cipher information -/// \since Crypto++ 6.0 -struct ARIA_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "ARIA";} -}; - -/// \brief ARIA block cipher -/// \details The Crypto++ ARIA implementation is based on the 32-bit implementation by Aaram Yun -/// from the National Security Research Institute, KOREA. Aaram Yun's implementation is based on -/// the 8-bit implementation by Jin Hong. The source files are available in ARIA.zip from the Korea -/// Internet & Security Agency website. -/// \sa RFC 5794, A Description of the ARIA Encryption Algorithm, -/// Korea -/// Internet & Security Agency homepage -/// \sa ARIA -/// \since Crypto++ 6.0 -class ARIA : public ARIA_Info, public BlockCipherDocumentation -{ -public: - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - Base() : m_rounds(0) {} - - protected: - void UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - private: - // Reference implementation allocates a table of 17 round keys. - typedef SecBlock > AlignedByteBlock; - typedef SecBlock > AlignedWordBlock; - - AlignedWordBlock m_rk; // round keys - AlignedWordBlock m_w; // w0, w1, w2, w3, t and u - unsigned int m_rounds; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef ARIA::Encryption ARIAEncryption; -typedef ARIA::Decryption ARIADecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/arm_simd.h b/third_party/cryptoppwin/include/cryptopp/arm_simd.h deleted file mode 100644 index b8eabe15..00000000 --- a/third_party/cryptoppwin/include/cryptopp/arm_simd.h +++ /dev/null @@ -1,427 +0,0 @@ -// arm_simd.h - written and placed in public domain by Jeffrey Walton - -/// \file arm_simd.h -/// \brief Support functions for ARM and vector operations - -#ifndef CRYPTOPP_ARM_SIMD_H -#define CRYPTOPP_ARM_SIMD_H - -#include "config.h" - -#if (CRYPTOPP_ARM_NEON_HEADER) -# include -# include -#endif - -#if (CRYPTOPP_ARM_ACLE_HEADER) -# include -# include -#endif - -#if (CRYPTOPP_ARM_CRC32_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \name CRC32 checksum -//@{ - -/// \brief CRC32 checksum -/// \param crc the starting crc value -/// \param val the value to checksum -/// \return CRC32 value -/// \since Crypto++ 8.6 -inline uint32_t CRC32B (uint32_t crc, uint8_t val) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return __crc32b(crc, val); -#else - __asm__ ("crc32b %w0, %w0, %w1 \n\t" - :"+r" (crc) : "r" (val) ); - return crc; -#endif -} - -/// \brief CRC32 checksum -/// \param crc the starting crc value -/// \param val the value to checksum -/// \return CRC32 value -/// \since Crypto++ 8.6 -inline uint32_t CRC32W (uint32_t crc, uint32_t val) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return __crc32w(crc, val); -#else - __asm__ ("crc32w %w0, %w0, %w1 \n\t" - :"+r" (crc) : "r" (val) ); - return crc; -#endif -} - -/// \brief CRC32 checksum -/// \param crc the starting crc value -/// \param vals the values to checksum -/// \return CRC32 value -/// \since Crypto++ 8.6 -inline uint32_t CRC32Wx4 (uint32_t crc, const uint32_t vals[4]) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return __crc32w(__crc32w(__crc32w(__crc32w( - crc, vals[0]), vals[1]), vals[2]), vals[3]); -#else - __asm__ ("crc32w %w0, %w0, %w1 \n\t" - "crc32w %w0, %w0, %w2 \n\t" - "crc32w %w0, %w0, %w3 \n\t" - "crc32w %w0, %w0, %w4 \n\t" - :"+r" (crc) : "r" (vals[0]), "r" (vals[1]), - "r" (vals[2]), "r" (vals[3])); - return crc; -#endif -} - -//@} -/// \name CRC32-C checksum - -/// \brief CRC32-C checksum -/// \param crc the starting crc value -/// \param val the value to checksum -/// \return CRC32-C value -/// \since Crypto++ 8.6 -inline uint32_t CRC32CB (uint32_t crc, uint8_t val) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return __crc32cb(crc, val); -#else - __asm__ ("crc32cb %w0, %w0, %w1 \n\t" - :"+r" (crc) : "r" (val) ); - return crc; -#endif -} - -/// \brief CRC32-C checksum -/// \param crc the starting crc value -/// \param val the value to checksum -/// \return CRC32-C value -/// \since Crypto++ 8.6 -inline uint32_t CRC32CW (uint32_t crc, uint32_t val) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return __crc32cw(crc, val); -#else - __asm__ ("crc32cw %w0, %w0, %w1 \n\t" - :"+r" (crc) : "r" (val) ); - return crc; -#endif -} - -/// \brief CRC32-C checksum -/// \param crc the starting crc value -/// \param vals the values to checksum -/// \return CRC32-C value -/// \since Crypto++ 8.6 -inline uint32_t CRC32CWx4 (uint32_t crc, const uint32_t vals[4]) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return __crc32cw(__crc32cw(__crc32cw(__crc32cw( - crc, vals[0]), vals[1]), vals[2]), vals[3]); -#else - __asm__ ("crc32cw %w0, %w0, %w1 \n\t" - "crc32cw %w0, %w0, %w2 \n\t" - "crc32cw %w0, %w0, %w3 \n\t" - "crc32cw %w0, %w0, %w4 \n\t" - :"+r" (crc) : "r" (vals[0]), "r" (vals[1]), - "r" (vals[2]), "r" (vals[3])); - return crc; -#endif -} -//@} -#endif // CRYPTOPP_ARM_CRC32_AVAILABLE - -#if (CRYPTOPP_ARM_PMULL_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \name Polynomial multiplication -//@{ - -/// \brief Polynomial multiplication -/// \param a the first value -/// \param b the second value -/// \return vector product -/// \details PMULL_00() performs polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x00). -/// The 0x00 indicates the low 64-bits of a and b -/// are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and -/// numbered 0. -/// \since Crypto++ 8.0 -inline uint64x2_t PMULL_00(const uint64x2_t a, const uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - const __n64 x = { vgetq_lane_u64(a, 0) }; - const __n64 y = { vgetq_lane_u64(b, 0) }; - return vmull_p64(x, y); -#elif defined(__GNUC__) - uint64x2_t r; - __asm__ ("pmull %0.1q, %1.1d, %2.1d \n\t" - :"=w" (r) : "w" (a), "w" (b) ); - return r; -#else - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),0), - vgetq_lane_u64(vreinterpretq_u64_u8(b),0))); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first value -/// \param b the second value -/// \return vector product -/// \details PMULL_01 performs() polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x01). -/// The 0x01 indicates the low 64-bits of a and high -/// 64-bits of b are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and -/// numbered 0. -/// \since Crypto++ 8.0 -inline uint64x2_t PMULL_01(const uint64x2_t a, const uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - const __n64 x = { vgetq_lane_u64(a, 0) }; - const __n64 y = { vgetq_lane_u64(b, 1) }; - return vmull_p64(x, y); -#elif defined(__GNUC__) - uint64x2_t r; - __asm__ ("pmull %0.1q, %1.1d, %2.1d \n\t" - :"=w" (r) : "w" (a), "w" (vget_high_u64(b)) ); - return r; -#else - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),0), - vgetq_lane_u64(vreinterpretq_u64_u8(b),1))); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first value -/// \param b the second value -/// \return vector product -/// \details PMULL_10() performs polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x10). -/// The 0x10 indicates the high 64-bits of a and low -/// 64-bits of b are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and -/// numbered 0. -/// \since Crypto++ 8.0 -inline uint64x2_t PMULL_10(const uint64x2_t a, const uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - const __n64 x = { vgetq_lane_u64(a, 1) }; - const __n64 y = { vgetq_lane_u64(b, 0) }; - return vmull_p64(x, y); -#elif defined(__GNUC__) - uint64x2_t r; - __asm__ ("pmull %0.1q, %1.1d, %2.1d \n\t" - :"=w" (r) : "w" (vget_high_u64(a)), "w" (b) ); - return r; -#else - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),1), - vgetq_lane_u64(vreinterpretq_u64_u8(b),0))); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first value -/// \param b the second value -/// \return vector product -/// \details PMULL_11() performs polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x11). -/// The 0x11 indicates the high 64-bits of a and b -/// are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and -/// numbered 0. -/// \since Crypto++ 8.0 -inline uint64x2_t PMULL_11(const uint64x2_t a, const uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - const __n64 x = { vgetq_lane_u64(a, 1) }; - const __n64 y = { vgetq_lane_u64(b, 1) }; - return vmull_p64(x, y); -#elif defined(__GNUC__) - uint64x2_t r; - __asm__ ("pmull2 %0.1q, %1.2d, %2.2d \n\t" - :"=w" (r) : "w" (a), "w" (b) ); - return r; -#else - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),1), - vgetq_lane_u64(vreinterpretq_u64_u8(b),1))); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first value -/// \param b the second value -/// \return vector product -/// \details PMULL() performs vmull_p64(). PMULL is provided as -/// GCC inline assembly due to Clang and lack of support for the intrinsic. -/// \since Crypto++ 8.0 -inline uint64x2_t PMULL(const uint64x2_t a, const uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - const __n64 x = { vgetq_lane_u64(a, 0) }; - const __n64 y = { vgetq_lane_u64(b, 0) }; - return vmull_p64(x, y); -#elif defined(__GNUC__) - uint64x2_t r; - __asm__ ("pmull %0.1q, %1.1d, %2.1d \n\t" - :"=w" (r) : "w" (a), "w" (b) ); - return r; -#else - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),0), - vgetq_lane_u64(vreinterpretq_u64_u8(b),0))); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first value -/// \param b the second value -/// \return vector product -/// \details PMULL_HIGH() performs vmull_high_p64(). PMULL_HIGH is provided as -/// GCC inline assembly due to Clang and lack of support for the intrinsic. -/// \since Crypto++ 8.0 -inline uint64x2_t PMULL_HIGH(const uint64x2_t a, const uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - const __n64 x = { vgetq_lane_u64(a, 1) }; - const __n64 y = { vgetq_lane_u64(b, 1) }; - return vmull_p64(x, y); -#elif defined(__GNUC__) - uint64x2_t r; - __asm__ ("pmull2 %0.1q, %1.2d, %2.2d \n\t" - :"=w" (r) : "w" (a), "w" (b) ); - return r; -#else - return (uint64x2_t)(vmull_p64( - vgetq_lane_u64(vreinterpretq_u64_u8(a),1), - vgetq_lane_u64(vreinterpretq_u64_u8(b),1)))); -#endif -} - -/// \brief Vector extraction -/// \tparam C the byte count -/// \param a the first value -/// \param b the second value -/// \return vector -/// \details VEXT_U8() extracts the first C bytes of vector -/// a and the remaining bytes in b. VEXT_U8 is provided -/// as GCC inline assembly due to Clang and lack of support for the intrinsic. -/// \since Crypto++ 8.0 -template -inline uint64x2_t VEXT_U8(uint64x2_t a, uint64x2_t b) -{ - // https://github.com/weidai11/cryptopp/issues/366 -#if defined(CRYPTOPP_MSC_VERSION) - return vreinterpretq_u64_u8(vextq_u8( - vreinterpretq_u8_u64(a), vreinterpretq_u8_u64(b), C)); -#else - uint64x2_t r; - __asm__ ("ext %0.16b, %1.16b, %2.16b, %3 \n\t" - :"=w" (r) : "w" (a), "w" (b), "I" (C) ); - return r; -#endif -} - -//@} -#endif // CRYPTOPP_ARM_PMULL_AVAILABLE - -#if CRYPTOPP_ARM_SHA3_AVAILABLE || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \name ARMv8.2 operations -//@{ - -/// \brief Three-way XOR -/// \param a the first value -/// \param b the second value -/// \param c the third value -/// \return three-way exclusive OR of the values -/// \details VEOR3() performs veor3q_u64(). VEOR3 is provided as GCC inline assembly due -/// to Clang and lack of support for the intrinsic. -/// \details VEOR3 requires ARMv8.2. -/// \since Crypto++ 8.6 -inline uint64x2_t VEOR3(uint64x2_t a, uint64x2_t b, uint64x2_t c) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return veor3q_u64(a, b, c); -#else - uint64x2_t r; - __asm__ ("eor3 %0.16b, %1.16b, %2.16b, %3.16b \n\t" - :"=w" (r) : "w" (a), "w" (b), "w" (c)); - return r; -#endif -} - -/// \brief XOR and rotate -/// \param a the first value -/// \param b the second value -/// \param c the third value -/// \return two-way exclusive OR of the values, then rotated by c -/// \details VXARQ() performs vxarq_u64(). VXARQ is provided as GCC inline assembly due -/// to Clang and lack of support for the intrinsic. -/// \details VXARQ requires ARMv8.2. -/// \since Crypto++ 8.6 -inline uint64x2_t VXAR(uint64x2_t a, uint64x2_t b, const int c) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return vxarq_u64(a, b, c); -#else - uint64x2_t r; - __asm__ ("xar %0.2d, %1.2d, %2.2d, %3 \n\t" - :"=w" (r) : "w" (a), "w" (b), "I" (c)); - return r; -#endif -} - -/// \brief XOR and rotate -/// \tparam C the rotate amount -/// \param a the first value -/// \param b the second value -/// \return two-way exclusive OR of the values, then rotated by C -/// \details VXARQ() performs vxarq_u64(). VXARQ is provided as GCC inline assembly due -/// to Clang and lack of support for the intrinsic. -/// \details VXARQ requires ARMv8.2. -/// \since Crypto++ 8.6 -template -inline uint64x2_t VXAR(uint64x2_t a, uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return vxarq_u64(a, b, C); -#else - uint64x2_t r; - __asm__ ("xar %0.2d, %1.2d, %2.2d, %3 \n\t" - :"=w" (r) : "w" (a), "w" (b), "I" (C)); - return r; -#endif -} - -/// \brief XOR and rotate -/// \param a the first value -/// \param b the second value -/// \return two-way exclusive OR of the values, then rotated 1-bit -/// \details VRAX1() performs vrax1q_u64(). VRAX1 is provided as GCC inline assembly due -/// to Clang and lack of support for the intrinsic. -/// \details VRAX1 requires ARMv8.2. -/// \since Crypto++ 8.6 -inline uint64x2_t VRAX1(uint64x2_t a, uint64x2_t b) -{ -#if defined(CRYPTOPP_MSC_VERSION) - return vrax1q_u64(a, b); -#else - uint64x2_t r; - __asm__ ("rax1 %0.2d, %1.2d, %2.2d \n\t" - :"=w" (r) : "w" (a), "w" (b)); - return r; -#endif -} -//@} -#endif // CRYPTOPP_ARM_SHA3_AVAILABLE - -#endif // CRYPTOPP_ARM_SIMD_H diff --git a/third_party/cryptoppwin/include/cryptopp/asn.h b/third_party/cryptoppwin/include/cryptopp/asn.h deleted file mode 100644 index beb20cd0..00000000 --- a/third_party/cryptoppwin/include/cryptopp/asn.h +++ /dev/null @@ -1,974 +0,0 @@ -// asn.h - originally written and placed in the public domain by Wei Dai - -/// \file asn.h -/// \brief Classes and functions for working with ANS.1 objects - -#ifndef CRYPTOPP_ASN_H -#define CRYPTOPP_ASN_H - -#include "cryptlib.h" -#include "filters.h" -#include "smartptr.h" -#include "stdcpp.h" -#include "queue.h" -#include "misc.h" - -#include - -// Issue 340 -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wconversion" -# pragma GCC diagnostic ignored "-Wsign-conversion" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief ASN.1 types -/// \note These tags are not complete -enum ASNTag -{ - /// \brief ASN.1 Boolean - BOOLEAN = 0x01, - /// \brief ASN.1 Integer - INTEGER = 0x02, - /// \brief ASN.1 Bit string - BIT_STRING = 0x03, - /// \brief ASN.1 Octet string - OCTET_STRING = 0x04, - /// \brief ASN.1 Null - TAG_NULL = 0x05, - /// \brief ASN.1 Object identifier - OBJECT_IDENTIFIER = 0x06, - /// \brief ASN.1 Object descriptor - OBJECT_DESCRIPTOR = 0x07, - /// \brief ASN.1 External reference - EXTERNAL = 0x08, - /// \brief ASN.1 Real integer - REAL = 0x09, - /// \brief ASN.1 Enumerated value - ENUMERATED = 0x0a, - /// \brief ASN.1 UTF-8 string - UTF8_STRING = 0x0c, - /// \brief ASN.1 Sequence - SEQUENCE = 0x10, - /// \brief ASN.1 Set - SET = 0x11, - /// \brief ASN.1 Numeric string - NUMERIC_STRING = 0x12, - /// \brief ASN.1 Printable string - PRINTABLE_STRING = 0x13, - /// \brief ASN.1 T61 string - T61_STRING = 0x14, - /// \brief ASN.1 Videotext string - VIDEOTEXT_STRING = 0x15, - /// \brief ASN.1 IA5 string - IA5_STRING = 0x16, - /// \brief ASN.1 UTC time - UTC_TIME = 0x17, - /// \brief ASN.1 Generalized time - GENERALIZED_TIME = 0x18, - /// \brief ASN.1 Graphic string - GRAPHIC_STRING = 0x19, - /// \brief ASN.1 Visible string - VISIBLE_STRING = 0x1a, - /// \brief ASN.1 General string - GENERAL_STRING = 0x1b, - /// \brief ASN.1 Universal string - UNIVERSAL_STRING = 0x1c, - /// \brief ASN.1 BMP string - BMP_STRING = 0x1e -}; - -/// \brief ASN.1 flags -/// \note These flags are not complete -enum ASNIdFlag -{ - /// \brief ASN.1 Universal class - UNIVERSAL = 0x00, - // DATA = 0x01, - // HEADER = 0x02, - /// \brief ASN.1 Primitive flag - PRIMITIVE = 0x00, - /// \brief ASN.1 Constructed flag - CONSTRUCTED = 0x20, - /// \brief ASN.1 Application class - APPLICATION = 0x40, - /// \brief ASN.1 Context specific class - CONTEXT_SPECIFIC = 0x80, - /// \brief ASN.1 Private class - PRIVATE = 0xc0 -}; - -/// \brief Raises a BERDecodeErr -inline void BERDecodeError() {throw BERDecodeErr();} - -/// \brief Exception thrown when an unknown object identifier is encountered -class CRYPTOPP_DLL UnknownOID : public BERDecodeErr -{ -public: - /// \brief Construct an UnknownOID - UnknownOID() : BERDecodeErr("BER decode error: unknown object identifier") {} - /// \brief Construct an UnknownOID - /// \param err error message to use for the exception - UnknownOID(const char *err) : BERDecodeErr(err) {} -}; - -/// \brief DER encode a length -/// \param bt BufferedTransformation object for writing -/// \param length the size to encode -/// \return the number of octets used for the encoding -CRYPTOPP_DLL size_t CRYPTOPP_API DERLengthEncode(BufferedTransformation &bt, lword length); - -/// \brief BER decode a length -/// \param bt BufferedTransformation object for reading -/// \param length the decoded size -/// \return true if the value was decoded -/// \throw BERDecodeError if the value fails to decode or is too large for size_t -/// \details BERLengthDecode() returns false if the encoding is indefinite length. -CRYPTOPP_DLL bool CRYPTOPP_API BERLengthDecode(BufferedTransformation &bt, size_t &length); - -/// \brief DER encode NULL -/// \param bt BufferedTransformation object for writing -CRYPTOPP_DLL void CRYPTOPP_API DEREncodeNull(BufferedTransformation &bt); - -/// \brief BER decode NULL -/// \param bt BufferedTransformation object for reading -CRYPTOPP_DLL void CRYPTOPP_API BERDecodeNull(BufferedTransformation &bt); - -/// \brief DER encode octet string -/// \param bt BufferedTransformation object for writing -/// \param str the string to encode -/// \param strLen the length of the string -/// \return the number of octets used for the encoding -CRYPTOPP_DLL size_t CRYPTOPP_API DEREncodeOctetString(BufferedTransformation &bt, const byte *str, size_t strLen); - -/// \brief DER encode octet string -/// \param bt BufferedTransformation object for reading -/// \param str the string to encode -/// \return the number of octets used for the encoding -CRYPTOPP_DLL size_t CRYPTOPP_API DEREncodeOctetString(BufferedTransformation &bt, const SecByteBlock &str); - -/// \brief BER decode octet string -/// \param bt BufferedTransformation object for reading -/// \param str the decoded string -/// \return the number of octets used for the encoding -CRYPTOPP_DLL size_t CRYPTOPP_API BERDecodeOctetString(BufferedTransformation &bt, SecByteBlock &str); - -/// \brief BER decode octet string -/// \param bt BufferedTransformation object for reading -/// \param str the decoded string -/// \return the number of octets used for the encoding -CRYPTOPP_DLL size_t CRYPTOPP_API BERDecodeOctetString(BufferedTransformation &bt, BufferedTransformation &str); - -/// \brief DER encode text string -/// \param bt BufferedTransformation object for writing -/// \param str the string to encode -/// \param strLen the length of the string, in bytes -/// \param asnTag the ASN.1 identifier -/// \return the number of octets used for the encoding -/// \details DEREncodeTextString() can be used for UTF8_STRING, PRINTABLE_STRING, and IA5_STRING -/// \since Crypto++ 8.3 -CRYPTOPP_DLL size_t CRYPTOPP_API DEREncodeTextString(BufferedTransformation &bt, const byte* str, size_t strLen, byte asnTag); - -/// \brief DER encode text string -/// \param bt BufferedTransformation object for writing -/// \param str the string to encode -/// \param asnTag the ASN.1 identifier -/// \return the number of octets used for the encoding -/// \details DEREncodeTextString() can be used for UTF8_STRING, PRINTABLE_STRING, and IA5_STRING -/// \since Crypto++ 8.3 -CRYPTOPP_DLL size_t CRYPTOPP_API DEREncodeTextString(BufferedTransformation &bt, const SecByteBlock &str, byte asnTag); - -/// \brief DER encode text string -/// \param bt BufferedTransformation object for writing -/// \param str the string to encode -/// \param asnTag the ASN.1 identifier -/// \return the number of octets used for the encoding -/// \details DEREncodeTextString() can be used for UTF8_STRING, PRINTABLE_STRING, and IA5_STRING -/// \since Crypto++ 6.0 -CRYPTOPP_DLL size_t CRYPTOPP_API DEREncodeTextString(BufferedTransformation &bt, const std::string &str, byte asnTag); - -/// \brief BER decode text string -/// \param bt BufferedTransformation object for reading -/// \param str the string to decode -/// \param asnTag the ASN.1 identifier -/// \details BERDecodeTextString() can be used for UTF8_STRING, PRINTABLE_STRING, and IA5_STRING -/// \since Crypto++ 8.3 -CRYPTOPP_DLL size_t CRYPTOPP_API BERDecodeTextString(BufferedTransformation &bt, SecByteBlock &str, byte asnTag); - -/// \brief BER decode text string -/// \param bt BufferedTransformation object for reading -/// \param str the string to decode -/// \param asnTag the ASN.1 identifier -/// \details BERDecodeTextString() can be used for UTF8_STRING, PRINTABLE_STRING, and IA5_STRING -/// \since Crypto++ 6.0 -CRYPTOPP_DLL size_t CRYPTOPP_API BERDecodeTextString(BufferedTransformation &bt, std::string &str, byte asnTag); - -/// \brief DER encode date -/// \param bt BufferedTransformation object for writing -/// \param str the date to encode -/// \param asnTag the ASN.1 identifier -/// \return the number of octets used for the encoding -/// \details BERDecodeDate() can be used for UTC_TIME and GENERALIZED_TIME -/// \since Crypto++ 8.3 -CRYPTOPP_DLL size_t CRYPTOPP_API DEREncodeDate(BufferedTransformation &bt, const SecByteBlock &str, byte asnTag); - -/// \brief BER decode date -/// \param bt BufferedTransformation object for reading -/// \param str the date to decode -/// \param asnTag the ASN.1 identifier -/// \details BERDecodeDate() can be used for UTC_TIME and GENERALIZED_TIME -/// \since Crypto++ 8.3 -CRYPTOPP_DLL size_t CRYPTOPP_API BERDecodeDate(BufferedTransformation &bt, SecByteBlock &str, byte asnTag); - -/// \brief DER encode bit string -/// \param bt BufferedTransformation object for writing -/// \param str the string to encode -/// \param strLen the length of the string -/// \param unusedBits the number of unused bits -/// \return the number of octets used for the encoding -/// \details The caller is responsible for shifting octets if unusedBits is -/// not 0. For example, to DER encode a web server X.509 key usage, the 101b -/// bit mask is often used (digitalSignature and keyEncipherment). In this -/// case str is one octet with a value=0xa0 and unusedBits=5. The -/// value 0xa0 is 101b << 5. -CRYPTOPP_DLL size_t CRYPTOPP_API DEREncodeBitString(BufferedTransformation &bt, const byte *str, size_t strLen, unsigned int unusedBits=0); - -/// \brief DER decode bit string -/// \param bt BufferedTransformation object for reading -/// \param str the decoded string -/// \param unusedBits the number of unused bits -/// \details The caller is responsible for shifting octets if unusedBits is -/// not 0. For example, to DER encode a web server X.509 key usage, the 101b -/// bit mask is often used (digitalSignature and keyEncipherment). In this -/// case str is one octet with a value=0xa0 and unusedBits=5. The -/// value 0xa0 is 101b << 5. -CRYPTOPP_DLL size_t CRYPTOPP_API BERDecodeBitString(BufferedTransformation &bt, SecByteBlock &str, unsigned int &unusedBits); - -/// \brief BER decode and DER re-encode -/// \param bt BufferedTransformation object for writing -/// \param dest BufferedTransformation object -CRYPTOPP_DLL void CRYPTOPP_API DERReencode(BufferedTransformation &bt, BufferedTransformation &dest); - -/// \brief BER decode size -/// \param bt BufferedTransformation object for reading -/// \return the length of the ASN.1 value, in bytes -/// \details BERDecodePeekLength() determines the length of a value without -/// consuming octets in the stream. The stream must use definite length encoding. -/// If indefinite length encoding is used or an error occurs, then 0 is returned. -/// \since Crypto++ 8.3 -CRYPTOPP_DLL size_t CRYPTOPP_API BERDecodePeekLength(const BufferedTransformation &bt); - -/// \brief Object Identifier -class CRYPTOPP_DLL OID -{ -public: - virtual ~OID() {} - - /// \brief Construct an OID - OID() {} - - /// \brief Construct an OID - /// \param v value to initialize the OID - OID(word32 v) : m_values(1, v) {} - - /// \brief Construct an OID - /// \param bt BufferedTransformation object - OID(BufferedTransformation &bt) { - BERDecode(bt); - } - - /// \brief Append a value to an OID - /// \param rhs the value to append - inline OID & operator+=(word32 rhs) { - m_values.push_back(rhs); return *this; - } - - /// \brief DER encode this OID - /// \param bt BufferedTransformation object - void DEREncode(BufferedTransformation &bt) const; - - /// \brief BER decode an OID - /// \param bt BufferedTransformation object - void BERDecode(BufferedTransformation &bt); - - /// \brief BER decode an OID - /// \param bt BufferedTransformation object - /// \throw BERDecodeErr() if decoded value doesn't match an expected OID - /// \details BERDecodeAndCheck() can be used to parse an OID and verify it matches an expected. - ///
-	///   BERSequenceDecoder key(bt);
-	///   ...
-	///   BERSequenceDecoder algorithm(key);
-	///   GetAlgorithmID().BERDecodeAndCheck(algorithm);
-	/// 
- void BERDecodeAndCheck(BufferedTransformation &bt) const; - - /// \brief Determine if OID is empty - /// \return true if OID has 0 elements, false otherwise - /// \since Crypto++ 8.0 - bool Empty() const { - return m_values.empty(); - } - - /// \brief Retrieve OID value array - /// \return OID value vector - /// \since Crypto++ 8.0 - const std::vector& GetValues() const { - return m_values; - } - - /// \brief Print an OID - /// \param out ostream object - /// \return ostream reference - /// \details Print() writes the OID in a customary format, like - /// 1.2.840.113549.1.1.11. The caller is reposnsible to convert the - /// OID to a friendly name, like sha256WithRSAEncryption. - /// \since Crypto++ 8.3 - std::ostream& Print(std::ostream& out) const; - -protected: - friend bool operator==(const OID &lhs, const OID &rhs); - friend bool operator!=(const OID &lhs, const OID &rhs); - friend bool operator< (const OID &lhs, const OID &rhs); - friend bool operator> (const OID &lhs, const OID &rhs); - friend bool operator<=(const OID &lhs, const OID &rhs); - friend bool operator>=(const OID &lhs, const OID &rhs); - - std::vector m_values; - -private: - static void EncodeValue(BufferedTransformation &bt, word32 v); - static size_t DecodeValue(BufferedTransformation &bt, word32 &v); -}; - -/// \brief ASN.1 encoded object filter -class EncodedObjectFilter : public Filter -{ -public: - enum Flag {PUT_OBJECTS=1, PUT_MESSANGE_END_AFTER_EACH_OBJECT=2, PUT_MESSANGE_END_AFTER_ALL_OBJECTS=4, PUT_MESSANGE_SERIES_END_AFTER_ALL_OBJECTS=8}; - enum State {IDENTIFIER, LENGTH, BODY, TAIL, ALL_DONE} m_state; - - virtual ~EncodedObjectFilter() {} - - /// \brief Construct an EncodedObjectFilter - /// \param attachment a BufferedTrasformation to attach to this object - /// \param nObjects the number of objects - /// \param flags bitwise OR of EncodedObjectFilter::Flag - EncodedObjectFilter(BufferedTransformation *attachment = NULLPTR, unsigned int nObjects = 1, word32 flags = 0); - - /// \brief Input a byte buffer for processing - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - void Put(const byte *inString, size_t length); - - unsigned int GetNumberOfCompletedObjects() const {return m_nCurrentObject;} - unsigned long GetPositionOfObject(unsigned int i) const {return m_positions[i];} - -private: - BufferedTransformation & CurrentTarget(); - - ByteQueue m_queue; - std::vector m_positions; - lword m_lengthRemaining; - word32 m_nObjects, m_nCurrentObject, m_level, m_flags; - byte m_id; -}; - -/// \brief BER General Decoder -class CRYPTOPP_DLL BERGeneralDecoder : public Store -{ -public: - /// \brief Default ASN.1 tag - enum {DefaultTag = SEQUENCE | EnumToInt(CONSTRUCTED)}; - - virtual ~BERGeneralDecoder(); - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \details BERGeneralDecoder uses DefaultTag - explicit BERGeneralDecoder(BufferedTransformation &inQueue); - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \param asnTag ASN.1 tag - explicit BERGeneralDecoder(BufferedTransformation &inQueue, byte asnTag); - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \param asnTag ASN.1 tag - explicit BERGeneralDecoder(BERGeneralDecoder &inQueue, byte asnTag); - - /// \brief Determine length encoding - /// \return true if the ASN.1 object is definite length encoded, false otherwise - bool IsDefiniteLength() const { - return m_definiteLength; - } - - /// \brief Determine remaining length - /// \return number of octets that remain to be consumed - /// \details RemainingLength() is only valid if IsDefiniteLength() - /// returns true. - lword RemainingLength() const { - CRYPTOPP_ASSERT(m_definiteLength); - return IsDefiniteLength() ? m_length : 0; - } - - /// \brief Determine end of stream - /// \return true if all octets have been consumed, false otherwise - bool EndReached() const; - - /// \brief Determine next octet - /// \return next octet in the stream - /// \details PeekByte does not consume the octet. - /// \throw BERDecodeError if there are no octets remaining - byte PeekByte() const; - - /// \brief Determine next octet - /// \details CheckByte reads the next byte in the stream and verifies - /// the octet matches b. - /// \throw BERDecodeError if the next octet is not b - void CheckByte(byte b); - - /// \brief Transfer bytes to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param transferBytes the number of bytes to transfer - /// \param channel the channel on which the transfer should occur - /// \param blocking specifies whether the object should block when - /// processing input - /// \return the number of bytes that remain in the transfer block - /// (i.e., bytes not transferred) - /// \details TransferTo2() removes bytes and moves - /// them to the destination. Transfer begins at the index position - /// in the current stream, and not from an absolute position in the - /// stream. - /// \details transferBytes is an \a IN and \a OUT parameter. When - /// the call is made, transferBytes is the requested size of the - /// transfer. When the call returns, transferBytes is the number - /// of bytes that were transferred. - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - - /// \brief Copy bytes to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param begin the 0-based index of the first byte to copy in - /// the stream - /// \param end the 0-based index of the last byte to copy in - /// the stream - /// \param channel the channel on which the transfer should occur - /// \param blocking specifies whether the object should block when - /// processing input - /// \return the number of bytes that remain in the copy block - /// (i.e., bytes not copied) - /// \details CopyRangeTo2 copies bytes to the - /// destination. The bytes are not removed from this object. Copying - /// begins at the index position in the current stream, and not from - /// an absolute position in the stream. - /// \details begin is an \a IN and \a OUT parameter. When the call is - /// made, begin is the starting position of the copy. When the call - /// returns, begin is the position of the first byte that was \a not - /// copied (which may be different than end). begin can be used for - /// subsequent calls to CopyRangeTo2(). - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - - /// \brief Signals the end of messages to the object - /// \details Call this to denote end of sequence - void MessageEnd(); - -protected: - BufferedTransformation &m_inQueue; - lword m_length; - bool m_finished, m_definiteLength; - -private: - void Init(byte asnTag); - void StoreInitialize(const NameValuePairs ¶meters) - {CRYPTOPP_UNUSED(parameters); CRYPTOPP_ASSERT(false);} - lword ReduceLength(lword delta); -}; - -/// \brief DER General Encoder -class CRYPTOPP_DLL DERGeneralEncoder : public ByteQueue -{ -public: - /// \brief Default ASN.1 tag - enum {DefaultTag = SEQUENCE | EnumToInt(CONSTRUCTED)}; - - virtual ~DERGeneralEncoder(); - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \details DERGeneralEncoder uses DefaultTag - explicit DERGeneralEncoder(BufferedTransformation &outQueue); - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \param asnTag ASN.1 tag - explicit DERGeneralEncoder(BufferedTransformation &outQueue, byte asnTag); - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \param asnTag ASN.1 tag - explicit DERGeneralEncoder(DERGeneralEncoder &outQueue, byte asnTag); - - /// \brief Signals the end of messages to the object - /// \details Call this to denote end of sequence - void MessageEnd(); - -private: - BufferedTransformation &m_outQueue; - byte m_asnTag; - bool m_finished; -}; - -/// \brief BER Sequence Decoder -class CRYPTOPP_DLL BERSequenceDecoder : public BERGeneralDecoder -{ -public: - /// \brief Default ASN.1 tag - enum {DefaultTag = SEQUENCE | EnumToInt(CONSTRUCTED)}; - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \details BERSequenceDecoder uses DefaultTag - explicit BERSequenceDecoder(BufferedTransformation &inQueue) - : BERGeneralDecoder(inQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \param asnTag ASN.1 tag - explicit BERSequenceDecoder(BufferedTransformation &inQueue, byte asnTag) - : BERGeneralDecoder(inQueue, asnTag) {} - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \details BERSequenceDecoder uses DefaultTag - explicit BERSequenceDecoder(BERSequenceDecoder &inQueue) - : BERGeneralDecoder(inQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \param asnTag ASN.1 tag - explicit BERSequenceDecoder(BERSequenceDecoder &inQueue, byte asnTag) - : BERGeneralDecoder(inQueue, asnTag) {} -}; - -/// \brief DER Sequence Encoder -class CRYPTOPP_DLL DERSequenceEncoder : public DERGeneralEncoder -{ -public: - /// \brief Default ASN.1 tag - enum {DefaultTag = SEQUENCE | EnumToInt(CONSTRUCTED)}; - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \details DERSequenceEncoder uses DefaultTag - explicit DERSequenceEncoder(BufferedTransformation &outQueue) - : DERGeneralEncoder(outQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \param asnTag ASN.1 tag - explicit DERSequenceEncoder(BufferedTransformation &outQueue, byte asnTag) - : DERGeneralEncoder(outQueue, asnTag) {} - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \details DERSequenceEncoder uses DefaultTag - explicit DERSequenceEncoder(DERSequenceEncoder &outQueue) - : DERGeneralEncoder(outQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \param asnTag ASN.1 tag - explicit DERSequenceEncoder(DERSequenceEncoder &outQueue, byte asnTag) - : DERGeneralEncoder(outQueue, asnTag) {} -}; - -/// \brief BER Set Decoder -class CRYPTOPP_DLL BERSetDecoder : public BERGeneralDecoder -{ -public: - /// \brief Default ASN.1 tag - enum {DefaultTag = SET | EnumToInt(CONSTRUCTED)}; - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \details BERSetDecoder uses DefaultTag - explicit BERSetDecoder(BufferedTransformation &inQueue) - : BERGeneralDecoder(inQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \param asnTag ASN.1 tag - explicit BERSetDecoder(BufferedTransformation &inQueue, byte asnTag) - : BERGeneralDecoder(inQueue, asnTag) {} - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \details BERSetDecoder uses DefaultTag - explicit BERSetDecoder(BERSetDecoder &inQueue) - : BERGeneralDecoder(inQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 decoder - /// \param inQueue input byte queue - /// \param asnTag ASN.1 tag - explicit BERSetDecoder(BERSetDecoder &inQueue, byte asnTag) - : BERGeneralDecoder(inQueue, asnTag) {} -}; - -/// \brief DER Set Encoder -class CRYPTOPP_DLL DERSetEncoder : public DERGeneralEncoder -{ -public: - /// \brief Default ASN.1 tag - enum {DefaultTag = SET | EnumToInt(CONSTRUCTED)}; - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \details DERSetEncoder uses DefaultTag - explicit DERSetEncoder(BufferedTransformation &outQueue) - : DERGeneralEncoder(outQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \param asnTag ASN.1 tag - explicit DERSetEncoder(BufferedTransformation &outQueue, byte asnTag) - : DERGeneralEncoder(outQueue, asnTag) {} - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \details DERSetEncoder uses DefaultTag - explicit DERSetEncoder(DERSetEncoder &outQueue) - : DERGeneralEncoder(outQueue, DefaultTag) {} - - /// \brief Construct an ASN.1 encoder - /// \param outQueue output byte queue - /// \param asnTag ASN.1 tag - explicit DERSetEncoder(DERSetEncoder &outQueue, byte asnTag) - : DERGeneralEncoder(outQueue, asnTag) {} -}; - -/// \brief Optional data encoder and decoder -/// \tparam T class or type -template -class ASNOptional : public member_ptr -{ -public: - /// \brief BER decode optional data - /// \param seqDecoder sequence with the optional ASN.1 data - /// \param tag ASN.1 tag to match as optional data - /// \param mask the mask to apply when matching the tag - /// \sa ASNTag and ASNIdFlag - void BERDecode(BERSequenceDecoder &seqDecoder, byte tag, byte mask = ~CONSTRUCTED) - { - byte b; - if (seqDecoder.Peek(b) && (b & mask) == tag) - reset(new T(seqDecoder)); - } - - /// \brief DER encode optional data - /// \param out BufferedTransformation object - void DEREncode(BufferedTransformation &out) - { - if (this->get() != NULLPTR) - this->get()->DEREncode(out); - } -}; - -/// \brief Encode and decode ASN.1 objects with additional information -/// \tparam BASE base class or type -/// \details Encodes and decodes public keys, private keys and group -/// parameters with OID identifying the algorithm or scheme. -template -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE ASN1CryptoMaterial : public ASN1Object, public BASE -{ -public: - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \details Save() will write the OID associated with algorithm or scheme. - /// In the case of public and private keys, this function writes the - /// subjectPublicKeyInfo and privateKeyInfo parts. - void Save(BufferedTransformation &bt) const - {BEREncode(bt);} - - /// \brief BER decode ASN.1 object - /// \param bt BufferedTransformation object - void Load(BufferedTransformation &bt) - {BERDecode(bt);} -}; - -/// \brief Encodes and decodes subjectPublicKeyInfo -class CRYPTOPP_DLL X509PublicKey : public ASN1CryptoMaterial -{ -public: - virtual ~X509PublicKey() {} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - /// \brief Retrieves the OID of the algorithm - /// \return OID of the algorithm - virtual OID GetAlgorithmID() const =0; - - /// \brief Decode algorithm parameters - /// \param bt BufferedTransformation object - /// \sa BERDecodePublicKey, RFC - /// 2459, section 7.3.1 - virtual bool BERDecodeAlgorithmParameters(BufferedTransformation &bt) - {BERDecodeNull(bt); return false;} - - /// \brief Encode algorithm parameters - /// \param bt BufferedTransformation object - /// \sa DEREncodePublicKey, RFC - /// 2459, section 7.3.1 - virtual bool DEREncodeAlgorithmParameters(BufferedTransformation &bt) const - {DEREncodeNull(bt); return false;} - - /// \brief Decode subjectPublicKey part of subjectPublicKeyInfo - /// \param bt BufferedTransformation object - /// \param parametersPresent flag indicating if algorithm parameters are present - /// \param size number of octets to read for the parameters, in bytes - /// \details BERDecodePublicKey() the decodes subjectPublicKey part of - /// subjectPublicKeyInfo, without the BIT STRING header. - /// \details When parametersPresent = true then BERDecodePublicKey() calls - /// BERDecodeAlgorithmParameters() to parse algorithm parameters. - /// \sa BERDecodeAlgorithmParameters - virtual void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size) =0; - - /// \brief Encode subjectPublicKey part of subjectPublicKeyInfo - /// \param bt BufferedTransformation object - /// \details DEREncodePublicKey() encodes the subjectPublicKey part of - /// subjectPublicKeyInfo, without the BIT STRING header. - /// \sa DEREncodeAlgorithmParameters - virtual void DEREncodePublicKey(BufferedTransformation &bt) const =0; -}; - -/// \brief Encodes and Decodes privateKeyInfo -class CRYPTOPP_DLL PKCS8PrivateKey : public ASN1CryptoMaterial -{ -public: - virtual ~PKCS8PrivateKey() {} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - /// \brief Retrieves the OID of the algorithm - /// \return OID of the algorithm - virtual OID GetAlgorithmID() const =0; - - /// \brief Decode optional parameters - /// \param bt BufferedTransformation object - /// \sa BERDecodePrivateKey, RFC - /// 2459, section 7.3.1 - virtual bool BERDecodeAlgorithmParameters(BufferedTransformation &bt) - {BERDecodeNull(bt); return false;} - - /// \brief Encode optional parameters - /// \param bt BufferedTransformation object - /// \sa DEREncodePrivateKey, RFC - /// 2459, section 7.3.1 - virtual bool DEREncodeAlgorithmParameters(BufferedTransformation &bt) const - {DEREncodeNull(bt); return false;} - - /// \brief Decode privateKey part of privateKeyInfo - /// \param bt BufferedTransformation object - /// \param parametersPresent flag indicating if algorithm parameters are present - /// \param size number of octets to read for the parameters, in bytes - /// \details BERDecodePrivateKey() the decodes privateKey part of privateKeyInfo, - /// without the OCTET STRING header. - /// \details When parametersPresent = true then BERDecodePrivateKey() calls - /// BERDecodeAlgorithmParameters() to parse algorithm parameters. - /// \sa BERDecodeAlgorithmParameters - virtual void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size) =0; - - /// \brief Encode privateKey part of privateKeyInfo - /// \param bt BufferedTransformation object - /// \details DEREncodePrivateKey() encodes the privateKey part of privateKeyInfo, - /// without the OCTET STRING header. - /// \sa DEREncodeAlgorithmParameters - virtual void DEREncodePrivateKey(BufferedTransformation &bt) const =0; - - /// \brief Decode optional attributes - /// \param bt BufferedTransformation object - /// \details BERDecodeOptionalAttributes() decodes optional attributes including - /// context-specific tag. - /// \sa BERDecodeAlgorithmParameters, DEREncodeOptionalAttributes - /// \note default implementation stores attributes to be output using - /// DEREncodeOptionalAttributes - virtual void BERDecodeOptionalAttributes(BufferedTransformation &bt); - - /// \brief Encode optional attributes - /// \param bt BufferedTransformation object - /// \details DEREncodeOptionalAttributes() encodes optional attributes including - /// context-specific tag. - /// \sa BERDecodeAlgorithmParameters - virtual void DEREncodeOptionalAttributes(BufferedTransformation &bt) const; - -protected: - ByteQueue m_optionalAttributes; -}; - -// ******************************************************** - -/// \brief DER Encode unsigned value -/// \tparam T class or type -/// \param out BufferedTransformation object -/// \param w unsigned value to encode -/// \param asnTag the ASN.1 identifier -/// \details DEREncodeUnsigned() can be used with INTEGER, BOOLEAN, and ENUM -template -size_t DEREncodeUnsigned(BufferedTransformation &out, T w, byte asnTag = INTEGER) -{ - byte buf[sizeof(w)+1]; - unsigned int bc; - if (asnTag == BOOLEAN) - { - buf[sizeof(w)] = w ? 0xff : 0; - bc = 1; - } - else - { - buf[0] = 0; - for (unsigned int i=0; i> (sizeof(w)-1-i)*8); - bc = sizeof(w); - while (bc > 1 && buf[sizeof(w)+1-bc] == 0) - --bc; - if (buf[sizeof(w)+1-bc] & 0x80) - ++bc; - } - out.Put(asnTag); - size_t lengthBytes = DERLengthEncode(out, bc); - out.Put(buf+sizeof(w)+1-bc, bc); - return 1+lengthBytes+bc; -} - -/// \brief BER Decode unsigned value -/// \tparam T fundamental C++ type -/// \param in BufferedTransformation object -/// \param w the decoded value -/// \param asnTag the ASN.1 identifier -/// \param minValue the minimum expected value -/// \param maxValue the maximum expected value -/// \throw BERDecodeErr() if the value cannot be parsed or the decoded value is not within range. -/// \details DEREncodeUnsigned() can be used with INTEGER, BOOLEAN, and ENUM -template -void BERDecodeUnsigned(BufferedTransformation &in, T &w, byte asnTag = INTEGER, - T minValue = 0, T maxValue = T(0xffffffff)) -{ - byte b; - if (!in.Get(b) || b != asnTag) - BERDecodeError(); - - size_t bc; - bool definite = BERLengthDecode(in, bc); - if (!definite) - BERDecodeError(); - if (bc > in.MaxRetrievable()) // Issue 346 - BERDecodeError(); - if (asnTag == BOOLEAN && bc != 1) // X.690, 8.2.1 - BERDecodeError(); - if ((asnTag == INTEGER || asnTag == ENUMERATED) && bc == 0) // X.690, 8.3.1 and 8.4 - BERDecodeError(); - - SecByteBlock buf(bc); - - if (bc != in.Get(buf, bc)) - BERDecodeError(); - - // This consumes leading 0 octets. According to X.690, 8.3.2, it could be non-conforming behavior. - // X.690, 8.3.2 says "the bits of the first octet and bit 8 of the second octet ... (a) shall - // not all be ones and (b) shall not all be zeros ... These rules ensure that an integer value - // is always encoded in the smallest possible number of octet". - // We invented AER (Alternate Encoding Rules), which is more relaxed than BER, CER, and DER. - const byte *ptr = buf; - while (bc > sizeof(w) && *ptr == 0) - { - bc--; - ptr++; - } - if (bc > sizeof(w)) - BERDecodeError(); - - w = 0; - for (unsigned int i=0; i maxValue) - BERDecodeError(); -} - -#ifdef CRYPTOPP_DOXYGEN_PROCESSING -/// \brief Compare two OIDs for equality -/// \param lhs the first OID -/// \param rhs the second OID -/// \return true if the OIDs are equal, false otherwise -inline bool operator==(const OID &lhs, const OID &rhs); -/// \brief Compare two OIDs for inequality -/// \param lhs the first OID -/// \param rhs the second OID -/// \return true if the OIDs are not equal, false otherwise -inline bool operator!=(const OID &lhs, const OID &rhs); -/// \brief Compare two OIDs for ordering -/// \param lhs the first OID -/// \param rhs the second OID -/// \return true if the first OID is less than the second OID, false otherwise -/// \details operator<() calls std::lexicographical_compare() on the values. -inline bool operator<(const OID &lhs, const OID &rhs); -/// \brief Compare two OIDs for ordering -/// \param lhs the first OID -/// \param rhs the second OID -/// \return true if the first OID is greater than the second OID, false otherwise -/// \details operator>() is implemented in terms of operator==() and operator<(). -/// \since Crypto++ 8.3 -inline bool operator>(const OID &lhs, const OID &rhs); -/// \brief Compare two OIDs for ordering -/// \param lhs the first OID -/// \param rhs the second OID -/// \return true if the first OID is less than or equal to the second OID, false otherwise -/// \details operator<=() is implemented in terms of operator==() and operator<(). -/// \since Crypto++ 8.3 -inline bool operator<=(const OID &lhs, const OID &rhs); -/// \brief Compare two OIDs for ordering -/// \param lhs the first OID -/// \param rhs the second OID -/// \return true if the first OID is greater than or equal to the second OID, false otherwise -/// \details operator>=() is implemented in terms of operator<(). -/// \since Crypto++ 8.3 -inline bool operator>=(const OID &lhs, const OID &rhs); -/// \brief Append a value to an OID -/// \param lhs the OID -/// \param rhs the value to append -inline OID operator+(const OID &lhs, unsigned long rhs); -/// \brief Print a OID value -/// \param out the output stream -/// \param oid the OID -inline std::ostream& operator<<(std::ostream& out, const OID &oid); -#else -inline bool operator==(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs) - {return lhs.m_values == rhs.m_values;} -inline bool operator!=(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs) - {return lhs.m_values != rhs.m_values;} -inline bool operator<(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs) - {return std::lexicographical_compare(lhs.m_values.begin(), lhs.m_values.end(), rhs.m_values.begin(), rhs.m_values.end());} -inline bool operator>(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs) - {return ! (lhs=(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs) - {return ! (lhsThe EAX -/// Mode of Operation. The EAX paper suggested a basic API to help standardize AEAD -/// schemes in software and promote adoption of the modes. -/// \sa Authenticated -/// Encryption on the Crypto++ wiki. -/// \since Crypto++ 5.6.0 - -#ifndef CRYPTOPP_AUTHENC_H -#define CRYPTOPP_AUTHENC_H - -#include "cryptlib.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Base class for authenticated encryption modes of operation -/// \details AuthenticatedSymmetricCipherBase() serves as a base implementation for one direction -/// (encryption or decryption) of a stream cipher or block cipher mode with authentication. -/// \details Crypto++ provides four authenticated encryption modes of operation - CCM, EAX, GCM -/// and OCB mode. All modes derive from AuthenticatedSymmetricCipherBase() and the -/// motivation for the API, like calling AAD a "header", can be found in Bellare, -/// Rogaway and Wagner's The EAX -/// Mode of Operation. The EAX paper suggested a basic API to help standardize AEAD -/// schemes in software and promote adoption of the modes. -/// \sa Authenticated -/// Encryption on the Crypto++ wiki. -/// \since Crypto++ 5.6.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AuthenticatedSymmetricCipherBase : public AuthenticatedSymmetricCipher -{ -public: - AuthenticatedSymmetricCipherBase() : m_totalHeaderLength(0), m_totalMessageLength(0), - m_totalFooterLength(0), m_bufferedDataLength(0), m_state(State_Start) {} - - // StreamTransformation interface - bool IsRandomAccess() const {return false;} - bool IsSelfInverting() const {return true;} - - void SetKey(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); - void Restart() {if (m_state > State_KeySet) m_state = State_KeySet;} - void Resynchronize(const byte *iv, int length=-1); - void Update(const byte *input, size_t length); - void ProcessData(byte *outString, const byte *inString, size_t length); - void TruncatedFinal(byte *mac, size_t macSize); - -protected: - void UncheckedSetKey(const byte * key, unsigned int length,const CryptoPP::NameValuePairs ¶ms) - {CRYPTOPP_UNUSED(key), CRYPTOPP_UNUSED(length), CRYPTOPP_UNUSED(params); CRYPTOPP_ASSERT(false);} - - void AuthenticateData(const byte *data, size_t len); - const SymmetricCipher & GetSymmetricCipher() const - {return const_cast(this)->AccessSymmetricCipher();} - - virtual SymmetricCipher & AccessSymmetricCipher() =0; - virtual bool AuthenticationIsOnPlaintext() const =0; - virtual unsigned int AuthenticationBlockSize() const =0; - virtual void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms) =0; - virtual void Resync(const byte *iv, size_t len) =0; - virtual size_t AuthenticateBlocks(const byte *data, size_t len) =0; - virtual void AuthenticateLastHeaderBlock() =0; - virtual void AuthenticateLastConfidentialBlock() {} - virtual void AuthenticateLastFooterBlock(byte *mac, size_t macSize) =0; - - // State_AuthUntransformed: authentication is applied to plain text (Authenticate-then-Encrypt) - // State_AuthTransformed: authentication is applied to cipher text (Encrypt-then-Authenticate) - enum State {State_Start, State_KeySet, State_IVSet, State_AuthUntransformed, State_AuthTransformed, State_AuthFooter}; - - AlignedSecByteBlock m_buffer; - lword m_totalHeaderLength, m_totalMessageLength, m_totalFooterLength; - unsigned int m_bufferedDataLength; - State m_state; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/base32.h b/third_party/cryptoppwin/include/cryptopp/base32.h deleted file mode 100644 index 80a64ed8..00000000 --- a/third_party/cryptoppwin/include/cryptopp/base32.h +++ /dev/null @@ -1,158 +0,0 @@ -// base32.h - written and placed in the public domain by Frank Palazzolo, based on hex.cpp by Wei Dai -// extended hex alphabet added by JW in November, 2017. - -/// \file base32.h -/// \brief Classes for Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder - -#ifndef CRYPTOPP_BASE32_H -#define CRYPTOPP_BASE32_H - -#include "cryptlib.h" -#include "basecode.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Base32 encodes data using DUDE encoding -/// \details Converts data to base32 using DUDE encoding. The default code is based on Differential Unicode Domain Encoding (DUDE) (draft-ietf-idn-dude-02.txt). -/// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder -class Base32Encoder : public SimpleProxyFilter -{ -public: - /// \brief Construct a Base32Encoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \param uppercase a flag indicating uppercase output - /// \param groupSize the size of the grouping - /// \param separator the separator to use between groups - /// \param terminator the terminator appeand after processing - /// \details Base32Encoder() constructs a default encoder. The constructor lacks fields for padding and - /// line breaks. You must use IsolatedInitialize() to change the default padding character or suppress it. - /// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder - Base32Encoder(BufferedTransformation *attachment = NULLPTR, bool uppercase = true, int groupSize = 0, const std::string &separator = ":", const std::string &terminator = "") - : SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment) - { - IsolatedInitialize(MakeParameters(Name::Uppercase(), uppercase)(Name::GroupSize(), groupSize)(Name::Separator(), ConstByteArrayParameter(separator))(Name::Terminator(), ConstByteArrayParameter(terminator))); - } - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs used to initialize this object - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached - /// transformations. If initialization should be propagated, then use the Initialize() function. - /// \details The following code modifies the padding and line break parameters for an encoder: - ///
-	///     Base32Encoder encoder;
-	///     AlgorithmParameters params = MakeParameters(Pad(), false)(InsertLineBreaks(), false);
-	///     encoder.IsolatedInitialize(params);
- /// \details You can change the encoding to RFC 4648, Base - /// 32 Encoding with Extended Hex Alphabet by performing the following: - ///
-	///     Base32Encoder encoder;
-	///     const byte ALPHABET[] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
-	///     AlgorithmParameters params = MakeParameters(Name::EncodingLookupArray(),(const byte *)ALPHABET);
-	///     encoder.IsolatedInitialize(params);
- /// \details If you change the encoding alphabet, then you will need to change the decoding alphabet \a and - /// the decoder's lookup table. - /// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder - void IsolatedInitialize(const NameValuePairs ¶meters); -}; - -/// \brief Base32 decodes data using DUDE encoding -/// \details Converts data from base32 using DUDE encoding. The default code is based on Differential Unicode Domain Encoding (DUDE) (draft-ietf-idn-dude-02.txt). -/// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder -class Base32Decoder : public BaseN_Decoder -{ -public: - /// \brief Construct a Base32Decoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \sa IsolatedInitialize() for an example of modifying a Base32Decoder after construction. - Base32Decoder(BufferedTransformation *attachment = NULLPTR) - : BaseN_Decoder(GetDefaultDecodingLookupArray(), 5, attachment) {} - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs used to initialize this object - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached - /// transformations. If initialization should be propagated, then use the Initialize() function. - /// \details You can change the encoding to RFC 4648, Base - /// 32 Encoding with Extended Hex Alphabet by performing the following: - ///
-	///     int lookup[256];
-	///     const byte ALPHABET[] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
-	///     Base32Decoder::InitializeDecodingLookupArray(lookup, ALPHABET, 32, true /*insensitive*/);
-	///
-	///     Base32Decoder decoder;
-	///     AlgorithmParameters params = MakeParameters(Name::DecodingLookupArray(),(const int *)lookup);
-	///     decoder.IsolatedInitialize(params);
- /// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder - void IsolatedInitialize(const NameValuePairs ¶meters); - -private: - /// \brief Provides the default decoding lookup table - /// \return default decoding lookup table - static const int * CRYPTOPP_API GetDefaultDecodingLookupArray(); -}; - -/// \brief Base32 encodes data using extended hex -/// \details Converts data to base32 using extended hex alphabet. The alphabet is different than Base32Encoder. -/// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder, RFC 4648, Base 32 Encoding with Extended Hex Alphabet. -/// \since Crypto++ 6.0 -class Base32HexEncoder : public SimpleProxyFilter -{ -public: - /// \brief Construct a Base32HexEncoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \param uppercase a flag indicating uppercase output - /// \param groupSize the size of the grouping - /// \param separator the separator to use between groups - /// \param terminator the terminator appeand after processing - /// \details Base32HexEncoder() constructs a default encoder. The constructor lacks fields for padding and - /// line breaks. You must use IsolatedInitialize() to change the default padding character or suppress it. - /// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder - Base32HexEncoder(BufferedTransformation *attachment = NULLPTR, bool uppercase = true, int groupSize = 0, const std::string &separator = ":", const std::string &terminator = "") - : SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment) - { - IsolatedInitialize(MakeParameters(Name::Uppercase(), uppercase)(Name::GroupSize(), groupSize)(Name::Separator(), ConstByteArrayParameter(separator))(Name::Terminator(), ConstByteArrayParameter(terminator))); - } - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs used to initialize this object - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached - /// transformations. If initialization should be propagated, then use the Initialize() function. - /// \details The following code modifies the padding and line break parameters for an encoder: - ///
-	///     Base32HexEncoder encoder;
-	///     AlgorithmParameters params = MakeParameters(Pad(), false)(InsertLineBreaks(), false);
-	///     encoder.IsolatedInitialize(params);
- void IsolatedInitialize(const NameValuePairs ¶meters); -}; - -/// \brief Base32 decodes data using extended hex -/// \details Converts data from base32 using extended hex alphabet. The alphabet is different than Base32Decoder. -/// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder, RFC 4648, Base 32 Encoding with Extended Hex Alphabet. -/// \since Crypto++ 6.0 -class Base32HexDecoder : public BaseN_Decoder -{ -public: - /// \brief Construct a Base32HexDecoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \sa Base32Encoder, Base32Decoder, Base32HexEncoder and Base32HexDecoder - Base32HexDecoder(BufferedTransformation *attachment = NULLPTR) - : BaseN_Decoder(GetDefaultDecodingLookupArray(), 5, attachment) {} - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs used to initialize this object - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached - /// transformations. If initialization should be propagated, then use the Initialize() function. - void IsolatedInitialize(const NameValuePairs ¶meters); - -private: - /// \brief Provides the default decoding lookup table - /// \return default decoding lookup table - static const int * CRYPTOPP_API GetDefaultDecodingLookupArray(); -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/base64.h b/third_party/cryptoppwin/include/cryptopp/base64.h deleted file mode 100644 index be5c6b77..00000000 --- a/third_party/cryptoppwin/include/cryptopp/base64.h +++ /dev/null @@ -1,158 +0,0 @@ -// base64.h - originally written and placed in the public domain by Wei Dai - -/// \file base64.h -/// \brief Classes for the Base64Encoder, Base64Decoder, Base64URLEncoder and Base64URLDecoder - -#ifndef CRYPTOPP_BASE64_H -#define CRYPTOPP_BASE64_H - -#include "cryptlib.h" -#include "basecode.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Base64 encodes data using DUDE -/// \details Base64 encodes data per RFC 4648, Base 64 Encoding. -class Base64Encoder : public SimpleProxyFilter -{ -public: - /// \brief Construct a Base64Encoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \param insertLineBreaks a BufferedTrasformation to attach to this object - /// \param maxLineLength the length of a line if line breaks are used - /// \details Base64Encoder constructs a default encoder. The constructor lacks a parameter for padding, and you must - /// use IsolatedInitialize() to modify the Base64Encoder after construction. - /// \sa IsolatedInitialize() for an example of modifying an encoder after construction. - Base64Encoder(BufferedTransformation *attachment = NULLPTR, bool insertLineBreaks = true, int maxLineLength = 72) - : SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment) - { - IsolatedInitialize(MakeParameters(Name::InsertLineBreaks(), insertLineBreaks)(Name::MaxLineLength(), maxLineLength)); - } - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs used to initialize this object - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached - /// transformations. If initialization should be propagated, then use the Initialize() function. - /// \details The following code modifies the padding and line break parameters for an encoder: - ///
-	///     Base64Encoder encoder;
-	///     AlgorithmParameters params = MakeParameters(Pad(), false)(InsertLineBreaks(), false);
-	///     encoder.IsolatedInitialize(params);
- /// \details You can change the encoding to RFC 4648 web safe alphabet by performing the following: - ///
-	///     Base64Encoder encoder;
-	///     const byte ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-	///     AlgorithmParameters params = MakeParameters(Name::EncodingLookupArray(),(const byte *)ALPHABET);
-	///     encoder.IsolatedInitialize(params);
- /// \details If you change the encoding alphabet, then you will need to change the decoding alphabet \a and - /// the decoder's lookup table. - /// \sa Base64URLEncoder for an encoder that provides the web safe alphabet, and Base64Decoder::IsolatedInitialize() - /// for an example of modifying a decoder's lookup table after construction. - void IsolatedInitialize(const NameValuePairs ¶meters); -}; - -/// \brief Base64 decodes data using DUDE -/// \details Base64 encodes data per RFC 4648, Base 64 Encoding. -class Base64Decoder : public BaseN_Decoder -{ -public: - /// \brief Construct a Base64Decoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \sa IsolatedInitialize() for an example of modifying an encoder after construction. - Base64Decoder(BufferedTransformation *attachment = NULLPTR) - : BaseN_Decoder(GetDecodingLookupArray(), 6, attachment) {} - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs used to initialize this object - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached - /// transformations. If initialization should be propagated, then use the Initialize() function. - /// \details The default decoding alpahbet is RFC 4868. You can change the to RFC 4868 web safe alphabet - /// by performing the following: - ///
-	///     int lookup[256];
-	///     const byte ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-	///     Base64Decoder::InitializeDecodingLookupArray(lookup, ALPHABET, 64, false);
-	///
-	///     Base64Decoder decoder;
-	///     AlgorithmParameters params = MakeParameters(Name::DecodingLookupArray(),(const int *)lookup);
-	///     decoder.IsolatedInitialize(params);
- /// \sa Base64URLDecoder for a decoder that provides the web safe alphabet, and Base64Encoder::IsolatedInitialize() - /// for an example of modifying an encoder's alphabet after construction. - void IsolatedInitialize(const NameValuePairs ¶meters); - -private: - /// \brief Provides the default decoding lookup table - /// \return default decoding lookup table - static const int * CRYPTOPP_API GetDecodingLookupArray(); -}; - -/// \brief Base64 encodes data using a web safe alphabet -/// \details Base64 encodes data per RFC 4648, Base 64 Encoding -/// with URL and Filename Safe Alphabet. -class Base64URLEncoder : public SimpleProxyFilter -{ -public: - /// \brief Construct a Base64URLEncoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \param insertLineBreaks a BufferedTrasformation to attach to this object - /// \param maxLineLength the length of a line if line breaks are used - /// \details Base64URLEncoder() constructs a default encoder using a web safe alphabet. The constructor ignores - /// insertLineBreaks and maxLineLength because the web and URL safe specifications don't use them. They are - /// present in the constructor for API compatibility with Base64Encoder so it is a drop-in replacement. The - /// constructor also disables padding on the encoder for the same reason. - /// \details If you need line breaks or padding, then you must use IsolatedInitialize() to set them - /// after constructing a Base64URLEncoder. - /// \sa Base64Encoder for an encoder that provides a classic alphabet, and Base64URLEncoder::IsolatedInitialize - /// for an example of modifying an encoder after construction. - Base64URLEncoder(BufferedTransformation *attachment = NULLPTR, bool insertLineBreaks = false, int maxLineLength = -1) - : SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment) - { - CRYPTOPP_UNUSED(insertLineBreaks), CRYPTOPP_UNUSED(maxLineLength); - IsolatedInitialize(MakeParameters(Name::InsertLineBreaks(), false)(Name::MaxLineLength(), -1)(Name::Pad(),false)); - } - - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached - /// transformations. If initialization should be propagated, then use the Initialize() function. - /// \details The following code modifies the padding and line break parameters for an encoder: - ///
-	///     Base64URLEncoder encoder;
-	///     AlgorithmParameters params = MakeParameters(Name::Pad(), true)(Name::InsertLineBreaks(), true);
-	///     encoder.IsolatedInitialize(params);
- /// \sa Base64Encoder for an encoder that provides a classic alphabet. - void IsolatedInitialize(const NameValuePairs ¶meters); -}; - -/// \brief Base64 decodes data using a web safe alphabet -/// \details Base64 encodes data per RFC 4648, Base 64 Encoding -/// with URL and Filename Safe Alphabet. -class Base64URLDecoder : public BaseN_Decoder -{ -public: - /// \brief Construct a Base64URLDecoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \details Base64URLDecoder() constructs a default decoder using a web safe alphabet. - /// \sa Base64Decoder for a decoder that provides a classic alphabet. - Base64URLDecoder(BufferedTransformation *attachment = NULLPTR) - : BaseN_Decoder(GetDecodingLookupArray(), 6, attachment) {} - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs used to initialize this object - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on - /// attached transformations. If initialization should be propagated, then use the Initialize() function. - /// \sa Base64Decoder for a decoder that provides a classic alphabet, and Base64URLEncoder::IsolatedInitialize - /// for an example of modifying an encoder after construction. - void IsolatedInitialize(const NameValuePairs ¶meters); - -private: - /// \brief Provides the default decoding lookup table - /// \return default decoding lookup table - static const int * CRYPTOPP_API GetDecodingLookupArray(); -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/basecode.h b/third_party/cryptoppwin/include/cryptopp/basecode.h deleted file mode 100644 index 7158de6a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/basecode.h +++ /dev/null @@ -1,146 +0,0 @@ -// basecode.h - originally written and placed in the public domain by Wei Dai - -/// \file -/// \brief Base classes for working with encoders and decoders. - -#ifndef CRYPTOPP_BASECODE_H -#define CRYPTOPP_BASECODE_H - -#include "cryptlib.h" -#include "filters.h" -#include "algparam.h" -#include "argnames.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Encoder for bases that are a power of 2 -class CRYPTOPP_DLL BaseN_Encoder : public Unflushable -{ -public: - /// \brief Construct a BaseN_Encoder - /// \param attachment a BufferedTransformation to attach to this object - BaseN_Encoder(BufferedTransformation *attachment=NULLPTR) - : m_alphabet(NULLPTR), m_padding(0), m_bitsPerChar(0) - , m_outputBlockSize(0), m_bytePos(0), m_bitPos(0) - {Detach(attachment);} - - /// \brief Construct a BaseN_Encoder - /// \param alphabet table of ASCII characters to use as the alphabet - /// \param log2base the log2base - /// \param attachment a BufferedTransformation to attach to this object - /// \param padding the character to use as padding - /// \pre log2base must be between 1 and 7 inclusive - /// \throw InvalidArgument if log2base is not between 1 and 7 - BaseN_Encoder(const byte *alphabet, int log2base, BufferedTransformation *attachment=NULLPTR, int padding=-1) - : m_alphabet(NULLPTR), m_padding(0), m_bitsPerChar(0) - , m_outputBlockSize(0), m_bytePos(0), m_bitPos(0) - { - Detach(attachment); - BaseN_Encoder::IsolatedInitialize( - MakeParameters - (Name::EncodingLookupArray(), alphabet) - (Name::Log2Base(), log2base) - (Name::Pad(), padding != -1) - (Name::PaddingByte(), byte(padding))); - } - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking); - -private: - const byte *m_alphabet; - int m_padding, m_bitsPerChar, m_outputBlockSize; - int m_bytePos, m_bitPos; - SecByteBlock m_outBuf; -}; - -/// \brief Decoder for bases that are a power of 2 -class CRYPTOPP_DLL BaseN_Decoder : public Unflushable -{ -public: - /// \brief Construct a BaseN_Decoder - /// \param attachment a BufferedTransformation to attach to this object - /// \details padding is set to -1, which means use default padding. If not - /// required, then the value must be set via IsolatedInitialize(). - BaseN_Decoder(BufferedTransformation *attachment=NULLPTR) - : m_lookup(NULLPTR), m_bitsPerChar(0) - , m_outputBlockSize(0), m_bytePos(0), m_bitPos(0) - {Detach(attachment);} - - /// \brief Construct a BaseN_Decoder - /// \param lookup table of values - /// \param log2base the log2base - /// \param attachment a BufferedTransformation to attach to this object - /// \details log2base is the exponent (like 5 in 25), and not - /// the number of elements (like 32). - /// \details padding is set to -1, which means use default padding. If not - /// required, then the value must be set via IsolatedInitialize(). - BaseN_Decoder(const int *lookup, int log2base, BufferedTransformation *attachment=NULLPTR) - : m_lookup(NULLPTR), m_bitsPerChar(0) - , m_outputBlockSize(0), m_bytePos(0), m_bitPos(0) - { - Detach(attachment); - BaseN_Decoder::IsolatedInitialize( - MakeParameters - (Name::DecodingLookupArray(), lookup) - (Name::Log2Base(), log2base)); - } - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking); - - /// \brief Initializes BaseN lookup array - /// \param lookup table of values - /// \param alphabet table of ASCII characters - /// \param base the base for the encoder - /// \param caseInsensitive flag indicating whether the alphabet is case sensitivie - /// \pre COUNTOF(lookup) == 256 - /// \pre COUNTOF(alphabet) == base - /// \details Internally, the function sets the first 256 elements in the lookup table to - /// their value from the alphabet array or -1. base is the number of element (like 32), - /// and not an exponent (like 5 in 25) - static void CRYPTOPP_API InitializeDecodingLookupArray(int *lookup, const byte *alphabet, unsigned int base, bool caseInsensitive); - -private: - const int *m_lookup; - int m_bitsPerChar, m_outputBlockSize; - int m_bytePos, m_bitPos; - SecByteBlock m_outBuf; -}; - -/// \brief Filter that breaks input stream into groups of fixed size -class CRYPTOPP_DLL Grouper : public Bufferless -{ -public: - /// \brief Construct a Grouper - /// \param attachment a BufferedTransformation to attach to this object - Grouper(BufferedTransformation *attachment=NULLPTR) - : m_groupSize(0), m_counter(0) {Detach(attachment);} - - /// \brief Construct a Grouper - /// \param groupSize the size of the grouping - /// \param separator the separator to use between groups - /// \param terminator the terminator appeand after processing - /// \param attachment a BufferedTransformation to attach to this object - Grouper(int groupSize, const std::string &separator, const std::string &terminator, BufferedTransformation *attachment=NULLPTR) - : m_groupSize(0), m_counter(0) - { - Detach(attachment); - Grouper::IsolatedInitialize( - MakeParameters - (Name::GroupSize(), groupSize) - (Name::Separator(), ConstByteArrayParameter(separator)) - (Name::Terminator(), ConstByteArrayParameter(terminator))); - } - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking); - -private: - SecByteBlock m_separator, m_terminator; - size_t m_groupSize, m_counter; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/bench.h b/third_party/cryptoppwin/include/cryptopp/bench.h deleted file mode 100644 index 561b6578..00000000 --- a/third_party/cryptoppwin/include/cryptopp/bench.h +++ /dev/null @@ -1,105 +0,0 @@ -// bench.h - originally written and placed in the public domain by Wei Dai -// CryptoPP::Test namespace added by JW in February 2017 - -#ifndef CRYPTOPP_BENCH_H -#define CRYPTOPP_BENCH_H - -#include "cryptlib.h" - -#include -#include -#include -#include - -NAMESPACE_BEGIN(CryptoPP) -NAMESPACE_BEGIN(Test) - -// More granular control over benchmarks -enum TestClass { - /// \brief Random number generators - UnkeyedRNG=(1<<0), - /// \brief Message digests - UnkeyedHash=(1<<1), - /// \brief Other unkeyed algorithms - UnkeyedOther=(1<<2), - - /// \brief Message authentication codes - SharedKeyMAC=(1<<3), - /// \brief Stream ciphers - SharedKeyStream=(1<<4), - /// \brief Block ciphers ciphers - SharedKeyBlock=(1<<5), - /// \brief Other shared key algorithms - SharedKeyOther=(1<<6), - - /// \brief Key agreement algorithms over integers - PublicKeyAgreement=(1<<7), - /// \brief Encryption algorithms over integers - PublicKeyEncryption=(1<<8), - /// \brief Signature algorithms over integers - PublicKeySignature=(1<<9), - /// \brief Other public key algorithms over integers - PublicKeyOther=(1<<10), - - /// \brief Key agreement algorithms over EC - PublicKeyAgreementEC=(1<<11), - /// \brief Encryption algorithms over EC - PublicKeyEncryptionEC=(1<<12), - /// \brief Signature algorithms over EC - PublicKeySignatureEC=(1<<13), - /// \brief Other public key algorithms over EC - PublicKeyOtherEC=(1<<14), - - Unkeyed=UnkeyedRNG|UnkeyedHash|UnkeyedOther, - SharedKey=SharedKeyMAC|SharedKeyStream|SharedKeyBlock|SharedKeyOther, - PublicKey=PublicKeyAgreement|PublicKeyEncryption|PublicKeySignature|PublicKeyOther, - PublicKeyEC=PublicKeyAgreementEC|PublicKeyEncryptionEC|PublicKeySignatureEC|PublicKeyOtherEC, - - All=Unkeyed|SharedKey|PublicKey|PublicKeyEC, - - TestFirst=(0), TestLast=(1<<15) -}; - -extern const double CLOCK_TICKS_PER_SECOND; -extern double g_allocatedTime; -extern double g_hertz; -extern double g_logTotal; -extern unsigned int g_logCount; -extern const byte defaultKey[]; - -// Test book keeping -extern time_t g_testBegin; -extern time_t g_testEnd; - -// Benchmark command handler -void BenchmarkWithCommand(int argc, const char* const argv[]); -// Top level, prints preamble and postamble -void Benchmark(Test::TestClass suites, double t, double hertz); -// Unkeyed systems -void BenchmarkUnkeyedAlgorithms(double t, double hertz); -// Shared key systems -void BenchmarkSharedKeyedAlgorithms(double t, double hertz); -// Public key systems over integers -void BenchmarkPublicKeyAlgorithms(double t, double hertz); -// Public key systems over elliptic curves -void BenchmarkEllipticCurveAlgorithms(double t, double hertz); - -// These are defined in bench1.cpp -extern void OutputResultKeying(double iterations, double timeTaken); -extern void OutputResultBytes(const char *name, const char *provider, double length, double timeTaken); -extern void OutputResultOperations(const char *name, const char *provider, const char *operation, bool pc, unsigned long iterations, double timeTaken); - -// These are defined in bench1.cpp -extern void BenchMark(const char *name, BufferedTransformation &bt, double timeTotal); -extern void BenchMark(const char *name, StreamTransformation &cipher, double timeTotal); -extern void BenchMark(const char *name, HashTransformation &ht, double timeTotal); -extern void BenchMark(const char *name, RandomNumberGenerator &rng, double timeTotal); - -// These are defined in bench2.cpp -extern void BenchMarkKeying(SimpleKeyingInterface &c, size_t keyLength, const NameValuePairs ¶ms); -extern void BenchMark(const char *name, AuthenticatedSymmetricCipher &cipher, double timeTotal); - -NAMESPACE_END // Test -NAMESPACE_END // CryptoPP - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/blake2.h b/third_party/cryptoppwin/include/cryptopp/blake2.h deleted file mode 100644 index bbbe134b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/blake2.h +++ /dev/null @@ -1,444 +0,0 @@ -// blake2.h - written and placed in the public domain by Jeffrey Walton -// and Zooko Wilcox-O'Hearn. Based on Aumasson, Neves, -// Wilcox-O'Hearn and Winnerlein's reference BLAKE2 -// implementation at http://github.com/BLAKE2/BLAKE2. - -/// \file blake2.h -/// \brief Classes for BLAKE2b and BLAKE2s message digests and keyed message digests -/// \details This implementation follows Aumasson, Neves, Wilcox-O'Hearn and Winnerlein's -/// BLAKE2: simpler, smaller, fast as MD5 (2013.01.29). -/// Static algorithm name return either "BLAKE2b" or "BLAKE2s". An object algorithm name follows -/// the naming described in RFC 7693, The -/// BLAKE2 Cryptographic Hash and Message Authentication Code (MAC). -/// \since C++ since Crypto++ 5.6.4, SSE since Crypto++ 5.6.4, NEON since Crypto++ 6.0, -/// Power8 since Crypto++ 8.0 - -#ifndef CRYPTOPP_BLAKE2_H -#define CRYPTOPP_BLAKE2_H - -#include "cryptlib.h" -#include "secblock.h" -#include "seckey.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief BLAKE2s hash information -/// \since Crypto++ 5.6.4 -struct BLAKE2s_Info : public VariableKeyLength<32,0,32,1,SimpleKeyingInterface::NOT_RESYNCHRONIZABLE> -{ - typedef VariableKeyLength<32,0,32,1,SimpleKeyingInterface::NOT_RESYNCHRONIZABLE> KeyBase; - CRYPTOPP_CONSTANT(MIN_KEYLENGTH = KeyBase::MIN_KEYLENGTH); - CRYPTOPP_CONSTANT(MAX_KEYLENGTH = KeyBase::MAX_KEYLENGTH); - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH = KeyBase::DEFAULT_KEYLENGTH); - - CRYPTOPP_CONSTANT(BLOCKSIZE = 64); - CRYPTOPP_CONSTANT(DIGESTSIZE = 32); - CRYPTOPP_CONSTANT(SALTSIZE = 8); - CRYPTOPP_CONSTANT(PERSONALIZATIONSIZE = 8); - - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "BLAKE2s";} -}; - -/// \brief BLAKE2b hash information -/// \since Crypto++ 5.6.4 -struct BLAKE2b_Info : public VariableKeyLength<64,0,64,1,SimpleKeyingInterface::NOT_RESYNCHRONIZABLE> -{ - typedef VariableKeyLength<64,0,64,1,SimpleKeyingInterface::NOT_RESYNCHRONIZABLE> KeyBase; - CRYPTOPP_CONSTANT(MIN_KEYLENGTH = KeyBase::MIN_KEYLENGTH); - CRYPTOPP_CONSTANT(MAX_KEYLENGTH = KeyBase::MAX_KEYLENGTH); - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH = KeyBase::DEFAULT_KEYLENGTH); - - CRYPTOPP_CONSTANT(BLOCKSIZE = 128); - CRYPTOPP_CONSTANT(DIGESTSIZE = 64); - CRYPTOPP_CONSTANT(SALTSIZE = 16); - CRYPTOPP_CONSTANT(PERSONALIZATIONSIZE = 16); - - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "BLAKE2b";} -}; - -/// \brief BLAKE2s parameter block -struct CRYPTOPP_NO_VTABLE BLAKE2s_ParameterBlock -{ - CRYPTOPP_CONSTANT(SALTSIZE = BLAKE2s_Info::SALTSIZE); - CRYPTOPP_CONSTANT(DIGESTSIZE = BLAKE2s_Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(PERSONALIZATIONSIZE = BLAKE2s_Info::PERSONALIZATIONSIZE); - - BLAKE2s_ParameterBlock() - { - Reset(); - } - - BLAKE2s_ParameterBlock(size_t digestSize) - { - Reset(digestSize); - } - - BLAKE2s_ParameterBlock(size_t digestSize, size_t keyLength, const byte* salt, size_t saltLength, - const byte* personalization, size_t personalizationLength); - - void Reset(size_t digestLength=DIGESTSIZE, size_t keyLength=0); - - byte* data() { - return m_data.data(); - } - - const byte* data() const { - return m_data.data(); - } - - size_t size() const { - return m_data.size(); - } - - byte* salt() { - return m_data + SaltOff; - } - - byte* personalization() { - return m_data + PersonalizationOff; - } - - // Offsets into the byte array - enum { - DigestOff = 0, KeyOff = 1, FanoutOff = 2, DepthOff = 3, LeafOff = 4, NodeOff = 8, - NodeDepthOff = 14, InnerOff = 15, SaltOff = 16, PersonalizationOff = 24 - }; - - FixedSizeAlignedSecBlock m_data; -}; - -/// \brief BLAKE2b parameter block -struct CRYPTOPP_NO_VTABLE BLAKE2b_ParameterBlock -{ - CRYPTOPP_CONSTANT(SALTSIZE = BLAKE2b_Info::SALTSIZE); - CRYPTOPP_CONSTANT(DIGESTSIZE = BLAKE2b_Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(PERSONALIZATIONSIZE = BLAKE2b_Info::PERSONALIZATIONSIZE); - - BLAKE2b_ParameterBlock() - { - Reset(); - } - - BLAKE2b_ParameterBlock(size_t digestSize) - { - Reset(digestSize); - } - - BLAKE2b_ParameterBlock(size_t digestSize, size_t keyLength, const byte* salt, size_t saltLength, - const byte* personalization, size_t personalizationLength); - - void Reset(size_t digestLength=DIGESTSIZE, size_t keyLength=0); - - byte* data() { - return m_data.data(); - } - - const byte* data() const { - return m_data.data(); - } - - size_t size() const { - return m_data.size(); - } - - byte* salt() { - return m_data + SaltOff; - } - - byte* personalization() { - return m_data + PersonalizationOff; - } - - // Offsets into the byte array - enum { - DigestOff = 0, KeyOff = 1, FanoutOff = 2, DepthOff = 3, LeafOff = 4, NodeOff = 8, - NodeDepthOff = 16, InnerOff = 17, RfuOff = 18, SaltOff = 32, PersonalizationOff = 48 - }; - - FixedSizeAlignedSecBlock m_data; -}; - -/// \brief BLAKE2s state information -/// \since Crypto++ 5.6.4 -struct CRYPTOPP_NO_VTABLE BLAKE2s_State -{ - BLAKE2s_State() { - Reset(); - } - - void Reset(); - - inline word32* h() { - return m_hft.data(); - } - - inline word32* t() { - return m_hft.data() + 8; - } - - inline word32* f() { - return m_hft.data() + 10; - } - - inline byte* data() { - return m_buf.data(); - } - - // SSE4, Power7 and NEON depend upon t[] and f[] being side-by-side - CRYPTOPP_CONSTANT(BLOCKSIZE = BLAKE2s_Info::BLOCKSIZE); - FixedSizeAlignedSecBlock m_hft; - FixedSizeAlignedSecBlock m_buf; - size_t m_len; -}; - -/// \brief BLAKE2b state information -/// \since Crypto++ 5.6.4 -struct CRYPTOPP_NO_VTABLE BLAKE2b_State -{ - BLAKE2b_State() { - Reset(); - } - - void Reset(); - - inline word64* h() { - return m_hft.data(); - } - - inline word64* t() { - return m_hft.data() + 8; - } - - inline word64* f() { - return m_hft.data() + 10; - } - - inline byte* data() { - return m_buf.data(); - } - - // SSE4, Power8 and NEON depend upon t[] and f[] being side-by-side - CRYPTOPP_CONSTANT(BLOCKSIZE = BLAKE2b_Info::BLOCKSIZE); - FixedSizeAlignedSecBlock m_hft; - FixedSizeAlignedSecBlock m_buf; - size_t m_len; -}; - -/// \brief The BLAKE2s cryptographic hash function -/// \details BLAKE2s can function as both a hash and keyed hash. If you want only the hash, -/// then use the BLAKE2s constructor that accepts no parameters or digest size. If you -/// want a keyed hash, then use the constructor that accpts the key as a parameter. -/// Once a key and digest size are selected, its effectively immutable. The Restart() -/// method that accepts a ParameterBlock does not allow you to change it. -/// \sa Aumasson, Neves, Wilcox-O'Hearn and Winnerlein's -/// BLAKE2: simpler, smaller, fast as MD5 (2013.01.29). -/// \since C++ since Crypto++ 5.6.4, SSE since Crypto++ 5.6.4, NEON since Crypto++ 6.0, -/// Power8 since Crypto++ 8.0 -class BLAKE2s : public SimpleKeyingInterfaceImpl -{ -public: - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH = BLAKE2s_Info::DEFAULT_KEYLENGTH); - CRYPTOPP_CONSTANT(MIN_KEYLENGTH = BLAKE2s_Info::MIN_KEYLENGTH); - CRYPTOPP_CONSTANT(MAX_KEYLENGTH = BLAKE2s_Info::MAX_KEYLENGTH); - - CRYPTOPP_CONSTANT(DIGESTSIZE = BLAKE2s_Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(BLOCKSIZE = BLAKE2s_Info::BLOCKSIZE); - CRYPTOPP_CONSTANT(SALTSIZE = BLAKE2s_Info::SALTSIZE); - CRYPTOPP_CONSTANT(PERSONALIZATIONSIZE = BLAKE2s_Info::PERSONALIZATIONSIZE); - - typedef BLAKE2s_State State; - typedef BLAKE2s_ParameterBlock ParameterBlock; - - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "BLAKE2s";} - - virtual ~BLAKE2s() {} - - /// \brief Construct a BLAKE2s hash - /// \param digestSize the digest size, in bytes - /// \param treeMode flag indicating tree mode - /// \since Crypto++ 5.6.4 - BLAKE2s(bool treeMode=false, unsigned int digestSize = DIGESTSIZE); - - /// \brief Construct a BLAKE2s hash - /// \param digestSize the digest size, in bytes - /// \details treeMode flag is set to false - /// \since Crypto++ 8.2 - BLAKE2s(unsigned int digestSize); - - /// \brief Construct a BLAKE2s hash - /// \param key a byte array used to key the cipher - /// \param keyLength the size of the byte array - /// \param salt a byte array used as salt - /// \param saltLength the size of the byte array - /// \param personalization a byte array used as personalization string - /// \param personalizationLength the size of the byte array - /// \param treeMode flag indicating tree mode - /// \param digestSize the digest size, in bytes - /// \since Crypto++ 5.6.4 - BLAKE2s(const byte *key, size_t keyLength, const byte* salt = NULLPTR, size_t saltLength = 0, - const byte* personalization = NULLPTR, size_t personalizationLength = 0, - bool treeMode=false, unsigned int digestSize = DIGESTSIZE); - - /// \brief Retrieve the object's name - /// \return the object's algorithm name following RFC 7693 - /// \details Object algorithm name follows the naming described in - /// RFC 7693, The BLAKE2 Cryptographic Hash and - /// Message Authentication Code (MAC). For example, "BLAKE2b-512" and "BLAKE2s-256". - std::string AlgorithmName() const {return std::string(BLAKE2s_Info::StaticAlgorithmName()) + "-" + IntToString(DigestSize()*8);} - - unsigned int BlockSize() const {return BLOCKSIZE;} - unsigned int DigestSize() const {return m_digestSize;} - unsigned int OptimalDataAlignment() const; - - void Update(const byte *input, size_t length); - void Restart(); - - /// \brief Restart a hash with parameter block and counter - /// \param block parameter block - /// \param counter counter array - /// \details Parameter block is persisted across calls to Restart(). - void Restart(const BLAKE2s_ParameterBlock& block, const word32 counter[2]); - - /// \brief Set tree mode - /// \param mode the new tree mode - /// \details BLAKE2 has two finalization flags, called State::f[0] and State::f[1]. - /// If treeMode=false (default), then State::f[1] is never set. If - /// treeMode=true, then State::f[1] is set when State::f[0] is set. - /// Tree mode is persisted across calls to Restart(). - void SetTreeMode(bool mode) {m_treeMode=mode;} - - /// \brief Get tree mode - /// \return the current tree mode - /// \details Tree mode is persisted across calls to Restart(). - bool GetTreeMode() const {return m_treeMode;} - - void TruncatedFinal(byte *hash, size_t size); - - std::string AlgorithmProvider() const; - -protected: - // Operates on state buffer and/or input. Must be BLOCKSIZE, final block will pad with 0's. - void Compress(const byte *input); - inline void IncrementCounter(size_t count=BLOCKSIZE); - - void UncheckedSetKey(const byte* key, unsigned int length, const CryptoPP::NameValuePairs& params); - -private: - State m_state; - ParameterBlock m_block; - AlignedSecByteBlock m_key; - word32 m_digestSize, m_keyLength; - bool m_treeMode; -}; - -/// \brief The BLAKE2b cryptographic hash function -/// \details BLAKE2b can function as both a hash and keyed hash. If you want only the hash, -/// then use the BLAKE2b constructor that accepts no parameters or digest size. If you -/// want a keyed hash, then use the constructor that accpts the key as a parameter. -/// Once a key and digest size are selected, its effectively immutable. The Restart() -/// method that accepts a ParameterBlock does not allow you to change it. -/// \sa Aumasson, Neves, Wilcox-O'Hearn and Winnerlein's -/// BLAKE2: simpler, smaller, fast as MD5 (2013.01.29). -/// \since C++ since Crypto++ 5.6.4, SSE since Crypto++ 5.6.4, NEON since Crypto++ 6.0, -/// Power8 since Crypto++ 8.0 -class BLAKE2b : public SimpleKeyingInterfaceImpl -{ -public: - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH = BLAKE2b_Info::DEFAULT_KEYLENGTH); - CRYPTOPP_CONSTANT(MIN_KEYLENGTH = BLAKE2b_Info::MIN_KEYLENGTH); - CRYPTOPP_CONSTANT(MAX_KEYLENGTH = BLAKE2b_Info::MAX_KEYLENGTH); - - CRYPTOPP_CONSTANT(DIGESTSIZE = BLAKE2b_Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(BLOCKSIZE = BLAKE2b_Info::BLOCKSIZE); - CRYPTOPP_CONSTANT(SALTSIZE = BLAKE2b_Info::SALTSIZE); - CRYPTOPP_CONSTANT(PERSONALIZATIONSIZE = BLAKE2b_Info::PERSONALIZATIONSIZE); - - typedef BLAKE2b_State State; - typedef BLAKE2b_ParameterBlock ParameterBlock; - - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "BLAKE2b";} - - virtual ~BLAKE2b() {} - - /// \brief Construct a BLAKE2b hash - /// \param digestSize the digest size, in bytes - /// \param treeMode flag indicating tree mode - /// \since Crypto++ 5.6.4 - BLAKE2b(bool treeMode=false, unsigned int digestSize = DIGESTSIZE); - - /// \brief Construct a BLAKE2s hash - /// \param digestSize the digest size, in bytes - /// \details treeMode flag is set to false - /// \since Crypto++ 8.2 - BLAKE2b(unsigned int digestSize); - - /// \brief Construct a BLAKE2b hash - /// \param key a byte array used to key the cipher - /// \param keyLength the size of the byte array - /// \param salt a byte array used as salt - /// \param saltLength the size of the byte array - /// \param personalization a byte array used as personalization string - /// \param personalizationLength the size of the byte array - /// \param treeMode flag indicating tree mode - /// \param digestSize the digest size, in bytes - /// \since Crypto++ 5.6.4 - BLAKE2b(const byte *key, size_t keyLength, const byte* salt = NULLPTR, size_t saltLength = 0, - const byte* personalization = NULLPTR, size_t personalizationLength = 0, - bool treeMode=false, unsigned int digestSize = DIGESTSIZE); - - /// \brief Retrieve the object's name - /// \return the object's algorithm name following RFC 7693 - /// \details Object algorithm name follows the naming described in - /// RFC 7693, The BLAKE2 Cryptographic Hash and - /// Message Authentication Code (MAC). For example, "BLAKE2b-512" and "BLAKE2s-256". - std::string AlgorithmName() const {return std::string(BLAKE2b_Info::StaticAlgorithmName()) + "-" + IntToString(DigestSize()*8);} - - unsigned int BlockSize() const {return BLOCKSIZE;} - unsigned int DigestSize() const {return m_digestSize;} - unsigned int OptimalDataAlignment() const; - - void Update(const byte *input, size_t length); - void Restart(); - - /// \brief Restart a hash with parameter block and counter - /// \param block parameter block - /// \param counter counter array - /// \details Parameter block is persisted across calls to Restart(). - void Restart(const BLAKE2b_ParameterBlock& block, const word64 counter[2]); - - /// \brief Set tree mode - /// \param mode the new tree mode - /// \details BLAKE2 has two finalization flags, called State::f[0] and State::f[1]. - /// If treeMode=false (default), then State::f[1] is never set. If - /// treeMode=true, then State::f[1] is set when State::f[0] is set. - /// Tree mode is persisted across calls to Restart(). - void SetTreeMode(bool mode) {m_treeMode=mode;} - - /// \brief Get tree mode - /// \return the current tree mode - /// \details Tree mode is persisted across calls to Restart(). - bool GetTreeMode() const {return m_treeMode;} - - void TruncatedFinal(byte *hash, size_t size); - - std::string AlgorithmProvider() const; - -protected: - - // Operates on state buffer and/or input. Must be BLOCKSIZE, final block will pad with 0's. - void Compress(const byte *input); - inline void IncrementCounter(size_t count=BLOCKSIZE); - - void UncheckedSetKey(const byte* key, unsigned int length, const CryptoPP::NameValuePairs& params); - -private: - State m_state; - ParameterBlock m_block; - AlignedSecByteBlock m_key; - word32 m_digestSize, m_keyLength; - bool m_treeMode; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/blowfish.h b/third_party/cryptoppwin/include/cryptopp/blowfish.h deleted file mode 100644 index 8032491e..00000000 --- a/third_party/cryptoppwin/include/cryptopp/blowfish.h +++ /dev/null @@ -1,54 +0,0 @@ -// blowfish.h - originally written and placed in the public domain by Wei Dai - -/// \file blowfish.h -/// \brief Classes for the Blowfish block cipher - -#ifndef CRYPTOPP_BLOWFISH_H -#define CRYPTOPP_BLOWFISH_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Blowfish block cipher information -struct Blowfish_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 4, 56>, public FixedRounds<16> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Blowfish";} -}; - -// Blowfish - -/// \brief Blowfish block cipher -/// \since Crypto++ 1.0 -class Blowfish : public Blowfish_Info, public BlockCipherDocumentation -{ - /// \brief Class specific implementation and overrides used to operate the cipher. - /// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - void UncheckedSetKey(const byte *key_string, unsigned int keylength, const NameValuePairs ¶ms); - - private: - void crypt_block(const word32 in[2], word32 out[2]) const; - - static const word32 p_init[ROUNDS+2]; - static const word32 s_init[4*256]; - - FixedSizeSecBlock pbox; - FixedSizeSecBlock sbox; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Blowfish::Encryption BlowfishEncryption; -typedef Blowfish::Decryption BlowfishDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/blumshub.h b/third_party/cryptoppwin/include/cryptopp/blumshub.h deleted file mode 100644 index 997a5152..00000000 --- a/third_party/cryptoppwin/include/cryptopp/blumshub.h +++ /dev/null @@ -1,70 +0,0 @@ -// blumshub.h - originally written and placed in the public domain by Wei Dai - -/// \file blumshub.h -/// \brief Classes for Blum Blum Shub generator - -#ifndef CRYPTOPP_BLUMSHUB_H -#define CRYPTOPP_BLUMSHUB_H - -#include "cryptlib.h" -#include "modarith.h" -#include "integer.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief BlumBlumShub without factorization of the modulus -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -class PublicBlumBlumShub : public RandomNumberGenerator, - public StreamTransformation -{ -public: - virtual ~PublicBlumBlumShub() {} - - /// \brief Construct a PublicBlumBlumShub - /// \param n the modulus - /// \param seed the seed for the generator - /// \details seed is the secret key and should be about as large as n. - PublicBlumBlumShub(const Integer &n, const Integer &seed); - - unsigned int GenerateBit(); - byte GenerateByte(); - void GenerateBlock(byte *output, size_t size); - void ProcessData(byte *outString, const byte *inString, size_t length); - - bool IsSelfInverting() const {return true;} - bool IsForwardTransformation() const {return true;} - -protected: - ModularArithmetic modn; - Integer current; - word maxBits, bitsLeft; -}; - -/// \brief BlumBlumShub with factorization of the modulus -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -class BlumBlumShub : public PublicBlumBlumShub -{ -public: - virtual ~BlumBlumShub() {} - - /// \brief Construct a BlumBlumShub - /// \param p the first prime factor - /// \param q the second prime factor - /// \param seed the seed for the generator - /// \details Esure p and q are both primes congruent to 3 mod 4 and at least 512 bits long. - /// seed is the secret key and should be about as large as p*q. - BlumBlumShub(const Integer &p, const Integer &q, const Integer &seed); - - bool IsRandomAccess() const {return true;} - void Seek(lword index); - -protected: - const Integer p, q; - const Integer x0; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/camellia.h b/third_party/cryptoppwin/include/cryptopp/camellia.h deleted file mode 100644 index 2d551dcd..00000000 --- a/third_party/cryptoppwin/include/cryptopp/camellia.h +++ /dev/null @@ -1,49 +0,0 @@ -// camellia.h - originally written and placed in the public domain by Wei Dai - -/// \file camellia.h -/// \brief Classes for the Camellia block cipher - -#ifndef CRYPTOPP_CAMELLIA_H -#define CRYPTOPP_CAMELLIA_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Camellia block cipher information -struct Camellia_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Camellia";} -}; - -/// \brief Camellia block cipher -/// \sa Camellia -class Camellia : public Camellia_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - CRYPTOPP_ALIGN_DATA(4) static const byte s1[256]; - static const word32 SP[4][256]; - - unsigned int m_rounds; - SecBlock m_key; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Camellia::Encryption CamelliaEncryption; -typedef Camellia::Decryption CamelliaDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/cast.h b/third_party/cryptoppwin/include/cryptopp/cast.h deleted file mode 100644 index 424cf62b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/cast.h +++ /dev/null @@ -1,109 +0,0 @@ -// cast.h - originally written and placed in the public domain by Wei Dai - -/// \file cast.h -/// \brief Classes for the CAST-128 and CAST-256 block ciphers -/// \since Crypto++ 2.2 - -#ifndef CRYPTOPP_CAST_H -#define CRYPTOPP_CAST_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief CAST block cipher base -/// \since Crypto++ 2.2 -class CAST -{ -protected: - static const word32 S[8][256]; -}; - -/// \brief CAST128 block cipher information -/// \since Crypto++ 2.2 -struct CAST128_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 5, 16> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "CAST-128";} -}; - -/// \brief CAST128 block cipher -/// \sa CAST-128 -/// \since Crypto++ 2.2 -class CAST128 : public CAST128_Info, public BlockCipherDocumentation -{ - /// \brief CAST128 block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public CAST, public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - bool reduced; - FixedSizeSecBlock K; - mutable FixedSizeSecBlock m_t; - }; - - /// \brief CAST128 block cipher encryption operation - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief CAST128 block cipher decryption operation - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief CAST256 block cipher information -/// \since Crypto++ 4.0 -struct CAST256_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 4> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "CAST-256";} -}; - -/// \brief CAST256 block cipher -/// \sa CAST-256 -/// \since Crypto++ 4.0 -class CAST256 : public CAST256_Info, public BlockCipherDocumentation -{ - /// \brief CAST256 block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public CAST, public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - static const word32 t_m[8][24]; - static const unsigned int t_r[8][24]; - - static void Omega(int i, word32 kappa[8]); - - FixedSizeSecBlock K; - mutable FixedSizeSecBlock kappa; - mutable FixedSizeSecBlock m_t; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef CAST128::Encryption CAST128Encryption; -typedef CAST128::Decryption CAST128Decryption; - -typedef CAST256::Encryption CAST256Encryption; -typedef CAST256::Decryption CAST256Decryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/cbcmac.h b/third_party/cryptoppwin/include/cryptopp/cbcmac.h deleted file mode 100644 index 5a0c1201..00000000 --- a/third_party/cryptoppwin/include/cryptopp/cbcmac.h +++ /dev/null @@ -1,63 +0,0 @@ -// cbcmac.h - originally written and placed in the public domain by Wei Dai - -/// \file -/// \brief Classes for CBC MAC -/// \since Crypto++ 3.1 - -#ifndef CRYPTOPP_CBCMAC_H -#define CRYPTOPP_CBCMAC_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief CBC-MAC base class -/// \since Crypto++ 3.1 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CBC_MAC_Base : public MessageAuthenticationCode -{ -public: - CBC_MAC_Base() : m_counter(0) {} - - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *mac, size_t size); - unsigned int DigestSize() const {return const_cast(this)->AccessCipher().BlockSize();} - -protected: - virtual BlockCipher & AccessCipher() =0; - -private: - void ProcessBuf(); - SecByteBlock m_reg; - unsigned int m_counter; -}; - -/// \brief CBC-MAC -/// \tparam T BlockCipherDocumentation derived class -/// \details CBC-MAC is compatible with FIPS 113. The MAC is secure only for fixed -/// length messages. For variable length messages use CMAC or DMAC. -/// \sa CBC-MAC -/// \since Crypto++ 3.1 -template -class CBC_MAC : public MessageAuthenticationCodeImpl >, public SameKeyLengthAs -{ -public: - /// \brief Construct a CBC_MAC - CBC_MAC() {} - /// \brief Construct a CBC_MAC - /// \param key a byte buffer used to key the cipher - /// \param length the length of the byte buffer - CBC_MAC(const byte *key, size_t length=SameKeyLengthAs::DEFAULT_KEYLENGTH) - {this->SetKey(key, length);} - - static std::string StaticAlgorithmName() {return std::string("CBC-MAC(") + T::StaticAlgorithmName() + ")";} - -private: - BlockCipher & AccessCipher() {return m_cipher;} - typename T::Encryption m_cipher; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ccm.h b/third_party/cryptoppwin/include/cryptopp/ccm.h deleted file mode 100644 index f4f8ab05..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ccm.h +++ /dev/null @@ -1,123 +0,0 @@ -// ccm.h - originally written and placed in the public domain by Wei Dai - -/// \file ccm.h -/// \brief CCM block cipher mode of operation -/// \since Crypto++ 5.6.0 - -#ifndef CRYPTOPP_CCM_H -#define CRYPTOPP_CCM_H - -#include "authenc.h" -#include "modes.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief CCM block cipher base implementation -/// \details Base implementation of the AuthenticatedSymmetricCipher interface -/// \since Crypto++ 5.6.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CCM_Base : public AuthenticatedSymmetricCipherBase -{ -public: - CCM_Base() - : m_digestSize(0), m_L(0), m_messageLength(0), m_aadLength(0) {} - - // AuthenticatedSymmetricCipher - std::string AlgorithmName() const - {return GetBlockCipher().AlgorithmName() + std::string("/CCM");} - std::string AlgorithmProvider() const - {return GetBlockCipher().AlgorithmProvider();} - size_t MinKeyLength() const - {return GetBlockCipher().MinKeyLength();} - size_t MaxKeyLength() const - {return GetBlockCipher().MaxKeyLength();} - size_t DefaultKeyLength() const - {return GetBlockCipher().DefaultKeyLength();} - size_t GetValidKeyLength(size_t keylength) const - {return GetBlockCipher().GetValidKeyLength(keylength);} - bool IsValidKeyLength(size_t keylength) const - {return GetBlockCipher().IsValidKeyLength(keylength);} - unsigned int OptimalDataAlignment() const - {return GetBlockCipher().OptimalDataAlignment();} - IV_Requirement IVRequirement() const - {return UNIQUE_IV;} - unsigned int IVSize() const - {return 8;} - unsigned int MinIVLength() const - {return 7;} - unsigned int MaxIVLength() const - {return 13;} - unsigned int DigestSize() const - {return m_digestSize;} - lword MaxHeaderLength() const - {return W64LIT(0)-1;} - lword MaxMessageLength() const - {return m_L<8 ? (W64LIT(1)<<(8*m_L))-1 : W64LIT(0)-1;} - bool NeedsPrespecifiedDataLengths() const - {return true;} - void UncheckedSpecifyDataLengths(lword headerLength, lword messageLength, lword footerLength); - -protected: - // AuthenticatedSymmetricCipherBase - bool AuthenticationIsOnPlaintext() const - {return true;} - unsigned int AuthenticationBlockSize() const - {return GetBlockCipher().BlockSize();} - void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); - void Resync(const byte *iv, size_t len); - size_t AuthenticateBlocks(const byte *data, size_t len); - void AuthenticateLastHeaderBlock(); - void AuthenticateLastConfidentialBlock(); - void AuthenticateLastFooterBlock(byte *mac, size_t macSize); - SymmetricCipher & AccessSymmetricCipher() {return m_ctr;} - - virtual BlockCipher & AccessBlockCipher() =0; - virtual int DefaultDigestSize() const =0; - - const BlockCipher & GetBlockCipher() const {return const_cast(this)->AccessBlockCipher();} - byte *CBC_Buffer() {return m_buffer+REQUIRED_BLOCKSIZE;} - - enum {REQUIRED_BLOCKSIZE = 16}; - int m_digestSize, m_L; - word64 m_messageLength, m_aadLength; - CTR_Mode_ExternalCipher::Encryption m_ctr; -}; - -/// \brief CCM block cipher final implementation -/// \tparam T_BlockCipher block cipher -/// \tparam T_DefaultDigestSize default digest size, in bytes -/// \tparam T_IsEncryption direction in which to operate the cipher -/// \since Crypto++ 5.6.0 -template -class CCM_Final : public CCM_Base -{ -public: - static std::string StaticAlgorithmName() - {return T_BlockCipher::StaticAlgorithmName() + std::string("/CCM");} - bool IsForwardTransformation() const - {return T_IsEncryption;} - -private: - BlockCipher & AccessBlockCipher() {return m_cipher;} - int DefaultDigestSize() const {return T_DefaultDigestSize;} - typename T_BlockCipher::Encryption m_cipher; -}; - -/// \brief CCM block cipher mode of operation -/// \tparam T_BlockCipher block cipher -/// \tparam T_DefaultDigestSize default digest size, in bytes -/// \details \p CCM provides the \p Encryption and \p Decryption typedef. See GCM_Base -/// and GCM_Final for the AuthenticatedSymmetricCipher implementation. -/// \sa CCM Mode and -/// Modes of Operation -/// on the Crypto++ wiki. -/// \since Crypto++ 5.6.0 -template -struct CCM : public AuthenticatedSymmetricCipherDocumentation -{ - typedef CCM_Final Encryption; - typedef CCM_Final Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/chacha.h b/third_party/cryptoppwin/include/cryptopp/chacha.h deleted file mode 100644 index 8b21ebb2..00000000 --- a/third_party/cryptoppwin/include/cryptopp/chacha.h +++ /dev/null @@ -1,223 +0,0 @@ -// chacha.h - written and placed in the public domain by Jeffrey Walton. -// Based on Wei Dai's Salsa20, Botan's SSE2 implementation, -// and Bernstein's reference ChaCha family implementation at -// http://cr.yp.to/chacha.html. - -// The library added Bernstein's ChaCha classes at Crypto++ 5.6.4. The IETF -// uses a slightly different implementation than Bernstein, and the IETF -// ChaCha and XChaCha classes were added at Crypto++ 8.1. We wanted to maintain -// ABI compatibility at the 8.1 release so the original ChaCha classes were not -// disturbed. Instead new classes were added for IETF ChaCha. The back-end -// implementation shares code as expected, however. - -/// \file chacha.h -/// \brief Classes for ChaCha8, ChaCha12 and ChaCha20 stream ciphers -/// \details Crypto++ provides Bernstein and ECRYPT's ChaCha from ChaCha, a -/// variant of Salsa20 (2008.01.28). Crypto++ also provides the -/// IETF implementation of ChaCha using the ChaChaTLS name. Bernstein's -/// implementation is _slightly_ different from the TLS working group's -/// implementation for cipher suites -/// TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, -/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, -/// and TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. Finally, -/// the library provides XChaCha: -/// eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305 (rev. 03). -/// \since ChaCha since Crypto++ 5.6.4, ChaChaTLS and XChaCha20 since Crypto++ 8.1 - -#ifndef CRYPTOPP_CHACHA_H -#define CRYPTOPP_CHACHA_H - -#include "strciphr.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -////////////////////////////// Bernstein ChaCha ////////////////////////////// - -/// \brief ChaCha stream cipher information -/// \since Crypto++ 5.6.4 -struct ChaCha_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::UNIQUE_IV, 8> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - /// \details Bernstein named the cipher variants ChaCha8, ChaCha12 and - /// ChaCha20. More generally, Bernstein called the family ChaCha{r}. - /// AlgorithmName() provides the exact name once rounds are set. - static const char* StaticAlgorithmName() { - return "ChaCha"; - } -}; - -/// \brief ChaCha stream cipher implementation -/// \since Crypto++ 5.6.4 -class CRYPTOPP_NO_VTABLE ChaCha_Policy : public AdditiveCipherConcretePolicy -{ -public: - virtual ~ChaCha_Policy() {} - ChaCha_Policy() : m_rounds(ROUNDS) {} - -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); - bool CipherIsRandomAccess() const {return true;} - void SeekToIteration(lword iterationCount); - unsigned int GetAlignment() const; - unsigned int GetOptimalBlockSize() const; - - std::string AlgorithmName() const; - std::string AlgorithmProvider() const; - - CRYPTOPP_CONSTANT(ROUNDS = 20); // Default rounds - FixedSizeAlignedSecBlock m_state; - unsigned int m_rounds; -}; - -/// \brief ChaCha stream cipher -/// \details This is Bernstein and ECRYPT's ChaCha. It is _slightly_ different -/// from the IETF's version of ChaCha called ChaChaTLS. -/// \sa ChaCha, a variant -/// of Salsa20 (2008.01.28). -/// \since Crypto++ 5.6.4 -struct ChaCha : public ChaCha_Info, public SymmetricCipherDocumentation -{ - /// \brief ChaCha Encryption - typedef SymmetricCipherFinal >, ChaCha_Info > Encryption; - /// \brief ChaCha Decryption - typedef Encryption Decryption; -}; - -////////////////////////////// IETF ChaChaTLS ////////////////////////////// - -/// \brief IETF ChaCha20 stream cipher information -/// \since Crypto++ 8.1 -struct ChaChaTLS_Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 12>, FixedRounds<20> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - /// \details This is the IETF's variant of Bernstein's ChaCha from RFC - /// 8439. IETF ChaCha is called ChaChaTLS in the Crypto++ library. It - /// is _slightly_ different from Bernstein's implementation. - static const char* StaticAlgorithmName() { - return "ChaChaTLS"; - } -}; - -/// \brief IETF ChaCha20 stream cipher implementation -/// \since Crypto++ 8.1 -class CRYPTOPP_NO_VTABLE ChaChaTLS_Policy : public AdditiveCipherConcretePolicy -{ -public: - virtual ~ChaChaTLS_Policy() {} - ChaChaTLS_Policy() : m_counter(0) {} - -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); - bool CipherIsRandomAccess() const {return true;} - void SeekToIteration(lword iterationCount); - unsigned int GetAlignment() const; - unsigned int GetOptimalBlockSize() const; - - std::string AlgorithmName() const; - std::string AlgorithmProvider() const; - - FixedSizeAlignedSecBlock m_state; - unsigned int m_counter; - CRYPTOPP_CONSTANT(ROUNDS = ChaChaTLS_Info::ROUNDS); - CRYPTOPP_CONSTANT(KEY = 16); // Index into m_state - CRYPTOPP_CONSTANT(CTR = 24); // Index into m_state -}; - -/// \brief IETF ChaCha20 stream cipher -/// \details This is the IETF's variant of Bernstein's ChaCha from RFC 8439. -/// IETF ChaCha is called ChaChaTLS in the Crypto++ library. It is -/// _slightly_ different from the Bernstein implementation. ChaCha-TLS -/// can be used for cipher suites -/// TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, -/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, and -/// TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. -/// \sa RFC 8439, ChaCha20 and -/// Poly1305 for IETF Protocols, How -/// to handle block counter wrap in IETF's ChaCha algorithm? and -/// Issue -/// 790, ChaChaTLS results when counter block wraps. -/// \since Crypto++ 8.1 -struct ChaChaTLS : public ChaChaTLS_Info, public SymmetricCipherDocumentation -{ - /// \brief ChaCha-TLS Encryption - typedef SymmetricCipherFinal >, ChaChaTLS_Info > Encryption; - /// \brief ChaCha-TLS Decryption - typedef Encryption Decryption; -}; - -////////////////////////////// IETF XChaCha20 draft ////////////////////////////// - -/// \brief IETF XChaCha20 stream cipher information -/// \since Crypto++ 8.1 -struct XChaCha20_Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 24> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - /// \details This is the IETF's XChaCha from draft-arciszewski-xchacha. - static const char* StaticAlgorithmName() { - return "XChaCha20"; - } -}; - -/// \brief IETF XChaCha20 stream cipher implementation -/// \since Crypto++ 8.1 -class CRYPTOPP_NO_VTABLE XChaCha20_Policy : public AdditiveCipherConcretePolicy -{ -public: - virtual ~XChaCha20_Policy() {} - XChaCha20_Policy() : m_counter(0), m_rounds(ROUNDS) {} - -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); - bool CipherIsRandomAccess() const {return false;} - void SeekToIteration(lword iterationCount); - unsigned int GetAlignment() const; - unsigned int GetOptimalBlockSize() const; - - std::string AlgorithmName() const; - std::string AlgorithmProvider() const; - - FixedSizeAlignedSecBlock m_state; - unsigned int m_counter, m_rounds; - CRYPTOPP_CONSTANT(ROUNDS = 20); // Default rounds - CRYPTOPP_CONSTANT(KEY = 16); // Index into m_state -}; - -/// \brief IETF XChaCha20 stream cipher -/// \details This is the IETF's XChaCha from draft-arciszewski-xchacha. -/// \sa XChaCha: -/// eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305 (rev. 03), How -/// to handle block counter wrap in IETF's ChaCha algorithm? and -/// Issue -/// 790, ChaCha20 results when counter block wraps. -/// \since Crypto++ 8.1 -struct XChaCha20 : public XChaCha20_Info, public SymmetricCipherDocumentation -{ - /// \brief XChaCha Encryption - typedef SymmetricCipherFinal >, XChaCha20_Info > Encryption; - /// \brief XChaCha Decryption - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_CHACHA_H diff --git a/third_party/cryptoppwin/include/cryptopp/chachapoly.h b/third_party/cryptoppwin/include/cryptopp/chachapoly.h deleted file mode 100644 index 27d4d593..00000000 --- a/third_party/cryptoppwin/include/cryptopp/chachapoly.h +++ /dev/null @@ -1,322 +0,0 @@ -// chachapoly.h - written and placed in the public domain by Jeffrey Walton -// RFC 8439, Section 2.8, AEAD Construction, http://tools.ietf.org/html/rfc8439 - -/// \file chachapoly.h -/// \brief IETF ChaCha20/Poly1305 AEAD scheme -/// \details ChaCha20Poly1305 is an authenticated encryption scheme that combines -/// ChaCha20TLS and Poly1305TLS. The scheme is defined in RFC 8439, section 2.8, -/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha20 -/// and Poly1305. -/// \sa RFC 8439, ChaCha20 and Poly1305 -/// for IETF Protocols. -/// \since Crypto++ 8.1 - -#ifndef CRYPTOPP_CHACHA_POLY1305_H -#define CRYPTOPP_CHACHA_POLY1305_H - -#include "cryptlib.h" -#include "authenc.h" -#include "chacha.h" -#include "poly1305.h" - -NAMESPACE_BEGIN(CryptoPP) - -////////////////////////////// IETF ChaChaTLS ////////////////////////////// - -/// \brief IETF ChaCha20Poly1305 cipher base implementation -/// \details Base implementation of the AuthenticatedSymmetricCipher interface -/// \since Crypto++ 8.1 -class ChaCha20Poly1305_Base : public AuthenticatedSymmetricCipherBase -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() - {return "ChaCha20/Poly1305";} - - virtual ~ChaCha20Poly1305_Base() {} - - // AuthenticatedSymmetricCipher - std::string AlgorithmName() const - {return std::string("ChaCha20/Poly1305");} - std::string AlgorithmProvider() const - {return GetSymmetricCipher().AlgorithmProvider();} - size_t MinKeyLength() const - {return 32;} - size_t MaxKeyLength() const - {return 32;} - size_t DefaultKeyLength() const - {return 32;} - size_t GetValidKeyLength(size_t n) const - {CRYPTOPP_UNUSED(n); return 32;} - bool IsValidKeyLength(size_t n) const - {return n==32;} - unsigned int OptimalDataAlignment() const - {return GetSymmetricCipher().OptimalDataAlignment();} - IV_Requirement IVRequirement() const - {return UNIQUE_IV;} - unsigned int IVSize() const - {return 12;} - unsigned int MinIVLength() const - {return 12;} - unsigned int MaxIVLength() const - {return 12;} - unsigned int DigestSize() const - {return 16;} - lword MaxHeaderLength() const - {return LWORD_MAX;} // 2^64-1 bytes - lword MaxMessageLength() const - {return W64LIT(274877906880);} // 2^38-1 blocks - lword MaxFooterLength() const - {return 0;} - - /// \brief Encrypts and calculates a MAC in one call - /// \param ciphertext the encryption buffer - /// \param mac the mac buffer - /// \param macSize the size of the MAC buffer, in bytes - /// \param iv the iv buffer - /// \param ivLength the size of the IV buffer, in bytes - /// \param aad the AAD buffer - /// \param aadLength the size of the AAD buffer, in bytes - /// \param message the message buffer - /// \param messageLength the size of the messagetext buffer, in bytes - /// \details EncryptAndAuthenticate() encrypts and generates the MAC in one call. The function - /// truncates the MAC if macSize < TagSize(). - virtual void EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *message, size_t messageLength); - - /// \brief Decrypts and verifies a MAC in one call - /// \param message the decryption buffer - /// \param mac the mac buffer - /// \param macSize the size of the MAC buffer, in bytes - /// \param iv the iv buffer - /// \param ivLength the size of the IV buffer, in bytes - /// \param aad the AAD buffer - /// \param aadLength the size of the AAD buffer, in bytes - /// \param ciphertext the cipher buffer - /// \param ciphertextLength the size of the ciphertext buffer, in bytes - /// \return true if the MAC is valid and the decoding succeeded, false otherwise - /// \details DecryptAndVerify() decrypts and verifies the MAC in one call. - /// message is a decryption buffer and should be at least as large as the ciphertext buffer. - /// \details The function returns true iff MAC is valid. DecryptAndVerify() assumes the MAC - /// is truncated if macLength < TagSize(). - virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *ciphertext, size_t ciphertextLength); - -protected: - // AuthenticatedSymmetricCipherBase - bool AuthenticationIsOnPlaintext() const {return false;} - unsigned int AuthenticationBlockSize() const {return 1;} - void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); - void Resync(const byte *iv, size_t len); - size_t AuthenticateBlocks(const byte *data, size_t len); - void AuthenticateLastHeaderBlock(); - void AuthenticateLastConfidentialBlock(); - void AuthenticateLastFooterBlock(byte *mac, size_t macSize); - - // See comments in chachapoly.cpp - void RekeyCipherAndMac(const byte *userKey, size_t userKeyLength, const NameValuePairs ¶ms); - - virtual const MessageAuthenticationCode & GetMAC() const = 0; - virtual MessageAuthenticationCode & AccessMAC() = 0; - -private: - SecByteBlock m_userKey; -}; - -/// \brief IETF ChaCha20Poly1305 cipher final implementation -/// \tparam T_IsEncryption flag indicating cipher direction -/// \details ChaCha20Poly1305 is an authenticated encryption scheme that combines -/// ChaCha20TLS and Poly1305TLS. The scheme is defined in RFC 8439, section 2.8, -/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha20 -/// and Poly1305. -/// \sa RFC 8439, ChaCha20 and Poly1305 -/// for IETF Protocols. -/// \since Crypto++ 8.1 -template -class ChaCha20Poly1305_Final : public ChaCha20Poly1305_Base -{ -public: - virtual ~ChaCha20Poly1305_Final() {} - -protected: - const SymmetricCipher & GetSymmetricCipher() - {return const_cast(this)->AccessSymmetricCipher();} - SymmetricCipher & AccessSymmetricCipher() - {return m_cipher;} - bool IsForwardTransformation() const - {return T_IsEncryption;} - - const MessageAuthenticationCode & GetMAC() const - {return const_cast(this)->AccessMAC();} - MessageAuthenticationCode & AccessMAC() - {return m_mac;} - -private: - ChaChaTLS::Encryption m_cipher; - Poly1305TLS m_mac; -}; - -/// \brief IETF ChaCha20/Poly1305 AEAD scheme -/// \details ChaCha20Poly1305 is an authenticated encryption scheme that combines -/// ChaCha20TLS and Poly1305TLS. The scheme is defined in RFC 8439, section 2.8, -/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha20 -/// and Poly1305. -/// \sa RFC 8439, ChaCha20 and Poly1305 -/// for IETF Protocols. -/// \since Crypto++ 8.1 -struct ChaCha20Poly1305 : public AuthenticatedSymmetricCipherDocumentation -{ - /// \brief ChaCha20Poly1305 encryption - typedef ChaCha20Poly1305_Final Encryption; - /// \brief ChaCha20Poly1305 decryption - typedef ChaCha20Poly1305_Final Decryption; -}; - -////////////////////////////// IETF XChaCha20 draft ////////////////////////////// - -/// \brief IETF XChaCha20Poly1305 cipher base implementation -/// \details Base implementation of the AuthenticatedSymmetricCipher interface -/// \since Crypto++ 8.1 -class XChaCha20Poly1305_Base : public AuthenticatedSymmetricCipherBase -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() - {return "XChaCha20/Poly1305";} - - virtual ~XChaCha20Poly1305_Base() {} - - // AuthenticatedSymmetricCipher - std::string AlgorithmName() const - {return std::string("XChaCha20/Poly1305");} - std::string AlgorithmProvider() const - {return GetSymmetricCipher().AlgorithmProvider();} - size_t MinKeyLength() const - {return 32;} - size_t MaxKeyLength() const - {return 32;} - size_t DefaultKeyLength() const - {return 32;} - size_t GetValidKeyLength(size_t n) const - {CRYPTOPP_UNUSED(n); return 32;} - bool IsValidKeyLength(size_t n) const - {return n==32;} - unsigned int OptimalDataAlignment() const - {return GetSymmetricCipher().OptimalDataAlignment();} - IV_Requirement IVRequirement() const - {return UNIQUE_IV;} - unsigned int IVSize() const - {return 24;} - unsigned int MinIVLength() const - {return 24;} - unsigned int MaxIVLength() const - {return 24;} - unsigned int DigestSize() const - {return 16;} - lword MaxHeaderLength() const - {return LWORD_MAX;} // 2^64-1 bytes - lword MaxMessageLength() const - {return W64LIT(274877906880);} // 2^38-1 blocks - lword MaxFooterLength() const - {return 0;} - - /// \brief Encrypts and calculates a MAC in one call - /// \param ciphertext the encryption buffer - /// \param mac the mac buffer - /// \param macSize the size of the MAC buffer, in bytes - /// \param iv the iv buffer - /// \param ivLength the size of the IV buffer, in bytes - /// \param aad the AAD buffer - /// \param aadLength the size of the AAD buffer, in bytes - /// \param message the message buffer - /// \param messageLength the size of the messagetext buffer, in bytes - /// \details EncryptAndAuthenticate() encrypts and generates the MAC in one call. The function - /// truncates the MAC if macSize < TagSize(). - virtual void EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *message, size_t messageLength); - - /// \brief Decrypts and verifies a MAC in one call - /// \param message the decryption buffer - /// \param mac the mac buffer - /// \param macSize the size of the MAC buffer, in bytes - /// \param iv the iv buffer - /// \param ivLength the size of the IV buffer, in bytes - /// \param aad the AAD buffer - /// \param aadLength the size of the AAD buffer, in bytes - /// \param ciphertext the cipher buffer - /// \param ciphertextLength the size of the ciphertext buffer, in bytes - /// \return true if the MAC is valid and the decoding succeeded, false otherwise - /// \details DecryptAndVerify() decrypts and verifies the MAC in one call. - /// message is a decryption buffer and should be at least as large as the ciphertext buffer. - /// \details The function returns true iff MAC is valid. DecryptAndVerify() assumes the MAC - /// is truncated if macLength < TagSize(). - virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *aad, size_t aadLength, const byte *ciphertext, size_t ciphertextLength); - -protected: - // AuthenticatedSymmetricCipherBase - bool AuthenticationIsOnPlaintext() const {return false;} - unsigned int AuthenticationBlockSize() const {return 1;} - void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); - void Resync(const byte *iv, size_t len); - size_t AuthenticateBlocks(const byte *data, size_t len); - void AuthenticateLastHeaderBlock(); - void AuthenticateLastConfidentialBlock(); - void AuthenticateLastFooterBlock(byte *mac, size_t macSize); - - // See comments in chachapoly.cpp - void RekeyCipherAndMac(const byte *userKey, size_t userKeyLength, const NameValuePairs ¶ms); - - virtual const MessageAuthenticationCode & GetMAC() const = 0; - virtual MessageAuthenticationCode & AccessMAC() = 0; - -private: - SecByteBlock m_userKey; -}; - -/// \brief IETF XChaCha20Poly1305 cipher final implementation -/// \tparam T_IsEncryption flag indicating cipher direction -/// \details XChaCha20Poly1305 is an authenticated encryption scheme that combines -/// XChaCha20 and Poly1305-TLS. The scheme is defined in RFC 8439, section 2.8, -/// AEAD_CHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha20 -/// and Poly1305. -/// \sa RFC 8439, ChaCha20 and Poly1305 -/// for IETF Protocols. -/// \since Crypto++ 8.1 -template -class XChaCha20Poly1305_Final : public XChaCha20Poly1305_Base -{ -public: - virtual ~XChaCha20Poly1305_Final() {} - -protected: - const SymmetricCipher & GetSymmetricCipher() - {return const_cast(this)->AccessSymmetricCipher();} - SymmetricCipher & AccessSymmetricCipher() - {return m_cipher;} - bool IsForwardTransformation() const - {return T_IsEncryption;} - - const MessageAuthenticationCode & GetMAC() const - {return const_cast(this)->AccessMAC();} - MessageAuthenticationCode & AccessMAC() - {return m_mac;} - -private: - XChaCha20::Encryption m_cipher; - Poly1305TLS m_mac; -}; - -/// \brief IETF XChaCha20/Poly1305 AEAD scheme -/// \details XChaCha20Poly1305 is an authenticated encryption scheme that combines -/// XChaCha20 and Poly1305-TLS. The scheme is defined in RFC 8439, section 2.8, -/// AEAD_XCHACHA20_POLY1305 construction, and uses the IETF versions of ChaCha20 -/// and Poly1305. -/// \sa RFC 8439, ChaCha20 and Poly1305 -/// for IETF Protocols. -/// \since Crypto++ 8.1 -struct XChaCha20Poly1305 : public AuthenticatedSymmetricCipherDocumentation -{ - /// \brief XChaCha20Poly1305 encryption - typedef XChaCha20Poly1305_Final Encryption; - /// \brief XChaCha20Poly1305 decryption - typedef XChaCha20Poly1305_Final Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_CHACHA_POLY1305_H diff --git a/third_party/cryptoppwin/include/cryptopp/cham.h b/third_party/cryptoppwin/include/cryptopp/cham.h deleted file mode 100644 index 2ce7b8e6..00000000 --- a/third_party/cryptoppwin/include/cryptopp/cham.h +++ /dev/null @@ -1,179 +0,0 @@ -// cham.h - written and placed in the public domain by Kim Sung Hee and Jeffrey Walton -// Based on "CHAM: A Family of Lightweight Block Ciphers for -// Resource-Constrained Devices" by Bonwook Koo, Dongyoung Roh, -// Hyeonjin Kim, Younghoon Jung, Dong-Geon Lee, and Daesung Kwon - -/// \file cham.h -/// \brief Classes for the CHAM block cipher -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_CHAM_H -#define CRYPTOPP_CHAM_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" -#include "algparam.h" - -#if (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86) -# define CRYPTOPP_CHAM128_ADVANCED_PROCESS_BLOCKS 1 -#endif - -// Yet another SunStudio/SunCC workaround. Failed self tests -// in SSE code paths on i386 for SunStudio 12.3 and below. -#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5120) -# undef CRYPTOPP_CHAM128_ADVANCED_PROCESS_BLOCKS -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief CHAM block cipher information -/// \since Crypto++ 8.0 -struct CHAM64_Info : public FixedBlockSize<8>, public FixedKeyLength<16> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize - return "CHAM-64"; - } -}; - -/// \brief CHAM block cipher information -/// \since Crypto++ 8.0 -struct CHAM128_Info : public FixedBlockSize<16>, public VariableKeyLength<16,16,32,16> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize - return "CHAM-128"; - } -}; - -/// \brief CHAM 64-bit block cipher -/// \details CHAM64 provides 64-bit block size. The valid key size is 128-bit. -/// \note Crypto++ provides a byte oriented implementation -/// \sa CHAM128, CHAM, -/// -/// CHAM: A Family of Lightweight Block Ciphers for Resource-Constrained Devices -/// \since Crypto++ 8.0 -class CRYPTOPP_NO_VTABLE CHAM64 : public CHAM64_Info, public BlockCipherDocumentation -{ -public: - /// \brief CHAM block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - - SecBlock m_rk; - mutable FixedSizeSecBlock m_x; - unsigned int m_kw; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief CHAM64 encryption - typedef BlockCipherFinal Encryption; - /// \brief CHAM64 decryption - typedef BlockCipherFinal Decryption; -}; - -/// \brief CHAM64 encryption -typedef CHAM64::Encryption CHAM64Encryption; -/// \brief CHAM64 decryption -typedef CHAM64::Decryption CHAM64Decryption; - -/// \brief CHAM 128-bit block cipher -/// \details CHAM128 provides 128-bit block size. The valid key size is 128-bit and 256-bit. -/// \note Crypto++ provides a byte oriented implementation -/// \sa CHAM64, CHAM, -/// -/// CHAM: A Family of Lightweight Block Ciphers for Resource-Constrained Devices -/// \since Crypto++ 8.0 -class CRYPTOPP_NO_VTABLE CHAM128 : public CHAM128_Info, public BlockCipherDocumentation -{ -public: - /// \brief CHAM block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - std::string AlgorithmProvider() const; - - SecBlock m_rk; - mutable FixedSizeSecBlock m_x; - unsigned int m_kw; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - -#if CRYPTOPP_CHAM128_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - -#if CRYPTOPP_CHAM128_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief CHAM128 encryption - typedef BlockCipherFinal Encryption; - /// \brief CHAM128 decryption - typedef BlockCipherFinal Decryption; -}; - -/// \brief CHAM128 encryption -typedef CHAM128::Encryption CHAM128Encryption; -/// \brief CHAM128 decryption -typedef CHAM128::Decryption CHAM128Decryption; - -NAMESPACE_END - -#endif // CRYPTOPP_CHAM_H diff --git a/third_party/cryptoppwin/include/cryptopp/channels.h b/third_party/cryptoppwin/include/cryptopp/channels.h deleted file mode 100644 index d7aecd2a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/channels.h +++ /dev/null @@ -1,142 +0,0 @@ -// channels.h - originally written and placed in the public domain by Wei Dai - -/// \file channels.h -/// \brief Classes for multiple named channels - -#ifndef CRYPTOPP_CHANNELS_H -#define CRYPTOPP_CHANNELS_H - -#include "cryptlib.h" -#include "simple.h" -#include "smartptr.h" -#include "stdcpp.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4355) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -#if 0 -/// Route input on default channel to different and/or multiple channels based on message sequence number -class MessageSwitch : public Sink -{ -public: - void AddDefaultRoute(BufferedTransformation &destination, const std::string &channel); - void AddRoute(unsigned int begin, unsigned int end, BufferedTransformation &destination, const std::string &channel); - - void Put(byte inByte); - void Put(const byte *inString, unsigned int length); - - void Flush(bool completeFlush, int propagation=-1); - void MessageEnd(int propagation=-1); - void PutMessageEnd(const byte *inString, unsigned int length, int propagation=-1); - void MessageSeriesEnd(int propagation=-1); - -private: - typedef std::pair Route; - struct RangeRoute - { - RangeRoute(unsigned int begin, unsigned int end, const Route &route) - : begin(begin), end(end), route(route) {} - bool operator<(const RangeRoute &rhs) const {return begin < rhs.begin;} - unsigned int begin, end; - Route route; - }; - - typedef std::list RouteList; - typedef std::list DefaultRouteList; - - RouteList m_routes; - DefaultRouteList m_defaultRoutes; - unsigned int m_nCurrentMessage; -}; -#endif - -class ChannelSwitchTypedefs -{ -public: - typedef std::pair Route; - typedef std::multimap RouteMap; - - typedef std::pair > DefaultRoute; - typedef std::list DefaultRouteList; - - // SunCC workaround: can't use const_iterator here - typedef RouteMap::iterator MapIterator; - typedef DefaultRouteList::iterator ListIterator; -}; - -class ChannelSwitch; - -class ChannelRouteIterator : public ChannelSwitchTypedefs -{ -public: - ChannelRouteIterator(ChannelSwitch &cs) : m_cs(cs), m_useDefault(false) {} - - void Reset(const std::string &channel); - bool End() const; - void Next(); - BufferedTransformation & Destination(); - const std::string & Channel(); - - ChannelSwitch& m_cs; - std::string m_channel; - bool m_useDefault; - MapIterator m_itMapCurrent, m_itMapEnd; - ListIterator m_itListCurrent, m_itListEnd; - -protected: - // Hide this to see if we break something... - ChannelRouteIterator(); -}; - -/// Route input to different and/or multiple channels based on channel ID -class CRYPTOPP_DLL ChannelSwitch : public Multichannel, public ChannelSwitchTypedefs -{ -public: - ChannelSwitch() : m_it(*this), m_blocked(false) {} - ChannelSwitch(BufferedTransformation &destination) : m_it(*this), m_blocked(false) - { - AddDefaultRoute(destination); - } - ChannelSwitch(BufferedTransformation &destination, const std::string &outChannel) : m_it(*this), m_blocked(false) - { - AddDefaultRoute(destination, outChannel); - } - - void IsolatedInitialize(const NameValuePairs ¶meters=g_nullNameValuePairs); - - size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking); - size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking); - - bool ChannelFlush(const std::string &channel, bool completeFlush, int propagation=-1, bool blocking=true); - bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true); - - byte * ChannelCreatePutSpace(const std::string &channel, size_t &size); - - void AddDefaultRoute(BufferedTransformation &destination); - void RemoveDefaultRoute(BufferedTransformation &destination); - void AddDefaultRoute(BufferedTransformation &destination, const std::string &outChannel); - void RemoveDefaultRoute(BufferedTransformation &destination, const std::string &outChannel); - void AddRoute(const std::string &inChannel, BufferedTransformation &destination, const std::string &outChannel); - void RemoveRoute(const std::string &inChannel, BufferedTransformation &destination, const std::string &outChannel); - -private: - RouteMap m_routeMap; - DefaultRouteList m_defaultRoutes; - - ChannelRouteIterator m_it; - bool m_blocked; - - friend class ChannelRouteIterator; -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/cmac.h b/third_party/cryptoppwin/include/cryptopp/cmac.h deleted file mode 100644 index 91d9f7f9..00000000 --- a/third_party/cryptoppwin/include/cryptopp/cmac.h +++ /dev/null @@ -1,76 +0,0 @@ -// cmac.h - originally written and placed in the public domain by Wei Dai - -/// \file cmac.h -/// \brief Classes for CMAC message authentication code -/// \since Crypto++ 5.6.0 - -#ifndef CRYPTOPP_CMAC_H -#define CRYPTOPP_CMAC_H - -#include "seckey.h" -#include "secblock.h" - -/// \brief Enable CMAC and wide block ciphers -/// \details CMAC is only defined for AES. The library can support wide -/// block ciphers like Kaylna and Threefish since we know the polynomials. -#ifndef CRYPTOPP_CMAC_WIDE_BLOCK_CIPHERS -# define CRYPTOPP_CMAC_WIDE_BLOCK_CIPHERS 1 -#endif // CRYPTOPP_CMAC_WIDE_BLOCK_CIPHERS - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief CMAC base implementation -/// \since Crypto++ 5.6.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CMAC_Base : public MessageAuthenticationCode -{ -public: - - virtual ~CMAC_Base() {} - CMAC_Base() : m_counter(0) {} - - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *mac, size_t size); - unsigned int DigestSize() const {return GetCipher().BlockSize();} - unsigned int OptimalBlockSize() const {return GetCipher().BlockSize();} - unsigned int OptimalDataAlignment() const {return GetCipher().OptimalDataAlignment();} - std::string AlgorithmProvider() const {return GetCipher().AlgorithmProvider();} - -protected: - friend class EAX_Base; - - const BlockCipher & GetCipher() const {return const_cast(this)->AccessCipher();} - virtual BlockCipher & AccessCipher() =0; - - void ProcessBuf(); - SecByteBlock m_reg; - unsigned int m_counter; -}; - -/// \brief CMAC message authentication code -/// \tparam T block cipher -/// \details Template parameter T should be a class derived from BlockCipherDocumentation, for example AES, with a block size of 8, 16, or 32. -/// \sa CMAC -/// \since Crypto++ 5.6.0 -template -class CMAC : public MessageAuthenticationCodeImpl >, public SameKeyLengthAs -{ -public: - /// \brief Construct a CMAC - CMAC() {} - /// \brief Construct a CMAC - /// \param key the MAC key - /// \param length the key size, in bytes - CMAC(const byte *key, size_t length=SameKeyLengthAs::DEFAULT_KEYLENGTH) - {this->SetKey(key, length);} - - static std::string StaticAlgorithmName() {return std::string("CMAC(") + T::StaticAlgorithmName() + ")";} - -private: - BlockCipher & AccessCipher() {return m_cipher;} - typename T::Encryption m_cipher; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/config.h b/third_party/cryptoppwin/include/cryptopp/config.h deleted file mode 100644 index e96b1127..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config.h +++ /dev/null @@ -1,33 +0,0 @@ -// config.h - originally written and placed in the public domain by Wei Dai - -/// \file config.h -/// \brief Library configuration file -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -/// \file config.h -/// \brief Library configuration file - -#ifndef CRYPTOPP_CONFIG_H -#define CRYPTOPP_CONFIG_H - -#include "config_align.h" -#include "config_asm.h" -#include "config_cpu.h" -#include "config_cxx.h" -#include "config_dll.h" -#include "config_int.h" -#include "config_misc.h" -#include "config_ns.h" -#include "config_os.h" -#include "config_ver.h" - -#endif // CRYPTOPP_CONFIG_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_align.h b/third_party/cryptoppwin/include/cryptopp/config_align.h deleted file mode 100644 index d6d85e75..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_align.h +++ /dev/null @@ -1,72 +0,0 @@ -// config_align.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_align.h -/// \brief Library configuration file -/// \details config_align.h provides defines for aligned memory -/// allocations. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_align.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_ALIGN_H -#define CRYPTOPP_CONFIG_ALIGN_H - -#include "config_asm.h" // CRYPTOPP_DISABLE_ASM -#include "config_cpu.h" // X86, X32, X64, ARM32, ARM64, etc -#include "config_cxx.h" // CRYPTOPP_CXX11_ALIGNAS -#include "config_ver.h" // Compiler versions - -// Nearly all Intel's and AMD's have SSE. Enable it independent of SSE ASM and intrinsics. -// ARM NEON and ARMv8 ASIMD only need natural alignment of an element in the vector. -// Altivec through POWER7 need vector alignment. POWER8 and POWER9 relax the requirement. -#if defined(CRYPTOPP_DISABLE_ASM) - #define CRYPTOPP_BOOL_ALIGN16 0 -#elif (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || \ - CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) - #define CRYPTOPP_BOOL_ALIGN16 1 -#else - #define CRYPTOPP_BOOL_ALIGN16 0 -#endif - -// How to allocate 16-byte aligned memory (for SSE2) -// posix_memalign see https://forum.kde.org/viewtopic.php?p=66274 -#if defined(CRYPTOPP_MSC_VERSION) - #define CRYPTOPP_MM_MALLOC_AVAILABLE -#elif defined(__linux__) || defined(__sun__) || defined(__CYGWIN__) - #define CRYPTOPP_MEMALIGN_AVAILABLE -#elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) - #define CRYPTOPP_MALLOC_ALIGNMENT_IS_16 -#elif (defined(_GNU_SOURCE) || ((_XOPEN_SOURCE + 0) >= 600)) && (_POSIX_ADVISORY_INFO > 0) - #define CRYPTOPP_POSIX_MEMALIGN_AVAILABLE -#else - #define CRYPTOPP_NO_ALIGNED_ALLOC -#endif - -// Sun Studio Express 3 (December 2006) provides GCC-style attributes. -// IBM XL C/C++ alignment modifier per Optimization Guide, pp. 19-20. -// __IBM_ATTRIBUTES per XLC 12.1 AIX Compiler Manual, p. 473. -// CRYPTOPP_ALIGN_DATA may not be reliable on AIX. -#if defined(CRYPTOPP_CXX11_ALIGNAS) - #define CRYPTOPP_ALIGN_DATA(x) alignas(x) -#elif defined(CRYPTOPP_MSC_VERSION) - #define CRYPTOPP_ALIGN_DATA(x) __declspec(align(x)) -#elif defined(__GNUC__) || defined(__clang__) || (__SUNPRO_CC >= 0x5100) - #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) -#elif defined(__xlc__) || defined(__xlC__) - #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x))) -#else - #define CRYPTOPP_ALIGN_DATA(x) -#endif - -#endif // CRYPTOPP_CONFIG_ALIGN_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_asm.h b/third_party/cryptoppwin/include/cryptopp/config_asm.h deleted file mode 100644 index edfbdefb..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_asm.h +++ /dev/null @@ -1,492 +0,0 @@ -// config_asm.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_asm.h -/// \brief Library configuration file -/// \details config_asm.h provides defines for instruction set -/// architectures -/// and inline assembly. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_asm.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_ASM_H -#define CRYPTOPP_CONFIG_ASM_H - -#include "config_os.h" -#include "config_cpu.h" -#include "config_ver.h" - -// Define this to disable ASM, intrinsics and built-ins. The library code will -// not explicitly include SSE2 (and above), NEON, Aarch32, Aarch64, or Altivec -// (and above). Note the compiler may use higher ISAs depending on compiler -// options, but the library will not explicitly use the ISAs. When disabling ASM, -// it is best to do it from config_asm.h to ensure the library and all programs -// share the setting. -// #define CRYPTOPP_DISABLE_ASM 1 - -// https://github.com/weidai11/cryptopp/issues/719 -#if defined(__native_client__) -# undef CRYPTOPP_DISABLE_ASM -# define CRYPTOPP_DISABLE_ASM 1 -#endif - -// Some Clang and SunCC cannot handle mixed asm with positional arguments, -// where the body is Intel style with no prefix and the templates are -// AT&T style. Define this if the Makefile misdetects the configuration. -// Also see https://bugs.llvm.org/show_bug.cgi?id=39895 . -// #define CRYPTOPP_DISABLE_MIXED_ASM 1 - -#if defined(__clang__) || (defined(__APPLE__) && defined(__GNUC__)) || defined(__SUNPRO_CC) -# undef CRYPTOPP_DISABLE_MIXED_ASM -# define CRYPTOPP_DISABLE_MIXED_ASM 1 -#endif - -// Define this if you need to disable Android advanced ISAs. -// The problem is, Android-mk does not allow us to specify an -// ISA option, like -maes or -march=armv8-a+crypto for AES. -// Lack of an option results in a compile failure. To avoid -// the compile failure, set this define. Also see -// https://github.com/weidai11/cryptopp/issues/1015 -// CRYPTOPP_DISABLE_ANDROID_ADVANCED_ISA 1 - -// ***************** IA32 CPU features ******************** - -#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) - -// Apple Clang prior to 5.0 cannot handle SSE2 -#if defined(CRYPTOPP_APPLE_CLANG_VERSION) && (CRYPTOPP_APPLE_CLANG_VERSION < 50000) -# define CRYPTOPP_DISABLE_ASM 1 -#endif - -// Sun Studio 12.1 provides GCC inline assembly -// http://blogs.oracle.com/x86be/entry/gcc_style_asm_inlining_support -#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5100) -# define CRYPTOPP_DISABLE_ASM 1 -#endif - -// Guard everything in CRYPTOPP_DISABLE_ASM -#if !defined(CRYPTOPP_DISABLE_ASM) - -#if (defined(_MSC_VER) && defined(_M_IX86)) || ((defined(__GNUC__) && (defined(__i386__)) || defined(__x86_64__))) - // C++Builder 2010 does not allow "call label" where label is defined within inline assembly - #define CRYPTOPP_X86_ASM_AVAILABLE 1 - - #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(_MSC_VER) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__)) - #define CRYPTOPP_SSE2_ASM_AVAILABLE 1 - #endif - - #if !defined(CRYPTOPP_DISABLE_SSSE3) && (_MSC_VER >= 1500 || CRYPTOPP_GCC_VERSION >= 40300 || defined(__SSSE3__)) - #define CRYPTOPP_SSSE3_ASM_AVAILABLE 1 - #endif -#endif - -#if defined(_MSC_VER) && defined(_M_X64) - #define CRYPTOPP_X64_MASM_AVAILABLE 1 -#endif - -#if defined(__GNUC__) && defined(__x86_64__) - #define CRYPTOPP_X64_ASM_AVAILABLE 1 -#endif - -// 32-bit SunCC does not enable SSE2 by default. -#if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(CRYPTOPP_MSC_VERSION) || CRYPTOPP_GCC_VERSION >= 30300 || defined(__SSE2__) || (__SUNPRO_CC >= 0x5100)) - #define CRYPTOPP_SSE2_INTRIN_AVAILABLE 1 -#endif - -#if !defined(CRYPTOPP_DISABLE_SSSE3) -# if defined(__SSSE3__) || (CRYPTOPP_MSC_VERSION >= 1500) || \ - (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) - #define CRYPTOPP_SSSE3_AVAILABLE 1 -# endif -#endif - -// Intrinsics available in GCC 4.3 (http://gcc.gnu.org/gcc-4.3/changes.html) and -// MSVC 2008 (http://msdn.microsoft.com/en-us/library/bb892950%28v=vs.90%29.aspx) -// SunCC could generate SSE4 at 12.1, but the intrinsics are missing until 12.4. -#if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ - (defined(__SSE4_1__) || (CRYPTOPP_MSC_VERSION >= 1500) || \ - (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || (__SUNPRO_CC >= 0x5110) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) - #define CRYPTOPP_SSE41_AVAILABLE 1 -#endif - -#if !defined(CRYPTOPP_DISABLE_SSE4) && defined(CRYPTOPP_SSSE3_AVAILABLE) && \ - (defined(__SSE4_2__) || (CRYPTOPP_MSC_VERSION >= 1500) || (__SUNPRO_CC >= 0x5110) || \ - (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1000) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 20300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000)) - #define CRYPTOPP_SSE42_AVAILABLE 1 -#endif - -// Couple to CRYPTOPP_DISABLE_AESNI, but use CRYPTOPP_CLMUL_AVAILABLE so we can selectively -// disable for misbehaving platforms and compilers, like Solaris or some Clang. -#if defined(CRYPTOPP_DISABLE_AESNI) - #define CRYPTOPP_DISABLE_CLMUL 1 -#endif - -// Requires Sun Studio 12.3 (SunCC 0x5120) in theory. -#if !defined(CRYPTOPP_DISABLE_CLMUL) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ - (defined(__PCLMUL__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ - (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) - #define CRYPTOPP_CLMUL_AVAILABLE 1 -#endif - -// Requires Sun Studio 12.3 (SunCC 0x5120) -#if !defined(CRYPTOPP_DISABLE_AESNI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ - (defined(__AES__) || (_MSC_FULL_VER >= 150030729) || (__SUNPRO_CC >= 0x5120) || \ - (CRYPTOPP_GCC_VERSION >= 40300) || (__INTEL_COMPILER >= 1110) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30200) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) - #define CRYPTOPP_AESNI_AVAILABLE 1 -#endif - -// Requires Binutils 2.24 -#if !defined(CRYPTOPP_DISABLE_AVX) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ - (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ - (CRYPTOPP_GCC_VERSION >= 40700) || (__INTEL_COMPILER >= 1400) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) -#define CRYPTOPP_AVX_AVAILABLE 1 -#endif - -// Requires Binutils 2.24 -#if !defined(CRYPTOPP_DISABLE_AVX2) && defined(CRYPTOPP_AVX_AVAILABLE) && \ - (defined(__AVX2__) || (CRYPTOPP_MSC_VERSION >= 1800) || (__SUNPRO_CC >= 0x5130) || \ - (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1400) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40600)) -#define CRYPTOPP_AVX2_AVAILABLE 1 -#endif - -// Guessing at SHA for SunCC. Its not in Sun Studio 12.6. Also see -// http://stackoverflow.com/questions/45872180/which-xarch-for-sha-extensions-on-solaris -// Guessing for Intel ICPC. A slide deck says SHA support is in version 16.0-beta -// https://www.alcf.anl.gov/files/ken_intel_compiler_optimization.pdf -#if !defined(CRYPTOPP_DISABLE_SHANI) && defined(CRYPTOPP_SSE42_AVAILABLE) && \ - (defined(__SHA__) || (CRYPTOPP_MSC_VERSION >= 1900) || (__SUNPRO_CC >= 0x5160) || \ - (CRYPTOPP_GCC_VERSION >= 40900) || (__INTEL_COMPILER >= 1600) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30400) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50100)) - #define CRYPTOPP_SHANI_AVAILABLE 1 -#endif - -// RDRAND uses byte codes. All we need is x86 ASM for it. -// However tie it to AES-NI since SecureKey was available with it. -#if !defined(CRYPTOPP_DISABLE_RDRAND) && defined(CRYPTOPP_AESNI_AVAILABLE) - #define CRYPTOPP_RDRAND_AVAILABLE 1 -#endif - -// RDSEED uses byte codes. All we need is x86 ASM for it. -// However tie it to AES-NI since SecureKey was available with it. -#if !defined(CRYPTOPP_DISABLE_RDSEED) && defined(CRYPTOPP_AESNI_AVAILABLE) - #define CRYPTOPP_RDSEED_AVAILABLE 1 -#endif - -// PadlockRNG uses byte codes. All we need is x86 ASM for it. -#if !defined(CRYPTOPP_DISABLE_PADLOCK) && \ - !(defined(__ANDROID__) || defined(ANDROID) || defined(__APPLE__)) && \ - defined(CRYPTOPP_X86_ASM_AVAILABLE) - #define CRYPTOPP_PADLOCK_AVAILABLE 1 - #define CRYPTOPP_PADLOCK_RNG_AVAILABLE 1 - #define CRYPTOPP_PADLOCK_ACE_AVAILABLE 1 - #define CRYPTOPP_PADLOCK_ACE2_AVAILABLE 1 - #define CRYPTOPP_PADLOCK_PHE_AVAILABLE 1 - #define CRYPTOPP_PADLOCK_PMM_AVAILABLE 1 -#endif - -// Fixup for SunCC 12.1-12.4. Bad code generation in AES_Encrypt and friends. -#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5130) -# undef CRYPTOPP_AESNI_AVAILABLE -#endif - -// Fixup for SunCC 12.1-12.6. Compiler crash on GCM_Reduce_CLMUL. -// http://github.com/weidai11/cryptopp/issues/226 -#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5150) -# undef CRYPTOPP_CLMUL_AVAILABLE -#endif - -// Clang intrinsic casts, http://bugs.llvm.org/show_bug.cgi?id=20670 -#define M128_CAST(x) ((__m128i *)(void *)(x)) -#define CONST_M128_CAST(x) ((const __m128i *)(const void *)(x)) -#define M256_CAST(x) ((__m256i *)(void *)(x)) -#define CONST_M256_CAST(x) ((const __m256i *)(const void *)(x)) - -#endif // CRYPTOPP_DISABLE_ASM - -#endif // X86, X32, X64 - -// ***************** ARM CPU features ******************** - -#if (CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8) - -// We don't have an ARM big endian test rig. Disable -// ARM-BE ASM and instrinsics until we can test it. -#if (CRYPTOPP_BIG_ENDIAN) -# define CRYPTOPP_DISABLE_ASM 1 -#endif - -// Guard everything in CRYPTOPP_DISABLE_ASM -#if !defined(CRYPTOPP_DISABLE_ASM) - -// Requires ACLE 1.0. -mfpu=neon or above must be present -// Requires GCC 4.3, Clang 2.8 or Visual Studio 2012 -// Do not use APPLE_CLANG_VERSION; use __ARM_FEATURE_XXX instead. -#if !defined(CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_NEON) -# if defined(__arm__) || defined(__ARM_NEON) || defined(__ARM_FEATURE_NEON) || defined(_M_ARM) -# if (CRYPTOPP_GCC_VERSION >= 40300) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20800) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 30200) || (CRYPTOPP_MSC_VERSION >= 1700) -# define CRYPTOPP_ARM_NEON_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// ARMv8 and ASIMD. -march=armv8-a or above must be present -// Requires GCC 4.8, Clang 3.3 or Visual Studio 2017 -// Do not use APPLE_CLANG_VERSION; use __ARM_FEATURE_XXX instead. -#if !defined(CRYPTOPP_ARM_ASIMD_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_ASIMD) -# if defined(__aarch32__) || defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64) -# if defined(__ARM_NEON) || defined(__ARM_ASIMD) || defined(__ARM_FEATURE_NEON) || defined(__ARM_FEATURE_ASIMD) || \ - (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) || (CRYPTOPP_MSC_VERSION >= 1916) -# define CRYPTOPP_ARM_NEON_AVAILABLE 1 -# define CRYPTOPP_ARM_ASIMD_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// ARMv8 and ASIMD. -march=armv8-a+crc or above must be present -// Requires GCC 4.8, Clang 3.3 or Visual Studio 2017 -#if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_CRC32) -# if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) -# if defined(__ARM_FEATURE_CRC32) || (CRYPTOPP_GCC_VERSION >= 40800) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300) || \ - (CRYPTOPP_MSC_VERSION >= 1916) -# define CRYPTOPP_ARM_CRC32_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// ARMv8 and AES. -march=armv8-a+crypto or above must be present -// Requires GCC 4.8, Clang 3.3 or Visual Studio 2017 -#if !defined(CRYPTOPP_ARM_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_AES) -# if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) -# if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300) || \ - (CRYPTOPP_MSC_VERSION >= 1916) -# define CRYPTOPP_ARM_AES_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// ARMv8 and PMULL. -march=armv8-a+crypto or above must be present -// Requires GCC 4.8, Clang 3.3 or Visual Studio 2017 -#if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_PMULL) -# if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) -# if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300) || \ - (CRYPTOPP_MSC_VERSION >= 1916) -# define CRYPTOPP_ARM_PMULL_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// ARMv8 and SHA-1, SHA-256. -march=armv8-a+crypto or above must be present -// Requires GCC 4.8, Clang 3.3 or Visual Studio 2017 -#if !defined(CRYPTOPP_ARM_SHA_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_SHA) -# if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) -# if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_GCC_VERSION >= 40800) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300) || \ - (CRYPTOPP_MSC_VERSION >= 1916) -# define CRYPTOPP_ARM_SHA1_AVAILABLE 1 -# define CRYPTOPP_ARM_SHA2_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// Buggy Microsoft compiler, https://github.com/weidai11/cryptopp/issues/1096 -#if defined(CRYPTOPP_MSC_VERSION) -# undef CRYPTOPP_ARM_SHA1_AVAILABLE -# undef CRYPTOPP_ARM_SHA2_AVAILABLE -#endif - -// ARMv8 and SHA-512, SHA-3. -march=armv8.2-a+crypto or above must be present -// Requires GCC 8.0, Clang 11.0, Apple Clang 12.0 or Visual Studio 20?? -#if !defined(CRYPTOPP_ARM_SHA3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_SHA) -# if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) -# if defined(__ARM_FEATURE_SHA3) || (CRYPTOPP_GCC_VERSION >= 80000) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 120000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 110000) -# define CRYPTOPP_ARM_SHA512_AVAILABLE 1 -# define CRYPTOPP_ARM_SHA3_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// ARMv8 and SM3, SM4. -march=armv8.2-a+crypto or above must be present -// Requires GCC 8.0, Clang ??? or Visual Studio 20?? -// Do not use APPLE_CLANG_VERSION; use __ARM_FEATURE_XXX instead. -#if !defined(CRYPTOPP_ARM_SM3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_SM3) -# if defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) -# if defined(__ARM_FEATURE_SM3) || (CRYPTOPP_GCC_VERSION >= 80000) -# define CRYPTOPP_ARM_SM3_AVAILABLE 1 -# define CRYPTOPP_ARM_SM4_AVAILABLE 1 -# endif // Compilers -# endif // Platforms -#endif - -// Limit the include. -#if !defined(CRYPTOPP_ARM_NEON_HEADER) -# if defined(CRYPTOPP_ARM_NEON_AVAILABLE) || defined (CRYPTOPP_ARM_ASIMD_AVAILABLE) -# if !defined(_M_ARM64) -# define CRYPTOPP_ARM_NEON_HEADER 1 -# endif -# endif -#endif - -// Limit the include. -#if !defined(CRYPTOPP_ARM_ACLE_HEADER) -# if defined(__aarch32__) || defined(__aarch64__) || (__ARM_ARCH >= 8) || defined(__ARM_ACLE) -# define CRYPTOPP_ARM_ACLE_HEADER 1 -# endif -#endif - -// Apple M1 hack. Xcode cross-compiles for iOS lack -// arm_acle.h. Apple M1 needs arm_acle.h. The problem -// in practice is, we can't get CRYPTOPP_ARM_ACLE_HEADER -// quite right based on ARM preprocessor macros. -#if defined(__APPLE__) && !defined(__ARM_FEATURE_CRC32) -# undef CRYPTOPP_ARM_ACLE_HEADER -#endif - -// Cryptogams offers an ARM asm implementations for AES and SHA. Crypto++ does -// not provide an asm implementation. The Cryptogams AES implementation is -// about 50% faster than C/C++, and SHA implementation is about 30% faster -// than C/C++. Define this to use the Cryptogams AES and SHA implementations -// on GNU Linux systems. When defined, Crypto++ will use aes_armv4.S, -// sha1_armv4.S and sha256_armv4.S. https://www.cryptopp.com/wiki/Cryptogams. -#if !defined(CRYPTOPP_DISABLE_ARM_NEON) -# if defined(__arm__) && defined(__linux__) -# if defined(__GNUC__) || defined(__clang__) -# define CRYPTOGAMS_ARM_AES 1 -# define CRYPTOGAMS_ARM_SHA1 1 -# define CRYPTOGAMS_ARM_SHA256 1 -# define CRYPTOGAMS_ARM_SHA512 1 -# endif -# endif -#endif - -// We are still having trouble with integrating Cryptogams AES. Ugh... -// https://github.com/weidai11/cryptopp/issues/1236 -#undef CRYPTOGAMS_ARM_AES - -// Clang intrinsic casts, http://bugs.llvm.org/show_bug.cgi?id=20670 -#define UINT64_CAST(x) ((uint64_t *)(void *)(x)) -#define CONST_UINT64_CAST(x) ((const uint64_t *)(const void *)(x)) - -#endif // CRYPTOPP_DISABLE_ASM - -#endif // ARM32, ARM64 - -// ***************** AltiVec and Power8 ******************** - -#if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) - -// Guard everything in CRYPTOPP_DISABLE_ASM -#if !defined(CRYPTOPP_DISABLE_ASM) && !defined(CRYPTOPP_DISABLE_ALTIVEC) - -// An old Apple G5 with GCC 4.01 has AltiVec, but its only Power4 or so. -#if !defined(CRYPTOPP_ALTIVEC_AVAILABLE) -# if defined(_ARCH_PWR4) || defined(__ALTIVEC__) || \ - (CRYPTOPP_XLC_VERSION >= 100000) || (CRYPTOPP_GCC_VERSION >= 40001) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) -# define CRYPTOPP_ALTIVEC_AVAILABLE 1 -# endif -#endif - -#if defined(CRYPTOPP_ALTIVEC_AVAILABLE) - -// We need Power7 for unaligned loads and stores -#if !defined(CRYPTOPP_POWER7_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER7) -# if defined(_ARCH_PWR7) || (CRYPTOPP_XLC_VERSION >= 100000) || \ - (CRYPTOPP_GCC_VERSION >= 40100) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) -# define CRYPTOPP_POWER7_AVAILABLE 1 -# endif -#endif - -#if defined(CRYPTOPP_POWER7_AVAILABLE) - -// We need Power8 for in-core crypto and 64-bit vector types -#if !defined(CRYPTOPP_POWER8_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8) -# if defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ - (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 70000) -# define CRYPTOPP_POWER8_AVAILABLE 1 -# endif -#endif - -#if !defined(CRYPTOPP_POWER8_AES_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER8_AES) && defined(CRYPTOPP_POWER8_AVAILABLE) -# if defined(__CRYPTO__) || defined(_ARCH_PWR8) || (CRYPTOPP_XLC_VERSION >= 130000) || \ - (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 70000) -//# define CRYPTOPP_POWER8_CRC_AVAILABLE 1 -# define CRYPTOPP_POWER8_AES_AVAILABLE 1 -# define CRYPTOPP_POWER8_VMULL_AVAILABLE 1 -# define CRYPTOPP_POWER8_SHA_AVAILABLE 1 -# endif -#endif - -#if defined(CRYPTOPP_POWER8_AVAILABLE) - -// Power9 for random numbers -#if !defined(CRYPTOPP_POWER9_AVAILABLE) && !defined(CRYPTOPP_DISABLE_POWER9) -# if defined(_ARCH_PWR9) || (CRYPTOPP_XLC_VERSION >= 130200) || \ - (CRYPTOPP_GCC_VERSION >= 70000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 80000) -# define CRYPTOPP_POWER9_AVAILABLE 1 -# endif -#endif - -#endif // CRYPTOPP_POWER8_AVAILABLE -#endif // CRYPTOPP_POWER7_AVAILABLE -#endif // CRYPTOPP_ALTIVEC_AVAILABLE -#endif // CRYPTOPP_DISABLE_ASM -#endif // PPC32, PPC64 - -// https://github.com/weidai11/cryptopp/issues/1015 -#if defined(CRYPTOPP_DISABLE_ANDROID_ADVANCED_ISA) -# if defined(__ANDROID__) || defined(ANDROID) -# if (CRYPTOPP_BOOL_X86) -# undef CRYPTOPP_SSE41_AVAILABLE -# undef CRYPTOPP_SSE42_AVAILABLE -# undef CRYPTOPP_CLMUL_AVAILABLE -# undef CRYPTOPP_AESNI_AVAILABLE -# undef CRYPTOPP_SHANI_AVAILABLE -# undef CRYPTOPP_RDRAND_AVAILABLE -# undef CRYPTOPP_RDSEED_AVAILABLE -# undef CRYPTOPP_AVX_AVAILABLE -# undef CRYPTOPP_AVX2_AVAILABLE -# endif -# if (CRYPTOPP_BOOL_X64) -# undef CRYPTOPP_CLMUL_AVAILABLE -# undef CRYPTOPP_AESNI_AVAILABLE -# undef CRYPTOPP_SHANI_AVAILABLE -# undef CRYPTOPP_RDRAND_AVAILABLE -# undef CRYPTOPP_RDSEED_AVAILABLE -# undef CRYPTOPP_AVX_AVAILABLE -# undef CRYPTOPP_AVX2_AVAILABLE -# endif -# if (CRYPTOPP_BOOL_ARMV8) -# undef CRYPTOPP_ARM_CRC32_AVAILABLE -# undef CRYPTOPP_ARM_PMULL_AVAILABLE -# undef CRYPTOPP_ARM_AES_AVAILABLE -# undef CRYPTOPP_ARM_SHA1_AVAILABLE -# undef CRYPTOPP_ARM_SHA2_AVAILABLE -# endif -# endif // ANDROID -#endif // CRYPTOPP_DISABLE_ANDROID_ADVANCED_ISA - -#endif // CRYPTOPP_CONFIG_ASM_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_cpu.h b/third_party/cryptoppwin/include/cryptopp/config_cpu.h deleted file mode 100644 index 15f694e7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_cpu.h +++ /dev/null @@ -1,212 +0,0 @@ -// config_cpu.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_cpu.h -/// \brief Library configuration file -/// \details config_cpu.h provides defines for the cpu and machine -/// architecture. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_cpu.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki, -/// Sourceforge -/// Pre-defined Compiler Macros -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_CPU_H -#define CRYPTOPP_CONFIG_CPU_H - -#include "config_ver.h" - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief 32-bit x32 platform - /// \details CRYPTOPP_BOOL_X32 is defined to 1 when building the library - /// for a 32-bit x32 platform. Otherwise, the macro is not defined. - /// \details x32 is sometimes referred to as x86_32. x32 is the ILP32 data - /// model on a 64-bit cpu. Integers, longs and pointers are 32-bit but the - /// program runs on a 64-bit cpu. - /// \details The significance of x32 is, inline assembly must operate on - /// 64-bit registers, not 32-bit registers. That means, for example, - /// function prologues and epilogues must push and pop RSP, not ESP. - /// \note: Clang defines __ILP32__ on any 32-bit platform. Therefore, - /// CRYPTOPP_BOOL_X32 depends upon both __ILP32__ and __x86_64__. - /// \sa Debian X32 Port, - /// Gentoo - /// Multilib Concepts - #define CRYPTOPP_BOOL_X32 ... - /// \brief 32-bit x86 platform - /// \details CRYPTOPP_BOOL_X64 is defined to 1 when building the library - /// for a 64-bit x64 platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_X64 ... - /// \brief 32-bit x86 platform - /// \details CRYPTOPP_BOOL_X86 is defined to 1 when building the library - /// for a 32-bit x86 platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_X86 ... -#elif (defined(__ILP32__) || defined(_ILP32)) && defined(__x86_64__) - #define CRYPTOPP_BOOL_X32 1 -#elif (defined(_M_X64) || defined(__x86_64__)) - #define CRYPTOPP_BOOL_X64 1 -#elif (defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(_X86_) || defined(__I86__) || defined(__INTEL__)) - #define CRYPTOPP_BOOL_X86 1 -#endif - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief ARMv8 platform - /// \details CRYPTOPP_BOOL_ARMV8 is defined to 1 when building the library - /// for an ARMv8 platform. Otherwise, the macro is not defined. - /// \details ARMv8 includes both Aarch32 and Aarch64. Aarch32 is a 32-bit - /// execution environment on Aarch64. - #define CRYPTOPP_BOOL_ARMV8 ... - /// \brief 64-bit ARM platform - /// \details CRYPTOPP_BOOL_ARM64 is defined to 1 when building the library - /// for a 64-bit x64 platform. Otherwise, the macro is not defined. - /// \details Currently the macro indicates an ARM 64-bit architecture. - #define CRYPTOPP_BOOL_ARM64 ... - /// \brief 32-bit ARM platform - /// \details CRYPTOPP_BOOL_ARM32 is defined to 1 when building the library - /// for a 32-bit ARM platform. Otherwise, the macro is not defined. - /// \details Currently the macro indicates an ARM A-32 architecture. - #define CRYPTOPP_BOOL_ARM32 ... -#elif defined(__arm64__) || defined(__aarch32__) || defined(__aarch64__) || defined(_M_ARM64) - // Microsoft added ARM64 define December 2017. - #define CRYPTOPP_BOOL_ARMV8 1 -#endif -#if defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64) - #define CRYPTOPP_BOOL_ARM64 1 -#elif defined(__arm__) || defined(_M_ARM) - #define CRYPTOPP_BOOL_ARM32 1 -#endif - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief 64-bit PowerPC platform - /// \details CRYPTOPP_BOOL_PPC64 is defined to 1 when building the library - /// for a 64-bit PowerPC platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_PPC64 ... - /// \brief 32-bit PowerPC platform - /// \details CRYPTOPP_BOOL_PPC32 is defined to 1 when building the library - /// for a 32-bit PowerPC platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_PPC32 ... -#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__PPC64__) || defined(_ARCH_PPC64) - #define CRYPTOPP_BOOL_PPC64 1 -#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC) - #define CRYPTOPP_BOOL_PPC32 1 -#endif - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief 64-bit MIPS platform - /// \details CRYPTOPP_BOOL_MIPS64 is defined to 1 when building the library - /// for a 64-bit MIPS platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_MIPS64 ... - /// \brief 64-bit MIPS platform - /// \details CRYPTOPP_BOOL_MIPS32 is defined to 1 when building the library - /// for a 32-bit MIPS platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_MIPS32 ... -#elif defined(__mips64__) - #define CRYPTOPP_BOOL_MIPS64 1 -#elif defined(__mips__) - #define CRYPTOPP_BOOL_MIPS32 1 -#endif - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief 64-bit SPARC platform - /// \details CRYPTOPP_BOOL_SPARC64 is defined to 1 when building the library - /// for a 64-bit SPARC platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_SPARC64 ... - /// \brief 32-bit SPARC platform - /// \details CRYPTOPP_BOOL_SPARC32 is defined to 1 when building the library - /// for a 32-bit SPARC platform. Otherwise, the macro is not defined. - #define CRYPTOPP_BOOL_SPARC32 ... -#elif defined(__sparc64__) || defined(__sparc64) || defined(__sparcv9) || defined(__sparc_v9__) - #define CRYPTOPP_BOOL_SPARC64 1 -#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) || defined(__sparc_v8__) - #define CRYPTOPP_BOOL_SPARC32 1 -#endif - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief L1 data cache line size - /// \details CRYPTOPP_L1_CACHE_LINE_SIZE should be a lower bound on the L1 - /// data cache line size. It is used for defense against some timing attacks. - /// \details CRYPTOPP_L1_CACHE_LINE_SIZE default value on 32-bit platforms - /// is 32, and the default value on 64-bit platforms is 64. On PowerPC the - /// default value is 128 since all PowerPC cpu's starting at PPC 970 provide - /// it. - /// \note The runtime library on some PowerPC platforms misreport the size - /// of the cache line size. The runtime library reports 64, while the cpu - /// has a cache line size of 128. - /// \sa CentOS Issue - /// 14599: sysconf(_SC_LEVEL1_DCACHE_LINESIZE) returns 0 instead of 128 - /// \since Crypto++ 5.3 - #define CRYPTOPP_L1_CACHE_LINE_SIZE ... -#else - #ifndef CRYPTOPP_L1_CACHE_LINE_SIZE - #if defined(CRYPTOPP_BOOL_X32) || defined(CRYPTOPP_BOOL_X64) || defined(CRYPTOPP_BOOL_ARMV8) || \ - defined(CRYPTOPP_BOOL_MIPS64) || defined(CRYPTOPP_BOOL_SPARC64) - #define CRYPTOPP_L1_CACHE_LINE_SIZE 64 - #elif defined(CRYPTOPP_BOOL_PPC32) || defined(CRYPTOPP_BOOL_PPC64) - // http://lists.llvm.org/pipermail/llvm-dev/2017-March/110982.html - #define CRYPTOPP_L1_CACHE_LINE_SIZE 128 - #else - // L1 cache line size is 32 on Pentium III and earlier - #define CRYPTOPP_L1_CACHE_LINE_SIZE 32 - #endif - #endif -#endif - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief Initialized data section - /// \details CRYPTOPP_SECTION_INIT is added to variables to place them in the - /// initialized data section (sometimes denoted .data). The placement - /// helps avoid "uninitialized variable" warnings from Valgrind and other tools. - #define CRYPTOPP_SECTION_INIT ... -#else - // The section attribute attempts to initialize CPU flags to avoid Valgrind findings above -O1 - #if ((defined(__MACH__) && defined(__APPLE__)) && ((CRYPTOPP_LLVM_CLANG_VERSION >= 30600) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 70100) || (CRYPTOPP_GCC_VERSION >= 40300))) - #define CRYPTOPP_SECTION_INIT __attribute__((section ("__DATA,__data"))) - #elif (defined(__ELF__) && (CRYPTOPP_GCC_VERSION >= 40300)) - #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) - #elif defined(__ELF__) && (defined(__xlC__) || defined(__ibmxl__)) - #define CRYPTOPP_SECTION_INIT __attribute__((section ("nocommon"))) - #else - #define CRYPTOPP_SECTION_INIT - #endif -#endif - -// How to disable CPU feature probing. We determine machine -// capabilities by performing an os/platform *query* first, -// like getauxv(). If the *query* fails, we move onto a -// cpu *probe*. The cpu *probe* tries to exeute an instruction -// and then catches a SIGILL on Linux or the exception -// EXCEPTION_ILLEGAL_INSTRUCTION on Windows. Some OSes -// fail to hangle a SIGILL gracefully, like Apple OSes. Apple -// machines corrupt memory and variables around the probe. -#if defined(__APPLE__) - #define CRYPTOPP_NO_CPU_FEATURE_PROBES 1 -#endif - -// Flavor of inline assembly language -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief Microsoft style inline assembly - /// \details CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY is defined when either - /// _MSC_VER or __BORLANDC__ are defined. - #define CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY ... - /// \brief GNU style inline assembly - /// \details CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY is defined when neither - /// _MSC_VER nor __BORLANDC__ are defined. - #define CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY ... -#elif defined(CRYPTOPP_MSC_VERSION) || defined(__BORLANDC__) || \ - defined(CRYPTOPP_MSVC_CLANG_VERSION) - #define CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY 1 -#else - #define CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY 1 -#endif - -#endif // CRYPTOPP_CONFIG_CPU_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_cxx.h b/third_party/cryptoppwin/include/cryptopp/config_cxx.h deleted file mode 100644 index ffd57add..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_cxx.h +++ /dev/null @@ -1,250 +0,0 @@ -// config_cxx.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_cxx.h -/// \brief Library configuration file -/// \details config_cxx.h provides defines for C++ language and -/// runtime library -/// features. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_cxx.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -// Visual Studio began at VS2010, http://msdn.microsoft.com/en-us/library/hh567368%28v=vs.110%29.aspx -// and https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance -// Intel, http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler -// GCC, http://gcc.gnu.org/projects/cxx0x.html -// Clang, http://clang.llvm.org/cxx_status.html - -#ifndef CRYPTOPP_CONFIG_CXX_H -#define CRYPTOPP_CONFIG_CXX_H - -#include "config_os.h" -#include "config_cpu.h" -#include "config_ver.h" - -// https://github.com/weidai11/cryptopp/issues/960 -#include -#include - -// You may need to force include a C++ header on Android when using STLPort -// to ensure _STLPORT_VERSION is defined -#if (defined(CRYPTOPP_MSC_VERSION) && CRYPTOPP_MSC_VERSION <= 1300) || \ - defined(__MWERKS__) || \ - (defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x450) || defined(_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT)) || \ - (__cplusplus >= 202002L)) -#define CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION -#endif - -// Ancient Crypto++ define, dating back to C++98. -#ifndef CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION -# define CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE 1 -# define CRYPTOPP_CXX98_UNCAUGHT_EXCEPTION 1 -#endif - -// Compatibility with non-clang compilers. -#ifndef __has_feature -# define __has_feature(x) 0 -#endif - -// C++11 macro version, https://stackoverflow.com/q/7223991/608639 -#if ((CRYPTOPP_MSC_VERSION >= 1600) || (__cplusplus >= 201103L)) && !defined(_STLPORT_VERSION) -# define CRYPTOPP_CXX11 1 -#endif - -// Hack ahead. Apple's standard library does not have C++'s unique_ptr in C++11. -// We can't test for unique_ptr directly because some of the non-Apple Clangs -// on OS X fail the same way. However, modern standard libraries have -// , so we test for it instead. Thanks to Jonathan Wakely for -// devising the clever test for modern/ancient versions. TODO: test under -// Xcode 3, where g++ is really g++. -#if defined(__APPLE__) && defined(__clang__) -# if !(defined(__has_include) && __has_include()) -# undef CRYPTOPP_CXX11 -# endif -#endif - -// C++14 macro version, https://stackoverflow.com/q/26089319/608639 -#if defined(CRYPTOPP_CXX11) && !defined(CRYPTOPP_NO_CXX14) -# if ((CRYPTOPP_MSC_VERSION >= 1900) || (__cplusplus >= 201402L)) && !defined(_STLPORT_VERSION) -# define CRYPTOPP_CXX14 1 -# endif -#endif - -// C++17 macro version, https://stackoverflow.com/q/38456127/608639 -#if defined(CRYPTOPP_CXX14) && !defined(CRYPTOPP_NO_CXX17) -# if ((CRYPTOPP_MSC_VERSION >= 1900) || (__cplusplus >= 201703L)) && !defined(_STLPORT_VERSION) -# define CRYPTOPP_CXX17 1 -# endif -#endif - -// ***************** C++11 and above ******************** - -#if defined(CRYPTOPP_CXX11) - -// atomics: MS at VS2012 (17.00); GCC at 4.4; Clang at 3.1/3.2; Intel 13.0; SunCC 5.14. -#if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_atomic) || \ - (__INTEL_COMPILER >= 1300) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5140) -# define CRYPTOPP_CXX11_ATOMIC 1 -#endif // atomics - -// synchronization: MS at VS2012 (17.00); GCC at 4.4; Clang at 3.3; Xcode 5.0; Intel 12.0; SunCC 5.13. -// TODO: verify Clang and Intel versions; find __has_feature(x) extension for Clang -#if (CRYPTOPP_MSC_VERSION >= 1700) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) || (__INTEL_COMPILER >= 1200) || \ - (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5130) -// Hack ahead. New GCC compilers like GCC 6 on AIX 7.0 or earlier as well as original MinGW -// don't have the synchronization gear. However, Wakely's test used for Apple does not work -// on the GCC/AIX combination. Another twist is we need other stuff from C++11, -// like no-except destructors. Dumping preprocessors shows the following may -// apply: http://stackoverflow.com/q/14191566/608639. -# include -# if !defined(__GLIBCXX__) || defined(_GLIBCXX_HAS_GTHREADS) -# define CRYPTOPP_CXX11_SYNCHRONIZATION 1 -# endif -#endif // synchronization - -// Dynamic Initialization and Destruction with Concurrency ("Magic Statics") -// MS at VS2015 with Vista (19.00); GCC at 4.3; LLVM Clang at 2.9; Apple Clang at 4.0; Intel 11.1; SunCC 5.13. -// Microsoft's implementation only works for Vista and above, so its further -// limited. http://connect.microsoft.com/VisualStudio/feedback/details/1789709 -// Clang may not support this as early as we indicate. Also see https://bugs.llvm.org/show_bug.cgi?id=47012. -#if (__cpp_threadsafe_static_init >= 200806) || \ - (CRYPTOPP_MSC_VERSION >= 1900) && ((WINVER >= 0x0600) || (_WIN32_WINNT >= 0x0600)) || \ - (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) || \ - (__INTEL_COMPILER >= 1110) || (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_STATIC_INIT 1 -#endif // Dynamic Initialization compilers - -// deleted functions: MS at VS2013 (18.00); GCC at 4.3; Clang at 2.9; Intel 12.1; SunCC 5.13. -#if (CRYPTOPP_MSC_VERSION >= 1800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) || (__INTEL_COMPILER >= 1210) || \ - (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_DELETED_FUNCTIONS 1 -#endif // deleted functions - -// alignof/alignas: MS at VS2015 (19.00); GCC at 4.8; Clang at 3.0; Intel 15.0; SunCC 5.13. -#if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignas) || \ - (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40800) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_ALIGNAS 1 -#endif // alignas - -// alignof: MS at VS2015 (19.00); GCC at 4.5; Clang at 2.9; Intel 15.0; SunCC 5.13. -#if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_alignof) || \ - (__INTEL_COMPILER >= 1500) || (CRYPTOPP_GCC_VERSION >= 40500) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_ALIGNOF 1 -#endif // alignof - -// initializer lists: MS at VS2013 (18.00); GCC at 4.4; Clang at 3.1; Intel 14.0; SunCC 5.13. -#if (CRYPTOPP_MSC_VERSION >= 1800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30100) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 40000) || (__INTEL_COMPILER >= 1400) || \ - (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_INITIALIZER_LIST 1 -#endif // alignas - -// lambdas: MS at VS2012 (17.00); GCC at 4.9; Clang at 3.3; Intel 12.0; SunCC 5.14. -#if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_lambdas) || \ - (__INTEL_COMPILER >= 1200) || (CRYPTOPP_GCC_VERSION >= 40900) || (__SUNPRO_CC >= 0x5140) -# define CRYPTOPP_CXX11_LAMBDA 1 -#endif // lambdas - -// noexcept: MS at VS2015 (19.00); GCC at 4.6; Clang at 3.0; Intel 14.0; SunCC 5.13. -#if (CRYPTOPP_MSC_VERSION >= 1900) || __has_feature(cxx_noexcept) || \ - (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_NOEXCEPT 1 -#endif // noexcept compilers - -// variadic templates: MS at VS2013 (18.00); GCC at 4.3; Clang at 2.9; Intel 12.1; SunCC 5.13. -#if (__cpp_variadic_templates >= 200704) || __has_feature(cxx_variadic_templates) || \ - (CRYPTOPP_MSC_VERSION >= 1800) || (__INTEL_COMPILER >= 1210) || \ - (CRYPTOPP_GCC_VERSION >= 40300) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_VARIADIC_TEMPLATES 1 -#endif // variadic templates - -// constexpr: MS at VS2015 (19.00); GCC at 4.6; Clang at 3.1; Intel 16.0; SunCC 5.13. -// Intel has mis-supported the feature since at least ICPC 13.00 -#if (__cpp_constexpr >= 200704) || __has_feature(cxx_constexpr) || \ - (CRYPTOPP_MSC_VERSION >= 1900) || (__INTEL_COMPILER >= 1600) || \ - (CRYPTOPP_GCC_VERSION >= 40600) || (__SUNPRO_CC >= 0x5130) -# define CRYPTOPP_CXX11_CONSTEXPR 1 -#endif // constexpr compilers - -// strong typed enums: MS at VS2012 (17.00); GCC at 4.4; Clang at 3.3; Intel 14.0; SunCC 5.12. -// Mircorosft and Intel had partial support earlier, but we require full support. -#if (CRYPTOPP_MSC_VERSION >= 1700) || __has_feature(cxx_strong_enums) || \ - (__INTEL_COMPILER >= 1400) || (CRYPTOPP_GCC_VERSION >= 40400) || (__SUNPRO_CC >= 0x5120) -# define CRYPTOPP_CXX11_STRONG_ENUM 1 -#endif // constexpr compilers - -// nullptr_t: MS at VS2010 (16.00); GCC at 4.6; Clang at 3.3; Intel 10.0; SunCC 5.13. -#if (CRYPTOPP_MSC_VERSION >= 1600) || __has_feature(cxx_nullptr) || \ - (__INTEL_COMPILER >= 1000) || (CRYPTOPP_GCC_VERSION >= 40600) || \ - (__SUNPRO_CC >= 0x5130) || defined(__IBMCPP_NULLPTR) -# define CRYPTOPP_CXX11_NULLPTR 1 -#endif // nullptr_t compilers - -#endif // CRYPTOPP_CXX11 - -// ***************** C++14 and above ******************** - -#if defined(CRYPTOPP_CXX14) - -// Extended static_assert with one argument -// Microsoft cannot handle the single argument static_assert as of VS2019 (cl.exe 19.00) -#if (__cpp_static_assert >= 201411) -# define CRYPTOPP_CXX17_STATIC_ASSERT 1 -#endif // static_assert - -#endif - -// ***************** C++17 and above ******************** - -// C++17 is available -#if defined(CRYPTOPP_CXX17) - -// C++17 uncaught_exceptions: MS at VS2015 (19.00); GCC at 6.0; Clang at 3.5; Intel 18.0. -// Clang and __EXCEPTIONS see http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html -// Also see https://github.com/weidai11/cryptopp/issues/980. I'm not sure what -// to do when the compiler defines __cpp_lib_uncaught_exceptions but the platform -// does not support std::uncaught_exceptions. What was Apple thinking??? -#if defined(__clang__) -# if __EXCEPTIONS && __has_feature(cxx_exceptions) -# if __cpp_lib_uncaught_exceptions >= 201411L -# define CRYPTOPP_CXX17_UNCAUGHT_EXCEPTIONS 1 -# endif -# endif -#elif (CRYPTOPP_MSC_VERSION >= 1900) || (__INTEL_COMPILER >= 1800) || \ - (CRYPTOPP_GCC_VERSION >= 60000) || (__cpp_lib_uncaught_exceptions >= 201411L) -# define CRYPTOPP_CXX17_UNCAUGHT_EXCEPTIONS 1 -#endif // uncaught_exceptions compilers - -#endif // CRYPTOPP_CXX17 - -// ***************** C++ fixups ******************** - -#if defined(CRYPTOPP_CXX11_NOEXCEPT) -# define CRYPTOPP_THROW noexcept(false) -# define CRYPTOPP_NO_THROW noexcept(true) -#else -# define CRYPTOPP_THROW -# define CRYPTOPP_NO_THROW -#endif // CRYPTOPP_CXX11_NOEXCEPT - -// Hack... C++11 nullptr_t type safety and analysis -#if defined(CRYPTOPP_CXX11_NULLPTR) && !defined(NULLPTR) -# define NULLPTR nullptr -#elif !defined(NULLPTR) -# define NULLPTR NULL -#endif // CRYPTOPP_CXX11_NULLPTR - -#endif // CRYPTOPP_CONFIG_CXX_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_dll.h b/third_party/cryptoppwin/include/cryptopp/config_dll.h deleted file mode 100644 index 73d16d9d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_dll.h +++ /dev/null @@ -1,178 +0,0 @@ -// config_dll.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_dll.h -/// \brief Library configuration file -/// \details config_dll.h provides defines for shared objects and -/// dynamic libraries. Generally speaking the macros are used to export -/// classes and template classes from the Win32 dynamic link library. -/// When not building the Win32 dynamic link library they are mostly an extern -/// template declaration. -/// \details In practice they are a furball coughed up by a cat and then peed -/// on by a dog. They are awful to get just right because of inconsistent -/// compiler support for extern templates, manual instantiation and the FIPS DLL. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_dll.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script, -/// Visual Studio, -/// and FIPS DLL -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_DLL_H -#define CRYPTOPP_CONFIG_DLL_H - -#include "config_os.h" - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - - /// \brief Win32 define for dynamic link libraries - /// \details CRYPTOPP_IMPORTS is set in the Visual Studio project files. - /// When the macro is set, CRYPTOPP_DLL is defined to - /// __declspec(dllimport). - /// \details This macro has no effect on Unix & Linux. - /// \sa Visual Studio, - /// and FIPS DLL - /// on the Crypto++ wiki - #define CRYPTOPP_IMPORTS ... - - /// \brief Win32 define for dynamic link libraries - /// \details CRYPTOPP_EXPORTS is set in the Visual Studio project files. - /// When the macro is set, CRYPTOPP_DLL is defined to - /// __declspec(dllexport). - /// \details This macro has no effect on Unix & Linux. - /// \sa Visual Studio, - /// and FIPS DLL - /// on the Crypto++ wiki - #define CRYPTOPP_EXPORTS ... - - /// \brief Win32 define for dynamic link libraries - /// \details CRYPTOPP_IS_DLL is set in the Visual Studio project files. - /// \sa Visual Studio, - /// and FIPS DLL - /// on the Crypto++ wiki - #define CRYPTOPP_IS_DLL - - /// \brief Instantiate templates in a dynamic library - /// \details CRYPTOPP_DLL_TEMPLATE_CLASS decoration should be used - /// for classes intended to be exported from dynamic link libraries. - /// \details This macro is primarily used on Win32, but sees some - /// action on Unix & Linux due to the source file dll.cpp. - /// \sa Visual Studio, - /// and FIPS DLL - /// on the Crypto++ wiki - #define CRYPTOPP_DLL_TEMPLATE_CLASS ... - - /// \brief Instantiate templates in a dynamic library - /// \details CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS decoration should be used - /// for template classes intended to be exported from dynamic link libraries. - /// \details This macro is primarily used on Win32, but sees some - /// action on Unix & Linux due to the source file dll.cpp. - /// \sa Visual Studio, - /// and FIPS DLL - /// on the Crypto++ wiki - #define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS ... - - /// \brief Instantiate templates in a dynamic library - /// \details CRYPTOPP_STATIC_TEMPLATE_CLASS decoration should be used - /// for template classes intended to be exported from dynamic link libraries. - /// \details This macro is primarily used on Win32, but sees some - /// action on Unix & Linux due to the source file dll.cpp. - /// \sa Visual Studio, - /// and FIPS DLL - /// on the Crypto++ wiki - #define CRYPTOPP_STATIC_TEMPLATE_CLASS ... - - /// \brief Instantiate templates in a dynamic library - /// \details CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS decoration should be used - /// for template classes intended to be exported from dynamic link libraries. - /// \details This macro is primarily used on Win32, but sees some - /// action on Unix & Linux due to the source file dll.cpp. - /// \sa Visual Studio, - /// and FIPS DLL - /// on the Crypto++ wiki - #define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS ... - - /// \brief Override for internal linkage - /// \details CRYPTOPP_TABLE can be used to override internal linkage - /// on tables with the const qualifier. According to C++ rules - /// a declaration with const qualifier is internal linkage. - /// \note The name CRYPTOPP_TABLE was chosen because it is often used to - /// export a table, like AES or SHA constants. The name avoids collisions - /// with the DLL gear macros, like CRYPTOPP_EXPORTS and CRYPTOPP_EXTERN. - #define CRYPTOPP_TABLE extern - - /// \brief Win32 calling convention - /// \details CRYPTOPP_API sets the calling convention on Win32. - /// On Win32 CRYPTOPP_API is __cedcl. On Unix & Linux - /// CRYPTOPP_API is defined to nothing. - /// \sa Visual Studio - /// on the Crypto++ wiki - #define CRYPTOPP_API ... - -#else // CRYPTOPP_DOXYGEN_PROCESSING - -#if defined(CRYPTOPP_WIN32_AVAILABLE) - - #if defined(CRYPTOPP_EXPORTS) - # define CRYPTOPP_IS_DLL - # define CRYPTOPP_DLL __declspec(dllexport) - #elif defined(CRYPTOPP_IMPORTS) - # define CRYPTOPP_IS_DLL - # define CRYPTOPP_DLL __declspec(dllimport) - #else - # define CRYPTOPP_DLL - #endif - - // C++ makes const internal linkage - #define CRYPTOPP_TABLE extern - #define CRYPTOPP_API __cdecl - -#else // not CRYPTOPP_WIN32_AVAILABLE - - // C++ makes const internal linkage - #define CRYPTOPP_TABLE extern - #define CRYPTOPP_DLL - #define CRYPTOPP_API - -#endif // CRYPTOPP_WIN32_AVAILABLE - -#if defined(__MWERKS__) -# define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern class CRYPTOPP_DLL -#elif defined(__BORLANDC__) || defined(__SUNPRO_CC) -# define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL -#else -# define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern template class CRYPTOPP_DLL -#endif - -#if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_IMPORTS) -# define CRYPTOPP_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL -#else -# define CRYPTOPP_DLL_TEMPLATE_CLASS CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS -#endif - -#if defined(__MWERKS__) -# define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern class -#elif defined(__BORLANDC__) || defined(__SUNPRO_CC) -# define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS template class -#else -# define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern template class -#endif - -#if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_EXPORTS) -# define CRYPTOPP_STATIC_TEMPLATE_CLASS template class -#else -# define CRYPTOPP_STATIC_TEMPLATE_CLASS CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS -#endif - -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -#endif // CRYPTOPP_CONFIG_DLL_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_int.h b/third_party/cryptoppwin/include/cryptopp/config_int.h deleted file mode 100644 index 2eeda0e9..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_int.h +++ /dev/null @@ -1,268 +0,0 @@ -// config_int.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_int.h -/// \brief Library configuration file -/// \details config_int.h provides defines and typedefs for fixed -/// size integers. The library's choices for fixed size integers predates other -/// standard-based integers by about 5 years. After fixed sizes were -/// made standard, the library continued to use its own definitions for -/// compatibility with previous versions of the library. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_int.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_INT_H -#define CRYPTOPP_CONFIG_INT_H - -#include "config_ns.h" -#include "config_ver.h" -#include "config_misc.h" - -// C5264 new for VS2022/v17.4, MSC v17.3.4 -// https://github.com/weidai11/cryptopp/issues/1185 -#if (CRYPTOPP_MSC_VERSION) -# pragma warning(push) -# if (CRYPTOPP_MSC_VERSION >= 1933) -# pragma warning(disable: 5264) -# endif -#endif - -/// \brief Library byte guard -/// \details CRYPTOPP_NO_GLOBAL_BYTE indicates byte is in the Crypto++ -/// namespace. -/// \details The Crypto++ byte was originally in global namespace to avoid -/// ambiguity with other byte typedefs. byte was moved to CryptoPP namespace -/// at Crypto++ 6.0 due to C++17, std::byte and potential compile problems. -/// \sa Issue 442, -/// std::byte on the -/// Crypto++ wiki -/// \since Crypto++ 6.0 -#define CRYPTOPP_NO_GLOBAL_BYTE 1 - -NAMESPACE_BEGIN(CryptoPP) - -// Signed words added at Issue 609 for early versions of and Visual Studio and -// the NaCl gear. Also see https://github.com/weidai11/cryptopp/issues/609. - -/// \brief 8-bit unsigned datatype -/// \details The Crypto++ byte was originally in global namespace to avoid -/// ambiguity with other byte typedefs. byte was moved to CryptoPP namespace -/// at Crypto++ 6.0 due to C++17, std::byte and potential compile problems. -/// \sa CRYPTOPP_NO_GLOBAL_BYTE, Issue 442, -/// std::byte on the -/// Crypto++ wiki -/// \since Crypto++ 1.0, CryptoPP namespace since Crypto++ 6.0 -typedef unsigned char byte; -/// \brief 16-bit unsigned datatype -/// \since Crypto++ 1.0 -typedef unsigned short word16; -/// \brief 32-bit unsigned datatype -/// \since Crypto++ 1.0 -typedef unsigned int word32; - -/// \brief 8-bit signed datatype -/// \details The 8-bit signed datatype was added to support constant time -/// implementations for curve25519, X25519 key agreement and ed25519 -/// signatures. -/// \since Crypto++ 8.0 -typedef signed char sbyte; -/// \brief 16-bit signed datatype -/// \details The 32-bit signed datatype was added to support constant time -/// implementations for curve25519, X25519 key agreement and ed25519 -/// signatures. -/// \since Crypto++ 8.0 -typedef signed short sword16; -/// \brief 32-bit signed datatype -/// \details The 32-bit signed datatype was added to support constant time -/// implementations for curve25519, X25519 key agreement and ed25519 -/// signatures. -/// \since Crypto++ 8.0 -typedef signed int sword32; - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - - /// \brief 64-bit unsigned datatype - /// \details The typedef for word64 varies depending on the platform. - /// On Microsoft platforms it is unsigned __int64. On Unix & Linux - /// with LP64 data model it is unsigned long. On Unix & Linux with ILP32 - /// data model it is unsigned long long. - /// \since Crypto++ 1.0 - typedef unsigned long long word64; - - /// \brief 64-bit signed datatype - /// \details The typedef for sword64 varies depending on the platform. - /// On Microsoft platforms it is signed __int64. On Unix & Linux - /// with LP64 data model it is signed long. On Unix & Linux with ILP32 - /// data model it is signed long long. - /// \since Crypto++ 8.0 - typedef signed long long sword64; - - /// \brief 128-bit unsigned datatype - /// \details The typedef for word128 varies depending on the platform. - /// word128 is only available on 64-bit machines when - /// CRYPTOPP_WORD128_AVAILABLE is defined. - /// On Unix & Linux with LP64 data model it is __uint128_t. - /// Microsoft platforms do not provide a 128-bit integer type. 32-bit platforms - /// do not provide a 128-bit integer type. - /// \since Crypto++ 5.6 - typedef __uint128_t word128; - - /// \brief Declare an unsigned word64 - /// \details W64LIT is used to portability declare or assign 64-bit literal values. - /// W64LIT will append the proper suffix to ensure the compiler accepts the literal. - /// \details Use the macro like shown below. - ///
-	///    word64 x = W64LIT(0xffffffffffffffff);
-	///  
- /// \since Crypto++ 1.0 - #define W64LIT(x) ... - - /// \brief Declare a signed word64 - /// \details SW64LIT is used to portability declare or assign 64-bit literal values. - /// SW64LIT will append the proper suffix to ensure the compiler accepts the literal. - /// \details Use the macro like shown below. - ///
-	///    sword64 x = SW64LIT(0xffffffffffffffff);
-	///  
- /// \since Crypto++ 8.0 - #define SW64LIT(x) ... - - /// \brief Declare ops on word64 are slow - /// \details CRYPTOPP_BOOL_SLOW_WORD64 is typically defined to 1 on platforms - /// that have a machine word smaller than 64-bits. That is, the define - /// is present on 32-bit platforms. The define is also present on platforms - /// where the cpu is slow even with a 64-bit cpu. - #define CRYPTOPP_BOOL_SLOW_WORD64 ... - -#elif defined(CRYPTOPP_MSC_VERSION) || defined(__BORLANDC__) - typedef signed __int64 sword64; - typedef unsigned __int64 word64; - #define SW64LIT(x) x##i64 - #define W64LIT(x) x##ui64 -#elif (_LP64 || __LP64__) - typedef signed long sword64; - typedef unsigned long word64; - #define SW64LIT(x) x##L - #define W64LIT(x) x##UL -#else - typedef signed long long sword64; - typedef unsigned long long word64; - #define SW64LIT(x) x##LL - #define W64LIT(x) x##ULL -#endif - -/// \brief Large word type -/// \details lword is a typedef for large word types. It is used for file -/// offsets and such. -typedef word64 lword; - -/// \brief Large word type max value -/// \details LWORD_MAX is the maximum value for large word types. -/// Since an lword is an unsigned type, the value is -/// 0xffffffffffffffff. W64LIT will append the proper suffix. -CRYPTOPP_CONST_OR_CONSTEXPR lword LWORD_MAX = W64LIT(0xffffffffffffffff); - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - /// \brief Half word used for multiprecision integer arithmetic - /// \details hword is used for multiprecision integer arithmetic. - /// The typedef for hword varies depending on the platform. - /// On 32-bit platforms it is usually word16. On 64-bit platforms - /// it is usually word32. - /// \details Library users typically use byte, word16, word32 and word64. - /// \since Crypto++ 2.0 - typedef word32 hword; - /// \brief Full word used for multiprecision integer arithmetic - /// \details word is used for multiprecision integer arithmetic. - /// The typedef for word varies depending on the platform. - /// On 32-bit platforms it is usually word32. On 64-bit platforms - /// it is usually word64. - /// \details Library users typically use byte, word16, word32 and word64. - /// \since Crypto++ 2.0 - typedef word64 word; - /// \brief Double word used for multiprecision integer arithmetic - /// \details dword is used for multiprecision integer arithmetic. - /// The typedef for dword varies depending on the platform. - /// On 32-bit platforms it is usually word64. On 64-bit Unix & - /// Linux platforms it is usually word128. word128 is - /// not available on Microsoft platforms. word128 is only available - /// when CRYPTOPP_WORD128_AVAILABLE is defined. - /// \details Library users typically use byte, word16, word32 and word64. - /// \sa CRYPTOPP_WORD128_AVAILABLE - /// \since Crypto++ 2.0 - typedef word128 dword; - - /// \brief 128-bit word availability - /// \details CRYPTOPP_WORD128_AVAILABLE indicates a 128-bit word is - /// available from the platform. 128-bit words are usually available on - /// 64-bit platforms, but not available 32-bit platforms. - /// \details If CRYPTOPP_WORD128_AVAILABLE is not defined, then 128-bit - /// words are not available. - /// \details GCC and compatible compilers signal 128-bit word availability - /// with the preporcessor macro __SIZEOF_INT128__ >= 16. - /// \since Crypto++ 2.0 - #define CRYPTOPP_WORD128_AVAILABLE ... -#else - // define hword, word, and dword. these are used for multiprecision integer arithmetic - // Intel compiler won't have _umul128 until version 10.0. See http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30231625.aspx - #if (defined(CRYPTOPP_MSC_VERSION) && (!defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1000) && (defined(_M_X64) || defined(_M_IA64))) || (defined(__DECCXX) && defined(__alpha__)) || (defined(__INTEL_COMPILER) && defined(__x86_64__)) || (defined(__SUNPRO_CC) && defined(__x86_64__)) - typedef word32 hword; - typedef word64 word; - #else - #define CRYPTOPP_NATIVE_DWORD_AVAILABLE 1 - #if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__) || defined(__aarch64__) - #if ((CRYPTOPP_GCC_VERSION >= 30400) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30000) || (CRYPTOPP_APPLE_CLANG_VERSION >= 40300)) && (__SIZEOF_INT128__ >= 16) - // GCC 4.0.1 on MacOS X is missing __umodti3 and __udivti3 - // GCC 4.8.3 and bad uint128_t ops on PPC64/POWER7 (Issue 421) - // mode(TI) division broken on amd64 with GCC earlier than GCC 3.4 - typedef word32 hword; - typedef word64 word; - typedef __uint128_t dword; - typedef __uint128_t word128; - #define CRYPTOPP_WORD128_AVAILABLE 1 - #else - // if we're here, it means we're on a 64-bit CPU but we don't have a way to obtain 128-bit multiplication results - typedef word16 hword; - typedef word32 word; - typedef word64 dword; - #endif - #else - // being here means the native register size is probably 32 bits or less - #define CRYPTOPP_BOOL_SLOW_WORD64 1 - typedef word16 hword; - typedef word32 word; - typedef word64 dword; - #endif - #endif -#endif - -#ifndef CRYPTOPP_BOOL_SLOW_WORD64 -# define CRYPTOPP_BOOL_SLOW_WORD64 0 -#endif - -/// \brief Size of a platform word in bytes -/// \details The size of a platform word, in bytes -CRYPTOPP_CONST_OR_CONSTEXPR unsigned int WORD_SIZE = sizeof(word); - -/// \brief Size of a platform word in bits -/// \details The size of a platform word, in bits -/// \sa https://github.com/weidai11/cryptopp/issues/1185 -CRYPTOPP_CONST_OR_CONSTEXPR unsigned int WORD_BITS = WORD_SIZE * 8; - -NAMESPACE_END - -#if (CRYPTOPP_MSC_VERSION) -# pragma warning(pop) -#endif - -#endif // CRYPTOPP_CONFIG_INT_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_misc.h b/third_party/cryptoppwin/include/cryptopp/config_misc.h deleted file mode 100644 index 68e196cb..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_misc.h +++ /dev/null @@ -1,199 +0,0 @@ -// config_misc.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_misc.h -/// \brief Library configuration file -/// \details config_misc.h provides miscellaneous defines. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_misc.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_MISC_H -#define CRYPTOPP_CONFIG_MISC_H - -#include "config_asm.h" -#include "config_cxx.h" -#include "config_os.h" -#include "config_ver.h" - -// Define this if running on a big-endian CPU -// big endian will be assumed if CRYPTOPP_LITTLE_ENDIAN is not non-0 -#if !defined(CRYPTOPP_LITTLE_ENDIAN) && !defined(CRYPTOPP_BIG_ENDIAN) && (defined(__BIG_ENDIAN__) || (defined(__s390__) || defined(__s390x__) || defined(__zarch__)) || (defined(__m68k__) || defined(__MC68K__)) || defined(__sparc) || defined(__sparc__) || defined(__hppa__) || defined(__MIPSEB__) || defined(__ARMEB__) || (defined(__MWERKS__) && !defined(__INTEL__))) -# define CRYPTOPP_BIG_ENDIAN 1 -#endif - -// Define this if running on a little-endian CPU -// big endian will be assumed if CRYPTOPP_LITTLE_ENDIAN is not non-0 -#if !defined(CRYPTOPP_BIG_ENDIAN) && !defined(CRYPTOPP_LITTLE_ENDIAN) -# define CRYPTOPP_LITTLE_ENDIAN 1 -#endif - -// Define this if you want to set a prefix for TestData/ and TestVectors/ -// Be sure to add the trailing slash since its simple concatenation. -// After https://github.com/weidai11/cryptopp/issues/760 the library -// should find the test vectors and data without much effort. It -// will search in "./" and "$ORIGIN/../share/cryptopp" automatically. -#ifndef CRYPTOPP_DATA_DIR -# define CRYPTOPP_DATA_DIR "" -#endif - -// Define this to disable the test suite from searching for test -// vectors and data in "./" and "$ORIGIN/../share/cryptopp". The -// library will still search in CRYPTOPP_DATA_DIR, regardless. -// Some distros may want to disable this feature. Also see -// https://github.com/weidai11/cryptopp/issues/760 -// #ifndef CRYPTOPP_DISABLE_DATA_DIR_SEARCH -// # define CRYPTOPP_DISABLE_DATA_DIR_SEARCH -// #endif - -// Define this if you want or need the library's memcpy_s and memmove_s. -// See http://github.com/weidai11/cryptopp/issues/28. -// #if !defined(CRYPTOPP_WANT_SECURE_LIB) -// # define CRYPTOPP_WANT_SECURE_LIB -// #endif - -// Define this if ARMv8 shifts are slow. ARM Cortex-A53 and Cortex-A57 shift -// operation perform poorly, so NEON and ASIMD code that relies on shifts -// or rotates often performs worse than C/C++ code. Also see -// http://github.com/weidai11/cryptopp/issues/367. -#define CRYPTOPP_SLOW_ARMV8_SHIFT 1 - -// CRYPTOPP_DEBUG enables the library's CRYPTOPP_ASSERT. CRYPTOPP_ASSERT -// raises a SIGTRAP (Unix) or calls DebugBreak() (Windows). CRYPTOPP_ASSERT -// is only in effect when CRYPTOPP_DEBUG, DEBUG or _DEBUG is defined. Unlike -// Posix assert, CRYPTOPP_ASSERT is not affected by NDEBUG (or failure to -// define it). According to the ndk-build docs, Android use NDK_DEBUG=1 to -// signal a DEBUG build (and NDK_DEBUG=0 to signal non-DEBUG build). -// Also see http://github.com/weidai11/cryptopp/issues/277, CVE-2016-7420 and -// https://developer.android.com/ndk/guides/ndk-build -#if (defined(DEBUG) || defined(_DEBUG)) || (defined(NDK_DEBUG) && (NDK_DEBUG > 0)) -# undef CRYPTOPP_DEBUG -# define CRYPTOPP_DEBUG 1 -#endif - -// File system code to use when creating GZIP archive. -// http://www.gzip.org/format.txt -#if !defined(GZIP_OS_CODE) -# if defined(__macintosh__) -# define GZIP_OS_CODE 7 -# elif defined(__unix__) || defined(__linux__) -# define GZIP_OS_CODE 3 -# else -# define GZIP_OS_CODE 0 -# endif -#endif - -// Try this if your CPU has 256K internal cache or a slow multiply instruction -// and you want a (possibly) faster IDEA implementation using log tables -// #define IDEA_LARGECACHE - -// Define this if, for the linear congruential RNG, you want to use -// the original constants as specified in S.K. Park and K.W. Miller's -// CACM paper. -// #define LCRNG_ORIGINAL_NUMBERS - -// Define this if you want Integer's operator<< to honor std::showbase (and -// std::noshowbase). If defined, Integer will use a suffix of 'b', 'o', 'h' -// or '.' (the last for decimal) when std::showbase is in effect. If -// std::noshowbase is set, then the suffix is not added to the Integer. If -// not defined, existing behavior is preserved and Integer will use a suffix -// of 'b', 'o', 'h' or '.' (the last for decimal). -// #define CRYPTOPP_USE_STD_SHOWBASE - -// Define this if you want to decouple AlgorithmParameters and Integer -// The decoupling should make it easier for the linker to remove Integer -// related code for those who do not need Integer, and avoid a potential -// race during AssignIntToInteger pointer initialization. Also -// see http://github.com/weidai11/cryptopp/issues/389. -// #define CRYPTOPP_NO_ASSIGN_TO_INTEGER - -// Need GCC 4.6/Clang 1.7/Apple Clang 2.0 or above due to "GCC diagnostic {push|pop}" -#if (CRYPTOPP_GCC_VERSION >= 40600) || (CRYPTOPP_LLVM_CLANG_VERSION >= 10700) || \ - (CRYPTOPP_APPLE_CLANG_VERSION >= 20000) - #define CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 1 -#endif - -// Portable way to suppress warnings. -// Moved from misc.h due to circular depenedencies. -#ifndef CRYPTOPP_UNUSED - #define CRYPTOPP_UNUSED(x) ((void)(x)) -#endif - -// how to disable inlining -#if defined(CRYPTOPP_MSC_VERSION) -# define CRYPTOPP_NOINLINE_DOTDOTDOT -# define CRYPTOPP_NOINLINE __declspec(noinline) -#elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) -# define CRYPTOPP_NOINLINE_DOTDOTDOT ... -# define CRYPTOPP_NOINLINE __attribute__((noinline)) -#elif defined(__GNUC__) -# define CRYPTOPP_NOINLINE_DOTDOTDOT -# define CRYPTOPP_NOINLINE __attribute__((noinline)) -#else -# define CRYPTOPP_NOINLINE_DOTDOTDOT ... -# define CRYPTOPP_NOINLINE -#endif - -// http://stackoverflow.com/a/13867690/608639 -// CRYPTOPP_CONST_OR_CONSTEXPR due to https://github.com/weidai11/cryptopp/issues/1185 -#if defined(CRYPTOPP_CXX11_CONSTEXPR) -# define CRYPTOPP_STATIC_CONSTEXPR static constexpr -# define CRYPTOPP_STATIC_CONST_OR_CONSTEXPR static constexpr -# define CRYPTOPP_CONST_OR_CONSTEXPR constexpr -# define CRYPTOPP_CONSTEXPR constexpr -#else -# define CRYPTOPP_STATIC_CONSTEXPR static -# define CRYPTOPP_STATIC_CONST_OR_CONSTEXPR static const -# define CRYPTOPP_CONST_OR_CONSTEXPR const -# define CRYPTOPP_CONSTEXPR -#endif // CRYPTOPP_CXX11_CONSTEXPR - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -# define CRYPTOPP_CONSTANT(x) static const int x -#elif defined(CRYPTOPP_CXX11_STRONG_ENUM) -# define CRYPTOPP_CONSTANT(x) enum : int { x } -#elif defined(CRYPTOPP_CXX11_CONSTEXPR) -# define CRYPTOPP_CONSTANT(x) constexpr static int x -#else -# define CRYPTOPP_CONSTANT(x) static const int x -#endif - -// Warnings -#ifdef CRYPTOPP_MSC_VERSION - // 4127: conditional expression is constant - // 4512: assignment operator not generated - // 4661: no suitable definition provided for explicit template instantiation request - // 4910: '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation -# pragma warning(disable: 4127 4512 4661 4910) - // CRYPTOPP_MSC_VERSION 1920 is VS2019 -# if CRYPTOPP_MSC_VERSION >= 1920 - // 5054: operator '|': deprecated between enumerations of different types -# pragma warning(disable: 5054) -# endif - // Security related, possible defects - // http://blogs.msdn.com/b/vcblog/archive/2010/12/14/off-by-default-compiler-warnings-in-visual-c.aspx -# pragma warning(once: 4191 4242 4263 4264 4266 4302 4826 4905 4906 4928) -#endif - -#ifdef __BORLANDC__ -// 8037: non-const function called for const object. needed to work around BCB2006 bug -# pragma warn -8037 -#endif - -// [GCC Bug 53431] "C++ preprocessor ignores #pragma GCC diagnostic". Clang honors it. -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic ignored "-Wunknown-pragmas" -# pragma GCC diagnostic ignored "-Wunused-function" -#endif - -#endif // CRYPTOPP_CONFIG_MISC_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_ns.h b/third_party/cryptoppwin/include/cryptopp/config_ns.h deleted file mode 100644 index 256b7916..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_ns.h +++ /dev/null @@ -1,76 +0,0 @@ -// config_ns.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_ns.h -/// \brief Library configuration file -/// \details config_ns.h provides defines for C++ and library -/// namespaces. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_ns.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_NAMESPACE_H -#define CRYPTOPP_CONFIG_NAMESPACE_H - -// namespace support is now required -#ifdef NO_NAMESPACE -# error namespace support is now required -#endif - -#ifdef CRYPTOPP_DOXYGEN_PROCESSING - -/// \namespace CryptoPP -/// \brief Crypto++ library namespace -/// \details Nearly all classes are located in the CryptoPP namespace. Within -/// the namespace, there are four additional namespaces. -///
    -///
  • Name - namespace for names used with NameValuePairs and documented -/// in argnames.h -///
  • NaCl - namespace for NaCl test functions like crypto_box, -/// crypto_box_open, crypto_sign, and crypto_sign_open -///
  • Donna - namespace for curve25519 library operations. The name was -/// selected due to use of Langley and Moon's curve25519-donna. -///
  • Test - namespace for testing and benchmarks classes -///
  • Weak - namespace for weak and wounded algorithms, like ARC4, MD5 -/// and Pananma -///
-/// \since Crypto++ 3.0 -namespace CryptoPP { } - -// Bring in the symbols found in the weak namespace; and fold Weak1 into Weak -#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 -#define Weak1 Weak -// Avoid putting "CryptoPP::" in front of everything in Doxygen output -#define CryptoPP -#define NAMESPACE_BEGIN(x) -#define NAMESPACE_END -// Get Doxygen to generate better documentation for these typedefs -#define DOCUMENTED_TYPEDEF(x, y) class y : public x {} -// Make "protected" "private" so the functions and members are not documented -#define protected private - -#else -// Not Doxygen -#define NAMESPACE_BEGIN(x) namespace x { -#define NAMESPACE_END } -#define DOCUMENTED_TYPEDEF(x, y) typedef x y - -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -#define ANONYMOUS_NAMESPACE_BEGIN namespace { -#define ANONYMOUS_NAMESPACE_END } -#define USING_NAMESPACE(x) using namespace x; -#define DOCUMENTED_NAMESPACE_BEGIN(x) namespace x { -#define DOCUMENTED_NAMESPACE_END } - -#endif // CRYPTOPP_CONFIG_NAMESPACE_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_os.h b/third_party/cryptoppwin/include/cryptopp/config_os.h deleted file mode 100644 index 1a636c34..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_os.h +++ /dev/null @@ -1,168 +0,0 @@ -// config_os.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_os.h -/// \brief Library configuration file -/// \details config_os.h provides defines for platforms and operating -/// systems. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_os.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_OS_H -#define CRYPTOPP_CONFIG_OS_H - -#include "config_ver.h" - -// It is OK to remove the hard stop below, but you are on your own. -// After building the library be sure to run self tests described -// https://www.cryptopp.com/wiki/Release_Process#Self_Tests -// The problems with Clang pretending to be other compilers is -// discussed at http://github.com/weidai11/cryptopp/issues/147. -#if (defined(_MSC_VER) && defined(__clang__)) -//# error: "Unsupported configuration" -#endif - -// Windows platform -#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) -#define CRYPTOPP_WIN32_AVAILABLE -#endif - -// Unix and Linux platforms -#if defined(__unix__) || defined(__MACH__) || defined(__NetBSD__) || defined(__sun) -#define CRYPTOPP_UNIX_AVAILABLE -#endif - -// BSD platforms -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) -#define CRYPTOPP_BSD_AVAILABLE -#endif - -// Microsoft compilers -#if defined(CRYPTOPP_MSC_VERSION) || defined(__fastcall) - #define CRYPTOPP_FASTCALL __fastcall -#else - #define CRYPTOPP_FASTCALL -#endif - -// Microsoft compilers -#if defined(CRYPTOPP_MSC_VERSION) - #define CRYPTOPP_NO_VTABLE __declspec(novtable) -#else - #define CRYPTOPP_NO_VTABLE -#endif - -// Define this if you want to disable all OS-dependent features, -// such as sockets and OS-provided random number generators -// #define NO_OS_DEPENDENCE - -// Define this to use features provided by Microsoft's CryptoAPI. -// Currently the only feature used is Windows random number generation. -// This macro will be ignored if NO_OS_DEPENDENCE is defined. -// #define USE_MS_CRYPTOAPI - -// Define this to use features provided by Microsoft's CryptoNG API. -// CryptoNG API is available in Vista and above and its cross platform, -// including desktop apps and store apps. Currently the only feature -// used is Windows random number generation. -// This macro will be ignored if NO_OS_DEPENDENCE is defined. -// #define USE_MS_CNGAPI - -// If the user did not make a choice, then select CryptoNG if -// targeting Windows 8 or above. -#if !defined(USE_MS_CRYPTOAPI) && !defined(USE_MS_CNGAPI) -# if !defined(_USING_V110_SDK71_) && ((WINVER >= 0x0602 /*_WIN32_WINNT_WIN8*/) || \ - (_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/)) -# define USE_MS_CNGAPI -# else -# define USE_MS_CRYPTOAPI -# endif -#endif - -// Begin OS features, like init priorities and random numbers -#ifndef NO_OS_DEPENDENCE - -// CRYPTOPP_INIT_PRIORITY attempts to manage initialization of C++ static objects. -// Under GCC, the library uses init_priority attribute in the range -// [CRYPTOPP_INIT_PRIORITY, CRYPTOPP_INIT_PRIORITY+100]. Under Windows, -// CRYPTOPP_INIT_PRIORITY enlists "#pragma init_seg(lib)". The platforms -// with gaps are Apple and Sun because they require linker scripts. Apple and -// Sun will use the library's Singletons to initialize and acquire resources. -// Also see http://cryptopp.com/wiki/Static_Initialization_Order_Fiasco -#ifndef CRYPTOPP_INIT_PRIORITY -# define CRYPTOPP_INIT_PRIORITY 250 -#endif - -// CRYPTOPP_USER_PRIORITY is for other libraries and user code that is using Crypto++ -// and managing C++ static object creation. It is guaranteed not to conflict with -// values used by (or would be used by) the Crypto++ library. -#ifndef CRYPTOPP_USER_PRIORITY -# define CRYPTOPP_USER_PRIORITY (CRYPTOPP_INIT_PRIORITY+101) -#endif - -// Most platforms allow us to specify when to create C++ objects. Apple and Sun do not. -#if (CRYPTOPP_INIT_PRIORITY > 0) && !(defined(NO_OS_DEPENDENCE) || defined(__APPLE__) || defined(__sun__)) -# if (CRYPTOPP_GCC_VERSION >= 30000) || (CRYPTOPP_LLVM_CLANG_VERSION >= 20900) || (_INTEL_COMPILER >= 800) -# define HAVE_GCC_INIT_PRIORITY 1 -# elif (CRYPTOPP_MSC_VERSION >= 1310) -# define HAVE_MSC_INIT_PRIORITY 1 -# elif defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__) -# define HAVE_XLC_INIT_PRIORITY 1 -# endif -#endif // CRYPTOPP_INIT_PRIORITY, NO_OS_DEPENDENCE, Apple, Sun - -#if defined(CRYPTOPP_WIN32_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) -# define HIGHRES_TIMER_AVAILABLE -#endif - -#ifdef CRYPTOPP_WIN32_AVAILABLE -# if !defined(WINAPI_FAMILY) -# define THREAD_TIMER_AVAILABLE -# elif defined(WINAPI_FAMILY) -# if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) -# define THREAD_TIMER_AVAILABLE -# endif -# endif -#endif - -#if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -# define NONBLOCKING_RNG_AVAILABLE -# define BLOCKING_RNG_AVAILABLE -# define OS_RNG_AVAILABLE -#endif - -// Cygwin/Newlib requires _XOPEN_SOURCE=600 -#if defined(CRYPTOPP_UNIX_AVAILABLE) -# define UNIX_SIGNALS_AVAILABLE 1 -#endif - -#ifdef CRYPTOPP_WIN32_AVAILABLE -# if !defined(WINAPI_FAMILY) -# define NONBLOCKING_RNG_AVAILABLE -# define OS_RNG_AVAILABLE -# elif defined(WINAPI_FAMILY) -# if (WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) -# define NONBLOCKING_RNG_AVAILABLE -# define OS_RNG_AVAILABLE -# elif !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) -# if ((WINVER >= 0x0A00 /*_WIN32_WINNT_WIN10*/) || (_WIN32_WINNT >= 0x0A00 /*_WIN32_WINNT_WIN10*/)) -# define NONBLOCKING_RNG_AVAILABLE -# define OS_RNG_AVAILABLE -# endif -# endif -# endif -#endif - -#endif // NO_OS_DEPENDENCE - -#endif // CRYPTOPP_CONFIG_OS_H diff --git a/third_party/cryptoppwin/include/cryptopp/config_ver.h b/third_party/cryptoppwin/include/cryptopp/config_ver.h deleted file mode 100644 index c7e457c2..00000000 --- a/third_party/cryptoppwin/include/cryptopp/config_ver.h +++ /dev/null @@ -1,98 +0,0 @@ -// config_ver.h - written and placed in public domain by Jeffrey Walton -// the bits that make up this source file are from the -// library's monolithic config.h. - -/// \file config_ver.h -/// \brief Library configuration file -/// \details config_ver.h provides defines for library and compiler -/// versions. -/// \details config.h was split into components in May 2019 to better -/// integrate with Autoconf and its feature tests. The splitting occurred so -/// users could continue to include config.h while allowing Autoconf -/// to write new config_asm.h and new config_cxx.h using -/// its feature tests. -/// \note You should include config.h rather than config_ver.h -/// directly. -/// \sa Issue 835, -/// Make config.h more autoconf friendly, -/// Configure.sh script -/// on the Crypto++ wiki -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_CONFIG_VERSION_H -#define CRYPTOPP_CONFIG_VERSION_H - -/// \brief Library major version -/// \details CRYPTOPP_MAJOR reflects the major version of the library the -/// headers came from. It is not necessarily the version of the library built -/// as a shared object if versions are inadvertently mixed and matched. -/// \sa CRYPTOPP_VERSION, LibraryVersion(), HeaderVersion() -/// \since Crypto++ 8.2 -#define CRYPTOPP_MAJOR 8 -/// \brief Library minor version -/// \details CRYPTOPP_MINOR reflects the minor version of the library the -/// headers came from. It is not necessarily the version of the library built -/// as a shared object if versions are inadvertently mixed and matched. -/// \sa CRYPTOPP_VERSION, LibraryVersion(), HeaderVersion() -/// \since Crypto++ 8.2 -#define CRYPTOPP_MINOR 9 -/// \brief Library revision number -/// \details CRYPTOPP_REVISION reflects the revision number of the library the -/// headers came from. It is not necessarily the revision of the library built -/// as a shared object if versions are inadvertently mixed and matched. -/// \sa CRYPTOPP_VERSION, LibraryVersion(), HeaderVersion() -/// \since Crypto++ 8.2 -#define CRYPTOPP_REVISION 0 - -/// \brief Full library version -/// \details CRYPTOPP_VERSION reflects the version of the library the headers -/// came from. It is not necessarily the version of the library built as a -/// shared object if versions are inadvertently mixed and matched. -/// \sa CRYPTOPP_MAJOR, CRYPTOPP_MINOR, CRYPTOPP_REVISION, LibraryVersion(), HeaderVersion() -/// \since Crypto++ 5.6 -#define CRYPTOPP_VERSION 890 - -// Compiler version macros - -// Apple and LLVM Clang versions. Apple Clang version 7.0 roughly equals -// LLVM Clang version 3.7. Also see https://gist.github.com/yamaya/2924292 -#if defined(__clang__) && defined(__apple_build_version__) -# define CRYPTOPP_APPLE_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) -#elif defined(__clang__) && defined(_MSC_VER) -# define CRYPTOPP_MSVC_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) -#elif defined(__clang__) -# define CRYPTOPP_LLVM_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) -#endif - -// Clang pretends to be other compilers. The compiler gets into -// code paths that it cannot compile. Unset Clang to save the grief. -// Also see http://github.com/weidai11/cryptopp/issues/147. - -#if defined(__GNUC__) && !defined(__clang__) -# undef CRYPTOPP_APPLE_CLANG_VERSION -# undef CRYPTOPP_LLVM_CLANG_VERSION -# define CRYPTOPP_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) -#endif - -#if defined(__xlc__) || defined(__xlC__) && !defined(__clang__) -# undef CRYPTOPP_LLVM_CLANG_VERSION -# define CRYPTOPP_XLC_VERSION ((__xlC__ / 256) * 10000 + (__xlC__ % 256) * 100) -#endif - -#if defined(__INTEL_COMPILER) && !defined(__clang__) -# undef CRYPTOPP_LLVM_CLANG_VERSION -# define CRYPTOPP_INTEL_VERSION (__INTEL_COMPILER) -#endif - -#if defined(_MSC_VER) && !defined(__clang__) -# undef CRYPTOPP_LLVM_CLANG_VERSION -# define CRYPTOPP_MSC_VERSION (_MSC_VER) -#endif - -// To control include. May need a guard, like GCC 4.5 and above -// Also see https://stackoverflow.com/a/42493893 and https://github.com/weidai11/cryptopp/issues/1198 -#if defined(CRYPTOPP_GCC_VERSION) || defined(CRYPTOPP_APPLE_CLANG_VERSION) || defined(CRYPTOPP_LLVM_CLANG_VERSION) -# define CRYPTOPP_GCC_COMPATIBLE 1 -#endif - -#endif // CRYPTOPP_CONFIG_VERSION_H diff --git a/third_party/cryptoppwin/include/cryptopp/cpu.h b/third_party/cryptoppwin/include/cryptopp/cpu.h deleted file mode 100644 index 29ab6d42..00000000 --- a/third_party/cryptoppwin/include/cryptopp/cpu.h +++ /dev/null @@ -1,1089 +0,0 @@ -// cpu.h - originally written and placed in the public domain by Wei Dai -// updated for ARM and PowerPC by Jeffrey Walton. -// updated to split CPU_Query() and CPU_Probe() by Jeffrey Walton. - -/// \file cpu.h -/// \brief Functions for CPU features and intrinsics -/// \details The CPU functions are used in IA-32, ARM and PowerPC code paths. The -/// functions provide cpu specific feature testing on IA-32, ARM and PowerPC machines. -/// \details Feature detection uses CPUID on IA-32, like Intel and AMD. On other platforms -/// a two-part strategy is used. First, the library attempts to *Query* the OS for a feature, -/// like using Linux getauxval() or android_getCpuFeatures(). If that fails, then *Probe* -/// the cpu executing an instruction and an observe a SIGILL if unsupported. The general -/// pattern used by the library is: -///
-///    g_hasCRC32 = CPU_QueryCRC32() || CPU_ProbeCRC32();
-///    g_hasPMULL = CPU_QueryPMULL() || CPU_ProbePMULL();
-///    g_hasAES  = CPU_QueryAES() || CPU_ProbeAES();
-/// 
-/// \details Generally speaking, CPU_Query() is in the source file cpu.cpp because it -/// does not require special architectural flags. CPU_Probe() is in a source file that receives -/// architectural flags, like sse_simd.cpp, neon_simd.cpp and -/// ppc_simd.cpp. For example, compiling neon_simd.cpp on an ARM64 machine will -/// have -march=armv8-a applied during a compile to make the instruction set architecture -/// (ISA) available. -/// \details The cpu probes are expensive when compared to a standard OS feature query. The library -/// also avoids probes on Apple platforms because Apple's signal handling for SIGILLs appears to -/// corrupt memory. CPU_Probe() will unconditionally return false for Apple platforms. OpenSSL -/// experienced the same problem and moved away from SIGILL probes on Apple. - -#ifndef CRYPTOPP_CPU_H -#define CRYPTOPP_CPU_H - -#include "config.h" - -// Issue 340 -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wconversion" -# pragma GCC diagnostic ignored "-Wsign-conversion" -#endif - -// Applies to both X86/X32/X64 and ARM32/ARM64 -#if defined(CRYPTOPP_LLVM_CLANG_VERSION) || defined(CRYPTOPP_APPLE_CLANG_VERSION) - #define NEW_LINE "\n" - #define INTEL_PREFIX ".intel_syntax;" - #define INTEL_NOPREFIX ".intel_syntax;" - #define ATT_PREFIX ".att_syntax;" - #define ATT_NOPREFIX ".att_syntax;" -#elif defined(CRYPTOPP_GCC_VERSION) - #define NEW_LINE - #define INTEL_PREFIX ".intel_syntax prefix;" - #define INTEL_NOPREFIX ".intel_syntax noprefix;" - #define ATT_PREFIX ".att_syntax prefix;" - #define ATT_NOPREFIX ".att_syntax noprefix;" -#else - #define NEW_LINE - #define INTEL_PREFIX - #define INTEL_NOPREFIX - #define ATT_PREFIX - #define ATT_NOPREFIX -#endif - -// Thanks to v1ne at https://github.com/weidai11/cryptopp/pull/1133 -#define PERCENT_PASTE(x) "%" #x -#define PERCENT_REG(x) PERCENT_PASTE(x) - -#ifdef CRYPTOPP_GENERATE_X64_MASM - -#define CRYPTOPP_X86_ASM_AVAILABLE -#define CRYPTOPP_BOOL_X64 1 -#define CRYPTOPP_SSE2_ASM_AVAILABLE 1 -#define NAMESPACE_END - -#else - -NAMESPACE_BEGIN(CryptoPP) - -// ***************************** IA-32 ***************************** // - -#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || CRYPTOPP_DOXYGEN_PROCESSING - -#define CRYPTOPP_CPUID_AVAILABLE 1 - -// Hide from Doxygen -#ifndef CRYPTOPP_DOXYGEN_PROCESSING -// These should not be used directly -extern CRYPTOPP_DLL bool g_x86DetectionDone; -extern CRYPTOPP_DLL bool g_hasSSE2; -extern CRYPTOPP_DLL bool g_hasSSSE3; -extern CRYPTOPP_DLL bool g_hasSSE41; -extern CRYPTOPP_DLL bool g_hasSSE42; -extern CRYPTOPP_DLL bool g_hasMOVBE; -extern CRYPTOPP_DLL bool g_hasAESNI; -extern CRYPTOPP_DLL bool g_hasCLMUL; -extern CRYPTOPP_DLL bool g_hasAVX; -extern CRYPTOPP_DLL bool g_hasAVX2; -extern CRYPTOPP_DLL bool g_hasSHA; -extern CRYPTOPP_DLL bool g_hasADX; -extern CRYPTOPP_DLL bool g_isP4; -extern CRYPTOPP_DLL bool g_hasRDRAND; -extern CRYPTOPP_DLL bool g_hasRDSEED; -extern CRYPTOPP_DLL bool g_hasPadlockRNG; -extern CRYPTOPP_DLL bool g_hasPadlockACE; -extern CRYPTOPP_DLL bool g_hasPadlockACE2; -extern CRYPTOPP_DLL bool g_hasPadlockPHE; -extern CRYPTOPP_DLL bool g_hasPadlockPMM; -extern CRYPTOPP_DLL word32 g_cacheLineSize; - -CRYPTOPP_DLL void CRYPTOPP_API DetectX86Features(); -CRYPTOPP_DLL bool CRYPTOPP_API CpuId(word32 func, word32 subfunc, word32 output[4]); -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -/// \name IA-32 CPU FEATURES -//@{ - -/// \brief Determine SSE2 availability -/// \return true if SSE2 is determined to be available, false otherwise -/// \details MMX, SSE and SSE2 are core processor features for x86_64, and -/// the function return value is based on OSXSAVE. On i386 both -/// SSE2 and OSXSAVE are used for the return value. -/// \note This function is only available on Intel IA-32 platforms -inline bool HasSSE2() -{ -#if (CRYPTOPP_SSE2_ASM_AVAILABLE || CRYPTOPP_SSE2_INTRIN_AVAILABLE) - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasSSE2; -#else - return false; -#endif -} - -/// \brief Determine SSSE3 availability -/// \return true if SSSE3 is determined to be available, false otherwise -/// \details HasSSSE3() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasSSSE3() -{ -#if CRYPTOPP_SSSE3_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasSSSE3; -#else - return false; -#endif -} - -/// \brief Determine SSE4.1 availability -/// \return true if SSE4.1 is determined to be available, false otherwise -/// \details HasSSE41() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasSSE41() -{ -#if CRYPTOPP_SSE41_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasSSE41; -#else - return false; -#endif -} - -/// \brief Determine SSE4.2 availability -/// \return true if SSE4.2 is determined to be available, false otherwise -/// \details HasSSE42() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasSSE42() -{ -#if CRYPTOPP_SSE42_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasSSE42; -#else - return false; -#endif -} - -/// \brief Determine MOVBE availability -/// \return true if MOVBE is determined to be available, false otherwise -/// \details HasMOVBE() is a runtime check performed using CPUID -/// \since Crypto++ 8.3 -/// \note This function is only available on Intel IA-32 platforms -inline bool HasMOVBE() -{ -#if CRYPTOPP_SSE42_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasMOVBE; -#else - return false; -#endif -} - -/// \brief Determine AES-NI availability -/// \return true if AES-NI is determined to be available, false otherwise -/// \details HasAESNI() is a runtime check performed using CPUID -/// \since Crypto++ 5.6.1 -/// \note This function is only available on Intel IA-32 platforms -inline bool HasAESNI() -{ -#if CRYPTOPP_AESNI_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasAESNI; -#else - return false; -#endif -} - -/// \brief Determine Carryless Multiply availability -/// \return true if pclmulqdq is determined to be available, false otherwise -/// \details HasCLMUL() is a runtime check performed using CPUID -/// \since Crypto++ 5.6.1 -/// \note This function is only available on Intel IA-32 platforms -inline bool HasCLMUL() -{ -#if CRYPTOPP_CLMUL_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasCLMUL; -#else - return false; -#endif -} - -/// \brief Determine SHA availability -/// \return true if SHA is determined to be available, false otherwise -/// \details HasSHA() is a runtime check performed using CPUID -/// \since Crypto++ 6.0 -/// \note This function is only available on Intel IA-32 platforms -inline bool HasSHA() -{ -#if CRYPTOPP_SHANI_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasSHA; -#else - return false; -#endif -} - -/// \brief Determine ADX availability -/// \return true if ADX is determined to be available, false otherwise -/// \details HasADX() is a runtime check performed using CPUID -/// \since Crypto++ 7.0 -/// \note This function is only available on Intel IA-32 platforms -inline bool HasADX() -{ -#if CRYPTOPP_ADX_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasADX; -#else - return false; -#endif -} - -/// \brief Determine AVX availability -/// \return true if AVX is determined to be available, false otherwise -/// \details HasAVX() is a runtime check performed using CPUID -/// \since Crypto++ 8.0 -/// \note This function is only available on Intel IA-32 platforms -inline bool HasAVX() -{ -#if CRYPTOPP_AVX_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasAVX; -#else - return false; -#endif -} - -/// \brief Determine AVX2 availability -/// \return true if AVX2 is determined to be available, false otherwise -/// \details HasAVX2() is a runtime check performed using CPUID -/// \since Crypto++ 8.0 -/// \note This function is only available on Intel IA-32 platforms -inline bool HasAVX2() -{ -#if CRYPTOPP_AVX2_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasAVX2; -#else - return false; -#endif -} - -/// \brief Determine RDRAND availability -/// \return true if RDRAND is determined to be available, false otherwise -/// \details HasRDRAND() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasRDRAND() -{ -#if CRYPTOPP_RDRAND_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasRDRAND; -#else - return false; -#endif -} - -/// \brief Determine RDSEED availability -/// \return true if RDSEED is determined to be available, false otherwise -/// \details HasRDSEED() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasRDSEED() -{ -#if CRYPTOPP_RDSEED_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasRDSEED; -#else - return false; -#endif -} - -/// \brief Determine Padlock RNG availability -/// \return true if VIA Padlock RNG is determined to be available, false otherwise -/// \details HasPadlockRNG() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasPadlockRNG() -{ -#if CRYPTOPP_PADLOCK_RNG_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasPadlockRNG; -#else - return false; -#endif -} - -/// \brief Determine Padlock ACE availability -/// \return true if VIA Padlock ACE is determined to be available, false otherwise -/// \details HasPadlockACE() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasPadlockACE() -{ -#if CRYPTOPP_PADLOCK_ACE_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasPadlockACE; -#else - return false; -#endif -} - -/// \brief Determine Padlock ACE2 availability -/// \return true if VIA Padlock ACE2 is determined to be available, false otherwise -/// \details HasPadlockACE2() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasPadlockACE2() -{ -#if CRYPTOPP_PADLOCK_ACE2_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasPadlockACE2; -#else - return false; -#endif -} - -/// \brief Determine Padlock PHE availability -/// \return true if VIA Padlock PHE is determined to be available, false otherwise -/// \details HasPadlockPHE() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasPadlockPHE() -{ -#if CRYPTOPP_PADLOCK_PHE_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasPadlockPHE; -#else - return false; -#endif -} - -/// \brief Determine Padlock PMM availability -/// \return true if VIA Padlock PMM is determined to be available, false otherwise -/// \details HasPadlockPMM() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool HasPadlockPMM() -{ -#if CRYPTOPP_PADLOCK_PMM_AVAILABLE - if (!g_x86DetectionDone) - DetectX86Features(); - return g_hasPadlockPMM; -#else - return false; -#endif -} - -/// \brief Determine if the CPU is an Intel P4 -/// \return true if the CPU is a P4, false otherwise -/// \details IsP4() is a runtime check performed using CPUID -/// \note This function is only available on Intel IA-32 platforms -inline bool IsP4() -{ - if (!g_x86DetectionDone) - DetectX86Features(); - return g_isP4; -} - -/// \brief Provides the cache line size -/// \return lower bound on the size of a cache line in bytes, if available -/// \details GetCacheLineSize() returns the lower bound on the size of a cache line, if it -/// is available. If the value is not available at runtime, then 32 is returned for a 32-bit -/// processor and 64 is returned for a 64-bit processor. -/// \details x86/x32/x64 uses CPUID to determine the value and it is usually accurate. PowerPC -/// and AIX also makes the value available to user space and it is also usually accurate. The -/// ARM processor equivalent is a privileged instruction, so a compile time value is returned. -inline int GetCacheLineSize() -{ - if (!g_x86DetectionDone) - DetectX86Features(); - return g_cacheLineSize; -} -//@} - -#endif // CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 - -// ***************************** ARM-32, Aarch32 and Aarch64 ***************************** // - -#if CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 || CRYPTOPP_DOXYGEN_PROCESSING - -// Hide from Doxygen -#ifndef CRYPTOPP_DOXYGEN_PROCESSING -extern bool g_ArmDetectionDone; -extern bool g_hasARMv7; -extern bool g_hasNEON; -extern bool g_hasPMULL; -extern bool g_hasCRC32; -extern bool g_hasAES; -extern bool g_hasSHA1; -extern bool g_hasSHA2; -extern bool g_hasSHA512; -extern bool g_hasSHA3; -extern bool g_hasSM3; -extern bool g_hasSM4; -void CRYPTOPP_API DetectArmFeatures(); -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -/// \name ARM A-32, Aarch32 and AArch64 CPU FEATURES -//@{ - -/// \brief Determine if an ARM processor is ARMv7 or above -/// \return true if the hardware is ARMv7 or above, false otherwise. -/// \details Some AES code requires ARMv7 or above -/// \since Crypto++ 8.0 -/// \note This function is only available on ARM-32, Aarch32 and Aarch64 platforms -inline bool HasARMv7() -{ - // ASIMD is a core feature on Aarch32 and Aarch64 like SSE2 is a core feature on x86_64 -#if defined(__aarch32__) || defined(__aarch64__) - return true; -#else - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasARMv7; -#endif -} - -/// \brief Determine if an ARM processor has Advanced SIMD available -/// \return true if the hardware is capable of Advanced SIMD at runtime, false otherwise. -/// \details Advanced SIMD instructions are available under most ARMv7, Aarch32 and Aarch64. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mfpu=neon (32-bit) or -march=armv8-a -/// (64-bit). Also see ARM's __ARM_NEON preprocessor macro. -/// \since Crypto++ 5.6.4 -/// \note This function is only available on ARM-32, Aarch32 and Aarch64 platforms -inline bool HasNEON() -{ - // ASIMD is a core feature on Aarch32 and Aarch64 like SSE2 is a core feature on x86_64 -#if defined(CRYPTOPP_ARM_ASIMD_AVAILABLE) - return true; -#elif defined(CRYPTOPP_ARM_NEON_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasNEON; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has CRC32 available -/// \return true if the hardware is capable of CRC32 at runtime, false otherwise. -/// \details CRC32 instructions provide access to the processor's CRC-32 and CRC-32C -/// instructions. They are provided by ARM C Language Extensions 2.0 (ACLE 2.0) and -/// available under Aarch32 and Aarch64. -/// \details Runtime support requires compile time support. When compiling with GCC, -/// you may need to compile with -march=armv8-a+crc; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRC32 preprocessor macro. -/// \since Crypto++ 5.6.4 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasCRC32() -{ -#if defined(CRYPTOPP_ARM_CRC32_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasCRC32; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has AES available -/// \return true if the hardware is capable of AES at runtime, false otherwise. -/// \details AES is part of the optional Crypto extensions on Aarch32 and Aarch64. They are -/// accessed using ARM C Language Extensions 2.0 (ACLE 2.0). -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -march=armv8-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 5.6.4 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasAES() -{ -#if defined(CRYPTOPP_ARM_AES_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasAES; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor provides Polynomial Multiplication -/// \return true if the hardware is capable of polynomial multiplications at runtime, -/// false otherwise. -/// \details The multiplication instructions are available under Aarch32 and Aarch64. -/// \details Runtime support requires compile time support. When compiling with GCC, -/// you may need to compile with -march=armv8-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 5.6.4 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasPMULL() -{ -#if defined(CRYPTOPP_ARM_PMULL_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasPMULL; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has SHA1 available -/// \return true if the hardware is capable of SHA1 at runtime, false otherwise. -/// \details SHA1 is part of the optional Crypto extensions on Aarch32 and Aarch64. They are -/// accessed using ARM C Language Extensions 2.0 (ACLE 2.0). -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -march=armv8-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 5.6.4 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasSHA1() -{ -#if defined(CRYPTOPP_ARM_SHA1_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasSHA1; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has SHA256 available -/// \return true if the hardware is capable of SHA256 at runtime, false otherwise. -/// \details SHA256 is part of the optional Crypto extensions on Aarch32 and Aarch64. They are -/// accessed using ARM C Language Extensions 2.0 (ACLE 2.0). -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -march=armv8-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 5.6.4 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasSHA2() -{ -#if defined(CRYPTOPP_ARM_SHA2_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasSHA2; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has SHA3 available -/// \return true if the hardware is capable of SHA3 at runtime, false otherwise. -/// \details SHA3 is part of the ARMv8.2 Crypto extensions on Aarch32 and Aarch64. They -/// are accessed using ARM C Language Extensions 2.0 (ACLE 2.0). -/// \details Runtime support requires compile time support. When compiling with GCC, you -/// may need to compile with -march=armv8.2-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 8.0 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasSHA3() -{ -#if defined(CRYPTOPP_ARM_SHA3_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasSHA3; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has SHA512 available -/// \return true if the hardware is capable of SHA512 at runtime, false otherwise. -/// \details SHA512 is part of the ARMv8.2 Crypto extensions on Aarch32 and Aarch64. They -/// are accessed using ARM C Language Extensions 2.0 (ACLE 2.0). -/// \details Runtime support requires compile time support. When compiling with GCC, you -/// may need to compile with -march=armv8.2-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 8.0 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasSHA512() -{ -#if defined(CRYPTOPP_ARM_SHA512_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasSHA512; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has SM3 available -/// \return true if the hardware is capable of SM3 at runtime, false otherwise. -/// \details SM3 is part of the ARMv8.2 Crypto extensions on Aarch32 and Aarch64. They -/// are accessed using ARM C Language Extensions 2.0 (ACLE 2.0). -/// \details Runtime support requires compile time support. When compiling with GCC, you -/// may need to compile with -march=armv8.2-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 8.0 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasSM3() -{ -#if defined(CRYPTOPP_ARM_SM3_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasSM3; -#else - return false; -#endif -} - -/// \brief Determine if an ARM processor has SM4 available -/// \return true if the hardware is capable of SM4 at runtime, false otherwise. -/// \details SM4 is part of the ARMv8.2 Crypto extensions on Aarch32 and Aarch64. They -/// are accessed using ARM C Language Extensions 2.0 (ACLE 2.0). -/// \details Runtime support requires compile time support. When compiling with GCC, you -/// may need to compile with -march=armv8.2-a+crypto; while Apple requires -/// -arch arm64. Also see ARM's __ARM_FEATURE_CRYPTO preprocessor macro. -/// \since Crypto++ 8.0 -/// \note This function is only available on Aarch32 and Aarch64 platforms -inline bool HasSM4() -{ -#if defined(CRYPTOPP_ARM_SM4_AVAILABLE) - if (!g_ArmDetectionDone) - DetectArmFeatures(); - return g_hasSM4; -#else - return false; -#endif -} - -//@} - -#endif // CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 - -// ***************************** PowerPC ***************************** // - -#if CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 || CRYPTOPP_DOXYGEN_PROCESSING - -// Hide from Doxygen -#ifndef CRYPTOPP_DOXYGEN_PROCESSING -extern bool g_PowerPcDetectionDone; -extern bool g_hasAltivec; -extern bool g_hasPower7; -extern bool g_hasPower8; -extern bool g_hasPower9; -extern bool g_hasAES; -extern bool g_hasPMULL; -extern bool g_hasSHA256; -extern bool g_hasSHA512; -extern bool g_hasDARN; -extern word32 g_cacheLineSize; -void CRYPTOPP_API DetectPowerPcFeatures(); -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -/// \name POWERPC CPU FEATURES -//@{ - -/// \brief Determine if a PowerPC processor has Altivec available -/// \return true if the hardware is capable of Altivec at runtime, false otherwise. -/// \details Altivec instructions are available on modern PowerPCs. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power4; while IBM XL C/C++ compilers require -/// -qarch=pwr6 -qaltivec. Also see PowerPC's _ALTIVEC_ preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasAltivec() -{ -#if CRYPTOPP_ALTIVEC_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasAltivec; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has Power7 available -/// \return true if the hardware is capable of Power7 at runtime, false otherwise. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power7; while IBM XL C/C++ compilers require -/// -qarch=pwr7 -qaltivec. Also see PowerPC's _ALTIVEC_ preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasPower7() -{ -#if CRYPTOPP_POWER7_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasPower7; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has Power8 available -/// \return true if the hardware is capable of Power8 at runtime, false otherwise. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power8; while IBM XL C/C++ compilers require -/// -qarch=pwr8 -qaltivec. Also see PowerPC's _ALTIVEC_ preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasPower8() -{ -#if CRYPTOPP_POWER8_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasPower8; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has Power9 available -/// \return true if the hardware is capable of Power9 at runtime, false otherwise. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power9; while IBM XL C/C++ compilers require -/// -qarch=pwr9 -qaltivec. Also see PowerPC's _ALTIVEC_ preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasPower9() -{ -#if CRYPTOPP_POWER9_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasPower9; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has AES available -/// \return true if the hardware is capable of AES at runtime, false otherwise. -/// \details AES is part of the in-crypto extensions on Power8 and Power9. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power8; while IBM XL C/C++ compilers require -/// -qarch=pwr8 -qaltivec. Also see PowerPC's __CRYPTO preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasAES() -{ -#if CRYPTOPP_POWER8_AES_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasAES; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has Polynomial Multiply available -/// \return true if the hardware is capable of PMULL at runtime, false otherwise. -/// \details PMULL is part of the in-crypto extensions on Power8 and Power9. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power8; while IBM XL C/C++ compilers require -/// -qarch=pwr8 -qaltivec. Also see PowerPC's __CRYPTO preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasPMULL() -{ -#if CRYPTOPP_POWER8_VMULL_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasPMULL; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has SHA256 available -/// \return true if the hardware is capable of SHA256 at runtime, false otherwise. -/// \details SHA is part of the in-crypto extensions on Power8 and Power9. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power8; while IBM XL C/C++ compilers require -/// -qarch=pwr8 -qaltivec. Also see PowerPC's __CRYPTO preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasSHA256() -{ -#if CRYPTOPP_POWER8_SHA_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasSHA256; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has SHA512 available -/// \return true if the hardware is capable of SHA512 at runtime, false otherwise. -/// \details SHA is part of the in-crypto extensions on Power8 and Power9. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power8; while IBM XL C/C++ compilers require -/// -qarch=pwr8 -qaltivec. Also see PowerPC's __CRYPTO preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasSHA512() -{ -#if CRYPTOPP_POWER8_SHA_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_hasSHA512; -#else - return false; -#endif -} - -/// \brief Determine if a PowerPC processor has DARN available -/// \return true if the hardware is capable of DARN at runtime, false otherwise. -/// \details Runtime support requires compile time support. When compiling with GCC, you may -/// need to compile with -mcpu=power9; while IBM XL C/C++ compilers require -/// -qarch=pwr9 -qaltivec. Also see PowerPC's _ALTIVEC_ preprocessor macro. -/// \note This function is only available on PowerPC and PowerPC-64 platforms -inline bool HasDARN() -{ -#if CRYPTOPP_POWER9_AVAILABLE - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - // see comments in cpu.cpp -# if defined(__ibmxl__) && defined(__linux__) - return false; -# else - return g_hasDARN; -# endif -#else - return false; -#endif -} - -/// \brief Provides the cache line size -/// \return lower bound on the size of a cache line in bytes, if available -/// \details GetCacheLineSize() returns the lower bound on the size of a cache line, if it -/// is available. If the value is not available at runtime, then 32 is returned for a 32-bit -/// processor and 64 is returned for a 64-bit processor. -/// \details x86/x32/x64 uses CPUID to determine the value and it is usually accurate. PowerPC -/// and AIX also makes the value available to user space and it is also usually accurate. The -/// ARM processor equivalent is a privileged instruction, so a compile time value is returned. -inline int GetCacheLineSize() -{ - if (!g_PowerPcDetectionDone) - DetectPowerPcFeatures(); - return g_cacheLineSize; -} - -//@} - -#endif // CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 - -// ***************************** L1 cache line ***************************** // - -// Non-Intel systems -#if !(CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) -/// \brief Provides the cache line size -/// \return lower bound on the size of a cache line in bytes, if available -/// \details GetCacheLineSize() returns the lower bound on the size of a cache line, if it -/// is available. If the value is not available at runtime, then 32 is returned for a 32-bit -/// processor and 64 is returned for a 64-bit processor. -/// \details x86/x32/x64 uses CPUID to determine the value and it is usually accurate. PowerPC -/// and AIX also makes the value available to user space and it is also usually accurate. The -/// ARM processor equivalent is a privileged instruction, so a compile time value is returned. -inline int GetCacheLineSize() -{ - return CRYPTOPP_L1_CACHE_LINE_SIZE; -} -#endif // Non-Intel systems - -#endif // CRYPTOPP_GENERATE_X64_MASM - -// ***************************** Inline ASM Helper ***************************** // - -#ifndef CRYPTOPP_DOXYGEN_PROCESSING - -#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 - -#ifdef CRYPTOPP_GENERATE_X64_MASM - #define AS1(x) x*newline* - #define AS2(x, y) x, y*newline* - #define AS3(x, y, z) x, y, z*newline* - #define ASS(x, y, a, b, c, d) x, y, a*64+b*16+c*4+d*newline* - #define ASL(x) label##x:*newline* - #define ASJ(x, y, z) x label##y*newline* - #define ASC(x, y) x label##y*newline* - #define AS_HEX(y) 0##y##h -#elif defined(CRYPTOPP_MSC_VERSION) || defined(__BORLANDC__) - #define AS1(x) __asm {x} - #define AS2(x, y) __asm {x, y} - #define AS3(x, y, z) __asm {x, y, z} - #define ASS(x, y, a, b, c, d) __asm {x, y, (a)*64+(b)*16+(c)*4+(d)} - #define ASL(x) __asm {label##x:} - #define ASJ(x, y, z) __asm {x label##y} - #define ASC(x, y) __asm {x label##y} - #define CRYPTOPP_NAKED __declspec(naked) - #define AS_HEX(y) 0x##y -#else - // define these in two steps to allow arguments to be expanded - #define GNU_AS1(x) #x ";" NEW_LINE - #define GNU_AS2(x, y) #x ", " #y ";" NEW_LINE - #define GNU_AS3(x, y, z) #x ", " #y ", " #z ";" NEW_LINE - #define GNU_ASL(x) "\n" #x ":" NEW_LINE -// clang 5.0.0 and apple clang 9.0.0 don't support numerical backward jumps -#if (CRYPTOPP_LLVM_CLANG_VERSION >= 50000) || (CRYPTOPP_APPLE_CLANG_VERSION >= 90000) - #define GNU_ASJ(x, y, z) ATT_PREFIX ";" NEW_LINE #x " " #y #z ";" NEW_LINE INTEL_PREFIX ";" NEW_LINE -#else - #define GNU_ASJ(x, y, z) #x " " #y #z ";" NEW_LINE -#endif - #define AS1(x) GNU_AS1(x) - #define AS2(x, y) GNU_AS2(x, y) - #define AS3(x, y, z) GNU_AS3(x, y, z) - #define ASS(x, y, a, b, c, d) #x ", " #y ", " #a "*64+" #b "*16+" #c "*4+" #d ";" - #define ASL(x) GNU_ASL(x) - #define ASJ(x, y, z) GNU_ASJ(x, y, z) - #define ASC(x, y) #x " " #y ";" - #define CRYPTOPP_NAKED - #define AS_HEX(y) 0x##y -#endif - -#define IF0(y) -#define IF1(y) y - -#ifdef CRYPTOPP_GENERATE_X64_MASM -#define ASM_MOD(x, y) ((x) MOD (y)) -#define XMMWORD_PTR XMMWORD PTR -#else -// GNU assembler doesn't seem to have mod operator -#define ASM_MOD(x, y) ((x)-((x)/(y))*(y)) -// GAS 2.15 doesn't support XMMWORD PTR. it seems necessary only for MASM -#define XMMWORD_PTR -#endif - -#if CRYPTOPP_BOOL_X86 - #define AS_REG_1 ecx - #define AS_REG_2 edx - #define AS_REG_3 esi - #define AS_REG_4 edi - #define AS_REG_5 eax - #define AS_REG_6 ebx - #define AS_REG_7 ebp - #define AS_REG_1d ecx - #define AS_REG_2d edx - #define AS_REG_3d esi - #define AS_REG_4d edi - #define AS_REG_5d eax - #define AS_REG_6d ebx - #define AS_REG_7d ebp - #define WORD_SZ 4 - #define WORD_REG(x) e##x - #define WORD_PTR DWORD PTR - #define AS_PUSH_IF86(x) AS1(push e##x) - #define AS_POP_IF86(x) AS1(pop e##x) - #define AS_JCXZ jecxz -#elif CRYPTOPP_BOOL_X32 - #define AS_REG_1 ecx - #define AS_REG_2 edx - #define AS_REG_3 r8d - #define AS_REG_4 r9d - #define AS_REG_5 eax - #define AS_REG_6 r10d - #define AS_REG_7 r11d - #define AS_REG_1d ecx - #define AS_REG_2d edx - #define AS_REG_3d r8d - #define AS_REG_4d r9d - #define AS_REG_5d eax - #define AS_REG_6d r10d - #define AS_REG_7d r11d - #define WORD_SZ 4 - #define WORD_REG(x) e##x - #define WORD_PTR DWORD PTR - #define AS_PUSH_IF86(x) AS1(push r##x) - #define AS_POP_IF86(x) AS1(pop r##x) - #define AS_JCXZ jecxz -#elif CRYPTOPP_BOOL_X64 - #ifdef CRYPTOPP_GENERATE_X64_MASM - #define AS_REG_1 rcx - #define AS_REG_2 rdx - #define AS_REG_3 r8 - #define AS_REG_4 r9 - #define AS_REG_5 rax - #define AS_REG_6 r10 - #define AS_REG_7 r11 - #define AS_REG_1d ecx - #define AS_REG_2d edx - #define AS_REG_3d r8d - #define AS_REG_4d r9d - #define AS_REG_5d eax - #define AS_REG_6d r10d - #define AS_REG_7d r11d - #else - #define AS_REG_1 rdi - #define AS_REG_2 rsi - #define AS_REG_3 rdx - #define AS_REG_4 rcx - #define AS_REG_5 r8 - #define AS_REG_6 r9 - #define AS_REG_7 r10 - #define AS_REG_1d edi - #define AS_REG_2d esi - #define AS_REG_3d edx - #define AS_REG_4d ecx - #define AS_REG_5d r8d - #define AS_REG_6d r9d - #define AS_REG_7d r10d - #endif - #define WORD_SZ 8 - #define WORD_REG(x) r##x - #define WORD_PTR QWORD PTR - #define AS_PUSH_IF86(x) - #define AS_POP_IF86(x) - #define AS_JCXZ jrcxz -#endif - -// helper macro for stream cipher output -#define AS_XMM_OUTPUT4(labelPrefix, inputPtr, outputPtr, x0, x1, x2, x3, t, p0, p1, p2, p3, increment)\ - AS2( test inputPtr, inputPtr)\ - ASC( jz, labelPrefix##3)\ - AS2( test inputPtr, 15)\ - ASC( jnz, labelPrefix##7)\ - AS2( pxor xmm##x0, [inputPtr+p0*16])\ - AS2( pxor xmm##x1, [inputPtr+p1*16])\ - AS2( pxor xmm##x2, [inputPtr+p2*16])\ - AS2( pxor xmm##x3, [inputPtr+p3*16])\ - AS2( add inputPtr, increment*16)\ - ASC( jmp, labelPrefix##3)\ - ASL(labelPrefix##7)\ - AS2( movdqu xmm##t, [inputPtr+p0*16])\ - AS2( pxor xmm##x0, xmm##t)\ - AS2( movdqu xmm##t, [inputPtr+p1*16])\ - AS2( pxor xmm##x1, xmm##t)\ - AS2( movdqu xmm##t, [inputPtr+p2*16])\ - AS2( pxor xmm##x2, xmm##t)\ - AS2( movdqu xmm##t, [inputPtr+p3*16])\ - AS2( pxor xmm##x3, xmm##t)\ - AS2( add inputPtr, increment*16)\ - ASL(labelPrefix##3)\ - AS2( test outputPtr, 15)\ - ASC( jnz, labelPrefix##8)\ - AS2( movdqa [outputPtr+p0*16], xmm##x0)\ - AS2( movdqa [outputPtr+p1*16], xmm##x1)\ - AS2( movdqa [outputPtr+p2*16], xmm##x2)\ - AS2( movdqa [outputPtr+p3*16], xmm##x3)\ - ASC( jmp, labelPrefix##9)\ - ASL(labelPrefix##8)\ - AS2( movdqu [outputPtr+p0*16], xmm##x0)\ - AS2( movdqu [outputPtr+p1*16], xmm##x1)\ - AS2( movdqu [outputPtr+p2*16], xmm##x2)\ - AS2( movdqu [outputPtr+p3*16], xmm##x3)\ - ASL(labelPrefix##9)\ - AS2( add outputPtr, increment*16) - -#endif // CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64 - -#endif // Not CRYPTOPP_DOXYGEN_PROCESSING - -NAMESPACE_END - -// Issue 340 -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic pop -#endif - -#endif // CRYPTOPP_CPU_H diff --git a/third_party/cryptoppwin/include/cryptopp/crc.h b/third_party/cryptoppwin/include/cryptopp/crc.h deleted file mode 100644 index 17e5977b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/crc.h +++ /dev/null @@ -1,90 +0,0 @@ -// crc.h - originally written and placed in the public domain by Wei Dai - -/// \file crc.h -/// \brief Classes for CRC-32 and CRC-32C checksum algorithm - -#ifndef CRYPTOPP_CRC32_H -#define CRYPTOPP_CRC32_H - -#include "cryptlib.h" - -NAMESPACE_BEGIN(CryptoPP) - -const word32 CRC32_NEGL = 0xffffffffL; - -#if (CRYPTOPP_LITTLE_ENDIAN) -#define CRC32_INDEX(c) (c & 0xff) -#define CRC32_SHIFTED(c) (c >> 8) -#else -#define CRC32_INDEX(c) (c >> 24) -#define CRC32_SHIFTED(c) (c << 8) -#endif - -/// \brief CRC-32 Checksum Calculation -/// \details Uses CRC polynomial 0xEDB88320 -class CRC32 : public HashTransformation -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = 4); - CRC32(); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *hash, size_t size); - unsigned int DigestSize() const {return DIGESTSIZE;} - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "CRC32";} - std::string AlgorithmName() const {return StaticAlgorithmName();} - - /// \brief Updates a CRC with additional input - /// \param b the additional input as a byte - void UpdateByte(byte b) {m_crc = m_tab[CRC32_INDEX(m_crc) ^ b] ^ CRC32_SHIFTED(m_crc);} - - /// \brief Retrieves the i-th byte of the CRC - /// \param i the additional input as a byte - /// \return the byte at the i-th position - byte GetCrcByte(size_t i) const {return reinterpret_cast(&m_crc)[i];} - - std::string AlgorithmProvider() const; - -protected: - void Reset() {m_crc = CRC32_NEGL;} - -private: - static const word32 m_tab[256]; - word32 m_crc; -}; - -/// \brief CRC-32C Checksum Calculation -/// \details Uses CRC polynomial 0x82F63B78 -/// \since Crypto++ 5.6.4 -class CRC32C : public HashTransformation -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = 4); - CRC32C(); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *hash, size_t size); - unsigned int DigestSize() const {return DIGESTSIZE;} - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "CRC32C";} - std::string AlgorithmName() const {return StaticAlgorithmName();} - - /// \brief Updates a CRC with additional input - /// \param b the additional input as a byte - void UpdateByte(byte b) {m_crc = m_tab[CRC32_INDEX(m_crc) ^ b] ^ CRC32_SHIFTED(m_crc);} - - /// \brief Retrieves the i-th byte of the CRC - /// \param i the additional input as a byte - /// \return the byte at the i-th position - byte GetCrcByte(size_t i) const {return reinterpret_cast(&m_crc)[i];} - - std::string AlgorithmProvider() const; - -protected: - void Reset() {m_crc = CRC32_NEGL;} - -private: - static const word32 m_tab[256]; - word32 m_crc; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/cryptlib.h b/third_party/cryptoppwin/include/cryptopp/cryptlib.h deleted file mode 100644 index 4a5c83bf..00000000 --- a/third_party/cryptoppwin/include/cryptopp/cryptlib.h +++ /dev/null @@ -1,3384 +0,0 @@ -// cryptlib.h - originally written and placed in the public domain by Wei Dai - -/// \file cryptlib.h -/// \brief Abstract base classes that provide a uniform interface to this library. - -/*! \mainpage Crypto++ Library 8.9 API Reference -
-
Abstract Base Classes
- cryptlib.h -
Authenticated Encryption Modes
- CCM, EAX, \ref GCM "GCM (2K tables)", \ref GCM "GCM (64K tables)" -
Block Ciphers
- \ref Rijndael "AES", ARIA, Weak::ARC4, Blowfish, BTEA, \ref CHAM128 "CHAM (64/128)", Camellia, - \ref CAST128 "CAST (128/256)", DES, \ref DES_EDE2 "2-key Triple-DES", \ref DES_EDE3 "3-key Triple-DES", - \ref DES_XEX3 "DESX", GOST, HIGHT, IDEA, LEA, \ref LR "Luby-Rackoff", \ref Kalyna128 "Kalyna (128/256/512)", - MARS, RC2, RC5, RC6, \ref SAFER_K "SAFER-K", \ref SAFER_SK "SAFER-SK", SEED, Serpent, - \ref SHACAL2 "SHACAL-2", SHARK, \ref SIMECK64 "SIMECK (32/64)" SKIPJACK, SM4, Square, TEA, - \ref ThreeWay "3-Way", \ref Threefish256 "Threefish (256/512/1024)", Twofish, XTEA -
Stream Ciphers
- \ref ChaCha "ChaCha (8/12/20)", \ref HC128 "HC-128/256", \ref Panama "Panama-LE", \ref Panama "Panama-BE", - Rabbit, Salsa20, \ref SEAL "SEAL-LE", \ref SEAL "SEAL-BE", WAKE, XSalsa20 -
Hash Functions
- BLAKE2s, BLAKE2b, \ref Keccak "Keccak (F1600)", SHA1, SHA224, SHA256, SHA384, SHA512, - \ref SHA3 "SHA-3", SM3, LSH (256/512), Tiger, RIPEMD160, RIPEMD256, SipHash, Whirlpool, - Weak::MD2, Weak::MD4, Weak::MD5 -
Non-Cryptographic Checksums
- CRC32, CRC32C, Adler32 -
Message Authentication Codes
- BLAKE2b, BLAKE2s, CBC_MAC, CMAC, DMAC, \ref GCM "GCM (GMAC)", HMAC, Poly1305, TTMAC, VMAC -
Random Number Generators
- NullRNG, LC_RNG, RandomPool, BlockingRng, NonblockingRng, AutoSeededRandomPool, AutoSeededX917RNG, - NIST Hash_DRBG and HMAC_DRBG, \ref MersenneTwister "MersenneTwister (MT19937 and MT19937-AR)", - DARN, RDRAND, RDSEED -
Key Derivation and Password-based Cryptography
- HKDF, \ref PKCS12_PBKDF "PBKDF (PKCS #12)", \ref PKCS5_PBKDF1 "PBKDF-1 (PKCS #5)", - \ref PKCS5_PBKDF2_HMAC "PBKDF-2/HMAC (PKCS #5)" -
Public Key Cryptosystems
- DLIES, ECIES, LUCES, RSAES, RabinES, LUC_IES -
Public Key Signature Schemes
- DSA, DSA2, \ref ed25519 "Ed25519", GDSA, ECDSA, NR, ECNR, LUCSS, RSASS, RSASS_ISO, - RabinSS, RWSS, ESIGN -
Key Agreement
- DH, DH2, \ref x25519 "X25519", \ref MQV_Domain "MQV", \ref HMQV_Domain "HMQV", - \ref FHMQV_Domain "FHMQV", ECDH, x25519, ECMQV, ECHMQV, ECFHMQV, XTR_DH -
Algebraic Structures
- Integer, PolynomialMod2, PolynomialOver, RingOfPolynomialsOver, - ModularArithmetic, MontgomeryRepresentation, GFP2_ONB, GF2NP, GF256, GF2_32, EC2N, ECP -
Secret Sharing and Information Dispersal
- SecretSharing, SecretRecovery, InformationDispersal, InformationRecovery -
Compression
- Deflator, Inflator, Gzip, Gunzip, ZlibCompressor, ZlibDecompressor -
Input Source Classes
- StringSource, ArraySource, VectorSource, FileSource, RandomNumberSource -
Output Sink Classes
- StringSinkTemplate, StringSink, VectorSink, ArraySink, FileSink, RandomNumberSink -
Filter Wrappers
- StreamTransformationFilter, AuthenticatedEncryptionFilter, AuthenticatedDecryptionFilter, HashFilter, - HashVerificationFilter, SignerFilter, SignatureVerificationFilter -
Binary to Text Encoders and Decoders
- HexEncoder, HexDecoder, Base64Encoder, Base64Decoder, Base64URLEncoder, Base64URLDecoder, Base32Encoder, - Base32Decoder -
Wrappers for OS features
- Timer, ThreadUserTimer - -
- - - -

This reference manual is a work in progress. Some classes lack detailed descriptions. -

Click here to download a zip archive containing this manual. -

Thanks to Ryan Phillips for providing the Doxygen configuration file -and getting us started on the manual. -*/ - -#ifndef CRYPTOPP_CRYPTLIB_H -#define CRYPTOPP_CRYPTLIB_H - -#include "config.h" -#include "stdcpp.h" -#include "trap.h" - -// C5264 new for VS2022/v17.4, MSC v17.3.4 -// https://github.com/weidai11/cryptopp/issues/1185 -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4127 4189 4505 4702) -# if (CRYPTOPP_MSC_VERSION >= 1933) -# pragma warning(disable: 5264) -# endif -#endif - -NAMESPACE_BEGIN(CryptoPP) - -// forward declarations -class Integer; -class RandomNumberGenerator; -class BufferedTransformation; - -/// \brief Specifies a direction for a cipher to operate -/// \sa BlockTransformation::IsForwardTransformation(), BlockTransformation::IsPermutation(), BlockTransformation::GetCipherDirection() -enum CipherDir { - /// \brief the cipher is performing encryption - ENCRYPTION, - /// \brief the cipher is performing decryption - DECRYPTION}; - -/// \brief Represents infinite time -CRYPTOPP_CONST_OR_CONSTEXPR unsigned long INFINITE_TIME = ULONG_MAX; - -// VC60 workaround: using enums as template parameters causes problems -/// \brief Converts an enumeration to a type suitable for use as a template parameter -template -struct EnumToType -{ - static ENUM_TYPE ToEnum() {return static_cast(VALUE);} -}; - -/// \brief Provides the byte ordering -/// \details Big-endian and little-endian modes are supported. Bi-endian and PDP-endian modes -/// are not supported. -enum ByteOrder { - /// \brief byte order is little-endian - LITTLE_ENDIAN_ORDER = 0, - /// \brief byte order is big-endian - BIG_ENDIAN_ORDER = 1}; - -/// \brief Provides a constant for LittleEndian -typedef EnumToType LittleEndian; -/// \brief Provides a constant for BigEndian -typedef EnumToType BigEndian; - -/// \brief Base class for all exceptions thrown by the library -/// \details All library exceptions directly or indirectly inherit from the Exception class. -/// The Exception class itself inherits from std::exception. The library does not use -/// std::runtime_error derived classes. -class CRYPTOPP_DLL Exception : public std::exception -{ -public: - /// \enum ErrorType - /// \brief Error types or categories - enum ErrorType { - /// \brief A method was called which was not implemented - NOT_IMPLEMENTED, - /// \brief An invalid argument was detected - INVALID_ARGUMENT, - /// \brief BufferedTransformation received a Flush(true) signal but can't flush buffers - CANNOT_FLUSH, - /// \brief Data integerity check, such as CRC or MAC, failed - DATA_INTEGRITY_CHECK_FAILED, - /// \brief Input data was received that did not conform to expected format - INVALID_DATA_FORMAT, - /// \brief Error reading from input device or writing to output device - IO_ERROR, - /// \brief Some other error occurred not belonging to other categories - OTHER_ERROR - }; - - virtual ~Exception() throw() {} - - /// \brief Construct a new Exception - explicit Exception(ErrorType errorType, const std::string &s) : m_errorType(errorType), m_what(s) {} - - /// \brief Retrieves a C-string describing the exception - const char *what() const throw() {return (m_what.c_str());} - /// \brief Retrieves a string describing the exception - const std::string &GetWhat() const {return m_what;} - /// \brief Sets the error string for the exception - void SetWhat(const std::string &s) {m_what = s;} - /// \brief Retrieves the error type for the exception - ErrorType GetErrorType() const {return m_errorType;} - /// \brief Sets the error type for the exceptions - void SetErrorType(ErrorType errorType) {m_errorType = errorType;} - -private: - ErrorType m_errorType; - std::string m_what; -}; - -/// \brief An invalid argument was detected -class CRYPTOPP_DLL InvalidArgument : public Exception -{ -public: - /// \brief Construct an InvalidArgument - /// \param s the message for the exception - /// \details The member function what() returns s. - explicit InvalidArgument(const std::string &s) : Exception(INVALID_ARGUMENT, s) {} -}; - -/// \brief Input data was received that did not conform to expected format -class CRYPTOPP_DLL InvalidDataFormat : public Exception -{ -public: - /// \brief Construct an InvalidDataFormat - /// \param s the message for the exception - /// \details The member function what() returns s. - explicit InvalidDataFormat(const std::string &s) : Exception(INVALID_DATA_FORMAT, s) {} -}; - -/// \brief A decryption filter encountered invalid ciphertext -class CRYPTOPP_DLL InvalidCiphertext : public InvalidDataFormat -{ -public: - /// \brief Construct an InvalidCiphertext - /// \param s the message for the exception - /// \details The member function what() returns s. - explicit InvalidCiphertext(const std::string &s) : InvalidDataFormat(s) {} -}; - -/// \brief A method was called which was not implemented -class CRYPTOPP_DLL NotImplemented : public Exception -{ -public: - /// \brief Construct an NotImplemented - /// \param s the message for the exception - /// \details The member function what() returns s. - explicit NotImplemented(const std::string &s) : Exception(NOT_IMPLEMENTED, s) {} -}; - -/// \brief Flush(true) was called but it can't completely flush its buffers -class CRYPTOPP_DLL CannotFlush : public Exception -{ -public: - /// \brief Construct an CannotFlush - /// \param s the message for the exception - /// \details The member function what() returns s. - explicit CannotFlush(const std::string &s) : Exception(CANNOT_FLUSH, s) {} -}; - -/// \brief The operating system reported an error -class CRYPTOPP_DLL OS_Error : public Exception -{ -public: - virtual ~OS_Error() throw() {} - - /// \brief Construct an OS_Error - /// \param errorType the error type - /// \param s the message for the exception - /// \param operation the operation for the exception - /// \param errorCode the error code - /// \details The member function what() returns s. - OS_Error(ErrorType errorType, const std::string &s, const std::string& operation, int errorCode) - : Exception(errorType, s), m_operation(operation), m_errorCode(errorCode) {} - - /// \brief Retrieve the operating system API that reported the error - const std::string & GetOperation() const {return m_operation;} - /// \brief Retrieve the error code returned by the operating system - int GetErrorCode() const {return m_errorCode;} - -protected: - std::string m_operation; - int m_errorCode; -}; - -/// \brief Returns a decoding results -struct CRYPTOPP_DLL DecodingResult -{ - /// \brief Constructs a DecodingResult - /// \details isValidCoding is initialized to false and messageLength is - /// initialized to 0. - explicit DecodingResult() : isValidCoding(false), messageLength(0) {} - /// \brief Constructs a DecodingResult - /// \param len the message length - /// \details isValidCoding is initialized to true. - explicit DecodingResult(size_t len) : isValidCoding(true), messageLength(len) {} - - /// \brief Compare two DecodingResult - /// \param rhs the other DecodingResult - /// \return true if either isValidCoding or messageLength is \a not equal, - /// false otherwise - bool operator==(const DecodingResult &rhs) const {return isValidCoding == rhs.isValidCoding && messageLength == rhs.messageLength;} - /// \brief Compare two DecodingResult - /// \param rhs the other DecodingResult - /// \return true if either isValidCoding or messageLength is \a not equal, - /// false otherwise - /// \details Returns !operator==(rhs). - bool operator!=(const DecodingResult &rhs) const {return !operator==(rhs);} - - /// \brief Flag to indicate the decoding is valid - bool isValidCoding; - /// \brief Recovered message length if isValidCoding is true, undefined otherwise - size_t messageLength; -}; - -/// \brief Interface for retrieving values given their names -/// \details This class is used to safely pass a variable number of arbitrarily -/// typed arguments to functions and to read values from keys and crypto parameters. -/// \details To obtain an object that implements NameValuePairs for the purpose of -/// parameter passing, use the MakeParameters() function. -/// \details To get a value from NameValuePairs, you need to know the name and the -/// type of the value. Call GetValueNames() on a NameValuePairs object to obtain a -/// list of value names that it supports. then look at the Name namespace -/// documentation to see what the type of each value is, or alternatively, call -/// GetIntValue() with the value name, and if the type is not int, a -/// ValueTypeMismatch exception will be thrown and you can get the actual type from -/// the exception object. -/// \sa NullNameValuePairs, g_nullNameValuePairs, -/// NameValuePairs on the -/// Crypto++ wiki -class NameValuePairs -{ -public: - virtual ~NameValuePairs() {} - - /// \brief Thrown when an unexpected type is encountered - /// \details Exception thrown when trying to retrieve a value using a different - /// type than expected - class CRYPTOPP_DLL ValueTypeMismatch : public InvalidArgument - { - public: - /// \brief Construct a ValueTypeMismatch - /// \param name the name of the value - /// \param stored the \a actual type of the value stored - /// \param retrieving the \a presumed type of the value retrieved - ValueTypeMismatch(const std::string &name, const std::type_info &stored, const std::type_info &retrieving) - : InvalidArgument("NameValuePairs: type mismatch for '" + name + "', stored '" + stored.name() + "', trying to retrieve '" + retrieving.name() + "'") - , m_stored(stored), m_retrieving(retrieving) {} - - /// \brief Provides the stored type - /// \return the C++ mangled name of the type - const std::type_info & GetStoredTypeInfo() const {return m_stored;} - - /// \brief Provides the retrieveing type - /// \return the C++ mangled name of the type - const std::type_info & GetRetrievingTypeInfo() const {return m_retrieving;} - - private: - const std::type_info &m_stored; - const std::type_info &m_retrieving; - }; - - /// \brief Get a copy of this object or subobject - /// \tparam T class or type - /// \param object reference to a variable that receives the value - template - bool GetThisObject(T &object) const - { - return GetValue((std::string("ThisObject:")+typeid(T).name()).c_str(), object); - } - - /// \brief Get a pointer to this object - /// \tparam T class or type - /// \param ptr reference to a pointer to a variable that receives the value - template - bool GetThisPointer(T *&ptr) const - { - return GetValue((std::string("ThisPointer:")+typeid(T).name()).c_str(), ptr); - } - - /// \brief Get a named value - /// \tparam T class or type - /// \param name the name of the object or value to retrieve - /// \param value reference to a variable that receives the value - /// \return true if the value was retrieved, false otherwise - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - template - bool GetValue(const char *name, T &value) const - { - return GetVoidValue(name, typeid(T), &value); - } - - /// \brief Get a named value - /// \tparam T class or type - /// \param name the name of the object or value to retrieve - /// \param defaultValue the default value of the class or type if it does not exist - /// \return the object or value - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - template - T GetValueWithDefault(const char *name, T defaultValue) const - { - T value; - bool result = GetValue(name, value); - // No assert... this recovers from failure - if (result) {return value;} - return defaultValue; - } - - /// \brief Get a list of value names that can be retrieved - /// \return a list of names available to retrieve - /// \details the items in the list are delimited with a colon. - CRYPTOPP_DLL std::string GetValueNames() const - {std::string result; GetValue("ValueNames", result); return result;} - - /// \brief Get a named value with type int - /// \param name the name of the value to retrieve - /// \param value the value retrieved upon success - /// \return true if an int value was retrieved, false otherwise - /// \details GetIntValue() is used to ensure we don't accidentally try to get an - /// unsigned int or some other type when we mean int (which is the most common case) - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - CRYPTOPP_DLL bool GetIntValue(const char *name, int &value) const - {return GetValue(name, value);} - - /// \brief Get a named value with type int, with default - /// \param name the name of the value to retrieve - /// \param defaultValue the default value if the name does not exist - /// \return the value retrieved on success or the default value - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - CRYPTOPP_DLL int GetIntValueWithDefault(const char *name, int defaultValue) const - {return GetValueWithDefault(name, defaultValue);} - - /// \brief Get a named value with type word64 - /// \param name the name of the value to retrieve - /// \param value the value retrieved upon success - /// \return true if an word64 value was retrieved, false otherwise - /// \sa GetValue(), GetValueWithDefault(), GetWord64ValueWithDefault(), GetIntValue(), - /// GetIntValueWithDefault(), GetRequiredParameter() and GetRequiredIntParameter() - CRYPTOPP_DLL bool GetWord64Value(const char *name, word64 &value) const - {return GetValue(name, value);} - - /// \brief Get a named value with type word64, with default - /// \param name the name of the value to retrieve - /// \param defaultValue the default value if the name does not exist - /// \return the value retrieved on success or the default value - /// \sa GetValue(), GetValueWithDefault(), GetWord64Value(), GetIntValue(), - /// GetIntValueWithDefault(), GetRequiredParameter() and GetRequiredWord64Parameter() - CRYPTOPP_DLL word64 GetWord64ValueWithDefault(const char *name, word64 defaultValue) const - {return GetValueWithDefault(name, defaultValue);} - - /// \brief Ensures an expected name and type is present - /// \param name the name of the value - /// \param stored the type that was stored for the name - /// \param retrieving the type that is being retrieved for the name - /// \throw ValueTypeMismatch - /// \details ThrowIfTypeMismatch() effectively performs a type safety check. - /// stored and retrieving are C++ mangled names for the type. - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - CRYPTOPP_DLL static void CRYPTOPP_API ThrowIfTypeMismatch(const char *name, const std::type_info &stored, const std::type_info &retrieving) - {if (stored != retrieving) throw ValueTypeMismatch(name, stored, retrieving);} - - /// \brief Retrieves a required name/value pair - /// \tparam T class or type - /// \param className the name of the class - /// \param name the name of the value - /// \param value reference to a variable to receive the value - /// \throw InvalidArgument - /// \details GetRequiredParameter() throws InvalidArgument if the name - /// is not present or not of the expected type T. - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - template - void GetRequiredParameter(const char *className, const char *name, T &value) const - { - if (!GetValue(name, value)) - throw InvalidArgument(std::string(className) + ": missing required parameter '" + name + "'"); - } - - /// \brief Retrieves a required name/value pair - /// \param className the name of the class - /// \param name the name of the value - /// \param value reference to a variable to receive the value - /// \throw InvalidArgument - /// \details GetRequiredParameter() throws InvalidArgument if the name - /// is not present or not of the expected type T. - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - CRYPTOPP_DLL void GetRequiredIntParameter(const char *className, const char *name, int &value) const - { - if (!GetIntValue(name, value)) - throw InvalidArgument(std::string(className) + ": missing required parameter '" + name + "'"); - } - - /// \brief Get a named value - /// \param name the name of the object or value to retrieve - /// \param valueType reference to a variable that receives the value - /// \param pValue void pointer to a variable that receives the value - /// \return true if the value was retrieved, false otherwise - /// \details GetVoidValue() retrieves the value of name if it exists. - /// \note GetVoidValue() is an internal function and should be implemented - /// by derived classes. Users should use one of the other functions instead. - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - CRYPTOPP_DLL virtual bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const =0; -}; - -// Doxygen cannot handle initialization -#if CRYPTOPP_DOXYGEN_PROCESSING -/// \brief Default channel for BufferedTransformation -/// \details DEFAULT_CHANNEL is equal to an empty string -/// \details The definition for DEFAULT_CHANNEL is in cryptlib.cpp. -/// It can be subject to Static -/// Initialization Order Fiasco. If you experience a crash in -/// DEFAULT_CHANNEL where the string object is NULL, then you probably have -/// a global object using DEFAULT_CHANNEL before it has been constructed. -const std::string DEFAULT_CHANNEL; - -/// \brief Channel for additional authenticated data -/// \details AAD_CHANNEL is equal to "AAD" -/// \details The definition for AAD_CHANNEL is in cryptlib.cpp. -/// It can be subject to Static -/// Initialization Order Fiasco. If you experience a crash in -/// AAD_CHANNEL where the string object is NULL, then you probably have a -/// global object using AAD_CHANNEL before it has been constructed. -const std::string AAD_CHANNEL; - -/// \brief An empty set of name-value pairs -/// \details The definition for g_nullNameValuePairs is in cryptlib.cpp. -/// It can be subject to Static -/// Initialization Order Fiasco. If you experience a crash in -/// g_nullNameValuePairs where the string object is NULL, then you probably -/// have a global object using g_nullNameValuePairs before it has been -/// constructed. -const NameValuePairs& g_nullNameValuePairs; - -#else -extern CRYPTOPP_DLL const std::string DEFAULT_CHANNEL; -extern CRYPTOPP_DLL const std::string AAD_CHANNEL; -extern CRYPTOPP_DLL const NameValuePairs& g_nullNameValuePairs; -#endif - -// Document additional name spaces which show up elsewhere in the sources. -#if CRYPTOPP_DOXYGEN_PROCESSING -/// \brief Namespace containing value name definitions. -/// \details Name is part of the CryptoPP namespace. -/// \details The semantics of value names, types are: -///

-///     ThisObject:ClassName (ClassName, copy of this object or a subobject)
-///     ThisPointer:ClassName (const ClassName *, pointer to this object or a subobject)
-/// 
-DOCUMENTED_NAMESPACE_BEGIN(Name) -// more names defined in argnames.h -DOCUMENTED_NAMESPACE_END - -/// \brief Namespace containing weak and wounded algorithms. -/// \details Weak is part of the CryptoPP namespace. Schemes and algorithms are moved into Weak -/// when their security level is reduced to an unacceptable level by contemporary standards. -/// \details To use an algorithm in the Weak namespace, you must \c \#define -/// CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 before including a header for a weak or wounded -/// algorithm. For example: -///
  \c \#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
-///   \c \#include 
-///   ...
-///   CryptoPP::Weak::MD5 md5;
-///   
-DOCUMENTED_NAMESPACE_BEGIN(Weak) -// weak and wounded algorithms -DOCUMENTED_NAMESPACE_END -#endif - -/// \brief Namespace containing NaCl library functions -/// \details TweetNaCl is a compact and portable reimplementation of the NaCl library. -DOCUMENTED_NAMESPACE_BEGIN(NaCl) -// crypto_box, crypto_box_open, crypto_sign, and crypto_sign_open (and friends) -DOCUMENTED_NAMESPACE_END - -/// \brief Namespace containing testing and benchmark classes. -/// \details Source files for classes in the Test namespaces include -/// test.cpp, validat#.cpp and bench#.cpp. -DOCUMENTED_NAMESPACE_BEGIN(Test) -// testing and benchmark classes -DOCUMENTED_NAMESPACE_END - -// ******************************************************** - -/// \brief Interface for cloning objects -/// \note this is \a not implemented by most classes -/// \sa ClonableImpl, NotCopyable -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Clonable -{ -public: - virtual ~Clonable() {} - - /// \brief Copies this object - /// \return a copy of this object - /// \throw NotImplemented - /// \note this is \a not implemented by most classes - /// \sa NotCopyable - virtual Clonable* Clone() const {throw NotImplemented("Clone() is not implemented yet.");} // TODO: make this =0 -}; - -/// \brief Interface for all crypto algorithms -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Algorithm : public Clonable -{ -public: - virtual ~Algorithm() {} - - /// \brief Interface for all crypto algorithms - /// \param checkSelfTestStatus determines whether the object can proceed if the self - /// tests have not been run or failed. - /// \details When FIPS 140-2 compliance is enabled and checkSelfTestStatus == true, - /// this constructor throws SelfTestFailure if the self test hasn't been run or fails. - /// \details FIPS 140-2 compliance is disabled by default. It is only used by certain - /// versions of the library when the library is built as a DLL on Windows. Also see - /// CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 in config.h. - Algorithm(bool checkSelfTestStatus = true); - - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like AES or AES/GCM. - /// Some algorithms do not have standard names yet. For example, there is no standard - /// algorithm name for Shoup's ECIES. - /// \note AlgorithmName is not universally implemented yet. - virtual std::string AlgorithmName() const {return "unknown";} - - /// \brief Retrieve the provider of this algorithm - /// \return the algorithm provider - /// \details The algorithm provider can be a name like "C++", "SSE", "NEON", "AESNI", - /// "ARMv8" and "Power8". C++ is standard C++ code. Other labels, like SSE, - /// usually indicate a specialized implementation using instructions from a higher - /// instruction set architecture (ISA). Future labels may include external hardware - /// like a hardware security module (HSM). - /// \details Generally speaking Wei Dai's original IA-32 ASM code falls under "SSE2". - /// Labels like "SSSE3" and "SSE4.1" follow after Wei's code and use intrinsics - /// instead of ASM. - /// \details Algorithms which combine different instructions or ISAs provide the - /// dominant one. For example on x86 AES/GCM returns "AESNI" rather than - /// "CLMUL" or "AES+SSE4.1" or "AES+CLMUL" or "AES+SSE4.1+CLMUL". - /// \note Provider is not universally implemented yet. - /// \since Crypto++ 8.0 - virtual std::string AlgorithmProvider() const {return "C++";} -}; - -/// \brief Interface for algorithms that take byte strings as keys -/// \sa FixedKeyLength(), VariableKeyLength(), SameKeyLengthAs(), SimpleKeyingInterfaceImpl() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE SimpleKeyingInterface -{ -public: - virtual ~SimpleKeyingInterface() {} - - /// \brief Returns smallest valid key length - /// \return the minimum key length, in bytes - virtual size_t MinKeyLength() const =0; - - /// \brief Returns largest valid key length - /// \return the maximum key length, in bytes - virtual size_t MaxKeyLength() const =0; - - /// \brief Returns default key length - /// \return the default key length, in bytes - virtual size_t DefaultKeyLength() const =0; - - /// \brief Returns a valid key length for the algorithm - /// \param keylength the size of the key, in bytes - /// \return the valid key length, in bytes - /// \details keylength is provided in bytes, not bits. If keylength is less than MIN_KEYLENGTH, - /// then the function returns MIN_KEYLENGTH. If keylength is greater than MAX_KEYLENGTH, - /// then the function returns MAX_KEYLENGTH. if If keylength is a multiple of KEYLENGTH_MULTIPLE, - /// then keylength is returned. Otherwise, the function returns a \a lower multiple of - /// KEYLENGTH_MULTIPLE. - virtual size_t GetValidKeyLength(size_t keylength) const =0; - - /// \brief Returns whether keylength is a valid key length - /// \param keylength the requested keylength - /// \return true if keylength is valid, false otherwise - /// \details Internally the function calls GetValidKeyLength() - virtual bool IsValidKeyLength(size_t keylength) const - {return keylength == GetValidKeyLength(keylength);} - - /// \brief Sets or reset the key of this object - /// \param key the key to use when keying the object - /// \param length the size of the key, in bytes - /// \param params additional initialization parameters to configure this object - virtual void SetKey(const byte *key, size_t length, const NameValuePairs ¶ms = g_nullNameValuePairs); - - /// \brief Sets or reset the key of this object - /// \param key the key to use when keying the object - /// \param length the size of the key, in bytes - /// \param rounds the number of rounds to apply the transformation function, - /// if applicable - /// \details SetKeyWithRounds() calls SetKey() with a NameValuePairs - /// object that only specifies rounds. rounds is an integer parameter, - /// and -1 means use the default number of rounds. - void SetKeyWithRounds(const byte *key, size_t length, int rounds); - - /// \brief Sets or reset the key of this object - /// \param key the key to use when keying the object - /// \param length the size of the key, in bytes - /// \param iv the initialization vector to use when keying the object - /// \param ivLength the size of the iv, in bytes - /// \details SetKeyWithIV() calls SetKey() with a NameValuePairs - /// that only specifies IV. The IV is a byte buffer with size ivLength. - /// ivLength is an integer parameter, and -1 means use IVSize(). - void SetKeyWithIV(const byte *key, size_t length, const byte *iv, size_t ivLength); - - /// \brief Sets or reset the key of this object - /// \param key the key to use when keying the object - /// \param length the size of the key, in bytes - /// \param iv the initialization vector to use when keying the object - /// \details SetKeyWithIV() calls SetKey() with a NameValuePairs() object - /// that only specifies iv. iv is a byte buffer, and it must have - /// a size IVSize(). - void SetKeyWithIV(const byte *key, size_t length, const byte *iv) - {SetKeyWithIV(key, length, iv, IVSize());} - - /// \brief Secure IVs requirements as enumerated values. - /// \details Provides secure IV requirements as a monotonically increasing enumerated values. - /// Requirements can be compared using less than (<) and greater than (>). For example, - /// UNIQUE_IV < RANDOM_IV and UNPREDICTABLE_RANDOM_IV > RANDOM_IV. - /// \details Objects that use SimpleKeyingInterface do not support an optional IV. That is, - /// an IV must be present or it must be absent. If you wish to support an optional IV then - /// provide two classes - one with an IV and one without an IV. - /// \sa IsResynchronizable(), CanUseRandomIVs(), CanUsePredictableIVs(), CanUseStructuredIVs() - enum IV_Requirement { - /// \brief The IV must be unique - UNIQUE_IV = 0, - /// \brief The IV must be random and possibly predictable - RANDOM_IV, - /// \brief The IV must be random and unpredictable - UNPREDICTABLE_RANDOM_IV, - /// \brief The IV is set by the object - INTERNALLY_GENERATED_IV, - /// \brief The object does not use an IV - NOT_RESYNCHRONIZABLE - }; - - /// \brief Minimal requirement for secure IVs - /// \return the secure IV requirement of the algorithm - virtual IV_Requirement IVRequirement() const =0; - - /// \brief Determines if the object can be resynchronized - /// \return true if the object can be resynchronized (i.e. supports initialization vectors), false otherwise - /// \note If this function returns true, and no IV is passed to SetKey() and CanUseStructuredIVs()==true, - /// an IV of all 0's will be assumed. - bool IsResynchronizable() const {return IVRequirement() < NOT_RESYNCHRONIZABLE;} - - /// \brief Determines if the object can use random IVs - /// \return true if the object can use random IVs (in addition to ones returned by GetNextIV), false otherwise - bool CanUseRandomIVs() const {return IVRequirement() <= UNPREDICTABLE_RANDOM_IV;} - - /// \brief Determines if the object can use random but possibly predictable IVs - /// \return true if the object can use random but possibly predictable IVs (in addition to ones returned by - /// GetNextIV), false otherwise - bool CanUsePredictableIVs() const {return IVRequirement() <= RANDOM_IV;} - - /// \brief Determines if the object can use structured IVs - /// \return true if the object can use structured IVs, false otherwise - /// \details CanUseStructuredIVs() indicates whether the object can use structured IVs; for example a counter - /// (in addition to ones returned by GetNextIV). - bool CanUseStructuredIVs() const {return IVRequirement() <= UNIQUE_IV;} - - /// \brief Returns length of the IV accepted by this object - /// \return the size of an IV, in bytes - /// \throw NotImplemented() if the object does not support resynchronization - /// \details The default implementation throws NotImplemented - virtual unsigned int IVSize() const - {throw NotImplemented(GetAlgorithm().AlgorithmName() + ": this object doesn't support resynchronization");} - - /// \brief Provides the default size of an IV - /// \return default length of IVs accepted by this object, in bytes - unsigned int DefaultIVLength() const {return IVSize();} - - /// \brief Provides the minimum size of an IV - /// \return minimal length of IVs accepted by this object, in bytes - /// \throw NotImplemented() if the object does not support resynchronization - virtual unsigned int MinIVLength() const {return IVSize();} - - /// \brief Provides the maximum size of an IV - /// \return maximal length of IVs accepted by this object, in bytes - /// \throw NotImplemented() if the object does not support resynchronization - virtual unsigned int MaxIVLength() const {return IVSize();} - - /// \brief Resynchronize with an IV - /// \param iv the initialization vector - /// \param ivLength the size of the initialization vector, in bytes - /// \details Resynchronize() resynchronizes with an IV provided by the caller. ivLength=-1 means use IVSize(). - /// \throw NotImplemented() if the object does not support resynchronization - virtual void Resynchronize(const byte *iv, int ivLength=-1) { - CRYPTOPP_UNUSED(iv); CRYPTOPP_UNUSED(ivLength); - throw NotImplemented(GetAlgorithm().AlgorithmName() + ": this object doesn't support resynchronization"); - } - - /// \brief Retrieves a secure IV for the next message - /// \param rng a RandomNumberGenerator to produce keying material - /// \param iv a block of bytes to receive the IV - /// \details The IV must be at least IVSize() in length. - /// \details This method should be called after you finish encrypting one message and are ready - /// to start the next one. After calling it, you must call SetKey() or Resynchronize(). - /// before using this object again. - /// \details Internally, the base class implementation calls RandomNumberGenerator's GenerateBlock() - /// \note This method is not implemented on decryption objects. - virtual void GetNextIV(RandomNumberGenerator &rng, byte *iv); - -protected: - /// \brief Returns the base class Algorithm - /// \return the base class Algorithm - virtual const Algorithm & GetAlgorithm() const =0; - - /// \brief Sets the key for this object without performing parameter validation - /// \param key a byte buffer used to key the cipher - /// \param length the length of the byte buffer - /// \param params additional parameters passed as NameValuePairs - /// \details key must be at least DEFAULT_KEYLENGTH in length. - virtual void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) =0; - - /// \brief Validates the key length - /// \param length the size of the keying material, in bytes - /// \throw InvalidKeyLength if the key length is invalid - void ThrowIfInvalidKeyLength(size_t length); - - /// \brief Validates the object - /// \throw InvalidArgument if the IV is present - /// \details Internally, the default implementation calls IsResynchronizable() and throws - /// InvalidArgument if the function returns true. - /// \note called when no IV is passed - void ThrowIfResynchronizable(); - - /// \brief Validates the IV - /// \param iv the IV with a length of IVSize, in bytes - /// \throw InvalidArgument on failure - /// \details Internally, the default implementation checks the iv. If iv is not NULL or nullptr, - /// then the function succeeds. If iv is NULL, then IVRequirement is checked against - /// UNPREDICTABLE_RANDOM_IV. If IVRequirement is UNPREDICTABLE_RANDOM_IV, then - /// then the function succeeds. Otherwise, an exception is thrown. - void ThrowIfInvalidIV(const byte *iv); - - /// \brief Validates the IV length - /// \param length the size of an IV, in bytes - /// \throw InvalidArgument if the IV length is invalid - size_t ThrowIfInvalidIVLength(int length); - - /// \brief Retrieves and validates the IV - /// \param params NameValuePairs with the IV supplied as a ConstByteArrayParameter - /// \param size the length of the IV, in bytes - /// \return a pointer to the first byte of the IV - /// \throw InvalidArgument if the number of rounds are invalid - const byte * GetIVAndThrowIfInvalid(const NameValuePairs ¶ms, size_t &size); - - /// \brief Validates the key length - /// \param length the size of the keying material, in bytes - inline void AssertValidKeyLength(size_t length) const - {CRYPTOPP_UNUSED(length); CRYPTOPP_ASSERT(IsValidKeyLength(length));} -}; - -/// \brief Interface for the data processing part of block ciphers -/// \details Classes derived from BlockTransformation are block ciphers -/// in ECB mode (for example the DES::Encryption class), which are stateless. -/// These classes should not be used directly, but only in combination with -/// a mode class (see CipherModeDocumentation in modes.h). -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BlockTransformation : public Algorithm -{ -public: - virtual ~BlockTransformation() {} - - /// \brief Encrypt or decrypt a block - /// \param inBlock the input message before processing - /// \param outBlock the output message after processing - /// \param xorBlock an optional XOR mask - /// \details ProcessAndXorBlock encrypts or decrypts inBlock, xor with xorBlock, and write to outBlock. - /// \details The size of the block is determined by the block cipher and its documentation. Use - /// BLOCKSIZE at compile time, or BlockSize() at runtime. - /// \note The message can be transformed in-place, or the buffers must \a not overlap - /// \sa FixedBlockSize, BlockCipherFinal from seckey.h and BlockSize() - virtual void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const =0; - - /// \brief Encrypt or decrypt a block - /// \param inBlock the input message before processing - /// \param outBlock the output message after processing - /// \details ProcessBlock encrypts or decrypts inBlock and write to outBlock. - /// \details The size of the block is determined by the block cipher and its documentation. - /// Use BLOCKSIZE at compile time, or BlockSize() at runtime. - /// \sa FixedBlockSize, BlockCipherFinal from seckey.h and BlockSize() - /// \note The message can be transformed in-place, or the buffers must \a not overlap - void ProcessBlock(const byte *inBlock, byte *outBlock) const - {ProcessAndXorBlock(inBlock, NULLPTR, outBlock);} - - /// \brief Encrypt or decrypt a block in place - /// \param inoutBlock the input message before processing - /// \details ProcessBlock encrypts or decrypts inoutBlock in-place. - /// \details The size of the block is determined by the block cipher and its documentation. - /// Use BLOCKSIZE at compile time, or BlockSize() at runtime. - /// \sa FixedBlockSize, BlockCipherFinal from seckey.h and BlockSize() - void ProcessBlock(byte *inoutBlock) const - {ProcessAndXorBlock(inoutBlock, NULLPTR, inoutBlock);} - - /// Provides the block size of the cipher - /// \return the block size of the cipher, in bytes - virtual unsigned int BlockSize() const =0; - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - virtual unsigned int OptimalDataAlignment() const; - - /// \brief Determines if the transformation is a permutation - /// \return true if this is a permutation (i.e. there is an inverse transformation) - virtual bool IsPermutation() const {return true;} - - /// \brief Determines if the cipher is being operated in its forward direction - /// \return true if DIR is ENCRYPTION, false otherwise - /// \sa IsForwardTransformation(), IsPermutation(), GetCipherDirection() - virtual bool IsForwardTransformation() const =0; - - /// \brief Determines the number of blocks that can be processed in parallel - /// \return the number of blocks that can be processed in parallel, for bit-slicing implementations - /// \details Bit-slicing is often used to improve throughput and minimize timing attacks. - virtual unsigned int OptimalNumberOfParallelBlocks() const {return 1;} - - /// \brief Bit flags that control AdvancedProcessBlocks() behavior - enum FlagsForAdvancedProcessBlocks { - /// \brief inBlock is a counter - BT_InBlockIsCounter=1, - /// \brief should not modify block pointers - BT_DontIncrementInOutPointers=2, - /// \brief Xor inputs before transformation - BT_XorInput=4, - /// \brief perform the transformation in reverse - BT_ReverseDirection=8, - /// \brief Allow parallel transformations - BT_AllowParallel=16}; - - /// \brief Encrypt and xor multiple blocks using additional flags - /// \param inBlocks the input message before processing - /// \param xorBlocks an optional XOR mask - /// \param outBlocks the output message after processing - /// \param length the size of the blocks, in bytes - /// \param flags additional flags to control processing - /// \details Encrypt and xor multiple blocks according to FlagsForAdvancedProcessBlocks flags. - /// \note If BT_InBlockIsCounter is set, then the last byte of inBlocks may be modified. - virtual size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; - - /// \brief Provides the direction of the cipher - /// \return ENCRYPTION if IsForwardTransformation() is true, DECRYPTION otherwise - /// \sa IsForwardTransformation(), IsPermutation() - inline CipherDir GetCipherDirection() const {return IsForwardTransformation() ? ENCRYPTION : DECRYPTION;} -}; - -/// \brief Interface for the data processing portion of stream ciphers -/// \sa StreamTransformationFilter() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE StreamTransformation : public Algorithm -{ -public: - virtual ~StreamTransformation() {} - - /// \brief Provides a reference to this object - /// \return A reference to this object - /// \details Useful for passing a temporary object to a function that takes a non-const reference - StreamTransformation& Ref() {return *this;} - - /// \brief Provides the mandatory block size of the cipher - /// \return The block size of the cipher if input must be processed in blocks, 1 otherwise - /// \details Stream ciphers and some block ciphers modes of operation return 1. Modes that - /// return 1 must be able to process a single byte at a time, like counter mode. If a - /// mode of operation or block cipher cannot stream then it must not return 1. - /// \details When filters operate the mode or cipher, ProcessData will be called with a - /// string of bytes that is determined by MandatoryBlockSize and OptimalBlockSize. When a - /// policy is set, like 16-byte strings for a 16-byte block cipher, the filter will buffer - /// bytes until the specified number of bytes is available to the object. - /// \sa ProcessData, ProcessLastBlock, MandatoryBlockSize, MinLastBlockSize, BlockPaddingSchemeDef, IsLastBlockSpecial - virtual unsigned int MandatoryBlockSize() const {return 1;} - - /// \brief Provides the input block size most efficient for this cipher - /// \return The input block size that is most efficient for the cipher - /// \details The base class implementation returns MandatoryBlockSize(). - /// \note Optimal input length is - /// n * OptimalBlockSize() - GetOptimalBlockSizeUsed() for any n \> 0. - virtual unsigned int OptimalBlockSize() const {return MandatoryBlockSize();} - - /// \brief Provides the number of bytes used in the current block when processing at optimal block size. - /// \return the number of bytes used in the current block when processing at the optimal block size - virtual unsigned int GetOptimalBlockSizeUsed() const {return 0;} - - /// \brief Provides input and output data alignment for optimal performance - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - virtual unsigned int OptimalDataAlignment() const; - - /// \brief Encrypt or decrypt an array of bytes - /// \param outString the output byte buffer - /// \param inString the input byte buffer - /// \param length the size of the input and output byte buffers, in bytes - /// \details ProcessData is called with a string of bytes whose size depends on MandatoryBlockSize. - /// Either inString == outString, or they must not overlap. - /// \sa ProcessData, ProcessLastBlock, MandatoryBlockSize, MinLastBlockSize, BlockPaddingSchemeDef, IsLastBlockSpecial - virtual void ProcessData(byte *outString, const byte *inString, size_t length) =0; - - /// \brief Encrypt or decrypt the last block of data - /// \param outString the output byte buffer - /// \param outLength the size of the output byte buffer, in bytes - /// \param inString the input byte buffer - /// \param inLength the size of the input byte buffer, in bytes - /// \return the number of bytes used in outString - /// \details ProcessLastBlock is used when the last block of data is special and requires handling - /// by the cipher. The current implementation provides an output buffer with a size - /// inLength+2*MandatoryBlockSize(). The return value allows the cipher to expand cipher - /// text during encryption or shrink plain text during decryption. - /// \details This member function is used by CBC-CTS and OCB modes. - /// \sa ProcessData, ProcessLastBlock, MandatoryBlockSize, MinLastBlockSize, BlockPaddingSchemeDef, IsLastBlockSpecial - virtual size_t ProcessLastBlock(byte *outString, size_t outLength, const byte *inString, size_t inLength); - - /// \brief Provides the size of the last block - /// \return the minimum size of the last block - /// \details MinLastBlockSize() returns the minimum size of the last block. 0 indicates the last - /// block is not special. - /// \details MandatoryBlockSize() enlists one of two behaviors. First, if MandatoryBlockSize() - /// returns 1, then the cipher can be streamed and ProcessData() is called with the tail bytes. - /// Second, if MandatoryBlockSize() returns non-0, then the string of bytes is padded to - /// MandatoryBlockSize() according to the padding mode. Then, ProcessData() is called with the - /// padded string of bytes. - /// \details Some authenticated encryption modes are not expressed well with MandatoryBlockSize() - /// and MinLastBlockSize(). For example, AES/OCB uses 16-byte blocks (MandatoryBlockSize = 16) - /// and the last block requires special processing (MinLastBlockSize = 0). However, 0 is a valid - /// last block size for OCB and the special processing is custom padding, and not standard PKCS - /// padding. In response an unambiguous IsLastBlockSpecial() was added. - /// \sa ProcessData, ProcessLastBlock, MandatoryBlockSize, MinLastBlockSize, BlockPaddingSchemeDef, IsLastBlockSpecial - virtual unsigned int MinLastBlockSize() const {return 0;} - - /// \brief Determines if the last block receives special processing - /// \return true if the last block receives special processing, false otherwise. - /// \details Some authenticated encryption modes are not expressed well with - /// MandatoryBlockSize() and MinLastBlockSize(). For example, AES/OCB uses - /// 16-byte blocks (MandatoryBlockSize = 16) and the last block requires special processing - /// (MinLastBlockSize = 0). However, 0 is a valid last block size for OCB and the special - /// processing is custom padding, and not standard PKCS padding. In response an - /// unambiguous IsLastBlockSpecial() was added. - /// \details When IsLastBlockSpecial() returns false nothing special happens. All the former - /// rules and behaviors apply. This is the default behavior of IsLastBlockSpecial(). - /// \details When IsLastBlockSpecial() returns true four things happen. First, MinLastBlockSize = 0 - /// means 0 is a valid block size that should be processed. Second, standard block cipher padding is - /// \a not \a applied. Third, the caller supplies an outString is larger than inString by - /// 2*MandatoryBlockSize(). That is, there's a reserve available when processing the last block. - /// Fourth, the cipher is responsible for finalization like custom padding. The cipher will tell - /// the library how many bytes were processed or used by returning the appropriate value from - /// ProcessLastBlock(). - /// \details The return value of ProcessLastBlock() indicates how many bytes were written to - /// outString. A filter pipelining data will send outString and up to outLength - /// to an AttachedTransformation() for additional processing. Below is an example of the code - /// used in StreamTransformationFilter::LastPut. - ///
  if (m_cipher.IsLastBlockSpecial())
-	///   {
-	///     size_t reserve = 2*m_cipher.MandatoryBlockSize();
-	///     space = HelpCreatePutSpace(*AttachedTransformation(), DEFAULT_CHANNEL, length+reserve);
-	///     length = m_cipher.ProcessLastBlock(space, length+reserve, inString, length);
-	///     AttachedTransformation()->Put(space, length);
-	///     return;
-	///   }
- /// \sa ProcessData, ProcessLastBlock, MandatoryBlockSize, MinLastBlockSize, BlockPaddingSchemeDef, IsLastBlockSpecial - /// \since Crypto++ 6.0 - virtual bool IsLastBlockSpecial() const {return false;} - - /// \brief Encrypt or decrypt a string of bytes - /// \param inoutString the string to process - /// \param length the size of the inoutString, in bytes - /// \details Internally, the base class implementation calls ProcessData(). - inline void ProcessString(byte *inoutString, size_t length) - {ProcessData(inoutString, inoutString, length);} - - /// \brief Encrypt or decrypt a string of bytes - /// \param outString the output string to process - /// \param inString the input string to process - /// \param length the size of the input and output strings, in bytes - /// \details Internally, the base class implementation calls ProcessData(). - inline void ProcessString(byte *outString, const byte *inString, size_t length) - {ProcessData(outString, inString, length);} - - /// \brief Encrypt or decrypt a byte - /// \param input the input byte to process - /// \details Internally, the base class implementation calls ProcessData() with a size of 1. - inline byte ProcessByte(byte input) - {ProcessData(&input, &input, 1); return input;} - - /// \brief Determines whether the cipher supports random access - /// \return true if the cipher supports random access, false otherwise - virtual bool IsRandomAccess() const =0; - - /// \brief Seek to an absolute position - /// \param pos position to seek - /// \throw NotImplemented - /// \details The base class implementation throws NotImplemented. The function - /// \ref CRYPTOPP_ASSERT "asserts" IsRandomAccess() in debug builds. - virtual void Seek(lword pos) - { - CRYPTOPP_UNUSED(pos); - CRYPTOPP_ASSERT(!IsRandomAccess()); - throw NotImplemented("StreamTransformation: this object doesn't support random access"); - } - - /// \brief Determines whether the cipher is self-inverting - /// \return true if the cipher is self-inverting, false otherwise - /// \details IsSelfInverting determines whether this transformation is - /// self-inverting (e.g. xor with a keystream). - virtual bool IsSelfInverting() const =0; - - /// \brief Determines if the cipher is being operated in its forward direction - /// \return true if DIR is ENCRYPTION, false otherwise - /// \sa IsForwardTransformation(), IsPermutation(), GetCipherDirection() - virtual bool IsForwardTransformation() const =0; -}; - -/// \brief Interface for hash functions and data processing part of MACs -/// \details HashTransformation objects are stateful. They are created in an initial state, -/// change state as Update() is called, and return to the initial -/// state when Final() is called. This interface allows a large message to -/// be hashed in pieces by calling Update() on each piece followed by -/// calling Final(). -/// \sa HashFilter(), HashVerificationFilter() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE HashTransformation : public Algorithm -{ -public: - virtual ~HashTransformation() {} - - /// \brief Provides a reference to this object - /// \return A reference to this object - /// \details Useful for passing a temporary object to a function that takes a non-const reference - HashTransformation& Ref() {return *this;} - - /// \brief Updates a hash with additional input - /// \param input the additional input as a buffer - /// \param length the size of the buffer, in bytes - virtual void Update(const byte *input, size_t length) =0; - - /// \brief Request space which can be written into by the caller - /// \param size the requested size of the buffer - /// \details The purpose of this method is to help avoid extra memory allocations. - /// \details size is an \a IN and \a OUT parameter and used as a hint. When the call is made, - /// size is the requested size of the buffer. When the call returns, size is the size of - /// the array returned to the caller. - /// \details The base class implementation sets size to 0 and returns NULL or nullptr. - /// \note Some objects, like ArraySink, cannot create a space because its fixed. - virtual byte * CreateUpdateSpace(size_t &size) {size=0; return NULLPTR;} - - /// \brief Computes the hash of the current message - /// \param digest a pointer to the buffer to receive the hash - /// \details Final() restarts the hash for a new message. - /// \pre COUNTOF(digest) <= DigestSize() or COUNTOF(digest) <= HASH::DIGESTSIZE ensures - /// the output byte buffer is large enough for the digest. - virtual void Final(byte *digest) - {TruncatedFinal(digest, DigestSize());} - - /// \brief Restart the hash - /// \details Discards the current state, and restart for a new message - virtual void Restart() - {TruncatedFinal(NULLPTR, 0);} - - /// Provides the digest size of the hash - /// \return the digest size of the hash. - virtual unsigned int DigestSize() const =0; - - /// Provides the tag size of the hash - /// \return the tag size of the hash. - /// \details Same as DigestSize(). - unsigned int TagSize() const {return DigestSize();} - - /// \brief Provides the block size of the compression function - /// \return block size of the compression function, in bytes - /// \details BlockSize() will return 0 if the hash is not block based - /// or does not have an equivalent block size. For example, Keccak - /// and SHA-3 do not have a block size, but they do have an equivalent - /// block size called rate expressed as r. - virtual unsigned int BlockSize() const {return 0;} - - /// \brief Provides the input block size most efficient for this hash. - /// \return The input block size that is most efficient for the cipher - /// \details The base class implementation returns MandatoryBlockSize(). - /// \details Optimal input length is - /// n * OptimalBlockSize() - GetOptimalBlockSizeUsed() for any n \> 0. - virtual unsigned int OptimalBlockSize() const {return 1;} - - /// \brief Provides input and output data alignment for optimal performance - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - virtual unsigned int OptimalDataAlignment() const; - - /// \brief Updates the hash with additional input and computes the hash of the current message - /// \param digest a pointer to the buffer to receive the hash - /// \param input the additional input as a buffer - /// \param length the size of the buffer, in bytes - /// \details Use this if your input is in one piece and you don't want to call Update() - /// and Final() separately - /// \details CalculateDigest() restarts the hash for the next message. - /// \pre COUNTOF(digest) == DigestSize() or COUNTOF(digest) == HASH::DIGESTSIZE ensures - /// the output byte buffer is a valid size. - virtual void CalculateDigest(byte *digest, const byte *input, size_t length) - {Update(input, length); Final(digest);} - - /// \brief Verifies the hash of the current message - /// \param digest a pointer to the buffer of an \a existing hash - /// \return \p true if the existing hash matches the computed hash, \p false otherwise - /// \throw InvalidArgument() if the existing hash's size exceeds DigestSize() - /// \details Verify() performs a bitwise compare on the buffers using VerifyBufsEqual(), which is - /// a constant time comparison function. digestLength cannot exceed DigestSize(). - /// \details Verify() restarts the hash for the next message. - /// \pre COUNTOF(digest) == DigestSize() or COUNTOF(digest) == HASH::DIGESTSIZE ensures - /// the input byte buffer is a valid size. - virtual bool Verify(const byte *digest) - {return TruncatedVerify(digest, DigestSize());} - - /// \brief Updates the hash with additional input and verifies the hash of the current message - /// \param digest a pointer to the buffer of an \a existing hash - /// \param input the additional input as a buffer - /// \param length the size of the buffer, in bytes - /// \return \p true if the existing hash matches the computed hash, \p false otherwise - /// \throw InvalidArgument() if the existing hash's size exceeds DigestSize() - /// \details Use this if your input is in one piece and you don't want to call Update() - /// and Verify() separately - /// \details VerifyDigest() performs a bitwise compare on the buffers using VerifyBufsEqual(), - /// which is a constant time comparison function. - /// \details VerifyDigest() restarts the hash for the next message. - /// \pre COUNTOF(digest) == DigestSize() or COUNTOF(digest) == HASH::DIGESTSIZE ensures - /// the output byte buffer is a valid size. - virtual bool VerifyDigest(const byte *digest, const byte *input, size_t length) - {Update(input, length); return Verify(digest);} - - /// \brief Computes the hash of the current message - /// \param digest a pointer to the buffer to receive the hash - /// \param digestSize the size of the truncated digest, in bytes - /// \details TruncatedFinal() calls Final() and then copies digestSize bytes to digest. - /// The hash is restarted the hash for the next message. - /// \pre COUNTOF(digest) <= DigestSize() or COUNTOF(digest) <= HASH::DIGESTSIZE ensures - /// the output byte buffer is a valid size. - virtual void TruncatedFinal(byte *digest, size_t digestSize) =0; - - /// \brief Updates the hash with additional input and computes the hash of the current message - /// \param digest a pointer to the buffer to receive the hash - /// \param digestSize the length of the truncated hash, in bytes - /// \param input the additional input as a buffer - /// \param length the size of the buffer, in bytes - /// \details Use this if your input is in one piece and you don't want to call Update() - /// and CalculateDigest() separately. - /// \details CalculateTruncatedDigest() restarts the hash for the next message. - /// \pre digestSize <= DigestSize() or digestSize <= HASH::DIGESTSIZE ensures - /// the output byte buffer is a valid size. - virtual void CalculateTruncatedDigest(byte *digest, size_t digestSize, const byte *input, size_t length) - {Update(input, length); TruncatedFinal(digest, digestSize);} - - /// \brief Verifies the hash of the current message - /// \param digest a pointer to the buffer of an \a existing hash - /// \param digestLength the size of the truncated hash, in bytes - /// \return \p true if the existing hash matches the computed hash, \p false otherwise - /// \throw InvalidArgument() if digestLength exceeds DigestSize() - /// \details TruncatedVerify() is a truncated version of Verify(). It can operate on a - /// buffer smaller than DigestSize(). However, digestLength cannot exceed DigestSize(). - /// \details Verify() performs a bitwise compare on the buffers using VerifyBufsEqual(), which is - /// a constant time comparison function. digestLength cannot exceed DigestSize(). - /// \details TruncatedVerify() restarts the hash for the next message. - /// \pre digestLength <= DigestSize() or digestLength <= HASH::DIGESTSIZE ensures - /// the input byte buffer is a valid size. - virtual bool TruncatedVerify(const byte *digest, size_t digestLength); - - /// \brief Updates the hash with additional input and verifies the hash of the current message - /// \param digest a pointer to the buffer of an \a existing hash - /// \param digestLength the size of the truncated hash, in bytes - /// \param input the additional input as a buffer - /// \param length the size of the buffer, in bytes - /// \return \p true if the existing hash matches the computed hash, \p false otherwise - /// \throw InvalidArgument() if digestLength exceeds DigestSize() - /// \details Use this if your input is in one piece and you don't want to call Update() - /// and TruncatedVerify() separately. - /// \details VerifyTruncatedDigest() is a truncated version of VerifyDigest(). It can operate - /// on a buffer smaller than DigestSize(). However, digestLength cannot exceed DigestSize(). - /// \details VerifyTruncatedDigest() restarts the hash for the next message. - /// \pre digestLength <= DigestSize() or digestLength <= HASH::DIGESTSIZE ensures - /// the input byte buffer is a valid size. - virtual bool VerifyTruncatedDigest(const byte *digest, size_t digestLength, const byte *input, size_t length) - {Update(input, length); return TruncatedVerify(digest, digestLength);} - -protected: - /// \brief Validates a truncated digest size - /// \param size the requested digest size - /// \throw InvalidArgument if the algorithm's digest size cannot be truncated to the requested size - /// \details Throws an exception when the truncated digest size is greater than DigestSize() - void ThrowIfInvalidTruncatedSize(size_t size) const; -}; - -/// \brief Interface for one direction (encryption or decryption) of a block cipher -/// \details These objects usually should not be used directly. See BlockTransformation for more details. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BlockCipher : public SimpleKeyingInterface, public BlockTransformation -{ -protected: - const Algorithm & GetAlgorithm() const {return *this;} -}; - -/// \brief Interface for one direction (encryption or decryption) of a stream cipher or cipher mode -/// \details These objects usually should not be used directly. See StreamTransformation for more details. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE SymmetricCipher : public SimpleKeyingInterface, public StreamTransformation -{ -protected: - const Algorithm & GetAlgorithm() const {return *this;} -}; - -/// \brief Interface for message authentication codes -/// \details These objects usually should not be used directly. See HashTransformation for more details. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE MessageAuthenticationCode : public SimpleKeyingInterface, public HashTransformation -{ -protected: - const Algorithm & GetAlgorithm() const {return *this;} -}; - -/// \brief Interface for authenticated encryption modes of operation -/// \details AuthenticatedSymmetricCipher() provides the interface for one direction -/// (encryption or decryption) of a stream cipher or block cipher mode with authentication. The -/// StreamTransformation() part of this interface is used to encrypt or decrypt the data. The -/// MessageAuthenticationCode() part of the interface is used to input additional authenticated -/// data (AAD), which is MAC'ed but not encrypted. The MessageAuthenticationCode() part is also -/// used to generate and verify the MAC. -/// \details Crypto++ provides four authenticated encryption modes of operation - CCM, EAX, GCM -/// and OCB mode. All modes implement AuthenticatedSymmetricCipher() and the motivation for -/// the API, like calling AAD a "header", can be found in Bellare, Rogaway and -/// Wagner's The EAX Mode of -/// Operation. The EAX paper suggested a basic API to help standardize AEAD schemes in -/// software and promote adoption of the modes. -/// \sa Authenticated -/// Encryption on the Crypto++ wiki. -/// \since Crypto++ 5.6.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AuthenticatedSymmetricCipher : public MessageAuthenticationCode, public StreamTransformation -{ -public: - virtual ~AuthenticatedSymmetricCipher() {} - - /// \brief Exception thrown when the object is in the wrong state for the operation - /// \details this indicates that a member function was called in the wrong state, for example trying to encrypt - /// a message before having set the key or IV - class BadState : public Exception - { - public: - explicit BadState(const std::string &name, const char *message) : Exception(OTHER_ERROR, name + ": " + message) {} - explicit BadState(const std::string &name, const char *function, const char *state) : Exception(OTHER_ERROR, name + ": " + function + " was called before " + state) {} - }; - - /// \brief Provides the maximum length of AAD that can be input - /// \return the maximum length of AAD that can be input before the encrypted data - virtual lword MaxHeaderLength() const =0; - - /// \brief Provides the maximum length of encrypted data - /// \return the maximum length of encrypted data - virtual lword MaxMessageLength() const =0; - - /// \brief Provides the maximum length of AAD - /// \return the maximum length of AAD that can be input after the encrypted data - virtual lword MaxFooterLength() const {return 0;} - - /// \brief Determines if data lengths must be specified prior to inputting data - /// \return true if the data lengths are required before inputting data, false otherwise - /// \details if this function returns true, SpecifyDataLengths() must be called before attempting to input data. - /// This is the case for some schemes, such as CCM. - /// \sa SpecifyDataLengths() - virtual bool NeedsPrespecifiedDataLengths() const {return false;} - - /// \brief Prescribes the data lengths - /// \param headerLength size of data before message is input, in bytes - /// \param messageLength size of the message, in bytes - /// \param footerLength size of data after message is input, in bytes - /// \details SpecifyDataLengths() only needs to be called if NeedsPrespecifiedDataLengths() returns true. - /// If true, then headerLength will be validated against MaxHeaderLength(), - /// messageLength will be validated against MaxMessageLength(), and - /// footerLength will be validated against MaxFooterLength(). - /// \sa NeedsPrespecifiedDataLengths() - void SpecifyDataLengths(lword headerLength, lword messageLength, lword footerLength=0); - - /// \brief Encrypts and calculates a MAC in one call - /// \param ciphertext the encryption buffer - /// \param mac the mac buffer - /// \param macSize the size of the MAC buffer, in bytes - /// \param iv the iv buffer - /// \param ivLength the size of the IV buffer, in bytes - /// \param header the AAD buffer - /// \param headerLength the size of the AAD buffer, in bytes - /// \param message the message buffer - /// \param messageLength the size of the messagetext buffer, in bytes - /// \details EncryptAndAuthenticate() encrypts and generates the MAC in one call. The function - /// truncates the MAC if macSize < TagSize(). - virtual void EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *header, size_t headerLength, const byte *message, size_t messageLength); - - /// \brief Decrypts and verifies a MAC in one call - /// \param message the decryption buffer - /// \param mac the mac buffer - /// \param macSize the size of the MAC buffer, in bytes - /// \param iv the iv buffer - /// \param ivLength the size of the IV buffer, in bytes - /// \param header the AAD buffer - /// \param headerLength the size of the AAD buffer, in bytes - /// \param ciphertext the ciphertext buffer - /// \param ciphertextLength the size of the ciphertext buffer, in bytes - /// \return true if the MAC is valid and the decoding succeeded, false otherwise - /// \details DecryptAndVerify() decrypts and verifies the MAC in one call. - /// message is a decryption buffer and should be at least as large as the ciphertext buffer. - /// \details The function returns true iff MAC is valid. DecryptAndVerify() assumes the MAC - /// is truncated if macLength < TagSize(). - virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *header, size_t headerLength, const byte *ciphertext, size_t ciphertextLength); - - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like \a AES or \a AES/GCM. Some algorithms - /// do not have standard names yet. For example, there is no standard algorithm name for - /// Shoup's ECIES. - virtual std::string AlgorithmName() const; - - /// \brief Retrieve the provider of this algorithm - /// \return the algorithm provider - /// \details The algorithm provider can be a name like "C++", "SSE", "NEON", "AESNI", - /// "ARMv8" and "Power8". C++ is standard C++ code. Other labels, like SSE, - /// usually indicate a specialized implementation using instructions from a higher - /// instruction set architecture (ISA). Future labels may include external hardware - /// like a hardware security module (HSM). - /// \details Generally speaking Wei Dai's original IA-32 ASM code falls under "SSE2". - /// Labels like "SSSE3" and "SSE4.1" follow after Wei's code and use intrinsics - /// instead of ASM. - /// \details Algorithms which combine different instructions or ISAs provide the - /// dominant one. For example on x86 AES/GCM returns "AESNI" rather than - /// "CLMUL" or "AES+SSE4.1" or "AES+CLMUL" or "AES+SSE4.1+CLMUL". - /// \note Provider is not universally implemented yet. - /// \since Crypto++ 8.0 - virtual std::string AlgorithmProvider() const {return "C++";} - -protected: - const Algorithm & GetAlgorithm() const - {return *static_cast(this);} - virtual void UncheckedSpecifyDataLengths(lword headerLength, lword messageLength, lword footerLength) - {CRYPTOPP_UNUSED(headerLength); CRYPTOPP_UNUSED(messageLength); CRYPTOPP_UNUSED(footerLength);} -}; - -/// \brief Interface for random number generators -/// \details The library provides a number of random number generators, from software based -/// to hardware based generators. -/// \details All generated values are uniformly distributed over the range specified. -/// \since Crypto++ 3.1 -/// \sa RandomNumberGenerator -/// on the Crypto++ wiki -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE RandomNumberGenerator : public Algorithm -{ -public: - virtual ~RandomNumberGenerator() {} - - /// \brief Update RNG state with additional unpredictable values - /// \param input the entropy to add to the generator - /// \param length the size of the input buffer - /// \throw NotImplemented - /// \details A generator may or may not accept additional entropy. Call CanIncorporateEntropy() - /// to test for the ability to use additional entropy. - /// \details If a derived class does not override IncorporateEntropy(), then the base class - /// throws NotImplemented. - virtual void IncorporateEntropy(const byte *input, size_t length) - { - CRYPTOPP_UNUSED(input); CRYPTOPP_UNUSED(length); - throw NotImplemented("RandomNumberGenerator: IncorporateEntropy not implemented"); - } - - /// \brief Determines if a generator can accept additional entropy - /// \return true if IncorporateEntropy() is implemented - virtual bool CanIncorporateEntropy() const {return false;} - - /// \brief Generate new random byte and return it - /// \return a random 8-bit byte - /// \details Default implementation calls GenerateBlock() with one byte. - /// \details All generated values are uniformly distributed over the range specified within the - /// the constraints of a particular generator. - virtual byte GenerateByte(); - - /// \brief Generate new random bit and return it - /// \return a random bit - /// \details The default implementation calls GenerateByte() and return its lowest bit. - /// \details All generated values are uniformly distributed over the range specified within the - /// the constraints of a particular generator. - virtual unsigned int GenerateBit(); - - /// \brief Generate a random 32 bit word in the range min to max, inclusive - /// \param min the lower bound of the range - /// \param max the upper bound of the range - /// \return a random 32-bit word - /// \details The default implementation calls Crop() on the difference between max and - /// min, and then returns the result added to min. - /// \details All generated values are uniformly distributed over the range specified within the - /// the constraints of a particular generator. - virtual word32 GenerateWord32(word32 min=0, word32 max=0xffffffffUL); - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - /// \details All generated values are uniformly distributed over the range specified within the - /// the constraints of a particular generator. - /// \note A derived generator \a must override either GenerateBlock() or - /// GenerateIntoBufferedTransformation(). They can override both, or have one call the other. - virtual void GenerateBlock(byte *output, size_t size); - - /// \brief Generate random bytes into a BufferedTransformation - /// \param target the BufferedTransformation object which receives the bytes - /// \param channel the channel on which the bytes should be pumped - /// \param length the number of bytes to generate - /// \details The default implementation calls GenerateBlock() and pumps the result into - /// the DEFAULT_CHANNEL of the target. - /// \details All generated values are uniformly distributed over the range specified within the - /// the constraints of a particular generator. - /// \note A derived generator \a must override either GenerateBlock() or - /// GenerateIntoBufferedTransformation(). They can override both, or have one call the other. - virtual void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword length); - - /// \brief Generate and discard n bytes - /// \param n the number of bytes to generate and discard - virtual void DiscardBytes(size_t n); - - /// \brief Randomly shuffle the specified array - /// \param begin an iterator to the first element in the array - /// \param end an iterator beyond the last element in the array - /// \details The resulting permutation is uniformly distributed. - template void Shuffle(IT begin, IT end) - { - // TODO: What happens if there are more than 2^32 elements? - for (; begin != end; ++begin) - std::iter_swap(begin, begin + GenerateWord32(0, static_cast(end-begin-1))); - } -}; - -/// \brief Interface for key derivation functions -/// \since Crypto++ 7.0 -/// \sa KeyDerivationFunction -/// on the Crypto++ wiki -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE KeyDerivationFunction : public Algorithm -{ -public: - virtual ~KeyDerivationFunction() {} - - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - virtual std::string AlgorithmName() const =0; - - /// \brief Determine minimum number of bytes - /// \return Minimum number of bytes which can be derived - virtual size_t MinDerivedKeyLength() const; - - /// \brief Determine maximum number of bytes - /// \return Maximum number of bytes which can be derived - virtual size_t MaxDerivedKeyLength() const; - - /// \brief Returns a valid key length for the derivation function - /// \param keylength the size of the derived key, in bytes - /// \return the valid key length, in bytes - virtual size_t GetValidDerivedLength(size_t keylength) const =0; - - /// \brief Returns whether keylength is a valid key length - /// \param keylength the requested keylength - /// \return true if the derived keylength is valid, false otherwise - /// \details Internally the function calls GetValidKeyLength() - virtual bool IsValidDerivedLength(size_t keylength) const { - return keylength == GetValidDerivedLength(keylength); - } - - /// \brief Derive a key from a seed - /// \param derived the derived output buffer - /// \param derivedLen the size of the derived buffer, in bytes - /// \param secret the seed input buffer - /// \param secretLen the size of the secret buffer, in bytes - /// \param params additional initialization parameters to configure this object - /// \return the number of iterations performed - /// \throw InvalidDerivedKeyLength if derivedLen is invalid for the scheme - /// \details DeriveKey() provides a standard interface to derive a key from - /// a secret seed and other parameters. Each class that derives from KeyDerivationFunction - /// provides an overload that accepts most parameters used by the derivation function. - /// \details the number of iterations performed by DeriveKey() may be 1. For example, a - /// scheme like HKDF does not use the iteration count so it returns 1. - virtual size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, const NameValuePairs& params = g_nullNameValuePairs) const =0; - - /// \brief Set or change parameters - /// \param params additional initialization parameters to configure this object - /// \details SetParameters() is useful for setting common parameters when an object is - /// reused. Some derivation function classes may choose to implement it. - virtual void SetParameters(const NameValuePairs& params); - -protected: - /// \brief Returns the base class Algorithm - /// \return the base class Algorithm - virtual const Algorithm & GetAlgorithm() const =0; - - /// \brief Validates the derived key length - /// \param length the size of the derived key material, in bytes - /// \throw InvalidKeyLength if the key length is invalid - void ThrowIfInvalidDerivedKeyLength(size_t length) const; -}; - -/// \brief Interface for password based key derivation functions -/// \since Crypto++ 7.0 -struct PasswordBasedKeyDerivationFunction : public KeyDerivationFunction -{ -}; - -/// \brief Random Number Generator that does not produce random numbers -/// \return reference that can be passed to functions that require a RandomNumberGenerator -/// \details NullRNG() returns a reference that can be passed to functions that require a -/// RandomNumberGenerator but don't actually use it. The NullRNG() throws NotImplemented -/// when a generation function is called. -/// \sa ClassNullRNG, PK_SignatureScheme::IsProbabilistic() -CRYPTOPP_DLL RandomNumberGenerator & CRYPTOPP_API NullRNG(); - -class WaitObjectContainer; -class CallStack; - -/// \brief Interface for objects that can be waited on. -class CRYPTOPP_NO_VTABLE Waitable -{ -public: - virtual ~Waitable() {} - - /// \brief Maximum number of wait objects that this object can return - /// \return the maximum number of wait objects - virtual unsigned int GetMaxWaitObjectCount() const =0; - - /// \brief Retrieves waitable objects - /// \param container the wait container to receive the references to the objects. - /// \param callStack CallStack() object used to select waitable objects - /// \details GetWaitObjects() is usually called in one of two ways. First, it can - /// be called like something.GetWaitObjects(c, CallStack("my func after X", 0));. - /// Second, if in an outer GetWaitObjects() method that itself takes a callStack - /// parameter, it can be called like - /// innerThing.GetWaitObjects(c, CallStack("MyClass::GetWaitObjects at X", &callStack));. - virtual void GetWaitObjects(WaitObjectContainer &container, CallStack const& callStack) =0; - - /// \brief Wait on this object - /// \return true if the wait succeeded, false otherwise - /// \details Wait() is the same as creating an empty container, calling GetWaitObjects(), and then calling - /// Wait() on the container. - bool Wait(unsigned long milliseconds, CallStack const& callStack); -}; - -/// \brief Interface for buffered transformations -/// \details BufferedTransformation is a generalization of BlockTransformation, -/// StreamTransformation and HashTransformation. -/// \details A buffered transformation is an object that takes a stream of bytes as input (this may -/// be done in stages), does some computation on them, and then places the result into an internal -/// buffer for later retrieval. Any partial result already in the output buffer is not modified -/// by further input. -/// \details If a method takes a "blocking" parameter, and you pass false for it, then the method -/// will return before all input has been processed if the input cannot be processed without waiting -/// (for network buffers to become available, for example). In this case the method will return true -/// or a non-zero integer value. When this happens you must continue to call the method with the same -/// parameters until it returns false or zero, before calling any other method on it or attached -/// BufferedTransformation. The integer return value in this case is approximately -/// the number of bytes left to be processed, and can be used to implement a progress bar. -/// \details For functions that take a "propagation" parameter, propagation != 0 means pass on -/// the signal to attached BufferedTransformation objects, with propagation decremented at each -/// step until it reaches 0. -1 means unlimited propagation. -/// \details \a All of the retrieval functions, like Get() and GetWord32(), return the actual -/// number of bytes retrieved, which is the lesser of the request number and MaxRetrievable(). -/// \details \a Most of the input functions, like Put() and PutWord32(), return the number of -/// bytes remaining to be processed. A 0 value means all bytes were processed, and a non-0 value -/// means bytes remain to be processed. -/// \nosubgrouping -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BufferedTransformation : public Algorithm, public Waitable -{ -public: - virtual ~BufferedTransformation() {} - - /// \brief Construct a BufferedTransformation - BufferedTransformation() : Algorithm(false) {} - - /// \brief Provides a reference to this object - /// \return A reference to this object - /// \details Useful for passing a temporary object to a function that takes a non-const reference - BufferedTransformation& Ref() {return *this;} - - /// \name INPUT - //@{ - - /// \brief Input a byte for processing - /// \param inByte the 8-bit byte (octet) to be processed. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - /// \details Put(byte) calls Put(byte*, size_t). - size_t Put(byte inByte, bool blocking=true) - {return Put(&inByte, 1, blocking);} - - /// \brief Input a byte buffer for processing - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - /// \details Internally, Put() calls Put2(). - size_t Put(const byte *inString, size_t length, bool blocking=true) - {return Put2(inString, length, 0, blocking);} - - /// Input a 16-bit word for processing. - /// \param value the 16-bit value to be processed - /// \param order the ByteOrder of the value to be processed. - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - size_t PutWord16(word16 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true); - - /// Input a 32-bit word for processing. - /// \param value the 32-bit value to be processed. - /// \param order the ByteOrder of the value to be processed. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - size_t PutWord32(word32 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true); - - /// Input a 64-bit word for processing. - /// \param value the 64-bit value to be processed. - /// \param order the ByteOrder of the value to be processed. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - size_t PutWord64(word64 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true); - - /// \brief Request space which can be written into by the caller - /// \param size the requested size of the buffer - /// \return byte pointer to the space to input data - /// \details The purpose of this method is to help avoid extra memory allocations. - /// \details size is an \a IN and \a OUT parameter and used as a hint. When the call is made, - /// size is the requested size of the buffer. When the call returns, size is the size of - /// the array returned to the caller. - /// \details The base class implementation sets size to 0 and returns NULL. - /// \note Some objects, like ArraySink, cannot create a space because its fixed. In the case of - /// an ArraySink, the pointer to the array is returned and the size is remaining size. - virtual byte * CreatePutSpace(size_t &size) - {size=0; return NULLPTR;} - - /// \brief Determines whether input can be modified by the callee - /// \return true if input can be modified, false otherwise - /// \details The base class implementation returns false. - virtual bool CanModifyInput() const - {return false;} - - /// \brief Input multiple bytes that may be modified by callee. - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). 0 indicates all - /// bytes were processed. - size_t PutModifiable(byte *inString, size_t length, bool blocking=true) - {return PutModifiable2(inString, length, 0, blocking);} - - /// \brief Signals the end of messages to the object - /// \param propagation the number of attached transformations the MessageEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - bool MessageEnd(int propagation=-1, bool blocking=true) - {return !!Put2(NULLPTR, 0, propagation < 0 ? -1 : propagation+1, blocking);} - - /// \brief Input multiple bytes for processing and signal the end of a message - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param propagation the number of attached transformations the MessageEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). 0 indicates all - /// bytes were processed. - /// \details Internally, PutMessageEnd() calls Put2() with a modified propagation to - /// ensure all attached transformations finish processing the message. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - size_t PutMessageEnd(const byte *inString, size_t length, int propagation=-1, bool blocking=true) - {return Put2(inString, length, propagation < 0 ? -1 : propagation+1, blocking);} - - /// \brief Input multiple bytes for processing - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). 0 indicates all - /// bytes were processed. - /// \details Derived classes must implement Put2(). - virtual size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) =0; - - /// \brief Input multiple bytes that may be modified by callee. - /// \param inString the byte buffer to process. - /// \param length the size of the string, in bytes. - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). 0 indicates all - /// bytes were processed. - /// \details Internally, PutModifiable2() calls Put2(). - virtual size_t PutModifiable2(byte *inString, size_t length, int messageEnd, bool blocking) - {return Put2(inString, length, messageEnd, blocking);} - - /// \brief Exception thrown by objects that have \a not implemented nonblocking input processing - /// \details BlockingInputOnly inherits from NotImplemented - struct BlockingInputOnly : public NotImplemented - {BlockingInputOnly(const std::string &s) : NotImplemented(s + ": Nonblocking input is not implemented by this object.") {}}; - //@} - - /// \name WAITING - //@{ - /// \brief Retrieves the maximum number of waitable objects - unsigned int GetMaxWaitObjectCount() const; - - /// \brief Retrieves waitable objects - /// \param container the wait container to receive the references to the objects - /// \param callStack CallStack() object used to select waitable objects - /// \details GetWaitObjects is usually called in one of two ways. First, it can - /// be called like something.GetWaitObjects(c, CallStack("my func after X", 0));. - /// Second, if in an outer GetWaitObjects() method that itself takes a callStack - /// parameter, it can be called like - /// innerThing.GetWaitObjects(c, CallStack("MyClass::GetWaitObjects at X", &callStack));. - void GetWaitObjects(WaitObjectContainer &container, CallStack const& callStack); - //@} // WAITING - - /// \name SIGNALS - //@{ - - /// \brief Initialize or reinitialize this object, without signal propagation - /// \param parameters a set of NameValuePairs to initialize this object - /// \throw NotImplemented - /// \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable - /// number of arbitrarily typed arguments. The function avoids the need for multiple constructors providing - /// all possible combintations of configurable parameters. - /// \details IsolatedInitialize() does not call Initialize() on attached transformations. If initialization - /// should be propagated, then use the Initialize() function. - /// \details If a derived class does not override IsolatedInitialize(), then the base class throws - /// NotImplemented. - virtual void IsolatedInitialize(const NameValuePairs ¶meters) { - CRYPTOPP_UNUSED(parameters); - throw NotImplemented("BufferedTransformation: this object can't be reinitialized"); - } - - /// \brief Flushes data buffered by this object, without signal propagation - /// \param hardFlush indicates whether all data should be flushed - /// \param blocking specifies whether the object should block when processing input - /// \return true if the flush was successful, false otherwise - /// \note hardFlush must be used with care - virtual bool IsolatedFlush(bool hardFlush, bool blocking) =0; - - /// \brief Marks the end of a series of messages, without signal propagation - /// \param blocking specifies whether the object should block when completing the processing on - /// the current series of messages - /// \return true if the message was successful, false otherwise - virtual bool IsolatedMessageSeriesEnd(bool blocking) - {CRYPTOPP_UNUSED(blocking); return false;} - - /// \brief Initialize or reinitialize this object, with signal propagation - /// \param parameters a set of NameValuePairs to initialize or reinitialize this object - /// \param propagation the number of attached transformations the Initialize() signal should be passed - /// \details Initialize() is used to initialize or reinitialize an object using a variable number of - /// arbitrarily typed arguments. The function avoids the need for multiple constructors providing - /// all possible combintations of configurable parameters. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - virtual void Initialize(const NameValuePairs ¶meters=g_nullNameValuePairs, int propagation=-1); - - /// \brief Flush buffered input and/or output, with signal propagation - /// \param hardFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the Flush() - /// signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return true if the flush was successful, false otherwise - /// \details propagation count includes this object. Setting propagation to - /// 1 means this object only. Setting propagation to -1 - /// means unlimited propagation. - /// \note Hard flushes must be used with care. It means try to process and - /// output everything, even if there may not be enough data to complete the - /// action. For example, hard flushing a HexDecoder would cause an error if - /// you do it after inputing an odd number of hex encoded characters. - /// \note For some types of filters, like ZlibDecompressor, hard flushes can - /// only be done at "synchronization points". These synchronization points - /// are positions in the data stream that are created by hard flushes on the - /// corresponding reverse filters, in this example ZlibCompressor. This is - /// useful when zlib compressed data is moved across a network in packets - /// and compression state is preserved across packets, as in the SSH2 protocol. - virtual bool Flush(bool hardFlush, int propagation=-1, bool blocking=true); - - /// \brief Marks the end of a series of messages, with signal propagation - /// \param propagation the number of attached transformations the MessageSeriesEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return true if the message was successful, false otherwise - /// \details Each object that receives the signal will perform its processing, decrement - /// propagation, and then pass the signal on to attached transformations if the value is not 0. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note There should be a MessageEnd() immediately before MessageSeriesEnd(). - virtual bool MessageSeriesEnd(int propagation=-1, bool blocking=true); - - /// \brief Set propagation of automatically generated and transferred signals - /// \param propagation then new value - /// \details Setting propagation to 0 means do not automatically generate signals. Setting - /// propagation to -1 means unlimited propagation. - virtual void SetAutoSignalPropagation(int propagation) - {CRYPTOPP_UNUSED(propagation);} - - /// \brief Retrieve automatic signal propagation value - /// \return the number of attached transformations the signal is propagated to. 0 indicates - /// the signal is only witnessed by this object - virtual int GetAutoSignalPropagation() const {return 0;} -public: - - /// \name RETRIEVAL OF ONE MESSAGE - //@{ - - /// \brief Provides the number of bytes ready for retrieval - /// \return the number of bytes ready for retrieval - /// \details The number of bytes available are dependent on the source. If an exact value is - /// available, then the exact value is returned. The exact value can include 0 if the source - /// is exhausted. - /// \details Some stream-based sources do not allow seeking() on the underlying stream, such - /// as some FileSource(). If the stream does not allow seeking() then MaxRetrievable() - /// returns LWORD_MAX to indicate there are still bytes to be retrieved. - virtual lword MaxRetrievable() const; - - /// \brief Determines whether bytes are ready for retrieval - /// \return true if bytes are available for retrieval, false otherwise - virtual bool AnyRetrievable() const; - - /// \brief Retrieve a 8-bit byte - /// \param outByte the 8-bit value to be retrieved - /// \return the number of bytes consumed during the call. - /// \details Use the return value of Get to detect short reads. - virtual size_t Get(byte &outByte); - - /// \brief Retrieve a block of bytes - /// \param outString a block of bytes - /// \param getMax the number of bytes to Get - /// \return the number of bytes consumed during the call. - /// \details Use the return value of Get to detect short reads. - virtual size_t Get(byte *outString, size_t getMax); - - /// \brief Peek a 8-bit byte - /// \param outByte the 8-bit value to be retrieved - /// \return the number of bytes read during the call. - /// \details Peek does not remove bytes from the object. Use the return value of - /// Get() to detect short reads. - virtual size_t Peek(byte &outByte) const; - - /// \brief Peek a block of bytes - /// \param outString a block of bytes - /// \param peekMax the number of bytes to Peek - /// \return the number of bytes read during the call. - /// \details Peek does not remove bytes from the object. Use the return value of - /// Peek() to detect short reads. - virtual size_t Peek(byte *outString, size_t peekMax) const; - - /// \brief Retrieve a 16-bit word - /// \param value the 16-bit value to be retrieved - /// \param order the ByteOrder of the value to be processed. - /// \return the number of bytes consumed during the call. - /// \details Use the return value of GetWord16() to detect short reads. - size_t GetWord16(word16 &value, ByteOrder order=BIG_ENDIAN_ORDER); - - /// \brief Retrieve a 32-bit word - /// \param value the 32-bit value to be retrieved - /// \param order the ByteOrder of the value to be processed. - /// \return the number of bytes consumed during the call. - /// \details Use the return value of GetWord32() to detect short reads. - size_t GetWord32(word32 &value, ByteOrder order=BIG_ENDIAN_ORDER); - - /// \brief Retrieve a 64-bit word - /// \param value the 64-bit value to be retrieved - /// \param order the ByteOrder of the value to be processed. - /// \return the number of bytes consumed during the call. - /// \details Use the return value of GetWord64() to detect short reads. - /// \since Crypto++ 8.3 - size_t GetWord64(word64 &value, ByteOrder order=BIG_ENDIAN_ORDER); - - /// \brief Peek a 16-bit word - /// \param value the 16-bit value to be retrieved - /// \param order the ByteOrder of the value to be processed. - /// \return the number of bytes consumed during the call. - /// \details Peek does not consume bytes in the stream. Use the return value - /// of PeekWord16() to detect short reads. - size_t PeekWord16(word16 &value, ByteOrder order=BIG_ENDIAN_ORDER) const; - - /// \brief Peek a 32-bit word - /// \param value the 32-bit value to be retrieved - /// \param order the ByteOrder of the value to be processed. - /// \return the number of bytes consumed during the call. - /// \details Peek does not consume bytes in the stream. Use the return value - /// of PeekWord32() to detect short reads. - size_t PeekWord32(word32 &value, ByteOrder order=BIG_ENDIAN_ORDER) const; - - /// \brief Peek a 64-bit word - /// \param value the 64-bit value to be retrieved - /// \param order the ByteOrder of the value to be processed. - /// \return the number of bytes consumed during the call. - /// \details Peek does not consume bytes in the stream. Use the return value - /// of PeekWord64() to detect short reads. - /// \since Crypto++ 8.3 - size_t PeekWord64(word64 &value, ByteOrder order=BIG_ENDIAN_ORDER) const; - - /// move transferMax bytes of the buffered output to target as input - - /// \brief Transfer bytes from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param transferMax the number of bytes to transfer - /// \param channel the channel on which the transfer should occur - /// \return the number of bytes transferred during the call. - /// \details TransferTo removes bytes from this object and moves them to the destination. - /// \details The function always returns transferMax. If an accurate count is needed, then use TransferTo2(). - lword TransferTo(BufferedTransformation &target, lword transferMax=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL) - {TransferTo2(target, transferMax, channel); return transferMax;} - - /// \brief Discard skipMax bytes from the output buffer - /// \param skipMax the number of bytes to discard - /// \details Skip() discards bytes from the output buffer, which is the AttachedTransformation(), if present. - /// The function always returns the parameter skipMax. - /// \details If you want to skip bytes from a Source, then perform the following. - ///
  StringSource ss(str, false, new Redirector(TheBitBucket()));
-		///   ss.Pump(10);    // Skip 10 bytes from Source
-		///   ss.Detach(new FilterChain(...));
-		///   ss.PumpAll();
-		/// 
- virtual lword Skip(lword skipMax=LWORD_MAX); - - /// \brief Copy bytes from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param copyMax the number of bytes to copy - /// \param channel the channel on which the transfer should occur - /// \return the number of bytes copied during the call. - /// \details CopyTo copies bytes from this object to the destination. The bytes are not removed from this object. - /// \details The function always returns copyMax. If an accurate count is needed, then use CopyRangeTo2(). - lword CopyTo(BufferedTransformation &target, lword copyMax=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL) const - {return CopyRangeTo(target, 0, copyMax, channel);} - - /// \brief Copy bytes from this object using an index to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param position the 0-based index of the byte stream to begin the copying - /// \param copyMax the number of bytes to copy - /// \param channel the channel on which the transfer should occur - /// \return the number of bytes copied during the call. - /// \details CopyTo copies bytes from this object to the destination. The bytes remain in this - /// object. Copying begins at the index position in the current stream, and not from an absolute - /// position in the stream. - /// \details The function returns the new position in the stream after transferring the bytes starting at the index. - lword CopyRangeTo(BufferedTransformation &target, lword position, lword copyMax=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL) const - {lword i = position; CopyRangeTo2(target, i, i+copyMax, channel); return i-position;} - //@} - - /// \name RETRIEVAL OF MULTIPLE MESSAGES - //@{ - - /// \brief Provides the number of bytes ready for retrieval - /// \return the number of bytes ready for retrieval - virtual lword TotalBytesRetrievable() const; - - /// \brief Provides the number of meesages processed by this object - /// \return the number of meesages processed by this object - /// \details NumberOfMessages returns number of times MessageEnd() has been - /// received minus messages retrieved or skipped - virtual unsigned int NumberOfMessages() const; - - /// \brief Determines if any messages are available for retrieval - /// \return true if NumberOfMessages() > 0, false otherwise - /// \details AnyMessages returns true if NumberOfMessages() > 0 - virtual bool AnyMessages() const; - - /// \brief Start retrieving the next message - /// \return true if a message is ready for retrieval - /// \details GetNextMessage() returns true if a message is ready for retrieval; false - /// if no more messages exist or this message is not completely retrieved. - virtual bool GetNextMessage(); - - /// \brief Skip a number of meessages - /// \param count number of messages to skip - /// \return 0 if the requested number of messages was skipped, non-0 otherwise - /// \details SkipMessages() skips count number of messages. If there is an AttachedTransformation() - /// then SkipMessages() is called on the attached transformation. If there is no attached - /// transformation, then count number of messages are sent to TheBitBucket() using TransferMessagesTo(). - virtual unsigned int SkipMessages(unsigned int count=UINT_MAX); - - /// \brief Transfer messages from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param count the number of messages to transfer - /// \param channel the channel on which the transfer should occur - /// \return the number of bytes that remain in the current transfer block (i.e., bytes not transferred) - /// \details TransferMessagesTo2() removes messages from this object and moves them to the destination. - /// If all bytes are not transferred for a message, then processing stops and the number of remaining - /// bytes is returned. TransferMessagesTo() does not proceed to the next message. - /// \details A return value of 0 indicates all messages were successfully transferred. - unsigned int TransferMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) - {TransferMessagesTo2(target, count, channel); return count;} - - /// \brief Copy messages from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param count the number of messages to copy - /// \param channel the channel on which the copy should occur - /// \return the number of bytes that remain in the current transfer block (i.e., bytes not transferred) - /// \details CopyMessagesTo copies messages from this object to the destination. - /// If all bytes are not transferred for a message, then processing stops and the number of remaining - /// bytes is returned. CopyMessagesTo() does not proceed to the next message. - /// \details A return value of 0 indicates all messages were successfully copied. - unsigned int CopyMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) const; - - /// \brief Skip all messages in the series - virtual void SkipAll(); - - /// \brief Transfer all bytes from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param channel the channel on which the transfer should occur - /// \details TransferMessagesTo2() removes messages from this object and moves them to the destination. - /// Internally TransferAllTo() calls TransferAllTo2(). - void TransferAllTo(BufferedTransformation &target, const std::string &channel=DEFAULT_CHANNEL) - {TransferAllTo2(target, channel);} - - /// \brief Copy messages from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param channel the channel on which the transfer should occur - /// \details CopyAllTo copies messages from this object and copies them to the destination. - void CopyAllTo(BufferedTransformation &target, const std::string &channel=DEFAULT_CHANNEL) const; - - /// \brief Retrieve the next message in a series - /// \return true if a message was retrieved, false otherwise - /// \details Internally, the base class implementation returns false. - virtual bool GetNextMessageSeries() {return false;} - /// \brief Provides the number of messages in a series - /// \return the number of messages in this series - virtual unsigned int NumberOfMessagesInThisSeries() const {return NumberOfMessages();} - /// \brief Provides the number of messages in a series - /// \return the number of messages in this series - virtual unsigned int NumberOfMessageSeries() const {return 0;} - //@} - - /// \name NON-BLOCKING TRANSFER OF OUTPUT - //@{ - - // upon return, byteCount contains number of bytes that have finished being transferred, - // and returns the number of bytes left in the current transfer block - - /// \brief Transfer bytes from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param byteCount the number of bytes to transfer - /// \param channel the channel on which the transfer should occur - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain in the transfer block (i.e., bytes not transferred) - /// \details TransferTo2() removes bytes from this object and moves them to the destination. - /// Transfer begins at the index position in the current stream, and not from an absolute - /// position in the stream. - /// \details byteCount is an \a IN and \a OUT parameter. When the call is made, - /// byteCount is the requested size of the transfer. When the call returns, byteCount is - /// the number of bytes that were transferred. - virtual size_t TransferTo2(BufferedTransformation &target, lword &byteCount, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) =0; - - // upon return, begin contains the start position of data yet to be finished copying, - // and returns the number of bytes left in the current transfer block - - /// \brief Copy bytes from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param begin the 0-based index of the first byte to copy in the stream - /// \param end the 0-based index of the last byte to copy in the stream - /// \param channel the channel on which the transfer should occur - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain in the copy block (i.e., bytes not copied) - /// \details CopyRangeTo2 copies bytes from this object to the destination. The bytes are not - /// removed from this object. Copying begins at the index position in the current stream, and - /// not from an absolute position in the stream. - /// \details begin is an \a IN and \a OUT parameter. When the call is made, begin is the - /// starting position of the copy. When the call returns, begin is the position of the first - /// byte that was \a not copied (which may be different than end). begin can be used for - /// subsequent calls to CopyRangeTo2(). - virtual size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const =0; - - // upon return, messageCount contains number of messages that have finished being transferred, - // and returns the number of bytes left in the current transfer block - - /// \brief Transfer messages from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param messageCount the number of messages to transfer - /// \param channel the channel on which the transfer should occur - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain in the current transfer block (i.e., bytes not transferred) - /// \details TransferMessagesTo2() removes messages from this object and moves them to the destination. - /// \details messageCount is an \a IN and \a OUT parameter. When the call is made, messageCount is the - /// the number of messages requested to be transferred. When the call returns, messageCount is the - /// number of messages actually transferred. - size_t TransferMessagesTo2(BufferedTransformation &target, unsigned int &messageCount, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - - // returns the number of bytes left in the current transfer block - - /// \brief Transfer all bytes from this object to another BufferedTransformation - /// \param target the destination BufferedTransformation - /// \param channel the channel on which the transfer should occur - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain in the current transfer block (i.e., bytes not transferred) - /// \details TransferMessagesTo2() removes messages from this object and moves them to the destination. - size_t TransferAllTo2(BufferedTransformation &target, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - //@} - - /// \name CHANNELS - //@{ - /// \brief Exception thrown when a filter does not support named channels - struct NoChannelSupport : public NotImplemented - {NoChannelSupport(const std::string &name) : NotImplemented(name + ": this object doesn't support multiple channels") {}}; - /// \brief Exception thrown when a filter does not recognize a named channel - struct InvalidChannelName : public InvalidArgument - {InvalidChannelName(const std::string &name, const std::string &channel) : InvalidArgument(name + ": unexpected channel name \"" + channel + "\"") {}}; - - /// \brief Input a byte for processing on a channel - /// \param channel the channel to process the data. - /// \param inByte the 8-bit byte (octet) to be processed. - /// \param blocking specifies whether the object should block when processing input. - /// \return 0 indicates all bytes were processed during the call. Non-0 indicates the - /// number of bytes that were not processed. - size_t ChannelPut(const std::string &channel, byte inByte, bool blocking=true) - {return ChannelPut(channel, &inByte, 1, blocking);} - - /// \brief Input a byte buffer for processing on a channel - /// \param channel the channel to process the data - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param blocking specifies whether the object should block when processing input - /// \return 0 indicates all bytes were processed during the call. Non-0 indicates the - /// number of bytes that were not processed. - size_t ChannelPut(const std::string &channel, const byte *inString, size_t length, bool blocking=true) - {return ChannelPut2(channel, inString, length, 0, blocking);} - - /// \brief Input multiple bytes that may be modified by callee on a channel - /// \param channel the channel to process the data. - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param blocking specifies whether the object should block when processing input - /// \return 0 indicates all bytes were processed during the call. Non-0 indicates the - /// number of bytes that were not processed. - size_t ChannelPutModifiable(const std::string &channel, byte *inString, size_t length, bool blocking=true) - {return ChannelPutModifiable2(channel, inString, length, 0, blocking);} - - /// \brief Input a 16-bit word for processing on a channel. - /// \param channel the channel to process the data. - /// \param value the 16-bit value to be processed. - /// \param order the ByteOrder of the value to be processed. - /// \param blocking specifies whether the object should block when processing input. - /// \return 0 indicates all bytes were processed during the call. Non-0 indicates the - /// number of bytes that were not processed. - size_t ChannelPutWord16(const std::string &channel, word16 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true); - - /// \brief Input a 32-bit word for processing on a channel. - /// \param channel the channel to process the data. - /// \param value the 32-bit value to be processed. - /// \param order the ByteOrder of the value to be processed. - /// \param blocking specifies whether the object should block when processing input. - /// \return 0 indicates all bytes were processed during the call. Non-0 indicates the - /// number of bytes that were not processed. - size_t ChannelPutWord32(const std::string &channel, word32 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true); - - /// \brief Input a 64-bit word for processing on a channel. - /// \param channel the channel to process the data. - /// \param value the 64-bit value to be processed. - /// \param order the ByteOrder of the value to be processed. - /// \param blocking specifies whether the object should block when processing input. - /// \return 0 indicates all bytes were processed during the call. Non-0 indicates the - /// number of bytes that were not processed. - size_t ChannelPutWord64(const std::string &channel, word64 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true); - - /// \brief Signal the end of a message - /// \param channel the channel to process the data. - /// \param propagation the number of attached transformations the ChannelMessageEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return 0 indicates all bytes were processed during the call. Non-0 indicates the - /// number of bytes that were not processed. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - bool ChannelMessageEnd(const std::string &channel, int propagation=-1, bool blocking=true) - {return !!ChannelPut2(channel, NULLPTR, 0, propagation < 0 ? -1 : propagation+1, blocking);} - - /// \brief Input multiple bytes for processing and signal the end of a message - /// \param channel the channel to process the data. - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param propagation the number of attached transformations the ChannelPutMessageEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - size_t ChannelPutMessageEnd(const std::string &channel, const byte *inString, size_t length, int propagation=-1, bool blocking=true) - {return ChannelPut2(channel, inString, length, propagation < 0 ? -1 : propagation+1, blocking);} - - /// \brief Request space which can be written into by the caller - /// \param channel the channel to process the data - /// \param size the requested size of the buffer - /// \return a pointer to a memory block with length size - /// \details The purpose of this method is to help avoid extra memory allocations. - /// \details size is an \a IN and \a OUT parameter and used as a hint. When the call is made, - /// size is the requested size of the buffer. When the call returns, size is the size of - /// the array returned to the caller. - /// \details The base class implementation sets size to 0 and returns NULL. - /// \note Some objects, like ArraySink(), cannot create a space because its fixed. In the case of - /// an ArraySink(), the pointer to the array is returned and the size is remaining size. - virtual byte * ChannelCreatePutSpace(const std::string &channel, size_t &size); - - /// \brief Input multiple bytes for processing on a channel. - /// \param channel the channel to process the data. - /// \param inString the byte buffer to process. - /// \param length the size of the string, in bytes. - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - virtual size_t ChannelPut2(const std::string &channel, const byte *inString, size_t length, int messageEnd, bool blocking); - - /// \brief Input multiple bytes that may be modified by callee on a channel - /// \param channel the channel to process the data - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - virtual size_t ChannelPutModifiable2(const std::string &channel, byte *inString, size_t length, int messageEnd, bool blocking); - - /// \brief Flush buffered input and/or output on a channel - /// \param channel the channel to flush the data - /// \param hardFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the ChannelFlush() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return true of the Flush was successful - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - virtual bool ChannelFlush(const std::string &channel, bool hardFlush, int propagation=-1, bool blocking=true); - - /// \brief Marks the end of a series of messages on a channel - /// \param channel the channel to signal the end of a series of messages - /// \param propagation the number of attached transformations the ChannelMessageSeriesEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return true if the message was successful, false otherwise - /// \details Each object that receives the signal will perform its processing, decrement - /// propagation, and then pass the signal on to attached transformations if the value is not 0. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note There should be a MessageEnd() immediately before MessageSeriesEnd(). - virtual bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true); - - /// \brief Sets the default retrieval channel - /// \param channel the channel to signal the end of a series of messages - /// \note this function may not be implemented in all objects that should support it. - virtual void SetRetrievalChannel(const std::string &channel); - //@} - - /// \name ATTACHMENT - /// \details Some BufferedTransformation objects (e.g. Filter objects) allow other BufferedTransformation objects to be - /// attached. When this is done, the first object instead of buffering its output, sends that output to the attached - /// object as input. The entire attachment chain is deleted when the anchor object is destructed. - - //@{ - /// \brief Determines whether the object allows attachment - /// \return true if the object allows an attachment, false otherwise - /// \details Sources and Filters will returns true, while Sinks and other objects will return false. - virtual bool Attachable() {return false;} - - /// \brief Returns the object immediately attached to this object - /// \return the attached transformation - /// \details AttachedTransformation() returns NULL if there is no attachment. The non-const - /// version of AttachedTransformation() always returns NULL. - virtual BufferedTransformation *AttachedTransformation() {CRYPTOPP_ASSERT(!Attachable()); return NULLPTR;} - - /// \brief Returns the object immediately attached to this object - /// \return the attached transformation - /// \details AttachedTransformation() returns NULL if there is no attachment. The non-const - /// version of AttachedTransformation() always returns NULL. - virtual const BufferedTransformation *AttachedTransformation() const - {return const_cast(this)->AttachedTransformation();} - - /// \brief Delete the current attachment chain and attach a new one - /// \param newAttachment the new BufferedTransformation to attach - /// \throw NotImplemented - /// \details Detach() deletes the current attachment chain and replace it with an optional newAttachment - /// \details If a derived class does not override Detach(), then the base class throws - /// NotImplemented. - virtual void Detach(BufferedTransformation *newAttachment = NULLPTR) { - CRYPTOPP_UNUSED(newAttachment); CRYPTOPP_ASSERT(!Attachable()); - throw NotImplemented("BufferedTransformation: this object is not attachable"); - } - - /// \brief Add newAttachment to the end of attachment chain - /// \param newAttachment the attachment to add to the end of the chain - virtual void Attach(BufferedTransformation *newAttachment); - //@} - -protected: - /// \brief Decrements the propagation count while clamping at 0 - /// \return the decremented propagation or 0 - static int DecrementPropagation(int propagation) - {return propagation != 0 ? propagation - 1 : 0;} - -private: - // for ChannelPutWord16, ChannelPutWord32 and ChannelPutWord64, - // to ensure the buffer isn't deallocated before non-blocking - // operation completes - byte m_buf[8]; -}; - -/// \brief An input discarding BufferedTransformation -/// \return a reference to a BufferedTransformation object that discards all input -CRYPTOPP_DLL BufferedTransformation & TheBitBucket(); - -/// \brief Interface for crypto material -/// \details CryptoMaterial() is an interface for crypto material, such as -/// public keys, private keys and crypto parameters. Derived classes generally -/// do not offer public methods such as GenerateRandom() and -/// GenerateRandomWithKeySize(). -/// \sa GeneratableCryptoMaterial() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CryptoMaterial : public NameValuePairs -{ -public: - /// Exception thrown when invalid crypto material is detected - class CRYPTOPP_DLL InvalidMaterial : public InvalidDataFormat - { - public: - explicit InvalidMaterial(const std::string &s) : InvalidDataFormat(s) {} - }; - - virtual ~CryptoMaterial() {} - - /// \brief Assign values to this object - /// \details This function can be used to create a public key from a private key. - virtual void AssignFrom(const NameValuePairs &source) =0; - - /// \brief Check this object for errors - /// \param rng a RandomNumberGenerator for objects which use randomized testing - /// \param level the level of thoroughness - /// \return true if the tests succeed, false otherwise - /// \details There are four levels of thoroughness: - ///
    - ///
  • 0 - using this object won't cause a crash or exception - ///
  • 1 - this object will probably function, and encrypt, sign, other operations correctly - ///
  • 2 - ensure this object will function correctly, and perform reasonable security checks - ///
  • 3 - perform reasonable security checks, and do checks that may take a long time - ///
- /// \details Level 0 does not require a RandomNumberGenerator. A NullRNG() can be used for level 0. - /// Level 1 may not check for weak keys and such. Levels 2 and 3 are recommended. - /// \sa ThrowIfInvalid() - virtual bool Validate(RandomNumberGenerator &rng, unsigned int level) const =0; - - /// \brief Check this object for errors - /// \param rng a RandomNumberGenerator for objects which use randomized testing - /// \param level the level of thoroughness - /// \throw InvalidMaterial - /// \details Internally, ThrowIfInvalid() calls Validate() and throws InvalidMaterial() if validation fails. - /// \sa Validate() - virtual void ThrowIfInvalid(RandomNumberGenerator &rng, unsigned int level) const - {if (!Validate(rng, level)) throw InvalidMaterial("CryptoMaterial: this object contains invalid values");} - - /// \brief Saves a key to a BufferedTransformation - /// \param bt the destination BufferedTransformation - /// \throw NotImplemented - /// \details Save() writes the material to a BufferedTransformation. - /// \details If the material is a key, then the key is written with ASN.1 DER encoding. The key - /// includes an object identifier with an algorithm id, like a subjectPublicKeyInfo. - /// \details A "raw" key without the "key info" can be saved using a key's DEREncode() method. - /// \details If a derived class does not override Save(), then the base class throws - /// NotImplemented(). - virtual void Save(BufferedTransformation &bt) const - {CRYPTOPP_UNUSED(bt); throw NotImplemented("CryptoMaterial: this object does not support saving");} - - /// \brief Loads a key from a BufferedTransformation - /// \param bt the source BufferedTransformation - /// \throw KeyingErr - /// \details Load() attempts to read material from a BufferedTransformation. If the - /// material is a key that was generated outside the library, then the following - /// usually applies: - ///
    - ///
  • the key should be ASN.1 BER encoded - ///
  • the key should be a "key info" - ///
- /// \details "key info" means the key should have an object identifier with an algorithm id, - /// like a subjectPublicKeyInfo. - /// \details To read a "raw" key without the "key info", then call the key's BERDecode() method. - /// \note Load() generally does not check that the key is valid. Call Validate(), if needed. - virtual void Load(BufferedTransformation &bt) - {CRYPTOPP_UNUSED(bt); throw NotImplemented("CryptoMaterial: this object does not support loading");} - - /// \brief Determines whether the object supports precomputation - /// \return true if the object supports precomputation, false otherwise - /// \sa Precompute() - virtual bool SupportsPrecomputation() const {return false;} - - /// \brief Perform precomputation - /// \param precomputationStorage the suggested number of objects for the precompute table - /// \throw NotImplemented - /// \details The exact semantics of Precompute() varies, but it typically means calculate - /// a table of n objects that can be used later to speed up computation. - /// \details If a derived class does not override Precompute(), then the base class throws - /// NotImplemented. - /// \sa SupportsPrecomputation(), LoadPrecomputation(), SavePrecomputation() - virtual void Precompute(unsigned int precomputationStorage) { - CRYPTOPP_UNUSED(precomputationStorage); CRYPTOPP_ASSERT(!SupportsPrecomputation()); - throw NotImplemented("CryptoMaterial: this object does not support precomputation"); - } - - /// \brief Retrieve previously saved precomputation - /// \param storedPrecomputation BufferedTransformation with the saved precomputation - /// \throw NotImplemented - /// \sa SupportsPrecomputation(), Precompute() - virtual void LoadPrecomputation(BufferedTransformation &storedPrecomputation) - {CRYPTOPP_UNUSED(storedPrecomputation); CRYPTOPP_ASSERT(!SupportsPrecomputation()); throw NotImplemented("CryptoMaterial: this object does not support precomputation");} - - /// \brief Save precomputation for later use - /// \param storedPrecomputation BufferedTransformation to write the precomputation - /// \throw NotImplemented - /// \sa SupportsPrecomputation(), Precompute() - virtual void SavePrecomputation(BufferedTransformation &storedPrecomputation) const - {CRYPTOPP_UNUSED(storedPrecomputation); CRYPTOPP_ASSERT(!SupportsPrecomputation()); throw NotImplemented("CryptoMaterial: this object does not support precomputation");} - - /// \brief Perform a quick sanity check - /// \details DoQuickSanityCheck() is for internal library use, and it should not be called by library users. - void DoQuickSanityCheck() const {ThrowIfInvalid(NullRNG(), 0);} - -#if defined(__SUNPRO_CC) - // Sun Studio 11/CC 5.8 workaround: it generates incorrect code - // when casting to an empty virtual base class. JW, 2018: It is - // still a problem in Sun Studio 12.6/CC 5.15 on i386. Just enable - // it everywhere in case it affects SPARC (which we don't test). - char m_sunCCworkaround; -#endif -}; - -/// \brief Interface for crypto material -/// \details GeneratableCryptoMaterial() is an interface for crypto material, -/// such as private keys and crypto parameters. Derived classes offer public -/// methods such as GenerateRandom() and GenerateRandomWithKeySize(). -/// \sa CryptoMaterial() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE GeneratableCryptoMaterial : virtual public CryptoMaterial -{ -public: - virtual ~GeneratableCryptoMaterial() {} - - /// \brief Generate a random key or crypto parameters - /// \param rng a RandomNumberGenerator to produce keying material - /// \param params additional initialization parameters - /// \throw KeyingErr if a key can't be generated or algorithm parameters are invalid - /// \details If a derived class does not override GenerateRandom(), then the base class throws - /// NotImplemented. - virtual void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms = g_nullNameValuePairs) { - CRYPTOPP_UNUSED(rng); CRYPTOPP_UNUSED(params); - throw NotImplemented("GeneratableCryptoMaterial: this object does not support key/parameter generation"); - } - - /// \brief Generate a random key or crypto parameters - /// \param rng a RandomNumberGenerator to produce keying material - /// \param keySize the size of the key, in bits - /// \throw KeyingErr if a key can't be generated or algorithm parameters are invalid - /// \details GenerateRandomWithKeySize calls GenerateRandom() with a NameValuePairs - /// object with only "KeySize" - void GenerateRandomWithKeySize(RandomNumberGenerator &rng, unsigned int keySize); -}; - -/// \brief Interface for public keys -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PublicKey : virtual public CryptoMaterial -{ -}; - -/// \brief Interface for private keys -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PrivateKey : public GeneratableCryptoMaterial -{ -}; - -/// \brief Interface for crypto parameters -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CryptoParameters : public GeneratableCryptoMaterial -{ -}; - -/// \brief Interface for certificates -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Certificate : virtual public CryptoMaterial -{ -}; - -/// \brief Interface for asymmetric algorithms -/// \details BERDecode() and DEREncode() were removed under Issue 569 -/// and Commit 9b174e84de7a. Programs should use AccessMaterial().Load(bt) -/// or GetMaterial().Save(bt) instead. -/// \sa Issue 569 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AsymmetricAlgorithm : public Algorithm -{ -public: - virtual ~AsymmetricAlgorithm() {} - - /// \brief Retrieves a reference to CryptoMaterial - /// \return a reference to the crypto material - virtual CryptoMaterial & AccessMaterial() =0; - - /// \brief Retrieves a reference to CryptoMaterial - /// \return a const reference to the crypto material - virtual const CryptoMaterial & GetMaterial() const =0; - -#if 0 - /// \brief Loads this object from a BufferedTransformation - /// \param bt a BufferedTransformation object - /// \details Use of BERDecode() changed to Load() at Issue 569. - /// \deprecated for backwards compatibility, calls AccessMaterial().Load(bt) - void BERDecode(BufferedTransformation &bt) - {AccessMaterial().Load(bt);} - - /// \brief Saves this object to a BufferedTransformation - /// \param bt a BufferedTransformation object - /// \details Use of DEREncode() changed to Save() at Issue 569. - /// \deprecated for backwards compatibility, calls GetMaterial().Save(bt) - void DEREncode(BufferedTransformation &bt) const - {GetMaterial().Save(bt);} -#endif -}; - -/// \brief Interface for asymmetric algorithms using public keys -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PublicKeyAlgorithm : public AsymmetricAlgorithm -{ -public: - virtual ~PublicKeyAlgorithm() {} - - // VC60 workaround: no co-variant return type - - /// \brief Retrieves a reference to a Public Key - /// \return a reference to the public key - CryptoMaterial & AccessMaterial() - {return AccessPublicKey();} - /// \brief Retrieves a reference to a Public Key - /// \return a const reference the public key - const CryptoMaterial & GetMaterial() const - {return GetPublicKey();} - - /// \brief Retrieves a reference to a Public Key - /// \return a reference to the public key - virtual PublicKey & AccessPublicKey() =0; - /// \brief Retrieves a reference to a Public Key - /// \return a const reference the public key - virtual const PublicKey & GetPublicKey() const - {return const_cast(this)->AccessPublicKey();} -}; - -/// \brief Interface for asymmetric algorithms using private keys -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PrivateKeyAlgorithm : public AsymmetricAlgorithm -{ -public: - virtual ~PrivateKeyAlgorithm() {} - - /// \brief Retrieves a reference to a Private Key - /// \return a reference the private key - CryptoMaterial & AccessMaterial() {return AccessPrivateKey();} - /// \brief Retrieves a reference to a Private Key - /// \return a const reference the private key - const CryptoMaterial & GetMaterial() const {return GetPrivateKey();} - - /// \brief Retrieves a reference to a Private Key - /// \return a reference the private key - virtual PrivateKey & AccessPrivateKey() =0; - /// \brief Retrieves a reference to a Private Key - /// \return a const reference the private key - virtual const PrivateKey & GetPrivateKey() const {return const_cast(this)->AccessPrivateKey();} -}; - -/// \brief Interface for key agreement algorithms -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE KeyAgreementAlgorithm : public AsymmetricAlgorithm -{ -public: - virtual ~KeyAgreementAlgorithm() {} - - /// \brief Retrieves a reference to Crypto Parameters - /// \return a reference the crypto parameters - CryptoMaterial & AccessMaterial() {return AccessCryptoParameters();} - /// \brief Retrieves a reference to Crypto Parameters - /// \return a const reference the crypto parameters - const CryptoMaterial & GetMaterial() const {return GetCryptoParameters();} - - /// \brief Retrieves a reference to Crypto Parameters - /// \return a reference the crypto parameters - virtual CryptoParameters & AccessCryptoParameters() =0; - /// \brief Retrieves a reference to Crypto Parameters - /// \return a const reference the crypto parameters - virtual const CryptoParameters & GetCryptoParameters() const {return const_cast(this)->AccessCryptoParameters();} -}; - -/// \brief Interface for public-key encryptors and decryptors -/// \details This class provides an interface common to encryptors and decryptors -/// for querying their plaintext and ciphertext lengths. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_CryptoSystem -{ -public: - virtual ~PK_CryptoSystem() {} - - /// \brief Provides the maximum length of plaintext for a given ciphertext length - /// \return the maximum size of the plaintext, in bytes - /// \details This function returns 0 if ciphertextLength is not valid (too long or too short). - virtual size_t MaxPlaintextLength(size_t ciphertextLength) const =0; - - /// \brief Calculate the length of ciphertext given length of plaintext - /// \return the maximum size of the ciphertext, in bytes - /// \details This function returns 0 if plaintextLength is not valid (too long). - virtual size_t CiphertextLength(size_t plaintextLength) const =0; - - /// \brief Determines whether this object supports the use of a named parameter - /// \param name the name of the parameter - /// \return true if the parameter name is supported, false otherwise - /// \details Some possible parameter names: EncodingParameters(), KeyDerivationParameters() - /// and others Parameters listed in argnames.h - virtual bool ParameterSupported(const char *name) const =0; - - /// \brief Provides the fixed ciphertext length, if one exists - /// \return the fixed ciphertext length if one exists, otherwise 0 - /// \details "Fixed" here means length of ciphertext does not depend on length of plaintext. - /// In this case, it usually does depend on the key length. - virtual size_t FixedCiphertextLength() const {return 0;} - - /// \brief Provides the maximum plaintext length given a fixed ciphertext length - /// \return maximum plaintext length given the fixed ciphertext length, if one exists, - /// otherwise return 0. - /// \details FixedMaxPlaintextLength(0 returns the maximum plaintext length given the fixed ciphertext - /// length, if one exists, otherwise return 0. - virtual size_t FixedMaxPlaintextLength() const {return 0;} -}; - -/// \brief Interface for public-key encryptors -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Encryptor : public PK_CryptoSystem, public PublicKeyAlgorithm -{ -public: - /// \brief Exception thrown when trying to encrypt plaintext of invalid length - class CRYPTOPP_DLL InvalidPlaintextLength : public Exception - { - public: - InvalidPlaintextLength() : Exception(OTHER_ERROR, "PK_Encryptor: invalid plaintext length") {} - }; - - /// \brief Encrypt a byte string - /// \param rng a RandomNumberGenerator derived class - /// \param plaintext the plaintext byte buffer - /// \param plaintextLength the size of the plaintext byte buffer - /// \param ciphertext a byte buffer to hold the encrypted string - /// \param parameters a set of NameValuePairs to initialize this object - /// \pre CiphertextLength(plaintextLength) != 0 ensures the plaintext isn't too large - /// \pre COUNTOF(ciphertext) == CiphertextLength(plaintextLength) ensures the output - /// byte buffer is large enough. - /// \sa PK_Decryptor - virtual void Encrypt(RandomNumberGenerator &rng, - const byte *plaintext, size_t plaintextLength, - byte *ciphertext, const NameValuePairs ¶meters = g_nullNameValuePairs) const =0; - - /// \brief Create a new encryption filter - /// \param rng a RandomNumberGenerator derived class - /// \param attachment an attached transformation - /// \param parameters a set of NameValuePairs to initialize this object - /// \details \p attachment can be \p NULL. The caller is responsible for deleting the returned pointer. - /// Encoding parameters should be passed in the "EP" channel. - virtual BufferedTransformation * CreateEncryptionFilter(RandomNumberGenerator &rng, - BufferedTransformation *attachment=NULLPTR, const NameValuePairs ¶meters = g_nullNameValuePairs) const; -}; - -/// \brief Interface for public-key decryptors -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Decryptor : public PK_CryptoSystem, public PrivateKeyAlgorithm -{ -public: - virtual ~PK_Decryptor() {} - - /// \brief Decrypt a byte string - /// \param rng a RandomNumberGenerator derived class - /// \param ciphertext the encrypted byte buffer - /// \param ciphertextLength the size of the encrypted byte buffer - /// \param plaintext a byte buffer to hold the decrypted string - /// \param parameters a set of NameValuePairs to initialize this object - /// \return the result of the decryption operation - /// \details If DecodingResult::isValidCoding is true, then DecodingResult::messageLength - /// is valid and holds the actual length of the plaintext recovered. The result is undefined - /// if decryption failed. If DecodingResult::isValidCoding is false, then DecodingResult::messageLength - /// is undefined. - /// \pre COUNTOF(plaintext) == MaxPlaintextLength(ciphertextLength) ensures the output - /// byte buffer is large enough - /// \sa PK_Encryptor - virtual DecodingResult Decrypt(RandomNumberGenerator &rng, - const byte *ciphertext, size_t ciphertextLength, - byte *plaintext, const NameValuePairs ¶meters = g_nullNameValuePairs) const =0; - - /// \brief Create a new decryption filter - /// \param rng a RandomNumberGenerator derived class - /// \param attachment an attached transformation - /// \param parameters a set of NameValuePairs to initialize this object - /// \return the newly created decryption filter - /// \note the caller is responsible for deleting the returned pointer - virtual BufferedTransformation * CreateDecryptionFilter(RandomNumberGenerator &rng, - BufferedTransformation *attachment=NULLPTR, const NameValuePairs ¶meters = g_nullNameValuePairs) const; - - /// \brief Decrypt a fixed size ciphertext - /// \param rng a RandomNumberGenerator derived class - /// \param ciphertext the encrypted byte buffer - /// \param plaintext a byte buffer to hold the decrypted string - /// \param parameters a set of NameValuePairs to initialize this object - /// \return the result of the decryption operation - /// \details If DecodingResult::isValidCoding is true, then DecodingResult::messageLength - /// is valid and holds the actual length of the plaintext recovered. The result is undefined - /// if decryption failed. If DecodingResult::isValidCoding is false, then DecodingResult::messageLength - /// is undefined. - /// \pre COUNTOF(plaintext) == MaxPlaintextLength(ciphertextLength) ensures the output - /// byte buffer is large enough - /// \sa PK_Encryptor - DecodingResult FixedLengthDecrypt(RandomNumberGenerator &rng, const byte *ciphertext, byte *plaintext, const NameValuePairs ¶meters = g_nullNameValuePairs) const - {return Decrypt(rng, ciphertext, FixedCiphertextLength(), plaintext, parameters);} -}; - -/// \brief Interface for public-key signers and verifiers -/// \details This class provides an interface common to signers and verifiers for querying scheme properties -/// \sa DL_SignatureSchemeBase, TF_SignatureSchemeBase, DL_SignerBase, TF_SignerBase -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_SignatureScheme -{ -public: - /// \brief Exception throw when the private or public key has a length that can't be used - /// \details InvalidKeyLength() may be thrown by any function in this class if the private - /// or public key has a length that can't be used - class CRYPTOPP_DLL InvalidKeyLength : public Exception - { - public: - InvalidKeyLength(const std::string &message) : Exception(OTHER_ERROR, message) {} - }; - - /// \brief Exception throw when the private or public key is too short to sign or verify - /// \details KeyTooShort() may be thrown by any function in this class if the private or public - /// key is too short to sign or verify anything - class CRYPTOPP_DLL KeyTooShort : public InvalidKeyLength - { - public: - KeyTooShort() : InvalidKeyLength("PK_Signer: key too short for this signature scheme") {} - }; - - virtual ~PK_SignatureScheme() {} - - /// \brief Provides the signature length if it only depends on the key - /// \return the signature length if it only depends on the key, in bytes - /// \details SignatureLength() returns the signature length if it only depends on the key, otherwise 0. - virtual size_t SignatureLength() const =0; - - /// \brief Provides the maximum signature length produced given the length of the recoverable message part - /// \param recoverablePartLength the length of the recoverable message part, in bytes - /// \return the maximum signature length produced for a given length of recoverable message part, in bytes - /// \details MaxSignatureLength() returns the maximum signature length produced given the length of the - /// recoverable message part. - virtual size_t MaxSignatureLength(size_t recoverablePartLength = 0) const - {CRYPTOPP_UNUSED(recoverablePartLength); return SignatureLength();} - - /// \brief Provides the length of longest message that can be recovered - /// \return the length of longest message that can be recovered, in bytes - /// \details MaxRecoverableLength() returns the length of longest message that can be recovered, or 0 if - /// this signature scheme does not support message recovery. - virtual size_t MaxRecoverableLength() const =0; - - /// \brief Provides the length of longest message that can be recovered from a signature of given length - /// \param signatureLength the length of the signature, in bytes - /// \return the length of longest message that can be recovered from a signature of given length, in bytes - /// \details MaxRecoverableLengthFromSignatureLength() returns the length of longest message that can be - /// recovered from a signature of given length, or 0 if this signature scheme does not support message - /// recovery. - virtual size_t MaxRecoverableLengthFromSignatureLength(size_t signatureLength) const =0; - - /// \brief Determines whether a signature scheme requires a random number generator - /// \return true if the signature scheme requires a RandomNumberGenerator() to sign - /// \details if IsProbabilistic() returns false, then NullRNG() can be passed to functions that take - /// RandomNumberGenerator(). - virtual bool IsProbabilistic() const =0; - - /// \brief Determines whether the non-recoverable message part can be signed - /// \return true if the non-recoverable message part can be signed - virtual bool AllowNonrecoverablePart() const =0; - - /// \brief Determines whether the signature must be input before the message - /// \return true if the signature must be input before the message during verifcation - /// \details if SignatureUpfront() returns true, then you must input the signature before the message - /// during verification. Otherwise you can input the signature at anytime. - virtual bool SignatureUpfront() const {return false;} - - /// \brief Determines whether the recoverable part must be input before the non-recoverable part - /// \return true if the recoverable part must be input before the non-recoverable part during signing - /// \details RecoverablePartFirst() determines whether you must input the recoverable part before the - /// non-recoverable part during signing - virtual bool RecoverablePartFirst() const =0; -}; - -/// \brief Interface for accumulating messages to be signed or verified -/// \details Only Update() should be called from the PK_MessageAccumulator() class. No other functions -/// inherited from HashTransformation, like DigestSize() and TruncatedFinal(), should be called. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_MessageAccumulator : public HashTransformation -{ -public: - /// \warning DigestSize() should not be called on PK_MessageAccumulator - unsigned int DigestSize() const - {throw NotImplemented("PK_MessageAccumulator: DigestSize() should not be called");} - - /// \warning TruncatedFinal() should not be called on PK_MessageAccumulator - void TruncatedFinal(byte *digest, size_t digestSize) - { - CRYPTOPP_UNUSED(digest); CRYPTOPP_UNUSED(digestSize); - throw NotImplemented("PK_MessageAccumulator: TruncatedFinal() should not be called"); - } -}; - -/// \brief Interface for public-key signers -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Signer : public PK_SignatureScheme, public PrivateKeyAlgorithm -{ -public: - virtual ~PK_Signer() {} - - /// \brief Create a new HashTransformation to accumulate the message to be signed - /// \param rng a RandomNumberGenerator derived class - /// \return a pointer to a PK_MessageAccumulator - /// \details NewSignatureAccumulator() can be used with all signing methods. Sign() will automatically delete the - /// accumulator pointer. The caller is responsible for deletion if a method is called that takes a reference. - virtual PK_MessageAccumulator * NewSignatureAccumulator(RandomNumberGenerator &rng) const =0; - - /// \brief Input a recoverable message to an accumulator - /// \param messageAccumulator a reference to a PK_MessageAccumulator - /// \param recoverableMessage a pointer to the recoverable message part to be signed - /// \param recoverableMessageLength the size of the recoverable message part - virtual void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const =0; - - /// \brief Sign and delete the messageAccumulator - /// \param rng a RandomNumberGenerator derived class - /// \param messageAccumulator a pointer to a PK_MessageAccumulator derived class - /// \param signature a block of bytes for the signature - /// \return actual signature length - /// \details Sign() deletes the messageAccumulator, even if an exception is thrown. - /// \pre COUNTOF(signature) == MaxSignatureLength() - virtual size_t Sign(RandomNumberGenerator &rng, PK_MessageAccumulator *messageAccumulator, byte *signature) const; - - /// \brief Sign and restart messageAccumulator - /// \param rng a RandomNumberGenerator derived class - /// \param messageAccumulator a pointer to a PK_MessageAccumulator derived class - /// \param signature a block of bytes for the signature - /// \param restart flag indicating whether the messageAccumulator should be restarted - /// \return actual signature length - /// \pre COUNTOF(signature) == MaxSignatureLength() - virtual size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart=true) const =0; - - /// \brief Sign a message - /// \param rng a RandomNumberGenerator derived class - /// \param message a pointer to the message - /// \param messageLen the size of the message to be signed - /// \param signature a block of bytes for the signature - /// \return actual signature length - /// \pre COUNTOF(signature) == MaxSignatureLength() - virtual size_t SignMessage(RandomNumberGenerator &rng, const byte *message, size_t messageLen, byte *signature) const; - - /// \brief Sign a recoverable message - /// \param rng a RandomNumberGenerator derived class - /// \param recoverableMessage a pointer to the recoverable message part to be signed - /// \param recoverableMessageLength the size of the recoverable message part - /// \param nonrecoverableMessage a pointer to the non-recoverable message part to be signed - /// \param nonrecoverableMessageLength the size of the non-recoverable message part - /// \param signature a block of bytes for the signature - /// \return actual signature length - /// \pre COUNTOF(signature) == MaxSignatureLength(recoverableMessageLength) - virtual size_t SignMessageWithRecovery(RandomNumberGenerator &rng, const byte *recoverableMessage, size_t recoverableMessageLength, - const byte *nonrecoverableMessage, size_t nonrecoverableMessageLength, byte *signature) const; -}; - -/// \brief Interface for public-key signature verifiers -/// \details The Recover* functions throw NotImplemented if the signature scheme does not support -/// message recovery. -/// \details The Verify* functions throw InvalidDataFormat if the scheme does support message -/// recovery and the signature contains a non-empty recoverable message part. The -/// Recover* functions should be used in that case. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Verifier : public PK_SignatureScheme, public PublicKeyAlgorithm -{ -public: - virtual ~PK_Verifier() {} - - /// \brief Create a new HashTransformation to accumulate the message to be verified - /// \return a pointer to a PK_MessageAccumulator - /// \details NewVerificationAccumulator() can be used with all verification methods. Verify() will automatically delete - /// the accumulator pointer. The caller is responsible for deletion if a method is called that takes a reference. - virtual PK_MessageAccumulator * NewVerificationAccumulator() const =0; - - /// \brief Input signature into a message accumulator - /// \param messageAccumulator a pointer to a PK_MessageAccumulator derived class - /// \param signature the signature on the message - /// \param signatureLength the size of the signature - virtual void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const =0; - - /// \brief Check whether messageAccumulator contains a valid signature and message - /// \param messageAccumulator a pointer to a PK_MessageAccumulator derived class - /// \return true if the signature is valid, false otherwise - /// \details Verify() deletes the messageAccumulator, even if an exception is thrown. - virtual bool Verify(PK_MessageAccumulator *messageAccumulator) const; - - /// \brief Check whether messageAccumulator contains a valid signature and message, and restart messageAccumulator - /// \param messageAccumulator a reference to a PK_MessageAccumulator derived class - /// \return true if the signature is valid, false otherwise - /// \details VerifyAndRestart() restarts the messageAccumulator - virtual bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const =0; - - /// \brief Check whether input signature is a valid signature for input message - /// \param message a pointer to the message to be verified - /// \param messageLen the size of the message - /// \param signature a pointer to the signature over the message - /// \param signatureLen the size of the signature - /// \return true if the signature is valid, false otherwise - virtual bool VerifyMessage(const byte *message, size_t messageLen, - const byte *signature, size_t signatureLen) const; - - /// \brief Recover a message from its signature - /// \param recoveredMessage a pointer to the recoverable message part to be verified - /// \param messageAccumulator a pointer to a PK_MessageAccumulator derived class - /// \return the result of the verification operation - /// \details Recover() deletes the messageAccumulator, even if an exception is thrown. - /// \pre COUNTOF(recoveredMessage) == MaxRecoverableLengthFromSignatureLength(signatureLength) - virtual DecodingResult Recover(byte *recoveredMessage, PK_MessageAccumulator *messageAccumulator) const; - - /// \brief Recover a message from its signature - /// \param recoveredMessage a pointer to the recoverable message part to be verified - /// \param messageAccumulator a pointer to a PK_MessageAccumulator derived class - /// \return the result of the verification operation - /// \details RecoverAndRestart() restarts the messageAccumulator - /// \pre COUNTOF(recoveredMessage) == MaxRecoverableLengthFromSignatureLength(signatureLength) - virtual DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &messageAccumulator) const =0; - - /// \brief Recover a message from its signature - /// \param recoveredMessage a pointer for the recovered message - /// \param nonrecoverableMessage a pointer to the non-recoverable message part to be signed - /// \param nonrecoverableMessageLength the size of the non-recoverable message part - /// \param signature the signature on the message - /// \param signatureLength the size of the signature - /// \return the result of the verification operation - /// \pre COUNTOF(recoveredMessage) == MaxRecoverableLengthFromSignatureLength(signatureLength) - virtual DecodingResult RecoverMessage(byte *recoveredMessage, - const byte *nonrecoverableMessage, size_t nonrecoverableMessageLength, - const byte *signature, size_t signatureLength) const; -}; - -/// \brief Interface for domains of simple key agreement protocols -/// \details A key agreement domain is a set of parameters that must be shared -/// by two parties in a key agreement protocol, along with the algorithms -/// for generating key pairs and deriving agreed values. -/// \since Crypto++ 3.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE SimpleKeyAgreementDomain : public KeyAgreementAlgorithm -{ -public: - virtual ~SimpleKeyAgreementDomain() {} - - /// \brief Provides the size of the agreed value - /// \return size of agreed value produced in this domain - virtual unsigned int AgreedValueLength() const =0; - - /// \brief Provides the size of the private key - /// \return size of private keys in this domain - virtual unsigned int PrivateKeyLength() const =0; - - /// \brief Provides the size of the public key - /// \return size of public keys in this domain - virtual unsigned int PublicKeyLength() const =0; - - /// \brief Generate private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \pre COUNTOF(privateKey) == PrivateKeyLength() - virtual void GeneratePrivateKey(RandomNumberGenerator &rng, byte *privateKey) const =0; - - /// \brief Generate a public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \pre COUNTOF(publicKey) == PublicKeyLength() - virtual void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0; - - /// \brief Generate a private/public key pair - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \param publicKey a byte buffer for the generated public key in this domain - /// \details GenerateKeyPair() is equivalent to calling GeneratePrivateKey() and then GeneratePublicKey(). - /// \pre COUNTOF(privateKey) == PrivateKeyLength() - /// \pre COUNTOF(publicKey) == PublicKeyLength() - virtual void GenerateKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const; - - /// \brief Derive agreed value - /// \param agreedValue a byte buffer for the shared secret - /// \param privateKey a byte buffer with your private key in this domain - /// \param otherPublicKey a byte buffer with the other party's public key in this domain - /// \param validateOtherPublicKey a flag indicating if the other party's public key should be validated - /// \return true upon success, false in case of failure - /// \details Agree() derives an agreed value from your private keys and couterparty's public keys. - /// \details The other party's public key is validated by default. If you have previously validated the - /// static public key, use validateStaticOtherPublicKey=false to save time. - /// \pre COUNTOF(agreedValue) == AgreedValueLength() - /// \pre COUNTOF(privateKey) == PrivateKeyLength() - /// \pre COUNTOF(otherPublicKey) == PublicKeyLength() - virtual bool Agree(byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const =0; -}; - -/// \brief Interface for domains of authenticated key agreement protocols -/// \details In an authenticated key agreement protocol, each party has two -/// key pairs. The long-lived key pair is called the static key pair, -/// and the short-lived key pair is called the ephemeral key pair. -/// \since Crypto++ 3.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AuthenticatedKeyAgreementDomain : public KeyAgreementAlgorithm -{ -public: - virtual ~AuthenticatedKeyAgreementDomain() {} - - /// \brief Provides the size of the agreed value - /// \return size of agreed value produced in this domain - virtual unsigned int AgreedValueLength() const =0; - - /// \brief Provides the size of the static private key - /// \return size of static private keys in this domain - virtual unsigned int StaticPrivateKeyLength() const =0; - - /// \brief Provides the size of the static public key - /// \return size of static public keys in this domain - virtual unsigned int StaticPublicKeyLength() const =0; - - /// \brief Generate static private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \pre COUNTOF(privateKey) == PrivateStaticKeyLength() - virtual void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const =0; - - /// \brief Generate a static public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \pre COUNTOF(publicKey) == PublicStaticKeyLength() - virtual void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0; - - /// \brief Generate a static private/public key pair - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \param publicKey a byte buffer for the generated public key in this domain - /// \details GenerateStaticKeyPair() is equivalent to calling GenerateStaticPrivateKey() and then GenerateStaticPublicKey(). - /// \pre COUNTOF(privateKey) == PrivateStaticKeyLength() - /// \pre COUNTOF(publicKey) == PublicStaticKeyLength() - virtual void GenerateStaticKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const; - - /// \brief Provides the size of ephemeral private key - /// \return the size of ephemeral private key in this domain - virtual unsigned int EphemeralPrivateKeyLength() const =0; - - /// \brief Provides the size of ephemeral public key - /// \return the size of ephemeral public key in this domain - virtual unsigned int EphemeralPublicKeyLength() const =0; - - /// \brief Generate ephemeral private key - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \pre COUNTOF(privateKey) == PrivateEphemeralKeyLength() - virtual void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const =0; - - /// \brief Generate ephemeral public key - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \param publicKey a byte buffer for the generated public key in this domain - /// \pre COUNTOF(publicKey) == PublicEphemeralKeyLength() - virtual void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0; - - /// \brief Generate private/public key pair - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \param publicKey a byte buffer for the generated public key in this domain - /// \details GenerateEphemeralKeyPair() is equivalent to calling GenerateEphemeralPrivateKey() and then GenerateEphemeralPublicKey() - virtual void GenerateEphemeralKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const; - - /// \brief Derive agreed value - /// \param agreedValue a byte buffer for the shared secret - /// \param staticPrivateKey a byte buffer with your static private key in this domain - /// \param ephemeralPrivateKey a byte buffer with your ephemeral private key in this domain - /// \param staticOtherPublicKey a byte buffer with the other party's static public key in this domain - /// \param ephemeralOtherPublicKey a byte buffer with the other party's ephemeral public key in this domain - /// \param validateStaticOtherPublicKey a flag indicating if the other party's public key should be validated - /// \return true upon success, false in case of failure - /// \details Agree() derives an agreed value from your private keys and couterparty's public keys. - /// \details The other party's ephemeral public key is validated by default. If you have previously validated - /// the static public key, use validateStaticOtherPublicKey=false to save time. - /// \pre COUNTOF(agreedValue) == AgreedValueLength() - /// \pre COUNTOF(staticPrivateKey) == StaticPrivateKeyLength() - /// \pre COUNTOF(ephemeralPrivateKey) == EphemeralPrivateKeyLength() - /// \pre COUNTOF(staticOtherPublicKey) == StaticPublicKeyLength() - /// \pre COUNTOF(ephemeralOtherPublicKey) == EphemeralPublicKeyLength() - virtual bool Agree(byte *agreedValue, - const byte *staticPrivateKey, const byte *ephemeralPrivateKey, - const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, - bool validateStaticOtherPublicKey=true) const =0; -}; - -// interface for password authenticated key agreement protocols, not implemented yet -#if 0 -/// \brief Interface for protocol sessions -/*! The methods should be called in the following order: - - InitializeSession(rng, parameters); // or call initialize method in derived class - while (true) - { - if (OutgoingMessageAvailable()) - { - length = GetOutgoingMessageLength(); - GetOutgoingMessage(message); - ; // send outgoing message - } - - if (LastMessageProcessed()) - break; - - ; // receive incoming message - ProcessIncomingMessage(message); - } - ; // call methods in derived class to obtain result of protocol session -*/ -class ProtocolSession -{ -public: - /// Exception thrown when an invalid protocol message is processed - class ProtocolError : public Exception - { - public: - ProtocolError(ErrorType errorType, const std::string &s) : Exception(errorType, s) {} - }; - - /// Exception thrown when a function is called unexpectedly - /*! for example calling ProcessIncomingMessage() when ProcessedLastMessage() == true */ - class UnexpectedMethodCall : public Exception - { - public: - UnexpectedMethodCall(const std::string &s) : Exception(OTHER_ERROR, s) {} - }; - - virtual ~ProtocolSession() {} - - ProtocolSession() : m_rng(NULLPTR), m_throwOnProtocolError(true), m_validState(false) {} - - virtual void InitializeSession(RandomNumberGenerator &rng, const NameValuePairs ¶meters) =0; - - bool GetThrowOnProtocolError() const {return m_throwOnProtocolError;} - void SetThrowOnProtocolError(bool throwOnProtocolError) {m_throwOnProtocolError = throwOnProtocolError;} - - bool HasValidState() const {return m_validState;} - - virtual bool OutgoingMessageAvailable() const =0; - virtual unsigned int GetOutgoingMessageLength() const =0; - virtual void GetOutgoingMessage(byte *message) =0; - - virtual bool LastMessageProcessed() const =0; - virtual void ProcessIncomingMessage(const byte *message, unsigned int messageLength) =0; - -protected: - void HandleProtocolError(Exception::ErrorType errorType, const std::string &s) const; - void CheckAndHandleInvalidState() const; - void SetValidState(bool valid) {m_validState = valid;} - - RandomNumberGenerator *m_rng; - -private: - bool m_throwOnProtocolError, m_validState; -}; - -class KeyAgreementSession : public ProtocolSession -{ -public: - virtual ~KeyAgreementSession() {} - - virtual unsigned int GetAgreedValueLength() const =0; - virtual void GetAgreedValue(byte *agreedValue) const =0; -}; - -class PasswordAuthenticatedKeyAgreementSession : public KeyAgreementSession -{ -public: - virtual ~PasswordAuthenticatedKeyAgreementSession() {} - - void InitializePasswordAuthenticatedKeyAgreementSession(RandomNumberGenerator &rng, - const byte *myId, unsigned int myIdLength, - const byte *counterPartyId, unsigned int counterPartyIdLength, - const byte *passwordOrVerifier, unsigned int passwordOrVerifierLength); -}; - -/// \brief Password based key agreement domain -/// \since Crypto++ 3.0 -class PasswordAuthenticatedKeyAgreementDomain : public KeyAgreementAlgorithm -{ -public: - virtual ~PasswordAuthenticatedKeyAgreementDomain() {} - - /// return whether the domain parameters stored in this object are valid - virtual bool ValidateDomainParameters(RandomNumberGenerator &rng) const - {return GetCryptoParameters().Validate(rng, 2);} - - virtual unsigned int GetPasswordVerifierLength(const byte *password, unsigned int passwordLength) const =0; - virtual void GeneratePasswordVerifier(RandomNumberGenerator &rng, const byte *userId, unsigned int userIdLength, const byte *password, unsigned int passwordLength, byte *verifier) const =0; - - enum RoleFlags {CLIENT=1, SERVER=2, INITIATOR=4, RESPONDER=8}; - - virtual bool IsValidRole(unsigned int role) =0; - virtual PasswordAuthenticatedKeyAgreementSession * CreateProtocolSession(unsigned int role) const =0; -}; -#endif - -/// \brief Exception thrown when an ASN.1 BER decoing error is encountered -class CRYPTOPP_DLL BERDecodeErr : public InvalidArgument -{ -public: - BERDecodeErr() : InvalidArgument("BER decode error") {} - BERDecodeErr(const std::string &s) : InvalidArgument(s) {} -}; - -/// \brief Interface for encoding and decoding ASN1 objects -/// \details Each class that derives from ASN1Object should provide a serialization format -/// that controls subobject layout. Most of the time the serialization format is -/// taken from a standard, like P1363 or an RFC. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE ASN1Object -{ -public: - virtual ~ASN1Object() {} - - /// \brief Decode this object from a BufferedTransformation - /// \param bt BufferedTransformation object - /// \details Uses Basic Encoding Rules (BER) - virtual void BERDecode(BufferedTransformation &bt) =0; - - /// \brief Encode this object into a BufferedTransformation - /// \param bt BufferedTransformation object - /// \details Uses Distinguished Encoding Rules (DER) - virtual void DEREncode(BufferedTransformation &bt) const =0; - - /// \brief Encode this object into a BufferedTransformation - /// \param bt BufferedTransformation object - /// \details Uses Basic Encoding Rules (BER). - /// \details This may be useful if DEREncode() would be too inefficient. - virtual void BEREncode(BufferedTransformation &bt) const {DEREncode(bt);} -}; - -/// \brief Specifies the build-time version of the library -/// \return integer representing the build-time version -/// \details LibraryVersion can help detect inadvertent mixing and matching of library -/// versions. When using Crypto++ distributed by a third party, LibraryVersion() -/// records the version of the shared object that was built by the third party. -/// The LibraryVersion() record resides in cryptlib.o on Unix compatibles -/// and cryptlib.obj on Windows. It does not change when an app links -/// to the library. -/// \details LibraryVersion() is declared with C linkage (extern "C") within the -/// CryptoPP namespace to help programs locate the symbol. If the symbol is present, then -/// the library version is 5.7 or above. If it is missing, then the library version is -/// 5.6.5 or below. -/// \details The function could be used as shown below. -///
  if (LibraryVersion() != HeaderVersion())
-///   {
-///      cout << "Potential version mismatch" << endl;
-///
-///      const int lmaj = (LibraryVersion() / 100U) % 10;
-///      const int lmin = (LibraryVersion() / 10U) % 10;
-///      const int hmaj = (HeaderVersion() / 100U) % 10;
-///      const int hmin = (HeaderVersion() / 10U) % 10;
-///
-///      if(lmaj != hmaj)
-///         cout << "Major version mismatch" << endl;
-///      else if(lmin != hmin)
-///         cout << "Minor version mismatch" << endl;
-///   }
-/// 
-/// \sa HeaderVersion(), GitHub Issue 371. -/// \since Crypto++ 6.0 -extern "C" { - int LibraryVersion(CRYPTOPP_NOINLINE_DOTDOTDOT); -} // C linkage - -/// \brief Specifies the runtime version of the library -/// \return integer representing the runtime version -/// \details HeaderVersion() can help detect inadvertent mixing and matching of library -/// versions. When using Crypto++ distributed by a third party, HeaderVersion() -/// records the version of the headers used by the app when the app is compiled. -/// \details HeaderVersion() is declared with C linkage (extern "C") within the -/// CryptoPP namespace to help programs locate the symbol. If the symbol is present, then -/// the library version is 5.7 or above. If it is missing, then the library version is -/// 5.6.5 or below. -/// \details The function could be used as shown below. -///
  if (LibraryVersion() != HeaderVersion())
-///   {
-///      cout << "Potential version mismatch" << endl;
-///
-///      const int lmaj = (LibraryVersion() / 100U) % 10;
-///      const int lmin = (LibraryVersion() / 10U) % 10;
-///      const int hmaj = (HeaderVersion() / 100U) % 10;
-///      const int hmin = (HeaderVersion() / 10U) % 10;
-///
-///      if(lmaj != hmaj)
-///         cout << "Major version mismatch" << endl;
-///      else if(lmin != hmin)
-///         cout << "Minor version mismatch" << endl;
-///   }
-/// 
-/// \sa LibraryVersion(), GitHub Issue 371. -/// \since Crypto++ 6.0 -extern "C" { -inline int HeaderVersion() -{ - return CRYPTOPP_VERSION; -} -} // C linkage - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/darn.h b/third_party/cryptoppwin/include/cryptopp/darn.h deleted file mode 100644 index 41062b32..00000000 --- a/third_party/cryptoppwin/include/cryptopp/darn.h +++ /dev/null @@ -1,95 +0,0 @@ -// darn.h - written and placed in public domain by Jeffrey Walton -// DARN requires POWER9/ISA 3.0. - -// At the moment only GCC 7.0 (and above) seems to support __builtin_darn() -// and __builtin_darn_32(). However, GCC generates incorrect code. Clang 7.0 -// does not provide them, but it does support assembly instructions. XLC is -// unknown, but there are no hits when searching IBM's site. To cover more -// platforms we provide GCC inline assembly like we do with RDRAND and RDSEED. -// Platforms that don't support GCC inline assembly or the builtin will fail -// to compile. Also see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91481 and -// https://gcc.gnu.org/onlinedocs/gcc/Basic-PowerPC-Built-in-Functions-Available-on-ISA-3_002e0.html - -/// \file darn.h -/// \brief Classes for DARN RNG -/// \sa Power -/// ISA Version 3.0B -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_DARN_H -#define CRYPTOPP_DARN_H - -#include "cryptlib.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Exception thrown when a DARN generator encounters -/// a generator related error. -/// \since Crypto++ 8.0 -class DARN_Err : public Exception -{ -public: - DARN_Err(const std::string &operation) - : Exception(OTHER_ERROR, "DARN: " + operation + " operation failed") {} -}; - -/// \brief Hardware generated random numbers using DARN instruction -/// \details DARN() provides access to Power9's random number generator. The -/// Crypto++ implementation provides conditioned random numbers from the -/// generator as opposed to raw random numbers. According to Power ISA 3.0B -/// manual, a conditioned random number has been processed by hardware to -/// reduce bias. A raw random number is unconditioned noise source output. -/// \details According to Power ISA 3.0B manual, the random number generator -/// provided by the darn instruction is NIST SP800-90B and SP800-90C -/// compliant to the extent possible given the completeness of the standards -/// at the time the hardware is designed. The random number generator provides -/// a minimum of 0.5 bits of entropy per bit. -/// \par Wraps -/// darn instruction -/// \sa Power -/// ISA Version 3.0B, MaurerRandomnessTest() for random bit generators -/// \since Crypto++ 8.0 -class DARN : public RandomNumberGenerator -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "DARN"; } - - virtual ~DARN() {} - - /// \brief Construct a DARN generator - /// \throw DARN_Err if the random number generator is not available - DARN(); - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - virtual void GenerateBlock(byte *output, size_t size); - - /// \brief Generate and discard n bytes - /// \param n the number of bytes to generate and discard - /// \details the RDSEED generator discards words, not bytes. If n is - /// not a multiple of a machine word, then it is rounded up to - /// that size. - virtual void DiscardBytes(size_t n); - - /// \brief Update RNG state with additional unpredictable values - /// \param input unused - /// \param length unused - /// \details The operation is a nop for this generator. - virtual void IncorporateEntropy(const byte *input, size_t length) - { - // Override to avoid the base class' throw. - CRYPTOPP_UNUSED(input); CRYPTOPP_UNUSED(length); - } - - std::string AlgorithmProvider() const { - return "Power9"; - } - -private: - SecBlock > m_temp; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_DARN_H diff --git a/third_party/cryptoppwin/include/cryptopp/default.h b/third_party/cryptoppwin/include/cryptopp/default.h deleted file mode 100644 index cb24afb7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/default.h +++ /dev/null @@ -1,310 +0,0 @@ -// default.h - originally written and placed in the public domain by Wei Dai - -/// \file default.h -/// \brief Classes for DefaultEncryptor, DefaultDecryptor, DefaultEncryptorWithMAC and DefaultDecryptorWithMAC - -#ifndef CRYPTOPP_DEFAULT_H -#define CRYPTOPP_DEFAULT_H - -#include "sha.h" -#include "hmac.h" -#include "aes.h" -#include "des.h" -#include "modes.h" -#include "filters.h" -#include "smartptr.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Legacy block cipher for LegacyEncryptor, LegacyDecryptor, LegacyEncryptorWithMAC and LegacyDecryptorWithMAC -typedef DES_EDE2 LegacyBlockCipher; -/// \brief Legacy hash for use with LegacyEncryptorWithMAC and LegacyDecryptorWithMAC -typedef SHA1 LegacyHashModule; -/// \brief Legacy HMAC for use withLegacyEncryptorWithMAC and LegacyDecryptorWithMAC -typedef HMAC LegacyMAC; - -/// \brief Default block cipher for DefaultEncryptor, DefaultDecryptor, DefaultEncryptorWithMAC and DefaultDecryptorWithMAC -typedef AES DefaultBlockCipher; -/// \brief Default hash for use with DefaultEncryptorWithMAC and DefaultDecryptorWithMAC -typedef SHA256 DefaultHashModule; -/// \brief Default HMAC for use withDefaultEncryptorWithMAC and DefaultDecryptorWithMAC -typedef HMAC DefaultMAC; - -/// \brief Exception thrown when LegacyDecryptorWithMAC or DefaultDecryptorWithMAC decryption error is encountered -class DataDecryptorErr : public Exception -{ -public: - DataDecryptorErr(const std::string &s) - : Exception(DATA_INTEGRITY_CHECK_FAILED, s) {} -}; - -/// \brief Exception thrown when a bad key is encountered in DefaultDecryptorWithMAC and LegacyDecryptorWithMAC -class KeyBadErr : public DataDecryptorErr -{ - public: KeyBadErr() - : DataDecryptorErr("DataDecryptor: cannot decrypt message with this passphrase") {} -}; - -/// \brief Exception thrown when an incorrect MAC is encountered in DefaultDecryptorWithMAC and LegacyDecryptorWithMAC -class MACBadErr : public DataDecryptorErr -{ - public: MACBadErr() - : DataDecryptorErr("DataDecryptorWithMAC: MAC check failed") {} -}; - -/// \brief Algorithm information for password-based encryptors and decryptors -template -struct DataParametersInfo -{ - CRYPTOPP_CONSTANT(BLOCKSIZE = BlockSize); - CRYPTOPP_CONSTANT(KEYLENGTH = KeyLength); - CRYPTOPP_CONSTANT(SALTLENGTH = SaltSize); - CRYPTOPP_CONSTANT(DIGESTSIZE = DigestSize); - CRYPTOPP_CONSTANT(ITERATIONS = Iterations); -}; - -typedef DataParametersInfo LegacyParametersInfo; -typedef DataParametersInfo DefaultParametersInfo; - -/// \brief Password-based Encryptor -/// \tparam BC BlockCipher based class used for encryption -/// \tparam H HashTransformation based class used for mashing -/// \tparam Info Constants used by the algorithms -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. -/// \sa DefaultEncryptor, DefaultDecryptor, LegacyEncryptor, LegacyDecryptor -/// \since Crypto++ 2.0 -template -class DataEncryptor : public ProxyFilter, public Info -{ -public: - CRYPTOPP_CONSTANT(BLOCKSIZE = Info::BLOCKSIZE); - CRYPTOPP_CONSTANT(KEYLENGTH = Info::KEYLENGTH); - CRYPTOPP_CONSTANT(SALTLENGTH = Info::SALTLENGTH); - CRYPTOPP_CONSTANT(DIGESTSIZE = Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(ITERATIONS = Info::ITERATIONS); - - /// \brief Construct a DataEncryptor - /// \param passphrase a C-String password - /// \param attachment a BufferedTransformation to attach to this object - DataEncryptor(const char *passphrase, BufferedTransformation *attachment = NULLPTR); - - /// \brief Construct a DataEncryptor - /// \param passphrase a byte string password - /// \param passphraseLength the length of the byte string password - /// \param attachment a BufferedTransformation to attach to this object - DataEncryptor(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULLPTR); - -protected: - void FirstPut(const byte *); - void LastPut(const byte *inString, size_t length); - -private: - SecByteBlock m_passphrase; - typename CBC_Mode::Encryption m_cipher; -}; - -/// \brief Password-based Decryptor -/// \tparam BC BlockCipher based class used for encryption -/// \tparam H HashTransformation based class used for mashing -/// \tparam Info Constants used by the algorithms -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. -/// \sa DefaultEncryptor, DefaultDecryptor, LegacyEncryptor, LegacyDecryptor -/// \since Crypto++ 2.0 -template -class DataDecryptor : public ProxyFilter, public Info -{ -public: - CRYPTOPP_CONSTANT(BLOCKSIZE = Info::BLOCKSIZE); - CRYPTOPP_CONSTANT(KEYLENGTH = Info::KEYLENGTH); - CRYPTOPP_CONSTANT(SALTLENGTH = Info::SALTLENGTH); - CRYPTOPP_CONSTANT(DIGESTSIZE = Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(ITERATIONS = Info::ITERATIONS); - - /// \brief Constructs a DataDecryptor - /// \param passphrase a C-String password - /// \param attachment a BufferedTransformation to attach to this object - /// \param throwException a flag specifying whether an Exception should be thrown on error - DataDecryptor(const char *passphrase, BufferedTransformation *attachment = NULLPTR, bool throwException=true); - - /// \brief Constructs a DataDecryptor - /// \param passphrase a byte string password - /// \param passphraseLength the length of the byte string password - /// \param attachment a BufferedTransformation to attach to this object - /// \param throwException a flag specifying whether an Exception should be thrown on error - DataDecryptor(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULLPTR, bool throwException=true); - - enum State {WAITING_FOR_KEYCHECK, KEY_GOOD, KEY_BAD}; - State CurrentState() const {return m_state;} - -protected: - void FirstPut(const byte *inString); - void LastPut(const byte *inString, size_t length); - - State m_state; - -private: - void CheckKey(const byte *salt, const byte *keyCheck); - - SecByteBlock m_passphrase; - typename CBC_Mode::Decryption m_cipher; - member_ptr m_decryptor; - bool m_throwException; - -}; - -/// \brief Password-based encryptor with MAC -/// \tparam BC BlockCipher based class used for encryption -/// \tparam H HashTransformation based class used for mashing -/// \tparam MAC HashTransformation based class used for authentication -/// \tparam Info Constants used by the algorithms -/// \details DataEncryptorWithMAC uses a non-standard mashup function called Mash() to derive key -/// bits from the password. -/// \details The purpose of the function Mash() is to take an arbitrary length input string and -/// *deterministically* produce an arbitrary length output string such that (1) it looks random, -/// (2) no information about the input is deducible from it, and (3) it contains as much entropy -/// as it can hold, or the amount of entropy in the input string, whichever is smaller. -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. -/// \sa DefaultEncryptorWithMAC, DefaultDecryptorWithMAC, LegacyDecryptorWithMAC, LegacyEncryptorWithMAC -/// \since Crypto++ 2.0 -template -class DataEncryptorWithMAC : public ProxyFilter -{ -public: - CRYPTOPP_CONSTANT(BLOCKSIZE = Info::BLOCKSIZE); - CRYPTOPP_CONSTANT(KEYLENGTH = Info::KEYLENGTH); - CRYPTOPP_CONSTANT(SALTLENGTH = Info::SALTLENGTH); - CRYPTOPP_CONSTANT(DIGESTSIZE = Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(ITERATIONS = Info::ITERATIONS); - - /// \brief Constructs a DataEncryptorWithMAC - /// \param passphrase a C-String password - /// \param attachment a BufferedTransformation to attach to this object - DataEncryptorWithMAC(const char *passphrase, BufferedTransformation *attachment = NULLPTR); - - /// \brief Constructs a DataEncryptorWithMAC - /// \param passphrase a byte string password - /// \param passphraseLength the length of the byte string password - /// \param attachment a BufferedTransformation to attach to this object - DataEncryptorWithMAC(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULLPTR); - -protected: - void FirstPut(const byte *inString) {CRYPTOPP_UNUSED(inString);} - void LastPut(const byte *inString, size_t length); - -private: - member_ptr m_mac; - -}; - -/// \brief Password-based decryptor with MAC -/// \tparam BC BlockCipher based class used for encryption -/// \tparam H HashTransformation based class used for mashing -/// \tparam MAC HashTransformation based class used for authentication -/// \tparam Info Constants used by the algorithms -/// \details DataDecryptorWithMAC uses a non-standard mashup function called Mash() to derive key -/// bits from the password. -/// \details The purpose of the function Mash() is to take an arbitrary length input string and -/// *deterministically* produce an arbitrary length output string such that (1) it looks random, -/// (2) no information about the input is deducible from it, and (3) it contains as much entropy -/// as it can hold, or the amount of entropy in the input string, whichever is smaller. -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. -/// \sa DefaultEncryptorWithMAC, DefaultDecryptorWithMAC, LegacyDecryptorWithMAC, LegacyEncryptorWithMAC -/// \since Crypto++ 2.0 -template -class DataDecryptorWithMAC : public ProxyFilter -{ -public: - CRYPTOPP_CONSTANT(BLOCKSIZE = Info::BLOCKSIZE); - CRYPTOPP_CONSTANT(KEYLENGTH = Info::KEYLENGTH); - CRYPTOPP_CONSTANT(SALTLENGTH = Info::SALTLENGTH); - CRYPTOPP_CONSTANT(DIGESTSIZE = Info::DIGESTSIZE); - CRYPTOPP_CONSTANT(ITERATIONS = Info::ITERATIONS); - - /// \brief Constructs a DataDecryptor - /// \param passphrase a C-String password - /// \param attachment a BufferedTransformation to attach to this object - /// \param throwException a flag specifying whether an Exception should be thrown on error - DataDecryptorWithMAC(const char *passphrase, BufferedTransformation *attachment = NULLPTR, bool throwException=true); - - /// \brief Constructs a DataDecryptor - /// \param passphrase a byte string password - /// \param passphraseLength the length of the byte string password - /// \param attachment a BufferedTransformation to attach to this object - /// \param throwException a flag specifying whether an Exception should be thrown on error - DataDecryptorWithMAC(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULLPTR, bool throwException=true); - - typename DataDecryptor::State CurrentState() const; - bool CheckLastMAC() const; - -protected: - void FirstPut(const byte *inString) {CRYPTOPP_UNUSED(inString);} - void LastPut(const byte *inString, size_t length); - -private: - member_ptr m_mac; - HashVerificationFilter *m_hashVerifier; - bool m_throwException; -}; - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Password-based encryptor (deprecated) -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct LegacyEncryptor : public DataEncryptor {}; -/// \brief Password-based decryptor (deprecated) -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct LegacyDecryptor : public DataDecryptor {}; -/// \brief Password-based encryptor -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct DefaultEncryptor : public DataEncryptor {}; -/// \brief Password-based decryptor -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct DefaultDecryptor : public DataDecryptor {}; -/// \brief Password-based encryptor with MAC (deprecated) -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct LegacyEncryptorWithMAC : public DataEncryptorWithMAC {}; -/// \brief Password-based decryptor with MAC (deprecated) -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct LegacyDecryptorWithMAC : public DataDecryptorWithMAC {}; -/// \brief Password-based encryptor with MAC -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct DefaultEncryptorWithMAC : public DataEncryptorWithMAC {}; -/// \brief Password-based decryptor with MAC -/// \details Crypto++ 5.6.5 and earlier used the legacy algorithms, including DES_EDE2 and SHA1. -/// Crypto++ 5.7 switched to AES and SHA256. The updated algorithms are available with the -/// Default* classes, and the old algorithms are available with the Legacy* classes. -struct DefaultDecryptorWithMAC : public DataDecryptorWithMAC {}; -#else -typedef DataEncryptor LegacyEncryptor; -typedef DataDecryptor LegacyDecryptor; - -typedef DataEncryptor DefaultEncryptor; -typedef DataDecryptor DefaultDecryptor; - -typedef DataEncryptorWithMAC LegacyEncryptorWithMAC; -typedef DataDecryptorWithMAC LegacyDecryptorWithMAC; - -typedef DataEncryptorWithMAC DefaultEncryptorWithMAC; -typedef DataDecryptorWithMAC DefaultDecryptorWithMAC; -#endif - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/des.h b/third_party/cryptoppwin/include/cryptopp/des.h deleted file mode 100644 index 10ba0598..00000000 --- a/third_party/cryptoppwin/include/cryptopp/des.h +++ /dev/null @@ -1,163 +0,0 @@ -// des.h - originally written and placed in the public domain by Wei Dai - -/// \file des.h -/// \brief Classes for DES, 2-key Triple-DES, 3-key Triple-DES and DESX - -#ifndef CRYPTOPP_DES_H -#define CRYPTOPP_DES_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief DES block cipher base class -/// \since Crypto++ 1.0 -class CRYPTOPP_DLL RawDES -{ -public: - void RawSetKey(CipherDir direction, const byte *userKey); - void RawProcessBlock(word32 &l, word32 &r) const; - -protected: - static const word32 Spbox[8][64]; - - FixedSizeSecBlock k; -}; - -/// \brief DES block cipher information -/// \since Crypto++ 1.0 -struct DES_Info : public FixedBlockSize<8>, public FixedKeyLength<8> -{ - // disable DES in DLL version by not exporting this function - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "DES";} -}; - -/// \brief DES block cipher -/// \details The DES implementation in Crypto++ ignores the parity bits -/// (the least significant bits of each byte) in the key. However you can use CheckKeyParityBits() -/// and CorrectKeyParityBits() to check or correct the parity bits if you wish. -/// \sa DES -/// \since Crypto++ 1.0 -class DES : public DES_Info, public BlockCipherDocumentation -{ - /// \brief DES block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl, public RawDES - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - /// check DES key parity bits - static bool CheckKeyParityBits(const byte *key); - /// correct DES key parity bits - static void CorrectKeyParityBits(byte *key); - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief 2-key TripleDES block cipher information -/// \since Crypto++ 1.0 -struct DES_EDE2_Info : public FixedBlockSize<8>, public FixedKeyLength<16> -{ - CRYPTOPP_DLL static const char * CRYPTOPP_API StaticAlgorithmName() {return "DES-EDE2";} -}; - -/// \brief 2-key TripleDES block cipher -/// \sa DES-EDE2 -/// \since Crypto++ 1.0 -class DES_EDE2 : public DES_EDE2_Info, public BlockCipherDocumentation -{ - /// \brief DES_EDE2 block cipher default operation - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - RawDES m_des1, m_des2; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief 3-key TripleDES block cipher information -/// \since Crypto++ 1.0 -struct DES_EDE3_Info : public FixedBlockSize<8>, public FixedKeyLength<24> -{ - CRYPTOPP_DLL static const char * CRYPTOPP_API StaticAlgorithmName() {return "DES-EDE3";} -}; - -/// \brief 3-key TripleDES block cipher -/// \sa DES-EDE3 -/// \since Crypto++ 1.0 -class DES_EDE3 : public DES_EDE3_Info, public BlockCipherDocumentation -{ - /// \brief DES_EDE3 block cipher default operation - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - RawDES m_des1, m_des2, m_des3; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief DESX block cipher information -/// \since Crypto++ 3.2 -struct DES_XEX3_Info : public FixedBlockSize<8>, public FixedKeyLength<24> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "DES-XEX3";} -}; - -/// \brief DESX block cipher -/// \sa DES-XEX3, AKA DESX -/// \since Crypto++ 3.2 -class DES_XEX3 : public DES_XEX3_Info, public BlockCipherDocumentation -{ - /// \brief DES_XEX3 block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - FixedSizeSecBlock m_x1, m_x3; - // VS2005 workaround: calling modules compiled with /clr gets unresolved external symbol DES::Base::ProcessAndXorBlock - // if we use DES::Encryption here directly without value_ptr. - value_ptr m_des; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef DES::Encryption DESEncryption; -typedef DES::Decryption DESDecryption; - -typedef DES_EDE2::Encryption DES_EDE2_Encryption; -typedef DES_EDE2::Decryption DES_EDE2_Decryption; - -typedef DES_EDE3::Encryption DES_EDE3_Encryption; -typedef DES_EDE3::Decryption DES_EDE3_Decryption; - -typedef DES_XEX3::Encryption DES_XEX3_Encryption; -typedef DES_XEX3::Decryption DES_XEX3_Decryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/dh.h b/third_party/cryptoppwin/include/cryptopp/dh.h deleted file mode 100644 index e12adba1..00000000 --- a/third_party/cryptoppwin/include/cryptopp/dh.h +++ /dev/null @@ -1,275 +0,0 @@ -// dh.h - originally written and placed in the public domain by Wei Dai - -/// \file dh.h -/// \brief Classes for Diffie-Hellman key exchange - -#ifndef CRYPTOPP_DH_H -#define CRYPTOPP_DH_H - -#include "cryptlib.h" -#include "gfpcrypt.h" -#include "algebra.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Diffie-Hellman domain -/// \tparam GROUP_PARAMETERS group parameters -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \details A Diffie-Hellman domain is a set of parameters that must be shared -/// by two parties in a key agreement protocol, along with the algorithms -/// for generating key pairs and deriving agreed values. -/// \details For COFACTOR_OPTION, see CofactorMultiplicationOption. -/// \sa DL_SimpleKeyAgreementDomainBase -/// \since Crypto++ 1.0 -template -class DH_Domain : public DL_SimpleKeyAgreementDomainBase -{ - typedef DL_SimpleKeyAgreementDomainBase Base; - -public: - typedef GROUP_PARAMETERS GroupParameters; - typedef typename GroupParameters::Element Element; - typedef DL_KeyAgreementAlgorithm_DH DH_Algorithm; - typedef DH_Domain Domain; - - virtual ~DH_Domain() {} - - /// \brief Construct a Diffie-Hellman domain - DH_Domain() {} - - /// \brief Construct a Diffie-Hellman domain - /// \param params group parameters and options - DH_Domain(const GroupParameters ¶ms) - : m_groupParameters(params) {} - - /// \brief Construct a Diffie-Hellman domain - /// \param bt BufferedTransformation with group parameters and options - DH_Domain(BufferedTransformation &bt) - {m_groupParameters.BERDecode(bt);} - - /// \brief Create a Diffie-Hellman domain - /// \tparam T2 template parameter used as a constructor parameter - /// \param v1 RandomNumberGenerator derived class - /// \param v2 second parameter - /// \details v1 and v2 are passed directly to the GROUP_PARAMETERS object. - template - DH_Domain(RandomNumberGenerator &v1, const T2 &v2) - {m_groupParameters.Initialize(v1, v2);} - - /// \brief Create a Diffie-Hellman domain - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \param v1 RandomNumberGenerator derived class - /// \param v2 second parameter - /// \param v3 third parameter - /// \details v1, v2 and v3 are passed directly to the GROUP_PARAMETERS object. - template - DH_Domain(RandomNumberGenerator &v1, const T2 &v2, const T3 &v3) - {m_groupParameters.Initialize(v1, v2, v3);} - - /// \brief Create a Diffie-Hellman domain - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \tparam T4 template parameter used as a constructor parameter - /// \param v1 RandomNumberGenerator derived class - /// \param v2 second parameter - /// \param v3 third parameter - /// \param v4 fourth parameter - /// \details v1, v2, v3 and v4 are passed directly to the GROUP_PARAMETERS object. - template - DH_Domain(RandomNumberGenerator &v1, const T2 &v2, const T3 &v3, const T4 &v4) - {m_groupParameters.Initialize(v1, v2, v3, v4);} - - /// \brief Construct a Diffie-Hellman domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \details v1 and v2 are passed directly to the GROUP_PARAMETERS object. - template - DH_Domain(const T1 &v1, const T2 &v2) - {m_groupParameters.Initialize(v1, v2);} - - /// \brief Construct a Diffie-Hellman domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \details v1, v2 and v3 are passed directly to the GROUP_PARAMETERS object. - template - DH_Domain(const T1 &v1, const T2 &v2, const T3 &v3) - {m_groupParameters.Initialize(v1, v2, v3);} - - /// \brief Construct a Diffie-Hellman domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \tparam T4 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \param v4 fourth parameter - /// \details v1, v2, v3 and v4 are passed directly to the GROUP_PARAMETERS object. - template - DH_Domain(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) - {m_groupParameters.Initialize(v1, v2, v3, v4);} - - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a const reference - const GroupParameters & GetGroupParameters() const {return m_groupParameters;} - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a non-const reference - GroupParameters & AccessGroupParameters() {return m_groupParameters;} - - /// \brief Generate a public key from a private key in this domain - /// \param rng RandomNumberGenerator derived class - /// \param privateKey byte buffer with the previously generated private key - /// \param publicKey byte buffer for the generated public key in this domain - /// \details If using a FIPS 140-2 validated library on Windows, then this class will perform - /// a self test to ensure the key pair is pairwise consistent. Non-FIPS and non-Windows - /// builds of the library do not provide FIPS validated cryptography, so the code should be - /// removed by the optimizer. - /// \pre COUNTOF(publicKey) == PublicKeyLength() - void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - Base::GeneratePublicKey(rng, privateKey, publicKey); - - if (FIPS_140_2_ComplianceEnabled()) - { - SecByteBlock privateKey2(this->PrivateKeyLength()); - this->GeneratePrivateKey(rng, privateKey2); - - SecByteBlock publicKey2(this->PublicKeyLength()); - Base::GeneratePublicKey(rng, privateKey2, publicKey2); - - SecByteBlock agreedValue(this->AgreedValueLength()), agreedValue2(this->AgreedValueLength()); - bool agreed1 = this->Agree(agreedValue, privateKey, publicKey2); - bool agreed2 = this->Agree(agreedValue2, privateKey2, publicKey); - - if (!agreed1 || !agreed2 || agreedValue != agreedValue2) - throw SelfTestFailure(this->AlgorithmName() + ": pairwise consistency test failed"); - } - } - - static std::string CRYPTOPP_API StaticAlgorithmName() - {return GroupParameters::StaticAlgorithmNamePrefix() + DH_Algorithm::StaticAlgorithmName();} - std::string AlgorithmName() const {return StaticAlgorithmName();} - -private: - const DL_KeyAgreementAlgorithm & GetKeyAgreementAlgorithm() const - {return Singleton().Ref();} - DL_GroupParameters & AccessAbstractGroupParameters() - {return m_groupParameters;} - - GroupParameters m_groupParameters; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS DH_Domain; - -/// \brief Diffie-Hellman in GF(p) -/// \details DH() class is a typedef of DH_Domain(). The documentation that follows -/// does not exist. Rather the documentation was created in response to Issue -/// 328, Diffie-Hellman example code not compiling. -/// \details Generally speaking, a DH() object is ephemeral and is intended to execute one instance of the Diffie-Hellman protocol. The -/// private and public key parts are not intended to be set or persisted. Rather, a new set of domain parameters are generated each -/// time an object is created. -/// \details Once a DH() object is created, once can retrieve the ephemeral public key for the other party with code similar to the -/// following. -///
   AutoSeededRandomPool prng;
-///   Integer p, q, g;
-///   PrimeAndGenerator pg;
-///
-///   pg.Generate(1, prng, 512, 511);
-///   p = pg.Prime();
-///   q = pg.SubPrime();
-///   g = pg.Generator();
-///
-///   DH dh(p, q, g);
-///   SecByteBlock t1(dh.PrivateKeyLength()), t2(dh.PublicKeyLength());
-///   dh.GenerateKeyPair(prng, t1, t2);
-///   Integer k1(t1, t1.size()), k2(t2, t2.size());
-///
-///   cout << "Private key:\n";
-///   cout << hex << k1 << endl;
-///
-///   cout << "Public key:\n";
-///   cout << hex << k2 << endl;
-/// -/// \details Output of the program above will be similar to the following. -///
   $ ./cryptest.exe
-///   Private key:
-///   72b45a42371545e9d4880f48589aefh
-///   Public key:
-///   45fdb13f97b1840626f0250cec1dba4a23b894100b51fb5d2dd13693d789948f8bfc88f9200014b2
-///   ba8dd8a6debc471c69ef1e2326c61184a2eca88ec866346bh
-/// \sa Diffie-Hellman on the Crypto++ wiki and -/// Diffie-Hellman in GF(p) with key validation -/// \since Crypto++ 1.0 -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -struct DH : public DH_Domain -{ - typedef DH_Domain GroupParameters; - typedef GroupParameters::Element Element; - - virtual ~DH() {} - - /// \brief Create an uninitialized Diffie-Hellman object - DH() : DH_Domain() {} - - /// \brief Initialize a Diffie-Hellman object - /// \param bt BufferedTransformation with group parameters and options - DH(BufferedTransformation &bt) : DH_Domain(bt) {} - - /// \brief Initialize a Diffie-Hellman object - /// \param params group parameters and options - DH(const GroupParameters ¶ms) : DH_Domain(params) {} - - /// \brief Create a Diffie-Hellman object - /// \param rng a RandomNumberGenerator derived class - /// \param modulusBits the size of the modulus, in bits - /// \details This function overload of Initialize() creates a new Diffie-Hellman object because it - /// takes a RandomNumberGenerator() as a parameter. - DH(RandomNumberGenerator &rng, unsigned int modulusBits) : DH_Domain(rng, modulusBits) {} - - /// \brief Initialize a Diffie-Hellman object - /// \param p the modulus - /// \param g the generator - DH(const Integer &p, const Integer &g) : DH_Domain(p, g) {} - - /// \brief Initialize a Diffie-Hellman object - /// \param p the modulus - /// \param q the subgroup order - /// \param g the generator - DH(const Integer &p, const Integer &q, const Integer &g) : DH_Domain(p, q, g) {} - - /// \brief Creates a Diffie-Hellman object - /// \param rng a RandomNumberGenerator derived class - /// \param modulusBits the size of the modulus, in bits - /// \details This function overload of Initialize() creates a new Diffie-Hellman object because it - /// takes a RandomNumberGenerator() as a parameter. - void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits) - {AccessGroupParameters().Initialize(rng, modulusBits);} - - /// \brief Initialize a Diffie-Hellman object - /// \param p the modulus - /// \param g the generator - void Initialize(const Integer &p, const Integer &g) - {AccessGroupParameters().Initialize(p, g);} - - /// \brief Initialize a Diffie-Hellman object - /// \param p the modulus - /// \param q the subgroup order - /// \param g the generator - void Initialize(const Integer &p, const Integer &q, const Integer &g) - {AccessGroupParameters().Initialize(p, q, g);} -}; -#else -// The real DH class is a typedef. -typedef DH_Domain DH; -#endif - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/dh2.h b/third_party/cryptoppwin/include/cryptopp/dh2.h deleted file mode 100644 index 6cbfe46b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/dh2.h +++ /dev/null @@ -1,70 +0,0 @@ -// dh2.h - originally written and placed in the public domain by Wei Dai - -/// \file dh2.h -/// \brief Classes for Unified Diffie-Hellman key exchange -/// \since Crypto++ 3.0 - -#ifndef CRYPTOPP_DH2_H -#define CRYPTOPP_DH2_H - -#include "cryptlib.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Unified Diffie-Hellman in GF(p) -/// \details A Diffie-Hellman domain is a set of parameters that must be shared -/// by two parties in a key agreement protocol, along with the algorithms -/// for generating key pairs and deriving agreed values. -/// \sa AuthenticatedKeyAgreementDomain, Unified Diffie-Hellman -/// \since Crypto++ 3.0 -class DH2 : public AuthenticatedKeyAgreementDomain -{ -public: - virtual ~DH2() {} - - /// \brief Construct a DH2 - DH2(SimpleKeyAgreementDomain &domain) - : d1(domain), d2(domain) {} - /// \brief Construct a DH2 - DH2(SimpleKeyAgreementDomain &staticDomain, SimpleKeyAgreementDomain &ephemeralDomain) - : d1(staticDomain), d2(ephemeralDomain) {} - - CryptoParameters & AccessCryptoParameters() {return d1.AccessCryptoParameters();} - - unsigned int AgreedValueLength() const - {return d1.AgreedValueLength() + d2.AgreedValueLength();} - - unsigned int StaticPrivateKeyLength() const - {return d1.PrivateKeyLength();} - unsigned int StaticPublicKeyLength() const - {return d1.PublicKeyLength();} - void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - {d1.GeneratePrivateKey(rng, privateKey);} - void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - {d1.GeneratePublicKey(rng, privateKey, publicKey);} - void GenerateStaticKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const - {d1.GenerateKeyPair(rng, privateKey, publicKey);} - - unsigned int EphemeralPrivateKeyLength() const - {return d2.PrivateKeyLength();} - unsigned int EphemeralPublicKeyLength() const - {return d2.PublicKeyLength();} - void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - {d2.GeneratePrivateKey(rng, privateKey);} - void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - {d2.GeneratePublicKey(rng, privateKey, publicKey);} - void GenerateEphemeralKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const - {d2.GenerateKeyPair(rng, privateKey, publicKey);} - - bool Agree(byte *agreedValue, - const byte *staticPrivateKey, const byte *ephemeralPrivateKey, - const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, - bool validateStaticOtherPublicKey=true) const; - -protected: - SimpleKeyAgreementDomain &d1, &d2; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/dll.h b/third_party/cryptoppwin/include/cryptopp/dll.h deleted file mode 100644 index 1537ee6d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/dll.h +++ /dev/null @@ -1,71 +0,0 @@ -// dll.h - originally written and placed in the public domain by Wei Dai - -/// \file dll.h -/// \brief Functions and definitions required for building the FIPS-140 DLL on Windows - -#ifndef CRYPTOPP_DLL_H -#define CRYPTOPP_DLL_H - -#if !defined(CRYPTOPP_IMPORTS) && !defined(CRYPTOPP_EXPORTS) && !defined(CRYPTOPP_DEFAULT_NO_DLL) -#ifdef CRYPTOPP_CONFIG_H -#error To use the DLL version of Crypto++, this file must be included before any other Crypto++ header files. -#endif -#define CRYPTOPP_IMPORTS -#endif - -#include "aes.h" -#include "cbcmac.h" -#include "ccm.h" -#include "cmac.h" -#include "channels.h" -#include "des.h" -#include "dh.h" -#include "dsa.h" -#include "ec2n.h" -#include "eccrypto.h" -#include "ecp.h" -#include "files.h" -#include "fips140.h" -#include "gcm.h" -#include "hex.h" -#include "hmac.h" -#include "modes.h" -#include "mqueue.h" -#include "nbtheory.h" -#include "osrng.h" -#include "pkcspad.h" -#include "pssr.h" -#include "randpool.h" -#include "rsa.h" -#include "rw.h" -#include "sha.h" -#include "skipjack.h" - -#ifdef CRYPTOPP_IMPORTS - -#ifdef _DLL -// cause CRT DLL to be initialized before Crypto++ so that we can use malloc and free during DllMain() -#ifdef CRYPTOPP_DEBUG -# pragma comment(lib, "msvcrtd") -# pragma comment(lib, "cryptopp") -#else -# pragma comment(lib, "msvcrt") -# pragma comment(lib, "cryptopp") -#endif -#endif - -#endif // #ifdef CRYPTOPP_IMPORTS - -#include // for new_handler - -NAMESPACE_BEGIN(CryptoPP) - -typedef void * (CRYPTOPP_API * PNew)(size_t); -typedef void (CRYPTOPP_API * PDelete)(void *); -typedef void (CRYPTOPP_API * PGetNewAndDelete)(PNew &, PDelete &); -typedef std::new_handler (CRYPTOPP_API * PSetNewHandler)(std::new_handler); -typedef void (CRYPTOPP_API * PSetNewAndDelete)(PNew, PDelete, PSetNewHandler); - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/dmac.h b/third_party/cryptoppwin/include/cryptopp/dmac.h deleted file mode 100644 index ef2fa189..00000000 --- a/third_party/cryptoppwin/include/cryptopp/dmac.h +++ /dev/null @@ -1,114 +0,0 @@ -// dmac.h - originally written and placed in the public domain by Wei Dai - -/// \file dmac.h -/// \brief Classes for DMAC message authentication code - -#ifndef CRYPTOPP_DMAC_H -#define CRYPTOPP_DMAC_H - -#include "cbcmac.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief DMAC message authentication code base class -/// \tparam T class derived from BlockCipherDocumentation -/// \since Crypto++ 3.1 -template -class CRYPTOPP_NO_VTABLE DMAC_Base : public SameKeyLengthAs, public MessageAuthenticationCode -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE=T::BLOCKSIZE); - static std::string StaticAlgorithmName() {return std::string("DMAC(") + T::StaticAlgorithmName() + ")";} - - virtual~DMAC_Base() {} - DMAC_Base() : m_subkeylength(0), m_counter(0) {} - - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *mac, size_t size); - unsigned int DigestSize() const {return DIGESTSIZE;} - - std::string AlgorithmProvider() const; - -private: - byte *GenerateSubKeys(const byte *key, size_t keylength); - - size_t m_subkeylength; - SecByteBlock m_subkeys; - CBC_MAC m_mac1; - typename T::Encryption m_f2; - unsigned int m_counter; -}; - -template -std::string DMAC_Base::AlgorithmProvider() const -{ - return m_f2.AlgorithmProvider(); -} - -/// \brief DMAC message authentication code -/// \tparam T class derived from BlockCipherDocumentation -/// \sa CBC MAC for Real-Time Data Sources (08.15.1997) -/// by Erez Petrank and Charles Rackoff -/// \since Crypto++ 3.1 -template -class DMAC : public MessageAuthenticationCodeFinal > -{ -public: - /// \brief Construct a DMAC - DMAC() {} - - /// \brief Construct a DMAC - /// \param key a byte array used to key the cipher - /// \param length the size of the byte array, in bytes - DMAC(const byte *key, size_t length=DMAC_Base::DEFAULT_KEYLENGTH) - {this->SetKey(key, length);} -}; - -template -void DMAC_Base::UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) -{ - m_subkeylength = T::StaticGetValidKeyLength(T::BLOCKSIZE); - m_subkeys.resize(2*UnsignedMin((unsigned int)T::BLOCKSIZE, m_subkeylength)); - m_mac1.SetKey(GenerateSubKeys(key, length), m_subkeylength, params); - m_f2.SetKey(m_subkeys+m_subkeys.size()/2, m_subkeylength, params); - m_counter = 0; - m_subkeys.resize(0); -} - -template -void DMAC_Base::Update(const byte *input, size_t length) -{ - m_mac1.Update(input, length); - m_counter = (unsigned int)((m_counter + length) % T::BLOCKSIZE); -} - -template -void DMAC_Base::TruncatedFinal(byte *mac, size_t size) -{ - ThrowIfInvalidTruncatedSize(size); - - byte pad[T::BLOCKSIZE]; - byte padByte = byte(T::BLOCKSIZE-m_counter); - std::memset(pad, padByte, padByte); - m_mac1.Update(pad, padByte); - m_mac1.TruncatedFinal(mac, size); - m_f2.ProcessBlock(mac); - - m_counter = 0; // reset for next message -} - -template -byte *DMAC_Base::GenerateSubKeys(const byte *key, size_t keylength) -{ - typename T::Encryption cipher(key, keylength); - std::memset(m_subkeys, 0, m_subkeys.size()); - cipher.ProcessBlock(m_subkeys); - m_subkeys[m_subkeys.size()/2 + T::BLOCKSIZE - 1] = 1; - cipher.ProcessBlock(m_subkeys+m_subkeys.size()/2); - return m_subkeys; -} - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/donna.h b/third_party/cryptoppwin/include/cryptopp/donna.h deleted file mode 100644 index d37f2690..00000000 --- a/third_party/cryptoppwin/include/cryptopp/donna.h +++ /dev/null @@ -1,179 +0,0 @@ -// donna.h - written and placed in public domain by Jeffrey Walton -// Crypto++ specific implementation wrapped around Andrew -// Moon's public domain curve25519-donna and ed25519-donna, -// https://github.com/floodyberry/curve25519-donna and -// https://github.com/floodyberry/ed25519-donna. - -// The curve25519 and ed25519 source files multiplex different repos and -// architectures using namespaces. The repos are Andrew Moon's -// curve25519-donna and ed25519-donna. The architectures are 32-bit, 64-bit -// and SSE. For example, 32-bit x25519 uses symbols from Donna::X25519 and -// Donna::Arch32. - -// If needed, see Moon's commit "Go back to ignoring 256th bit [sic]", -// https://github.com/floodyberry/curve25519-donna/commit/57a683d18721a658 - -/// \file donna.h -/// \details Functions for curve25519 and ed25519 operations -/// \details This header provides the entry points into Andrew Moon's -/// curve25519 and ed25519 curve functions. The Crypto++ classes x25519 -/// and ed25519 use the functions. The functions are in the Donna -/// namespace and are curve25519_mult(), ed25519_publickey(), -/// ed25519_sign() and ed25519_sign_open(). -/// \details At the moment the hash function for signing is fixed at -/// SHA512. - -#ifndef CRYPTOPP_DONNA_H -#define CRYPTOPP_DONNA_H - -#include "config.h" -#include "cryptlib.h" -#include "stdcpp.h" - -NAMESPACE_BEGIN(CryptoPP) -NAMESPACE_BEGIN(Donna) - -//***************************** curve25519 *****************************// - -/// \brief Generate a public key -/// \param publicKey byte array for the public key -/// \param secretKey byte array with the private key -/// \return 0 on success, non-0 otherwise -/// \details curve25519_mult() generates a public key from an existing -/// secret key. Internally curve25519_mult() performs a scalar -/// multiplication using the base point and writes the result to -/// pubkey. -int curve25519_mult(byte publicKey[32], const byte secretKey[32]); - -/// \brief Generate a shared key -/// \param sharedKey byte array for the shared secret -/// \param secretKey byte array with the private key -/// \param othersKey byte array with the peer's public key -/// \return 0 on success, non-0 otherwise -/// \details curve25519_mult() generates a shared key from an existing -/// secret key and the other party's public key. Internally -/// curve25519_mult() performs a scalar multiplication using the two keys -/// and writes the result to sharedKey. -int curve25519_mult(byte sharedKey[32], const byte secretKey[32], const byte othersKey[32]); - -//******************************* ed25519 *******************************// - -/// \brief Creates a public key from a secret key -/// \param publicKey byte array for the public key -/// \param secretKey byte array with the private key -/// \return 0 on success, non-0 otherwise -/// \details ed25519_publickey() generates a public key from a secret key. -/// Internally ed25519_publickey() performs a scalar multiplication -/// using the secret key and then writes the result to publicKey. -int ed25519_publickey(byte publicKey[32], const byte secretKey[32]); - -/// \brief Creates a signature on a message -/// \param message byte array with the message -/// \param messageLength size of the message, in bytes -/// \param publicKey byte array with the public key -/// \param secretKey byte array with the private key -/// \param signature byte array for the signature -/// \return 0 on success, non-0 otherwise -/// \details ed25519_sign() generates a signature on a message using -/// the public and private keys. The various buffers can be exact -/// sizes, and do not require extra space like when using the -/// NaCl library functions. -/// \details At the moment the hash function for signing is fixed at -/// SHA512. -int ed25519_sign(const byte* message, size_t messageLength, const byte secretKey[32], const byte publicKey[32], byte signature[64]); - -/// \brief Creates a signature on a message -/// \param stream std::istream derived class -/// \param publicKey byte array with the public key -/// \param secretKey byte array with the private key -/// \param signature byte array for the signature -/// \return 0 on success, non-0 otherwise -/// \details ed25519_sign() generates a signature on a message using -/// the public and private keys. The various buffers can be exact -/// sizes, and do not require extra space like when using the -/// NaCl library functions. -/// \details This ed25519_sign() overload handles large streams. It -/// was added for signing and verifying files that are too large -/// for a memory allocation. -/// \details At the moment the hash function for signing is fixed at -/// SHA512. -int ed25519_sign(std::istream& stream, const byte secretKey[32], const byte publicKey[32], byte signature[64]); - -/// \brief Verifies a signature on a message -/// \param message byte array with the message -/// \param messageLength size of the message, in bytes -/// \param publicKey byte array with the public key -/// \param signature byte array with the signature -/// \return 0 on success, non-0 otherwise -/// \details ed25519_sign_open() verifies a signature on a message using -/// the public key. The various buffers can be exact sizes, and do not -/// require extra space like when using the NaCl library functions. -/// \details At the moment the hash function for signing is fixed at -/// SHA512. -int -ed25519_sign_open(const byte *message, size_t messageLength, const byte publicKey[32], const byte signature[64]); - -/// \brief Verifies a signature on a message -/// \param stream std::istream derived class -/// \param publicKey byte array with the public key -/// \param signature byte array with the signature -/// \return 0 on success, non-0 otherwise -/// \details ed25519_sign_open() verifies a signature on a message using -/// the public key. The various buffers can be exact sizes, and do not -/// require extra space like when using the NaCl library functions. -/// \details This ed25519_sign_open() overload handles large streams. It -/// was added for signing and verifying files that are too large -/// for a memory allocation. -/// \details At the moment the hash function for signing is fixed at -/// SHA512. -int -ed25519_sign_open(std::istream& stream, const byte publicKey[32], const byte signature[64]); - -//****************************** Internal ******************************// - -#ifndef CRYPTOPP_DOXYGEN_PROCESSING - -// CRYPTOPP_WORD128_AVAILABLE mostly depends upon GCC support for -// __SIZEOF_INT128__. If __SIZEOF_INT128__ is not available then Moon -// provides routines for MSC and GCC. It should cover most platforms, -// but there are gaps like MS ARM64 and XLC. We tried to enable the -// 64-bit path for SunCC from 12.5 but we got the dreaded compile -// error "The operand ___LCM cannot be assigned to". - -#if defined(CRYPTOPP_WORD128_AVAILABLE) || \ - (defined(CRYPTOPP_MSC_VERSION) && defined(_M_X64)) -# define CRYPTOPP_CURVE25519_64BIT 1 -#else -# define CRYPTOPP_CURVE25519_32BIT 1 -#endif - -// Benchmarking on a modern 64-bit Core i5-6400 @2.7 GHz shows SSE2 on Linux -// is not profitable. Here are the numbers in milliseconds/operation: -// -// * Langley, C++, 0.050 -// * Moon, C++: 0.040 -// * Moon, SSE2: 0.061 -// * Moon, native: 0.045 -// -// However, a modern 64-bit Core i5-3200 @2.5 GHz shows SSE2 is profitable -// for MS compilers. Here are the numbers in milliseconds/operation: -// -// * x86, no SSE2, 0.294 -// * x86, SSE2, 0.097 -// * x64, no SSE2, 0.081 -// * x64, SSE2, 0.071 - -#if defined(CRYPTOPP_MSC_VERSION) && (CRYPTOPP_SSE2_INTRIN_AVAILABLE) -# define CRYPTOPP_CURVE25519_SSE2 1 -#endif - -#if (CRYPTOPP_CURVE25519_SSE2) - extern int curve25519_mult_SSE2(byte sharedKey[32], const byte secretKey[32], const byte othersKey[32]); -#endif - -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -NAMESPACE_END // Donna -NAMESPACE_END // CryptoPP - -#endif // CRYPTOPP_DONNA_H diff --git a/third_party/cryptoppwin/include/cryptopp/donna_32.h b/third_party/cryptoppwin/include/cryptopp/donna_32.h deleted file mode 100644 index 50d6b820..00000000 --- a/third_party/cryptoppwin/include/cryptopp/donna_32.h +++ /dev/null @@ -1,411 +0,0 @@ -// donna_32.h - written and placed in public domain by Jeffrey Walton -// Crypto++ specific implementation wrapped around Andrew -// Moon's public domain curve25519-donna and ed25519-donna, -// https://github.com/floodyberry/curve25519-donna and -// https://github.com/floodyberry/ed25519-donna. - -// This source file multiplexes two different repos using namespaces. This -// was a little easier from a project management standpoint. We only need -// two files per architecture at the expense of namespaces and bloat. - -#ifndef CRYPTOPP_DONNA_32_H -#define CRYPTOPP_DONNA_32_H -#ifndef CRYPTOPP_DOXYGEN_PROCESSING - -#include "config.h" - -NAMESPACE_BEGIN(CryptoPP) -NAMESPACE_BEGIN(Donna) -NAMESPACE_BEGIN(Arch32) - -using CryptoPP::byte; -using CryptoPP::word32; -using CryptoPP::word64; - -// ******************** x25519 Agreement ************************* // - -#define ALIGN(n) CRYPTOPP_ALIGN_DATA(n) -#define mul32x32_64(a,b) (((word64)(a))*(b)) - -typedef word32 bignum25519[10]; - -const byte basePoint[32] = {9}; -const word32 reduce_mask_25 = (1 << 25) - 1; -const word32 reduce_mask_26 = (1 << 26) - 1; - -// ****************** ed25519 Signatures *********************** // - -typedef byte hash_512bits[64]; - -const int bignum256modm_bits_per_limb = 30; -const int bignum256modm_limb_size = 9; -typedef word32 bignum256modm_element_t; -typedef bignum256modm_element_t bignum256modm[9]; - -struct ge25519 { - bignum25519 x, y, z, t; -}; - -struct ge25519_p1p1 { - bignum25519 x, y, z, t; -}; - -struct ge25519_niels { - bignum25519 ysubx, xaddy, t2d; -}; - -struct ge25519_pniels { - bignum25519 ysubx, xaddy, z, t2d; -}; - -#define S1_SWINDOWSIZE 5 -#define S1_TABLE_SIZE (1<<(S1_SWINDOWSIZE-2)) -#define S2_SWINDOWSIZE 7 -#define S2_TABLE_SIZE (1<<(S2_SWINDOWSIZE-2)) - -// *************** ed25519-donna-32bit-tables.h *************** // - -ALIGN(16) const ge25519 ge25519_basepoint = { - {0x0325d51a,0x018b5823,0x00f6592a,0x0104a92d,0x01a4b31d,0x01d6dc5c,0x027118fe,0x007fd814,0x013cd6e5,0x0085a4db}, - {0x02666658,0x01999999,0x00cccccc,0x01333333,0x01999999,0x00666666,0x03333333,0x00cccccc,0x02666666,0x01999999}, - {0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000}, - {0x01b7dda3,0x01a2ace9,0x025eadbb,0x0003ba8a,0x0083c27e,0x00abe37d,0x01274732,0x00ccacdd,0x00fd78b7,0x019e1d7c} -}; - -ALIGN(16) const bignum25519 ge25519_ecd = { - 0x035978a3,0x00d37284,0x03156ebd,0x006a0a0e,0x0001c029,0x0179e898,0x03a03cbb,0x01ce7198,0x02e2b6ff,0x01480db3 -}; - -ALIGN(16) const bignum25519 ge25519_ec2d = { - 0x02b2f159,0x01a6e509,0x022add7a,0x00d4141d,0x00038052,0x00f3d130,0x03407977,0x019ce331,0x01c56dff,0x00901b67 -}; - -ALIGN(16) const bignum25519 ge25519_sqrtneg1 = { - 0x020ea0b0,0x0186c9d2,0x008f189d,0x0035697f,0x00bd0c60,0x01fbd7a7,0x02804c9e,0x01e16569,0x0004fc1d,0x00ae0c92 -}; - -ALIGN(16) const ge25519_niels ge25519_niels_sliding_multiples[32] = { - {{0x0340913e,0x000e4175,0x03d673a2,0x002e8a05,0x03f4e67c,0x008f8a09,0x00c21a34,0x004cf4b8,0x01298f81,0x0113f4be},{0x018c3b85,0x0124f1bd,0x01c325f7,0x0037dc60,0x033e4cb7,0x003d42c2,0x01a44c32,0x014ca4e1,0x03a33d4b,0x001f3e74},{0x037aaa68,0x00448161,0x0093d579,0x011e6556,0x009b67a0,0x0143598c,0x01bee5ee,0x00b50b43,0x0289f0c6,0x01bc45ed}}, - {{0x00fcd265,0x0047fa29,0x034faacc,0x01ef2e0d,0x00ef4d4f,0x014bd6bd,0x00f98d10,0x014c5026,0x007555bd,0x00aae456},{0x00ee9730,0x016c2a13,0x017155e4,0x01874432,0x00096a10,0x01016732,0x01a8014f,0x011e9823,0x01b9a80f,0x01e85938},{0x01d0d889,0x01a4cfc3,0x034c4295,0x0110e1ae,0x0162508c,0x00f2db4c,0x0072a2c6,0x0098da2e,0x02f12b9b,0x0168a09a}}, - {{0x0047d6ba,0x0060b0e9,0x0136eff2,0x008a5939,0x03540053,0x0064a087,0x02788e5c,0x00be7c67,0x033eb1b5,0x005529f9},{0x00a5bb33,0x00af1102,0x01a05442,0x001e3af7,0x02354123,0x00bfec44,0x01f5862d,0x00dd7ba3,0x03146e20,0x00a51733},{0x012a8285,0x00f6fc60,0x023f9797,0x003e85ee,0x009c3820,0x01bda72d,0x01b3858d,0x00d35683,0x0296b3bb,0x010eaaf9}}, - {{0x023221b1,0x01cb26aa,0x0074f74d,0x0099ddd1,0x01b28085,0x00192c3a,0x013b27c9,0x00fc13bd,0x01d2e531,0x0075bb75},{0x004ea3bf,0x00973425,0x001a4d63,0x01d59cee,0x01d1c0d4,0x00542e49,0x01294114,0x004fce36,0x029283c9,0x01186fa9},{0x01b8b3a2,0x00db7200,0x00935e30,0x003829f5,0x02cc0d7d,0x0077adf3,0x0220dd2c,0x0014ea53,0x01c6a0f9,0x01ea7eec}}, - {{0x039d8064,0x01885f80,0x00337e6d,0x01b7a902,0x02628206,0x015eb044,0x01e30473,0x0191f2d9,0x011fadc9,0x01270169},{0x02a8632f,0x0199e2a9,0x00d8b365,0x017a8de2,0x02994279,0x0086f5b5,0x0119e4e3,0x01eb39d6,0x0338add7,0x00d2e7b4},{0x0045af1b,0x013a2fe4,0x0245e0d6,0x014538ce,0x038bfe0f,0x01d4cf16,0x037e14c9,0x0160d55e,0x0021b008,0x01cf05c8}}, - {{0x01864348,0x01d6c092,0x0070262b,0x014bb844,0x00fb5acd,0x008deb95,0x003aaab5,0x00eff474,0x00029d5c,0x0062ad66},{0x02802ade,0x01c02122,0x01c4e5f7,0x00781181,0x039767fb,0x01703406,0x0342388b,0x01f5e227,0x022546d8,0x0109d6ab},{0x016089e9,0x00cb317f,0x00949b05,0x01099417,0x000c7ad2,0x011a8622,0x0088ccda,0x01290886,0x022b53df,0x00f71954}}, - {{0x027fbf93,0x01c04ecc,0x01ed6a0d,0x004cdbbb,0x02bbf3af,0x00ad5968,0x01591955,0x0094f3a2,0x02d17602,0x00099e20},{0x02007f6d,0x003088a8,0x03db77ee,0x00d5ade6,0x02fe12ce,0x0107ba07,0x0107097d,0x00482a6f,0x02ec346f,0x008d3f5f},{0x032ea378,0x0028465c,0x028e2a6c,0x018efc6e,0x0090df9a,0x01a7e533,0x039bfc48,0x010c745d,0x03daa097,0x0125ee9b}}, - {{0x028ccf0b,0x00f36191,0x021ac081,0x012154c8,0x034e0a6e,0x01b25192,0x00180403,0x01d7eea1,0x00218d05,0x010ed735},{0x03cfeaa0,0x01b300c4,0x008da499,0x0068c4e1,0x0219230a,0x01f2d4d0,0x02defd60,0x00e565b7,0x017f12de,0x018788a4},{0x03d0b516,0x009d8be6,0x03ddcbb3,0x0071b9fe,0x03ace2bd,0x01d64270,0x032d3ec9,0x01084065,0x0210ae4d,0x01447584}}, - {{0x0020de87,0x00e19211,0x01b68102,0x00b5ac97,0x022873c0,0x01942d25,0x01271394,0x0102073f,0x02fe2482,0x01c69ff9},{0x010e9d81,0x019dbbe5,0x0089f258,0x006e06b8,0x02951883,0x018f1248,0x019b3237,0x00bc7553,0x024ddb85,0x01b4c964},{0x01c8c854,0x0060ae29,0x01406d8e,0x01cff2f9,0x00cff451,0x01778d0c,0x03ac8c41,0x01552e59,0x036559ee,0x011d1b12}}, - {{0x00741147,0x0151b219,0x01092690,0x00e877e6,0x01f4d6bb,0x0072a332,0x01cd3b03,0x00dadff2,0x0097db5e,0x0086598d},{0x01c69a2b,0x01decf1b,0x02c2fa6e,0x013b7c4f,0x037beac8,0x013a16b5,0x028e7bda,0x01f6e8ac,0x01e34fe9,0x01726947},{0x01f10e67,0x003c73de,0x022b7ea2,0x010f32c2,0x03ff776a,0x00142277,0x01d38b88,0x00776138,0x03c60822,0x01201140}}, - {{0x0236d175,0x0008748e,0x03c6476d,0x013f4cdc,0x02eed02a,0x00838a47,0x032e7210,0x018bcbb3,0x00858de4,0x01dc7826},{0x00a37fc7,0x0127b40b,0x01957884,0x011d30ad,0x02816683,0x016e0e23,0x00b76be4,0x012db115,0x02516506,0x0154ce62},{0x00451edf,0x00bd749e,0x03997342,0x01cc2c4c,0x00eb6975,0x01a59508,0x03a516cf,0x00c228ef,0x0168ff5a,0x01697b47}}, - {{0x00527359,0x01783156,0x03afd75c,0x00ce56dc,0x00e4b970,0x001cabe9,0x029e0f6d,0x0188850c,0x0135fefd,0x00066d80},{0x02150e83,0x01448abf,0x02bb0232,0x012bf259,0x033c8268,0x00711e20,0x03fc148f,0x005e0e70,0x017d8bf9,0x0112b2e2},{0x02134b83,0x001a0517,0x0182c3cc,0x00792182,0x0313d799,0x001a3ed7,0x0344547e,0x01f24a0d,0x03de6ad2,0x00543127}}, - {{0x00dca868,0x00618f27,0x015a1709,0x00ddc38a,0x0320fd13,0x0036168d,0x0371ab06,0x01783fc7,0x0391e05f,0x01e29b5d},{0x01471138,0x00fca542,0x00ca31cf,0x01ca7bad,0x0175bfbc,0x01a708ad,0x03bce212,0x01244215,0x0075bb99,0x01acad68},{0x03a0b976,0x01dc12d1,0x011aab17,0x00aba0ba,0x029806cd,0x0142f590,0x018fd8ea,0x01a01545,0x03c4ad55,0x01c971ff}}, - {{0x00d098c0,0x000afdc7,0x006cd230,0x01276af3,0x03f905b2,0x0102994c,0x002eb8a4,0x015cfbeb,0x025f855f,0x01335518},{0x01cf99b2,0x0099c574,0x01a69c88,0x00881510,0x01cd4b54,0x0112109f,0x008abdc5,0x0074647a,0x0277cb1f,0x01e53324},{0x02ac5053,0x01b109b0,0x024b095e,0x016997b3,0x02f26bb6,0x00311021,0x00197885,0x01d0a55a,0x03b6fcc8,0x01c020d5}}, - {{0x02584a34,0x00e7eee0,0x03257a03,0x011e95a3,0x011ead91,0x00536202,0x00b1ce24,0x008516c6,0x03669d6d,0x004ea4a8},{0x00773f01,0x0019c9ce,0x019f6171,0x01d4afde,0x02e33323,0x01ad29b6,0x02ead1dc,0x01ed51a5,0x01851ad0,0x001bbdfa},{0x00577de5,0x00ddc730,0x038b9952,0x00f281ae,0x01d50390,0x0002e071,0x000780ec,0x010d448d,0x01f8a2af,0x00f0a5b7}}, - {{0x031f2541,0x00d34bae,0x0323ff9d,0x003a056d,0x02e25443,0x00a1ad05,0x00d1bee8,0x002f7f8e,0x03007477,0x002a24b1},{0x0114a713,0x01457e76,0x032255d5,0x01cc647f,0x02a4bdef,0x0153d730,0x00118bcf,0x00f755ff,0x013490c7,0x01ea674e},{0x02bda3e8,0x00bb490d,0x00f291ea,0x000abf40,0x01dea321,0x002f9ce0,0x00b2b193,0x00fa54b5,0x0128302f,0x00a19d8b}}, - {{0x022ef5bd,0x01638af3,0x038c6f8a,0x01a33a3d,0x039261b2,0x01bb89b8,0x010bcf9d,0x00cf42a9,0x023d6f17,0x01da1bca},{0x00e35b25,0x000d824f,0x0152e9cf,0x00ed935d,0x020b8460,0x01c7b83f,0x00c969e5,0x01a74198,0x0046a9d9,0x00cbc768},{0x01597c6a,0x0144a99b,0x00a57551,0x0018269c,0x023c464c,0x0009b022,0x00ee39e1,0x0114c7f2,0x038a9ad2,0x01584c17}}, - {{0x03b0c0d5,0x00b30a39,0x038a6ce4,0x01ded83a,0x01c277a6,0x01010a61,0x0346d3eb,0x018d995e,0x02f2c57c,0x000c286b},{0x0092aed1,0x0125e37b,0x027ca201,0x001a6b6b,0x03290f55,0x0047ba48,0x018d916c,0x01a59062,0x013e35d4,0x0002abb1},{0x003ad2aa,0x007ddcc0,0x00c10f76,0x0001590b,0x002cfca6,0x000ed23e,0x00ee4329,0x00900f04,0x01c24065,0x0082fa70}}, - {{0x02025e60,0x003912b8,0x0327041c,0x017e5ee5,0x02c0ecec,0x015a0d1c,0x02b1ce7c,0x0062220b,0x0145067e,0x01a5d931},{0x009673a6,0x00e1f609,0x00927c2a,0x016faa37,0x01650ef0,0x016f63b5,0x03cd40e1,0x003bc38f,0x0361f0ac,0x01d42acc},{0x02f81037,0x008ca0e8,0x017e23d1,0x011debfe,0x01bcbb68,0x002e2563,0x03e8add6,0x000816e5,0x03fb7075,0x0153e5ac}}, - {{0x02b11ecd,0x016bf185,0x008f22ef,0x00e7d2bb,0x0225d92e,0x00ece785,0x00508873,0x017e16f5,0x01fbe85d,0x01e39a0e},{0x01669279,0x017c810a,0x024941f5,0x0023ebeb,0x00eb7688,0x005760f1,0x02ca4146,0x0073cde7,0x0052bb75,0x00f5ffa7},{0x03b8856b,0x00cb7dcd,0x02f14e06,0x001820d0,0x01d74175,0x00e59e22,0x03fba550,0x00484641,0x03350088,0x01c3c9a3}}, - {{0x00dcf355,0x0104481c,0x0022e464,0x01f73fe7,0x00e03325,0x0152b698,0x02ef769a,0x00973663,0x00039b8c,0x0101395b},{0x01805f47,0x019160ec,0x03832cd0,0x008b06eb,0x03d4d717,0x004cb006,0x03a75b8f,0x013b3d30,0x01cfad88,0x01f034d1},{0x0078338a,0x01c7d2e3,0x02bc2b23,0x018b3f05,0x0280d9aa,0x005f3d44,0x0220a95a,0x00eeeb97,0x0362aaec,0x00835d51}}, - {{0x01b9f543,0x013fac4d,0x02ad93ae,0x018ef464,0x0212cdf7,0x01138ba9,0x011583ab,0x019c3d26,0x028790b4,0x00e2e2b6},{0x033bb758,0x01f0dbf1,0x03734bd1,0x0129b1e5,0x02b3950e,0x003bc922,0x01a53ec8,0x018c5532,0x006f3cee,0x00ae3c79},{0x0351f95d,0x0012a737,0x03d596b8,0x017658fe,0x00ace54a,0x008b66da,0x0036c599,0x012a63a2,0x032ceba1,0x00126bac}}, - {{0x03dcfe7e,0x019f4f18,0x01c81aee,0x0044bc2b,0x00827165,0x014f7c13,0x03b430f0,0x00bf96cc,0x020c8d62,0x01471997},{0x01fc7931,0x001f42dd,0x00ba754a,0x005bd339,0x003fbe49,0x016b3930,0x012a159c,0x009f83b0,0x03530f67,0x01e57b85},{0x02ecbd81,0x0096c294,0x01fce4a9,0x017701a5,0x0175047d,0x00ee4a31,0x012686e5,0x008efcd4,0x0349dc54,0x01b3466f}}, - {{0x02179ca3,0x01d86414,0x03f0afd0,0x00305964,0x015c7428,0x0099711e,0x015d5442,0x00c71014,0x01b40b2e,0x01d483cf},{0x01afc386,0x01984859,0x036203ff,0x0045c6a8,0x0020a8aa,0x00990baa,0x03313f10,0x007ceede,0x027429e4,0x017806ce},{0x039357a1,0x0142f8f4,0x0294a7b6,0x00eaccf4,0x0259edb3,0x01311e6e,0x004d326f,0x0130c346,0x01ccef3c,0x01c424b2}}, - {{0x0364918c,0x00148fc0,0x01638a7b,0x01a1fd5b,0x028ad013,0x0081e5a4,0x01a54f33,0x0174e101,0x003d0257,0x003a856c},{0x00051dcf,0x00f62b1d,0x0143d0ad,0x0042adbd,0x000fda90,0x01743ceb,0x0173e5e4,0x017bc749,0x03b7137a,0x0105ce96},{0x00f9218a,0x015b8c7c,0x00e102f8,0x0158d7e2,0x0169a5b8,0x00b2f176,0x018b347a,0x014cfef2,0x0214a4e3,0x017f1595}}, - {{0x006d7ae5,0x0195c371,0x0391e26d,0x0062a7c6,0x003f42ab,0x010dad86,0x024f8198,0x01542b2a,0x0014c454,0x0189c471},{0x0390988e,0x00b8799d,0x02e44912,0x0078e2e6,0x00075654,0x01923eed,0x0040cd72,0x00a37c76,0x0009d466,0x00c8531d},{0x02651770,0x00609d01,0x0286c265,0x0134513c,0x00ee9281,0x005d223c,0x035c760c,0x00679b36,0x0073ecb8,0x016faa50}}, - {{0x02c89be4,0x016fc244,0x02f38c83,0x018beb72,0x02b3ce2c,0x0097b065,0x034f017b,0x01dd957f,0x00148f61,0x00eab357},{0x0343d2f8,0x003398fc,0x011e368e,0x00782a1f,0x00019eea,0x00117b6f,0x0128d0d1,0x01a5e6bb,0x01944f1b,0x012b41e1},{0x03318301,0x018ecd30,0x0104d0b1,0x0038398b,0x03726701,0x019da88c,0x002d9769,0x00a7a681,0x031d9028,0x00ebfc32}}, - {{0x0220405e,0x0171face,0x02d930f8,0x017f6d6a,0x023b8c47,0x0129d5f9,0x02972456,0x00a3a524,0x006f4cd2,0x004439fa},{0x00c53505,0x0190c2fd,0x00507244,0x009930f9,0x01a39270,0x01d327c6,0x0399bc47,0x01cfe13d,0x0332bd99,0x00b33e7d},{0x0203f5e4,0x003627b5,0x00018af8,0x01478581,0x004a2218,0x002e3bb7,0x039384d0,0x0146ea62,0x020b9693,0x0017155f}}, - {{0x03c97e6f,0x00738c47,0x03b5db1f,0x01808fcf,0x01e8fc98,0x01ed25dd,0x01bf5045,0x00eb5c2b,0x0178fe98,0x01b85530},{0x01c20eb0,0x01aeec22,0x030b9eee,0x01b7d07e,0x0187e16f,0x014421fb,0x009fa731,0x0040b6d7,0x00841861,0x00a27fbc},{0x02d69abf,0x0058cdbf,0x0129f9ec,0x013c19ae,0x026c5b93,0x013a7fe7,0x004bb2ba,0x0063226f,0x002a95ca,0x01abefd9}}, - {{0x02f5d2c1,0x00378318,0x03734fb5,0x01258073,0x0263f0f6,0x01ad70e0,0x01b56d06,0x01188fbd,0x011b9503,0x0036d2e1},{0x0113a8cc,0x01541c3e,0x02ac2bbc,0x01d95867,0x01f47459,0x00ead489,0x00ab5b48,0x01db3b45,0x00edb801,0x004b024f},{0x00b8190f,0x011fe4c2,0x00621f82,0x010508d7,0x001a5a76,0x00c7d7fd,0x03aab96d,0x019cd9dc,0x019c6635,0x00ceaa1e}}, - {{0x01085cf2,0x01fd47af,0x03e3f5e1,0x004b3e99,0x01e3d46a,0x0060033c,0x015ff0a8,0x0150cdd8,0x029e8e21,0x008cf1bc},{0x00156cb1,0x003d623f,0x01a4f069,0x00d8d053,0x01b68aea,0x01ca5ab6,0x0316ae43,0x0134dc44,0x001c8d58,0x0084b343},{0x0318c781,0x0135441f,0x03a51a5e,0x019293f4,0x0048bb37,0x013d3341,0x0143151e,0x019c74e1,0x00911914,0x0076ddde}}, - {{0x006bc26f,0x00d48e5f,0x00227bbe,0x00629ea8,0x01ea5f8b,0x0179a330,0x027a1d5f,0x01bf8f8e,0x02d26e2a,0x00c6b65e},{0x01701ab6,0x0051da77,0x01b4b667,0x00a0ce7c,0x038ae37b,0x012ac852,0x03a0b0fe,0x0097c2bb,0x00a017d2,0x01eb8b2a},{0x0120b962,0x0005fb42,0x0353b6fd,0x0061f8ce,0x007a1463,0x01560a64,0x00e0a792,0x01907c92,0x013a6622,0x007b47f1}} -}; - -// *************** modm-donna-32bit.h *************** // - -const bignum256modm modm_m = { - 0x1cf5d3ed, 0x20498c69, 0x2f79cd65, 0x37be77a8, - 0x00000014, 0x00000000, 0x00000000, 0x00000000, - 0x00001000 -}; - -const bignum256modm modm_mu = { - 0x0a2c131b, 0x3673968c, 0x06329a7e, 0x01885742, - 0x3fffeb21, 0x3fffffff, 0x3fffffff, 0x3fffffff, - 0x000fffff -}; - -/* multiples of p */ -const word32 twoP0 = 0x07ffffda; -const word32 twoP13579 = 0x03fffffe; -const word32 twoP2468 = 0x07fffffe; -const word32 fourP0 = 0x0fffffb4; -const word32 fourP13579 = 0x07fffffc; -const word32 fourP2468 = 0x0ffffffc; - -// *************** ed25519-donna-basepoint-table.h *************** // - -/* multiples of the base point in packed {ysubx, xaddy, t2d} form */ -ALIGN(16) const byte ge25519_niels_base_multiples[256][96] = { - {0x3e,0x91,0x40,0xd7,0x05,0x39,0x10,0x9d,0xb3,0xbe,0x40,0xd1,0x05,0x9f,0x39,0xfd,0x09,0x8a,0x8f,0x68,0x34,0x84,0xc1,0xa5,0x67,0x12,0xf8,0x98,0x92,0x2f,0xfd,0x44,0x85,0x3b,0x8c,0xf5,0xc6,0x93,0xbc,0x2f,0x19,0x0e,0x8c,0xfb,0xc6,0x2d,0x93,0xcf,0xc2,0x42,0x3d,0x64,0x98,0x48,0x0b,0x27,0x65,0xba,0xd4,0x33,0x3a,0x9d,0xcf,0x07,0x59,0xbb,0x6f,0x4b,0x67,0x15,0xbd,0xdb,0xea,0xa5,0xa2,0xee,0x00,0x3f,0xe1,0x41,0xfa,0xc6,0x57,0xc9,0x1c,0x9d,0xd4,0xcd,0xca,0xec,0x16,0xaf,0x1f,0xbe,0x0e,0x4f}, - {0xa8,0xd5,0xb4,0x42,0x60,0xa5,0x99,0x8a,0xf6,0xac,0x60,0x4e,0x0c,0x81,0x2b,0x8f,0xaa,0x37,0x6e,0xb1,0x6b,0x23,0x9e,0xe0,0x55,0x25,0xc9,0x69,0xa6,0x95,0xb5,0x6b,0xd7,0x71,0x3c,0x93,0xfc,0xe7,0x24,0x92,0xb5,0xf5,0x0f,0x7a,0x96,0x9d,0x46,0x9f,0x02,0x07,0xd6,0xe1,0x65,0x9a,0xa6,0x5a,0x2e,0x2e,0x7d,0xa8,0x3f,0x06,0x0c,0x59,0x02,0x68,0xd3,0xda,0xaa,0x7e,0x34,0x6e,0x05,0x48,0xee,0x83,0x93,0x59,0xf3,0xba,0x26,0x68,0x07,0xe6,0x10,0xbe,0xca,0x3b,0xb8,0xd1,0x5e,0x16,0x0a,0x4f,0x31,0x49}, - {0x65,0xd2,0xfc,0xa4,0xe8,0x1f,0x61,0x56,0x7d,0xba,0xc1,0xe5,0xfd,0x53,0xd3,0x3b,0xbd,0xd6,0x4b,0x21,0x1a,0xf3,0x31,0x81,0x62,0xda,0x5b,0x55,0x87,0x15,0xb9,0x2a,0x30,0x97,0xee,0x4c,0xa8,0xb0,0x25,0xaf,0x8a,0x4b,0x86,0xe8,0x30,0x84,0x5a,0x02,0x32,0x67,0x01,0x9f,0x02,0x50,0x1b,0xc1,0xf4,0xf8,0x80,0x9a,0x1b,0x4e,0x16,0x7a,0x34,0x48,0x67,0xf1,0xf4,0x11,0xf2,0x9b,0x95,0xf8,0x2d,0xf6,0x17,0x6b,0x4e,0xb8,0x4e,0x2a,0x72,0x5b,0x07,0x6f,0xde,0xd7,0x21,0x2a,0xbb,0x63,0xb9,0x04,0x9a,0x54}, - {0xbf,0x18,0x68,0x05,0x0a,0x05,0xfe,0x95,0xa9,0xfa,0x60,0x56,0x71,0x89,0x7e,0x32,0x73,0x50,0xa0,0x06,0xcd,0xe3,0xe8,0xc3,0x9a,0xa4,0x45,0x74,0x4c,0x3f,0x93,0x27,0x9f,0x09,0xfc,0x8e,0xb9,0x51,0x73,0x28,0x38,0x25,0xfd,0x7d,0xf4,0xc6,0x65,0x67,0x65,0x92,0x0a,0xfb,0x3d,0x8d,0x34,0xca,0x27,0x87,0xe5,0x21,0x03,0x91,0x0e,0x68,0xb0,0x26,0x14,0xe5,0xec,0x45,0x1e,0xbf,0x94,0x0f,0xba,0x6d,0x3d,0xc6,0x2b,0xe3,0xc0,0x52,0xf8,0x8c,0xd5,0x74,0x29,0xe4,0x18,0x4c,0xe6,0xb0,0xb1,0x79,0xf0,0x44}, - {0xba,0xd6,0x47,0xa4,0xc3,0x82,0x91,0x7f,0xb7,0x29,0x27,0x4b,0xd1,0x14,0x00,0xd5,0x87,0xa0,0x64,0xb8,0x1c,0xf1,0x3c,0xe3,0xf3,0x55,0x1b,0xeb,0x73,0x7e,0x4a,0x15,0x33,0xbb,0xa5,0x08,0x44,0xbc,0x12,0xa2,0x02,0xed,0x5e,0xc7,0xc3,0x48,0x50,0x8d,0x44,0xec,0xbf,0x5a,0x0c,0xeb,0x1b,0xdd,0xeb,0x06,0xe2,0x46,0xf1,0xcc,0x45,0x29,0xb3,0x03,0xd0,0xe7,0x79,0xa1,0x32,0xc8,0x7e,0x4d,0x12,0x00,0x0a,0x9d,0x72,0x5f,0xf3,0x8f,0x6d,0x0e,0xa1,0xd4,0xc1,0x62,0x98,0x7a,0xb2,0x38,0x59,0xac,0xb8,0x68}, - {0xa4,0x8c,0x7d,0x7b,0xb6,0x06,0x98,0x49,0x39,0x27,0xd2,0x27,0x84,0xe2,0x5b,0x57,0xb9,0x53,0x45,0x20,0xe7,0x5c,0x08,0xbb,0x84,0x78,0x41,0xae,0x41,0x4c,0xb6,0x38,0x31,0x71,0x15,0x77,0xeb,0xee,0x0c,0x3a,0x88,0xaf,0xc8,0x00,0x89,0x15,0x27,0x9b,0x36,0xa7,0x59,0xda,0x68,0xb6,0x65,0x80,0xbd,0x38,0xcc,0xa2,0xb6,0x7b,0xe5,0x51,0xa4,0xe3,0x9d,0x68,0x91,0xad,0x9d,0x8f,0x37,0x91,0xfb,0xf8,0x28,0x24,0x5f,0x17,0x88,0xb9,0xcf,0x9f,0x32,0xb5,0x0a,0x05,0x9f,0xc0,0x54,0x13,0xa2,0xdf,0x65,0x78}, - {0xb1,0x21,0x32,0xaa,0x9a,0x2c,0x6f,0xba,0xa7,0x23,0xba,0x3b,0x53,0x21,0xa0,0x6c,0x3a,0x2c,0x19,0x92,0x4f,0x76,0xea,0x9d,0xe0,0x17,0x53,0x2e,0x5d,0xdd,0x6e,0x1d,0xbf,0xa3,0x4e,0x94,0xd0,0x5c,0x1a,0x6b,0xd2,0xc0,0x9d,0xb3,0x3a,0x35,0x70,0x74,0x49,0x2e,0x54,0x28,0x82,0x52,0xb2,0x71,0x7e,0x92,0x3c,0x28,0x69,0xea,0x1b,0x46,0x36,0xda,0x0f,0xab,0xac,0x8a,0x7a,0x21,0xc8,0x49,0x35,0x3d,0x54,0xc6,0x28,0xa5,0x68,0x75,0xab,0x13,0x8b,0x5b,0xd0,0x37,0x37,0xbc,0x2c,0x3a,0x62,0xef,0x3c,0x23}, - {0xd9,0x34,0x92,0xf3,0xed,0x5d,0xa7,0xe2,0xf9,0x58,0xb5,0xe1,0x80,0x76,0x3d,0x96,0xfb,0x23,0x3c,0x6e,0xac,0x41,0x27,0x2c,0xc3,0x01,0x0e,0x32,0xa1,0x24,0x90,0x3a,0x8f,0x3e,0xdd,0x04,0x66,0x59,0xb7,0x59,0x2c,0x70,0x88,0xe2,0x77,0x03,0xb3,0x6c,0x23,0xc3,0xd9,0x5e,0x66,0x9c,0x33,0xb1,0x2f,0xe5,0xbc,0x61,0x60,0xe7,0x15,0x09,0x7e,0xa3,0x34,0xa8,0x35,0xe8,0x7d,0xdf,0xea,0x57,0x98,0x68,0xda,0x9c,0xe1,0x8b,0x26,0xb3,0x67,0x71,0x36,0x85,0x11,0x2c,0xc2,0xd5,0xef,0xdb,0xd9,0xb3,0x9e,0x58}, - {0x5e,0x51,0xaa,0x49,0x54,0x63,0x5b,0xed,0x3a,0x82,0xc6,0x0b,0x9f,0xc4,0x65,0xa8,0xc4,0xd1,0x42,0x5b,0xe9,0x1f,0x0c,0x85,0xb9,0x15,0xd3,0x03,0x6f,0x6d,0xd7,0x30,0x1d,0x9c,0x2f,0x63,0x0e,0xdd,0xcc,0x2e,0x15,0x31,0x89,0x76,0x96,0xb6,0xd0,0x51,0x58,0x7a,0x63,0xa8,0x6b,0xb7,0xdf,0x52,0x39,0xef,0x0e,0xa0,0x49,0x7d,0xd3,0x6d,0xc7,0xe4,0x06,0x21,0x17,0x44,0x44,0x6c,0x69,0x7f,0x8d,0x92,0x80,0xd6,0x53,0xfb,0x26,0x3f,0x4d,0x69,0xa4,0x9e,0x73,0xb4,0xb0,0x4b,0x86,0x2e,0x11,0x97,0xc6,0x10}, - {0xde,0x5f,0xbe,0x7d,0x27,0xc4,0x93,0x64,0xa2,0x7e,0xad,0x19,0xad,0x4f,0x5d,0x26,0x90,0x45,0x30,0x46,0xc8,0xdf,0x00,0x0e,0x09,0xfe,0x66,0xed,0xab,0x1c,0xe6,0x25,0x05,0xc8,0x58,0x83,0xa0,0x2a,0xa6,0x0c,0x47,0x42,0x20,0x7a,0xe3,0x4a,0x3d,0x6a,0xdc,0xed,0x11,0x3b,0xa6,0xd3,0x64,0x74,0xef,0x06,0x08,0x55,0xaf,0x9b,0xbf,0x03,0x04,0x66,0x58,0xcc,0x28,0xe1,0x13,0x3f,0x7e,0x74,0x59,0xb4,0xec,0x73,0x58,0x6f,0xf5,0x68,0x12,0xcc,0xed,0x3d,0xb6,0xa0,0x2c,0xe2,0x86,0x45,0x63,0x78,0x6d,0x56}, - {0x34,0x08,0xc1,0x9c,0x9f,0xa4,0x37,0x16,0x51,0xc4,0x9b,0xa8,0xd5,0x56,0x8e,0xbc,0xdb,0xd2,0x7f,0x7f,0x0f,0xec,0xb5,0x1c,0xd9,0x35,0xcc,0x5e,0xca,0x5b,0x97,0x33,0xd0,0x2f,0x5a,0xc6,0x85,0x42,0x05,0xa1,0xc3,0x67,0x16,0xf3,0x2a,0x11,0x64,0x6c,0x58,0xee,0x1a,0x73,0x40,0xe2,0x0a,0x68,0x2a,0xb2,0x93,0x47,0xf3,0xa5,0xfb,0x14,0xd4,0xf7,0x85,0x69,0x16,0x46,0xd7,0x3c,0x57,0x00,0xc8,0xc9,0x84,0x5e,0x3e,0x59,0x1e,0x13,0x61,0x7b,0xb6,0xf2,0xc3,0x2f,0x6c,0x52,0xfc,0x83,0xea,0x9c,0x82,0x14}, - {0xc2,0x95,0xdd,0x97,0x84,0x7b,0x43,0xff,0xa7,0xb5,0x4e,0xaa,0x30,0x4e,0x74,0x6c,0x8b,0xe8,0x85,0x3c,0x61,0x5d,0x0c,0x9e,0x73,0x81,0x75,0x5f,0x1e,0xc7,0xd9,0x2f,0xb8,0xec,0x71,0x4e,0x2f,0x0b,0xe7,0x21,0xe3,0x77,0xa4,0x40,0xb9,0xdd,0x56,0xe6,0x80,0x4f,0x1d,0xce,0xce,0x56,0x65,0xbf,0x7e,0x7b,0x5d,0x53,0xc4,0x3b,0xfc,0x05,0xdd,0xde,0xaf,0x52,0xae,0xb3,0xb8,0x24,0xcf,0x30,0x3b,0xed,0x8c,0x63,0x95,0x34,0x95,0x81,0xbe,0xa9,0x83,0xbc,0xa4,0x33,0x04,0x1f,0x65,0x5c,0x47,0x67,0x37,0x37}, - {0xd9,0xad,0xd1,0x40,0xfd,0x99,0xba,0x2f,0x27,0xd0,0xf4,0x96,0x6f,0x16,0x07,0xb3,0xae,0x3b,0xf0,0x15,0x52,0xf0,0x63,0x43,0x99,0xf9,0x18,0x3b,0x6c,0xa5,0xbe,0x1f,0x90,0x65,0x24,0x14,0xcb,0x95,0x40,0x63,0x35,0x55,0xc1,0x16,0x40,0x14,0x12,0xef,0x60,0xbc,0x10,0x89,0x0c,0x14,0x38,0x9e,0x8c,0x7c,0x90,0x30,0x57,0x90,0xf5,0x6b,0x8a,0x5b,0x41,0xe1,0xf1,0x78,0xa7,0x0f,0x7e,0xa7,0xc3,0xba,0xf7,0x9f,0x40,0x06,0x50,0x9a,0xa2,0x9a,0xb8,0xd7,0x52,0x6f,0x56,0x5a,0x63,0x7a,0xf6,0x1c,0x52,0x02}, - {0x94,0x52,0x9d,0x0a,0x0b,0xee,0x3f,0x51,0x66,0x5a,0xdf,0x0f,0x5c,0xe7,0x98,0x8f,0xce,0x07,0xe1,0xbf,0x88,0x86,0x61,0xd4,0xed,0x2c,0x38,0x71,0x7e,0x0a,0xa0,0x3f,0xe4,0x5e,0x2f,0x77,0x20,0x67,0x14,0xb1,0xce,0x9a,0x07,0x96,0xb1,0x94,0xf8,0xe8,0x4a,0x82,0xac,0x00,0x4d,0x22,0xf8,0x4a,0xc4,0x6c,0xcd,0xf7,0xd9,0x53,0x17,0x00,0x34,0xdb,0x3d,0x96,0x2d,0x23,0x69,0x3c,0x58,0x38,0x97,0xb4,0xda,0x87,0xde,0x1d,0x85,0xf2,0x91,0xa0,0xf9,0xd1,0xd7,0xaa,0xb6,0xed,0x48,0xa0,0x2f,0xfe,0xb5,0x12}, - {0x4d,0xe3,0xfc,0x96,0xc4,0xfb,0xf0,0x71,0xed,0x5b,0xf3,0xad,0x6b,0x82,0xb9,0x73,0x61,0xc5,0x28,0xff,0x61,0x72,0x04,0xd2,0x6f,0x20,0xb1,0x6f,0xf9,0x76,0x9b,0x74,0x92,0x1e,0x6f,0xad,0x26,0x7c,0x2b,0xdf,0x13,0x89,0x4b,0x50,0x23,0xd3,0x66,0x4b,0xc3,0x8b,0x1c,0x75,0xc0,0x9d,0x40,0x8c,0xb8,0xc7,0x96,0x07,0xc2,0x93,0x7e,0x6f,0x05,0xae,0xa6,0xae,0x04,0xf6,0x5a,0x1f,0x99,0x9c,0xe4,0xbe,0xf1,0x51,0x23,0xc1,0x66,0x6b,0xff,0xee,0xb5,0x08,0xa8,0x61,0x51,0x21,0xe0,0x01,0x0f,0xc1,0xce,0x0f}, - {0x44,0x1e,0xfe,0x49,0xa6,0x58,0x4d,0x64,0x7e,0x77,0xad,0x31,0xa2,0xae,0xfc,0x21,0xd2,0xd0,0x7f,0x88,0x5a,0x1c,0x44,0x02,0xf3,0x11,0xc5,0x83,0x71,0xaa,0x01,0x49,0x45,0x4e,0x24,0xc4,0x9d,0xd2,0xf2,0x3d,0x0a,0xde,0xd8,0x93,0x74,0x0e,0x02,0x2b,0x4d,0x21,0x0c,0x82,0x7e,0x06,0xc8,0x6c,0x0a,0xb9,0xea,0x6f,0x16,0x79,0x37,0x41,0xf0,0xf8,0x1a,0x8c,0x54,0xb7,0xb1,0x08,0xb4,0x99,0x62,0x24,0x7c,0x7a,0x0f,0xce,0x39,0xd9,0x06,0x1e,0xf9,0xb0,0x60,0xf7,0x13,0x12,0x6d,0x72,0x7b,0x88,0xbb,0x41}, - {0xbe,0x46,0x43,0x74,0x44,0x7d,0xe8,0x40,0x25,0x2b,0xb5,0x15,0xd4,0xda,0x48,0x1d,0x3e,0x60,0x3b,0xa1,0x18,0x8a,0x3a,0x7c,0xf7,0xbd,0xcd,0x2f,0xc1,0x28,0xb7,0x4e,0xae,0x91,0x66,0x7c,0x59,0x4c,0x23,0x7e,0xc8,0xb4,0x85,0x0a,0x3d,0x9d,0x88,0x64,0xe7,0xfa,0x4a,0x35,0x0c,0xc9,0xe2,0xda,0x1d,0x9e,0x6a,0x0c,0x07,0x1e,0x87,0x0a,0x89,0x89,0xbc,0x4b,0x99,0xb5,0x01,0x33,0x60,0x42,0xdd,0x5b,0x3a,0xae,0x6b,0x73,0x3c,0x9e,0xd5,0x19,0xe2,0xad,0x61,0x0d,0x64,0xd4,0x85,0x26,0x0f,0x30,0xe7,0x3e}, - {0xb7,0xd6,0x7d,0x9e,0xe4,0x55,0xd2,0xf5,0xac,0x1e,0x0b,0x61,0x5c,0x11,0x16,0x80,0xca,0x87,0xe1,0x92,0x5d,0x97,0x99,0x3c,0xc2,0x25,0x91,0x97,0x62,0x57,0x81,0x13,0x18,0x75,0x1e,0x84,0x47,0x79,0xfa,0x43,0xd7,0x46,0x9c,0x63,0x59,0xfa,0xc6,0xe5,0x74,0x2b,0x05,0xe3,0x1d,0x5e,0x06,0xa1,0x30,0x90,0xb8,0xcf,0xa2,0xc6,0x47,0x7d,0xe0,0xd6,0xf0,0x8e,0x14,0xd0,0xda,0x3f,0x3c,0x6f,0x54,0x91,0x9a,0x74,0x3e,0x9d,0x57,0x81,0xbb,0x26,0x10,0x62,0xec,0x71,0x80,0xec,0xc9,0x34,0x8d,0xf5,0x8c,0x14}, - {0x27,0xf0,0x34,0x79,0xf6,0x92,0xa4,0x46,0xa9,0x0a,0x84,0xf6,0xbe,0x84,0x99,0x46,0x54,0x18,0x61,0x89,0x2a,0xbc,0xa1,0x5c,0xd4,0xbb,0x5d,0xbd,0x1e,0xfa,0xf2,0x3f,0x6d,0x75,0xe4,0x9a,0x7d,0x2f,0x57,0xe2,0x7f,0x48,0xf3,0x88,0xbb,0x45,0xc3,0x56,0x8d,0xa8,0x60,0x69,0x6d,0x0b,0xd1,0x9f,0xb9,0xa1,0xae,0x4e,0xad,0xeb,0x8f,0x27,0x66,0x39,0x93,0x8c,0x1f,0x68,0xaa,0xb1,0x98,0x0c,0x29,0x20,0x9c,0x94,0x21,0x8c,0x52,0x3c,0x9d,0x21,0x91,0x52,0x11,0x39,0x7b,0x67,0x9c,0xfe,0x02,0xdd,0x04,0x41}, - {0x2a,0x42,0x24,0x11,0x5e,0xbf,0xb2,0x72,0xb5,0x3a,0xa3,0x98,0x33,0x0c,0xfa,0xa1,0x66,0xb6,0x52,0xfa,0x01,0x61,0xcb,0x94,0xd5,0x53,0xaf,0xaf,0x00,0x3b,0x86,0x2c,0xb8,0x6a,0x09,0xdb,0x06,0x4e,0x21,0x81,0x35,0x4f,0xe4,0x0c,0xc9,0xb6,0xa8,0x21,0xf5,0x2a,0x9e,0x40,0x2a,0xc1,0x24,0x65,0x81,0xa4,0xfc,0x8e,0xa4,0xb5,0x65,0x01,0x76,0x6a,0x84,0xa0,0x74,0xa4,0x90,0xf1,0xc0,0x7c,0x2f,0xcd,0x84,0xf9,0xef,0x12,0x8f,0x2b,0xaa,0x58,0x06,0x29,0x5e,0x69,0xb8,0xc8,0xfe,0xbf,0xd9,0x67,0x1b,0x59}, - {0xfa,0x9b,0xb4,0x80,0x1c,0x0d,0x2f,0x31,0x8a,0xec,0xf3,0xab,0x5e,0x51,0x79,0x59,0x88,0x1c,0xf0,0x9e,0xc0,0x33,0x70,0x72,0xcb,0x7b,0x8f,0xca,0xc7,0x2e,0xe0,0x3d,0x5d,0xb5,0x18,0x9f,0x71,0xb3,0xb9,0x99,0x1e,0x64,0x8c,0xa1,0xfa,0xe5,0x65,0xe4,0xed,0x05,0x9f,0xc2,0x36,0x11,0x08,0x61,0x8b,0x12,0x30,0x70,0x86,0x4f,0x9b,0x48,0xef,0x92,0xeb,0x3a,0x2d,0x10,0x32,0xd2,0x61,0xa8,0x16,0x61,0xb4,0x53,0x62,0xe1,0x24,0xaa,0x0b,0x19,0xe7,0xab,0x7e,0x3d,0xbf,0xbe,0x6c,0x49,0xba,0xfb,0xf5,0x49}, - {0xd4,0xcf,0x5b,0x8a,0x10,0x9a,0x94,0x30,0xeb,0x73,0x64,0xbc,0x70,0xdd,0x40,0xdc,0x1c,0x0d,0x7c,0x30,0xc1,0x94,0xc2,0x92,0x74,0x6e,0xfa,0xcb,0x6d,0xa8,0x04,0x56,0x2e,0x57,0x9c,0x1e,0x8c,0x62,0x5d,0x15,0x41,0x47,0x88,0xc5,0xac,0x86,0x4d,0x8a,0xeb,0x63,0x57,0x51,0xf6,0x52,0xa3,0x91,0x5b,0x51,0x67,0x88,0xc2,0xa6,0xa1,0x06,0xb6,0x64,0x17,0x7c,0xd4,0xd1,0x88,0x72,0x51,0x8b,0x41,0xe0,0x40,0x11,0x54,0x72,0xd1,0xf6,0xac,0x18,0x60,0x1a,0x03,0x9f,0xc6,0x42,0x27,0xfe,0x89,0x9e,0x98,0x20}, - {0x7f,0xcc,0x2d,0x3a,0xfd,0x77,0x97,0x49,0x92,0xd8,0x4f,0xa5,0x2c,0x7c,0x85,0x32,0xa0,0xe3,0x07,0xd2,0x64,0xd8,0x79,0xa2,0x29,0x7e,0xa6,0x0c,0x1d,0xed,0x03,0x04,0x2e,0xec,0xea,0x85,0x8b,0x27,0x74,0x16,0xdf,0x2b,0xcb,0x7a,0x07,0xdc,0x21,0x56,0x5a,0xf4,0xcb,0x61,0x16,0x4c,0x0a,0x64,0xd3,0x95,0x05,0xf7,0x50,0x99,0x0b,0x73,0x52,0xc5,0x4e,0x87,0x35,0x2d,0x4b,0xc9,0x8d,0x6f,0x24,0x98,0xcf,0xc8,0xe6,0xc5,0xce,0x35,0xc0,0x16,0xfa,0x46,0xcb,0xf7,0xcc,0x3d,0x30,0x08,0x43,0x45,0xd7,0x5b}, - {0xc2,0x4c,0xb2,0x28,0x95,0xd1,0x9a,0x7f,0x81,0xc1,0x35,0x63,0x65,0x54,0x6b,0x7f,0x36,0x72,0xc0,0x4f,0x6e,0xb6,0xb8,0x66,0x83,0xad,0x80,0x73,0x00,0x78,0x3a,0x13,0x2a,0x79,0xe7,0x15,0x21,0x93,0xc4,0x85,0xc9,0xdd,0xcd,0xbd,0xa2,0x89,0x4c,0xc6,0x62,0xd7,0xa3,0xad,0xa8,0x3d,0x1e,0x9d,0x2c,0xf8,0x67,0x30,0x12,0xdb,0xb7,0x5b,0xbe,0x62,0xca,0xc6,0x67,0xf4,0x61,0x09,0xee,0x52,0x19,0x21,0xd6,0x21,0xec,0x04,0x70,0x47,0xd5,0x9b,0x77,0x60,0x23,0x18,0xd2,0xe0,0xf0,0x58,0x6d,0xca,0x0d,0x74}, - {0x4e,0xce,0xcf,0x52,0x07,0xee,0x48,0xdf,0xb7,0x08,0xec,0x06,0xf3,0xfa,0xff,0xc3,0xc4,0x59,0x54,0xb9,0x2a,0x0b,0x71,0x05,0x8d,0xa3,0x3e,0x96,0xfa,0x25,0x1d,0x16,0x3c,0x43,0x78,0x04,0x57,0x8c,0x1a,0x23,0x9d,0x43,0x81,0xc2,0x0e,0x27,0xb5,0xb7,0x9f,0x07,0xd9,0xe3,0xea,0x99,0xaa,0xdb,0xd9,0x03,0x2b,0x6c,0x25,0xf5,0x03,0x2c,0x7d,0xa4,0x53,0x7b,0x75,0x18,0x0f,0x79,0x79,0x58,0x0c,0xcf,0x30,0x01,0x7b,0x30,0xf9,0xf7,0x7e,0x25,0x77,0x3d,0x90,0x31,0xaf,0xbb,0x96,0xbd,0xbd,0x68,0x94,0x69}, - {0xcf,0xfe,0xda,0xf4,0x46,0x2f,0x1f,0xbd,0xf7,0xd6,0x7f,0xa4,0x14,0x01,0xef,0x7c,0x7f,0xb3,0x47,0x4a,0xda,0xfd,0x1f,0xd3,0x85,0x57,0x90,0x73,0xa4,0x19,0x52,0x52,0x48,0x19,0xa9,0x6a,0xe6,0x3d,0xdd,0xd8,0xcc,0xd2,0xc0,0x2f,0xc2,0x64,0x50,0x48,0x2f,0xea,0xfd,0x34,0x66,0x24,0x48,0x9b,0x3a,0x2e,0x4a,0x6c,0x4e,0x1c,0x3e,0x29,0xe1,0x12,0x51,0x92,0x4b,0x13,0x6e,0x37,0xa0,0x5d,0xa1,0xdc,0xb5,0x78,0x37,0x70,0x11,0x31,0x1c,0x46,0xaf,0x89,0x45,0xb0,0x23,0x28,0x03,0x7f,0x44,0x5c,0x60,0x5b}, - {0x89,0x7c,0xc4,0x20,0x59,0x80,0x65,0xb9,0xcc,0x8f,0x3b,0x92,0x0c,0x10,0xf0,0xe7,0x77,0xef,0xe2,0x02,0x65,0x25,0x01,0x00,0xee,0xb3,0xae,0xa8,0xce,0x6d,0xa7,0x24,0x4c,0xf0,0xe7,0xf0,0xc6,0xfe,0xe9,0x3b,0x62,0x49,0xe3,0x75,0x9e,0x57,0x6a,0x86,0x1a,0xe6,0x1d,0x1e,0x16,0xef,0x42,0x55,0xd5,0xbd,0x5a,0xcc,0xf4,0xfe,0x12,0x2f,0x40,0xc7,0xc0,0xdf,0xb2,0x22,0x45,0x0a,0x07,0xa4,0xc9,0x40,0x7f,0x6e,0xd0,0x10,0x68,0xf6,0xcf,0x78,0x41,0x14,0xcf,0xc6,0x90,0x37,0xa4,0x18,0x25,0x7b,0x60,0x5e}, - {0x18,0x18,0xdf,0x6c,0x8f,0x1d,0xb3,0x58,0xa2,0x58,0x62,0xc3,0x4f,0xa7,0xcf,0x35,0x6e,0x1d,0xe6,0x66,0x4f,0xff,0xb3,0xe1,0xf7,0xd5,0xcd,0x6c,0xab,0xac,0x67,0x50,0x14,0xcf,0x96,0xa5,0x1c,0x43,0x2c,0xa0,0x00,0xe4,0xd3,0xae,0x40,0x2d,0xc4,0xe3,0xdb,0x26,0x0f,0x2e,0x80,0x26,0x45,0xd2,0x68,0x70,0x45,0x9e,0x13,0x33,0x1f,0x20,0x51,0x9d,0x03,0x08,0x6b,0x7f,0x52,0xfd,0x06,0x00,0x7c,0x01,0x64,0x49,0xb1,0x18,0xa8,0xa4,0x25,0x2e,0xb0,0x0e,0x22,0xd5,0x75,0x03,0x46,0x62,0x88,0xba,0x7c,0x39}, - {0xb2,0x59,0x59,0xf0,0x93,0x30,0xc1,0x30,0x76,0x79,0xa9,0xe9,0x8d,0xa1,0x3a,0xe2,0x26,0x5e,0x1d,0x72,0x91,0xd4,0x2f,0x22,0x3a,0x6c,0x6e,0x76,0x20,0xd3,0x39,0x23,0xe7,0x79,0x13,0xc8,0xfb,0xc3,0x15,0x78,0xf1,0x2a,0xe1,0xdd,0x20,0x94,0x61,0xa6,0xd5,0xfd,0xa8,0x85,0xf8,0xc0,0xa9,0xff,0x52,0xc2,0xe1,0xc1,0x22,0x40,0x1b,0x77,0xa7,0x2f,0x3a,0x51,0x86,0xd9,0x7d,0xd8,0x08,0xcf,0xd4,0xf9,0x71,0x9b,0xac,0xf5,0xb3,0x83,0xa2,0x1e,0x1b,0xc3,0x6b,0xd0,0x76,0x1a,0x97,0x19,0x92,0x18,0x1a,0x33}, - {0xc6,0x80,0x4f,0xfb,0x45,0x6f,0x16,0xf5,0xcf,0x75,0xc7,0x61,0xde,0xc7,0x36,0x9c,0x1c,0xd9,0x41,0x90,0x1b,0xe8,0xd4,0xe3,0x21,0xfe,0xbd,0x83,0x6b,0x7c,0x16,0x31,0xaf,0x72,0x75,0x9d,0x3a,0x2f,0x51,0x26,0x9e,0x4a,0x07,0x68,0x88,0xe2,0xcb,0x5b,0xc4,0xf7,0x80,0x11,0xc1,0xc1,0xed,0x84,0x7b,0xa6,0x49,0xf6,0x9f,0x61,0xc9,0x1a,0x68,0x10,0x4b,0x52,0x42,0x38,0x2b,0xf2,0x87,0xe9,0x9c,0xee,0x3b,0x34,0x68,0x50,0xc8,0x50,0x62,0x4a,0x84,0x71,0x9d,0xfc,0x11,0xb1,0x08,0x1f,0x34,0x36,0x24,0x61}, - {0x8d,0x89,0x4e,0x87,0xdb,0x41,0x9d,0xd9,0x20,0xdc,0x07,0x6c,0xf1,0xa5,0xfe,0x09,0xbc,0x9b,0x0f,0xd0,0x67,0x2c,0x3d,0x79,0x40,0xff,0x5e,0x9e,0x30,0xe2,0xeb,0x46,0x38,0x26,0x2d,0x1a,0xe3,0x49,0x63,0x8b,0x35,0xfd,0xd3,0x9b,0x00,0xb7,0xdf,0x9d,0xa4,0x6b,0xa0,0xa3,0xb8,0xf1,0x8b,0x7f,0x45,0x04,0xd9,0x78,0x31,0xaa,0x22,0x15,0x38,0x49,0x61,0x69,0x53,0x2f,0x38,0x2c,0x10,0x6d,0x2d,0xb7,0x9a,0x40,0xfe,0xda,0x27,0xf2,0x46,0xb6,0x91,0x33,0xc8,0xe8,0x6c,0x30,0x24,0x05,0xf5,0x70,0xfe,0x45}, - {0x8c,0x0b,0x0c,0x96,0xa6,0x75,0x48,0xda,0x20,0x2f,0x0e,0xef,0x76,0xd0,0x68,0x5b,0xd4,0x8f,0x0b,0x3d,0xcf,0x51,0xfb,0x07,0xd4,0x92,0xe3,0xa0,0x23,0x16,0x8d,0x42,0x91,0x14,0x95,0xc8,0x20,0x49,0xf2,0x62,0xa2,0x0c,0x63,0x3f,0xc8,0x07,0xf0,0x05,0xb8,0xd4,0xc9,0xf5,0xd2,0x45,0xbb,0x6f,0x45,0x22,0x7a,0xb5,0x6d,0x9f,0x61,0x16,0xfd,0x08,0xa3,0x01,0x44,0x4a,0x4f,0x08,0xac,0xca,0xa5,0x76,0xc3,0x19,0x22,0xa8,0x7d,0xbc,0xd1,0x43,0x46,0xde,0xb8,0xde,0xc6,0x38,0xbd,0x60,0x2d,0x59,0x81,0x1d}, - {0x5f,0xac,0x0d,0xa6,0x56,0x87,0x36,0x61,0x57,0xdc,0xab,0xeb,0x6a,0x2f,0xe0,0x17,0x7d,0x0f,0xce,0x4c,0x2d,0x3f,0x19,0x7f,0xf0,0xdc,0xec,0x89,0x77,0x4a,0x23,0x20,0xe8,0xc5,0x85,0x7b,0x9f,0xb6,0x65,0x87,0xb2,0xba,0x68,0xd1,0x8b,0x67,0xf0,0x6f,0x9b,0x0f,0x33,0x1d,0x7c,0xe7,0x70,0x3a,0x7c,0x8e,0xaf,0xb0,0x51,0x6d,0x5f,0x3a,0x52,0xb2,0x78,0x71,0xb6,0x0d,0xd2,0x76,0x60,0xd1,0x1e,0xd5,0xf9,0x34,0x1c,0x07,0x70,0x11,0xe4,0xb3,0x20,0x4a,0x2a,0xf6,0x66,0xe3,0xff,0x3c,0x35,0x82,0xd6,0x7c}, - {0xb6,0xfa,0x87,0xd8,0x5b,0xa4,0xe1,0x0b,0x6e,0x3b,0x40,0xba,0x32,0x6a,0x84,0x2a,0x00,0x60,0x6e,0xe9,0x12,0x10,0x92,0xd9,0x43,0x09,0xdc,0x3b,0x86,0xc8,0x38,0x28,0xf3,0xf4,0xac,0x68,0x60,0xcd,0x65,0xa6,0xd3,0xe3,0xd7,0x3c,0x18,0x2d,0xd9,0x42,0xd9,0x25,0x60,0x33,0x9d,0x38,0x59,0x57,0xff,0xd8,0x2c,0x2b,0x3b,0x25,0xf0,0x3e,0x30,0x50,0x46,0x4a,0xcf,0xb0,0x6b,0xd1,0xab,0x77,0xc5,0x15,0x41,0x6b,0x49,0xfa,0x9d,0x41,0xab,0xf4,0x8a,0xae,0xcf,0x82,0x12,0x28,0xa8,0x06,0xa6,0xb8,0xdc,0x21}, - {0xc8,0x9f,0x9d,0x8c,0x46,0x04,0x60,0x5c,0xcb,0xa3,0x2a,0xd4,0x6e,0x09,0x40,0x25,0x9c,0x2f,0xee,0x12,0x4c,0x4d,0x5b,0x12,0xab,0x1d,0xa3,0x94,0x81,0xd0,0xc3,0x0b,0xba,0x31,0x77,0xbe,0xfa,0x00,0x8d,0x9a,0x89,0x18,0x9e,0x62,0x7e,0x60,0x03,0x82,0x7f,0xd9,0xf3,0x43,0x37,0x02,0xcc,0xb2,0x8b,0x67,0x6f,0x6c,0xbf,0x0d,0x84,0x5d,0x8b,0xe1,0x9f,0x30,0x0d,0x38,0x6e,0x70,0xc7,0x65,0xe1,0xb9,0xa6,0x2d,0xb0,0x6e,0xab,0x20,0xae,0x7d,0x99,0xba,0xbb,0x57,0xdd,0x96,0xc1,0x2a,0x23,0x76,0x42,0x3a}, - {0xfa,0x84,0x70,0x8a,0x2c,0x43,0x42,0x4b,0x45,0xe5,0xb9,0xdf,0xe3,0x19,0x8a,0x89,0x5d,0xe4,0x58,0x9c,0x21,0x00,0x9f,0xbe,0xd1,0xeb,0x6d,0xa1,0xce,0x77,0xf1,0x1f,0xcb,0x7e,0x44,0xdb,0x72,0xc1,0xf8,0x3b,0xbd,0x2d,0x28,0xc6,0x1f,0xc4,0xcf,0x5f,0xfe,0x15,0xaa,0x75,0xc0,0xff,0xac,0x80,0xf9,0xa9,0xe1,0x24,0xe8,0xc9,0x70,0x07,0xfd,0xb5,0xb5,0x45,0x9a,0xd9,0x61,0xcf,0x24,0x79,0x3a,0x1b,0xe9,0x84,0x09,0x86,0x89,0x3e,0x3e,0x30,0x19,0x09,0x30,0xe7,0x1e,0x0b,0x50,0x41,0xfd,0x64,0xf2,0x39}, - {0x9c,0xe2,0xe7,0xdb,0x17,0x34,0xad,0xa7,0x9c,0x13,0x9c,0x2b,0x6a,0x37,0x94,0xbd,0xa9,0x7b,0x59,0x93,0x8e,0x1b,0xe9,0xa0,0x40,0x98,0x88,0x68,0x34,0xd7,0x12,0x17,0xe1,0x7b,0x09,0xfe,0xab,0x4a,0x9b,0xd1,0x29,0x19,0xe0,0xdf,0xe1,0xfc,0x6d,0xa4,0xff,0xf1,0xa6,0x2c,0x94,0x08,0xc9,0xc3,0x4e,0xf1,0x35,0x2c,0x27,0x21,0xc6,0x65,0xdd,0x93,0x31,0xce,0xf8,0x89,0x2b,0xe7,0xbb,0xc0,0x25,0xa1,0x56,0x33,0x10,0x4d,0x83,0xfe,0x1c,0x2e,0x3d,0xa9,0x19,0x04,0x72,0xe2,0x9c,0xb1,0x0a,0x80,0xf9,0x22}, - {0xcb,0xf8,0x9e,0x3e,0x8a,0x36,0x5a,0x60,0x15,0x47,0x50,0xa5,0x22,0xc0,0xe9,0xe3,0x8f,0x24,0x24,0x5f,0xb0,0x48,0x3d,0x55,0xe5,0x26,0x76,0x64,0xcd,0x16,0xf4,0x13,0xac,0xfd,0x6e,0x9a,0xdd,0x9f,0x02,0x42,0x41,0x49,0xa5,0x34,0xbe,0xce,0x12,0xb9,0x7b,0xf3,0xbd,0x87,0xb9,0x64,0x0f,0x64,0xb4,0xca,0x98,0x85,0xd3,0xa4,0x71,0x41,0x8c,0x4c,0xc9,0x99,0xaa,0x58,0x27,0xfa,0x07,0xb8,0x00,0xb0,0x6f,0x6f,0x00,0x23,0x92,0x53,0xda,0xad,0xdd,0x91,0xd2,0xfb,0xab,0xd1,0x4b,0x57,0xfa,0x14,0x82,0x50}, - {0x4b,0xfe,0xd6,0x3e,0x15,0x69,0x02,0xc2,0xc4,0x77,0x1d,0x51,0x39,0x67,0x5a,0xa6,0x94,0xaf,0x14,0x2c,0x46,0x26,0xde,0xcb,0x4b,0xa7,0xab,0x6f,0xec,0x60,0xf9,0x22,0xd6,0x03,0xd0,0x53,0xbb,0x15,0x1a,0x46,0x65,0xc9,0xf3,0xbc,0x88,0x28,0x10,0xb2,0x5a,0x3a,0x68,0x6c,0x75,0x76,0xc5,0x27,0x47,0xb4,0x6c,0xc8,0xa4,0x58,0x77,0x3a,0x76,0x50,0xae,0x93,0xf6,0x11,0x81,0x54,0xa6,0x54,0xfd,0x1d,0xdf,0x21,0xae,0x1d,0x65,0x5e,0x11,0xf3,0x90,0x8c,0x24,0x12,0x94,0xf4,0xe7,0x8d,0x5f,0xd1,0x9f,0x5d}, - {0x7f,0x72,0x63,0x6d,0xd3,0x08,0x14,0x03,0x33,0xb5,0xc7,0xd7,0xef,0x9a,0x37,0x6a,0x4b,0xe2,0xae,0xcc,0xc5,0x8f,0xe1,0xa9,0xd3,0xbe,0x8f,0x4f,0x91,0x35,0x2f,0x33,0x1e,0x52,0xd7,0xee,0x2a,0x4d,0x24,0x3f,0x15,0x96,0x2e,0x43,0x28,0x90,0x3a,0x8e,0xd4,0x16,0x9c,0x2e,0x77,0xba,0x64,0xe1,0xd8,0x98,0xeb,0x47,0xfa,0x87,0xc1,0x3b,0x0c,0xc2,0x86,0xea,0x15,0x01,0x47,0x6d,0x25,0xd1,0x46,0x6c,0xcb,0xb7,0x8a,0x99,0x88,0x01,0x66,0x3a,0xb5,0x32,0x78,0xd7,0x03,0xba,0x6f,0x90,0xce,0x81,0x0d,0x45}, - {0x75,0x52,0x20,0xa6,0xa1,0xb6,0x7b,0x6e,0x83,0x8e,0x3c,0x41,0xd7,0x21,0x4f,0xaa,0xb2,0x5c,0x8f,0xe8,0x55,0xd1,0x56,0x6f,0xe1,0x5b,0x34,0xa6,0x4b,0x5d,0xe2,0x2d,0x3f,0x74,0xae,0x1c,0x96,0xd8,0x74,0xd0,0xed,0x63,0x1c,0xee,0xf5,0x18,0x6d,0xf8,0x29,0xed,0xf4,0xe7,0x5b,0xc5,0xbd,0x97,0x08,0xb1,0x3a,0x66,0x79,0xd2,0xba,0x4c,0xcd,0x1f,0xd7,0xa0,0x24,0x90,0xd1,0x80,0xf8,0x8a,0x28,0xfb,0x0a,0xc2,0x25,0xc5,0x19,0x64,0x3a,0x5f,0x4b,0x97,0xa3,0xb1,0x33,0x72,0x00,0xe2,0xef,0xbc,0x7f,0x7d}, - {0x01,0x28,0x6b,0x26,0x6a,0x1e,0xef,0xfa,0x16,0x9f,0x73,0xd5,0xc4,0x68,0x6c,0x86,0x2c,0x76,0x03,0x1b,0xbc,0x2f,0x8a,0xf6,0x8d,0x5a,0xb7,0x87,0x5e,0x43,0x75,0x59,0x94,0x90,0xc2,0xf3,0xc5,0x5d,0x7c,0xcd,0xab,0x05,0x91,0x2a,0x9a,0xa2,0x81,0xc7,0x58,0x30,0x1c,0x42,0x36,0x1d,0xc6,0x80,0xd7,0xd4,0xd8,0xdc,0x96,0xd1,0x9c,0x4f,0x68,0x37,0x7b,0x6a,0xd8,0x97,0x92,0x19,0x63,0x7a,0xd1,0x1a,0x24,0x58,0xd0,0xd0,0x17,0x0c,0x1c,0x5c,0xad,0x9c,0x02,0xba,0x07,0x03,0x7a,0x38,0x84,0xd0,0xcd,0x7c}, - {0x17,0x04,0x26,0x6d,0x2c,0x42,0xa6,0xdc,0xbd,0x40,0x82,0x94,0x50,0x3d,0x15,0xae,0x77,0xc6,0x68,0xfb,0xb4,0xc1,0xc0,0xa9,0x53,0xcf,0xd0,0x61,0xed,0xd0,0x8b,0x42,0x93,0xcc,0x60,0x67,0x18,0x84,0x0c,0x9b,0x99,0x2a,0xb3,0x1a,0x7a,0x00,0xae,0xcd,0x18,0xda,0x0b,0x62,0x86,0xec,0x8d,0xa8,0x44,0xca,0x90,0x81,0x84,0xca,0x93,0x35,0xa7,0x9a,0x84,0x5e,0x9a,0x18,0x13,0x92,0xcd,0xfa,0xd8,0x65,0x35,0xc3,0xd8,0xd4,0xd1,0xbb,0xfd,0x53,0x5b,0x54,0x52,0x8c,0xe6,0x63,0x2d,0xda,0x08,0x83,0x39,0x27}, - {0x13,0xd4,0x5e,0x43,0x28,0x8d,0xc3,0x42,0xc9,0xcc,0x78,0x32,0x60,0xf3,0x50,0xbd,0xef,0x03,0xda,0x79,0x1a,0xab,0x07,0xbb,0x55,0x33,0x8c,0xbe,0xae,0x97,0x95,0x26,0x53,0x24,0x70,0x0a,0x4c,0x0e,0xa1,0xb9,0xde,0x1b,0x7d,0xd5,0x66,0x58,0xa2,0x0f,0xf7,0xda,0x27,0xcd,0xb5,0xd9,0xb9,0xff,0xfd,0x33,0x2c,0x49,0x45,0x29,0x2c,0x57,0xbe,0x30,0xcd,0xd6,0x45,0xc7,0x7f,0xc7,0xfb,0xae,0xba,0xe3,0xd3,0xe8,0xdf,0xe4,0x0c,0xda,0x5d,0xaa,0x30,0x88,0x2c,0xa2,0x80,0xca,0x5b,0xc0,0x98,0x54,0x98,0x7f}, - {0x17,0xe1,0x0b,0x9f,0x88,0xce,0x49,0x38,0x88,0xa2,0x54,0x7b,0x1b,0xad,0x05,0x80,0x1c,0x92,0xfc,0x23,0x9f,0xc3,0xa3,0x3d,0x04,0xf3,0x31,0x0a,0x47,0xec,0xc2,0x76,0x63,0x63,0xbf,0x0f,0x52,0x15,0x56,0xd3,0xa6,0xfb,0x4d,0xcf,0x45,0x5a,0x04,0x08,0xc2,0xa0,0x3f,0x87,0xbc,0x4f,0xc2,0xee,0xe7,0x12,0x9b,0xd6,0x3c,0x65,0xf2,0x30,0x85,0x0c,0xc1,0xaa,0x38,0xc9,0x08,0x8a,0xcb,0x6b,0x27,0xdb,0x60,0x9b,0x17,0x46,0x70,0xac,0x6f,0x0e,0x1e,0xc0,0x20,0xa9,0xda,0x73,0x64,0x59,0xf1,0x73,0x12,0x2f}, - {0x11,0x1e,0xe0,0x8a,0x7c,0xfc,0x39,0x47,0x9f,0xab,0x6a,0x4a,0x90,0x74,0x52,0xfd,0x2e,0x8f,0x72,0x87,0x82,0x8a,0xd9,0x41,0xf2,0x69,0x5b,0xd8,0x2a,0x57,0x9e,0x5d,0xc0,0x0b,0xa7,0x55,0xd7,0x8b,0x48,0x30,0xe7,0x42,0xd4,0xf1,0xa4,0xb5,0xd6,0x06,0x62,0x61,0x59,0xbc,0x9e,0xa6,0xd1,0xea,0x84,0xf7,0xc5,0xed,0x97,0x19,0xac,0x38,0x3b,0xb1,0x51,0xa7,0x17,0xb5,0x66,0x06,0x8c,0x85,0x9b,0x7e,0x86,0x06,0x7d,0x74,0x49,0xde,0x4d,0x45,0x11,0xc0,0xac,0xac,0x9c,0xe6,0xe9,0xbf,0x9c,0xcd,0xdf,0x22}, - {0xd9,0x0c,0x0d,0xc3,0xe0,0xd2,0xdb,0x8d,0x33,0x43,0xbb,0xac,0x5f,0x66,0x8e,0xad,0x1f,0x96,0x2a,0x32,0x8c,0x25,0x6b,0x8f,0xc7,0xc1,0x48,0x54,0xc0,0x16,0x29,0x6b,0xa1,0xe0,0x3b,0x10,0xb4,0x59,0xec,0x56,0x69,0xf9,0x59,0xd2,0xec,0xba,0xe3,0x2e,0x32,0xcd,0xf5,0x13,0x94,0xb2,0x7c,0x79,0x72,0xe4,0xcd,0x24,0x78,0x87,0xe9,0x0f,0x3b,0x91,0xba,0x0a,0xd1,0x34,0xdb,0x7e,0x0e,0xac,0x6d,0x2e,0x82,0xcd,0xa3,0x4e,0x15,0xf8,0x78,0x65,0xff,0x3d,0x08,0x66,0x17,0x0a,0xf0,0x7f,0x30,0x3f,0x30,0x4c}, - {0x85,0x8c,0xb2,0x17,0xd6,0x3b,0x0a,0xd3,0xea,0x3b,0x77,0x39,0xb7,0x77,0xd3,0xc5,0xbf,0x5c,0x6a,0x1e,0x8c,0xe7,0xc6,0xc6,0xc4,0xb7,0x2a,0x8b,0xf7,0xb8,0x61,0x0d,0x00,0x45,0xd9,0x0d,0x58,0x03,0xfc,0x29,0x93,0xec,0xbb,0x6f,0xa4,0x7a,0xd2,0xec,0xf8,0xa7,0xe2,0xc2,0x5f,0x15,0x0a,0x13,0xd5,0xa1,0x06,0xb7,0x1a,0x15,0x6b,0x41,0xb0,0x36,0xc1,0xe9,0xef,0xd7,0xa8,0x56,0x20,0x4b,0xe4,0x58,0xcd,0xe5,0x07,0xbd,0xab,0xe0,0x57,0x1b,0xda,0x2f,0xe6,0xaf,0xd2,0xe8,0x77,0x42,0xf7,0x2a,0x1a,0x19}, - {0x31,0x14,0x3c,0xc5,0x4b,0xf7,0x16,0xce,0xde,0xed,0x72,0x20,0xce,0x25,0x97,0x2b,0xe7,0x3e,0xb2,0xb5,0x6f,0xc3,0xb9,0xb8,0x08,0xc9,0x5c,0x0b,0x45,0x0e,0x2e,0x7e,0xfb,0x0e,0x46,0x4f,0x43,0x2b,0xe6,0x9f,0xd6,0x07,0x36,0xa6,0xd4,0x03,0xd3,0xde,0x24,0xda,0xa0,0xb7,0x0e,0x21,0x52,0xf0,0x93,0x5b,0x54,0x00,0xbe,0x7d,0x7e,0x23,0x30,0xb4,0x01,0x67,0xed,0x75,0x35,0x01,0x10,0xfd,0x0b,0x9f,0xe6,0x94,0x10,0x23,0x22,0x7f,0xe4,0x83,0x15,0x0f,0x32,0x75,0xe3,0x55,0x11,0xb1,0x99,0xa6,0xaf,0x71}, - {0x1d,0xb6,0x53,0x39,0x9b,0x6f,0xce,0x65,0xe6,0x41,0xa1,0xaf,0xea,0x39,0x58,0xc6,0xfe,0x59,0xf7,0xa9,0xfd,0x5f,0x43,0x0f,0x8e,0xc2,0xb1,0xc2,0xe9,0x42,0x11,0x02,0xd6,0x50,0x3b,0x47,0x1c,0x3c,0x42,0xea,0x10,0xef,0x38,0x3b,0x1f,0x7a,0xe8,0x51,0x95,0xbe,0xc9,0xb2,0x5f,0xbf,0x84,0x9b,0x1c,0x9a,0xf8,0x78,0xbc,0x1f,0x73,0x00,0x80,0x18,0xf8,0x48,0x18,0xc7,0x30,0xe4,0x19,0xc1,0xce,0x5e,0x22,0x0c,0x96,0xbf,0xe3,0x15,0xba,0x6b,0x83,0xe0,0xda,0xb6,0x08,0x58,0xe1,0x47,0x33,0x6f,0x4d,0x4c}, - {0xc9,0x1f,0x7d,0xc1,0xcf,0xec,0xf7,0x18,0x14,0x3c,0x40,0x51,0xa6,0xf5,0x75,0x6c,0xdf,0x0c,0xee,0xf7,0x2b,0x71,0xde,0xdb,0x22,0x7a,0xe4,0xa7,0xaa,0xdd,0x3f,0x19,0x70,0x19,0x8f,0x98,0xfc,0xdd,0x0c,0x2f,0x1b,0xf5,0xb9,0xb0,0x27,0x62,0x91,0x6b,0xbe,0x76,0x91,0x77,0xc4,0xb6,0xc7,0x6e,0xa8,0x9f,0x8f,0xa8,0x00,0x95,0xbf,0x38,0x6f,0x87,0xe8,0x37,0x3c,0xc9,0xd2,0x1f,0x2c,0x46,0xd1,0x18,0x5a,0x1e,0xf6,0xa2,0x76,0x12,0x24,0x39,0x82,0xf5,0x80,0x50,0x69,0x49,0x0d,0xbf,0x9e,0xb9,0x6f,0x6a}, - {0xeb,0x55,0x08,0x56,0xbb,0xc1,0x46,0x6a,0x9d,0xf0,0x93,0xf8,0x38,0xbb,0x16,0x24,0xc1,0xac,0x71,0x8f,0x37,0x11,0x1d,0xd7,0xea,0x96,0x18,0xa3,0x14,0x69,0xf7,0x75,0xc6,0x23,0xe4,0xb6,0xb5,0x22,0xb1,0xee,0x8e,0xff,0x86,0xf2,0x10,0x70,0x9d,0x93,0x8c,0x5d,0xcf,0x1d,0x83,0x2a,0xa9,0x90,0x10,0xeb,0xc5,0x42,0x9f,0xda,0x6f,0x13,0xd1,0xbd,0x05,0xa3,0xb1,0xdf,0x4c,0xf9,0x08,0x2c,0xf8,0x9f,0x9d,0x4b,0x36,0x0f,0x8a,0x58,0xbb,0xc3,0xa5,0xd8,0x87,0x2a,0xba,0xdc,0xe8,0x0b,0x51,0x83,0x21,0x02}, - {0x14,0x2d,0xad,0x5e,0x38,0x66,0xf7,0x4a,0x30,0x58,0x7c,0xca,0x80,0xd8,0x8e,0xa0,0x3d,0x1e,0x21,0x10,0xe6,0xa6,0x13,0x0d,0x03,0x6c,0x80,0x7b,0xe1,0x1c,0x07,0x6a,0x7f,0x7a,0x30,0x43,0x01,0x71,0x5a,0x9d,0x5f,0xa4,0x7d,0xc4,0x9e,0xde,0x63,0xb0,0xd3,0x7a,0x92,0xbe,0x52,0xfe,0xbb,0x22,0x6c,0x42,0x40,0xfd,0x41,0xc4,0x87,0x13,0xf8,0x8a,0x97,0x87,0xd1,0xc3,0xd3,0xb5,0x13,0x44,0x0e,0x7f,0x3d,0x5a,0x2b,0x72,0xa0,0x7c,0x47,0xbb,0x48,0x48,0x7b,0x0d,0x92,0xdc,0x1e,0xaf,0x6a,0xb2,0x71,0x31}, - {0xa8,0x4c,0x56,0x97,0x90,0x31,0x2f,0xa9,0x19,0xe1,0x75,0x22,0x4c,0xb8,0x7b,0xff,0x50,0x51,0x87,0xa4,0x37,0xfe,0x55,0x4f,0x5a,0x83,0xf0,0x3c,0x87,0xd4,0x1f,0x22,0xd1,0x47,0x8a,0xb2,0xd8,0xb7,0x0d,0xa6,0xf1,0xa4,0x70,0x17,0xd6,0x14,0xbf,0xa6,0x58,0xbd,0xdd,0x53,0x93,0xf8,0xa1,0xd4,0xe9,0x43,0x42,0x34,0x63,0x4a,0x51,0x6c,0x41,0x63,0x15,0x3a,0x4f,0x20,0x22,0x23,0x2d,0x03,0x0a,0xba,0xe9,0xe0,0x73,0xfb,0x0e,0x03,0x0f,0x41,0x4c,0xdd,0xe0,0xfc,0xaa,0x4a,0x92,0xfb,0x96,0xa5,0xda,0x48}, - {0xc7,0x9c,0xa5,0x5c,0x66,0x8e,0xca,0x6e,0xa0,0xac,0x38,0x2e,0x4b,0x25,0x47,0xa8,0xce,0x17,0x1e,0xd2,0x08,0xc7,0xaf,0x31,0xf7,0x4a,0xd8,0xca,0xfc,0xd6,0x6d,0x67,0x93,0x97,0x4c,0xc8,0x5d,0x1d,0xf6,0x14,0x06,0x82,0x41,0xef,0xe3,0xf9,0x41,0x99,0xac,0x77,0x62,0x34,0x8f,0xb8,0xf5,0xcd,0xa9,0x79,0x8a,0x0e,0xfa,0x37,0xc8,0x58,0x58,0x90,0xfc,0x96,0x85,0x68,0xf9,0x0c,0x1b,0xa0,0x56,0x7b,0xf3,0xbb,0xdc,0x1d,0x6a,0xd6,0x35,0x49,0x7d,0xe7,0xc2,0xdc,0x0a,0x7f,0xa5,0xc6,0xf2,0x73,0x4f,0x1c}, - {0xbb,0xa0,0x5f,0x30,0xbd,0x4f,0x7a,0x0e,0xad,0x63,0xc6,0x54,0xe0,0x4c,0x9d,0x82,0x48,0x38,0xe3,0x2f,0x83,0xc3,0x21,0xf4,0x42,0x4c,0xf6,0x1b,0x0d,0xc8,0x5a,0x79,0x84,0x34,0x7c,0xfc,0x6e,0x70,0x6e,0xb3,0x61,0xcf,0xc1,0xc3,0xb4,0xc9,0xdf,0x73,0xe5,0xc7,0x1c,0x78,0xc9,0x79,0x1d,0xeb,0x5c,0x67,0xaf,0x7d,0xdb,0x9a,0x45,0x70,0xb3,0x2b,0xb4,0x91,0x49,0xdb,0x91,0x1b,0xca,0xdc,0x02,0x4b,0x23,0x96,0x26,0x57,0xdc,0x78,0x8c,0x1f,0xe5,0x9e,0xdf,0x9f,0xd3,0x1f,0xe2,0x8c,0x84,0x62,0xe1,0x5f}, - {0x1a,0x96,0x94,0xe1,0x4f,0x21,0x59,0x4e,0x4f,0xcd,0x71,0x0d,0xc7,0x7d,0xbe,0x49,0x2d,0xf2,0x50,0x3b,0xd2,0xcf,0x00,0x93,0x32,0x72,0x91,0xfc,0x46,0xd4,0x89,0x47,0x08,0xb2,0x7c,0x5d,0x2d,0x85,0x79,0x28,0xe7,0xf2,0x7d,0x68,0x70,0xdd,0xde,0xb8,0x91,0x78,0x68,0x21,0xab,0xff,0x0b,0xdc,0x35,0xaa,0x7d,0x67,0x43,0xc0,0x44,0x2b,0x8e,0xb7,0x4e,0x07,0xab,0x87,0x1c,0x1a,0x67,0xf4,0xda,0x99,0x8e,0xd1,0xc6,0xfa,0x67,0x90,0x4f,0x48,0xcd,0xbb,0xac,0x3e,0xe4,0xa4,0xb9,0x2b,0xef,0x2e,0xc5,0x60}, - {0xf1,0x8b,0xfd,0x3b,0xbc,0x89,0x5d,0x0b,0x1a,0x55,0xf3,0xc9,0x37,0x92,0x6b,0xb0,0xf5,0x28,0x30,0xd5,0xb0,0x16,0x4c,0x0e,0xab,0xca,0xcf,0x2c,0x31,0x9c,0xbc,0x10,0x11,0x6d,0xae,0x7c,0xc2,0xc5,0x2b,0x70,0xab,0x8c,0xa4,0x54,0x9b,0x69,0xc7,0x44,0xb2,0x2e,0x49,0xba,0x56,0x40,0xbc,0xef,0x6d,0x67,0xb6,0xd9,0x48,0x72,0xd7,0x70,0x5b,0xa0,0xc2,0x3e,0x4b,0xe8,0x8a,0xaa,0xe0,0x81,0x17,0xed,0xf4,0x9e,0x69,0x98,0xd1,0x85,0x8e,0x70,0xe4,0x13,0x45,0x79,0x13,0xf4,0x76,0xa9,0xd3,0x5b,0x75,0x63}, - {0x53,0x08,0xd1,0x2a,0x3e,0xa0,0x5f,0xb5,0x69,0x35,0xe6,0x9e,0x90,0x75,0x6f,0x35,0x90,0xb8,0x69,0xbe,0xfd,0xf1,0xf9,0x9f,0x84,0x6f,0xc1,0x8b,0xc4,0xc1,0x8c,0x0d,0xb7,0xac,0xf1,0x97,0x18,0x10,0xc7,0x3d,0xd8,0xbb,0x65,0xc1,0x5e,0x7d,0xda,0x5d,0x0f,0x02,0xa1,0x0f,0x9c,0x5b,0x8e,0x50,0x56,0x2a,0xc5,0x37,0x17,0x75,0x63,0x27,0xa9,0x19,0xb4,0x6e,0xd3,0x02,0x94,0x02,0xa5,0x60,0xb4,0x77,0x7e,0x4e,0xb4,0xf0,0x56,0x49,0x3c,0xd4,0x30,0x62,0xa8,0xcf,0xe7,0x66,0xd1,0x7a,0x8a,0xdd,0xc2,0x70}, - {0x0e,0xec,0x6f,0x9f,0x50,0x94,0x61,0x65,0x8d,0x51,0xc6,0x46,0xa9,0x7e,0x2e,0xee,0x5c,0x9b,0xe0,0x67,0xf3,0xc1,0x33,0x97,0x95,0x84,0x94,0x63,0x63,0xac,0x0f,0x2e,0x13,0x7e,0xed,0xb8,0x7d,0x96,0xd4,0x91,0x7a,0x81,0x76,0xd7,0x0a,0x2f,0x25,0x74,0x64,0x25,0x85,0x0d,0xe0,0x82,0x09,0xe4,0xe5,0x3c,0xa5,0x16,0x38,0x61,0xb8,0x32,0x64,0xcd,0x48,0xe4,0xbe,0xf7,0xe7,0x79,0xd0,0x86,0x78,0x08,0x67,0x3a,0xc8,0x6a,0x2e,0xdb,0xe4,0xa0,0xd9,0xd4,0x9f,0xf8,0x41,0x4f,0x5a,0x73,0x5c,0x21,0x79,0x41}, - {0x2a,0xed,0xdc,0xd7,0xe7,0x94,0x70,0x8c,0x70,0x9c,0xd3,0x47,0xc3,0x8a,0xfb,0x97,0x02,0xd9,0x06,0xa9,0x33,0xe0,0x3b,0xe1,0x76,0x9d,0xd9,0x0c,0xa3,0x44,0x03,0x70,0x34,0xcd,0x6b,0x28,0xb9,0x33,0xae,0xe4,0xdc,0xd6,0x9d,0x55,0xb6,0x7e,0xef,0xb7,0x1f,0x8e,0xd3,0xb3,0x1f,0x14,0x8b,0x27,0x86,0xc2,0x41,0x22,0x66,0x85,0xfa,0x31,0xf4,0x22,0x36,0x2e,0x42,0x6c,0x82,0xaf,0x2d,0x50,0x33,0x98,0x87,0x29,0x20,0xc1,0x23,0x91,0x38,0x2b,0xe1,0xb7,0xc1,0x9b,0x89,0x24,0x95,0xa9,0x12,0x23,0xbb,0x24}, - {0xc3,0x67,0xde,0x32,0x17,0xed,0xa8,0xb1,0x48,0x49,0x1b,0x46,0x18,0x94,0xb4,0x3c,0xd2,0xbc,0xcf,0x76,0x43,0x43,0xbd,0x8e,0x08,0x80,0x18,0x1e,0x87,0x3e,0xee,0x0f,0x6b,0x5c,0xf8,0xf5,0x2a,0x0c,0xf8,0x41,0x94,0x67,0xfa,0x04,0xc3,0x84,0x72,0x68,0xad,0x1b,0xba,0xa3,0x99,0xdf,0x45,0x89,0x16,0x5d,0xeb,0xff,0xf9,0x2a,0x1d,0x0d,0xdf,0x1e,0x62,0x32,0xa1,0x8a,0xda,0xa9,0x79,0x65,0x22,0x59,0xa1,0x22,0xb8,0x30,0x93,0xc1,0x9a,0xa7,0x7b,0x19,0x04,0x40,0x76,0x1d,0x53,0x18,0x97,0xd7,0xac,0x16}, - {0x3d,0x1d,0x9b,0x2d,0xaf,0x72,0xdf,0x72,0x5a,0x24,0x32,0xa4,0x36,0x2a,0x46,0x63,0x37,0x96,0xb3,0x16,0x79,0xa0,0xce,0x3e,0x09,0x23,0x30,0xb9,0xf6,0x0e,0x3e,0x12,0xad,0xb6,0x87,0x78,0xc5,0xc6,0x59,0xc9,0xba,0xfe,0x90,0x5f,0xad,0x9e,0xe1,0x94,0x04,0xf5,0x42,0xa3,0x62,0x4e,0xe2,0x16,0x00,0x17,0x16,0x18,0x4b,0xd3,0x4e,0x16,0x9a,0xe6,0x2f,0x19,0x4c,0xd9,0x7e,0x48,0x13,0x15,0x91,0x3a,0xea,0x2c,0xae,0x61,0x27,0xde,0xa4,0xb9,0xd3,0xf6,0x7b,0x87,0xeb,0xf3,0x73,0x10,0xc6,0x0f,0xda,0x78}, - {0x6a,0xc6,0x2b,0xe5,0x28,0x5d,0xf1,0x5b,0x8e,0x1a,0xf0,0x70,0x18,0xe3,0x47,0x2c,0xdd,0x8b,0xc2,0x06,0xbc,0xaf,0x19,0x24,0x3a,0x17,0x6b,0x25,0xeb,0xde,0x25,0x2d,0x94,0x3a,0x0c,0x68,0xf1,0x80,0x9f,0xa2,0xe6,0xe7,0xe9,0x1a,0x15,0x7e,0xf7,0x71,0x73,0x79,0x01,0x48,0x58,0xf1,0x00,0x11,0xdd,0x8d,0xb3,0x16,0xb3,0xa4,0x4a,0x05,0xb8,0x7c,0x26,0x19,0x8d,0x46,0xc8,0xdf,0xaf,0x4d,0xe5,0x66,0x9c,0x78,0x28,0x0b,0x17,0xec,0x6e,0x66,0x2a,0x1d,0xeb,0x2a,0x60,0xa7,0x7d,0xab,0xa6,0x10,0x46,0x13}, - {0xfe,0xb0,0xf6,0x8d,0xc7,0x8e,0x13,0x51,0x1b,0xf5,0x75,0xe5,0x89,0xda,0x97,0x53,0xb9,0xf1,0x7a,0x71,0x1d,0x7a,0x20,0x09,0x50,0xd6,0x20,0x2b,0xba,0xfd,0x02,0x21,0x15,0xf5,0xd1,0x77,0xe7,0x65,0x2a,0xcd,0xf1,0x60,0xaa,0x8f,0x87,0x91,0x89,0x54,0xe5,0x06,0xbc,0xda,0xbc,0x3b,0xb7,0xb1,0xfb,0xc9,0x7c,0xa9,0xcb,0x78,0x48,0x65,0xa1,0xe6,0x5c,0x05,0x05,0xe4,0x9e,0x96,0x29,0xad,0x51,0x12,0x68,0xa7,0xbc,0x36,0x15,0xa4,0x7d,0xaa,0x17,0xf5,0x1a,0x3a,0xba,0xb2,0xec,0x29,0xdb,0x25,0xd7,0x0a}, - {0x57,0x24,0x4e,0x83,0xb1,0x67,0x42,0xdc,0xc5,0x1b,0xce,0x70,0xb5,0x44,0x75,0xb6,0xd7,0x5e,0xd1,0xf7,0x0b,0x7a,0xf0,0x1a,0x50,0x36,0xa0,0x71,0xfb,0xcf,0xef,0x4a,0x85,0x6f,0x05,0x9b,0x0c,0xbc,0xc7,0xfe,0xd7,0xff,0xf5,0xe7,0x68,0x52,0x7d,0x53,0xfa,0xae,0x12,0x43,0x62,0xc6,0xaf,0x77,0xd9,0x9f,0x39,0x02,0x53,0x5f,0x67,0x4f,0x1e,0x17,0x15,0x04,0x36,0x36,0x2d,0xc3,0x3b,0x48,0x98,0x89,0x11,0xef,0x2b,0xcd,0x10,0x51,0x94,0xd0,0xad,0x6e,0x0a,0x87,0x61,0x65,0xa8,0xa2,0x72,0xbb,0xcc,0x0b}, - {0xc8,0xa9,0xb1,0xea,0x2f,0x96,0x5e,0x18,0xcd,0x7d,0x14,0x65,0x35,0xe6,0xe7,0x86,0xf2,0x6d,0x5b,0xbb,0x31,0xe0,0x92,0xb0,0x3e,0xb7,0xd6,0x59,0xab,0xf0,0x24,0x40,0x96,0x12,0xfe,0x50,0x4c,0x5e,0x6d,0x18,0x7e,0x9f,0xe8,0xfe,0x82,0x7b,0x39,0xe0,0xb0,0x31,0x70,0x50,0xc5,0xf6,0xc7,0x3b,0xc2,0x37,0x8f,0x10,0x69,0xfd,0x78,0x66,0xc2,0x63,0x68,0x63,0x31,0xfa,0x86,0x15,0xf2,0x33,0x2d,0x57,0x48,0x8c,0xf6,0x07,0xfc,0xae,0x9e,0x78,0x9f,0xcc,0x73,0x4f,0x01,0x47,0xad,0x8e,0x10,0xe2,0x42,0x2d}, - {0x9b,0xd2,0xdf,0x94,0x15,0x13,0xf5,0x97,0x6a,0x4c,0x3f,0x31,0x5d,0x98,0x55,0x61,0x10,0x50,0x45,0x08,0x07,0x3f,0xa1,0xeb,0x22,0xd3,0xd2,0xb8,0x08,0x26,0x6b,0x67,0x93,0x75,0x53,0x0f,0x0d,0x7b,0x71,0x21,0x4c,0x06,0x1e,0x13,0x0b,0x69,0x4e,0x91,0x9f,0xe0,0x2a,0x75,0xae,0x87,0xb6,0x1b,0x6e,0x3c,0x42,0x9b,0xa7,0xf3,0x0b,0x42,0x47,0x2b,0x5b,0x1c,0x65,0xba,0x38,0x81,0x80,0x1b,0x1b,0x31,0xec,0xb6,0x71,0x86,0xb0,0x35,0x31,0xbc,0xb1,0x0c,0xff,0x7b,0xe0,0xf1,0x0c,0x9c,0xfa,0x2f,0x5d,0x74}, - {0xbd,0xc8,0xc9,0x2b,0x1e,0x5a,0x52,0xbf,0x81,0x9d,0x47,0x26,0x08,0x26,0x5b,0xea,0xdb,0x55,0x01,0xdf,0x0e,0xc7,0x11,0xd5,0xd0,0xf5,0x0c,0x96,0xeb,0x3c,0xe2,0x1a,0x6a,0x4e,0xd3,0x21,0x57,0xdf,0x36,0x60,0xd0,0xb3,0x7b,0x99,0x27,0x88,0xdb,0xb1,0xfa,0x6a,0x75,0xc8,0xc3,0x09,0xc2,0xd3,0x39,0xc8,0x1d,0x4c,0xe5,0x5b,0xe1,0x06,0x4a,0x99,0x32,0x19,0x87,0x5d,0x72,0x5b,0xb0,0xda,0xb1,0xce,0xb5,0x1c,0x35,0x32,0x05,0xca,0xb7,0xda,0x49,0x15,0xc4,0x7d,0xf7,0xc1,0x8e,0x27,0x61,0xd8,0xde,0x58}, - {0x5c,0xc5,0x66,0xf2,0x93,0x37,0x17,0xd8,0x49,0x4e,0x45,0xcc,0xc5,0x76,0xc9,0xc8,0xa8,0xc3,0x26,0xbc,0xf8,0x82,0xe3,0x5c,0xf9,0xf6,0x85,0x54,0xe8,0x9d,0xf3,0x2f,0xa8,0xc9,0xc2,0xb6,0xa8,0x5b,0xfb,0x2d,0x8c,0x59,0x2c,0xf5,0x8e,0xef,0xee,0x48,0x73,0x15,0x2d,0xf1,0x07,0x91,0x80,0x33,0xd8,0x5b,0x1d,0x53,0x6b,0x69,0xba,0x08,0x7a,0xc5,0xef,0xc3,0xee,0x3e,0xed,0x77,0x11,0x48,0xff,0xd4,0x17,0x55,0xe0,0x04,0xcb,0x71,0xa6,0xf1,0x3f,0x7a,0x3d,0xea,0x54,0xfe,0x7c,0x94,0xb4,0x33,0x06,0x12}, - {0x42,0x00,0x61,0x91,0x78,0x98,0x94,0x0b,0xe8,0xfa,0xeb,0xec,0x3c,0xb1,0xe7,0x4e,0xc0,0xa4,0xf0,0x94,0x95,0x73,0xbe,0x70,0x85,0x91,0xd5,0xb4,0x99,0x0a,0xd3,0x35,0x0a,0x10,0x12,0x49,0x47,0x31,0xbd,0x82,0x06,0xbe,0x6f,0x7e,0x6d,0x7b,0x23,0xde,0xc6,0x79,0xea,0x11,0x19,0x76,0x1e,0xe1,0xde,0x3b,0x39,0xcb,0xe3,0x3b,0x43,0x07,0xf4,0x97,0xe9,0x5c,0xc0,0x44,0x79,0xff,0xa3,0x51,0x5c,0xb0,0xe4,0x3d,0x5d,0x57,0x7c,0x84,0x76,0x5a,0xfd,0x81,0x33,0x58,0x9f,0xda,0xf6,0x7a,0xde,0x3e,0x87,0x2d}, - {0x09,0x34,0x37,0x43,0x64,0x31,0x7a,0x15,0xd9,0x81,0xaa,0xf4,0xee,0xb7,0xb8,0xfa,0x06,0x48,0xa6,0xf5,0xe6,0xfe,0x93,0xb0,0xb6,0xa7,0x7f,0x70,0x54,0x36,0x77,0x2e,0x81,0xf9,0x5d,0x4e,0xe1,0x02,0x62,0xaa,0xf5,0xe1,0x15,0x50,0x17,0x59,0x0d,0xa2,0x6c,0x1d,0xe2,0xba,0xd3,0x75,0xa2,0x18,0x53,0x02,0x60,0x01,0x8a,0x61,0x43,0x05,0xc1,0x23,0x4c,0x97,0xf4,0xbd,0xea,0x0d,0x93,0x46,0xce,0x9d,0x25,0x0a,0x6f,0xaa,0x2c,0xba,0x9a,0xa2,0xb8,0x2c,0x20,0x04,0x0d,0x96,0x07,0x2d,0x36,0x43,0x14,0x4b}, - {0x7a,0x1f,0x6e,0xb6,0xc7,0xb7,0xc4,0xcc,0x7e,0x2f,0x0c,0xf5,0x25,0x7e,0x15,0x44,0x1c,0xaf,0x3e,0x71,0xfc,0x6d,0xf0,0x3e,0xf7,0x63,0xda,0x52,0x67,0x44,0x2f,0x58,0xcb,0x9c,0x52,0x1c,0xe9,0x54,0x7c,0x96,0xfb,0x35,0xc6,0x64,0x92,0x26,0xf6,0x30,0x65,0x19,0x12,0x78,0xf4,0xaf,0x47,0x27,0x5c,0x6f,0xf6,0xea,0x18,0x84,0x03,0x17,0xe4,0x4c,0x32,0x20,0xd3,0x7b,0x31,0xc6,0xc4,0x8b,0x48,0xa4,0xe8,0x42,0x10,0xa8,0x64,0x13,0x5a,0x4e,0x8b,0xf1,0x1e,0xb2,0xc9,0x8d,0xa2,0xcd,0x4b,0x1c,0x2a,0x0c}, - {0x47,0x04,0x1f,0x6f,0xd0,0xc7,0x4d,0xd2,0x59,0xc0,0x87,0xdb,0x3e,0x9e,0x26,0xb2,0x8f,0xd2,0xb2,0xfb,0x72,0x02,0x5b,0xd1,0x77,0x48,0xf6,0xc6,0xd1,0x8b,0x55,0x7c,0x45,0x69,0xbd,0x69,0x48,0x81,0xc4,0xed,0x22,0x8d,0x1c,0xbe,0x7d,0x90,0x6d,0x0d,0xab,0xc5,0x5c,0xd5,0x12,0xd2,0x3b,0xc6,0x83,0xdc,0x14,0xa3,0x30,0x9b,0x6a,0x5a,0x3d,0x46,0x96,0xd3,0x24,0x15,0xec,0xd0,0xf0,0x24,0x5a,0xc3,0x8a,0x62,0xbb,0x12,0xa4,0x5f,0xbc,0x1c,0x79,0x3a,0x0c,0xa5,0xc3,0xaf,0xfb,0x0a,0xca,0xa5,0x04,0x04}, - {0xd6,0x43,0xa7,0x0a,0x07,0x40,0x1f,0x8c,0xe8,0x5e,0x26,0x5b,0xcb,0xd0,0xba,0xcc,0xde,0xd2,0x8f,0x66,0x6b,0x04,0x4b,0x57,0x33,0x96,0xdd,0xca,0xfd,0x5b,0x39,0x46,0xd1,0x6f,0x41,0x2a,0x1b,0x9e,0xbc,0x62,0x8b,0x59,0x50,0xe3,0x28,0xf7,0xc6,0xb5,0x67,0x69,0x5d,0x3d,0xd8,0x3f,0x34,0x04,0x98,0xee,0xf8,0xe7,0x16,0x75,0x52,0x39,0x9c,0x9a,0x5d,0x1a,0x2d,0xdb,0x7f,0x11,0x2a,0x5c,0x00,0xd1,0xbc,0x45,0x77,0x9c,0xea,0x6f,0xd5,0x54,0xf1,0xbe,0xd4,0xef,0x16,0xd0,0x22,0xe8,0x29,0x9a,0x57,0x76}, - {0x17,0x2a,0xc0,0x49,0x7e,0x8e,0xb6,0x45,0x7f,0xa3,0xa9,0xbc,0xa2,0x51,0xcd,0x23,0x1b,0x4c,0x22,0xec,0x11,0x5f,0xd6,0x3e,0xb1,0xbd,0x05,0x9e,0xdc,0x84,0xa3,0x43,0xf2,0x34,0xb4,0x52,0x13,0xb5,0x3c,0x33,0xe1,0x80,0xde,0x93,0x49,0x28,0x32,0xd8,0xce,0x35,0x0d,0x75,0x87,0x28,0x51,0xb5,0xc1,0x77,0x27,0x2a,0xbb,0x14,0xc5,0x02,0x45,0xb6,0xf1,0x8b,0xda,0xd5,0x4b,0x68,0x53,0x4b,0xb5,0xf6,0x7e,0xd3,0x8b,0xfb,0x53,0xd2,0xb0,0xa9,0xd7,0x16,0x39,0x31,0x59,0x80,0x54,0x61,0x09,0x92,0x60,0x11}, - {0xaa,0xcf,0xda,0x29,0x69,0x16,0x4d,0xb4,0x8f,0x59,0x13,0x84,0x4c,0x9f,0x52,0xda,0x59,0x55,0x3d,0x45,0xca,0x63,0xef,0xe9,0x0b,0x8e,0x69,0xc5,0x5b,0x12,0x1e,0x35,0xcd,0x4d,0x9b,0x36,0x16,0x56,0x38,0x7a,0x63,0x35,0x5c,0x65,0xa7,0x2c,0xc0,0x75,0x21,0x80,0xf1,0xd4,0xf9,0x1b,0xc2,0x7d,0x42,0xe0,0xe6,0x91,0x74,0x7d,0x63,0x2f,0xbe,0x7b,0xf6,0x1a,0x46,0x9b,0xb4,0xd4,0x61,0x89,0xab,0xc8,0x7a,0x03,0x03,0xd6,0xfb,0x99,0xa6,0xf9,0x9f,0xe1,0xde,0x71,0x9a,0x2a,0xce,0xe7,0x06,0x2d,0x18,0x7f}, - {0xec,0x68,0x01,0xab,0x64,0x8e,0x7c,0x7a,0x43,0xc5,0xed,0x15,0x55,0x4a,0x5a,0xcb,0xda,0x0e,0xcd,0x47,0xd3,0x19,0x55,0x09,0xb0,0x93,0x3e,0x34,0x8c,0xac,0xd4,0x67,0x22,0x75,0x21,0x8e,0x72,0x4b,0x45,0x09,0xd8,0xb8,0x84,0xd4,0xf4,0xe8,0x58,0xaa,0x3c,0x90,0x46,0x7f,0x4d,0x25,0x58,0xd3,0x17,0x52,0x1c,0x24,0x43,0xc0,0xac,0x44,0x77,0x57,0x7a,0x4f,0xbb,0x6b,0x7d,0x1c,0xe1,0x13,0x83,0x91,0xd4,0xfe,0x35,0x8b,0x84,0x46,0x6b,0xc9,0xc6,0xa1,0xdc,0x4a,0xbd,0x71,0xad,0x12,0x83,0x1c,0x6d,0x55}, - {0x82,0x39,0x8d,0x0c,0xe3,0x40,0xef,0x17,0x34,0xfa,0xa3,0x15,0x3e,0x07,0xf7,0x31,0x6e,0x64,0x73,0x07,0xcb,0xf3,0x21,0x4f,0xff,0x4e,0x82,0x1d,0x6d,0x6c,0x6c,0x74,0x21,0xe8,0x1b,0xb1,0x56,0x67,0xf0,0x81,0xdd,0xf3,0xa3,0x10,0x23,0xf8,0xaf,0x0f,0x5d,0x46,0x99,0x6a,0x55,0xd0,0xb2,0xf8,0x05,0x7f,0x8c,0xcc,0x38,0xbe,0x7a,0x09,0xa4,0x2d,0xa5,0x7e,0x87,0xc9,0x49,0x0c,0x43,0x1d,0xdc,0x9b,0x55,0x69,0x43,0x4c,0xd2,0xeb,0xcc,0xf7,0x09,0x38,0x2c,0x02,0xbd,0x84,0xee,0x4b,0xa3,0x14,0x7e,0x57}, - {0x0a,0x3b,0xa7,0x61,0xac,0x68,0xe2,0xf0,0xf5,0xa5,0x91,0x37,0x10,0xfa,0xfa,0xf2,0xe9,0x00,0x6d,0x6b,0x82,0x3e,0xe1,0xc1,0x42,0x8f,0xd7,0x6f,0xe9,0x7e,0xfa,0x60,0x2b,0xd7,0x4d,0xbd,0xbe,0xce,0xfe,0x94,0x11,0x22,0x0f,0x06,0xda,0x4f,0x6a,0xf4,0xff,0xd1,0xc8,0xc0,0x77,0x59,0x4a,0x12,0x95,0x92,0x00,0xfb,0xb8,0x04,0x53,0x70,0xc6,0x6e,0x29,0x4d,0x35,0x1d,0x3d,0xb6,0xd8,0x31,0xad,0x5f,0x3e,0x05,0xc3,0xf3,0xec,0x42,0xbd,0xb4,0x8c,0x95,0x0b,0x67,0xfd,0x53,0x63,0xa1,0x0c,0x8e,0x39,0x21}, - {0xf3,0x33,0x2b,0x38,0x8a,0x05,0xf5,0x89,0xb4,0xc0,0x48,0xad,0x0b,0xba,0xe2,0x5a,0x6e,0xb3,0x3d,0xa5,0x03,0xb5,0x93,0x8f,0xe6,0x32,0xa2,0x95,0x9d,0xed,0xa3,0x5a,0x01,0x56,0xb7,0xb4,0xf9,0xaa,0x98,0x27,0x72,0xad,0x8d,0x5c,0x13,0x72,0xac,0x5e,0x23,0xa0,0xb7,0x61,0x61,0xaa,0xce,0xd2,0x4e,0x7d,0x8f,0xe9,0x84,0xb2,0xbf,0x1b,0x61,0x65,0xd9,0xc7,0xe9,0x77,0x67,0x65,0x36,0x80,0xc7,0x72,0x54,0x12,0x2b,0xcb,0xee,0x6e,0x50,0xd9,0x99,0x32,0x05,0x65,0xcc,0x57,0x89,0x5e,0x4e,0xe1,0x07,0x4a}, - {0x99,0xf9,0x0d,0x98,0xcb,0x12,0xe4,0x4e,0x71,0xc7,0x6e,0x3c,0x6f,0xd7,0x15,0xa3,0xfd,0x77,0x5c,0x92,0xde,0xed,0xa5,0xbb,0x02,0x34,0x31,0x1d,0x39,0xac,0x0b,0x3f,0x9b,0xa4,0x77,0xc4,0xcd,0x58,0x0b,0x24,0x17,0xf0,0x47,0x64,0xde,0xda,0x38,0xfd,0xad,0x6a,0xc8,0xa7,0x32,0x8d,0x92,0x19,0x81,0xa0,0xaf,0x84,0xed,0x7a,0xaf,0x50,0xe5,0x5b,0xf6,0x15,0x01,0xde,0x4f,0x6e,0xb2,0x09,0x61,0x21,0x21,0x26,0x98,0x29,0xd9,0xd6,0xad,0x0b,0x81,0x05,0x02,0x78,0x06,0xd0,0xeb,0xba,0x16,0xa3,0x21,0x19}, - {0xfc,0x70,0xb8,0xdf,0x7e,0x2f,0x42,0x89,0xbd,0xb3,0x76,0x4f,0xeb,0x6b,0x29,0x2c,0xf7,0x4d,0xc2,0x36,0xd4,0xf1,0x38,0x07,0xb0,0xae,0x73,0xe2,0x41,0xdf,0x58,0x64,0x8b,0xc1,0xf3,0xd9,0x9a,0xad,0x5a,0xd7,0x9c,0xc1,0xb1,0x60,0xef,0x0e,0x6a,0x56,0xd9,0x0e,0x5c,0x25,0xac,0x0b,0x9a,0x3e,0xf5,0xc7,0x62,0xa0,0xec,0x9d,0x04,0x7b,0x83,0x44,0x44,0x35,0x7a,0xe3,0xcb,0xdc,0x93,0xbe,0xed,0x0f,0x33,0x79,0x88,0x75,0x87,0xdd,0xc5,0x12,0xc3,0x04,0x60,0x78,0x64,0x0e,0x95,0xc2,0xcb,0xdc,0x93,0x60}, - {0x6d,0x70,0xe0,0x85,0x85,0x9a,0xf3,0x1f,0x33,0x39,0xe7,0xb3,0xd8,0xa5,0xd0,0x36,0x3b,0x45,0x8f,0x71,0xe1,0xf2,0xb9,0x43,0x7c,0xa9,0x27,0x48,0x08,0xea,0xd1,0x57,0x4b,0x03,0x84,0x60,0xbe,0xee,0xde,0x6b,0x54,0xb8,0x0f,0x78,0xb6,0xc2,0x99,0x31,0x95,0x06,0x2d,0xb6,0xab,0x76,0x33,0x97,0x90,0x7d,0x64,0x8b,0xc9,0x80,0x31,0x6e,0x71,0xb0,0x28,0xa1,0xe7,0xb6,0x7a,0xee,0xaa,0x8b,0xa8,0x93,0x6d,0x59,0xc1,0xa4,0x30,0x61,0x21,0xb2,0x82,0xde,0xb4,0xf7,0x18,0xbd,0x97,0xdd,0x9d,0x99,0x3e,0x36}, - {0xc4,0x1f,0xee,0x35,0xc1,0x43,0xa8,0x96,0xcf,0xc8,0xe4,0x08,0x55,0xb3,0x6e,0x97,0x30,0xd3,0x8c,0xb5,0x01,0x68,0x2f,0xb4,0x2b,0x05,0x3a,0x69,0x78,0x9b,0xee,0x48,0xc6,0xae,0x4b,0xe2,0xdc,0x48,0x18,0x2f,0x60,0xaf,0xbc,0xba,0x55,0x72,0x9b,0x76,0x31,0xe9,0xef,0x3c,0x6e,0x3c,0xcb,0x90,0x55,0xb3,0xf9,0xc6,0x9b,0x97,0x1f,0x23,0xc6,0xf3,0x2a,0xcc,0x4b,0xde,0x31,0x5c,0x1f,0x8d,0x20,0xfe,0x30,0xb0,0x4b,0xb0,0x66,0xb4,0x4f,0xc1,0x09,0x70,0x8d,0xb7,0x13,0x24,0x79,0x08,0x9b,0xfa,0x9b,0x07}, - {0xf4,0x0d,0x30,0xda,0x51,0x3a,0x90,0xe3,0xb0,0x5a,0xa9,0x3d,0x23,0x64,0x39,0x84,0x80,0x64,0x35,0x0b,0x2d,0xf1,0x3c,0xed,0x94,0x71,0x81,0x84,0xf6,0x77,0x8c,0x03,0x45,0x42,0xd5,0xa2,0x80,0xed,0xc9,0xf3,0x52,0x39,0xf6,0x77,0x78,0x8b,0xa0,0x0a,0x75,0x54,0x08,0xd1,0x63,0xac,0x6d,0xd7,0x6b,0x63,0x70,0x94,0x15,0xfb,0xf4,0x1e,0xec,0x7b,0x16,0x5b,0xe6,0x5e,0x4e,0x85,0xc2,0xcd,0xd0,0x96,0x42,0x0a,0x59,0x59,0x99,0x21,0x10,0x98,0x34,0xdf,0xb2,0x72,0x56,0xff,0x0b,0x4a,0x2a,0xe9,0x5e,0x57}, - {0xcf,0x2f,0x18,0x8a,0x90,0x80,0xc0,0xd4,0xbd,0x9d,0x48,0x99,0xc2,0x70,0xe1,0x30,0xde,0x33,0xf7,0x52,0x57,0xbd,0xba,0x05,0x00,0xfd,0xd3,0x2c,0x11,0xe7,0xd4,0x43,0x01,0xd8,0xa4,0x0a,0x45,0xbc,0x46,0x5d,0xd8,0xb9,0x33,0xa5,0x27,0x12,0xaf,0xc3,0xc2,0x06,0x89,0x2b,0x26,0x3b,0x9e,0x38,0x1b,0x58,0x2f,0x38,0x7e,0x1e,0x0a,0x20,0xc5,0x3a,0xf9,0xea,0x67,0xb9,0x8d,0x51,0xc0,0x52,0x66,0x05,0x9b,0x98,0xbc,0x71,0xf5,0x97,0x71,0x56,0xd9,0x85,0x2b,0xfe,0x38,0x4e,0x1e,0x65,0x52,0xca,0x0e,0x05}, - {0x9c,0x0c,0x3f,0x45,0xde,0x1a,0x43,0xc3,0x9b,0x3b,0x70,0xff,0x5e,0x04,0xf5,0xe9,0x3d,0x7b,0x84,0xed,0xc9,0x7a,0xd9,0xfc,0xc6,0xf4,0x58,0x1c,0xc2,0xe6,0x0e,0x4b,0xea,0x68,0xe6,0x60,0x76,0x39,0xac,0x97,0x97,0xb4,0x3a,0x15,0xfe,0xbb,0x19,0x9b,0x9f,0xa7,0xec,0x34,0xb5,0x79,0xb1,0x4c,0x57,0xae,0x31,0xa1,0x9f,0xc0,0x51,0x61,0x96,0x5d,0xf0,0xfd,0x0d,0x5c,0xf5,0x3a,0x7a,0xee,0xb4,0x2a,0xe0,0x2e,0x26,0xdd,0x09,0x17,0x17,0x12,0x87,0xbb,0xb2,0x11,0x0b,0x03,0x0f,0x80,0xfa,0x24,0xef,0x1f}, - {0x96,0x31,0xa7,0x1a,0xfb,0x53,0xd6,0x37,0x18,0x64,0xd7,0x3f,0x30,0x95,0x94,0x0f,0xb2,0x17,0x3a,0xfb,0x09,0x0b,0x20,0xad,0x3e,0x61,0xc8,0x2f,0x29,0x49,0x4d,0x54,0x86,0x6b,0x97,0x30,0xf5,0xaf,0xd2,0x22,0x04,0x46,0xd2,0xc2,0x06,0xb8,0x90,0x8d,0xe5,0xba,0xe5,0x4d,0x6c,0x89,0xa1,0xdc,0x17,0x0c,0x34,0xc8,0xe6,0x5f,0x00,0x28,0x88,0x86,0x52,0x34,0x9f,0xba,0xef,0x6a,0xa1,0x7d,0x10,0x25,0x94,0xff,0x1b,0x5c,0x36,0x4b,0xd9,0x66,0xcd,0xbb,0x5b,0xf7,0xfa,0x6d,0x31,0x0f,0x93,0x72,0xe4,0x72}, - {0x4f,0x08,0x81,0x97,0x8c,0x20,0x95,0x26,0xe1,0x0e,0x45,0x23,0x0b,0x2a,0x50,0xb1,0x02,0xde,0xef,0x03,0xa6,0xae,0x9d,0xfd,0x4c,0xa3,0x33,0x27,0x8c,0x2e,0x9d,0x5a,0x27,0x76,0x2a,0xd3,0x35,0xf6,0xf3,0x07,0xf0,0x66,0x65,0x5f,0x86,0x4d,0xaa,0x7a,0x50,0x44,0xd0,0x28,0x97,0xe7,0x85,0x3c,0x38,0x64,0xe0,0x0f,0x00,0x7f,0xee,0x1f,0xe5,0xf7,0xdb,0x03,0xda,0x05,0x53,0x76,0xbd,0xcd,0x34,0x14,0x49,0xf2,0xda,0xa4,0xec,0x88,0x4a,0xd2,0xcd,0xd5,0x4a,0x7b,0x43,0x05,0x04,0xee,0x51,0x40,0xf9,0x00}, - {0xb2,0x30,0xd3,0xc3,0x23,0x6b,0x35,0x8d,0x06,0x1b,0x47,0xb0,0x9b,0x8b,0x1c,0xf2,0x3c,0xb8,0x42,0x6e,0x6c,0x31,0x6c,0xb3,0x0d,0xb1,0xea,0x8b,0x7e,0x9c,0xd7,0x07,0x53,0x97,0xaf,0x07,0xbb,0x93,0xef,0xd7,0xa7,0x66,0xb7,0x3d,0xcf,0xd0,0x3e,0x58,0xc5,0x1e,0x0b,0x6e,0xbf,0x98,0x69,0xce,0x52,0x04,0xd4,0x5d,0xd2,0xff,0xb7,0x47,0x12,0xdd,0x08,0xbc,0x9c,0xfb,0xfb,0x87,0x9b,0xc2,0xee,0xe1,0x3a,0x6b,0x06,0x8a,0xbf,0xc1,0x1f,0xdb,0x2b,0x24,0x57,0x0d,0xb6,0x4b,0xa6,0x5e,0xa3,0x20,0x35,0x1c}, - {0x4a,0xa3,0xcb,0xbc,0xa6,0x53,0xd2,0x80,0x9b,0x21,0x38,0x38,0xa1,0xc3,0x61,0x3e,0x96,0xe3,0x82,0x98,0x01,0xb6,0xc3,0x90,0x6f,0xe6,0x0e,0x5d,0x77,0x05,0x3d,0x1c,0x59,0xc0,0x6b,0x21,0x40,0x6f,0xa8,0xcd,0x7e,0xd8,0xbc,0x12,0x1d,0x23,0xbb,0x1f,0x90,0x09,0xc7,0x17,0x9e,0x6a,0x95,0xb4,0x55,0x2e,0xd1,0x66,0x3b,0x0c,0x75,0x38,0x1a,0xe5,0x22,0x94,0x40,0xf1,0x2e,0x69,0x71,0xf6,0x5d,0x2b,0x3c,0xc7,0xc0,0xcb,0x29,0xe0,0x4c,0x74,0xe7,0x4f,0x01,0x21,0x7c,0x48,0x30,0xd3,0xc7,0xe2,0x21,0x06}, - {0x8d,0x83,0x59,0x82,0xcc,0x60,0x98,0xaf,0xdc,0x9a,0x9f,0xc6,0xc1,0x48,0xea,0x90,0x30,0x1e,0x58,0x65,0x37,0x48,0x26,0x65,0xbc,0xa5,0xd3,0x7b,0x09,0xd6,0x07,0x00,0xf3,0xf0,0xdb,0xb0,0x96,0x17,0xae,0xb7,0x96,0xe1,0x7c,0xe1,0xb9,0xaf,0xdf,0x54,0xb4,0xa3,0xaa,0xe9,0x71,0x30,0x92,0x25,0x9d,0x2e,0x00,0xa1,0x9c,0x58,0x8e,0x5d,0x4b,0xa9,0x42,0x08,0x95,0x1d,0xbf,0xc0,0x3e,0x2e,0x8f,0x58,0x63,0xc3,0xd3,0xb2,0xef,0xe2,0x51,0xbb,0x38,0x14,0x96,0x0a,0x86,0xbf,0x1c,0x3c,0x78,0xd7,0x83,0x15}, - {0xe1,0x7a,0xa2,0x5d,0xef,0xa2,0xee,0xec,0x74,0x01,0x67,0x55,0x14,0x3a,0x7c,0x59,0x7a,0x16,0x09,0x66,0x12,0x2a,0xa6,0xc9,0x70,0x8f,0xed,0x81,0x2e,0x5f,0x2a,0x25,0xc7,0x28,0x9d,0xcc,0x04,0x47,0x03,0x90,0x8f,0xc5,0x2c,0xf7,0x9e,0x67,0x1b,0x1d,0x26,0x87,0x5b,0xbe,0x5f,0x2b,0xe1,0x16,0x0a,0x58,0xc5,0x83,0x4e,0x06,0x58,0x49,0x0d,0xe8,0x66,0x50,0x26,0x94,0x28,0x0d,0x6b,0x8c,0x7c,0x30,0x85,0xf7,0xc3,0xfc,0xfd,0x12,0x11,0x0c,0x78,0xda,0x53,0x1b,0x88,0xb3,0x43,0xd8,0x0b,0x17,0x9c,0x07}, - {0xff,0x6f,0xfa,0x64,0xe4,0xec,0x06,0x05,0x23,0xe5,0x05,0x62,0x1e,0x43,0xe3,0xbe,0x42,0xea,0xb8,0x51,0x24,0x42,0x79,0x35,0x00,0xfb,0xc9,0x4a,0xe3,0x05,0xec,0x6d,0x56,0xd0,0xd5,0xc0,0x50,0xcd,0xd6,0xcd,0x3b,0x57,0x03,0xbb,0x6d,0x68,0xf7,0x9a,0x48,0xef,0xc3,0xf3,0x3f,0x72,0xa6,0x3c,0xcc,0x8a,0x7b,0x31,0xd7,0xc0,0x68,0x67,0xb3,0xc1,0x55,0xf1,0xe5,0x25,0xb6,0x94,0x91,0x7b,0x7b,0x99,0xa7,0xf3,0x7b,0x41,0x00,0x26,0x6b,0x6d,0xdc,0xbd,0x2c,0xc2,0xf4,0x52,0xcd,0xdd,0x14,0x5e,0x44,0x51}, - {0x51,0x49,0x14,0x3b,0x4b,0x2b,0x50,0x57,0xb3,0xbc,0x4b,0x44,0x6b,0xff,0x67,0x8e,0xdb,0x85,0x63,0x16,0x27,0x69,0xbd,0xb8,0xc8,0x95,0x92,0xe3,0x31,0x6f,0x18,0x13,0x55,0xa4,0xbe,0x2b,0xab,0x47,0x31,0x89,0x29,0x91,0x07,0x92,0x4f,0xa2,0x53,0x8c,0xa7,0xf7,0x30,0xbe,0x48,0xf9,0x49,0x4b,0x3d,0xd4,0x4f,0x6e,0x08,0x90,0xe9,0x12,0x2e,0xbb,0xdf,0x7f,0xb3,0x96,0x0c,0xf1,0xf9,0xea,0x1c,0x12,0x5e,0x93,0x9a,0x9f,0x3f,0x98,0x5b,0x3a,0xc4,0x36,0x11,0xdf,0xaf,0x99,0x3e,0x5d,0xf0,0xe3,0xb2,0x77}, - {0xde,0xc4,0x2e,0x9c,0xc5,0xa9,0x6f,0x29,0xcb,0xf3,0x84,0x4f,0xbf,0x61,0x8b,0xbc,0x08,0xf9,0xa8,0x17,0xd9,0x06,0x77,0x1c,0x5d,0x25,0xd3,0x7a,0xfc,0x95,0xb7,0x63,0xa4,0xb0,0xdd,0x12,0x9c,0x63,0x98,0xd5,0x6b,0x86,0x24,0xc0,0x30,0x9f,0xd1,0xa5,0x60,0xe4,0xfc,0x58,0x03,0x2f,0x7c,0xd1,0x8a,0x5e,0x09,0x2e,0x15,0x95,0xa1,0x07,0xc8,0x5f,0x9e,0x38,0x02,0x8f,0x36,0xa8,0x3b,0xe4,0x8d,0xcf,0x02,0x3b,0x43,0x90,0x43,0x26,0x41,0xc5,0x5d,0xfd,0xa1,0xaf,0x37,0x01,0x2f,0x03,0x3d,0xe8,0x8f,0x3e}, - {0x94,0xa2,0x70,0x05,0xb9,0x15,0x8b,0x2f,0x49,0x45,0x08,0x67,0x70,0x42,0xf2,0x94,0x84,0xfd,0xbb,0x61,0xe1,0x5a,0x1c,0xde,0x07,0x40,0xac,0x7f,0x79,0x3b,0xba,0x75,0x3c,0xd1,0xef,0xe8,0x8d,0x4c,0x70,0x08,0x31,0x37,0xe0,0x33,0x8e,0x1a,0xc5,0xdf,0xe3,0xcd,0x60,0x12,0xa5,0x5d,0x9d,0xa5,0x86,0x8c,0x25,0xa6,0x99,0x08,0xd6,0x22,0x96,0xd1,0xcd,0x70,0xc0,0xdb,0x39,0x62,0x9a,0x8a,0x7d,0x6c,0x8b,0x8a,0xfe,0x60,0x60,0x12,0x40,0xeb,0xbc,0x47,0x88,0xb3,0x5e,0x9e,0x77,0x87,0x7b,0xd0,0x04,0x09}, - {0x9c,0x91,0xba,0xdd,0xd4,0x1f,0xce,0xb4,0xaa,0x8d,0x4c,0xc7,0x3e,0xdb,0x31,0xcf,0x51,0xcc,0x86,0xad,0x63,0xcc,0x63,0x2c,0x07,0xde,0x1d,0xbc,0x3f,0x14,0xe2,0x43,0xb9,0x40,0xf9,0x48,0x66,0x2d,0x32,0xf4,0x39,0x0c,0x2d,0xbd,0x0c,0x2f,0x95,0x06,0x31,0xf9,0x81,0xa0,0xad,0x97,0x76,0x16,0x6c,0x2a,0xf7,0xba,0xce,0xaa,0x40,0x62,0xa0,0x95,0xa2,0x5b,0x9c,0x74,0x34,0xf8,0x5a,0xd2,0x37,0xca,0x5b,0x7c,0x94,0xd6,0x6a,0x31,0xc9,0xe7,0xa7,0x3b,0xf1,0x66,0xac,0x0c,0xb4,0x8d,0x23,0xaf,0xbd,0x56}, - {0xeb,0x33,0x35,0xf5,0xe3,0xb9,0x2a,0x36,0x40,0x3d,0xb9,0x6e,0xd5,0x68,0x85,0x33,0x72,0x55,0x5a,0x1d,0x52,0x14,0x0e,0x9e,0x18,0x13,0x74,0x83,0x6d,0xa8,0x24,0x1d,0xb2,0x3b,0x9d,0xc1,0x6c,0xd3,0x10,0x13,0xb9,0x86,0x23,0x62,0xb7,0x6b,0x2a,0x06,0x5c,0x4f,0xa1,0xd7,0x91,0x85,0x9b,0x7c,0x54,0x57,0x1e,0x7e,0x50,0x31,0xaa,0x03,0x1f,0xce,0xd4,0xff,0x48,0x76,0xec,0xf4,0x1c,0x8c,0xac,0x54,0xf0,0xea,0x45,0xe0,0x7c,0x35,0x09,0x1d,0x82,0x25,0xd2,0x88,0x59,0x48,0xeb,0x9a,0xdc,0x61,0xb2,0x43}, - {0xbb,0x79,0xbb,0x88,0x19,0x1e,0x5b,0xe5,0x9d,0x35,0x7a,0xc1,0x7d,0xd0,0x9e,0xa0,0x33,0xea,0x3d,0x60,0xe2,0x2e,0x2c,0xb0,0xc2,0x6b,0x27,0x5b,0xcf,0x55,0x60,0x32,0x64,0x13,0x95,0x6c,0x8b,0x3d,0x51,0x19,0x7b,0xf4,0x0b,0x00,0x26,0x71,0xfe,0x94,0x67,0x95,0x4f,0xd5,0xdd,0x10,0x8d,0x02,0x64,0x09,0x94,0x42,0xe2,0xd5,0xb4,0x02,0xf2,0x8d,0xd1,0x28,0xcb,0x55,0xa1,0xb4,0x08,0xe5,0x6c,0x18,0x46,0x46,0xcc,0xea,0x89,0x43,0x82,0x6c,0x93,0xf4,0x9c,0xc4,0x10,0x34,0x5d,0xae,0x09,0xc8,0xa6,0x27}, - {0x88,0xb1,0x0d,0x1f,0xcd,0xeb,0xa6,0x8b,0xe8,0x5b,0x5a,0x67,0x3a,0xd7,0xd3,0x37,0x5a,0x58,0xf5,0x15,0xa3,0xdf,0x2e,0xf2,0x7e,0xa1,0x60,0xff,0x74,0x71,0xb6,0x2c,0x54,0x69,0x3d,0xc4,0x0a,0x27,0x2c,0xcd,0xb2,0xca,0x66,0x6a,0x57,0x3e,0x4a,0xdd,0x6c,0x03,0xd7,0x69,0x24,0x59,0xfa,0x79,0x99,0x25,0x8c,0x3d,0x60,0x03,0x15,0x22,0xd0,0xe1,0x0b,0x39,0xf9,0xcd,0xee,0x59,0xf1,0xe3,0x8c,0x72,0x44,0x20,0x42,0xa9,0xf4,0xf0,0x94,0x7a,0x66,0x1c,0x89,0x82,0x36,0xf4,0x90,0x38,0xb7,0xf4,0x1d,0x7b}, - {0x24,0xa2,0xb2,0xb3,0xe0,0xf2,0x92,0xe4,0x60,0x11,0x55,0x2b,0x06,0x9e,0x6c,0x7c,0x0e,0x7b,0x7f,0x0d,0xe2,0x8f,0xeb,0x15,0x92,0x59,0xfc,0x58,0x26,0xef,0xfc,0x61,0x8c,0xf5,0xf8,0x07,0x18,0x22,0x2e,0x5f,0xd4,0x09,0x94,0xd4,0x9f,0x5c,0x55,0xe3,0x30,0xa6,0xb6,0x1f,0x8d,0xa8,0xaa,0xb2,0x3d,0xe0,0x52,0xd3,0x45,0x82,0x69,0x68,0x7a,0x18,0x18,0x2a,0x85,0x5d,0xb1,0xdb,0xd7,0xac,0xdd,0x86,0xd3,0xaa,0xe4,0xf3,0x82,0xc4,0xf6,0x0f,0x81,0xe2,0xba,0x44,0xcf,0x01,0xaf,0x3d,0x47,0x4c,0xcf,0x46}, - {0xf9,0xe5,0xc4,0x9e,0xed,0x25,0x65,0x42,0x03,0x33,0x90,0x16,0x01,0xda,0x5e,0x0e,0xdc,0xca,0xe5,0xcb,0xf2,0xa7,0xb1,0x72,0x40,0x5f,0xeb,0x14,0xcd,0x7b,0x38,0x29,0x40,0x81,0x49,0xf1,0xa7,0x6e,0x3c,0x21,0x54,0x48,0x2b,0x39,0xf8,0x7e,0x1e,0x7c,0xba,0xce,0x29,0x56,0x8c,0xc3,0x88,0x24,0xbb,0xc5,0x8c,0x0d,0xe5,0xaa,0x65,0x10,0x57,0x0d,0x20,0xdf,0x25,0x45,0x2c,0x1c,0x4a,0x67,0xca,0xbf,0xd6,0x2d,0x3b,0x5c,0x30,0x40,0x83,0xe1,0xb1,0xe7,0x07,0x0a,0x16,0xe7,0x1c,0x4f,0xe6,0x98,0xa1,0x69}, - {0xbc,0x78,0x1a,0xd9,0xe0,0xb2,0x62,0x90,0x67,0x96,0x50,0xc8,0x9c,0x88,0xc9,0x47,0xb8,0x70,0x50,0x40,0x66,0x4a,0xf5,0x9d,0xbf,0xa1,0x93,0x24,0xa9,0xe6,0x69,0x73,0xed,0xca,0xc5,0xdc,0x34,0x44,0x01,0xe1,0x33,0xfb,0x84,0x3c,0x96,0x5d,0xed,0x47,0xe7,0xa0,0x86,0xed,0x76,0x95,0x01,0x70,0xe4,0xf9,0x67,0xd2,0x7b,0x69,0xb2,0x25,0x64,0x68,0x98,0x13,0xfb,0x3f,0x67,0x9d,0xb8,0xc7,0x5d,0x41,0xd9,0xfb,0xa5,0x3c,0x5e,0x3b,0x27,0xdf,0x3b,0xcc,0x4e,0xe0,0xd2,0x4c,0x4e,0xb5,0x3d,0x68,0x20,0x14}, - {0x97,0xd1,0x9d,0x24,0x1e,0xbd,0x78,0xb4,0x02,0xc1,0x58,0x5e,0x00,0x35,0x0c,0x62,0x5c,0xac,0xba,0xcc,0x2f,0xd3,0x02,0xfb,0x2d,0xa7,0x08,0xf5,0xeb,0x3b,0xb6,0x60,0xd0,0x5a,0xcc,0xc1,0x6f,0xbb,0xee,0x34,0x8b,0xac,0x46,0x96,0xe9,0x0c,0x1b,0x6a,0x53,0xde,0x6b,0xa6,0x49,0xda,0xb0,0xd3,0xc1,0x81,0xd0,0x61,0x41,0x3b,0xe8,0x31,0x4f,0x2b,0x06,0x9e,0x12,0xc7,0xe8,0x97,0xd8,0x0a,0x32,0x29,0x4f,0x8f,0xe4,0x49,0x3f,0x68,0x18,0x6f,0x4b,0xe1,0xec,0x5b,0x17,0x03,0x55,0x2d,0xb6,0x1e,0xcf,0x55}, - {0x58,0x3d,0xc2,0x65,0x10,0x10,0x79,0x58,0x9c,0x81,0x94,0x50,0x6d,0x08,0x9d,0x8b,0xa7,0x5f,0xc5,0x12,0xa9,0x2f,0x40,0xe2,0xd4,0x91,0x08,0x57,0x64,0x65,0x9a,0x66,0x52,0x8c,0xf5,0x7d,0xe3,0xb5,0x76,0x30,0x36,0xcc,0x99,0xe7,0xdd,0xb9,0x3a,0xd7,0x20,0xee,0x13,0x49,0xe3,0x1c,0x83,0xbd,0x33,0x01,0xba,0x62,0xaa,0xfb,0x56,0x1a,0xec,0xc9,0x9d,0x5c,0x50,0x6b,0x3e,0x94,0x1a,0x37,0x7c,0xa7,0xbb,0x57,0x25,0x30,0x51,0x76,0x34,0x41,0x56,0xae,0x73,0x98,0x5c,0x8a,0xc5,0x99,0x67,0x83,0xc4,0x13}, - {0xb9,0xe1,0xb3,0x5a,0x46,0x5d,0x3a,0x42,0x61,0x3f,0xf1,0xc7,0x87,0xc1,0x13,0xfc,0xb6,0xb9,0xb5,0xec,0x64,0x36,0xf8,0x19,0x07,0xb6,0x37,0xa6,0x93,0x0c,0xf8,0x66,0x80,0xd0,0x8b,0x5d,0x6a,0xfb,0xdc,0xc4,0x42,0x48,0x1a,0x57,0xec,0xc4,0xeb,0xde,0x65,0x53,0xe5,0xb8,0x83,0xe8,0xb2,0xd4,0x27,0xb8,0xe5,0xc8,0x7d,0xc8,0xbd,0x50,0x11,0xe1,0xdf,0x6e,0x83,0x37,0x6d,0x60,0xd9,0xab,0x11,0xf0,0x15,0x3e,0x35,0x32,0x96,0x3b,0xb7,0x25,0xc3,0x3a,0xb0,0x64,0xae,0xd5,0x5f,0x72,0x44,0x64,0xd5,0x1d}, - {0x7d,0x12,0x62,0x33,0xf8,0x7f,0xa4,0x8f,0x15,0x7c,0xcd,0x71,0xc4,0x6a,0x9f,0xbc,0x8b,0x0c,0x22,0x49,0x43,0x45,0x71,0x6e,0x2e,0x73,0x9f,0x21,0x12,0x59,0x64,0x0e,0x9a,0xc8,0xba,0x08,0x00,0xe6,0x97,0xc2,0xe0,0xc3,0xe1,0xea,0x11,0xea,0x4c,0x7d,0x7c,0x97,0xe7,0x9f,0xe1,0x8b,0xe3,0xf3,0xcd,0x05,0xa3,0x63,0x0f,0x45,0x3a,0x3a,0x27,0x46,0x39,0xd8,0x31,0x2f,0x8f,0x07,0x10,0xa5,0x94,0xde,0x83,0x31,0x9d,0x38,0x80,0x6f,0x99,0x17,0x6d,0x6c,0xe3,0xd1,0x7b,0xa8,0xa9,0x93,0x93,0x8d,0x8c,0x31}, - {0x19,0xfe,0xff,0x2a,0x03,0x5d,0x74,0xf2,0x66,0xdb,0x24,0x7f,0x49,0x3c,0x9f,0x0c,0xef,0x98,0x85,0xba,0xe3,0xd3,0x98,0xbc,0x14,0x53,0x1d,0x9a,0x67,0x7c,0x4c,0x22,0x98,0xd3,0x1d,0xab,0x29,0x9e,0x66,0x5d,0x3b,0x9e,0x2d,0x34,0x58,0x16,0x92,0xfc,0xcd,0x73,0x59,0xf3,0xfd,0x1d,0x85,0x55,0xf6,0x0a,0x95,0x25,0xc3,0x41,0x9a,0x50,0xe9,0x25,0xf9,0xa6,0xdc,0x6e,0xc0,0xbd,0x33,0x1f,0x1b,0x64,0xf4,0xf3,0x3e,0x79,0x89,0x3e,0x83,0x9d,0x80,0x12,0xec,0x82,0x89,0x13,0xa1,0x28,0x23,0xf0,0xbf,0x05}, - {0x0b,0xe0,0xca,0x23,0x70,0x13,0x32,0x36,0x59,0xcf,0xac,0xd1,0x0a,0xcf,0x4a,0x54,0x88,0x1c,0x1a,0xd2,0x49,0x10,0x74,0x96,0xa7,0x44,0x2a,0xfa,0xc3,0x8c,0x0b,0x78,0xe4,0x12,0xc5,0x0d,0xdd,0xa0,0x81,0x68,0xfe,0xfa,0xa5,0x44,0xc8,0x0d,0xe7,0x4f,0x40,0x52,0x4a,0x8f,0x6b,0x8e,0x74,0x1f,0xea,0xa3,0x01,0xee,0xcd,0x77,0x62,0x57,0x5f,0x30,0x4f,0x23,0xbc,0x8a,0xf3,0x1e,0x08,0xde,0x05,0x14,0xbd,0x7f,0x57,0x9a,0x0d,0x2a,0xe6,0x34,0x14,0xa5,0x82,0x5e,0xa1,0xb7,0x71,0x62,0x72,0x18,0xf4,0x5f}, - {0x9d,0xdb,0x89,0x17,0x0c,0x08,0x8e,0x39,0xf5,0x78,0xe7,0xf3,0x25,0x20,0x60,0xa7,0x5d,0x03,0xbd,0x06,0x4c,0x89,0x98,0xfa,0xbe,0x66,0xa9,0x25,0xdc,0x03,0x6a,0x10,0x40,0x95,0xb6,0x13,0xe8,0x47,0xdb,0xe5,0xe1,0x10,0x26,0x43,0x3b,0x2a,0x5d,0xf3,0x76,0x12,0x78,0x38,0xe9,0x26,0x1f,0xac,0x69,0xcb,0xa0,0xa0,0x8c,0xdb,0xd4,0x29,0xd0,0x53,0x33,0x33,0xaf,0x0a,0xad,0xd9,0xe5,0x09,0xd3,0xac,0xa5,0x9d,0x66,0x38,0xf0,0xf7,0x88,0xc8,0x8a,0x65,0x57,0x3c,0xfa,0xbe,0x2c,0x05,0x51,0x8a,0xb3,0x4a}, - {0x93,0xd5,0x68,0x67,0x25,0x2b,0x7c,0xda,0x13,0xca,0x22,0x44,0x57,0xc0,0xc1,0x98,0x1d,0xce,0x0a,0xca,0xd5,0x0b,0xa8,0xf1,0x90,0xa6,0x88,0xc0,0xad,0xd1,0xcd,0x29,0x9c,0xc0,0xdd,0x5f,0xef,0xd1,0xcf,0xd6,0xce,0x5d,0x57,0xf7,0xfd,0x3e,0x2b,0xe8,0xc2,0x34,0x16,0x20,0x5d,0x6b,0xd5,0x25,0x9b,0x2b,0xed,0x04,0xbb,0xc6,0x41,0x30,0x48,0xe1,0x56,0xd9,0xf9,0xf2,0xf2,0x0f,0x2e,0x6b,0x35,0x9f,0x75,0x97,0xe7,0xad,0x5c,0x02,0x6c,0x5f,0xbb,0x98,0x46,0x1a,0x7b,0x9a,0x04,0x14,0x68,0xbd,0x4b,0x10}, - {0x67,0xed,0xf1,0x68,0x31,0xfd,0xf0,0x51,0xc2,0x3b,0x6f,0xd8,0xcd,0x1d,0x81,0x2c,0xde,0xf2,0xd2,0x04,0x43,0x5c,0xdc,0x44,0x49,0x71,0x2a,0x09,0x57,0xcc,0xe8,0x5b,0x63,0xf1,0x7f,0xd6,0x5f,0x9a,0x5d,0xa9,0x81,0x56,0xc7,0x4c,0x9d,0xe6,0x2b,0xe9,0x57,0xf2,0x20,0xde,0x4c,0x02,0xf8,0xb7,0xf5,0x2d,0x07,0xfb,0x20,0x2a,0x4f,0x20,0x79,0xb0,0xeb,0x30,0x3d,0x3b,0x14,0xc8,0x30,0x2e,0x65,0xbd,0x5a,0x15,0x89,0x75,0x31,0x5c,0x6d,0x8f,0x31,0x3c,0x3c,0x65,0x1f,0x16,0x79,0xc2,0x17,0xfb,0x70,0x25}, - {0x75,0x15,0xb6,0x2c,0x7f,0x36,0xfa,0x3e,0x6c,0x02,0xd6,0x1c,0x76,0x6f,0xf9,0xf5,0x62,0x25,0xb5,0x65,0x2a,0x14,0xc7,0xe8,0xcd,0x0a,0x03,0x53,0xea,0x65,0xcb,0x3d,0x5a,0x24,0xb8,0x0b,0x55,0xa9,0x2e,0x19,0xd1,0x50,0x90,0x8f,0xa8,0xfb,0xe6,0xc8,0x35,0xc9,0xa4,0x88,0x2d,0xea,0x86,0x79,0x68,0x86,0x01,0xde,0x91,0x5f,0x1c,0x24,0xaa,0x6c,0xde,0x40,0x29,0x17,0xd8,0x28,0x3a,0x73,0xd9,0x22,0xf0,0x2c,0xbf,0x8f,0xd1,0x01,0x5b,0x23,0xdd,0xfc,0xd7,0x16,0xe5,0xf0,0xcd,0x5f,0xdd,0x0e,0x42,0x08}, - {0x4a,0xfa,0x62,0x83,0xab,0x20,0xff,0xcd,0x6e,0x3e,0x1a,0xe2,0xd4,0x18,0xe1,0x57,0x2b,0xe6,0x39,0xfc,0x17,0x96,0x17,0xe3,0xfd,0x69,0x17,0xbc,0xef,0x53,0x9a,0x0d,0xce,0x10,0xf4,0x04,0x4e,0xc3,0x58,0x03,0x85,0x06,0x6e,0x27,0x5a,0x5b,0x13,0xb6,0x21,0x15,0xb9,0xeb,0xc7,0x70,0x96,0x5d,0x9c,0x88,0xdb,0x21,0xf3,0x54,0xd6,0x04,0xd5,0xb5,0xbd,0xdd,0x16,0xc1,0x7d,0x5e,0x2d,0xdd,0xa5,0x8d,0xb6,0xde,0x54,0x29,0x92,0xa2,0x34,0x33,0x17,0x08,0xb6,0x1c,0xd7,0x1a,0x99,0x18,0x26,0x4f,0x7a,0x4a}, - {0x95,0x5f,0xb1,0x5f,0x02,0x18,0xa7,0xf4,0x8f,0x1b,0x5c,0x6b,0x34,0x5f,0xf6,0x3d,0x12,0x11,0xe0,0x00,0x85,0xf0,0xfc,0xcd,0x48,0x18,0xd3,0xdd,0x4c,0x0c,0xb5,0x11,0x4b,0x2a,0x37,0xaf,0x91,0xb2,0xc3,0x24,0xf2,0x47,0x81,0x71,0x70,0x82,0xda,0x93,0xf2,0x9e,0x89,0x86,0x64,0x85,0x84,0xdd,0x33,0xee,0xe0,0x23,0x42,0x31,0x96,0x4a,0xd6,0xff,0xa4,0x08,0x44,0x27,0xe8,0xa6,0xd9,0x76,0x15,0x9c,0x7e,0x17,0x8e,0x73,0xf2,0xb3,0x02,0x3d,0xb6,0x48,0x33,0x77,0x51,0xcc,0x6b,0xce,0x4d,0xce,0x4b,0x4f}, - {0x84,0x25,0x24,0xe2,0x5a,0xce,0x1f,0xa7,0x9e,0x8a,0xf5,0x92,0x56,0x72,0xea,0x26,0xf4,0x3c,0xea,0x1c,0xd7,0x09,0x1a,0xd2,0xe6,0x01,0x1c,0xb7,0x14,0xdd,0xfc,0x73,0x6f,0x0b,0x9d,0xc4,0x6e,0x61,0xe2,0x30,0x17,0x23,0xec,0xca,0x8f,0x71,0x56,0xe4,0xa6,0x4f,0x6b,0xf2,0x9b,0x40,0xeb,0x48,0x37,0x5f,0x59,0x61,0xe5,0xce,0x42,0x30,0x41,0xac,0x9b,0x44,0x79,0x70,0x7e,0x42,0x0a,0x31,0xe2,0xbc,0x6d,0xe3,0x5a,0x85,0x7c,0x1a,0x84,0x5f,0x21,0x76,0xae,0x4c,0xd6,0xe1,0x9c,0x9a,0x0c,0x74,0x9e,0x38}, - {0xce,0xb9,0xdc,0x34,0xae,0xb3,0xfc,0x64,0xad,0xd0,0x48,0xe3,0x23,0x03,0x50,0x97,0x1b,0x38,0xc6,0x62,0x7d,0xf0,0xb3,0x45,0x88,0x67,0x5a,0x46,0x79,0x53,0x54,0x61,0x28,0xac,0x0e,0x57,0xf6,0x78,0xbd,0xc9,0xe1,0x9c,0x91,0x27,0x32,0x0b,0x5b,0xe5,0xed,0x91,0x9b,0xa1,0xab,0x3e,0xfc,0x65,0x90,0x36,0x26,0xd6,0xe5,0x25,0xc4,0x25,0x6e,0xde,0xd7,0xf1,0xa6,0x06,0x3e,0x3f,0x08,0x23,0x06,0x8e,0x27,0x76,0xf9,0x3e,0x77,0x6c,0x8a,0x4e,0x26,0xf6,0x14,0x8c,0x59,0x47,0x48,0x15,0x89,0xa0,0x39,0x65}, - {0x73,0xf7,0xd2,0xc3,0x74,0x1f,0xd2,0xe9,0x45,0x68,0xc4,0x25,0x41,0x54,0x50,0xc1,0x33,0x9e,0xb9,0xf9,0xe8,0x5c,0x4e,0x62,0x6c,0x18,0xcd,0xc5,0xaa,0xe4,0xc5,0x11,0x19,0x4a,0xbb,0x14,0xd4,0xdb,0xc4,0xdd,0x8e,0x4f,0x42,0x98,0x3c,0xbc,0xb2,0x19,0x69,0x71,0xca,0x36,0xd7,0x9f,0xa8,0x48,0x90,0xbd,0x19,0xf0,0x0e,0x32,0x65,0x0f,0xc6,0xe0,0xfd,0xca,0xb1,0xd1,0x86,0xd4,0x81,0x51,0x3b,0x16,0xe3,0xe6,0x3f,0x4f,0x9a,0x93,0xf2,0xfa,0x0d,0xaf,0xa8,0x59,0x2a,0x07,0x33,0xec,0xbd,0xc7,0xab,0x4c}, - {0x2e,0x0a,0x9c,0x08,0x24,0x96,0x9e,0x23,0x38,0x47,0xfe,0x3a,0xc0,0xc4,0x48,0xc7,0x2a,0xa1,0x4f,0x76,0x2a,0xed,0xdb,0x17,0x82,0x85,0x1c,0x32,0xf0,0x93,0x9b,0x63,0x89,0xd2,0x78,0x3f,0x8f,0x78,0x8f,0xc0,0x9f,0x4d,0x40,0xa1,0x2c,0xa7,0x30,0xfe,0x9d,0xcc,0x65,0xcf,0xfc,0x8b,0x77,0xf2,0x21,0x20,0xcb,0x5a,0x16,0x98,0xe4,0x7e,0xc3,0xa1,0x11,0x91,0xe3,0x08,0xd5,0x7b,0x89,0x74,0x90,0x80,0xd4,0x90,0x2b,0x2b,0x19,0xfd,0x72,0xae,0xc2,0xae,0xd2,0xe7,0xa6,0x02,0xb6,0x85,0x3c,0x49,0xdf,0x0e}, - {0x68,0x5a,0x9b,0x59,0x58,0x81,0xcc,0xae,0x0e,0xe2,0xad,0xeb,0x0f,0x4f,0x57,0xea,0x07,0x7f,0xb6,0x22,0x74,0x1d,0xe4,0x4f,0xb4,0x4f,0x9d,0x01,0xe3,0x92,0x3b,0x40,0x13,0x41,0x76,0x84,0xd2,0xc4,0x67,0x67,0x35,0xf8,0xf5,0xf7,0x3f,0x40,0x90,0xa0,0xde,0xbe,0xe6,0xca,0xfa,0xcf,0x8f,0x1c,0x69,0xa3,0xdf,0xd1,0x54,0x0c,0xc0,0x04,0xf8,0x5c,0x46,0x8b,0x81,0x2f,0xc2,0x4d,0xf8,0xef,0x80,0x14,0x5a,0xf3,0xa0,0x71,0x57,0xd6,0xc7,0x04,0xad,0xbf,0xe8,0xae,0xf4,0x76,0x61,0xb2,0x2a,0xb1,0x5b,0x35}, - {0xf4,0xbb,0x93,0x74,0xcc,0x64,0x1e,0xa7,0xc3,0xb0,0xa3,0xec,0xd9,0x84,0xbd,0xe5,0x85,0xe7,0x05,0xfa,0x0c,0xc5,0x6b,0x0a,0x12,0xc3,0x2e,0x18,0x32,0x81,0x9b,0x0f,0x18,0x73,0x8c,0x5a,0xc7,0xda,0x01,0xa3,0x11,0xaa,0xce,0xb3,0x9d,0x03,0x90,0xed,0x2d,0x3f,0xae,0x3b,0xbf,0x7c,0x07,0x6f,0x8e,0xad,0x52,0xe0,0xf8,0xea,0x18,0x75,0x32,0x6c,0x7f,0x1b,0xc4,0x59,0x88,0xa4,0x98,0x32,0x38,0xf4,0xbc,0x60,0x2d,0x0f,0xd9,0xd1,0xb1,0xc9,0x29,0xa9,0x15,0x18,0xc4,0x55,0x17,0xbb,0x1b,0x87,0xc3,0x47}, - {0x48,0x4f,0xec,0x71,0x97,0x53,0x44,0x51,0x6e,0x5d,0x8c,0xc9,0x7d,0xb1,0x05,0xf8,0x6b,0xc6,0xc3,0x47,0x1a,0xc1,0x62,0xf7,0xdc,0x99,0x46,0x76,0x85,0x9b,0xb8,0x00,0xb0,0x66,0x50,0xc8,0x50,0x5d,0xe6,0xfb,0xb0,0x99,0xa2,0xb3,0xb0,0xc4,0xec,0x62,0xe0,0xe8,0x1a,0x44,0xea,0x54,0x37,0xe5,0x5f,0x8d,0xd4,0xe8,0x2c,0xa0,0xfe,0x08,0xd0,0xea,0xde,0x68,0x76,0xdd,0x4d,0x82,0x23,0x5d,0x68,0x4b,0x20,0x45,0x64,0xc8,0x65,0xd6,0x89,0x5d,0xcd,0xcf,0x14,0xb5,0x37,0xd5,0x75,0x4f,0xa7,0x29,0x38,0x47}, - {0x18,0xc4,0x79,0x46,0x75,0xda,0xd2,0x82,0xf0,0x8d,0x61,0xb2,0xd8,0xd7,0x3b,0xe6,0x0a,0xeb,0x47,0xac,0x24,0xef,0x5e,0x35,0xb4,0xc6,0x33,0x48,0x4c,0x68,0x78,0x20,0xc9,0x02,0x39,0xad,0x3a,0x53,0xd9,0x23,0x8f,0x58,0x03,0xef,0xce,0xdd,0xc2,0x64,0xb4,0x2f,0xe1,0xcf,0x90,0x73,0x25,0x15,0x90,0xd3,0xe4,0x44,0x4d,0x8b,0x66,0x6c,0x0c,0x82,0x78,0x7a,0x21,0xcf,0x48,0x3b,0x97,0x3e,0x27,0x81,0xb2,0x0a,0x6a,0xf7,0x7b,0xed,0x8e,0x8c,0xa7,0x65,0x6c,0xa9,0x3f,0x43,0x8a,0x4f,0x05,0xa6,0x11,0x74}, - {0x6d,0xc8,0x9d,0xb9,0x32,0x9d,0x65,0x4d,0x15,0xf1,0x3a,0x60,0x75,0xdc,0x4c,0x04,0x88,0xe4,0xc2,0xdc,0x2c,0x71,0x4c,0xb3,0xff,0x34,0x81,0xfb,0x74,0x65,0x13,0x7c,0xb4,0x75,0xb1,0x18,0x3d,0xe5,0x9a,0x57,0x02,0xa1,0x92,0xf3,0x59,0x31,0x71,0x68,0xf5,0x35,0xef,0x1e,0xba,0xec,0x55,0x84,0x8f,0x39,0x8c,0x45,0x72,0xa8,0xc9,0x1e,0x9b,0x50,0xa2,0x00,0xd4,0xa4,0xe6,0xb8,0xb4,0x82,0xc8,0x0b,0x02,0xd7,0x81,0x9b,0x61,0x75,0x95,0xf1,0x9b,0xcc,0xe7,0x57,0x60,0x64,0xcd,0xc7,0xa5,0x88,0xdd,0x3a}, - {0xf2,0xdc,0x35,0xb6,0x70,0x57,0x89,0xab,0xbc,0x1f,0x6c,0xf6,0x6c,0xef,0xdf,0x02,0x87,0xd1,0xb6,0xbe,0x68,0x02,0x53,0x85,0x74,0x9e,0x87,0xcc,0xfc,0x29,0x99,0x24,0x46,0x30,0x39,0x59,0xd4,0x98,0xc2,0x85,0xec,0x59,0xf6,0x5f,0x98,0x35,0x7e,0x8f,0x3a,0x6e,0xf6,0xf2,0x2a,0xa2,0x2c,0x1d,0x20,0xa7,0x06,0xa4,0x31,0x11,0xba,0x61,0x29,0x90,0x95,0x16,0xf1,0xa0,0xd0,0xa3,0x89,0xbd,0x7e,0xba,0x6c,0x6b,0x3b,0x02,0x07,0x33,0x78,0x26,0x3e,0x5a,0xf1,0x7b,0xe7,0xec,0xd8,0xbb,0x0c,0x31,0x20,0x56}, - {0x43,0xd6,0x34,0x49,0x43,0x93,0x89,0x52,0xf5,0x22,0x12,0xa5,0x06,0xf8,0xdb,0xb9,0x22,0x1c,0xf4,0xc3,0x8f,0x87,0x6d,0x8f,0x30,0x97,0x9d,0x4d,0x2a,0x6a,0x67,0x37,0xd6,0x85,0xe2,0x77,0xf4,0xb5,0x46,0x66,0x93,0x61,0x8f,0x6c,0x67,0xff,0xe8,0x40,0xdd,0x94,0xb5,0xab,0x11,0x73,0xec,0xa6,0x4d,0xec,0x8c,0x65,0xf3,0x46,0xc8,0x7e,0xc7,0x2e,0xa2,0x1d,0x3f,0x8f,0x5e,0x9b,0x13,0xcd,0x01,0x6c,0x77,0x1d,0x0f,0x13,0xb8,0x9f,0x98,0xa2,0xcf,0x8f,0x4c,0x21,0xd5,0x9d,0x9b,0x39,0x23,0xf7,0xaa,0x6d}, - {0x47,0xbe,0x3d,0xeb,0x62,0x75,0x3a,0x5f,0xb8,0xa0,0xbd,0x8e,0x54,0x38,0xea,0xf7,0x99,0x72,0x74,0x45,0x31,0xe5,0xc3,0x00,0x51,0xd5,0x27,0x16,0xe7,0xe9,0x04,0x13,0xa2,0x8e,0xad,0xac,0xbf,0x04,0x3b,0x58,0x84,0xe8,0x8b,0x14,0xe8,0x43,0xb7,0x29,0xdb,0xc5,0x10,0x08,0x3b,0x58,0x1e,0x2b,0xaa,0xbb,0xb3,0x8e,0xe5,0x49,0x54,0x2b,0xfe,0x9c,0xdc,0x6a,0xd2,0x14,0x98,0x78,0x0b,0xdd,0x48,0x8b,0x3f,0xab,0x1b,0x3c,0x0a,0xc6,0x79,0xf9,0xff,0xe1,0x0f,0xda,0x93,0xd6,0x2d,0x7c,0x2d,0xde,0x68,0x44}, - {0x9e,0x46,0x19,0x94,0x5e,0x35,0xbb,0x51,0x54,0xc7,0xdd,0x23,0x4c,0xdc,0xe6,0x33,0x62,0x99,0x7f,0x44,0xd6,0xb6,0xa5,0x93,0x63,0xbd,0x44,0xfb,0x6f,0x7c,0xce,0x6c,0xce,0x07,0x63,0xf8,0xc6,0xd8,0x9a,0x4b,0x28,0x0c,0x5d,0x43,0x31,0x35,0x11,0x21,0x2c,0x77,0x7a,0x65,0xc5,0x66,0xa8,0xd4,0x52,0x73,0x24,0x63,0x7e,0x42,0xa6,0x5d,0xca,0x22,0xac,0xde,0x88,0xc6,0x94,0x1a,0xf8,0x1f,0xae,0xbb,0xf7,0x6e,0x06,0xb9,0x0f,0x58,0x59,0x8d,0x38,0x8c,0xad,0x88,0xa8,0x2c,0x9f,0xe7,0xbf,0x9a,0xf2,0x58}, - {0x68,0x3e,0xe7,0x8d,0xab,0xcf,0x0e,0xe9,0xa5,0x76,0x7e,0x37,0x9f,0x6f,0x03,0x54,0x82,0x59,0x01,0xbe,0x0b,0x5b,0x49,0xf0,0x36,0x1e,0xf4,0xa7,0xc4,0x29,0x76,0x57,0xf6,0xcd,0x0e,0x71,0xbf,0x64,0x5a,0x4b,0x3c,0x29,0x2c,0x46,0x38,0xe5,0x4c,0xb1,0xb9,0x3a,0x0b,0xd5,0x56,0xd0,0x43,0x36,0x70,0x48,0x5b,0x18,0x24,0x37,0xf9,0x6a,0x88,0xa8,0xc6,0x09,0x45,0x02,0x20,0x32,0x73,0x89,0x55,0x4b,0x13,0x36,0xe0,0xd2,0x9f,0x28,0x33,0x3c,0x23,0x36,0xe2,0x83,0x8f,0xc1,0xae,0x0c,0xbb,0x25,0x1f,0x70}, - {0xed,0x6c,0x61,0xe4,0xf8,0xb0,0xa8,0xc3,0x7d,0xa8,0x25,0x9e,0x0e,0x66,0x00,0xf7,0x9c,0xa5,0xbc,0xf4,0x1f,0x06,0xe3,0x61,0xe9,0x0b,0xc4,0xbd,0xbf,0x92,0x0c,0x2e,0x13,0xc1,0xbe,0x7c,0xd9,0xf6,0x18,0x9d,0xe4,0xdb,0xbf,0x74,0xe6,0x06,0x4a,0x84,0xd6,0x60,0x4e,0xac,0x22,0xb5,0xf5,0x20,0x51,0x5e,0x95,0x50,0xc0,0x5b,0x0a,0x72,0x35,0x5a,0x80,0x9b,0x43,0x09,0x3f,0x0c,0xfc,0xab,0x42,0x62,0x37,0x8b,0x4e,0xe8,0x46,0x93,0x22,0x5c,0xf3,0x17,0x14,0x69,0xec,0xf0,0x4e,0x14,0xbb,0x9c,0x9b,0x0e}, - {0xad,0x20,0x57,0xfb,0x8f,0xd4,0xba,0xfb,0x0e,0x0d,0xf9,0xdb,0x6b,0x91,0x81,0xee,0xbf,0x43,0x55,0x63,0x52,0x31,0x81,0xd4,0xd8,0x7b,0x33,0x3f,0xeb,0x04,0x11,0x22,0xee,0xbe,0xb1,0x5d,0xd5,0x9b,0xee,0x8d,0xb9,0x3f,0x72,0x0a,0x37,0xab,0xc3,0xc9,0x91,0xd7,0x68,0x1c,0xbf,0xf1,0xa8,0x44,0xde,0x3c,0xfd,0x1c,0x19,0x44,0x6d,0x36,0x14,0x8c,0xbc,0xf2,0x43,0x17,0x3c,0x9e,0x3b,0x6c,0x85,0xb5,0xfc,0x26,0xda,0x2e,0x97,0xfb,0xa7,0x68,0x0e,0x2f,0xb8,0xcc,0x44,0x32,0x59,0xbc,0xe6,0xa4,0x67,0x41}, - {0x00,0x27,0xf6,0x76,0x28,0x9d,0x3b,0x64,0xeb,0x68,0x76,0x0e,0x40,0x9d,0x1d,0x5d,0x84,0x06,0xfc,0x21,0x03,0x43,0x4b,0x1b,0x6a,0x24,0x55,0x22,0x7e,0xbb,0x38,0x79,0xee,0x8f,0xce,0xf8,0x65,0x26,0xbe,0xc2,0x2c,0xd6,0x80,0xe8,0x14,0xff,0x67,0xe9,0xee,0x4e,0x36,0x2f,0x7e,0x6e,0x2e,0xf1,0xf6,0xd2,0x7e,0xcb,0x70,0x33,0xb3,0x34,0xcc,0xd6,0x81,0x86,0xee,0x91,0xc5,0xcd,0x53,0xa7,0x85,0xed,0x9c,0x10,0x02,0xce,0x83,0x88,0x80,0x58,0xc1,0x85,0x74,0xed,0xe4,0x65,0xfe,0x2d,0x6e,0xfc,0x76,0x11}, - {0x9b,0x61,0x9c,0x5b,0xd0,0x6c,0xaf,0xb4,0x80,0x84,0xa5,0xb2,0xf4,0xc9,0xdf,0x2d,0xc4,0x4d,0xe9,0xeb,0x02,0xa5,0x4f,0x3d,0x34,0x5f,0x7d,0x67,0x4c,0x3a,0xfc,0x08,0xb8,0x0e,0x77,0x49,0x89,0xe2,0x90,0xdb,0xa3,0x40,0xf4,0xac,0x2a,0xcc,0xfb,0x98,0x9b,0x87,0xd7,0xde,0xfe,0x4f,0x35,0x21,0xb6,0x06,0x69,0xf2,0x54,0x3e,0x6a,0x1f,0xea,0x34,0x07,0xd3,0x99,0xc1,0xa4,0x60,0xd6,0x5c,0x16,0x31,0xb6,0x85,0xc0,0x40,0x95,0x82,0x59,0xf7,0x23,0x3e,0x33,0xe2,0xd1,0x00,0xb9,0x16,0x01,0xad,0x2f,0x4f}, - {0x54,0x4e,0xae,0x94,0x41,0xb2,0xbe,0x44,0x6c,0xef,0x57,0x18,0x51,0x1c,0x54,0x5f,0x98,0x04,0x8d,0x36,0x2d,0x6b,0x1e,0xa6,0xab,0xf7,0x2e,0x97,0xa4,0x84,0x54,0x44,0x38,0xb6,0x3b,0xb7,0x1d,0xd9,0x2c,0x96,0x08,0x9c,0x12,0xfc,0xaa,0x77,0x05,0xe6,0x89,0x16,0xb6,0xf3,0x39,0x9b,0x61,0x6f,0x81,0xee,0x44,0x29,0x5f,0x99,0x51,0x34,0x7c,0x7d,0xea,0x9f,0xd0,0xfc,0x52,0x91,0xf6,0x5c,0x93,0xb0,0x94,0x6c,0x81,0x4a,0x40,0x5c,0x28,0x47,0xaa,0x9a,0x8e,0x25,0xb7,0x93,0x28,0x04,0xa6,0x9c,0xb8,0x10}, - {0x9c,0x28,0x18,0x97,0x49,0x47,0x59,0x3d,0x26,0x3f,0x53,0x24,0xc5,0xf8,0xeb,0x12,0x15,0xef,0xc3,0x14,0xcb,0xbf,0x62,0x02,0x8e,0x51,0xb7,0x77,0xd5,0x78,0xb8,0x20,0x6e,0xf0,0x45,0x5a,0xbe,0x41,0x39,0x75,0x65,0x5f,0x9c,0x6d,0xed,0xae,0x7c,0xd0,0xb6,0x51,0xff,0x72,0x9c,0x6b,0x77,0x11,0xa9,0x4d,0x0d,0xef,0xd9,0xd1,0xd2,0x17,0x6a,0x3e,0x3f,0x07,0x18,0xaf,0xf2,0x27,0x69,0x10,0x52,0xd7,0x19,0xe5,0x3f,0xfd,0x22,0x00,0xa6,0x3c,0x2c,0xb7,0xe3,0x22,0xa7,0xc6,0x65,0xcc,0x63,0x4f,0x21,0x72}, - {0x93,0xa6,0x07,0x53,0x40,0x7f,0xe3,0xb4,0x95,0x67,0x33,0x2f,0xd7,0x14,0xa7,0xab,0x99,0x10,0x76,0x73,0xa7,0xd0,0xfb,0xd6,0xc9,0xcb,0x71,0x81,0xc5,0x48,0xdf,0x5f,0xc9,0x29,0x3b,0xf4,0xb9,0xb7,0x9d,0x1d,0x75,0x8f,0x51,0x4f,0x4a,0x82,0x05,0xd6,0xc4,0x9d,0x2f,0x31,0xbd,0x72,0xc0,0xf2,0xb0,0x45,0x15,0x5a,0x85,0xac,0x24,0x1f,0xaa,0x05,0x95,0x8e,0x32,0x08,0xd6,0x24,0xee,0x20,0x14,0x0c,0xd1,0xc1,0x48,0x47,0xa2,0x25,0xfb,0x06,0x5c,0xe4,0xff,0xc7,0xe6,0x95,0xe3,0x2a,0x9e,0x73,0xba,0x00}, - {0xd6,0x90,0x87,0x5c,0xde,0x98,0x2e,0x59,0xdf,0xa2,0xc2,0x45,0xd3,0xb7,0xbf,0xe5,0x22,0x99,0xb4,0xf9,0x60,0x3b,0x5a,0x11,0xf3,0x78,0xad,0x67,0x3e,0x3a,0x28,0x03,0x26,0xbb,0x88,0xea,0xf5,0x26,0x44,0xae,0xfb,0x3b,0x97,0x84,0xd9,0x79,0x06,0x36,0x50,0x4e,0x69,0x26,0x0c,0x03,0x9f,0x5c,0x26,0xd2,0x18,0xd5,0xe7,0x7d,0x29,0x72,0x39,0xb9,0x0c,0xbe,0xc7,0x1d,0x24,0x48,0x80,0x30,0x63,0x8b,0x4d,0x9b,0xf1,0x32,0x08,0x93,0x28,0x02,0x0d,0xc9,0xdf,0xd3,0x45,0x19,0x27,0x46,0x68,0x29,0xe1,0x05}, - {0x5a,0x49,0x9c,0x2d,0xb3,0xee,0x82,0xba,0x7c,0xb9,0x2b,0xf1,0xfc,0xc8,0xef,0xce,0xe0,0xd1,0xb5,0x93,0xae,0xab,0x2d,0xb0,0x9b,0x8d,0x69,0x13,0x9c,0x0c,0xc0,0x39,0x50,0x45,0x2c,0x24,0xc8,0xbb,0xbf,0xad,0xd9,0x81,0x30,0xd0,0xec,0x0c,0xc8,0xbc,0x92,0xdf,0xc8,0xf5,0xa6,0x66,0x35,0x84,0x4c,0xce,0x58,0x82,0xd3,0x25,0xcf,0x78,0x68,0x9d,0x48,0x31,0x8e,0x6b,0xae,0x15,0x87,0xf0,0x2b,0x9c,0xab,0x1c,0x85,0xaa,0x05,0xfa,0x4e,0xf0,0x97,0x5a,0xa7,0xc9,0x32,0xf8,0x3f,0x6b,0x07,0x52,0x6b,0x00}, - {0x1c,0x78,0x95,0x9d,0xe1,0xcf,0xe0,0x29,0xe2,0x10,0x63,0x96,0x18,0xdf,0x81,0xb6,0x39,0x6b,0x51,0x70,0xd3,0x39,0xdf,0x57,0x22,0x61,0xc7,0x3b,0x44,0xe3,0x57,0x4d,0x2d,0x08,0xce,0xb9,0x16,0x7e,0xcb,0xf5,0x29,0xbc,0x7a,0x41,0x4c,0xf1,0x07,0x34,0xab,0xa7,0xf4,0x2b,0xce,0x6b,0xb3,0xd4,0xce,0x75,0x9f,0x1a,0x56,0xe9,0xe2,0x7d,0xcb,0x5e,0xa5,0xb6,0xf4,0xd4,0x70,0xde,0x99,0xdb,0x85,0x5d,0x7f,0x52,0x01,0x48,0x81,0x9a,0xee,0xd3,0x40,0xc4,0xc9,0xdb,0xed,0x29,0x60,0x1a,0xaf,0x90,0x2a,0x6b}, - {0x97,0x1e,0xe6,0x9a,0xfc,0xf4,0x23,0x69,0xd1,0x5f,0x3f,0xe0,0x1d,0x28,0x35,0x57,0x2d,0xd1,0xed,0xe6,0x43,0xae,0x64,0xa7,0x4a,0x3e,0x2d,0xd1,0xe9,0xf4,0xd8,0x5f,0x0a,0xd8,0xb2,0x5b,0x24,0xf3,0xeb,0x77,0x9b,0x07,0xb9,0x2f,0x47,0x1b,0x30,0xd8,0x33,0x73,0xee,0x4c,0xf2,0xe6,0x47,0xc6,0x09,0x21,0x6c,0x27,0xc8,0x12,0x58,0x46,0xd9,0x62,0x10,0x2a,0xb2,0xbe,0x43,0x4d,0x16,0xdc,0x31,0x38,0x75,0xfb,0x65,0x70,0xd7,0x68,0x29,0xde,0x7b,0x4a,0x0d,0x18,0x90,0x67,0xb1,0x1c,0x2b,0x2c,0xb3,0x05}, - {0xfd,0xa8,0x4d,0xd2,0xcc,0x5e,0xc0,0xc8,0x83,0xef,0xdf,0x05,0xac,0x1a,0xcf,0xa1,0x61,0xcd,0xf9,0x7d,0xf2,0xef,0xbe,0xdb,0x99,0x1e,0x47,0x7b,0xa3,0x56,0x55,0x3b,0x95,0x81,0xd5,0x7a,0x2c,0xa4,0xfc,0xf7,0xcc,0xf3,0x33,0x43,0x6e,0x28,0x14,0x32,0x9d,0x97,0x0b,0x34,0x0d,0x9d,0xc2,0xb6,0xe1,0x07,0x73,0x56,0x48,0x1a,0x77,0x31,0x82,0xd4,0x4d,0xe1,0x24,0xc5,0xb0,0x32,0xb6,0xa4,0x2b,0x1a,0x54,0x51,0xb3,0xed,0xf3,0x5a,0x2b,0x28,0x48,0x60,0xd1,0xa3,0xeb,0x36,0x73,0x7a,0xd2,0x79,0xc0,0x4f}, - {0x7f,0x2f,0xbf,0x89,0xb0,0x38,0xc9,0x51,0xa7,0xe9,0xdf,0x02,0x65,0xbd,0x97,0x24,0x53,0xe4,0x80,0x78,0x9c,0xc0,0xff,0xff,0x92,0x8e,0xf9,0xca,0xce,0x67,0x45,0x12,0x0d,0xc5,0x86,0x0c,0x44,0x8b,0x34,0xdc,0x51,0xe6,0x94,0xcc,0xc9,0xcb,0x37,0x13,0xb9,0x3c,0x3e,0x64,0x4d,0xf7,0x22,0x64,0x08,0xcd,0xe3,0xba,0xc2,0x70,0x11,0x24,0xb4,0x73,0xc4,0x0a,0x86,0xab,0xf9,0x3f,0x35,0xe4,0x13,0x01,0xee,0x1d,0x91,0xf0,0xaf,0xc4,0xc6,0xeb,0x60,0x50,0xe7,0x4a,0x0d,0x00,0x87,0x6c,0x96,0x12,0x86,0x3f}, - {0xde,0x0d,0x2a,0x78,0xc9,0x0c,0x9a,0x55,0x85,0x83,0x71,0xea,0xb2,0xcd,0x1d,0x55,0x8c,0x23,0xef,0x31,0x5b,0x86,0x62,0x7f,0x3d,0x61,0x73,0x79,0x76,0xa7,0x4a,0x50,0x13,0x8d,0x04,0x36,0xfa,0xfc,0x18,0x9c,0xdd,0x9d,0x89,0x73,0xb3,0x9d,0x15,0x29,0xaa,0xd0,0x92,0x9f,0x0b,0x35,0x9f,0xdc,0xd4,0x19,0x8a,0x87,0xee,0x7e,0xf5,0x26,0xb1,0xef,0x87,0x56,0xd5,0x2c,0xab,0x0c,0x7b,0xf1,0x7a,0x24,0x62,0xd1,0x80,0x51,0x67,0x24,0x5a,0x4f,0x34,0x5a,0xc1,0x85,0x69,0x30,0xba,0x9d,0x3d,0x94,0x41,0x40}, - {0x96,0xcc,0xeb,0x43,0xba,0xee,0xc0,0xc3,0xaf,0x9c,0xea,0x26,0x9c,0x9c,0x74,0x8d,0xc6,0xcc,0x77,0x1c,0xee,0x95,0xfa,0xd9,0x0f,0x34,0x84,0x76,0xd9,0xa1,0x20,0x14,0xdd,0xaa,0x6c,0xa2,0x43,0x77,0x21,0x4b,0xce,0xb7,0x8a,0x64,0x24,0xb4,0xa6,0x47,0xe3,0xc9,0xfb,0x03,0x7a,0x4f,0x1d,0xcb,0x19,0xd0,0x00,0x98,0x42,0x31,0xd9,0x12,0x4f,0x59,0x37,0xd3,0x99,0x77,0xc6,0x00,0x7b,0xa4,0x3a,0xb2,0x40,0x51,0x3c,0x5e,0x95,0xf3,0x5f,0xe3,0x54,0x28,0x18,0x44,0x12,0xa0,0x59,0x43,0x31,0x92,0x4f,0x1b}, - {0x51,0x09,0x15,0x89,0x9d,0x10,0x5c,0x3e,0x6a,0x69,0xe9,0x2d,0x91,0xfa,0xce,0x39,0x20,0x30,0x5f,0x97,0x3f,0xe4,0xea,0x20,0xae,0x2d,0x13,0x7f,0x2a,0x57,0x9b,0x23,0xb1,0x66,0x98,0xa4,0x30,0x30,0xcf,0x33,0x59,0x48,0x5f,0x21,0xd2,0x73,0x1f,0x25,0xf6,0xf4,0xde,0x51,0x40,0xaa,0x82,0xab,0xf6,0x23,0x9a,0x6f,0xd5,0x91,0xf1,0x5f,0x68,0x90,0x2d,0xac,0x33,0xd4,0x9e,0x81,0x23,0x85,0xc9,0x5f,0x79,0xab,0x83,0x28,0x3d,0xeb,0x93,0x55,0x80,0x72,0x45,0xef,0xcb,0x36,0x8f,0x75,0x6a,0x52,0x0c,0x02}, - {0xbc,0xdb,0xd8,0x9e,0xf8,0x34,0x98,0x77,0x6c,0xa4,0x7c,0xdc,0xf9,0xaa,0xf2,0xc8,0x74,0xb0,0xe1,0xa3,0xdc,0x4c,0x52,0xa9,0x77,0x38,0x31,0x15,0x46,0xcc,0xaa,0x02,0x89,0xcc,0x42,0xf0,0x59,0xef,0x31,0xe9,0xb6,0x4b,0x12,0x8e,0x9d,0x9c,0x58,0x2c,0x97,0x59,0xc7,0xae,0x8a,0xe1,0xc8,0xad,0x0c,0xc5,0x02,0x56,0x0a,0xfe,0x2c,0x45,0xdf,0x77,0x78,0x64,0xa0,0xf7,0xa0,0x86,0x9f,0x7c,0x60,0x0e,0x27,0x64,0xc4,0xbb,0xc9,0x11,0xfb,0xf1,0x25,0xea,0x17,0xab,0x7b,0x87,0x4b,0x30,0x7b,0x7d,0xfb,0x4c}, - {0xfe,0x75,0x9b,0xb8,0x6c,0x3d,0xb4,0x72,0x80,0xdc,0x6a,0x9c,0xd9,0x94,0xc6,0x54,0x9f,0x4c,0xe3,0x3e,0x37,0xaa,0xc3,0xb8,0x64,0x53,0x07,0x39,0x2b,0x62,0xb4,0x14,0x12,0xef,0x89,0x97,0xc2,0x99,0x86,0xe2,0x0d,0x19,0x57,0xdf,0x71,0xcd,0x6e,0x2b,0xd0,0x70,0xc9,0xec,0x57,0xc8,0x43,0xc3,0xc5,0x3a,0x4d,0x43,0xbc,0x4c,0x1d,0x5b,0x26,0x9f,0x0a,0xcc,0x15,0x26,0xfb,0xb6,0xe5,0xcc,0x8d,0xb8,0x2b,0x0e,0x4f,0x3a,0x05,0xa7,0x69,0x33,0x8b,0x49,0x01,0x13,0xd1,0x2d,0x59,0x58,0x12,0xf7,0x98,0x2f}, - {0x56,0x9e,0x0f,0xb5,0x4c,0xa7,0x94,0x0c,0x20,0x13,0x8e,0x8e,0xa9,0xf4,0x1f,0x5b,0x67,0x0f,0x30,0x82,0x21,0xcc,0x2a,0x9a,0xf9,0xaa,0x06,0xd8,0x49,0xe2,0x6a,0x3a,0x01,0xa7,0x54,0x4f,0x44,0xae,0x12,0x2e,0xde,0xd7,0xcb,0xa9,0xf0,0x3e,0xfe,0xfc,0xe0,0x5d,0x83,0x75,0x0d,0x89,0xbf,0xce,0x54,0x45,0x61,0xe7,0xe9,0x62,0x80,0x1d,0x5a,0x7c,0x90,0xa9,0x85,0xda,0x7a,0x65,0x62,0x0f,0xb9,0x91,0xb5,0xa8,0x0e,0x1a,0xe9,0xb4,0x34,0xdf,0xfb,0x1d,0x0e,0x8d,0xf3,0x5f,0xf2,0xae,0xe8,0x8c,0x8b,0x29}, - {0xb2,0x0c,0xf7,0xef,0x53,0x79,0x92,0x2a,0x76,0x70,0x15,0x79,0x2a,0xc9,0x89,0x4b,0x6a,0xcf,0xa7,0x30,0x7a,0x45,0x18,0x94,0x85,0xe4,0x5c,0x4d,0x40,0xa8,0xb8,0x34,0xde,0x65,0x21,0x0a,0xea,0x72,0x7a,0x83,0xf6,0x79,0xcf,0x0b,0xb4,0x07,0xab,0x3f,0x70,0xae,0x38,0x77,0xc7,0x36,0x16,0x52,0xdc,0xd7,0xa7,0x03,0x18,0x27,0xa6,0x6b,0x35,0x33,0x69,0x83,0xb5,0xec,0x6e,0xc2,0xfd,0xfe,0xb5,0x63,0xdf,0x13,0xa8,0xd5,0x73,0x25,0xb2,0xa4,0x9a,0xaa,0x93,0xa2,0x6a,0x1c,0x5e,0x46,0xdd,0x2b,0xd6,0x71}, - {0x80,0xdf,0x78,0xd3,0x28,0xcc,0x33,0x65,0xb4,0xa4,0x0f,0x0a,0x79,0x43,0xdb,0xf6,0x5a,0xda,0x01,0xf7,0xf9,0x5f,0x64,0xe3,0xa4,0x2b,0x17,0xf3,0x17,0xf3,0xd5,0x74,0xf5,0x5e,0xf7,0xb1,0xda,0xb5,0x2d,0xcd,0xf5,0x65,0xb0,0x16,0xcf,0x95,0x7f,0xd7,0x85,0xf0,0x49,0x3f,0xea,0x1f,0x57,0x14,0x3d,0x2b,0x2b,0x26,0x21,0x36,0x33,0x1c,0x81,0xca,0xd9,0x67,0x54,0xe5,0x6f,0xa8,0x37,0x8c,0x29,0x2b,0x75,0x7c,0x8b,0x39,0x3b,0x62,0xac,0xe3,0x92,0x08,0x6d,0xda,0x8c,0xd9,0xe9,0x47,0x45,0xcc,0xeb,0x4a}, - {0xc9,0x01,0x6d,0x27,0x1b,0x07,0xf0,0x12,0x70,0x8c,0xc4,0x86,0xc5,0xba,0xb8,0xe7,0xa9,0xfb,0xd6,0x71,0x9b,0x12,0x08,0x53,0x92,0xb7,0x3d,0x5a,0xf9,0xfb,0x88,0x5d,0x10,0xb6,0x54,0x73,0x9e,0x8d,0x40,0x0b,0x6e,0x5b,0xa8,0x5b,0x53,0x32,0x6b,0x80,0x07,0xa2,0x58,0x4a,0x03,0x3a,0xe6,0xdb,0x2c,0xdf,0xa1,0xc9,0xdd,0xd9,0x3b,0x17,0xdf,0x72,0x58,0xfe,0x1e,0x0f,0x50,0x2b,0xc1,0x18,0x39,0xd4,0x2e,0x58,0xd6,0x58,0xe0,0x3a,0x67,0xc9,0x8e,0x27,0xed,0xe6,0x19,0xa3,0x9e,0xb1,0x13,0xcd,0xe1,0x06}, - {0x23,0x6f,0x16,0x6f,0x51,0xad,0xd0,0x40,0xbe,0x6a,0xab,0x1f,0x93,0x32,0x8e,0x11,0x8e,0x08,0x4d,0xa0,0x14,0x5e,0xe3,0x3f,0x66,0x62,0xe1,0x26,0x35,0x60,0x80,0x30,0x53,0x03,0x5b,0x9e,0x62,0xaf,0x2b,0x47,0x47,0x04,0x8d,0x27,0x90,0x0b,0xaa,0x3b,0x27,0xbf,0x43,0x96,0x46,0x5f,0x78,0x0c,0x13,0x7b,0x83,0x8d,0x1a,0x6a,0x3a,0x7f,0x0b,0x80,0x3d,0x5d,0x39,0x44,0xe6,0xf7,0xf6,0xed,0x01,0xc9,0x55,0xd5,0xa8,0x95,0x39,0x63,0x2c,0x59,0x30,0x78,0xcd,0x68,0x7e,0x30,0x51,0x2e,0xed,0xfd,0xd0,0x30}, - {0xb3,0x33,0x12,0xf2,0x1a,0x4d,0x59,0xe0,0x9c,0x4d,0xcc,0xf0,0x8e,0xe7,0xdb,0x1b,0x77,0x9a,0x49,0x8f,0x7f,0x18,0x65,0x69,0x68,0x98,0x09,0x2c,0x20,0x14,0x92,0x0a,0x50,0x47,0xb8,0x68,0x1e,0x97,0xb4,0x9c,0xcf,0xbb,0x64,0x66,0x29,0x72,0x95,0xa0,0x2b,0x41,0xfa,0x72,0x26,0xe7,0x8d,0x5c,0xd9,0x89,0xc5,0x51,0x43,0x08,0x15,0x46,0x2e,0xa0,0xb9,0xae,0xc0,0x19,0x90,0xbc,0xae,0x4c,0x03,0x16,0x0d,0x11,0xc7,0x55,0xec,0x32,0x99,0x65,0x01,0xf5,0x6d,0x0e,0xfe,0x5d,0xca,0x95,0x28,0x0d,0xca,0x3b}, - {0xa4,0x62,0x5d,0x3c,0xbc,0x31,0xf0,0x40,0x60,0x7a,0xf0,0xcf,0x3e,0x8b,0xfc,0x19,0x45,0xb5,0x0f,0x13,0xa2,0x3d,0x18,0x98,0xcd,0x13,0x8f,0xae,0xdd,0xde,0x31,0x56,0xbf,0x01,0xcc,0x9e,0xb6,0x8e,0x68,0x9c,0x6f,0x89,0x44,0xa6,0xad,0x83,0xbc,0xf0,0xe2,0x9f,0x7a,0x5f,0x5f,0x95,0x2d,0xca,0x41,0x82,0xf2,0x8d,0x03,0xb4,0xa8,0x4e,0x02,0xd2,0xca,0xf1,0x0a,0x46,0xed,0x2a,0x83,0xee,0x8c,0xa4,0x05,0x53,0x30,0x46,0x5f,0x1a,0xf1,0x49,0x45,0x77,0x21,0x91,0x63,0xa4,0x2c,0x54,0x30,0x09,0xce,0x24}, - {0x06,0xc1,0x06,0xfd,0xf5,0x90,0xe8,0x1f,0xf2,0x10,0x88,0x5d,0x35,0x68,0xc4,0xb5,0x3e,0xaf,0x8c,0x6e,0xfe,0x08,0x78,0x82,0x4b,0xd7,0x06,0x8a,0xc2,0xe3,0xd4,0x41,0x85,0x0b,0xf3,0xfd,0x55,0xa1,0xcf,0x3f,0xa4,0x2e,0x37,0x36,0x8e,0x16,0xf7,0xd2,0x44,0xf8,0x92,0x64,0xde,0x64,0xe0,0xb2,0x80,0x42,0x4f,0x32,0xa7,0x28,0x99,0x54,0x2e,0x1a,0xee,0x63,0xa7,0x32,0x6e,0xf2,0xea,0xfd,0x5f,0xd2,0xb7,0xe4,0x91,0xae,0x69,0x4d,0x7f,0xd1,0x3b,0xd3,0x3b,0xbc,0x6a,0xff,0xdc,0xc0,0xde,0x66,0x1b,0x49}, - {0xa7,0x32,0xea,0xc7,0x3d,0xb1,0xf5,0x98,0x98,0xdb,0x16,0x7e,0xcc,0xf8,0xd5,0xe3,0x47,0xd9,0xf8,0xcb,0x52,0xbf,0x0a,0xac,0xac,0xe4,0x5e,0xc8,0xd0,0x38,0xf3,0x08,0xa1,0x64,0xda,0xd0,0x8e,0x4a,0xf0,0x75,0x4b,0x28,0xe2,0x67,0xaf,0x2c,0x22,0xed,0xa4,0x7b,0x7b,0x1f,0x79,0xa3,0x34,0x82,0x67,0x8b,0x01,0xb7,0xb0,0xb8,0xf6,0x4c,0xbd,0x73,0x1a,0x99,0x21,0xa8,0x83,0xc3,0x7a,0x0c,0x32,0xdf,0x01,0xbc,0x27,0xab,0x63,0x70,0x77,0x84,0x1b,0x33,0x3d,0xc1,0x99,0x8a,0x07,0xeb,0x82,0x4a,0x0d,0x53}, - {0x25,0x48,0xf9,0xe1,0x30,0x36,0x4c,0x00,0x5a,0x53,0xab,0x8c,0x26,0x78,0x2d,0x7e,0x8b,0xff,0x84,0xcc,0x23,0x23,0x48,0xc7,0xb9,0x70,0x17,0x10,0x3f,0x75,0xea,0x65,0x9e,0xbf,0x9a,0x6c,0x45,0x73,0x69,0x6d,0x80,0xa8,0x00,0x49,0xfc,0xb2,0x7f,0x25,0x50,0xb8,0xcf,0xc8,0x12,0xf4,0xac,0x2b,0x5b,0xbd,0xbf,0x0c,0xe0,0xe7,0xb3,0x0d,0x63,0x63,0x09,0xe2,0x3e,0xfc,0x66,0x3d,0x6b,0xcb,0xb5,0x61,0x7f,0x2c,0xd6,0x81,0x1a,0x3b,0x44,0x13,0x42,0x04,0xbe,0x0f,0xdb,0xa1,0xe1,0x21,0x19,0xec,0xa4,0x02}, - {0xa2,0xb8,0x24,0x3b,0x9a,0x25,0xe6,0x5c,0xb8,0xa0,0xaf,0x45,0xcc,0x7a,0x57,0xb8,0x37,0x70,0xa0,0x8b,0xe8,0xe6,0xcb,0xcc,0xbf,0x09,0x78,0x12,0x51,0x3c,0x14,0x3d,0x5f,0x79,0xcf,0xf1,0x62,0x61,0xc8,0xf5,0xf2,0x57,0xee,0x26,0x19,0x86,0x8c,0x11,0x78,0x35,0x06,0x1c,0x85,0x24,0x21,0x17,0xcf,0x7f,0x06,0xec,0x5d,0x2b,0xd1,0x36,0x57,0x45,0x15,0x79,0x91,0x27,0x6d,0x12,0x0a,0x3a,0x78,0xfc,0x5c,0x8f,0xe4,0xd5,0xac,0x9b,0x17,0xdf,0xe8,0xb6,0xbd,0x36,0x59,0x28,0xa8,0x5b,0x88,0x17,0xf5,0x2e}, - {0xdc,0xae,0x58,0x8c,0x4e,0x97,0x37,0x46,0xa4,0x41,0xf0,0xab,0xfb,0x22,0xef,0xb9,0x8a,0x71,0x80,0xe9,0x56,0xd9,0x85,0xe1,0xa6,0xa8,0x43,0xb1,0xfa,0x78,0x1b,0x2f,0x51,0x2f,0x5b,0x30,0xfb,0xbf,0xee,0x96,0xb8,0x96,0x95,0x88,0xad,0x38,0xf9,0xd3,0x25,0xdd,0xd5,0x46,0xc7,0x2d,0xf5,0xf0,0x95,0x00,0x3a,0xbb,0x90,0x82,0x96,0x57,0x01,0xe1,0x20,0x0a,0x43,0xb8,0x1a,0xf7,0x47,0xec,0xf0,0x24,0x8d,0x65,0x93,0xf3,0xd1,0xee,0xe2,0x6e,0xa8,0x09,0x75,0xcf,0xe1,0xa3,0x2a,0xdc,0x35,0x3e,0xc4,0x7d}, - {0xc3,0xd9,0x7d,0x88,0x65,0x66,0x96,0x85,0x55,0x53,0xb0,0x4b,0x31,0x9b,0x0f,0xc9,0xb1,0x79,0x20,0xef,0xf8,0x8d,0xe0,0xc6,0x2f,0xc1,0x8c,0x75,0x16,0x20,0xf7,0x7e,0x18,0x97,0x3e,0x27,0x5c,0x2a,0x78,0x5a,0x94,0xfd,0x4e,0x5e,0x99,0xc6,0x76,0x35,0x3e,0x7d,0x23,0x1f,0x05,0xd8,0x2e,0x0f,0x99,0x0a,0xd5,0x82,0x1d,0xb8,0x4f,0x04,0xd9,0xe3,0x07,0xa9,0xc5,0x18,0xdf,0xc1,0x59,0x63,0x4c,0xce,0x1d,0x37,0xb3,0x57,0x49,0xbb,0x01,0xb2,0x34,0x45,0x70,0xca,0x2e,0xdd,0x30,0x9c,0x3f,0x82,0x79,0x7f}, - {0xe8,0x13,0xb5,0xa3,0x39,0xd2,0x34,0x83,0xd8,0xa8,0x1f,0xb9,0xd4,0x70,0x36,0xc1,0x33,0xbd,0x90,0xf5,0x36,0x41,0xb5,0x12,0xb4,0xd9,0x84,0xd7,0x73,0x03,0x4e,0x0a,0xba,0x87,0xf5,0x68,0xf0,0x1f,0x9c,0x6a,0xde,0xc8,0x50,0x00,0x4e,0x89,0x27,0x08,0xe7,0x5b,0xed,0x7d,0x55,0x99,0xbf,0x3c,0xf0,0xd6,0x06,0x1c,0x43,0xb0,0xa9,0x64,0x19,0x29,0x7d,0x5b,0xa1,0xd6,0xb3,0x2e,0x35,0x82,0x3a,0xd5,0xa0,0xf6,0xb4,0xb0,0x47,0x5d,0xa4,0x89,0x43,0xce,0x56,0x71,0x6c,0x34,0x18,0xce,0x0a,0x7d,0x1a,0x07}, - {0x0b,0xba,0x87,0xc8,0xaa,0x2d,0x07,0xd3,0xee,0x62,0xa5,0xbf,0x05,0x29,0x26,0x01,0x8b,0x76,0xef,0xc0,0x02,0x30,0x54,0xcf,0x9c,0x7e,0xea,0x46,0x71,0xcc,0x3b,0x2c,0x31,0x44,0xe1,0x20,0x52,0x35,0x0c,0xcc,0x41,0x51,0xb1,0x09,0x07,0x95,0x65,0x0d,0x36,0x5f,0x9d,0x20,0x1b,0x62,0xf5,0x9a,0xd3,0x55,0x77,0x61,0xf7,0xbc,0x69,0x7c,0x5f,0x29,0xe8,0x04,0xeb,0xd7,0xf0,0x07,0x7d,0xf3,0x50,0x2f,0x25,0x18,0xdb,0x10,0xd7,0x98,0x17,0x17,0xa3,0xa9,0x51,0xe9,0x1d,0xa5,0xac,0x22,0x73,0x9a,0x5a,0x6f}, - {0xc5,0xc6,0x41,0x2f,0x0c,0x00,0xa1,0x8b,0x9b,0xfb,0xfe,0x0c,0xc1,0x79,0x9f,0xc4,0x9f,0x1c,0xc5,0x3c,0x70,0x47,0xfa,0x4e,0xca,0xaf,0x47,0xe1,0xa2,0x21,0x4e,0x49,0xbe,0x44,0xd9,0xa3,0xeb,0xd4,0x29,0xe7,0x9e,0xaf,0x78,0x80,0x40,0x09,0x9e,0x8d,0x03,0x9c,0x86,0x47,0x7a,0x56,0x25,0x45,0x24,0x3b,0x8d,0xee,0x80,0x96,0xab,0x02,0x9a,0x0d,0xe5,0xdd,0x85,0x8a,0xa4,0xef,0x49,0xa2,0xb9,0x0f,0x4e,0x22,0x9a,0x21,0xd9,0xf6,0x1e,0xd9,0x1d,0x1f,0x09,0xfa,0x34,0xbb,0x46,0xea,0xcb,0x76,0x5d,0x6b}, - {0x94,0xd9,0x0c,0xec,0x6c,0x55,0x57,0x88,0xba,0x1d,0xd0,0x5c,0x6f,0xdc,0x72,0x64,0x77,0xb4,0x42,0x8f,0x14,0x69,0x01,0xaf,0x54,0x73,0x27,0x85,0xf6,0x33,0xe3,0x0a,0x22,0x25,0x78,0x1e,0x17,0x41,0xf9,0xe0,0xd3,0x36,0x69,0x03,0x74,0xae,0xe6,0xf1,0x46,0xc7,0xfc,0xd0,0xa2,0x3e,0x8b,0x40,0x3e,0x31,0xdd,0x03,0x9c,0x86,0xfb,0x16,0x62,0x09,0xb6,0x33,0x97,0x19,0x8e,0x28,0x33,0xe1,0xab,0xd8,0xb4,0x72,0xfc,0x24,0x3e,0xd0,0x91,0x09,0xed,0xf7,0x11,0x48,0x75,0xd0,0x70,0x8f,0x8b,0xe3,0x81,0x3f}, - {0xfe,0xaf,0xd9,0x7e,0xcc,0x0f,0x91,0x7f,0x4b,0x87,0x65,0x24,0xa1,0xb8,0x5c,0x54,0x04,0x47,0x0c,0x4b,0xd2,0x7e,0x39,0xa8,0x93,0x09,0xf5,0x04,0xc1,0x0f,0x51,0x50,0x24,0xc8,0x17,0x5f,0x35,0x7f,0xdb,0x0a,0xa4,0x99,0x42,0xd7,0xc3,0x23,0xb9,0x74,0xf7,0xea,0xf8,0xcb,0x8b,0x3e,0x7c,0xd5,0x3d,0xdc,0xde,0x4c,0xd3,0xe2,0xd3,0x0a,0x9d,0x24,0x6e,0x33,0xc5,0x0f,0x0c,0x6f,0xd9,0xcf,0x31,0xc3,0x19,0xde,0x5e,0x74,0x1c,0xfe,0xee,0x09,0x00,0xfd,0xd6,0xf2,0xbe,0x1e,0xfa,0xf0,0x8b,0x15,0x7c,0x12}, - {0xa2,0x79,0x98,0x2e,0x42,0x7c,0x19,0xf6,0x47,0x36,0xca,0x52,0xd4,0xdd,0x4a,0xa4,0xcb,0xac,0x4e,0x4b,0xc1,0x3f,0x41,0x9b,0x68,0x4f,0xef,0x07,0x7d,0xf8,0x4e,0x35,0x74,0xb9,0x51,0xae,0xc4,0x8f,0xa2,0xde,0x96,0xfe,0x4d,0x74,0xd3,0x73,0x99,0x1d,0xa8,0x48,0x38,0x87,0x0b,0x68,0x40,0x62,0x95,0xdf,0x67,0xd1,0x79,0x24,0xd8,0x4e,0x75,0xd9,0xc5,0x60,0x22,0xb5,0xe3,0xfe,0xb8,0xb0,0x41,0xeb,0xfc,0x2e,0x35,0x50,0x3c,0x65,0xf6,0xa9,0x30,0xac,0x08,0x88,0x6d,0x23,0x39,0x05,0xd2,0x92,0x2d,0x30}, - {0x3d,0x28,0xa4,0xbc,0xa2,0xc1,0x13,0x78,0xd9,0x3d,0x86,0xa1,0x91,0xf0,0x62,0xed,0x86,0xfa,0x68,0xc2,0xb8,0xbc,0xc7,0xae,0x4c,0xae,0x1c,0x6f,0xb7,0xd3,0xe5,0x10,0x77,0xf1,0xe0,0xe4,0xb6,0x6f,0xbc,0x2d,0x93,0x6a,0xbd,0xa4,0x29,0xbf,0xe1,0x04,0xe8,0xf6,0x7a,0x78,0xd4,0x66,0x19,0x5e,0x60,0xd0,0x26,0xb4,0x5e,0x5f,0xdc,0x0e,0x67,0x8e,0xda,0x53,0xd6,0xbf,0x53,0x54,0x41,0xf6,0xa9,0x24,0xec,0x1e,0xdc,0xe9,0x23,0x8a,0x57,0x03,0x3b,0x26,0x87,0xbf,0x72,0xba,0x1c,0x36,0x51,0x6c,0xb4,0x45}, - {0xa1,0x7f,0x4f,0x31,0xbf,0x2a,0x40,0xa9,0x50,0xf4,0x8c,0x8e,0xdc,0xf1,0x57,0xe2,0x84,0xbe,0xa8,0x23,0x4b,0xd5,0xbb,0x1d,0x3b,0x71,0xcb,0x6d,0xa3,0xbf,0x77,0x21,0xe4,0xe3,0x7f,0x8a,0xdd,0x4d,0x9d,0xce,0x30,0x0e,0x62,0x76,0x56,0x64,0x13,0xab,0x58,0x99,0x0e,0xb3,0x7b,0x4f,0x59,0x4b,0xdf,0x29,0x12,0x32,0xef,0x0a,0x1c,0x5c,0x8f,0xdb,0x79,0xfa,0xbc,0x1b,0x08,0x37,0xb3,0x59,0x5f,0xc2,0x1e,0x81,0x48,0x60,0x87,0x24,0x83,0x9c,0x65,0x76,0x7a,0x08,0xbb,0xb5,0x8a,0x7d,0x38,0x19,0xe6,0x4a}, - {0x2e,0xa3,0x44,0x53,0xaa,0xf6,0xdb,0x8d,0x78,0x40,0x1b,0xb4,0xb4,0xea,0x88,0x7d,0x60,0x0d,0x13,0x4a,0x97,0xeb,0xb0,0x5e,0x03,0x3e,0xbf,0x17,0x1b,0xd9,0x00,0x1a,0x83,0xfb,0x5b,0x98,0x44,0x7e,0x11,0x61,0x36,0x31,0x96,0x71,0x2a,0x46,0xe0,0xfc,0x4b,0x90,0x25,0xd4,0x48,0x34,0xac,0x83,0x64,0x3d,0xa4,0x5b,0xbe,0x5a,0x68,0x75,0xb2,0xf2,0x61,0xeb,0x33,0x09,0x96,0x6e,0x52,0x49,0xff,0xc9,0xa8,0x0f,0x3d,0x54,0x69,0x65,0xf6,0x7a,0x10,0x75,0x72,0xdf,0xaa,0xe6,0xb0,0x23,0xb6,0x29,0x55,0x13}, - {0x18,0xd5,0xd1,0xad,0xd7,0xdb,0xf0,0x18,0x11,0x1f,0xc1,0xcf,0x88,0x78,0x9f,0x97,0x9b,0x75,0x14,0x71,0xf0,0xe1,0x32,0x87,0x01,0x3a,0xca,0x65,0x1a,0xb8,0xb5,0x79,0xfe,0x83,0x2e,0xe2,0xbc,0x16,0xc7,0xf5,0xc1,0x85,0x09,0xe8,0x19,0xeb,0x2b,0xb4,0xae,0x4a,0x25,0x14,0x37,0xa6,0x9d,0xec,0x13,0xa6,0x90,0x15,0x05,0xea,0x72,0x59,0x11,0x78,0x8f,0xdc,0x20,0xac,0xd4,0x0f,0xa8,0x4f,0x4d,0xac,0x94,0xd2,0x9a,0x9a,0x34,0x04,0x36,0xb3,0x64,0x2d,0x1b,0xc0,0xdb,0x3b,0x5f,0x90,0x95,0x9c,0x7e,0x4f}, - {0x2e,0x30,0x81,0x57,0xbc,0x4b,0x67,0x62,0x0f,0xdc,0xad,0x89,0x39,0x0f,0x52,0xd8,0xc6,0xd9,0xfb,0x53,0xae,0x99,0x29,0x8c,0x4c,0x8e,0x63,0x2e,0xd9,0x3a,0x99,0x31,0xfe,0x99,0x52,0x35,0x3d,0x44,0xc8,0x71,0xd7,0xea,0xeb,0xdb,0x1c,0x3b,0xcd,0x8b,0x66,0x94,0xa4,0xf1,0x9e,0x49,0x92,0x80,0xc8,0xad,0x44,0xa1,0xc4,0xee,0x42,0x19,0x92,0x49,0x23,0xae,0x19,0x53,0xac,0x7d,0x92,0x3e,0xea,0x0c,0x91,0x3d,0x1b,0x2c,0x22,0x11,0x3c,0x25,0x94,0xe4,0x3c,0x55,0x75,0xca,0xf9,0x4e,0x31,0x65,0x0a,0x2a}, - {0xc2,0x27,0xf9,0xf7,0x7f,0x93,0xb7,0x2d,0x35,0xa6,0xd0,0x17,0x06,0x1f,0x74,0xdb,0x76,0xaf,0x55,0x11,0xa2,0xf3,0x82,0x59,0xed,0x2d,0x7c,0x64,0x18,0xe2,0xf6,0x4c,0x3a,0x79,0x1c,0x3c,0xcd,0x1a,0x36,0xcf,0x3b,0xbc,0x35,0x5a,0xac,0xbc,0x9e,0x2f,0xab,0xa6,0xcd,0xa8,0xe9,0x60,0xe8,0x60,0x13,0x1a,0xea,0x6d,0x9b,0xc3,0x5d,0x05,0xb6,0x5b,0x8d,0xc2,0x7c,0x22,0x19,0xb1,0xab,0xff,0x4d,0x77,0xbc,0x4e,0xe2,0x07,0x89,0x2c,0xa3,0xe4,0xce,0x78,0x3c,0xa8,0xb6,0x24,0xaa,0x10,0x77,0x30,0x1a,0x12}, - {0x97,0x4a,0x03,0x9f,0x5e,0x5d,0xdb,0xe4,0x2d,0xbc,0x34,0x30,0x09,0xfc,0x53,0xe1,0xb1,0xd3,0x51,0x95,0x91,0x46,0x05,0x46,0x2d,0xe5,0x40,0x7a,0x6c,0xc7,0x3f,0x33,0xc9,0x83,0x74,0xc7,0x3e,0x71,0x59,0xd6,0xaf,0x96,0x2b,0xb8,0x77,0xe0,0xbf,0x88,0xd3,0xbc,0x97,0x10,0x23,0x28,0x9e,0x28,0x9b,0x3a,0xed,0x6c,0x4a,0xb9,0x7b,0x52,0x2e,0x48,0x5b,0x99,0x2a,0x99,0x3d,0x56,0x01,0x38,0x38,0x6e,0x7c,0xd0,0x05,0x34,0xe5,0xd8,0x64,0x2f,0xde,0x35,0x50,0x48,0xf7,0xa9,0xa7,0x20,0x9b,0x06,0x89,0x6b}, - {0x0d,0x22,0x70,0x62,0x41,0xa0,0x2a,0x81,0x4e,0x5b,0x24,0xf9,0xfa,0x89,0x5a,0x99,0x05,0xef,0x72,0x50,0xce,0xc4,0xad,0xff,0x73,0xeb,0x73,0xaa,0x03,0x21,0xbc,0x23,0x77,0xdb,0xc7,0xb5,0x8c,0xfa,0x82,0x40,0x55,0xc1,0x34,0xc7,0xf8,0x86,0x86,0x06,0x7e,0xa5,0xe7,0xf6,0xd9,0xc8,0xe6,0x29,0xcf,0x9b,0x63,0xa7,0x08,0xd3,0x73,0x04,0x05,0x9e,0x58,0x03,0x26,0x79,0xee,0xca,0x92,0xc4,0xdc,0x46,0x12,0x42,0x4b,0x2b,0x4f,0xa9,0x01,0xe6,0x74,0xef,0xa1,0x02,0x1a,0x34,0x04,0xde,0xbf,0x73,0x2f,0x10}, - {0xc6,0x45,0x57,0x7f,0xab,0xb9,0x18,0xeb,0x90,0xc6,0x87,0x57,0xee,0x8a,0x3a,0x02,0xa9,0xaf,0xf7,0x2d,0xda,0x12,0x27,0xb7,0x3d,0x01,0x5c,0xea,0x25,0x7d,0x59,0x36,0x9a,0x1c,0x51,0xb5,0xe0,0xda,0xb4,0xa2,0x06,0xff,0xff,0x2b,0x29,0x60,0xc8,0x7a,0x34,0x42,0x50,0xf5,0x5d,0x37,0x1f,0x98,0x2d,0xa1,0x4e,0xda,0x25,0xd7,0x6b,0x3f,0xac,0x58,0x60,0x10,0x7b,0x8d,0x4d,0x73,0x5f,0x90,0xc6,0x6f,0x9e,0x57,0x40,0xd9,0x2d,0x93,0x02,0x92,0xf9,0xf8,0x66,0x64,0xd0,0xd6,0x60,0xda,0x19,0xcc,0x7e,0x7b}, - {0x0d,0x69,0x5c,0x69,0x3c,0x37,0xc2,0x78,0x6e,0x90,0x42,0x06,0x66,0x2e,0x25,0xdd,0xd2,0x2b,0xe1,0x4a,0x44,0x44,0x1d,0x95,0x56,0x39,0x74,0x01,0x76,0xad,0x35,0x42,0x9b,0xfa,0x7c,0xa7,0x51,0x4a,0xae,0x6d,0x50,0x86,0xa3,0xe7,0x54,0x36,0x26,0x82,0xdb,0x82,0x2d,0x8f,0xcd,0xff,0xbb,0x09,0xba,0xca,0xf5,0x1b,0x66,0xdc,0xbe,0x03,0xf5,0x75,0x89,0x07,0x0d,0xcb,0x58,0x62,0x98,0xf2,0x89,0x91,0x54,0x42,0x29,0x49,0xe4,0x6e,0xe3,0xe2,0x23,0xb4,0xca,0xa0,0xa1,0x66,0xf0,0xcd,0xb0,0xe2,0x7c,0x0e}, - {0xa3,0x85,0x8c,0xc4,0x3a,0x64,0x94,0xc4,0xad,0x39,0x61,0x3c,0xf4,0x1d,0x36,0xfd,0x48,0x4d,0xe9,0x3a,0xdd,0x17,0xdb,0x09,0x4a,0x67,0xb4,0x8f,0x5d,0x0a,0x6e,0x66,0xf9,0x70,0x4b,0xd9,0xdf,0xfe,0xa6,0xfe,0x2d,0xba,0xfc,0xc1,0x51,0xc0,0x30,0xf1,0x89,0xab,0x2f,0x7f,0x7e,0xd4,0x82,0x48,0xb5,0xee,0xec,0x8a,0x13,0x56,0x52,0x61,0x0d,0xcb,0x70,0x48,0x4e,0xf6,0xbb,0x2a,0x6b,0x8b,0x45,0xaa,0xf0,0xbc,0x65,0xcd,0x5d,0x98,0xe8,0x75,0xba,0x4e,0xbe,0x9a,0xe4,0xde,0x14,0xd5,0x10,0xc8,0x0b,0x7f}, - {0x6f,0x13,0xf4,0x26,0xa4,0x6b,0x00,0xb9,0x35,0x30,0xe0,0x57,0x9e,0x36,0x67,0x8d,0x28,0x3c,0x46,0x4f,0xd9,0xdf,0xc8,0xcb,0xf5,0xdb,0xee,0xf8,0xbc,0x8d,0x1f,0x0d,0xa0,0x13,0x72,0x73,0xad,0x9d,0xac,0x83,0x98,0x2e,0xf7,0x2e,0xba,0xf8,0xf6,0x9f,0x57,0x69,0xec,0x43,0xdd,0x2e,0x1e,0x31,0x75,0xab,0xc5,0xde,0x7d,0x90,0x3a,0x1d,0xdc,0x81,0xd0,0x3e,0x31,0x93,0x16,0xba,0x80,0x34,0x1b,0x85,0xad,0x9f,0x32,0x29,0xcb,0x21,0x03,0x03,0x3c,0x01,0x28,0x01,0xe3,0xfd,0x1b,0xa3,0x44,0x1b,0x01,0x00}, - {0x0c,0x6c,0xc6,0x3f,0x6c,0xa0,0xdf,0x3f,0xd2,0x0d,0xd6,0x4d,0x8e,0xe3,0x40,0x5d,0x71,0x4d,0x8e,0x26,0x38,0x8b,0xe3,0x7a,0xe1,0x57,0x83,0x6e,0x91,0x8d,0xc4,0x3a,0x5c,0xa7,0x0a,0x6a,0x69,0x1f,0x56,0x16,0x6a,0xbd,0x52,0x58,0x5c,0x72,0xbf,0xc1,0xad,0x66,0x79,0x9a,0x7f,0xdd,0xa8,0x11,0x26,0x10,0x85,0xd2,0xa2,0x88,0xd9,0x63,0x2e,0x23,0xbd,0xaf,0x53,0x07,0x12,0x00,0x83,0xf6,0xd8,0xfd,0xb8,0xce,0x2b,0xe9,0x91,0x2b,0xe7,0x84,0xb3,0x69,0x16,0xf8,0x66,0xa0,0x68,0x23,0x2b,0xd5,0xfa,0x33}, - {0x16,0x1e,0xe4,0xc5,0xc6,0x49,0x06,0x54,0x35,0x77,0x3f,0x33,0x30,0x64,0xf8,0x0a,0x46,0xe7,0x05,0xf3,0xd2,0xfc,0xac,0xb2,0xa7,0xdc,0x56,0xa2,0x29,0xf4,0xc0,0x16,0xe8,0xcf,0x22,0xc4,0xd0,0xc8,0x2c,0x8d,0xcb,0x3a,0xa1,0x05,0x7b,0x4f,0x2b,0x07,0x6f,0xa5,0xf6,0xec,0xe6,0xb6,0xfe,0xa3,0xe2,0x71,0x0a,0xb9,0xcc,0x55,0xc3,0x3c,0x31,0x91,0x3e,0x90,0x43,0x94,0xb6,0xe9,0xce,0x37,0x56,0x7a,0xcb,0x94,0xa4,0xb8,0x44,0x92,0xba,0xba,0xa4,0xd1,0x7c,0xc8,0x68,0x75,0xae,0x6b,0x42,0xaf,0x1e,0x63}, - {0x9f,0xfe,0x66,0xda,0x10,0x04,0xe9,0xb3,0xa6,0xe5,0x16,0x6c,0x52,0x4b,0xdd,0x85,0x83,0xbf,0xf9,0x1e,0x61,0x97,0x3d,0xbc,0xb5,0x19,0xa9,0x1e,0x8b,0x64,0x99,0x55,0xe8,0x0d,0x70,0xa3,0xb9,0x75,0xd9,0x47,0x52,0x05,0xf8,0xe2,0xfb,0xc5,0x80,0x72,0xe1,0x5d,0xe4,0x32,0x27,0x8f,0x65,0x53,0xb5,0x80,0x5f,0x66,0x7f,0x2c,0x1f,0x43,0x19,0x7b,0x8f,0x85,0x44,0x63,0x02,0xd6,0x4a,0x51,0xea,0xa1,0x2f,0x35,0xab,0x14,0xd7,0xa9,0x90,0x20,0x1a,0x44,0x00,0x89,0x26,0x3b,0x25,0x91,0x5f,0x71,0x04,0x7b}, - {0x43,0xae,0xf6,0xac,0x28,0xbd,0xed,0x83,0xb4,0x7a,0x5c,0x7d,0x8b,0x7c,0x35,0x86,0x44,0x2c,0xeb,0xb7,0x69,0x47,0x40,0xc0,0x3f,0x58,0xf6,0xc2,0xf5,0x7b,0xb3,0x59,0xc6,0xba,0xe6,0xc4,0x80,0xc2,0x76,0xb3,0x0b,0x9b,0x1d,0x6d,0xdd,0xd3,0x0e,0x97,0x44,0xf9,0x0b,0x45,0x58,0x95,0x9a,0xb0,0x23,0xe2,0xcd,0x57,0xfa,0xac,0xd0,0x48,0x71,0xe6,0xab,0x7d,0xe4,0x26,0x0f,0xb6,0x37,0x3a,0x2f,0x62,0x97,0xa1,0xd1,0xf1,0x94,0x03,0x96,0xe9,0x7e,0xce,0x08,0x42,0xdb,0x3b,0x6d,0x33,0x91,0x41,0x23,0x16}, - {0xf6,0x7f,0x26,0xf6,0xde,0x99,0xe4,0xb9,0x43,0x08,0x2c,0x74,0x7b,0xca,0x72,0x77,0xb1,0xf2,0xa4,0xe9,0x3f,0x15,0xa0,0x23,0x06,0x50,0xd0,0xd5,0xec,0xdf,0xdf,0x2c,0x40,0x86,0xf3,0x1f,0xd6,0x9c,0x49,0xdd,0xa0,0x25,0x36,0x06,0xc3,0x9b,0xcd,0x29,0xc3,0x3d,0xd7,0x3d,0x02,0xd8,0xe2,0x51,0x31,0x92,0x3b,0x20,0x7a,0x70,0x25,0x4a,0x6a,0xed,0xf6,0x53,0x8a,0x66,0xb7,0x2a,0xa1,0x70,0xd1,0x1d,0x58,0x42,0x42,0x30,0x61,0x01,0xe2,0x3a,0x4c,0x14,0x00,0x40,0xfc,0x49,0x8e,0x24,0x6d,0x89,0x21,0x57}, - {0xae,0x1b,0x18,0xfd,0x17,0x55,0x6e,0x0b,0xb4,0x63,0xb9,0x2b,0x9f,0x62,0x22,0x90,0x25,0x46,0x06,0x32,0xe9,0xbc,0x09,0x55,0xda,0x13,0x3c,0xf6,0x74,0xdd,0x8e,0x57,0x4e,0xda,0xd0,0xa1,0x91,0x50,0x5d,0x28,0x08,0x3e,0xfe,0xb5,0xa7,0x6f,0xaa,0x4b,0xb3,0x93,0x93,0xe1,0x7c,0x17,0xe5,0x63,0xfd,0x30,0xb0,0xc4,0xaf,0x35,0xc9,0x03,0x3d,0x0c,0x2b,0x49,0xc6,0x76,0x72,0x99,0xfc,0x05,0xe2,0xdf,0xc4,0xc2,0xcc,0x47,0x3c,0x3a,0x62,0xdd,0x84,0x9b,0xd2,0xdc,0xa2,0xc7,0x88,0x02,0x59,0xab,0xc2,0x3e}, - {0xb9,0x7b,0xd8,0xe4,0x7b,0xd2,0xa0,0xa1,0xed,0x1a,0x39,0x61,0xeb,0x4d,0x8b,0xa9,0x83,0x9b,0xcb,0x73,0xd0,0xdd,0xa0,0x99,0xce,0xca,0x0f,0x20,0x5a,0xc2,0xd5,0x2d,0xcb,0xd1,0x32,0xae,0x09,0x3a,0x21,0xa7,0xd5,0xc2,0xf5,0x40,0xdf,0x87,0x2b,0x0f,0x29,0xab,0x1e,0xe8,0xc6,0xa4,0xae,0x0b,0x5e,0xac,0xdb,0x6a,0x6c,0xf6,0x1b,0x0e,0x7e,0x88,0x2c,0x79,0xe9,0xd5,0xab,0xe2,0x5d,0x6d,0x92,0xcb,0x18,0x00,0x02,0x1a,0x1e,0x5f,0xae,0xba,0xcd,0x69,0xba,0xbf,0x5f,0x8f,0xe8,0x5a,0xb3,0x48,0x05,0x73}, - {0xee,0xb8,0xa8,0xcb,0xa3,0x51,0x35,0xc4,0x16,0x5f,0x11,0xb2,0x1d,0x6f,0xa2,0x65,0x50,0x38,0x8c,0xab,0x52,0x4f,0x0f,0x76,0xca,0xb8,0x1d,0x41,0x3b,0x44,0x43,0x30,0x34,0xe3,0xd6,0xa1,0x4b,0x09,0x5b,0x80,0x19,0x3f,0x35,0x09,0x77,0xf1,0x3e,0xbf,0x2b,0x70,0x22,0x06,0xcb,0x06,0x3f,0x42,0xdd,0x45,0x78,0xd8,0x77,0x22,0x5a,0x58,0x62,0x89,0xd4,0x33,0x82,0x5f,0x8a,0xa1,0x7f,0x25,0x78,0xec,0xb5,0xc4,0x98,0x66,0xff,0x41,0x3e,0x37,0xa5,0x6f,0x8e,0xa7,0x1f,0x98,0xef,0x50,0x89,0x27,0x56,0x76}, - {0xc0,0xc8,0x1f,0xd5,0x59,0xcf,0xc3,0x38,0xf2,0xb6,0x06,0x05,0xfd,0xd2,0xed,0x9b,0x8f,0x0e,0x57,0xab,0x9f,0x10,0xbf,0x26,0xa6,0x46,0xb8,0xc1,0xa8,0x60,0x41,0x3f,0x9d,0xcf,0x86,0xea,0xa3,0x73,0x70,0xe1,0xdc,0x5f,0x15,0x07,0xb7,0xfb,0x8c,0x3a,0x8e,0x8a,0x83,0x31,0xfc,0xe7,0x53,0x48,0x16,0xf6,0x13,0xb6,0x84,0xf4,0xbb,0x28,0x7c,0x6c,0x13,0x6f,0x5c,0x2f,0x61,0xf2,0xbe,0x11,0xdd,0xf6,0x07,0xd1,0xea,0xaf,0x33,0x6f,0xde,0x13,0xd2,0x9a,0x7e,0x52,0x5d,0xf7,0x88,0x81,0x35,0xcb,0x79,0x1e}, - {0xf1,0xe3,0xf7,0xee,0xc3,0x36,0x34,0x01,0xf8,0x10,0x9e,0xfe,0x7f,0x6a,0x8b,0x82,0xfc,0xde,0xf9,0xbc,0xe5,0x08,0xf9,0x7f,0x31,0x38,0x3b,0x3a,0x1b,0x95,0xd7,0x65,0x81,0x81,0xe0,0xf5,0xd8,0x53,0xe9,0x77,0xd9,0xde,0x9d,0x29,0x44,0x0c,0xa5,0x84,0xe5,0x25,0x45,0x86,0x0c,0x2d,0x6c,0xdc,0xf4,0xf2,0xd1,0x39,0x2d,0xb5,0x8a,0x47,0x59,0xd1,0x52,0x92,0xd3,0xa4,0xa6,0x66,0x07,0xc8,0x1a,0x87,0xbc,0xe1,0xdd,0xe5,0x6f,0xc9,0xc1,0xa6,0x40,0x6b,0x2c,0xb8,0x14,0x22,0x21,0x1a,0x41,0x7a,0xd8,0x16}, - {0x15,0x62,0x06,0x42,0x5a,0x7e,0xbd,0xb3,0xc1,0x24,0x5a,0x0c,0xcd,0xe3,0x9b,0x87,0xb7,0x94,0xf9,0xd6,0xb1,0x5d,0xc0,0x57,0xa6,0x8c,0xf3,0x65,0x81,0x7c,0xf8,0x28,0x83,0x05,0x4e,0xd5,0xe2,0xd5,0xa4,0xfb,0xfa,0x99,0xbd,0x2e,0xd7,0xaf,0x1f,0xe2,0x8f,0x77,0xe9,0x6e,0x73,0xc2,0x7a,0x49,0xde,0x6d,0x5a,0x7a,0x57,0x0b,0x99,0x1f,0xd6,0xf7,0xe8,0x1b,0xad,0x4e,0x34,0xa3,0x8f,0x79,0xea,0xac,0xeb,0x50,0x1e,0x7d,0x52,0xe0,0x0d,0x52,0x9e,0x56,0xc6,0x77,0x3e,0x6d,0x4d,0x53,0xe1,0x2f,0x88,0x45}, - {0xd6,0x83,0x79,0x75,0x5d,0x34,0x69,0x66,0xa6,0x11,0xaa,0x17,0x11,0xed,0xb6,0x62,0x8f,0x12,0x5e,0x98,0x57,0x18,0xdd,0x7d,0xdd,0xf6,0x26,0xf6,0xb8,0xe5,0x8f,0x68,0xe4,0x6f,0x3c,0x94,0x29,0x99,0xac,0xd8,0xa2,0x92,0x83,0xa3,0x61,0xf1,0xf9,0xb5,0xf3,0x9a,0xc8,0xbe,0x13,0xdb,0x99,0x26,0x74,0xf0,0x05,0xe4,0x3c,0x84,0xcf,0x7d,0xc0,0x32,0x47,0x4a,0x48,0xd6,0x90,0x6c,0x99,0x32,0x56,0xca,0xfd,0x43,0x21,0xd5,0xe1,0xc6,0x5d,0x91,0xc3,0x28,0xbe,0xb3,0x1b,0x19,0x27,0x73,0x7e,0x68,0x39,0x67}, - {0xa6,0x75,0x56,0x38,0x14,0x20,0x78,0xef,0xe8,0xa9,0xfd,0xaa,0x30,0x9f,0x64,0xa2,0xcb,0xa8,0xdf,0x5c,0x50,0xeb,0xd1,0x4c,0xb3,0xc0,0x4d,0x1d,0xba,0x5a,0x11,0x46,0xc0,0x1a,0x0c,0xc8,0x9d,0xcc,0x6d,0xa6,0x36,0xa4,0x38,0x1b,0xf4,0x5c,0xa0,0x97,0xc6,0xd7,0xdb,0x95,0xbe,0xf3,0xeb,0xa7,0xab,0x7d,0x7e,0x8d,0xf6,0xb8,0xa0,0x7d,0x76,0xda,0xb5,0xc3,0x53,0x19,0x0f,0xd4,0x9b,0x9e,0x11,0x21,0x73,0x6f,0xac,0x1d,0x60,0x59,0xb2,0xfe,0x21,0x60,0xcc,0x03,0x4b,0x4b,0x67,0x83,0x7e,0x88,0x5f,0x5a}, - {0x11,0x3d,0xa1,0x70,0xcf,0x01,0x63,0x8f,0xc4,0xd0,0x0d,0x35,0x15,0xb8,0xce,0xcf,0x7e,0xa4,0xbc,0xa4,0xd4,0x97,0x02,0xf7,0x34,0x14,0x4d,0xe4,0x56,0xb6,0x69,0x36,0xb9,0x43,0xa6,0xa0,0xd3,0x28,0x96,0x9e,0x64,0x20,0xc3,0xe6,0x00,0xcb,0xc3,0xb5,0x32,0xec,0x2d,0x7c,0x89,0x02,0x53,0x9b,0x0c,0xc7,0xd1,0xd5,0xe2,0x7a,0xe3,0x43,0x33,0xe1,0xa6,0xed,0x06,0x3f,0x7e,0x38,0xc0,0x3a,0xa1,0x99,0x51,0x1d,0x30,0x67,0x11,0x38,0x26,0x36,0xf8,0xd8,0x5a,0xbd,0xbe,0xe9,0xd5,0x4f,0xcd,0xe6,0x21,0x6a}, - {0x5f,0xe6,0x46,0x30,0x0a,0x17,0xc6,0xf1,0x24,0x35,0xd2,0x00,0x2a,0x2a,0x71,0x58,0x55,0xb7,0x82,0x8c,0x3c,0xbd,0xdb,0x69,0x57,0xff,0x95,0xa1,0xf1,0xf9,0x6b,0x58,0xe3,0xb2,0x99,0x66,0x12,0x29,0x41,0xef,0x01,0x13,0x8d,0x70,0x47,0x08,0xd3,0x71,0xbd,0xb0,0x82,0x11,0xd0,0x32,0x54,0x32,0x36,0x8b,0x1e,0x00,0x07,0x1b,0x37,0x45,0x0b,0x79,0xf8,0x5e,0x8d,0x08,0xdb,0xa6,0xe5,0x37,0x09,0x61,0xdc,0xf0,0x78,0x52,0xb8,0x6e,0xa1,0x61,0xd2,0x49,0x03,0xac,0x79,0x21,0xe5,0x90,0x37,0xb0,0xaf,0x0e}, - {0x2f,0x04,0x48,0x37,0xc1,0x55,0x05,0x96,0x11,0xaa,0x0b,0x82,0xe6,0x41,0x9a,0x21,0x0c,0x6d,0x48,0x73,0x38,0xf7,0x81,0x1c,0x61,0xc6,0x02,0x5a,0x67,0xcc,0x9a,0x30,0x1d,0xae,0x75,0x0f,0x5e,0x80,0x40,0x51,0x30,0xcc,0x62,0x26,0xe3,0xfb,0x02,0xec,0x6d,0x39,0x92,0xea,0x1e,0xdf,0xeb,0x2c,0xb3,0x5b,0x43,0xc5,0x44,0x33,0xae,0x44,0xee,0x43,0xa5,0xbb,0xb9,0x89,0xf2,0x9c,0x42,0x71,0xc9,0x5a,0x9d,0x0e,0x76,0xf3,0xaa,0x60,0x93,0x4f,0xc6,0xe5,0x82,0x1d,0x8f,0x67,0x94,0x7f,0x1b,0x22,0xd5,0x62}, - {0x6d,0x93,0xd0,0x18,0x9c,0x29,0x4c,0x52,0x0c,0x1a,0x0c,0x8a,0x6c,0xb5,0x6b,0xc8,0x31,0x86,0x4a,0xdb,0x2e,0x05,0x75,0xa3,0x62,0x45,0x75,0xbc,0xe4,0xfd,0x0e,0x5c,0x3c,0x7a,0xf7,0x3a,0x26,0xd4,0x85,0x75,0x4d,0x14,0xe9,0xfe,0x11,0x7b,0xae,0xdf,0x3d,0x19,0xf7,0x59,0x80,0x70,0x06,0xa5,0x37,0x20,0x92,0x83,0x53,0x9a,0xf2,0x14,0xf5,0xd7,0xb2,0x25,0xdc,0x7e,0x71,0xdf,0x40,0x30,0xb5,0x99,0xdb,0x70,0xf9,0x21,0x62,0x4c,0xed,0xc3,0xb7,0x34,0x92,0xda,0x3e,0x09,0xee,0x7b,0x5c,0x36,0x72,0x5e}, - {0x7f,0x21,0x71,0x45,0x07,0xfc,0x5b,0x57,0x5b,0xd9,0x94,0x06,0x5d,0x67,0x79,0x37,0x33,0x1e,0x19,0xf4,0xbb,0x37,0x0a,0x9a,0xbc,0xea,0xb4,0x47,0x4c,0x10,0xf1,0x77,0x3e,0xb3,0x08,0x2f,0x06,0x39,0x93,0x7d,0xbe,0x32,0x9f,0xdf,0xe5,0x59,0x96,0x5b,0xfd,0xbd,0x9e,0x1f,0xad,0x3d,0xff,0xac,0xb7,0x49,0x73,0xcb,0x55,0x05,0xb2,0x70,0x4c,0x2c,0x11,0x55,0xc5,0x13,0x51,0xbe,0xcd,0x1f,0x88,0x9a,0x3a,0x42,0x88,0x66,0x47,0x3b,0x50,0x5e,0x85,0x77,0x66,0x44,0x4a,0x40,0x06,0x4a,0x8f,0x39,0x34,0x0e}, - {0xe8,0xbd,0xce,0x3e,0xd9,0x22,0x7d,0xb6,0x07,0x2f,0x82,0x27,0x41,0xe8,0xb3,0x09,0x8d,0x6d,0x5b,0xb0,0x1f,0xa6,0x3f,0x74,0x72,0x23,0x36,0x8a,0x36,0x05,0x54,0x5e,0x28,0x19,0x4b,0x3e,0x09,0x0b,0x93,0x18,0x40,0xf6,0xf3,0x73,0x0e,0xe1,0xe3,0x7d,0x6f,0x5d,0x39,0x73,0xda,0x17,0x32,0xf4,0x3e,0x9c,0x37,0xca,0xd6,0xde,0x8a,0x6f,0x9a,0xb2,0xb7,0xfd,0x3d,0x12,0x40,0xe3,0x91,0xb2,0x1a,0xa2,0xe1,0x97,0x7b,0x48,0x9e,0x94,0xe6,0xfd,0x02,0x7d,0x96,0xf9,0x97,0xde,0xd3,0xc8,0x2e,0xe7,0x0d,0x78}, - {0xbc,0xe7,0x9a,0x08,0x45,0x85,0xe2,0x0a,0x06,0x4d,0x7f,0x1c,0xcf,0xde,0x8d,0x38,0xb8,0x11,0x48,0x0a,0x51,0x15,0xac,0x38,0xe4,0x8c,0x92,0x71,0xf6,0x8b,0xb2,0x0e,0x72,0x27,0xf4,0x00,0xf3,0xea,0x1f,0x67,0xaa,0x41,0x8c,0x2a,0x2a,0xeb,0x72,0x8f,0x92,0x32,0x37,0x97,0xd7,0x7f,0xa1,0x29,0xa6,0x87,0xb5,0x32,0xad,0xc6,0xef,0x1d,0xa7,0x95,0x51,0xef,0x1a,0xbe,0x5b,0xaf,0xed,0x15,0x7b,0x91,0x77,0x12,0x8c,0x14,0x2e,0xda,0xe5,0x7a,0xfb,0xf7,0x91,0x29,0x67,0x28,0xdd,0xf8,0x1b,0x20,0x7d,0x46}, - {0xad,0x4f,0xef,0x74,0x9a,0x91,0xfe,0x95,0xa2,0x08,0xa3,0xf6,0xec,0x7b,0x82,0x3a,0x01,0x7b,0xa4,0x09,0xd3,0x01,0x4e,0x96,0x97,0xc7,0xa3,0x5b,0x4f,0x3c,0xc4,0x71,0xa9,0xe7,0x7a,0x56,0xbd,0xf4,0x1e,0xbc,0xbd,0x98,0x44,0xd6,0xb2,0x4c,0x62,0x3f,0xc8,0x4e,0x1f,0x2c,0xd2,0x64,0x10,0xe4,0x01,0x40,0x38,0xba,0xa5,0xc5,0xf9,0x2e,0xcd,0x74,0x9e,0xfa,0xf6,0x6d,0xfd,0xb6,0x7a,0x26,0xaf,0xe4,0xbc,0x78,0x82,0xf1,0x0e,0x99,0xef,0xf1,0xd0,0xb3,0x55,0x82,0x93,0xf2,0xc5,0x90,0xa3,0x8c,0x75,0x5a}, - {0x95,0x24,0x46,0xd9,0x10,0x27,0xb7,0xa2,0x03,0x50,0x7d,0xd5,0xd2,0xc6,0xa8,0x3a,0xca,0x87,0xb4,0xa0,0xbf,0x00,0xd4,0xe3,0xec,0x72,0xeb,0xb3,0x44,0xe2,0xba,0x2d,0x94,0xdc,0x61,0x1d,0x8b,0x91,0xe0,0x8c,0x66,0x30,0x81,0x9a,0x46,0x36,0xed,0x8d,0xd3,0xaa,0xe8,0xaf,0x29,0xa8,0xe6,0xd4,0x3f,0xd4,0x39,0xf6,0x27,0x80,0x73,0x0a,0xcc,0xe1,0xff,0x57,0x2f,0x4a,0x0f,0x98,0x43,0x98,0x83,0xe1,0x0d,0x0d,0x67,0x00,0xfd,0x15,0xfb,0x49,0x4a,0x3f,0x5c,0x10,0x9c,0xa6,0x26,0x51,0x63,0xca,0x98,0x26}, - {0x78,0xba,0xb0,0x32,0x88,0x31,0x65,0xe7,0x8b,0xff,0x5c,0x92,0xf7,0x31,0x18,0x38,0xcc,0x1f,0x29,0xa0,0x91,0x1b,0xa8,0x08,0x07,0xeb,0xca,0x49,0xcc,0x3d,0xb4,0x1f,0x0e,0xd9,0x3d,0x5e,0x2f,0x70,0x3d,0x2e,0x86,0x53,0xd2,0xe4,0x18,0x09,0x3f,0x9e,0x6a,0xa9,0x4d,0x02,0xf6,0x3e,0x77,0x5e,0x32,0x33,0xfa,0x4a,0x0c,0x4b,0x00,0x3c,0x2b,0xb8,0xf4,0x06,0xac,0x46,0xa9,0x9a,0xf3,0xc4,0x06,0xa8,0xa5,0x84,0xa2,0x1c,0x87,0x47,0xcd,0xc6,0x5f,0x26,0xd3,0x3e,0x17,0xd2,0x1f,0xcd,0x01,0xfd,0x43,0x6b}, - {0x44,0xc5,0x97,0x46,0x4b,0x5d,0xa7,0xc7,0xbf,0xff,0x0f,0xdf,0x48,0xf8,0xfd,0x15,0x5a,0x78,0x46,0xaa,0xeb,0xb9,0x68,0x28,0x14,0xf7,0x52,0x5b,0x10,0xd7,0x68,0x5a,0xf3,0x0e,0x76,0x3e,0x58,0x42,0xc7,0xb5,0x90,0xb9,0x0a,0xee,0xb9,0x52,0xdc,0x75,0x3f,0x92,0x2b,0x07,0xc2,0x27,0x14,0xbf,0xf0,0xd9,0xf0,0x6f,0x2d,0x0b,0x42,0x73,0x06,0x1e,0x85,0x9e,0xcb,0xf6,0x2c,0xaf,0xc4,0x38,0x22,0xc6,0x13,0x39,0x59,0x8f,0x73,0xf3,0xfb,0x99,0x96,0xb8,0x8a,0xda,0x9e,0xbc,0x34,0xea,0x2f,0x63,0xb5,0x3d}, - {0xd8,0xd9,0x5d,0xf7,0x2b,0xee,0x6e,0xf4,0xa5,0x59,0x67,0x39,0xf6,0xb1,0x17,0x0d,0x73,0x72,0x9e,0x49,0x31,0xd1,0xf2,0x1b,0x13,0x5f,0xd7,0x49,0xdf,0x1a,0x32,0x04,0xd5,0x25,0x98,0x82,0xb1,0x90,0x49,0x2e,0x91,0x89,0x9a,0x3e,0x87,0xeb,0xea,0xed,0xf8,0x4a,0x70,0x4c,0x39,0x3d,0xf0,0xee,0x0e,0x2b,0xdf,0x95,0xa4,0x7e,0x19,0x59,0xae,0x5a,0xe5,0xe4,0x19,0x60,0xe1,0x04,0xe9,0x92,0x2f,0x7e,0x7a,0x43,0x7b,0xe7,0xa4,0x9a,0x15,0x6f,0xc1,0x2d,0xce,0xc7,0xc0,0x0c,0xd7,0xf4,0xc1,0xfd,0xea,0x45}, - {0x2b,0xd7,0x45,0x80,0x85,0x01,0x84,0x69,0x51,0x06,0x2f,0xcf,0xa2,0xfa,0x22,0x4c,0xc6,0x2d,0x22,0x6b,0x65,0x36,0x1a,0x94,0xde,0xda,0x62,0x03,0xc8,0xeb,0x5e,0x5a,0xed,0xb1,0xcc,0xcf,0x24,0x46,0x0e,0xb6,0x95,0x03,0x5c,0xbd,0x92,0xc2,0xdb,0x59,0xc9,0x81,0x04,0xdc,0x1d,0x9d,0xa0,0x31,0x40,0xd9,0x56,0x5d,0xea,0xce,0x73,0x3f,0xc6,0x8d,0x4e,0x0a,0xd1,0xbf,0xa7,0xb7,0x39,0xb3,0xc9,0x44,0x7e,0x00,0x57,0xbe,0xfa,0xae,0x57,0x15,0x7f,0x20,0xc1,0x60,0xdb,0x18,0x62,0x26,0x91,0x88,0x05,0x26}, - {0x04,0xff,0x60,0x83,0xa6,0x04,0xf7,0x59,0xf4,0xe6,0x61,0x76,0xde,0x3f,0xd9,0xc3,0x51,0x35,0x87,0x12,0x73,0x2a,0x1b,0x83,0x57,0x5d,0x61,0x4e,0x2e,0x0c,0xad,0x54,0x42,0xe5,0x76,0xc6,0x3c,0x8e,0x81,0x4c,0xad,0xcc,0xce,0x03,0x93,0x2c,0x42,0x5e,0x08,0x9f,0x12,0xb4,0xca,0xcc,0x07,0xec,0xb8,0x43,0x44,0xb2,0x10,0xfa,0xed,0x0d,0x2a,0x52,0x2b,0xb8,0xd5,0x67,0x3b,0xee,0xeb,0xc1,0xa5,0x9f,0x46,0x63,0xf1,0x36,0xd3,0x9f,0xc1,0x6e,0xf2,0xd2,0xb4,0xa5,0x08,0x94,0x7a,0xa7,0xba,0xb2,0xec,0x62}, - {0x3d,0x2b,0x15,0x61,0x52,0x79,0xed,0xe5,0xd1,0xd7,0xdd,0x0e,0x7d,0x35,0x62,0x49,0x71,0x4c,0x6b,0xb9,0xd0,0xc8,0x82,0x74,0xbe,0xd8,0x66,0xa9,0x19,0xf9,0x59,0x2e,0x74,0x28,0xb6,0xaf,0x36,0x28,0x07,0x92,0xa5,0x04,0xe1,0x79,0x85,0x5e,0xcd,0x5f,0x4a,0xa1,0x30,0xc6,0xad,0x01,0xad,0x5a,0x98,0x3f,0x66,0x75,0x50,0x3d,0x91,0x61,0xda,0x31,0x32,0x1a,0x36,0x2d,0xc6,0x0d,0x70,0x02,0x20,0x94,0x32,0x58,0x47,0xfa,0xce,0x94,0x95,0x3f,0x51,0x01,0xd8,0x02,0x5c,0x5d,0xc0,0x31,0xa1,0xc2,0xdb,0x3d}, - {0x4b,0xc5,0x5e,0xce,0xf9,0x0f,0xdc,0x9a,0x0d,0x13,0x2f,0x8c,0x6b,0x2a,0x9c,0x03,0x15,0x95,0xf8,0xf0,0xc7,0x07,0x80,0x02,0x6b,0xb3,0x04,0xac,0x14,0x83,0x96,0x78,0x14,0xbb,0x96,0x27,0xa2,0x57,0xaa,0xf3,0x21,0xda,0x07,0x9b,0xb7,0xba,0x3a,0x88,0x1c,0x39,0xa0,0x31,0x18,0xe2,0x4b,0xe5,0xf9,0x05,0x32,0xd8,0x38,0xfb,0xe7,0x5e,0x8e,0x6a,0x44,0x41,0xcb,0xfd,0x8d,0x53,0xf9,0x37,0x49,0x43,0xa9,0xfd,0xac,0xa5,0x78,0x8c,0x3c,0x26,0x8d,0x90,0xaf,0x46,0x09,0x0d,0xca,0x9b,0x3c,0x63,0xd0,0x61}, - {0x66,0x25,0xdb,0xff,0x35,0x49,0x74,0x63,0xbb,0x68,0x0b,0x78,0x89,0x6b,0xbd,0xc5,0x03,0xec,0x3e,0x55,0x80,0x32,0x1b,0x6f,0xf5,0xd7,0xae,0x47,0xd8,0x5f,0x96,0x6e,0xdf,0x73,0xfc,0xf8,0xbc,0x28,0xa3,0xad,0xfc,0x37,0xf0,0xa6,0x5d,0x69,0x84,0xee,0x09,0xa9,0xc2,0x38,0xdb,0xb4,0x7f,0x63,0xdc,0x7b,0x06,0xf8,0x2d,0xac,0x23,0x5b,0x7b,0x52,0x80,0xee,0x53,0xb9,0xd2,0x9a,0x8d,0x6d,0xde,0xfa,0xaa,0x19,0x8f,0xe8,0xcf,0x82,0x0e,0x15,0x04,0x17,0x71,0x0e,0xdc,0xde,0x95,0xdd,0xb9,0xbb,0xb9,0x79}, - {0xc2,0x26,0x31,0x6a,0x40,0x55,0xb3,0xeb,0x93,0xc3,0xc8,0x68,0xa8,0x83,0x63,0xd2,0x82,0x7a,0xb9,0xe5,0x29,0x64,0x0c,0x6c,0x47,0x21,0xfd,0xc9,0x58,0xf1,0x65,0x50,0x74,0x73,0x9f,0x8e,0xae,0x7d,0x99,0xd1,0x16,0x08,0xbb,0xcf,0xf8,0xa2,0x32,0xa0,0x0a,0x5f,0x44,0x6d,0x12,0xba,0x6c,0xcd,0x34,0xb8,0xcc,0x0a,0x46,0x11,0xa8,0x1b,0x54,0x99,0x42,0x0c,0xfb,0x69,0x81,0x70,0x67,0xcf,0x6e,0xd7,0xac,0x00,0x46,0xe1,0xba,0x45,0xe6,0x70,0x8a,0xb9,0xaa,0x2e,0xf2,0xfa,0xa4,0x58,0x9e,0xf3,0x81,0x39}, - {0x93,0x0a,0x23,0x59,0x75,0x8a,0xfb,0x18,0x5d,0xf4,0xe6,0x60,0x69,0x8f,0x16,0x1d,0xb5,0x3c,0xa9,0x14,0x45,0xa9,0x85,0x3a,0xfd,0xd0,0xac,0x05,0x37,0x08,0xdc,0x38,0xde,0x6f,0xe6,0x6d,0xa5,0xdf,0x45,0xc8,0x3a,0x48,0x40,0x2c,0x00,0xa5,0x52,0xe1,0x32,0xf6,0xb4,0xc7,0x63,0xe1,0xd2,0xe9,0x65,0x1b,0xbc,0xdc,0x2e,0x45,0xf4,0x30,0x40,0x97,0x75,0xc5,0x82,0x27,0x6d,0x85,0xcc,0xbe,0x9c,0xf9,0x69,0x45,0x13,0xfa,0x71,0x4e,0xea,0xc0,0x73,0xfc,0x44,0x88,0x69,0x24,0x3f,0x59,0x1a,0x9a,0x2d,0x63}, - {0xa6,0xcb,0x07,0xb8,0x15,0x6b,0xbb,0xf6,0xd7,0xf0,0x54,0xbc,0xdf,0xc7,0x23,0x18,0x0b,0x67,0x29,0x6e,0x03,0x97,0x1d,0xbb,0x57,0x4a,0xed,0x47,0x88,0xf4,0x24,0x0b,0xa7,0x84,0x0c,0xed,0x11,0xfd,0x09,0xbf,0x3a,0x69,0x9f,0x0d,0x81,0x71,0xf0,0x63,0x79,0x87,0xcf,0x57,0x2d,0x8c,0x90,0x21,0xa2,0x4b,0xf6,0x8a,0xf2,0x7d,0x5a,0x3a,0xc7,0xea,0x1b,0x51,0xbe,0xd4,0xda,0xdc,0xf2,0xcc,0x26,0xed,0x75,0x80,0x53,0xa4,0x65,0x9a,0x5f,0x00,0x9f,0xff,0x9c,0xe1,0x63,0x1f,0x48,0x75,0x44,0xf7,0xfc,0x34}, - {0xca,0x67,0x97,0x78,0x4c,0xe0,0x97,0xc1,0x7d,0x46,0xd9,0x38,0xcb,0x4d,0x71,0xb8,0xa8,0x5f,0xf9,0x83,0x82,0x88,0xde,0x55,0xf7,0x63,0xfa,0x4d,0x16,0xdc,0x3b,0x3d,0x98,0xaa,0xcf,0x78,0xab,0x1d,0xbb,0xa5,0xf2,0x72,0x0b,0x19,0x67,0xa2,0xed,0x5c,0x8e,0x60,0x92,0x0a,0x11,0xc9,0x09,0x93,0xb0,0x74,0xb3,0x2f,0x04,0xa3,0x19,0x01,0x7d,0x17,0xc2,0xe8,0x9c,0xd8,0xa2,0x67,0xc1,0xd0,0x95,0x68,0xf6,0xa5,0x9d,0x66,0xb0,0xa2,0x82,0xb2,0xe5,0x98,0x65,0xf5,0x73,0x0a,0xe2,0xed,0xf1,0x88,0xc0,0x56}, - {0x17,0x6e,0xa8,0x10,0x11,0x3d,0x6d,0x33,0xfa,0xb2,0x75,0x0b,0x32,0x88,0xf3,0xd7,0x88,0x29,0x07,0x25,0x76,0x33,0x15,0xf9,0x87,0x8b,0x10,0x99,0x6b,0x4c,0x67,0x09,0x02,0x8f,0xf3,0x24,0xac,0x5f,0x1b,0x58,0xbd,0x0c,0xe3,0xba,0xfe,0xe9,0x0b,0xa9,0xf0,0x92,0xcf,0x8a,0x02,0x69,0x21,0x9a,0x8f,0x03,0x59,0x83,0xa4,0x7e,0x8b,0x03,0xf8,0x6f,0x31,0x99,0x21,0xf8,0x4e,0x9f,0x4f,0x8d,0xa7,0xea,0x82,0xd2,0x49,0x2f,0x74,0x31,0xef,0x5a,0xab,0xa5,0x71,0x09,0x65,0xeb,0x69,0x59,0x02,0x31,0x5e,0x6e}, - {0xfb,0x93,0xe5,0x87,0xf5,0x62,0x6c,0xb1,0x71,0x3e,0x5d,0xca,0xde,0xed,0x99,0x49,0x6d,0x3e,0xcc,0x14,0xe0,0xc1,0x91,0xb4,0xa8,0xdb,0xa8,0x89,0x47,0x11,0xf5,0x08,0x22,0x62,0x06,0x63,0x0e,0xfb,0x04,0x33,0x3f,0xba,0xac,0x87,0x89,0x06,0x35,0xfb,0xa3,0x61,0x10,0x8c,0x77,0x24,0x19,0xbd,0x20,0x86,0x83,0xd1,0x43,0xad,0x58,0x30,0xd0,0x63,0x76,0xe5,0xfd,0x0f,0x3c,0x32,0x10,0xa6,0x2e,0xa2,0x38,0xdf,0xc3,0x05,0x9a,0x4f,0x99,0xac,0xbd,0x8a,0xc7,0xbd,0x99,0xdc,0xe3,0xef,0xa4,0x9f,0x54,0x26}, - {0xd6,0xf9,0x6b,0x1e,0x46,0x5a,0x1d,0x74,0x81,0xa5,0x77,0x77,0xfc,0xb3,0x05,0x23,0xd9,0xd3,0x74,0x64,0xa2,0x74,0x55,0xd4,0xff,0xe0,0x01,0x64,0xdc,0xe1,0x26,0x19,0x6e,0x66,0x3f,0xaf,0x49,0x85,0x46,0xdb,0xa5,0x0e,0x4a,0xf1,0x04,0xcf,0x7f,0xd7,0x47,0x0c,0xba,0xa4,0xf7,0x3f,0xf2,0x3d,0x85,0x3c,0xce,0x32,0xe1,0xdf,0x10,0x3a,0xa0,0xce,0x17,0xea,0x8a,0x4e,0x7f,0xe0,0xfd,0xc1,0x1f,0x3a,0x46,0x15,0xd5,0x2f,0xf1,0xc0,0xf2,0x31,0xfd,0x22,0x53,0x17,0x15,0x5d,0x1e,0x86,0x1d,0xd0,0xa1,0x1f}, - {0x32,0x98,0x59,0x7d,0x94,0x55,0x80,0xcc,0x20,0x55,0xf1,0x37,0xda,0x56,0x46,0x1e,0x20,0x93,0x05,0x4e,0x74,0xf7,0xf6,0x99,0x33,0xcf,0x75,0x6a,0xbc,0x63,0x35,0x77,0xab,0x94,0xdf,0xd1,0x00,0xac,0xdc,0x38,0xe9,0x0d,0x08,0xd1,0xdd,0x2b,0x71,0x2e,0x62,0xe2,0xd5,0xfd,0x3e,0xe9,0x13,0x7f,0xe5,0x01,0x9a,0xee,0x18,0xed,0xfc,0x73,0xb3,0x9c,0x13,0x63,0x08,0xe9,0xb1,0x06,0xcd,0x3e,0xa0,0xc5,0x67,0xda,0x93,0xa4,0x32,0x89,0x63,0xad,0xc8,0xce,0x77,0x8d,0x44,0x4f,0x86,0x1b,0x70,0x6b,0x42,0x1f}, - {0x01,0x1c,0x91,0x41,0x4c,0x26,0xc9,0xef,0x25,0x2c,0xa2,0x17,0xb8,0xb7,0xa3,0xf1,0x47,0x14,0x0f,0xf3,0x6b,0xda,0x75,0x58,0x90,0xb0,0x31,0x1d,0x27,0xf5,0x1a,0x4e,0x52,0x25,0xa1,0x91,0xc8,0x35,0x7e,0xf1,0x76,0x9c,0x5e,0x57,0x53,0x81,0x6b,0xb7,0x3e,0x72,0x9b,0x0d,0x6f,0x40,0x83,0xfa,0x38,0xe4,0xa7,0x3f,0x1b,0xbb,0x76,0x0b,0x9b,0x93,0x92,0x7f,0xf9,0xc1,0xb8,0x08,0x6e,0xab,0x44,0xd4,0xcb,0x71,0x67,0xbe,0x17,0x80,0xbb,0x99,0x63,0x64,0xe5,0x22,0x55,0xa9,0x72,0xb7,0x1e,0xd6,0x6d,0x7b}, - {0x92,0x3d,0xf3,0x50,0xe8,0xc1,0xad,0xb7,0xcf,0xd5,0x8c,0x60,0x4f,0xfa,0x98,0x79,0xdb,0x5b,0xfc,0x8d,0xbd,0x2d,0x96,0xad,0x4f,0x2f,0x1d,0xaf,0xce,0x9b,0x3e,0x70,0xc7,0xd2,0x01,0xab,0xf9,0xab,0x30,0x57,0x18,0x3b,0x14,0x40,0xdc,0x76,0xfb,0x16,0x81,0xb2,0xcb,0xa0,0x65,0xbe,0x6c,0x86,0xfe,0x6a,0xff,0x9b,0x65,0x9b,0xfa,0x53,0x55,0x54,0x88,0x94,0xe9,0xc8,0x14,0x6c,0xe5,0xd4,0xae,0x65,0x66,0x5d,0x3a,0x84,0xf1,0x5a,0xd6,0xbc,0x3e,0xb7,0x1b,0x18,0x50,0x1f,0xc6,0xc4,0xe5,0x93,0x8d,0x39}, - {0xf3,0x48,0xe2,0x33,0x67,0xd1,0x4b,0x1c,0x5f,0x0a,0xbf,0x15,0x87,0x12,0x9e,0xbd,0x76,0x03,0x0b,0xa1,0xf0,0x8c,0x3f,0xd4,0x13,0x1b,0x19,0xdf,0x5d,0x9b,0xb0,0x53,0xf2,0xe3,0xe7,0xd2,0x60,0x7c,0x87,0xc3,0xb1,0x8b,0x82,0x30,0xa0,0xaa,0x34,0x3b,0x38,0xf1,0x9e,0x73,0xe7,0x26,0x3e,0x28,0x77,0x05,0xc3,0x02,0x90,0x9c,0x9c,0x69,0xcc,0xf1,0x46,0x59,0x23,0xa7,0x06,0xf3,0x7d,0xd9,0xe5,0xcc,0xb5,0x18,0x17,0x92,0x75,0xe9,0xb4,0x81,0x47,0xd2,0xcd,0x28,0x07,0xd9,0xcd,0x6f,0x0c,0xf3,0xca,0x51}, - {0x0a,0xe0,0x74,0x76,0x42,0xa7,0x0b,0xa6,0xf3,0x7b,0x7a,0xa1,0x70,0x85,0x0e,0x63,0xcc,0x24,0x33,0xcf,0x3d,0x56,0x58,0x37,0xaa,0xfd,0x83,0x23,0x29,0xaa,0x04,0x55,0xc7,0x54,0xac,0x18,0x9a,0xf9,0x7a,0x73,0x0f,0xb3,0x1c,0xc5,0xdc,0x78,0x33,0x90,0xc7,0x0c,0xe1,0x4c,0x33,0xbc,0x89,0x2b,0x9a,0xe9,0xf8,0x89,0xc1,0x29,0xae,0x12,0xcf,0x01,0x0d,0x1f,0xcb,0xc0,0x9e,0xa9,0xae,0xf7,0x34,0x3a,0xcc,0xef,0xd1,0x0d,0x22,0x4e,0x9c,0xd0,0x21,0x75,0xca,0x55,0xea,0xa5,0xeb,0x58,0xe9,0x4f,0xd1,0x5f}, - {0x2c,0xab,0x45,0x28,0xdf,0x2d,0xdc,0xb5,0x93,0xe9,0x7f,0x0a,0xb1,0x91,0x94,0x06,0x46,0xe3,0x02,0x40,0xd6,0xf3,0xaa,0x4d,0xd1,0x74,0x64,0x58,0x6e,0xf2,0x3f,0x09,0x8e,0xcb,0x93,0xbf,0x5e,0xfe,0x42,0x3c,0x5f,0x56,0xd4,0x36,0x51,0xa8,0xdf,0xbe,0xe8,0x20,0x42,0x88,0x9e,0x85,0xf0,0xe0,0x28,0xd1,0x25,0x07,0x96,0x3f,0xd7,0x7d,0x29,0x98,0x05,0x68,0xfe,0x24,0x0d,0xb1,0xe5,0x23,0xaf,0xdb,0x72,0x06,0x73,0x75,0x29,0xac,0x57,0xb4,0x3a,0x25,0x67,0x13,0xa4,0x70,0xb4,0x86,0xbc,0xbc,0x59,0x2f}, - {0x5f,0x13,0x17,0x99,0x42,0x7d,0x84,0x83,0xd7,0x03,0x7d,0x56,0x1f,0x91,0x1b,0xad,0xd1,0xaa,0x77,0xbe,0xd9,0x48,0x77,0x7e,0x4a,0xaf,0x51,0x2e,0x2e,0xb4,0x58,0x54,0x01,0xc3,0x91,0xb6,0x60,0xd5,0x41,0x70,0x1e,0xe7,0xd7,0xad,0x3f,0x1b,0x20,0x85,0x85,0x55,0x33,0x11,0x63,0xe1,0xc2,0x16,0xb1,0x28,0x08,0x01,0x3d,0x5e,0xa5,0x2a,0x4f,0x44,0x07,0x0c,0xe6,0x92,0x51,0xed,0x10,0x1d,0x42,0x74,0x2d,0x4e,0xc5,0x42,0x64,0xc8,0xb5,0xfd,0x82,0x4c,0x2b,0x35,0x64,0x86,0x76,0x8a,0x4a,0x00,0xe9,0x13}, - {0xdb,0xce,0x2f,0x83,0x45,0x88,0x9d,0x73,0x63,0xf8,0x6b,0xae,0xc9,0xd6,0x38,0xfa,0xf7,0xfe,0x4f,0xb7,0xca,0x0d,0xbc,0x32,0x5e,0xe4,0xbc,0x14,0x88,0x7e,0x93,0x73,0x7f,0x87,0x3b,0x19,0xc9,0x00,0x2e,0xbb,0x6b,0x50,0xdc,0xe0,0x90,0xa8,0xe3,0xec,0x9f,0x64,0xde,0x36,0xc0,0xb7,0xf3,0xec,0x1a,0x9e,0xde,0x98,0x08,0x04,0x46,0x5f,0x8d,0xf4,0x7b,0x29,0x16,0x71,0x03,0xb9,0x34,0x68,0xf0,0xd4,0x22,0x3b,0xd1,0xa9,0xc6,0xbd,0x96,0x46,0x57,0x15,0x97,0xe1,0x35,0xe8,0xd5,0x91,0xe8,0xa4,0xf8,0x2c}, - {0x67,0x0f,0x11,0x07,0x87,0xfd,0x93,0x6d,0x49,0xb5,0x38,0x7c,0xd3,0x09,0x4c,0xdd,0x86,0x6a,0x73,0xc2,0x4c,0x6a,0xb1,0x7c,0x09,0x2a,0x25,0x58,0x6e,0xbd,0x49,0x20,0xa2,0x6b,0xd0,0x17,0x7e,0x48,0xb5,0x2c,0x6b,0x19,0x50,0x39,0x1c,0x38,0xd2,0x24,0x30,0x8a,0x97,0x85,0x81,0x9c,0x65,0xd7,0xf6,0xa4,0xd6,0x91,0x28,0x7f,0x6f,0x7a,0x49,0xef,0x9a,0x6a,0x8d,0xfd,0x09,0x7d,0x0b,0xb9,0x3d,0x5b,0xbe,0x60,0xee,0xf0,0xd4,0xbf,0x9e,0x51,0x2c,0xb5,0x21,0x4c,0x1d,0x94,0x45,0xc5,0xdf,0xaa,0x11,0x60}, - {0x3c,0xf8,0x95,0xcf,0x6d,0x92,0x67,0x5f,0x71,0x90,0x28,0x71,0x61,0x85,0x7e,0x7c,0x5b,0x7a,0x8f,0x99,0xf3,0xe7,0xa1,0xd6,0xe0,0xf9,0x62,0x0b,0x1b,0xcc,0xc5,0x6f,0x90,0xf8,0xcb,0x02,0xc8,0xd0,0xde,0x63,0xaa,0x6a,0xff,0x0d,0xca,0x98,0xd0,0xfb,0x99,0xed,0xb6,0xb9,0xfd,0x0a,0x4d,0x62,0x1e,0x0b,0x34,0x79,0xb7,0x18,0xce,0x69,0xcb,0x79,0x98,0xb2,0x28,0x55,0xef,0xd1,0x92,0x90,0x7e,0xd4,0x3c,0xae,0x1a,0xdd,0x52,0x23,0x9f,0x18,0x42,0x04,0x7e,0x12,0xf1,0x01,0x71,0xe5,0x3a,0x6b,0x59,0x15}, - {0xa2,0x79,0x91,0x3f,0xd2,0x39,0x27,0x46,0xcf,0xdd,0xd6,0x97,0x31,0x12,0x83,0xff,0x8a,0x14,0xf2,0x53,0xb5,0xde,0x07,0x13,0xda,0x4d,0x5f,0x7b,0x68,0x37,0x22,0x0d,0xca,0x24,0x51,0x7e,0x16,0x31,0xff,0x09,0xdf,0x45,0xc7,0xd9,0x8b,0x15,0xe4,0x0b,0xe5,0x56,0xf5,0x7e,0x22,0x7d,0x2b,0x29,0x38,0xd1,0xb6,0xaf,0x41,0xe2,0xa4,0x3a,0xf5,0x05,0x33,0x2a,0xbf,0x38,0xc1,0x2c,0xc3,0x26,0xe9,0xa2,0x8f,0x3f,0x58,0x48,0xeb,0xd2,0x49,0x55,0xa2,0xb1,0x3a,0x08,0x6c,0xa3,0x87,0x46,0x6e,0xaa,0xfc,0x32}, - {0xf5,0x9a,0x7d,0xc5,0x8d,0x6e,0xc5,0x7b,0xf2,0xbd,0xf0,0x9d,0xed,0xd2,0x0b,0x3e,0xa3,0xe4,0xef,0x22,0xde,0x14,0xc0,0xaa,0x5c,0x6a,0xbd,0xfe,0xce,0xe9,0x27,0x46,0xdf,0xcc,0x87,0x27,0x73,0xa4,0x07,0x32,0xf8,0xe3,0x13,0xf2,0x08,0x19,0xe3,0x17,0x4e,0x96,0x0d,0xf6,0xd7,0xec,0xb2,0xd5,0xe9,0x0b,0x60,0xc2,0x36,0x63,0x6f,0x74,0x1c,0x97,0x6c,0xab,0x45,0xf3,0x4a,0x3f,0x1f,0x73,0x43,0x99,0x72,0xeb,0x88,0xe2,0x6d,0x18,0x44,0x03,0x8a,0x6a,0x59,0x33,0x93,0x62,0xd6,0x7e,0x00,0x17,0x49,0x7b}, - {0x64,0xb0,0x84,0xab,0x5c,0xfb,0x85,0x2d,0x14,0xbc,0xf3,0x89,0xd2,0x10,0x78,0x49,0x0c,0xce,0x15,0x7b,0x44,0xdc,0x6a,0x47,0x7b,0xfd,0x44,0xf8,0x76,0xa3,0x2b,0x12,0xdd,0xa2,0x53,0xdd,0x28,0x1b,0x34,0x54,0x3f,0xfc,0x42,0xdf,0x5b,0x90,0x17,0xaa,0xf4,0xf8,0xd2,0x4d,0xd9,0x92,0xf5,0x0f,0x7d,0xd3,0x8c,0xe0,0x0f,0x62,0x03,0x1d,0x54,0xe5,0xb4,0xa2,0xcd,0x32,0x02,0xc2,0x7f,0x18,0x5d,0x11,0x42,0xfd,0xd0,0x9e,0xd9,0x79,0xd4,0x7d,0xbe,0xb4,0xab,0x2e,0x4c,0xec,0x68,0x2b,0xf5,0x0b,0xc7,0x02}, - {0xbb,0x2f,0x0b,0x5d,0x4b,0xec,0x87,0xa2,0xca,0x82,0x48,0x07,0x90,0x57,0x5c,0x41,0x5c,0x81,0xd0,0xc1,0x1e,0xa6,0x44,0xe0,0xe0,0xf5,0x9e,0x40,0x0a,0x4f,0x33,0x26,0xe1,0x72,0x8d,0x45,0xbf,0x32,0xe5,0xac,0xb5,0x3c,0xb7,0x7c,0xe0,0x68,0xe7,0x5b,0xe7,0xbd,0x8b,0xee,0x94,0x7d,0xcf,0x56,0x03,0x3a,0xb4,0xfe,0xe3,0x97,0x06,0x6b,0xc0,0xa3,0x62,0xdf,0x4a,0xf0,0xc8,0xb6,0x5d,0xa4,0x6d,0x07,0xef,0x00,0xf0,0x3e,0xa9,0xd2,0xf0,0x49,0x58,0xb9,0x9c,0x9c,0xae,0x2f,0x1b,0x44,0x43,0x7f,0xc3,0x1c}, - {0x4f,0x32,0xc7,0x5c,0x5a,0x56,0x8f,0x50,0x22,0xa9,0x06,0xe5,0xc0,0xc4,0x61,0xd0,0x19,0xac,0x45,0x5c,0xdb,0xab,0x18,0xfb,0x4a,0x31,0x80,0x03,0xc1,0x09,0x68,0x6c,0xb9,0xae,0xce,0xc9,0xf1,0x56,0x66,0xd7,0x6a,0x65,0xe5,0x18,0xf8,0x15,0x5b,0x1c,0x34,0x23,0x4c,0x84,0x32,0x28,0xe7,0x26,0x38,0x68,0x19,0x2f,0x77,0x6f,0x34,0x3a,0xc8,0x6a,0xda,0xe2,0x12,0x51,0xd5,0xd2,0xed,0x51,0xe8,0xb1,0x31,0x03,0xbd,0xe9,0x62,0x72,0xc6,0x8e,0xdd,0x46,0x07,0x96,0xd0,0xc5,0xf7,0x6e,0x9f,0x1b,0x91,0x05}, - {0xbb,0x0e,0xdf,0xf5,0x83,0x99,0x33,0xc1,0xac,0x4c,0x2c,0x51,0x8f,0x75,0xf3,0xc0,0xe1,0x98,0xb3,0x0b,0x0a,0x13,0xf1,0x2c,0x62,0x0c,0x27,0xaa,0xf9,0xec,0x3c,0x6b,0xef,0xea,0x2e,0x51,0xf3,0xac,0x49,0x53,0x49,0xcb,0xc1,0x1c,0xd3,0x41,0xc1,0x20,0x8d,0x68,0x9a,0xa9,0x07,0x0c,0x18,0x24,0x17,0x2d,0x4b,0xc6,0xd1,0xf9,0x5e,0x55,0x08,0xbd,0x73,0x3b,0xba,0x70,0xa7,0x36,0x0c,0xbf,0xaf,0xa3,0x08,0xef,0x4a,0x62,0xf2,0x46,0x09,0xb4,0x98,0xff,0x37,0x57,0x9d,0x74,0x81,0x33,0xe1,0x4d,0x5f,0x67}, - {0xfc,0x82,0x17,0x6b,0x03,0x52,0x2c,0x0e,0xb4,0x83,0xad,0x6c,0x81,0x6c,0x81,0x64,0x3e,0x07,0x64,0x69,0xd9,0xbd,0xdc,0xd0,0x20,0xc5,0x64,0x01,0xf7,0x9d,0xd9,0x13,0x1d,0xb3,0xda,0x3b,0xd9,0xf6,0x2f,0xa1,0xfe,0x2d,0x65,0x9d,0x0f,0xd8,0x25,0x07,0x87,0x94,0xbe,0x9a,0xf3,0x4f,0x9c,0x01,0x43,0x3c,0xcd,0x82,0xb8,0x50,0xf4,0x60,0xca,0xc0,0xe5,0x21,0xc3,0x5e,0x4b,0x01,0xa2,0xbf,0x19,0xd7,0xc9,0x69,0xcb,0x4f,0xa0,0x23,0x00,0x75,0x18,0x1c,0x5f,0x4e,0x80,0xac,0xed,0x55,0x9e,0xde,0x06,0x1c}, - {0xe2,0xc4,0x3e,0xa3,0xd6,0x7a,0x0f,0x99,0x8e,0xe0,0x2e,0xbe,0x38,0xf9,0x08,0x66,0x15,0x45,0x28,0x63,0xc5,0x43,0xa1,0x9c,0x0d,0xb6,0x2d,0xec,0x1f,0x8a,0xf3,0x4c,0xaa,0x69,0x6d,0xff,0x40,0x2b,0xd5,0xff,0xbb,0x49,0x40,0xdc,0x18,0x0b,0x53,0x34,0x97,0x98,0x4d,0xa3,0x2f,0x5c,0x4a,0x5e,0x2d,0xba,0x32,0x7d,0x8e,0x6f,0x09,0x78,0xe7,0x5c,0xfa,0x0d,0x65,0xaa,0xaa,0xa0,0x8c,0x47,0xb5,0x48,0x2a,0x9e,0xc4,0xf9,0x5b,0x72,0x03,0x70,0x7d,0xcc,0x09,0x4f,0xbe,0x1a,0x09,0x26,0x3a,0xad,0x3c,0x37}, - {0x7c,0xf5,0xc9,0x82,0x4d,0x63,0x94,0xb2,0x36,0x45,0x93,0x24,0xe1,0xfd,0xcb,0x1f,0x5a,0xdb,0x8c,0x41,0xb3,0x4d,0x9c,0x9e,0xfc,0x19,0x44,0x45,0xd9,0xf3,0x40,0x00,0xad,0xbb,0xdd,0x89,0xfb,0xa8,0xbe,0xf1,0xcb,0xae,0xae,0x61,0xbc,0x2c,0xcb,0x3b,0x9d,0x8d,0x9b,0x1f,0xbb,0xa7,0x58,0x8f,0x86,0xa6,0x12,0x51,0xda,0x7e,0x54,0x21,0xd3,0x86,0x59,0xfd,0x39,0xe9,0xfd,0xde,0x0c,0x38,0x0a,0x51,0x89,0x2c,0x27,0xf4,0xb9,0x19,0x31,0xbb,0x07,0xa4,0x2b,0xb7,0xf4,0x4d,0x25,0x4a,0x33,0x0a,0x55,0x63}, - {0x37,0xcf,0x69,0xb5,0xed,0xd6,0x07,0x65,0xe1,0x2e,0xa5,0x0c,0xb0,0x29,0x84,0x17,0x5d,0xd6,0x6b,0xeb,0x90,0x00,0x7c,0xea,0x51,0x8f,0xf7,0xda,0xc7,0x62,0xea,0x3e,0x49,0x7b,0x54,0x72,0x45,0x58,0xba,0x9b,0xe0,0x08,0xc4,0xe2,0xfa,0xc6,0x05,0xf3,0x8d,0xf1,0x34,0xc7,0x69,0xfa,0xe8,0x60,0x7a,0x76,0x7d,0xaa,0xaf,0x2b,0xa9,0x39,0x4e,0x27,0x93,0xe6,0x13,0xc7,0x24,0x9d,0x75,0xd3,0xdb,0x68,0x77,0x85,0x63,0x5f,0x9a,0xb3,0x8a,0xeb,0x60,0x55,0x52,0x70,0xcd,0xc4,0xc9,0x65,0x06,0x6a,0x43,0x68}, - {0x27,0x3f,0x2f,0x20,0xe8,0x35,0x02,0xbc,0xb0,0x75,0xf9,0x64,0xe2,0x00,0x5c,0xc7,0x16,0x24,0x8c,0xa3,0xd5,0xe9,0xa4,0x91,0xf9,0x89,0xb7,0x8a,0xf6,0xe7,0xb6,0x17,0x7c,0x10,0x20,0xe8,0x17,0xd3,0x56,0x1e,0x65,0xe9,0x0a,0x84,0x44,0x68,0x26,0xc5,0x7a,0xfc,0x0f,0x32,0xc6,0xa1,0xe0,0xc1,0x72,0x14,0x61,0x91,0x9c,0x66,0x73,0x53,0x57,0x52,0x0e,0x9a,0xab,0x14,0x28,0x5d,0xfc,0xb3,0xca,0xc9,0x84,0x20,0x8f,0x90,0xca,0x1e,0x2d,0x5b,0x88,0xf5,0xca,0xaf,0x11,0x7d,0xf8,0x78,0xa6,0xb5,0xb4,0x1c}, - {0x6c,0xfc,0x4a,0x39,0x6b,0xc0,0x64,0xb6,0xb1,0x5f,0xda,0x98,0x24,0xde,0x88,0x0c,0x34,0xd8,0xca,0x4b,0x16,0x03,0x8d,0x4f,0xa2,0x34,0x74,0xde,0x78,0xca,0x0b,0x33,0xe7,0x07,0xa0,0xa2,0x62,0xaa,0x74,0x6b,0xb1,0xc7,0x71,0xf0,0xb0,0xe0,0x11,0xf3,0x23,0xe2,0x0b,0x00,0x38,0xe4,0x07,0x57,0xac,0x6e,0xef,0x82,0x2d,0xfd,0xc0,0x2d,0x4e,0x74,0x19,0x11,0x84,0xff,0x2e,0x98,0x24,0x47,0x07,0x2b,0x96,0x5e,0x69,0xf9,0xfb,0x53,0xc9,0xbf,0x4f,0xc1,0x8a,0xc5,0xf5,0x1c,0x9f,0x36,0x1b,0xbe,0x31,0x3c}, - {0xee,0x8a,0x94,0x08,0x4d,0x86,0xf4,0xb0,0x6f,0x1c,0xba,0x91,0xee,0x19,0xdc,0x07,0x58,0xa1,0xac,0xa6,0xae,0xcd,0x75,0x79,0xbb,0xd4,0x62,0x42,0x13,0x61,0x0b,0x33,0x72,0x42,0xcb,0xf9,0x93,0xbc,0x68,0xc1,0x98,0xdb,0xce,0xc7,0x1f,0x71,0xb8,0xae,0x7a,0x8d,0xac,0x34,0xaa,0x52,0x0e,0x7f,0xbb,0x55,0x7d,0x7e,0x09,0xc1,0xce,0x41,0x8a,0x80,0x6d,0xa2,0xd7,0x19,0x96,0xf7,0x6d,0x15,0x9e,0x1d,0x9e,0xd4,0x1f,0xbb,0x27,0xdf,0xa1,0xdb,0x6c,0xc3,0xd7,0x73,0x7d,0x77,0x28,0x1f,0xd9,0x4c,0xb4,0x26}, - {0x75,0x74,0x38,0x8f,0x47,0x48,0xf0,0x51,0x3c,0xcb,0xbe,0x9c,0xf4,0xbc,0x5d,0xb2,0x55,0x20,0x9f,0xd9,0x44,0x12,0xab,0x9a,0xd6,0xa5,0x10,0x1c,0x6c,0x9e,0x70,0x2c,0x83,0x03,0x73,0x62,0x93,0xf2,0xb7,0xe1,0x2c,0x8a,0xca,0xeb,0xff,0x79,0x52,0x4b,0x14,0x13,0xd4,0xbf,0x8a,0x77,0xfc,0xda,0x0f,0x61,0x72,0x9c,0x14,0x10,0xeb,0x7d,0x7a,0xee,0x66,0x87,0x6a,0xaf,0x62,0xcb,0x0e,0xcd,0x53,0x55,0x04,0xec,0xcb,0x66,0xb5,0xe4,0x0b,0x0f,0x38,0x01,0x80,0x58,0xea,0xe2,0x2c,0xf6,0x9f,0x8e,0xe6,0x08}, - {0xad,0x30,0xc1,0x4b,0x0a,0x50,0xad,0x34,0x9c,0xd4,0x0b,0x3d,0x49,0xdb,0x38,0x8d,0xbe,0x89,0x0a,0x50,0x98,0x3d,0x5c,0xa2,0x09,0x3b,0xba,0xee,0x87,0x3f,0x1f,0x2f,0xf9,0xf2,0xb8,0x0a,0xd5,0x09,0x2d,0x2f,0xdf,0x23,0x59,0xc5,0x8d,0x21,0xb9,0xac,0xb9,0x6c,0x76,0x73,0x26,0x34,0x8f,0x4a,0xf5,0x19,0xf7,0x38,0xd7,0x3b,0xb1,0x4c,0x4a,0xb6,0x15,0xe5,0x75,0x8c,0x84,0xf7,0x38,0x90,0x4a,0xdb,0xba,0x01,0x95,0xa5,0x50,0x1b,0x75,0x3f,0x3f,0x31,0x0d,0xc2,0xe8,0x2e,0xae,0xc0,0x53,0xe3,0xa1,0x19}, - {0xc3,0x05,0xfa,0xba,0x60,0x75,0x1c,0x7d,0x61,0x5e,0xe5,0xc6,0xa0,0xa0,0xe1,0xb3,0x73,0x64,0xd6,0xc0,0x18,0x97,0x52,0xe3,0x86,0x34,0x0c,0xc2,0x11,0x6b,0x54,0x41,0xbd,0xbd,0x96,0xd5,0xcd,0x72,0x21,0xb4,0x40,0xfc,0xee,0x98,0x43,0x45,0xe0,0x93,0xb5,0x09,0x41,0xb4,0x47,0x53,0xb1,0x9f,0x34,0xae,0x66,0x02,0x99,0xd3,0x6b,0x73,0xb4,0xb3,0x34,0x93,0x50,0x2d,0x53,0x85,0x73,0x65,0x81,0x60,0x4b,0x11,0xfd,0x46,0x75,0x83,0x5c,0x42,0x30,0x5f,0x5f,0xcc,0x5c,0xab,0x7f,0xb8,0xa2,0x95,0x22,0x41}, - {0xe9,0xd6,0x7e,0xf5,0x88,0x9b,0xc9,0x19,0x25,0xc8,0xf8,0x6d,0x26,0xcb,0x93,0x53,0x73,0xd2,0x0a,0xb3,0x13,0x32,0xee,0x5c,0x34,0x2e,0x2d,0xb5,0xeb,0x53,0xe1,0x14,0xc6,0xea,0x93,0xe2,0x61,0x52,0x65,0x2e,0xdb,0xac,0x33,0x21,0x03,0x92,0x5a,0x84,0x6b,0x99,0x00,0x79,0xcb,0x75,0x09,0x46,0x80,0xdd,0x5a,0x19,0x8d,0xbb,0x60,0x07,0x8a,0x81,0xe6,0xcd,0x17,0x1a,0x3e,0x41,0x84,0xa0,0x69,0xed,0xa9,0x6d,0x15,0x57,0xb1,0xcc,0xca,0x46,0x8f,0x26,0xbf,0x2c,0xf2,0xc5,0x3a,0xc3,0x9b,0xbe,0x34,0x6b}, - {0xb2,0xc0,0x78,0x3a,0x64,0x2f,0xdf,0xf3,0x7c,0x02,0x2e,0xf2,0x1e,0x97,0x3e,0x4c,0xa3,0xb5,0xc1,0x49,0x5e,0x1c,0x7d,0xec,0x2d,0xdd,0x22,0x09,0x8f,0xc1,0x12,0x20,0xd3,0xf2,0x71,0x65,0x65,0x69,0xfc,0x11,0x7a,0x73,0x0e,0x53,0x45,0xe8,0xc9,0xc6,0x35,0x50,0xfe,0xd4,0xa2,0xe7,0x3a,0xe3,0x0b,0xd3,0x6d,0x2e,0xb6,0xc7,0xb9,0x01,0x29,0x9d,0xc8,0x5a,0xe5,0x55,0x0b,0x88,0x63,0xa7,0xa0,0x45,0x1f,0x24,0x83,0x14,0x1f,0x6c,0xe7,0xc2,0xdf,0xef,0x36,0x3d,0xe8,0xad,0x4b,0x4e,0x78,0x5b,0xaf,0x08}, - {0x33,0x25,0x1f,0x88,0xdc,0x99,0x34,0x28,0xb6,0x23,0x93,0x77,0xda,0x25,0x05,0x9d,0xf4,0x41,0x34,0x67,0xfb,0xdd,0x7a,0x89,0x8d,0x16,0x3a,0x16,0x71,0x9d,0xb7,0x32,0x4b,0x2c,0xcc,0x89,0xd2,0x14,0x73,0xe2,0x8d,0x17,0x87,0xa2,0x11,0xbd,0xe4,0x4b,0xce,0x64,0x33,0xfa,0xd6,0x28,0xd5,0x18,0x6e,0x82,0xd9,0xaf,0xd5,0xc1,0x23,0x64,0x6a,0xb3,0xfc,0xed,0xd9,0xf8,0x85,0xcc,0xf9,0xe5,0x46,0x37,0x8f,0xc2,0xbc,0x22,0xcd,0xd3,0xe5,0xf9,0x38,0xe3,0x9d,0xe4,0xcc,0x2d,0x3e,0xc1,0xfb,0x5e,0x0a,0x48}, - {0x71,0x20,0x62,0x01,0x0b,0xe7,0x51,0x0b,0xc5,0xaf,0x1d,0x8b,0xcf,0x05,0xb5,0x06,0xcd,0xab,0x5a,0xef,0x61,0xb0,0x6b,0x2c,0x31,0xbf,0xb7,0x0c,0x60,0x27,0xaa,0x47,0x1f,0x22,0xce,0x42,0xe4,0x4c,0x61,0xb6,0x28,0x39,0x05,0x4c,0xcc,0x9d,0x19,0x6e,0x03,0xbe,0x1c,0xdc,0xa4,0xb4,0x3f,0x66,0x06,0x8e,0x1c,0x69,0x47,0x1d,0xb3,0x24,0xc3,0xf8,0x15,0xc0,0xed,0x1e,0x54,0x2a,0x7c,0x3f,0x69,0x7c,0x7e,0xfe,0xa4,0x11,0xd6,0x78,0xa2,0x4e,0x13,0x66,0xaf,0xf0,0x94,0xa0,0xdd,0x14,0x5d,0x58,0x5b,0x54}, - {0x0f,0x3a,0xd4,0xa0,0x5e,0x27,0xbf,0x67,0xbe,0xee,0x9b,0x08,0x34,0x8e,0xe6,0xad,0x2e,0xe7,0x79,0xd4,0x4c,0x13,0x89,0x42,0x54,0x54,0xba,0x32,0xc3,0xf9,0x62,0x0f,0xe1,0x21,0xb3,0xe3,0xd0,0xe4,0x04,0x62,0x95,0x1e,0xff,0x28,0x7a,0x63,0xaa,0x3b,0x9e,0xbd,0x99,0x5b,0xfd,0xcf,0x0c,0x0b,0x71,0xd0,0xc8,0x64,0x3e,0xdc,0x22,0x4d,0x39,0x5f,0x3b,0xd6,0x89,0x65,0xb4,0xfc,0x61,0xcf,0xcb,0x57,0x3f,0x6a,0xae,0x5c,0x05,0xfa,0x3a,0x95,0xd2,0xc2,0xba,0xfe,0x36,0x14,0x37,0x36,0x1a,0xa0,0x0f,0x1c}, - {0xff,0x3d,0x94,0x22,0xb6,0x04,0xc6,0xd2,0xa0,0xb3,0xcf,0x44,0xce,0xbe,0x8c,0xbc,0x78,0x86,0x80,0x97,0xf3,0x4f,0x25,0x5d,0xbf,0xa6,0x1c,0x3b,0x4f,0x61,0xa3,0x0f,0x50,0x6a,0x93,0x8c,0x0e,0x2b,0x08,0x69,0xb6,0xc5,0xda,0xc1,0x35,0xa0,0xc9,0xf9,0x34,0xb6,0xdf,0xc4,0x54,0x3e,0xb7,0x6f,0x40,0xc1,0x2b,0x1d,0x9b,0x41,0x05,0x40,0xf0,0x82,0xbe,0xb9,0xbd,0xfe,0x03,0xa0,0x90,0xac,0x44,0x3a,0xaf,0xc1,0x89,0x20,0x8e,0xfa,0x54,0x19,0x91,0x9f,0x49,0xf8,0x42,0xab,0x40,0xef,0x8a,0x21,0xba,0x1f}, - {0x3e,0xf5,0xc8,0xfa,0x48,0x94,0x54,0xab,0x41,0x37,0xa6,0x7b,0x9a,0xe8,0xf6,0x81,0x01,0x5e,0x2b,0x6c,0x7d,0x6c,0xfd,0x74,0x42,0x6e,0xc8,0xa8,0xca,0x3a,0x2e,0x39,0x94,0x01,0x7b,0x3e,0x04,0x57,0x3e,0x4f,0x7f,0xaf,0xda,0x08,0xee,0x3e,0x1d,0xa8,0xf1,0xde,0xdc,0x99,0xab,0xc6,0x39,0xc8,0xd5,0x61,0x77,0xff,0x13,0x5d,0x53,0x6c,0xaf,0x35,0x8a,0x3e,0xe9,0x34,0xbd,0x4c,0x16,0xe8,0x87,0x58,0x44,0x81,0x07,0x2e,0xab,0xb0,0x9a,0xf2,0x76,0x9c,0x31,0x19,0x3b,0xc1,0x0a,0xd5,0xe4,0x7f,0xe1,0x25}, - {0x76,0xf6,0x04,0x1e,0xd7,0x9b,0x28,0x0a,0x95,0x0f,0x42,0xd6,0x52,0x1c,0x8e,0x20,0xab,0x1f,0x69,0x34,0xb0,0xd8,0x86,0x51,0x51,0xb3,0x9f,0x2a,0x44,0x51,0x57,0x25,0xa7,0x21,0xf1,0x76,0xf5,0x7f,0x5f,0x91,0xe3,0x87,0xcd,0x2f,0x27,0x32,0x4a,0xc3,0x26,0xe5,0x1b,0x4d,0xde,0x2f,0xba,0xcc,0x9b,0x89,0x69,0x89,0x8f,0x82,0xba,0x6b,0x01,0x39,0xfe,0x90,0x66,0xbc,0xd1,0xe2,0xd5,0x7a,0x99,0xa0,0x18,0x4a,0xb5,0x4c,0xd4,0x60,0x84,0xaf,0x14,0x69,0x1d,0x97,0xe4,0x7b,0x6b,0x7f,0x4f,0x50,0x9d,0x55}, - {0xd5,0x54,0xeb,0xb3,0x78,0x83,0x73,0xa7,0x7c,0x3c,0x55,0xa5,0x66,0xd3,0x69,0x1d,0xba,0x00,0x28,0xf9,0x62,0xcf,0x26,0x0a,0x17,0x32,0x7e,0x80,0xd5,0x12,0xab,0x01,0xfd,0x66,0xd2,0xf6,0xe7,0x91,0x48,0x9c,0x1b,0x78,0x07,0x03,0x9b,0xa1,0x44,0x07,0x3b,0xe2,0x61,0x60,0x1d,0x8f,0x38,0x88,0x0e,0xd5,0x4b,0x35,0xa3,0xa6,0x3e,0x12,0x96,0x2d,0xe3,0x41,0x90,0x18,0x8d,0x11,0x48,0x58,0x31,0xd8,0xc2,0xe3,0xed,0xb9,0xd9,0x45,0x32,0xd8,0x71,0x42,0xab,0x1e,0x54,0xa1,0x18,0xc9,0xe2,0x61,0x39,0x4a}, - {0xa0,0xbb,0xe6,0xf8,0xe0,0x3b,0xdc,0x71,0x0a,0xe3,0xff,0x7e,0x34,0xf8,0xce,0xd6,0x6a,0x47,0x3a,0xe1,0x5f,0x42,0x92,0xa9,0x63,0xb7,0x1d,0xfb,0xe3,0xbc,0xd6,0x2c,0x1e,0x3f,0x23,0xf3,0x44,0xd6,0x27,0x03,0x16,0xf0,0xfc,0x34,0x0e,0x26,0x9a,0x49,0x79,0xb9,0xda,0xf2,0x16,0xa7,0xb5,0x83,0x1f,0x11,0xd4,0x9b,0xad,0xee,0xac,0x68,0x10,0xc2,0xd7,0xf3,0x0e,0xc9,0xb4,0x38,0x0c,0x04,0xad,0xb7,0x24,0x6e,0x8e,0x30,0x23,0x3e,0xe7,0xb7,0xf1,0xd9,0x60,0x38,0x97,0xf5,0x08,0xb5,0xd5,0x60,0x57,0x59}, - {0x97,0x63,0xaa,0x04,0xe1,0xbf,0x29,0x61,0xcb,0xfc,0xa7,0xa4,0x08,0x00,0x96,0x8f,0x58,0x94,0x90,0x7d,0x89,0xc0,0x8b,0x3f,0xa9,0x91,0xb2,0xdc,0x3e,0xa4,0x9f,0x70,0x90,0x27,0x02,0xfd,0xeb,0xcb,0x2a,0x88,0x60,0x57,0x11,0xc4,0x05,0x33,0xaf,0x89,0xf4,0x73,0x34,0x7d,0xe3,0x92,0xf4,0x65,0x2b,0x5a,0x51,0x54,0xdf,0xc5,0xb2,0x2c,0xca,0x2a,0xfd,0x63,0x8c,0x5d,0x0a,0xeb,0xff,0x4e,0x69,0x2e,0x66,0xc1,0x2b,0xd2,0x3a,0xb0,0xcb,0xf8,0x6e,0xf3,0x23,0x27,0x1f,0x13,0xc8,0xf0,0xec,0x29,0xf0,0x70}, - {0x33,0x3e,0xed,0x2e,0xb3,0x07,0x13,0x46,0xe7,0x81,0x55,0xa4,0x33,0x2f,0x04,0xae,0x66,0x03,0x5f,0x19,0xd3,0x49,0x44,0xc9,0x58,0x48,0x31,0x6c,0x8a,0x5d,0x7d,0x0b,0xb9,0xb0,0x10,0x5e,0xaa,0xaf,0x6a,0x2a,0xa9,0x1a,0x04,0xef,0x70,0xa3,0xf0,0x78,0x1f,0xd6,0x3a,0xaa,0x77,0xfb,0x3e,0x77,0xe1,0xd9,0x4b,0xa7,0xa2,0xa5,0xec,0x44,0x43,0xd5,0x95,0x7b,0x32,0x48,0xd4,0x25,0x1d,0x0f,0x34,0xa3,0x00,0x83,0xd3,0x70,0x2b,0xc5,0xe1,0x60,0x1c,0x53,0x1c,0xde,0xe4,0xe9,0x7d,0x2c,0x51,0x24,0x22,0x27}, - {0x2e,0x34,0xc5,0x49,0xaf,0x92,0xbc,0x1a,0xd0,0xfa,0xe6,0xb2,0x11,0xd8,0xee,0xff,0x29,0x4e,0xc8,0xfc,0x8d,0x8c,0xa2,0xef,0x43,0xc5,0x4c,0xa4,0x18,0xdf,0xb5,0x11,0xfc,0x75,0xa9,0x42,0x8a,0xbb,0x7b,0xbf,0x58,0xa3,0xad,0x96,0x77,0x39,0x5c,0x8c,0x48,0xaa,0xed,0xcd,0x6f,0xc7,0x7f,0xe2,0xa6,0x20,0xbc,0xf6,0xd7,0x5f,0x73,0x19,0x66,0x42,0xc8,0x42,0xd0,0x90,0xab,0xe3,0x7e,0x54,0x19,0x7f,0x0f,0x8e,0x84,0xeb,0xb9,0x97,0xa4,0x65,0xd0,0xa1,0x03,0x25,0x5f,0x89,0xdf,0x91,0x11,0x91,0xef,0x0f} -}; - -NAMESPACE_END // Arch32 -NAMESPACE_END // Donna -NAMESPACE_END // CryptoPP - -#endif // CRYPTOPP_DOXYGEN_PROCESSING -#endif // CRYPTOPP_DONNA_32_H diff --git a/third_party/cryptoppwin/include/cryptopp/donna_64.h b/third_party/cryptoppwin/include/cryptopp/donna_64.h deleted file mode 100644 index 3180d606..00000000 --- a/third_party/cryptoppwin/include/cryptopp/donna_64.h +++ /dev/null @@ -1,457 +0,0 @@ -// donna_64.h - written and placed in public domain by Jeffrey Walton -// Crypto++ specific implementation wrapped around Andrew -// Moon's public domain curve25519-donna and ed25519-donna, -// https://github.com/floodyberry/curve25519-donna and -// https://github.com/floodyberry/ed25519-donna. - -// This source file multiplexes two different repos using namespaces. This -// was a little easier from a project management standpoint. We only need -// two files per architecture at the expense of namespaces and bloat. - -#ifndef CRYPTOPP_DONNA_64_H -#define CRYPTOPP_DONNA_64_H -#ifndef CRYPTOPP_DOXYGEN_PROCESSING - -#include "config.h" - -#if defined(CRYPTOPP_MSC_VERSION) -# include -# pragma intrinsic(_umul128) -# pragma intrinsic(__shiftright128) -#endif - -NAMESPACE_BEGIN(CryptoPP) -NAMESPACE_BEGIN(Donna) -NAMESPACE_BEGIN(Arch64) - -using CryptoPP::byte; -using CryptoPP::word32; -using CryptoPP::word64; - -// ******************** x25519 Agreement ************************* // - -#define ALIGN(n) CRYPTOPP_ALIGN_DATA(n) -typedef word64 bignum25519[5]; - -const byte basePoint[32] = {9}; -const word64 reduce_mask_40 = ((word64)1 << 40) - 1; -const word64 reduce_mask_51 = ((word64)1 << 51) - 1; -const word64 reduce_mask_52 = ((word64)1 << 52) - 1; -const word64 reduce_mask_56 = ((word64)1 << 56) - 1; - -const word64 two54m152 = (((word64)1) << 54) - 152; -const word64 two54m8 = (((word64)1) << 54) - 8; - -#if defined(CRYPTOPP_WORD128_AVAILABLE) -using CryptoPP::word128; -# define lo128(a) ((word64)a) -# define hi128(a) ((word64)(a >> 64)) -# define add128(a,b) a += b; -# define add128_64(a,b) a += (word64)b; -# define mul64x64_128(out,a,b) out = (word128)a * b; -# define shr128(out,in,shift) out = (word64)(in >> (shift)); -# define shl128(out,in,shift) out = (word64)((in << shift) >> 64); - -#elif defined(CRYPTOPP_MSC_VERSION) -struct word128 { word64 lo, hi; }; -# define mul64x64_128(out,a,b) out.lo = _umul128(a,b,&out.hi); -# define shr128_pair(out,hi,lo,shift) out = __shiftright128(lo, hi, shift); -# define shl128_pair(out,hi,lo,shift) out = __shiftleft128(lo, hi, shift); -# define shr128(out,in,shift) shr128_pair(out, in.hi, in.lo, shift) -# define shl128(out,in,shift) shl128_pair(out, in.hi, in.lo, shift) -# define add128(a,b) { word64 p = a.lo; a.lo += b.lo; a.hi += b.hi + (a.lo < p); } -# define add128_64(a,b) { word64 p = a.lo; a.lo += b; a.hi += (a.lo < p); } -# define lo128(a) (a.lo) -# define hi128(a) (a.hi) - -#elif defined(__GNUC__) && (defined(__amd64__) || defined(__x86_64__)) -struct word128 { word64 lo, hi; }; -# define mul64x64_128(out,a,b) __asm__ ("mulq %3" : "=a" (out.lo), "=d" (out.hi) : "a" (a), "rm" (b)); -# define shr128_pair(out,hi,lo,shift) __asm__ ("shrdq %2,%1,%0" : "+r" (lo) : "r" (hi), "J" (shift)); out = lo; -# define shl128_pair(out,hi,lo,shift) __asm__ ("shldq %2,%1,%0" : "+r" (hi) : "r" (lo), "J" (shift)); out = hi; -# define shr128(out,in,shift) shr128_pair(out,in.hi, in.lo, shift) -# define shl128(out,in,shift) shl128_pair(out,in.hi, in.lo, shift) -# define add128(a,b) __asm__ ("addq %4,%2; adcq %5,%3" : "=r" (a.hi), "=r" (a.lo) : "1" (a.lo), "0" (a.hi), "rm" (b.lo), "rm" (b.hi) : "cc"); -# define add128_64(a,b) __asm__ ("addq %4,%2; adcq $0,%3" : "=r" (a.hi), "=r" (a.lo) : "1" (a.lo), "0" (a.hi), "rm" (b) : "cc"); -# define lo128(a) (a.lo) -# define hi128(a) (a.hi) - -#else -// https://groups.google.com/forum/#!forum/cryptopp-users -# error "Unsupported platform" -#endif - -// ****************** ed25519 Signatures *********************** // - -typedef byte hash_512bits[64]; - -const int bignum256modm_bits_per_limb = 56; -const int bignum256modm_limb_size = 5; -typedef word64 bignum256modm_element_t; -typedef bignum256modm_element_t bignum256modm[5]; - -/* multiples of p */ -const word64 twoP0 = 0x0fffffffffffda; -const word64 twoP1234 = 0x0ffffffffffffe; -const word64 fourP0 = 0x1fffffffffffb4; -const word64 fourP1234 = 0x1ffffffffffffc; - -struct ge25519 { - bignum25519 x, y, z, t; -}; - -struct ge25519_p1p1 { - bignum25519 x, y, z, t; -}; - -struct ge25519_niels { - bignum25519 ysubx, xaddy, t2d; -}; - -struct ge25519_pniels { - bignum25519 ysubx, xaddy, z, t2d; -}; - -#define S1_SWINDOWSIZE 5 -#define S1_TABLE_SIZE (1<<(S1_SWINDOWSIZE-2)) -#define S2_SWINDOWSIZE 7 -#define S2_TABLE_SIZE (1<<(S2_SWINDOWSIZE-2)) - -// *************** ed25519-donna-64bit-tables.h *************** // - -const ge25519 ge25519_basepoint = { - {0x00062d608f25d51a,0x000412a4b4f6592a,0x00075b7171a4b31d,0x0001ff60527118fe,0x000216936d3cd6e5}, - {0x0006666666666658,0x0004cccccccccccc,0x0001999999999999,0x0003333333333333,0x0006666666666666}, - {0x0000000000000001,0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000}, - {0x00068ab3a5b7dda3,0x00000eea2a5eadbb,0x0002af8df483c27e,0x000332b375274732,0x00067875f0fd78b7} -}; - -const bignum25519 ge25519_ecd = { - 0x00034dca135978a3,0x0001a8283b156ebd,0x0005e7a26001c029,0x000739c663a03cbb,0x00052036cee2b6ff -}; - -const bignum25519 ge25519_ec2d = { - 0x00069b9426b2f159,0x00035050762add7a,0x0003cf44c0038052,0x0006738cc7407977,0x0002406d9dc56dff -}; - -const bignum25519 ge25519_sqrtneg1 = { - 0x00061b274a0ea0b0,0x0000d5a5fc8f189d,0x0007ef5e9cbd0c60,0x00078595a6804c9e,0x0002b8324804fc1d -}; - -const ge25519_niels ge25519_niels_sliding_multiples[32] = { - {{0x00003905d740913e,0x0000ba2817d673a2,0x00023e2827f4e67c,0x000133d2e0c21a34,0x00044fd2f9298f81},{0x000493c6f58c3b85,0x0000df7181c325f7,0x0000f50b0b3e4cb7,0x0005329385a44c32,0x00007cf9d3a33d4b},{0x00011205877aaa68,0x000479955893d579,0x00050d66309b67a0,0x0002d42d0dbee5ee,0x0006f117b689f0c6}}, - {{0x00011fe8a4fcd265,0x0007bcb8374faacc,0x00052f5af4ef4d4f,0x0005314098f98d10,0x0002ab91587555bd},{0x0005b0a84cee9730,0x00061d10c97155e4,0x0004059cc8096a10,0x00047a608da8014f,0x0007a164e1b9a80f},{0x0006933f0dd0d889,0x00044386bb4c4295,0x0003cb6d3162508c,0x00026368b872a2c6,0x0005a2826af12b9b}}, - {{0x000182c3a447d6ba,0x00022964e536eff2,0x000192821f540053,0x0002f9f19e788e5c,0x000154a7e73eb1b5},{0x0002bc4408a5bb33,0x000078ebdda05442,0x0002ffb112354123,0x000375ee8df5862d,0x0002945ccf146e20},{0x0003dbf1812a8285,0x0000fa17ba3f9797,0x0006f69cb49c3820,0x00034d5a0db3858d,0x00043aabe696b3bb}}, - {{0x00072c9aaa3221b1,0x000267774474f74d,0x000064b0e9b28085,0x0003f04ef53b27c9,0x0001d6edd5d2e531},{0x00025cd0944ea3bf,0x00075673b81a4d63,0x000150b925d1c0d4,0x00013f38d9294114,0x000461bea69283c9},{0x00036dc801b8b3a2,0x0000e0a7d4935e30,0x0001deb7cecc0d7d,0x000053a94e20dd2c,0x0007a9fbb1c6a0f9}}, - {{0x0006217e039d8064,0x0006dea408337e6d,0x00057ac112628206,0x000647cb65e30473,0x00049c05a51fadc9},{0x0006678aa6a8632f,0x0005ea3788d8b365,0x00021bd6d6994279,0x0007ace75919e4e3,0x00034b9ed338add7},{0x0004e8bf9045af1b,0x000514e33a45e0d6,0x0007533c5b8bfe0f,0x000583557b7e14c9,0x00073c172021b008}}, - {{0x00075b0249864348,0x00052ee11070262b,0x000237ae54fb5acd,0x0003bfd1d03aaab5,0x00018ab598029d5c},{0x000700848a802ade,0x0001e04605c4e5f7,0x0005c0d01b9767fb,0x0007d7889f42388b,0x0004275aae2546d8},{0x00032cc5fd6089e9,0x000426505c949b05,0x00046a18880c7ad2,0x0004a4221888ccda,0x0003dc65522b53df}}, - {{0x0007013b327fbf93,0x0001336eeded6a0d,0x0002b565a2bbf3af,0x000253ce89591955,0x0000267882d17602},{0x0000c222a2007f6d,0x000356b79bdb77ee,0x00041ee81efe12ce,0x000120a9bd07097d,0x000234fd7eec346f},{0x0000a119732ea378,0x00063bf1ba8e2a6c,0x00069f94cc90df9a,0x000431d1779bfc48,0x000497ba6fdaa097}}, - {{0x0003cd86468ccf0b,0x00048553221ac081,0x0006c9464b4e0a6e,0x00075fba84180403,0x00043b5cd4218d05},{0x0006cc0313cfeaa0,0x0001a313848da499,0x0007cb534219230a,0x00039596dedefd60,0x00061e22917f12de},{0x0002762f9bd0b516,0x0001c6e7fbddcbb3,0x00075909c3ace2bd,0x00042101972d3ec9,0x000511d61210ae4d}}, - {{0x000386484420de87,0x0002d6b25db68102,0x000650b4962873c0,0x0004081cfd271394,0x00071a7fe6fe2482},{0x000676ef950e9d81,0x0001b81ae089f258,0x00063c4922951883,0x0002f1d54d9b3237,0x0006d325924ddb85},{0x000182b8a5c8c854,0x00073fcbe5406d8e,0x0005de3430cff451,0x000554b967ac8c41,0x0004746c4b6559ee}}, - {{0x000546c864741147,0x0003a1df99092690,0x0001ca8cc9f4d6bb,0x00036b7fc9cd3b03,0x000219663497db5e},{0x00077b3c6dc69a2b,0x0004edf13ec2fa6e,0x0004e85ad77beac8,0x0007dba2b28e7bda,0x0005c9a51de34fe9},{0x0000f1cf79f10e67,0x00043ccb0a2b7ea2,0x00005089dfff776a,0x0001dd84e1d38b88,0x0004804503c60822}}, - {{0x000021d23a36d175,0x0004fd3373c6476d,0x00020e291eeed02a,0x00062f2ecf2e7210,0x000771e098858de4},{0x00049ed02ca37fc7,0x000474c2b5957884,0x0005b8388e816683,0x0004b6c454b76be4,0x000553398a516506},{0x0002f5d278451edf,0x000730b133997342,0x0006965420eb6975,0x000308a3bfa516cf,0x0005a5ed1d68ff5a}}, - {{0x0005e0c558527359,0x0003395b73afd75c,0x000072afa4e4b970,0x00062214329e0f6d,0x000019b60135fefd},{0x0005122afe150e83,0x0004afc966bb0232,0x0001c478833c8268,0x00017839c3fc148f,0x00044acb897d8bf9},{0x000068145e134b83,0x0001e4860982c3cc,0x000068fb5f13d799,0x0007c9283744547e,0x000150c49fde6ad2}}, - {{0x0001863c9cdca868,0x0003770e295a1709,0x0000d85a3720fd13,0x0005e0ff1f71ab06,0x00078a6d7791e05f},{0x0003f29509471138,0x000729eeb4ca31cf,0x00069c22b575bfbc,0x0004910857bce212,0x0006b2b5a075bb99},{0x0007704b47a0b976,0x0002ae82e91aab17,0x00050bd6429806cd,0x00068055158fd8ea,0x000725c7ffc4ad55}}, - {{0x00002bf71cd098c0,0x00049dabcc6cd230,0x00040a6533f905b2,0x000573efac2eb8a4,0x0004cd54625f855f},{0x00026715d1cf99b2,0x0002205441a69c88,0x000448427dcd4b54,0x0001d191e88abdc5,0x000794cc9277cb1f},{0x0006c426c2ac5053,0x0005a65ece4b095e,0x0000c44086f26bb6,0x0007429568197885,0x0007008357b6fcc8}}, - {{0x00039fbb82584a34,0x00047a568f257a03,0x00014d88091ead91,0x0002145b18b1ce24,0x00013a92a3669d6d},{0x0000672738773f01,0x000752bf799f6171,0x0006b4a6dae33323,0x0007b54696ead1dc,0x00006ef7e9851ad0},{0x0003771cc0577de5,0x0003ca06bb8b9952,0x00000b81c5d50390,0x00043512340780ec,0x0003c296ddf8a2af}}, - {{0x00034d2ebb1f2541,0x0000e815b723ff9d,0x000286b416e25443,0x0000bdfe38d1bee8,0x0000a892c7007477},{0x000515f9d914a713,0x00073191ff2255d5,0x00054f5cc2a4bdef,0x0003dd57fc118bcf,0x0007a99d393490c7},{0x0002ed2436bda3e8,0x00002afd00f291ea,0x0000be7381dea321,0x0003e952d4b2b193,0x000286762d28302f}}, - {{0x00058e2bce2ef5bd,0x00068ce8f78c6f8a,0x0006ee26e39261b2,0x00033d0aa50bcf9d,0x0007686f2a3d6f17},{0x000036093ce35b25,0x0003b64d7552e9cf,0x00071ee0fe0b8460,0x00069d0660c969e5,0x00032f1da046a9d9},{0x000512a66d597c6a,0x0000609a70a57551,0x000026c08a3c464c,0x0004531fc8ee39e1,0x000561305f8a9ad2}}, - {{0x0002cc28e7b0c0d5,0x00077b60eb8a6ce4,0x0004042985c277a6,0x000636657b46d3eb,0x000030a1aef2c57c},{0x0004978dec92aed1,0x000069adae7ca201,0x00011ee923290f55,0x00069641898d916c,0x00000aaec53e35d4},{0x0001f773003ad2aa,0x000005642cc10f76,0x00003b48f82cfca6,0x0002403c10ee4329,0x00020be9c1c24065}}, - {{0x0000e44ae2025e60,0x0005f97b9727041c,0x0005683472c0ecec,0x000188882eb1ce7c,0x00069764c545067e},{0x000387d8249673a6,0x0005bea8dc927c2a,0x0005bd8ed5650ef0,0x0000ef0e3fcd40e1,0x000750ab3361f0ac},{0x00023283a2f81037,0x000477aff97e23d1,0x0000b8958dbcbb68,0x0000205b97e8add6,0x00054f96b3fb7075}}, - {{0x0005afc616b11ecd,0x00039f4aec8f22ef,0x0003b39e1625d92e,0x0005f85bd4508873,0x00078e6839fbe85d},{0x0005f20429669279,0x00008fafae4941f5,0x00015d83c4eb7688,0x0001cf379eca4146,0x0003d7fe9c52bb75},{0x00032df737b8856b,0x0000608342f14e06,0x0003967889d74175,0x0001211907fba550,0x00070f268f350088}}, - {{0x0004112070dcf355,0x0007dcff9c22e464,0x00054ada60e03325,0x00025cd98eef769a,0x000404e56c039b8c},{0x00064583b1805f47,0x00022c1baf832cd0,0x000132c01bd4d717,0x0004ecf4c3a75b8f,0x0007c0d345cfad88},{0x00071f4b8c78338a,0x00062cfc16bc2b23,0x00017cf51280d9aa,0x0003bbae5e20a95a,0x00020d754762aaec}}, - {{0x0004feb135b9f543,0x00063bd192ad93ae,0x00044e2ea612cdf7,0x000670f4991583ab,0x00038b8ada8790b4},{0x0007c36fc73bb758,0x0004a6c797734bd1,0x0000ef248ab3950e,0x00063154c9a53ec8,0x0002b8f1e46f3cee},{0x00004a9cdf51f95d,0x0005d963fbd596b8,0x00022d9b68ace54a,0x0004a98e8836c599,0x000049aeb32ceba1}}, - {{0x00067d3c63dcfe7e,0x000112f0adc81aee,0x00053df04c827165,0x0002fe5b33b430f0,0x00051c665e0c8d62},{0x00007d0b75fc7931,0x00016f4ce4ba754a,0x0005ace4c03fbe49,0x00027e0ec12a159c,0x000795ee17530f67},{0x00025b0a52ecbd81,0x0005dc0695fce4a9,0x0003b928c575047d,0x00023bf3512686e5,0x0006cd19bf49dc54}}, - {{0x0007619052179ca3,0x0000c16593f0afd0,0x000265c4795c7428,0x00031c40515d5442,0x0007520f3db40b2e},{0x0006612165afc386,0x0001171aa36203ff,0x0002642ea820a8aa,0x0001f3bb7b313f10,0x0005e01b3a7429e4},{0x00050be3d39357a1,0x0003ab33d294a7b6,0x0004c479ba59edb3,0x0004c30d184d326f,0x00071092c9ccef3c}}, - {{0x0000523f0364918c,0x000687f56d638a7b,0x00020796928ad013,0x0005d38405a54f33,0x0000ea15b03d0257},{0x0003d8ac74051dcf,0x00010ab6f543d0ad,0x0005d0f3ac0fda90,0x0005ef1d2573e5e4,0x0004173a5bb7137a},{0x00056e31f0f9218a,0x0005635f88e102f8,0x0002cbc5d969a5b8,0x000533fbc98b347a,0x0005fc565614a4e3}}, - {{0x0006570dc46d7ae5,0x00018a9f1b91e26d,0x000436b6183f42ab,0x000550acaa4f8198,0x00062711c414c454},{0x0002e1e67790988e,0x0001e38b9ae44912,0x000648fbb4075654,0x00028df1d840cd72,0x0003214c7409d466},{0x0001827406651770,0x0004d144f286c265,0x00017488f0ee9281,0x00019e6cdb5c760c,0x0005bea94073ecb8}}, - {{0x0005bf0912c89be4,0x00062fadcaf38c83,0x00025ec196b3ce2c,0x00077655ff4f017b,0x0003aacd5c148f61},{0x0000ce63f343d2f8,0x0001e0a87d1e368e,0x000045edbc019eea,0x0006979aed28d0d1,0x0004ad0785944f1b},{0x00063b34c3318301,0x0000e0e62d04d0b1,0x000676a233726701,0x00029e9a042d9769,0x0003aff0cb1d9028}}, - {{0x0005c7eb3a20405e,0x0005fdb5aad930f8,0x0004a757e63b8c47,0x00028e9492972456,0x000110e7e86f4cd2},{0x0006430bf4c53505,0x000264c3e4507244,0x00074c9f19a39270,0x00073f84f799bc47,0x0002ccf9f732bd99},{0x0000d89ed603f5e4,0x00051e1604018af8,0x0000b8eedc4a2218,0x00051ba98b9384d0,0x00005c557e0b9693}}, - {{0x0001ce311fc97e6f,0x0006023f3fb5db1f,0x0007b49775e8fc98,0x0003ad70adbf5045,0x0006e154c178fe98},{0x0006bbb089c20eb0,0x0006df41fb0b9eee,0x00051087ed87e16f,0x000102db5c9fa731,0x000289fef0841861},{0x00016336fed69abf,0x0004f066b929f9ec,0x0004e9ff9e6c5b93,0x00018c89bc4bb2ba,0x0006afbf642a95ca}}, - {{0x0000de0c62f5d2c1,0x00049601cf734fb5,0x0006b5c38263f0f6,0x0004623ef5b56d06,0x0000db4b851b9503},{0x00055070f913a8cc,0x000765619eac2bbc,0x0003ab5225f47459,0x00076ced14ab5b48,0x00012c093cedb801},{0x00047f9308b8190f,0x000414235c621f82,0x00031f5ff41a5a76,0x0006736773aab96d,0x00033aa8799c6635}}, - {{0x0007f51ebd085cf2,0x00012cfa67e3f5e1,0x0001800cf1e3d46a,0x00054337615ff0a8,0x000233c6f29e8e21},{0x0000f588fc156cb1,0x000363414da4f069,0x0007296ad9b68aea,0x0004d3711316ae43,0x000212cd0c1c8d58},{0x0004d5107f18c781,0x00064a4fd3a51a5e,0x0004f4cd0448bb37,0x000671d38543151e,0x0001db7778911914}}, - {{0x000352397c6bc26f,0x00018a7aa0227bbe,0x0005e68cc1ea5f8b,0x0006fe3e3a7a1d5f,0x00031ad97ad26e2a},{0x00014769dd701ab6,0x00028339f1b4b667,0x0004ab214b8ae37b,0x00025f0aefa0b0fe,0x0007ae2ca8a017d2},{0x000017ed0920b962,0x000187e33b53b6fd,0x00055829907a1463,0x000641f248e0a792,0x0001ed1fc53a6622}} -}; - -// ****************** modm-donna-64bit.h *********************** // - -const bignum256modm modm_m = { - 0x12631a5cf5d3ed, 0xf9dea2f79cd658, - 0x000000000014de, 0x00000000000000, - 0x00000010000000 -}; - -const bignum256modm modm_mu = { - 0x9ce5a30a2c131b, 0x215d086329a7ed, - 0xffffffffeb2106, 0xffffffffffffff, - 0x00000fffffffff -}; - -// *************** ed25519-donna-basepoint-table.h *************** // - -/* multiples of the base point in packed {ysubx, xaddy, t2d} form */ -ALIGN(16) const byte ge25519_niels_base_multiples[256][96] = { - {0x3e,0x91,0x40,0xd7,0x05,0x39,0x10,0x9d,0xb3,0xbe,0x40,0xd1,0x05,0x9f,0x39,0xfd,0x09,0x8a,0x8f,0x68,0x34,0x84,0xc1,0xa5,0x67,0x12,0xf8,0x98,0x92,0x2f,0xfd,0x44,0x85,0x3b,0x8c,0xf5,0xc6,0x93,0xbc,0x2f,0x19,0x0e,0x8c,0xfb,0xc6,0x2d,0x93,0xcf,0xc2,0x42,0x3d,0x64,0x98,0x48,0x0b,0x27,0x65,0xba,0xd4,0x33,0x3a,0x9d,0xcf,0x07,0x59,0xbb,0x6f,0x4b,0x67,0x15,0xbd,0xdb,0xea,0xa5,0xa2,0xee,0x00,0x3f,0xe1,0x41,0xfa,0xc6,0x57,0xc9,0x1c,0x9d,0xd4,0xcd,0xca,0xec,0x16,0xaf,0x1f,0xbe,0x0e,0x4f}, - {0xa8,0xd5,0xb4,0x42,0x60,0xa5,0x99,0x8a,0xf6,0xac,0x60,0x4e,0x0c,0x81,0x2b,0x8f,0xaa,0x37,0x6e,0xb1,0x6b,0x23,0x9e,0xe0,0x55,0x25,0xc9,0x69,0xa6,0x95,0xb5,0x6b,0xd7,0x71,0x3c,0x93,0xfc,0xe7,0x24,0x92,0xb5,0xf5,0x0f,0x7a,0x96,0x9d,0x46,0x9f,0x02,0x07,0xd6,0xe1,0x65,0x9a,0xa6,0x5a,0x2e,0x2e,0x7d,0xa8,0x3f,0x06,0x0c,0x59,0x02,0x68,0xd3,0xda,0xaa,0x7e,0x34,0x6e,0x05,0x48,0xee,0x83,0x93,0x59,0xf3,0xba,0x26,0x68,0x07,0xe6,0x10,0xbe,0xca,0x3b,0xb8,0xd1,0x5e,0x16,0x0a,0x4f,0x31,0x49}, - {0x65,0xd2,0xfc,0xa4,0xe8,0x1f,0x61,0x56,0x7d,0xba,0xc1,0xe5,0xfd,0x53,0xd3,0x3b,0xbd,0xd6,0x4b,0x21,0x1a,0xf3,0x31,0x81,0x62,0xda,0x5b,0x55,0x87,0x15,0xb9,0x2a,0x30,0x97,0xee,0x4c,0xa8,0xb0,0x25,0xaf,0x8a,0x4b,0x86,0xe8,0x30,0x84,0x5a,0x02,0x32,0x67,0x01,0x9f,0x02,0x50,0x1b,0xc1,0xf4,0xf8,0x80,0x9a,0x1b,0x4e,0x16,0x7a,0x34,0x48,0x67,0xf1,0xf4,0x11,0xf2,0x9b,0x95,0xf8,0x2d,0xf6,0x17,0x6b,0x4e,0xb8,0x4e,0x2a,0x72,0x5b,0x07,0x6f,0xde,0xd7,0x21,0x2a,0xbb,0x63,0xb9,0x04,0x9a,0x54}, - {0xbf,0x18,0x68,0x05,0x0a,0x05,0xfe,0x95,0xa9,0xfa,0x60,0x56,0x71,0x89,0x7e,0x32,0x73,0x50,0xa0,0x06,0xcd,0xe3,0xe8,0xc3,0x9a,0xa4,0x45,0x74,0x4c,0x3f,0x93,0x27,0x9f,0x09,0xfc,0x8e,0xb9,0x51,0x73,0x28,0x38,0x25,0xfd,0x7d,0xf4,0xc6,0x65,0x67,0x65,0x92,0x0a,0xfb,0x3d,0x8d,0x34,0xca,0x27,0x87,0xe5,0x21,0x03,0x91,0x0e,0x68,0xb0,0x26,0x14,0xe5,0xec,0x45,0x1e,0xbf,0x94,0x0f,0xba,0x6d,0x3d,0xc6,0x2b,0xe3,0xc0,0x52,0xf8,0x8c,0xd5,0x74,0x29,0xe4,0x18,0x4c,0xe6,0xb0,0xb1,0x79,0xf0,0x44}, - {0xba,0xd6,0x47,0xa4,0xc3,0x82,0x91,0x7f,0xb7,0x29,0x27,0x4b,0xd1,0x14,0x00,0xd5,0x87,0xa0,0x64,0xb8,0x1c,0xf1,0x3c,0xe3,0xf3,0x55,0x1b,0xeb,0x73,0x7e,0x4a,0x15,0x33,0xbb,0xa5,0x08,0x44,0xbc,0x12,0xa2,0x02,0xed,0x5e,0xc7,0xc3,0x48,0x50,0x8d,0x44,0xec,0xbf,0x5a,0x0c,0xeb,0x1b,0xdd,0xeb,0x06,0xe2,0x46,0xf1,0xcc,0x45,0x29,0xb3,0x03,0xd0,0xe7,0x79,0xa1,0x32,0xc8,0x7e,0x4d,0x12,0x00,0x0a,0x9d,0x72,0x5f,0xf3,0x8f,0x6d,0x0e,0xa1,0xd4,0xc1,0x62,0x98,0x7a,0xb2,0x38,0x59,0xac,0xb8,0x68}, - {0xa4,0x8c,0x7d,0x7b,0xb6,0x06,0x98,0x49,0x39,0x27,0xd2,0x27,0x84,0xe2,0x5b,0x57,0xb9,0x53,0x45,0x20,0xe7,0x5c,0x08,0xbb,0x84,0x78,0x41,0xae,0x41,0x4c,0xb6,0x38,0x31,0x71,0x15,0x77,0xeb,0xee,0x0c,0x3a,0x88,0xaf,0xc8,0x00,0x89,0x15,0x27,0x9b,0x36,0xa7,0x59,0xda,0x68,0xb6,0x65,0x80,0xbd,0x38,0xcc,0xa2,0xb6,0x7b,0xe5,0x51,0xa4,0xe3,0x9d,0x68,0x91,0xad,0x9d,0x8f,0x37,0x91,0xfb,0xf8,0x28,0x24,0x5f,0x17,0x88,0xb9,0xcf,0x9f,0x32,0xb5,0x0a,0x05,0x9f,0xc0,0x54,0x13,0xa2,0xdf,0x65,0x78}, - {0xb1,0x21,0x32,0xaa,0x9a,0x2c,0x6f,0xba,0xa7,0x23,0xba,0x3b,0x53,0x21,0xa0,0x6c,0x3a,0x2c,0x19,0x92,0x4f,0x76,0xea,0x9d,0xe0,0x17,0x53,0x2e,0x5d,0xdd,0x6e,0x1d,0xbf,0xa3,0x4e,0x94,0xd0,0x5c,0x1a,0x6b,0xd2,0xc0,0x9d,0xb3,0x3a,0x35,0x70,0x74,0x49,0x2e,0x54,0x28,0x82,0x52,0xb2,0x71,0x7e,0x92,0x3c,0x28,0x69,0xea,0x1b,0x46,0x36,0xda,0x0f,0xab,0xac,0x8a,0x7a,0x21,0xc8,0x49,0x35,0x3d,0x54,0xc6,0x28,0xa5,0x68,0x75,0xab,0x13,0x8b,0x5b,0xd0,0x37,0x37,0xbc,0x2c,0x3a,0x62,0xef,0x3c,0x23}, - {0xd9,0x34,0x92,0xf3,0xed,0x5d,0xa7,0xe2,0xf9,0x58,0xb5,0xe1,0x80,0x76,0x3d,0x96,0xfb,0x23,0x3c,0x6e,0xac,0x41,0x27,0x2c,0xc3,0x01,0x0e,0x32,0xa1,0x24,0x90,0x3a,0x8f,0x3e,0xdd,0x04,0x66,0x59,0xb7,0x59,0x2c,0x70,0x88,0xe2,0x77,0x03,0xb3,0x6c,0x23,0xc3,0xd9,0x5e,0x66,0x9c,0x33,0xb1,0x2f,0xe5,0xbc,0x61,0x60,0xe7,0x15,0x09,0x7e,0xa3,0x34,0xa8,0x35,0xe8,0x7d,0xdf,0xea,0x57,0x98,0x68,0xda,0x9c,0xe1,0x8b,0x26,0xb3,0x67,0x71,0x36,0x85,0x11,0x2c,0xc2,0xd5,0xef,0xdb,0xd9,0xb3,0x9e,0x58}, - {0x5e,0x51,0xaa,0x49,0x54,0x63,0x5b,0xed,0x3a,0x82,0xc6,0x0b,0x9f,0xc4,0x65,0xa8,0xc4,0xd1,0x42,0x5b,0xe9,0x1f,0x0c,0x85,0xb9,0x15,0xd3,0x03,0x6f,0x6d,0xd7,0x30,0x1d,0x9c,0x2f,0x63,0x0e,0xdd,0xcc,0x2e,0x15,0x31,0x89,0x76,0x96,0xb6,0xd0,0x51,0x58,0x7a,0x63,0xa8,0x6b,0xb7,0xdf,0x52,0x39,0xef,0x0e,0xa0,0x49,0x7d,0xd3,0x6d,0xc7,0xe4,0x06,0x21,0x17,0x44,0x44,0x6c,0x69,0x7f,0x8d,0x92,0x80,0xd6,0x53,0xfb,0x26,0x3f,0x4d,0x69,0xa4,0x9e,0x73,0xb4,0xb0,0x4b,0x86,0x2e,0x11,0x97,0xc6,0x10}, - {0xde,0x5f,0xbe,0x7d,0x27,0xc4,0x93,0x64,0xa2,0x7e,0xad,0x19,0xad,0x4f,0x5d,0x26,0x90,0x45,0x30,0x46,0xc8,0xdf,0x00,0x0e,0x09,0xfe,0x66,0xed,0xab,0x1c,0xe6,0x25,0x05,0xc8,0x58,0x83,0xa0,0x2a,0xa6,0x0c,0x47,0x42,0x20,0x7a,0xe3,0x4a,0x3d,0x6a,0xdc,0xed,0x11,0x3b,0xa6,0xd3,0x64,0x74,0xef,0x06,0x08,0x55,0xaf,0x9b,0xbf,0x03,0x04,0x66,0x58,0xcc,0x28,0xe1,0x13,0x3f,0x7e,0x74,0x59,0xb4,0xec,0x73,0x58,0x6f,0xf5,0x68,0x12,0xcc,0xed,0x3d,0xb6,0xa0,0x2c,0xe2,0x86,0x45,0x63,0x78,0x6d,0x56}, - {0x34,0x08,0xc1,0x9c,0x9f,0xa4,0x37,0x16,0x51,0xc4,0x9b,0xa8,0xd5,0x56,0x8e,0xbc,0xdb,0xd2,0x7f,0x7f,0x0f,0xec,0xb5,0x1c,0xd9,0x35,0xcc,0x5e,0xca,0x5b,0x97,0x33,0xd0,0x2f,0x5a,0xc6,0x85,0x42,0x05,0xa1,0xc3,0x67,0x16,0xf3,0x2a,0x11,0x64,0x6c,0x58,0xee,0x1a,0x73,0x40,0xe2,0x0a,0x68,0x2a,0xb2,0x93,0x47,0xf3,0xa5,0xfb,0x14,0xd4,0xf7,0x85,0x69,0x16,0x46,0xd7,0x3c,0x57,0x00,0xc8,0xc9,0x84,0x5e,0x3e,0x59,0x1e,0x13,0x61,0x7b,0xb6,0xf2,0xc3,0x2f,0x6c,0x52,0xfc,0x83,0xea,0x9c,0x82,0x14}, - {0xc2,0x95,0xdd,0x97,0x84,0x7b,0x43,0xff,0xa7,0xb5,0x4e,0xaa,0x30,0x4e,0x74,0x6c,0x8b,0xe8,0x85,0x3c,0x61,0x5d,0x0c,0x9e,0x73,0x81,0x75,0x5f,0x1e,0xc7,0xd9,0x2f,0xb8,0xec,0x71,0x4e,0x2f,0x0b,0xe7,0x21,0xe3,0x77,0xa4,0x40,0xb9,0xdd,0x56,0xe6,0x80,0x4f,0x1d,0xce,0xce,0x56,0x65,0xbf,0x7e,0x7b,0x5d,0x53,0xc4,0x3b,0xfc,0x05,0xdd,0xde,0xaf,0x52,0xae,0xb3,0xb8,0x24,0xcf,0x30,0x3b,0xed,0x8c,0x63,0x95,0x34,0x95,0x81,0xbe,0xa9,0x83,0xbc,0xa4,0x33,0x04,0x1f,0x65,0x5c,0x47,0x67,0x37,0x37}, - {0xd9,0xad,0xd1,0x40,0xfd,0x99,0xba,0x2f,0x27,0xd0,0xf4,0x96,0x6f,0x16,0x07,0xb3,0xae,0x3b,0xf0,0x15,0x52,0xf0,0x63,0x43,0x99,0xf9,0x18,0x3b,0x6c,0xa5,0xbe,0x1f,0x90,0x65,0x24,0x14,0xcb,0x95,0x40,0x63,0x35,0x55,0xc1,0x16,0x40,0x14,0x12,0xef,0x60,0xbc,0x10,0x89,0x0c,0x14,0x38,0x9e,0x8c,0x7c,0x90,0x30,0x57,0x90,0xf5,0x6b,0x8a,0x5b,0x41,0xe1,0xf1,0x78,0xa7,0x0f,0x7e,0xa7,0xc3,0xba,0xf7,0x9f,0x40,0x06,0x50,0x9a,0xa2,0x9a,0xb8,0xd7,0x52,0x6f,0x56,0x5a,0x63,0x7a,0xf6,0x1c,0x52,0x02}, - {0x94,0x52,0x9d,0x0a,0x0b,0xee,0x3f,0x51,0x66,0x5a,0xdf,0x0f,0x5c,0xe7,0x98,0x8f,0xce,0x07,0xe1,0xbf,0x88,0x86,0x61,0xd4,0xed,0x2c,0x38,0x71,0x7e,0x0a,0xa0,0x3f,0xe4,0x5e,0x2f,0x77,0x20,0x67,0x14,0xb1,0xce,0x9a,0x07,0x96,0xb1,0x94,0xf8,0xe8,0x4a,0x82,0xac,0x00,0x4d,0x22,0xf8,0x4a,0xc4,0x6c,0xcd,0xf7,0xd9,0x53,0x17,0x00,0x34,0xdb,0x3d,0x96,0x2d,0x23,0x69,0x3c,0x58,0x38,0x97,0xb4,0xda,0x87,0xde,0x1d,0x85,0xf2,0x91,0xa0,0xf9,0xd1,0xd7,0xaa,0xb6,0xed,0x48,0xa0,0x2f,0xfe,0xb5,0x12}, - {0x4d,0xe3,0xfc,0x96,0xc4,0xfb,0xf0,0x71,0xed,0x5b,0xf3,0xad,0x6b,0x82,0xb9,0x73,0x61,0xc5,0x28,0xff,0x61,0x72,0x04,0xd2,0x6f,0x20,0xb1,0x6f,0xf9,0x76,0x9b,0x74,0x92,0x1e,0x6f,0xad,0x26,0x7c,0x2b,0xdf,0x13,0x89,0x4b,0x50,0x23,0xd3,0x66,0x4b,0xc3,0x8b,0x1c,0x75,0xc0,0x9d,0x40,0x8c,0xb8,0xc7,0x96,0x07,0xc2,0x93,0x7e,0x6f,0x05,0xae,0xa6,0xae,0x04,0xf6,0x5a,0x1f,0x99,0x9c,0xe4,0xbe,0xf1,0x51,0x23,0xc1,0x66,0x6b,0xff,0xee,0xb5,0x08,0xa8,0x61,0x51,0x21,0xe0,0x01,0x0f,0xc1,0xce,0x0f}, - {0x44,0x1e,0xfe,0x49,0xa6,0x58,0x4d,0x64,0x7e,0x77,0xad,0x31,0xa2,0xae,0xfc,0x21,0xd2,0xd0,0x7f,0x88,0x5a,0x1c,0x44,0x02,0xf3,0x11,0xc5,0x83,0x71,0xaa,0x01,0x49,0x45,0x4e,0x24,0xc4,0x9d,0xd2,0xf2,0x3d,0x0a,0xde,0xd8,0x93,0x74,0x0e,0x02,0x2b,0x4d,0x21,0x0c,0x82,0x7e,0x06,0xc8,0x6c,0x0a,0xb9,0xea,0x6f,0x16,0x79,0x37,0x41,0xf0,0xf8,0x1a,0x8c,0x54,0xb7,0xb1,0x08,0xb4,0x99,0x62,0x24,0x7c,0x7a,0x0f,0xce,0x39,0xd9,0x06,0x1e,0xf9,0xb0,0x60,0xf7,0x13,0x12,0x6d,0x72,0x7b,0x88,0xbb,0x41}, - {0xbe,0x46,0x43,0x74,0x44,0x7d,0xe8,0x40,0x25,0x2b,0xb5,0x15,0xd4,0xda,0x48,0x1d,0x3e,0x60,0x3b,0xa1,0x18,0x8a,0x3a,0x7c,0xf7,0xbd,0xcd,0x2f,0xc1,0x28,0xb7,0x4e,0xae,0x91,0x66,0x7c,0x59,0x4c,0x23,0x7e,0xc8,0xb4,0x85,0x0a,0x3d,0x9d,0x88,0x64,0xe7,0xfa,0x4a,0x35,0x0c,0xc9,0xe2,0xda,0x1d,0x9e,0x6a,0x0c,0x07,0x1e,0x87,0x0a,0x89,0x89,0xbc,0x4b,0x99,0xb5,0x01,0x33,0x60,0x42,0xdd,0x5b,0x3a,0xae,0x6b,0x73,0x3c,0x9e,0xd5,0x19,0xe2,0xad,0x61,0x0d,0x64,0xd4,0x85,0x26,0x0f,0x30,0xe7,0x3e}, - {0xb7,0xd6,0x7d,0x9e,0xe4,0x55,0xd2,0xf5,0xac,0x1e,0x0b,0x61,0x5c,0x11,0x16,0x80,0xca,0x87,0xe1,0x92,0x5d,0x97,0x99,0x3c,0xc2,0x25,0x91,0x97,0x62,0x57,0x81,0x13,0x18,0x75,0x1e,0x84,0x47,0x79,0xfa,0x43,0xd7,0x46,0x9c,0x63,0x59,0xfa,0xc6,0xe5,0x74,0x2b,0x05,0xe3,0x1d,0x5e,0x06,0xa1,0x30,0x90,0xb8,0xcf,0xa2,0xc6,0x47,0x7d,0xe0,0xd6,0xf0,0x8e,0x14,0xd0,0xda,0x3f,0x3c,0x6f,0x54,0x91,0x9a,0x74,0x3e,0x9d,0x57,0x81,0xbb,0x26,0x10,0x62,0xec,0x71,0x80,0xec,0xc9,0x34,0x8d,0xf5,0x8c,0x14}, - {0x27,0xf0,0x34,0x79,0xf6,0x92,0xa4,0x46,0xa9,0x0a,0x84,0xf6,0xbe,0x84,0x99,0x46,0x54,0x18,0x61,0x89,0x2a,0xbc,0xa1,0x5c,0xd4,0xbb,0x5d,0xbd,0x1e,0xfa,0xf2,0x3f,0x6d,0x75,0xe4,0x9a,0x7d,0x2f,0x57,0xe2,0x7f,0x48,0xf3,0x88,0xbb,0x45,0xc3,0x56,0x8d,0xa8,0x60,0x69,0x6d,0x0b,0xd1,0x9f,0xb9,0xa1,0xae,0x4e,0xad,0xeb,0x8f,0x27,0x66,0x39,0x93,0x8c,0x1f,0x68,0xaa,0xb1,0x98,0x0c,0x29,0x20,0x9c,0x94,0x21,0x8c,0x52,0x3c,0x9d,0x21,0x91,0x52,0x11,0x39,0x7b,0x67,0x9c,0xfe,0x02,0xdd,0x04,0x41}, - {0x2a,0x42,0x24,0x11,0x5e,0xbf,0xb2,0x72,0xb5,0x3a,0xa3,0x98,0x33,0x0c,0xfa,0xa1,0x66,0xb6,0x52,0xfa,0x01,0x61,0xcb,0x94,0xd5,0x53,0xaf,0xaf,0x00,0x3b,0x86,0x2c,0xb8,0x6a,0x09,0xdb,0x06,0x4e,0x21,0x81,0x35,0x4f,0xe4,0x0c,0xc9,0xb6,0xa8,0x21,0xf5,0x2a,0x9e,0x40,0x2a,0xc1,0x24,0x65,0x81,0xa4,0xfc,0x8e,0xa4,0xb5,0x65,0x01,0x76,0x6a,0x84,0xa0,0x74,0xa4,0x90,0xf1,0xc0,0x7c,0x2f,0xcd,0x84,0xf9,0xef,0x12,0x8f,0x2b,0xaa,0x58,0x06,0x29,0x5e,0x69,0xb8,0xc8,0xfe,0xbf,0xd9,0x67,0x1b,0x59}, - {0xfa,0x9b,0xb4,0x80,0x1c,0x0d,0x2f,0x31,0x8a,0xec,0xf3,0xab,0x5e,0x51,0x79,0x59,0x88,0x1c,0xf0,0x9e,0xc0,0x33,0x70,0x72,0xcb,0x7b,0x8f,0xca,0xc7,0x2e,0xe0,0x3d,0x5d,0xb5,0x18,0x9f,0x71,0xb3,0xb9,0x99,0x1e,0x64,0x8c,0xa1,0xfa,0xe5,0x65,0xe4,0xed,0x05,0x9f,0xc2,0x36,0x11,0x08,0x61,0x8b,0x12,0x30,0x70,0x86,0x4f,0x9b,0x48,0xef,0x92,0xeb,0x3a,0x2d,0x10,0x32,0xd2,0x61,0xa8,0x16,0x61,0xb4,0x53,0x62,0xe1,0x24,0xaa,0x0b,0x19,0xe7,0xab,0x7e,0x3d,0xbf,0xbe,0x6c,0x49,0xba,0xfb,0xf5,0x49}, - {0xd4,0xcf,0x5b,0x8a,0x10,0x9a,0x94,0x30,0xeb,0x73,0x64,0xbc,0x70,0xdd,0x40,0xdc,0x1c,0x0d,0x7c,0x30,0xc1,0x94,0xc2,0x92,0x74,0x6e,0xfa,0xcb,0x6d,0xa8,0x04,0x56,0x2e,0x57,0x9c,0x1e,0x8c,0x62,0x5d,0x15,0x41,0x47,0x88,0xc5,0xac,0x86,0x4d,0x8a,0xeb,0x63,0x57,0x51,0xf6,0x52,0xa3,0x91,0x5b,0x51,0x67,0x88,0xc2,0xa6,0xa1,0x06,0xb6,0x64,0x17,0x7c,0xd4,0xd1,0x88,0x72,0x51,0x8b,0x41,0xe0,0x40,0x11,0x54,0x72,0xd1,0xf6,0xac,0x18,0x60,0x1a,0x03,0x9f,0xc6,0x42,0x27,0xfe,0x89,0x9e,0x98,0x20}, - {0x7f,0xcc,0x2d,0x3a,0xfd,0x77,0x97,0x49,0x92,0xd8,0x4f,0xa5,0x2c,0x7c,0x85,0x32,0xa0,0xe3,0x07,0xd2,0x64,0xd8,0x79,0xa2,0x29,0x7e,0xa6,0x0c,0x1d,0xed,0x03,0x04,0x2e,0xec,0xea,0x85,0x8b,0x27,0x74,0x16,0xdf,0x2b,0xcb,0x7a,0x07,0xdc,0x21,0x56,0x5a,0xf4,0xcb,0x61,0x16,0x4c,0x0a,0x64,0xd3,0x95,0x05,0xf7,0x50,0x99,0x0b,0x73,0x52,0xc5,0x4e,0x87,0x35,0x2d,0x4b,0xc9,0x8d,0x6f,0x24,0x98,0xcf,0xc8,0xe6,0xc5,0xce,0x35,0xc0,0x16,0xfa,0x46,0xcb,0xf7,0xcc,0x3d,0x30,0x08,0x43,0x45,0xd7,0x5b}, - {0xc2,0x4c,0xb2,0x28,0x95,0xd1,0x9a,0x7f,0x81,0xc1,0x35,0x63,0x65,0x54,0x6b,0x7f,0x36,0x72,0xc0,0x4f,0x6e,0xb6,0xb8,0x66,0x83,0xad,0x80,0x73,0x00,0x78,0x3a,0x13,0x2a,0x79,0xe7,0x15,0x21,0x93,0xc4,0x85,0xc9,0xdd,0xcd,0xbd,0xa2,0x89,0x4c,0xc6,0x62,0xd7,0xa3,0xad,0xa8,0x3d,0x1e,0x9d,0x2c,0xf8,0x67,0x30,0x12,0xdb,0xb7,0x5b,0xbe,0x62,0xca,0xc6,0x67,0xf4,0x61,0x09,0xee,0x52,0x19,0x21,0xd6,0x21,0xec,0x04,0x70,0x47,0xd5,0x9b,0x77,0x60,0x23,0x18,0xd2,0xe0,0xf0,0x58,0x6d,0xca,0x0d,0x74}, - {0x4e,0xce,0xcf,0x52,0x07,0xee,0x48,0xdf,0xb7,0x08,0xec,0x06,0xf3,0xfa,0xff,0xc3,0xc4,0x59,0x54,0xb9,0x2a,0x0b,0x71,0x05,0x8d,0xa3,0x3e,0x96,0xfa,0x25,0x1d,0x16,0x3c,0x43,0x78,0x04,0x57,0x8c,0x1a,0x23,0x9d,0x43,0x81,0xc2,0x0e,0x27,0xb5,0xb7,0x9f,0x07,0xd9,0xe3,0xea,0x99,0xaa,0xdb,0xd9,0x03,0x2b,0x6c,0x25,0xf5,0x03,0x2c,0x7d,0xa4,0x53,0x7b,0x75,0x18,0x0f,0x79,0x79,0x58,0x0c,0xcf,0x30,0x01,0x7b,0x30,0xf9,0xf7,0x7e,0x25,0x77,0x3d,0x90,0x31,0xaf,0xbb,0x96,0xbd,0xbd,0x68,0x94,0x69}, - {0xcf,0xfe,0xda,0xf4,0x46,0x2f,0x1f,0xbd,0xf7,0xd6,0x7f,0xa4,0x14,0x01,0xef,0x7c,0x7f,0xb3,0x47,0x4a,0xda,0xfd,0x1f,0xd3,0x85,0x57,0x90,0x73,0xa4,0x19,0x52,0x52,0x48,0x19,0xa9,0x6a,0xe6,0x3d,0xdd,0xd8,0xcc,0xd2,0xc0,0x2f,0xc2,0x64,0x50,0x48,0x2f,0xea,0xfd,0x34,0x66,0x24,0x48,0x9b,0x3a,0x2e,0x4a,0x6c,0x4e,0x1c,0x3e,0x29,0xe1,0x12,0x51,0x92,0x4b,0x13,0x6e,0x37,0xa0,0x5d,0xa1,0xdc,0xb5,0x78,0x37,0x70,0x11,0x31,0x1c,0x46,0xaf,0x89,0x45,0xb0,0x23,0x28,0x03,0x7f,0x44,0x5c,0x60,0x5b}, - {0x89,0x7c,0xc4,0x20,0x59,0x80,0x65,0xb9,0xcc,0x8f,0x3b,0x92,0x0c,0x10,0xf0,0xe7,0x77,0xef,0xe2,0x02,0x65,0x25,0x01,0x00,0xee,0xb3,0xae,0xa8,0xce,0x6d,0xa7,0x24,0x4c,0xf0,0xe7,0xf0,0xc6,0xfe,0xe9,0x3b,0x62,0x49,0xe3,0x75,0x9e,0x57,0x6a,0x86,0x1a,0xe6,0x1d,0x1e,0x16,0xef,0x42,0x55,0xd5,0xbd,0x5a,0xcc,0xf4,0xfe,0x12,0x2f,0x40,0xc7,0xc0,0xdf,0xb2,0x22,0x45,0x0a,0x07,0xa4,0xc9,0x40,0x7f,0x6e,0xd0,0x10,0x68,0xf6,0xcf,0x78,0x41,0x14,0xcf,0xc6,0x90,0x37,0xa4,0x18,0x25,0x7b,0x60,0x5e}, - {0x18,0x18,0xdf,0x6c,0x8f,0x1d,0xb3,0x58,0xa2,0x58,0x62,0xc3,0x4f,0xa7,0xcf,0x35,0x6e,0x1d,0xe6,0x66,0x4f,0xff,0xb3,0xe1,0xf7,0xd5,0xcd,0x6c,0xab,0xac,0x67,0x50,0x14,0xcf,0x96,0xa5,0x1c,0x43,0x2c,0xa0,0x00,0xe4,0xd3,0xae,0x40,0x2d,0xc4,0xe3,0xdb,0x26,0x0f,0x2e,0x80,0x26,0x45,0xd2,0x68,0x70,0x45,0x9e,0x13,0x33,0x1f,0x20,0x51,0x9d,0x03,0x08,0x6b,0x7f,0x52,0xfd,0x06,0x00,0x7c,0x01,0x64,0x49,0xb1,0x18,0xa8,0xa4,0x25,0x2e,0xb0,0x0e,0x22,0xd5,0x75,0x03,0x46,0x62,0x88,0xba,0x7c,0x39}, - {0xb2,0x59,0x59,0xf0,0x93,0x30,0xc1,0x30,0x76,0x79,0xa9,0xe9,0x8d,0xa1,0x3a,0xe2,0x26,0x5e,0x1d,0x72,0x91,0xd4,0x2f,0x22,0x3a,0x6c,0x6e,0x76,0x20,0xd3,0x39,0x23,0xe7,0x79,0x13,0xc8,0xfb,0xc3,0x15,0x78,0xf1,0x2a,0xe1,0xdd,0x20,0x94,0x61,0xa6,0xd5,0xfd,0xa8,0x85,0xf8,0xc0,0xa9,0xff,0x52,0xc2,0xe1,0xc1,0x22,0x40,0x1b,0x77,0xa7,0x2f,0x3a,0x51,0x86,0xd9,0x7d,0xd8,0x08,0xcf,0xd4,0xf9,0x71,0x9b,0xac,0xf5,0xb3,0x83,0xa2,0x1e,0x1b,0xc3,0x6b,0xd0,0x76,0x1a,0x97,0x19,0x92,0x18,0x1a,0x33}, - {0xc6,0x80,0x4f,0xfb,0x45,0x6f,0x16,0xf5,0xcf,0x75,0xc7,0x61,0xde,0xc7,0x36,0x9c,0x1c,0xd9,0x41,0x90,0x1b,0xe8,0xd4,0xe3,0x21,0xfe,0xbd,0x83,0x6b,0x7c,0x16,0x31,0xaf,0x72,0x75,0x9d,0x3a,0x2f,0x51,0x26,0x9e,0x4a,0x07,0x68,0x88,0xe2,0xcb,0x5b,0xc4,0xf7,0x80,0x11,0xc1,0xc1,0xed,0x84,0x7b,0xa6,0x49,0xf6,0x9f,0x61,0xc9,0x1a,0x68,0x10,0x4b,0x52,0x42,0x38,0x2b,0xf2,0x87,0xe9,0x9c,0xee,0x3b,0x34,0x68,0x50,0xc8,0x50,0x62,0x4a,0x84,0x71,0x9d,0xfc,0x11,0xb1,0x08,0x1f,0x34,0x36,0x24,0x61}, - {0x8d,0x89,0x4e,0x87,0xdb,0x41,0x9d,0xd9,0x20,0xdc,0x07,0x6c,0xf1,0xa5,0xfe,0x09,0xbc,0x9b,0x0f,0xd0,0x67,0x2c,0x3d,0x79,0x40,0xff,0x5e,0x9e,0x30,0xe2,0xeb,0x46,0x38,0x26,0x2d,0x1a,0xe3,0x49,0x63,0x8b,0x35,0xfd,0xd3,0x9b,0x00,0xb7,0xdf,0x9d,0xa4,0x6b,0xa0,0xa3,0xb8,0xf1,0x8b,0x7f,0x45,0x04,0xd9,0x78,0x31,0xaa,0x22,0x15,0x38,0x49,0x61,0x69,0x53,0x2f,0x38,0x2c,0x10,0x6d,0x2d,0xb7,0x9a,0x40,0xfe,0xda,0x27,0xf2,0x46,0xb6,0x91,0x33,0xc8,0xe8,0x6c,0x30,0x24,0x05,0xf5,0x70,0xfe,0x45}, - {0x8c,0x0b,0x0c,0x96,0xa6,0x75,0x48,0xda,0x20,0x2f,0x0e,0xef,0x76,0xd0,0x68,0x5b,0xd4,0x8f,0x0b,0x3d,0xcf,0x51,0xfb,0x07,0xd4,0x92,0xe3,0xa0,0x23,0x16,0x8d,0x42,0x91,0x14,0x95,0xc8,0x20,0x49,0xf2,0x62,0xa2,0x0c,0x63,0x3f,0xc8,0x07,0xf0,0x05,0xb8,0xd4,0xc9,0xf5,0xd2,0x45,0xbb,0x6f,0x45,0x22,0x7a,0xb5,0x6d,0x9f,0x61,0x16,0xfd,0x08,0xa3,0x01,0x44,0x4a,0x4f,0x08,0xac,0xca,0xa5,0x76,0xc3,0x19,0x22,0xa8,0x7d,0xbc,0xd1,0x43,0x46,0xde,0xb8,0xde,0xc6,0x38,0xbd,0x60,0x2d,0x59,0x81,0x1d}, - {0x5f,0xac,0x0d,0xa6,0x56,0x87,0x36,0x61,0x57,0xdc,0xab,0xeb,0x6a,0x2f,0xe0,0x17,0x7d,0x0f,0xce,0x4c,0x2d,0x3f,0x19,0x7f,0xf0,0xdc,0xec,0x89,0x77,0x4a,0x23,0x20,0xe8,0xc5,0x85,0x7b,0x9f,0xb6,0x65,0x87,0xb2,0xba,0x68,0xd1,0x8b,0x67,0xf0,0x6f,0x9b,0x0f,0x33,0x1d,0x7c,0xe7,0x70,0x3a,0x7c,0x8e,0xaf,0xb0,0x51,0x6d,0x5f,0x3a,0x52,0xb2,0x78,0x71,0xb6,0x0d,0xd2,0x76,0x60,0xd1,0x1e,0xd5,0xf9,0x34,0x1c,0x07,0x70,0x11,0xe4,0xb3,0x20,0x4a,0x2a,0xf6,0x66,0xe3,0xff,0x3c,0x35,0x82,0xd6,0x7c}, - {0xb6,0xfa,0x87,0xd8,0x5b,0xa4,0xe1,0x0b,0x6e,0x3b,0x40,0xba,0x32,0x6a,0x84,0x2a,0x00,0x60,0x6e,0xe9,0x12,0x10,0x92,0xd9,0x43,0x09,0xdc,0x3b,0x86,0xc8,0x38,0x28,0xf3,0xf4,0xac,0x68,0x60,0xcd,0x65,0xa6,0xd3,0xe3,0xd7,0x3c,0x18,0x2d,0xd9,0x42,0xd9,0x25,0x60,0x33,0x9d,0x38,0x59,0x57,0xff,0xd8,0x2c,0x2b,0x3b,0x25,0xf0,0x3e,0x30,0x50,0x46,0x4a,0xcf,0xb0,0x6b,0xd1,0xab,0x77,0xc5,0x15,0x41,0x6b,0x49,0xfa,0x9d,0x41,0xab,0xf4,0x8a,0xae,0xcf,0x82,0x12,0x28,0xa8,0x06,0xa6,0xb8,0xdc,0x21}, - {0xc8,0x9f,0x9d,0x8c,0x46,0x04,0x60,0x5c,0xcb,0xa3,0x2a,0xd4,0x6e,0x09,0x40,0x25,0x9c,0x2f,0xee,0x12,0x4c,0x4d,0x5b,0x12,0xab,0x1d,0xa3,0x94,0x81,0xd0,0xc3,0x0b,0xba,0x31,0x77,0xbe,0xfa,0x00,0x8d,0x9a,0x89,0x18,0x9e,0x62,0x7e,0x60,0x03,0x82,0x7f,0xd9,0xf3,0x43,0x37,0x02,0xcc,0xb2,0x8b,0x67,0x6f,0x6c,0xbf,0x0d,0x84,0x5d,0x8b,0xe1,0x9f,0x30,0x0d,0x38,0x6e,0x70,0xc7,0x65,0xe1,0xb9,0xa6,0x2d,0xb0,0x6e,0xab,0x20,0xae,0x7d,0x99,0xba,0xbb,0x57,0xdd,0x96,0xc1,0x2a,0x23,0x76,0x42,0x3a}, - {0xfa,0x84,0x70,0x8a,0x2c,0x43,0x42,0x4b,0x45,0xe5,0xb9,0xdf,0xe3,0x19,0x8a,0x89,0x5d,0xe4,0x58,0x9c,0x21,0x00,0x9f,0xbe,0xd1,0xeb,0x6d,0xa1,0xce,0x77,0xf1,0x1f,0xcb,0x7e,0x44,0xdb,0x72,0xc1,0xf8,0x3b,0xbd,0x2d,0x28,0xc6,0x1f,0xc4,0xcf,0x5f,0xfe,0x15,0xaa,0x75,0xc0,0xff,0xac,0x80,0xf9,0xa9,0xe1,0x24,0xe8,0xc9,0x70,0x07,0xfd,0xb5,0xb5,0x45,0x9a,0xd9,0x61,0xcf,0x24,0x79,0x3a,0x1b,0xe9,0x84,0x09,0x86,0x89,0x3e,0x3e,0x30,0x19,0x09,0x30,0xe7,0x1e,0x0b,0x50,0x41,0xfd,0x64,0xf2,0x39}, - {0x9c,0xe2,0xe7,0xdb,0x17,0x34,0xad,0xa7,0x9c,0x13,0x9c,0x2b,0x6a,0x37,0x94,0xbd,0xa9,0x7b,0x59,0x93,0x8e,0x1b,0xe9,0xa0,0x40,0x98,0x88,0x68,0x34,0xd7,0x12,0x17,0xe1,0x7b,0x09,0xfe,0xab,0x4a,0x9b,0xd1,0x29,0x19,0xe0,0xdf,0xe1,0xfc,0x6d,0xa4,0xff,0xf1,0xa6,0x2c,0x94,0x08,0xc9,0xc3,0x4e,0xf1,0x35,0x2c,0x27,0x21,0xc6,0x65,0xdd,0x93,0x31,0xce,0xf8,0x89,0x2b,0xe7,0xbb,0xc0,0x25,0xa1,0x56,0x33,0x10,0x4d,0x83,0xfe,0x1c,0x2e,0x3d,0xa9,0x19,0x04,0x72,0xe2,0x9c,0xb1,0x0a,0x80,0xf9,0x22}, - {0xcb,0xf8,0x9e,0x3e,0x8a,0x36,0x5a,0x60,0x15,0x47,0x50,0xa5,0x22,0xc0,0xe9,0xe3,0x8f,0x24,0x24,0x5f,0xb0,0x48,0x3d,0x55,0xe5,0x26,0x76,0x64,0xcd,0x16,0xf4,0x13,0xac,0xfd,0x6e,0x9a,0xdd,0x9f,0x02,0x42,0x41,0x49,0xa5,0x34,0xbe,0xce,0x12,0xb9,0x7b,0xf3,0xbd,0x87,0xb9,0x64,0x0f,0x64,0xb4,0xca,0x98,0x85,0xd3,0xa4,0x71,0x41,0x8c,0x4c,0xc9,0x99,0xaa,0x58,0x27,0xfa,0x07,0xb8,0x00,0xb0,0x6f,0x6f,0x00,0x23,0x92,0x53,0xda,0xad,0xdd,0x91,0xd2,0xfb,0xab,0xd1,0x4b,0x57,0xfa,0x14,0x82,0x50}, - {0x4b,0xfe,0xd6,0x3e,0x15,0x69,0x02,0xc2,0xc4,0x77,0x1d,0x51,0x39,0x67,0x5a,0xa6,0x94,0xaf,0x14,0x2c,0x46,0x26,0xde,0xcb,0x4b,0xa7,0xab,0x6f,0xec,0x60,0xf9,0x22,0xd6,0x03,0xd0,0x53,0xbb,0x15,0x1a,0x46,0x65,0xc9,0xf3,0xbc,0x88,0x28,0x10,0xb2,0x5a,0x3a,0x68,0x6c,0x75,0x76,0xc5,0x27,0x47,0xb4,0x6c,0xc8,0xa4,0x58,0x77,0x3a,0x76,0x50,0xae,0x93,0xf6,0x11,0x81,0x54,0xa6,0x54,0xfd,0x1d,0xdf,0x21,0xae,0x1d,0x65,0x5e,0x11,0xf3,0x90,0x8c,0x24,0x12,0x94,0xf4,0xe7,0x8d,0x5f,0xd1,0x9f,0x5d}, - {0x7f,0x72,0x63,0x6d,0xd3,0x08,0x14,0x03,0x33,0xb5,0xc7,0xd7,0xef,0x9a,0x37,0x6a,0x4b,0xe2,0xae,0xcc,0xc5,0x8f,0xe1,0xa9,0xd3,0xbe,0x8f,0x4f,0x91,0x35,0x2f,0x33,0x1e,0x52,0xd7,0xee,0x2a,0x4d,0x24,0x3f,0x15,0x96,0x2e,0x43,0x28,0x90,0x3a,0x8e,0xd4,0x16,0x9c,0x2e,0x77,0xba,0x64,0xe1,0xd8,0x98,0xeb,0x47,0xfa,0x87,0xc1,0x3b,0x0c,0xc2,0x86,0xea,0x15,0x01,0x47,0x6d,0x25,0xd1,0x46,0x6c,0xcb,0xb7,0x8a,0x99,0x88,0x01,0x66,0x3a,0xb5,0x32,0x78,0xd7,0x03,0xba,0x6f,0x90,0xce,0x81,0x0d,0x45}, - {0x75,0x52,0x20,0xa6,0xa1,0xb6,0x7b,0x6e,0x83,0x8e,0x3c,0x41,0xd7,0x21,0x4f,0xaa,0xb2,0x5c,0x8f,0xe8,0x55,0xd1,0x56,0x6f,0xe1,0x5b,0x34,0xa6,0x4b,0x5d,0xe2,0x2d,0x3f,0x74,0xae,0x1c,0x96,0xd8,0x74,0xd0,0xed,0x63,0x1c,0xee,0xf5,0x18,0x6d,0xf8,0x29,0xed,0xf4,0xe7,0x5b,0xc5,0xbd,0x97,0x08,0xb1,0x3a,0x66,0x79,0xd2,0xba,0x4c,0xcd,0x1f,0xd7,0xa0,0x24,0x90,0xd1,0x80,0xf8,0x8a,0x28,0xfb,0x0a,0xc2,0x25,0xc5,0x19,0x64,0x3a,0x5f,0x4b,0x97,0xa3,0xb1,0x33,0x72,0x00,0xe2,0xef,0xbc,0x7f,0x7d}, - {0x01,0x28,0x6b,0x26,0x6a,0x1e,0xef,0xfa,0x16,0x9f,0x73,0xd5,0xc4,0x68,0x6c,0x86,0x2c,0x76,0x03,0x1b,0xbc,0x2f,0x8a,0xf6,0x8d,0x5a,0xb7,0x87,0x5e,0x43,0x75,0x59,0x94,0x90,0xc2,0xf3,0xc5,0x5d,0x7c,0xcd,0xab,0x05,0x91,0x2a,0x9a,0xa2,0x81,0xc7,0x58,0x30,0x1c,0x42,0x36,0x1d,0xc6,0x80,0xd7,0xd4,0xd8,0xdc,0x96,0xd1,0x9c,0x4f,0x68,0x37,0x7b,0x6a,0xd8,0x97,0x92,0x19,0x63,0x7a,0xd1,0x1a,0x24,0x58,0xd0,0xd0,0x17,0x0c,0x1c,0x5c,0xad,0x9c,0x02,0xba,0x07,0x03,0x7a,0x38,0x84,0xd0,0xcd,0x7c}, - {0x17,0x04,0x26,0x6d,0x2c,0x42,0xa6,0xdc,0xbd,0x40,0x82,0x94,0x50,0x3d,0x15,0xae,0x77,0xc6,0x68,0xfb,0xb4,0xc1,0xc0,0xa9,0x53,0xcf,0xd0,0x61,0xed,0xd0,0x8b,0x42,0x93,0xcc,0x60,0x67,0x18,0x84,0x0c,0x9b,0x99,0x2a,0xb3,0x1a,0x7a,0x00,0xae,0xcd,0x18,0xda,0x0b,0x62,0x86,0xec,0x8d,0xa8,0x44,0xca,0x90,0x81,0x84,0xca,0x93,0x35,0xa7,0x9a,0x84,0x5e,0x9a,0x18,0x13,0x92,0xcd,0xfa,0xd8,0x65,0x35,0xc3,0xd8,0xd4,0xd1,0xbb,0xfd,0x53,0x5b,0x54,0x52,0x8c,0xe6,0x63,0x2d,0xda,0x08,0x83,0x39,0x27}, - {0x13,0xd4,0x5e,0x43,0x28,0x8d,0xc3,0x42,0xc9,0xcc,0x78,0x32,0x60,0xf3,0x50,0xbd,0xef,0x03,0xda,0x79,0x1a,0xab,0x07,0xbb,0x55,0x33,0x8c,0xbe,0xae,0x97,0x95,0x26,0x53,0x24,0x70,0x0a,0x4c,0x0e,0xa1,0xb9,0xde,0x1b,0x7d,0xd5,0x66,0x58,0xa2,0x0f,0xf7,0xda,0x27,0xcd,0xb5,0xd9,0xb9,0xff,0xfd,0x33,0x2c,0x49,0x45,0x29,0x2c,0x57,0xbe,0x30,0xcd,0xd6,0x45,0xc7,0x7f,0xc7,0xfb,0xae,0xba,0xe3,0xd3,0xe8,0xdf,0xe4,0x0c,0xda,0x5d,0xaa,0x30,0x88,0x2c,0xa2,0x80,0xca,0x5b,0xc0,0x98,0x54,0x98,0x7f}, - {0x17,0xe1,0x0b,0x9f,0x88,0xce,0x49,0x38,0x88,0xa2,0x54,0x7b,0x1b,0xad,0x05,0x80,0x1c,0x92,0xfc,0x23,0x9f,0xc3,0xa3,0x3d,0x04,0xf3,0x31,0x0a,0x47,0xec,0xc2,0x76,0x63,0x63,0xbf,0x0f,0x52,0x15,0x56,0xd3,0xa6,0xfb,0x4d,0xcf,0x45,0x5a,0x04,0x08,0xc2,0xa0,0x3f,0x87,0xbc,0x4f,0xc2,0xee,0xe7,0x12,0x9b,0xd6,0x3c,0x65,0xf2,0x30,0x85,0x0c,0xc1,0xaa,0x38,0xc9,0x08,0x8a,0xcb,0x6b,0x27,0xdb,0x60,0x9b,0x17,0x46,0x70,0xac,0x6f,0x0e,0x1e,0xc0,0x20,0xa9,0xda,0x73,0x64,0x59,0xf1,0x73,0x12,0x2f}, - {0x11,0x1e,0xe0,0x8a,0x7c,0xfc,0x39,0x47,0x9f,0xab,0x6a,0x4a,0x90,0x74,0x52,0xfd,0x2e,0x8f,0x72,0x87,0x82,0x8a,0xd9,0x41,0xf2,0x69,0x5b,0xd8,0x2a,0x57,0x9e,0x5d,0xc0,0x0b,0xa7,0x55,0xd7,0x8b,0x48,0x30,0xe7,0x42,0xd4,0xf1,0xa4,0xb5,0xd6,0x06,0x62,0x61,0x59,0xbc,0x9e,0xa6,0xd1,0xea,0x84,0xf7,0xc5,0xed,0x97,0x19,0xac,0x38,0x3b,0xb1,0x51,0xa7,0x17,0xb5,0x66,0x06,0x8c,0x85,0x9b,0x7e,0x86,0x06,0x7d,0x74,0x49,0xde,0x4d,0x45,0x11,0xc0,0xac,0xac,0x9c,0xe6,0xe9,0xbf,0x9c,0xcd,0xdf,0x22}, - {0xd9,0x0c,0x0d,0xc3,0xe0,0xd2,0xdb,0x8d,0x33,0x43,0xbb,0xac,0x5f,0x66,0x8e,0xad,0x1f,0x96,0x2a,0x32,0x8c,0x25,0x6b,0x8f,0xc7,0xc1,0x48,0x54,0xc0,0x16,0x29,0x6b,0xa1,0xe0,0x3b,0x10,0xb4,0x59,0xec,0x56,0x69,0xf9,0x59,0xd2,0xec,0xba,0xe3,0x2e,0x32,0xcd,0xf5,0x13,0x94,0xb2,0x7c,0x79,0x72,0xe4,0xcd,0x24,0x78,0x87,0xe9,0x0f,0x3b,0x91,0xba,0x0a,0xd1,0x34,0xdb,0x7e,0x0e,0xac,0x6d,0x2e,0x82,0xcd,0xa3,0x4e,0x15,0xf8,0x78,0x65,0xff,0x3d,0x08,0x66,0x17,0x0a,0xf0,0x7f,0x30,0x3f,0x30,0x4c}, - {0x85,0x8c,0xb2,0x17,0xd6,0x3b,0x0a,0xd3,0xea,0x3b,0x77,0x39,0xb7,0x77,0xd3,0xc5,0xbf,0x5c,0x6a,0x1e,0x8c,0xe7,0xc6,0xc6,0xc4,0xb7,0x2a,0x8b,0xf7,0xb8,0x61,0x0d,0x00,0x45,0xd9,0x0d,0x58,0x03,0xfc,0x29,0x93,0xec,0xbb,0x6f,0xa4,0x7a,0xd2,0xec,0xf8,0xa7,0xe2,0xc2,0x5f,0x15,0x0a,0x13,0xd5,0xa1,0x06,0xb7,0x1a,0x15,0x6b,0x41,0xb0,0x36,0xc1,0xe9,0xef,0xd7,0xa8,0x56,0x20,0x4b,0xe4,0x58,0xcd,0xe5,0x07,0xbd,0xab,0xe0,0x57,0x1b,0xda,0x2f,0xe6,0xaf,0xd2,0xe8,0x77,0x42,0xf7,0x2a,0x1a,0x19}, - {0x31,0x14,0x3c,0xc5,0x4b,0xf7,0x16,0xce,0xde,0xed,0x72,0x20,0xce,0x25,0x97,0x2b,0xe7,0x3e,0xb2,0xb5,0x6f,0xc3,0xb9,0xb8,0x08,0xc9,0x5c,0x0b,0x45,0x0e,0x2e,0x7e,0xfb,0x0e,0x46,0x4f,0x43,0x2b,0xe6,0x9f,0xd6,0x07,0x36,0xa6,0xd4,0x03,0xd3,0xde,0x24,0xda,0xa0,0xb7,0x0e,0x21,0x52,0xf0,0x93,0x5b,0x54,0x00,0xbe,0x7d,0x7e,0x23,0x30,0xb4,0x01,0x67,0xed,0x75,0x35,0x01,0x10,0xfd,0x0b,0x9f,0xe6,0x94,0x10,0x23,0x22,0x7f,0xe4,0x83,0x15,0x0f,0x32,0x75,0xe3,0x55,0x11,0xb1,0x99,0xa6,0xaf,0x71}, - {0x1d,0xb6,0x53,0x39,0x9b,0x6f,0xce,0x65,0xe6,0x41,0xa1,0xaf,0xea,0x39,0x58,0xc6,0xfe,0x59,0xf7,0xa9,0xfd,0x5f,0x43,0x0f,0x8e,0xc2,0xb1,0xc2,0xe9,0x42,0x11,0x02,0xd6,0x50,0x3b,0x47,0x1c,0x3c,0x42,0xea,0x10,0xef,0x38,0x3b,0x1f,0x7a,0xe8,0x51,0x95,0xbe,0xc9,0xb2,0x5f,0xbf,0x84,0x9b,0x1c,0x9a,0xf8,0x78,0xbc,0x1f,0x73,0x00,0x80,0x18,0xf8,0x48,0x18,0xc7,0x30,0xe4,0x19,0xc1,0xce,0x5e,0x22,0x0c,0x96,0xbf,0xe3,0x15,0xba,0x6b,0x83,0xe0,0xda,0xb6,0x08,0x58,0xe1,0x47,0x33,0x6f,0x4d,0x4c}, - {0xc9,0x1f,0x7d,0xc1,0xcf,0xec,0xf7,0x18,0x14,0x3c,0x40,0x51,0xa6,0xf5,0x75,0x6c,0xdf,0x0c,0xee,0xf7,0x2b,0x71,0xde,0xdb,0x22,0x7a,0xe4,0xa7,0xaa,0xdd,0x3f,0x19,0x70,0x19,0x8f,0x98,0xfc,0xdd,0x0c,0x2f,0x1b,0xf5,0xb9,0xb0,0x27,0x62,0x91,0x6b,0xbe,0x76,0x91,0x77,0xc4,0xb6,0xc7,0x6e,0xa8,0x9f,0x8f,0xa8,0x00,0x95,0xbf,0x38,0x6f,0x87,0xe8,0x37,0x3c,0xc9,0xd2,0x1f,0x2c,0x46,0xd1,0x18,0x5a,0x1e,0xf6,0xa2,0x76,0x12,0x24,0x39,0x82,0xf5,0x80,0x50,0x69,0x49,0x0d,0xbf,0x9e,0xb9,0x6f,0x6a}, - {0xeb,0x55,0x08,0x56,0xbb,0xc1,0x46,0x6a,0x9d,0xf0,0x93,0xf8,0x38,0xbb,0x16,0x24,0xc1,0xac,0x71,0x8f,0x37,0x11,0x1d,0xd7,0xea,0x96,0x18,0xa3,0x14,0x69,0xf7,0x75,0xc6,0x23,0xe4,0xb6,0xb5,0x22,0xb1,0xee,0x8e,0xff,0x86,0xf2,0x10,0x70,0x9d,0x93,0x8c,0x5d,0xcf,0x1d,0x83,0x2a,0xa9,0x90,0x10,0xeb,0xc5,0x42,0x9f,0xda,0x6f,0x13,0xd1,0xbd,0x05,0xa3,0xb1,0xdf,0x4c,0xf9,0x08,0x2c,0xf8,0x9f,0x9d,0x4b,0x36,0x0f,0x8a,0x58,0xbb,0xc3,0xa5,0xd8,0x87,0x2a,0xba,0xdc,0xe8,0x0b,0x51,0x83,0x21,0x02}, - {0x14,0x2d,0xad,0x5e,0x38,0x66,0xf7,0x4a,0x30,0x58,0x7c,0xca,0x80,0xd8,0x8e,0xa0,0x3d,0x1e,0x21,0x10,0xe6,0xa6,0x13,0x0d,0x03,0x6c,0x80,0x7b,0xe1,0x1c,0x07,0x6a,0x7f,0x7a,0x30,0x43,0x01,0x71,0x5a,0x9d,0x5f,0xa4,0x7d,0xc4,0x9e,0xde,0x63,0xb0,0xd3,0x7a,0x92,0xbe,0x52,0xfe,0xbb,0x22,0x6c,0x42,0x40,0xfd,0x41,0xc4,0x87,0x13,0xf8,0x8a,0x97,0x87,0xd1,0xc3,0xd3,0xb5,0x13,0x44,0x0e,0x7f,0x3d,0x5a,0x2b,0x72,0xa0,0x7c,0x47,0xbb,0x48,0x48,0x7b,0x0d,0x92,0xdc,0x1e,0xaf,0x6a,0xb2,0x71,0x31}, - {0xa8,0x4c,0x56,0x97,0x90,0x31,0x2f,0xa9,0x19,0xe1,0x75,0x22,0x4c,0xb8,0x7b,0xff,0x50,0x51,0x87,0xa4,0x37,0xfe,0x55,0x4f,0x5a,0x83,0xf0,0x3c,0x87,0xd4,0x1f,0x22,0xd1,0x47,0x8a,0xb2,0xd8,0xb7,0x0d,0xa6,0xf1,0xa4,0x70,0x17,0xd6,0x14,0xbf,0xa6,0x58,0xbd,0xdd,0x53,0x93,0xf8,0xa1,0xd4,0xe9,0x43,0x42,0x34,0x63,0x4a,0x51,0x6c,0x41,0x63,0x15,0x3a,0x4f,0x20,0x22,0x23,0x2d,0x03,0x0a,0xba,0xe9,0xe0,0x73,0xfb,0x0e,0x03,0x0f,0x41,0x4c,0xdd,0xe0,0xfc,0xaa,0x4a,0x92,0xfb,0x96,0xa5,0xda,0x48}, - {0xc7,0x9c,0xa5,0x5c,0x66,0x8e,0xca,0x6e,0xa0,0xac,0x38,0x2e,0x4b,0x25,0x47,0xa8,0xce,0x17,0x1e,0xd2,0x08,0xc7,0xaf,0x31,0xf7,0x4a,0xd8,0xca,0xfc,0xd6,0x6d,0x67,0x93,0x97,0x4c,0xc8,0x5d,0x1d,0xf6,0x14,0x06,0x82,0x41,0xef,0xe3,0xf9,0x41,0x99,0xac,0x77,0x62,0x34,0x8f,0xb8,0xf5,0xcd,0xa9,0x79,0x8a,0x0e,0xfa,0x37,0xc8,0x58,0x58,0x90,0xfc,0x96,0x85,0x68,0xf9,0x0c,0x1b,0xa0,0x56,0x7b,0xf3,0xbb,0xdc,0x1d,0x6a,0xd6,0x35,0x49,0x7d,0xe7,0xc2,0xdc,0x0a,0x7f,0xa5,0xc6,0xf2,0x73,0x4f,0x1c}, - {0xbb,0xa0,0x5f,0x30,0xbd,0x4f,0x7a,0x0e,0xad,0x63,0xc6,0x54,0xe0,0x4c,0x9d,0x82,0x48,0x38,0xe3,0x2f,0x83,0xc3,0x21,0xf4,0x42,0x4c,0xf6,0x1b,0x0d,0xc8,0x5a,0x79,0x84,0x34,0x7c,0xfc,0x6e,0x70,0x6e,0xb3,0x61,0xcf,0xc1,0xc3,0xb4,0xc9,0xdf,0x73,0xe5,0xc7,0x1c,0x78,0xc9,0x79,0x1d,0xeb,0x5c,0x67,0xaf,0x7d,0xdb,0x9a,0x45,0x70,0xb3,0x2b,0xb4,0x91,0x49,0xdb,0x91,0x1b,0xca,0xdc,0x02,0x4b,0x23,0x96,0x26,0x57,0xdc,0x78,0x8c,0x1f,0xe5,0x9e,0xdf,0x9f,0xd3,0x1f,0xe2,0x8c,0x84,0x62,0xe1,0x5f}, - {0x1a,0x96,0x94,0xe1,0x4f,0x21,0x59,0x4e,0x4f,0xcd,0x71,0x0d,0xc7,0x7d,0xbe,0x49,0x2d,0xf2,0x50,0x3b,0xd2,0xcf,0x00,0x93,0x32,0x72,0x91,0xfc,0x46,0xd4,0x89,0x47,0x08,0xb2,0x7c,0x5d,0x2d,0x85,0x79,0x28,0xe7,0xf2,0x7d,0x68,0x70,0xdd,0xde,0xb8,0x91,0x78,0x68,0x21,0xab,0xff,0x0b,0xdc,0x35,0xaa,0x7d,0x67,0x43,0xc0,0x44,0x2b,0x8e,0xb7,0x4e,0x07,0xab,0x87,0x1c,0x1a,0x67,0xf4,0xda,0x99,0x8e,0xd1,0xc6,0xfa,0x67,0x90,0x4f,0x48,0xcd,0xbb,0xac,0x3e,0xe4,0xa4,0xb9,0x2b,0xef,0x2e,0xc5,0x60}, - {0xf1,0x8b,0xfd,0x3b,0xbc,0x89,0x5d,0x0b,0x1a,0x55,0xf3,0xc9,0x37,0x92,0x6b,0xb0,0xf5,0x28,0x30,0xd5,0xb0,0x16,0x4c,0x0e,0xab,0xca,0xcf,0x2c,0x31,0x9c,0xbc,0x10,0x11,0x6d,0xae,0x7c,0xc2,0xc5,0x2b,0x70,0xab,0x8c,0xa4,0x54,0x9b,0x69,0xc7,0x44,0xb2,0x2e,0x49,0xba,0x56,0x40,0xbc,0xef,0x6d,0x67,0xb6,0xd9,0x48,0x72,0xd7,0x70,0x5b,0xa0,0xc2,0x3e,0x4b,0xe8,0x8a,0xaa,0xe0,0x81,0x17,0xed,0xf4,0x9e,0x69,0x98,0xd1,0x85,0x8e,0x70,0xe4,0x13,0x45,0x79,0x13,0xf4,0x76,0xa9,0xd3,0x5b,0x75,0x63}, - {0x53,0x08,0xd1,0x2a,0x3e,0xa0,0x5f,0xb5,0x69,0x35,0xe6,0x9e,0x90,0x75,0x6f,0x35,0x90,0xb8,0x69,0xbe,0xfd,0xf1,0xf9,0x9f,0x84,0x6f,0xc1,0x8b,0xc4,0xc1,0x8c,0x0d,0xb7,0xac,0xf1,0x97,0x18,0x10,0xc7,0x3d,0xd8,0xbb,0x65,0xc1,0x5e,0x7d,0xda,0x5d,0x0f,0x02,0xa1,0x0f,0x9c,0x5b,0x8e,0x50,0x56,0x2a,0xc5,0x37,0x17,0x75,0x63,0x27,0xa9,0x19,0xb4,0x6e,0xd3,0x02,0x94,0x02,0xa5,0x60,0xb4,0x77,0x7e,0x4e,0xb4,0xf0,0x56,0x49,0x3c,0xd4,0x30,0x62,0xa8,0xcf,0xe7,0x66,0xd1,0x7a,0x8a,0xdd,0xc2,0x70}, - {0x0e,0xec,0x6f,0x9f,0x50,0x94,0x61,0x65,0x8d,0x51,0xc6,0x46,0xa9,0x7e,0x2e,0xee,0x5c,0x9b,0xe0,0x67,0xf3,0xc1,0x33,0x97,0x95,0x84,0x94,0x63,0x63,0xac,0x0f,0x2e,0x13,0x7e,0xed,0xb8,0x7d,0x96,0xd4,0x91,0x7a,0x81,0x76,0xd7,0x0a,0x2f,0x25,0x74,0x64,0x25,0x85,0x0d,0xe0,0x82,0x09,0xe4,0xe5,0x3c,0xa5,0x16,0x38,0x61,0xb8,0x32,0x64,0xcd,0x48,0xe4,0xbe,0xf7,0xe7,0x79,0xd0,0x86,0x78,0x08,0x67,0x3a,0xc8,0x6a,0x2e,0xdb,0xe4,0xa0,0xd9,0xd4,0x9f,0xf8,0x41,0x4f,0x5a,0x73,0x5c,0x21,0x79,0x41}, - {0x2a,0xed,0xdc,0xd7,0xe7,0x94,0x70,0x8c,0x70,0x9c,0xd3,0x47,0xc3,0x8a,0xfb,0x97,0x02,0xd9,0x06,0xa9,0x33,0xe0,0x3b,0xe1,0x76,0x9d,0xd9,0x0c,0xa3,0x44,0x03,0x70,0x34,0xcd,0x6b,0x28,0xb9,0x33,0xae,0xe4,0xdc,0xd6,0x9d,0x55,0xb6,0x7e,0xef,0xb7,0x1f,0x8e,0xd3,0xb3,0x1f,0x14,0x8b,0x27,0x86,0xc2,0x41,0x22,0x66,0x85,0xfa,0x31,0xf4,0x22,0x36,0x2e,0x42,0x6c,0x82,0xaf,0x2d,0x50,0x33,0x98,0x87,0x29,0x20,0xc1,0x23,0x91,0x38,0x2b,0xe1,0xb7,0xc1,0x9b,0x89,0x24,0x95,0xa9,0x12,0x23,0xbb,0x24}, - {0xc3,0x67,0xde,0x32,0x17,0xed,0xa8,0xb1,0x48,0x49,0x1b,0x46,0x18,0x94,0xb4,0x3c,0xd2,0xbc,0xcf,0x76,0x43,0x43,0xbd,0x8e,0x08,0x80,0x18,0x1e,0x87,0x3e,0xee,0x0f,0x6b,0x5c,0xf8,0xf5,0x2a,0x0c,0xf8,0x41,0x94,0x67,0xfa,0x04,0xc3,0x84,0x72,0x68,0xad,0x1b,0xba,0xa3,0x99,0xdf,0x45,0x89,0x16,0x5d,0xeb,0xff,0xf9,0x2a,0x1d,0x0d,0xdf,0x1e,0x62,0x32,0xa1,0x8a,0xda,0xa9,0x79,0x65,0x22,0x59,0xa1,0x22,0xb8,0x30,0x93,0xc1,0x9a,0xa7,0x7b,0x19,0x04,0x40,0x76,0x1d,0x53,0x18,0x97,0xd7,0xac,0x16}, - {0x3d,0x1d,0x9b,0x2d,0xaf,0x72,0xdf,0x72,0x5a,0x24,0x32,0xa4,0x36,0x2a,0x46,0x63,0x37,0x96,0xb3,0x16,0x79,0xa0,0xce,0x3e,0x09,0x23,0x30,0xb9,0xf6,0x0e,0x3e,0x12,0xad,0xb6,0x87,0x78,0xc5,0xc6,0x59,0xc9,0xba,0xfe,0x90,0x5f,0xad,0x9e,0xe1,0x94,0x04,0xf5,0x42,0xa3,0x62,0x4e,0xe2,0x16,0x00,0x17,0x16,0x18,0x4b,0xd3,0x4e,0x16,0x9a,0xe6,0x2f,0x19,0x4c,0xd9,0x7e,0x48,0x13,0x15,0x91,0x3a,0xea,0x2c,0xae,0x61,0x27,0xde,0xa4,0xb9,0xd3,0xf6,0x7b,0x87,0xeb,0xf3,0x73,0x10,0xc6,0x0f,0xda,0x78}, - {0x6a,0xc6,0x2b,0xe5,0x28,0x5d,0xf1,0x5b,0x8e,0x1a,0xf0,0x70,0x18,0xe3,0x47,0x2c,0xdd,0x8b,0xc2,0x06,0xbc,0xaf,0x19,0x24,0x3a,0x17,0x6b,0x25,0xeb,0xde,0x25,0x2d,0x94,0x3a,0x0c,0x68,0xf1,0x80,0x9f,0xa2,0xe6,0xe7,0xe9,0x1a,0x15,0x7e,0xf7,0x71,0x73,0x79,0x01,0x48,0x58,0xf1,0x00,0x11,0xdd,0x8d,0xb3,0x16,0xb3,0xa4,0x4a,0x05,0xb8,0x7c,0x26,0x19,0x8d,0x46,0xc8,0xdf,0xaf,0x4d,0xe5,0x66,0x9c,0x78,0x28,0x0b,0x17,0xec,0x6e,0x66,0x2a,0x1d,0xeb,0x2a,0x60,0xa7,0x7d,0xab,0xa6,0x10,0x46,0x13}, - {0xfe,0xb0,0xf6,0x8d,0xc7,0x8e,0x13,0x51,0x1b,0xf5,0x75,0xe5,0x89,0xda,0x97,0x53,0xb9,0xf1,0x7a,0x71,0x1d,0x7a,0x20,0x09,0x50,0xd6,0x20,0x2b,0xba,0xfd,0x02,0x21,0x15,0xf5,0xd1,0x77,0xe7,0x65,0x2a,0xcd,0xf1,0x60,0xaa,0x8f,0x87,0x91,0x89,0x54,0xe5,0x06,0xbc,0xda,0xbc,0x3b,0xb7,0xb1,0xfb,0xc9,0x7c,0xa9,0xcb,0x78,0x48,0x65,0xa1,0xe6,0x5c,0x05,0x05,0xe4,0x9e,0x96,0x29,0xad,0x51,0x12,0x68,0xa7,0xbc,0x36,0x15,0xa4,0x7d,0xaa,0x17,0xf5,0x1a,0x3a,0xba,0xb2,0xec,0x29,0xdb,0x25,0xd7,0x0a}, - {0x57,0x24,0x4e,0x83,0xb1,0x67,0x42,0xdc,0xc5,0x1b,0xce,0x70,0xb5,0x44,0x75,0xb6,0xd7,0x5e,0xd1,0xf7,0x0b,0x7a,0xf0,0x1a,0x50,0x36,0xa0,0x71,0xfb,0xcf,0xef,0x4a,0x85,0x6f,0x05,0x9b,0x0c,0xbc,0xc7,0xfe,0xd7,0xff,0xf5,0xe7,0x68,0x52,0x7d,0x53,0xfa,0xae,0x12,0x43,0x62,0xc6,0xaf,0x77,0xd9,0x9f,0x39,0x02,0x53,0x5f,0x67,0x4f,0x1e,0x17,0x15,0x04,0x36,0x36,0x2d,0xc3,0x3b,0x48,0x98,0x89,0x11,0xef,0x2b,0xcd,0x10,0x51,0x94,0xd0,0xad,0x6e,0x0a,0x87,0x61,0x65,0xa8,0xa2,0x72,0xbb,0xcc,0x0b}, - {0xc8,0xa9,0xb1,0xea,0x2f,0x96,0x5e,0x18,0xcd,0x7d,0x14,0x65,0x35,0xe6,0xe7,0x86,0xf2,0x6d,0x5b,0xbb,0x31,0xe0,0x92,0xb0,0x3e,0xb7,0xd6,0x59,0xab,0xf0,0x24,0x40,0x96,0x12,0xfe,0x50,0x4c,0x5e,0x6d,0x18,0x7e,0x9f,0xe8,0xfe,0x82,0x7b,0x39,0xe0,0xb0,0x31,0x70,0x50,0xc5,0xf6,0xc7,0x3b,0xc2,0x37,0x8f,0x10,0x69,0xfd,0x78,0x66,0xc2,0x63,0x68,0x63,0x31,0xfa,0x86,0x15,0xf2,0x33,0x2d,0x57,0x48,0x8c,0xf6,0x07,0xfc,0xae,0x9e,0x78,0x9f,0xcc,0x73,0x4f,0x01,0x47,0xad,0x8e,0x10,0xe2,0x42,0x2d}, - {0x9b,0xd2,0xdf,0x94,0x15,0x13,0xf5,0x97,0x6a,0x4c,0x3f,0x31,0x5d,0x98,0x55,0x61,0x10,0x50,0x45,0x08,0x07,0x3f,0xa1,0xeb,0x22,0xd3,0xd2,0xb8,0x08,0x26,0x6b,0x67,0x93,0x75,0x53,0x0f,0x0d,0x7b,0x71,0x21,0x4c,0x06,0x1e,0x13,0x0b,0x69,0x4e,0x91,0x9f,0xe0,0x2a,0x75,0xae,0x87,0xb6,0x1b,0x6e,0x3c,0x42,0x9b,0xa7,0xf3,0x0b,0x42,0x47,0x2b,0x5b,0x1c,0x65,0xba,0x38,0x81,0x80,0x1b,0x1b,0x31,0xec,0xb6,0x71,0x86,0xb0,0x35,0x31,0xbc,0xb1,0x0c,0xff,0x7b,0xe0,0xf1,0x0c,0x9c,0xfa,0x2f,0x5d,0x74}, - {0xbd,0xc8,0xc9,0x2b,0x1e,0x5a,0x52,0xbf,0x81,0x9d,0x47,0x26,0x08,0x26,0x5b,0xea,0xdb,0x55,0x01,0xdf,0x0e,0xc7,0x11,0xd5,0xd0,0xf5,0x0c,0x96,0xeb,0x3c,0xe2,0x1a,0x6a,0x4e,0xd3,0x21,0x57,0xdf,0x36,0x60,0xd0,0xb3,0x7b,0x99,0x27,0x88,0xdb,0xb1,0xfa,0x6a,0x75,0xc8,0xc3,0x09,0xc2,0xd3,0x39,0xc8,0x1d,0x4c,0xe5,0x5b,0xe1,0x06,0x4a,0x99,0x32,0x19,0x87,0x5d,0x72,0x5b,0xb0,0xda,0xb1,0xce,0xb5,0x1c,0x35,0x32,0x05,0xca,0xb7,0xda,0x49,0x15,0xc4,0x7d,0xf7,0xc1,0x8e,0x27,0x61,0xd8,0xde,0x58}, - {0x5c,0xc5,0x66,0xf2,0x93,0x37,0x17,0xd8,0x49,0x4e,0x45,0xcc,0xc5,0x76,0xc9,0xc8,0xa8,0xc3,0x26,0xbc,0xf8,0x82,0xe3,0x5c,0xf9,0xf6,0x85,0x54,0xe8,0x9d,0xf3,0x2f,0xa8,0xc9,0xc2,0xb6,0xa8,0x5b,0xfb,0x2d,0x8c,0x59,0x2c,0xf5,0x8e,0xef,0xee,0x48,0x73,0x15,0x2d,0xf1,0x07,0x91,0x80,0x33,0xd8,0x5b,0x1d,0x53,0x6b,0x69,0xba,0x08,0x7a,0xc5,0xef,0xc3,0xee,0x3e,0xed,0x77,0x11,0x48,0xff,0xd4,0x17,0x55,0xe0,0x04,0xcb,0x71,0xa6,0xf1,0x3f,0x7a,0x3d,0xea,0x54,0xfe,0x7c,0x94,0xb4,0x33,0x06,0x12}, - {0x42,0x00,0x61,0x91,0x78,0x98,0x94,0x0b,0xe8,0xfa,0xeb,0xec,0x3c,0xb1,0xe7,0x4e,0xc0,0xa4,0xf0,0x94,0x95,0x73,0xbe,0x70,0x85,0x91,0xd5,0xb4,0x99,0x0a,0xd3,0x35,0x0a,0x10,0x12,0x49,0x47,0x31,0xbd,0x82,0x06,0xbe,0x6f,0x7e,0x6d,0x7b,0x23,0xde,0xc6,0x79,0xea,0x11,0x19,0x76,0x1e,0xe1,0xde,0x3b,0x39,0xcb,0xe3,0x3b,0x43,0x07,0xf4,0x97,0xe9,0x5c,0xc0,0x44,0x79,0xff,0xa3,0x51,0x5c,0xb0,0xe4,0x3d,0x5d,0x57,0x7c,0x84,0x76,0x5a,0xfd,0x81,0x33,0x58,0x9f,0xda,0xf6,0x7a,0xde,0x3e,0x87,0x2d}, - {0x09,0x34,0x37,0x43,0x64,0x31,0x7a,0x15,0xd9,0x81,0xaa,0xf4,0xee,0xb7,0xb8,0xfa,0x06,0x48,0xa6,0xf5,0xe6,0xfe,0x93,0xb0,0xb6,0xa7,0x7f,0x70,0x54,0x36,0x77,0x2e,0x81,0xf9,0x5d,0x4e,0xe1,0x02,0x62,0xaa,0xf5,0xe1,0x15,0x50,0x17,0x59,0x0d,0xa2,0x6c,0x1d,0xe2,0xba,0xd3,0x75,0xa2,0x18,0x53,0x02,0x60,0x01,0x8a,0x61,0x43,0x05,0xc1,0x23,0x4c,0x97,0xf4,0xbd,0xea,0x0d,0x93,0x46,0xce,0x9d,0x25,0x0a,0x6f,0xaa,0x2c,0xba,0x9a,0xa2,0xb8,0x2c,0x20,0x04,0x0d,0x96,0x07,0x2d,0x36,0x43,0x14,0x4b}, - {0x7a,0x1f,0x6e,0xb6,0xc7,0xb7,0xc4,0xcc,0x7e,0x2f,0x0c,0xf5,0x25,0x7e,0x15,0x44,0x1c,0xaf,0x3e,0x71,0xfc,0x6d,0xf0,0x3e,0xf7,0x63,0xda,0x52,0x67,0x44,0x2f,0x58,0xcb,0x9c,0x52,0x1c,0xe9,0x54,0x7c,0x96,0xfb,0x35,0xc6,0x64,0x92,0x26,0xf6,0x30,0x65,0x19,0x12,0x78,0xf4,0xaf,0x47,0x27,0x5c,0x6f,0xf6,0xea,0x18,0x84,0x03,0x17,0xe4,0x4c,0x32,0x20,0xd3,0x7b,0x31,0xc6,0xc4,0x8b,0x48,0xa4,0xe8,0x42,0x10,0xa8,0x64,0x13,0x5a,0x4e,0x8b,0xf1,0x1e,0xb2,0xc9,0x8d,0xa2,0xcd,0x4b,0x1c,0x2a,0x0c}, - {0x47,0x04,0x1f,0x6f,0xd0,0xc7,0x4d,0xd2,0x59,0xc0,0x87,0xdb,0x3e,0x9e,0x26,0xb2,0x8f,0xd2,0xb2,0xfb,0x72,0x02,0x5b,0xd1,0x77,0x48,0xf6,0xc6,0xd1,0x8b,0x55,0x7c,0x45,0x69,0xbd,0x69,0x48,0x81,0xc4,0xed,0x22,0x8d,0x1c,0xbe,0x7d,0x90,0x6d,0x0d,0xab,0xc5,0x5c,0xd5,0x12,0xd2,0x3b,0xc6,0x83,0xdc,0x14,0xa3,0x30,0x9b,0x6a,0x5a,0x3d,0x46,0x96,0xd3,0x24,0x15,0xec,0xd0,0xf0,0x24,0x5a,0xc3,0x8a,0x62,0xbb,0x12,0xa4,0x5f,0xbc,0x1c,0x79,0x3a,0x0c,0xa5,0xc3,0xaf,0xfb,0x0a,0xca,0xa5,0x04,0x04}, - {0xd6,0x43,0xa7,0x0a,0x07,0x40,0x1f,0x8c,0xe8,0x5e,0x26,0x5b,0xcb,0xd0,0xba,0xcc,0xde,0xd2,0x8f,0x66,0x6b,0x04,0x4b,0x57,0x33,0x96,0xdd,0xca,0xfd,0x5b,0x39,0x46,0xd1,0x6f,0x41,0x2a,0x1b,0x9e,0xbc,0x62,0x8b,0x59,0x50,0xe3,0x28,0xf7,0xc6,0xb5,0x67,0x69,0x5d,0x3d,0xd8,0x3f,0x34,0x04,0x98,0xee,0xf8,0xe7,0x16,0x75,0x52,0x39,0x9c,0x9a,0x5d,0x1a,0x2d,0xdb,0x7f,0x11,0x2a,0x5c,0x00,0xd1,0xbc,0x45,0x77,0x9c,0xea,0x6f,0xd5,0x54,0xf1,0xbe,0xd4,0xef,0x16,0xd0,0x22,0xe8,0x29,0x9a,0x57,0x76}, - {0x17,0x2a,0xc0,0x49,0x7e,0x8e,0xb6,0x45,0x7f,0xa3,0xa9,0xbc,0xa2,0x51,0xcd,0x23,0x1b,0x4c,0x22,0xec,0x11,0x5f,0xd6,0x3e,0xb1,0xbd,0x05,0x9e,0xdc,0x84,0xa3,0x43,0xf2,0x34,0xb4,0x52,0x13,0xb5,0x3c,0x33,0xe1,0x80,0xde,0x93,0x49,0x28,0x32,0xd8,0xce,0x35,0x0d,0x75,0x87,0x28,0x51,0xb5,0xc1,0x77,0x27,0x2a,0xbb,0x14,0xc5,0x02,0x45,0xb6,0xf1,0x8b,0xda,0xd5,0x4b,0x68,0x53,0x4b,0xb5,0xf6,0x7e,0xd3,0x8b,0xfb,0x53,0xd2,0xb0,0xa9,0xd7,0x16,0x39,0x31,0x59,0x80,0x54,0x61,0x09,0x92,0x60,0x11}, - {0xaa,0xcf,0xda,0x29,0x69,0x16,0x4d,0xb4,0x8f,0x59,0x13,0x84,0x4c,0x9f,0x52,0xda,0x59,0x55,0x3d,0x45,0xca,0x63,0xef,0xe9,0x0b,0x8e,0x69,0xc5,0x5b,0x12,0x1e,0x35,0xcd,0x4d,0x9b,0x36,0x16,0x56,0x38,0x7a,0x63,0x35,0x5c,0x65,0xa7,0x2c,0xc0,0x75,0x21,0x80,0xf1,0xd4,0xf9,0x1b,0xc2,0x7d,0x42,0xe0,0xe6,0x91,0x74,0x7d,0x63,0x2f,0xbe,0x7b,0xf6,0x1a,0x46,0x9b,0xb4,0xd4,0x61,0x89,0xab,0xc8,0x7a,0x03,0x03,0xd6,0xfb,0x99,0xa6,0xf9,0x9f,0xe1,0xde,0x71,0x9a,0x2a,0xce,0xe7,0x06,0x2d,0x18,0x7f}, - {0xec,0x68,0x01,0xab,0x64,0x8e,0x7c,0x7a,0x43,0xc5,0xed,0x15,0x55,0x4a,0x5a,0xcb,0xda,0x0e,0xcd,0x47,0xd3,0x19,0x55,0x09,0xb0,0x93,0x3e,0x34,0x8c,0xac,0xd4,0x67,0x22,0x75,0x21,0x8e,0x72,0x4b,0x45,0x09,0xd8,0xb8,0x84,0xd4,0xf4,0xe8,0x58,0xaa,0x3c,0x90,0x46,0x7f,0x4d,0x25,0x58,0xd3,0x17,0x52,0x1c,0x24,0x43,0xc0,0xac,0x44,0x77,0x57,0x7a,0x4f,0xbb,0x6b,0x7d,0x1c,0xe1,0x13,0x83,0x91,0xd4,0xfe,0x35,0x8b,0x84,0x46,0x6b,0xc9,0xc6,0xa1,0xdc,0x4a,0xbd,0x71,0xad,0x12,0x83,0x1c,0x6d,0x55}, - {0x82,0x39,0x8d,0x0c,0xe3,0x40,0xef,0x17,0x34,0xfa,0xa3,0x15,0x3e,0x07,0xf7,0x31,0x6e,0x64,0x73,0x07,0xcb,0xf3,0x21,0x4f,0xff,0x4e,0x82,0x1d,0x6d,0x6c,0x6c,0x74,0x21,0xe8,0x1b,0xb1,0x56,0x67,0xf0,0x81,0xdd,0xf3,0xa3,0x10,0x23,0xf8,0xaf,0x0f,0x5d,0x46,0x99,0x6a,0x55,0xd0,0xb2,0xf8,0x05,0x7f,0x8c,0xcc,0x38,0xbe,0x7a,0x09,0xa4,0x2d,0xa5,0x7e,0x87,0xc9,0x49,0x0c,0x43,0x1d,0xdc,0x9b,0x55,0x69,0x43,0x4c,0xd2,0xeb,0xcc,0xf7,0x09,0x38,0x2c,0x02,0xbd,0x84,0xee,0x4b,0xa3,0x14,0x7e,0x57}, - {0x0a,0x3b,0xa7,0x61,0xac,0x68,0xe2,0xf0,0xf5,0xa5,0x91,0x37,0x10,0xfa,0xfa,0xf2,0xe9,0x00,0x6d,0x6b,0x82,0x3e,0xe1,0xc1,0x42,0x8f,0xd7,0x6f,0xe9,0x7e,0xfa,0x60,0x2b,0xd7,0x4d,0xbd,0xbe,0xce,0xfe,0x94,0x11,0x22,0x0f,0x06,0xda,0x4f,0x6a,0xf4,0xff,0xd1,0xc8,0xc0,0x77,0x59,0x4a,0x12,0x95,0x92,0x00,0xfb,0xb8,0x04,0x53,0x70,0xc6,0x6e,0x29,0x4d,0x35,0x1d,0x3d,0xb6,0xd8,0x31,0xad,0x5f,0x3e,0x05,0xc3,0xf3,0xec,0x42,0xbd,0xb4,0x8c,0x95,0x0b,0x67,0xfd,0x53,0x63,0xa1,0x0c,0x8e,0x39,0x21}, - {0xf3,0x33,0x2b,0x38,0x8a,0x05,0xf5,0x89,0xb4,0xc0,0x48,0xad,0x0b,0xba,0xe2,0x5a,0x6e,0xb3,0x3d,0xa5,0x03,0xb5,0x93,0x8f,0xe6,0x32,0xa2,0x95,0x9d,0xed,0xa3,0x5a,0x01,0x56,0xb7,0xb4,0xf9,0xaa,0x98,0x27,0x72,0xad,0x8d,0x5c,0x13,0x72,0xac,0x5e,0x23,0xa0,0xb7,0x61,0x61,0xaa,0xce,0xd2,0x4e,0x7d,0x8f,0xe9,0x84,0xb2,0xbf,0x1b,0x61,0x65,0xd9,0xc7,0xe9,0x77,0x67,0x65,0x36,0x80,0xc7,0x72,0x54,0x12,0x2b,0xcb,0xee,0x6e,0x50,0xd9,0x99,0x32,0x05,0x65,0xcc,0x57,0x89,0x5e,0x4e,0xe1,0x07,0x4a}, - {0x99,0xf9,0x0d,0x98,0xcb,0x12,0xe4,0x4e,0x71,0xc7,0x6e,0x3c,0x6f,0xd7,0x15,0xa3,0xfd,0x77,0x5c,0x92,0xde,0xed,0xa5,0xbb,0x02,0x34,0x31,0x1d,0x39,0xac,0x0b,0x3f,0x9b,0xa4,0x77,0xc4,0xcd,0x58,0x0b,0x24,0x17,0xf0,0x47,0x64,0xde,0xda,0x38,0xfd,0xad,0x6a,0xc8,0xa7,0x32,0x8d,0x92,0x19,0x81,0xa0,0xaf,0x84,0xed,0x7a,0xaf,0x50,0xe5,0x5b,0xf6,0x15,0x01,0xde,0x4f,0x6e,0xb2,0x09,0x61,0x21,0x21,0x26,0x98,0x29,0xd9,0xd6,0xad,0x0b,0x81,0x05,0x02,0x78,0x06,0xd0,0xeb,0xba,0x16,0xa3,0x21,0x19}, - {0xfc,0x70,0xb8,0xdf,0x7e,0x2f,0x42,0x89,0xbd,0xb3,0x76,0x4f,0xeb,0x6b,0x29,0x2c,0xf7,0x4d,0xc2,0x36,0xd4,0xf1,0x38,0x07,0xb0,0xae,0x73,0xe2,0x41,0xdf,0x58,0x64,0x8b,0xc1,0xf3,0xd9,0x9a,0xad,0x5a,0xd7,0x9c,0xc1,0xb1,0x60,0xef,0x0e,0x6a,0x56,0xd9,0x0e,0x5c,0x25,0xac,0x0b,0x9a,0x3e,0xf5,0xc7,0x62,0xa0,0xec,0x9d,0x04,0x7b,0x83,0x44,0x44,0x35,0x7a,0xe3,0xcb,0xdc,0x93,0xbe,0xed,0x0f,0x33,0x79,0x88,0x75,0x87,0xdd,0xc5,0x12,0xc3,0x04,0x60,0x78,0x64,0x0e,0x95,0xc2,0xcb,0xdc,0x93,0x60}, - {0x6d,0x70,0xe0,0x85,0x85,0x9a,0xf3,0x1f,0x33,0x39,0xe7,0xb3,0xd8,0xa5,0xd0,0x36,0x3b,0x45,0x8f,0x71,0xe1,0xf2,0xb9,0x43,0x7c,0xa9,0x27,0x48,0x08,0xea,0xd1,0x57,0x4b,0x03,0x84,0x60,0xbe,0xee,0xde,0x6b,0x54,0xb8,0x0f,0x78,0xb6,0xc2,0x99,0x31,0x95,0x06,0x2d,0xb6,0xab,0x76,0x33,0x97,0x90,0x7d,0x64,0x8b,0xc9,0x80,0x31,0x6e,0x71,0xb0,0x28,0xa1,0xe7,0xb6,0x7a,0xee,0xaa,0x8b,0xa8,0x93,0x6d,0x59,0xc1,0xa4,0x30,0x61,0x21,0xb2,0x82,0xde,0xb4,0xf7,0x18,0xbd,0x97,0xdd,0x9d,0x99,0x3e,0x36}, - {0xc4,0x1f,0xee,0x35,0xc1,0x43,0xa8,0x96,0xcf,0xc8,0xe4,0x08,0x55,0xb3,0x6e,0x97,0x30,0xd3,0x8c,0xb5,0x01,0x68,0x2f,0xb4,0x2b,0x05,0x3a,0x69,0x78,0x9b,0xee,0x48,0xc6,0xae,0x4b,0xe2,0xdc,0x48,0x18,0x2f,0x60,0xaf,0xbc,0xba,0x55,0x72,0x9b,0x76,0x31,0xe9,0xef,0x3c,0x6e,0x3c,0xcb,0x90,0x55,0xb3,0xf9,0xc6,0x9b,0x97,0x1f,0x23,0xc6,0xf3,0x2a,0xcc,0x4b,0xde,0x31,0x5c,0x1f,0x8d,0x20,0xfe,0x30,0xb0,0x4b,0xb0,0x66,0xb4,0x4f,0xc1,0x09,0x70,0x8d,0xb7,0x13,0x24,0x79,0x08,0x9b,0xfa,0x9b,0x07}, - {0xf4,0x0d,0x30,0xda,0x51,0x3a,0x90,0xe3,0xb0,0x5a,0xa9,0x3d,0x23,0x64,0x39,0x84,0x80,0x64,0x35,0x0b,0x2d,0xf1,0x3c,0xed,0x94,0x71,0x81,0x84,0xf6,0x77,0x8c,0x03,0x45,0x42,0xd5,0xa2,0x80,0xed,0xc9,0xf3,0x52,0x39,0xf6,0x77,0x78,0x8b,0xa0,0x0a,0x75,0x54,0x08,0xd1,0x63,0xac,0x6d,0xd7,0x6b,0x63,0x70,0x94,0x15,0xfb,0xf4,0x1e,0xec,0x7b,0x16,0x5b,0xe6,0x5e,0x4e,0x85,0xc2,0xcd,0xd0,0x96,0x42,0x0a,0x59,0x59,0x99,0x21,0x10,0x98,0x34,0xdf,0xb2,0x72,0x56,0xff,0x0b,0x4a,0x2a,0xe9,0x5e,0x57}, - {0xcf,0x2f,0x18,0x8a,0x90,0x80,0xc0,0xd4,0xbd,0x9d,0x48,0x99,0xc2,0x70,0xe1,0x30,0xde,0x33,0xf7,0x52,0x57,0xbd,0xba,0x05,0x00,0xfd,0xd3,0x2c,0x11,0xe7,0xd4,0x43,0x01,0xd8,0xa4,0x0a,0x45,0xbc,0x46,0x5d,0xd8,0xb9,0x33,0xa5,0x27,0x12,0xaf,0xc3,0xc2,0x06,0x89,0x2b,0x26,0x3b,0x9e,0x38,0x1b,0x58,0x2f,0x38,0x7e,0x1e,0x0a,0x20,0xc5,0x3a,0xf9,0xea,0x67,0xb9,0x8d,0x51,0xc0,0x52,0x66,0x05,0x9b,0x98,0xbc,0x71,0xf5,0x97,0x71,0x56,0xd9,0x85,0x2b,0xfe,0x38,0x4e,0x1e,0x65,0x52,0xca,0x0e,0x05}, - {0x9c,0x0c,0x3f,0x45,0xde,0x1a,0x43,0xc3,0x9b,0x3b,0x70,0xff,0x5e,0x04,0xf5,0xe9,0x3d,0x7b,0x84,0xed,0xc9,0x7a,0xd9,0xfc,0xc6,0xf4,0x58,0x1c,0xc2,0xe6,0x0e,0x4b,0xea,0x68,0xe6,0x60,0x76,0x39,0xac,0x97,0x97,0xb4,0x3a,0x15,0xfe,0xbb,0x19,0x9b,0x9f,0xa7,0xec,0x34,0xb5,0x79,0xb1,0x4c,0x57,0xae,0x31,0xa1,0x9f,0xc0,0x51,0x61,0x96,0x5d,0xf0,0xfd,0x0d,0x5c,0xf5,0x3a,0x7a,0xee,0xb4,0x2a,0xe0,0x2e,0x26,0xdd,0x09,0x17,0x17,0x12,0x87,0xbb,0xb2,0x11,0x0b,0x03,0x0f,0x80,0xfa,0x24,0xef,0x1f}, - {0x96,0x31,0xa7,0x1a,0xfb,0x53,0xd6,0x37,0x18,0x64,0xd7,0x3f,0x30,0x95,0x94,0x0f,0xb2,0x17,0x3a,0xfb,0x09,0x0b,0x20,0xad,0x3e,0x61,0xc8,0x2f,0x29,0x49,0x4d,0x54,0x86,0x6b,0x97,0x30,0xf5,0xaf,0xd2,0x22,0x04,0x46,0xd2,0xc2,0x06,0xb8,0x90,0x8d,0xe5,0xba,0xe5,0x4d,0x6c,0x89,0xa1,0xdc,0x17,0x0c,0x34,0xc8,0xe6,0x5f,0x00,0x28,0x88,0x86,0x52,0x34,0x9f,0xba,0xef,0x6a,0xa1,0x7d,0x10,0x25,0x94,0xff,0x1b,0x5c,0x36,0x4b,0xd9,0x66,0xcd,0xbb,0x5b,0xf7,0xfa,0x6d,0x31,0x0f,0x93,0x72,0xe4,0x72}, - {0x4f,0x08,0x81,0x97,0x8c,0x20,0x95,0x26,0xe1,0x0e,0x45,0x23,0x0b,0x2a,0x50,0xb1,0x02,0xde,0xef,0x03,0xa6,0xae,0x9d,0xfd,0x4c,0xa3,0x33,0x27,0x8c,0x2e,0x9d,0x5a,0x27,0x76,0x2a,0xd3,0x35,0xf6,0xf3,0x07,0xf0,0x66,0x65,0x5f,0x86,0x4d,0xaa,0x7a,0x50,0x44,0xd0,0x28,0x97,0xe7,0x85,0x3c,0x38,0x64,0xe0,0x0f,0x00,0x7f,0xee,0x1f,0xe5,0xf7,0xdb,0x03,0xda,0x05,0x53,0x76,0xbd,0xcd,0x34,0x14,0x49,0xf2,0xda,0xa4,0xec,0x88,0x4a,0xd2,0xcd,0xd5,0x4a,0x7b,0x43,0x05,0x04,0xee,0x51,0x40,0xf9,0x00}, - {0xb2,0x30,0xd3,0xc3,0x23,0x6b,0x35,0x8d,0x06,0x1b,0x47,0xb0,0x9b,0x8b,0x1c,0xf2,0x3c,0xb8,0x42,0x6e,0x6c,0x31,0x6c,0xb3,0x0d,0xb1,0xea,0x8b,0x7e,0x9c,0xd7,0x07,0x53,0x97,0xaf,0x07,0xbb,0x93,0xef,0xd7,0xa7,0x66,0xb7,0x3d,0xcf,0xd0,0x3e,0x58,0xc5,0x1e,0x0b,0x6e,0xbf,0x98,0x69,0xce,0x52,0x04,0xd4,0x5d,0xd2,0xff,0xb7,0x47,0x12,0xdd,0x08,0xbc,0x9c,0xfb,0xfb,0x87,0x9b,0xc2,0xee,0xe1,0x3a,0x6b,0x06,0x8a,0xbf,0xc1,0x1f,0xdb,0x2b,0x24,0x57,0x0d,0xb6,0x4b,0xa6,0x5e,0xa3,0x20,0x35,0x1c}, - {0x4a,0xa3,0xcb,0xbc,0xa6,0x53,0xd2,0x80,0x9b,0x21,0x38,0x38,0xa1,0xc3,0x61,0x3e,0x96,0xe3,0x82,0x98,0x01,0xb6,0xc3,0x90,0x6f,0xe6,0x0e,0x5d,0x77,0x05,0x3d,0x1c,0x59,0xc0,0x6b,0x21,0x40,0x6f,0xa8,0xcd,0x7e,0xd8,0xbc,0x12,0x1d,0x23,0xbb,0x1f,0x90,0x09,0xc7,0x17,0x9e,0x6a,0x95,0xb4,0x55,0x2e,0xd1,0x66,0x3b,0x0c,0x75,0x38,0x1a,0xe5,0x22,0x94,0x40,0xf1,0x2e,0x69,0x71,0xf6,0x5d,0x2b,0x3c,0xc7,0xc0,0xcb,0x29,0xe0,0x4c,0x74,0xe7,0x4f,0x01,0x21,0x7c,0x48,0x30,0xd3,0xc7,0xe2,0x21,0x06}, - {0x8d,0x83,0x59,0x82,0xcc,0x60,0x98,0xaf,0xdc,0x9a,0x9f,0xc6,0xc1,0x48,0xea,0x90,0x30,0x1e,0x58,0x65,0x37,0x48,0x26,0x65,0xbc,0xa5,0xd3,0x7b,0x09,0xd6,0x07,0x00,0xf3,0xf0,0xdb,0xb0,0x96,0x17,0xae,0xb7,0x96,0xe1,0x7c,0xe1,0xb9,0xaf,0xdf,0x54,0xb4,0xa3,0xaa,0xe9,0x71,0x30,0x92,0x25,0x9d,0x2e,0x00,0xa1,0x9c,0x58,0x8e,0x5d,0x4b,0xa9,0x42,0x08,0x95,0x1d,0xbf,0xc0,0x3e,0x2e,0x8f,0x58,0x63,0xc3,0xd3,0xb2,0xef,0xe2,0x51,0xbb,0x38,0x14,0x96,0x0a,0x86,0xbf,0x1c,0x3c,0x78,0xd7,0x83,0x15}, - {0xe1,0x7a,0xa2,0x5d,0xef,0xa2,0xee,0xec,0x74,0x01,0x67,0x55,0x14,0x3a,0x7c,0x59,0x7a,0x16,0x09,0x66,0x12,0x2a,0xa6,0xc9,0x70,0x8f,0xed,0x81,0x2e,0x5f,0x2a,0x25,0xc7,0x28,0x9d,0xcc,0x04,0x47,0x03,0x90,0x8f,0xc5,0x2c,0xf7,0x9e,0x67,0x1b,0x1d,0x26,0x87,0x5b,0xbe,0x5f,0x2b,0xe1,0x16,0x0a,0x58,0xc5,0x83,0x4e,0x06,0x58,0x49,0x0d,0xe8,0x66,0x50,0x26,0x94,0x28,0x0d,0x6b,0x8c,0x7c,0x30,0x85,0xf7,0xc3,0xfc,0xfd,0x12,0x11,0x0c,0x78,0xda,0x53,0x1b,0x88,0xb3,0x43,0xd8,0x0b,0x17,0x9c,0x07}, - {0xff,0x6f,0xfa,0x64,0xe4,0xec,0x06,0x05,0x23,0xe5,0x05,0x62,0x1e,0x43,0xe3,0xbe,0x42,0xea,0xb8,0x51,0x24,0x42,0x79,0x35,0x00,0xfb,0xc9,0x4a,0xe3,0x05,0xec,0x6d,0x56,0xd0,0xd5,0xc0,0x50,0xcd,0xd6,0xcd,0x3b,0x57,0x03,0xbb,0x6d,0x68,0xf7,0x9a,0x48,0xef,0xc3,0xf3,0x3f,0x72,0xa6,0x3c,0xcc,0x8a,0x7b,0x31,0xd7,0xc0,0x68,0x67,0xb3,0xc1,0x55,0xf1,0xe5,0x25,0xb6,0x94,0x91,0x7b,0x7b,0x99,0xa7,0xf3,0x7b,0x41,0x00,0x26,0x6b,0x6d,0xdc,0xbd,0x2c,0xc2,0xf4,0x52,0xcd,0xdd,0x14,0x5e,0x44,0x51}, - {0x51,0x49,0x14,0x3b,0x4b,0x2b,0x50,0x57,0xb3,0xbc,0x4b,0x44,0x6b,0xff,0x67,0x8e,0xdb,0x85,0x63,0x16,0x27,0x69,0xbd,0xb8,0xc8,0x95,0x92,0xe3,0x31,0x6f,0x18,0x13,0x55,0xa4,0xbe,0x2b,0xab,0x47,0x31,0x89,0x29,0x91,0x07,0x92,0x4f,0xa2,0x53,0x8c,0xa7,0xf7,0x30,0xbe,0x48,0xf9,0x49,0x4b,0x3d,0xd4,0x4f,0x6e,0x08,0x90,0xe9,0x12,0x2e,0xbb,0xdf,0x7f,0xb3,0x96,0x0c,0xf1,0xf9,0xea,0x1c,0x12,0x5e,0x93,0x9a,0x9f,0x3f,0x98,0x5b,0x3a,0xc4,0x36,0x11,0xdf,0xaf,0x99,0x3e,0x5d,0xf0,0xe3,0xb2,0x77}, - {0xde,0xc4,0x2e,0x9c,0xc5,0xa9,0x6f,0x29,0xcb,0xf3,0x84,0x4f,0xbf,0x61,0x8b,0xbc,0x08,0xf9,0xa8,0x17,0xd9,0x06,0x77,0x1c,0x5d,0x25,0xd3,0x7a,0xfc,0x95,0xb7,0x63,0xa4,0xb0,0xdd,0x12,0x9c,0x63,0x98,0xd5,0x6b,0x86,0x24,0xc0,0x30,0x9f,0xd1,0xa5,0x60,0xe4,0xfc,0x58,0x03,0x2f,0x7c,0xd1,0x8a,0x5e,0x09,0x2e,0x15,0x95,0xa1,0x07,0xc8,0x5f,0x9e,0x38,0x02,0x8f,0x36,0xa8,0x3b,0xe4,0x8d,0xcf,0x02,0x3b,0x43,0x90,0x43,0x26,0x41,0xc5,0x5d,0xfd,0xa1,0xaf,0x37,0x01,0x2f,0x03,0x3d,0xe8,0x8f,0x3e}, - {0x94,0xa2,0x70,0x05,0xb9,0x15,0x8b,0x2f,0x49,0x45,0x08,0x67,0x70,0x42,0xf2,0x94,0x84,0xfd,0xbb,0x61,0xe1,0x5a,0x1c,0xde,0x07,0x40,0xac,0x7f,0x79,0x3b,0xba,0x75,0x3c,0xd1,0xef,0xe8,0x8d,0x4c,0x70,0x08,0x31,0x37,0xe0,0x33,0x8e,0x1a,0xc5,0xdf,0xe3,0xcd,0x60,0x12,0xa5,0x5d,0x9d,0xa5,0x86,0x8c,0x25,0xa6,0x99,0x08,0xd6,0x22,0x96,0xd1,0xcd,0x70,0xc0,0xdb,0x39,0x62,0x9a,0x8a,0x7d,0x6c,0x8b,0x8a,0xfe,0x60,0x60,0x12,0x40,0xeb,0xbc,0x47,0x88,0xb3,0x5e,0x9e,0x77,0x87,0x7b,0xd0,0x04,0x09}, - {0x9c,0x91,0xba,0xdd,0xd4,0x1f,0xce,0xb4,0xaa,0x8d,0x4c,0xc7,0x3e,0xdb,0x31,0xcf,0x51,0xcc,0x86,0xad,0x63,0xcc,0x63,0x2c,0x07,0xde,0x1d,0xbc,0x3f,0x14,0xe2,0x43,0xb9,0x40,0xf9,0x48,0x66,0x2d,0x32,0xf4,0x39,0x0c,0x2d,0xbd,0x0c,0x2f,0x95,0x06,0x31,0xf9,0x81,0xa0,0xad,0x97,0x76,0x16,0x6c,0x2a,0xf7,0xba,0xce,0xaa,0x40,0x62,0xa0,0x95,0xa2,0x5b,0x9c,0x74,0x34,0xf8,0x5a,0xd2,0x37,0xca,0x5b,0x7c,0x94,0xd6,0x6a,0x31,0xc9,0xe7,0xa7,0x3b,0xf1,0x66,0xac,0x0c,0xb4,0x8d,0x23,0xaf,0xbd,0x56}, - {0xeb,0x33,0x35,0xf5,0xe3,0xb9,0x2a,0x36,0x40,0x3d,0xb9,0x6e,0xd5,0x68,0x85,0x33,0x72,0x55,0x5a,0x1d,0x52,0x14,0x0e,0x9e,0x18,0x13,0x74,0x83,0x6d,0xa8,0x24,0x1d,0xb2,0x3b,0x9d,0xc1,0x6c,0xd3,0x10,0x13,0xb9,0x86,0x23,0x62,0xb7,0x6b,0x2a,0x06,0x5c,0x4f,0xa1,0xd7,0x91,0x85,0x9b,0x7c,0x54,0x57,0x1e,0x7e,0x50,0x31,0xaa,0x03,0x1f,0xce,0xd4,0xff,0x48,0x76,0xec,0xf4,0x1c,0x8c,0xac,0x54,0xf0,0xea,0x45,0xe0,0x7c,0x35,0x09,0x1d,0x82,0x25,0xd2,0x88,0x59,0x48,0xeb,0x9a,0xdc,0x61,0xb2,0x43}, - {0xbb,0x79,0xbb,0x88,0x19,0x1e,0x5b,0xe5,0x9d,0x35,0x7a,0xc1,0x7d,0xd0,0x9e,0xa0,0x33,0xea,0x3d,0x60,0xe2,0x2e,0x2c,0xb0,0xc2,0x6b,0x27,0x5b,0xcf,0x55,0x60,0x32,0x64,0x13,0x95,0x6c,0x8b,0x3d,0x51,0x19,0x7b,0xf4,0x0b,0x00,0x26,0x71,0xfe,0x94,0x67,0x95,0x4f,0xd5,0xdd,0x10,0x8d,0x02,0x64,0x09,0x94,0x42,0xe2,0xd5,0xb4,0x02,0xf2,0x8d,0xd1,0x28,0xcb,0x55,0xa1,0xb4,0x08,0xe5,0x6c,0x18,0x46,0x46,0xcc,0xea,0x89,0x43,0x82,0x6c,0x93,0xf4,0x9c,0xc4,0x10,0x34,0x5d,0xae,0x09,0xc8,0xa6,0x27}, - {0x88,0xb1,0x0d,0x1f,0xcd,0xeb,0xa6,0x8b,0xe8,0x5b,0x5a,0x67,0x3a,0xd7,0xd3,0x37,0x5a,0x58,0xf5,0x15,0xa3,0xdf,0x2e,0xf2,0x7e,0xa1,0x60,0xff,0x74,0x71,0xb6,0x2c,0x54,0x69,0x3d,0xc4,0x0a,0x27,0x2c,0xcd,0xb2,0xca,0x66,0x6a,0x57,0x3e,0x4a,0xdd,0x6c,0x03,0xd7,0x69,0x24,0x59,0xfa,0x79,0x99,0x25,0x8c,0x3d,0x60,0x03,0x15,0x22,0xd0,0xe1,0x0b,0x39,0xf9,0xcd,0xee,0x59,0xf1,0xe3,0x8c,0x72,0x44,0x20,0x42,0xa9,0xf4,0xf0,0x94,0x7a,0x66,0x1c,0x89,0x82,0x36,0xf4,0x90,0x38,0xb7,0xf4,0x1d,0x7b}, - {0x24,0xa2,0xb2,0xb3,0xe0,0xf2,0x92,0xe4,0x60,0x11,0x55,0x2b,0x06,0x9e,0x6c,0x7c,0x0e,0x7b,0x7f,0x0d,0xe2,0x8f,0xeb,0x15,0x92,0x59,0xfc,0x58,0x26,0xef,0xfc,0x61,0x8c,0xf5,0xf8,0x07,0x18,0x22,0x2e,0x5f,0xd4,0x09,0x94,0xd4,0x9f,0x5c,0x55,0xe3,0x30,0xa6,0xb6,0x1f,0x8d,0xa8,0xaa,0xb2,0x3d,0xe0,0x52,0xd3,0x45,0x82,0x69,0x68,0x7a,0x18,0x18,0x2a,0x85,0x5d,0xb1,0xdb,0xd7,0xac,0xdd,0x86,0xd3,0xaa,0xe4,0xf3,0x82,0xc4,0xf6,0x0f,0x81,0xe2,0xba,0x44,0xcf,0x01,0xaf,0x3d,0x47,0x4c,0xcf,0x46}, - {0xf9,0xe5,0xc4,0x9e,0xed,0x25,0x65,0x42,0x03,0x33,0x90,0x16,0x01,0xda,0x5e,0x0e,0xdc,0xca,0xe5,0xcb,0xf2,0xa7,0xb1,0x72,0x40,0x5f,0xeb,0x14,0xcd,0x7b,0x38,0x29,0x40,0x81,0x49,0xf1,0xa7,0x6e,0x3c,0x21,0x54,0x48,0x2b,0x39,0xf8,0x7e,0x1e,0x7c,0xba,0xce,0x29,0x56,0x8c,0xc3,0x88,0x24,0xbb,0xc5,0x8c,0x0d,0xe5,0xaa,0x65,0x10,0x57,0x0d,0x20,0xdf,0x25,0x45,0x2c,0x1c,0x4a,0x67,0xca,0xbf,0xd6,0x2d,0x3b,0x5c,0x30,0x40,0x83,0xe1,0xb1,0xe7,0x07,0x0a,0x16,0xe7,0x1c,0x4f,0xe6,0x98,0xa1,0x69}, - {0xbc,0x78,0x1a,0xd9,0xe0,0xb2,0x62,0x90,0x67,0x96,0x50,0xc8,0x9c,0x88,0xc9,0x47,0xb8,0x70,0x50,0x40,0x66,0x4a,0xf5,0x9d,0xbf,0xa1,0x93,0x24,0xa9,0xe6,0x69,0x73,0xed,0xca,0xc5,0xdc,0x34,0x44,0x01,0xe1,0x33,0xfb,0x84,0x3c,0x96,0x5d,0xed,0x47,0xe7,0xa0,0x86,0xed,0x76,0x95,0x01,0x70,0xe4,0xf9,0x67,0xd2,0x7b,0x69,0xb2,0x25,0x64,0x68,0x98,0x13,0xfb,0x3f,0x67,0x9d,0xb8,0xc7,0x5d,0x41,0xd9,0xfb,0xa5,0x3c,0x5e,0x3b,0x27,0xdf,0x3b,0xcc,0x4e,0xe0,0xd2,0x4c,0x4e,0xb5,0x3d,0x68,0x20,0x14}, - {0x97,0xd1,0x9d,0x24,0x1e,0xbd,0x78,0xb4,0x02,0xc1,0x58,0x5e,0x00,0x35,0x0c,0x62,0x5c,0xac,0xba,0xcc,0x2f,0xd3,0x02,0xfb,0x2d,0xa7,0x08,0xf5,0xeb,0x3b,0xb6,0x60,0xd0,0x5a,0xcc,0xc1,0x6f,0xbb,0xee,0x34,0x8b,0xac,0x46,0x96,0xe9,0x0c,0x1b,0x6a,0x53,0xde,0x6b,0xa6,0x49,0xda,0xb0,0xd3,0xc1,0x81,0xd0,0x61,0x41,0x3b,0xe8,0x31,0x4f,0x2b,0x06,0x9e,0x12,0xc7,0xe8,0x97,0xd8,0x0a,0x32,0x29,0x4f,0x8f,0xe4,0x49,0x3f,0x68,0x18,0x6f,0x4b,0xe1,0xec,0x5b,0x17,0x03,0x55,0x2d,0xb6,0x1e,0xcf,0x55}, - {0x58,0x3d,0xc2,0x65,0x10,0x10,0x79,0x58,0x9c,0x81,0x94,0x50,0x6d,0x08,0x9d,0x8b,0xa7,0x5f,0xc5,0x12,0xa9,0x2f,0x40,0xe2,0xd4,0x91,0x08,0x57,0x64,0x65,0x9a,0x66,0x52,0x8c,0xf5,0x7d,0xe3,0xb5,0x76,0x30,0x36,0xcc,0x99,0xe7,0xdd,0xb9,0x3a,0xd7,0x20,0xee,0x13,0x49,0xe3,0x1c,0x83,0xbd,0x33,0x01,0xba,0x62,0xaa,0xfb,0x56,0x1a,0xec,0xc9,0x9d,0x5c,0x50,0x6b,0x3e,0x94,0x1a,0x37,0x7c,0xa7,0xbb,0x57,0x25,0x30,0x51,0x76,0x34,0x41,0x56,0xae,0x73,0x98,0x5c,0x8a,0xc5,0x99,0x67,0x83,0xc4,0x13}, - {0xb9,0xe1,0xb3,0x5a,0x46,0x5d,0x3a,0x42,0x61,0x3f,0xf1,0xc7,0x87,0xc1,0x13,0xfc,0xb6,0xb9,0xb5,0xec,0x64,0x36,0xf8,0x19,0x07,0xb6,0x37,0xa6,0x93,0x0c,0xf8,0x66,0x80,0xd0,0x8b,0x5d,0x6a,0xfb,0xdc,0xc4,0x42,0x48,0x1a,0x57,0xec,0xc4,0xeb,0xde,0x65,0x53,0xe5,0xb8,0x83,0xe8,0xb2,0xd4,0x27,0xb8,0xe5,0xc8,0x7d,0xc8,0xbd,0x50,0x11,0xe1,0xdf,0x6e,0x83,0x37,0x6d,0x60,0xd9,0xab,0x11,0xf0,0x15,0x3e,0x35,0x32,0x96,0x3b,0xb7,0x25,0xc3,0x3a,0xb0,0x64,0xae,0xd5,0x5f,0x72,0x44,0x64,0xd5,0x1d}, - {0x7d,0x12,0x62,0x33,0xf8,0x7f,0xa4,0x8f,0x15,0x7c,0xcd,0x71,0xc4,0x6a,0x9f,0xbc,0x8b,0x0c,0x22,0x49,0x43,0x45,0x71,0x6e,0x2e,0x73,0x9f,0x21,0x12,0x59,0x64,0x0e,0x9a,0xc8,0xba,0x08,0x00,0xe6,0x97,0xc2,0xe0,0xc3,0xe1,0xea,0x11,0xea,0x4c,0x7d,0x7c,0x97,0xe7,0x9f,0xe1,0x8b,0xe3,0xf3,0xcd,0x05,0xa3,0x63,0x0f,0x45,0x3a,0x3a,0x27,0x46,0x39,0xd8,0x31,0x2f,0x8f,0x07,0x10,0xa5,0x94,0xde,0x83,0x31,0x9d,0x38,0x80,0x6f,0x99,0x17,0x6d,0x6c,0xe3,0xd1,0x7b,0xa8,0xa9,0x93,0x93,0x8d,0x8c,0x31}, - {0x19,0xfe,0xff,0x2a,0x03,0x5d,0x74,0xf2,0x66,0xdb,0x24,0x7f,0x49,0x3c,0x9f,0x0c,0xef,0x98,0x85,0xba,0xe3,0xd3,0x98,0xbc,0x14,0x53,0x1d,0x9a,0x67,0x7c,0x4c,0x22,0x98,0xd3,0x1d,0xab,0x29,0x9e,0x66,0x5d,0x3b,0x9e,0x2d,0x34,0x58,0x16,0x92,0xfc,0xcd,0x73,0x59,0xf3,0xfd,0x1d,0x85,0x55,0xf6,0x0a,0x95,0x25,0xc3,0x41,0x9a,0x50,0xe9,0x25,0xf9,0xa6,0xdc,0x6e,0xc0,0xbd,0x33,0x1f,0x1b,0x64,0xf4,0xf3,0x3e,0x79,0x89,0x3e,0x83,0x9d,0x80,0x12,0xec,0x82,0x89,0x13,0xa1,0x28,0x23,0xf0,0xbf,0x05}, - {0x0b,0xe0,0xca,0x23,0x70,0x13,0x32,0x36,0x59,0xcf,0xac,0xd1,0x0a,0xcf,0x4a,0x54,0x88,0x1c,0x1a,0xd2,0x49,0x10,0x74,0x96,0xa7,0x44,0x2a,0xfa,0xc3,0x8c,0x0b,0x78,0xe4,0x12,0xc5,0x0d,0xdd,0xa0,0x81,0x68,0xfe,0xfa,0xa5,0x44,0xc8,0x0d,0xe7,0x4f,0x40,0x52,0x4a,0x8f,0x6b,0x8e,0x74,0x1f,0xea,0xa3,0x01,0xee,0xcd,0x77,0x62,0x57,0x5f,0x30,0x4f,0x23,0xbc,0x8a,0xf3,0x1e,0x08,0xde,0x05,0x14,0xbd,0x7f,0x57,0x9a,0x0d,0x2a,0xe6,0x34,0x14,0xa5,0x82,0x5e,0xa1,0xb7,0x71,0x62,0x72,0x18,0xf4,0x5f}, - {0x9d,0xdb,0x89,0x17,0x0c,0x08,0x8e,0x39,0xf5,0x78,0xe7,0xf3,0x25,0x20,0x60,0xa7,0x5d,0x03,0xbd,0x06,0x4c,0x89,0x98,0xfa,0xbe,0x66,0xa9,0x25,0xdc,0x03,0x6a,0x10,0x40,0x95,0xb6,0x13,0xe8,0x47,0xdb,0xe5,0xe1,0x10,0x26,0x43,0x3b,0x2a,0x5d,0xf3,0x76,0x12,0x78,0x38,0xe9,0x26,0x1f,0xac,0x69,0xcb,0xa0,0xa0,0x8c,0xdb,0xd4,0x29,0xd0,0x53,0x33,0x33,0xaf,0x0a,0xad,0xd9,0xe5,0x09,0xd3,0xac,0xa5,0x9d,0x66,0x38,0xf0,0xf7,0x88,0xc8,0x8a,0x65,0x57,0x3c,0xfa,0xbe,0x2c,0x05,0x51,0x8a,0xb3,0x4a}, - {0x93,0xd5,0x68,0x67,0x25,0x2b,0x7c,0xda,0x13,0xca,0x22,0x44,0x57,0xc0,0xc1,0x98,0x1d,0xce,0x0a,0xca,0xd5,0x0b,0xa8,0xf1,0x90,0xa6,0x88,0xc0,0xad,0xd1,0xcd,0x29,0x9c,0xc0,0xdd,0x5f,0xef,0xd1,0xcf,0xd6,0xce,0x5d,0x57,0xf7,0xfd,0x3e,0x2b,0xe8,0xc2,0x34,0x16,0x20,0x5d,0x6b,0xd5,0x25,0x9b,0x2b,0xed,0x04,0xbb,0xc6,0x41,0x30,0x48,0xe1,0x56,0xd9,0xf9,0xf2,0xf2,0x0f,0x2e,0x6b,0x35,0x9f,0x75,0x97,0xe7,0xad,0x5c,0x02,0x6c,0x5f,0xbb,0x98,0x46,0x1a,0x7b,0x9a,0x04,0x14,0x68,0xbd,0x4b,0x10}, - {0x67,0xed,0xf1,0x68,0x31,0xfd,0xf0,0x51,0xc2,0x3b,0x6f,0xd8,0xcd,0x1d,0x81,0x2c,0xde,0xf2,0xd2,0x04,0x43,0x5c,0xdc,0x44,0x49,0x71,0x2a,0x09,0x57,0xcc,0xe8,0x5b,0x63,0xf1,0x7f,0xd6,0x5f,0x9a,0x5d,0xa9,0x81,0x56,0xc7,0x4c,0x9d,0xe6,0x2b,0xe9,0x57,0xf2,0x20,0xde,0x4c,0x02,0xf8,0xb7,0xf5,0x2d,0x07,0xfb,0x20,0x2a,0x4f,0x20,0x79,0xb0,0xeb,0x30,0x3d,0x3b,0x14,0xc8,0x30,0x2e,0x65,0xbd,0x5a,0x15,0x89,0x75,0x31,0x5c,0x6d,0x8f,0x31,0x3c,0x3c,0x65,0x1f,0x16,0x79,0xc2,0x17,0xfb,0x70,0x25}, - {0x75,0x15,0xb6,0x2c,0x7f,0x36,0xfa,0x3e,0x6c,0x02,0xd6,0x1c,0x76,0x6f,0xf9,0xf5,0x62,0x25,0xb5,0x65,0x2a,0x14,0xc7,0xe8,0xcd,0x0a,0x03,0x53,0xea,0x65,0xcb,0x3d,0x5a,0x24,0xb8,0x0b,0x55,0xa9,0x2e,0x19,0xd1,0x50,0x90,0x8f,0xa8,0xfb,0xe6,0xc8,0x35,0xc9,0xa4,0x88,0x2d,0xea,0x86,0x79,0x68,0x86,0x01,0xde,0x91,0x5f,0x1c,0x24,0xaa,0x6c,0xde,0x40,0x29,0x17,0xd8,0x28,0x3a,0x73,0xd9,0x22,0xf0,0x2c,0xbf,0x8f,0xd1,0x01,0x5b,0x23,0xdd,0xfc,0xd7,0x16,0xe5,0xf0,0xcd,0x5f,0xdd,0x0e,0x42,0x08}, - {0x4a,0xfa,0x62,0x83,0xab,0x20,0xff,0xcd,0x6e,0x3e,0x1a,0xe2,0xd4,0x18,0xe1,0x57,0x2b,0xe6,0x39,0xfc,0x17,0x96,0x17,0xe3,0xfd,0x69,0x17,0xbc,0xef,0x53,0x9a,0x0d,0xce,0x10,0xf4,0x04,0x4e,0xc3,0x58,0x03,0x85,0x06,0x6e,0x27,0x5a,0x5b,0x13,0xb6,0x21,0x15,0xb9,0xeb,0xc7,0x70,0x96,0x5d,0x9c,0x88,0xdb,0x21,0xf3,0x54,0xd6,0x04,0xd5,0xb5,0xbd,0xdd,0x16,0xc1,0x7d,0x5e,0x2d,0xdd,0xa5,0x8d,0xb6,0xde,0x54,0x29,0x92,0xa2,0x34,0x33,0x17,0x08,0xb6,0x1c,0xd7,0x1a,0x99,0x18,0x26,0x4f,0x7a,0x4a}, - {0x95,0x5f,0xb1,0x5f,0x02,0x18,0xa7,0xf4,0x8f,0x1b,0x5c,0x6b,0x34,0x5f,0xf6,0x3d,0x12,0x11,0xe0,0x00,0x85,0xf0,0xfc,0xcd,0x48,0x18,0xd3,0xdd,0x4c,0x0c,0xb5,0x11,0x4b,0x2a,0x37,0xaf,0x91,0xb2,0xc3,0x24,0xf2,0x47,0x81,0x71,0x70,0x82,0xda,0x93,0xf2,0x9e,0x89,0x86,0x64,0x85,0x84,0xdd,0x33,0xee,0xe0,0x23,0x42,0x31,0x96,0x4a,0xd6,0xff,0xa4,0x08,0x44,0x27,0xe8,0xa6,0xd9,0x76,0x15,0x9c,0x7e,0x17,0x8e,0x73,0xf2,0xb3,0x02,0x3d,0xb6,0x48,0x33,0x77,0x51,0xcc,0x6b,0xce,0x4d,0xce,0x4b,0x4f}, - {0x84,0x25,0x24,0xe2,0x5a,0xce,0x1f,0xa7,0x9e,0x8a,0xf5,0x92,0x56,0x72,0xea,0x26,0xf4,0x3c,0xea,0x1c,0xd7,0x09,0x1a,0xd2,0xe6,0x01,0x1c,0xb7,0x14,0xdd,0xfc,0x73,0x6f,0x0b,0x9d,0xc4,0x6e,0x61,0xe2,0x30,0x17,0x23,0xec,0xca,0x8f,0x71,0x56,0xe4,0xa6,0x4f,0x6b,0xf2,0x9b,0x40,0xeb,0x48,0x37,0x5f,0x59,0x61,0xe5,0xce,0x42,0x30,0x41,0xac,0x9b,0x44,0x79,0x70,0x7e,0x42,0x0a,0x31,0xe2,0xbc,0x6d,0xe3,0x5a,0x85,0x7c,0x1a,0x84,0x5f,0x21,0x76,0xae,0x4c,0xd6,0xe1,0x9c,0x9a,0x0c,0x74,0x9e,0x38}, - {0xce,0xb9,0xdc,0x34,0xae,0xb3,0xfc,0x64,0xad,0xd0,0x48,0xe3,0x23,0x03,0x50,0x97,0x1b,0x38,0xc6,0x62,0x7d,0xf0,0xb3,0x45,0x88,0x67,0x5a,0x46,0x79,0x53,0x54,0x61,0x28,0xac,0x0e,0x57,0xf6,0x78,0xbd,0xc9,0xe1,0x9c,0x91,0x27,0x32,0x0b,0x5b,0xe5,0xed,0x91,0x9b,0xa1,0xab,0x3e,0xfc,0x65,0x90,0x36,0x26,0xd6,0xe5,0x25,0xc4,0x25,0x6e,0xde,0xd7,0xf1,0xa6,0x06,0x3e,0x3f,0x08,0x23,0x06,0x8e,0x27,0x76,0xf9,0x3e,0x77,0x6c,0x8a,0x4e,0x26,0xf6,0x14,0x8c,0x59,0x47,0x48,0x15,0x89,0xa0,0x39,0x65}, - {0x73,0xf7,0xd2,0xc3,0x74,0x1f,0xd2,0xe9,0x45,0x68,0xc4,0x25,0x41,0x54,0x50,0xc1,0x33,0x9e,0xb9,0xf9,0xe8,0x5c,0x4e,0x62,0x6c,0x18,0xcd,0xc5,0xaa,0xe4,0xc5,0x11,0x19,0x4a,0xbb,0x14,0xd4,0xdb,0xc4,0xdd,0x8e,0x4f,0x42,0x98,0x3c,0xbc,0xb2,0x19,0x69,0x71,0xca,0x36,0xd7,0x9f,0xa8,0x48,0x90,0xbd,0x19,0xf0,0x0e,0x32,0x65,0x0f,0xc6,0xe0,0xfd,0xca,0xb1,0xd1,0x86,0xd4,0x81,0x51,0x3b,0x16,0xe3,0xe6,0x3f,0x4f,0x9a,0x93,0xf2,0xfa,0x0d,0xaf,0xa8,0x59,0x2a,0x07,0x33,0xec,0xbd,0xc7,0xab,0x4c}, - {0x2e,0x0a,0x9c,0x08,0x24,0x96,0x9e,0x23,0x38,0x47,0xfe,0x3a,0xc0,0xc4,0x48,0xc7,0x2a,0xa1,0x4f,0x76,0x2a,0xed,0xdb,0x17,0x82,0x85,0x1c,0x32,0xf0,0x93,0x9b,0x63,0x89,0xd2,0x78,0x3f,0x8f,0x78,0x8f,0xc0,0x9f,0x4d,0x40,0xa1,0x2c,0xa7,0x30,0xfe,0x9d,0xcc,0x65,0xcf,0xfc,0x8b,0x77,0xf2,0x21,0x20,0xcb,0x5a,0x16,0x98,0xe4,0x7e,0xc3,0xa1,0x11,0x91,0xe3,0x08,0xd5,0x7b,0x89,0x74,0x90,0x80,0xd4,0x90,0x2b,0x2b,0x19,0xfd,0x72,0xae,0xc2,0xae,0xd2,0xe7,0xa6,0x02,0xb6,0x85,0x3c,0x49,0xdf,0x0e}, - {0x68,0x5a,0x9b,0x59,0x58,0x81,0xcc,0xae,0x0e,0xe2,0xad,0xeb,0x0f,0x4f,0x57,0xea,0x07,0x7f,0xb6,0x22,0x74,0x1d,0xe4,0x4f,0xb4,0x4f,0x9d,0x01,0xe3,0x92,0x3b,0x40,0x13,0x41,0x76,0x84,0xd2,0xc4,0x67,0x67,0x35,0xf8,0xf5,0xf7,0x3f,0x40,0x90,0xa0,0xde,0xbe,0xe6,0xca,0xfa,0xcf,0x8f,0x1c,0x69,0xa3,0xdf,0xd1,0x54,0x0c,0xc0,0x04,0xf8,0x5c,0x46,0x8b,0x81,0x2f,0xc2,0x4d,0xf8,0xef,0x80,0x14,0x5a,0xf3,0xa0,0x71,0x57,0xd6,0xc7,0x04,0xad,0xbf,0xe8,0xae,0xf4,0x76,0x61,0xb2,0x2a,0xb1,0x5b,0x35}, - {0xf4,0xbb,0x93,0x74,0xcc,0x64,0x1e,0xa7,0xc3,0xb0,0xa3,0xec,0xd9,0x84,0xbd,0xe5,0x85,0xe7,0x05,0xfa,0x0c,0xc5,0x6b,0x0a,0x12,0xc3,0x2e,0x18,0x32,0x81,0x9b,0x0f,0x18,0x73,0x8c,0x5a,0xc7,0xda,0x01,0xa3,0x11,0xaa,0xce,0xb3,0x9d,0x03,0x90,0xed,0x2d,0x3f,0xae,0x3b,0xbf,0x7c,0x07,0x6f,0x8e,0xad,0x52,0xe0,0xf8,0xea,0x18,0x75,0x32,0x6c,0x7f,0x1b,0xc4,0x59,0x88,0xa4,0x98,0x32,0x38,0xf4,0xbc,0x60,0x2d,0x0f,0xd9,0xd1,0xb1,0xc9,0x29,0xa9,0x15,0x18,0xc4,0x55,0x17,0xbb,0x1b,0x87,0xc3,0x47}, - {0x48,0x4f,0xec,0x71,0x97,0x53,0x44,0x51,0x6e,0x5d,0x8c,0xc9,0x7d,0xb1,0x05,0xf8,0x6b,0xc6,0xc3,0x47,0x1a,0xc1,0x62,0xf7,0xdc,0x99,0x46,0x76,0x85,0x9b,0xb8,0x00,0xb0,0x66,0x50,0xc8,0x50,0x5d,0xe6,0xfb,0xb0,0x99,0xa2,0xb3,0xb0,0xc4,0xec,0x62,0xe0,0xe8,0x1a,0x44,0xea,0x54,0x37,0xe5,0x5f,0x8d,0xd4,0xe8,0x2c,0xa0,0xfe,0x08,0xd0,0xea,0xde,0x68,0x76,0xdd,0x4d,0x82,0x23,0x5d,0x68,0x4b,0x20,0x45,0x64,0xc8,0x65,0xd6,0x89,0x5d,0xcd,0xcf,0x14,0xb5,0x37,0xd5,0x75,0x4f,0xa7,0x29,0x38,0x47}, - {0x18,0xc4,0x79,0x46,0x75,0xda,0xd2,0x82,0xf0,0x8d,0x61,0xb2,0xd8,0xd7,0x3b,0xe6,0x0a,0xeb,0x47,0xac,0x24,0xef,0x5e,0x35,0xb4,0xc6,0x33,0x48,0x4c,0x68,0x78,0x20,0xc9,0x02,0x39,0xad,0x3a,0x53,0xd9,0x23,0x8f,0x58,0x03,0xef,0xce,0xdd,0xc2,0x64,0xb4,0x2f,0xe1,0xcf,0x90,0x73,0x25,0x15,0x90,0xd3,0xe4,0x44,0x4d,0x8b,0x66,0x6c,0x0c,0x82,0x78,0x7a,0x21,0xcf,0x48,0x3b,0x97,0x3e,0x27,0x81,0xb2,0x0a,0x6a,0xf7,0x7b,0xed,0x8e,0x8c,0xa7,0x65,0x6c,0xa9,0x3f,0x43,0x8a,0x4f,0x05,0xa6,0x11,0x74}, - {0x6d,0xc8,0x9d,0xb9,0x32,0x9d,0x65,0x4d,0x15,0xf1,0x3a,0x60,0x75,0xdc,0x4c,0x04,0x88,0xe4,0xc2,0xdc,0x2c,0x71,0x4c,0xb3,0xff,0x34,0x81,0xfb,0x74,0x65,0x13,0x7c,0xb4,0x75,0xb1,0x18,0x3d,0xe5,0x9a,0x57,0x02,0xa1,0x92,0xf3,0x59,0x31,0x71,0x68,0xf5,0x35,0xef,0x1e,0xba,0xec,0x55,0x84,0x8f,0x39,0x8c,0x45,0x72,0xa8,0xc9,0x1e,0x9b,0x50,0xa2,0x00,0xd4,0xa4,0xe6,0xb8,0xb4,0x82,0xc8,0x0b,0x02,0xd7,0x81,0x9b,0x61,0x75,0x95,0xf1,0x9b,0xcc,0xe7,0x57,0x60,0x64,0xcd,0xc7,0xa5,0x88,0xdd,0x3a}, - {0xf2,0xdc,0x35,0xb6,0x70,0x57,0x89,0xab,0xbc,0x1f,0x6c,0xf6,0x6c,0xef,0xdf,0x02,0x87,0xd1,0xb6,0xbe,0x68,0x02,0x53,0x85,0x74,0x9e,0x87,0xcc,0xfc,0x29,0x99,0x24,0x46,0x30,0x39,0x59,0xd4,0x98,0xc2,0x85,0xec,0x59,0xf6,0x5f,0x98,0x35,0x7e,0x8f,0x3a,0x6e,0xf6,0xf2,0x2a,0xa2,0x2c,0x1d,0x20,0xa7,0x06,0xa4,0x31,0x11,0xba,0x61,0x29,0x90,0x95,0x16,0xf1,0xa0,0xd0,0xa3,0x89,0xbd,0x7e,0xba,0x6c,0x6b,0x3b,0x02,0x07,0x33,0x78,0x26,0x3e,0x5a,0xf1,0x7b,0xe7,0xec,0xd8,0xbb,0x0c,0x31,0x20,0x56}, - {0x43,0xd6,0x34,0x49,0x43,0x93,0x89,0x52,0xf5,0x22,0x12,0xa5,0x06,0xf8,0xdb,0xb9,0x22,0x1c,0xf4,0xc3,0x8f,0x87,0x6d,0x8f,0x30,0x97,0x9d,0x4d,0x2a,0x6a,0x67,0x37,0xd6,0x85,0xe2,0x77,0xf4,0xb5,0x46,0x66,0x93,0x61,0x8f,0x6c,0x67,0xff,0xe8,0x40,0xdd,0x94,0xb5,0xab,0x11,0x73,0xec,0xa6,0x4d,0xec,0x8c,0x65,0xf3,0x46,0xc8,0x7e,0xc7,0x2e,0xa2,0x1d,0x3f,0x8f,0x5e,0x9b,0x13,0xcd,0x01,0x6c,0x77,0x1d,0x0f,0x13,0xb8,0x9f,0x98,0xa2,0xcf,0x8f,0x4c,0x21,0xd5,0x9d,0x9b,0x39,0x23,0xf7,0xaa,0x6d}, - {0x47,0xbe,0x3d,0xeb,0x62,0x75,0x3a,0x5f,0xb8,0xa0,0xbd,0x8e,0x54,0x38,0xea,0xf7,0x99,0x72,0x74,0x45,0x31,0xe5,0xc3,0x00,0x51,0xd5,0x27,0x16,0xe7,0xe9,0x04,0x13,0xa2,0x8e,0xad,0xac,0xbf,0x04,0x3b,0x58,0x84,0xe8,0x8b,0x14,0xe8,0x43,0xb7,0x29,0xdb,0xc5,0x10,0x08,0x3b,0x58,0x1e,0x2b,0xaa,0xbb,0xb3,0x8e,0xe5,0x49,0x54,0x2b,0xfe,0x9c,0xdc,0x6a,0xd2,0x14,0x98,0x78,0x0b,0xdd,0x48,0x8b,0x3f,0xab,0x1b,0x3c,0x0a,0xc6,0x79,0xf9,0xff,0xe1,0x0f,0xda,0x93,0xd6,0x2d,0x7c,0x2d,0xde,0x68,0x44}, - {0x9e,0x46,0x19,0x94,0x5e,0x35,0xbb,0x51,0x54,0xc7,0xdd,0x23,0x4c,0xdc,0xe6,0x33,0x62,0x99,0x7f,0x44,0xd6,0xb6,0xa5,0x93,0x63,0xbd,0x44,0xfb,0x6f,0x7c,0xce,0x6c,0xce,0x07,0x63,0xf8,0xc6,0xd8,0x9a,0x4b,0x28,0x0c,0x5d,0x43,0x31,0x35,0x11,0x21,0x2c,0x77,0x7a,0x65,0xc5,0x66,0xa8,0xd4,0x52,0x73,0x24,0x63,0x7e,0x42,0xa6,0x5d,0xca,0x22,0xac,0xde,0x88,0xc6,0x94,0x1a,0xf8,0x1f,0xae,0xbb,0xf7,0x6e,0x06,0xb9,0x0f,0x58,0x59,0x8d,0x38,0x8c,0xad,0x88,0xa8,0x2c,0x9f,0xe7,0xbf,0x9a,0xf2,0x58}, - {0x68,0x3e,0xe7,0x8d,0xab,0xcf,0x0e,0xe9,0xa5,0x76,0x7e,0x37,0x9f,0x6f,0x03,0x54,0x82,0x59,0x01,0xbe,0x0b,0x5b,0x49,0xf0,0x36,0x1e,0xf4,0xa7,0xc4,0x29,0x76,0x57,0xf6,0xcd,0x0e,0x71,0xbf,0x64,0x5a,0x4b,0x3c,0x29,0x2c,0x46,0x38,0xe5,0x4c,0xb1,0xb9,0x3a,0x0b,0xd5,0x56,0xd0,0x43,0x36,0x70,0x48,0x5b,0x18,0x24,0x37,0xf9,0x6a,0x88,0xa8,0xc6,0x09,0x45,0x02,0x20,0x32,0x73,0x89,0x55,0x4b,0x13,0x36,0xe0,0xd2,0x9f,0x28,0x33,0x3c,0x23,0x36,0xe2,0x83,0x8f,0xc1,0xae,0x0c,0xbb,0x25,0x1f,0x70}, - {0xed,0x6c,0x61,0xe4,0xf8,0xb0,0xa8,0xc3,0x7d,0xa8,0x25,0x9e,0x0e,0x66,0x00,0xf7,0x9c,0xa5,0xbc,0xf4,0x1f,0x06,0xe3,0x61,0xe9,0x0b,0xc4,0xbd,0xbf,0x92,0x0c,0x2e,0x13,0xc1,0xbe,0x7c,0xd9,0xf6,0x18,0x9d,0xe4,0xdb,0xbf,0x74,0xe6,0x06,0x4a,0x84,0xd6,0x60,0x4e,0xac,0x22,0xb5,0xf5,0x20,0x51,0x5e,0x95,0x50,0xc0,0x5b,0x0a,0x72,0x35,0x5a,0x80,0x9b,0x43,0x09,0x3f,0x0c,0xfc,0xab,0x42,0x62,0x37,0x8b,0x4e,0xe8,0x46,0x93,0x22,0x5c,0xf3,0x17,0x14,0x69,0xec,0xf0,0x4e,0x14,0xbb,0x9c,0x9b,0x0e}, - {0xad,0x20,0x57,0xfb,0x8f,0xd4,0xba,0xfb,0x0e,0x0d,0xf9,0xdb,0x6b,0x91,0x81,0xee,0xbf,0x43,0x55,0x63,0x52,0x31,0x81,0xd4,0xd8,0x7b,0x33,0x3f,0xeb,0x04,0x11,0x22,0xee,0xbe,0xb1,0x5d,0xd5,0x9b,0xee,0x8d,0xb9,0x3f,0x72,0x0a,0x37,0xab,0xc3,0xc9,0x91,0xd7,0x68,0x1c,0xbf,0xf1,0xa8,0x44,0xde,0x3c,0xfd,0x1c,0x19,0x44,0x6d,0x36,0x14,0x8c,0xbc,0xf2,0x43,0x17,0x3c,0x9e,0x3b,0x6c,0x85,0xb5,0xfc,0x26,0xda,0x2e,0x97,0xfb,0xa7,0x68,0x0e,0x2f,0xb8,0xcc,0x44,0x32,0x59,0xbc,0xe6,0xa4,0x67,0x41}, - {0x00,0x27,0xf6,0x76,0x28,0x9d,0x3b,0x64,0xeb,0x68,0x76,0x0e,0x40,0x9d,0x1d,0x5d,0x84,0x06,0xfc,0x21,0x03,0x43,0x4b,0x1b,0x6a,0x24,0x55,0x22,0x7e,0xbb,0x38,0x79,0xee,0x8f,0xce,0xf8,0x65,0x26,0xbe,0xc2,0x2c,0xd6,0x80,0xe8,0x14,0xff,0x67,0xe9,0xee,0x4e,0x36,0x2f,0x7e,0x6e,0x2e,0xf1,0xf6,0xd2,0x7e,0xcb,0x70,0x33,0xb3,0x34,0xcc,0xd6,0x81,0x86,0xee,0x91,0xc5,0xcd,0x53,0xa7,0x85,0xed,0x9c,0x10,0x02,0xce,0x83,0x88,0x80,0x58,0xc1,0x85,0x74,0xed,0xe4,0x65,0xfe,0x2d,0x6e,0xfc,0x76,0x11}, - {0x9b,0x61,0x9c,0x5b,0xd0,0x6c,0xaf,0xb4,0x80,0x84,0xa5,0xb2,0xf4,0xc9,0xdf,0x2d,0xc4,0x4d,0xe9,0xeb,0x02,0xa5,0x4f,0x3d,0x34,0x5f,0x7d,0x67,0x4c,0x3a,0xfc,0x08,0xb8,0x0e,0x77,0x49,0x89,0xe2,0x90,0xdb,0xa3,0x40,0xf4,0xac,0x2a,0xcc,0xfb,0x98,0x9b,0x87,0xd7,0xde,0xfe,0x4f,0x35,0x21,0xb6,0x06,0x69,0xf2,0x54,0x3e,0x6a,0x1f,0xea,0x34,0x07,0xd3,0x99,0xc1,0xa4,0x60,0xd6,0x5c,0x16,0x31,0xb6,0x85,0xc0,0x40,0x95,0x82,0x59,0xf7,0x23,0x3e,0x33,0xe2,0xd1,0x00,0xb9,0x16,0x01,0xad,0x2f,0x4f}, - {0x54,0x4e,0xae,0x94,0x41,0xb2,0xbe,0x44,0x6c,0xef,0x57,0x18,0x51,0x1c,0x54,0x5f,0x98,0x04,0x8d,0x36,0x2d,0x6b,0x1e,0xa6,0xab,0xf7,0x2e,0x97,0xa4,0x84,0x54,0x44,0x38,0xb6,0x3b,0xb7,0x1d,0xd9,0x2c,0x96,0x08,0x9c,0x12,0xfc,0xaa,0x77,0x05,0xe6,0x89,0x16,0xb6,0xf3,0x39,0x9b,0x61,0x6f,0x81,0xee,0x44,0x29,0x5f,0x99,0x51,0x34,0x7c,0x7d,0xea,0x9f,0xd0,0xfc,0x52,0x91,0xf6,0x5c,0x93,0xb0,0x94,0x6c,0x81,0x4a,0x40,0x5c,0x28,0x47,0xaa,0x9a,0x8e,0x25,0xb7,0x93,0x28,0x04,0xa6,0x9c,0xb8,0x10}, - {0x9c,0x28,0x18,0x97,0x49,0x47,0x59,0x3d,0x26,0x3f,0x53,0x24,0xc5,0xf8,0xeb,0x12,0x15,0xef,0xc3,0x14,0xcb,0xbf,0x62,0x02,0x8e,0x51,0xb7,0x77,0xd5,0x78,0xb8,0x20,0x6e,0xf0,0x45,0x5a,0xbe,0x41,0x39,0x75,0x65,0x5f,0x9c,0x6d,0xed,0xae,0x7c,0xd0,0xb6,0x51,0xff,0x72,0x9c,0x6b,0x77,0x11,0xa9,0x4d,0x0d,0xef,0xd9,0xd1,0xd2,0x17,0x6a,0x3e,0x3f,0x07,0x18,0xaf,0xf2,0x27,0x69,0x10,0x52,0xd7,0x19,0xe5,0x3f,0xfd,0x22,0x00,0xa6,0x3c,0x2c,0xb7,0xe3,0x22,0xa7,0xc6,0x65,0xcc,0x63,0x4f,0x21,0x72}, - {0x93,0xa6,0x07,0x53,0x40,0x7f,0xe3,0xb4,0x95,0x67,0x33,0x2f,0xd7,0x14,0xa7,0xab,0x99,0x10,0x76,0x73,0xa7,0xd0,0xfb,0xd6,0xc9,0xcb,0x71,0x81,0xc5,0x48,0xdf,0x5f,0xc9,0x29,0x3b,0xf4,0xb9,0xb7,0x9d,0x1d,0x75,0x8f,0x51,0x4f,0x4a,0x82,0x05,0xd6,0xc4,0x9d,0x2f,0x31,0xbd,0x72,0xc0,0xf2,0xb0,0x45,0x15,0x5a,0x85,0xac,0x24,0x1f,0xaa,0x05,0x95,0x8e,0x32,0x08,0xd6,0x24,0xee,0x20,0x14,0x0c,0xd1,0xc1,0x48,0x47,0xa2,0x25,0xfb,0x06,0x5c,0xe4,0xff,0xc7,0xe6,0x95,0xe3,0x2a,0x9e,0x73,0xba,0x00}, - {0xd6,0x90,0x87,0x5c,0xde,0x98,0x2e,0x59,0xdf,0xa2,0xc2,0x45,0xd3,0xb7,0xbf,0xe5,0x22,0x99,0xb4,0xf9,0x60,0x3b,0x5a,0x11,0xf3,0x78,0xad,0x67,0x3e,0x3a,0x28,0x03,0x26,0xbb,0x88,0xea,0xf5,0x26,0x44,0xae,0xfb,0x3b,0x97,0x84,0xd9,0x79,0x06,0x36,0x50,0x4e,0x69,0x26,0x0c,0x03,0x9f,0x5c,0x26,0xd2,0x18,0xd5,0xe7,0x7d,0x29,0x72,0x39,0xb9,0x0c,0xbe,0xc7,0x1d,0x24,0x48,0x80,0x30,0x63,0x8b,0x4d,0x9b,0xf1,0x32,0x08,0x93,0x28,0x02,0x0d,0xc9,0xdf,0xd3,0x45,0x19,0x27,0x46,0x68,0x29,0xe1,0x05}, - {0x5a,0x49,0x9c,0x2d,0xb3,0xee,0x82,0xba,0x7c,0xb9,0x2b,0xf1,0xfc,0xc8,0xef,0xce,0xe0,0xd1,0xb5,0x93,0xae,0xab,0x2d,0xb0,0x9b,0x8d,0x69,0x13,0x9c,0x0c,0xc0,0x39,0x50,0x45,0x2c,0x24,0xc8,0xbb,0xbf,0xad,0xd9,0x81,0x30,0xd0,0xec,0x0c,0xc8,0xbc,0x92,0xdf,0xc8,0xf5,0xa6,0x66,0x35,0x84,0x4c,0xce,0x58,0x82,0xd3,0x25,0xcf,0x78,0x68,0x9d,0x48,0x31,0x8e,0x6b,0xae,0x15,0x87,0xf0,0x2b,0x9c,0xab,0x1c,0x85,0xaa,0x05,0xfa,0x4e,0xf0,0x97,0x5a,0xa7,0xc9,0x32,0xf8,0x3f,0x6b,0x07,0x52,0x6b,0x00}, - {0x1c,0x78,0x95,0x9d,0xe1,0xcf,0xe0,0x29,0xe2,0x10,0x63,0x96,0x18,0xdf,0x81,0xb6,0x39,0x6b,0x51,0x70,0xd3,0x39,0xdf,0x57,0x22,0x61,0xc7,0x3b,0x44,0xe3,0x57,0x4d,0x2d,0x08,0xce,0xb9,0x16,0x7e,0xcb,0xf5,0x29,0xbc,0x7a,0x41,0x4c,0xf1,0x07,0x34,0xab,0xa7,0xf4,0x2b,0xce,0x6b,0xb3,0xd4,0xce,0x75,0x9f,0x1a,0x56,0xe9,0xe2,0x7d,0xcb,0x5e,0xa5,0xb6,0xf4,0xd4,0x70,0xde,0x99,0xdb,0x85,0x5d,0x7f,0x52,0x01,0x48,0x81,0x9a,0xee,0xd3,0x40,0xc4,0xc9,0xdb,0xed,0x29,0x60,0x1a,0xaf,0x90,0x2a,0x6b}, - {0x97,0x1e,0xe6,0x9a,0xfc,0xf4,0x23,0x69,0xd1,0x5f,0x3f,0xe0,0x1d,0x28,0x35,0x57,0x2d,0xd1,0xed,0xe6,0x43,0xae,0x64,0xa7,0x4a,0x3e,0x2d,0xd1,0xe9,0xf4,0xd8,0x5f,0x0a,0xd8,0xb2,0x5b,0x24,0xf3,0xeb,0x77,0x9b,0x07,0xb9,0x2f,0x47,0x1b,0x30,0xd8,0x33,0x73,0xee,0x4c,0xf2,0xe6,0x47,0xc6,0x09,0x21,0x6c,0x27,0xc8,0x12,0x58,0x46,0xd9,0x62,0x10,0x2a,0xb2,0xbe,0x43,0x4d,0x16,0xdc,0x31,0x38,0x75,0xfb,0x65,0x70,0xd7,0x68,0x29,0xde,0x7b,0x4a,0x0d,0x18,0x90,0x67,0xb1,0x1c,0x2b,0x2c,0xb3,0x05}, - {0xfd,0xa8,0x4d,0xd2,0xcc,0x5e,0xc0,0xc8,0x83,0xef,0xdf,0x05,0xac,0x1a,0xcf,0xa1,0x61,0xcd,0xf9,0x7d,0xf2,0xef,0xbe,0xdb,0x99,0x1e,0x47,0x7b,0xa3,0x56,0x55,0x3b,0x95,0x81,0xd5,0x7a,0x2c,0xa4,0xfc,0xf7,0xcc,0xf3,0x33,0x43,0x6e,0x28,0x14,0x32,0x9d,0x97,0x0b,0x34,0x0d,0x9d,0xc2,0xb6,0xe1,0x07,0x73,0x56,0x48,0x1a,0x77,0x31,0x82,0xd4,0x4d,0xe1,0x24,0xc5,0xb0,0x32,0xb6,0xa4,0x2b,0x1a,0x54,0x51,0xb3,0xed,0xf3,0x5a,0x2b,0x28,0x48,0x60,0xd1,0xa3,0xeb,0x36,0x73,0x7a,0xd2,0x79,0xc0,0x4f}, - {0x7f,0x2f,0xbf,0x89,0xb0,0x38,0xc9,0x51,0xa7,0xe9,0xdf,0x02,0x65,0xbd,0x97,0x24,0x53,0xe4,0x80,0x78,0x9c,0xc0,0xff,0xff,0x92,0x8e,0xf9,0xca,0xce,0x67,0x45,0x12,0x0d,0xc5,0x86,0x0c,0x44,0x8b,0x34,0xdc,0x51,0xe6,0x94,0xcc,0xc9,0xcb,0x37,0x13,0xb9,0x3c,0x3e,0x64,0x4d,0xf7,0x22,0x64,0x08,0xcd,0xe3,0xba,0xc2,0x70,0x11,0x24,0xb4,0x73,0xc4,0x0a,0x86,0xab,0xf9,0x3f,0x35,0xe4,0x13,0x01,0xee,0x1d,0x91,0xf0,0xaf,0xc4,0xc6,0xeb,0x60,0x50,0xe7,0x4a,0x0d,0x00,0x87,0x6c,0x96,0x12,0x86,0x3f}, - {0xde,0x0d,0x2a,0x78,0xc9,0x0c,0x9a,0x55,0x85,0x83,0x71,0xea,0xb2,0xcd,0x1d,0x55,0x8c,0x23,0xef,0x31,0x5b,0x86,0x62,0x7f,0x3d,0x61,0x73,0x79,0x76,0xa7,0x4a,0x50,0x13,0x8d,0x04,0x36,0xfa,0xfc,0x18,0x9c,0xdd,0x9d,0x89,0x73,0xb3,0x9d,0x15,0x29,0xaa,0xd0,0x92,0x9f,0x0b,0x35,0x9f,0xdc,0xd4,0x19,0x8a,0x87,0xee,0x7e,0xf5,0x26,0xb1,0xef,0x87,0x56,0xd5,0x2c,0xab,0x0c,0x7b,0xf1,0x7a,0x24,0x62,0xd1,0x80,0x51,0x67,0x24,0x5a,0x4f,0x34,0x5a,0xc1,0x85,0x69,0x30,0xba,0x9d,0x3d,0x94,0x41,0x40}, - {0x96,0xcc,0xeb,0x43,0xba,0xee,0xc0,0xc3,0xaf,0x9c,0xea,0x26,0x9c,0x9c,0x74,0x8d,0xc6,0xcc,0x77,0x1c,0xee,0x95,0xfa,0xd9,0x0f,0x34,0x84,0x76,0xd9,0xa1,0x20,0x14,0xdd,0xaa,0x6c,0xa2,0x43,0x77,0x21,0x4b,0xce,0xb7,0x8a,0x64,0x24,0xb4,0xa6,0x47,0xe3,0xc9,0xfb,0x03,0x7a,0x4f,0x1d,0xcb,0x19,0xd0,0x00,0x98,0x42,0x31,0xd9,0x12,0x4f,0x59,0x37,0xd3,0x99,0x77,0xc6,0x00,0x7b,0xa4,0x3a,0xb2,0x40,0x51,0x3c,0x5e,0x95,0xf3,0x5f,0xe3,0x54,0x28,0x18,0x44,0x12,0xa0,0x59,0x43,0x31,0x92,0x4f,0x1b}, - {0x51,0x09,0x15,0x89,0x9d,0x10,0x5c,0x3e,0x6a,0x69,0xe9,0x2d,0x91,0xfa,0xce,0x39,0x20,0x30,0x5f,0x97,0x3f,0xe4,0xea,0x20,0xae,0x2d,0x13,0x7f,0x2a,0x57,0x9b,0x23,0xb1,0x66,0x98,0xa4,0x30,0x30,0xcf,0x33,0x59,0x48,0x5f,0x21,0xd2,0x73,0x1f,0x25,0xf6,0xf4,0xde,0x51,0x40,0xaa,0x82,0xab,0xf6,0x23,0x9a,0x6f,0xd5,0x91,0xf1,0x5f,0x68,0x90,0x2d,0xac,0x33,0xd4,0x9e,0x81,0x23,0x85,0xc9,0x5f,0x79,0xab,0x83,0x28,0x3d,0xeb,0x93,0x55,0x80,0x72,0x45,0xef,0xcb,0x36,0x8f,0x75,0x6a,0x52,0x0c,0x02}, - {0xbc,0xdb,0xd8,0x9e,0xf8,0x34,0x98,0x77,0x6c,0xa4,0x7c,0xdc,0xf9,0xaa,0xf2,0xc8,0x74,0xb0,0xe1,0xa3,0xdc,0x4c,0x52,0xa9,0x77,0x38,0x31,0x15,0x46,0xcc,0xaa,0x02,0x89,0xcc,0x42,0xf0,0x59,0xef,0x31,0xe9,0xb6,0x4b,0x12,0x8e,0x9d,0x9c,0x58,0x2c,0x97,0x59,0xc7,0xae,0x8a,0xe1,0xc8,0xad,0x0c,0xc5,0x02,0x56,0x0a,0xfe,0x2c,0x45,0xdf,0x77,0x78,0x64,0xa0,0xf7,0xa0,0x86,0x9f,0x7c,0x60,0x0e,0x27,0x64,0xc4,0xbb,0xc9,0x11,0xfb,0xf1,0x25,0xea,0x17,0xab,0x7b,0x87,0x4b,0x30,0x7b,0x7d,0xfb,0x4c}, - {0xfe,0x75,0x9b,0xb8,0x6c,0x3d,0xb4,0x72,0x80,0xdc,0x6a,0x9c,0xd9,0x94,0xc6,0x54,0x9f,0x4c,0xe3,0x3e,0x37,0xaa,0xc3,0xb8,0x64,0x53,0x07,0x39,0x2b,0x62,0xb4,0x14,0x12,0xef,0x89,0x97,0xc2,0x99,0x86,0xe2,0x0d,0x19,0x57,0xdf,0x71,0xcd,0x6e,0x2b,0xd0,0x70,0xc9,0xec,0x57,0xc8,0x43,0xc3,0xc5,0x3a,0x4d,0x43,0xbc,0x4c,0x1d,0x5b,0x26,0x9f,0x0a,0xcc,0x15,0x26,0xfb,0xb6,0xe5,0xcc,0x8d,0xb8,0x2b,0x0e,0x4f,0x3a,0x05,0xa7,0x69,0x33,0x8b,0x49,0x01,0x13,0xd1,0x2d,0x59,0x58,0x12,0xf7,0x98,0x2f}, - {0x56,0x9e,0x0f,0xb5,0x4c,0xa7,0x94,0x0c,0x20,0x13,0x8e,0x8e,0xa9,0xf4,0x1f,0x5b,0x67,0x0f,0x30,0x82,0x21,0xcc,0x2a,0x9a,0xf9,0xaa,0x06,0xd8,0x49,0xe2,0x6a,0x3a,0x01,0xa7,0x54,0x4f,0x44,0xae,0x12,0x2e,0xde,0xd7,0xcb,0xa9,0xf0,0x3e,0xfe,0xfc,0xe0,0x5d,0x83,0x75,0x0d,0x89,0xbf,0xce,0x54,0x45,0x61,0xe7,0xe9,0x62,0x80,0x1d,0x5a,0x7c,0x90,0xa9,0x85,0xda,0x7a,0x65,0x62,0x0f,0xb9,0x91,0xb5,0xa8,0x0e,0x1a,0xe9,0xb4,0x34,0xdf,0xfb,0x1d,0x0e,0x8d,0xf3,0x5f,0xf2,0xae,0xe8,0x8c,0x8b,0x29}, - {0xb2,0x0c,0xf7,0xef,0x53,0x79,0x92,0x2a,0x76,0x70,0x15,0x79,0x2a,0xc9,0x89,0x4b,0x6a,0xcf,0xa7,0x30,0x7a,0x45,0x18,0x94,0x85,0xe4,0x5c,0x4d,0x40,0xa8,0xb8,0x34,0xde,0x65,0x21,0x0a,0xea,0x72,0x7a,0x83,0xf6,0x79,0xcf,0x0b,0xb4,0x07,0xab,0x3f,0x70,0xae,0x38,0x77,0xc7,0x36,0x16,0x52,0xdc,0xd7,0xa7,0x03,0x18,0x27,0xa6,0x6b,0x35,0x33,0x69,0x83,0xb5,0xec,0x6e,0xc2,0xfd,0xfe,0xb5,0x63,0xdf,0x13,0xa8,0xd5,0x73,0x25,0xb2,0xa4,0x9a,0xaa,0x93,0xa2,0x6a,0x1c,0x5e,0x46,0xdd,0x2b,0xd6,0x71}, - {0x80,0xdf,0x78,0xd3,0x28,0xcc,0x33,0x65,0xb4,0xa4,0x0f,0x0a,0x79,0x43,0xdb,0xf6,0x5a,0xda,0x01,0xf7,0xf9,0x5f,0x64,0xe3,0xa4,0x2b,0x17,0xf3,0x17,0xf3,0xd5,0x74,0xf5,0x5e,0xf7,0xb1,0xda,0xb5,0x2d,0xcd,0xf5,0x65,0xb0,0x16,0xcf,0x95,0x7f,0xd7,0x85,0xf0,0x49,0x3f,0xea,0x1f,0x57,0x14,0x3d,0x2b,0x2b,0x26,0x21,0x36,0x33,0x1c,0x81,0xca,0xd9,0x67,0x54,0xe5,0x6f,0xa8,0x37,0x8c,0x29,0x2b,0x75,0x7c,0x8b,0x39,0x3b,0x62,0xac,0xe3,0x92,0x08,0x6d,0xda,0x8c,0xd9,0xe9,0x47,0x45,0xcc,0xeb,0x4a}, - {0xc9,0x01,0x6d,0x27,0x1b,0x07,0xf0,0x12,0x70,0x8c,0xc4,0x86,0xc5,0xba,0xb8,0xe7,0xa9,0xfb,0xd6,0x71,0x9b,0x12,0x08,0x53,0x92,0xb7,0x3d,0x5a,0xf9,0xfb,0x88,0x5d,0x10,0xb6,0x54,0x73,0x9e,0x8d,0x40,0x0b,0x6e,0x5b,0xa8,0x5b,0x53,0x32,0x6b,0x80,0x07,0xa2,0x58,0x4a,0x03,0x3a,0xe6,0xdb,0x2c,0xdf,0xa1,0xc9,0xdd,0xd9,0x3b,0x17,0xdf,0x72,0x58,0xfe,0x1e,0x0f,0x50,0x2b,0xc1,0x18,0x39,0xd4,0x2e,0x58,0xd6,0x58,0xe0,0x3a,0x67,0xc9,0x8e,0x27,0xed,0xe6,0x19,0xa3,0x9e,0xb1,0x13,0xcd,0xe1,0x06}, - {0x23,0x6f,0x16,0x6f,0x51,0xad,0xd0,0x40,0xbe,0x6a,0xab,0x1f,0x93,0x32,0x8e,0x11,0x8e,0x08,0x4d,0xa0,0x14,0x5e,0xe3,0x3f,0x66,0x62,0xe1,0x26,0x35,0x60,0x80,0x30,0x53,0x03,0x5b,0x9e,0x62,0xaf,0x2b,0x47,0x47,0x04,0x8d,0x27,0x90,0x0b,0xaa,0x3b,0x27,0xbf,0x43,0x96,0x46,0x5f,0x78,0x0c,0x13,0x7b,0x83,0x8d,0x1a,0x6a,0x3a,0x7f,0x0b,0x80,0x3d,0x5d,0x39,0x44,0xe6,0xf7,0xf6,0xed,0x01,0xc9,0x55,0xd5,0xa8,0x95,0x39,0x63,0x2c,0x59,0x30,0x78,0xcd,0x68,0x7e,0x30,0x51,0x2e,0xed,0xfd,0xd0,0x30}, - {0xb3,0x33,0x12,0xf2,0x1a,0x4d,0x59,0xe0,0x9c,0x4d,0xcc,0xf0,0x8e,0xe7,0xdb,0x1b,0x77,0x9a,0x49,0x8f,0x7f,0x18,0x65,0x69,0x68,0x98,0x09,0x2c,0x20,0x14,0x92,0x0a,0x50,0x47,0xb8,0x68,0x1e,0x97,0xb4,0x9c,0xcf,0xbb,0x64,0x66,0x29,0x72,0x95,0xa0,0x2b,0x41,0xfa,0x72,0x26,0xe7,0x8d,0x5c,0xd9,0x89,0xc5,0x51,0x43,0x08,0x15,0x46,0x2e,0xa0,0xb9,0xae,0xc0,0x19,0x90,0xbc,0xae,0x4c,0x03,0x16,0x0d,0x11,0xc7,0x55,0xec,0x32,0x99,0x65,0x01,0xf5,0x6d,0x0e,0xfe,0x5d,0xca,0x95,0x28,0x0d,0xca,0x3b}, - {0xa4,0x62,0x5d,0x3c,0xbc,0x31,0xf0,0x40,0x60,0x7a,0xf0,0xcf,0x3e,0x8b,0xfc,0x19,0x45,0xb5,0x0f,0x13,0xa2,0x3d,0x18,0x98,0xcd,0x13,0x8f,0xae,0xdd,0xde,0x31,0x56,0xbf,0x01,0xcc,0x9e,0xb6,0x8e,0x68,0x9c,0x6f,0x89,0x44,0xa6,0xad,0x83,0xbc,0xf0,0xe2,0x9f,0x7a,0x5f,0x5f,0x95,0x2d,0xca,0x41,0x82,0xf2,0x8d,0x03,0xb4,0xa8,0x4e,0x02,0xd2,0xca,0xf1,0x0a,0x46,0xed,0x2a,0x83,0xee,0x8c,0xa4,0x05,0x53,0x30,0x46,0x5f,0x1a,0xf1,0x49,0x45,0x77,0x21,0x91,0x63,0xa4,0x2c,0x54,0x30,0x09,0xce,0x24}, - {0x06,0xc1,0x06,0xfd,0xf5,0x90,0xe8,0x1f,0xf2,0x10,0x88,0x5d,0x35,0x68,0xc4,0xb5,0x3e,0xaf,0x8c,0x6e,0xfe,0x08,0x78,0x82,0x4b,0xd7,0x06,0x8a,0xc2,0xe3,0xd4,0x41,0x85,0x0b,0xf3,0xfd,0x55,0xa1,0xcf,0x3f,0xa4,0x2e,0x37,0x36,0x8e,0x16,0xf7,0xd2,0x44,0xf8,0x92,0x64,0xde,0x64,0xe0,0xb2,0x80,0x42,0x4f,0x32,0xa7,0x28,0x99,0x54,0x2e,0x1a,0xee,0x63,0xa7,0x32,0x6e,0xf2,0xea,0xfd,0x5f,0xd2,0xb7,0xe4,0x91,0xae,0x69,0x4d,0x7f,0xd1,0x3b,0xd3,0x3b,0xbc,0x6a,0xff,0xdc,0xc0,0xde,0x66,0x1b,0x49}, - {0xa7,0x32,0xea,0xc7,0x3d,0xb1,0xf5,0x98,0x98,0xdb,0x16,0x7e,0xcc,0xf8,0xd5,0xe3,0x47,0xd9,0xf8,0xcb,0x52,0xbf,0x0a,0xac,0xac,0xe4,0x5e,0xc8,0xd0,0x38,0xf3,0x08,0xa1,0x64,0xda,0xd0,0x8e,0x4a,0xf0,0x75,0x4b,0x28,0xe2,0x67,0xaf,0x2c,0x22,0xed,0xa4,0x7b,0x7b,0x1f,0x79,0xa3,0x34,0x82,0x67,0x8b,0x01,0xb7,0xb0,0xb8,0xf6,0x4c,0xbd,0x73,0x1a,0x99,0x21,0xa8,0x83,0xc3,0x7a,0x0c,0x32,0xdf,0x01,0xbc,0x27,0xab,0x63,0x70,0x77,0x84,0x1b,0x33,0x3d,0xc1,0x99,0x8a,0x07,0xeb,0x82,0x4a,0x0d,0x53}, - {0x25,0x48,0xf9,0xe1,0x30,0x36,0x4c,0x00,0x5a,0x53,0xab,0x8c,0x26,0x78,0x2d,0x7e,0x8b,0xff,0x84,0xcc,0x23,0x23,0x48,0xc7,0xb9,0x70,0x17,0x10,0x3f,0x75,0xea,0x65,0x9e,0xbf,0x9a,0x6c,0x45,0x73,0x69,0x6d,0x80,0xa8,0x00,0x49,0xfc,0xb2,0x7f,0x25,0x50,0xb8,0xcf,0xc8,0x12,0xf4,0xac,0x2b,0x5b,0xbd,0xbf,0x0c,0xe0,0xe7,0xb3,0x0d,0x63,0x63,0x09,0xe2,0x3e,0xfc,0x66,0x3d,0x6b,0xcb,0xb5,0x61,0x7f,0x2c,0xd6,0x81,0x1a,0x3b,0x44,0x13,0x42,0x04,0xbe,0x0f,0xdb,0xa1,0xe1,0x21,0x19,0xec,0xa4,0x02}, - {0xa2,0xb8,0x24,0x3b,0x9a,0x25,0xe6,0x5c,0xb8,0xa0,0xaf,0x45,0xcc,0x7a,0x57,0xb8,0x37,0x70,0xa0,0x8b,0xe8,0xe6,0xcb,0xcc,0xbf,0x09,0x78,0x12,0x51,0x3c,0x14,0x3d,0x5f,0x79,0xcf,0xf1,0x62,0x61,0xc8,0xf5,0xf2,0x57,0xee,0x26,0x19,0x86,0x8c,0x11,0x78,0x35,0x06,0x1c,0x85,0x24,0x21,0x17,0xcf,0x7f,0x06,0xec,0x5d,0x2b,0xd1,0x36,0x57,0x45,0x15,0x79,0x91,0x27,0x6d,0x12,0x0a,0x3a,0x78,0xfc,0x5c,0x8f,0xe4,0xd5,0xac,0x9b,0x17,0xdf,0xe8,0xb6,0xbd,0x36,0x59,0x28,0xa8,0x5b,0x88,0x17,0xf5,0x2e}, - {0xdc,0xae,0x58,0x8c,0x4e,0x97,0x37,0x46,0xa4,0x41,0xf0,0xab,0xfb,0x22,0xef,0xb9,0x8a,0x71,0x80,0xe9,0x56,0xd9,0x85,0xe1,0xa6,0xa8,0x43,0xb1,0xfa,0x78,0x1b,0x2f,0x51,0x2f,0x5b,0x30,0xfb,0xbf,0xee,0x96,0xb8,0x96,0x95,0x88,0xad,0x38,0xf9,0xd3,0x25,0xdd,0xd5,0x46,0xc7,0x2d,0xf5,0xf0,0x95,0x00,0x3a,0xbb,0x90,0x82,0x96,0x57,0x01,0xe1,0x20,0x0a,0x43,0xb8,0x1a,0xf7,0x47,0xec,0xf0,0x24,0x8d,0x65,0x93,0xf3,0xd1,0xee,0xe2,0x6e,0xa8,0x09,0x75,0xcf,0xe1,0xa3,0x2a,0xdc,0x35,0x3e,0xc4,0x7d}, - {0xc3,0xd9,0x7d,0x88,0x65,0x66,0x96,0x85,0x55,0x53,0xb0,0x4b,0x31,0x9b,0x0f,0xc9,0xb1,0x79,0x20,0xef,0xf8,0x8d,0xe0,0xc6,0x2f,0xc1,0x8c,0x75,0x16,0x20,0xf7,0x7e,0x18,0x97,0x3e,0x27,0x5c,0x2a,0x78,0x5a,0x94,0xfd,0x4e,0x5e,0x99,0xc6,0x76,0x35,0x3e,0x7d,0x23,0x1f,0x05,0xd8,0x2e,0x0f,0x99,0x0a,0xd5,0x82,0x1d,0xb8,0x4f,0x04,0xd9,0xe3,0x07,0xa9,0xc5,0x18,0xdf,0xc1,0x59,0x63,0x4c,0xce,0x1d,0x37,0xb3,0x57,0x49,0xbb,0x01,0xb2,0x34,0x45,0x70,0xca,0x2e,0xdd,0x30,0x9c,0x3f,0x82,0x79,0x7f}, - {0xe8,0x13,0xb5,0xa3,0x39,0xd2,0x34,0x83,0xd8,0xa8,0x1f,0xb9,0xd4,0x70,0x36,0xc1,0x33,0xbd,0x90,0xf5,0x36,0x41,0xb5,0x12,0xb4,0xd9,0x84,0xd7,0x73,0x03,0x4e,0x0a,0xba,0x87,0xf5,0x68,0xf0,0x1f,0x9c,0x6a,0xde,0xc8,0x50,0x00,0x4e,0x89,0x27,0x08,0xe7,0x5b,0xed,0x7d,0x55,0x99,0xbf,0x3c,0xf0,0xd6,0x06,0x1c,0x43,0xb0,0xa9,0x64,0x19,0x29,0x7d,0x5b,0xa1,0xd6,0xb3,0x2e,0x35,0x82,0x3a,0xd5,0xa0,0xf6,0xb4,0xb0,0x47,0x5d,0xa4,0x89,0x43,0xce,0x56,0x71,0x6c,0x34,0x18,0xce,0x0a,0x7d,0x1a,0x07}, - {0x0b,0xba,0x87,0xc8,0xaa,0x2d,0x07,0xd3,0xee,0x62,0xa5,0xbf,0x05,0x29,0x26,0x01,0x8b,0x76,0xef,0xc0,0x02,0x30,0x54,0xcf,0x9c,0x7e,0xea,0x46,0x71,0xcc,0x3b,0x2c,0x31,0x44,0xe1,0x20,0x52,0x35,0x0c,0xcc,0x41,0x51,0xb1,0x09,0x07,0x95,0x65,0x0d,0x36,0x5f,0x9d,0x20,0x1b,0x62,0xf5,0x9a,0xd3,0x55,0x77,0x61,0xf7,0xbc,0x69,0x7c,0x5f,0x29,0xe8,0x04,0xeb,0xd7,0xf0,0x07,0x7d,0xf3,0x50,0x2f,0x25,0x18,0xdb,0x10,0xd7,0x98,0x17,0x17,0xa3,0xa9,0x51,0xe9,0x1d,0xa5,0xac,0x22,0x73,0x9a,0x5a,0x6f}, - {0xc5,0xc6,0x41,0x2f,0x0c,0x00,0xa1,0x8b,0x9b,0xfb,0xfe,0x0c,0xc1,0x79,0x9f,0xc4,0x9f,0x1c,0xc5,0x3c,0x70,0x47,0xfa,0x4e,0xca,0xaf,0x47,0xe1,0xa2,0x21,0x4e,0x49,0xbe,0x44,0xd9,0xa3,0xeb,0xd4,0x29,0xe7,0x9e,0xaf,0x78,0x80,0x40,0x09,0x9e,0x8d,0x03,0x9c,0x86,0x47,0x7a,0x56,0x25,0x45,0x24,0x3b,0x8d,0xee,0x80,0x96,0xab,0x02,0x9a,0x0d,0xe5,0xdd,0x85,0x8a,0xa4,0xef,0x49,0xa2,0xb9,0x0f,0x4e,0x22,0x9a,0x21,0xd9,0xf6,0x1e,0xd9,0x1d,0x1f,0x09,0xfa,0x34,0xbb,0x46,0xea,0xcb,0x76,0x5d,0x6b}, - {0x94,0xd9,0x0c,0xec,0x6c,0x55,0x57,0x88,0xba,0x1d,0xd0,0x5c,0x6f,0xdc,0x72,0x64,0x77,0xb4,0x42,0x8f,0x14,0x69,0x01,0xaf,0x54,0x73,0x27,0x85,0xf6,0x33,0xe3,0x0a,0x22,0x25,0x78,0x1e,0x17,0x41,0xf9,0xe0,0xd3,0x36,0x69,0x03,0x74,0xae,0xe6,0xf1,0x46,0xc7,0xfc,0xd0,0xa2,0x3e,0x8b,0x40,0x3e,0x31,0xdd,0x03,0x9c,0x86,0xfb,0x16,0x62,0x09,0xb6,0x33,0x97,0x19,0x8e,0x28,0x33,0xe1,0xab,0xd8,0xb4,0x72,0xfc,0x24,0x3e,0xd0,0x91,0x09,0xed,0xf7,0x11,0x48,0x75,0xd0,0x70,0x8f,0x8b,0xe3,0x81,0x3f}, - {0xfe,0xaf,0xd9,0x7e,0xcc,0x0f,0x91,0x7f,0x4b,0x87,0x65,0x24,0xa1,0xb8,0x5c,0x54,0x04,0x47,0x0c,0x4b,0xd2,0x7e,0x39,0xa8,0x93,0x09,0xf5,0x04,0xc1,0x0f,0x51,0x50,0x24,0xc8,0x17,0x5f,0x35,0x7f,0xdb,0x0a,0xa4,0x99,0x42,0xd7,0xc3,0x23,0xb9,0x74,0xf7,0xea,0xf8,0xcb,0x8b,0x3e,0x7c,0xd5,0x3d,0xdc,0xde,0x4c,0xd3,0xe2,0xd3,0x0a,0x9d,0x24,0x6e,0x33,0xc5,0x0f,0x0c,0x6f,0xd9,0xcf,0x31,0xc3,0x19,0xde,0x5e,0x74,0x1c,0xfe,0xee,0x09,0x00,0xfd,0xd6,0xf2,0xbe,0x1e,0xfa,0xf0,0x8b,0x15,0x7c,0x12}, - {0xa2,0x79,0x98,0x2e,0x42,0x7c,0x19,0xf6,0x47,0x36,0xca,0x52,0xd4,0xdd,0x4a,0xa4,0xcb,0xac,0x4e,0x4b,0xc1,0x3f,0x41,0x9b,0x68,0x4f,0xef,0x07,0x7d,0xf8,0x4e,0x35,0x74,0xb9,0x51,0xae,0xc4,0x8f,0xa2,0xde,0x96,0xfe,0x4d,0x74,0xd3,0x73,0x99,0x1d,0xa8,0x48,0x38,0x87,0x0b,0x68,0x40,0x62,0x95,0xdf,0x67,0xd1,0x79,0x24,0xd8,0x4e,0x75,0xd9,0xc5,0x60,0x22,0xb5,0xe3,0xfe,0xb8,0xb0,0x41,0xeb,0xfc,0x2e,0x35,0x50,0x3c,0x65,0xf6,0xa9,0x30,0xac,0x08,0x88,0x6d,0x23,0x39,0x05,0xd2,0x92,0x2d,0x30}, - {0x3d,0x28,0xa4,0xbc,0xa2,0xc1,0x13,0x78,0xd9,0x3d,0x86,0xa1,0x91,0xf0,0x62,0xed,0x86,0xfa,0x68,0xc2,0xb8,0xbc,0xc7,0xae,0x4c,0xae,0x1c,0x6f,0xb7,0xd3,0xe5,0x10,0x77,0xf1,0xe0,0xe4,0xb6,0x6f,0xbc,0x2d,0x93,0x6a,0xbd,0xa4,0x29,0xbf,0xe1,0x04,0xe8,0xf6,0x7a,0x78,0xd4,0x66,0x19,0x5e,0x60,0xd0,0x26,0xb4,0x5e,0x5f,0xdc,0x0e,0x67,0x8e,0xda,0x53,0xd6,0xbf,0x53,0x54,0x41,0xf6,0xa9,0x24,0xec,0x1e,0xdc,0xe9,0x23,0x8a,0x57,0x03,0x3b,0x26,0x87,0xbf,0x72,0xba,0x1c,0x36,0x51,0x6c,0xb4,0x45}, - {0xa1,0x7f,0x4f,0x31,0xbf,0x2a,0x40,0xa9,0x50,0xf4,0x8c,0x8e,0xdc,0xf1,0x57,0xe2,0x84,0xbe,0xa8,0x23,0x4b,0xd5,0xbb,0x1d,0x3b,0x71,0xcb,0x6d,0xa3,0xbf,0x77,0x21,0xe4,0xe3,0x7f,0x8a,0xdd,0x4d,0x9d,0xce,0x30,0x0e,0x62,0x76,0x56,0x64,0x13,0xab,0x58,0x99,0x0e,0xb3,0x7b,0x4f,0x59,0x4b,0xdf,0x29,0x12,0x32,0xef,0x0a,0x1c,0x5c,0x8f,0xdb,0x79,0xfa,0xbc,0x1b,0x08,0x37,0xb3,0x59,0x5f,0xc2,0x1e,0x81,0x48,0x60,0x87,0x24,0x83,0x9c,0x65,0x76,0x7a,0x08,0xbb,0xb5,0x8a,0x7d,0x38,0x19,0xe6,0x4a}, - {0x2e,0xa3,0x44,0x53,0xaa,0xf6,0xdb,0x8d,0x78,0x40,0x1b,0xb4,0xb4,0xea,0x88,0x7d,0x60,0x0d,0x13,0x4a,0x97,0xeb,0xb0,0x5e,0x03,0x3e,0xbf,0x17,0x1b,0xd9,0x00,0x1a,0x83,0xfb,0x5b,0x98,0x44,0x7e,0x11,0x61,0x36,0x31,0x96,0x71,0x2a,0x46,0xe0,0xfc,0x4b,0x90,0x25,0xd4,0x48,0x34,0xac,0x83,0x64,0x3d,0xa4,0x5b,0xbe,0x5a,0x68,0x75,0xb2,0xf2,0x61,0xeb,0x33,0x09,0x96,0x6e,0x52,0x49,0xff,0xc9,0xa8,0x0f,0x3d,0x54,0x69,0x65,0xf6,0x7a,0x10,0x75,0x72,0xdf,0xaa,0xe6,0xb0,0x23,0xb6,0x29,0x55,0x13}, - {0x18,0xd5,0xd1,0xad,0xd7,0xdb,0xf0,0x18,0x11,0x1f,0xc1,0xcf,0x88,0x78,0x9f,0x97,0x9b,0x75,0x14,0x71,0xf0,0xe1,0x32,0x87,0x01,0x3a,0xca,0x65,0x1a,0xb8,0xb5,0x79,0xfe,0x83,0x2e,0xe2,0xbc,0x16,0xc7,0xf5,0xc1,0x85,0x09,0xe8,0x19,0xeb,0x2b,0xb4,0xae,0x4a,0x25,0x14,0x37,0xa6,0x9d,0xec,0x13,0xa6,0x90,0x15,0x05,0xea,0x72,0x59,0x11,0x78,0x8f,0xdc,0x20,0xac,0xd4,0x0f,0xa8,0x4f,0x4d,0xac,0x94,0xd2,0x9a,0x9a,0x34,0x04,0x36,0xb3,0x64,0x2d,0x1b,0xc0,0xdb,0x3b,0x5f,0x90,0x95,0x9c,0x7e,0x4f}, - {0x2e,0x30,0x81,0x57,0xbc,0x4b,0x67,0x62,0x0f,0xdc,0xad,0x89,0x39,0x0f,0x52,0xd8,0xc6,0xd9,0xfb,0x53,0xae,0x99,0x29,0x8c,0x4c,0x8e,0x63,0x2e,0xd9,0x3a,0x99,0x31,0xfe,0x99,0x52,0x35,0x3d,0x44,0xc8,0x71,0xd7,0xea,0xeb,0xdb,0x1c,0x3b,0xcd,0x8b,0x66,0x94,0xa4,0xf1,0x9e,0x49,0x92,0x80,0xc8,0xad,0x44,0xa1,0xc4,0xee,0x42,0x19,0x92,0x49,0x23,0xae,0x19,0x53,0xac,0x7d,0x92,0x3e,0xea,0x0c,0x91,0x3d,0x1b,0x2c,0x22,0x11,0x3c,0x25,0x94,0xe4,0x3c,0x55,0x75,0xca,0xf9,0x4e,0x31,0x65,0x0a,0x2a}, - {0xc2,0x27,0xf9,0xf7,0x7f,0x93,0xb7,0x2d,0x35,0xa6,0xd0,0x17,0x06,0x1f,0x74,0xdb,0x76,0xaf,0x55,0x11,0xa2,0xf3,0x82,0x59,0xed,0x2d,0x7c,0x64,0x18,0xe2,0xf6,0x4c,0x3a,0x79,0x1c,0x3c,0xcd,0x1a,0x36,0xcf,0x3b,0xbc,0x35,0x5a,0xac,0xbc,0x9e,0x2f,0xab,0xa6,0xcd,0xa8,0xe9,0x60,0xe8,0x60,0x13,0x1a,0xea,0x6d,0x9b,0xc3,0x5d,0x05,0xb6,0x5b,0x8d,0xc2,0x7c,0x22,0x19,0xb1,0xab,0xff,0x4d,0x77,0xbc,0x4e,0xe2,0x07,0x89,0x2c,0xa3,0xe4,0xce,0x78,0x3c,0xa8,0xb6,0x24,0xaa,0x10,0x77,0x30,0x1a,0x12}, - {0x97,0x4a,0x03,0x9f,0x5e,0x5d,0xdb,0xe4,0x2d,0xbc,0x34,0x30,0x09,0xfc,0x53,0xe1,0xb1,0xd3,0x51,0x95,0x91,0x46,0x05,0x46,0x2d,0xe5,0x40,0x7a,0x6c,0xc7,0x3f,0x33,0xc9,0x83,0x74,0xc7,0x3e,0x71,0x59,0xd6,0xaf,0x96,0x2b,0xb8,0x77,0xe0,0xbf,0x88,0xd3,0xbc,0x97,0x10,0x23,0x28,0x9e,0x28,0x9b,0x3a,0xed,0x6c,0x4a,0xb9,0x7b,0x52,0x2e,0x48,0x5b,0x99,0x2a,0x99,0x3d,0x56,0x01,0x38,0x38,0x6e,0x7c,0xd0,0x05,0x34,0xe5,0xd8,0x64,0x2f,0xde,0x35,0x50,0x48,0xf7,0xa9,0xa7,0x20,0x9b,0x06,0x89,0x6b}, - {0x0d,0x22,0x70,0x62,0x41,0xa0,0x2a,0x81,0x4e,0x5b,0x24,0xf9,0xfa,0x89,0x5a,0x99,0x05,0xef,0x72,0x50,0xce,0xc4,0xad,0xff,0x73,0xeb,0x73,0xaa,0x03,0x21,0xbc,0x23,0x77,0xdb,0xc7,0xb5,0x8c,0xfa,0x82,0x40,0x55,0xc1,0x34,0xc7,0xf8,0x86,0x86,0x06,0x7e,0xa5,0xe7,0xf6,0xd9,0xc8,0xe6,0x29,0xcf,0x9b,0x63,0xa7,0x08,0xd3,0x73,0x04,0x05,0x9e,0x58,0x03,0x26,0x79,0xee,0xca,0x92,0xc4,0xdc,0x46,0x12,0x42,0x4b,0x2b,0x4f,0xa9,0x01,0xe6,0x74,0xef,0xa1,0x02,0x1a,0x34,0x04,0xde,0xbf,0x73,0x2f,0x10}, - {0xc6,0x45,0x57,0x7f,0xab,0xb9,0x18,0xeb,0x90,0xc6,0x87,0x57,0xee,0x8a,0x3a,0x02,0xa9,0xaf,0xf7,0x2d,0xda,0x12,0x27,0xb7,0x3d,0x01,0x5c,0xea,0x25,0x7d,0x59,0x36,0x9a,0x1c,0x51,0xb5,0xe0,0xda,0xb4,0xa2,0x06,0xff,0xff,0x2b,0x29,0x60,0xc8,0x7a,0x34,0x42,0x50,0xf5,0x5d,0x37,0x1f,0x98,0x2d,0xa1,0x4e,0xda,0x25,0xd7,0x6b,0x3f,0xac,0x58,0x60,0x10,0x7b,0x8d,0x4d,0x73,0x5f,0x90,0xc6,0x6f,0x9e,0x57,0x40,0xd9,0x2d,0x93,0x02,0x92,0xf9,0xf8,0x66,0x64,0xd0,0xd6,0x60,0xda,0x19,0xcc,0x7e,0x7b}, - {0x0d,0x69,0x5c,0x69,0x3c,0x37,0xc2,0x78,0x6e,0x90,0x42,0x06,0x66,0x2e,0x25,0xdd,0xd2,0x2b,0xe1,0x4a,0x44,0x44,0x1d,0x95,0x56,0x39,0x74,0x01,0x76,0xad,0x35,0x42,0x9b,0xfa,0x7c,0xa7,0x51,0x4a,0xae,0x6d,0x50,0x86,0xa3,0xe7,0x54,0x36,0x26,0x82,0xdb,0x82,0x2d,0x8f,0xcd,0xff,0xbb,0x09,0xba,0xca,0xf5,0x1b,0x66,0xdc,0xbe,0x03,0xf5,0x75,0x89,0x07,0x0d,0xcb,0x58,0x62,0x98,0xf2,0x89,0x91,0x54,0x42,0x29,0x49,0xe4,0x6e,0xe3,0xe2,0x23,0xb4,0xca,0xa0,0xa1,0x66,0xf0,0xcd,0xb0,0xe2,0x7c,0x0e}, - {0xa3,0x85,0x8c,0xc4,0x3a,0x64,0x94,0xc4,0xad,0x39,0x61,0x3c,0xf4,0x1d,0x36,0xfd,0x48,0x4d,0xe9,0x3a,0xdd,0x17,0xdb,0x09,0x4a,0x67,0xb4,0x8f,0x5d,0x0a,0x6e,0x66,0xf9,0x70,0x4b,0xd9,0xdf,0xfe,0xa6,0xfe,0x2d,0xba,0xfc,0xc1,0x51,0xc0,0x30,0xf1,0x89,0xab,0x2f,0x7f,0x7e,0xd4,0x82,0x48,0xb5,0xee,0xec,0x8a,0x13,0x56,0x52,0x61,0x0d,0xcb,0x70,0x48,0x4e,0xf6,0xbb,0x2a,0x6b,0x8b,0x45,0xaa,0xf0,0xbc,0x65,0xcd,0x5d,0x98,0xe8,0x75,0xba,0x4e,0xbe,0x9a,0xe4,0xde,0x14,0xd5,0x10,0xc8,0x0b,0x7f}, - {0x6f,0x13,0xf4,0x26,0xa4,0x6b,0x00,0xb9,0x35,0x30,0xe0,0x57,0x9e,0x36,0x67,0x8d,0x28,0x3c,0x46,0x4f,0xd9,0xdf,0xc8,0xcb,0xf5,0xdb,0xee,0xf8,0xbc,0x8d,0x1f,0x0d,0xa0,0x13,0x72,0x73,0xad,0x9d,0xac,0x83,0x98,0x2e,0xf7,0x2e,0xba,0xf8,0xf6,0x9f,0x57,0x69,0xec,0x43,0xdd,0x2e,0x1e,0x31,0x75,0xab,0xc5,0xde,0x7d,0x90,0x3a,0x1d,0xdc,0x81,0xd0,0x3e,0x31,0x93,0x16,0xba,0x80,0x34,0x1b,0x85,0xad,0x9f,0x32,0x29,0xcb,0x21,0x03,0x03,0x3c,0x01,0x28,0x01,0xe3,0xfd,0x1b,0xa3,0x44,0x1b,0x01,0x00}, - {0x0c,0x6c,0xc6,0x3f,0x6c,0xa0,0xdf,0x3f,0xd2,0x0d,0xd6,0x4d,0x8e,0xe3,0x40,0x5d,0x71,0x4d,0x8e,0x26,0x38,0x8b,0xe3,0x7a,0xe1,0x57,0x83,0x6e,0x91,0x8d,0xc4,0x3a,0x5c,0xa7,0x0a,0x6a,0x69,0x1f,0x56,0x16,0x6a,0xbd,0x52,0x58,0x5c,0x72,0xbf,0xc1,0xad,0x66,0x79,0x9a,0x7f,0xdd,0xa8,0x11,0x26,0x10,0x85,0xd2,0xa2,0x88,0xd9,0x63,0x2e,0x23,0xbd,0xaf,0x53,0x07,0x12,0x00,0x83,0xf6,0xd8,0xfd,0xb8,0xce,0x2b,0xe9,0x91,0x2b,0xe7,0x84,0xb3,0x69,0x16,0xf8,0x66,0xa0,0x68,0x23,0x2b,0xd5,0xfa,0x33}, - {0x16,0x1e,0xe4,0xc5,0xc6,0x49,0x06,0x54,0x35,0x77,0x3f,0x33,0x30,0x64,0xf8,0x0a,0x46,0xe7,0x05,0xf3,0xd2,0xfc,0xac,0xb2,0xa7,0xdc,0x56,0xa2,0x29,0xf4,0xc0,0x16,0xe8,0xcf,0x22,0xc4,0xd0,0xc8,0x2c,0x8d,0xcb,0x3a,0xa1,0x05,0x7b,0x4f,0x2b,0x07,0x6f,0xa5,0xf6,0xec,0xe6,0xb6,0xfe,0xa3,0xe2,0x71,0x0a,0xb9,0xcc,0x55,0xc3,0x3c,0x31,0x91,0x3e,0x90,0x43,0x94,0xb6,0xe9,0xce,0x37,0x56,0x7a,0xcb,0x94,0xa4,0xb8,0x44,0x92,0xba,0xba,0xa4,0xd1,0x7c,0xc8,0x68,0x75,0xae,0x6b,0x42,0xaf,0x1e,0x63}, - {0x9f,0xfe,0x66,0xda,0x10,0x04,0xe9,0xb3,0xa6,0xe5,0x16,0x6c,0x52,0x4b,0xdd,0x85,0x83,0xbf,0xf9,0x1e,0x61,0x97,0x3d,0xbc,0xb5,0x19,0xa9,0x1e,0x8b,0x64,0x99,0x55,0xe8,0x0d,0x70,0xa3,0xb9,0x75,0xd9,0x47,0x52,0x05,0xf8,0xe2,0xfb,0xc5,0x80,0x72,0xe1,0x5d,0xe4,0x32,0x27,0x8f,0x65,0x53,0xb5,0x80,0x5f,0x66,0x7f,0x2c,0x1f,0x43,0x19,0x7b,0x8f,0x85,0x44,0x63,0x02,0xd6,0x4a,0x51,0xea,0xa1,0x2f,0x35,0xab,0x14,0xd7,0xa9,0x90,0x20,0x1a,0x44,0x00,0x89,0x26,0x3b,0x25,0x91,0x5f,0x71,0x04,0x7b}, - {0x43,0xae,0xf6,0xac,0x28,0xbd,0xed,0x83,0xb4,0x7a,0x5c,0x7d,0x8b,0x7c,0x35,0x86,0x44,0x2c,0xeb,0xb7,0x69,0x47,0x40,0xc0,0x3f,0x58,0xf6,0xc2,0xf5,0x7b,0xb3,0x59,0xc6,0xba,0xe6,0xc4,0x80,0xc2,0x76,0xb3,0x0b,0x9b,0x1d,0x6d,0xdd,0xd3,0x0e,0x97,0x44,0xf9,0x0b,0x45,0x58,0x95,0x9a,0xb0,0x23,0xe2,0xcd,0x57,0xfa,0xac,0xd0,0x48,0x71,0xe6,0xab,0x7d,0xe4,0x26,0x0f,0xb6,0x37,0x3a,0x2f,0x62,0x97,0xa1,0xd1,0xf1,0x94,0x03,0x96,0xe9,0x7e,0xce,0x08,0x42,0xdb,0x3b,0x6d,0x33,0x91,0x41,0x23,0x16}, - {0xf6,0x7f,0x26,0xf6,0xde,0x99,0xe4,0xb9,0x43,0x08,0x2c,0x74,0x7b,0xca,0x72,0x77,0xb1,0xf2,0xa4,0xe9,0x3f,0x15,0xa0,0x23,0x06,0x50,0xd0,0xd5,0xec,0xdf,0xdf,0x2c,0x40,0x86,0xf3,0x1f,0xd6,0x9c,0x49,0xdd,0xa0,0x25,0x36,0x06,0xc3,0x9b,0xcd,0x29,0xc3,0x3d,0xd7,0x3d,0x02,0xd8,0xe2,0x51,0x31,0x92,0x3b,0x20,0x7a,0x70,0x25,0x4a,0x6a,0xed,0xf6,0x53,0x8a,0x66,0xb7,0x2a,0xa1,0x70,0xd1,0x1d,0x58,0x42,0x42,0x30,0x61,0x01,0xe2,0x3a,0x4c,0x14,0x00,0x40,0xfc,0x49,0x8e,0x24,0x6d,0x89,0x21,0x57}, - {0xae,0x1b,0x18,0xfd,0x17,0x55,0x6e,0x0b,0xb4,0x63,0xb9,0x2b,0x9f,0x62,0x22,0x90,0x25,0x46,0x06,0x32,0xe9,0xbc,0x09,0x55,0xda,0x13,0x3c,0xf6,0x74,0xdd,0x8e,0x57,0x4e,0xda,0xd0,0xa1,0x91,0x50,0x5d,0x28,0x08,0x3e,0xfe,0xb5,0xa7,0x6f,0xaa,0x4b,0xb3,0x93,0x93,0xe1,0x7c,0x17,0xe5,0x63,0xfd,0x30,0xb0,0xc4,0xaf,0x35,0xc9,0x03,0x3d,0x0c,0x2b,0x49,0xc6,0x76,0x72,0x99,0xfc,0x05,0xe2,0xdf,0xc4,0xc2,0xcc,0x47,0x3c,0x3a,0x62,0xdd,0x84,0x9b,0xd2,0xdc,0xa2,0xc7,0x88,0x02,0x59,0xab,0xc2,0x3e}, - {0xb9,0x7b,0xd8,0xe4,0x7b,0xd2,0xa0,0xa1,0xed,0x1a,0x39,0x61,0xeb,0x4d,0x8b,0xa9,0x83,0x9b,0xcb,0x73,0xd0,0xdd,0xa0,0x99,0xce,0xca,0x0f,0x20,0x5a,0xc2,0xd5,0x2d,0xcb,0xd1,0x32,0xae,0x09,0x3a,0x21,0xa7,0xd5,0xc2,0xf5,0x40,0xdf,0x87,0x2b,0x0f,0x29,0xab,0x1e,0xe8,0xc6,0xa4,0xae,0x0b,0x5e,0xac,0xdb,0x6a,0x6c,0xf6,0x1b,0x0e,0x7e,0x88,0x2c,0x79,0xe9,0xd5,0xab,0xe2,0x5d,0x6d,0x92,0xcb,0x18,0x00,0x02,0x1a,0x1e,0x5f,0xae,0xba,0xcd,0x69,0xba,0xbf,0x5f,0x8f,0xe8,0x5a,0xb3,0x48,0x05,0x73}, - {0xee,0xb8,0xa8,0xcb,0xa3,0x51,0x35,0xc4,0x16,0x5f,0x11,0xb2,0x1d,0x6f,0xa2,0x65,0x50,0x38,0x8c,0xab,0x52,0x4f,0x0f,0x76,0xca,0xb8,0x1d,0x41,0x3b,0x44,0x43,0x30,0x34,0xe3,0xd6,0xa1,0x4b,0x09,0x5b,0x80,0x19,0x3f,0x35,0x09,0x77,0xf1,0x3e,0xbf,0x2b,0x70,0x22,0x06,0xcb,0x06,0x3f,0x42,0xdd,0x45,0x78,0xd8,0x77,0x22,0x5a,0x58,0x62,0x89,0xd4,0x33,0x82,0x5f,0x8a,0xa1,0x7f,0x25,0x78,0xec,0xb5,0xc4,0x98,0x66,0xff,0x41,0x3e,0x37,0xa5,0x6f,0x8e,0xa7,0x1f,0x98,0xef,0x50,0x89,0x27,0x56,0x76}, - {0xc0,0xc8,0x1f,0xd5,0x59,0xcf,0xc3,0x38,0xf2,0xb6,0x06,0x05,0xfd,0xd2,0xed,0x9b,0x8f,0x0e,0x57,0xab,0x9f,0x10,0xbf,0x26,0xa6,0x46,0xb8,0xc1,0xa8,0x60,0x41,0x3f,0x9d,0xcf,0x86,0xea,0xa3,0x73,0x70,0xe1,0xdc,0x5f,0x15,0x07,0xb7,0xfb,0x8c,0x3a,0x8e,0x8a,0x83,0x31,0xfc,0xe7,0x53,0x48,0x16,0xf6,0x13,0xb6,0x84,0xf4,0xbb,0x28,0x7c,0x6c,0x13,0x6f,0x5c,0x2f,0x61,0xf2,0xbe,0x11,0xdd,0xf6,0x07,0xd1,0xea,0xaf,0x33,0x6f,0xde,0x13,0xd2,0x9a,0x7e,0x52,0x5d,0xf7,0x88,0x81,0x35,0xcb,0x79,0x1e}, - {0xf1,0xe3,0xf7,0xee,0xc3,0x36,0x34,0x01,0xf8,0x10,0x9e,0xfe,0x7f,0x6a,0x8b,0x82,0xfc,0xde,0xf9,0xbc,0xe5,0x08,0xf9,0x7f,0x31,0x38,0x3b,0x3a,0x1b,0x95,0xd7,0x65,0x81,0x81,0xe0,0xf5,0xd8,0x53,0xe9,0x77,0xd9,0xde,0x9d,0x29,0x44,0x0c,0xa5,0x84,0xe5,0x25,0x45,0x86,0x0c,0x2d,0x6c,0xdc,0xf4,0xf2,0xd1,0x39,0x2d,0xb5,0x8a,0x47,0x59,0xd1,0x52,0x92,0xd3,0xa4,0xa6,0x66,0x07,0xc8,0x1a,0x87,0xbc,0xe1,0xdd,0xe5,0x6f,0xc9,0xc1,0xa6,0x40,0x6b,0x2c,0xb8,0x14,0x22,0x21,0x1a,0x41,0x7a,0xd8,0x16}, - {0x15,0x62,0x06,0x42,0x5a,0x7e,0xbd,0xb3,0xc1,0x24,0x5a,0x0c,0xcd,0xe3,0x9b,0x87,0xb7,0x94,0xf9,0xd6,0xb1,0x5d,0xc0,0x57,0xa6,0x8c,0xf3,0x65,0x81,0x7c,0xf8,0x28,0x83,0x05,0x4e,0xd5,0xe2,0xd5,0xa4,0xfb,0xfa,0x99,0xbd,0x2e,0xd7,0xaf,0x1f,0xe2,0x8f,0x77,0xe9,0x6e,0x73,0xc2,0x7a,0x49,0xde,0x6d,0x5a,0x7a,0x57,0x0b,0x99,0x1f,0xd6,0xf7,0xe8,0x1b,0xad,0x4e,0x34,0xa3,0x8f,0x79,0xea,0xac,0xeb,0x50,0x1e,0x7d,0x52,0xe0,0x0d,0x52,0x9e,0x56,0xc6,0x77,0x3e,0x6d,0x4d,0x53,0xe1,0x2f,0x88,0x45}, - {0xd6,0x83,0x79,0x75,0x5d,0x34,0x69,0x66,0xa6,0x11,0xaa,0x17,0x11,0xed,0xb6,0x62,0x8f,0x12,0x5e,0x98,0x57,0x18,0xdd,0x7d,0xdd,0xf6,0x26,0xf6,0xb8,0xe5,0x8f,0x68,0xe4,0x6f,0x3c,0x94,0x29,0x99,0xac,0xd8,0xa2,0x92,0x83,0xa3,0x61,0xf1,0xf9,0xb5,0xf3,0x9a,0xc8,0xbe,0x13,0xdb,0x99,0x26,0x74,0xf0,0x05,0xe4,0x3c,0x84,0xcf,0x7d,0xc0,0x32,0x47,0x4a,0x48,0xd6,0x90,0x6c,0x99,0x32,0x56,0xca,0xfd,0x43,0x21,0xd5,0xe1,0xc6,0x5d,0x91,0xc3,0x28,0xbe,0xb3,0x1b,0x19,0x27,0x73,0x7e,0x68,0x39,0x67}, - {0xa6,0x75,0x56,0x38,0x14,0x20,0x78,0xef,0xe8,0xa9,0xfd,0xaa,0x30,0x9f,0x64,0xa2,0xcb,0xa8,0xdf,0x5c,0x50,0xeb,0xd1,0x4c,0xb3,0xc0,0x4d,0x1d,0xba,0x5a,0x11,0x46,0xc0,0x1a,0x0c,0xc8,0x9d,0xcc,0x6d,0xa6,0x36,0xa4,0x38,0x1b,0xf4,0x5c,0xa0,0x97,0xc6,0xd7,0xdb,0x95,0xbe,0xf3,0xeb,0xa7,0xab,0x7d,0x7e,0x8d,0xf6,0xb8,0xa0,0x7d,0x76,0xda,0xb5,0xc3,0x53,0x19,0x0f,0xd4,0x9b,0x9e,0x11,0x21,0x73,0x6f,0xac,0x1d,0x60,0x59,0xb2,0xfe,0x21,0x60,0xcc,0x03,0x4b,0x4b,0x67,0x83,0x7e,0x88,0x5f,0x5a}, - {0x11,0x3d,0xa1,0x70,0xcf,0x01,0x63,0x8f,0xc4,0xd0,0x0d,0x35,0x15,0xb8,0xce,0xcf,0x7e,0xa4,0xbc,0xa4,0xd4,0x97,0x02,0xf7,0x34,0x14,0x4d,0xe4,0x56,0xb6,0x69,0x36,0xb9,0x43,0xa6,0xa0,0xd3,0x28,0x96,0x9e,0x64,0x20,0xc3,0xe6,0x00,0xcb,0xc3,0xb5,0x32,0xec,0x2d,0x7c,0x89,0x02,0x53,0x9b,0x0c,0xc7,0xd1,0xd5,0xe2,0x7a,0xe3,0x43,0x33,0xe1,0xa6,0xed,0x06,0x3f,0x7e,0x38,0xc0,0x3a,0xa1,0x99,0x51,0x1d,0x30,0x67,0x11,0x38,0x26,0x36,0xf8,0xd8,0x5a,0xbd,0xbe,0xe9,0xd5,0x4f,0xcd,0xe6,0x21,0x6a}, - {0x5f,0xe6,0x46,0x30,0x0a,0x17,0xc6,0xf1,0x24,0x35,0xd2,0x00,0x2a,0x2a,0x71,0x58,0x55,0xb7,0x82,0x8c,0x3c,0xbd,0xdb,0x69,0x57,0xff,0x95,0xa1,0xf1,0xf9,0x6b,0x58,0xe3,0xb2,0x99,0x66,0x12,0x29,0x41,0xef,0x01,0x13,0x8d,0x70,0x47,0x08,0xd3,0x71,0xbd,0xb0,0x82,0x11,0xd0,0x32,0x54,0x32,0x36,0x8b,0x1e,0x00,0x07,0x1b,0x37,0x45,0x0b,0x79,0xf8,0x5e,0x8d,0x08,0xdb,0xa6,0xe5,0x37,0x09,0x61,0xdc,0xf0,0x78,0x52,0xb8,0x6e,0xa1,0x61,0xd2,0x49,0x03,0xac,0x79,0x21,0xe5,0x90,0x37,0xb0,0xaf,0x0e}, - {0x2f,0x04,0x48,0x37,0xc1,0x55,0x05,0x96,0x11,0xaa,0x0b,0x82,0xe6,0x41,0x9a,0x21,0x0c,0x6d,0x48,0x73,0x38,0xf7,0x81,0x1c,0x61,0xc6,0x02,0x5a,0x67,0xcc,0x9a,0x30,0x1d,0xae,0x75,0x0f,0x5e,0x80,0x40,0x51,0x30,0xcc,0x62,0x26,0xe3,0xfb,0x02,0xec,0x6d,0x39,0x92,0xea,0x1e,0xdf,0xeb,0x2c,0xb3,0x5b,0x43,0xc5,0x44,0x33,0xae,0x44,0xee,0x43,0xa5,0xbb,0xb9,0x89,0xf2,0x9c,0x42,0x71,0xc9,0x5a,0x9d,0x0e,0x76,0xf3,0xaa,0x60,0x93,0x4f,0xc6,0xe5,0x82,0x1d,0x8f,0x67,0x94,0x7f,0x1b,0x22,0xd5,0x62}, - {0x6d,0x93,0xd0,0x18,0x9c,0x29,0x4c,0x52,0x0c,0x1a,0x0c,0x8a,0x6c,0xb5,0x6b,0xc8,0x31,0x86,0x4a,0xdb,0x2e,0x05,0x75,0xa3,0x62,0x45,0x75,0xbc,0xe4,0xfd,0x0e,0x5c,0x3c,0x7a,0xf7,0x3a,0x26,0xd4,0x85,0x75,0x4d,0x14,0xe9,0xfe,0x11,0x7b,0xae,0xdf,0x3d,0x19,0xf7,0x59,0x80,0x70,0x06,0xa5,0x37,0x20,0x92,0x83,0x53,0x9a,0xf2,0x14,0xf5,0xd7,0xb2,0x25,0xdc,0x7e,0x71,0xdf,0x40,0x30,0xb5,0x99,0xdb,0x70,0xf9,0x21,0x62,0x4c,0xed,0xc3,0xb7,0x34,0x92,0xda,0x3e,0x09,0xee,0x7b,0x5c,0x36,0x72,0x5e}, - {0x7f,0x21,0x71,0x45,0x07,0xfc,0x5b,0x57,0x5b,0xd9,0x94,0x06,0x5d,0x67,0x79,0x37,0x33,0x1e,0x19,0xf4,0xbb,0x37,0x0a,0x9a,0xbc,0xea,0xb4,0x47,0x4c,0x10,0xf1,0x77,0x3e,0xb3,0x08,0x2f,0x06,0x39,0x93,0x7d,0xbe,0x32,0x9f,0xdf,0xe5,0x59,0x96,0x5b,0xfd,0xbd,0x9e,0x1f,0xad,0x3d,0xff,0xac,0xb7,0x49,0x73,0xcb,0x55,0x05,0xb2,0x70,0x4c,0x2c,0x11,0x55,0xc5,0x13,0x51,0xbe,0xcd,0x1f,0x88,0x9a,0x3a,0x42,0x88,0x66,0x47,0x3b,0x50,0x5e,0x85,0x77,0x66,0x44,0x4a,0x40,0x06,0x4a,0x8f,0x39,0x34,0x0e}, - {0xe8,0xbd,0xce,0x3e,0xd9,0x22,0x7d,0xb6,0x07,0x2f,0x82,0x27,0x41,0xe8,0xb3,0x09,0x8d,0x6d,0x5b,0xb0,0x1f,0xa6,0x3f,0x74,0x72,0x23,0x36,0x8a,0x36,0x05,0x54,0x5e,0x28,0x19,0x4b,0x3e,0x09,0x0b,0x93,0x18,0x40,0xf6,0xf3,0x73,0x0e,0xe1,0xe3,0x7d,0x6f,0x5d,0x39,0x73,0xda,0x17,0x32,0xf4,0x3e,0x9c,0x37,0xca,0xd6,0xde,0x8a,0x6f,0x9a,0xb2,0xb7,0xfd,0x3d,0x12,0x40,0xe3,0x91,0xb2,0x1a,0xa2,0xe1,0x97,0x7b,0x48,0x9e,0x94,0xe6,0xfd,0x02,0x7d,0x96,0xf9,0x97,0xde,0xd3,0xc8,0x2e,0xe7,0x0d,0x78}, - {0xbc,0xe7,0x9a,0x08,0x45,0x85,0xe2,0x0a,0x06,0x4d,0x7f,0x1c,0xcf,0xde,0x8d,0x38,0xb8,0x11,0x48,0x0a,0x51,0x15,0xac,0x38,0xe4,0x8c,0x92,0x71,0xf6,0x8b,0xb2,0x0e,0x72,0x27,0xf4,0x00,0xf3,0xea,0x1f,0x67,0xaa,0x41,0x8c,0x2a,0x2a,0xeb,0x72,0x8f,0x92,0x32,0x37,0x97,0xd7,0x7f,0xa1,0x29,0xa6,0x87,0xb5,0x32,0xad,0xc6,0xef,0x1d,0xa7,0x95,0x51,0xef,0x1a,0xbe,0x5b,0xaf,0xed,0x15,0x7b,0x91,0x77,0x12,0x8c,0x14,0x2e,0xda,0xe5,0x7a,0xfb,0xf7,0x91,0x29,0x67,0x28,0xdd,0xf8,0x1b,0x20,0x7d,0x46}, - {0xad,0x4f,0xef,0x74,0x9a,0x91,0xfe,0x95,0xa2,0x08,0xa3,0xf6,0xec,0x7b,0x82,0x3a,0x01,0x7b,0xa4,0x09,0xd3,0x01,0x4e,0x96,0x97,0xc7,0xa3,0x5b,0x4f,0x3c,0xc4,0x71,0xa9,0xe7,0x7a,0x56,0xbd,0xf4,0x1e,0xbc,0xbd,0x98,0x44,0xd6,0xb2,0x4c,0x62,0x3f,0xc8,0x4e,0x1f,0x2c,0xd2,0x64,0x10,0xe4,0x01,0x40,0x38,0xba,0xa5,0xc5,0xf9,0x2e,0xcd,0x74,0x9e,0xfa,0xf6,0x6d,0xfd,0xb6,0x7a,0x26,0xaf,0xe4,0xbc,0x78,0x82,0xf1,0x0e,0x99,0xef,0xf1,0xd0,0xb3,0x55,0x82,0x93,0xf2,0xc5,0x90,0xa3,0x8c,0x75,0x5a}, - {0x95,0x24,0x46,0xd9,0x10,0x27,0xb7,0xa2,0x03,0x50,0x7d,0xd5,0xd2,0xc6,0xa8,0x3a,0xca,0x87,0xb4,0xa0,0xbf,0x00,0xd4,0xe3,0xec,0x72,0xeb,0xb3,0x44,0xe2,0xba,0x2d,0x94,0xdc,0x61,0x1d,0x8b,0x91,0xe0,0x8c,0x66,0x30,0x81,0x9a,0x46,0x36,0xed,0x8d,0xd3,0xaa,0xe8,0xaf,0x29,0xa8,0xe6,0xd4,0x3f,0xd4,0x39,0xf6,0x27,0x80,0x73,0x0a,0xcc,0xe1,0xff,0x57,0x2f,0x4a,0x0f,0x98,0x43,0x98,0x83,0xe1,0x0d,0x0d,0x67,0x00,0xfd,0x15,0xfb,0x49,0x4a,0x3f,0x5c,0x10,0x9c,0xa6,0x26,0x51,0x63,0xca,0x98,0x26}, - {0x78,0xba,0xb0,0x32,0x88,0x31,0x65,0xe7,0x8b,0xff,0x5c,0x92,0xf7,0x31,0x18,0x38,0xcc,0x1f,0x29,0xa0,0x91,0x1b,0xa8,0x08,0x07,0xeb,0xca,0x49,0xcc,0x3d,0xb4,0x1f,0x0e,0xd9,0x3d,0x5e,0x2f,0x70,0x3d,0x2e,0x86,0x53,0xd2,0xe4,0x18,0x09,0x3f,0x9e,0x6a,0xa9,0x4d,0x02,0xf6,0x3e,0x77,0x5e,0x32,0x33,0xfa,0x4a,0x0c,0x4b,0x00,0x3c,0x2b,0xb8,0xf4,0x06,0xac,0x46,0xa9,0x9a,0xf3,0xc4,0x06,0xa8,0xa5,0x84,0xa2,0x1c,0x87,0x47,0xcd,0xc6,0x5f,0x26,0xd3,0x3e,0x17,0xd2,0x1f,0xcd,0x01,0xfd,0x43,0x6b}, - {0x44,0xc5,0x97,0x46,0x4b,0x5d,0xa7,0xc7,0xbf,0xff,0x0f,0xdf,0x48,0xf8,0xfd,0x15,0x5a,0x78,0x46,0xaa,0xeb,0xb9,0x68,0x28,0x14,0xf7,0x52,0x5b,0x10,0xd7,0x68,0x5a,0xf3,0x0e,0x76,0x3e,0x58,0x42,0xc7,0xb5,0x90,0xb9,0x0a,0xee,0xb9,0x52,0xdc,0x75,0x3f,0x92,0x2b,0x07,0xc2,0x27,0x14,0xbf,0xf0,0xd9,0xf0,0x6f,0x2d,0x0b,0x42,0x73,0x06,0x1e,0x85,0x9e,0xcb,0xf6,0x2c,0xaf,0xc4,0x38,0x22,0xc6,0x13,0x39,0x59,0x8f,0x73,0xf3,0xfb,0x99,0x96,0xb8,0x8a,0xda,0x9e,0xbc,0x34,0xea,0x2f,0x63,0xb5,0x3d}, - {0xd8,0xd9,0x5d,0xf7,0x2b,0xee,0x6e,0xf4,0xa5,0x59,0x67,0x39,0xf6,0xb1,0x17,0x0d,0x73,0x72,0x9e,0x49,0x31,0xd1,0xf2,0x1b,0x13,0x5f,0xd7,0x49,0xdf,0x1a,0x32,0x04,0xd5,0x25,0x98,0x82,0xb1,0x90,0x49,0x2e,0x91,0x89,0x9a,0x3e,0x87,0xeb,0xea,0xed,0xf8,0x4a,0x70,0x4c,0x39,0x3d,0xf0,0xee,0x0e,0x2b,0xdf,0x95,0xa4,0x7e,0x19,0x59,0xae,0x5a,0xe5,0xe4,0x19,0x60,0xe1,0x04,0xe9,0x92,0x2f,0x7e,0x7a,0x43,0x7b,0xe7,0xa4,0x9a,0x15,0x6f,0xc1,0x2d,0xce,0xc7,0xc0,0x0c,0xd7,0xf4,0xc1,0xfd,0xea,0x45}, - {0x2b,0xd7,0x45,0x80,0x85,0x01,0x84,0x69,0x51,0x06,0x2f,0xcf,0xa2,0xfa,0x22,0x4c,0xc6,0x2d,0x22,0x6b,0x65,0x36,0x1a,0x94,0xde,0xda,0x62,0x03,0xc8,0xeb,0x5e,0x5a,0xed,0xb1,0xcc,0xcf,0x24,0x46,0x0e,0xb6,0x95,0x03,0x5c,0xbd,0x92,0xc2,0xdb,0x59,0xc9,0x81,0x04,0xdc,0x1d,0x9d,0xa0,0x31,0x40,0xd9,0x56,0x5d,0xea,0xce,0x73,0x3f,0xc6,0x8d,0x4e,0x0a,0xd1,0xbf,0xa7,0xb7,0x39,0xb3,0xc9,0x44,0x7e,0x00,0x57,0xbe,0xfa,0xae,0x57,0x15,0x7f,0x20,0xc1,0x60,0xdb,0x18,0x62,0x26,0x91,0x88,0x05,0x26}, - {0x04,0xff,0x60,0x83,0xa6,0x04,0xf7,0x59,0xf4,0xe6,0x61,0x76,0xde,0x3f,0xd9,0xc3,0x51,0x35,0x87,0x12,0x73,0x2a,0x1b,0x83,0x57,0x5d,0x61,0x4e,0x2e,0x0c,0xad,0x54,0x42,0xe5,0x76,0xc6,0x3c,0x8e,0x81,0x4c,0xad,0xcc,0xce,0x03,0x93,0x2c,0x42,0x5e,0x08,0x9f,0x12,0xb4,0xca,0xcc,0x07,0xec,0xb8,0x43,0x44,0xb2,0x10,0xfa,0xed,0x0d,0x2a,0x52,0x2b,0xb8,0xd5,0x67,0x3b,0xee,0xeb,0xc1,0xa5,0x9f,0x46,0x63,0xf1,0x36,0xd3,0x9f,0xc1,0x6e,0xf2,0xd2,0xb4,0xa5,0x08,0x94,0x7a,0xa7,0xba,0xb2,0xec,0x62}, - {0x3d,0x2b,0x15,0x61,0x52,0x79,0xed,0xe5,0xd1,0xd7,0xdd,0x0e,0x7d,0x35,0x62,0x49,0x71,0x4c,0x6b,0xb9,0xd0,0xc8,0x82,0x74,0xbe,0xd8,0x66,0xa9,0x19,0xf9,0x59,0x2e,0x74,0x28,0xb6,0xaf,0x36,0x28,0x07,0x92,0xa5,0x04,0xe1,0x79,0x85,0x5e,0xcd,0x5f,0x4a,0xa1,0x30,0xc6,0xad,0x01,0xad,0x5a,0x98,0x3f,0x66,0x75,0x50,0x3d,0x91,0x61,0xda,0x31,0x32,0x1a,0x36,0x2d,0xc6,0x0d,0x70,0x02,0x20,0x94,0x32,0x58,0x47,0xfa,0xce,0x94,0x95,0x3f,0x51,0x01,0xd8,0x02,0x5c,0x5d,0xc0,0x31,0xa1,0xc2,0xdb,0x3d}, - {0x4b,0xc5,0x5e,0xce,0xf9,0x0f,0xdc,0x9a,0x0d,0x13,0x2f,0x8c,0x6b,0x2a,0x9c,0x03,0x15,0x95,0xf8,0xf0,0xc7,0x07,0x80,0x02,0x6b,0xb3,0x04,0xac,0x14,0x83,0x96,0x78,0x14,0xbb,0x96,0x27,0xa2,0x57,0xaa,0xf3,0x21,0xda,0x07,0x9b,0xb7,0xba,0x3a,0x88,0x1c,0x39,0xa0,0x31,0x18,0xe2,0x4b,0xe5,0xf9,0x05,0x32,0xd8,0x38,0xfb,0xe7,0x5e,0x8e,0x6a,0x44,0x41,0xcb,0xfd,0x8d,0x53,0xf9,0x37,0x49,0x43,0xa9,0xfd,0xac,0xa5,0x78,0x8c,0x3c,0x26,0x8d,0x90,0xaf,0x46,0x09,0x0d,0xca,0x9b,0x3c,0x63,0xd0,0x61}, - {0x66,0x25,0xdb,0xff,0x35,0x49,0x74,0x63,0xbb,0x68,0x0b,0x78,0x89,0x6b,0xbd,0xc5,0x03,0xec,0x3e,0x55,0x80,0x32,0x1b,0x6f,0xf5,0xd7,0xae,0x47,0xd8,0x5f,0x96,0x6e,0xdf,0x73,0xfc,0xf8,0xbc,0x28,0xa3,0xad,0xfc,0x37,0xf0,0xa6,0x5d,0x69,0x84,0xee,0x09,0xa9,0xc2,0x38,0xdb,0xb4,0x7f,0x63,0xdc,0x7b,0x06,0xf8,0x2d,0xac,0x23,0x5b,0x7b,0x52,0x80,0xee,0x53,0xb9,0xd2,0x9a,0x8d,0x6d,0xde,0xfa,0xaa,0x19,0x8f,0xe8,0xcf,0x82,0x0e,0x15,0x04,0x17,0x71,0x0e,0xdc,0xde,0x95,0xdd,0xb9,0xbb,0xb9,0x79}, - {0xc2,0x26,0x31,0x6a,0x40,0x55,0xb3,0xeb,0x93,0xc3,0xc8,0x68,0xa8,0x83,0x63,0xd2,0x82,0x7a,0xb9,0xe5,0x29,0x64,0x0c,0x6c,0x47,0x21,0xfd,0xc9,0x58,0xf1,0x65,0x50,0x74,0x73,0x9f,0x8e,0xae,0x7d,0x99,0xd1,0x16,0x08,0xbb,0xcf,0xf8,0xa2,0x32,0xa0,0x0a,0x5f,0x44,0x6d,0x12,0xba,0x6c,0xcd,0x34,0xb8,0xcc,0x0a,0x46,0x11,0xa8,0x1b,0x54,0x99,0x42,0x0c,0xfb,0x69,0x81,0x70,0x67,0xcf,0x6e,0xd7,0xac,0x00,0x46,0xe1,0xba,0x45,0xe6,0x70,0x8a,0xb9,0xaa,0x2e,0xf2,0xfa,0xa4,0x58,0x9e,0xf3,0x81,0x39}, - {0x93,0x0a,0x23,0x59,0x75,0x8a,0xfb,0x18,0x5d,0xf4,0xe6,0x60,0x69,0x8f,0x16,0x1d,0xb5,0x3c,0xa9,0x14,0x45,0xa9,0x85,0x3a,0xfd,0xd0,0xac,0x05,0x37,0x08,0xdc,0x38,0xde,0x6f,0xe6,0x6d,0xa5,0xdf,0x45,0xc8,0x3a,0x48,0x40,0x2c,0x00,0xa5,0x52,0xe1,0x32,0xf6,0xb4,0xc7,0x63,0xe1,0xd2,0xe9,0x65,0x1b,0xbc,0xdc,0x2e,0x45,0xf4,0x30,0x40,0x97,0x75,0xc5,0x82,0x27,0x6d,0x85,0xcc,0xbe,0x9c,0xf9,0x69,0x45,0x13,0xfa,0x71,0x4e,0xea,0xc0,0x73,0xfc,0x44,0x88,0x69,0x24,0x3f,0x59,0x1a,0x9a,0x2d,0x63}, - {0xa6,0xcb,0x07,0xb8,0x15,0x6b,0xbb,0xf6,0xd7,0xf0,0x54,0xbc,0xdf,0xc7,0x23,0x18,0x0b,0x67,0x29,0x6e,0x03,0x97,0x1d,0xbb,0x57,0x4a,0xed,0x47,0x88,0xf4,0x24,0x0b,0xa7,0x84,0x0c,0xed,0x11,0xfd,0x09,0xbf,0x3a,0x69,0x9f,0x0d,0x81,0x71,0xf0,0x63,0x79,0x87,0xcf,0x57,0x2d,0x8c,0x90,0x21,0xa2,0x4b,0xf6,0x8a,0xf2,0x7d,0x5a,0x3a,0xc7,0xea,0x1b,0x51,0xbe,0xd4,0xda,0xdc,0xf2,0xcc,0x26,0xed,0x75,0x80,0x53,0xa4,0x65,0x9a,0x5f,0x00,0x9f,0xff,0x9c,0xe1,0x63,0x1f,0x48,0x75,0x44,0xf7,0xfc,0x34}, - {0xca,0x67,0x97,0x78,0x4c,0xe0,0x97,0xc1,0x7d,0x46,0xd9,0x38,0xcb,0x4d,0x71,0xb8,0xa8,0x5f,0xf9,0x83,0x82,0x88,0xde,0x55,0xf7,0x63,0xfa,0x4d,0x16,0xdc,0x3b,0x3d,0x98,0xaa,0xcf,0x78,0xab,0x1d,0xbb,0xa5,0xf2,0x72,0x0b,0x19,0x67,0xa2,0xed,0x5c,0x8e,0x60,0x92,0x0a,0x11,0xc9,0x09,0x93,0xb0,0x74,0xb3,0x2f,0x04,0xa3,0x19,0x01,0x7d,0x17,0xc2,0xe8,0x9c,0xd8,0xa2,0x67,0xc1,0xd0,0x95,0x68,0xf6,0xa5,0x9d,0x66,0xb0,0xa2,0x82,0xb2,0xe5,0x98,0x65,0xf5,0x73,0x0a,0xe2,0xed,0xf1,0x88,0xc0,0x56}, - {0x17,0x6e,0xa8,0x10,0x11,0x3d,0x6d,0x33,0xfa,0xb2,0x75,0x0b,0x32,0x88,0xf3,0xd7,0x88,0x29,0x07,0x25,0x76,0x33,0x15,0xf9,0x87,0x8b,0x10,0x99,0x6b,0x4c,0x67,0x09,0x02,0x8f,0xf3,0x24,0xac,0x5f,0x1b,0x58,0xbd,0x0c,0xe3,0xba,0xfe,0xe9,0x0b,0xa9,0xf0,0x92,0xcf,0x8a,0x02,0x69,0x21,0x9a,0x8f,0x03,0x59,0x83,0xa4,0x7e,0x8b,0x03,0xf8,0x6f,0x31,0x99,0x21,0xf8,0x4e,0x9f,0x4f,0x8d,0xa7,0xea,0x82,0xd2,0x49,0x2f,0x74,0x31,0xef,0x5a,0xab,0xa5,0x71,0x09,0x65,0xeb,0x69,0x59,0x02,0x31,0x5e,0x6e}, - {0xfb,0x93,0xe5,0x87,0xf5,0x62,0x6c,0xb1,0x71,0x3e,0x5d,0xca,0xde,0xed,0x99,0x49,0x6d,0x3e,0xcc,0x14,0xe0,0xc1,0x91,0xb4,0xa8,0xdb,0xa8,0x89,0x47,0x11,0xf5,0x08,0x22,0x62,0x06,0x63,0x0e,0xfb,0x04,0x33,0x3f,0xba,0xac,0x87,0x89,0x06,0x35,0xfb,0xa3,0x61,0x10,0x8c,0x77,0x24,0x19,0xbd,0x20,0x86,0x83,0xd1,0x43,0xad,0x58,0x30,0xd0,0x63,0x76,0xe5,0xfd,0x0f,0x3c,0x32,0x10,0xa6,0x2e,0xa2,0x38,0xdf,0xc3,0x05,0x9a,0x4f,0x99,0xac,0xbd,0x8a,0xc7,0xbd,0x99,0xdc,0xe3,0xef,0xa4,0x9f,0x54,0x26}, - {0xd6,0xf9,0x6b,0x1e,0x46,0x5a,0x1d,0x74,0x81,0xa5,0x77,0x77,0xfc,0xb3,0x05,0x23,0xd9,0xd3,0x74,0x64,0xa2,0x74,0x55,0xd4,0xff,0xe0,0x01,0x64,0xdc,0xe1,0x26,0x19,0x6e,0x66,0x3f,0xaf,0x49,0x85,0x46,0xdb,0xa5,0x0e,0x4a,0xf1,0x04,0xcf,0x7f,0xd7,0x47,0x0c,0xba,0xa4,0xf7,0x3f,0xf2,0x3d,0x85,0x3c,0xce,0x32,0xe1,0xdf,0x10,0x3a,0xa0,0xce,0x17,0xea,0x8a,0x4e,0x7f,0xe0,0xfd,0xc1,0x1f,0x3a,0x46,0x15,0xd5,0x2f,0xf1,0xc0,0xf2,0x31,0xfd,0x22,0x53,0x17,0x15,0x5d,0x1e,0x86,0x1d,0xd0,0xa1,0x1f}, - {0x32,0x98,0x59,0x7d,0x94,0x55,0x80,0xcc,0x20,0x55,0xf1,0x37,0xda,0x56,0x46,0x1e,0x20,0x93,0x05,0x4e,0x74,0xf7,0xf6,0x99,0x33,0xcf,0x75,0x6a,0xbc,0x63,0x35,0x77,0xab,0x94,0xdf,0xd1,0x00,0xac,0xdc,0x38,0xe9,0x0d,0x08,0xd1,0xdd,0x2b,0x71,0x2e,0x62,0xe2,0xd5,0xfd,0x3e,0xe9,0x13,0x7f,0xe5,0x01,0x9a,0xee,0x18,0xed,0xfc,0x73,0xb3,0x9c,0x13,0x63,0x08,0xe9,0xb1,0x06,0xcd,0x3e,0xa0,0xc5,0x67,0xda,0x93,0xa4,0x32,0x89,0x63,0xad,0xc8,0xce,0x77,0x8d,0x44,0x4f,0x86,0x1b,0x70,0x6b,0x42,0x1f}, - {0x01,0x1c,0x91,0x41,0x4c,0x26,0xc9,0xef,0x25,0x2c,0xa2,0x17,0xb8,0xb7,0xa3,0xf1,0x47,0x14,0x0f,0xf3,0x6b,0xda,0x75,0x58,0x90,0xb0,0x31,0x1d,0x27,0xf5,0x1a,0x4e,0x52,0x25,0xa1,0x91,0xc8,0x35,0x7e,0xf1,0x76,0x9c,0x5e,0x57,0x53,0x81,0x6b,0xb7,0x3e,0x72,0x9b,0x0d,0x6f,0x40,0x83,0xfa,0x38,0xe4,0xa7,0x3f,0x1b,0xbb,0x76,0x0b,0x9b,0x93,0x92,0x7f,0xf9,0xc1,0xb8,0x08,0x6e,0xab,0x44,0xd4,0xcb,0x71,0x67,0xbe,0x17,0x80,0xbb,0x99,0x63,0x64,0xe5,0x22,0x55,0xa9,0x72,0xb7,0x1e,0xd6,0x6d,0x7b}, - {0x92,0x3d,0xf3,0x50,0xe8,0xc1,0xad,0xb7,0xcf,0xd5,0x8c,0x60,0x4f,0xfa,0x98,0x79,0xdb,0x5b,0xfc,0x8d,0xbd,0x2d,0x96,0xad,0x4f,0x2f,0x1d,0xaf,0xce,0x9b,0x3e,0x70,0xc7,0xd2,0x01,0xab,0xf9,0xab,0x30,0x57,0x18,0x3b,0x14,0x40,0xdc,0x76,0xfb,0x16,0x81,0xb2,0xcb,0xa0,0x65,0xbe,0x6c,0x86,0xfe,0x6a,0xff,0x9b,0x65,0x9b,0xfa,0x53,0x55,0x54,0x88,0x94,0xe9,0xc8,0x14,0x6c,0xe5,0xd4,0xae,0x65,0x66,0x5d,0x3a,0x84,0xf1,0x5a,0xd6,0xbc,0x3e,0xb7,0x1b,0x18,0x50,0x1f,0xc6,0xc4,0xe5,0x93,0x8d,0x39}, - {0xf3,0x48,0xe2,0x33,0x67,0xd1,0x4b,0x1c,0x5f,0x0a,0xbf,0x15,0x87,0x12,0x9e,0xbd,0x76,0x03,0x0b,0xa1,0xf0,0x8c,0x3f,0xd4,0x13,0x1b,0x19,0xdf,0x5d,0x9b,0xb0,0x53,0xf2,0xe3,0xe7,0xd2,0x60,0x7c,0x87,0xc3,0xb1,0x8b,0x82,0x30,0xa0,0xaa,0x34,0x3b,0x38,0xf1,0x9e,0x73,0xe7,0x26,0x3e,0x28,0x77,0x05,0xc3,0x02,0x90,0x9c,0x9c,0x69,0xcc,0xf1,0x46,0x59,0x23,0xa7,0x06,0xf3,0x7d,0xd9,0xe5,0xcc,0xb5,0x18,0x17,0x92,0x75,0xe9,0xb4,0x81,0x47,0xd2,0xcd,0x28,0x07,0xd9,0xcd,0x6f,0x0c,0xf3,0xca,0x51}, - {0x0a,0xe0,0x74,0x76,0x42,0xa7,0x0b,0xa6,0xf3,0x7b,0x7a,0xa1,0x70,0x85,0x0e,0x63,0xcc,0x24,0x33,0xcf,0x3d,0x56,0x58,0x37,0xaa,0xfd,0x83,0x23,0x29,0xaa,0x04,0x55,0xc7,0x54,0xac,0x18,0x9a,0xf9,0x7a,0x73,0x0f,0xb3,0x1c,0xc5,0xdc,0x78,0x33,0x90,0xc7,0x0c,0xe1,0x4c,0x33,0xbc,0x89,0x2b,0x9a,0xe9,0xf8,0x89,0xc1,0x29,0xae,0x12,0xcf,0x01,0x0d,0x1f,0xcb,0xc0,0x9e,0xa9,0xae,0xf7,0x34,0x3a,0xcc,0xef,0xd1,0x0d,0x22,0x4e,0x9c,0xd0,0x21,0x75,0xca,0x55,0xea,0xa5,0xeb,0x58,0xe9,0x4f,0xd1,0x5f}, - {0x2c,0xab,0x45,0x28,0xdf,0x2d,0xdc,0xb5,0x93,0xe9,0x7f,0x0a,0xb1,0x91,0x94,0x06,0x46,0xe3,0x02,0x40,0xd6,0xf3,0xaa,0x4d,0xd1,0x74,0x64,0x58,0x6e,0xf2,0x3f,0x09,0x8e,0xcb,0x93,0xbf,0x5e,0xfe,0x42,0x3c,0x5f,0x56,0xd4,0x36,0x51,0xa8,0xdf,0xbe,0xe8,0x20,0x42,0x88,0x9e,0x85,0xf0,0xe0,0x28,0xd1,0x25,0x07,0x96,0x3f,0xd7,0x7d,0x29,0x98,0x05,0x68,0xfe,0x24,0x0d,0xb1,0xe5,0x23,0xaf,0xdb,0x72,0x06,0x73,0x75,0x29,0xac,0x57,0xb4,0x3a,0x25,0x67,0x13,0xa4,0x70,0xb4,0x86,0xbc,0xbc,0x59,0x2f}, - {0x5f,0x13,0x17,0x99,0x42,0x7d,0x84,0x83,0xd7,0x03,0x7d,0x56,0x1f,0x91,0x1b,0xad,0xd1,0xaa,0x77,0xbe,0xd9,0x48,0x77,0x7e,0x4a,0xaf,0x51,0x2e,0x2e,0xb4,0x58,0x54,0x01,0xc3,0x91,0xb6,0x60,0xd5,0x41,0x70,0x1e,0xe7,0xd7,0xad,0x3f,0x1b,0x20,0x85,0x85,0x55,0x33,0x11,0x63,0xe1,0xc2,0x16,0xb1,0x28,0x08,0x01,0x3d,0x5e,0xa5,0x2a,0x4f,0x44,0x07,0x0c,0xe6,0x92,0x51,0xed,0x10,0x1d,0x42,0x74,0x2d,0x4e,0xc5,0x42,0x64,0xc8,0xb5,0xfd,0x82,0x4c,0x2b,0x35,0x64,0x86,0x76,0x8a,0x4a,0x00,0xe9,0x13}, - {0xdb,0xce,0x2f,0x83,0x45,0x88,0x9d,0x73,0x63,0xf8,0x6b,0xae,0xc9,0xd6,0x38,0xfa,0xf7,0xfe,0x4f,0xb7,0xca,0x0d,0xbc,0x32,0x5e,0xe4,0xbc,0x14,0x88,0x7e,0x93,0x73,0x7f,0x87,0x3b,0x19,0xc9,0x00,0x2e,0xbb,0x6b,0x50,0xdc,0xe0,0x90,0xa8,0xe3,0xec,0x9f,0x64,0xde,0x36,0xc0,0xb7,0xf3,0xec,0x1a,0x9e,0xde,0x98,0x08,0x04,0x46,0x5f,0x8d,0xf4,0x7b,0x29,0x16,0x71,0x03,0xb9,0x34,0x68,0xf0,0xd4,0x22,0x3b,0xd1,0xa9,0xc6,0xbd,0x96,0x46,0x57,0x15,0x97,0xe1,0x35,0xe8,0xd5,0x91,0xe8,0xa4,0xf8,0x2c}, - {0x67,0x0f,0x11,0x07,0x87,0xfd,0x93,0x6d,0x49,0xb5,0x38,0x7c,0xd3,0x09,0x4c,0xdd,0x86,0x6a,0x73,0xc2,0x4c,0x6a,0xb1,0x7c,0x09,0x2a,0x25,0x58,0x6e,0xbd,0x49,0x20,0xa2,0x6b,0xd0,0x17,0x7e,0x48,0xb5,0x2c,0x6b,0x19,0x50,0x39,0x1c,0x38,0xd2,0x24,0x30,0x8a,0x97,0x85,0x81,0x9c,0x65,0xd7,0xf6,0xa4,0xd6,0x91,0x28,0x7f,0x6f,0x7a,0x49,0xef,0x9a,0x6a,0x8d,0xfd,0x09,0x7d,0x0b,0xb9,0x3d,0x5b,0xbe,0x60,0xee,0xf0,0xd4,0xbf,0x9e,0x51,0x2c,0xb5,0x21,0x4c,0x1d,0x94,0x45,0xc5,0xdf,0xaa,0x11,0x60}, - {0x3c,0xf8,0x95,0xcf,0x6d,0x92,0x67,0x5f,0x71,0x90,0x28,0x71,0x61,0x85,0x7e,0x7c,0x5b,0x7a,0x8f,0x99,0xf3,0xe7,0xa1,0xd6,0xe0,0xf9,0x62,0x0b,0x1b,0xcc,0xc5,0x6f,0x90,0xf8,0xcb,0x02,0xc8,0xd0,0xde,0x63,0xaa,0x6a,0xff,0x0d,0xca,0x98,0xd0,0xfb,0x99,0xed,0xb6,0xb9,0xfd,0x0a,0x4d,0x62,0x1e,0x0b,0x34,0x79,0xb7,0x18,0xce,0x69,0xcb,0x79,0x98,0xb2,0x28,0x55,0xef,0xd1,0x92,0x90,0x7e,0xd4,0x3c,0xae,0x1a,0xdd,0x52,0x23,0x9f,0x18,0x42,0x04,0x7e,0x12,0xf1,0x01,0x71,0xe5,0x3a,0x6b,0x59,0x15}, - {0xa2,0x79,0x91,0x3f,0xd2,0x39,0x27,0x46,0xcf,0xdd,0xd6,0x97,0x31,0x12,0x83,0xff,0x8a,0x14,0xf2,0x53,0xb5,0xde,0x07,0x13,0xda,0x4d,0x5f,0x7b,0x68,0x37,0x22,0x0d,0xca,0x24,0x51,0x7e,0x16,0x31,0xff,0x09,0xdf,0x45,0xc7,0xd9,0x8b,0x15,0xe4,0x0b,0xe5,0x56,0xf5,0x7e,0x22,0x7d,0x2b,0x29,0x38,0xd1,0xb6,0xaf,0x41,0xe2,0xa4,0x3a,0xf5,0x05,0x33,0x2a,0xbf,0x38,0xc1,0x2c,0xc3,0x26,0xe9,0xa2,0x8f,0x3f,0x58,0x48,0xeb,0xd2,0x49,0x55,0xa2,0xb1,0x3a,0x08,0x6c,0xa3,0x87,0x46,0x6e,0xaa,0xfc,0x32}, - {0xf5,0x9a,0x7d,0xc5,0x8d,0x6e,0xc5,0x7b,0xf2,0xbd,0xf0,0x9d,0xed,0xd2,0x0b,0x3e,0xa3,0xe4,0xef,0x22,0xde,0x14,0xc0,0xaa,0x5c,0x6a,0xbd,0xfe,0xce,0xe9,0x27,0x46,0xdf,0xcc,0x87,0x27,0x73,0xa4,0x07,0x32,0xf8,0xe3,0x13,0xf2,0x08,0x19,0xe3,0x17,0x4e,0x96,0x0d,0xf6,0xd7,0xec,0xb2,0xd5,0xe9,0x0b,0x60,0xc2,0x36,0x63,0x6f,0x74,0x1c,0x97,0x6c,0xab,0x45,0xf3,0x4a,0x3f,0x1f,0x73,0x43,0x99,0x72,0xeb,0x88,0xe2,0x6d,0x18,0x44,0x03,0x8a,0x6a,0x59,0x33,0x93,0x62,0xd6,0x7e,0x00,0x17,0x49,0x7b}, - {0x64,0xb0,0x84,0xab,0x5c,0xfb,0x85,0x2d,0x14,0xbc,0xf3,0x89,0xd2,0x10,0x78,0x49,0x0c,0xce,0x15,0x7b,0x44,0xdc,0x6a,0x47,0x7b,0xfd,0x44,0xf8,0x76,0xa3,0x2b,0x12,0xdd,0xa2,0x53,0xdd,0x28,0x1b,0x34,0x54,0x3f,0xfc,0x42,0xdf,0x5b,0x90,0x17,0xaa,0xf4,0xf8,0xd2,0x4d,0xd9,0x92,0xf5,0x0f,0x7d,0xd3,0x8c,0xe0,0x0f,0x62,0x03,0x1d,0x54,0xe5,0xb4,0xa2,0xcd,0x32,0x02,0xc2,0x7f,0x18,0x5d,0x11,0x42,0xfd,0xd0,0x9e,0xd9,0x79,0xd4,0x7d,0xbe,0xb4,0xab,0x2e,0x4c,0xec,0x68,0x2b,0xf5,0x0b,0xc7,0x02}, - {0xbb,0x2f,0x0b,0x5d,0x4b,0xec,0x87,0xa2,0xca,0x82,0x48,0x07,0x90,0x57,0x5c,0x41,0x5c,0x81,0xd0,0xc1,0x1e,0xa6,0x44,0xe0,0xe0,0xf5,0x9e,0x40,0x0a,0x4f,0x33,0x26,0xe1,0x72,0x8d,0x45,0xbf,0x32,0xe5,0xac,0xb5,0x3c,0xb7,0x7c,0xe0,0x68,0xe7,0x5b,0xe7,0xbd,0x8b,0xee,0x94,0x7d,0xcf,0x56,0x03,0x3a,0xb4,0xfe,0xe3,0x97,0x06,0x6b,0xc0,0xa3,0x62,0xdf,0x4a,0xf0,0xc8,0xb6,0x5d,0xa4,0x6d,0x07,0xef,0x00,0xf0,0x3e,0xa9,0xd2,0xf0,0x49,0x58,0xb9,0x9c,0x9c,0xae,0x2f,0x1b,0x44,0x43,0x7f,0xc3,0x1c}, - {0x4f,0x32,0xc7,0x5c,0x5a,0x56,0x8f,0x50,0x22,0xa9,0x06,0xe5,0xc0,0xc4,0x61,0xd0,0x19,0xac,0x45,0x5c,0xdb,0xab,0x18,0xfb,0x4a,0x31,0x80,0x03,0xc1,0x09,0x68,0x6c,0xb9,0xae,0xce,0xc9,0xf1,0x56,0x66,0xd7,0x6a,0x65,0xe5,0x18,0xf8,0x15,0x5b,0x1c,0x34,0x23,0x4c,0x84,0x32,0x28,0xe7,0x26,0x38,0x68,0x19,0x2f,0x77,0x6f,0x34,0x3a,0xc8,0x6a,0xda,0xe2,0x12,0x51,0xd5,0xd2,0xed,0x51,0xe8,0xb1,0x31,0x03,0xbd,0xe9,0x62,0x72,0xc6,0x8e,0xdd,0x46,0x07,0x96,0xd0,0xc5,0xf7,0x6e,0x9f,0x1b,0x91,0x05}, - {0xbb,0x0e,0xdf,0xf5,0x83,0x99,0x33,0xc1,0xac,0x4c,0x2c,0x51,0x8f,0x75,0xf3,0xc0,0xe1,0x98,0xb3,0x0b,0x0a,0x13,0xf1,0x2c,0x62,0x0c,0x27,0xaa,0xf9,0xec,0x3c,0x6b,0xef,0xea,0x2e,0x51,0xf3,0xac,0x49,0x53,0x49,0xcb,0xc1,0x1c,0xd3,0x41,0xc1,0x20,0x8d,0x68,0x9a,0xa9,0x07,0x0c,0x18,0x24,0x17,0x2d,0x4b,0xc6,0xd1,0xf9,0x5e,0x55,0x08,0xbd,0x73,0x3b,0xba,0x70,0xa7,0x36,0x0c,0xbf,0xaf,0xa3,0x08,0xef,0x4a,0x62,0xf2,0x46,0x09,0xb4,0x98,0xff,0x37,0x57,0x9d,0x74,0x81,0x33,0xe1,0x4d,0x5f,0x67}, - {0xfc,0x82,0x17,0x6b,0x03,0x52,0x2c,0x0e,0xb4,0x83,0xad,0x6c,0x81,0x6c,0x81,0x64,0x3e,0x07,0x64,0x69,0xd9,0xbd,0xdc,0xd0,0x20,0xc5,0x64,0x01,0xf7,0x9d,0xd9,0x13,0x1d,0xb3,0xda,0x3b,0xd9,0xf6,0x2f,0xa1,0xfe,0x2d,0x65,0x9d,0x0f,0xd8,0x25,0x07,0x87,0x94,0xbe,0x9a,0xf3,0x4f,0x9c,0x01,0x43,0x3c,0xcd,0x82,0xb8,0x50,0xf4,0x60,0xca,0xc0,0xe5,0x21,0xc3,0x5e,0x4b,0x01,0xa2,0xbf,0x19,0xd7,0xc9,0x69,0xcb,0x4f,0xa0,0x23,0x00,0x75,0x18,0x1c,0x5f,0x4e,0x80,0xac,0xed,0x55,0x9e,0xde,0x06,0x1c}, - {0xe2,0xc4,0x3e,0xa3,0xd6,0x7a,0x0f,0x99,0x8e,0xe0,0x2e,0xbe,0x38,0xf9,0x08,0x66,0x15,0x45,0x28,0x63,0xc5,0x43,0xa1,0x9c,0x0d,0xb6,0x2d,0xec,0x1f,0x8a,0xf3,0x4c,0xaa,0x69,0x6d,0xff,0x40,0x2b,0xd5,0xff,0xbb,0x49,0x40,0xdc,0x18,0x0b,0x53,0x34,0x97,0x98,0x4d,0xa3,0x2f,0x5c,0x4a,0x5e,0x2d,0xba,0x32,0x7d,0x8e,0x6f,0x09,0x78,0xe7,0x5c,0xfa,0x0d,0x65,0xaa,0xaa,0xa0,0x8c,0x47,0xb5,0x48,0x2a,0x9e,0xc4,0xf9,0x5b,0x72,0x03,0x70,0x7d,0xcc,0x09,0x4f,0xbe,0x1a,0x09,0x26,0x3a,0xad,0x3c,0x37}, - {0x7c,0xf5,0xc9,0x82,0x4d,0x63,0x94,0xb2,0x36,0x45,0x93,0x24,0xe1,0xfd,0xcb,0x1f,0x5a,0xdb,0x8c,0x41,0xb3,0x4d,0x9c,0x9e,0xfc,0x19,0x44,0x45,0xd9,0xf3,0x40,0x00,0xad,0xbb,0xdd,0x89,0xfb,0xa8,0xbe,0xf1,0xcb,0xae,0xae,0x61,0xbc,0x2c,0xcb,0x3b,0x9d,0x8d,0x9b,0x1f,0xbb,0xa7,0x58,0x8f,0x86,0xa6,0x12,0x51,0xda,0x7e,0x54,0x21,0xd3,0x86,0x59,0xfd,0x39,0xe9,0xfd,0xde,0x0c,0x38,0x0a,0x51,0x89,0x2c,0x27,0xf4,0xb9,0x19,0x31,0xbb,0x07,0xa4,0x2b,0xb7,0xf4,0x4d,0x25,0x4a,0x33,0x0a,0x55,0x63}, - {0x37,0xcf,0x69,0xb5,0xed,0xd6,0x07,0x65,0xe1,0x2e,0xa5,0x0c,0xb0,0x29,0x84,0x17,0x5d,0xd6,0x6b,0xeb,0x90,0x00,0x7c,0xea,0x51,0x8f,0xf7,0xda,0xc7,0x62,0xea,0x3e,0x49,0x7b,0x54,0x72,0x45,0x58,0xba,0x9b,0xe0,0x08,0xc4,0xe2,0xfa,0xc6,0x05,0xf3,0x8d,0xf1,0x34,0xc7,0x69,0xfa,0xe8,0x60,0x7a,0x76,0x7d,0xaa,0xaf,0x2b,0xa9,0x39,0x4e,0x27,0x93,0xe6,0x13,0xc7,0x24,0x9d,0x75,0xd3,0xdb,0x68,0x77,0x85,0x63,0x5f,0x9a,0xb3,0x8a,0xeb,0x60,0x55,0x52,0x70,0xcd,0xc4,0xc9,0x65,0x06,0x6a,0x43,0x68}, - {0x27,0x3f,0x2f,0x20,0xe8,0x35,0x02,0xbc,0xb0,0x75,0xf9,0x64,0xe2,0x00,0x5c,0xc7,0x16,0x24,0x8c,0xa3,0xd5,0xe9,0xa4,0x91,0xf9,0x89,0xb7,0x8a,0xf6,0xe7,0xb6,0x17,0x7c,0x10,0x20,0xe8,0x17,0xd3,0x56,0x1e,0x65,0xe9,0x0a,0x84,0x44,0x68,0x26,0xc5,0x7a,0xfc,0x0f,0x32,0xc6,0xa1,0xe0,0xc1,0x72,0x14,0x61,0x91,0x9c,0x66,0x73,0x53,0x57,0x52,0x0e,0x9a,0xab,0x14,0x28,0x5d,0xfc,0xb3,0xca,0xc9,0x84,0x20,0x8f,0x90,0xca,0x1e,0x2d,0x5b,0x88,0xf5,0xca,0xaf,0x11,0x7d,0xf8,0x78,0xa6,0xb5,0xb4,0x1c}, - {0x6c,0xfc,0x4a,0x39,0x6b,0xc0,0x64,0xb6,0xb1,0x5f,0xda,0x98,0x24,0xde,0x88,0x0c,0x34,0xd8,0xca,0x4b,0x16,0x03,0x8d,0x4f,0xa2,0x34,0x74,0xde,0x78,0xca,0x0b,0x33,0xe7,0x07,0xa0,0xa2,0x62,0xaa,0x74,0x6b,0xb1,0xc7,0x71,0xf0,0xb0,0xe0,0x11,0xf3,0x23,0xe2,0x0b,0x00,0x38,0xe4,0x07,0x57,0xac,0x6e,0xef,0x82,0x2d,0xfd,0xc0,0x2d,0x4e,0x74,0x19,0x11,0x84,0xff,0x2e,0x98,0x24,0x47,0x07,0x2b,0x96,0x5e,0x69,0xf9,0xfb,0x53,0xc9,0xbf,0x4f,0xc1,0x8a,0xc5,0xf5,0x1c,0x9f,0x36,0x1b,0xbe,0x31,0x3c}, - {0xee,0x8a,0x94,0x08,0x4d,0x86,0xf4,0xb0,0x6f,0x1c,0xba,0x91,0xee,0x19,0xdc,0x07,0x58,0xa1,0xac,0xa6,0xae,0xcd,0x75,0x79,0xbb,0xd4,0x62,0x42,0x13,0x61,0x0b,0x33,0x72,0x42,0xcb,0xf9,0x93,0xbc,0x68,0xc1,0x98,0xdb,0xce,0xc7,0x1f,0x71,0xb8,0xae,0x7a,0x8d,0xac,0x34,0xaa,0x52,0x0e,0x7f,0xbb,0x55,0x7d,0x7e,0x09,0xc1,0xce,0x41,0x8a,0x80,0x6d,0xa2,0xd7,0x19,0x96,0xf7,0x6d,0x15,0x9e,0x1d,0x9e,0xd4,0x1f,0xbb,0x27,0xdf,0xa1,0xdb,0x6c,0xc3,0xd7,0x73,0x7d,0x77,0x28,0x1f,0xd9,0x4c,0xb4,0x26}, - {0x75,0x74,0x38,0x8f,0x47,0x48,0xf0,0x51,0x3c,0xcb,0xbe,0x9c,0xf4,0xbc,0x5d,0xb2,0x55,0x20,0x9f,0xd9,0x44,0x12,0xab,0x9a,0xd6,0xa5,0x10,0x1c,0x6c,0x9e,0x70,0x2c,0x83,0x03,0x73,0x62,0x93,0xf2,0xb7,0xe1,0x2c,0x8a,0xca,0xeb,0xff,0x79,0x52,0x4b,0x14,0x13,0xd4,0xbf,0x8a,0x77,0xfc,0xda,0x0f,0x61,0x72,0x9c,0x14,0x10,0xeb,0x7d,0x7a,0xee,0x66,0x87,0x6a,0xaf,0x62,0xcb,0x0e,0xcd,0x53,0x55,0x04,0xec,0xcb,0x66,0xb5,0xe4,0x0b,0x0f,0x38,0x01,0x80,0x58,0xea,0xe2,0x2c,0xf6,0x9f,0x8e,0xe6,0x08}, - {0xad,0x30,0xc1,0x4b,0x0a,0x50,0xad,0x34,0x9c,0xd4,0x0b,0x3d,0x49,0xdb,0x38,0x8d,0xbe,0x89,0x0a,0x50,0x98,0x3d,0x5c,0xa2,0x09,0x3b,0xba,0xee,0x87,0x3f,0x1f,0x2f,0xf9,0xf2,0xb8,0x0a,0xd5,0x09,0x2d,0x2f,0xdf,0x23,0x59,0xc5,0x8d,0x21,0xb9,0xac,0xb9,0x6c,0x76,0x73,0x26,0x34,0x8f,0x4a,0xf5,0x19,0xf7,0x38,0xd7,0x3b,0xb1,0x4c,0x4a,0xb6,0x15,0xe5,0x75,0x8c,0x84,0xf7,0x38,0x90,0x4a,0xdb,0xba,0x01,0x95,0xa5,0x50,0x1b,0x75,0x3f,0x3f,0x31,0x0d,0xc2,0xe8,0x2e,0xae,0xc0,0x53,0xe3,0xa1,0x19}, - {0xc3,0x05,0xfa,0xba,0x60,0x75,0x1c,0x7d,0x61,0x5e,0xe5,0xc6,0xa0,0xa0,0xe1,0xb3,0x73,0x64,0xd6,0xc0,0x18,0x97,0x52,0xe3,0x86,0x34,0x0c,0xc2,0x11,0x6b,0x54,0x41,0xbd,0xbd,0x96,0xd5,0xcd,0x72,0x21,0xb4,0x40,0xfc,0xee,0x98,0x43,0x45,0xe0,0x93,0xb5,0x09,0x41,0xb4,0x47,0x53,0xb1,0x9f,0x34,0xae,0x66,0x02,0x99,0xd3,0x6b,0x73,0xb4,0xb3,0x34,0x93,0x50,0x2d,0x53,0x85,0x73,0x65,0x81,0x60,0x4b,0x11,0xfd,0x46,0x75,0x83,0x5c,0x42,0x30,0x5f,0x5f,0xcc,0x5c,0xab,0x7f,0xb8,0xa2,0x95,0x22,0x41}, - {0xe9,0xd6,0x7e,0xf5,0x88,0x9b,0xc9,0x19,0x25,0xc8,0xf8,0x6d,0x26,0xcb,0x93,0x53,0x73,0xd2,0x0a,0xb3,0x13,0x32,0xee,0x5c,0x34,0x2e,0x2d,0xb5,0xeb,0x53,0xe1,0x14,0xc6,0xea,0x93,0xe2,0x61,0x52,0x65,0x2e,0xdb,0xac,0x33,0x21,0x03,0x92,0x5a,0x84,0x6b,0x99,0x00,0x79,0xcb,0x75,0x09,0x46,0x80,0xdd,0x5a,0x19,0x8d,0xbb,0x60,0x07,0x8a,0x81,0xe6,0xcd,0x17,0x1a,0x3e,0x41,0x84,0xa0,0x69,0xed,0xa9,0x6d,0x15,0x57,0xb1,0xcc,0xca,0x46,0x8f,0x26,0xbf,0x2c,0xf2,0xc5,0x3a,0xc3,0x9b,0xbe,0x34,0x6b}, - {0xb2,0xc0,0x78,0x3a,0x64,0x2f,0xdf,0xf3,0x7c,0x02,0x2e,0xf2,0x1e,0x97,0x3e,0x4c,0xa3,0xb5,0xc1,0x49,0x5e,0x1c,0x7d,0xec,0x2d,0xdd,0x22,0x09,0x8f,0xc1,0x12,0x20,0xd3,0xf2,0x71,0x65,0x65,0x69,0xfc,0x11,0x7a,0x73,0x0e,0x53,0x45,0xe8,0xc9,0xc6,0x35,0x50,0xfe,0xd4,0xa2,0xe7,0x3a,0xe3,0x0b,0xd3,0x6d,0x2e,0xb6,0xc7,0xb9,0x01,0x29,0x9d,0xc8,0x5a,0xe5,0x55,0x0b,0x88,0x63,0xa7,0xa0,0x45,0x1f,0x24,0x83,0x14,0x1f,0x6c,0xe7,0xc2,0xdf,0xef,0x36,0x3d,0xe8,0xad,0x4b,0x4e,0x78,0x5b,0xaf,0x08}, - {0x33,0x25,0x1f,0x88,0xdc,0x99,0x34,0x28,0xb6,0x23,0x93,0x77,0xda,0x25,0x05,0x9d,0xf4,0x41,0x34,0x67,0xfb,0xdd,0x7a,0x89,0x8d,0x16,0x3a,0x16,0x71,0x9d,0xb7,0x32,0x4b,0x2c,0xcc,0x89,0xd2,0x14,0x73,0xe2,0x8d,0x17,0x87,0xa2,0x11,0xbd,0xe4,0x4b,0xce,0x64,0x33,0xfa,0xd6,0x28,0xd5,0x18,0x6e,0x82,0xd9,0xaf,0xd5,0xc1,0x23,0x64,0x6a,0xb3,0xfc,0xed,0xd9,0xf8,0x85,0xcc,0xf9,0xe5,0x46,0x37,0x8f,0xc2,0xbc,0x22,0xcd,0xd3,0xe5,0xf9,0x38,0xe3,0x9d,0xe4,0xcc,0x2d,0x3e,0xc1,0xfb,0x5e,0x0a,0x48}, - {0x71,0x20,0x62,0x01,0x0b,0xe7,0x51,0x0b,0xc5,0xaf,0x1d,0x8b,0xcf,0x05,0xb5,0x06,0xcd,0xab,0x5a,0xef,0x61,0xb0,0x6b,0x2c,0x31,0xbf,0xb7,0x0c,0x60,0x27,0xaa,0x47,0x1f,0x22,0xce,0x42,0xe4,0x4c,0x61,0xb6,0x28,0x39,0x05,0x4c,0xcc,0x9d,0x19,0x6e,0x03,0xbe,0x1c,0xdc,0xa4,0xb4,0x3f,0x66,0x06,0x8e,0x1c,0x69,0x47,0x1d,0xb3,0x24,0xc3,0xf8,0x15,0xc0,0xed,0x1e,0x54,0x2a,0x7c,0x3f,0x69,0x7c,0x7e,0xfe,0xa4,0x11,0xd6,0x78,0xa2,0x4e,0x13,0x66,0xaf,0xf0,0x94,0xa0,0xdd,0x14,0x5d,0x58,0x5b,0x54}, - {0x0f,0x3a,0xd4,0xa0,0x5e,0x27,0xbf,0x67,0xbe,0xee,0x9b,0x08,0x34,0x8e,0xe6,0xad,0x2e,0xe7,0x79,0xd4,0x4c,0x13,0x89,0x42,0x54,0x54,0xba,0x32,0xc3,0xf9,0x62,0x0f,0xe1,0x21,0xb3,0xe3,0xd0,0xe4,0x04,0x62,0x95,0x1e,0xff,0x28,0x7a,0x63,0xaa,0x3b,0x9e,0xbd,0x99,0x5b,0xfd,0xcf,0x0c,0x0b,0x71,0xd0,0xc8,0x64,0x3e,0xdc,0x22,0x4d,0x39,0x5f,0x3b,0xd6,0x89,0x65,0xb4,0xfc,0x61,0xcf,0xcb,0x57,0x3f,0x6a,0xae,0x5c,0x05,0xfa,0x3a,0x95,0xd2,0xc2,0xba,0xfe,0x36,0x14,0x37,0x36,0x1a,0xa0,0x0f,0x1c}, - {0xff,0x3d,0x94,0x22,0xb6,0x04,0xc6,0xd2,0xa0,0xb3,0xcf,0x44,0xce,0xbe,0x8c,0xbc,0x78,0x86,0x80,0x97,0xf3,0x4f,0x25,0x5d,0xbf,0xa6,0x1c,0x3b,0x4f,0x61,0xa3,0x0f,0x50,0x6a,0x93,0x8c,0x0e,0x2b,0x08,0x69,0xb6,0xc5,0xda,0xc1,0x35,0xa0,0xc9,0xf9,0x34,0xb6,0xdf,0xc4,0x54,0x3e,0xb7,0x6f,0x40,0xc1,0x2b,0x1d,0x9b,0x41,0x05,0x40,0xf0,0x82,0xbe,0xb9,0xbd,0xfe,0x03,0xa0,0x90,0xac,0x44,0x3a,0xaf,0xc1,0x89,0x20,0x8e,0xfa,0x54,0x19,0x91,0x9f,0x49,0xf8,0x42,0xab,0x40,0xef,0x8a,0x21,0xba,0x1f}, - {0x3e,0xf5,0xc8,0xfa,0x48,0x94,0x54,0xab,0x41,0x37,0xa6,0x7b,0x9a,0xe8,0xf6,0x81,0x01,0x5e,0x2b,0x6c,0x7d,0x6c,0xfd,0x74,0x42,0x6e,0xc8,0xa8,0xca,0x3a,0x2e,0x39,0x94,0x01,0x7b,0x3e,0x04,0x57,0x3e,0x4f,0x7f,0xaf,0xda,0x08,0xee,0x3e,0x1d,0xa8,0xf1,0xde,0xdc,0x99,0xab,0xc6,0x39,0xc8,0xd5,0x61,0x77,0xff,0x13,0x5d,0x53,0x6c,0xaf,0x35,0x8a,0x3e,0xe9,0x34,0xbd,0x4c,0x16,0xe8,0x87,0x58,0x44,0x81,0x07,0x2e,0xab,0xb0,0x9a,0xf2,0x76,0x9c,0x31,0x19,0x3b,0xc1,0x0a,0xd5,0xe4,0x7f,0xe1,0x25}, - {0x76,0xf6,0x04,0x1e,0xd7,0x9b,0x28,0x0a,0x95,0x0f,0x42,0xd6,0x52,0x1c,0x8e,0x20,0xab,0x1f,0x69,0x34,0xb0,0xd8,0x86,0x51,0x51,0xb3,0x9f,0x2a,0x44,0x51,0x57,0x25,0xa7,0x21,0xf1,0x76,0xf5,0x7f,0x5f,0x91,0xe3,0x87,0xcd,0x2f,0x27,0x32,0x4a,0xc3,0x26,0xe5,0x1b,0x4d,0xde,0x2f,0xba,0xcc,0x9b,0x89,0x69,0x89,0x8f,0x82,0xba,0x6b,0x01,0x39,0xfe,0x90,0x66,0xbc,0xd1,0xe2,0xd5,0x7a,0x99,0xa0,0x18,0x4a,0xb5,0x4c,0xd4,0x60,0x84,0xaf,0x14,0x69,0x1d,0x97,0xe4,0x7b,0x6b,0x7f,0x4f,0x50,0x9d,0x55}, - {0xd5,0x54,0xeb,0xb3,0x78,0x83,0x73,0xa7,0x7c,0x3c,0x55,0xa5,0x66,0xd3,0x69,0x1d,0xba,0x00,0x28,0xf9,0x62,0xcf,0x26,0x0a,0x17,0x32,0x7e,0x80,0xd5,0x12,0xab,0x01,0xfd,0x66,0xd2,0xf6,0xe7,0x91,0x48,0x9c,0x1b,0x78,0x07,0x03,0x9b,0xa1,0x44,0x07,0x3b,0xe2,0x61,0x60,0x1d,0x8f,0x38,0x88,0x0e,0xd5,0x4b,0x35,0xa3,0xa6,0x3e,0x12,0x96,0x2d,0xe3,0x41,0x90,0x18,0x8d,0x11,0x48,0x58,0x31,0xd8,0xc2,0xe3,0xed,0xb9,0xd9,0x45,0x32,0xd8,0x71,0x42,0xab,0x1e,0x54,0xa1,0x18,0xc9,0xe2,0x61,0x39,0x4a}, - {0xa0,0xbb,0xe6,0xf8,0xe0,0x3b,0xdc,0x71,0x0a,0xe3,0xff,0x7e,0x34,0xf8,0xce,0xd6,0x6a,0x47,0x3a,0xe1,0x5f,0x42,0x92,0xa9,0x63,0xb7,0x1d,0xfb,0xe3,0xbc,0xd6,0x2c,0x1e,0x3f,0x23,0xf3,0x44,0xd6,0x27,0x03,0x16,0xf0,0xfc,0x34,0x0e,0x26,0x9a,0x49,0x79,0xb9,0xda,0xf2,0x16,0xa7,0xb5,0x83,0x1f,0x11,0xd4,0x9b,0xad,0xee,0xac,0x68,0x10,0xc2,0xd7,0xf3,0x0e,0xc9,0xb4,0x38,0x0c,0x04,0xad,0xb7,0x24,0x6e,0x8e,0x30,0x23,0x3e,0xe7,0xb7,0xf1,0xd9,0x60,0x38,0x97,0xf5,0x08,0xb5,0xd5,0x60,0x57,0x59}, - {0x97,0x63,0xaa,0x04,0xe1,0xbf,0x29,0x61,0xcb,0xfc,0xa7,0xa4,0x08,0x00,0x96,0x8f,0x58,0x94,0x90,0x7d,0x89,0xc0,0x8b,0x3f,0xa9,0x91,0xb2,0xdc,0x3e,0xa4,0x9f,0x70,0x90,0x27,0x02,0xfd,0xeb,0xcb,0x2a,0x88,0x60,0x57,0x11,0xc4,0x05,0x33,0xaf,0x89,0xf4,0x73,0x34,0x7d,0xe3,0x92,0xf4,0x65,0x2b,0x5a,0x51,0x54,0xdf,0xc5,0xb2,0x2c,0xca,0x2a,0xfd,0x63,0x8c,0x5d,0x0a,0xeb,0xff,0x4e,0x69,0x2e,0x66,0xc1,0x2b,0xd2,0x3a,0xb0,0xcb,0xf8,0x6e,0xf3,0x23,0x27,0x1f,0x13,0xc8,0xf0,0xec,0x29,0xf0,0x70}, - {0x33,0x3e,0xed,0x2e,0xb3,0x07,0x13,0x46,0xe7,0x81,0x55,0xa4,0x33,0x2f,0x04,0xae,0x66,0x03,0x5f,0x19,0xd3,0x49,0x44,0xc9,0x58,0x48,0x31,0x6c,0x8a,0x5d,0x7d,0x0b,0xb9,0xb0,0x10,0x5e,0xaa,0xaf,0x6a,0x2a,0xa9,0x1a,0x04,0xef,0x70,0xa3,0xf0,0x78,0x1f,0xd6,0x3a,0xaa,0x77,0xfb,0x3e,0x77,0xe1,0xd9,0x4b,0xa7,0xa2,0xa5,0xec,0x44,0x43,0xd5,0x95,0x7b,0x32,0x48,0xd4,0x25,0x1d,0x0f,0x34,0xa3,0x00,0x83,0xd3,0x70,0x2b,0xc5,0xe1,0x60,0x1c,0x53,0x1c,0xde,0xe4,0xe9,0x7d,0x2c,0x51,0x24,0x22,0x27}, - {0x2e,0x34,0xc5,0x49,0xaf,0x92,0xbc,0x1a,0xd0,0xfa,0xe6,0xb2,0x11,0xd8,0xee,0xff,0x29,0x4e,0xc8,0xfc,0x8d,0x8c,0xa2,0xef,0x43,0xc5,0x4c,0xa4,0x18,0xdf,0xb5,0x11,0xfc,0x75,0xa9,0x42,0x8a,0xbb,0x7b,0xbf,0x58,0xa3,0xad,0x96,0x77,0x39,0x5c,0x8c,0x48,0xaa,0xed,0xcd,0x6f,0xc7,0x7f,0xe2,0xa6,0x20,0xbc,0xf6,0xd7,0x5f,0x73,0x19,0x66,0x42,0xc8,0x42,0xd0,0x90,0xab,0xe3,0x7e,0x54,0x19,0x7f,0x0f,0x8e,0x84,0xeb,0xb9,0x97,0xa4,0x65,0xd0,0xa1,0x03,0x25,0x5f,0x89,0xdf,0x91,0x11,0x91,0xef,0x0f} -}; - -NAMESPACE_END // Arch64 -NAMESPACE_END // Donna -NAMESPACE_END // CryptoPP - -#endif // CRYPTOPP_DOXYGEN_PROCESSING -#endif // CRYPTOPP_DONNA_64_H diff --git a/third_party/cryptoppwin/include/cryptopp/donna_sse.h b/third_party/cryptoppwin/include/cryptopp/donna_sse.h deleted file mode 100644 index 581bf607..00000000 --- a/third_party/cryptoppwin/include/cryptopp/donna_sse.h +++ /dev/null @@ -1,86 +0,0 @@ -// donna_sse.h - written and placed in public domain by Jeffrey Walton -// Crypto++ specific implementation wrapped around Andrew -// Moon's public domain curve25519-donna and ed25519-donna, -// https://github.com/floodyberry/curve25519-donna and -// https://github.com/floodyberry/ed25519-donna. - -// This source file multiplexes two different repos using namespaces. This -// was a little easier from a project management standpoint. We only need -// two files per architecture at the expense of namespaces and bloat. - -#ifndef CRYPTOPP_DONNA_SSE_H -#define CRYPTOPP_DONNA_SSE_H -#ifndef CRYPTOPP_DOXYGEN_PROCESSING - -#include "config.h" -#include - -NAMESPACE_BEGIN(CryptoPP) -NAMESPACE_BEGIN(Donna) -NAMESPACE_BEGIN(ArchSSE) - -using CryptoPP::byte; -using CryptoPP::word32; - -typedef __m128i xmmi; -#define ALIGN(n) CRYPTOPP_ALIGN_DATA(n) - -typedef union packedelem8_t { - byte u[16]; - xmmi v; -} packedelem8; - -typedef union packedelem32_t { - word32 u[4]; - xmmi v; -} packedelem32; - -typedef union packedelem64_t { - word64 u[2]; - xmmi v; -} packedelem64; - -/* 10 elements + an extra 2 to fit in 3 xmm registers */ -typedef word32 bignum25519[12]; -typedef packedelem32 packed32bignum25519[5]; -typedef packedelem64 packed64bignum25519[10]; - -const word32 reduce_mask_26 = (1 << 26) - 1; -const word32 reduce_mask_25 = (1 << 25) - 1; - -const packedelem32 sse2_bot32bitmask = {{0xffffffff, 0x00000000, 0xffffffff, 0x00000000}}; -const packedelem32 sse2_top32bitmask = {{0x00000000, 0xffffffff, 0x00000000, 0xffffffff}}; -const packedelem32 sse2_top64bitmask = {{0x00000000, 0x00000000, 0xffffffff, 0xffffffff}}; -const packedelem32 sse2_bot64bitmask = {{0xffffffff, 0xffffffff, 0x00000000, 0x00000000}}; - -/* reduction masks */ -const packedelem64 packedmask26 = {{0x03ffffff, 0x03ffffff}}; -const packedelem64 packedmask25 = {{0x01ffffff, 0x01ffffff}}; -const packedelem32 packedmask2625 = {{0x3ffffff,0,0x1ffffff,0}}; -const packedelem32 packedmask26262626 = {{0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff}}; -const packedelem32 packedmask25252525 = {{0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff}}; - -/* multipliers */ -const packedelem64 packednineteen = {{19, 19}}; -const packedelem64 packednineteenone = {{19, 1}}; -const packedelem64 packedthirtyeight = {{38, 38}}; -const packedelem64 packed3819 = {{19*2,19}}; -const packedelem64 packed9638 = {{19*4,19*2}}; - -/* 121666,121665 */ -const packedelem64 packed121666121665 = {{121666, 121665}}; - -/* 2*(2^255 - 19) = 0 mod p */ -const packedelem32 packed2p0 = {{0x7ffffda,0x3fffffe,0x7fffffe,0x3fffffe}}; -const packedelem32 packed2p1 = {{0x7fffffe,0x3fffffe,0x7fffffe,0x3fffffe}}; -const packedelem32 packed2p2 = {{0x7fffffe,0x3fffffe,0x0000000,0x0000000}}; - -const packedelem32 packed32zeromodp0 = {{0x7ffffda,0x7ffffda,0x3fffffe,0x3fffffe}}; -const packedelem32 packed32zeromodp1 = {{0x7fffffe,0x7fffffe,0x3fffffe,0x3fffffe}}; - -NAMESPACE_END // ArchSSE -NAMESPACE_END // Donna -NAMESPACE_END // CryptoPP - -#endif // CRYPTOPP_DOXYGEN_PROCESSING -#endif // CRYPTOPP_DONNA_SSE_H diff --git a/third_party/cryptoppwin/include/cryptopp/drbg.h b/third_party/cryptoppwin/include/cryptopp/drbg.h deleted file mode 100644 index 81920774..00000000 --- a/third_party/cryptoppwin/include/cryptopp/drbg.h +++ /dev/null @@ -1,718 +0,0 @@ -// drbg.h - written and placed in public domain by Jeffrey Walton. - -/// \file drbg.h -/// \brief Classes for NIST DRBGs from SP 800-90A -/// \sa Recommendation -/// for Random Number Generation Using Deterministic Random Bit Generators, Rev 1 (June 2015) -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_NIST_DRBG_H -#define CRYPTOPP_NIST_DRBG_H - -#include "cryptlib.h" -#include "secblock.h" -#include "hmac.h" -#include "sha.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Interface for NIST DRBGs from SP 800-90A -/// \details NIST_DRBG is the base class interface for NIST DRBGs from SP 800-90A Rev 1 (June 2015) -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \sa Recommendation -/// for Random Number Generation Using Deterministic Random Bit Generators, Rev 1 (June 2015) -/// \since Crypto++ 6.0 -class NIST_DRBG : public RandomNumberGenerator -{ -public: - /// \brief Exception thrown when a NIST DRBG encounters an error - class Err : public Exception - { - public: - explicit Err(const std::string &c, const std::string &m) - : Exception(OTHER_ERROR, c + ": " + m) {} - }; - -public: - virtual ~NIST_DRBG() {} - - /// \brief Determines if a generator can accept additional entropy - /// \return true - /// \details All NIST_DRBG return true - virtual bool CanIncorporateEntropy() const {return true;} - - /// \brief Update RNG state with additional unpredictable values - /// \param input the entropy to add to the generator - /// \param length the size of the input buffer - /// \throw NIST_DRBG::Err if the generator is reseeded with insufficient entropy - /// \details NIST instantiation and reseed requirements demand the generator is constructed - /// with at least MINIMUM_ENTROPY entropy. The byte array for input must - /// meet NIST SP 800-90B or - /// SP 800-90C requirements. - virtual void IncorporateEntropy(const byte *input, size_t length)=0; - - /// \brief Update RNG state with additional unpredictable values - /// \param entropy the entropy to add to the generator - /// \param entropyLength the size of the input buffer - /// \param additional additional input to add to the generator - /// \param additionaLength the size of the additional input buffer - /// \throw NIST_DRBG::Err if the generator is reseeded with insufficient entropy - /// \details IncorporateEntropy() is an overload provided to match NIST requirements. NIST - /// instantiation and reseed requirements demand the generator is constructed with at least - /// MINIMUM_ENTROPY entropy. The byte array for entropy must meet - /// NIST SP 800-90B or - ///! SP 800-90C requirements. - virtual void IncorporateEntropy(const byte *entropy, size_t entropyLength, const byte* additional, size_t additionaLength)=0; - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - /// \throw NIST_DRBG::Err if a reseed is required - /// \throw NIST_DRBG::Err if the size exceeds MAXIMUM_BYTES_PER_REQUEST - virtual void GenerateBlock(byte *output, size_t size)=0; - - /// \brief Generate random array of bytes - /// \param additional additional input to add to the generator - /// \param additionaLength the size of the additional input buffer - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - /// \throw NIST_DRBG::Err if a reseed is required - /// \throw NIST_DRBG::Err if the size exceeds MAXIMUM_BYTES_PER_REQUEST - /// \details GenerateBlock() is an overload provided to match NIST requirements. The byte - /// array for additional input is optional. If present the additional randomness - /// is mixed before generating the output bytes. - virtual void GenerateBlock(const byte* additional, size_t additionaLength, byte *output, size_t size)=0; - - /// \brief Provides the security strength - /// \return The security strength of the generator, in bytes - /// \details The equivalent class constant is SECURITY_STRENGTH - virtual unsigned int SecurityStrength() const=0; - - /// \brief Provides the seed length - /// \return The seed size of the generator, in bytes - /// \details The equivalent class constant is SEED_LENGTH. The size is - /// used to maintain internal state of V and C. - virtual unsigned int SeedLength() const=0; - - /// \brief Provides the minimum entropy size - /// \return The minimum entropy size required by the generator, in bytes - /// \details The equivalent class constant is MINIMUM_ENTROPY. All NIST DRBGs must - /// be instaniated with at least MINIMUM_ENTROPY bytes of entropy. The bytes must - /// meet NIST SP 800-90B or - /// SP 800-90C requirements. - virtual unsigned int MinEntropyLength() const=0; - - /// \brief Provides the maximum entropy size - /// \return The maximum entropy size that can be consumed by the generator, in bytes - /// \details The equivalent class constant is MAXIMUM_ENTROPY. The bytes must - /// meet NIST SP 800-90B or - /// SP 800-90C requirements. MAXIMUM_ENTROPY has been reduced from - /// 235 to INT_MAX to fit the underlying C++ datatype. - virtual unsigned int MaxEntropyLength() const=0; - - /// \brief Provides the minimum nonce size - /// \return The minimum nonce size recommended for the generator, in bytes - /// \details The equivalent class constant is MINIMUM_NONCE. If a nonce is not - /// required then MINIMUM_NONCE is 0. Hash_DRBG does not require a - /// nonce, while HMAC_DRBG and CTR_DRBG require a nonce. - virtual unsigned int MinNonceLength() const=0; - - /// \brief Provides the maximum nonce size - /// \return The maximum nonce that can be consumed by the generator, in bytes - /// \details The equivalent class constant is MAXIMUM_NONCE. MAXIMUM_NONCE - /// has been reduced from 235 to INT_MAX to fit the underlying C++ datatype. - /// If a nonce is not required then MINIMUM_NONCE is 0. Hash_DRBG does not - /// require a nonce, while HMAC_DRBG and CTR_DRBG require a nonce. - virtual unsigned int MaxNonceLength() const=0; - - /// \brief Provides the maximum size of a request to GenerateBlock - /// \return The maximum size of a request to GenerateBlock(), in bytes - /// \details The equivalent class constant is MAXIMUM_BYTES_PER_REQUEST - virtual unsigned int MaxBytesPerRequest() const=0; - - /// \brief Provides the maximum number of requests before a reseed - /// \return The maximum number of requests before a reseed, in bytes - /// \details The equivalent class constant is MAXIMUM_REQUESTS_BEFORE_RESEED. - /// MAXIMUM_REQUESTS_BEFORE_RESEED has been reduced from 248 to INT_MAX - /// to fit the underlying C++ datatype. - virtual unsigned int MaxRequestBeforeReseed() const=0; - -protected: - virtual void DRBG_Instantiate(const byte* entropy, size_t entropyLength, - const byte* nonce, size_t nonceLength, const byte* personalization, size_t personalizationLength)=0; - - virtual void DRBG_Reseed(const byte* entropy, size_t entropyLength, const byte* additional, size_t additionaLength)=0; -}; - -// ************************************************************* - -/// \tparam HASH NIST approved hash derived from HashTransformation -/// \tparam STRENGTH security strength, in bytes -/// \tparam SEEDLENGTH seed length, in bytes -/// \brief Hash_DRBG from SP 800-90A Rev 1 (June 2015) -/// \details The NIST Hash DRBG is instantiated with a number of parameters. Two of the parameters, -/// Security Strength and Seed Length, depend on the hash and are specified as template parameters. -/// The remaining parameters are included in the class. The parameters and their values are listed -/// in NIST SP 800-90A Rev. 1, Table 2: Definitions for Hash-Based DRBG Mechanisms (p.38). -/// \details Some parameters have been reduce to fit C++ datatypes. For example, NIST allows upto -/// 248 requests before a reseed. However, Hash_DRBG limits it to INT_MAX due -/// to the limited data range of an int. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \sa Recommendation -/// for Random Number Generation Using Deterministic Random Bit Generators, Rev 1 (June 2015) -/// \since Crypto++ 6.0 -template -class Hash_DRBG : public NIST_DRBG, public NotCopyable -{ -public: - CRYPTOPP_CONSTANT(SECURITY_STRENGTH=STRENGTH); - CRYPTOPP_CONSTANT(SEED_LENGTH=SEEDLENGTH); - CRYPTOPP_CONSTANT(MINIMUM_ENTROPY=STRENGTH); - CRYPTOPP_CONSTANT(MINIMUM_NONCE=0); - CRYPTOPP_CONSTANT(MINIMUM_ADDITIONAL=0); - CRYPTOPP_CONSTANT(MINIMUM_PERSONALIZATION=0); - CRYPTOPP_CONSTANT(MAXIMUM_ENTROPY=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_NONCE=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_ADDITIONAL=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_PERSONALIZATION=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_BYTES_PER_REQUEST=65536); - CRYPTOPP_CONSTANT(MAXIMUM_REQUESTS_BEFORE_RESEED=INT_MAX); - - static std::string StaticAlgorithmName() { return std::string("Hash_DRBG(") + HASH::StaticAlgorithmName() + std::string(")"); } - - /// \brief Construct a Hash DRBG - /// \param entropy the entropy to instantiate the generator - /// \param entropyLength the size of the entropy buffer - /// \param nonce additional input to instantiate the generator - /// \param nonceLength the size of the nonce buffer - /// \param personalization additional input to instantiate the generator - /// \param personalizationLength the size of the personalization buffer - /// \throw NIST_DRBG::Err if the generator is instantiated with insufficient entropy - /// \details All NIST DRBGs must be instaniated with at least MINIMUM_ENTROPY bytes of entropy. - /// The byte array for entropy must meet NIST - /// SP 800-90B or SP 800-90C requirements. - /// \details The nonce and personalization are optional byte arrays. If nonce is supplied, - /// then it should be at least MINIMUM_NONCE bytes of entropy. - /// \details An example of instantiating a SHA256 generator is shown below. - /// The example provides more entropy than required for SHA256. The NonblockingRng meets the - /// requirements of NIST SP 800-90B or SP 800-90C. - /// RDRAND() and RDSEED() generators would work as well. - ///
-    ///   SecByteBlock entropy(48), result(128);
-    ///   NonblockingRng prng;
-    ///   RandomNumberSource rns(prng, entropy.size(), new ArraySink(entropy, entropy.size()));
-    ///
-    ///   Hash_DRBG drbg(entropy, 32, entropy+32, 16);
-    ///   drbg.GenerateBlock(result, result.size());
-    /// 
- Hash_DRBG(const byte* entropy=NULLPTR, size_t entropyLength=STRENGTH, const byte* nonce=NULLPTR, - size_t nonceLength=0, const byte* personalization=NULLPTR, size_t personalizationLength=0) - : NIST_DRBG(), m_c(SEEDLENGTH), m_v(SEEDLENGTH), m_reseed(0) - { - if (m_c.data()) // GCC analyzer warning - std::memset(m_c.data(), 0x00, m_c.size()); - if (m_v.data()) // GCC analyzer warning - std::memset(m_v.data(), 0x00, m_v.size()); - - if (entropy != NULLPTR && entropyLength != 0) - DRBG_Instantiate(entropy, entropyLength, nonce, nonceLength, personalization, personalizationLength); - } - - unsigned int SecurityStrength() const {return SECURITY_STRENGTH;} - unsigned int SeedLength() const {return SEED_LENGTH;} - unsigned int MinEntropyLength() const {return MINIMUM_ENTROPY;} - unsigned int MaxEntropyLength() const {return MAXIMUM_ENTROPY;} - unsigned int MinNonceLength() const {return MINIMUM_NONCE;} - unsigned int MaxNonceLength() const {return MAXIMUM_NONCE;} - unsigned int MaxBytesPerRequest() const {return MAXIMUM_BYTES_PER_REQUEST;} - unsigned int MaxRequestBeforeReseed() const {return MAXIMUM_REQUESTS_BEFORE_RESEED;} - - void IncorporateEntropy(const byte *input, size_t length) - {return DRBG_Reseed(input, length, NULLPTR, 0);} - - void IncorporateEntropy(const byte *entropy, size_t entropyLength, const byte* additional, size_t additionaLength) - {return DRBG_Reseed(entropy, entropyLength, additional, additionaLength);} - - void GenerateBlock(byte *output, size_t size) - {return Hash_Generate(NULLPTR, 0, output, size);} - - void GenerateBlock(const byte* additional, size_t additionaLength, byte *output, size_t size) - {return Hash_Generate(additional, additionaLength, output, size);} - - std::string AlgorithmProvider() const - {/*Hack*/HASH hash; return hash.AlgorithmProvider();} - -protected: - // 10.1.1.2 Instantiation of Hash_DRBG (p.39) - void DRBG_Instantiate(const byte* entropy, size_t entropyLength, const byte* nonce, size_t nonceLength, - const byte* personalization, size_t personalizationLength); - - // 10.1.1.3 Reseeding a Hash_DRBG Instantiation (p.40) - void DRBG_Reseed(const byte* entropy, size_t entropyLength, const byte* additional, size_t additionaLength); - - // 10.1.1.4 Generating Pseudorandom Bits Using Hash_DRBG (p.41) - void Hash_Generate(const byte* additional, size_t additionaLength, byte *output, size_t size); - - // 10.3.1 Derivation Function Using a Hash Function (Hash_df) (p.49) - void Hash_Update(const byte* input1, size_t inlen1, const byte* input2, size_t inlen2, - const byte* input3, size_t inlen3, const byte* input4, size_t inlen4, byte* output, size_t outlen); - -private: - HASH m_hash; - SecByteBlock m_c, m_v, m_temp; - word64 m_reseed; -}; - -// typedef Hash_DRBG Hash_SHA1_DRBG; -// typedef Hash_DRBG Hash_SHA256_DRBG; -// typedef Hash_DRBG Hash_SHA384_DRBG; -// typedef Hash_DRBG Hash_SHA512_DRBG; - -// ************************************************************* - -/// \tparam HASH NIST approved hash derived from HashTransformation -/// \tparam STRENGTH security strength, in bytes -/// \tparam SEEDLENGTH seed length, in bytes -/// \brief HMAC_DRBG from SP 800-90A Rev 1 (June 2015) -/// \details The NIST HMAC DRBG is instantiated with a number of parameters. Two of the parameters, -/// Security Strength and Seed Length, depend on the hash and are specified as template parameters. -/// The remaining parameters are included in the class. The parameters and their values are listed -/// in NIST SP 800-90A Rev. 1, Table 2: Definitions for Hash-Based DRBG Mechanisms (p.38). -/// \details Some parameters have been reduce to fit C++ datatypes. For example, NIST allows upto 248 requests -/// before a reseed. However, HMAC_DRBG limits it to INT_MAX due to the limited data range of an int. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \sa Recommendation -/// for Random Number Generation Using Deterministic Random Bit Generators, Rev 1 (June 2015) -/// \since Crypto++ 6.0 -template -class HMAC_DRBG : public NIST_DRBG, public NotCopyable -{ -public: - CRYPTOPP_CONSTANT(SECURITY_STRENGTH=STRENGTH); - CRYPTOPP_CONSTANT(SEED_LENGTH=SEEDLENGTH); - CRYPTOPP_CONSTANT(MINIMUM_ENTROPY=STRENGTH); - CRYPTOPP_CONSTANT(MINIMUM_NONCE=0); - CRYPTOPP_CONSTANT(MINIMUM_ADDITIONAL=0); - CRYPTOPP_CONSTANT(MINIMUM_PERSONALIZATION=0); - CRYPTOPP_CONSTANT(MAXIMUM_ENTROPY=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_NONCE=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_ADDITIONAL=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_PERSONALIZATION=INT_MAX); - CRYPTOPP_CONSTANT(MAXIMUM_BYTES_PER_REQUEST=65536); - CRYPTOPP_CONSTANT(MAXIMUM_REQUESTS_BEFORE_RESEED=INT_MAX); - - static std::string StaticAlgorithmName() { return std::string("HMAC_DRBG(") + HASH::StaticAlgorithmName() + std::string(")"); } - - /// \brief Construct a HMAC DRBG - /// \param entropy the entropy to instantiate the generator - /// \param entropyLength the size of the entropy buffer - /// \param nonce additional input to instantiate the generator - /// \param nonceLength the size of the nonce buffer - /// \param personalization additional input to instantiate the generator - /// \param personalizationLength the size of the personalization buffer - /// \throw NIST_DRBG::Err if the generator is instantiated with insufficient entropy - /// \details All NIST DRBGs must be instaniated with at least MINIMUM_ENTROPY bytes of entropy. - /// The byte array for entropy must meet NIST - /// SP 800-90B or SP 800-90C requirements. - /// \details The nonce and personalization are optional byte arrays. If nonce is supplied, - /// then it should be at least MINIMUM_NONCE bytes of entropy. - /// \details An example of instantiating a SHA256 generator is shown below. - /// The example provides more entropy than required for SHA256. The NonblockingRng meets the - /// requirements of NIST SP 800-90B or SP 800-90C. - /// RDRAND() and RDSEED() generators would work as well. - ///
-    ///   SecByteBlock entropy(48), result(128);
-    ///   NonblockingRng prng;
-    ///   RandomNumberSource rns(prng, entropy.size(), new ArraySink(entropy, entropy.size()));
-    ///
-    ///   HMAC_DRBG drbg(entropy, 32, entropy+32, 16);
-    ///   drbg.GenerateBlock(result, result.size());
-    /// 
- HMAC_DRBG(const byte* entropy=NULLPTR, size_t entropyLength=STRENGTH, const byte* nonce=NULLPTR, - size_t nonceLength=0, const byte* personalization=NULLPTR, size_t personalizationLength=0) - : NIST_DRBG(), m_k(HASH::DIGESTSIZE), m_v(HASH::DIGESTSIZE), m_reseed(0) - { - if (m_k.data()) // GCC analyzer warning - std::memset(m_k, 0x00, m_k.size()); - if (m_v.data()) // GCC analyzer warning - std::memset(m_v, 0x00, m_v.size()); - - if (entropy != NULLPTR && entropyLength != 0) - DRBG_Instantiate(entropy, entropyLength, nonce, nonceLength, personalization, personalizationLength); - } - - unsigned int SecurityStrength() const {return SECURITY_STRENGTH;} - unsigned int SeedLength() const {return SEED_LENGTH;} - unsigned int MinEntropyLength() const {return MINIMUM_ENTROPY;} - unsigned int MaxEntropyLength() const {return MAXIMUM_ENTROPY;} - unsigned int MinNonceLength() const {return MINIMUM_NONCE;} - unsigned int MaxNonceLength() const {return MAXIMUM_NONCE;} - unsigned int MaxBytesPerRequest() const {return MAXIMUM_BYTES_PER_REQUEST;} - unsigned int MaxRequestBeforeReseed() const {return MAXIMUM_REQUESTS_BEFORE_RESEED;} - - void IncorporateEntropy(const byte *input, size_t length) - {return DRBG_Reseed(input, length, NULLPTR, 0);} - - void IncorporateEntropy(const byte *entropy, size_t entropyLength, const byte* additional, size_t additionaLength) - {return DRBG_Reseed(entropy, entropyLength, additional, additionaLength);} - - void GenerateBlock(byte *output, size_t size) - {return HMAC_Generate(NULLPTR, 0, output, size);} - - void GenerateBlock(const byte* additional, size_t additionaLength, byte *output, size_t size) - {return HMAC_Generate(additional, additionaLength, output, size);} - - std::string AlgorithmProvider() const - {/*Hack*/HASH hash; return hash.AlgorithmProvider();} - -protected: - // 10.1.2.3 Instantiation of HMAC_DRBG (p.45) - void DRBG_Instantiate(const byte* entropy, size_t entropyLength, const byte* nonce, size_t nonceLength, - const byte* personalization, size_t personalizationLength); - - // 10.1.2.4 Reseeding a HMAC_DRBG Instantiation (p.46) - void DRBG_Reseed(const byte* entropy, size_t entropyLength, const byte* additional, size_t additionaLength); - - // 10.1.2.5 Generating Pseudorandom Bits Using HMAC_DRBG (p.46) - void HMAC_Generate(const byte* additional, size_t additionaLength, byte *output, size_t size); - - // 10.1.2.2 Derivation Function Using a HMAC Function (HMAC_Update) (p.44) - void HMAC_Update(const byte* input1, size_t inlen1, const byte* input2, size_t inlen2, const byte* input3, size_t inlen3); - -private: - HMAC m_hmac; - SecByteBlock m_k, m_v; - word64 m_reseed; -}; - -// typedef HMAC_DRBG HMAC_SHA1_DRBG; -// typedef HMAC_DRBG HMAC_SHA256_DRBG; -// typedef HMAC_DRBG HMAC_SHA384_DRBG; -// typedef HMAC_DRBG HMAC_SHA512_DRBG; - -// ************************************************************* - -// 10.1.1.2 Instantiation of Hash_DRBG (p.39) -template -void Hash_DRBG::DRBG_Instantiate(const byte* entropy, size_t entropyLength, const byte* nonce, size_t nonceLength, - const byte* personalization, size_t personalizationLength) -{ - // SP 800-90A, 8.6.3: The entropy input shall have entropy that is equal to or greater than the security - // strength of the instantiation. Additional entropy may be provided in the nonce or the optional - // personalization string during instantiation, or in the additional input during reseeding and generation, - // but this is not required and does not increase the "official" security strength of the DRBG - // instantiation that is recorded in the internal state. - CRYPTOPP_ASSERT(entropyLength >= MINIMUM_ENTROPY); - if (entropyLength < MINIMUM_ENTROPY) - throw NIST_DRBG::Err("Hash_DRBG", "Insufficient entropy during instantiate"); - - // SP 800-90A, Section 9, says we should throw if we have too much entropy, too large a nonce, - // or too large a persoanlization string. We warn in Debug builds, but do nothing in Release builds. - CRYPTOPP_ASSERT(entropyLength <= MAXIMUM_ENTROPY); - CRYPTOPP_ASSERT(nonceLength <= MAXIMUM_NONCE); - CRYPTOPP_ASSERT(personalizationLength <= MAXIMUM_PERSONALIZATION); - - const byte zero = 0; - SecByteBlock t1(SEEDLENGTH), t2(SEEDLENGTH); - Hash_Update(entropy, entropyLength, nonce, nonceLength, personalization, personalizationLength, NULLPTR, 0, t1, t1.size()); - Hash_Update(&zero, 1, t1, t1.size(), NULLPTR, 0, NULLPTR, 0, t2, t2.size()); - - m_v.swap(t1); m_c.swap(t2); - m_reseed = 1; -} - -// 10.1.1.3 Reseeding a Hash_DRBG Instantiation (p.40) -template -void Hash_DRBG::DRBG_Reseed(const byte* entropy, size_t entropyLength, const byte* additional, size_t additionaLength) -{ - // SP 800-90A, 8.6.3: The entropy input shall have entropy that is equal to or greater than the security - // strength of the instantiation. Additional entropy may be provided in the nonce or the optional - // personalization string during instantiation, or in the additional input during reseeding and generation, - // but this is not required and does not increase the "official" security strength of the DRBG - // instantiation that is recorded in the internal state.. - CRYPTOPP_ASSERT(entropyLength >= MINIMUM_ENTROPY); - if (entropyLength < MINIMUM_ENTROPY) - throw NIST_DRBG::Err("Hash_DRBG", "Insufficient entropy during reseed"); - - // SP 800-90A, Section 9, says we should throw if we have too much entropy, too large a nonce, - // or too large a persoanlization string. We warn in Debug builds, but do nothing in Release builds. - CRYPTOPP_ASSERT(entropyLength <= MAXIMUM_ENTROPY); - CRYPTOPP_ASSERT(additionaLength <= MAXIMUM_ADDITIONAL); - - const byte zero = 0, one = 1; - SecByteBlock t1(SEEDLENGTH), t2(SEEDLENGTH); - Hash_Update(&one, 1, m_v, m_v.size(), entropy, entropyLength, additional, additionaLength, t1, t1.size()); - Hash_Update(&zero, 1, t1, t1.size(), NULLPTR, 0, NULLPTR, 0, t2, t2.size()); - - m_v.swap(t1); m_c.swap(t2); - m_reseed = 1; -} - -// 10.1.1.4 Generating Pseudorandom Bits Using Hash_DRBG (p.41) -template -void Hash_DRBG::Hash_Generate(const byte* additional, size_t additionaLength, byte *output, size_t size) -{ - // Step 1 - if (static_cast(m_reseed) >= static_cast(MaxRequestBeforeReseed())) - throw NIST_DRBG::Err("Hash_DRBG", "Reseed required"); - - if (size > MaxBytesPerRequest()) - throw NIST_DRBG::Err("Hash_DRBG", "Request size exceeds limit"); - - // SP 800-90A, Section 9, says we should throw if we have too much entropy, too large a nonce, - // or too large a persoanlization string. We warn in Debug builds, but do nothing in Release builds. - CRYPTOPP_ASSERT(additionaLength <= MAXIMUM_ADDITIONAL); - - // Step 2 - if (additional && additionaLength) - { - const byte two = 2; - m_temp.New(HASH::DIGESTSIZE); - - m_hash.Update(&two, 1); - m_hash.Update(m_v, m_v.size()); - m_hash.Update(additional, additionaLength); - m_hash.Final(m_temp); - - CRYPTOPP_ASSERT(SEEDLENGTH >= HASH::DIGESTSIZE); - int carry=0, j=HASH::DIGESTSIZE-1, i=SEEDLENGTH-1; - while (j>=0) - { - carry = m_v[i] + m_temp[j] + carry; - m_v[i] = static_cast(carry); - i--; j--; carry >>= 8; - } - while (i>=0) - { - carry = m_v[i] + carry; - m_v[i] = static_cast(carry); - i--; carry >>= 8; - } - } - - // Step 3 - { - m_temp.Assign(m_v); - while (size) - { - m_hash.Update(m_temp, m_temp.size()); - size_t count = STDMIN(size, (size_t)HASH::DIGESTSIZE); - m_hash.TruncatedFinal(output, count); - - IncrementCounterByOne(m_temp, static_cast(m_temp.size())); - size -= count; output += count; - } - } - - // Steps 4-7 - { - const byte three = 3; - m_temp.New(HASH::DIGESTSIZE); - - m_hash.Update(&three, 1); - m_hash.Update(m_v, m_v.size()); - m_hash.Final(m_temp); - - CRYPTOPP_ASSERT(SEEDLENGTH >= HASH::DIGESTSIZE); - CRYPTOPP_ASSERT(HASH::DIGESTSIZE >= sizeof(m_reseed)); - int carry=0, k=sizeof(m_reseed)-1, j=HASH::DIGESTSIZE-1, i=SEEDLENGTH-1; - - while (k>=0) - { - carry = m_v[i] + m_c[i] + m_temp[j] + GetByte(BIG_ENDIAN_ORDER, m_reseed, k) + carry; - m_v[i] = static_cast(carry); - i--; j--; k--; carry >>= 8; - } - - while (j>=0) - { - carry = m_v[i] + m_c[i] + m_temp[j] + carry; - m_v[i] = static_cast(carry); - i--; j--; carry >>= 8; - } - - while (i>=0) - { - carry = m_v[i] + m_c[i] + carry; - m_v[i] = static_cast(carry); - i--; carry >>= 8; - } - } - - m_reseed++; -} - -// 10.3.1 Derivation Function Using a Hash Function (Hash_df) (p.49) -template -void Hash_DRBG::Hash_Update(const byte* input1, size_t inlen1, const byte* input2, size_t inlen2, - const byte* input3, size_t inlen3, const byte* input4, size_t inlen4, byte* output, size_t outlen) -{ - byte counter = 1; - word32 bits = ConditionalByteReverse(BIG_ENDIAN_ORDER, static_cast(outlen*8)); - - while (outlen) - { - m_hash.Update(&counter, 1); - m_hash.Update(reinterpret_cast(&bits), 4); - - if (input1 && inlen1) - m_hash.Update(input1, inlen1); - if (input2 && inlen2) - m_hash.Update(input2, inlen2); - if (input3 && inlen3) - m_hash.Update(input3, inlen3); - if (input4 && inlen4) - m_hash.Update(input4, inlen4); - - size_t count = STDMIN(outlen, (size_t)HASH::DIGESTSIZE); - m_hash.TruncatedFinal(output, count); - - output += count; outlen -= count; - counter++; - } -} - -// ************************************************************* - -// 10.1.2.3 Instantiation of HMAC_DRBG (p.45) -template -void HMAC_DRBG::DRBG_Instantiate(const byte* entropy, size_t entropyLength, const byte* nonce, size_t nonceLength, - const byte* personalization, size_t personalizationLength) -{ - // SP 800-90A, 8.6.3: The entropy input shall have entropy that is equal to or greater than the security - // strength of the instantiation. Additional entropy may be provided in the nonce or the optional - // personalization string during instantiation, or in the additional input during reseeding and generation, - // but this is not required and does not increase the "official" security strength of the DRBG - // instantiation that is recorded in the internal state. - CRYPTOPP_ASSERT(entropyLength >= MINIMUM_ENTROPY); - if (entropyLength < MINIMUM_ENTROPY) - throw NIST_DRBG::Err("HMAC_DRBG", "Insufficient entropy during instantiate"); - - // SP 800-90A, Section 9, says we should throw if we have too much entropy, too large a nonce, - // or too large a persoanlization string. We warn in Debug builds, but do nothing in Release builds. - CRYPTOPP_ASSERT(entropyLength <= MAXIMUM_ENTROPY); - CRYPTOPP_ASSERT(nonceLength <= MAXIMUM_NONCE); - CRYPTOPP_ASSERT(personalizationLength <= MAXIMUM_PERSONALIZATION); - - std::fill(m_k.begin(), m_k.begin()+m_k.size(), byte(0)); - std::fill(m_v.begin(), m_v.begin()+m_v.size(), byte(1)); - - HMAC_Update(entropy, entropyLength, nonce, nonceLength, personalization, personalizationLength); - m_reseed = 1; -} - -// 10.1.2.4 Reseeding a HMAC_DRBG Instantiation (p.46) -template -void HMAC_DRBG::DRBG_Reseed(const byte* entropy, size_t entropyLength, const byte* additional, size_t additionaLength) -{ - // SP 800-90A, 8.6.3: The entropy input shall have entropy that is equal to or greater than the security - // strength of the instantiation. Additional entropy may be provided in the nonce or the optional - // personalization string during instantiation, or in the additional input during reseeding and generation, - // but this is not required and does not increase the "official" security strength of the DRBG - // instantiation that is recorded in the internal state.. - CRYPTOPP_ASSERT(entropyLength >= MINIMUM_ENTROPY); - if (entropyLength < MINIMUM_ENTROPY) - throw NIST_DRBG::Err("HMAC_DRBG", "Insufficient entropy during reseed"); - - // SP 800-90A, Section 9, says we should throw if we have too much entropy, too large a nonce, - // or too large a persoanlization string. We warn in Debug builds, but do nothing in Release builds. - CRYPTOPP_ASSERT(entropyLength <= MAXIMUM_ENTROPY); - CRYPTOPP_ASSERT(additionaLength <= MAXIMUM_ADDITIONAL); - - HMAC_Update(entropy, entropyLength, additional, additionaLength, NULLPTR, 0); - m_reseed = 1; -} - -// 10.1.2.5 Generating Pseudorandom Bits Using HMAC_DRBG (p.46) -template -void HMAC_DRBG::HMAC_Generate(const byte* additional, size_t additionaLength, byte *output, size_t size) -{ - // Step 1 - if (static_cast(m_reseed) >= static_cast(MaxRequestBeforeReseed())) - throw NIST_DRBG::Err("HMAC_DRBG", "Reseed required"); - - if (size > MaxBytesPerRequest()) - throw NIST_DRBG::Err("HMAC_DRBG", "Request size exceeds limit"); - - // SP 800-90A, Section 9, says we should throw if we have too much entropy, too large a nonce, - // or too large a persoanlization string. We warn in Debug builds, but do nothing in Release builds. - CRYPTOPP_ASSERT(additionaLength <= MAXIMUM_ADDITIONAL); - - // Step 2 - if (additional && additionaLength) - HMAC_Update(additional, additionaLength, NULLPTR, 0, NULLPTR, 0); - - // Step 3 - m_hmac.SetKey(m_k, m_k.size()); - - while (size) - { - m_hmac.Update(m_v, m_v.size()); - m_hmac.TruncatedFinal(m_v, m_v.size()); - - size_t count = STDMIN(size, (size_t)HASH::DIGESTSIZE); - std::memcpy(output, m_v, count); - size -= count; output += count; - } - - HMAC_Update(additional, additionaLength, NULLPTR, 0, NULLPTR, 0); - m_reseed++; -} - -// 10.1.2.2 Derivation Function Using a HMAC Function (HMAC_Update) (p.44) -template -void HMAC_DRBG::HMAC_Update(const byte* input1, size_t inlen1, const byte* input2, size_t inlen2, const byte* input3, size_t inlen3) -{ - const byte zero = 0, one = 1; - - // Step 1 - m_hmac.SetKey(m_k, m_k.size()); - m_hmac.Update(m_v, m_v.size()); - m_hmac.Update(&zero, 1); - - if (input1 && inlen1) - m_hmac.Update(input1, inlen1); - if (input2 && inlen2) - m_hmac.Update(input2, inlen2); - if (input3 && inlen3) - m_hmac.Update(input3, inlen3); - - m_hmac.TruncatedFinal(m_k, m_k.size()); - - // Step 2 - m_hmac.SetKey(m_k, m_k.size()); - m_hmac.Update(m_v, m_v.size()); - - m_hmac.TruncatedFinal(m_v, m_v.size()); - - // Step 3 - if ((inlen1 | inlen2 | inlen3) == 0) - return; - - // Step 4 - m_hmac.SetKey(m_k, m_k.size()); - m_hmac.Update(m_v, m_v.size()); - m_hmac.Update(&one, 1); - - if (input1 && inlen1) - m_hmac.Update(input1, inlen1); - if (input2 && inlen2) - m_hmac.Update(input2, inlen2); - if (input3 && inlen3) - m_hmac.Update(input3, inlen3); - - m_hmac.TruncatedFinal(m_k, m_k.size()); - - // Step 5 - m_hmac.SetKey(m_k, m_k.size()); - m_hmac.Update(m_v, m_v.size()); - - m_hmac.TruncatedFinal(m_v, m_v.size()); -} - -NAMESPACE_END - -#endif // CRYPTOPP_NIST_DRBG_H diff --git a/third_party/cryptoppwin/include/cryptopp/dsa.h b/third_party/cryptoppwin/include/cryptopp/dsa.h deleted file mode 100644 index f49ed92b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/dsa.h +++ /dev/null @@ -1,53 +0,0 @@ -// dsa.h - originally written and placed in the public domain by Wei Dai - -/// \file dsa.h -/// \brief Classes for the DSA signature algorithm - -#ifndef CRYPTOPP_DSA_H -#define CRYPTOPP_DSA_H - -#include "cryptlib.h" -#include "gfpcrypt.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief DSA Signature Format -/// \details The DSA signature format used by Crypto++ is as defined by IEEE P1363. -/// OpenSSL, Java and .Net use the DER format, and OpenPGP uses the OpenPGP format. -/// \sa DSAConvertSignatureFormat -/// on the Crypto++ wiki. -/// \since Crypto++ 1.0 -enum DSASignatureFormat { - /// \brief Crypto++ native signature encoding format - DSA_P1363, - /// \brief signature encoding format used by OpenSSL, Java and .Net - DSA_DER, - /// \brief OpenPGP signature encoding format - DSA_OPENPGP -}; - -/// \brief Converts between signature encoding formats -/// \param buffer byte buffer for the converted signature encoding -/// \param bufferSize the length of the converted signature encoding buffer -/// \param toFormat the source signature format -/// \param signature byte buffer for the existing signature encoding -/// \param signatureLen the length of the existing signature encoding buffer -/// \param fromFormat the source signature format -/// \return the number of bytes written during encoding -/// \details This function converts between these formats, and returns length -/// of signature in the target format. If toFormat == DSA_P1363, then -/// bufferSize must equal publicKey.SignatureLength() or -/// verifier.SignatureLength(). -/// \details If the destination buffer is too small then the output of the -/// encoded r and s will be truncated. Be sure to provide -/// an adequately sized buffer and check the return value for the number of -/// bytes written. -/// \sa DSAConvertSignatureFormat -/// on the Crypto++ wiki. -/// \since Crypto++ 1.0 -size_t DSAConvertSignatureFormat(byte *buffer, size_t bufferSize, DSASignatureFormat toFormat, - const byte *signature, size_t signatureLen, DSASignatureFormat fromFormat); - -NAMESPACE_END - -#endif // CRYPTOPP_DSA_H diff --git a/third_party/cryptoppwin/include/cryptopp/eax.h b/third_party/cryptoppwin/include/cryptopp/eax.h deleted file mode 100644 index 6dc1fa6d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/eax.h +++ /dev/null @@ -1,112 +0,0 @@ -// eax.h - originally written and placed in the public domain by Wei Dai - -/// \file eax.h -/// \brief EAX block cipher mode of operation - -#ifndef CRYPTOPP_EAX_H -#define CRYPTOPP_EAX_H - -#include "authenc.h" -#include "modes.h" -#include "cmac.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief EAX block cipher base implementation -/// \details Base implementation of the AuthenticatedSymmetricCipher interface -/// \since Crypto++ 5.6.0 -class CRYPTOPP_NO_VTABLE EAX_Base : public AuthenticatedSymmetricCipherBase -{ -public: - // AuthenticatedSymmetricCipher - std::string AlgorithmName() const - {return GetMAC().GetCipher().AlgorithmName() + std::string("/EAX");} - std::string AlgorithmProvider() const - {return GetMAC().GetCipher().AlgorithmProvider();} - size_t MinKeyLength() const - {return GetMAC().MinKeyLength();} - size_t MaxKeyLength() const - {return GetMAC().MaxKeyLength();} - size_t DefaultKeyLength() const - {return GetMAC().DefaultKeyLength();} - size_t GetValidKeyLength(size_t n) const - {return GetMAC().GetValidKeyLength(n);} - bool IsValidKeyLength(size_t n) const - {return GetMAC().IsValidKeyLength(n);} - unsigned int OptimalDataAlignment() const - {return GetMAC().OptimalDataAlignment();} - IV_Requirement IVRequirement() const - {return UNIQUE_IV;} - unsigned int IVSize() const - {return GetMAC().TagSize();} - unsigned int MinIVLength() const - {return 0;} - unsigned int MaxIVLength() const - {return UINT_MAX;} - unsigned int DigestSize() const - {return GetMAC().TagSize();} - lword MaxHeaderLength() const - {return LWORD_MAX;} - lword MaxMessageLength() const - {return LWORD_MAX;} - -protected: - // AuthenticatedSymmetricCipherBase - bool AuthenticationIsOnPlaintext() const - {return false;} - unsigned int AuthenticationBlockSize() const - {return 1;} - void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); - void Resync(const byte *iv, size_t len); - size_t AuthenticateBlocks(const byte *data, size_t len); - void AuthenticateLastHeaderBlock(); - void AuthenticateLastFooterBlock(byte *mac, size_t macSize); - SymmetricCipher & AccessSymmetricCipher() {return m_ctr;} - const CMAC_Base & GetMAC() const {return const_cast(this)->AccessMAC();} - virtual CMAC_Base & AccessMAC() =0; - - CTR_Mode_ExternalCipher::Encryption m_ctr; -}; - -/// \brief EAX block cipher final implementation -/// \tparam T_BlockCipher block cipher -/// \tparam T_IsEncryption direction in which to operate the cipher -/// \since Crypto++ 5.6.0 -template -class EAX_Final : public EAX_Base -{ -public: - static std::string StaticAlgorithmName() - {return T_BlockCipher::StaticAlgorithmName() + std::string("/EAX");} - std::string AlgorithmProvider() const - {return m_cmac.AlgorithmProvider();} - bool IsForwardTransformation() const - {return T_IsEncryption;} - -private: - CMAC_Base & AccessMAC() {return m_cmac;} - CMAC m_cmac; -}; - -#ifdef EAX // EAX is defined to 11 on GCC 3.4.3, OpenSolaris 8.11 -#undef EAX -#endif - -/// \brief EAX block cipher mode of operation -/// \tparam T_BlockCipher block cipher -/// \details \p EAX provides the \p Encryption and \p Decryption typedef. See EAX_Base -/// and EAX_Final for the AuthenticatedSymmetricCipher implementation. -/// \sa EAX Mode and -/// Modes of Operation -/// on the Crypto++ wiki. -/// \since Crypto++ 5.6.0 -template -struct EAX : public AuthenticatedSymmetricCipherDocumentation -{ - typedef EAX_Final Encryption; - typedef EAX_Final Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ec2n.h b/third_party/cryptoppwin/include/cryptopp/ec2n.h deleted file mode 100644 index 529da045..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ec2n.h +++ /dev/null @@ -1,136 +0,0 @@ -// ec2n.h - originally written and placed in the public domain by Wei Dai - -/// \file ec2n.h -/// \brief Classes for Elliptic Curves over binary fields - -#ifndef CRYPTOPP_EC2N_H -#define CRYPTOPP_EC2N_H - -#include "cryptlib.h" -#include "gf2n.h" -#include "integer.h" -#include "algebra.h" -#include "ecpoint.h" -#include "eprecomp.h" -#include "smartptr.h" -#include "pubkey.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Elliptic Curve over GF(2^n) -class CRYPTOPP_DLL EC2N : public AbstractGroup, public EncodedPoint -{ -public: - typedef GF2NP Field; - typedef Field::Element FieldElement; - typedef EC2NPoint Point; - - virtual ~EC2N() {} - - /// \brief Construct an EC2N - EC2N() {} - - /// \brief Construct an EC2N - /// \param field Field, GF2NP derived class - /// \param a Field::Element - /// \param b Field::Element - EC2N(const Field &field, const Field::Element &a, const Field::Element &b) - : m_field(field), m_a(a), m_b(b) {} - - /// \brief Construct an EC2N from BER encoded parameters - /// \param bt BufferedTransformation derived object - /// \details This constructor will decode and extract the fields fieldID and curve of the sequence ECParameters - EC2N(BufferedTransformation &bt); - - /// \brief Encode the fields fieldID and curve of the sequence ECParameters - /// \param bt BufferedTransformation derived object - void DEREncode(BufferedTransformation &bt) const; - - bool Equal(const Point &P, const Point &Q) const; - const Point& Identity() const; - const Point& Inverse(const Point &P) const; - bool InversionIsFast() const {return true;} - const Point& Add(const Point &P, const Point &Q) const; - const Point& Double(const Point &P) const; - - Point Multiply(const Integer &k, const Point &P) const - {return ScalarMultiply(P, k);} - Point CascadeMultiply(const Integer &k1, const Point &P, const Integer &k2, const Point &Q) const - {return CascadeScalarMultiply(P, k1, Q, k2);} - - bool ValidateParameters(RandomNumberGenerator &rng, unsigned int level=3) const; - bool VerifyPoint(const Point &P) const; - - unsigned int EncodedPointSize(bool compressed = false) const - {return 1 + (compressed?1:2)*m_field->MaxElementByteLength();} - // returns false if point is compressed and not valid (doesn't check if uncompressed) - bool DecodePoint(Point &P, BufferedTransformation &bt, size_t len) const; - bool DecodePoint(Point &P, const byte *encodedPoint, size_t len) const; - void EncodePoint(byte *encodedPoint, const Point &P, bool compressed) const; - void EncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const; - - Point BERDecodePoint(BufferedTransformation &bt) const; - void DEREncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const; - - Integer FieldSize() const {return Integer::Power2(m_field->MaxElementBitLength());} - const Field & GetField() const {return *m_field;} - const FieldElement & GetA() const {return m_a;} - const FieldElement & GetB() const {return m_b;} - - bool operator==(const EC2N &rhs) const - {return GetField() == rhs.GetField() && m_a == rhs.m_a && m_b == rhs.m_b;} - -private: - clonable_ptr m_field; - FieldElement m_a, m_b; - mutable Point m_R; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation; - -/// \brief Elliptic Curve precomputation -/// \tparam EC elliptic curve field -template class EcPrecomputation; - -/// \brief EC2N precomputation specialization -/// \details Implementation of DL_GroupPrecomputation -/// \sa DL_GroupPrecomputation -template<> class EcPrecomputation : public DL_GroupPrecomputation -{ -public: - typedef EC2N EllipticCurve; - - virtual ~EcPrecomputation() {} - - // DL_GroupPrecomputation - const AbstractGroup & GetGroup() const {return m_ec;} - Element BERDecodeElement(BufferedTransformation &bt) const {return m_ec.BERDecodePoint(bt);} - void DEREncodeElement(BufferedTransformation &bt, const Element &v) const {m_ec.DEREncodePoint(bt, v, false);} - - /// \brief Set the elliptic curve - /// \param ec ECP derived class - /// \details SetCurve() is not inherited - void SetCurve(const EC2N &ec) {m_ec = ec;} - - /// \brief Get the elliptic curve - /// \return EC2N curve - /// \details GetCurve() is not inherited - const EC2N & GetCurve() const {return m_ec;} - -private: - EC2N m_ec; -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/eccrypto.h b/third_party/cryptoppwin/include/cryptopp/eccrypto.h deleted file mode 100644 index 17ccb134..00000000 --- a/third_party/cryptoppwin/include/cryptopp/eccrypto.h +++ /dev/null @@ -1,686 +0,0 @@ -// eccrypto.h - originally written and placed in the public domain by Wei Dai -// deterministic signatures added by by Douglas Roark - -/// \file eccrypto.h -/// \brief Classes and functions for Elliptic Curves over prime and binary fields - -#ifndef CRYPTOPP_ECCRYPTO_H -#define CRYPTOPP_ECCRYPTO_H - -#include "config.h" -#include "cryptlib.h" -#include "pubkey.h" -#include "integer.h" -#include "asn.h" -#include "hmac.h" -#include "sha.h" -#include "gfpcrypt.h" -#include "dh.h" -#include "mqv.h" -#include "hmqv.h" -#include "fhmqv.h" -#include "ecp.h" -#include "ec2n.h" - -#include - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Elliptic Curve Parameters -/// \tparam EC elliptic curve field -/// \details This class corresponds to the ASN.1 sequence of the same name -/// in ANSI X9.62 and SEC 1. EC is currently defined for ECP and EC2N. -template -class DL_GroupParameters_EC : public DL_GroupParametersImpl > -{ - typedef DL_GroupParameters_EC ThisClass; - -public: - typedef EC EllipticCurve; - typedef typename EllipticCurve::Point Point; - typedef Point Element; - typedef IncompatibleCofactorMultiplication DefaultCofactorOption; - - virtual ~DL_GroupParameters_EC() {} - - /// \brief Construct an EC GroupParameters - DL_GroupParameters_EC() : m_compress(false), m_encodeAsOID(true) {} - - /// \brief Construct an EC GroupParameters - /// \param oid the OID of a curve - DL_GroupParameters_EC(const OID &oid) - : m_compress(false), m_encodeAsOID(true) {Initialize(oid);} - - /// \brief Construct an EC GroupParameters - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \param k the cofactor - DL_GroupParameters_EC(const EllipticCurve &ec, const Point &G, const Integer &n, const Integer &k = Integer::Zero()) - : m_compress(false), m_encodeAsOID(true) {Initialize(ec, G, n, k);} - - /// \brief Construct an EC GroupParameters - /// \param bt BufferedTransformation with group parameters - DL_GroupParameters_EC(BufferedTransformation &bt) - : m_compress(false), m_encodeAsOID(true) {BERDecode(bt);} - - /// \brief Initialize an EC GroupParameters using {EC,G,n,k} - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \param k the cofactor - /// \details This Initialize() function overload initializes group parameters from existing parameters. - void Initialize(const EllipticCurve &ec, const Point &G, const Integer &n, const Integer &k = Integer::Zero()) - { - this->m_groupPrecomputation.SetCurve(ec); - this->SetSubgroupGenerator(G); - m_n = n; - m_k = k; - } - - /// \brief Initialize a DL_GroupParameters_EC {EC,G,n,k} - /// \param oid the OID of a curve - /// \details This Initialize() function overload initializes group parameters from existing parameters. - void Initialize(const OID &oid); - - // NameValuePairs - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // GeneratibleCryptoMaterial interface - /// this implementation doesn't actually generate a curve, it just initializes the parameters with existing values - /*! parameters: (Curve, SubgroupGenerator, SubgroupOrder, Cofactor (optional)), or (GroupOID) */ - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg); - - // DL_GroupParameters - const DL_FixedBasePrecomputation & GetBasePrecomputation() const {return this->m_gpc;} - DL_FixedBasePrecomputation & AccessBasePrecomputation() {return this->m_gpc;} - const Integer & GetSubgroupOrder() const {return m_n;} - Integer GetCofactor() const; - bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const; - bool ValidateElement(unsigned int level, const Element &element, const DL_FixedBasePrecomputation *precomp) const; - bool FastSubgroupCheckAvailable() const {return false;} - void EncodeElement(bool reversible, const Element &element, byte *encoded) const - { - if (reversible) - GetCurve().EncodePoint(encoded, element, m_compress); - else - element.x.Encode(encoded, GetEncodedElementSize(false)); - } - virtual unsigned int GetEncodedElementSize(bool reversible) const - { - if (reversible) - return GetCurve().EncodedPointSize(m_compress); - else - return GetCurve().GetField().MaxElementByteLength(); - } - Element DecodeElement(const byte *encoded, bool checkForGroupMembership) const - { - Point result; - if (!GetCurve().DecodePoint(result, encoded, GetEncodedElementSize(true))) - throw DL_BadElement(); - if (checkForGroupMembership && !ValidateElement(1, result, NULLPTR)) - throw DL_BadElement(); - return result; - } - Integer ConvertElementToInteger(const Element &element) const; - Integer GetMaxExponent() const {return GetSubgroupOrder()-1;} - bool IsIdentity(const Element &element) const {return element.identity;} - void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const; - static std::string CRYPTOPP_API StaticAlgorithmNamePrefix() {return "EC";} - - // ASN1Key - OID GetAlgorithmID() const; - - // used by MQV - Element MultiplyElements(const Element &a, const Element &b) const; - Element CascadeExponentiate(const Element &element1, const Integer &exponent1, const Element &element2, const Integer &exponent2) const; - - // non-inherited - - // enumerate OIDs for recommended parameters, use OID() to get first one - static OID CRYPTOPP_API GetNextRecommendedParametersOID(const OID &oid); - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - void SetPointCompression(bool compress) {m_compress = compress;} - bool GetPointCompression() const {return m_compress;} - - void SetEncodeAsOID(bool encodeAsOID) {m_encodeAsOID = encodeAsOID;} - bool GetEncodeAsOID() const {return m_encodeAsOID;} - - const EllipticCurve& GetCurve() const {return this->m_groupPrecomputation.GetCurve();} - - bool operator==(const ThisClass &rhs) const - {return this->m_groupPrecomputation.GetCurve() == rhs.m_groupPrecomputation.GetCurve() && this->m_gpc.GetBase(this->m_groupPrecomputation) == rhs.m_gpc.GetBase(rhs.m_groupPrecomputation);} - -protected: - unsigned int FieldElementLength() const {return GetCurve().GetField().MaxElementByteLength();} - unsigned int ExponentLength() const {return m_n.ByteCount();} - - OID m_oid; // set if parameters loaded from a recommended curve - Integer m_n; // order of base point - mutable Integer m_k; // cofactor - mutable bool m_compress, m_encodeAsOID; // presentation details -}; - -inline std::ostream& operator<<(std::ostream& os, const DL_GroupParameters_EC::Element& obj); - -/// \brief Elliptic Curve Discrete Log (DL) public key -/// \tparam EC elliptic curve field -template -class DL_PublicKey_EC : public DL_PublicKeyImpl > -{ -public: - typedef typename EC::Point Element; - - virtual ~DL_PublicKey_EC() {} - - /// \brief Initialize an EC Public Key using {GP,Q} - /// \param params group parameters - /// \param Q the public point - /// \details This Initialize() function overload initializes a public key from existing parameters. - void Initialize(const DL_GroupParameters_EC ¶ms, const Element &Q) - {this->AccessGroupParameters() = params; this->SetPublicElement(Q);} - - /// \brief Initialize an EC Public Key using {EC,G,n,Q} - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \param Q the public point - /// \details This Initialize() function overload initializes a public key from existing parameters. - void Initialize(const EC &ec, const Element &G, const Integer &n, const Element &Q) - {this->AccessGroupParameters().Initialize(ec, G, n); this->SetPublicElement(Q);} - - // X509PublicKey - void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePublicKey(BufferedTransformation &bt) const; -}; - -/// \brief Elliptic Curve Discrete Log (DL) private key -/// \tparam EC elliptic curve field -template -class DL_PrivateKey_EC : public DL_PrivateKeyImpl > -{ -public: - typedef typename EC::Point Element; - - virtual ~DL_PrivateKey_EC(); - - /// \brief Initialize an EC Private Key using {GP,x} - /// \param params group parameters - /// \param x the private exponent - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const DL_GroupParameters_EC ¶ms, const Integer &x) - {this->AccessGroupParameters() = params; this->SetPrivateExponent(x);} - - /// \brief Initialize an EC Private Key using {EC,G,n,x} - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \param x the private exponent - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const EC &ec, const Element &G, const Integer &n, const Integer &x) - {this->AccessGroupParameters().Initialize(ec, G, n); this->SetPrivateExponent(x);} - - /// \brief Create an EC private key - /// \param rng a RandomNumberGenerator derived class - /// \param params the EC group parameters - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, const DL_GroupParameters_EC ¶ms) - {this->GenerateRandom(rng, params);} - - /// \brief Create an EC private key - /// \param rng a RandomNumberGenerator derived class - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, const EC &ec, const Element &G, const Integer &n) - {this->GenerateRandom(rng, DL_GroupParameters_EC(ec, G, n));} - - // PKCS8PrivateKey - void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePrivateKey(BufferedTransformation &bt) const; -}; - -// Out-of-line dtor due to AIX and GCC, http://github.com/weidai11/cryptopp/issues/499 -template -DL_PrivateKey_EC::~DL_PrivateKey_EC() {} - -/// \brief Elliptic Curve Diffie-Hellman -/// \tparam EC elliptic curve field -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \sa CofactorMultiplicationOption, Elliptic Curve Diffie-Hellman, AKA ECDH -/// \since Crypto++ 3.0 -template ::DefaultCofactorOption> -struct ECDH -{ - typedef DH_Domain, COFACTOR_OPTION> Domain; -}; - -/// \brief Elliptic Curve Menezes-Qu-Vanstone -/// \tparam EC elliptic curve field -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \sa CofactorMultiplicationOption, Elliptic Curve Menezes-Qu-Vanstone, AKA ECMQV -template ::DefaultCofactorOption> -struct ECMQV -{ - typedef MQV_Domain, COFACTOR_OPTION> Domain; -}; - -/// \brief Hashed Elliptic Curve Menezes-Qu-Vanstone -/// \tparam EC elliptic curve field -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \details This implementation follows Hugo Krawczyk's HMQV: A High-Performance -/// Secure Diffie-Hellman Protocol. Note: this implements HMQV only. HMQV-C with Key Confirmation is not provided. -/// \sa CofactorMultiplicationOption -template ::DefaultCofactorOption, class HASH = SHA256> -struct ECHMQV -{ - typedef HMQV_Domain, COFACTOR_OPTION, HASH> Domain; -}; - -typedef ECHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA1 >::Domain ECHMQV160; -typedef ECHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA256 >::Domain ECHMQV256; -typedef ECHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA384 >::Domain ECHMQV384; -typedef ECHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA512 >::Domain ECHMQV512; - -/// \brief Fully Hashed Elliptic Curve Menezes-Qu-Vanstone -/// \tparam EC elliptic curve field -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \details This implementation follows Augustin P. Sarr and Philippe Elbaz–Vincent, and Jean–Claude Bajard's -/// A Secure and Efficient Authenticated Diffie-Hellman Protocol. -/// Note: this is FHMQV, Protocol 5, from page 11; and not FHMQV-C. -/// \sa CofactorMultiplicationOption -template ::DefaultCofactorOption, class HASH = SHA256> -struct ECFHMQV -{ - typedef FHMQV_Domain, COFACTOR_OPTION, HASH> Domain; -}; - -typedef ECFHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA1 >::Domain ECFHMQV160; -typedef ECFHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA256 >::Domain ECFHMQV256; -typedef ECFHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA384 >::Domain ECFHMQV384; -typedef ECFHMQV< ECP, DL_GroupParameters_EC< ECP >::DefaultCofactorOption, SHA512 >::Domain ECFHMQV512; - -/// \brief Elliptic Curve Discrete Log (DL) keys -/// \tparam EC elliptic curve field -template -struct DL_Keys_EC -{ - typedef DL_PublicKey_EC PublicKey; - typedef DL_PrivateKey_EC PrivateKey; -}; - -// Forward declaration; documented below -template -struct ECDSA; - -/// \brief Elliptic Curve DSA keys -/// \tparam EC elliptic curve field -/// \since Crypto++ 3.2 -template -struct DL_Keys_ECDSA -{ - typedef DL_PublicKey_EC PublicKey; - typedef DL_PrivateKey_WithSignaturePairwiseConsistencyTest, ECDSA > PrivateKey; -}; - -/// \brief Elliptic Curve DSA (ECDSA) signature algorithm -/// \tparam EC elliptic curve field -/// \since Crypto++ 3.2 -template -class DL_Algorithm_ECDSA : public DL_Algorithm_GDSA -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECDSA";} -}; - -/// \brief Elliptic Curve DSA (ECDSA) signature algorithm based on RFC 6979 -/// \tparam EC elliptic curve field -/// \sa RFC 6979, Deterministic Usage of the -/// Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) -/// \since Crypto++ 6.0 -template -class DL_Algorithm_ECDSA_RFC6979 : public DL_Algorithm_DSA_RFC6979 -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECDSA-RFC6979";} -}; - -/// \brief Elliptic Curve NR (ECNR) signature algorithm -/// \tparam EC elliptic curve field -template -class DL_Algorithm_ECNR : public DL_Algorithm_NR -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECNR";} -}; - -/// \brief Elliptic Curve DSA (ECDSA) signature scheme -/// \tparam EC elliptic curve field -/// \tparam H HashTransformation derived class -/// \sa ECDSA -/// \since Crypto++ 3.2 -template -struct ECDSA : public DL_SS, DL_Algorithm_ECDSA, DL_SignatureMessageEncodingMethod_DSA, H> -{ -}; - -/// \brief Elliptic Curve DSA (ECDSA) deterministic signature scheme -/// \tparam EC elliptic curve field -/// \tparam H HashTransformation derived class -/// \sa Deterministic Usage of the -/// Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) -/// \since Crypto++ 6.0 -template -struct ECDSA_RFC6979 : public DL_SS< - DL_Keys_ECDSA, - DL_Algorithm_ECDSA_RFC6979, - DL_SignatureMessageEncodingMethod_DSA, - H, - ECDSA_RFC6979 > -{ - static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("ECDSA-RFC6979/") + H::StaticAlgorithmName();} -}; - -/// \brief Elliptic Curve NR (ECNR) signature scheme -/// \tparam EC elliptic curve field -/// \tparam H HashTransformation derived class -template -struct ECNR : public DL_SS, DL_Algorithm_ECNR, DL_SignatureMessageEncodingMethod_NR, H> -{ -}; - -// ****************************************** - -template -class DL_PublicKey_ECGDSA; -template -class DL_PrivateKey_ECGDSA; - -/// \brief Elliptic Curve German DSA key for ISO/IEC 15946 -/// \tparam EC elliptic curve field -/// \sa ECGDSA -/// \since Crypto++ 6.0 -template -class DL_PrivateKey_ECGDSA : public DL_PrivateKeyImpl > -{ -public: - typedef typename EC::Point Element; - - virtual ~DL_PrivateKey_ECGDSA() {} - - /// \brief Initialize an EC Private Key using {GP,x} - /// \param params group parameters - /// \param x the private exponent - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const DL_GroupParameters_EC ¶ms, const Integer &x) - { - this->AccessGroupParameters() = params; - this->SetPrivateExponent(x); - CRYPTOPP_ASSERT(x>=1 && x<=params.GetSubgroupOrder()-1); - } - - /// \brief Initialize an EC Private Key using {EC,G,n,x} - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \param x the private exponent - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const EC &ec, const Element &G, const Integer &n, const Integer &x) - { - this->AccessGroupParameters().Initialize(ec, G, n); - this->SetPrivateExponent(x); - CRYPTOPP_ASSERT(x>=1 && x<=this->AccessGroupParameters().GetSubgroupOrder()-1); - } - - /// \brief Create an EC private key - /// \param rng a RandomNumberGenerator derived class - /// \param params the EC group parameters - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, const DL_GroupParameters_EC ¶ms) - {this->GenerateRandom(rng, params);} - - /// \brief Create an EC private key - /// \param rng a RandomNumberGenerator derived class - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, const EC &ec, const Element &G, const Integer &n) - {this->GenerateRandom(rng, DL_GroupParameters_EC(ec, G, n));} - - virtual void MakePublicKey(DL_PublicKey_ECGDSA &pub) const - { - const DL_GroupParameters& params = this->GetAbstractGroupParameters(); - pub.AccessAbstractGroupParameters().AssignFrom(params); - const Integer &xInv = this->GetPrivateExponent().InverseMod(params.GetSubgroupOrder()); - pub.SetPublicElement(params.ExponentiateBase(xInv)); - CRYPTOPP_ASSERT(xInv.NotZero()); - } - - virtual bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const - { - return GetValueHelper, - DL_PrivateKey_ECGDSA >(this, name, valueType, pValue).Assignable(); - } - - virtual void AssignFrom(const NameValuePairs &source) - { - AssignFromHelper, - DL_PrivateKey_ECGDSA >(this, source); - } - - // PKCS8PrivateKey - void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePrivateKey(BufferedTransformation &bt) const; -}; - -/// \brief Elliptic Curve German DSA key for ISO/IEC 15946 -/// \tparam EC elliptic curve field -/// \sa ECGDSA -/// \since Crypto++ 6.0 -template -class DL_PublicKey_ECGDSA : public DL_PublicKeyImpl > -{ - typedef DL_PublicKey_ECGDSA ThisClass; - -public: - typedef typename EC::Point Element; - - virtual ~DL_PublicKey_ECGDSA() {} - - /// \brief Initialize an EC Public Key using {GP,Q} - /// \param params group parameters - /// \param Q the public point - /// \details This Initialize() function overload initializes a public key from existing parameters. - void Initialize(const DL_GroupParameters_EC ¶ms, const Element &Q) - {this->AccessGroupParameters() = params; this->SetPublicElement(Q);} - - /// \brief Initialize an EC Public Key using {EC,G,n,Q} - /// \param ec the elliptic curve - /// \param G the base point - /// \param n the order of the base point - /// \param Q the public point - /// \details This Initialize() function overload initializes a public key from existing parameters. - void Initialize(const EC &ec, const Element &G, const Integer &n, const Element &Q) - {this->AccessGroupParameters().Initialize(ec, G, n); this->SetPublicElement(Q);} - - virtual void AssignFrom(const NameValuePairs &source) - { - DL_PrivateKey_ECGDSA *pPrivateKey = NULLPTR; - if (source.GetThisPointer(pPrivateKey)) - pPrivateKey->MakePublicKey(*this); - else - { - this->AccessAbstractGroupParameters().AssignFrom(source); - AssignFromHelper(this, source) - CRYPTOPP_SET_FUNCTION_ENTRY(PublicElement); - } - } - - // DL_PublicKey - virtual void SetPublicElement(const Element &y) - {this->AccessPublicPrecomputation().SetBase(this->GetAbstractGroupParameters().GetGroupPrecomputation(), y);} - - // X509PublicKey - void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePublicKey(BufferedTransformation &bt) const; -}; - -/// \brief Elliptic Curve German DSA keys for ISO/IEC 15946 -/// \tparam EC elliptic curve field -/// \sa ECGDSA -/// \since Crypto++ 6.0 -template -struct DL_Keys_ECGDSA -{ - typedef DL_PublicKey_ECGDSA PublicKey; - typedef DL_PrivateKey_ECGDSA PrivateKey; -}; - -/// \brief Elliptic Curve German DSA signature algorithm -/// \tparam EC elliptic curve field -/// \sa ECGDSA -/// \since Crypto++ 6.0 -template -class DL_Algorithm_ECGDSA : public DL_Algorithm_GDSA_ISO15946 -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECGDSA";} -}; - -/// \brief Elliptic Curve German Digital Signature Algorithm signature scheme -/// \tparam EC elliptic curve field -/// \tparam H HashTransformation derived class -/// \sa Erwin Hess, Marcus Schafheutle, and Pascale Serf The Digital Signature Scheme -/// ECGDSA (October 24, 2006) -/// \since Crypto++ 6.0 -template -struct ECGDSA : public DL_SS< - DL_Keys_ECGDSA, - DL_Algorithm_ECGDSA, - DL_SignatureMessageEncodingMethod_DSA, - H> -{ - static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("ECGDSA-ISO15946/") + H::StaticAlgorithmName();} -}; - -// ****************************************** - -/// \brief Elliptic Curve Integrated Encryption Scheme -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \tparam HASH HashTransformation derived class used for key derivation and MAC computation -/// \tparam DHAES_MODE flag indicating if the MAC includes additional context parameters such as u·V, v·U and label -/// \tparam LABEL_OCTETS flag indicating if the label size is specified in octets or bits -/// \details ECIES is an Elliptic Curve based Integrated Encryption Scheme (IES). The scheme combines a Key Encapsulation -/// Method (KEM) with a Data Encapsulation Method (DEM) and a MAC tag. The scheme is -/// IND-CCA2, which is a strong notion of security. -/// You should prefer an Integrated Encryption Scheme over homegrown schemes. -/// \details If you desire an Integrated Encryption Scheme with Crypto++ 4.2 compatibility, then use the ECIES_P1363. -/// If you desire an Integrated Encryption Scheme compatible with Bouncy Castle 1.54 and Botan 1.11 compatibility, then use the ECIES -/// template class with NoCofactorMultiplication, DHAES_MODE=true and LABEL_OCTETS=false. -/// \details The default template parameters ensure compatibility with Bouncy Castle 1.54 and Botan 1.11. The combination of -/// IncompatibleCofactorMultiplication and DHAES_MODE=true is recommended for best efficiency and security. -/// SHA1 is used for compatibility reasons, but it can be changed if desired. -/// \sa DLIES, ECIES_P1363, Elliptic Curve Integrated Encryption Scheme (ECIES), -/// Martínez, Encinas, and Ávila's A Survey of the Elliptic -/// Curve Integrated Encryption Schemes -/// \since Crypto++ 4.0, Crypto++ 5.7 for Bouncy Castle and Botan compatibility -template -struct ECIES - : public DL_ES< - DL_Keys_EC, - DL_KeyAgreementAlgorithm_DH, - DL_KeyDerivationAlgorithm_P1363 >, - DL_EncryptionAlgorithm_Xor, DHAES_MODE, LABEL_OCTETS>, - ECIES > -{ - // TODO: fix this after name is standardized - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECIES";} -}; - -/// \brief Elliptic Curve Integrated Encryption Scheme for P1363 -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \tparam HASH HashTransformation derived class used for key derivation and MAC computation -/// \details ECIES_P1363 is an Elliptic Curve based Integrated Encryption Scheme (IES) for P1363. The scheme combines a Key Encapsulation -/// Method (KEM) with a Data Encapsulation Method (DEM) and a MAC tag. The scheme is -/// IND-CCA2, which is a strong notion of security. -/// You should prefer an Integrated Encryption Scheme over homegrown schemes. -/// \details The library's original implementation is based on an early P1363 draft, which itself appears to be based on an early Certicom -/// SEC-1 draft (or an early SEC-1 draft was based on a P1363 draft). Crypto++ 4.2 used the early draft in its Integrated Enryption -/// Schemes with NoCofactorMultiplication, DHAES_MODE=false and LABEL_OCTETS=true. -/// \details If you desire an Integrated Encryption Scheme with Crypto++ 4.2 compatibility, then use the ECIES_P1363. -/// If you desire an Integrated Encryption Scheme compatible with Bouncy Castle 1.54 and Botan 1.11 compatibility, then use the ECIES -/// template class with NoCofactorMultiplication, DHAES_MODE=true and LABEL_OCTETS=false. -/// \details The default template parameters ensure compatibility with P1363. The combination of -/// IncompatibleCofactorMultiplication and DHAES_MODE=true is recommended for best efficiency and security. -/// SHA1 is used for compatibility reasons, but it can be changed if desired. -/// \sa DLIES, ECIES, Elliptic Curve Integrated Encryption Scheme (ECIES), -/// Martínez, Encinas, and Ávila's A Survey of the Elliptic -/// Curve Integrated Encryption Schemes -/// \since Crypto++ 4.0 -template -struct ECIES_P1363 - : public DL_ES< - DL_Keys_EC, - DL_KeyAgreementAlgorithm_DH, - DL_KeyDerivationAlgorithm_P1363 >, - DL_EncryptionAlgorithm_Xor, false, true>, - ECIES > -{ - // TODO: fix this after name is standardized - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECIES-P1363";} -}; - -NAMESPACE_END - -#ifdef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES -#include "eccrypto.cpp" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKeyImpl >; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKeyImpl >; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_ECGDSA; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_ECGDSA; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl >; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl >; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_ECGDSA; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_ECGDSA; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_WithSignaturePairwiseConsistencyTest, ECDSA >; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_WithSignaturePairwiseConsistencyTest, ECDSA >; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ecp.h b/third_party/cryptoppwin/include/cryptopp/ecp.h deleted file mode 100644 index 28929d00..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ecp.h +++ /dev/null @@ -1,167 +0,0 @@ -// ecp.h - originally written and placed in the public domain by Wei Dai - -/// \file ecp.h -/// \brief Classes for Elliptic Curves over prime fields - -#ifndef CRYPTOPP_ECP_H -#define CRYPTOPP_ECP_H - -#include "cryptlib.h" -#include "integer.h" -#include "algebra.h" -#include "modarith.h" -#include "ecpoint.h" -#include "eprecomp.h" -#include "smartptr.h" -#include "pubkey.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Elliptic Curve over GF(p), where p is prime -class CRYPTOPP_DLL ECP : public AbstractGroup, public EncodedPoint -{ -public: - typedef ModularArithmetic Field; - typedef Integer FieldElement; - typedef ECPPoint Point; - - virtual ~ECP() {} - - /// \brief Construct an ECP - ECP() {} - - /// \brief Construct an ECP - /// \param ecp the other ECP object - /// \param convertToMontgomeryRepresentation flag indicating if the curve - /// should be converted to a MontgomeryRepresentation. - /// \details Prior to Crypto++ 8.3 the default value for - /// convertToMontgomeryRepresentation was false. it was changed due to - /// two audit tools finding, "Signature-compatible with a copy constructor". - /// \sa ModularArithmetic, MontgomeryRepresentation - ECP(const ECP &ecp, bool convertToMontgomeryRepresentation); - - /// \brief Construct an ECP - /// \param modulus the prime modulus - /// \param a Field::Element - /// \param b Field::Element - ECP(const Integer &modulus, const FieldElement &a, const FieldElement &b) - : m_fieldPtr(new Field(modulus)), m_a(a.IsNegative() ? modulus+a : a), m_b(b) {} - - /// \brief Construct an ECP from BER encoded parameters - /// \param bt BufferedTransformation derived object - /// \details This constructor will decode and extract the fields - /// fieldID and curve of the sequence ECParameters - ECP(BufferedTransformation &bt); - - /// \brief DER Encode - /// \param bt BufferedTransformation derived object - /// \details DEREncode encode the fields fieldID and curve of the sequence - /// ECParameters - void DEREncode(BufferedTransformation &bt) const; - - /// \brief Compare two points - /// \param P the first point - /// \param Q the second point - /// \return true if equal, false otherwise - bool Equal(const Point &P, const Point &Q) const; - - const Point& Identity() const; - const Point& Inverse(const Point &P) const; - bool InversionIsFast() const {return true;} - const Point& Add(const Point &P, const Point &Q) const; - const Point& Double(const Point &P) const; - Point ScalarMultiply(const Point &P, const Integer &k) const; - Point CascadeScalarMultiply(const Point &P, const Integer &k1, const Point &Q, const Integer &k2) const; - void SimultaneousMultiply(Point *results, const Point &base, const Integer *exponents, unsigned int exponentsCount) const; - - Point Multiply(const Integer &k, const Point &P) const - {return ScalarMultiply(P, k);} - Point CascadeMultiply(const Integer &k1, const Point &P, const Integer &k2, const Point &Q) const - {return CascadeScalarMultiply(P, k1, Q, k2);} - - bool ValidateParameters(RandomNumberGenerator &rng, unsigned int level=3) const; - bool VerifyPoint(const Point &P) const; - - unsigned int EncodedPointSize(bool compressed = false) const - {return 1 + (compressed?1:2)*GetField().MaxElementByteLength();} - // returns false if point is compressed and not valid (doesn't check if uncompressed) - bool DecodePoint(Point &P, BufferedTransformation &bt, size_t len) const; - bool DecodePoint(Point &P, const byte *encodedPoint, size_t len) const; - void EncodePoint(byte *encodedPoint, const Point &P, bool compressed) const; - void EncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const; - - Point BERDecodePoint(BufferedTransformation &bt) const; - void DEREncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const; - - Integer FieldSize() const {return GetField().GetModulus();} - const Field & GetField() const {return *m_fieldPtr;} - const FieldElement & GetA() const {return m_a;} - const FieldElement & GetB() const {return m_b;} - - bool operator==(const ECP &rhs) const - {return GetField() == rhs.GetField() && m_a == rhs.m_a && m_b == rhs.m_b;} - -private: - clonable_ptr m_fieldPtr; - FieldElement m_a, m_b; - mutable Point m_R; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation; - -/// \brief Elliptic Curve precomputation -/// \tparam EC elliptic curve field -template class EcPrecomputation; - -/// \brief ECP precomputation specialization -/// \details Implementation of DL_GroupPrecomputation with input and output -/// conversions for Montgomery modular multiplication. -/// \sa DL_GroupPrecomputation, ModularArithmetic, MontgomeryRepresentation -template<> class EcPrecomputation : public DL_GroupPrecomputation -{ -public: - typedef ECP EllipticCurve; - - virtual ~EcPrecomputation() {} - - // DL_GroupPrecomputation - bool NeedConversions() const {return true;} - Element ConvertIn(const Element &P) const - {return P.identity ? P : ECP::Point(m_ec->GetField().ConvertIn(P.x), m_ec->GetField().ConvertIn(P.y));}; - Element ConvertOut(const Element &P) const - {return P.identity ? P : ECP::Point(m_ec->GetField().ConvertOut(P.x), m_ec->GetField().ConvertOut(P.y));} - const AbstractGroup & GetGroup() const {return *m_ec;} - Element BERDecodeElement(BufferedTransformation &bt) const {return m_ec->BERDecodePoint(bt);} - void DEREncodeElement(BufferedTransformation &bt, const Element &v) const {m_ec->DEREncodePoint(bt, v, false);} - - /// \brief Set the elliptic curve - /// \param ec ECP derived class - /// \details SetCurve() is not inherited - void SetCurve(const ECP &ec) - { - m_ec.reset(new ECP(ec, true)); - m_ecOriginal = ec; - } - - /// \brief Get the elliptic curve - /// \return ECP curve - /// \details GetCurve() is not inherited - const ECP & GetCurve() const {return *m_ecOriginal;} - -private: - value_ptr m_ec, m_ecOriginal; -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ecpoint.h b/third_party/cryptoppwin/include/cryptopp/ecpoint.h deleted file mode 100644 index 2be93bc7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ecpoint.h +++ /dev/null @@ -1,146 +0,0 @@ -// ecpoint.h - written and placed in the public domain by Jeffrey Walton -// Data structures moved from ecp.h and ec2n.h. Added EncodedPoint interface - -/// \file ecpoint.h -/// \brief Classes for Elliptic Curve points -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_ECPOINT_H -#define CRYPTOPP_ECPOINT_H - -#include "cryptlib.h" -#include "integer.h" -#include "algebra.h" -#include "gf2n.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Elliptical Curve Point over GF(p), where p is prime -/// \since Crypto++ 2.0 -struct CRYPTOPP_DLL ECPPoint -{ - virtual ~ECPPoint() {} - - /// \brief Construct an ECPPoint - /// \details identity is set to true - ECPPoint() : identity(true) {} - - /// \brief Construct an ECPPoint from coordinates - /// \details identity is set to false - ECPPoint(const Integer &x, const Integer &y) - : x(x), y(y), identity(false) {} - - /// \brief Tests points for equality - /// \param t the other point - /// \return true if the points are equal, false otherwise - bool operator==(const ECPPoint &t) const - {return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);} - - /// \brief Tests points for ordering - /// \param t the other point - /// \return true if this point is less than other, false otherwise - bool operator< (const ECPPoint &t) const - {return identity ? !t.identity : (!t.identity && (x; - -/// \brief Elliptical Curve Point over GF(2^n) -/// \since Crypto++ 2.0 -struct CRYPTOPP_DLL EC2NPoint -{ - virtual ~EC2NPoint() {} - - /// \brief Construct an EC2NPoint - /// \details identity is set to true - EC2NPoint() : identity(true) {} - - /// \brief Construct an EC2NPoint from coordinates - /// \details identity is set to false - EC2NPoint(const PolynomialMod2 &x, const PolynomialMod2 &y) - : x(x), y(y), identity(false) {} - - /// \brief Tests points for equality - /// \param t the other point - /// \return true if the points are equal, false otherwise - bool operator==(const EC2NPoint &t) const - {return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);} - - /// \brief Tests points for ordering - /// \param t the other point - /// \return true if this point is less than other, false otherwise - bool operator< (const EC2NPoint &t) const - {return identity ? !t.identity : (!t.identity && (x; - -/// \brief Abstract class for encoding and decoding ellicptic curve points -/// \tparam Point ellicptic curve point -/// \details EncodedPoint is an interface for encoding and decoding elliptic curve points. -/// The template parameter Point should be a class like ECP or EC2N. -/// \since Crypto++ 6.0 -template -class EncodedPoint -{ -public: - virtual ~EncodedPoint() {} - - /// \brief Decodes an elliptic curve point - /// \param P point which is decoded - /// \param bt source BufferedTransformation - /// \param len number of bytes to read from the BufferedTransformation - /// \return true if a point was decoded, false otherwise - virtual bool DecodePoint(Point &P, BufferedTransformation &bt, size_t len) const =0; - - /// \brief Decodes an elliptic curve point - /// \param P point which is decoded - /// \param encodedPoint byte array with the encoded point - /// \param len the size of the array - /// \return true if a point was decoded, false otherwise - virtual bool DecodePoint(Point &P, const byte *encodedPoint, size_t len) const =0; - - /// \brief Verifies points on elliptic curve - /// \param P point to verify - /// \return true if the point is valid, false otherwise - virtual bool VerifyPoint(const Point &P) const =0; - - /// \brief Determines encoded point size - /// \param compressed flag indicating if the point is compressed - /// \return the minimum number of bytes required to encode the point - virtual unsigned int EncodedPointSize(bool compressed = false) const =0; - - /// \brief Encodes an elliptic curve point - /// \param P point which is decoded - /// \param encodedPoint byte array for the encoded point - /// \param compressed flag indicating if the point is compressed - /// \details encodedPoint must be at least EncodedPointSize() in length - virtual void EncodePoint(byte *encodedPoint, const Point &P, bool compressed) const =0; - - /// \brief Encodes an elliptic curve point - /// \param bt target BufferedTransformation - /// \param P point which is encoded - /// \param compressed flag indicating if the point is compressed - virtual void EncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const =0; - - /// \brief BER Decodes an elliptic curve point - /// \param bt source BufferedTransformation - /// \return the decoded elliptic curve point - virtual Point BERDecodePoint(BufferedTransformation &bt) const =0; - - /// \brief DER Encodes an elliptic curve point - /// \param bt target BufferedTransformation - /// \param P point which is encoded - /// \param compressed flag indicating if the point is compressed - virtual void DEREncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const =0; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_ECPOINT_H diff --git a/third_party/cryptoppwin/include/cryptopp/elgamal.h b/third_party/cryptoppwin/include/cryptopp/elgamal.h deleted file mode 100644 index f979f0a8..00000000 --- a/third_party/cryptoppwin/include/cryptopp/elgamal.h +++ /dev/null @@ -1,308 +0,0 @@ -// elgamal.h - originally written and placed in the public domain by Wei Dai - -/// \file elgamal.h -/// \brief Classes and functions for ElGamal key agreement and encryption schemes - -#ifndef CRYPTOPP_ELGAMAL_H -#define CRYPTOPP_ELGAMAL_H - -#include "cryptlib.h" -#include "modexppc.h" -#include "integer.h" -#include "gfpcrypt.h" -#include "pubkey.h" -#include "misc.h" -#include "oids.h" -#include "dsa.h" -#include "asn.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief ElGamal key agreement and encryption schemes base class -/// \since Crypto++ 1.0 -class CRYPTOPP_NO_VTABLE ElGamalBase : - public DL_KeyAgreementAlgorithm_DH, - public DL_KeyDerivationAlgorithm, - public DL_SymmetricEncryptionAlgorithm -{ -public: - virtual ~ElGamalBase() {} - - void Derive(const DL_GroupParameters &groupParams, byte *derivedKey, size_t derivedLength, const Integer &agreedElement, const Integer &ephemeralPublicKey, const NameValuePairs &derivationParams) const - { - CRYPTOPP_UNUSED(groupParams); CRYPTOPP_UNUSED(ephemeralPublicKey); - CRYPTOPP_UNUSED(derivationParams); - agreedElement.Encode(derivedKey, derivedLength); - } - - size_t GetSymmetricKeyLength(size_t plainTextLength) const - { - CRYPTOPP_UNUSED(plainTextLength); - return GetGroupParameters().GetModulus().ByteCount(); - } - - size_t GetSymmetricCiphertextLength(size_t plainTextLength) const - { - unsigned int len = GetGroupParameters().GetModulus().ByteCount(); - if (plainTextLength <= GetMaxSymmetricPlaintextLength(len)) - return len; - else - return 0; - } - - size_t GetMaxSymmetricPlaintextLength(size_t cipherTextLength) const - { - unsigned int len = GetGroupParameters().GetModulus().ByteCount(); - CRYPTOPP_ASSERT(len >= 3); - - if (cipherTextLength == len) - return STDMIN(255U, len-3); - else - return 0; - } - - void SymmetricEncrypt(RandomNumberGenerator &rng, const byte *key, const byte *plainText, size_t plainTextLength, byte *cipherText, const NameValuePairs ¶meters) const - { - CRYPTOPP_UNUSED(parameters); - const Integer &p = GetGroupParameters().GetModulus(); - unsigned int modulusLen = p.ByteCount(); - - SecByteBlock block(modulusLen-1); - rng.GenerateBlock(block, modulusLen-2-plainTextLength); - std::memcpy(block+modulusLen-2-plainTextLength, plainText, plainTextLength); - block[modulusLen-2] = (byte)plainTextLength; - - a_times_b_mod_c(Integer(key, modulusLen), Integer(block, modulusLen-1), p).Encode(cipherText, modulusLen); - } - - DecodingResult SymmetricDecrypt(const byte *key, const byte *cipherText, size_t cipherTextLength, byte *plainText, const NameValuePairs ¶meters) const - { - CRYPTOPP_UNUSED(parameters); - const Integer &p = GetGroupParameters().GetModulus(); - unsigned int modulusLen = p.ByteCount(); - - if (cipherTextLength != modulusLen) - return DecodingResult(); - - Integer m = a_times_b_mod_c(Integer(cipherText, modulusLen), Integer(key, modulusLen).InverseMod(p), p); - - m.Encode(plainText, 1); - unsigned int plainTextLength = plainText[0]; - if (plainTextLength > GetMaxSymmetricPlaintextLength(modulusLen)) - return DecodingResult(); - m >>= 8; - m.Encode(plainText, plainTextLength); - return DecodingResult(plainTextLength); - } - - virtual const DL_GroupParameters_GFP & GetGroupParameters() const =0; -}; - -/// \brief ElGamal key agreement and encryption schemes default implementation -/// \tparam BASE Base class implementation -/// \tparam SCHEME_OPTIONS Scheme options -/// \tparam KEY ElGamal key classes -/// \since Crypto++ 1.0 -template -class ElGamalObjectImpl : - public DL_ObjectImplBase, - public ElGamalBase -{ -public: - virtual ~ElGamalObjectImpl() {} - - size_t FixedMaxPlaintextLength() const {return this->MaxPlaintextLength(FixedCiphertextLength());} - size_t FixedCiphertextLength() const {return this->CiphertextLength(0);} - - const DL_GroupParameters_GFP & GetGroupParameters() const {return this->GetKey().GetGroupParameters();} - - DecodingResult FixedLengthDecrypt(RandomNumberGenerator &rng, const byte *cipherText, byte *plainText) const - {return Decrypt(rng, cipherText, FixedCiphertextLength(), plainText);} - -protected: - const DL_KeyAgreementAlgorithm & GetKeyAgreementAlgorithm() const {return *this;} - const DL_KeyDerivationAlgorithm & GetKeyDerivationAlgorithm() const {return *this;} - const DL_SymmetricEncryptionAlgorithm & GetSymmetricEncryptionAlgorithm() const {return *this;} -}; - -/// \brief ElGamal Public Key adapter -/// \tparam BASE PublicKey derived class -/// \details DL_PublicKey_ElGamal provides an override for GetAlgorithmID() -/// to utilize 1.3.14.7.2.1.1. Prior to DL_PublicKey_ElGamal, the ElGamal -/// keys [mistakenly] used the OID from DSA due to DL_GroupParmaters_GFP(). -/// If you need to Load an ElGamal key with the wrong OID then -/// see ElGamal on -/// the Crypto++ wiki. -/// \sa Issue 876, -/// Issue 567 -/// \since Crypto++ 8.3 -template -struct DL_PublicKey_ElGamal : public BASE -{ - virtual ~DL_PublicKey_ElGamal() {} - - /// \brief Retrieves the OID of the algorithm - /// \return OID of the algorithm - /// \details DL_PrivateKey_ElGamal provides an override for GetAlgorithmID() - /// to utilize 1.3.14.7.2.1.1. Prior to DL_PrivateKey_ElGamal, the ElGamal - /// keys [mistakenly] used the OID from DSA due to DL_GroupParmaters_GFP(). - /// If you need to Load an ElGamal key with the wrong OID then - /// see ElGamal on - /// the Crypto++ wiki. - /// \sa Issue 876, - /// Issue 567 - virtual OID GetAlgorithmID() const { - return ASN1::elGamal(); - } -}; - -/// \brief ElGamal Private Key adapter -/// \tparam BASE PrivateKey derived class -/// \details DL_PrivateKey_ElGamal provides an override for GetAlgorithmID() -/// to utilize 1.3.14.7.2.1.1. Prior to DL_PrivateKey_ElGamal, the ElGamal -/// keys [mistakenly] used the OID from DSA due to DL_GroupParmaters_GFP(). -/// If you need to Load an ElGamal key with the wrong OID then -/// see ElGamal on -/// the Crypto++ wiki. -/// \sa Issue 876, -/// Issue 567 -/// \since Crypto++ 8.3 -template -struct DL_PrivateKey_ElGamal : public BASE -{ - virtual ~DL_PrivateKey_ElGamal() {} - - /// \brief Retrieves the OID of the algorithm - /// \return OID of the algorithm - /// \details DL_PrivateKey_ElGamal provides an override for GetAlgorithmID() - /// to utilize 1.3.14.7.2.1.1. Prior to DL_PrivateKey_ElGamal, the ElGamal - /// keys [mistakenly] used the OID from DSA due to DL_GroupParmaters_GFP(). - /// If you need to Load an ElGamal key with the wrong OID then - /// see ElGamal on - /// the Crypto++ wiki. - /// \sa Issue 876, - /// Issue 567 - virtual OID GetAlgorithmID() const { - return ASN1::elGamal(); - } - - /// \brief Check the key for errors - /// \param rng RandomNumberGenerator for objects which use randomized testing - /// \param level level of thoroughness - /// \return true if the tests succeed, false otherwise - /// \details There are four levels of thoroughness: - ///
    - ///
  • 0 - using this object won't cause a crash or exception - ///
  • 1 - this object will probably function, and encrypt, sign, other - /// operations correctly - ///
  • 2 - ensure this object will function correctly, and perform - /// reasonable security checks - ///
  • 3 - perform reasonable security checks, and do checks that may - /// take a long time - ///
- /// \details Level 0 does not require a RandomNumberGenerator. A NullRNG() can - /// be used for level 0. Level 1 may not check for weak keys and such. - /// Levels 2 and 3 are recommended. - bool Validate(RandomNumberGenerator &rng, unsigned int level) const - { - // Validate() formerly used DL_PrivateKey_GFP implementation through - // inheritance. However, it would reject keys from other libraries - // like BouncyCastle. The failure was x < q. According to ElGamal's - // paper and the HAC, the private key is selected in over [1,p-1], - // Later Tsiounis and Yung showed the lower limit as [1,q-1] in - // "On the Security of EIGamal Based Encryption". As such, Crypto++ - // will generate a key in the range [1,q-1], but accept a key - // in [1,p-1]. Thanks to JPM for finding the reference. Also see - // https://github.com/weidai11/cryptopp/commit/a5a684d92986. - - CRYPTOPP_ASSERT(this->GetAbstractGroupParameters().Validate(rng, level)); - bool pass = this->GetAbstractGroupParameters().Validate(rng, level); - - const Integer &p = this->GetGroupParameters().GetModulus(); - const Integer &q = this->GetAbstractGroupParameters().GetSubgroupOrder(); - const Integer &x = this->GetPrivateExponent(); - - // Changed to x < p-1 based on ElGamal's paper and the HAC. - CRYPTOPP_ASSERT(x.IsPositive()); - CRYPTOPP_ASSERT(x < p-1); - pass = pass && x.IsPositive() && x < p-1; - - if (level >= 1) - { - // Minimum security level due to Tsiounis and Yung. - CRYPTOPP_ASSERT(Integer::Gcd(x, q) == Integer::One()); - pass = pass && Integer::Gcd(x, q) == Integer::One(); - } - return pass; - } -}; - -/// \brief ElGamal key agreement and encryption schemes keys -/// \details ElGamalKeys provide the algorithm implementation ElGamal key -/// agreement and encryption schemes. -/// \details The ElGamalKeys class used DL_PrivateKey_GFP_OldFormat -/// and DL_PublicKey_GFP_OldFormat for the PrivateKey and -/// PublicKey from about Crypto++ 1.0 through Crypto++ 5.6.5. At -/// Crypto++ 6.0 the serialization format was cutover to standard PKCS8 and -/// X509 encodings. -/// \details The ElGamalKeys class [mistakenly] used the OID for DSA from -/// about Crypto++ 1.0 through Crypto++ 8.2. At Crypto++ 8.3 the OID was -/// fixed and now uses ElGamal encryption, which is 1.3.14.7.2.1.1. -/// If you need to Load an ElGamal key with the wrong OID then -/// see ElGamal on -/// the Crypto++ wiki. -/// \details At Crypto++ 8.6 ElGamalKeys were changed to use DL_CryptoKeys_ElGamal -/// due to Issue 1069 and CVE-2021-40530. DL_CryptoKeys_ElGamal group parameters -/// use the subgroup order, and not an estimated work factor. -/// \sa Issue 876, -/// Issue 567, -/// Issue 1059 -/// \since Crypto++ 1.0 -struct ElGamalKeys -{ - /// \brief Implements DL_GroupParameters interface - typedef DL_CryptoKeys_ElGamal::GroupParameters GroupParameters; - /// \brief Implements DL_PrivateKey interface - typedef DL_PrivateKey_ElGamal PrivateKey; - /// \brief Implements DL_PublicKey interface - typedef DL_PublicKey_ElGamal PublicKey; -}; - -/// \brief ElGamal encryption scheme with non-standard padding -/// \details ElGamal provide the algorithm implementation ElGamal key -/// agreement and encryption schemes. -/// \details The ElGamal class [mistakenly] used the OID for DSA from about -/// Crypto++ 1.0 through Crypto++ 8.2. At Crypto++ 8.3 the OID was fixed -/// and now uses ElGamal encryption, which is 1.3.14.7.2.1.1. -/// If you need to Load an ElGamal key with the wrong OID then -/// see ElGamal on -/// the Crypto++ wiki. -/// \sa Issue 876, -/// Issue 567 -/// \since Crypto++ 1.0 -struct ElGamal -{ - typedef DL_CryptoSchemeOptions SchemeOptions; - typedef SchemeOptions::PrivateKey PrivateKey; - typedef SchemeOptions::PublicKey PublicKey; - - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "ElgamalEnc/Crypto++Padding";} - - /// \brief Implements DL_GroupParameters interface - typedef SchemeOptions::GroupParameters GroupParameters; - /// \brief Implements PK_Encryptor interface - typedef PK_FinalTemplate, SchemeOptions, SchemeOptions::PublicKey> > Encryptor; - /// \brief Implements PK_Encryptor interface - typedef PK_FinalTemplate, SchemeOptions, SchemeOptions::PrivateKey> > Decryptor; -}; - -typedef ElGamal::Encryptor ElGamalEncryptor; -typedef ElGamal::Decryptor ElGamalDecryptor; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/emsa2.h b/third_party/cryptoppwin/include/cryptopp/emsa2.h deleted file mode 100644 index d39e73db..00000000 --- a/third_party/cryptoppwin/include/cryptopp/emsa2.h +++ /dev/null @@ -1,101 +0,0 @@ -// emsa2.h - originally written and placed in the public domain by Wei Dai - -/// \file emsa2.h -/// \brief Classes and functions for various padding schemes used in public key algorithms - -#ifndef CRYPTOPP_EMSA2_H -#define CRYPTOPP_EMSA2_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "hashfwd.h" -#include "misc.h" - -#ifdef CRYPTOPP_IS_DLL -# include "sha.h" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief EMSA2 hash identifier -/// \tparam H HashTransformation derived class -/// \since Crypto++ 5.0 -template class EMSA2HashId -{ -public: - static const byte id; -}; - -/// \brief EMSA2 padding method -/// \tparam BASE Message encoding method -/// \since Crypto++ 5.0 -template -class EMSA2HashIdLookup : public BASE -{ -public: - struct HashIdentifierLookup - { - template struct HashIdentifierLookup2 - { - static HashIdentifier Lookup() - { - return HashIdentifier(&EMSA2HashId::id, 1); - } - }; - }; -}; - -// EMSA2HashId can be instantiated with the following classes. -// SHA1, SHA224, SHA256, SHA384, SHA512, RIPEMD128, RIPEMD160, Whirlpool - -#ifdef CRYPTOPP_IS_DLL -CRYPTOPP_DLL_TEMPLATE_CLASS EMSA2HashId; -CRYPTOPP_DLL_TEMPLATE_CLASS EMSA2HashId; -CRYPTOPP_DLL_TEMPLATE_CLASS EMSA2HashId; -CRYPTOPP_DLL_TEMPLATE_CLASS EMSA2HashId; -CRYPTOPP_DLL_TEMPLATE_CLASS EMSA2HashId; -#endif - -// https://github.com/weidai11/cryptopp/issues/300 and -// https://github.com/weidai11/cryptopp/issues/533 -#if defined(__clang__) -template<> const byte EMSA2HashId::id; -template<> const byte EMSA2HashId::id; -template<> const byte EMSA2HashId::id; -template<> const byte EMSA2HashId::id; -template<> const byte EMSA2HashId::id; -#endif - -/// \brief EMSA2 padding method -/// \since Crypto++ 5.0 -class CRYPTOPP_DLL EMSA2Pad : public EMSA2HashIdLookup -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "EMSA2";} - - size_t MinRepresentativeBitLength(size_t hashIdentifierLength, size_t digestLength) const - {CRYPTOPP_UNUSED(hashIdentifierLength); return 8*digestLength + 31;} - - void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; -}; - -// EMSA2, for use with RWSS and RSA_ISO -// Only the following hash functions are supported by this signature standard: -// \dontinclude emsa2.h -// \skip EMSA2HashId can be instantiated -// \until end of list - -/// \brief EMSA2/P1363 padding method -/// \details Use with RWSS and RSA_ISO -/// \since Crypto++ 5.0 -struct P1363_EMSA2 : public SignatureStandard -{ - typedef EMSA2Pad SignatureMessageEncodingMethod; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/eprecomp.h b/third_party/cryptoppwin/include/cryptopp/eprecomp.h deleted file mode 100644 index 7049d4bd..00000000 --- a/third_party/cryptoppwin/include/cryptopp/eprecomp.h +++ /dev/null @@ -1,162 +0,0 @@ -// eprecomp.h - originally written and placed in the public domain by Wei Dai - -/// \file eprecomp.h -/// \brief Classes for precomputation in a group - -#ifndef CRYPTOPP_EPRECOMP_H -#define CRYPTOPP_EPRECOMP_H - -#include "cryptlib.h" -#include "integer.h" -#include "algebra.h" -#include "stdcpp.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief DL_GroupPrecomputation interface -/// \tparam T Field element -template -class DL_GroupPrecomputation -{ -public: - typedef T Element; - - virtual ~DL_GroupPrecomputation() {} - - /// \brief Determines if elements needs conversion - /// \return true if the element needs conversion, false otherwise - /// \details NeedConversions determines if an element must convert between representations. - virtual bool NeedConversions() const {return false;} - - /// \brief Converts an element between representations - /// \param v element to convert - /// \return an element converted to an alternate representation for internal use - /// \details ConvertIn is used when an element must convert between representations. - virtual Element ConvertIn(const Element &v) const {return v;} - - /// \brief Converts an element between representations - /// \param v element to convert - /// \return an element converted from an alternate representation - virtual Element ConvertOut(const Element &v) const {return v;} - - /// \brief Retrieves AbstractGroup interface - /// \return GetGroup() returns the AbstractGroup interface - virtual const AbstractGroup & GetGroup() const =0; - - /// \brief Decodes element in DER format - /// \param bt BufferedTransformation object - /// \return element in the group - virtual Element BERDecodeElement(BufferedTransformation &bt) const =0; - - /// \brief Encodes element in DER format - /// \param bt BufferedTransformation object - /// \param P Element to encode - virtual void DEREncodeElement(BufferedTransformation &bt, const Element &P) const =0; -}; - -/// \brief DL_FixedBasePrecomputation interface -/// \tparam T Field element -template -class DL_FixedBasePrecomputation -{ -public: - typedef T Element; - - virtual ~DL_FixedBasePrecomputation() {} - - /// \brief Determines whether this object is initialized - /// \return true if this object is initialized, false otherwise - virtual bool IsInitialized() const =0; - - /// \brief Set the base element - /// \param group the group - /// \param base element in the group - virtual void SetBase(const DL_GroupPrecomputation &group, const Element &base) =0; - - /// \brief Get the base element - /// \param group the group - /// \return base element in the group - virtual const Element & GetBase(const DL_GroupPrecomputation &group) const =0; - - /// \brief Perform precomputation - /// \param group the group - /// \param maxExpBits used to calculate the exponent base - /// \param storage the suggested number of objects for the precompute table - /// \details The exact semantics of Precompute() varies, but it typically means calculate - /// a table of n objects that can be used later to speed up computation. - /// \details If a derived class does not override Precompute(), then the base class throws - /// NotImplemented. - /// \sa SupportsPrecomputation(), LoadPrecomputation(), SavePrecomputation() - virtual void Precompute(const DL_GroupPrecomputation &group, unsigned int maxExpBits, unsigned int storage) =0; - - /// \brief Retrieve previously saved precomputation - /// \param group the group - /// \param storedPrecomputation BufferedTransformation with the saved precomputation - /// \throw NotImplemented - /// \sa SupportsPrecomputation(), Precompute() - virtual void Load(const DL_GroupPrecomputation &group, BufferedTransformation &storedPrecomputation) =0; - - /// \brief Save precomputation for later use - /// \param group the group - /// \param storedPrecomputation BufferedTransformation to write the precomputation - /// \throw NotImplemented - /// \sa SupportsPrecomputation(), Precompute() - virtual void Save(const DL_GroupPrecomputation &group, BufferedTransformation &storedPrecomputation) const =0; - - /// \brief Exponentiates an element - /// \param group the group - /// \param exponent the exponent - /// \return the result of the exponentiation - virtual Element Exponentiate(const DL_GroupPrecomputation &group, const Integer &exponent) const =0; - - /// \brief Exponentiates an element - /// \param pc1 the first the group precomputation - /// \param exponent1 the first exponent - /// \param pc2 the second the group precomputation - /// \param exponent2 the first exponent2 - /// \return the public element raised to the exponent - /// \details CascadeExponentiateBaseAndPublicElement raises the public element to - /// the base element and precomputation. - virtual Element CascadeExponentiate(const DL_GroupPrecomputation &pc1, const Integer &exponent1, const DL_FixedBasePrecomputation &pc2, const Integer &exponent2) const =0; -}; - -/// \brief DL_FixedBasePrecomputation adapter class -/// \tparam T Field element -template -class DL_FixedBasePrecomputationImpl : public DL_FixedBasePrecomputation -{ -public: - typedef T Element; - - virtual ~DL_FixedBasePrecomputationImpl() {} - - DL_FixedBasePrecomputationImpl() : m_windowSize(0) {} - - // DL_FixedBasePrecomputation - bool IsInitialized() const - {return !m_bases.empty();} - void SetBase(const DL_GroupPrecomputation &group, const Element &base); - const Element & GetBase(const DL_GroupPrecomputation &group) const - {return group.NeedConversions() ? m_base : m_bases[0];} - void Precompute(const DL_GroupPrecomputation &group, unsigned int maxExpBits, unsigned int storage); - void Load(const DL_GroupPrecomputation &group, BufferedTransformation &storedPrecomputation); - void Save(const DL_GroupPrecomputation &group, BufferedTransformation &storedPrecomputation) const; - Element Exponentiate(const DL_GroupPrecomputation &group, const Integer &exponent) const; - Element CascadeExponentiate(const DL_GroupPrecomputation &pc1, const Integer &exponent1, const DL_FixedBasePrecomputation &pc2, const Integer &exponent2) const; - -private: - void PrepareCascade(const DL_GroupPrecomputation &group, std::vector > &eb, const Integer &exponent) const; - - Element m_base; - unsigned int m_windowSize; - Integer m_exponentBase; // what base to represent the exponent in - std::vector m_bases; // precalculated bases -}; - -NAMESPACE_END - -#ifdef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES -#include "eprecomp.cpp" -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/esign.h b/third_party/cryptoppwin/include/cryptopp/esign.h deleted file mode 100644 index 2c597c25..00000000 --- a/third_party/cryptoppwin/include/cryptopp/esign.h +++ /dev/null @@ -1,169 +0,0 @@ -// esign.h - originally written and placed in the public domain by Wei Dai - -/// \file esign.h -/// \brief Classes providing ESIGN signature schemes as defined in IEEE P1363a -/// \since Crypto++ 5.0 - -#ifndef CRYPTOPP_ESIGN_H -#define CRYPTOPP_ESIGN_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "integer.h" -#include "asn.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief ESIGN trapdoor function using the public key -/// \since Crypto++ 5.0 -class ESIGNFunction : public TrapdoorFunction, public ASN1CryptoMaterial -{ - typedef ESIGNFunction ThisClass; - -public: - - /// \brief Initialize a ESIGN public key with {n,e} - /// \param n the modulus - /// \param e the public exponent - void Initialize(const Integer &n, const Integer &e) - {m_n = n; m_e = e;} - - // PublicKey - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - // CryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // TrapdoorFunction - Integer ApplyFunction(const Integer &x) const; - Integer PreimageBound() const {return m_n;} - Integer ImageBound() const {return Integer::Power2(GetK());} - - // non-derived - const Integer & GetModulus() const {return m_n;} - const Integer & GetPublicExponent() const {return m_e;} - - void SetModulus(const Integer &n) {m_n = n;} - void SetPublicExponent(const Integer &e) {m_e = e;} - -protected: - // Covertiy finding on overflow. The library allows small values for research purposes. - unsigned int GetK() const {return SaturatingSubtract(m_n.BitCount()/3, 1U);} - - Integer m_n, m_e; -}; - -/// \brief ESIGN trapdoor function using the private key -/// \since Crypto++ 5.0 -class InvertibleESIGNFunction : public ESIGNFunction, public RandomizedTrapdoorFunctionInverse, public PrivateKey -{ - typedef InvertibleESIGNFunction ThisClass; - -public: - - /// \brief Initialize a ESIGN private key with {n,e,p,q} - /// \param n modulus - /// \param e public exponent - /// \param p first prime factor - /// \param q second prime factor - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const Integer &n, const Integer &e, const Integer &p, const Integer &q) - {m_n = n; m_e = e; m_p = p; m_q = q;} - - /// \brief Create a ESIGN private key - /// \param rng a RandomNumberGenerator derived class - /// \param modulusBits the size of the modulud, in bits - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits) - {GenerateRandomWithKeySize(rng, modulusBits);} - - // Squash Visual Studio C4250 warning - void Save(BufferedTransformation &bt) const - {BEREncode(bt);} - - // Squash Visual Studio C4250 warning - void Load(BufferedTransformation &bt) - {BERDecode(bt);} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - Integer CalculateRandomizedInverse(RandomNumberGenerator &rng, const Integer &x) const; - - // GeneratibleCryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - /*! parameters: (ModulusSize) */ - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg); - - const Integer& GetPrime1() const {return m_p;} - const Integer& GetPrime2() const {return m_q;} - - void SetPrime1(const Integer &p) {m_p = p;} - void SetPrime2(const Integer &q) {m_q = q;} - -protected: - Integer m_p, m_q; -}; - -/// \brief EMSA5 padding method -/// \tparam T Mask Generation Function -/// \since Crypto++ 5.0 -template -class EMSA5Pad : public PK_DeterministicSignatureMessageEncodingMethod -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "EMSA5";} - - void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const - { - CRYPTOPP_UNUSED(rng), CRYPTOPP_UNUSED(recoverableMessage), CRYPTOPP_UNUSED(recoverableMessageLength); - CRYPTOPP_UNUSED(messageEmpty), CRYPTOPP_UNUSED(hashIdentifier); - SecByteBlock digest(hash.DigestSize()); - hash.Final(digest); - size_t representativeByteLength = BitsToBytes(representativeBitLength); - T mgf; - mgf.GenerateAndMask(hash, representative, representativeByteLength, digest, digest.size(), false); - if (representativeBitLength % 8 != 0) - representative[0] = (byte)Crop(representative[0], representativeBitLength % 8); - } -}; - -/// \brief EMSA5 padding method, for use with ESIGN -/// \since Crypto++ 5.0 -struct P1363_EMSA5 : public SignatureStandard -{ - typedef EMSA5Pad SignatureMessageEncodingMethod; -}; - -/// \brief ESIGN keys -/// \since Crypto++ 5.0 -struct ESIGN_Keys -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "ESIGN";} - typedef ESIGNFunction PublicKey; - typedef InvertibleESIGNFunction PrivateKey; -}; - -/// \brief ESIGN signature scheme, IEEE P1363a -/// \tparam H HashTransformation derived class -/// \tparam STANDARD Signature encoding method -/// \since Crypto++ 5.0 -template -struct ESIGN : public TF_SS -{ -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/factory.h b/third_party/cryptoppwin/include/cryptopp/factory.h deleted file mode 100644 index 82dc5f58..00000000 --- a/third_party/cryptoppwin/include/cryptopp/factory.h +++ /dev/null @@ -1,179 +0,0 @@ -// factory.h - originally written and placed in the public domain by Wei Dai - -/// \file factory.h -/// \brief Classes and functions for registering and locating library objects - -#ifndef CRYPTOPP_OBJFACT_H -#define CRYPTOPP_OBJFACT_H - -#include "cryptlib.h" -#include "misc.h" -#include "stdcpp.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Object factory interface for registering objects -/// \tparam AbstractClass Base class interface of the object -template -class ObjectFactory -{ -public: - virtual ~ObjectFactory () {} - virtual AbstractClass * CreateObject() const =0; -}; - -/// \brief Object factory for registering objects -/// \tparam AbstractClass Base class interface of the object -/// \tparam ConcreteClass Class object -template -class DefaultObjectFactory : public ObjectFactory -{ -public: - AbstractClass * CreateObject() const - { - return new ConcreteClass; - } -}; - -/// \brief Object factory registry -/// \tparam AbstractClass Base class interface of the object -/// \tparam instance unique identifier -template -class ObjectFactoryRegistry -{ -public: - class FactoryNotFound : public Exception - { - public: - FactoryNotFound(const char *name) : Exception(OTHER_ERROR, std::string("ObjectFactoryRegistry: could not find factory for algorithm ") + name) {} - }; - - ~ObjectFactoryRegistry() - { - for (typename Map::iterator i = m_map.begin(); i != m_map.end(); ++i) - { - delete (ObjectFactory *)i->second; - i->second = NULLPTR; - } - } - - void RegisterFactory(const std::string &name, ObjectFactory *factory) - { - m_map[name] = factory; - } - - const ObjectFactory * GetFactory(const char *name) const - { - typename Map::const_iterator i = m_map.find(name); - return i == m_map.end() ? NULLPTR : (ObjectFactory *)i->second; - } - - AbstractClass *CreateObject(const char *name) const - { - const ObjectFactory *factory = GetFactory(name); - if (!factory) - throw FactoryNotFound(name); - return factory->CreateObject(); - } - - // Return a vector containing the factory names. This is easier than returning an iterator. - // from Andrew Pitonyak - std::vector GetFactoryNames() const - { - std::vector names; - typename Map::const_iterator iter; - for (iter = m_map.begin(); iter != m_map.end(); ++iter) - names.push_back(iter->first); - return names; - } - - CRYPTOPP_NOINLINE static ObjectFactoryRegistry & Registry(CRYPTOPP_NOINLINE_DOTDOTDOT); - -private: - // use void * instead of ObjectFactory * to save code size - typedef std::map Map; - Map m_map; -}; - -template -ObjectFactoryRegistry & ObjectFactoryRegistry::Registry(CRYPTOPP_NOINLINE_DOTDOTDOT) -{ - static ObjectFactoryRegistry s_registry; - return s_registry; -} - -/// \brief Object factory registry helper -/// \tparam AbstractClass Base class interface of the object -/// \tparam ConcreteClass Class object -/// \tparam instance unique identifier -template -struct RegisterDefaultFactoryFor -{ - RegisterDefaultFactoryFor(const char *name=NULLPTR) - { - // BCB2006 workaround - std::string n = name ? std::string(name) : std::string(ConcreteClass::StaticAlgorithmName()); - ObjectFactoryRegistry::Registry(). - RegisterFactory(n, new DefaultObjectFactory); - } -}; - -/// \fn RegisterAsymmetricCipherDefaultFactories -/// \brief Register asymmetric ciphers -/// \tparam SchemeClass interface of the object under a scheme -/// \details Schemes include asymmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// signature schemes (registers SchemeClass::Signer and SchemeClass::Verifier), -/// symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// authenticated symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), etc. -template -void RegisterAsymmetricCipherDefaultFactories(const char *name=NULLPTR) -{ - RegisterDefaultFactoryFor((const char *)name); - RegisterDefaultFactoryFor((const char *)name); -} - -/// \fn RegisterSignatureSchemeDefaultFactories -/// \brief Register signature schemes -/// \tparam SchemeClass interface of the object under a scheme -/// \details Schemes include asymmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// signature schemes (registers SchemeClass::Signer and SchemeClass::Verifier), -/// symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// authenticated symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), etc. -template -void RegisterSignatureSchemeDefaultFactories(const char *name=NULLPTR) -{ - RegisterDefaultFactoryFor((const char *)name); - RegisterDefaultFactoryFor((const char *)name); -} - -/// \fn RegisterSymmetricCipherDefaultFactories -/// \brief Register symmetric ciphers -/// \tparam SchemeClass interface of the object under a scheme -/// \details Schemes include asymmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// signature schemes (registers SchemeClass::Signer and SchemeClass::Verifier), -/// symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// authenticated symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), etc. -template -void RegisterSymmetricCipherDefaultFactories(const char *name=NULLPTR) -{ - RegisterDefaultFactoryFor((const char *)name); - RegisterDefaultFactoryFor((const char *)name); -} - -/// \fn RegisterAuthenticatedSymmetricCipherDefaultFactories -/// \brief Register authenticated symmetric ciphers -/// \tparam SchemeClass interface of the object under a scheme -/// \details Schemes include asymmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// signature schemes (registers SchemeClass::Signer and SchemeClass::Verifier), -/// symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), -/// authenticated symmetric ciphers (registers SchemeClass::Encryptor and SchemeClass::Decryptor), etc. -template -void RegisterAuthenticatedSymmetricCipherDefaultFactories(const char *name=NULLPTR) -{ - RegisterDefaultFactoryFor((const char *)name); - RegisterDefaultFactoryFor((const char *)name); -} - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/fhmqv.h b/third_party/cryptoppwin/include/cryptopp/fhmqv.h deleted file mode 100644 index 505d2861..00000000 --- a/third_party/cryptoppwin/include/cryptopp/fhmqv.h +++ /dev/null @@ -1,408 +0,0 @@ -// fhmqv.h - written and placed in the public domain by Jeffrey Walton, Ray Clayton and Uri Blumenthal -// Shamelessly based upon Wei Dai's MQV source files - -#ifndef CRYPTOPP_FHMQV_H -#define CRYPTOPP_FHMQV_H - -/// \file fhmqv.h -/// \brief Classes for Fully Hashed Menezes-Qu-Vanstone key agreement in GF(p) -/// \since Crypto++ 5.6.4 - -#include "gfpcrypt.h" -#include "algebra.h" -#include "sha.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Fully Hashed Menezes-Qu-Vanstone in GF(p) -/// \details This implementation follows Augustin P. Sarr and Philippe Elbaz–Vincent, and Jean–Claude Bajard's -/// A Secure and Efficient Authenticated Diffie-Hellman Protocol. -/// Note: this is FHMQV, Protocol 5, from page 11; and not FHMQV-C. -/// \sa MQV, HMQV, FHMQV, and AuthenticatedKeyAgreementDomain -/// \since Crypto++ 5.6.4 -template -class FHMQV_Domain : public AuthenticatedKeyAgreementDomain -{ -public: - typedef GROUP_PARAMETERS GroupParameters; - typedef typename GroupParameters::Element Element; - typedef FHMQV_Domain Domain; - - virtual ~FHMQV_Domain() {} - - /// \brief Construct a FHMQV domain - /// \param clientRole flag indicating initiator or recipient - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - FHMQV_Domain(bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) {} - - /// \brief Construct a FHMQV domain - /// \param params group parameters and options - /// \param clientRole flag indicating initiator or recipient - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - FHMQV_Domain(const GroupParameters ¶ms, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer), m_groupParameters(params) {} - - /// \brief Construct a FHMQV domain - /// \param bt BufferedTransformation with group parameters and options - /// \param clientRole flag indicating initiator or recipient - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - FHMQV_Domain(BufferedTransformation &bt, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.BERDecode(bt);} - - /// \brief Construct a FHMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1 is passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - FHMQV_Domain(T1 v1, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1);} - - /// \brief Construct a FHMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1 and v2 are passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - FHMQV_Domain(T1 v1, T2 v2, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1, v2);} - - /// \brief Construct a FHMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1, v2 and v3 are passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - FHMQV_Domain(T1 v1, T2 v2, T3 v3, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1, v2, v3);} - - /// \brief Construct a FHMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \tparam T4 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \param v4 third parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1, v2, v3 and v4 are passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - FHMQV_Domain(T1 v1, T2 v2, T3 v3, T4 v4, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1, v2, v3, v4);} - -public: - - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a const reference - const GroupParameters & GetGroupParameters() const {return m_groupParameters;} - - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a non-const reference - GroupParameters & AccessGroupParameters() {return m_groupParameters;} - - /// \brief Retrieves the crypto parameters for this domain - /// \return the crypto parameters for this domain as a non-const reference - CryptoParameters & AccessCryptoParameters() {return AccessAbstractGroupParameters();} - - /// \brief Provides the size of the agreed value - /// \return size of agreed value produced in this domain - /// \details The length is calculated using GetEncodedElementSize(false), - /// which means the element is encoded in a non-reversible format. A - /// non-reversible format means its a raw byte array, and it lacks presentation - /// format like an ASN.1 BIT_STRING or OCTET_STRING. - unsigned int AgreedValueLength() const - {return GetAbstractGroupParameters().GetEncodedElementSize(false);} - - /// \brief Provides the size of the static private key - /// \return size of static private keys in this domain - /// \details The length is calculated using the byte count of the subgroup order. - unsigned int StaticPrivateKeyLength() const - {return GetAbstractGroupParameters().GetSubgroupOrder().ByteCount();} - - /// \brief Provides the size of the static public key - /// \return size of static public keys in this domain - /// \details The length is calculated using GetEncodedElementSize(true), - /// which means the element is encoded in a reversible format. A reversible - /// format means it has a presentation format, and its an ANS.1 encoded element - /// or point. - unsigned int StaticPublicKeyLength() const - {return GetAbstractGroupParameters().GetEncodedElementSize(true);} - - /// \brief Generate static private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \details The private key is a random scalar used as an exponent in the range - /// [1,MaxExponent()]. - /// \pre COUNTOF(privateKey) == PrivateStaticKeyLength() - void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - { - Integer x(rng, Integer::One(), GetAbstractGroupParameters().GetMaxExponent()); - x.Encode(privateKey, StaticPrivateKeyLength()); - } - - /// \brief Generate a static public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \details The public key is an element or point on the curve, and its stored - /// in a revrsible format. A reversible format means it has a presentation - /// format, and its an ANS.1 encoded element or point. - /// \pre COUNTOF(publicKey) == PublicStaticKeyLength() - void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - CRYPTOPP_UNUSED(rng); - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(privateKey, StaticPrivateKeyLength()); - Element y = params.ExponentiateBase(x); - params.EncodeElement(true, y, publicKey); - } - - /// \brief Provides the size of the ephemeral private key - /// \return size of ephemeral private keys in this domain - /// \details An ephemeral private key is a private key and public key. - /// The serialized size is different than a static private key. - unsigned int EphemeralPrivateKeyLength() const {return StaticPrivateKeyLength() + StaticPublicKeyLength();} - - /// \brief Provides the size of the ephemeral public key - /// \return size of ephemeral public keys in this domain - /// \details An ephemeral public key is a public key. - /// The serialized size is the same as a static public key. - unsigned int EphemeralPublicKeyLength() const{return StaticPublicKeyLength();} - - /// \brief Generate ephemeral private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \pre COUNTOF(privateKey) == EphemeralPrivateKeyLength() - void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - { - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(rng, Integer::One(), params.GetMaxExponent()); - x.Encode(privateKey, StaticPrivateKeyLength()); - Element y = params.ExponentiateBase(x); - params.EncodeElement(true, y, privateKey+StaticPrivateKeyLength()); - } - - /// \brief Generate ephemeral public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \pre COUNTOF(publicKey) == EphemeralPublicKeyLength() - void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - CRYPTOPP_UNUSED(rng); - std::memcpy(publicKey, privateKey+StaticPrivateKeyLength(), EphemeralPublicKeyLength()); - } - - /// \brief Derive agreed value or shared secret - /// \param agreedValue the shared secret - /// \param staticPrivateKey your long term private key - /// \param ephemeralPrivateKey your ephemeral private key - /// \param staticOtherPublicKey couterparty's long term public key - /// \param ephemeralOtherPublicKey couterparty's ephemeral public key - /// \param validateStaticOtherPublicKey flag indicating validation - /// \return true upon success, false in case of failure - /// \details Agree() performs the authenticated key agreement. Agree() - /// derives a shared secret from your private keys and couterparty's - /// public keys. Each instance or run of the protocol should use a new - /// ephemeral key pair. - /// \details The other's ephemeral public key will always be validated at - /// Level 1 to ensure it is a point on the curve. - /// validateStaticOtherPublicKey determines how thoroughly other's - /// static public key is validated. If you have previously validated the - /// couterparty's static public key, then use - /// validateStaticOtherPublicKey=false to save time. - /// \pre COUNTOF(agreedValue) == AgreedValueLength() - /// \pre COUNTOF(staticPrivateKey) == StaticPrivateKeyLength() - /// \pre COUNTOF(ephemeralPrivateKey) == EphemeralPrivateKeyLength() - /// \pre COUNTOF(staticOtherPublicKey) == StaticPublicKeyLength() - /// \pre COUNTOF(ephemeralOtherPublicKey) == EphemeralPublicKeyLength() - bool Agree(byte *agreedValue, - const byte *staticPrivateKey, const byte *ephemeralPrivateKey, - const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, - bool validateStaticOtherPublicKey=true) const - { - const byte *XX = NULLPTR, *YY = NULLPTR, *AA = NULLPTR, *BB = NULLPTR; - size_t xxs = 0, yys = 0, aas = 0, bbs = 0; - - // Depending on the role, this will hold either A's or B's static - // (long term) public key. AA or BB will then point into tt. - SecByteBlock tt(StaticPublicKeyLength()); - - try - { - this->GetMaterial().DoQuickSanityCheck(); - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - - if(m_role == RoleServer) - { - Integer b(staticPrivateKey, StaticPrivateKeyLength()); - Element B = params.ExponentiateBase(b); - params.EncodeElement(true, B, tt); - - XX = ephemeralOtherPublicKey; - xxs = EphemeralPublicKeyLength(); - YY = ephemeralPrivateKey + StaticPrivateKeyLength(); - yys = EphemeralPublicKeyLength(); - AA = staticOtherPublicKey; - aas = StaticPublicKeyLength(); - BB = tt.BytePtr(); - bbs = tt.SizeInBytes(); - } - else - { - Integer a(staticPrivateKey, StaticPrivateKeyLength()); - Element A = params.ExponentiateBase(a); - params.EncodeElement(true, A, tt); - - XX = ephemeralPrivateKey + StaticPrivateKeyLength(); - xxs = EphemeralPublicKeyLength(); - YY = ephemeralOtherPublicKey; - yys = EphemeralPublicKeyLength(); - AA = tt.BytePtr(); - aas = tt.SizeInBytes(); - BB = staticOtherPublicKey; - bbs = StaticPublicKeyLength(); - } - - Element VV1 = params.DecodeElement(staticOtherPublicKey, validateStaticOtherPublicKey); - Element VV2 = params.DecodeElement(ephemeralOtherPublicKey, true); - - const Integer& q = params.GetSubgroupOrder(); - const unsigned int len /*bytes*/ = (((q.BitCount()+1)/2 +7)/8); - SecByteBlock dd(len), ee(len); - - Hash(NULLPTR, XX, xxs, YY, yys, AA, aas, BB, bbs, dd.BytePtr(), dd.SizeInBytes()); - Integer d(dd.BytePtr(), dd.SizeInBytes()); - - Hash(NULLPTR, YY, yys, XX, xxs, AA, aas, BB, bbs, ee.BytePtr(), ee.SizeInBytes()); - Integer e(ee.BytePtr(), ee.SizeInBytes()); - - Element sigma; - if(m_role == RoleServer) - { - Integer y(ephemeralPrivateKey, StaticPrivateKeyLength()); - Integer b(staticPrivateKey, StaticPrivateKeyLength()); - Integer s_B = (y + e * b) % q; - - Element A = params.DecodeElement(AA, false); - Element X = params.DecodeElement(XX, false); - - Element t1 = params.ExponentiateElement(A, d); - Element t2 = m_groupParameters.MultiplyElements(X, t1); - - sigma = params.ExponentiateElement(t2, s_B); - } - else - { - Integer x(ephemeralPrivateKey, StaticPrivateKeyLength()); - Integer a(staticPrivateKey, StaticPrivateKeyLength()); - Integer s_A = (x + d * a) % q; - - Element B = params.DecodeElement(BB, false); - Element Y = params.DecodeElement(YY, false); - - Element t1 = params.ExponentiateElement(B, e); - Element t2 = m_groupParameters.MultiplyElements(Y, t1); - - sigma = params.ExponentiateElement(t2, s_A); - } - - Hash(&sigma, XX, xxs, YY, yys, AA, aas, BB, bbs, agreedValue, AgreedValueLength()); - } - catch (DL_BadElement &) - { - CRYPTOPP_ASSERT(0); - return false; - } - return true; - } - -protected: - - inline void Hash(const Element* sigma, - const byte* e1, size_t e1len, const byte* e2, size_t e2len, - const byte* s1, size_t s1len, const byte* s2, size_t s2len, - byte* digest, size_t dlen) const - { - HASH hash; - size_t idx = 0, req = dlen; - size_t blk = STDMIN(dlen, (size_t)HASH::DIGESTSIZE); - - if(sigma) - { - //Integer x = GetAbstractGroupParameters().ConvertElementToInteger(*sigma); - //SecByteBlock sbb(x.MinEncodedSize()); - //x.Encode(sbb.BytePtr(), sbb.SizeInBytes()); - SecByteBlock sbb(GetAbstractGroupParameters().GetEncodedElementSize(false)); - GetAbstractGroupParameters().EncodeElement(false, *sigma, sbb); - hash.Update(sbb.BytePtr(), sbb.SizeInBytes()); - } - - hash.Update(e1, e1len); - hash.Update(e2, e2len); - hash.Update(s1, s1len); - hash.Update(s2, s2len); - - hash.TruncatedFinal(digest, blk); - req -= blk; - - // All this to catch tail bytes for large curves and small hashes - while(req != 0) - { - hash.Update(&digest[idx], (size_t)HASH::DIGESTSIZE); - - idx += (size_t)HASH::DIGESTSIZE; - blk = STDMIN(req, (size_t)HASH::DIGESTSIZE); - hash.TruncatedFinal(&digest[idx], blk); - - req -= blk; - } - } - -private: - - // The paper uses Initiator and Recipient - make it classical. - enum KeyAgreementRole { RoleServer = 1, RoleClient }; - - DL_GroupParameters & AccessAbstractGroupParameters() {return m_groupParameters;} - const DL_GroupParameters & GetAbstractGroupParameters() const{return m_groupParameters;} - - GroupParameters m_groupParameters; - KeyAgreementRole m_role; -}; - -/// \brief Fully Hashed Menezes-Qu-Vanstone in GF(p) -/// \details This implementation follows Augustin P. Sarr and Philippe Elbaz–Vincent, and Jean–Claude Bajard's -/// A Secure and Efficient Authenticated Diffie-Hellman Protocol. -/// Note: this is FHMQV, Protocol 5, from page 11; and not FHMQV-C. -/// \sa FHMQV, MQV_Domain, FHMQV_Domain, AuthenticatedKeyAgreementDomain -/// \since Crypto++ 5.6.4 -typedef FHMQV_Domain FHMQV; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/files.h b/third_party/cryptoppwin/include/cryptopp/files.h deleted file mode 100644 index c09da5a5..00000000 --- a/third_party/cryptoppwin/include/cryptopp/files.h +++ /dev/null @@ -1,181 +0,0 @@ -// files.h - originally written and placed in the public domain by Wei Dai - -/// \file files.h -/// \brief Classes providing file-based library services -/// \since Crypto++ 1.0 - -#ifndef CRYPTOPP_FILES_H -#define CRYPTOPP_FILES_H - -#include "cryptlib.h" -#include "filters.h" -#include "argnames.h" -#include "smartptr.h" - -#include -#include - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Implementation of Store interface -/// \details file-based implementation of Store interface -class CRYPTOPP_DLL FileStore : public Store, private FilterPutSpaceHelper, public NotCopyable -{ -public: - /// \brief Exception thrown when file-based error is encountered - class Err : public Exception - { - public: - Err(const std::string &s) : Exception(IO_ERROR, s) {} - }; - /// \brief Exception thrown when file-based open error is encountered - class OpenErr : public Err {public: OpenErr(const std::string &filename) : Err("FileStore: error opening file for reading: " + filename) {}}; - /// \brief Exception thrown when file-based read error is encountered - class ReadErr : public Err {public: ReadErr() : Err("FileStore: error reading file") {}}; - - /// \brief Construct a FileStore - FileStore() : m_stream(NULLPTR), m_space(NULLPTR), m_len(0), m_waiting(0) {} - - /// \brief Construct a FileStore - /// \param in an existing stream - FileStore(std::istream &in) : m_stream(NULLPTR), m_space(NULLPTR), m_len(0), m_waiting(0) - {StoreInitialize(MakeParameters(Name::InputStreamPointer(), &in));} - - /// \brief Construct a FileStore - /// \param filename the narrow name of the file to open - FileStore(const char *filename) : m_stream(NULLPTR), m_space(NULLPTR), m_len(0), m_waiting(0) - {StoreInitialize(MakeParameters(Name::InputFileName(), filename ? filename : ""));} - -#if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) || (CRYPTOPP_MSC_VERSION >= 1400) - /// \brief Construct a FileStore - /// \param filename the Unicode name of the file to open - /// \details On non-Windows OS, this function assumes that setlocale() has been called. - FileStore(const wchar_t *filename) - {StoreInitialize(MakeParameters(Name::InputFileNameWide(), filename));} -#endif - - /// \brief Retrieves the internal stream - /// \return the internal stream pointer - std::istream* GetStream() {return m_stream;} - - /// \brief Retrieves the internal stream - /// \return the internal stream pointer - const std::istream* GetStream() const {return m_stream;} - - /// \brief Provides the number of bytes ready for retrieval - /// \return the number of bytes ready for retrieval - /// \details All retrieval functions return the actual number of bytes retrieved, which is - /// the lesser of the request number and MaxRetrievable() - lword MaxRetrievable() const; - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - lword Skip(lword skipMax=ULONG_MAX); - -private: - void StoreInitialize(const NameValuePairs ¶meters); - - member_ptr m_file; - std::istream *m_stream; - byte *m_space; - size_t m_len; - bool m_waiting; -}; - -/// \brief Implementation of Store interface -/// \details file-based implementation of Store interface -class CRYPTOPP_DLL FileSource : public SourceTemplate -{ -public: - typedef FileStore::Err Err; - typedef FileStore::OpenErr OpenErr; - typedef FileStore::ReadErr ReadErr; - - /// \brief Construct a FileSource - FileSource(BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {} - - /// \brief Construct a FileSource - /// \param in an existing stream - /// \param pumpAll flag indicating if source data should be pumped to its attached transformation - /// \param attachment an optional attached transformation - FileSource(std::istream &in, bool pumpAll, BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {SourceInitialize(pumpAll, MakeParameters(Name::InputStreamPointer(), &in));} - - /// \brief Construct a FileSource - /// \param filename the narrow name of the file to open - /// \param pumpAll flag indicating if source data should be pumped to its attached transformation - /// \param attachment an optional attached transformation - /// \param binary flag indicating if the file is binary - FileSource(const char *filename, bool pumpAll, BufferedTransformation *attachment = NULLPTR, bool binary=true) - : SourceTemplate(attachment) {SourceInitialize(pumpAll, MakeParameters(Name::InputFileName(), filename)(Name::InputBinaryMode(), binary));} - -#if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) || (CRYPTOPP_MSC_VERSION >= 1400) - /// \brief Construct a FileSource - /// \param filename the Unicode name of the file to open - /// \param pumpAll flag indicating if source data should be pumped to its attached transformation - /// \param attachment an optional attached transformation - /// \param binary flag indicating if the file is binary - /// \details On non-Windows OS, this function assumes that setlocale() has been called. - FileSource(const wchar_t *filename, bool pumpAll, BufferedTransformation *attachment = NULLPTR, bool binary=true) - : SourceTemplate(attachment) {SourceInitialize(pumpAll, MakeParameters(Name::InputFileNameWide(), filename)(Name::InputBinaryMode(), binary));} -#endif - - /// \brief Retrieves the internal stream - /// \return the internal stream pointer - std::istream* GetStream() {return m_store.GetStream();} -}; - -/// \brief Implementation of Store interface -/// \details file-based implementation of Sink interface -class CRYPTOPP_DLL FileSink : public Sink, public NotCopyable -{ -public: - /// \brief Exception thrown when file-based error is encountered - class Err : public Exception - { - public: - Err(const std::string &s) : Exception(IO_ERROR, s) {} - }; - /// \brief Exception thrown when file-based open error is encountered - class OpenErr : public Err {public: OpenErr(const std::string &filename) : Err("FileSink: error opening file for writing: " + filename) {}}; - /// \brief Exception thrown when file-based write error is encountered - class WriteErr : public Err {public: WriteErr() : Err("FileSink: error writing file") {}}; - - /// \brief Construct a FileSink - FileSink() : m_stream(NULLPTR) {} - - /// \brief Construct a FileSink - /// \param out an existing stream - FileSink(std::ostream &out) - {IsolatedInitialize(MakeParameters(Name::OutputStreamPointer(), &out));} - - /// \brief Construct a FileSink - /// \param filename the narrow name of the file to open - /// \param binary flag indicating if the file is binary - FileSink(const char *filename, bool binary=true) - {IsolatedInitialize(MakeParameters(Name::OutputFileName(), filename)(Name::OutputBinaryMode(), binary));} - -#if defined(CRYPTOPP_UNIX_AVAILABLE) || (CRYPTOPP_MSC_VERSION >= 1400) - /// \brief Construct a FileSink - /// \param filename the Unicode name of the file to open - /// \details On non-Windows OS, this function assumes that setlocale() has been called. - FileSink(const wchar_t *filename, bool binary=true) - {IsolatedInitialize(MakeParameters(Name::OutputFileNameWide(), filename)(Name::OutputBinaryMode(), binary));} -#endif - - /// \brief Retrieves the internal stream - /// \return the internal stream pointer - std::ostream* GetStream() {return m_stream;} - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - bool IsolatedFlush(bool hardFlush, bool blocking); - -private: - member_ptr m_file; - std::ostream *m_stream; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/filters.h b/third_party/cryptoppwin/include/cryptopp/filters.h deleted file mode 100644 index 0de46c41..00000000 --- a/third_party/cryptoppwin/include/cryptopp/filters.h +++ /dev/null @@ -1,1529 +0,0 @@ -// filters.h - originally written and placed in the public domain by Wei Dai - -/// \file filters.h -/// \brief Implementation of BufferedTransformation's attachment interface. - -#ifndef CRYPTOPP_FILTERS_H -#define CRYPTOPP_FILTERS_H - -#include "config.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4127 4189 4231 4275 4514) -#endif - -#include "cryptlib.h" -#include "simple.h" -#include "secblock.h" -#include "misc.h" -#include "smartptr.h" -#include "queue.h" -#include "algparam.h" -#include "stdcpp.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Implementation of BufferedTransformation's attachment interface -/// \details Filter is a cornerstone of the Pipeline trinity. Data flows from -/// Sources, through Filters, and then terminates in Sinks. The difference -/// between a Source and Filter is a Source \a pumps data, while a Filter does -/// not. The difference between a Filter and a Sink is a Filter allows an -/// attached transformation, while a Sink does not. -/// \details See the discussion of BufferedTransformation in cryptlib.h for -/// more details. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Filter : public BufferedTransformation, public NotCopyable -{ -public: - virtual ~Filter() {} - - /// \name ATTACHMENT - //@{ - - /// \brief Construct a Filter - /// \param attachment an optional attached transformation - /// \details attachment can be NULL. - Filter(BufferedTransformation *attachment = NULLPTR); - - /// \brief Determine if attachable - /// \return true if the object allows attached transformations, false otherwise. - /// \note Source and Filter offer attached transformations; while Sink does not. - bool Attachable() {return true;} - - /// \brief Retrieve attached transformation - /// \return pointer to a BufferedTransformation if there is an attached transformation, NULL otherwise. - BufferedTransformation *AttachedTransformation(); - - /// \brief Retrieve attached transformation - /// \return pointer to a BufferedTransformation if there is an attached transformation, NULL otherwise. - const BufferedTransformation *AttachedTransformation() const; - - /// \brief Replace an attached transformation - /// \param newAttachment an optional attached transformation - /// \details newAttachment can be a single filter, a chain of filters or NULL. - /// Pass NULL to remove an existing BufferedTransformation or chain of filters - void Detach(BufferedTransformation *newAttachment = NULLPTR); - - //@} - - /// \name RETRIEVAL OF ONE MESSAGE - //@{ - - // BufferedTransformation in cryptlib.h - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - - //@} - - /// \name SIGNALS - //@{ - - // BufferedTransformation in cryptlib.h - void Initialize(const NameValuePairs ¶meters=g_nullNameValuePairs, int propagation=-1); - bool Flush(bool hardFlush, int propagation=-1, bool blocking=true); - bool MessageSeriesEnd(int propagation=-1, bool blocking=true); - - //@} - -protected: - virtual BufferedTransformation * NewDefaultAttachment() const; - void Insert(Filter *nextFilter); // insert filter after this one - - virtual bool ShouldPropagateMessageEnd() const {return true;} - virtual bool ShouldPropagateMessageSeriesEnd() const {return true;} - - void PropagateInitialize(const NameValuePairs ¶meters, int propagation); - - /// \brief Forward processed data on to attached transformation - /// \param outputSite unknown, system crash between keyboard and chair... - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one - /// \param blocking specifies whether the object should block when processing input - /// \param channel the channel to process the data - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - size_t Output(int outputSite, const byte *inString, size_t length, int messageEnd, bool blocking, const std::string &channel=DEFAULT_CHANNEL); - - /// \brief Output multiple bytes that may be modified by callee. - /// \param outputSite unknown, system crash between keyboard and chair... - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one - /// \param blocking specifies whether the object should block when processing input - /// \param channel the channel to process the data - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - size_t OutputModifiable(int outputSite, byte *inString, size_t length, int messageEnd, bool blocking, const std::string &channel=DEFAULT_CHANNEL); - - /// \brief Signals the end of messages to the object - /// \param outputSite unknown, system crash between keyboard and chair... - /// \param propagation the number of attached transformations the MessageEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \param channel the channel to process the data - /// \return true is the MessageEnd signal was successful, false otherwise. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - bool OutputMessageEnd(int outputSite, int propagation, bool blocking, const std::string &channel=DEFAULT_CHANNEL); - - /// \brief Flush buffered input and/or output, with signal propagation - /// \param outputSite unknown, system crash between keyboard and chair... - /// \param hardFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the Flush() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \param channel the channel to process the data - /// \return true is the Flush signal was successful, false otherwise. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note Hard flushes must be used with care. It means try to process and output everything, even if - /// there may not be enough data to complete the action. For example, hard flushing a HexDecoder - /// would cause an error if you do it after inputing an odd number of hex encoded characters. - /// \note For some types of filters, like ZlibDecompressor, hard flushes can only - /// be done at "synchronization points". These synchronization points are positions in the data - /// stream that are created by hard flushes on the corresponding reverse filters, in this - /// example ZlibCompressor. This is useful when zlib compressed data is moved across a - /// network in packets and compression state is preserved across packets, as in the SSH2 protocol. - bool OutputFlush(int outputSite, bool hardFlush, int propagation, bool blocking, const std::string &channel=DEFAULT_CHANNEL); - - /// \brief Marks the end of a series of messages, with signal propagation - /// \param outputSite unknown, system crash between keyboard and chair... - /// \param propagation the number of attached transformations the MessageSeriesEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \param channel the channel to process the data - /// \return true is the MessageEnd signal was successful, false otherwise. - /// \details Each object that receives the signal will perform its processing, decrement - /// propagation, and then pass the signal on to attached transformations if the value is not 0. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note There should be a MessageEnd() immediately before MessageSeriesEnd(). - bool OutputMessageSeriesEnd(int outputSite, int propagation, bool blocking, const std::string &channel=DEFAULT_CHANNEL); - -private: - member_ptr m_attachment; - -protected: - size_t m_inputPosition; - int m_continueAt; -}; - -/// \brief Create a working space in a BufferedTransformation -struct CRYPTOPP_DLL FilterPutSpaceHelper -{ - virtual ~FilterPutSpaceHelper() {} - - /// \brief Create a working space in a BufferedTransformation - /// \param target BufferedTransformation for the working space - /// \param channel channel for the working space - /// \param minSize minimum size of the allocation, in bytes - /// \param desiredSize preferred size of the allocation, in bytes - /// \param bufferSize actual size of the allocation, in bytes - /// \pre desiredSize >= minSize and bufferSize >= minSize. - /// \details bufferSize is an IN and OUT parameter. If HelpCreatePutSpace() returns a non-NULL value, then - /// bufferSize is valid and provides the size of the working space created for the caller. - /// \details Internally, HelpCreatePutSpace() calls \ref BufferedTransformation::ChannelCreatePutSpace - /// "ChannelCreatePutSpace()" using desiredSize. If the target returns desiredSize with a size less - /// than minSize (i.e., the request could not be fulfilled), then an internal SecByteBlock - /// called m_tempSpace is resized and used for the caller. - byte *HelpCreatePutSpace(BufferedTransformation &target, const std::string &channel, size_t minSize, size_t desiredSize, size_t &bufferSize) - { - CRYPTOPP_ASSERT(desiredSize >= minSize && bufferSize >= minSize); - if (m_tempSpace.size() < minSize) - { - byte *result = target.ChannelCreatePutSpace(channel, desiredSize); - if (desiredSize >= minSize) - { - bufferSize = desiredSize; - return result; - } - m_tempSpace.New(bufferSize); - } - - bufferSize = m_tempSpace.size(); - return m_tempSpace.begin(); - } - - /// \brief Create a working space in a BufferedTransformation - /// \param target the BufferedTransformation for the working space - /// \param channel channel for the working space - /// \param minSize minimum size of the allocation, in bytes - /// \return pointer to the created space - /// \details Internally, the overload calls HelpCreatePutSpace() using minSize for missing arguments. - /// \details The filter will delete the space. The caller does not need to delete the space. - byte *HelpCreatePutSpace(BufferedTransformation &target, const std::string &channel, size_t minSize) - {return HelpCreatePutSpace(target, channel, minSize, minSize, minSize);} - - /// \brief Create a working space in a BufferedTransformation - /// \param target the BufferedTransformation for the working space - /// \param channel channel for the working space - /// \param minSize minimum size of the allocation, in bytes - /// \param bufferSize the actual size of the allocation, in bytes - /// \details Internally, the overload calls HelpCreatePutSpace() using minSize for missing arguments. - /// \details The filter will delete the space. The caller does not need to delete the space. - byte *HelpCreatePutSpace(BufferedTransformation &target, const std::string &channel, size_t minSize, size_t bufferSize) - {return HelpCreatePutSpace(target, channel, minSize, minSize, bufferSize);} - - /// \brief Temporary working space - SecByteBlock m_tempSpace; -}; - -/// \brief Measure how many bytes and messages pass through the filter -/// \details measure how many bytes and messages pass through the filter. The filter also serves as valve by -/// maintaining a list of ranges to skip during processing. -class CRYPTOPP_DLL MeterFilter : public Bufferless -{ -public: - virtual ~MeterFilter() {} - - /// \brief Construct a MeterFilter - /// \param attachment an optional attached transformation - /// \param transparent flag indicating if the filter should function transparently - /// \details attachment can be NULL. The filter is transparent by default. If the filter is - /// transparent, then PutMaybeModifiable() does not process a request and always returns 0. - MeterFilter(BufferedTransformation *attachment=NULLPTR, bool transparent=true) - : m_transparent(transparent), m_currentMessageBytes(0), m_totalBytes(0) - , m_currentSeriesMessages(0), m_totalMessages(0), m_totalMessageSeries(0) - , m_begin(NULLPTR), m_length(0) {Detach(attachment); ResetMeter();} - - /// \brief Set or change the transparent mode of this object - /// \param transparent the new transparent mode - void SetTransparent(bool transparent) {m_transparent = transparent;} - - /// \brief Adds a range to skip during processing - /// \param message the message to apply the range - /// \param position the 0-based index in the current stream - /// \param size the length of the range - /// \param sortNow flag indicating whether the range should be sorted - /// \details Internally, MeterFilter maitains a deque of ranges to skip. As messages are processed, - /// ranges of bytes are skipped according to the list of ranges. - void AddRangeToSkip(unsigned int message, lword position, lword size, bool sortNow = true); - - /// \brief Resets the meter - /// \details ResetMeter() reinitializes the meter by setting counters to 0 and removing previous - /// skip ranges. - void ResetMeter(); - - // BufferedTransformation in cryptlib.h - void IsolatedInitialize(const NameValuePairs ¶meters) - {CRYPTOPP_UNUSED(parameters); ResetMeter();} - - /// \brief Number of bytes in the current message - /// \return the number of bytes in the current message - lword GetCurrentMessageBytes() const {return m_currentMessageBytes;} - - /// \brief Number of bytes processed by the filter - /// \return the number of bytes processed by the filter - lword GetTotalBytes() const {return m_totalBytes;} - - /// \brief Message number in the series - /// \return the message number in the series - unsigned int GetCurrentSeriesMessages() const {return m_currentSeriesMessages;} - - /// \brief Number of messages in the message series - /// \return the number of messages in the message series - unsigned int GetTotalMessages() const {return m_totalMessages;} - - /// \brief Number of messages processed by the filter - /// \return the number of messages processed by the filter - unsigned int GetTotalMessageSeries() const {return m_totalMessageSeries;} - - // BufferedTransformation in cryptlib.h - byte * CreatePutSpace(size_t &size) {return AttachedTransformation()->CreatePutSpace(size);} - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - size_t PutModifiable2(byte *inString, size_t length, int messageEnd, bool blocking); - bool IsolatedMessageSeriesEnd(bool blocking); - -private: - size_t PutMaybeModifiable(byte *inString, size_t length, int messageEnd, bool blocking, bool modifiable); - bool ShouldPropagateMessageEnd() const {return m_transparent;} - bool ShouldPropagateMessageSeriesEnd() const {return m_transparent;} - - struct MessageRange - { - inline bool operator<(const MessageRange &b) const // BCB2006 workaround: this has to be a member function - {return message < b.message || (message == b.message && position < b.position);} - unsigned int message; lword position; lword size; - }; - - bool m_transparent; - lword m_currentMessageBytes, m_totalBytes; - unsigned int m_currentSeriesMessages, m_totalMessages, m_totalMessageSeries; - std::deque m_rangesToSkip; - byte *m_begin; - size_t m_length; -}; - -/// \brief A transparent MeterFilter -/// \sa MeterFilter, OpaqueFilter -class CRYPTOPP_DLL TransparentFilter : public MeterFilter -{ -public: - /// \brief Construct a TransparentFilter - /// \param attachment an optional attached transformation - TransparentFilter(BufferedTransformation *attachment=NULLPTR) : MeterFilter(attachment, true) {} -}; - -/// \brief A non-transparent MeterFilter -/// \sa MeterFilter, TransparentFilter -class CRYPTOPP_DLL OpaqueFilter : public MeterFilter -{ -public: - /// \brief Construct an OpaqueFilter - /// \param attachment an optional attached transformation - OpaqueFilter(BufferedTransformation *attachment=NULLPTR) : MeterFilter(attachment, false) {} -}; - -/// \brief Divides an input stream into discrete blocks -/// \details FilterWithBufferedInput divides the input stream into a first block, a number of -/// middle blocks, and a last block. First and last blocks are optional, and middle blocks may -/// be a stream instead (i.e. blockSize == 1). -/// \sa AuthenticatedEncryptionFilter, AuthenticatedDecryptionFilter, HashVerificationFilter, -/// SignatureVerificationFilter, StreamTransformationFilter -class CRYPTOPP_DLL FilterWithBufferedInput : public Filter -{ -public: - virtual ~FilterWithBufferedInput() {} - - /// \brief Construct a FilterWithBufferedInput with an attached transformation - /// \param attachment an attached transformation - FilterWithBufferedInput(BufferedTransformation *attachment); - - /// \brief Construct a FilterWithBufferedInput with an attached transformation - /// \param firstSize the size of the first block - /// \param blockSize the size of middle blocks - /// \param lastSize the size of the last block - /// \param attachment an attached transformation - /// \details firstSize and lastSize may be 0. blockSize must be at least 1. - FilterWithBufferedInput(size_t firstSize, size_t blockSize, size_t lastSize, BufferedTransformation *attachment); - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - { - return PutMaybeModifiable(const_cast(inString), length, messageEnd, blocking, false); - } - - size_t PutModifiable2(byte *inString, size_t length, int messageEnd, bool blocking) - { - return PutMaybeModifiable(inString, length, messageEnd, blocking, true); - } - - /// \brief Flushes data buffered by this object, without signal propagation - /// \param hardFlush indicates whether all data should be flushed - /// \param blocking specifies whether the object should block when processing input - /// \return true if the Flush was successful, false otherwise - /// \details IsolatedFlush() calls ForceNextPut() if hardFlush is true - /// \note hardFlush must be used with care - bool IsolatedFlush(bool hardFlush, bool blocking); - - /// \brief Flushes data buffered by this object - /// \details The input buffer may contain more than blockSize bytes if lastSize != 0. - /// ForceNextPut() forces a call to NextPut() if this is the case. - void ForceNextPut(); - -protected: - virtual bool DidFirstPut() const {return m_firstInputDone;} - virtual size_t GetFirstPutSize() const {return m_firstSize;} - virtual size_t GetBlockPutSize() const {return m_blockSize;} - virtual size_t GetLastPutSize() const {return m_lastSize;} - - virtual void InitializeDerivedAndReturnNewSizes(const NameValuePairs ¶meters, size_t &firstSize, size_t &blockSize, size_t &lastSize) - {CRYPTOPP_UNUSED(parameters); CRYPTOPP_UNUSED(firstSize); CRYPTOPP_UNUSED(blockSize); CRYPTOPP_UNUSED(lastSize); InitializeDerived(parameters);} - virtual void InitializeDerived(const NameValuePairs ¶meters) - {CRYPTOPP_UNUSED(parameters);} - // FirstPut() is called if (firstSize != 0 and totalLength >= firstSize) - // or (firstSize == 0 and (totalLength > 0 or a MessageEnd() is received)). - // inString is m_firstSize in length. - virtual void FirstPut(const byte *inString) =0; - // NextPut() is called if totalLength >= firstSize+blockSize+lastSize - virtual void NextPutSingle(const byte *inString) - {CRYPTOPP_UNUSED(inString); CRYPTOPP_ASSERT(false);} - // Same as NextPut() except length can be a multiple of blockSize - // Either NextPut() or NextPutMultiple() must be overridden - virtual void NextPutMultiple(const byte *inString, size_t length); - // Same as NextPutMultiple(), but inString can be modified - virtual void NextPutModifiable(byte *inString, size_t length) - {NextPutMultiple(inString, length);} - /// \brief Input the last block of data - /// \param inString the input byte buffer - /// \param length the size of the input buffer, in bytes - /// \details LastPut() processes the last block of data and signals attached filters to do the same. - /// LastPut() is always called. The pseudo algorithm for the logic is: - ///
-	///     if totalLength < firstSize then length == totalLength
-	///     else if totalLength <= firstSize+lastSize then length == totalLength-firstSize
-	///     else lastSize <= length < lastSize+blockSize
-	/// 
- virtual void LastPut(const byte *inString, size_t length) =0; - virtual void FlushDerived() {} - -protected: - size_t PutMaybeModifiable(byte *begin, size_t length, int messageEnd, bool blocking, bool modifiable); - void NextPutMaybeModifiable(byte *inString, size_t length, bool modifiable) - { - if (modifiable) NextPutModifiable(inString, length); - else NextPutMultiple(inString, length); - } - - // This function should no longer be used, put this here to cause a compiler error - // if someone tries to override NextPut(). - virtual int NextPut(const byte *inString, size_t length) - {CRYPTOPP_UNUSED(inString); CRYPTOPP_UNUSED(length); CRYPTOPP_ASSERT(false); return 0;} - - class BlockQueue - { - public: - void ResetQueue(size_t blockSize, size_t maxBlocks); - byte *GetBlock(); - byte *GetContigousBlocks(size_t &numberOfBytes); - size_t GetAll(byte *outString); - void Put(const byte *inString, size_t length); - size_t CurrentSize() const {return m_size;} - size_t MaxSize() const {return m_buffer.size();} - - private: - SecByteBlock m_buffer; - size_t m_blockSize, m_maxBlocks, m_size; - byte *m_begin; - }; - - size_t m_firstSize, m_blockSize, m_lastSize; - bool m_firstInputDone; - BlockQueue m_queue; -}; - -/// \brief A filter that buffers input using a ByteQueue -/// \details FilterWithInputQueue will buffer input using a ByteQueue. When the filter receives -/// a \ref BufferedTransformation::MessageEnd() "MessageEnd()" signal it will pass the data -/// on to its attached transformation. -class CRYPTOPP_DLL FilterWithInputQueue : public Filter -{ -public: - virtual ~FilterWithInputQueue() {} - - /// \brief Construct a FilterWithInputQueue - /// \param attachment an optional attached transformation - FilterWithInputQueue(BufferedTransformation *attachment=NULLPTR) : Filter(attachment) {} - - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - { - if (!blocking) - throw BlockingInputOnly("FilterWithInputQueue"); - - m_inQueue.Put(inString, length); - if (messageEnd) - { - IsolatedMessageEnd(blocking); - Output(0, NULLPTR, 0, messageEnd, blocking); - } - return 0; - } - -protected: - virtual bool IsolatedMessageEnd(bool blocking) =0; - void IsolatedInitialize(const NameValuePairs ¶meters) - {CRYPTOPP_UNUSED(parameters); m_inQueue.Clear();} - - ByteQueue m_inQueue; -}; - -/// \struct BlockPaddingSchemeDef -/// \brief Padding schemes used for block ciphers -/// \since Crypto++ 5.0 -struct BlockPaddingSchemeDef -{ - /// \enum BlockPaddingScheme - /// \brief Padding schemes used for block ciphers. - /// \details DEFAULT_PADDING means PKCS_PADDING if cipher.MandatoryBlockSize() > 1 && - /// cipher.MinLastBlockSize() == 0, which holds for ECB or CBC mode. Otherwise, - /// NO_PADDING for modes like OFB, CFB, CTR, CBC-CTS. - /// \sa Block Cipher Padding for - /// additional details. - /// \since Crypto++ 5.0 - enum BlockPaddingScheme { - /// \brief No padding added to a block - /// \since Crypto++ 5.0 - NO_PADDING, - /// \brief 0's padding added to a block - /// \since Crypto++ 5.0 - ZEROS_PADDING, - /// \brief PKCS padding added to a block - /// \since Crypto++ 5.0 - PKCS_PADDING, - /// \brief 1 and 0's padding added to a block - /// \since Crypto++ 5.0 - ONE_AND_ZEROS_PADDING, - /// \brief W3C padding added to a block - /// \sa XML - /// Encryption Syntax and Processing - /// \since Crypto++ 6.0 - W3C_PADDING, - /// \brief Default padding scheme - /// \since Crypto++ 5.0 - DEFAULT_PADDING - }; -}; - -/// \brief Filter wrapper for StreamTransformation -/// \details StreamTransformationFilter() is a filter wrapper for StreamTransformation(). It is used when -/// pipelining data for stream ciphers and confidentiality-only block ciphers. The filter will optionally -/// handle padding and unpadding when needed. If you are using an authenticated encryption mode of operation, -/// then use AuthenticatedEncryptionFilter() and AuthenticatedDecryptionFilter() -/// \since Crypto++ 5.0 -class CRYPTOPP_DLL StreamTransformationFilter : public FilterWithBufferedInput, public BlockPaddingSchemeDef, private FilterPutSpaceHelper -{ -public: - virtual ~StreamTransformationFilter() {} - - /// \brief Construct a StreamTransformationFilter - /// \param c reference to a StreamTransformation - /// \param attachment an optional attached transformation - /// \param padding the \ref BlockPaddingSchemeDef "padding scheme" - /// \details This constructor creates a StreamTransformationFilter() for stream ciphers and - /// confidentiality-only block cipher modes of operation. If you are using an authenticated - /// encryption mode of operation, then use either AuthenticatedEncryptionFilter() or - /// AuthenticatedDecryptionFilter(). - /// \sa AuthenticatedEncryptionFilter() and AuthenticatedDecryptionFilter() - StreamTransformationFilter(StreamTransformation &c, BufferedTransformation *attachment = NULLPTR, BlockPaddingScheme padding = DEFAULT_PADDING); - - std::string AlgorithmName() const {return m_cipher.AlgorithmName();} - -protected: - - friend class AuthenticatedEncryptionFilter; - friend class AuthenticatedDecryptionFilter; - - /// \brief Construct a StreamTransformationFilter - /// \param c reference to a StreamTransformation - /// \param attachment an optional attached transformation - /// \param padding the \ref BlockPaddingSchemeDef "padding scheme" - /// \param authenticated flag indicating whether the filter should allow authenticated encryption schemes - /// \details This constructor is used for authenticated encryption mode of operation and by - /// AuthenticatedEncryptionFilter() and AuthenticatedDecryptionFilter(). - StreamTransformationFilter(StreamTransformation &c, BufferedTransformation *attachment, BlockPaddingScheme padding, bool authenticated); - - void InitializeDerivedAndReturnNewSizes(const NameValuePairs ¶meters, size_t &firstSize, size_t &blockSize, size_t &lastSize); - void FirstPut(const byte *inString); - void NextPutMultiple(const byte *inString, size_t length); - void NextPutModifiable(byte *inString, size_t length); - void LastPut(const byte *inString, size_t length); - - static size_t LastBlockSize(StreamTransformation &c, BlockPaddingScheme padding); - - StreamTransformation &m_cipher; - BlockPaddingScheme m_padding; - unsigned int m_mandatoryBlockSize; - unsigned int m_optimalBufferSize; - unsigned int m_reservedBufferSize; - bool m_isSpecial; -}; - -/// \brief Filter wrapper for HashTransformation -/// \since Crypto++ 1.0 -class CRYPTOPP_DLL HashFilter : public Bufferless, private FilterPutSpaceHelper -{ -public: - virtual ~HashFilter() {} - - /// \brief Construct a HashFilter - /// \param hm reference to a HashTransformation - /// \param attachment an optional attached transformation - /// \param putMessage flag indicating whether the original message should be passed to an attached transformation - /// \param truncatedDigestSize the size of the digest - /// \param messagePutChannel the channel on which the message should be output - /// \param hashPutChannel the channel on which the digest should be output - HashFilter(HashTransformation &hm, BufferedTransformation *attachment = NULLPTR, bool putMessage=false, int truncatedDigestSize=-1, const std::string &messagePutChannel=DEFAULT_CHANNEL, const std::string &hashPutChannel=DEFAULT_CHANNEL); - - std::string AlgorithmName() const {return m_hashModule.AlgorithmName();} - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - byte * CreatePutSpace(size_t &size) {return m_hashModule.CreateUpdateSpace(size);} - -private: - HashTransformation &m_hashModule; - bool m_putMessage; - unsigned int m_digestSize; - byte *m_space; - std::string m_messagePutChannel, m_hashPutChannel; -}; - -/// \brief Filter wrapper for HashTransformation -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL HashVerificationFilter : public FilterWithBufferedInput -{ -public: - virtual ~HashVerificationFilter() {} - - /// \brief Exception thrown when a data integrity check failure is encountered - class HashVerificationFailed : public Exception - { - public: - HashVerificationFailed() - : Exception(DATA_INTEGRITY_CHECK_FAILED, "HashVerificationFilter: message hash or MAC not valid") {} - }; - - /// \enum Flags - /// \brief Flags controlling filter behavior. - /// \details The flags are a bitmask and can be OR'd together. - enum Flags { - /// \brief The hash is at the end of the message (i.e., concatenation of message+hash) - HASH_AT_END=0, - /// \brief The hash is at the beginning of the message (i.e., concatenation of hash+message) - HASH_AT_BEGIN=1, - /// \brief The message should be passed to an attached transformation - PUT_MESSAGE=2, - /// \brief The hash should be passed to an attached transformation - PUT_HASH=4, - /// \brief The result of the verification should be passed to an attached transformation - PUT_RESULT=8, - /// \brief The filter should throw a HashVerificationFailed if a failure is encountered - THROW_EXCEPTION=16, - /// \brief Default flags using HASH_AT_BEGIN and PUT_RESULT - DEFAULT_FLAGS = HASH_AT_BEGIN | PUT_RESULT - }; - - /// \brief Construct a HashVerificationFilter - /// \param hm reference to a HashTransformation - /// \param attachment an optional attached transformation - /// \param flags flags indicating behaviors for the filter - /// \param truncatedDigestSize the size of the digest - /// \details truncatedDigestSize = -1 indicates \ref HashTransformation::DigestSize() "DigestSize" should be used. - HashVerificationFilter(HashTransformation &hm, BufferedTransformation *attachment = NULLPTR, word32 flags = DEFAULT_FLAGS, int truncatedDigestSize=-1); - - std::string AlgorithmName() const {return m_hashModule.AlgorithmName();} - bool GetLastResult() const {return m_verified;} - -protected: - void InitializeDerivedAndReturnNewSizes(const NameValuePairs ¶meters, size_t &firstSize, size_t &blockSize, size_t &lastSize); - void FirstPut(const byte *inString); - void NextPutMultiple(const byte *inString, size_t length); - void LastPut(const byte *inString, size_t length); - -private: - friend class AuthenticatedDecryptionFilter; - - HashTransformation &m_hashModule; - word32 m_flags; - unsigned int m_digestSize; - bool m_verified; - SecByteBlock m_expectedHash; -}; - -/// \brief Filter wrapper for encrypting with AuthenticatedSymmetricCipher -/// \details AuthenticatedEncryptionFilter() is a wrapper for encrypting with -/// AuthenticatedSymmetricCipher(), optionally handling padding/unpadding when needed. -/// \details AuthenticatedDecryptionFilter() for Crypto++ 8.2 and earlier -/// had a bug where a FileSource() would cause an exception, but a StringSource() -/// was OK. Also see Issue 817 and Commit ff110c6e183e. -/// \sa AuthenticatedSymmetricCipher, AuthenticatedDecryptionFilter, EAX, CCM, GCM, -/// and AadSource on the -/// Crypto++ wiki. -/// \since Crypto++ 5.6.0 -class CRYPTOPP_DLL AuthenticatedEncryptionFilter : public StreamTransformationFilter -{ -public: - virtual ~AuthenticatedEncryptionFilter() {} - - /// \brief Construct a AuthenticatedEncryptionFilter - /// \param c reference to a AuthenticatedSymmetricCipher - /// \param attachment an optional attached transformation - /// \param putAAD flag indicating whether the AAD should be passed to an attached transformation - /// \param truncatedDigestSize the size of the digest - /// \param macChannel the channel on which the MAC should be output - /// \param padding the \ref BlockPaddingSchemeDef "padding scheme" - /// \details truncatedDigestSize = -1 indicates \ref HashTransformation::DigestSize() "DigestSize" should be used. - /// \since Crypto++ 5.6.0 - AuthenticatedEncryptionFilter(AuthenticatedSymmetricCipher &c, BufferedTransformation *attachment = NULLPTR, bool putAAD=false, int truncatedDigestSize=-1, const std::string &macChannel=DEFAULT_CHANNEL, BlockPaddingScheme padding = DEFAULT_PADDING); - - void IsolatedInitialize(const NameValuePairs ¶meters); - byte * ChannelCreatePutSpace(const std::string &channel, size_t &size); - size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking); - - /// \brief Input the last block of data - /// \param inString the input byte buffer - /// \param length the size of the input buffer, in bytes - /// \details LastPut() processes the last block of data and signals attached filters to do the same. - /// LastPut() is always called. The pseudo algorithm for the logic is: - ///
-	///     if totalLength < firstSize then length == totalLength
-	///     else if totalLength <= firstSize+lastSize then length == totalLength-firstSize
-	///     else lastSize <= length < lastSize+blockSize
-	/// 
- void LastPut(const byte *inString, size_t length); - -protected: - HashFilter m_hf; -}; - -/// \brief Filter wrapper for decrypting with AuthenticatedSymmetricCipher -/// \details AuthenticatedDecryptionFilter() is a wrapper for decrypting with -/// AuthenticatedSymmetricCipher(), optionally handling padding/unpadding when -/// needed. -/// \details AuthenticatedDecryptionFilter() for Crypto++ 8.2 and earlier -/// had a bug where a FileSource() would cause an exception, but a StringSource() -/// was OK. Also see Issue 817 and Commit ff110c6e183e. -/// \sa AuthenticatedSymmetricCipher, AuthenticatedEncryptionFilter, EAX, CCM, GCM, -/// and AadSource on the -/// Crypto++ wiki. -/// \since Crypto++ 5.6.0 -class CRYPTOPP_DLL AuthenticatedDecryptionFilter : public FilterWithBufferedInput, public BlockPaddingSchemeDef -{ -public: - /// \enum Flags - /// \brief Flags controlling filter behavior. - /// \details The flags are a bitmask and can be OR'd together. - enum Flags { - /// \brief The MAC is at the end of the message (i.e., concatenation of message+mac) - MAC_AT_END=0, - /// \brief The MAC is at the beginning of the message (i.e., concatenation of mac+message) - MAC_AT_BEGIN=1, - /// \brief The filter should throw a HashVerificationFailed if a failure is encountered - THROW_EXCEPTION=16, - /// \brief Default flags using THROW_EXCEPTION - DEFAULT_FLAGS = THROW_EXCEPTION - }; - - virtual ~AuthenticatedDecryptionFilter() {} - - /// \brief Construct a AuthenticatedDecryptionFilter - /// \param c reference to a AuthenticatedSymmetricCipher - /// \param attachment an optional attached transformation - /// \param flags flags indicating behaviors for the filter - /// \param truncatedDigestSize the size of the digest - /// \param padding the \ref BlockPaddingSchemeDef "padding scheme" - /// \details Additional authenticated data should be given in channel "AAD". - /// \details truncatedDigestSize = -1 indicates \ref HashTransformation::DigestSize() "DigestSize" should be used. - /// \since Crypto++ 5.6.0 - AuthenticatedDecryptionFilter(AuthenticatedSymmetricCipher &c, BufferedTransformation *attachment = NULLPTR, word32 flags = DEFAULT_FLAGS, int truncatedDigestSize=-1, BlockPaddingScheme padding = DEFAULT_PADDING); - - std::string AlgorithmName() const {return m_hashVerifier.AlgorithmName();} - byte * ChannelCreatePutSpace(const std::string &channel, size_t &size); - size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking); - size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking) - { return ChannelPut2(channel, begin, length, messageEnd, blocking); } - /// \brief Get verifier result - /// \return true if the digest on the previosus message was valid, false otherwise - bool GetLastResult() const {return m_hashVerifier.GetLastResult();} - -protected: - void InitializeDerivedAndReturnNewSizes(const NameValuePairs ¶meters, size_t &firstSize, size_t &blockSize, size_t &lastSize); - void FirstPut(const byte *inString); - void NextPutMultiple(const byte *inString, size_t length); - - /// \brief Input the last block of data - /// \param inString the input byte buffer - /// \param length the size of the input buffer, in bytes - /// \details LastPut() processes the last block of data and signals attached filters to do the same. - /// LastPut() is always called. The pseudo algorithm for the logic is: - ///
-	///     if totalLength < firstSize then length == totalLength
-	///     else if totalLength <= firstSize+lastSize then length == totalLength-firstSize
-	///     else lastSize <= length < lastSize+blockSize
-	/// 
- void LastPut(const byte *inString, size_t length); - - HashVerificationFilter m_hashVerifier; - StreamTransformationFilter m_streamFilter; -}; - -/// \brief Filter wrapper for PK_Signer -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL SignerFilter : public Unflushable -{ -public: - virtual ~SignerFilter() {} - - /// \brief Construct a SignerFilter - /// \param rng a RandomNumberGenerator derived class - /// \param signer a PK_Signer derived class - /// \param attachment an optional attached transformation - /// \param putMessage flag indicating whether the original message should be passed to an attached transformation - SignerFilter(RandomNumberGenerator &rng, const PK_Signer &signer, BufferedTransformation *attachment = NULLPTR, bool putMessage=false) - : m_rng(rng), m_signer(signer), m_messageAccumulator(signer.NewSignatureAccumulator(rng)), m_putMessage(putMessage) {Detach(attachment);} - - std::string AlgorithmName() const {return m_signer.AlgorithmName();} - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - -private: - RandomNumberGenerator &m_rng; - const PK_Signer &m_signer; - member_ptr m_messageAccumulator; - bool m_putMessage; - SecByteBlock m_buf; -}; - -/// \brief Filter wrapper for PK_Verifier -/// \details This filter was formerly named VerifierFilter. The name changed at Crypto++ 5.0. -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL SignatureVerificationFilter : public FilterWithBufferedInput -{ -public: - /// \brief Exception thrown when an invalid signature is encountered - class SignatureVerificationFailed : public Exception - { - public: - SignatureVerificationFailed() - : Exception(DATA_INTEGRITY_CHECK_FAILED, "VerifierFilter: digital signature not valid") {} - }; - - /// \enum Flags - /// \brief Flags controlling filter behavior. - /// \details The flags are a bitmask and can be OR'd together. - enum Flags { - /// \brief The signature is at the end of the message (i.e., concatenation of message+signature) - SIGNATURE_AT_END=0, - /// \brief The signature is at the beginning of the message (i.e., concatenation of signature+message) - SIGNATURE_AT_BEGIN=1, - /// \brief The message should be passed to an attached transformation - PUT_MESSAGE=2, - /// \brief The signature should be passed to an attached transformation - PUT_SIGNATURE=4, - /// \brief The result of the verification should be passed to an attached transformation - PUT_RESULT=8, - /// \brief The filter should throw a HashVerificationFailed if a failure is encountered - THROW_EXCEPTION=16, - /// \brief Default flags using SIGNATURE_AT_BEGIN and PUT_RESULT - DEFAULT_FLAGS = SIGNATURE_AT_BEGIN | PUT_RESULT - }; - - virtual ~SignatureVerificationFilter() {} - - /// \brief Construct a SignatureVerificationFilter - /// \param verifier a PK_Verifier derived class - /// \param attachment an optional attached transformation - /// \param flags flags indicating behaviors for the filter - SignatureVerificationFilter(const PK_Verifier &verifier, BufferedTransformation *attachment = NULLPTR, word32 flags = DEFAULT_FLAGS); - - std::string AlgorithmName() const {return m_verifier.AlgorithmName();} - - /// \brief Retrieves the result of the last verification - /// \return true if the signature on the previosus message was valid, false otherwise - bool GetLastResult() const {return m_verified;} - -protected: - void InitializeDerivedAndReturnNewSizes(const NameValuePairs ¶meters, size_t &firstSize, size_t &blockSize, size_t &lastSize); - void FirstPut(const byte *inString); - void NextPutMultiple(const byte *inString, size_t length); - void LastPut(const byte *inString, size_t length); - -private: - const PK_Verifier &m_verifier; - member_ptr m_messageAccumulator; - word32 m_flags; - SecByteBlock m_signature; - bool m_verified; -}; - -/// \brief Redirect input to another BufferedTransformation without owning it -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL Redirector : public CustomSignalPropagation -{ -public: - /// \enum Behavior - /// \brief Controls signal propagation behavior - enum Behavior - { - /// \brief Pass data only - DATA_ONLY = 0x00, - /// \brief Pass signals - PASS_SIGNALS = 0x01, - /// \brief Pass wait events - PASS_WAIT_OBJECTS = 0x02, - /// \brief Pass everything - /// \details PASS_EVERYTHING is default - PASS_EVERYTHING = PASS_SIGNALS | PASS_WAIT_OBJECTS - }; - - virtual ~Redirector() {} - - /// \brief Construct a Redirector - Redirector() : m_target(NULLPTR), m_behavior(PASS_EVERYTHING) {} - - /// \brief Construct a Redirector - /// \param target the destination BufferedTransformation - /// \param behavior Behavior "flags" specifying signal propagation - Redirector(BufferedTransformation &target, Behavior behavior=PASS_EVERYTHING) - : m_target(&target), m_behavior(behavior) {} - - /// \brief Redirect input to another BufferedTransformation - /// \param target the destination BufferedTransformation - void Redirect(BufferedTransformation &target) {m_target = ⌖} - /// \brief Stop redirecting input - void StopRedirection() {m_target = NULLPTR;} - - /// \brief Retrieve signal propagation behavior - /// \return the current signal propagation behavior - Behavior GetBehavior() {return static_cast(m_behavior);} - /// \brief Set signal propagation behavior - /// \param behavior the new signal propagation behavior - void SetBehavior(Behavior behavior) {m_behavior=behavior;} - /// \brief Retrieve signal propagation behavior - /// \return true if the Redirector passes signals, false otherwise. - bool GetPassSignals() const {return (m_behavior & PASS_SIGNALS) != 0;} - /// \brief Set signal propagation behavior - /// \param pass flag indicating if the Redirector should pass signals - void SetPassSignals(bool pass) { if (pass) m_behavior |= PASS_SIGNALS; else m_behavior &= ~static_cast(PASS_SIGNALS); } - /// \brief Retrieve signal propagation behavior - /// \return true if the Redirector passes wait objects, false otherwise. - bool GetPassWaitObjects() const {return (m_behavior & PASS_WAIT_OBJECTS) != 0;} - /// \brief Set signal propagation behavior - /// \param pass flag indicating if the Redirector should pass wait objects - void SetPassWaitObjects(bool pass) { if (pass) m_behavior |= PASS_WAIT_OBJECTS; else m_behavior &= ~static_cast(PASS_WAIT_OBJECTS); } - - bool CanModifyInput() const - {return m_target ? m_target->CanModifyInput() : false;} - - void Initialize(const NameValuePairs ¶meters, int propagation); - byte * CreatePutSpace(size_t &size) - { - if (m_target) - return m_target->CreatePutSpace(size); - else - { - size = 0; - return NULLPTR; - } - } - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - {return m_target ? m_target->Put2(inString, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;} - bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) - {return m_target && GetPassSignals() ? m_target->Flush(hardFlush, propagation, blocking) : false;} - bool MessageSeriesEnd(int propagation=-1, bool blocking=true) - {return m_target && GetPassSignals() ? m_target->MessageSeriesEnd(propagation, blocking) : false;} - - byte * ChannelCreatePutSpace(const std::string &channel, size_t &size) - { - if (m_target) - return m_target->ChannelCreatePutSpace(channel, size); - else - { - size = 0; - return NULLPTR; - } - } - size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking) - {return m_target ? m_target->ChannelPut2(channel, begin, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;} - size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking) - {return m_target ? m_target->ChannelPutModifiable2(channel, begin, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;} - bool ChannelFlush(const std::string &channel, bool completeFlush, int propagation=-1, bool blocking=true) - {return m_target && GetPassSignals() ? m_target->ChannelFlush(channel, completeFlush, propagation, blocking) : false;} - bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true) - {return m_target && GetPassSignals() ? m_target->ChannelMessageSeriesEnd(channel, propagation, blocking) : false;} - - unsigned int GetMaxWaitObjectCount() const - { return m_target && GetPassWaitObjects() ? m_target->GetMaxWaitObjectCount() : 0; } - void GetWaitObjects(WaitObjectContainer &container, CallStack const& callStack) - { if (m_target && GetPassWaitObjects()) m_target->GetWaitObjects(container, callStack); } - -private: - BufferedTransformation *m_target; - word32 m_behavior; -}; - -/// \brief Filter class that is a proxy for a sink -/// \details Used By ProxyFilter -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL OutputProxy : public CustomSignalPropagation -{ -public: - virtual ~OutputProxy() {} - - /// \brief Construct an OutputProxy - /// \param owner the owning transformation - /// \param passSignal flag indicating if signals should be passed - OutputProxy(BufferedTransformation &owner, bool passSignal) : m_owner(owner), m_passSignal(passSignal) {} - - /// \brief Retrieve passSignal flag - /// \return flag indicating if signals should be passed - bool GetPassSignal() const {return m_passSignal;} - /// \brief Set passSignal flag - /// \param passSignal flag indicating if signals should be passed - void SetPassSignal(bool passSignal) {m_passSignal = passSignal;} - - byte * CreatePutSpace(size_t &size) - {return m_owner.AttachedTransformation()->CreatePutSpace(size);} - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - {return m_owner.AttachedTransformation()->Put2(inString, length, m_passSignal ? messageEnd : 0, blocking);} - size_t PutModifiable2(byte *begin, size_t length, int messageEnd, bool blocking) - {return m_owner.AttachedTransformation()->PutModifiable2(begin, length, m_passSignal ? messageEnd : 0, blocking);} - void Initialize(const NameValuePairs ¶meters=g_nullNameValuePairs, int propagation=-1) - {if (m_passSignal) m_owner.AttachedTransformation()->Initialize(parameters, propagation);} - bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) - {return m_passSignal ? m_owner.AttachedTransformation()->Flush(hardFlush, propagation, blocking) : false;} - bool MessageSeriesEnd(int propagation=-1, bool blocking=true) - {return m_passSignal ? m_owner.AttachedTransformation()->MessageSeriesEnd(propagation, blocking) : false;} - - byte * ChannelCreatePutSpace(const std::string &channel, size_t &size) - {return m_owner.AttachedTransformation()->ChannelCreatePutSpace(channel, size);} - size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking) - {return m_owner.AttachedTransformation()->ChannelPut2(channel, begin, length, m_passSignal ? messageEnd : 0, blocking);} - size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking) - {return m_owner.AttachedTransformation()->ChannelPutModifiable2(channel, begin, length, m_passSignal ? messageEnd : 0, blocking);} - bool ChannelFlush(const std::string &channel, bool completeFlush, int propagation=-1, bool blocking=true) - {return m_passSignal ? m_owner.AttachedTransformation()->ChannelFlush(channel, completeFlush, propagation, blocking) : false;} - bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true) - {return m_passSignal ? m_owner.AttachedTransformation()->ChannelMessageSeriesEnd(channel, propagation, blocking) : false;} - -private: - BufferedTransformation &m_owner; - bool m_passSignal; -}; - -/// \brief Base class for Filter classes that are proxies for a chain of other filters -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL ProxyFilter : public FilterWithBufferedInput -{ -public: - virtual ~ProxyFilter() {} - - /// \brief Construct a ProxyFilter - /// \param filter an output filter - /// \param firstSize the first Put size - /// \param lastSize the last Put size - /// \param attachment an attached transformation - ProxyFilter(BufferedTransformation *filter, size_t firstSize, size_t lastSize, BufferedTransformation *attachment); - - bool IsolatedFlush(bool hardFlush, bool blocking); - - /// \brief Sets the OutputProxy filter - /// \param filter an OutputProxy filter - void SetFilter(Filter *filter); - void NextPutMultiple(const byte *s, size_t len); - void NextPutModifiable(byte *inString, size_t length); - -protected: - member_ptr m_filter; -}; - -/// \brief Proxy filter that doesn't modify the underlying filter's input or output -/// \since Crypto++ 5.0 -class CRYPTOPP_DLL SimpleProxyFilter : public ProxyFilter -{ -public: - /// \brief Construct a SimpleProxyFilter - /// \param filter an output filter - /// \param attachment an attached transformation - SimpleProxyFilter(BufferedTransformation *filter, BufferedTransformation *attachment) - : ProxyFilter(filter, 0, 0, attachment) {} - - void FirstPut(const byte * inString) - {CRYPTOPP_UNUSED(inString);} - - /// \brief Input the last block of data - /// \param inString the input byte buffer - /// \param length the size of the input buffer, in bytes - /// \details LastPut() processes the last block of data and signals attached filters to do the same. - /// LastPut() is always called. The pseudo algorithm for the logic is: - ///
-	///     if totalLength < firstSize then length == totalLength
-	///     else if totalLength <= firstSize+lastSize then length == totalLength-firstSize
-	///     else lastSize <= length < lastSize+blockSize
-	/// 
- void LastPut(const byte *inString, size_t length) - {CRYPTOPP_UNUSED(inString), CRYPTOPP_UNUSED(length); m_filter->MessageEnd();} -}; - -/// \brief Filter wrapper for PK_Encryptor -/// \details PK_DecryptorFilter is a proxy for the filter created by PK_Encryptor::CreateEncryptionFilter. -/// This class provides symmetry with VerifierFilter. -/// \since Crypto++ 5.0 -class CRYPTOPP_DLL PK_EncryptorFilter : public SimpleProxyFilter -{ -public: - /// \brief Construct a PK_EncryptorFilter - /// \param rng a RandomNumberGenerator derived class - /// \param encryptor a PK_Encryptor derived class - /// \param attachment an optional attached transformation - PK_EncryptorFilter(RandomNumberGenerator &rng, const PK_Encryptor &encryptor, BufferedTransformation *attachment = NULLPTR) - : SimpleProxyFilter(encryptor.CreateEncryptionFilter(rng), attachment) {} -}; - -/// \brief Filter wrapper for PK_Decryptor -/// \details PK_DecryptorFilter is a proxy for the filter created by PK_Decryptor::CreateDecryptionFilter. -/// This class provides symmetry with SignerFilter. -/// \since Crypto++ 5.0 -class CRYPTOPP_DLL PK_DecryptorFilter : public SimpleProxyFilter -{ -public: - /// \brief Construct a PK_DecryptorFilter - /// \param rng a RandomNumberGenerator derived class - /// \param decryptor a PK_Decryptor derived class - /// \param attachment an optional attached transformation - PK_DecryptorFilter(RandomNumberGenerator &rng, const PK_Decryptor &decryptor, BufferedTransformation *attachment = NULLPTR) - : SimpleProxyFilter(decryptor.CreateDecryptionFilter(rng), attachment) {} -}; - -/// \brief Append input to a string object -/// \tparam T std::basic_string type -/// \details StringSinkTemplate is a StringSinkTemplate typedef -/// \since Crypto++ 5.0 -template -class StringSinkTemplate : public Bufferless -{ -public: - typedef typename T::value_type value_type; - virtual ~StringSinkTemplate() {} - - /// \brief Construct a StringSinkTemplate - /// \param output std::basic_string or std::vector type - StringSinkTemplate(T &output) - : m_output(&output) {CRYPTOPP_ASSERT(sizeof(value_type)==1);} - - void IsolatedInitialize(const NameValuePairs ¶meters) - {if (!parameters.GetValue("OutputStringPointer", m_output)) throw InvalidArgument("StringSink: OutputStringPointer not specified");} - - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - { - CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking); - if (length > 0) - { - typename T::size_type size = m_output->size(); - if (length < size && size + length > m_output->capacity()) - m_output->reserve(2*size); - m_output->insert(m_output->end(), (const value_type *)inString, (const value_type *)inString+length); - } - return 0; - } - -private: - T *m_output; -}; - -/// \brief Append input to a string object -/// \details StringSink is a typedef for StringSinkTemplate. -/// \sa ArraySink, ArrayXorSink -/// \since Crypto++ 4.0 -DOCUMENTED_TYPEDEF(StringSinkTemplate, StringSink); -CRYPTOPP_DLL_TEMPLATE_CLASS StringSinkTemplate; - -/// \brief Append input to a std::vector object -/// \details VectorSink is a typedef for StringSinkTemplate >. -/// \since Crypto++ 8.0 -DOCUMENTED_TYPEDEF(StringSinkTemplate >, VectorSink); -CRYPTOPP_DLL_TEMPLATE_CLASS StringSinkTemplate >; - -/// \brief Incorporates input into RNG as additional entropy -/// \since Crypto++ 4.0 -class RandomNumberSink : public Bufferless -{ -public: - virtual ~RandomNumberSink() {} - - /// \brief Construct a RandomNumberSink - RandomNumberSink() - : m_rng(NULLPTR) {} - - /// \brief Construct a RandomNumberSink - /// \param rng a RandomNumberGenerator derived class - RandomNumberSink(RandomNumberGenerator &rng) - : m_rng(&rng) {} - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - -private: - RandomNumberGenerator *m_rng; -}; - -/// \brief Copy input to a memory buffer -/// \details ArraySink wraps a fixed size buffer. The buffer is full once Put returns non-0. -/// When used in a pipeline, ArraySink silently discards input if the buffer is full. -/// AvailableSize() can be used to determine how much space remains in the buffer. -/// TotalPutLength() can be used to determine how many bytes were processed. -/// \sa StringSink, ArrayXorSink -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL ArraySink : public Bufferless -{ -public: - virtual ~ArraySink() {} - - /// \brief Construct an ArraySink - /// \param parameters a set of NameValuePairs to initialize this object - /// \details Name::OutputBuffer() is a mandatory parameter using this constructor. - ArraySink(const NameValuePairs ¶meters = g_nullNameValuePairs) - : m_buf(NULLPTR), m_size(0), m_total(0) {IsolatedInitialize(parameters);} - - /// \brief Construct an ArraySink - /// \param buf pointer to a memory buffer - /// \param size length of the memory buffer - ArraySink(byte *buf, size_t size) - : m_buf(buf), m_size(size), m_total(0) {} - - /// \brief Provides the size remaining in the Sink - /// \return size remaining in the Sink, in bytes - size_t AvailableSize() {return SaturatingSubtract(m_size, m_total);} - - /// \brief Provides the number of bytes written to the Sink - /// \return number of bytes written to the Sink, in bytes - lword TotalPutLength() {return m_total;} - - void IsolatedInitialize(const NameValuePairs ¶meters); - byte * CreatePutSpace(size_t &size); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - -protected: - byte *m_buf; - size_t m_size; - lword m_total; -}; - -/// \brief Xor input to a memory buffer -/// \details ArrayXorSink wraps a fixed size buffer. The buffer is full once Put returns non-0. -/// When used in a pipeline, ArrayXorSink silently discards input if the buffer is full. -/// AvailableSize() can be used to determine how much space remains in the buffer. -/// TotalPutLength() can be used to determine how many bytes were processed. -/// \sa StringSink, ArraySink -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL ArrayXorSink : public ArraySink -{ -public: - virtual ~ArrayXorSink() {} - - /// \brief Construct an ArrayXorSink - /// \param buf pointer to a memory buffer - /// \param size length of the memory buffer - ArrayXorSink(byte *buf, size_t size) - : ArraySink(buf, size) {} - - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - byte * CreatePutSpace(size_t &size) {return BufferedTransformation::CreatePutSpace(size);} -}; - -/// \brief String-based implementation of Store interface -/// \since Crypto++ 4.0 -class StringStore : public Store -{ -public: - /// \brief Construct a StringStore - /// \param string pointer to a C-String - StringStore(const char *string = NULLPTR) - {StoreInitialize(MakeParameters("InputBuffer", ConstByteArrayParameter(string)));} - - /// \brief Construct a StringStore - /// \param string pointer to a memory buffer - /// \param length size of the memory buffer - StringStore(const byte *string, size_t length) - {StoreInitialize(MakeParameters("InputBuffer", ConstByteArrayParameter(string, length)));} - - /// \brief Construct a StringStore - /// \tparam T std::basic_string type - /// \param string reference to a std::basic_string type - template StringStore(const T &string) - {StoreInitialize(MakeParameters("InputBuffer", ConstByteArrayParameter(string)));} - - CRYPTOPP_DLL size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - CRYPTOPP_DLL size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - -private: - CRYPTOPP_DLL void StoreInitialize(const NameValuePairs ¶meters); - - const byte *m_store; - size_t m_length, m_count; -}; - -/// \brief RNG-based implementation of Source interface -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL RandomNumberStore : public Store -{ -public: - virtual ~RandomNumberStore() {} - - RandomNumberStore() - : m_rng(NULLPTR), m_length(0), m_count(0) {} - - RandomNumberStore(RandomNumberGenerator &rng, lword length) - : m_rng(&rng), m_length(length), m_count(0) {} - - bool AnyRetrievable() const {return MaxRetrievable() != 0;} - lword MaxRetrievable() const {return m_length-m_count;} - - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const - { - CRYPTOPP_UNUSED(target); CRYPTOPP_UNUSED(begin); CRYPTOPP_UNUSED(end); CRYPTOPP_UNUSED(channel); CRYPTOPP_UNUSED(blocking); - throw NotImplemented("RandomNumberStore: CopyRangeTo2() is not supported by this store"); - } - -private: - void StoreInitialize(const NameValuePairs ¶meters); - - RandomNumberGenerator *m_rng; - lword m_length, m_count; -}; - -/// \brief Empty store -/// \since Crypto++ 5.0 -class CRYPTOPP_DLL NullStore : public Store -{ -public: - NullStore(lword size = ULONG_MAX) : m_size(size) {} - void StoreInitialize(const NameValuePairs ¶meters) - {CRYPTOPP_UNUSED(parameters);} - lword MaxRetrievable() const {return m_size;} - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - -private: - lword m_size; -}; - -/// \brief Implementation of BufferedTransformation's attachment interface -/// \details Source is a cornerstone of the Pipeline trinitiy. Data flows from -/// Sources, through Filters, and then terminates in Sinks. The difference -/// between a Source and Filter is a Source \a pumps data, while a Filter does -/// not. The difference between a Filter and a Sink is a Filter allows an -/// attached transformation, while a Sink does not. -/// \details See the discussion of BufferedTransformation in cryptlib.h for -/// more details. -/// \sa Store and SourceTemplate -/// \since Crypto++ 1.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Source : public InputRejecting -{ -public: - virtual ~Source() {} - - /// \brief Construct a Source - /// \param attachment an optional attached transformation - Source(BufferedTransformation *attachment = NULLPTR) - {Source::Detach(attachment);} - - /// \name PIPELINE - //@{ - - /// \brief Pump data to attached transformation - /// \param pumpMax the maximum number of bytes to pump - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - /// \details Internally, Pump() calls Pump2(). - /// \note pumpMax is a lword, which is a 64-bit value that typically uses - /// LWORD_MAX. The default argument is SIZE_MAX, and it can be - /// 32-bits or 64-bits. - /// \sa Pump2, PumpAll, AnyRetrievable, MaxRetrievable - lword Pump(lword pumpMax=SIZE_MAX) - {Pump2(pumpMax); return pumpMax;} - - /// \brief Pump messages to attached transformation - /// \param count the maximum number of messages to pump - /// \return TODO - /// \details Internally, PumpMessages() calls PumpMessages2(). - unsigned int PumpMessages(unsigned int count=UINT_MAX) - {PumpMessages2(count); return count;} - - /// \brief Pump all data to attached transformation - /// \details Pumps all data to the attached transformation and signal the end of the current - /// message. To avoid the MessageEnd() signal call \ref Pump "Pump(LWORD_MAX)" or \ref Pump2 - /// "Pump2(LWORD_MAX, bool)". - /// \details Internally, PumpAll() calls PumpAll2(), which calls PumpMessages(). - /// \sa Pump, Pump2, AnyRetrievable, MaxRetrievable - void PumpAll() - {PumpAll2();} - - /// \brief Pump data to attached transformation - /// \param byteCount the maximum number of bytes to pump - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - /// \details byteCount is an \a IN and \a OUT parameter. When the call is made, byteCount is the - /// requested size of the pump. When the call returns, byteCount is the number of bytes that - /// were pumped. - /// \sa Pump, PumpAll, AnyRetrievable, MaxRetrievable - virtual size_t Pump2(lword &byteCount, bool blocking=true) =0; - - /// \brief Pump messages to attached transformation - /// \param messageCount the maximum number of messages to pump - /// \param blocking specifies whether the object should block when processing input - /// \details messageCount is an IN and OUT parameter. - virtual size_t PumpMessages2(unsigned int &messageCount, bool blocking=true) =0; - - /// \brief Pump all data to attached transformation - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed). - /// 0 indicates all bytes were processed. - /// \sa Pump, Pump2, AnyRetrievable, MaxRetrievable - virtual size_t PumpAll2(bool blocking=true); - - /// \brief Determines if the Source is exhausted - /// \return true if the source has been exhausted - virtual bool SourceExhausted() const =0; - - //@} - -protected: - void SourceInitialize(bool pumpAll, const NameValuePairs ¶meters) - { - IsolatedInitialize(parameters); - if (pumpAll) - PumpAll(); - } -}; - -/// \brief Transform a Store into a Source -/// \tparam T the class or type -/// \since Crypto++ 5.0 -template -class SourceTemplate : public Source -{ -public: - virtual ~SourceTemplate() {} - - /// \brief Construct a SourceTemplate - /// \param attachment an attached transformation - SourceTemplate(BufferedTransformation *attachment) - : Source(attachment) {} - void IsolatedInitialize(const NameValuePairs ¶meters) - {m_store.IsolatedInitialize(parameters);} - size_t Pump2(lword &byteCount, bool blocking=true) - {return m_store.TransferTo2(*AttachedTransformation(), byteCount, DEFAULT_CHANNEL, blocking);} - size_t PumpMessages2(unsigned int &messageCount, bool blocking=true) - {return m_store.TransferMessagesTo2(*AttachedTransformation(), messageCount, DEFAULT_CHANNEL, blocking);} - size_t PumpAll2(bool blocking=true) - {return m_store.TransferAllTo2(*AttachedTransformation(), DEFAULT_CHANNEL, blocking);} - bool SourceExhausted() const - {return !m_store.AnyRetrievable() && !m_store.AnyMessages();} - void SetAutoSignalPropagation(int propagation) - {m_store.SetAutoSignalPropagation(propagation);} - int GetAutoSignalPropagation() const - {return m_store.GetAutoSignalPropagation();} - -protected: - T m_store; -}; - -/// \brief String-based implementation of the Source interface -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL StringSource : public SourceTemplate -{ -public: - /// \brief Construct a StringSource - /// \param attachment an optional attached transformation - StringSource(BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {} - - /// \brief Construct a StringSource - /// \param string C-String - /// \param pumpAll flag indicating if source data should be pumped to its attached transformation - /// \param attachment an optional attached transformation - StringSource(const char *string, bool pumpAll, BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {SourceInitialize(pumpAll, MakeParameters("InputBuffer", ConstByteArrayParameter(string)));} - - /// \brief Construct a StringSource - /// \param string binary byte array - /// \param length size of the byte array - /// \param pumpAll flag indicating if source data should be pumped to its attached transformation - /// \param attachment an optional attached transformation - StringSource(const byte *string, size_t length, bool pumpAll, BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {SourceInitialize(pumpAll, MakeParameters("InputBuffer", ConstByteArrayParameter(string, length)));} - - /// \brief Construct a StringSource - /// \param string std::string - /// \param pumpAll flag indicating if source data should be pumped to its attached transformation - /// \param attachment an optional attached transformation - StringSource(const std::string &string, bool pumpAll, BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {SourceInitialize(pumpAll, MakeParameters("InputBuffer", ConstByteArrayParameter(string)));} -}; - -/// \brief Pointer-based implementation of the Source interface -/// \details ArraySource is a typedef for StringSource. Use the third constructor for an array source. -/// The third constructor takes a pointer and length. -/// \since Crypto++ 5.6.0 -DOCUMENTED_TYPEDEF(StringSource, ArraySource); - -/// \brief std::vector-based implementation of the Source interface -/// \since Crypto++ 8.0 -class CRYPTOPP_DLL VectorSource : public SourceTemplate -{ -public: - /// \brief Construct a VectorSource - /// \param attachment an optional attached transformation - VectorSource(BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {} - - /// \brief Construct a VectorSource - /// \param vec vector of bytes - /// \param pumpAll flag indicating if source data should be pumped to its attached transformation - /// \param attachment an optional attached transformation - VectorSource(const std::vector &vec, bool pumpAll, BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) {SourceInitialize(pumpAll, MakeParameters("InputBuffer", ConstByteArrayParameter(vec)));} -}; - -/// \brief RNG-based implementation of Source interface -/// \since Crypto++ 4.0 -class CRYPTOPP_DLL RandomNumberSource : public SourceTemplate -{ -public: - RandomNumberSource(RandomNumberGenerator &rng, int length, bool pumpAll, BufferedTransformation *attachment = NULLPTR) - : SourceTemplate(attachment) - {SourceInitialize(pumpAll, MakeParameters("RandomNumberGeneratorPointer", &rng)("RandomNumberStoreSize", length));} -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/fips140.h b/third_party/cryptoppwin/include/cryptopp/fips140.h deleted file mode 100644 index ebc67edf..00000000 --- a/third_party/cryptoppwin/include/cryptopp/fips140.h +++ /dev/null @@ -1,112 +0,0 @@ -// fips140.h - originally written and placed in the public domain by Wei Dai - -/// \file fips140.h -/// \brief Classes and functions for the FIPS 140-2 validated library -/// \details The FIPS validated library is only available on Windows as a DLL. Once compiled, -/// the library is always in FIPS mode contingent upon successful execution of -/// DoPowerUpSelfTest() or DoDllPowerUpSelfTest(). -/// \sa Visual Studio and -/// config.h on the Crypto++ wiki. - -#ifndef CRYPTOPP_FIPS140_H -#define CRYPTOPP_FIPS140_H - -#include "cryptlib.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// Exception thrown when a crypto algorithm is used after a self test fails -/// \details The self tests for an algorithm are performed by Algorithm class -/// when CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 is defined. -class CRYPTOPP_DLL SelfTestFailure : public Exception -{ -public: - explicit SelfTestFailure(const std::string &s) : Exception(OTHER_ERROR, s) {} -}; - -/// \brief Determines whether the library provides FIPS validated cryptography -/// \return true if FIPS 140-2 validated features were enabled at compile time. -/// \details true if FIPS 140-2 validated features were enabled at compile time, -/// false otherwise. -/// \note FIPS mode is enabled at compile time. A program or other module cannot -/// arbitrarily enter or exit the mode. -CRYPTOPP_DLL bool CRYPTOPP_API FIPS_140_2_ComplianceEnabled(); - -/// \brief Status of the power-up self test -enum PowerUpSelfTestStatus { - - /// \brief The self tests have not been performed. - POWER_UP_SELF_TEST_NOT_DONE, - /// \brief The self tests were executed via DoPowerUpSelfTest() or - /// DoDllPowerUpSelfTest(), but the result was failure. - POWER_UP_SELF_TEST_FAILED, - /// \brief The self tests were executed via DoPowerUpSelfTest() or - /// DoDllPowerUpSelfTest(), and the result was success. - POWER_UP_SELF_TEST_PASSED -}; - -/// \brief Performs the power-up self test -/// \param moduleFilename the fully qualified name of the module -/// \param expectedModuleMac the expected MAC of the components protected by the integrity check -/// \details Performs the power-up self test, and sets the self test status to -/// POWER_UP_SELF_TEST_PASSED or POWER_UP_SELF_TEST_FAILED. -/// \details The self tests for an algorithm are performed by the Algorithm class -/// when CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 is defined. -CRYPTOPP_DLL void CRYPTOPP_API DoPowerUpSelfTest(const char *moduleFilename, const byte *expectedModuleMac); - -/// \brief Performs the power-up self test on the DLL -/// \details Performs the power-up self test using the filename of this DLL and the -/// embedded module MAC, and sets the self test status to POWER_UP_SELF_TEST_PASSED or -/// POWER_UP_SELF_TEST_FAILED. -/// \details The self tests for an algorithm are performed by the Algorithm class -/// when CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 is defined. -CRYPTOPP_DLL void CRYPTOPP_API DoDllPowerUpSelfTest(); - -/// \brief Sets the power-up self test status to POWER_UP_SELF_TEST_FAILED -/// \details Sets the power-up self test status to POWER_UP_SELF_TEST_FAILED to simulate failure. -CRYPTOPP_DLL void CRYPTOPP_API SimulatePowerUpSelfTestFailure(); - -/// \brief Provides the current power-up self test status -/// \return the current power-up self test status -CRYPTOPP_DLL PowerUpSelfTestStatus CRYPTOPP_API GetPowerUpSelfTestStatus(); - -#ifndef CRYPTOPP_DOXYGEN_PROCESSING -typedef PowerUpSelfTestStatus (CRYPTOPP_API * PGetPowerUpSelfTestStatus)(); -#endif - -/// \brief Class object that calculates the MAC on the module -/// \return the MAC for the module -CRYPTOPP_DLL MessageAuthenticationCode * CRYPTOPP_API NewIntegrityCheckingMAC(); - -/// \brief Verifies the MAC on the module -/// \param moduleFilename the fully qualified name of the module -/// \param expectedModuleMac the expected MAC of the components protected by the integrity check -/// \param pActualMac the actual MAC of the components calculated by the integrity check -/// \param pMacFileLocation the offset of the MAC in the PE/PE+ module -/// \return true if the MAC is valid, false otherwise -CRYPTOPP_DLL bool CRYPTOPP_API IntegrityCheckModule(const char *moduleFilename, const byte *expectedModuleMac, SecByteBlock *pActualMac = NULLPTR, unsigned long *pMacFileLocation = NULLPTR); - -#ifndef CRYPTOPP_DOXYGEN_PROCESSING -// this is used by Algorithm constructor to allow Algorithm objects to be constructed for the self test -bool PowerUpSelfTestInProgressOnThisThread(); - -void SetPowerUpSelfTestInProgressOnThisThread(bool inProgress); - -void SignaturePairwiseConsistencyTest(const PK_Signer &signer, const PK_Verifier &verifier); -void EncryptionPairwiseConsistencyTest(const PK_Encryptor &encryptor, const PK_Decryptor &decryptor); - -void SignaturePairwiseConsistencyTest_FIPS_140_Only(const PK_Signer &signer, const PK_Verifier &verifier); -void EncryptionPairwiseConsistencyTest_FIPS_140_Only(const PK_Encryptor &encryptor, const PK_Decryptor &decryptor); -#endif - -/// \brief The placeholder used prior to embedding the actual MAC in the module. -/// \details After the DLL is built but before it is MAC'd, the string CRYPTOPP_DUMMY_DLL_MAC -/// is used as a placeholder for the actual MAC. A post-build step is performed which calculates -/// the MAC of the DLL and embeds it in the module. The actual MAC is written by the -/// cryptest.exe program using the mac_dll subcommand. -#define CRYPTOPP_DUMMY_DLL_MAC "MAC_51f34b8db820ae8" - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/fltrimpl.h b/third_party/cryptoppwin/include/cryptopp/fltrimpl.h deleted file mode 100644 index 399a7292..00000000 --- a/third_party/cryptoppwin/include/cryptopp/fltrimpl.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef CRYPTOPP_FLTRIMPL_H -#define CRYPTOPP_FLTRIMPL_H - -#define FILTER_BEGIN \ - switch (m_continueAt) \ - { \ - case 0: \ - m_inputPosition = 0; - -#define FILTER_END_NO_MESSAGE_END_NO_RETURN \ - break; \ - default: \ - CRYPTOPP_ASSERT(false); \ - } - -#define FILTER_END_NO_MESSAGE_END \ - FILTER_END_NO_MESSAGE_END_NO_RETURN \ - return 0; - -/* -#define FILTER_END \ - case -1: \ - if (messageEnd && Output(-1, NULLPTR, 0, messageEnd, blocking)) \ - return 1; \ - FILTER_END_NO_MESSAGE_END -*/ - -#define FILTER_OUTPUT3(site, statement, output, length, messageEnd, channel) \ - {\ - case site: \ - (void) statement; \ - if (Output(site, output, length, messageEnd, blocking, channel)) \ - return STDMAX(size_t(1), length-m_inputPosition);\ - } - -#define FILTER_OUTPUT2(site, statement, output, length, messageEnd) \ - FILTER_OUTPUT3(site, statement, output, length, messageEnd, DEFAULT_CHANNEL) - -#define FILTER_OUTPUT(site, output, length, messageEnd) \ - FILTER_OUTPUT2(site, 0, output, length, messageEnd) - -#define FILTER_OUTPUT_BYTE(site, output) \ - FILTER_OUTPUT(site, &(const byte &)(byte)output, 1, 0) - -#define FILTER_OUTPUT2_MODIFIABLE(site, statement, output, length, messageEnd) \ - {\ - /* fall through */ \ - case site: \ - (void) statement; \ - if (OutputModifiable(site, output, length, messageEnd, blocking)) \ - return STDMAX(size_t(1), length-m_inputPosition);\ - } - -#define FILTER_OUTPUT_MODIFIABLE(site, output, length, messageEnd) \ - FILTER_OUTPUT2_MODIFIABLE(site, 0, output, length, messageEnd) - -#define FILTER_OUTPUT2_MAYBE_MODIFIABLE(site, statement, output, length, messageEnd, modifiable) \ - {\ - /* fall through */ \ - case site: \ - (void) statement; \ - if (modifiable ? OutputModifiable(site, output, length, messageEnd, blocking) : Output(site, output, length, messageEnd, blocking)) \ - return STDMAX(size_t(1), length-m_inputPosition);\ - } - -#define FILTER_OUTPUT_MAYBE_MODIFIABLE(site, output, length, messageEnd, modifiable) \ - FILTER_OUTPUT2_MAYBE_MODIFIABLE(site, 0, output, length, messageEnd, modifiable) - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/gcm.h b/third_party/cryptoppwin/include/cryptopp/gcm.h deleted file mode 100644 index 0f4d7025..00000000 --- a/third_party/cryptoppwin/include/cryptopp/gcm.h +++ /dev/null @@ -1,139 +0,0 @@ -// gcm.h - originally written and placed in the public domain by Wei Dai - -/// \file gcm.h -/// \brief GCM block cipher mode of operation -/// \since Crypto++ 5.6.0 - -#ifndef CRYPTOPP_GCM_H -#define CRYPTOPP_GCM_H - -#include "authenc.h" -#include "modes.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_GCM_ASM 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \enum GCM_TablesOption -/// \brief GCM table size options -enum GCM_TablesOption { - /// \brief Use a table with 2K entries - GCM_2K_Tables, - /// \brief Use a table with 64K entries - GCM_64K_Tables}; - -/// \brief GCM block cipher base implementation -/// \details Base implementation of the AuthenticatedSymmetricCipher interface -/// \since Crypto++ 5.6.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE GCM_Base : public AuthenticatedSymmetricCipherBase -{ -public: - // AuthenticatedSymmetricCipher - std::string AlgorithmName() const - {return GetBlockCipher().AlgorithmName() + std::string("/GCM");} - std::string AlgorithmProvider() const - {return GetBlockCipher().AlgorithmProvider();} - size_t MinKeyLength() const - {return GetBlockCipher().MinKeyLength();} - size_t MaxKeyLength() const - {return GetBlockCipher().MaxKeyLength();} - size_t DefaultKeyLength() const - {return GetBlockCipher().DefaultKeyLength();} - size_t GetValidKeyLength(size_t n) const - {return GetBlockCipher().GetValidKeyLength(n);} - bool IsValidKeyLength(size_t n) const - {return GetBlockCipher().IsValidKeyLength(n);} - unsigned int OptimalDataAlignment() const; - IV_Requirement IVRequirement() const - {return UNIQUE_IV;} - unsigned int IVSize() const - {return 12;} - unsigned int MinIVLength() const - {return 1;} - unsigned int MaxIVLength() const - {return UINT_MAX;} // (W64LIT(1)<<61)-1 in the standard - unsigned int DigestSize() const - {return 16;} - lword MaxHeaderLength() const - {return (W64LIT(1)<<61)-1;} - lword MaxMessageLength() const - {return ((W64LIT(1)<<39)-256)/8;} - -protected: - // AuthenticatedSymmetricCipherBase - bool AuthenticationIsOnPlaintext() const - {return false;} - unsigned int AuthenticationBlockSize() const - {return HASH_BLOCKSIZE;} - void SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms); - void Resync(const byte *iv, size_t len); - size_t AuthenticateBlocks(const byte *data, size_t len); - void AuthenticateLastHeaderBlock(); - void AuthenticateLastConfidentialBlock(); - void AuthenticateLastFooterBlock(byte *mac, size_t macSize); - SymmetricCipher & AccessSymmetricCipher() {return m_ctr;} - - virtual BlockCipher & AccessBlockCipher() =0; - virtual GCM_TablesOption GetTablesOption() const =0; - - const BlockCipher & GetBlockCipher() const {return const_cast(this)->AccessBlockCipher();} - byte *HashBuffer() {return m_buffer+REQUIRED_BLOCKSIZE;} - byte *HashKey() {return m_buffer+2*REQUIRED_BLOCKSIZE;} - byte *MulTable() {return m_buffer+3*REQUIRED_BLOCKSIZE;} - inline void ReverseHashBufferIfNeeded(); - - class CRYPTOPP_DLL GCTR : public CTR_Mode_ExternalCipher::Encryption - { - protected: - void IncrementCounterBy256(); - }; - - GCTR m_ctr; - static word16 s_reductionTable[256]; - static volatile bool s_reductionTableInitialized; - enum {REQUIRED_BLOCKSIZE = 16, HASH_BLOCKSIZE = 16}; -}; - -/// \brief GCM block cipher final implementation -/// \tparam T_BlockCipher block cipher -/// \tparam T_TablesOption table size, either \p GCM_2K_Tables or \p GCM_64K_Tables -/// \tparam T_IsEncryption direction in which to operate the cipher -/// \since Crypto++ 5.6.0 -template -class GCM_Final : public GCM_Base -{ -public: - static std::string StaticAlgorithmName() - {return T_BlockCipher::StaticAlgorithmName() + std::string("/GCM");} - bool IsForwardTransformation() const - {return T_IsEncryption;} - -private: - GCM_TablesOption GetTablesOption() const {return T_TablesOption;} - BlockCipher & AccessBlockCipher() {return m_cipher;} - typename T_BlockCipher::Encryption m_cipher; -}; - -/// \brief GCM block cipher mode of operation -/// \tparam T_BlockCipher block cipher -/// \tparam T_TablesOption table size, either \p GCM_2K_Tables or \p GCM_64K_Tables -/// \details \p GCM provides the \p Encryption and \p Decryption typedef. See GCM_Base -/// and GCM_Final for the AuthenticatedSymmetricCipher implementation. -/// \sa GCM Mode and -/// Modes of Operation -/// on the Crypto++ wiki. -/// \since Crypto++ 5.6.0 -template -struct GCM : public AuthenticatedSymmetricCipherDocumentation -{ - typedef GCM_Final Encryption; - typedef GCM_Final Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/gf256.h b/third_party/cryptoppwin/include/cryptopp/gf256.h deleted file mode 100644 index 3c5c3f61..00000000 --- a/third_party/cryptoppwin/include/cryptopp/gf256.h +++ /dev/null @@ -1,72 +0,0 @@ -// gf256.h - originally written and placed in the public domain by Wei Dai - -/// \file gf256.h -/// \brief Classes and functions for schemes over GF(256) - -#ifndef CRYPTOPP_GF256_H -#define CRYPTOPP_GF256_H - -#include "cryptlib.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief GF(256) with polynomial basis -class GF256 -{ -public: - typedef byte Element; - typedef int RandomizationParameter; - - GF256(byte modulus) : m_modulus(modulus) {} - - Element RandomElement(RandomNumberGenerator &rng, int ignored = 0) const - {CRYPTOPP_UNUSED(ignored); return rng.GenerateByte();} - - bool Equal(Element a, Element b) const - {return a==b;} - - Element Zero() const - {return 0;} - - Element Add(Element a, Element b) const - {return a^b;} - - Element& Accumulate(Element &a, Element b) const - {return a^=b;} - - Element Inverse(Element a) const - {return a;} - - Element Subtract(Element a, Element b) const - {return a^b;} - - Element& Reduce(Element &a, Element b) const - {return a^=b;} - - Element Double(Element a) const - {CRYPTOPP_UNUSED(a); return 0;} - - Element One() const - {return 1;} - - Element Multiply(Element a, Element b) const; - - Element Square(Element a) const - {return Multiply(a, a);} - - bool IsUnit(Element a) const - {return a != 0;} - - Element MultiplicativeInverse(Element a) const; - - Element Divide(Element a, Element b) const - {return Multiply(a, MultiplicativeInverse(b));} - -private: - word m_modulus; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/gf2_32.h b/third_party/cryptoppwin/include/cryptopp/gf2_32.h deleted file mode 100644 index 9e794fe7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/gf2_32.h +++ /dev/null @@ -1,73 +0,0 @@ -// gf2_32.h - originally written and placed in the public domain by Wei Dai - -/// \file gf2_32.h -/// \brief Classes and functions for schemes over GF(2^32) - -#ifndef CRYPTOPP_GF2_32_H -#define CRYPTOPP_GF2_32_H - -#include "cryptlib.h" -#include "secblock.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief GF(2^32) with polynomial basis -class GF2_32 -{ -public: - typedef word32 Element; - typedef int RandomizationParameter; - - GF2_32(word32 modulus=0x0000008D) : m_modulus(modulus) {} - - Element RandomElement(RandomNumberGenerator &rng, int ignored = 0) const - {CRYPTOPP_UNUSED(ignored); return rng.GenerateWord32();} - - bool Equal(Element a, Element b) const - {return a==b;} - - Element Identity() const - {return 0;} - - Element Add(Element a, Element b) const - {return a^b;} - - Element& Accumulate(Element &a, Element b) const - {return a^=b;} - - Element Inverse(Element a) const - {return a;} - - Element Subtract(Element a, Element b) const - {return a^b;} - - Element& Reduce(Element &a, Element b) const - {return a^=b;} - - Element Double(Element a) const - {CRYPTOPP_UNUSED(a); return 0;} - - Element MultiplicativeIdentity() const - {return 1;} - - Element Multiply(Element a, Element b) const; - - Element Square(Element a) const - {return Multiply(a, a);} - - bool IsUnit(Element a) const - {return a != 0;} - - Element MultiplicativeInverse(Element a) const; - - Element Divide(Element a, Element b) const - {return Multiply(a, MultiplicativeInverse(b));} - -private: - word32 m_modulus; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/gf2n.h b/third_party/cryptoppwin/include/cryptopp/gf2n.h deleted file mode 100644 index 4b61fb88..00000000 --- a/third_party/cryptoppwin/include/cryptopp/gf2n.h +++ /dev/null @@ -1,406 +0,0 @@ -// gf2n.h - originally written and placed in the public domain by Wei Dai - -/// \file gf2n.h -/// \brief Classes and functions for schemes over GF(2^n) - -#ifndef CRYPTOPP_GF2N_H -#define CRYPTOPP_GF2N_H - -#include "cryptlib.h" -#include "secblock.h" -#include "algebra.h" -#include "misc.h" -#include "asn.h" - -#include - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Polynomial with Coefficients in GF(2) -/*! \nosubgrouping */ -class CRYPTOPP_DLL PolynomialMod2 -{ -public: - /// \name ENUMS, EXCEPTIONS, and TYPEDEFS - //@{ - /// \brief Exception thrown when divide by zero is encountered - class DivideByZero : public Exception - { - public: - DivideByZero() : Exception(OTHER_ERROR, "PolynomialMod2: division by zero") {} - }; - - typedef unsigned int RandomizationParameter; - //@} - - /// \name CREATORS - //@{ - /// \brief Construct the zero polynomial - PolynomialMod2(); - /// Copy construct a PolynomialMod2 - PolynomialMod2(const PolynomialMod2& t); - - /// \brief Construct a PolynomialMod2 from a word - /// \details value should be encoded with the least significant bit as coefficient to x^0 - /// and most significant bit as coefficient to x^(WORD_BITS-1) - /// bitLength denotes how much memory to allocate initially - PolynomialMod2(word value, size_t bitLength=WORD_BITS); - - /// \brief Construct a PolynomialMod2 from big-endian byte array - PolynomialMod2(const byte *encodedPoly, size_t byteCount) - {Decode(encodedPoly, byteCount);} - - /// \brief Construct a PolynomialMod2 from big-endian form stored in a BufferedTransformation - PolynomialMod2(BufferedTransformation &encodedPoly, size_t byteCount) - {Decode(encodedPoly, byteCount);} - - /// \brief Create a uniformly distributed random polynomial - /// \details Create a random polynomial uniformly distributed over all polynomials with degree less than bitcount - PolynomialMod2(RandomNumberGenerator &rng, size_t bitcount) - {Randomize(rng, bitcount);} - - /// \brief Provides x^i - /// \return x^i - static PolynomialMod2 CRYPTOPP_API Monomial(size_t i); - /// \brief Provides x^t0 + x^t1 + x^t2 - /// \return x^t0 + x^t1 + x^t2 - /// \pre The coefficients should be provided in descending order. That is,
t0 > t1 > t2
.
-		static PolynomialMod2 CRYPTOPP_API Trinomial(size_t t0, size_t t1, size_t t2);
-		/// \brief Provides x^t0 + x^t1 + x^t2 + x^t3 + x^t4
-		/// \return x^t0 + x^t1 + x^t2 + x^t3 + x^t4
-		/// \pre The coefficients should be provided in descending order. That is, 
t0 > t1 > t2 > t3 > t4
.
-		static PolynomialMod2 CRYPTOPP_API Pentanomial(size_t t0, size_t t1, size_t t2, size_t t3, size_t t4);
-		/// \brief Provides x^(n-1) + ... + x + 1
-		/// \return x^(n-1) + ... + x + 1
-		static PolynomialMod2 CRYPTOPP_API AllOnes(size_t n);
-
-		/// \brief The Zero polinomial
-		/// \return the zero polynomial
-		static const PolynomialMod2 & CRYPTOPP_API Zero();
-		/// \brief The One polinomial
-		/// \return the one polynomial
-		static const PolynomialMod2 & CRYPTOPP_API One();
-	//@}
-
-	/// \name ENCODE/DECODE
-	//@{
-		/// minimum number of bytes to encode this polynomial
-		/*! MinEncodedSize of 0 is 1 */
-		unsigned int MinEncodedSize() const {return STDMAX(1U, ByteCount());}
-
-		/// encode in big-endian format
-		/// \details if outputLen < MinEncodedSize, the most significant bytes will be dropped
-		///   if outputLen > MinEncodedSize, the most significant bytes will be padded
-		void Encode(byte *output, size_t outputLen) const;
-		///
-		void Encode(BufferedTransformation &bt, size_t outputLen) const;
-
-		///
-		void Decode(const byte *input, size_t inputLen);
-		///
-		//* Precondition: bt.MaxRetrievable() >= inputLen
-		void Decode(BufferedTransformation &bt, size_t inputLen);
-
-		/// encode value as big-endian octet string
-		void DEREncodeAsOctetString(BufferedTransformation &bt, size_t length) const;
-		/// decode value as big-endian octet string
-		void BERDecodeAsOctetString(BufferedTransformation &bt, size_t length);
-	//@}
-
-	/// \name ACCESSORS
-	//@{
-		/// number of significant bits = Degree() + 1
-		unsigned int BitCount() const;
-		/// number of significant bytes = ceiling(BitCount()/8)
-		unsigned int ByteCount() const;
-		/// number of significant words = ceiling(ByteCount()/sizeof(word))
-		unsigned int WordCount() const;
-
-		/// return the n-th bit, n=0 being the least significant bit
-		bool GetBit(size_t n) const {return GetCoefficient(n)!=0;}
-		/// return the n-th byte
-		byte GetByte(size_t n) const;
-
-		/// the zero polynomial will return a degree of -1
-		signed int Degree() const {return (signed int)(BitCount()-1U);}
-		/// degree + 1
-		unsigned int CoefficientCount() const {return BitCount();}
-		/// return coefficient for x^i
-		int GetCoefficient(size_t i) const
-			{return (i/WORD_BITS < reg.size()) ? int(reg[i/WORD_BITS] >> (i % WORD_BITS)) & 1 : 0;}
-		/// return coefficient for x^i
-		int operator[](unsigned int i) const {return GetCoefficient(i);}
-
-		///
-		bool IsZero() const {return !*this;}
-		///
-		bool Equals(const PolynomialMod2 &rhs) const;
-	//@}
-
-	/// \name MANIPULATORS
-	//@{
-		///
-		PolynomialMod2&  operator=(const PolynomialMod2& t);
-		///
-		PolynomialMod2&  operator&=(const PolynomialMod2& t);
-		///
-		PolynomialMod2&  operator^=(const PolynomialMod2& t);
-		///
-		PolynomialMod2&  operator+=(const PolynomialMod2& t) {return *this ^= t;}
-		///
-		PolynomialMod2&  operator-=(const PolynomialMod2& t) {return *this ^= t;}
-		///
-		PolynomialMod2&  operator*=(const PolynomialMod2& t);
-		///
-		PolynomialMod2&  operator/=(const PolynomialMod2& t);
-		///
-		PolynomialMod2&  operator%=(const PolynomialMod2& t);
-		///
-		PolynomialMod2&  operator<<=(unsigned int);
-		///
-		PolynomialMod2&  operator>>=(unsigned int);
-
-		///
-		void Randomize(RandomNumberGenerator &rng, size_t bitcount);
-
-		///
-		void SetBit(size_t i, int value = 1);
-		/// set the n-th byte to value
-		void SetByte(size_t n, byte value);
-
-		///
-		void SetCoefficient(size_t i, int value) {SetBit(i, value);}
-
-		///
-		void swap(PolynomialMod2 &a) {reg.swap(a.reg);}
-	//@}
-
-	/// \name UNARY OPERATORS
-	//@{
-		///
-		bool			operator!() const;
-		///
-		PolynomialMod2	operator+() const {return *this;}
-		///
-		PolynomialMod2	operator-() const {return *this;}
-	//@}
-
-	/// \name BINARY OPERATORS
-	//@{
-		///
-		PolynomialMod2 And(const PolynomialMod2 &b) const;
-		///
-		PolynomialMod2 Xor(const PolynomialMod2 &b) const;
-		///
-		PolynomialMod2 Plus(const PolynomialMod2 &b) const {return Xor(b);}
-		///
-		PolynomialMod2 Minus(const PolynomialMod2 &b) const {return Xor(b);}
-		///
-		PolynomialMod2 Times(const PolynomialMod2 &b) const;
-		///
-		PolynomialMod2 DividedBy(const PolynomialMod2 &b) const;
-		///
-		PolynomialMod2 Modulo(const PolynomialMod2 &b) const;
-
-		///
-		PolynomialMod2 operator>>(unsigned int n) const;
-		///
-		PolynomialMod2 operator<<(unsigned int n) const;
-	//@}
-
-	/// \name OTHER ARITHMETIC FUNCTIONS
-	//@{
-		/// sum modulo 2 of all coefficients
-		unsigned int Parity() const;
-
-		/// check for irreducibility
-		bool IsIrreducible() const;
-
-		/// is always zero since we're working modulo 2
-		PolynomialMod2 Doubled() const {return Zero();}
-		///
-		PolynomialMod2 Squared() const;
-
-		/// only 1 is a unit
-		bool IsUnit() const {return Equals(One());}
-		/// return inverse if *this is a unit, otherwise return 0
-		PolynomialMod2 MultiplicativeInverse() const {return IsUnit() ? One() : Zero();}
-
-		/// greatest common divisor
-		static PolynomialMod2 CRYPTOPP_API Gcd(const PolynomialMod2 &a, const PolynomialMod2 &n);
-		/// calculate multiplicative inverse of *this mod n
-		PolynomialMod2 InverseMod(const PolynomialMod2 &) const;
-
-		/// calculate r and q such that (a == d*q + r) && (deg(r) < deg(d))
-		static void CRYPTOPP_API Divide(PolynomialMod2 &r, PolynomialMod2 &q, const PolynomialMod2 &a, const PolynomialMod2 &d);
-	//@}
-
-	/// \name INPUT/OUTPUT
-	//@{
-		///
-		friend std::ostream& operator<<(std::ostream& out, const PolynomialMod2 &a);
-	//@}
-
-private:
-	friend class GF2NT;
-	friend class GF2NT233;
-
-	SecWordBlock reg;
-};
-
-///
-inline bool operator==(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b)
-{return a.Equals(b);}
-///
-inline bool operator!=(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b)
-{return !(a==b);}
-/// compares degree
-inline bool operator> (const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b)
-{return a.Degree() > b.Degree();}
-/// compares degree
-inline bool operator>=(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b)
-{return a.Degree() >= b.Degree();}
-/// compares degree
-inline bool operator< (const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b)
-{return a.Degree() < b.Degree();}
-/// compares degree
-inline bool operator<=(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b)
-{return a.Degree() <= b.Degree();}
-///
-inline CryptoPP::PolynomialMod2 operator&(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b) {return a.And(b);}
-///
-inline CryptoPP::PolynomialMod2 operator^(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b) {return a.Xor(b);}
-///
-inline CryptoPP::PolynomialMod2 operator+(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b) {return a.Plus(b);}
-///
-inline CryptoPP::PolynomialMod2 operator-(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b) {return a.Minus(b);}
-///
-inline CryptoPP::PolynomialMod2 operator*(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b) {return a.Times(b);}
-///
-inline CryptoPP::PolynomialMod2 operator/(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b) {return a.DividedBy(b);}
-///
-inline CryptoPP::PolynomialMod2 operator%(const CryptoPP::PolynomialMod2 &a, const CryptoPP::PolynomialMod2 &b) {return a.Modulo(b);}
-
-// CodeWarrior 8 workaround: put these template instantiations after overloaded operator declarations,
-// but before the use of QuotientRing > for VC .NET 2003
-CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup;
-CRYPTOPP_DLL_TEMPLATE_CLASS AbstractRing;
-CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain;
-CRYPTOPP_DLL_TEMPLATE_CLASS EuclideanDomainOf;
-CRYPTOPP_DLL_TEMPLATE_CLASS QuotientRing >;
-
-/// \brief GF(2^n) with Polynomial Basis
-class CRYPTOPP_DLL GF2NP : public QuotientRing >
-{
-public:
-	GF2NP(const PolynomialMod2 &modulus);
-
-	virtual GF2NP * Clone() const {return new GF2NP(*this);}
-	virtual void DEREncode(BufferedTransformation &bt) const
-		{CRYPTOPP_UNUSED(bt); CRYPTOPP_ASSERT(false);}	// no ASN.1 syntax yet for general polynomial basis
-
-	void DEREncodeElement(BufferedTransformation &out, const Element &a) const;
-	void BERDecodeElement(BufferedTransformation &in, Element &a) const;
-
-	bool Equal(const Element &a, const Element &b) const
-		{CRYPTOPP_ASSERT(a.Degree() < m_modulus.Degree() && b.Degree() < m_modulus.Degree()); return a.Equals(b);}
-
-	bool IsUnit(const Element &a) const
-		{CRYPTOPP_ASSERT(a.Degree() < m_modulus.Degree()); return !!a;}
-
-	unsigned int MaxElementBitLength() const
-		{return m;}
-
-	unsigned int MaxElementByteLength() const
-		{return (unsigned int)BitsToBytes(MaxElementBitLength());}
-
-	Element SquareRoot(const Element &a) const;
-
-	Element HalfTrace(const Element &a) const;
-
-	// returns z such that z^2 + z == a
-	Element SolveQuadraticEquation(const Element &a) const;
-
-protected:
-	unsigned int m;
-};
-
-/// \brief GF(2^n) with Trinomial Basis
-class CRYPTOPP_DLL GF2NT : public GF2NP
-{
-public:
-	// polynomial modulus = x^t0 + x^t1 + x^t2, t0 > t1 > t2
-	GF2NT(unsigned int t0, unsigned int t1, unsigned int t2);
-
-	GF2NP * Clone() const {return new GF2NT(*this);}
-	void DEREncode(BufferedTransformation &bt) const;
-
-	const Element& Multiply(const Element &a, const Element &b) const;
-
-	const Element& Square(const Element &a) const
-		{return Reduced(a.Squared());}
-
-	const Element& MultiplicativeInverse(const Element &a) const;
-
-protected:
-	const Element& Reduced(const Element &a) const;
-
-	unsigned int t0, t1;
-	mutable PolynomialMod2 result;
-};
-
-/// \brief GF(2^n) for b233 and k233
-/// \details GF2NT233 is a specialization of GF2NT that provides Multiply()
-///   and Square() operations when carryless multiplies is available.
-class CRYPTOPP_DLL GF2NT233 : public GF2NT
-{
-public:
-	// polynomial modulus = x^t0 + x^t1 + x^t2, t0 > t1 > t2
-	GF2NT233(unsigned int t0, unsigned int t1, unsigned int t2);
-
-	GF2NP * Clone() const {return new GF2NT233(*this);}
-
-	const Element& Multiply(const Element &a, const Element &b) const;
-
-	const Element& Square(const Element &a) const;
-};
-
-/// \brief GF(2^n) with Pentanomial Basis
-class CRYPTOPP_DLL GF2NPP : public GF2NP
-{
-public:
-	// polynomial modulus = x^t0 + x^t1 + x^t2 + x^t3 + x^t4, t0 > t1 > t2 > t3 > t4
-	GF2NPP(unsigned int t0, unsigned int t1, unsigned int t2, unsigned int t3, unsigned int t4)
-		: GF2NP(PolynomialMod2::Pentanomial(t0, t1, t2, t3, t4)), t1(t1), t2(t2), t3(t3) {}
-
-	GF2NP * Clone() const {return new GF2NPP(*this);}
-	void DEREncode(BufferedTransformation &bt) const;
-
-private:
-	unsigned int t1, t2, t3;
-};
-
-// construct new GF2NP from the ASN.1 sequence Characteristic-two
-CRYPTOPP_DLL GF2NP * CRYPTOPP_API BERDecodeGF2NP(BufferedTransformation &bt);
-
-NAMESPACE_END
-
-#ifndef __BORLANDC__
-NAMESPACE_BEGIN(std)
-template<> inline void swap(CryptoPP::PolynomialMod2 &a, CryptoPP::PolynomialMod2 &b)
-{
-	a.swap(b);
-}
-NAMESPACE_END
-#endif
-
-#if CRYPTOPP_MSC_VERSION
-# pragma warning(pop)
-#endif
-
-#endif
diff --git a/third_party/cryptoppwin/include/cryptopp/gfpcrypt.h b/third_party/cryptoppwin/include/cryptopp/gfpcrypt.h
deleted file mode 100644
index 741ee477..00000000
--- a/third_party/cryptoppwin/include/cryptopp/gfpcrypt.h
+++ /dev/null
@@ -1,1036 +0,0 @@
-// gfpcrypt.h - originally written and placed in the public domain by Wei Dai
-//              RFC6979 deterministic signatures added by Douglas Roark
-//              ECGDSA added by Jeffrey Walton
-
-/// \file gfpcrypt.h
-/// \brief Classes and functions for schemes based on Discrete Logs (DL) over GF(p)
-
-#ifndef CRYPTOPP_GFPCRYPT_H
-#define CRYPTOPP_GFPCRYPT_H
-
-#include "config.h"
-
-#if CRYPTOPP_MSC_VERSION
-# pragma warning(push)
-# pragma warning(disable: 4189 4231 4275)
-#endif
-
-#include "cryptlib.h"
-#include "pubkey.h"
-#include "integer.h"
-#include "modexppc.h"
-#include "algparam.h"
-#include "smartptr.h"
-#include "sha.h"
-#include "asn.h"
-#include "hmac.h"
-#include "misc.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters;
-
-/// \brief Integer-based GroupParameters specialization
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE DL_GroupParameters_IntegerBased : public ASN1CryptoMaterial >
-{
-    typedef DL_GroupParameters_IntegerBased ThisClass;
-
-public:
-    virtual ~DL_GroupParameters_IntegerBased() {}
-
-    /// \brief Initialize a group parameters over integers
-    /// \param params the group parameters
-    void Initialize(const DL_GroupParameters_IntegerBased ¶ms)
-        {Initialize(params.GetModulus(), params.GetSubgroupOrder(), params.GetSubgroupGenerator());}
-
-    /// \brief Create a group parameters over integers
-    /// \param rng a RandomNumberGenerator derived class
-    /// \param pbits the size of p, in bits
-    /// \details This function overload of Initialize() creates a new private key because it
-    ///  takes a RandomNumberGenerator() as a parameter. If you have an existing keypair,
-    ///  then use one of the other Initialize() overloads.
-    void Initialize(RandomNumberGenerator &rng, unsigned int pbits)
-        {GenerateRandom(rng, MakeParameters("ModulusSize", (int)pbits));}
-
-    /// \brief Initialize a group parameters over integers
-    /// \param p the modulus
-    /// \param g the generator
-    void Initialize(const Integer &p, const Integer &g)
-        {SetModulusAndSubgroupGenerator(p, g); SetSubgroupOrder(ComputeGroupOrder(p)/2);}
-
-    /// \brief Initialize a group parameters over integers
-    /// \param p the modulus
-    /// \param q the subgroup order
-    /// \param g the generator
-    void Initialize(const Integer &p, const Integer &q, const Integer &g)
-        {SetModulusAndSubgroupGenerator(p, g); SetSubgroupOrder(q);}
-
-    // ASN1Object interface
-    void BERDecode(BufferedTransformation &bt);
-    void DEREncode(BufferedTransformation &bt) const;
-
-    /// \brief Generate a random key
-    /// \param rng a RandomNumberGenerator to produce keying material
-    /// \param alg additional initialization parameters
-    /// \details Recognised NameValuePairs are ModulusSize and
-    ///  SubgroupOrderSize (optional)
-    /// \throw KeyingErr if a key can't be generated or algorithm parameters
-    ///  are invalid
-    void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg);
-
-    /// \brief Get a named value
-    /// \param name the name of the object or value to retrieve
-    /// \param valueType reference to a variable that receives the value
-    /// \param pValue void pointer to a variable that receives the value
-    /// \return true if the value was retrieved, false otherwise
-    /// \details GetVoidValue() retrieves the value of name if it exists.
-    /// \note GetVoidValue() is an internal function and should be implemented
-    ///  by derived classes. Users should use one of the other functions instead.
-    /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(),
-    ///  GetRequiredParameter() and GetRequiredIntParameter()
-    bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const;
-
-    /// \brief Initialize or reinitialize this key
-    /// \param source NameValuePairs to assign
-    void AssignFrom(const NameValuePairs &source);
-
-    // DL_GroupParameters
-    const Integer & GetSubgroupOrder() const {return m_q;}
-    Integer GetGroupOrder() const {return GetFieldType() == 1 ? GetModulus()-Integer::One() : GetModulus()+Integer::One();}
-    bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const;
-    bool ValidateElement(unsigned int level, const Integer &element, const DL_FixedBasePrecomputation *precomp) const;
-
-    /// \brief Determine if subgroup membership check is fast
-    /// \return true or false
-    bool FastSubgroupCheckAvailable() const {return GetCofactor() == 2;}
-
-    /// \brief Encodes the element
-    /// \param reversible flag indicating the encoding format
-    /// \param element reference to the element to encode
-    /// \param encoded destination byte array for the encoded element
-    /// \details EncodeElement() must be implemented in a derived class.
-    /// \pre COUNTOF(encoded) == GetEncodedElementSize()
-    /// \sa GetEncodedElementSize(), DecodeElement(), Cygwin
-    ///  i386 crash at -O3
-    void EncodeElement(bool reversible, const Element &element, byte *encoded) const;
-
-    /// \brief Retrieve the encoded element's size
-    /// \param reversible flag indicating the encoding format
-    /// \return encoded element's size, in bytes
-    /// \details The format of the encoded element varies by the underlying
-    ///  type of the element and the reversible flag.
-    /// \sa EncodeElement(), DecodeElement()
-    unsigned int GetEncodedElementSize(bool reversible) const;
-
-    /// \brief Decodes the element
-    /// \param encoded byte array with the encoded element
-    /// \param checkForGroupMembership flag indicating if the element should be validated
-    /// \return Element after decoding
-    /// \details DecodeElement() must be implemented in a derived class.
-    /// \pre COUNTOF(encoded) == GetEncodedElementSize()
-    /// \sa GetEncodedElementSize(), EncodeElement()
-    Integer DecodeElement(const byte *encoded, bool checkForGroupMembership) const;
-
-    /// \brief Converts an element to an Integer
-    /// \param element the element to convert to an Integer
-    /// \return Element after converting to an Integer
-    /// \details ConvertElementToInteger() must be implemented in a derived class.
-    Integer ConvertElementToInteger(const Element &element) const
-        {return element;}
-
-    /// \brief Retrieve the maximum exponent for the group
-    /// \return the maximum exponent for the group
-    Integer GetMaxExponent() const;
-
-    /// \brief Retrieve the OID of the algorithm
-    /// \return OID of the algorithm
-    OID GetAlgorithmID() const;
-
-    /// \brief Retrieve the modulus for the group
-    /// \return the modulus for the group
-    virtual const Integer & GetModulus() const =0;
-
-    /// \brief Set group parameters
-    /// \param p the prime modulus
-    /// \param g the group generator
-    virtual void SetModulusAndSubgroupGenerator(const Integer &p, const Integer &g) =0;
-
-    /// \brief Set subgroup order
-    /// \param q the subgroup order
-    void SetSubgroupOrder(const Integer &q)
-        {m_q = q; ParametersChanged();}
-
-    static std::string CRYPTOPP_API StaticAlgorithmNamePrefix() {return "";}
-
-protected:
-    Integer ComputeGroupOrder(const Integer &modulus) const
-        {return modulus-(GetFieldType() == 1 ? 1 : -1);}
-
-    // GF(p) = 1, GF(p^2) = 2
-    virtual int GetFieldType() const =0;
-    virtual unsigned int GetDefaultSubgroupOrderSize(unsigned int modulusSize) const;
-
-private:
-    Integer m_q;
-};
-
-/// \brief Integer-based GroupParameters default implementation
-/// \tparam GROUP_PRECOMP group parameters precomputation specialization
-/// \tparam BASE_PRECOMP base class precomputation specialization
-template  >
-class CRYPTOPP_NO_VTABLE DL_GroupParameters_IntegerBasedImpl : public DL_GroupParametersImpl
-{
-    typedef DL_GroupParameters_IntegerBasedImpl ThisClass;
-
-public:
-    typedef typename GROUP_PRECOMP::Element Element;
-
-    virtual ~DL_GroupParameters_IntegerBasedImpl() {}
-
-    // GeneratibleCryptoMaterial interface
-    bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
-        {return GetValueHelper(this, name, valueType, pValue).Assignable();}
-
-    void AssignFrom(const NameValuePairs &source)
-        {AssignFromHelper(this, source);}
-
-    // DL_GroupParameters
-    const DL_FixedBasePrecomputation & GetBasePrecomputation() const {return this->m_gpc;}
-    DL_FixedBasePrecomputation & AccessBasePrecomputation() {return this->m_gpc;}
-
-    // IntegerGroupParameters
-    /// \brief Retrieve the modulus for the group
-    /// \return the modulus for the group
-    const Integer & GetModulus() const {return this->m_groupPrecomputation.GetModulus();}
-
-    /// \brief Retrieves a reference to the group generator
-    /// \return const reference to the group generator
-    const Integer & GetGenerator() const {return this->m_gpc.GetBase(this->GetGroupPrecomputation());}
-
-    void SetModulusAndSubgroupGenerator(const Integer &p, const Integer &g)        // these have to be set together
-        {this->m_groupPrecomputation.SetModulus(p); this->m_gpc.SetBase(this->GetGroupPrecomputation(), g); this->ParametersChanged();}
-
-    // non-inherited
-    bool operator==(const DL_GroupParameters_IntegerBasedImpl &rhs) const
-        {return GetModulus() == rhs.GetModulus() && GetGenerator() == rhs.GetGenerator() && this->GetSubgroupOrder() == rhs.GetSubgroupOrder();}
-    bool operator!=(const DL_GroupParameters_IntegerBasedImpl &rhs) const
-        {return !operator==(rhs);}
-};
-
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_IntegerBasedImpl;
-
-/// \brief GF(p) group parameters
-class CRYPTOPP_DLL DL_GroupParameters_GFP : public DL_GroupParameters_IntegerBasedImpl
-{
-public:
-    virtual ~DL_GroupParameters_GFP() {}
-
-    /// \brief Determines if an element is an identity
-    /// \param element element to check
-    /// \return true if the element is an identity, false otherwise
-    /// \details The identity element or or neutral element is a special element
-    ///  in a group that leaves other elements unchanged when combined with it.
-    /// \details IsIdentity() must be implemented in a derived class.
-    bool IsIdentity(const Integer &element) const {return element == Integer::One();}
-
-    /// \brief Exponentiates a base to multiple exponents
-    /// \param results an array of Elements
-    /// \param base the base to raise to the exponents
-    /// \param exponents an array of exponents
-    /// \param exponentsCount the number of exponents in the array
-    /// \details SimultaneousExponentiate() raises the base to each exponent in
-    ///  the exponents array and stores the result at the respective position in
-    ///  the results array.
-    /// \details SimultaneousExponentiate() must be implemented in a derived class.
-    /// \pre COUNTOF(results) == exponentsCount
-    /// \pre COUNTOF(exponents) == exponentsCount
-    void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const;
-
-    /// \brief Get a named value
-    /// \param name the name of the object or value to retrieve
-    /// \param valueType reference to a variable that receives the value
-    /// \param pValue void pointer to a variable that receives the value
-    /// \return true if the value was retrieved, false otherwise
-    /// \details GetVoidValue() retrieves the value of name if it exists.
-    /// \note GetVoidValue() is an internal function and should be implemented
-    ///  by derived classes. Users should use one of the other functions instead.
-    /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(),
-    ///  GetRequiredParameter() and GetRequiredIntParameter()
-    bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
-    {
-        return GetValueHelper(this, name, valueType, pValue).Assignable();
-    }
-
-    // used by MQV
-    Element MultiplyElements(const Element &a, const Element &b) const;
-    Element CascadeExponentiate(const Element &element1, const Integer &exponent1, const Element &element2, const Integer &exponent2) const;
-
-protected:
-    int GetFieldType() const {return 1;}
-};
-
-/// \brief GF(p) group parameters that default to safe primes
-class CRYPTOPP_DLL DL_GroupParameters_GFP_DefaultSafePrime : public DL_GroupParameters_GFP
-{
-public:
-    typedef NoCofactorMultiplication DefaultCofactorOption;
-
-    virtual ~DL_GroupParameters_GFP_DefaultSafePrime() {}
-
-protected:
-    unsigned int GetDefaultSubgroupOrderSize(unsigned int modulusSize) const {return modulusSize-1;}
-};
-
-/// ElGamal encryption for safe interop
-/// \sa On the
-///  (in)security of ElGamal in OpenPGP,
-///  Issue 1059,
-///  CVE-2021-40530
-/// \since Crypto++ 8.6
-class CRYPTOPP_DLL DL_GroupParameters_ElGamal : public DL_GroupParameters_GFP_DefaultSafePrime
-{
-public:
-    typedef NoCofactorMultiplication DefaultCofactorOption;
-
-    virtual ~DL_GroupParameters_ElGamal() {}
-
-	Integer GetMaxExponent() const
-	{
-		return GetSubgroupOrder()-1;
-	}
-};
-
-/// \brief GDSA algorithm
-/// \tparam T FieldElement type or class
-/// \details FieldElement T can be Integer, ECP or EC2N.
-template 
-class DL_Algorithm_GDSA : public DL_ElgamalLikeSignatureAlgorithm
-{
-public:
-    CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "DSA-1363";}
-
-    virtual ~DL_Algorithm_GDSA() {}
-
-    void Sign(const DL_GroupParameters ¶ms, const Integer &x, const Integer &k, const Integer &e, Integer &r, Integer &s) const
-    {
-        const Integer &q = params.GetSubgroupOrder();
-        r %= q;
-        Integer kInv = k.InverseMod(q);
-        s = (kInv * (x*r + e)) % q;
-        CRYPTOPP_ASSERT(!!r && !!s);
-    }
-
-    bool Verify(const DL_GroupParameters ¶ms, const DL_PublicKey &publicKey, const Integer &e, const Integer &r, const Integer &s) const
-    {
-        const Integer &q = params.GetSubgroupOrder();
-        if (r>=q || r<1 || s>=q || s<1)
-            return false;
-
-        Integer w = s.InverseMod(q);
-        Integer u1 = (e * w) % q;
-        Integer u2 = (r * w) % q;
-        // verify r == (g^u1 * y^u2 mod p) mod q
-        return r == params.ConvertElementToInteger(publicKey.CascadeExponentiateBaseAndPublicElement(u1, u2)) % q;
-    }
-};
-
-/// \brief DSA signature algorithm based on RFC 6979
-/// \tparam T FieldElement type or class
-/// \tparam H HashTransformation derived class
-/// \details FieldElement T can be Integer, ECP or EC2N.
-/// \sa RFC 6979, Deterministic Usage of the
-///  Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)
-/// \since Crypto++ 6.0
-template 
-class DL_Algorithm_DSA_RFC6979 : public DL_Algorithm_GDSA, public DeterministicSignatureAlgorithm
-{
-public:
-    CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "DSA-RFC6979";}
-
-    virtual ~DL_Algorithm_DSA_RFC6979() {}
-
-    bool IsProbabilistic() const
-        {return false;}
-    bool IsDeterministic() const
-        {return true;}
-
-    // Deterministic K
-    Integer GenerateRandom(const Integer &x, const Integer &q, const Integer &e) const
-    {
-        static const byte zero = 0, one = 1;
-        const size_t qlen = q.BitCount();
-        const size_t rlen = BitsToBytes(qlen);
-
-        // Step (a) - formatted E(m)
-        SecByteBlock BH(e.MinEncodedSize());
-        e.Encode(BH, BH.size());
-        BH = bits2octets(BH, q);
-
-        // Step (a) - private key to byte array
-        SecByteBlock BX(STDMAX(rlen, x.MinEncodedSize()));
-        x.Encode(BX, BX.size());
-
-        // Step (b)
-        SecByteBlock V(H::DIGESTSIZE);
-        std::fill(V.begin(), V.begin()+H::DIGESTSIZE, one);
-
-        // Step (c)
-        SecByteBlock K(H::DIGESTSIZE);
-        std::fill(K.begin(), K.begin()+H::DIGESTSIZE, zero);
-
-        // Step (d)
-        m_hmac.SetKey(K, K.size());
-        m_hmac.Update(V, V.size());
-        m_hmac.Update(&zero, 1);
-        m_hmac.Update(BX, BX.size());
-        m_hmac.Update(BH, BH.size());
-        m_hmac.TruncatedFinal(K, K.size());
-
-        // Step (e)
-        m_hmac.SetKey(K, K.size());
-        m_hmac.Update(V, V.size());
-        m_hmac.TruncatedFinal(V, V.size());
-
-        // Step (f)
-        m_hmac.SetKey(K, K.size());
-        m_hmac.Update(V, V.size());
-        m_hmac.Update(&one, 1);
-        m_hmac.Update(BX, BX.size());
-        m_hmac.Update(BH, BH.size());
-        m_hmac.TruncatedFinal(K, K.size());
-
-        // Step (g)
-        m_hmac.SetKey(K, K.size());
-        m_hmac.Update(V, V.size());
-        m_hmac.TruncatedFinal(V, V.size());
-
-        Integer k;
-        SecByteBlock temp(rlen);
-        for (;;)
-        {
-            // We want qlen bits, but we support only hash functions with an output length
-            //   multiple of 8; hence, we will gather rlen bits, i.e., rolen octets.
-            size_t toff = 0;
-            while (toff < rlen)
-            {
-                m_hmac.Update(V, V.size());
-                m_hmac.TruncatedFinal(V, V.size());
-
-                size_t cc = STDMIN(V.size(), temp.size() - toff);
-                memcpy_s(temp+toff, temp.size() - toff, V, cc);
-                toff += cc;
-            }
-
-            k = bits2int(temp, qlen);
-            if (k > 0 && k < q)
-                break;
-
-            // k is not in the proper range; update K and V, and loop.
-            m_hmac.Update(V, V.size());
-            m_hmac.Update(&zero, 1);
-            m_hmac.TruncatedFinal(K, K.size());
-
-            m_hmac.SetKey(K, K.size());
-            m_hmac.Update(V, V.size());
-            m_hmac.TruncatedFinal(V, V.size());
-        }
-
-        return k;
-    }
-
-protected:
-
-    Integer bits2int(const SecByteBlock& bits, size_t qlen) const
-    {
-        Integer ret(bits, bits.size());
-        size_t blen = bits.size()*8;
-
-        if (blen > qlen)
-            ret >>= blen - qlen;
-
-        return ret;
-    }
-
-    // RFC 6979 support function. Takes an integer and converts it into bytes that
-    // are the same length as an elliptic curve's order.
-    SecByteBlock int2octets(const Integer& val, size_t rlen) const
-    {
-        SecByteBlock block(val.MinEncodedSize());
-        val.Encode(block, val.MinEncodedSize());
-
-        if (block.size() == rlen)
-            return block;
-
-        // The least significant bytes are the ones we need to preserve.
-        SecByteBlock t(rlen);
-        if (block.size() > rlen)
-        {
-            size_t offset = block.size() - rlen;
-            std::memcpy(t, block + offset, rlen);
-        }
-        else // block.size() < rlen
-        {
-            size_t offset = rlen - block.size();
-            std::memset(t, '\x00', offset);
-            std::memcpy(t + offset, block, rlen - offset);
-        }
-
-        return t;
-    }
-
-    // Turn a stream of bits into a set of bytes with the same length as an elliptic
-    // curve's order.
-    SecByteBlock bits2octets(const SecByteBlock& in, const Integer& q) const
-    {
-        Integer b2 = bits2int(in, q.BitCount());
-        Integer b1 = b2 - q;
-        return int2octets(b1.IsNegative() ? b2 : b1, q.ByteCount());
-    }
-
-private:
-    mutable H m_hash;
-    mutable HMAC m_hmac;
-};
-
-/// \brief German Digital Signature Algorithm
-/// \tparam T FieldElement type or class
-/// \details FieldElement T can be Integer, ECP or EC2N.
-/// \details The Digital Signature Scheme ECGDSA does not define the algorithm over integers. Rather, the
-///  signature algorithm is only defined over elliptic curves. However, the library design is such that the
-///  generic algorithm reside in gfpcrypt.h.
-/// \sa Erwin Hess, Marcus Schafheutle, and Pascale Serf 
-///  The Digital Signature Scheme ECGDSA (October 24, 2006)
-template 
-class DL_Algorithm_GDSA_ISO15946 : public DL_ElgamalLikeSignatureAlgorithm
-{
-public:
-    CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "GDSA-ISO15946";}
-
-    virtual ~DL_Algorithm_GDSA_ISO15946() {}
-
-    void Sign(const DL_GroupParameters ¶ms, const Integer &x, const Integer &k, const Integer &e, Integer &r, Integer &s) const
-    {
-        const Integer &q = params.GetSubgroupOrder();
-        // r = x(k * G) mod q
-        r = params.ConvertElementToInteger(params.ExponentiateBase(k)) % q;
-        // s = (k * r - h(m)) * d_A mod q
-        s = (k * r - e) * x % q;
-        CRYPTOPP_ASSERT(!!r && !!s);
-    }
-
-    bool Verify(const DL_GroupParameters ¶ms, const DL_PublicKey &publicKey, const Integer &e, const Integer &r, const Integer &s) const
-    {
-        const Integer &q = params.GetSubgroupOrder();
-        if (r>=q || r<1 || s>=q || s<1)
-            return false;
-
-        const Integer& rInv = r.InverseMod(q);
-        const Integer u1 = (rInv * e) % q;
-        const Integer u2 = (rInv * s) % q;
-        // verify x(G^u1 + P_A^u2) mod q
-        return r == params.ConvertElementToInteger(publicKey.CascadeExponentiateBaseAndPublicElement(u1, u2)) % q;
-    }
-};
-
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA;
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_DSA_RFC6979;
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_DSA_RFC6979;
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_DSA_RFC6979;
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_DSA_RFC6979;
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_DSA_RFC6979;
-
-/// \brief NR algorithm
-/// \tparam T FieldElement type or class
-/// \details FieldElement T can be Integer, ECP or EC2N.
-template 
-class DL_Algorithm_NR : public DL_ElgamalLikeSignatureAlgorithm
-{
-public:
-    CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "NR";}
-
-    virtual ~DL_Algorithm_NR() {}
-
-    void Sign(const DL_GroupParameters ¶ms, const Integer &x, const Integer &k, const Integer &e, Integer &r, Integer &s) const
-    {
-        const Integer &q = params.GetSubgroupOrder();
-        r = (r + e) % q;
-        s = (k - x*r) % q;
-        CRYPTOPP_ASSERT(!!r);
-    }
-
-    bool Verify(const DL_GroupParameters ¶ms, const DL_PublicKey &publicKey, const Integer &e, const Integer &r, const Integer &s) const
-    {
-        const Integer &q = params.GetSubgroupOrder();
-        if (r>=q || r<1 || s>=q)
-            return false;
-
-        // check r == (m_g^s * m_y^r + m) mod m_q
-        return r == (params.ConvertElementToInteger(publicKey.CascadeExponentiateBaseAndPublicElement(s, r)) + e) % q;
-    }
-};
-
-/// \brief Discrete Log (DL) public key in GF(p) groups
-/// \tparam GP GroupParameters derived class
-/// \details DSA public key format is defined in 7.3.3 of RFC 2459. The    private key format is defined in 12.9 of PKCS #11 v2.10.
-template 
-class DL_PublicKey_GFP : public DL_PublicKeyImpl
-{
-public:
-    virtual ~DL_PublicKey_GFP() {}
-
-    /// \brief Initialize a public key over GF(p)
-    /// \param params the group parameters
-    /// \param y the public element
-    void Initialize(const DL_GroupParameters_IntegerBased ¶ms, const Integer &y)
-        {this->AccessGroupParameters().Initialize(params); this->SetPublicElement(y);}
-
-    /// \brief Initialize a public key over GF(p)
-    /// \param p the modulus
-    /// \param g the generator
-    /// \param y the public element
-    void Initialize(const Integer &p, const Integer &g, const Integer &y)
-        {this->AccessGroupParameters().Initialize(p, g); this->SetPublicElement(y);}
-
-    /// \brief Initialize a public key over GF(p)
-    /// \param p the modulus
-    /// \param q the subgroup order
-    /// \param g the generator
-    /// \param y the public element
-    void Initialize(const Integer &p, const Integer &q, const Integer &g, const Integer &y)
-        {this->AccessGroupParameters().Initialize(p, q, g); this->SetPublicElement(y);}
-
-    // X509PublicKey
-    void BERDecodePublicKey(BufferedTransformation &bt, bool, size_t)
-        {this->SetPublicElement(Integer(bt));}
-    void DEREncodePublicKey(BufferedTransformation &bt) const
-        {this->GetPublicElement().DEREncode(bt);}
-};
-
-/// \brief Discrete Log (DL) private key in GF(p) groups
-/// \tparam GP GroupParameters derived class
-template 
-class DL_PrivateKey_GFP : public DL_PrivateKeyImpl
-{
-public:
-    virtual ~DL_PrivateKey_GFP();
-
-    /// \brief Create a private key
-    /// \param rng a RandomNumberGenerator derived class
-    /// \param modulusBits the size of the modulus, in bits
-    /// \details This function overload of Initialize() creates a new private key because it
-    ///  takes a RandomNumberGenerator() as a parameter. If you have an existing keypair,
-    ///  then use one of the other Initialize() overloads.
-    void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits)
-        {this->GenerateRandomWithKeySize(rng, modulusBits);}
-
-    /// \brief Create a private key
-    /// \param rng a RandomNumberGenerator derived class
-    /// \param p the modulus
-    /// \param g the generator
-    /// \details This function overload of Initialize() creates a new private key because it
-    ///  takes a RandomNumberGenerator() as a parameter. If you have an existing keypair,
-    ///  then use one of the other Initialize() overloads.
-    void Initialize(RandomNumberGenerator &rng, const Integer &p, const Integer &g)
-        {this->GenerateRandom(rng, MakeParameters("Modulus", p)("SubgroupGenerator", g));}
-
-    /// \brief Create a private key
-    /// \param rng a RandomNumberGenerator derived class
-    /// \param p the modulus
-    /// \param q the subgroup order
-    /// \param g the generator
-    /// \details This function overload of Initialize() creates a new private key because it
-    ///  takes a RandomNumberGenerator() as a parameter. If you have an existing keypair,
-    ///  then use one of the other Initialize() overloads.
-    void Initialize(RandomNumberGenerator &rng, const Integer &p, const Integer &q, const Integer &g)
-        {this->GenerateRandom(rng, MakeParameters("Modulus", p)("SubgroupOrder", q)("SubgroupGenerator", g));}
-
-    /// \brief Initialize a private key over GF(p)
-    /// \param params the group parameters
-    /// \param x the private exponent
-    void Initialize(const DL_GroupParameters_IntegerBased ¶ms, const Integer &x)
-        {this->AccessGroupParameters().Initialize(params); this->SetPrivateExponent(x);}
-
-    /// \brief Initialize a private key over GF(p)
-    /// \param p the modulus
-    /// \param g the generator
-    /// \param x the private exponent
-    void Initialize(const Integer &p, const Integer &g, const Integer &x)
-        {this->AccessGroupParameters().Initialize(p, g); this->SetPrivateExponent(x);}
-
-    /// \brief Initialize a private key over GF(p)
-    /// \param p the modulus
-    /// \param q the subgroup order
-    /// \param g the generator
-    /// \param x the private exponent
-    void Initialize(const Integer &p, const Integer &q, const Integer &g, const Integer &x)
-        {this->AccessGroupParameters().Initialize(p, q, g); this->SetPrivateExponent(x);}
-};
-
-// Out-of-line dtor due to AIX and GCC, http://github.com/weidai11/cryptopp/issues/499
-template 
-DL_PrivateKey_GFP::~DL_PrivateKey_GFP() {}
-
-/// \brief Discrete Log (DL) signing/verification keys in GF(p) groups
-struct DL_SignatureKeys_GFP
-{
-    typedef DL_GroupParameters_GFP GroupParameters;
-    typedef DL_PublicKey_GFP PublicKey;
-    typedef DL_PrivateKey_GFP PrivateKey;
-};
-
-/// \brief Discrete Log (DL) encryption/decryption keys in GF(p) groups
-struct DL_CryptoKeys_GFP
-{
-    typedef DL_GroupParameters_GFP_DefaultSafePrime GroupParameters;
-    typedef DL_PublicKey_GFP PublicKey;
-    typedef DL_PrivateKey_GFP PrivateKey;
-};
-
-/// ElGamal encryption keys for safe interop
-/// \sa On the
-///  (in)security of ElGamal in OpenPGP,
-///  Issue 1059,
-///  CVE-2021-40530
-/// \since Crypto++ 8.6
-struct DL_CryptoKeys_ElGamal
-{
-    typedef DL_GroupParameters_ElGamal GroupParameters;
-    typedef DL_PublicKey_GFP PublicKey;
-    typedef DL_PrivateKey_GFP PrivateKey;
-};
-
-/// \brief DSA signature scheme
-/// \tparam H HashTransformation derived class
-/// \sa DSA-1363
-/// \since Crypto++ 1.0 for DSA, Crypto++ 5.6.2 for DSA2
-template 
-struct GDSA : public DL_SS<
-    DL_SignatureKeys_GFP,
-    DL_Algorithm_GDSA,
-    DL_SignatureMessageEncodingMethod_DSA,
-    H>
-{
-};
-
-/// \brief NR signature scheme
-/// \tparam H HashTransformation derived class
-/// \sa NR
-template 
-struct NR : public DL_SS<
-    DL_SignatureKeys_GFP,
-    DL_Algorithm_NR,
-    DL_SignatureMessageEncodingMethod_NR,
-    H>
-{
-};
-
-/// \brief DSA group parameters
-/// \details These are GF(p) group parameters that are allowed by the DSA standard
-/// \sa DL_Keys_DSA
-/// \since Crypto++ 1.0
-class CRYPTOPP_DLL DL_GroupParameters_DSA : public DL_GroupParameters_GFP
-{
-public:
-    virtual ~DL_GroupParameters_DSA() {}
-
-    /// \brief Check the group for errors
-    /// \param rng RandomNumberGenerator for objects which use randomized testing
-    /// \param level level of thoroughness
-    /// \return true if the tests succeed, false otherwise
-    /// \details ValidateGroup() also checks that the lengths of p and q are allowed
-    ///  by the DSA standard.
-    /// \details There are four levels of thoroughness:
-    ///  
    - ///
  • 0 - using this object won't cause a crash or exception - ///
  • 1 - this object will probably function, and encrypt, sign, other operations correctly - ///
  • 2 - ensure this object will function correctly, and perform reasonable security checks - ///
  • 3 - perform reasonable security checks, and do checks that may take a long time - ///
- /// \details Level 0 does not require a RandomNumberGenerator. A NullRNG() can be used for level 0. - /// Level 1 may not check for weak keys and such. Levels 2 and 3 are recommended. - bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const; - - /// \brief Generate a random key or crypto parameters - /// \param rng a RandomNumberGenerator to produce keying material - /// \param alg additional initialization parameters - /// \details NameValuePairs can be ModulusSize alone; or Modulus, SubgroupOrder, and - /// SubgroupGenerator. ModulusSize must be between DSA::MIN_PRIME_LENGTH and - /// DSA::MAX_PRIME_LENGTH, and divisible by DSA::PRIME_LENGTH_MULTIPLE. - /// \details An example of changing the modulus size using NameValuePairs is shown below. - ///
-    ///  AlgorithmParameters params = MakeParameters
-    ///    (Name::ModulusSize(), 2048);
-    ///
-    ///  DL_GroupParameters_DSA groupParams;
-    ///  groupParams.GenerateRandom(prng, params);
-    /// 
- /// \throw KeyingErr if a key can't be generated or algorithm parameters are invalid. - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg); - - /// \brief Check the prime length for errors - /// \param pbits number of bits in the prime number - /// \return true if the tests succeed, false otherwise - static bool CRYPTOPP_API IsValidPrimeLength(unsigned int pbits) - {return pbits >= MIN_PRIME_LENGTH && pbits <= MAX_PRIME_LENGTH && pbits % PRIME_LENGTH_MULTIPLE == 0;} - - /// \brief DSA prime length - enum { - /// \brief Minimum prime length - MIN_PRIME_LENGTH = 1024, - /// \brief Maximum prime length - MAX_PRIME_LENGTH = 3072, - /// \brief Prime length multiple - PRIME_LENGTH_MULTIPLE = 1024 - }; -}; - -template -class DSA2; - -/// \brief DSA keys -/// \sa DL_GroupParameters_DSA -/// \since Crypto++ 1.0 -struct DL_Keys_DSA -{ - typedef DL_PublicKey_GFP PublicKey; - typedef DL_PrivateKey_WithSignaturePairwiseConsistencyTest, DSA2 > PrivateKey; -}; - -/// \brief DSA signature scheme -/// \tparam H HashTransformation derived class -/// \details The class is named DSA2 instead of DSA for backwards compatibility because -/// DSA was a non-template class. -/// \details DSA default method GenerateRandom uses a 2048-bit modulus and a 224-bit subgoup by default. -/// The modulus can be changed using the following code: -///
-///  DSA::PrivateKey privateKey;
-///  privateKey.GenerateRandomWithKeySize(prng, 2048);
-/// 
-/// \details The subgroup order can be changed using the following code: -///
-///  AlgorithmParameters params = MakeParameters
-///    (Name::ModulusSize(), 2048)
-///    (Name::SubgroupOrderSize(), 256);
-///
-///  DSA::PrivateKey privateKey;
-///  privateKey.GenerateRandom(prng, params);
-/// 
-/// \sa DSA, as specified in FIPS 186-3, -/// Digital Signature Algorithm on the wiki, and -/// NameValuePairs on the wiki. -/// \since Crypto++ 1.0 for DSA, Crypto++ 5.6.2 for DSA2, Crypto++ 6.1 for 2048-bit modulus. -template -class DSA2 : public DL_SS< - DL_Keys_DSA, - DL_Algorithm_GDSA, - DL_SignatureMessageEncodingMethod_DSA, - H, - DSA2 > -{ -public: - static std::string CRYPTOPP_API StaticAlgorithmName() {return "DSA/" + (std::string)H::StaticAlgorithmName();} -}; - -/// \brief DSA deterministic signature scheme -/// \tparam H HashTransformation derived class -/// \sa DSA-1363 -/// \since Crypto++ 1.0 for DSA, Crypto++ 5.6.2 for DSA2 -template -struct DSA_RFC6979 : public DL_SS< - DL_SignatureKeys_GFP, - DL_Algorithm_DSA_RFC6979, - DL_SignatureMessageEncodingMethod_DSA, - H, - DSA_RFC6979 > -{ - static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("DSA-RFC6979/") + H::StaticAlgorithmName();} -}; - -/// DSA with SHA-1, typedef'd for backwards compatibility -typedef DSA2 DSA; - -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_GFP; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_GFP; -CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_WithSignaturePairwiseConsistencyTest, DSA2 >; - -/// \brief P1363 based XOR Encryption Method -/// \tparam MAC MessageAuthenticationCode derived class used for MAC computation -/// \tparam DHAES_MODE flag indicating DHAES mode -/// \tparam LABEL_OCTETS flag indicating the label is octet count -/// \details DL_EncryptionAlgorithm_Xor is based on an early P1363 draft, which itself appears to be based on an -/// early Certicom SEC-1 draft (or an early SEC-1 draft was based on a P1363 draft). Crypto++ 4.2 used it in its Integrated -/// Ecryption Schemes with NoCofactorMultiplication, DHAES_MODE=false and LABEL_OCTETS=true. -/// \details If you need this method for Crypto++ 4.2 compatibility, then use the ECIES template class with -/// NoCofactorMultiplication, DHAES_MODE=false and LABEL_OCTETS=true. -/// \details If you need this method for Bouncy Castle 1.54 and Botan 1.11 compatibility, then use the ECIES template class with -/// NoCofactorMultiplication, DHAES_MODE=true and LABEL_OCTETS=false. -/// \details Bouncy Castle 1.54 and Botan 1.11 compatibility are the default template parameters. -/// \since Crypto++ 4.0 -template -class DL_EncryptionAlgorithm_Xor : public DL_SymmetricEncryptionAlgorithm -{ -public: - virtual ~DL_EncryptionAlgorithm_Xor() {} - - bool ParameterSupported(const char *name) const {return strcmp(name, Name::EncodingParameters()) == 0;} - size_t GetSymmetricKeyLength(size_t plaintextLength) const - {return plaintextLength + static_cast(MAC::DEFAULT_KEYLENGTH);} - size_t GetSymmetricCiphertextLength(size_t plaintextLength) const - {return plaintextLength + static_cast(MAC::DIGESTSIZE);} - size_t GetMaxSymmetricPlaintextLength(size_t ciphertextLength) const - {return SaturatingSubtract(ciphertextLength, static_cast(MAC::DIGESTSIZE));} - void SymmetricEncrypt(RandomNumberGenerator &rng, const byte *key, const byte *plaintext, size_t plaintextLength, byte *ciphertext, const NameValuePairs ¶meters) const - { - CRYPTOPP_UNUSED(rng); - const byte *cipherKey = NULLPTR, *macKey = NULLPTR; - if (DHAES_MODE) - { - macKey = key; - cipherKey = key + MAC::DEFAULT_KEYLENGTH; - } - else - { - cipherKey = key; - macKey = key + plaintextLength; - } - - ConstByteArrayParameter encodingParameters; - parameters.GetValue(Name::EncodingParameters(), encodingParameters); - - if (plaintextLength) // Coverity finding - xorbuf(ciphertext, plaintext, cipherKey, plaintextLength); - - MAC mac(macKey); - mac.Update(ciphertext, plaintextLength); - mac.Update(encodingParameters.begin(), encodingParameters.size()); - if (DHAES_MODE) - { - byte L[8]; - PutWord(false, BIG_ENDIAN_ORDER, L, (LABEL_OCTETS ? word64(encodingParameters.size()) : 8 * word64(encodingParameters.size()))); - mac.Update(L, 8); - } - mac.Final(ciphertext + plaintextLength); - } - DecodingResult SymmetricDecrypt(const byte *key, const byte *ciphertext, size_t ciphertextLength, byte *plaintext, const NameValuePairs ¶meters) const - { - size_t plaintextLength = GetMaxSymmetricPlaintextLength(ciphertextLength); - const byte *cipherKey, *macKey; - if (DHAES_MODE) - { - macKey = key; - cipherKey = key + MAC::DEFAULT_KEYLENGTH; - } - else - { - cipherKey = key; - macKey = key + plaintextLength; - } - - ConstByteArrayParameter encodingParameters; - parameters.GetValue(Name::EncodingParameters(), encodingParameters); - - MAC mac(macKey); - mac.Update(ciphertext, plaintextLength); - mac.Update(encodingParameters.begin(), encodingParameters.size()); - if (DHAES_MODE) - { - byte L[8]; - PutWord(false, BIG_ENDIAN_ORDER, L, (LABEL_OCTETS ? word64(encodingParameters.size()) : 8 * word64(encodingParameters.size()))); - mac.Update(L, 8); - } - if (!mac.Verify(ciphertext + plaintextLength)) - return DecodingResult(); - - if (plaintextLength) // Coverity finding - xorbuf(plaintext, ciphertext, cipherKey, plaintextLength); - - return DecodingResult(plaintextLength); - } -}; - -/// \brief P1363 based Key Derivation Method -/// \tparam T FieldElement type or class -/// \tparam DHAES_MODE flag indicating DHAES mode -/// \tparam KDF key derivation function -/// \details FieldElement T can be Integer, ECP or EC2N. -template -class DL_KeyDerivationAlgorithm_P1363 : public DL_KeyDerivationAlgorithm -{ -public: - virtual ~DL_KeyDerivationAlgorithm_P1363() {} - - bool ParameterSupported(const char *name) const {return strcmp(name, Name::KeyDerivationParameters()) == 0;} - void Derive(const DL_GroupParameters ¶ms, byte *derivedKey, size_t derivedLength, const T &agreedElement, const T &ephemeralPublicKey, const NameValuePairs ¶meters) const - { - SecByteBlock agreedSecret; - if (DHAES_MODE) - { - agreedSecret.New(params.GetEncodedElementSize(true) + params.GetEncodedElementSize(false)); - params.EncodeElement(true, ephemeralPublicKey, agreedSecret); - params.EncodeElement(false, agreedElement, agreedSecret + params.GetEncodedElementSize(true)); - } - else - { - agreedSecret.New(params.GetEncodedElementSize(false)); - params.EncodeElement(false, agreedElement, agreedSecret); - } - - ConstByteArrayParameter derivationParameters; - parameters.GetValue(Name::KeyDerivationParameters(), derivationParameters); - KDF::DeriveKey(derivedKey, derivedLength, agreedSecret, agreedSecret.size(), derivationParameters.begin(), derivationParameters.size()); - } -}; - -/// \brief Discrete Log Integrated Encryption Scheme -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \tparam HASH HashTransformation derived class used for key drivation and MAC computation -/// \tparam DHAES_MODE flag indicating if the MAC includes addition context parameters such as the label -/// \tparam LABEL_OCTETS flag indicating if the label size is specified in octets or bits -/// \details DLIES is an Integer based Integrated Encryption Scheme (IES). The scheme combines a Key Encapsulation Method (KEM) -/// with a Data Encapsulation Method (DEM) and a MAC tag. The scheme is -/// IND-CCA2, which is a strong notion of security. -/// You should prefer an Integrated Encryption Scheme over homegrown schemes. -/// \details The library's original implementation is based on an early P1363 draft, which itself appears to be based on an early Certicom -/// SEC-1 draft (or an early SEC-1 draft was based on a P1363 draft). Crypto++ 4.2 used the early draft in its Integrated Ecryption -/// Schemes with NoCofactorMultiplication, DHAES_MODE=false and LABEL_OCTETS=true. -/// \details If you desire an Integrated Encryption Scheme with Crypto++ 4.2 compatibility, then use the DLIES template class with -/// NoCofactorMultiplication, DHAES_MODE=false and LABEL_OCTETS=true. -/// \details If you desire an Integrated Encryption Scheme with Bouncy Castle 1.54 and Botan 1.11 compatibility, then use the DLIES -/// template class with NoCofactorMultiplication, DHAES_MODE=true and LABEL_OCTETS=false. -/// \details The default template parameters ensure compatibility with Bouncy Castle 1.54 and Botan 1.11. The combination of -/// IncompatibleCofactorMultiplication and DHAES_MODE=true is recommended for best efficiency and security. -/// SHA1 is used for compatibility reasons, but it can be changed if desired. SHA-256 or another hash will likely improve the -/// security provided by the MAC. The hash is also used in the key derivation function as a PRF. -/// \details Below is an example of constructing a Crypto++ 4.2 compatible DLIES encryptor and decryptor. -///
-///    AutoSeededRandomPool prng;
-///    DL_PrivateKey_GFP key;
-///    key.Initialize(prng, 2048);
-///
-///    DLIES::Decryptor decryptor(key);
-///    DLIES::Encryptor encryptor(decryptor);
-/// 
-/// \sa ECIES, Discrete Log Integrated Encryption Scheme (DLIES), -/// Martínez, Encinas, and Ávila's A Survey of the Elliptic -/// Curve Integrated Encryption Schemes -/// \since Crypto++ 4.0, Crypto++ 5.7 for Bouncy Castle and Botan compatibility -template -struct DLIES - : public DL_ES< - DL_CryptoKeys_GFP, - DL_KeyAgreementAlgorithm_DH, - DL_KeyDerivationAlgorithm_P1363 >, - DL_EncryptionAlgorithm_Xor, DHAES_MODE, LABEL_OCTETS>, - DLIES<> > -{ - static std::string CRYPTOPP_API StaticAlgorithmName() {return "DLIES";} // TODO: fix this after name is standardized -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/gost.h b/third_party/cryptoppwin/include/cryptopp/gost.h deleted file mode 100644 index 87082a11..00000000 --- a/third_party/cryptoppwin/include/cryptopp/gost.h +++ /dev/null @@ -1,66 +0,0 @@ -// gost.h - originally written and placed in the public domain by Wei Dai - -/// \file gost.h -/// \brief Classes for the GIST block cipher - -#ifndef CRYPTOPP_GOST_H -#define CRYPTOPP_GOST_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief GOST block cipher information -/// \since Crypto++ 2.1 -struct GOST_Info : public FixedBlockSize<8>, public FixedKeyLength<32> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "GOST";} -}; - -/// \brief GOST block cipher -/// \sa GOST -/// \since Crypto++ 2.1 -class GOST : public GOST_Info, public BlockCipherDocumentation -{ - /// \brief GOST block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - static void PrecalculateSTable(); - - static const byte sBox[8][16]; - static volatile bool sTableCalculated; - static word32 sTable[4][256]; - - FixedSizeSecBlock m_key; - }; - - /// \brief GOST block cipher encryption operation - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief GOST block cipher decryption operation - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef GOST::Encryption GOSTEncryption; -typedef GOST::Decryption GOSTDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/gzip.h b/third_party/cryptoppwin/include/cryptopp/gzip.h deleted file mode 100644 index 437a5209..00000000 --- a/third_party/cryptoppwin/include/cryptopp/gzip.h +++ /dev/null @@ -1,144 +0,0 @@ -// gzip.h - originally written and placed in the public domain by Wei Dai - -/// \file gzip.h -/// \brief GZIP compression and decompression (RFC 1952) - -#ifndef CRYPTOPP_GZIP_H -#define CRYPTOPP_GZIP_H - -#include "cryptlib.h" -#include "zdeflate.h" -#include "zinflate.h" -#include "crc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief GZIP Compression (RFC 1952) -class Gzip : public Deflator -{ -public: - /// \brief Construct a Gzip compressor - /// \param attachment an attached transformation - /// \param deflateLevel the deflate level - /// \param log2WindowSize the window size - /// \param detectUncompressible flag to detect if data is compressible - /// \details detectUncompressible makes it faster to process uncompressible files, but - /// if a file has both compressible and uncompressible parts, it may fail to compress - /// some of the compressible parts. - Gzip(BufferedTransformation *attachment=NULLPTR, unsigned int deflateLevel=DEFAULT_DEFLATE_LEVEL, unsigned int log2WindowSize=DEFAULT_LOG2_WINDOW_SIZE, bool detectUncompressible=true) - : Deflator(attachment, deflateLevel, log2WindowSize, detectUncompressible), m_totalLen(0), m_filetime(0) { } - - /// \brief Construct a Gzip compressor - /// \param parameters a set of NameValuePairs to initialize this object - /// \param attachment an attached transformation - /// \details Possible parameter names: Log2WindowSize, DeflateLevel, DetectUncompressible - Gzip(const NameValuePairs ¶meters, BufferedTransformation *attachment=NULLPTR) - : Deflator(parameters, attachment), m_totalLen(0), m_filetime(0) - { - IsolatedInitialize(parameters); - } - - /// \param filetime the filetime to set in the header. The application is responsible for setting it. - void SetFiletime(word32 filetime) { m_filetime = filetime; } - - /// \param filename the original filename to set in the header. The application is responsible for setting it. - /// RFC 1952 requires a ISO/IEC 8859-1 encoding. - /// \param throwOnEncodingError if throwOnEncodingError is true, then the filename is checked to ensure it is - /// ISO/IEC 8859-1 encoded. If the filename does not adhere to ISO/IEC 8859-1, then a InvalidDataFormat - /// is thrown. If throwOnEncodingError is false then the filename is not checked. - void SetFilename(const std::string& filename, bool throwOnEncodingError = false); - - /// \param comment the comment to set in the header. The application is responsible for setting it. - /// RFC 1952 requires a ISO/IEC 8859-1 encoding. - /// \param throwOnEncodingError if throwOnEncodingError is true, then the comment is checked to ensure it is - /// ISO/IEC 8859-1 encoded. If the comment does not adhere to ISO/IEC 8859-1, then a InvalidDataFormat - /// is thrown. If throwOnEncodingError is false then the comment is not checked. - void SetComment(const std::string& comment, bool throwOnEncodingError = false); - - void IsolatedInitialize(const NameValuePairs ¶meters); - -protected: - enum {MAGIC1=0x1f, MAGIC2=0x8b, // flags for the header - DEFLATED=8, FAST=4, SLOW=2}; - - enum FLAG_MASKS { - FILENAME=8, COMMENTS=16}; - - void WritePrestreamHeader(); - void ProcessUncompressedData(const byte *string, size_t length); - void WritePoststreamTail(); - - word32 m_totalLen; - CRC32 m_crc; - - word32 m_filetime; - std::string m_filename; - std::string m_comment; -}; - -/// \brief GZIP Decompression (RFC 1952) -class Gunzip : public Inflator -{ -public: - typedef Inflator::Err Err; - - /// \brief Exception thrown when a header decoding error occurs - class HeaderErr : public Err {public: HeaderErr() : Err(INVALID_DATA_FORMAT, "Gunzip: header decoding error") {}}; - /// \brief Exception thrown when the tail is too short - class TailErr : public Err {public: TailErr() : Err(INVALID_DATA_FORMAT, "Gunzip: tail too short") {}}; - /// \brief Exception thrown when a CRC error occurs - class CrcErr : public Err {public: CrcErr() : Err(DATA_INTEGRITY_CHECK_FAILED, "Gunzip: CRC check error") {}}; - /// \brief Exception thrown when a length error occurs - class LengthErr : public Err {public: LengthErr() : Err(DATA_INTEGRITY_CHECK_FAILED, "Gunzip: length check error") {}}; - - /// \brief Construct a Gunzip decompressor - /// \param attachment an attached transformation - /// \param repeat decompress multiple compressed streams in series - /// \param autoSignalPropagation 0 to turn off MessageEnd signal - Gunzip(BufferedTransformation *attachment = NULLPTR, bool repeat = false, int autoSignalPropagation = -1); - - /// \return the filetime of the stream as set in the header. The application is responsible for setting it on the decompressed file. - word32 GetFiletime() const { return m_filetime; } - - /// \return the filename of the stream as set in the header. The application is responsible for setting it on the decompressed file. - /// \param throwOnEncodingError if throwOnEncodingError is true, then the filename is checked to ensure it is - /// ISO/IEC 8859-1 encoded. If the filename does not adhere to ISO/IEC 8859-1, then a InvalidDataFormat is thrown. - /// If throwOnEncodingError is false then the filename is not checked. - const std::string& GetFilename(bool throwOnEncodingError = false) const; - - /// \return the comment of the stream as set in the header. - /// \param throwOnEncodingError if throwOnEncodingError is true, then the comment is checked to ensure it is - /// ISO/IEC 8859-1 encoded. If the comment does not adhere to ISO/IEC 8859-1, then a InvalidDataFormat is thrown. - /// If throwOnEncodingError is false then the comment is not checked. - const std::string& GetComment(bool throwOnEncodingError = false) const; - -protected: - enum { - /// \brief First header magic value - MAGIC1=0x1f, - /// \brief Second header magic value - MAGIC2=0x8b, - /// \brief Deflated flag - DEFLATED=8 - }; - - enum FLAG_MASKS { - CONTINUED=2, EXTRA_FIELDS=4, FILENAME=8, COMMENTS=16, ENCRYPTED=32}; - - unsigned int MaxPrestreamHeaderSize() const {return 1024;} - void ProcessPrestreamHeader(); - void ProcessDecompressedData(const byte *string, size_t length); - unsigned int MaxPoststreamTailSize() const {return 8;} - void ProcessPoststreamTail(); - - word32 m_length; - CRC32 m_crc; - - word32 m_filetime; - std::string m_filename; - std::string m_comment; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/hashfwd.h b/third_party/cryptoppwin/include/cryptopp/hashfwd.h deleted file mode 100644 index 5e1309da..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hashfwd.h +++ /dev/null @@ -1,38 +0,0 @@ -// hashfwd.h - written and placed in the public domain by Jeffrey Walton - -/// \file hashfwd.h -/// \brief Forward declarations for hash functions used in signature encoding methods - -#ifndef CRYPTOPP_HASHFWD_H -#define CRYPTOPP_HASHFWD_H - -#include "config.h" - -NAMESPACE_BEGIN(CryptoPP) - -class SHA1; -class SHA224; -class SHA256; -class SHA384; -class SHA512; - -class SHA3_256; -class SHA3_384; -class SHA3_512; - -class SHAKE128; -class SHAKE256; - -class Tiger; -class RIPEMD128; -class RIPEMD160; -class Whirlpool; - -namespace Weak1 { - class MD2; - class MD5; -} - -NAMESPACE_END - -#endif // CRYPTOPP_HASHFWD_H diff --git a/third_party/cryptoppwin/include/cryptopp/hc128.h b/third_party/cryptoppwin/include/cryptopp/hc128.h deleted file mode 100644 index a35352c9..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hc128.h +++ /dev/null @@ -1,67 +0,0 @@ -// hc128.h - written and placed in the public domain by Jeffrey Walton -// based on public domain code by Hongjun Wu. -// -// The reference materials and source files are available at -// The eSTREAM Project, http://www.ecrypt.eu.org/stream/e2-hc128.html. - -/// \file hc128.h -/// \brief Classes for HC-128 stream cipher -/// \sa The -/// eSTREAM Project | HC-128 and -/// Crypto++ Wiki | HC-128. -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_HC128_H -#define CRYPTOPP_HC128_H - -#include "strciphr.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief HC-128 stream cipher information -/// \since Crypto++ 8.0 -struct HC128Info : public FixedKeyLength<16, SimpleKeyingInterface::UNIQUE_IV, 16> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "HC-128"; } -}; - -/// \brief HC-128 stream cipher implementation -/// \since Crypto++ 8.0 -class HC128Policy : public AdditiveCipherConcretePolicy, public HC128Info -{ -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length); - bool CanOperateKeystream() const { return true; } - bool CipherIsRandomAccess() const { return false; } - - void GenerateKeystream(word32* keystream); - void SetupUpdate(); - -private: - FixedSizeSecBlock m_X; - FixedSizeSecBlock m_Y; - FixedSizeSecBlock m_key; - FixedSizeSecBlock m_iv; - word32 m_T[1024]; - word32 m_ctr; -}; - -/// \brief HC-128 stream cipher -/// \details HC-128 is a stream cipher developed by Hongjun Wu. HC-128 is one of the -/// final four Profile 1 (software) ciphers selected for the eSTREAM portfolio. -/// \sa The -/// eSTREAM Project | HC-128 and -/// Crypto++ Wiki | HC-128. -/// \since Crypto++ 8.0 -struct HC128 : public HC128Info, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal >, HC128Info> Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_HC128_H diff --git a/third_party/cryptoppwin/include/cryptopp/hc256.h b/third_party/cryptoppwin/include/cryptopp/hc256.h deleted file mode 100644 index 169d0b95..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hc256.h +++ /dev/null @@ -1,69 +0,0 @@ -// hc256.h - written and placed in the public domain by Jeffrey Walton -// based on public domain code by Hongjun Wu. -// -// The reference materials and source files are available at -// The eSTREAM Project, http://www.ecrypt.eu.org/stream/hc256.html. - -/// \file hc256.h -/// \brief Classes for HC-256 stream cipher -/// \sa The -/// eSTREAM Project | HC-256 and -/// Crypto++ Wiki | HC-128. -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_HC256_H -#define CRYPTOPP_HC256_H - -#include "strciphr.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief HC-256 stream cipher information -/// \since Crypto++ 8.0 -struct HC256Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 32> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "HC-256"; } -}; - -/// \brief HC-256 stream cipher implementation -/// \since Crypto++ 8.0 -class HC256Policy : public AdditiveCipherConcretePolicy, public HC256Info -{ -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length); - bool CanOperateKeystream() const { return true; } - bool CipherIsRandomAccess() const { return false; } - - word32 H1(word32 u); - word32 H2(word32 u); - - void GenerateKeystream(word32* keystream); - word32 Generate(); - -private: - FixedSizeSecBlock m_key; - FixedSizeSecBlock m_iv; - word32 m_P[1024]; - word32 m_Q[1024]; - word32 m_ctr; -}; - -/// \brief HC-256 stream cipher -/// \details HC-256 is a stream cipher developed by Hongjun Wu. HC-256 is the -/// successor to HC-128 from the eSTREAM project. -/// \sa The -/// eSTREAM Project | HC-256 and -/// Crypto++ Wiki | HC-128. -/// \since Crypto++ 8.0 -struct HC256 : public HC256Info, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal >, HC256Info> Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_HC256_H diff --git a/third_party/cryptoppwin/include/cryptopp/hex.h b/third_party/cryptoppwin/include/cryptopp/hex.h deleted file mode 100644 index bcf2bd03..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hex.h +++ /dev/null @@ -1,50 +0,0 @@ -// hex.h - originally written and placed in the public domain by Wei Dai - -/// \file hex.h -/// \brief Classes for HexEncoder and HexDecoder - -#ifndef CRYPTOPP_HEX_H -#define CRYPTOPP_HEX_H - -#include "cryptlib.h" -#include "basecode.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Converts given data to base 16 -class CRYPTOPP_DLL HexEncoder : public SimpleProxyFilter -{ -public: - /// \brief Construct a HexEncoder - /// \param attachment a BufferedTrasformation to attach to this object - /// \param uppercase a flag indicating uppercase output - /// \param groupSize the size of the output grouping - /// \param separator the separator to use between groups - /// \param terminator the terminator append after processing - HexEncoder(BufferedTransformation *attachment = NULLPTR, bool uppercase = true, int groupSize = 0, const std::string &separator = ":", const std::string &terminator = "") - : SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment) - { - IsolatedInitialize(MakeParameters(Name::Uppercase(), uppercase)(Name::GroupSize(), groupSize)(Name::Separator(), ConstByteArrayParameter(separator))(Name::Terminator(), ConstByteArrayParameter(terminator))); - } - - void IsolatedInitialize(const NameValuePairs ¶meters); -}; - -/// \brief Decode base 16 data back to bytes -class CRYPTOPP_DLL HexDecoder : public BaseN_Decoder -{ -public: - /// \brief Construct a HexDecoder - /// \param attachment a BufferedTrasformation to attach to this object - HexDecoder(BufferedTransformation *attachment = NULLPTR) - : BaseN_Decoder(GetDefaultDecodingLookupArray(), 4, attachment) {} - - void IsolatedInitialize(const NameValuePairs ¶meters); - -private: - static const int * CRYPTOPP_API GetDefaultDecodingLookupArray(); -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/hight.h b/third_party/cryptoppwin/include/cryptopp/hight.h deleted file mode 100644 index c1ecd79a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hight.h +++ /dev/null @@ -1,81 +0,0 @@ -// hight.h - written and placed in the public domain by Kim Sung Hee and Jeffrey Walton -// Based on "HIGHT: A New Block Cipher Suitable for Low-Resource Device" -// by Deukjo Hong, Jaechul Sung, Seokhie Hong, Jongin Lim, Sangjin Lee, -// Bon-Seok Koo, Changhoon Lee, Donghoon Chang, Jesang Lee, Kitae Jeong, -// Hyun Kim, Jongsung Kim, and Seongtaek Chee - -/// \file hight.h -/// \brief Classes for the HIGHT block cipher -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_HIGHT_H -#define CRYPTOPP_HIGHT_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" -#include "algparam.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief HIGHT block cipher information -/// \since Crypto++ 8.0 -struct HIGHT_Info : public FixedBlockSize<8>, public FixedKeyLength<16> -{ - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize - return "HIGHT"; - } -}; - -/// \brief HIGHT 64-bit block cipher -/// \details HIGHT provides 64-bit block size. The valid key size is 128-bits. -/// \note Crypto++ provides a byte oriented implementation -/// \sa HIGHT, -/// Korea Internet & Security -/// Agency website -/// \since Crypto++ 8.0 -class CRYPTOPP_NO_VTABLE HIGHT : public HIGHT_Info, public BlockCipherDocumentation -{ -public: - /// \brief HIGHT block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - - FixedSizeSecBlock m_rkey; - mutable FixedSizeSecBlock m_xx; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef HIGHT::Encryption HIGHTEncryption; -typedef HIGHT::Decryption HIGHTDecryption; - -NAMESPACE_END - -#endif // CRYPTOPP_HIGHT_H diff --git a/third_party/cryptoppwin/include/cryptopp/hkdf.h b/third_party/cryptoppwin/include/cryptopp/hkdf.h deleted file mode 100644 index 490f212e..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hkdf.h +++ /dev/null @@ -1,179 +0,0 @@ -// hkdf.h - written and placed in public domain by Jeffrey Walton. - -/// \file hkdf.h -/// \brief Classes for HKDF from RFC 5869 -/// \since Crypto++ 5.6.3 - -#ifndef CRYPTOPP_HKDF_H -#define CRYPTOPP_HKDF_H - -#include "cryptlib.h" -#include "secblock.h" -#include "algparam.h" -#include "hmac.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Extract-and-Expand Key Derivation Function (HKDF) -/// \tparam T HashTransformation class -/// \sa Cryptographic Extraction and Key -/// Derivation: The HKDF Scheme and -/// HMAC-based Extract-and-Expand Key -/// Derivation Function (HKDF) -/// \since Crypto++ 5.6.3 -template -class HKDF : public KeyDerivationFunction -{ -public: - virtual ~HKDF() {} - - static std::string StaticAlgorithmName () { - const std::string name(std::string("HKDF(") + - std::string(T::StaticAlgorithmName()) + std::string(")")); - return name; - } - - // KeyDerivationFunction interface - std::string AlgorithmName() const { - return StaticAlgorithmName(); - } - - // KeyDerivationFunction interface - size_t MaxDerivedKeyLength() const { - return static_cast(T::DIGESTSIZE) * 255; - } - - // KeyDerivationFunction interface - size_t GetValidDerivedLength(size_t keylength) const; - - // KeyDerivationFunction interface - size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const NameValuePairs& params) const; - - /// \brief Derive a key from a seed - /// \param derived the derived output buffer - /// \param derivedLen the size of the derived buffer, in bytes - /// \param secret the seed input buffer - /// \param secretLen the size of the secret buffer, in bytes - /// \param salt the salt input buffer - /// \param saltLen the size of the salt buffer, in bytes - /// \param info the additional input buffer - /// \param infoLen the size of the info buffer, in bytes - /// \return the number of iterations performed - /// \throw InvalidDerivedKeyLength if derivedLen is invalid for the scheme - /// \details DeriveKey() provides a standard interface to derive a key from - /// a seed and other parameters. Each class that derives from KeyDerivationFunction - /// provides an overload that accepts most parameters used by the derivation function. - /// \details salt and info can be nullptr with 0 length. - /// HKDF is unusual in that a non-NULL salt with length 0 is different than a - /// NULL salt. A NULL salt causes HKDF to use a string of 0's - /// of length T::DIGESTSIZE for the salt. - /// \details HKDF always returns 1 because it only performs 1 iteration. Other - /// derivation functions, like PBKDF's, will return more interesting values. - size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const byte *salt, size_t saltLen, const byte* info, size_t infoLen) const; - -protected: - // KeyDerivationFunction interface - const Algorithm & GetAlgorithm() const { - return *this; - } - - // If salt is absent (NULL), then use the NULL vector. Missing is different than - // EMPTY (Non-NULL, 0 length). The length of s_NullVector used depends on the Hash - // function. SHA-256 will use 32 bytes of s_NullVector. - typedef byte NullVectorType[T::DIGESTSIZE]; - static const NullVectorType& GetNullVector() { - static const NullVectorType s_NullVector = {0}; - return s_NullVector; - } -}; - -template -size_t HKDF::GetValidDerivedLength(size_t keylength) const -{ - if (keylength > MaxDerivedKeyLength()) - return MaxDerivedKeyLength(); - return keylength; -} - -template -size_t HKDF::DeriveKey(byte *derived, size_t derivedLen, - const byte *secret, size_t secretLen, const NameValuePairs& params) const -{ - CRYPTOPP_ASSERT(secret && secretLen); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - - ConstByteArrayParameter p; - SecByteBlock salt, info; - - if (params.GetValue("Salt", p)) - salt.Assign(p.begin(), p.size()); - else - salt.Assign(GetNullVector(), T::DIGESTSIZE); - - if (params.GetValue("Info", p)) - info.Assign(p.begin(), p.size()); - else - info.Assign(GetNullVector(), 0); - - return DeriveKey(derived, derivedLen, secret, secretLen, salt.begin(), salt.size(), info.begin(), info.size()); -} - -template -size_t HKDF::DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const byte *salt, size_t saltLen, const byte* info, size_t infoLen) const -{ - CRYPTOPP_ASSERT(secret && secretLen); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - - ThrowIfInvalidDerivedKeyLength(derivedLen); - - // HKDF business logic. NULL is different than empty. - if (salt == NULLPTR) - { - salt = GetNullVector(); - saltLen = T::DIGESTSIZE; - } - - // key is PRK from the RFC, salt is IKM from the RFC - HMAC hmac; - SecByteBlock key(T::DIGESTSIZE), buffer(T::DIGESTSIZE); - - // Extract - hmac.SetKey(salt, saltLen); - hmac.CalculateDigest(key, secret, secretLen); - - // Key - hmac.SetKey(key.begin(), key.size()); - byte block = 0; - - // Expand - while (derivedLen > 0) - { - if (block++) {hmac.Update(buffer, buffer.size());} - if (infoLen) {hmac.Update(info, infoLen);} - hmac.CalculateDigest(buffer, &block, 1); - -#if CRYPTOPP_MSC_VERSION - const size_t digestSize = static_cast(T::DIGESTSIZE); - const size_t segmentLen = STDMIN(derivedLen, digestSize); - memcpy_s(derived, segmentLen, buffer, segmentLen); -#else - const size_t digestSize = static_cast(T::DIGESTSIZE); - const size_t segmentLen = STDMIN(derivedLen, digestSize); - std::memcpy(derived, buffer, segmentLen); -#endif - - derived += segmentLen; - derivedLen -= segmentLen; - } - - return 1; -} - -NAMESPACE_END - -#endif // CRYPTOPP_HKDF_H diff --git a/third_party/cryptoppwin/include/cryptopp/hmac.h b/third_party/cryptoppwin/include/cryptopp/hmac.h deleted file mode 100644 index 79ba1aad..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hmac.h +++ /dev/null @@ -1,80 +0,0 @@ -// hmac.h - originally written and placed in the public domain by Wei Dai - -/// \file hmac.h -/// \brief Classes for HMAC message authentication codes - -#ifndef CRYPTOPP_HMAC_H -#define CRYPTOPP_HMAC_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief HMAC information -/// \details HMAC_Base derives from VariableKeyLength and MessageAuthenticationCode -/// \since Crypto++ 2.1 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE HMAC_Base : public VariableKeyLength<16, 0, INT_MAX>, public MessageAuthenticationCode -{ -public: - virtual ~HMAC_Base() {} - - /// \brief Construct a HMAC_Base - HMAC_Base() : m_innerHashKeyed(false) {} - void UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs ¶ms); - - void Restart(); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *mac, size_t size); - unsigned int OptimalBlockSize() const {return const_cast(this)->AccessHash().OptimalBlockSize();} - unsigned int DigestSize() const {return const_cast(this)->AccessHash().DigestSize();} - -protected: - virtual HashTransformation & AccessHash() =0; - byte * AccessIpad() {return m_buf;} - byte * AccessOpad() {return m_buf + AccessHash().BlockSize();} - byte * AccessInnerHash() {return m_buf + 2*AccessHash().BlockSize();} - -private: - void KeyInnerHash(); - - SecByteBlock m_buf; - bool m_innerHashKeyed; -}; - -/// \brief HMAC -/// \tparam T HashTransformation derived class -/// \details HMAC derives from MessageAuthenticationCodeImpl. It calculates the HMAC using -/// HMAC(K, text) = H(K XOR opad, H(K XOR ipad, text)). -/// \sa HMAC -/// \since Crypto++ 2.1 -template -class HMAC : public MessageAuthenticationCodeImpl > -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE=T::DIGESTSIZE); - CRYPTOPP_CONSTANT(BLOCKSIZE=T::BLOCKSIZE); - - virtual ~HMAC() {} - - /// \brief Construct a HMAC - HMAC() {} - /// \brief Construct a HMAC - /// \param key the HMAC key - /// \param length the size of the HMAC key - HMAC(const byte *key, size_t length=HMAC_Base::DEFAULT_KEYLENGTH) - {this->SetKey(key, length);} - - static std::string StaticAlgorithmName() {return std::string("HMAC(") + T::StaticAlgorithmName() + ")";} - std::string AlgorithmName() const {return std::string("HMAC(") + m_hash.AlgorithmName() + ")";} - std::string AlgorithmProvider() const {return m_hash.AlgorithmProvider();} - -private: - HashTransformation & AccessHash() {return m_hash;} - - T m_hash; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/hmqv.h b/third_party/cryptoppwin/include/cryptopp/hmqv.h deleted file mode 100644 index 4736b055..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hmqv.h +++ /dev/null @@ -1,417 +0,0 @@ -// hmqv.h - written and placed in the public domain by Uri Blumenthal -// Shamelessly based upon Wei Dai's MQV source files - -#ifndef CRYPTOPP_HMQV_H -#define CRYPTOPP_HMQV_H - -/// \file hmqv.h -/// \brief Classes for Hashed Menezes-Qu-Vanstone key agreement in GF(p) -/// \since Crypto++ 5.6.4 - -#include "gfpcrypt.h" -#include "algebra.h" -#include "sha.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Hashed Menezes-Qu-Vanstone in GF(p) -/// \details This implementation follows Hugo Krawczyk's HMQV: A High-Performance -/// Secure Diffie-Hellman Protocol. Note: this implements HMQV only. HMQV-C with Key Confirmation is not provided. -/// \sa MQV, HMQV, FHMQV, and AuthenticatedKeyAgreementDomain -/// \since Crypto++ 5.6.4 -template -class HMQV_Domain: public AuthenticatedKeyAgreementDomain -{ -public: - typedef GROUP_PARAMETERS GroupParameters; - typedef typename GroupParameters::Element Element; - typedef HMQV_Domain Domain; - - virtual ~HMQV_Domain() {} - - /// \brief Construct a HMQV domain - /// \param clientRole flag indicating initiator or recipient - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - HMQV_Domain(bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) {} - - /// \brief Construct a HMQV domain - /// \param params group parameters and options - /// \param clientRole flag indicating initiator or recipient - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - HMQV_Domain(const GroupParameters ¶ms, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer), m_groupParameters(params) {} - - /// \brief Construct a HMQV domain - /// \param bt BufferedTransformation with group parameters and options - /// \param clientRole flag indicating initiator or recipient - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - HMQV_Domain(BufferedTransformation &bt, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.BERDecode(bt);} - - /// \brief Construct a HMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1 is passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - HMQV_Domain(T1 v1, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1);} - - /// \brief Construct a HMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1 and v2 are passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - HMQV_Domain(T1 v1, T2 v2, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1, v2);} - - /// \brief Construct a HMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1, v2 and v3 are passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - HMQV_Domain(T1 v1, T2 v2, T3 v3, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1, v2, v3);} - - /// \brief Construct a HMQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \tparam T4 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \param v4 third parameter - /// \param clientRole flag indicating initiator or recipient - /// \details v1, v2, v3 and v4 are passed directly to the GROUP_PARAMETERS object. - /// \details clientRole = true indicates initiator, and - /// clientRole = false indicates recipient or server. - template - HMQV_Domain(T1 v1, T2 v2, T3 v3, T4 v4, bool clientRole = true) - : m_role(clientRole ? RoleClient : RoleServer) - {m_groupParameters.Initialize(v1, v2, v3, v4);} - -public: - - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a const reference - const GroupParameters & GetGroupParameters() const {return m_groupParameters;} - - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a non-const reference - GroupParameters & AccessGroupParameters() {return m_groupParameters;} - - /// \brief Retrieves the crypto parameters for this domain - /// \return the crypto parameters for this domain as a non-const reference - CryptoParameters & AccessCryptoParameters() {return AccessAbstractGroupParameters();} - - /// \brief Provides the size of the agreed value - /// \return size of agreed value produced in this domain - /// \details The length is calculated using GetEncodedElementSize(false), - /// which means the element is encoded in a non-reversible format. A - /// non-reversible format means its a raw byte array, and it lacks presentation - /// format like an ASN.1 BIT_STRING or OCTET_STRING. - unsigned int AgreedValueLength() const - {return GetAbstractGroupParameters().GetEncodedElementSize(false);} - - /// \brief Provides the size of the static private key - /// \return size of static private keys in this domain - /// \details The length is calculated using the byte count of the subgroup order. - unsigned int StaticPrivateKeyLength() const - {return GetAbstractGroupParameters().GetSubgroupOrder().ByteCount();} - - /// \brief Provides the size of the static public key - /// \return size of static public keys in this domain - /// \details The length is calculated using GetEncodedElementSize(true), - /// which means the element is encoded in a reversible format. A reversible - /// format means it has a presentation format, and its an ANS.1 encoded element - /// or point. - unsigned int StaticPublicKeyLength() const - {return GetAbstractGroupParameters().GetEncodedElementSize(true);} - - /// \brief Generate static private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \details The private key is a random scalar used as an exponent in the range - /// [1,MaxExponent()]. - /// \pre COUNTOF(privateKey) == PrivateStaticKeyLength() - void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - { - Integer x(rng, Integer::One(), GetAbstractGroupParameters().GetMaxExponent()); - x.Encode(privateKey, StaticPrivateKeyLength()); - } - - /// \brief Generate a static public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \details The public key is an element or point on the curve, and its stored - /// in a revrsible format. A reversible format means it has a presentation - /// format, and its an ANS.1 encoded element or point. - /// \pre COUNTOF(publicKey) == PublicStaticKeyLength() - void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - CRYPTOPP_UNUSED(rng); - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(privateKey, StaticPrivateKeyLength()); - Element y = params.ExponentiateBase(x); - params.EncodeElement(true, y, publicKey); - } - - /// \brief Provides the size of the ephemeral private key - /// \return size of ephemeral private keys in this domain - /// \details An ephemeral private key is a private key and public key. - /// The serialized size is different than a static private key. - unsigned int EphemeralPrivateKeyLength() const {return StaticPrivateKeyLength() + StaticPublicKeyLength();} - - /// \brief Provides the size of the ephemeral public key - /// \return size of ephemeral public keys in this domain - /// \details An ephemeral public key is a public key. - /// The serialized size is the same as a static public key. - unsigned int EphemeralPublicKeyLength() const{return StaticPublicKeyLength();} - - /// \brief Generate ephemeral private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \pre COUNTOF(privateKey) == EphemeralPrivateKeyLength() - void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - { - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(rng, Integer::One(), params.GetMaxExponent()); - x.Encode(privateKey, StaticPrivateKeyLength()); - Element y = params.ExponentiateBase(x); - params.EncodeElement(true, y, privateKey+StaticPrivateKeyLength()); - } - - /// \brief Generate ephemeral public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \pre COUNTOF(publicKey) == EphemeralPublicKeyLength() - void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - CRYPTOPP_UNUSED(rng); - std::memcpy(publicKey, privateKey+StaticPrivateKeyLength(), EphemeralPublicKeyLength()); - } - - /// \brief Derive agreed value or shared secret - /// \param agreedValue the shared secret - /// \param staticPrivateKey your long term private key - /// \param ephemeralPrivateKey your ephemeral private key - /// \param staticOtherPublicKey couterparty's long term public key - /// \param ephemeralOtherPublicKey couterparty's ephemeral public key - /// \param validateStaticOtherPublicKey flag indicating validation - /// \return true upon success, false in case of failure - /// \details Agree() performs the authenticated key agreement. Agree() - /// derives a shared secret from your private keys and couterparty's - /// public keys. Each instance or run of the protocol should use a new - /// ephemeral key pair. - /// \details The other's ephemeral public key will always be validated at - /// Level 1 to ensure it is a point on the curve. - /// validateStaticOtherPublicKey determines how thoroughly other's - /// static public key is validated. If you have previously validated the - /// couterparty's static public key, then use - /// validateStaticOtherPublicKey=false to save time. - /// \pre COUNTOF(agreedValue) == AgreedValueLength() - /// \pre COUNTOF(staticPrivateKey) == StaticPrivateKeyLength() - /// \pre COUNTOF(ephemeralPrivateKey) == EphemeralPrivateKeyLength() - /// \pre COUNTOF(staticOtherPublicKey) == StaticPublicKeyLength() - /// \pre COUNTOF(ephemeralOtherPublicKey) == EphemeralPublicKeyLength() - bool Agree(byte *agreedValue, - const byte *staticPrivateKey, const byte *ephemeralPrivateKey, - const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, - bool validateStaticOtherPublicKey=true) const - { - const byte *XX = NULLPTR, *YY = NULLPTR, *AA = NULLPTR, *BB = NULLPTR; - size_t xxs = 0, yys = 0, aas = 0, bbs = 0; - - // Depending on the role, this will hold either A's or B's static - // (long term) public key. AA or BB will then point into tt. - SecByteBlock tt(StaticPublicKeyLength()); - - try - { - this->GetMaterial().DoQuickSanityCheck(); - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - - if(m_role == RoleServer) - { - Integer b(staticPrivateKey, StaticPrivateKeyLength()); - Element B = params.ExponentiateBase(b); - params.EncodeElement(true, B, tt); - - XX = ephemeralOtherPublicKey; - xxs = EphemeralPublicKeyLength(); - YY = ephemeralPrivateKey + StaticPrivateKeyLength(); - yys = EphemeralPublicKeyLength(); - AA = staticOtherPublicKey; - aas = StaticPublicKeyLength(); - BB = tt.BytePtr(); - bbs = tt.SizeInBytes(); - } - else - { - Integer a(staticPrivateKey, StaticPrivateKeyLength()); - Element A = params.ExponentiateBase(a); - params.EncodeElement(true, A, tt); - - XX = ephemeralPrivateKey + StaticPrivateKeyLength(); - xxs = EphemeralPublicKeyLength(); - YY = ephemeralOtherPublicKey; - yys = EphemeralPublicKeyLength(); - AA = tt.BytePtr(); - aas = tt.SizeInBytes(); - BB = staticOtherPublicKey; - bbs = StaticPublicKeyLength(); - } - - Element VV1 = params.DecodeElement(staticOtherPublicKey, validateStaticOtherPublicKey); - Element VV2 = params.DecodeElement(ephemeralOtherPublicKey, true); - - const Integer& q = params.GetSubgroupOrder(); - const unsigned int len /*bytes*/ = (((q.BitCount()+1)/2 +7)/8); - SecByteBlock dd(len), ee(len); - - // Compute $d = \hat{H}(X, \hat{B})$ - Hash(NULLPTR, XX, xxs, BB, bbs, dd.BytePtr(), dd.SizeInBytes()); - Integer d(dd.BytePtr(), dd.SizeInBytes()); - - // Compute $e = \hat{H}(Y, \hat{A})$ - Hash(NULLPTR, YY, yys, AA, aas, ee.BytePtr(), ee.SizeInBytes()); - Integer e(ee.BytePtr(), ee.SizeInBytes()); - - Element sigma; - if(m_role == RoleServer) - { - Integer y(ephemeralPrivateKey, StaticPrivateKeyLength()); - Integer b(staticPrivateKey, StaticPrivateKeyLength()); - Integer s_B = (y + e * b) % q; - - Element A = params.DecodeElement(AA, false); - Element X = params.DecodeElement(XX, false); - - Element t1 = params.ExponentiateElement(A, d); - Element t2 = m_groupParameters.MultiplyElements(X, t1); - - // $\sigma_B}=(X \cdot A^{d})^{s_B} - sigma = params.ExponentiateElement(t2, s_B); - } - else - { - Integer x(ephemeralPrivateKey, StaticPrivateKeyLength()); - Integer a(staticPrivateKey, StaticPrivateKeyLength()); - Integer s_A = (x + d * a) % q; - - Element B = params.DecodeElement(BB, false); - Element Y = params.DecodeElement(YY, false); - - Element t3 = params.ExponentiateElement(B, e); - Element t4 = m_groupParameters.MultiplyElements(Y, t3); - - // $\sigma_A}=(Y \cdot B^{e})^{s_A} - sigma = params.ExponentiateElement(t4, s_A); - } - Hash(&sigma, NULLPTR, 0, NULLPTR, 0, agreedValue, AgreedValueLength()); - } - catch (DL_BadElement &) - { - CRYPTOPP_ASSERT(0); - return false; - } - return true; - } - -protected: - // Hash invocation by client and server differ only in what keys - // each provides. - - inline void Hash(const Element* sigma, - const byte* e1, size_t e1len, // Ephemeral key and key length - const byte* s1, size_t s1len, // Static key and key length - byte* digest, size_t dlen) const - { - HASH hash; - size_t idx = 0, req = dlen; - size_t blk = STDMIN(dlen, (size_t)HASH::DIGESTSIZE); - - if(sigma) - { - if (e1len != 0 || s1len != 0) { - CRYPTOPP_ASSERT(0); - } - //Integer x = GetAbstractGroupParameters().ConvertElementToInteger(*sigma); - //SecByteBlock sbb(x.MinEncodedSize()); - //x.Encode(sbb.BytePtr(), sbb.SizeInBytes()); - SecByteBlock sbb(GetAbstractGroupParameters().GetEncodedElementSize(false)); - GetAbstractGroupParameters().EncodeElement(false, *sigma, sbb); - hash.Update(sbb.BytePtr(), sbb.SizeInBytes()); - } else { - if (e1len == 0 || s1len == 0) { - CRYPTOPP_ASSERT(0); - } - hash.Update(e1, e1len); - hash.Update(s1, s1len); - } - - hash.TruncatedFinal(digest, blk); - req -= blk; - - // All this to catch tail bytes for large curves and small hashes - while(req != 0) - { - hash.Update(&digest[idx], (size_t)HASH::DIGESTSIZE); - - idx += (size_t)HASH::DIGESTSIZE; - blk = STDMIN(req, (size_t)HASH::DIGESTSIZE); - hash.TruncatedFinal(&digest[idx], blk); - - req -= blk; - } - } - -private: - - // The paper uses Initiator and Recipient - make it classical. - enum KeyAgreementRole { RoleServer = 1, RoleClient }; - - DL_GroupParameters & AccessAbstractGroupParameters() - {return m_groupParameters;} - const DL_GroupParameters & GetAbstractGroupParameters() const - {return m_groupParameters;} - - GroupParameters m_groupParameters; - KeyAgreementRole m_role; -}; - -/// \brief Hashed Menezes-Qu-Vanstone in GF(p) -/// \details This implementation follows Hugo Krawczyk's HMQV: A High-Performance -/// Secure Diffie-Hellman Protocol. Note: this implements HMQV only. HMQV-C with Key Confirmation is not provided. -/// \sa HMQV, HMQV_Domain, FHMQV_Domain, AuthenticatedKeyAgreementDomain -/// \since Crypto++ 5.6.4 -typedef HMQV_Domain HMQV; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/hrtimer.h b/third_party/cryptoppwin/include/cryptopp/hrtimer.h deleted file mode 100644 index db6ad180..00000000 --- a/third_party/cryptoppwin/include/cryptopp/hrtimer.h +++ /dev/null @@ -1,134 +0,0 @@ -// hrtimer.h - originally written and placed in the public domain by Wei Dai - -/// \file hrtimer.h -/// \brief Classes for timers - -#ifndef CRYPTOPP_HRTIMER_H -#define CRYPTOPP_HRTIMER_H - -#include "config.h" - -#if !defined(HIGHRES_TIMER_AVAILABLE) || (defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(THREAD_TIMER_AVAILABLE)) -#include -#endif - -NAMESPACE_BEGIN(CryptoPP) - -#ifdef HIGHRES_TIMER_AVAILABLE - /// \brief TimerWord is a 64-bit word - typedef word64 TimerWord; -#else - /// \brief TimerWord is a clock_t - typedef clock_t TimerWord; -#endif - -/// \brief Base class for timers -/// \sa ThreadUserTimer, Timer -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TimerBase -{ -public: - /// \brief Unit of measure - /// \details Unit selects the unit of measure as returned by functions - /// ElapsedTimeAsDouble() and ElapsedTime(). - /// \sa ElapsedTimeAsDouble, ElapsedTime - enum Unit { - /// \brief Timer unit is seconds - /// \details All timers support seconds - SECONDS = 0, - /// \brief Timer unit is milliseconds - /// \details All timers support milliseconds - MILLISECONDS, - /// \brief Timer unit is microseconds - /// \details The timer requires hardware support microseconds - MICROSECONDS, - /// \brief Timer unit is nanoseconds - /// \details The timer requires hardware support nanoseconds - NANOSECONDS - }; - - /// \brief Construct a TimerBase - /// \param unit the unit of measure - /// \param stuckAtZero flag - TimerBase(Unit unit, bool stuckAtZero) - : m_timerUnit(unit), m_stuckAtZero(stuckAtZero), m_started(false) - , m_start(0), m_last(0) {} - - /// \brief Retrieve the current timer value - /// \return the current timer value - virtual TimerWord GetCurrentTimerValue() =0; - - /// \brief Retrieve ticks per second - /// \return ticks per second - /// \details TicksPerSecond() is not the timer resolution. It is a - /// conversion factor into seconds. - virtual TimerWord TicksPerSecond() =0; - - /// \brief Start the timer - void StartTimer(); - - /// \brief Retrieve the elapsed time - /// \return the elapsed time as a double - /// \details The return value of ElapsedTimeAsDouble() depends upon - /// the Unit selected during construction of the timer. For example, - /// if Unit = SECONDS and ElapsedTimeAsDouble() returns 3, - /// then the timer has run for 3 seconds. If - /// Unit = MILLISECONDS and ElapsedTimeAsDouble() returns - /// 3000, then the timer has run for 3 seconds. - /// \sa Unit, ElapsedTime - double ElapsedTimeAsDouble(); - - /// \brief Retrieve the elapsed time - /// \return the elapsed time as an unsigned long - /// \details The return value of ElapsedTime() depends upon the - /// Unit selected during construction of the timer. For example, if - /// Unit = SECONDS and ElapsedTime() returns 3, then - /// the timer has run for 3 seconds. If Unit = MILLISECONDS - /// and ElapsedTime() returns 3000, then the timer has run for 3 - /// seconds. - /// \sa Unit, ElapsedTimeAsDouble - unsigned long ElapsedTime(); - -private: - double ConvertTo(TimerWord t, Unit unit); - - Unit m_timerUnit; // HPUX workaround: m_unit is a system macro on HPUX - bool m_stuckAtZero, m_started; - TimerWord m_start, m_last; -}; - -/// \brief Measure CPU time spent executing instructions of this thread -/// \details ThreadUserTimer requires support of the OS. On Unix-based it -/// reports process time. On Windows NT or later desktops and servers it -/// reports thread times with performance counter precision.. On Windows -/// Phone and Windows Store it reports wall clock time with performance -/// counter precision. On all others it reports wall clock time. -/// \note ThreadUserTimer only works correctly on Windows NT or later -/// desktops and servers. -/// \sa Timer -class ThreadUserTimer : public TimerBase -{ -public: - /// \brief Construct a ThreadUserTimer - /// \param unit the unit of measure - /// \param stuckAtZero flag - ThreadUserTimer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {} - TimerWord GetCurrentTimerValue(); - TimerWord TicksPerSecond(); -}; - -/// \brief High resolution timer -/// \sa ThreadUserTimer -class CRYPTOPP_DLL Timer : public TimerBase -{ -public: - /// \brief Construct a Timer - /// \param unit the unit of measure - /// \param stuckAtZero flag - Timer(Unit unit = TimerBase::SECONDS, bool stuckAtZero = false) : TimerBase(unit, stuckAtZero) {} - TimerWord GetCurrentTimerValue(); - TimerWord TicksPerSecond(); -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ida.h b/third_party/cryptoppwin/include/cryptopp/ida.h deleted file mode 100644 index 534a9ba7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ida.h +++ /dev/null @@ -1,182 +0,0 @@ -// ida.h - originally written and placed in the public domain by Wei Dai - -/// \file ida.h -/// \brief Classes for Rabin's Information Dispersal and Shamir's Secret Sharing algorithms - -#ifndef CRYPTOPP_IDA_H -#define CRYPTOPP_IDA_H - -#include "cryptlib.h" -#include "mqueue.h" -#include "filters.h" -#include "channels.h" -#include "secblock.h" -#include "gf2_32.h" -#include "stdcpp.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Secret sharing and information dispersal base class -/// \since Crypto++ 1.0 -class RawIDA : public AutoSignaling > > -{ -public: - RawIDA(BufferedTransformation *attachment=NULLPTR) - : m_channelsReady(0), m_channelsFinished(0), m_threshold (0) - {Detach(attachment);} - - unsigned int GetThreshold() const {return m_threshold;} - void AddOutputChannel(word32 channelId); - void ChannelData(word32 channelId, const byte *inString, size_t length, bool messageEnd); - lword InputBuffered(word32 channelId) const; - - void IsolatedInitialize(const NameValuePairs ¶meters=g_nullNameValuePairs); - size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking) - { - if (!blocking) - throw BlockingInputOnly("RawIDA"); - ChannelData(StringToWord(channel), begin, length, messageEnd != 0); - return 0; - } - -protected: - virtual void FlushOutputQueues(); - virtual void OutputMessageEnds(); - - unsigned int InsertInputChannel(word32 channelId); - unsigned int LookupInputChannel(word32 channelId) const; - void ComputeV(unsigned int); - void PrepareInterpolation(); - void ProcessInputQueues(); - - typedef std::map InputChannelMap; - InputChannelMap m_inputChannelMap; - InputChannelMap::iterator m_lastMapPosition; - std::vector m_inputQueues; - std::vector m_inputChannelIds, m_outputChannelIds, m_outputToInput; - std::vector m_outputChannelIdStrings; - std::vector m_outputQueues; - std::vector > m_v; - SecBlock m_u, m_w, m_y; - const GF2_32 m_gf32; - unsigned int m_channelsReady, m_channelsFinished; - int m_threshold; -}; - -/// \brief Shamir's Secret Sharing Algorithm -/// \details SecretSharing is a variant of Shamir's secret sharing algorithm -/// \sa SecretRecovery, SecretRecovery, InformationDispersal, InformationRecovery -/// \since Crypto++ 1.0 -class SecretSharing : public CustomFlushPropagation -{ -public: - /// \brief Construct a SecretSharing - SecretSharing(RandomNumberGenerator &rng, int threshold, int nShares, BufferedTransformation *attachment=NULLPTR, bool addPadding=true) - : m_rng(rng), m_ida(new OutputProxy(*this, true)) - { - Detach(attachment); - IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("NumberOfShares", nShares)("AddPadding", addPadding)); - } - - void IsolatedInitialize(const NameValuePairs ¶meters=g_nullNameValuePairs); - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking); - bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) {return m_ida.Flush(hardFlush, propagation, blocking);} - -protected: - RandomNumberGenerator &m_rng; - RawIDA m_ida; - bool m_pad; -}; - -/// \brief Shamir's Secret Sharing Algorithm -/// \details SecretSharing is a variant of Shamir's secret sharing algorithm -/// \sa SecretRecovery, SecretRecovery, InformationDispersal, InformationRecovery -/// \since Crypto++ 1.0 -class SecretRecovery : public RawIDA -{ -public: - /// \brief Construct a SecretRecovery - SecretRecovery(int threshold, BufferedTransformation *attachment=NULLPTR, bool removePadding=true) - : RawIDA(attachment) - {IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("RemovePadding", removePadding));} - - void IsolatedInitialize(const NameValuePairs ¶meters=g_nullNameValuePairs); - -protected: - void FlushOutputQueues(); - void OutputMessageEnds(); - - bool m_pad; -}; - -/// a variant of Rabin's Information Dispersal Algorithm - -/// \brief Rabin's Information Dispersal Algorithm -/// \details InformationDispersal is a variant of Rabin's information dispersal algorithm -/// \sa SecretRecovery, SecretRecovery, InformationDispersal, InformationRecovery -/// \since Crypto++ 1.0 -class InformationDispersal : public CustomFlushPropagation -{ -public: - /// \brief Construct a InformationDispersal - InformationDispersal(int threshold, int nShares, BufferedTransformation *attachment=NULLPTR, bool addPadding=true) - : m_ida(new OutputProxy(*this, true)), m_pad(false), m_nextChannel(0) - { - Detach(attachment); - IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("NumberOfShares", nShares)("AddPadding", addPadding)); - } - - void IsolatedInitialize(const NameValuePairs ¶meters=g_nullNameValuePairs); - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking); - bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) {return m_ida.Flush(hardFlush, propagation, blocking);} - -protected: - RawIDA m_ida; - bool m_pad; - unsigned int m_nextChannel; -}; - -/// \brief Rabin's Information Dispersal Algorithm -/// \details InformationDispersal is a variant of Rabin's information dispersal algorithm -/// \sa SecretRecovery, SecretRecovery, InformationDispersal, InformationRecovery -/// \since Crypto++ 1.0 -class InformationRecovery : public RawIDA -{ -public: - /// \brief Construct a InformationRecovery - InformationRecovery(int threshold, BufferedTransformation *attachment=NULLPTR, bool removePadding=true) - : RawIDA(attachment), m_pad(false) - {IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("RemovePadding", removePadding));} - - void IsolatedInitialize(const NameValuePairs ¶meters=g_nullNameValuePairs); - -protected: - void FlushOutputQueues(); - void OutputMessageEnds(); - - bool m_pad; - ByteQueue m_queue; -}; - -class PaddingRemover : public Unflushable -{ -public: - PaddingRemover(BufferedTransformation *attachment=NULLPTR) - : m_possiblePadding(false), m_zeroCount(0) {Detach(attachment);} - - void IsolatedInitialize(const NameValuePairs ¶meters) - {CRYPTOPP_UNUSED(parameters); m_possiblePadding = false;} - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking); - - // GetPossiblePadding() == false at the end of a message indicates incorrect padding - bool GetPossiblePadding() const {return m_possiblePadding;} - -private: - bool m_possiblePadding; - lword m_zeroCount; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/idea.h b/third_party/cryptoppwin/include/cryptopp/idea.h deleted file mode 100644 index f4846b3a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/idea.h +++ /dev/null @@ -1,66 +0,0 @@ -// idea.h - originally written and placed in the public domain by Wei Dai - -/// \file idea.h -/// \brief Classes for the IDEA block cipher - -#ifndef CRYPTOPP_IDEA_H -#define CRYPTOPP_IDEA_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief IDEA block cipher information -/// \since Crypto++ 1.0 -struct IDEA_Info : public FixedBlockSize<8>, public FixedKeyLength<16>, public FixedRounds<8> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "IDEA";} -}; - -/// \brief IDEA block cipher -/// \sa IDEA -/// \since Crypto++ 1.0 -class IDEA : public IDEA_Info, public BlockCipherDocumentation -{ -public: // made public for internal purposes -#ifdef CRYPTOPP_NATIVE_DWORD_AVAILABLE - typedef word Word; -#else - typedef hword Word; -#endif - -private: - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - unsigned int OptimalDataAlignment() const {return 2;} - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - private: - void EnKey(const byte *); - void DeKey(); - FixedSizeSecBlock m_key; - - #ifdef IDEA_LARGECACHE - static inline void LookupMUL(word &a, word b); - void LookupKeyLogs(); - static void BuildLogTables(); - static volatile bool tablesBuilt; - static word16 log[0x10000], antilog[0x10000]; - #endif - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef IDEA::Encryption IDEAEncryption; -typedef IDEA::Decryption IDEADecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/integer.h b/third_party/cryptoppwin/include/cryptopp/integer.h deleted file mode 100644 index 05d7d6ae..00000000 --- a/third_party/cryptoppwin/include/cryptopp/integer.h +++ /dev/null @@ -1,840 +0,0 @@ -// integer.h - originally written and placed in the public domain by Wei Dai - -/// \file integer.h -/// \brief Multiple precision integer with arithmetic operations -/// \details The Integer class can represent positive and negative integers -/// with absolute value less than (256**sizeof(word))(256**sizeof(int)). -/// \details Internally, the library uses a sign magnitude representation, and the class -/// has two data members. The first is a IntegerSecBlock (a SecBlock) and it is -/// used to hold the representation. The second is a Sign (an enumeration), and it is -/// used to track the sign of the Integer. -/// \details For details on how the Integer class initializes its function pointers using -/// InitializeInteger and how it creates Integer::Zero(), Integer::One(), and -/// Integer::Two(), then see the comments at the top of integer.cpp. -/// \since Crypto++ 1.0 - -#ifndef CRYPTOPP_INTEGER_H -#define CRYPTOPP_INTEGER_H - -#include "cryptlib.h" -#include "secblock.h" -#include "stdcpp.h" - -#include - -NAMESPACE_BEGIN(CryptoPP) - -/// \struct InitializeInteger -/// \brief Performs static initialization of the Integer class -struct InitializeInteger -{ - InitializeInteger(); -}; - -// Always align, http://github.com/weidai11/cryptopp/issues/256 -typedef SecBlock > IntegerSecBlock; - -/// \brief Multiple precision integer with arithmetic operations -/// \details The Integer class can represent positive and negative integers -/// with absolute value less than (256**sizeof(word))(256**sizeof(int)). -/// \details Internally, the library uses a sign magnitude representation, and the class -/// has two data members. The first is a IntegerSecBlock (a SecBlock) and it is -/// used to hold the representation. The second is a Sign (an enumeration), and it is -/// used to track the sign of the Integer. -/// \details For details on how the Integer class initializes its function pointers using -/// InitializeInteger and how it creates Integer::Zero(), Integer::One(), and -/// Integer::Two(), then see the comments at the top of integer.cpp. -/// \since Crypto++ 1.0 -/// \nosubgrouping -class CRYPTOPP_DLL Integer : private InitializeInteger, public ASN1Object -{ -public: - /// \name ENUMS, EXCEPTIONS, and TYPEDEFS - //@{ - /// \brief Exception thrown when division by 0 is encountered - class DivideByZero : public Exception - { - public: - DivideByZero() : Exception(OTHER_ERROR, "Integer: division by zero") {} - }; - - /// \brief Exception thrown when a random number cannot be found that - /// satisfies the condition - class RandomNumberNotFound : public Exception - { - public: - RandomNumberNotFound() : Exception(OTHER_ERROR, "Integer: no integer satisfies the given parameters") {} - }; - - /// \enum Sign - /// \brief Used internally to represent the integer - /// \details Sign is used internally to represent the integer. It is also used in a few API functions. - /// \sa SetPositive(), SetNegative(), Signedness - enum Sign { - /// \brief the value is positive or 0 - POSITIVE=0, - /// \brief the value is negative - NEGATIVE=1}; - - /// \enum Signedness - /// \brief Used when importing and exporting integers - /// \details Signedness is usually used in API functions. - /// \sa Sign - enum Signedness { - /// \brief an unsigned value - UNSIGNED, - /// \brief a signed value - SIGNED}; - - /// \enum RandomNumberType - /// \brief Properties of a random integer - enum RandomNumberType { - /// \brief a number with no special properties - ANY, - /// \brief a number which is probabilistically prime - PRIME}; - //@} - - /// \name CREATORS - //@{ - /// \brief Creates the zero integer - Integer(); - - /// copy constructor - Integer(const Integer& t); - - /// \brief Convert from signed long - Integer(signed long value); - - /// \brief Convert from lword - /// \param sign enumeration indicating Sign - /// \param value the long word - Integer(Sign sign, lword value); - - /// \brief Convert from two words - /// \param sign enumeration indicating Sign - /// \param highWord the high word - /// \param lowWord the low word - Integer(Sign sign, word highWord, word lowWord); - - /// \brief Convert from a C-string - /// \param str C-string value - /// \param order the ByteOrder of the string to be processed - /// \details \p str can be in base 8, 10, or 16. Base is determined - /// by a case insensitive suffix of 'o' (8), '.' (10), or 'h' (16). - /// No suffix means base 10. - /// \details Byte order was added at Crypto++ 5.7 to allow use of little-endian - /// integers with curve25519, Poly1305 and Microsoft CAPI. - explicit Integer(const char *str, ByteOrder order = BIG_ENDIAN_ORDER); - - /// \brief Convert from a wide C-string - /// \param str wide C-string value - /// \param order the ByteOrder of the string to be processed - /// \details \p str can be in base 8, 10, or 16. Base is determined - /// by a case insensitive suffix of 'o' (8), '.' (10), or 'h' (16). - /// No suffix means base 10. - /// \details Byte order was added at Crypto++ 5.7 to allow use of little-endian - /// integers with curve25519, Poly1305 and Microsoft CAPI. - explicit Integer(const wchar_t *str, ByteOrder order = BIG_ENDIAN_ORDER); - - /// \brief Convert from a big-endian byte array - /// \param encodedInteger big-endian byte array - /// \param byteCount length of the byte array - /// \param sign enumeration indicating Signedness - /// \param order the ByteOrder of the array to be processed - /// \details Byte order was added at Crypto++ 5.7 to allow use of little-endian - /// integers with curve25519, Poly1305 and Microsoft CAPI. - Integer(const byte *encodedInteger, size_t byteCount, Signedness sign=UNSIGNED, ByteOrder order = BIG_ENDIAN_ORDER); - - /// \brief Convert from a big-endian array - /// \param bt BufferedTransformation object with big-endian byte array - /// \param byteCount length of the byte array - /// \param sign enumeration indicating Signedness - /// \param order the ByteOrder of the data to be processed - /// \details Byte order was added at Crypto++ 5.7 to allow use of little-endian - /// integers with curve25519, Poly1305 and Microsoft CAPI. - Integer(BufferedTransformation &bt, size_t byteCount, Signedness sign=UNSIGNED, ByteOrder order = BIG_ENDIAN_ORDER); - - /// \brief Convert from a BER encoded byte array - /// \param bt BufferedTransformation object with BER encoded byte array - explicit Integer(BufferedTransformation &bt); - - /// \brief Create a random integer - /// \param rng RandomNumberGenerator used to generate material - /// \param bitCount the number of bits in the resulting integer - /// \details The random integer created is uniformly distributed over [0, 2bitCount]. - Integer(RandomNumberGenerator &rng, size_t bitCount); - - /// \brief Integer representing 0 - /// \return an Integer representing 0 - /// \details Zero() avoids calling constructors for frequently used integers - static const Integer & CRYPTOPP_API Zero(); - /// \brief Integer representing 1 - /// \return an Integer representing 1 - /// \details One() avoids calling constructors for frequently used integers - static const Integer & CRYPTOPP_API One(); - /// \brief Integer representing 2 - /// \return an Integer representing 2 - /// \details Two() avoids calling constructors for frequently used integers - static const Integer & CRYPTOPP_API Two(); - - /// \brief Create a random integer of special form - /// \param rng RandomNumberGenerator used to generate material - /// \param min the minimum value - /// \param max the maximum value - /// \param rnType RandomNumberType to specify the type - /// \param equiv the equivalence class based on the parameter \p mod - /// \param mod the modulus used to reduce the equivalence class - /// \throw RandomNumberNotFound if the set is empty. - /// \details Ideally, the random integer created should be uniformly distributed - /// over {x | min \<= x \<= max and \p x is of rnType and x \% mod == equiv}. - /// However the actual distribution may not be uniform because sequential - /// search is used to find an appropriate number from a random starting - /// point. - /// \details May return (with very small probability) a pseudoprime when a prime - /// is requested and max \> lastSmallPrime*lastSmallPrime. \p lastSmallPrime - /// is declared in nbtheory.h. - Integer(RandomNumberGenerator &rng, const Integer &min, const Integer &max, RandomNumberType rnType=ANY, const Integer &equiv=Zero(), const Integer &mod=One()); - - /// \brief Exponentiates to a power of 2 - /// \return the Integer 2e - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - static Integer CRYPTOPP_API Power2(size_t e); - //@} - - /// \name ENCODE/DECODE - //@{ - /// \brief Minimum number of bytes to encode this integer - /// \param sign enumeration indicating Signedness - /// \note The MinEncodedSize() of 0 is 1. - size_t MinEncodedSize(Signedness sign=UNSIGNED) const; - - /// \brief Encode in big-endian format - /// \param output big-endian byte array - /// \param outputLen length of the byte array - /// \param sign enumeration indicating Signedness - /// \details Unsigned means encode absolute value, signed means encode two's complement if negative. - /// \details outputLen can be used to ensure an Integer is encoded to an exact size (rather than a - /// minimum size). An exact size is useful, for example, when encoding to a field element size. - void Encode(byte *output, size_t outputLen, Signedness sign=UNSIGNED) const; - - /// \brief Encode in big-endian format - /// \param bt BufferedTransformation object - /// \param outputLen length of the encoding - /// \param sign enumeration indicating Signedness - /// \details Unsigned means encode absolute value, signed means encode two's complement if negative. - /// \details outputLen can be used to ensure an Integer is encoded to an exact size (rather than a - /// minimum size). An exact size is useful, for example, when encoding to a field element size. - void Encode(BufferedTransformation &bt, size_t outputLen, Signedness sign=UNSIGNED) const; - - /// \brief Encode in DER format - /// \param bt BufferedTransformation object - /// \details Encodes the Integer using Distinguished Encoding Rules - /// The result is placed into a BufferedTransformation object - void DEREncode(BufferedTransformation &bt) const; - - /// \brief Encode absolute value as big-endian octet string - /// \param bt BufferedTransformation object - /// \param length the number of mytes to decode - void DEREncodeAsOctetString(BufferedTransformation &bt, size_t length) const; - - /// \brief Encode absolute value in OpenPGP format - /// \param output big-endian byte array - /// \param bufferSize length of the byte array - /// \return length of the output - /// \details OpenPGPEncode places result into the buffer and returns the - /// number of bytes used for the encoding - size_t OpenPGPEncode(byte *output, size_t bufferSize) const; - - /// \brief Encode absolute value in OpenPGP format - /// \param bt BufferedTransformation object - /// \return length of the output - /// \details OpenPGPEncode places result into a BufferedTransformation object and returns the - /// number of bytes used for the encoding - size_t OpenPGPEncode(BufferedTransformation &bt) const; - - /// \brief Decode from big-endian byte array - /// \param input big-endian byte array - /// \param inputLen length of the byte array - /// \param sign enumeration indicating Signedness - void Decode(const byte *input, size_t inputLen, Signedness sign=UNSIGNED); - - /// \brief Decode nonnegative value from big-endian byte array - /// \param bt BufferedTransformation object - /// \param inputLen length of the byte array - /// \param sign enumeration indicating Signedness - /// \note bt.MaxRetrievable() \>= inputLen. - void Decode(BufferedTransformation &bt, size_t inputLen, Signedness sign=UNSIGNED); - - /// \brief Decode from BER format - /// \param input big-endian byte array - /// \param inputLen length of the byte array - void BERDecode(const byte *input, size_t inputLen); - - /// \brief Decode from BER format - /// \param bt BufferedTransformation object - void BERDecode(BufferedTransformation &bt); - - /// \brief Decode nonnegative value from big-endian octet string - /// \param bt BufferedTransformation object - /// \param length length of the byte array - void BERDecodeAsOctetString(BufferedTransformation &bt, size_t length); - - /// \brief Exception thrown when an error is encountered decoding an OpenPGP integer - class OpenPGPDecodeErr : public Exception - { - public: - OpenPGPDecodeErr() : Exception(INVALID_DATA_FORMAT, "OpenPGP decode error") {} - }; - - /// \brief Decode from OpenPGP format - /// \param input big-endian byte array - /// \param inputLen length of the byte array - void OpenPGPDecode(const byte *input, size_t inputLen); - /// \brief Decode from OpenPGP format - /// \param bt BufferedTransformation object - void OpenPGPDecode(BufferedTransformation &bt); - //@} - - /// \name ACCESSORS - //@{ - /// \brief Determines if the Integer is convertable to Long - /// \return true if *this can be represented as a signed long - /// \sa ConvertToLong() - bool IsConvertableToLong() const; - /// \brief Convert the Integer to Long - /// \return equivalent signed long if possible, otherwise undefined - /// \sa IsConvertableToLong() - signed long ConvertToLong() const; - - /// \brief Determines the number of bits required to represent the Integer - /// \return number of significant bits - /// \details BitCount is calculated as floor(log2(abs(*this))) + 1. - unsigned int BitCount() const; - /// \brief Determines the number of bytes required to represent the Integer - /// \return number of significant bytes - /// \details ByteCount is calculated as ceiling(BitCount()/8). - unsigned int ByteCount() const; - /// \brief Determines the number of words required to represent the Integer - /// \return number of significant words - /// \details WordCount is calculated as ceiling(ByteCount()/sizeof(word)). - unsigned int WordCount() const; - - /// \brief Provides the i-th bit of the Integer - /// \return the i-th bit, i=0 being the least significant bit - bool GetBit(size_t i) const; - /// \brief Provides the i-th byte of the Integer - /// \return the i-th byte - byte GetByte(size_t i) const; - /// \brief Provides the low order bits of the Integer - /// \return n lowest bits of *this >> i - lword GetBits(size_t i, size_t n) const; - - /// \brief Determines if the Integer is 0 - /// \return true if the Integer is 0, false otherwise - bool IsZero() const {return !*this;} - /// \brief Determines if the Integer is non-0 - /// \return true if the Integer is non-0, false otherwise - bool NotZero() const {return !IsZero();} - /// \brief Determines if the Integer is negative - /// \return true if the Integer is negative, false otherwise - bool IsNegative() const {return sign == NEGATIVE;} - /// \brief Determines if the Integer is non-negative - /// \return true if the Integer is non-negative, false otherwise - bool NotNegative() const {return !IsNegative();} - /// \brief Determines if the Integer is positive - /// \return true if the Integer is positive, false otherwise - bool IsPositive() const {return NotNegative() && NotZero();} - /// \brief Determines if the Integer is non-positive - /// \return true if the Integer is non-positive, false otherwise - bool NotPositive() const {return !IsPositive();} - /// \brief Determines if the Integer is even parity - /// \return true if the Integer is even, false otherwise - bool IsEven() const {return GetBit(0) == 0;} - /// \brief Determines if the Integer is odd parity - /// \return true if the Integer is odd, false otherwise - bool IsOdd() const {return GetBit(0) == 1;} - //@} - - /// \name MANIPULATORS - //@{ - /// \brief Assignment - /// \param t the other Integer - /// \return the result of assignment - Integer& operator=(const Integer& t); - /// \brief Addition Assignment - /// \param t the other Integer - /// \return the result of *this + t - Integer& operator+=(const Integer& t); - /// \brief Subtraction Assignment - /// \param t the other Integer - /// \return the result of *this - t - Integer& operator-=(const Integer& t); - /// \brief Multiplication Assignment - /// \param t the other Integer - /// \return the result of *this * t - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - Integer& operator*=(const Integer& t) {return *this = Times(t);} - /// \brief Division Assignment - /// \param t the other Integer - /// \return the result of *this / t - Integer& operator/=(const Integer& t) {return *this = DividedBy(t);} - /// \brief Remainder Assignment - /// \param t the other Integer - /// \return the result of *this % t - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - Integer& operator%=(const Integer& t) {return *this = Modulo(t);} - /// \brief Division Assignment - /// \param t the other word - /// \return the result of *this / t - Integer& operator/=(word t) {return *this = DividedBy(t);} - /// \brief Remainder Assignment - /// \param t the other word - /// \return the result of *this % t - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - Integer& operator%=(word t) {return *this = Integer(POSITIVE, 0, Modulo(t));} - - /// \brief Left-shift Assignment - /// \param n number of bits to shift - /// \return reference to this Integer - Integer& operator<<=(size_t n); - /// \brief Right-shift Assignment - /// \param n number of bits to shift - /// \return reference to this Integer - Integer& operator>>=(size_t n); - - /// \brief Bitwise AND Assignment - /// \param t the other Integer - /// \return the result of *this & t - /// \details operator&=() performs a bitwise AND on *this. Missing bits are truncated - /// at the most significant bit positions, so the result is as small as the - /// smaller of the operands. - /// \details Internally, Crypto++ uses a sign-magnitude representation. The library - /// does not attempt to interpret bits, and the result is always POSITIVE. If needed, - /// the integer should be converted to a 2's compliment representation before performing - /// the operation. - /// \since Crypto++ 6.0 - Integer& operator&=(const Integer& t); - /// \brief Bitwise OR Assignment - /// \param t the second Integer - /// \return the result of *this | t - /// \details operator|=() performs a bitwise OR on *this. Missing bits are shifted in - /// at the most significant bit positions, so the result is as large as the - /// larger of the operands. - /// \details Internally, Crypto++ uses a sign-magnitude representation. The library - /// does not attempt to interpret bits, and the result is always POSITIVE. If needed, - /// the integer should be converted to a 2's compliment representation before performing - /// the operation. - /// \since Crypto++ 6.0 - Integer& operator|=(const Integer& t); - /// \brief Bitwise XOR Assignment - /// \param t the other Integer - /// \return the result of *this ^ t - /// \details operator^=() performs a bitwise XOR on *this. Missing bits are shifted - /// in at the most significant bit positions, so the result is as large as the - /// larger of the operands. - /// \details Internally, Crypto++ uses a sign-magnitude representation. The library - /// does not attempt to interpret bits, and the result is always POSITIVE. If needed, - /// the integer should be converted to a 2's compliment representation before performing - /// the operation. - /// \since Crypto++ 6.0 - Integer& operator^=(const Integer& t); - - /// \brief Set this Integer to random integer - /// \param rng RandomNumberGenerator used to generate material - /// \param bitCount the number of bits in the resulting integer - /// \details The random integer created is uniformly distributed over [0, 2bitCount]. - /// \note If \p bitCount is 0, then this Integer is set to 0 (and not 0 or 1). - void Randomize(RandomNumberGenerator &rng, size_t bitCount); - - /// \brief Set this Integer to random integer - /// \param rng RandomNumberGenerator used to generate material - /// \param min the minimum value - /// \param max the maximum value - /// \details The random integer created is uniformly distributed over [min, max]. - void Randomize(RandomNumberGenerator &rng, const Integer &min, const Integer &max); - - /// \brief Set this Integer to random integer of special form - /// \param rng RandomNumberGenerator used to generate material - /// \param min the minimum value - /// \param max the maximum value - /// \param rnType RandomNumberType to specify the type - /// \param equiv the equivalence class based on the parameter \p mod - /// \param mod the modulus used to reduce the equivalence class - /// \throw RandomNumberNotFound if the set is empty. - /// \details Ideally, the random integer created should be uniformly distributed - /// over {x | min \<= x \<= max and \p x is of rnType and x \% mod == equiv}. - /// However the actual distribution may not be uniform because sequential - /// search is used to find an appropriate number from a random starting - /// point. - /// \details May return (with very small probability) a pseudoprime when a prime - /// is requested and max \> lastSmallPrime*lastSmallPrime. \p lastSmallPrime - /// is declared in nbtheory.h. - bool Randomize(RandomNumberGenerator &rng, const Integer &min, const Integer &max, RandomNumberType rnType, const Integer &equiv=Zero(), const Integer &mod=One()); - - /// \brief Generate a random number - /// \param rng RandomNumberGenerator used to generate material - /// \param params additional parameters that cannot be passed directly to the function - /// \return true if a random number was generated, false otherwise - /// \details GenerateRandomNoThrow attempts to generate a random number according to the - /// parameters specified in params. The function does not throw RandomNumberNotFound. - /// \details The example below generates a prime number using NameValuePairs that Integer - /// class recognizes. The names are not provided in argnames.h. - ///
-		///    AutoSeededRandomPool prng;
-		///    AlgorithmParameters params = MakeParameters("BitLength", 2048)
-		///                                               ("RandomNumberType", Integer::PRIME);
-		///    Integer x;
-		///    if (x.GenerateRandomNoThrow(prng, params) == false)
-		///        throw std::runtime_error("Failed to generate prime number");
-		/// 
- bool GenerateRandomNoThrow(RandomNumberGenerator &rng, const NameValuePairs ¶ms = g_nullNameValuePairs); - - /// \brief Generate a random number - /// \param rng RandomNumberGenerator used to generate material - /// \param params additional parameters that cannot be passed directly to the function - /// \throw RandomNumberNotFound if a random number is not found - /// \details GenerateRandom attempts to generate a random number according to the - /// parameters specified in params. - /// \details The example below generates a prime number using NameValuePairs that Integer - /// class recognizes. The names are not provided in argnames.h. - ///
-		///    AutoSeededRandomPool prng;
-		///    AlgorithmParameters params = MakeParameters("BitLength", 2048)
-		///                                               ("RandomNumberType", Integer::PRIME);
-		///    Integer x;
-		///    try { x.GenerateRandom(prng, params); }
-		///    catch (RandomNumberNotFound&) { x = -1; }
-		/// 
- void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms = g_nullNameValuePairs) - { - if (!GenerateRandomNoThrow(rng, params)) - throw RandomNumberNotFound(); - } - - /// \brief Set the n-th bit to value - /// \details 0-based numbering. - void SetBit(size_t n, bool value=1); - - /// \brief Set the n-th byte to value - /// \details 0-based numbering. - void SetByte(size_t n, byte value); - - /// \brief Reverse the Sign of the Integer - void Negate(); - - /// \brief Sets the Integer to positive - void SetPositive() {sign = POSITIVE;} - - /// \brief Sets the Integer to negative - void SetNegative() {if (!!(*this)) sign = NEGATIVE;} - - /// \brief Swaps this Integer with another Integer - void swap(Integer &a); - //@} - - /// \name UNARY OPERATORS - //@{ - /// \brief Negation - bool operator!() const; - /// \brief Addition - Integer operator+() const {return *this;} - /// \brief Subtraction - Integer operator-() const; - /// \brief Pre-increment - Integer& operator++(); - /// \brief Pre-decrement - Integer& operator--(); - /// \brief Post-increment - Integer operator++(int) {Integer temp = *this; ++*this; return temp;} - /// \brief Post-decrement - Integer operator--(int) {Integer temp = *this; --*this; return temp;} - //@} - - /// \name BINARY OPERATORS - //@{ - /// \brief Perform signed comparison - /// \param a the Integer to compare - /// \retval -1 if *this < a - /// \retval 0 if *this = a - /// \retval 1 if *this > a - int Compare(const Integer& a) const; - - /// \brief Addition - Integer Plus(const Integer &b) const; - /// \brief Subtraction - Integer Minus(const Integer &b) const; - /// \brief Multiplication - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - Integer Times(const Integer &b) const; - /// \brief Division - Integer DividedBy(const Integer &b) const; - /// \brief Remainder - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - Integer Modulo(const Integer &b) const; - /// \brief Division - Integer DividedBy(word b) const; - /// \brief Remainder - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - word Modulo(word b) const; - - /// \brief Bitwise AND - /// \param t the other Integer - /// \return the result of *this & t - /// \details And() performs a bitwise AND on the operands. Missing bits are truncated - /// at the most significant bit positions, so the result is as small as the - /// smaller of the operands. - /// \details Internally, Crypto++ uses a sign-magnitude representation. The library - /// does not attempt to interpret bits, and the result is always POSITIVE. If needed, - /// the integer should be converted to a 2's compliment representation before performing - /// the operation. - /// \since Crypto++ 6.0 - Integer And(const Integer& t) const; - - /// \brief Bitwise OR - /// \param t the other Integer - /// \return the result of *this | t - /// \details Or() performs a bitwise OR on the operands. Missing bits are shifted in - /// at the most significant bit positions, so the result is as large as the - /// larger of the operands. - /// \details Internally, Crypto++ uses a sign-magnitude representation. The library - /// does not attempt to interpret bits, and the result is always POSITIVE. If needed, - /// the integer should be converted to a 2's compliment representation before performing - /// the operation. - /// \since Crypto++ 6.0 - Integer Or(const Integer& t) const; - - /// \brief Bitwise XOR - /// \param t the other Integer - /// \return the result of *this ^ t - /// \details Xor() performs a bitwise XOR on the operands. Missing bits are shifted in - /// at the most significant bit positions, so the result is as large as the - /// larger of the operands. - /// \details Internally, Crypto++ uses a sign-magnitude representation. The library - /// does not attempt to interpret bits, and the result is always POSITIVE. If needed, - /// the integer should be converted to a 2's compliment representation before performing - /// the operation. - /// \since Crypto++ 6.0 - Integer Xor(const Integer& t) const; - - /// \brief Right-shift - Integer operator>>(size_t n) const {return Integer(*this)>>=n;} - /// \brief Left-shift - Integer operator<<(size_t n) const {return Integer(*this)<<=n;} - //@} - - /// \name OTHER ARITHMETIC FUNCTIONS - //@{ - /// \brief Retrieve the absolute value of this integer - Integer AbsoluteValue() const; - /// \brief Add this integer to itself - Integer Doubled() const {return Plus(*this);} - /// \brief Multiply this integer by itself - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - Integer Squared() const {return Times(*this);} - /// \brief Extract square root - /// \details if negative return 0, else return floor of square root - Integer SquareRoot() const; - /// \brief Determine whether this integer is a perfect square - bool IsSquare() const; - - /// \brief Determine if 1 or -1 - /// \return true if this integer is 1 or -1, false otherwise - bool IsUnit() const; - /// \brief Calculate multiplicative inverse - /// \return MultiplicativeInverse inverse if 1 or -1, otherwise return 0. - Integer MultiplicativeInverse() const; - - /// \brief Extended Division - /// \param r a reference for the remainder - /// \param q a reference for the quotient - /// \param a reference to the dividend - /// \param d reference to the divisor - /// \details Divide calculates r and q such that (a == d*q + r) && (0 <= r < abs(d)). - static void CRYPTOPP_API Divide(Integer &r, Integer &q, const Integer &a, const Integer &d); - - /// \brief Extended Division - /// \param r a reference for the remainder - /// \param q a reference for the quotient - /// \param a reference to the dividend - /// \param d reference to the divisor - /// \details Divide calculates r and q such that (a == d*q + r) && (0 <= r < abs(d)). - /// This overload uses a faster division algorithm because the divisor is short. - static void CRYPTOPP_API Divide(word &r, Integer &q, const Integer &a, word d); - - /// \brief Extended Division - /// \param r a reference for the remainder - /// \param q a reference for the quotient - /// \param a reference to the dividend - /// \param n reference to the divisor - /// \details DivideByPowerOf2 calculates r and q such that (a == d*q + r) && (0 <= r < abs(d)). - /// It returns same result as Divide(r, q, a, Power2(n)), but faster. - /// This overload uses a faster division algorithm because the divisor is a power of 2. - static void CRYPTOPP_API DivideByPowerOf2(Integer &r, Integer &q, const Integer &a, unsigned int n); - - /// \brief Calculate greatest common divisor - /// \param a reference to the first number - /// \param n reference to the secind number - /// \return the greatest common divisor a and n. - static Integer CRYPTOPP_API Gcd(const Integer &a, const Integer &n); - - /// \brief Calculate multiplicative inverse - /// \param n reference to the modulus - /// \return an Integer *this % n. - /// \details InverseMod returns the multiplicative inverse of the Integer *this - /// modulo the Integer n. If no Integer exists then Integer 0 is returned. - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - Integer InverseMod(const Integer &n) const; - - /// \brief Calculate multiplicative inverse - /// \param n the modulus - /// \return a word *this % n. - /// \details InverseMod returns the multiplicative inverse of the Integer *this - /// modulo the word n. If no Integer exists then word 0 is returned. - /// \sa a_times_b_mod_c() and a_exp_b_mod_c() - word InverseMod(word n) const; - //@} - - /// \name INPUT/OUTPUT - //@{ - /// \brief Extraction operator - /// \param in reference to a std::istream - /// \param a reference to an Integer - /// \return reference to a std::istream reference - friend CRYPTOPP_DLL std::istream& CRYPTOPP_API operator>>(std::istream& in, Integer &a); - - /// \brief Insertion operator - /// \param out reference to a std::ostream - /// \param a a constant reference to an Integer - /// \return reference to a std::ostream reference - /// \details The output integer responds to hex, std::oct, std::hex, std::upper and - /// std::lower. The output includes the suffix \a h (for hex), \a . (\a dot, for dec) - /// and \a o (for octal). There is currently no way to suppress the suffix. - /// \details If you want to print an Integer without the suffix or using an arbitrary base, then - /// use IntToString(). - /// \sa IntToString - friend CRYPTOPP_DLL std::ostream& CRYPTOPP_API operator<<(std::ostream& out, const Integer &a); - //@} - - /// \brief Modular multiplication - /// \param x reference to the first term - /// \param y reference to the second term - /// \param m reference to the modulus - /// \return an Integer (a * b) % m. - CRYPTOPP_DLL friend Integer CRYPTOPP_API a_times_b_mod_c(const Integer &x, const Integer& y, const Integer& m); - /// \brief Modular exponentiation - /// \param x reference to the base - /// \param e reference to the exponent - /// \param m reference to the modulus - /// \return an Integer (a ^ b) % m. - CRYPTOPP_DLL friend Integer CRYPTOPP_API a_exp_b_mod_c(const Integer &x, const Integer& e, const Integer& m); - -protected: - - // http://github.com/weidai11/cryptopp/issues/602 - Integer InverseModNext(const Integer &n) const; - -private: - - Integer(word value, size_t length); - int PositiveCompare(const Integer &t) const; - - IntegerSecBlock reg; - Sign sign; - -#ifndef CRYPTOPP_DOXYGEN_PROCESSING - friend class ModularArithmetic; - friend class MontgomeryRepresentation; - friend class HalfMontgomeryRepresentation; - - friend void PositiveAdd(Integer &sum, const Integer &a, const Integer &b); - friend void PositiveSubtract(Integer &diff, const Integer &a, const Integer &b); - friend void PositiveMultiply(Integer &product, const Integer &a, const Integer &b); - friend void PositiveDivide(Integer &remainder, Integer "ient, const Integer ÷nd, const Integer &divisor); -#endif -}; - -/// \brief Comparison -inline bool operator==(const CryptoPP::Integer& a, const CryptoPP::Integer& b) {return a.Compare(b)==0;} -/// \brief Comparison -inline bool operator!=(const CryptoPP::Integer& a, const CryptoPP::Integer& b) {return a.Compare(b)!=0;} -/// \brief Comparison -inline bool operator> (const CryptoPP::Integer& a, const CryptoPP::Integer& b) {return a.Compare(b)> 0;} -/// \brief Comparison -inline bool operator>=(const CryptoPP::Integer& a, const CryptoPP::Integer& b) {return a.Compare(b)>=0;} -/// \brief Comparison -inline bool operator< (const CryptoPP::Integer& a, const CryptoPP::Integer& b) {return a.Compare(b)< 0;} -/// \brief Comparison -inline bool operator<=(const CryptoPP::Integer& a, const CryptoPP::Integer& b) {return a.Compare(b)<=0;} -/// \brief Addition -inline CryptoPP::Integer operator+(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.Plus(b);} -/// \brief Subtraction -inline CryptoPP::Integer operator-(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.Minus(b);} -/// \brief Multiplication -/// \sa a_times_b_mod_c() and a_exp_b_mod_c() -inline CryptoPP::Integer operator*(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.Times(b);} -/// \brief Division -inline CryptoPP::Integer operator/(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.DividedBy(b);} -/// \brief Remainder -/// \sa a_times_b_mod_c() and a_exp_b_mod_c() -inline CryptoPP::Integer operator%(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.Modulo(b);} -/// \brief Division -inline CryptoPP::Integer operator/(const CryptoPP::Integer &a, CryptoPP::word b) {return a.DividedBy(b);} -/// \brief Remainder -/// \sa a_times_b_mod_c() and a_exp_b_mod_c() -inline CryptoPP::word operator%(const CryptoPP::Integer &a, CryptoPP::word b) {return a.Modulo(b);} - -/// \brief Bitwise AND -/// \param a the first Integer -/// \param b the second Integer -/// \return the result of a & b -/// \details operator&() performs a bitwise AND on the operands. Missing bits are truncated -/// at the most significant bit positions, so the result is as small as the -/// smaller of the operands. -/// \details Internally, Crypto++ uses a sign-magnitude representation. The library -/// does not attempt to interpret bits, and the result is always POSITIVE. If needed, -/// the integer should be converted to a 2's compliment representation before performing -/// the operation. -/// \since Crypto++ 6.0 -inline CryptoPP::Integer operator&(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.And(b);} - -/// \brief Bitwise OR -/// \param a the first Integer -/// \param b the second Integer -/// \return the result of a | b -/// \details operator|() performs a bitwise OR on the operands. Missing bits are shifted in -/// at the most significant bit positions, so the result is as large as the -/// larger of the operands. -/// \details Internally, Crypto++ uses a sign-magnitude representation. The library -/// does not attempt to interpret bits, and the result is always POSITIVE. If needed, -/// the integer should be converted to a 2's compliment representation before performing -/// the operation. -/// \since Crypto++ 6.0 -inline CryptoPP::Integer operator|(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.Or(b);} - -/// \brief Bitwise XOR -/// \param a the first Integer -/// \param b the second Integer -/// \return the result of a ^ b -/// \details operator^() performs a bitwise XOR on the operands. Missing bits are shifted -/// in at the most significant bit positions, so the result is as large as the -/// larger of the operands. -/// \details Internally, Crypto++ uses a sign-magnitude representation. The library -/// does not attempt to interpret bits, and the result is always POSITIVE. If needed, -/// the integer should be converted to a 2's compliment representation before performing -/// the operation. -/// \since Crypto++ 6.0 -inline CryptoPP::Integer operator^(const CryptoPP::Integer &a, const CryptoPP::Integer &b) {return a.Xor(b);} - -NAMESPACE_END - -#ifndef __BORLANDC__ -NAMESPACE_BEGIN(std) -inline void swap(CryptoPP::Integer &a, CryptoPP::Integer &b) -{ - a.swap(b); -} -NAMESPACE_END -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/iterhash.h b/third_party/cryptoppwin/include/cryptopp/iterhash.h deleted file mode 100644 index af916d9c..00000000 --- a/third_party/cryptoppwin/include/cryptopp/iterhash.h +++ /dev/null @@ -1,218 +0,0 @@ -// iterhash.h - originally written and placed in the public domain by Wei Dai - -/// \file iterhash.h -/// \brief Base classes for iterated hashes - -#ifndef CRYPTOPP_ITERHASH_H -#define CRYPTOPP_ITERHASH_H - -#include "cryptlib.h" -#include "secblock.h" -#include "misc.h" -#include "simple.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -# if (CRYPTOPP_MSC_VERSION >= 1400) -# pragma warning(disable: 6011 6386 28193) -# endif -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Exception thrown when trying to hash more data than is allowed by a hash function -class CRYPTOPP_DLL HashInputTooLong : public InvalidDataFormat -{ -public: - explicit HashInputTooLong(const std::string &alg) - : InvalidDataFormat("IteratedHashBase: input data exceeds maximum allowed by hash function " + alg) {} -}; - -/// \brief Iterated hash base class -/// \tparam T Hash word type -/// \tparam BASE HashTransformation derived class -/// \details IteratedHashBase provides an interface for block-based iterated hashes -/// \sa HashTransformation, MessageAuthenticationCode -template -class CRYPTOPP_NO_VTABLE IteratedHashBase : public BASE -{ -public: - typedef T HashWordType; - - virtual ~IteratedHashBase() {} - - /// \brief Construct an IteratedHashBase - IteratedHashBase() : m_countLo(0), m_countHi(0) {} - - /// \brief Provides the input block size most efficient for this cipher. - /// \return The input block size that is most efficient for the cipher - /// \details The base class implementation returns MandatoryBlockSize(). - /// \note Optimal input length is - /// n * OptimalBlockSize() - GetOptimalBlockSizeUsed() for any n \> 0. - unsigned int OptimalBlockSize() const {return this->BlockSize();} - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \details OptimalDataAlignment returns the natural alignment of the hash word. - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - - /// \brief Updates a hash with additional input - /// \param input the additional input as a buffer - /// \param length the size of the buffer, in bytes - void Update(const byte *input, size_t length); - - /// \brief Requests space which can be written into by the caller - /// \param size the requested size of the buffer - /// \details The purpose of this method is to help avoid extra memory allocations. - /// \details size is an \a IN and \a OUT parameter and used as a hint. When the call is made, - /// size is the requested size of the buffer. When the call returns, size is the size of - /// the array returned to the caller. - /// \details The base class implementation sets size to 0 and returns NULL. - /// \note Some objects, like ArraySink, cannot create a space because its fixed. - byte * CreateUpdateSpace(size_t &size); - - /// \brief Restart the hash - /// \details Discards the current state, and restart for a new message - void Restart(); - - /// \brief Computes the hash of the current message - /// \param digest a pointer to the buffer to receive the hash - /// \param digestSize the size of the truncated digest, in bytes - /// \details TruncatedFinal() calls Final() and then copies digestSize bytes to digest. - /// The hash is restarted the hash for the next message. - void TruncatedFinal(byte *digest, size_t digestSize); - - /// \brief Retrieve the provider of this algorithm - /// \return the algorithm provider - /// \details The algorithm provider can be a name like "C++", "SSE", "NEON", "AESNI", - /// "ARMv8" and "Power8". C++ is standard C++ code. Other labels, like SSE, - /// usually indicate a specialized implementation using instructions from a higher - /// instruction set architecture (ISA). Future labels may include external hardware - /// like a hardware security module (HSM). - /// \note Provider is not universally implemented yet. - virtual std::string AlgorithmProvider() const { return "C++"; } - -protected: - inline T GetBitCountHi() const - {return (m_countLo >> (8*sizeof(T)-3)) + (m_countHi << 3);} - inline T GetBitCountLo() const - {return m_countLo << 3;} - - void PadLastBlock(unsigned int lastBlockSize, byte padFirst=0x80); - virtual void Init() =0; - - virtual ByteOrder GetByteOrder() const =0; - virtual void HashEndianCorrectedBlock(const HashWordType *data) =0; - virtual size_t HashMultipleBlocks(const T *input, size_t length); - void HashBlock(const HashWordType *input) - {HashMultipleBlocks(input, this->BlockSize());} - - virtual T* DataBuf() =0; - virtual T* StateBuf() =0; - -private: - T m_countLo, m_countHi; -}; - -/// \brief Iterated hash base class -/// \tparam T_HashWordType Hash word type -/// \tparam T_Endianness Endianness type of hash -/// \tparam T_BlockSize Block size of the hash -/// \tparam T_Base HashTransformation derived class -/// \details IteratedHash provides a default implementation for block-based iterated hashes -/// \sa HashTransformation, MessageAuthenticationCode -template -class CRYPTOPP_NO_VTABLE IteratedHash : public IteratedHashBase -{ -public: - typedef T_Endianness ByteOrderClass; - typedef T_HashWordType HashWordType; - - CRYPTOPP_CONSTANT(BLOCKSIZE = T_BlockSize); - // BCB2006 workaround: can't use BLOCKSIZE here - CRYPTOPP_COMPILE_ASSERT((T_BlockSize & (T_BlockSize - 1)) == 0); // blockSize is a power of 2 - - virtual ~IteratedHash() {} - - /// \brief Provides the block size of the hash - /// \return the block size of the hash, in bytes - /// \details BlockSize() returns T_BlockSize. - unsigned int BlockSize() const {return T_BlockSize;} - - /// \brief Provides the byte order of the hash - /// \return the byte order of the hash as an enumeration - /// \details GetByteOrder() returns T_Endianness::ToEnum(). - /// \sa ByteOrder() - ByteOrder GetByteOrder() const {return T_Endianness::ToEnum();} - - /// \brief Adjusts the byte ordering of the hash - /// \param out the output buffer - /// \param in the input buffer - /// \param byteCount the size of the buffers, in bytes - /// \details CorrectEndianess() calls ConditionalByteReverse() using T_Endianness. - inline void CorrectEndianess(HashWordType *out, const HashWordType *in, size_t byteCount) - { - CRYPTOPP_ASSERT(in != NULLPTR); - CRYPTOPP_ASSERT(out != NULLPTR); - CRYPTOPP_ASSERT(IsAligned(in)); - CRYPTOPP_ASSERT(IsAligned(out)); - - ConditionalByteReverse(T_Endianness::ToEnum(), out, in, byteCount); - } - -protected: - enum { Blocks = T_BlockSize/sizeof(T_HashWordType) }; - T_HashWordType* DataBuf() {return this->m_data;} - FixedSizeSecBlock m_data; -}; - -/// \brief Iterated hash with a static transformation function -/// \tparam T_HashWordType Hash word type -/// \tparam T_Endianness Endianness type of hash -/// \tparam T_BlockSize Block size of the hash -/// \tparam T_StateSize Internal state size of the hash -/// \tparam T_Transform HashTransformation derived class -/// \tparam T_DigestSize Digest size of the hash -/// \tparam T_StateAligned Flag indicating if state is 16-byte aligned -/// \sa HashTransformation, MessageAuthenticationCode -template -class CRYPTOPP_NO_VTABLE IteratedHashWithStaticTransform - : public ClonableImpl, T_Transform> > -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize ? T_DigestSize : T_StateSize); - - virtual ~IteratedHashWithStaticTransform() {} - - /// \brief Provides the digest size of the hash - /// \return the digest size of the hash, in bytes - /// \details DigestSize() returns DIGESTSIZE. - unsigned int DigestSize() const {return DIGESTSIZE;} - -protected: - // https://github.com/weidai11/cryptopp/issues/147#issuecomment-766231864 - IteratedHashWithStaticTransform() {IteratedHashWithStaticTransform::Init();} - void HashEndianCorrectedBlock(const T_HashWordType *data) {T_Transform::Transform(this->m_state, data);} - void Init() {T_Transform::InitState(this->m_state);} - - enum { Blocks = T_BlockSize/sizeof(T_HashWordType) }; - T_HashWordType* StateBuf() {return this->m_state;} - FixedSizeAlignedSecBlock m_state; -}; - -#if !defined(__GNUC__) && !defined(__clang__) - CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase; - CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase; - - CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase; - CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase; -#endif - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/kalyna.h b/third_party/cryptoppwin/include/cryptopp/kalyna.h deleted file mode 100644 index 0466ac14..00000000 --- a/third_party/cryptoppwin/include/cryptopp/kalyna.h +++ /dev/null @@ -1,218 +0,0 @@ -// kalyna.h - written and placed in the public domain by Jeffrey Walton -// Based on public domain code by Keru Kuro. - -/// \file kalyna.h -/// \brief Classes for the Kalyna block cipher -/// \details The Crypto++ implementation relied upon three sources. First was Oliynykov, Gorbenko, Kazymyrov, -/// Ruzhentsev, Kuznetsov, Gorbenko, Dyrda, Dolgov, Pushkaryov, Mordvinov and Kaidalov's "A New Encryption -/// Standard of Ukraine: The Kalyna Block Cipher" (http://eprint.iacr.org/2015/650.pdf). Second was Roman -/// Oliynykov and Oleksandr Kazymyrov's GitHub with the reference implementation -/// (http://github.com/Roman-Oliynykov/Kalyna-reference). The third resource was Keru Kuro's implementation -/// of Kalyna in CppCrypto (http://sourceforge.net/projects/cppcrypto/). Kuro has an outstanding -/// implementation that performed better than the reference implementation and our initial attempts. - -#ifndef CRYPTOPP_KALYNA_H -#define CRYPTOPP_KALYNA_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Kalyna-128 block cipher information -/// \since Crypto++ 6.0 -struct CRYPTOPP_NO_VTABLE Kalyna128_Info : public FixedBlockSize<16>, VariableKeyLength<16, 16, 32> -{ - static const char* StaticAlgorithmName() - { - // Format is Cipher-Blocksize(Keylength) - return "Kalyna-128"; - } -}; - -/// \brief Kalyna-256 block cipher information -/// \since Crypto++ 6.0 -struct CRYPTOPP_NO_VTABLE Kalyna256_Info : public FixedBlockSize<32>, VariableKeyLength<32, 32, 64> -{ - static const char* StaticAlgorithmName() - { - // Format is Cipher-Blocksize(Keylength) - return "Kalyna-256"; - } -}; - -/// \brief Kalyna-512 block cipher information -/// \since Crypto++ 6.0 -struct CRYPTOPP_NO_VTABLE Kalyna512_Info : public FixedBlockSize<64>, FixedKeyLength<64> -{ - static const char* StaticAlgorithmName() - { - // Format is Cipher-Blocksize(Keylength) - return "Kalyna-512"; - } -}; - -/// \brief Kalyna block cipher base class -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE Kalyna_Base -{ -public: - virtual ~Kalyna_Base() {} - -protected: - typedef SecBlock > AlignedSecBlock64; - mutable AlignedSecBlock64 m_wspace; // work space - AlignedSecBlock64 m_mkey; // master key - AlignedSecBlock64 m_rkeys; // round keys - unsigned int m_kl, m_nb, m_nk; // number 64-bit blocks and keys -}; - -/// \brief Kalyna 128-bit block cipher -/// \details Kalyna128 provides 128-bit block size. The valid key sizes are 128-bit and 256-bit. -/// \since Crypto++ 6.0 -class Kalyna128 : public Kalyna128_Info, public BlockCipherDocumentation -{ -public: - class CRYPTOPP_NO_VTABLE Base : public Kalyna_Base, public BlockCipherImpl - { - public: - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - /// \details If the object is unkeyed, then the generic name "Kalyna" is returned - /// to the caller. If the algorithm is keyed, then a two or three part name is - /// returned to the caller. The name follows DSTU 7624:2014, where block size is - /// provided first and then key length. The library uses a dash to identify block size - /// and parenthesis to identify key length. For example, Kalyna-128(256) is Kalyna - /// with a 128-bit block size and a 256-bit key length. If a mode is associated - /// with the object, then it follows as expected. For example, Kalyna-128(256)/ECB. - /// DSTU is a little more complex with more parameters, dashes, underscores, but the - /// library does not use the delimiters or full convention. - std::string AlgorithmName() const { - return std::string("Kalyna-128") + "(" + IntToString(m_kl*8) + ")"; - } - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const { - return GetAlignmentOf(); - } - - protected: - void UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - void SetKey_22(const word64 key[2]); - void SetKey_24(const word64 key[4]); - void ProcessBlock_22(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - void ProcessBlock_24(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief Kalyna 256-bit block cipher -/// \details Kalyna256 provides 256-bit block size. The valid key sizes are 256-bit and 512-bit. -/// \since Crypto++ 6.0 -class Kalyna256 : public Kalyna256_Info, public BlockCipherDocumentation -{ -public: - class CRYPTOPP_NO_VTABLE Base : public Kalyna_Base, public BlockCipherImpl - { - public: - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - /// \details If the object is unkeyed, then the generic name "Kalyna" is returned - /// to the caller. If the algorithm is keyed, then a two or three part name is - /// returned to the caller. The name follows DSTU 7624:2014, where block size is - /// provided first and then key length. The library uses a dash to identify block size - /// and parenthesis to identify key length. For example, Kalyna-128(256) is Kalyna - /// with a 128-bit block size and a 256-bit key length. If a mode is associated - /// with the object, then it follows as expected. For example, Kalyna-128(256)/ECB. - /// DSTU is a little more complex with more parameters, dashes, underscores, but the - /// library does not use the delimiters or full convention. - std::string AlgorithmName() const { - return std::string("Kalyna-256") + "(" + IntToString(m_kl*8) + ")"; - } - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const { - return GetAlignmentOf(); - } - - protected: - void UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - void SetKey_44(const word64 key[4]); - void SetKey_48(const word64 key[8]); - void ProcessBlock_44(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - void ProcessBlock_48(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief Kalyna 512-bit block cipher -/// \details Kalyna512 provides 512-bit block size. The valid key size is 512-bit. -/// \since Crypto++ 6.0 -class Kalyna512 : public Kalyna512_Info, public BlockCipherDocumentation -{ -public: - class CRYPTOPP_NO_VTABLE Base : public Kalyna_Base, public BlockCipherImpl - { - public: - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - /// \details If the object is unkeyed, then the generic name "Kalyna" is returned - /// to the caller. If the algorithm is keyed, then a two or three part name is - /// returned to the caller. The name follows DSTU 7624:2014, where block size is - /// provided first and then key length. The library uses a dash to identify block size - /// and parenthesis to identify key length. For example, Kalyna-128(256) is Kalyna - /// with a 128-bit block size and a 256-bit key length. If a mode is associated - /// with the object, then it follows as expected. For example, Kalyna-128(256)/ECB. - /// DSTU is a little more complex with more parameters, dashes, underscores, but the - /// library does not use the delimiters or full convention. - std::string AlgorithmName() const { - return std::string("Kalyna-512") + "(" + IntToString(m_kl*8) + ")"; - } - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const { - return GetAlignmentOf(); - } - - protected: - void UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - void SetKey_88(const word64 key[8]); - void ProcessBlock_88(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Kalyna128::Encryption Kalyna128Encryption; -typedef Kalyna128::Decryption Kalyna128Decryption; - -typedef Kalyna256::Encryption Kalyna256Encryption; -typedef Kalyna256::Decryption Kalyna256Decryption; - -typedef Kalyna512::Encryption Kalyna512Encryption; -typedef Kalyna512::Decryption Kalyna512Decryption; - -NAMESPACE_END - -#endif // CRYPTOPP_KALYNA_H diff --git a/third_party/cryptoppwin/include/cryptopp/keccak.h b/third_party/cryptoppwin/include/cryptopp/keccak.h deleted file mode 100644 index 2d9e3603..00000000 --- a/third_party/cryptoppwin/include/cryptopp/keccak.h +++ /dev/null @@ -1,118 +0,0 @@ -// keccak.h - originally written and placed in the public domain by Wei Dai - -/// \file keccak.h -/// \brief Classes for Keccak message digests -/// \details The Crypto++ Keccak implementation uses F1600 with XOF d=0x01. -/// FIPS 202 conformance (XOF d=0x06) is available in SHA3 classes. -/// \details Keccak will likely change in the future to accommodate extensibility of the -/// round function and the XOF functions. -/// \sa Keccak -/// \since Crypto++ 5.6.4 - -#ifndef CRYPTOPP_KECCAK_H -#define CRYPTOPP_KECCAK_H - -#include "cryptlib.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Keccak message digest base class -/// \details The Crypto++ Keccak implementation uses F1600 with XOF d=0x01. -/// FIPS 202 conformance (XOF d=0x06) is available in SHA3 classes. -/// \details Keccak is the base class for Keccak_224, Keccak_256, Keccak_384 and Keccak_512. -/// Library users should instantiate a derived class, and only use Keccak -/// as a base class reference or pointer. -/// \details Keccak will likely change in the future to accommodate extensibility of the -/// round function and the XOF functions. -/// \details Perform the following to specify a different digest size. The class will use F1600, -/// XOF d=0x01, and a new value for r() (which will be 200-2*24 = 152). -///
  Keccack_192 : public Keccack
-///   {
-///     public:
-///       CRYPTOPP_CONSTANT(DIGESTSIZE = 24);
-///       Keccack_192() : Keccack(DIGESTSIZE) {}
-///   };
-///   
-/// -/// \sa SHA3, Keccak_224, Keccak_256, Keccak_384 and Keccak_512. -/// \since Crypto++ 5.6.4 -class Keccak : public HashTransformation -{ -protected: - /// \brief Construct a Keccak - /// \param digestSize the digest size, in bytes - /// \details Keccak is the base class for Keccak_224, Keccak_256, Keccak_384 and Keccak_512. - /// Library users should instantiate a derived class, and only use Keccak - /// as a base class reference or pointer. - /// \details This constructor was moved to protected at Crypto++ 8.1 - /// because users were attempting to create Keccak objects with it. - /// \since Crypto++ 5.6.4 - Keccak(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} - -public: - unsigned int DigestSize() const {return m_digestSize;} - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - - void Update(const byte *input, size_t length); - void Restart(); - void TruncatedFinal(byte *hash, size_t size); - -protected: - inline unsigned int r() const {return BlockSize();} - - FixedSizeSecBlock m_state; - unsigned int m_digestSize, m_counter; -}; - -/// \brief Keccak message digest template -/// \tparam T_DigestSize the size of the digest, in bytes -/// \since Crypto++ 6.0 -template -class Keccak_Final : public Keccak -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize); - CRYPTOPP_CONSTANT(BLOCKSIZE = 200 - 2 * DIGESTSIZE); - static std::string StaticAlgorithmName() - { return "Keccak-" + IntToString(DIGESTSIZE * 8); } - - /// \brief Construct a Keccak-X message digest - Keccak_Final() : Keccak(DIGESTSIZE) {} - - /// \brief Provides the block size of the compression function - /// \return block size of the compression function, in bytes - /// \details BlockSize() will return 0 if the hash is not block based - /// or does not have an equivalent block size. For example, Keccak - /// and SHA-3 do not have a block size, but they do have an equivalent - /// block size called rate expressed as r. - unsigned int BlockSize() const { return BLOCKSIZE; } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } - -private: -#if !defined(__BORLANDC__) - // ensure there was no underflow in the math - CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); -#endif -}; - -/// \brief Keccak-224 message digest -/// \since Crypto++ 5.6.4 -DOCUMENTED_TYPEDEF(Keccak_Final<28>, Keccak_224); - -/// \brief Keccak-256 message digest -/// \since Crypto++ 5.6.4 -DOCUMENTED_TYPEDEF(Keccak_Final<32>, Keccak_256); - -/// \brief Keccak-384 message digest -/// \since Crypto++ 5.6.4 -DOCUMENTED_TYPEDEF(Keccak_Final<48>, Keccak_384); - -/// \brief Keccak-512 message digest -/// \since Crypto++ 5.6.4 -DOCUMENTED_TYPEDEF(Keccak_Final<64>, Keccak_512); - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/lea.h b/third_party/cryptoppwin/include/cryptopp/lea.h deleted file mode 100644 index 3ede3813..00000000 --- a/third_party/cryptoppwin/include/cryptopp/lea.h +++ /dev/null @@ -1,108 +0,0 @@ -// lea.h - written and placed in the public domain by Kim Sung Hee and Jeffrey Walton -// Based on "LEA: A 128-Bit Block Cipher for Fast Encryption on Common -// Processors" by Deukjo Hong, Jung-Keun Lee, Dong-Chan Kim, Daesung Kwon, -// Kwon Ho Ryu, and Dong-Geon Lee. - -/// \file lea.h -/// \brief Classes for the LEA block cipher -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_LEA_H -#define CRYPTOPP_LEA_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" -#include "algparam.h" - -#if (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8) -# ifndef CRYPTOPP_DISABLE_LEA_SIMD -# define CRYPTOPP_LEA_ADVANCED_PROCESS_BLOCKS 1 -# endif -#endif - -// Yet another SunStudio/SunCC workaround. Failed self tests -// in SSE code paths on i386 for SunStudio 12.3 and below. -#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5120) -# undef CRYPTOPP_LEA_ADVANCED_PROCESS_BLOCKS -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief LEA block cipher information -/// \since Crypto++ 8.0 -struct LEA_Info : public FixedBlockSize<16>, public VariableKeyLength<16,16,32,8> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize - return "LEA-128"; - } -}; - -/// \brief LEA 128-bit block cipher -/// \details LEA provides 128-bit block size. The valid key size is 128-bits, 192-bits and 256-bits. -/// \note Crypto++ provides a byte oriented implementation -/// \sa LEA, -/// -/// LEA: A 128-Bit Block Cipher for Fast Encryption on Common Processors -/// \since Crypto++ 8.0 -class CRYPTOPP_NO_VTABLE LEA : public LEA_Info, public BlockCipherDocumentation -{ -public: - /// \brief LEA block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - std::string AlgorithmProvider() const; - - SecBlock m_rkey; - mutable SecBlock m_temp; - unsigned int m_rounds; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - -#if CRYPTOPP_LEA_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - -#if CRYPTOPP_LEA_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef LEA::Encryption LEAEncryption; -typedef LEA::Decryption LEADecryption; - -NAMESPACE_END - -#endif // CRYPTOPP_LEA_H diff --git a/third_party/cryptoppwin/include/cryptopp/lsh.h b/third_party/cryptoppwin/include/cryptopp/lsh.h deleted file mode 100644 index f89630a7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/lsh.h +++ /dev/null @@ -1,262 +0,0 @@ -// lsh.h - written and placed in the public domain by Jeffrey Walton -// Based on the specification and source code provided by -// Korea Internet & Security Agency (KISA) website. Also -// see https://seed.kisa.or.kr/kisa/algorithm/EgovLSHInfo.do -// and https://seed.kisa.or.kr/kisa/Board/22/detailView.do. - -// We are hitting some sort of GCC bug in the LSH AVX2 code path. -// Clang is OK on the AVX2 code path. We believe it is GCC Issue -// 82735, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82735. It -// makes using zeroupper a little tricky. - -/// \file lsh.h -/// \brief Classes for the LSH hash functions -/// \since Crypto++ 8.6 -/// \sa LSH -/// on the Korea Internet & Security Agency (KISA) website. -#ifndef CRYPTOPP_LSH_H -#define CRYPTOPP_LSH_H - -#include "cryptlib.h" -#include "secblock.h" - -// Enable SSE2 and AVX2 for 64-bit machines. -// 32-bit machines slow down with SSE2. -#if (CRYPTOPP_BOOL_X32) || (CRYPTOPP_BOOL_X64) -# define CRYPTOPP_ENABLE_64BIT_SSE 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief LSH-224 and LSH-256 hash base class -/// \details LSH256_Base is the base class for both LSH-224 and LSH-256 -/// \since Crypto++ 8.6 -class LSH256_Base : public HashTransformation -{ -public: - /// \brief Block size, in bytes - /// \details LSH_256 uses LSH256_MSG_BLK_BYTE_LEN for block size, which is 128 - CRYPTOPP_CONSTANT(BLOCKSIZE = 128); - - virtual ~LSH256_Base() {} - - unsigned int BlockSize() const { return BLOCKSIZE; } - unsigned int DigestSize() const { return m_digestSize; } - unsigned int OptimalDataAlignment() const { return GetAlignmentOf(); } - - void Restart(); - void Update(const byte *input, size_t size); - void TruncatedFinal(byte *hash, size_t size); - - std::string AlgorithmProvider() const; - -protected: - LSH256_Base(unsigned int algType, unsigned int digestSize) - : m_digestSize(digestSize) { m_state[80] = algType; } - -protected: - // Working state is: - // * cv_l = 8 32-bit words - // * cv_r = 8 32-bit words - // * submsg_e_l = 8 32-bit words - // * submsg_e_r = 8 32-bit words - // * submsg_o_l = 8 32-bit words - // * submsg_o_r = 8 32-bit words - // * last_block = 32 32-bit words (128 bytes) - // * algType - // * remainingBitLength - FixedSizeSecBlock m_state; - // word32 m_algType, m_remainingBitLength; - word32 m_digestSize; -}; - -/// \brief LSH-224 hash function -/// \sa LSH -/// on the Korea Internet & Security Agency (KISA) website. -/// \since Crypto++ 8.6 -class LSH224 : public LSH256_Base -{ -public: - /// \brief Digest size, in bytes - /// \details LSH_256 uses LSH_GET_HASHBYTE(algType) for digest size, which is 28 - CRYPTOPP_CONSTANT(DIGESTSIZE = 28); - /// \brief Block size, in bytes - /// \details LSH_256 uses LSH256_MSG_BLK_BYTE_LEN for block size, which is 128 - CRYPTOPP_CONSTANT(BLOCKSIZE = LSH256_Base::BLOCKSIZE); - - /// \brief The algorithm's name - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like AES or AES/GCM. - /// Some algorithms do not have standard names yet. For example, there is no standard - /// algorithm name for Shoup's ECIES. - /// \note StaticAlgorithmName is not universally implemented yet. - static std::string StaticAlgorithmName() { return "LSH-224"; } - - /// \brief Construct a LSH-224 - /// \details LSH_TYPE_224 is the magic value 0x000001C defined in lsh.cpp. - LSH224() : LSH256_Base(0x000001C, DIGESTSIZE) { Restart(); } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } -}; - -/// \brief LSH-256 hash function -/// \sa LSH -/// on the Korea Internet & Security Agency (KISA) website. -/// \since Crypto++ 8.6 -class LSH256 : public LSH256_Base -{ -public: - /// \brief Digest size, in bytes - /// \details LSH_256 uses LSH_GET_HASHBYTE(algType) for digest size, which is 32 - CRYPTOPP_CONSTANT(DIGESTSIZE = 32); - /// \brief Block size, in bytes - /// \details LSH_256 uses LSH256_MSG_BLK_BYTE_LEN for block size, which is 128 - CRYPTOPP_CONSTANT(BLOCKSIZE = LSH256_Base::BLOCKSIZE); - - /// \brief The algorithm's name - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like AES or AES/GCM. - /// Some algorithms do not have standard names yet. For example, there is no standard - /// algorithm name for Shoup's ECIES. - /// \note StaticAlgorithmName is not universally implemented yet. - static std::string StaticAlgorithmName() { return "LSH-256"; } - - /// \brief Construct a LSH-256 - /// \details LSH_TYPE_256 is the magic value 0x0000020 defined in lsh.cpp. - LSH256() : LSH256_Base(0x0000020, DIGESTSIZE) { Restart(); } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } -}; - -/// \brief LSH-384 and LSH-512 hash base class -/// \details LSH512_Base is the base class for both LSH-384 and LSH-512 -/// \since Crypto++ 8.6 -class LSH512_Base : public HashTransformation -{ -public: - /// \brief Block size, in bytes - /// \details LSH_512 uses LSH512_MSG_BLK_BYTE_LEN for block size, which is 256 - CRYPTOPP_CONSTANT(BLOCKSIZE = 256); - - virtual ~LSH512_Base() {} - - unsigned int BlockSize() const { return BLOCKSIZE; } - unsigned int DigestSize() const { return m_digestSize; } - unsigned int OptimalDataAlignment() const { return GetAlignmentOf(); } - - void Restart(); - void Update(const byte *input, size_t size); - void TruncatedFinal(byte *hash, size_t size); - - std::string AlgorithmProvider() const; - -protected: - LSH512_Base(unsigned int algType, unsigned int digestSize) - : m_digestSize(digestSize) { m_state[80] = algType; } - -protected: - // Working state is: - // * cv_l = 8 64-bit words - // * cv_r = 8 64-bit words - // * submsg_e_l = 8 64-bit words - // * submsg_e_r = 8 64-bit words - // * submsg_o_l = 8 64-bit words - // * submsg_o_r = 8 64-bit words - // * last_block = 32 64-bit words (256 bytes) - // * algType - // * remainingBitLength - FixedSizeSecBlock m_state; - // word32 m_algType, m_remainingBitLength; - word32 m_digestSize; -}; - -/// \brief LSH-384 hash function -/// \sa LSH -/// on the Korea Internet & Security Agency (KISA) website. -/// \since Crypto++ 8.6 -class LSH384 : public LSH512_Base -{ -public: - /// \brief Digest size, in bytes - /// \details LSH_512 uses LSH_GET_HASHBYTE(algType) for digest size, which is 48 - CRYPTOPP_CONSTANT(DIGESTSIZE = 48); - /// \brief Block size, in bytes - /// \details LSH_512 uses LSH512_MSG_BLK_BYTE_LEN for block size, which is 256 - CRYPTOPP_CONSTANT(BLOCKSIZE = LSH512_Base::BLOCKSIZE); - - /// \brief The algorithm's name - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like AES or AES/GCM. - /// Some algorithms do not have standard names yet. For example, there is no standard - /// algorithm name for Shoup's ECIES. - /// \note StaticAlgorithmName is not universally implemented yet. - static std::string StaticAlgorithmName() { return "LSH-384"; } - - /// \brief Construct a LSH-384 - /// \details LSH_TYPE_384 is the magic value 0x0010030 defined in lsh.cpp. - LSH384() : LSH512_Base(0x0010030, DIGESTSIZE) { Restart(); } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } -}; - -/// \brief LSH-512 hash function -/// \sa LSH -/// on the Korea Internet & Security Agency (KISA) website. -/// \since Crypto++ 8.6 -class LSH512 : public LSH512_Base -{ -public: - /// \brief Digest size, in bytes - /// \details LSH_512 uses LSH_GET_HASHBYTE(algType) for digest size, which is 64 - CRYPTOPP_CONSTANT(DIGESTSIZE = 64); - /// \brief Block size, in bytes - /// \details LSH_512 uses LSH512_MSG_BLK_BYTE_LEN for block size, which is 256 - CRYPTOPP_CONSTANT(BLOCKSIZE = LSH512_Base::BLOCKSIZE); - - /// \brief The algorithm's name - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like AES or AES/GCM. - /// Some algorithms do not have standard names yet. For example, there is no standard - /// algorithm name for Shoup's ECIES. - /// \note StaticAlgorithmName is not universally implemented yet. - static std::string StaticAlgorithmName() { return "LSH-512"; } - - /// \brief Construct a LSH-512 - /// \details LSH_TYPE_512 is the magic value 0x0010040 defined in lsh.cpp. - LSH512() : LSH512_Base(0x0010040, DIGESTSIZE) { Restart(); } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } -}; - -/// \brief LSH-512-256 hash function -/// \sa LSH -/// on the Korea Internet & Security Agency (KISA) website. -/// \since Crypto++ 8.6 -class LSH512_256 : public LSH512_Base -{ -public: - /// \brief Digest size, in bytes - /// \details LSH_512 uses LSH_GET_HASHBYTE(algType) for digest size, which is 32 - CRYPTOPP_CONSTANT(DIGESTSIZE = 32); - /// \brief Block size, in bytes - /// \details LSH_512 uses LSH512_MSG_BLK_BYTE_LEN for block size, which is 256 - CRYPTOPP_CONSTANT(BLOCKSIZE = LSH512_Base::BLOCKSIZE); - - /// \brief The algorithm's name - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like AES or AES/GCM. - /// Some algorithms do not have standard names yet. For example, there is no standard - /// algorithm name for Shoup's ECIES. - /// \note StaticAlgorithmName is not universally implemented yet. - static std::string StaticAlgorithmName() { return "LSH-512-256"; } - - /// \brief Construct a LSH-512-256 - /// \details LSH_TYPE_512_256 is the magic value 0x0010020 defined in lsh.cpp. - LSH512_256() : LSH512_Base(0x0010020, DIGESTSIZE) { Restart(); } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } -}; - -NAMESPACE_END - -#endif // CRYPTOPP_LSH_H diff --git a/third_party/cryptoppwin/include/cryptopp/lubyrack.h b/third_party/cryptoppwin/include/cryptopp/lubyrack.h deleted file mode 100644 index e671303d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/lubyrack.h +++ /dev/null @@ -1,137 +0,0 @@ -// lubyrack.h - originally written and placed in the public domain by Wei Dai - -/// \file lubyrack.h -/// \brief Classes for the Luby-Rackoff block cipher - -#ifndef CRYPTOPP_LUBYRACK_H -#define CRYPTOPP_LUBYRACK_H - -#include "simple.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Luby-Rackoff block cipher information -template -struct LR_Info : public VariableKeyLength<16, 0, 2*(INT_MAX/2), 2>, public FixedBlockSize<2*T::DIGESTSIZE> -{ - static std::string StaticAlgorithmName() {return std::string("LR/")+T::StaticAlgorithmName();} -}; - -/// \brief Luby-Rackoff block cipher -template -class LR : public LR_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl > - { - public: - // VC60 workaround: have to define these functions within class definition - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms) - { - this->AssertValidKeyLength(length); - - L = length/2; - buffer.New(2*S); - digest.New(S); - key.Assign(userKey, 2*L); - } - - protected: - CRYPTOPP_CONSTANT(S=T::DIGESTSIZE); - unsigned int L; // key length / 2 - SecByteBlock key; - - mutable T hm; - mutable SecByteBlock buffer, digest; - }; - - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - -#define KL this->key -#define KR this->key+this->L -#define BL this->buffer -#define BR this->buffer+this->S -#define IL inBlock -#define IR inBlock+this->S -#define OL outBlock -#define OR outBlock+this->S - - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const - { - this->hm.Update(KL, this->L); - this->hm.Update(IL, this->S); - this->hm.Final(BR); - xorbuf(BR, IR, this->S); - - this->hm.Update(KR, this->L); - this->hm.Update(BR, this->S); - this->hm.Final(BL); - xorbuf(BL, IL, this->S); - - this->hm.Update(KL, this->L); - this->hm.Update(BL, this->S); - this->hm.Final(this->digest); - xorbuf(BR, this->digest, this->S); - - this->hm.Update(KR, this->L); - this->hm.Update(OR, this->S); - this->hm.Final(this->digest); - xorbuf(BL, this->digest, this->S); - - if (xorBlock) - xorbuf(outBlock, xorBlock, this->buffer, 2*this->S); - else - memcpy_s(outBlock, 2*this->S, this->buffer, 2*this->S); - } - }; - - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const - { - this->hm.Update(KR, this->L); - this->hm.Update(IR, this->S); - this->hm.Final(BL); - xorbuf(BL, IL, this->S); - - this->hm.Update(KL, this->L); - this->hm.Update(BL, this->S); - this->hm.Final(BR); - xorbuf(BR, IR, this->S); - - this->hm.Update(KR, this->L); - this->hm.Update(BR, this->S); - this->hm.Final(this->digest); - xorbuf(BL, this->digest, this->S); - - this->hm.Update(KL, this->L); - this->hm.Update(OL, this->S); - this->hm.Final(this->digest); - xorbuf(BR, this->digest, this->S); - - if (xorBlock) - xorbuf(outBlock, xorBlock, this->buffer, 2*this->S); - else - std::memcpy(outBlock, this->buffer, 2*this->S); - } -#undef KL -#undef KR -#undef BL -#undef BR -#undef IL -#undef IR -#undef OL -#undef OR - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/luc.h b/third_party/cryptoppwin/include/cryptopp/luc.h deleted file mode 100644 index 7c0c1b7c..00000000 --- a/third_party/cryptoppwin/include/cryptopp/luc.h +++ /dev/null @@ -1,338 +0,0 @@ -// luc.h - originally written and placed in the public domain by Wei Dai - -/// \file luc.h -/// \brief Classes for the LUC cryptosystem -/// \details This class is here for historical and pedagogical interest. It has no practical advantages over other -/// trapdoor functions and probably shouldn't be used in production software. The discrete log based LUC schemes -/// defined later in this .h file may be of more practical interest. -/// \since Crypto++ 2.1 - -#ifndef CRYPTOPP_LUC_H -#define CRYPTOPP_LUC_H - -#include "cryptlib.h" -#include "gfpcrypt.h" -#include "integer.h" -#include "algebra.h" -#include "secblock.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4127 4189) -#endif - -#include "pkcspad.h" -#include "integer.h" -#include "oaep.h" -#include "dh.h" - -#include - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief The LUC function. -/// \details This class is here for historical and pedagogical interest. It has no practical advantages over other -/// trapdoor functions and probably shouldn't be used in production software. The discrete log based LUC schemes -/// defined later in this .h file may be of more practical interest. -/// \since Crypto++ 2.1 -class LUCFunction : public TrapdoorFunction, public PublicKey -{ - typedef LUCFunction ThisClass; - -public: - virtual ~LUCFunction() {} - - /// \brief Initialize a LUC public key with {n,e} - /// \param n the modulus - /// \param e the public exponent - void Initialize(const Integer &n, const Integer &e) - {m_n = n; m_e = e;} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - Integer ApplyFunction(const Integer &x) const; - Integer PreimageBound() const {return m_n;} - Integer ImageBound() const {return m_n;} - - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // non-derived interface - const Integer & GetModulus() const {return m_n;} - const Integer & GetPublicExponent() const {return m_e;} - - void SetModulus(const Integer &n) {m_n = n;} - void SetPublicExponent(const Integer &e) {m_e = e;} - -protected: - Integer m_n, m_e; -}; - -/// \brief The LUC inverse function. -/// \details This class is here for historical and pedagogical interest. It has no practical advantages over other -/// trapdoor functions and probably shouldn't be used in production software. The discrete log based LUC schemes -/// defined later in this .h file may be of more practical interest. -/// \since Crypto++ 2.1 -class InvertibleLUCFunction : public LUCFunction, public TrapdoorFunctionInverse, public PrivateKey -{ - typedef InvertibleLUCFunction ThisClass; - -public: - virtual ~InvertibleLUCFunction() {} - - /// \brief Create a LUC private key - /// \param rng a RandomNumberGenerator derived class - /// \param modulusBits the size of the modulus, in bits - /// \param eStart the desired starting public exponent - /// \details Initialize() creates a new keypair using a starting public exponent of 17. - /// \details This function overload of Initialize() creates a new keypair because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits, const Integer &eStart=17); - - /// \brief Initialize a LUC private key with {n,e,p,q,dp,dq,u} - /// \param n modulus - /// \param e public exponent - /// \param p first prime factor - /// \param q second prime factor - /// \param u q-1 mod p - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const Integer &n, const Integer &e, const Integer &p, const Integer &q, const Integer &u) - {m_n = n; m_e = e; m_p = p; m_q = q; m_u = u;} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const; - - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - /*! parameters: (ModulusSize, PublicExponent (default 17)) */ - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg); - - // non-derived interface - const Integer& GetPrime1() const {return m_p;} - const Integer& GetPrime2() const {return m_q;} - const Integer& GetMultiplicativeInverseOfPrime2ModPrime1() const {return m_u;} - - void SetPrime1(const Integer &p) {m_p = p;} - void SetPrime2(const Integer &q) {m_q = q;} - void SetMultiplicativeInverseOfPrime2ModPrime1(const Integer &u) {m_u = u;} - -protected: - Integer m_p, m_q, m_u; -}; - -/// \brief LUC cryptosystem -/// \since Crypto++ 2.1 -struct LUC -{ - static std::string StaticAlgorithmName() {return "LUC";} - typedef LUCFunction PublicKey; - typedef InvertibleLUCFunction PrivateKey; -}; - -/// \brief LUC encryption scheme -/// \tparam STANDARD signature standard -/// \details This class is here for historical and pedagogical interest. It has no practical advantages over other -/// trapdoor functions and probably shouldn't be used in production software. The discrete log based LUC schemes -/// defined later in this .h file may be of more practical interest. -/// \since Crypto++ 2.1 -template -struct LUCES : public TF_ES -{ -}; - -/// \brief LUC signature scheme with appendix -/// \tparam STANDARD signature standard -/// \tparam H hash transformation -/// \details This class is here for historical and pedagogical interest. It has no practical advantages over other -/// trapdoor functions and probably shouldn't be used in production software. The discrete log based LUC schemes -/// defined later in this .h file may be of more practical interest. -/// \since Crypto++ 2.1 -template -struct LUCSS : public TF_SS -{ -}; - -// analogous to the RSA schemes defined in PKCS #1 v2.0 -typedef LUCES >::Decryptor LUCES_OAEP_SHA_Decryptor; -typedef LUCES >::Encryptor LUCES_OAEP_SHA_Encryptor; - -typedef LUCSS::Signer LUCSSA_PKCS1v15_SHA_Signer; -typedef LUCSS::Verifier LUCSSA_PKCS1v15_SHA_Verifier; - -// ******************************************************** - -/// \brief LUC GroupParameters precomputation -/// \details No actual precomputation is performed -/// \since Crypto++ 2.1 -class DL_GroupPrecomputation_LUC : public DL_GroupPrecomputation -{ -public: - virtual ~DL_GroupPrecomputation_LUC() {} - - const AbstractGroup & GetGroup() const {CRYPTOPP_ASSERT(false); throw 0;} - Element BERDecodeElement(BufferedTransformation &bt) const {return Integer(bt);} - void DEREncodeElement(BufferedTransformation &bt, const Element &v) const {v.DEREncode(bt);} - - // non-inherited - void SetModulus(const Integer &v) {m_p = v;} - const Integer & GetModulus() const {return m_p;} - -private: - Integer m_p; -}; - -/// \brief LUC Precomputation -/// \since Crypto++ 2.1 -class DL_BasePrecomputation_LUC : public DL_FixedBasePrecomputation -{ -public: - virtual ~DL_BasePrecomputation_LUC() {} - - // DL_FixedBasePrecomputation - bool IsInitialized() const {return m_g.NotZero();} - void SetBase(const DL_GroupPrecomputation &group, const Integer &base) - {CRYPTOPP_UNUSED(group); m_g = base;} - const Integer & GetBase(const DL_GroupPrecomputation &group) const - {CRYPTOPP_UNUSED(group); return m_g;} - void Precompute(const DL_GroupPrecomputation &group, unsigned int maxExpBits, unsigned int storage) - {CRYPTOPP_UNUSED(group); CRYPTOPP_UNUSED(maxExpBits); CRYPTOPP_UNUSED(storage);} - void Load(const DL_GroupPrecomputation &group, BufferedTransformation &storedPrecomputation) - {CRYPTOPP_UNUSED(group); CRYPTOPP_UNUSED(storedPrecomputation);} - void Save(const DL_GroupPrecomputation &group, BufferedTransformation &storedPrecomputation) const - {CRYPTOPP_UNUSED(group); CRYPTOPP_UNUSED(storedPrecomputation);} - Integer Exponentiate(const DL_GroupPrecomputation &group, const Integer &exponent) const; - Integer CascadeExponentiate(const DL_GroupPrecomputation &group, const Integer &exponent, const DL_FixedBasePrecomputation &pc2, const Integer &exponent2) const - { - CRYPTOPP_UNUSED(group); CRYPTOPP_UNUSED(exponent); CRYPTOPP_UNUSED(pc2); CRYPTOPP_UNUSED(exponent2); - // shouldn't be called - throw NotImplemented("DL_BasePrecomputation_LUC: CascadeExponentiate not implemented"); - } - -private: - Integer m_g; -}; - -/// \brief LUC GroupParameters specialization -/// \since Crypto++ 2.1 -class DL_GroupParameters_LUC : public DL_GroupParameters_IntegerBasedImpl -{ -public: - virtual ~DL_GroupParameters_LUC() {} - - // DL_GroupParameters - bool IsIdentity(const Integer &element) const {return element == Integer::Two();} - void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const; - Element MultiplyElements(const Element &a, const Element &b) const - { - CRYPTOPP_UNUSED(a); CRYPTOPP_UNUSED(b); - throw NotImplemented("LUC_GroupParameters: MultiplyElements can not be implemented"); - } - Element CascadeExponentiate(const Element &element1, const Integer &exponent1, const Element &element2, const Integer &exponent2) const - { - CRYPTOPP_UNUSED(element1); CRYPTOPP_UNUSED(exponent1); CRYPTOPP_UNUSED(element2); CRYPTOPP_UNUSED(exponent2); - throw NotImplemented("LUC_GroupParameters: MultiplyElements can not be implemented"); - } - - // NameValuePairs interface - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const - { - return GetValueHelper(this, name, valueType, pValue).Assignable(); - } - -private: - int GetFieldType() const {return 2;} -}; - -/// \brief GF(p) group parameters that default to safe primes -/// \since Crypto++ 2.1 -class DL_GroupParameters_LUC_DefaultSafePrime : public DL_GroupParameters_LUC -{ -public: - typedef NoCofactorMultiplication DefaultCofactorOption; - -protected: - unsigned int GetDefaultSubgroupOrderSize(unsigned int modulusSize) const {return modulusSize-1;} -}; - -/// \brief LUC HMP signature algorithm -/// \since Crypto++ 2.1 -class DL_Algorithm_LUC_HMP : public DL_ElgamalLikeSignatureAlgorithm -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "LUC-HMP";} - - virtual ~DL_Algorithm_LUC_HMP() {} - - void Sign(const DL_GroupParameters ¶ms, const Integer &x, const Integer &k, const Integer &e, Integer &r, Integer &s) const; - bool Verify(const DL_GroupParameters ¶ms, const DL_PublicKey &publicKey, const Integer &e, const Integer &r, const Integer &s) const; - - size_t RLen(const DL_GroupParameters ¶ms) const - {return params.GetGroupOrder().ByteCount();} -}; - -/// \brief LUC signature keys -/// \since Crypto++ 2.1 -struct DL_SignatureKeys_LUC -{ - typedef DL_GroupParameters_LUC GroupParameters; - typedef DL_PublicKey_GFP PublicKey; - typedef DL_PrivateKey_GFP PrivateKey; -}; - -/// \brief LUC-HMP, based on "Digital signature schemes based on Lucas functions" by Patrick Horster, Markus Michels, Holger Petersen -/// \tparam H hash transformation -/// \details This class is here for historical and pedagogical interest. It has no practical advantages over other -/// trapdoor functions and probably shouldn't be used in production software. The discrete log based LUC schemes -/// defined later in this .h file may be of more practical interest. -/// \since Crypto++ 2.1 -template -struct LUC_HMP : public DL_SS -{ -}; - -/// \brief LUC encryption keys -/// \since Crypto++ 2.1 -struct DL_CryptoKeys_LUC -{ - typedef DL_GroupParameters_LUC_DefaultSafePrime GroupParameters; - typedef DL_PublicKey_GFP PublicKey; - typedef DL_PrivateKey_GFP PrivateKey; -}; - -/// \brief LUC Integrated Encryption Scheme -/// \tparam COFACTOR_OPTION cofactor multiplication option -/// \tparam HASH HashTransformation derived class used for key drivation and MAC computation -/// \tparam DHAES_MODE flag indicating if the MAC includes additional context parameters such as u·V, v·U and label -/// \tparam LABEL_OCTETS flag indicating if the label size is specified in octets or bits -/// \sa CofactorMultiplicationOption -/// \since Crypto++ 2.1, Crypto++ 5.7 for Bouncy Castle and Botan compatibility -template -struct LUC_IES - : public DL_ES< - DL_CryptoKeys_LUC, - DL_KeyAgreementAlgorithm_DH, - DL_KeyDerivationAlgorithm_P1363 >, - DL_EncryptionAlgorithm_Xor, DHAES_MODE, LABEL_OCTETS>, - LUC_IES<> > -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "LUC-IES";} // non-standard name -}; - -// ******************************************************** - -/// \brief LUC-DH -typedef DH_Domain LUC_DH; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/mars.h b/third_party/cryptoppwin/include/cryptopp/mars.h deleted file mode 100644 index 53c093c9..00000000 --- a/third_party/cryptoppwin/include/cryptopp/mars.h +++ /dev/null @@ -1,60 +0,0 @@ -// mars.h - originally written and placed in the public domain by Wei Dai - -/// \file mars.h -/// \brief Classes for the MARS block cipher (IBM AES submission) -/// \since Crypto++ 3.0 - -#ifndef CRYPTOPP_MARS_H -#define CRYPTOPP_MARS_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief MARS block cipher information -/// \since Crypto++ 3.0 -struct MARS_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 56, 8> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "MARS";} -}; - -/// \brief MARS block cipher -/// \sa MARS -/// \since Crypto++ 3.0 -class MARS : public MARS_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - static const word32 Sbox[512]; - - FixedSizeSecBlock m_k; - }; - - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef MARS::Encryption MARSEncryption; -typedef MARS::Decryption MARSDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/md2.h b/third_party/cryptoppwin/include/cryptopp/md2.h deleted file mode 100644 index 83335d30..00000000 --- a/third_party/cryptoppwin/include/cryptopp/md2.h +++ /dev/null @@ -1,56 +0,0 @@ -// md2.h - originally written and placed in the public domain by Wei Dai - -/// \file md2.h -/// \brief Classes for the MD2 message digest -/// \since Crypto++ 3.0 - -#ifndef CRYPTOPP_MD2_H -#define CRYPTOPP_MD2_H - -#include "cryptlib.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -namespace Weak1 { - -/// \brief MD2 message digest -/// \sa MD2 -/// \since Crypto++ 3.0 -class MD2 : public HashTransformation -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "MD2";} - - MD2(); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *hash, size_t size); - unsigned int DigestSize() const {return DIGESTSIZE;} - unsigned int BlockSize() const {return BLOCKSIZE;} - std::string AlgorithmName() const {return StaticAlgorithmName();} - - CRYPTOPP_CONSTANT(DIGESTSIZE = 16); - CRYPTOPP_CONSTANT(BLOCKSIZE = 16); - -private: - void Transform(); - void Init(); - SecByteBlock m_X, m_C, m_buf; - unsigned int m_count; -}; - -} -#if CRYPTOPP_ENABLE_NAMESPACE_WEAK >= 1 -namespace Weak {using namespace Weak1;} // import Weak1 into CryptoPP::Weak -#else -using namespace Weak1; // import Weak1 into CryptoPP with warning -#ifdef __GNUC__ -#warning "You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning." -#else -#pragma message("You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning.") -#endif -#endif - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/md4.h b/third_party/cryptoppwin/include/cryptopp/md4.h deleted file mode 100644 index 8984b5e0..00000000 --- a/third_party/cryptoppwin/include/cryptopp/md4.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef CRYPTOPP_MD4_H -#define CRYPTOPP_MD4_H - -#include "iterhash.h" - -NAMESPACE_BEGIN(CryptoPP) - -namespace Weak1 { - -/// MD4 -/*! \warning MD4 is considered insecure, and should not be used - unless you absolutely need it for compatibility. */ -class MD4 : public IteratedHashWithStaticTransform -{ -public: - static void InitState(HashWordType *state); - static void Transform(word32 *digest, const word32 *data); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "MD4";} -}; - -} -#if CRYPTOPP_ENABLE_NAMESPACE_WEAK >= 1 -namespace Weak {using namespace Weak1;} // import Weak1 into CryptoPP::Weak -#else -using namespace Weak1; // import Weak1 into CryptoPP with warning -#ifdef __GNUC__ -#warning "You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning." -#else -#pragma message("You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning.") -#endif -#endif - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/md5.h b/third_party/cryptoppwin/include/cryptopp/md5.h deleted file mode 100644 index 2b3e2c3b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/md5.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef CRYPTOPP_MD5_H -#define CRYPTOPP_MD5_H - -#include "iterhash.h" - -NAMESPACE_BEGIN(CryptoPP) - -namespace Weak1 { - -/// \brief MD5 message digest -/// \sa MD5 -/// \since Crypto++ 1.0 -class MD5 : public IteratedHashWithStaticTransform -{ -public: - static void InitState(HashWordType *state); - static void Transform(word32 *digest, const word32 *data); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "MD5";} -}; - -} -#if CRYPTOPP_ENABLE_NAMESPACE_WEAK >= 1 -namespace Weak {using namespace Weak1;} // import Weak1 into CryptoPP::Weak -#else -using namespace Weak1; // import Weak1 into CryptoPP with warning -#ifdef __GNUC__ -#warning "You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning." -#else -#pragma message("You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning.") -#endif -#endif - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/mdc.h b/third_party/cryptoppwin/include/cryptopp/mdc.h deleted file mode 100644 index 68d5ab8c..00000000 --- a/third_party/cryptoppwin/include/cryptopp/mdc.h +++ /dev/null @@ -1,84 +0,0 @@ -// mdc.h - originally written and placed in the public domain by Wei Dai - -/// \file mdc.h -/// \brief Classes for the MDC message digest - -#ifndef CRYPTOPP_MDC_H -#define CRYPTOPP_MDC_H - -#include "seckey.h" -#include "secblock.h" -#include "misc.h" - -// GCC cast warning -#define HashWordPtr(x) ((HashWordType*)(void*)(x)) -#define ConstHashWordPtr(x) ((const HashWordType*)(const void*)(x)) - -NAMESPACE_BEGIN(CryptoPP) - -/// \tparam B BlockCipher derived class -/// \brief MDC_Info cipher information -template -struct MDC_Info : public FixedBlockSize, public FixedKeyLength -{ - static std::string StaticAlgorithmName() {return std::string("MDC/")+B::StaticAlgorithmName();} -}; - -/// \brief MDC cipher -/// \tparam H HashTransformation derived class -/// \details MDC() is a construction by Peter Gutmann to turn an iterated hash function into a PRF -/// \sa MDC -template -class MDC : public MDC_Info -{ - /// \brief MDC cipher encryption operation - class CRYPTOPP_NO_VTABLE Enc : public BlockCipherImpl > - { - typedef typename H::HashWordType HashWordType; - - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms) - { - CRYPTOPP_UNUSED(params); - this->AssertValidKeyLength(length); - ConditionalByteReverse(BIG_ENDIAN_ORDER, Key(), ConstHashWordPtr(userKey), this->KEYLENGTH); - } - - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const - { - ConditionalByteReverse(BIG_ENDIAN_ORDER, Buffer(), ConstHashWordPtr(inBlock), this->BLOCKSIZE); - H::Transform(Buffer(), Key()); - - if (xorBlock) - { - ConditionalByteReverse(BIG_ENDIAN_ORDER, Buffer(), Buffer(), this->BLOCKSIZE); - xorbuf(outBlock, xorBlock, m_buffer, this->BLOCKSIZE); - } - else - { - ConditionalByteReverse(BIG_ENDIAN_ORDER, HashWordPtr(outBlock), Buffer(), this->BLOCKSIZE); - } - } - - bool IsPermutation() const {return false;} - - unsigned int OptimalDataAlignment() const {return sizeof(HashWordType);} - - private: - HashWordType *Key() {return HashWordPtr(m_key.data());} - const HashWordType *Key() const {return ConstHashWordPtr(m_key.data());} - HashWordType *Buffer() const {return HashWordPtr(m_buffer.data());} - - // VC60 workaround: bug triggered if using FixedSizeAllocatorWithCleanup - FixedSizeSecBlock::KEYLENGTH, AllocatorWithCleanup > m_key; - mutable FixedSizeSecBlock::BLOCKSIZE, AllocatorWithCleanup > m_buffer; - }; - -public: - // use BlockCipher interface - typedef BlockCipherFinal Encryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/mersenne.h b/third_party/cryptoppwin/include/cryptopp/mersenne.h deleted file mode 100644 index 326d9116..00000000 --- a/third_party/cryptoppwin/include/cryptopp/mersenne.h +++ /dev/null @@ -1,231 +0,0 @@ -// mersenne.h - written and placed in public domain by Jeffrey Walton. - -/// \file mersenne.h -/// \brief Class file for Mersenne Twister -/// \warning MersenneTwister is suitable for Monte-Carlo simulations, where uniformaly distributed -/// numbers are required quickly. It should not be used for cryptographic purposes. -/// \since Crypto++ 5.6.3 -#ifndef CRYPTOPP_MERSENNE_TWISTER_H -#define CRYPTOPP_MERSENNE_TWISTER_H - -#include "cryptlib.h" -#include "secblock.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Mersenne Twister class for Monte-Carlo simulations -/// \tparam K Magic constant -/// \tparam M Period parameter -/// \tparam N Size of the state vector -/// \tparam F Multiplier constant -/// \tparam S Initial seed -/// \details Provides the MersenneTwister implementation. The class is a header-only implementation. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \warning MersenneTwister is suitable for simulations, where uniformaly distributed numbers are -/// required quickly. It should not be used for cryptographic purposes. -/// \sa MT19937, MT19937ar -/// \since Crypto++ 5.6.3 -template -class MersenneTwister : public RandomNumberGenerator -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return (S==5489 ? "MT19937ar" : (S==4537 ? "MT19937" : "MT19937x")); } - - ~MersenneTwister() {} - - /// \brief Construct a Mersenne Twister - /// \param seed 32-bit seed - /// \details Defaults to template parameter S due to changing algorithm - /// parameters over time - MersenneTwister(word32 seed = S) : m_idx(N) - { - Reset(seed); - } - - bool CanIncorporateEntropy() const {return true;} - - /// \brief Update RNG state with additional unpredictable values - /// \param input the entropy to add to the generator - /// \param length the size of the input buffer - /// \details MersenneTwister uses the first 32-bits of input to reseed the - /// generator. If fewer bytes are provided, then the seed is padded with 0's. - void IncorporateEntropy(const byte *input, size_t length) - { - // Handle word32 size blocks - FixedSizeSecBlock temp; - temp[0] = 0; - - if (length > 4) - length = 4; - - for (size_t i=0; i temp; - for (size_t i=0; i < size/4; i++, output += 4) - { - temp[0] = NextMersenneWord(); - std::memcpy(output, temp+0, 4); - } - - // No tail bytes - if (size%4 == 0) - return; - - // Handle tail bytes - temp[0] = NextMersenneWord(); - switch (size%4) - { - case 3: output[2] = CRYPTOPP_GET_BYTE_AS_BYTE(temp[0], 1); /* fall through */ - case 2: output[1] = CRYPTOPP_GET_BYTE_AS_BYTE(temp[0], 2); /* fall through */ - case 1: output[0] = CRYPTOPP_GET_BYTE_AS_BYTE(temp[0], 3); break; - - default: CRYPTOPP_ASSERT(0);; - } - } - - /// \brief Generate a random 32-bit word in the range min to max, inclusive - /// \return random 32-bit word in the range min to max, inclusive - /// \details If the 32-bit candidate is not within the range, then it is discarded - /// and a new candidate is used. - word32 GenerateWord32(word32 min=0, word32 max=0xffffffffL) - { - const word32 range = max-min; - if (range == 0xffffffffL) - return NextMersenneWord(); - - const int maxBits = BitPrecision(range); - word32 value; - - do{ - value = Crop(NextMersenneWord(), maxBits); - } while (value > range); - - return value+min; - } - - /// \brief Generate and discard n bytes - /// \param n the number of bytes to discard, rounded up to a word32 size - /// \details If n is not a multiple of word32, then unused bytes are - /// not accumulated for subsequent calls to GenerateBlock. Rather, the unused - /// tail bytes are discarded, and the stream is continued at the next - /// word32 boundary from the state array. - void DiscardBytes(size_t n) - { - for(size_t i=0; i < RoundUpToMultipleOf(n, 4U); i++) - NextMersenneWord(); - } - -protected: - - void Reset(word32 seed) - { - m_idx = N; - - m_state[0] = seed; - for (unsigned int i = 1; i < N+1; i++) - m_state[i] = word32(F * (m_state[i-1] ^ (m_state[i-1] >> 30)) + i); - } - - /// \brief Returns the next 32-bit word from the state array - /// \return the next 32-bit word from the state array - /// \details fetches the next word frm the state array, performs bit operations on - /// it, and then returns the value to the caller. - word32 NextMersenneWord() - { - if (m_idx >= N) { Twist(); } - - word32 temp = m_state[m_idx++]; - - temp ^= (temp >> 11); - temp ^= (temp << 7) & 0x9D2C5680; // 0x9D2C5680 (2636928640) - temp ^= (temp << 15) & 0xEFC60000; // 0xEFC60000 (4022730752) - - return temp ^ (temp >> 18); - } - - /// \brief Performs the twist operation on the state array - void Twist() - { - static const word32 magic[2]={0x0UL, K}; - word32 kk, temp; - - CRYPTOPP_ASSERT(N >= M); - for (kk=0;kk> 1) ^ magic[temp & 0x1UL]; - } - - for (;kk> 1) ^ magic[temp & 0x1UL]; - } - - temp = (m_state[N-1] & 0x80000000)|(m_state[0] & 0x7FFFFFFF); - m_state[N-1] = m_state[M-1] ^ (temp >> 1) ^ magic[temp & 0x1UL]; - - // Reset index - m_idx = 0; - - // Wipe temp - SecureWipeArray(&temp, 1); - } - -private: - - /// \brief 32-bit word state array of size N - FixedSizeSecBlock m_state; - /// \brief the current index into the state array - word32 m_idx; -}; - -/// \brief Original MT19937 generator provided in the ACM paper. -/// \details MT19937 uses 4537 as default initial seed. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \sa MT19937ar, Mersenne twister: -/// a 623-dimensionally equidistributed uniform pseudo-random number generator -/// \since Crypto++ 5.6.3 -#if CRYPTOPP_DOXYGEN_PROCESSING -class MT19937 : public MersenneTwister<0x9908B0DF /*2567483615*/, 397, 624, 0x10DCD /*69069*/, 4537> {}; -#else -typedef MersenneTwister<0x9908B0DF /*2567483615*/, 397, 624, 0x10DCD /*69069*/, 4537> MT19937; -#endif - -/// \brief Updated MT19937 generator adapted to provide an array for initialization. -/// \details MT19937 uses 5489 as default initial seed. Use this generator when interoperating with C++11's -/// mt19937 class. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \sa MT19937, Mersenne Twister -/// with improved initialization -/// \since Crypto++ 5.6.3 -#if CRYPTOPP_DOXYGEN_PROCESSING -class MT19937ar : public MersenneTwister<0x9908B0DF /*2567483615*/, 397, 624, 0x6C078965 /*1812433253*/, 5489> {}; -#else -typedef MersenneTwister<0x9908B0DF /*2567483615*/, 397, 624, 0x6C078965 /*1812433253*/, 5489> MT19937ar; -#endif - -NAMESPACE_END - -#endif // CRYPTOPP_MERSENNE_TWISTER_H diff --git a/third_party/cryptoppwin/include/cryptopp/misc.h b/third_party/cryptoppwin/include/cryptopp/misc.h deleted file mode 100644 index 2e2bd5a5..00000000 --- a/third_party/cryptoppwin/include/cryptopp/misc.h +++ /dev/null @@ -1,3222 +0,0 @@ -// misc.h - originally written and placed in the public domain by Wei Dai - -/// \file misc.h -/// \brief Utility functions for the Crypto++ library. - -#ifndef CRYPTOPP_MISC_H -#define CRYPTOPP_MISC_H - -#include "config.h" - -#include "cryptlib.h" -#include "secblockfwd.h" -#include "smartptr.h" -#include "stdcpp.h" -#include "trap.h" - -#if !defined(CRYPTOPP_DOXYGEN_PROCESSING) - -#if (CRYPTOPP_MSC_VERSION) -# pragma warning(push) -# pragma warning(disable: 4146 4514) -# if (CRYPTOPP_MSC_VERSION >= 1400) -# pragma warning(disable: 6326) -# endif -#endif - -// Issue 340 and Issue 793 -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wconversion" -# pragma GCC diagnostic ignored "-Wsign-conversion" -# pragma GCC diagnostic ignored "-Wunused-function" -#endif - -#ifdef CRYPTOPP_MSC_VERSION - #if CRYPTOPP_MSC_VERSION >= 1400 - // VC2005 workaround: disable declarations that conflict with winnt.h - #define _interlockedbittestandset CRYPTOPP_DISABLED_INTRINSIC_1 - #define _interlockedbittestandreset CRYPTOPP_DISABLED_INTRINSIC_2 - #define _interlockedbittestandset64 CRYPTOPP_DISABLED_INTRINSIC_3 - #define _interlockedbittestandreset64 CRYPTOPP_DISABLED_INTRINSIC_4 - #include - #undef _interlockedbittestandset - #undef _interlockedbittestandreset - #undef _interlockedbittestandset64 - #undef _interlockedbittestandreset64 - #define CRYPTOPP_FAST_ROTATE(x) 1 - #elif CRYPTOPP_MSC_VERSION >= 1300 - #define CRYPTOPP_FAST_ROTATE(x) ((x) == 32 | (x) == 64) - #else - #define CRYPTOPP_FAST_ROTATE(x) ((x) == 32) - #endif -#elif (defined(__MWERKS__) && TARGET_CPU_PPC) || \ - (defined(__GNUC__) && (defined(_ARCH_PWR2) || defined(_ARCH_PWR) || defined(_ARCH_PPC) || defined(_ARCH_PPC64) || defined(_ARCH_COM))) - #define CRYPTOPP_FAST_ROTATE(x) ((x) == 32) -#elif defined(__GNUC__) && (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86) // depend on GCC's peephole optimization to generate rotate instructions - #define CRYPTOPP_FAST_ROTATE(x) 1 -#else - #define CRYPTOPP_FAST_ROTATE(x) 0 -#endif - -#ifdef __BORLANDC__ -#include -#include -#endif - -#if (defined(__GNUC__) || defined(__clang__)) && defined(__linux__) -#define CRYPTOPP_BYTESWAP_AVAILABLE 1 -#include -#endif - -// Limit to ARM A-32. Aarch64 is failing self tests. -#if defined(__arm__) && (defined(__GNUC__) || defined(__clang__)) && (__ARM_ARCH >= 6) -#define CRYPTOPP_ARM_BYTEREV_AVAILABLE 1 -#endif - -// Limit to ARM A-32. Aarch64 is failing self tests. -#if defined(__arm__) && (defined(__GNUC__) || defined(__clang__)) && (__ARM_ARCH >= 7) -#define CRYPTOPP_ARM_BITREV_AVAILABLE 1 -#endif - -#if defined(__BMI__) -# if defined(CRYPTOPP_GCC_COMPATIBLE) -# include -# endif -# include -#endif // BMI - -// More LLVM bullshit. Apple Clang 6.0 does not define them. -// Later version of Clang defines them and results in warnings. -#if defined(__clang__) -# ifndef _blsr_u32 -# define _blsr_u32 __blsr_u32 -# endif -# ifndef _blsr_u64 -# define _blsr_u64 __blsr_u64 -# endif -# ifndef _tzcnt_u32 -# define _tzcnt_u32 __tzcnt_u32 -# endif -# ifndef _tzcnt_u64 -# define _tzcnt_u64 __tzcnt_u64 -# endif -#endif - -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -#if CRYPTOPP_DOXYGEN_PROCESSING -/// \brief The maximum value of a machine word -/// \details SIZE_MAX provides the maximum value of a machine word. The value -/// is 0xffffffff on 32-bit targets, and 0xffffffffffffffff on 64-bit -/// targets. -/// \details If SIZE_MAX is not defined, then __SIZE_MAX__ is used if -/// defined. If not defined, then SIZE_T_MAX is used if defined. If not defined, -/// then the library uses std::numeric_limits::max(). -/// \details The library prefers __SIZE_MAX__ or __SIZE_T_MAX__ because -/// they are effectively constexpr that is optimized well by all compilers. -/// std::numeric_limits::max() is not always a constexpr, and -/// it is not always optimized well. -# define SIZE_MAX ... -#else -// Its amazing portability problems still plague this simple concept in 2015. -// http://stackoverflow.com/questions/30472731/which-c-standard-header-defines-size-max -// Avoid NOMINMAX macro on Windows. http://support.microsoft.com/en-us/kb/143208 -#ifndef SIZE_MAX -# if defined(__SIZE_MAX__) -# define SIZE_MAX __SIZE_MAX__ -# elif defined(SIZE_T_MAX) -# define SIZE_MAX SIZE_T_MAX -# elif defined(__SIZE_TYPE__) -# define SIZE_MAX (~(__SIZE_TYPE__)0) -# else -# define SIZE_MAX ((std::numeric_limits::max)()) -# endif -#endif - -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -NAMESPACE_BEGIN(CryptoPP) - -// Forward declaration for IntToString specialization -class Integer; - -// ************** compile-time assertion *************** - -#if CRYPTOPP_DOXYGEN_PROCESSING -/// \brief Compile time assertion -/// \param expr the expression to evaluate -/// \details Asserts the expression expr during compile. If C++14 and -/// N3928 are available, then C++14 static_assert is used. Otherwise, -/// a CompileAssert structure is used. When the structure is used -/// a negative-sized array triggers the assert at compile time. -# define CRYPTOPP_COMPILE_ASSERT(expr) { ... } -#elif defined(CRYPTOPP_CXX17_STATIC_ASSERT) -# define CRYPTOPP_COMPILE_ASSERT(expr) static_assert(expr) -#else // CRYPTOPP_DOXYGEN_PROCESSING -template -struct CompileAssert -{ - static char dummy[2*b-1]; -}; - -#define CRYPTOPP_COMPILE_ASSERT(assertion) CRYPTOPP_COMPILE_ASSERT_INSTANCE(assertion, __LINE__) -#define CRYPTOPP_ASSERT_JOIN(X, Y) CRYPTOPP_DO_ASSERT_JOIN(X, Y) -#define CRYPTOPP_DO_ASSERT_JOIN(X, Y) X##Y - -#if defined(CRYPTOPP_EXPORTS) || defined(CRYPTOPP_IMPORTS) -# define CRYPTOPP_COMPILE_ASSERT_INSTANCE(assertion, instance) -#else -# if defined(__GNUC__) || defined(__clang__) -# define CRYPTOPP_COMPILE_ASSERT_INSTANCE(assertion, instance) \ - static CompileAssert<(assertion)> \ - CRYPTOPP_ASSERT_JOIN(cryptopp_CRYPTOPP_ASSERT_, instance) __attribute__ ((unused)) -# else -# define CRYPTOPP_COMPILE_ASSERT_INSTANCE(assertion, instance) \ - static CompileAssert<(assertion)> \ - CRYPTOPP_ASSERT_JOIN(cryptopp_CRYPTOPP_ASSERT_, instance) -# endif // GCC or Clang -#endif - -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -// ************** count elements in an array *************** - -#if CRYPTOPP_DOXYGEN_PROCESSING -/// \brief Counts elements in an array -/// \param arr an array of elements -/// \details COUNTOF counts elements in an array. On Windows COUNTOF(x) is defined -/// to _countof(x) to ensure correct results for pointers. -/// \note COUNTOF does not produce correct results with pointers, and an array must be used. -/// sizeof(x)/sizeof(x[0]) suffers the same problem. The risk is eliminated by using -/// _countof(x) on Windows. Windows will provide the immunity for other platforms. -# define COUNTOF(arr) -#else -// VS2005 added _countof -#ifndef COUNTOF -# if defined(CRYPTOPP_MSC_VERSION) && (CRYPTOPP_MSC_VERSION >= 1400) -# define COUNTOF(x) _countof(x) -# else -# define COUNTOF(x) (sizeof(x)/sizeof(x[0])) -# endif -#endif // COUNTOF -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -// ************** misc classes *************** - -/// \brief An Empty class -/// \details The Empty class can be used as a template parameter BASE when no base class exists. -class CRYPTOPP_DLL Empty -{ -}; - -#if !defined(CRYPTOPP_DOXYGEN_PROCESSING) -template -class CRYPTOPP_NO_VTABLE TwoBases : public BASE1, public BASE2 -{ -}; - -template -class CRYPTOPP_NO_VTABLE ThreeBases : public BASE1, public BASE2, public BASE3 -{ -}; -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -/// \tparam T class or type -/// \brief Uses encapsulation to hide an object in derived classes -/// \details The object T is declared as protected. -template -class ObjectHolder -{ -protected: - T m_object; -}; - -/// \brief Ensures an object is not copyable -/// \details NotCopyable ensures an object is not copyable by making the -/// copy constructor and assignment operator private. Deleters are used -/// under C++11. -/// \sa Clonable class -class NotCopyable -{ -public: - NotCopyable() {} -#if CRYPTOPP_CXX11_DELETED_FUNCTIONS - NotCopyable(const NotCopyable &) = delete; - void operator=(const NotCopyable &) = delete; -#else -private: - NotCopyable(const NotCopyable &); - void operator=(const NotCopyable &); -#endif -}; - -/// \brief An object factory function -/// \tparam T class or type -/// \details NewObject overloads operator()(). -template -struct NewObject -{ - T* operator()() const {return new T;} -}; - -#if CRYPTOPP_DOXYGEN_PROCESSING -/// \brief A memory barrier -/// \details MEMORY_BARRIER attempts to ensure reads and writes are completed -/// in the absence of a language synchronization point. It is used by the -/// Singleton class if the compiler supports it. The barrier is provided at the -/// customary places in a double-checked initialization. -/// \details Internally, MEMORY_BARRIER uses std::atomic_thread_fence if -/// C++11 atomics are available. Otherwise, intrinsic(_ReadWriteBarrier), -/// _ReadWriteBarrier() or __asm__("" ::: "memory") is used. -#define MEMORY_BARRIER ... -#else -#if defined(CRYPTOPP_CXX11_ATOMIC) -# define MEMORY_BARRIER() std::atomic_thread_fence(std::memory_order_acq_rel) -#elif (CRYPTOPP_MSC_VERSION >= 1400) -# pragma intrinsic(_ReadWriteBarrier) -# define MEMORY_BARRIER() _ReadWriteBarrier() -#elif defined(__INTEL_COMPILER) -# define MEMORY_BARRIER() __memory_barrier() -#elif defined(__GNUC__) || defined(__clang__) -# define MEMORY_BARRIER() __asm__ __volatile__ ("" ::: "memory") -#else -# define MEMORY_BARRIER() -#endif -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -/// \brief Restricts the instantiation of a class to one static object without locks -/// \tparam T the class or type -/// \tparam F the object factory for T -/// \tparam instance an instance counter for the class object -/// \details This class safely initializes a static object in a multi-threaded environment. For C++03 -/// and below it will do so without using locks for portability. If two threads call Ref() at the same -/// time, they may get back different references, and one object may end up being memory leaked. This -/// is by design and it avoids a subtle initialization problem in a multi-threaded environment with thread -/// local storage on early Windows platforms, like Windows XP and Windows 2003. -/// \details For C++11 and above, a standard double-checked locking pattern with thread fences -/// are used. The locks and fences are standard and do not hinder portability. -/// \details Microsoft's C++11 implementation provides the necessary primitive support on Windows Vista and -/// above when using Visual Studio 2015 (cl.exe version 19.00). If C++11 is desired, you should -/// set WINVER or _WIN32_WINNT to 0x600 (or above), and compile with Visual Studio 2015. -/// \sa Double-Checked Locking -/// is Fixed In C++11, Dynamic -/// Initialization and Destruction with Concurrency and -/// Thread Local Storage (TLS) on MSDN. -/// \since Crypto++ 5.2 -template , int instance=0> -class Singleton -{ -public: - Singleton(F objectFactory = F()) : m_objectFactory(objectFactory) {} - - // prevent this function from being inlined - CRYPTOPP_NOINLINE const T & Ref(CRYPTOPP_NOINLINE_DOTDOTDOT) const; - -private: - F m_objectFactory; -}; - -/// \brief Return a reference to the inner Singleton object -/// \tparam T the class or type -/// \tparam F the object factory for T -/// \tparam instance an instance counter for the class object -/// \details Ref() is used to create the object using the object factory. The -/// object is only created once with the limitations discussed in the class documentation. -/// \sa Double-Checked Locking is Fixed In C++11 -/// \since Crypto++ 5.2 -template - const T & Singleton::Ref(CRYPTOPP_NOINLINE_DOTDOTDOT) const -{ -#if defined(CRYPTOPP_CXX11_ATOMIC) && defined(CRYPTOPP_CXX11_SYNCHRONIZATION) && defined(CRYPTOPP_CXX11_STATIC_INIT) - static std::mutex s_mutex; - static std::atomic s_pObject; - - T *p = s_pObject.load(std::memory_order_relaxed); - std::atomic_thread_fence(std::memory_order_acquire); - - if (p) - return *p; - - std::lock_guard lock(s_mutex); - p = s_pObject.load(std::memory_order_relaxed); - std::atomic_thread_fence(std::memory_order_acquire); - - if (p) - return *p; - - T *newObject = m_objectFactory(); - std::atomic_thread_fence(std::memory_order_release); - s_pObject.store(newObject, std::memory_order_relaxed); - - return *newObject; -#else - static volatile simple_ptr s_pObject; - T *p = s_pObject.m_p; - MEMORY_BARRIER(); - - if (p) - return *p; - - T *newObject = m_objectFactory(); - p = s_pObject.m_p; - MEMORY_BARRIER(); - - if (p) - { - delete newObject; - return *p; - } - - s_pObject.m_p = newObject; - MEMORY_BARRIER(); - - return *newObject; -#endif -} - -// ************** misc functions *************** - -/// \brief Create a pointer with an offset -/// \tparam PTR a pointer type -/// \tparam OFF a size type -/// \param pointer a pointer -/// \param offset a offset into the pointer -/// \details PtrAdd can be used to squash Clang and GCC -/// UBsan findings for pointer addition and subtraction. -template -inline PTR PtrAdd(PTR pointer, OFF offset) -{ - return pointer+static_cast(offset); -} - -/// \brief Create a pointer with an offset -/// \tparam PTR a pointer type -/// \tparam OFF a size type -/// \param pointer a pointer -/// \param offset a offset into the pointer -/// \details PtrSub can be used to squash Clang and GCC -/// UBsan findings for pointer addition and subtraction. -template -inline PTR PtrSub(PTR pointer, OFF offset) -{ - return pointer-static_cast(offset); -} - -/// \brief Determine pointer difference -/// \tparam PTR a pointer type -/// \param pointer1 the first pointer -/// \param pointer2 the second pointer -/// \details PtrDiff can be used to squash Clang and GCC -/// UBsan findings for pointer addition and subtraction. -/// pointer1 and pointer2 must point to the same object or -/// array (or one past the end), and yields the number of -/// elements (not bytes) difference. -template -inline ptrdiff_t PtrDiff(const PTR pointer1, const PTR pointer2) -{ - return pointer1 - pointer2; -} - -/// \brief Determine pointer difference -/// \tparam PTR a pointer type -/// \param pointer1 the first pointer -/// \param pointer2 the second pointer -/// \details PtrByteDiff can be used to squash Clang and GCC -/// UBsan findings for pointer addition and subtraction. -/// pointer1 and pointer2 must point to the same object or -/// array (or one past the end), and yields the number of -/// bytes (not elements) difference. -template -inline size_t PtrByteDiff(const PTR pointer1, const PTR pointer2) -{ - return (size_t)(reinterpret_cast(pointer1) - reinterpret_cast(pointer2)); -} - -/// \brief Pointer to the first element of a string -/// \param str string -/// \details BytePtr returns NULL pointer for an empty string. -/// \return Pointer to the first element of a string -/// \since Crypto++ 8.0 -inline byte* BytePtr(std::string& str) -{ - // Caller wants a writable pointer - CRYPTOPP_ASSERT(str.empty() == false); - - if (str.empty()) - return NULLPTR; - return reinterpret_cast(&str[0]); -} - -/// \brief Pointer to the first element of a string -/// \param str SecByteBlock -/// \details BytePtr returns NULL pointer for an empty string. -/// \return Pointer to the first element of a string -/// \since Crypto++ 8.3 -byte* BytePtr(SecByteBlock& str); - -/// \brief Const pointer to the first element of a string -/// \param str string -/// \details ConstBytePtr returns non-NULL pointer for an empty string. -/// \return Pointer to the first element of a string -/// \since Crypto++ 8.0 -inline const byte* ConstBytePtr(const std::string& str) -{ - if (str.empty()) - return NULLPTR; - return reinterpret_cast(&str[0]); -} - -/// \brief Const pointer to the first element of a string -/// \param str SecByteBlock -/// \details ConstBytePtr returns non-NULL pointer for an empty string. -/// \return Pointer to the first element of a string -/// \since Crypto++ 8.3 -const byte* ConstBytePtr(const SecByteBlock& str); - -/// \brief Size of a string -/// \param str string -/// \return size of a string -/// \since Crypto++ 8.3 -inline size_t BytePtrSize(const std::string& str) -{ - return str.size(); -} - -/// \brief Size of a string -/// \param str SecByteBlock -/// \return size of a string -/// \since Crypto++ 8.3 -size_t BytePtrSize(const SecByteBlock& str); - -/// \brief Integer value -/// \details EnumToInt avoids C++20 enum-enum conversion -/// warnings under GCC and Clang. C++11 and above use a -/// constexpr function. C++03 and below use a macro due -/// to [lack of] constexpr-ness in early versions of C++. -/// \since Crypto++ 8.6 -#if (CRYPTOPP_CXX11_CONSTEXPR) -template -constexpr int EnumToInt(T v) { - return static_cast(v); -} -#else -# define EnumToInt(v) static_cast(v) -#endif - -#if (!__STDC_WANT_SECURE_LIB__ && !defined(_MEMORY_S_DEFINED)) || defined(CRYPTOPP_WANT_SECURE_LIB) - -/// \brief Bounds checking replacement for memcpy() -/// \param dest pointer to the destination memory block -/// \param sizeInBytes size of the destination memory block, in bytes -/// \param src pointer to the source memory block -/// \param count the number of bytes to copy -/// \throw InvalidArgument -/// \details ISO/IEC TR-24772 provides bounds checking interfaces for potentially -/// unsafe functions like memcpy(), strcpy() and memmove(). However, -/// not all standard libraries provides them, like Glibc. The library's -/// memcpy_s() is a near-drop in replacement. Its only a near-replacement -/// because the library's version throws an InvalidArgument on a bounds violation. -/// \details memcpy_s() and memmove_s() are guarded by __STDC_WANT_SECURE_LIB__. -/// If __STDC_WANT_SECURE_LIB__ is not defined or defined to 0, then the library -/// makes memcpy_s() and memmove_s() available. The library will also optionally -/// make the symbols available if CRYPTOPP_WANT_SECURE_LIB is defined. -/// CRYPTOPP_WANT_SECURE_LIB is in config.h, but it is disabled by default. -/// \details memcpy_s() will assert the pointers src and dest are not NULL -/// in debug builds. Passing NULL for either pointer is undefined behavior. -inline void memcpy_s(void *dest, size_t sizeInBytes, const void *src, size_t count) -{ - // Safer functions on Windows for C&A, http://github.com/weidai11/cryptopp/issues/55 - - // Pointers must be valid; otherwise undefined behavior - CRYPTOPP_ASSERT(dest != NULLPTR); CRYPTOPP_ASSERT(src != NULLPTR); - // Restricted pointers. We want to check ranges, but it is not clear how to do it. - CRYPTOPP_ASSERT(src != dest); - // Destination buffer must be large enough to satisfy request - CRYPTOPP_ASSERT(sizeInBytes >= count); - - if (count > sizeInBytes) - throw InvalidArgument("memcpy_s: buffer overflow"); - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4996) -# if (CRYPTOPP_MSC_VERSION >= 1400) -# pragma warning(disable: 6386) -# endif -#endif - if (src != NULLPTR && dest != NULLPTR) - std::memcpy(dest, src, count); -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif -} - -/// \brief Bounds checking replacement for memmove() -/// \param dest pointer to the destination memory block -/// \param sizeInBytes size of the destination memory block, in bytes -/// \param src pointer to the source memory block -/// \param count the number of bytes to copy -/// \throw InvalidArgument -/// \details ISO/IEC TR-24772 provides bounds checking interfaces for potentially -/// unsafe functions like memcpy(), strcpy() and memmove(). However, -/// not all standard libraries provides them, like Glibc. The library's -/// memmove_s() is a near-drop in replacement. Its only a near-replacement -/// because the library's version throws an InvalidArgument on a bounds violation. -/// \details memcpy_s() and memmove_s() are guarded by __STDC_WANT_SECURE_LIB__. -/// If __STDC_WANT_SECURE_LIB__ is not defined or defined to 0, then the library -/// makes memcpy_s() and memmove_s() available. The library will also optionally -/// make the symbols available if CRYPTOPP_WANT_SECURE_LIB is defined. -/// CRYPTOPP_WANT_SECURE_LIB is in config.h, but it is disabled by default. -/// \details memmove_s() will assert the pointers src and dest are not NULL -/// in debug builds. Passing NULL for either pointer is undefined behavior. -inline void memmove_s(void *dest, size_t sizeInBytes, const void *src, size_t count) -{ - // Safer functions on Windows for C&A, http://github.com/weidai11/cryptopp/issues/55 - - // Pointers must be valid; otherwise undefined behavior - CRYPTOPP_ASSERT(dest != NULLPTR); CRYPTOPP_ASSERT(src != NULLPTR); - // Destination buffer must be large enough to satisfy request - CRYPTOPP_ASSERT(sizeInBytes >= count); - - if (count > sizeInBytes) - throw InvalidArgument("memmove_s: buffer overflow"); - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4996) -# if (CRYPTOPP_MSC_VERSION >= 1400) -# pragma warning(disable: 6386) -# endif -#endif - if (src != NULLPTR && dest != NULLPTR) - std::memmove(dest, src, count); -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif -} - -#if __BORLANDC__ >= 0x620 -// C++Builder 2010 workaround: can't use memcpy_s -// because it doesn't allow 0 lengths -# define memcpy_s CryptoPP::memcpy_s -# define memmove_s CryptoPP::memmove_s -#endif - -#endif // __STDC_WANT_SECURE_LIB__ - -/// \brief Swaps two variables which are arrays -/// \tparam T class or type -/// \param a the first value -/// \param b the second value -/// \details C++03 does not provide support for std::swap(__m128i a, __m128i b) -/// because __m128i is an unsigned long long[2]. Most compilers -/// support it out of the box, but Sun Studio C++ compilers 12.2 and 12.3 do not. -/// \sa How to swap two __m128i variables -/// in C++03 given its an opaque type and an array? on Stack Overflow. -template -inline void vec_swap(T& a, T& b) -{ - // __m128i is an unsigned long long[2], and support for swapping it was - // not added until C++11. SunCC 12.1 - 12.3 fail to consume the swap; while - // SunCC 12.4 consumes it without -std=c++11. -#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5120) - T t; - t=a, a=b, b=t; -#else - std::swap(a, b); -#endif -} - -/// \brief Memory block initializer -/// \param ptr pointer to the memory block being written -/// \param val the integer value to write for each byte -/// \param num the size of the source memory block, in bytes -/// \details Internally the function calls memset with the value val. -/// memset_z can be used to initialize a freshly allocated memory block. -/// To zeroize a memory block on destruction use SecureWipeBuffer. -/// \return the pointer to the memory block -/// \sa SecureWipeBuffer -inline void * memset_z(void *ptr, int val, size_t num) -{ -// avoid extraneous warning on GCC 4.3.2 Ubuntu 8.10 -#if CRYPTOPP_GCC_VERSION >= 30001 || CRYPTOPP_LLVM_CLANG_VERSION >= 20800 || \ - CRYPTOPP_APPLE_CLANG_VERSION >= 30000 - if (__builtin_constant_p(num) && num==0) - return ptr; -#endif - return std::memset(ptr, val, num); -} - -/// \brief Replacement function for std::min -/// \tparam T class or type -/// \param a the first value -/// \param b the second value -/// \return the minimum value based on a comparison of b \< a using operator\< -/// \details STDMIN was provided because the library could not easily use std::min or std::max in Windows or Cygwin 1.1.0 -template inline const T& STDMIN(const T& a, const T& b) -{ - return b < a ? b : a; -} - -/// \brief Replacement function for std::max -/// \tparam T class or type -/// \param a the first value -/// \param b the second value -/// \return the minimum value based on a comparison of a \< b using operator\< -/// \details STDMAX was provided because the library could not easily use std::min or std::max in Windows or Cygwin 1.1.0 -template inline const T& STDMAX(const T& a, const T& b) -{ - return a < b ? b : a; -} - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4389) -#endif - -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wstrict-overflow" -# if (CRYPTOPP_LLVM_CLANG_VERSION >= 20800) || (CRYPTOPP_APPLE_CLANG_VERSION >= 30000) -# pragma GCC diagnostic ignored "-Wtautological-compare" -# elif (CRYPTOPP_GCC_VERSION >= 40300) -# pragma GCC diagnostic ignored "-Wtype-limits" -# endif -#endif - -/// \brief Safe comparison of values that could be negative and incorrectly promoted -/// \tparam T1 class or type -/// \tparam T2 class or type -/// \param a the first value -/// \param b the second value -/// \return the minimum value based on a comparison a and b using operator<. -/// \details The comparison b \< a is performed and the value returned is type T1. -template inline const T1 UnsignedMin(const T1& a, const T2& b) -{ - CRYPTOPP_COMPILE_ASSERT((sizeof(T1)<=sizeof(T2) && T2(-1)>0) || (sizeof(T1)>sizeof(T2) && T1(-1)>0)); - CRYPTOPP_COMPILE_ASSERT(std::numeric_limits::is_signed == false); - CRYPTOPP_COMPILE_ASSERT(std::numeric_limits::is_signed == false); - - if (sizeof(T1)<=sizeof(T2)) - return b < (T2)a ? (T1)b : a; - else - return (T1)b < a ? (T1)b : a; -} - -/// \brief Perform a conversion from \p from to \p to -/// \tparam T1 class or type -/// \tparam T2 class or type -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function returns false, -/// then \p to is undefined and should not be used. -/// \note for integral conversions, a template specialization should be provided. The specialization -/// will perform more efficiently, and avoid warnings for truncation and sign compares. -template -inline bool SafeConvert(T1 from, T2 &to) -{ - to = static_cast(from); - if (from != to || (from > 0) != (to > 0)) - return false; - return true; -} - -// The following specializations are the product of {word32, sword32, word64, sword64} -> -// {word32, sword32, word64, sword64}. There are 16 of them, but we can omit specializations -// of {word64} -> {word64}, {word32} -> {word32}, etc. -// -// The list below proceeds to list the conversion to word64 (3 each), followed by -// sword64 (3 each), followed by word32 (3 each), and finally follwed by sword32 (3 each). - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(sword64 from, word64 &to) -{ - if (from < 0) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(word32 from, word64 &to) -{ - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(sword32 from, word64 &to) -{ - if (from < 0) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(word64 from, sword64 &to) -{ - if (from > static_cast((std::numeric_limits::max)())) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(word32 from, sword64 &to) -{ - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(sword32 from, sword64 &to) -{ - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(word64 from, word32 &to) -{ - if (from > static_cast((std::numeric_limits::max)())) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(sword64 from, word32 &to) -{ - if (from < 0) - return false; - else if (from > static_cast((std::numeric_limits::max)())) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(sword32 from, word32 &to) -{ - if (from < 0) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(word64 from, sword32 &to) -{ - if (from > static_cast((std::numeric_limits::max)())) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(sword64 from, sword32 &to) -{ - if (from > static_cast((std::numeric_limits::max)())) - return false; - else if (from < static_cast((std::numeric_limits::min)())) - return false; - to = static_cast(from); - return true; -} - -/// \brief Perform a conversion from \p from to \p to -/// \param from the first value -/// \param to the second value -/// \return true if its safe to convert from \p from to \p to, false otherwise. -/// \details if the function returns true, then it is safe to use \p to. If the function -/// returns false, then \p to is undefined and should not be used. -/// \since Crypto++ 8.8 -template<> -inline bool SafeConvert(word32 from, sword32 &to) -{ - if (from > static_cast((std::numeric_limits::max)())) - return false; - to = static_cast(from); - return true; -} - -/// \brief Converts a value to a string -/// \tparam T class or type -/// \param value the value to convert -/// \param base the base to use during the conversion -/// \return the string representation of value in base. -template -std::string IntToString(T value, unsigned int base = 10) -{ - // Hack... set the high bit for uppercase. - const unsigned int HIGH_BIT = (1U << 31); - const char CH = !!(base & HIGH_BIT) ? 'A' : 'a'; - base &= ~HIGH_BIT; - - CRYPTOPP_ASSERT(base >= 2); - if (value == 0) - return "0"; - - bool negate = false; - if (value < 0) - { - negate = true; - value = 0-value; // VC .NET does not like -a - } - std::string result; - while (value > 0) - { - T digit = value % base; - result = char((digit < 10 ? '0' : (CH - 10)) + digit) + result; - value /= base; - } - if (negate) - result = "-" + result; - return result; -} - -/// \brief Converts an unsigned value to a string -/// \param value the value to convert -/// \param base the base to use during the conversion -/// \return the string representation of value in base. -/// \details this template function specialization was added to suppress -/// Coverity findings on IntToString() with unsigned types. -template <> CRYPTOPP_DLL -std::string IntToString(word64 value, unsigned int base); - -/// \brief Converts an Integer to a string -/// \param value the Integer to convert -/// \param base the base to use during the conversion -/// \return the string representation of value in base. -/// \details This is a template specialization of IntToString(). Use it -/// like IntToString(): -///
-///  // Print integer in base 10
-///  Integer n...
-///  std::string s = IntToString(n, 10);
-/// 
-/// \details The string is presented with lowercase letters by default. A -/// hack is available to switch to uppercase letters without modifying -/// the function signature. -///
-///  // Print integer in base 16, uppercase letters
-///  Integer n...
-///  const unsigned int UPPER = (1 << 31);
-///  std::string s = IntToString(n, (UPPER | 16));
-template <> CRYPTOPP_DLL -std::string IntToString(Integer value, unsigned int base); - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic pop -#endif - -#define RETURN_IF_NONZERO(x) size_t returnedValue = x; if (returnedValue) return returnedValue - -// this version of the macro is fastest on Pentium 3 and Pentium 4 with MSVC 6 SP5 w/ Processor Pack -#define GETBYTE(x, y) (unsigned int)byte((x)>>(8*(y))) -// these may be faster on other CPUs/compilers -// #define GETBYTE(x, y) (unsigned int)(((x)>>(8*(y)))&255) -// #define GETBYTE(x, y) (((byte *)&(x))[y]) - -#define CRYPTOPP_GET_BYTE_AS_BYTE(x, y) byte((x)>>(8*(y))) - -/// \brief Returns the parity of a value -/// \tparam T class or type -/// \param value the value to provide the parity -/// \return 1 if the number 1-bits in the value is odd, 0 otherwise -template -unsigned int Parity(T value) -{ - for (unsigned int i=8*sizeof(value)/2; i>0; i/=2) - value ^= value >> i; - return (unsigned int)value&1; -} - -/// \brief Returns the number of 8-bit bytes or octets required for a value -/// \tparam T class or type -/// \param value the value to test -/// \return the minimum number of 8-bit bytes or octets required to represent a value -template -unsigned int BytePrecision(const T &value) -{ - if (!value) - return 0; - - unsigned int l=0, h=8*sizeof(value); - while (h-l > 8) - { - unsigned int t = (l+h)/2; - if (value >> t) - l = t; - else - h = t; - } - - return h/8; -} - -/// \brief Returns the number of bits required for a value -/// \tparam T class or type -/// \param value the value to test -/// \return the maximum number of bits required to represent a value. -template -unsigned int BitPrecision(const T &value) -{ - if (!value) - return 0; - - unsigned int l=0, h=8*sizeof(value); - - while (h-l > 1) - { - unsigned int t = (l+h)/2; - if (value >> t) - l = t; - else - h = t; - } - - return h; -} - -/// Determines the number of trailing 0-bits in a value -/// \param v the 32-bit value to test -/// \return the number of trailing 0-bits in v, starting at the least significant bit position -/// \details TrailingZeros returns the number of trailing 0-bits in v, starting at the least -/// significant bit position. The return value is undefined if there are no 1-bits set in the value v. -/// \note The function does not return 0 if no 1-bits are set because 0 collides with a 1-bit at the 0-th position. -inline unsigned int TrailingZeros(word32 v) -{ - // GCC 4.7 and VS2012 provides tzcnt on AVX2/BMI enabled processors - // We don't enable for Microsoft because it requires a runtime check. - // http://msdn.microsoft.com/en-us/library/hh977023%28v=vs.110%29.aspx - CRYPTOPP_ASSERT(v != 0); -#if defined(__BMI__) - return (unsigned int)_tzcnt_u32(v); -#elif defined(__GNUC__) && (CRYPTOPP_GCC_VERSION >= 30400) - return (unsigned int)__builtin_ctz(v); -#elif defined(CRYPTOPP_MSC_VERSION) && (CRYPTOPP_MSC_VERSION >= 1400) - unsigned long result; - _BitScanForward(&result, v); - return static_cast(result); -#else - // from http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightMultLookup - static const int MultiplyDeBruijnBitPosition[32] = - { - 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, - 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 - }; - return MultiplyDeBruijnBitPosition[((word32)((v & -v) * 0x077CB531U)) >> 27]; -#endif -} - -/// Determines the number of trailing 0-bits in a value -/// \param v the 64-bit value to test -/// \return the number of trailing 0-bits in v, starting at the least significant bit position -/// \details TrailingZeros returns the number of trailing 0-bits in v, starting at the least -/// significant bit position. The return value is undefined if there are no 1-bits set in the value v. -/// \note The function does not return 0 if no 1-bits are set because 0 collides with a 1-bit at the 0-th position. -inline unsigned int TrailingZeros(word64 v) -{ - // GCC 4.7 and VS2012 provides tzcnt on AVX2/BMI enabled processors - // We don't enable for Microsoft because it requires a runtime check. - // http://msdn.microsoft.com/en-us/library/hh977023%28v=vs.110%29.aspx - CRYPTOPP_ASSERT(v != 0); -#if defined(__BMI__) && defined(__x86_64__) - return (unsigned int)_tzcnt_u64(v); -#elif defined(__GNUC__) && (CRYPTOPP_GCC_VERSION >= 30400) - return (unsigned int)__builtin_ctzll(v); -#elif defined(CRYPTOPP_MSC_VERSION) && (CRYPTOPP_MSC_VERSION >= 1400) && (defined(_M_X64) || defined(_M_IA64)) - unsigned long result; - _BitScanForward64(&result, v); - return static_cast(result); -#else - return word32(v) ? TrailingZeros(word32(v)) : 32 + TrailingZeros(word32(v>>32)); -#endif -} - -/// \brief Truncates the value to the specified number of bits. -/// \tparam T class or type -/// \param value the value to truncate or mask -/// \param bits the number of bits to truncate or mask -/// \return the value truncated to the specified number of bits, starting at the least -/// significant bit position -/// \details This function masks the low-order bits of value and returns the result. The -/// mask is created with (1 << bits) - 1. -template -inline T Crop(T value, size_t bits) -{ - if (bits < 8*sizeof(value)) - return T(value & ((T(1) << bits) - 1)); - else - return value; -} - -/// \brief Returns the number of 8-bit bytes or octets required for the specified number of bits -/// \param bitCount the number of bits -/// \return the minimum number of 8-bit bytes or octets required by bitCount -/// \details BitsToBytes is effectively a ceiling function based on 8-bit bytes. -inline size_t BitsToBytes(size_t bitCount) -{ - return ((bitCount+7)/(8)); -} - -/// \brief Returns the number of words required for the specified number of bytes -/// \param byteCount the number of bytes -/// \return the minimum number of words required by byteCount -/// \details BytesToWords is effectively a ceiling function based on WORD_SIZE. -/// WORD_SIZE is defined in config.h -inline size_t BytesToWords(size_t byteCount) -{ - return ((byteCount+WORD_SIZE-1)/WORD_SIZE); -} - -/// \brief Returns the number of words required for the specified number of bits -/// \param bitCount the number of bits -/// \return the minimum number of words required by bitCount -/// \details BitsToWords is effectively a ceiling function based on WORD_BITS. -/// WORD_BITS is defined in config.h -inline size_t BitsToWords(size_t bitCount) -{ - return ((bitCount+WORD_BITS-1)/(WORD_BITS)); -} - -/// \brief Returns the number of double words required for the specified number of bits -/// \param bitCount the number of bits -/// \return the minimum number of double words required by bitCount -/// \details BitsToDwords is effectively a ceiling function based on 2*WORD_BITS. -/// WORD_BITS is defined in config.h -inline size_t BitsToDwords(size_t bitCount) -{ - return ((bitCount+2*WORD_BITS-1)/(2*WORD_BITS)); -} - -/// Performs an XOR of a buffer with a mask -/// \param buf the buffer to XOR with the mask -/// \param mask the mask to XOR with the buffer -/// \param count the size of the buffers, in bytes -/// \details The function effectively visits each element in the buffers and performs -/// buf[i] ^= mask[i]. buf and mask must be of equal size. -CRYPTOPP_DLL void CRYPTOPP_API xorbuf(byte *buf, const byte *mask, size_t count); - -/// Performs an XOR of an input buffer with a mask and stores the result in an output buffer -/// \param output the destination buffer -/// \param input the source buffer to XOR with the mask -/// \param mask the mask buffer to XOR with the input buffer -/// \param count the size of the buffers, in bytes -/// \details The function effectively visits each element in the buffers and performs -/// output[i] = input[i] ^ mask[i]. output, input and mask must be of equal size. -CRYPTOPP_DLL void CRYPTOPP_API xorbuf(byte *output, const byte *input, const byte *mask, size_t count); - -/// \brief Performs a near constant-time comparison of two equally sized buffers -/// \param buf1 the first buffer -/// \param buf2 the second buffer -/// \param count the size of the buffers, in bytes -/// \details VerifyBufsEqual performs an XOR of the elements in two equally sized -/// buffers and returns a result based on the XOR operation. A count of 0 returns -/// true because two empty buffers are considered equal. -/// \details The function is near constant-time because CPU micro-code timings could -/// affect the "constant-ness". Calling code is responsible for mitigating timing -/// attacks if the buffers are not equally sized. -/// \sa ModPowerOf2 -CRYPTOPP_DLL bool CRYPTOPP_API VerifyBufsEqual(const byte *buf1, const byte *buf2, size_t count); - -/// \brief Tests whether a value is a power of 2 -/// \param value the value to test -/// \return true if value is a power of 2, false otherwise -/// \details The function creates a mask of value - 1 and returns the result -/// of an AND operation compared to 0. If value is 0 or less than 0, then the function -/// returns false. -template -inline bool IsPowerOf2(const T &value) -{ - return value > 0 && (value & (value-1)) == 0; -} - -#if defined(__BMI__) -template <> -inline bool IsPowerOf2(const word32 &value) -{ - return value > 0 && _blsr_u32(value) == 0; -} - -# if defined(__x86_64__) -template <> -inline bool IsPowerOf2(const word64 &value) -{ - return value > 0 && _blsr_u64(value) == 0; -} -# endif // __x86_64__ -#endif // __BMI__ - -/// \brief Provide the minimum value for a type -/// \tparam T type of class -/// \return the minimum value of the type or class -/// \details NumericLimitsMin() was introduced for Clang at Issue 364, -/// Apple Clang 6.0 and numeric_limits::max() returns 0. -/// \details NumericLimitsMin() requires a specialization for T, -/// meaning std::numeric_limits::is_specialized must return -/// true. In the case of word128 Clang did not specialize -/// numeric_limits for the type. -/// \since Crypto++ 8.1 -template -inline T NumericLimitsMin() -{ - CRYPTOPP_ASSERT(std::numeric_limits::is_specialized); - return (std::numeric_limits::min)(); -} - -/// \brief Provide the maximum value for a type -/// \tparam T type of class -/// \return the maximum value of the type or class -/// \details NumericLimitsMax() was introduced for Clang at Issue 364, -/// Apple Clang 6.0 and numeric_limits::max() returns 0. -/// \details NumericLimitsMax() requires a specialization for T, -/// meaning std::numeric_limits::is_specialized must return -/// true. In the case of word128 Clang did not specialize -/// numeric_limits for the type. -/// \since Crypto++ 8.1 -template -inline T NumericLimitsMax() -{ - CRYPTOPP_ASSERT(std::numeric_limits::is_specialized); - return (std::numeric_limits::max)(); -} - -// NumericLimitsMin and NumericLimitsMax added for word128 types, -// see http://github.com/weidai11/cryptopp/issues/364 -#if defined(CRYPTOPP_WORD128_AVAILABLE) -template<> -inline word128 NumericLimitsMin() -{ - return 0; -} -template<> -inline word128 NumericLimitsMax() -{ -#if defined(CRYPTOPP_APPLE_CLANG_VERSION) - return (static_cast(LWORD_MAX) << 64U) | LWORD_MAX; -#else - return (std::numeric_limits::max)(); -#endif -} -#endif - -/// \brief Performs a saturating subtract clamped at 0 -/// \tparam T1 class or type -/// \tparam T2 class or type -/// \param a the minuend -/// \param b the subtrahend -/// \return the difference produced by the saturating subtract -/// \details Saturating arithmetic restricts results to a fixed range. Results that are -/// less than 0 are clamped at 0. -/// \details Use of saturating arithmetic in places can be advantageous because it can -/// avoid a branch by using an instruction like a conditional move (CMOVE). -template -inline T1 SaturatingSubtract(const T1 &a, const T2 &b) -{ - // Generated ASM of a typical clamp, http://gcc.gnu.org/ml/gcc-help/2014-10/msg00112.html - return T1((a > b) ? (a - b) : 0); -} - -/// \brief Performs a saturating subtract clamped at 1 -/// \tparam T1 class or type -/// \tparam T2 class or type -/// \param a the minuend -/// \param b the subtrahend -/// \return the difference produced by the saturating subtract -/// \details Saturating arithmetic restricts results to a fixed range. Results that are -/// less than 1 are clamped at 1. -/// \details Use of saturating arithmetic in places can be advantageous because it can -/// avoid a branch by using an instruction like a conditional move (CMOVE). -template -inline T1 SaturatingSubtract1(const T1 &a, const T2 &b) -{ - // Generated ASM of a typical clamp, http://gcc.gnu.org/ml/gcc-help/2014-10/msg00112.html - return T1((a > b) ? (a - b) : 1); -} - -/// \brief Reduces a value to a power of 2 -/// \tparam T1 class or type -/// \tparam T2 class or type -/// \param a the first value -/// \param b the second value -/// \return ModPowerOf2() returns a & (b-1). b must be a power of 2. -/// Use IsPowerOf2() to determine if b is a suitable candidate. -/// \sa IsPowerOf2 -template -inline T2 ModPowerOf2(const T1 &a, const T2 &b) -{ - CRYPTOPP_ASSERT(IsPowerOf2(b)); - // Coverity finding CID 170383 Overflowed return value (INTEGER_OVERFLOW) - // Visual Studio and /RTCc warning, https://docs.microsoft.com/en-us/cpp/build/reference/rtc-run-time-error-checks - return T2(a & SaturatingSubtract(b,1U)); -} - -/// \brief Rounds a value down to a multiple of a second value -/// \tparam T1 class or type -/// \tparam T2 class or type -/// \param n the value to reduce -/// \param m the value to reduce n to a multiple -/// \return the possibly unmodified value \n -/// \details RoundDownToMultipleOf is effectively a floor function based on m. The function returns -/// the value n - n\%m. If n is a multiple of m, then the original value is returned. -/// \note T1 and T2 should be unsigned arithmetic types. If T1 or -/// T2 is signed, then the value should be non-negative. The library asserts in -/// debug builds when practical, but allows you to perform the operation in release builds. -template -inline T1 RoundDownToMultipleOf(const T1 &n, const T2 &m) -{ - // http://github.com/weidai11/cryptopp/issues/364 -#if !defined(CRYPTOPP_APPLE_CLANG_VERSION) || (CRYPTOPP_APPLE_CLANG_VERSION >= 80000) - CRYPTOPP_ASSERT(std::numeric_limits::is_integer); - CRYPTOPP_ASSERT(std::numeric_limits::is_integer); -#endif - - CRYPTOPP_ASSERT(!std::numeric_limits::is_signed || n > 0); - CRYPTOPP_ASSERT(!std::numeric_limits::is_signed || m > 0); - - if (IsPowerOf2(m)) - return n - ModPowerOf2(n, m); - else - return n - n%m; -} - -/// \brief Rounds a value up to a multiple of a second value -/// \tparam T1 class or type -/// \tparam T2 class or type -/// \param n the value to reduce -/// \param m the value to reduce n to a multiple -/// \return the possibly unmodified value \n -/// \details RoundUpToMultipleOf is effectively a ceiling function based on m. The function -/// returns the value n + n\%m. If n is a multiple of m, then the original value is -/// returned. If the value n would overflow, then an InvalidArgument exception is thrown. -/// \note T1 and T2 should be unsigned arithmetic types. If T1 or -/// T2 is signed, then the value should be non-negative. The library asserts in -/// debug builds when practical, but allows you to perform the operation in release builds. -template -inline T1 RoundUpToMultipleOf(const T1 &n, const T2 &m) -{ - // http://github.com/weidai11/cryptopp/issues/364 -#if !defined(CRYPTOPP_APPLE_CLANG_VERSION) || (CRYPTOPP_APPLE_CLANG_VERSION >= 80000) - CRYPTOPP_ASSERT(std::numeric_limits::is_integer); - CRYPTOPP_ASSERT(std::numeric_limits::is_integer); -#endif - - CRYPTOPP_ASSERT(!std::numeric_limits::is_signed || n > 0); - CRYPTOPP_ASSERT(!std::numeric_limits::is_signed || m > 0); - - if (NumericLimitsMax() - m + 1 < n) - throw InvalidArgument("RoundUpToMultipleOf: integer overflow"); - return RoundDownToMultipleOf(T1(n+m-1), m); -} - -/// \brief Returns the minimum alignment requirements of a type -/// \tparam T class or type -/// \return the minimum alignment requirements of T, in bytes -/// \details Internally the function calls C++11's alignof if -/// available. If not available, then the function uses compiler -/// specific extensions such as __alignof and _alignof_. -/// If an extension is not available, then the function uses -/// sizeof(T). -template -inline unsigned int GetAlignmentOf() -{ -#if defined(CRYPTOPP_CXX11_ALIGNOF) - return alignof(T); -#elif (CRYPTOPP_MSC_VERSION >= 1300) - return __alignof(T); -#elif defined(__GNUC__) - return __alignof__(T); -#elif defined(__SUNPRO_CC) - return __alignof__(T); -#elif defined(__IBM_ALIGNOF__) - return __alignof__(T); -#elif CRYPTOPP_BOOL_SLOW_WORD64 - return UnsignedMin(4U, sizeof(T)); -#else - return sizeof(T); -#endif -} - -/// \brief Determines whether ptr is aligned to a minimum value -/// \param ptr the pointer being checked for alignment -/// \param alignment the alignment value to test the pointer against -/// \return true if ptr is aligned on at least alignment -/// boundary, false otherwise -/// \details Internally the function tests whether alignment is 1. If so, -/// the function returns true. If not, then the function effectively -/// performs a modular reduction and returns true if the residue is 0. -inline bool IsAlignedOn(const void *ptr, unsigned int alignment) -{ - const uintptr_t x = reinterpret_cast(ptr); - return alignment==1 || (IsPowerOf2(alignment) ? ModPowerOf2(x, alignment) == 0 : x % alignment == 0); -} - -/// \brief Determines whether ptr is minimally aligned -/// \tparam T class or type -/// \param ptr the pointer to check for alignment -/// \return true if ptr is aligned to at least T -/// boundary, false otherwise -/// \details Internally the function calls IsAlignedOn with a second -/// parameter of GetAlignmentOf. -template -inline bool IsAligned(const void *ptr) -{ - return IsAlignedOn(ptr, GetAlignmentOf()); -} - -#if (CRYPTOPP_LITTLE_ENDIAN) -typedef LittleEndian NativeByteOrder; -#elif (CRYPTOPP_BIG_ENDIAN) -typedef BigEndian NativeByteOrder; -#else -# error "Unable to determine endianness" -#endif - -/// \brief Returns NativeByteOrder as an enumerated ByteOrder value -/// \return LittleEndian if the native byte order is little-endian, -/// and BigEndian if the native byte order is big-endian -/// \details NativeByteOrder is a typedef depending on the platform. -/// If CRYPTOPP_LITTLE_ENDIAN is set in config.h, then -/// GetNativeByteOrder returns LittleEndian. If CRYPTOPP_BIG_ENDIAN -/// is set, then GetNativeByteOrder returns BigEndian. -/// \note There are other byte orders besides little- and big-endian, -/// and they include bi-endian and PDP-endian. If a system is neither -/// little-endian nor big-endian, then a compile time error occurs. -inline ByteOrder GetNativeByteOrder() -{ - return NativeByteOrder::ToEnum(); -} - -/// \brief Determines whether order follows native byte ordering -/// \param order the ordering being tested against native byte ordering -/// \return true if order follows native byte ordering, false otherwise -inline bool NativeByteOrderIs(ByteOrder order) -{ - return order == GetNativeByteOrder(); -} - -/// \brief Returns the direction the cipher is being operated -/// \tparam T class or type -/// \param obj the cipher object being queried -/// \return ENCRYPTION if the cipher obj is being operated in its forward direction, -/// DECRYPTION otherwise -/// \details A cipher can be operated in a "forward" direction (encryption) or a "reverse" -/// direction (decryption). The operations do not have to be symmetric, meaning a second -/// application of the transformation does not necessarily return the original message. -/// That is, E(D(m)) may not equal E(E(m)); and D(E(m)) may not -/// equal D(D(m)). -template -inline CipherDir GetCipherDir(const T &obj) -{ - return obj.IsForwardTransformation() ? ENCRYPTION : DECRYPTION; -} - -/// \brief Performs an addition with carry on a block of bytes -/// \param inout the byte block -/// \param size the size of the block, in bytes -/// \details Performs an addition with carry by adding 1 on a block of bytes starting at the least -/// significant byte. Once carry is 0, the function terminates and returns to the caller. -/// \note The function is not constant time because it stops processing when the carry is 0. -inline void IncrementCounterByOne(byte *inout, unsigned int size) -{ - CRYPTOPP_ASSERT(inout != NULLPTR); - - unsigned int carry=1; - while (carry && size != 0) - { - // On carry inout[n] equals 0 - carry = ! ++inout[size-1]; - size--; - } -} - -/// \brief Performs an addition with carry on a block of bytes -/// \param output the destination block of bytes -/// \param input the source block of bytes -/// \param size the size of the block -/// \details Performs an addition with carry on a block of bytes starting at the least significant -/// byte. Once carry is 0, the remaining bytes from input are copied to output using memcpy. -/// \details The function is close to near-constant time because it operates on all the bytes in the blocks. -inline void IncrementCounterByOne(byte *output, const byte *input, unsigned int size) -{ - CRYPTOPP_ASSERT(output != NULLPTR); - CRYPTOPP_ASSERT(input != NULLPTR); - - unsigned int carry=1; - while (carry && size != 0) - { - // On carry output[n] equals 0 - carry = ! (output[size-1] = input[size-1] + 1); - size--; - } - - while (size != 0) - { - output[size-1] = input[size-1]; - size--; - } -} - -/// \brief Performs a branch-less swap of values a and b if condition c is true -/// \tparam T class or type -/// \param c the condition to perform the swap -/// \param a the first value -/// \param b the second value -template -inline void ConditionalSwap(bool c, T &a, T &b) -{ - T t = c * (a ^ b); - a ^= t; - b ^= t; -} - -/// \brief Performs a branch-less swap of pointers a and b if condition c is true -/// \tparam T class or type -/// \param c the condition to perform the swap -/// \param a the first pointer -/// \param b the second pointer -template -inline void ConditionalSwapPointers(bool c, T &a, T &b) -{ - ptrdiff_t t = size_t(c) * (a - b); - a -= t; - b += t; -} - -// see http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/protect-secrets.html -// and http://www.securecoding.cert.org/confluence/display/cplusplus/MSC06-CPP.+Be+aware+of+compiler+optimization+when+dealing+with+sensitive+data - -/// \brief Sets each element of an array to 0 -/// \tparam T class or type -/// \param buf an array of elements -/// \param n the number of elements in the array -/// \details The operation performs a wipe or zeroization. The function -/// attempts to survive optimizations and dead code removal. -template -void SecureWipeBuffer(T *buf, size_t n) -{ - // GCC 4.3.2 on Cygwin optimizes away the first store if this - // loop is done in the forward direction - volatile T *p = buf+n; - while (n--) - *(--p) = 0; -} - -#if !defined(CRYPTOPP_DISABLE_ASM) && \ - (CRYPTOPP_MSC_VERSION >= 1400 || defined(__GNUC__)) && \ - (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X86) - -/// \brief Sets each byte of an array to 0 -/// \param buf an array of bytes -/// \param n the number of elements in the array -/// \details The operation performs a wipe or zeroization. The function -/// attempts to survive optimizations and dead code removal. -template<> inline void SecureWipeBuffer(byte *buf, size_t n) -{ - volatile byte *p = buf; -#ifdef __GNUC__ - asm volatile("rep stosb" : "+c"(n), "+D"(p) : "a"(0) : "memory"); -#else - __stosb(reinterpret_cast(reinterpret_cast(p)), 0, n); -#endif -} - -/// \brief Sets each 16-bit element of an array to 0 -/// \param buf an array of 16-bit words -/// \param n the number of elements in the array -/// \details The operation performs a wipe or zeroization. The function -/// attempts to survive optimizations and dead code removal. -template<> inline void SecureWipeBuffer(word16 *buf, size_t n) -{ - volatile word16 *p = buf; -#ifdef __GNUC__ - asm volatile("rep stosw" : "+c"(n), "+D"(p) : "a"(0) : "memory"); -#else - __stosw(reinterpret_cast(reinterpret_cast(p)), 0, n); -#endif -} - -/// \brief Sets each 32-bit element of an array to 0 -/// \param buf an array of 32-bit words -/// \param n the number of elements in the array -/// \details The operation performs a wipe or zeroization. The function -/// attempts to survive optimizations and dead code removal. -template<> inline void SecureWipeBuffer(word32 *buf, size_t n) -{ - volatile word32 *p = buf; -#ifdef __GNUC__ - asm volatile("rep stosl" : "+c"(n), "+D"(p) : "a"(0) : "memory"); -#else - __stosd(reinterpret_cast(reinterpret_cast(p)), 0, n); -#endif -} - -/// \brief Sets each 64-bit element of an array to 0 -/// \param buf an array of 64-bit words -/// \param n the number of elements in the array -/// \details The operation performs a wipe or zeroization. The function -/// attempts to survive optimizations and dead code removal. -template<> inline void SecureWipeBuffer(word64 *buf, size_t n) -{ -#if CRYPTOPP_BOOL_X64 - volatile word64 *p = buf; -# ifdef __GNUC__ - asm volatile("rep stosq" : "+c"(n), "+D"(p) : "a"(0) : "memory"); -# else - __stosq(const_cast(p), 0, n); -# endif -#else - SecureWipeBuffer(reinterpret_cast(buf), 2*n); -#endif -} - -#endif // CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X86 - -#if !defined(CRYPTOPP_DISABLE_ASM) && (CRYPTOPP_MSC_VERSION >= 1700) && defined(_M_ARM) -template<> inline void SecureWipeBuffer(byte *buf, size_t n) -{ - char *p = reinterpret_cast(buf+n); - while (n--) - __iso_volatile_store8(--p, 0); -} - -template<> inline void SecureWipeBuffer(word16 *buf, size_t n) -{ - short *p = reinterpret_cast(buf+n); - while (n--) - __iso_volatile_store16(--p, 0); -} - -template<> inline void SecureWipeBuffer(word32 *buf, size_t n) -{ - int *p = reinterpret_cast(buf+n); - while (n--) - __iso_volatile_store32(--p, 0); -} - -template<> inline void SecureWipeBuffer(word64 *buf, size_t n) -{ - __int64 *p = reinterpret_cast<__int64*>(buf+n); - while (n--) - __iso_volatile_store64(--p, 0); -} -#endif - -/// \brief Sets each element of an array to 0 -/// \tparam T class or type -/// \param buf an array of elements -/// \param n the number of elements in the array -/// \details The operation performs a wipe or zeroization. The function -/// attempts to survive optimizations and dead code removal. -template -inline void SecureWipeArray(T *buf, size_t n) -{ - if (sizeof(T) % 8 == 0 && GetAlignmentOf() % GetAlignmentOf() == 0) - SecureWipeBuffer(reinterpret_cast(static_cast(buf)), n * (sizeof(T)/8)); - else if (sizeof(T) % 4 == 0 && GetAlignmentOf() % GetAlignmentOf() == 0) - SecureWipeBuffer(reinterpret_cast(static_cast(buf)), n * (sizeof(T)/4)); - else if (sizeof(T) % 2 == 0 && GetAlignmentOf() % GetAlignmentOf() == 0) - SecureWipeBuffer(reinterpret_cast(static_cast(buf)), n * (sizeof(T)/2)); - else - SecureWipeBuffer(reinterpret_cast(static_cast(buf)), n * sizeof(T)); -} - -/// \brief Converts a wide character C-string to a multibyte string -/// \param str C-string consisting of wide characters -/// \param throwOnError flag indicating the function should throw on error -/// \return str converted to a multibyte string or an empty string. -/// \details StringNarrow() converts a wide string to a narrow string using C++ std::wcstombs() under -/// the executing thread's locale. A locale must be set before using this function, and it can be -/// set with std::setlocale() if needed. Upon success, the converted string is returned. -/// \details Upon failure with throwOnError as false, the function returns an empty string. If -/// throwOnError as true, the function throws an InvalidArgument() exception. -/// \note If you try to convert, say, the Chinese character for "bone" from UTF-16 (0x9AA8) to UTF-8 -/// (0xE9 0xAA 0xA8), then you must ensure the locale is available. If the locale is not available, -/// then a 0x21 error is returned on Windows which eventually results in an InvalidArgument() exception. -std::string StringNarrow(const wchar_t *str, bool throwOnError = true); - -/// \brief Converts a multibyte C-string to a wide character string -/// \param str C-string consisting of wide characters -/// \param throwOnError flag indicating the function should throw on error -/// \return str converted to a multibyte string or an empty string. -/// \details StringWiden() converts a narrow string to a wide string using C++ std::mbstowcs() under -/// the executing thread's locale. A locale must be set before using this function, and it can be -/// set with std::setlocale() if needed. Upon success, the converted string is returned. -/// \details Upon failure with throwOnError as false, the function returns an empty string. If -/// throwOnError as true, the function throws an InvalidArgument() exception. -/// \note If you try to convert, say, the Chinese character for "bone" from UTF-8 (0xE9 0xAA 0xA8) -/// to UTF-16 (0x9AA8), then you must ensure the locale is available. If the locale is not available, -/// then a 0x21 error is returned on Windows which eventually results in an InvalidArgument() exception. -std::wstring StringWiden(const char *str, bool throwOnError = true); - -// ************** rotate functions *************** - -/// \brief Performs a left rotate -/// \tparam R the number of bit positions to rotate the value -/// \tparam T the word type -/// \param x the value to rotate -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details R must be in the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// Use rotlMod if the rotate amount R is outside the range. -/// \details Use rotlConstant when the rotate amount is constant. The template function was added -/// because Clang did not propagate the constant when passed as a function parameter. Clang's -/// need for a constexpr meant rotlFixed failed to compile on occasion. -/// \note rotlConstant attempts to enlist a rotate IMM instruction because its often faster -/// than a rotate REG. Immediate rotates can be up to three times faster than their register -/// counterparts. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -/// \since Crypto++ 6.0 -template inline T rotlConstant(T x) -{ - // Portable rotate that reduces to single instruction... - // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, - // http://software.intel.com/en-us/forums/topic/580884 - // and http://llvm.org/bugs/show_bug.cgi?id=24226 - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - CRYPTOPP_ASSERT(static_cast(R) < THIS_SIZE); - return T((x<>(-R&MASK))); -} - -/// \brief Performs a right rotate -/// \tparam R the number of bit positions to rotate the value -/// \tparam T the word type -/// \param x the value to rotate -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details R must be in the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// Use rotrMod if the rotate amount R is outside the range. -/// \details Use rotrConstant when the rotate amount is constant. The template function was added -/// because Clang did not propagate the constant when passed as a function parameter. Clang's -/// need for a constexpr meant rotrFixed failed to compile on occasion. -/// \note rotrConstant attempts to enlist a rotate IMM instruction because its often faster -/// than a rotate REG. Immediate rotates can be up to three times faster than their register -/// counterparts. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -template inline T rotrConstant(T x) -{ - // Portable rotate that reduces to single instruction... - // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, - // http://software.intel.com/en-us/forums/topic/580884 - // and http://llvm.org/bugs/show_bug.cgi?id=24226 - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - CRYPTOPP_ASSERT(static_cast(R) < THIS_SIZE); - return T((x >> R)|(x<<(-R&MASK))); -} - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details y must be in the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// Use rotlMod if the rotate amount y is outside the range. -/// \note rotlFixed attempts to enlist a rotate IMM instruction because its often faster -/// than a rotate REG. Immediate rotates can be up to three times faster than their register -/// counterparts. New code should use rotlConstant, which accepts the rotate amount as a -/// template parameter. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -/// \since Crypto++ 6.0 -template inline T rotlFixed(T x, unsigned int y) -{ - // Portable rotate that reduces to single instruction... - // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, - // http://software.intel.com/en-us/forums/topic/580884 - // and http://llvm.org/bugs/show_bug.cgi?id=24226 - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - CRYPTOPP_ASSERT(static_cast(y) < THIS_SIZE); - return T((x<>(-y&MASK))); -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details y must be in the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// Use rotrMod if the rotate amount y is outside the range. -/// \note rotrFixed attempts to enlist a rotate IMM instruction because its often faster -/// than a rotate REG. Immediate rotates can be up to three times faster than their register -/// counterparts. New code should use rotrConstant, which accepts the rotate amount as a -/// template parameter. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -/// \since Crypto++ 3.0 -template inline T rotrFixed(T x, unsigned int y) -{ - // Portable rotate that reduces to single instruction... - // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157, - // http://software.intel.com/en-us/forums/topic/580884 - // and http://llvm.org/bugs/show_bug.cgi?id=24226 - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - CRYPTOPP_ASSERT(static_cast(y) < THIS_SIZE); - return T((x >> y)|(x<<(-y&MASK))); -} - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details y must be in the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// Use rotlMod if the rotate amount y is outside the range. -/// \note rotlVariable attempts to enlist a rotate IMM instruction because its often faster -/// than a rotate REG. Immediate rotates can be up to three times faster than their register -/// counterparts. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -/// \since Crypto++ 3.0 -template inline T rotlVariable(T x, unsigned int y) -{ - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - CRYPTOPP_ASSERT(static_cast(y) < THIS_SIZE); - return T((x<>(-y&MASK))); -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details y must be in the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// Use rotrMod if the rotate amount y is outside the range. -/// \note rotrVariable attempts to enlist a rotate IMM instruction because its often faster -/// than a rotate REG. Immediate rotates can be up to three times faster than their register -/// counterparts. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -/// \since Crypto++ 3.0 -template inline T rotrVariable(T x, unsigned int y) -{ - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - CRYPTOPP_ASSERT(static_cast(y) < THIS_SIZE); - return T((x>>y)|(x<<(-y&MASK))); -} - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details y is reduced to the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotrVariable will use either rotate IMM or rotate REG. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -/// \since Crypto++ 3.0 -template inline T rotlMod(T x, unsigned int y) -{ - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - return T((x<<(y&MASK))|(x>>(-y&MASK))); -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a portable C/C++ implementation. The value x to be rotated can be 8 to 64-bits wide. -/// \details y is reduced to the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotrVariable will use either rotate IMM or rotate REG. -/// \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable -/// \since Crypto++ 3.0 -template inline T rotrMod(T x, unsigned int y) -{ - CRYPTOPP_CONSTANT(THIS_SIZE = sizeof(T)*8); - CRYPTOPP_CONSTANT(MASK = THIS_SIZE-1); - return T((x>>(y&MASK))|(x<<(-y&MASK))); -} - -#ifdef CRYPTOPP_MSC_VERSION - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the 32-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotl provided by -/// . The value x to be rotated is 32-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotlFixed will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word32 rotlFixed(word32 x, unsigned int y) -{ - // Uses Microsoft call, bound to C/C++ language rules. - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return y ? _lrotl(x, static_cast(y)) : x; -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the 32-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotr provided by -/// . The value x to be rotated is 32-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotrFixed will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word32 rotrFixed(word32 x, unsigned int y) -{ - // Uses Microsoft call, bound to C/C++ language rules. - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return y ? _lrotr(x, static_cast(y)) : x; -} - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the 32-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotl provided by -/// . The value x to be rotated is 32-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotlVariable will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word32 rotlVariable(word32 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return _lrotl(x, static_cast(y)); -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the 32-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotr provided by -/// . The value x to be rotated is 32-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotrVariable will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word32 rotrVariable(word32 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return _lrotr(x, static_cast(y)); -} - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the 32-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotl provided by -/// . The value x to be rotated is 32-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \since Crypto++ 3.0 -template<> inline word32 rotlMod(word32 x, unsigned int y) -{ - y %= 8*sizeof(x); - return _lrotl(x, static_cast(y)); -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the 32-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotr provided by -/// . The value x to be rotated is 32-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \since Crypto++ 3.0 -template<> inline word32 rotrMod(word32 x, unsigned int y) -{ - y %= 8*sizeof(x); - return _lrotr(x, static_cast(y)); -} - -#endif // #ifdef CRYPTOPP_MSC_VERSION - -#if (CRYPTOPP_MSC_VERSION >= 1400) || (defined(CRYPTOPP_MSC_VERSION) && !defined(_DLL)) -// Intel C++ Compiler 10.0 calls a function instead of using the rotate instruction when using these instructions - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the 64-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotl provided by -/// . The value x to be rotated is 64-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotrFixed will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word64 rotlFixed(word64 x, unsigned int y) -{ - // Uses Microsoft call, bound to C/C++ language rules. - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return y ? _rotl64(x, static_cast(y)) : x; -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the 64-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotr provided by -/// . The value x to be rotated is 64-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotrFixed will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word64 rotrFixed(word64 x, unsigned int y) -{ - // Uses Microsoft call, bound to C/C++ language rules. - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return y ? _rotr64(x, static_cast(y)) : x; -} - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the 64-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotl provided by -/// . The value x to be rotated is 64-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotlVariable will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word64 rotlVariable(word64 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return _rotl64(x, static_cast(y)); -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the 64-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotr provided by -/// . The value x to be rotated is 64-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \note rotrVariable will assert in Debug builds if is outside the allowed range. -/// \since Crypto++ 3.0 -template<> inline word64 rotrVariable(word64 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return y ? _rotr64(x, static_cast(y)) : x; -} - -/// \brief Performs a left rotate -/// \tparam T the word type -/// \param x the 64-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotl provided by -/// . The value x to be rotated is 64-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \since Crypto++ 3.0 -template<> inline word64 rotlMod(word64 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return y ? _rotl64(x, static_cast(y)) : x; -} - -/// \brief Performs a right rotate -/// \tparam T the word type -/// \param x the 64-bit value to rotate -/// \param y the number of bit positions to rotate the value -/// \details This is a Microsoft specific implementation using _lrotr provided by -/// . The value x to be rotated is 64-bits. y must be in the range -/// [0, sizeof(T)*8 - 1] to avoid undefined behavior. -/// \since Crypto++ 3.0 -template<> inline word64 rotrMod(word64 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 8*sizeof(x)); - return y ? _rotr64(x, static_cast(y)) : x; -} - -#endif // #if CRYPTOPP_MSC_VERSION >= 1310 - -#if CRYPTOPP_MSC_VERSION >= 1400 && !defined(__INTEL_COMPILER) -// Intel C++ Compiler 10.0 gives undefined externals with these -template<> inline word16 rotlFixed(word16 x, unsigned int y) -{ - // Intrinsic, not bound to C/C++ language rules. - return _rotl16(x, static_cast(y)); -} - -template<> inline word16 rotrFixed(word16 x, unsigned int y) -{ - // Intrinsic, not bound to C/C++ language rules. - return _rotr16(x, static_cast(y)); -} - -template<> inline word16 rotlVariable(word16 x, unsigned int y) -{ - return _rotl16(x, static_cast(y)); -} - -template<> inline word16 rotrVariable(word16 x, unsigned int y) -{ - return _rotr16(x, static_cast(y)); -} - -template<> inline word16 rotlMod(word16 x, unsigned int y) -{ - return _rotl16(x, static_cast(y)); -} - -template<> inline word16 rotrMod(word16 x, unsigned int y) -{ - return _rotr16(x, static_cast(y)); -} - -template<> inline byte rotlFixed(byte x, unsigned int y) -{ - // Intrinsic, not bound to C/C++ language rules. - return _rotl8(x, static_cast(y)); -} - -template<> inline byte rotrFixed(byte x, unsigned int y) -{ - // Intrinsic, not bound to C/C++ language rules. - return _rotr8(x, static_cast(y)); -} - -template<> inline byte rotlVariable(byte x, unsigned int y) -{ - return _rotl8(x, static_cast(y)); -} - -template<> inline byte rotrVariable(byte x, unsigned int y) -{ - return _rotr8(x, static_cast(y)); -} - -template<> inline byte rotlMod(byte x, unsigned int y) -{ - return _rotl8(x, static_cast(y)); -} - -template<> inline byte rotrMod(byte x, unsigned int y) -{ - return _rotr8(x, static_cast(y)); -} - -#endif // #if CRYPTOPP_MSC_VERSION >= 1400 - -#if (defined(__MWERKS__) && TARGET_CPU_PPC) - -template<> inline word32 rotlFixed(word32 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 32); - return y ? __rlwinm(x,y,0,31) : x; -} - -template<> inline word32 rotrFixed(word32 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 32); - return y ? __rlwinm(x,32-y,0,31) : x; -} - -template<> inline word32 rotlVariable(word32 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 32); - return (__rlwnm(x,y,0,31)); -} - -template<> inline word32 rotrVariable(word32 x, unsigned int y) -{ - CRYPTOPP_ASSERT(y < 32); - return (__rlwnm(x,32-y,0,31)); -} - -template<> inline word32 rotlMod(word32 x, unsigned int y) -{ - return (__rlwnm(x,y,0,31)); -} - -template<> inline word32 rotrMod(word32 x, unsigned int y) -{ - return (__rlwnm(x,32-y,0,31)); -} - -#endif // __MWERKS__ && TARGET_CPU_PPC - -// ************** endian reversal *************** - -/// \brief Gets a byte from a value -/// \param order the ByteOrder of the value -/// \param value the value to retrieve the byte -/// \param index the location of the byte to retrieve -template -inline unsigned int GetByte(ByteOrder order, T value, unsigned int index) -{ - if (order == LITTLE_ENDIAN_ORDER) - return GETBYTE(value, index); - else - return GETBYTE(value, sizeof(T)-index-1); -} - -/// \brief Reverses bytes in a 8-bit value -/// \param value the 8-bit value to reverse -/// \note ByteReverse returns the value passed to it since there is nothing to -/// reverse. -inline byte ByteReverse(byte value) -{ - return value; -} - -/// \brief Reverses bytes in a 16-bit value -/// \param value the 16-bit value to reverse -/// \details ByteReverse calls bswap if available. Otherwise the function -/// performs a 8-bit rotate on the word16. -inline word16 ByteReverse(word16 value) -{ -#if defined(CRYPTOPP_BYTESWAP_AVAILABLE) - return bswap_16(value); -#elif (CRYPTOPP_MSC_VERSION >= 1400) || (defined(CRYPTOPP_MSC_VERSION) && !defined(_DLL)) - return _byteswap_ushort(value); -#else - return rotlFixed(value, 8U); -#endif -} - -/// \brief Reverses bytes in a 32-bit value -/// \param value the 32-bit value to reverse -/// \details ByteReverse calls bswap if available. Otherwise the function uses -/// a combination of rotates on the word32. -inline word32 ByteReverse(word32 value) -{ -#if defined(CRYPTOPP_BYTESWAP_AVAILABLE) - return bswap_32(value); -#elif defined(CRYPTOPP_ARM_BYTEREV_AVAILABLE) - word32 rvalue; - __asm__ ("rev %0, %1" : "=r" (rvalue) : "r" (value)); - return rvalue; -#elif defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE) - __asm__ ("bswap %0" : "=r" (value) : "0" (value)); - return value; -#elif defined(__MWERKS__) && TARGET_CPU_PPC - return (word32)__lwbrx(&value,0); -#elif (CRYPTOPP_MSC_VERSION >= 1400) || (defined(CRYPTOPP_MSC_VERSION) && !defined(_DLL)) - return _byteswap_ulong(value); -#elif CRYPTOPP_FAST_ROTATE(32) && !defined(__xlC__) - // 5 instructions with rotate instruction, 9 without - return (rotrFixed(value, 8U) & 0xff00ff00) | (rotlFixed(value, 8U) & 0x00ff00ff); -#else - // 6 instructions with rotate instruction, 8 without - value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8); - return rotlFixed(value, 16U); -#endif -} - -/// \brief Reverses bytes in a 64-bit value -/// \param value the 64-bit value to reverse -/// \details ByteReverse calls bswap if available. Otherwise the function uses -/// a combination of rotates on the word64. -inline word64 ByteReverse(word64 value) -{ -#if defined(CRYPTOPP_BYTESWAP_AVAILABLE) - return bswap_64(value); -#elif defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE) && defined(__x86_64__) - __asm__ ("bswap %0" : "=r" (value) : "0" (value)); - return value; -#elif (CRYPTOPP_MSC_VERSION >= 1400) || (defined(CRYPTOPP_MSC_VERSION) && !defined(_DLL)) - return _byteswap_uint64(value); -#elif CRYPTOPP_BOOL_SLOW_WORD64 - return (word64(ByteReverse(word32(value))) << 32) | ByteReverse(word32(value>>32)); -#else - value = ((value & W64LIT(0xFF00FF00FF00FF00)) >> 8) | ((value & W64LIT(0x00FF00FF00FF00FF)) << 8); - value = ((value & W64LIT(0xFFFF0000FFFF0000)) >> 16) | ((value & W64LIT(0x0000FFFF0000FFFF)) << 16); - return rotlFixed(value, 32U); -#endif -} - -#if defined(CRYPTOPP_WORD128_AVAILABLE) -/// \brief Reverses bytes in a 128-bit value -/// \param value the 128-bit value to reverse -/// \details ByteReverse calls bswap if available. Otherwise the function uses -/// a combination of rotates on the word128. -/// \note word128 is available on some 64-bit platforms when the compiler supports it. -/// \since Crypto++ 8.7 -inline word128 ByteReverse(word128 value) -{ - // TODO: speed this up - return (word128(ByteReverse(word64(value))) << 64) | ByteReverse(word64(value>>64)); -} -#endif - -/// \brief Reverses bits in a 8-bit value -/// \param value the 8-bit value to reverse -/// \details BitReverse performs a combination of shifts on the byte. -inline byte BitReverse(byte value) -{ - value = byte((value & 0xAA) >> 1) | byte((value & 0x55) << 1); - value = byte((value & 0xCC) >> 2) | byte((value & 0x33) << 2); - return rotlFixed(value, 4U); -} - -/// \brief Reverses bits in a 16-bit value -/// \param value the 16-bit value to reverse -/// \details BitReverse performs a combination of shifts on the word16. -inline word16 BitReverse(word16 value) -{ -#if defined(CRYPTOPP_ARM_BITREV_AVAILABLE) - // 4 instructions on ARM. - word32 rvalue; - __asm__ ("rbit %0, %1" : "=r" (rvalue) : "r" (value)); - return word16(rvalue >> 16); -#else - // 15 instructions on ARM. - value = word16((value & 0xAAAA) >> 1) | word16((value & 0x5555) << 1); - value = word16((value & 0xCCCC) >> 2) | word16((value & 0x3333) << 2); - value = word16((value & 0xF0F0) >> 4) | word16((value & 0x0F0F) << 4); - return ByteReverse(value); -#endif -} - -/// \brief Reverses bits in a 32-bit value -/// \param value the 32-bit value to reverse -/// \details BitReverse performs a combination of shifts on the word32. -inline word32 BitReverse(word32 value) -{ -#if defined(CRYPTOPP_ARM_BITREV_AVAILABLE) - // 2 instructions on ARM. - word32 rvalue; - __asm__ ("rbit %0, %1" : "=r" (rvalue) : "r" (value)); - return rvalue; -#else - // 19 instructions on ARM. - value = word32((value & 0xAAAAAAAA) >> 1) | word32((value & 0x55555555) << 1); - value = word32((value & 0xCCCCCCCC) >> 2) | word32((value & 0x33333333) << 2); - value = word32((value & 0xF0F0F0F0) >> 4) | word32((value & 0x0F0F0F0F) << 4); - return ByteReverse(value); -#endif -} - -/// \brief Reverses bits in a 64-bit value -/// \param value the 64-bit value to reverse -/// \details BitReverse performs a combination of shifts on the word64. -inline word64 BitReverse(word64 value) -{ -#if CRYPTOPP_BOOL_SLOW_WORD64 - return (word64(BitReverse(word32(value))) << 32) | BitReverse(word32(value>>32)); -#else - value = word64((value & W64LIT(0xAAAAAAAAAAAAAAAA)) >> 1) | word64((value & W64LIT(0x5555555555555555)) << 1); - value = word64((value & W64LIT(0xCCCCCCCCCCCCCCCC)) >> 2) | word64((value & W64LIT(0x3333333333333333)) << 2); - value = word64((value & W64LIT(0xF0F0F0F0F0F0F0F0)) >> 4) | word64((value & W64LIT(0x0F0F0F0F0F0F0F0F)) << 4); - return ByteReverse(value); -#endif -} - -/// \brief Reverses bits in a value -/// \param value the value to reverse -/// \details The template overload of BitReverse operates on signed and unsigned values. -/// Internally the size of T is checked, and then value is cast to a byte, -/// word16, word32 or word64. After the cast, the appropriate BitReverse -/// overload is called. -/// \note word128 is available on some 64-bit platforms when the compiler supports it. -/// \since Crypto++ 1.0, word128 since Crypto++ 8.7 -template -inline T BitReverse(T value) -{ - if (sizeof(T) == 1) - return (T)BitReverse((byte)value); - else if (sizeof(T) == 2) - return (T)BitReverse((word16)value); - else if (sizeof(T) == 4) - return (T)BitReverse((word32)value); - else if (sizeof(T) == 8) - return (T)BitReverse((word64)value); -#if defined(CRYPTOPP_WORD128_AVAILABLE) - else if (sizeof(T) == 16) - return (T)BitReverse((word128)value); -#endif - else - { - CRYPTOPP_ASSERT(0); - return (T)BitReverse((word64)value); - } -} - -/// \brief Reverses bytes in a value depending upon endianness -/// \tparam T the class or type -/// \param order the ByteOrder of the data -/// \param value the value to conditionally reverse -/// \details Internally, the ConditionalByteReverse calls NativeByteOrderIs. -/// If order matches native byte order, then the original value is returned. -/// If not, then ByteReverse is called on the value before returning to the caller. -template -inline T ConditionalByteReverse(ByteOrder order, T value) -{ - return NativeByteOrderIs(order) ? value : ByteReverse(value); -} - -/// \brief Reverses bytes in an element from an array of elements -/// \tparam T the class or type -/// \param out the output array of elements -/// \param in the input array of elements -/// \param byteCount the total number of bytes in the array -/// \details Internally, ByteReverse visits each element in the in array -/// calls ByteReverse on it, and writes the result to out. -/// \details ByteReverse does not process tail byes, or bytes that are -/// not part of a full element. If T is int (and int is 4 bytes), then -/// byteCount = 10 means only the first 2 elements or 8 bytes are -/// reversed. -/// \details The following program should help illustrate the behavior. -///
vector v1, v2;
-///
-/// v1.push_back(1);
-/// v1.push_back(2);
-/// v1.push_back(3);
-/// v1.push_back(4);
-///
-/// v2.resize(v1.size());
-/// ByteReverse(&v2[0], &v1[0], 16);
-///
-/// cout << "V1: ";
-/// for(unsigned int i = 0; i < v1.size(); i++)
-///   cout << std::hex << v1[i] << " ";
-/// cout << endl;
-///
-/// cout << "V2: ";
-/// for(unsigned int i = 0; i < v2.size(); i++)
-///   cout << std::hex << v2[i] << " ";
-/// cout << endl;
-/// The program above results in the following output. -///
V1: 00000001 00000002 00000003 00000004
-/// V2: 01000000 02000000 03000000 04000000
-/// \sa ConditionalByteReverse -template -void ByteReverse(T *out, const T *in, size_t byteCount) -{ - // Alignment check due to Issues 690 - CRYPTOPP_ASSERT(byteCount % sizeof(T) == 0); - CRYPTOPP_ASSERT(IsAligned(in)); - CRYPTOPP_ASSERT(IsAligned(out)); - - size_t count = byteCount/sizeof(T); - for (size_t i=0; ibyteCount = 10 means only the first 2 elements or 8 bytes are -/// reversed. -/// \sa ByteReverse -template -inline void ConditionalByteReverse(ByteOrder order, T *out, const T *in, size_t byteCount) -{ - if (!NativeByteOrderIs(order)) - ByteReverse(out, in, byteCount); - else if (in != out) - memcpy_s(out, byteCount, in, byteCount); -} - -/// \brief Copy bytes in a buffer to an array of elements in big-endian order -/// \tparam T the class or type -/// \param order the ByteOrder of the data -/// \param out the output array of elements -/// \param outlen the byte count of the array -/// \param in the input array of elements -/// \param inlen the byte count of the array -template -inline void GetUserKey(ByteOrder order, T *out, size_t outlen, const byte *in, size_t inlen) -{ - const size_t U = sizeof(T); - CRYPTOPP_ASSERT(inlen <= outlen*U); - memcpy_s(out, outlen*U, in, inlen); - memset_z((byte *)out+inlen, 0, outlen*U-inlen); - ConditionalByteReverse(order, out, out, RoundUpToMultipleOf(inlen, U)); -} - -/// \brief Retrieve a byte from an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned buffer -/// \param unused dummy parameter -/// \return byte value -/// \details UnalignedGetWordNonTemplate accesses an unaligned buffer and returns a byte value. -/// \since Crypto++ 1.0 -inline byte UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const byte *unused) -{ - CRYPTOPP_UNUSED(order); CRYPTOPP_UNUSED(unused); - return block[0]; -} - -/// \brief Retrieve a word16 from an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned buffer -/// \param unused dummy parameter -/// \return byte value -/// \details UnalignedGetWordNonTemplate accesses an unaligned buffer and returns a word16 value. -/// \since Crypto++ 1.0 -inline word16 UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const word16 *unused) -{ - CRYPTOPP_UNUSED(unused); - return (order == BIG_ENDIAN_ORDER) - ? block[1] | (block[0] << 8) - : block[0] | (block[1] << 8); -} - -/// \brief Retrieve a word32 from an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned buffer -/// \param unused dummy parameter -/// \return byte value -/// \details UnalignedGetWordNonTemplate accesses an unaligned buffer and returns a word32 value. -/// \since Crypto++ 1.0 -inline word32 UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const word32 *unused) -{ - CRYPTOPP_UNUSED(unused); - return (order == BIG_ENDIAN_ORDER) - ? word32(block[3]) | (word32(block[2]) << 8) | (word32(block[1]) << 16) | (word32(block[0]) << 24) - : word32(block[0]) | (word32(block[1]) << 8) | (word32(block[2]) << 16) | (word32(block[3]) << 24); -} - -/// \brief Retrieve a word64 from an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned buffer -/// \param unused dummy parameter -/// \return byte value -/// \details UnalignedGetWordNonTemplate accesses an unaligned buffer and returns a word64 value. -/// \since Crypto++ 1.0 -inline word64 UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const word64 *unused) -{ - CRYPTOPP_UNUSED(unused); - return (order == BIG_ENDIAN_ORDER) - ? - (word64(block[7]) | - (word64(block[6]) << 8) | - (word64(block[5]) << 16) | - (word64(block[4]) << 24) | - (word64(block[3]) << 32) | - (word64(block[2]) << 40) | - (word64(block[1]) << 48) | - (word64(block[0]) << 56)) - : - (word64(block[0]) | - (word64(block[1]) << 8) | - (word64(block[2]) << 16) | - (word64(block[3]) << 24) | - (word64(block[4]) << 32) | - (word64(block[5]) << 40) | - (word64(block[6]) << 48) | - (word64(block[7]) << 56)); -} - -#if defined(CRYPTOPP_WORD128_AVAILABLE) -/// \brief Retrieve a word128 from an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned buffer -/// \param unused dummy parameter -/// \return byte value -/// \details UnalignedGetWordNonTemplate accesses an unaligned buffer and returns a word128 value. -/// \note word128 is available on some 64-bit platforms when the compiler supports it. -/// \since Crypto++ 8.7 -inline word128 UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const word128 *unused) -{ - CRYPTOPP_UNUSED(unused); - return (order == BIG_ENDIAN_ORDER) - ? - (word128(block[15]) | - (word128(block[14]) << 8) | - (word128(block[13]) << 16) | - (word128(block[12]) << 24) | - (word128(block[11]) << 32) | - (word128(block[10]) << 40) | - (word128(block[ 9]) << 48) | - (word128(block[ 8]) << 56) | - (word128(block[ 7]) << 64) | - (word128(block[ 6]) << 72) | - (word128(block[ 5]) << 80) | - (word128(block[ 4]) << 88) | - (word128(block[ 3]) << 96) | - (word128(block[ 2]) << 104) | - (word128(block[ 1]) << 112) | - (word128(block[ 0]) << 120)) - : - (word128(block[ 0]) | - (word128(block[ 1]) << 8) | - (word128(block[ 2]) << 16) | - (word128(block[ 3]) << 24) | - (word128(block[ 4]) << 32) | - (word128(block[ 5]) << 40) | - (word128(block[ 6]) << 48) | - (word128(block[ 7]) << 56) | - (word128(block[ 8]) << 64) | - (word128(block[ 9]) << 72) | - (word128(block[10]) << 80) | - (word128(block[11]) << 88) | - (word128(block[12]) << 96) | - (word128(block[13]) << 104) | - (word128(block[14]) << 112) | - (word128(block[15]) << 120)); -} -#endif - -/// \brief Write a byte to an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned output buffer -/// \param value byte value -/// \param xorBlock optional unaligned xor buffer -/// \details UnalignedbyteNonTemplate writes a byte value to an unaligned buffer. -/// \since Crypto++ 1.0 -inline void UnalignedbyteNonTemplate(ByteOrder order, byte *block, byte value, const byte *xorBlock) -{ - CRYPTOPP_UNUSED(order); - block[0] = static_cast(xorBlock ? (value ^ xorBlock[0]) : value); -} - -/// \brief Write a word16 to an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned output buffer -/// \param value word16 value -/// \param xorBlock optional unaligned xor buffer -/// \details UnalignedbyteNonTemplate writes a word16 value to an unaligned buffer. -/// \since Crypto++ 1.0 -inline void UnalignedbyteNonTemplate(ByteOrder order, byte *block, word16 value, const byte *xorBlock) -{ - if (order == BIG_ENDIAN_ORDER) - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - } - else - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - } - } -} - -/// \brief Write a word32 to an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned output buffer -/// \param value word32 value -/// \param xorBlock optional unaligned xor buffer -/// \details UnalignedbyteNonTemplate writes a word32 value to an unaligned buffer. -/// \since Crypto++ 1.0 -inline void UnalignedbyteNonTemplate(ByteOrder order, byte *block, word32 value, const byte *xorBlock) -{ - if (order == BIG_ENDIAN_ORDER) - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - } - else - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - } - } -} - -/// \brief Write a word64 to an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned output buffer -/// \param value word64 value -/// \param xorBlock optional unaligned xor buffer -/// \details UnalignedbyteNonTemplate writes a word64 value to an unaligned buffer. -/// \since Crypto++ 1.0 -inline void UnalignedbyteNonTemplate(ByteOrder order, byte *block, word64 value, const byte *xorBlock) -{ - if (order == BIG_ENDIAN_ORDER) - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[4] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[5] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - } - else - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[4] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[5] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - } - } -} - -#if defined(CRYPTOPP_WORD128_AVAILABLE) -/// \brief Write a word128 to an unaligned buffer -/// \param order the ByteOrder of the data -/// \param block an unaligned output buffer -/// \param value word128 value -/// \param xorBlock optional unaligned xor buffer -/// \details UnalignedbyteNonTemplate writes a word128 value to an unaligned buffer. -/// \note word128 is available on some 64-bit platforms when the compiler supports it. -/// \since Crypto++ 8.7 -inline void UnalignedbyteNonTemplate(ByteOrder order, byte *block, word128 value, const byte *xorBlock) -{ - if (order == BIG_ENDIAN_ORDER) - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 15); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 14); - block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 13); - block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 12); - block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 11); - block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 10); - block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 9); - block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 8); - - block[ 8] = xorBlock[ 8] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - block[ 9] = xorBlock[ 9] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[10] = xorBlock[10] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[11] = xorBlock[11] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[12] = xorBlock[12] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[13] = xorBlock[13] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[14] = xorBlock[14] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[15] = xorBlock[15] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 15); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 14); - block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 13); - block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 12); - block[4] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 11); - block[5] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 10); - block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 9); - block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 8); - - block[ 8] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - block[ 9] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[10] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[11] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[12] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[13] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[14] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[15] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - } - } - else - { - if (xorBlock) - { - block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - - block[ 8] = xorBlock[ 8] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 8); - block[ 9] = xorBlock[ 9] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 9); - block[10] = xorBlock[10] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 10); - block[11] = xorBlock[11] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 11); - block[12] = xorBlock[12] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 12); - block[13] = xorBlock[13] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 13); - block[14] = xorBlock[14] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 14); - block[15] = xorBlock[15] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 15); - } - else - { - block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0); - block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1); - block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2); - block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3); - block[4] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 4); - block[5] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 5); - block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6); - block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7); - - block[ 8] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 8); - block[ 9] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 9); - block[10] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 10); - block[11] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 11); - block[12] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 12); - block[13] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 13); - block[14] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 14); - block[15] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 15); - } - } -} -#endif - -/// \brief Access a block of memory -/// \tparam T class or type -/// \param assumeAligned flag indicating alignment -/// \param order the ByteOrder of the data -/// \param block the byte buffer to be processed -/// \return the word in the specified byte order -/// \details GetWord() provides alternate read access to a block of memory. The flag assumeAligned indicates -/// if the memory block is aligned for class or type T. The enumeration ByteOrder is BIG_ENDIAN_ORDER or -/// LITTLE_ENDIAN_ORDER. -/// \details An example of reading two word32 values from a block of memory is shown below. w -/// will be 0x03020100. -///
-///   word32 w;
-///   byte buffer[4] = {0,1,2,3};
-///   w = GetWord(false, LITTLE_ENDIAN_ORDER, buffer);
-/// 
-template -inline T GetWord(bool assumeAligned, ByteOrder order, const byte *block) -{ - CRYPTOPP_UNUSED(assumeAligned); - - T temp = 0; - if (block != NULLPTR) {std::memcpy(&temp, block, sizeof(T));} - return ConditionalByteReverse(order, temp); -} - -/// \brief Access a block of memory -/// \tparam T class or type -/// \param assumeAligned flag indicating alignment -/// \param order the ByteOrder of the data -/// \param result the word in the specified byte order -/// \param block the byte buffer to be processed -/// \details GetWord() provides alternate read access to a block of memory. The flag assumeAligned indicates -/// if the memory block is aligned for class or type T. The enumeration ByteOrder is BIG_ENDIAN_ORDER or -/// LITTLE_ENDIAN_ORDER. -/// \details An example of reading two word32 values from a block of memory is shown below. w -/// will be 0x03020100. -///
-///   word32 w;
-///   byte buffer[4] = {0,1,2,3};
-///   w = GetWord(false, LITTLE_ENDIAN_ORDER, buffer);
-/// 
-template -inline void GetWord(bool assumeAligned, ByteOrder order, T &result, const byte *block) -{ - result = GetWord(assumeAligned, order, block); -} - -/// \brief Access a block of memory -/// \tparam T class or type -/// \param assumeAligned flag indicating alignment -/// \param order the ByteOrder of the data -/// \param block the destination byte buffer -/// \param value the word in the specified byte order -/// \param xorBlock an optional byte buffer to xor -/// \details PutWord() provides alternate write access to a block of memory. The flag assumeAligned indicates -/// if the memory block is aligned for class or type T. The enumeration ByteOrder is BIG_ENDIAN_ORDER or -/// LITTLE_ENDIAN_ORDER. -template -inline void PutWord(bool assumeAligned, ByteOrder order, byte *block, T value, const byte *xorBlock = NULLPTR) -{ - CRYPTOPP_UNUSED(assumeAligned); - - T t1, t2; - t1 = ConditionalByteReverse(order, value); - if (xorBlock != NULLPTR) {std::memcpy(&t2, xorBlock, sizeof(T)); t1 ^= t2;} - if (block != NULLPTR) {std::memcpy(block, &t1, sizeof(T));} -} - -/// \brief Access a block of memory -/// \tparam T class or type -/// \tparam B enumeration indicating endianness -/// \tparam A flag indicating alignment -/// \details GetBlock() provides alternate read access to a block of memory. The enumeration B is -/// BigEndian or LittleEndian. The flag A indicates if the memory block is aligned for class or type T. -/// Repeatedly applying operator() results in advancing in the block of memory. -/// \details An example of reading two word32 values from a block of memory is shown below. w1 -/// will be 0x03020100 and w1 will be 0x07060504. -///
-///   word32 w1, w2;
-///   byte buffer[8] = {0,1,2,3,4,5,6,7};
-///   GetBlock block(buffer);
-///   block(w1)(w2);
-/// 
-template -class GetBlock -{ -public: - /// \brief Construct a GetBlock - /// \param block the memory block - GetBlock(const void *block) - : m_block((const byte *)block) {} - - /// \brief Access a block of memory - /// \tparam U class or type - /// \param x the value to read - /// \return pointer to the remainder of the block after reading x - template - inline GetBlock & operator()(U &x) - { - CRYPTOPP_COMPILE_ASSERT(sizeof(U) >= sizeof(T)); - x = GetWord(A, B::ToEnum(), m_block); - m_block += sizeof(T); - return *this; - } - -private: - const byte *m_block; -}; - -/// \brief Access a block of memory -/// \tparam T class or type -/// \tparam B enumeration indicating endianness -/// \tparam A flag indicating alignment -/// \details PutBlock() provides alternate write access to a block of memory. The enumeration B is -/// BigEndian or LittleEndian. The flag A indicates if the memory block is aligned for class or type T. -/// Repeatedly applying operator() results in advancing in the block of memory. -/// \details An example of writing two word32 values from a block of memory is shown below. After the code -/// executes, the byte buffer will be {0,1,2,3,4,5,6,7}. -///
-///   word32 w1=0x03020100, w2=0x07060504;
-///   byte buffer[8];
-///   PutBlock block(NULLPTR, buffer);
-///   block(w1)(w2);
-/// 
-template -class PutBlock -{ -public: - /// \brief Construct a PutBlock - /// \param block the memory block - /// \param xorBlock optional mask - PutBlock(const void *xorBlock, void *block) - : m_xorBlock((const byte *)xorBlock), m_block((byte *)block) {} - - /// \brief Access a block of memory - /// \tparam U class or type - /// \param x the value to write - /// \return pointer to the remainder of the block after writing x - template - inline PutBlock & operator()(U x) - { - PutWord(A, B::ToEnum(), m_block, (T)x, m_xorBlock); - m_block += sizeof(T); - if (m_xorBlock) - m_xorBlock += sizeof(T); - return *this; - } - -private: - const byte *m_xorBlock; - byte *m_block; -}; - -/// \brief Access a block of memory -/// \tparam T class or type -/// \tparam B enumeration indicating endianness -/// \tparam GA flag indicating alignment for the Get operation -/// \tparam PA flag indicating alignment for the Put operation -/// \details GetBlock() provides alternate write access to a block of memory. The enumeration B is -/// BigEndian or LittleEndian. The flag A indicates if the memory block is aligned for class or type T. -/// \sa GetBlock() and PutBlock(). -template -struct BlockGetAndPut -{ - // function needed because of C++ grammatical ambiguity between expression-statements and declarations - static inline GetBlock Get(const void *block) {return GetBlock(block);} - typedef PutBlock Put; -}; - -/// \brief Convert a word to a string -/// \tparam T class or type -/// \param value the word to convert -/// \param order byte order -/// \return a string representing the value of the word -template -std::string WordToString(T value, ByteOrder order = BIG_ENDIAN_ORDER) -{ - if (!NativeByteOrderIs(order)) - value = ByteReverse(value); - - return std::string((char *)&value, sizeof(value)); -} - -/// \brief Convert a string to a word -/// \tparam T class or type -/// \param str the string to convert -/// \param order byte order -/// \return a word representing the value of the string -template -T StringToWord(const std::string &str, ByteOrder order = BIG_ENDIAN_ORDER) -{ - T value = 0; - memcpy_s(&value, sizeof(value), str.data(), UnsignedMin(str.size(), sizeof(value))); - return NativeByteOrderIs(order) ? value : ByteReverse(value); -} - -// ************** help remove warning on g++ *************** - -/// \brief Safely shift values when undefined behavior could occur -/// \tparam overflow boolean flag indicating if overflow is present -/// \details SafeShifter safely shifts values when undefined behavior could occur under C/C++ rules. -/// The class behaves much like a saturating arithmetic class, clamping values rather than allowing -/// the compiler to remove undefined behavior. -/// \sa SafeShifter, SafeShifter -template struct SafeShifter; - -/// \brief Shifts a value in the presence of overflow -/// \details the true template parameter indicates overflow would occur. -/// In this case, SafeShifter clamps the value and returns 0. -template<> struct SafeShifter -{ - /// \brief Right shifts a value that overflows - /// \tparam T class or type - /// \return 0 - /// \details Since overflow == true, the value 0 is always returned. - /// \sa SafeLeftShift - template - static inline T RightShift(T value, unsigned int bits) - { - CRYPTOPP_UNUSED(value); CRYPTOPP_UNUSED(bits); - return 0; - } - - /// \brief Left shifts a value that overflows - /// \tparam T class or type - /// \return 0 - /// \details Since overflow == true, the value 0 is always returned. - /// \sa SafeRightShift - template - static inline T LeftShift(T value, unsigned int bits) - { - CRYPTOPP_UNUSED(value); CRYPTOPP_UNUSED(bits); - return 0; - } -}; - -/// \brief Shifts a value in the absence of overflow -/// \details the false template parameter indicates overflow would not occur. -/// In this case, SafeShifter returns the shfted value. -template<> struct SafeShifter -{ - /// \brief Right shifts a value that does not overflow - /// \tparam T class or type - /// \return the shifted value - /// \details Since overflow == false, the shifted value is returned. - /// \sa SafeLeftShift - template - static inline T RightShift(T value, unsigned int bits) - { - return value >> bits; - } - - /// \brief Left shifts a value that does not overflow - /// \tparam T class or type - /// \return the shifted value - /// \details Since overflow == false, the shifted value is returned. - /// \sa SafeRightShift - template - static inline T LeftShift(T value, unsigned int bits) - { - return value << bits; - } -}; - -/// \brief Safely right shift values when undefined behavior could occur -/// \tparam bits the number of bit positions to shift the value -/// \tparam T class or type -/// \param value the value to right shift -/// \result the shifted value or 0 -/// \details SafeRightShift safely shifts the value to the right when undefined behavior -/// could occur under C/C++ rules. SafeRightShift will return the shifted value or 0 -/// if undefined behavior would occur. -template -inline T SafeRightShift(T value) -{ - return SafeShifter<(bits>=(8*sizeof(T)))>::RightShift(value, bits); -} - -/// \brief Safely left shift values when undefined behavior could occur -/// \tparam bits the number of bit positions to shift the value -/// \tparam T class or type -/// \param value the value to left shift -/// \result the shifted value or 0 -/// \details SafeLeftShift safely shifts the value to the left when undefined behavior -/// could occur under C/C++ rules. SafeLeftShift will return the shifted value or 0 -/// if undefined behavior would occur. -template -inline T SafeLeftShift(T value) -{ - return SafeShifter<(bits>=(8*sizeof(T)))>::LeftShift(value, bits); -} - -/// \brief Finds first element not in a range -/// \tparam InputIt Input iterator type -/// \tparam T class or type -/// \param first iterator to first element -/// \param last iterator to last element -/// \param value the value used as a predicate -/// \return iterator to the first element in the range that is not value -template -inline InputIt FindIfNot(InputIt first, InputIt last, const T &value) { -#ifdef CRYPTOPP_CXX11_LAMBDA - return std::find_if(first, last, [&value](const T &o) { - return value!=o; - }); -#else - return std::find_if(first, last, std::bind2nd(std::not_equal_to(), value)); -#endif -} - -// ************** use one buffer for multiple data members *************** - -#define CRYPTOPP_BLOCK_1(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+0);} size_t SS1() {return sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCK_2(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+SS1());} size_t SS2() {return SS1()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCK_3(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+SS2());} size_t SS3() {return SS2()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCK_4(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+SS3());} size_t SS4() {return SS3()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCK_5(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+SS4());} size_t SS5() {return SS4()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCK_6(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+SS5());} size_t SS6() {return SS5()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCK_7(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+SS6());} size_t SS7() {return SS6()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCK_8(n, t, s) t* m_##n() {return (t *)(void *)(m_aggregate+SS7());} size_t SS8() {return SS7()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);} -#define CRYPTOPP_BLOCKS_END(i) size_t SST() {return SS##i();} void AllocateBlocks() {m_aggregate.New(SST());} AlignedSecByteBlock m_aggregate; - -NAMESPACE_END - -#if (CRYPTOPP_MSC_VERSION) -# pragma warning(pop) -#endif - -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic pop -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/modarith.h b/third_party/cryptoppwin/include/cryptopp/modarith.h deleted file mode 100644 index 408f4caf..00000000 --- a/third_party/cryptoppwin/include/cryptopp/modarith.h +++ /dev/null @@ -1,344 +0,0 @@ -// modarith.h - originally written and placed in the public domain by Wei Dai - -/// \file modarith.h -/// \brief Class file for performing modular arithmetic. - -#ifndef CRYPTOPP_MODARITH_H -#define CRYPTOPP_MODARITH_H - -// implementations are in integer.cpp - -#include "cryptlib.h" -#include "integer.h" -#include "algebra.h" -#include "secblock.h" -#include "misc.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup; -CRYPTOPP_DLL_TEMPLATE_CLASS AbstractRing; -CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain; - -/// \brief Ring of congruence classes modulo n -/// \details This implementation represents each congruence class as -/// the smallest non-negative integer in that class. -/// \details const Element& returned by member functions are -/// references to internal data members. Since each object may have -/// only one such data member for holding results, you should use the -/// class like this: -///
    abcd = group.Add(a, group.Add(b, group.Add(c,d));
-/// The following code will produce incorrect results: -///
    abcd = group.Add(group.Add(a,b), group.Add(c,d));
-/// \details If a ModularArithmetic() is copied or assigned the modulus -/// is copied, but not the internal data members. The internal data -/// members are undefined after copy or assignment. -/// \sa Integer on the -/// Crypto++ wiki. -class CRYPTOPP_DLL ModularArithmetic : public AbstractRing -{ -public: - - typedef int RandomizationParameter; - typedef Integer Element; - - virtual ~ModularArithmetic() {} - - /// \brief Construct a ModularArithmetic - /// \param modulus congruence class modulus - ModularArithmetic(const Integer &modulus = Integer::One()) - : m_modulus(modulus), m_result(static_cast(0), modulus.reg.size()) {} - - /// \brief Copy construct a ModularArithmetic - /// \param ma other ModularArithmetic - ModularArithmetic(const ModularArithmetic &ma) - : AbstractRing(ma), m_modulus(ma.m_modulus), m_result(static_cast(0), m_modulus.reg.size()) {} - - /// \brief Assign a ModularArithmetic - /// \param ma other ModularArithmetic - ModularArithmetic& operator=(const ModularArithmetic &ma) { - if (this != &ma) - { - m_modulus = ma.m_modulus; - m_result = Integer(static_cast(0), m_modulus.reg.size()); - } - return *this; - } - - /// \brief Construct a ModularArithmetic - /// \param bt BER encoded ModularArithmetic - ModularArithmetic(BufferedTransformation &bt); // construct from BER encoded parameters - - /// \brief Clone a ModularArithmetic - /// \return pointer to a new ModularArithmetic - /// \details Clone effectively copy constructs a new ModularArithmetic. The caller is - /// responsible for deleting the pointer returned from this method. - virtual ModularArithmetic * Clone() const {return new ModularArithmetic(*this);} - - /// \brief Encodes in DER format - /// \param bt BufferedTransformation object - void DEREncode(BufferedTransformation &bt) const; - - /// \brief Encodes element in DER format - /// \param out BufferedTransformation object - /// \param a Element to encode - void DEREncodeElement(BufferedTransformation &out, const Element &a) const; - - /// \brief Decodes element in DER format - /// \param in BufferedTransformation object - /// \param a Element to decode - void BERDecodeElement(BufferedTransformation &in, Element &a) const; - - /// \brief Retrieves the modulus - /// \return the modulus - const Integer& GetModulus() const {return m_modulus;} - - /// \brief Sets the modulus - /// \param newModulus the new modulus - void SetModulus(const Integer &newModulus) - {m_modulus = newModulus; m_result.reg.resize(m_modulus.reg.size());} - - /// \brief Retrieves the representation - /// \return true if the if the modulus is in Montgomery form for multiplication, false otherwise - virtual bool IsMontgomeryRepresentation() const {return false;} - - /// \brief Reduces an element in the congruence class - /// \param a element to convert - /// \return the reduced element - /// \details ConvertIn is useful for derived classes, like MontgomeryRepresentation, which - /// must convert between representations. - virtual Integer ConvertIn(const Integer &a) const - {return a%m_modulus;} - - /// \brief Reduces an element in the congruence class - /// \param a element to convert - /// \return the reduced element - /// \details ConvertOut is useful for derived classes, like MontgomeryRepresentation, which - /// must convert between representations. - virtual Integer ConvertOut(const Integer &a) const - {return a;} - - /// \brief Divides an element by 2 - /// \param a element to convert - const Integer& Half(const Integer &a) const; - - /// \brief Compare two elements for equality - /// \param a first element - /// \param b second element - /// \return true if the elements are equal, false otherwise - /// \details Equal() tests the elements for equality using a==b - bool Equal(const Integer &a, const Integer &b) const - {return a==b;} - - /// \brief Provides the Identity element - /// \return the Identity element - const Integer& Identity() const - {return Integer::Zero();} - - /// \brief Adds elements in the ring - /// \param a first element - /// \param b second element - /// \return the sum of a and b - const Integer& Add(const Integer &a, const Integer &b) const; - - /// \brief TODO - /// \param a first element - /// \param b second element - /// \return TODO - Integer& Accumulate(Integer &a, const Integer &b) const; - - /// \brief Inverts the element in the ring - /// \param a first element - /// \return the inverse of the element - const Integer& Inverse(const Integer &a) const; - - /// \brief Subtracts elements in the ring - /// \param a first element - /// \param b second element - /// \return the difference of a and b. The element a must provide a Subtract member function. - const Integer& Subtract(const Integer &a, const Integer &b) const; - - /// \brief TODO - /// \param a first element - /// \param b second element - /// \return TODO - Integer& Reduce(Integer &a, const Integer &b) const; - - /// \brief Doubles an element in the ring - /// \param a the element - /// \return the element doubled - /// \details Double returns Add(a, a). The element a must provide an Add member function. - const Integer& Double(const Integer &a) const - {return Add(a, a);} - - /// \brief Retrieves the multiplicative identity - /// \return the multiplicative identity - /// \details the base class implementations returns 1. - const Integer& MultiplicativeIdentity() const - {return Integer::One();} - - /// \brief Multiplies elements in the ring - /// \param a the multiplicand - /// \param b the multiplier - /// \return the product of a and b - /// \details Multiply returns a*b\%n. - const Integer& Multiply(const Integer &a, const Integer &b) const - {return m_result1 = a*b%m_modulus;} - - /// \brief Square an element in the ring - /// \param a the element - /// \return the element squared - /// \details Square returns a*a\%n. The element a must provide a Square member function. - const Integer& Square(const Integer &a) const - {return m_result1 = a.Squared()%m_modulus;} - - /// \brief Determines whether an element is a unit in the ring - /// \param a the element - /// \return true if the element is a unit after reduction, false otherwise. - bool IsUnit(const Integer &a) const - {return Integer::Gcd(a, m_modulus).IsUnit();} - - /// \brief Calculate the multiplicative inverse of an element in the ring - /// \param a the element - /// \details MultiplicativeInverse returns a-1\%n. The element a must - /// provide a InverseMod member function. - const Integer& MultiplicativeInverse(const Integer &a) const - {return m_result1 = a.InverseMod(m_modulus);} - - /// \brief Divides elements in the ring - /// \param a the dividend - /// \param b the divisor - /// \return the quotient - /// \details Divide returns a*b-1\%n. - const Integer& Divide(const Integer &a, const Integer &b) const - {return Multiply(a, MultiplicativeInverse(b));} - - /// \brief TODO - /// \param x first element - /// \param e1 first exponent - /// \param y second element - /// \param e2 second exponent - /// \return TODO - Integer CascadeExponentiate(const Integer &x, const Integer &e1, const Integer &y, const Integer &e2) const; - - /// \brief Exponentiates a base to multiple exponents in the ring - /// \param results an array of Elements - /// \param base the base to raise to the exponents - /// \param exponents an array of exponents - /// \param exponentsCount the number of exponents in the array - /// \details SimultaneousExponentiate() raises the base to each exponent in the exponents array and stores the - /// result at the respective position in the results array. - /// \details SimultaneousExponentiate() must be implemented in a derived class. - /// \pre COUNTOF(results) == exponentsCount - /// \pre COUNTOF(exponents) == exponentsCount - void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const; - - /// \brief Provides the maximum bit size of an element in the ring - /// \return maximum bit size of an element - unsigned int MaxElementBitLength() const - {return (m_modulus-1).BitCount();} - - /// \brief Provides the maximum byte size of an element in the ring - /// \return maximum byte size of an element - unsigned int MaxElementByteLength() const - {return (m_modulus-1).ByteCount();} - - /// \brief Provides a random element in the ring - /// \param rng RandomNumberGenerator used to generate material - /// \param ignore_for_now unused - /// \return a random element that is uniformly distributed - /// \details RandomElement constructs a new element in the range [0,n-1], inclusive. - /// The element's class must provide a constructor with the signature Element(RandomNumberGenerator rng, - /// Element min, Element max). - Element RandomElement(RandomNumberGenerator &rng, const RandomizationParameter &ignore_for_now = 0) const - // left RandomizationParameter arg as ref in case RandomizationParameter becomes a more complicated struct - { - CRYPTOPP_UNUSED(ignore_for_now); - return Element(rng, Integer::Zero(), m_modulus - Integer::One()) ; - } - - /// \brief Compares two ModularArithmetic for equality - /// \param rhs other ModularArithmetic - /// \return true if this is equal to the other, false otherwise - /// \details The operator tests for equality using this.m_modulus == rhs.m_modulus. - bool operator==(const ModularArithmetic &rhs) const - {return m_modulus == rhs.m_modulus;} - - static const RandomizationParameter DefaultRandomizationParameter; - -private: - // TODO: Clang on OS X needs a real operator=. - // Squash warning on missing assignment operator. - // ModularArithmetic& operator=(const ModularArithmetic &ma); - -protected: - Integer m_modulus; - mutable Integer m_result, m_result1; -}; - -// const ModularArithmetic::RandomizationParameter ModularArithmetic::DefaultRandomizationParameter = 0 ; - -/// \brief Performs modular arithmetic in Montgomery representation for increased speed -/// \details The Montgomery representation represents each congruence class [a] as -/// a*r\%n, where r is a convenient power of 2. -/// \details const Element& returned by member functions are references to -/// internal data members. Since each object may have only one such data member for holding -/// results, the following code will produce incorrect results: -///
    abcd = group.Add(group.Add(a,b), group.Add(c,d));
-/// But this should be fine: -///
    abcd = group.Add(a, group.Add(b, group.Add(c,d));
-class CRYPTOPP_DLL MontgomeryRepresentation : public ModularArithmetic -{ -public: - virtual ~MontgomeryRepresentation() {} - - /// \brief Construct a MontgomeryRepresentation - /// \param modulus congruence class modulus - /// \note The modulus must be odd. - MontgomeryRepresentation(const Integer &modulus); - - /// \brief Clone a MontgomeryRepresentation - /// \return pointer to a new MontgomeryRepresentation - /// \details Clone effectively copy constructs a new MontgomeryRepresentation. The caller is - /// responsible for deleting the pointer returned from this method. - virtual ModularArithmetic * Clone() const {return new MontgomeryRepresentation(*this);} - - bool IsMontgomeryRepresentation() const {return true;} - - Integer ConvertIn(const Integer &a) const - {return (a<<(WORD_BITS*m_modulus.reg.size()))%m_modulus;} - - Integer ConvertOut(const Integer &a) const; - - const Integer& MultiplicativeIdentity() const - {return m_result1 = Integer::Power2(WORD_BITS*m_modulus.reg.size())%m_modulus;} - - const Integer& Multiply(const Integer &a, const Integer &b) const; - - const Integer& Square(const Integer &a) const; - - const Integer& MultiplicativeInverse(const Integer &a) const; - - Integer CascadeExponentiate(const Integer &x, const Integer &e1, const Integer &y, const Integer &e2) const - {return AbstractRing::CascadeExponentiate(x, e1, y, e2);} - - void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const - {AbstractRing::SimultaneousExponentiate(results, base, exponents, exponentsCount);} - -private: - Integer m_u; - mutable IntegerSecBlock m_workspace; -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/modes.h b/third_party/cryptoppwin/include/cryptopp/modes.h deleted file mode 100644 index 24126980..00000000 --- a/third_party/cryptoppwin/include/cryptopp/modes.h +++ /dev/null @@ -1,609 +0,0 @@ -// modes.h - originally written and placed in the public domain by Wei Dai - -/// \file modes.h -/// \brief Classes for block cipher modes of operation - -#ifndef CRYPTOPP_MODES_H -#define CRYPTOPP_MODES_H - -#include "cryptlib.h" -#include "secblock.h" -#include "misc.h" -#include "strciphr.h" -#include "argnames.h" -#include "algparam.h" - -// Issue 340 -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wconversion" -# pragma GCC diagnostic ignored "-Wsign-conversion" -#endif - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -# if (CRYPTOPP_MSC_VERSION >= 1400) -# pragma warning(disable: 6011 6386 28193) -# endif -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Block cipher mode of operation information -/// \details Each class derived from this one defines two types, Encryption and Decryption, -/// both of which implement the SymmetricCipher interface. -/// For each mode there are two classes, one of which is a template class, -/// and the other one has a name that ends in "_ExternalCipher". -/// The "external cipher" mode objects hold a reference to the underlying block cipher, -/// instead of holding an instance of it. The reference must be passed in to the constructor. -/// For the "cipher holder" classes, the CIPHER template parameter should be a class -/// derived from BlockCipherDocumentation, for example DES or AES. -/// \details See NIST SP 800-38A for definitions of these modes. See -/// AuthenticatedSymmetricCipherDocumentation for authenticated encryption modes. -struct CipherModeDocumentation : public SymmetricCipherDocumentation -{ -}; - -/// \brief Block cipher mode of operation information -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CipherModeBase : public SymmetricCipher -{ -public: - virtual ~CipherModeBase() {} - - // Algorithm class - std::string AlgorithmProvider() const { - return m_cipher != NULLPTR ? m_cipher->AlgorithmProvider() : "C++"; - } - - /// \brief Returns smallest valid key length - /// \return the minimum key length, in bytes - size_t MinKeyLength() const {return m_cipher->MinKeyLength();} - - /// \brief Returns largest valid key length - /// \return the maximum key length, in bytes - size_t MaxKeyLength() const {return m_cipher->MaxKeyLength();} - - /// \brief Returns default key length - /// \return the default key length, in bytes - size_t DefaultKeyLength() const {return m_cipher->DefaultKeyLength();} - - /// \brief Returns a valid key length for the algorithm - /// \param keylength the size of the key, in bytes - /// \return the valid key length, in bytes - /// \details keylength is provided in bytes, not bits. If keylength is less than MIN_KEYLENGTH, - /// then the function returns MIN_KEYLENGTH. If keylength is greater than MAX_KEYLENGTH, - /// then the function returns MAX_KEYLENGTH. if If keylength is a multiple of KEYLENGTH_MULTIPLE, - /// then keylength is returned. Otherwise, the function returns a \a lower multiple of - /// KEYLENGTH_MULTIPLE. - size_t GetValidKeyLength(size_t keylength) const {return m_cipher->GetValidKeyLength(keylength);} - - /// \brief Returns whether keylength is a valid key length - /// \param keylength the requested keylength - /// \return true if keylength is valid, false otherwise - /// \details Internally the function calls GetValidKeyLength() - bool IsValidKeyLength(size_t keylength) const {return m_cipher->IsValidKeyLength(keylength);} - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const {return m_cipher->OptimalDataAlignment();} - - /// \brief Returns length of the IV accepted by this object - /// \return the size of an IV, in bytes - /// \throw NotImplemented() if the object does not support resynchronization - /// \details The default implementation throws NotImplemented - unsigned int IVSize() const {return BlockSize();} - - /// \brief Minimal requirement for secure IVs - /// \return the secure IV requirement of the algorithm - virtual IV_Requirement IVRequirement() const =0; - - /// \brief Set external block cipher - /// \param cipher An external block cipher - /// \details The cipher should be keyed. - void SetCipher(BlockCipher &cipher) - { - this->ThrowIfResynchronizable(); - this->m_cipher = &cipher; - this->ResizeBuffers(); - } - - /// \brief Set external block cipher and IV - /// \param cipher An external block cipher - /// \param iv a byte array used to resynchronize the cipher - /// \param feedbackSize the feedback size, in bytes - /// \details The cipher should be keyed. - void SetCipherWithIV(BlockCipher &cipher, const byte *iv, int feedbackSize = 0) - { - this->ThrowIfInvalidIV(iv); - this->m_cipher = &cipher; - this->ResizeBuffers(); - this->SetFeedbackSize(feedbackSize); - if (this->IsResynchronizable()) - this->Resynchronize(iv); - } - -protected: - CipherModeBase() : m_cipher(NULLPTR) {} - inline unsigned int BlockSize() const - { - CRYPTOPP_ASSERT(m_register.size() > 0); - return static_cast(m_register.size()); - } - virtual void SetFeedbackSize(unsigned int feedbackSize) - { - if (!(feedbackSize == 0 || feedbackSize == BlockSize())) - throw InvalidArgument("CipherModeBase: feedback size cannot be specified for this cipher mode"); - } - - virtual void ResizeBuffers(); - - BlockCipher *m_cipher; - SecByteBlock m_register; -}; - -/// \brief Block cipher mode of operation common operations -/// \tparam POLICY_INTERFACE common operations -template -class CRYPTOPP_NO_VTABLE ModePolicyCommonTemplate : public CipherModeBase, public POLICY_INTERFACE -{ - unsigned int GetAlignment() const {return m_cipher->OptimalDataAlignment();} - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); -}; - -template -void ModePolicyCommonTemplate::CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) -{ - m_cipher->SetKey(key, length, params); - ResizeBuffers(); - int feedbackSize = params.GetIntValueWithDefault(Name::FeedbackSize(), 0); - SetFeedbackSize(feedbackSize); -} - -/// \brief CFB block cipher mode of operation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CFB_ModePolicy : public ModePolicyCommonTemplate -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "CFB";} - - virtual ~CFB_ModePolicy() {} - CFB_ModePolicy() : m_feedbackSize(0) {} - IV_Requirement IVRequirement() const {return RANDOM_IV;} - -protected: - unsigned int GetBytesPerIteration() const {return m_feedbackSize;} - bool CanIterate() const {return m_feedbackSize == BlockSize();} - void Iterate(byte *output, const byte *input, CipherDir dir, size_t iterationCount); - void TransformRegister(); - void CipherResynchronize(const byte *iv, size_t length); - void SetFeedbackSize(unsigned int feedbackSize); - void ResizeBuffers(); - byte * GetRegisterBegin(); - - SecByteBlock m_temp; - unsigned int m_feedbackSize; -}; - -/// \brief Initialize a block of memory -/// \param dest the destination block of memory -/// \param dsize the size of the destination block, in bytes -/// \param src the source block of memory -/// \param ssize the size of the source block, in bytes -/// \details CopyOrZero copies ssize bytes from source to destination if -/// src is not NULL. If src is NULL then dest is zero'd. Bounds are not -/// checked at runtime. Debug builds assert if ssize exceeds dsize. -inline void CopyOrZero(void *dest, size_t dsize, const void *src, size_t ssize) -{ - CRYPTOPP_ASSERT(dest); - CRYPTOPP_ASSERT(dsize >= ssize); - - if (src != NULLPTR) - memcpy_s(dest, dsize, src, ssize); - else - std::memset(dest, 0, dsize); -} - -/// \brief OFB block cipher mode of operation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE OFB_ModePolicy : public ModePolicyCommonTemplate -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "OFB";} - - bool CipherIsRandomAccess() const {return false;} - IV_Requirement IVRequirement() const {return UNIQUE_IV;} - -protected: - unsigned int GetBytesPerIteration() const {return BlockSize();} - unsigned int GetIterationsToBuffer() const {return m_cipher->OptimalNumberOfParallelBlocks();} - void WriteKeystream(byte *keystreamBuffer, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length); -}; - -/// \brief CTR block cipher mode of operation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CTR_ModePolicy : public ModePolicyCommonTemplate -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "CTR";} - - virtual ~CTR_ModePolicy() {} - bool CipherIsRandomAccess() const {return true;} - IV_Requirement IVRequirement() const {return RANDOM_IV;} - -protected: - virtual void IncrementCounterBy256(); - unsigned int GetAlignment() const {return m_cipher->OptimalDataAlignment();} - unsigned int GetBytesPerIteration() const {return BlockSize();} - unsigned int GetIterationsToBuffer() const {return m_cipher->OptimalNumberOfParallelBlocks();} - void WriteKeystream(byte *buffer, size_t iterationCount) - {OperateKeystream(WRITE_KEYSTREAM, buffer, NULLPTR, iterationCount);} - bool CanOperateKeystream() const {return true;} - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length); - void SeekToIteration(lword iterationCount); - - // adv_simd.h increments the counter - mutable SecByteBlock m_counterArray; -}; - -/// \brief Block cipher mode of operation default implementation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BlockOrientedCipherModeBase : public CipherModeBase -{ -public: - virtual ~BlockOrientedCipherModeBase() {} - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - unsigned int MandatoryBlockSize() const {return BlockSize();} - bool IsRandomAccess() const {return false;} - bool IsSelfInverting() const {return false;} - bool IsForwardTransformation() const - {return m_cipher->IsForwardTransformation();} - void Resynchronize(const byte *iv, int length=-1) - {memcpy_s(m_register, m_register.size(), iv, ThrowIfInvalidIVLength(length));} - -protected: - bool RequireAlignedInput() const {return true;} - virtual void ResizeBuffers(); - - SecByteBlock m_buffer; -}; - -/// \brief ECB block cipher mode of operation default implementation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE ECB_OneWay : public BlockOrientedCipherModeBase -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECB";} - - void SetKey(const byte *key, size_t length, const NameValuePairs ¶ms = g_nullNameValuePairs) - {m_cipher->SetKey(key, length, params); BlockOrientedCipherModeBase::ResizeBuffers();} - IV_Requirement IVRequirement() const {return NOT_RESYNCHRONIZABLE;} - unsigned int OptimalBlockSize() const {return static_cast(BlockSize() * m_cipher->OptimalNumberOfParallelBlocks());} - void ProcessData(byte *outString, const byte *inString, size_t length); -}; - -/// \brief CBC block cipher mode of operation default implementation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CBC_ModeBase : public BlockOrientedCipherModeBase -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "CBC";} - - IV_Requirement IVRequirement() const {return UNPREDICTABLE_RANDOM_IV;} - bool RequireAlignedInput() const {return false;} - unsigned int MinLastBlockSize() const {return 0;} -}; - -/// \brief CBC block cipher mode of operation encryption operation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CBC_Encryption : public CBC_ModeBase -{ -public: - void ProcessData(byte *outString, const byte *inString, size_t length); -}; - -/// \brief CBC-CTS block cipher mode of operation encryption operation -/// \since Crypto++ 3.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CBC_CTS_Encryption : public CBC_Encryption -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "CBC/CTS";} - - void SetStolenIV(byte *iv) {m_stolenIV = iv;} - unsigned int MinLastBlockSize() const {return BlockSize()+1;} - size_t ProcessLastBlock(byte *outString, size_t outLength, const byte *inString, size_t inLength); - -protected: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) - { - CBC_Encryption::UncheckedSetKey(key, length, params); - m_stolenIV = params.GetValueWithDefault(Name::StolenIV(), static_cast(NULLPTR)); - } - - byte *m_stolenIV; -}; - -/// \brief CBC block cipher mode of operation decryption operation -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CBC_Decryption : public CBC_ModeBase -{ -public: - virtual ~CBC_Decryption() {} - void ProcessData(byte *outString, const byte *inString, size_t length); - -protected: - virtual void ResizeBuffers(); - - SecByteBlock m_temp; -}; - -/// \brief CBC-CTS block cipher mode of operation decryption operation -/// \since Crypto++ 3.0 -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CBC_CTS_Decryption : public CBC_Decryption -{ -public: - unsigned int MinLastBlockSize() const {return BlockSize()+1;} - size_t ProcessLastBlock(byte *outString, size_t outLength, const byte *inString, size_t inLength); -}; - -/// \brief Block cipher mode of operation aggregate -template -class CipherModeFinalTemplate_CipherHolder : protected ObjectHolder, public AlgorithmImpl > -{ -public: - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like \a AES or \a AES/GCM. Some algorithms - /// do not have standard names yet. For example, there is no standard algorithm name for - /// Shoup's ECIES. - static std::string CRYPTOPP_API StaticAlgorithmName() - {return CIPHER::StaticAlgorithmName() + "/" + BASE::StaticAlgorithmName();} - - /// \brief Construct a CipherModeFinalTemplate - CipherModeFinalTemplate_CipherHolder() - { - this->m_cipher = &this->m_object; - this->ResizeBuffers(); - } - - /// \brief Construct a CipherModeFinalTemplate - /// \param key a byte array used to key the cipher - /// \param length size of the key in bytes - /// \details key must be at least DEFAULT_KEYLENGTH in length. Internally, the function calls - /// SimpleKeyingInterface::SetKey. - CipherModeFinalTemplate_CipherHolder(const byte *key, size_t length) - { - this->m_cipher = &this->m_object; - this->SetKey(key, length); - } - - /// \brief Construct a CipherModeFinalTemplate - /// \param key a byte array used to key the cipher - /// \param length size of the key in bytes - /// \param iv a byte array used to resynchronize the cipher - /// \details key must be at least DEFAULT_KEYLENGTH in length. iv must be IVSize() or - /// BLOCKSIZE in length. Internally, the function calls SimpleKeyingInterface::SetKey. - CipherModeFinalTemplate_CipherHolder(const byte *key, size_t length, const byte *iv) - { - this->m_cipher = &this->m_object; - this->SetKey(key, length, MakeParameters(Name::IV(), ConstByteArrayParameter(iv, this->m_cipher->BlockSize()))); - } - - /// \brief Construct a CipherModeFinalTemplate - /// \param key a byte array used to key the cipher - /// \param length size of the key in bytes - /// \param iv a byte array used to resynchronize the cipher - /// \param feedbackSize the feedback size, in bytes - /// \details key must be at least DEFAULT_KEYLENGTH in length. iv must be IVSize() or - /// BLOCKSIZE in length. Internally, the function calls SimpleKeyingInterface::SetKey. - CipherModeFinalTemplate_CipherHolder(const byte *key, size_t length, const byte *iv, int feedbackSize) - { - this->m_cipher = &this->m_object; - this->SetKey(key, length, MakeParameters(Name::IV(), ConstByteArrayParameter(iv, this->m_cipher->BlockSize()))(Name::FeedbackSize(), feedbackSize)); - } - - // Algorithm class - std::string AlgorithmProvider() const { - return this->m_cipher->AlgorithmProvider(); - } -}; - -/// \tparam BASE CipherModeFinalTemplate_CipherHolder base class -/// \details Base class for external mode cipher combinations -template -class CipherModeFinalTemplate_ExternalCipher : public BASE -{ -public: - /// \brief Construct a default CipherModeFinalTemplate - /// \details The cipher is not keyed. - CipherModeFinalTemplate_ExternalCipher() {} - - /// \brief Construct a CipherModeFinalTemplate - /// \param cipher An external block cipher - /// \details The cipher should be keyed. - CipherModeFinalTemplate_ExternalCipher(BlockCipher &cipher) - {this->SetCipher(cipher);} - - /// \brief Construct a CipherModeFinalTemplate - /// \param cipher An external block cipher - /// \param iv a byte array used to resynchronize the cipher - /// \param feedbackSize the feedback size, in bytes - /// \details The cipher should be keyed. - CipherModeFinalTemplate_ExternalCipher(BlockCipher &cipher, const byte *iv, int feedbackSize = 0) - {this->SetCipherWithIV(cipher, iv, feedbackSize);} - - /// \brief Provides the name of this algorithm - /// \return the standard algorithm name - /// \details The standard algorithm name can be a name like \a AES or \a AES/GCM. Some algorithms - /// do not have standard names yet. For example, there is no standard algorithm name for - /// Shoup's ECIES. - /// \note AlgorithmName is not universally implemented yet - std::string AlgorithmName() const - {return (this->m_cipher ? this->m_cipher->AlgorithmName() + "/" : std::string("")) + BASE::StaticAlgorithmName();} - - // Algorithm class - std::string AlgorithmProvider() const - {return this->m_cipher->AlgorithmProvider();} -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS CFB_CipherTemplate >; -CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate >; -CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate >; - -/// \brief CFB block cipher mode of operation -/// \sa Modes of Operation -/// on the Crypto++ wiki. -template -struct CFB_Mode : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder > > > Encryption; - typedef CipherModeFinalTemplate_CipherHolder > > > Decryption; -}; - -/// \brief CFB mode, external cipher. -/// \sa Modes of Operation -/// on the Crypto++ wiki. -struct CFB_Mode_ExternalCipher : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_ExternalCipher > > > Encryption; - typedef CipherModeFinalTemplate_ExternalCipher > > > Decryption; -}; - -/// \brief CFB block cipher mode of operation providing FIPS validated cryptography. -/// \details Requires full block plaintext according to FIPS 800-38A -/// \sa Modes of Operation -/// on the Crypto++ wiki. -template -struct CFB_FIPS_Mode : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder > > > > Encryption; - typedef CipherModeFinalTemplate_CipherHolder > > > > Decryption; -}; - -/// \brief CFB mode, external cipher, providing FIPS validated cryptography. -/// \details Requires full block plaintext according to FIPS 800-38A -/// \sa Modes of Operation -/// on the Crypto++ wiki. -struct CFB_FIPS_Mode_ExternalCipher : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_ExternalCipher > > > > Encryption; - typedef CipherModeFinalTemplate_ExternalCipher > > > > Decryption; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate >; - -/// \brief OFB block cipher mode of operation -/// \sa Modes of Operation -/// on the Crypto++ wiki. -template -struct OFB_Mode : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder > > > Encryption; - typedef Encryption Decryption; -}; - -/// \brief OFB mode, external cipher. -/// \sa Modes of Operation -/// on the Crypto++ wiki. -struct OFB_Mode_ExternalCipher : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_ExternalCipher > > > Encryption; - typedef Encryption Decryption; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate >; -CRYPTOPP_DLL_TEMPLATE_CLASS CipherModeFinalTemplate_ExternalCipher > > >; - -/// \brief CTR block cipher mode of operation -/// \sa Modes of Operation -/// on the Crypto++ wiki. -template -struct CTR_Mode : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder > > > Encryption; - typedef Encryption Decryption; -}; - -/// \brief CTR mode, external cipher. -/// \sa Modes of Operation -/// on the Crypto++ wiki. -struct CTR_Mode_ExternalCipher : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_ExternalCipher > > > Encryption; - typedef Encryption Decryption; -}; - -/// \brief ECB block cipher mode of operation -/// \sa Modes of Operation -/// on the Crypto++ wiki. -template -struct ECB_Mode : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder Encryption; - typedef CipherModeFinalTemplate_CipherHolder Decryption; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS CipherModeFinalTemplate_ExternalCipher; - -/// \brief ECB mode, external cipher. -/// \sa Modes of Operation -/// on the Crypto++ wiki. -struct ECB_Mode_ExternalCipher : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_ExternalCipher Encryption; - typedef Encryption Decryption; -}; - -/// \brief CBC block cipher mode of operation -/// \sa Modes of Operation -/// on the Crypto++ wiki. -template -struct CBC_Mode : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder Encryption; - typedef CipherModeFinalTemplate_CipherHolder Decryption; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS CipherModeFinalTemplate_ExternalCipher; -CRYPTOPP_DLL_TEMPLATE_CLASS CipherModeFinalTemplate_ExternalCipher; - -/// \brief CBC mode, external cipher -/// \sa Modes of Operation -/// on the Crypto++ wiki. -struct CBC_Mode_ExternalCipher : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_ExternalCipher Encryption; - typedef CipherModeFinalTemplate_ExternalCipher Decryption; -}; - -/// \brief CBC-CTS block cipher mode of operation -/// \sa Modes of Operation -/// on the Crypto++ wiki. -/// \since Crypto++ 3.0 -template -struct CBC_CTS_Mode : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder Encryption; - typedef CipherModeFinalTemplate_CipherHolder Decryption; -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS CipherModeFinalTemplate_ExternalCipher; -CRYPTOPP_DLL_TEMPLATE_CLASS CipherModeFinalTemplate_ExternalCipher; - -/// \brief CBC mode with ciphertext stealing, external cipher -/// \sa Modes of Operation -/// on the Crypto++ wiki. -/// \since Crypto++ 3.0 -struct CBC_CTS_Mode_ExternalCipher : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_ExternalCipher Encryption; - typedef CipherModeFinalTemplate_ExternalCipher Decryption; -}; - -NAMESPACE_END - -// Issue 340 -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic pop -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/modexppc.h b/third_party/cryptoppwin/include/cryptopp/modexppc.h deleted file mode 100644 index cacb0aa6..00000000 --- a/third_party/cryptoppwin/include/cryptopp/modexppc.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef CRYPTOPP_MODEXPPC_H -#define CRYPTOPP_MODEXPPC_H - -#include "cryptlib.h" -#include "modarith.h" -#include "integer.h" -#include "algebra.h" -#include "eprecomp.h" -#include "smartptr.h" -#include "pubkey.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4231 4275) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl; - -class ModExpPrecomputation : public DL_GroupPrecomputation -{ -public: - virtual ~ModExpPrecomputation() {} - - // DL_GroupPrecomputation - bool NeedConversions() const {return true;} - Element ConvertIn(const Element &v) const {return m_mr->ConvertIn(v);} - virtual Element ConvertOut(const Element &v) const {return m_mr->ConvertOut(v);} - const AbstractGroup & GetGroup() const {return m_mr->MultiplicativeGroup();} - Element BERDecodeElement(BufferedTransformation &bt) const {return Integer(bt);} - void DEREncodeElement(BufferedTransformation &bt, const Element &v) const {v.DEREncode(bt);} - - // non-inherited - void SetModulus(const Integer &v) {m_mr.reset(new MontgomeryRepresentation(v));} - const Integer & GetModulus() const {return m_mr->GetModulus();} - -private: - value_ptr m_mr; -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/mqueue.h b/third_party/cryptoppwin/include/cryptopp/mqueue.h deleted file mode 100644 index 632ae295..00000000 --- a/third_party/cryptoppwin/include/cryptopp/mqueue.h +++ /dev/null @@ -1,145 +0,0 @@ -// mqueue.h - originally written and placed in the public domain by Wei Dai - -/// \file -/// \brief Classes for an unlimited queue to store messages - -#ifndef CRYPTOPP_MQUEUE_H -#define CRYPTOPP_MQUEUE_H - -#include "cryptlib.h" -#include "queue.h" -#include "filters.h" -#include "misc.h" - -#include - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Data structure used to store messages -/// \details The queue is implemented with a ByteQueue. -/// \sa MessageQueue -/// on the Crypto++ wiki. -/// \since Crypto++ 2.0 -class CRYPTOPP_DLL MessageQueue : public AutoSignaling -{ -public: - virtual ~MessageQueue() {} - - /// \brief Construct a MessageQueue - /// \param nodeSize the initial node size - MessageQueue(unsigned int nodeSize=256); - - // BufferedTransformation - void IsolatedInitialize(const NameValuePairs ¶meters) - {m_queue.IsolatedInitialize(parameters); m_lengths.assign(1, 0U); m_messageCounts.assign(1, 0U);} - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking) - { - CRYPTOPP_UNUSED(blocking); - m_queue.Put(begin, length); - m_lengths.back() += length; - if (messageEnd) - { - m_lengths.push_back(0); - m_messageCounts.back()++; - } - return 0; - } - bool IsolatedFlush(bool hardFlush, bool blocking) - {CRYPTOPP_UNUSED(hardFlush), CRYPTOPP_UNUSED(blocking); return false;} - bool IsolatedMessageSeriesEnd(bool blocking) - {CRYPTOPP_UNUSED(blocking); m_messageCounts.push_back(0); return false;} - - lword MaxRetrievable() const - {return m_lengths.front();} - bool AnyRetrievable() const - {return m_lengths.front() > 0;} - - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - - lword TotalBytesRetrievable() const - {return m_queue.MaxRetrievable();} - unsigned int NumberOfMessages() const - {return (unsigned int)m_lengths.size()-1;} - bool GetNextMessage(); - - unsigned int NumberOfMessagesInThisSeries() const - {return m_messageCounts[0];} - unsigned int NumberOfMessageSeries() const - {return (unsigned int)m_messageCounts.size()-1;} - - /// \brief Copy messages from this object to another BufferedTransformation. - /// \param target the destination BufferedTransformation - /// \param count the number of messages to copy - /// \param channel the channel on which the transfer should occur - /// \return the number of messages that remain in the copy (i.e., messages not copied) - unsigned int CopyMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) const; - - /// \brief Peek data in the queue - /// \param contiguousSize the size of the data - /// \details Spy() peeks at data at the head of the queue. Spy() does - /// not remove data from the queue. - /// \details The data's size is returned in contiguousSize. - /// Spy() returns the size of the first message in the list. - const byte * Spy(size_t &contiguousSize) const; - - /// \brief Swap contents with another MessageQueue - /// \param rhs the other MessageQueue - void swap(MessageQueue &rhs); - -private: - ByteQueue m_queue; - std::deque m_lengths; - std::deque m_messageCounts; -}; - -/// \brief Filter that checks messages on two channels for equality -class CRYPTOPP_DLL EqualityComparisonFilter : public Unflushable > -{ -public: - /// \brief Different messages were detected - struct MismatchDetected : public Exception - { - /// \brief Construct a MismatchDetected exception - MismatchDetected() : Exception(DATA_INTEGRITY_CHECK_FAILED, "EqualityComparisonFilter: did not receive the same data on two channels") {} - }; - - /// \brief Construct an EqualityComparisonFilter - /// \param attachment an attached transformation - /// \param throwIfNotEqual flag indicating whether the objects throws - /// \param firstChannel string naming the first channel - /// \param secondChannel string naming the second channel - /// \throw MismatchDetected if throwIfNotEqual is true and not equal - /// \details If throwIfNotEqual is false, this filter will output a '\\0' - /// byte when it detects a mismatch, '\\1' otherwise. - EqualityComparisonFilter(BufferedTransformation *attachment=NULLPTR, bool throwIfNotEqual=true, const std::string &firstChannel="0", const std::string &secondChannel="1") - : m_throwIfNotEqual(throwIfNotEqual), m_mismatchDetected(false) - , m_firstChannel(firstChannel), m_secondChannel(secondChannel) - {Detach(attachment);} - - // BufferedTransformation - size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking); - bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true); - -protected: - unsigned int MapChannel(const std::string &channel) const; - bool HandleMismatchDetected(bool blocking); - -private: - bool m_throwIfNotEqual, m_mismatchDetected; - std::string m_firstChannel, m_secondChannel; - MessageQueue m_q[2]; -}; - -NAMESPACE_END - -#ifndef __BORLANDC__ -NAMESPACE_BEGIN(std) -template<> inline void swap(CryptoPP::MessageQueue &a, CryptoPP::MessageQueue &b) -{ - a.swap(b); -} -NAMESPACE_END -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/mqv.h b/third_party/cryptoppwin/include/cryptopp/mqv.h deleted file mode 100644 index 8e25b9cf..00000000 --- a/third_party/cryptoppwin/include/cryptopp/mqv.h +++ /dev/null @@ -1,268 +0,0 @@ -// mqv.h - originally written and placed in the public domain by Wei Dai - -/// \file mqv.h -/// \brief Classes for Menezes–Qu–Vanstone (MQV) key agreement -/// \since Crypto++ 3.0 - -#ifndef CRYPTOPP_MQV_H -#define CRYPTOPP_MQV_H - -#include "cryptlib.h" -#include "gfpcrypt.h" -#include "modarith.h" -#include "integer.h" -#include "algebra.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief MQV domain for performing authenticated key agreement -/// \tparam GROUP_PARAMETERS doamin parameters -/// \tparam COFACTOR_OPTION cofactor option -/// \details GROUP_PARAMETERS parameters include the curve coefcients and the base point. -/// Binary curves use a polynomial to represent its characteristic, while prime curves -/// use a prime number. -/// \sa MQV, HMQV, FHMQV, and AuthenticatedKeyAgreementDomain -/// \since Crypto++ 3.0 -template -class MQV_Domain : public AuthenticatedKeyAgreementDomain -{ -public: - typedef GROUP_PARAMETERS GroupParameters; - typedef typename GroupParameters::Element Element; - typedef MQV_Domain Domain; - - /// \brief Construct a MQV domain - MQV_Domain() {} - - /// \brief Construct a MQV domain - /// \param params group parameters and options - MQV_Domain(const GroupParameters ¶ms) - : m_groupParameters(params) {} - - /// \brief Construct a MQV domain - /// \param bt BufferedTransformation with group parameters and options - MQV_Domain(BufferedTransformation &bt) - {m_groupParameters.BERDecode(bt);} - - /// \brief Construct a MQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \details v1 and v2 are passed directly to the GROUP_PARAMETERS object. - template - MQV_Domain(T1 v1, T2 v2) - {m_groupParameters.Initialize(v1, v2);} - - /// \brief Construct a MQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \details v1, v2 and v3 are passed directly to the GROUP_PARAMETERS object. - template - MQV_Domain(T1 v1, T2 v2, T3 v3) - {m_groupParameters.Initialize(v1, v2, v3);} - - /// \brief Construct a MQV domain - /// \tparam T1 template parameter used as a constructor parameter - /// \tparam T2 template parameter used as a constructor parameter - /// \tparam T3 template parameter used as a constructor parameter - /// \tparam T4 template parameter used as a constructor parameter - /// \param v1 first parameter - /// \param v2 second parameter - /// \param v3 third parameter - /// \param v4 third parameter - /// \details v1, v2, v3 and v4 are passed directly to the GROUP_PARAMETERS object. - template - MQV_Domain(T1 v1, T2 v2, T3 v3, T4 v4) - {m_groupParameters.Initialize(v1, v2, v3, v4);} - - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a const reference - const GroupParameters & GetGroupParameters() const {return m_groupParameters;} - - /// \brief Retrieves the group parameters for this domain - /// \return the group parameters for this domain as a non-const reference - GroupParameters & AccessGroupParameters() {return m_groupParameters;} - - /// \brief Retrieves the crypto parameters for this domain - /// \return the crypto parameters for this domain as a non-const reference - CryptoParameters & AccessCryptoParameters() {return AccessAbstractGroupParameters();} - - /// \brief Provides the size of the agreed value - /// \return size of agreed value produced in this domain - /// \details The length is calculated using GetEncodedElementSize(false), - /// which means the element is encoded in a non-reversible format. A - /// non-reversible format means its a raw byte array, and it lacks presentation - /// format like an ASN.1 BIT_STRING or OCTET_STRING. - unsigned int AgreedValueLength() const {return GetAbstractGroupParameters().GetEncodedElementSize(false);} - - /// \brief Provides the size of the static private key - /// \return size of static private keys in this domain - /// \details The length is calculated using the byte count of the subgroup order. - unsigned int StaticPrivateKeyLength() const {return GetAbstractGroupParameters().GetSubgroupOrder().ByteCount();} - - /// \brief Provides the size of the static public key - /// \return size of static public keys in this domain - /// \details The length is calculated using GetEncodedElementSize(true), - /// which means the element is encoded in a reversible format. A reversible - /// format means it has a presentation format, and its an ANS.1 encoded element - /// or point. - unsigned int StaticPublicKeyLength() const {return GetAbstractGroupParameters().GetEncodedElementSize(true);} - - /// \brief Generate static private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \details The private key is a random scalar used as an exponent in the range - /// [1,MaxExponent()]. - /// \pre COUNTOF(privateKey) == PrivateStaticKeyLength() - void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - { - Integer x(rng, Integer::One(), GetAbstractGroupParameters().GetMaxExponent()); - x.Encode(privateKey, StaticPrivateKeyLength()); - } - - /// \brief Generate a static public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \details The public key is an element or point on the curve, and its stored - /// in a revrsible format. A reversible format means it has a presentation - /// format, and its an ANS.1 encoded element or point. - /// \pre COUNTOF(publicKey) == PublicStaticKeyLength() - void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - CRYPTOPP_UNUSED(rng); - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(privateKey, StaticPrivateKeyLength()); - Element y = params.ExponentiateBase(x); - params.EncodeElement(true, y, publicKey); - } - - /// \brief Provides the size of the ephemeral private key - /// \return size of ephemeral private keys in this domain - /// \details An ephemeral private key is a private key and public key. - /// The serialized size is different than a static private key. - unsigned int EphemeralPrivateKeyLength() const {return StaticPrivateKeyLength() + StaticPublicKeyLength();} - - /// \brief Provides the size of the ephemeral public key - /// \return size of ephemeral public keys in this domain - /// \details An ephemeral public key is a public key. - /// The serialized size is the same as a static public key. - unsigned int EphemeralPublicKeyLength() const {return StaticPublicKeyLength();} - - /// \brief Generate ephemeral private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer for the generated private key in this domain - /// \pre COUNTOF(privateKey) == EphemeralPrivateKeyLength() - void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - { - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(rng, Integer::One(), params.GetMaxExponent()); - x.Encode(privateKey, StaticPrivateKeyLength()); - Element y = params.ExponentiateBase(x); - params.EncodeElement(true, y, privateKey+StaticPrivateKeyLength()); - } - - /// \brief Generate ephemeral public key from a private key in this domain - /// \param rng a RandomNumberGenerator derived class - /// \param privateKey a byte buffer with the previously generated private key - /// \param publicKey a byte buffer for the generated public key in this domain - /// \pre COUNTOF(publicKey) == EphemeralPublicKeyLength() - void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - CRYPTOPP_UNUSED(rng); - std::memcpy(publicKey, privateKey+StaticPrivateKeyLength(), EphemeralPublicKeyLength()); - } - - /// \brief Derive agreed value or shared secret - /// \param agreedValue the shared secret - /// \param staticPrivateKey your long term private key - /// \param ephemeralPrivateKey your ephemeral private key - /// \param staticOtherPublicKey couterparty's long term public key - /// \param ephemeralOtherPublicKey couterparty's ephemeral public key - /// \param validateStaticOtherPublicKey flag indicating validation - /// \return true upon success, false in case of failure - /// \details Agree() performs the authenticated key agreement. Agree() - /// derives a shared secret from your private keys and couterparty's - /// public keys. Each instance or run of the protocol should use a new - /// ephemeral key pair. - /// \details The other's ephemeral public key will always be validated at - /// Level 1 to ensure it is a point on the curve. - /// validateStaticOtherPublicKey determines how thoroughly other's - /// static public key is validated. If you have previously validated the - /// couterparty's static public key, then use - /// validateStaticOtherPublicKey=false to save time. - /// \pre COUNTOF(agreedValue) == AgreedValueLength() - /// \pre COUNTOF(staticPrivateKey) == StaticPrivateKeyLength() - /// \pre COUNTOF(ephemeralPrivateKey) == EphemeralPrivateKeyLength() - /// \pre COUNTOF(staticOtherPublicKey) == StaticPublicKeyLength() - /// \pre COUNTOF(ephemeralOtherPublicKey) == EphemeralPublicKeyLength() - bool Agree(byte *agreedValue, - const byte *staticPrivateKey, const byte *ephemeralPrivateKey, - const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, - bool validateStaticOtherPublicKey=true) const - { - try - { - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Element WW = params.DecodeElement(staticOtherPublicKey, validateStaticOtherPublicKey); - Element VV = params.DecodeElement(ephemeralOtherPublicKey, true); - - Integer s(staticPrivateKey, StaticPrivateKeyLength()); - Integer u(ephemeralPrivateKey, StaticPrivateKeyLength()); - Element V = params.DecodeElement(ephemeralPrivateKey+StaticPrivateKeyLength(), false); - - const Integer &r = params.GetSubgroupOrder(); - Integer h2 = Integer::Power2((r.BitCount()+1)/2); - Integer e = ((h2+params.ConvertElementToInteger(V)%h2)*s+u) % r; - Integer tt = h2 + params.ConvertElementToInteger(VV) % h2; - - if (COFACTOR_OPTION::ToEnum() == NO_COFACTOR_MULTIPLICTION) - { - Element P = params.ExponentiateElement(WW, tt); - P = m_groupParameters.MultiplyElements(P, VV); - Element R[2]; - const Integer e2[2] = {r, e}; - params.SimultaneousExponentiate(R, P, e2, 2); - if (!params.IsIdentity(R[0]) || params.IsIdentity(R[1])) - return false; - params.EncodeElement(false, R[1], agreedValue); - } - else - { - const Integer &k = params.GetCofactor(); - if (COFACTOR_OPTION::ToEnum() == COMPATIBLE_COFACTOR_MULTIPLICTION) - e = ModularArithmetic(r).Divide(e, k); - Element P = m_groupParameters.CascadeExponentiate(VV, k*e, WW, k*(e*tt%r)); - if (params.IsIdentity(P)) - return false; - params.EncodeElement(false, P, agreedValue); - } - } - catch (DL_BadElement &) - { - return false; - } - return true; - } - -private: - DL_GroupParameters & AccessAbstractGroupParameters() {return m_groupParameters;} - const DL_GroupParameters & GetAbstractGroupParameters() const {return m_groupParameters;} - - GroupParameters m_groupParameters; -}; - -/// Menezes-Qu-Vanstone in GF(p) with key validation, AKA MQV -/// \sa MQV, HMQV_Domain, FHMQV_Domain, AuthenticatedKeyAgreementDomain -/// \since Crypto++ 3.0 -typedef MQV_Domain MQV; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/naclite.h b/third_party/cryptoppwin/include/cryptopp/naclite.h deleted file mode 100644 index efb542cd..00000000 --- a/third_party/cryptoppwin/include/cryptopp/naclite.h +++ /dev/null @@ -1,438 +0,0 @@ -// naclite.h - written and placed in the public domain by Jeffrey Walton -// based on public domain NaCl source code written by -// Daniel J. Bernstein, Bernard van Gastel, Wesley Janssen, -// Tanja Lange, Peter Schwabe and Sjaak Smetsers. - -// The Tweet API was added to the Crypto++ library to cross-validate results. -// We debated over putting it in the Test namespace, but settled for the NaCl -// namespace to segregate it from other parts of the library. - -/// \file naclite.h -/// \brief Crypto++ interface to TweetNaCl library (20140917) -/// \details TweetNaCl is a compact reimplementation of the NaCl library -/// by Daniel J. Bernstein, Bernard van Gastel, Wesley Janssen, Tanja -/// Lange, Peter Schwabe and Sjaak Smetsers. The library is less than -/// 20 KB in size and provides 25 of the NaCl library functions. -/// \details The compact library uses curve25519, XSalsa20, Poly1305 and -/// SHA-512 as default primitives, and includes both x25519 key exchange -/// and ed25519 signatures. The complete list of functions can be found -/// in TweetNaCl: -/// A crypto library in 100 tweets (20140917), Table 1, page 5. -/// \details Crypto++ rejects small order elements using libsodium's -/// blacklist. The TweetNaCl library allowed them but the library predated -/// the attack. If you wish to allow small elements then use the "unchecked" -/// versions of crypto_box_unchecked, crypto_box_open_unchecked and -/// crypto_box_beforenm_unchecked. -/// \details TweetNaCl is well written but not well optimzed. It runs about -/// 10x slower than optimized routines from libsodium. However, the library -/// is still 2x to 4x faster than the algorithms NaCl was designed to replace -/// and allows cross-checking results from an independent implementation. -/// \details The Crypto++ wrapper for TweetNaCl requires OS features. That is, -/// NO_OS_DEPENDENCE cannot be defined. It is due to TweetNaCl's -/// internal function randombytes. Crypto++ used -/// DefaultAutoSeededRNG within randombytes, so OS -/// integration must be enabled. You can use another generator like -/// RDRAND to avoid the restriction. -/// \sa The security -/// impact of a new cryptographic library, TweetNaCl: -/// A crypto library in 100 tweets (20140917), May the Fourth Be With You: -/// A Microarchitectural Side Channel Attack on Several Real-World -/// Applications of Curve25519, libsodium -/// commit afabd7e7386e1194 and RFC 7748, Elliptic Curves for -/// Security, Section 6. -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_NACL_H -#define CRYPTOPP_NACL_H - -#include "config.h" -#include "stdcpp.h" - -#if defined(NO_OS_DEPENDENCE) || !defined(OS_RNG_AVAILABLE) -# define CRYPTOPP_DISABLE_NACL 1 -#endif - -#ifndef CRYPTOPP_DISABLE_NACL - -NAMESPACE_BEGIN(CryptoPP) -NAMESPACE_BEGIN(NaCl) - -/// \brief Hash size in bytes -/// \sa NaCl crypto_hash documentation -CRYPTOPP_CONSTANT(crypto_hash_BYTES = 64); - -/// \brief Key size in bytes -/// \sa NaCl crypto_stream documentation -CRYPTOPP_CONSTANT(crypto_stream_KEYBYTES = 32); -/// \brief Nonce size in bytes -/// \sa NaCl crypto_stream documentation -CRYPTOPP_CONSTANT(crypto_stream_NONCEBYTES = 24); - -/// \brief Key size in bytes -/// \sa NaCl crypto_auth documentation -CRYPTOPP_CONSTANT(crypto_auth_KEYBYTES = 32); -/// \brief Tag size in bytes -/// \sa NaCl crypto_auth documentation -CRYPTOPP_CONSTANT(crypto_auth_BYTES = 16); - -/// \brief Key size in bytes -/// \sa NaCl crypto_onetimeauth documentation -CRYPTOPP_CONSTANT(crypto_onetimeauth_KEYBYTES = 32); -/// \brief Tag size in bytes -/// \sa NaCl crypto_onetimeauth documentation -CRYPTOPP_CONSTANT(crypto_onetimeauth_BYTES = 16); - -/// \brief Key size in bytes -/// \sa NaCl crypto_secretbox documentation -CRYPTOPP_CONSTANT(crypto_secretbox_KEYBYTES = 32); -/// \brief Nonce size in bytes -/// \sa NaCl crypto_secretbox documentation -CRYPTOPP_CONSTANT(crypto_secretbox_NONCEBYTES = 24); -/// \brief Zero-padded message prefix in bytes -/// \sa NaCl crypto_secretbox documentation -CRYPTOPP_CONSTANT(crypto_secretbox_ZEROBYTES = 32); -/// \brief Zero-padded message prefix in bytes -/// \sa NaCl crypto_secretbox documentation -CRYPTOPP_CONSTANT(crypto_secretbox_BOXZEROBYTES = 16); - -/// \brief Private key size in bytes -/// \sa NaCl crypto_box documentation -CRYPTOPP_CONSTANT(crypto_box_SECRETKEYBYTES = 32); -/// \brief Public key size in bytes -/// \sa NaCl crypto_box documentation -CRYPTOPP_CONSTANT(crypto_box_PUBLICKEYBYTES = 32); -/// \brief Nonce size in bytes -/// \sa NaCl crypto_box documentation -CRYPTOPP_CONSTANT(crypto_box_NONCEBYTES = 24); -/// \brief Message 0-byte prefix in bytes -/// \sa NaCl crypto_box documentation -CRYPTOPP_CONSTANT(crypto_box_ZEROBYTES = 32); -/// \brief Open box 0-byte prefix in bytes -/// \sa NaCl crypto_box documentation -CRYPTOPP_CONSTANT(crypto_box_BOXZEROBYTES = 16); -/// \brief Precomputation 0-byte prefix in bytes in bytes -/// \sa NaCl crypto_box documentation -CRYPTOPP_CONSTANT(crypto_box_BEFORENMBYTES = 32); -/// \brief MAC size in bytes -/// \details crypto_box_MACBYTES was missing from tweetnacl.h. Its is defined as -/// crypto_box_curve25519xsalsa20poly1305_MACBYTES, which is defined as 16U. -/// \sa NaCl crypto_box documentation -CRYPTOPP_CONSTANT(crypto_box_MACBYTES = 16); - -/// \brief Private key size in bytes -/// \sa NaCl crypto_sign documentation -CRYPTOPP_CONSTANT(crypto_sign_SECRETKEYBYTES = 64); -/// \brief Public key size in bytes -/// \sa NaCl crypto_sign documentation -CRYPTOPP_CONSTANT(crypto_sign_PUBLICKEYBYTES = 32); -/// \brief Seed size in bytes -/// \sa NaCl crypto_sign documentation -CRYPTOPP_CONSTANT(crypto_sign_SEEDBYTES = 32); -/// \brief Signature size in bytes -/// \sa NaCl crypto_sign documentation -CRYPTOPP_CONSTANT(crypto_sign_BYTES = 64); - -/// \brief Group element size in bytes -/// \sa NaCl crypto_scalarmult documentation -CRYPTOPP_CONSTANT(crypto_scalarmult_BYTES = 32); -/// \brief Integer size in bytes -/// \sa NaCl crypto_scalarmult documentation -CRYPTOPP_CONSTANT(crypto_scalarmult_SCALARBYTES = 32); - -/// \brief Encrypt and authenticate a message -/// \param c output byte buffer -/// \param m input byte buffer -/// \param d size of the input byte buffer -/// \param n nonce byte buffer -/// \param y other's public key -/// \param x private key -/// \details crypto_box() uses crypto_box_curve25519xsalsa20poly1305 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_box documentation -/// \since Crypto++ 6.0 -int crypto_box(byte *c,const byte *m,word64 d,const byte *n,const byte *y,const byte *x); - -/// \brief Verify and decrypt a message -/// \param m output byte buffer -/// \param c input byte buffer -/// \param d size of the input byte buffer -/// \param n nonce byte buffer -/// \param y other's public key -/// \param x private key -/// \details crypto_box_open() uses crypto_box_curve25519xsalsa20poly1305 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_box documentation -/// \since Crypto++ 6.0 -int crypto_box_open(byte *m,const byte *c,word64 d,const byte *n,const byte *y,const byte *x); - -/// \brief Generate a keypair for encryption -/// \param y public key byte buffer -/// \param x private key byte buffer -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_box documentation -/// \since Crypto++ 6.0 -int crypto_box_keypair(byte *y,byte *x); - -/// \brief Encrypt and authenticate a message -/// \param k shared secret byte buffer -/// \param y other's public key -/// \param x private key -/// \details crypto_box_beforenm() performs message-independent precomputation to derive the key. -/// Once the key is derived multiple calls to crypto_box_afternm() can be made to process the message. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_box documentation -/// \since Crypto++ 6.0 -int crypto_box_beforenm(byte *k,const byte *y,const byte *x); - -/// \brief Encrypt and authenticate a message -/// \param m output byte buffer -/// \param c input byte buffer -/// \param d size of the input byte buffer -/// \param n nonce byte buffer -/// \param k shared secret byte buffer -/// \details crypto_box_afternm() performs message-dependent computation using the derived the key. -/// Once the key is derived using crypto_box_beforenm() multiple calls to crypto_box_afternm() -/// can be made to process the message. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_box documentation -/// \since Crypto++ 6.0 -int crypto_box_afternm(byte *c,const byte *m,word64 d,const byte *n,const byte *k); - -/// \brief Verify and decrypt a message -/// \param m output byte buffer -/// \param c input byte buffer -/// \param d size of the input byte buffer -/// \param n nonce byte buffer -/// \param k shared secret byte buffer -/// \details crypto_box_afternm() performs message-dependent computation using the derived the key. -/// Once the key is derived using crypto_box_beforenm() multiple calls to crypto_box_open_afternm() -/// can be made to process the message. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_box documentation -/// \since Crypto++ 6.0 -int crypto_box_open_afternm(byte *m,const byte *c,word64 d,const byte *n,const byte *k); - -/// \brief Encrypt and authenticate a message -/// \param c output byte buffer -/// \param m input byte buffer -/// \param d size of the input byte buffer -/// \param n nonce byte buffer -/// \param y other's public key -/// \param x private key -/// \details crypto_box() uses crypto_box_curve25519xsalsa20poly1305. -/// \details This version of crypto_box() does not check for small order elements. It can be unsafe -/// but it exists for backwards compatibility with downlevel clients. Without the compatibility -/// interop with early versions of NaCl, libsodium and other libraries does not exist. The -/// downlevel interop may also be needed of cryptocurrencies like Bitcoin, Ethereum, Monero -/// and Zcash. -/// \return 0 on success, non-0 otherwise -/// \warning This version of crypto_box() does not check for small order elements. It should not -/// be used in new software. -/// \sa NaCl crypto_box documentation, -/// May the Fourth Be With You: A Microarchitectural -/// Side Channel Attack on Several Real-World Applications of Curve25519, -/// libsodium commit -/// afabd7e7386e1194. -/// \since Crypto++ 6.0 -int crypto_box_unchecked(byte *c,const byte *m,word64 d,const byte *n,const byte *y,const byte *x); - -/// \brief Verify and decrypt a message -/// \param m output byte buffer -/// \param c input byte buffer -/// \param d size of the input byte buffer -/// \param n nonce byte buffer -/// \param y other's public key -/// \param x private key -/// \details crypto_box_open() uses crypto_box_curve25519xsalsa20poly1305. -/// \details This version of crypto_box_open() does not check for small order elements. It can be unsafe -/// but it exists for backwards compatibility with downlevel clients. Without the compatibility -/// interop with early versions of NaCl, libsodium and other libraries does not exist. The -/// downlevel interop may also be needed of cryptocurrencies like Bitcoin, Ethereum, Monero -/// and Zcash. -/// \return 0 on success, non-0 otherwise -/// \warning This version of crypto_box_open() does not check for small order elements. It should not -/// be used in new software. -/// \sa NaCl crypto_box documentation, -/// May the Fourth Be With You: A Microarchitectural -/// Side Channel Attack on Several Real-World Applications of Curve25519, -/// libsodium commit -/// afabd7e7386e1194. -/// \since Crypto++ 6.0 -int crypto_box_open_unchecked(byte *m,const byte *c,word64 d,const byte *n,const byte *y,const byte *x); - -/// \brief Encrypt and authenticate a message -/// \param k shared secret byte buffer -/// \param y other's public key -/// \param x private key -/// \details crypto_box_beforenm() performs message-independent precomputation to derive the key. -/// Once the key is derived multiple calls to crypto_box_afternm() can be made to process the message. -/// \details This version of crypto_box_beforenm() does not check for small order elements. It can be unsafe -/// but it exists for backwards compatibility with downlevel clients. Without the compatibility -/// interop with early versions of NaCl, libsodium and other libraries does not exist. The -/// downlevel interop may also be needed of cryptocurrencies like Bitcoin, Ethereum, Monero -/// and Zcash. -/// \return 0 on success, non-0 otherwise -/// \warning This version of crypto_box_beforenm() does not check for small order elements. It should not -/// be used in new software. -/// \sa NaCl crypto_box documentation, -/// May the Fourth Be With You: A Microarchitectural -/// Side Channel Attack on Several Real-World Applications of Curve25519, -/// libsodium commit -/// afabd7e7386e1194. -/// \since Crypto++ 6.0 -int crypto_box_beforenm_unchecked(byte *k,const byte *y,const byte *x); - -/// \brief TODO -int crypto_core_salsa20(byte *out,const byte *in,const byte *k,const byte *c); - -/// \brief TODO -/// \return 0 on success, non-0 otherwise -/// \since Crypto++ 6.0 -int crypto_core_hsalsa20(byte *out,const byte *in,const byte *k,const byte *c); - -/// \brief Hash multiple blocks -/// \details crypto_hashblocks() uses crypto_hashblocks_sha512. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_hash documentation -/// \since Crypto++ 6.0 -int crypto_hashblocks(byte *x,const byte *m,word64 n); - -/// \brief Hash a message -/// \details crypto_hash() uses crypto_hash_sha512. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_hash documentation -/// \since Crypto++ 6.0 -int crypto_hash(byte *out,const byte *m,word64 n); - -/// \brief Create an authentication tag for a message -/// \details crypto_onetimeauth() uses crypto_onetimeauth_poly1305. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_onetimeauth documentation -/// \since Crypto++ 6.0 -int crypto_onetimeauth(byte *out,const byte *m,word64 n,const byte *k); - -/// \brief Verify an authentication tag on a message -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_onetimeauth documentation -/// \since Crypto++ 6.0 -int crypto_onetimeauth_verify(const byte *h,const byte *m,word64 n,const byte *k); - -/// \brief Scalar multiplication of a point -/// \details crypto_scalarmult() uses crypto_scalarmult_curve25519 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_scalarmult documentation -/// \since Crypto++ 6.0 -int crypto_scalarmult(byte *q,const byte *n,const byte *p); - -/// \brief Scalar multiplication of base point -/// \details crypto_scalarmult_base() uses crypto_scalarmult_curve25519 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_scalarmult documentation -/// \since Crypto++ 6.0 -int crypto_scalarmult_base(byte *q,const byte *n); - -/// \brief Encrypt and authenticate a message -/// \details crypto_secretbox() uses a symmetric key to encrypt and authenticate a message. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_secretbox documentation -/// \since Crypto++ 6.0 -int crypto_secretbox(byte *c,const byte *m,word64 d,const byte *n,const byte *k); - -/// \brief Verify and decrypt a message -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_secretbox documentation -/// \since Crypto++ 6.0 -int crypto_secretbox_open(byte *m,const byte *c,word64 d,const byte *n,const byte *k); - -/// \brief Sign a message -/// \param sm output byte buffer -/// \param smlen size of the output byte buffer -/// \param m input byte buffer -/// \param n size of the input byte buffer -/// \param sk private key -/// \details crypto_sign() uses crypto_sign_ed25519. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_sign documentation -/// \since Crypto++ 6.0 -int crypto_sign(byte *sm,word64 *smlen,const byte *m,word64 n,const byte *sk); - -/// \brief Verify a message -/// \param m output byte buffer -/// \param mlen size of the output byte buffer -/// \param sm input byte buffer -/// \param n size of the input byte buffer -/// \param pk public key -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_sign documentation -/// \since Crypto++ 6.0 -int crypto_sign_open(byte *m,word64 *mlen,const byte *sm,word64 n,const byte *pk); - -/// \brief Generate a keypair for signing -/// \param pk public key byte buffer -/// \param sk private key byte buffer -/// \details crypto_sign_keypair() creates an ed25519 keypair. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_sign documentation -/// \since Crypto++ 6.0 -int crypto_sign_keypair(byte *pk, byte *sk); - -/// \brief Calculate a public key from a secret key -/// \param pk public key byte buffer -/// \param sk private key byte buffer -/// \details crypto_sign_sk2pk() creates an ed25519 public key from an existing -/// 32-byte secret key. The function does not backfill the tail bytes of the -/// secret key with the calculated public key. -/// \details crypto_sign_sk2pk() is not part of libsodium or Tweet API. It was -/// added for interop with some anonymous routing protocols. -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_sign documentation -/// \since Crypto++ 8.0 -int crypto_sign_sk2pk(byte *pk, const byte *sk); - -/// \brief Produce a keystream using XSalsa20 -/// \details crypto_stream() uses crypto_stream_xsalsa20 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_stream documentation -/// \since Crypto++ 6.0 -int crypto_stream(byte *c,word64 d,const byte *n,const byte *k); - -/// \brief Encrypt a message using XSalsa20 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_stream documentation -/// \since Crypto++ 6.0 -int crypto_stream_xor(byte *c,const byte *m,word64 d,const byte *n,const byte *k); - -/// \brief Produce a keystream using Salsa20 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_stream documentation -/// \since Crypto++ 6.0 -int crypto_stream_salsa20(byte *c,word64 d,const byte *n,const byte *k); - -/// \brief Encrypt a message using Salsa20 -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_stream documentation -/// \since Crypto++ 6.0 -int crypto_stream_salsa20_xor(byte *c,const byte *m,word64 b,const byte *n,const byte *k); - -/// \brief Compare 16-byte buffers -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_verify documentation -/// \since Crypto++ 6.0 -int crypto_verify_16(const byte *x,const byte *y); - -/// \brief Compare 32-byte buffers -/// \return 0 on success, non-0 otherwise -/// \sa NaCl crypto_verify documentation -/// \since Crypto++ 6.0 -int crypto_verify_32(const byte *x,const byte *y); - -NAMESPACE_END // CryptoPP -NAMESPACE_END // NaCl - -#endif // CRYPTOPP_DISABLE_NACL -#endif // CRYPTOPP_NACL_H diff --git a/third_party/cryptoppwin/include/cryptopp/nbtheory.h b/third_party/cryptoppwin/include/cryptopp/nbtheory.h deleted file mode 100644 index a494110d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/nbtheory.h +++ /dev/null @@ -1,320 +0,0 @@ -// nbtheory.h - originally written and placed in the public domain by Wei Dai - -/// \file nbtheory.h -/// \brief Classes and functions for number theoretic operations - -#ifndef CRYPTOPP_NBTHEORY_H -#define CRYPTOPP_NBTHEORY_H - -#include "cryptlib.h" -#include "integer.h" -#include "algparam.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief The Small Prime table -/// \param size number of elements in the table -/// \return prime table with /p size elements -/// \details GetPrimeTable() obtains pointer to small prime table and provides the size of the table. -/// /p size is an out parameter. -CRYPTOPP_DLL const word16 * CRYPTOPP_API GetPrimeTable(unsigned int &size); - -// ************ primality testing **************** - -/// \brief Generates a provable prime -/// \param rng a RandomNumberGenerator to produce random material -/// \param bits the number of bits in the prime number -/// \return Integer() meeting Maurer's tests for primality -CRYPTOPP_DLL Integer CRYPTOPP_API MaurerProvablePrime(RandomNumberGenerator &rng, unsigned int bits); - -/// \brief Generates a provable prime -/// \param rng a RandomNumberGenerator to produce random material -/// \param bits the number of bits in the prime number -/// \return Integer() meeting Mihailescu's tests for primality -/// \details Mihailescu's methods performs a search using algorithmic progressions. -CRYPTOPP_DLL Integer CRYPTOPP_API MihailescuProvablePrime(RandomNumberGenerator &rng, unsigned int bits); - -/// \brief Tests whether a number is a small prime -/// \param p a candidate prime to test -/// \return true if p is a small prime, false otherwise -/// \details Internally, the library maintains a table of the first 32719 prime numbers -/// in sorted order. IsSmallPrime searches the table and returns true if p is -/// in the table. -CRYPTOPP_DLL bool CRYPTOPP_API IsSmallPrime(const Integer &p); - -/// \brief Tests whether a number is divisible by a small prime -/// \return true if p is divisible by some prime less than bound. -/// \details TrialDivision() returns true if p is divisible by some prime less -/// than bound. bound should not be greater than the largest entry in the -/// prime table, which is 32719. -CRYPTOPP_DLL bool CRYPTOPP_API TrialDivision(const Integer &p, unsigned bound); - -/// \brief Tests whether a number is divisible by a small prime -/// \return true if p is NOT divisible by small primes. -/// \details SmallDivisorsTest() returns true if p is NOT divisible by some -/// prime less than 32719. -CRYPTOPP_DLL bool CRYPTOPP_API SmallDivisorsTest(const Integer &p); - -/// \brief Determine if a number is probably prime -/// \param n the number to test -/// \param b the base to exponentiate -/// \return true if the number n is probably prime, false otherwise. -/// \details IsFermatProbablePrime raises b to the n-1 power and checks if -/// the result is congruent to 1 modulo n. -/// \details These is no reason to use IsFermatProbablePrime, use IsStrongProbablePrime or -/// IsStrongLucasProbablePrime instead. -/// \sa IsStrongProbablePrime, IsStrongLucasProbablePrime -CRYPTOPP_DLL bool CRYPTOPP_API IsFermatProbablePrime(const Integer &n, const Integer &b); - -/// \brief Determine if a number is probably prime -/// \param n the number to test -/// \return true if the number n is probably prime, false otherwise. -/// \details These is no reason to use IsLucasProbablePrime, use IsStrongProbablePrime or -/// IsStrongLucasProbablePrime instead. -/// \sa IsStrongProbablePrime, IsStrongLucasProbablePrime -CRYPTOPP_DLL bool CRYPTOPP_API IsLucasProbablePrime(const Integer &n); - -/// \brief Determine if a number is probably prime -/// \param n the number to test -/// \param b the base to exponentiate -/// \return true if the number n is probably prime, false otherwise. -CRYPTOPP_DLL bool CRYPTOPP_API IsStrongProbablePrime(const Integer &n, const Integer &b); - -/// \brief Determine if a number is probably prime -/// \param n the number to test -/// \return true if the number n is probably prime, false otherwise. -CRYPTOPP_DLL bool CRYPTOPP_API IsStrongLucasProbablePrime(const Integer &n); - -/// \brief Determine if a number is probably prime -/// \param rng a RandomNumberGenerator to produce random material -/// \param n the number to test -/// \param rounds the number of tests to perform -/// \details This is the Rabin-Miller primality test, i.e. repeating the strong probable prime -/// test for several rounds with random bases -/// \sa Trial divisions before -/// Miller-Rabin checks? on Crypto Stack Exchange -CRYPTOPP_DLL bool CRYPTOPP_API RabinMillerTest(RandomNumberGenerator &rng, const Integer &n, unsigned int rounds); - -/// \brief Verifies a number is probably prime -/// \param p a candidate prime to test -/// \return true if p is a probable prime, false otherwise -/// \details IsPrime() is suitable for testing candidate primes when creating them. Internally, -/// IsPrime() utilizes SmallDivisorsTest(), IsStrongProbablePrime() and IsStrongLucasProbablePrime(). -CRYPTOPP_DLL bool CRYPTOPP_API IsPrime(const Integer &p); - -/// \brief Verifies a number is probably prime -/// \param rng a RandomNumberGenerator for randomized testing -/// \param p a candidate prime to test -/// \param level the level of thoroughness of testing -/// \return true if p is a strong probable prime, false otherwise -/// \details VerifyPrime() is suitable for testing candidate primes created by others. Internally, -/// VerifyPrime() utilizes IsPrime() and one-round RabinMillerTest(). If the candidate passes and -/// level is greater than 1, then 10 round RabinMillerTest() primality testing is performed. -CRYPTOPP_DLL bool CRYPTOPP_API VerifyPrime(RandomNumberGenerator &rng, const Integer &p, unsigned int level = 1); - -/// \brief Application callback to signal suitability of a cabdidate prime -class CRYPTOPP_DLL PrimeSelector -{ -public: - virtual ~PrimeSelector() {} - const PrimeSelector *GetSelectorPointer() const {return this;} - virtual bool IsAcceptable(const Integer &candidate) const =0; -}; - -/// \brief Finds a random prime of special form -/// \param p an Integer reference to receive the prime -/// \param max the maximum value -/// \param equiv the equivalence class based on the parameter mod -/// \param mod the modulus used to reduce the equivalence class -/// \param pSelector pointer to a PrimeSelector function for the application to signal suitability -/// \return true if and only if FirstPrime() finds a prime and returns the prime through p. If FirstPrime() -/// returns false, then no such prime exists and the value of p is undefined -/// \details FirstPrime() uses a fast sieve to find the first probable prime -/// in {x | p<=x<=max and x%mod==equiv} -CRYPTOPP_DLL bool CRYPTOPP_API FirstPrime(Integer &p, const Integer &max, const Integer &equiv, const Integer &mod, const PrimeSelector *pSelector); - -CRYPTOPP_DLL unsigned int CRYPTOPP_API PrimeSearchInterval(const Integer &max); - -CRYPTOPP_DLL AlgorithmParameters CRYPTOPP_API MakeParametersForTwoPrimesOfEqualSize(unsigned int productBitLength); - -// ********** other number theoretic functions ************ - -/// \brief Calculate the greatest common divisor -/// \param a the first term -/// \param b the second term -/// \return the greatest common divisor if one exists, 0 otherwise. -inline Integer GCD(const Integer &a, const Integer &b) - {return Integer::Gcd(a,b);} - -/// \brief Determine relative primality -/// \param a the first term -/// \param b the second term -/// \return true if a and b are relatively prime, false otherwise. -inline bool RelativelyPrime(const Integer &a, const Integer &b) - {return Integer::Gcd(a,b) == Integer::One();} - -/// \brief Calculate the least common multiple -/// \param a the first term -/// \param b the second term -/// \return the least common multiple of a and b. -inline Integer LCM(const Integer &a, const Integer &b) - {return a/Integer::Gcd(a,b)*b;} - -/// \brief Calculate multiplicative inverse -/// \param a the number to test -/// \param b the modulus -/// \return an Integer (a ^ -1) % n or 0 if none exists. -/// \details EuclideanMultiplicativeInverse returns the multiplicative inverse of the Integer -/// *a modulo the Integer b. If no Integer exists then Integer 0 is returned. -inline Integer EuclideanMultiplicativeInverse(const Integer &a, const Integer &b) - {return a.InverseMod(b);} - - -/// \brief Chinese Remainder Theorem -/// \param xp the first number, mod p -/// \param p the first prime modulus -/// \param xq the second number, mod q -/// \param q the second prime modulus -/// \param u inverse of p mod q -/// \return the CRT value of the parameters -/// \details CRT uses the Chinese Remainder Theorem to calculate x given -/// x mod p and x mod q, and u the inverse of p mod q. -CRYPTOPP_DLL Integer CRYPTOPP_API CRT(const Integer &xp, const Integer &p, const Integer &xq, const Integer &q, const Integer &u); - -/// \brief Calculate the Jacobi symbol -/// \param a the first term -/// \param b the second term -/// \return the Jacobi symbol. -/// \details Jacobi symbols are calculated using the following rules: -/// -# if b is prime, then Jacobi(a, b), then return 0 -/// -# if a%b==0 AND a is quadratic residue mod b, then return 1 -/// -# return -1 otherwise -/// \details Refer to a number theory book for what Jacobi symbol means when b is not prime. -CRYPTOPP_DLL int CRYPTOPP_API Jacobi(const Integer &a, const Integer &b); - -/// \brief Calculate the Lucas value -/// \return the Lucas value -/// \details Lucas() calculates the Lucas function V_e(p, 1) mod n. -CRYPTOPP_DLL Integer CRYPTOPP_API Lucas(const Integer &e, const Integer &p, const Integer &n); - -/// \brief Calculate the inverse Lucas value -/// \return the inverse Lucas value -/// \details InverseLucas() calculates x such that m==Lucas(e, x, p*q), -/// p q primes, u is inverse of p mod q. -CRYPTOPP_DLL Integer CRYPTOPP_API InverseLucas(const Integer &e, const Integer &m, const Integer &p, const Integer &q, const Integer &u); - -/// \brief Modular multiplication -/// \param x the first term -/// \param y the second term -/// \param m the modulus -/// \return an Integer (x * y) % m. -inline Integer ModularMultiplication(const Integer &x, const Integer &y, const Integer &m) - {return a_times_b_mod_c(x, y, m);} - -/// \brief Modular exponentiation -/// \param x the base -/// \param e the exponent -/// \param m the modulus -/// \return an Integer (a ^ b) % m. -inline Integer ModularExponentiation(const Integer &x, const Integer &e, const Integer &m) - {return a_exp_b_mod_c(x, e, m);} - -/// \brief Extract a modular square root -/// \param a the number to extract square root -/// \param p the prime modulus -/// \return the modular square root if it exists -/// \details ModularSquareRoot returns x such that x*x%p == a, p prime -CRYPTOPP_DLL Integer CRYPTOPP_API ModularSquareRoot(const Integer &a, const Integer &p); - -/// \brief Extract a modular root -/// \return a modular root if it exists -/// \details ModularRoot returns x such that a==ModularExponentiation(x, e, p*q), -/// p q primes, and e relatively prime to (p-1)*(q-1), -/// dp=d%(p-1), dq=d%(q-1), (d is inverse of e mod (p-1)*(q-1)) -/// and u=inverse of p mod q. -CRYPTOPP_DLL Integer CRYPTOPP_API ModularRoot(const Integer &a, const Integer &dp, const Integer &dq, const Integer &p, const Integer &q, const Integer &u); - -/// \brief Solve a Modular Quadratic Equation -/// \param r1 the first residue -/// \param r2 the second residue -/// \param a the first coefficient -/// \param b the second coefficient -/// \param c the third constant -/// \param p the prime modulus -/// \return true if solutions exist -/// \details SolveModularQuadraticEquation() finds r1 and r2 such that ax^2 + -/// bx + c == 0 (mod p) for x in {r1, r2}, p prime. -CRYPTOPP_DLL bool CRYPTOPP_API SolveModularQuadraticEquation(Integer &r1, Integer &r2, const Integer &a, const Integer &b, const Integer &c, const Integer &p); - -/// \brief Estimate work factor -/// \param bitlength the size of the number, in bits -/// \return the estimated work factor, in operations -/// \details DiscreteLogWorkFactor returns log base 2 of estimated number of operations to -/// calculate discrete log or factor a number. -CRYPTOPP_DLL unsigned int CRYPTOPP_API DiscreteLogWorkFactor(unsigned int bitlength); - -/// \brief Estimate work factor -/// \param bitlength the size of the number, in bits -/// \return the estimated work factor, in operations -/// \details FactoringWorkFactor returns log base 2 of estimated number of operations to -/// calculate discrete log or factor a number. -CRYPTOPP_DLL unsigned int CRYPTOPP_API FactoringWorkFactor(unsigned int bitlength); - -// ******************************************************** - -/// \brief Generator of prime numbers of special forms -class CRYPTOPP_DLL PrimeAndGenerator -{ -public: - /// \brief Construct a PrimeAndGenerator - PrimeAndGenerator() {} - - /// \brief Construct a PrimeAndGenerator - /// \param delta +1 or -1 - /// \param rng a RandomNumberGenerator derived class - /// \param pbits the number of bits in the prime p - /// \details PrimeAndGenerator() generates a random prime p of the form 2*q+delta, where delta is 1 or -1 and q is - /// also prime. Internally the constructor calls Generate(delta, rng, pbits, pbits-1). - /// \pre pbits > 5 - /// \warning This PrimeAndGenerator() is slow because primes of this form are harder to find. - PrimeAndGenerator(signed int delta, RandomNumberGenerator &rng, unsigned int pbits) - {Generate(delta, rng, pbits, pbits-1);} - - /// \brief Construct a PrimeAndGenerator - /// \param delta +1 or -1 - /// \param rng a RandomNumberGenerator derived class - /// \param pbits the number of bits in the prime p - /// \param qbits the number of bits in the prime q - /// \details PrimeAndGenerator() generates a random prime p of the form 2*r*q+delta, where q is also prime. - /// Internally the constructor calls Generate(delta, rng, pbits, qbits). - /// \pre qbits > 4 && pbits > qbits - PrimeAndGenerator(signed int delta, RandomNumberGenerator &rng, unsigned int pbits, unsigned qbits) - {Generate(delta, rng, pbits, qbits);} - - /// \brief Generate a Prime and Generator - /// \param delta +1 or -1 - /// \param rng a RandomNumberGenerator derived class - /// \param pbits the number of bits in the prime p - /// \param qbits the number of bits in the prime q - /// \details Generate() generates a random prime p of the form 2*r*q+delta, where q is also prime. - void Generate(signed int delta, RandomNumberGenerator &rng, unsigned int pbits, unsigned qbits); - - /// \brief Retrieve first prime - /// \return Prime() returns the prime p. - const Integer& Prime() const {return p;} - - /// \brief Retrieve second prime - /// \return SubPrime() returns the prime q. - const Integer& SubPrime() const {return q;} - - /// \brief Retrieve the generator - /// \return Generator() returns the generator g. - const Integer& Generator() const {return g;} - -private: - Integer p, q, g; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/nr.h b/third_party/cryptoppwin/include/cryptopp/nr.h deleted file mode 100644 index 21558be5..00000000 --- a/third_party/cryptoppwin/include/cryptopp/nr.h +++ /dev/null @@ -1,11 +0,0 @@ -// nr.h - originally written and placed in the public domain by Wei Dai - -/// \file nr.h -/// \brief Classes for Nyberg-Rueppel signature scheme - -#ifndef CRYPTOPP_NR_H -#define CRYPTOPP_NR_H - -#include "gfpcrypt.h" - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/oaep.h b/third_party/cryptoppwin/include/cryptopp/oaep.h deleted file mode 100644 index a709e2ab..00000000 --- a/third_party/cryptoppwin/include/cryptopp/oaep.h +++ /dev/null @@ -1,54 +0,0 @@ -// oaep.h - originally written and placed in the public domain by Wei Dai - -/// \file oaep.h -/// \brief Classes for optimal asymmetric encryption padding -/// \since Crypto++ 2.1 - -#ifndef CRYPTOPP_OAEP_H -#define CRYPTOPP_OAEP_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "sha.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief OAEP padding base class -/// \since Crypto++ 2.1 -class CRYPTOPP_DLL OAEP_Base : public PK_EncryptionMessageEncodingMethod -{ -public: - bool ParameterSupported(const char *name) const {return strcmp(name, Name::EncodingParameters()) == 0;} - size_t MaxUnpaddedLength(size_t paddedLength) const; - void Pad(RandomNumberGenerator &rng, const byte *raw, size_t inputLength, byte *padded, size_t paddedLength, const NameValuePairs ¶meters) const; - DecodingResult Unpad(const byte *padded, size_t paddedLength, byte *raw, const NameValuePairs ¶meters) const; - -protected: - virtual unsigned int DigestSize() const =0; - virtual HashTransformation * NewHash() const =0; - virtual MaskGeneratingFunction * NewMGF() const =0; -}; - -/// \brief OAEP padding -/// \tparam H HashTransformation derived class -/// \tparam MGF MaskGeneratingFunction derived class -/// \sa EME-OAEP, for use with classes derived from TF_ES -/// \since Crypto++ 2.1 -template -class OAEP : public OAEP_Base, public EncryptionStandard -{ -public: - static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("OAEP-") + MGF::StaticAlgorithmName() + "(" + H::StaticAlgorithmName() + ")";} - typedef OAEP EncryptionMessageEncodingMethod; - -protected: - unsigned int DigestSize() const {return H::DIGESTSIZE;} - HashTransformation * NewHash() const {return new H;} - MaskGeneratingFunction * NewMGF() const {return new MGF;} -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS OAEP; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/oids.h b/third_party/cryptoppwin/include/cryptopp/oids.h deleted file mode 100644 index 936f68b2..00000000 --- a/third_party/cryptoppwin/include/cryptopp/oids.h +++ /dev/null @@ -1,197 +0,0 @@ -// oids.h - originally written and placed in the public domain by Wei Dai - -/// \file oids.h -/// \brief ASN.1 object identifiers for algorithms and schemes -/// \details Most OIDs can be found at http://www.oid-info.com/. The Chinese OIDs -/// are assigned in GM/T 0006-2012, Cryptographic Application Identifier Criterion -/// Specification. A reproduction can be found at http://gmssl.org/docs/oid.html. -/// There seems to be some confusion between the text of GmSSL's oid.html web page -/// and the actual OID used in the code. We used the same OIDs that were detailed in -/// http://github.com/guanzhi/GmSSL/blob/master/crypto/objects/objects.txt. - -#ifndef CRYPTOPP_OIDS_H -#define CRYPTOPP_OIDS_H - -#include "asn.h" - -NAMESPACE_BEGIN(CryptoPP) - -NAMESPACE_BEGIN(ASN1) - -#define DEFINE_OID(value, name) inline OID name() {return value;} - -DEFINE_OID(1, iso) - DEFINE_OID(iso()+2, member_body) - DEFINE_OID(member_body()+156, iso_cn) - DEFINE_OID(iso_cn()+10197, oscca) - DEFINE_OID(oscca()+1, sm_scheme) - DEFINE_OID(sm_scheme()+104, sms4) - DEFINE_OID(sm_scheme()+301, sm2p256v1) - DEFINE_OID(sm2p256v1()+1, sm2sign) - DEFINE_OID(sm2p256v1()+2, sm2exchange) - DEFINE_OID(sm2p256v1()+3, sm2encrypt) - DEFINE_OID(sm2encrypt()+1, sm2encrypt_recommendedParameters) - DEFINE_OID(sm2encrypt()+2, sm2encrypt_specifiedParameters) - DEFINE_OID(member_body()+840, iso_us) - DEFINE_OID(iso_us()+10040, ansi_x9_57) - DEFINE_OID(ansi_x9_57()+4, ansi_x9cm) - DEFINE_OID(ansi_x9cm()+1, id_dsa) - DEFINE_OID(iso_us()+10045, ansi_x9_62) - DEFINE_OID(ansi_x9_62()+1, id_fieldType) - DEFINE_OID(id_fieldType()+1, prime_field) - DEFINE_OID(id_fieldType()+2, characteristic_two_field) - DEFINE_OID(characteristic_two_field()+3, id_characteristic_two_basis) - DEFINE_OID(id_characteristic_two_basis()+1, gnBasis) - DEFINE_OID(id_characteristic_two_basis()+2, tpBasis) - DEFINE_OID(id_characteristic_two_basis()+3, ppBasis) - DEFINE_OID(ansi_x9_62()+2, id_publicKeyType) - DEFINE_OID(id_publicKeyType()+1, id_ecPublicKey) - DEFINE_OID(ansi_x9_62()+3, ansi_x9_62_curves) - DEFINE_OID(ansi_x9_62_curves()+1, ansi_x9_62_curves_prime) - // ANSI X9.62 - DEFINE_OID(ansi_x9_62_curves_prime()+1, secp192r1) // secp192v1 - //DEFINE_OID(ansi_x9_62_curves_prime()+2, secp192v2) - //DEFINE_OID(ansi_x9_62_curves_prime()+3, secp192v3) - //DEFINE_OID(ansi_x9_62_curves_prime()+4, secp239v1) - //DEFINE_OID(ansi_x9_62_curves_prime()+5, secp239v2) - //DEFINE_OID(ansi_x9_62_curves_prime()+6, secp239v3) - DEFINE_OID(ansi_x9_62_curves_prime()+7, secp256r1) // secp256v1 - DEFINE_OID(ansi_x9_62()+4, ansi_signatures) - DEFINE_OID(ansi_signatures()+3, ecdsa_with_sha2) - DEFINE_OID(ecdsa_with_sha2()+1, ecdsa_with_sha224) - DEFINE_OID(ecdsa_with_sha2()+2, ecdsa_with_sha256) - DEFINE_OID(ecdsa_with_sha2()+3, ecdsa_with_sha384) - DEFINE_OID(ecdsa_with_sha2()+4, ecdsa_with_sha512) - DEFINE_OID(iso_us()+113549, rsadsi) - DEFINE_OID(rsadsi()+1, pkcs) - DEFINE_OID(pkcs()+1, pkcs_1) - // Arc from PKCS #1 and RFC 2459 - DEFINE_OID(pkcs_1()+1, rsaEncryption) - DEFINE_OID(pkcs_1()+2, md2WithRSAEncryption) - DEFINE_OID(pkcs_1()+3, md4withRSAEncryption) - DEFINE_OID(pkcs_1()+4, md5WithRSAEncryption) - DEFINE_OID(pkcs_1()+5, sha1WithRSAEncryption) - DEFINE_OID(pkcs_1()+10, rsassa_pss) - DEFINE_OID(pkcs_1()+11, sha256WithRSAEncryption) - DEFINE_OID(pkcs_1()+12, sha384WithRSAEncryption) - DEFINE_OID(pkcs_1()+13, sha512WithRSAEncryption) - DEFINE_OID(pkcs_1()+14, sha224WithRSAEncryption) - DEFINE_OID(pkcs_1()+15, sha512_224WithRSAEncryption) - DEFINE_OID(pkcs_1()+16, sha512_256WithRSAEncryption) - DEFINE_OID(rsadsi()+2, rsadsi_digestAlgorithm) - DEFINE_OID(rsadsi_digestAlgorithm()+2, id_md2) - DEFINE_OID(rsadsi_digestAlgorithm()+5, id_md5) - DEFINE_OID(iso()+3, identified_organization) - // Arc from http://tools.ietf.org/html/draft-josefsson-pkix-newcurves - // GNU and OpenPGP uses 1.3.6.1.4.1.11591.15.1 for Ed25519. See - // https://www.gnu.org/prep/standards/html_node/OID-Allocations.html, - // https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-rfc4880bis - DEFINE_OID(identified_organization()+6, dod) - DEFINE_OID(dod()+1, internet) - DEFINE_OID(internet()+4, internet_private) - DEFINE_OID(internet_private()+1, enterprise) - DEFINE_OID(enterprise()+11591,gnu) - DEFINE_OID(gnu()+15,ellipticCurve) - DEFINE_OID(ellipticCurve()+1,curve25519) - DEFINE_OID(ellipticCurve()+2,curve448) - DEFINE_OID(ellipticCurve()+3,curve25519ph) - DEFINE_OID(ellipticCurve()+4,curve448ph) - DEFINE_OID(identified_organization()+14, oiw) - DEFINE_OID(oiw()+3, oiw_secsig) - DEFINE_OID(oiw_secsig()+2, oiw_secsig_algorithms) - DEFINE_OID(oiw_secsig_algorithms()+26, id_sha1) - DEFINE_OID(oiw()+7, dssig) - DEFINE_OID(dssig()+2, algorithm) - DEFINE_OID(algorithm()+1, encryptionAlgorithm) - DEFINE_OID(encryptionAlgorithm()+1, elGamal) - DEFINE_OID(identified_organization()+36, teletrust) - DEFINE_OID(teletrust()+3, teletrust_algorithm) - DEFINE_OID(teletrust_algorithm()+2+1, id_ripemd160) - DEFINE_OID(teletrust_algorithm()+3+2+8+1, teletrust_ellipticCurve) - DEFINE_OID(teletrust_ellipticCurve()+1+1, brainpoolP160r1) - DEFINE_OID(teletrust_ellipticCurve()+1+3, brainpoolP192r1) - DEFINE_OID(teletrust_ellipticCurve()+1+5, brainpoolP224r1) - DEFINE_OID(teletrust_ellipticCurve()+1+7, brainpoolP256r1) - DEFINE_OID(teletrust_ellipticCurve()+1+9, brainpoolP320r1) - DEFINE_OID(teletrust_ellipticCurve()+1+11, brainpoolP384r1) - DEFINE_OID(teletrust_ellipticCurve()+1+13, brainpoolP512r1) - // https://tools.ietf.org/html/draft-ietf-curdle-pkix-07 - DEFINE_OID(identified_organization()+101, thawte) - DEFINE_OID(thawte()+110, X25519) - DEFINE_OID(thawte()+111, X448) - DEFINE_OID(thawte()+112, Ed25519) - DEFINE_OID(thawte()+113, Ed448) - DEFINE_OID(identified_organization()+132, certicom) - DEFINE_OID(certicom()+0, certicom_ellipticCurve) - // these are sorted by curve type and then by OID - // first curves based on GF(p) - DEFINE_OID(certicom_ellipticCurve()+6, secp112r1) - DEFINE_OID(certicom_ellipticCurve()+7, secp112r2) - DEFINE_OID(certicom_ellipticCurve()+8, secp160r1) - DEFINE_OID(certicom_ellipticCurve()+9, secp160k1) - DEFINE_OID(certicom_ellipticCurve()+10, secp256k1) - DEFINE_OID(certicom_ellipticCurve()+28, secp128r1) - DEFINE_OID(certicom_ellipticCurve()+29, secp128r2) - DEFINE_OID(certicom_ellipticCurve()+30, secp160r2) - DEFINE_OID(certicom_ellipticCurve()+31, secp192k1) - DEFINE_OID(certicom_ellipticCurve()+32, secp224k1) - DEFINE_OID(certicom_ellipticCurve()+33, secp224r1) - DEFINE_OID(certicom_ellipticCurve()+34, secp384r1) - DEFINE_OID(certicom_ellipticCurve()+35, secp521r1) - // then curves based on GF(2^n) - DEFINE_OID(certicom_ellipticCurve()+1, sect163k1) - DEFINE_OID(certicom_ellipticCurve()+2, sect163r1) - DEFINE_OID(certicom_ellipticCurve()+3, sect239k1) - DEFINE_OID(certicom_ellipticCurve()+4, sect113r1) - DEFINE_OID(certicom_ellipticCurve()+5, sect113r2) - DEFINE_OID(certicom_ellipticCurve()+15, sect163r2) - DEFINE_OID(certicom_ellipticCurve()+16, sect283k1) - DEFINE_OID(certicom_ellipticCurve()+17, sect283r1) - DEFINE_OID(certicom_ellipticCurve()+22, sect131r1) - DEFINE_OID(certicom_ellipticCurve()+23, sect131r2) - DEFINE_OID(certicom_ellipticCurve()+24, sect193r1) - DEFINE_OID(certicom_ellipticCurve()+25, sect193r2) - DEFINE_OID(certicom_ellipticCurve()+26, sect233k1) - DEFINE_OID(certicom_ellipticCurve()+27, sect233r1) - DEFINE_OID(certicom_ellipticCurve()+36, sect409k1) - DEFINE_OID(certicom_ellipticCurve()+37, sect409r1) - DEFINE_OID(certicom_ellipticCurve()+38, sect571k1) - DEFINE_OID(certicom_ellipticCurve()+39, sect571r1) -DEFINE_OID(2, joint_iso_ccitt) - DEFINE_OID(joint_iso_ccitt()+16, country) - DEFINE_OID(country()+840, joint_iso_ccitt_us) - DEFINE_OID(joint_iso_ccitt_us()+1, us_organization) - DEFINE_OID(us_organization()+101, us_gov) - DEFINE_OID(us_gov()+3, csor) - DEFINE_OID(csor()+4, nistalgorithms) - DEFINE_OID(nistalgorithms()+1, aes) - DEFINE_OID(aes()+1, id_aes128_ECB) - DEFINE_OID(aes()+2, id_aes128_cbc) - DEFINE_OID(aes()+3, id_aes128_ofb) - DEFINE_OID(aes()+4, id_aes128_cfb) - DEFINE_OID(aes()+21, id_aes192_ECB) - DEFINE_OID(aes()+22, id_aes192_cbc) - DEFINE_OID(aes()+23, id_aes192_ofb) - DEFINE_OID(aes()+24, id_aes192_cfb) - DEFINE_OID(aes()+41, id_aes256_ECB) - DEFINE_OID(aes()+42, id_aes256_cbc) - DEFINE_OID(aes()+43, id_aes256_ofb) - DEFINE_OID(aes()+44, id_aes256_cfb) - DEFINE_OID(nistalgorithms()+2, nist_hashalgs) - DEFINE_OID(nist_hashalgs()+1, id_sha256) - DEFINE_OID(nist_hashalgs()+2, id_sha384) - DEFINE_OID(nist_hashalgs()+3, id_sha512) - DEFINE_OID(nist_hashalgs()+4, id_sha224) - DEFINE_OID(nist_hashalgs()+7, id_sha3_224) - DEFINE_OID(nist_hashalgs()+8, id_sha3_256) - DEFINE_OID(nist_hashalgs()+9, id_sha3_384) - DEFINE_OID(nist_hashalgs()+10, id_sha3_512) - DEFINE_OID(joint_iso_ccitt_us()+10046, ansi_x942) - DEFINE_OID(ansi_x942()+2, number_type) - DEFINE_OID(number_type()+1, dhpublicnumber) - -NAMESPACE_END - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/osrng.h b/third_party/cryptoppwin/include/cryptopp/osrng.h deleted file mode 100644 index 31c32957..00000000 --- a/third_party/cryptoppwin/include/cryptopp/osrng.h +++ /dev/null @@ -1,304 +0,0 @@ -// osrng.h - originally written and placed in the public domain by Wei Dai - -/// \file osrng.h -/// \brief Classes for access to the operating system's random number generators - -#ifndef CRYPTOPP_OSRNG_H -#define CRYPTOPP_OSRNG_H - -#include "config.h" - -#if !defined(NO_OS_DEPENDENCE) && defined(OS_RNG_AVAILABLE) - -#include "cryptlib.h" -#include "randpool.h" -#include "smartptr.h" -#include "fips140.h" -#include "hkdf.h" -#include "rng.h" -#include "aes.h" -#include "sha.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Exception thrown when an operating system error is encountered -class CRYPTOPP_DLL OS_RNG_Err : public Exception -{ -public: - /// \brief Constructs an OS_RNG_Err - /// \param operation the operation or API call when the error occurs - OS_RNG_Err(const std::string &operation); -}; - -#ifdef NONBLOCKING_RNG_AVAILABLE - -#ifdef CRYPTOPP_WIN32_AVAILABLE -/// \brief Wrapper for Microsoft crypto service provider -/// \sa \def USE_MS_CRYPTOAPI, \def USE_MS_CNGAPI -class CRYPTOPP_DLL MicrosoftCryptoProvider -{ -public: - /// \brief Construct a MicrosoftCryptoProvider - MicrosoftCryptoProvider(); - ~MicrosoftCryptoProvider(); - -// type HCRYPTPROV and BCRYPT_ALG_HANDLE, avoid #include -#if defined(USE_MS_CRYPTOAPI) -# if defined(__CYGWIN__) && defined(__x86_64__) - typedef unsigned long long ProviderHandle; -# elif defined(WIN64) || defined(_WIN64) - typedef unsigned __int64 ProviderHandle; -# else - typedef unsigned long ProviderHandle; -# endif -#elif defined(USE_MS_CNGAPI) - typedef void *PVOID; - typedef PVOID ProviderHandle; -#endif // USE_MS_CRYPTOAPI or USE_MS_CNGAPI - - /// \brief Retrieves the provider handle - /// \return CryptoAPI provider handle - /// \details If USE_MS_CRYPTOAPI is in effect, then CryptAcquireContext() - /// acquires then handle and CryptReleaseContext() releases the handle - /// upon destruction. If USE_MS_CNGAPI is in effect, then - /// BCryptOpenAlgorithmProvider() acquires then handle and - /// BCryptCloseAlgorithmProvider() releases the handle upon destruction. - ProviderHandle GetProviderHandle() const {return m_hProvider;} - -private: - ProviderHandle m_hProvider; -}; - -#if defined(CRYPTOPP_MSC_VERSION) && defined(USE_MS_CRYPTOAPI) -# pragma comment(lib, "advapi32.lib") -#endif - -#if defined(CRYPTOPP_MSC_VERSION) && defined(USE_MS_CNGAPI) -# pragma comment(lib, "bcrypt.lib") -#endif - -#endif // CRYPTOPP_WIN32_AVAILABLE - -/// \brief Wrapper class for /dev/random and /dev/srandom -/// \details Encapsulates CryptoAPI's CryptGenRandom() or CryptoNG's BCryptGenRandom() -/// on Windows, or /dev/urandom on Unix and compatibles. -class CRYPTOPP_DLL NonblockingRng : public RandomNumberGenerator -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "NonblockingRng"; } - - ~NonblockingRng(); - - /// \brief Construct a NonblockingRng - NonblockingRng(); - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - /// \details GenerateIntoBufferedTransformation() calls are routed to GenerateBlock(). - void GenerateBlock(byte *output, size_t size); - -protected: -#ifdef CRYPTOPP_WIN32_AVAILABLE - MicrosoftCryptoProvider m_Provider; -#else - int m_fd; -#endif -}; - -#endif - -#if defined(BLOCKING_RNG_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -/// \brief Wrapper class for /dev/random and /dev/srandom -/// \details Encapsulates /dev/random on Linux, OS X and Unix; and /dev/srandom on the BSDs. -/// \note On Linux the /dev/random interface is effectively deprecated. According to the -/// Kernel Crypto developers, /dev/urandom or getrandom(2) should be used instead. Also -/// see [RFC PATCH v12 3/4] Linux Random -/// Number Generator on the kernel-crypto mailing list. -class CRYPTOPP_DLL BlockingRng : public RandomNumberGenerator -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "BlockingRng"; } - - ~BlockingRng(); - - /// \brief Construct a BlockingRng - BlockingRng(); - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - /// \details GenerateIntoBufferedTransformation() calls are routed to GenerateBlock(). - void GenerateBlock(byte *output, size_t size); - -protected: - int m_fd; -}; - -#endif - -/// OS_GenerateRandomBlock -/// \brief Generate random array of bytes -/// \param blocking specifies whether a blocking or non-blocking generator should be used -/// \param output the byte buffer -/// \param size the length of the buffer, in bytes -/// \details OS_GenerateRandomBlock() uses the underlying operating system's -/// random number generator. On Windows, CryptGenRandom() is called using NonblockingRng. -/// \details On Unix and compatibles, /dev/urandom is called if blocking is false using -/// NonblockingRng. If blocking is true, then either /dev/randomd or /dev/srandom is used -/// by way of BlockingRng, if available. -CRYPTOPP_DLL void CRYPTOPP_API OS_GenerateRandomBlock(bool blocking, byte *output, size_t size); - -/// \brief Automatically Seeded Randomness Pool -/// \details This class seeds itself using an operating system provided RNG. -/// AutoSeededRandomPool was suggested by Leonard Janke. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -class CRYPTOPP_DLL AutoSeededRandomPool : public RandomPool -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "AutoSeededRandomPool"; } - - ~AutoSeededRandomPool() {} - - /// \brief Construct an AutoSeededRandomPool - /// \param blocking controls seeding with BlockingRng or NonblockingRng - /// \param seedSize the size of the seed, in bytes - /// \details Use blocking to choose seeding with BlockingRng or NonblockingRng. - /// The parameter is ignored if only one of these is available. - explicit AutoSeededRandomPool(bool blocking = false, unsigned int seedSize = 32) - {Reseed(blocking, seedSize);} - - /// \brief Reseed an AutoSeededRandomPool - /// \param blocking controls seeding with BlockingRng or NonblockingRng - /// \param seedSize the size of the seed, in bytes - void Reseed(bool blocking = false, unsigned int seedSize = 32); -}; - -/// \tparam BLOCK_CIPHER a block cipher -/// \brief Automatically Seeded X9.17 RNG -/// \details AutoSeededX917RNG is from ANSI X9.17 Appendix C, seeded using an OS provided RNG. -/// If 3-key TripleDES (DES_EDE3) is used, then its a X9.17 conforming generator. If AES is -/// used, then its a X9.31 conforming generator. -/// \details Though ANSI X9 prescribes 3-key TripleDES, the template parameter BLOCK_CIPHER -/// can be any BlockTransformation derived class. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \sa X917RNG, DefaultAutoSeededRNG -template -class AutoSeededX917RNG : public RandomNumberGenerator, public NotCopyable -{ -public: - static std::string StaticAlgorithmName() { - return std::string("AutoSeededX917RNG(") + BLOCK_CIPHER::StaticAlgorithmName() + std::string(")"); - } - - ~AutoSeededX917RNG() {} - - /// \brief Construct an AutoSeededX917RNG - /// \param blocking controls seeding with BlockingRng or NonblockingRng - /// \param autoSeed controls auto seeding of the generator - /// \details Use blocking to choose seeding with BlockingRng or NonblockingRng. - /// The parameter is ignored if only one of these is available. - /// \sa X917RNG - explicit AutoSeededX917RNG(bool blocking = false, bool autoSeed = true) - {if (autoSeed) Reseed(blocking);} - - /// \brief Reseed an AutoSeededX917RNG - /// \param blocking controls seeding with BlockingRng or NonblockingRng - /// \param input additional entropy to add to the generator - /// \param length the size of the additional entropy, in bytes - /// \details Internally, the generator uses SHA256 to extract the entropy from - /// from the seed and then stretch the material for the block cipher's key - /// and initialization vector. - void Reseed(bool blocking = false, const byte *input = NULLPTR, size_t length = 0); - - /// \brief Deterministically reseed an AutoSeededX917RNG for testing - /// \param key the key to use for the deterministic reseeding - /// \param keylength the size of the key, in bytes - /// \param seed the seed to use for the deterministic reseeding - /// \param timeVector a time vector to use for deterministic reseeding - /// \details This is a testing interface for testing purposes, and should \a NOT - /// be used in production. - void Reseed(const byte *key, size_t keylength, const byte *seed, const byte *timeVector); - - bool CanIncorporateEntropy() const {return true;} - void IncorporateEntropy(const byte *input, size_t length) {Reseed(false, input, length);} - void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword length) - {m_rng->GenerateIntoBufferedTransformation(target, channel, length);} - - std::string AlgorithmProvider() const; - -private: - member_ptr m_rng; -}; - -template -void AutoSeededX917RNG::Reseed(const byte *key, size_t keylength, const byte *seed, const byte *timeVector) -{ - m_rng.reset(new X917RNG(new typename BLOCK_CIPHER::Encryption(key, keylength), seed, timeVector)); -} - -template -void AutoSeededX917RNG::Reseed(bool blocking, const byte *input, size_t length) -{ - enum {BlockSize=BLOCK_CIPHER::BLOCKSIZE}; - enum {KeyLength=BLOCK_CIPHER::DEFAULT_KEYLENGTH}; - enum {SeedSize=EnumToInt(BlockSize)+EnumToInt(KeyLength)}; - - SecByteBlock seed(SeedSize), temp(SeedSize); - const byte label[] = "X9.17 key generation"; - const byte *key=NULLPTR; - - do - { - OS_GenerateRandomBlock(blocking, temp, temp.size()); - - HKDF hkdf; - hkdf.DeriveKey( - seed, seed.size(), // derived secret - temp, temp.size(), // instance secret - input, length, // user secret - label, 20 // unique label - ); - - key = seed + BlockSize; - } // check that seed and key don't have same value - while (std::memcmp(key, seed, STDMIN((size_t)BlockSize, (size_t)KeyLength)) == 0); - - Reseed(key, KeyLength, seed, NULLPTR); -} - -template -std::string AutoSeededX917RNG::AlgorithmProvider() const -{ - // Hack for now... We need to instantiate one - typename BLOCK_CIPHER::Encryption bc; - return bc.AlgorithmProvider(); -} - -CRYPTOPP_DLL_TEMPLATE_CLASS AutoSeededX917RNG; - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief A typedef providing a default generator -/// \details DefaultAutoSeededRNG is a typedef of either AutoSeededX917RNG or AutoSeededRandomPool. -/// If CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 is defined, then DefaultAutoSeededRNG is -/// AutoSeededX917RNG. Otherwise, DefaultAutoSeededRNG is AutoSeededRandomPool. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -class DefaultAutoSeededRNG {} -#else -// AutoSeededX917RNG in FIPS mode, otherwise it's AutoSeededRandomPool -#if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 -typedef AutoSeededX917RNG DefaultAutoSeededRNG; -#else -typedef AutoSeededRandomPool DefaultAutoSeededRNG; -#endif -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -NAMESPACE_END - -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ossig.h b/third_party/cryptoppwin/include/cryptopp/ossig.h deleted file mode 100644 index ce23b73d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ossig.h +++ /dev/null @@ -1,128 +0,0 @@ -// ossig.h - written and placed in the public domain by Jeffrey Walton -// -/// \file ossig.h -/// \brief Utility class for trapping OS signals. -/// \since Crypto++ 5.6.5 - -#ifndef CRYPTOPP_OS_SIGNAL_H -#define CRYPTOPP_OS_SIGNAL_H - -#include "config.h" - -#if defined(UNIX_SIGNALS_AVAILABLE) -# include -#endif - -NAMESPACE_BEGIN(CryptoPP) - -// ************** Unix and Linux compatibles *************** - -#if defined(UNIX_SIGNALS_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -/// \brief Signal handler function pointer -/// \details SignalHandlerFn is provided as a stand alone function pointer with external "C" linkage -/// \sa SignalHandler, NullSignalHandler -extern "C" { - typedef void (*SignalHandlerFn) (int); -} - -/// \brief Null signal handler function -/// \param unused the signal number -/// \details NullSignalHandler is provided as a stand alone function with external "C" linkage -/// and not a static member function due to the member function's implicit -/// external "C++" linkage. -/// \sa SignalHandler, SignalHandlerFn -extern "C" { - inline void NullSignalHandler(int unused) {CRYPTOPP_UNUSED(unused);} -} - -/// Signal handler for Linux and Unix compatibles -/// \tparam S Signal number -/// \tparam O Flag indicating if an existing handler should be overwritten -/// \details SignalHandler() can be used to install a signal handler with the signature -/// void handler_fn(int). If SignalHandlerFn is not NULL, then -/// the sigaction is set to the function and the sigaction flags is set to the flags. -/// If SignalHandlerFn is NULL, then a default handler is installed -/// using sigaction flags set to 0. The default handler only returns from the call. -/// \details Upon destruction the previous signal handler is restored if the former signal handler -/// was replaced. -/// \details On Cygwin systems using Newlib, you should define _XOPEN_SOURCE=700 or -/// _GNU_SOURCE; or use -std=gnu++03, -std=gnu++11, or similar. If -/// you compile with -std=c++03, -std=c++11 or similar, then define -/// _XOPEN_SOURCE=700. -/// \warning Do not use SignalHandler in a code block that uses setjmp or longjmp -/// because the destructor may not run. -/// \since Crypto++ 5.6.5 -/// \sa NullSignalHandler, SignalHandlerFn, \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT", DebugTrapHandler -template -struct SignalHandler -{ - /// \brief Construct a signal handler - /// \param pfn Pointer to a signal handler function - /// \param flags Flags to use with the signal handler - /// \details SignalHandler() installs a signal handler with the signature - /// void handler_fn(int). If SignalHandlerFn is not NULL, then - /// the sigaction is set to the function and the sigaction flags is set to the flags. - /// If SignalHandlerFn is NULL, then a default handler is installed - /// using sigaction flags set to 0. The default handler only returns from the call. - /// \details Upon destruction the previous signal handler is restored if the former signal handler - /// was overwritten. - /// \details On Cygwin systems using Newlib, you should define _XOPEN_SOURCE=700 or - /// _GNU_SOURCE; or use -std=gnu++03, -std=gnu++11, or similar. If - /// you compile with -std=c++03, -std=c++11 or similar, then define - /// _XOPEN_SOURCE=700. - /// \warning Do not use SignalHandler in a code block that uses setjmp or longjmp - /// because the destructor may not run. setjmp is why cpu.cpp does not use SignalHandler - /// during CPU feature testing. - /// \since Crypto++ 5.6.5 - SignalHandler(SignalHandlerFn pfn = NULLPTR, int flags = 0) : m_installed(false) - { - // http://pubs.opengroup.org/onlinepubs/007908799/xsh/sigaction.html - struct sigaction new_handler; - - do - { - int ret = 0; - - ret = sigaction (S, 0, &m_old); - if (ret != 0) break; // Failed - - // Don't step on another's handler if Overwrite=false - if (m_old.sa_handler != 0 && !O) break; - - // Cygwin/Newlib requires -D_XOPEN_SOURCE=700 - ret = sigemptyset (&new_handler.sa_mask); - if (ret != 0) break; // Failed - - new_handler.sa_handler = (pfn ? pfn : &NullSignalHandler); - new_handler.sa_flags = (pfn ? flags : 0); - - // Install it - ret = sigaction (S, &new_handler, 0); - if (ret != 0) break; // Failed - - m_installed = true; - - } while(0); - } - - ~SignalHandler() - { - if (m_installed) - sigaction (S, &m_old, 0); - } - -private: - struct sigaction m_old; - bool m_installed; - -private: - // Not copyable - SignalHandler(const SignalHandler &); - void operator=(const SignalHandler &); -}; -#endif - -NAMESPACE_END - -#endif // CRYPTOPP_OS_SIGNAL_H diff --git a/third_party/cryptoppwin/include/cryptopp/padlkrng.h b/third_party/cryptoppwin/include/cryptopp/padlkrng.h deleted file mode 100644 index 7c6b0b33..00000000 --- a/third_party/cryptoppwin/include/cryptopp/padlkrng.h +++ /dev/null @@ -1,138 +0,0 @@ -// via-rng.h - written and placed in public domain by Jeffrey Walton - -/// \file padlkrng.h -/// \brief Classes for VIA Padlock RNG -/// \since Crypto++ 6.0 -/// \sa VIA -/// Padlock on the Crypto++ wiki - -#ifndef CRYPTOPP_PADLOCK_RNG_H -#define CRYPTOPP_PADLOCK_RNG_H - -#include "cryptlib.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Exception thrown when a PadlockRNG generator encounters -/// a generator related error. -/// \since Crypto++ 6.0 -class PadlockRNG_Err : public Exception -{ -public: - PadlockRNG_Err(const std::string &operation) - : Exception(OTHER_ERROR, "PadlockRNG: " + operation + " operation failed") {} - PadlockRNG_Err(const std::string &component, const std::string &message) - : Exception(OTHER_ERROR, component + ": " + message) {} -}; - -/// \brief Hardware generated random numbers using VIA XSTORE -/// \details Some VIA processors provide a Security Engine called Padlock. The Padlock -/// Security Engine provides AES, SHA and a RNG. The PadlockRNG class provides access -/// to the RNG. -/// \details The VIA generator uses an 8 byte FIFO buffer for random numbers. The -/// generator can be configured to discard bits from the buffer to resist analysis. -/// The divisor controls the number of bytes discarded. The formula for -/// the discard amount is 2**divisor - 1. When divisor=0 no bits -/// are discarded and the entire 8 byte buffer is read. If divisor=3 then -/// 7 bytes are discarded and 1 byte is read. TheVIA SDK samples use divisor=1. -/// \details Cryptography Research, Inc (CRI) audited the Padlock Security Engine -/// in 2003. CRI provided recommendations to operate the generator for secure and -/// non-secure applications. Additionally, the Programmers Guide and SDK provided a -/// different configuration in the sample code. -/// \details You can operate the generator according to CRI recommendations by setting -/// divisor, reading one word (or partial word) at a time from the FIFO, and -/// then inspecting the MSR after each read. -/// \details The audit report with recommendations is available on the Crypto++ wiki -/// at VIA Padlock. -/// \sa MaurerRandomnessTest() for random bit generators -/// \since Crypto++ 6.0 -class PadlockRNG : public RandomNumberGenerator -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "PadlockRNG"; } - - virtual ~PadlockRNG() {} - - /// \brief Construct a PadlockRNG generator - /// \param divisor the XSTORE divisor - /// \details Some VIA processors provide a Security Engine called Padlock. The Padlock - /// Security Engine provides AES, SHA and a RNG. The PadlockRNG class provides access - /// to the RNG. - /// \details The VIA generator uses an 8 byte FIFO buffer for random numbers. The - /// generator can be configured to discard bits from the buffer to resist analysis. - /// The divisor controls the number of bytes discarded. The formula for - /// the discard amount is 2**divisor - 1. When divisor=0 no bits - /// are discarded and the entire 8 byte buffer is read. If divisor=3 then - /// 7 bytes are discarded and 1 byte is read. VIA SDK samples use divisor=1. - /// \details Cryptography Research, Inc (CRI) audited the Padlock Security Engine - /// in 2003. CRI provided recommendations to operate the generator for secure and - /// non-secure applications. Additionally, the Programmers SDK provided a different - /// configuration in the sample code. - /// \details The audit report with recommendations is available on the Crypto++ wiki - /// at VIA Padlock. - /// \sa SetDivisor, GetDivisor - PadlockRNG(word32 divisor=1); - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - virtual void GenerateBlock(byte *output, size_t size); - - /// \brief Generate and discard n bytes - /// \param n the number of bytes to generate and discard - /// \details the Padlock generator discards words, not bytes. If n is - /// not a multiple of a 32-bit word, then it is rounded up to - /// that size. - virtual void DiscardBytes(size_t n); - - /// \brief Update RNG state with additional unpredictable values - /// \param input unused - /// \param length unused - /// \details The operation is a nop for this generator. - virtual void IncorporateEntropy(const byte *input, size_t length) - { - // Override to avoid the base class' throw. - CRYPTOPP_UNUSED(input); CRYPTOPP_UNUSED(length); - } - - std::string AlgorithmProvider() const; - - /// \brief Set the XSTORE divisor - /// \param divisor the XSTORE divisor - /// \return the old XSTORE divisor - word32 SetDivisor(word32 divisor) - { - word32 old = m_divisor; - m_divisor = DivisorHelper(divisor); - return old; - } - - /// \brief Get the XSTORE divisor - /// \return the current XSTORE divisor - word32 GetDivisor() const - { - return m_divisor; - } - - /// \brief Get the MSR for the last operation - /// \return the MSR for the last read operation - word32 GetMSR() const - { - return m_msr; - } - -protected: - inline word32 DivisorHelper(word32 divisor) - { - return divisor > 3 ? 3 : divisor; - } - -private: - FixedSizeAlignedSecBlock m_buffer; - word32 m_divisor, m_msr; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_PADLOCK_RNG_H diff --git a/third_party/cryptoppwin/include/cryptopp/panama.h b/third_party/cryptoppwin/include/cryptopp/panama.h deleted file mode 100644 index 9c10f82c..00000000 --- a/third_party/cryptoppwin/include/cryptopp/panama.h +++ /dev/null @@ -1,169 +0,0 @@ -// panama.h - originally written and placed in the public domain by Wei Dai - -/// \file panama.h -/// \brief Classes for Panama hash and stream cipher - -#ifndef CRYPTOPP_PANAMA_H -#define CRYPTOPP_PANAMA_H - -#include "strciphr.h" -#include "iterhash.h" -#include "secblock.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler error with .intel_syntax -//#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -//# define CRYPTOPP_DISABLE_PANAMA_ASM -//#endif - -// https://github.com/weidai11/cryptopp/issues/758 -#define CRYPTOPP_DISABLE_PANAMA_ASM 1 - -NAMESPACE_BEGIN(CryptoPP) - -// Base class, do not use directly -template -class CRYPTOPP_NO_VTABLE Panama -{ -public: - virtual ~Panama() {} - std::string AlgorithmProvider() const; - void Reset(); - void Iterate(size_t count, const word32 *p=NULLPTR, byte *output=NULLPTR, const byte *input=NULLPTR, KeystreamOperation operation=WRITE_KEYSTREAM); - -protected: - typedef word32 Stage[8]; - CRYPTOPP_CONSTANT(STAGES = 32); - - FixedSizeAlignedSecBlock m_state; -}; - -namespace Weak { -/// \brief Panama hash -/// \sa Panama Hash -template -class PanamaHash : protected Panama, public AlgorithmImpl, PanamaHash > -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = 32); - virtual ~PanamaHash() {} - PanamaHash() {Panama::Reset();} - unsigned int DigestSize() const {return DIGESTSIZE;} - void TruncatedFinal(byte *hash, size_t size); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return B::ToEnum() == BIG_ENDIAN_ORDER ? "Panama-BE" : "Panama-LE";} - std::string AlgorithmProvider() const {return Panama::AlgorithmProvider();} // Fix https://github.com/weidai11/cryptopp/issues/801 - -protected: - void Init() {Panama::Reset();} - void HashEndianCorrectedBlock(const word32 *data) {this->Iterate(1, data);} // push - size_t HashMultipleBlocks(const word32 *input, size_t length); - word32* StateBuf() {return NULLPTR;} - - FixedSizeSecBlock m_buf; -}; -} - -/// \brief MAC construction using a hermetic hash function -template -class HermeticHashFunctionMAC : public AlgorithmImpl > >, T_Info> -{ -public: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) - { - CRYPTOPP_UNUSED(params); - - m_key.Assign(key, length); - Restart(); - } - - void Restart() - { - m_hash.Restart(); - m_keyed = false; - } - - void Update(const byte *input, size_t length) - { - if (!m_keyed) - KeyHash(); - m_hash.Update(input, length); - } - - void TruncatedFinal(byte *digest, size_t digestSize) - { - if (!m_keyed) - KeyHash(); - m_hash.TruncatedFinal(digest, digestSize); - m_keyed = false; - } - - unsigned int DigestSize() const - {return m_hash.DigestSize();} - unsigned int BlockSize() const - {return m_hash.BlockSize();} - unsigned int OptimalBlockSize() const - {return m_hash.OptimalBlockSize();} - unsigned int OptimalDataAlignment() const - {return m_hash.OptimalDataAlignment();} - -protected: - void KeyHash() - { - m_hash.Update(m_key, m_key.size()); - m_keyed = true; - } - - T_Hash m_hash; - bool m_keyed; - SecByteBlock m_key; -}; - -namespace Weak { -/// \brief Panama message authentication code -template -class PanamaMAC : public HermeticHashFunctionMAC > -{ -public: - PanamaMAC() {} - PanamaMAC(const byte *key, unsigned int length) - {this->SetKey(key, length);} -}; -} - -/// \brief Panama stream cipher information -template -struct PanamaCipherInfo : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 32> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return B::ToEnum() == BIG_ENDIAN_ORDER ? "Panama-BE" : "Panama-LE";} -}; - -/// \brief Panama stream cipher operation -template -class PanamaCipherPolicy : public AdditiveCipherConcretePolicy, - public PanamaCipherInfo, - protected Panama -{ -protected: - virtual ~PanamaCipherPolicy() {} - std::string AlgorithmProvider() const; - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - bool CipherIsRandomAccess() const {return false;} - void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length); - unsigned int GetAlignment() const; - - FixedSizeSecBlock m_key; - FixedSizeSecBlock m_buf; -}; - -/// \brief Panama stream cipher -/// \sa Panama Stream Cipher -template -struct PanamaCipher : public PanamaCipherInfo, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal, AdditiveCipherTemplate<> >, PanamaCipherInfo > Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/pch.h b/third_party/cryptoppwin/include/cryptopp/pch.h deleted file mode 100644 index 2cd163ea..00000000 --- a/third_party/cryptoppwin/include/cryptopp/pch.h +++ /dev/null @@ -1,31 +0,0 @@ -// pch.h - originally written and placed in the public domain by Wei Dai - -/// \file pch.h -/// \brief Precompiled header file -/// \details The precompiled header files are used Windows. - -#ifndef CRYPTOPP_PCH_H -#define CRYPTOPP_PCH_H - -# ifdef CRYPTOPP_GENERATE_X64_MASM - #include "cpu.h" - -# else - #include "config.h" - - #ifdef USE_PRECOMPILED_HEADERS - #include "simple.h" - #include "secblock.h" - #include "misc.h" - #include "smartptr.h" - #include "stdcpp.h" - #endif -# endif - -// Enable file and line numbers, if available. -// #if defined(_MSC_VER) && defined(_DEBUG) && defined(USE_PRECOMPILED_HEADERS) -// # define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) -// # define new DEBUG_NEW -// #endif - -#endif // CRYPTOPP_PCH_H diff --git a/third_party/cryptoppwin/include/cryptopp/pkcspad.h b/third_party/cryptoppwin/include/cryptopp/pkcspad.h deleted file mode 100644 index f112c521..00000000 --- a/third_party/cryptoppwin/include/cryptopp/pkcspad.h +++ /dev/null @@ -1,123 +0,0 @@ -// pkcspad.h - originally written and placed in the public domain by Wei Dai - -/// \file pkcspad.h -/// \brief Classes for PKCS padding schemes -/// \details PKCS #1 v1.5, v2.0 and P1363a allow MD2, MD5, SHA1, SHA224, SHA256, SHA384, -/// SHA512, Tiger and RipeMd-160 to be instantiated. - -#ifndef CRYPTOPP_PKCSPAD_H -#define CRYPTOPP_PKCSPAD_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "hashfwd.h" - -#ifdef CRYPTOPP_IS_DLL -#include "sha.h" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief PKCS #1 v1.5 Encryption Padding Scheme -/// \sa EME-PKCS1-v1_5 -class PKCS_EncryptionPaddingScheme : public PK_EncryptionMessageEncodingMethod -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "EME-PKCS1-v1_5";} - - size_t MaxUnpaddedLength(size_t paddedLength) const; - void Pad(RandomNumberGenerator &rng, const byte *raw, size_t inputLength, byte *padded, size_t paddedLength, const NameValuePairs ¶meters) const; - DecodingResult Unpad(const byte *padded, size_t paddedLength, byte *raw, const NameValuePairs ¶meters) const; -}; - -/// \brief PKCS #1 decoration data structure -template class PKCS_DigestDecoration -{ -public: - static const byte decoration[]; - static const unsigned int length; -}; - -// PKCS_DigestDecoration can be instantiated with the following -// classes as specified in PKCS #1 v2.0 and P1363a -// SHA1, SHA224, SHA256, SHA384, SHA512, Tiger, RIPEMD160, MD2, MD5 - -#if defined(CRYPTOPP_IS_DLL) -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -// http://github.com/weidai11/cryptopp/issues/517 -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -CRYPTOPP_DLL_TEMPLATE_CLASS PKCS_DigestDecoration; -#endif - -// https://github.com/weidai11/cryptopp/issues/300 and -// https://github.com/weidai11/cryptopp/issues/533 -#if defined(__clang__) -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; - -// http://github.com/weidai11/cryptopp/issues/517 -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; - -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -template<> const byte PKCS_DigestDecoration::decoration[]; -template<> const unsigned int PKCS_DigestDecoration::length; -#endif - -/// \brief PKCS #1 v1.5 Signature Encoding Scheme -/// \sa EMSA-PKCS1-v1_5 -class CRYPTOPP_DLL PKCS1v15_SignatureMessageEncodingMethod : public PK_DeterministicSignatureMessageEncodingMethod -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "EMSA-PKCS1-v1_5";} - - size_t MinRepresentativeBitLength(size_t hashIdentifierSize, size_t digestSize) const - {return 8 * (digestSize + hashIdentifierSize + 10);} - - void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; - - struct HashIdentifierLookup - { - template struct HashIdentifierLookup2 - { - static HashIdentifier Lookup() - { - return HashIdentifier(PKCS_DigestDecoration::decoration, PKCS_DigestDecoration::length); - } - }; - }; -}; - -/// \brief PKCS #1 version 1.5, for use with RSAES and RSASS -/// \dontinclude pkcspad.h - -struct PKCS1v15 : public SignatureStandard, public EncryptionStandard -{ - typedef PKCS_EncryptionPaddingScheme EncryptionMessageEncodingMethod; - typedef PKCS1v15_SignatureMessageEncodingMethod SignatureMessageEncodingMethod; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/poly1305.h b/third_party/cryptoppwin/include/cryptopp/poly1305.h deleted file mode 100644 index 19e712bd..00000000 --- a/third_party/cryptoppwin/include/cryptopp/poly1305.h +++ /dev/null @@ -1,241 +0,0 @@ -// poly1305.h - written and placed in the public domain by Jeffrey Walton and Jean-Pierre Munch -// Based on Andy Polyakov's Base-2^26 scalar multiplication implementation. -// For more information, see https://www.openssl.org/~appro/cryptogams/. - -// The library added Bernstein's Poly1305 classes at Crypto++ 6.0. The IETF -// uses a slightly different implementation than Bernstein, and the IETF -// classes were added at Crypto++ 8.1. We wanted to maintain ABI compatibility -// at the 8.1 release so the original Poly1305 classes were not disturbed. -// Instead new classes were added for IETF Poly1305. The back-end implementation -// shares code as expected, however. - -/// \file poly1305.h -/// \brief Classes for Poly1305 message authentication code -/// \details Poly1305-AES is a state-of-the-art message-authentication code suitable for a wide -/// variety of applications. Poly1305-AES computes a 16-byte authenticator of a variable-length -/// message, using a 16-byte AES key, a 16-byte additional key, and a 16-byte nonce. -/// \details Crypto++ also supplies the IETF's version of Poly1305. It is a slightly different -/// algorithm than Bernstein's version. -/// \sa Daniel J. Bernstein The Poly1305-AES -/// Message-Authentication Code (20050329), RFC -/// 8439, ChaCha20 and Poly1305 for IETF Protocols and Andy Polyakov Poly1305 Revised -/// \since Poly1305 since Crypto++ 6.0, Poly1305TLS since Crypto++ 8.1 - -#ifndef CRYPTOPP_POLY1305_H -#define CRYPTOPP_POLY1305_H - -#include "cryptlib.h" -#include "seckey.h" -#include "secblock.h" -#include "argnames.h" -#include "algparam.h" - -NAMESPACE_BEGIN(CryptoPP) - -////////////////////////////// Bernstein Poly1305 ////////////////////////////// - -/// \brief Poly1305 message authentication code base class -/// \tparam T BlockCipherDocumentation derived class with 16-byte key and 16-byte blocksize -/// \details Poly1305_Base is the base class of Bernstein's Poly1305 algorithm. -/// \since Crypto++ 6.0 -template -class CRYPTOPP_NO_VTABLE Poly1305_Base : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 16>, public MessageAuthenticationCode -{ - CRYPTOPP_COMPILE_ASSERT(T::DEFAULT_KEYLENGTH == 16); - CRYPTOPP_COMPILE_ASSERT(T::BLOCKSIZE == 16); - -public: - static std::string StaticAlgorithmName() {return std::string("Poly1305(") + T::StaticAlgorithmName() + ")";} - - CRYPTOPP_CONSTANT(DIGESTSIZE=T::BLOCKSIZE); - CRYPTOPP_CONSTANT(BLOCKSIZE=T::BLOCKSIZE); - - virtual ~Poly1305_Base() {} - Poly1305_Base() : m_idx(0), m_used(true) {} - - void Resynchronize (const byte *iv, int ivLength=-1); - void GetNextIV (RandomNumberGenerator &rng, byte *iv); - - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *mac, size_t size); - void Restart(); - - unsigned int BlockSize() const {return BLOCKSIZE;} - unsigned int DigestSize() const {return DIGESTSIZE;} - - std::string AlgorithmProvider() const; - -protected: - // TODO: No longer needed. Remove at next major version bump - void HashBlocks(const byte *input, size_t length, word32 padbit); - void HashFinal(byte *mac, size_t length); - - typename T::Encryption m_cipher; - - // Accumulated hash, clamped r-key, and encrypted nonce - FixedSizeAlignedSecBlock m_h; - FixedSizeAlignedSecBlock m_r; - FixedSizeAlignedSecBlock m_n; - - // Accumulated message bytes and index - FixedSizeAlignedSecBlock m_acc, m_nk; - size_t m_idx; - - // Track nonce reuse; assert in debug but continue - bool m_used; -}; - -/// \brief Poly1305 message authentication code -/// \tparam T class derived from BlockCipherDocumentation with 16-byte key and 16-byte blocksize -/// \details Poly1305-AES is a state-of-the-art message-authentication code suitable for a wide -/// variety of applications. Poly1305-AES computes a 16-byte authenticator of a variable-length -/// message, using a 16-byte AES key, a 16-byte additional key, and a 16-byte nonce. -/// \details The key is 32 bytes and a concatenation key = {k,s}, where -/// k is the AES key and r is additional key that gets clamped. -/// The key is clamped internally so there is no need to perform the operation -/// before setting the key. -/// \details Each message must have a unique security context, which means either the key or nonce -/// must be changed after each message. It can be accomplished in one of two ways. First, you -/// can create a new Poly1305 object each time its needed. -///
  SecByteBlock key(32), nonce(16);
-///   prng.GenerateBlock(key, key.size());
-///   prng.GenerateBlock(nonce, nonce.size());
-///
-///   Poly1305 poly1305(key, key.size(), nonce, nonce.size());
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-/// -/// \details Second, you can create a Poly1305 object, reuse the key, and set a fresh nonce -/// for each message. The second and subsequent nonces can be generated using GetNextIV(). -///
  SecByteBlock key(32), nonce(16);
-///   prng.GenerateBlock(key, key.size());
-///   prng.GenerateBlock(nonce, nonce.size());
-///
-///   // First message
-///   Poly1305 poly1305(key, key.size());
-///   poly1305.Resynchronize(nonce);
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-///
-///   // Second message
-///   poly1305.GetNextIV(prng, nonce);
-///   poly1305.Resynchronize(nonce);
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-///   ...
-/// \warning Each message must have a unique security context. The Poly1305 class does not -/// enforce a fresh key or nonce for each message. The source code will assert in debug -/// builds to alert of nonce reuse. No action is taken in release builds. -/// \sa Daniel J. Bernstein The Poly1305-AES -/// Message-Authentication Code (20050329) and Andy Polyakov Poly1305 Revised -/// \since Crypto++ 6.0 -template -class Poly1305 : public MessageAuthenticationCodeFinal > -{ -public: - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH=Poly1305_Base::DEFAULT_KEYLENGTH); - - /// \brief Construct a Poly1305 - Poly1305() {} - - /// \brief Construct a Poly1305 - /// \param key a byte array used to key the cipher - /// \param keyLength the size of the byte array, in bytes - /// \param nonce a byte array used to key the cipher - /// \param nonceLength the size of the byte array, in bytes - /// \details The key is 32 bytes and a concatenation key = {k,s}, where - /// k is the AES key and r is additional key that gets clamped. - /// The key is clamped internally so there is no need to perform the operation - /// before setting the key. - /// \details Each message requires a unique security context. You can use GetNextIV() - /// and Resynchronize() to set a new nonce under a key for a message. - Poly1305(const byte *key, size_t keyLength=DEFAULT_KEYLENGTH, const byte *nonce=NULLPTR, size_t nonceLength=0) - {this->SetKey(key, keyLength, MakeParameters(Name::IV(), ConstByteArrayParameter(nonce, nonceLength)));} -}; - -////////////////////////////// IETF Poly1305 ////////////////////////////// - -/// \brief Poly1305-TLS message authentication code base class -/// \details Poly1305TLS_Base is the base class of the IETF's Poly1305 algorithm. -/// \since Crypto++ 8.1 -class Poly1305TLS_Base : public FixedKeyLength<32>, public MessageAuthenticationCode -{ -public: - static std::string StaticAlgorithmName() {return std::string("Poly1305TLS");} - CRYPTOPP_CONSTANT(DIGESTSIZE=16); - CRYPTOPP_CONSTANT(BLOCKSIZE=16); - - virtual ~Poly1305TLS_Base() {} - Poly1305TLS_Base() {} - - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - void Update(const byte *input, size_t length); - void TruncatedFinal(byte *mac, size_t size); - void Restart(); - - unsigned int BlockSize() const {return BLOCKSIZE;} - unsigned int DigestSize() const {return DIGESTSIZE;} - -protected: - // Accumulated hash, clamped r-key, and encrypted nonce - FixedSizeAlignedSecBlock m_h; - FixedSizeAlignedSecBlock m_r; - FixedSizeAlignedSecBlock m_n; - - // Accumulated message bytes and index - FixedSizeAlignedSecBlock m_acc; - size_t m_idx; -}; - -/// \brief Poly1305-TLS message authentication code -/// \details This is the IETF's variant of Bernstein's Poly1305 from RFC 8439. -/// IETF Poly1305 is called Poly1305TLS in the Crypto++ library. It is -/// _slightly_ different from the Bernstein implementation. Poly1305-TLS -/// can be used for cipher suites -/// TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, -/// TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, and -/// TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256. -/// \details The key is 32 bytes and a concatenation key = {r,s}, where -/// r is additional key that gets clamped and s is the nonce. -/// The key is clamped internally so there is no need to perform the operation -/// before setting the key. -/// \details Each message must have a unique security context, which means the key -/// must be changed after each message. It can be accomplished in one of two ways. -/// First, you can create a new Poly1305 object with a new key each time its needed. -///
  SecByteBlock key(32);
-///   prng.GenerateBlock(key, key.size());
-///
-///   Poly1305TLS poly1305(key, key.size());
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-/// -/// \details Second, you can create a Poly1305 object, and use a new key for each -/// message. The keys can be generated directly using a RandomNumberGenerator() -/// derived class. -///
  SecByteBlock key(32);
-///   prng.GenerateBlock(key, key.size());
-///
-///   // First message
-///   Poly1305TLS poly1305(key, key.size());
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-///
-///   // Second message
-///   prng.GenerateBlock(key, key.size());
-///   poly1305.SetKey(key, key.size());
-///   poly1305.Update(...);
-///   poly1305.Final(...);
-///   ...
-/// \warning Each message must have a unique security context. The Poly1305-TLS class -/// does not enforce a fresh key or nonce for each message. -/// \since Crypto++ 8.1 -/// \sa MessageAuthenticationCode(), RFC -/// 8439, ChaCha20 and Poly1305 for IETF Protocols -DOCUMENTED_TYPEDEF(MessageAuthenticationCodeFinal, Poly1305TLS); - -NAMESPACE_END - -#endif // CRYPTOPP_POLY1305_H diff --git a/third_party/cryptoppwin/include/cryptopp/polynomi.h b/third_party/cryptoppwin/include/cryptopp/polynomi.h deleted file mode 100644 index 9a754ef3..00000000 --- a/third_party/cryptoppwin/include/cryptopp/polynomi.h +++ /dev/null @@ -1,463 +0,0 @@ -// polynomi.h - originally written and placed in the public domain by Wei Dai - -/// \file polynomi.h -/// \brief Classes for polynomial basis and operations - -#ifndef CRYPTOPP_POLYNOMI_H -#define CRYPTOPP_POLYNOMI_H - -#include "cryptlib.h" -#include "secblock.h" -#include "algebra.h" -#include "misc.h" - -#include -#include - -NAMESPACE_BEGIN(CryptoPP) - -/// represents single-variable polynomials over arbitrary rings -/*! \nosubgrouping */ -template class PolynomialOver -{ -public: - /// \name ENUMS, EXCEPTIONS, and TYPEDEFS - //@{ - /// division by zero exception - class DivideByZero : public Exception - { - public: - DivideByZero() : Exception(OTHER_ERROR, "PolynomialOver: division by zero") {} - }; - - /// specify the distribution for randomization functions - class RandomizationParameter - { - public: - RandomizationParameter(unsigned int coefficientCount, const typename T::RandomizationParameter &coefficientParameter ) - : m_coefficientCount(coefficientCount), m_coefficientParameter(coefficientParameter) {} - - private: - unsigned int m_coefficientCount; - typename T::RandomizationParameter m_coefficientParameter; - friend class PolynomialOver; - }; - - typedef T Ring; - typedef typename T::Element CoefficientType; - //@} - - /// \name CREATORS - //@{ - /// creates the zero polynomial - PolynomialOver() {} - - /// - PolynomialOver(const Ring &ring, unsigned int count) - : m_coefficients((size_t)count, ring.Identity()) {} - - /// copy constructor - PolynomialOver(const PolynomialOver &t) - : m_coefficients(t.m_coefficients.size()) {*this = t;} - - /// construct constant polynomial - PolynomialOver(const CoefficientType &element) - : m_coefficients(1, element) {} - - /// construct polynomial with specified coefficients, starting from coefficient of x^0 - template PolynomialOver(Iterator begin, Iterator end) - : m_coefficients(begin, end) {} - - /// convert from string - PolynomialOver(const char *str, const Ring &ring) {FromStr(str, ring);} - - /// convert from big-endian byte array - PolynomialOver(const byte *encodedPolynomialOver, unsigned int byteCount); - - /// convert from Basic Encoding Rules encoded byte array - explicit PolynomialOver(const byte *BEREncodedPolynomialOver); - - /// convert from BER encoded byte array stored in a BufferedTransformation object - explicit PolynomialOver(BufferedTransformation &bt); - - /// create a random PolynomialOver - PolynomialOver(RandomNumberGenerator &rng, const RandomizationParameter ¶meter, const Ring &ring) - {Randomize(rng, parameter, ring);} - //@} - - /// \name ACCESSORS - //@{ - /// the zero polynomial will return a degree of -1 - int Degree(const Ring &ring) const {return int(CoefficientCount(ring))-1;} - /// - unsigned int CoefficientCount(const Ring &ring) const; - /// return coefficient for x^i - CoefficientType GetCoefficient(unsigned int i, const Ring &ring) const; - //@} - - /// \name MANIPULATORS - //@{ - /// - PolynomialOver& operator=(const PolynomialOver& t); - - /// - void Randomize(RandomNumberGenerator &rng, const RandomizationParameter ¶meter, const Ring &ring); - - /// set the coefficient for x^i to value - void SetCoefficient(unsigned int i, const CoefficientType &value, const Ring &ring); - - /// - void Negate(const Ring &ring); - - /// - void swap(PolynomialOver &t); - //@} - - - /// \name BASIC ARITHMETIC ON POLYNOMIALS - //@{ - bool Equals(const PolynomialOver &t, const Ring &ring) const; - bool IsZero(const Ring &ring) const {return CoefficientCount(ring)==0;} - - PolynomialOver Plus(const PolynomialOver& t, const Ring &ring) const; - PolynomialOver Minus(const PolynomialOver& t, const Ring &ring) const; - PolynomialOver Inverse(const Ring &ring) const; - - PolynomialOver Times(const PolynomialOver& t, const Ring &ring) const; - PolynomialOver DividedBy(const PolynomialOver& t, const Ring &ring) const; - PolynomialOver Modulo(const PolynomialOver& t, const Ring &ring) const; - PolynomialOver MultiplicativeInverse(const Ring &ring) const; - bool IsUnit(const Ring &ring) const; - - PolynomialOver& Accumulate(const PolynomialOver& t, const Ring &ring); - PolynomialOver& Reduce(const PolynomialOver& t, const Ring &ring); - - /// - PolynomialOver Doubled(const Ring &ring) const {return Plus(*this, ring);} - /// - PolynomialOver Squared(const Ring &ring) const {return Times(*this, ring);} - - CoefficientType EvaluateAt(const CoefficientType &x, const Ring &ring) const; - - PolynomialOver& ShiftLeft(unsigned int n, const Ring &ring); - PolynomialOver& ShiftRight(unsigned int n, const Ring &ring); - - /// calculate r and q such that (a == d*q + r) && (0 <= degree of r < degree of d) - static void Divide(PolynomialOver &r, PolynomialOver &q, const PolynomialOver &a, const PolynomialOver &d, const Ring &ring); - //@} - - /// \name INPUT/OUTPUT - //@{ - std::istream& Input(std::istream &in, const Ring &ring); - std::ostream& Output(std::ostream &out, const Ring &ring) const; - //@} - -private: - void FromStr(const char *str, const Ring &ring); - - std::vector m_coefficients; -}; - -/// Polynomials over a fixed ring -/*! Having a fixed ring allows overloaded operators */ -template class PolynomialOverFixedRing : private PolynomialOver -{ - typedef PolynomialOver B; - typedef PolynomialOverFixedRing ThisType; - -public: - typedef T Ring; - typedef typename T::Element CoefficientType; - typedef typename B::DivideByZero DivideByZero; - typedef typename B::RandomizationParameter RandomizationParameter; - - /// \name CREATORS - //@{ - /// creates the zero polynomial - PolynomialOverFixedRing(unsigned int count = 0) : B(ms_fixedRing, count) {} - - /// copy constructor - PolynomialOverFixedRing(const ThisType &t) : B(t) {} - - explicit PolynomialOverFixedRing(const B &t) : B(t) {} - - /// construct constant polynomial - PolynomialOverFixedRing(const CoefficientType &element) : B(element) {} - - /// construct polynomial with specified coefficients, starting from coefficient of x^0 - template PolynomialOverFixedRing(Iterator first, Iterator last) - : B(first, last) {} - - /// convert from string - explicit PolynomialOverFixedRing(const char *str) : B(str, ms_fixedRing) {} - - /// convert from big-endian byte array - PolynomialOverFixedRing(const byte *encodedPoly, unsigned int byteCount) : B(encodedPoly, byteCount) {} - - /// convert from Basic Encoding Rules encoded byte array - explicit PolynomialOverFixedRing(const byte *BEREncodedPoly) : B(BEREncodedPoly) {} - - /// convert from BER encoded byte array stored in a BufferedTransformation object - explicit PolynomialOverFixedRing(BufferedTransformation &bt) : B(bt) {} - - /// create a random PolynomialOverFixedRing - PolynomialOverFixedRing(RandomNumberGenerator &rng, const RandomizationParameter ¶meter) : B(rng, parameter, ms_fixedRing) {} - - static const ThisType &Zero(); - static const ThisType &One(); - //@} - - /// \name ACCESSORS - //@{ - /// the zero polynomial will return a degree of -1 - int Degree() const {return B::Degree(ms_fixedRing);} - /// degree + 1 - unsigned int CoefficientCount() const {return B::CoefficientCount(ms_fixedRing);} - /// return coefficient for x^i - CoefficientType GetCoefficient(unsigned int i) const {return B::GetCoefficient(i, ms_fixedRing);} - /// return coefficient for x^i - CoefficientType operator[](unsigned int i) const {return B::GetCoefficient(i, ms_fixedRing);} - //@} - - /// \name MANIPULATORS - //@{ - /// - ThisType& operator=(const ThisType& t) {B::operator=(t); return *this;} - /// - ThisType& operator+=(const ThisType& t) {Accumulate(t, ms_fixedRing); return *this;} - /// - ThisType& operator-=(const ThisType& t) {Reduce(t, ms_fixedRing); return *this;} - /// - ThisType& operator*=(const ThisType& t) {return *this = *this*t;} - /// - ThisType& operator/=(const ThisType& t) {return *this = *this/t;} - /// - ThisType& operator%=(const ThisType& t) {return *this = *this%t;} - - /// - ThisType& operator<<=(unsigned int n) {ShiftLeft(n, ms_fixedRing); return *this;} - /// - ThisType& operator>>=(unsigned int n) {ShiftRight(n, ms_fixedRing); return *this;} - - /// set the coefficient for x^i to value - void SetCoefficient(unsigned int i, const CoefficientType &value) {B::SetCoefficient(i, value, ms_fixedRing);} - - /// - void Randomize(RandomNumberGenerator &rng, const RandomizationParameter ¶meter) {B::Randomize(rng, parameter, ms_fixedRing);} - - /// - void Negate() {B::Negate(ms_fixedRing);} - - void swap(ThisType &t) {B::swap(t);} - //@} - - /// \name UNARY OPERATORS - //@{ - /// - bool operator!() const {return CoefficientCount()==0;} - /// - ThisType operator+() const {return *this;} - /// - ThisType operator-() const {return ThisType(Inverse(ms_fixedRing));} - //@} - - /// \name BINARY OPERATORS - //@{ - /// - friend ThisType operator>>(ThisType a, unsigned int n) {return ThisType(a>>=n);} - /// - friend ThisType operator<<(ThisType a, unsigned int n) {return ThisType(a<<=n);} - //@} - - /// \name OTHER ARITHMETIC FUNCTIONS - //@{ - /// - ThisType MultiplicativeInverse() const {return ThisType(B::MultiplicativeInverse(ms_fixedRing));} - /// - bool IsUnit() const {return B::IsUnit(ms_fixedRing);} - - /// - ThisType Doubled() const {return ThisType(B::Doubled(ms_fixedRing));} - /// - ThisType Squared() const {return ThisType(B::Squared(ms_fixedRing));} - - CoefficientType EvaluateAt(const CoefficientType &x) const {return B::EvaluateAt(x, ms_fixedRing);} - - /// calculate r and q such that (a == d*q + r) && (0 <= r < abs(d)) - static void Divide(ThisType &r, ThisType &q, const ThisType &a, const ThisType &d) - {B::Divide(r, q, a, d, ms_fixedRing);} - //@} - - /// \name INPUT/OUTPUT - //@{ - /// - friend std::istream& operator>>(std::istream& in, ThisType &a) - {return a.Input(in, ms_fixedRing);} - /// - friend std::ostream& operator<<(std::ostream& out, const ThisType &a) - {return a.Output(out, ms_fixedRing);} - //@} - -private: - struct NewOnePolynomial - { - ThisType * operator()() const - { - return new ThisType(ms_fixedRing.MultiplicativeIdentity()); - } - }; - - static const Ring ms_fixedRing; -}; - -/// Ring of polynomials over another ring -template class RingOfPolynomialsOver : public AbstractEuclideanDomain > -{ -public: - typedef T CoefficientRing; - typedef PolynomialOver Element; - typedef typename Element::CoefficientType CoefficientType; - typedef typename Element::RandomizationParameter RandomizationParameter; - - RingOfPolynomialsOver(const CoefficientRing &ring) : m_ring(ring) {} - - Element RandomElement(RandomNumberGenerator &rng, const RandomizationParameter ¶meter) - {return Element(rng, parameter, m_ring);} - - bool Equal(const Element &a, const Element &b) const - {return a.Equals(b, m_ring);} - - const Element& Identity() const - {return this->result = m_ring.Identity();} - - const Element& Add(const Element &a, const Element &b) const - {return this->result = a.Plus(b, m_ring);} - - Element& Accumulate(Element &a, const Element &b) const - {a.Accumulate(b, m_ring); return a;} - - const Element& Inverse(const Element &a) const - {return this->result = a.Inverse(m_ring);} - - const Element& Subtract(const Element &a, const Element &b) const - {return this->result = a.Minus(b, m_ring);} - - Element& Reduce(Element &a, const Element &b) const - {return a.Reduce(b, m_ring);} - - const Element& Double(const Element &a) const - {return this->result = a.Doubled(m_ring);} - - const Element& MultiplicativeIdentity() const - {return this->result = m_ring.MultiplicativeIdentity();} - - const Element& Multiply(const Element &a, const Element &b) const - {return this->result = a.Times(b, m_ring);} - - const Element& Square(const Element &a) const - {return this->result = a.Squared(m_ring);} - - bool IsUnit(const Element &a) const - {return a.IsUnit(m_ring);} - - const Element& MultiplicativeInverse(const Element &a) const - {return this->result = a.MultiplicativeInverse(m_ring);} - - const Element& Divide(const Element &a, const Element &b) const - {return this->result = a.DividedBy(b, m_ring);} - - const Element& Mod(const Element &a, const Element &b) const - {return this->result = a.Modulo(b, m_ring);} - - void DivisionAlgorithm(Element &r, Element &q, const Element &a, const Element &d) const - {Element::Divide(r, q, a, d, m_ring);} - - class InterpolationFailed : public Exception - { - public: - InterpolationFailed() : Exception(OTHER_ERROR, "RingOfPolynomialsOver: interpolation failed") {} - }; - - Element Interpolate(const CoefficientType x[], const CoefficientType y[], unsigned int n) const; - - // a faster version of Interpolate(x, y, n).EvaluateAt(position) - CoefficientType InterpolateAt(const CoefficientType &position, const CoefficientType x[], const CoefficientType y[], unsigned int n) const; -/* - void PrepareBulkInterpolation(CoefficientType *w, const CoefficientType x[], unsigned int n) const; - void PrepareBulkInterpolationAt(CoefficientType *v, const CoefficientType &position, const CoefficientType x[], const CoefficientType w[], unsigned int n) const; - CoefficientType BulkInterpolateAt(const CoefficientType y[], const CoefficientType v[], unsigned int n) const; -*/ -protected: - void CalculateAlpha(std::vector &alpha, const CoefficientType x[], const CoefficientType y[], unsigned int n) const; - - CoefficientRing m_ring; -}; - -template -void PrepareBulkPolynomialInterpolation(const Ring &ring, Element *w, const Element x[], unsigned int n); -template -void PrepareBulkPolynomialInterpolationAt(const Ring &ring, Element *v, const Element &position, const Element x[], const Element w[], unsigned int n); -template -Element BulkPolynomialInterpolateAt(const Ring &ring, const Element y[], const Element v[], unsigned int n); - -/// -template -inline bool operator==(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return a.Equals(b, a.ms_fixedRing);} -/// -template -inline bool operator!=(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return !(a==b);} - -/// -template -inline bool operator> (const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return a.Degree() > b.Degree();} -/// -template -inline bool operator>=(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return a.Degree() >= b.Degree();} -/// -template -inline bool operator< (const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return a.Degree() < b.Degree();} -/// -template -inline bool operator<=(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return a.Degree() <= b.Degree();} - -/// -template -inline CryptoPP::PolynomialOverFixedRing operator+(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return CryptoPP::PolynomialOverFixedRing(a.Plus(b, a.ms_fixedRing));} -/// -template -inline CryptoPP::PolynomialOverFixedRing operator-(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return CryptoPP::PolynomialOverFixedRing(a.Minus(b, a.ms_fixedRing));} -/// -template -inline CryptoPP::PolynomialOverFixedRing operator*(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return CryptoPP::PolynomialOverFixedRing(a.Times(b, a.ms_fixedRing));} -/// -template -inline CryptoPP::PolynomialOverFixedRing operator/(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return CryptoPP::PolynomialOverFixedRing(a.DividedBy(b, a.ms_fixedRing));} -/// -template -inline CryptoPP::PolynomialOverFixedRing operator%(const CryptoPP::PolynomialOverFixedRing &a, const CryptoPP::PolynomialOverFixedRing &b) - {return CryptoPP::PolynomialOverFixedRing(a.Modulo(b, a.ms_fixedRing));} - -NAMESPACE_END - -NAMESPACE_BEGIN(std) -template inline void swap(CryptoPP::PolynomialOver &a, CryptoPP::PolynomialOver &b) -{ - a.swap(b); -} -template inline void swap(CryptoPP::PolynomialOverFixedRing &a, CryptoPP::PolynomialOverFixedRing &b) -{ - a.swap(b); -} -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ppc_simd.h b/third_party/cryptoppwin/include/cryptopp/ppc_simd.h deleted file mode 100644 index a5297cf1..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ppc_simd.h +++ /dev/null @@ -1,2764 +0,0 @@ -// ppc_simd.h - written and placed in public domain by Jeffrey Walton - -/// \file ppc_simd.h -/// \brief Support functions for PowerPC and vector operations -/// \details This header provides an agnostic interface into Clang, GCC -/// and IBM XL C/C++ compilers modulo their different built-in functions -/// for accessing vector instructions. -/// \details The abstractions are necessary to support back to GCC 4.8 and -/// XLC 11 and 12. GCC 4.8 and 4.9 are still popular, and they are the -/// default compiler for GCC112, GCC119 and others on the compile farm. -/// Older IBM XL C/C++ compilers also have the need due to lack of -/// vec_xl and vec_xst support on some platforms. Modern -/// compilers provide best support and don't need many of the hacks -/// below. -/// \details The library is tested with the following PowerPC machines and -/// compilers. GCC110, GCC111, GCC112, GCC119 and GCC135 are provided by -/// the GCC Compile Farm -/// - PowerMac G5, OSX 10.5, POWER4, Apple GCC 4.0 -/// - PowerMac G5, OSX 10.5, POWER4, Macports GCC 5.0 -/// - GCC110, Linux, POWER7, GCC 4.8.5 -/// - GCC110, Linux, POWER7, XLC 12.01 -/// - GCC111, AIX, POWER7, GCC 4.8.1 -/// - GCC111, AIX, POWER7, XLC 12.01 -/// - GCC112, Linux, POWER8, GCC 4.8.5 -/// - GCC112, Linux, POWER8, XLC 13.01 -/// - GCC112, Linux, POWER8, Clang 7.0 -/// - GCC119, AIX, POWER8, GCC 7.2.0 -/// - GCC119, AIX, POWER8, XLC 13.01 -/// - GCC135, Linux, POWER9, GCC 7.0 -/// \details 12 machines are used for testing because the three compilers form -/// five or six profiles. The profiles are listed below. -/// - GCC (Linux GCC, Macports GCC, etc. Consistent across machines) -/// - XLC 13.0 and earlier (all IBM components) -/// - XLC 13.1 and later on Linux (LLVM front-end, no compatibility macros) -/// - XLC 13.1 and later on Linux (LLVM front-end, -qxlcompatmacros option) -/// - early LLVM Clang (traditional Clang compiler) -/// - late LLVM Clang (traditional Clang compiler) -/// \details The LLVM front-end makes it tricky to write portable code because -/// LLVM pretends to be other compilers but cannot consume other compiler's -/// builtins. When using XLC with -qxlcompatmacros the compiler pretends to -/// be GCC, Clang and XLC all at once but it can only consume it's variety -/// of builtins. -/// \details At Crypto++ 8.0 the various Vector{FuncName} were -/// renamed to Vec{FuncName}. For example, VectorAnd was -/// changed to VecAnd. The name change helped consolidate two -/// slightly different implementations. -/// \details At Crypto++ 8.3 the library added select 64-bit functions for -/// 32-bit Altivec. For example, VecAdd64 and VecSub64 -/// take 32-bit vectors and adds or subtracts them as if there were vectors -/// with two 64-bit elements. The functions dramtically improve performance -/// for some algorithms on some platforms, like SIMON128 and SPECK128 on -/// Power6 and earlier. For example, SPECK128 improved from 70 cpb to -/// 10 cpb on an old PowerMac. Use the functions like shown below. -///
-///    \#if defined(_ARCH_PWR8)
-///    \#  define speck128_t uint64x2_p
-///    \#else
-///    \#  define speck128_t uint32x4_p
-///    \#endif
-///
-///    speck128_t rk, x1, x2, y1, y2;
-///    rk = (speck128_t)VecLoadAligned(ptr);
-///    x1 = VecRotateRight64<8>(x1);
-///    x1 = VecAdd64(x1, y1);
-///    ...
-/// \since Crypto++ 6.0, LLVM Clang compiler support since Crypto++ 8.0 - -// Use __ALTIVEC__, _ARCH_PWR7, __VSX__, and _ARCH_PWR8 when detecting -// actual availaibility of the feature for the source file being compiled. -// The preprocessor macros depend on compiler options like -maltivec; and -// not compiler versions. - -// For GCC see https://gcc.gnu.org/onlinedocs/gcc/Basic-PowerPC-Built-in-Functions.html -// For XLC see the Compiler Reference manual. For Clang you have to experiment. -// Clang does not document the compiler options, does not reject options it does -// not understand, and pretends to be other compilers even though it cannot -// process the builtins and intrinsics. Clang will waste hours of your time. - -// DO NOT USE this pattern in VecLoad and VecStore. We have to use the -// code paths guarded by preprocessor macros because XLC 12 generates -// bad code in some places. To verify the bad code generation test on -// GCC111 with XLC 12.01 installed. XLC 13.01 on GCC112 and GCC119 are OK. -// -// inline uint32x4_p VecLoad(const byte src[16]) -// { -// #if defined(__VSX__) || defined(_ARCH_PWR8) -// return (uint32x4_p) *(uint8x16_p*)((byte*)src); -// #else -// return VecLoad_ALTIVEC(src); -// #endif -// } - -// We should be able to perform the load using inline asm on Power7 with -// VSX or Power8. The inline asm will avoid C undefined behavior due to -// casting from byte* to word32*. We are safe because our byte* are -// 16-byte aligned for Altivec. Below is the big endian load. Little -// endian would need to follow with xxpermdi for the reversal. -// -// __asm__ ("lxvw4x %x0, %1, %2" : "=wa"(v) : "r"(0), "r"(src) : ); - -// GCC and XLC use integer math for the address (D-form or byte-offset -// in the ISA manual). LLVM uses pointer math for the address (DS-form -// or indexed in the ISA manual). To keep them consistent we calculate -// the address from the offset and pass to a load or store function -// using a 0 offset. - -#ifndef CRYPTOPP_PPC_CRYPTO_H -#define CRYPTOPP_PPC_CRYPTO_H - -#include "config.h" -#include "misc.h" - -#if defined(__ALTIVEC__) -# include -# undef vector -# undef pixel -# undef bool -#endif - -// XL C++ on AIX does not define VSX and does not -// provide an option to set it. We have to set it -// for the code below. This define must stay in -// sync with the define in test_ppc_power7.cpp. -#ifndef CRYPTOPP_DISABLE_POWER7 -# if defined(_AIX) && defined(_ARCH_PWR7) && defined(__xlC__) -# define __VSX__ 1 -# endif -#endif - -// XL C++ on AIX does not define CRYPTO and does not -// provide an option to set it. We have to set it -// for the code below. This define must stay in -// sync with the define in test_ppc_power8.cpp -#ifndef CRYPTOPP_DISABLE_POWER8 -# if defined(_AIX) && defined(_ARCH_PWR8) && defined(__xlC__) -# define __CRYPTO__ 1 -# endif -#endif - -/// \brief Cast array to vector pointer -/// \details CONST_V8_CAST casts a const array to a vector -/// pointer for a byte array. The Power ABI says source arrays -/// are non-const, so this define removes the const. XLC++ will -/// fail the compile if the source array is const. -#define CONST_V8_CAST(x) ((unsigned char*)(x)) -/// \brief Cast array to vector pointer -/// \details CONST_V32_CAST casts a const array to a vector -/// pointer for a word array. The Power ABI says source arrays -/// are non-const, so this define removes the const. XLC++ will -/// fail the compile if the source array is const. -#define CONST_V32_CAST(x) ((unsigned int*)(x)) -/// \brief Cast array to vector pointer -/// \details CONST_V64_CAST casts a const array to a vector -/// pointer for a double word array. The Power ABI says source arrays -/// are non-const, so this define removes the const. XLC++ will -/// fail the compile if the source array is const. -#define CONST_V64_CAST(x) ((unsigned long long*)(x)) -/// \brief Cast array to vector pointer -/// \details NCONST_V8_CAST casts an array to a vector -/// pointer for a byte array. The Power ABI says source arrays -/// are non-const, so this define removes the const. XLC++ will -/// fail the compile if the source array is const. -#define NCONST_V8_CAST(x) ((unsigned char*)(x)) -/// \brief Cast array to vector pointer -/// \details NCONST_V32_CAST casts an array to a vector -/// pointer for a word array. The Power ABI says source arrays -/// are non-const, so this define removes the const. XLC++ will -/// fail the compile if the source array is const. -#define NCONST_V32_CAST(x) ((unsigned int*)(x)) -/// \brief Cast array to vector pointer -/// \details NCONST_V64_CAST casts an array to a vector -/// pointer for a double word array. The Power ABI says source arrays -/// are non-const, so this define removes the const. XLC++ will -/// fail the compile if the source array is const. -#define NCONST_V64_CAST(x) ((unsigned long long*)(x)) - -// VecLoad_ALTIVEC and VecStore_ALTIVEC are -// too noisy on modern compilers -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -#if defined(__ALTIVEC__) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -/// \brief Vector of 8-bit elements -/// \par Wraps -/// __vector unsigned char -/// \since Crypto++ 6.0 -typedef __vector unsigned char uint8x16_p; -/// \brief Vector of 16-bit elements -/// \par Wraps -/// __vector unsigned short -/// \since Crypto++ 6.0 -typedef __vector unsigned short uint16x8_p; -/// \brief Vector of 32-bit elements -/// \par Wraps -/// __vector unsigned int -/// \since Crypto++ 6.0 -typedef __vector unsigned int uint32x4_p; - -#if defined(__VSX__) || defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Vector of 64-bit elements -/// \details uint64x2_p is available on POWER7 with VSX and above. Most -/// supporting functions, like 64-bit vec_add (vaddudm) -/// and vec_sub (vsubudm), did not arrive until POWER8. -/// \par Wraps -/// __vector unsigned long long -/// \since Crypto++ 6.0 -typedef __vector unsigned long long uint64x2_p; -#endif // VSX or ARCH_PWR8 - -/// \brief The 0 vector -/// \return a 32-bit vector of 0's -/// \since Crypto++ 8.0 -inline uint32x4_p VecZero() -{ - const uint32x4_p v = {0,0,0,0}; - return v; -} - -/// \brief The 1 vector -/// \return a 32-bit vector of 1's -/// \since Crypto++ 8.0 -inline uint32x4_p VecOne() -{ - const uint32x4_p v = {1,1,1,1}; - return v; -} - -/// \brief Reverse bytes in a vector -/// \tparam T vector type -/// \param data the vector -/// \return vector -/// \details VecReverse() reverses the bytes in a vector -/// \par Wraps -/// vec_perm -/// \since Crypto++ 6.0 -template -inline T VecReverse(const T data) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - const uint8x16_p mask = {15,14,13,12, 11,10,9,8, 7,6,5,4, 3,2,1,0}; - return (T)vec_perm(data, data, mask); -#else - const uint8x16_p mask = {0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15}; - return (T)vec_perm(data, data, mask); -#endif -} - -/// \brief Reverse bytes in a vector -/// \tparam T vector type -/// \param data the vector -/// \return vector -/// \details VecReverseLE() reverses the bytes in a vector on -/// little-endian systems. -/// \par Wraps -/// vec_perm -/// \since Crypto++ 6.0 -template -inline T VecReverseLE(const T data) -{ -#if defined(CRYPTOPP_LITTLE_ENDIAN) - const uint8x16_p mask = {15,14,13,12, 11,10,9,8, 7,6,5,4, 3,2,1,0}; - return (T)vec_perm(data, data, mask); -#else - return data; -#endif -} - -/// \brief Reverse bytes in a vector -/// \tparam T vector type -/// \param data the vector -/// \return vector -/// \details VecReverseBE() reverses the bytes in a vector on -/// big-endian systems. -/// \par Wraps -/// vec_perm -/// \since Crypto++ 6.0 -template -inline T VecReverseBE(const T data) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - const uint8x16_p mask = {15,14,13,12, 11,10,9,8, 7,6,5,4, 3,2,1,0}; - return (T)vec_perm(data, data, mask); -#else - return data; -#endif -} - -/// \name LOAD OPERATIONS -//@{ - -/// \brief Loads a vector from a byte array -/// \param src the byte array -/// \details Loads a vector in native endian format from a byte array. -/// \details VecLoad_ALTIVEC() uses vec_ld if the effective address -/// of src is aligned. If unaligned it uses vec_lvsl, -/// vec_ld, vec_perm and src. The fixups using -/// vec_lvsl and vec_perm are relatively expensive so -/// you should provide aligned memory addresses. -/// \par Wraps -/// vec_ld, vec_lvsl, vec_perm -/// \sa VecLoad, VecLoadAligned -/// \since Crypto++ 6.0 -inline uint32x4_p VecLoad_ALTIVEC(const byte src[16]) -{ - // Avoid IsAlignedOn for convenience. - const uintptr_t addr = reinterpret_cast(src); - if (addr % 16 == 0) - { - return (uint32x4_p)vec_ld(0, CONST_V8_CAST(addr)); - } - else - { - // http://www.nxp.com/docs/en/reference-manual/ALTIVECPEM.pdf - const uint8x16_p perm = vec_lvsl(0, CONST_V8_CAST(addr)); - const uint8x16_p low = vec_ld(0, CONST_V8_CAST(addr)); - const uint8x16_p high = vec_ld(15, CONST_V8_CAST(addr)); - return (uint32x4_p)vec_perm(low, high, perm); - } -} - -/// \brief Loads a vector from a byte array -/// \param src the byte array -/// \param off offset into the src byte array -/// \details Loads a vector in native endian format from a byte array. -/// \details VecLoad_ALTIVEC() uses vec_ld if the effective address -/// of src is aligned. If unaligned it uses vec_lvsl, -/// vec_ld, vec_perm and src. -/// \details The fixups using vec_lvsl and vec_perm are -/// relatively expensive so you should provide aligned memory addresses. -/// \par Wraps -/// vec_ld, vec_lvsl, vec_perm -/// \sa VecLoad, VecLoadAligned -/// \since Crypto++ 6.0 -inline uint32x4_p VecLoad_ALTIVEC(int off, const byte src[16]) -{ - // Avoid IsAlignedOn for convenience. - const uintptr_t addr = reinterpret_cast(src)+off; - if (addr % 16 == 0) - { - return (uint32x4_p)vec_ld(0, CONST_V8_CAST(addr)); - } - else - { - // http://www.nxp.com/docs/en/reference-manual/ALTIVECPEM.pdf - const uint8x16_p perm = vec_lvsl(0, CONST_V8_CAST(addr)); - const uint8x16_p low = vec_ld(0, CONST_V8_CAST(addr)); - const uint8x16_p high = vec_ld(15, CONST_V8_CAST(addr)); - return (uint32x4_p)vec_perm(low, high, perm); - } -} - -/// \brief Loads a vector from a byte array -/// \param src the byte array -/// \details VecLoad() loads a vector from a byte array. -/// \details VecLoad() uses POWER9's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER9 is not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xl on POWER9 and above, Altivec load on POWER8 and below -/// \sa VecLoad_ALTIVEC, VecLoadAligned -/// \since Crypto++ 6.0 -inline uint32x4_p VecLoad(const byte src[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(0, CONST_V8_CAST(src)); -#else - return (uint32x4_p)VecLoad_ALTIVEC(CONST_V8_CAST(addr)); -#endif -} - -/// \brief Loads a vector from a byte array -/// \param src the byte array -/// \param off offset into the src byte array -/// \details VecLoad() loads a vector from a byte array. -/// \details VecLoad() uses POWER9's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER9 is not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xl on POWER9 and above, Altivec load on POWER8 and below -/// \sa VecLoad_ALTIVEC, VecLoadAligned -/// \since Crypto++ 6.0 -inline uint32x4_p VecLoad(int off, const byte src[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(off, CONST_V8_CAST(src)); -#else - return (uint32x4_p)VecLoad_ALTIVEC(CONST_V8_CAST(addr)); -#endif -} - -/// \brief Loads a vector from a word array -/// \param src the word array -/// \details VecLoad() loads a vector from a word array. -/// \details VecLoad() uses POWER7's and VSX's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER7 is not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, Altivec load on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoadAligned -/// \since Crypto++ 8.0 -inline uint32x4_p VecLoad(const word32 src[4]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(0, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - return (uint32x4_p)vec_xl(0, CONST_V32_CAST(addr)); -#else - return (uint32x4_p)VecLoad_ALTIVEC(CONST_V8_CAST(addr)); -#endif -} - -/// \brief Loads a vector from a word array -/// \param src the word array -/// \param off offset into the word array -/// \details VecLoad() loads a vector from a word array. -/// \details VecLoad() uses POWER7's and VSX's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER7 is not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, Altivec load on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoadAligned -/// \since Crypto++ 8.0 -inline uint32x4_p VecLoad(int off, const word32 src[4]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(off, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - return (uint32x4_p)vec_xl(0, CONST_V32_CAST(addr)); -#else - return (uint32x4_p)VecLoad_ALTIVEC(CONST_V8_CAST(addr)); -#endif -} - -#if defined(__VSX__) || defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -/// \brief Loads a vector from a double word array -/// \param src the double word array -/// \details VecLoad() loads a vector from a double word array. -/// \details VecLoad() uses POWER7's and VSX's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER7 and VSX are not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \details VecLoad() with 64-bit elements is available on POWER7 and above. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, Altivec load on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoadAligned -/// \since Crypto++ 8.0 -inline uint64x2_p VecLoad(const word64 src[2]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint64x2_p)vec_xl(0, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - // The 32-bit cast is not a typo. Compiler workaround. - return (uint64x2_p)vec_xl(0, CONST_V32_CAST(addr)); -#else - return (uint64x2_p)VecLoad_ALTIVEC(CONST_V8_CAST(addr)); -#endif -} - -/// \brief Loads a vector from a double word array -/// \param src the double word array -/// \param off offset into the double word array -/// \details VecLoad() loads a vector from a double word array. -/// \details VecLoad() uses POWER7's and VSX's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER7 and VSX are not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \details VecLoad() with 64-bit elements is available on POWER8 and above. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, Altivec load on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoadAligned -/// \since Crypto++ 8.0 -inline uint64x2_p VecLoad(int off, const word64 src[2]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint64x2_p)vec_xl(off, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - // The 32-bit cast is not a typo. Compiler workaround. - return (uint64x2_p)vec_xl(0, CONST_V32_CAST(addr)); -#else - return (uint64x2_p)VecLoad_ALTIVEC(CONST_V8_CAST(addr)); -#endif -} - -#endif // VSX or ARCH_PWR8 - -/// \brief Loads a vector from an aligned byte array -/// \param src the byte array -/// \details VecLoadAligned() loads a vector from an aligned byte array. -/// \details VecLoadAligned() uses POWER9's vec_xl if available. -/// vec_ld is used if POWER9 is not available. The effective -/// address of src must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xl on POWER9, vec_ld on POWER8 and below -/// \sa VecLoad_ALTIVEC, VecLoad -/// \since Crypto++ 8.0 -inline uint32x4_p VecLoadAligned(const byte src[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src); - CRYPTOPP_ASSERT(addr % 16 == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(0, CONST_V8_CAST(src)); -#else - return (uint32x4_p)vec_ld(0, CONST_V8_CAST(src)); -#endif -} - -/// \brief Loads a vector from an aligned byte array -/// \param src the byte array -/// \param off offset into the src byte array -/// \details VecLoadAligned() loads a vector from an aligned byte array. -/// \details VecLoadAligned() uses POWER9's vec_xl if available. -/// vec_ld is used if POWER9 is not available. The effective -/// address of src must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xl on POWER9, vec_ld on POWER8 and below -/// \sa VecLoad_ALTIVEC, VecLoad -/// \since Crypto++ 8.0 -inline uint32x4_p VecLoadAligned(int off, const byte src[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src)+off; - CRYPTOPP_ASSERT(addr % 16 == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(off, CONST_V8_CAST(src)); -#else - return (uint32x4_p)vec_ld(off, CONST_V8_CAST(src)); -#endif -} - -/// \brief Loads a vector from an aligned word array -/// \param src the word array -/// \details VecLoadAligned() loads a vector from an aligned word array. -/// \details VecLoadAligned() uses POWER7's and VSX's vec_xl if -/// available. vec_ld is used if POWER7 or VSX are not available. -/// The effective address of src must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, vec_ld on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoad -/// \since Crypto++ 8.0 -inline uint32x4_p VecLoadAligned(const word32 src[4]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src); - CRYPTOPP_ASSERT(addr % 16 == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(0, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - return (uint32x4_p)vec_xl(0, CONST_V32_CAST(src)); -#else - return (uint32x4_p)vec_ld(0, CONST_V8_CAST(src)); -#endif -} - -/// \brief Loads a vector from an aligned word array -/// \param src the word array -/// \param off offset into the src word array -/// \details VecLoadAligned() loads a vector from an aligned word array. -/// \details VecLoadAligned() uses POWER7's and VSX's vec_xl if -/// available. vec_ld is used if POWER7 or VSX are not available. -/// The effective address of src must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, vec_ld on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoad -/// \since Crypto++ 8.0 -inline uint32x4_p VecLoadAligned(int off, const word32 src[4]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src)+off; - CRYPTOPP_ASSERT(addr % 16 == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint32x4_p)vec_xl(off, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - return (uint32x4_p)vec_xl(0, CONST_V32_CAST(addr)); -#else - return (uint32x4_p)vec_ld(off, CONST_V8_CAST(src)); -#endif -} - -#if defined(__VSX__) || defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -/// \brief Loads a vector from an aligned double word array -/// \param src the double word array -/// \details VecLoadAligned() loads a vector from an aligned double word array. -/// \details VecLoadAligned() uses POWER7's and VSX's vec_xl if -/// available. vec_ld is used if POWER7 or VSX are not available. -/// The effective address of src must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, vec_ld on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoad -/// \since Crypto++ 8.0 -inline uint64x2_p VecLoadAligned(const word64 src[4]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src); - CRYPTOPP_ASSERT(addr % 16 == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint64x2_p)vec_xl(0, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - // The 32-bit cast is not a typo. Compiler workaround. - return (uint64x2_p)vec_xl(0, CONST_V32_CAST(src)); -#else - return (uint64x2_p)vec_ld(0, CONST_V8_CAST(src)); -#endif -} - -/// \brief Loads a vector from an aligned double word array -/// \param src the double word array -/// \param off offset into the src double word array -/// \details VecLoadAligned() loads a vector from an aligned double word array. -/// \details VecLoadAligned() uses POWER7's and VSX's vec_xl if -/// available. vec_ld is used if POWER7 or VSX are not available. -/// The effective address of src must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xl on VSX or POWER8 and above, vec_ld on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoad -/// \since Crypto++ 8.0 -inline uint64x2_p VecLoadAligned(int off, const word64 src[4]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src)+off; - CRYPTOPP_ASSERT(addr % 16 == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - return (uint64x2_p)vec_xl(off, CONST_V8_CAST(src)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - // The 32-bit cast is not a typo. Compiler workaround. - return (uint64x2_p)vec_xl(0, CONST_V32_CAST(addr)); -#else - return (uint64x2_p)vec_ld(off, CONST_V8_CAST(src)); -#endif -} - -#endif - -/// \brief Loads a vector from a byte array -/// \param src the byte array -/// \details VecLoadBE() loads a vector from a byte array. VecLoadBE -/// will reverse all bytes in the array on a little endian system. -/// \details VecLoadBE() uses POWER7's and VSX's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER7 or VSX are not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xl on POWER8, Altivec load on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoad, VecLoadAligned -/// \since Crypto++ 6.0 -inline uint32x4_p VecLoadBE(const byte src[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src); - // CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - return (uint32x4_p)vec_xl_be(0, CONST_V8_CAST(src)); -#elif defined(CRYPTOPP_BIG_ENDIAN) - return (uint32x4_p)VecLoad_ALTIVEC(0, CONST_V8_CAST(src)); -#else - return (uint32x4_p)VecReverseLE(VecLoad_ALTIVEC(CONST_V8_CAST(src))); -#endif -} - -/// \brief Loads a vector from a byte array -/// \param src the byte array -/// \param off offset into the src byte array -/// \details VecLoadBE() loads a vector from a byte array. VecLoadBE -/// will reverse all bytes in the array on a little endian system. -/// \details VecLoadBE() uses POWER7's and VSX's vec_xl if available. -/// The instruction does not require aligned effective memory addresses. -/// VecLoad_ALTIVEC() is used if POWER7 is not available. -/// VecLoad_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xl on POWER8, Altivec load on POWER7 and below -/// \sa VecLoad_ALTIVEC, VecLoad, VecLoadAligned -/// \since Crypto++ 6.0 -inline uint32x4_p VecLoadBE(int off, const byte src[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(src)+off; - // CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - return (uint32x4_p)vec_xl_be(off, CONST_V8_CAST(src)); -#elif defined(CRYPTOPP_BIG_ENDIAN) - return (uint32x4_p)VecLoad_ALTIVEC(CONST_V8_CAST(addr)); -#else - return (uint32x4_p)VecReverseLE(VecLoad_ALTIVEC(CONST_V8_CAST(addr))); -#endif -} - -//@} - -/// \name STORE OPERATIONS -//@{ - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param dest the byte array -/// \details VecStore_ALTIVEC() stores a vector to a byte array. -/// \details VecStore_ALTIVEC() uses vec_st if the effective address -/// of dest is aligned, and uses vec_ste otherwise. -/// vec_ste is relatively expensive so you should provide aligned -/// memory addresses. -/// \details VecStore_ALTIVEC() is used when POWER7 or above -/// and unaligned loads is not available. -/// \par Wraps -/// vec_st, vec_ste, vec_lvsr, vec_perm -/// \sa VecStore, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStore_ALTIVEC(const T data, byte dest[16]) -{ - // Avoid IsAlignedOn for convenience. - uintptr_t addr = reinterpret_cast(dest); - if (addr % 16 == 0) - { - vec_st((uint8x16_p)data, 0, NCONST_V8_CAST(addr)); - } - else - { - // http://www.nxp.com/docs/en/reference-manual/ALTIVECPEM.pdf - uint8x16_p perm = (uint8x16_p)vec_perm(data, data, vec_lvsr(0, NCONST_V8_CAST(addr))); - vec_ste((uint8x16_p) perm, 0, (unsigned char*) NCONST_V8_CAST(addr)); - vec_ste((uint16x8_p) perm, 1, (unsigned short*)NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 3, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 4, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 8, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 12, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint16x8_p) perm, 14, (unsigned short*)NCONST_V8_CAST(addr)); - vec_ste((uint8x16_p) perm, 15, (unsigned char*) NCONST_V8_CAST(addr)); - } -} - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest byte array -/// \param dest the byte array -/// \details VecStore_ALTIVEC() stores a vector to a byte array. -/// \details VecStore_ALTIVEC() uses vec_st if the effective address -/// of dest is aligned, and uses vec_ste otherwise. -/// vec_ste is relatively expensive so you should provide aligned -/// memory addresses. -/// \details VecStore_ALTIVEC() is used when POWER7 or above -/// and unaligned loads is not available. -/// \par Wraps -/// vec_st, vec_ste, vec_lvsr, vec_perm -/// \sa VecStore, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStore_ALTIVEC(const T data, int off, byte dest[16]) -{ - // Avoid IsAlignedOn for convenience. - uintptr_t addr = reinterpret_cast(dest)+off; - if (addr % 16 == 0) - { - vec_st((uint8x16_p)data, 0, NCONST_V8_CAST(addr)); - } - else - { - // http://www.nxp.com/docs/en/reference-manual/ALTIVECPEM.pdf - uint8x16_p perm = (uint8x16_p)vec_perm(data, data, vec_lvsr(0, NCONST_V8_CAST(addr))); - vec_ste((uint8x16_p) perm, 0, (unsigned char*) NCONST_V8_CAST(addr)); - vec_ste((uint16x8_p) perm, 1, (unsigned short*)NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 3, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 4, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 8, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint32x4_p) perm, 12, (unsigned int*) NCONST_V8_CAST(addr)); - vec_ste((uint16x8_p) perm, 14, (unsigned short*)NCONST_V8_CAST(addr)); - vec_ste((uint8x16_p) perm, 15, (unsigned char*) NCONST_V8_CAST(addr)); - } -} - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param dest the byte array -/// \details VecStore() stores a vector to a byte array. -/// \details VecStore() uses POWER9's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER9 is not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on POWER9 and above, Altivec store on POWER8 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 6.0 -template -inline void VecStore(const T data, byte dest[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, 0, NCONST_V8_CAST(dest)); -#else - VecStore_ALTIVEC((uint8x16_p)data, NCONST_V8_CAST(dest)); -#endif -} - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest byte array -/// \param dest the byte array -/// \details VecStore() stores a vector to a byte array. -/// \details VecStore() uses POWER9's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER9 is not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on POWER9 and above, Altivec store on POWER8 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 6.0 -template -inline void VecStore(const T data, int off, byte dest[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, off, NCONST_V8_CAST(dest)); -#else - VecStore_ALTIVEC((uint8x16_p)data, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param dest the word array -/// \details VecStore() stores a vector to a word array. -/// \details VecStore() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 or VSX are not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, Altivec store on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStore(const T data, word32 dest[4]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, 0, NCONST_V8_CAST(dest)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - vec_xst((uint32x4_p)data, 0, NCONST_V32_CAST(addr)); -#else - VecStore_ALTIVEC((uint8x16_p)data, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest word array -/// \param dest the word array -/// \details VecStore() stores a vector to a word array. -/// \details VecStore() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 or VSX are not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, Altivec store on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStore(const T data, int off, word32 dest[4]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, off, NCONST_V8_CAST(dest)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - vec_xst((uint32x4_p)data, 0, NCONST_V32_CAST(addr)); -#else - VecStore_ALTIVEC((uint8x16_p)data, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param dest the word array -/// \details VecStore() stores a vector to a word array. -/// \details VecStore() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 or VSX are not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \details VecStore() with 64-bit elements is available on POWER8 and above. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, Altivec store on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStore(const T data, word64 dest[2]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, 0, NCONST_V8_CAST(dest)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - // 32-bit cast is not a typo. Compiler workaround. - vec_xst((uint32x4_p)data, 0, NCONST_V32_CAST(addr)); -#else - VecStore_ALTIVEC((uint8x16_p)data, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest word array -/// \param dest the word array -/// \details VecStore() stores a vector to a word array. -/// \details VecStore() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 or VSX are not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \details VecStore() with 64-bit elements is available on POWER8 and above. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, Altivec store on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStore(const T data, int off, word64 dest[2]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, off, NCONST_V8_CAST(dest)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - // 32-bit cast is not a typo. Compiler workaround. - vec_xst((uint32x4_p)data, 0, NCONST_V32_CAST(addr)); -#else - VecStore_ALTIVEC((uint8x16_p)data, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param dest the byte array -/// \details VecStoreAligned() stores a vector from an aligned byte array. -/// \details VecStoreAligned() uses POWER9's vec_xl if available. -/// vec_st is used if POWER9 is not available. The effective -/// address of dest must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xst on POWER9 or above, vec_st on POWER8 and below -/// \sa VecStore_ALTIVEC, VecStore -/// \since Crypto++ 8.0 -template -inline void VecStoreAligned(const T data, byte dest[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, 0, NCONST_V8_CAST(dest)); -#else - vec_st((uint8x16_p)data, 0, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest byte array -/// \param dest the byte array -/// \details VecStoreAligned() stores a vector from an aligned byte array. -/// \details VecStoreAligned() uses POWER9's vec_xl if available. -/// vec_st is used if POWER9 is not available. The effective -/// address of dest must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xst on POWER9 or above, vec_st on POWER8 and below -/// \sa VecStore_ALTIVEC, VecStore -/// \since Crypto++ 8.0 -template -inline void VecStoreAligned(const T data, int off, byte dest[16]) -{ - // Power7/ISA 2.06 provides vec_xl, but only for 32-bit and 64-bit - // word pointers. The ISA lacks loads for short* and char*. - // Power9/ISA 3.0 provides vec_xl for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, off, NCONST_V8_CAST(dest)); -#else - vec_st((uint8x16_p)data, 0, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param dest the word array -/// \details VecStoreAligned() stores a vector from an aligned word array. -/// \details VecStoreAligned() uses POWER9's vec_xl if available. -/// POWER7 vec_xst is used if POWER9 is not available. vec_st -/// is used if POWER7 is not available. The effective address of dest -/// must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, vec_st on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStore -/// \since Crypto++ 8.0 -template -inline void VecStoreAligned(const T data, word32 dest[4]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, 0, NCONST_V8_CAST(dest)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - vec_xst((uint32x4_p)data, 0, NCONST_V32_CAST(addr)); -#else - vec_st((uint8x16_p)data, 0, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest word array -/// \param dest the word array -/// \details VecStoreAligned() stores a vector from an aligned word array. -/// \details VecStoreAligned() uses POWER9's vec_xl if available. -/// POWER7 vec_xst is used if POWER9 is not available. vec_st -/// is used if POWER7 is not available. The effective address of dest -/// must be 16-byte aligned for Altivec. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, vec_st on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStore -/// \since Crypto++ 8.0 -template -inline void VecStoreAligned(const T data, int off, word32 dest[4]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst((uint8x16_p)data, off, NCONST_V8_CAST(dest)); -#elif defined(__VSX__) || defined(_ARCH_PWR8) - vec_xst((uint32x4_p)data, 0, NCONST_V32_CAST(addr)); -#else - vec_st((uint8x16_p)data, 0, NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param dest the byte array -/// \details VecStoreBE() stores a vector to a byte array. VecStoreBE -/// will reverse all bytes in the array on a little endian system. -/// \details VecStoreBE() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 is not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, vec_st on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 6.0 -template -inline void VecStoreBE(const T data, byte dest[16]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst_be((uint8x16_p)data, 0, NCONST_V8_CAST(dest)); -#elif defined(CRYPTOPP_BIG_ENDIAN) - VecStore((uint8x16_p)data, NCONST_V8_CAST(addr)); -#else - VecStore((uint8x16_p)VecReverseLE(data), NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a byte array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest byte array -/// \param dest the byte array -/// \details VecStoreBE() stores a vector to a byte array. VecStoreBE -/// will reverse all bytes in the array on a little endian system. -/// \details VecStoreBE() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 is not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, vec_st on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 6.0 -template -inline void VecStoreBE(const T data, int off, byte dest[16]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst_be((uint8x16_p)data, off, NCONST_V8_CAST(dest)); -#elif defined(CRYPTOPP_BIG_ENDIAN) - VecStore((uint8x16_p)data, NCONST_V8_CAST(addr)); -#else - VecStore((uint8x16_p)VecReverseLE(data), NCONST_V8_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param dest the word array -/// \details VecStoreBE() stores a vector to a word array. VecStoreBE -/// will reverse all bytes in the array on a little endian system. -/// \details VecStoreBE() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 is not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, vec_st on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStoreBE(const T data, word32 dest[4]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest); - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst_be((uint8x16_p)data, 0, NCONST_V8_CAST(dest)); -#elif defined(CRYPTOPP_BIG_ENDIAN) - VecStore((uint32x4_p)data, NCONST_V32_CAST(addr)); -#else - VecStore((uint32x4_p)VecReverseLE(data), NCONST_V32_CAST(addr)); -#endif -} - -/// \brief Stores a vector to a word array -/// \tparam T vector type -/// \param data the vector -/// \param off offset into the dest word array -/// \param dest the word array -/// \details VecStoreBE() stores a vector to a word array. VecStoreBE -/// will reverse all words in the array on a little endian system. -/// \details VecStoreBE() uses POWER7's and VSX's vec_xst if available. -/// The instruction does not require aligned effective memory addresses. -/// VecStore_ALTIVEC() is used if POWER7 is not available. -/// VecStore_ALTIVEC() can be relatively expensive if extra instructions -/// are required to fix up unaligned memory addresses. -/// \par Wraps -/// vec_xst on VSX or POWER8 and above, vec_st on POWER7 and below -/// \sa VecStore_ALTIVEC, VecStoreAligned -/// \since Crypto++ 8.0 -template -inline void VecStoreBE(const T data, int off, word32 dest[4]) -{ - // Power7/ISA 2.06 provides vec_xst, but only for 32-bit and 64-bit - // word pointers. The ISA lacks stores for short* and char*. - // Power9/ISA 3.0 provides vec_xst for all datatypes. - - const uintptr_t addr = reinterpret_cast(dest)+off; - CRYPTOPP_ASSERT(addr % GetAlignmentOf() == 0); - CRYPTOPP_UNUSED(addr); - -#if defined(_ARCH_PWR9) - vec_xst_be((uint8x16_p)data, off, NCONST_V8_CAST(dest)); -#elif defined(CRYPTOPP_BIG_ENDIAN) - VecStore((uint32x4_p)data, NCONST_V32_CAST(addr)); -#else - VecStore((uint32x4_p)VecReverseLE(data), NCONST_V32_CAST(addr)); -#endif -} - -//@} - -/// \name LOGICAL OPERATIONS -//@{ - -/// \brief AND two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecAnd() performs vec1 & vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \par Wraps -/// vec_and -/// \sa VecAnd64 -/// \since Crypto++ 6.0 -template -inline T1 VecAnd(const T1 vec1, const T2 vec2) -{ - return (T1)vec_and(vec1, (T1)vec2); -} - -/// \brief OR two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecOr() performs vec1 | vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \par Wraps -/// vec_or -/// \sa VecOr64 -/// \since Crypto++ 6.0 -template -inline T1 VecOr(const T1 vec1, const T2 vec2) -{ - return (T1)vec_or(vec1, (T1)vec2); -} - -/// \brief XOR two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecXor() performs vec1 ^ vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \par Wraps -/// vec_xor -/// \sa VecXor64 -/// \since Crypto++ 6.0 -template -inline T1 VecXor(const T1 vec1, const T2 vec2) -{ - return (T1)vec_xor(vec1, (T1)vec2); -} - -//@} - -/// \name ARITHMETIC OPERATIONS -//@{ - -/// \brief Add two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecAdd() performs vec1 + vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \par Wraps -/// vec_add -/// \sa VecAdd64 -/// \since Crypto++ 6.0 -template -inline T1 VecAdd(const T1 vec1, const T2 vec2) -{ - return (T1)vec_add(vec1, (T1)vec2); -} - -/// \brief Subtract two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \details VecSub() performs vec1 - vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \par Wraps -/// vec_sub -/// \sa VecSub64 -/// \since Crypto++ 6.0 -template -inline T1 VecSub(const T1 vec1, const T2 vec2) -{ - return (T1)vec_sub(vec1, (T1)vec2); -} - -//@} - -/// \name PERMUTE OPERATIONS -//@{ - -/// \brief Permutes a vector -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec the vector -/// \param mask vector mask -/// \return vector -/// \details VecPermute() creates a new vector from vec according to mask. -/// mask is an uint8x16_p vector. The return vector is the same type as vec. -/// \par Wraps -/// vec_perm -/// \since Crypto++ 6.0 -template -inline T1 VecPermute(const T1 vec, const T2 mask) -{ - return (T1)vec_perm(vec, vec, (uint8x16_p)mask); -} - -/// \brief Permutes two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \param mask vector mask -/// \return vector -/// \details VecPermute() creates a new vector from vec1 and vec2 according to mask. -/// mask is an uint8x16_p vector. The return vector is the same type as vec. -/// \par Wraps -/// vec_perm -/// \since Crypto++ 6.0 -template -inline T1 VecPermute(const T1 vec1, const T1 vec2, const T2 mask) -{ - return (T1)vec_perm(vec1, (T1)vec2, (uint8x16_p)mask); -} - -//@} - -/// \name SHIFT AND ROTATE OPERATIONS -//@{ - -/// \brief Shift a vector left -/// \tparam C shift byte count -/// \tparam T vector type -/// \param vec the vector -/// \return vector -/// \details VecShiftLeftOctet() returns a new vector after shifting the -/// concatenation of the zero vector and the source vector by the specified -/// number of bytes. The return vector is the same type as vec. -/// \details On big endian machines VecShiftLeftOctet() is vec_sld(a, z, -/// c). On little endian machines VecShiftLeftOctet() is translated to -/// vec_sld(z, a, 16-c). You should always call the function as -/// if on a big endian machine as shown below. -///
-///   uint8x16_p x = VecLoad(ptr);
-///   uint8x16_p y = VecShiftLeftOctet<12>(x);
-/// 
-/// \par Wraps -/// vec_sld -/// \sa Is vec_sld -/// endian sensitive? on Stack Overflow -/// \since Crypto++ 6.0 -template -inline T VecShiftLeftOctet(const T vec) -{ - const T zero = {0}; - if (C >= 16) - { - // Out of range - return zero; - } - else if (C == 0) - { - // Noop - return vec; - } - else - { -#if defined(CRYPTOPP_BIG_ENDIAN) - enum { R=C&0xf }; - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)zero, R); -#else - enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds - return (T)vec_sld((uint8x16_p)zero, (uint8x16_p)vec, R); -#endif - } -} - -/// \brief Shift a vector right -/// \tparam C shift byte count -/// \tparam T vector type -/// \param vec the vector -/// \return vector -/// \details VecShiftRightOctet() returns a new vector after shifting the -/// concatenation of the zero vector and the source vector by the specified -/// number of bytes. The return vector is the same type as vec. -/// \details On big endian machines VecShiftRightOctet() is vec_sld(a, z, -/// c). On little endian machines VecShiftRightOctet() is translated to -/// vec_sld(z, a, 16-c). You should always call the function as -/// if on a big endian machine as shown below. -///
-///   uint8x16_p x = VecLoad(ptr);
-///   uint8x16_p y = VecShiftRightOctet<12>(y);
-/// 
-/// \par Wraps -/// vec_sld -/// \sa Is vec_sld -/// endian sensitive? on Stack Overflow -/// \since Crypto++ 6.0 -template -inline T VecShiftRightOctet(const T vec) -{ - const T zero = {0}; - if (C >= 16) - { - // Out of range - return zero; - } - else if (C == 0) - { - // Noop - return vec; - } - else - { -#if defined(CRYPTOPP_BIG_ENDIAN) - enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds - return (T)vec_sld((uint8x16_p)zero, (uint8x16_p)vec, R); -#else - enum { R=C&0xf }; - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)zero, R); -#endif - } -} - -/// \brief Rotate a vector left -/// \tparam C shift byte count -/// \tparam T vector type -/// \param vec the vector -/// \return vector -/// \details VecRotateLeftOctet() returns a new vector after rotating the -/// concatenation of the source vector with itself by the specified -/// number of bytes. The return vector is the same type as vec. -/// \par Wraps -/// vec_sld -/// \sa Is vec_sld -/// endian sensitive? on Stack Overflow -/// \since Crypto++ 6.0 -template -inline T VecRotateLeftOctet(const T vec) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - enum { R = C&0xf }; - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); -#else - enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); -#endif -} - -/// \brief Rotate a vector right -/// \tparam C shift byte count -/// \tparam T vector type -/// \param vec the vector -/// \return vector -/// \details VecRotateRightOctet() returns a new vector after rotating the -/// concatenation of the source vector with itself by the specified -/// number of bytes. The return vector is the same type as vec. -/// \par Wraps -/// vec_sld -/// \sa Is vec_sld -/// endian sensitive? on Stack Overflow -/// \since Crypto++ 6.0 -template -inline T VecRotateRightOctet(const T vec) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); -#else - enum { R = C&0xf }; - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); -#endif -} - -/// \brief Rotate a vector left -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateLeft() rotates each element in a vector by -/// bit count. The return vector is the same type as vec. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 7.0 -template -inline uint32x4_p VecRotateLeft(const uint32x4_p vec) -{ - const uint32x4_p m = {C, C, C, C}; - return vec_rl(vec, m); -} - -/// \brief Rotate a vector right -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateRight() rotates each element in a vector -/// by bit count. The return vector is the same type as vec. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 7.0 -template -inline uint32x4_p VecRotateRight(const uint32x4_p vec) -{ - const uint32x4_p m = {32-C, 32-C, 32-C, 32-C}; - return vec_rl(vec, m); -} - -/// \brief Shift a vector left -/// \tparam C shift bit count -/// \param vec the vector -/// \return vector -/// \details VecShiftLeft() rotates each element in a vector -/// by bit count. The return vector is the same type as vec. -/// \par Wraps -/// vec_sl -/// \since Crypto++ 8.1 -template -inline uint32x4_p VecShiftLeft(const uint32x4_p vec) -{ - const uint32x4_p m = {C, C, C, C}; - return vec_sl(vec, m); -} - -/// \brief Shift a vector right -/// \tparam C shift bit count -/// \param vec the vector -/// \return vector -/// \details VecShiftRight() rotates each element in a vector -/// by bit count. The return vector is the same type as vec. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.1 -template -inline uint32x4_p VecShiftRight(const uint32x4_p vec) -{ - const uint32x4_p m = {C, C, C, C}; - return vec_sr(vec, m); -} - -// 64-bit elements available at POWER7 with VSX, but vec_rl and vec_sl require POWER8 -#if defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -/// \brief Rotate a vector left -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateLeft() rotates each element in a vector -/// by bit count. The return vector is the same type as vec. -/// \details VecRotateLeft() with 64-bit elements is available on -/// POWER8 and above. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.0 -template -inline uint64x2_p VecRotateLeft(const uint64x2_p vec) -{ - const uint64x2_p m = {C, C}; - return vec_rl(vec, m); -} - -/// \brief Shift a vector left -/// \tparam C shift bit count -/// \param vec the vector -/// \return vector -/// \details VecShiftLeft() rotates each element in a vector -/// by bit count. The return vector is the same type as vec. -/// \details VecShiftLeft() with 64-bit elements is available on -/// POWER8 and above. -/// \par Wraps -/// vec_sl -/// \since Crypto++ 8.1 -template -inline uint64x2_p VecShiftLeft(const uint64x2_p vec) -{ - const uint64x2_p m = {C, C}; - return vec_sl(vec, m); -} - -/// \brief Rotate a vector right -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateRight() rotates each element in a vector -/// by bit count. The return vector is the same type as vec. -/// \details VecRotateRight() with 64-bit elements is available on -/// POWER8 and above. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.0 -template -inline uint64x2_p VecRotateRight(const uint64x2_p vec) -{ - const uint64x2_p m = {64-C, 64-C}; - return vec_rl(vec, m); -} - -/// \brief Shift a vector right -/// \tparam C shift bit count -/// \param vec the vector -/// \return vector -/// \details VecShiftRight() rotates each element in a vector -/// by bit count. The return vector is the same type as vec. -/// \details VecShiftRight() with 64-bit elements is available on -/// POWER8 and above. -/// \par Wraps -/// vec_sr -/// \since Crypto++ 8.1 -template -inline uint64x2_p VecShiftRight(const uint64x2_p vec) -{ - const uint64x2_p m = {C, C}; - return vec_sr(vec, m); -} - -#endif // ARCH_PWR8 - -//@} - -/// \name OTHER OPERATIONS -//@{ - -/// \brief Merge two vectors -/// \tparam T vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \par Wraps -/// vec_mergel -/// \since Crypto++ 8.1 -template -inline T VecMergeLow(const T vec1, const T vec2) -{ - return vec_mergel(vec1, vec2); -} - -/// \brief Merge two vectors -/// \tparam T vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \par Wraps -/// vec_mergeh -/// \since Crypto++ 8.1 -template -inline T VecMergeHigh(const T vec1, const T vec2) -{ - return vec_mergeh(vec1, vec2); -} - -/// \brief Broadcast 32-bit word to a vector -/// \param val the 32-bit value -/// \return vector -/// \par Wraps -/// vec_splats -/// \since Crypto++ 8.3 -inline uint32x4_p VecSplatWord(word32 val) -{ - // Fix spurious GCC warning??? - CRYPTOPP_UNUSED(val); - - // Apple Altivec and XL C++ do not offer vec_splats. - // GCC offers vec_splats back to -mcpu=power4. -#if defined(_ARCH_PWR4) && defined(__GNUC__) - return vec_splats(val); -#else - //const word32 x[4] = {val,val,val,val}; - //return VecLoad(x); - const word32 x[4] = {val}; - return vec_splat(VecLoad(x),0); -#endif -} - -/// \brief Broadcast 32-bit element to a vector -/// \tparam the element number -/// \param val the 32-bit value -/// \return vector -/// \par Wraps -/// vec_splat -/// \since Crypto++ 8.3 -template -inline uint32x4_p VecSplatElement(const uint32x4_p val) -{ - return vec_splat(val, N); -} - -#if defined(__VSX__) || defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Broadcast 64-bit double word to a vector -/// \param val the 64-bit value -/// \return vector -/// \par Wraps -/// vec_splats -/// \since Crypto++ 8.3 -inline uint64x2_p VecSplatWord(word64 val) -{ - // The PPC64 ABI says so. - return vec_splats((unsigned long long)val); -} - -/// \brief Broadcast 64-bit element to a vector -/// \tparam the element number -/// \param val the 64-bit value -/// \return vector -/// \par Wraps -/// vec_splat -/// \since Crypto++ 8.3 -template -inline uint64x2_p VecSplatElement(const uint64x2_p val) -{ -#if defined(__VSX__) || defined(_ARCH_PWR8) - return vec_splat(val, N); -#else - enum {E=N&1}; - if (E == 0) - { - const uint8x16_p m = {0,1,2,3, 4,5,6,7, 0,1,2,3, 4,5,6,7}; - return vec_perm(val, val, m); - } - else // (E == 1) - { - const uint8x16_p m = {8,9,10,11, 12,13,14,15, 8,9,10,11, 12,13,14,15}; - return vec_perm(val, val, m); - } -#endif -} -#endif - -/// \brief Extract a dword from a vector -/// \tparam T vector type -/// \param val the vector -/// \return vector created from low dword -/// \details VecGetLow() extracts the low dword from a vector. The low dword -/// is composed of the least significant bits and occupies bytes 8 through 15 -/// when viewed as a big endian array. The return vector is the same type as -/// the original vector and padded with 0's in the most significant bit positions. -/// \par Wraps -/// vec_sld -/// \since Crypto++ 7.0 -template -inline T VecGetLow(const T val) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) && (defined(__VSX__) || defined(_ARCH_PWR8)) - const T zero = {0}; - return (T)VecMergeLow((uint64x2_p)zero, (uint64x2_p)val); -#else - return VecShiftRightOctet<8>(VecShiftLeftOctet<8>(val)); -#endif -} - -/// \brief Extract a dword from a vector -/// \tparam T vector type -/// \param val the vector -/// \return vector created from high dword -/// \details VecGetHigh() extracts the high dword from a vector. The high dword -/// is composed of the most significant bits and occupies bytes 0 through 7 -/// when viewed as a big endian array. The return vector is the same type as -/// the original vector and padded with 0's in the most significant bit positions. -/// \par Wraps -/// vec_sld -/// \since Crypto++ 7.0 -template -inline T VecGetHigh(const T val) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) && (defined(__VSX__) || defined(_ARCH_PWR8)) - const T zero = {0}; - return (T)VecMergeHigh((uint64x2_p)zero, (uint64x2_p)val); -#else - return VecShiftRightOctet<8>(val); -#endif -} - -/// \brief Exchange high and low double words -/// \tparam T vector type -/// \param vec the vector -/// \return vector -/// \par Wraps -/// vec_sld -/// \since Crypto++ 7.0 -template -inline T VecSwapWords(const T vec) -{ - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, 8); -} - -//@} - -/// \name COMPARISON -//@{ - -/// \brief Compare two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return true if vec1 equals vec2, false otherwise -/// \details VecEqual() performs a bitwise compare. The vector element types do -/// not matter. -/// \par Wraps -/// vec_all_eq -/// \since Crypto++ 8.0 -template -inline bool VecEqual(const T1 vec1, const T2 vec2) -{ - return 1 == vec_all_eq((uint32x4_p)vec1, (uint32x4_p)vec2); -} - -/// \brief Compare two vectors -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return true if vec1 does not equal vec2, false otherwise -/// \details VecNotEqual() performs a bitwise compare. The vector element types do -/// not matter. -/// \par Wraps -/// vec_all_eq -/// \since Crypto++ 8.0 -template -inline bool VecNotEqual(const T1 vec1, const T2 vec2) -{ - return 0 == vec_all_eq((uint32x4_p)vec1, (uint32x4_p)vec2); -} - -//@} - -////////////////// 32-bit Altivec ///////////////// - -/// \name 32-BIT ALTIVEC -//@{ - -/// \brief Add two vectors as if uint64x2_p -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecAdd64() performs vec1 + vec2. VecAdd64() performs as -/// if adding two uint64x2_p vectors. On POWER7 and below VecAdd64() manages -/// the carries from the elements. -/// \par Wraps -/// vec_add for POWER8, vec_addc, vec_perm, vec_add for Altivec -/// \since Crypto++ 8.3 -inline uint32x4_p VecAdd64(const uint32x4_p& vec1, const uint32x4_p& vec2) -{ - // 64-bit elements available at POWER7 with VSX, but addudm requires POWER8 -#if defined(_ARCH_PWR8) && !defined(CRYPTOPP_DEBUG) - return (uint32x4_p)vec_add((uint64x2_p)vec1, (uint64x2_p)vec2); -#else - // The carry mask selects carrys for elements 1 and 3 and sets - // remaining elements to 0. The results is then shifted so the - // carried values are added to elements 0 and 2. -#if defined(CRYPTOPP_BIG_ENDIAN) - const uint32x4_p zero = {0, 0, 0, 0}; - const uint32x4_p mask = {0, 1, 0, 1}; -#else - const uint32x4_p zero = {0, 0, 0, 0}; - const uint32x4_p mask = {1, 0, 1, 0}; -#endif - - uint32x4_p cy = vec_addc(vec1, vec2); - uint32x4_p res = vec_add(vec1, vec2); - cy = vec_and(mask, cy); - cy = vec_sld (cy, zero, 4); - return vec_add(res, cy); -#endif -} - -#if defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Add two vectors as if uint64x2_p -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecAdd64() performs vec1 + vec2. VecAdd64() performs as -/// if adding two uint64x2_p vectors. On POWER7 and below VecAdd64() manages -/// the carries from the elements. -/// \par Wraps -/// vec_add for POWER8 -/// \since Crypto++ 8.3 -inline uint64x2_p VecAdd64(const uint64x2_p& vec1, const uint64x2_p& vec2) -{ - // 64-bit elements available at POWER7 with VSX, but addudm requires POWER8 - const uint64x2_p res = vec_add(vec1, vec2); - -#if defined(CRYPTOPP_DEBUG) - // Test 32-bit add in debug builds while we are here. - const uint32x4_p x = (uint32x4_p)vec1; - const uint32x4_p y = (uint32x4_p)vec2; - const uint32x4_p r = VecAdd64(x, y); - - CRYPTOPP_ASSERT(vec_all_eq((uint32x4_p)res, r) == 1); -#endif - - return res; -} -#endif - -/// \brief Subtract two vectors as if uint64x2_p -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \details VecSub64() performs vec1 - vec2. VecSub64() performs as -/// if subtracting two uint64x2_p vectors. On POWER7 and below VecSub64() -/// manages the borrows from the elements. -/// \par Wraps -/// vec_sub for POWER8, vec_subc, vec_andc, vec_perm, vec_sub for Altivec -/// \since Crypto++ 8.3 -inline uint32x4_p VecSub64(const uint32x4_p& vec1, const uint32x4_p& vec2) -{ -#if defined(_ARCH_PWR8) && !defined(CRYPTOPP_DEBUG) - // 64-bit elements available at POWER7 with VSX, but subudm requires POWER8 - return (uint32x4_p)vec_sub((uint64x2_p)vec1, (uint64x2_p)vec2); -#else - // The borrow mask selects borrows for elements 1 and 3 and sets - // remaining elements to 0. The results is then shifted so the - // borrowed values are subtracted from elements 0 and 2. -#if defined(CRYPTOPP_BIG_ENDIAN) - const uint32x4_p zero = {0, 0, 0, 0}; - const uint32x4_p mask = {0, 1, 0, 1}; -#else - const uint32x4_p zero = {0, 0, 0, 0}; - const uint32x4_p mask = {1, 0, 1, 0}; -#endif - - // subc sets the complement of borrow, so we have to - // un-complement it using andc. - uint32x4_p bw = vec_subc(vec1, vec2); - uint32x4_p res = vec_sub(vec1, vec2); - bw = vec_andc(mask, bw); - bw = vec_sld (bw, zero, 4); - return vec_sub(res, bw); -#endif -} - -#if defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Subtract two vectors as if uint64x2_p -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \details VecSub64() performs vec1 - vec2. VecSub64() performs as -/// if subtracting two uint64x2_p vectors. On POWER7 and below VecSub64() -/// manages the borrows from the elements. -/// \par Wraps -/// vec_sub for POWER8 -/// \since Crypto++ 8.3 -inline uint64x2_p VecSub64(const uint64x2_p& vec1, const uint64x2_p& vec2) -{ - // 64-bit elements available at POWER7 with VSX, but subudm requires POWER8 - const uint64x2_p res = vec_sub(vec1, vec2); - -#if defined(CRYPTOPP_DEBUG) - // Test 32-bit sub in debug builds while we are here. - const uint32x4_p x = (uint32x4_p)vec1; - const uint32x4_p y = (uint32x4_p)vec2; - const uint32x4_p r = VecSub64(x, y); - - CRYPTOPP_ASSERT(vec_all_eq((uint32x4_p)res, r) == 1); -#endif - - return res; -} -#endif - -/// \brief Rotate a vector left as if uint64x2_p -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateLeft() rotates each element in a vector by bit count. -/// vec is rotated as if uint64x2_p. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.3 -template -inline uint32x4_p VecRotateLeft64(const uint32x4_p vec) -{ -#if defined(_ARCH_PWR8) && !defined(CRYPTOPP_DEBUG) - // 64-bit elements available at POWER7 with VSX, but vec_rl and vec_sl require POWER8 - return (uint32x4_p)VecRotateLeft((uint64x2_p)vec); -#else - // C=0, 32, or 64 needs special handling. That is S32 and S64 below. - enum {S64=C&63, S32=C&31, BR=(S64>=32)}; - - // Get the low bits, shift them to high bits - uint32x4_p t1 = VecShiftLeft(vec); - // Get the high bits, shift them to low bits - uint32x4_p t2 = VecShiftRight<32-S32>(vec); - - if (S64 == 0) - { - const uint8x16_p m = {0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15}; - return VecPermute(vec, m); - } - else if (S64 == 32) - { - const uint8x16_p m = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; - return VecPermute(vec, m); - } - else if (BR) // Big rotate amount? - { - const uint8x16_p m = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; - t1 = VecPermute(t1, m); - } - else - { - const uint8x16_p m = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; - t2 = VecPermute(t2, m); - } - - return vec_or(t1, t2); -#endif -} - -/// \brief Rotate a vector left as if uint64x2_p -/// \param vec the vector -/// \return vector -/// \details VecRotateLeft<8>() rotates each element in a vector -/// by 8-bits. vec is rotated as if uint64x2_p. This specialization -/// is used by algorithms like Speck128. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.3 -template<> -inline uint32x4_p VecRotateLeft64<8>(const uint32x4_p vec) -{ -#if (CRYPTOPP_BIG_ENDIAN) - const uint8x16_p m = { 1,2,3,4, 5,6,7,0, 9,10,11,12, 13,14,15,8 }; - return VecPermute(vec, m); -#else - const uint8x16_p m = { 7,0,1,2, 3,4,5,6, 15,8,9,10, 11,12,13,14 }; - return VecPermute(vec, m); -#endif -} - -#if defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Rotate a vector left as if uint64x2_p -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateLeft64() rotates each element in a vector by -/// bit count. vec is rotated as if uint64x2_p. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.3 -template -inline uint64x2_p VecRotateLeft64(const uint64x2_p vec) -{ - // 64-bit elements available at POWER7 with VSX, but vec_rl and vec_sl require POWER8 - const uint64x2_p res = VecRotateLeft(vec); - -#if defined(CRYPTOPP_DEBUG) - // Test 32-bit rotate in debug builds while we are here. - const uint32x4_p x = (uint32x4_p)vec; - const uint32x4_p r = VecRotateLeft64(x); - - CRYPTOPP_ASSERT(vec_all_eq((uint32x4_p)res, r) == 1); -#endif - - return res; -} -#endif - -/// \brief Rotate a vector right as if uint64x2_p -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateRight64() rotates each element in a vector by -/// bit count. vec is rotated as if uint64x2_p. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.3 -template -inline uint32x4_p VecRotateRight64(const uint32x4_p vec) -{ -#if defined(_ARCH_PWR8) && !defined(CRYPTOPP_DEBUG) - // 64-bit elements available at POWER7 with VSX, but vec_rl and vec_sl require POWER8 - return (uint32x4_p)VecRotateRight((uint64x2_p)vec); -#else - // C=0, 32, or 64 needs special handling. That is S32 and S64 below. - enum {S64=C&63, S32=C&31, BR=(S64>=32)}; - - // Get the low bits, shift them to high bits - uint32x4_p t1 = VecShiftRight(vec); - // Get the high bits, shift them to low bits - uint32x4_p t2 = VecShiftLeft<32-S32>(vec); - - if (S64 == 0) - { - const uint8x16_p m = {0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15}; - return VecPermute(vec, m); - } - else if (S64 == 32) - { - const uint8x16_p m = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; - return VecPermute(vec, m); - } - else if (BR) // Big rotate amount? - { - const uint8x16_p m = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; - t1 = VecPermute(t1, m); - } - else - { - const uint8x16_p m = {4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11}; - t2 = VecPermute(t2, m); - } - - return vec_or(t1, t2); -#endif -} - -/// \brief Rotate a vector right as if uint64x2_p -/// \param vec the vector -/// \return vector -/// \details VecRotateRight64<8>() rotates each element in a vector -/// by 8-bits. vec is rotated as if uint64x2_p. This specialization -/// is used by algorithms like Speck128. -/// \details vec is rotated as if uint64x2_p. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.3 -template<> -inline uint32x4_p VecRotateRight64<8>(const uint32x4_p vec) -{ -#if (CRYPTOPP_BIG_ENDIAN) - const uint8x16_p m = { 7,0,1,2, 3,4,5,6, 15,8,9,10, 11,12,13,14 }; - return VecPermute(vec, m); -#else - const uint8x16_p m = { 1,2,3,4, 5,6,7,0, 9,10,11,12, 13,14,15,8 }; - return VecPermute(vec, m); -#endif -} - -#if defined(__VSX__) || defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Rotate a vector right as if uint64x2_p -/// \tparam C rotate bit count -/// \param vec the vector -/// \return vector -/// \details VecRotateRight64() rotates each element in a vector by -/// bit count. vec is rotated as if uint64x2_p. -/// \par Wraps -/// vec_rl -/// \since Crypto++ 8.3 -template -inline uint64x2_p VecRotateRight64(const uint64x2_p vec) -{ - // 64-bit elements available at POWER7 with VSX, but vec_rl and vec_sl require POWER8 - const uint64x2_p res = VecRotateRight(vec); - -#if defined(CRYPTOPP_DEBUG) - // Test 32-bit rotate in debug builds while we are here. - const uint32x4_p x = (uint32x4_p)vec; - const uint32x4_p r = VecRotateRight64(x); - - CRYPTOPP_ASSERT(vec_all_eq((uint32x4_p)res, r) == 1); -#endif - - return res; -} -#endif - -/// \brief AND two vectors as if uint64x2_p -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecAnd64() performs vec1 & vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \details VecAnd64() is a convenience function that simply performs a VecAnd(). -/// \par Wraps -/// vec_and -/// \since Crypto++ 8.3 -template -inline T1 VecAnd64(const T1 vec1, const T2 vec2) -{ - return (T1)vec_and(vec1, (T1)vec2); -} - -/// \brief OR two vectors as if uint64x2_p -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecOr64() performs vec1 | vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \details VecOr64() is a convenience function that simply performs a VecOr(). -/// \par Wraps -/// vec_or -/// \since Crypto++ 8.3 -template -inline T1 VecOr64(const T1 vec1, const T2 vec2) -{ - return (T1)vec_or(vec1, (T1)vec2); -} - -/// \brief XOR two vectors as if uint64x2_p -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param vec1 the first vector -/// \param vec2 the second vector -/// \return vector -/// \details VecXor64() performs vec1 ^ vec2. -/// vec2 is cast to the same type as vec1. The return vector -/// is the same type as vec1. -/// \details VecXor64() is a convenience function that simply performs a VecXor(). -/// \par Wraps -/// vec_xor -/// \since Crypto++ 8.3 -template -inline T1 VecXor64(const T1 vec1, const T2 vec2) -{ - return (T1)vec_xor(vec1, (T1)vec2); -} - -/// \brief Broadcast 64-bit double word to a vector -/// \param val the 64-bit value -/// \return vector -/// \par Wraps -/// vec_splats -/// \since Crypto++ 8.3 -inline uint32x4_p VecSplatWord64(word64 val) -{ -#if defined(_ARCH_PWR8) - // The PPC64 ABI says so. - return (uint32x4_p)vec_splats((unsigned long long)val); -#else - const word64 x[2] = {val,val}; - return (uint32x4_p)VecLoad((const word32*)x); -#endif -} - -/// \brief Broadcast 64-bit element to a vector as if uint64x2_p -/// \tparam the element number -/// \param val the 64-bit value -/// \return vector -/// \par Wraps -/// vec_splat -/// \since Crypto++ 8.3 -template -inline uint32x4_p VecSplatElement64(const uint32x4_p val) -{ -#if defined(__VSX__) || defined(_ARCH_PWR8) - return (uint32x4_p)vec_splat((uint64x2_p)val, N); -#else - enum {E=N&1}; - if (E == 0) - { - const uint8x16_p m = {0,1,2,3, 4,5,6,7, 0,1,2,3, 4,5,6,7}; - return (uint32x4_p)vec_perm(val, val, m); - } - else // (E == 1) - { - const uint8x16_p m = {8,9,10,11, 12,13,14,15, 8,9,10,11, 12,13,14,15}; - return (uint32x4_p)vec_perm(val, val, m); - } -#endif -} - -#if defined(__VSX__) || defined(_ARCH_PWR8) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Broadcast 64-bit element to a vector -/// \tparam the element number -/// \param val the 64-bit value -/// \return vector -/// \since Crypto++ 8.3 -template -inline uint64x2_p VecSplatElement64(const uint64x2_p val) -{ - return vec_splat(val, N); -} -#endif - -//@} - -//////////////////////// Power8 Crypto //////////////////////// - -// __CRYPTO__ alone is not enough. Clang will define __CRYPTO__ -// when it is not available, like with Power7. Sigh... -#if (defined(_ARCH_PWR8) && defined(__CRYPTO__)) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - -/// \name POLYNOMIAL MULTIPLICATION -//@{ - -/// \brief Polynomial multiplication -/// \param a the first term -/// \param b the second term -/// \return vector product -/// \details VecPolyMultiply() performs polynomial multiplication. POWER8 -/// polynomial multiplication multiplies the high and low terms, and then -/// XOR's the high and low products. That is, the result is ah*bh XOR -/// al*bl. It is different behavior than Intel polynomial -/// multiplication. To obtain a single product without the XOR, then set -/// one of the high or low terms to 0. For example, setting ah=0 -/// results in 0*bh XOR al*bl = al*bl. -/// \par Wraps -/// __vpmsumw, __builtin_altivec_crypto_vpmsumw and __builtin_crypto_vpmsumw. -/// \since Crypto++ 8.1 -inline uint32x4_p VecPolyMultiply(const uint32x4_p& a, const uint32x4_p& b) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return __vpmsumw (a, b); -#elif defined(__clang__) - return __builtin_altivec_crypto_vpmsumw (a, b); -#else - return __builtin_crypto_vpmsumw (a, b); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first term -/// \param b the second term -/// \return vector product -/// \details VecPolyMultiply() performs polynomial multiplication. POWER8 -/// polynomial multiplication multiplies the high and low terms, and then -/// XOR's the high and low products. That is, the result is ah*bh XOR -/// al*bl. It is different behavior than Intel polynomial -/// multiplication. To obtain a single product without the XOR, then set -/// one of the high or low terms to 0. For example, setting ah=0 -/// results in 0*bh XOR al*bl = al*bl. -/// \par Wraps -/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. -/// \since Crypto++ 8.1 -inline uint64x2_p VecPolyMultiply(const uint64x2_p& a, const uint64x2_p& b) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return __vpmsumd (a, b); -#elif defined(__clang__) - return __builtin_altivec_crypto_vpmsumd (a, b); -#else - return __builtin_crypto_vpmsumd (a, b); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first term -/// \param b the second term -/// \return vector product -/// \details VecIntelMultiply00() performs polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x00). -/// The 0x00 indicates the low 64-bits of a and b -/// are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and numbered 0. -/// \par Wraps -/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. -/// \since Crypto++ 8.0 -inline uint64x2_p VecIntelMultiply00(const uint64x2_p& a, const uint64x2_p& b) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - return VecSwapWords(VecPolyMultiply(VecGetHigh(a), VecGetHigh(b))); -#else - return VecPolyMultiply(VecGetHigh(a), VecGetHigh(b)); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first term -/// \param b the second term -/// \return vector product -/// \details VecIntelMultiply01 performs() polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x01). -/// The 0x01 indicates the low 64-bits of a and high -/// 64-bits of b are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and numbered 0. -/// \par Wraps -/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. -/// \since Crypto++ 8.0 -inline uint64x2_p VecIntelMultiply01(const uint64x2_p& a, const uint64x2_p& b) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - return VecSwapWords(VecPolyMultiply(a, VecGetHigh(b))); -#else - return VecPolyMultiply(a, VecGetHigh(b)); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first term -/// \param b the second term -/// \return vector product -/// \details VecIntelMultiply10() performs polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x10). -/// The 0x10 indicates the high 64-bits of a and low -/// 64-bits of b are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and numbered 0. -/// \par Wraps -/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. -/// \since Crypto++ 8.0 -inline uint64x2_p VecIntelMultiply10(const uint64x2_p& a, const uint64x2_p& b) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - return VecSwapWords(VecPolyMultiply(VecGetHigh(a), b)); -#else - return VecPolyMultiply(VecGetHigh(a), b); -#endif -} - -/// \brief Polynomial multiplication -/// \param a the first term -/// \param b the second term -/// \return vector product -/// \details VecIntelMultiply11() performs polynomial multiplication and presents -/// the result like Intel's c = _mm_clmulepi64_si128(a, b, 0x11). -/// The 0x11 indicates the high 64-bits of a and b -/// are multiplied. -/// \note An Intel XMM register is composed of 128-bits. The leftmost bit -/// is MSB and numbered 127, while the rightmost bit is LSB and numbered 0. -/// \par Wraps -/// __vpmsumd, __builtin_altivec_crypto_vpmsumd and __builtin_crypto_vpmsumd. -/// \since Crypto++ 8.0 -inline uint64x2_p VecIntelMultiply11(const uint64x2_p& a, const uint64x2_p& b) -{ -#if defined(CRYPTOPP_BIG_ENDIAN) - return VecSwapWords(VecPolyMultiply(VecGetLow(a), b)); -#else - return VecPolyMultiply(VecGetLow(a), b); -#endif -} - -//@} - -/// \name AES ENCRYPTION -//@{ - -/// \brief One round of AES encryption -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param state the state vector -/// \param key the subkey vector -/// \details VecEncrypt() performs one round of AES encryption of state -/// using subkey key. The return vector is the same type as state. -/// \details VecEncrypt() is available on POWER8 and above. -/// \par Wraps -/// __vcipher, __builtin_altivec_crypto_vcipher, __builtin_crypto_vcipher -/// \since GCC and XLC since Crypto++ 6.0, LLVM Clang since Crypto++ 8.0 -template -inline T1 VecEncrypt(const T1 state, const T2 key) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return (T1)__vcipher((uint8x16_p)state, (uint8x16_p)key); -#elif defined(__clang__) - return (T1)__builtin_altivec_crypto_vcipher((uint64x2_p)state, (uint64x2_p)key); -#elif defined(__GNUC__) - return (T1)__builtin_crypto_vcipher((uint64x2_p)state, (uint64x2_p)key); -#else - CRYPTOPP_ASSERT(0); -#endif -} - -/// \brief Final round of AES encryption -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param state the state vector -/// \param key the subkey vector -/// \details VecEncryptLast() performs the final round of AES encryption -/// of state using subkey key. The return vector is the same type as state. -/// \details VecEncryptLast() is available on POWER8 and above. -/// \par Wraps -/// __vcipherlast, __builtin_altivec_crypto_vcipherlast, __builtin_crypto_vcipherlast -/// \since GCC and XLC since Crypto++ 6.0, LLVM Clang since Crypto++ 8.0 -template -inline T1 VecEncryptLast(const T1 state, const T2 key) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return (T1)__vcipherlast((uint8x16_p)state, (uint8x16_p)key); -#elif defined(__clang__) - return (T1)__builtin_altivec_crypto_vcipherlast((uint64x2_p)state, (uint64x2_p)key); -#elif defined(__GNUC__) - return (T1)__builtin_crypto_vcipherlast((uint64x2_p)state, (uint64x2_p)key); -#else - CRYPTOPP_ASSERT(0); -#endif -} - -/// \brief One round of AES decryption -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param state the state vector -/// \param key the subkey vector -/// \details VecDecrypt() performs one round of AES decryption of state -/// using subkey key. The return vector is the same type as state. -/// \details VecDecrypt() is available on POWER8 and above. -/// \par Wraps -/// __vncipher, __builtin_altivec_crypto_vncipher, __builtin_crypto_vncipher -/// \since GCC and XLC since Crypto++ 6.0, LLVM Clang since Crypto++ 8.0 -template -inline T1 VecDecrypt(const T1 state, const T2 key) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return (T1)__vncipher((uint8x16_p)state, (uint8x16_p)key); -#elif defined(__clang__) - return (T1)__builtin_altivec_crypto_vncipher((uint64x2_p)state, (uint64x2_p)key); -#elif defined(__GNUC__) - return (T1)__builtin_crypto_vncipher((uint64x2_p)state, (uint64x2_p)key); -#else - CRYPTOPP_ASSERT(0); -#endif -} - -/// \brief Final round of AES decryption -/// \tparam T1 vector type -/// \tparam T2 vector type -/// \param state the state vector -/// \param key the subkey vector -/// \details VecDecryptLast() performs the final round of AES decryption -/// of state using subkey key. The return vector is the same type as state. -/// \details VecDecryptLast() is available on POWER8 and above. -/// \par Wraps -/// __vncipherlast, __builtin_altivec_crypto_vncipherlast, __builtin_crypto_vncipherlast -/// \since GCC and XLC since Crypto++ 6.0, LLVM Clang since Crypto++ 8.0 -template -inline T1 VecDecryptLast(const T1 state, const T2 key) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return (T1)__vncipherlast((uint8x16_p)state, (uint8x16_p)key); -#elif defined(__clang__) - return (T1)__builtin_altivec_crypto_vncipherlast((uint64x2_p)state, (uint64x2_p)key); -#elif defined(__GNUC__) - return (T1)__builtin_crypto_vncipherlast((uint64x2_p)state, (uint64x2_p)key); -#else - CRYPTOPP_ASSERT(0); -#endif -} - -//@} - -/// \name SHA DIGESTS -//@{ - -/// \brief SHA256 Sigma functions -/// \tparam func function -/// \tparam fmask function mask -/// \tparam T vector type -/// \param data the block to transform -/// \details VecSHA256() selects sigma0, sigma1, Sigma0, Sigma1 based on -/// func and fmask. The return vector is the same type as data. -/// \details VecSHA256() is available on POWER8 and above. -/// \par Wraps -/// __vshasigmaw, __builtin_altivec_crypto_vshasigmaw, __builtin_crypto_vshasigmaw -/// \since GCC and XLC since Crypto++ 6.0, LLVM Clang since Crypto++ 8.0 -template -inline T VecSHA256(const T data) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return (T)__vshasigmaw((uint32x4_p)data, func, fmask); -#elif defined(__clang__) - return (T)__builtin_altivec_crypto_vshasigmaw((uint32x4_p)data, func, fmask); -#elif defined(__GNUC__) - return (T)__builtin_crypto_vshasigmaw((uint32x4_p)data, func, fmask); -#else - CRYPTOPP_ASSERT(0); -#endif -} - -/// \brief SHA512 Sigma functions -/// \tparam func function -/// \tparam fmask function mask -/// \tparam T vector type -/// \param data the block to transform -/// \details VecSHA512() selects sigma0, sigma1, Sigma0, Sigma1 based on -/// func and fmask. The return vector is the same type as data. -/// \details VecSHA512() is available on POWER8 and above. -/// \par Wraps -/// __vshasigmad, __builtin_altivec_crypto_vshasigmad, __builtin_crypto_vshasigmad -/// \since GCC and XLC since Crypto++ 6.0, LLVM Clang since Crypto++ 8.0 -template -inline T VecSHA512(const T data) -{ -#if defined(__ibmxl__) || (defined(_AIX) && defined(__xlC__)) - return (T)__vshasigmad((uint64x2_p)data, func, fmask); -#elif defined(__clang__) - return (T)__builtin_altivec_crypto_vshasigmad((uint64x2_p)data, func, fmask); -#elif defined(__GNUC__) - return (T)__builtin_crypto_vshasigmad((uint64x2_p)data, func, fmask); -#else - CRYPTOPP_ASSERT(0); -#endif -} - -//@} - -#endif // __CRYPTO__ - -#endif // _ALTIVEC_ - -NAMESPACE_END - -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic pop -#endif - -#endif // CRYPTOPP_PPC_CRYPTO_H diff --git a/third_party/cryptoppwin/include/cryptopp/pssr.h b/third_party/cryptoppwin/include/cryptopp/pssr.h deleted file mode 100644 index 46386227..00000000 --- a/third_party/cryptoppwin/include/cryptopp/pssr.h +++ /dev/null @@ -1,105 +0,0 @@ -// pssr.h - originally written and placed in the public domain by Wei Dai - -/// \file pssr.h -/// \brief Classes for probabilistic signature schemes -/// \since Crypto++ 2.1 - -#ifndef CRYPTOPP_PSSR_H -#define CRYPTOPP_PSSR_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "emsa2.h" - -#ifdef CRYPTOPP_IS_DLL -#include "sha.h" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief PSSR Message Encoding Method interface -/// \since Crypto++ 2.1 -class CRYPTOPP_DLL PSSR_MEM_Base : public PK_RecoverableSignatureMessageEncodingMethod -{ -public: - virtual ~PSSR_MEM_Base() {} - -protected: - virtual bool AllowRecovery() const =0; - virtual size_t SaltLen(size_t hashLen) const =0; - virtual size_t MinPadLen(size_t hashLen) const =0; - virtual const MaskGeneratingFunction & GetMGF() const =0; - -private: - size_t MinRepresentativeBitLength(size_t hashIdentifierLength, size_t digestLength) const; - size_t MaxRecoverableLength(size_t representativeBitLength, size_t hashIdentifierLength, size_t digestLength) const; - bool IsProbabilistic() const; - bool AllowNonrecoverablePart() const; - bool RecoverablePartFirst() const; - void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; - DecodingResult RecoverMessageFromRepresentative( - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength, - byte *recoverableMessage) const; -}; - -/// \brief PSSR Message Encoding Method with Hash Identifier -/// \tparam USE_HASH_ID flag indicating whether the HashId is used -/// \since Crypto++ 2.1 -template class PSSR_MEM_BaseWithHashId; - -/// \brief PSSR Message Encoding Method with Hash Identifier -/// \details If USE_HASH_ID is true, then EMSA2HashIdLookup is used for the base class -template<> class PSSR_MEM_BaseWithHashId : public EMSA2HashIdLookup {}; - -/// \brief PSSR Message Encoding Method without Hash Identifier -/// \details If USE_HASH_ID is false, then PSSR_MEM_Base is used for the base class -/// \since Crypto++ 2.1 -template<> class PSSR_MEM_BaseWithHashId : public PSSR_MEM_Base {}; - -/// \brief PSSR Message Encoding Method -/// \tparam ALLOW_RECOVERY flag indicating whether the scheme provides message recovery -/// \tparam MGF mask generation function -/// \tparam SALT_LEN length of the salt -/// \tparam MIN_PAD_LEN minimum length of the pad -/// \tparam USE_HASH_ID flag indicating whether the HashId is used -/// \details If ALLOW_RECOVERY is true, the signature scheme provides message recovery. If -/// ALLOW_RECOVERY is false, the signature scheme is appendix, and the message must be -/// provided during verification. -/// \since Crypto++ 2.1 -template -class PSSR_MEM : public PSSR_MEM_BaseWithHashId -{ - virtual bool AllowRecovery() const {return ALLOW_RECOVERY;} - virtual size_t SaltLen(size_t hashLen) const {return SALT_LEN < 0 ? hashLen : SALT_LEN;} - virtual size_t MinPadLen(size_t hashLen) const {return MIN_PAD_LEN < 0 ? hashLen : MIN_PAD_LEN;} - virtual const MaskGeneratingFunction & GetMGF() const {static MGF mgf; return mgf;} - -public: - static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string(ALLOW_RECOVERY ? "PSSR-" : "PSS-") + MGF::StaticAlgorithmName();} -}; - -/// \brief Probabilistic Signature Scheme with Recovery -/// \details Signature Schemes with Recovery encode the message with the signature. -/// \sa PSSR-MGF1 -/// \since Crypto++ 2.1 -struct PSSR : public SignatureStandard -{ - typedef PSSR_MEM SignatureMessageEncodingMethod; -}; - -/// \brief Probabilistic Signature Scheme with Appendix -/// \details Signature Schemes with Appendix require the message to be provided during verification. -/// \sa PSS-MGF1 -/// \since Crypto++ 2.1 -struct PSS : public SignatureStandard -{ - typedef PSSR_MEM SignatureMessageEncodingMethod; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/pubkey.h b/third_party/cryptoppwin/include/cryptopp/pubkey.h deleted file mode 100644 index bdfeef42..00000000 --- a/third_party/cryptoppwin/include/cryptopp/pubkey.h +++ /dev/null @@ -1,2378 +0,0 @@ -// pubkey.h - originally written and placed in the public domain by Wei Dai - -/// \file pubkey.h -/// \brief This file contains helper classes/functions for implementing public key algorithms. -/// \details The class hierarchies in this header file tend to look like this: -/// -///
-///                   x1
-///                  +--+
-///                  |  |
-///                 y1  z1
-///                  |  |
-///             x2  x2
-///                  |  |
-///                 y2  z2
-///                  |  |
-///             x3  x3
-///                  |  |
-///                 y3  z3
-/// 
-/// -///
    -///
  • x1, y1, z1 are abstract interface classes defined in cryptlib.h -///
  • x2, y2, z2 are implementations of the interfaces using "abstract policies", which -/// are pure virtual functions that should return interfaces to interchangeable algorithms. -/// These classes have Base suffixes. -///
  • x3, y3, z3 hold actual algorithms and implement those virtual functions. -/// These classes have Impl suffixes. -///
-/// -/// \details The TF_ prefix means an implementation using trapdoor functions on integers. -/// \details The DL_ prefix means an implementation using group operations in groups where discrete log is hard. - -#ifndef CRYPTOPP_PUBKEY_H -#define CRYPTOPP_PUBKEY_H - -#include "config.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4702) -#endif - -#include "cryptlib.h" -#include "integer.h" -#include "algebra.h" -#include "modarith.h" -#include "filters.h" -#include "eprecomp.h" -#include "fips140.h" -#include "argnames.h" -#include "smartptr.h" -#include "stdcpp.h" - -#if defined(__SUNPRO_CC) -# define MAYBE_RETURN(x) return x -#else -# define MAYBE_RETURN(x) CRYPTOPP_UNUSED(x) -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Provides range for plaintext and ciphertext lengths -/// \details A trapdoor function is a function that is easy to compute in one direction, -/// but difficult to compute in the opposite direction without special knowledge. -/// The special knowledge is usually the private key. -/// \details Trapdoor functions only handle messages of a limited length or size. -/// MaxPreimage is the plaintext's maximum length, and MaxImage is the -/// ciphertext's maximum length. -/// \sa TrapdoorFunctionBounds(), RandomizedTrapdoorFunction(), TrapdoorFunction(), -/// RandomizedTrapdoorFunctionInverse() and TrapdoorFunctionInverse() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TrapdoorFunctionBounds -{ -public: - virtual ~TrapdoorFunctionBounds() {} - - /// \brief Returns the maximum size of a message before the trapdoor function is applied - /// \return the maximum size of a message before the trapdoor function is applied - /// \details Derived classes must implement PreimageBound(). - virtual Integer PreimageBound() const =0; - /// \brief Returns the maximum size of a representation after the trapdoor function is applied - /// \return the maximum size of a representation after the trapdoor function is applied - /// \details Derived classes must implement ImageBound(). - virtual Integer ImageBound() const =0; - /// \brief Returns the maximum size of a message before the trapdoor function is applied bound to a public key - /// \return the maximum size of a message before the trapdoor function is applied bound to a public key - /// \details The default implementation returns PreimageBound() - 1. - virtual Integer MaxPreimage() const {return --PreimageBound();} - /// \brief Returns the maximum size of a representation after the trapdoor function is applied bound to a public key - /// \return the maximum size of a representation after the trapdoor function is applied bound to a public key - /// \details The default implementation returns ImageBound() - 1. - virtual Integer MaxImage() const {return --ImageBound();} -}; - -/// \brief Applies the trapdoor function, using random data if required -/// \details ApplyFunction() is the foundation for encrypting a message under a public key. -/// Derived classes will override it at some point. -/// \sa TrapdoorFunctionBounds(), RandomizedTrapdoorFunction(), TrapdoorFunction(), -/// RandomizedTrapdoorFunctionInverse() and TrapdoorFunctionInverse() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE RandomizedTrapdoorFunction : public TrapdoorFunctionBounds -{ -public: - virtual ~RandomizedTrapdoorFunction() {} - - /// \brief Applies the trapdoor function, using random data if required - /// \param rng a RandomNumberGenerator derived class - /// \param x the message on which the encryption function is applied - /// \return the message x encrypted under the public key - /// \details ApplyRandomizedFunction is a generalization of encryption under a public key - /// cryptosystem. The RandomNumberGenerator may (or may not) be required. - /// Derived classes must implement it. - virtual Integer ApplyRandomizedFunction(RandomNumberGenerator &rng, const Integer &x) const =0; - - /// \brief Determines if the encryption algorithm is randomized - /// \return true if the encryption algorithm is randomized, false otherwise - /// \details If IsRandomized() returns false, then NullRNG() can be used. - virtual bool IsRandomized() const {return true;} -}; - -/// \brief Applies the trapdoor function -/// \details ApplyFunction() is the foundation for encrypting a message under a public key. -/// Derived classes will override it at some point. -/// \sa TrapdoorFunctionBounds(), RandomizedTrapdoorFunction(), TrapdoorFunction(), -/// RandomizedTrapdoorFunctionInverse() and TrapdoorFunctionInverse() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TrapdoorFunction : public RandomizedTrapdoorFunction -{ -public: - virtual ~TrapdoorFunction() {} - - /// \brief Applies the trapdoor function - /// \param rng a RandomNumberGenerator derived class - /// \param x the message on which the encryption function is applied - /// \details ApplyRandomizedFunction is a generalization of encryption under a public key - /// cryptosystem. The RandomNumberGenerator may (or may not) be required. - /// \details Internally, ApplyRandomizedFunction() calls ApplyFunction() - /// without the RandomNumberGenerator. - Integer ApplyRandomizedFunction(RandomNumberGenerator &rng, const Integer &x) const - {CRYPTOPP_UNUSED(rng); return ApplyFunction(x);} - bool IsRandomized() const {return false;} - - /// \brief Applies the trapdoor - /// \param x the message on which the encryption function is applied - /// \return the message x encrypted under the public key - /// \details ApplyFunction is a generalization of encryption under a public key - /// cryptosystem. Derived classes must implement it. - virtual Integer ApplyFunction(const Integer &x) const =0; -}; - -/// \brief Applies the inverse of the trapdoor function, using random data if required -/// \details CalculateInverse() is the foundation for decrypting a message under a private key -/// in a public key cryptosystem. Derived classes will override it at some point. -/// \sa TrapdoorFunctionBounds(), RandomizedTrapdoorFunction(), TrapdoorFunction(), -/// RandomizedTrapdoorFunctionInverse() and TrapdoorFunctionInverse() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE RandomizedTrapdoorFunctionInverse -{ -public: - virtual ~RandomizedTrapdoorFunctionInverse() {} - - /// \brief Applies the inverse of the trapdoor function, using random data if required - /// \param rng a RandomNumberGenerator derived class - /// \param x the message on which the decryption function is applied - /// \return the message x decrypted under the private key - /// \details CalculateRandomizedInverse is a generalization of decryption using the private key - /// The RandomNumberGenerator may (or may not) be required. Derived classes must implement it. - virtual Integer CalculateRandomizedInverse(RandomNumberGenerator &rng, const Integer &x) const =0; - - /// \brief Determines if the decryption algorithm is randomized - /// \return true if the decryption algorithm is randomized, false otherwise - /// \details If IsRandomized() returns false, then NullRNG() can be used. - virtual bool IsRandomized() const {return true;} -}; - -/// \brief Applies the inverse of the trapdoor function -/// \details CalculateInverse() is the foundation for decrypting a message under a private key -/// in a public key cryptosystem. Derived classes will override it at some point. -/// \sa TrapdoorFunctionBounds(), RandomizedTrapdoorFunction(), TrapdoorFunction(), -/// RandomizedTrapdoorFunctionInverse() and TrapdoorFunctionInverse() -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TrapdoorFunctionInverse : public RandomizedTrapdoorFunctionInverse -{ -public: - virtual ~TrapdoorFunctionInverse() {} - - /// \brief Applies the inverse of the trapdoor function - /// \param rng a RandomNumberGenerator derived class - /// \param x the message on which the decryption function is applied - /// \return the message x decrypted under the private key - /// \details CalculateRandomizedInverse is a generalization of decryption using the private key - /// \details Internally, CalculateRandomizedInverse() calls CalculateInverse() - /// without the RandomNumberGenerator. - Integer CalculateRandomizedInverse(RandomNumberGenerator &rng, const Integer &x) const - {return CalculateInverse(rng, x);} - - /// \brief Determines if the decryption algorithm is randomized - /// \return true if the decryption algorithm is randomized, false otherwise - /// \details If IsRandomized() returns false, then NullRNG() can be used. - bool IsRandomized() const {return false;} - - /// \brief Calculates the inverse of an element - /// \param rng a RandomNumberGenerator derived class - /// \param x the element - /// \return the inverse of the element in the group - virtual Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const =0; -}; - -// ******************************************************** - -/// \brief Message encoding method for public key encryption -class CRYPTOPP_NO_VTABLE PK_EncryptionMessageEncodingMethod -{ -public: - virtual ~PK_EncryptionMessageEncodingMethod() {} - - virtual bool ParameterSupported(const char *name) const - {CRYPTOPP_UNUSED(name); return false;} - - /// max size of unpadded message in bytes, given max size of padded message in bits (1 less than size of modulus) - virtual size_t MaxUnpaddedLength(size_t paddedLength) const =0; - - virtual void Pad(RandomNumberGenerator &rng, const byte *raw, size_t inputLength, byte *padded, size_t paddedBitLength, const NameValuePairs ¶meters) const =0; - - virtual DecodingResult Unpad(const byte *padded, size_t paddedBitLength, byte *raw, const NameValuePairs ¶meters) const =0; -}; - -// ******************************************************** - -/// \brief The base for trapdoor based cryptosystems -/// \tparam TFI trapdoor function interface derived class -/// \tparam MEI message encoding interface derived class -template -class CRYPTOPP_NO_VTABLE TF_Base -{ -protected: - virtual ~TF_Base() {} - - virtual const TrapdoorFunctionBounds & GetTrapdoorFunctionBounds() const =0; - - typedef TFI TrapdoorFunctionInterface; - virtual const TrapdoorFunctionInterface & GetTrapdoorFunctionInterface() const =0; - - typedef MEI MessageEncodingInterface; - virtual const MessageEncodingInterface & GetMessageEncodingInterface() const =0; -}; - -// ******************************************************** - -/// \brief Public key trapdoor function default implementation -/// \tparam BASE public key cryptosystem with a fixed length -template -class CRYPTOPP_NO_VTABLE PK_FixedLengthCryptoSystemImpl : public BASE -{ -public: - virtual ~PK_FixedLengthCryptoSystemImpl() {} - - size_t MaxPlaintextLength(size_t ciphertextLength) const - {return ciphertextLength == FixedCiphertextLength() ? FixedMaxPlaintextLength() : 0;} - size_t CiphertextLength(size_t plaintextLength) const - {return plaintextLength <= FixedMaxPlaintextLength() ? FixedCiphertextLength() : 0;} - - virtual size_t FixedMaxPlaintextLength() const =0; - virtual size_t FixedCiphertextLength() const =0; -}; - -/// \brief Trapdoor function cryptosystem base class -/// \tparam INTFACE public key cryptosystem base interface -/// \tparam BASE public key cryptosystem implementation base -template -class CRYPTOPP_NO_VTABLE TF_CryptoSystemBase : public PK_FixedLengthCryptoSystemImpl, protected BASE -{ -public: - virtual ~TF_CryptoSystemBase() {} - - bool ParameterSupported(const char *name) const {return this->GetMessageEncodingInterface().ParameterSupported(name);} - size_t FixedMaxPlaintextLength() const {return this->GetMessageEncodingInterface().MaxUnpaddedLength(PaddedBlockBitLength());} - size_t FixedCiphertextLength() const {return this->GetTrapdoorFunctionBounds().MaxImage().ByteCount();} - -protected: - size_t PaddedBlockByteLength() const {return BitsToBytes(PaddedBlockBitLength());} - // Coverity finding on potential overflow/underflow. - size_t PaddedBlockBitLength() const {return SaturatingSubtract(this->GetTrapdoorFunctionBounds().PreimageBound().BitCount(),1U);} -}; - -/// \brief Trapdoor function cryptosystems decryption base class -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_DecryptorBase : public TF_CryptoSystemBase > -{ -public: - virtual ~TF_DecryptorBase() {} - - DecodingResult Decrypt(RandomNumberGenerator &rng, const byte *ciphertext, size_t ciphertextLength, byte *plaintext, const NameValuePairs ¶meters = g_nullNameValuePairs) const; -}; - -/// \brief Trapdoor function cryptosystems encryption base class -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_EncryptorBase : public TF_CryptoSystemBase > -{ -public: - virtual ~TF_EncryptorBase() {} - - void Encrypt(RandomNumberGenerator &rng, const byte *plaintext, size_t plaintextLength, byte *ciphertext, const NameValuePairs ¶meters = g_nullNameValuePairs) const; -}; - -// ******************************************************** - -// Typedef change due to Clang, http://github.com/weidai11/cryptopp/issues/300 -typedef std::pair HashIdentifier; - -/// \brief Interface for message encoding method for public key signature schemes. -/// \details PK_SignatureMessageEncodingMethod provides interfaces for message -/// encoding method for public key signature schemes. The methods support both -/// trapdoor functions (TF_*) and discrete logarithm (DL_*) -/// based schemes. -class CRYPTOPP_NO_VTABLE PK_SignatureMessageEncodingMethod -{ -public: - virtual ~PK_SignatureMessageEncodingMethod() {} - - virtual size_t MinRepresentativeBitLength(size_t hashIdentifierLength, size_t digestLength) const - {CRYPTOPP_UNUSED(hashIdentifierLength); CRYPTOPP_UNUSED(digestLength); return 0;} - virtual size_t MaxRecoverableLength(size_t representativeBitLength, size_t hashIdentifierLength, size_t digestLength) const - {CRYPTOPP_UNUSED(representativeBitLength); CRYPTOPP_UNUSED(representativeBitLength); CRYPTOPP_UNUSED(hashIdentifierLength); CRYPTOPP_UNUSED(digestLength); return 0;} - - /// \brief Determines whether an encoding method requires a random number generator - /// \return true if the encoding method requires a RandomNumberGenerator() - /// \details if IsProbabilistic() returns false, then NullRNG() can be passed to functions that take - /// RandomNumberGenerator(). - /// \sa Bellare and RogawayPSS: - /// Provably Secure Encoding Method for Digital Signatures - bool IsProbabilistic() const - {return true;} - bool AllowNonrecoverablePart() const - {throw NotImplemented("PK_MessageEncodingMethod: this signature scheme does not support message recovery");} - virtual bool RecoverablePartFirst() const - {throw NotImplemented("PK_MessageEncodingMethod: this signature scheme does not support message recovery");} - - // for verification, DL - virtual void ProcessSemisignature(HashTransformation &hash, const byte *semisignature, size_t semisignatureLength) const - {CRYPTOPP_UNUSED(hash); CRYPTOPP_UNUSED(semisignature); CRYPTOPP_UNUSED(semisignatureLength);} - - // for signature - virtual void ProcessRecoverableMessage(HashTransformation &hash, - const byte *recoverableMessage, size_t recoverableMessageLength, - const byte *presignature, size_t presignatureLength, - SecByteBlock &semisignature) const - { - CRYPTOPP_UNUSED(hash);CRYPTOPP_UNUSED(recoverableMessage); CRYPTOPP_UNUSED(recoverableMessageLength); - CRYPTOPP_UNUSED(presignature); CRYPTOPP_UNUSED(presignatureLength); CRYPTOPP_UNUSED(semisignature); - if (RecoverablePartFirst()) - CRYPTOPP_ASSERT(!"ProcessRecoverableMessage() not implemented"); - } - - virtual void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const =0; - - virtual bool VerifyMessageRepresentative( - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const =0; - - virtual DecodingResult RecoverMessageFromRepresentative( // for TF - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength, - byte *recoveredMessage) const - {CRYPTOPP_UNUSED(hash);CRYPTOPP_UNUSED(hashIdentifier); CRYPTOPP_UNUSED(messageEmpty); - CRYPTOPP_UNUSED(representative); CRYPTOPP_UNUSED(representativeBitLength); CRYPTOPP_UNUSED(recoveredMessage); - throw NotImplemented("PK_MessageEncodingMethod: this signature scheme does not support message recovery");} - - virtual DecodingResult RecoverMessageFromSemisignature( // for DL - HashTransformation &hash, HashIdentifier hashIdentifier, - const byte *presignature, size_t presignatureLength, - const byte *semisignature, size_t semisignatureLength, - byte *recoveredMessage) const - {CRYPTOPP_UNUSED(hash);CRYPTOPP_UNUSED(hashIdentifier); CRYPTOPP_UNUSED(presignature); CRYPTOPP_UNUSED(presignatureLength); - CRYPTOPP_UNUSED(semisignature); CRYPTOPP_UNUSED(semisignatureLength); CRYPTOPP_UNUSED(recoveredMessage); - throw NotImplemented("PK_MessageEncodingMethod: this signature scheme does not support message recovery");} - - // VC60 workaround - struct HashIdentifierLookup - { - template struct HashIdentifierLookup2 - { - static HashIdentifier CRYPTOPP_API Lookup() - { - return HashIdentifier(static_cast(NULLPTR), 0); - } - }; - }; -}; - -/// \brief Interface for message encoding method for public key signature schemes. -/// \details PK_DeterministicSignatureMessageEncodingMethod provides interfaces -/// for message encoding method for public key signature schemes. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_DeterministicSignatureMessageEncodingMethod : public PK_SignatureMessageEncodingMethod -{ -public: - bool VerifyMessageRepresentative( - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; -}; - -/// \brief Interface for message encoding method for public key signature schemes. -/// \details PK_RecoverableSignatureMessageEncodingMethod provides interfaces -/// for message encoding method for public key signature schemes. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_RecoverableSignatureMessageEncodingMethod : public PK_SignatureMessageEncodingMethod -{ -public: - bool VerifyMessageRepresentative( - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; -}; - -/// \brief Interface for message encoding method for public key signature schemes. -/// \details DL_SignatureMessageEncodingMethod_DSA provides interfaces -/// for message encoding method for DSA. -class CRYPTOPP_DLL DL_SignatureMessageEncodingMethod_DSA : public PK_DeterministicSignatureMessageEncodingMethod -{ -public: - void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; -}; - -/// \brief Interface for message encoding method for public key signature schemes. -/// \details DL_SignatureMessageEncodingMethod_NR provides interfaces -/// for message encoding method for Nyberg-Rueppel. -class CRYPTOPP_DLL DL_SignatureMessageEncodingMethod_NR : public PK_DeterministicSignatureMessageEncodingMethod -{ -public: - void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; -}; - -#if 0 -/// \brief Interface for message encoding method for public key signature schemes. -/// \details DL_SignatureMessageEncodingMethod_SM2 provides interfaces -/// for message encoding method for SM2. -class CRYPTOPP_DLL DL_SignatureMessageEncodingMethod_SM2 : public PK_DeterministicSignatureMessageEncodingMethod -{ -public: - void ComputeMessageRepresentative(RandomNumberGenerator &rng, - const byte *recoverableMessage, size_t recoverableMessageLength, - HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty, - byte *representative, size_t representativeBitLength) const; -}; -#endif - -/// \brief Interface for message encoding method for public key signature schemes. -/// \details PK_MessageAccumulatorBase provides interfaces -/// for message encoding method. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_MessageAccumulatorBase : public PK_MessageAccumulator -{ -public: - PK_MessageAccumulatorBase() : m_empty(true) {} - - virtual HashTransformation & AccessHash() =0; - - void Update(const byte *input, size_t length) - { - AccessHash().Update(input, length); - m_empty = m_empty && length == 0; - } - - SecByteBlock m_recoverableMessage, m_representative, m_presignature, m_semisignature; - Integer m_k, m_s; - bool m_empty; -}; - -/// \brief Interface for message encoding method for public key signature schemes. -/// \details PK_MessageAccumulatorBase provides interfaces -/// for message encoding method. -template -class PK_MessageAccumulatorImpl : public PK_MessageAccumulatorBase, protected ObjectHolder -{ -public: - HashTransformation & AccessHash() {return this->m_object;} -}; - -/// \brief Trapdoor Function (TF) Signature Scheme base class -/// \tparam INTFACE interface -/// \tparam BASE base class -template -class CRYPTOPP_NO_VTABLE TF_SignatureSchemeBase : public INTFACE, protected BASE -{ -public: - virtual ~TF_SignatureSchemeBase() {} - - size_t SignatureLength() const - {return this->GetTrapdoorFunctionBounds().MaxPreimage().ByteCount();} - size_t MaxRecoverableLength() const - {return this->GetMessageEncodingInterface().MaxRecoverableLength(MessageRepresentativeBitLength(), GetHashIdentifier().second, GetDigestSize());} - size_t MaxRecoverableLengthFromSignatureLength(size_t signatureLength) const - {CRYPTOPP_UNUSED(signatureLength); return this->MaxRecoverableLength();} - - bool IsProbabilistic() const - {return this->GetTrapdoorFunctionInterface().IsRandomized() || this->GetMessageEncodingInterface().IsProbabilistic();} - bool AllowNonrecoverablePart() const - {return this->GetMessageEncodingInterface().AllowNonrecoverablePart();} - bool RecoverablePartFirst() const - {return this->GetMessageEncodingInterface().RecoverablePartFirst();} - -protected: - size_t MessageRepresentativeLength() const {return BitsToBytes(MessageRepresentativeBitLength());} - // Coverity finding on potential overflow/underflow. - size_t MessageRepresentativeBitLength() const {return SaturatingSubtract(this->GetTrapdoorFunctionBounds().ImageBound().BitCount(),1U);} - virtual HashIdentifier GetHashIdentifier() const =0; - virtual size_t GetDigestSize() const =0; -}; - -/// \brief Trapdoor Function (TF) Signer base class -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_SignerBase : public TF_SignatureSchemeBase > -{ -public: - virtual ~TF_SignerBase() {} - - void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const; - size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart=true) const; -}; - -/// \brief Trapdoor Function (TF) Verifier base class -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_VerifierBase : public TF_SignatureSchemeBase > -{ -public: - virtual ~TF_VerifierBase() {} - - void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const; - bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const; - DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &recoveryAccumulator) const; -}; - -// ******************************************************** - -/// \brief Trapdoor Function (TF) scheme options -/// \tparam T1 algorithm info class -/// \tparam T2 keys class with public and private key -/// \tparam T3 message encoding class -template -struct TF_CryptoSchemeOptions -{ - typedef T1 AlgorithmInfo; - typedef T2 Keys; - typedef typename Keys::PrivateKey PrivateKey; - typedef typename Keys::PublicKey PublicKey; - typedef T3 MessageEncodingMethod; -}; - -/// \brief Trapdoor Function (TF) signature scheme options -/// \tparam T1 algorithm info class -/// \tparam T2 keys class with public and private key -/// \tparam T3 message encoding class -/// \tparam T4 HashTransformation class -template -struct TF_SignatureSchemeOptions : public TF_CryptoSchemeOptions -{ - typedef T4 HashFunction; -}; - -/// \brief Trapdoor Function (TF) base implementation -/// \tparam BASE base class -/// \tparam SCHEME_OPTIONS scheme options class -/// \tparam KEY_CLASS key class -template -class CRYPTOPP_NO_VTABLE TF_ObjectImplBase : public AlgorithmImpl -{ -public: - typedef SCHEME_OPTIONS SchemeOptions; - typedef KEY_CLASS KeyClass; - - virtual ~TF_ObjectImplBase() {} - - PublicKey & AccessPublicKey() {return AccessKey();} - const PublicKey & GetPublicKey() const {return GetKey();} - - PrivateKey & AccessPrivateKey() {return AccessKey();} - const PrivateKey & GetPrivateKey() const {return GetKey();} - - virtual const KeyClass & GetKey() const =0; - virtual KeyClass & AccessKey() =0; - - const KeyClass & GetTrapdoorFunction() const {return GetKey();} - - PK_MessageAccumulator * NewSignatureAccumulator(RandomNumberGenerator &rng) const - { - CRYPTOPP_UNUSED(rng); - return new PK_MessageAccumulatorImpl; - } - PK_MessageAccumulator * NewVerificationAccumulator() const - { - return new PK_MessageAccumulatorImpl; - } - -protected: - const typename BASE::MessageEncodingInterface & GetMessageEncodingInterface() const - {return Singleton().Ref();} - const TrapdoorFunctionBounds & GetTrapdoorFunctionBounds() const - {return GetKey();} - const typename BASE::TrapdoorFunctionInterface & GetTrapdoorFunctionInterface() const - {return GetKey();} - - // for signature scheme - HashIdentifier GetHashIdentifier() const - { - typedef typename SchemeOptions::MessageEncodingMethod::HashIdentifierLookup::template HashIdentifierLookup2 L; - return L::Lookup(); - } - size_t GetDigestSize() const - { - typedef typename SchemeOptions::HashFunction H; - return H::DIGESTSIZE; - } -}; - -/// \brief Trapdoor Function (TF) signature with external reference -/// \tparam BASE base class -/// \tparam SCHEME_OPTIONS scheme options class -/// \tparam KEY key class -/// \details TF_ObjectImplExtRef() holds a pointer to an external key structure -template -class TF_ObjectImplExtRef : public TF_ObjectImplBase -{ -public: - virtual ~TF_ObjectImplExtRef() {} - - TF_ObjectImplExtRef(const KEY *pKey = NULLPTR) : m_pKey(pKey) {} - void SetKeyPtr(const KEY *pKey) {m_pKey = pKey;} - - const KEY & GetKey() const {return *m_pKey;} - KEY & AccessKey() {throw NotImplemented("TF_ObjectImplExtRef: cannot modify refererenced key");} - -private: - const KEY * m_pKey; -}; - -/// \brief Trapdoor Function (TF) signature scheme options -/// \tparam BASE base class -/// \tparam SCHEME_OPTIONS scheme options class -/// \tparam KEY_CLASS key class -/// \details TF_ObjectImpl() holds a reference to a trapdoor function -template -class CRYPTOPP_NO_VTABLE TF_ObjectImpl : public TF_ObjectImplBase -{ -public: - typedef KEY_CLASS KeyClass; - - virtual ~TF_ObjectImpl() {} - - const KeyClass & GetKey() const {return m_trapdoorFunction;} - KeyClass & AccessKey() {return m_trapdoorFunction;} - -private: - KeyClass m_trapdoorFunction; -}; - -/// \brief Trapdoor Function (TF) decryptor options -/// \tparam SCHEME_OPTIONS scheme options class -template -class TF_DecryptorImpl : public TF_ObjectImpl -{ -}; - -/// \brief Trapdoor Function (TF) encryptor options -/// \tparam SCHEME_OPTIONS scheme options class -template -class TF_EncryptorImpl : public TF_ObjectImpl -{ -}; - -/// \brief Trapdoor Function (TF) encryptor options -/// \tparam SCHEME_OPTIONS scheme options class -template -class TF_SignerImpl : public TF_ObjectImpl -{ -}; - -/// \brief Trapdoor Function (TF) encryptor options -/// \tparam SCHEME_OPTIONS scheme options class -template -class TF_VerifierImpl : public TF_ObjectImpl -{ -}; - -// ******************************************************** - -/// \brief Mask generation function interface -/// \sa P1363_KDF2, P1363_MGF1 -/// \since Crypto++ 2.0 -class CRYPTOPP_NO_VTABLE MaskGeneratingFunction -{ -public: - virtual ~MaskGeneratingFunction() {} - - /// \brief Generate and apply mask - /// \param hash HashTransformation derived class - /// \param output the destination byte array - /// \param outputLength the size of the destination byte array - /// \param input the message to hash - /// \param inputLength the size of the message - /// \param mask flag indicating whether to apply the mask - virtual void GenerateAndMask(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, bool mask = true) const =0; -}; - -/// \fn P1363_MGF1KDF2_Common -/// \brief P1363 mask generation function -/// \param hash HashTransformation derived class -/// \param output the destination byte array -/// \param outputLength the size of the destination byte array -/// \param input the message to hash -/// \param inputLength the size of the message -/// \param derivationParams additional derivation parameters -/// \param derivationParamsLength the size of the additional derivation parameters -/// \param mask flag indicating whether to apply the mask -/// \param counterStart starting counter value used in generation function -CRYPTOPP_DLL void CRYPTOPP_API P1363_MGF1KDF2_Common(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, const byte *derivationParams, size_t derivationParamsLength, bool mask, unsigned int counterStart); - -/// \brief P1363 mask generation function -/// \sa P1363_KDF2, MaskGeneratingFunction -/// \since Crypto++ 2.0 -class P1363_MGF1 : public MaskGeneratingFunction -{ -public: - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "MGF1";} - - /// \brief P1363 mask generation function - /// \param hash HashTransformation derived class - /// \param output the destination byte array - /// \param outputLength the size of the destination byte array - /// \param input the message to hash - /// \param inputLength the size of the message - /// \param mask flag indicating whether to apply the mask - void GenerateAndMask(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, bool mask = true) const - { - P1363_MGF1KDF2_Common(hash, output, outputLength, input, inputLength, NULLPTR, 0, mask, 0); - } -}; - -// ******************************************************** - -/// \brief P1363 key derivation function -/// \tparam H hash function used in the derivation -/// \sa P1363_MGF1, KeyDerivationFunction, P1363_KDF2 -/// on the Crypto++ wiki -/// \since Crypto++ 2.0 -template -class P1363_KDF2 -{ -public: - /// \brief P1363 key derivation function - /// \param output the destination byte array - /// \param outputLength the size of the destination byte array - /// \param input the message to hash - /// \param inputLength the size of the message - /// \param derivationParams additional derivation parameters - /// \param derivationParamsLength the size of the additional derivation parameters - /// \details DeriveKey calls P1363_MGF1KDF2_Common - static void CRYPTOPP_API DeriveKey(byte *output, size_t outputLength, const byte *input, size_t inputLength, const byte *derivationParams, size_t derivationParamsLength) - { - H h; - P1363_MGF1KDF2_Common(h, output, outputLength, input, inputLength, derivationParams, derivationParamsLength, false, 1); - } -}; - -// ******************************************************** - -/// \brief Exception thrown when an invalid group element is encountered -/// \details Thrown by DecodeElement and AgreeWithStaticPrivateKey -class DL_BadElement : public InvalidDataFormat -{ -public: - DL_BadElement() : InvalidDataFormat("CryptoPP: invalid group element") {} -}; - -/// \brief Interface for Discrete Log (DL) group parameters -/// \tparam T element in the group -/// \details The element is usually an Integer, \ref ECP "ECP::Point" or \ref EC2N "EC2N::Point" -template -class CRYPTOPP_NO_VTABLE DL_GroupParameters : public CryptoParameters -{ - typedef DL_GroupParameters ThisClass; - -public: - typedef T Element; - - virtual ~DL_GroupParameters() {} - - DL_GroupParameters() : m_validationLevel(0) {} - - // CryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const - { - if (!GetBasePrecomputation().IsInitialized()) - return false; - - if (m_validationLevel > level) - return true; - - CRYPTOPP_ASSERT(ValidateGroup(rng, level)); - bool pass = ValidateGroup(rng, level); - CRYPTOPP_ASSERT(ValidateElement(level, GetSubgroupGenerator(), &GetBasePrecomputation())); - pass = pass && ValidateElement(level, GetSubgroupGenerator(), &GetBasePrecomputation()); - - m_validationLevel = pass ? level+1 : 0; - - return pass; - } - - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const - { - return GetValueHelper(this, name, valueType, pValue) - CRYPTOPP_GET_FUNCTION_ENTRY(SubgroupOrder) - CRYPTOPP_GET_FUNCTION_ENTRY(SubgroupGenerator) - ; - } - - /// \brief Determines whether the object supports precomputation - /// \return true if the object supports precomputation, false otherwise - /// \sa Precompute() - bool SupportsPrecomputation() const {return true;} - - /// \brief Perform precomputation - /// \param precomputationStorage the suggested number of objects for the precompute table - /// \throw NotImplemented - /// \details The exact semantics of Precompute() varies, but it typically means calculate - /// a table of n objects that can be used later to speed up computation. - /// \details If a derived class does not override Precompute(), then the base class throws - /// NotImplemented. - /// \sa SupportsPrecomputation(), LoadPrecomputation(), SavePrecomputation() - void Precompute(unsigned int precomputationStorage=16) - { - AccessBasePrecomputation().Precompute(GetGroupPrecomputation(), GetSubgroupOrder().BitCount(), precomputationStorage); - } - - /// \brief Retrieve previously saved precomputation - /// \param storedPrecomputation BufferedTransformation with the saved precomputation - /// \throw NotImplemented - /// \sa SupportsPrecomputation(), Precompute() - void LoadPrecomputation(BufferedTransformation &storedPrecomputation) - { - AccessBasePrecomputation().Load(GetGroupPrecomputation(), storedPrecomputation); - m_validationLevel = 0; - } - - /// \brief Save precomputation for later use - /// \param storedPrecomputation BufferedTransformation to write the precomputation - /// \throw NotImplemented - /// \sa SupportsPrecomputation(), Precompute() - void SavePrecomputation(BufferedTransformation &storedPrecomputation) const - { - GetBasePrecomputation().Save(GetGroupPrecomputation(), storedPrecomputation); - } - - /// \brief Retrieves the subgroup generator - /// \return the subgroup generator - /// \details The subgroup generator is retrieved from the base precomputation - virtual const Element & GetSubgroupGenerator() const {return GetBasePrecomputation().GetBase(GetGroupPrecomputation());} - - /// \brief Sets the subgroup generator - /// \param base the new subgroup generator - /// \details The subgroup generator is set in the base precomputation - virtual void SetSubgroupGenerator(const Element &base) {AccessBasePrecomputation().SetBase(GetGroupPrecomputation(), base);} - - /// \brief Exponentiates the base - /// \return the element after exponentiation - /// \details ExponentiateBase() calls GetBasePrecomputation() and then exponentiates. - virtual Element ExponentiateBase(const Integer &exponent) const - { - return GetBasePrecomputation().Exponentiate(GetGroupPrecomputation(), exponent); - } - - /// \brief Exponentiates an element - /// \param base the base element - /// \param exponent the exponent to raise the base - /// \return the result of the exponentiation - /// \details Internally, ExponentiateElement() calls SimultaneousExponentiate(). - virtual Element ExponentiateElement(const Element &base, const Integer &exponent) const - { - Element result; - SimultaneousExponentiate(&result, base, &exponent, 1); - return result; - } - - /// \brief Retrieves the group precomputation - /// \return a const reference to the group precomputation - virtual const DL_GroupPrecomputation & GetGroupPrecomputation() const =0; - - /// \brief Retrieves the group precomputation - /// \return a const reference to the group precomputation using a fixed base - virtual const DL_FixedBasePrecomputation & GetBasePrecomputation() const =0; - - /// \brief Retrieves the group precomputation - /// \return a non-const reference to the group precomputation using a fixed base - virtual DL_FixedBasePrecomputation & AccessBasePrecomputation() =0; - - /// \brief Retrieves the subgroup order - /// \return the order of subgroup generated by the base element - virtual const Integer & GetSubgroupOrder() const =0; - - /// \brief Retrieves the maximum exponent for the group - /// \return the maximum exponent for the group - virtual Integer GetMaxExponent() const =0; - - /// \brief Retrieves the order of the group - /// \return the order of the group - /// \details Either GetGroupOrder() or GetCofactor() must be overridden in a derived class. - virtual Integer GetGroupOrder() const {return GetSubgroupOrder()*GetCofactor();} - - /// \brief Retrieves the cofactor - /// \return the cofactor - /// \details Either GetGroupOrder() or GetCofactor() must be overridden in a derived class. - virtual Integer GetCofactor() const {return GetGroupOrder()/GetSubgroupOrder();} - - /// \brief Retrieves the encoded element's size - /// \param reversible flag indicating the encoding format - /// \return encoded element's size, in bytes - /// \details The format of the encoded element varies by the underlying type of the element and the - /// reversible flag. GetEncodedElementSize() must be implemented in a derived class. - /// \sa GetEncodedElementSize(), EncodeElement(), DecodeElement() - virtual unsigned int GetEncodedElementSize(bool reversible) const =0; - - /// \brief Encodes the element - /// \param reversible flag indicating the encoding format - /// \param element reference to the element to encode - /// \param encoded destination byte array for the encoded element - /// \details EncodeElement() must be implemented in a derived class. - /// \pre COUNTOF(encoded) == GetEncodedElementSize() - virtual void EncodeElement(bool reversible, const Element &element, byte *encoded) const =0; - - /// \brief Decodes the element - /// \param encoded byte array with the encoded element - /// \param checkForGroupMembership flag indicating if the element should be validated - /// \return Element after decoding - /// \details DecodeElement() must be implemented in a derived class. - /// \pre COUNTOF(encoded) == GetEncodedElementSize() - virtual Element DecodeElement(const byte *encoded, bool checkForGroupMembership) const =0; - - /// \brief Converts an element to an Integer - /// \param element the element to convert to an Integer - /// \return Element after converting to an Integer - /// \details ConvertElementToInteger() must be implemented in a derived class. - virtual Integer ConvertElementToInteger(const Element &element) const =0; - - /// \brief Check the group for errors - /// \param rng RandomNumberGenerator for objects which use randomized testing - /// \param level level of thoroughness - /// \return true if the tests succeed, false otherwise - /// \details There are four levels of thoroughness: - ///
    - ///
  • 0 - using this object won't cause a crash or exception - ///
  • 1 - this object will probably function, and encrypt, sign, other operations correctly - ///
  • 2 - ensure this object will function correctly, and perform reasonable security checks - ///
  • 3 - perform reasonable security checks, and do checks that may take a long time - ///
- /// \details Level 0 does not require a RandomNumberGenerator. A NullRNG() can be used for level 0. - /// Level 1 may not check for weak keys and such. Levels 2 and 3 are recommended. - /// \details ValidateGroup() must be implemented in a derived class. - virtual bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const =0; - - /// \brief Check the element for errors - /// \param level level of thoroughness - /// \param element element to check - /// \param precomp optional pointer to DL_FixedBasePrecomputation - /// \return true if the tests succeed, false otherwise - /// \details There are four levels of thoroughness: - ///
    - ///
  • 0 - using this object won't cause a crash or exception - ///
  • 1 - this object will probably function, and encrypt, sign, other operations correctly - ///
  • 2 - ensure this object will function correctly, and perform reasonable security checks - ///
  • 3 - perform reasonable security checks, and do checks that may take a long time - ///
- /// \details Level 0 performs group membership checks. Level 1 may not check for weak keys and such. - /// Levels 2 and 3 are recommended. - /// \details ValidateElement() must be implemented in a derived class. - virtual bool ValidateElement(unsigned int level, const Element &element, const DL_FixedBasePrecomputation *precomp) const =0; - - virtual bool FastSubgroupCheckAvailable() const =0; - - /// \brief Determines if an element is an identity - /// \param element element to check - /// \return true if the element is an identity, false otherwise - /// \details The identity element or or neutral element is a special element in a group that leaves - /// other elements unchanged when combined with it. - /// \details IsIdentity() must be implemented in a derived class. - virtual bool IsIdentity(const Element &element) const =0; - - /// \brief Exponentiates a base to multiple exponents - /// \param results an array of Elements - /// \param base the base to raise to the exponents - /// \param exponents an array of exponents - /// \param exponentsCount the number of exponents in the array - /// \details SimultaneousExponentiate() raises the base to each exponent in the exponents array and stores the - /// result at the respective position in the results array. - /// \details SimultaneousExponentiate() must be implemented in a derived class. - /// \pre COUNTOF(results) == exponentsCount - /// \pre COUNTOF(exponents) == exponentsCount - virtual void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const =0; - -protected: - void ParametersChanged() {m_validationLevel = 0;} - -private: - mutable unsigned int m_validationLevel; -}; - -/// \brief Base implementation of Discrete Log (DL) group parameters -/// \tparam GROUP_PRECOMP group precomputation class -/// \tparam BASE_PRECOMP fixed base precomputation class -/// \tparam BASE class or type of an element -template , class BASE = DL_GroupParameters > -class DL_GroupParametersImpl : public BASE -{ -public: - typedef GROUP_PRECOMP GroupPrecomputation; - typedef typename GROUP_PRECOMP::Element Element; - typedef BASE_PRECOMP BasePrecomputation; - - virtual ~DL_GroupParametersImpl() {} - - /// \brief Retrieves the group precomputation - /// \return a const reference to the group precomputation - const DL_GroupPrecomputation & GetGroupPrecomputation() const {return m_groupPrecomputation;} - - /// \brief Retrieves the group precomputation - /// \return a const reference to the group precomputation using a fixed base - const DL_FixedBasePrecomputation & GetBasePrecomputation() const {return m_gpc;} - - /// \brief Retrieves the group precomputation - /// \return a non-const reference to the group precomputation using a fixed base - DL_FixedBasePrecomputation & AccessBasePrecomputation() {return m_gpc;} - -protected: - GROUP_PRECOMP m_groupPrecomputation; - BASE_PRECOMP m_gpc; -}; - -/// \brief Base class for a Discrete Log (DL) key -/// \tparam T class or type of an element -/// \details The element is usually an Integer, \ref ECP "ECP::Point" or \ref EC2N "EC2N::Point" -template -class CRYPTOPP_NO_VTABLE DL_Key -{ -public: - virtual ~DL_Key() {} - - /// \brief Retrieves abstract group parameters - /// \return a const reference to the group parameters - virtual const DL_GroupParameters & GetAbstractGroupParameters() const =0; - /// \brief Retrieves abstract group parameters - /// \return a non-const reference to the group parameters - virtual DL_GroupParameters & AccessAbstractGroupParameters() =0; -}; - -/// \brief Interface for Discrete Log (DL) public keys -template -class CRYPTOPP_NO_VTABLE DL_PublicKey : public DL_Key -{ - typedef DL_PublicKey ThisClass; - -public: - typedef T Element; - - virtual ~DL_PublicKey(); - - /// \brief Get a named value - /// \param name the name of the object or value to retrieve - /// \param valueType reference to a variable that receives the value - /// \param pValue void pointer to a variable that receives the value - /// \return true if the value was retrieved, false otherwise - /// \details GetVoidValue() retrieves the value of name if it exists. - /// \note GetVoidValue() is an internal function and should be implemented - /// by derived classes. Users should use one of the other functions instead. - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const - { - return GetValueHelper(this, name, valueType, pValue, &this->GetAbstractGroupParameters()) - CRYPTOPP_GET_FUNCTION_ENTRY(PublicElement); - } - - /// \brief Initialize or reinitialize this key - /// \param source NameValuePairs to assign - void AssignFrom(const NameValuePairs &source); - - /// \brief Retrieves the public element - /// \return the public element - virtual const Element & GetPublicElement() const {return GetPublicPrecomputation().GetBase(this->GetAbstractGroupParameters().GetGroupPrecomputation());} - - /// \brief Sets the public element - /// \param y the public element - virtual void SetPublicElement(const Element &y) {AccessPublicPrecomputation().SetBase(this->GetAbstractGroupParameters().GetGroupPrecomputation(), y);} - - /// \brief Exponentiates this element - /// \param exponent the exponent to raise the base - /// \return the public element raised to the exponent - virtual Element ExponentiatePublicElement(const Integer &exponent) const - { - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - return GetPublicPrecomputation().Exponentiate(params.GetGroupPrecomputation(), exponent); - } - - /// \brief Exponentiates an element - /// \param baseExp the first exponent - /// \param publicExp the second exponent - /// \return the public element raised to the exponent - /// \details CascadeExponentiateBaseAndPublicElement raises the public element to - /// the base element and precomputation. - virtual Element CascadeExponentiateBaseAndPublicElement(const Integer &baseExp, const Integer &publicExp) const - { - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - return params.GetBasePrecomputation().CascadeExponentiate(params.GetGroupPrecomputation(), baseExp, GetPublicPrecomputation(), publicExp); - } - - /// \brief Accesses the public precomputation - /// \details GetPublicPrecomputation returns a const reference, while - /// AccessPublicPrecomputation returns a non-const reference. Must be - /// overridden in derived classes. - virtual const DL_FixedBasePrecomputation & GetPublicPrecomputation() const =0; - - /// \brief Accesses the public precomputation - /// \details GetPublicPrecomputation returns a const reference, while - /// AccessPublicPrecomputation returns a non-const reference. Must be - /// overridden in derived classes. - virtual DL_FixedBasePrecomputation & AccessPublicPrecomputation() =0; -}; - -// Out-of-line dtor due to AIX and GCC, http://github.com/weidai11/cryptopp/issues/499 -template -DL_PublicKey::~DL_PublicKey() {} - -/// \brief Interface for Discrete Log (DL) private keys -template -class CRYPTOPP_NO_VTABLE DL_PrivateKey : public DL_Key -{ - typedef DL_PrivateKey ThisClass; - -public: - typedef T Element; - - virtual ~DL_PrivateKey(); - - /// \brief Initializes a public key from this key - /// \param pub reference to a public key - void MakePublicKey(DL_PublicKey &pub) const - { - pub.AccessAbstractGroupParameters().AssignFrom(this->GetAbstractGroupParameters()); - pub.SetPublicElement(this->GetAbstractGroupParameters().ExponentiateBase(GetPrivateExponent())); - } - - /// \brief Get a named value - /// \param name the name of the object or value to retrieve - /// \param valueType reference to a variable that receives the value - /// \param pValue void pointer to a variable that receives the value - /// \return true if the value was retrieved, false otherwise - /// \details GetVoidValue() retrieves the value of name if it exists. - /// \note GetVoidValue() is an internal function and should be implemented - /// by derived classes. Users should use one of the other functions instead. - /// \sa GetValue(), GetValueWithDefault(), GetIntValue(), GetIntValueWithDefault(), - /// GetRequiredParameter() and GetRequiredIntParameter() - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const - { - return GetValueHelper(this, name, valueType, pValue, &this->GetAbstractGroupParameters()) - CRYPTOPP_GET_FUNCTION_ENTRY(PrivateExponent); - } - - /// \brief Initialize or reinitialize this key - /// \param source NameValuePairs to assign - void AssignFrom(const NameValuePairs &source) - { - this->AccessAbstractGroupParameters().AssignFrom(source); - AssignFromHelper(this, source) - CRYPTOPP_SET_FUNCTION_ENTRY(PrivateExponent); - } - - /// \brief Retrieves the private exponent - /// \return the private exponent - /// \details Must be overridden in derived classes. - virtual const Integer & GetPrivateExponent() const =0; - /// \brief Sets the private exponent - /// \param x the private exponent - /// \details Must be overridden in derived classes. - virtual void SetPrivateExponent(const Integer &x) =0; -}; - -// Out-of-line dtor due to AIX and GCC, http://github.com/weidai11/cryptopp/issues/499 -template -DL_PrivateKey::~DL_PrivateKey() {} - -template -void DL_PublicKey::AssignFrom(const NameValuePairs &source) -{ - DL_PrivateKey *pPrivateKey = NULLPTR; - if (source.GetThisPointer(pPrivateKey)) - pPrivateKey->MakePublicKey(*this); - else - { - this->AccessAbstractGroupParameters().AssignFrom(source); - AssignFromHelper(this, source) - CRYPTOPP_SET_FUNCTION_ENTRY(PublicElement); - } -} - -class OID; - -/// \brief Discrete Log (DL) key base implementation -/// \tparam PK Key class -/// \tparam GP GroupParameters class -/// \tparam O OID class -template -class DL_KeyImpl : public PK -{ -public: - typedef GP GroupParameters; - - virtual ~DL_KeyImpl() {} - - O GetAlgorithmID() const {return GetGroupParameters().GetAlgorithmID();} - bool BERDecodeAlgorithmParameters(BufferedTransformation &bt) - {AccessGroupParameters().BERDecode(bt); return true;} - bool DEREncodeAlgorithmParameters(BufferedTransformation &bt) const - {GetGroupParameters().DEREncode(bt); return true;} - - const GP & GetGroupParameters() const {return m_groupParameters;} - GP & AccessGroupParameters() {return m_groupParameters;} - -private: - GP m_groupParameters; -}; - -class X509PublicKey; -class PKCS8PrivateKey; - -/// \brief Discrete Log (DL) private key base implementation -/// \tparam GP GroupParameters class -template -class DL_PrivateKeyImpl : public DL_PrivateKey, public DL_KeyImpl -{ -public: - typedef typename GP::Element Element; - - virtual ~DL_PrivateKeyImpl() {} - - // GeneratableCryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const - { - CRYPTOPP_ASSERT(GetAbstractGroupParameters().Validate(rng, level)); - bool pass = GetAbstractGroupParameters().Validate(rng, level); - - const Integer &q = GetAbstractGroupParameters().GetSubgroupOrder(); - const Integer &x = GetPrivateExponent(); - - CRYPTOPP_ASSERT(x.IsPositive()); - CRYPTOPP_ASSERT(x < q); - pass = pass && x.IsPositive() && x < q; - - if (level >= 1) - { - CRYPTOPP_ASSERT(Integer::Gcd(x, q) == Integer::One()); - pass = pass && Integer::Gcd(x, q) == Integer::One(); - } - return pass; - } - - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const - { - return GetValueHelper >(this, name, valueType, pValue).Assignable(); - } - - void AssignFrom(const NameValuePairs &source) - { - AssignFromHelper >(this, source); - } - - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms) - { - if (!params.GetThisObject(this->AccessGroupParameters())) - this->AccessGroupParameters().GenerateRandom(rng, params); - Integer x(rng, Integer::One(), GetAbstractGroupParameters().GetMaxExponent()); - SetPrivateExponent(x); - } - - bool SupportsPrecomputation() const {return true;} - - void Precompute(unsigned int precomputationStorage=16) - {AccessAbstractGroupParameters().Precompute(precomputationStorage);} - - void LoadPrecomputation(BufferedTransformation &storedPrecomputation) - {AccessAbstractGroupParameters().LoadPrecomputation(storedPrecomputation);} - - void SavePrecomputation(BufferedTransformation &storedPrecomputation) const - {GetAbstractGroupParameters().SavePrecomputation(storedPrecomputation);} - - // DL_Key - const DL_GroupParameters & GetAbstractGroupParameters() const {return this->GetGroupParameters();} - DL_GroupParameters & AccessAbstractGroupParameters() {return this->AccessGroupParameters();} - - // DL_PrivateKey - const Integer & GetPrivateExponent() const {return m_x;} - void SetPrivateExponent(const Integer &x) {m_x = x;} - - // PKCS8PrivateKey - void BERDecodePrivateKey(BufferedTransformation &bt, bool, size_t) - {m_x.BERDecode(bt);} - void DEREncodePrivateKey(BufferedTransformation &bt) const - {m_x.DEREncode(bt);} - -private: - Integer m_x; -}; - -template -class DL_PrivateKey_WithSignaturePairwiseConsistencyTest : public BASE -{ -public: - virtual ~DL_PrivateKey_WithSignaturePairwiseConsistencyTest() {} - - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms) - { - BASE::GenerateRandom(rng, params); - - if (FIPS_140_2_ComplianceEnabled()) - { - typename SIGNATURE_SCHEME::Signer signer(*this); - typename SIGNATURE_SCHEME::Verifier verifier(signer); - SignaturePairwiseConsistencyTest_FIPS_140_Only(signer, verifier); - } - } -}; - -/// \brief Discrete Log (DL) public key base implementation -/// \tparam GP GroupParameters class -template -class DL_PublicKeyImpl : public DL_PublicKey, public DL_KeyImpl -{ -public: - typedef typename GP::Element Element; - - virtual ~DL_PublicKeyImpl(); - - // CryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const - { - CRYPTOPP_ASSERT(GetAbstractGroupParameters().Validate(rng, level)); - bool pass = GetAbstractGroupParameters().Validate(rng, level); - CRYPTOPP_ASSERT(GetAbstractGroupParameters().ValidateElement(level, this->GetPublicElement(), &GetPublicPrecomputation())); - pass = pass && GetAbstractGroupParameters().ValidateElement(level, this->GetPublicElement(), &GetPublicPrecomputation()); - return pass; - } - - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const - { - return GetValueHelper >(this, name, valueType, pValue).Assignable(); - } - - void AssignFrom(const NameValuePairs &source) - { - AssignFromHelper >(this, source); - } - - bool SupportsPrecomputation() const {return true;} - - void Precompute(unsigned int precomputationStorage=16) - { - AccessAbstractGroupParameters().Precompute(precomputationStorage); - AccessPublicPrecomputation().Precompute(GetAbstractGroupParameters().GetGroupPrecomputation(), GetAbstractGroupParameters().GetSubgroupOrder().BitCount(), precomputationStorage); - } - - void LoadPrecomputation(BufferedTransformation &storedPrecomputation) - { - AccessAbstractGroupParameters().LoadPrecomputation(storedPrecomputation); - AccessPublicPrecomputation().Load(GetAbstractGroupParameters().GetGroupPrecomputation(), storedPrecomputation); - } - - void SavePrecomputation(BufferedTransformation &storedPrecomputation) const - { - GetAbstractGroupParameters().SavePrecomputation(storedPrecomputation); - GetPublicPrecomputation().Save(GetAbstractGroupParameters().GetGroupPrecomputation(), storedPrecomputation); - } - - // DL_Key - const DL_GroupParameters & GetAbstractGroupParameters() const {return this->GetGroupParameters();} - DL_GroupParameters & AccessAbstractGroupParameters() {return this->AccessGroupParameters();} - - // DL_PublicKey - const DL_FixedBasePrecomputation & GetPublicPrecomputation() const {return m_ypc;} - DL_FixedBasePrecomputation & AccessPublicPrecomputation() {return m_ypc;} - - // non-inherited - bool operator==(const DL_PublicKeyImpl &rhs) const - {return this->GetGroupParameters() == rhs.GetGroupParameters() && this->GetPublicElement() == rhs.GetPublicElement();} - -private: - typename GP::BasePrecomputation m_ypc; -}; - -// Out-of-line dtor due to AIX and GCC, http://github.com/weidai11/cryptopp/issues/499 -template -DL_PublicKeyImpl::~DL_PublicKeyImpl() {} - -/// \brief Interface for Elgamal-like signature algorithms -/// \tparam T Field element type or class -/// \details Field element T can be Integer, ECP or EC2N. -template -class CRYPTOPP_NO_VTABLE DL_ElgamalLikeSignatureAlgorithm -{ -public: - virtual ~DL_ElgamalLikeSignatureAlgorithm() {} - - /// \brief Sign a message using a private key - /// \param params GroupParameters - /// \param privateKey private key - /// \param k signing exponent - /// \param e encoded message - /// \param r r part of signature - /// \param s s part of signature - virtual void Sign(const DL_GroupParameters ¶ms, const Integer &privateKey, const Integer &k, const Integer &e, Integer &r, Integer &s) const =0; - - /// \brief Verify a message using a public key - /// \param params GroupParameters - /// \param publicKey public key - /// \param e encoded message - /// \param r r part of signature - /// \param s s part of signature - virtual bool Verify(const DL_GroupParameters ¶ms, const DL_PublicKey &publicKey, const Integer &e, const Integer &r, const Integer &s) const =0; - - /// \brief Recover a Presignature - /// \param params GroupParameters - /// \param publicKey public key - /// \param r r part of signature - /// \param s s part of signature - virtual Integer RecoverPresignature(const DL_GroupParameters ¶ms, const DL_PublicKey &publicKey, const Integer &r, const Integer &s) const - { - CRYPTOPP_UNUSED(params); CRYPTOPP_UNUSED(publicKey); CRYPTOPP_UNUSED(r); CRYPTOPP_UNUSED(s); - throw NotImplemented("DL_ElgamalLikeSignatureAlgorithm: this signature scheme does not support message recovery"); - MAYBE_RETURN(Integer::Zero()); - } - - /// \brief Retrieve R length - /// \param params GroupParameters - virtual size_t RLen(const DL_GroupParameters ¶ms) const - {return params.GetSubgroupOrder().ByteCount();} - - /// \brief Retrieve S length - /// \param params GroupParameters - virtual size_t SLen(const DL_GroupParameters ¶ms) const - {return params.GetSubgroupOrder().ByteCount();} - - /// \brief Signature scheme flag - /// \return true if the signature scheme is deterministic, false otherwise - /// \details IsDeterministic() is provided for DL signers. It is used by RFC 6979 signature schemes. - virtual bool IsDeterministic() const - {return false;} -}; - -/// \brief Interface for deterministic signers -/// \details RFC 6979 signers which generate k based on the encoded message and private key -class CRYPTOPP_NO_VTABLE DeterministicSignatureAlgorithm -{ -public: - virtual ~DeterministicSignatureAlgorithm() {} - - /// \brief Generate k - /// \param x private key - /// \param q subgroup generator - /// \param e encoded message - virtual Integer GenerateRandom(const Integer &x, const Integer &q, const Integer &e) const =0; -}; - -/// \brief Interface for DL key agreement algorithms -/// \tparam T Field element type or class -/// \details Field element T can be Integer, ECP or EC2N. -/// \sa DLIES, ECIES, ECIES_P1363 -template -class CRYPTOPP_NO_VTABLE DL_KeyAgreementAlgorithm -{ -public: - typedef T Element; - - virtual ~DL_KeyAgreementAlgorithm() {} - - virtual Element AgreeWithEphemeralPrivateKey(const DL_GroupParameters ¶ms, const DL_FixedBasePrecomputation &publicPrecomputation, const Integer &privateExponent) const =0; - virtual Element AgreeWithStaticPrivateKey(const DL_GroupParameters ¶ms, const Element &publicElement, bool validateOtherPublicKey, const Integer &privateExponent) const =0; -}; - -/// \brief Interface for key derivation algorithms used in DL cryptosystems -/// \tparam T Field element type or class -/// \details Field element T can be Integer, ECP or EC2N. -/// \sa DLIES, ECIES, ECIES_P1363 -template -class CRYPTOPP_NO_VTABLE DL_KeyDerivationAlgorithm -{ -public: - virtual ~DL_KeyDerivationAlgorithm() {} - - virtual bool ParameterSupported(const char *name) const - {CRYPTOPP_UNUSED(name); return false;} - virtual void Derive(const DL_GroupParameters &groupParams, byte *derivedKey, size_t derivedLength, const T &agreedElement, const T &ephemeralPublicKey, const NameValuePairs &derivationParams) const =0; -}; - -/// \brief Interface for symmetric encryption algorithms used in DL cryptosystems -/// \sa DLIES, ECIES, ECIES_P1363 -class CRYPTOPP_NO_VTABLE DL_SymmetricEncryptionAlgorithm -{ -public: - virtual ~DL_SymmetricEncryptionAlgorithm() {} - - virtual bool ParameterSupported(const char *name) const - {CRYPTOPP_UNUSED(name); return false;} - virtual size_t GetSymmetricKeyLength(size_t plaintextLength) const =0; - virtual size_t GetSymmetricCiphertextLength(size_t plaintextLength) const =0; - virtual size_t GetMaxSymmetricPlaintextLength(size_t ciphertextLength) const =0; - virtual void SymmetricEncrypt(RandomNumberGenerator &rng, const byte *key, const byte *plaintext, size_t plaintextLength, byte *ciphertext, const NameValuePairs ¶meters) const =0; - virtual DecodingResult SymmetricDecrypt(const byte *key, const byte *ciphertext, size_t ciphertextLength, byte *plaintext, const NameValuePairs ¶meters) const =0; -}; - -/// \brief Discrete Log (DL) base interface -/// \tparam KI public or private key interface -template -class CRYPTOPP_NO_VTABLE DL_Base -{ -protected: - typedef KI KeyInterface; - typedef typename KI::Element Element; - - virtual ~DL_Base() {} - - const DL_GroupParameters & GetAbstractGroupParameters() const {return GetKeyInterface().GetAbstractGroupParameters();} - DL_GroupParameters & AccessAbstractGroupParameters() {return AccessKeyInterface().AccessAbstractGroupParameters();} - - virtual KeyInterface & AccessKeyInterface() =0; - virtual const KeyInterface & GetKeyInterface() const =0; -}; - -/// \brief Discrete Log (DL) signature scheme base implementation -/// \tparam INTFACE PK_Signer or PK_Verifier derived class -/// \tparam KEY_INTFACE DL_Base key base used in the scheme -/// \details DL_SignatureSchemeBase provides common functions for signers and verifiers. -/// DL_Base is used for signers, and DL_Base is used for verifiers. -template -class CRYPTOPP_NO_VTABLE DL_SignatureSchemeBase : public INTFACE, public DL_Base -{ -public: - virtual ~DL_SignatureSchemeBase() {} - - /// \brief Provides the signature length - /// \return signature length, in bytes - /// \details SignatureLength returns the size required for r+s. - size_t SignatureLength() const - { - return GetSignatureAlgorithm().RLen(this->GetAbstractGroupParameters()) - + GetSignatureAlgorithm().SLen(this->GetAbstractGroupParameters()); - } - - /// \brief Provides the maximum recoverable length - /// \return maximum recoverable length, in bytes - size_t MaxRecoverableLength() const - {return GetMessageEncodingInterface().MaxRecoverableLength(0, GetHashIdentifier().second, GetDigestSize());} - - /// \brief Provides the maximum recoverable length - /// \param signatureLength the size of the signature - /// \return maximum recoverable length based on signature length, in bytes - /// \details this function is not implemented and always returns 0. - size_t MaxRecoverableLengthFromSignatureLength(size_t signatureLength) const - {CRYPTOPP_UNUSED(signatureLength); CRYPTOPP_ASSERT(false); return 0;} // TODO - - /// \brief Determines if the scheme is probabilistic - /// \return true if the scheme is probabilistic, false otherwise - bool IsProbabilistic() const - {return true;} - - /// \brief Determines if the scheme has non-recoverable part - /// \return true if the message encoding has a non-recoverable part, false otherwise. - bool AllowNonrecoverablePart() const - {return GetMessageEncodingInterface().AllowNonrecoverablePart();} - - /// \brief Determines if the scheme allows recoverable part first - /// \return true if the message encoding allows the recoverable part, false otherwise. - bool RecoverablePartFirst() const - {return GetMessageEncodingInterface().RecoverablePartFirst();} - -protected: - size_t MessageRepresentativeLength() const {return BitsToBytes(MessageRepresentativeBitLength());} - size_t MessageRepresentativeBitLength() const {return this->GetAbstractGroupParameters().GetSubgroupOrder().BitCount();} - - // true if the scheme conforms to RFC 6979 - virtual bool IsDeterministic() const {return false;} - - virtual const DL_ElgamalLikeSignatureAlgorithm & GetSignatureAlgorithm() const =0; - virtual const PK_SignatureMessageEncodingMethod & GetMessageEncodingInterface() const =0; - virtual HashIdentifier GetHashIdentifier() const =0; - virtual size_t GetDigestSize() const =0; -}; - -/// \brief Discrete Log (DL) signature scheme signer base implementation -/// \tparam T Field element type or class -/// \details Field element T can be Integer, ECP or EC2N. -template -class CRYPTOPP_NO_VTABLE DL_SignerBase : public DL_SignatureSchemeBase > -{ -public: - virtual ~DL_SignerBase() {} - - /// \brief Testing interface - /// \param k Integer - /// \param e Integer - /// \param r Integer - /// \param s Integer - void RawSign(const Integer &k, const Integer &e, Integer &r, Integer &s) const - { - const DL_ElgamalLikeSignatureAlgorithm &alg = this->GetSignatureAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - const DL_PrivateKey &key = this->GetKeyInterface(); - - r = params.ConvertElementToInteger(params.ExponentiateBase(k)); - alg.Sign(params, key.GetPrivateExponent(), k, e, r, s); - } - - void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const - { - PK_MessageAccumulatorBase &ma = static_cast(messageAccumulator); - ma.m_recoverableMessage.Assign(recoverableMessage, recoverableMessageLength); - this->GetMessageEncodingInterface().ProcessRecoverableMessage(ma.AccessHash(), - recoverableMessage, recoverableMessageLength, - ma.m_presignature, ma.m_presignature.size(), - ma.m_semisignature); - } - - size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart) const - { - this->GetMaterial().DoQuickSanityCheck(); - - PK_MessageAccumulatorBase &ma = static_cast(messageAccumulator); - const DL_ElgamalLikeSignatureAlgorithm &alg = this->GetSignatureAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - const DL_PrivateKey &key = this->GetKeyInterface(); - - SecByteBlock representative(this->MessageRepresentativeLength()); - this->GetMessageEncodingInterface().ComputeMessageRepresentative( - rng, - ma.m_recoverableMessage, ma.m_recoverableMessage.size(), - ma.AccessHash(), this->GetHashIdentifier(), ma.m_empty, - representative, this->MessageRepresentativeBitLength()); - ma.m_empty = true; - Integer e(representative, representative.size()); - - // hash message digest into random number k to prevent reusing the same k on - // different messages after virtual machine rollback - if (rng.CanIncorporateEntropy()) - rng.IncorporateEntropy(representative, representative.size()); - - Integer k, ks; - const Integer& q = params.GetSubgroupOrder(); - if (alg.IsDeterministic()) - { - const Integer& x = key.GetPrivateExponent(); - const DeterministicSignatureAlgorithm& det = dynamic_cast(alg); - k = det.GenerateRandom(x, q, e); - } - else - { - k.Randomize(rng, 1, params.GetSubgroupOrder()-1); - } - - // Due to timing attack on nonce length by Jancar - // https://github.com/weidai11/cryptopp/issues/869 - ks = k + q; - if (ks.BitCount() == q.BitCount()) { - ks += q; - } - - Integer r, s; - r = params.ConvertElementToInteger(params.ExponentiateBase(ks)); - alg.Sign(params, key.GetPrivateExponent(), k, e, r, s); - - /* - Integer r, s; - if (this->MaxRecoverableLength() > 0) - r.Decode(ma.m_semisignature, ma.m_semisignature.size()); - else - r.Decode(ma.m_presignature, ma.m_presignature.size()); - alg.Sign(params, key.GetPrivateExponent(), ma.m_k, e, r, s); - */ - - const size_t rLen = alg.RLen(params); - r.Encode(signature, rLen); - s.Encode(signature+rLen, alg.SLen(params)); - - if (restart) - RestartMessageAccumulator(rng, ma); - - return this->SignatureLength(); - } - -protected: - void RestartMessageAccumulator(RandomNumberGenerator &rng, PK_MessageAccumulatorBase &ma) const - { - // k needs to be generated before hashing for signature schemes with recovery - // but to defend against VM rollbacks we need to generate k after hashing. - // so this code is commented out, since no DL-based signature scheme with recovery - // has been implemented in Crypto++ anyway - /* - const DL_ElgamalLikeSignatureAlgorithm &alg = this->GetSignatureAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - ma.m_k.Randomize(rng, 1, params.GetSubgroupOrder()-1); - ma.m_presignature.New(params.GetEncodedElementSize(false)); - params.ConvertElementToInteger(params.ExponentiateBase(ma.m_k)).Encode(ma.m_presignature, ma.m_presignature.size()); - */ - CRYPTOPP_UNUSED(rng); CRYPTOPP_UNUSED(ma); - } -}; - -/// \brief Discret Log (DL) Verifier base class -/// \tparam T Field element type or class -/// \details Field element T can be Integer, ECP or EC2N. -template -class CRYPTOPP_NO_VTABLE DL_VerifierBase : public DL_SignatureSchemeBase > -{ -public: - virtual ~DL_VerifierBase() {} - - void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const - { - PK_MessageAccumulatorBase &ma = static_cast(messageAccumulator); - const DL_ElgamalLikeSignatureAlgorithm &alg = this->GetSignatureAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - - // Validation due to https://github.com/weidai11/cryptopp/issues/981 - // We allow a caller to provide R and S in oversized buffer. R and S - // are read based on the field element size, and not the buffer size. - const size_t rLen = alg.RLen(params); - const size_t sLen = alg.SLen(params); - CRYPTOPP_ASSERT(signatureLength >= rLen + sLen); - if (signatureLength < rLen + sLen) - throw InvalidDataFormat("DL_VerifierBase: signature length is not valid."); - - ma.m_semisignature.Assign(signature, rLen); - ma.m_s.Decode(signature+rLen, sLen); - - this->GetMessageEncodingInterface().ProcessSemisignature(ma.AccessHash(), ma.m_semisignature, ma.m_semisignature.size()); - } - - bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const - { - this->GetMaterial().DoQuickSanityCheck(); - - PK_MessageAccumulatorBase &ma = static_cast(messageAccumulator); - const DL_ElgamalLikeSignatureAlgorithm &alg = this->GetSignatureAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - const DL_PublicKey &key = this->GetKeyInterface(); - - SecByteBlock representative(this->MessageRepresentativeLength()); - this->GetMessageEncodingInterface().ComputeMessageRepresentative(NullRNG(), ma.m_recoverableMessage, ma.m_recoverableMessage.size(), - ma.AccessHash(), this->GetHashIdentifier(), ma.m_empty, - representative, this->MessageRepresentativeBitLength()); - ma.m_empty = true; - Integer e(representative, representative.size()); - - Integer r(ma.m_semisignature, ma.m_semisignature.size()); - return alg.Verify(params, key, e, r, ma.m_s); - } - - DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &messageAccumulator) const - { - this->GetMaterial().DoQuickSanityCheck(); - - PK_MessageAccumulatorBase &ma = static_cast(messageAccumulator); - const DL_ElgamalLikeSignatureAlgorithm &alg = this->GetSignatureAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - const DL_PublicKey &key = this->GetKeyInterface(); - - SecByteBlock representative(this->MessageRepresentativeLength()); - this->GetMessageEncodingInterface().ComputeMessageRepresentative( - NullRNG(), - ma.m_recoverableMessage, ma.m_recoverableMessage.size(), - ma.AccessHash(), this->GetHashIdentifier(), ma.m_empty, - representative, this->MessageRepresentativeBitLength()); - ma.m_empty = true; - Integer e(representative, representative.size()); - - ma.m_presignature.New(params.GetEncodedElementSize(false)); - Integer r(ma.m_semisignature, ma.m_semisignature.size()); - alg.RecoverPresignature(params, key, r, ma.m_s).Encode(ma.m_presignature, ma.m_presignature.size()); - - return this->GetMessageEncodingInterface().RecoverMessageFromSemisignature( - ma.AccessHash(), this->GetHashIdentifier(), - ma.m_presignature, ma.m_presignature.size(), - ma.m_semisignature, ma.m_semisignature.size(), - recoveredMessage); - } -}; - -/// \brief Discrete Log (DL) cryptosystem base implementation -/// \tparam PK field element type -/// \tparam KI public or private key interface -template -class CRYPTOPP_NO_VTABLE DL_CryptoSystemBase : public PK, public DL_Base -{ -public: - typedef typename DL_Base::Element Element; - - virtual ~DL_CryptoSystemBase() {} - - size_t MaxPlaintextLength(size_t ciphertextLength) const - { - unsigned int minLen = this->GetAbstractGroupParameters().GetEncodedElementSize(true); - return ciphertextLength < minLen ? 0 : GetSymmetricEncryptionAlgorithm().GetMaxSymmetricPlaintextLength(ciphertextLength - minLen); - } - - size_t CiphertextLength(size_t plaintextLength) const - { - size_t len = GetSymmetricEncryptionAlgorithm().GetSymmetricCiphertextLength(plaintextLength); - return len == 0 ? 0 : this->GetAbstractGroupParameters().GetEncodedElementSize(true) + len; - } - - bool ParameterSupported(const char *name) const - {return GetKeyDerivationAlgorithm().ParameterSupported(name) || GetSymmetricEncryptionAlgorithm().ParameterSupported(name);} - -protected: - virtual const DL_KeyAgreementAlgorithm & GetKeyAgreementAlgorithm() const =0; - virtual const DL_KeyDerivationAlgorithm & GetKeyDerivationAlgorithm() const =0; - virtual const DL_SymmetricEncryptionAlgorithm & GetSymmetricEncryptionAlgorithm() const =0; -}; - -/// \brief Discrete Log (DL) decryptor base implementation -/// \tparam T Field element type or class -/// \details Field element T can be Integer, ECP or EC2N. -template -class CRYPTOPP_NO_VTABLE DL_DecryptorBase : public DL_CryptoSystemBase > -{ -public: - typedef T Element; - - virtual ~DL_DecryptorBase() {} - - DecodingResult Decrypt(RandomNumberGenerator &rng, const byte *ciphertext, size_t ciphertextLength, byte *plaintext, const NameValuePairs ¶meters = g_nullNameValuePairs) const - { - try - { - CRYPTOPP_UNUSED(rng); - const DL_KeyAgreementAlgorithm &agreeAlg = this->GetKeyAgreementAlgorithm(); - const DL_KeyDerivationAlgorithm &derivAlg = this->GetKeyDerivationAlgorithm(); - const DL_SymmetricEncryptionAlgorithm &encAlg = this->GetSymmetricEncryptionAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - const DL_PrivateKey &key = this->GetKeyInterface(); - - Element q = params.DecodeElement(ciphertext, true); - size_t elementSize = params.GetEncodedElementSize(true); - ciphertext += elementSize; - ciphertextLength -= elementSize; - - Element z = agreeAlg.AgreeWithStaticPrivateKey(params, q, true, key.GetPrivateExponent()); - - SecByteBlock derivedKey(encAlg.GetSymmetricKeyLength(encAlg.GetMaxSymmetricPlaintextLength(ciphertextLength))); - derivAlg.Derive(params, derivedKey, derivedKey.size(), z, q, parameters); - - return encAlg.SymmetricDecrypt(derivedKey, ciphertext, ciphertextLength, plaintext, parameters); - } - catch (DL_BadElement &) - { - return DecodingResult(); - } - } -}; - -/// \brief Discrete Log (DL) encryptor base implementation -/// \tparam T Field element type or class -/// \details Field element T can be Integer, ECP or EC2N. -template -class CRYPTOPP_NO_VTABLE DL_EncryptorBase : public DL_CryptoSystemBase > -{ -public: - typedef T Element; - - virtual ~DL_EncryptorBase() {} - - void Encrypt(RandomNumberGenerator &rng, const byte *plaintext, size_t plaintextLength, byte *ciphertext, const NameValuePairs ¶meters = g_nullNameValuePairs) const - { - const DL_KeyAgreementAlgorithm &agreeAlg = this->GetKeyAgreementAlgorithm(); - const DL_KeyDerivationAlgorithm &derivAlg = this->GetKeyDerivationAlgorithm(); - const DL_SymmetricEncryptionAlgorithm &encAlg = this->GetSymmetricEncryptionAlgorithm(); - const DL_GroupParameters ¶ms = this->GetAbstractGroupParameters(); - const DL_PublicKey &key = this->GetKeyInterface(); - - Integer x(rng, Integer::One(), params.GetMaxExponent()); - Element q = params.ExponentiateBase(x); - params.EncodeElement(true, q, ciphertext); - unsigned int elementSize = params.GetEncodedElementSize(true); - ciphertext += elementSize; - - Element z = agreeAlg.AgreeWithEphemeralPrivateKey(params, key.GetPublicPrecomputation(), x); - - SecByteBlock derivedKey(encAlg.GetSymmetricKeyLength(plaintextLength)); - derivAlg.Derive(params, derivedKey, derivedKey.size(), z, q, parameters); - - encAlg.SymmetricEncrypt(rng, derivedKey, plaintext, plaintextLength, ciphertext, parameters); - } -}; - -/// \brief Discrete Log (DL) scheme options -/// \tparam T1 algorithm information -/// \tparam T2 group parameters for the scheme -template -struct DL_SchemeOptionsBase -{ - typedef T1 AlgorithmInfo; - typedef T2 GroupParameters; - typedef typename GroupParameters::Element Element; -}; - -/// \brief Discrete Log (DL) key options -/// \tparam T1 algorithm information -/// \tparam T2 keys used in the scheme -template -struct DL_KeyedSchemeOptions : public DL_SchemeOptionsBase -{ - typedef T2 Keys; - typedef typename Keys::PrivateKey PrivateKey; - typedef typename Keys::PublicKey PublicKey; -}; - -/// \brief Discrete Log (DL) signature scheme options -/// \tparam T1 algorithm information -/// \tparam T2 keys used in the scheme -/// \tparam T3 signature algorithm -/// \tparam T4 message encoding method -/// \tparam T5 hash function -template -struct DL_SignatureSchemeOptions : public DL_KeyedSchemeOptions -{ - typedef T3 SignatureAlgorithm; - typedef T4 MessageEncodingMethod; - typedef T5 HashFunction; -}; - -/// \brief Discrete Log (DL) crypto scheme options -/// \tparam T1 algorithm information -/// \tparam T2 keys used in the scheme -/// \tparam T3 key agreement algorithm -/// \tparam T4 key derivation algorithm -/// \tparam T5 symmetric encryption algorithm -template -struct DL_CryptoSchemeOptions : public DL_KeyedSchemeOptions -{ - typedef T3 KeyAgreementAlgorithm; - typedef T4 KeyDerivationAlgorithm; - typedef T5 SymmetricEncryptionAlgorithm; -}; - -/// \brief Discrete Log (DL) base object implementation -/// \tparam BASE TODO -/// \tparam SCHEME_OPTIONS options for the scheme -/// \tparam KEY key used in the scheme -template -class CRYPTOPP_NO_VTABLE DL_ObjectImplBase : public AlgorithmImpl -{ -public: - typedef SCHEME_OPTIONS SchemeOptions; - typedef typename KEY::Element Element; - - virtual ~DL_ObjectImplBase() {} - - PrivateKey & AccessPrivateKey() {return m_key;} - PublicKey & AccessPublicKey() {return m_key;} - - // KeyAccessor - const KEY & GetKey() const {return m_key;} - KEY & AccessKey() {return m_key;} - -protected: - typename BASE::KeyInterface & AccessKeyInterface() {return m_key;} - const typename BASE::KeyInterface & GetKeyInterface() const {return m_key;} - - // for signature scheme - HashIdentifier GetHashIdentifier() const - { - typedef typename SchemeOptions::MessageEncodingMethod::HashIdentifierLookup HashLookup; - return HashLookup::template HashIdentifierLookup2::Lookup(); - } - size_t GetDigestSize() const - { - typedef typename SchemeOptions::HashFunction H; - return H::DIGESTSIZE; - } - -private: - KEY m_key; -}; - -/// \brief Discrete Log (DL) object implementation -/// \tparam BASE TODO -/// \tparam SCHEME_OPTIONS options for the scheme -/// \tparam KEY key used in the scheme -template -class CRYPTOPP_NO_VTABLE DL_ObjectImpl : public DL_ObjectImplBase -{ -public: - typedef typename KEY::Element Element; - - virtual ~DL_ObjectImpl() {} - -protected: - const DL_ElgamalLikeSignatureAlgorithm & GetSignatureAlgorithm() const - {return Singleton().Ref();} - const DL_KeyAgreementAlgorithm & GetKeyAgreementAlgorithm() const - {return Singleton().Ref();} - const DL_KeyDerivationAlgorithm & GetKeyDerivationAlgorithm() const - {return Singleton().Ref();} - const DL_SymmetricEncryptionAlgorithm & GetSymmetricEncryptionAlgorithm() const - {return Singleton().Ref();} - HashIdentifier GetHashIdentifier() const - {return HashIdentifier();} - const PK_SignatureMessageEncodingMethod & GetMessageEncodingInterface() const - {return Singleton().Ref();} -}; - -/// \brief Discrete Log (DL) signer implementation -/// \tparam SCHEME_OPTIONS options for the scheme -template -class DL_SignerImpl : public DL_ObjectImpl, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PrivateKey> -{ -public: - PK_MessageAccumulator * NewSignatureAccumulator(RandomNumberGenerator &rng) const - { - member_ptr p(new PK_MessageAccumulatorImpl); - this->RestartMessageAccumulator(rng, *p); - return p.release(); - } -}; - -/// \brief Discrete Log (DL) verifier implementation -/// \tparam SCHEME_OPTIONS options for the scheme -template -class DL_VerifierImpl : public DL_ObjectImpl, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PublicKey> -{ -public: - PK_MessageAccumulator * NewVerificationAccumulator() const - { - return new PK_MessageAccumulatorImpl; - } -}; - -/// \brief Discrete Log (DL) encryptor implementation -/// \tparam SCHEME_OPTIONS options for the scheme -template -class DL_EncryptorImpl : public DL_ObjectImpl, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PublicKey> -{ -}; - -/// \brief Discrete Log (DL) decryptor implementation -/// \tparam SCHEME_OPTIONS options for the scheme -template -class DL_DecryptorImpl : public DL_ObjectImpl, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PrivateKey> -{ -}; - -// ******************************************************** - -/// \brief Discrete Log (DL) simple key agreement base implementation -/// \tparam T class or type -template -class CRYPTOPP_NO_VTABLE DL_SimpleKeyAgreementDomainBase : public SimpleKeyAgreementDomain -{ -public: - typedef T Element; - - virtual ~DL_SimpleKeyAgreementDomainBase() {} - - CryptoParameters & AccessCryptoParameters() {return AccessAbstractGroupParameters();} - unsigned int AgreedValueLength() const {return GetAbstractGroupParameters().GetEncodedElementSize(false);} - unsigned int PrivateKeyLength() const {return GetAbstractGroupParameters().GetSubgroupOrder().ByteCount();} - unsigned int PublicKeyLength() const {return GetAbstractGroupParameters().GetEncodedElementSize(true);} - - void GeneratePrivateKey(RandomNumberGenerator &rng, byte *privateKey) const - { - Integer x(rng, Integer::One(), GetAbstractGroupParameters().GetMaxExponent()); - x.Encode(privateKey, PrivateKeyLength()); - } - - void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const - { - CRYPTOPP_UNUSED(rng); - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(privateKey, PrivateKeyLength()); - Element y = params.ExponentiateBase(x); - params.EncodeElement(true, y, publicKey); - } - - bool Agree(byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const - { - try - { - const DL_GroupParameters ¶ms = GetAbstractGroupParameters(); - Integer x(privateKey, PrivateKeyLength()); - Element w = params.DecodeElement(otherPublicKey, validateOtherPublicKey); - - Element z = GetKeyAgreementAlgorithm().AgreeWithStaticPrivateKey( - GetAbstractGroupParameters(), w, validateOtherPublicKey, x); - params.EncodeElement(false, z, agreedValue); - } - catch (DL_BadElement &) - { - return false; - } - return true; - } - - /// \brief Retrieves a reference to the group generator - /// \return const reference to the group generator - const Element &GetGenerator() const {return GetAbstractGroupParameters().GetSubgroupGenerator();} - -protected: - virtual const DL_KeyAgreementAlgorithm & GetKeyAgreementAlgorithm() const =0; - virtual DL_GroupParameters & AccessAbstractGroupParameters() =0; - const DL_GroupParameters & GetAbstractGroupParameters() const {return const_cast *>(this)->AccessAbstractGroupParameters();} -}; - -/// \brief Methods for avoiding "Small-Subgroup" attacks on Diffie-Hellman Key Agreement -/// \details Additional methods exist and include public key validation and choice of prime p. -/// \sa Methods for Avoiding the "Small-Subgroup" Attacks on the -/// Diffie-Hellman Key Agreement Method for S/MIME -enum CofactorMultiplicationOption { - /// \brief No cofactor multiplication applied - NO_COFACTOR_MULTIPLICTION, - /// \brief Cofactor multiplication compatible with ordinary Diffie-Hellman - /// \details Modifies the computation of ZZ by including j (the cofactor) in the computations and is - /// compatible with ordinary Diffie-Hellman. - COMPATIBLE_COFACTOR_MULTIPLICTION, - /// \brief Cofactor multiplication incompatible with ordinary Diffie-Hellman - /// \details Modifies the computation of ZZ by including j (the cofactor) in the computations but is - /// not compatible with ordinary Diffie-Hellman. - INCOMPATIBLE_COFACTOR_MULTIPLICTION}; - -typedef EnumToType NoCofactorMultiplication; -typedef EnumToType CompatibleCofactorMultiplication; -typedef EnumToType IncompatibleCofactorMultiplication; - -/// \brief Diffie-Hellman key agreement algorithm -template -class DL_KeyAgreementAlgorithm_DH : public DL_KeyAgreementAlgorithm -{ -public: - typedef ELEMENT Element; - - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() - {return COFACTOR_OPTION::ToEnum() == INCOMPATIBLE_COFACTOR_MULTIPLICTION ? "DHC" : "DH";} - - virtual ~DL_KeyAgreementAlgorithm_DH() {} - - Element AgreeWithEphemeralPrivateKey(const DL_GroupParameters ¶ms, const DL_FixedBasePrecomputation &publicPrecomputation, const Integer &privateExponent) const - { - return publicPrecomputation.Exponentiate(params.GetGroupPrecomputation(), - COFACTOR_OPTION::ToEnum() == INCOMPATIBLE_COFACTOR_MULTIPLICTION ? privateExponent*params.GetCofactor() : privateExponent); - } - - Element AgreeWithStaticPrivateKey(const DL_GroupParameters ¶ms, const Element &publicElement, bool validateOtherPublicKey, const Integer &privateExponent) const - { - if (COFACTOR_OPTION::ToEnum() == COMPATIBLE_COFACTOR_MULTIPLICTION) - { - const Integer &k = params.GetCofactor(); - return params.ExponentiateElement(publicElement, - ModularArithmetic(params.GetSubgroupOrder()).Divide(privateExponent, k)*k); - } - else if (COFACTOR_OPTION::ToEnum() == INCOMPATIBLE_COFACTOR_MULTIPLICTION) - return params.ExponentiateElement(publicElement, privateExponent*params.GetCofactor()); - else - { - CRYPTOPP_ASSERT(COFACTOR_OPTION::ToEnum() == NO_COFACTOR_MULTIPLICTION); - - if (!validateOtherPublicKey) - return params.ExponentiateElement(publicElement, privateExponent); - - if (params.FastSubgroupCheckAvailable()) - { - if (!params.ValidateElement(2, publicElement, NULLPTR)) - throw DL_BadElement(); - return params.ExponentiateElement(publicElement, privateExponent); - } - else - { - const Integer e[2] = {params.GetSubgroupOrder(), privateExponent}; - Element r[2]; - params.SimultaneousExponentiate(r, publicElement, e, 2); - if (!params.IsIdentity(r[0])) - throw DL_BadElement(); - return r[1]; - } - } - } -}; - -// ******************************************************** - -/// \brief Template implementing constructors for public key algorithm classes -template -class CRYPTOPP_NO_VTABLE PK_FinalTemplate : public BASE -{ -public: - PK_FinalTemplate() {} - - PK_FinalTemplate(const CryptoMaterial &key) - {this->AccessKey().AssignFrom(key);} - - PK_FinalTemplate(BufferedTransformation &bt) - {this->AccessKey().BERDecode(bt);} - - PK_FinalTemplate(const AsymmetricAlgorithm &algorithm) - {this->AccessKey().AssignFrom(algorithm.GetMaterial());} - - PK_FinalTemplate(const Integer &v1) - {this->AccessKey().Initialize(v1);} - - template - PK_FinalTemplate(const T1 &v1, const T2 &v2) - {this->AccessKey().Initialize(v1, v2);} - - template - PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3) - {this->AccessKey().Initialize(v1, v2, v3);} - - template - PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) - {this->AccessKey().Initialize(v1, v2, v3, v4);} - - template - PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5);} - - template - PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6);} - - template - PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);} - - template - PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);} - - template - PK_FinalTemplate(T1 &v1, const T2 &v2) - {this->AccessKey().Initialize(v1, v2);} - - template - PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3) - {this->AccessKey().Initialize(v1, v2, v3);} - - template - PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) - {this->AccessKey().Initialize(v1, v2, v3, v4);} - - template - PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5);} - - template - PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6);} - - template - PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);} - - template - PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8) - {this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);} -}; - -/// \brief Base class for public key encryption standard classes. -/// \details These classes are used to select from variants of algorithms. -/// Not all standards apply to all algorithms. -struct EncryptionStandard {}; - -/// \brief Base class for public key signature standard classes. -/// \details These classes are used to select from variants of algorithms. -/// Not all standards apply to all algorithms. -struct SignatureStandard {}; - -/// \brief Trapdoor Function (TF) encryption scheme -/// \tparam STANDARD standard -/// \tparam KEYS keys used in the encryption scheme -/// \tparam ALG_INFO algorithm information -template -class TF_ES; - -template > -class TF_ES : public KEYS -{ - typedef typename STANDARD::EncryptionMessageEncodingMethod MessageEncodingMethod; - -public: - /// see EncryptionStandard for a list of standards - typedef STANDARD Standard; - typedef TF_CryptoSchemeOptions SchemeOptions; - - static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string(KEYS::StaticAlgorithmName()) + "/" + MessageEncodingMethod::StaticAlgorithmName();} - - /// implements PK_Decryptor interface - typedef PK_FinalTemplate > Decryptor; - /// implements PK_Encryptor interface - typedef PK_FinalTemplate > Encryptor; -}; - -/// \brief Trapdoor Function (TF) Signature Scheme -/// \tparam STANDARD standard -/// \tparam H hash function -/// \tparam KEYS keys used in the signature scheme -/// \tparam ALG_INFO algorithm information -template -class TF_SS; - -template > -class TF_SS : public KEYS -{ -public: - /// see SignatureStandard for a list of standards - typedef STANDARD Standard; - typedef typename Standard::SignatureMessageEncodingMethod MessageEncodingMethod; - typedef TF_SignatureSchemeOptions SchemeOptions; - - static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string(KEYS::StaticAlgorithmName()) + "/" + MessageEncodingMethod::StaticAlgorithmName() + "(" + H::StaticAlgorithmName() + ")";} - - /// implements PK_Signer interface - typedef PK_FinalTemplate > Signer; - /// implements PK_Verifier interface - typedef PK_FinalTemplate > Verifier; -}; - -/// \brief Discrete Log (DL) signature scheme -/// \tparam KEYS keys used in the signature scheme -/// \tparam SA signature algorithm -/// \tparam MEM message encoding method -/// \tparam H hash function -/// \tparam ALG_INFO algorithm information -template -class DL_SS; - -template > -class DL_SS : public KEYS -{ - typedef DL_SignatureSchemeOptions SchemeOptions; - -public: - static std::string StaticAlgorithmName() {return SA::StaticAlgorithmName() + std::string("/EMSA1(") + H::StaticAlgorithmName() + ")";} - - /// implements PK_Signer interface - typedef PK_FinalTemplate > Signer; - /// implements PK_Verifier interface - typedef PK_FinalTemplate > Verifier; -}; - -/// \brief Discrete Log (DL) encryption scheme -/// \tparam KEYS keys used in the encryption scheme -/// \tparam AA key agreement algorithm -/// \tparam DA key derivation algorithm -/// \tparam EA encryption algorithm -/// \tparam ALG_INFO algorithm information -template -class DL_ES : public KEYS -{ - typedef DL_CryptoSchemeOptions SchemeOptions; - -public: - /// implements PK_Decryptor interface - typedef PK_FinalTemplate > Decryptor; - /// implements PK_Encryptor interface - typedef PK_FinalTemplate > Encryptor; -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/pwdbased.h b/third_party/cryptoppwin/include/cryptopp/pwdbased.h deleted file mode 100644 index 49cf53c7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/pwdbased.h +++ /dev/null @@ -1,481 +0,0 @@ -// pwdbased.h - originally written and placed in the public domain by Wei Dai -// Cutover to KeyDerivationFunction interface by Uri Blumenthal -// Marcel Raad and Jeffrey Walton in March 2018. - -/// \file pwdbased.h -/// \brief Password based key derivation functions - -#ifndef CRYPTOPP_PWDBASED_H -#define CRYPTOPP_PWDBASED_H - -#include "cryptlib.h" -#include "hrtimer.h" -#include "integer.h" -#include "argnames.h" -#include "algparam.h" -#include "hmac.h" - -NAMESPACE_BEGIN(CryptoPP) - -// ******************** PBKDF1 ******************** - -/// \brief PBKDF1 from PKCS #5 -/// \tparam T a HashTransformation class -/// \sa PasswordBasedKeyDerivationFunction, PKCS5_PBKDF1 -/// on the Crypto++ wiki -/// \since Crypto++ 2.0 -template -class PKCS5_PBKDF1 : public PasswordBasedKeyDerivationFunction -{ -public: - virtual ~PKCS5_PBKDF1() {} - - static std::string StaticAlgorithmName () { - const std::string name(std::string("PBKDF1(") + - std::string(T::StaticAlgorithmName()) + std::string(")")); - return name; - } - - // KeyDerivationFunction interface - std::string AlgorithmName() const { - return StaticAlgorithmName(); - } - - // KeyDerivationFunction interface - size_t MaxDerivedKeyLength() const { - return static_cast(T::DIGESTSIZE); - } - - // KeyDerivationFunction interface - size_t GetValidDerivedLength(size_t keylength) const; - - // KeyDerivationFunction interface - virtual size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const NameValuePairs& params = g_nullNameValuePairs) const; - - /// \brief Derive a key from a secret seed - /// \param derived the derived output buffer - /// \param derivedLen the size of the derived buffer, in bytes - /// \param purpose a purpose byte - /// \param secret the seed input buffer - /// \param secretLen the size of the secret buffer, in bytes - /// \param salt the salt input buffer - /// \param saltLen the size of the salt buffer, in bytes - /// \param iterations the number of iterations - /// \param timeInSeconds the in seconds - /// \return the number of iterations performed - /// \throw InvalidDerivedKeyLength if derivedLen is invalid for the scheme - /// \details DeriveKey() provides a standard interface to derive a key from - /// a seed and other parameters. Each class that derives from KeyDerivationFunction - /// provides an overload that accepts most parameters used by the derivation function. - /// \details If timeInSeconds is > 0.0 then DeriveKey will run for - /// the specified amount of time. If timeInSeconds is 0.0 then DeriveKey - /// will run for the specified number of iterations. - /// \details PKCS #5 says PBKDF1 should only take 8-byte salts. This implementation - /// allows salts of any length. - size_t DeriveKey(byte *derived, size_t derivedLen, byte purpose, const byte *secret, size_t secretLen, const byte *salt, size_t saltLen, unsigned int iterations, double timeInSeconds=0) const; - -protected: - // KeyDerivationFunction interface - const Algorithm & GetAlgorithm() const { - return *this; - } -}; - -template -size_t PKCS5_PBKDF1::GetValidDerivedLength(size_t keylength) const -{ - if (keylength > MaxDerivedKeyLength()) - return MaxDerivedKeyLength(); - return keylength; -} - -template -size_t PKCS5_PBKDF1::DeriveKey(byte *derived, size_t derivedLen, - const byte *secret, size_t secretLen, const NameValuePairs& params) const -{ - CRYPTOPP_ASSERT(secret /*&& secretLen*/); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - - byte purpose = (byte)params.GetIntValueWithDefault("Purpose", 0); - unsigned int iterations = (unsigned int)params.GetIntValueWithDefault("Iterations", 1); - - double timeInSeconds = 0.0f; - (void)params.GetValue("TimeInSeconds", timeInSeconds); - - ConstByteArrayParameter salt; - (void)params.GetValue(Name::Salt(), salt); - - return DeriveKey(derived, derivedLen, purpose, secret, secretLen, salt.begin(), salt.size(), iterations, timeInSeconds); -} - -template -size_t PKCS5_PBKDF1::DeriveKey(byte *derived, size_t derivedLen, byte purpose, const byte *secret, size_t secretLen, const byte *salt, size_t saltLen, unsigned int iterations, double timeInSeconds) const -{ - CRYPTOPP_ASSERT(secret /*&& secretLen*/); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - CRYPTOPP_ASSERT(iterations > 0 || timeInSeconds > 0); - CRYPTOPP_UNUSED(purpose); - - ThrowIfInvalidDerivedKeyLength(derivedLen); - - // Business logic - if (!iterations) { iterations = 1; } - - T hash; - hash.Update(secret, secretLen); - hash.Update(salt, saltLen); - - SecByteBlock buffer(hash.DigestSize()); - hash.Final(buffer); - - unsigned int i; - ThreadUserTimer timer; - - if (timeInSeconds) - timer.StartTimer(); - - for (i=1; iPKCS5_PBKDF2_HMAC -/// on the Crypto++ wiki -/// \since Crypto++ 2.0 -template -class PKCS5_PBKDF2_HMAC : public PasswordBasedKeyDerivationFunction -{ -public: - virtual ~PKCS5_PBKDF2_HMAC() {} - - static std::string StaticAlgorithmName () { - const std::string name(std::string("PBKDF2_HMAC(") + - std::string(T::StaticAlgorithmName()) + std::string(")")); - return name; - } - - // KeyDerivationFunction interface - std::string AlgorithmName() const { - return StaticAlgorithmName(); - } - - // KeyDerivationFunction interface - // should multiply by T::DIGESTSIZE, but gets overflow that way - size_t MaxDerivedKeyLength() const { - return 0xffffffffU; - } - - // KeyDerivationFunction interface - size_t GetValidDerivedLength(size_t keylength) const; - - // KeyDerivationFunction interface - size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const NameValuePairs& params = g_nullNameValuePairs) const; - - /// \brief Derive a key from a secret seed - /// \param derived the derived output buffer - /// \param derivedLen the size of the derived buffer, in bytes - /// \param purpose a purpose byte - /// \param secret the seed input buffer - /// \param secretLen the size of the secret buffer, in bytes - /// \param salt the salt input buffer - /// \param saltLen the size of the salt buffer, in bytes - /// \param iterations the number of iterations - /// \param timeInSeconds the in seconds - /// \return the number of iterations performed - /// \throw InvalidDerivedKeyLength if derivedLen is invalid for the scheme - /// \details DeriveKey() provides a standard interface to derive a key from - /// a seed and other parameters. Each class that derives from KeyDerivationFunction - /// provides an overload that accepts most parameters used by the derivation function. - /// \details If timeInSeconds is > 0.0 then DeriveKey will run for - /// the specified amount of time. If timeInSeconds is 0.0 then DeriveKey - /// will run for the specified number of iterations. - size_t DeriveKey(byte *derived, size_t derivedLen, byte purpose, const byte *secret, size_t secretLen, - const byte *salt, size_t saltLen, unsigned int iterations, double timeInSeconds=0) const; - -protected: - // KeyDerivationFunction interface - const Algorithm & GetAlgorithm() const { - return *this; - } -}; - -template -size_t PKCS5_PBKDF2_HMAC::GetValidDerivedLength(size_t keylength) const -{ - if (keylength > MaxDerivedKeyLength()) - return MaxDerivedKeyLength(); - return keylength; -} - -template -size_t PKCS5_PBKDF2_HMAC::DeriveKey(byte *derived, size_t derivedLen, - const byte *secret, size_t secretLen, const NameValuePairs& params) const -{ - CRYPTOPP_ASSERT(secret /*&& secretLen*/); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - - byte purpose = (byte)params.GetIntValueWithDefault("Purpose", 0); - unsigned int iterations = (unsigned int)params.GetIntValueWithDefault("Iterations", 1); - - double timeInSeconds = 0.0f; - (void)params.GetValue("TimeInSeconds", timeInSeconds); - - ConstByteArrayParameter salt; - (void)params.GetValue(Name::Salt(), salt); - - return DeriveKey(derived, derivedLen, purpose, secret, secretLen, salt.begin(), salt.size(), iterations, timeInSeconds); -} - -template -size_t PKCS5_PBKDF2_HMAC::DeriveKey(byte *derived, size_t derivedLen, byte purpose, const byte *secret, size_t secretLen, const byte *salt, size_t saltLen, unsigned int iterations, double timeInSeconds) const -{ - CRYPTOPP_ASSERT(secret /*&& secretLen*/); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - CRYPTOPP_ASSERT(iterations > 0 || timeInSeconds > 0); - CRYPTOPP_UNUSED(purpose); - - ThrowIfInvalidDerivedKeyLength(derivedLen); - - // Business logic - if (!iterations) { iterations = 1; } - - // DigestSize check due to https://github.com/weidai11/cryptopp/issues/855 - HMAC hmac(secret, secretLen); - if (hmac.DigestSize() == 0) - throw InvalidArgument("PKCS5_PBKDF2_HMAC: DigestSize cannot be 0"); - - SecByteBlock buffer(hmac.DigestSize()); - ThreadUserTimer timer; - - unsigned int i=1; - while (derivedLen > 0) - { - hmac.Update(salt, saltLen); - unsigned int j; - for (j=0; j<4; j++) - { - byte b = byte(i >> ((3-j)*8)); - hmac.Update(&b, 1); - } - hmac.Final(buffer); - -#if CRYPTOPP_MSC_VERSION - const size_t segmentLen = STDMIN(derivedLen, buffer.size()); - memcpy_s(derived, segmentLen, buffer, segmentLen); -#else - const size_t segmentLen = STDMIN(derivedLen, buffer.size()); - std::memcpy(derived, buffer, segmentLen); -#endif - - if (timeInSeconds) - { - timeInSeconds = timeInSeconds / ((derivedLen + buffer.size() - 1) / buffer.size()); - timer.StartTimer(); - } - - for (j=1; jPKCS12_PBKDF -/// on the Crypto++ wiki -/// \since Crypto++ 2.0 -template -class PKCS12_PBKDF : public PasswordBasedKeyDerivationFunction -{ -public: - virtual ~PKCS12_PBKDF() {} - - static std::string StaticAlgorithmName () { - const std::string name(std::string("PBKDF_PKCS12(") + - std::string(T::StaticAlgorithmName()) + std::string(")")); - return name; - } - - // KeyDerivationFunction interface - std::string AlgorithmName() const { - return StaticAlgorithmName(); - } - - // TODO - check this - size_t MaxDerivedKeyLength() const { - return static_cast(-1); - } - - // KeyDerivationFunction interface - size_t GetValidDerivedLength(size_t keylength) const; - - // KeyDerivationFunction interface - size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const NameValuePairs& params = g_nullNameValuePairs) const; - - /// \brief Derive a key from a secret seed - /// \param derived the derived output buffer - /// \param derivedLen the size of the derived buffer, in bytes - /// \param purpose a purpose byte - /// \param secret the seed input buffer - /// \param secretLen the size of the secret buffer, in bytes - /// \param salt the salt input buffer - /// \param saltLen the size of the salt buffer, in bytes - /// \param iterations the number of iterations - /// \param timeInSeconds the in seconds - /// \return the number of iterations performed - /// \throw InvalidDerivedKeyLength if derivedLen is invalid for the scheme - /// \details DeriveKey() provides a standard interface to derive a key from - /// a seed and other parameters. Each class that derives from KeyDerivationFunction - /// provides an overload that accepts most parameters used by the derivation function. - /// \details If timeInSeconds is > 0.0 then DeriveKey will run for - /// the specified amount of time. If timeInSeconds is 0.0 then DeriveKey - /// will run for the specified number of iterations. - size_t DeriveKey(byte *derived, size_t derivedLen, byte purpose, const byte *secret, size_t secretLen, - const byte *salt, size_t saltLen, unsigned int iterations, double timeInSeconds) const; - -protected: - // KeyDerivationFunction interface - const Algorithm & GetAlgorithm() const { - return *this; - } -}; - -template -size_t PKCS12_PBKDF::GetValidDerivedLength(size_t keylength) const -{ - if (keylength > MaxDerivedKeyLength()) - return MaxDerivedKeyLength(); - return keylength; -} - -template -size_t PKCS12_PBKDF::DeriveKey(byte *derived, size_t derivedLen, - const byte *secret, size_t secretLen, const NameValuePairs& params) const -{ - CRYPTOPP_ASSERT(secret /*&& secretLen*/); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - - byte purpose = (byte)params.GetIntValueWithDefault("Purpose", 0); - unsigned int iterations = (unsigned int)params.GetIntValueWithDefault("Iterations", 1); - - double timeInSeconds = 0.0f; - (void)params.GetValue("TimeInSeconds", timeInSeconds); - - // NULL or 0 length salt OK - ConstByteArrayParameter salt; - (void)params.GetValue(Name::Salt(), salt); - - return DeriveKey(derived, derivedLen, purpose, secret, secretLen, salt.begin(), salt.size(), iterations, timeInSeconds); -} - -template -size_t PKCS12_PBKDF::DeriveKey(byte *derived, size_t derivedLen, byte purpose, const byte *secret, size_t secretLen, const byte *salt, size_t saltLen, unsigned int iterations, double timeInSeconds) const -{ - CRYPTOPP_ASSERT(secret /*&& secretLen*/); - CRYPTOPP_ASSERT(derived && derivedLen); - CRYPTOPP_ASSERT(derivedLen <= MaxDerivedKeyLength()); - CRYPTOPP_ASSERT(iterations > 0 || timeInSeconds > 0); - - ThrowIfInvalidDerivedKeyLength(derivedLen); - - // Business logic - if (!iterations) { iterations = 1; } - - const size_t v = T::BLOCKSIZE; // v is in bytes rather than bits as in PKCS #12 - const size_t DLen = v, SLen = RoundUpToMultipleOf(saltLen, v); - const size_t PLen = RoundUpToMultipleOf(secretLen, v), ILen = SLen + PLen; - SecByteBlock buffer(DLen + SLen + PLen); - byte *D = buffer, *S = buffer+DLen, *P = buffer+DLen+SLen, *I = S; - - if (D) // GCC analyzer - std::memset(D, purpose, DLen); - - size_t i; - for (i=0; i 0) - { - hash.CalculateDigest(Ai, buffer, buffer.size()); - - if (timeInSeconds) - { - timeInSeconds = timeInSeconds / ((derivedLen + Ai.size() - 1) / Ai.size()); - timer.StartTimer(); - } - - for (i=1; iByteQueue -/// on the Crypto++ wiki. -/// \since Crypto++ 2.0 -class CRYPTOPP_DLL ByteQueue : public Bufferless -{ -public: - virtual ~ByteQueue(); - - /// \brief Construct a ByteQueue - /// \param nodeSize the initial node size - /// \details Internally, ByteQueue uses a ByteQueueNode to store bytes, - /// and nodeSize determines the size of the ByteQueueNode. A value - /// of 0 indicates the ByteQueueNode should be automatically sized, - /// which means a value of 256 is used. - ByteQueue(size_t nodeSize=0); - - /// \brief Copy construct a ByteQueue - /// \param copy the other ByteQueue - ByteQueue(const ByteQueue ©); - - // BufferedTransformation - lword MaxRetrievable() const - {return CurrentSize();} - bool AnyRetrievable() const - {return !IsEmpty();} - - void IsolatedInitialize(const NameValuePairs ¶meters); - byte * CreatePutSpace(size_t &size); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - - size_t Get(byte &outByte); - size_t Get(byte *outString, size_t getMax); - - size_t Peek(byte &outByte) const; - size_t Peek(byte *outString, size_t peekMax) const; - - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - - /// \brief Set node size - /// \param nodeSize the new node size, in bytes - /// \details The default node size is 256. - void SetNodeSize(size_t nodeSize); - - /// \brief Determine data size - /// \return the data size, in bytes - lword CurrentSize() const; - - /// \brief Determine data availability - /// \return true if the ByteQueue has data, false otherwise - bool IsEmpty() const; - - /// \brief Empty the queue - void Clear(); - - /// \brief Insert data in the queue - /// \param inByte a byte to insert - /// \details Unget() inserts a byte at the head of the queue - void Unget(byte inByte); - - /// \brief Insert data in the queue - /// \param inString a byte array to insert - /// \param length the size of the byte array - /// \details Unget() inserts a byte array at the head of the queue - void Unget(const byte *inString, size_t length); - - /// \brief Peek data in the queue - /// \param contiguousSize the size of the data - /// \details Spy() peeks at data at the head of the queue. Spy() does - /// not remove data from the queue. - /// \details The data's size is returned in contiguousSize. - /// Spy() returns the size of the first byte array in the list. The - /// entire data may be larger since the queue is a linked list of - /// byte arrays. - const byte * Spy(size_t &contiguousSize) const; - - /// \brief Insert data in the queue - /// \param inString a byte array to insert - /// \param size the length of the byte array - /// \details LazyPut() inserts a byte array at the tail of the queue. - /// The data may not be copied at this point. Rather, the pointer - /// and size to external data are recorded. - /// \details Another call to Put() or LazyPut() will force the data to - /// be copied. When lazy puts are used, the data is copied when - /// FinalizeLazyPut() is called. - /// \sa LazyPutter - void LazyPut(const byte *inString, size_t size); - - /// \brief Insert data in the queue - /// \param inString a byte array to insert - /// \param size the length of the byte array - /// \details LazyPut() inserts a byte array at the tail of the queue. - /// The data may not be copied at this point. Rather, the pointer - /// and size to external data are recorded. - /// \details Another call to Put() or LazyPut() will force the data to - /// be copied. When lazy puts are used, the data is copied when - /// FinalizeLazyPut() is called. - /// \sa LazyPutter - void LazyPutModifiable(byte *inString, size_t size); - - /// \brief Remove data from the queue - /// \param size the length of the data - /// \throw InvalidArgument if there is no lazy data in the queue or if - /// size is larger than the lazy string - /// \details UndoLazyPut() truncates data inserted using LazyPut() by - /// modifying size. - /// \sa LazyPutter - void UndoLazyPut(size_t size); - - /// \brief Insert data in the queue - /// \details FinalizeLazyPut() copies external data inserted using - /// LazyPut() or LazyPutModifiable() into the tail of the queue. - /// \sa LazyPutter - void FinalizeLazyPut(); - - /// \brief Assign contents from another ByteQueue - /// \param rhs the other ByteQueue - /// \return reference to this ByteQueue - ByteQueue & operator=(const ByteQueue &rhs); - - /// \brief Bitwise compare two ByteQueue - /// \param rhs the other ByteQueue - /// \return true if the size and bits are equal, false otherwise - /// \details operator==() walks each ByteQueue comparing bytes in - /// each queue. operator==() is not constant time. - bool operator==(const ByteQueue &rhs) const; - - /// \brief Bitwise compare two ByteQueue - /// \param rhs the other ByteQueue - /// \return true if the size and bits are not equal, false otherwise - /// \details operator!=() is implemented in terms of operator==(). - /// operator==() is not constant time. - bool operator!=(const ByteQueue &rhs) const {return !operator==(rhs);} - - /// \brief Retrieve data from the queue - /// \param index of byte to retrieve - /// \return byte at the specified index - /// \details operator[]() does not perform bounds checking. - byte operator[](lword index) const; - - /// \brief Swap contents with another ByteQueue - /// \param rhs the other ByteQueue - void swap(ByteQueue &rhs); - - /// \brief A ByteQueue iterator - class Walker : public InputRejecting - { - public: - /// \brief Construct a ByteQueue Walker - /// \param queue a ByteQueue - Walker(const ByteQueue &queue) - : m_queue(queue), m_node(NULLPTR), m_position(0), m_offset(0), m_lazyString(NULLPTR), m_lazyLength(0) - {Initialize();} - - lword GetCurrentPosition() {return m_position;} - - lword MaxRetrievable() const - {return m_queue.CurrentSize() - m_position;} - - void IsolatedInitialize(const NameValuePairs ¶meters); - - size_t Get(byte &outByte); - size_t Get(byte *outString, size_t getMax); - - size_t Peek(byte &outByte) const; - size_t Peek(byte *outString, size_t peekMax) const; - - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const; - - private: - const ByteQueue &m_queue; - const ByteQueueNode *m_node; - lword m_position; - size_t m_offset; - const byte *m_lazyString; - size_t m_lazyLength; - }; - - friend class Walker; - -protected: - void CleanupUsedNodes(); - void CopyFrom(const ByteQueue ©); - void Destroy(); - -private: - ByteQueueNode *m_head, *m_tail; - byte *m_lazyString; - size_t m_lazyLength; - size_t m_nodeSize; - bool m_lazyStringModifiable; - bool m_autoNodeSize; -}; - -/// \brief Helper class to finalize Puts on ByteQueue -/// \details LazyPutter ensures LazyPut is committed to the ByteQueue -/// in event of exception. During destruction, the LazyPutter class -/// calls FinalizeLazyPut. -class CRYPTOPP_DLL LazyPutter -{ -public: - virtual ~LazyPutter() { - try {m_bq.FinalizeLazyPut();} - catch(const Exception&) {CRYPTOPP_ASSERT(0);} - } - - /// \brief Construct a LazyPutter - /// \param bq the ByteQueue - /// \param inString a byte array to insert - /// \param size the length of the byte array - /// \details LazyPutter ensures LazyPut is committed to the ByteQueue - /// in event of exception. During destruction, the LazyPutter class - /// calls FinalizeLazyPut. - LazyPutter(ByteQueue &bq, const byte *inString, size_t size) - : m_bq(bq) {bq.LazyPut(inString, size);} - -protected: - LazyPutter(ByteQueue &bq) : m_bq(bq) {} - -private: - ByteQueue &m_bq; -}; - -/// \brief Helper class to finalize Puts on ByteQueue -/// \details LazyPutterModifiable ensures LazyPut is committed to the -/// ByteQueue in event of exception. During destruction, the -/// LazyPutterModifiable class calls FinalizeLazyPut. -class LazyPutterModifiable : public LazyPutter -{ -public: - /// \brief Construct a LazyPutterModifiable - /// \param bq the ByteQueue - /// \param inString a byte array to insert - /// \param size the length of the byte array - /// \details LazyPutterModifiable ensures LazyPut is committed to the - /// ByteQueue in event of exception. During destruction, the - /// LazyPutterModifiable class calls FinalizeLazyPut. - LazyPutterModifiable(ByteQueue &bq, byte *inString, size_t size) - : LazyPutter(bq) {bq.LazyPutModifiable(inString, size);} -}; - -NAMESPACE_END - -#ifndef __BORLANDC__ -NAMESPACE_BEGIN(std) -template<> inline void swap(CryptoPP::ByteQueue &a, CryptoPP::ByteQueue &b) -{ - a.swap(b); -} -NAMESPACE_END -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rabbit.h b/third_party/cryptoppwin/include/cryptopp/rabbit.h deleted file mode 100644 index 0103091d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rabbit.h +++ /dev/null @@ -1,112 +0,0 @@ -// rabbit.h - written and placed in the public domain by Jeffrey Walton -// based on public domain code by Martin Boesgaard, Mette Vesterager, -// Thomas Pedersen, Jesper Christiansen and Ove Scavenius. -// -// The reference materials and source files are available at -// The eSTREAM Project, http://www.ecrypt.eu.org/stream/e2-rabbit.html. - -/// \file rabbit.h -/// \brief Classes for Rabbit stream cipher -/// \sa The -/// eSTREAM Project | Rabbit and -/// Crypto++ Wiki | Rabbit. -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_RABBIT_H -#define CRYPTOPP_RABBIT_H - -#include "strciphr.h" -#include "secblock.h" - -// The library does not have a way to describe an optional IV. Rabbit takes -// an optional IV so two classes are offered to bridge the gap. One provides -// Rabbit without an IV and the second provides Rabbit with an IV. - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Rabbit stream cipher information -/// \since Crypto++ 8.0 -struct RabbitInfo : public FixedKeyLength<16, SimpleKeyingInterface::NOT_RESYNCHRONIZABLE> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "Rabbit"; } -}; - -/// \brief Rabbit stream cipher information -/// \since Crypto++ 8.0 -struct RabbitWithIVInfo : public FixedKeyLength<16, SimpleKeyingInterface::UNIQUE_IV, 8> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "RabbitWithIV"; } -}; - -/// \brief Rabbit stream cipher implementation -/// \since Crypto++ 8.0 -class RabbitPolicy : public AdditiveCipherConcretePolicy, public RabbitInfo -{ -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - bool CanOperateKeystream() const { return true; } - bool CipherIsRandomAccess() const { return false; } - -private: - // Master and working states - FixedSizeSecBlock m_mx, m_mc, m_wx, m_wc; - // Workspace - FixedSizeSecBlock m_t; - word32 m_mcy, m_wcy; // carry -}; - -/// \brief Rabbit stream cipher implementation -/// \since Crypto++ 8.0 -class RabbitWithIVPolicy : public AdditiveCipherConcretePolicy, public RabbitWithIVInfo -{ -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length); - bool CanOperateKeystream() const { return true; } - bool CipherIsRandomAccess() const { return false; } - -private: - // Master and working states - FixedSizeSecBlock m_mx, m_mc, m_wx, m_wc; - // Workspace - FixedSizeSecBlock m_t; - word32 m_mcy, m_wcy; // carry -}; - -/// \brief Rabbit stream cipher -/// \details Rabbit is a stream cipher developed by Martin Boesgaard, Mette Vesterager, -/// Thomas Pedersen, Jesper Christiansen and Ove Scavenius. Rabbit is one of the final four -/// Profile 1 (software) ciphers selected for the eSTREAM portfolio. -/// \details Crypto++ provides Rabbit and RabbitWithIV classes. Two classes are necessary -/// because the library lacks the means to describe and manage optional IVs. -/// \sa RabbitWithIV, The -/// eSTREAM Project | Rabbit and -/// Crypto++ Wiki | Rabbit. -/// \since Crypto++ 8.0 -struct Rabbit : public RabbitInfo, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal >, RabbitInfo> Encryption; - typedef Encryption Decryption; -}; - -/// \brief Rabbit stream cipher -/// \details Rabbit is a stream cipher developed by Martin Boesgaard, Mette Vesterager, -/// Thomas Pedersen, Jesper Christiansen and Ove Scavenius. Rabbit is one of the final four -/// Profile 1 (software) ciphers selected for the eSTREAM portfolio. -/// \details Crypto++ provides Rabbit and RabbitWithIV classes. Two classes are necessary -/// because the library lacks the means to describe and manage optional IVs. -/// \sa Rabbit, The -/// eSTREAM Project | Rabbit and -/// Crypto++ Wiki | Rabbit. -/// \since Crypto++ 8.0 -struct RabbitWithIV : public RabbitWithIVInfo, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal >, RabbitWithIVInfo> Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_RABBIT_H diff --git a/third_party/cryptoppwin/include/cryptopp/rabin.h b/third_party/cryptoppwin/include/cryptopp/rabin.h deleted file mode 100644 index f1271574..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rabin.h +++ /dev/null @@ -1,135 +0,0 @@ -// rabin.h - originally written and placed in the public domain by Wei Dai - -/// \file rabin.h -/// \brief Classes for Rabin encryption and signature schemes - -#ifndef CRYPTOPP_RABIN_H -#define CRYPTOPP_RABIN_H - -#include "cryptlib.h" -#include "oaep.h" -#include "pssr.h" -#include "integer.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Rabin trapdoor function using the public key -/// \since Crypto++ 2.0 -class RabinFunction : public TrapdoorFunction, public PublicKey -{ - typedef RabinFunction ThisClass; - -public: - - /// \brief Initialize a Rabin public key - /// \param n the modulus - /// \param r element r - /// \param s element s - void Initialize(const Integer &n, const Integer &r, const Integer &s) - {m_n = n; m_r = r; m_s = s;} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - Integer ApplyFunction(const Integer &x) const; - Integer PreimageBound() const {return m_n;} - Integer ImageBound() const {return m_n;} - - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - const Integer& GetModulus() const {return m_n;} - const Integer& GetQuadraticResidueModPrime1() const {return m_r;} - const Integer& GetQuadraticResidueModPrime2() const {return m_s;} - - void SetModulus(const Integer &n) {m_n = n;} - void SetQuadraticResidueModPrime1(const Integer &r) {m_r = r;} - void SetQuadraticResidueModPrime2(const Integer &s) {m_s = s;} - -protected: - Integer m_n, m_r, m_s; -}; - -/// \brief Rabin trapdoor function using the private key -/// \since Crypto++ 2.0 -class InvertibleRabinFunction : public RabinFunction, public TrapdoorFunctionInverse, public PrivateKey -{ - typedef InvertibleRabinFunction ThisClass; - -public: - - /// \brief Initialize a Rabin private key - /// \param n modulus - /// \param r element r - /// \param s element s - /// \param p first prime factor - /// \param q second prime factor - /// \param u q-1 mod p - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const Integer &n, const Integer &r, const Integer &s, const Integer &p, const Integer &q, const Integer &u) - {m_n = n; m_r = r; m_s = s; m_p = p; m_q = q; m_u = u;} - - /// \brief Create a Rabin private key - /// \param rng a RandomNumberGenerator derived class - /// \param keybits the size of the key, in bits - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, unsigned int keybits) - {GenerateRandomWithKeySize(rng, keybits);} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const; - - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - /*! parameters: (ModulusSize) */ - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg); - - const Integer& GetPrime1() const {return m_p;} - const Integer& GetPrime2() const {return m_q;} - const Integer& GetMultiplicativeInverseOfPrime2ModPrime1() const {return m_u;} - - void SetPrime1(const Integer &p) {m_p = p;} - void SetPrime2(const Integer &q) {m_q = q;} - void SetMultiplicativeInverseOfPrime2ModPrime1(const Integer &u) {m_u = u;} - -protected: - Integer m_p, m_q, m_u; -}; - -/// \brief Rabin keys -struct Rabin -{ - static std::string StaticAlgorithmName() {return "Rabin-Crypto++Variant";} - typedef RabinFunction PublicKey; - typedef InvertibleRabinFunction PrivateKey; -}; - -/// \brief Rabin encryption scheme -/// \tparam STANDARD encryption standard -template -struct RabinES : public TF_ES -{ -}; - -/// \brief Rabin signature scheme -/// \tparam STANDARD signature standard -/// \tparam H hash transformation -template -struct RabinSS : public TF_SS -{ -}; - -// More typedefs for backwards compatibility -class SHA1; -typedef RabinES >::Decryptor RabinDecryptor; -typedef RabinES >::Encryptor RabinEncryptor; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/randpool.h b/third_party/cryptoppwin/include/cryptopp/randpool.h deleted file mode 100644 index 51227c35..00000000 --- a/third_party/cryptoppwin/include/cryptopp/randpool.h +++ /dev/null @@ -1,104 +0,0 @@ -// randpool.h - originally written and placed in the public domain by Wei Dai -// OldRandPool added by JW in August, 2017. - -/// \file randpool.h -/// \brief Class file for Randomness Pool -/// \details RandomPool can be used to generate cryptographic quality pseudorandom bytes -/// after seeding the pool with IncorporateEntropy(). Internally, the generator uses -/// AES-256 to produce the stream. Entropy is stirred in using SHA-256. -/// \details RandomPool used to follow the design of randpool in PGP 2.6.x. At version 5.5 -/// RandomPool was redesigned to reduce the risk of reusing random numbers after state -/// rollback (which may occur when running in a virtual machine like VMware or a hosted -/// environment). -/// \details If you need the pre-Crypto++ 5.5 generator then use OldRandomPool class. You -/// should migrate away from OldRandomPool at the earliest opportunity. Use RandomPool -/// or AutoSeededRandomPool instead. -/// \since Crypto++ 4.0 (PGP 2.6.x style), Crypto++ 5.5 (AES-256 based) - -#ifndef CRYPTOPP_RANDPOOL_H -#define CRYPTOPP_RANDPOOL_H - -#include "cryptlib.h" -#include "filters.h" -#include "secblock.h" -#include "smartptr.h" -#include "aes.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Randomness Pool based on AES-256 -/// \details RandomPool can be used to generate cryptographic quality pseudorandom bytes -/// after seeding the pool with IncorporateEntropy(). Internally, the generator uses -/// AES-256 to produce the stream. Entropy is stirred in using SHA-256. -/// \details RandomPool used to follow the design of randpool in PGP 2.6.x. At version 5.5 -/// RandomPool was redesigned to reduce the risk of reusing random numbers after state -/// rollback, which may occur when running in a virtual machine like VMware or a hosted -/// environment. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \details If you need the pre-Crypto++ 5.5 generator then use OldRandomPool class. You -/// should migrate away from OldRandomPool at the earliest opportunity. -/// \sa OldRandomPool -/// \since Crypto++ 4.0 (PGP 2.6.x style), Crypto++ 5.5 (AES-256 based) -class CRYPTOPP_DLL RandomPool : public RandomNumberGenerator, public NotCopyable -{ -public: - /// \brief Construct a RandomPool - RandomPool(); - - bool CanIncorporateEntropy() const {return true;} - void IncorporateEntropy(const byte *input, size_t length); - void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword size); - -private: - FixedSizeAlignedSecBlock m_seed; - FixedSizeAlignedSecBlock m_key; - member_ptr m_pCipher; - bool m_keySet; -}; - -/// \brief Randomness Pool based on PGP 2.6.x with MDC -/// \details If you need the pre-Crypto++ 5.5 generator then use OldRandomPool class. The -/// OldRandomPool also provides the modern interface, including CanIncorporateEntropy, -/// IncorporateEntropy and GenerateIntoBufferedTransformation. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \details You should migrate away from OldRandomPool at the earliest opportunity. Use a -/// modern random number generator or key derivation function, like AutoSeededRandomPool or -/// HKDF. -/// \warning This class uses an old style PGP 2.6.x with MDC. The generator risks reusing -/// random numbers after state rollback. You should migrate away from OldRandomPool at -/// the earliest opportunity. -/// \sa RandomPool, AutoSeededRandomPool, HKDF, P1363_KDF2, PKCS12_PBKDF, PKCS5_PBKDF2_HMAC -/// \since Crypto++ 6.0 -class CRYPTOPP_DLL OldRandomPool : public RandomNumberGenerator -{ -public: - /// \brief Construct an OldRandomPool - /// \param poolSize internal pool size of the generator - /// \details poolSize must be greater than 16 - OldRandomPool(unsigned int poolSize=384); - - // RandomNumberGenerator interface (Crypto++ 5.5 and above) - bool CanIncorporateEntropy() const {return true;} - void IncorporateEntropy(const byte *input, size_t length); - void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword size); - - byte GenerateByte(); - void GenerateBlock(byte *output, size_t size); - - // GenerateWord32 is overridden and provides Crypto++ 5.4 behavior. - // Taken from RandomNumberSource::GenerateWord32 in cryptlib.cpp. - word32 GenerateWord32 (word32 min=0, word32 max=0xffffffffUL); - -protected: - void Stir(); - -private: - SecByteBlock pool, key; - size_t addPos, getPos; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rc2.h b/third_party/cryptoppwin/include/cryptopp/rc2.h deleted file mode 100644 index 1b296d27..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rc2.h +++ /dev/null @@ -1,90 +0,0 @@ -// rc2.h - originally written and placed in the public domain by Wei Dai - -/// \file rc2.h -/// \brief Classes for the RC2 block cipher -/// \since Crypto++ 3.0 - -#ifndef CRYPTOPP_RC2_H -#define CRYPTOPP_RC2_H - -#include "seckey.h" -#include "secblock.h" -#include "algparam.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief RC2 block cipher information -/// \since Crypto++ 3.0 -struct RC2_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 1, 128> -{ - CRYPTOPP_CONSTANT(DEFAULT_EFFECTIVE_KEYLENGTH = 1024); - CRYPTOPP_CONSTANT(MAX_EFFECTIVE_KEYLENGTH = 1024); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RC2";} -}; - -/// \brief RC2 block cipher -/// \sa RC2 on the Crypto Lounge. -/// \since Crypto++ 3.0 -class RC2 : public RC2_Info, public BlockCipherDocumentation -{ - /// \brief Class specific methods used to operate the cipher. - /// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - - protected: - FixedSizeSecBlock K; // expanded key table - }; - - /// \brief Class specific methods used to operate the cipher in the forward direction. - /// \details Implementations and overrides in \p Enc apply to \p ENCRYPTION. - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Class specific methods used to operate the cipher in the reverse direction. - /// \details Implementations and overrides in \p Dec apply to \p DECRYPTION. - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - - /// \brief Class specific methods used to operate the cipher in the forward direction. - /// \details Implementations and overrides in \p Encryption apply to \p ENCRYPTION. - class Encryption : public BlockCipherFinal - { - public: - Encryption() {} - Encryption(const byte *key, size_t keyLen=DEFAULT_KEYLENGTH) - {SetKey(key, keyLen);} - Encryption(const byte *key, size_t keyLen, int effectiveKeyLen) - {SetKey(key, keyLen, MakeParameters("EffectiveKeyLength", effectiveKeyLen));} - }; - - /// \brief Class specific methods used to operate the cipher in the reverse direction. - /// \details Implementations and overrides in \p Decryption apply to \p DECRYPTION. - class Decryption : public BlockCipherFinal - { - public: - Decryption() {} - Decryption(const byte *key, size_t keyLen=DEFAULT_KEYLENGTH) - {SetKey(key, keyLen);} - Decryption(const byte *key, size_t keyLen, int effectiveKeyLen) - {SetKey(key, keyLen, MakeParameters("EffectiveKeyLength", effectiveKeyLen));} - }; -}; - -typedef RC2::Encryption RC2Encryption; -typedef RC2::Decryption RC2Decryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rc5.h b/third_party/cryptoppwin/include/cryptopp/rc5.h deleted file mode 100644 index 541ffbc0..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rc5.h +++ /dev/null @@ -1,59 +0,0 @@ -// rc5.h - originally written and placed in the public domain by Wei Dai - -/// \file rc5.h -/// \brief Classes for the RC5 block cipher - -#ifndef CRYPTOPP_RC5_H -#define CRYPTOPP_RC5_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief RC5 block cipher information -/// \since Crypto++ 1.0 -struct RC5_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 0, 255>, public VariableRounds<16> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RC5";} - typedef word32 RC5_WORD; -}; - -/// \brief RC5 block cipher -/// \sa RC5 -/// \since Crypto++ 1.0 -class RC5 : public RC5_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - unsigned int r; // number of rounds - SecBlock sTable; // expanded key table - }; - - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef RC5::Encryption RC5Encryption; -typedef RC5::Decryption RC5Decryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rc6.h b/third_party/cryptoppwin/include/cryptopp/rc6.h deleted file mode 100644 index 7b80d356..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rc6.h +++ /dev/null @@ -1,60 +0,0 @@ -// rc6.h - originally written and placed in the public domain by Wei Dai - -/// \file rc6.h -/// \brief Classes for the RC6 block cipher -/// \since Crypto++ 3.0 - -#ifndef CRYPTOPP_RC6_H -#define CRYPTOPP_RC6_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief RC6 block cipher information -/// \since Crypto++ 3.0 -struct RC6_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8>, public VariableRounds<20> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RC6";} - typedef word32 RC6_WORD; -}; - -/// \brief RC6 block cipher -/// \sa RC6 -/// \since Crypto++ 3.0 -class RC6 : public RC6_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - unsigned int r; // number of rounds - SecBlock sTable; // expanded key table - }; - - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef RC6::Encryption RC6Encryption; -typedef RC6::Decryption RC6Decryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rdrand.h b/third_party/cryptoppwin/include/cryptopp/rdrand.h deleted file mode 100644 index d1f3c412..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rdrand.h +++ /dev/null @@ -1,145 +0,0 @@ -// rdrand.h - written and placed in public domain by Jeffrey Walton and Uri Blumenthal. - -/// \file rdrand.h -/// \brief Classes for RDRAND and RDSEED -/// \since Crypto++ 5.6.3 - -#ifndef CRYPTOPP_RDRAND_H -#define CRYPTOPP_RDRAND_H - -#include "cryptlib.h" - -// This class file provides both RDRAND and RDSEED. They were added at -// Crypto++ 5.6.3. At compile time, it uses CRYPTOPP_BOOL_{X86|X32|X64} -// to select an implementation or "throw NotImplemented". At runtime the -// constructor will throw RDRAND_Err or RDSEED_Err if a generator is -// is not available. -// The original classes accepted a retry count. Retries were superfluous for -// RDRAND, and RDSEED encountered a failure about 1 in 256 bytes depending -// on the processor. Retries were removed at Crypto++ 6.0 because -// GenerateBlock unconditionally retries and always fulfills the request. - -// Throughput varies wildly depending on processor and manufacturer. A Core i5 or -// Core i7 RDRAND can generate at over 200 MiB/s. It is below theroetical -// maximum, but it takes about 5 instructions to generate, retry and store a -// result. A low-end Celeron may perform RDRAND at about 7 MiB/s. RDSEED -// performs at about 1/4 to 1/2 the rate of RDRAND. AMD RDRAND performed poorly -// during testing with Athlon X4 845. The Bulldozer v4 only performed at 1 MiB/s. - -// Microsoft added RDRAND in August 2012, VS2012; RDSEED in October 2013, VS2013. -// GCC added RDRAND in December 2010, GCC 4.6. LLVM added RDRAND in July 2012, -// Clang 3.2. Intel added RDRAND in September 2011, ICC 12.1. - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Exception thrown when a RDRAND generator encounters -/// a generator related error. -/// \since Crypto++ 5.6.3 -class RDRAND_Err : public Exception -{ -public: - RDRAND_Err(const std::string &operation) - : Exception(OTHER_ERROR, "RDRAND: " + operation + " operation failed") {} -}; - -/// \brief Hardware generated random numbers using RDRAND instruction -/// \sa MaurerRandomnessTest() for random bit generators -/// \since Crypto++ 5.6.3 -class RDRAND : public RandomNumberGenerator -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "RDRAND"; } - - virtual ~RDRAND() {} - - /// \brief Construct a RDRAND generator - /// \details According to DJ of Intel, the Intel RDRAND circuit does not underflow. - /// If it did hypothetically underflow, then it would return 0 for the random value. - /// AMD's RDRAND implementation appears to provide the same behavior. - /// \throw RDRAND_Err if the random number generator is not available - RDRAND(); - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - virtual void GenerateBlock(byte *output, size_t size); - - /// \brief Generate and discard n bytes - /// \param n the number of bytes to generate and discard - /// \details the RDSEED generator discards words, not bytes. If n is - /// not a multiple of a machine word, then it is rounded up to - /// that size. - virtual void DiscardBytes(size_t n); - - /// \brief Update RNG state with additional unpredictable values - /// \param input unused - /// \param length unused - /// \details The operation is a nop for this generator. - virtual void IncorporateEntropy(const byte *input, size_t length) - { - // Override to avoid the base class' throw. - CRYPTOPP_UNUSED(input); CRYPTOPP_UNUSED(length); - } - - std::string AlgorithmProvider() const { - return "RDRAND"; - } -}; - -/// \brief Exception thrown when a RDSEED generator encounters -/// a generator related error. -/// \since Crypto++ 5.6.3 -class RDSEED_Err : public Exception -{ -public: - RDSEED_Err(const std::string &operation) - : Exception(OTHER_ERROR, "RDSEED: " + operation + " operation failed") {} -}; - -/// \brief Hardware generated random numbers using RDSEED instruction -/// \sa MaurerRandomnessTest() for random bit generators -/// \since Crypto++ 5.6.3 -class RDSEED : public RandomNumberGenerator -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "RDSEED"; } - - virtual ~RDSEED() {} - - /// \brief Construct a RDSEED generator - /// \details Empirical testing under a 6th generation i7 (6200U) shows RDSEED fails - /// to fulfill requests at about once every for every 256 bytes requested. - /// The generator runs about 4 times slower than RDRAND. - /// \throw RDSEED_Err if the random number generator is not available - RDSEED(); - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - virtual void GenerateBlock(byte *output, size_t size); - - /// \brief Generate and discard n bytes - /// \param n the number of bytes to generate and discard - /// \details the RDSEED generator discards words, not bytes. If n is - /// not a multiple of a machine word, then it is rounded up to - /// that size. - virtual void DiscardBytes(size_t n); - - /// \brief Update RNG state with additional unpredictable values - /// \param input unused - /// \param length unused - /// \details The operation is a nop for this generator. - virtual void IncorporateEntropy(const byte *input, size_t length) - { - // Override to avoid the base class' throw. - CRYPTOPP_UNUSED(input); CRYPTOPP_UNUSED(length); - } - - std::string AlgorithmProvider() const { - return "RDSEED"; - } -}; - -NAMESPACE_END - -#endif // CRYPTOPP_RDRAND_H diff --git a/third_party/cryptoppwin/include/cryptopp/resource.h b/third_party/cryptoppwin/include/cryptopp/resource.h deleted file mode 100644 index ae07ae7f..00000000 --- a/third_party/cryptoppwin/include/cryptopp/resource.h +++ /dev/null @@ -1,15 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by cryptopp.rc -// - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rijndael.h b/third_party/cryptoppwin/include/cryptopp/rijndael.h deleted file mode 100644 index 272975aa..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rijndael.h +++ /dev/null @@ -1,109 +0,0 @@ -// rijndael.h - originally written and placed in the public domain by Wei Dai - -/// \file rijndael.h -/// \brief Classes for Rijndael encryption algorithm -/// \details All key sizes are supported. The library only provides Rijndael with 128-bit blocks, -/// and not 192-bit or 256-bit blocks -/// \since Rijndael since Crypto++ 3.1, Intel AES-NI since Crypto++ 5.6.1, ARMv8 AES since Crypto++ 6.0, -/// Power8 AES since Crypto++ 6.0, ARMv7 AES since Crypto++ 8.0 - -#ifndef CRYPTOPP_RIJNDAEL_H -#define CRYPTOPP_RIJNDAEL_H - -#include "seckey.h" -#include "secblock.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_RIJNDAEL_ASM 1 -#endif - -#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_ARM32 || \ - CRYPTOPP_BOOL_ARMV8 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 -# define CRYPTOPP_RIJNDAEL_ADVANCED_PROCESS_BLOCKS 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Rijndael block cipher information -/// \details All key sizes are supported. The library only provides Rijndael with 128-bit blocks, -/// and not 192-bit or 256-bit blocks -/// \since Rijndael since Crypto++ 3.1, Intel AES-NI since Crypto++ 5.6.1, ARMv8 AES since Crypto++ 6.0, -/// Power8 AES since Crypto++ 6.0, ARMv7 AES since Crypto++ 8.0 -struct Rijndael_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8> -{ - CRYPTOPP_DLL static const char * CRYPTOPP_API StaticAlgorithmName() {return "AES";} -}; - -/// \brief Rijndael block cipher -/// \details All key sizes are supported. The library only provides Rijndael with 128-bit blocks, -/// and not 192-bit or 256-bit blocks -/// \since Rijndael since Crypto++ 3.1, Intel AES-NI since Crypto++ 5.6.1, ARMv8 AES since Crypto++ 6.0, -/// Power8 AES since Crypto++ 6.0, ARMv7 AES since Crypto++ 8.0 -/// \sa Rijndael -class CRYPTOPP_DLL Rijndael : public Rijndael_Info, public BlockCipherDocumentation -{ - /// \brief Rijndael block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - std::string AlgorithmProvider() const; - unsigned int OptimalDataAlignment() const; - - protected: - static void FillEncTable(); - static void FillDecTable(); - - // VS2005 workaround: have to put these on separate lines, or error C2487 is triggered in DLL build - static const byte Se[256]; - static const byte Sd[256]; - - static const word32 rcon[]; - - unsigned int m_rounds; - SecBlock > m_key; - mutable SecByteBlock m_aliasBlock; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key sizes are supported. - /// The library only provides Rijndael with 128-bit blocks, and not 192-bit or 256-bit blocks - /// \since Rijndael since Crypto++ 3.1, Intel AES-NI since Crypto++ 5.6.1, ARMv8 AES since Crypto++ 6.0, - /// Power8 AES since Crypto++ 6.0, ARMv7 AES since Crypto++ 8.0 - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; -#if CRYPTOPP_RIJNDAEL_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key sizes are supported. - /// The library only provides Rijndael with 128-bit blocks, and not 192-bit or 256-bit blocks - /// \since Rijndael since Crypto++ 3.1, Intel AES-NI since Crypto++ 5.6.1, ARMv8 AES since Crypto++ 6.0, - /// Power8 AES since Crypto++ 6.0, ARMv7 AES since Crypto++ 8.0 - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; -#if CRYPTOPP_RIJNDAEL_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Rijndael::Encryption RijndaelEncryption; -typedef Rijndael::Decryption RijndaelDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ripemd.h b/third_party/cryptoppwin/include/cryptopp/ripemd.h deleted file mode 100644 index cf700840..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ripemd.h +++ /dev/null @@ -1,65 +0,0 @@ -// ripemd.h - originally written and placed in the public domain by Wei Dai - -/// \file -/// \brief Classes for RIPEMD message digest - -#ifndef CRYPTOPP_RIPEMD_H -#define CRYPTOPP_RIPEMD_H - -#include "iterhash.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief RIPEMD-160 message digest -/// \details Digest size is 160-bits. -/// \sa RIPEMD-160 -/// \since Crypto++ 2.1 -class RIPEMD160 : public IteratedHashWithStaticTransform -{ -public: - static void InitState(HashWordType *state); - static void Transform(word32 *digest, const word32 *data); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RIPEMD-160";} -}; - -/// \brief RIPEMD-320 message digest -/// \details Digest size is 320-bits. -/// \sa RIPEMD-320 -/// \since Crypto++ 2.1 -class RIPEMD320 : public IteratedHashWithStaticTransform -{ -public: - static void InitState(HashWordType *state); - static void Transform(word32 *digest, const word32 *data); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RIPEMD-320";} -}; - -/// \brief RIPEMD-128 message digest -/// \details Digest size is 128-bits. -/// \warning RIPEMD-128 is considered insecure, and should not be used unless you absolutely need it for compatibility. -/// \sa RIPEMD-128 -/// \since Crypto++ 2.1 -class RIPEMD128 : public IteratedHashWithStaticTransform -{ -public: - static void InitState(HashWordType *state); - static void Transform(word32 *digest, const word32 *data); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RIPEMD-128";} -}; - -/// \brief RIPEMD-256 message digest -/// \details Digest size is 256-bits. -/// \warning RIPEMD-256 is considered insecure, and should not be used unless you absolutely need it for compatibility. -/// \sa RIPEMD-256 -/// \since Crypto++ 2.1 -class RIPEMD256 : public IteratedHashWithStaticTransform -{ -public: - static void InitState(HashWordType *state); - static void Transform(word32 *digest, const word32 *data); - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RIPEMD-256";} -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rng.h b/third_party/cryptoppwin/include/cryptopp/rng.h deleted file mode 100644 index 74456acb..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rng.h +++ /dev/null @@ -1,111 +0,0 @@ -// rng.h - originally written and placed in the public domain by Wei Dai - -/// \file rng.h -/// \brief Miscellaneous classes for RNGs -/// \details This file contains miscellaneous classes for RNGs, including LC_RNG(), -/// X917RNG() and MaurerRandomnessTest() -/// \sa osrng.h, randpool.h - -#ifndef CRYPTOPP_RNG_H -#define CRYPTOPP_RNG_H - -#include "cryptlib.h" -#include "filters.h" -#include "smartptr.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Linear Congruential Generator (LCG) -/// \details Originally propsed by William S. England. -/// \warning LC_RNG is suitable for simulations, where uniformaly distributed numbers are -/// required quickly. It should not be used for cryptographic purposes. -class LC_RNG : public RandomNumberGenerator -{ -public: - /// \brief Construct a Linear Congruential Generator (LCG) - /// \param init_seed the initial value for the generator - LC_RNG(word32 init_seed) - : seed(init_seed) {} - - void GenerateBlock(byte *output, size_t size); - - word32 GetSeed() {return seed;} - -private: - word32 seed; - - static const word32 m; - static const word32 q; - static const word16 a; - static const word16 r; -}; - -/// \brief ANSI X9.17 RNG -/// \details X917RNG is from ANSI X9.17 Appendix C, and it uses a 64-bit block cipher, like TripleDES. -/// If you use a 128-bit block cipher, like AES, then you are effectively using an ANSI X9.31 generator. -/// \details You should reseed the generator after a fork() to avoid multiple generators -/// with the same internal state. -/// \sa AutoSeededX917RNG, DefaultAutoSeededRNG -class CRYPTOPP_DLL X917RNG : public RandomNumberGenerator, public NotCopyable -{ -public: - /// \brief Construct a X917RNG - /// \param cipher the block cipher to use for the generator - /// \param seed a byte buffer to use as a seed - /// \param deterministicTimeVector additional entropy - /// \details cipher will be deleted by the destructor. seed must be at least - /// BlockSize() in length. deterministicTimeVector = 0 means obtain time vector - /// from the system. - /// \details When constructing a X917RNG, the generator must be keyed or an access - /// violation will occur because the time vector is encrypted using the block cipher. - /// To key the generator during constructions, perform the following: - ///
-	///  SecByteBlock key(AES::DEFAULT_KEYLENGTH), seed(AES::BLOCKSIZE);
-	///  OS_GenerateRandomBlock(false, key, key.size());
-	///  OS_GenerateRandomBlock(false, seed, seed.size());
-	///  X917RNG prng(new AES::Encryption(key, AES::DEFAULT_KEYLENGTH), seed, NULLPTR);
- /// \sa AutoSeededX917RNG - X917RNG(BlockTransformation *cipher, const byte *seed, const byte *deterministicTimeVector = NULLPTR); - - void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword size); - -private: - member_ptr m_cipher; - const unsigned int m_size; // S, blocksize of cipher - SecByteBlock m_datetime; // DT, buffer for enciphered timestamp - SecByteBlock m_randseed, m_lastBlock, m_deterministicTimeVector; -}; - -/// \brief Maurer's Universal Statistical Test for Random Bit Generators -/// \details This class implements Maurer's Universal Statistical Test for -/// Random Bit Generators. It is intended for measuring the randomness of -/// *PHYSICAL* RNGs. -/// \details For more details see Maurer's paper in Journal of Cryptology, 1992. -class MaurerRandomnessTest : public Bufferless -{ -public: - /// \brief Construct a MaurerRandomnessTest - MaurerRandomnessTest(); - - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - - /// \brief Provides the number of bytes of input is needed by the test - /// \return how many more bytes of input is needed by the test - // BytesNeeded() returns how many more bytes of input is needed by the test - // GetTestValue() should not be called before BytesNeeded()==0 - unsigned int BytesNeeded() const {return n >= (Q+K) ? 0 : Q+K-n;} - - // returns a number between 0.0 and 1.0, describing the quality of the - // random numbers entered - double GetTestValue() const; - -private: - enum {L=8, V=256, Q=2000, K=2000}; - double sum; - unsigned int n; - unsigned int tab[V]; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rsa.h b/third_party/cryptoppwin/include/cryptopp/rsa.h deleted file mode 100644 index 1d45fb6e..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rsa.h +++ /dev/null @@ -1,288 +0,0 @@ -// rsa.h - originally written and placed in the public domain by Wei Dai - -/// \file rsa.h -/// \brief Classes for the RSA cryptosystem -/// \details This file contains classes that implement the RSA -/// ciphers and signature schemes as defined in PKCS #1 v2.0. - -#ifndef CRYPTOPP_RSA_H -#define CRYPTOPP_RSA_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "integer.h" -#include "pkcspad.h" -#include "oaep.h" -#include "emsa2.h" -#include "asn.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief RSA trapdoor function using the public key -/// \since Crypto++ 1.0 -class CRYPTOPP_DLL RSAFunction : public TrapdoorFunction, public X509PublicKey -{ - typedef RSAFunction ThisClass; - -public: - /// \brief Initialize a RSA public key - /// \param n the modulus - /// \param e the public exponent - void Initialize(const Integer &n, const Integer &e) - {m_n = n; m_e = e;} - - // X509PublicKey - OID GetAlgorithmID() const; - void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePublicKey(BufferedTransformation &bt) const; - - // CryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // TrapdoorFunction - Integer ApplyFunction(const Integer &x) const; - Integer PreimageBound() const {return m_n;} - Integer ImageBound() const {return m_n;} - - // non-derived - const Integer & GetModulus() const {return m_n;} - const Integer & GetPublicExponent() const {return m_e;} - - void SetModulus(const Integer &n) {m_n = n;} - void SetPublicExponent(const Integer &e) {m_e = e;} - -protected: - Integer m_n, m_e; -}; - -/// \brief RSA trapdoor function using the private key -/// \since Crypto++ 1.0 -class CRYPTOPP_DLL InvertibleRSAFunction : public RSAFunction, public TrapdoorFunctionInverse, public PKCS8PrivateKey -{ - typedef InvertibleRSAFunction ThisClass; - -public: - /// \brief Create a RSA private key - /// \param rng a RandomNumberGenerator derived class - /// \param modulusBits the size of the modulus, in bits - /// \param e the desired public exponent - /// \details Initialize() creates a new keypair using a public exponent of 17. - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits, const Integer &e = 17); - - /// \brief Initialize a RSA private key - /// \param n modulus - /// \param e public exponent - /// \param d private exponent - /// \param p first prime factor - /// \param q second prime factor - /// \param dp d mod p - /// \param dq d mod q - /// \param u q-1 mod p - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const Integer &n, const Integer &e, const Integer &d, const Integer &p, const Integer &q, const Integer &dp, const Integer &dq, const Integer &u) - {m_n = n; m_e = e; m_d = d; m_p = p; m_q = q; m_dp = dp; m_dq = dq; m_u = u;} - - /// \brief Initialize a RSA private key - /// \param n modulus - /// \param e public exponent - /// \param d private exponent - /// \details This Initialize() function overload initializes a private key from existing parameters. - /// Initialize() will factor n using d and populate {p,q,dp,dq,u}. - void Initialize(const Integer &n, const Integer &e, const Integer &d); - - // PKCS8PrivateKey - void BERDecode(BufferedTransformation &bt) - {PKCS8PrivateKey::BERDecode(bt);} - void DEREncode(BufferedTransformation &bt) const - {PKCS8PrivateKey::DEREncode(bt);} - void Load(BufferedTransformation &bt) - {PKCS8PrivateKey::BERDecode(bt);} - void Save(BufferedTransformation &bt) const - {PKCS8PrivateKey::DEREncode(bt);} - OID GetAlgorithmID() const {return RSAFunction::GetAlgorithmID();} - void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePrivateKey(BufferedTransformation &bt) const; - - // TrapdoorFunctionInverse - Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const; - - // GeneratableCryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - // parameters: (ModulusSize, PublicExponent (default 17)) - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg); - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // non-derived interface - const Integer& GetPrime1() const {return m_p;} - const Integer& GetPrime2() const {return m_q;} - const Integer& GetPrivateExponent() const {return m_d;} - const Integer& GetModPrime1PrivateExponent() const {return m_dp;} - const Integer& GetModPrime2PrivateExponent() const {return m_dq;} - const Integer& GetMultiplicativeInverseOfPrime2ModPrime1() const {return m_u;} - - void SetPrime1(const Integer &p) {m_p = p;} - void SetPrime2(const Integer &q) {m_q = q;} - void SetPrivateExponent(const Integer &d) {m_d = d;} - void SetModPrime1PrivateExponent(const Integer &dp) {m_dp = dp;} - void SetModPrime2PrivateExponent(const Integer &dq) {m_dq = dq;} - void SetMultiplicativeInverseOfPrime2ModPrime1(const Integer &u) {m_u = u;} - -protected: - Integer m_d, m_p, m_q, m_dp, m_dq, m_u; -}; - -/// \brief RSA trapdoor function using the public key -/// \since Crypto++ 1.0 -class CRYPTOPP_DLL RSAFunction_ISO : public RSAFunction -{ -public: - Integer ApplyFunction(const Integer &x) const; - Integer PreimageBound() const {return ++(m_n>>1);} -}; - -/// \brief RSA trapdoor function using the private key -/// \since Crypto++ 1.0 -class CRYPTOPP_DLL InvertibleRSAFunction_ISO : public InvertibleRSAFunction -{ -public: - Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const; - Integer PreimageBound() const {return ++(m_n>>1);} -}; - -/// \brief RSA algorithm -/// \since Crypto++ 1.0 -struct CRYPTOPP_DLL RSA -{ - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "RSA";} - typedef RSAFunction PublicKey; - typedef InvertibleRSAFunction PrivateKey; -}; - -/// \brief RSA encryption algorithm -/// \tparam STANDARD signature standard -/// \sa RSA cryptosystem -/// \since Crypto++ 1.0 -template -struct RSAES : public TF_ES -{ -}; - -/// \brief RSA signature algorithm -/// \tparam STANDARD signature standard -/// \tparam H hash transformation -/// \details See documentation of PKCS1v15 for a list of hash functions that can be used with it. -/// \sa RSA signature scheme with appendix -/// \since Crypto++ 1.0 -template -struct RSASS : public TF_SS -{ -}; - -/// \brief RSA algorithm -/// \since Crypto++ 1.0 -struct CRYPTOPP_DLL RSA_ISO -{ - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "RSA-ISO";} - typedef RSAFunction_ISO PublicKey; - typedef InvertibleRSAFunction_ISO PrivateKey; -}; - -/// \brief RSA signature algorithm -/// \tparam H hash transformation -/// \since Crypto++ 1.0 -template -struct RSASS_ISO : public TF_SS -{ -}; - -/// \brief \ref RSAES "RSAES::Decryptor" typedef -/// \details RSA encryption scheme defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -DOCUMENTED_TYPEDEF(RSAES::Decryptor, RSAES_PKCS1v15_Decryptor); -/// \brief \ref RSAES "RSAES::Encryptor" typedef -/// \details RSA encryption scheme defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -DOCUMENTED_TYPEDEF(RSAES::Encryptor, RSAES_PKCS1v15_Encryptor); - -/// \brief \ref RSAES "RSAES>::Decryptor" typedef -/// \details RSA encryption scheme defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -DOCUMENTED_TYPEDEF(RSAES >::Decryptor, RSAES_OAEP_SHA_Decryptor); -/// \brief \ref RSAES "RSAES>::Encryptor" typedef -/// \details RSA encryption scheme defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -DOCUMENTED_TYPEDEF(RSAES >::Encryptor, RSAES_OAEP_SHA_Encryptor); - -/// \brief \ref RSAES "RSAES>::Decryptor" typedef -/// \details RSA encryption scheme defined in PKCS #1 v2.0 -/// \since Crypto++ 8.8 -DOCUMENTED_TYPEDEF(RSAES >::Decryptor, RSAES_OAEP_SHA256_Decryptor); -/// \brief \ref RSAES "RSAES>::Encryptor" typedef -/// \details RSA encryption scheme defined in PKCS #1 v2.0 -/// \since Crypto++ 8.8 -DOCUMENTED_TYPEDEF(RSAES >::Encryptor, RSAES_OAEP_SHA256_Encryptor); - -#ifdef CRYPTOPP_DOXYGEN_PROCESSING -/// \brief \ref RSASS "RSASS::Signer" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -class RSASSA_PKCS1v15_SHA_Signer : public RSASS::Signer {}; -/// \brief \ref RSASS "RSASS::Verifier" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -class RSASSA_PKCS1v15_SHA_Verifier : public RSASS::Verifier {}; - -/// \brief \ref RSASS "RSASS::Signer" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 8.8 -class RSASSA_PKCS1v15_SHA256_Signer : public RSASS::Signer {}; -/// \brief \ref RSASS "RSASS::Verifier" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 8.8 -class RSASSA_PKCS1v15_SHA256_Verifier : public RSASS::Verifier {}; - -namespace Weak { - -/// \brief \ref RSASS "RSASS::Signer" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -class RSASSA_PKCS1v15_MD2_Signer : public RSASS::Signer {}; -/// \brief \ref RSASS "RSASS::Verifier" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -class RSASSA_PKCS1v15_MD2_Verifier : public RSASS::Verifier {}; - -/// \brief \ref RSASS "RSASS::Signer" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -class RSASSA_PKCS1v15_MD5_Signer : public RSASS::Signer {}; -/// \brief \ref RSASS "RSASS::Verifier" typedef -/// \details RSA signature schemes defined in PKCS #1 v2.0 -/// \since Crypto++ 1.0 -class RSASSA_PKCS1v15_MD5_Verifier : public RSASS::Verifier {}; -} - -#else -typedef RSASS::Signer RSASSA_PKCS1v15_SHA_Signer; -typedef RSASS::Verifier RSASSA_PKCS1v15_SHA_Verifier; - -typedef RSASS::Signer RSASSA_PKCS1v15_SHA256_Signer; -typedef RSASS::Verifier RSASSA_PKCS1v15_SHA256_Verifier; - -namespace Weak { - typedef RSASS::Signer RSASSA_PKCS1v15_MD2_Signer; - typedef RSASS::Verifier RSASSA_PKCS1v15_MD2_Verifier; - typedef RSASS::Signer RSASSA_PKCS1v15_MD5_Signer; - typedef RSASS::Verifier RSASSA_PKCS1v15_MD5_Verifier; -} -#endif // CRYPTOPP_DOXYGEN_PROCESSING - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/rw.h b/third_party/cryptoppwin/include/cryptopp/rw.h deleted file mode 100644 index ca2cd30a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/rw.h +++ /dev/null @@ -1,146 +0,0 @@ -// rw.h - originally written and placed in the public domain by Wei Dai - -/// \file rw.h -/// \brief Classes for Rabin-Williams signature scheme -/// \details The implementation provides Rabin-Williams signature schemes as defined in -/// IEEE P1363. It uses Bernstein's tweaked square roots in place of square roots to -/// speedup calculations. -/// \sa RSA signatures and Rabin–Williams -/// signatures: the state of the art (20080131), Section 6, The tweaks e and f. -/// \since Crypto++ 3.0 - -#ifndef CRYPTOPP_RW_H -#define CRYPTOPP_RW_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "integer.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Rabin-Williams trapdoor function using the public key -/// \since Crypto++ 3.0, Tweaked roots using e and f since Crypto++ 5.6.4 -class CRYPTOPP_DLL RWFunction : public TrapdoorFunction, public PublicKey -{ - typedef RWFunction ThisClass; - -public: - - /// \brief Initialize a Rabin-Williams public key - /// \param n the modulus - void Initialize(const Integer &n) - {m_n = n;} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - void Save(BufferedTransformation &bt) const - {DEREncode(bt);} - void Load(BufferedTransformation &bt) - {BERDecode(bt);} - - Integer ApplyFunction(const Integer &x) const; - Integer PreimageBound() const {return ++(m_n>>1);} - Integer ImageBound() const {return m_n;} - - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - const Integer& GetModulus() const {return m_n;} - void SetModulus(const Integer &n) {m_n = n;} - -protected: - Integer m_n; -}; - -/// \brief Rabin-Williams trapdoor function using the private key -/// \since Crypto++ 3.0, Tweaked roots using e and f since Crypto++ 5.6.4 -class CRYPTOPP_DLL InvertibleRWFunction : public RWFunction, public TrapdoorFunctionInverse, public PrivateKey -{ - typedef InvertibleRWFunction ThisClass; - -public: - /// \brief Construct an InvertibleRWFunction - InvertibleRWFunction() : m_precompute(false) {} - - /// \brief Initialize a Rabin-Williams private key - /// \param n modulus - /// \param p first prime factor - /// \param q second prime factor - /// \param u q-1 mod p - /// \details This Initialize() function overload initializes a private key from existing parameters. - void Initialize(const Integer &n, const Integer &p, const Integer &q, const Integer &u); - - /// \brief Create a Rabin-Williams private key - /// \param rng a RandomNumberGenerator derived class - /// \param modulusBits the size of the modulus, in bits - /// \details This function overload of Initialize() creates a new private key because it - /// takes a RandomNumberGenerator() as a parameter. If you have an existing keypair, - /// then use one of the other Initialize() overloads. - void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits) - {GenerateRandomWithKeySize(rng, modulusBits);} - - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - - void Save(BufferedTransformation &bt) const - {DEREncode(bt);} - void Load(BufferedTransformation &bt) - {BERDecode(bt);} - - Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const; - - // GeneratibleCryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - /*! parameters: (ModulusSize) */ - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg); - - const Integer& GetPrime1() const {return m_p;} - const Integer& GetPrime2() const {return m_q;} - const Integer& GetMultiplicativeInverseOfPrime2ModPrime1() const {return m_u;} - - void SetPrime1(const Integer &p) {m_p = p;} - void SetPrime2(const Integer &q) {m_q = q;} - void SetMultiplicativeInverseOfPrime2ModPrime1(const Integer &u) {m_u = u;} - - virtual bool SupportsPrecomputation() const {return true;} - virtual void Precompute(unsigned int unused = 0) {CRYPTOPP_UNUSED(unused); PrecomputeTweakedRoots();} - virtual void Precompute(unsigned int unused = 0) const {CRYPTOPP_UNUSED(unused); PrecomputeTweakedRoots();} - - virtual void LoadPrecomputation(BufferedTransformation &storedPrecomputation); - virtual void SavePrecomputation(BufferedTransformation &storedPrecomputation) const; - -protected: - void PrecomputeTweakedRoots() const; - -protected: - Integer m_p, m_q, m_u; - - mutable Integer m_pre_2_9p, m_pre_2_3q, m_pre_q_p; - mutable bool m_precompute; -}; - -/// \brief Rabin-Williams keys -/// \since Crypto++ 3.0 -struct RW -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "RW";} - typedef RWFunction PublicKey; - typedef InvertibleRWFunction PrivateKey; -}; - -/// \brief Rabin-Williams signature scheme -/// \tparam STANDARD signature standard -/// \tparam H hash transformation -/// \since Crypto++ 3.0 -template -struct RWSS : public TF_SS -{ -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/safer.h b/third_party/cryptoppwin/include/cryptopp/safer.h deleted file mode 100644 index dacd8c3f..00000000 --- a/third_party/cryptoppwin/include/cryptopp/safer.h +++ /dev/null @@ -1,98 +0,0 @@ -// safer.h - originally written and placed in the public domain by Wei Dai - -/// \file safer.h -/// \brief Classes for the SAFER and SAFER-K block ciphers - -#ifndef CRYPTOPP_SAFER_H -#define CRYPTOPP_SAFER_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SAFER block cipher -class SAFER -{ -public: - /// \brief SAFER block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public BlockCipher - { - public: - unsigned int OptimalDataAlignment() const {return 1;} - void UncheckedSetKey(const byte *userkey, unsigned int length, const NameValuePairs ¶ms); - - protected: - virtual bool Strengthened() const =0; - - SecByteBlock keySchedule; - static const byte exp_tab[256]; - static const byte log_tab[256]; - }; - - /// \brief SAFER block cipher encryption operation - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief SAFER block cipher decryption operation - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; -}; - -/// \brief SAFER block cipher default implementation -/// \tparam BASE SAFER::Enc or SAFER::Dec derived base class -/// \tparam INFO SAFER_Info derived class -/// \tparam STR flag indicating a strengthened implementation -/// \details SAFER-K is not strengthened; while SAFER-SK is strengthened. -template -class CRYPTOPP_NO_VTABLE SAFER_Impl : public BlockCipherImpl -{ -protected: - bool Strengthened() const {return STR;} -}; - -/// \brief SAFER-K block cipher information -struct SAFER_K_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 8, 16, 8>, public VariableRounds<10, 1, 13> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "SAFER-K";} -}; - -/// \brief SAFER-K block cipher -/// \sa SAFER-K -class SAFER_K : public SAFER_K_Info, public SAFER, public BlockCipherDocumentation -{ -public: - typedef BlockCipherFinal > Encryption; - typedef BlockCipherFinal > Decryption; -}; - -/// \brief SAFER-SK block cipher information -struct SAFER_SK_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 8, 16, 8>, public VariableRounds<10, 1, 13> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "SAFER-SK";} -}; - -/// \brief SAFER-SK block cipher -/// \sa SAFER-SK -class SAFER_SK : public SAFER_SK_Info, public SAFER, public BlockCipherDocumentation -{ -public: - typedef BlockCipherFinal > Encryption; - typedef BlockCipherFinal > Decryption; -}; - -typedef SAFER_K::Encryption SAFER_K_Encryption; -typedef SAFER_K::Decryption SAFER_K_Decryption; - -typedef SAFER_SK::Encryption SAFER_SK_Encryption; -typedef SAFER_SK::Decryption SAFER_SK_Decryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/salsa.h b/third_party/cryptoppwin/include/cryptopp/salsa.h deleted file mode 100644 index 40df15d8..00000000 --- a/third_party/cryptoppwin/include/cryptopp/salsa.h +++ /dev/null @@ -1,104 +0,0 @@ -// salsa.h - originally written and placed in the public domain by Wei Dai - -/// \file salsa.h -/// \brief Classes for Salsa and Salsa20 stream ciphers - -#ifndef CRYPTOPP_SALSA_H -#define CRYPTOPP_SALSA_H - -#include "strciphr.h" -#include "secblock.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_SALSA_ASM 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Salsa20 core transform -/// \param data the data to transform -/// \param rounds the number of rounds -/// \details Several algorithms, like CryptoBox and Scrypt, require access to -/// the core Salsa20 transform. The current Crypto++ implementation does not -/// lend itself to disgorging the Salsa20 cipher from the Salsa20 core transform. -/// Instead Salsa20_Core is provided with customary accelerations. -void Salsa20_Core(word32* data, unsigned int rounds); - -/// \brief Salsa20 stream cipher information -/// \since Crypto++ 5.4 -struct Salsa20_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::UNIQUE_IV, 8> -{ - static std::string StaticAlgorithmName() {return "Salsa20";} -}; - -/// \brief Salsa20 stream cipher operation -/// \since Crypto++ 5.4 -class CRYPTOPP_NO_VTABLE Salsa20_Policy : public AdditiveCipherConcretePolicy -{ -protected: - Salsa20_Policy() : m_rounds(ROUNDS) {} - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); - bool CipherIsRandomAccess() const {return true;} - void SeekToIteration(lword iterationCount); - -#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) - unsigned int GetAlignment() const; - unsigned int GetOptimalBlockSize() const; -#endif - - std::string AlgorithmProvider() const; - - CRYPTOPP_CONSTANT(ROUNDS = 20); // Default rounds - FixedSizeAlignedSecBlock m_state; - int m_rounds; -}; - -/// \brief Salsa20 stream cipher -/// \details Salsa20 provides a variable number of rounds: 8, 12 or 20. The default number of rounds is 20. -/// \sa The Salsa20 -/// family of stream ciphers (20071225), -/// Snuffle 2005: the Salsa20 encryption -/// function and Salsa20 -/// \since Crypto++ 5.4 -struct Salsa20 : public Salsa20_Info, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal >, Salsa20_Info> Encryption; - typedef Encryption Decryption; -}; - -/// \brief XSalsa20 stream cipher information -/// \since Crypto++ 5.4 -struct XSalsa20_Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 24> -{ - static std::string StaticAlgorithmName() {return "XSalsa20";} -}; - -/// \brief XSalsa20 stream cipher operation -/// \since Crypto++ 5.4 -class CRYPTOPP_NO_VTABLE XSalsa20_Policy : public Salsa20_Policy -{ -public: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); - -protected: - FixedSizeSecBlock m_key; -}; - -/// \brief XSalsa20 stream cipher -/// \details XSalsa20 provides a variable number of rounds: 8, 12 or 20. The default number of rounds is 20. -/// \sa XSalsa20 -/// \since Crypto++ 5.4 -struct XSalsa20 : public XSalsa20_Info, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal >, XSalsa20_Info> Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/scrypt.h b/third_party/cryptoppwin/include/cryptopp/scrypt.h deleted file mode 100644 index a275e993..00000000 --- a/third_party/cryptoppwin/include/cryptopp/scrypt.h +++ /dev/null @@ -1,103 +0,0 @@ -// scrypt.h - written and placed in public domain by Jeffrey Walton. -// Based on reference source code by Colin Percival. - -/// \file scrypt.h -/// \brief Classes for Scrypt from RFC 7914 -/// \sa Stronger Key Derivation via -/// Sequential Memory-Hard Functions, -/// The scrypt key derivation function -/// and RFC 7914, The scrypt Password-Based -/// Key Derivation Function -/// \since Crypto++ 7.0 - -#ifndef CRYPTOPP_SCRYPT_H -#define CRYPTOPP_SCRYPT_H - -#include "cryptlib.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Scrypt key derivation function -/// \details The Crypto++ implementation uses OpenMP to accelerate the derivation when -/// available. -/// \details The Crypto++ implementation of Scrypt is limited by C++ datatypes. For -/// example, the library is limited to a derived key length of SIZE_MAX, -/// and not (2^32 - 1) * 32. -/// \sa Stronger Key Derivation via -/// Sequential Memory-Hard Functions, -/// The scrypt key derivation function -/// and RFC 7914, The scrypt Password-Based -/// Key Derivation Function -/// \since Crypto++ 7.0 -class Scrypt : public KeyDerivationFunction -{ -public: - virtual ~Scrypt() {} - - static std::string StaticAlgorithmName () { - return "scrypt"; - } - - // KeyDerivationFunction interface - std::string AlgorithmName() const { - return StaticAlgorithmName(); - } - - // KeyDerivationFunction interface - size_t MaxDerivedKeyLength() const { - return static_cast(0)-1; - } - - // KeyDerivationFunction interface - size_t GetValidDerivedLength(size_t keylength) const; - - // KeyDerivationFunction interface - size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const NameValuePairs& params) const; - - /// \brief Derive a key from a seed - /// \param derived the derived output buffer - /// \param derivedLen the size of the derived buffer, in bytes - /// \param secret the seed input buffer - /// \param secretLen the size of the secret buffer, in bytes - /// \param salt the salt input buffer - /// \param saltLen the size of the salt buffer, in bytes - /// \param cost the CPU/memory cost factor - /// \param blockSize the block size - /// \param parallelization the parallelization factor - /// \return the number of iterations performed - /// \throw InvalidDerivedKeyLength if derivedLen is invalid for the scheme - /// \details DeriveKey() provides a standard interface to derive a key from - /// a seed and other parameters. Each class that derives from KeyDerivationFunction - /// provides an overload that accepts most parameters used by the derivation function. - /// \details The CPU/Memory cost parameter ("N" in the documents) must be - /// larger than 1, a power of 2, and less than 2^(128 * r / 8). - /// \details The parameter blockSize ("r" in the documents) specifies the block - /// size. - /// \details The parallelization parameter ("p" in the documents) is a positive - /// integer less than or equal to ((2^32-1) * 32) / (128 * r). Due to Microsoft - /// and its OpenMP 2.0 implementation parallelization is limited to - /// std::numeric_limits::max(). - /// \details Scrypt always returns 1 because it only performs 1 iteration. Other - /// derivation functions, like PBKDF's, will return more interesting values. - /// \details The Crypto++ implementation of Scrypt is limited by C++ datatypes. For - /// example, the library is limited to a derived key length of SIZE_MAX, - /// and not (2^32 - 1) * 32. - size_t DeriveKey(byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, - const byte *salt, size_t saltLen, word64 cost=2, word64 blockSize=8, word64 parallelization=1) const; - -protected: - enum {defaultCost=2, defaultBlockSize=8, defaultParallelization=1}; - - // KeyDerivationFunction interface - const Algorithm & GetAlgorithm() const { - return *this; - } - - inline void ValidateParameters(size_t derivedlen, word64 cost, word64 blockSize, word64 parallelization) const; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_SCRYPT_H diff --git a/third_party/cryptoppwin/include/cryptopp/seal.h b/third_party/cryptoppwin/include/cryptopp/seal.h deleted file mode 100644 index 750df966..00000000 --- a/third_party/cryptoppwin/include/cryptopp/seal.h +++ /dev/null @@ -1,59 +0,0 @@ -// seal.h - originally written and placed in the public domain by Wei Dai - -/// \file seal.h -/// \brief Classes for SEAL stream cipher -/// \since Crypto++ 2.2 - -#ifndef CRYPTOPP_SEAL_H -#define CRYPTOPP_SEAL_H - -#include "strciphr.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SEAL stream cipher information -/// \tparam B Endianness of the stream cipher -/// \since Crypto++ 2.2 -template -struct SEAL_Info : public FixedKeyLength<20, SimpleKeyingInterface::INTERNALLY_GENERATED_IV, 4> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return B::ToEnum() == LITTLE_ENDIAN_ORDER ? "SEAL-3.0-LE" : "SEAL-3.0-BE";} -}; - -/// \brief SEAL stream cipher operation -/// \tparam B Endianness of the stream cipher -/// \since Crypto++ 2.2 -template -class CRYPTOPP_NO_VTABLE SEAL_Policy : public AdditiveCipherConcretePolicy, public SEAL_Info -{ -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); - bool CipherIsRandomAccess() const {return true;} - void SeekToIteration(lword iterationCount); - -private: - FixedSizeSecBlock m_T; - FixedSizeSecBlock m_S; - SecBlock m_R; - - word32 m_startCount, m_iterationsPerCount; - word32 m_outsideCounter, m_insideCounter; -}; - -/// \brief SEAL stream cipher -/// \tparam B Endianness of the stream cipher -/// \sa SEAL -/// \since Crypto++ 2.2 -template -struct SEAL : public SEAL_Info, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal, AdditiveCipherTemplate<> >, SEAL_Info > Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/secblock.h b/third_party/cryptoppwin/include/cryptopp/secblock.h deleted file mode 100644 index 1f200125..00000000 --- a/third_party/cryptoppwin/include/cryptopp/secblock.h +++ /dev/null @@ -1,1310 +0,0 @@ -// secblock.h - originally written and placed in the public domain by Wei Dai - -/// \file secblock.h -/// \brief Classes and functions for secure memory allocations. - -#ifndef CRYPTOPP_SECBLOCK_H -#define CRYPTOPP_SECBLOCK_H - -#include "config.h" -#include "allocate.h" -#include "misc.h" -#include "stdcpp.h" - -#if defined(CRYPTOPP_MSC_VERSION) -# pragma warning(push) -# pragma warning(disable: 4231 4275 4700) -# if (CRYPTOPP_MSC_VERSION >= 1400) -# pragma warning(disable: 6011 6386 28193) -# endif -#endif - -NAMESPACE_BEGIN(CryptoPP) - -// ************** secure memory allocation *************** - -/// \brief Base class for all allocators used by SecBlock -/// \tparam T the class or type -template -class AllocatorBase -{ -public: - typedef T value_type; - typedef size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef T * pointer; - typedef const T * const_pointer; - typedef T & reference; - typedef const T & const_reference; - - pointer address(reference r) const {return (&r);} - const_pointer address(const_reference r) const {return (&r); } - void construct(pointer p, const T& val) {new (p) T(val);} - void destroy(pointer p) {CRYPTOPP_UNUSED(p); p->~T();} - - /// \brief Returns the maximum number of elements the allocator can provide - /// \details ELEMS_MAX is the maximum number of elements the - /// Allocator can provide. The value of ELEMS_MAX is - /// SIZE_MAX/sizeof(T). std::numeric_limits was avoided - /// due to lack of constexpr-ness in C++03 and below. - /// \note In C++03 and below ELEMS_MAX is a static data member of type - /// size_type. In C++11 and above ELEMS_MAX is an enum - /// inheriting from size_type. In both cases ELEMS_MAX can be - /// used before objects are fully constructed, and it does not suffer the - /// limitations of class methods like max_size. - /// \sa Issue 346/CVE-2016-9939 - /// \since Crypto++ 6.0 -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - static const size_type ELEMS_MAX = ...; -#elif defined(CRYPTOPP_MSC_VERSION) && (CRYPTOPP_MSC_VERSION <= 1400) - static const size_type ELEMS_MAX = (~(size_type)0)/sizeof(T); -#elif defined(CRYPTOPP_CXX11_STRONG_ENUM) - enum : size_type {ELEMS_MAX = SIZE_MAX/sizeof(T)}; -#else - static const size_type ELEMS_MAX = SIZE_MAX/sizeof(T); -#endif - - /// \brief Returns the maximum number of elements the allocator can provide - /// \return the maximum number of elements the allocator can provide - /// \details Internally, preprocessor macros are used rather than std::numeric_limits - /// because the latter is not a constexpr. Some compilers, like Clang, do not - /// optimize it well under all circumstances. Compilers like GCC, ICC and MSVC appear - /// to optimize it well in either form. - CRYPTOPP_CONSTEXPR size_type max_size() const {return ELEMS_MAX;} - -#if defined(__SUNPRO_CC) - // https://github.com/weidai11/cryptopp/issues/770 - // and https://stackoverflow.com/q/53999461/608639 - CRYPTOPP_CONSTEXPR size_type max_size(size_type n) const {return SIZE_MAX/n;} -#endif - -#if defined(CRYPTOPP_CXX11_VARIADIC_TEMPLATES) || defined(CRYPTOPP_DOXYGEN_PROCESSING) - - /// \brief Constructs a new V using variadic arguments - /// \tparam V the type to be forwarded - /// \tparam Args the arguments to be forwarded - /// \param ptr pointer to type V - /// \param args variadic arguments - /// \details This is a C++11 feature. It is available when CRYPTOPP_CXX11_VARIADIC_TEMPLATES - /// is defined. The define is controlled by compiler versions detected in config.h. - template - void construct(V* ptr, Args&&... args) {::new ((void*)ptr) V(std::forward(args)...);} - - /// \brief Destroys an V constructed with variadic arguments - /// \tparam V the type to be forwarded - /// \details This is a C++11 feature. It is available when CRYPTOPP_CXX11_VARIADIC_TEMPLATES - /// is defined. The define is controlled by compiler versions detected in config.h. - template - void destroy(V* ptr) {if (ptr) ptr->~V();} - -#endif - -protected: - - /// \brief Verifies the allocator can satisfy a request based on size - /// \param size the size of the allocation, in elements - /// \throw InvalidArgument - /// \details CheckSize verifies the number of elements requested is valid. - /// \details If size is greater than max_size(), then InvalidArgument is thrown. - /// The library throws InvalidArgument if the size is too large to satisfy. - /// \details Internally, preprocessor macros are used rather than std::numeric_limits - /// because the latter is not a constexpr. Some compilers, like Clang, do not - /// optimize it well under all circumstances. Compilers like GCC, ICC and MSVC appear - /// to optimize it well in either form. - /// \details The sizeof(T) != 1 in the condition attempts to help the - /// compiler optimize the check for byte types. Coverity findings for - /// CONSTANT_EXPRESSION_RESULT were generated without it. For byte types, - /// size never exceeded ELEMS_MAX but the code was not removed. - /// \note size is the count of elements, and not the number of bytes - static void CheckSize(size_t size) - { - // Squash MSC C4100 warning for size. Also see commit 42b7c4ea5673. - CRYPTOPP_UNUSED(size); - // C++ throws std::bad_alloc (C++03) or std::bad_array_new_length (C++11) here. - if (sizeof(T) != 1 && size > ELEMS_MAX) - throw InvalidArgument("AllocatorBase: requested size would cause integer overflow"); - } -}; - -#define CRYPTOPP_INHERIT_ALLOCATOR_TYPES(T_type) \ - typedef typename AllocatorBase::value_type value_type;\ - typedef typename AllocatorBase::size_type size_type;\ - typedef typename AllocatorBase::difference_type difference_type;\ - typedef typename AllocatorBase::pointer pointer;\ - typedef typename AllocatorBase::const_pointer const_pointer;\ - typedef typename AllocatorBase::reference reference;\ - typedef typename AllocatorBase::const_reference const_reference; - -/// \brief Reallocation function -/// \tparam T the class or type -/// \tparam A the class or type's allocator -/// \param alloc the allocator -/// \param oldPtr the previous allocation -/// \param oldSize the size of the previous allocation -/// \param newSize the new, requested size -/// \param preserve flag that indicates if the old allocation should be preserved -/// \note oldSize and newSize are the count of elements, and not the -/// number of bytes. -template -typename A::pointer StandardReallocate(A& alloc, T *oldPtr, typename A::size_type oldSize, typename A::size_type newSize, bool preserve) -{ - // Avoid assert on pointer in reallocate. SecBlock regularly uses NULL - // pointers rather returning non-NULL 0-sized pointers. - if (oldSize == newSize) - return oldPtr; - - if (preserve) - { - typename A::pointer newPtr = alloc.allocate(newSize, NULLPTR); - const typename A::size_type copySize = STDMIN(oldSize, newSize) * sizeof(T); - - if (oldPtr && newPtr) - memcpy_s(newPtr, copySize, oldPtr, copySize); - - if (oldPtr) - alloc.deallocate(oldPtr, oldSize); - - return newPtr; - } - else - { - if (oldPtr) - alloc.deallocate(oldPtr, oldSize); - - return alloc.allocate(newSize, NULLPTR); - } -} - -/// \brief Allocates a block of memory with cleanup -/// \tparam T class or type -/// \tparam T_Align16 boolean that determines whether allocations should be aligned on a 16-byte boundary -/// \details If T_Align16 is true, then AllocatorWithCleanup calls AlignedAllocate() -/// for memory allocations. If T_Align16 is false, then AllocatorWithCleanup() calls -/// UnalignedAllocate() for memory allocations. -/// \details Template parameter T_Align16 is effectively controlled by cryptlib.h and mirrors -/// CRYPTOPP_BOOL_ALIGN16. CRYPTOPP_BOOL_ALIGN16 is often used as the template parameter. -template -class AllocatorWithCleanup : public AllocatorBase -{ -public: - CRYPTOPP_INHERIT_ALLOCATOR_TYPES(T) - - /// \brief Allocates a block of memory - /// \param ptr the size of the allocation - /// \param size the size of the allocation, in elements - /// \return a memory block - /// \throw InvalidArgument - /// \details allocate() first checks the size of the request. If it is non-0 - /// and less than max_size(), then an attempt is made to fulfill the request - /// using either AlignedAllocate() or UnalignedAllocate(). AlignedAllocate() is - /// used if T_Align16 is true. UnalignedAllocate() used if T_Align16 is false. - /// \details This is the C++ *Placement New* operator. ptr is not used, and the - /// function asserts in Debug builds if ptr is non-NULL. - /// \sa CallNewHandler() for the methods used to recover from a failed - /// allocation attempt. - /// \note size is the count of elements, and not the number of bytes - pointer allocate(size_type size, const void *ptr = NULLPTR) - { - CRYPTOPP_UNUSED(ptr); CRYPTOPP_ASSERT(ptr == NULLPTR); - this->CheckSize(size); - if (size == 0) - return NULLPTR; - -#if CRYPTOPP_BOOL_ALIGN16 - if (T_Align16) - return reinterpret_cast(AlignedAllocate(size*sizeof(T))); -#endif - - return reinterpret_cast(UnalignedAllocate(size*sizeof(T))); - } - - /// \brief Deallocates a block of memory - /// \param ptr the pointer for the allocation - /// \param size the size of the allocation, in elements - /// \details Internally, SecureWipeArray() is called before deallocating the - /// memory. Once the memory block is wiped or zeroized, AlignedDeallocate() - /// or UnalignedDeallocate() is called. - /// \details AlignedDeallocate() is used if T_Align16 is true. - /// UnalignedDeallocate() used if T_Align16 is false. - void deallocate(void *ptr, size_type size) - { - // Avoid assert on pointer in deallocate. SecBlock regularly uses NULL - // pointers rather returning non-NULL 0-sized pointers. - if (ptr) - { - SecureWipeArray(reinterpret_cast(ptr), size); - -#if CRYPTOPP_BOOL_ALIGN16 - if (T_Align16) - return AlignedDeallocate(ptr); -#endif - - UnalignedDeallocate(ptr); - } - } - - /// \brief Reallocates a block of memory - /// \param oldPtr the previous allocation - /// \param oldSize the size of the previous allocation - /// \param newSize the new, requested size - /// \param preserve flag that indicates if the old allocation should be preserved - /// \return pointer to the new memory block - /// \details Internally, reallocate() calls StandardReallocate(). - /// \details If preserve is true, then index 0 is used to begin copying the - /// old memory block to the new one. If the block grows, then the old array - /// is copied in its entirety. If the block shrinks, then only newSize - /// elements are copied from the old block to the new one. - /// \note oldSize and newSize are the count of elements, and not the - /// number of bytes. - pointer reallocate(T *oldPtr, size_type oldSize, size_type newSize, bool preserve) - { - CRYPTOPP_ASSERT((oldPtr && oldSize) || !(oldPtr || oldSize)); - return StandardReallocate(*this, oldPtr, oldSize, newSize, preserve); - } - - /// \brief Template class member Rebind - /// \tparam V bound class or type - /// \details Rebind allows a container class to allocate a different type of object - /// to store elements. For example, a std::list will allocate std::list_node to - /// store elements in the list. - /// \details VS.NET STL enforces the policy of "All STL-compliant allocators - /// have to provide a template class member called rebind". - template struct rebind { typedef AllocatorWithCleanup other; }; -#if (CRYPTOPP_MSC_VERSION >= 1500) - AllocatorWithCleanup() {} - template AllocatorWithCleanup(const AllocatorWithCleanup &) {} -#endif -}; - -CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup; -CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup; -CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup; -CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup; -#if defined(CRYPTOPP_WORD128_AVAILABLE) -CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup; // for Integer -#endif -#if CRYPTOPP_BOOL_X86 -CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup; // for Integer -#endif - -/// \brief NULL allocator -/// \tparam T class or type -/// \details A NullAllocator is useful for fixed-size, stack based allocations -/// (i.e., static arrays used by FixedSizeAllocatorWithCleanup). -/// \details A NullAllocator always returns 0 for max_size(), and always returns -/// NULL for allocation requests. Though the allocator does not allocate at -/// runtime, it does perform a secure wipe or zeroization during cleanup. -template -class NullAllocator : public AllocatorBase -{ -public: - //LCOV_EXCL_START - CRYPTOPP_INHERIT_ALLOCATOR_TYPES(T) - - // TODO: should this return NULL or throw bad_alloc? Non-Windows C++ standard - // libraries always throw. And late mode Windows throws. Early model Windows - // (circa VC++ 6.0) returned NULL. - pointer allocate(size_type n, const void* unused = NULLPTR) - { - CRYPTOPP_UNUSED(n); CRYPTOPP_UNUSED(unused); - CRYPTOPP_ASSERT(false); return NULLPTR; - } - - void deallocate(void *p, size_type n) - { - CRYPTOPP_UNUSED(p); CRYPTOPP_UNUSED(n); - CRYPTOPP_ASSERT(false); - } - - CRYPTOPP_CONSTEXPR size_type max_size() const {return 0;} - //LCOV_EXCL_STOP -}; - -/// \brief Static secure memory block with cleanup -/// \tparam T class or type -/// \tparam S fixed-size of the stack-based memory block, in elements -/// \tparam T_Align16 boolean that determines whether allocations should -/// be aligned on a 16-byte boundary -/// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack- -/// based allocation at compile time. The class can grow its memory -/// block at runtime if a suitable allocator is available. If size -/// grows beyond S and a suitable allocator is available, then the -/// statically allocated array is obsoleted. -/// \note This allocator can't be used with standard collections because -/// they require that all objects of the same allocator type are equivalent. -template , bool T_Align16 = false> -class FixedSizeAllocatorWithCleanup : public AllocatorBase -{ - // The body of FixedSizeAllocatorWithCleanup is provided in the two - // partial specializations that follow. The two specializations - // pivot on the boolean template parameter T_Align16. -}; - -/// \brief Static secure memory block with cleanup -/// \tparam T class or type -/// \tparam S fixed-size of the stack-based memory block, in elements -/// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack- -/// based allocation at compile time. The class can grow its memory -/// block at runtime if a suitable allocator is available. If size -/// grows beyond S and a suitable allocator is available, then the -/// statically allocated array is obsoleted. -/// \note This allocator can't be used with standard collections because -/// they require that all objects of the same allocator type are equivalent. -template -class FixedSizeAllocatorWithCleanup : public AllocatorBase -{ -public: - CRYPTOPP_INHERIT_ALLOCATOR_TYPES(T) - - /// \brief Constructs a FixedSizeAllocatorWithCleanup - FixedSizeAllocatorWithCleanup() : m_allocated(false) {} - - /// \brief Allocates a block of memory - /// \param size the count elements in the memory block - /// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack-based - /// allocation at compile time. If size is less than or equal to - /// S, then a pointer to the static array is returned. - /// \details The class can grow its memory block at runtime if a suitable - /// allocator is available. If size grows beyond S and a suitable - /// allocator is available, then the statically allocated array is - /// obsoleted. If a suitable allocator is not available, as with a - /// NullAllocator, then the function returns NULL and a runtime error - /// eventually occurs. - /// \sa reallocate(), SecBlockWithHint - pointer allocate(size_type size) - { - CRYPTOPP_ASSERT(IsAlignedOn(m_array, 8)); - - if (size <= S && !m_allocated) - { - m_allocated = true; - return GetAlignedArray(); - } - else - return m_fallbackAllocator.allocate(size); - } - - /// \brief Allocates a block of memory - /// \param size the count elements in the memory block - /// \param hint an unused hint - /// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack- - /// based allocation at compile time. If size is less than or equal to - /// S, then a pointer to the static array is returned. - /// \details The class can grow its memory block at runtime if a suitable - /// allocator is available. If size grows beyond S and a suitable - /// allocator is available, then the statically allocated array is - /// obsoleted. If a suitable allocator is not available, as with a - /// NullAllocator, then the function returns NULL and a runtime error - /// eventually occurs. - /// \sa reallocate(), SecBlockWithHint - pointer allocate(size_type size, const void *hint) - { - CRYPTOPP_ASSERT(IsAlignedOn(m_array, 8)); - - if (size <= S && !m_allocated) - { - m_allocated = true; - return GetAlignedArray(); - } - else - return m_fallbackAllocator.allocate(size, hint); - } - - /// \brief Deallocates a block of memory - /// \param ptr a pointer to the memory block to deallocate - /// \param size the count elements in the memory block - /// \details The memory block is wiped or zeroized before deallocation. - /// If the statically allocated memory block is active, then no - /// additional actions are taken after the wipe. - /// \details If a dynamic memory block is active, then the pointer and - /// size are passed to the allocator for deallocation. - void deallocate(void *ptr, size_type size) - { - // Avoid assert on pointer in deallocate. SecBlock regularly uses NULL - // pointers rather returning non-NULL 0-sized pointers. - if (ptr == GetAlignedArray()) - { - // If the m_allocated assert fires then the bit twiddling for - // GetAlignedArray() is probably incorrect for the platform. - // Be sure to check CRYPTOPP_ALIGN_DATA(8). The platform may - // not have a way to declaratively align data to 8. - CRYPTOPP_ASSERT(size <= S); - CRYPTOPP_ASSERT(m_allocated); - m_allocated = false; - SecureWipeArray(reinterpret_cast(ptr), size); - } - else - { - if (ptr) - m_fallbackAllocator.deallocate(ptr, size); - } - } - - /// \brief Reallocates a block of memory - /// \param oldPtr the previous allocation - /// \param oldSize the size of the previous allocation - /// \param newSize the new, requested size - /// \param preserve flag that indicates if the old allocation should - /// be preserved - /// \return pointer to the new memory block - /// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack- - /// based allocation at compile time. If size is less than or equal to - /// S, then a pointer to the static array is returned. - /// \details The class can grow its memory block at runtime if a suitable - /// allocator is available. If size grows beyond S and a suitable - /// allocator is available, then the statically allocated array is - /// obsoleted. If a suitable allocator is not available, as with a - /// NullAllocator, then the function returns NULL and a runtime error - /// eventually occurs. - /// \note size is the count of elements, and not the number of bytes. - /// \sa reallocate(), SecBlockWithHint - pointer reallocate(pointer oldPtr, size_type oldSize, size_type newSize, bool preserve) - { - if (oldPtr == GetAlignedArray() && newSize <= S) - { - CRYPTOPP_ASSERT(oldSize <= S); - if (oldSize > newSize) - SecureWipeArray(oldPtr+newSize, oldSize-newSize); - return oldPtr; - } - - pointer newPtr = allocate(newSize, NULLPTR); - if (preserve && newSize) - { - const size_type copySize = STDMIN(oldSize, newSize); - if (newPtr && oldPtr) // GCC analyzer warning - memcpy_s(newPtr, sizeof(T)*newSize, oldPtr, sizeof(T)*copySize); - } - deallocate(oldPtr, oldSize); - return newPtr; - } - - CRYPTOPP_CONSTEXPR size_type max_size() const - { - return STDMAX(m_fallbackAllocator.max_size(), S); - } - -private: - -#if CRYPTOPP_BOOL_ALIGN16 - - // There be demons here... We cannot use CRYPTOPP_ALIGN_DATA(16) - // because linkers on 32-bit machines and some 64-bit machines - // align the stack to 8-bytes or less, and not 16-bytes as - // requested. We can only count on a smaller alignment. All - // toolchains tested appear to honor CRYPTOPP_ALIGN_DATA(8). Also - // see http://stackoverflow.com/a/1468656/608639. - // - // The 16-byte alignment is achieved by padding the requested - // size with extra elements so we have at least 8-bytes of slack - // to work with. Then the array pointer is moved to achieve a - // 16-byte alignment. - // - // The additional 8-bytes introduces a small secondary issue. - // The secondary issue is, a large T results in 0 = 8/sizeof(T). - // The library is OK but users may hit it. So we need to guard - // for a large T, and that is what the enum and PAD achieves. - T* GetAlignedArray() { - - // m_array is aligned on 8 byte boundaries due to - // CRYPTOPP_ALIGN_DATA(8). If m_array%16 is 0, then the buffer - // is 16-byte aligned and nothing needs to be done. if - // m_array%16 is 8, then the buffer is not 16-byte aligned and - // we need to add 8. 8 has that nice symmetric property. - // - // If we needed to use CRYPTOPP_ALIGN_DATA(4) due to toolchain - // limitations, then the calculation would be slightly more - // costly: ptr = m_array + (16 - (m_array % 16)) % 16; - CRYPTOPP_ASSERT(IsAlignedOn(m_array, 8)); - int off = reinterpret_cast(m_array) % 16; - byte* ptr = reinterpret_cast(m_array) + off; - - // Verify the 16-byte alignment. This is the point - // of these extra gyrations. - CRYPTOPP_ASSERT(IsAlignedOn(ptr, 16)); - // Verify the lower bound. This is Issue 982/988. - CRYPTOPP_ASSERT( - reinterpret_cast(ptr) >= - reinterpret_cast(m_array) - ); - // Verify the upper bound. Allocated array with - // pad is large enough. - CRYPTOPP_ASSERT( - reinterpret_cast(ptr+S*sizeof(T)) <= - reinterpret_cast(m_array+(S+PAD)) - ); - - // void* to silence Clang warnings - return reinterpret_cast( - static_cast(ptr) - ); - } - - // PAD is elements, not bytes, and rounded up to ensure no overflow. - enum { Q = sizeof(T), PAD = (Q >= 8) ? 1 : (Q >= 4) ? 2 : (Q >= 2) ? 4 : 8 }; - // enum { Q = sizeof(T), PAD = (Q >= 16) ? 1 : (Q >= 8) ? 2 : (Q >= 4) ? 4 : (Q >= 2) ? 8 : 16 }; - CRYPTOPP_ALIGN_DATA(8) T m_array[S+PAD]; - -#else - - // CRYPTOPP_BOOL_ALIGN16 is 0. If we are here then the user - // probably compiled with CRYPTOPP_DISABLE_ASM. Normally we - // would use the natural alignment of T. The problem we are - // having is, some toolchains are changing the boundary for - // 64-bit arrays. 64-bit elements require 8-byte alignment, - // but the toolchain is laying the array out on a 4 byte - // boundary. See GH #992 for mystery alignment, - // https://github.com/weidai11/cryptopp/issues/992 - T* GetAlignedArray() {return m_array;} - CRYPTOPP_ALIGN_DATA(8) T m_array[S]; - -#endif - - A m_fallbackAllocator; - bool m_allocated; -}; - -/// \brief Static secure memory block with cleanup -/// \tparam T class or type -/// \tparam S fixed-size of the stack-based memory block, in elements -/// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack- -/// based allocation at compile time. The class can grow its memory -/// block at runtime if a suitable allocator is available. If size -/// grows beyond S and a suitable allocator is available, then the -/// statically allocated array is obsoleted. -/// \note This allocator can't be used with standard collections because -/// they require that all objects of the same allocator type are equivalent. -template -class FixedSizeAllocatorWithCleanup : public AllocatorBase -{ -public: - CRYPTOPP_INHERIT_ALLOCATOR_TYPES(T) - - /// \brief Constructs a FixedSizeAllocatorWithCleanup - FixedSizeAllocatorWithCleanup() : m_allocated(false) {} - - /// \brief Allocates a block of memory - /// \param size the count elements in the memory block - /// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack-based - /// allocation at compile time. If size is less than or equal to - /// S, then a pointer to the static array is returned. - /// \details The class can grow its memory block at runtime if a suitable - /// allocator is available. If size grows beyond S and a suitable - /// allocator is available, then the statically allocated array is - /// obsoleted. If a suitable allocator is not available, as with a - /// NullAllocator, then the function returns NULL and a runtime error - /// eventually occurs. - /// \sa reallocate(), SecBlockWithHint - pointer allocate(size_type size) - { - CRYPTOPP_ASSERT(IsAlignedOn(m_array, 8)); - - if (size <= S && !m_allocated) - { - m_allocated = true; - return GetAlignedArray(); - } - else - return m_fallbackAllocator.allocate(size); - } - - /// \brief Allocates a block of memory - /// \param size the count elements in the memory block - /// \param hint an unused hint - /// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack- - /// based allocation at compile time. If size is less than or equal to - /// S, then a pointer to the static array is returned. - /// \details The class can grow its memory block at runtime if a suitable - /// allocator is available. If size grows beyond S and a suitable - /// allocator is available, then the statically allocated array is - /// obsoleted. If a suitable allocator is not available, as with a - /// NullAllocator, then the function returns NULL and a runtime error - /// eventually occurs. - /// \sa reallocate(), SecBlockWithHint - pointer allocate(size_type size, const void *hint) - { - if (size <= S && !m_allocated) - { - m_allocated = true; - return GetAlignedArray(); - } - else - return m_fallbackAllocator.allocate(size, hint); - } - - /// \brief Deallocates a block of memory - /// \param ptr a pointer to the memory block to deallocate - /// \param size the count elements in the memory block - /// \details The memory block is wiped or zeroized before deallocation. - /// If the statically allocated memory block is active, then no - /// additional actions are taken after the wipe. - /// \details If a dynamic memory block is active, then the pointer and - /// size are passed to the allocator for deallocation. - void deallocate(void *ptr, size_type size) - { - // Avoid assert on pointer in deallocate. SecBlock regularly uses NULL - // pointers rather returning non-NULL 0-sized pointers. - if (ptr == GetAlignedArray()) - { - // If the m_allocated assert fires then - // something overwrote the flag. - CRYPTOPP_ASSERT(size <= S); - CRYPTOPP_ASSERT(m_allocated); - m_allocated = false; - SecureWipeArray((pointer)ptr, size); - } - else - { - if (ptr) - m_fallbackAllocator.deallocate(ptr, size); - m_allocated = false; - } - } - - /// \brief Reallocates a block of memory - /// \param oldPtr the previous allocation - /// \param oldSize the size of the previous allocation - /// \param newSize the new, requested size - /// \param preserve flag that indicates if the old allocation should - /// be preserved - /// \return pointer to the new memory block - /// \details FixedSizeAllocatorWithCleanup provides a fixed-size, stack- - /// based allocation at compile time. If size is less than or equal to - /// S, then a pointer to the static array is returned. - /// \details The class can grow its memory block at runtime if a suitable - /// allocator is available. If size grows beyond S and a suitable - /// allocator is available, then the statically allocated array is - /// obsoleted. If a suitable allocator is not available, as with a - /// NullAllocator, then the function returns NULL and a runtime error - /// eventually occurs. - /// \note size is the count of elements, and not the number of bytes. - /// \sa reallocate(), SecBlockWithHint - pointer reallocate(pointer oldPtr, size_type oldSize, size_type newSize, bool preserve) - { - if (oldPtr == GetAlignedArray() && newSize <= S) - { - CRYPTOPP_ASSERT(oldSize <= S); - if (oldSize > newSize) - SecureWipeArray(oldPtr+newSize, oldSize-newSize); - return oldPtr; - } - - pointer newPtr = allocate(newSize, NULLPTR); - if (preserve && newSize) - { - const size_type copySize = STDMIN(oldSize, newSize); - if (newPtr && oldPtr) // GCC analyzer warning - memcpy_s(newPtr, sizeof(T)*newSize, oldPtr, sizeof(T)*copySize); - } - deallocate(oldPtr, oldSize); - return newPtr; - } - - CRYPTOPP_CONSTEXPR size_type max_size() const - { - return STDMAX(m_fallbackAllocator.max_size(), S); - } - -private: - - // T_Align16 is false. Normally we would use the natural - // alignment of T. The problem we are having is, some toolchains - // are changing the boundary for 64-bit arrays. 64-bit elements - // require 8-byte alignment, but the toolchain is laying the array - // out on a 4 byte boundary. See GH #992 for mystery alignment, - // https://github.com/weidai11/cryptopp/issues/992 - T* GetAlignedArray() {return m_array;} - CRYPTOPP_ALIGN_DATA(8) T m_array[S]; - - A m_fallbackAllocator; - bool m_allocated; -}; - -/// \brief Secure memory block with allocator and cleanup -/// \tparam T a class or type -/// \tparam A AllocatorWithCleanup derived class for allocation and cleanup -/// \sa SecBlock -/// on the Crypto++ wiki. -/// \since Crypto++ 2.0 -template > -class SecBlock -{ -public: - typedef typename A::value_type value_type; - typedef typename A::pointer iterator; - typedef typename A::const_pointer const_iterator; - typedef typename A::size_type size_type; - - /// \brief Returns the maximum number of elements the block can hold - /// \details ELEMS_MAX is the maximum number of elements the - /// SecBlock can hold. The value of ELEMS_MAX is - /// SIZE_MAX/sizeof(T). std::numeric_limits was avoided - /// due to lack of constexpr-ness in C++03 and below. - /// \note In C++03 and below ELEMS_MAX is a static data member of type - /// size_type. In C++11 and above ELEMS_MAX is an enum - /// inheriting from size_type. In both cases ELEMS_MAX can be - /// used before objects are fully constructed, and it does not suffer the - /// limitations of class methods like max_size. - /// \sa Issue 346/CVE-2016-9939 - /// \since Crypto++ 6.0 -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) - static const size_type ELEMS_MAX = ...; -#elif defined(CRYPTOPP_MSC_VERSION) && (CRYPTOPP_MSC_VERSION <= 1400) - static const size_type ELEMS_MAX = (~(size_type)0)/sizeof(T); -#elif defined(CRYPTOPP_CXX11_STRONG_ENUM) - enum : size_type {ELEMS_MAX = A::ELEMS_MAX}; -#else - static const size_type ELEMS_MAX = SIZE_MAX/sizeof(T); -#endif - - /// \brief Construct a SecBlock with space for size elements. - /// \param size the size of the allocation, in elements - /// \throw std::bad_alloc - /// \details The elements are not initialized. - /// \since Crypto++ 2.0 - /// \note size is the count of elements, and not the number of bytes - explicit SecBlock(size_type size=0) - : m_mark(ELEMS_MAX), m_size(size), m_ptr(m_alloc.allocate(size, NULLPTR)) { } - - /// \brief Copy construct a SecBlock from another SecBlock - /// \param t the other SecBlock - /// \throw std::bad_alloc - /// \since Crypto++ 2.0 - SecBlock(const SecBlock &t) - : m_mark(t.m_mark), m_size(t.m_size), m_ptr(m_alloc.allocate(t.m_size, NULLPTR)) { - CRYPTOPP_ASSERT((!t.m_ptr && !m_size) || (t.m_ptr && m_size)); - if (m_ptr && t.m_ptr) - memcpy_s(m_ptr, m_size*sizeof(T), t.m_ptr, t.m_size*sizeof(T)); - } - - /// \brief Construct a SecBlock from an array of elements. - /// \param ptr a pointer to an array of T - /// \param len the number of elements in the memory block - /// \throw std::bad_alloc - /// \details If ptr!=NULL and len!=0, then the block is initialized from the pointer - /// ptr. If ptr==NULL and len!=0, then the block is initialized to 0. - /// Otherwise, the block is empty and not initialized. - /// \since Crypto++ 2.0 - /// \note size is the count of elements, and not the number of bytes - SecBlock(const T *ptr, size_type len) - : m_mark(ELEMS_MAX), m_size(len), m_ptr(m_alloc.allocate(len, NULLPTR)) { - CRYPTOPP_ASSERT((!m_ptr && !m_size) || (m_ptr && m_size)); - if (m_ptr && ptr) - memcpy_s(m_ptr, m_size*sizeof(T), ptr, len*sizeof(T)); - else if (m_ptr && m_size) - std::memset(m_ptr, 0, m_size*sizeof(T)); - } - - ~SecBlock() - {m_alloc.deallocate(m_ptr, STDMIN(m_size, m_mark));} - -#ifdef __BORLANDC__ - /// \brief Cast operator - /// \return block pointer cast to non-const T * - /// \since Crypto++ 2.0 - operator T *() const - {return (T*)m_ptr;} -#else - /// \brief Cast operator - /// \return block pointer cast to const void * - /// \since Crypto++ 2.0 - operator const void *() const - {return m_ptr;} - - /// \brief Cast operator - /// \return block pointer cast to non-const void * - /// \since Crypto++ 2.0 - operator void *() - {return m_ptr;} - - /// \brief Cast operator - /// \return block pointer cast to const T * - /// \since Crypto++ 2.0 - operator const T *() const - {return m_ptr;} - - /// \brief Cast operator - /// \return block pointer cast to non-const T * - /// \since Crypto++ 2.0 - operator T *() - {return m_ptr;} -#endif - - /// \brief Provides an iterator pointing to the first element in the memory block - /// \return iterator pointing to the first element in the memory block - /// \since Crypto++ 2.0 - iterator begin() - {return m_ptr;} - /// \brief Provides a constant iterator pointing to the first element in the memory block - /// \return constant iterator pointing to the first element in the memory block - /// \since Crypto++ 2.0 - const_iterator begin() const - {return m_ptr;} - /// \brief Provides an iterator pointing beyond the last element in the memory block - /// \return iterator pointing beyond the last element in the memory block - /// \since Crypto++ 2.0 - iterator end() - {return m_ptr+m_size;} - /// \brief Provides a constant iterator pointing beyond the last element in the memory block - /// \return constant iterator pointing beyond the last element in the memory block - /// \since Crypto++ 2.0 - const_iterator end() const - {return m_ptr+m_size;} - - /// \brief Provides a pointer to the first element in the memory block - /// \return pointer to the first element in the memory block - /// \since Crypto++ 2.0 - typename A::pointer data() {return m_ptr;} - /// \brief Provides a pointer to the first element in the memory block - /// \return constant pointer to the first element in the memory block - /// \since Crypto++ 2.0 - typename A::const_pointer data() const {return m_ptr;} - - /// \brief Provides the count of elements in the SecBlock - /// \return number of elements in the memory block - /// \note the return value is the count of elements, and not the number of bytes - /// \since Crypto++ 2.0 - size_type size() const {return m_size;} - /// \brief Determines if the SecBlock is empty - /// \return true if number of elements in the memory block is 0, false otherwise - /// \since Crypto++ 2.0 - bool empty() const {return m_size == 0;} - - /// \brief Provides a byte pointer to the first element in the memory block - /// \return byte pointer to the first element in the memory block - /// \since Crypto++ 2.0 - byte * BytePtr() {return (byte *)m_ptr;} - /// \brief Return a byte pointer to the first element in the memory block - /// \return constant byte pointer to the first element in the memory block - /// \since Crypto++ 2.0 - const byte * BytePtr() const {return (const byte *)m_ptr;} - /// \brief Provides the number of bytes in the SecBlock - /// \return the number of bytes in the memory block - /// \note the return value is the number of bytes, and not count of elements. - /// \since Crypto++ 2.0 - size_type SizeInBytes() const {return m_size*sizeof(T);} - - /// \brief Set contents and size from an array - /// \param ptr a pointer to an array of T - /// \param len the number of elements in the memory block - /// \details The array pointed to by ptr must be distinct - /// from this SecBlock because Assign() calls New() and then std::memcpy(). - /// The call to New() will invalidate all pointers and iterators, like - /// the pointer returned from data(). - /// \details If the memory block is reduced in size, then the reclaimed - /// memory is set to 0. If an assignment occurs, then Assign() resets - /// the element count after the previous block is zeroized. - /// \since Crypto++ 2.0 - void Assign(const T *ptr, size_type len) - { - New(len); - if (m_ptr && ptr) // GCC analyzer warning - memcpy_s(m_ptr, m_size*sizeof(T), ptr, len*sizeof(T)); - m_mark = ELEMS_MAX; - } - - /// \brief Set contents from a value - /// \param count the number of values to copy - /// \param value the value, repeated count times - /// \details If the memory block is reduced in size, then the reclaimed - /// memory is set to 0. If an assignment occurs, then Assign() resets - /// the element count after the previous block is zeroized. - /// \since Crypto++ 6.0 - void Assign(size_type count, T value) - { - New(count); - for (size_t i=0; i &t) - { - if (this != &t) - { - New(t.m_size); - if (m_ptr && t.m_ptr) // GCC analyzer warning - memcpy_s(m_ptr, m_size*sizeof(T), t, t.m_size*sizeof(T)); - } - m_mark = ELEMS_MAX; - } - - /// \brief Append contents from an array - /// \param ptr a pointer to an array of T - /// \param len the number of elements in the memory block - /// \throw InvalidArgument if resulting size would overflow - /// \details The array pointed to by ptr must be distinct - /// from this SecBlock because Append() calls Grow() and then std::memcpy(). - /// The call to Grow() will invalidate all pointers and iterators, like - /// the pointer returned from data(). - /// \details Append() may be less efficient than a ByteQueue because - /// Append() must Grow() the internal array and then copy elements. - /// The ByteQueue can copy elements without growing. - /// \sa ByteQueue - /// \since Crypto++ 8.6 - void Append(const T *ptr, size_type len) - { - if (ELEMS_MAX - m_size < len) - throw InvalidArgument("SecBlock: buffer overflow"); - - const size_type oldSize = m_size; - Grow(m_size+len); - if (m_ptr && ptr) // GCC analyzer warning - memcpy_s(m_ptr+oldSize, (m_size-oldSize)*sizeof(T), ptr, len*sizeof(T)); - m_mark = ELEMS_MAX; - } - - /// \brief Append contents from another SecBlock - /// \param t the other SecBlock - /// \throw InvalidArgument if resulting size would overflow - /// \details Internally, this SecBlock calls Grow() and then appends t. - /// \details Append() may be less efficient than a ByteQueue because - /// Append() must Grow() the internal array and then copy elements. - /// The ByteQueue can copy elements without growing. - /// \sa ByteQueue - /// \since Crypto++ 8.6 - void Append(const SecBlock &t) - { - if (ELEMS_MAX - m_size < t.m_size) - throw InvalidArgument("SecBlock: buffer overflow"); - - const size_type oldSize = m_size; - if (this != &t) // s += t - { - Grow(m_size+t.m_size); - if (m_ptr && t.m_ptr) // GCC analyzer warning - memcpy_s(m_ptr+oldSize, (m_size-oldSize)*sizeof(T), t.m_ptr, t.m_size*sizeof(T)); - } - else // t += t - { - Grow(m_size*2); - if (m_ptr) // GCC analyzer warning - memmove_s(m_ptr+oldSize, (m_size-oldSize)*sizeof(T), m_ptr, oldSize*sizeof(T)); - } - m_mark = ELEMS_MAX; - } - - /// \brief Append contents from a value - /// \param count the number of values to copy - /// \param value the value, repeated count times - /// \throw InvalidArgument if resulting size would overflow - /// \details Internally, this SecBlock calls Grow() and then appends value. - /// \details Append() may be less efficient than a ByteQueue because - /// Append() must Grow() the internal array and then copy elements. - /// The ByteQueue can copy elements without growing. - /// \sa ByteQueue - /// \since Crypto++ 8.6 - void Append(size_type count, T value) - { - if (ELEMS_MAX - m_size < count) - throw InvalidArgument("SecBlock: buffer overflow"); - - const size_type oldSize = m_size; - Grow(m_size+count); - for (size_t i=oldSize; icount controls the number of - /// elements zeroized, which can be less than size or 0. - /// \details An internal variable, m_mark, is initialized to the maximum number - /// of elements. The maximum number of elements is ELEMS_MAX. Deallocation - /// triggers a zeroization, and the number of elements zeroized is - /// STDMIN(m_size, m_mark). After zeroization, the memory is returned to the - /// system. - /// \details The ASN.1 decoder uses SetMark() to set the element count to 0 - /// before throwing an exception. In this case, the attacker provides a large - /// BER encoded length (say 64MB) but only a small number of content octets - /// (say 16). If the allocator zeroized all 64MB, then a transient DoS could - /// occur as CPU cycles are spent zeroizing uninitialized memory. - /// \details Generally speaking, any operation which changes the size of the SecBlock - /// results in the mark being reset to ELEMS_MAX. In particular, if Assign(), - /// New(), Grow(), CleanNew(), CleanGrow() are called, then the count is reset to - /// ELEMS_MAX. The list is not exhaustive. - /// \since Crypto++ 6.0 - /// \sa Issue 346/CVE-2016-9939 - void SetMark(size_t count) {m_mark = count;} - - /// \brief Assign contents from another SecBlock - /// \param t the other SecBlock - /// \return reference to this SecBlock - /// \details Internally, operator=() calls Assign(). - /// \details If the memory block is reduced in size, then the reclaimed - /// memory is set to 0. If an assignment occurs, then Assign() resets - /// the element count after the previous block is zeroized. - /// \since Crypto++ 2.0 - SecBlock& operator=(const SecBlock &t) - { - // Assign guards for self-assignment - Assign(t); - return *this; - } - - /// \brief Append contents from another SecBlock - /// \param t the other SecBlock - /// \return reference to this SecBlock - /// \details Internally, operator+=() calls Append(). - /// \since Crypto++ 2.0 - SecBlock& operator+=(const SecBlock &t) - { - // Append guards for overflow - Append(t); - return *this; - } - - /// \brief Construct a SecBlock from this and another SecBlock - /// \param t the other SecBlock - /// \return a newly constructed SecBlock that is a concatenation of this - /// and t. - /// \details Internally, a new SecBlock is created from this and a - /// concatenation of t. - /// \since Crypto++ 2.0 - SecBlock operator+(const SecBlock &t) - { - CRYPTOPP_ASSERT((!m_ptr && !m_size) || (m_ptr && m_size)); - CRYPTOPP_ASSERT((!t.m_ptr && !t.m_size) || (t.m_ptr && t.m_size)); - if(!t.m_size) return SecBlock(*this); - - SecBlock result(m_size+t.m_size); - if (m_size) - memcpy_s(result.m_ptr, result.m_size*sizeof(T), m_ptr, m_size*sizeof(T)); - if (result.m_ptr && t.m_ptr) // GCC analyzer warning - memcpy_s(result.m_ptr+m_size, (result.m_size-m_size)*sizeof(T), t.m_ptr, t.m_size*sizeof(T)); - return result; - } - - /// \brief Bitwise compare two SecBlocks - /// \param t the other SecBlock - /// \return true if the size and bits are equal, false otherwise - /// \details Uses a constant time compare if the arrays are equal size. - /// The constant time compare is VerifyBufsEqual() found in - /// misc.h. - /// \sa operator!=() - /// \since Crypto++ 2.0 - bool operator==(const SecBlock &t) const - { - return m_size == t.m_size && VerifyBufsEqual( - reinterpret_cast(m_ptr), - reinterpret_cast(t.m_ptr), m_size*sizeof(T)); - } - - /// \brief Bitwise compare two SecBlocks - /// \param t the other SecBlock - /// \return true if the size and bits are equal, false otherwise - /// \details Uses a constant time compare if the arrays are equal size. - /// The constant time compare is VerifyBufsEqual() found in - /// misc.h. - /// \details Internally, operator!=() returns the inverse of operator==(). - /// \sa operator==() - /// \since Crypto++ 2.0 - bool operator!=(const SecBlock &t) const - { - return !operator==(t); - } - - /// \brief Change size without preserving contents - /// \param newSize the new size of the memory block - /// \details Old content is not preserved. If the memory block is - /// reduced in size, then the reclaimed content is set to 0. If the - /// memory block grows in size, then the new memory is initialized - /// to 0. New() resets the element count after the previous block - /// is zeroized. - /// \details Internally, this SecBlock calls reallocate(). - /// \sa New(), CleanNew(), Grow(), CleanGrow(), resize() - /// \since Crypto++ 2.0 - void New(size_type newSize) - { - m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, false); - m_size = newSize; - m_mark = ELEMS_MAX; - } - - /// \brief Change size without preserving contents - /// \param newSize the new size of the memory block - /// \details Old content is not preserved. If the memory block is - /// reduced in size, then the reclaimed content is set to 0. If the - /// memory block grows in size, then the new memory is initialized - /// to 0. CleanNew() resets the element count after the previous - /// block is zeroized. - /// \details Internally, this SecBlock calls New(). - /// \sa New(), CleanNew(), Grow(), CleanGrow(), resize() - /// \since Crypto++ 2.0 - void CleanNew(size_type newSize) - { - New(newSize); - if (m_ptr) {memset_z(m_ptr, 0, m_size*sizeof(T));} - m_mark = ELEMS_MAX; - } - - /// \brief Change size and preserve contents - /// \param newSize the new size of the memory block - /// \details Old content is preserved. New content is not initialized. - /// \details Internally, this SecBlock calls reallocate() when size must - /// increase. If the size does not increase, then CleanGrow() does not - /// take action. If the size must change, then use resize(). CleanGrow() - /// resets the element count after the previous block is zeroized. - /// \sa New(), CleanNew(), Grow(), CleanGrow(), resize() - /// \sa New(), CleanNew(), Grow(), CleanGrow(), resize() - /// \since Crypto++ 2.0 - void Grow(size_type newSize) - { - if (newSize > m_size) - { - m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, true); - m_size = newSize; - } - m_mark = ELEMS_MAX; - } - - /// \brief Change size and preserve contents - /// \param newSize the new size of the memory block - /// \details Old content is preserved. New content is initialized to 0. - /// \details Internally, this SecBlock calls reallocate() when size must - /// increase. If the size does not increase, then CleanGrow() does not - /// take action. If the size must change, then use resize(). CleanGrow() - /// resets the element count after the previous block is zeroized. - /// \sa New(), CleanNew(), Grow(), CleanGrow(), resize() - /// \since Crypto++ 2.0 - void CleanGrow(size_type newSize) - { - if (newSize > m_size) - { - m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, true); - memset_z(m_ptr+m_size, 0, (newSize-m_size)*sizeof(T)); - m_size = newSize; - } - m_mark = ELEMS_MAX; - } - - /// \brief Change size and preserve contents - /// \param newSize the new size of the memory block - /// \details Old content is preserved. If the memory block grows in size, then - /// new memory is not initialized. resize() resets the element count after - /// the previous block is zeroized. - /// \details Internally, this SecBlock calls reallocate(). - /// \sa New(), CleanNew(), Grow(), CleanGrow(), resize() - /// \since Crypto++ 2.0 - void resize(size_type newSize) - { - m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, true); - m_size = newSize; - m_mark = ELEMS_MAX; - } - - /// \brief Swap contents with another SecBlock - /// \param b the other SecBlock - /// \details Internally, std::swap() is called on m_alloc, m_size and m_ptr. - /// \since Crypto++ 2.0 - void swap(SecBlock &b) - { - // Swap must occur on the allocator in case its FixedSize that spilled into the heap. - std::swap(m_alloc, b.m_alloc); - std::swap(m_mark, b.m_mark); - std::swap(m_size, b.m_size); - std::swap(m_ptr, b.m_ptr); - } - -protected: - A m_alloc; - size_type m_mark, m_size; - T *m_ptr; -}; - -#ifdef CRYPTOPP_DOXYGEN_PROCESSING -/// \brief \ref SecBlock "SecBlock" typedef. -class SecByteBlock : public SecBlock {}; -/// \brief \ref SecBlock "SecBlock" typedef. -class SecWordBlock : public SecBlock {}; -/// \brief SecBlock using \ref AllocatorWithCleanup "AllocatorWithCleanup" typedef -class AlignedSecByteBlock : public SecBlock > {}; -#else -typedef SecBlock SecByteBlock; -typedef SecBlock SecWordBlock; -typedef SecBlock > AlignedSecByteBlock; -#endif - -// No need for move semantics on derived class *if* the class does not add any -// data members; see http://stackoverflow.com/q/31755703, and Rule of {0|3|5}. - -/// \brief Fixed size stack-based SecBlock -/// \tparam T class or type -/// \tparam S fixed-size of the stack-based memory block, in elements -/// \tparam A AllocatorBase derived class for allocation and cleanup -template > -class FixedSizeSecBlock : public SecBlock -{ -public: - /// \brief Construct a FixedSizeSecBlock - explicit FixedSizeSecBlock() : SecBlock(S) {} -}; - -/// \brief Fixed size stack-based SecBlock with 16-byte alignment -/// \tparam T class or type -/// \tparam S fixed-size of the stack-based memory block, in elements -/// \tparam T_Align16 boolean that determines whether allocations should be -/// aligned on a 16-byte boundary -template -class FixedSizeAlignedSecBlock : public FixedSizeSecBlock, T_Align16> > -{ -}; - -/// \brief Stack-based SecBlock that grows into the heap -/// \tparam T class or type -/// \tparam S fixed-size of the stack-based memory block, in elements -/// \tparam A AllocatorBase derived class for allocation and cleanup -template > > -class SecBlockWithHint : public SecBlock -{ -public: - /// construct a SecBlockWithHint with a count of elements - explicit SecBlockWithHint(size_t size) : SecBlock(size) {} -}; - -template -inline bool operator==(const CryptoPP::AllocatorWithCleanup&, const CryptoPP::AllocatorWithCleanup&) {return (true);} -template -inline bool operator!=(const CryptoPP::AllocatorWithCleanup&, const CryptoPP::AllocatorWithCleanup&) {return (false);} - -NAMESPACE_END - -NAMESPACE_BEGIN(std) - -/// \brief Swap two SecBlocks -/// \tparam T class or type -/// \tparam A AllocatorBase derived class for allocation and cleanup -/// \param a the first SecBlock -/// \param b the second SecBlock -template -inline void swap(CryptoPP::SecBlock &a, CryptoPP::SecBlock &b) -{ - a.swap(b); -} - -#if defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) || (defined(_STLPORT_VERSION) && !defined(_STLP_MEMBER_TEMPLATE_CLASSES)) -// working for STLport 5.1.3 and MSVC 6 SP5 -template -inline CryptoPP::AllocatorWithCleanup<_Tp2>& -__stl_alloc_rebind(CryptoPP::AllocatorWithCleanup<_Tp1>& __a, const _Tp2*) -{ - return (CryptoPP::AllocatorWithCleanup<_Tp2>&)(__a); -} -#endif - -NAMESPACE_END - -#if defined(CRYPTOPP_MSC_VERSION) -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/secblockfwd.h b/third_party/cryptoppwin/include/cryptopp/secblockfwd.h deleted file mode 100644 index 2d68c41e..00000000 --- a/third_party/cryptoppwin/include/cryptopp/secblockfwd.h +++ /dev/null @@ -1,29 +0,0 @@ -// secblockfwd.h - written and placed in the public domain by Jeffrey Walton - -/// \file secblockfwd.h -/// \brief Forward declarations for SecBlock -/// \details secblock.h and misc.h have a circular dependency. secblockfwd.h -/// allows the library to sidestep the circular dependency, and reference -/// SecBlock classes without the full implementation. -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_SECBLOCKFWD_H -#define CRYPTOPP_SECBLOCKFWD_H - -#include "config.h" - -NAMESPACE_BEGIN(CryptoPP) - -template -class SecBlock; - -template -class AllocatorWithCleanup; - -typedef SecBlock > SecByteBlock; -typedef SecBlock > SecWordBlock; -typedef SecBlock > AlignedSecByteBlock; - -NAMESPACE_END - -#endif // CRYPTOPP_SECBLOCKFWD_H diff --git a/third_party/cryptoppwin/include/cryptopp/seckey.h b/third_party/cryptoppwin/include/cryptopp/seckey.h deleted file mode 100644 index 2fc6bedc..00000000 --- a/third_party/cryptoppwin/include/cryptopp/seckey.h +++ /dev/null @@ -1,444 +0,0 @@ -// seckey.h - originally written and placed in the public domain by Wei Dai - -/// \file seckey.h -/// \brief Classes and functions for implementing secret key algorithms. - -#ifndef CRYPTOPP_SECKEY_H -#define CRYPTOPP_SECKEY_H - -#include "config.h" -#include "cryptlib.h" -#include "misc.h" -#include "simple.h" -#include "stdcpp.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4189 4296) -#endif - -// Issue 340 -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wconversion" -# pragma GCC diagnostic ignored "-Wsign-conversion" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Inverts the cipher's direction -/// \param dir the cipher's direction -/// \return DECRYPTION if \ref CipherDir "dir" is ENCRYPTION, DECRYPTION otherwise -inline CipherDir ReverseCipherDir(CipherDir dir) -{ - return (dir == ENCRYPTION) ? DECRYPTION : ENCRYPTION; -} - -/// \brief Inherited by algorithms with fixed block size -/// \tparam N the blocksize of the algorithm -template -class FixedBlockSize -{ -public: - /// \brief The block size of the algorithm provided as a constant. - CRYPTOPP_CONSTANT(BLOCKSIZE = N); -}; - -// ************** rounds *************** - -/// \brief Inherited by algorithms with fixed number of rounds -/// \tparam R the number of rounds used by the algorithm -template -class FixedRounds -{ -public: - /// \brief The number of rounds for the algorithm provided as a constant. - CRYPTOPP_CONSTANT(ROUNDS = R); -}; - -/// \brief Inherited by algorithms with variable number of rounds -/// \tparam D Default number of rounds -/// \tparam N Minimum number of rounds -/// \tparam M Maximum number of rounds -template // use INT_MAX here because enums are treated as signed ints -class VariableRounds -{ -public: - /// \brief The default number of rounds for the algorithm provided as a constant. - CRYPTOPP_CONSTANT(DEFAULT_ROUNDS = D); - /// \brief The minimum number of rounds for the algorithm provided as a constant. - CRYPTOPP_CONSTANT(MIN_ROUNDS = N); - /// \brief The maximum number of rounds for the algorithm provided as a constant. - CRYPTOPP_CONSTANT(MAX_ROUNDS = M); - /// \brief The default number of rounds for the algorithm based on key length - /// provided by a static function. - /// \param keylength the size of the key, in bytes - /// \details keylength is unused in the default implementation. - CRYPTOPP_STATIC_CONSTEXPR unsigned int StaticGetDefaultRounds(size_t keylength) - { - return CRYPTOPP_UNUSED(keylength), static_cast(DEFAULT_ROUNDS); - } - -protected: - /// \brief Validates the number of rounds for an algorithm. - /// \param rounds the candidate number of rounds - /// \param alg an Algorithm object used if the number of rounds are invalid - /// \throw InvalidRounds if the number of rounds are invalid - /// \details ThrowIfInvalidRounds() validates the number of rounds and throws if invalid. - inline void ThrowIfInvalidRounds(int rounds, const Algorithm *alg) - { - if (M == INT_MAX) // Coverity and result_independent_of_operands - { - if (rounds < MIN_ROUNDS) - throw InvalidRounds(alg ? alg->AlgorithmName() : std::string("VariableRounds"), rounds); - } - else - { - if (rounds < MIN_ROUNDS || rounds > MAX_ROUNDS) - throw InvalidRounds(alg ? alg->AlgorithmName() : std::string("VariableRounds"), rounds); - } - } - - /// \brief Validates the number of rounds for an algorithm - /// \param param the candidate number of rounds - /// \param alg an Algorithm object used if the number of rounds are invalid - /// \return the number of rounds for the algorithm - /// \throw InvalidRounds if the number of rounds are invalid - /// \details GetRoundsAndThrowIfInvalid() validates the number of rounds and throws if invalid. - inline unsigned int GetRoundsAndThrowIfInvalid(const NameValuePairs ¶m, const Algorithm *alg) - { - int rounds = param.GetIntValueWithDefault("Rounds", DEFAULT_ROUNDS); - ThrowIfInvalidRounds(rounds, alg); - return static_cast(rounds); - } -}; - -// ************** key length *************** - -/// \brief Inherited by keyed algorithms with fixed key length -/// \tparam N Default key length, in bytes -/// \tparam IV_REQ the \ref SimpleKeyingInterface::IV_Requirement "IV requirements" -/// \tparam IV_L default IV length, in bytes -/// \sa SimpleKeyingInterface -template -class FixedKeyLength -{ -public: - /// \brief The default key length used by the algorithm provided as a constant - /// \details KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(KEYLENGTH=N); - /// \brief The minimum key length used by the algorithm provided as a constant - /// \details MIN_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(MIN_KEYLENGTH=N); - /// \brief The maximum key length used by the algorithm provided as a constant - /// \details MAX_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(MAX_KEYLENGTH=N); - /// \brief The default key length used by the algorithm provided as a constant - /// \details DEFAULT_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH=N); - /// \brief The default IV requirements for the algorithm provided as a constant - /// \details The default value is NOT_RESYNCHRONIZABLE. See IV_Requirement - /// in cryptlib.h for allowed values. - CRYPTOPP_CONSTANT(IV_REQUIREMENT = IV_REQ); - /// \brief The default IV length used by the algorithm provided as a constant - /// \details IV_LENGTH is provided in bytes, not bits. The default implementation uses 0. - CRYPTOPP_CONSTANT(IV_LENGTH = IV_L); - /// \brief The default key length for the algorithm provided by a static function. - /// \param keylength the size of the key, in bytes - /// \details The default implementation returns KEYLENGTH. keylength is unused - /// in the default implementation. - CRYPTOPP_STATIC_CONSTEXPR size_t CRYPTOPP_API StaticGetValidKeyLength(size_t keylength) - { - return CRYPTOPP_UNUSED(keylength), static_cast(KEYLENGTH); - } -}; - -/// \brief Inherited by keyed algorithms with variable key length -/// \tparam D Default key length, in bytes -/// \tparam N Minimum key length, in bytes -/// \tparam M Maximum key length, in bytes -/// \tparam Q Default key length multiple, in bytes. The default multiple is 1. -/// \tparam IV_REQ the \ref SimpleKeyingInterface::IV_Requirement "IV requirements" -/// \tparam IV_L default IV length, in bytes. The default length is 0. -/// \sa SimpleKeyingInterface -template -class VariableKeyLength -{ - // Make these private to avoid Doxygen documenting them in all derived classes - CRYPTOPP_COMPILE_ASSERT(Q > 0); - CRYPTOPP_COMPILE_ASSERT(N % Q == 0); - CRYPTOPP_COMPILE_ASSERT(M % Q == 0); - CRYPTOPP_COMPILE_ASSERT(N < M); - CRYPTOPP_COMPILE_ASSERT(D >= N); - CRYPTOPP_COMPILE_ASSERT(M >= D); - -public: - /// \brief The minimum key length used by the algorithm provided as a constant - /// \details MIN_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(MIN_KEYLENGTH=N); - /// \brief The maximum key length used by the algorithm provided as a constant - /// \details MAX_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(MAX_KEYLENGTH=M); - /// \brief The default key length used by the algorithm provided as a constant - /// \details DEFAULT_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH=D); - /// \brief The key length multiple used by the algorithm provided as a constant - /// \details MAX_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(KEYLENGTH_MULTIPLE=Q); - /// \brief The default IV requirements for the algorithm provided as a constant - /// \details The default value is NOT_RESYNCHRONIZABLE. See IV_Requirement - /// in cryptlib.h for allowed values. - CRYPTOPP_CONSTANT(IV_REQUIREMENT=IV_REQ); - /// \brief The default initialization vector length for the algorithm provided as a constant - /// \details IV_LENGTH is provided in bytes, not bits. The default implementation uses 0. - CRYPTOPP_CONSTANT(IV_LENGTH=IV_L); - /// \brief Provides a valid key length for the algorithm provided by a static function. - /// \param keylength the size of the key, in bytes - /// \details If keylength is less than MIN_KEYLENGTH, then the function returns - /// MIN_KEYLENGTH. If keylength is greater than MAX_KEYLENGTH, then the function - /// returns MAX_KEYLENGTH. If keylength is a multiple of KEYLENGTH_MULTIPLE, - /// then keylength is returned. Otherwise, the function returns keylength rounded - /// \a down to the next smaller multiple of KEYLENGTH_MULTIPLE. - /// \details keylength is provided in bytes, not bits. - CRYPTOPP_STATIC_CONSTEXPR size_t CRYPTOPP_API StaticGetValidKeyLength(size_t keylength) - { - return (keylength <= N) ? N : - (keylength >= M) ? M : - (keylength+Q-1) - (keylength+Q-1)%Q; - } -}; - -/// \brief Provides key lengths based on another class's key length -/// \tparam T another FixedKeyLength or VariableKeyLength class -/// \tparam IV_REQ the \ref SimpleKeyingInterface::IV_Requirement "IV requirements" -/// \tparam IV_L default IV length, in bytes -/// \sa SimpleKeyingInterface -template -class SameKeyLengthAs -{ -public: - /// \brief The minimum key length used by the algorithm provided as a constant - /// \details MIN_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(MIN_KEYLENGTH=T::MIN_KEYLENGTH); - /// \brief The maximum key length used by the algorithm provided as a constant - /// \details MIN_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(MAX_KEYLENGTH=T::MAX_KEYLENGTH); - /// \brief The default key length used by the algorithm provided as a constant - /// \details MIN_KEYLENGTH is provided in bytes, not bits - CRYPTOPP_CONSTANT(DEFAULT_KEYLENGTH=T::DEFAULT_KEYLENGTH); - /// \brief The default IV requirements for the algorithm provided as a constant - /// \details The default value is NOT_RESYNCHRONIZABLE. See IV_Requirement - /// in cryptlib.h for allowed values. - CRYPTOPP_CONSTANT(IV_REQUIREMENT=IV_REQ); - /// \brief The default initialization vector length for the algorithm provided as a constant - /// \details IV_LENGTH is provided in bytes, not bits. The default implementation uses 0. - CRYPTOPP_CONSTANT(IV_LENGTH=IV_L); - /// \brief Provides a valid key length for the algorithm provided by a static function. - /// \param keylength the size of the key, in bytes - /// \details If keylength is less than MIN_KEYLENGTH, then the function returns - /// MIN_KEYLENGTH. If keylength is greater than MAX_KEYLENGTH, then the function - /// returns MAX_KEYLENGTH. If keylength is a multiple of KEYLENGTH_MULTIPLE, - /// then keylength is returned. Otherwise, the function returns keylength rounded - /// \a down to the next smaller multiple of KEYLENGTH_MULTIPLE. - /// \details keylength is provided in bytes, not bits. - CRYPTOPP_STATIC_CONSTEXPR size_t CRYPTOPP_API StaticGetValidKeyLength(size_t keylength) - {return T::StaticGetValidKeyLength(keylength);} -}; - -// ************** implementation helper for SimpleKeyingInterface *************** - -/// \brief Provides a base implementation of SimpleKeyingInterface -/// \tparam BASE a SimpleKeyingInterface derived class -/// \tparam INFO a SimpleKeyingInterface derived class -/// \details SimpleKeyingInterfaceImpl() provides a default implementation for ciphers providing a keying interface. -/// Functions are virtual and not eligible for C++11 constexpr-ness. -/// \sa Algorithm(), SimpleKeyingInterface() -template -class CRYPTOPP_NO_VTABLE SimpleKeyingInterfaceImpl : public BASE -{ -public: - /// \brief The minimum key length used by the algorithm - /// \return minimum key length used by the algorithm, in bytes - size_t MinKeyLength() const - {return INFO::MIN_KEYLENGTH;} - - /// \brief The maximum key length used by the algorithm - /// \return maximum key length used by the algorithm, in bytes - size_t MaxKeyLength() const - {return static_cast(INFO::MAX_KEYLENGTH);} - - /// \brief The default key length used by the algorithm - /// \return default key length used by the algorithm, in bytes - size_t DefaultKeyLength() const - {return INFO::DEFAULT_KEYLENGTH;} - - /// \brief Provides a valid key length for the algorithm - /// \param keylength the size of the key, in bytes - /// \return the valid key length, in bytes - /// \details keylength is provided in bytes, not bits. If keylength is less than MIN_KEYLENGTH, - /// then the function returns MIN_KEYLENGTH. If keylength is greater than MAX_KEYLENGTH, - /// then the function returns MAX_KEYLENGTH. if If keylength is a multiple of KEYLENGTH_MULTIPLE, - /// then keylength is returned. Otherwise, the function returns a \a lower multiple of - /// KEYLENGTH_MULTIPLE. - size_t GetValidKeyLength(size_t keylength) const {return INFO::StaticGetValidKeyLength(keylength);} - - /// \brief The default IV requirements for the algorithm - /// \details The default value is NOT_RESYNCHRONIZABLE. See IV_Requirement - /// in cryptlib.h for allowed values. - SimpleKeyingInterface::IV_Requirement IVRequirement() const - {return static_cast(INFO::IV_REQUIREMENT);} - - /// \brief The initialization vector length for the algorithm - /// \details IVSize is provided in bytes, not bits. The default implementation uses - /// IV_LENGTH, which is 0. - unsigned int IVSize() const - {return INFO::IV_LENGTH;} -}; - -/// \brief Provides a base implementation of Algorithm and SimpleKeyingInterface for block ciphers -/// \tparam INFO a SimpleKeyingInterface derived class -/// \tparam BASE a SimpleKeyingInterface derived class -/// \details BlockCipherImpl() provides a default implementation for block ciphers using AlgorithmImpl() -/// and SimpleKeyingInterfaceImpl(). Functions are virtual and not eligible for C++11 constexpr-ness. -/// \sa Algorithm(), SimpleKeyingInterface(), AlgorithmImpl(), SimpleKeyingInterfaceImpl() -template -class CRYPTOPP_NO_VTABLE BlockCipherImpl : public AlgorithmImpl > > -{ -public: - /// Provides the block size of the algorithm - /// \return the block size of the algorithm, in bytes - unsigned int BlockSize() const {return this->BLOCKSIZE;} -}; - -/// \brief Provides class member functions to key a block cipher -/// \tparam DIR a CipherDir -/// \tparam BASE a BlockCipherImpl derived class -template -class BlockCipherFinal : public ClonableImpl, BASE> -{ -public: - /// \brief Construct a default BlockCipherFinal - /// \details The cipher is not keyed. - BlockCipherFinal() {} - - /// \brief Construct a BlockCipherFinal - /// \param key a byte array used to key the cipher - /// \details key must be at least DEFAULT_KEYLENGTH in length. Internally, the function calls - /// SimpleKeyingInterface::SetKey. - BlockCipherFinal(const byte *key) - {this->SetKey(key, this->DEFAULT_KEYLENGTH);} - - /// \brief Construct a BlockCipherFinal - /// \param key a byte array used to key the cipher - /// \param length the length of the byte array - /// \details key must be at least DEFAULT_KEYLENGTH in length. Internally, the function calls - /// SimpleKeyingInterface::SetKey. - BlockCipherFinal(const byte *key, size_t length) - {this->SetKey(key, length);} - - /// \brief Construct a BlockCipherFinal - /// \param key a byte array used to key the cipher - /// \param length the length of the byte array - /// \param rounds the number of rounds - /// \details key must be at least DEFAULT_KEYLENGTH in length. Internally, the function calls - /// SimpleKeyingInterface::SetKeyWithRounds. - BlockCipherFinal(const byte *key, size_t length, unsigned int rounds) - {this->SetKeyWithRounds(key, length, rounds);} - - /// \brief Provides the direction of the cipher - /// \return true if DIR is ENCRYPTION, false otherwise - /// \sa GetCipherDirection(), IsPermutation() - bool IsForwardTransformation() const {return DIR == ENCRYPTION;} -}; - -/// \brief Provides a base implementation of Algorithm and SimpleKeyingInterface for message authentication codes -/// \tparam INFO a SimpleKeyingInterface derived class -/// \tparam BASE a SimpleKeyingInterface derived class -/// \details MessageAuthenticationCodeImpl() provides a default implementation for message authentication codes -/// using AlgorithmImpl() and SimpleKeyingInterfaceImpl(). Functions are virtual and not subject to C++11 -/// constexpr. -/// \sa Algorithm(), SimpleKeyingInterface(), AlgorithmImpl(), SimpleKeyingInterfaceImpl() -template -class MessageAuthenticationCodeImpl : public AlgorithmImpl, INFO> -{ -}; - -/// \brief Provides class member functions to key a message authentication code -/// \tparam BASE a BlockCipherImpl derived class -/// \details A default implementation for MessageAuthenticationCode -template -class MessageAuthenticationCodeFinal : public ClonableImpl, MessageAuthenticationCodeImpl > -{ -public: - /// \brief Construct a default MessageAuthenticationCodeFinal - /// \details The message authentication code is not keyed. - MessageAuthenticationCodeFinal() {} - /// \brief Construct a BlockCipherFinal - /// \param key a byte array used to key the algorithm - /// \details key must be at least DEFAULT_KEYLENGTH in length. Internally, the function calls - /// SimpleKeyingInterface::SetKey. - MessageAuthenticationCodeFinal(const byte *key) - {this->SetKey(key, this->DEFAULT_KEYLENGTH);} - /// \brief Construct a BlockCipherFinal - /// \param key a byte array used to key the algorithm - /// \param length the length of the byte array - /// \details key must be at least DEFAULT_KEYLENGTH in length. Internally, the function calls - /// SimpleKeyingInterface::SetKey. - MessageAuthenticationCodeFinal(const byte *key, size_t length) - {this->SetKey(key, length);} -}; - -// ************** documentation *************** - -/// \brief Provides Encryption and Decryption typedefs used by derived classes to -/// implement a block cipher -/// \details These objects usually should not be used directly. See CipherModeDocumentation -/// instead. Each class derived from this one defines two types, Encryption and Decryption, -/// both of which implement the BlockCipher interface. -struct BlockCipherDocumentation -{ - /// implements the BlockCipher interface - typedef BlockCipher Encryption; - /// implements the BlockCipher interface - typedef BlockCipher Decryption; -}; - -/// \brief Provides Encryption and Decryption typedefs used by derived classes to -/// implement a symmetric cipher -/// \details Each class derived from this one defines two types, Encryption and Decryption, -/// both of which implement the SymmetricCipher interface. Two types of classes derive -/// from this class: stream ciphers and block cipher modes. Stream ciphers can be used -/// alone, cipher mode classes need to be used with a block cipher. See CipherModeDocumentation -/// for more for information about using cipher modes and block ciphers. -struct SymmetricCipherDocumentation -{ - /// implements the SymmetricCipher interface - typedef SymmetricCipher Encryption; - /// implements the SymmetricCipher interface - typedef SymmetricCipher Decryption; -}; - -/// \brief Provides Encryption and Decryption typedefs used by derived classes to -/// implement an authenticated encryption cipher -/// \details Each class derived from this one defines two types, Encryption and Decryption, -/// both of which implement the AuthenticatedSymmetricCipher interface. -struct AuthenticatedSymmetricCipherDocumentation -{ - /// implements the AuthenticatedSymmetricCipher interface - typedef AuthenticatedSymmetricCipher Encryption; - /// implements the AuthenticatedSymmetricCipher interface - typedef AuthenticatedSymmetricCipher Decryption; -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -// Issue 340 -#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE -# pragma GCC diagnostic pop -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/seed.h b/third_party/cryptoppwin/include/cryptopp/seed.h deleted file mode 100644 index 63ee028b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/seed.h +++ /dev/null @@ -1,44 +0,0 @@ -// seed.h - originally written and placed in the public domain by Wei Dai - -/// \file seed.h -/// \brief Classes for the SEED block cipher -/// \since Crypto++ 5.6.0 - -#ifndef CRYPTOPP_SEED_H -#define CRYPTOPP_SEED_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SEED block cipher information -/// \since Crypto++ 5.6.0 -struct SEED_Info : public FixedBlockSize<16>, public FixedKeyLength<16>, public FixedRounds<16> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "SEED";} -}; - -/// \brief SEED block cipher -/// \sa SEED -/// \since Crypto++ 5.6.0 -class SEED : public SEED_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - protected: - FixedSizeSecBlock m_k; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/serpent.h b/third_party/cryptoppwin/include/cryptopp/serpent.h deleted file mode 100644 index 3fa3379a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/serpent.h +++ /dev/null @@ -1,72 +0,0 @@ -// serpent.h - originally written and placed in the public domain by Wei Dai - -/// \file serpent.h -/// \brief Classes for the Serpent block cipher -/// \sa A -/// Candidate Block Cipher for the Advanced Encryption Standard - -#ifndef CRYPTOPP_SERPENT_H -#define CRYPTOPP_SERPENT_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Serpent block cipher information -/// \since Crypto++ 3.1 -struct Serpent_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8>, public FixedRounds<32> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Serpent";} -}; - -/// \brief Serpent block cipher -/// \sa Serpent on the -/// Crypto++ wiki, A -/// Candidate Block Cipher for the Advanced Encryption Standard -/// \since Crypto++ 3.1 -class Serpent : public Serpent_Info, public BlockCipherDocumentation -{ - /// \brief Serpen block cipher base implementation - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 3.1 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - FixedSizeSecBlock m_key; - }; - - /// \brief Serpent encryption transformation - /// \details Enc provides the encryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 3.1 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Serpent decryption transformation - /// \details Dec provides the decryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 3.1 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Serpent::Encryption SerpentEncryption; -typedef Serpent::Decryption SerpentDecryption; - -NAMESPACE_END - -#endif // CRYPTOPP_SERPENT_H diff --git a/third_party/cryptoppwin/include/cryptopp/serpentp.h b/third_party/cryptoppwin/include/cryptopp/serpentp.h deleted file mode 100644 index 124b08c5..00000000 --- a/third_party/cryptoppwin/include/cryptopp/serpentp.h +++ /dev/null @@ -1,439 +0,0 @@ -// private header for Serpent and Sosemanuk - -#ifndef CRYPTOPP_SERPENTP_H -#define CRYPTOPP_SERPENTP_H - -NAMESPACE_BEGIN(CryptoPP) - -// linear transformation -#define LT(i,a,b,c,d,e) {\ - a = rotlConstant<13>(a); \ - c = rotlConstant<3>(c); \ - d = rotlConstant<7>(d ^ c ^ (a << 3)); \ - b = rotlConstant<1>(b ^ a ^ c); \ - a = rotlConstant<5>(a ^ b ^ d); \ - c = rotlConstant<22>(c ^ d ^ (b << 7));} - -// inverse linear transformation -#define ILT(i,a,b,c,d,e) {\ - c = rotrConstant<22>(c); \ - a = rotrConstant<5>(a); \ - c ^= d ^ (b << 7); \ - a ^= b ^ d; \ - b = rotrConstant<1>(b); \ - d = rotrConstant<7>(d) ^ c ^ (a << 3); \ - b ^= a ^ c; \ - c = rotrConstant<3>(c); \ - a = rotrConstant<13>(a);} - -// order of output from S-box functions -#define beforeS0(f) f(0,a,b,c,d,e) -#define afterS0(f) f(1,b,e,c,a,d) -#define afterS1(f) f(2,c,b,a,e,d) -#define afterS2(f) f(3,a,e,b,d,c) -#define afterS3(f) f(4,e,b,d,c,a) -#define afterS4(f) f(5,b,a,e,c,d) -#define afterS5(f) f(6,a,c,b,e,d) -#define afterS6(f) f(7,a,c,d,b,e) -#define afterS7(f) f(8,d,e,b,a,c) - -// order of output from inverse S-box functions -#define beforeI7(f) f(8,a,b,c,d,e) -#define afterI7(f) f(7,d,a,b,e,c) -#define afterI6(f) f(6,a,b,c,e,d) -#define afterI5(f) f(5,b,d,e,c,a) -#define afterI4(f) f(4,b,c,e,a,d) -#define afterI3(f) f(3,a,b,e,c,d) -#define afterI2(f) f(2,b,d,e,c,a) -#define afterI1(f) f(1,a,b,c,e,d) -#define afterI0(f) f(0,a,d,b,e,c) - -// The instruction sequences for the S-box functions -// come from Dag Arne Osvik's paper "Speeding up Serpent". - -#define S0(i, r0, r1, r2, r3, r4) \ - { \ - r3 ^= r0; \ - r4 = r1; \ - r1 &= r3; \ - r4 ^= r2; \ - r1 ^= r0; \ - r0 |= r3; \ - r0 ^= r4; \ - r4 ^= r3; \ - r3 ^= r2; \ - r2 |= r1; \ - r2 ^= r4; \ - r4 = ~r4; \ - r4 |= r1; \ - r1 ^= r3; \ - r1 ^= r4; \ - r3 |= r0; \ - r1 ^= r3; \ - r4 ^= r3; \ - } - -#define I0(i, r0, r1, r2, r3, r4) \ - { \ - r2 = ~r2; \ - r4 = r1; \ - r1 |= r0; \ - r4 = ~r4; \ - r1 ^= r2; \ - r2 |= r4; \ - r1 ^= r3; \ - r0 ^= r4; \ - r2 ^= r0; \ - r0 &= r3; \ - r4 ^= r0; \ - r0 |= r1; \ - r0 ^= r2; \ - r3 ^= r4; \ - r2 ^= r1; \ - r3 ^= r0; \ - r3 ^= r1; \ - r2 &= r3; \ - r4 ^= r2; \ - } - -#define S1(i, r0, r1, r2, r3, r4) \ - { \ - r0 = ~r0; \ - r2 = ~r2; \ - r4 = r0; \ - r0 &= r1; \ - r2 ^= r0; \ - r0 |= r3; \ - r3 ^= r2; \ - r1 ^= r0; \ - r0 ^= r4; \ - r4 |= r1; \ - r1 ^= r3; \ - r2 |= r0; \ - r2 &= r4; \ - r0 ^= r1; \ - r1 &= r2; \ - r1 ^= r0; \ - r0 &= r2; \ - r0 ^= r4; \ - } - -#define I1(i, r0, r1, r2, r3, r4) \ - { \ - r4 = r1; \ - r1 ^= r3; \ - r3 &= r1; \ - r4 ^= r2; \ - r3 ^= r0; \ - r0 |= r1; \ - r2 ^= r3; \ - r0 ^= r4; \ - r0 |= r2; \ - r1 ^= r3; \ - r0 ^= r1; \ - r1 |= r3; \ - r1 ^= r0; \ - r4 = ~r4; \ - r4 ^= r1; \ - r1 |= r0; \ - r1 ^= r0; \ - r1 |= r4; \ - r3 ^= r1; \ - } - -#define S2(i, r0, r1, r2, r3, r4) \ - { \ - r4 = r0; \ - r0 &= r2; \ - r0 ^= r3; \ - r2 ^= r1; \ - r2 ^= r0; \ - r3 |= r4; \ - r3 ^= r1; \ - r4 ^= r2; \ - r1 = r3; \ - r3 |= r4; \ - r3 ^= r0; \ - r0 &= r1; \ - r4 ^= r0; \ - r1 ^= r3; \ - r1 ^= r4; \ - r4 = ~r4; \ - } - -#define I2(i, r0, r1, r2, r3, r4) \ - { \ - r2 ^= r3; \ - r3 ^= r0; \ - r4 = r3; \ - r3 &= r2; \ - r3 ^= r1; \ - r1 |= r2; \ - r1 ^= r4; \ - r4 &= r3; \ - r2 ^= r3; \ - r4 &= r0; \ - r4 ^= r2; \ - r2 &= r1; \ - r2 |= r0; \ - r3 = ~r3; \ - r2 ^= r3; \ - r0 ^= r3; \ - r0 &= r1; \ - r3 ^= r4; \ - r3 ^= r0; \ - } - -#define S3(i, r0, r1, r2, r3, r4) \ - { \ - r4 = r0; \ - r0 |= r3; \ - r3 ^= r1; \ - r1 &= r4; \ - r4 ^= r2; \ - r2 ^= r3; \ - r3 &= r0; \ - r4 |= r1; \ - r3 ^= r4; \ - r0 ^= r1; \ - r4 &= r0; \ - r1 ^= r3; \ - r4 ^= r2; \ - r1 |= r0; \ - r1 ^= r2; \ - r0 ^= r3; \ - r2 = r1; \ - r1 |= r3; \ - r1 ^= r0; \ - } - -#define I3(i, r0, r1, r2, r3, r4) \ - { \ - r4 = r2; \ - r2 ^= r1; \ - r1 &= r2; \ - r1 ^= r0; \ - r0 &= r4; \ - r4 ^= r3; \ - r3 |= r1; \ - r3 ^= r2; \ - r0 ^= r4; \ - r2 ^= r0; \ - r0 |= r3; \ - r0 ^= r1; \ - r4 ^= r2; \ - r2 &= r3; \ - r1 |= r3; \ - r1 ^= r2; \ - r4 ^= r0; \ - r2 ^= r4; \ - } - -#define S4(i, r0, r1, r2, r3, r4) \ - { \ - r1 ^= r3; \ - r3 = ~r3; \ - r2 ^= r3; \ - r3 ^= r0; \ - r4 = r1; \ - r1 &= r3; \ - r1 ^= r2; \ - r4 ^= r3; \ - r0 ^= r4; \ - r2 &= r4; \ - r2 ^= r0; \ - r0 &= r1; \ - r3 ^= r0; \ - r4 |= r1; \ - r4 ^= r0; \ - r0 |= r3; \ - r0 ^= r2; \ - r2 &= r3; \ - r0 = ~r0; \ - r4 ^= r2; \ - } - -#define I4(i, r0, r1, r2, r3, r4) \ - { \ - r4 = r2; \ - r2 &= r3; \ - r2 ^= r1; \ - r1 |= r3; \ - r1 &= r0; \ - r4 ^= r2; \ - r4 ^= r1; \ - r1 &= r2; \ - r0 = ~r0; \ - r3 ^= r4; \ - r1 ^= r3; \ - r3 &= r0; \ - r3 ^= r2; \ - r0 ^= r1; \ - r2 &= r0; \ - r3 ^= r0; \ - r2 ^= r4; \ - r2 |= r3; \ - r3 ^= r0; \ - r2 ^= r1; \ - } - -#define S5(i, r0, r1, r2, r3, r4) \ - { \ - r0 ^= r1; \ - r1 ^= r3; \ - r3 = ~r3; \ - r4 = r1; \ - r1 &= r0; \ - r2 ^= r3; \ - r1 ^= r2; \ - r2 |= r4; \ - r4 ^= r3; \ - r3 &= r1; \ - r3 ^= r0; \ - r4 ^= r1; \ - r4 ^= r2; \ - r2 ^= r0; \ - r0 &= r3; \ - r2 = ~r2; \ - r0 ^= r4; \ - r4 |= r3; \ - r2 ^= r4; \ - } - -#define I5(i, r0, r1, r2, r3, r4) \ - { \ - r1 = ~r1; \ - r4 = r3; \ - r2 ^= r1; \ - r3 |= r0; \ - r3 ^= r2; \ - r2 |= r1; \ - r2 &= r0; \ - r4 ^= r3; \ - r2 ^= r4; \ - r4 |= r0; \ - r4 ^= r1; \ - r1 &= r2; \ - r1 ^= r3; \ - r4 ^= r2; \ - r3 &= r4; \ - r4 ^= r1; \ - r3 ^= r0; \ - r3 ^= r4; \ - r4 = ~r4; \ - } - -#define S6(i, r0, r1, r2, r3, r4) \ - { \ - r2 = ~r2; \ - r4 = r3; \ - r3 &= r0; \ - r0 ^= r4; \ - r3 ^= r2; \ - r2 |= r4; \ - r1 ^= r3; \ - r2 ^= r0; \ - r0 |= r1; \ - r2 ^= r1; \ - r4 ^= r0; \ - r0 |= r3; \ - r0 ^= r2; \ - r4 ^= r3; \ - r4 ^= r0; \ - r3 = ~r3; \ - r2 &= r4; \ - r2 ^= r3; \ - } - -#define I6(i, r0, r1, r2, r3, r4) \ - { \ - r0 ^= r2; \ - r4 = r2; \ - r2 &= r0; \ - r4 ^= r3; \ - r2 = ~r2; \ - r3 ^= r1; \ - r2 ^= r3; \ - r4 |= r0; \ - r0 ^= r2; \ - r3 ^= r4; \ - r4 ^= r1; \ - r1 &= r3; \ - r1 ^= r0; \ - r0 ^= r3; \ - r0 |= r2; \ - r3 ^= r1; \ - r4 ^= r0; \ - } - -#define S7(i, r0, r1, r2, r3, r4) \ - { \ - r4 = r2; \ - r2 &= r1; \ - r2 ^= r3; \ - r3 &= r1; \ - r4 ^= r2; \ - r2 ^= r1; \ - r1 ^= r0; \ - r0 |= r4; \ - r0 ^= r2; \ - r3 ^= r1; \ - r2 ^= r3; \ - r3 &= r0; \ - r3 ^= r4; \ - r4 ^= r2; \ - r2 &= r0; \ - r4 = ~r4; \ - r2 ^= r4; \ - r4 &= r0; \ - r1 ^= r3; \ - r4 ^= r1; \ - } - -#define I7(i, r0, r1, r2, r3, r4) \ - { \ - r4 = r2; \ - r2 ^= r0; \ - r0 &= r3; \ - r2 = ~r2; \ - r4 |= r3; \ - r3 ^= r1; \ - r1 |= r0; \ - r0 ^= r2; \ - r2 &= r4; \ - r1 ^= r2; \ - r2 ^= r0; \ - r0 |= r2; \ - r3 &= r4; \ - r0 ^= r3; \ - r4 ^= r1; \ - r3 ^= r4; \ - r4 |= r0; \ - r3 ^= r2; \ - r4 ^= r2; \ - } - -// key xor -#define KX(r, a, b, c, d, e) {\ - a ^= k[4 * r + 0]; \ - b ^= k[4 * r + 1]; \ - c ^= k[4 * r + 2]; \ - d ^= k[4 * r + 3];} - -#define LK(r, a, b, c, d, e) {\ - a = k[(8-r)*4 + 0]; \ - b = k[(8-r)*4 + 1]; \ - c = k[(8-r)*4 + 2]; \ - d = k[(8-r)*4 + 3];} - -#define SK(r, a, b, c, d, e) {\ - k[(8-r)*4 + 4] = a; \ - k[(8-r)*4 + 5] = b; \ - k[(8-r)*4 + 6] = c; \ - k[(8-r)*4 + 7] = d;} - -void Serpent_KeySchedule(word32 *k, unsigned int rounds, const byte *userKey, size_t keylen); - -NAMESPACE_END - -#endif // CRYPTOPP_SERPENTP_H diff --git a/third_party/cryptoppwin/include/cryptopp/sha.h b/third_party/cryptoppwin/include/cryptopp/sha.h deleted file mode 100644 index d4a09d7d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sha.h +++ /dev/null @@ -1,210 +0,0 @@ -// sha.h - originally written and placed in the public domain by Wei Dai - -/// \file sha.h -/// \brief Classes for SHA-1 and SHA-2 family of message digests -/// \since SHA1 since Crypto++ 1.0, SHA2 since Crypto++ 4.0, ARMv8 SHA since -/// Crypto++ 6.0, Intel SHA since Crypto++ 6.0, Power8 SHA since Crypto++ 6.1 - -#ifndef CRYPTOPP_SHA_H -#define CRYPTOPP_SHA_H - -#include "config.h" -#include "iterhash.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_SHA_ASM 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SHA-1 message digest -/// \sa SHA-1 -/// \since SHA1 since Crypto++ 1.0, SHA2 since Crypto++ 4.0, ARMv8 SHA since -/// Crypto++ 6.0, Intel SHA since Crypto++ 6.0 -class CRYPTOPP_DLL SHA1 : public IteratedHashWithStaticTransform -{ -public: - /// \brief Initialize state array - /// \param state the state of the hash - /// \details InitState sets a state array to SHA1 initial values - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array must be 16-byte aligned for SSE2. - static void CRYPTOPP_API InitState(HashWordType *state); - /// \brief Operate the hash - /// \param digest the state of the hash - /// \param data the data to be digested - /// \details Transform operates the hash on data. When the call is invoked - /// digest holds initial state. Upon return digest holds the hash - /// or updated state. - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array and data must be 16-byte aligned for SSE2. - static void CRYPTOPP_API Transform(HashWordType *digest, const HashWordType *data); - /// \brief The algorithm name - /// \return C-style string "SHA-1" - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "SHA-1";} - // Algorithm class - std::string AlgorithmProvider() const; - -protected: - size_t HashMultipleBlocks(const HashWordType *input, size_t length); -}; - -/// \brief SHA-256 message digest -/// \sa SHA-256 -/// \since SHA2 since Crypto++ 4.0, ARMv8 SHA since Crypto++ 6.0, -/// Intel SHA since Crypto++ 6.0, Power8 SHA since Crypto++ 6.1 -class CRYPTOPP_DLL SHA256 : public IteratedHashWithStaticTransform -{ -public: - /// \brief Initialize state array - /// \param state the state of the hash - /// \details InitState sets a state array to SHA256 initial values - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array must be 16-byte aligned for SSE2. - static void CRYPTOPP_API InitState(HashWordType *state); - /// \brief Operate the hash - /// \param digest the state of the hash - /// \param data the data to be digested - /// \details Transform operates the hash on data. When the call is invoked - /// digest holds initial state. Upon return digest holds the hash - /// or updated state. - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array and data must be 16-byte aligned for SSE2. - static void CRYPTOPP_API Transform(HashWordType *digest, const HashWordType *data); - /// \brief The algorithm name - /// \return C-style string "SHA-256" - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "SHA-256";} - - // Algorithm class - std::string AlgorithmProvider() const; - -protected: - size_t HashMultipleBlocks(const HashWordType *input, size_t length); -}; - -/// \brief SHA-224 message digest -/// \sa SHA-224 -/// \since SHA2 since Crypto++ 4.0, ARMv8 SHA since Crypto++ 6.0, -/// Intel SHA since Crypto++ 6.0, Power8 SHA since Crypto++ 6.1 -class CRYPTOPP_DLL SHA224 : public IteratedHashWithStaticTransform -{ -public: - /// \brief Initialize state array - /// \param state the state of the hash - /// \details InitState sets a state array to SHA224 initial values - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array must be 16-byte aligned for SSE2. - static void CRYPTOPP_API InitState(HashWordType *state); - /// \brief Operate the hash - /// \param digest the state of the hash - /// \param data the data to be digested - /// \details Transform operates the hash on data. When the call is invoked - /// digest holds initial state. Upon return digest holds the hash - /// or updated state. - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array and data must be 16-byte aligned for SSE2. - static void CRYPTOPP_API Transform(HashWordType *digest, const HashWordType *data) {SHA256::Transform(digest, data);} - /// \brief The algorithm name - /// \return C-style string "SHA-224" - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "SHA-224";} - - // Algorithm class - std::string AlgorithmProvider() const; - -protected: - size_t HashMultipleBlocks(const HashWordType *input, size_t length); -}; - -/// \brief SHA-512 message digest -/// \sa SHA-512 -/// \since SHA2 since Crypto++ 4.0, Power8 SHA since Crypto++ 6.1 -class CRYPTOPP_DLL SHA512 : public IteratedHashWithStaticTransform -{ -public: - /// \brief Initialize state array - /// \param state the state of the hash - /// \details InitState sets a state array to SHA512 initial values - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array must be 16-byte aligned for SSE2. - static void CRYPTOPP_API InitState(HashWordType *state); - /// \brief Operate the hash - /// \param digest the state of the hash - /// \param data the data to be digested - /// \details Transform operates the hash on data. When the call is invoked - /// digest holds initial state. Upon return digest holds the hash - /// or updated state. - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array and data must be 16-byte aligned for SSE2. - static void CRYPTOPP_API Transform(HashWordType *digest, const HashWordType *data); - /// \brief The algorithm name - /// \return C-style string "SHA-512" - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "SHA-512";} - - // Algorithm class - std::string AlgorithmProvider() const; -}; - -/// \brief SHA-384 message digest -/// \sa SHA-384 -/// \since SHA2 since Crypto++ 4.0, Power8 SHA since Crypto++ 6.1 -class CRYPTOPP_DLL SHA384 : public IteratedHashWithStaticTransform -{ -public: - /// \brief Initialize state array - /// \param state the state of the hash - /// \details InitState sets a state array to SHA384 initial values - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array must be 16-byte aligned for SSE2. - static void CRYPTOPP_API InitState(HashWordType *state); - /// \brief Operate the hash - /// \param digest the state of the hash - /// \param data the data to be digested - /// \details Transform operates the hash on data. When the call is invoked - /// digest holds initial state. Upon return digest holds the hash - /// or updated state. - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState and Transform. External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - /// \note On Intel platforms the state array and data must be 16-byte aligned for SSE2. - static void CRYPTOPP_API Transform(HashWordType *digest, const HashWordType *data) {SHA512::Transform(digest, data);} - /// \brief The algorithm name - /// \return C-style string "SHA-384" - CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "SHA-384";} - - // Algorithm class - std::string AlgorithmProvider() const; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/sha1_armv4.h b/third_party/cryptoppwin/include/cryptopp/sha1_armv4.h deleted file mode 100644 index 97f36717..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sha1_armv4.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Header file for use with Cryptogam's ARMv4 SHA1. */ -/* Also see http://www.openssl.org/~appro/cryptogams/ */ -/* https://wiki.openssl.org/index.php/Cryptogams_SHA. */ - -#ifndef CRYPTOGAMS_SHA1_ARMV4_H -#define CRYPTOGAMS_SHA1_ARMV4_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Crypto++ modified sha1_block_data_order to pass caps as a parameter. */ -/* Also see https://github.com/weidai11/cryptopp/issues/846. */ -void cryptogams_sha1_block_data_order(void *state, const void *data, size_t blocks); - -/* Cryptogams arm caps */ -#define CRYPTOGAMS_ARMV7_NEON (1<<0) - -#ifdef __cplusplus -} -#endif - -#endif /* CRYPTOGAMS_SHA1_ARMV4_H */ diff --git a/third_party/cryptoppwin/include/cryptopp/sha256_armv4.h b/third_party/cryptoppwin/include/cryptopp/sha256_armv4.h deleted file mode 100644 index 5a4b88e2..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sha256_armv4.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Header file for use with Cryptogam's ARMv4 SHA1. */ -/* Also see http://www.openssl.org/~appro/cryptogams/ */ -/* https://wiki.openssl.org/index.php/Cryptogams_SHA. */ - -#ifndef CRYPTOGAMS_SHA256_ARMV4_H -#define CRYPTOGAMS_SHA256_ARMV4_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Crypto++ modified cryptogams_sha256_block_data_order to pass caps as a parameter. */ -/* Also see https://github.com/weidai11/cryptopp/issues/846. */ -void cryptogams_sha256_block_data_order(void *state, const void *data, size_t blocks); - -/* Cryptogams arm caps */ -#define CRYPTOGAMS_ARMV7_NEON (1<<0) - -#ifdef __cplusplus -} -#endif - -#endif /* CRYPTOGAMS_SHA256_ARMV4_H */ diff --git a/third_party/cryptoppwin/include/cryptopp/sha3.h b/third_party/cryptoppwin/include/cryptopp/sha3.h deleted file mode 100644 index 97fce4b6..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sha3.h +++ /dev/null @@ -1,106 +0,0 @@ -// sha3.h - originally written and placed in the public domain by Wei Dai - -/// \file sha3.h -/// \brief Classes for SHA3 message digests -/// \details The Crypto++ implementation conforms to the FIPS 202 version of SHA3 using F1600 with XOF d=0x06. -/// Previous behavior (XOF d=0x01) is available in Keccak classes. -/// \sa SHA-3, -/// SHA-3 STANDARD (FIPS 202). -/// \since Crypto++ 5.6.2 - -#ifndef CRYPTOPP_SHA3_H -#define CRYPTOPP_SHA3_H - -#include "cryptlib.h" -#include "secblock.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SHA3 message digest base class -/// \details The Crypto++ implementation conforms to FIPS 202 version of SHA3 using F1600 with XOF d=0x06. -/// Previous behavior (XOF d=0x01) is available in Keccak classes. -/// \details SHA3 is the base class for SHA3_224, SHA3_256, SHA3_384 and SHA3_512. -/// Library users should instantiate a derived class, and only use SHA3 -/// as a base class reference or pointer. -/// \sa Keccak, SHA3_224, SHA3_256, SHA3_384 and SHA3_512. -/// \since Crypto++ 5.6.2 -class SHA3 : public HashTransformation -{ -protected: - /// \brief Construct a SHA3 - /// \param digestSize the digest size, in bytes - /// \details SHA3 is the base class for SHA3_224, SHA3_256, SHA3_384 and SHA3_512. - /// Library users should instantiate a derived class, and only use SHA3 - /// as a base class reference or pointer. - /// \details This constructor was moved to protected at Crypto++ 8.1 - /// because users were attempting to create Keccak objects with it. - /// \since Crypto++ 5.6.2 - SHA3(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} - -public: - unsigned int DigestSize() const {return m_digestSize;} - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - - void Update(const byte *input, size_t length); - void Restart(); - void TruncatedFinal(byte *hash, size_t size); - -protected: - inline unsigned int r() const {return BlockSize();} - - FixedSizeSecBlock m_state; - unsigned int m_digestSize, m_counter; -}; - -/// \brief SHA3 message digest template -/// \tparam T_DigestSize the size of the digest, in bytes -/// \since Crypto++ 5.6.2 -template -class SHA3_Final : public SHA3 -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize); - CRYPTOPP_CONSTANT(BLOCKSIZE = 200 - 2 * DIGESTSIZE); - static std::string StaticAlgorithmName() - { return "SHA3-" + IntToString(DIGESTSIZE * 8); } - - /// \brief Construct a SHA3-X message digest - SHA3_Final() : SHA3(DIGESTSIZE) {} - - /// \brief Provides the block size of the compression function - /// \return block size of the compression function, in bytes - /// \details BlockSize() will return 0 if the hash is not block based - /// or does not have an equivalent block size. For example, Keccak - /// and SHA-3 do not have a block size, but they do have an equivalent - /// block size called rate expressed as r. - unsigned int BlockSize() const { return BLOCKSIZE; } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } - -private: -#if !defined(__BORLANDC__) - // ensure there was no underflow in the math - CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); -#endif -}; - -/// \brief SHA3-224 message digest -/// \since Crypto++ 5.6.2 -class SHA3_224 : public SHA3_Final<28> {}; - -/// \brief SHA3-256 message digest -/// \since Crypto++ 5.6.2 -class SHA3_256 : public SHA3_Final<32> {}; - -/// \brief SHA3-384 message digest -/// \since Crypto++ 5.6.2 -class SHA3_384 : public SHA3_Final<48> {}; - -/// \brief SHA3-512 message digest -/// \since Crypto++ 5.6.2 -class SHA3_512 : public SHA3_Final<64> {}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/sha512_armv4.h b/third_party/cryptoppwin/include/cryptopp/sha512_armv4.h deleted file mode 100644 index cead986b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sha512_armv4.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Header file for use with Cryptogam's ARMv4 SHA512. */ -/* Also see http://www.openssl.org/~appro/cryptogams/ */ -/* https://wiki.openssl.org/index.php/Cryptogams_SHA. */ - -#ifndef CRYPTOGAMS_SHA512_ARMV4_H -#define CRYPTOGAMS_SHA512_ARMV4_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Crypto++ modified cryptogams_sha512_block_data_order to pass caps as a parameter. */ -/* Also see https://github.com/weidai11/cryptopp/issues/846. */ -void cryptogams_sha512_block_data_order(void *state, const void *data, size_t blocks); - -/* Cryptogams arm caps */ -#define CRYPTOGAMS_ARMV7_NEON (1<<0) - -#ifdef __cplusplus -} -#endif - -#endif /* CRYPTOGAMS_SHA512_ARMV4_H */ diff --git a/third_party/cryptoppwin/include/cryptopp/shacal2.h b/third_party/cryptoppwin/include/cryptopp/shacal2.h deleted file mode 100644 index 9f729582..00000000 --- a/third_party/cryptoppwin/include/cryptopp/shacal2.h +++ /dev/null @@ -1,66 +0,0 @@ -// shacal.h - originally written and placed in the public domain by Wei Dai - -/// \file shacal2.h -/// \brief Classes for the SHACAL-2 block cipher -/// \since Crypto++ 5.2, Intel SHA since Crypto++ 6.0 - -#ifndef CRYPTOPP_SHACAL2_H -#define CRYPTOPP_SHACAL2_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SHACAL2 block cipher information -struct SHACAL2_Info : public FixedBlockSize<32>, public VariableKeyLength<16, 16, 64> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "SHACAL-2";} -}; - -/// \brief SHACAL2 block cipher -/// \since Crypto++ 5.2, Intel SHA since Crypto++ 6.0 -/// \sa SHACAL-2 -class SHACAL2 : public SHACAL2_Info, public BlockCipherDocumentation -{ - /// \brief SHACAL2 block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - std::string AlgorithmProvider() const; - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - FixedSizeAlignedSecBlock m_key; - - static const word32 K[64]; - }; - - /// \brief SHACAL2 block cipher transformation functions - /// \details Encryption transformation - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief SHACAL2 block cipher transformation functions - /// \details Decryption transformation - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef SHACAL2::Encryption SHACAL2Encryption; -typedef SHACAL2::Decryption SHACAL2Decryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/shake.h b/third_party/cryptoppwin/include/cryptopp/shake.h deleted file mode 100644 index 4d52132d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/shake.h +++ /dev/null @@ -1,161 +0,0 @@ -// shake.h - written and placed in the public domain by Jeffrey Walton - -/// \file shake.h -/// \brief Classes for SHAKE message digests -/// \details The library provides byte oriented SHAKE128 and SHAKE256 using F1600. -/// FIPS 202 allows nearly unlimited output sizes, but Crypto++ limits the output -/// size to UINT_MAX due underlying data types. -/// \sa Keccak, SHA3, SHAKE128, SHAKE256, -/// FIPS 202, -/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions -/// \since Crypto++ 8.1 - -#ifndef CRYPTOPP_SHAKE_H -#define CRYPTOPP_SHAKE_H - -#include "cryptlib.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SHAKE message digest base class -/// \details SHAKE is the base class for SHAKE128 and SHAKE258. -/// Library users should instantiate a derived class, and only use SHAKE -/// as a base class reference or pointer. -/// \sa Keccak, SHA3, SHAKE128, SHAKE256, -/// FIPS 202, -/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions -/// \since Crypto++ 8.1 -class SHAKE : public HashTransformation -{ -protected: - /// \brief Construct a SHAKE - /// \param digestSize the digest size, in bytes - /// \details SHAKE is the base class for SHAKE128 and SHAKE256. - /// Library users should instantiate a derived class, and only use SHAKE - /// as a base class reference or pointer. - /// \details This constructor was moved to protected at Crypto++ 8.1 - /// because users were attempting to create Keccak objects with it. - /// \since Crypto++ 8.1 - SHAKE(unsigned int digestSize) : m_digestSize(digestSize) {Restart();} - -public: - unsigned int DigestSize() const {return m_digestSize;} - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - - void Update(const byte *input, size_t length); - void Restart(); - void TruncatedFinal(byte *hash, size_t size); - -protected: - inline unsigned int r() const {return BlockSize();} - - // SHAKE-128 and SHAKE-256 effectively allow unlimited - // output length. However, we use an unsigned int so - // we are limited in practice to UINT_MAX. - void ThrowIfInvalidTruncatedSize(size_t size) const; - - FixedSizeSecBlock m_state; - unsigned int m_digestSize, m_counter; -}; - -/// \brief SHAKE message digest template -/// \tparam T_Strength the strength of the digest -/// \since Crypto++ 8.1 -template -class SHAKE_Final : public SHAKE -{ -public: - CRYPTOPP_CONSTANT(DIGESTSIZE = (T_Strength == 128 ? 32 : 64)); - CRYPTOPP_CONSTANT(BLOCKSIZE = (T_Strength == 128 ? 1344/8 : 1088/8)); - static std::string StaticAlgorithmName() - { return "SHAKE-" + IntToString(T_Strength); } - - /// \brief Construct a SHAKE-X message digest - /// \details SHAKE128 and SHAKE256 don't need the output size in advance - /// because the output size does not affect the digest. TruncatedFinal - /// produces the correct digest for any output size. However, cSHAKE - /// requires the output size in advance because the algorithm uses - /// output size as a parameter to the hash function. - SHAKE_Final(unsigned int outputSize=DIGESTSIZE) : SHAKE(outputSize) {} - - /// \brief Provides the block size of the compression function - /// \return block size of the compression function, in bytes - /// \details BlockSize() will return 0 if the hash is not block based - /// or does not have an equivalent block size. For example, Keccak - /// and SHA-3 do not have a block size, but they do have an equivalent - /// to block size called rate expressed as r. - unsigned int BlockSize() const { return BLOCKSIZE; } - - std::string AlgorithmName() const { return StaticAlgorithmName(); } - -private: -#if !defined(__BORLANDC__) - // ensure there was no underflow in the math - CRYPTOPP_COMPILE_ASSERT(BLOCKSIZE < 200); -#endif -}; - -/// \brief SHAKE128 message digest -/// \details The library provides byte oriented SHAKE128 using F1600. -/// FIPS 202 allows nearly unlimited output sizes, but Crypto++ limits -/// the output size to UINT_MAX due underlying data types. -/// \sa Keccak, SHA3, SHAKE256, -/// FIPS 202, -/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions -/// \since Crypto++ 8.1 -class SHAKE128 : public SHAKE_Final<128> -{ -public: - /// \brief Construct a SHAKE128 message digest - /// \details SHAKE128 and SHAKE256 don't need the output size in advance - /// because the output size does not affect the digest. TruncatedFinal - /// produces the correct digest for any output size. However, cSHAKE - /// requires the output size in advance because the algorithm uses - /// output size as a parameter to the hash function. - /// \since Crypto++ 8.1 - SHAKE128() {} - - /// \brief Construct a SHAKE128 message digest - /// \details SHAKE128 and SHAKE256 don't need the output size in advance - /// because the output size does not affect the digest. TruncatedFinal - /// produces the correct digest for any output size. However, cSHAKE - /// requires the output size in advance because the algorithm uses - /// output size as a parameter to the hash function. - /// \since Crypto++ 8.1 - SHAKE128(unsigned int outputSize) : SHAKE_Final<128>(outputSize) {} -}; - -/// \brief SHAKE256 message digest -/// \details The library provides byte oriented SHAKE256 using F1600. -/// FIPS 202 allows nearly unlimited output sizes, but Crypto++ limits -/// the output size to UINT_MAX due underlying data types. -/// \sa Keccak, SHA3, SHAKE128, -/// FIPS 202, -/// SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions -/// \since Crypto++ 8.1 -class SHAKE256 : public SHAKE_Final<256> -{ -public: - /// \brief Construct a SHAKE256 message digest - /// \details SHAKE128 and SHAKE256 don't need the output size in advance - /// because the output size does not affect the digest. TruncatedFinal - /// produces the correct digest for any output size. However, cSHAKE - /// requires the output size in advance because the algorithm uses - /// output size as a parameter to the hash function. - /// \since Crypto++ 8.1 - SHAKE256() {} - - /// \brief Construct a SHAKE256 message digest - /// \details SHAKE128 and SHAKE256 don't need the output size in advance - /// because the output size does not affect the digest. TruncatedFinal - /// produces the correct digest for any output size. However, cSHAKE - /// requires the output size in advance because the algorithm uses - /// output size as a parameter to the hash function. - /// \since Crypto++ 8.1 - SHAKE256(unsigned int outputSize) : SHAKE_Final<256>(outputSize) {} -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/shark.h b/third_party/cryptoppwin/include/cryptopp/shark.h deleted file mode 100644 index 8c73d26b..00000000 --- a/third_party/cryptoppwin/include/cryptopp/shark.h +++ /dev/null @@ -1,77 +0,0 @@ -// shark.h - originally written and placed in the public domain by Wei Dai - -/// \file shark.h -/// \brief Classes for the SHARK block cipher -/// \since Crypto++ 2.1 - -#ifndef CRYPTOPP_SHARK_H -#define CRYPTOPP_SHARK_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SHARK block cipher information -/// \since Crypto++ 2.1 -struct SHARK_Info : public FixedBlockSize<8>, public FixedKeyLength<16>, public VariableRounds<6, 2> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "SHARK-E";} -}; - -/// \brief SHARK block cipher -/// SHARK-E -/// \since Crypto++ 2.1 -class SHARK : public SHARK_Info, public BlockCipherDocumentation -{ - /// \brief SHARK block cipher default operation - /// \since Crypto++ 2.1 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶m); - - protected: - unsigned int m_rounds; - SecBlock m_roundKeys; - }; - - /// \brief SHARK block cipher encryption operation - /// \since Crypto++ 2.1 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - // used by Base to do key setup - void InitForKeySetup(); - - private: - static const byte sbox[256]; - static const word64 cbox[8][256]; - }; - - /// \brief SHARK block cipher decryption operation - /// \since Crypto++ 2.1 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - - private: - static const byte sbox[256]; - static const word64 cbox[8][256]; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef SHARK::Encryption SHARKEncryption; -typedef SHARK::Decryption SHARKDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/simeck.h b/third_party/cryptoppwin/include/cryptopp/simeck.h deleted file mode 100644 index 7e76f70a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/simeck.h +++ /dev/null @@ -1,162 +0,0 @@ -// simeck.h - written and placed in the public domain by Gangqiang Yang and Jeffrey Walton. -// Based on "The Simeck Family of Lightweight Block Ciphers" by Gangqiang Yang, -// Bo Zhu, Valentin Suder, Mark D. Aagaard, and Guang Gong - -/// \file simeck.h -/// \brief Classes for the SIMECK block cipher -/// \sa SIMECK, -/// The Simeck -/// Family of Lightweight Block Ciphers -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_SIMECK_H -#define CRYPTOPP_SIMECK_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" -#include "algparam.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SIMECK block cipher information -/// \since Crypto++ 8.0 -struct SIMECK32_Info : public FixedBlockSize<4>, public FixedKeyLength<8>, public FixedRounds<32> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize - return "SIMECK-32"; - } -}; - -/// \brief SIMECK block cipher information -/// \since Crypto++ 8.0 -struct SIMECK64_Info : public FixedBlockSize<8>, public FixedKeyLength<16>, public FixedRounds<44> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize - return "SIMECK-64"; - } -}; - -/// \brief SIMECK 32-bit block cipher -/// \details SIMECK32 provides 32-bit block size. The valid key size is 64-bit. -/// \note Crypto++ provides a byte oriented implementation -/// \sa SIMECK64, SIMECK, -/// The Simeck Family of -/// Lightweight Block Ciphers -/// \since Crypto++ 8.0 -class CRYPTOPP_NO_VTABLE SIMECK32 : public SIMECK32_Info, public BlockCipherDocumentation -{ -public: - /// \brief SIMECK block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - std::string AlgorithmProvider() const; - - FixedSizeSecBlock m_rk; - mutable FixedSizeSecBlock m_t; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef SIMECK32::Encryption SIMECK32Encryption; -typedef SIMECK32::Decryption SIMECK32Decryption; - -/// \brief SIMECK 64-bit block cipher -/// \details SIMECK64 provides 64-bit block size. The valid key size is 128-bit. -/// \note Crypto++ provides a byte oriented implementation -/// \sa SIMECK32, SIMECK, -/// The Simeck Family of -/// Lightweight Block Ciphers -/// \since Crypto++ 8.0 -class CRYPTOPP_NO_VTABLE SIMECK64 : public SIMECK64_Info, public BlockCipherDocumentation -{ -public: - /// \brief SIMECK block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - std::string AlgorithmProvider() const; - - FixedSizeSecBlock m_rk; - mutable FixedSizeSecBlock m_t; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - -#if CRYPTOPP_SIMECK_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - -#if CRYPTOPP_SIMECK_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef SIMECK64::Encryption SIMECK64Encryption; -typedef SIMECK64::Decryption SIMECK64Decryption; - -NAMESPACE_END - -#endif // CRYPTOPP_SIMECK_H diff --git a/third_party/cryptoppwin/include/cryptopp/simon.h b/third_party/cryptoppwin/include/cryptopp/simon.h deleted file mode 100644 index 35bb67f3..00000000 --- a/third_party/cryptoppwin/include/cryptopp/simon.h +++ /dev/null @@ -1,206 +0,0 @@ -// simon.h - written and placed in the public domain by Jeffrey Walton - -/// \file simon.h -/// \brief Classes for the Simon block cipher -/// \details Simon is a block cipher designed by Ray Beaulieu, Douglas Shors, Jason Smith, -/// Stefan Treatman-Clark, Bryan Weeks and Louis Wingers. -/// \sa The SIMON and SPECK Families of -/// Lightweight Block Ciphers, -/// The Simon and Speck GitHub and -/// SIMON on the Crypto++ wiki. -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_SIMON_H -#define CRYPTOPP_SIMON_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || \ - CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 || \ - CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 -# ifndef CRYPTOPP_DISABLE_SIMON_SIMD -# define CRYPTOPP_SIMON128_ADVANCED_PROCESS_BLOCKS 1 -# endif -#endif - -// Yet another SunStudio/SunCC workaround. Failed self tests -// in SSE code paths on i386 for SunStudio 12.3 and below. -#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5120) -# undef CRYPTOPP_SIMON128_ADVANCED_PROCESS_BLOCKS -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SIMON block cipher information -/// \tparam L block size of the cipher, in bytes -/// \tparam D default key length, in bytes -/// \tparam N minimum key length, in bytes -/// \tparam M maximum key length, in bytes -/// \since Crypto++ 6.0 -template -struct SIMON_Info : public FixedBlockSize, VariableKeyLength -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize(Keylength) - return "SIMON-" + IntToString(L*8); - } -}; - -/// \brief SIMON block cipher base class -/// \tparam W the word type -/// \details User code should use SIMON64 or SIMON128 -/// \sa SIMON64, SIMON128, SIMON on the Crypto++ wiki -/// \since Crypto++ 6.0 -template -struct SIMON_Base -{ - virtual ~SIMON_Base() {} - SIMON_Base() : m_kwords(0), m_rounds(0) {} - - typedef SecBlock > AlignedSecBlock; - mutable AlignedSecBlock m_wspace; // workspace - AlignedSecBlock m_rkeys; // round keys - unsigned int m_kwords; // number of key words - unsigned int m_rounds; // number of rounds -}; - -/// \brief SIMON 64-bit block cipher -/// \details Simon is a block cipher designed by Ray Beaulieu, Douglas Shors, Jason Smith, -/// Stefan Treatman-Clark, Bryan Weeks and Louis Wingers. -/// \details SIMON64 provides 64-bit block size. The valid key sizes are 96-bit and 128-bit. -/// \sa SIMON64, SIMON128, The SIMON and SIMON -/// Families of Lightweight Block Ciphers, -/// The Simon and Speck GitHub, SIMON on the -/// Crypto++ wiki -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE SIMON64 : public SIMON_Info<8, 12, 12, 16>, public BlockCipherDocumentation -{ -public: - /// \brief SIMON64 block cipher base implementation - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : protected SIMON_Base, public BlockCipherImpl > - { - public: - /// \brief The algorithm name - /// \return the algorithm name - /// \details AlgorithmName returns the algorithm's name as a - /// member function. - std::string AlgorithmName() const { - return StaticAlgorithmName() + (m_kwords == 0 ? "" : - "(" + IntToString(m_kwords*sizeof(word32)*8) + ")"); - } - - std::string AlgorithmProvider() const; - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const; - - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - }; - - /// \brief SIMON64 encryption transformation - /// \details Enc provides the encryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief SIMON64 decryption transformation - /// \details Dec provides the decryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief SIMON 128-bit block cipher -/// \details Simon is a block cipher designed by Ray Beaulieu, Douglas Shors, Jason Smith, -/// Stefan Treatman-Clark, Bryan Weeks and Louis Wingers. -/// \details SIMON128 provides 128-bit block size. The valid key sizes are 128-bit, 192-bit and 256-bit. -/// \sa SIMON64, SIMON128, The SIMON and SIMON -/// Families of Lightweight Block Ciphers, -/// The Simon and Speck GitHub, SIMON on the -/// Crypto++ wiki -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE SIMON128 : public SIMON_Info<16, 16, 16, 32>, public BlockCipherDocumentation -{ -public: - /// \brief SIMON128 block cipher base implementation - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : protected SIMON_Base, public BlockCipherImpl > - { - public: - /// \brief The algorithm name - /// \return the algorithm name - /// \details AlgorithmName returns the algorithm's name as a - /// member function. - std::string AlgorithmName() const { - return StaticAlgorithmName() + (m_kwords == 0 ? "" : - "(" + IntToString(m_kwords*sizeof(word64)*8) + ")"); - } - - std::string AlgorithmProvider() const; - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const; - - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - }; - - /// \brief SIMON128 encryption transformation - /// \details Enc provides the encryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; -#if CRYPTOPP_SIMON128_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief SIMON128 decryption transformation - /// \details Dec provides the decryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; -#if CRYPTOPP_SIMON128_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_SIMON_H diff --git a/third_party/cryptoppwin/include/cryptopp/simple.h b/third_party/cryptoppwin/include/cryptopp/simple.h deleted file mode 100644 index 885c6781..00000000 --- a/third_party/cryptoppwin/include/cryptopp/simple.h +++ /dev/null @@ -1,506 +0,0 @@ -// simple.h - originally written and placed in the public domain by Wei Dai - -/// \file simple.h -/// \brief Classes providing basic library services. - -#ifndef CRYPTOPP_SIMPLE_H -#define CRYPTOPP_SIMPLE_H - -#include "config.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4127 4189) -#endif - -#include "cryptlib.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Base class for identifying algorithm -/// \tparam BASE base class from which to derive -/// \tparam DERIVED class which to clone -template -class CRYPTOPP_NO_VTABLE ClonableImpl : public BASE -{ -public: - /// \brief Create a copy of this object - /// \return a copy of this object - /// \details The caller is responsible for freeing the object. - Clonable * Clone() const {return new DERIVED(*static_cast(this));} -}; - -/// \brief Base class information -/// \tparam BASE an Algorithm derived class -/// \tparam ALGORITHM_INFO an Algorithm derived class -/// \details AlgorithmImpl provides StaticAlgorithmName from the template parameter BASE -template -class CRYPTOPP_NO_VTABLE AlgorithmImpl : public BASE -{ -public: - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static member function. - /// The name is taken from information provided by BASE. - static std::string CRYPTOPP_API StaticAlgorithmName() {return ALGORITHM_INFO::StaticAlgorithmName();} - /// \brief The algorithm name - /// \return the algorithm name - /// \details AlgorithmName returns the algorithm's name as a member function. - /// The name is acquired by calling StaticAlgorithmName. - std::string AlgorithmName() const {return ALGORITHM_INFO::StaticAlgorithmName();} -}; - -/// \brief Exception thrown when an invalid key length is encountered -class CRYPTOPP_DLL InvalidKeyLength : public InvalidArgument -{ -public: - /// \brief Construct an InvalidKeyLength - /// \param algorithm the Algorithm associated with the exception - /// \param length the key size associated with the exception - explicit InvalidKeyLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid key length") {} -}; - -/// \brief Exception thrown when an invalid number of rounds is encountered -class CRYPTOPP_DLL InvalidRounds : public InvalidArgument -{ -public: - /// \brief Construct an InvalidRounds - /// \param algorithm the Algorithm associated with the exception - /// \param rounds the number of rounds associated with the exception - explicit InvalidRounds(const std::string &algorithm, unsigned int rounds) : InvalidArgument(algorithm + ": " + IntToString(rounds) + " is not a valid number of rounds") {} -}; - -/// \brief Exception thrown when an invalid block size is encountered -class CRYPTOPP_DLL InvalidBlockSize : public InvalidArgument -{ -public: - /// \brief Construct an InvalidBlockSize - /// \param algorithm the Algorithm associated with the exception - /// \param length the block size associated with the exception - explicit InvalidBlockSize(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid block size") {} -}; - -/// \brief Exception thrown when an invalid derived key length is encountered -class CRYPTOPP_DLL InvalidDerivedKeyLength : public InvalidArgument -{ -public: - /// \brief Construct an InvalidDerivedKeyLength - /// \param algorithm the Algorithm associated with the exception - /// \param length the size associated with the exception - explicit InvalidDerivedKeyLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid derived key length") {} -}; - -/// \brief Exception thrown when an invalid personalization string length is encountered -class CRYPTOPP_DLL InvalidPersonalizationLength : public InvalidArgument -{ -public: - /// \brief Construct an InvalidPersonalizationLength - /// \param algorithm the Algorithm associated with the exception - /// \param length the personalization size associated with the exception - explicit InvalidPersonalizationLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid salt length") {} -}; - -/// \brief Exception thrown when an invalid salt length is encountered -class CRYPTOPP_DLL InvalidSaltLength : public InvalidArgument -{ -public: - /// \brief Construct an InvalidSaltLength - /// \param algorithm the Algorithm associated with the exception - /// \param length the salt size associated with the exception - explicit InvalidSaltLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid salt length") {} -}; - -// ***************************** - -/// \brief Base class for bufferless filters -/// \tparam T the class or type -template -class CRYPTOPP_NO_VTABLE Bufferless : public T -{ -public: - /// \brief Flushes data buffered by this object, without signal propagation - /// \param hardFlush indicates whether all data should be flushed - /// \param blocking specifies whether the object should block when processing input - /// \note hardFlush must be used with care - bool IsolatedFlush(bool hardFlush, bool blocking) - {CRYPTOPP_UNUSED(hardFlush); CRYPTOPP_UNUSED(blocking); return false;} -}; - -/// \brief Base class for unflushable filters -/// \tparam T the class or type -template -class CRYPTOPP_NO_VTABLE Unflushable : public T -{ -public: - /// \brief Flush buffered input and/or output, with signal propagation - /// \param completeFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the Flush() - /// signal should be passed - /// \param blocking specifies whether the object should block when processing - /// input - /// \details propagation count includes this object. Setting propagation to - /// 1 means this object only. Setting propagation to -1 - /// means unlimited propagation. - /// \note Hard flushes must be used with care. It means try to process and - /// output everything, even if there may not be enough data to complete the - /// action. For example, hard flushing a HexDecoder would cause an error if - /// you do it after inputing an odd number of hex encoded characters. - /// \note For some types of filters, like ZlibDecompressor, hard flushes can - /// only be done at "synchronization points". These synchronization points - /// are positions in the data stream that are created by hard flushes on the - /// corresponding reverse filters, in this example ZlibCompressor. This is - /// useful when zlib compressed data is moved across a network in packets - /// and compression state is preserved across packets, as in the SSH2 protocol. - bool Flush(bool completeFlush, int propagation=-1, bool blocking=true) - {return ChannelFlush(DEFAULT_CHANNEL, completeFlush, propagation, blocking);} - - /// \brief Flushes data buffered by this object, without signal propagation - /// \param hardFlush indicates whether all data should be flushed - /// \param blocking specifies whether the object should block when processing input - /// \note hardFlush must be used with care - bool IsolatedFlush(bool hardFlush, bool blocking) - {CRYPTOPP_UNUSED(hardFlush); CRYPTOPP_UNUSED(blocking); CRYPTOPP_ASSERT(false); return false;} - - /// \brief Flush buffered input and/or output on a channel - /// \param channel the channel to flush the data - /// \param hardFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the ChannelFlush() - /// signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return true of the Flush was successful - /// \details propagation count includes this object. Setting propagation to - /// 1 means this object only. Setting propagation to -1 means - /// unlimited propagation. - bool ChannelFlush(const std::string &channel, bool hardFlush, int propagation=-1, bool blocking=true) - { - if (hardFlush && !InputBufferIsEmpty()) - throw CannotFlush("Unflushable: this object has buffered input that cannot be flushed"); - else - { - BufferedTransformation *attached = this->AttachedTransformation(); - return attached && propagation ? attached->ChannelFlush(channel, hardFlush, propagation-1, blocking) : false; - } - } - -protected: - virtual bool InputBufferIsEmpty() const {return false;} -}; - -/// \brief Base class for input rejecting filters -/// \tparam T the class or type -/// \details T should be a BufferedTransformation derived class -template -class CRYPTOPP_NO_VTABLE InputRejecting : public T -{ -public: - struct InputRejected : public NotImplemented - {InputRejected() : NotImplemented("BufferedTransformation: this object doesn't allow input") {}}; - - /// \name INPUT - //@{ - - /// \brief Input a byte array for processing - /// \param inString the byte array to process - /// \param length the size of the string, in bytes - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one - /// \param blocking specifies whether the object should block when processing input - /// \throw InputRejected - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - /// \details Internally, the default implementation throws InputRejected. - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - {CRYPTOPP_UNUSED(inString); CRYPTOPP_UNUSED(length); CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking); throw InputRejected();} - //@} - - /// \name SIGNALS - //@{ - - /// \brief Flushes data buffered by this object, without signal propagation - /// \param hardFlush indicates whether all data should be flushed - /// \param blocking specifies whether the object should block when processing input - /// \note hardFlush must be used with care - bool IsolatedFlush(bool hardFlush, bool blocking) - {CRYPTOPP_UNUSED(hardFlush); CRYPTOPP_UNUSED(blocking); return false;} - - /// \brief Marks the end of a series of messages, without signal propagation - /// \param blocking specifies whether the object should block when completing the processing on - /// the current series of messages - /// \return true if the message was successful, false otherwise - bool IsolatedMessageSeriesEnd(bool blocking) - {CRYPTOPP_UNUSED(blocking); throw InputRejected();} - - /// \brief Input multiple bytes for processing on a channel. - /// \param channel the channel to process the data. - /// \param inString the byte buffer to process. - /// \param length the size of the string, in bytes. - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - size_t ChannelPut2(const std::string &channel, const byte *inString, size_t length, int messageEnd, bool blocking) - {CRYPTOPP_UNUSED(channel); CRYPTOPP_UNUSED(inString); CRYPTOPP_UNUSED(length); - CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking); throw InputRejected();} - - /// \brief Marks the end of a series of messages on a channel - /// \param channel the channel to signal the end of a series of messages - /// \param messageEnd the number of attached transformations the ChannelMessageSeriesEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return true if the message was successful, false otherwise - /// \details Each object that receives the signal will perform its processing, decrement - /// propagation, and then pass the signal on to attached transformations if the value is not 0. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note There should be a MessageEnd() immediately before MessageSeriesEnd(). - bool ChannelMessageSeriesEnd(const std::string& channel, int messageEnd, bool blocking) - {CRYPTOPP_UNUSED(channel); CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking); throw InputRejected();} - //@} -}; - -/// \brief Interface for custom flush signals propagation -/// \tparam T BufferedTransformation derived class -template -class CRYPTOPP_NO_VTABLE CustomFlushPropagation : public T -{ -public: - /// \name SIGNALS - //@{ - - /// \brief Flush buffered input and/or output, with signal propagation - /// \param hardFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the Flush() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note Hard flushes must be used with care. It means try to process and output everything, even if - /// there may not be enough data to complete the action. For example, hard flushing a HexDecoder - /// would cause an error if you do it after inputing an odd number of hex encoded characters. - /// \note For some types of filters, like ZlibDecompressor, hard flushes can only - /// be done at "synchronization points". These synchronization points are positions in the data - /// stream that are created by hard flushes on the corresponding reverse filters, in this - /// example ZlibCompressor. This is useful when zlib compressed data is moved across a - /// network in packets and compression state is preserved across packets, as in the SSH2 protocol. - virtual bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) =0; - - //@} - -private: - bool IsolatedFlush(bool hardFlush, bool blocking) - {CRYPTOPP_UNUSED(hardFlush); CRYPTOPP_UNUSED(blocking); CRYPTOPP_ASSERT(false); return false;} -}; - -/// \brief Interface for custom flush signals -/// \tparam T BufferedTransformation derived class -template -class CRYPTOPP_NO_VTABLE CustomSignalPropagation : public CustomFlushPropagation -{ -public: - /// \brief Initialize or reinitialize this object, with signal propagation - /// \param parameters a set of NameValuePairs to initialize or reinitialize this object - /// \param propagation the number of attached transformations the Initialize() signal should be passed - /// \details Initialize() is used to initialize or reinitialize an object using a variable number of - /// arbitrarily typed arguments. The function avoids the need for multiple constructors providing - /// all possible combintations of configurable parameters. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - virtual void Initialize(const NameValuePairs ¶meters=g_nullNameValuePairs, int propagation=-1) =0; - -private: - void IsolatedInitialize(const NameValuePairs ¶meters) - {CRYPTOPP_UNUSED(parameters); CRYPTOPP_ASSERT(false);} -}; - -/// \brief Multiple channels support for custom signal processing -/// \tparam T the class or type -/// \details T should be a BufferedTransformation derived class -template -class CRYPTOPP_NO_VTABLE Multichannel : public CustomFlushPropagation -{ -public: - bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) - {return this->ChannelFlush(DEFAULT_CHANNEL, hardFlush, propagation, blocking);} - - /// \brief Marks the end of a series of messages, with signal propagation - /// \param propagation the number of attached transformations the MessageSeriesEnd() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \details Each object that receives the signal will perform its processing, decrement - /// propagation, and then pass the signal on to attached transformations if the value is not 0. - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note There should be a MessageEnd() immediately before MessageSeriesEnd(). - bool MessageSeriesEnd(int propagation=-1, bool blocking=true) - {return this->ChannelMessageSeriesEnd(DEFAULT_CHANNEL, propagation, blocking);} - - /// \brief Request space which can be written into by the caller - /// \param size the requested size of the buffer - /// \details The purpose of this method is to help avoid extra memory allocations. - /// \details size is an \a IN and \a OUT parameter and used as a hint. When the call is made, - /// size is the requested size of the buffer. When the call returns, size is the size of - /// the array returned to the caller. - /// \details The base class implementation sets size to 0 and returns NULL. - /// \note Some objects, like ArraySink, cannot create a space because its fixed. In the case of - /// an ArraySink, the pointer to the array is returned and the size is remaining size. - byte * CreatePutSpace(size_t &size) - {return this->ChannelCreatePutSpace(DEFAULT_CHANNEL, size);} - - /// \brief Input multiple bytes for processing - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - /// \details Derived classes must implement Put2(). - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - {return this->ChannelPut2(DEFAULT_CHANNEL, inString, length, messageEnd, blocking);} - - /// \brief Input multiple bytes that may be modified by callee. - /// \param inString the byte buffer to process. - /// \param length the size of the string, in bytes. - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - /// \details Internally, PutModifiable2() calls Put2(). - size_t PutModifiable2(byte *inString, size_t length, int messageEnd, bool blocking) - {return this->ChannelPutModifiable2(DEFAULT_CHANNEL, inString, length, messageEnd, blocking);} - - // void ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1) - // {PropagateMessageSeriesEnd(propagation, channel);} - - /// \brief Request space which can be written into by the caller - /// \param channel the channel to process the data - /// \param size the requested size of the buffer - /// \return a pointer to a memory block with length size - /// \details The purpose of this method is to help avoid extra memory allocations. - /// \details size is an \a IN and \a OUT parameter and used as a hint. When the call is made, - /// size is the requested size of the buffer. When the call returns, size is the size of - /// the array returned to the caller. - /// \details The base class implementation sets size to 0 and returns NULL. - /// \note Some objects, like ArraySink(), cannot create a space because its fixed. In the case of - /// an ArraySink(), the pointer to the array is returned and the size is remaining size. - byte * ChannelCreatePutSpace(const std::string &channel, size_t &size) - {CRYPTOPP_UNUSED(channel); size = 0; return NULLPTR;} - - /// \brief Input multiple bytes that may be modified by callee on a channel - /// \param channel the channel to process the data. - /// \param inString the byte buffer to process - /// \param length the size of the string, in bytes - /// \return true if all bytes were processed, false otherwise. - bool ChannelPutModifiable(const std::string &channel, byte *inString, size_t length) - {this->ChannelPut(channel, inString, length); return false;} - - /// \brief Input multiple bytes for processing on a channel. - /// \param channel the channel to process the data. - /// \param begin the byte buffer to process. - /// \param length the size of the string, in bytes. - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one. - /// \param blocking specifies whether the object should block when processing input. - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - virtual size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking) =0; - - /// \brief Input multiple bytes that may be modified by callee on a channel - /// \param channel the channel to process the data - /// \param begin the byte buffer to process - /// \param length the size of the string, in bytes - /// \param messageEnd means how many filters to signal MessageEnd() to, including this one - /// \param blocking specifies whether the object should block when processing input - /// \return the number of bytes that remain to be processed (i.e., bytes not processed) - size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking) - {return ChannelPut2(channel, begin, length, messageEnd, blocking);} - - /// \brief Flush buffered input and/or output on a channel - /// \param channel the channel to flush the data - /// \param hardFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the ChannelFlush() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \return true of the Flush was successful - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - virtual bool ChannelFlush(const std::string &channel, bool hardFlush, int propagation=-1, bool blocking=true) =0; -}; - -/// \brief Provides auto signaling support -/// \tparam T BufferedTransformation derived class -template -class CRYPTOPP_NO_VTABLE AutoSignaling : public T -{ -public: - /// \brief Construct an AutoSignaling - /// \param propagation the propagation count - AutoSignaling(int propagation=-1) : m_autoSignalPropagation(propagation) {} - - /// \brief Set propagation of automatically generated and transferred signals - /// \param propagation then new value - /// \details Setting propagation to 0 means do not automatically generate signals. Setting - /// propagation to -1 means unlimited propagation. - void SetAutoSignalPropagation(int propagation) - {m_autoSignalPropagation = propagation;} - - /// \brief Retrieve automatic signal propagation value - /// \return the number of attached transformations the signal is propagated to. 0 indicates - /// the signal is only witnessed by this object - int GetAutoSignalPropagation() const - {return m_autoSignalPropagation;} - -private: - int m_autoSignalPropagation; -}; - -/// \brief Acts as a Source for pre-existing, static data -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Store : public AutoSignaling > -{ -public: - /// \brief Construct a Store - Store() : m_messageEnd(false) {} - - void IsolatedInitialize(const NameValuePairs ¶meters) - { - m_messageEnd = false; - StoreInitialize(parameters); - } - - unsigned int NumberOfMessages() const {return m_messageEnd ? 0 : 1;} - bool GetNextMessage(); - unsigned int CopyMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) const; - -protected: - virtual void StoreInitialize(const NameValuePairs ¶meters) =0; - - bool m_messageEnd; -}; - -/// \brief Implementation of BufferedTransformation's attachment interface -/// \details Sink is a cornerstone of the Pipeline trinity. Data flows from -/// Sources, through Filters, and then terminates in Sinks. The difference -/// between a Source and Filter is a Source \a pumps data, while a Filter does -/// not. The difference between a Filter and a Sink is a Filter allows an -/// attached transformation, while a Sink does not. -/// \details A Sink does not produce any retrievable output. -/// \details See the discussion of BufferedTransformation in cryptlib.h for -/// more details. -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Sink : public BufferedTransformation -{ -public: - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) - {CRYPTOPP_UNUSED(target); CRYPTOPP_UNUSED(transferBytes); CRYPTOPP_UNUSED(channel); CRYPTOPP_UNUSED(blocking); transferBytes = 0; return 0;} - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const - {CRYPTOPP_UNUSED(target); CRYPTOPP_UNUSED(begin); CRYPTOPP_UNUSED(end); CRYPTOPP_UNUSED(channel); CRYPTOPP_UNUSED(blocking); return 0;} -}; - -/// \brief Acts as an input discarding Filter or Sink -/// \details The BitBucket discards all input and returns 0 to the caller -/// to indicate all data was processed. -class CRYPTOPP_DLL BitBucket : public Bufferless -{ -public: - std::string AlgorithmName() const {return "BitBucket";} - void IsolatedInitialize(const NameValuePairs ¶ms) - {CRYPTOPP_UNUSED(params);} - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) - {CRYPTOPP_UNUSED(inString); CRYPTOPP_UNUSED(length); CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking); return 0;} -}; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/siphash.h b/third_party/cryptoppwin/include/cryptopp/siphash.h deleted file mode 100644 index 5eb53216..00000000 --- a/third_party/cryptoppwin/include/cryptopp/siphash.h +++ /dev/null @@ -1,314 +0,0 @@ -// siphash.h - written and placed in public domain by Jeffrey Walton. - -/// \file siphash.h -/// \brief Classes for SipHash message authentication code -/// \details SipHash computes a 64-bit or 128-bit message authentication code from a variable-length -/// message and 128-bit secret key. It was designed to be efficient even for short inputs, with -/// performance comparable to non-cryptographic hash functions. -/// \details To create a SipHash-2-4 object with a 64-bit MAC use code similar to the following. -///
  SecByteBlock key(16);
-///   prng.GenerateBlock(key, key.size());
-///
-///   SipHash<2,4,false> hash(key, key.size());
-///   hash.Update(...);
-///   hash.Final(...);
-/// \details To create a SipHash-2-4 object with a 128-bit MAC use code similar to the following. -///
  SecByteBlock key(16);
-///   prng.GenerateBlock(key, key.size());
-///
-///   SipHash<2,4,true> hash(key, key.size());
-///   hash.Update(...);
-///   hash.Final(...);
-/// \sa Jean-Philippe Aumasson and Daniel J. Bernstein SipHash: -/// a fast short-input PRF -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_SIPHASH_H -#define CRYPTOPP_SIPHASH_H - -#include "cryptlib.h" -#include "secblock.h" -#include "seckey.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SipHash message authentication code information -/// \tparam T_128bit flag indicating 128-bit (true) versus 64-bit (false) digest size -template -class SipHash_Info : public FixedKeyLength<16> -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "SipHash";} - CRYPTOPP_CONSTANT(DIGESTSIZE = (T_128bit ? 16 : 8)); -}; - -/// \brief SipHash message authentication code base class -/// \tparam C the number of compression rounds -/// \tparam D the number of finalization rounds -/// \tparam T_128bit flag indicating 128-bit (true) versus 64-bit (false) digest size -template -class SipHash_Base : public MessageAuthenticationCode, public SipHash_Info -{ -public: - static std::string StaticAlgorithmName() { - return std::string(SipHash_Info::StaticAlgorithmName())+"-"+IntToString(C)+"-"+IntToString(D); - } - - virtual ~SipHash_Base() {} - - SipHash_Base() : m_idx(0) {} - - virtual unsigned int DigestSize() const - {return SipHash_Info::DIGESTSIZE;} - virtual size_t MinKeyLength() const - {return SipHash_Info::MIN_KEYLENGTH;} - virtual size_t MaxKeyLength() const - {return SipHash_Info::MAX_KEYLENGTH;} - virtual size_t DefaultKeyLength() const - {return SipHash_Info::DEFAULT_KEYLENGTH;} - virtual size_t GetValidKeyLength(size_t keylength) const - {CRYPTOPP_UNUSED(keylength); return SipHash_Info::DEFAULT_KEYLENGTH;} - virtual IV_Requirement IVRequirement() const - {return SimpleKeyingInterface::NOT_RESYNCHRONIZABLE;} - virtual unsigned int IVSize() const - {return 0;} - virtual unsigned int OptimalBlockSize() const - {return sizeof(word64);} - virtual unsigned int OptimalDataAlignment () const - {return GetAlignmentOf();} - - virtual void Update(const byte *input, size_t length); - virtual void TruncatedFinal(byte *digest, size_t digestSize); - -protected: - - virtual void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - virtual void Restart(); - - inline void SIPROUND() - { - m_v[0] += m_v[1]; - m_v[1] = rotlConstant<13>(m_v[1]); - m_v[1] ^= m_v[0]; - m_v[0] = rotlConstant<32>(m_v[0]); - m_v[2] += m_v[3]; - m_v[3] = rotlConstant<16>(m_v[3]); - m_v[3] ^= m_v[2]; - m_v[0] += m_v[3]; - m_v[3] = rotlConstant<21>(m_v[3]); - m_v[3] ^= m_v[0]; - m_v[2] += m_v[1]; - m_v[1] = rotlConstant<17>(m_v[1]); - m_v[1] ^= m_v[2]; - m_v[2] = rotlConstant<32>(m_v[2]); - } - -private: - FixedSizeSecBlock m_v; - FixedSizeSecBlock m_k; - FixedSizeSecBlock m_b; - - // Tail bytes - FixedSizeSecBlock m_acc; - size_t m_idx; -}; - -/// \brief SipHash message authentication code -/// \tparam C the number of compression rounds -/// \tparam D the number of finalization rounds -/// \tparam T_128bit flag indicating 128-bit (true) versus 64-bit (false) digest size -/// \details SipHash computes a 64-bit or 128-bit message authentication code from a variable-length -/// message and 128-bit secret key. It was designed to be efficient even for short inputs, with -/// performance comparable to non-cryptographic hash functions. -/// \details To create a SipHash-2-4 object with a 64-bit MAC use code similar to the following. -///
  SecByteBlock key(16);
-///   prng.GenerateBlock(key, key.size());
-///
-///   SipHash<2,4,false> hash(key, key.size());
-///   hash.Update(...);
-///   hash.Final(...);
-/// \details To create a SipHash-2-4 object with a 128-bit MAC use code similar to the following. -///
  SecByteBlock key(16);
-///   prng.GenerateBlock(key, key.size());
-///
-///   SipHash<2,4,true> hash(key, key.size());
-///   hash.Update(...);
-///   hash.Final(...);
-/// \sa Jean-Philippe Aumasson and Daniel J. Bernstein SipHash: -/// a fast short-input PRF -/// \since Crypto++ 6.0 -template -class SipHash : public SipHash_Base -{ -public: - /// \brief Create a SipHash - SipHash() - {this->UncheckedSetKey(NULLPTR, 0, g_nullNameValuePairs);} - /// \brief Create a SipHash - /// \param key a byte array used to key the cipher - /// \param length the size of the byte array, in bytes - SipHash(const byte *key, unsigned int length) - {this->ThrowIfInvalidKeyLength(length); - this->UncheckedSetKey(key, length, g_nullNameValuePairs);} -}; - -template -void SipHash_Base::Update(const byte *input, size_t length) -{ - CRYPTOPP_ASSERT((input && length) || !length); - if (!length) return; - - if (m_idx) - { - size_t head = STDMIN(size_t(8U-m_idx), length); - std::memcpy(m_acc+m_idx, input, head); - m_idx += head; input += head; length -= head; - - if (m_idx == 8) - { - word64 m = GetWord(true, LITTLE_ENDIAN_ORDER, m_acc); - m_v[3] ^= m; - for (unsigned int i = 0; i < C; ++i) - SIPROUND(); - - m_v[0] ^= m; - m_b[0] += 8; - - m_idx = 0; - } - } - - while (length >= 8) - { - word64 m = GetWord(false, LITTLE_ENDIAN_ORDER, input); - m_v[3] ^= m; - for (unsigned int i = 0; i < C; ++i) - SIPROUND(); - - m_v[0] ^= m; - m_b[0] += 8; - - input += 8; - length -= 8; - } - - CRYPTOPP_ASSERT(length < 8); - size_t tail = length % 8; - if (tail) - { - std::memcpy(m_acc+m_idx, input, tail); - m_idx += tail; - } -} - -template -void SipHash_Base::TruncatedFinal(byte *digest, size_t digestSize) -{ - CRYPTOPP_ASSERT(digest); // Pointer is valid - - ThrowIfInvalidTruncatedSize(digestSize); - - // The high octet holds length and is digested mod 256 - m_b[0] += m_idx; m_b[0] <<= 56U; - switch (m_idx) - { - case 7: - m_b[0] |= ((word64)m_acc[6]) << 48; - // fall through - case 6: - m_b[0] |= ((word64)m_acc[5]) << 40; - // fall through - case 5: - m_b[0] |= ((word64)m_acc[4]) << 32; - // fall through - case 4: - m_b[0] |= ((word64)m_acc[3]) << 24; - // fall through - case 3: - m_b[0] |= ((word64)m_acc[2]) << 16; - // fall through - case 2: - m_b[0] |= ((word64)m_acc[1]) << 8; - // fall through - case 1: - m_b[0] |= ((word64)m_acc[0]); - // fall through - case 0: - break; - } - - m_v[3] ^= m_b[0]; - - for (unsigned int i=0; i::DIGESTSIZE)); - Restart(); -} - -template -void SipHash_Base::UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) -{ - CRYPTOPP_UNUSED(params); - if (key && length) - { - m_k[0] = GetWord(false, LITTLE_ENDIAN_ORDER, key); - m_k[1] = GetWord(false, LITTLE_ENDIAN_ORDER, key+8); - } - else - { - // Avoid Coverity finding - m_k[0] = m_k[1] = 0; - } - Restart(); -} - -template -void SipHash_Base::Restart () -{ - m_v[0] = W64LIT(0x736f6d6570736575); - m_v[1] = W64LIT(0x646f72616e646f6d); - m_v[2] = W64LIT(0x6c7967656e657261); - m_v[3] = W64LIT(0x7465646279746573); - - m_v[3] ^= m_k[1]; - m_v[2] ^= m_k[0]; - m_v[1] ^= m_k[1]; - m_v[0] ^= m_k[0]; - - if (T_128bit) - { - m_v[1] ^= 0xee; - } - - m_idx = 0; - m_b[0] = 0; -} - -NAMESPACE_END - -#endif // CRYPTOPP_SIPHASH_H diff --git a/third_party/cryptoppwin/include/cryptopp/skipjack.h b/third_party/cryptoppwin/include/cryptopp/skipjack.h deleted file mode 100644 index 96fdaf40..00000000 --- a/third_party/cryptoppwin/include/cryptopp/skipjack.h +++ /dev/null @@ -1,80 +0,0 @@ -// skipjack.h - originally written and placed in the public domain by Wei Dai - -/// \file skipjack.h -/// \brief Classes for the SKIPJACK block cipher -/// \details The Crypto++ implementation conforms to SKIPJACK and KEA -/// Algorithm Specifications published by NIST in May 1998. The library passes -/// known answer tests available in NIST SP800-17, Table 6, pp. 140-42. -/// \sa SKIPJACK -/// and KEA Algorithm Specifications (May 1998), -/// SKIPJACK on the -// Crypto++ wiki - -#ifndef CRYPTOPP_SKIPJACK_H -#define CRYPTOPP_SKIPJACK_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SKIPJACK block cipher information -struct SKIPJACK_Info : public FixedBlockSize<8>, public FixedKeyLength<10> -{ - CRYPTOPP_DLL static const char * CRYPTOPP_API StaticAlgorithmName() {return "SKIPJACK";} -}; - -/// \brief SKIPJACK block cipher -/// \details The Crypto++ implementation conforms to SKIPJACK and KEA -/// Algorithm Specifications published by NIST in May 1998. The library passes -/// known answer tests available in NIST SP800-17, Table 6, pp. 140-42. -/// \sa SKIPJACK -/// and KEA Algorithm Specifications (May 1998), -/// SKIPJACK on the -/// Crypto++ wiki -class SKIPJACK : public SKIPJACK_Info, public BlockCipherDocumentation -{ - /// \brief SKIPJACK block cipher default operation - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - unsigned int OptimalDataAlignment() const {return GetAlignmentOf();} - - protected: - static const byte fTable[256]; - - FixedSizeSecBlock tab; - }; - - /// \brief SKIPJACK block cipher encryption operation - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - private: - static const byte Se[256]; - static const word32 Te[4][256]; - }; - - /// \brief SKIPJACK block cipher decryption operation - class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - private: - static const byte Sd[256]; - static const word32 Td[4][256]; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef SKIPJACK::Encryption SKIPJACKEncryption; -typedef SKIPJACK::Decryption SKIPJACKDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/sm3.h b/third_party/cryptoppwin/include/cryptopp/sm3.h deleted file mode 100644 index fefcfec4..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sm3.h +++ /dev/null @@ -1,61 +0,0 @@ -// sm3.h - written and placed in the public domain by Jeffrey Walton and Han Lulu -// Based on the specification provided by Sean Shen and Xiaodong Lee. -// Based on code by Krzysztof Kwiatkowski and Jack Lloyd. -// Also see https://tools.ietf.org/html/draft-shen-sm3-hash. - -/// \file sm3.h -/// \brief Classes for the SM3 hash function -/// \details SM3 is a hash function designed by Xiaoyun Wang, et al. The hash is part of the -/// Chinese State Cryptography Administration portfolio. -/// \sa SM3 Hash Function and -/// Reference implementation using OpenSSL. -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_SM3_H -#define CRYPTOPP_SM3_H - -#include "config.h" -#include "iterhash.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SM3 hash function -/// \details SM3 is a hash function designed by Xiaoyun Wang, et al. The hash is part of the -/// Chinese State Cryptography Administration portfolio. -/// \sa SM3 Hash Function -/// \since Crypto++ 6.0 -class SM3 : public IteratedHashWithStaticTransform -{ -public: - /// \brief Initialize state array - /// \param state the state of the hash - /// \details InitState sets a state array to SM3 initial values - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState() and Transform(). External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - static void InitState(HashWordType *state); - - /// \brief Operate the hash - /// \param digest the state of the hash - /// \param data the data to be digested - /// \details Transform() operates the hash on data. When the call is invoked - /// digest holds initial or current state. Upon return digest holds - /// the hash or updated state. - /// \details Hashes which derive from IteratedHashWithStaticTransform provide static - /// member functions InitState() and Transform(). External classes, like SEAL and MDC, - /// can initialize state with a user provided key and operate the hash on the data - /// with the user supplied state. - static void Transform(HashWordType *digest, const HashWordType *data); - - /// \brief The algorithm name - /// \return C-style string "SM3" - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() { return "SM3"; } - -protected: - size_t HashMultipleBlocks(const HashWordType *input, size_t length); -}; - -NAMESPACE_END - -#endif // CRYPTOPP_SM3_H diff --git a/third_party/cryptoppwin/include/cryptopp/sm4.h b/third_party/cryptoppwin/include/cryptopp/sm4.h deleted file mode 100644 index dc41f732..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sm4.h +++ /dev/null @@ -1,96 +0,0 @@ -// sm4.h - written and placed in the public domain by Jeffrey Walton and Han Lulu - -/// \file sm4.h -/// \brief Classes for the SM4 block cipher -/// \details SM4 is a block cipher designed by Xiaoyun Wang, et al. The block cipher is part of the -/// Chinese State Cryptography Administration portfolio. The cipher was formerly known as SMS4. -/// \details SM4 encryption is accelerated on machines with AES-NI. Decryption is not accelerated because -/// it is not profitable. Thanks to Markku-Juhani Olavi Saarinen for help and the code. -/// \sa SMS4 Encryption Algorithm for Wireless Networks, -/// Reference implementation using OpenSSL and -/// Markku-Juhani Olavi Saarinen GitHub. -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_SM4_H -#define CRYPTOPP_SM4_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -#if (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86) -# ifndef CRYPTOPP_DISABLE_SM4_SIMD -# define CRYPTOPP_SM4_ADVANCED_PROCESS_BLOCKS 1 -# endif -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SM4 block cipher information -/// \since Crypto++ 6.0 -struct SM4_Info : public FixedBlockSize<16>, FixedKeyLength<16> -{ - static const std::string StaticAlgorithmName() - { - return "SM4"; - } -}; - -/// \brief Classes for the SM4 block cipher -/// \details SM4 is a block cipher designed by Xiaoyun Wang, et al. The block cipher is part of the -/// Chinese State Cryptography Administration portfolio. The cipher was formerly known as SMS4. -/// \sa SMS4 Encryption Algorithm for Wireless Networks -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE SM4 : public SM4_Info, public BlockCipherDocumentation -{ -public: - /// \brief SM4 block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - - SecBlock > m_rkeys; - mutable SecBlock > m_wspace; - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key - /// sizes are supported. - /// \details SM4 encryption is accelerated on machines with AES-NI. Decryption is - /// not accelerated because it is not profitable. Thanks to Markku-Juhani Olavi - /// Saarinen. - /// \since Crypto++ 6.0, AESNI encryption since Crypto++ 8.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - std::string AlgorithmProvider() const; - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; -#if CRYPTOPP_SM4_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key - /// sizes are supported. - /// \details SM4 encryption is accelerated on machines with AES-NI. Decryption is - /// not accelerated because it is not profitable. Thanks to Markku-Juhani Olavi - /// Saarinen. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_SM4_H diff --git a/third_party/cryptoppwin/include/cryptopp/smartptr.h b/third_party/cryptoppwin/include/cryptopp/smartptr.h deleted file mode 100644 index 4e16a7fe..00000000 --- a/third_party/cryptoppwin/include/cryptopp/smartptr.h +++ /dev/null @@ -1,257 +0,0 @@ -// smartptr.h - originally written and placed in the public domain by Wei Dai - -/// \file smartptr.h -/// \brief Classes for automatic resource management - -#ifndef CRYPTOPP_SMARTPTR_H -#define CRYPTOPP_SMARTPTR_H - -#include "config.h" -#include "stdcpp.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Manages resources for a single object -/// \tparam T class or type -/// \details \p simple_ptr is used frequently in the library to manage resources and -/// ensure cleanup under the RAII pattern (Resource Acquisition Is Initialization). -template class simple_ptr -{ -public: - simple_ptr(T *p = NULLPTR) : m_p(p) {} - ~simple_ptr() - { - delete m_p; - m_p = NULLPTR; - } - - T *m_p; -}; - -/// \brief Pointer that overloads operator -> -/// \tparam T class or type -/// \details member_ptr is used frequently in the library to avoid the issues related to -/// std::auto_ptr in C++11 (deprecated) and std::unique_ptr in C++03 (non-existent). -/// \bug Issue 48: "Use of auto_ptr -/// causes dirty compile under C++11" -template class member_ptr -{ -public: - explicit member_ptr(T *p = NULLPTR) : m_p(p) {} - - ~member_ptr(); - - const T& operator*() const { return *m_p; } - T& operator*() { return *m_p; } - - const T* operator->() const { return m_p; } - T* operator->() { return m_p; } - - const T* get() const { return m_p; } - T* get() { return m_p; } - - T* release() - { - T *old_p = m_p; - m_p = NULLPTR; - return old_p; - } - - void reset(T *p = NULLPTR); - -protected: - member_ptr(const member_ptr& rhs); // copy not allowed - void operator=(const member_ptr& rhs); // assignment not allowed - - T *m_p; -}; - -template member_ptr::~member_ptr() {delete m_p;} -template void member_ptr::reset(T *p) {delete m_p; m_p = p;} - -// ******************************************************** - -/// \brief Value pointer -/// \tparam T class or type -template class value_ptr : public member_ptr -{ -public: - value_ptr(const T &obj) : member_ptr(new T(obj)) {} - value_ptr(T *p = NULLPTR) : member_ptr(p) {} - value_ptr(const value_ptr& rhs) - : member_ptr(rhs.m_p ? new T(*rhs.m_p) : NULLPTR) {} - - value_ptr& operator=(const value_ptr& rhs); - bool operator==(const value_ptr& rhs) - { - return (!this->m_p && !rhs.m_p) || (this->m_p && rhs.m_p && *this->m_p == *rhs.m_p); - } -}; - -template value_ptr& value_ptr::operator=(const value_ptr& rhs) -{ - T *old_p = this->m_p; - this->m_p = rhs.m_p ? new T(*rhs.m_p) : NULLPTR; - delete old_p; - return *this; -} - -// ******************************************************** - -/// \brief A pointer which can be copied and cloned -/// \tparam T class or type -/// \details \p T should adhere to the \p Clonable interface -template class clonable_ptr : public member_ptr -{ -public: - clonable_ptr(const T &obj) : member_ptr(obj.Clone()) {} - clonable_ptr(T *p = NULLPTR) : member_ptr(p) {} - clonable_ptr(const clonable_ptr& rhs) - : member_ptr(rhs.m_p ? rhs.m_p->Clone() : NULLPTR) {} - - clonable_ptr& operator=(const clonable_ptr& rhs); -}; - -template clonable_ptr& clonable_ptr::operator=(const clonable_ptr& rhs) -{ - T *old_p = this->m_p; - this->m_p = rhs.m_p ? rhs.m_p->Clone() : NULLPTR; - delete old_p; - return *this; -} - -// ******************************************************** - -/// \brief Reference counted pointer -/// \tparam T class or type -/// \details users should declare \p m_referenceCount as std::atomic -/// (or similar) under C++ 11 -template class counted_ptr -{ -public: - explicit counted_ptr(T *p = NULLPTR); - counted_ptr(const T &r) : m_p(0) {attach(r);} - counted_ptr(const counted_ptr& rhs); - - ~counted_ptr(); - - const T& operator*() const { return *m_p; } - T& operator*() { return *m_p; } - - const T* operator->() const { return m_p; } - T* operator->() { return get(); } - - const T* get() const { return m_p; } - T* get(); - - void attach(const T &p); - - counted_ptr & operator=(const counted_ptr& rhs); - -private: - T *m_p; -}; - -template counted_ptr::counted_ptr(T *p) - : m_p(p) -{ - if (m_p) - m_p->m_referenceCount = 1; -} - -template counted_ptr::counted_ptr(const counted_ptr& rhs) - : m_p(rhs.m_p) -{ - if (m_p) - m_p->m_referenceCount++; -} - -template counted_ptr::~counted_ptr() -{ - if (m_p && --m_p->m_referenceCount == 0) - delete m_p; -} - -template void counted_ptr::attach(const T &r) -{ - if (m_p && --m_p->m_referenceCount == 0) - delete m_p; - if (r.m_referenceCount == 0) - { - m_p = r.clone(); - m_p->m_referenceCount = 1; - } - else - { - m_p = const_cast(&r); - m_p->m_referenceCount++; - } -} - -template T* counted_ptr::get() -{ - if (m_p && m_p->m_referenceCount > 1) - { - T *temp = m_p->clone(); - m_p->m_referenceCount--; - m_p = temp; - m_p->m_referenceCount = 1; - } - return m_p; -} - -template counted_ptr & counted_ptr::operator=(const counted_ptr& rhs) -{ - if (m_p != rhs.m_p) - { - if (m_p && --m_p->m_referenceCount == 0) - delete m_p; - m_p = rhs.m_p; - if (m_p) - m_p->m_referenceCount++; - } - return *this; -} - -// ******************************************************** - -/// \brief Manages resources for an array of objects -/// \tparam T class or type -template class vector_member_ptrs -{ -public: - /// Construct an array of \p T - /// \param size the size of the array, in elements - /// \details If \p T is a Plain Old Dataype (POD), then the array is uninitialized. - vector_member_ptrs(size_t size=0) - : m_size(size), m_ptr(new member_ptr[size]) {} - ~vector_member_ptrs() - {delete [] this->m_ptr;} - - member_ptr& operator[](size_t index) - {CRYPTOPP_ASSERT(indexm_size); return this->m_ptr[index];} - const member_ptr& operator[](size_t index) const - {CRYPTOPP_ASSERT(indexm_size); return this->m_ptr[index];} - - size_t size() const {return this->m_size;} - void resize(size_t newSize) - { - member_ptr *newPtr = new member_ptr[newSize]; - for (size_t i=0; im_size && im_ptr[i].release()); - delete [] this->m_ptr; - this->m_size = newSize; - this->m_ptr = newPtr; - } - -private: - vector_member_ptrs(const vector_member_ptrs &c); // copy not allowed - void operator=(const vector_member_ptrs &x); // assignment not allowed - - size_t m_size; - member_ptr *m_ptr; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/sosemanuk.h b/third_party/cryptoppwin/include/cryptopp/sosemanuk.h deleted file mode 100644 index fc1a1bb7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/sosemanuk.h +++ /dev/null @@ -1,62 +0,0 @@ -// sosemanuk.h - originally written and placed in the public domain by Wei Dai - -/// \file sosemanuk.h -/// \brief Classes for Sosemanuk stream cipher -/// \since Crypto++ 5.5 - -#ifndef CRYPTOPP_SOSEMANUK_H -#define CRYPTOPP_SOSEMANUK_H - -#include "strciphr.h" -#include "secblock.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_SOSEMANUK_ASM 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Sosemanuk stream cipher information -/// \since Crypto++ 5.5 -struct SosemanukInfo : public VariableKeyLength<16, 1, 32, 1, SimpleKeyingInterface::UNIQUE_IV, 16> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Sosemanuk";} -}; - -/// \brief Sosemanuk stream cipher implementation -/// \since Crypto++ 5.5 -class SosemanukPolicy : public AdditiveCipherConcretePolicy, public SosemanukInfo -{ -protected: - std::string AlgorithmProvider() const; - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length); - bool CipherIsRandomAccess() const {return false;} -#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) - unsigned int GetAlignment() const; - unsigned int GetOptimalBlockSize() const; -#endif - - FixedSizeSecBlock m_key; - FixedSizeAlignedSecBlock m_state; -}; - -/// \brief Sosemanuk stream cipher -/// \details is a stream cipher developed by Come Berbain, Olivier Billet, Anne Canteaut, Nicolas Courtois, -/// Henri Gilbert, Louis Goubin, Aline Gouget, Louis Granboulan, Cédric Lauradoux, Marine Minier, Thomas -/// Pornin and Hervé Sibert. Sosemanuk is one of the final four Profile 1 (software) ciphers selected for -/// the eSTREAM Portfolio. -/// \sa Sosemanuk -/// \since Crypto++ 5.5 -struct Sosemanuk : public SosemanukInfo, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal >, SosemanukInfo> Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/speck.h b/third_party/cryptoppwin/include/cryptopp/speck.h deleted file mode 100644 index 5ab3ece7..00000000 --- a/third_party/cryptoppwin/include/cryptopp/speck.h +++ /dev/null @@ -1,206 +0,0 @@ -// speck.h - written and placed in the public domain by Jeffrey Walton - -/// \file speck.h -/// \brief Classes for the Speck block cipher -/// \details Speck is a block cipher designed by Ray Beaulieu, Douglas Shors, Jason Smith, -/// Stefan Treatman-Clark, Bryan Weeks and Louis Wingers. -/// \sa The SIMON and SPECK Families of -/// Lightweight Block Ciphers, -/// The Simon and Speck GitHub and -/// SPECK on the Crypto++ wiki. -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_SPECK_H -#define CRYPTOPP_SPECK_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" - -#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || \ - CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARMV8 || \ - CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64 -# ifndef CRYPTOPP_DISABLE_SPECK_SIMD -# define CRYPTOPP_SPECK128_ADVANCED_PROCESS_BLOCKS 1 -# endif -#endif - -// Yet another SunStudio/SunCC workaround. Failed self tests -// in SSE code paths on i386 for SunStudio 12.3 and below. -#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x5120) -# undef CRYPTOPP_SPECK128_ADVANCED_PROCESS_BLOCKS -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief SPECK block cipher information -/// \tparam L block size of the cipher, in bytes -/// \tparam D default key length, in bytes -/// \tparam N minimum key length, in bytes -/// \tparam M maximum key length, in bytes -/// \since Crypto++ 6.0 -template -struct SPECK_Info : public FixedBlockSize, VariableKeyLength -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize(Keylength) - return "SPECK-" + IntToString(L*8); - } -}; - -/// \brief SPECK block cipher base class -/// \tparam W the word type -/// \details User code should use SPECK64 or SPECK128 -/// \sa SPECK64, SPECK128, SPECK -/// \since Crypto++ 6.0 -template -struct SPECK_Base -{ - virtual ~SPECK_Base() {} - SPECK_Base() : m_kwords(0), m_rounds(0) {} - - typedef SecBlock > AlignedSecBlock; - mutable AlignedSecBlock m_wspace; // workspace - AlignedSecBlock m_rkeys; // round keys - unsigned int m_kwords; // number of key words - unsigned int m_rounds; // number of rounds -}; - -/// \brief SPECK 64-bit block cipher -/// \details Speck is a block cipher designed by Ray Beaulieu, Douglas Shors, Jason Smith, -/// Stefan Treatman-Clark, Bryan Weeks and Louis Wingers. -/// \details SPECK64 provides 64-bit block size. The valid key sizes are 96-bit and 128-bit. -/// \sa SPECK64, SPECK128, The SIMON and SPECK -/// Families of Lightweight Block Ciphers, -/// The Simon and Speck GitHub, SPECK on the -/// Crypto++ wiki -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE SPECK64 : public SPECK_Info<8, 12, 12, 16>, public BlockCipherDocumentation -{ -public: - /// \brief SPECK64 block cipher base implementation - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : protected SPECK_Base, public BlockCipherImpl > - { - public: - /// \brief The algorithm name - /// \return the algorithm name - /// \details AlgorithmName returns the algorithm's name as a - /// member function. - std::string AlgorithmName() const { - return StaticAlgorithmName() + (m_kwords == 0 ? "" : - "(" + IntToString(m_kwords*sizeof(word32)*8) + ")"); - } - - std::string AlgorithmProvider() const; - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const; - - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - }; - - /// \brief SPECK64 encryption transformation - /// \details Enc provides the encryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief SPECK64 decryption transformation - /// \details Dec provides the decryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief SPECK 128-bit block cipher -/// \details Speck is a block cipher designed by Ray Beaulieu, Douglas Shors, Jason Smith, -/// Stefan Treatman-Clark, Bryan Weeks and Louis Wingers. -/// \details SPECK128 provides 128-bit block size. The valid key sizes are 128-bit, 192-bit and 256-bit. -/// \sa SPECK64, SPECK128, The SIMON and SPECK -/// Families of Lightweight Block Ciphers, -/// The Simon and Speck GitHub, SPECK on the -/// Crypto++ wiki -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE SPECK128 : public SPECK_Info<16, 16, 16, 32>, public BlockCipherDocumentation -{ -public: - /// \brief SPECK128 block cipher base implementation - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : protected SPECK_Base, public BlockCipherImpl > - { - public: - /// \brief The algorithm name - /// \return the algorithm name - /// \details AlgorithmName returns the algorithm's name as a - /// member function. - std::string AlgorithmName() const { - return StaticAlgorithmName() + (m_kwords == 0 ? "" : - "(" + IntToString(m_kwords*sizeof(word64)*8) + ")"); - } - - std::string AlgorithmProvider() const; - - /// \brief Provides input and output data alignment for optimal performance. - /// \return the input data alignment that provides optimal performance - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const; - - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - }; - - /// \brief SPECK128 encryption transformation - /// \details Enc provides the encryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; -#if CRYPTOPP_SPECK128_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - /// \brief SPECK128 decryption transformation - /// \details Dec provides the decryption transformation. - /// All key sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; -#if CRYPTOPP_SPECK128_ADVANCED_PROCESS_BLOCKS - size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const; -#endif - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -NAMESPACE_END - -#endif // CRYPTOPP_SPECK_H diff --git a/third_party/cryptoppwin/include/cryptopp/square.h b/third_party/cryptoppwin/include/cryptopp/square.h deleted file mode 100644 index e43e796d..00000000 --- a/third_party/cryptoppwin/include/cryptopp/square.h +++ /dev/null @@ -1,63 +0,0 @@ -// square.h - originally written and placed in the public domain by Wei Dai - -/// \file square.h -/// \brief Classes for the Square block cipher - -#ifndef CRYPTOPP_SQUARE_H -#define CRYPTOPP_SQUARE_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Square block cipher information -/// \since Crypto++ 2.2 -struct Square_Info : public FixedBlockSize<16>, public FixedKeyLength<16>, FixedRounds<8> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Square";} -}; - -/// \brief Square block cipher -/// \sa Square -/// \since Crypto++ 2.2 -class Square : public Square_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - FixedSizeSecBlock m_roundkeys; - }; - - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - private: - static const byte Se[256]; - static const word32 Te[4][256]; - }; - - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - private: - static const byte Sd[256]; - static const word32 Td[4][256]; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Square::Encryption SquareEncryption; -typedef Square::Decryption SquareDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/stdcpp.h b/third_party/cryptoppwin/include/cryptopp/stdcpp.h deleted file mode 100644 index 4b5d8426..00000000 --- a/third_party/cryptoppwin/include/cryptopp/stdcpp.h +++ /dev/null @@ -1,101 +0,0 @@ -// stdcpp.h - originally written and placed in the public domain by Wei Dai - -/// \file stdcpp.h -/// \brief Common C++ header files - -#ifndef CRYPTOPP_STDCPP_H -#define CRYPTOPP_STDCPP_H - -#if (CRYPTOPP_MSC_VERSION >= 1500) -#define _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// http://connect.microsoft.com/VisualStudio/feedback/details/1600701/type-info-does-not-compile-with-has-exceptions-0 -#if defined(CRYPTOPP_MSC_VERSION) && (CRYPTOPP_MSC_VERSION < 1900) && defined(_HAS_EXCEPTIONS) && (_HAS_EXCEPTIONS == 0) -namespace std { - using ::type_info; -} -#endif - -// workaround needed for IBM XLC and debug heaps on AIX -#if defined(_AIX) && (defined(__xlc__) || defined(__xlC__) || defined(__ibmxl__)) -# if defined(__DEBUG_ALLOC__) -namespace std { - using ::_debug_memset; - using ::_debug_memcpy; -} -# endif -#endif - -// make_unchecked_array_iterator -#if (CRYPTOPP_MSC_VERSION >= 1600) -#include -#endif - -#if defined(CRYPTOPP_CXX11_ATOMIC) -#include -#endif - -#if defined(CRYPTOPP_CXX11_SYNCHRONIZATION) -#include -#endif - -#if defined(CRYPTOPP_CXX11_RVALUES) -# include -#endif - -#include -#include -#include -#include - -// It is 2019 and VS2017/Win10 still can't compile a -// program that includes without making users -// do something special. "Epic fail" comes to mind. -// Also see https://github.com/weidai11/cryptopp/issues/781 -#ifndef CRYPTOPP_MSC_VERSION -# include -#endif - -// uintptr_t and ptrdiff_t -#if defined(__SUNPRO_CC) -# if (__SUNPRO_CC >= 0x5100) -# include -# endif -#elif defined(CRYPTOPP_MSC_VERSION) -# if (CRYPTOPP_MSC_VERSION >= 1700) -# include -# else -# include -# endif -#elif (__cplusplus < 201103L) -# include -#endif - -// workaround needed on Sun Studio 12u1 Sun C++ 5.10 SunOS_i386 128229-02 2009/09/21 -#ifdef CRYPTOPP_INCLUDE_VECTOR_CC -# include -#endif - -// C++Builder's standard library (Dinkumware) do not have C's global log() function -// https://github.com/weidai11/cryptopp/issues/520 -#ifdef __BORLANDC__ -using std::log; -#endif - -#endif // CRYPTOPP_STDCPP_H diff --git a/third_party/cryptoppwin/include/cryptopp/strciphr.h b/third_party/cryptoppwin/include/cryptopp/strciphr.h deleted file mode 100644 index ef8989db..00000000 --- a/third_party/cryptoppwin/include/cryptopp/strciphr.h +++ /dev/null @@ -1,737 +0,0 @@ -// strciphr.h - originally written and placed in the public domain by Wei Dai - -/// \file strciphr.h -/// \brief Classes for implementing stream ciphers -/// \details This file contains helper classes for implementing stream ciphers. -/// All this infrastructure may look very complex compared to what's in Crypto++ 4.x, -/// but stream ciphers implementations now support a lot of new functionality, -/// including better performance (minimizing copying), resetting of keys and IVs, and -/// methods to query which features are supported by a cipher. -/// \details Here's an explanation of these classes. The word "policy" is used here to -/// mean a class with a set of methods that must be implemented by individual stream -/// cipher implementations. This is usually much simpler than the full stream cipher -/// API, which is implemented by either AdditiveCipherTemplate or CFB_CipherTemplate -/// using the policy. So for example, an implementation of SEAL only needs to implement -/// the AdditiveCipherAbstractPolicy interface (since it's an additive cipher, i.e., it -/// xors a keystream into the plaintext). See this line in seal.h: -///
-///     typedef SymmetricCipherFinal\, AdditiveCipherTemplate\<\> \> \> Encryption;
-/// 
-/// \details AdditiveCipherTemplate and CFB_CipherTemplate are designed so that they don't -/// need to take a policy class as a template parameter (although this is allowed), so -/// that their code is not duplicated for each new cipher. Instead they each get a -/// reference to an abstract policy interface by calling AccessPolicy() on itself, so -/// AccessPolicy() must be overridden to return the actual policy reference. This is done -/// by the ConcretePolicyHolder class. Finally, SymmetricCipherFinal implements the -/// constructors and other functions that must be implemented by the most derived class. - -#ifndef CRYPTOPP_STRCIPHR_H -#define CRYPTOPP_STRCIPHR_H - -#include "config.h" - -#if CRYPTOPP_MSC_VERSION -# pragma warning(push) -# pragma warning(disable: 4127 4189 4231 4275) -#endif - -#include "cryptlib.h" -#include "seckey.h" -#include "secblock.h" -#include "argnames.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Access a stream cipher policy object -/// \tparam POLICY_INTERFACE class implementing AbstractPolicyHolder -/// \tparam BASE class or type to use as a base class -template -class CRYPTOPP_NO_VTABLE AbstractPolicyHolder : public BASE -{ -public: - typedef POLICY_INTERFACE PolicyInterface; - virtual ~AbstractPolicyHolder() {} - -protected: - virtual const POLICY_INTERFACE & GetPolicy() const =0; - virtual POLICY_INTERFACE & AccessPolicy() =0; -}; - -/// \brief Stream cipher policy object -/// \tparam POLICY class implementing AbstractPolicyHolder -/// \tparam BASE class or type to use as a base class -template -class ConcretePolicyHolder : public BASE, protected POLICY -{ -public: - virtual ~ConcretePolicyHolder() {} -protected: - const POLICY_INTERFACE & GetPolicy() const {return *this;} - POLICY_INTERFACE & AccessPolicy() {return *this;} -}; - -/// \brief Keystream operation flags -/// \sa AdditiveCipherAbstractPolicy::GetBytesPerIteration(), AdditiveCipherAbstractPolicy::GetOptimalBlockSize() -/// and AdditiveCipherAbstractPolicy::GetAlignment() -enum KeystreamOperationFlags { - /// \brief Output buffer is aligned - OUTPUT_ALIGNED=1, - /// \brief Input buffer is aligned - INPUT_ALIGNED=2, - /// \brief Input buffer is NULL - INPUT_NULL = 4 -}; - -/// \brief Keystream operation flags -/// \sa AdditiveCipherAbstractPolicy::GetBytesPerIteration(), AdditiveCipherAbstractPolicy::GetOptimalBlockSize() -/// and AdditiveCipherAbstractPolicy::GetAlignment() -enum KeystreamOperation { - /// \brief Write the keystream to the output buffer, input is NULL - WRITE_KEYSTREAM = INPUT_NULL, - /// \brief Write the keystream to the aligned output buffer, input is NULL - WRITE_KEYSTREAM_ALIGNED = INPUT_NULL | OUTPUT_ALIGNED, - /// \brief XOR the input buffer and keystream, write to the output buffer - XOR_KEYSTREAM = 0, - /// \brief XOR the aligned input buffer and keystream, write to the output buffer - XOR_KEYSTREAM_INPUT_ALIGNED = INPUT_ALIGNED, - /// \brief XOR the input buffer and keystream, write to the aligned output buffer - XOR_KEYSTREAM_OUTPUT_ALIGNED= OUTPUT_ALIGNED, - /// \brief XOR the aligned input buffer and keystream, write to the aligned output buffer - XOR_KEYSTREAM_BOTH_ALIGNED = OUTPUT_ALIGNED | INPUT_ALIGNED -}; - -/// \brief Policy object for additive stream ciphers -struct CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AdditiveCipherAbstractPolicy -{ - virtual ~AdditiveCipherAbstractPolicy() {} - - /// \brief Provides data alignment requirements - /// \return data alignment requirements, in bytes - /// \details Internally, the default implementation returns 1. If the stream cipher is implemented - /// using an SSE2 ASM or intrinsics, then the value returned is usually 16. - virtual unsigned int GetAlignment() const {return 1;} - - /// \brief Provides number of bytes operated upon during an iteration - /// \return bytes operated upon during an iteration, in bytes - /// \sa GetOptimalBlockSize() - virtual unsigned int GetBytesPerIteration() const =0; - - /// \brief Provides number of ideal bytes to process - /// \return the ideal number of bytes to process - /// \details Internally, the default implementation returns GetBytesPerIteration() - /// \sa GetBytesPerIteration() - virtual unsigned int GetOptimalBlockSize() const {return GetBytesPerIteration();} - - /// \brief Provides buffer size based on iterations - /// \return the buffer size based on iterations, in bytes - virtual unsigned int GetIterationsToBuffer() const =0; - - /// \brief Generate the keystream - /// \param keystream the key stream - /// \param iterationCount the number of iterations to generate the key stream - /// \sa CanOperateKeystream(), OperateKeystream(), WriteKeystream() - virtual void WriteKeystream(byte *keystream, size_t iterationCount) - {OperateKeystream(KeystreamOperation(INPUT_NULL | static_cast(IsAlignedOn(keystream, GetAlignment()))), keystream, NULLPTR, iterationCount);} - - /// \brief Flag indicating - /// \return true if the stream can be generated independent of the transformation input, false otherwise - /// \sa CanOperateKeystream(), OperateKeystream(), WriteKeystream() - virtual bool CanOperateKeystream() const {return false;} - - /// \brief Operates the keystream - /// \param operation the operation with additional flags - /// \param output the output buffer - /// \param input the input buffer - /// \param iterationCount the number of iterations to perform on the input - /// \details OperateKeystream() will attempt to operate upon GetOptimalBlockSize() buffer, - /// which will be derived from GetBytesPerIteration(). - /// \sa CanOperateKeystream(), OperateKeystream(), WriteKeystream(), KeystreamOperation() - virtual void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount) - {CRYPTOPP_UNUSED(operation); CRYPTOPP_UNUSED(output); CRYPTOPP_UNUSED(input); - CRYPTOPP_UNUSED(iterationCount); CRYPTOPP_ASSERT(false);} - - /// \brief Key the cipher - /// \param params set of NameValuePairs use to initialize this object - /// \param key a byte array used to key the cipher - /// \param length the size of the key array - virtual void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) =0; - - /// \brief Resynchronize the cipher - /// \param keystreamBuffer the keystream buffer - /// \param iv a byte array used to resynchronize the cipher - /// \param length the size of the IV array - virtual void CipherResynchronize(byte *keystreamBuffer, const byte *iv, size_t length) - {CRYPTOPP_UNUSED(keystreamBuffer); CRYPTOPP_UNUSED(iv); CRYPTOPP_UNUSED(length); - throw NotImplemented("SimpleKeyingInterface: this object doesn't support resynchronization");} - - /// \brief Flag indicating random access - /// \return true if the cipher is seekable, false otherwise - /// \sa SeekToIteration() - virtual bool CipherIsRandomAccess() const =0; - - /// \brief Seeks to a random position in the stream - /// \sa CipherIsRandomAccess() - virtual void SeekToIteration(lword iterationCount) - {CRYPTOPP_UNUSED(iterationCount); CRYPTOPP_ASSERT(!CipherIsRandomAccess()); - throw NotImplemented("StreamTransformation: this object doesn't support random access");} - - /// \brief Retrieve the provider of this algorithm - /// \return the algorithm provider - /// \details The algorithm provider can be a name like "C++", "SSE", "NEON", "AESNI", - /// "ARMv8" and "Power8". C++ is standard C++ code. Other labels, like SSE, - /// usually indicate a specialized implementation using instructions from a higher - /// instruction set architecture (ISA). Future labels may include external hardware - /// like a hardware security module (HSM). - /// \details Generally speaking Wei Dai's original IA-32 ASM code falls under "SSE2". - /// Labels like "SSSE3" and "SSE4.1" follow after Wei's code and use intrinsics - /// instead of ASM. - /// \details Algorithms which combine different instructions or ISAs provide the - /// dominant one. For example on x86 AES/GCM returns "AESNI" rather than - /// "CLMUL" or "AES+SSE4.1" or "AES+CLMUL" or "AES+SSE4.1+CLMUL". - /// \note Provider is not universally implemented yet. - virtual std::string AlgorithmProvider() const { return "C++"; } -}; - -/// \brief Base class for additive stream ciphers -/// \tparam WT word type -/// \tparam W count of words -/// \tparam X bytes per iteration count -/// \tparam BASE AdditiveCipherAbstractPolicy derived base class -template -struct CRYPTOPP_NO_VTABLE AdditiveCipherConcretePolicy : public BASE -{ - /// \brief Word type for the cipher - typedef WT WordType; - - /// \brief Number of bytes for an iteration - /// \details BYTES_PER_ITERATION is the product sizeof(WordType) * W. - /// For example, ChaCha uses 16 each word32, and the value of - /// BYTES_PER_ITERATION is 64. Each invocation of the ChaCha block function - /// produces 64 bytes of keystream. - CRYPTOPP_CONSTANT(BYTES_PER_ITERATION = sizeof(WordType) * W); - - virtual ~AdditiveCipherConcretePolicy() {} - - /// \brief Provides data alignment requirements - /// \return data alignment requirements, in bytes - /// \details Internally, the default implementation returns 1. If the stream - /// cipher is implemented using an SSE2 ASM or intrinsics, then the value - /// returned is usually 16. - unsigned int GetAlignment() const {return GetAlignmentOf();} - - /// \brief Provides number of bytes operated upon during an iteration - /// \return bytes operated upon during an iteration, in bytes - /// \sa GetOptimalBlockSize() - unsigned int GetBytesPerIteration() const {return BYTES_PER_ITERATION;} - - /// \brief Provides buffer size based on iterations - /// \return the buffer size based on iterations, in bytes - unsigned int GetIterationsToBuffer() const {return X;} - - /// \brief Flag indicating - /// \return true if the stream can be generated independent of the - /// transformation input, false otherwise - /// \sa CanOperateKeystream(), OperateKeystream(), WriteKeystream() - bool CanOperateKeystream() const {return true;} - - /// \brief Operates the keystream - /// \param operation the operation with additional flags - /// \param output the output buffer - /// \param input the input buffer - /// \param iterationCount the number of iterations to perform on the input - /// \details OperateKeystream() will attempt to operate upon GetOptimalBlockSize() buffer, - /// which will be derived from GetBytesPerIteration(). - /// \sa CanOperateKeystream(), OperateKeystream(), WriteKeystream(), KeystreamOperation() - virtual void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount) =0; -}; - -/// \brief Helper macro to implement OperateKeystream -/// \param x KeystreamOperation mask -/// \param b Endian order -/// \param i index in output buffer -/// \param a value to output -#define CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, b, i, a) \ - PutWord(((x & OUTPUT_ALIGNED) != 0), b, output+i*sizeof(WordType), (x & INPUT_NULL) ? (a) : (a) ^ GetWord(((x & INPUT_ALIGNED) != 0), b, input+i*sizeof(WordType))); - -/// \brief Helper macro to implement OperateKeystream -/// \param x KeystreamOperation mask -/// \param i index in output buffer -/// \param a value to output -#define CRYPTOPP_KEYSTREAM_OUTPUT_XMM(x, i, a) {\ - __m128i t = (x & INPUT_NULL) ? a : _mm_xor_si128(a, (x & INPUT_ALIGNED) ? _mm_load_si128((__m128i *)input+i) : _mm_loadu_si128((__m128i *)input+i));\ - if (x & OUTPUT_ALIGNED) _mm_store_si128((__m128i *)output+i, t);\ - else _mm_storeu_si128((__m128i *)output+i, t);} - -/// \brief Helper macro to implement OperateKeystream -#define CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH(x, y) \ - switch (operation) \ - { \ - case WRITE_KEYSTREAM: \ - x(EnumToInt(WRITE_KEYSTREAM)) \ - break; \ - case XOR_KEYSTREAM: \ - x(EnumToInt(XOR_KEYSTREAM)) \ - input += y; \ - break; \ - case XOR_KEYSTREAM_INPUT_ALIGNED: \ - x(EnumToInt(XOR_KEYSTREAM_INPUT_ALIGNED)) \ - input += y; \ - break; \ - case XOR_KEYSTREAM_OUTPUT_ALIGNED: \ - x(EnumToInt(XOR_KEYSTREAM_OUTPUT_ALIGNED)) \ - input += y; \ - break; \ - case WRITE_KEYSTREAM_ALIGNED: \ - x(EnumToInt(WRITE_KEYSTREAM_ALIGNED)) \ - break; \ - case XOR_KEYSTREAM_BOTH_ALIGNED: \ - x(EnumToInt(XOR_KEYSTREAM_BOTH_ALIGNED)) \ - input += y; \ - break; \ - } \ - output += y; - -/// \brief Base class for additive stream ciphers with SymmetricCipher interface -/// \tparam BASE AbstractPolicyHolder base class -template > -class CRYPTOPP_NO_VTABLE AdditiveCipherTemplate : public BASE, public RandomNumberGenerator -{ -public: - virtual ~AdditiveCipherTemplate() {} - AdditiveCipherTemplate() : m_leftOver(0) {} - - /// \brief Generate random array of bytes - /// \param output the byte buffer - /// \param size the length of the buffer, in bytes - /// \details All generated values are uniformly distributed over the range specified - /// within the constraints of a particular generator. - void GenerateBlock(byte *output, size_t size); - - /// \brief Apply keystream to data - /// \param outString a buffer to write the transformed data - /// \param inString a buffer to read the data - /// \param length the size of the buffers, in bytes - /// \details This is the primary method to operate a stream cipher. For example: - ///
-	///     size_t size = 30;
-	///     byte plain[size] = "Do or do not; there is no try";
-	///     byte cipher[size];
-	///     ...
-	///     ChaCha20 chacha(key, keySize);
-	///     chacha.ProcessData(cipher, plain, size);
-	/// 
- /// \details You should use distinct buffers for inString and outString. If the buffers - /// are the same, then the data will be copied to an internal buffer to avoid GCC alias - /// violations. The internal copy will impact performance. - /// \sa Issue 1088, 36% loss - /// of performance with AES, Issue - /// 1010, HIGHT cipher troubles with FileSource - void ProcessData(byte *outString, const byte *inString, size_t length); - - /// \brief Resynchronize the cipher - /// \param iv a byte array used to resynchronize the cipher - /// \param length the size of the IV array - void Resynchronize(const byte *iv, int length=-1); - - /// \brief Provides number of ideal bytes to process - /// \return the ideal number of bytes to process - /// \details Internally, the default implementation returns GetBytesPerIteration() - /// \sa GetBytesPerIteration() and GetOptimalNextBlockSize() - unsigned int OptimalBlockSize() const {return this->GetPolicy().GetOptimalBlockSize();} - - /// \brief Provides number of ideal bytes to process - /// \return the ideal number of bytes to process - /// \details Internally, the default implementation returns remaining unprocessed bytes - /// \sa GetBytesPerIteration() and OptimalBlockSize() - unsigned int GetOptimalNextBlockSize() const {return (unsigned int)this->m_leftOver;} - - /// \brief Provides number of ideal data alignment - /// \return the ideal data alignment, in bytes - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const {return this->GetPolicy().GetAlignment();} - - /// \brief Determines if the cipher is self inverting - /// \return true if the stream cipher is self inverting, false otherwise - bool IsSelfInverting() const {return true;} - - /// \brief Determines if the cipher is a forward transformation - /// \return true if the stream cipher is a forward transformation, false otherwise - bool IsForwardTransformation() const {return true;} - - /// \brief Flag indicating random access - /// \return true if the cipher is seekable, false otherwise - /// \sa Seek() - bool IsRandomAccess() const {return this->GetPolicy().CipherIsRandomAccess();} - - /// \brief Seeks to a random position in the stream - /// \param position the absolute position in the stream - /// \sa IsRandomAccess() - void Seek(lword position); - - /// \brief Retrieve the provider of this algorithm - /// \return the algorithm provider - /// \details The algorithm provider can be a name like "C++", "SSE", "NEON", "AESNI", - /// "ARMv8" and "Power8". C++ is standard C++ code. Other labels, like SSE, - /// usually indicate a specialized implementation using instructions from a higher - /// instruction set architecture (ISA). Future labels may include external hardware - /// like a hardware security module (HSM). - /// \details Generally speaking Wei Dai's original IA-32 ASM code falls under "SSE2". - /// Labels like "SSSE3" and "SSE4.1" follow after Wei's code and use intrinsics - /// instead of ASM. - /// \details Algorithms which combine different instructions or ISAs provide the - /// dominant one. For example on x86 AES/GCM returns "AESNI" rather than - /// "CLMUL" or "AES+SSE4.1" or "AES+CLMUL" or "AES+SSE4.1+CLMUL". - /// \note Provider is not universally implemented yet. - std::string AlgorithmProvider() const { return this->GetPolicy().AlgorithmProvider(); } - - typedef typename BASE::PolicyInterface PolicyInterface; - -protected: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - - unsigned int GetBufferByteSize(const PolicyInterface &policy) const {return policy.GetBytesPerIteration() * policy.GetIterationsToBuffer();} - - inline byte * KeystreamBufferBegin() {return this->m_buffer.data();} - inline byte * KeystreamBufferEnd() {return (PtrAdd(this->m_buffer.data(), this->m_buffer.size()));} - - AlignedSecByteBlock m_buffer; - size_t m_leftOver; -}; - -/// \brief Policy object for feedback based stream ciphers -class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CFB_CipherAbstractPolicy -{ -public: - virtual ~CFB_CipherAbstractPolicy() {} - - /// \brief Provides data alignment requirements - /// \return data alignment requirements, in bytes - /// \details Internally, the default implementation returns 1. If the stream cipher is implemented - /// using an SSE2 ASM or intrinsics, then the value returned is usually 16. - virtual unsigned int GetAlignment() const =0; - - /// \brief Provides number of bytes operated upon during an iteration - /// \return bytes operated upon during an iteration, in bytes - /// \sa GetOptimalBlockSize() - virtual unsigned int GetBytesPerIteration() const =0; - - /// \brief Access the feedback register - /// \return pointer to the first byte of the feedback register - virtual byte * GetRegisterBegin() =0; - - /// \brief TODO - virtual void TransformRegister() =0; - - /// \brief Flag indicating iteration support - /// \return true if the cipher supports iteration, false otherwise - virtual bool CanIterate() const {return false;} - - /// \brief Iterate the cipher - /// \param output the output buffer - /// \param input the input buffer - /// \param dir the direction of the cipher - /// \param iterationCount the number of iterations to perform on the input - /// \sa IsSelfInverting() and IsForwardTransformation() - virtual void Iterate(byte *output, const byte *input, CipherDir dir, size_t iterationCount) - {CRYPTOPP_UNUSED(output); CRYPTOPP_UNUSED(input); CRYPTOPP_UNUSED(dir); - CRYPTOPP_UNUSED(iterationCount); CRYPTOPP_ASSERT(false); - throw Exception(Exception::OTHER_ERROR, "SimpleKeyingInterface: unexpected error");} - - /// \brief Key the cipher - /// \param params set of NameValuePairs use to initialize this object - /// \param key a byte array used to key the cipher - /// \param length the size of the key array - virtual void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length) =0; - - /// \brief Resynchronize the cipher - /// \param iv a byte array used to resynchronize the cipher - /// \param length the size of the IV array - virtual void CipherResynchronize(const byte *iv, size_t length) - {CRYPTOPP_UNUSED(iv); CRYPTOPP_UNUSED(length); - throw NotImplemented("SimpleKeyingInterface: this object doesn't support resynchronization");} - - /// \brief Retrieve the provider of this algorithm - /// \return the algorithm provider - /// \details The algorithm provider can be a name like "C++", "SSE", "NEON", "AESNI", - /// "ARMv8" and "Power8". C++ is standard C++ code. Other labels, like SSE, - /// usually indicate a specialized implementation using instructions from a higher - /// instruction set architecture (ISA). Future labels may include external hardware - /// like a hardware security module (HSM). - /// \details Generally speaking Wei Dai's original IA-32 ASM code falls under "SSE2". - /// Labels like "SSSE3" and "SSE4.1" follow after Wei's code and use intrinsics - /// instead of ASM. - /// \details Algorithms which combine different instructions or ISAs provide the - /// dominant one. For example on x86 AES/GCM returns "AESNI" rather than - /// "CLMUL" or "AES+SSE4.1" or "AES+CLMUL" or "AES+SSE4.1+CLMUL". - /// \note Provider is not universally implemented yet. - virtual std::string AlgorithmProvider() const { return "C++"; } -}; - -/// \brief Base class for feedback based stream ciphers -/// \tparam WT word type -/// \tparam W count of words -/// \tparam BASE CFB_CipherAbstractPolicy derived base class -template -struct CRYPTOPP_NO_VTABLE CFB_CipherConcretePolicy : public BASE -{ - typedef WT WordType; - - virtual ~CFB_CipherConcretePolicy() {} - - /// \brief Provides data alignment requirements - /// \return data alignment requirements, in bytes - /// \details Internally, the default implementation returns 1. If the stream cipher is implemented - /// using an SSE2 ASM or intrinsics, then the value returned is usually 16. - unsigned int GetAlignment() const {return sizeof(WordType);} - - /// \brief Provides number of bytes operated upon during an iteration - /// \return bytes operated upon during an iteration, in bytes - /// \sa GetOptimalBlockSize() - unsigned int GetBytesPerIteration() const {return sizeof(WordType) * W;} - - /// \brief Flag indicating iteration support - /// \return true if the cipher supports iteration, false otherwise - bool CanIterate() const {return true;} - - /// \brief Perform one iteration in the forward direction - void TransformRegister() {this->Iterate(NULLPTR, NULLPTR, ENCRYPTION, 1);} - - /// \brief Provides alternate access to a feedback register - /// \tparam B enumeration indicating endianness - /// \details RegisterOutput() provides alternate access to the feedback register. The - /// enumeration B is BigEndian or LittleEndian. Repeatedly applying operator() - /// results in advancing in the register. - template - struct RegisterOutput - { - RegisterOutput(byte *output, const byte *input, CipherDir dir) - : m_output(output), m_input(input), m_dir(dir) {} - - /// \brief XOR feedback register with data - /// \param registerWord data represented as a word type - /// \return reference to the next feedback register word - inline RegisterOutput& operator()(WordType ®isterWord) - { - //CRYPTOPP_ASSERT(IsAligned(m_output)); - //CRYPTOPP_ASSERT(IsAligned(m_input)); - - if (!NativeByteOrderIs(B::ToEnum())) - registerWord = ByteReverse(registerWord); - - if (m_dir == ENCRYPTION) - { - if (m_input == NULLPTR) - { - CRYPTOPP_ASSERT(m_output == NULLPTR); - } - else - { - // WordType ct = *(const WordType *)m_input ^ registerWord; - WordType ct = GetWord(false, NativeByteOrder::ToEnum(), m_input) ^ registerWord; - registerWord = ct; - - // *(WordType*)m_output = ct; - PutWord(false, NativeByteOrder::ToEnum(), m_output, ct); - - m_input += sizeof(WordType); - m_output += sizeof(WordType); - } - } - else - { - // WordType ct = *(const WordType *)m_input; - WordType ct = GetWord(false, NativeByteOrder::ToEnum(), m_input); - - // *(WordType*)m_output = registerWord ^ ct; - PutWord(false, NativeByteOrder::ToEnum(), m_output, registerWord ^ ct); - registerWord = ct; - - m_input += sizeof(WordType); - m_output += sizeof(WordType); - } - - // registerWord is left unreversed so it can be xor-ed with further input - - return *this; - } - - byte *m_output; - const byte *m_input; - CipherDir m_dir; - }; -}; - -/// \brief Base class for feedback based stream ciphers with SymmetricCipher interface -/// \tparam BASE AbstractPolicyHolder base class -template -class CRYPTOPP_NO_VTABLE CFB_CipherTemplate : public BASE -{ -public: - virtual ~CFB_CipherTemplate() {} - CFB_CipherTemplate() : m_leftOver(0) {} - - /// \brief Apply keystream to data - /// \param outString a buffer to write the transformed data - /// \param inString a buffer to read the data - /// \param length the size of the buffers, in bytes - /// \details This is the primary method to operate a stream cipher. For example: - ///
-	///     size_t size = 30;
-	///     byte plain[size] = "Do or do not; there is no try";
-	///     byte cipher[size];
-	///     ...
-	///     ChaCha20 chacha(key, keySize);
-	///     chacha.ProcessData(cipher, plain, size);
-	/// 
- /// \details You should use distinct buffers for inString and outString. If the buffers - /// are the same, then the data will be copied to an internal buffer to avoid GCC alias - /// violations. The internal copy will impact performance. - /// \sa Issue 1088, 36% loss - /// of performance with AES, Issue - /// 1010, HIGHT cipher troubles with FileSource - void ProcessData(byte *outString, const byte *inString, size_t length); - - /// \brief Resynchronize the cipher - /// \param iv a byte array used to resynchronize the cipher - /// \param length the size of the IV array - void Resynchronize(const byte *iv, int length=-1); - - /// \brief Provides number of ideal bytes to process - /// \return the ideal number of bytes to process - /// \details Internally, the default implementation returns GetBytesPerIteration() - /// \sa GetBytesPerIteration() and GetOptimalNextBlockSize() - unsigned int OptimalBlockSize() const {return this->GetPolicy().GetBytesPerIteration();} - - /// \brief Provides number of ideal bytes to process - /// \return the ideal number of bytes to process - /// \details Internally, the default implementation returns remaining unprocessed bytes - /// \sa GetBytesPerIteration() and OptimalBlockSize() - unsigned int GetOptimalNextBlockSize() const {return (unsigned int)m_leftOver;} - - /// \brief Provides number of ideal data alignment - /// \return the ideal data alignment, in bytes - /// \sa GetAlignment() and OptimalBlockSize() - unsigned int OptimalDataAlignment() const {return this->GetPolicy().GetAlignment();} - - /// \brief Flag indicating random access - /// \return true if the cipher is seekable, false otherwise - /// \sa Seek() - bool IsRandomAccess() const {return false;} - - /// \brief Determines if the cipher is self inverting - /// \return true if the stream cipher is self inverting, false otherwise - bool IsSelfInverting() const {return false;} - - /// \brief Retrieve the provider of this algorithm - /// \return the algorithm provider - /// \details The algorithm provider can be a name like "C++", "SSE", "NEON", "AESNI", - /// "ARMv8" and "Power8". C++ is standard C++ code. Other labels, like SSE, - /// usually indicate a specialized implementation using instructions from a higher - /// instruction set architecture (ISA). Future labels may include external hardware - /// like a hardware security module (HSM). - /// \details Generally speaking Wei Dai's original IA-32 ASM code falls under "SSE2". - /// Labels like "SSSE3" and "SSE4.1" follow after Wei's code and use intrinsics - /// instead of ASM. - /// \details Algorithms which combine different instructions or ISAs provide the - /// dominant one. For example on x86 AES/GCM returns "AESNI" rather than - /// "CLMUL" or "AES+SSE4.1" or "AES+CLMUL" or "AES+SSE4.1+CLMUL". - /// \note Provider is not universally implemented yet. - std::string AlgorithmProvider() const { return this->GetPolicy().AlgorithmProvider(); } - - typedef typename BASE::PolicyInterface PolicyInterface; - -protected: - virtual void CombineMessageAndShiftRegister(byte *output, byte *reg, const byte *message, size_t length) =0; - - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - - size_t m_leftOver; -}; - -/// \brief Base class for feedback based stream ciphers in the forward direction with SymmetricCipher interface -/// \tparam BASE AbstractPolicyHolder base class -template > -class CRYPTOPP_NO_VTABLE CFB_EncryptionTemplate : public CFB_CipherTemplate -{ - bool IsForwardTransformation() const {return true;} - void CombineMessageAndShiftRegister(byte *output, byte *reg, const byte *message, size_t length); -}; - -/// \brief Base class for feedback based stream ciphers in the reverse direction with SymmetricCipher interface -/// \tparam BASE AbstractPolicyHolder base class -template > -class CRYPTOPP_NO_VTABLE CFB_DecryptionTemplate : public CFB_CipherTemplate -{ - bool IsForwardTransformation() const {return false;} - void CombineMessageAndShiftRegister(byte *output, byte *reg, const byte *message, size_t length); -}; - -/// \brief Base class for feedback based stream ciphers with a mandatory block size -/// \tparam BASE CFB_EncryptionTemplate or CFB_DecryptionTemplate base class -template -class CFB_RequireFullDataBlocks : public BASE -{ -public: - unsigned int MandatoryBlockSize() const {return this->OptimalBlockSize();} -}; - -/// \brief SymmetricCipher implementation -/// \tparam BASE AbstractPolicyHolder derived base class -/// \tparam INFO AbstractPolicyHolder derived information class -/// \sa Weak::ARC4, ChaCha8, ChaCha12, ChaCha20, Salsa20, SEAL, Sosemanuk, WAKE -template -class SymmetricCipherFinal : public AlgorithmImpl, INFO> -{ -public: - virtual ~SymmetricCipherFinal() {} - - /// \brief Construct a stream cipher - SymmetricCipherFinal() {} - - /// \brief Construct a stream cipher - /// \param key a byte array used to key the cipher - /// \details This overload uses DEFAULT_KEYLENGTH - SymmetricCipherFinal(const byte *key) - {this->SetKey(key, this->DEFAULT_KEYLENGTH);} - - /// \brief Construct a stream cipher - /// \param key a byte array used to key the cipher - /// \param length the size of the key array - SymmetricCipherFinal(const byte *key, size_t length) - {this->SetKey(key, length);} - - /// \brief Construct a stream cipher - /// \param key a byte array used to key the cipher - /// \param length the size of the key array - /// \param iv a byte array used as an initialization vector - SymmetricCipherFinal(const byte *key, size_t length, const byte *iv) - {this->SetKeyWithIV(key, length, iv);} - - /// \brief Clone a SymmetricCipher - /// \return a new SymmetricCipher based on this object - Clonable * Clone() const {return static_cast(new SymmetricCipherFinal(*this));} -}; - -NAMESPACE_END - -// Used by dll.cpp to ensure objects are in dll.o, and not strciphr.o. -#ifdef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES -# include "strciphr.cpp" -#endif - -NAMESPACE_BEGIN(CryptoPP) - -CRYPTOPP_DLL_TEMPLATE_CLASS AbstractPolicyHolder; -CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate >; - -CRYPTOPP_DLL_TEMPLATE_CLASS CFB_CipherTemplate >; -CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate >; -CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate >; - -NAMESPACE_END - -#if CRYPTOPP_MSC_VERSION -# pragma warning(pop) -#endif - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/tea.h b/third_party/cryptoppwin/include/cryptopp/tea.h deleted file mode 100644 index e4ba5df3..00000000 --- a/third_party/cryptoppwin/include/cryptopp/tea.h +++ /dev/null @@ -1,161 +0,0 @@ -// tea.h - originally written and placed in the public domain by Wei Dai - -/// \file tea.h -/// \brief Classes for the TEA, BTEA and XTEA block ciphers - -#ifndef CRYPTOPP_TEA_H -#define CRYPTOPP_TEA_H - -#include "seckey.h" -#include "secblock.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief TEA block cipher information -struct TEA_Info : public FixedBlockSize<8>, public FixedKeyLength<16>, public VariableRounds<32> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "TEA";} -}; - -/// \brief TEA block cipher -/// \sa TEA -class TEA : public TEA_Info, public BlockCipherDocumentation -{ - /// \brief TEA block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - FixedSizeSecBlock m_k; - word32 m_limit; - }; - - /// \brief TEA block cipher encryption operation - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief TEA block cipher decryption operation - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef TEA::Encryption TEAEncryption; -typedef TEA::Decryption TEADecryption; - -/// \brief XTEA block cipher information -struct XTEA_Info : public FixedBlockSize<8>, public FixedKeyLength<16>, public VariableRounds<32> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "XTEA";} -}; - -/// \brief XTEA block cipher -/// \sa XTEA -class XTEA : public XTEA_Info, public BlockCipherDocumentation -{ - /// \brief XTEA block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - FixedSizeSecBlock m_k; - word32 m_limit; - }; - - /// \brief XTEA block cipher encryption operation - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief XTEA block cipher decryption operation - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -/// \brief BTEA block cipher information -struct BTEA_Info : public FixedKeyLength<16> -{ - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "BTEA";} -}; - -/// \brief BTEA block cipher -/// \details Corrected Block TEA as described in "xxtea". This class hasn't been tested yet. -/// \sa Correction to xtea and -/// Corrected Block TEA. -class BTEA : public BTEA_Info, public BlockCipherDocumentation -{ - /// \brief BTEA block cipher default operation - class CRYPTOPP_NO_VTABLE Base : public AlgorithmImpl, BTEA_Info> - { - public: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) - { - CRYPTOPP_UNUSED(length), CRYPTOPP_UNUSED(params); - m_blockSize = params.GetIntValueWithDefault("BlockSize", 60*4); - GetUserKey(BIG_ENDIAN_ORDER, m_k.begin(), 4, key, KEYLENGTH); - } - - unsigned int BlockSize() const {return m_blockSize;} - - protected: - FixedSizeSecBlock m_k; - unsigned int m_blockSize; - }; - - /// \brief BTEA block cipher encryption operation - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief BTEA block cipher decryption operation - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/threefish.h b/third_party/cryptoppwin/include/cryptopp/threefish.h deleted file mode 100644 index ab32ce01..00000000 --- a/third_party/cryptoppwin/include/cryptopp/threefish.h +++ /dev/null @@ -1,201 +0,0 @@ -// threefish.h - written and placed in the public domain by Jeffrey Walton -// Based on public domain code by Keru Kuro. Kuro's code is -// available at http://cppcrypto.sourceforge.net/. - -/// \file Threefish.h -/// \brief Classes for the Threefish block cipher -/// \since Crypto++ 6.0 - -#ifndef CRYPTOPP_THREEFISH_H -#define CRYPTOPP_THREEFISH_H - -#include "config.h" -#include "seckey.h" -#include "secblock.h" -#include "algparam.h" -#include "argnames.h" -#include "stdcpp.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Threefish block cipher information -/// \tparam BS block size of the cipher, in bytes -/// \since Crypto++ 6.0 -template -struct Threefish_Info : public FixedBlockSize, FixedKeyLength -{ - static const std::string StaticAlgorithmName() - { - // Format is Cipher-Blocksize(Keylength) - return "Threefish-" + IntToString(BS*8) + "(" + IntToString(BS*8) + ")"; - } -}; - -/// \brief Threefish block cipher base class -/// \tparam BS block size of the cipher, in bytes -/// \details User code should use Threefish256, Threefish512, Threefish1024 -/// \sa Threefish256, Threefish512, Threefish1024, Threefish -/// \since Crypto++ 6.0 -template -struct CRYPTOPP_NO_VTABLE Threefish_Base -{ - virtual ~Threefish_Base() {} - - void SetTweak(const NameValuePairs ¶ms) - { - m_tweak.New(3); - ConstByteArrayParameter t; - if (params.GetValue(Name::Tweak(), t)) - { - // Tweak size is fixed at 16 for Threefish - CRYPTOPP_ASSERT(t.size() == 16); - GetUserKey(LITTLE_ENDIAN_ORDER, m_tweak.begin(), 2, t.begin(), 16); - m_tweak[2] = m_tweak[0] ^ m_tweak[1]; - } - else - { - std::memset(m_tweak.begin(), 0x00, 24); - } - } - - typedef SecBlock > AlignedSecBlock64; - mutable AlignedSecBlock64 m_wspace; // workspace - AlignedSecBlock64 m_rkey; // keys - AlignedSecBlock64 m_tweak; -}; - -/// \brief Threefish 256-bit block cipher -/// \details Threefish256 provides 256-bit block size. The valid key size is 256-bit. -/// \note Crypto++ provides a byte oriented implementation -/// \sa Threefish512, Threefish1024, Threefish -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE Threefish256 : public Threefish_Info<32>, public BlockCipherDocumentation -{ -public: - /// \brief Threefish block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : public Threefish_Base<32>, public BlockCipherImpl > - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Threefish256::Encryption Threefish256Encryption; -typedef Threefish256::Decryption Threefish256Decryption; - -/// \brief Threefish 512-bit block cipher -/// \details Threefish512 provides 512-bit block size. The valid key size is 512-bit. -/// \note Crypto++ provides a byte oriented implementation -/// \sa Threefish256, Threefish1024, Threefish -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE Threefish512 : public Threefish_Info<64>, public BlockCipherDocumentation -{ -public: - /// \brief Threefish block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : public Threefish_Base<64>, public BlockCipherImpl > - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Decryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Threefish512::Encryption Threefish512Encryption; -typedef Threefish512::Decryption Threefish512Decryption; - -/// \brief Threefish 1024-bit block cipher -/// \details Threefish1024 provides 1024-bit block size. The valid key size is 1024-bit. -/// \note Crypto++ provides a byte oriented implementation -/// \sa Threefish256, Threefish512, Threefish -/// \since Crypto++ 6.0 -class CRYPTOPP_NO_VTABLE Threefish1024 : public Threefish_Info<128>, public BlockCipherDocumentation -{ -public: - /// \brief Threefish block cipher transformation functions - /// \details Provides implementation common to encryption and decryption - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Base : public Threefish_Base<128>, public BlockCipherImpl > - { - protected: - void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms); - }; - - /// \brief Encryption transformation - /// \details Enc provides implementation for encryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Enc : public Base - { - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Encryption transformation - /// \details Dec provides implementation for decryption transformation. All key and block - /// sizes are supported. - /// \since Crypto++ 6.0 - class CRYPTOPP_NO_VTABLE Dec : public Base - { - protected: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Threefish1024::Encryption Threefish1024Encryption; -typedef Threefish1024::Decryption Threefish1024Decryption; - -NAMESPACE_END - -#endif // CRYPTOPP_THREEFISH_H diff --git a/third_party/cryptoppwin/include/cryptopp/tiger.h b/third_party/cryptoppwin/include/cryptopp/tiger.h deleted file mode 100644 index 369f1ccd..00000000 --- a/third_party/cryptoppwin/include/cryptopp/tiger.h +++ /dev/null @@ -1,61 +0,0 @@ -// tiger.h - originally written and placed in the public domain by Wei Dai - -/// \file tiger.h -/// \brief Classes for the Tiger message digest -/// \details Crypto++ provides the original Tiger hash that was -/// submitted to the NESSIE project. The implementation is different -/// from the revised Tiger2 hash. -/// \sa Tiger and -/// Tiger: -/// A Fast New Cryptographic Hash Function -/// \since Crypto++ 2.1 - -#ifndef CRYPTOPP_TIGER_H -#define CRYPTOPP_TIGER_H - -#include "config.h" -#include "iterhash.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_TIGER_ASM 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Tiger message digest -/// \details Crypto++ provides the original Tiger hash that was -/// submitted to the NESSIE project. The implementation is different -/// from the revised Tiger2 hash. -/// \sa Tiger and -/// Tiger: -/// A Fast New Cryptographic Hash Function -/// \since Crypto++ 2.1 -class Tiger : public IteratedHashWithStaticTransform -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Tiger";} - std::string AlgorithmProvider() const; - - /// \brief Initialize state array - /// \param state the state of the hash - static void InitState(HashWordType *state); - /// \brief Operate the hash - /// \param digest the state of the hash - /// \param data the data to be digested - static void Transform(word64 *digest, const word64 *data); - /// \brief Computes the hash of the current message - /// \param digest a pointer to the buffer to receive the hash - /// \param digestSize the size of the truncated digest, in bytes - /// \details TruncatedFinal() calls Final() and then copies digestSize bytes to digest. - /// The hash is restarted the hash for the next message. - void TruncatedFinal(byte *digest, size_t digestSize); - -protected: - static const word64 table[4*256+3]; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/trap.h b/third_party/cryptoppwin/include/cryptopp/trap.h deleted file mode 100644 index 2c2906b9..00000000 --- a/third_party/cryptoppwin/include/cryptopp/trap.h +++ /dev/null @@ -1,163 +0,0 @@ -// trap.h - written and placed in public domain by Jeffrey Walton. - -/// \file trap.h -/// \brief Debugging and diagnostic assertions -/// \details CRYPTOPP_ASSERT is the library's debugging and diagnostic -/// assertion. CRYPTOPP_ASSERT is enabled by CRYPTOPP_DEBUG, -/// DEBUG or _DEBUG. -/// \details CRYPTOPP_ASSERT raises a SIGTRAP (Unix) or calls -/// DebugBreak() (Windows). -/// \details CRYPTOPP_ASSERT is only in effect when the user requests a -/// debug configuration. NDEBUG (or failure to define it) does not -/// affect CRYPTOPP_ASSERT. -/// \since Crypto++ 5.6.5 -/// \sa DebugTrapHandler, Issue 277, -/// CVE-2016-7420 - -#ifndef CRYPTOPP_TRAP_H -#define CRYPTOPP_TRAP_H - -#include "config.h" - -#if defined(CRYPTOPP_DEBUG) -# include -# include -# if defined(UNIX_SIGNALS_AVAILABLE) -# include "ossig.h" -# elif defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(__CYGWIN__) - extern "C" __declspec(dllimport) void __stdcall DebugBreak(); - extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); -# endif -#endif // CRYPTOPP_DEBUG - -// ************** run-time assertion *************** - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Debugging and diagnostic assertion -/// \details CRYPTOPP_ASSERT is the library's debugging and diagnostic -/// assertion. CRYPTOPP_ASSERT is enabled by the preprocessor macros -/// CRYPTOPP_DEBUG, DEBUG or _DEBUG. -/// \details CRYPTOPP_ASSERT raises a SIGTRAP (Unix) or calls -/// DebugBreak() (Windows). CRYPTOPP_ASSERT is only in effect -/// when the user explicitly requests a debug configuration. -/// \details If you want to ensure CRYPTOPP_ASSERT is inert, then do -/// not define CRYPTOPP_DEBUG, DEBUG or _DEBUG. -/// Avoiding the defines means CRYPTOPP_ASSERT is preprocessed into an -/// empty string. -/// \details The traditional Posix define NDEBUG has no effect on -/// CRYPTOPP_DEBUG, CRYPTOPP_ASSERT or DebugTrapHandler. -/// \details An example of using CRYPTOPP_ASSERT and DebugTrapHandler is shown -/// below. The library's test program, cryptest.exe (from test.cpp), -/// exercises the structure: -///
-///   \#if defined(CRYPTOPP_DEBUG) && defined(UNIX_SIGNALS_AVAILABLE)
-///   static const DebugTrapHandler g_dummyHandler;
-///   \#endif
-///
-///   int main(int argc, char* argv[])
-///   {
-///      CRYPTOPP_ASSERT(argv != nullptr);
-///      ...
-///   }
-///  
-/// \since Crypto++ 5.6.5 -/// \sa DebugTrapHandler, SignalHandler, Issue 277, -/// CVE-2016-7420 -# define CRYPTOPP_ASSERT(exp) { ... } -#endif - -#if defined(CRYPTOPP_DEBUG) -# if defined(UNIX_SIGNALS_AVAILABLE) || defined(__CYGWIN__) -# define CRYPTOPP_ASSERT(exp) { \ - if (!(exp)) { \ - std::ostringstream oss; \ - oss << "Assertion failed: " << __FILE__ << "(" \ - << __LINE__ << "): " << __func__ \ - << std::endl; \ - std::cout << std::flush; \ - std::cerr << oss.str(); \ - raise(SIGTRAP); \ - } \ - } -# elif CRYPTOPP_DEBUG && defined(CRYPTOPP_WIN32_AVAILABLE) -# define CRYPTOPP_ASSERT(exp) { \ - if (!(exp)) { \ - std::ostringstream oss; \ - oss << "Assertion failed: " << __FILE__ << "(" \ - << __LINE__ << "): " << __FUNCTION__ \ - << std::endl; \ - std::cout << std::flush; \ - std::cerr << oss.str(); \ - if (IsDebuggerPresent()) {DebugBreak();} \ - } \ - } -# endif // Unix or Windows -#endif // CRYPTOPP_DEBUG - -// Remove CRYPTOPP_ASSERT in non-debug builds. -#ifndef CRYPTOPP_ASSERT -# define CRYPTOPP_ASSERT(exp) (void)0 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -// ************** SIGTRAP handler *************** - -#if (CRYPTOPP_DEBUG && defined(UNIX_SIGNALS_AVAILABLE)) || defined(CRYPTOPP_DOXYGEN_PROCESSING) -/// \brief Default SIGTRAP handler -/// \details DebugTrapHandler() can be used by a program to install an empty -/// SIGTRAP handler. If present, the handler ensures there is a signal -/// handler in place for SIGTRAP raised by -/// CRYPTOPP_ASSERT. If CRYPTOPP_ASSERT raises -/// SIGTRAP without a handler, then one of two things can -/// occur. First, the OS might allow the program to continue. Second, the OS -/// might terminate the program. OS X allows the program to continue, while -/// some Linuxes terminate the program. -/// \details If DebugTrapHandler detects another handler in place, then it will -/// not install a handler. This ensures a debugger can gain control of the -/// SIGTRAP signal without contention. It also allows multiple -/// DebugTrapHandler to be created without contentious or unusual behavior. -/// Though multiple DebugTrapHandler can be created, a program should only -/// create one, if needed. -/// \details A DebugTrapHandler is subject to C++ static initialization -/// [dis]order. If you need to install a handler and it must be installed -/// early, then reference the code associated with -/// CRYPTOPP_INIT_PRIORITY in cryptlib.cpp and cpu.cpp. -/// \details If you want to ensure CRYPTOPP_ASSERT is inert, then -/// do not define CRYPTOPP_DEBUG, DEBUG or -/// _DEBUG. Avoiding the defines means CRYPTOPP_ASSERT -/// is processed into ((void)0). -/// \details The traditional Posix define NDEBUG has no effect on -/// CRYPTOPP_DEBUG, CRYPTOPP_ASSERT or DebugTrapHandler. -/// \details An example of using \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT" and -/// DebugTrapHandler is shown below. The library's test program, -/// cryptest.exe (from test.cpp), exercises the structure: -///
-///   \#if defined(CRYPTOPP_DEBUG) && defined(UNIX_SIGNALS_AVAILABLE)
-///   const DebugTrapHandler g_dummyHandler;
-///   \#endif
-///
-///   int main(int argc, char* argv[])
-///   {
-///      CRYPTOPP_ASSERT(argv != nullptr);
-///      ...
-///   }
-///  
-/// \since Crypto++ 5.6.5 -/// \sa \ref CRYPTOPP_ASSERT "CRYPTOPP_ASSERT", SignalHandler, Issue 277, -/// CVE-2016-7420 - -#if defined(CRYPTOPP_DOXYGEN_PROCESSING) -class DebugTrapHandler : public SignalHandler { }; -#else -typedef SignalHandler DebugTrapHandler; -#endif - -#endif // Linux, Unix and Documentation - -NAMESPACE_END - -#endif // CRYPTOPP_TRAP_H diff --git a/third_party/cryptoppwin/include/cryptopp/trunhash.h b/third_party/cryptoppwin/include/cryptopp/trunhash.h deleted file mode 100644 index e659cc87..00000000 --- a/third_party/cryptoppwin/include/cryptopp/trunhash.h +++ /dev/null @@ -1,63 +0,0 @@ -// trunhash.h - originally written and placed in the public domain by Wei Dai - -/// \file trunhash.h -/// \brief Classes for truncated hashes - -#ifndef CRYPTOPP_TRUNHASH_H -#define CRYPTOPP_TRUNHASH_H - -#include "cryptlib.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Null hash -/// \details A null hash that conforms to HashTransformation interface -class NullHash : public HashTransformation -{ -public: - void Update(const byte *input, size_t length) - {CRYPTOPP_UNUSED(input);CRYPTOPP_UNUSED(length);} - unsigned int DigestSize() const - {return 0;} - void TruncatedFinal(byte *digest, size_t digestSize) - {CRYPTOPP_UNUSED(digest);CRYPTOPP_UNUSED(digestSize);} - bool TruncatedVerify(const byte *digest, size_t digestLength) - {CRYPTOPP_UNUSED(digest);CRYPTOPP_UNUSED(digestLength);return true;} -}; - -/// \brief Construct new HashModule with smaller digest size from an existing one -/// \tparam T HashTransformation derived class -template -class TruncatedHashTemplate : public HashTransformation -{ -public: - /// \brief Construct a TruncatedHashTemplate - TruncatedHashTemplate(T hm, unsigned int digestSize) - : m_hm(hm), m_digestSize(digestSize) {} - /// \brief Construct a TruncatedHashTemplate - TruncatedHashTemplate(const byte *key, size_t keyLength, unsigned int digestSize) - : m_hm(key, keyLength), m_digestSize(digestSize) {} - /// \brief Construct a TruncatedHashTemplate - TruncatedHashTemplate(size_t digestSize) - : m_digestSize(digestSize) {} - - void Restart() - {m_hm.Restart();} - void Update(const byte *input, size_t length) - {m_hm.Update(input, length);} - unsigned int DigestSize() const {return m_digestSize;} - void TruncatedFinal(byte *digest, size_t digestSize) - {m_hm.TruncatedFinal(digest, digestSize);} - bool TruncatedVerify(const byte *digest, size_t digestLength) - {return m_hm.TruncatedVerify(digest, digestLength);} - -private: - T m_hm; - unsigned int m_digestSize; -}; - -typedef TruncatedHashTemplate TruncatedHashModule; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/ttmac.h b/third_party/cryptoppwin/include/cryptopp/ttmac.h deleted file mode 100644 index 9d959875..00000000 --- a/third_party/cryptoppwin/include/cryptopp/ttmac.h +++ /dev/null @@ -1,44 +0,0 @@ -// ttmac.h - written and placed in the public domain by Kevin Springle - -/// \file ttmac.h -/// \brief Classes for the TTMAC message authentication code - -#ifndef CRYPTOPP_TTMAC_H -#define CRYPTOPP_TTMAC_H - -#include "seckey.h" -#include "iterhash.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief TTMAC message authentication code information -class CRYPTOPP_NO_VTABLE TTMAC_Base : public FixedKeyLength<20>, public IteratedHash -{ -public: - static std::string StaticAlgorithmName() {return std::string("Two-Track-MAC");} - CRYPTOPP_CONSTANT(DIGESTSIZE=20); - - unsigned int DigestSize() const {return DIGESTSIZE;}; - void UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs ¶ms); - void TruncatedFinal(byte *mac, size_t size); - -protected: - static void Transform (word32 *digest, const word32 *X, bool last); - void HashEndianCorrectedBlock(const word32 *data) {Transform(m_digest, data, false);} - void Init(); - word32* StateBuf() {return m_digest;} - - FixedSizeSecBlock m_digest; - FixedSizeSecBlock m_key; -}; - -/// \brief Two-Track-MAC message authentication code -/// \tparam T HashTransformation class -/// \details 160-bit MAC with 160-bit key -/// \sa MessageAuthenticationCode(), Two-Track-MAC -DOCUMENTED_TYPEDEF(MessageAuthenticationCodeFinal, TTMAC); - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/tweetnacl.h b/third_party/cryptoppwin/include/cryptopp/tweetnacl.h deleted file mode 100644 index beafb752..00000000 --- a/third_party/cryptoppwin/include/cryptopp/tweetnacl.h +++ /dev/null @@ -1,281 +0,0 @@ -// tweetnacl.h - written and placed in the public domain by Jeffrey Walton - -/// \file nr.h -/// \brief Declarations for Bernstein's TweetNaCL -/// \details TweetNaCL is used to cross-validate the library's implementations. -/// The implementation itself is not optimized and kind of amusing. However -/// it serves a valuable purpose for cross-validation. -/// \details Don't use this in production. - -#ifndef TWEETNACL_H -#define TWEETNACL_H -#define crypto_auth_PRIMITIVE "hmacsha512256" -#define crypto_auth crypto_auth_hmacsha512256 -#define crypto_auth_verify crypto_auth_hmacsha512256_verify -#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES -#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES -#define crypto_auth_IMPLEMENTATION crypto_auth_hmacsha512256_IMPLEMENTATION -#define crypto_auth_VERSION crypto_auth_hmacsha512256_VERSION -#define crypto_auth_hmacsha512256_tweet_BYTES 32 -#define crypto_auth_hmacsha512256_tweet_KEYBYTES 32 -extern int crypto_auth_hmacsha512256_tweet(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_auth_hmacsha512256_tweet_verify(const unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -#define crypto_auth_hmacsha512256_tweet_VERSION "-" -#define crypto_auth_hmacsha512256 crypto_auth_hmacsha512256_tweet -#define crypto_auth_hmacsha512256_verify crypto_auth_hmacsha512256_tweet_verify -#define crypto_auth_hmacsha512256_BYTES crypto_auth_hmacsha512256_tweet_BYTES -#define crypto_auth_hmacsha512256_KEYBYTES crypto_auth_hmacsha512256_tweet_KEYBYTES -#define crypto_auth_hmacsha512256_VERSION crypto_auth_hmacsha512256_tweet_VERSION -#define crypto_auth_hmacsha512256_IMPLEMENTATION "crypto_auth/hmacsha512256/tweet" -#define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305" -#define crypto_box crypto_box_curve25519xsalsa20poly1305 -#define crypto_box_open crypto_box_curve25519xsalsa20poly1305_open -#define crypto_box_keypair crypto_box_curve25519xsalsa20poly1305_keypair -#define crypto_box_beforenm crypto_box_curve25519xsalsa20poly1305_beforenm -#define crypto_box_afternm crypto_box_curve25519xsalsa20poly1305_afternm -#define crypto_box_open_afternm crypto_box_curve25519xsalsa20poly1305_open_afternm -#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES -#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES -#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES -#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES -#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES -#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES -#define crypto_box_IMPLEMENTATION crypto_box_curve25519xsalsa20poly1305_IMPLEMENTATION -#define crypto_box_VERSION crypto_box_curve25519xsalsa20poly1305_VERSION -#define crypto_box_curve25519xsalsa20poly1305_tweet_PUBLICKEYBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_tweet_SECRETKEYBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_tweet_BEFORENMBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_tweet_NONCEBYTES 24 -#define crypto_box_curve25519xsalsa20poly1305_tweet_ZEROBYTES 32 -#define crypto_box_curve25519xsalsa20poly1305_tweet_BOXZEROBYTES 16 -extern int crypto_box_curve25519xsalsa20poly1305_tweet(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_tweet_open(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_tweet_keypair(unsigned char *,unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_tweet_beforenm(unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_tweet_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_box_curve25519xsalsa20poly1305_tweet_open_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#define crypto_box_curve25519xsalsa20poly1305_tweet_VERSION "-" -#define crypto_box_curve25519xsalsa20poly1305 crypto_box_curve25519xsalsa20poly1305_tweet -#define crypto_box_curve25519xsalsa20poly1305_open crypto_box_curve25519xsalsa20poly1305_tweet_open -#define crypto_box_curve25519xsalsa20poly1305_keypair crypto_box_curve25519xsalsa20poly1305_tweet_keypair -#define crypto_box_curve25519xsalsa20poly1305_beforenm crypto_box_curve25519xsalsa20poly1305_tweet_beforenm -#define crypto_box_curve25519xsalsa20poly1305_afternm crypto_box_curve25519xsalsa20poly1305_tweet_afternm -#define crypto_box_curve25519xsalsa20poly1305_open_afternm crypto_box_curve25519xsalsa20poly1305_tweet_open_afternm -#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_tweet_PUBLICKEYBYTES -#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_tweet_SECRETKEYBYTES -#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_tweet_BEFORENMBYTES -#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_tweet_NONCEBYTES -#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_tweet_ZEROBYTES -#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_tweet_BOXZEROBYTES -#define crypto_box_curve25519xsalsa20poly1305_VERSION crypto_box_curve25519xsalsa20poly1305_tweet_VERSION -#define crypto_box_curve25519xsalsa20poly1305_IMPLEMENTATION "crypto_box/curve25519xsalsa20poly1305/tweet" -#define crypto_core_PRIMITIVE "salsa20" -#define crypto_core crypto_core_salsa20 -#define crypto_core_OUTPUTBYTES crypto_core_salsa20_OUTPUTBYTES -#define crypto_core_INPUTBYTES crypto_core_salsa20_INPUTBYTES -#define crypto_core_KEYBYTES crypto_core_salsa20_KEYBYTES -#define crypto_core_CONSTBYTES crypto_core_salsa20_CONSTBYTES -#define crypto_core_IMPLEMENTATION crypto_core_salsa20_IMPLEMENTATION -#define crypto_core_VERSION crypto_core_salsa20_VERSION -#define crypto_core_salsa20_tweet_OUTPUTBYTES 64 -#define crypto_core_salsa20_tweet_INPUTBYTES 16 -#define crypto_core_salsa20_tweet_KEYBYTES 32 -#define crypto_core_salsa20_tweet_CONSTBYTES 16 -extern int crypto_core_salsa20_tweet(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *); -#define crypto_core_salsa20_tweet_VERSION "-" -#define crypto_core_salsa20 crypto_core_salsa20_tweet -#define crypto_core_salsa20_OUTPUTBYTES crypto_core_salsa20_tweet_OUTPUTBYTES -#define crypto_core_salsa20_INPUTBYTES crypto_core_salsa20_tweet_INPUTBYTES -#define crypto_core_salsa20_KEYBYTES crypto_core_salsa20_tweet_KEYBYTES -#define crypto_core_salsa20_CONSTBYTES crypto_core_salsa20_tweet_CONSTBYTES -#define crypto_core_salsa20_VERSION crypto_core_salsa20_tweet_VERSION -#define crypto_core_salsa20_IMPLEMENTATION "crypto_core/salsa20/tweet" -#define crypto_core_hsalsa20_tweet_OUTPUTBYTES 32 -#define crypto_core_hsalsa20_tweet_INPUTBYTES 16 -#define crypto_core_hsalsa20_tweet_KEYBYTES 32 -#define crypto_core_hsalsa20_tweet_CONSTBYTES 16 -extern int crypto_core_hsalsa20_tweet(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *); -#define crypto_core_hsalsa20_tweet_VERSION "-" -#define crypto_core_hsalsa20 crypto_core_hsalsa20_tweet -#define crypto_core_hsalsa20_OUTPUTBYTES crypto_core_hsalsa20_tweet_OUTPUTBYTES -#define crypto_core_hsalsa20_INPUTBYTES crypto_core_hsalsa20_tweet_INPUTBYTES -#define crypto_core_hsalsa20_KEYBYTES crypto_core_hsalsa20_tweet_KEYBYTES -#define crypto_core_hsalsa20_CONSTBYTES crypto_core_hsalsa20_tweet_CONSTBYTES -#define crypto_core_hsalsa20_VERSION crypto_core_hsalsa20_tweet_VERSION -#define crypto_core_hsalsa20_IMPLEMENTATION "crypto_core/hsalsa20/tweet" -#define crypto_hashblocks_PRIMITIVE "sha512" -#define crypto_hashblocks crypto_hashblocks_sha512 -#define crypto_hashblocks_STATEBYTES crypto_hashblocks_sha512_STATEBYTES -#define crypto_hashblocks_BLOCKBYTES crypto_hashblocks_sha512_BLOCKBYTES -#define crypto_hashblocks_IMPLEMENTATION crypto_hashblocks_sha512_IMPLEMENTATION -#define crypto_hashblocks_VERSION crypto_hashblocks_sha512_VERSION -#define crypto_hashblocks_sha512_tweet_STATEBYTES 64 -#define crypto_hashblocks_sha512_tweet_BLOCKBYTES 128 -extern int crypto_hashblocks_sha512_tweet(unsigned char *,const unsigned char *,unsigned long long); -#define crypto_hashblocks_sha512_tweet_VERSION "-" -#define crypto_hashblocks_sha512 crypto_hashblocks_sha512_tweet -#define crypto_hashblocks_sha512_STATEBYTES crypto_hashblocks_sha512_tweet_STATEBYTES -#define crypto_hashblocks_sha512_BLOCKBYTES crypto_hashblocks_sha512_tweet_BLOCKBYTES -#define crypto_hashblocks_sha512_VERSION crypto_hashblocks_sha512_tweet_VERSION -#define crypto_hashblocks_sha512_IMPLEMENTATION "crypto_hashblocks/sha512/tweet" -#define crypto_hashblocks_sha256_tweet_STATEBYTES 32 -#define crypto_hashblocks_sha256_tweet_BLOCKBYTES 64 -extern int crypto_hashblocks_sha256_tweet(unsigned char *,const unsigned char *,unsigned long long); -#define crypto_hashblocks_sha256_tweet_VERSION "-" -#define crypto_hashblocks_sha256 crypto_hashblocks_sha256_tweet -#define crypto_hashblocks_sha256_STATEBYTES crypto_hashblocks_sha256_tweet_STATEBYTES -#define crypto_hashblocks_sha256_BLOCKBYTES crypto_hashblocks_sha256_tweet_BLOCKBYTES -#define crypto_hashblocks_sha256_VERSION crypto_hashblocks_sha256_tweet_VERSION -#define crypto_hashblocks_sha256_IMPLEMENTATION "crypto_hashblocks/sha256/tweet" -#define crypto_hash_PRIMITIVE "sha512" -#define crypto_hash crypto_hash_sha512 -#define crypto_hash_BYTES crypto_hash_sha512_BYTES -#define crypto_hash_IMPLEMENTATION crypto_hash_sha512_IMPLEMENTATION -#define crypto_hash_VERSION crypto_hash_sha512_VERSION -#define crypto_hash_sha512_tweet_BYTES 64 -extern int crypto_hash_sha512_tweet(unsigned char *,const unsigned char *,unsigned long long); -#define crypto_hash_sha512_tweet_VERSION "-" -#define crypto_hash_sha512 crypto_hash_sha512_tweet -#define crypto_hash_sha512_BYTES crypto_hash_sha512_tweet_BYTES -#define crypto_hash_sha512_VERSION crypto_hash_sha512_tweet_VERSION -#define crypto_hash_sha512_IMPLEMENTATION "crypto_hash/sha512/tweet" -#define crypto_hash_sha256_tweet_BYTES 32 -extern int crypto_hash_sha256_tweet(unsigned char *,const unsigned char *,unsigned long long); -#define crypto_hash_sha256_tweet_VERSION "-" -#define crypto_hash_sha256 crypto_hash_sha256_tweet -#define crypto_hash_sha256_BYTES crypto_hash_sha256_tweet_BYTES -#define crypto_hash_sha256_VERSION crypto_hash_sha256_tweet_VERSION -#define crypto_hash_sha256_IMPLEMENTATION "crypto_hash/sha256/tweet" -#define crypto_onetimeauth_PRIMITIVE "poly1305" -#define crypto_onetimeauth crypto_onetimeauth_poly1305 -#define crypto_onetimeauth_verify crypto_onetimeauth_poly1305_verify -#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES -#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES -#define crypto_onetimeauth_IMPLEMENTATION crypto_onetimeauth_poly1305_IMPLEMENTATION -#define crypto_onetimeauth_VERSION crypto_onetimeauth_poly1305_VERSION -#define crypto_onetimeauth_poly1305_tweet_BYTES 16 -#define crypto_onetimeauth_poly1305_tweet_KEYBYTES 32 -extern int crypto_onetimeauth_poly1305_tweet(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_onetimeauth_poly1305_tweet_verify(const unsigned char *,const unsigned char *,unsigned long long,const unsigned char *); -#define crypto_onetimeauth_poly1305_tweet_VERSION "-" -#define crypto_onetimeauth_poly1305 crypto_onetimeauth_poly1305_tweet -#define crypto_onetimeauth_poly1305_verify crypto_onetimeauth_poly1305_tweet_verify -#define crypto_onetimeauth_poly1305_BYTES crypto_onetimeauth_poly1305_tweet_BYTES -#define crypto_onetimeauth_poly1305_KEYBYTES crypto_onetimeauth_poly1305_tweet_KEYBYTES -#define crypto_onetimeauth_poly1305_VERSION crypto_onetimeauth_poly1305_tweet_VERSION -#define crypto_onetimeauth_poly1305_IMPLEMENTATION "crypto_onetimeauth/poly1305/tweet" -#define crypto_scalarmult_PRIMITIVE "curve25519" -#define crypto_scalarmult crypto_scalarmult_curve25519 -#define crypto_scalarmult_base crypto_scalarmult_curve25519_base -#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES -#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES -#define crypto_scalarmult_IMPLEMENTATION crypto_scalarmult_curve25519_IMPLEMENTATION -#define crypto_scalarmult_VERSION crypto_scalarmult_curve25519_VERSION -#define crypto_scalarmult_curve25519_tweet_BYTES 32 -#define crypto_scalarmult_curve25519_tweet_SCALARBYTES 32 -extern int crypto_scalarmult_curve25519_tweet(unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_scalarmult_curve25519_tweet_base(unsigned char *,const unsigned char *); -#define crypto_scalarmult_curve25519_tweet_VERSION "-" -#define crypto_scalarmult_curve25519 crypto_scalarmult_curve25519_tweet -#define crypto_scalarmult_curve25519_base crypto_scalarmult_curve25519_tweet_base -#define crypto_scalarmult_curve25519_BYTES crypto_scalarmult_curve25519_tweet_BYTES -#define crypto_scalarmult_curve25519_SCALARBYTES crypto_scalarmult_curve25519_tweet_SCALARBYTES -#define crypto_scalarmult_curve25519_VERSION crypto_scalarmult_curve25519_tweet_VERSION -#define crypto_scalarmult_curve25519_IMPLEMENTATION "crypto_scalarmult/curve25519/tweet" -#define crypto_secretbox_PRIMITIVE "xsalsa20poly1305" -#define crypto_secretbox crypto_secretbox_xsalsa20poly1305 -#define crypto_secretbox_open crypto_secretbox_xsalsa20poly1305_open -#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES -#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES -#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES -#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES -#define crypto_secretbox_IMPLEMENTATION crypto_secretbox_xsalsa20poly1305_IMPLEMENTATION -#define crypto_secretbox_VERSION crypto_secretbox_xsalsa20poly1305_VERSION -#define crypto_secretbox_xsalsa20poly1305_tweet_KEYBYTES 32 -#define crypto_secretbox_xsalsa20poly1305_tweet_NONCEBYTES 24 -#define crypto_secretbox_xsalsa20poly1305_tweet_ZEROBYTES 32 -#define crypto_secretbox_xsalsa20poly1305_tweet_BOXZEROBYTES 16 -extern int crypto_secretbox_xsalsa20poly1305_tweet(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_secretbox_xsalsa20poly1305_tweet_open(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#define crypto_secretbox_xsalsa20poly1305_tweet_VERSION "-" -#define crypto_secretbox_xsalsa20poly1305 crypto_secretbox_xsalsa20poly1305_tweet -#define crypto_secretbox_xsalsa20poly1305_open crypto_secretbox_xsalsa20poly1305_tweet_open -#define crypto_secretbox_xsalsa20poly1305_KEYBYTES crypto_secretbox_xsalsa20poly1305_tweet_KEYBYTES -#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES crypto_secretbox_xsalsa20poly1305_tweet_NONCEBYTES -#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES crypto_secretbox_xsalsa20poly1305_tweet_ZEROBYTES -#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_tweet_BOXZEROBYTES -#define crypto_secretbox_xsalsa20poly1305_VERSION crypto_secretbox_xsalsa20poly1305_tweet_VERSION -#define crypto_secretbox_xsalsa20poly1305_IMPLEMENTATION "crypto_secretbox/xsalsa20poly1305/tweet" -#define crypto_sign_PRIMITIVE "ed25519" -#define crypto_sign crypto_sign_ed25519 -#define crypto_sign_open crypto_sign_ed25519_open -#define crypto_sign_keypair crypto_sign_ed25519_keypair -#define crypto_sign_BYTES crypto_sign_ed25519_BYTES -#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES -#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES -#define crypto_sign_IMPLEMENTATION crypto_sign_ed25519_IMPLEMENTATION -#define crypto_sign_VERSION crypto_sign_ed25519_VERSION -#define crypto_sign_ed25519_tweet_BYTES 64 -#define crypto_sign_ed25519_tweet_PUBLICKEYBYTES 32 -#define crypto_sign_ed25519_tweet_SECRETKEYBYTES 64 -extern int crypto_sign_ed25519_tweet(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_sign_ed25519_tweet_open(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_sign_ed25519_tweet_keypair(unsigned char *,unsigned char *); -#define crypto_sign_ed25519_tweet_VERSION "-" -#define crypto_sign_ed25519 crypto_sign_ed25519_tweet -#define crypto_sign_ed25519_open crypto_sign_ed25519_tweet_open -#define crypto_sign_ed25519_keypair crypto_sign_ed25519_tweet_keypair -#define crypto_sign_ed25519_BYTES crypto_sign_ed25519_tweet_BYTES -#define crypto_sign_ed25519_PUBLICKEYBYTES crypto_sign_ed25519_tweet_PUBLICKEYBYTES -#define crypto_sign_ed25519_SECRETKEYBYTES crypto_sign_ed25519_tweet_SECRETKEYBYTES -#define crypto_sign_ed25519_VERSION crypto_sign_ed25519_tweet_VERSION -#define crypto_sign_ed25519_IMPLEMENTATION "crypto_sign/ed25519/tweet" -#define crypto_stream_PRIMITIVE "xsalsa20" -#define crypto_stream crypto_stream_xsalsa20 -#define crypto_stream_xor crypto_stream_xsalsa20_xor -#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES -#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES -#define crypto_stream_IMPLEMENTATION crypto_stream_xsalsa20_IMPLEMENTATION -#define crypto_stream_VERSION crypto_stream_xsalsa20_VERSION -#define crypto_stream_xsalsa20_tweet_KEYBYTES 32 -#define crypto_stream_xsalsa20_tweet_NONCEBYTES 24 -extern int crypto_stream_xsalsa20_tweet(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_xsalsa20_tweet_xor(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#define crypto_stream_xsalsa20_tweet_VERSION "-" -#define crypto_stream_xsalsa20 crypto_stream_xsalsa20_tweet -#define crypto_stream_xsalsa20_xor crypto_stream_xsalsa20_tweet_xor -#define crypto_stream_xsalsa20_KEYBYTES crypto_stream_xsalsa20_tweet_KEYBYTES -#define crypto_stream_xsalsa20_NONCEBYTES crypto_stream_xsalsa20_tweet_NONCEBYTES -#define crypto_stream_xsalsa20_VERSION crypto_stream_xsalsa20_tweet_VERSION -#define crypto_stream_xsalsa20_IMPLEMENTATION "crypto_stream/xsalsa20/tweet" -#define crypto_stream_salsa20_tweet_KEYBYTES 32 -#define crypto_stream_salsa20_tweet_NONCEBYTES 8 -extern int crypto_stream_salsa20_tweet(unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -extern int crypto_stream_salsa20_tweet_xor(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); -#define crypto_stream_salsa20_tweet_VERSION "-" -#define crypto_stream_salsa20 crypto_stream_salsa20_tweet -#define crypto_stream_salsa20_xor crypto_stream_salsa20_tweet_xor -#define crypto_stream_salsa20_KEYBYTES crypto_stream_salsa20_tweet_KEYBYTES -#define crypto_stream_salsa20_NONCEBYTES crypto_stream_salsa20_tweet_NONCEBYTES -#define crypto_stream_salsa20_VERSION crypto_stream_salsa20_tweet_VERSION -#define crypto_stream_salsa20_IMPLEMENTATION "crypto_stream/salsa20/tweet" -#define crypto_verify_PRIMITIVE "16" -#define crypto_verify crypto_verify_16 -#define crypto_verify_BYTES crypto_verify_16_BYTES -#define crypto_verify_IMPLEMENTATION crypto_verify_16_IMPLEMENTATION -#define crypto_verify_VERSION crypto_verify_16_VERSION -#define crypto_verify_16_tweet_BYTES 16 -extern int crypto_verify_16_tweet(const unsigned char *,const unsigned char *); -#define crypto_verify_16_tweet_VERSION "-" -#define crypto_verify_16 crypto_verify_16_tweet -#define crypto_verify_16_BYTES crypto_verify_16_tweet_BYTES -#define crypto_verify_16_VERSION crypto_verify_16_tweet_VERSION -#define crypto_verify_16_IMPLEMENTATION "crypto_verify/16/tweet" -#define crypto_verify_32_tweet_BYTES 32 -extern int crypto_verify_32_tweet(const unsigned char *,const unsigned char *); -#define crypto_verify_32_tweet_VERSION "-" -#define crypto_verify_32 crypto_verify_32_tweet -#define crypto_verify_32_BYTES crypto_verify_32_tweet_BYTES -#define crypto_verify_32_VERSION crypto_verify_32_tweet_VERSION -#define crypto_verify_32_IMPLEMENTATION "crypto_verify/32/tweet" -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/twofish.h b/third_party/cryptoppwin/include/cryptopp/twofish.h deleted file mode 100644 index cf289028..00000000 --- a/third_party/cryptoppwin/include/cryptopp/twofish.h +++ /dev/null @@ -1,64 +0,0 @@ -// twofish.h - originally written and placed in the public domain by Wei Dai - -/// \file twofish.h -/// \brief Classes for the Twofish block cipher - -#ifndef CRYPTOPP_TWOFISH_H -#define CRYPTOPP_TWOFISH_H - -#include "seckey.h" -#include "secblock.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Twofish block cipher information -/// \since Crypto++ 3.1 -struct Twofish_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8>, FixedRounds<16> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Twofish";} -}; - -/// \brief Twofish block cipher -/// \sa Twofish -/// \since Crypto++ 3.1 -class Twofish : public Twofish_Info, public BlockCipherDocumentation -{ - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); - - protected: - static word32 h0(word32 x, const word32 *key, unsigned int kLen); - static word32 h(word32 x, const word32 *key, unsigned int kLen); - - static const byte q[2][256]; - static const word32 mds[4][256]; - - FixedSizeSecBlock m_k; - FixedSizeSecBlock m_s; - }; - - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef Twofish::Encryption TwofishEncryption; -typedef Twofish::Decryption TwofishDecryption; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/validate.h b/third_party/cryptoppwin/include/cryptopp/validate.h deleted file mode 100644 index 17474b52..00000000 --- a/third_party/cryptoppwin/include/cryptopp/validate.h +++ /dev/null @@ -1,395 +0,0 @@ -// validate.h - originally written and placed in the public domain by Wei Dai -// CryptoPP::Test namespace added by JW in February 2017 - -#ifndef CRYPTOPP_VALIDATE_H -#define CRYPTOPP_VALIDATE_H - -#include "cryptlib.h" -#include "misc.h" -#include "files.h" -#include "argnames.h" -#include "algparam.h" -#include "hex.h" - -#include -#include -#include -#include -#include - -NAMESPACE_BEGIN(CryptoPP) -NAMESPACE_BEGIN(Test) - -// A hint to help locate TestData/ and TestVectors/ after install. Due to -// execve the path can be malicious. If the path is ficticous then we move -// onto the next potential path. Also note we only read from the path; we -// never write through it. Storage for the string is in test.cpp. -extern std::string g_argvPathHint; - -bool ValidateAll(bool thorough); -bool TestSettings(); -bool TestOS_RNG(); -// bool TestSecRandom(); -bool TestRandomPool(); -#if !defined(NO_OS_DEPENDENCE) -bool TestAutoSeededX917(); -#endif -#if (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64) -bool TestRDRAND(); -bool TestRDSEED(); -bool TestPadlockRNG(); -#endif -#if (CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64) -bool TestDARN(); -#endif -bool ValidateBaseCode(); -bool ValidateEncoder(); -bool ValidateCRC32(); -bool ValidateCRC32C(); -bool ValidateAdler32(); -bool ValidateMD2(); -bool ValidateMD4(); -bool ValidateMD5(); -bool ValidateSHA(); -bool ValidateSHA2(); -bool ValidateSHA3(); -bool ValidateSHAKE(); // output <= r, where r is blocksize -bool ValidateSHAKE_XOF(); // output > r, needs hand crafted tests -bool ValidateKeccak(); -bool ValidateTiger(); -bool ValidateRIPEMD(); -bool ValidatePanama(); -bool ValidateWhirlpool(); -bool ValidateLSH(); - -bool ValidateSM3(); -bool ValidateBLAKE2s(); -bool ValidateBLAKE2b(); -bool ValidatePoly1305(); -bool ValidateSipHash(); - -bool ValidateHMAC(); -bool ValidateTTMAC(); - -bool ValidateCipherModes(); -bool ValidatePBKDF(); -bool ValidateHKDF(); -bool ValidateScrypt(); - -bool ValidateDES(); -bool ValidateIDEA(); -bool ValidateSAFER(); -bool ValidateRC2(); -bool ValidateARC4(); - -bool ValidateRC5(); -bool ValidateBlowfish(); -bool ValidateBlowfishCompat(); -bool ValidateThreeWay(); -bool ValidateGOST(); -bool ValidateSHARK(); -bool ValidateSEAL(); -bool ValidateCAST(); -bool ValidateSquare(); -bool ValidateSKIPJACK(); -bool ValidateRC6(); -bool ValidateMARS(); -bool ValidateRijndael(); -bool ValidateTwofish(); -bool ValidateSerpent(); -bool ValidateSHACAL2(); -bool ValidateARIA(); -bool ValidateSIMECK(); -bool ValidateCHAM(); -bool ValidateHIGHT(); -bool ValidateLEA(); -bool ValidateSIMON(); -bool ValidateSPECK(); -bool ValidateCamellia(); - -bool ValidateHC128(); -bool ValidateHC256(); -bool ValidateRabbit(); -bool ValidateSalsa(); -bool ValidateChaCha(); -bool ValidateChaChaTLS(); -bool ValidateSosemanuk(); - -bool ValidateVMAC(); -bool ValidateCCM(); -bool ValidateGCM(); -bool ValidateXTS(); -bool ValidateCMAC(); - -bool ValidateBBS(); -bool ValidateDH(); -bool ValidateMQV(); -bool ValidateHMQV(); -bool ValidateFHMQV(); -bool ValidateRSA(); -bool ValidateElGamal(); -bool ValidateDLIES(); -bool ValidateNR(); -bool ValidateDSA(bool thorough); -bool ValidateLUC(); -bool ValidateLUC_DL(); -bool ValidateLUC_DH(); -bool ValidateXTR_DH(); -bool ValidateRabin(); -bool ValidateRW(); -bool ValidateECP(); -bool ValidateEC2N(); -bool ValidateECDSA(); -bool ValidateECDSA_RFC6979(); -bool ValidateECGDSA(bool thorough); -bool ValidateESIGN(); - -bool ValidateHashDRBG(); -bool ValidateHmacDRBG(); - -bool TestX25519(); -bool TestEd25519(); -bool ValidateX25519(); -bool ValidateEd25519(); -bool ValidateNaCl(); - -// If CRYPTOPP_DEBUG or CRYPTOPP_COVERAGE is in effect, then perform additional tests -#if (defined(CRYPTOPP_DEBUG) || defined(CRYPTOPP_COVERAGE)) && !defined(CRYPTOPP_IMPORTS) -# define CRYPTOPP_EXTENDED_VALIDATION 1 -#endif - -#if defined(CRYPTOPP_EXTENDED_VALIDATION) -// http://github.com/weidai11/cryptopp/issues/92 -bool TestSecBlock(); -// http://github.com/weidai11/cryptopp/issues/64 -bool TestPolynomialMod2(); -// http://github.com/weidai11/cryptopp/issues/336 -bool TestIntegerBitops(); -// http://github.com/weidai11/cryptopp/issues/602 -bool TestIntegerOps(); -// http://github.com/weidai11/cryptopp/issues/360 -bool TestRounding(); -// http://github.com/weidai11/cryptopp/issues/242 -bool TestHuffmanCodes(); -// http://github.com/weidai11/cryptopp/issues/346 -bool TestASN1Parse(); -bool TestASN1Functions(); -// https://github.com/weidai11/cryptopp/pull/334 -bool TestStringSink(); -// Additional tests due to no coverage -bool TestCompressors(); -bool TestEncryptors(); -bool TestMersenne(); -bool TestSharing(); -# if defined(CRYPTOPP_ALTIVEC_AVAILABLE) -bool TestAltivecOps(); -# endif -#endif - -class FixedRNG : public RandomNumberGenerator -{ -public: - FixedRNG(BufferedTransformation &source) : m_source(source) {} - - void GenerateBlock(byte *output, size_t size) - { - m_source.Get(output, size); - } - -private: - BufferedTransformation &m_source; -}; - -// Safer functions on Windows for C&A, http://github.com/weidai11/cryptopp/issues/55 -inline std::string TimeToString(const time_t& t) -{ -#if (CRYPTOPP_MSC_VERSION >= 1400) - tm localTime; - char timeBuf[64]; - errno_t err; - - err = ::localtime_s(&localTime, &t); - CRYPTOPP_ASSERT(err == 0); - err = ::asctime_s(timeBuf, sizeof(timeBuf), &localTime); - CRYPTOPP_ASSERT(err == 0); - - std::string str(err == 0 ? timeBuf : ""); -#elif defined(__MINGW32__) || defined(__MINGW64__) - char* timeString = ::asctime(::localtime(&t)); - std::string str(timeString ? timeString : ""); -#elif (_POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || defined(_POSIX_SOURCE)) - tm localTime; - char timeBuf[64]; - char* timeString = ::asctime_r(::localtime_r(&t, &localTime), timeBuf); - std::string str(timeString ? timeString : ""); -#else - char* timeString = ::asctime(::localtime(&t)); - std::string str(timeString ? timeString : ""); -#endif - - // Cleanup whitespace - std::string::size_type pos = 0; - while (!str.empty() && std::isspace(str[str.length()-1])) - {str.erase(str.end()-1);} - while (!str.empty() && std::string::npos != (pos = str.find(" ", pos))) - {str.erase(pos, 1);} - - return str; -} - -// Coverity finding -template -inline T StringToValue(const std::string& str) -{ - std::istringstream iss(str); - - // Arbitrary, but we need to clear a Coverity finding TAINTED_SCALAR - if (iss.str().length() > 25) - throw InvalidArgument(str + "' is too long"); - - T value; - iss >> std::noskipws >> value; - - // Use fail(), not bad() - if (iss.fail()) - throw InvalidArgument(str + "' is not a value"); - - if (NON_NEGATIVE && value < 0) - throw InvalidArgument(str + "' is negative"); - - return value; -} - -// Coverity finding -template<> -inline int StringToValue(const std::string& str) -{ - Integer n(str.c_str()); - long l = n.ConvertToLong(); - - int r; - if (!SafeConvert(l, r)) - throw InvalidArgument(str + "' is not an integer value"); - - return r; -} - -inline std::string AddSeparator(std::string str) -{ - if (str.empty()) return ""; - const char last = str[str.length()-1]; - if (last != '/' && last != '\\') - return str + "/"; - return str; -} - -// Use CRYPTOPP_DATA_DIR last. The problem this sidesteps is, finding an -// old version of Crypto++ library in CRYPTOPP_DATA_DIR when the library -// has been staged in DESTDIR. Using CRYPTOPP_DATA_DIR first only works -// as expected when CRYPTOPP_DATA_DIR is empty before an install. We -// encountered this problem rather quickly during testing of Crypto++ 8.1 -// when Crypto++ 8.0 was installed locally. It took some time to realize -// where the old test data was coming from. -static std::string GetDataDir() -{ - std::ifstream file; - std::string name, filename = "TestData/usage.dat"; - -#ifndef CRYPTOPP_DISABLE_DATA_DIR_SEARCH - // Look in $ORIGIN/../share/. This is likely a Linux install directory. - name = AddSeparator(g_argvPathHint) + std::string("../share/cryptopp/") + filename; - file.open(name.c_str()); - if (file.is_open()) - return AddSeparator(g_argvPathHint) + std::string("../share/cryptopp/"); -#endif -#ifndef CRYPTOPP_DISABLE_DATA_DIR_SEARCH - // Look in current working directory - name = AddSeparator(g_argvPathHint) + filename; - file.open(name.c_str()); - if (file.is_open()) - return AddSeparator(g_argvPathHint); -#endif -#ifdef CRYPTOPP_DATA_DIR - // Honor CRYPTOPP_DATA_DIR. This is likely an install directory if it is not "./". - name = AddSeparator(CRYPTOPP_DATA_DIR) + filename; - file.open(name.c_str()); - if (file.is_open()) - return AddSeparator(CRYPTOPP_DATA_DIR); -#endif - return "./"; -} - -inline std::string DataDir(const std::string& filename) -{ - std::string name; - std::ifstream file; - -#if CRYPTOPP_CXX11_STATIC_INIT - static std::string path = AddSeparator(GetDataDir()); - name = path + filename; - file.open(name.c_str()); - if (file.is_open()) - return name; -#else - // Avoid static initialization problems - name = AddSeparator(GetDataDir()) + filename; - file.open(name.c_str()); - if (file.is_open()) - return name; -#endif - - // This will cause the expected exception in the caller - return filename; -} - -// Definition in test.cpp -RandomNumberGenerator& GlobalRNG(); - -// Definition in datatest.cpp -bool RunTestDataFile(const char *filename, const NameValuePairs &overrideParameters=g_nullNameValuePairs, bool thorough=true); - -// Definitions in validat6.cpp -bool CryptoSystemValidate(PK_Decryptor &priv, PK_Encryptor &pub, bool thorough = false); -bool SimpleKeyAgreementValidate(SimpleKeyAgreementDomain &d); -bool AuthenticatedKeyAgreementWithRolesValidate(AuthenticatedKeyAgreementDomain &initiator, AuthenticatedKeyAgreementDomain &recipient); -bool AuthenticatedKeyAgreementValidate(AuthenticatedKeyAgreementDomain &d); -bool SignatureValidate(PK_Signer &priv, PK_Verifier &pub, bool thorough = false); - -// Miscellaneous PK definitions in validat6.cpp -// Key Agreement definitions in validat7.cpp -// Encryption and Decryption definitions in validat8.cpp -// Sign and Verify definitions in validat9.cpp - -bool ValidateECP(); -bool ValidateEC2N(); - -bool ValidateRSA_Encrypt(); -bool ValidateRSA_Sign(); - -bool ValidateLUC_Encrypt(); -bool ValidateLUC_Sign(); - -bool ValidateLUC_DL_Encrypt(); -bool ValidateLUC_DL_Sign(); - -bool ValidateRabin_Encrypt(); -bool ValidateRabin_Sign(); - -bool ValidateECP(); -bool ValidateECP_Agreement(); -bool ValidateECP_Encrypt(); -bool ValidateECP_Sign(); - -bool ValidateECP_Legacy_Encrypt(); -bool ValidateEC2N_Legacy_Encrypt(); -bool ValidateECP_NULLDigest_Encrypt(); - -bool ValidateEC2N(); -bool ValidateEC2N_Agreement(); -bool ValidateEC2N_Encrypt(); -bool ValidateEC2N_Sign(); - -NAMESPACE_END // Test -NAMESPACE_END // CryptoPP - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/vmac.h b/third_party/cryptoppwin/include/cryptopp/vmac.h deleted file mode 100644 index 2da1c7fc..00000000 --- a/third_party/cryptoppwin/include/cryptopp/vmac.h +++ /dev/null @@ -1,91 +0,0 @@ -// vmac.h - originally written and placed in the public domain by Wei Dai - -/// \file vmac.h -/// \brief Classes for the VMAC message authentication code -/// \since Crypto++ 5.5 - -#ifndef CRYPTOPP_VMAC_H -#define CRYPTOPP_VMAC_H - -#include "cryptlib.h" -#include "iterhash.h" -#include "seckey.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_VMAC_ASM 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief VMAC message authentication code base class -/// \since Crypto++ 5.5 -class VMAC_Base : public IteratedHashBase -{ -public: - std::string AlgorithmName() const {return std::string("VMAC(") + GetCipher().AlgorithmName() + ")-" + IntToString(DigestSize()*8);} - std::string AlgorithmProvider() const {return GetCipher().AlgorithmProvider();} - unsigned int IVSize() const {return GetCipher().BlockSize();} - unsigned int MinIVLength() const {return 1;} - void Resynchronize(const byte *nonce, int length=-1); - void GetNextIV(RandomNumberGenerator &rng, byte *IV); - unsigned int DigestSize() const {return m_is128 ? 16 : 8;}; - void UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs ¶ms); - void TruncatedFinal(byte *mac, size_t size); - unsigned int BlockSize() const {return m_L1KeyLength;} - ByteOrder GetByteOrder() const {return LITTLE_ENDIAN_ORDER;} - unsigned int OptimalDataAlignment() const; - -protected: - virtual BlockCipher & AccessCipher() =0; - virtual int DefaultDigestSize() const =0; - const BlockCipher & GetCipher() const {return const_cast(this)->AccessCipher();} - void HashEndianCorrectedBlock(const word64 *data); - size_t HashMultipleBlocks(const word64 *input, size_t length); - void Init() {} - word64* StateBuf() {return NULLPTR;} - word64* DataBuf() {return (word64 *)(void*)m_data();} - - void VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64, int tagPart); - template - void VHASH_Update_Template(const word64 *data, size_t blockRemainingInWord128); - void VHASH_Update(const word64 *data, size_t blocksRemainingInWord128); - - CRYPTOPP_BLOCK_1(polyState, word64, (m_is128 ? 8 : 4)) - CRYPTOPP_BLOCK_2(nhKey, word64, m_L1KeyLength/sizeof(word64) + 2*m_is128) - CRYPTOPP_BLOCK_3(data, byte, m_L1KeyLength) - CRYPTOPP_BLOCK_4(l3Key, word64, (m_is128 ? 4 : 2)) - CRYPTOPP_BLOCK_5(nonce, byte, IVSize()) - CRYPTOPP_BLOCK_6(pad, byte, IVSize()) - CRYPTOPP_BLOCKS_END(6) - - bool m_is128, m_padCached, m_isFirstBlock; - unsigned int m_L1KeyLength; -}; - -/// \brief VMAC message authentication code -/// \tparam T_BlockCipher block cipher -/// \tparam T_DigestBitSize digest size, in bits -/// \details VMAC is a block cipher-based message authentication code algorithm -/// using a universal hash proposed by Ted Krovetz and Wei Dai in April 2007. The -/// algorithm was designed for high performance backed by a formal analysis. -/// \details The implementation is based on Ted Krovetz's public domain vmac.c -/// and draft-krovetz-vmac-01.txt. -/// \sa VMAC. -/// \since Crypto++ 5.5 -template -class VMAC : public SimpleKeyingInterfaceImpl > -{ -public: - static std::string StaticAlgorithmName() {return std::string("VMAC(") + T_BlockCipher::StaticAlgorithmName() + ")-" + IntToString(T_DigestBitSize);} - -private: - BlockCipher & AccessCipher() {return m_cipher;} - int DefaultDigestSize() const {return T_DigestBitSize/8;} - typename T_BlockCipher::Encryption m_cipher; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/wake.h b/third_party/cryptoppwin/include/cryptopp/wake.h deleted file mode 100644 index 616cbf1a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/wake.h +++ /dev/null @@ -1,59 +0,0 @@ -// wake.h - originally written and placed in the public domain by Wei Dai - -/// \file wake.h -/// \brief Classes for WAKE stream cipher - -#ifndef CRYPTOPP_WAKE_H -#define CRYPTOPP_WAKE_H - -#include "seckey.h" -#include "secblock.h" -#include "strciphr.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief WAKE stream cipher information -/// \tparam B Endianness of the stream cipher -/// \since Crypto++ 1.0 -template -struct WAKE_OFB_Info : public FixedKeyLength<32> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return B::ToEnum() == LITTLE_ENDIAN_ORDER ? "WAKE-OFB-LE" : "WAKE-OFB-BE";} -}; - -class CRYPTOPP_NO_VTABLE WAKE_Base -{ -protected: - word32 M(word32 x, word32 y); - void GenKey(word32 k0, word32 k1, word32 k2, word32 k3); - - word32 t[257]; - word32 r3, r4, r5, r6; -}; - -/// \brief WAKE stream cipher operation -/// \tparam B Endianness of the stream cipher -/// \since Crypto++ 1.0 -template -class CRYPTOPP_NO_VTABLE WAKE_Policy : public AdditiveCipherConcretePolicy, protected WAKE_Base -{ -protected: - void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); - // OFB - void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount); - bool CipherIsRandomAccess() const {return false;} -}; - -/// \brief WAKE stream cipher -/// \tparam B Endianness of the stream cipher -/// \since Crypto++ 1.0 -template -struct WAKE_OFB : public WAKE_OFB_Info, public SymmetricCipherDocumentation -{ - typedef SymmetricCipherFinal, AdditiveCipherTemplate<> >, WAKE_OFB_Info > Encryption; - typedef Encryption Decryption; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/whrlpool.h b/third_party/cryptoppwin/include/cryptopp/whrlpool.h deleted file mode 100644 index d5b202fd..00000000 --- a/third_party/cryptoppwin/include/cryptopp/whrlpool.h +++ /dev/null @@ -1,42 +0,0 @@ -// whrlpool.h - originally modified by Kevin Springle from Paulo Barreto and Vincent Rijmen's -// public domain code, whirlpool.c. Updated to Whirlpool version 3.0, optimized -// and SSE version added by WD. All modifications are placed in the public domain. - -#ifndef CRYPTOPP_WHIRLPOOL_H -#define CRYPTOPP_WHIRLPOOL_H - -/// \file whrlpool.h -/// \brief Classes for the Whirlpool message digest -/// \details Crypto++ provides version 3.0 of the Whirlpool algorithm. -/// This version of the algorithm was submitted for ISO standardization. - -#include "config.h" -#include "iterhash.h" - -// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler -// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232 -#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM) -# define CRYPTOPP_DISABLE_WHIRLPOOL_ASM 1 -#endif - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Whirlpool message digest -/// \details Crypto++ provides version 3.0 of the Whirlpool algorithm. -/// This version of the algorithm was submitted for ISO standardization. -/// \since Crypto++ 5.2 -/// \sa Whirlpool -class Whirlpool : public IteratedHashWithStaticTransform -{ -public: - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Whirlpool";} - std::string AlgorithmProvider() const; - - static void InitState(HashWordType *state); - static void Transform(word64 *digest, const word64 *data); - void TruncatedFinal(byte *hash, size_t size); -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/words.h b/third_party/cryptoppwin/include/cryptopp/words.h deleted file mode 100644 index a7ac1995..00000000 --- a/third_party/cryptoppwin/include/cryptopp/words.h +++ /dev/null @@ -1,225 +0,0 @@ -// words.h - originally written and placed in the public domain by Wei Dai - -/// \file words.h -/// \brief Support functions for word operations - -#ifndef CRYPTOPP_WORDS_H -#define CRYPTOPP_WORDS_H - -#include "config.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Count the number of words -/// \param x word array -/// \param n size of the word array, in elements -/// \return number of words used in the array. -/// \details CountWords counts the number of words in a word array. -/// Leading 0-words are not included in the count. -/// \since Crypto++ 1.0 -inline size_t CountWords(const word *x, size_t n) -{ - while (n && x[n-1]==0) - n--; - return n; -} - -/// \brief Set the value of words -/// \param r word array -/// \param a value -/// \param n size of the word array, in elements -/// \details SetWords sets all elements in the word array to the -/// specified value. -/// \since Crypto++ 1.0 -inline void SetWords(word *r, word a, size_t n) -{ - for (size_t i=0; i> (WORD_BITS-shiftBits); - } - return carry; -} - -/// \brief Right shift word array -/// \param r word array -/// \param n size of the word array, in elements -/// \param shiftBits number of bits to shift -/// \return word shifted out -/// \details ShiftWordsRightByBits shifts the word array shight by -/// shiftBits. ShiftWordsRightByBits shifts bits out on the right. -/// \note shiftBits must be less than WORD_BITS. -/// \since Crypto++ 1.0 -inline word ShiftWordsRightByBits(word *r, size_t n, unsigned int shiftBits) -{ - CRYPTOPP_ASSERT (shiftBits0; i--) - { - u = r[i-1]; - r[i-1] = (u >> shiftBits) | carry; - carry = u << (WORD_BITS-shiftBits); - } - return carry; -} - -/// \brief Left shift word array -/// \param r word array -/// \param n size of the word array, in elements -/// \param shiftWords number of words to shift -/// \details ShiftWordsLeftByWords shifts the word array left by -/// shiftWords. ShiftWordsLeftByWords shifts bits out on the left; -/// it does not extend the array. -/// \since Crypto++ 1.0 -inline void ShiftWordsLeftByWords(word *r, size_t n, size_t shiftWords) -{ - shiftWords = STDMIN(shiftWords, n); - if (shiftWords) - { - for (size_t i=n-1; i>=shiftWords; i--) - r[i] = r[i-shiftWords]; - SetWords(r, 0, shiftWords); - } -} - -/// \brief Right shift word array -/// \param r word array -/// \param n size of the word array, in elements -/// \param shiftWords number of words to shift -/// \details ShiftWordsRightByWords shifts the word array right by -/// shiftWords. ShiftWordsRightByWords shifts bits out on the right. -/// \since Crypto++ 1.0 -inline void ShiftWordsRightByWords(word *r, size_t n, size_t shiftWords) -{ - shiftWords = STDMIN(shiftWords, n); - if (shiftWords) - { - for (size_t i=0; i+shiftWordsdraft-ietf-curdle-pkix. -/// \details If you have a little endian array and you want to wrap it in -/// an Integer using big endian then you can perform the following: -///
Integer x(my_arr, SECRET_KEYLENGTH, UNSIGNED, LITTLE_ENDIAN_ORDER);
-/// \sa Andrew Moon's x22519 GitHub curve25519-donna, -/// ed22519 GitHub ed25519-donna, and -/// draft-ietf-curdle-pkix -/// \since Crypto++ 8.0 - -#ifndef CRYPTOPP_XED25519_H -#define CRYPTOPP_XED25519_H - -#include "cryptlib.h" -#include "pubkey.h" -#include "oids.h" - -NAMESPACE_BEGIN(CryptoPP) - -class Integer; -struct ed25519Signer; -struct ed25519Verifier; - -// ******************** x25519 Agreement ************************* // - -/// \brief x25519 with key validation -/// \since Crypto++ 8.0 -class x25519 : public SimpleKeyAgreementDomain, public CryptoParameters, public PKCS8PrivateKey -{ -public: - /// \brief Size of the private key - /// \details SECRET_KEYLENGTH is the size of the private key, in bytes. - CRYPTOPP_CONSTANT(SECRET_KEYLENGTH = 32); - /// \brief Size of the public key - /// \details PUBLIC_KEYLENGTH is the size of the public key, in bytes. - CRYPTOPP_CONSTANT(PUBLIC_KEYLENGTH = 32); - /// \brief Size of the shared key - /// \details SHARED_KEYLENGTH is the size of the shared key, in bytes. - CRYPTOPP_CONSTANT(SHARED_KEYLENGTH = 32); - - virtual ~x25519() {} - - /// \brief Create a x25519 object - /// \details This constructor creates an empty x25519 object. It is - /// intended for use in loading existing parameters, like CryptoBox - /// parameters. If you are performing key agreement you should use a - /// constructor that generates random parameters on construction. - x25519() {} - - /// \brief Create a x25519 object - /// \param y public key - /// \param x private key - /// \details This constructor creates a x25519 object using existing parameters. - /// \note The public key is not validated. - x25519(const byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]); - - /// \brief Create a x25519 object - /// \param x private key - /// \details This constructor creates a x25519 object using existing parameters. - /// The public key is calculated from the private key. - x25519(const byte x[SECRET_KEYLENGTH]); - - /// \brief Create a x25519 object - /// \param y public key - /// \param x private key - /// \details This constructor creates a x25519 object using existing parameters. - /// \note The public key is not validated. - x25519(const Integer &y, const Integer &x); - - /// \brief Create a x25519 object - /// \param x private key - /// \details This constructor creates a x25519 object using existing parameters. - /// The public key is calculated from the private key. - x25519(const Integer &x); - - /// \brief Create a x25519 object - /// \param rng RandomNumberGenerator derived class - /// \details This constructor creates a new x25519 using the random number generator. - x25519(RandomNumberGenerator &rng); - - /// \brief Create a x25519 object - /// \param params public and private key - /// \details This constructor creates a x25519 object using existing parameters. - /// The params can be created with Save. - /// \note The public key is not validated. - x25519(BufferedTransformation ¶ms); - - /// \brief Create a x25519 object - /// \param oid an object identifier - /// \details This constructor creates a new x25519 using the specified OID. The public - /// and private points are uninitialized. - x25519(const OID &oid); - - /// \brief Clamp a private key - /// \param x private key - /// \details ClampKeys() clamps a private key and then regenerates the - /// public key from the private key. - void ClampKey(byte x[SECRET_KEYLENGTH]) const; - - /// \brief Determine if private key is clamped - /// \param x private key - bool IsClamped(const byte x[SECRET_KEYLENGTH]) const; - - /// \brief Test if a key has small order - /// \param y public key - bool IsSmallOrder(const byte y[PUBLIC_KEYLENGTH]) const; - - /// \brief Get the Object Identifier - /// \return the Object Identifier - /// \details The default OID is from RFC 8410 using id-X25519. - /// The default private key format is RFC 5208. - OID GetAlgorithmID() const { - return m_oid.Empty() ? ASN1::X25519() : m_oid; - } - - /// \brief Set the Object Identifier - /// \param oid the new Object Identifier - void SetAlgorithmID(const OID& oid) { - m_oid = oid; - } - - // CryptoParameters - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // CryptoParameters - CryptoParameters & AccessCryptoParameters() {return *this;} - - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \details Save() will write the OID associated with algorithm or scheme. - /// In the case of public and private keys, this function writes the - /// subjectPublicKeyInfo parts. - /// \details The default OID is from RFC 8410 using id-X25519. - /// The default private key format is RFC 5208, which is the old format. - /// The old format provides the best interop, and keys will work - /// with OpenSSL. - /// \sa RFC 5958, Asymmetric - /// Key Packages - void Save(BufferedTransformation &bt) const { - DEREncode(bt, 0); - } - - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \param v1 flag indicating v1 - /// \details Save() will write the OID associated with algorithm or scheme. - /// In the case of public and private keys, this function writes the - /// subjectPublicKeyInfo parts. - /// \details The default OID is from RFC 8410 using id-X25519. - /// The default private key format is RFC 5208. - /// \details v1 means INTEGER 0 is written. INTEGER 0 means - /// RFC 5208 format, which is the old format. The old format provides - /// the best interop, and keys will work with OpenSSL. The other - /// option uses INTEGER 1. INTEGER 1 means RFC 5958 format, - /// which is the new format. - /// \sa RFC 5958, Asymmetric - /// Key Packages - void Save(BufferedTransformation &bt, bool v1) const { - DEREncode(bt, v1 ? 0 : 1); - } - - /// \brief BER decode ASN.1 object - /// \param bt BufferedTransformation object - /// \sa RFC 5958, Asymmetric - /// Key Packages - void Load(BufferedTransformation &bt) { - BERDecode(bt); - } - - // PKCS8PrivateKey - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const { DEREncode(bt, 0); } - void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePrivateKey(BufferedTransformation &bt) const; - - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \param version indicates version - /// \details DEREncode() will write the OID associated with algorithm or - /// scheme. In the case of public and private keys, this function writes - /// the subjectPublicKeyInfo parts. - /// \details The default OID is from RFC 8410 using id-X25519. - /// The default private key format is RFC 5208. - /// \details The value of version is written as the INTEGER. INTEGER 0 means - /// RFC 5208 format, which is the old format. The old format provides - /// the best interop, and keys will work with OpenSSL. The INTEGER 1 - /// means RFC 5958 format, which is the new format. - void DEREncode(BufferedTransformation &bt, int version) const; - - /// \brief Determine if OID is valid for this object - /// \details BERDecodeAndCheckAlgorithmID() parses the OID from - /// bt and determines if it valid for this object. The - /// problem in practice is there are multiple OIDs available to - /// denote curve25519 operations. The OIDs include an old GNU - /// OID used by SSH, OIDs specified in draft-josefsson-pkix-newcurves, - /// and OIDs specified in draft-ietf-curdle-pkix. - /// \details By default BERDecodeAndCheckAlgorithmID() accepts an - /// OID set by the user, ASN1::curve25519() and ASN1::X25519(). - /// ASN1::curve25519() is generic and says "this key is valid for - /// curve25519 operations". ASN1::X25519() is specific and says - /// "this key is valid for x25519 key exchange." - void BERDecodeAndCheckAlgorithmID(BufferedTransformation& bt); - - // DL_PrivateKey - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms); - - // SimpleKeyAgreementDomain - unsigned int AgreedValueLength() const {return SHARED_KEYLENGTH;} - unsigned int PrivateKeyLength() const {return SECRET_KEYLENGTH;} - unsigned int PublicKeyLength() const {return PUBLIC_KEYLENGTH;} - - // SimpleKeyAgreementDomain - void GeneratePrivateKey(RandomNumberGenerator &rng, byte *privateKey) const; - void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const; - bool Agree(byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const; - -protected: - // Create a public key from a private key - void SecretToPublicKey(byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]) const; - -protected: - FixedSizeSecBlock m_sk; - FixedSizeSecBlock m_pk; - OID m_oid; // preferred OID -}; - -// ****************** ed25519 Signer *********************** // - -/// \brief ed25519 message accumulator -/// \details ed25519 buffers the entire message, and does not -/// digest the message incrementally. You should be careful with -/// large messages like files on-disk. The behavior is by design -/// because Bernstein feels small messages should be authenticated; -/// and larger messages will be digested by the application. -/// \details The accumulator is used for signing and verification. -/// The first 64-bytes of storage is reserved for the signature. -/// During signing the signature storage is unused. During -/// verification the first 64 bytes holds the signature. The -/// signature is provided by the PK_Verifier framework and the -/// call to PK_Signer::InputSignature. Member functions data() -/// and size() refer to the accumulated message. Member function -/// signature() refers to the signature with an implicit size of -/// SIGNATURE_LENGTH bytes. -/// \details Applications which digest large messages, like an ISO -/// disk file, should take care because the design effectively -/// disgorges the format operation from the signing operation. -/// Put another way, be careful to ensure what you are signing is -/// is in fact a digest of the intended message, and not a different -/// message digest supplied by an attacker. -struct ed25519_MessageAccumulator : public PK_MessageAccumulator -{ - CRYPTOPP_CONSTANT(RESERVE_SIZE=2048+64); - CRYPTOPP_CONSTANT(SIGNATURE_LENGTH=64); - - /// \brief Create a message accumulator - ed25519_MessageAccumulator() { - Restart(); - } - - /// \brief Create a message accumulator - /// \details ed25519 does not use a RNG. You can safely use - /// NullRNG() because IsProbablistic returns false. - ed25519_MessageAccumulator(RandomNumberGenerator &rng) { - CRYPTOPP_UNUSED(rng); Restart(); - } - - /// \brief Add data to the accumulator - /// \param msg pointer to the data to accumulate - /// \param len the size of the data, in bytes - void Update(const byte* msg, size_t len) { - if (msg && len) - m_msg.insert(m_msg.end(), msg, msg+len); - } - - /// \brief Reset the accumulator - void Restart() { - m_msg.reserve(RESERVE_SIZE); - m_msg.resize(SIGNATURE_LENGTH); - } - - /// \brief Retrieve pointer to signature buffer - /// \return pointer to signature buffer - byte* signature() { - return &m_msg[0]; - } - - /// \brief Retrieve pointer to signature buffer - /// \return pointer to signature buffer - const byte* signature() const { - return &m_msg[0]; - } - - /// \brief Retrieve pointer to data buffer - /// \return pointer to data buffer - const byte* data() const { - return &m_msg[0]+SIGNATURE_LENGTH; - } - - /// \brief Retrieve size of data buffer - /// \return size of the data buffer, in bytes - size_t size() const { - return m_msg.size()-SIGNATURE_LENGTH; - } - -protected: - // TODO: Find an equivalent Crypto++ structure. - std::vector > m_msg; -}; - -/// \brief Ed25519 private key -/// \details ed25519PrivateKey is somewhat of a hack. It needed to -/// provide DL_PrivateKey interface to fit into the existing -/// framework, but it lacks a lot of the internals of a true -/// DL_PrivateKey. The missing pieces include GroupParameters -/// and Point, which provide the low level field operations -/// found in traditional implementations like NIST curves over -/// prime and binary fields. -/// \details ed25519PrivateKey is also unusual because the -/// class members of interest are byte arrays and not Integers. -/// In addition, the byte arrays are little-endian meaning -/// LSB is at element 0 and the MSB is at element 31. -/// If you call GetPrivateExponent() then the little-endian byte -/// array is converted to a big-endian Integer() so it can be -/// returned the way a caller expects. And calling -/// SetPrivateExponent performs a similar internal conversion. -/// \since Crypto++ 8.0 -struct ed25519PrivateKey : public PKCS8PrivateKey -{ - /// \brief Size of the private key - /// \details SECRET_KEYLENGTH is the size of the private key, in bytes. - CRYPTOPP_CONSTANT(SECRET_KEYLENGTH = 32); - /// \brief Size of the public key - /// \details PUBLIC_KEYLENGTH is the size of the public key, in bytes. - CRYPTOPP_CONSTANT(PUBLIC_KEYLENGTH = 32); - /// \brief Size of the signature - /// \details SIGNATURE_LENGTH is the size of the signature, in bytes. - /// ed25519 is a DL-based signature scheme. The signature is the - /// concatenation of r || s. - CRYPTOPP_CONSTANT(SIGNATURE_LENGTH = 64); - - virtual ~ed25519PrivateKey() {} - - // CryptoMaterial - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // GroupParameters - OID GetAlgorithmID() const { - return m_oid.Empty() ? ASN1::Ed25519() : m_oid; - } - - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \details Save() will write the OID associated with algorithm or scheme. - /// In the case of public and private keys, this function writes the - /// subjectPublicKeyInfo parts. - /// \details The default OID is from RFC 8410 using id-Ed25519. - /// The default private key format is RFC 5208, which is the old format. - /// The old format provides the best interop, and keys will work - /// with OpenSSL. - /// \sa RFC 5958, Asymmetric - /// Key Packages - void Save(BufferedTransformation &bt) const { - DEREncode(bt, 0); - } - - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \param v1 flag indicating v1 - /// \details Save() will write the OID associated with algorithm or scheme. - /// In the case of public and private keys, this function writes the - /// subjectPublicKeyInfo parts. - /// \details The default OID is from RFC 8410 using id-Ed25519. - /// The default private key format is RFC 5208. - /// \details v1 means INTEGER 0 is written. INTEGER 0 means - /// RFC 5208 format, which is the old format. The old format provides - /// the best interop, and keys will work with OpenSSL. The other - /// option uses INTEGER 1. INTEGER 1 means RFC 5958 format, - /// which is the new format. - /// \sa RFC 5958, Asymmetric - /// Key Packages - void Save(BufferedTransformation &bt, bool v1) const { - DEREncode(bt, v1 ? 0 : 1); - } - - /// \brief BER decode ASN.1 object - /// \param bt BufferedTransformation object - /// \sa RFC 5958, Asymmetric - /// Key Packages - void Load(BufferedTransformation &bt) { - BERDecode(bt); - } - - /// \brief Initializes a public key from this key - /// \param pub reference to a public key - void MakePublicKey(PublicKey &pub) const; - - // PKCS8PrivateKey - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const { DEREncode(bt, 0); } - void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePrivateKey(BufferedTransformation &bt) const; - - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \param version indicates version - /// \details DEREncode() will write the OID associated with algorithm or - /// scheme. In the case of public and private keys, this function writes - /// the subjectPublicKeyInfo parts. - /// \details The default OID is from RFC 8410 using id-X25519. - /// The default private key format is RFC 5208. - /// \details The value of version is written as the INTEGER. INTEGER 0 means - /// RFC 5208 format, which is the old format. The old format provides - /// the best interop, and keys will work with OpenSSL. The INTEGER 1 - /// means RFC 5958 format, which is the new format. - void DEREncode(BufferedTransformation &bt, int version) const; - - /// \brief Determine if OID is valid for this object - /// \details BERDecodeAndCheckAlgorithmID() parses the OID from - /// bt and determines if it valid for this object. The - /// problem in practice is there are multiple OIDs available to - /// denote curve25519 operations. The OIDs include an old GNU - /// OID used by SSH, OIDs specified in draft-josefsson-pkix-newcurves, - /// and OIDs specified in draft-ietf-curdle-pkix. - /// \details By default BERDecodeAndCheckAlgorithmID() accepts an - /// OID set by the user, ASN1::curve25519() and ASN1::Ed25519(). - /// ASN1::curve25519() is generic and says "this key is valid for - /// curve25519 operations". ASN1::Ed25519() is specific and says - /// "this key is valid for ed25519 signing." - void BERDecodeAndCheckAlgorithmID(BufferedTransformation& bt); - - // PKCS8PrivateKey - void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms); - void SetPrivateExponent(const byte x[SECRET_KEYLENGTH]); - void SetPrivateExponent(const Integer &x); - const Integer& GetPrivateExponent() const; - - /// \brief Test if a key has small order - /// \param y public key - bool IsSmallOrder(const byte y[PUBLIC_KEYLENGTH]) const; - - /// \brief Retrieve private key byte array - /// \return the private key byte array - /// \details GetPrivateKeyBytePtr() is used by signing code to call ed25519_sign. - const byte* GetPrivateKeyBytePtr() const { - return m_sk.begin(); - } - - /// \brief Retrieve public key byte array - /// \return the public key byte array - /// \details GetPublicKeyBytePtr() is used by signing code to call ed25519_sign. - const byte* GetPublicKeyBytePtr() const { - return m_pk.begin(); - } - -protected: - // Create a public key from a private key - void SecretToPublicKey(byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]) const; - -protected: - FixedSizeSecBlock m_sk; - FixedSizeSecBlock m_pk; - OID m_oid; // preferred OID - mutable Integer m_x; // for DL_PrivateKey -}; - -/// \brief Ed25519 signature algorithm -/// \since Crypto++ 8.0 -struct ed25519Signer : public PK_Signer -{ - /// \brief Size of the private key - /// \details SECRET_KEYLENGTH is the size of the private key, in bytes. - CRYPTOPP_CONSTANT(SECRET_KEYLENGTH = 32); - /// \brief Size of the public key - /// \details PUBLIC_KEYLENGTH is the size of the public key, in bytes. - CRYPTOPP_CONSTANT(PUBLIC_KEYLENGTH = 32); - /// \brief Size of the signature - /// \details SIGNATURE_LENGTH is the size of the signature, in bytes. - /// ed25519 is a DL-based signature scheme. The signature is the - /// concatenation of r || s. - CRYPTOPP_CONSTANT(SIGNATURE_LENGTH = 64); - typedef Integer Element; - - virtual ~ed25519Signer() {} - - /// \brief Create an ed25519Signer object - ed25519Signer() {} - - /// \brief Create an ed25519Signer object - /// \param y public key - /// \param x private key - /// \details This constructor creates an ed25519Signer object using existing parameters. - /// \note The public key is not validated. - ed25519Signer(const byte y[PUBLIC_KEYLENGTH], const byte x[SECRET_KEYLENGTH]); - - /// \brief Create an ed25519Signer object - /// \param x private key - /// \details This constructor creates an ed25519Signer object using existing parameters. - /// The public key is calculated from the private key. - ed25519Signer(const byte x[SECRET_KEYLENGTH]); - - /// \brief Create an ed25519Signer object - /// \param y public key - /// \param x private key - /// \details This constructor creates an ed25519Signer object using existing parameters. - /// \note The public key is not validated. - ed25519Signer(const Integer &y, const Integer &x); - - /// \brief Create an ed25519Signer object - /// \param x private key - /// \details This constructor creates an ed25519Signer object using existing parameters. - /// The public key is calculated from the private key. - ed25519Signer(const Integer &x); - - /// \brief Create an ed25519Signer object - /// \param key PKCS8 private key - /// \details This constructor creates an ed25519Signer object using existing private key. - /// \note The keys are not validated. - /// \since Crypto++ 8.6 - ed25519Signer(const PKCS8PrivateKey &key); - - /// \brief Create an ed25519Signer object - /// \param rng RandomNumberGenerator derived class - /// \details This constructor creates a new ed25519Signer using the random number generator. - ed25519Signer(RandomNumberGenerator &rng); - - /// \brief Create an ed25519Signer object - /// \param params public and private key - /// \details This constructor creates an ed25519Signer object using existing parameters. - /// The params can be created with Save. - /// \note The public key is not validated. - ed25519Signer(BufferedTransformation ¶ms); - - // DL_ObjectImplBase - /// \brief Retrieves a reference to a Private Key - /// \details AccessKey() retrieves a non-const reference to a private key. - PrivateKey& AccessKey() { return m_key; } - PrivateKey& AccessPrivateKey() { return m_key; } - - /// \brief Retrieves a reference to a Private Key - /// \details AccessKey() retrieves a const reference to a private key. - const PrivateKey& GetKey() const { return m_key; } - const PrivateKey& GetPrivateKey() const { return m_key; } - - // DL_SignatureSchemeBase - size_t SignatureLength() const { return SIGNATURE_LENGTH; } - size_t MaxRecoverableLength() const { return 0; } - size_t MaxRecoverableLengthFromSignatureLength(size_t signatureLength) const { - CRYPTOPP_UNUSED(signatureLength); return 0; - } - - bool IsProbabilistic() const { return false; } - bool AllowNonrecoverablePart() const { return false; } - bool RecoverablePartFirst() const { return false; } - - PK_MessageAccumulator* NewSignatureAccumulator(RandomNumberGenerator &rng) const { - return new ed25519_MessageAccumulator(rng); - } - - void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const { - CRYPTOPP_UNUSED(messageAccumulator); CRYPTOPP_UNUSED(recoverableMessage); - CRYPTOPP_UNUSED(recoverableMessageLength); - throw NotImplemented("ed25519Signer: this object does not support recoverable messages"); - } - - size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart) const; - - /// \brief Sign a stream - /// \param rng a RandomNumberGenerator derived class - /// \param stream an std::istream derived class - /// \param signature a block of bytes for the signature - /// \return actual signature length - /// \details SignStream() handles large streams. The Stream functions were added to - /// ed25519 for signing and verifying files that are too large for a memory allocation. - /// The functions are not present in other library signers and verifiers. - /// \details ed25519 is a deterministic signature scheme. IsProbabilistic() - /// returns false and the random number generator can be NullRNG(). - /// \pre COUNTOF(signature) == MaxSignatureLength() - /// \since Crypto++ 8.1 - size_t SignStream (RandomNumberGenerator &rng, std::istream& stream, byte *signature) const; - -protected: - ed25519PrivateKey m_key; -}; - -// ****************** ed25519 Verifier *********************** // - -/// \brief Ed25519 public key -/// \details ed25519PublicKey is somewhat of a hack. It needed to -/// provide DL_PublicKey interface to fit into the existing -/// framework, but it lacks a lot of the internals of a true -/// DL_PublicKey. The missing pieces include GroupParameters -/// and Point, which provide the low level field operations -/// found in traditional implementations like NIST curves over -/// prime and binary fields. -/// \details ed25519PublicKey is also unusual because the -/// class members of interest are byte arrays and not Integers. -/// In addition, the byte arrays are little-endian meaning -/// LSB is at element 0 and the MSB is at element 31. -/// If you call GetPublicElement() then the little-endian byte -/// array is converted to a big-endian Integer() so it can be -/// returned the way a caller expects. And calling -/// SetPublicElement() performs a similar internal conversion. -/// \since Crypto++ 8.0 -struct ed25519PublicKey : public X509PublicKey -{ - /// \brief Size of the public key - /// \details PUBLIC_KEYLENGTH is the size of the public key, in bytes. - CRYPTOPP_CONSTANT(PUBLIC_KEYLENGTH = 32); - typedef Integer Element; - - virtual ~ed25519PublicKey() {} - - OID GetAlgorithmID() const { - return m_oid.Empty() ? ASN1::Ed25519() : m_oid; - } - - /// \brief DER encode ASN.1 object - /// \param bt BufferedTransformation object - /// \details Save() will write the OID associated with algorithm or scheme. - /// In the case of public and private keys, this function writes the - /// subjectPublicKeyInfo parts. - /// \details The default OID is from RFC 8410 using id-X25519. - /// The default private key format is RFC 5208, which is the old format. - /// The old format provides the best interop, and keys will work - /// with OpenSSL. - void Save(BufferedTransformation &bt) const { - DEREncode(bt); - } - - /// \brief BER decode ASN.1 object - /// \param bt BufferedTransformation object - /// \sa RFC 5958, Asymmetric - /// Key Packages - void Load(BufferedTransformation &bt) { - BERDecode(bt); - } - - // X509PublicKey - void BERDecode(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size); - void DEREncodePublicKey(BufferedTransformation &bt) const; - - /// \brief Determine if OID is valid for this object - /// \details BERDecodeAndCheckAlgorithmID() parses the OID from - /// bt and determines if it valid for this object. The - /// problem in practice is there are multiple OIDs available to - /// denote curve25519 operations. The OIDs include an old GNU - /// OID used by SSH, OIDs specified in draft-josefsson-pkix-newcurves, - /// and OIDs specified in draft-ietf-curdle-pkix. - /// \details By default BERDecodeAndCheckAlgorithmID() accepts an - /// OID set by the user, ASN1::curve25519() and ASN1::Ed25519(). - /// ASN1::curve25519() is generic and says "this key is valid for - /// curve25519 operations". ASN1::Ed25519() is specific and says - /// "this key is valid for ed25519 signing." - void BERDecodeAndCheckAlgorithmID(BufferedTransformation& bt); - - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - - // DL_PublicKey - void SetPublicElement(const byte y[PUBLIC_KEYLENGTH]); - void SetPublicElement(const Element &y); - const Element& GetPublicElement() const; - - /// \brief Retrieve public key byte array - /// \return the public key byte array - /// \details GetPublicKeyBytePtr() is used by signing code to call ed25519_sign. - const byte* GetPublicKeyBytePtr() const { - return m_pk.begin(); - } - -protected: - FixedSizeSecBlock m_pk; - OID m_oid; // preferred OID - mutable Integer m_y; // for DL_PublicKey -}; - -/// \brief Ed25519 signature verification algorithm -/// \since Crypto++ 8.0 -struct ed25519Verifier : public PK_Verifier -{ - CRYPTOPP_CONSTANT(PUBLIC_KEYLENGTH = 32); - CRYPTOPP_CONSTANT(SIGNATURE_LENGTH = 64); - typedef Integer Element; - - virtual ~ed25519Verifier() {} - - /// \brief Create an ed25519Verifier object - ed25519Verifier() {} - - /// \brief Create an ed25519Verifier object - /// \param y public key - /// \details This constructor creates an ed25519Verifier object using existing parameters. - /// \note The public key is not validated. - ed25519Verifier(const byte y[PUBLIC_KEYLENGTH]); - - /// \brief Create an ed25519Verifier object - /// \param y public key - /// \details This constructor creates an ed25519Verifier object using existing parameters. - /// \note The public key is not validated. - ed25519Verifier(const Integer &y); - - /// \brief Create an ed25519Verifier object - /// \param key X509 public key - /// \details This constructor creates an ed25519Verifier object using an existing public key. - /// \note The public key is not validated. - /// \since Crypto++ 8.6 - ed25519Verifier(const X509PublicKey &key); - - /// \brief Create an ed25519Verifier object - /// \param params public and private key - /// \details This constructor creates an ed25519Verifier object using existing parameters. - /// The params can be created with Save. - /// \note The public key is not validated. - ed25519Verifier(BufferedTransformation ¶ms); - - /// \brief Create an ed25519Verifier object - /// \param signer ed25519 signer object - /// \details This constructor creates an ed25519Verifier object using existing parameters. - /// The params can be created with Save. - /// \note The public key is not validated. - ed25519Verifier(const ed25519Signer& signer); - - // DL_ObjectImplBase - /// \brief Retrieves a reference to a Public Key - /// \details AccessKey() retrieves a non-const reference to a public key. - PublicKey& AccessKey() { return m_key; } - PublicKey& AccessPublicKey() { return m_key; } - - /// \brief Retrieves a reference to a Public Key - /// \details GetKey() retrieves a const reference to a public key. - const PublicKey& GetKey() const { return m_key; } - const PublicKey& GetPublicKey() const { return m_key; } - - // DL_SignatureSchemeBase - size_t SignatureLength() const { return SIGNATURE_LENGTH; } - size_t MaxRecoverableLength() const { return 0; } - size_t MaxRecoverableLengthFromSignatureLength(size_t signatureLength) const { - CRYPTOPP_UNUSED(signatureLength); return 0; - } - - bool IsProbabilistic() const { return false; } - bool AllowNonrecoverablePart() const { return false; } - bool RecoverablePartFirst() const { return false; } - - ed25519_MessageAccumulator* NewVerificationAccumulator() const { - return new ed25519_MessageAccumulator; - } - - void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const { - CRYPTOPP_ASSERT(signature != NULLPTR); - CRYPTOPP_ASSERT(signatureLength == SIGNATURE_LENGTH); - ed25519_MessageAccumulator& accum = static_cast(messageAccumulator); - if (signature && signatureLength) - std::memcpy(accum.signature(), signature, STDMIN((size_t)SIGNATURE_LENGTH, signatureLength)); - } - - bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const; - - /// \brief Check whether input signature is a valid signature for input message - /// \param stream an std::istream derived class - /// \param signature a pointer to the signature over the message - /// \param signatureLen the size of the signature - /// \return true if the signature is valid, false otherwise - /// \details VerifyStream() handles large streams. The Stream functions were added to - /// ed25519 for signing and verifying files that are too large for a memory allocation. - /// The functions are not present in other library signers and verifiers. - /// \since Crypto++ 8.1 - bool VerifyStream(std::istream& stream, const byte *signature, size_t signatureLen) const; - - DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &messageAccumulator) const { - CRYPTOPP_UNUSED(recoveredMessage); CRYPTOPP_UNUSED(messageAccumulator); - throw NotImplemented("ed25519Verifier: this object does not support recoverable messages"); - } - -protected: - ed25519PublicKey m_key; -}; - -/// \brief Ed25519 signature scheme -/// \sa Ed25519 on the Crypto++ wiki. -/// \since Crypto++ 8.0 -struct ed25519 -{ - /// \brief ed25519 Signer - typedef ed25519Signer Signer; - /// \brief ed25519 Verifier - typedef ed25519Verifier Verifier; -}; - -NAMESPACE_END // CryptoPP - -#endif // CRYPTOPP_XED25519_H diff --git a/third_party/cryptoppwin/include/cryptopp/xtr.h b/third_party/cryptoppwin/include/cryptopp/xtr.h deleted file mode 100644 index 3d1c3382..00000000 --- a/third_party/cryptoppwin/include/cryptopp/xtr.h +++ /dev/null @@ -1,219 +0,0 @@ -#ifndef CRYPTOPP_XTR_H -#define CRYPTOPP_XTR_H - -/// \file xtr.h -/// \brief The XTR public key system -/// \details The XTR public key system by Arjen K. Lenstra and Eric R. Verheul - -#include "cryptlib.h" -#include "modarith.h" -#include "integer.h" -#include "algebra.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief an element of GF(p^2) -class GFP2Element -{ -public: - GFP2Element() {} - GFP2Element(const Integer &c1, const Integer &c2) : c1(c1), c2(c2) {} - GFP2Element(const byte *encodedElement, unsigned int size) - : c1(encodedElement, size/2), c2(encodedElement+size/2, size/2) {} - - void Encode(byte *encodedElement, unsigned int size) - { - c1.Encode(encodedElement, size/2); - c2.Encode(encodedElement+size/2, size/2); - } - - bool operator==(const GFP2Element &rhs) const {return c1 == rhs.c1 && c2 == rhs.c2;} - bool operator!=(const GFP2Element &rhs) const {return !operator==(rhs);} - - void swap(GFP2Element &a) - { - c1.swap(a.c1); - c2.swap(a.c2); - } - - static const GFP2Element & Zero(); - - Integer c1, c2; -}; - -/// \brief GF(p^2), optimal normal basis -template -class GFP2_ONB : public AbstractRing -{ -public: - typedef F BaseField; - - GFP2_ONB(const Integer &p) : modp(p) - { - if (p%3 != 2) - throw InvalidArgument("GFP2_ONB: modulus must be equivalent to 2 mod 3"); - } - - const Integer& GetModulus() const {return modp.GetModulus();} - - GFP2Element ConvertIn(const Integer &a) const - { - t = modp.Inverse(modp.ConvertIn(a)); - return GFP2Element(t, t); - } - - GFP2Element ConvertIn(const GFP2Element &a) const - {return GFP2Element(modp.ConvertIn(a.c1), modp.ConvertIn(a.c2));} - - GFP2Element ConvertOut(const GFP2Element &a) const - {return GFP2Element(modp.ConvertOut(a.c1), modp.ConvertOut(a.c2));} - - bool Equal(const GFP2Element &a, const GFP2Element &b) const - { - return modp.Equal(a.c1, b.c1) && modp.Equal(a.c2, b.c2); - } - - const Element& Identity() const - { - return GFP2Element::Zero(); - } - - const Element& Add(const Element &a, const Element &b) const - { - result.c1 = modp.Add(a.c1, b.c1); - result.c2 = modp.Add(a.c2, b.c2); - return result; - } - - const Element& Inverse(const Element &a) const - { - result.c1 = modp.Inverse(a.c1); - result.c2 = modp.Inverse(a.c2); - return result; - } - - const Element& Double(const Element &a) const - { - result.c1 = modp.Double(a.c1); - result.c2 = modp.Double(a.c2); - return result; - } - - const Element& Subtract(const Element &a, const Element &b) const - { - result.c1 = modp.Subtract(a.c1, b.c1); - result.c2 = modp.Subtract(a.c2, b.c2); - return result; - } - - Element& Accumulate(Element &a, const Element &b) const - { - modp.Accumulate(a.c1, b.c1); - modp.Accumulate(a.c2, b.c2); - return a; - } - - Element& Reduce(Element &a, const Element &b) const - { - modp.Reduce(a.c1, b.c1); - modp.Reduce(a.c2, b.c2); - return a; - } - - bool IsUnit(const Element &a) const - { - return a.c1.NotZero() || a.c2.NotZero(); - } - - const Element& MultiplicativeIdentity() const - { - result.c1 = result.c2 = modp.Inverse(modp.MultiplicativeIdentity()); - return result; - } - - const Element& Multiply(const Element &a, const Element &b) const - { - t = modp.Add(a.c1, a.c2); - t = modp.Multiply(t, modp.Add(b.c1, b.c2)); - result.c1 = modp.Multiply(a.c1, b.c1); - result.c2 = modp.Multiply(a.c2, b.c2); - result.c1.swap(result.c2); - modp.Reduce(t, result.c1); - modp.Reduce(t, result.c2); - modp.Reduce(result.c1, t); - modp.Reduce(result.c2, t); - return result; - } - - const Element& MultiplicativeInverse(const Element &a) const - { - return result = Exponentiate(a, modp.GetModulus()-2); - } - - const Element& Square(const Element &a) const - { - const Integer &ac1 = (&a == &result) ? (t = a.c1) : a.c1; - result.c1 = modp.Multiply(modp.Subtract(modp.Subtract(a.c2, a.c1), a.c1), a.c2); - result.c2 = modp.Multiply(modp.Subtract(modp.Subtract(ac1, a.c2), a.c2), ac1); - return result; - } - - Element Exponentiate(const Element &a, const Integer &e) const - { - Integer edivp, emodp; - Integer::Divide(emodp, edivp, e, modp.GetModulus()); - Element b = PthPower(a); - return AbstractRing::CascadeExponentiate(a, emodp, b, edivp); - } - - const Element & PthPower(const Element &a) const - { - result = a; - result.c1.swap(result.c2); - return result; - } - - void RaiseToPthPower(Element &a) const - { - a.c1.swap(a.c2); - } - - // a^2 - 2a^p - const Element & SpecialOperation1(const Element &a) const - { - CRYPTOPP_ASSERT(&a != &result); - result = Square(a); - modp.Reduce(result.c1, a.c2); - modp.Reduce(result.c1, a.c2); - modp.Reduce(result.c2, a.c1); - modp.Reduce(result.c2, a.c1); - return result; - } - - // x * z - y * z^p - const Element & SpecialOperation2(const Element &x, const Element &y, const Element &z) const - { - CRYPTOPP_ASSERT(&x != &result && &y != &result && &z != &result); - t = modp.Add(x.c2, y.c2); - result.c1 = modp.Multiply(z.c1, modp.Subtract(y.c1, t)); - modp.Accumulate(result.c1, modp.Multiply(z.c2, modp.Subtract(t, x.c1))); - t = modp.Add(x.c1, y.c1); - result.c2 = modp.Multiply(z.c2, modp.Subtract(y.c2, t)); - modp.Accumulate(result.c2, modp.Multiply(z.c1, modp.Subtract(t, x.c2))); - return result; - } - -protected: - BaseField modp; - mutable GFP2Element result; - mutable Integer t; -}; - -/// \brief Creates primes p,q and generator g for XTR -void XTR_FindPrimesAndGenerator(RandomNumberGenerator &rng, Integer &p, Integer &q, GFP2Element &g, unsigned int pbits, unsigned int qbits); - -GFP2Element XTR_Exponentiate(const GFP2Element &b, const Integer &e, const Integer &p); - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/xtrcrypt.h b/third_party/cryptoppwin/include/cryptopp/xtrcrypt.h deleted file mode 100644 index 0248788c..00000000 --- a/third_party/cryptoppwin/include/cryptopp/xtrcrypt.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef CRYPTOPP_XTRCRYPT_H -#define CRYPTOPP_XTRCRYPT_H - -/// \file -/// \brief XTR public key system -/// \sa "The XTR public key system" by Arjen K. Lenstra and Eric R. Verheul - -#include "cryptlib.h" -#include "xtr.h" -#include "integer.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief XTR-DH with key validation -class XTR_DH : public SimpleKeyAgreementDomain, public CryptoParameters -{ - typedef XTR_DH ThisClass; - -public: - XTR_DH(const Integer &p, const Integer &q, const GFP2Element &g); - XTR_DH(RandomNumberGenerator &rng, unsigned int pbits, unsigned int qbits); - XTR_DH(BufferedTransformation &domainParams); - - void DEREncode(BufferedTransformation &domainParams) const; - - bool Validate(RandomNumberGenerator &rng, unsigned int level) const; - bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const; - void AssignFrom(const NameValuePairs &source); - CryptoParameters & AccessCryptoParameters() {return *this;} - unsigned int AgreedValueLength() const {return 2*m_p.ByteCount();} - unsigned int PrivateKeyLength() const {return m_q.ByteCount();} - unsigned int PublicKeyLength() const {return 2*m_p.ByteCount();} - - void GeneratePrivateKey(RandomNumberGenerator &rng, byte *privateKey) const; - void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const; - bool Agree(byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const; - - const Integer &GetModulus() const {return m_p;} - const Integer &GetSubgroupOrder() const {return m_q;} - const GFP2Element &GetSubgroupGenerator() const {return m_g;} - - void SetModulus(const Integer &p) {m_p = p;} - void SetSubgroupOrder(const Integer &q) {m_q = q;} - void SetSubgroupGenerator(const GFP2Element &g) {m_g = g;} - -private: - unsigned int ExponentBitLength() const; - - Integer m_p, m_q; - GFP2Element m_g; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/xts.h b/third_party/cryptoppwin/include/cryptopp/xts.h deleted file mode 100644 index 6eac379a..00000000 --- a/third_party/cryptoppwin/include/cryptopp/xts.h +++ /dev/null @@ -1,224 +0,0 @@ -// xts.h - written and placed in the public domain by Jeffrey Walton - -/// \file xts.h -/// \brief Classes for XTS block cipher mode of operation -/// \details XTS mode is a wide block mode defined by IEEE P1619-2008. NIST -/// SP-800-38E approves the mode for storage devices citing IEEE 1619-2007. -/// IEEE 1619-2007 provides both a reference implementation and test vectors. -/// The IEEE reference implementation fails to arrive at the expected result -/// for some test vectors. -/// \sa Modes of -/// Operation on the Crypto++ wiki, Evaluation of Some -/// Blockcipher Modes of Operation, Recommendation -/// for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on -/// Storage Devices, IEEE P1619-2007 -/// and IEEE P1619/XTS, -/// inconsistent reference implementation and test vectors. -/// \since Crypto++ 8.3 - -#ifndef CRYPTOPP_XTS_MODE_H -#define CRYPTOPP_XTS_MODE_H - -#include "cryptlib.h" -#include "secblock.h" -#include "modes.h" -#include "misc.h" - -/// \brief Enable XTS for wide block ciphers -/// \details XTS is only defined for AES. The library can support wide -/// block ciphers like Kaylna and Threefish since we know the polynomials. -/// To enable wide block ciphers define CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS -/// to non-zero. Note this is a library compile time define. -/// \details There is risk involved with using XTS with wider block ciphers. -/// According to Phillip Rogaway, "The narrow width of the underlying PRP and -/// the poor treatment of fractional final blocks are problems." -/// \sa Evaluation -/// of Some Blockcipher Modes of Operation -/// \since Crypto++ 8.3 -#ifndef CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS -# define CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS 0 -#endif // CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief XTS block cipher mode of operation default implementation -/// \since Crypto++ 8.3 -class CRYPTOPP_NO_VTABLE XTS_ModeBase : public BlockOrientedCipherModeBase -{ -public: - /// \brief The algorithm name - /// \return the algorithm name - /// \details StaticAlgorithmName returns the algorithm's name as a static - /// member function. - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() - {return "XTS";} - - virtual ~XTS_ModeBase() {} - - std::string AlgorithmName() const - {return GetBlockCipher().AlgorithmName() + "/XTS";} - std::string AlgorithmProvider() const - {return GetBlockCipher().AlgorithmProvider();} - - size_t MinKeyLength() const - {return GetBlockCipher().MinKeyLength()*2;} - size_t MaxKeyLength() const - {return GetBlockCipher().MaxKeyLength()*2;} - size_t DefaultKeyLength() const - {return GetBlockCipher().DefaultKeyLength()*2;} - size_t GetValidKeyLength(size_t n) const - {return 2*GetBlockCipher().GetValidKeyLength((n+1)/2);} - bool IsValidKeyLength(size_t keylength) const - {return keylength == GetValidKeyLength(keylength);} - - /// \brief Validates the key length - /// \param length the size of the keying material, in bytes - /// \throw InvalidKeyLength if the key length is invalid - void ThrowIfInvalidKeyLength(size_t length); - - /// Provides the block size of the cipher - /// \return the block size of the cipher, in bytes - unsigned int BlockSize() const - {return GetBlockCipher().BlockSize();} - - /// \brief Provides the input block size most efficient for this cipher - /// \return The input block size that is most efficient for the cipher - /// \details The base class implementation returns MandatoryBlockSize(). - /// \note Optimal input length is - /// n * OptimalBlockSize() - GetOptimalBlockSizeUsed() for - /// any n \> 0. - unsigned int GetOptimalBlockSize() const - {return GetBlockCipher().BlockSize()*ParallelBlocks;} - unsigned int MinLastBlockSize() const - {return GetBlockCipher().BlockSize()+1;} - unsigned int OptimalDataAlignment() const - {return GetBlockCipher().OptimalDataAlignment();} - - /// \brief Validates the block size - /// \param length the block size of the cipher, in bytes - /// \throw InvalidArgument if the block size is invalid - /// \details If CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS is 0, - /// then CIPHER must be a 16-byte block cipher. If - /// CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS is non-zero then - /// CIPHER can be 16, 32, 64, or 128-byte block cipher. - void ThrowIfInvalidBlockSize(size_t length); - - void SetKey(const byte *key, size_t length, const NameValuePairs ¶ms = g_nullNameValuePairs); - IV_Requirement IVRequirement() const {return UNIQUE_IV;} - void Resynchronize(const byte *iv, int ivLength=-1); - void ProcessData(byte *outString, const byte *inString, size_t length); - size_t ProcessLastBlock(byte *outString, size_t outLength, const byte *inString, size_t inLength); - - /// \brief Resynchronize the cipher - /// \param sector a 64-bit sector number - /// \param order the endian order the word should be written - /// \details The Resynchronize() overload was provided for API - /// compatibility with the IEEE P1619 paper. - void Resynchronize(word64 sector, ByteOrder order=BIG_ENDIAN_ORDER); - -protected: - virtual void ResizeBuffers(); - - inline size_t ProcessLastPlainBlock(byte *outString, size_t outLength, const byte *inString, size_t inLength); - inline size_t ProcessLastCipherBlock(byte *outString, size_t outLength, const byte *inString, size_t inLength); - - virtual BlockCipher& AccessBlockCipher() = 0; - virtual BlockCipher& AccessTweakCipher() = 0; - - const BlockCipher& GetBlockCipher() const - {return const_cast(this)->AccessBlockCipher();} - const BlockCipher& GetTweakCipher() const - {return const_cast(this)->AccessTweakCipher();} - - // Buffers are sized based on ParallelBlocks - AlignedSecByteBlock m_xregister; - AlignedSecByteBlock m_xworkspace; - - // Intel lacks the SSE registers to run 8 or 12 parallel blocks. - // Do not change this value after compiling. It has no effect. -#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 - enum {ParallelBlocks = 4}; -#else - enum {ParallelBlocks = 12}; -#endif -}; - -/// \brief XTS block cipher mode of operation implementation -/// \tparam CIPHER BlockCipher derived class or type -/// \details XTS_Final() provides access to CIPHER in base class XTS_ModeBase() -/// through an interface. AccessBlockCipher() and AccessTweakCipher() allow -/// the XTS_ModeBase() base class to access the user's block cipher without -/// recompiling the library. -/// \details If CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS is 0, then CIPHER must -/// be a 16-byte block cipher. If CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS is -/// non-zero then CIPHER can be 16, 32, 64, or 128-byte block cipher. -/// There is risk involved with using XTS with wider block ciphers. -/// According to Phillip Rogaway, "The narrow width of the underlying PRP and -/// the poor treatment of fractional final blocks are problems." To enable -/// wide block cipher support define CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS to -/// non-zero. -/// \sa Modes of -/// Operation on the Crypto++ wiki, Evaluation of Some -/// Blockcipher Modes of Operation, Recommendation -/// for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on -/// Storage Devices, IEEE P1619-2007 -/// and IEEE P1619/XTS, -/// inconsistent reference implementation and test vectors. -/// \since Crypto++ 8.3 -template -class CRYPTOPP_NO_VTABLE XTS_Final : public XTS_ModeBase -{ -protected: - BlockCipher& AccessBlockCipher() - {return *m_cipher;} - BlockCipher& AccessTweakCipher() - {return m_tweaker;} - -protected: - typename CIPHER::Encryption m_tweaker; -}; - -/// \brief XTS block cipher mode of operation -/// \tparam CIPHER BlockCipher derived class or type -/// \details XTS mode is a wide block mode defined by IEEE P1619-2008. NIST -/// SP-800-38E approves the mode for storage devices citing IEEE 1619-2007. -/// IEEE 1619-2007 provides both a reference implementation and test vectors. -/// The IEEE reference implementation fails to arrive at the expected result -/// for some test vectors. -/// \details XTS is only defined for AES. The library can support wide -/// block ciphers like Kaylna and Threefish since we know the polynomials. -/// There is risk involved with using XTS with wider block ciphers. -/// According to Phillip Rogaway, "The narrow width of the underlying PRP and -/// the poor treatment of fractional final blocks are problems." To enable -/// wide block cipher support define CRYPTOPP_XTS_WIDE_BLOCK_CIPHERS to -/// non-zero. -/// \sa Modes of -/// Operation on the Crypto++ wiki, Evaluation of Some -/// Blockcipher Modes of Operation, Recommendation -/// for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on -/// Storage Devices, IEEE P1619-2007 -/// and IEEE P1619/XTS, -/// inconsistent reference implementation and test vectors. -/// \since Crypto++ 8.3 -template -struct XTS : public CipherModeDocumentation -{ - typedef CipherModeFinalTemplate_CipherHolder > Encryption; - typedef CipherModeFinalTemplate_CipherHolder > Decryption; -}; - -// C++03 lacks the mechanics to typedef a template -#define XTS_Mode XTS - -NAMESPACE_END - -#endif // CRYPTOPP_XTS_MODE_H diff --git a/third_party/cryptoppwin/include/cryptopp/zdeflate.h b/third_party/cryptoppwin/include/cryptopp/zdeflate.h deleted file mode 100644 index 36ae33c6..00000000 --- a/third_party/cryptoppwin/include/cryptopp/zdeflate.h +++ /dev/null @@ -1,174 +0,0 @@ -// zdeflate.h - originally written and placed in the public domain by Wei Dai - -/// \file zdeflate.h -/// \brief DEFLATE compression and decompression (RFC 1951) - -#ifndef CRYPTOPP_ZDEFLATE_H -#define CRYPTOPP_ZDEFLATE_H - -#include "cryptlib.h" -#include "filters.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \brief Encoding table writer -/// \since Crypto++ 1.0 -class LowFirstBitWriter : public Filter -{ -public: - /// \brief Construct a LowFirstBitWriter - /// \param attachment an attached transformation - LowFirstBitWriter(BufferedTransformation *attachment); - - void PutBits(unsigned long value, unsigned int length); - void FlushBitBuffer(); - void ClearBitBuffer(); - - void StartCounting(); - unsigned long FinishCounting(); - -protected: - bool m_counting; - unsigned long m_bitCount; - unsigned long m_buffer; - unsigned int m_bitsBuffered, m_bytesBuffered; - FixedSizeSecBlock m_outputBuffer; -}; - -/// \brief Huffman Encoder -/// \since Crypto++ 1.0 -class HuffmanEncoder -{ -public: - typedef unsigned int code_t; - typedef unsigned int value_t; - - /// \brief Construct a HuffmanEncoder - HuffmanEncoder() {} - - /// \brief Construct a HuffmanEncoder - /// \param codeBits a table of code bits - /// \param nCodes the number of codes in the table - HuffmanEncoder(const unsigned int *codeBits, unsigned int nCodes); - - /// \brief Initialize or reinitialize this object - /// \param codeBits a table of code bits - /// \param nCodes the number of codes in the table - void Initialize(const unsigned int *codeBits, unsigned int nCodes); - - static void GenerateCodeLengths(unsigned int *codeBits, unsigned int maxCodeBits, const unsigned int *codeCounts, size_t nCodes); - - void Encode(LowFirstBitWriter &writer, value_t value) const; - - struct Code - { - unsigned int code; - unsigned int len; - }; - - SecBlock m_valueToCode; -}; - -/// \brief DEFLATE compressor (RFC 1951) -/// \since Crypto++ 1.0 -class Deflator : public LowFirstBitWriter -{ -public: - /// \brief Deflate level as enumerated values. - enum { - /// \brief Minimum deflation level, fastest speed (0) - MIN_DEFLATE_LEVEL = 0, - /// \brief Default deflation level, compromise between speed (6) - DEFAULT_DEFLATE_LEVEL = 6, - /// \brief Minimum deflation level, slowest speed (9) - MAX_DEFLATE_LEVEL = 9}; - - /// \brief Windows size as enumerated values. - enum { - /// \brief Minimum window size, smallest table (9) - MIN_LOG2_WINDOW_SIZE = 9, - /// \brief Default window size (15) - DEFAULT_LOG2_WINDOW_SIZE = 15, - /// \brief Maximum window size, largest table (15) - MAX_LOG2_WINDOW_SIZE = 15}; - - /// \brief Construct a Deflator compressor - /// \param attachment an attached transformation - /// \param deflateLevel the deflate level - /// \param log2WindowSize the window size - /// \param detectUncompressible flag to detect if data is compressible - /// \details detectUncompressible makes it faster to process uncompressible files, but - /// if a file has both compressible and uncompressible parts, it may fail to compress - /// some of the compressible parts. - Deflator(BufferedTransformation *attachment=NULLPTR, int deflateLevel=DEFAULT_DEFLATE_LEVEL, int log2WindowSize=DEFAULT_LOG2_WINDOW_SIZE, bool detectUncompressible=true); - /// \brief Construct a Deflator compressor - /// \param parameters a set of NameValuePairs to initialize this object - /// \param attachment an attached transformation - /// \details Possible parameter names: Log2WindowSize, DeflateLevel, DetectUncompressible - Deflator(const NameValuePairs ¶meters, BufferedTransformation *attachment=NULLPTR); - - /// \brief Sets the deflation level - /// \param deflateLevel the level of deflation - /// \details SetDeflateLevel can be used to set the deflate level in the middle of compression - void SetDeflateLevel(int deflateLevel); - - /// \brief Retrieves the deflation level - /// \return the level of deflation - int GetDeflateLevel() const {return m_deflateLevel;} - - /// \brief Retrieves the window size - /// \return the windows size - int GetLog2WindowSize() const {return m_log2WindowSize;} - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - bool IsolatedFlush(bool hardFlush, bool blocking); - -protected: - virtual void WritePrestreamHeader() {} - virtual void ProcessUncompressedData(const byte *string, size_t length) - {CRYPTOPP_UNUSED(string), CRYPTOPP_UNUSED(length);} - virtual void WritePoststreamTail() {} - - enum {STORED = 0, STATIC = 1, DYNAMIC = 2}; - enum {MIN_MATCH = 3, MAX_MATCH = 258}; - - void InitializeStaticEncoders(); - void Reset(bool forceReset = false); - unsigned int FillWindow(const byte *str, size_t length); - unsigned int ComputeHash(const byte *str) const; - unsigned int LongestMatch(unsigned int &bestMatch) const; - void InsertString(unsigned int start); - void ProcessBuffer(); - - void LiteralByte(byte b); - void MatchFound(unsigned int distance, unsigned int length); - void EncodeBlock(bool eof, unsigned int blockType); - void EndBlock(bool eof); - - struct EncodedMatch - { - unsigned literalCode : 9; - unsigned literalExtra : 5; - unsigned distanceCode : 5; - unsigned distanceExtra : 13; - }; - - int m_deflateLevel, m_log2WindowSize, m_compressibleDeflateLevel; - unsigned int m_detectSkip, m_detectCount; - unsigned int DSIZE, DMASK, HSIZE, HMASK, GOOD_MATCH, MAX_LAZYLENGTH, MAX_CHAIN_LENGTH; - bool m_headerWritten, m_matchAvailable; - unsigned int m_dictionaryEnd, m_stringStart, m_lookahead, m_minLookahead, m_previousMatch, m_previousLength; - HuffmanEncoder m_staticLiteralEncoder, m_staticDistanceEncoder, m_dynamicLiteralEncoder, m_dynamicDistanceEncoder; - SecByteBlock m_byteBuffer; - SecBlock m_head, m_prev; - FixedSizeSecBlock m_literalCounts; - FixedSizeSecBlock m_distanceCounts; - SecBlock m_matchBuffer; - unsigned int m_matchBufferEnd, m_blockStart, m_blockLength; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/zinflate.h b/third_party/cryptoppwin/include/cryptopp/zinflate.h deleted file mode 100644 index db9b9425..00000000 --- a/third_party/cryptoppwin/include/cryptopp/zinflate.h +++ /dev/null @@ -1,164 +0,0 @@ -// zinflate.h - originally written and placed in the public domain by Wei Dai - -/// \file zinflate.h -/// \brief DEFLATE compression and decompression (RFC 1951) - -#ifndef CRYPTOPP_ZINFLATE_H -#define CRYPTOPP_ZINFLATE_H - -#include "cryptlib.h" -#include "secblock.h" -#include "filters.h" -#include "stdcpp.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// \since Crypto++ 1.0 -class LowFirstBitReader -{ -public: - LowFirstBitReader(BufferedTransformation &store) - : m_store(store), m_buffer(0), m_bitsBuffered(0) {} - unsigned int BitsBuffered() const {return m_bitsBuffered;} - unsigned long PeekBuffer() const {return m_buffer;} - bool FillBuffer(unsigned int length); - unsigned long PeekBits(unsigned int length); - void SkipBits(unsigned int length); - unsigned long GetBits(unsigned int length); - -private: - BufferedTransformation &m_store; - unsigned long m_buffer; - unsigned int m_bitsBuffered; -}; - -struct CodeLessThan; - -/// \brief Huffman Decoder -/// \since Crypto++ 1.0 -class HuffmanDecoder -{ -public: - typedef unsigned int code_t; - typedef unsigned int value_t; - enum {MAX_CODE_BITS = sizeof(code_t)*8}; - - class Err : public Exception {public: Err(const std::string &what) : Exception(INVALID_DATA_FORMAT, "HuffmanDecoder: " + what) {}}; - - HuffmanDecoder() : m_maxCodeBits(0), m_cacheBits(0), m_cacheMask(0), m_normalizedCacheMask(0) {} - HuffmanDecoder(const unsigned int *codeBitLengths, unsigned int nCodes) - : m_maxCodeBits(0), m_cacheBits(0), m_cacheMask(0), m_normalizedCacheMask(0) - {Initialize(codeBitLengths, nCodes);} - - void Initialize(const unsigned int *codeBitLengths, unsigned int nCodes); - unsigned int Decode(code_t code, /* out */ value_t &value) const; - bool Decode(LowFirstBitReader &reader, value_t &value) const; - -private: - friend struct CodeLessThan; - - struct CodeInfo - { - CodeInfo(code_t code=0, unsigned int len=0, value_t value=0) : code(code), len(len), value(value) {} - inline bool operator<(const CodeInfo &rhs) const {return code < rhs.code;} - code_t code; - unsigned int len; - value_t value; - }; - - struct LookupEntry - { - unsigned int type; - union - { - value_t value; - const CodeInfo *begin; - }; - union - { - unsigned int len; - const CodeInfo *end; - }; - }; - - static code_t NormalizeCode(code_t code, unsigned int codeBits); - void FillCacheEntry(LookupEntry &entry, code_t normalizedCode) const; - - unsigned int m_maxCodeBits, m_cacheBits, m_cacheMask, m_normalizedCacheMask; - std::vector > m_codeToValue; - mutable std::vector > m_cache; -}; - -/// \brief DEFLATE decompressor (RFC 1951) -/// \since Crypto++ 1.0 -class Inflator : public AutoSignaling -{ -public: - class Err : public Exception - { - public: - Err(ErrorType e, const std::string &s) - : Exception(e, s) {} - }; - /// \brief Exception thrown when a truncated stream is encountered - class UnexpectedEndErr : public Err {public: UnexpectedEndErr() : Err(INVALID_DATA_FORMAT, "Inflator: unexpected end of compressed block") {}}; - /// \brief Exception thrown when a bad block is encountered - class BadBlockErr : public Err {public: BadBlockErr() : Err(INVALID_DATA_FORMAT, "Inflator: error in compressed block") {}}; - /// \brief Exception thrown when an invalid distance is encountered - class BadDistanceErr : public Err {public: BadDistanceErr() : Err(INVALID_DATA_FORMAT, "Inflator: error in bit distance") {}}; - - /// \brief RFC 1951 Decompressor - /// \param attachment the filter's attached transformation - /// \param repeat decompress multiple compressed streams in series - /// \param autoSignalPropagation 0 to turn off MessageEnd signal - Inflator(BufferedTransformation *attachment = NULLPTR, bool repeat = false, int autoSignalPropagation = -1); - - void IsolatedInitialize(const NameValuePairs ¶meters); - size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking); - bool IsolatedFlush(bool hardFlush, bool blocking); - - virtual unsigned int GetLog2WindowSize() const {return 15;} - -protected: - ByteQueue m_inQueue; - -private: - virtual unsigned int MaxPrestreamHeaderSize() const {return 0;} - virtual void ProcessPrestreamHeader() {} - virtual void ProcessDecompressedData(const byte *string, size_t length) - {AttachedTransformation()->Put(string, length);} - virtual unsigned int MaxPoststreamTailSize() const {return 0;} - virtual void ProcessPoststreamTail() {} - - void ProcessInput(bool flush); - void DecodeHeader(); - bool DecodeBody(); - void FlushOutput(); - void OutputByte(byte b); - void OutputString(const byte *string, size_t length); - void OutputPast(unsigned int length, unsigned int distance); - - void CreateFixedDistanceDecoder(); - void CreateFixedLiteralDecoder(); - - const HuffmanDecoder& GetLiteralDecoder(); - const HuffmanDecoder& GetDistanceDecoder(); - - enum State {PRE_STREAM, WAIT_HEADER, DECODING_BODY, POST_STREAM, AFTER_END}; - State m_state; - bool m_repeat, m_eof, m_wrappedAround; - byte m_blockType; - word16 m_storedLen; - enum NextDecode {LITERAL, LENGTH_BITS, DISTANCE, DISTANCE_BITS}; - NextDecode m_nextDecode; - unsigned int m_literal, m_distance; // for LENGTH_BITS or DISTANCE_BITS - HuffmanDecoder m_dynamicLiteralDecoder, m_dynamicDistanceDecoder; - member_ptr m_fixedLiteralDecoder, m_fixedDistanceDecoder; - LowFirstBitReader m_reader; - SecByteBlock m_window; - size_t m_current, m_lastFlush; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/include/cryptopp/zlib.h b/third_party/cryptoppwin/include/cryptopp/zlib.h deleted file mode 100644 index b5fca51c..00000000 --- a/third_party/cryptoppwin/include/cryptopp/zlib.h +++ /dev/null @@ -1,65 +0,0 @@ -// zlib.h - originally written and placed in the public domain by Wei Dai - -/// \file zlib.h -/// \brief ZLIB compression and decompression (RFC 1950) - -#ifndef CRYPTOPP_ZLIB_H -#define CRYPTOPP_ZLIB_H - -#include "cryptlib.h" -#include "adler32.h" -#include "zdeflate.h" -#include "zinflate.h" - -NAMESPACE_BEGIN(CryptoPP) - -/// ZLIB Compressor (RFC 1950) -class ZlibCompressor : public Deflator -{ -public: - ZlibCompressor(BufferedTransformation *attachment=NULLPTR, unsigned int deflateLevel=DEFAULT_DEFLATE_LEVEL, unsigned int log2WindowSize=DEFAULT_LOG2_WINDOW_SIZE, bool detectUncompressible=true) - : Deflator(attachment, deflateLevel, log2WindowSize, detectUncompressible) {} - ZlibCompressor(const NameValuePairs ¶meters, BufferedTransformation *attachment=NULLPTR) - : Deflator(parameters, attachment) {} - - unsigned int GetCompressionLevel() const; - -protected: - void WritePrestreamHeader(); - void ProcessUncompressedData(const byte *string, size_t length); - void WritePoststreamTail(); - - Adler32 m_adler32; -}; - -/// ZLIB Decompressor (RFC 1950) -class ZlibDecompressor : public Inflator -{ -public: - typedef Inflator::Err Err; - class HeaderErr : public Err {public: HeaderErr() : Err(INVALID_DATA_FORMAT, "ZlibDecompressor: header decoding error") {}}; - class Adler32Err : public Err {public: Adler32Err() : Err(DATA_INTEGRITY_CHECK_FAILED, "ZlibDecompressor: ADLER32 check error") {}}; - class UnsupportedAlgorithm : public Err {public: UnsupportedAlgorithm() : Err(INVALID_DATA_FORMAT, "ZlibDecompressor: unsupported algorithm") {}}; - class UnsupportedPresetDictionary : public Err {public: UnsupportedPresetDictionary() : Err(INVALID_DATA_FORMAT, "ZlibDecompressor: unsupported preset dictionary") {}}; - - /// \brief Construct a ZlibDecompressor - /// \param attachment a \ BufferedTransformation to attach to this object - /// \param repeat decompress multiple compressed streams in series - /// \param autoSignalPropagation 0 to turn off MessageEnd signal - ZlibDecompressor(BufferedTransformation *attachment = NULLPTR, bool repeat = false, int autoSignalPropagation = -1); - unsigned int GetLog2WindowSize() const {return m_log2WindowSize;} - -private: - unsigned int MaxPrestreamHeaderSize() const {return 2;} - void ProcessPrestreamHeader(); - void ProcessDecompressedData(const byte *string, size_t length); - unsigned int MaxPoststreamTailSize() const {return 4;} - void ProcessPoststreamTail(); - - unsigned int m_log2WindowSize; - Adler32 m_adler32; -}; - -NAMESPACE_END - -#endif diff --git a/third_party/cryptoppwin/lib/cryptlib.lib b/third_party/cryptoppwin/lib/cryptlib.lib deleted file mode 100644 index 446c5e20..00000000 Binary files a/third_party/cryptoppwin/lib/cryptlib.lib and /dev/null differ diff --git a/third_party/cryptoppwin/lib/cryptlibd.lib b/third_party/cryptoppwin/lib/cryptlibd.lib deleted file mode 100644 index e6173dc0..00000000 Binary files a/third_party/cryptoppwin/lib/cryptlibd.lib and /dev/null differ diff --git a/third_party/discord-rpc b/third_party/discord-rpc index 75d09298..e1caa618 160000 --- a/third_party/discord-rpc +++ b/third_party/discord-rpc @@ -1 +1 @@ -Subproject commit 75d092983caf6503194098b5f6adaeb09e395fdf +Subproject commit e1caa6186a374758692fb764b811155483742a56 diff --git a/third_party/duckstation/duckstation_compat.h b/third_party/duckstation/duckstation_compat.h deleted file mode 100644 index dd504c4f..00000000 --- a/third_party/duckstation/duckstation_compat.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef DUCKSTATION_COMPAT_H -#define DUCKSTATION_COMPAT_H - -#include - -#include "compiler_builtins.hpp" -#include "helpers.hpp" - -#define AssertMsg(cond, msg) assert(cond&& msg) -#define Assert(cond) assert(cond) - -#define Panic(msg) assert(false && msg) - -#define UnreachableCode() __builtin_unreachable() - -#endif \ No newline at end of file diff --git a/third_party/duckstation/duckstation_log.h b/third_party/duckstation/duckstation_log.h deleted file mode 100644 index a945bb35..00000000 --- a/third_party/duckstation/duckstation_log.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef LOG_H -#define LOG_H - -#include - -#define Log_SetChannel(ChannelName) -#define Log_ErrorPrint(msg) puts(msg "\n"); -#define Log_ErrorPrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#define Log_WarningPrint(msg) puts(msg) -#define Log_WarningPrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#define Log_PerfPrint(msg) puts(msg) -#define Log_PerfPrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#define Log_InfoPrint(msg) puts(msg) -#define Log_InfoPrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#define Log_VerbosePrint(msg) puts(msg) -#define Log_VerbosePrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#define Log_DevPrint(msg) puts(msg) -#define Log_DevPrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#define Log_ProfilePrint(msg) puts(msg) -#define Log_ProfilePrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) - -#ifdef _DEBUG -#define Log_DebugPrint(msg) puts(msg) -#define Log_DebugPrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#define Log_TracePrint(msg) puts(msg) -#define Log_TracePrintf(...) do { printf(__VA_ARGS__); putchar('\n'); } while (0) -#else -#define Log_DebugPrint(msg) \ - do \ - { \ - } while (0) -#define Log_DebugPrintf(...) \ - do \ - { \ - } while (0) -#define Log_TracePrint(msg) \ - do \ - { \ - } while (0) -#define Log_TracePrintf(...) \ - do \ - { \ - } while (0) -#endif - -#endif \ No newline at end of file diff --git a/third_party/duckstation/duckstation_scoped_guard.h b/third_party/duckstation/duckstation_scoped_guard.h deleted file mode 100644 index 89f35d92..00000000 --- a/third_party/duckstation/duckstation_scoped_guard.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once -#include -#include - -/// ScopedGuard provides an object which runs a function (usually a lambda) when -/// it goes out of scope. This can be useful for releasing resources or handles -/// which do not normally have C++ types to automatically release. -template -class ScopedGuard final -{ -public: - ALWAYS_INLINE ScopedGuard(T&& func) : m_func(std::forward(func)) {} - ALWAYS_INLINE ScopedGuard(ScopedGuard&& other) : m_func(std::move(other.m_func)) { other.m_func = nullptr; } - ALWAYS_INLINE ~ScopedGuard() { Invoke(); } - - ScopedGuard(const ScopedGuard&) = delete; - void operator=(const ScopedGuard&) = delete; - - /// Prevents the function from being invoked when we go out of scope. - ALWAYS_INLINE void Cancel() { m_func.reset(); } - - /// Explicitly fires the function. - ALWAYS_INLINE void Invoke() - { - if (!m_func.has_value()) - return; - - m_func.value()(); - m_func.reset(); - } - -private: - std::optional m_func; -}; diff --git a/third_party/duckstation/gl/context.cpp b/third_party/duckstation/gl/context.cpp deleted file mode 100644 index 69401bd9..00000000 --- a/third_party/duckstation/gl/context.cpp +++ /dev/null @@ -1,179 +0,0 @@ -#include "context.h" -#include "duckstation_log.h" -#include "loader.h" -#include -#include -#ifdef __APPLE__ -#include -#else -#include -#endif -Log_SetChannel(GL::Context); - -#if defined(_WIN32) -#include "context_wgl.h" -#elif defined(__APPLE__) -#include "context_agl.h" -#else -#ifdef WAYLAND_ENABLED -#include "context_egl_wayland.h" -#endif -#include "context_egl_x11.h" -#include "context_glx.h" -#endif - -namespace GL { - -static bool ShouldPreferESContext() -{ -#ifndef _MSC_VER - const char* value = std::getenv("PREFER_GLES_CONTEXT"); - return (value && strcmp(value, "1") == 0); -#else - char buffer[2] = {}; - size_t buffer_size = sizeof(buffer); - getenv_s(&buffer_size, buffer, "PREFER_GLES_CONTEXT"); - return (std::strcmp(buffer, "1") == 0); -#endif -} - -Context::Context(const WindowInfo& wi) : m_wi(wi) {} - -Context::~Context() = default; - -std::vector Context::EnumerateFullscreenModes() -{ - return {}; -} - -std::unique_ptr Context::Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try) -{ - if (ShouldPreferESContext()) - { - // move ES versions to the front - Version* new_versions_to_try = static_cast(alloca(sizeof(Version) * num_versions_to_try)); - size_t count = 0; - for (size_t i = 0; i < num_versions_to_try; i++) - { - if (versions_to_try[i].profile == Profile::ES) - new_versions_to_try[count++] = versions_to_try[i]; - } - for (size_t i = 0; i < num_versions_to_try; i++) - { - if (versions_to_try[i].profile != Profile::ES) - new_versions_to_try[count++] = versions_to_try[i]; - } - versions_to_try = new_versions_to_try; - } - - std::unique_ptr context; -#if defined(_WIN32) - context = ContextWGL::Create(wi, versions_to_try, num_versions_to_try); -#elif defined(__APPLE__) - context = ContextAGL::Create(wi, versions_to_try, num_versions_to_try); -#else - if (wi.type == WindowInfo::Type::X11) - { - const char* use_egl_x11 = std::getenv("USE_EGL_X11"); - if (use_egl_x11 && std::strcmp(use_egl_x11, "1") == 0) - context = ContextEGLX11::Create(wi, versions_to_try, num_versions_to_try); - else - context = ContextGLX::Create(wi, versions_to_try, num_versions_to_try); - } - -#ifdef WAYLAND_ENABLED - if (wi.type == WindowInfo::Type::Wayland) - context = ContextEGLWayland::Create(wi, versions_to_try, num_versions_to_try); -#endif -#endif - - if (!context) - return nullptr; - - Log_InfoPrintf("Created a %s context", context->IsGLES() ? "OpenGL ES" : "OpenGL"); - - // TODO: Not thread-safe. - static Context* context_being_created; - context_being_created = context.get(); - - if (!gladLoadGLLoader([](const char* name) { return context_being_created->GetProcAddress(name); })) - { - Log_ErrorPrintf("Failed to load GL functions for GLAD"); - return nullptr; - } - - const char* gl_vendor = reinterpret_cast(glGetString(GL_VENDOR)); - const char* gl_renderer = reinterpret_cast(glGetString(GL_RENDERER)); - const char* gl_version = reinterpret_cast(glGetString(GL_VERSION)); - const char* gl_shading_language_version = reinterpret_cast(glGetString(GL_SHADING_LANGUAGE_VERSION)); - Log_InfoPrintf("GL_VENDOR: %s", gl_vendor); - Log_InfoPrintf("GL_RENDERER: %s", gl_renderer); - Log_InfoPrintf("GL_VERSION: %s", gl_version); - Log_InfoPrintf("GL_SHADING_LANGUAGE_VERSION: %s", gl_shading_language_version); - - return context; -} - -const std::array& Context::GetAllDesktopVersionsList() -{ - static constexpr std::array vlist = {{{Profile::Core, 4, 6}, - {Profile::Core, 4, 5}, - {Profile::Core, 4, 4}, - {Profile::Core, 4, 3}, - {Profile::Core, 4, 2}, - {Profile::Core, 4, 1}, - {Profile::Core, 4, 0}, - {Profile::Core, 3, 3}, - {Profile::Core, 3, 2}, - {Profile::Core, 3, 1}, - {Profile::Core, 3, 0}}}; - return vlist; -} - -const std::array& Context::GetAllDesktopVersionsListWithFallback() -{ - static constexpr std::array vlist = {{{Profile::Core, 4, 6}, - {Profile::Core, 4, 5}, - {Profile::Core, 4, 4}, - {Profile::Core, 4, 3}, - {Profile::Core, 4, 2}, - {Profile::Core, 4, 1}, - {Profile::Core, 4, 0}, - {Profile::Core, 3, 3}, - {Profile::Core, 3, 2}, - {Profile::Core, 3, 1}, - {Profile::Core, 3, 0}, - {Profile::NoProfile, 0, 0}}}; - return vlist; -} - -const std::array& Context::GetAllESVersionsList() -{ - static constexpr std::array vlist = { - {{Profile::ES, 3, 2}, {Profile::ES, 3, 1}, {Profile::ES, 3, 0}, {Profile::ES, 2, 0}}}; - return vlist; -} - -const std::array& Context::GetAllVersionsList() -{ - static constexpr std::array vlist = {{{Profile::Core, 4, 6}, - {Profile::Core, 4, 5}, - {Profile::Core, 4, 4}, - {Profile::Core, 4, 3}, - {Profile::Core, 4, 2}, - {Profile::Core, 4, 1}, - {Profile::Core, 4, 0}, - {Profile::Core, 3, 3}, - {Profile::Core, 3, 2}, - {Profile::Core, 3, 1}, - {Profile::Core, 3, 0}, - {Profile::ES, 3, 2}, - {Profile::ES, 3, 1}, - {Profile::ES, 3, 0}, - {Profile::ES, 2, 0}, - {Profile::NoProfile, 0, 0}}}; - return vlist; -} - -} // namespace GL diff --git a/third_party/duckstation/gl/context.h b/third_party/duckstation/gl/context.h deleted file mode 100644 index 5d93b0a6..00000000 --- a/third_party/duckstation/gl/context.h +++ /dev/null @@ -1,76 +0,0 @@ -#pragma once -#include "duckstation_compat.h" -#include "window_info.h" -#include -#include -#include - -namespace GL { -class Context -{ -public: - Context(const WindowInfo& wi); - virtual ~Context(); - - enum class Profile - { - NoProfile, - Core, - ES - }; - - struct Version - { - Profile profile; - int major_version; - int minor_version; - }; - - struct FullscreenModeInfo - { - u32 width; - u32 height; - float refresh_rate; - }; - - ALWAYS_INLINE const WindowInfo& GetWindowInfo() const { return m_wi; } - ALWAYS_INLINE bool IsGLES() const { return (m_version.profile == Profile::ES); } - ALWAYS_INLINE u32 GetSurfaceWidth() const { return m_wi.surface_width; } - ALWAYS_INLINE u32 GetSurfaceHeight() const { return m_wi.surface_height; } - ALWAYS_INLINE WindowInfo::SurfaceFormat GetSurfaceFormat() const { return m_wi.surface_format; } - - virtual void* GetProcAddress(const char* name) = 0; - virtual bool ChangeSurface(const WindowInfo& new_wi) = 0; - virtual void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) = 0; - virtual bool SwapBuffers() = 0; - virtual bool MakeCurrent() = 0; - virtual bool DoneCurrent() = 0; - virtual bool SetSwapInterval(s32 interval) = 0; - virtual std::unique_ptr CreateSharedContext(const WindowInfo& wi) = 0; - - virtual std::vector EnumerateFullscreenModes(); - - static std::unique_ptr Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try); - - template - static std::unique_ptr Create(const WindowInfo& wi, const std::array& versions_to_try) - { - return Create(wi, versions_to_try.data(), versions_to_try.size()); - } - - static std::unique_ptr Create(const WindowInfo& wi) { return Create(wi, GetAllVersionsList()); } - - static const std::array& GetAllDesktopVersionsList(); - static const std::array& GetAllDesktopVersionsListWithFallback(); - static const std::array& GetAllESVersionsList(); - static const std::array& GetAllVersionsList(); - -protected: -#ifdef _WIN32 -#endif - - WindowInfo m_wi; - Version m_version = {}; -}; -} // namespace GL diff --git a/third_party/duckstation/gl/context_agl.h b/third_party/duckstation/gl/context_agl.h deleted file mode 100644 index 459bf2fd..00000000 --- a/third_party/duckstation/gl/context_agl.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once -#include "context.h" -#include "loader.h" - -#if defined(__APPLE__) && defined(__OBJC__) -#import -#else -struct NSOpenGLContext; -struct NSOpenGLPixelFormat; -struct NSView; -#define __bridge -#endif - -namespace GL { - -class ContextAGL final : public Context -{ -public: - ContextAGL(const WindowInfo& wi); - ~ContextAGL() override; - - static std::unique_ptr Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try); - - void* GetProcAddress(const char* name) override; - bool ChangeSurface(const WindowInfo& new_wi) override; - void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override; - bool SwapBuffers() override; - bool MakeCurrent() override; - bool DoneCurrent() override; - bool SetSwapInterval(s32 interval) override; - std::unique_ptr CreateSharedContext(const WindowInfo& wi) override; - -private: - ALWAYS_INLINE NSView* GetView() const { return static_cast((__bridge NSView*)m_wi.window_handle); } - - bool Initialize(const Version* versions_to_try, size_t num_versions_to_try); - bool CreateContext(NSOpenGLContext* share_context, int profile, bool make_current); - void BindContextToView(); - - // returns true if dimensions have changed - bool UpdateDimensions(); - - NSOpenGLContext* m_context = nullptr; - NSOpenGLPixelFormat* m_pixel_format = nullptr; - void* m_opengl_module_handle = nullptr; -}; - -} // namespace GL diff --git a/third_party/duckstation/gl/context_agl.mm b/third_party/duckstation/gl/context_agl.mm deleted file mode 100644 index 9477e3a9..00000000 --- a/third_party/duckstation/gl/context_agl.mm +++ /dev/null @@ -1,214 +0,0 @@ -#include "context_agl.h" -#include "duckstation_compat.h" -#include "duckstation_log.h" -#include "loader.h" -#include -Log_SetChannel(GL::ContextAGL); - -namespace GL { -ContextAGL::ContextAGL(const WindowInfo& wi) : Context(wi) -{ - m_opengl_module_handle = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_NOW); - if (!m_opengl_module_handle) - Log_ErrorPrint("Could not open OpenGL.framework, function lookups will probably fail"); -} - -ContextAGL::~ContextAGL() -{ - if ([NSOpenGLContext currentContext] == m_context) - [NSOpenGLContext clearCurrentContext]; - - if (m_context) - [m_context release]; - - if (m_pixel_format) - [m_pixel_format release]; - - if (m_opengl_module_handle) - dlclose(m_opengl_module_handle); -} - -std::unique_ptr ContextAGL::Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try) -{ - std::unique_ptr context = std::make_unique(wi); - if (!context->Initialize(versions_to_try, num_versions_to_try)) - return nullptr; - - return context; -} - -bool ContextAGL::Initialize(const Version* versions_to_try, size_t num_versions_to_try) -{ - for (size_t i = 0; i < num_versions_to_try; i++) - { - const Version& cv = versions_to_try[i]; - if (cv.profile == Profile::NoProfile && CreateContext(nullptr, NSOpenGLProfileVersionLegacy, true)) - { - // we already have the dummy context, so just use that - m_version = cv; - return true; - } - else if (cv.profile == Profile::Core) - { - if (cv.major_version > 4 && cv.minor_version > 1) - continue; - - const NSOpenGLPixelFormatAttribute profile = (cv.major_version > 3 || cv.minor_version > 2) ? NSOpenGLProfileVersion4_1Core : NSOpenGLProfileVersion3_2Core; - if (CreateContext(nullptr, static_cast(profile), true)) - { - m_version = cv; - return true; - } - } - } - - return false; -} - -void* ContextAGL::GetProcAddress(const char* name) -{ - void* addr = m_opengl_module_handle ? dlsym(m_opengl_module_handle, name) : nullptr; - if (addr) - return addr; - - return dlsym(RTLD_NEXT, name); -} - -bool ContextAGL::ChangeSurface(const WindowInfo& new_wi) -{ - m_wi = new_wi; - BindContextToView(); - return true; -} - -void ContextAGL::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/) -{ - UpdateDimensions(); -} - -bool ContextAGL::UpdateDimensions() -{ - const NSSize window_size = [GetView() frame].size; - const CGFloat window_scale = [[GetView() window] backingScaleFactor]; - const u32 new_width = static_cast(static_cast(window_size.width) * window_scale); - const u32 new_height = static_cast(static_cast(window_size.height) * window_scale); - - if (m_wi.surface_width == new_width && m_wi.surface_height == new_height) - return false; - - m_wi.surface_width = new_width; - m_wi.surface_height = new_height; - - dispatch_block_t block = ^{ - [m_context update]; - }; - - if ([NSThread isMainThread]) - block(); - else - dispatch_sync(dispatch_get_main_queue(), block); - - return true; -} - -bool ContextAGL::SwapBuffers() -{ - [m_context flushBuffer]; - return true; -} - -bool ContextAGL::MakeCurrent() -{ - [m_context makeCurrentContext]; - return true; -} - -bool ContextAGL::DoneCurrent() -{ - [NSOpenGLContext clearCurrentContext]; - return true; -} - -bool ContextAGL::SetSwapInterval(s32 interval) -{ - GLint gl_interval = static_cast(interval); - [m_context setValues:&gl_interval forParameter:NSOpenGLCPSwapInterval]; - return true; -} - -std::unique_ptr ContextAGL::CreateSharedContext(const WindowInfo& wi) -{ - std::unique_ptr context = std::make_unique(wi); - - context->m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format shareContext:m_context]; - if (context->m_context == nil) - return nullptr; - - context->m_version = m_version; - context->m_pixel_format = m_pixel_format; - [context->m_pixel_format retain]; - - if (wi.type == WindowInfo::Type::MacOS) - context->BindContextToView(); - - return context; -} - -bool ContextAGL::CreateContext(NSOpenGLContext* share_context, int profile, bool make_current) -{ - if (m_context) - { - [m_context release]; - m_context = nullptr; - } - - if (m_pixel_format) - [m_pixel_format release]; - - const std::array attribs = {{ - NSOpenGLPFADoubleBuffer, - NSOpenGLPFAOpenGLProfile, - static_cast(profile), - NSOpenGLPFAAccelerated, - 0}}; - m_pixel_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs.data()]; - if (m_pixel_format == nil) - { - Log_ErrorPrintf("Failed to initialize pixel format"); - return false; - } - - m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format shareContext:nil]; - if (m_context == nil) - return false; - - if (m_wi.type == WindowInfo::Type::MacOS) - BindContextToView(); - - if (make_current) - [m_context makeCurrentContext]; - - return true; -} - -void ContextAGL::BindContextToView() -{ - NSView* const view = GetView(); - NSWindow* const window = [view window]; - [view setWantsBestResolutionOpenGLSurface:YES]; - - UpdateDimensions(); - - dispatch_block_t block = ^{ - [window makeFirstResponder:view]; - [m_context setView:view]; - [window makeKeyAndOrderFront:nil]; - }; - - if ([NSThread isMainThread]) - block(); - else - dispatch_sync(dispatch_get_main_queue(), block); -} -} // namespace GL diff --git a/third_party/duckstation/gl/context_egl.cpp b/third_party/duckstation/gl/context_egl.cpp deleted file mode 100644 index 566245b9..00000000 --- a/third_party/duckstation/gl/context_egl.cpp +++ /dev/null @@ -1,432 +0,0 @@ -#include "context_egl.h" -#include "duckstation_log.h" -#include "duckstation_compat.h" -#include -#include -#include -Log_SetChannel(GL::ContextEGL); - -namespace GL { -ContextEGL::ContextEGL(const WindowInfo& wi) : Context(wi) {} - -ContextEGL::~ContextEGL() -{ - DestroySurface(); - DestroyContext(); -} - -std::unique_ptr ContextEGL::Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try) -{ - std::unique_ptr context = std::make_unique(wi); - if (!context->Initialize(versions_to_try, num_versions_to_try)) - return nullptr; - - return context; -} - -bool ContextEGL::Initialize(const Version* versions_to_try, size_t num_versions_to_try) -{ - if (!gladLoadEGL()) - { - Log_ErrorPrintf("Loading GLAD EGL functions failed"); - return false; - } - - if (!SetDisplay()) - return false; - - int egl_major, egl_minor; - if (!eglInitialize(m_display, &egl_major, &egl_minor)) - { - Log_ErrorPrintf("eglInitialize() failed: %d", eglGetError()); - return false; - } - Log_InfoPrintf("EGL Version: %d.%d", egl_major, egl_minor); - - const char* extensions = eglQueryString(m_display, EGL_EXTENSIONS); - if (extensions) - { - Log_InfoPrintf("EGL Extensions: %s", extensions); - m_supports_surfaceless = std::strstr(extensions, "EGL_KHR_surfaceless_context") != nullptr; - } - if (!m_supports_surfaceless) - Log_WarningPrint("EGL implementation does not support surfaceless contexts, emulating with pbuffers"); - - for (size_t i = 0; i < num_versions_to_try; i++) - { - if (CreateContextAndSurface(versions_to_try[i], nullptr, true)) - return true; - } - - return false; -} - -bool ContextEGL::SetDisplay() -{ - m_display = eglGetDisplay(static_cast(m_wi.display_connection)); - if (!m_display) - { - Log_ErrorPrintf("eglGetDisplay() failed: %d", eglGetError()); - return false; - } - - return true; -} - -void* ContextEGL::GetProcAddress(const char* name) -{ - return reinterpret_cast(eglGetProcAddress(name)); -} - -bool ContextEGL::ChangeSurface(const WindowInfo& new_wi) -{ - const bool was_current = (eglGetCurrentContext() == m_context); - if (was_current) - eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - - if (m_surface != EGL_NO_SURFACE) - { - eglDestroySurface(m_display, m_surface); - m_surface = EGL_NO_SURFACE; - } - - m_wi = new_wi; - if (!CreateSurface()) - return false; - - if (was_current && !eglMakeCurrent(m_display, m_surface, m_surface, m_context)) - { - Log_ErrorPrintf("Failed to make context current again after surface change"); - return false; - } - - return true; -} - -void ContextEGL::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/) -{ - if (new_surface_width == 0 && new_surface_height == 0) - { - EGLint surface_width, surface_height; - if (eglQuerySurface(m_display, m_surface, EGL_WIDTH, &surface_width) && - eglQuerySurface(m_display, m_surface, EGL_HEIGHT, &surface_height)) - { - m_wi.surface_width = static_cast(surface_width); - m_wi.surface_height = static_cast(surface_height); - return; - } - else - { - Log_ErrorPrintf("eglQuerySurface() failed: %d", eglGetError()); - } - } - - m_wi.surface_width = new_surface_width; - m_wi.surface_height = new_surface_height; -} - -bool ContextEGL::SwapBuffers() -{ - return eglSwapBuffers(m_display, m_surface); -} - -bool ContextEGL::MakeCurrent() -{ - if (!eglMakeCurrent(m_display, m_surface, m_surface, m_context)) - { - Log_ErrorPrintf("eglMakeCurrent() failed: %d", eglGetError()); - return false; - } - - return true; -} - -bool ContextEGL::DoneCurrent() -{ - return eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); -} - -bool ContextEGL::SetSwapInterval(s32 interval) -{ - return eglSwapInterval(m_display, interval); -} - -std::unique_ptr ContextEGL::CreateSharedContext(const WindowInfo& wi) -{ - std::unique_ptr context = std::make_unique(wi); - context->m_display = m_display; - context->m_supports_surfaceless = m_supports_surfaceless; - - if (!context->CreateContextAndSurface(m_version, m_context, false)) - return nullptr; - - return context; -} - -EGLNativeWindowType ContextEGL::GetNativeWindow(EGLConfig config) -{ - return {}; -} - -bool ContextEGL::CreateSurface() -{ - if (m_wi.type == WindowInfo::Type::Surfaceless) - { - if (m_supports_surfaceless) - return true; - else - return CreatePBufferSurface(); - } - - EGLNativeWindowType native_window = GetNativeWindow(m_config); - m_surface = eglCreateWindowSurface(m_display, m_config, native_window, nullptr); - if (!m_surface) - { - Log_ErrorPrintf("eglCreateWindowSurface() failed: %d", eglGetError()); - return false; - } - - // Some implementations may require the size to be queried at runtime. - EGLint surface_width, surface_height; - if (eglQuerySurface(m_display, m_surface, EGL_WIDTH, &surface_width) && - eglQuerySurface(m_display, m_surface, EGL_HEIGHT, &surface_height)) - { - m_wi.surface_width = static_cast(surface_width); - m_wi.surface_height = static_cast(surface_height); - } - else - { - Log_ErrorPrintf("eglQuerySurface() failed: %d", eglGetError()); - } - - return true; -} - -bool ContextEGL::CreatePBufferSurface() -{ - const u32 width = std::max(m_wi.surface_width, 1); - const u32 height = std::max(m_wi.surface_height, 1); - - // TODO: Format - EGLint attrib_list[] = { - EGL_WIDTH, static_cast(width), EGL_HEIGHT, static_cast(height), EGL_NONE, - }; - - m_surface = eglCreatePbufferSurface(m_display, m_config, attrib_list); - if (!m_surface) - { - Log_ErrorPrintf("eglCreatePbufferSurface() failed: %d", eglGetError()); - return false; - } - - Log_DevPrintf("Created %ux%u pbuffer surface", width, height); - return true; -} - -bool ContextEGL::CheckConfigSurfaceFormat(EGLConfig config, WindowInfo::SurfaceFormat format) const -{ - int red_size, green_size, blue_size, alpha_size; - if (!eglGetConfigAttrib(m_display, config, EGL_RED_SIZE, &red_size) || - !eglGetConfigAttrib(m_display, config, EGL_GREEN_SIZE, &green_size) || - !eglGetConfigAttrib(m_display, config, EGL_BLUE_SIZE, &blue_size) || - !eglGetConfigAttrib(m_display, config, EGL_ALPHA_SIZE, &alpha_size)) - { - return false; - } - - switch (format) - { - case WindowInfo::SurfaceFormat::Auto: - return true; - - case WindowInfo::SurfaceFormat::RGB8: - return (red_size == 8 && green_size == 8 && blue_size == 8); - - case WindowInfo::SurfaceFormat::RGBA8: - return (red_size == 8 && green_size == 8 && blue_size == 8 && alpha_size == 8); - - case WindowInfo::SurfaceFormat::RGB565: - return (red_size == 5 && green_size == 6 && blue_size == 5); - - default: - return false; - } -} - -void ContextEGL::DestroyContext() -{ - if (eglGetCurrentContext() == m_context) - eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - - if (m_context != EGL_NO_CONTEXT) - { - eglDestroyContext(m_display, m_context); - m_context = EGL_NO_CONTEXT; - } -} - -void ContextEGL::DestroySurface() -{ - if (eglGetCurrentSurface(EGL_DRAW) == m_surface) - eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - - if (m_surface != EGL_NO_SURFACE) - { - eglDestroySurface(m_display, m_surface); - m_surface = EGL_NO_SURFACE; - } -} - -bool ContextEGL::CreateContext(const Version& version, EGLContext share_context) -{ - Log_DevPrintf( - "Trying version %u.%u (%s)", version.major_version, version.minor_version, - version.profile == Context::Profile::ES ? "ES" : (version.profile == Context::Profile::Core ? "Core" : "None")); - int surface_attribs[16] = { - EGL_RENDERABLE_TYPE, - (version.profile == Profile::ES) ? - ((version.major_version >= 3) ? EGL_OPENGL_ES3_BIT : - ((version.major_version == 2) ? EGL_OPENGL_ES2_BIT : EGL_OPENGL_ES_BIT)) : - EGL_OPENGL_BIT, - EGL_SURFACE_TYPE, - (m_wi.type != WindowInfo::Type::Surfaceless) ? EGL_WINDOW_BIT : 0, - }; - int nsurface_attribs = 4; - - switch (m_wi.surface_format) - { - case WindowInfo::SurfaceFormat::RGB8: - surface_attribs[nsurface_attribs++] = EGL_RED_SIZE; - surface_attribs[nsurface_attribs++] = 8; - surface_attribs[nsurface_attribs++] = EGL_GREEN_SIZE; - surface_attribs[nsurface_attribs++] = 8; - surface_attribs[nsurface_attribs++] = EGL_BLUE_SIZE; - surface_attribs[nsurface_attribs++] = 8; - break; - - case WindowInfo::SurfaceFormat::RGBA8: - surface_attribs[nsurface_attribs++] = EGL_RED_SIZE; - surface_attribs[nsurface_attribs++] = 8; - surface_attribs[nsurface_attribs++] = EGL_GREEN_SIZE; - surface_attribs[nsurface_attribs++] = 8; - surface_attribs[nsurface_attribs++] = EGL_BLUE_SIZE; - surface_attribs[nsurface_attribs++] = 8; - surface_attribs[nsurface_attribs++] = EGL_ALPHA_SIZE; - surface_attribs[nsurface_attribs++] = 8; - break; - - case WindowInfo::SurfaceFormat::RGB565: - surface_attribs[nsurface_attribs++] = EGL_RED_SIZE; - surface_attribs[nsurface_attribs++] = 5; - surface_attribs[nsurface_attribs++] = EGL_GREEN_SIZE; - surface_attribs[nsurface_attribs++] = 6; - surface_attribs[nsurface_attribs++] = EGL_BLUE_SIZE; - surface_attribs[nsurface_attribs++] = 5; - break; - - case WindowInfo::SurfaceFormat::Auto: - break; - - default: - UnreachableCode(); - break; - } - - surface_attribs[nsurface_attribs++] = EGL_NONE; - surface_attribs[nsurface_attribs++] = 0; - - EGLint num_configs; - if (!eglChooseConfig(m_display, surface_attribs, nullptr, 0, &num_configs) || num_configs == 0) - { - Log_ErrorPrintf("eglChooseConfig() failed: %d", eglGetError()); - return false; - } - - std::vector configs(static_cast(num_configs)); - if (!eglChooseConfig(m_display, surface_attribs, configs.data(), num_configs, &num_configs)) - { - Log_ErrorPrintf("eglChooseConfig() failed: %d", eglGetError()); - return false; - } - configs.resize(static_cast(num_configs)); - - std::optional config; - for (EGLConfig check_config : configs) - { - if (CheckConfigSurfaceFormat(check_config, m_wi.surface_format)) - { - config = check_config; - break; - } - } - - if (!config.has_value()) - { - Log_WarningPrintf("No EGL configs matched exactly, using first."); - config = configs.front(); - } - - int attribs[8]; - int nattribs = 0; - if (version.profile != Profile::NoProfile) - { - attribs[nattribs++] = EGL_CONTEXT_MAJOR_VERSION; - attribs[nattribs++] = version.major_version; - attribs[nattribs++] = EGL_CONTEXT_MINOR_VERSION; - attribs[nattribs++] = version.minor_version; - } - attribs[nattribs++] = EGL_NONE; - attribs[nattribs++] = 0; - - if (!eglBindAPI((version.profile == Profile::ES) ? EGL_OPENGL_ES_API : EGL_OPENGL_API)) - { - Log_ErrorPrintf("eglBindAPI(%s) failed", (version.profile == Profile::ES) ? "EGL_OPENGL_ES_API" : "EGL_OPENGL_API"); - return false; - } - - m_context = eglCreateContext(m_display, config.value(), share_context, attribs); - if (!m_context) - { - Log_ErrorPrintf("eglCreateContext() failed: %d", eglGetError()); - return false; - } - - Log_InfoPrintf( - "Got version %u.%u (%s)", version.major_version, version.minor_version, - version.profile == Context::Profile::ES ? "ES" : (version.profile == Context::Profile::Core ? "Core" : "None")); - - m_config = config.value(); - m_version = version; - return true; -} - -bool ContextEGL::CreateContextAndSurface(const Version& version, EGLContext share_context, bool make_current) -{ - if (!CreateContext(version, share_context)) - return false; - - if (!CreateSurface()) - { - Log_ErrorPrintf("Failed to create surface for context"); - eglDestroyContext(m_display, m_context); - m_context = EGL_NO_CONTEXT; - return false; - } - - if (make_current && !eglMakeCurrent(m_display, m_surface, m_surface, m_context)) - { - Log_ErrorPrintf("eglMakeCurrent() failed: %d", eglGetError()); - if (m_surface != EGL_NO_SURFACE) - { - eglDestroySurface(m_display, m_surface); - m_surface = EGL_NO_SURFACE; - } - eglDestroyContext(m_display, m_context); - m_context = EGL_NO_CONTEXT; - return false; - } - - return true; -} -} // namespace GL diff --git a/third_party/duckstation/gl/context_egl.h b/third_party/duckstation/gl/context_egl.h deleted file mode 100644 index 5851c671..00000000 --- a/third_party/duckstation/gl/context_egl.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once -#include "context.h" -#include -#include - -namespace GL { - -class ContextEGL : public Context -{ -public: - ContextEGL(const WindowInfo& wi); - ~ContextEGL() override; - - static std::unique_ptr Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try); - - void* GetProcAddress(const char* name) override; - virtual bool ChangeSurface(const WindowInfo& new_wi) override; - virtual void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override; - bool SwapBuffers() override; - bool MakeCurrent() override; - bool DoneCurrent() override; - bool SetSwapInterval(s32 interval) override; - virtual std::unique_ptr CreateSharedContext(const WindowInfo& wi) override; - -protected: - virtual bool SetDisplay(); - virtual EGLNativeWindowType GetNativeWindow(EGLConfig config); - - bool Initialize(const Version* versions_to_try, size_t num_versions_to_try); - bool CreateDisplay(); - bool CreateContext(const Version& version, EGLContext share_context); - bool CreateContextAndSurface(const Version& version, EGLContext share_context, bool make_current); - bool CreateSurface(); - bool CreatePBufferSurface(); - bool CheckConfigSurfaceFormat(EGLConfig config, WindowInfo::SurfaceFormat format) const; - void DestroyContext(); - void DestroySurface(); - - EGLDisplay m_display = EGL_NO_DISPLAY; - EGLSurface m_surface = EGL_NO_SURFACE; - EGLContext m_context = EGL_NO_CONTEXT; - - EGLConfig m_config = {}; - - bool m_supports_surfaceless = false; -}; - -} // namespace GL diff --git a/third_party/duckstation/gl/context_egl_wayland.cpp b/third_party/duckstation/gl/context_egl_wayland.cpp deleted file mode 100644 index 339029ed..00000000 --- a/third_party/duckstation/gl/context_egl_wayland.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#include "context_egl_wayland.h" -#include "duckstation_log.h" -#include -Log_SetChannel(ContextEGLWayland); - -namespace GL { -static const char* WAYLAND_EGL_MODNAME = "libwayland-egl.so.1"; - -ContextEGLWayland::ContextEGLWayland(const WindowInfo& wi) : ContextEGL(wi) {} -ContextEGLWayland::~ContextEGLWayland() -{ - if (m_wl_window) - m_wl_egl_window_destroy(m_wl_window); - if (m_wl_module) - dlclose(m_wl_module); -} - -std::unique_ptr ContextEGLWayland::Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try) -{ - std::unique_ptr context = std::make_unique(wi); - if (!context->LoadModule() || !context->Initialize(versions_to_try, num_versions_to_try)) - return nullptr; - - return context; -} - -std::unique_ptr ContextEGLWayland::CreateSharedContext(const WindowInfo& wi) -{ - std::unique_ptr context = std::make_unique(wi); - context->m_display = m_display; - - if (!context->LoadModule() || !context->CreateContextAndSurface(m_version, m_context, false)) - return nullptr; - - return context; -} - -void ContextEGLWayland::ResizeSurface(u32 new_surface_width, u32 new_surface_height) -{ - if (m_wl_window) - m_wl_egl_window_resize(m_wl_window, new_surface_width, new_surface_height, 0, 0); - - ContextEGL::ResizeSurface(new_surface_width, new_surface_height); -} - -EGLNativeWindowType ContextEGLWayland::GetNativeWindow(EGLConfig config) -{ - if (m_wl_window) - { - m_wl_egl_window_destroy(m_wl_window); - m_wl_window = nullptr; - } - - m_wl_window = - m_wl_egl_window_create(static_cast(m_wi.window_handle), m_wi.surface_width, m_wi.surface_height); - if (!m_wl_window) - return {}; - - return reinterpret_cast(m_wl_window); -} - -bool ContextEGLWayland::LoadModule() -{ - m_wl_module = dlopen(WAYLAND_EGL_MODNAME, RTLD_NOW | RTLD_GLOBAL); - if (!m_wl_module) - { - Log_ErrorPrintf("Failed to load %s.", WAYLAND_EGL_MODNAME); - return false; - } - - m_wl_egl_window_create = - reinterpret_cast(dlsym(m_wl_module, "wl_egl_window_create")); - m_wl_egl_window_destroy = - reinterpret_cast(dlsym(m_wl_module, "wl_egl_window_destroy")); - m_wl_egl_window_resize = - reinterpret_cast(dlsym(m_wl_module, "wl_egl_window_resize")); - if (!m_wl_egl_window_create || !m_wl_egl_window_destroy || !m_wl_egl_window_resize) - { - Log_ErrorPrintf("Failed to load one or more functions from %s.", WAYLAND_EGL_MODNAME); - return false; - } - - return true; -} -} // namespace GL diff --git a/third_party/duckstation/gl/context_egl_wayland.h b/third_party/duckstation/gl/context_egl_wayland.h deleted file mode 100644 index 4682f424..00000000 --- a/third_party/duckstation/gl/context_egl_wayland.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once -#include "context_egl.h" -#include - -namespace GL { - -class ContextEGLWayland final : public ContextEGL -{ -public: - ContextEGLWayland(const WindowInfo& wi); - ~ContextEGLWayland() override; - - static std::unique_ptr Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try); - - std::unique_ptr CreateSharedContext(const WindowInfo& wi) override; - void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override; - -protected: - EGLNativeWindowType GetNativeWindow(EGLConfig config) override; - -private: - bool LoadModule(); - - wl_egl_window* m_wl_window = nullptr; - - void* m_wl_module = nullptr; - wl_egl_window* (*m_wl_egl_window_create)(struct wl_surface* surface, int width, int height); - void (*m_wl_egl_window_destroy)(struct wl_egl_window* egl_window); - void (*m_wl_egl_window_resize)(struct wl_egl_window* egl_window, int width, int height, int dx, int dy); -}; - -} // namespace GL diff --git a/third_party/duckstation/gl/context_egl_x11.cpp b/third_party/duckstation/gl/context_egl_x11.cpp deleted file mode 100644 index 6db6c10b..00000000 --- a/third_party/duckstation/gl/context_egl_x11.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "context_egl_x11.h" -#include "duckstation_log.h" -Log_SetChannel(GL::ContextEGLX11); - -namespace GL { -ContextEGLX11::ContextEGLX11(const WindowInfo& wi) : ContextEGL(wi) {} -ContextEGLX11::~ContextEGLX11() = default; - -std::unique_ptr ContextEGLX11::Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try) -{ - std::unique_ptr context = std::make_unique(wi); - if (!context->Initialize(versions_to_try, num_versions_to_try)) - return nullptr; - - return context; -} - -std::unique_ptr ContextEGLX11::CreateSharedContext(const WindowInfo& wi) -{ - std::unique_ptr context = std::make_unique(wi); - context->m_display = m_display; - - if (!context->CreateContextAndSurface(m_version, m_context, false)) - return nullptr; - - return context; -} - -void ContextEGLX11::ResizeSurface(u32 new_surface_width, u32 new_surface_height) -{ - m_window.Resize(); - ContextEGL::ResizeSurface(new_surface_width, new_surface_height); -} - -EGLNativeWindowType ContextEGLX11::GetNativeWindow(EGLConfig config) -{ - X11InhibitErrors ei; - - EGLint native_visual_id = 0; - if (!eglGetConfigAttrib(m_display, m_config, EGL_NATIVE_VISUAL_ID, &native_visual_id)) - { - Log_ErrorPrintf("Failed to get X11 visual ID"); - return false; - } - - XVisualInfo vi_query = {}; - vi_query.visualid = native_visual_id; - - int num_vis; - XVisualInfo* vi = XGetVisualInfo(static_cast(m_wi.display_connection), VisualIDMask, &vi_query, &num_vis); - if (num_vis <= 0 || !vi) - { - Log_ErrorPrintf("Failed to query visual from X11"); - return false; - } - - m_window.Destroy(); - if (!m_window.Create(GetDisplay(), static_cast(reinterpret_cast(m_wi.window_handle)), vi)) - { - Log_ErrorPrintf("Faild to create X11 child window"); - XFree(vi); - return false; - } - - XFree(vi); - return static_cast(m_window.GetWindow()); -} -} // namespace GL diff --git a/third_party/duckstation/gl/context_egl_x11.h b/third_party/duckstation/gl/context_egl_x11.h deleted file mode 100644 index 7def8bfb..00000000 --- a/third_party/duckstation/gl/context_egl_x11.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once -#include "context_egl.h" -#include "x11_window.h" - -namespace GL { - -class ContextEGLX11 final : public ContextEGL -{ -public: - ContextEGLX11(const WindowInfo& wi); - ~ContextEGLX11() override; - - static std::unique_ptr Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try); - - std::unique_ptr CreateSharedContext(const WindowInfo& wi) override; - void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override; - -protected: - EGLNativeWindowType GetNativeWindow(EGLConfig config) override; - -private: - ALWAYS_INLINE Display* GetDisplay() const { return static_cast(m_wi.display_connection); } - - X11Window m_window; -}; - -} // namespace GL diff --git a/third_party/duckstation/gl/context_glx.cpp b/third_party/duckstation/gl/context_glx.cpp deleted file mode 100644 index 485e27ad..00000000 --- a/third_party/duckstation/gl/context_glx.cpp +++ /dev/null @@ -1,328 +0,0 @@ -#include "context_glx.h" -#include "duckstation_compat.h" -#include "duckstation_log.h" -#include -Log_SetChannel(GL::ContextGLX); - -namespace GL { -ContextGLX::ContextGLX(const WindowInfo& wi) : Context(wi) {} - -ContextGLX::~ContextGLX() -{ - if (glXGetCurrentContext() == m_context) - glXMakeCurrent(GetDisplay(), None, nullptr); - - if (m_context) - glXDestroyContext(GetDisplay(), m_context); - - if (m_vi) - XFree(m_vi); - - if (m_libGL_handle) - dlclose(m_libGL_handle); -} - -std::unique_ptr ContextGLX::Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try) -{ - std::unique_ptr context = std::make_unique(wi); - if (!context->Initialize(versions_to_try, num_versions_to_try)) - return nullptr; - - return context; -} - -bool ContextGLX::Initialize(const Version* versions_to_try, size_t num_versions_to_try) -{ - // We need libGL loaded, because GLAD loads its own, then releases it. - m_libGL_handle = dlopen("libGL.so.1", RTLD_NOW | RTLD_GLOBAL); - if (!m_libGL_handle) - { - m_libGL_handle = dlopen("libGL.so", RTLD_NOW | RTLD_GLOBAL); - if (!m_libGL_handle) - { - Log_ErrorPrintf("Failed to load libGL.so: %s", dlerror()); - return false; - } - } - - const int screen = DefaultScreen(GetDisplay()); - if (!gladLoadGLX(GetDisplay(), screen)) - { - Log_ErrorPrintf("Loading GLAD GLX functions failed"); - return false; - } - - if (m_wi.type == WindowInfo::Type::X11) - { - if (!CreateWindow(screen)) - return false; - } - else - { - Panic("Create pbuffer"); - } - - for (size_t i = 0; i < num_versions_to_try; i++) - { - const Version& cv = versions_to_try[i]; - if (cv.profile == Profile::NoProfile && CreateAnyContext(nullptr, true)) - { - m_version = cv; - return true; - } - else if (cv.profile != Profile::NoProfile && CreateVersionContext(cv, nullptr, true)) - { - m_version = cv; - return true; - } - } - - return false; -} - -void* ContextGLX::GetProcAddress(const char* name) -{ - return reinterpret_cast(glXGetProcAddress(reinterpret_cast(name))); -} - -bool ContextGLX::ChangeSurface(const WindowInfo& new_wi) -{ - const bool was_current = (glXGetCurrentContext() == m_context); - if (was_current) - glXMakeCurrent(GetDisplay(), None, nullptr); - - m_window.Destroy(); - m_wi = new_wi; - - if (new_wi.type == WindowInfo::Type::X11) - { - const int screen = DefaultScreen(GetDisplay()); - if (!CreateWindow(screen)) - return false; - } - - if (was_current && !glXMakeCurrent(GetDisplay(), GetDrawable(), m_context)) - { - Log_ErrorPrintf("Failed to make context current again after surface change"); - return false; - } - - return true; -} - -void ContextGLX::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/) -{ - m_window.Resize(new_surface_width, new_surface_height); - m_wi.surface_width = m_window.GetWidth(); - m_wi.surface_height = m_window.GetHeight(); -} - -bool ContextGLX::SwapBuffers() -{ - glXSwapBuffers(GetDisplay(), GetDrawable()); - return true; -} - -bool ContextGLX::MakeCurrent() -{ - return (glXMakeCurrent(GetDisplay(), GetDrawable(), m_context) == True); -} - -bool ContextGLX::DoneCurrent() -{ - return (glXMakeCurrent(GetDisplay(), None, nullptr) == True); -} - -bool ContextGLX::SetSwapInterval(s32 interval) -{ - if (GLAD_GLX_EXT_swap_control) - { - glXSwapIntervalEXT(GetDisplay(), GetDrawable(), interval); - return true; - } - else if (GLAD_GLX_MESA_swap_control) - { - return (glXSwapIntervalMESA(static_cast(std::max(interval, 0))) != 0); - } - else if (GLAD_GLX_SGI_swap_control) - { - return (glXSwapIntervalSGI(interval) != 0); - } - else - { - return false; - } -} - -std::unique_ptr ContextGLX::CreateSharedContext(const WindowInfo& wi) -{ - std::unique_ptr context = std::make_unique(wi); - if (wi.type == WindowInfo::Type::X11) - { - const int screen = DefaultScreen(context->GetDisplay()); - if (!context->CreateWindow(screen)) - return nullptr; - } - else - { - Panic("Create pbuffer"); - } - - if (m_version.profile == Profile::NoProfile) - { - if (!context->CreateAnyContext(m_context, false)) - return nullptr; - } - else - { - if (!context->CreateVersionContext(m_version, m_context, false)) - return nullptr; - } - - context->m_version = m_version; - return context; -} - -bool ContextGLX::CreateWindow(int screen) -{ - int attribs[32] = {GLX_X_RENDERABLE, True, GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, - GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR, GLX_DOUBLEBUFFER, True}; - int nattribs = 8; - - switch (m_wi.surface_format) - { - case WindowInfo::SurfaceFormat::RGB8: - attribs[nattribs++] = GLX_RED_SIZE; - attribs[nattribs++] = 8; - attribs[nattribs++] = GLX_GREEN_SIZE; - attribs[nattribs++] = 8; - attribs[nattribs++] = GLX_BLUE_SIZE; - attribs[nattribs++] = 8; - break; - - case WindowInfo::SurfaceFormat::RGBA8: - attribs[nattribs++] = GLX_RED_SIZE; - attribs[nattribs++] = 8; - attribs[nattribs++] = GLX_GREEN_SIZE; - attribs[nattribs++] = 8; - attribs[nattribs++] = GLX_BLUE_SIZE; - attribs[nattribs++] = 8; - attribs[nattribs++] = GLX_ALPHA_SIZE; - attribs[nattribs++] = 8; - break; - - case WindowInfo::SurfaceFormat::RGB565: - attribs[nattribs++] = GLX_RED_SIZE; - attribs[nattribs++] = 5; - attribs[nattribs++] = GLX_GREEN_SIZE; - attribs[nattribs++] = 6; - attribs[nattribs++] = GLX_BLUE_SIZE; - attribs[nattribs++] = 5; - break; - - case WindowInfo::SurfaceFormat::Auto: - break; - - default: - UnreachableCode(); - break; - } - - attribs[nattribs++] = None; - attribs[nattribs++] = 0; - - int fbcount = 0; - GLXFBConfig* fbc = glXChooseFBConfig(GetDisplay(), screen, attribs, &fbcount); - if (!fbc || !fbcount) - { - Log_ErrorPrintf("glXChooseFBConfig() failed"); - return false; - } - m_fb_config = *fbc; - XFree(fbc); - - if (!GLAD_GLX_VERSION_1_3) - { - Log_ErrorPrintf("GLX Version 1.3 is required"); - return false; - } - - m_vi = glXGetVisualFromFBConfig(GetDisplay(), m_fb_config); - if (!m_vi) - { - Log_ErrorPrintf("glXGetVisualFromFBConfig() failed"); - return false; - } - - return m_window.Create(GetDisplay(), static_cast(reinterpret_cast(m_wi.window_handle)), m_vi); -} - -bool ContextGLX::CreateAnyContext(GLXContext share_context, bool make_current) -{ - X11InhibitErrors ie; - - m_context = glXCreateContext(GetDisplay(), m_vi, share_context, True); - if (!m_context || ie.HadError()) - { - Log_ErrorPrintf("glxCreateContext() failed"); - return false; - } - - if (make_current) - { - if (!glXMakeCurrent(GetDisplay(), GetDrawable(), m_context)) - { - Log_ErrorPrintf("glXMakeCurrent() failed"); - return false; - } - } - - return true; -} - -bool ContextGLX::CreateVersionContext(const Version& version, GLXContext share_context, bool make_current) -{ - // we need create context attribs - if (!GLAD_GLX_VERSION_1_3) - { - Log_ErrorPrint("Missing GLX version 1.3."); - return false; - } - - int attribs[32]; - int nattribs = 0; - attribs[nattribs++] = GLX_CONTEXT_PROFILE_MASK_ARB; - attribs[nattribs++] = - ((version.profile == Profile::ES) ? - ((version.major_version >= 2) ? GLX_CONTEXT_ES2_PROFILE_BIT_EXT : GLX_CONTEXT_ES_PROFILE_BIT_EXT) : - GLX_CONTEXT_CORE_PROFILE_BIT_ARB); - attribs[nattribs++] = GLX_CONTEXT_MAJOR_VERSION_ARB; - attribs[nattribs++] = version.major_version; - attribs[nattribs++] = GLX_CONTEXT_MINOR_VERSION_ARB; - attribs[nattribs++] = version.minor_version; - attribs[nattribs++] = None; - attribs[nattribs++] = 0; - - X11InhibitErrors ie; - m_context = glXCreateContextAttribsARB(GetDisplay(), m_fb_config, share_context, True, attribs); - XSync(GetDisplay(), False); - if (ie.HadError()) - m_context = nullptr; - if (!m_context) - return false; - - if (make_current) - { - if (!glXMakeCurrent(GetDisplay(), GetDrawable(), m_context)) - { - Log_ErrorPrint("glXMakeCurrent() failed"); - glXDestroyContext(GetDisplay(), m_context); - m_context = nullptr; - return false; - } - } - - return true; -} -} // namespace GL diff --git a/third_party/duckstation/gl/context_glx.h b/third_party/duckstation/gl/context_glx.h deleted file mode 100644 index fc2ff902..00000000 --- a/third_party/duckstation/gl/context_glx.h +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once -#include "context.h" -#include -#include "x11_window.h" - -namespace GL { - -class ContextGLX final : public Context -{ -public: - ContextGLX(const WindowInfo& wi); - ~ContextGLX() override; - - static std::unique_ptr Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try); - - void* GetProcAddress(const char* name) override; - bool ChangeSurface(const WindowInfo& new_wi) override; - void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override; - bool SwapBuffers() override; - bool MakeCurrent() override; - bool DoneCurrent() override; - bool SetSwapInterval(s32 interval) override; - std::unique_ptr CreateSharedContext(const WindowInfo& wi) override; - -private: - ALWAYS_INLINE Display* GetDisplay() const { return static_cast(m_wi.display_connection); } - ALWAYS_INLINE GLXDrawable GetDrawable() const { return static_cast(m_window.GetWindow()); } - - bool Initialize(const Version* versions_to_try, size_t num_versions_to_try); - bool CreateWindow(int screen); - bool CreateAnyContext(GLXContext share_context, bool make_current); - bool CreateVersionContext(const Version& version, GLXContext share_context, bool make_current); - - GLXContext m_context = nullptr; - GLXFBConfig m_fb_config = {}; - XVisualInfo* m_vi = nullptr; - X11Window m_window; - - // GLAD releases its reference to libGL.so, so we need to maintain our own. - void* m_libGL_handle = nullptr; -}; - -} // namespace GL diff --git a/third_party/duckstation/gl/context_wgl.cpp b/third_party/duckstation/gl/context_wgl.cpp deleted file mode 100644 index 47ec4b1e..00000000 --- a/third_party/duckstation/gl/context_wgl.cpp +++ /dev/null @@ -1,452 +0,0 @@ -#include "context_wgl.h" -#include "duckstation_compat.h" -#include "duckstation_log.h" -#include "duckstation_scoped_guard.h" -#include "loader.h" -Log_SetChannel(GL::ContextWGL); - -// TODO: get rid of this -#pragma comment(lib, "opengl32.lib") - -static void* GetProcAddressCallback(const char* name) -{ - void* addr = reinterpret_cast(wglGetProcAddress(name)); - if (addr) - return addr; - - // try opengl32.dll - return reinterpret_cast(::GetProcAddress(GetModuleHandleA("opengl32.dll"), name)); -} - -namespace GL { -ContextWGL::ContextWGL(const WindowInfo& wi) : Context(wi) {} - -ContextWGL::~ContextWGL() -{ - if (wglGetCurrentContext() == m_rc) - wglMakeCurrent(m_dc, nullptr); - - if (m_rc) - wglDeleteContext(m_rc); - - ReleaseDC(); -} - -std::unique_ptr ContextWGL::Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try) -{ - std::unique_ptr context = std::make_unique(wi); - if (!context->Initialize(versions_to_try, num_versions_to_try)) - return nullptr; - - return context; -} - -bool ContextWGL::Initialize(const Version* versions_to_try, size_t num_versions_to_try) -{ - if (m_wi.type == WindowInfo::Type::Win32) - { - if (!InitializeDC()) - return false; - } - else - { - Log_ErrorPrint("ContextWGL must always start with a valid surface."); - return false; - } - - // Everything including core/ES requires a dummy profile to load the WGL extensions. - if (!CreateAnyContext(nullptr, true)) - return false; - - for (size_t i = 0; i < num_versions_to_try; i++) - { - const Version& cv = versions_to_try[i]; - if (cv.profile == Profile::NoProfile) - { - // we already have the dummy context, so just use that - m_version = cv; - return true; - } - else if (CreateVersionContext(cv, nullptr, true)) - { - m_version = cv; - return true; - } - } - - return false; -} - -void* ContextWGL::GetProcAddress(const char* name) -{ - return GetProcAddressCallback(name); -} - -bool ContextWGL::ChangeSurface(const WindowInfo& new_wi) -{ - const bool was_current = (wglGetCurrentContext() == m_rc); - - ReleaseDC(); - - m_wi = new_wi; - if (!InitializeDC()) - return false; - - if (was_current && !wglMakeCurrent(m_dc, m_rc)) - { - Log_ErrorPrintf("Failed to make context current again after surface change: 0x%08X", GetLastError()); - return false; - } - - return true; -} - -void ContextWGL::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/) -{ - RECT client_rc = {}; - GetClientRect(GetHWND(), &client_rc); - m_wi.surface_width = static_cast(client_rc.right - client_rc.left); - m_wi.surface_height = static_cast(client_rc.bottom - client_rc.top); -} - -bool ContextWGL::SwapBuffers() -{ - return ::SwapBuffers(m_dc); -} - -bool ContextWGL::MakeCurrent() -{ - if (!wglMakeCurrent(m_dc, m_rc)) - { - Log_ErrorPrintf("wglMakeCurrent() failed: 0x%08X", GetLastError()); - return false; - } - - return true; -} - -bool ContextWGL::DoneCurrent() -{ - return wglMakeCurrent(m_dc, nullptr); -} - -bool ContextWGL::SetSwapInterval(s32 interval) -{ - if (!GLAD_WGL_EXT_swap_control) - return false; - - return wglSwapIntervalEXT(interval); -} - -std::unique_ptr ContextWGL::CreateSharedContext(const WindowInfo& wi) -{ - std::unique_ptr context = std::make_unique(wi); - if (wi.type == WindowInfo::Type::Win32) - { - if (!context->InitializeDC()) - return nullptr; - } - else - { - Log_ErrorPrint("PBuffer not implemented"); - return nullptr; - } - - if (m_version.profile == Profile::NoProfile) - { - if (!context->CreateAnyContext(m_rc, false)) - return nullptr; - } - else - { - if (!context->CreateVersionContext(m_version, m_rc, false)) - return nullptr; - } - - context->m_version = m_version; - return context; -} - -HDC ContextWGL::GetDCAndSetPixelFormat(HWND hwnd) -{ - PIXELFORMATDESCRIPTOR pfd = {}; - pfd.nSize = sizeof(pfd); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; - pfd.iPixelType = PFD_TYPE_RGBA; - pfd.dwLayerMask = PFD_MAIN_PLANE; - pfd.cRedBits = 8; - pfd.cGreenBits = 8; - pfd.cBlueBits = 8; - pfd.cColorBits = 24; - - HDC hDC = ::GetDC(hwnd); - if (!hDC) - { - Log_ErrorPrintf("GetDC() failed: 0x%08X", GetLastError()); - return {}; - } - - if (!m_pixel_format.has_value()) - { - const int pf = ChoosePixelFormat(hDC, &pfd); - if (pf == 0) - { - Log_ErrorPrintf("ChoosePixelFormat() failed: 0x%08X", GetLastError()); - ::ReleaseDC(hwnd, hDC); - return {}; - } - - m_pixel_format = pf; - } - - if (!SetPixelFormat(hDC, m_pixel_format.value(), &pfd)) - { - Log_ErrorPrintf("SetPixelFormat() failed: 0x%08X", GetLastError()); - ::ReleaseDC(hwnd, hDC); - return {}; - } - - return hDC; -} - -bool ContextWGL::InitializeDC() -{ - if (m_wi.type == WindowInfo::Type::Win32) - { - m_dc = GetDCAndSetPixelFormat(GetHWND()); - if (!m_dc) - { - Log_ErrorPrint("Failed to get DC for window"); - return false; - } - - return true; - } - else if (m_wi.type == WindowInfo::Type::Surfaceless) - { - return CreatePBuffer(); - } - else - { - Log_ErrorPrintf("Unknown window info type %u", static_cast(m_wi.type)); - return false; - } -} - -void ContextWGL::ReleaseDC() -{ - if (m_pbuffer) - { - wglReleasePbufferDCARB(m_pbuffer, m_dc); - m_dc = {}; - - wglDestroyPbufferARB(m_pbuffer); - m_pbuffer = {}; - - ::ReleaseDC(m_dummy_window, m_dummy_dc); - m_dummy_dc = {}; - - DestroyWindow(m_dummy_window); - m_dummy_window = {}; - } - else if (m_dc) - { - ::ReleaseDC(GetHWND(), m_dc); - m_dc = {}; - } -} - -bool ContextWGL::CreatePBuffer() -{ - static bool window_class_registered = false; - static const wchar_t* window_class_name = L"ContextWGLPBuffer"; - - if (!window_class_registered) - { - WNDCLASSEXW wc = {}; - wc.cbSize = sizeof(WNDCLASSEXW); - wc.style = 0; - wc.lpfnWndProc = DefWindowProcW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandle(nullptr); - wc.hIcon = NULL; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); - wc.lpszMenuName = NULL; - wc.lpszClassName = window_class_name; - wc.hIconSm = NULL; - - if (!RegisterClassExW(&wc)) - { - Log_ErrorPrint("(ContextWGL::CreatePBuffer) RegisterClassExW() failed"); - return false; - } - - window_class_registered = true; - } - - HWND hwnd = CreateWindowExW(0, window_class_name, window_class_name, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL); - if (!hwnd) - { - Log_ErrorPrint("(ContextWGL::CreatePBuffer) CreateWindowEx() failed"); - return false; - } - - ScopedGuard hwnd_guard([hwnd]() { DestroyWindow(hwnd); }); - - HDC hdc = GetDCAndSetPixelFormat(hwnd); - if (!hdc) - return false; - - ScopedGuard hdc_guard([hdc, hwnd]() { ::ReleaseDC(hwnd, hdc); }); - - static constexpr const int pb_attribs[] = {0, 0}; - - AssertMsg(m_pixel_format.has_value(), "Has pixel format for pbuffer"); - HPBUFFERARB pbuffer = wglCreatePbufferARB(hdc, m_pixel_format.value(), 1, 1, pb_attribs); - if (!pbuffer) - { - Log_ErrorPrint("(ContextWGL::CreatePBuffer) wglCreatePbufferARB() failed"); - return false; - } - - ScopedGuard pbuffer_guard([pbuffer]() { wglDestroyPbufferARB(pbuffer); }); - - m_dc = wglGetPbufferDCARB(pbuffer); - if (!m_dc) - { - Log_ErrorPrint("(ContextWGL::CreatePbuffer) wglGetPbufferDCARB() failed"); - return false; - } - - m_dummy_window = hwnd; - m_dummy_dc = hdc; - m_pbuffer = pbuffer; - - pbuffer_guard.Cancel(); - hdc_guard.Cancel(); - hwnd_guard.Cancel(); - return true; -} - -bool ContextWGL::CreateAnyContext(HGLRC share_context, bool make_current) -{ - m_rc = wglCreateContext(m_dc); - if (!m_rc) - { - Log_ErrorPrintf("wglCreateContext() failed: 0x%08X", GetLastError()); - return false; - } - - if (make_current) - { - if (!wglMakeCurrent(m_dc, m_rc)) - { - Log_ErrorPrintf("wglMakeCurrent() failed: 0x%08X", GetLastError()); - return false; - } - - // re-init glad-wgl - if (!gladLoadWGLLoader([](const char* name) -> void* { return reinterpret_cast(wglGetProcAddress(name)); }, m_dc)) - { - Log_ErrorPrint("Loading GLAD WGL functions failed"); - return false; - } - } - - if (share_context && !wglShareLists(share_context, m_rc)) - { - Log_ErrorPrintf("wglShareLists() failed: 0x%08X", GetLastError()); - return false; - } - - return true; -} - -bool ContextWGL::CreateVersionContext(const Version& version, HGLRC share_context, bool make_current) -{ - // we need create context attribs - if (!GLAD_WGL_ARB_create_context) - { - Log_ErrorPrint("Missing GLAD_WGL_ARB_create_context."); - return false; - } - - HGLRC new_rc; - if (version.profile == Profile::Core) - { - const int attribs[] = {WGL_CONTEXT_PROFILE_MASK_ARB, - WGL_CONTEXT_CORE_PROFILE_BIT_ARB, - WGL_CONTEXT_MAJOR_VERSION_ARB, - version.major_version, - WGL_CONTEXT_MINOR_VERSION_ARB, - version.minor_version, -#ifdef _DEBUG - WGL_CONTEXT_FLAGS_ARB, - WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB | WGL_CONTEXT_DEBUG_BIT_ARB, -#else - WGL_CONTEXT_FLAGS_ARB, - WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, -#endif - 0, - 0}; - - new_rc = wglCreateContextAttribsARB(m_dc, share_context, attribs); - } - else if (version.profile == Profile::ES) - { - if ((version.major_version >= 2 && !GLAD_WGL_EXT_create_context_es2_profile) || - (version.major_version < 2 && !GLAD_WGL_EXT_create_context_es_profile)) - { - Log_ErrorPrint("WGL_EXT_create_context_es_profile not supported"); - return false; - } - - const int attribs[] = { - WGL_CONTEXT_PROFILE_MASK_ARB, - ((version.major_version >= 2) ? WGL_CONTEXT_ES2_PROFILE_BIT_EXT : WGL_CONTEXT_ES_PROFILE_BIT_EXT), - WGL_CONTEXT_MAJOR_VERSION_ARB, - version.major_version, - WGL_CONTEXT_MINOR_VERSION_ARB, - version.minor_version, - 0, - 0}; - - new_rc = wglCreateContextAttribsARB(m_dc, share_context, attribs); - } - else - { - Log_ErrorPrint("Unknown profile"); - return false; - } - - if (!new_rc) - return false; - - // destroy and swap contexts - if (m_rc) - { - if (!wglMakeCurrent(m_dc, make_current ? new_rc : nullptr)) - { - Log_ErrorPrintf("wglMakeCurrent() failed: 0x%08X", GetLastError()); - wglDeleteContext(new_rc); - return false; - } - - // re-init glad-wgl - if (make_current && !gladLoadWGLLoader([](const char* name) -> void* { return reinterpret_cast(wglGetProcAddress(name)); }, m_dc)) - { - Log_ErrorPrint("Loading GLAD WGL functions failed"); - return false; - } - - wglDeleteContext(m_rc); - } - - m_rc = new_rc; - return true; -} -} // namespace GL diff --git a/third_party/duckstation/gl/context_wgl.h b/third_party/duckstation/gl/context_wgl.h deleted file mode 100644 index eb2d3be2..00000000 --- a/third_party/duckstation/gl/context_wgl.h +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once -#include "windows_headers.h" - -#include "context.h" -#include -#include "loader.h" -#include - -namespace GL { - -class ContextWGL final : public Context -{ -public: - ContextWGL(const WindowInfo& wi); - ~ContextWGL() override; - - static std::unique_ptr Create(const WindowInfo& wi, const Version* versions_to_try, - size_t num_versions_to_try); - - void* GetProcAddress(const char* name) override; - bool ChangeSurface(const WindowInfo& new_wi) override; - void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override; - bool SwapBuffers() override; - bool MakeCurrent() override; - bool DoneCurrent() override; - bool SetSwapInterval(s32 interval) override; - std::unique_ptr CreateSharedContext(const WindowInfo& wi) override; - -private: - ALWAYS_INLINE HWND GetHWND() const { return static_cast(m_wi.window_handle); } - - HDC GetDCAndSetPixelFormat(HWND hwnd); - - bool Initialize(const Version* versions_to_try, size_t num_versions_to_try); - bool InitializeDC(); - void ReleaseDC(); - bool CreatePBuffer(); - bool CreateAnyContext(HGLRC share_context, bool make_current); - bool CreateVersionContext(const Version& version, HGLRC share_context, bool make_current); - - HDC m_dc = {}; - HGLRC m_rc = {}; - - // Can't change pixel format once it's set for a RC. - std::optional m_pixel_format; - - // Dummy window for creating a PBuffer off when we're surfaceless. - HWND m_dummy_window = {}; - HDC m_dummy_dc = {}; - HPBUFFERARB m_pbuffer = {}; -}; - -} // namespace GL \ No newline at end of file diff --git a/third_party/duckstation/gl/loader.h b/third_party/duckstation/gl/loader.h deleted file mode 100644 index e6993f55..00000000 --- a/third_party/duckstation/gl/loader.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -// Fix glad.h including windows.h -#ifdef _WIN32 -#include "windows_headers.h" -#endif - -#include diff --git a/third_party/duckstation/gl/stream_buffer.cpp b/third_party/duckstation/gl/stream_buffer.cpp deleted file mode 100644 index b7a40603..00000000 --- a/third_party/duckstation/gl/stream_buffer.cpp +++ /dev/null @@ -1,288 +0,0 @@ -// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin -// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) - -#include "gl/stream_buffer.h" - -#include -#include - -#include "align.hpp" - -OpenGLStreamBuffer::OpenGLStreamBuffer(GLenum target, GLuint buffer_id, u32 size) : m_target(target), m_buffer_id(buffer_id), m_size(size) {} -OpenGLStreamBuffer::~OpenGLStreamBuffer() { glDeleteBuffers(1, &m_buffer_id); } - -void OpenGLStreamBuffer::Bind() { glBindBuffer(m_target, m_buffer_id); } -void OpenGLStreamBuffer::Unbind() { glBindBuffer(m_target, 0); } - -void OpenGLStreamBuffer::SetDebugName(std::string_view name) { -#ifdef GPU_DEBUG_INFO - if (glObjectLabel) { - glObjectLabel(GL_BUFFER, GetGLBufferId(), static_cast(name.length()), static_cast(name.data())); - } -#endif -} - -namespace { - // Uses glBufferSubData() to update. Preferred for drivers which don't support {ARB,EXT}_buffer_storage. - class BufferSubDataStreamBuffer final : public OpenGLStreamBuffer { - public: - ~BufferSubDataStreamBuffer() override { Common::alignedFree(m_cpu_buffer); } - - MappingResult Map(u32 alignment, u32 min_size) override { return MappingResult{static_cast(m_cpu_buffer), 0, 0, m_size / alignment}; } - - u32 Unmap(u32 used_size) override { - if (used_size == 0) return 0; - - glBindBuffer(m_target, m_buffer_id); - glBufferSubData(m_target, 0, used_size, m_cpu_buffer); - return 0; - } - - u32 GetChunkSize() const override { return m_size; } - - static std::unique_ptr Create(GLenum target, u32 size) { - glGetError(); - - GLuint buffer_id; - glGenBuffers(1, &buffer_id); - glBindBuffer(target, buffer_id); - glBufferData(target, size, nullptr, GL_STREAM_DRAW); - - GLenum err = glGetError(); - if (err != GL_NO_ERROR) { - glBindBuffer(target, 0); - glDeleteBuffers(1, &buffer_id); - return {}; - } - - return std::unique_ptr(new BufferSubDataStreamBuffer(target, buffer_id, size)); - } - - private: - BufferSubDataStreamBuffer(GLenum target, GLuint buffer_id, u32 size) : OpenGLStreamBuffer(target, buffer_id, size) { - m_cpu_buffer = static_cast(Common::alignedMalloc(size, 32)); - if (!m_cpu_buffer) Panic("Failed to allocate CPU storage for GL buffer"); - } - - u8* m_cpu_buffer; - }; - - // Uses BufferData() to orphan the buffer after every update. Used on Mali where BufferSubData forces a sync. - class BufferDataStreamBuffer final : public OpenGLStreamBuffer { - public: - ~BufferDataStreamBuffer() override { Common::alignedFree(m_cpu_buffer); } - - MappingResult Map(u32 alignment, u32 min_size) override { return MappingResult{static_cast(m_cpu_buffer), 0, 0, m_size / alignment}; } - - u32 Unmap(u32 used_size) override { - if (used_size == 0) return 0; - - glBindBuffer(m_target, m_buffer_id); - glBufferData(m_target, used_size, m_cpu_buffer, GL_STREAM_DRAW); - return 0; - } - - u32 GetChunkSize() const override { return m_size; } - - static std::unique_ptr Create(GLenum target, u32 size) { - glGetError(); - - GLuint buffer_id; - glGenBuffers(1, &buffer_id); - glBindBuffer(target, buffer_id); - glBufferData(target, size, nullptr, GL_STREAM_DRAW); - - GLenum err = glGetError(); - if (err != GL_NO_ERROR) { - glBindBuffer(target, 0); - glDeleteBuffers(1, &buffer_id); - return {}; - } - - return std::unique_ptr(new BufferDataStreamBuffer(target, buffer_id, size)); - } - - private: - BufferDataStreamBuffer(GLenum target, GLuint buffer_id, u32 size) : OpenGLStreamBuffer(target, buffer_id, size) { - m_cpu_buffer = static_cast(Common::alignedMalloc(size, 32)); - if (!m_cpu_buffer) Panic("Failed to allocate CPU storage for GL buffer"); - } - - u8* m_cpu_buffer; - }; - - // Base class for implementations which require syncing. - class SyncingStreamBuffer : public OpenGLStreamBuffer { - public: - enum : u32 { NUM_SYNC_POINTS = 16 }; - - virtual ~SyncingStreamBuffer() override { - for (u32 i = m_available_block_index; i <= m_used_block_index; i++) { - glDeleteSync(m_sync_objects[i]); - } - } - - protected: - SyncingStreamBuffer(GLenum target, GLuint buffer_id, u32 size) - : OpenGLStreamBuffer(target, buffer_id, size), m_bytes_per_block((size + (NUM_SYNC_POINTS)-1) / NUM_SYNC_POINTS) {} - - ALWAYS_INLINE u32 GetSyncIndexForOffset(u32 offset) { return offset / m_bytes_per_block; } - - ALWAYS_INLINE void AddSyncsForOffset(u32 offset) { - const u32 end = GetSyncIndexForOffset(offset); - for (; m_used_block_index < end; m_used_block_index++) { - if (m_sync_objects[m_used_block_index]) { - Helpers::warn("GL stream buffer: Fence slot we're trying to insert is already in use"); - } - - m_sync_objects[m_used_block_index] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); - } - } - - ALWAYS_INLINE void WaitForSync(GLsync& sync) { - glClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); - glDeleteSync(sync); - sync = nullptr; - } - - ALWAYS_INLINE void EnsureSyncsWaitedForOffset(u32 offset) { - const u32 end = std::min(GetSyncIndexForOffset(offset) + 1, NUM_SYNC_POINTS); - for (; m_available_block_index < end; m_available_block_index++) { - if (!m_sync_objects[m_available_block_index]) [[unlikely]] { - Helpers::warn("GL stream buffer: Fence slot we're trying to wait on is not in use"); - } - - WaitForSync(m_sync_objects[m_available_block_index]); - } - } - - void AllocateSpace(u32 size) { - // add sync objects for writes since the last allocation - AddSyncsForOffset(m_position); - - // wait for sync objects for the space we want to use - EnsureSyncsWaitedForOffset(m_position + size); - - // wrap-around? - if ((m_position + size) > m_size) { - // current position ... buffer end - AddSyncsForOffset(m_size); - - // rewind, and try again - m_position = 0; - - // wait for the sync at the start of the buffer - WaitForSync(m_sync_objects[0]); - m_available_block_index = 1; - - // and however much more we need to satisfy the allocation - EnsureSyncsWaitedForOffset(size); - m_used_block_index = 0; - } - } - - u32 GetChunkSize() const override { return m_size / NUM_SYNC_POINTS; } - - u32 m_position = 0; - u32 m_used_block_index = 0; - u32 m_available_block_index = NUM_SYNC_POINTS; - u32 m_bytes_per_block; - std::array m_sync_objects{}; - }; - - class BufferStorageStreamBuffer : public SyncingStreamBuffer { - public: - ~BufferStorageStreamBuffer() override { - glBindBuffer(m_target, m_buffer_id); - glUnmapBuffer(m_target); - glBindBuffer(m_target, 0); - } - - MappingResult Map(u32 alignment, u32 min_size) override { - if (m_position > 0) m_position = Common::alignUp(m_position, alignment); - - AllocateSpace(min_size); - if ((m_position + min_size) > (m_available_block_index * m_bytes_per_block)) [[unlikely]] { - Helpers::panic("GL stream buffer: Invalid size passed to Unmap"); - } - - const u32 free_space_in_block = ((m_available_block_index * m_bytes_per_block) - m_position); - return MappingResult{static_cast(m_mapped_ptr + m_position), m_position, m_position / alignment, free_space_in_block / alignment}; - } - - u32 Unmap(u32 used_size) override { - if ((m_position + used_size) > m_size) [[unlikely]] { - Helpers::panic("GL stream buffer: Invalid size passed to Unmap"); - } - - if (!m_coherent) { - if (GLAD_GL_VERSION_4_5 || GLAD_GL_ARB_direct_state_access) { - glFlushMappedNamedBufferRange(m_buffer_id, m_position, used_size); - } else { - Bind(); - glFlushMappedBufferRange(m_target, m_position, used_size); - } - } - - const u32 prev_position = m_position; - m_position += used_size; - return prev_position; - } - - static std::unique_ptr Create(GLenum target, u32 size, bool coherent = true) { - glGetError(); - - GLuint buffer_id; - glGenBuffers(1, &buffer_id); - glBindBuffer(target, buffer_id); - - const u32 flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | (coherent ? GL_MAP_COHERENT_BIT : 0); - const u32 map_flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | (coherent ? 0 : GL_MAP_FLUSH_EXPLICIT_BIT); - if (GLAD_GL_VERSION_4_4 || GLAD_GL_ARB_buffer_storage) - glBufferStorage(target, size, nullptr, flags); - else if (GLAD_GL_EXT_buffer_storage) - glBufferStorageEXT(target, size, nullptr, flags); - - GLenum err = glGetError(); - if (err != GL_NO_ERROR) { - glBindBuffer(target, 0); - glDeleteBuffers(1, &buffer_id); - return {}; - } - - u8* mapped_ptr = static_cast(glMapBufferRange(target, 0, size, map_flags)); - AssertMsg(mapped_ptr, "Persistent buffer was mapped"); - - return std::unique_ptr(new BufferStorageStreamBuffer(target, buffer_id, size, mapped_ptr, coherent)); - } - - private: - BufferStorageStreamBuffer(GLenum target, GLuint buffer_id, u32 size, u8* mapped_ptr, bool coherent) - : SyncingStreamBuffer(target, buffer_id, size), m_mapped_ptr(mapped_ptr), m_coherent(coherent) {} - - u8* m_mapped_ptr; - bool m_coherent; - }; - -} // namespace - -std::unique_ptr OpenGLStreamBuffer::Create(GLenum target, u32 size) { - std::unique_ptr buf; - if (GLAD_GL_VERSION_4_4 || GLAD_GL_ARB_buffer_storage || GLAD_GL_EXT_buffer_storage) { - buf = BufferStorageStreamBuffer::Create(target, size); - if (buf) return buf; - } - - // BufferSubData is slower on all drivers except NVIDIA... -#if 0 - const char* vendor = reinterpret_cast(glGetString(GL_VENDOR)); - if (std::strcmp(vendor, "ARM") == 0 || std::strcmp(vendor, "Qualcomm") == 0) { - // Mali and Adreno drivers can't do sub-buffer tracking... - return BufferDataStreamBuffer::Create(target, size); - } - - return BufferSubDataStreamBuffer::Create(target, size); -#else - return BufferDataStreamBuffer::Create(target, size); -#endif -} \ No newline at end of file diff --git a/third_party/duckstation/gl/stream_buffer.h b/third_party/duckstation/gl/stream_buffer.h deleted file mode 100644 index 6b3562e7..00000000 --- a/third_party/duckstation/gl/stream_buffer.h +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin -// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) - -#pragma once - -#include -// Comment to avoid clang-format reordering the glad header - -#include -#include -#include -#include - -#include "duckstation_compat.h" -#include "helpers.hpp" - -class OpenGLStreamBuffer { - public: - virtual ~OpenGLStreamBuffer(); - - ALWAYS_INLINE GLuint GetGLBufferId() const { return m_buffer_id; } - ALWAYS_INLINE GLenum GetGLTarget() const { return m_target; } - ALWAYS_INLINE u32 GetSize() const { return m_size; } - - void Bind(); - void Unbind(); - - void SetDebugName(std::string_view name); - - struct MappingResult { - void* pointer; - u32 buffer_offset; - u32 index_aligned; // offset / alignment, suitable for base vertex - u32 space_aligned; // remaining space / alignment - }; - - virtual MappingResult Map(u32 alignment, u32 min_size) = 0; - - /// Returns the position in the buffer *before* the start of used_size. - virtual u32 Unmap(u32 used_size) = 0; - - /// Returns the minimum granularity of blocks which sync objects will be created around. - virtual u32 GetChunkSize() const = 0; - - static std::unique_ptr Create(GLenum target, u32 size); - - protected: - OpenGLStreamBuffer(GLenum target, GLuint buffer_id, u32 size); - - GLenum m_target; - GLuint m_buffer_id; - u32 m_size; -}; \ No newline at end of file diff --git a/third_party/duckstation/gl/x11_window.cpp b/third_party/duckstation/gl/x11_window.cpp deleted file mode 100644 index 48dfe8dd..00000000 --- a/third_party/duckstation/gl/x11_window.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "x11_window.h" -#include "duckstation_log.h" -#include "duckstation_compat.h" -#include -Log_SetChannel(X11Window); - -namespace GL { -X11Window::X11Window() = default; - -X11Window::~X11Window() -{ - Destroy(); -} - -bool X11Window::Create(Display* display, Window parent_window, const XVisualInfo* vi) -{ - m_display = display; - m_parent_window = parent_window; - XSync(m_display, True); - - XWindowAttributes parent_wa = {}; - XGetWindowAttributes(m_display, m_parent_window, &parent_wa); - m_width = static_cast(parent_wa.width); - m_height = static_cast(parent_wa.height); - - // Failed X calls terminate the process so no need to check for errors. - // We could swap the error handler out here as well. - m_colormap = XCreateColormap(m_display, m_parent_window, vi->visual, AllocNone); - - XSetWindowAttributes wa = {}; - wa.colormap = m_colormap; - - m_window = XCreateWindow(m_display, m_parent_window, 0, 0, m_width, m_height, 0, vi->depth, InputOutput, vi->visual, - CWColormap, &wa); - XMapWindow(m_display, m_window); - XSync(m_display, True); - - return true; -} - -void X11Window::Destroy() -{ - if (m_window) - { - XUnmapWindow(m_display, m_window); - XDestroyWindow(m_display, m_window); - m_window = {}; - } - - if (m_colormap) - { - XFreeColormap(m_display, m_colormap); - m_colormap = {}; - } -} - -void X11Window::Resize(u32 width, u32 height) -{ - if (width != 0 && height != 0) - { - m_width = width; - m_height = height; - } - else - { - XWindowAttributes parent_wa = {}; - XGetWindowAttributes(m_display, m_parent_window, &parent_wa); - m_width = static_cast(parent_wa.width); - m_height = static_cast(parent_wa.height); - } - - XResizeWindow(m_display, m_window, m_width, m_height); -} - -static X11InhibitErrors* s_current_error_inhibiter; - -X11InhibitErrors::X11InhibitErrors() -{ - Assert(!s_current_error_inhibiter); - m_old_handler = XSetErrorHandler(ErrorHandler); - s_current_error_inhibiter = this; -} - -X11InhibitErrors::~X11InhibitErrors() -{ - Assert(s_current_error_inhibiter == this); - s_current_error_inhibiter = nullptr; - XSetErrorHandler(m_old_handler); -} - -int X11InhibitErrors::ErrorHandler(Display* display, XErrorEvent* ee) -{ - char error_string[256] = {}; - XGetErrorText(display, ee->error_code, error_string, sizeof(error_string)); - Log_WarningPrintf("X11 Error: %s (Error %u Minor %u Request %u)", error_string, ee->error_code, ee->minor_code, - ee->request_code); - - s_current_error_inhibiter->m_had_error = true; - return 0; -} -} // namespace GL diff --git a/third_party/duckstation/gl/x11_window.h b/third_party/duckstation/gl/x11_window.h deleted file mode 100644 index ff3839a6..00000000 --- a/third_party/duckstation/gl/x11_window.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once -#include "duckstation_compat.h" -#include -#include - -namespace GL { -class X11Window -{ -public: - X11Window(); - ~X11Window(); - - ALWAYS_INLINE Window GetWindow() const { return m_window; } - ALWAYS_INLINE u32 GetWidth() const { return m_width; } - ALWAYS_INLINE u32 GetHeight() const { return m_height; } - - bool Create(Display* display, Window parent_window, const XVisualInfo* vi); - void Destroy(); - - // Setting a width/height of 0 will use parent dimensions. - void Resize(u32 width = 0, u32 height = 0); - -private: - Display* m_display = nullptr; - Window m_parent_window = {}; - Window m_window = {}; - Colormap m_colormap = {}; - u32 m_width = 0; - u32 m_height = 0; -}; - -// Helper class for managing X errors -class X11InhibitErrors -{ -public: - X11InhibitErrors(); - ~X11InhibitErrors(); - - ALWAYS_INLINE bool HadError() const { return m_had_error; } - -private: - static int ErrorHandler(Display* display, XErrorEvent* ee); - - XErrorHandler m_old_handler = {}; - bool m_had_error = false; -}; - -} // namespace GL diff --git a/third_party/duckstation/window_info.cpp b/third_party/duckstation/window_info.cpp deleted file mode 100644 index 4e56ab0c..00000000 --- a/third_party/duckstation/window_info.cpp +++ /dev/null @@ -1,191 +0,0 @@ -#include "window_info.h" -#include "duckstation_log.h" -Log_SetChannel(WindowInfo); - -#if defined(_WIN32) - -#include "windows_headers.h" -#include - -static bool GetRefreshRateFromDWM(HWND hwnd, float* refresh_rate) -{ - static HMODULE dwm_module = nullptr; - static HRESULT(STDAPICALLTYPE * is_composition_enabled)(BOOL * pfEnabled) = nullptr; - static HRESULT(STDAPICALLTYPE * get_timing_info)(HWND hwnd, DWM_TIMING_INFO * pTimingInfo) = nullptr; - static bool load_tried = false; - if (!load_tried) - { - load_tried = true; - dwm_module = LoadLibraryA("dwmapi.dll"); - if (dwm_module) - { - std::atexit([]() { - FreeLibrary(dwm_module); - dwm_module = nullptr; - }); - is_composition_enabled = - reinterpret_cast(GetProcAddress(dwm_module, "DwmIsCompositionEnabled")); - get_timing_info = - reinterpret_cast(GetProcAddress(dwm_module, "DwmGetCompositionTimingInfo")); - } - } - - BOOL composition_enabled; - if (!is_composition_enabled || FAILED(is_composition_enabled(&composition_enabled) || !get_timing_info)) - return false; - - DWM_TIMING_INFO ti = {}; - ti.cbSize = sizeof(ti); - HRESULT hr = get_timing_info(nullptr, &ti); - if (SUCCEEDED(hr)) - { - if (ti.rateRefresh.uiNumerator == 0 || ti.rateRefresh.uiDenominator == 0) - return false; - - *refresh_rate = static_cast(ti.rateRefresh.uiNumerator) / static_cast(ti.rateRefresh.uiDenominator); - return true; - } - - return false; -} - -static bool GetRefreshRateFromMonitor(HWND hwnd, float* refresh_rate) -{ - HMONITOR mon = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); - if (!mon) - return false; - - MONITORINFOEXW mi = {}; - mi.cbSize = sizeof(mi); - if (GetMonitorInfoW(mon, &mi)) - { - DEVMODEW dm = {}; - dm.dmSize = sizeof(dm); - - // 0/1 are reserved for "defaults". - if (EnumDisplaySettingsW(mi.szDevice, ENUM_CURRENT_SETTINGS, &dm) && dm.dmDisplayFrequency > 1) - { - *refresh_rate = static_cast(dm.dmDisplayFrequency); - return true; - } - } - - return false; -} - -bool WindowInfo::QueryRefreshRateForWindow(const WindowInfo& wi, float* refresh_rate) -{ - if (wi.type != Type::Win32 || !wi.window_handle) - return false; - - // Try DWM first, then fall back to integer values. - const HWND hwnd = static_cast(wi.window_handle); - return GetRefreshRateFromDWM(hwnd, refresh_rate) || GetRefreshRateFromMonitor(hwnd, refresh_rate); -} - -#else - -#ifdef USE_X11 - -#include "common/scoped_guard.h" -#include "gl/x11_window.h" -#include - -static bool GetRefreshRateFromXRandR(const WindowInfo& wi, float* refresh_rate) -{ - Display* display = static_cast(wi.display_connection); - Window window = static_cast(reinterpret_cast(wi.window_handle)); - if (!display || !window) - return false; - - GL::X11InhibitErrors inhibiter; - - XRRScreenResources* res = XRRGetScreenResources(display, window); - if (!res) - { - Log_ErrorPrint("XRRGetScreenResources() failed"); - return false; - } - - ScopedGuard res_guard([res]() { XRRFreeScreenResources(res); }); - - int num_monitors; - XRRMonitorInfo* mi = XRRGetMonitors(display, window, True, &num_monitors); - if (num_monitors < 0) - { - Log_ErrorPrint("XRRGetMonitors() failed"); - return false; - } - else if (num_monitors > 1) - { - Log_WarningPrintf("XRRGetMonitors() returned %d monitors, using first", num_monitors); - } - - ScopedGuard mi_guard([mi]() { XRRFreeMonitors(mi); }); - if (mi->noutput <= 0) - { - Log_ErrorPrint("Monitor has no outputs"); - return false; - } - else if (mi->noutput > 1) - { - Log_WarningPrintf("Monitor has %d outputs, using first", mi->noutput); - } - - XRROutputInfo* oi = XRRGetOutputInfo(display, res, mi->outputs[0]); - if (!oi) - { - Log_ErrorPrint("XRRGetOutputInfo() failed"); - return false; - } - - ScopedGuard oi_guard([oi]() { XRRFreeOutputInfo(oi); }); - - XRRCrtcInfo* ci = XRRGetCrtcInfo(display, res, oi->crtc); - if (!ci) - { - Log_ErrorPrint("XRRGetCrtcInfo() failed"); - return false; - } - - ScopedGuard ci_guard([ci]() { XRRFreeCrtcInfo(ci); }); - - XRRModeInfo* mode = nullptr; - for (int i = 0; i < res->nmode; i++) - { - if (res->modes[i].id == ci->mode) - { - mode = &res->modes[i]; - break; - } - } - if (!mode) - { - Log_ErrorPrintf("Failed to look up mode %d (of %d)", static_cast(ci->mode), res->nmode); - return false; - } - - if (mode->dotClock == 0 || mode->hTotal == 0 || mode->vTotal == 0) - { - Log_ErrorPrintf("Modeline is invalid: %ld/%d/%d", mode->dotClock, mode->hTotal, mode->vTotal); - return false; - } - - *refresh_rate = - static_cast(mode->dotClock) / (static_cast(mode->hTotal) * static_cast(mode->vTotal)); - return true; -} - -#endif // USE_X11 - -bool WindowInfo::QueryRefreshRateForWindow(const WindowInfo& wi, float* refresh_rate) -{ -#if defined(USE_X11) - if (wi.type == WindowInfo::Type::X11) - return GetRefreshRateFromXRandR(wi, refresh_rate); -#endif - - return false; -} - -#endif \ No newline at end of file diff --git a/third_party/duckstation/window_info.h b/third_party/duckstation/window_info.h deleted file mode 100644 index cf9f3577..00000000 --- a/third_party/duckstation/window_info.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once -#include "helpers.hpp" - -// Contains the information required to create a graphics context in a window. -struct WindowInfo -{ - enum class Type - { - Surfaceless, - Win32, - X11, - Wayland, - MacOS, - Android, - Display, - }; - - enum class SurfaceFormat - { - None, - Auto, - RGB8, - RGBA8, - RGB565, - Count - }; - - Type type = Type::Surfaceless; - void* display_connection = nullptr; - void* window_handle = nullptr; - u32 surface_width = 0; - u32 surface_height = 0; - float surface_refresh_rate = 0.0f; - float surface_scale = 1.0f; - SurfaceFormat surface_format = SurfaceFormat::RGB8; - - // Needed for macOS. -#ifdef __APPLE__ - void* surface_handle = nullptr; -#endif - - static bool QueryRefreshRateForWindow(const WindowInfo& wi, float* refresh_rate); -}; diff --git a/third_party/duckstation/windows_headers.h b/third_party/duckstation/windows_headers.h deleted file mode 100644 index 6ff6ed30..00000000 --- a/third_party/duckstation/windows_headers.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#ifndef NOMINMAX -#define NOMINMAX 1 -#endif - -// require vista+ -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -#define _WIN32_WINNT _WIN32_WINNT_VISTA - -#include - -#if defined(CreateDirectory) -#undef CreateDirectory -#endif -#if defined(CopyFile) -#undef CopyFile -#endif -#if defined(DeleteFile) -#undef DeleteFile -#endif diff --git a/third_party/dynarmic b/third_party/dynarmic index a41c3802..96e17946 160000 --- a/third_party/dynarmic +++ b/third_party/dynarmic @@ -1 +1 @@ -Subproject commit a41c380246d3d9f9874f0f792d234dc0cc17c180 +Subproject commit 96e179465884be74987d5847d6741cdabdfe1b48 diff --git a/third_party/fdk-aac b/third_party/fdk-aac deleted file mode 160000 index 5559136b..00000000 --- a/third_party/fdk-aac +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5559136bb53ce38f6f07dac4f47674dd4f032d03 diff --git a/third_party/fmt b/third_party/fmt deleted file mode 160000 index f8581bce..00000000 --- a/third_party/fmt +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f8581bcecf317e8753887b68187c9ef1ba0524f4 diff --git a/third_party/glad/CMakeLists.txt b/third_party/glad/CMakeLists.txt index b6311342..f927f858 100644 --- a/third_party/glad/CMakeLists.txt +++ b/third_party/glad/CMakeLists.txt @@ -1,13 +1,7 @@ -set(GLAD_FILES src/gl.c include/KHR/khrplatform.h) - -if(WIN32) - set(GLAD_FILES ${GLAD_FILES} src/glad_wgl.c) -elseif(ANDROID) - set(GLAD_FILES ${GLAD_FILES} src/glad_egl.c) -elseif(NOT APPLE) - set(GLAD_FILES ${GLAD_FILES} src/glad_egl.c src/glad_glx.c) -endif() - -add_library(glad STATIC ${GLAD_FILES}) +add_library(glad STATIC + src/gl.c + include/glad/gl.h + include/KHR/khrplatform.h +) target_include_directories(glad PUBLIC "include") diff --git a/third_party/glad/include/glad/eglplatform.h b/third_party/glad/include/glad/eglplatform.h deleted file mode 100644 index 99362a23..00000000 --- a/third_party/glad/include/glad/eglplatform.h +++ /dev/null @@ -1,169 +0,0 @@ -#ifndef __eglplatform_h_ -#define __eglplatform_h_ - -/* -** Copyright 2007-2020 The Khronos Group Inc. -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* Platform-specific types and definitions for egl.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all modifications to the Khronos group so that - * they can be included in future versions of this file. Please submit changes - * by filing an issue or pull request on the public Khronos EGL Registry, at - * https://www.github.com/KhronosGroup/EGL-Registry/ - */ - -#include - -/* Macros used in EGL function prototype declarations. - * - * EGL functions should be prototyped as: - * - * EGLAPI return-type EGLAPIENTRY eglFunction(arguments); - * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments); - * - * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h - */ - -#ifndef EGLAPI -#define EGLAPI KHRONOS_APICALL -#endif - -#ifndef EGLAPIENTRY -#define EGLAPIENTRY KHRONOS_APIENTRY -#endif -#define EGLAPIENTRYP EGLAPIENTRY* - -/* The types NativeDisplayType, NativeWindowType, and NativePixmapType - * are aliases of window-system-dependent types, such as X Display * or - * Windows Device Context. They must be defined in platform-specific - * code below. The EGL-prefixed versions of Native*Type are the same - * types, renamed in EGL 1.3 so all types in the API start with "EGL". - * - * Khronos STRONGLY RECOMMENDS that you use the default definitions - * provided below, since these changes affect both binary and source - * portability of applications using EGL running on different EGL - * implementations. - */ - -#if defined(EGL_NO_PLATFORM_SPECIFIC_TYPES) - -typedef void *EGLNativeDisplayType; -typedef void *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */ -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include - -typedef HDC EGLNativeDisplayType; -typedef HBITMAP EGLNativePixmapType; -typedef HWND EGLNativeWindowType; - -#elif defined(__EMSCRIPTEN__) - -typedef int EGLNativeDisplayType; -typedef int EGLNativePixmapType; -typedef int EGLNativeWindowType; - -#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */ - -typedef int EGLNativeDisplayType; -typedef void *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(WL_EGL_PLATFORM) - -typedef struct wl_display *EGLNativeDisplayType; -typedef struct wl_egl_pixmap *EGLNativePixmapType; -typedef struct wl_egl_window *EGLNativeWindowType; - -#elif defined(__GBM__) - -typedef struct gbm_device *EGLNativeDisplayType; -typedef struct gbm_bo *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(__ANDROID__) || defined(ANDROID) - -struct ANativeWindow; -struct egl_native_pixmap_t; - -typedef void* EGLNativeDisplayType; -typedef struct egl_native_pixmap_t* EGLNativePixmapType; -typedef struct ANativeWindow* EGLNativeWindowType; - -#elif defined(USE_OZONE) - -typedef intptr_t EGLNativeDisplayType; -typedef intptr_t EGLNativePixmapType; -typedef intptr_t EGLNativeWindowType; - -#elif defined(USE_X11) - -/* X11 (tentative) */ -#include -#include - -typedef Display *EGLNativeDisplayType; -typedef Pixmap EGLNativePixmapType; -typedef Window EGLNativeWindowType; - -#elif defined(__unix__) - -typedef void *EGLNativeDisplayType; -typedef khronos_uintptr_t EGLNativePixmapType; -typedef khronos_uintptr_t EGLNativeWindowType; - -#elif defined(__APPLE__) - -typedef int EGLNativeDisplayType; -typedef void *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(__HAIKU__) - -#include - -typedef void *EGLNativeDisplayType; -typedef khronos_uintptr_t EGLNativePixmapType; -typedef khronos_uintptr_t EGLNativeWindowType; - -#elif defined(__Fuchsia__) - -typedef void *EGLNativeDisplayType; -typedef khronos_uintptr_t EGLNativePixmapType; -typedef khronos_uintptr_t EGLNativeWindowType; - -#else -#error "Platform not recognized" -#endif - -/* EGL 1.2 types, renamed for consistency in EGL 1.3 */ -typedef EGLNativeDisplayType NativeDisplayType; -typedef EGLNativePixmapType NativePixmapType; -typedef EGLNativeWindowType NativeWindowType; - - -/* Define EGLint. This must be a signed integral type large enough to contain - * all legal attribute names and values passed into and out of EGL, whether - * their type is boolean, bitmask, enumerant (symbolic constant), integer, - * handle, or other. While in general a 32-bit integer will suffice, if - * handles are 64 bit types, then EGLint should be defined as a signed 64-bit - * integer type. - */ -typedef khronos_int32_t EGLint; - - -/* C++ / C typecast macros for special EGL handle values */ -#if defined(__cplusplus) -#define EGL_CAST(type, value) (static_cast(value)) -#else -#define EGL_CAST(type, value) ((type) (value)) -#endif - -#endif /* __eglplatform_h */ diff --git a/third_party/glad/include/glad/gl.h b/third_party/glad/include/glad/gl.h index 2ad648f1..d8be6a42 100644 --- a/third_party/glad/include/glad/gl.h +++ b/third_party/glad/include/glad/gl.h @@ -1,941 +1,4694 @@ -/* +/** + * Loader generated by glad 2.0.4 on - + * + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + * + * Generator: C/C++ + * Specification: gl + * Extensions: 617 + * + * APIs: + * - gl:core=4.3 + * + * Options: + * - ALIAS = False + * - DEBUG = False + * - HEADER_ONLY = False + * - LOADER = True + * - MX = False + * - ON_DEMAND = False + * + * Commandline: + * --api='gl:core=4.3' --extensions='GL_3DFX_multisample,GL_3DFX_tbuffer,GL_3DFX_texture_compression_FXT1,GL_AMD_blend_minmax_factor,GL_AMD_conservative_depth,GL_AMD_debug_output,GL_AMD_depth_clamp_separate,GL_AMD_draw_buffers_blend,GL_AMD_framebuffer_multisample_advanced,GL_AMD_framebuffer_sample_positions,GL_AMD_gcn_shader,GL_AMD_gpu_shader_half_float,GL_AMD_gpu_shader_int16,GL_AMD_gpu_shader_int64,GL_AMD_interleaved_elements,GL_AMD_multi_draw_indirect,GL_AMD_name_gen_delete,GL_AMD_occlusion_query_event,GL_AMD_performance_monitor,GL_AMD_pinned_memory,GL_AMD_query_buffer_object,GL_AMD_sample_positions,GL_AMD_seamless_cubemap_per_texture,GL_AMD_shader_atomic_counter_ops,GL_AMD_shader_ballot,GL_AMD_shader_explicit_vertex_parameter,GL_AMD_shader_gpu_shader_half_float_fetch,GL_AMD_shader_image_load_store_lod,GL_AMD_shader_stencil_export,GL_AMD_shader_trinary_minmax,GL_AMD_sparse_texture,GL_AMD_stencil_operation_extended,GL_AMD_texture_gather_bias_lod,GL_AMD_texture_texture4,GL_AMD_transform_feedback3_lines_triangles,GL_AMD_transform_feedback4,GL_AMD_vertex_shader_layer,GL_AMD_vertex_shader_tessellator,GL_AMD_vertex_shader_viewport_index,GL_APPLE_aux_depth_stencil,GL_APPLE_client_storage,GL_APPLE_element_array,GL_APPLE_fence,GL_APPLE_float_pixels,GL_APPLE_flush_buffer_range,GL_APPLE_object_purgeable,GL_APPLE_rgb_422,GL_APPLE_row_bytes,GL_APPLE_specular_vector,GL_APPLE_texture_range,GL_APPLE_transform_hint,GL_APPLE_vertex_array_object,GL_APPLE_vertex_array_range,GL_APPLE_vertex_program_evaluators,GL_APPLE_ycbcr_422,GL_ARB_ES2_compatibility,GL_ARB_ES3_1_compatibility,GL_ARB_ES3_2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_arrays_of_arrays,GL_ARB_base_instance,GL_ARB_bindless_texture,GL_ARB_blend_func_extended,GL_ARB_buffer_storage,GL_ARB_cl_event,GL_ARB_clear_buffer_object,GL_ARB_clear_texture,GL_ARB_clip_control,GL_ARB_color_buffer_float,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_compute_shader,GL_ARB_compute_variable_group_size,GL_ARB_conditional_render_inverted,GL_ARB_conservative_depth,GL_ARB_copy_buffer,GL_ARB_copy_image,GL_ARB_cull_distance,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_derivative_control,GL_ARB_direct_state_access,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_draw_elements_base_vertex,GL_ARB_draw_indirect,GL_ARB_draw_instanced,GL_ARB_enhanced_layouts,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_coord_conventions,GL_ARB_fragment_layer_viewport,GL_ARB_fragment_program,GL_ARB_fragment_program_shadow,GL_ARB_fragment_shader,GL_ARB_fragment_shader_interlock,GL_ARB_framebuffer_no_attachments,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_geometry_shader4,GL_ARB_get_program_binary,GL_ARB_get_texture_sub_image,GL_ARB_gl_spirv,GL_ARB_gpu_shader5,GL_ARB_gpu_shader_fp64,GL_ARB_gpu_shader_int64,GL_ARB_half_float_pixel,GL_ARB_half_float_vertex,GL_ARB_imaging,GL_ARB_indirect_parameters,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_map_buffer_alignment,GL_ARB_map_buffer_range,GL_ARB_matrix_palette,GL_ARB_multi_bind,GL_ARB_multi_draw_indirect,GL_ARB_multisample,GL_ARB_multitexture,GL_ARB_occlusion_query,GL_ARB_occlusion_query2,GL_ARB_parallel_shader_compile,GL_ARB_pipeline_statistics_query,GL_ARB_pixel_buffer_object,GL_ARB_point_parameters,GL_ARB_point_sprite,GL_ARB_polygon_offset_clamp,GL_ARB_post_depth_coverage,GL_ARB_program_interface_query,GL_ARB_provoking_vertex,GL_ARB_query_buffer_object,GL_ARB_robust_buffer_access_behavior,GL_ARB_robustness,GL_ARB_robustness_isolation,GL_ARB_sample_locations,GL_ARB_sample_shading,GL_ARB_sampler_objects,GL_ARB_seamless_cube_map,GL_ARB_seamless_cubemap_per_texture,GL_ARB_separate_shader_objects,GL_ARB_shader_atomic_counter_ops,GL_ARB_shader_atomic_counters,GL_ARB_shader_ballot,GL_ARB_shader_bit_encoding,GL_ARB_shader_clock,GL_ARB_shader_draw_parameters,GL_ARB_shader_group_vote,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_precision,GL_ARB_shader_stencil_export,GL_ARB_shader_storage_buffer_object,GL_ARB_shader_subroutine,GL_ARB_shader_texture_image_samples,GL_ARB_shader_texture_lod,GL_ARB_shader_viewport_layer_array,GL_ARB_shading_language_100,GL_ARB_shading_language_420pack,GL_ARB_shading_language_include,GL_ARB_shading_language_packing,GL_ARB_shadow,GL_ARB_shadow_ambient,GL_ARB_sparse_buffer,GL_ARB_sparse_texture,GL_ARB_sparse_texture2,GL_ARB_sparse_texture_clamp,GL_ARB_spirv_extensions,GL_ARB_stencil_texturing,GL_ARB_sync,GL_ARB_tessellation_shader,GL_ARB_texture_barrier,GL_ARB_texture_border_clamp,GL_ARB_texture_buffer_object,GL_ARB_texture_buffer_object_rgb32,GL_ARB_texture_buffer_range,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_cube_map_array,GL_ARB_texture_env_add,GL_ARB_texture_env_combine,GL_ARB_texture_env_crossbar,GL_ARB_texture_env_dot3,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_filter_minmax,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_mirror_clamp_to_edge,GL_ARB_texture_mirrored_repeat,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_query_levels,GL_ARB_texture_query_lod,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_texture_stencil8,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_ARB_texture_swizzle,GL_ARB_texture_view,GL_ARB_timer_query,GL_ARB_transform_feedback2,GL_ARB_transform_feedback3,GL_ARB_transform_feedback_instanced,GL_ARB_transform_feedback_overflow_query,GL_ARB_transpose_matrix,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_bgra,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_64bit,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_blend,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_10f_11f_11f_rev,GL_ARB_vertex_type_2_10_10_10_rev,GL_ARB_viewport_array,GL_ARB_window_pos,GL_ATI_draw_buffers,GL_ATI_element_array,GL_ATI_envmap_bumpmap,GL_ATI_fragment_shader,GL_ATI_map_object_buffer,GL_ATI_meminfo,GL_ATI_pixel_format_float,GL_ATI_pn_triangles,GL_ATI_separate_stencil,GL_ATI_text_fragment_shader,GL_ATI_texture_env_combine3,GL_ATI_texture_float,GL_ATI_texture_mirror_once,GL_ATI_vertex_array_object,GL_ATI_vertex_attrib_array_object,GL_ATI_vertex_streams,GL_EXT_422_pixels,GL_EXT_EGL_image_storage,GL_EXT_EGL_sync,GL_EXT_abgr,GL_EXT_bgra,GL_EXT_bindable_uniform,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_separate,GL_EXT_blend_logic_op,GL_EXT_blend_minmax,GL_EXT_blend_subtract,GL_EXT_clip_volume_hint,GL_EXT_cmyka,GL_EXT_color_subtable,GL_EXT_compiled_vertex_array,GL_EXT_convolution,GL_EXT_coordinate_frame,GL_EXT_copy_texture,GL_EXT_cull_vertex,GL_EXT_debug_label,GL_EXT_debug_marker,GL_EXT_depth_bounds_test,GL_EXT_direct_state_access,GL_EXT_draw_buffers2,GL_EXT_draw_instanced,GL_EXT_draw_range_elements,GL_EXT_external_buffer,GL_EXT_fog_coord,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_shader4,GL_EXT_gpu_program_parameters,GL_EXT_gpu_shader4,GL_EXT_histogram,GL_EXT_index_array_formats,GL_EXT_index_func,GL_EXT_index_material,GL_EXT_index_texture,GL_EXT_light_texture,GL_EXT_memory_object,GL_EXT_memory_object_fd,GL_EXT_memory_object_win32,GL_EXT_misc_attribute,GL_EXT_multi_draw_arrays,GL_EXT_multisample,GL_EXT_multiview_tessellation_geometry_shader,GL_EXT_multiview_texture_multisample,GL_EXT_multiview_timer_query,GL_EXT_packed_depth_stencil,GL_EXT_packed_float,GL_EXT_packed_pixels,GL_EXT_paletted_texture,GL_EXT_pixel_buffer_object,GL_EXT_pixel_transform,GL_EXT_pixel_transform_color_table,GL_EXT_point_parameters,GL_EXT_polygon_offset,GL_EXT_polygon_offset_clamp,GL_EXT_post_depth_coverage,GL_EXT_provoking_vertex,GL_EXT_raster_multisample,GL_EXT_rescale_normal,GL_EXT_secondary_color,GL_EXT_semaphore,GL_EXT_semaphore_fd,GL_EXT_semaphore_win32,GL_EXT_separate_shader_objects,GL_EXT_separate_specular_color,GL_EXT_shader_framebuffer_fetch,GL_EXT_shader_framebuffer_fetch_non_coherent,GL_EXT_shader_image_load_formatted,GL_EXT_shader_image_load_store,GL_EXT_shader_integer_mix,GL_EXT_shader_samples_identical,GL_EXT_shadow_funcs,GL_EXT_shared_texture_palette,GL_EXT_sparse_texture2,GL_EXT_stencil_clear_tag,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_subtexture,GL_EXT_texture,GL_EXT_texture3D,GL_EXT_texture_array,GL_EXT_texture_buffer_object,GL_EXT_texture_compression_latc,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_cube_map,GL_EXT_texture_env_add,GL_EXT_texture_env_combine,GL_EXT_texture_env_dot3,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_filter_minmax,GL_EXT_texture_integer,GL_EXT_texture_lod_bias,GL_EXT_texture_mirror_clamp,GL_EXT_texture_object,GL_EXT_texture_perturb_normal,GL_EXT_texture_sRGB,GL_EXT_texture_sRGB_R8,GL_EXT_texture_sRGB_RG8,GL_EXT_texture_sRGB_decode,GL_EXT_texture_shadow_lod,GL_EXT_texture_shared_exponent,GL_EXT_texture_snorm,GL_EXT_texture_storage,GL_EXT_texture_swizzle,GL_EXT_timer_query,GL_EXT_transform_feedback,GL_EXT_vertex_array,GL_EXT_vertex_array_bgra,GL_EXT_vertex_attrib_64bit,GL_EXT_vertex_shader,GL_EXT_vertex_weighting,GL_EXT_win32_keyed_mutex,GL_EXT_window_rectangles,GL_EXT_x11_sync_object,GL_GREMEDY_frame_terminator,GL_GREMEDY_string_marker,GL_HP_convolution_border_modes,GL_HP_image_transform,GL_HP_occlusion_test,GL_HP_texture_lighting,GL_IBM_cull_vertex,GL_IBM_multimode_draw_arrays,GL_IBM_rasterpos_clip,GL_IBM_static_data,GL_IBM_texture_mirrored_repeat,GL_IBM_vertex_array_lists,GL_INGR_blend_func_separate,GL_INGR_color_clamp,GL_INGR_interlace_read,GL_INTEL_blackhole_render,GL_INTEL_conservative_rasterization,GL_INTEL_fragment_shader_ordering,GL_INTEL_framebuffer_CMAA,GL_INTEL_map_texture,GL_INTEL_parallel_arrays,GL_INTEL_performance_query,GL_KHR_blend_equation_advanced,GL_KHR_blend_equation_advanced_coherent,GL_KHR_context_flush_control,GL_KHR_debug,GL_KHR_no_error,GL_KHR_parallel_shader_compile,GL_KHR_robust_buffer_access_behavior,GL_KHR_robustness,GL_KHR_shader_subgroup,GL_KHR_texture_compression_astc_hdr,GL_KHR_texture_compression_astc_ldr,GL_KHR_texture_compression_astc_sliced_3d,GL_MESAX_texture_stack,GL_MESA_framebuffer_flip_x,GL_MESA_framebuffer_flip_y,GL_MESA_framebuffer_swap_xy,GL_MESA_pack_invert,GL_MESA_program_binary_formats,GL_MESA_resize_buffers,GL_MESA_shader_integer_functions,GL_MESA_tile_raster_order,GL_MESA_window_pos,GL_MESA_ycbcr_texture,GL_NVX_blend_equation_advanced_multi_draw_buffers,GL_NVX_conditional_render,GL_NVX_gpu_memory_info,GL_NVX_gpu_multicast2,GL_NVX_linked_gpu_multicast,GL_NVX_progress_fence,GL_NV_alpha_to_coverage_dither_control,GL_NV_bindless_multi_draw_indirect,GL_NV_bindless_multi_draw_indirect_count,GL_NV_bindless_texture,GL_NV_blend_equation_advanced,GL_NV_blend_equation_advanced_coherent,GL_NV_blend_minmax_factor,GL_NV_blend_square,GL_NV_clip_space_w_scaling,GL_NV_command_list,GL_NV_compute_program5,GL_NV_compute_shader_derivatives,GL_NV_conditional_render,GL_NV_conservative_raster,GL_NV_conservative_raster_dilate,GL_NV_conservative_raster_pre_snap,GL_NV_conservative_raster_pre_snap_triangles,GL_NV_conservative_raster_underestimation,GL_NV_copy_depth_to_color,GL_NV_copy_image,GL_NV_deep_texture3D,GL_NV_depth_buffer_float,GL_NV_depth_clamp,GL_NV_draw_texture,GL_NV_draw_vulkan_image,GL_NV_evaluators,GL_NV_explicit_multisample,GL_NV_fence,GL_NV_fill_rectangle,GL_NV_float_buffer,GL_NV_fog_distance,GL_NV_fragment_coverage_to_color,GL_NV_fragment_program,GL_NV_fragment_program2,GL_NV_fragment_program4,GL_NV_fragment_program_option,GL_NV_fragment_shader_barycentric,GL_NV_fragment_shader_interlock,GL_NV_framebuffer_mixed_samples,GL_NV_framebuffer_multisample_coverage,GL_NV_geometry_program4,GL_NV_geometry_shader4,GL_NV_geometry_shader_passthrough,GL_NV_gpu_multicast,GL_NV_gpu_program4,GL_NV_gpu_program5,GL_NV_gpu_program5_mem_extended,GL_NV_gpu_shader5,GL_NV_half_float,GL_NV_internalformat_sample_query,GL_NV_light_max_exponent,GL_NV_memory_attachment,GL_NV_memory_object_sparse,GL_NV_mesh_shader,GL_NV_multisample_coverage,GL_NV_multisample_filter_hint,GL_NV_occlusion_query,GL_NV_packed_depth_stencil,GL_NV_parameter_buffer_object,GL_NV_parameter_buffer_object2,GL_NV_path_rendering,GL_NV_path_rendering_shared_edge,GL_NV_pixel_data_range,GL_NV_point_sprite,GL_NV_present_video,GL_NV_primitive_restart,GL_NV_primitive_shading_rate,GL_NV_query_resource,GL_NV_query_resource_tag,GL_NV_register_combiners,GL_NV_register_combiners2,GL_NV_representative_fragment_test,GL_NV_robustness_video_memory_purge,GL_NV_sample_locations,GL_NV_sample_mask_override_coverage,GL_NV_scissor_exclusive,GL_NV_shader_atomic_counters,GL_NV_shader_atomic_float,GL_NV_shader_atomic_float64,GL_NV_shader_atomic_fp16_vector,GL_NV_shader_atomic_int64,GL_NV_shader_buffer_load,GL_NV_shader_buffer_store,GL_NV_shader_storage_buffer_object,GL_NV_shader_subgroup_partitioned,GL_NV_shader_texture_footprint,GL_NV_shader_thread_group,GL_NV_shader_thread_shuffle,GL_NV_shading_rate_image,GL_NV_stereo_view_rendering,GL_NV_tessellation_program5,GL_NV_texgen_emboss,GL_NV_texgen_reflection,GL_NV_texture_barrier,GL_NV_texture_compression_vtc,GL_NV_texture_env_combine4,GL_NV_texture_expand_normal,GL_NV_texture_multisample,GL_NV_texture_rectangle,GL_NV_texture_rectangle_compressed,GL_NV_texture_shader,GL_NV_texture_shader2,GL_NV_texture_shader3,GL_NV_timeline_semaphore,GL_NV_transform_feedback,GL_NV_transform_feedback2,GL_NV_uniform_buffer_unified_memory,GL_NV_vdpau_interop,GL_NV_vdpau_interop2,GL_NV_vertex_array_range,GL_NV_vertex_array_range2,GL_NV_vertex_attrib_integer_64bit,GL_NV_vertex_buffer_unified_memory,GL_NV_vertex_program,GL_NV_vertex_program1_1,GL_NV_vertex_program2,GL_NV_vertex_program2_option,GL_NV_vertex_program3,GL_NV_vertex_program4,GL_NV_video_capture,GL_NV_viewport_array2,GL_NV_viewport_swizzle,GL_OES_byte_coordinates,GL_OES_compressed_paletted_texture,GL_OES_fixed_point,GL_OES_query_matrix,GL_OES_read_format,GL_OES_single_precision,GL_OML_interlace,GL_OML_resample,GL_OML_subsample,GL_OVR_multiview,GL_OVR_multiview2,GL_PGI_misc_hints,GL_PGI_vertex_hints,GL_REND_screen_coordinates,GL_S3_s3tc,GL_SGIS_detail_texture,GL_SGIS_fog_function,GL_SGIS_generate_mipmap,GL_SGIS_multisample,GL_SGIS_pixel_texture,GL_SGIS_point_line_texgen,GL_SGIS_point_parameters,GL_SGIS_sharpen_texture,GL_SGIS_texture4D,GL_SGIS_texture_border_clamp,GL_SGIS_texture_color_mask,GL_SGIS_texture_edge_clamp,GL_SGIS_texture_filter4,GL_SGIS_texture_lod,GL_SGIS_texture_select,GL_SGIX_async,GL_SGIX_async_histogram,GL_SGIX_async_pixel,GL_SGIX_blend_alpha_minmax,GL_SGIX_calligraphic_fragment,GL_SGIX_clipmap,GL_SGIX_convolution_accuracy,GL_SGIX_depth_pass_instrument,GL_SGIX_depth_texture,GL_SGIX_flush_raster,GL_SGIX_fog_offset,GL_SGIX_fragment_lighting,GL_SGIX_framezoom,GL_SGIX_igloo_interface,GL_SGIX_instruments,GL_SGIX_interlace,GL_SGIX_ir_instrument1,GL_SGIX_list_priority,GL_SGIX_pixel_texture,GL_SGIX_pixel_tiles,GL_SGIX_polynomial_ffd,GL_SGIX_reference_plane,GL_SGIX_resample,GL_SGIX_scalebias_hint,GL_SGIX_shadow,GL_SGIX_shadow_ambient,GL_SGIX_sprite,GL_SGIX_subsample,GL_SGIX_tag_sample_buffer,GL_SGIX_texture_add_env,GL_SGIX_texture_coordinate_clamp,GL_SGIX_texture_lod_bias,GL_SGIX_texture_multi_buffer,GL_SGIX_texture_scale_bias,GL_SGIX_vertex_preclip,GL_SGIX_ycrcb,GL_SGIX_ycrcb_subsample,GL_SGIX_ycrcba,GL_SGI_color_matrix,GL_SGI_color_table,GL_SGI_texture_color_table,GL_SUNX_constant_data,GL_SUN_convolution_border_modes,GL_SUN_global_alpha,GL_SUN_mesh_array,GL_SUN_slice_accum,GL_SUN_triangle_list,GL_SUN_vertex,GL_WIN_phong_shading,GL_WIN_specular_fog' c --loader + * + * Online: + * http://glad.sh/#api=gl%3Acore%3D4.3&generator=c&options=LOADER + * + */ - OpenGL, OpenGL ES loader generated by glad 0.1.25 on Fri Jul 20 15:42:19 2018. - - Language/Generator: C/C++ - Specification: gl - APIs: gl=4.6, gles2=3.2 - Profile: core - Extensions: - GL_3DFX_multisample, - GL_3DFX_tbuffer, - GL_3DFX_texture_compression_FXT1, - GL_AMD_blend_minmax_factor, - GL_AMD_compressed_3DC_texture, - GL_AMD_compressed_ATC_texture, - GL_AMD_conservative_depth, - GL_AMD_debug_output, - GL_AMD_depth_clamp_separate, - GL_AMD_draw_buffers_blend, - GL_AMD_framebuffer_sample_positions, - GL_AMD_gcn_shader, - GL_AMD_gpu_shader_half_float, - GL_AMD_gpu_shader_int16, - GL_AMD_gpu_shader_int64, - GL_AMD_interleaved_elements, - GL_AMD_multi_draw_indirect, - GL_AMD_name_gen_delete, - GL_AMD_occlusion_query_event, - GL_AMD_performance_monitor, - GL_AMD_pinned_memory, - GL_AMD_program_binary_Z400, - GL_AMD_query_buffer_object, - GL_AMD_sample_positions, - GL_AMD_seamless_cubemap_per_texture, - GL_AMD_shader_atomic_counter_ops, - GL_AMD_shader_ballot, - GL_AMD_shader_explicit_vertex_parameter, - GL_AMD_shader_gpu_shader_half_float_fetch, - GL_AMD_shader_image_load_store_lod, - GL_AMD_shader_stencil_export, - GL_AMD_shader_trinary_minmax, - GL_AMD_sparse_texture, - GL_AMD_stencil_operation_extended, - GL_AMD_texture_gather_bias_lod, - GL_AMD_texture_texture4, - GL_AMD_transform_feedback3_lines_triangles, - GL_AMD_transform_feedback4, - GL_AMD_vertex_shader_layer, - GL_AMD_vertex_shader_tessellator, - GL_AMD_vertex_shader_viewport_index, - GL_ANDROID_extension_pack_es31a, - GL_ANGLE_depth_texture, - GL_ANGLE_framebuffer_blit, - GL_ANGLE_framebuffer_multisample, - GL_ANGLE_instanced_arrays, - GL_ANGLE_pack_reverse_row_order, - GL_ANGLE_program_binary, - GL_ANGLE_texture_compression_dxt3, - GL_ANGLE_texture_compression_dxt5, - GL_ANGLE_texture_usage, - GL_ANGLE_translated_shader_source, - GL_APPLE_aux_depth_stencil, - GL_APPLE_client_storage, - GL_APPLE_clip_distance, - GL_APPLE_color_buffer_packed_float, - GL_APPLE_copy_texture_levels, - GL_APPLE_element_array, - GL_APPLE_fence, - GL_APPLE_float_pixels, - GL_APPLE_flush_buffer_range, - GL_APPLE_framebuffer_multisample, - GL_APPLE_object_purgeable, - GL_APPLE_rgb_422, - GL_APPLE_row_bytes, - GL_APPLE_specular_vector, - GL_APPLE_sync, - GL_APPLE_texture_format_BGRA8888, - GL_APPLE_texture_max_level, - GL_APPLE_texture_packed_float, - GL_APPLE_texture_range, - GL_APPLE_transform_hint, - GL_APPLE_vertex_array_object, - GL_APPLE_vertex_array_range, - GL_APPLE_vertex_program_evaluators, - GL_APPLE_ycbcr_422, - GL_ARB_ES2_compatibility, - GL_ARB_ES3_1_compatibility, - GL_ARB_ES3_2_compatibility, - GL_ARB_ES3_compatibility, - GL_ARB_arrays_of_arrays, - GL_ARB_base_instance, - GL_ARB_bindless_texture, - GL_ARB_blend_func_extended, - GL_ARB_buffer_storage, - GL_ARB_cl_event, - GL_ARB_clear_buffer_object, - GL_ARB_clear_texture, - GL_ARB_clip_control, - GL_ARB_color_buffer_float, - GL_ARB_compatibility, - GL_ARB_compressed_texture_pixel_storage, - GL_ARB_compute_shader, - GL_ARB_compute_variable_group_size, - GL_ARB_conditional_render_inverted, - GL_ARB_conservative_depth, - GL_ARB_copy_buffer, - GL_ARB_copy_image, - GL_ARB_cull_distance, - GL_ARB_debug_output, - GL_ARB_depth_buffer_float, - GL_ARB_depth_clamp, - GL_ARB_depth_texture, - GL_ARB_derivative_control, - GL_ARB_direct_state_access, - GL_ARB_draw_buffers, - GL_ARB_draw_buffers_blend, - GL_ARB_draw_elements_base_vertex, - GL_ARB_draw_indirect, - GL_ARB_draw_instanced, - GL_ARB_enhanced_layouts, - GL_ARB_explicit_attrib_location, - GL_ARB_explicit_uniform_location, - GL_ARB_fragment_coord_conventions, - GL_ARB_fragment_layer_viewport, - GL_ARB_fragment_program, - GL_ARB_fragment_program_shadow, - GL_ARB_fragment_shader, - GL_ARB_fragment_shader_interlock, - GL_ARB_framebuffer_no_attachments, - GL_ARB_framebuffer_object, - GL_ARB_framebuffer_sRGB, - GL_ARB_geometry_shader4, - GL_ARB_get_program_binary, - GL_ARB_get_texture_sub_image, - GL_ARB_gl_spirv, - GL_ARB_gpu_shader5, - GL_ARB_gpu_shader_fp64, - GL_ARB_gpu_shader_int64, - GL_ARB_half_float_pixel, - GL_ARB_half_float_vertex, - GL_ARB_imaging, - GL_ARB_indirect_parameters, - GL_ARB_instanced_arrays, - GL_ARB_internalformat_query, - GL_ARB_internalformat_query2, - GL_ARB_invalidate_subdata, - GL_ARB_map_buffer_alignment, - GL_ARB_map_buffer_range, - GL_ARB_matrix_palette, - GL_ARB_multi_bind, - GL_ARB_multi_draw_indirect, - GL_ARB_multisample, - GL_ARB_multitexture, - GL_ARB_occlusion_query, - GL_ARB_occlusion_query2, - GL_ARB_parallel_shader_compile, - GL_ARB_pipeline_statistics_query, - GL_ARB_pixel_buffer_object, - GL_ARB_point_parameters, - GL_ARB_point_sprite, - GL_ARB_polygon_offset_clamp, - GL_ARB_post_depth_coverage, - GL_ARB_program_interface_query, - GL_ARB_provoking_vertex, - GL_ARB_query_buffer_object, - GL_ARB_robust_buffer_access_behavior, - GL_ARB_robustness, - GL_ARB_robustness_isolation, - GL_ARB_sample_locations, - GL_ARB_sample_shading, - GL_ARB_sampler_objects, - GL_ARB_seamless_cube_map, - GL_ARB_seamless_cubemap_per_texture, - GL_ARB_separate_shader_objects, - GL_ARB_shader_atomic_counter_ops, - GL_ARB_shader_atomic_counters, - GL_ARB_shader_ballot, - GL_ARB_shader_bit_encoding, - GL_ARB_shader_clock, - GL_ARB_shader_draw_parameters, - GL_ARB_shader_group_vote, - GL_ARB_shader_image_load_store, - GL_ARB_shader_image_size, - GL_ARB_shader_objects, - GL_ARB_shader_precision, - GL_ARB_shader_stencil_export, - GL_ARB_shader_storage_buffer_object, - GL_ARB_shader_subroutine, - GL_ARB_shader_texture_image_samples, - GL_ARB_shader_texture_lod, - GL_ARB_shader_viewport_layer_array, - GL_ARB_shading_language_100, - GL_ARB_shading_language_420pack, - GL_ARB_shading_language_include, - GL_ARB_shading_language_packing, - GL_ARB_shadow, - GL_ARB_shadow_ambient, - GL_ARB_sparse_buffer, - GL_ARB_sparse_texture, - GL_ARB_sparse_texture2, - GL_ARB_sparse_texture_clamp, - GL_ARB_spirv_extensions, - GL_ARB_stencil_texturing, - GL_ARB_sync, - GL_ARB_tessellation_shader, - GL_ARB_texture_barrier, - GL_ARB_texture_border_clamp, - GL_ARB_texture_buffer_object, - GL_ARB_texture_buffer_object_rgb32, - GL_ARB_texture_buffer_range, - GL_ARB_texture_compression, - GL_ARB_texture_compression_bptc, - GL_ARB_texture_compression_rgtc, - GL_ARB_texture_cube_map, - GL_ARB_texture_cube_map_array, - GL_ARB_texture_env_add, - GL_ARB_texture_env_combine, - GL_ARB_texture_env_crossbar, - GL_ARB_texture_env_dot3, - GL_ARB_texture_filter_anisotropic, - GL_ARB_texture_filter_minmax, - GL_ARB_texture_float, - GL_ARB_texture_gather, - GL_ARB_texture_mirror_clamp_to_edge, - GL_ARB_texture_mirrored_repeat, - GL_ARB_texture_multisample, - GL_ARB_texture_non_power_of_two, - GL_ARB_texture_query_levels, - GL_ARB_texture_query_lod, - GL_ARB_texture_rectangle, - GL_ARB_texture_rg, - GL_ARB_texture_rgb10_a2ui, - GL_ARB_texture_stencil8, - GL_ARB_texture_storage, - GL_ARB_texture_storage_multisample, - GL_ARB_texture_swizzle, - GL_ARB_texture_view, - GL_ARB_timer_query, - GL_ARB_transform_feedback2, - GL_ARB_transform_feedback3, - GL_ARB_transform_feedback_instanced, - GL_ARB_transform_feedback_overflow_query, - GL_ARB_transpose_matrix, - GL_ARB_uniform_buffer_object, - GL_ARB_vertex_array_bgra, - GL_ARB_vertex_array_object, - GL_ARB_vertex_attrib_64bit, - GL_ARB_vertex_attrib_binding, - GL_ARB_vertex_blend, - GL_ARB_vertex_buffer_object, - GL_ARB_vertex_program, - GL_ARB_vertex_shader, - GL_ARB_vertex_type_10f_11f_11f_rev, - GL_ARB_vertex_type_2_10_10_10_rev, - GL_ARB_viewport_array, - GL_ARB_window_pos, - GL_ARM_mali_program_binary, - GL_ARM_mali_shader_binary, - GL_ARM_rgba8, - GL_ARM_shader_framebuffer_fetch, - GL_ARM_shader_framebuffer_fetch_depth_stencil, - GL_ATI_draw_buffers, - GL_ATI_element_array, - GL_ATI_envmap_bumpmap, - GL_ATI_fragment_shader, - GL_ATI_map_object_buffer, - GL_ATI_meminfo, - GL_ATI_pixel_format_float, - GL_ATI_pn_triangles, - GL_ATI_separate_stencil, - GL_ATI_text_fragment_shader, - GL_ATI_texture_env_combine3, - GL_ATI_texture_float, - GL_ATI_texture_mirror_once, - GL_ATI_vertex_array_object, - GL_ATI_vertex_attrib_array_object, - GL_ATI_vertex_streams, - GL_DMP_program_binary, - GL_DMP_shader_binary, - GL_EXT_422_pixels, - GL_EXT_EGL_image_array, - GL_EXT_EGL_image_storage, - GL_EXT_YUV_target, - GL_EXT_abgr, - GL_EXT_base_instance, - GL_EXT_bgra, - GL_EXT_bindable_uniform, - GL_EXT_blend_color, - GL_EXT_blend_equation_separate, - GL_EXT_blend_func_extended, - GL_EXT_blend_func_separate, - GL_EXT_blend_logic_op, - GL_EXT_blend_minmax, - GL_EXT_blend_subtract, - GL_EXT_buffer_storage, - GL_EXT_clear_texture, - GL_EXT_clip_control, - GL_EXT_clip_cull_distance, - GL_EXT_clip_volume_hint, - GL_EXT_cmyka, - GL_EXT_color_buffer_float, - GL_EXT_color_buffer_half_float, - GL_EXT_color_subtable, - GL_EXT_compiled_vertex_array, - GL_EXT_conservative_depth, - GL_EXT_convolution, - GL_EXT_coordinate_frame, - GL_EXT_copy_image, - GL_EXT_copy_texture, - GL_EXT_cull_vertex, - GL_EXT_debug_label, - GL_EXT_debug_marker, - GL_EXT_depth_bounds_test, - GL_EXT_direct_state_access, - GL_EXT_discard_framebuffer, - GL_EXT_disjoint_timer_query, - GL_EXT_draw_buffers, - GL_EXT_draw_buffers2, - GL_EXT_draw_buffers_indexed, - GL_EXT_draw_elements_base_vertex, - GL_EXT_draw_instanced, - GL_EXT_draw_range_elements, - GL_EXT_draw_transform_feedback, - GL_EXT_external_buffer, - GL_EXT_float_blend, - GL_EXT_fog_coord, - GL_EXT_framebuffer_blit, - GL_EXT_framebuffer_multisample, - GL_EXT_framebuffer_multisample_blit_scaled, - GL_EXT_framebuffer_object, - GL_EXT_framebuffer_sRGB, - GL_EXT_geometry_point_size, - GL_EXT_geometry_shader, - GL_EXT_geometry_shader4, - GL_EXT_gpu_program_parameters, - GL_EXT_gpu_shader4, - GL_EXT_gpu_shader5, - GL_EXT_histogram, - GL_EXT_index_array_formats, - GL_EXT_index_func, - GL_EXT_index_material, - GL_EXT_index_texture, - GL_EXT_instanced_arrays, - GL_EXT_light_texture, - GL_EXT_map_buffer_range, - GL_EXT_memory_object, - GL_EXT_memory_object_fd, - GL_EXT_memory_object_win32, - GL_EXT_misc_attribute, - GL_EXT_multi_draw_arrays, - GL_EXT_multi_draw_indirect, - GL_EXT_multisample, - GL_EXT_multisampled_compatibility, - GL_EXT_multisampled_render_to_texture, - GL_EXT_multiview_draw_buffers, - GL_EXT_occlusion_query_boolean, - GL_EXT_packed_depth_stencil, - GL_EXT_packed_float, - GL_EXT_packed_pixels, - GL_EXT_paletted_texture, - GL_EXT_pixel_buffer_object, - GL_EXT_pixel_transform, - GL_EXT_pixel_transform_color_table, - GL_EXT_point_parameters, - GL_EXT_polygon_offset, - GL_EXT_polygon_offset_clamp, - GL_EXT_post_depth_coverage, - GL_EXT_primitive_bounding_box, - GL_EXT_protected_textures, - GL_EXT_provoking_vertex, - GL_EXT_pvrtc_sRGB, - GL_EXT_raster_multisample, - GL_EXT_read_format_bgra, - GL_EXT_render_snorm, - GL_EXT_rescale_normal, - GL_EXT_robustness, - GL_EXT_sRGB, - GL_EXT_sRGB_write_control, - GL_EXT_secondary_color, - GL_EXT_semaphore, - GL_EXT_semaphore_fd, - GL_EXT_semaphore_win32, - GL_EXT_separate_shader_objects, - GL_EXT_separate_specular_color, - GL_EXT_shader_framebuffer_fetch, - GL_EXT_shader_framebuffer_fetch_non_coherent, - GL_EXT_shader_group_vote, - GL_EXT_shader_image_load_formatted, - GL_EXT_shader_image_load_store, - GL_EXT_shader_implicit_conversions, - GL_EXT_shader_integer_mix, - GL_EXT_shader_io_blocks, - GL_EXT_shader_non_constant_global_initializers, - GL_EXT_shader_pixel_local_storage, - GL_EXT_shader_pixel_local_storage2, - GL_EXT_shader_texture_lod, - GL_EXT_shadow_funcs, - GL_EXT_shadow_samplers, - GL_EXT_shared_texture_palette, - GL_EXT_sparse_texture, - GL_EXT_sparse_texture2, - GL_EXT_stencil_clear_tag, - GL_EXT_stencil_two_side, - GL_EXT_stencil_wrap, - GL_EXT_subtexture, - GL_EXT_tessellation_point_size, - GL_EXT_tessellation_shader, - GL_EXT_texture, - GL_EXT_texture3D, - GL_EXT_texture_array, - GL_EXT_texture_border_clamp, - GL_EXT_texture_buffer, - GL_EXT_texture_buffer_object, - GL_EXT_texture_compression_astc_decode_mode, - GL_EXT_texture_compression_bptc, - GL_EXT_texture_compression_dxt1, - GL_EXT_texture_compression_latc, - GL_EXT_texture_compression_rgtc, - GL_EXT_texture_compression_s3tc, - GL_EXT_texture_compression_s3tc_srgb, - GL_EXT_texture_cube_map, - GL_EXT_texture_cube_map_array, - GL_EXT_texture_env_add, - GL_EXT_texture_env_combine, - GL_EXT_texture_env_dot3, - GL_EXT_texture_filter_anisotropic, - GL_EXT_texture_filter_minmax, - GL_EXT_texture_format_BGRA8888, - GL_EXT_texture_format_sRGB_override, - GL_EXT_texture_integer, - GL_EXT_texture_lod_bias, - GL_EXT_texture_mirror_clamp, - GL_EXT_texture_mirror_clamp_to_edge, - GL_EXT_texture_norm16, - GL_EXT_texture_object, - GL_EXT_texture_perturb_normal, - GL_EXT_texture_rg, - GL_EXT_texture_sRGB, - GL_EXT_texture_sRGB_R8, - GL_EXT_texture_sRGB_RG8, - GL_EXT_texture_sRGB_decode, - GL_EXT_texture_shared_exponent, - GL_EXT_texture_snorm, - GL_EXT_texture_storage, - GL_EXT_texture_swizzle, - GL_EXT_texture_type_2_10_10_10_REV, - GL_EXT_texture_view, - GL_EXT_timer_query, - GL_EXT_transform_feedback, - GL_EXT_unpack_subimage, - GL_EXT_vertex_array, - GL_EXT_vertex_array_bgra, - GL_EXT_vertex_attrib_64bit, - GL_EXT_vertex_shader, - GL_EXT_vertex_weighting, - GL_EXT_win32_keyed_mutex, - GL_EXT_window_rectangles, - GL_EXT_x11_sync_object, - GL_FJ_shader_binary_GCCSO, - GL_GREMEDY_frame_terminator, - GL_GREMEDY_string_marker, - GL_HP_convolution_border_modes, - GL_HP_image_transform, - GL_HP_occlusion_test, - GL_HP_texture_lighting, - GL_IBM_cull_vertex, - GL_IBM_multimode_draw_arrays, - GL_IBM_rasterpos_clip, - GL_IBM_static_data, - GL_IBM_texture_mirrored_repeat, - GL_IBM_vertex_array_lists, - GL_IMG_bindless_texture, - GL_IMG_framebuffer_downsample, - GL_IMG_multisampled_render_to_texture, - GL_IMG_program_binary, - GL_IMG_read_format, - GL_IMG_shader_binary, - GL_IMG_texture_compression_pvrtc, - GL_IMG_texture_compression_pvrtc2, - GL_IMG_texture_filter_cubic, - GL_INGR_blend_func_separate, - GL_INGR_color_clamp, - GL_INGR_interlace_read, - GL_INTEL_blackhole_render, - GL_INTEL_conservative_rasterization, - GL_INTEL_fragment_shader_ordering, - GL_INTEL_framebuffer_CMAA, - GL_INTEL_map_texture, - GL_INTEL_parallel_arrays, - GL_INTEL_performance_query, - GL_KHR_blend_equation_advanced, - GL_KHR_blend_equation_advanced_coherent, - GL_KHR_context_flush_control, - GL_KHR_debug, - GL_KHR_no_error, - GL_KHR_parallel_shader_compile, - GL_KHR_robust_buffer_access_behavior, - GL_KHR_robustness, - GL_KHR_texture_compression_astc_hdr, - GL_KHR_texture_compression_astc_ldr, - GL_KHR_texture_compression_astc_sliced_3d, - GL_MESAX_texture_stack, - GL_MESA_pack_invert, - GL_MESA_program_binary_formats, - GL_MESA_resize_buffers, - GL_MESA_shader_integer_functions, - GL_MESA_tile_raster_order, - GL_MESA_window_pos, - GL_MESA_ycbcr_texture, - GL_NVX_blend_equation_advanced_multi_draw_buffers, - GL_NVX_conditional_render, - GL_NVX_gpu_memory_info, - GL_NVX_linked_gpu_multicast, - GL_NV_alpha_to_coverage_dither_control, - GL_NV_bindless_multi_draw_indirect, - GL_NV_bindless_multi_draw_indirect_count, - GL_NV_bindless_texture, - GL_NV_blend_equation_advanced, - GL_NV_blend_equation_advanced_coherent, - GL_NV_blend_minmax_factor, - GL_NV_blend_square, - GL_NV_clip_space_w_scaling, - GL_NV_command_list, - GL_NV_compute_program5, - GL_NV_conditional_render, - GL_NV_conservative_raster, - GL_NV_conservative_raster_dilate, - GL_NV_conservative_raster_pre_snap, - GL_NV_conservative_raster_pre_snap_triangles, - GL_NV_conservative_raster_underestimation, - GL_NV_copy_buffer, - GL_NV_copy_depth_to_color, - GL_NV_copy_image, - GL_NV_coverage_sample, - GL_NV_deep_texture3D, - GL_NV_depth_buffer_float, - GL_NV_depth_clamp, - GL_NV_depth_nonlinear, - GL_NV_draw_buffers, - GL_NV_draw_instanced, - GL_NV_draw_texture, - GL_NV_draw_vulkan_image, - GL_NV_evaluators, - GL_NV_explicit_attrib_location, - GL_NV_explicit_multisample, - GL_NV_fbo_color_attachments, - GL_NV_fence, - GL_NV_fill_rectangle, - GL_NV_float_buffer, - GL_NV_fog_distance, - GL_NV_fragment_coverage_to_color, - GL_NV_fragment_program, - GL_NV_fragment_program2, - GL_NV_fragment_program4, - GL_NV_fragment_program_option, - GL_NV_fragment_shader_interlock, - GL_NV_framebuffer_blit, - GL_NV_framebuffer_mixed_samples, - GL_NV_framebuffer_multisample, - GL_NV_framebuffer_multisample_coverage, - GL_NV_generate_mipmap_sRGB, - GL_NV_geometry_program4, - GL_NV_geometry_shader4, - GL_NV_geometry_shader_passthrough, - GL_NV_gpu_multicast, - GL_NV_gpu_program4, - GL_NV_gpu_program5, - GL_NV_gpu_program5_mem_extended, - GL_NV_gpu_shader5, - GL_NV_half_float, - GL_NV_image_formats, - GL_NV_instanced_arrays, - GL_NV_internalformat_sample_query, - GL_NV_light_max_exponent, - GL_NV_multisample_coverage, - GL_NV_multisample_filter_hint, - GL_NV_non_square_matrices, - GL_NV_occlusion_query, - GL_NV_packed_depth_stencil, - GL_NV_parameter_buffer_object, - GL_NV_parameter_buffer_object2, - GL_NV_path_rendering, - GL_NV_path_rendering_shared_edge, - GL_NV_pixel_buffer_object, - GL_NV_pixel_data_range, - GL_NV_point_sprite, - GL_NV_polygon_mode, - GL_NV_present_video, - GL_NV_primitive_restart, - GL_NV_query_resource, - GL_NV_query_resource_tag, - GL_NV_read_buffer, - GL_NV_read_buffer_front, - GL_NV_read_depth, - GL_NV_read_depth_stencil, - GL_NV_read_stencil, - GL_NV_register_combiners, - GL_NV_register_combiners2, - GL_NV_robustness_video_memory_purge, - GL_NV_sRGB_formats, - GL_NV_sample_locations, - GL_NV_sample_mask_override_coverage, - GL_NV_shader_atomic_counters, - GL_NV_shader_atomic_float, - GL_NV_shader_atomic_float64, - GL_NV_shader_atomic_fp16_vector, - GL_NV_shader_atomic_int64, - GL_NV_shader_buffer_load, - GL_NV_shader_buffer_store, - GL_NV_shader_noperspective_interpolation, - GL_NV_shader_storage_buffer_object, - GL_NV_shader_thread_group, - GL_NV_shader_thread_shuffle, - GL_NV_shadow_samplers_array, - GL_NV_shadow_samplers_cube, - GL_NV_stereo_view_rendering, - GL_NV_tessellation_program5, - GL_NV_texgen_emboss, - GL_NV_texgen_reflection, - GL_NV_texture_barrier, - GL_NV_texture_border_clamp, - GL_NV_texture_compression_s3tc_update, - GL_NV_texture_compression_vtc, - GL_NV_texture_env_combine4, - GL_NV_texture_expand_normal, - GL_NV_texture_multisample, - GL_NV_texture_npot_2D_mipmap, - GL_NV_texture_rectangle, - GL_NV_texture_rectangle_compressed, - GL_NV_texture_shader, - GL_NV_texture_shader2, - GL_NV_texture_shader3, - GL_NV_transform_feedback, - GL_NV_transform_feedback2, - GL_NV_uniform_buffer_unified_memory, - GL_NV_vdpau_interop, - GL_NV_vertex_array_range, - GL_NV_vertex_array_range2, - GL_NV_vertex_attrib_integer_64bit, - GL_NV_vertex_buffer_unified_memory, - GL_NV_vertex_program, - GL_NV_vertex_program1_1, - GL_NV_vertex_program2, - GL_NV_vertex_program2_option, - GL_NV_vertex_program3, - GL_NV_vertex_program4, - GL_NV_video_capture, - GL_NV_viewport_array, - GL_NV_viewport_array2, - GL_NV_viewport_swizzle, - GL_OES_EGL_image, - GL_OES_EGL_image_external, - GL_OES_EGL_image_external_essl3, - GL_OES_byte_coordinates, - GL_OES_compressed_ETC1_RGB8_sub_texture, - GL_OES_compressed_ETC1_RGB8_texture, - GL_OES_compressed_paletted_texture, - GL_OES_copy_image, - GL_OES_depth24, - GL_OES_depth32, - GL_OES_depth_texture, - GL_OES_draw_buffers_indexed, - GL_OES_draw_elements_base_vertex, - GL_OES_element_index_uint, - GL_OES_fbo_render_mipmap, - GL_OES_fixed_point, - GL_OES_fragment_precision_high, - GL_OES_geometry_point_size, - GL_OES_geometry_shader, - GL_OES_get_program_binary, - GL_OES_gpu_shader5, - GL_OES_mapbuffer, - GL_OES_packed_depth_stencil, - GL_OES_primitive_bounding_box, - GL_OES_query_matrix, - GL_OES_read_format, - GL_OES_required_internalformat, - GL_OES_rgb8_rgba8, - GL_OES_sample_shading, - GL_OES_sample_variables, - GL_OES_shader_image_atomic, - GL_OES_shader_io_blocks, - GL_OES_shader_multisample_interpolation, - GL_OES_single_precision, - GL_OES_standard_derivatives, - GL_OES_stencil1, - GL_OES_stencil4, - GL_OES_surfaceless_context, - GL_OES_tessellation_point_size, - GL_OES_tessellation_shader, - GL_OES_texture_3D, - GL_OES_texture_border_clamp, - GL_OES_texture_buffer, - GL_OES_texture_compression_astc, - GL_OES_texture_cube_map_array, - GL_OES_texture_float, - GL_OES_texture_float_linear, - GL_OES_texture_half_float, - GL_OES_texture_half_float_linear, - GL_OES_texture_npot, - GL_OES_texture_stencil8, - GL_OES_texture_storage_multisample_2d_array, - GL_OES_texture_view, - GL_OES_vertex_array_object, - GL_OES_vertex_half_float, - GL_OES_vertex_type_10_10_10_2, - GL_OES_viewport_array, - GL_OML_interlace, - GL_OML_resample, - GL_OML_subsample, - GL_OVR_multiview, - GL_OVR_multiview2, - GL_OVR_multiview_multisampled_render_to_texture, - GL_PGI_misc_hints, - GL_PGI_vertex_hints, - GL_QCOM_alpha_test, - GL_QCOM_binning_control, - GL_QCOM_driver_control, - GL_QCOM_extended_get, - GL_QCOM_extended_get2, - GL_QCOM_framebuffer_foveated, - GL_QCOM_perfmon_global_mode, - GL_QCOM_shader_framebuffer_fetch_noncoherent, - GL_QCOM_texture_foveated, - GL_QCOM_tiled_rendering, - GL_QCOM_writeonly_rendering, - GL_REND_screen_coordinates, - GL_S3_s3tc, - GL_SGIS_detail_texture, - GL_SGIS_fog_function, - GL_SGIS_generate_mipmap, - GL_SGIS_multisample, - GL_SGIS_pixel_texture, - GL_SGIS_point_line_texgen, - GL_SGIS_point_parameters, - GL_SGIS_sharpen_texture, - GL_SGIS_texture4D, - GL_SGIS_texture_border_clamp, - GL_SGIS_texture_color_mask, - GL_SGIS_texture_edge_clamp, - GL_SGIS_texture_filter4, - GL_SGIS_texture_lod, - GL_SGIS_texture_select, - GL_SGIX_async, - GL_SGIX_async_histogram, - GL_SGIX_async_pixel, - GL_SGIX_blend_alpha_minmax, - GL_SGIX_calligraphic_fragment, - GL_SGIX_clipmap, - GL_SGIX_convolution_accuracy, - GL_SGIX_depth_pass_instrument, - GL_SGIX_depth_texture, - GL_SGIX_flush_raster, - GL_SGIX_fog_offset, - GL_SGIX_fragment_lighting, - GL_SGIX_framezoom, - GL_SGIX_igloo_interface, - GL_SGIX_instruments, - GL_SGIX_interlace, - GL_SGIX_ir_instrument1, - GL_SGIX_list_priority, - GL_SGIX_pixel_texture, - GL_SGIX_pixel_tiles, - GL_SGIX_polynomial_ffd, - GL_SGIX_reference_plane, - GL_SGIX_resample, - GL_SGIX_scalebias_hint, - GL_SGIX_shadow, - GL_SGIX_shadow_ambient, - GL_SGIX_sprite, - GL_SGIX_subsample, - GL_SGIX_tag_sample_buffer, - GL_SGIX_texture_add_env, - GL_SGIX_texture_coordinate_clamp, - GL_SGIX_texture_lod_bias, - GL_SGIX_texture_multi_buffer, - GL_SGIX_texture_scale_bias, - GL_SGIX_vertex_preclip, - GL_SGIX_ycrcb, - GL_SGIX_ycrcb_subsample, - GL_SGIX_ycrcba, - GL_SGI_color_matrix, - GL_SGI_color_table, - GL_SGI_texture_color_table, - GL_SUNX_constant_data, - GL_SUN_convolution_border_modes, - GL_SUN_global_alpha, - GL_SUN_mesh_array, - GL_SUN_slice_accum, - GL_SUN_triangle_list, - GL_SUN_vertex, - GL_VIV_shader_binary, - GL_WIN_phong_shading, - GL_WIN_specular_fog - Loader: True - Local files: True - Omit khrplatform: False - - Commandline: - --profile="core" --api="gl=4.6,gles2=3.2" --generator="c" --spec="gl" --local-files --extensions="GL_3DFX_multisample,GL_3DFX_tbuffer,GL_3DFX_texture_compression_FXT1,GL_AMD_blend_minmax_factor,GL_AMD_compressed_3DC_texture,GL_AMD_compressed_ATC_texture,GL_AMD_conservative_depth,GL_AMD_debug_output,GL_AMD_depth_clamp_separate,GL_AMD_draw_buffers_blend,GL_AMD_framebuffer_sample_positions,GL_AMD_gcn_shader,GL_AMD_gpu_shader_half_float,GL_AMD_gpu_shader_int16,GL_AMD_gpu_shader_int64,GL_AMD_interleaved_elements,GL_AMD_multi_draw_indirect,GL_AMD_name_gen_delete,GL_AMD_occlusion_query_event,GL_AMD_performance_monitor,GL_AMD_pinned_memory,GL_AMD_program_binary_Z400,GL_AMD_query_buffer_object,GL_AMD_sample_positions,GL_AMD_seamless_cubemap_per_texture,GL_AMD_shader_atomic_counter_ops,GL_AMD_shader_ballot,GL_AMD_shader_explicit_vertex_parameter,GL_AMD_shader_gpu_shader_half_float_fetch,GL_AMD_shader_image_load_store_lod,GL_AMD_shader_stencil_export,GL_AMD_shader_trinary_minmax,GL_AMD_sparse_texture,GL_AMD_stencil_operation_extended,GL_AMD_texture_gather_bias_lod,GL_AMD_texture_texture4,GL_AMD_transform_feedback3_lines_triangles,GL_AMD_transform_feedback4,GL_AMD_vertex_shader_layer,GL_AMD_vertex_shader_tessellator,GL_AMD_vertex_shader_viewport_index,GL_ANDROID_extension_pack_es31a,GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_APPLE_aux_depth_stencil,GL_APPLE_client_storage,GL_APPLE_clip_distance,GL_APPLE_color_buffer_packed_float,GL_APPLE_copy_texture_levels,GL_APPLE_element_array,GL_APPLE_fence,GL_APPLE_float_pixels,GL_APPLE_flush_buffer_range,GL_APPLE_framebuffer_multisample,GL_APPLE_object_purgeable,GL_APPLE_rgb_422,GL_APPLE_row_bytes,GL_APPLE_specular_vector,GL_APPLE_sync,GL_APPLE_texture_format_BGRA8888,GL_APPLE_texture_max_level,GL_APPLE_texture_packed_float,GL_APPLE_texture_range,GL_APPLE_transform_hint,GL_APPLE_vertex_array_object,GL_APPLE_vertex_array_range,GL_APPLE_vertex_program_evaluators,GL_APPLE_ycbcr_422,GL_ARB_ES2_compatibility,GL_ARB_ES3_1_compatibility,GL_ARB_ES3_2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_arrays_of_arrays,GL_ARB_base_instance,GL_ARB_bindless_texture,GL_ARB_blend_func_extended,GL_ARB_buffer_storage,GL_ARB_cl_event,GL_ARB_clear_buffer_object,GL_ARB_clear_texture,GL_ARB_clip_control,GL_ARB_color_buffer_float,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_compute_shader,GL_ARB_compute_variable_group_size,GL_ARB_conditional_render_inverted,GL_ARB_conservative_depth,GL_ARB_copy_buffer,GL_ARB_copy_image,GL_ARB_cull_distance,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_derivative_control,GL_ARB_direct_state_access,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_draw_elements_base_vertex,GL_ARB_draw_indirect,GL_ARB_draw_instanced,GL_ARB_enhanced_layouts,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_coord_conventions,GL_ARB_fragment_layer_viewport,GL_ARB_fragment_program,GL_ARB_fragment_program_shadow,GL_ARB_fragment_shader,GL_ARB_fragment_shader_interlock,GL_ARB_framebuffer_no_attachments,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_geometry_shader4,GL_ARB_get_program_binary,GL_ARB_get_texture_sub_image,GL_ARB_gl_spirv,GL_ARB_gpu_shader5,GL_ARB_gpu_shader_fp64,GL_ARB_gpu_shader_int64,GL_ARB_half_float_pixel,GL_ARB_half_float_vertex,GL_ARB_imaging,GL_ARB_indirect_parameters,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_map_buffer_alignment,GL_ARB_map_buffer_range,GL_ARB_matrix_palette,GL_ARB_multi_bind,GL_ARB_multi_draw_indirect,GL_ARB_multisample,GL_ARB_multitexture,GL_ARB_occlusion_query,GL_ARB_occlusion_query2,GL_ARB_parallel_shader_compile,GL_ARB_pipeline_statistics_query,GL_ARB_pixel_buffer_object,GL_ARB_point_parameters,GL_ARB_point_sprite,GL_ARB_polygon_offset_clamp,GL_ARB_post_depth_coverage,GL_ARB_program_interface_query,GL_ARB_provoking_vertex,GL_ARB_query_buffer_object,GL_ARB_robust_buffer_access_behavior,GL_ARB_robustness,GL_ARB_robustness_isolation,GL_ARB_sample_locations,GL_ARB_sample_shading,GL_ARB_sampler_objects,GL_ARB_seamless_cube_map,GL_ARB_seamless_cubemap_per_texture,GL_ARB_separate_shader_objects,GL_ARB_shader_atomic_counter_ops,GL_ARB_shader_atomic_counters,GL_ARB_shader_ballot,GL_ARB_shader_bit_encoding,GL_ARB_shader_clock,GL_ARB_shader_draw_parameters,GL_ARB_shader_group_vote,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_precision,GL_ARB_shader_stencil_export,GL_ARB_shader_storage_buffer_object,GL_ARB_shader_subroutine,GL_ARB_shader_texture_image_samples,GL_ARB_shader_texture_lod,GL_ARB_shader_viewport_layer_array,GL_ARB_shading_language_100,GL_ARB_shading_language_420pack,GL_ARB_shading_language_include,GL_ARB_shading_language_packing,GL_ARB_shadow,GL_ARB_shadow_ambient,GL_ARB_sparse_buffer,GL_ARB_sparse_texture,GL_ARB_sparse_texture2,GL_ARB_sparse_texture_clamp,GL_ARB_spirv_extensions,GL_ARB_stencil_texturing,GL_ARB_sync,GL_ARB_tessellation_shader,GL_ARB_texture_barrier,GL_ARB_texture_border_clamp,GL_ARB_texture_buffer_object,GL_ARB_texture_buffer_object_rgb32,GL_ARB_texture_buffer_range,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_cube_map_array,GL_ARB_texture_env_add,GL_ARB_texture_env_combine,GL_ARB_texture_env_crossbar,GL_ARB_texture_env_dot3,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_filter_minmax,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_mirror_clamp_to_edge,GL_ARB_texture_mirrored_repeat,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_query_levels,GL_ARB_texture_query_lod,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_texture_stencil8,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_ARB_texture_swizzle,GL_ARB_texture_view,GL_ARB_timer_query,GL_ARB_transform_feedback2,GL_ARB_transform_feedback3,GL_ARB_transform_feedback_instanced,GL_ARB_transform_feedback_overflow_query,GL_ARB_transpose_matrix,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_bgra,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_64bit,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_blend,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_10f_11f_11f_rev,GL_ARB_vertex_type_2_10_10_10_rev,GL_ARB_viewport_array,GL_ARB_window_pos,GL_ARM_mali_program_binary,GL_ARM_mali_shader_binary,GL_ARM_rgba8,GL_ARM_shader_framebuffer_fetch,GL_ARM_shader_framebuffer_fetch_depth_stencil,GL_ATI_draw_buffers,GL_ATI_element_array,GL_ATI_envmap_bumpmap,GL_ATI_fragment_shader,GL_ATI_map_object_buffer,GL_ATI_meminfo,GL_ATI_pixel_format_float,GL_ATI_pn_triangles,GL_ATI_separate_stencil,GL_ATI_text_fragment_shader,GL_ATI_texture_env_combine3,GL_ATI_texture_float,GL_ATI_texture_mirror_once,GL_ATI_vertex_array_object,GL_ATI_vertex_attrib_array_object,GL_ATI_vertex_streams,GL_DMP_program_binary,GL_DMP_shader_binary,GL_EXT_422_pixels,GL_EXT_EGL_image_array,GL_EXT_EGL_image_storage,GL_EXT_YUV_target,GL_EXT_abgr,GL_EXT_base_instance,GL_EXT_bgra,GL_EXT_bindable_uniform,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_extended,GL_EXT_blend_func_separate,GL_EXT_blend_logic_op,GL_EXT_blend_minmax,GL_EXT_blend_subtract,GL_EXT_buffer_storage,GL_EXT_clear_texture,GL_EXT_clip_control,GL_EXT_clip_cull_distance,GL_EXT_clip_volume_hint,GL_EXT_cmyka,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_color_subtable,GL_EXT_compiled_vertex_array,GL_EXT_conservative_depth,GL_EXT_convolution,GL_EXT_coordinate_frame,GL_EXT_copy_image,GL_EXT_copy_texture,GL_EXT_cull_vertex,GL_EXT_debug_label,GL_EXT_debug_marker,GL_EXT_depth_bounds_test,GL_EXT_direct_state_access,GL_EXT_discard_framebuffer,GL_EXT_disjoint_timer_query,GL_EXT_draw_buffers,GL_EXT_draw_buffers2,GL_EXT_draw_buffers_indexed,GL_EXT_draw_elements_base_vertex,GL_EXT_draw_instanced,GL_EXT_draw_range_elements,GL_EXT_draw_transform_feedback,GL_EXT_external_buffer,GL_EXT_float_blend,GL_EXT_fog_coord,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_point_size,GL_EXT_geometry_shader,GL_EXT_geometry_shader4,GL_EXT_gpu_program_parameters,GL_EXT_gpu_shader4,GL_EXT_gpu_shader5,GL_EXT_histogram,GL_EXT_index_array_formats,GL_EXT_index_func,GL_EXT_index_material,GL_EXT_index_texture,GL_EXT_instanced_arrays,GL_EXT_light_texture,GL_EXT_map_buffer_range,GL_EXT_memory_object,GL_EXT_memory_object_fd,GL_EXT_memory_object_win32,GL_EXT_misc_attribute,GL_EXT_multi_draw_arrays,GL_EXT_multi_draw_indirect,GL_EXT_multisample,GL_EXT_multisampled_compatibility,GL_EXT_multisampled_render_to_texture,GL_EXT_multiview_draw_buffers,GL_EXT_occlusion_query_boolean,GL_EXT_packed_depth_stencil,GL_EXT_packed_float,GL_EXT_packed_pixels,GL_EXT_paletted_texture,GL_EXT_pixel_buffer_object,GL_EXT_pixel_transform,GL_EXT_pixel_transform_color_table,GL_EXT_point_parameters,GL_EXT_polygon_offset,GL_EXT_polygon_offset_clamp,GL_EXT_post_depth_coverage,GL_EXT_primitive_bounding_box,GL_EXT_protected_textures,GL_EXT_provoking_vertex,GL_EXT_pvrtc_sRGB,GL_EXT_raster_multisample,GL_EXT_read_format_bgra,GL_EXT_render_snorm,GL_EXT_rescale_normal,GL_EXT_robustness,GL_EXT_sRGB,GL_EXT_sRGB_write_control,GL_EXT_secondary_color,GL_EXT_semaphore,GL_EXT_semaphore_fd,GL_EXT_semaphore_win32,GL_EXT_separate_shader_objects,GL_EXT_separate_specular_color,GL_EXT_shader_framebuffer_fetch,GL_EXT_shader_framebuffer_fetch_non_coherent,GL_EXT_shader_group_vote,GL_EXT_shader_image_load_formatted,GL_EXT_shader_image_load_store,GL_EXT_shader_implicit_conversions,GL_EXT_shader_integer_mix,GL_EXT_shader_io_blocks,GL_EXT_shader_non_constant_global_initializers,GL_EXT_shader_pixel_local_storage,GL_EXT_shader_pixel_local_storage2,GL_EXT_shader_texture_lod,GL_EXT_shadow_funcs,GL_EXT_shadow_samplers,GL_EXT_shared_texture_palette,GL_EXT_sparse_texture,GL_EXT_sparse_texture2,GL_EXT_stencil_clear_tag,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_subtexture,GL_EXT_tessellation_point_size,GL_EXT_tessellation_shader,GL_EXT_texture,GL_EXT_texture3D,GL_EXT_texture_array,GL_EXT_texture_border_clamp,GL_EXT_texture_buffer,GL_EXT_texture_buffer_object,GL_EXT_texture_compression_astc_decode_mode,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_latc,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_cube_map,GL_EXT_texture_cube_map_array,GL_EXT_texture_env_add,GL_EXT_texture_env_combine,GL_EXT_texture_env_dot3,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_filter_minmax,GL_EXT_texture_format_BGRA8888,GL_EXT_texture_format_sRGB_override,GL_EXT_texture_integer,GL_EXT_texture_lod_bias,GL_EXT_texture_mirror_clamp,GL_EXT_texture_mirror_clamp_to_edge,GL_EXT_texture_norm16,GL_EXT_texture_object,GL_EXT_texture_perturb_normal,GL_EXT_texture_rg,GL_EXT_texture_sRGB,GL_EXT_texture_sRGB_R8,GL_EXT_texture_sRGB_RG8,GL_EXT_texture_sRGB_decode,GL_EXT_texture_shared_exponent,GL_EXT_texture_snorm,GL_EXT_texture_storage,GL_EXT_texture_swizzle,GL_EXT_texture_type_2_10_10_10_REV,GL_EXT_texture_view,GL_EXT_timer_query,GL_EXT_transform_feedback,GL_EXT_unpack_subimage,GL_EXT_vertex_array,GL_EXT_vertex_array_bgra,GL_EXT_vertex_attrib_64bit,GL_EXT_vertex_shader,GL_EXT_vertex_weighting,GL_EXT_win32_keyed_mutex,GL_EXT_window_rectangles,GL_EXT_x11_sync_object,GL_FJ_shader_binary_GCCSO,GL_GREMEDY_frame_terminator,GL_GREMEDY_string_marker,GL_HP_convolution_border_modes,GL_HP_image_transform,GL_HP_occlusion_test,GL_HP_texture_lighting,GL_IBM_cull_vertex,GL_IBM_multimode_draw_arrays,GL_IBM_rasterpos_clip,GL_IBM_static_data,GL_IBM_texture_mirrored_repeat,GL_IBM_vertex_array_lists,GL_IMG_bindless_texture,GL_IMG_framebuffer_downsample,GL_IMG_multisampled_render_to_texture,GL_IMG_program_binary,GL_IMG_read_format,GL_IMG_shader_binary,GL_IMG_texture_compression_pvrtc,GL_IMG_texture_compression_pvrtc2,GL_IMG_texture_filter_cubic,GL_INGR_blend_func_separate,GL_INGR_color_clamp,GL_INGR_interlace_read,GL_INTEL_blackhole_render,GL_INTEL_conservative_rasterization,GL_INTEL_fragment_shader_ordering,GL_INTEL_framebuffer_CMAA,GL_INTEL_map_texture,GL_INTEL_parallel_arrays,GL_INTEL_performance_query,GL_KHR_blend_equation_advanced,GL_KHR_blend_equation_advanced_coherent,GL_KHR_context_flush_control,GL_KHR_debug,GL_KHR_no_error,GL_KHR_parallel_shader_compile,GL_KHR_robust_buffer_access_behavior,GL_KHR_robustness,GL_KHR_texture_compression_astc_hdr,GL_KHR_texture_compression_astc_ldr,GL_KHR_texture_compression_astc_sliced_3d,GL_MESAX_texture_stack,GL_MESA_pack_invert,GL_MESA_program_binary_formats,GL_MESA_resize_buffers,GL_MESA_shader_integer_functions,GL_MESA_tile_raster_order,GL_MESA_window_pos,GL_MESA_ycbcr_texture,GL_NVX_blend_equation_advanced_multi_draw_buffers,GL_NVX_conditional_render,GL_NVX_gpu_memory_info,GL_NVX_linked_gpu_multicast,GL_NV_alpha_to_coverage_dither_control,GL_NV_bindless_multi_draw_indirect,GL_NV_bindless_multi_draw_indirect_count,GL_NV_bindless_texture,GL_NV_blend_equation_advanced,GL_NV_blend_equation_advanced_coherent,GL_NV_blend_minmax_factor,GL_NV_blend_square,GL_NV_clip_space_w_scaling,GL_NV_command_list,GL_NV_compute_program5,GL_NV_conditional_render,GL_NV_conservative_raster,GL_NV_conservative_raster_dilate,GL_NV_conservative_raster_pre_snap,GL_NV_conservative_raster_pre_snap_triangles,GL_NV_conservative_raster_underestimation,GL_NV_copy_buffer,GL_NV_copy_depth_to_color,GL_NV_copy_image,GL_NV_coverage_sample,GL_NV_deep_texture3D,GL_NV_depth_buffer_float,GL_NV_depth_clamp,GL_NV_depth_nonlinear,GL_NV_draw_buffers,GL_NV_draw_instanced,GL_NV_draw_texture,GL_NV_draw_vulkan_image,GL_NV_evaluators,GL_NV_explicit_attrib_location,GL_NV_explicit_multisample,GL_NV_fbo_color_attachments,GL_NV_fence,GL_NV_fill_rectangle,GL_NV_float_buffer,GL_NV_fog_distance,GL_NV_fragment_coverage_to_color,GL_NV_fragment_program,GL_NV_fragment_program2,GL_NV_fragment_program4,GL_NV_fragment_program_option,GL_NV_fragment_shader_interlock,GL_NV_framebuffer_blit,GL_NV_framebuffer_mixed_samples,GL_NV_framebuffer_multisample,GL_NV_framebuffer_multisample_coverage,GL_NV_generate_mipmap_sRGB,GL_NV_geometry_program4,GL_NV_geometry_shader4,GL_NV_geometry_shader_passthrough,GL_NV_gpu_multicast,GL_NV_gpu_program4,GL_NV_gpu_program5,GL_NV_gpu_program5_mem_extended,GL_NV_gpu_shader5,GL_NV_half_float,GL_NV_image_formats,GL_NV_instanced_arrays,GL_NV_internalformat_sample_query,GL_NV_light_max_exponent,GL_NV_multisample_coverage,GL_NV_multisample_filter_hint,GL_NV_non_square_matrices,GL_NV_occlusion_query,GL_NV_packed_depth_stencil,GL_NV_parameter_buffer_object,GL_NV_parameter_buffer_object2,GL_NV_path_rendering,GL_NV_path_rendering_shared_edge,GL_NV_pixel_buffer_object,GL_NV_pixel_data_range,GL_NV_point_sprite,GL_NV_polygon_mode,GL_NV_present_video,GL_NV_primitive_restart,GL_NV_query_resource,GL_NV_query_resource_tag,GL_NV_read_buffer,GL_NV_read_buffer_front,GL_NV_read_depth,GL_NV_read_depth_stencil,GL_NV_read_stencil,GL_NV_register_combiners,GL_NV_register_combiners2,GL_NV_robustness_video_memory_purge,GL_NV_sRGB_formats,GL_NV_sample_locations,GL_NV_sample_mask_override_coverage,GL_NV_shader_atomic_counters,GL_NV_shader_atomic_float,GL_NV_shader_atomic_float64,GL_NV_shader_atomic_fp16_vector,GL_NV_shader_atomic_int64,GL_NV_shader_buffer_load,GL_NV_shader_buffer_store,GL_NV_shader_noperspective_interpolation,GL_NV_shader_storage_buffer_object,GL_NV_shader_thread_group,GL_NV_shader_thread_shuffle,GL_NV_shadow_samplers_array,GL_NV_shadow_samplers_cube,GL_NV_stereo_view_rendering,GL_NV_tessellation_program5,GL_NV_texgen_emboss,GL_NV_texgen_reflection,GL_NV_texture_barrier,GL_NV_texture_border_clamp,GL_NV_texture_compression_s3tc_update,GL_NV_texture_compression_vtc,GL_NV_texture_env_combine4,GL_NV_texture_expand_normal,GL_NV_texture_multisample,GL_NV_texture_npot_2D_mipmap,GL_NV_texture_rectangle,GL_NV_texture_rectangle_compressed,GL_NV_texture_shader,GL_NV_texture_shader2,GL_NV_texture_shader3,GL_NV_transform_feedback,GL_NV_transform_feedback2,GL_NV_uniform_buffer_unified_memory,GL_NV_vdpau_interop,GL_NV_vertex_array_range,GL_NV_vertex_array_range2,GL_NV_vertex_attrib_integer_64bit,GL_NV_vertex_buffer_unified_memory,GL_NV_vertex_program,GL_NV_vertex_program1_1,GL_NV_vertex_program2,GL_NV_vertex_program2_option,GL_NV_vertex_program3,GL_NV_vertex_program4,GL_NV_video_capture,GL_NV_viewport_array,GL_NV_viewport_array2,GL_NV_viewport_swizzle,GL_OES_EGL_image,GL_OES_EGL_image_external,GL_OES_EGL_image_external_essl3,GL_OES_byte_coordinates,GL_OES_compressed_ETC1_RGB8_sub_texture,GL_OES_compressed_ETC1_RGB8_texture,GL_OES_compressed_paletted_texture,GL_OES_copy_image,GL_OES_depth24,GL_OES_depth32,GL_OES_depth_texture,GL_OES_draw_buffers_indexed,GL_OES_draw_elements_base_vertex,GL_OES_element_index_uint,GL_OES_fbo_render_mipmap,GL_OES_fixed_point,GL_OES_fragment_precision_high,GL_OES_geometry_point_size,GL_OES_geometry_shader,GL_OES_get_program_binary,GL_OES_gpu_shader5,GL_OES_mapbuffer,GL_OES_packed_depth_stencil,GL_OES_primitive_bounding_box,GL_OES_query_matrix,GL_OES_read_format,GL_OES_required_internalformat,GL_OES_rgb8_rgba8,GL_OES_sample_shading,GL_OES_sample_variables,GL_OES_shader_image_atomic,GL_OES_shader_io_blocks,GL_OES_shader_multisample_interpolation,GL_OES_single_precision,GL_OES_standard_derivatives,GL_OES_stencil1,GL_OES_stencil4,GL_OES_surfaceless_context,GL_OES_tessellation_point_size,GL_OES_tessellation_shader,GL_OES_texture_3D,GL_OES_texture_border_clamp,GL_OES_texture_buffer,GL_OES_texture_compression_astc,GL_OES_texture_cube_map_array,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_texture_npot,GL_OES_texture_stencil8,GL_OES_texture_storage_multisample_2d_array,GL_OES_texture_view,GL_OES_vertex_array_object,GL_OES_vertex_half_float,GL_OES_vertex_type_10_10_10_2,GL_OES_viewport_array,GL_OML_interlace,GL_OML_resample,GL_OML_subsample,GL_OVR_multiview,GL_OVR_multiview2,GL_OVR_multiview_multisampled_render_to_texture,GL_PGI_misc_hints,GL_PGI_vertex_hints,GL_QCOM_alpha_test,GL_QCOM_binning_control,GL_QCOM_driver_control,GL_QCOM_extended_get,GL_QCOM_extended_get2,GL_QCOM_framebuffer_foveated,GL_QCOM_perfmon_global_mode,GL_QCOM_shader_framebuffer_fetch_noncoherent,GL_QCOM_texture_foveated,GL_QCOM_tiled_rendering,GL_QCOM_writeonly_rendering,GL_REND_screen_coordinates,GL_S3_s3tc,GL_SGIS_detail_texture,GL_SGIS_fog_function,GL_SGIS_generate_mipmap,GL_SGIS_multisample,GL_SGIS_pixel_texture,GL_SGIS_point_line_texgen,GL_SGIS_point_parameters,GL_SGIS_sharpen_texture,GL_SGIS_texture4D,GL_SGIS_texture_border_clamp,GL_SGIS_texture_color_mask,GL_SGIS_texture_edge_clamp,GL_SGIS_texture_filter4,GL_SGIS_texture_lod,GL_SGIS_texture_select,GL_SGIX_async,GL_SGIX_async_histogram,GL_SGIX_async_pixel,GL_SGIX_blend_alpha_minmax,GL_SGIX_calligraphic_fragment,GL_SGIX_clipmap,GL_SGIX_convolution_accuracy,GL_SGIX_depth_pass_instrument,GL_SGIX_depth_texture,GL_SGIX_flush_raster,GL_SGIX_fog_offset,GL_SGIX_fragment_lighting,GL_SGIX_framezoom,GL_SGIX_igloo_interface,GL_SGIX_instruments,GL_SGIX_interlace,GL_SGIX_ir_instrument1,GL_SGIX_list_priority,GL_SGIX_pixel_texture,GL_SGIX_pixel_tiles,GL_SGIX_polynomial_ffd,GL_SGIX_reference_plane,GL_SGIX_resample,GL_SGIX_scalebias_hint,GL_SGIX_shadow,GL_SGIX_shadow_ambient,GL_SGIX_sprite,GL_SGIX_subsample,GL_SGIX_tag_sample_buffer,GL_SGIX_texture_add_env,GL_SGIX_texture_coordinate_clamp,GL_SGIX_texture_lod_bias,GL_SGIX_texture_multi_buffer,GL_SGIX_texture_scale_bias,GL_SGIX_vertex_preclip,GL_SGIX_ycrcb,GL_SGIX_ycrcb_subsample,GL_SGIX_ycrcba,GL_SGI_color_matrix,GL_SGI_color_table,GL_SGI_texture_color_table,GL_SUNX_constant_data,GL_SUN_convolution_border_modes,GL_SUN_global_alpha,GL_SUN_mesh_array,GL_SUN_slice_accum,GL_SUN_triangle_list,GL_SUN_vertex,GL_VIV_shader_binary,GL_WIN_phong_shading,GL_WIN_specular_fog" - Online: - Too many extensions -*/ - - -#ifndef __glad_h_ -#define __glad_h_ +#ifndef GLAD_GL_H_ +#define GLAD_GL_H_ +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif #ifdef __gl_h_ -#error OpenGL header already included, remove this include, glad already provides it + #error OpenGL (gl.h) header already included (API: gl), remove previous include! #endif -#define __gl_h_ - -#ifdef __gl2_h_ -#error OpenGL ES 2 header already included, remove this include, glad already provides it -#endif -#define __gl2_h_ - +#define __gl_h_ 1 #ifdef __gl3_h_ -#error OpenGL ES 3 header already included, remove this include, glad already provides it + #error OpenGL (gl3.h) header already included (API: gl), remove previous include! #endif -#define __gl3_h_ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 +#define __gl3_h_ 1 +#ifdef __glext_h_ + #error OpenGL (glext.h) header already included (API: gl), remove previous include! #endif -#ifndef NOMINMAX -#define NOMINMAX 1 +#define __glext_h_ 1 +#ifdef __gl3ext_h_ + #error OpenGL (gl3ext.h) header already included (API: gl), remove previous include! #endif -#include +#define __gl3ext_h_ 1 +#ifdef __clang__ +#pragma clang diagnostic pop #endif -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif +#define GLAD_GL +#define GLAD_OPTION_GL_LOADER #ifdef __cplusplus extern "C" { #endif -struct gladGLversionStruct { - int major; - int minor; -}; +#ifndef GLAD_PLATFORM_H_ +#define GLAD_PLATFORM_H_ -typedef void* (* GLADloadproc)(const char *name); +#ifndef GLAD_PLATFORM_WIN32 + #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__) + #define GLAD_PLATFORM_WIN32 1 + #else + #define GLAD_PLATFORM_WIN32 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_APPLE + #ifdef __APPLE__ + #define GLAD_PLATFORM_APPLE 1 + #else + #define GLAD_PLATFORM_APPLE 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_EMSCRIPTEN + #ifdef __EMSCRIPTEN__ + #define GLAD_PLATFORM_EMSCRIPTEN 1 + #else + #define GLAD_PLATFORM_EMSCRIPTEN 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_UWP + #if defined(_MSC_VER) && !defined(GLAD_INTERNAL_HAVE_WINAPIFAMILY) + #ifdef __has_include + #if __has_include() + #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 + #endif + #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ + #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 + #endif + #endif + + #ifdef GLAD_INTERNAL_HAVE_WINAPIFAMILY + #include + #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + #define GLAD_PLATFORM_UWP 1 + #endif + #endif + + #ifndef GLAD_PLATFORM_UWP + #define GLAD_PLATFORM_UWP 0 + #endif +#endif + +#ifdef __GNUC__ + #define GLAD_GNUC_EXTENSION __extension__ +#else + #define GLAD_GNUC_EXTENSION +#endif + +#define GLAD_UNUSED(x) (void)(x) + +#ifndef GLAD_API_CALL + #if defined(GLAD_API_CALL_EXPORT) + #if GLAD_PLATFORM_WIN32 || defined(__CYGWIN__) + #if defined(GLAD_API_CALL_EXPORT_BUILD) + #if defined(__GNUC__) + #define GLAD_API_CALL __attribute__ ((dllexport)) extern + #else + #define GLAD_API_CALL __declspec(dllexport) extern + #endif + #else + #if defined(__GNUC__) + #define GLAD_API_CALL __attribute__ ((dllimport)) extern + #else + #define GLAD_API_CALL __declspec(dllimport) extern + #endif + #endif + #elif defined(__GNUC__) && defined(GLAD_API_CALL_EXPORT_BUILD) + #define GLAD_API_CALL __attribute__ ((visibility ("default"))) extern + #else + #define GLAD_API_CALL extern + #endif + #else + #define GLAD_API_CALL extern + #endif +#endif + +#ifdef APIENTRY + #define GLAD_API_PTR APIENTRY +#elif GLAD_PLATFORM_WIN32 + #define GLAD_API_PTR __stdcall +#else + #define GLAD_API_PTR +#endif #ifndef GLAPI -# if defined(GLAD_GLAPI_EXPORT) -# if defined(_WIN32) || defined(__CYGWIN__) -# if defined(GLAD_GLAPI_EXPORT_BUILD) -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllexport)) extern -# else -# define GLAPI __declspec(dllexport) extern -# endif -# else -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllimport)) extern -# else -# define GLAPI __declspec(dllimport) extern -# endif -# endif -# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) -# define GLAPI __attribute__ ((visibility ("default"))) extern -# else -# define GLAPI extern -# endif -# else -# define GLAPI extern -# endif +#define GLAPI GLAD_API_CALL #endif -GLAPI struct gladGLversionStruct GLVersion; +#ifndef GLAPIENTRY +#define GLAPIENTRY GLAD_API_PTR +#endif -GLAPI int gladLoadGL(void); +#define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor) +#define GLAD_VERSION_MAJOR(version) (version / 10000) +#define GLAD_VERSION_MINOR(version) (version % 10000) -GLAPI int gladLoadGLLoader(GLADloadproc); +#define GLAD_GENERATOR_VERSION "2.0.4" + +typedef void (*GLADapiproc)(void); + +typedef GLADapiproc (*GLADloadfunc)(const char *name); +typedef GLADapiproc (*GLADuserptrloadfunc)(void *userptr, const char *name); + +typedef void (*GLADprecallback)(const char *name, GLADapiproc apiproc, int len_args, ...); +typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apiproc, int len_args, ...); + +#endif /* GLAD_PLATFORM_H_ */ + +#define GL_1PASS_EXT 0x80A1 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_EXT 0x80CC +#define GL_422_REV_AVERAGE_EXT 0x80CF +#define GL_422_REV_EXT 0x80CD +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_ABGR_EXT 0x8000 +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_ADD_ATI 0x8963 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_ALL_PIXELS_AMD 0xFFFFFFFF +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_ALPHA 0x1906 +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16F_ARB 0x881C +#define GL_ALPHA16F_EXT 0x881C +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_ALPHA16_EXT 0x803E +#define GL_ALPHA16_SNORM 0x9018 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA8_SNORM 0x9014 +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#define GL_ALPHA_MAX_SGIX 0x8321 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_REF_COMMAND_NV 0x000F +#define GL_ALPHA_SNORM 0x9010 +#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D +#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F +#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E +#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF +#define GL_ALREADY_SIGNALED 0x911A +#define GL_ALWAYS 0x0207 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_AND 0x1501 +#define GL_AND_INVERTED 0x1504 +#define GL_AND_REVERSE 0x1502 +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_ARC_TO_NV 0xFE +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#define GL_ARRAY_SIZE 0x92FB +#define GL_ARRAY_STRIDE 0x92FE +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_ASYNC_MARKER_SGIX 0x8329 +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 +#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ATTENUATION_EXT 0x834D +#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#define GL_AVERAGE_EXT 0x8335 +#define GL_AVERAGE_HP 0x8160 +#define GL_BACK 0x0405 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_RIGHT 0x0403 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_BEVEL_NV 0x90A6 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_BGRA8_EXT 0x93A1 +#define GL_BGRA_EXT 0x80E1 +#define GL_BGRA_INTEGER 0x8D9B +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_BGR_EXT 0x80E0 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC +#define GL_BLEND 0x0BE2 +#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_COLOR_COMMAND_NV 0x000B +#define GL_BLEND_COLOR_EXT 0x8005 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#define GL_BLEND_EQUATION_EXT 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLOCK_INDEX 0x92FD +#define GL_BLUE 0x1905 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_BLUE_NV 0x1905 +#define GL_BOLD_BIT_NV 0x01 +#define GL_BOOL 0x8B56 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_BUFFER 0x82E0 +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_BUFFER_USAGE 0x8765 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_TARGET_ATI 0x877C +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_BYTE 0x1400 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_CCW 0x0901 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLEAR 0x1500 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 +#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 +#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 +#define GL_CLIP_DEPTH_MODE 0x935D +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_ORIGIN 0x935C +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_CMYKA_EXT 0x800D +#define GL_CMYK_EXT 0x800C +#define GL_CND0_ATI 0x896B +#define GL_CND_ATI 0x896A +#define GL_COLOR 0x1800 +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_COLORBURN_KHR 0x929A +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_KHR 0x9299 +#define GL_COLORDODGE_NV 0x9299 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_COLOR_ENCODING 0x8296 +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_COMBINE4_NV 0x8503 +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_COMPILE_STATUS 0x8B81 +#define GL_COMPLETION_STATUS_ARB 0x91B1 +#define GL_COMPLETION_STATUS_KHR 0x91B1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_RG 0x8226 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 +#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_CONDITION_SATISFIED 0x911C +#define GL_CONFORMANT_NV 0x9374 +#define GL_CONIC_CURVE_TO_NV 0x1A +#define GL_CONJOINT_NV 0x9284 +#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE +#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 +#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B +#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 +#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A +#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D +#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_CONSTANT_ARB 0x8576 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_CONSTANT_EXT 0x8576 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_FLAGS 0x821E +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_CONTEXT_LOST 0x0507 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 +#define GL_CONTINUOUS_AMD 0x9007 +#define GL_CONTRAST_NV 0x92A1 +#define GL_CONVEX_HULL_NV 0x908B +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_2_ATI 0x8943 +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_COORD_REPLACE_ARB 0x8862 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COVERAGE_MODULATION_NV 0x9332 +#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 +#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_CUBIC_EXT 0x8334 +#define GL_CUBIC_HP 0x815F +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_CULL_MODES_NV 0x86E0 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_IBM 103050 +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_CURRENT_QUERY 0x8865 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_CW 0x0900 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 +#define GL_DARKEN_KHR 0x9297 +#define GL_DARKEN_NV 0x9297 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DECODE_EXT 0x8A49 +#define GL_DECR 0x1E03 +#define GL_DECR_WRAP 0x8508 +#define GL_DECR_WRAP_EXT 0x8508 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_DELETE_STATUS 0x8B80 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DEPTH 0x1801 +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +#define GL_DEPTH_CLAMP 0x864F +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_NV 0x864F +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_DEPTH_SAMPLES_NV 0x932D +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DETACHED_BUFFERS_NV 0x95AB +#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 +#define GL_DETACHED_TEXTURES_NV 0x95AA +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DIFFERENCE_KHR 0x929E +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISCARD_ATI 0x8763 +#define GL_DISCARD_NV 0x8530 +#define GL_DISCRETE_AMD 0x9006 +#define GL_DISJOINT_NV 0x9283 +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +#define GL_DITHER 0x0BD0 +#define GL_DONT_CARE 0x1100 +#define GL_DOT2_ADD_ATI 0x896C +#define GL_DOT3_ATI 0x8966 +#define GL_DOT3_RGBA_ARB 0x86AF +#define GL_DOT3_RGBA_EXT 0x8741 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT4_ATI 0x8967 +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_DOUBLE 0x140A +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 +#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 +#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#define GL_DRAW_BUFFER15_ATI 0x8834 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 +#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 +#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_DSDT_NV 0x86F5 +#define GL_DST_ALPHA 0x0304 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_COLOR 0x0306 +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_BIAS_NV 0x8717 +#define GL_DT_SCALE_NV 0x8711 +#define GL_DU8DV8_ATI 0x877A +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_DUDV_ATI 0x8779 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_DYNAMIC_COPY_ARB 0x88EA +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_MAP_NV 0x855F +#define GL_EQUAL 0x0202 +#define GL_EQUIV 0x1509 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EXCLUSION_KHR 0x92A0 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_EXCLUSIVE_EXT 0x8F11 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXTENSIONS 0x1F03 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_EYE_PLANE 0x2502 +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_EYE_RADIAL_NV 0x855B +#define GL_E_TIMES_F_NV 0x8531 +#define GL_FACTOR_MAX_AMD 0x901D +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FAILURE_NV 0x9030 +#define GL_FALSE 0 +#define GL_FASTEST 0x1101 +#define GL_FENCE_APPLE 0x8A0B +#define GL_FENCE_CONDITION_NV 0x84F4 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FIELDS_NV 0x8E27 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FILE_NAME_NV 0x9074 +#define GL_FILL 0x1B02 +#define GL_FILL_RECTANGLE_NV 0x933C +#define GL_FILTER 0x829A +#define GL_FILTER4_SGIS 0x8146 +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_FIXED 0x140C +#define GL_FIXED_OES 0x140C +#define GL_FIXED_ONLY 0x891D +#define GL_FIXED_ONLY_ARB 0x891D +#define GL_FLOAT 0x1406 +#define GL_FLOAT16_MAT2_AMD 0x91C5 +#define GL_FLOAT16_MAT2x3_AMD 0x91C8 +#define GL_FLOAT16_MAT2x4_AMD 0x91C9 +#define GL_FLOAT16_MAT3_AMD 0x91C6 +#define GL_FLOAT16_MAT3x2_AMD 0x91CA +#define GL_FLOAT16_MAT3x4_AMD 0x91CB +#define GL_FLOAT16_MAT4_AMD 0x91C7 +#define GL_FLOAT16_MAT4x2_AMD 0x91CC +#define GL_FLOAT16_MAT4x3_AMD 0x91CD +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4 0x8B5C +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_FOG 0x0B60 +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 +#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 +#define GL_FONT_UNAVAILABLE_NV 0x936A +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_UNINTELLIGIBLE_NV 0x936B +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE +#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_FRAGMENT_INPUT_NV 0x936D +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 +#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_FRAMEBUFFER 0x8D40 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC +#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAME_NV 0x8E26 +#define GL_FRONT 0x0404 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_FRONT_FACE 0x0B46 +#define GL_FRONT_FACE_COMMAND_NV 0x0012 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEQUAL 0x0206 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GREATER 0x0204 +#define GL_GREEN 0x1904 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_GREEN_NV 0x1904 +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_HALF_APPLE 0x140B +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_HALF_FLOAT 0x140B +#define GL_HALF_FLOAT_ARB 0x140B +#define GL_HALF_FLOAT_NV 0x140B +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_HARDLIGHT_KHR 0x929B +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_HIGH_INT 0x8DF5 +#define GL_HILO16_NV 0x86F8 +#define GL_HILO8_NV 0x885E +#define GL_HILO_NV 0x86F4 +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HI_BIAS_NV 0x8714 +#define GL_HI_SCALE_NV 0x870E +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_HSL_COLOR_KHR 0x92AF +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_KHR 0x92AD +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_KHR 0x92B0 +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_KHR 0x92AE +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_IDENTITY_NV 0x862A +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_INCLUSIVE_EXT 0x8F10 +#define GL_INCR 0x1E02 +#define GL_INCR_WRAP 0x8507 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +#define GL_INT 0x1404 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_ARB 0x140E +#define GL_INT64_NV 0x140E +#define GL_INT64_VEC2_ARB 0x8FE9 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_ARB 0x8FEA +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_ARB 0x8FEB +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_INTENSITY16_EXT 0x804D +#define GL_INTENSITY16_SNORM 0x901B +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_INGR 0x8568 +#define GL_INTERLACE_READ_OML 0x8981 +#define GL_INTERLACE_SGIX 0x8094 +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_INT_2_10_10_10_REV 0x8D9F +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_INVALID_INDEX 0xFFFFFFFF +#define GL_INVALID_OPERATION 0x0502 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_INVARIANT_EXT 0x87C2 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVERSE_NV 0x862B +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_INVERT 0x150A +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#define GL_ISOLINES 0x8E7A +#define GL_IS_PER_PATCH 0x92E7 +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_KEEP 0x1E00 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_LAYER_NV 0x8DAA +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LEFT 0x0406 +#define GL_LEQUAL 0x0203 +#define GL_LERP_ATI 0x8969 +#define GL_LESS 0x0201 +#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 +#define GL_LIGHTEN_KHR 0x9298 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#define GL_LINE 0x1B01 +#define GL_LINEAR 0x2601 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_LINES 0x0001 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_LINE_STRIP 0x0003 +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_LINE_TO_NV 0x04 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_COMMAND_NV 0x000D +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINK_STATUS 0x8B82 +#define GL_LIST_PRIORITY_SGIX 0x8182 +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_EXT 0x87C4 +#define GL_LOCATION 0x930E +#define GL_LOCATION_COMPONENT 0x934A +#define GL_LOCATION_INDEX 0x930F +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_LOW_FLOAT 0x8DF0 +#define GL_LOW_INT 0x8DF3 +#define GL_LO_BIAS_NV 0x8715 +#define GL_LO_SCALE_NV 0x870F +#define GL_LUID_SIZE_EXT 8 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_MAD_ATI 0x8968 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_MAJOR_VERSION 0x821B +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP2_BINORMAL_EXT 0x8447 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX7_NV 0x8637 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX_EXT 0x87C0 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MATRIX_STRIDE 0x92FF +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_MAX 0x8008 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 +#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#define GL_MAX_CULL_DISTANCES 0x82F9 +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD +#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_MAX_EXT 0x8008 +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_LGPU_GPUS_NVX 0x92BA +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 +#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 +#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 +#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 +#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 +#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 +#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 +#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 +#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 +#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 +#define GL_MAX_MESH_VIEWS_NV 0x9557 +#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 +#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 +#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D +#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C +#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A +#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A +#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E +#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 +#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 +#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 +#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B +#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 +#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +#define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6 +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VIEWPORTS 0x825B +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_VIEWS_OVR 0x9631 +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 +#define GL_MEMORY_ATTACHABLE_NV 0x95A8 +#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 +#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 +#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF +#define GL_MESH_OUTPUT_TYPE_NV 0x957B +#define GL_MESH_PRIMITIVES_OUT_NV 0x957A +#define GL_MESH_SHADER_BIT_NV 0x00000040 +#define GL_MESH_SHADER_NV 0x9559 +#define GL_MESH_SUBROUTINE_NV 0x957C +#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E +#define GL_MESH_VERTICES_OUT_NV 0x9579 +#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E +#define GL_MIN 0x8007 +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_MINOR_VERSION 0x821C +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MIN_EXT 0x8007 +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIPMAP 0x8293 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F +#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW1_EXT 0x850A +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_MOVE_TO_NV 0x02 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOV_ATI 0x8961 +#define GL_MULTICAST_GPUS_NV 0x92BA +#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 +#define GL_MULTIPLY_KHR 0x9294 +#define GL_MULTIPLY_NV 0x9294 +#define GL_MULTISAMPLE 0x809D +#define GL_MULTISAMPLES_NV 0x9371 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 +#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_MUL_ATI 0x8964 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +#define GL_NAME_LENGTH 0x92F9 +#define GL_NAND 0x150E +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NEAREST 0x2600 +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NEGATIVE_ONE_TO_ONE 0x935E +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEVER 0x0200 +#define GL_NEXT_BUFFER_NV -2 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_NICEST 0x1102 +#define GL_NONE 0 +#define GL_NOOP 0x1505 +#define GL_NOP_COMMAND_NV 0x0001 +#define GL_NOR 0x1508 +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_NOTEQUAL 0x0205 +#define GL_NO_ERROR 0 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_NUM_EXTENSIONS 0x821D +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA +#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 +#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_OBJECT_TYPE 0x9112 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#define GL_OFFSET 0x92FC +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_ONE 1 +#define GL_ONE_EXT 0x87DE +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_OPERAND2_ALPHA_EXT 0x859A +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND3_ALPHA_NV 0x859B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_MOV_EXT 0x8799 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_SUB_EXT 0x8796 +#define GL_OR 0x1507 +#define GL_OR_INVERTED 0x150D +#define GL_OR_REVERSE 0x150B +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_OVERLAY_KHR 0x9296 +#define GL_OVERLAY_NV 0x9296 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_PACK_INVERT_MESA 0x8758 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_PARAMETER_BUFFER 0x80EE +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING 0x80EF +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_PATCHES 0x000E +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 +#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 +#define GL_PATH_MODELVIEW_NV 0x1700 +#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 +#define GL_PATH_PROJECTION_NV 0x1701 +#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 +#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERTURB_EXT 0x85AE +#define GL_PER_GPU_STORAGE_BIT_NV 0x0800 +#define GL_PER_GPU_STORAGE_NV 0x9548 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +#define GL_PHONG_HINT_WIN 0x80EB +#define GL_PHONG_WIN 0x80EA +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE +#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_POINT 0x1B00 +#define GL_POINTS 0x0000 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +#define GL_POLYGON_OFFSET_CLAMP 0x8E1B +#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B +#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_PRESENT_DURATION_NV 0x8E2B +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESERVE_ATI 0x8762 +#define GL_PREVIOUS_ARB 0x8578 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_PRIMITIVES_SUBMITTED 0x82EF +#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF +#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PROGRAM 0x82E2 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_PURGEABLE_APPLE 0x8A1D +#define GL_PURGED_CONTEXT_RESET_NV 0x92BB +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_QUADS 0x0007 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_QUERY 0x82E3 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 +#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 +#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 +#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 +#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 +#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_TARGET 0x82EA +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_WAIT_INVERTED 0x8E17 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_R16 0x822A +#define GL_R16F 0x822D +#define GL_R16F_EXT 0x822D +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R16_SNORM 0x8F98 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R32F 0x822E +#define GL_R32F_EXT 0x822E +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_R3_G3_B2 0x2A10 +#define GL_R8 0x8229 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R8_EXT 0x8229 +#define GL_R8_SNORM 0x8F94 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A +#define GL_RASTER_MULTISAMPLE_EXT 0x9327 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#define GL_RASTER_SAMPLES_EXT 0x9328 +#define GL_READ_BUFFER 0x0C02 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_READ_ONLY 0x88B8 +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +#define GL_READ_WRITE 0x88BA +#define GL_READ_WRITE_ARB 0x88BA +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_RECT_NV 0xF6 +#define GL_RED 0x1903 +#define GL_REDUCE_EXT 0x8016 +#define GL_RED_BIT_ATI 0x00000001 +#define GL_RED_INTEGER 0x8D94 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_RED_NV 0x1903 +#define GL_RED_SNORM 0x8F90 +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 +#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_REFLECTION_MAP_NV 0x8512 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_2_ATI 0x8923 +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_RELATIVE_RECT_NV 0xF7 +#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB +#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED +#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF +#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERER 0x1F01 +#define GL_RENDER_GPU_MASK_NV 0x9558 +#define GL_REPEAT 0x2901 +#define GL_REPLACE 0x1E01 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACE_EXT 0x8062 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 +#define GL_RESCALE_NORMAL_EXT 0x803A +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_RESTART_SUN 0x0001 +#define GL_RETAINED_APPLE 0x8A1B +#define GL_RG 0x8227 +#define GL_RG16 0x822C +#define GL_RG16F 0x822F +#define GL_RG16F_EXT 0x822F +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG16_SNORM 0x8F99 +#define GL_RG32F 0x8230 +#define GL_RG32F_EXT 0x8230 +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_RG8 0x822B +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG8_EXT 0x822B +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB 0x1907 +#define GL_RGB10 0x8052 +#define GL_RGB10_A2 0x8059 +#define GL_RGB10_A2UI 0x906F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGB16F 0x881B +#define GL_RGB16F_ARB 0x881B +#define GL_RGB16F_EXT 0x881B +#define GL_RGB16I 0x8D89 +#define GL_RGB16I_EXT 0x8D89 +#define GL_RGB16UI 0x8D77 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_RGB16_EXT 0x8054 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGB2_EXT 0x804E +#define GL_RGB32F 0x8815 +#define GL_RGB32F_ARB 0x8815 +#define GL_RGB32F_EXT 0x8815 +#define GL_RGB32I 0x8D83 +#define GL_RGB32I_EXT 0x8D83 +#define GL_RGB32UI 0x8D71 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_RGB4 0x804F +#define GL_RGB4_EXT 0x804F +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGB5 0x8050 +#define GL_RGB565 0x8D62 +#define GL_RGB5_A1 0x8057 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB8I 0x8D8F +#define GL_RGB8I_EXT 0x8D8F +#define GL_RGB8UI 0x8D7D +#define GL_RGB8UI_EXT 0x8D7D +#define GL_RGB8_EXT 0x8051 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGB9_E5 0x8C3D +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_RGBA 0x1908 +#define GL_RGBA12 0x805A +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16 0x805B +#define GL_RGBA16F 0x881A +#define GL_RGBA16F_ARB 0x881A +#define GL_RGBA16F_EXT 0x881A +#define GL_RGBA16I 0x8D88 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGBA16UI 0x8D76 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGBA16_EXT 0x805B +#define GL_RGBA16_SNORM 0x8F9B +#define GL_RGBA2 0x8055 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA32F 0x8814 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGBA32I 0x8D82 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGBA32UI 0x8D70 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGBA4 0x8056 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA8 0x8058 +#define GL_RGBA8I 0x8D8E +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGBA8UI 0x8D7C +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGBA8_EXT 0x8058 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#define GL_RGBA_SNORM 0x8F93 +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGB_RAW_422_APPLE 0x8A51 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_RGB_SNORM 0x8F92 +#define GL_RG_INTEGER 0x8228 +#define GL_RG_SNORM 0x8F91 +#define GL_RIGHT 0x0407 +#define GL_ROUNDED_RECT2_NV 0xEA +#define GL_ROUNDED_RECT4_NV 0xEC +#define GL_ROUNDED_RECT8_NV 0xEE +#define GL_ROUNDED_RECT_NV 0xE8 +#define GL_ROUND_NV 0x90A4 +#define GL_SAMPLER 0x82E6 +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SAMPLES_PASSED_ARB 0x8914 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_LOCATION_ARB 0x8E50 +#define GL_SAMPLE_LOCATION_NV 0x8E50 +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_SCALAR_EXT 0x87BE +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 +#define GL_SCISSOR_COMMAND_NV 0x0011 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_SCREEN_KHR 0x9295 +#define GL_SCREEN_NV 0x9295 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4 +#define GL_SEMAPHORE_TYPE_NV 0x95B3 +#define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#define GL_SET 0x150F +#define GL_SET_AMD 0x874A +#define GL_SHADER 0x82E1 +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 +#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_TYPE 0x8B4F +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F +#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 +#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A +#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B +#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 +#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C +#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D +#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E +#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B +#define GL_SHADING_RATE_IMAGE_NV 0x9563 +#define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 +#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E +#define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 +#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D +#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C +#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 +#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE +#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF +#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_SHARED_EDGE_NV 0xC0 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +#define GL_SHORT 0x1402 +#define GL_SIGNALED 0x9119 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SKIP_COMPONENTS1_NV -6 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_DECODE_EXT 0x8A4A +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_SLICE_ACCUM_SUN 0x85CC +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_SM_COUNT_NV 0x933B +#define GL_SOFTLIGHT_KHR 0x929C +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SPARE0_NV 0x852E +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_SPARE1_NV 0x852F +#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 +#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +#define GL_SPIR_V_BINARY 0x9552 +#define GL_SPIR_V_BINARY_ARB 0x9552 +#define GL_SPIR_V_EXTENSIONS 0x9553 +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SQUARE_NV 0x90A3 +#define GL_SR8_EXT 0x8FBD +#define GL_SRC1_ALPHA 0x8589 +#define GL_SRC1_COLOR 0x88F9 +#define GL_SRC_ALPHA 0x0302 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_COLOR 0x0300 +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_SRG8_EXT 0x8FBE +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB_DECODE_ARB 0x8299 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_STANDARD_FONT_FORMAT_NV 0x936C +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_STATIC_ATI 0x8760 +#define GL_STATIC_COPY 0x88E6 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_INDEX 0x1901 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_REF_COMMAND_NV 0x000C +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_STENCIL_SAMPLES_NV 0x932E +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STEREO 0x0C33 +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_SHARED_APPLE 0x85BF +#define GL_STREAM_COPY 0x88E2 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 +#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 +#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 +#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 +#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 +#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 +#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 +#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 +#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 +#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 +#define GL_SUBGROUP_SIZE_KHR 0x9532 +#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 +#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 +#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_SUB_ATI 0x8965 +#define GL_SUCCESS_NV 0x902F +#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 +#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 +#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TASK_SHADER_BIT_NV 0x00000080 +#define GL_TASK_SHADER_NV 0x955A +#define GL_TASK_SUBROUTINE_NV 0x957D +#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F +#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F +#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 +#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_TEXTURE 0x1702 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_TEXTURE31_ARB 0x84DF +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_TEXTURE_3D 0x806F +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#define GL_TEXTURE_NORMAL_EXT 0x85AF +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 +#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_TARGET 0x1006 +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 +#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 +#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595 +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF +#define GL_TIMESTAMP 0x8E28 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC +#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_NV 0x862C +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_FAN 0x0006 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_TRIANGLE_MESH_SUN 0x8615 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_TRUE 1 +#define GL_TYPE 0x92FA +#define GL_UNCORRELATED_NV 0x9282 +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_UNDEFINED_VERTEX 0x8260 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNSIGNALED 0x9118 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_UNSIGNED_INT64_ARB 0x140F +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_UPLOAD_GPU_MASK_NVX 0x954A +#define GL_UPPER_LEFT 0x8CA2 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_UTF16_NV 0x909B +#define GL_UTF8_NV 0x909A +#define GL_UUID_SIZE_EXT 16 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_EXT 0x87C1 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_VECTOR_EXT 0x87BF +#define GL_VENDOR 0x1F00 +#define GL_VERSION 0x1F02 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 +#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SOURCE_ATI 0x8774 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_VERTEX_TEXTURE 0x829B +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_VERTICES_SUBMITTED 0x82EE +#define GL_VERTICES_SUBMITTED_ARB 0x82EE +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIEWPORT 0x0BA2 +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_VIEWPORT_COMMAND_NV 0x0010 +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C +#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D +#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 +#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B +#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 +#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 +#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 +#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 +#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 +#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 +#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 +#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 +#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 +#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 +#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A +#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B +#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C +#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D +#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E +#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_EAC_R11 0x9383 +#define GL_VIEW_CLASS_EAC_RG11 0x9384 +#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 +#define GL_VIEW_CLASS_ETC2_RGB 0x9385 +#define GL_VIEW_CLASS_ETC2_RGBA 0x9386 +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_WAIT_FAILED 0x911D +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WEIGHTED_AVERAGE_ARB 0x9367 +#define GL_WEIGHTED_AVERAGE_EXT 0x9367 +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_WINDOW_RECTANGLE_EXT 0x8F12 +#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 +#define GL_WRAP_BORDER_SUN 0x81D4 +#define GL_WRITE_DISCARD_NV 0x88BE +#define GL_WRITE_ONLY 0x88B9 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_W_EXT 0x87D8 +#define GL_XOR 0x1506 +#define GL_XOR_NV 0x1506 +#define GL_X_EXT 0x87D5 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_YCBCR_MESA 0x8757 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCRCBA_SGIX 0x8319 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#define GL_YCRCB_SGIX 0x8318 +#define GL_Y_EXT 0x87D6 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_ZERO 0 +#define GL_ZERO_EXT 0x87DD +#define GL_ZERO_TO_ONE 0x935F +#define GL_Z_EXT 0x87D7 -GLAPI int gladLoadGLES2Loader(GLADloadproc); -#include #include -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; -typedef signed char GLbyte; -typedef short GLshort; +typedef khronos_int8_t GLbyte; +typedef khronos_uint8_t GLubyte; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; typedef int GLint; -typedef int GLclampx; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; typedef unsigned int GLuint; +typedef khronos_int32_t GLclampx; typedef int GLsizei; -typedef float GLfloat; -typedef float GLclampf; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void *GLeglClientBufferEXT; @@ -947,17182 +4700,8903 @@ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif -typedef unsigned short GLhalfARB; -typedef unsigned short GLhalf; -typedef GLint GLfixed; +typedef khronos_uint16_t GLhalf; +typedef khronos_uint16_t GLhalfARB; +typedef khronos_int32_t GLfixed; +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) typedef khronos_intptr_t GLintptr; +#else +typedef khronos_intptr_t GLintptr; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_intptr_t GLintptrARB; +#else +typedef khronos_intptr_t GLintptrARB; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) typedef khronos_ssize_t GLsizeiptr; -typedef int64_t GLint64; -typedef uint64_t GLuint64; -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) -typedef long GLintptrARB; #else -typedef ptrdiff_t GLintptrARB; +typedef khronos_ssize_t GLsizeiptr; #endif #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) -typedef long GLsizeiptrARB; +typedef khronos_ssize_t GLsizeiptrARB; #else -typedef ptrdiff_t GLsizeiptrARB; +typedef khronos_ssize_t GLsizeiptrARB; #endif -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; +typedef khronos_int64_t GLint64; +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64; +typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef void (GLAD_API_PTR *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (GLAD_API_PTR *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (GLAD_API_PTR *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (GLAD_API_PTR *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); typedef unsigned short GLhalfNV; typedef GLintptr GLvdpauSurfaceNV; -typedef void (APIENTRY *GLVULKANPROCNV)(void); -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_FALSE 0 -#define GL_TRUE 1 -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_NONE 0 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_VIEWPORT 0x0BA2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_TEXTURE 0x1702 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_REPEAT 0x2901 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_DOUBLE 0x140A -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_BLEND_COLOR 0x8005 -#define GL_BLEND_EQUATION 0x8009 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_FUNC_SUBTRACT 0x800A -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_SRC1_ALPHA 0x8589 -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_COLOR_ATTACHMENT16 0x8CF0 -#define GL_COLOR_ATTACHMENT17 0x8CF1 -#define GL_COLOR_ATTACHMENT18 0x8CF2 -#define GL_COLOR_ATTACHMENT19 0x8CF3 -#define GL_COLOR_ATTACHMENT20 0x8CF4 -#define GL_COLOR_ATTACHMENT21 0x8CF5 -#define GL_COLOR_ATTACHMENT22 0x8CF6 -#define GL_COLOR_ATTACHMENT23 0x8CF7 -#define GL_COLOR_ATTACHMENT24 0x8CF8 -#define GL_COLOR_ATTACHMENT25 0x8CF9 -#define GL_COLOR_ATTACHMENT26 0x8CFA -#define GL_COLOR_ATTACHMENT27 0x8CFB -#define GL_COLOR_ATTACHMENT28 0x8CFC -#define GL_COLOR_ATTACHMENT29 0x8CFD -#define GL_COLOR_ATTACHMENT30 0x8CFE -#define GL_COLOR_ATTACHMENT31 0x8CFF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#define GL_INDEX 0x8222 -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#define GL_HALF_FLOAT 0x140B -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFF -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -#define GL_DEPTH_CLAMP 0x864F -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#define GL_SAMPLER_BINDING 0x8919 -#define GL_RGB10_A2UI 0x906F -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#define GL_INT_2_10_10_10_REV 0x8D9F -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -#define GL_PATCHES 0x000E -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -#define GL_ISOLINES 0x8E7A -#define GL_QUADS 0x0007 -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_RGB565 0x8D62 -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -#define GL_COPY_READ_BUFFER_BINDING 0x8F36 -#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 -#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E -#define GL_NUM_SAMPLE_COUNTS 0x9380 -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F -#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 -#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_COMPUTE_SHADER 0x91B9 -#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB -#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC -#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD -#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 -#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 -#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 -#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 -#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 -#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB -#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE -#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF -#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED -#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE -#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF -#define GL_COMPUTE_SHADER_BIT 0x00000020 -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_MAX_UNIFORM_LOCATIONS 0x826E -#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 -#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 -#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 -#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 -#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 -#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 -#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 -#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 -#define GL_INTERNALFORMAT_SUPPORTED 0x826F -#define GL_INTERNALFORMAT_PREFERRED 0x8270 -#define GL_INTERNALFORMAT_RED_SIZE 0x8271 -#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 -#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 -#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 -#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 -#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 -#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 -#define GL_INTERNALFORMAT_RED_TYPE 0x8278 -#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 -#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A -#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B -#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C -#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D -#define GL_MAX_WIDTH 0x827E -#define GL_MAX_HEIGHT 0x827F -#define GL_MAX_DEPTH 0x8280 -#define GL_MAX_LAYERS 0x8281 -#define GL_MAX_COMBINED_DIMENSIONS 0x8282 -#define GL_COLOR_COMPONENTS 0x8283 -#define GL_DEPTH_COMPONENTS 0x8284 -#define GL_STENCIL_COMPONENTS 0x8285 -#define GL_COLOR_RENDERABLE 0x8286 -#define GL_DEPTH_RENDERABLE 0x8287 -#define GL_STENCIL_RENDERABLE 0x8288 -#define GL_FRAMEBUFFER_RENDERABLE 0x8289 -#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A -#define GL_FRAMEBUFFER_BLEND 0x828B -#define GL_READ_PIXELS 0x828C -#define GL_READ_PIXELS_FORMAT 0x828D -#define GL_READ_PIXELS_TYPE 0x828E -#define GL_TEXTURE_IMAGE_FORMAT 0x828F -#define GL_TEXTURE_IMAGE_TYPE 0x8290 -#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 -#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 -#define GL_MIPMAP 0x8293 -#define GL_MANUAL_GENERATE_MIPMAP 0x8294 -#define GL_AUTO_GENERATE_MIPMAP 0x8295 -#define GL_COLOR_ENCODING 0x8296 -#define GL_SRGB_READ 0x8297 -#define GL_SRGB_WRITE 0x8298 -#define GL_FILTER 0x829A -#define GL_VERTEX_TEXTURE 0x829B -#define GL_TESS_CONTROL_TEXTURE 0x829C -#define GL_TESS_EVALUATION_TEXTURE 0x829D -#define GL_GEOMETRY_TEXTURE 0x829E -#define GL_FRAGMENT_TEXTURE 0x829F -#define GL_COMPUTE_TEXTURE 0x82A0 -#define GL_TEXTURE_SHADOW 0x82A1 -#define GL_TEXTURE_GATHER 0x82A2 -#define GL_TEXTURE_GATHER_SHADOW 0x82A3 -#define GL_SHADER_IMAGE_LOAD 0x82A4 -#define GL_SHADER_IMAGE_STORE 0x82A5 -#define GL_SHADER_IMAGE_ATOMIC 0x82A6 -#define GL_IMAGE_TEXEL_SIZE 0x82A7 -#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 -#define GL_IMAGE_PIXEL_FORMAT 0x82A9 -#define GL_IMAGE_PIXEL_TYPE 0x82AA -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF -#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 -#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 -#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 -#define GL_CLEAR_BUFFER 0x82B4 -#define GL_TEXTURE_VIEW 0x82B5 -#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 -#define GL_FULL_SUPPORT 0x82B7 -#define GL_CAVEAT_SUPPORT 0x82B8 -#define GL_IMAGE_CLASS_4_X_32 0x82B9 -#define GL_IMAGE_CLASS_2_X_32 0x82BA -#define GL_IMAGE_CLASS_1_X_32 0x82BB -#define GL_IMAGE_CLASS_4_X_16 0x82BC -#define GL_IMAGE_CLASS_2_X_16 0x82BD -#define GL_IMAGE_CLASS_1_X_16 0x82BE -#define GL_IMAGE_CLASS_4_X_8 0x82BF -#define GL_IMAGE_CLASS_2_X_8 0x82C0 -#define GL_IMAGE_CLASS_1_X_8 0x82C1 -#define GL_IMAGE_CLASS_11_11_10 0x82C2 -#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 -#define GL_VIEW_CLASS_128_BITS 0x82C4 -#define GL_VIEW_CLASS_96_BITS 0x82C5 -#define GL_VIEW_CLASS_64_BITS 0x82C6 -#define GL_VIEW_CLASS_48_BITS 0x82C7 -#define GL_VIEW_CLASS_32_BITS 0x82C8 -#define GL_VIEW_CLASS_24_BITS 0x82C9 -#define GL_VIEW_CLASS_16_BITS 0x82CA -#define GL_VIEW_CLASS_8_BITS 0x82CB -#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC -#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD -#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE -#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF -#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 -#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 -#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 -#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 -#define GL_UNIFORM 0x92E1 -#define GL_UNIFORM_BLOCK 0x92E2 -#define GL_PROGRAM_INPUT 0x92E3 -#define GL_PROGRAM_OUTPUT 0x92E4 -#define GL_BUFFER_VARIABLE 0x92E5 -#define GL_SHADER_STORAGE_BLOCK 0x92E6 -#define GL_VERTEX_SUBROUTINE 0x92E8 -#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 -#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA -#define GL_GEOMETRY_SUBROUTINE 0x92EB -#define GL_FRAGMENT_SUBROUTINE 0x92EC -#define GL_COMPUTE_SUBROUTINE 0x92ED -#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE -#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF -#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 -#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 -#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 -#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 -#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 -#define GL_ACTIVE_RESOURCES 0x92F5 -#define GL_MAX_NAME_LENGTH 0x92F6 -#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 -#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 -#define GL_NAME_LENGTH 0x92F9 -#define GL_TYPE 0x92FA -#define GL_ARRAY_SIZE 0x92FB -#define GL_OFFSET 0x92FC -#define GL_BLOCK_INDEX 0x92FD -#define GL_ARRAY_STRIDE 0x92FE -#define GL_MATRIX_STRIDE 0x92FF -#define GL_IS_ROW_MAJOR 0x9300 -#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 -#define GL_BUFFER_BINDING 0x9302 -#define GL_BUFFER_DATA_SIZE 0x9303 -#define GL_NUM_ACTIVE_VARIABLES 0x9304 -#define GL_ACTIVE_VARIABLES 0x9305 -#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 -#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 -#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A -#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B -#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C -#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D -#define GL_LOCATION 0x930E -#define GL_LOCATION_INDEX 0x930F -#define GL_IS_PER_PATCH 0x92E7 -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 -#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 -#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 -#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 -#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA -#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB -#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC -#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD -#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE -#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF -#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 -#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 -#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA -#define GL_TEXTURE_BUFFER_OFFSET 0x919D -#define GL_TEXTURE_BUFFER_SIZE 0x919E -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F -#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA -#define GL_VERTEX_BINDING_BUFFER 0x8F4F -#define GL_DISPLAY_LIST 0x82E7 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 -#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 -#define GL_TEXTURE_BUFFER_BINDING 0x8C2A -#define GL_MAP_PERSISTENT_BIT 0x0040 -#define GL_MAP_COHERENT_BIT 0x0080 -#define GL_DYNAMIC_STORAGE_BIT 0x0100 -#define GL_CLIENT_STORAGE_BIT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F -#define GL_BUFFER_STORAGE_FLAGS 0x8220 -#define GL_CLEAR_TEXTURE 0x9365 -#define GL_LOCATION_COMPONENT 0x934A -#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B -#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C -#define GL_QUERY_BUFFER 0x9192 -#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 -#define GL_QUERY_BUFFER_BINDING 0x9193 -#define GL_QUERY_RESULT_NO_WAIT 0x9194 -#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 -#define GL_CONTEXT_LOST 0x0507 -#define GL_NEGATIVE_ONE_TO_ONE 0x935E -#define GL_ZERO_TO_ONE 0x935F -#define GL_CLIP_ORIGIN 0x935C -#define GL_CLIP_DEPTH_MODE 0x935D -#define GL_QUERY_WAIT_INVERTED 0x8E17 -#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 -#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 -#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A -#define GL_MAX_CULL_DISTANCES 0x82F9 -#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA -#define GL_TEXTURE_TARGET 0x1006 -#define GL_QUERY_TARGET 0x82EA -#define GL_GUILTY_CONTEXT_RESET 0x8253 -#define GL_INNOCENT_CONTEXT_RESET 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET 0x8252 -#define GL_NO_RESET_NOTIFICATION 0x8261 -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 -#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB -#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC -#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 -#define GL_SPIR_V_BINARY 0x9552 -#define GL_PARAMETER_BUFFER 0x80EE -#define GL_PARAMETER_BUFFER_BINDING 0x80EF -#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 -#define GL_VERTICES_SUBMITTED 0x82EE -#define GL_PRIMITIVES_SUBMITTED 0x82EF -#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 -#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 -#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 -#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 -#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 -#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 -#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 -#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 -#define GL_POLYGON_OFFSET_CLAMP 0x8E1B -#define GL_SPIR_V_EXTENSIONS 0x9553 -#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 -#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF -#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC -#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 -#define GL_MULTISAMPLE_LINE_WIDTH_RANGE 0x9381 -#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY 0x9382 -#define GL_MULTIPLY 0x9294 -#define GL_SCREEN 0x9295 -#define GL_OVERLAY 0x9296 -#define GL_DARKEN 0x9297 -#define GL_LIGHTEN 0x9298 -#define GL_COLORDODGE 0x9299 -#define GL_COLORBURN 0x929A -#define GL_HARDLIGHT 0x929B -#define GL_SOFTLIGHT 0x929C -#define GL_DIFFERENCE 0x929E -#define GL_EXCLUSION 0x92A0 -#define GL_HSL_HUE 0x92AD -#define GL_HSL_SATURATION 0x92AE -#define GL_HSL_COLOR 0x92AF -#define GL_HSL_LUMINOSITY 0x92B0 -#define GL_PRIMITIVE_BOUNDING_BOX 0x92BE -#define GL_COMPRESSED_RGBA_ASTC_4x4 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD -#ifndef GL_VERSION_1_0 +typedef void (GLAD_API_PTR *GLVULKANPROCNV)(void); + + #define GL_VERSION_1_0 1 -GLAPI int GLAD_GL_VERSION_1_0; -typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); -GLAPI PFNGLCULLFACEPROC glad_glCullFace; -#define glCullFace glad_glCullFace -typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); -GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; -#define glFrontFace glad_glFrontFace -typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); -GLAPI PFNGLHINTPROC glad_glHint; -#define glHint glad_glHint -typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); -GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; -#define glLineWidth glad_glLineWidth -typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); -GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; -#define glPointSize glad_glPointSize -typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); -GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; -#define glPolygonMode glad_glPolygonMode -typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLSCISSORPROC glad_glScissor; -#define glScissor glad_glScissor -typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -#define glTexParameterf glad_glTexParameterf -typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -#define glTexParameterfv glad_glTexParameterfv -typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -#define glTexParameteri glad_glTexParameteri -typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -#define glTexParameteriv glad_glTexParameteriv -typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; -#define glTexImage1D glad_glTexImage1D -typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -#define glTexImage2D glad_glTexImage2D -typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); -GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; -#define glDrawBuffer glad_glDrawBuffer -typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); -GLAPI PFNGLCLEARPROC glad_glClear; -#define glClear glad_glClear -typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; -#define glClearColor glad_glClearColor -typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); -GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; -#define glClearStencil glad_glClearStencil -typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); -GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; -#define glClearDepth glad_glClearDepth -typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); -GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; -#define glStencilMask glad_glStencilMask -typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI PFNGLCOLORMASKPROC glad_glColorMask; -#define glColorMask glad_glColorMask -typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); -GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; -#define glDepthMask glad_glDepthMask -typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); -GLAPI PFNGLDISABLEPROC glad_glDisable; -#define glDisable glad_glDisable -typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); -GLAPI PFNGLENABLEPROC glad_glEnable; -#define glEnable glad_glEnable -typedef void (APIENTRYP PFNGLFINISHPROC)(void); -GLAPI PFNGLFINISHPROC glad_glFinish; -#define glFinish glad_glFinish -typedef void (APIENTRYP PFNGLFLUSHPROC)(void); -GLAPI PFNGLFLUSHPROC glad_glFlush; -#define glFlush glad_glFlush -typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); -GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; -#define glBlendFunc glad_glBlendFunc -typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); -GLAPI PFNGLLOGICOPPROC glad_glLogicOp; -#define glLogicOp glad_glLogicOp -typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; -#define glStencilFunc glad_glStencilFunc -typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); -GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; -#define glStencilOp glad_glStencilOp -typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); -GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; -#define glDepthFunc glad_glDepthFunc -typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; -#define glPixelStoref glad_glPixelStoref -typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; -#define glPixelStorei glad_glPixelStorei -typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); -GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; -#define glReadBuffer glad_glReadBuffer -typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); -GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; -#define glReadPixels glad_glReadPixels -typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); -GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -#define glGetBooleanv glad_glGetBooleanv -typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data); -GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; -#define glGetDoublev glad_glGetDoublev -typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); -GLAPI PFNGLGETERRORPROC glad_glGetError; -#define glGetError glad_glGetError -typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); -GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; -#define glGetFloatv glad_glGetFloatv -typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); -GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; -#define glGetIntegerv glad_glGetIntegerv -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); -GLAPI PFNGLGETSTRINGPROC glad_glGetString; -#define glGetString glad_glGetString -typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; -#define glGetTexImage glad_glGetTexImage -typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -#define glGetTexParameterfv glad_glGetTexParameterfv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -#define glGetTexParameteriv glad_glGetTexParameteriv -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; -#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; -#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv -typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); -GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; -#define glIsEnabled glad_glIsEnabled -typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); -GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; -#define glDepthRange glad_glDepthRange -typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLVIEWPORTPROC glad_glViewport; -#define glViewport glad_glViewport -#endif -#ifndef GL_VERSION_1_1 +GLAD_API_CALL int GLAD_GL_VERSION_1_0; #define GL_VERSION_1_1 1 -GLAPI int GLAD_GL_VERSION_1_1; -typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); -GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; -#define glDrawArrays glad_glDrawArrays -typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); -GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; -#define glDrawElements glad_glDrawElements -typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); -GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -#define glPolygonOffset glad_glPolygonOffset -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; -#define glCopyTexImage1D glad_glCopyTexImage1D -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -#define glCopyTexImage2D glad_glCopyTexImage2D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; -#define glCopyTexSubImage1D glad_glCopyTexSubImage1D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -#define glCopyTexSubImage2D glad_glCopyTexSubImage2D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; -#define glTexSubImage1D glad_glTexSubImage1D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -#define glTexSubImage2D glad_glTexSubImage2D -typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); -GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; -#define glBindTexture glad_glBindTexture -typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); -GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -#define glDeleteTextures glad_glDeleteTextures -typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); -GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; -#define glGenTextures glad_glGenTextures -typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); -GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; -#define glIsTexture glad_glIsTexture -#endif -#ifndef GL_VERSION_1_2 +GLAD_API_CALL int GLAD_GL_VERSION_1_1; #define GL_VERSION_1_2 1 -GLAPI int GLAD_GL_VERSION_1_2; -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; -#define glDrawRangeElements glad_glDrawRangeElements -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; -#define glTexImage3D glad_glTexImage3D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; -#define glTexSubImage3D glad_glTexSubImage3D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; -#define glCopyTexSubImage3D glad_glCopyTexSubImage3D -#endif -#ifndef GL_VERSION_1_3 +GLAD_API_CALL int GLAD_GL_VERSION_1_2; #define GL_VERSION_1_3 1 -GLAPI int GLAD_GL_VERSION_1_3; -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); -GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -#define glActiveTexture glad_glActiveTexture -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -#define glSampleCoverage glad_glSampleCoverage -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; -#define glCompressedTexImage3D glad_glCompressedTexImage3D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -#define glCompressedTexImage2D glad_glCompressedTexImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; -#define glCompressedTexImage1D glad_glCompressedTexImage1D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; -#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; -#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img); -GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; -#define glGetCompressedTexImage glad_glGetCompressedTexImage -#endif -#ifndef GL_VERSION_1_4 +GLAD_API_CALL int GLAD_GL_VERSION_1_3; #define GL_VERSION_1_4 1 -GLAPI int GLAD_GL_VERSION_1_4; -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; -#define glBlendFuncSeparate glad_glBlendFuncSeparate -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; -#define glMultiDrawArrays glad_glMultiDrawArrays -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; -#define glMultiDrawElements glad_glMultiDrawElements -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -#define glPointParameterf glad_glPointParameterf -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -#define glPointParameterfv glad_glPointParameterfv -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; -#define glPointParameteri glad_glPointParameteri -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; -#define glPointParameteriv glad_glPointParameteriv -typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; -#define glBlendColor glad_glBlendColor -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); -GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; -#define glBlendEquation glad_glBlendEquation -#endif -#ifndef GL_VERSION_1_5 +GLAD_API_CALL int GLAD_GL_VERSION_1_4; #define GL_VERSION_1_5 1 -GLAPI int GLAD_GL_VERSION_1_5; -typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; -#define glGenQueries glad_glGenQueries -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); -GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; -#define glDeleteQueries glad_glDeleteQueries -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); -GLAPI PFNGLISQUERYPROC glad_glIsQuery; -#define glIsQuery glad_glIsQuery -typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); -GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; -#define glBeginQuery glad_glBeginQuery -typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); -GLAPI PFNGLENDQUERYPROC glad_glEndQuery; -#define glEndQuery glad_glEndQuery -typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; -#define glGetQueryiv glad_glGetQueryiv -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; -#define glGetQueryObjectiv glad_glGetQueryObjectiv -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); -GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; -#define glGetQueryObjectuiv glad_glGetQueryObjectuiv -typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); -GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; -#define glBindBuffer glad_glBindBuffer -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); -GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -#define glDeleteBuffers glad_glDeleteBuffers -typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); -GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; -#define glGenBuffers glad_glGenBuffers -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); -GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; -#define glIsBuffer glad_glIsBuffer -typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); -GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; -#define glBufferData glad_glBufferData -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -#define glBufferSubData glad_glBufferSubData -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data); -GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; -#define glGetBufferSubData glad_glGetBufferSubData -typedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); -GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; -#define glMapBuffer glad_glMapBuffer -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); -GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; -#define glUnmapBuffer glad_glUnmapBuffer -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -#define glGetBufferParameteriv glad_glGetBufferParameteriv -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); -GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; -#define glGetBufferPointerv glad_glGetBufferPointerv -#endif -#ifndef GL_VERSION_2_0 +GLAD_API_CALL int GLAD_GL_VERSION_1_5; #define GL_VERSION_2_0 1 -GLAPI int GLAD_GL_VERSION_2_0; -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; -#define glBlendEquationSeparate glad_glBlendEquationSeparate -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); -GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; -#define glDrawBuffers glad_glDrawBuffers -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; -#define glStencilOpSeparate glad_glStencilOpSeparate -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; -#define glStencilFuncSeparate glad_glStencilFuncSeparate -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); -GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; -#define glStencilMaskSeparate glad_glStencilMaskSeparate -typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); -GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; -#define glAttachShader glad_glAttachShader -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name); -GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; -#define glBindAttribLocation glad_glBindAttribLocation -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); -GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; -#define glCompileShader glad_glCompileShader -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void); -GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; -#define glCreateProgram glad_glCreateProgram -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); -GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; -#define glCreateShader glad_glCreateShader -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); -GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; -#define glDeleteProgram glad_glDeleteProgram -typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); -GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; -#define glDeleteShader glad_glDeleteShader -typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); -GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; -#define glDetachShader glad_glDetachShader -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); -GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; -#define glDisableVertexAttribArray glad_glDisableVertexAttribArray -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); -GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; -#define glEnableVertexAttribArray glad_glEnableVertexAttribArray -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; -#define glGetActiveAttrib glad_glGetActiveAttrib -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; -#define glGetActiveUniform glad_glGetActiveUniform -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; -#define glGetAttachedShaders glad_glGetAttachedShaders -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; -#define glGetAttribLocation glad_glGetAttribLocation -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); -GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; -#define glGetProgramiv glad_glGetProgramiv -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; -#define glGetProgramInfoLog glad_glGetProgramInfoLog -typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); -GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; -#define glGetShaderiv glad_glGetShaderiv -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; -#define glGetShaderInfoLog glad_glGetShaderInfoLog -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; -#define glGetShaderSource glad_glGetShaderSource -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; -#define glGetUniformLocation glad_glGetUniformLocation -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); -GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; -#define glGetUniformfv glad_glGetUniformfv -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); -GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; -#define glGetUniformiv glad_glGetUniformiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params); -GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; -#define glGetVertexAttribdv glad_glGetVertexAttribdv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); -GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; -#define glGetVertexAttribfv glad_glGetVertexAttribfv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; -#define glGetVertexAttribiv glad_glGetVertexAttribiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer); -GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; -#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); -GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; -#define glIsProgram glad_glIsProgram -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); -GLAPI PFNGLISSHADERPROC glad_glIsShader; -#define glIsShader glad_glIsShader -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); -GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; -#define glLinkProgram glad_glLinkProgram -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; -#define glShaderSource glad_glShaderSource -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); -GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; -#define glUseProgram glad_glUseProgram -typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); -GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; -#define glUniform1f glad_glUniform1f -typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); -GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; -#define glUniform2f glad_glUniform2f -typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; -#define glUniform3f glad_glUniform3f -typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; -#define glUniform4f glad_glUniform4f -typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); -GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; -#define glUniform1i glad_glUniform1i -typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); -GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; -#define glUniform2i glad_glUniform2i -typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); -GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; -#define glUniform3i glad_glUniform3i -typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; -#define glUniform4i glad_glUniform4i -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; -#define glUniform1fv glad_glUniform1fv -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; -#define glUniform2fv glad_glUniform2fv -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; -#define glUniform3fv glad_glUniform3fv -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; -#define glUniform4fv glad_glUniform4fv -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; -#define glUniform1iv glad_glUniform1iv -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; -#define glUniform2iv glad_glUniform2iv -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; -#define glUniform3iv glad_glUniform3iv -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; -#define glUniform4iv glad_glUniform4iv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; -#define glUniformMatrix2fv glad_glUniformMatrix2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; -#define glUniformMatrix3fv glad_glUniformMatrix3fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; -#define glUniformMatrix4fv glad_glUniformMatrix4fv -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); -GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; -#define glValidateProgram glad_glValidateProgram -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; -#define glVertexAttrib1d glad_glVertexAttrib1d -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; -#define glVertexAttrib1dv glad_glVertexAttrib1dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); -GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; -#define glVertexAttrib1f glad_glVertexAttrib1f -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; -#define glVertexAttrib1fv glad_glVertexAttrib1fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); -GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; -#define glVertexAttrib1s glad_glVertexAttrib1s -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; -#define glVertexAttrib1sv glad_glVertexAttrib1sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; -#define glVertexAttrib2d glad_glVertexAttrib2d -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; -#define glVertexAttrib2dv glad_glVertexAttrib2dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); -GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; -#define glVertexAttrib2f glad_glVertexAttrib2f -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; -#define glVertexAttrib2fv glad_glVertexAttrib2fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); -GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; -#define glVertexAttrib2s glad_glVertexAttrib2s -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; -#define glVertexAttrib2sv glad_glVertexAttrib2sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; -#define glVertexAttrib3d glad_glVertexAttrib3d -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; -#define glVertexAttrib3dv glad_glVertexAttrib3dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; -#define glVertexAttrib3f glad_glVertexAttrib3f -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; -#define glVertexAttrib3fv glad_glVertexAttrib3fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; -#define glVertexAttrib3s glad_glVertexAttrib3s -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; -#define glVertexAttrib3sv glad_glVertexAttrib3sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; -#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; -#define glVertexAttrib4Niv glad_glVertexAttrib4Niv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; -#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; -#define glVertexAttrib4Nub glad_glVertexAttrib4Nub -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; -#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; -#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; -#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; -#define glVertexAttrib4bv glad_glVertexAttrib4bv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; -#define glVertexAttrib4d glad_glVertexAttrib4d -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; -#define glVertexAttrib4dv glad_glVertexAttrib4dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; -#define glVertexAttrib4f glad_glVertexAttrib4f -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; -#define glVertexAttrib4fv glad_glVertexAttrib4fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; -#define glVertexAttrib4iv glad_glVertexAttrib4iv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; -#define glVertexAttrib4s glad_glVertexAttrib4s -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; -#define glVertexAttrib4sv glad_glVertexAttrib4sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; -#define glVertexAttrib4ubv glad_glVertexAttrib4ubv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; -#define glVertexAttrib4uiv glad_glVertexAttrib4uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; -#define glVertexAttrib4usv glad_glVertexAttrib4usv -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; -#define glVertexAttribPointer glad_glVertexAttribPointer -#endif -#ifndef GL_VERSION_2_1 +GLAD_API_CALL int GLAD_GL_VERSION_2_0; #define GL_VERSION_2_1 1 -GLAPI int GLAD_GL_VERSION_2_1; -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; -#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; -#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; -#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; -#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; -#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; -#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv -#endif -#ifndef GL_VERSION_3_0 +GLAD_API_CALL int GLAD_GL_VERSION_2_1; #define GL_VERSION_3_0 1 -GLAPI int GLAD_GL_VERSION_3_0; -typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; -#define glColorMaski glad_glColorMaski -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data); -GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; -#define glGetBooleani_v glad_glGetBooleani_v -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); -GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; -#define glGetIntegeri_v glad_glGetIntegeri_v -typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); -GLAPI PFNGLENABLEIPROC glad_glEnablei; -#define glEnablei glad_glEnablei -typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); -GLAPI PFNGLDISABLEIPROC glad_glDisablei; -#define glDisablei glad_glDisablei -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); -GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; -#define glIsEnabledi glad_glIsEnabledi -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); -GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; -#define glBeginTransformFeedback glad_glBeginTransformFeedback -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void); -GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; -#define glEndTransformFeedback glad_glEndTransformFeedback -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; -#define glBindBufferRange glad_glBindBufferRange -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); -GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; -#define glBindBufferBase glad_glBindBufferBase -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; -#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; -#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); -GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; -#define glClampColor glad_glClampColor -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); -GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; -#define glBeginConditionalRender glad_glBeginConditionalRender -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void); -GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; -#define glEndConditionalRender glad_glEndConditionalRender -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; -#define glVertexAttribIPointer glad_glVertexAttribIPointer -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; -#define glGetVertexAttribIiv glad_glGetVertexAttribIiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params); -GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; -#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); -GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; -#define glVertexAttribI1i glad_glVertexAttribI1i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); -GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; -#define glVertexAttribI2i glad_glVertexAttribI2i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); -GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; -#define glVertexAttribI3i glad_glVertexAttribI3i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; -#define glVertexAttribI4i glad_glVertexAttribI4i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); -GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; -#define glVertexAttribI1ui glad_glVertexAttribI1ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); -GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; -#define glVertexAttribI2ui glad_glVertexAttribI2ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; -#define glVertexAttribI3ui glad_glVertexAttribI3ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; -#define glVertexAttribI4ui glad_glVertexAttribI4ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; -#define glVertexAttribI1iv glad_glVertexAttribI1iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; -#define glVertexAttribI2iv glad_glVertexAttribI2iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; -#define glVertexAttribI3iv glad_glVertexAttribI3iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; -#define glVertexAttribI4iv glad_glVertexAttribI4iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; -#define glVertexAttribI1uiv glad_glVertexAttribI1uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; -#define glVertexAttribI2uiv glad_glVertexAttribI2uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; -#define glVertexAttribI3uiv glad_glVertexAttribI3uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; -#define glVertexAttribI4uiv glad_glVertexAttribI4uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; -#define glVertexAttribI4bv glad_glVertexAttribI4bv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; -#define glVertexAttribI4sv glad_glVertexAttribI4sv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; -#define glVertexAttribI4ubv glad_glVertexAttribI4ubv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; -#define glVertexAttribI4usv glad_glVertexAttribI4usv -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); -GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; -#define glGetUniformuiv glad_glGetUniformuiv -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name); -GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; -#define glBindFragDataLocation glad_glBindFragDataLocation -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; -#define glGetFragDataLocation glad_glGetFragDataLocation -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); -GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; -#define glUniform1ui glad_glUniform1ui -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); -GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; -#define glUniform2ui glad_glUniform2ui -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; -#define glUniform3ui glad_glUniform3ui -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; -#define glUniform4ui glad_glUniform4ui -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; -#define glUniform1uiv glad_glUniform1uiv -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; -#define glUniform2uiv glad_glUniform2uiv -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; -#define glUniform3uiv glad_glUniform3uiv -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; -#define glUniform4uiv glad_glUniform4uiv -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; -#define glTexParameterIiv glad_glTexParameterIiv -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params); -GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; -#define glTexParameterIuiv glad_glTexParameterIuiv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; -#define glGetTexParameterIiv glad_glGetTexParameterIiv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params); -GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; -#define glGetTexParameterIuiv glad_glGetTexParameterIuiv -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; -#define glClearBufferiv glad_glClearBufferiv -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; -#define glClearBufferuiv glad_glClearBufferuiv -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; -#define glClearBufferfv glad_glClearBufferfv -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; -#define glClearBufferfi glad_glClearBufferfi -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); -GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; -#define glGetStringi glad_glGetStringi -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); -GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; -#define glIsRenderbuffer glad_glIsRenderbuffer -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); -GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; -#define glBindRenderbuffer glad_glBindRenderbuffer -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); -GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; -#define glDeleteRenderbuffers glad_glDeleteRenderbuffers -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); -GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; -#define glGenRenderbuffers glad_glGenRenderbuffers -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; -#define glRenderbufferStorage glad_glRenderbufferStorage -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; -#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); -GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; -#define glIsFramebuffer glad_glIsFramebuffer -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); -GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; -#define glBindFramebuffer glad_glBindFramebuffer -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); -GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; -#define glDeleteFramebuffers glad_glDeleteFramebuffers -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); -GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; -#define glGenFramebuffers glad_glGenFramebuffers -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); -GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; -#define glCheckFramebufferStatus glad_glCheckFramebufferStatus -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; -#define glFramebufferTexture1D glad_glFramebufferTexture1D -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; -#define glFramebufferTexture2D glad_glFramebufferTexture2D -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; -#define glFramebufferTexture3D glad_glFramebufferTexture3D -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; -#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; -#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); -GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; -#define glGenerateMipmap glad_glGenerateMipmap -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; -#define glBlitFramebuffer glad_glBlitFramebuffer -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; -#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; -#define glFramebufferTextureLayer glad_glFramebufferTextureLayer -typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; -#define glMapBufferRange glad_glMapBufferRange -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); -GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; -#define glFlushMappedBufferRange glad_glFlushMappedBufferRange -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); -GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; -#define glBindVertexArray glad_glBindVertexArray -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); -GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; -#define glDeleteVertexArrays glad_glDeleteVertexArrays -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); -GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; -#define glGenVertexArrays glad_glGenVertexArrays -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); -GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; -#define glIsVertexArray glad_glIsVertexArray -#endif -#ifndef GL_VERSION_3_1 +GLAD_API_CALL int GLAD_GL_VERSION_3_0; #define GL_VERSION_3_1 1 -GLAPI int GLAD_GL_VERSION_3_1; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; -#define glDrawArraysInstanced glad_glDrawArraysInstanced -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; -#define glDrawElementsInstanced glad_glDrawElementsInstanced -typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; -#define glTexBuffer glad_glTexBuffer -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); -GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; -#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; -#define glCopyBufferSubData glad_glCopyBufferSubData -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; -#define glGetUniformIndices glad_glGetUniformIndices -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; -#define glGetActiveUniformsiv glad_glGetActiveUniformsiv -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; -#define glGetActiveUniformName glad_glGetActiveUniformName -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName); -GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; -#define glGetUniformBlockIndex glad_glGetUniformBlockIndex -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; -#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; -#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; -#define glUniformBlockBinding glad_glUniformBlockBinding -#endif -#ifndef GL_VERSION_3_2 +GLAD_API_CALL int GLAD_GL_VERSION_3_1; #define GL_VERSION_3_2 1 -GLAPI int GLAD_GL_VERSION_3_2; -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; -#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; -#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; -#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; -#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); -GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; -#define glProvokingVertex glad_glProvokingVertex -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); -GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; -#define glFenceSync glad_glFenceSync -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); -GLAPI PFNGLISSYNCPROC glad_glIsSync; -#define glIsSync glad_glIsSync -typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); -GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; -#define glDeleteSync glad_glDeleteSync -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; -#define glClientWaitSync glad_glClientWaitSync -typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; -#define glWaitSync glad_glWaitSync -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); -GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; -#define glGetInteger64v glad_glGetInteger64v -typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; -#define glGetSynciv glad_glGetSynciv -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); -GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; -#define glGetInteger64i_v glad_glGetInteger64i_v -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params); -GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; -#define glGetBufferParameteri64v glad_glGetBufferParameteri64v -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; -#define glFramebufferTexture glad_glFramebufferTexture -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; -#define glTexImage2DMultisample glad_glTexImage2DMultisample -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; -#define glTexImage3DMultisample glad_glTexImage3DMultisample -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val); -GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; -#define glGetMultisamplefv glad_glGetMultisamplefv -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); -GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; -#define glSampleMaski glad_glSampleMaski -#endif -#ifndef GL_VERSION_3_3 +GLAD_API_CALL int GLAD_GL_VERSION_3_2; #define GL_VERSION_3_3 1 -GLAPI int GLAD_GL_VERSION_3_3; -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; -#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; -#define glGetFragDataIndex glad_glGetFragDataIndex -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); -GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; -#define glGenSamplers glad_glGenSamplers -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); -GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; -#define glDeleteSamplers glad_glDeleteSamplers -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); -GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; -#define glIsSampler glad_glIsSampler -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); -GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; -#define glBindSampler glad_glBindSampler -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); -GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; -#define glSamplerParameteri glad_glSamplerParameteri -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param); -GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; -#define glSamplerParameteriv glad_glSamplerParameteriv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); -GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; -#define glSamplerParameterf glad_glSamplerParameterf -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; -#define glSamplerParameterfv glad_glSamplerParameterfv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param); -GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; -#define glSamplerParameterIiv glad_glSamplerParameterIiv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param); -GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; -#define glSamplerParameterIuiv glad_glSamplerParameterIuiv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; -#define glGetSamplerParameteriv glad_glGetSamplerParameteriv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; -#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params); -GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; -#define glGetSamplerParameterfv glad_glGetSamplerParameterfv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; -#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); -GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; -#define glQueryCounter glad_glQueryCounter -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params); -GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; -#define glGetQueryObjecti64v glad_glGetQueryObjecti64v -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params); -GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; -#define glGetQueryObjectui64v glad_glGetQueryObjectui64v -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; -#define glVertexAttribDivisor glad_glVertexAttribDivisor -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; -#define glVertexAttribP1ui glad_glVertexAttribP1ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; -#define glVertexAttribP1uiv glad_glVertexAttribP1uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; -#define glVertexAttribP2ui glad_glVertexAttribP2ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; -#define glVertexAttribP2uiv glad_glVertexAttribP2uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; -#define glVertexAttribP3ui glad_glVertexAttribP3ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; -#define glVertexAttribP3uiv glad_glVertexAttribP3uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; -#define glVertexAttribP4ui glad_glVertexAttribP4ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; -#define glVertexAttribP4uiv glad_glVertexAttribP4uiv -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; -#define glVertexP2ui glad_glVertexP2ui -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value); -GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; -#define glVertexP2uiv glad_glVertexP2uiv -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; -#define glVertexP3ui glad_glVertexP3ui -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value); -GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; -#define glVertexP3uiv glad_glVertexP3uiv -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; -#define glVertexP4ui glad_glVertexP4ui -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value); -GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; -#define glVertexP4uiv glad_glVertexP4uiv -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; -#define glTexCoordP1ui glad_glTexCoordP1ui -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; -#define glTexCoordP1uiv glad_glTexCoordP1uiv -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; -#define glTexCoordP2ui glad_glTexCoordP2ui -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; -#define glTexCoordP2uiv glad_glTexCoordP2uiv -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; -#define glTexCoordP3ui glad_glTexCoordP3ui -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; -#define glTexCoordP3uiv glad_glTexCoordP3uiv -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; -#define glTexCoordP4ui glad_glTexCoordP4ui -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; -#define glTexCoordP4uiv glad_glTexCoordP4uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; -#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; -#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; -#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; -#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; -#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; -#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; -#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; -#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv -typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; -#define glNormalP3ui glad_glNormalP3ui -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; -#define glNormalP3uiv glad_glNormalP3uiv -typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; -#define glColorP3ui glad_glColorP3ui -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color); -GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; -#define glColorP3uiv glad_glColorP3uiv -typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; -#define glColorP4ui glad_glColorP4ui -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color); -GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; -#define glColorP4uiv glad_glColorP4uiv -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; -#define glSecondaryColorP3ui glad_glSecondaryColorP3ui -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color); -GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; -#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv -#endif -#ifndef GL_VERSION_4_0 +GLAD_API_CALL int GLAD_GL_VERSION_3_3; #define GL_VERSION_4_0 1 -GLAPI int GLAD_GL_VERSION_4_0; -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC)(GLfloat value); -GLAPI PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; -#define glMinSampleShading glad_glMinSampleShading -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); -GLAPI PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; -#define glBlendEquationi glad_glBlendEquationi -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; -#define glBlendEquationSeparatei glad_glBlendEquationSeparatei -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); -GLAPI PFNGLBLENDFUNCIPROC glad_glBlendFunci; -#define glBlendFunci glad_glBlendFunci -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; -#define glBlendFuncSeparatei glad_glBlendFuncSeparatei -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect); -GLAPI PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; -#define glDrawArraysIndirect glad_glDrawArraysIndirect -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect); -GLAPI PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; -#define glDrawElementsIndirect glad_glDrawElementsIndirect -typedef void (APIENTRYP PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); -GLAPI PFNGLUNIFORM1DPROC glad_glUniform1d; -#define glUniform1d glad_glUniform1d -typedef void (APIENTRYP PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); -GLAPI PFNGLUNIFORM2DPROC glad_glUniform2d; -#define glUniform2d glad_glUniform2d -typedef void (APIENTRYP PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLUNIFORM3DPROC glad_glUniform3d; -#define glUniform3d glad_glUniform3d -typedef void (APIENTRYP PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLUNIFORM4DPROC glad_glUniform4d; -#define glUniform4d glad_glUniform4d -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLUNIFORM1DVPROC glad_glUniform1dv; -#define glUniform1dv glad_glUniform1dv -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLUNIFORM2DVPROC glad_glUniform2dv; -#define glUniform2dv glad_glUniform2dv -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLUNIFORM3DVPROC glad_glUniform3dv; -#define glUniform3dv glad_glUniform3dv -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLUNIFORM4DVPROC glad_glUniform4dv; -#define glUniform4dv glad_glUniform4dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv; -#define glUniformMatrix2dv glad_glUniformMatrix2dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv; -#define glUniformMatrix3dv glad_glUniformMatrix3dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv; -#define glUniformMatrix4dv glad_glUniformMatrix4dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv; -#define glUniformMatrix2x3dv glad_glUniformMatrix2x3dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv; -#define glUniformMatrix2x4dv glad_glUniformMatrix2x4dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv; -#define glUniformMatrix3x2dv glad_glUniformMatrix3x2dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv; -#define glUniformMatrix3x4dv glad_glUniformMatrix3x4dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv; -#define glUniformMatrix4x2dv glad_glUniformMatrix4x2dv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv; -#define glUniformMatrix4x3dv glad_glUniformMatrix4x3dv -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble *params); -GLAPI PFNGLGETUNIFORMDVPROC glad_glGetUniformdv; -#define glGetUniformdv glad_glGetUniformdv -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar *name); -GLAPI PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation; -#define glGetSubroutineUniformLocation glad_glGetSubroutineUniformLocation -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar *name); -GLAPI PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex; -#define glGetSubroutineIndex glad_glGetSubroutineIndex -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv; -#define glGetActiveSubroutineUniformiv glad_glGetActiveSubroutineUniformiv -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName; -#define glGetActiveSubroutineUniformName glad_glGetActiveSubroutineUniformName -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName; -#define glGetActiveSubroutineName glad_glGetActiveSubroutineName -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv; -#define glUniformSubroutinesuiv glad_glUniformSubroutinesuiv -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint *params); -GLAPI PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv; -#define glGetUniformSubroutineuiv glad_glGetUniformSubroutineuiv -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint *values); -GLAPI PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv; -#define glGetProgramStageiv glad_glGetProgramStageiv -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); -GLAPI PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; -#define glPatchParameteri glad_glPatchParameteri -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat *values); -GLAPI PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv; -#define glPatchParameterfv glad_glPatchParameterfv -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); -GLAPI PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; -#define glBindTransformFeedback glad_glBindTransformFeedback -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint *ids); -GLAPI PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; -#define glDeleteTransformFeedbacks glad_glDeleteTransformFeedbacks -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; -#define glGenTransformFeedbacks glad_glGenTransformFeedbacks -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); -GLAPI PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; -#define glIsTransformFeedback glad_glIsTransformFeedback -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); -GLAPI PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; -#define glPauseTransformFeedback glad_glPauseTransformFeedback -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); -GLAPI PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; -#define glResumeTransformFeedback glad_glResumeTransformFeedback -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); -GLAPI PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback; -#define glDrawTransformFeedback glad_glDrawTransformFeedback -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream); -GLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream; -#define glDrawTransformFeedbackStream glad_glDrawTransformFeedbackStream -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); -GLAPI PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed; -#define glBeginQueryIndexed glad_glBeginQueryIndexed -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); -GLAPI PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed; -#define glEndQueryIndexed glad_glEndQueryIndexed -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv; -#define glGetQueryIndexediv glad_glGetQueryIndexediv -#endif -#ifndef GL_VERSION_4_1 +GLAD_API_CALL int GLAD_GL_VERSION_4_0; #define GL_VERSION_4_1 1 -GLAPI int GLAD_GL_VERSION_4_1; -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(void); -GLAPI PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; -#define glReleaseShaderCompiler glad_glReleaseShaderCompiler -typedef void (APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -GLAPI PFNGLSHADERBINARYPROC glad_glShaderBinary; -#define glShaderBinary glad_glShaderBinary -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; -#define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); -GLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef; -#define glDepthRangef glad_glDepthRangef -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d); -GLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf; -#define glClearDepthf glad_glClearDepthf -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -GLAPI PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary; -#define glGetProgramBinary glad_glGetProgramBinary -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); -GLAPI PFNGLPROGRAMBINARYPROC glad_glProgramBinary; -#define glProgramBinary glad_glProgramBinary -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); -GLAPI PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri; -#define glProgramParameteri glad_glProgramParameteri -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages; -#define glUseProgramStages glad_glUseProgramStages -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); -GLAPI PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram; -#define glActiveShaderProgram glad_glActiveShaderProgram -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const*strings); -GLAPI PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv; -#define glCreateShaderProgramv glad_glCreateShaderProgramv -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); -GLAPI PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline; -#define glBindProgramPipeline glad_glBindProgramPipeline -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint *pipelines); -GLAPI PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines; -#define glDeleteProgramPipelines glad_glDeleteProgramPipelines -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines); -GLAPI PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines; -#define glGenProgramPipelines glad_glGenProgramPipelines -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); -GLAPI PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline; -#define glIsProgramPipeline glad_glIsProgramPipeline -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint *params); -GLAPI PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv; -#define glGetProgramPipelineiv glad_glGetProgramPipelineiv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0); -GLAPI PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i; -#define glProgramUniform1i glad_glProgramUniform1i -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv; -#define glProgramUniform1iv glad_glProgramUniform1iv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0); -GLAPI PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f; -#define glProgramUniform1f glad_glProgramUniform1f -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv; -#define glProgramUniform1fv glad_glProgramUniform1fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0); -GLAPI PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d; -#define glProgramUniform1d glad_glProgramUniform1d -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv; -#define glProgramUniform1dv glad_glProgramUniform1dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0); -GLAPI PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui; -#define glProgramUniform1ui glad_glProgramUniform1ui -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv; -#define glProgramUniform1uiv glad_glProgramUniform1uiv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1); -GLAPI PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i; -#define glProgramUniform2i glad_glProgramUniform2i -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv; -#define glProgramUniform2iv glad_glProgramUniform2iv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f; -#define glProgramUniform2f glad_glProgramUniform2f -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv; -#define glProgramUniform2fv glad_glProgramUniform2fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d; -#define glProgramUniform2d glad_glProgramUniform2d -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv; -#define glProgramUniform2dv glad_glProgramUniform2dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui; -#define glProgramUniform2ui glad_glProgramUniform2ui -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv; -#define glProgramUniform2uiv glad_glProgramUniform2uiv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i; -#define glProgramUniform3i glad_glProgramUniform3i -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv; -#define glProgramUniform3iv glad_glProgramUniform3iv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f; -#define glProgramUniform3f glad_glProgramUniform3f -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv; -#define glProgramUniform3fv glad_glProgramUniform3fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d; -#define glProgramUniform3d glad_glProgramUniform3d -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv; -#define glProgramUniform3dv glad_glProgramUniform3dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui; -#define glProgramUniform3ui glad_glProgramUniform3ui -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv; -#define glProgramUniform3uiv glad_glProgramUniform3uiv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i; -#define glProgramUniform4i glad_glProgramUniform4i -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv; -#define glProgramUniform4iv glad_glProgramUniform4iv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f; -#define glProgramUniform4f glad_glProgramUniform4f -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv; -#define glProgramUniform4fv glad_glProgramUniform4fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d; -#define glProgramUniform4d glad_glProgramUniform4d -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv; -#define glProgramUniform4dv glad_glProgramUniform4dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui; -#define glProgramUniform4ui glad_glProgramUniform4ui -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv; -#define glProgramUniform4uiv glad_glProgramUniform4uiv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv; -#define glProgramUniformMatrix2fv glad_glProgramUniformMatrix2fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv; -#define glProgramUniformMatrix3fv glad_glProgramUniformMatrix3fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv; -#define glProgramUniformMatrix4fv glad_glProgramUniformMatrix4fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv; -#define glProgramUniformMatrix2dv glad_glProgramUniformMatrix2dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv; -#define glProgramUniformMatrix3dv glad_glProgramUniformMatrix3dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv; -#define glProgramUniformMatrix4dv glad_glProgramUniformMatrix4dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv; -#define glProgramUniformMatrix2x3fv glad_glProgramUniformMatrix2x3fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv; -#define glProgramUniformMatrix3x2fv glad_glProgramUniformMatrix3x2fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv; -#define glProgramUniformMatrix2x4fv glad_glProgramUniformMatrix2x4fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv; -#define glProgramUniformMatrix4x2fv glad_glProgramUniformMatrix4x2fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv; -#define glProgramUniformMatrix3x4fv glad_glProgramUniformMatrix3x4fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv; -#define glProgramUniformMatrix4x3fv glad_glProgramUniformMatrix4x3fv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv; -#define glProgramUniformMatrix2x3dv glad_glProgramUniformMatrix2x3dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv; -#define glProgramUniformMatrix3x2dv glad_glProgramUniformMatrix3x2dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv; -#define glProgramUniformMatrix2x4dv glad_glProgramUniformMatrix2x4dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv; -#define glProgramUniformMatrix4x2dv glad_glProgramUniformMatrix4x2dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv; -#define glProgramUniformMatrix3x4dv glad_glProgramUniformMatrix3x4dv -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv; -#define glProgramUniformMatrix4x3dv glad_glProgramUniformMatrix4x3dv -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); -GLAPI PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline; -#define glValidateProgramPipeline glad_glValidateProgramPipeline -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog; -#define glGetProgramPipelineInfoLog glad_glGetProgramPipelineInfoLog -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d; -#define glVertexAttribL1d glad_glVertexAttribL1d -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d; -#define glVertexAttribL2d glad_glVertexAttribL2d -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d; -#define glVertexAttribL3d glad_glVertexAttribL3d -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d; -#define glVertexAttribL4d glad_glVertexAttribL4d -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv; -#define glVertexAttribL1dv glad_glVertexAttribL1dv -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv; -#define glVertexAttribL2dv glad_glVertexAttribL2dv -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv; -#define glVertexAttribL3dv glad_glVertexAttribL3dv -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv; -#define glVertexAttribL4dv glad_glVertexAttribL4dv -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer; -#define glVertexAttribLPointer glad_glVertexAttribLPointer -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble *params); -GLAPI PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv; -#define glGetVertexAttribLdv glad_glGetVertexAttribLdv -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat *v); -GLAPI PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv; -#define glViewportArrayv glad_glViewportArrayv -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf; -#define glViewportIndexedf glad_glViewportIndexedf -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv; -#define glViewportIndexedfv glad_glViewportIndexedfv -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint *v); -GLAPI PFNGLSCISSORARRAYVPROC glad_glScissorArrayv; -#define glScissorArrayv glad_glScissorArrayv -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed; -#define glScissorIndexed glad_glScissorIndexed -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv; -#define glScissorIndexedv glad_glScissorIndexedv -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble *v); -GLAPI PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; -#define glDepthRangeArrayv glad_glDepthRangeArrayv -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); -GLAPI PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; -#define glDepthRangeIndexed glad_glDepthRangeIndexed -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat *data); -GLAPI PFNGLGETFLOATI_VPROC glad_glGetFloati_v; -#define glGetFloati_v glad_glGetFloati_v -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble *data); -GLAPI PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v; -#define glGetDoublei_v glad_glGetDoublei_v -#endif -#ifndef GL_VERSION_4_2 +GLAD_API_CALL int GLAD_GL_VERSION_4_1; #define GL_VERSION_4_2 1 -GLAPI int GLAD_GL_VERSION_4_2; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -GLAPI PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance; -#define glDrawArraysInstancedBaseInstance glad_glDrawArraysInstancedBaseInstance -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance; -#define glDrawElementsInstancedBaseInstance glad_glDrawElementsInstancedBaseInstance -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance; -#define glDrawElementsInstancedBaseVertexBaseInstance glad_glDrawElementsInstancedBaseVertexBaseInstance -typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; -#define glGetInternalformativ glad_glGetInternalformativ -typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -GLAPI PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv; -#define glGetActiveAtomicCounterBufferiv glad_glGetActiveAtomicCounterBufferiv -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -GLAPI PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture; -#define glBindImageTexture glad_glBindImageTexture -typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); -GLAPI PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier; -#define glMemoryBarrier glad_glMemoryBarrier -typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D; -#define glTexStorage1D glad_glTexStorage1D -typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; -#define glTexStorage2D glad_glTexStorage2D -typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; -#define glTexStorage3D glad_glTexStorage3D -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, GLsizei instancecount); -GLAPI PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced; -#define glDrawTransformFeedbackInstanced glad_glDrawTransformFeedbackInstanced -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -GLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced; -#define glDrawTransformFeedbackStreamInstanced glad_glDrawTransformFeedbackStreamInstanced -#endif -#ifndef GL_VERSION_4_3 +GLAD_API_CALL int GLAD_GL_VERSION_4_2; #define GL_VERSION_4_3 1 -GLAPI int GLAD_GL_VERSION_4_3; -typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData; -#define glClearBufferData glad_glClearBufferData -typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData; -#define glClearBufferSubData glad_glClearBufferSubData -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -GLAPI PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute; -#define glDispatchCompute glad_glDispatchCompute -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); -GLAPI PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect; -#define glDispatchComputeIndirect glad_glDispatchComputeIndirect -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; -#define glCopyImageSubData glad_glCopyImageSubData -typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri; -#define glFramebufferParameteri glad_glFramebufferParameteri -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv; -#define glGetFramebufferParameteriv glad_glGetFramebufferParameteriv -typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -GLAPI PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v; -#define glGetInternalformati64v glad_glGetInternalformati64v -typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage; -#define glInvalidateTexSubImage glad_glInvalidateTexSubImage -typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level); -GLAPI PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage; -#define glInvalidateTexImage glad_glInvalidateTexImage -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData; -#define glInvalidateBufferSubData glad_glInvalidateBufferSubData -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer); -GLAPI PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData; -#define glInvalidateBufferData glad_glInvalidateBufferData -typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments); -GLAPI PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer; -#define glInvalidateFramebuffer glad_glInvalidateFramebuffer -typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer; -#define glInvalidateSubFramebuffer glad_glInvalidateSubFramebuffer -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect; -#define glMultiDrawArraysIndirect glad_glMultiDrawArraysIndirect -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect; -#define glMultiDrawElementsIndirect glad_glMultiDrawElementsIndirect -typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint *params); -GLAPI PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv; -#define glGetProgramInterfaceiv glad_glGetProgramInterfaceiv -typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar *name); -GLAPI PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex; -#define glGetProgramResourceIndex glad_glGetProgramResourceIndex -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -GLAPI PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName; -#define glGetProgramResourceName glad_glGetProgramResourceName -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -GLAPI PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv; -#define glGetProgramResourceiv glad_glGetProgramResourceiv -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar *name); -GLAPI PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation; -#define glGetProgramResourceLocation glad_glGetProgramResourceLocation -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, GLenum programInterface, const GLchar *name); -GLAPI PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex; -#define glGetProgramResourceLocationIndex glad_glGetProgramResourceLocationIndex -typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -GLAPI PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding; -#define glShaderStorageBlockBinding glad_glShaderStorageBlockBinding -typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange; -#define glTexBufferRange glad_glTexBufferRange -typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample; -#define glTexStorage2DMultisample glad_glTexStorage2DMultisample -typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample; -#define glTexStorage3DMultisample glad_glTexStorage3DMultisample -typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -GLAPI PFNGLTEXTUREVIEWPROC glad_glTextureView; -#define glTextureView glad_glTextureView -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; -#define glBindVertexBuffer glad_glBindVertexBuffer -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; -#define glVertexAttribFormat glad_glVertexAttribFormat -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; -#define glVertexAttribIFormat glad_glVertexAttribIFormat -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; -#define glVertexAttribLFormat glad_glVertexAttribLFormat -typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); -GLAPI PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; -#define glVertexAttribBinding glad_glVertexAttribBinding -typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); -GLAPI PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; -#define glVertexBindingDivisor glad_glVertexBindingDivisor -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; -#define glDebugMessageControl glad_glDebugMessageControl -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; -#define glDebugMessageInsert glad_glDebugMessageInsert -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void *userParam); -GLAPI PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; -#define glDebugMessageCallback glad_glDebugMessageCallback -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; -#define glGetDebugMessageLog glad_glGetDebugMessageLog -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar *message); -GLAPI PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; -#define glPushDebugGroup glad_glPushDebugGroup -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC)(void); -GLAPI PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; -#define glPopDebugGroup glad_glPopDebugGroup -typedef void (APIENTRYP PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GLAPI PFNGLOBJECTLABELPROC glad_glObjectLabel; -#define glObjectLabel glad_glObjectLabel -typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; -#define glGetObjectLabel glad_glGetObjectLabel -typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC)(const void *ptr, GLsizei length, const GLchar *label); -GLAPI PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; -#define glObjectPtrLabel glad_glObjectPtrLabel -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC)(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; -#define glGetObjectPtrLabel glad_glGetObjectPtrLabel -typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params); -GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv; -#define glGetPointerv glad_glGetPointerv -#endif -#ifndef GL_VERSION_4_4 -#define GL_VERSION_4_4 1 -GLAPI int GLAD_GL_VERSION_4_4; -typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; -#define glBufferStorage glad_glBufferStorage -typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage; -#define glClearTexImage glad_glClearTexImage -typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage; -#define glClearTexSubImage glad_glClearTexSubImage -typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint *buffers); -GLAPI PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase; -#define glBindBuffersBase glad_glBindBuffersBase -typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -GLAPI PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange; -#define glBindBuffersRange glad_glBindBuffersRange -typedef void (APIENTRYP PFNGLBINDTEXTURESPROC)(GLuint first, GLsizei count, const GLuint *textures); -GLAPI PFNGLBINDTEXTURESPROC glad_glBindTextures; -#define glBindTextures glad_glBindTextures -typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC)(GLuint first, GLsizei count, const GLuint *samplers); -GLAPI PFNGLBINDSAMPLERSPROC glad_glBindSamplers; -#define glBindSamplers glad_glBindSamplers -typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC)(GLuint first, GLsizei count, const GLuint *textures); -GLAPI PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures; -#define glBindImageTextures glad_glBindImageTextures -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC)(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -GLAPI PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers; -#define glBindVertexBuffers glad_glBindVertexBuffers -#endif -#ifndef GL_VERSION_4_5 -#define GL_VERSION_4_5 1 -GLAPI int GLAD_GL_VERSION_4_5; -typedef void (APIENTRYP PFNGLCLIPCONTROLPROC)(GLenum origin, GLenum depth); -GLAPI PFNGLCLIPCONTROLPROC glad_glClipControl; -#define glClipControl glad_glClipControl -typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks; -#define glCreateTransformFeedbacks glad_glCreateTransformFeedbacks -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)(GLuint xfb, GLuint index, GLuint buffer); -GLAPI PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase; -#define glTransformFeedbackBufferBase glad_glTransformFeedbackBufferBase -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange; -#define glTransformFeedbackBufferRange glad_glTransformFeedbackBufferRange -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC)(GLuint xfb, GLenum pname, GLint *param); -GLAPI PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv; -#define glGetTransformFeedbackiv glad_glGetTransformFeedbackiv -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint *param); -GLAPI PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v; -#define glGetTransformFeedbacki_v glad_glGetTransformFeedbacki_v -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint64 *param); -GLAPI PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v; -#define glGetTransformFeedbacki64_v glad_glGetTransformFeedbacki64_v -typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint *buffers); -GLAPI PFNGLCREATEBUFFERSPROC glad_glCreateBuffers; -#define glCreateBuffers glad_glCreateBuffers -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage; -#define glNamedBufferStorage glad_glNamedBufferStorage -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -GLAPI PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData; -#define glNamedBufferData glad_glNamedBufferData -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData; -#define glNamedBufferSubData glad_glNamedBufferSubData -typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData; -#define glCopyNamedBufferSubData glad_glCopyNamedBufferSubData -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData; -#define glClearNamedBufferData glad_glClearNamedBufferData -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData; -#define glClearNamedBufferSubData glad_glClearNamedBufferSubData -typedef void * (APIENTRYP PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access); -GLAPI PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer; -#define glMapNamedBuffer glad_glMapNamedBuffer -typedef void * (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange; -#define glMapNamedBufferRange glad_glMapNamedBufferRange -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer); -GLAPI PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer; -#define glUnmapNamedBuffer glad_glUnmapNamedBuffer -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange; -#define glFlushMappedNamedBufferRange glad_glFlushMappedNamedBufferRange -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC)(GLuint buffer, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv; -#define glGetNamedBufferParameteriv glad_glGetNamedBufferParameteriv -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)(GLuint buffer, GLenum pname, GLint64 *params); -GLAPI PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v; -#define glGetNamedBufferParameteri64v glad_glGetNamedBufferParameteri64v -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC)(GLuint buffer, GLenum pname, void **params); -GLAPI PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv; -#define glGetNamedBufferPointerv glad_glGetNamedBufferPointerv -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -GLAPI PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData; -#define glGetNamedBufferSubData glad_glGetNamedBufferSubData -typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); -GLAPI PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers; -#define glCreateFramebuffers glad_glCreateFramebuffers -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer; -#define glNamedFramebufferRenderbuffer glad_glNamedFramebufferRenderbuffer -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)(GLuint framebuffer, GLenum pname, GLint param); -GLAPI PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri; -#define glNamedFramebufferParameteri glad_glNamedFramebufferParameteri -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture; -#define glNamedFramebufferTexture glad_glNamedFramebufferTexture -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer; -#define glNamedFramebufferTextureLayer glad_glNamedFramebufferTextureLayer -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)(GLuint framebuffer, GLenum buf); -GLAPI PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer; -#define glNamedFramebufferDrawBuffer glad_glNamedFramebufferDrawBuffer -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)(GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers; -#define glNamedFramebufferDrawBuffers glad_glNamedFramebufferDrawBuffers -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)(GLuint framebuffer, GLenum src); -GLAPI PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer; -#define glNamedFramebufferReadBuffer glad_glNamedFramebufferReadBuffer -typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); -GLAPI PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData; -#define glInvalidateNamedFramebufferData glad_glInvalidateNamedFramebufferData -typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData; -#define glInvalidateNamedFramebufferSubData glad_glInvalidateNamedFramebufferSubData -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv; -#define glClearNamedFramebufferiv glad_glClearNamedFramebufferiv -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv; -#define glClearNamedFramebufferuiv glad_glClearNamedFramebufferuiv -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv; -#define glClearNamedFramebufferfv glad_glClearNamedFramebufferfv -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi; -#define glClearNamedFramebufferfi glad_glClearNamedFramebufferfi -typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer; -#define glBlitNamedFramebuffer glad_glBlitNamedFramebuffer -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)(GLuint framebuffer, GLenum target); -GLAPI PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus; -#define glCheckNamedFramebufferStatus glad_glCheckNamedFramebufferStatus -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)(GLuint framebuffer, GLenum pname, GLint *param); -GLAPI PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv; -#define glGetNamedFramebufferParameteriv glad_glGetNamedFramebufferParameteriv -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv; -#define glGetNamedFramebufferAttachmentParameteriv glad_glGetNamedFramebufferAttachmentParameteriv -typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); -GLAPI PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers; -#define glCreateRenderbuffers glad_glCreateRenderbuffers -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage; -#define glNamedRenderbufferStorage glad_glNamedRenderbufferStorage -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample; -#define glNamedRenderbufferStorageMultisample glad_glNamedRenderbufferStorageMultisample -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)(GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv; -#define glGetNamedRenderbufferParameteriv glad_glGetNamedRenderbufferParameteriv -typedef void (APIENTRYP PFNGLCREATETEXTURESPROC)(GLenum target, GLsizei n, GLuint *textures); -GLAPI PFNGLCREATETEXTURESPROC glad_glCreateTextures; -#define glCreateTextures glad_glCreateTextures -typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC)(GLuint texture, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer; -#define glTextureBuffer glad_glTextureBuffer -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange; -#define glTextureBufferRange glad_glTextureBufferRange -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D; -#define glTextureStorage1D glad_glTextureStorage1D -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D; -#define glTextureStorage2D glad_glTextureStorage2D -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D; -#define glTextureStorage3D glad_glTextureStorage3D -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample; -#define glTextureStorage2DMultisample glad_glTextureStorage2DMultisample -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample; -#define glTextureStorage3DMultisample glad_glTextureStorage3DMultisample -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D; -#define glTextureSubImage1D glad_glTextureSubImage1D -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D; -#define glTextureSubImage2D glad_glTextureSubImage2D -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D; -#define glTextureSubImage3D glad_glTextureSubImage3D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D; -#define glCompressedTextureSubImage1D glad_glCompressedTextureSubImage1D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D; -#define glCompressedTextureSubImage2D glad_glCompressedTextureSubImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D; -#define glCompressedTextureSubImage3D glad_glCompressedTextureSubImage3D -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D; -#define glCopyTextureSubImage1D glad_glCopyTextureSubImage1D -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D; -#define glCopyTextureSubImage2D glad_glCopyTextureSubImage2D -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D; -#define glCopyTextureSubImage3D glad_glCopyTextureSubImage3D -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC)(GLuint texture, GLenum pname, GLfloat param); -GLAPI PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf; -#define glTextureParameterf glad_glTextureParameterf -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, const GLfloat *param); -GLAPI PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv; -#define glTextureParameterfv glad_glTextureParameterfv -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC)(GLuint texture, GLenum pname, GLint param); -GLAPI PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri; -#define glTextureParameteri glad_glTextureParameteri -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, const GLint *params); -GLAPI PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv; -#define glTextureParameterIiv glad_glTextureParameterIiv -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, const GLuint *params); -GLAPI PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv; -#define glTextureParameterIuiv glad_glTextureParameterIuiv -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, const GLint *param); -GLAPI PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv; -#define glTextureParameteriv glad_glTextureParameteriv -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC)(GLuint texture); -GLAPI PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap; -#define glGenerateTextureMipmap glad_glGenerateTextureMipmap -typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC)(GLuint unit, GLuint texture); -GLAPI PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit; -#define glBindTextureUnit glad_glBindTextureUnit -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage; -#define glGetTextureImage glad_glGetTextureImage -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLsizei bufSize, void *pixels); -GLAPI PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage; -#define glGetCompressedTextureImage glad_glGetCompressedTextureImage -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC)(GLuint texture, GLint level, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv; -#define glGetTextureLevelParameterfv glad_glGetTextureLevelParameterfv -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC)(GLuint texture, GLint level, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv; -#define glGetTextureLevelParameteriv glad_glGetTextureLevelParameteriv -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv; -#define glGetTextureParameterfv glad_glGetTextureParameterfv -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv; -#define glGetTextureParameterIiv glad_glGetTextureParameterIiv -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, GLuint *params); -GLAPI PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv; -#define glGetTextureParameterIuiv glad_glGetTextureParameterIuiv -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv; -#define glGetTextureParameteriv glad_glGetTextureParameteriv -typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); -GLAPI PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays; -#define glCreateVertexArrays glad_glCreateVertexArrays -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); -GLAPI PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib; -#define glDisableVertexArrayAttrib glad_glDisableVertexArrayAttrib -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); -GLAPI PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib; -#define glEnableVertexArrayAttrib glad_glEnableVertexArrayAttrib -typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC)(GLuint vaobj, GLuint buffer); -GLAPI PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer; -#define glVertexArrayElementBuffer glad_glVertexArrayElementBuffer -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer; -#define glVertexArrayVertexBuffer glad_glVertexArrayVertexBuffer -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC)(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -GLAPI PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers; -#define glVertexArrayVertexBuffers glad_glVertexArrayVertexBuffers -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding; -#define glVertexArrayAttribBinding glad_glVertexArrayAttribBinding -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat; -#define glVertexArrayAttribFormat glad_glVertexArrayAttribFormat -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat; -#define glVertexArrayAttribIFormat glad_glVertexArrayAttribIFormat -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat; -#define glVertexArrayAttribLFormat glad_glVertexArrayAttribLFormat -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); -GLAPI PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor; -#define glVertexArrayBindingDivisor glad_glVertexArrayBindingDivisor -typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC)(GLuint vaobj, GLenum pname, GLint *param); -GLAPI PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv; -#define glGetVertexArrayiv glad_glGetVertexArrayiv -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint *param); -GLAPI PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv; -#define glGetVertexArrayIndexediv glad_glGetVertexArrayIndexediv -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); -GLAPI PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv; -#define glGetVertexArrayIndexed64iv glad_glGetVertexArrayIndexed64iv -typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC)(GLsizei n, GLuint *samplers); -GLAPI PFNGLCREATESAMPLERSPROC glad_glCreateSamplers; -#define glCreateSamplers glad_glCreateSamplers -typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines); -GLAPI PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines; -#define glCreateProgramPipelines glad_glCreateProgramPipelines -typedef void (APIENTRYP PFNGLCREATEQUERIESPROC)(GLenum target, GLsizei n, GLuint *ids); -GLAPI PFNGLCREATEQUERIESPROC glad_glCreateQueries; -#define glCreateQueries glad_glCreateQueries -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v; -#define glGetQueryBufferObjecti64v glad_glGetQueryBufferObjecti64v -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv; -#define glGetQueryBufferObjectiv glad_glGetQueryBufferObjectiv -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v; -#define glGetQueryBufferObjectui64v glad_glGetQueryBufferObjectui64v -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv; -#define glGetQueryBufferObjectuiv glad_glGetQueryBufferObjectuiv -typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers); -GLAPI PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion; -#define glMemoryBarrierByRegion glad_glMemoryBarrierByRegion -typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage; -#define glGetTextureSubImage glad_glGetTextureSubImage -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); -GLAPI PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage; -#define glGetCompressedTextureSubImage glad_glGetCompressedTextureSubImage -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC)(void); -GLAPI PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus; -#define glGetGraphicsResetStatus glad_glGetGraphicsResetStatus -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint lod, GLsizei bufSize, void *pixels); -GLAPI PFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage; -#define glGetnCompressedTexImage glad_glGetnCompressedTexImage -typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI PFNGLGETNTEXIMAGEPROC glad_glGetnTexImage; -#define glGetnTexImage glad_glGetnTexImage -typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -GLAPI PFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv; -#define glGetnUniformdv glad_glGetnUniformdv -typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv; -#define glGetnUniformfv glad_glGetnUniformfv -typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv; -#define glGetnUniformiv glad_glGetnUniformiv -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv; -#define glGetnUniformuiv glad_glGetnUniformuiv -typedef void (APIENTRYP PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI PFNGLREADNPIXELSPROC glad_glReadnPixels; -#define glReadnPixels glad_glReadnPixels -typedef void (APIENTRYP PFNGLGETNMAPDVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI PFNGLGETNMAPDVPROC glad_glGetnMapdv; -#define glGetnMapdv glad_glGetnMapdv -typedef void (APIENTRYP PFNGLGETNMAPFVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI PFNGLGETNMAPFVPROC glad_glGetnMapfv; -#define glGetnMapfv glad_glGetnMapfv -typedef void (APIENTRYP PFNGLGETNMAPIVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI PFNGLGETNMAPIVPROC glad_glGetnMapiv; -#define glGetnMapiv glad_glGetnMapiv -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC)(GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI PFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv; -#define glGetnPixelMapfv glad_glGetnPixelMapfv -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC)(GLenum map, GLsizei bufSize, GLuint *values); -GLAPI PFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv; -#define glGetnPixelMapuiv glad_glGetnPixelMapuiv -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC)(GLenum map, GLsizei bufSize, GLushort *values); -GLAPI PFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv; -#define glGetnPixelMapusv glad_glGetnPixelMapusv -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC)(GLsizei bufSize, GLubyte *pattern); -GLAPI PFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple; -#define glGetnPolygonStipple glad_glGetnPolygonStipple -typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -GLAPI PFNGLGETNCOLORTABLEPROC glad_glGetnColorTable; -#define glGetnColorTable glad_glGetnColorTable -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -GLAPI PFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter; -#define glGetnConvolutionFilter glad_glGetnConvolutionFilter -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -GLAPI PFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter; -#define glGetnSeparableFilter glad_glGetnSeparableFilter -typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI PFNGLGETNHISTOGRAMPROC glad_glGetnHistogram; -#define glGetnHistogram glad_glGetnHistogram -typedef void (APIENTRYP PFNGLGETNMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI PFNGLGETNMINMAXPROC glad_glGetnMinmax; -#define glGetnMinmax glad_glGetnMinmax -typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC)(void); -GLAPI PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier; -#define glTextureBarrier glad_glTextureBarrier -#endif -#ifndef GL_VERSION_4_6 -#define GL_VERSION_4_6 1 -GLAPI int GLAD_GL_VERSION_4_6; -typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC)(GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -GLAPI PFNGLSPECIALIZESHADERPROC glad_glSpecializeShader; -#define glSpecializeShader glad_glSpecializeShader -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC)(GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount; -#define glMultiDrawArraysIndirectCount glad_glMultiDrawArraysIndirectCount -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC)(GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount; -#define glMultiDrawElementsIndirectCount glad_glMultiDrawElementsIndirectCount -typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC)(GLfloat factor, GLfloat units, GLfloat clamp); -GLAPI PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp; -#define glPolygonOffsetClamp glad_glPolygonOffsetClamp -#endif -#ifndef GL_ES_VERSION_2_0 -#define GL_ES_VERSION_2_0 1 -GLAPI int GLAD_GL_ES_VERSION_2_0; -#endif -#ifndef GL_ES_VERSION_3_0 -#define GL_ES_VERSION_3_0 1 -GLAPI int GLAD_GL_ES_VERSION_3_0; -#endif -#ifndef GL_ES_VERSION_3_1 -#define GL_ES_VERSION_3_1 1 -GLAPI int GLAD_GL_ES_VERSION_3_1; -#endif -#ifndef GL_ES_VERSION_3_2 -#define GL_ES_VERSION_3_2 1 -GLAPI int GLAD_GL_ES_VERSION_3_2; -typedef void (APIENTRYP PFNGLBLENDBARRIERPROC)(void); -GLAPI PFNGLBLENDBARRIERPROC glad_glBlendBarrier; -#define glBlendBarrier glad_glBlendBarrier -typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -GLAPI PFNGLPRIMITIVEBOUNDINGBOXPROC glad_glPrimitiveBoundingBox; -#define glPrimitiveBoundingBox glad_glPrimitiveBoundingBox -#endif -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D -#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 -#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E -#define GL_DEPTH_CLAMP_FAR_AMD 0x901F -#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F -#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE -#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF -#define GL_ALL_PIXELS_AMD 0xFFFFFFFF -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB -#define GL_FLOAT16_MAT2_AMD 0x91C5 -#define GL_FLOAT16_MAT3_AMD 0x91C6 -#define GL_FLOAT16_MAT4_AMD 0x91C7 -#define GL_FLOAT16_MAT2x3_AMD 0x91C8 -#define GL_FLOAT16_MAT2x4_AMD 0x91C9 -#define GL_FLOAT16_MAT3x2_AMD 0x91CA -#define GL_FLOAT16_MAT3x4_AMD 0x91CB -#define GL_FLOAT16_MAT4x2_AMD 0x91CC -#define GL_FLOAT16_MAT4x3_AMD 0x91CD -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 -#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 -#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F -#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 -#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 -#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 -#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 -#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 -#define GL_QUERY_BUFFER_AMD 0x9192 -#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 -#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 -#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A -#define GL_MIN_SPARSE_LEVEL_AMD 0x919B -#define GL_MIN_LOD_WARNING_AMD 0x919C -#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 -#define GL_SET_AMD 0x874A -#define GL_REPLACE_VALUE_AMD 0x874B -#define GL_STENCIL_OP_VALUE_AMD 0x874C -#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D -#define GL_STREAM_RASTERIZATION_AMD 0x91A0 -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -#define GL_HALF_APPLE 0x140B -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881A -#define GL_RGB_FLOAT16_APPLE 0x881B -#define GL_ALPHA_FLOAT16_APPLE 0x881C -#define GL_INTENSITY_FLOAT16_APPLE 0x881D -#define GL_LUMINANCE_FLOAT16_APPLE 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F -#define GL_COLOR_FLOAT_APPLE 0x8A0F -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#define GL_RGB_RAW_422_APPLE 0x8A51 -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 -#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 -#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC -#define GL_STORAGE_PRIVATE_APPLE 0x85BD -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 -#define GL_YCBCR_422_APPLE 0x85B9 -#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE -#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 -#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 -#define GL_UNSIGNED_INT64_ARB 0x140F -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 -#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB -#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 -#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#define GL_LINES_ADJACENCY_ARB 0x000A -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B -#define GL_TRIANGLES_ADJACENCY_ARB 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 -#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 -#define GL_SPIR_V_BINARY_ARB 0x9552 -#define GL_INT64_ARB 0x140E -#define GL_INT64_VEC2_ARB 0x8FE9 -#define GL_INT64_VEC3_ARB 0x8FEA -#define GL_INT64_VEC4_ARB 0x8FEB -#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 -#define GL_HALF_FLOAT_ARB 0x140B -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#define GL_PARAMETER_BUFFER_ARB 0x80EE -#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -#define GL_SRGB_DECODE_ARB 0x8299 -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 -#define GL_COMPLETION_STATUS_ARB 0x91B1 -#define GL_VERTICES_SUBMITTED_ARB 0x82EE -#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF -#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 -#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 -#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 -#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 -#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 -#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 -#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 -#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 -#define GL_SAMPLE_LOCATION_ARB 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 -#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 -#define GL_TEXTURE_SPARSE_ARB 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 -#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA -#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 -#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 -#define GL_WEIGHTED_AVERAGE_ARB 0x9367 -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC -#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD -#define GL_RGBA_FLOAT_MODE_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#define GL_ABGR_EXT 0x8000 -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_BLEND_EQUATION_EXT 0x8009 -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -#define GL_TEXTURE_TILING_EXT 0x9580 -#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 -#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B -#define GL_NUM_TILING_TYPES_EXT 0x9582 -#define GL_TILING_TYPES_EXT 0x9583 -#define GL_OPTIMAL_TILING_EXT 0x9584 -#define GL_LINEAR_TILING_EXT 0x9585 -#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 -#define GL_DEVICE_UUID_EXT 0x9597 -#define GL_DRIVER_UUID_EXT 0x9598 -#define GL_UUID_SIZE_EXT 16 -#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 -#define GL_DEVICE_LUID_EXT 0x9599 -#define GL_DEVICE_NODE_MASK_EXT 0x959A -#define GL_LUID_SIZE_EXT 8 -#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 -#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A -#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B -#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F -#define GL_RASTER_MULTISAMPLE_EXT 0x9327 -#define GL_RASTER_SAMPLES_EXT 0x9328 -#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 -#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A -#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B -#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C -#define GL_RESCALE_NORMAL_EXT 0x803A -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -#define GL_LAYOUT_GENERAL_EXT 0x958D -#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E -#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F -#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 -#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 -#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 -#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 -#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 -#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 -#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 -#define GL_D3D12_FENCE_VALUE_EXT 0x9595 -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D -#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 -#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE_EXT 0x8258 -#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 -#define GL_WEIGHTED_AVERAGE_EXT 0x9367 -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 -#define GL_TIME_ELAPSED_EXT 0x88BF -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT 0x1700 -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -#define GL_INCLUSIVE_EXT 0x8F10 -#define GL_EXCLUSIVE_EXT 0x8F11 -#define GL_WINDOW_RECTANGLE_EXT 0x8F12 -#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 -#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 -#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 -#define GL_SYNC_X11_FENCE_EXT 0x90E1 -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#define GL_CULL_VERTEX_IBM 103050 -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#define GL_ALL_STATIC_DATA_IBM 103060 -#define GL_STATIC_VERTEX_ARRAY_IBM 103061 -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#define GL_INTERLACE_READ_INGR 0x8568 -#define GL_BLACKHOLE_RENDER_INTEL 0x83FC -#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE -#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF -#define GL_LAYOUT_DEFAULT_INTEL 0 -#define GL_LAYOUT_LINEAR_INTEL 1 -#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 -#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 -#define GL_PERFQUERY_WAIT_INTEL 0x83FB -#define GL_PERFQUERY_FLUSH_INTEL 0x83FA -#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 -#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 -#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 -#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 -#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 -#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 -#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 -#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 -#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 -#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA -#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB -#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC -#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD -#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE -#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF -#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 -#define GL_MULTIPLY_KHR 0x9294 -#define GL_SCREEN_KHR 0x9295 -#define GL_OVERLAY_KHR 0x9296 -#define GL_DARKEN_KHR 0x9297 -#define GL_LIGHTEN_KHR 0x9298 -#define GL_COLORDODGE_KHR 0x9299 -#define GL_COLORBURN_KHR 0x929A -#define GL_HARDLIGHT_KHR 0x929B -#define GL_SOFTLIGHT_KHR 0x929C -#define GL_DIFFERENCE_KHR 0x929E -#define GL_EXCLUSION_KHR 0x92A0 -#define GL_HSL_HUE_KHR 0x92AD -#define GL_HSL_SATURATION_KHR 0x92AE -#define GL_HSL_COLOR_KHR 0x92AF -#define GL_HSL_LUMINOSITY_KHR 0x92B0 -#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 -#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB -#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 -#define GL_DEBUG_SOURCE_API_KHR 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A -#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B -#define GL_DEBUG_TYPE_ERROR_KHR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 -#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 -#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D -#define GL_BUFFER_KHR 0x82E0 -#define GL_SHADER_KHR 0x82E1 -#define GL_PROGRAM_KHR 0x82E2 -#define GL_VERTEX_ARRAY_KHR 0x8074 -#define GL_QUERY_KHR 0x82E3 -#define GL_PROGRAM_PIPELINE_KHR 0x82E4 -#define GL_SAMPLER_KHR 0x82E6 -#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 -#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 -#define GL_DEBUG_OUTPUT_KHR 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 -#define GL_STACK_OVERFLOW_KHR 0x0503 -#define GL_STACK_UNDERFLOW_KHR 0x0504 -#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 -#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 -#define GL_COMPLETION_STATUS_KHR 0x91B1 -#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 -#define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 -#define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 -#define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 -#define GL_NO_RESET_NOTIFICATION_KHR 0x8261 -#define GL_CONTEXT_LOST_KHR 0x0507 -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E -#define GL_PACK_INVERT_MESA 0x8758 -#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F -#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 -#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 -#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 -#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 -#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 -#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A -#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B -#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 -#define GL_MAX_LGPU_GPUS_NVX 0x92BA -#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D -#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E -#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F -#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF -#define GL_BLEND_OVERLAP_NV 0x9281 -#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 -#define GL_BLUE_NV 0x1905 -#define GL_COLORBURN_NV 0x929A -#define GL_COLORDODGE_NV 0x9299 -#define GL_CONJOINT_NV 0x9284 -#define GL_CONTRAST_NV 0x92A1 -#define GL_DARKEN_NV 0x9297 -#define GL_DIFFERENCE_NV 0x929E -#define GL_DISJOINT_NV 0x9283 -#define GL_DST_ATOP_NV 0x928F -#define GL_DST_IN_NV 0x928B -#define GL_DST_NV 0x9287 -#define GL_DST_OUT_NV 0x928D -#define GL_DST_OVER_NV 0x9289 -#define GL_EXCLUSION_NV 0x92A0 -#define GL_GREEN_NV 0x1904 -#define GL_HARDLIGHT_NV 0x929B -#define GL_HARDMIX_NV 0x92A9 -#define GL_HSL_COLOR_NV 0x92AF -#define GL_HSL_HUE_NV 0x92AD -#define GL_HSL_LUMINOSITY_NV 0x92B0 -#define GL_HSL_SATURATION_NV 0x92AE -#define GL_INVERT_OVG_NV 0x92B4 -#define GL_INVERT_RGB_NV 0x92A3 -#define GL_LIGHTEN_NV 0x9298 -#define GL_LINEARBURN_NV 0x92A5 -#define GL_LINEARDODGE_NV 0x92A4 -#define GL_LINEARLIGHT_NV 0x92A7 -#define GL_MINUS_CLAMPED_NV 0x92B3 -#define GL_MINUS_NV 0x929F -#define GL_MULTIPLY_NV 0x9294 -#define GL_OVERLAY_NV 0x9296 -#define GL_PINLIGHT_NV 0x92A8 -#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 -#define GL_PLUS_CLAMPED_NV 0x92B1 -#define GL_PLUS_DARKER_NV 0x9292 -#define GL_PLUS_NV 0x9291 -#define GL_RED_NV 0x1903 -#define GL_SCREEN_NV 0x9295 -#define GL_SOFTLIGHT_NV 0x929C -#define GL_SRC_ATOP_NV 0x928E -#define GL_SRC_IN_NV 0x928A -#define GL_SRC_NV 0x9286 -#define GL_SRC_OUT_NV 0x928C -#define GL_SRC_OVER_NV 0x9288 -#define GL_UNCORRELATED_NV 0x9282 -#define GL_VIVIDLIGHT_NV 0x92A6 -#define GL_XOR_NV 0x1506 -#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 -#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C -#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D -#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E -#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 -#define GL_NOP_COMMAND_NV 0x0001 -#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 -#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 -#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 -#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 -#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 -#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 -#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 -#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 -#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A -#define GL_BLEND_COLOR_COMMAND_NV 0x000B -#define GL_STENCIL_REF_COMMAND_NV 0x000C -#define GL_LINE_WIDTH_COMMAND_NV 0x000D -#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E -#define GL_ALPHA_REF_COMMAND_NV 0x000F -#define GL_VIEWPORT_COMMAND_NV 0x0010 -#define GL_SCISSOR_COMMAND_NV 0x0011 -#define GL_FRONT_FACE_COMMAND_NV 0x0012 -#define GL_COMPUTE_PROGRAM_NV 0x90FB -#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 -#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 -#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 -#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 -#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 -#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 -#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A -#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 -#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D -#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 -#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF -#define GL_DEPTH_CLAMP_NV 0x864F -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#define GL_FILL_RECTANGLE_NV 0x933C -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -#define GL_EYE_PLANE 0x2502 -#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD -#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#define GL_DEPTH_SAMPLES_NV 0x932D -#define GL_STENCIL_SAMPLES_NV 0x932E -#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F -#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 -#define GL_COVERAGE_MODULATION_NV 0x9332 -#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -#define GL_PER_GPU_STORAGE_BIT_NV 0x0800 -#define GL_MULTICAST_GPUS_NV 0x92BA -#define GL_RENDER_GPU_MASK_NV 0x9558 -#define GL_PER_GPU_STORAGE_NV 0x9548 -#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F -#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 -#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 -#define GL_HALF_FLOAT_NV 0x140B -#define GL_MULTISAMPLES_NV 0x9371 -#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 -#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 -#define GL_CONFORMANT_NV 0x9374 -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 -#define GL_PATH_FORMAT_SVG_NV 0x9070 -#define GL_PATH_FORMAT_PS_NV 0x9071 -#define GL_STANDARD_FONT_NAME_NV 0x9072 -#define GL_SYSTEM_FONT_NAME_NV 0x9073 -#define GL_FILE_NAME_NV 0x9074 -#define GL_PATH_STROKE_WIDTH_NV 0x9075 -#define GL_PATH_END_CAPS_NV 0x9076 -#define GL_PATH_INITIAL_END_CAP_NV 0x9077 -#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 -#define GL_PATH_JOIN_STYLE_NV 0x9079 -#define GL_PATH_MITER_LIMIT_NV 0x907A -#define GL_PATH_DASH_CAPS_NV 0x907B -#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C -#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D -#define GL_PATH_DASH_OFFSET_NV 0x907E -#define GL_PATH_CLIENT_LENGTH_NV 0x907F -#define GL_PATH_FILL_MODE_NV 0x9080 -#define GL_PATH_FILL_MASK_NV 0x9081 -#define GL_PATH_FILL_COVER_MODE_NV 0x9082 -#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 -#define GL_PATH_STROKE_MASK_NV 0x9084 -#define GL_COUNT_UP_NV 0x9088 -#define GL_COUNT_DOWN_NV 0x9089 -#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A -#define GL_CONVEX_HULL_NV 0x908B -#define GL_BOUNDING_BOX_NV 0x908D -#define GL_TRANSLATE_X_NV 0x908E -#define GL_TRANSLATE_Y_NV 0x908F -#define GL_TRANSLATE_2D_NV 0x9090 -#define GL_TRANSLATE_3D_NV 0x9091 -#define GL_AFFINE_2D_NV 0x9092 -#define GL_AFFINE_3D_NV 0x9094 -#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 -#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 -#define GL_UTF8_NV 0x909A -#define GL_UTF16_NV 0x909B -#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C -#define GL_PATH_COMMAND_COUNT_NV 0x909D -#define GL_PATH_COORD_COUNT_NV 0x909E -#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F -#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 -#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 -#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 -#define GL_SQUARE_NV 0x90A3 -#define GL_ROUND_NV 0x90A4 -#define GL_TRIANGULAR_NV 0x90A5 -#define GL_BEVEL_NV 0x90A6 -#define GL_MITER_REVERT_NV 0x90A7 -#define GL_MITER_TRUNCATE_NV 0x90A8 -#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 -#define GL_USE_MISSING_GLYPH_NV 0x90AA -#define GL_PATH_ERROR_POSITION_NV 0x90AB -#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD -#define GL_ADJACENT_PAIRS_NV 0x90AE -#define GL_FIRST_TO_REST_NV 0x90AF -#define GL_PATH_GEN_MODE_NV 0x90B0 -#define GL_PATH_GEN_COEFF_NV 0x90B1 -#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 -#define GL_PATH_STENCIL_FUNC_NV 0x90B7 -#define GL_PATH_STENCIL_REF_NV 0x90B8 -#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 -#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD -#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE -#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF -#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 -#define GL_MOVE_TO_RESETS_NV 0x90B5 -#define GL_MOVE_TO_CONTINUES_NV 0x90B6 -#define GL_CLOSE_PATH_NV 0x00 -#define GL_MOVE_TO_NV 0x02 -#define GL_RELATIVE_MOVE_TO_NV 0x03 -#define GL_LINE_TO_NV 0x04 -#define GL_RELATIVE_LINE_TO_NV 0x05 -#define GL_HORIZONTAL_LINE_TO_NV 0x06 -#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 -#define GL_VERTICAL_LINE_TO_NV 0x08 -#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 -#define GL_QUADRATIC_CURVE_TO_NV 0x0A -#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B -#define GL_CUBIC_CURVE_TO_NV 0x0C -#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D -#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E -#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F -#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 -#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 -#define GL_SMALL_CCW_ARC_TO_NV 0x12 -#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 -#define GL_SMALL_CW_ARC_TO_NV 0x14 -#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 -#define GL_LARGE_CCW_ARC_TO_NV 0x16 -#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 -#define GL_LARGE_CW_ARC_TO_NV 0x18 -#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 -#define GL_RESTART_PATH_NV 0xF0 -#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 -#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 -#define GL_RECT_NV 0xF6 -#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 -#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA -#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC -#define GL_ARC_TO_NV 0xFE -#define GL_RELATIVE_ARC_TO_NV 0xFF -#define GL_BOLD_BIT_NV 0x01 -#define GL_ITALIC_BIT_NV 0x02 -#define GL_GLYPH_WIDTH_BIT_NV 0x01 -#define GL_GLYPH_HEIGHT_BIT_NV 0x02 -#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 -#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 -#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 -#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 -#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 -#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 -#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 -#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 -#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 -#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 -#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 -#define GL_FONT_ASCENDER_BIT_NV 0x00200000 -#define GL_FONT_DESCENDER_BIT_NV 0x00400000 -#define GL_FONT_HEIGHT_BIT_NV 0x00800000 -#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 -#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 -#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 -#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 -#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 -#define GL_ROUNDED_RECT_NV 0xE8 -#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 -#define GL_ROUNDED_RECT2_NV 0xEA -#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB -#define GL_ROUNDED_RECT4_NV 0xEC -#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED -#define GL_ROUNDED_RECT8_NV 0xEE -#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF -#define GL_RELATIVE_RECT_NV 0xF7 -#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 -#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 -#define GL_FONT_UNAVAILABLE_NV 0x936A -#define GL_FONT_UNINTELLIGIBLE_NV 0x936B -#define GL_CONIC_CURVE_TO_NV 0x1A -#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B -#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 -#define GL_STANDARD_FONT_FORMAT_NV 0x936C -#define GL_2_BYTES_NV 0x1407 -#define GL_3_BYTES_NV 0x1408 -#define GL_4_BYTES_NV 0x1409 -#define GL_EYE_LINEAR_NV 0x2400 -#define GL_OBJECT_LINEAR_NV 0x2401 -#define GL_CONSTANT_NV 0x8576 -#define GL_PATH_FOG_GEN_MODE_NV 0x90AC -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 -#define GL_PATH_PROJECTION_NV 0x1701 -#define GL_PATH_MODELVIEW_NV 0x1700 -#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 -#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 -#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 -#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 -#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 -#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 -#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 -#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 -#define GL_FRAGMENT_INPUT_NV 0x936D -#define GL_SHARED_EDGE_NV 0xC0 -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 -#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 -#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 -#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 -#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 -#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -#define GL_FOG 0x0B60 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#define GL_PURGED_CONTEXT_RESET_NV 0x92BB -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 -#define GL_SAMPLE_LOCATION_NV 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 -#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 -#define GL_WARP_SIZE_NV 0x9339 -#define GL_WARPS_PER_SM_NV 0x933A -#define GL_SM_COUNT_NV 0x933B -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 -#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F -#define GL_LAYER_NV 0x8DAA -#define GL_NEXT_BUFFER_NV -2 -#define GL_SKIP_COMPONENTS4_NV -3 -#define GL_SKIP_COMPONENTS3_NV -4 -#define GL_SKIP_COMPONENTS2_NV -5 -#define GL_SKIP_COMPONENTS1_NV -6 -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 -#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E -#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F -#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C -#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 -#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 -#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 -#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A -#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#define GL_FIXED_OES 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 -#define GL_MAX_VIEWS_OVR 0x9631 -#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#define GL_RGBA_DXT5_S3TC 0x83A4 -#define GL_RGBA4_DXT5_S3TC 0x83A5 -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#define GL_ASYNC_MARKER_SGIX 0x8329 -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#define GL_INTERLACE_SGIX 0x8094 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#define GL_LIST_PRIORITY_SGIX 0x8182 -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#define GL_PACK_RESAMPLE_SGIX 0x842E -#define GL_UNPACK_RESAMPLE_SGIX 0x842F -#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#define GL_WRAP_BORDER_SUN 0x81D4 -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -#define GL_SLICE_ACCUM_SUN 0x85CC -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#define GL_3DC_X_AMD 0x87F9 -#define GL_3DC_XY_AMD 0x87FA -#define GL_ATC_RGB_AMD 0x8C92 -#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 -#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE -#define GL_Z400_BINARY_AMD 0x8740 -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 -#define GL_PROGRAM_BINARY_ANGLE 0x93A6 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 -#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 -#define GL_CLIP_DISTANCE0_APPLE 0x3000 -#define GL_CLIP_DISTANCE1_APPLE 0x3001 -#define GL_CLIP_DISTANCE2_APPLE 0x3002 -#define GL_CLIP_DISTANCE3_APPLE 0x3003 -#define GL_CLIP_DISTANCE4_APPLE 0x3004 -#define GL_CLIP_DISTANCE5_APPLE 0x3005 -#define GL_CLIP_DISTANCE6_APPLE 0x3006 -#define GL_CLIP_DISTANCE7_APPLE 0x3007 -#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 -#define GL_MAX_SAMPLES_APPLE 0x8D57 -#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA -#define GL_SYNC_OBJECT_APPLE 0x8A53 -#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 -#define GL_OBJECT_TYPE_APPLE 0x9112 -#define GL_SYNC_CONDITION_APPLE 0x9113 -#define GL_SYNC_STATUS_APPLE 0x9114 -#define GL_SYNC_FLAGS_APPLE 0x9115 -#define GL_SYNC_FENCE_APPLE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 -#define GL_UNSIGNALED_APPLE 0x9118 -#define GL_SIGNALED_APPLE 0x9119 -#define GL_ALREADY_SIGNALED_APPLE 0x911A -#define GL_TIMEOUT_EXPIRED_APPLE 0x911B -#define GL_CONDITION_SATISFIED_APPLE 0x911C -#define GL_WAIT_FAILED_APPLE 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 -#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFF -#define GL_BGRA8_EXT 0x93A1 -#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D -#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B -#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E -#define GL_R11F_G11F_B10F_APPLE 0x8C3A -#define GL_RGB9_E5_APPLE 0x8C3D -#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 -#define GL_MALI_SHADER_BINARY_ARM 0x8F60 -#define GL_FETCH_PER_SAMPLE_ARM 0x8F65 -#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 -#define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251 -#define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252 -#define GL_DMP_PROGRAM_BINARY_DMP 0x9253 -#define GL_SHADER_BINARY_DMP 0x9250 -#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 -#define GL_TEXTURE_EXTERNAL_OES 0x8D65 -#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 -#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 -#define GL_SRC1_COLOR_EXT 0x88F9 -#define GL_SRC1_ALPHA_EXT 0x8589 -#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB -#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 -#define GL_LOCATION_INDEX_EXT 0x930F -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC -#define GL_MAP_PERSISTENT_BIT_EXT 0x0040 -#define GL_MAP_COHERENT_BIT_EXT 0x0080 -#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100 -#define GL_CLIENT_STORAGE_BIT_EXT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F -#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220 -#define GL_LOWER_LEFT_EXT 0x8CA1 -#define GL_UPPER_LEFT_EXT 0x8CA2 -#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E -#define GL_ZERO_TO_ONE_EXT 0x935F -#define GL_CLIP_ORIGIN_EXT 0x935C -#define GL_CLIP_DEPTH_MODE_EXT 0x935D -#define GL_MAX_CLIP_DISTANCES_EXT 0x0D32 -#define GL_MAX_CULL_DISTANCES_EXT 0x82F9 -#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT 0x82FA -#define GL_CLIP_DISTANCE0_EXT 0x3000 -#define GL_CLIP_DISTANCE1_EXT 0x3001 -#define GL_CLIP_DISTANCE2_EXT 0x3002 -#define GL_CLIP_DISTANCE3_EXT 0x3003 -#define GL_CLIP_DISTANCE4_EXT 0x3004 -#define GL_CLIP_DISTANCE5_EXT 0x3005 -#define GL_CLIP_DISTANCE6_EXT 0x3006 -#define GL_CLIP_DISTANCE7_EXT 0x3007 -#define GL_RGBA16F_EXT 0x881A -#define GL_RGB16F_EXT 0x881B -#define GL_RG16F_EXT 0x822F -#define GL_R16F_EXT 0x822D -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 -#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 -#define GL_COLOR_EXT 0x1800 -#define GL_DEPTH_EXT 0x1801 -#define GL_STENCIL_EXT 0x1802 -#define GL_QUERY_COUNTER_BITS_EXT 0x8864 -#define GL_CURRENT_QUERY_EXT 0x8865 -#define GL_QUERY_RESULT_EXT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 -#define GL_TIMESTAMP_EXT 0x8E28 -#define GL_GPU_DISJOINT_EXT 0x8FBB -#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 -#define GL_DRAW_BUFFER0_EXT 0x8825 -#define GL_DRAW_BUFFER1_EXT 0x8826 -#define GL_DRAW_BUFFER2_EXT 0x8827 -#define GL_DRAW_BUFFER3_EXT 0x8828 -#define GL_DRAW_BUFFER4_EXT 0x8829 -#define GL_DRAW_BUFFER5_EXT 0x882A -#define GL_DRAW_BUFFER6_EXT 0x882B -#define GL_DRAW_BUFFER7_EXT 0x882C -#define GL_DRAW_BUFFER8_EXT 0x882D -#define GL_DRAW_BUFFER9_EXT 0x882E -#define GL_DRAW_BUFFER10_EXT 0x882F -#define GL_DRAW_BUFFER11_EXT 0x8830 -#define GL_DRAW_BUFFER12_EXT 0x8831 -#define GL_DRAW_BUFFER13_EXT 0x8832 -#define GL_DRAW_BUFFER14_EXT 0x8833 -#define GL_DRAW_BUFFER15_EXT 0x8834 -#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 -#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 -#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 -#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 -#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F -#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 -#define GL_UNDEFINED_VERTEX_EXT 0x8260 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 -#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 -#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE -#define GL_MAP_READ_BIT_EXT 0x0001 -#define GL_MAP_WRITE_BIT_EXT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C -#define GL_COLOR_ATTACHMENT_EXT 0x90F0 -#define GL_MULTIVIEW_EXT 0x90F1 -#define GL_DRAW_BUFFER_EXT 0x0C01 -#define GL_READ_BUFFER_EXT 0x0C02 -#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 -#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A -#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE -#define GL_CONTEXT_FLAG_PROTECTED_CONTENT_BIT_EXT 0x00000010 -#define GL_TEXTURE_PROTECTED_EXT 0x8BFA -#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 -#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 -#define GL_R16_SNORM_EXT 0x8F98 -#define GL_RG16_SNORM_EXT 0x8F99 -#define GL_RGBA16_SNORM_EXT 0x8F9B -#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 -#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 -#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 -#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 -#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 -#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 -#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 -#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_FAST_SIZE_EXT 0x9650 -#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_SIZE_EXT 0x9651 -#define GL_FRAMEBUFFER_INCOMPLETE_INSUFFICIENT_SHADER_COMBINED_LOCAL_STORAGE_EXT 0x9652 -#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C -#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D -#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E -#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 -#define GL_TEXTURE_SPARSE_EXT 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 -#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA -#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 -#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 -#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 -#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 -#define GL_PATCHES_EXT 0x000E -#define GL_PATCH_VERTICES_EXT 0x8E72 -#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75 -#define GL_TESS_GEN_MODE_EXT 0x8E76 -#define GL_TESS_GEN_SPACING_EXT 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78 -#define GL_TESS_GEN_POINT_MODE_EXT 0x8E79 -#define GL_ISOLINES_EXT 0x8E7A -#define GL_QUADS_EXT 0x0007 -#define GL_FRACTIONAL_ODD_EXT 0x8E7B -#define GL_FRACTIONAL_EVEN_EXT 0x8E7C -#define GL_MAX_PATCH_VERTICES_EXT 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4 -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9 -#define GL_IS_PER_PATCH_EXT 0x92E7 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308 -#define GL_TESS_CONTROL_SHADER_EXT 0x8E88 -#define GL_TESS_EVALUATION_SHADER_EXT 0x8E87 -#define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010 -#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 -#define GL_CLAMP_TO_BORDER_EXT 0x812D -#define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F -#define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D -#define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E -#define GL_TEXTURE_ASTC_DECODE_PRECISION_EXT 0x8F69 -#define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F -#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A -#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F -#define GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT 0x8FBF -#define GL_R16_EXT 0x822A -#define GL_RG16_EXT 0x822C -#define GL_RGB16_SNORM_EXT 0x8F9A -#define GL_RED_EXT 0x1903 -#define GL_RG_EXT 0x8227 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#define GL_SR8_EXT 0x8FBD -#define GL_SRG8_EXT 0x8FBE -#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F -#define GL_RGBA32F_EXT 0x8814 -#define GL_RGB32F_EXT 0x8815 -#define GL_ALPHA32F_EXT 0x8816 -#define GL_LUMINANCE32F_EXT 0x8818 -#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 -#define GL_ALPHA16F_EXT 0x881C -#define GL_LUMINANCE16F_EXT 0x881E -#define GL_LUMINANCE_ALPHA16F_EXT 0x881F -#define GL_R32F_EXT 0x822E -#define GL_RG32F_EXT 0x8230 -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE -#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 -#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 -#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_AND_DOWNSAMPLE_IMG 0x913C -#define GL_NUM_DOWNSAMPLE_SCALES_IMG 0x913D -#define GL_DOWNSAMPLE_SCALES_IMG 0x913E -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SCALE_IMG 0x913F -#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 -#define GL_MAX_SAMPLES_IMG 0x9135 -#define GL_TEXTURE_SAMPLES_IMG 0x9136 -#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 -#define GL_BGRA_IMG 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 -#define GL_SGX_BINARY_IMG 0x8C0A -#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 -#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 -#define GL_CUBIC_IMG 0x9139 -#define GL_CUBIC_MIPMAP_NEAREST_IMG 0x913A -#define GL_CUBIC_MIPMAP_LINEAR_IMG 0x913B -#define GL_COPY_READ_BUFFER_NV 0x8F36 -#define GL_COPY_WRITE_BUFFER_NV 0x8F37 -#define GL_COVERAGE_COMPONENT_NV 0x8ED0 -#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 -#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 -#define GL_COVERAGE_BUFFERS_NV 0x8ED3 -#define GL_COVERAGE_SAMPLES_NV 0x8ED4 -#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 -#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 -#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 -#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 -#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C -#define GL_MAX_DRAW_BUFFERS_NV 0x8824 -#define GL_DRAW_BUFFER0_NV 0x8825 -#define GL_DRAW_BUFFER1_NV 0x8826 -#define GL_DRAW_BUFFER2_NV 0x8827 -#define GL_DRAW_BUFFER3_NV 0x8828 -#define GL_DRAW_BUFFER4_NV 0x8829 -#define GL_DRAW_BUFFER5_NV 0x882A -#define GL_DRAW_BUFFER6_NV 0x882B -#define GL_DRAW_BUFFER7_NV 0x882C -#define GL_DRAW_BUFFER8_NV 0x882D -#define GL_DRAW_BUFFER9_NV 0x882E -#define GL_DRAW_BUFFER10_NV 0x882F -#define GL_DRAW_BUFFER11_NV 0x8830 -#define GL_DRAW_BUFFER12_NV 0x8831 -#define GL_DRAW_BUFFER13_NV 0x8832 -#define GL_DRAW_BUFFER14_NV 0x8833 -#define GL_DRAW_BUFFER15_NV 0x8834 -#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 -#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 -#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 -#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 -#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 -#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 -#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 -#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 -#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 -#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 -#define GL_COLOR_ATTACHMENT10_NV 0x8CEA -#define GL_COLOR_ATTACHMENT11_NV 0x8CEB -#define GL_COLOR_ATTACHMENT12_NV 0x8CEC -#define GL_COLOR_ATTACHMENT13_NV 0x8CED -#define GL_COLOR_ATTACHMENT14_NV 0x8CEE -#define GL_COLOR_ATTACHMENT15_NV 0x8CEF -#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF -#define GL_READ_FRAMEBUFFER_NV 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA -#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 -#define GL_MAX_SAMPLES_NV 0x8D57 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE -#define GL_FLOAT_MAT2x3_NV 0x8B65 -#define GL_FLOAT_MAT2x4_NV 0x8B66 -#define GL_FLOAT_MAT3x2_NV 0x8B67 -#define GL_FLOAT_MAT3x4_NV 0x8B68 -#define GL_FLOAT_MAT4x2_NV 0x8B69 -#define GL_FLOAT_MAT4x3_NV 0x8B6A -#define GL_PIXEL_PACK_BUFFER_NV 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_NV 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_NV 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_NV 0x88EF -#define GL_POLYGON_MODE_NV 0x0B40 -#define GL_POLYGON_OFFSET_POINT_NV 0x2A01 -#define GL_POLYGON_OFFSET_LINE_NV 0x2A02 -#define GL_POINT_NV 0x1B00 -#define GL_LINE_NV 0x1B01 -#define GL_FILL_NV 0x1B02 -#define GL_READ_BUFFER_NV 0x0C02 -#define GL_SLUMINANCE_NV 0x8C46 -#define GL_SLUMINANCE_ALPHA_NV 0x8C44 -#define GL_SRGB8_NV 0x8C41 -#define GL_SLUMINANCE8_NV 0x8C47 -#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 -#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F -#define GL_ETC1_SRGB8_NV 0x88EE -#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 -#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 -#define GL_CLAMP_TO_BORDER_NV 0x812D -#define GL_MAX_VIEWPORTS_NV 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F -#define GL_SAMPLER_EXTERNAL_OES 0x8D66 -#define GL_ETC1_RGB8_OES 0x8D64 -#define GL_DEPTH_COMPONENT24_OES 0x81A6 -#define GL_GEOMETRY_SHADER_OES 0x8DD9 -#define GL_GEOMETRY_SHADER_BIT_OES 0x00000004 -#define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916 -#define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917 -#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918 -#define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F -#define GL_LAYER_PROVOKING_VERTEX_OES 0x825E -#define GL_LINES_ADJACENCY_OES 0x000A -#define GL_LINE_STRIP_ADJACENCY_OES 0x000B -#define GL_TRIANGLES_ADJACENCY_OES 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124 -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1 -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5 -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7 -#define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E -#define GL_UNDEFINED_VERTEX_OES 0x8260 -#define GL_PRIMITIVES_GENERATED_OES 0x8C87 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312 -#define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7 -#define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309 -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE -#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF -#define GL_WRITE_ONLY_OES 0x88B9 -#define GL_BUFFER_ACCESS_OES 0x88BB -#define GL_BUFFER_MAPPED_OES 0x88BC -#define GL_BUFFER_MAP_POINTER_OES 0x88BD -#define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE -#define GL_ALPHA8_OES 0x803C -#define GL_DEPTH_COMPONENT16_OES 0x81A5 -#define GL_LUMINANCE4_ALPHA4_OES 0x8043 -#define GL_LUMINANCE8_ALPHA8_OES 0x8045 -#define GL_LUMINANCE8_OES 0x8040 -#define GL_RGBA4_OES 0x8056 -#define GL_RGB5_A1_OES 0x8057 -#define GL_RGB565_OES 0x8D62 -#define GL_RGB8_OES 0x8051 -#define GL_RGBA8_OES 0x8058 -#define GL_SAMPLE_SHADING_OES 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B -#define GL_STENCIL_INDEX1_OES 0x8D46 -#define GL_STENCIL_INDEX4_OES 0x8D47 -#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 -#define GL_PATCHES_OES 0x000E -#define GL_PATCH_VERTICES_OES 0x8E72 -#define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75 -#define GL_TESS_GEN_MODE_OES 0x8E76 -#define GL_TESS_GEN_SPACING_OES 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78 -#define GL_TESS_GEN_POINT_MODE_OES 0x8E79 -#define GL_ISOLINES_OES 0x8E7A -#define GL_QUADS_OES 0x0007 -#define GL_FRACTIONAL_ODD_OES 0x8E7B -#define GL_FRACTIONAL_EVEN_OES 0x8E7C -#define GL_MAX_PATCH_VERTICES_OES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4 -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9 -#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221 -#define GL_IS_PER_PATCH_OES 0x92E7 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308 -#define GL_TESS_CONTROL_SHADER_OES 0x8E88 -#define GL_TESS_EVALUATION_SHADER_OES 0x8E87 -#define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010 -#define GL_TEXTURE_WRAP_R_OES 0x8072 -#define GL_TEXTURE_3D_OES 0x806F -#define GL_TEXTURE_BINDING_3D_OES 0x806A -#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 -#define GL_SAMPLER_3D_OES 0x8B5F -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 -#define GL_TEXTURE_BORDER_COLOR_OES 0x1004 -#define GL_CLAMP_TO_BORDER_OES 0x812D -#define GL_TEXTURE_BUFFER_OES 0x8C2A -#define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F -#define GL_SAMPLER_BUFFER_OES 0x8DC2 -#define GL_INT_SAMPLER_BUFFER_OES 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 -#define GL_IMAGE_BUFFER_OES 0x9051 -#define GL_INT_IMAGE_BUFFER_OES 0x905C -#define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 -#define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D -#define GL_TEXTURE_BUFFER_SIZE_OES 0x919E -#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 -#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 -#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 -#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 -#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 -#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 -#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 -#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 -#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 -#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A -#define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F -#define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A -#define GL_HALF_FLOAT_OES 0x8D61 -#define GL_STENCIL_INDEX_OES 0x1901 -#define GL_STENCIL_INDEX8_OES 0x8D48 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105 -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D -#define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE -#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 -#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 -#define GL_INT_10_10_10_2_OES 0x8DF7 -#define GL_MAX_VIEWPORTS_OES 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS_OES 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE_OES 0x825D -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_OES 0x825F -#define GL_ALPHA_TEST_QCOM 0x0BC0 -#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 -#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 -#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 -#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 -#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 -#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 -#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 -#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 -#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 -#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 -#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 -#define GL_TEXTURE_TYPE_QCOM 0x8BD7 -#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 -#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 -#define GL_TEXTURE_TARGET_QCOM 0x8BDA -#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB -#define GL_STATE_RESTORE 0x8BDC -#define GL_FOVEATION_ENABLE_BIT_QCOM 0x00000001 -#define GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM 0x00000002 -#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 -#define GL_FRAMEBUFFER_FETCH_NONCOHERENT_QCOM 0x96A2 -#define GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM 0x8BFB -#define GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM 0x8BFC -#define GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM 0x8BFD -#define GL_TEXTURE_FOVEATED_NUM_FOCAL_POINTS_QUERY_QCOM 0x8BFE -#define GL_FRAMEBUFFER_INCOMPLETE_FOVEATION_QCOM 0x8BFF -#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 -#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 -#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 -#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 -#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 -#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 -#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 -#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 -#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 -#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 -#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 -#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 -#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 -#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 -#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 -#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 -#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 -#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 -#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 -#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 -#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 -#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 -#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 -#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 -#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 -#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 -#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 -#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 -#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 -#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 -#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 -#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 -#define GL_WRITEONLY_RENDERING_QCOM 0x8823 -#define GL_SHADER_BINARY_VIV 0x8FC4 -#ifndef GL_3DFX_multisample +GLAD_API_CALL int GLAD_GL_VERSION_4_3; #define GL_3DFX_multisample 1 -GLAPI int GLAD_GL_3DFX_multisample; -#endif -#ifndef GL_3DFX_tbuffer +GLAD_API_CALL int GLAD_GL_3DFX_multisample; #define GL_3DFX_tbuffer 1 -GLAPI int GLAD_GL_3DFX_tbuffer; -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC)(GLuint mask); -GLAPI PFNGLTBUFFERMASK3DFXPROC glad_glTbufferMask3DFX; -#define glTbufferMask3DFX glad_glTbufferMask3DFX -#endif -#ifndef GL_3DFX_texture_compression_FXT1 +GLAD_API_CALL int GLAD_GL_3DFX_tbuffer; #define GL_3DFX_texture_compression_FXT1 1 -GLAPI int GLAD_GL_3DFX_texture_compression_FXT1; -#endif -#ifndef GL_AMD_blend_minmax_factor +GLAD_API_CALL int GLAD_GL_3DFX_texture_compression_FXT1; #define GL_AMD_blend_minmax_factor 1 -GLAPI int GLAD_GL_AMD_blend_minmax_factor; -#endif -#ifndef GL_AMD_conservative_depth +GLAD_API_CALL int GLAD_GL_AMD_blend_minmax_factor; #define GL_AMD_conservative_depth 1 -GLAPI int GLAD_GL_AMD_conservative_depth; -#endif -#ifndef GL_AMD_debug_output +GLAD_API_CALL int GLAD_GL_AMD_conservative_depth; #define GL_AMD_debug_output 1 -GLAPI int GLAD_GL_AMD_debug_output; -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD; -#define glDebugMessageEnableAMD glad_glDebugMessageEnableAMD -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -GLAPI PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD; -#define glDebugMessageInsertAMD glad_glDebugMessageInsertAMD -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, void *userParam); -GLAPI PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD; -#define glDebugMessageCallbackAMD glad_glDebugMessageCallbackAMD -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -GLAPI PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD; -#define glGetDebugMessageLogAMD glad_glGetDebugMessageLogAMD -#endif -#ifndef GL_AMD_depth_clamp_separate +GLAD_API_CALL int GLAD_GL_AMD_debug_output; #define GL_AMD_depth_clamp_separate 1 -GLAPI int GLAD_GL_AMD_depth_clamp_separate; -#endif -#ifndef GL_AMD_draw_buffers_blend +GLAD_API_CALL int GLAD_GL_AMD_depth_clamp_separate; #define GL_AMD_draw_buffers_blend 1 -GLAPI int GLAD_GL_AMD_draw_buffers_blend; -typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC)(GLuint buf, GLenum src, GLenum dst); -GLAPI PFNGLBLENDFUNCINDEXEDAMDPROC glad_glBlendFuncIndexedAMD; -#define glBlendFuncIndexedAMD glad_glBlendFuncIndexedAMD -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC glad_glBlendFuncSeparateIndexedAMD; -#define glBlendFuncSeparateIndexedAMD glad_glBlendFuncSeparateIndexedAMD -typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC)(GLuint buf, GLenum mode); -GLAPI PFNGLBLENDEQUATIONINDEXEDAMDPROC glad_glBlendEquationIndexedAMD; -#define glBlendEquationIndexedAMD glad_glBlendEquationIndexedAMD -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC glad_glBlendEquationSeparateIndexedAMD; -#define glBlendEquationSeparateIndexedAMD glad_glBlendEquationSeparateIndexedAMD -#endif -#ifndef GL_AMD_framebuffer_sample_positions +GLAD_API_CALL int GLAD_GL_AMD_draw_buffers_blend; +#define GL_AMD_framebuffer_multisample_advanced 1 +GLAD_API_CALL int GLAD_GL_AMD_framebuffer_multisample_advanced; #define GL_AMD_framebuffer_sample_positions 1 -GLAPI int GLAD_GL_AMD_framebuffer_sample_positions; -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)(GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -GLAPI PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glFramebufferSamplePositionsfvAMD; -#define glFramebufferSamplePositionsfvAMD glad_glFramebufferSamplePositionsfvAMD -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)(GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -GLAPI PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glNamedFramebufferSamplePositionsfvAMD; -#define glNamedFramebufferSamplePositionsfvAMD glad_glNamedFramebufferSamplePositionsfvAMD -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC)(GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -GLAPI PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetFramebufferParameterfvAMD; -#define glGetFramebufferParameterfvAMD glad_glGetFramebufferParameterfvAMD -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC)(GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -GLAPI PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetNamedFramebufferParameterfvAMD; -#define glGetNamedFramebufferParameterfvAMD glad_glGetNamedFramebufferParameterfvAMD -#endif -#ifndef GL_AMD_gcn_shader +GLAD_API_CALL int GLAD_GL_AMD_framebuffer_sample_positions; #define GL_AMD_gcn_shader 1 -GLAPI int GLAD_GL_AMD_gcn_shader; -#endif -#ifndef GL_AMD_gpu_shader_half_float +GLAD_API_CALL int GLAD_GL_AMD_gcn_shader; #define GL_AMD_gpu_shader_half_float 1 -GLAPI int GLAD_GL_AMD_gpu_shader_half_float; -#endif -#ifndef GL_AMD_gpu_shader_int16 +GLAD_API_CALL int GLAD_GL_AMD_gpu_shader_half_float; #define GL_AMD_gpu_shader_int16 1 -GLAPI int GLAD_GL_AMD_gpu_shader_int16; -#endif -#ifndef GL_AMD_gpu_shader_int64 +GLAD_API_CALL int GLAD_GL_AMD_gpu_shader_int16; #define GL_AMD_gpu_shader_int64 1 -GLAPI int GLAD_GL_AMD_gpu_shader_int64; -typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC)(GLint location, GLint64EXT x); -GLAPI PFNGLUNIFORM1I64NVPROC glad_glUniform1i64NV; -#define glUniform1i64NV glad_glUniform1i64NV -typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y); -GLAPI PFNGLUNIFORM2I64NVPROC glad_glUniform2i64NV; -#define glUniform2i64NV glad_glUniform2i64NV -typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI PFNGLUNIFORM3I64NVPROC glad_glUniform3i64NV; -#define glUniform3i64NV glad_glUniform3i64NV -typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI PFNGLUNIFORM4I64NVPROC glad_glUniform4i64NV; -#define glUniform4i64NV glad_glUniform4i64NV -typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLUNIFORM1I64VNVPROC glad_glUniform1i64vNV; -#define glUniform1i64vNV glad_glUniform1i64vNV -typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLUNIFORM2I64VNVPROC glad_glUniform2i64vNV; -#define glUniform2i64vNV glad_glUniform2i64vNV -typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLUNIFORM3I64VNVPROC glad_glUniform3i64vNV; -#define glUniform3i64vNV glad_glUniform3i64vNV -typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLUNIFORM4I64VNVPROC glad_glUniform4i64vNV; -#define glUniform4i64vNV glad_glUniform4i64vNV -typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC)(GLint location, GLuint64EXT x); -GLAPI PFNGLUNIFORM1UI64NVPROC glad_glUniform1ui64NV; -#define glUniform1ui64NV glad_glUniform1ui64NV -typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI PFNGLUNIFORM2UI64NVPROC glad_glUniform2ui64NV; -#define glUniform2ui64NV glad_glUniform2ui64NV -typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI PFNGLUNIFORM3UI64NVPROC glad_glUniform3ui64NV; -#define glUniform3ui64NV glad_glUniform3ui64NV -typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI PFNGLUNIFORM4UI64NVPROC glad_glUniform4ui64NV; -#define glUniform4ui64NV glad_glUniform4ui64NV -typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLUNIFORM1UI64VNVPROC glad_glUniform1ui64vNV; -#define glUniform1ui64vNV glad_glUniform1ui64vNV -typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLUNIFORM2UI64VNVPROC glad_glUniform2ui64vNV; -#define glUniform2ui64vNV glad_glUniform2ui64vNV -typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLUNIFORM3UI64VNVPROC glad_glUniform3ui64vNV; -#define glUniform3ui64vNV glad_glUniform3ui64vNV -typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLUNIFORM4UI64VNVPROC glad_glUniform4ui64vNV; -#define glUniform4ui64vNV glad_glUniform4ui64vNV -typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC)(GLuint program, GLint location, GLint64EXT *params); -GLAPI PFNGLGETUNIFORMI64VNVPROC glad_glGetUniformi64vNV; -#define glGetUniformi64vNV glad_glGetUniformi64vNV -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLuint64EXT *params); -GLAPI PFNGLGETUNIFORMUI64VNVPROC glad_glGetUniformui64vNV; -#define glGetUniformui64vNV glad_glGetUniformui64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC)(GLuint program, GLint location, GLint64EXT x); -GLAPI PFNGLPROGRAMUNIFORM1I64NVPROC glad_glProgramUniform1i64NV; -#define glProgramUniform1i64NV glad_glProgramUniform1i64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GLAPI PFNGLPROGRAMUNIFORM2I64NVPROC glad_glProgramUniform2i64NV; -#define glProgramUniform2i64NV glad_glProgramUniform2i64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI PFNGLPROGRAMUNIFORM3I64NVPROC glad_glProgramUniform3i64NV; -#define glProgramUniform3i64NV glad_glProgramUniform3i64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI PFNGLPROGRAMUNIFORM4I64NVPROC glad_glProgramUniform4i64NV; -#define glProgramUniform4i64NV glad_glProgramUniform4i64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM1I64VNVPROC glad_glProgramUniform1i64vNV; -#define glProgramUniform1i64vNV glad_glProgramUniform1i64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM2I64VNVPROC glad_glProgramUniform2i64vNV; -#define glProgramUniform2i64vNV glad_glProgramUniform2i64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM3I64VNVPROC glad_glProgramUniform3i64vNV; -#define glProgramUniform3i64vNV glad_glProgramUniform3i64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM4I64VNVPROC glad_glProgramUniform4i64vNV; -#define glProgramUniform4i64vNV glad_glProgramUniform4i64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x); -GLAPI PFNGLPROGRAMUNIFORM1UI64NVPROC glad_glProgramUniform1ui64NV; -#define glProgramUniform1ui64NV glad_glProgramUniform1ui64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI PFNGLPROGRAMUNIFORM2UI64NVPROC glad_glProgramUniform2ui64NV; -#define glProgramUniform2ui64NV glad_glProgramUniform2ui64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI PFNGLPROGRAMUNIFORM3UI64NVPROC glad_glProgramUniform3ui64NV; -#define glProgramUniform3ui64NV glad_glProgramUniform3ui64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI PFNGLPROGRAMUNIFORM4UI64NVPROC glad_glProgramUniform4ui64NV; -#define glProgramUniform4ui64NV glad_glProgramUniform4ui64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM1UI64VNVPROC glad_glProgramUniform1ui64vNV; -#define glProgramUniform1ui64vNV glad_glProgramUniform1ui64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM2UI64VNVPROC glad_glProgramUniform2ui64vNV; -#define glProgramUniform2ui64vNV glad_glProgramUniform2ui64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM3UI64VNVPROC glad_glProgramUniform3ui64vNV; -#define glProgramUniform3ui64vNV glad_glProgramUniform3ui64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORM4UI64VNVPROC glad_glProgramUniform4ui64vNV; -#define glProgramUniform4ui64vNV glad_glProgramUniform4ui64vNV -#endif -#ifndef GL_AMD_interleaved_elements +GLAD_API_CALL int GLAD_GL_AMD_gpu_shader_int64; #define GL_AMD_interleaved_elements 1 -GLAPI int GLAD_GL_AMD_interleaved_elements; -typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC)(GLuint index, GLenum pname, GLint param); -GLAPI PFNGLVERTEXATTRIBPARAMETERIAMDPROC glad_glVertexAttribParameteriAMD; -#define glVertexAttribParameteriAMD glad_glVertexAttribParameteriAMD -#endif -#ifndef GL_AMD_multi_draw_indirect +GLAD_API_CALL int GLAD_GL_AMD_interleaved_elements; #define GL_AMD_multi_draw_indirect 1 -GLAPI int GLAD_GL_AMD_multi_draw_indirect; -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)(GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC glad_glMultiDrawArraysIndirectAMD; -#define glMultiDrawArraysIndirectAMD glad_glMultiDrawArraysIndirectAMD -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)(GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC glad_glMultiDrawElementsIndirectAMD; -#define glMultiDrawElementsIndirectAMD glad_glMultiDrawElementsIndirectAMD -#endif -#ifndef GL_AMD_name_gen_delete +GLAD_API_CALL int GLAD_GL_AMD_multi_draw_indirect; #define GL_AMD_name_gen_delete 1 -GLAPI int GLAD_GL_AMD_name_gen_delete; -typedef void (APIENTRYP PFNGLGENNAMESAMDPROC)(GLenum identifier, GLuint num, GLuint *names); -GLAPI PFNGLGENNAMESAMDPROC glad_glGenNamesAMD; -#define glGenNamesAMD glad_glGenNamesAMD -typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC)(GLenum identifier, GLuint num, const GLuint *names); -GLAPI PFNGLDELETENAMESAMDPROC glad_glDeleteNamesAMD; -#define glDeleteNamesAMD glad_glDeleteNamesAMD -typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC)(GLenum identifier, GLuint name); -GLAPI PFNGLISNAMEAMDPROC glad_glIsNameAMD; -#define glIsNameAMD glad_glIsNameAMD -#endif -#ifndef GL_AMD_occlusion_query_event +GLAD_API_CALL int GLAD_GL_AMD_name_gen_delete; #define GL_AMD_occlusion_query_event 1 -GLAPI int GLAD_GL_AMD_occlusion_query_event; -typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC)(GLenum target, GLuint id, GLenum pname, GLuint param); -GLAPI PFNGLQUERYOBJECTPARAMETERUIAMDPROC glad_glQueryObjectParameteruiAMD; -#define glQueryObjectParameteruiAMD glad_glQueryObjectParameteruiAMD -#endif -#ifndef GL_AMD_performance_monitor +GLAD_API_CALL int GLAD_GL_AMD_occlusion_query_event; #define GL_AMD_performance_monitor 1 -GLAPI int GLAD_GL_AMD_performance_monitor; -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC)(GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GLAPI PFNGLGETPERFMONITORGROUPSAMDPROC glad_glGetPerfMonitorGroupsAMD; -#define glGetPerfMonitorGroupsAMD glad_glGetPerfMonitorGroupsAMD -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC)(GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GLAPI PFNGLGETPERFMONITORCOUNTERSAMDPROC glad_glGetPerfMonitorCountersAMD; -#define glGetPerfMonitorCountersAMD glad_glGetPerfMonitorCountersAMD -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)(GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GLAPI PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glad_glGetPerfMonitorGroupStringAMD; -#define glGetPerfMonitorGroupStringAMD glad_glGetPerfMonitorGroupStringAMD -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GLAPI PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glad_glGetPerfMonitorCounterStringAMD; -#define glGetPerfMonitorCounterStringAMD glad_glGetPerfMonitorCounterStringAMD -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)(GLuint group, GLuint counter, GLenum pname, void *data); -GLAPI PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glad_glGetPerfMonitorCounterInfoAMD; -#define glGetPerfMonitorCounterInfoAMD glad_glGetPerfMonitorCounterInfoAMD -typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC)(GLsizei n, GLuint *monitors); -GLAPI PFNGLGENPERFMONITORSAMDPROC glad_glGenPerfMonitorsAMD; -#define glGenPerfMonitorsAMD glad_glGenPerfMonitorsAMD -typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC)(GLsizei n, GLuint *monitors); -GLAPI PFNGLDELETEPERFMONITORSAMDPROC glad_glDeletePerfMonitorsAMD; -#define glDeletePerfMonitorsAMD glad_glDeletePerfMonitorsAMD -typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GLAPI PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glad_glSelectPerfMonitorCountersAMD; -#define glSelectPerfMonitorCountersAMD glad_glSelectPerfMonitorCountersAMD -typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC)(GLuint monitor); -GLAPI PFNGLBEGINPERFMONITORAMDPROC glad_glBeginPerfMonitorAMD; -#define glBeginPerfMonitorAMD glad_glBeginPerfMonitorAMD -typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC)(GLuint monitor); -GLAPI PFNGLENDPERFMONITORAMDPROC glad_glEndPerfMonitorAMD; -#define glEndPerfMonitorAMD glad_glEndPerfMonitorAMD -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -GLAPI PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glad_glGetPerfMonitorCounterDataAMD; -#define glGetPerfMonitorCounterDataAMD glad_glGetPerfMonitorCounterDataAMD -#endif -#ifndef GL_AMD_pinned_memory +GLAD_API_CALL int GLAD_GL_AMD_performance_monitor; #define GL_AMD_pinned_memory 1 -GLAPI int GLAD_GL_AMD_pinned_memory; -#endif -#ifndef GL_AMD_query_buffer_object +GLAD_API_CALL int GLAD_GL_AMD_pinned_memory; #define GL_AMD_query_buffer_object 1 -GLAPI int GLAD_GL_AMD_query_buffer_object; -#endif -#ifndef GL_AMD_sample_positions +GLAD_API_CALL int GLAD_GL_AMD_query_buffer_object; #define GL_AMD_sample_positions 1 -GLAPI int GLAD_GL_AMD_sample_positions; -typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC)(GLenum pname, GLuint index, const GLfloat *val); -GLAPI PFNGLSETMULTISAMPLEFVAMDPROC glad_glSetMultisamplefvAMD; -#define glSetMultisamplefvAMD glad_glSetMultisamplefvAMD -#endif -#ifndef GL_AMD_seamless_cubemap_per_texture +GLAD_API_CALL int GLAD_GL_AMD_sample_positions; #define GL_AMD_seamless_cubemap_per_texture 1 -GLAPI int GLAD_GL_AMD_seamless_cubemap_per_texture; -#endif -#ifndef GL_AMD_shader_atomic_counter_ops +GLAD_API_CALL int GLAD_GL_AMD_seamless_cubemap_per_texture; #define GL_AMD_shader_atomic_counter_ops 1 -GLAPI int GLAD_GL_AMD_shader_atomic_counter_ops; -#endif -#ifndef GL_AMD_shader_ballot +GLAD_API_CALL int GLAD_GL_AMD_shader_atomic_counter_ops; #define GL_AMD_shader_ballot 1 -GLAPI int GLAD_GL_AMD_shader_ballot; -#endif -#ifndef GL_AMD_shader_explicit_vertex_parameter +GLAD_API_CALL int GLAD_GL_AMD_shader_ballot; #define GL_AMD_shader_explicit_vertex_parameter 1 -GLAPI int GLAD_GL_AMD_shader_explicit_vertex_parameter; -#endif -#ifndef GL_AMD_shader_gpu_shader_half_float_fetch +GLAD_API_CALL int GLAD_GL_AMD_shader_explicit_vertex_parameter; #define GL_AMD_shader_gpu_shader_half_float_fetch 1 -GLAPI int GLAD_GL_AMD_shader_gpu_shader_half_float_fetch; -#endif -#ifndef GL_AMD_shader_image_load_store_lod +GLAD_API_CALL int GLAD_GL_AMD_shader_gpu_shader_half_float_fetch; #define GL_AMD_shader_image_load_store_lod 1 -GLAPI int GLAD_GL_AMD_shader_image_load_store_lod; -#endif -#ifndef GL_AMD_shader_stencil_export +GLAD_API_CALL int GLAD_GL_AMD_shader_image_load_store_lod; #define GL_AMD_shader_stencil_export 1 -GLAPI int GLAD_GL_AMD_shader_stencil_export; -#endif -#ifndef GL_AMD_shader_trinary_minmax +GLAD_API_CALL int GLAD_GL_AMD_shader_stencil_export; #define GL_AMD_shader_trinary_minmax 1 -GLAPI int GLAD_GL_AMD_shader_trinary_minmax; -#endif -#ifndef GL_AMD_sparse_texture +GLAD_API_CALL int GLAD_GL_AMD_shader_trinary_minmax; #define GL_AMD_sparse_texture 1 -GLAPI int GLAD_GL_AMD_sparse_texture; -typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -GLAPI PFNGLTEXSTORAGESPARSEAMDPROC glad_glTexStorageSparseAMD; -#define glTexStorageSparseAMD glad_glTexStorageSparseAMD -typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC)(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -GLAPI PFNGLTEXTURESTORAGESPARSEAMDPROC glad_glTextureStorageSparseAMD; -#define glTextureStorageSparseAMD glad_glTextureStorageSparseAMD -#endif -#ifndef GL_AMD_stencil_operation_extended +GLAD_API_CALL int GLAD_GL_AMD_sparse_texture; #define GL_AMD_stencil_operation_extended 1 -GLAPI int GLAD_GL_AMD_stencil_operation_extended; -typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC)(GLenum face, GLuint value); -GLAPI PFNGLSTENCILOPVALUEAMDPROC glad_glStencilOpValueAMD; -#define glStencilOpValueAMD glad_glStencilOpValueAMD -#endif -#ifndef GL_AMD_texture_gather_bias_lod +GLAD_API_CALL int GLAD_GL_AMD_stencil_operation_extended; #define GL_AMD_texture_gather_bias_lod 1 -GLAPI int GLAD_GL_AMD_texture_gather_bias_lod; -#endif -#ifndef GL_AMD_texture_texture4 +GLAD_API_CALL int GLAD_GL_AMD_texture_gather_bias_lod; #define GL_AMD_texture_texture4 1 -GLAPI int GLAD_GL_AMD_texture_texture4; -#endif -#ifndef GL_AMD_transform_feedback3_lines_triangles +GLAD_API_CALL int GLAD_GL_AMD_texture_texture4; #define GL_AMD_transform_feedback3_lines_triangles 1 -GLAPI int GLAD_GL_AMD_transform_feedback3_lines_triangles; -#endif -#ifndef GL_AMD_transform_feedback4 +GLAD_API_CALL int GLAD_GL_AMD_transform_feedback3_lines_triangles; #define GL_AMD_transform_feedback4 1 -GLAPI int GLAD_GL_AMD_transform_feedback4; -#endif -#ifndef GL_AMD_vertex_shader_layer +GLAD_API_CALL int GLAD_GL_AMD_transform_feedback4; #define GL_AMD_vertex_shader_layer 1 -GLAPI int GLAD_GL_AMD_vertex_shader_layer; -#endif -#ifndef GL_AMD_vertex_shader_tessellator +GLAD_API_CALL int GLAD_GL_AMD_vertex_shader_layer; #define GL_AMD_vertex_shader_tessellator 1 -GLAPI int GLAD_GL_AMD_vertex_shader_tessellator; -typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC)(GLfloat factor); -GLAPI PFNGLTESSELLATIONFACTORAMDPROC glad_glTessellationFactorAMD; -#define glTessellationFactorAMD glad_glTessellationFactorAMD -typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC)(GLenum mode); -GLAPI PFNGLTESSELLATIONMODEAMDPROC glad_glTessellationModeAMD; -#define glTessellationModeAMD glad_glTessellationModeAMD -#endif -#ifndef GL_AMD_vertex_shader_viewport_index +GLAD_API_CALL int GLAD_GL_AMD_vertex_shader_tessellator; #define GL_AMD_vertex_shader_viewport_index 1 -GLAPI int GLAD_GL_AMD_vertex_shader_viewport_index; -#endif -#ifndef GL_APPLE_aux_depth_stencil +GLAD_API_CALL int GLAD_GL_AMD_vertex_shader_viewport_index; #define GL_APPLE_aux_depth_stencil 1 -GLAPI int GLAD_GL_APPLE_aux_depth_stencil; -#endif -#ifndef GL_APPLE_client_storage +GLAD_API_CALL int GLAD_GL_APPLE_aux_depth_stencil; #define GL_APPLE_client_storage 1 -GLAPI int GLAD_GL_APPLE_client_storage; -#endif -#ifndef GL_APPLE_element_array +GLAD_API_CALL int GLAD_GL_APPLE_client_storage; #define GL_APPLE_element_array 1 -GLAPI int GLAD_GL_APPLE_element_array; -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC)(GLenum type, const void *pointer); -GLAPI PFNGLELEMENTPOINTERAPPLEPROC glad_glElementPointerAPPLE; -#define glElementPointerAPPLE glad_glElementPointerAPPLE -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, GLint first, GLsizei count); -GLAPI PFNGLDRAWELEMENTARRAYAPPLEPROC glad_glDrawElementArrayAPPLE; -#define glDrawElementArrayAPPLE glad_glDrawElementArrayAPPLE -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -GLAPI PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC glad_glDrawRangeElementArrayAPPLE; -#define glDrawRangeElementArrayAPPLE glad_glDrawRangeElementArrayAPPLE -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC glad_glMultiDrawElementArrayAPPLE; -#define glMultiDrawElementArrayAPPLE glad_glMultiDrawElementArrayAPPLE -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glad_glMultiDrawRangeElementArrayAPPLE; -#define glMultiDrawRangeElementArrayAPPLE glad_glMultiDrawRangeElementArrayAPPLE -#endif -#ifndef GL_APPLE_fence +GLAD_API_CALL int GLAD_GL_APPLE_element_array; #define GL_APPLE_fence 1 -GLAPI int GLAD_GL_APPLE_fence; -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC)(GLsizei n, GLuint *fences); -GLAPI PFNGLGENFENCESAPPLEPROC glad_glGenFencesAPPLE; -#define glGenFencesAPPLE glad_glGenFencesAPPLE -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC)(GLsizei n, const GLuint *fences); -GLAPI PFNGLDELETEFENCESAPPLEPROC glad_glDeleteFencesAPPLE; -#define glDeleteFencesAPPLE glad_glDeleteFencesAPPLE -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC)(GLuint fence); -GLAPI PFNGLSETFENCEAPPLEPROC glad_glSetFenceAPPLE; -#define glSetFenceAPPLE glad_glSetFenceAPPLE -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC)(GLuint fence); -GLAPI PFNGLISFENCEAPPLEPROC glad_glIsFenceAPPLE; -#define glIsFenceAPPLE glad_glIsFenceAPPLE -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC)(GLuint fence); -GLAPI PFNGLTESTFENCEAPPLEPROC glad_glTestFenceAPPLE; -#define glTestFenceAPPLE glad_glTestFenceAPPLE -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC)(GLuint fence); -GLAPI PFNGLFINISHFENCEAPPLEPROC glad_glFinishFenceAPPLE; -#define glFinishFenceAPPLE glad_glFinishFenceAPPLE -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC)(GLenum object, GLuint name); -GLAPI PFNGLTESTOBJECTAPPLEPROC glad_glTestObjectAPPLE; -#define glTestObjectAPPLE glad_glTestObjectAPPLE -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC)(GLenum object, GLint name); -GLAPI PFNGLFINISHOBJECTAPPLEPROC glad_glFinishObjectAPPLE; -#define glFinishObjectAPPLE glad_glFinishObjectAPPLE -#endif -#ifndef GL_APPLE_float_pixels +GLAD_API_CALL int GLAD_GL_APPLE_fence; #define GL_APPLE_float_pixels 1 -GLAPI int GLAD_GL_APPLE_float_pixels; -#endif -#ifndef GL_APPLE_flush_buffer_range +GLAD_API_CALL int GLAD_GL_APPLE_float_pixels; #define GL_APPLE_flush_buffer_range 1 -GLAPI int GLAD_GL_APPLE_flush_buffer_range; -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLBUFFERPARAMETERIAPPLEPROC glad_glBufferParameteriAPPLE; -#define glBufferParameteriAPPLE glad_glBufferParameteriAPPLE -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)(GLenum target, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glad_glFlushMappedBufferRangeAPPLE; -#define glFlushMappedBufferRangeAPPLE glad_glFlushMappedBufferRangeAPPLE -#endif -#ifndef GL_APPLE_object_purgeable +GLAD_API_CALL int GLAD_GL_APPLE_flush_buffer_range; #define GL_APPLE_object_purgeable 1 -GLAPI int GLAD_GL_APPLE_object_purgeable; -typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); -GLAPI PFNGLOBJECTPURGEABLEAPPLEPROC glad_glObjectPurgeableAPPLE; -#define glObjectPurgeableAPPLE glad_glObjectPurgeableAPPLE -typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); -GLAPI PFNGLOBJECTUNPURGEABLEAPPLEPROC glad_glObjectUnpurgeableAPPLE; -#define glObjectUnpurgeableAPPLE glad_glObjectUnpurgeableAPPLE -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC)(GLenum objectType, GLuint name, GLenum pname, GLint *params); -GLAPI PFNGLGETOBJECTPARAMETERIVAPPLEPROC glad_glGetObjectParameterivAPPLE; -#define glGetObjectParameterivAPPLE glad_glGetObjectParameterivAPPLE -#endif -#ifndef GL_APPLE_rgb_422 +GLAD_API_CALL int GLAD_GL_APPLE_object_purgeable; #define GL_APPLE_rgb_422 1 -GLAPI int GLAD_GL_APPLE_rgb_422; -#endif -#ifndef GL_APPLE_row_bytes +GLAD_API_CALL int GLAD_GL_APPLE_rgb_422; #define GL_APPLE_row_bytes 1 -GLAPI int GLAD_GL_APPLE_row_bytes; -#endif -#ifndef GL_APPLE_specular_vector +GLAD_API_CALL int GLAD_GL_APPLE_row_bytes; #define GL_APPLE_specular_vector 1 -GLAPI int GLAD_GL_APPLE_specular_vector; -#endif -#ifndef GL_APPLE_texture_range +GLAD_API_CALL int GLAD_GL_APPLE_specular_vector; #define GL_APPLE_texture_range 1 -GLAPI int GLAD_GL_APPLE_texture_range; -typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC)(GLenum target, GLsizei length, const void *pointer); -GLAPI PFNGLTEXTURERANGEAPPLEPROC glad_glTextureRangeAPPLE; -#define glTextureRangeAPPLE glad_glTextureRangeAPPLE -typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)(GLenum target, GLenum pname, void **params); -GLAPI PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC glad_glGetTexParameterPointervAPPLE; -#define glGetTexParameterPointervAPPLE glad_glGetTexParameterPointervAPPLE -#endif -#ifndef GL_APPLE_transform_hint +GLAD_API_CALL int GLAD_GL_APPLE_texture_range; #define GL_APPLE_transform_hint 1 -GLAPI int GLAD_GL_APPLE_transform_hint; -#endif -#ifndef GL_APPLE_vertex_array_object +GLAD_API_CALL int GLAD_GL_APPLE_transform_hint; #define GL_APPLE_vertex_array_object 1 -GLAPI int GLAD_GL_APPLE_vertex_array_object; -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC)(GLuint array); -GLAPI PFNGLBINDVERTEXARRAYAPPLEPROC glad_glBindVertexArrayAPPLE; -#define glBindVertexArrayAPPLE glad_glBindVertexArrayAPPLE -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC)(GLsizei n, const GLuint *arrays); -GLAPI PFNGLDELETEVERTEXARRAYSAPPLEPROC glad_glDeleteVertexArraysAPPLE; -#define glDeleteVertexArraysAPPLE glad_glDeleteVertexArraysAPPLE -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC)(GLsizei n, GLuint *arrays); -GLAPI PFNGLGENVERTEXARRAYSAPPLEPROC glad_glGenVertexArraysAPPLE; -#define glGenVertexArraysAPPLE glad_glGenVertexArraysAPPLE -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC)(GLuint array); -GLAPI PFNGLISVERTEXARRAYAPPLEPROC glad_glIsVertexArrayAPPLE; -#define glIsVertexArrayAPPLE glad_glIsVertexArrayAPPLE -#endif -#ifndef GL_APPLE_vertex_array_range +GLAD_API_CALL int GLAD_GL_APPLE_vertex_array_object; #define GL_APPLE_vertex_array_range 1 -GLAPI int GLAD_GL_APPLE_vertex_array_range; -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void *pointer); -GLAPI PFNGLVERTEXARRAYRANGEAPPLEPROC glad_glVertexArrayRangeAPPLE; -#define glVertexArrayRangeAPPLE glad_glVertexArrayRangeAPPLE -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void *pointer); -GLAPI PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC glad_glFlushVertexArrayRangeAPPLE; -#define glFlushVertexArrayRangeAPPLE glad_glFlushVertexArrayRangeAPPLE -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)(GLenum pname, GLint param); -GLAPI PFNGLVERTEXARRAYPARAMETERIAPPLEPROC glad_glVertexArrayParameteriAPPLE; -#define glVertexArrayParameteriAPPLE glad_glVertexArrayParameteriAPPLE -#endif -#ifndef GL_APPLE_vertex_program_evaluators +GLAD_API_CALL int GLAD_GL_APPLE_vertex_array_range; #define GL_APPLE_vertex_program_evaluators 1 -GLAPI int GLAD_GL_APPLE_vertex_program_evaluators; -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); -GLAPI PFNGLENABLEVERTEXATTRIBAPPLEPROC glad_glEnableVertexAttribAPPLE; -#define glEnableVertexAttribAPPLE glad_glEnableVertexAttribAPPLE -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); -GLAPI PFNGLDISABLEVERTEXATTRIBAPPLEPROC glad_glDisableVertexAttribAPPLE; -#define glDisableVertexAttribAPPLE glad_glDisableVertexAttribAPPLE -typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)(GLuint index, GLenum pname); -GLAPI PFNGLISVERTEXATTRIBENABLEDAPPLEPROC glad_glIsVertexAttribEnabledAPPLE; -#define glIsVertexAttribEnabledAPPLE glad_glIsVertexAttribEnabledAPPLE -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI PFNGLMAPVERTEXATTRIB1DAPPLEPROC glad_glMapVertexAttrib1dAPPLE; -#define glMapVertexAttrib1dAPPLE glad_glMapVertexAttrib1dAPPLE -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI PFNGLMAPVERTEXATTRIB1FAPPLEPROC glad_glMapVertexAttrib1fAPPLE; -#define glMapVertexAttrib1fAPPLE glad_glMapVertexAttrib1fAPPLE -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI PFNGLMAPVERTEXATTRIB2DAPPLEPROC glad_glMapVertexAttrib2dAPPLE; -#define glMapVertexAttrib2dAPPLE glad_glMapVertexAttrib2dAPPLE -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -GLAPI PFNGLMAPVERTEXATTRIB2FAPPLEPROC glad_glMapVertexAttrib2fAPPLE; -#define glMapVertexAttrib2fAPPLE glad_glMapVertexAttrib2fAPPLE -#endif -#ifndef GL_APPLE_ycbcr_422 +GLAD_API_CALL int GLAD_GL_APPLE_vertex_program_evaluators; #define GL_APPLE_ycbcr_422 1 -GLAPI int GLAD_GL_APPLE_ycbcr_422; -#endif -#ifndef GL_ARB_ES2_compatibility +GLAD_API_CALL int GLAD_GL_APPLE_ycbcr_422; #define GL_ARB_ES2_compatibility 1 -GLAPI int GLAD_GL_ARB_ES2_compatibility; -#endif -#ifndef GL_ARB_ES3_1_compatibility +GLAD_API_CALL int GLAD_GL_ARB_ES2_compatibility; #define GL_ARB_ES3_1_compatibility 1 -GLAPI int GLAD_GL_ARB_ES3_1_compatibility; -#endif -#ifndef GL_ARB_ES3_2_compatibility +GLAD_API_CALL int GLAD_GL_ARB_ES3_1_compatibility; #define GL_ARB_ES3_2_compatibility 1 -GLAPI int GLAD_GL_ARB_ES3_2_compatibility; -typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -GLAPI PFNGLPRIMITIVEBOUNDINGBOXARBPROC glad_glPrimitiveBoundingBoxARB; -#define glPrimitiveBoundingBoxARB glad_glPrimitiveBoundingBoxARB -#endif -#ifndef GL_ARB_ES3_compatibility +GLAD_API_CALL int GLAD_GL_ARB_ES3_2_compatibility; #define GL_ARB_ES3_compatibility 1 -GLAPI int GLAD_GL_ARB_ES3_compatibility; -#endif -#ifndef GL_ARB_arrays_of_arrays +GLAD_API_CALL int GLAD_GL_ARB_ES3_compatibility; #define GL_ARB_arrays_of_arrays 1 -GLAPI int GLAD_GL_ARB_arrays_of_arrays; -#endif -#ifndef GL_ARB_base_instance +GLAD_API_CALL int GLAD_GL_ARB_arrays_of_arrays; #define GL_ARB_base_instance 1 -GLAPI int GLAD_GL_ARB_base_instance; -#endif -#ifndef GL_ARB_bindless_texture +GLAD_API_CALL int GLAD_GL_ARB_base_instance; #define GL_ARB_bindless_texture 1 -GLAPI int GLAD_GL_ARB_bindless_texture; -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC)(GLuint texture); -GLAPI PFNGLGETTEXTUREHANDLEARBPROC glad_glGetTextureHandleARB; -#define glGetTextureHandleARB glad_glGetTextureHandleARB -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC)(GLuint texture, GLuint sampler); -GLAPI PFNGLGETTEXTURESAMPLERHANDLEARBPROC glad_glGetTextureSamplerHandleARB; -#define glGetTextureSamplerHandleARB glad_glGetTextureSamplerHandleARB -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); -GLAPI PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glad_glMakeTextureHandleResidentARB; -#define glMakeTextureHandleResidentARB glad_glMakeTextureHandleResidentARB -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)(GLuint64 handle); -GLAPI PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glad_glMakeTextureHandleNonResidentARB; -#define glMakeTextureHandleNonResidentARB glad_glMakeTextureHandleNonResidentARB -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI PFNGLGETIMAGEHANDLEARBPROC glad_glGetImageHandleARB; -#define glGetImageHandleARB glad_glGetImageHandleARB -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle, GLenum access); -GLAPI PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glad_glMakeImageHandleResidentARB; -#define glMakeImageHandleResidentARB glad_glMakeImageHandleResidentARB -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)(GLuint64 handle); -GLAPI PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glad_glMakeImageHandleNonResidentARB; -#define glMakeImageHandleNonResidentARB glad_glMakeImageHandleNonResidentARB -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC)(GLint location, GLuint64 value); -GLAPI PFNGLUNIFORMHANDLEUI64ARBPROC glad_glUniformHandleui64ARB; -#define glUniformHandleui64ARB glad_glUniformHandleui64ARB -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC)(GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLUNIFORMHANDLEUI64VARBPROC glad_glUniformHandleui64vARB; -#define glUniformHandleui64vARB glad_glUniformHandleui64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)(GLuint program, GLint location, GLuint64 value); -GLAPI PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glad_glProgramUniformHandleui64ARB; -#define glProgramUniformHandleui64ARB glad_glProgramUniformHandleui64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glad_glProgramUniformHandleui64vARB; -#define glProgramUniformHandleui64vARB glad_glProgramUniformHandleui64vARB -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); -GLAPI PFNGLISTEXTUREHANDLERESIDENTARBPROC glad_glIsTextureHandleResidentARB; -#define glIsTextureHandleResidentARB glad_glIsTextureHandleResidentARB -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle); -GLAPI PFNGLISIMAGEHANDLERESIDENTARBPROC glad_glIsImageHandleResidentARB; -#define glIsImageHandleResidentARB glad_glIsImageHandleResidentARB -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC)(GLuint index, GLuint64EXT x); -GLAPI PFNGLVERTEXATTRIBL1UI64ARBPROC glad_glVertexAttribL1ui64ARB; -#define glVertexAttribL1ui64ARB glad_glVertexAttribL1ui64ARB -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC)(GLuint index, const GLuint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL1UI64VARBPROC glad_glVertexAttribL1ui64vARB; -#define glVertexAttribL1ui64vARB glad_glVertexAttribL1ui64vARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC)(GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI PFNGLGETVERTEXATTRIBLUI64VARBPROC glad_glGetVertexAttribLui64vARB; -#define glGetVertexAttribLui64vARB glad_glGetVertexAttribLui64vARB -#endif -#ifndef GL_ARB_blend_func_extended +GLAD_API_CALL int GLAD_GL_ARB_bindless_texture; #define GL_ARB_blend_func_extended 1 -GLAPI int GLAD_GL_ARB_blend_func_extended; -#endif -#ifndef GL_ARB_buffer_storage +GLAD_API_CALL int GLAD_GL_ARB_blend_func_extended; #define GL_ARB_buffer_storage 1 -GLAPI int GLAD_GL_ARB_buffer_storage; -#endif -#ifndef GL_ARB_cl_event +GLAD_API_CALL int GLAD_GL_ARB_buffer_storage; #define GL_ARB_cl_event 1 -GLAPI int GLAD_GL_ARB_cl_event; -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC)(struct _cl_context *context, struct _cl_event *event, GLbitfield flags); -GLAPI PFNGLCREATESYNCFROMCLEVENTARBPROC glad_glCreateSyncFromCLeventARB; -#define glCreateSyncFromCLeventARB glad_glCreateSyncFromCLeventARB -#endif -#ifndef GL_ARB_clear_buffer_object +GLAD_API_CALL int GLAD_GL_ARB_cl_event; #define GL_ARB_clear_buffer_object 1 -GLAPI int GLAD_GL_ARB_clear_buffer_object; -#endif -#ifndef GL_ARB_clear_texture +GLAD_API_CALL int GLAD_GL_ARB_clear_buffer_object; #define GL_ARB_clear_texture 1 -GLAPI int GLAD_GL_ARB_clear_texture; -#endif -#ifndef GL_ARB_clip_control +GLAD_API_CALL int GLAD_GL_ARB_clear_texture; #define GL_ARB_clip_control 1 -GLAPI int GLAD_GL_ARB_clip_control; -#endif -#ifndef GL_ARB_color_buffer_float +GLAD_API_CALL int GLAD_GL_ARB_clip_control; #define GL_ARB_color_buffer_float 1 -GLAPI int GLAD_GL_ARB_color_buffer_float; -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC)(GLenum target, GLenum clamp); -GLAPI PFNGLCLAMPCOLORARBPROC glad_glClampColorARB; -#define glClampColorARB glad_glClampColorARB -#endif -#ifndef GL_ARB_compatibility +GLAD_API_CALL int GLAD_GL_ARB_color_buffer_float; #define GL_ARB_compatibility 1 -GLAPI int GLAD_GL_ARB_compatibility; -#endif -#ifndef GL_ARB_compressed_texture_pixel_storage +GLAD_API_CALL int GLAD_GL_ARB_compatibility; #define GL_ARB_compressed_texture_pixel_storage 1 -GLAPI int GLAD_GL_ARB_compressed_texture_pixel_storage; -#endif -#ifndef GL_ARB_compute_shader +GLAD_API_CALL int GLAD_GL_ARB_compressed_texture_pixel_storage; #define GL_ARB_compute_shader 1 -GLAPI int GLAD_GL_ARB_compute_shader; -#endif -#ifndef GL_ARB_compute_variable_group_size +GLAD_API_CALL int GLAD_GL_ARB_compute_shader; #define GL_ARB_compute_variable_group_size 1 -GLAPI int GLAD_GL_ARB_compute_variable_group_size; -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); -GLAPI PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glad_glDispatchComputeGroupSizeARB; -#define glDispatchComputeGroupSizeARB glad_glDispatchComputeGroupSizeARB -#endif -#ifndef GL_ARB_conditional_render_inverted +GLAD_API_CALL int GLAD_GL_ARB_compute_variable_group_size; #define GL_ARB_conditional_render_inverted 1 -GLAPI int GLAD_GL_ARB_conditional_render_inverted; -#endif -#ifndef GL_ARB_conservative_depth +GLAD_API_CALL int GLAD_GL_ARB_conditional_render_inverted; #define GL_ARB_conservative_depth 1 -GLAPI int GLAD_GL_ARB_conservative_depth; -#endif -#ifndef GL_ARB_copy_buffer +GLAD_API_CALL int GLAD_GL_ARB_conservative_depth; #define GL_ARB_copy_buffer 1 -GLAPI int GLAD_GL_ARB_copy_buffer; -#endif -#ifndef GL_ARB_copy_image +GLAD_API_CALL int GLAD_GL_ARB_copy_buffer; #define GL_ARB_copy_image 1 -GLAPI int GLAD_GL_ARB_copy_image; -#endif -#ifndef GL_ARB_cull_distance +GLAD_API_CALL int GLAD_GL_ARB_copy_image; #define GL_ARB_cull_distance 1 -GLAPI int GLAD_GL_ARB_cull_distance; -#endif -#ifndef GL_ARB_debug_output +GLAD_API_CALL int GLAD_GL_ARB_cull_distance; #define GL_ARB_debug_output 1 -GLAPI int GLAD_GL_ARB_debug_output; -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; -#define glDebugMessageControlARB glad_glDebugMessageControlARB -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; -#define glDebugMessageInsertARB glad_glDebugMessageInsertARB -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, const void *userParam); -GLAPI PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; -#define glDebugMessageCallbackARB glad_glDebugMessageCallbackARB -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; -#define glGetDebugMessageLogARB glad_glGetDebugMessageLogARB -#endif -#ifndef GL_ARB_depth_buffer_float +GLAD_API_CALL int GLAD_GL_ARB_debug_output; #define GL_ARB_depth_buffer_float 1 -GLAPI int GLAD_GL_ARB_depth_buffer_float; -#endif -#ifndef GL_ARB_depth_clamp +GLAD_API_CALL int GLAD_GL_ARB_depth_buffer_float; #define GL_ARB_depth_clamp 1 -GLAPI int GLAD_GL_ARB_depth_clamp; -#endif -#ifndef GL_ARB_depth_texture +GLAD_API_CALL int GLAD_GL_ARB_depth_clamp; #define GL_ARB_depth_texture 1 -GLAPI int GLAD_GL_ARB_depth_texture; -#endif -#ifndef GL_ARB_derivative_control +GLAD_API_CALL int GLAD_GL_ARB_depth_texture; #define GL_ARB_derivative_control 1 -GLAPI int GLAD_GL_ARB_derivative_control; -#endif -#ifndef GL_ARB_direct_state_access +GLAD_API_CALL int GLAD_GL_ARB_derivative_control; #define GL_ARB_direct_state_access 1 -GLAPI int GLAD_GL_ARB_direct_state_access; -#endif -#ifndef GL_ARB_draw_buffers +GLAD_API_CALL int GLAD_GL_ARB_direct_state_access; #define GL_ARB_draw_buffers 1 -GLAPI int GLAD_GL_ARB_draw_buffers; -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum *bufs); -GLAPI PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB; -#define glDrawBuffersARB glad_glDrawBuffersARB -#endif -#ifndef GL_ARB_draw_buffers_blend +GLAD_API_CALL int GLAD_GL_ARB_draw_buffers; #define GL_ARB_draw_buffers_blend 1 -GLAPI int GLAD_GL_ARB_draw_buffers_blend; -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); -GLAPI PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB; -#define glBlendEquationiARB glad_glBlendEquationiARB -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB; -#define glBlendEquationSeparateiARB glad_glBlendEquationSeparateiARB -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); -GLAPI PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB; -#define glBlendFunciARB glad_glBlendFunciARB -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB; -#define glBlendFuncSeparateiARB glad_glBlendFuncSeparateiARB -#endif -#ifndef GL_ARB_draw_elements_base_vertex +GLAD_API_CALL int GLAD_GL_ARB_draw_buffers_blend; #define GL_ARB_draw_elements_base_vertex 1 -GLAPI int GLAD_GL_ARB_draw_elements_base_vertex; -#endif -#ifndef GL_ARB_draw_indirect +GLAD_API_CALL int GLAD_GL_ARB_draw_elements_base_vertex; #define GL_ARB_draw_indirect 1 -GLAPI int GLAD_GL_ARB_draw_indirect; -#endif -#ifndef GL_ARB_draw_instanced +GLAD_API_CALL int GLAD_GL_ARB_draw_indirect; #define GL_ARB_draw_instanced 1 -GLAPI int GLAD_GL_ARB_draw_instanced; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI PFNGLDRAWARRAYSINSTANCEDARBPROC glad_glDrawArraysInstancedARB; -#define glDrawArraysInstancedARB glad_glDrawArraysInstancedARB -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GLAPI PFNGLDRAWELEMENTSINSTANCEDARBPROC glad_glDrawElementsInstancedARB; -#define glDrawElementsInstancedARB glad_glDrawElementsInstancedARB -#endif -#ifndef GL_ARB_enhanced_layouts +GLAD_API_CALL int GLAD_GL_ARB_draw_instanced; #define GL_ARB_enhanced_layouts 1 -GLAPI int GLAD_GL_ARB_enhanced_layouts; -#endif -#ifndef GL_ARB_explicit_attrib_location +GLAD_API_CALL int GLAD_GL_ARB_enhanced_layouts; #define GL_ARB_explicit_attrib_location 1 -GLAPI int GLAD_GL_ARB_explicit_attrib_location; -#endif -#ifndef GL_ARB_explicit_uniform_location +GLAD_API_CALL int GLAD_GL_ARB_explicit_attrib_location; #define GL_ARB_explicit_uniform_location 1 -GLAPI int GLAD_GL_ARB_explicit_uniform_location; -#endif -#ifndef GL_ARB_fragment_coord_conventions +GLAD_API_CALL int GLAD_GL_ARB_explicit_uniform_location; #define GL_ARB_fragment_coord_conventions 1 -GLAPI int GLAD_GL_ARB_fragment_coord_conventions; -#endif -#ifndef GL_ARB_fragment_layer_viewport +GLAD_API_CALL int GLAD_GL_ARB_fragment_coord_conventions; #define GL_ARB_fragment_layer_viewport 1 -GLAPI int GLAD_GL_ARB_fragment_layer_viewport; -#endif -#ifndef GL_ARB_fragment_program +GLAD_API_CALL int GLAD_GL_ARB_fragment_layer_viewport; #define GL_ARB_fragment_program 1 -GLAPI int GLAD_GL_ARB_fragment_program; -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB; -#define glProgramStringARB glad_glProgramStringARB -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); -GLAPI PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB; -#define glBindProgramARB glad_glBindProgramARB -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint *programs); -GLAPI PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB; -#define glDeleteProgramsARB glad_glDeleteProgramsARB -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint *programs); -GLAPI PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB; -#define glGenProgramsARB glad_glGenProgramsARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB; -#define glProgramEnvParameter4dARB glad_glProgramEnvParameter4dARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params); -GLAPI PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB; -#define glProgramEnvParameter4dvARB glad_glProgramEnvParameter4dvARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB; -#define glProgramEnvParameter4fARB glad_glProgramEnvParameter4fARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params); -GLAPI PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB; -#define glProgramEnvParameter4fvARB glad_glProgramEnvParameter4fvARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB; -#define glProgramLocalParameter4dARB glad_glProgramLocalParameter4dARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params); -GLAPI PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB; -#define glProgramLocalParameter4dvARB glad_glProgramLocalParameter4dvARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB; -#define glProgramLocalParameter4fARB glad_glProgramLocalParameter4fARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params); -GLAPI PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB; -#define glProgramLocalParameter4fvARB glad_glProgramLocalParameter4fvARB -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params); -GLAPI PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB; -#define glGetProgramEnvParameterdvARB glad_glGetProgramEnvParameterdvARB -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params); -GLAPI PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB; -#define glGetProgramEnvParameterfvARB glad_glGetProgramEnvParameterfvARB -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params); -GLAPI PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB; -#define glGetProgramLocalParameterdvARB glad_glGetProgramLocalParameterdvARB -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params); -GLAPI PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB; -#define glGetProgramLocalParameterfvARB glad_glGetProgramLocalParameterfvARB -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB; -#define glGetProgramivARB glad_glGetProgramivARB -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void *string); -GLAPI PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB; -#define glGetProgramStringARB glad_glGetProgramStringARB -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC)(GLuint program); -GLAPI PFNGLISPROGRAMARBPROC glad_glIsProgramARB; -#define glIsProgramARB glad_glIsProgramARB -#endif -#ifndef GL_ARB_fragment_program_shadow +GLAD_API_CALL int GLAD_GL_ARB_fragment_program; #define GL_ARB_fragment_program_shadow 1 -GLAPI int GLAD_GL_ARB_fragment_program_shadow; -#endif -#ifndef GL_ARB_fragment_shader +GLAD_API_CALL int GLAD_GL_ARB_fragment_program_shadow; #define GL_ARB_fragment_shader 1 -GLAPI int GLAD_GL_ARB_fragment_shader; -#endif -#ifndef GL_ARB_fragment_shader_interlock +GLAD_API_CALL int GLAD_GL_ARB_fragment_shader; #define GL_ARB_fragment_shader_interlock 1 -GLAPI int GLAD_GL_ARB_fragment_shader_interlock; -#endif -#ifndef GL_ARB_framebuffer_no_attachments +GLAD_API_CALL int GLAD_GL_ARB_fragment_shader_interlock; #define GL_ARB_framebuffer_no_attachments 1 -GLAPI int GLAD_GL_ARB_framebuffer_no_attachments; -#endif -#ifndef GL_ARB_framebuffer_object +GLAD_API_CALL int GLAD_GL_ARB_framebuffer_no_attachments; #define GL_ARB_framebuffer_object 1 -GLAPI int GLAD_GL_ARB_framebuffer_object; -#endif -#ifndef GL_ARB_framebuffer_sRGB +GLAD_API_CALL int GLAD_GL_ARB_framebuffer_object; #define GL_ARB_framebuffer_sRGB 1 -GLAPI int GLAD_GL_ARB_framebuffer_sRGB; -#endif -#ifndef GL_ARB_geometry_shader4 +GLAD_API_CALL int GLAD_GL_ARB_framebuffer_sRGB; #define GL_ARB_geometry_shader4 1 -GLAPI int GLAD_GL_ARB_geometry_shader4; -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value); -GLAPI PFNGLPROGRAMPARAMETERIARBPROC glad_glProgramParameteriARB; -#define glProgramParameteriARB glad_glProgramParameteriARB -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTUREARBPROC glad_glFramebufferTextureARB; -#define glFramebufferTextureARB glad_glFramebufferTextureARB -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glad_glFramebufferTextureLayerARB; -#define glFramebufferTextureLayerARB glad_glFramebufferTextureLayerARB -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glad_glFramebufferTextureFaceARB; -#define glFramebufferTextureFaceARB glad_glFramebufferTextureFaceARB -#endif -#ifndef GL_ARB_get_program_binary +GLAD_API_CALL int GLAD_GL_ARB_geometry_shader4; #define GL_ARB_get_program_binary 1 -GLAPI int GLAD_GL_ARB_get_program_binary; -#endif -#ifndef GL_ARB_get_texture_sub_image +GLAD_API_CALL int GLAD_GL_ARB_get_program_binary; #define GL_ARB_get_texture_sub_image 1 -GLAPI int GLAD_GL_ARB_get_texture_sub_image; -#endif -#ifndef GL_ARB_gl_spirv +GLAD_API_CALL int GLAD_GL_ARB_get_texture_sub_image; #define GL_ARB_gl_spirv 1 -GLAPI int GLAD_GL_ARB_gl_spirv; -typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC)(GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -GLAPI PFNGLSPECIALIZESHADERARBPROC glad_glSpecializeShaderARB; -#define glSpecializeShaderARB glad_glSpecializeShaderARB -#endif -#ifndef GL_ARB_gpu_shader5 +GLAD_API_CALL int GLAD_GL_ARB_gl_spirv; #define GL_ARB_gpu_shader5 1 -GLAPI int GLAD_GL_ARB_gpu_shader5; -#endif -#ifndef GL_ARB_gpu_shader_fp64 +GLAD_API_CALL int GLAD_GL_ARB_gpu_shader5; #define GL_ARB_gpu_shader_fp64 1 -GLAPI int GLAD_GL_ARB_gpu_shader_fp64; -#endif -#ifndef GL_ARB_gpu_shader_int64 +GLAD_API_CALL int GLAD_GL_ARB_gpu_shader_fp64; #define GL_ARB_gpu_shader_int64 1 -GLAPI int GLAD_GL_ARB_gpu_shader_int64; -typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC)(GLint location, GLint64 x); -GLAPI PFNGLUNIFORM1I64ARBPROC glad_glUniform1i64ARB; -#define glUniform1i64ARB glad_glUniform1i64ARB -typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC)(GLint location, GLint64 x, GLint64 y); -GLAPI PFNGLUNIFORM2I64ARBPROC glad_glUniform2i64ARB; -#define glUniform2i64ARB glad_glUniform2i64ARB -typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z); -GLAPI PFNGLUNIFORM3I64ARBPROC glad_glUniform3i64ARB; -#define glUniform3i64ARB glad_glUniform3i64ARB -typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -GLAPI PFNGLUNIFORM4I64ARBPROC glad_glUniform4i64ARB; -#define glUniform4i64ARB glad_glUniform4i64ARB -typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC)(GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLUNIFORM1I64VARBPROC glad_glUniform1i64vARB; -#define glUniform1i64vARB glad_glUniform1i64vARB -typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC)(GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLUNIFORM2I64VARBPROC glad_glUniform2i64vARB; -#define glUniform2i64vARB glad_glUniform2i64vARB -typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC)(GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLUNIFORM3I64VARBPROC glad_glUniform3i64vARB; -#define glUniform3i64vARB glad_glUniform3i64vARB -typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC)(GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLUNIFORM4I64VARBPROC glad_glUniform4i64vARB; -#define glUniform4i64vARB glad_glUniform4i64vARB -typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC)(GLint location, GLuint64 x); -GLAPI PFNGLUNIFORM1UI64ARBPROC glad_glUniform1ui64ARB; -#define glUniform1ui64ARB glad_glUniform1ui64ARB -typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y); -GLAPI PFNGLUNIFORM2UI64ARBPROC glad_glUniform2ui64ARB; -#define glUniform2ui64ARB glad_glUniform2ui64ARB -typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -GLAPI PFNGLUNIFORM3UI64ARBPROC glad_glUniform3ui64ARB; -#define glUniform3ui64ARB glad_glUniform3ui64ARB -typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -GLAPI PFNGLUNIFORM4UI64ARBPROC glad_glUniform4ui64ARB; -#define glUniform4ui64ARB glad_glUniform4ui64ARB -typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLUNIFORM1UI64VARBPROC glad_glUniform1ui64vARB; -#define glUniform1ui64vARB glad_glUniform1ui64vARB -typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLUNIFORM2UI64VARBPROC glad_glUniform2ui64vARB; -#define glUniform2ui64vARB glad_glUniform2ui64vARB -typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLUNIFORM3UI64VARBPROC glad_glUniform3ui64vARB; -#define glUniform3ui64vARB glad_glUniform3ui64vARB -typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLUNIFORM4UI64VARBPROC glad_glUniform4ui64vARB; -#define glUniform4ui64vARB glad_glUniform4ui64vARB -typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC)(GLuint program, GLint location, GLint64 *params); -GLAPI PFNGLGETUNIFORMI64VARBPROC glad_glGetUniformi64vARB; -#define glGetUniformi64vARB glad_glGetUniformi64vARB -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLuint64 *params); -GLAPI PFNGLGETUNIFORMUI64VARBPROC glad_glGetUniformui64vARB; -#define glGetUniformui64vARB glad_glGetUniformui64vARB -typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint64 *params); -GLAPI PFNGLGETNUNIFORMI64VARBPROC glad_glGetnUniformi64vARB; -#define glGetnUniformi64vARB glad_glGetnUniformi64vARB -typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); -GLAPI PFNGLGETNUNIFORMUI64VARBPROC glad_glGetnUniformui64vARB; -#define glGetnUniformui64vARB glad_glGetnUniformui64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC)(GLuint program, GLint location, GLint64 x); -GLAPI PFNGLPROGRAMUNIFORM1I64ARBPROC glad_glProgramUniform1i64ARB; -#define glProgramUniform1i64ARB glad_glProgramUniform1i64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y); -GLAPI PFNGLPROGRAMUNIFORM2I64ARBPROC glad_glProgramUniform2i64ARB; -#define glProgramUniform2i64ARB glad_glProgramUniform2i64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); -GLAPI PFNGLPROGRAMUNIFORM3I64ARBPROC glad_glProgramUniform3i64ARB; -#define glProgramUniform3i64ARB glad_glProgramUniform3i64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -GLAPI PFNGLPROGRAMUNIFORM4I64ARBPROC glad_glProgramUniform4i64ARB; -#define glProgramUniform4i64ARB glad_glProgramUniform4i64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLPROGRAMUNIFORM1I64VARBPROC glad_glProgramUniform1i64vARB; -#define glProgramUniform1i64vARB glad_glProgramUniform1i64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLPROGRAMUNIFORM2I64VARBPROC glad_glProgramUniform2i64vARB; -#define glProgramUniform2i64vARB glad_glProgramUniform2i64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLPROGRAMUNIFORM3I64VARBPROC glad_glProgramUniform3i64vARB; -#define glProgramUniform3i64vARB glad_glProgramUniform3i64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI PFNGLPROGRAMUNIFORM4I64VARBPROC glad_glProgramUniform4i64vARB; -#define glProgramUniform4i64vARB glad_glProgramUniform4i64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC)(GLuint program, GLint location, GLuint64 x); -GLAPI PFNGLPROGRAMUNIFORM1UI64ARBPROC glad_glProgramUniform1ui64ARB; -#define glProgramUniform1ui64ARB glad_glProgramUniform1ui64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y); -GLAPI PFNGLPROGRAMUNIFORM2UI64ARBPROC glad_glProgramUniform2ui64ARB; -#define glProgramUniform2ui64ARB glad_glProgramUniform2ui64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -GLAPI PFNGLPROGRAMUNIFORM3UI64ARBPROC glad_glProgramUniform3ui64ARB; -#define glProgramUniform3ui64ARB glad_glProgramUniform3ui64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -GLAPI PFNGLPROGRAMUNIFORM4UI64ARBPROC glad_glProgramUniform4ui64ARB; -#define glProgramUniform4ui64ARB glad_glProgramUniform4ui64ARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLPROGRAMUNIFORM1UI64VARBPROC glad_glProgramUniform1ui64vARB; -#define glProgramUniform1ui64vARB glad_glProgramUniform1ui64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLPROGRAMUNIFORM2UI64VARBPROC glad_glProgramUniform2ui64vARB; -#define glProgramUniform2ui64vARB glad_glProgramUniform2ui64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLPROGRAMUNIFORM3UI64VARBPROC glad_glProgramUniform3ui64vARB; -#define glProgramUniform3ui64vARB glad_glProgramUniform3ui64vARB -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLPROGRAMUNIFORM4UI64VARBPROC glad_glProgramUniform4ui64vARB; -#define glProgramUniform4ui64vARB glad_glProgramUniform4ui64vARB -#endif -#ifndef GL_ARB_half_float_pixel +GLAD_API_CALL int GLAD_GL_ARB_gpu_shader_int64; #define GL_ARB_half_float_pixel 1 -GLAPI int GLAD_GL_ARB_half_float_pixel; -#endif -#ifndef GL_ARB_half_float_vertex +GLAD_API_CALL int GLAD_GL_ARB_half_float_pixel; #define GL_ARB_half_float_vertex 1 -GLAPI int GLAD_GL_ARB_half_float_vertex; -#endif -#ifndef GL_ARB_imaging +GLAD_API_CALL int GLAD_GL_ARB_half_float_vertex; #define GL_ARB_imaging 1 -GLAPI int GLAD_GL_ARB_imaging; -typedef void (APIENTRYP PFNGLCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI PFNGLCOLORTABLEPROC glad_glColorTable; -#define glColorTable glad_glColorTable -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLCOLORTABLEPARAMETERFVPROC glad_glColorTableParameterfv; -#define glColorTableParameterfv glad_glColorTableParameterfv -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLCOLORTABLEPARAMETERIVPROC glad_glColorTableParameteriv; -#define glColorTableParameteriv glad_glColorTableParameteriv -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYCOLORTABLEPROC glad_glCopyColorTable; -#define glCopyColorTable glad_glCopyColorTable -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, void *table); -GLAPI PFNGLGETCOLORTABLEPROC glad_glGetColorTable; -#define glGetColorTable glad_glGetColorTable -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCOLORTABLEPARAMETERFVPROC glad_glGetColorTableParameterfv; -#define glGetColorTableParameterfv glad_glGetColorTableParameterfv -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETCOLORTABLEPARAMETERIVPROC glad_glGetColorTableParameteriv; -#define glGetColorTableParameteriv glad_glGetColorTableParameteriv -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCOLORSUBTABLEPROC glad_glColorSubTable; -#define glColorSubTable glad_glColorSubTable -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYCOLORSUBTABLEPROC glad_glCopyColorSubTable; -#define glCopyColorSubTable glad_glCopyColorSubTable -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI PFNGLCONVOLUTIONFILTER1DPROC glad_glConvolutionFilter1D; -#define glConvolutionFilter1D glad_glConvolutionFilter1D -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI PFNGLCONVOLUTIONFILTER2DPROC glad_glConvolutionFilter2D; -#define glConvolutionFilter2D glad_glConvolutionFilter2D -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat params); -GLAPI PFNGLCONVOLUTIONPARAMETERFPROC glad_glConvolutionParameterf; -#define glConvolutionParameterf glad_glConvolutionParameterf -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLCONVOLUTIONPARAMETERFVPROC glad_glConvolutionParameterfv; -#define glConvolutionParameterfv glad_glConvolutionParameterfv -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC)(GLenum target, GLenum pname, GLint params); -GLAPI PFNGLCONVOLUTIONPARAMETERIPROC glad_glConvolutionParameteri; -#define glConvolutionParameteri glad_glConvolutionParameteri -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLCONVOLUTIONPARAMETERIVPROC glad_glConvolutionParameteriv; -#define glConvolutionParameteriv glad_glConvolutionParameteriv -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYCONVOLUTIONFILTER1DPROC glad_glCopyConvolutionFilter1D; -#define glCopyConvolutionFilter1D glad_glCopyConvolutionFilter1D -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYCONVOLUTIONFILTER2DPROC glad_glCopyConvolutionFilter2D; -#define glCopyConvolutionFilter2D glad_glCopyConvolutionFilter2D -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, void *image); -GLAPI PFNGLGETCONVOLUTIONFILTERPROC glad_glGetConvolutionFilter; -#define glGetConvolutionFilter glad_glGetConvolutionFilter -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCONVOLUTIONPARAMETERFVPROC glad_glGetConvolutionParameterfv; -#define glGetConvolutionParameterfv glad_glGetConvolutionParameterfv -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETCONVOLUTIONPARAMETERIVPROC glad_glGetConvolutionParameteriv; -#define glGetConvolutionParameteriv glad_glGetConvolutionParameteriv -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI PFNGLGETSEPARABLEFILTERPROC glad_glGetSeparableFilter; -#define glGetSeparableFilter glad_glGetSeparableFilter -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -GLAPI PFNGLSEPARABLEFILTER2DPROC glad_glSeparableFilter2D; -#define glSeparableFilter2D glad_glSeparableFilter2D -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI PFNGLGETHISTOGRAMPROC glad_glGetHistogram; -#define glGetHistogram glad_glGetHistogram -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETHISTOGRAMPARAMETERFVPROC glad_glGetHistogramParameterfv; -#define glGetHistogramParameterfv glad_glGetHistogramParameterfv -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETHISTOGRAMPARAMETERIVPROC glad_glGetHistogramParameteriv; -#define glGetHistogramParameteriv glad_glGetHistogramParameteriv -typedef void (APIENTRYP PFNGLGETMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI PFNGLGETMINMAXPROC glad_glGetMinmax; -#define glGetMinmax glad_glGetMinmax -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMINMAXPARAMETERFVPROC glad_glGetMinmaxParameterfv; -#define glGetMinmaxParameterfv glad_glGetMinmaxParameterfv -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETMINMAXPARAMETERIVPROC glad_glGetMinmaxParameteriv; -#define glGetMinmaxParameteriv glad_glGetMinmaxParameteriv -typedef void (APIENTRYP PFNGLHISTOGRAMPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI PFNGLHISTOGRAMPROC glad_glHistogram; -#define glHistogram glad_glHistogram -typedef void (APIENTRYP PFNGLMINMAXPROC)(GLenum target, GLenum internalformat, GLboolean sink); -GLAPI PFNGLMINMAXPROC glad_glMinmax; -#define glMinmax glad_glMinmax -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC)(GLenum target); -GLAPI PFNGLRESETHISTOGRAMPROC glad_glResetHistogram; -#define glResetHistogram glad_glResetHistogram -typedef void (APIENTRYP PFNGLRESETMINMAXPROC)(GLenum target); -GLAPI PFNGLRESETMINMAXPROC glad_glResetMinmax; -#define glResetMinmax glad_glResetMinmax -#endif -#ifndef GL_ARB_indirect_parameters +GLAD_API_CALL int GLAD_GL_ARB_imaging; #define GL_ARB_indirect_parameters 1 -GLAPI int GLAD_GL_ARB_indirect_parameters; -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)(GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glad_glMultiDrawArraysIndirectCountARB; -#define glMultiDrawArraysIndirectCountARB glad_glMultiDrawArraysIndirectCountARB -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)(GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glad_glMultiDrawElementsIndirectCountARB; -#define glMultiDrawElementsIndirectCountARB glad_glMultiDrawElementsIndirectCountARB -#endif -#ifndef GL_ARB_instanced_arrays +GLAD_API_CALL int GLAD_GL_ARB_indirect_parameters; #define GL_ARB_instanced_arrays 1 -GLAPI int GLAD_GL_ARB_instanced_arrays; -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC)(GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXATTRIBDIVISORARBPROC glad_glVertexAttribDivisorARB; -#define glVertexAttribDivisorARB glad_glVertexAttribDivisorARB -#endif -#ifndef GL_ARB_internalformat_query +GLAD_API_CALL int GLAD_GL_ARB_instanced_arrays; #define GL_ARB_internalformat_query 1 -GLAPI int GLAD_GL_ARB_internalformat_query; -#endif -#ifndef GL_ARB_internalformat_query2 +GLAD_API_CALL int GLAD_GL_ARB_internalformat_query; #define GL_ARB_internalformat_query2 1 -GLAPI int GLAD_GL_ARB_internalformat_query2; -#endif -#ifndef GL_ARB_invalidate_subdata +GLAD_API_CALL int GLAD_GL_ARB_internalformat_query2; #define GL_ARB_invalidate_subdata 1 -GLAPI int GLAD_GL_ARB_invalidate_subdata; -#endif -#ifndef GL_ARB_map_buffer_alignment +GLAD_API_CALL int GLAD_GL_ARB_invalidate_subdata; #define GL_ARB_map_buffer_alignment 1 -GLAPI int GLAD_GL_ARB_map_buffer_alignment; -#endif -#ifndef GL_ARB_map_buffer_range +GLAD_API_CALL int GLAD_GL_ARB_map_buffer_alignment; #define GL_ARB_map_buffer_range 1 -GLAPI int GLAD_GL_ARB_map_buffer_range; -#endif -#ifndef GL_ARB_matrix_palette +GLAD_API_CALL int GLAD_GL_ARB_map_buffer_range; #define GL_ARB_matrix_palette 1 -GLAPI int GLAD_GL_ARB_matrix_palette; -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC)(GLint index); -GLAPI PFNGLCURRENTPALETTEMATRIXARBPROC glad_glCurrentPaletteMatrixARB; -#define glCurrentPaletteMatrixARB glad_glCurrentPaletteMatrixARB -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC)(GLint size, const GLubyte *indices); -GLAPI PFNGLMATRIXINDEXUBVARBPROC glad_glMatrixIndexubvARB; -#define glMatrixIndexubvARB glad_glMatrixIndexubvARB -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC)(GLint size, const GLushort *indices); -GLAPI PFNGLMATRIXINDEXUSVARBPROC glad_glMatrixIndexusvARB; -#define glMatrixIndexusvARB glad_glMatrixIndexusvARB -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC)(GLint size, const GLuint *indices); -GLAPI PFNGLMATRIXINDEXUIVARBPROC glad_glMatrixIndexuivARB; -#define glMatrixIndexuivARB glad_glMatrixIndexuivARB -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLMATRIXINDEXPOINTERARBPROC glad_glMatrixIndexPointerARB; -#define glMatrixIndexPointerARB glad_glMatrixIndexPointerARB -#endif -#ifndef GL_ARB_multi_bind +GLAD_API_CALL int GLAD_GL_ARB_matrix_palette; #define GL_ARB_multi_bind 1 -GLAPI int GLAD_GL_ARB_multi_bind; -#endif -#ifndef GL_ARB_multi_draw_indirect +GLAD_API_CALL int GLAD_GL_ARB_multi_bind; #define GL_ARB_multi_draw_indirect 1 -GLAPI int GLAD_GL_ARB_multi_draw_indirect; -#endif -#ifndef GL_ARB_multisample +GLAD_API_CALL int GLAD_GL_ARB_multi_draw_indirect; #define GL_ARB_multisample 1 -GLAPI int GLAD_GL_ARB_multisample; -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; -#define glSampleCoverageARB glad_glSampleCoverageARB -#endif -#ifndef GL_ARB_multitexture +GLAD_API_CALL int GLAD_GL_ARB_multisample; #define GL_ARB_multitexture 1 -GLAPI int GLAD_GL_ARB_multitexture; -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC)(GLenum texture); -GLAPI PFNGLACTIVETEXTUREARBPROC glad_glActiveTextureARB; -#define glActiveTextureARB glad_glActiveTextureARB -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture); -GLAPI PFNGLCLIENTACTIVETEXTUREARBPROC glad_glClientActiveTextureARB; -#define glClientActiveTextureARB glad_glClientActiveTextureARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC)(GLenum target, GLdouble s); -GLAPI PFNGLMULTITEXCOORD1DARBPROC glad_glMultiTexCoord1dARB; -#define glMultiTexCoord1dARB glad_glMultiTexCoord1dARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD1DVARBPROC glad_glMultiTexCoord1dvARB; -#define glMultiTexCoord1dvARB glad_glMultiTexCoord1dvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s); -GLAPI PFNGLMULTITEXCOORD1FARBPROC glad_glMultiTexCoord1fARB; -#define glMultiTexCoord1fARB glad_glMultiTexCoord1fARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD1FVARBPROC glad_glMultiTexCoord1fvARB; -#define glMultiTexCoord1fvARB glad_glMultiTexCoord1fvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC)(GLenum target, GLint s); -GLAPI PFNGLMULTITEXCOORD1IARBPROC glad_glMultiTexCoord1iARB; -#define glMultiTexCoord1iARB glad_glMultiTexCoord1iARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD1IVARBPROC glad_glMultiTexCoord1ivARB; -#define glMultiTexCoord1ivARB glad_glMultiTexCoord1ivARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC)(GLenum target, GLshort s); -GLAPI PFNGLMULTITEXCOORD1SARBPROC glad_glMultiTexCoord1sARB; -#define glMultiTexCoord1sARB glad_glMultiTexCoord1sARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD1SVARBPROC glad_glMultiTexCoord1svARB; -#define glMultiTexCoord1svARB glad_glMultiTexCoord1svARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC)(GLenum target, GLdouble s, GLdouble t); -GLAPI PFNGLMULTITEXCOORD2DARBPROC glad_glMultiTexCoord2dARB; -#define glMultiTexCoord2dARB glad_glMultiTexCoord2dARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD2DVARBPROC glad_glMultiTexCoord2dvARB; -#define glMultiTexCoord2dvARB glad_glMultiTexCoord2dvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t); -GLAPI PFNGLMULTITEXCOORD2FARBPROC glad_glMultiTexCoord2fARB; -#define glMultiTexCoord2fARB glad_glMultiTexCoord2fARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD2FVARBPROC glad_glMultiTexCoord2fvARB; -#define glMultiTexCoord2fvARB glad_glMultiTexCoord2fvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC)(GLenum target, GLint s, GLint t); -GLAPI PFNGLMULTITEXCOORD2IARBPROC glad_glMultiTexCoord2iARB; -#define glMultiTexCoord2iARB glad_glMultiTexCoord2iARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD2IVARBPROC glad_glMultiTexCoord2ivARB; -#define glMultiTexCoord2ivARB glad_glMultiTexCoord2ivARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC)(GLenum target, GLshort s, GLshort t); -GLAPI PFNGLMULTITEXCOORD2SARBPROC glad_glMultiTexCoord2sARB; -#define glMultiTexCoord2sARB glad_glMultiTexCoord2sARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD2SVARBPROC glad_glMultiTexCoord2svARB; -#define glMultiTexCoord2svARB glad_glMultiTexCoord2svARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI PFNGLMULTITEXCOORD3DARBPROC glad_glMultiTexCoord3dARB; -#define glMultiTexCoord3dARB glad_glMultiTexCoord3dARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD3DVARBPROC glad_glMultiTexCoord3dvARB; -#define glMultiTexCoord3dvARB glad_glMultiTexCoord3dvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI PFNGLMULTITEXCOORD3FARBPROC glad_glMultiTexCoord3fARB; -#define glMultiTexCoord3fARB glad_glMultiTexCoord3fARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD3FVARBPROC glad_glMultiTexCoord3fvARB; -#define glMultiTexCoord3fvARB glad_glMultiTexCoord3fvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC)(GLenum target, GLint s, GLint t, GLint r); -GLAPI PFNGLMULTITEXCOORD3IARBPROC glad_glMultiTexCoord3iARB; -#define glMultiTexCoord3iARB glad_glMultiTexCoord3iARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD3IVARBPROC glad_glMultiTexCoord3ivARB; -#define glMultiTexCoord3ivARB glad_glMultiTexCoord3ivARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI PFNGLMULTITEXCOORD3SARBPROC glad_glMultiTexCoord3sARB; -#define glMultiTexCoord3sARB glad_glMultiTexCoord3sARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD3SVARBPROC glad_glMultiTexCoord3svARB; -#define glMultiTexCoord3svARB glad_glMultiTexCoord3svARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI PFNGLMULTITEXCOORD4DARBPROC glad_glMultiTexCoord4dARB; -#define glMultiTexCoord4dARB glad_glMultiTexCoord4dARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD4DVARBPROC glad_glMultiTexCoord4dvARB; -#define glMultiTexCoord4dvARB glad_glMultiTexCoord4dvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI PFNGLMULTITEXCOORD4FARBPROC glad_glMultiTexCoord4fARB; -#define glMultiTexCoord4fARB glad_glMultiTexCoord4fARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD4FVARBPROC glad_glMultiTexCoord4fvARB; -#define glMultiTexCoord4fvARB glad_glMultiTexCoord4fvARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI PFNGLMULTITEXCOORD4IARBPROC glad_glMultiTexCoord4iARB; -#define glMultiTexCoord4iARB glad_glMultiTexCoord4iARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD4IVARBPROC glad_glMultiTexCoord4ivARB; -#define glMultiTexCoord4ivARB glad_glMultiTexCoord4ivARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI PFNGLMULTITEXCOORD4SARBPROC glad_glMultiTexCoord4sARB; -#define glMultiTexCoord4sARB glad_glMultiTexCoord4sARB -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD4SVARBPROC glad_glMultiTexCoord4svARB; -#define glMultiTexCoord4svARB glad_glMultiTexCoord4svARB -#endif -#ifndef GL_ARB_occlusion_query +GLAD_API_CALL int GLAD_GL_ARB_multitexture; #define GL_ARB_occlusion_query 1 -GLAPI int GLAD_GL_ARB_occlusion_query; -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLGENQUERIESARBPROC glad_glGenQueriesARB; -#define glGenQueriesARB glad_glGenQueriesARB -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC)(GLsizei n, const GLuint *ids); -GLAPI PFNGLDELETEQUERIESARBPROC glad_glDeleteQueriesARB; -#define glDeleteQueriesARB glad_glDeleteQueriesARB -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC)(GLuint id); -GLAPI PFNGLISQUERYARBPROC glad_glIsQueryARB; -#define glIsQueryARB glad_glIsQueryARB -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC)(GLenum target, GLuint id); -GLAPI PFNGLBEGINQUERYARBPROC glad_glBeginQueryARB; -#define glBeginQueryARB glad_glBeginQueryARB -typedef void (APIENTRYP PFNGLENDQUERYARBPROC)(GLenum target); -GLAPI PFNGLENDQUERYARBPROC glad_glEndQueryARB; -#define glEndQueryARB glad_glEndQueryARB -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYIVARBPROC glad_glGetQueryivARB; -#define glGetQueryivARB glad_glGetQueryivARB -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC)(GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYOBJECTIVARBPROC glad_glGetQueryObjectivARB; -#define glGetQueryObjectivARB glad_glGetQueryObjectivARB -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC)(GLuint id, GLenum pname, GLuint *params); -GLAPI PFNGLGETQUERYOBJECTUIVARBPROC glad_glGetQueryObjectuivARB; -#define glGetQueryObjectuivARB glad_glGetQueryObjectuivARB -#endif -#ifndef GL_ARB_occlusion_query2 +GLAD_API_CALL int GLAD_GL_ARB_occlusion_query; #define GL_ARB_occlusion_query2 1 -GLAPI int GLAD_GL_ARB_occlusion_query2; -#endif -#ifndef GL_ARB_parallel_shader_compile +GLAD_API_CALL int GLAD_GL_ARB_occlusion_query2; #define GL_ARB_parallel_shader_compile 1 -GLAPI int GLAD_GL_ARB_parallel_shader_compile; -typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC)(GLuint count); -GLAPI PFNGLMAXSHADERCOMPILERTHREADSARBPROC glad_glMaxShaderCompilerThreadsARB; -#define glMaxShaderCompilerThreadsARB glad_glMaxShaderCompilerThreadsARB -#endif -#ifndef GL_ARB_pipeline_statistics_query +GLAD_API_CALL int GLAD_GL_ARB_parallel_shader_compile; #define GL_ARB_pipeline_statistics_query 1 -GLAPI int GLAD_GL_ARB_pipeline_statistics_query; -#endif -#ifndef GL_ARB_pixel_buffer_object +GLAD_API_CALL int GLAD_GL_ARB_pipeline_statistics_query; #define GL_ARB_pixel_buffer_object 1 -GLAPI int GLAD_GL_ARB_pixel_buffer_object; -#endif -#ifndef GL_ARB_point_parameters +GLAD_API_CALL int GLAD_GL_ARB_pixel_buffer_object; #define GL_ARB_point_parameters 1 -GLAPI int GLAD_GL_ARB_point_parameters; -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPOINTPARAMETERFARBPROC glad_glPointParameterfARB; -#define glPointParameterfARB glad_glPointParameterfARB -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLPOINTPARAMETERFVARBPROC glad_glPointParameterfvARB; -#define glPointParameterfvARB glad_glPointParameterfvARB -#endif -#ifndef GL_ARB_point_sprite +GLAD_API_CALL int GLAD_GL_ARB_point_parameters; #define GL_ARB_point_sprite 1 -GLAPI int GLAD_GL_ARB_point_sprite; -#endif -#ifndef GL_ARB_polygon_offset_clamp +GLAD_API_CALL int GLAD_GL_ARB_point_sprite; #define GL_ARB_polygon_offset_clamp 1 -GLAPI int GLAD_GL_ARB_polygon_offset_clamp; -#endif -#ifndef GL_ARB_post_depth_coverage +GLAD_API_CALL int GLAD_GL_ARB_polygon_offset_clamp; #define GL_ARB_post_depth_coverage 1 -GLAPI int GLAD_GL_ARB_post_depth_coverage; -#endif -#ifndef GL_ARB_program_interface_query +GLAD_API_CALL int GLAD_GL_ARB_post_depth_coverage; #define GL_ARB_program_interface_query 1 -GLAPI int GLAD_GL_ARB_program_interface_query; -#endif -#ifndef GL_ARB_provoking_vertex +GLAD_API_CALL int GLAD_GL_ARB_program_interface_query; #define GL_ARB_provoking_vertex 1 -GLAPI int GLAD_GL_ARB_provoking_vertex; -#endif -#ifndef GL_ARB_query_buffer_object +GLAD_API_CALL int GLAD_GL_ARB_provoking_vertex; #define GL_ARB_query_buffer_object 1 -GLAPI int GLAD_GL_ARB_query_buffer_object; -#endif -#ifndef GL_ARB_robust_buffer_access_behavior +GLAD_API_CALL int GLAD_GL_ARB_query_buffer_object; #define GL_ARB_robust_buffer_access_behavior 1 -GLAPI int GLAD_GL_ARB_robust_buffer_access_behavior; -#endif -#ifndef GL_ARB_robustness +GLAD_API_CALL int GLAD_GL_ARB_robust_buffer_access_behavior; #define GL_ARB_robustness 1 -GLAPI int GLAD_GL_ARB_robustness; -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC)(void); -GLAPI PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_glGetGraphicsResetStatusARB; -#define glGetGraphicsResetStatusARB glad_glGetGraphicsResetStatusARB -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); -GLAPI PFNGLGETNTEXIMAGEARBPROC glad_glGetnTexImageARB; -#define glGetnTexImageARB glad_glGetnTexImageARB -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI PFNGLREADNPIXELSARBPROC glad_glReadnPixelsARB; -#define glReadnPixelsARB glad_glReadnPixelsARB -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, GLsizei bufSize, void *img); -GLAPI PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_glGetnCompressedTexImageARB; -#define glGetnCompressedTexImageARB glad_glGetnCompressedTexImageARB -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI PFNGLGETNUNIFORMFVARBPROC glad_glGetnUniformfvARB; -#define glGetnUniformfvARB glad_glGetnUniformfvARB -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI PFNGLGETNUNIFORMIVARBPROC glad_glGetnUniformivARB; -#define glGetnUniformivARB glad_glGetnUniformivARB -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI PFNGLGETNUNIFORMUIVARBPROC glad_glGetnUniformuivARB; -#define glGetnUniformuivARB glad_glGetnUniformuivARB -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -GLAPI PFNGLGETNUNIFORMDVARBPROC glad_glGetnUniformdvARB; -#define glGetnUniformdvARB glad_glGetnUniformdvARB -typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI PFNGLGETNMAPDVARBPROC glad_glGetnMapdvARB; -#define glGetnMapdvARB glad_glGetnMapdvARB -typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI PFNGLGETNMAPFVARBPROC glad_glGetnMapfvARB; -#define glGetnMapfvARB glad_glGetnMapfvARB -typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI PFNGLGETNMAPIVARBPROC glad_glGetnMapivARB; -#define glGetnMapivARB glad_glGetnMapivARB -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC)(GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI PFNGLGETNPIXELMAPFVARBPROC glad_glGetnPixelMapfvARB; -#define glGetnPixelMapfvARB glad_glGetnPixelMapfvARB -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC)(GLenum map, GLsizei bufSize, GLuint *values); -GLAPI PFNGLGETNPIXELMAPUIVARBPROC glad_glGetnPixelMapuivARB; -#define glGetnPixelMapuivARB glad_glGetnPixelMapuivARB -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC)(GLenum map, GLsizei bufSize, GLushort *values); -GLAPI PFNGLGETNPIXELMAPUSVARBPROC glad_glGetnPixelMapusvARB; -#define glGetnPixelMapusvARB glad_glGetnPixelMapusvARB -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC)(GLsizei bufSize, GLubyte *pattern); -GLAPI PFNGLGETNPOLYGONSTIPPLEARBPROC glad_glGetnPolygonStippleARB; -#define glGetnPolygonStippleARB glad_glGetnPolygonStippleARB -typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -GLAPI PFNGLGETNCOLORTABLEARBPROC glad_glGetnColorTableARB; -#define glGetnColorTableARB glad_glGetnColorTableARB -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -GLAPI PFNGLGETNCONVOLUTIONFILTERARBPROC glad_glGetnConvolutionFilterARB; -#define glGetnConvolutionFilterARB glad_glGetnConvolutionFilterARB -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -GLAPI PFNGLGETNSEPARABLEFILTERARBPROC glad_glGetnSeparableFilterARB; -#define glGetnSeparableFilterARB glad_glGetnSeparableFilterARB -typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI PFNGLGETNHISTOGRAMARBPROC glad_glGetnHistogramARB; -#define glGetnHistogramARB glad_glGetnHistogramARB -typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI PFNGLGETNMINMAXARBPROC glad_glGetnMinmaxARB; -#define glGetnMinmaxARB glad_glGetnMinmaxARB -#endif -#ifndef GL_ARB_robustness_isolation +GLAD_API_CALL int GLAD_GL_ARB_robustness; #define GL_ARB_robustness_isolation 1 -GLAPI int GLAD_GL_ARB_robustness_isolation; -#endif -#ifndef GL_ARB_sample_locations +GLAD_API_CALL int GLAD_GL_ARB_robustness_isolation; #define GL_ARB_sample_locations 1 -GLAPI int GLAD_GL_ARB_sample_locations; -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat *v); -GLAPI PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB; -#define glFramebufferSampleLocationsfvARB glad_glFramebufferSampleLocationsfvARB -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB; -#define glNamedFramebufferSampleLocationsfvARB glad_glNamedFramebufferSampleLocationsfvARB -typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC)(void); -GLAPI PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB; -#define glEvaluateDepthValuesARB glad_glEvaluateDepthValuesARB -#endif -#ifndef GL_ARB_sample_shading +GLAD_API_CALL int GLAD_GL_ARB_sample_locations; #define GL_ARB_sample_shading 1 -GLAPI int GLAD_GL_ARB_sample_shading; -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC)(GLfloat value); -GLAPI PFNGLMINSAMPLESHADINGARBPROC glad_glMinSampleShadingARB; -#define glMinSampleShadingARB glad_glMinSampleShadingARB -#endif -#ifndef GL_ARB_sampler_objects +GLAD_API_CALL int GLAD_GL_ARB_sample_shading; #define GL_ARB_sampler_objects 1 -GLAPI int GLAD_GL_ARB_sampler_objects; -#endif -#ifndef GL_ARB_seamless_cube_map +GLAD_API_CALL int GLAD_GL_ARB_sampler_objects; #define GL_ARB_seamless_cube_map 1 -GLAPI int GLAD_GL_ARB_seamless_cube_map; -#endif -#ifndef GL_ARB_seamless_cubemap_per_texture +GLAD_API_CALL int GLAD_GL_ARB_seamless_cube_map; #define GL_ARB_seamless_cubemap_per_texture 1 -GLAPI int GLAD_GL_ARB_seamless_cubemap_per_texture; -#endif -#ifndef GL_ARB_separate_shader_objects +GLAD_API_CALL int GLAD_GL_ARB_seamless_cubemap_per_texture; #define GL_ARB_separate_shader_objects 1 -GLAPI int GLAD_GL_ARB_separate_shader_objects; -#endif -#ifndef GL_ARB_shader_atomic_counter_ops +GLAD_API_CALL int GLAD_GL_ARB_separate_shader_objects; #define GL_ARB_shader_atomic_counter_ops 1 -GLAPI int GLAD_GL_ARB_shader_atomic_counter_ops; -#endif -#ifndef GL_ARB_shader_atomic_counters +GLAD_API_CALL int GLAD_GL_ARB_shader_atomic_counter_ops; #define GL_ARB_shader_atomic_counters 1 -GLAPI int GLAD_GL_ARB_shader_atomic_counters; -#endif -#ifndef GL_ARB_shader_ballot +GLAD_API_CALL int GLAD_GL_ARB_shader_atomic_counters; #define GL_ARB_shader_ballot 1 -GLAPI int GLAD_GL_ARB_shader_ballot; -#endif -#ifndef GL_ARB_shader_bit_encoding +GLAD_API_CALL int GLAD_GL_ARB_shader_ballot; #define GL_ARB_shader_bit_encoding 1 -GLAPI int GLAD_GL_ARB_shader_bit_encoding; -#endif -#ifndef GL_ARB_shader_clock +GLAD_API_CALL int GLAD_GL_ARB_shader_bit_encoding; #define GL_ARB_shader_clock 1 -GLAPI int GLAD_GL_ARB_shader_clock; -#endif -#ifndef GL_ARB_shader_draw_parameters +GLAD_API_CALL int GLAD_GL_ARB_shader_clock; #define GL_ARB_shader_draw_parameters 1 -GLAPI int GLAD_GL_ARB_shader_draw_parameters; -#endif -#ifndef GL_ARB_shader_group_vote +GLAD_API_CALL int GLAD_GL_ARB_shader_draw_parameters; #define GL_ARB_shader_group_vote 1 -GLAPI int GLAD_GL_ARB_shader_group_vote; -#endif -#ifndef GL_ARB_shader_image_load_store +GLAD_API_CALL int GLAD_GL_ARB_shader_group_vote; #define GL_ARB_shader_image_load_store 1 -GLAPI int GLAD_GL_ARB_shader_image_load_store; -#endif -#ifndef GL_ARB_shader_image_size +GLAD_API_CALL int GLAD_GL_ARB_shader_image_load_store; #define GL_ARB_shader_image_size 1 -GLAPI int GLAD_GL_ARB_shader_image_size; -#endif -#ifndef GL_ARB_shader_objects +GLAD_API_CALL int GLAD_GL_ARB_shader_image_size; #define GL_ARB_shader_objects 1 -GLAPI int GLAD_GL_ARB_shader_objects; -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj); -GLAPI PFNGLDELETEOBJECTARBPROC glad_glDeleteObjectARB; -#define glDeleteObjectARB glad_glDeleteObjectARB -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC)(GLenum pname); -GLAPI PFNGLGETHANDLEARBPROC glad_glGetHandleARB; -#define glGetHandleARB glad_glGetHandleARB -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj); -GLAPI PFNGLDETACHOBJECTARBPROC glad_glDetachObjectARB; -#define glDetachObjectARB glad_glDetachObjectARB -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType); -GLAPI PFNGLCREATESHADEROBJECTARBPROC glad_glCreateShaderObjectARB; -#define glCreateShaderObjectARB glad_glCreateShaderObjectARB -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); -GLAPI PFNGLSHADERSOURCEARBPROC glad_glShaderSourceARB; -#define glShaderSourceARB glad_glShaderSourceARB -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj); -GLAPI PFNGLCOMPILESHADERARBPROC glad_glCompileShaderARB; -#define glCompileShaderARB glad_glCompileShaderARB -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC)(void); -GLAPI PFNGLCREATEPROGRAMOBJECTARBPROC glad_glCreateProgramObjectARB; -#define glCreateProgramObjectARB glad_glCreateProgramObjectARB -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj); -GLAPI PFNGLATTACHOBJECTARBPROC glad_glAttachObjectARB; -#define glAttachObjectARB glad_glAttachObjectARB -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj); -GLAPI PFNGLLINKPROGRAMARBPROC glad_glLinkProgramARB; -#define glLinkProgramARB glad_glLinkProgramARB -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj); -GLAPI PFNGLUSEPROGRAMOBJECTARBPROC glad_glUseProgramObjectARB; -#define glUseProgramObjectARB glad_glUseProgramObjectARB -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj); -GLAPI PFNGLVALIDATEPROGRAMARBPROC glad_glValidateProgramARB; -#define glValidateProgramARB glad_glValidateProgramARB -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0); -GLAPI PFNGLUNIFORM1FARBPROC glad_glUniform1fARB; -#define glUniform1fARB glad_glUniform1fARB -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1); -GLAPI PFNGLUNIFORM2FARBPROC glad_glUniform2fARB; -#define glUniform2fARB glad_glUniform2fARB -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI PFNGLUNIFORM3FARBPROC glad_glUniform3fARB; -#define glUniform3fARB glad_glUniform3fARB -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI PFNGLUNIFORM4FARBPROC glad_glUniform4fARB; -#define glUniform4fARB glad_glUniform4fARB -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0); -GLAPI PFNGLUNIFORM1IARBPROC glad_glUniform1iARB; -#define glUniform1iARB glad_glUniform1iARB -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1); -GLAPI PFNGLUNIFORM2IARBPROC glad_glUniform2iARB; -#define glUniform2iARB glad_glUniform2iARB -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2); -GLAPI PFNGLUNIFORM3IARBPROC glad_glUniform3iARB; -#define glUniform3iARB glad_glUniform3iARB -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI PFNGLUNIFORM4IARBPROC glad_glUniform4iARB; -#define glUniform4iARB glad_glUniform4iARB -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM1FVARBPROC glad_glUniform1fvARB; -#define glUniform1fvARB glad_glUniform1fvARB -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM2FVARBPROC glad_glUniform2fvARB; -#define glUniform2fvARB glad_glUniform2fvARB -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM3FVARBPROC glad_glUniform3fvARB; -#define glUniform3fvARB glad_glUniform3fvARB -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM4FVARBPROC glad_glUniform4fvARB; -#define glUniform4fvARB glad_glUniform4fvARB -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM1IVARBPROC glad_glUniform1ivARB; -#define glUniform1ivARB glad_glUniform1ivARB -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM2IVARBPROC glad_glUniform2ivARB; -#define glUniform2ivARB glad_glUniform2ivARB -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM3IVARBPROC glad_glUniform3ivARB; -#define glUniform3ivARB glad_glUniform3ivARB -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM4IVARBPROC glad_glUniform4ivARB; -#define glUniform4ivARB glad_glUniform4ivARB -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2FVARBPROC glad_glUniformMatrix2fvARB; -#define glUniformMatrix2fvARB glad_glUniformMatrix2fvARB -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3FVARBPROC glad_glUniformMatrix3fvARB; -#define glUniformMatrix3fvARB glad_glUniformMatrix3fvARB -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4FVARBPROC glad_glUniformMatrix4fvARB; -#define glUniformMatrix4fvARB glad_glUniformMatrix4fvARB -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat *params); -GLAPI PFNGLGETOBJECTPARAMETERFVARBPROC glad_glGetObjectParameterfvARB; -#define glGetObjectParameterfvARB glad_glGetObjectParameterfvARB -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint *params); -GLAPI PFNGLGETOBJECTPARAMETERIVARBPROC glad_glGetObjectParameterivARB; -#define glGetObjectParameterivARB glad_glGetObjectParameterivARB -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -GLAPI PFNGLGETINFOLOGARBPROC glad_glGetInfoLogARB; -#define glGetInfoLogARB glad_glGetInfoLogARB -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -GLAPI PFNGLGETATTACHEDOBJECTSARBPROC glad_glGetAttachedObjectsARB; -#define glGetAttachedObjectsARB glad_glGetAttachedObjectsARB -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name); -GLAPI PFNGLGETUNIFORMLOCATIONARBPROC glad_glGetUniformLocationARB; -#define glGetUniformLocationARB glad_glGetUniformLocationARB -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI PFNGLGETACTIVEUNIFORMARBPROC glad_glGetActiveUniformARB; -#define glGetActiveUniformARB glad_glGetActiveUniformARB -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat *params); -GLAPI PFNGLGETUNIFORMFVARBPROC glad_glGetUniformfvARB; -#define glGetUniformfvARB glad_glGetUniformfvARB -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint *params); -GLAPI PFNGLGETUNIFORMIVARBPROC glad_glGetUniformivARB; -#define glGetUniformivARB glad_glGetUniformivARB -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -GLAPI PFNGLGETSHADERSOURCEARBPROC glad_glGetShaderSourceARB; -#define glGetShaderSourceARB glad_glGetShaderSourceARB -#endif -#ifndef GL_ARB_shader_precision +GLAD_API_CALL int GLAD_GL_ARB_shader_objects; #define GL_ARB_shader_precision 1 -GLAPI int GLAD_GL_ARB_shader_precision; -#endif -#ifndef GL_ARB_shader_stencil_export +GLAD_API_CALL int GLAD_GL_ARB_shader_precision; #define GL_ARB_shader_stencil_export 1 -GLAPI int GLAD_GL_ARB_shader_stencil_export; -#endif -#ifndef GL_ARB_shader_storage_buffer_object +GLAD_API_CALL int GLAD_GL_ARB_shader_stencil_export; #define GL_ARB_shader_storage_buffer_object 1 -GLAPI int GLAD_GL_ARB_shader_storage_buffer_object; -#endif -#ifndef GL_ARB_shader_subroutine +GLAD_API_CALL int GLAD_GL_ARB_shader_storage_buffer_object; #define GL_ARB_shader_subroutine 1 -GLAPI int GLAD_GL_ARB_shader_subroutine; -#endif -#ifndef GL_ARB_shader_texture_image_samples +GLAD_API_CALL int GLAD_GL_ARB_shader_subroutine; #define GL_ARB_shader_texture_image_samples 1 -GLAPI int GLAD_GL_ARB_shader_texture_image_samples; -#endif -#ifndef GL_ARB_shader_texture_lod +GLAD_API_CALL int GLAD_GL_ARB_shader_texture_image_samples; #define GL_ARB_shader_texture_lod 1 -GLAPI int GLAD_GL_ARB_shader_texture_lod; -#endif -#ifndef GL_ARB_shader_viewport_layer_array +GLAD_API_CALL int GLAD_GL_ARB_shader_texture_lod; #define GL_ARB_shader_viewport_layer_array 1 -GLAPI int GLAD_GL_ARB_shader_viewport_layer_array; -#endif -#ifndef GL_ARB_shading_language_100 +GLAD_API_CALL int GLAD_GL_ARB_shader_viewport_layer_array; #define GL_ARB_shading_language_100 1 -GLAPI int GLAD_GL_ARB_shading_language_100; -#endif -#ifndef GL_ARB_shading_language_420pack +GLAD_API_CALL int GLAD_GL_ARB_shading_language_100; #define GL_ARB_shading_language_420pack 1 -GLAPI int GLAD_GL_ARB_shading_language_420pack; -#endif -#ifndef GL_ARB_shading_language_include +GLAD_API_CALL int GLAD_GL_ARB_shading_language_420pack; #define GL_ARB_shading_language_include 1 -GLAPI int GLAD_GL_ARB_shading_language_include; -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC)(GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI PFNGLNAMEDSTRINGARBPROC glad_glNamedStringARB; -#define glNamedStringARB glad_glNamedStringARB -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC)(GLint namelen, const GLchar *name); -GLAPI PFNGLDELETENAMEDSTRINGARBPROC glad_glDeleteNamedStringARB; -#define glDeleteNamedStringARB glad_glDeleteNamedStringARB -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC)(GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); -GLAPI PFNGLCOMPILESHADERINCLUDEARBPROC glad_glCompileShaderIncludeARB; -#define glCompileShaderIncludeARB glad_glCompileShaderIncludeARB -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC)(GLint namelen, const GLchar *name); -GLAPI PFNGLISNAMEDSTRINGARBPROC glad_glIsNamedStringARB; -#define glIsNamedStringARB glad_glIsNamedStringARB -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC)(GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI PFNGLGETNAMEDSTRINGARBPROC glad_glGetNamedStringARB; -#define glGetNamedStringARB glad_glGetNamedStringARB -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC)(GLint namelen, const GLchar *name, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDSTRINGIVARBPROC glad_glGetNamedStringivARB; -#define glGetNamedStringivARB glad_glGetNamedStringivARB -#endif -#ifndef GL_ARB_shading_language_packing +GLAD_API_CALL int GLAD_GL_ARB_shading_language_include; #define GL_ARB_shading_language_packing 1 -GLAPI int GLAD_GL_ARB_shading_language_packing; -#endif -#ifndef GL_ARB_shadow +GLAD_API_CALL int GLAD_GL_ARB_shading_language_packing; #define GL_ARB_shadow 1 -GLAPI int GLAD_GL_ARB_shadow; -#endif -#ifndef GL_ARB_shadow_ambient +GLAD_API_CALL int GLAD_GL_ARB_shadow; #define GL_ARB_shadow_ambient 1 -GLAPI int GLAD_GL_ARB_shadow_ambient; -#endif -#ifndef GL_ARB_sparse_buffer +GLAD_API_CALL int GLAD_GL_ARB_shadow_ambient; #define GL_ARB_sparse_buffer 1 -GLAPI int GLAD_GL_ARB_sparse_buffer; -typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); -GLAPI PFNGLBUFFERPAGECOMMITMENTARBPROC glad_glBufferPageCommitmentARB; -#define glBufferPageCommitmentARB glad_glBufferPageCommitmentARB -typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -GLAPI PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC glad_glNamedBufferPageCommitmentEXT; -#define glNamedBufferPageCommitmentEXT glad_glNamedBufferPageCommitmentEXT -typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -GLAPI PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC glad_glNamedBufferPageCommitmentARB; -#define glNamedBufferPageCommitmentARB glad_glNamedBufferPageCommitmentARB -#endif -#ifndef GL_ARB_sparse_texture +GLAD_API_CALL int GLAD_GL_ARB_sparse_buffer; #define GL_ARB_sparse_texture 1 -GLAPI int GLAD_GL_ARB_sparse_texture; -typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -GLAPI PFNGLTEXPAGECOMMITMENTARBPROC glad_glTexPageCommitmentARB; -#define glTexPageCommitmentARB glad_glTexPageCommitmentARB -#endif -#ifndef GL_ARB_sparse_texture2 +GLAD_API_CALL int GLAD_GL_ARB_sparse_texture; #define GL_ARB_sparse_texture2 1 -GLAPI int GLAD_GL_ARB_sparse_texture2; -#endif -#ifndef GL_ARB_sparse_texture_clamp +GLAD_API_CALL int GLAD_GL_ARB_sparse_texture2; #define GL_ARB_sparse_texture_clamp 1 -GLAPI int GLAD_GL_ARB_sparse_texture_clamp; -#endif -#ifndef GL_ARB_spirv_extensions +GLAD_API_CALL int GLAD_GL_ARB_sparse_texture_clamp; #define GL_ARB_spirv_extensions 1 -GLAPI int GLAD_GL_ARB_spirv_extensions; -#endif -#ifndef GL_ARB_stencil_texturing +GLAD_API_CALL int GLAD_GL_ARB_spirv_extensions; #define GL_ARB_stencil_texturing 1 -GLAPI int GLAD_GL_ARB_stencil_texturing; -#endif -#ifndef GL_ARB_sync +GLAD_API_CALL int GLAD_GL_ARB_stencil_texturing; #define GL_ARB_sync 1 -GLAPI int GLAD_GL_ARB_sync; -#endif -#ifndef GL_ARB_tessellation_shader +GLAD_API_CALL int GLAD_GL_ARB_sync; #define GL_ARB_tessellation_shader 1 -GLAPI int GLAD_GL_ARB_tessellation_shader; -#endif -#ifndef GL_ARB_texture_barrier +GLAD_API_CALL int GLAD_GL_ARB_tessellation_shader; #define GL_ARB_texture_barrier 1 -GLAPI int GLAD_GL_ARB_texture_barrier; -#endif -#ifndef GL_ARB_texture_border_clamp +GLAD_API_CALL int GLAD_GL_ARB_texture_barrier; #define GL_ARB_texture_border_clamp 1 -GLAPI int GLAD_GL_ARB_texture_border_clamp; -#endif -#ifndef GL_ARB_texture_buffer_object +GLAD_API_CALL int GLAD_GL_ARB_texture_border_clamp; #define GL_ARB_texture_buffer_object 1 -GLAPI int GLAD_GL_ARB_texture_buffer_object; -typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC)(GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXBUFFERARBPROC glad_glTexBufferARB; -#define glTexBufferARB glad_glTexBufferARB -#endif -#ifndef GL_ARB_texture_buffer_object_rgb32 +GLAD_API_CALL int GLAD_GL_ARB_texture_buffer_object; #define GL_ARB_texture_buffer_object_rgb32 1 -GLAPI int GLAD_GL_ARB_texture_buffer_object_rgb32; -#endif -#ifndef GL_ARB_texture_buffer_range +GLAD_API_CALL int GLAD_GL_ARB_texture_buffer_object_rgb32; #define GL_ARB_texture_buffer_range 1 -GLAPI int GLAD_GL_ARB_texture_buffer_range; -#endif -#ifndef GL_ARB_texture_compression +GLAD_API_CALL int GLAD_GL_ARB_texture_buffer_range; #define GL_ARB_texture_compression 1 -GLAPI int GLAD_GL_ARB_texture_compression; -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB; -#define glCompressedTexImage3DARB glad_glCompressedTexImage3DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB; -#define glCompressedTexImage2DARB glad_glCompressedTexImage2DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB; -#define glCompressedTexImage1DARB glad_glCompressedTexImage1DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB; -#define glCompressedTexSubImage3DARB glad_glCompressedTexSubImage3DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB; -#define glCompressedTexSubImage2DARB glad_glCompressedTexSubImage2DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB; -#define glCompressedTexSubImage1DARB glad_glCompressedTexSubImage1DARB -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint level, void *img); -GLAPI PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB; -#define glGetCompressedTexImageARB glad_glGetCompressedTexImageARB -#endif -#ifndef GL_ARB_texture_compression_bptc +GLAD_API_CALL int GLAD_GL_ARB_texture_compression; #define GL_ARB_texture_compression_bptc 1 -GLAPI int GLAD_GL_ARB_texture_compression_bptc; -#endif -#ifndef GL_ARB_texture_compression_rgtc +GLAD_API_CALL int GLAD_GL_ARB_texture_compression_bptc; #define GL_ARB_texture_compression_rgtc 1 -GLAPI int GLAD_GL_ARB_texture_compression_rgtc; -#endif -#ifndef GL_ARB_texture_cube_map +GLAD_API_CALL int GLAD_GL_ARB_texture_compression_rgtc; #define GL_ARB_texture_cube_map 1 -GLAPI int GLAD_GL_ARB_texture_cube_map; -#endif -#ifndef GL_ARB_texture_cube_map_array +GLAD_API_CALL int GLAD_GL_ARB_texture_cube_map; #define GL_ARB_texture_cube_map_array 1 -GLAPI int GLAD_GL_ARB_texture_cube_map_array; -#endif -#ifndef GL_ARB_texture_env_add +GLAD_API_CALL int GLAD_GL_ARB_texture_cube_map_array; #define GL_ARB_texture_env_add 1 -GLAPI int GLAD_GL_ARB_texture_env_add; -#endif -#ifndef GL_ARB_texture_env_combine +GLAD_API_CALL int GLAD_GL_ARB_texture_env_add; #define GL_ARB_texture_env_combine 1 -GLAPI int GLAD_GL_ARB_texture_env_combine; -#endif -#ifndef GL_ARB_texture_env_crossbar +GLAD_API_CALL int GLAD_GL_ARB_texture_env_combine; #define GL_ARB_texture_env_crossbar 1 -GLAPI int GLAD_GL_ARB_texture_env_crossbar; -#endif -#ifndef GL_ARB_texture_env_dot3 +GLAD_API_CALL int GLAD_GL_ARB_texture_env_crossbar; #define GL_ARB_texture_env_dot3 1 -GLAPI int GLAD_GL_ARB_texture_env_dot3; -#endif -#ifndef GL_ARB_texture_filter_anisotropic +GLAD_API_CALL int GLAD_GL_ARB_texture_env_dot3; #define GL_ARB_texture_filter_anisotropic 1 -GLAPI int GLAD_GL_ARB_texture_filter_anisotropic; -#endif -#ifndef GL_ARB_texture_filter_minmax +GLAD_API_CALL int GLAD_GL_ARB_texture_filter_anisotropic; #define GL_ARB_texture_filter_minmax 1 -GLAPI int GLAD_GL_ARB_texture_filter_minmax; -#endif -#ifndef GL_ARB_texture_float +GLAD_API_CALL int GLAD_GL_ARB_texture_filter_minmax; #define GL_ARB_texture_float 1 -GLAPI int GLAD_GL_ARB_texture_float; -#endif -#ifndef GL_ARB_texture_gather +GLAD_API_CALL int GLAD_GL_ARB_texture_float; #define GL_ARB_texture_gather 1 -GLAPI int GLAD_GL_ARB_texture_gather; -#endif -#ifndef GL_ARB_texture_mirror_clamp_to_edge +GLAD_API_CALL int GLAD_GL_ARB_texture_gather; #define GL_ARB_texture_mirror_clamp_to_edge 1 -GLAPI int GLAD_GL_ARB_texture_mirror_clamp_to_edge; -#endif -#ifndef GL_ARB_texture_mirrored_repeat +GLAD_API_CALL int GLAD_GL_ARB_texture_mirror_clamp_to_edge; #define GL_ARB_texture_mirrored_repeat 1 -GLAPI int GLAD_GL_ARB_texture_mirrored_repeat; -#endif -#ifndef GL_ARB_texture_multisample +GLAD_API_CALL int GLAD_GL_ARB_texture_mirrored_repeat; #define GL_ARB_texture_multisample 1 -GLAPI int GLAD_GL_ARB_texture_multisample; -#endif -#ifndef GL_ARB_texture_non_power_of_two +GLAD_API_CALL int GLAD_GL_ARB_texture_multisample; #define GL_ARB_texture_non_power_of_two 1 -GLAPI int GLAD_GL_ARB_texture_non_power_of_two; -#endif -#ifndef GL_ARB_texture_query_levels +GLAD_API_CALL int GLAD_GL_ARB_texture_non_power_of_two; #define GL_ARB_texture_query_levels 1 -GLAPI int GLAD_GL_ARB_texture_query_levels; -#endif -#ifndef GL_ARB_texture_query_lod +GLAD_API_CALL int GLAD_GL_ARB_texture_query_levels; #define GL_ARB_texture_query_lod 1 -GLAPI int GLAD_GL_ARB_texture_query_lod; -#endif -#ifndef GL_ARB_texture_rectangle +GLAD_API_CALL int GLAD_GL_ARB_texture_query_lod; #define GL_ARB_texture_rectangle 1 -GLAPI int GLAD_GL_ARB_texture_rectangle; -#endif -#ifndef GL_ARB_texture_rg +GLAD_API_CALL int GLAD_GL_ARB_texture_rectangle; #define GL_ARB_texture_rg 1 -GLAPI int GLAD_GL_ARB_texture_rg; -#endif -#ifndef GL_ARB_texture_rgb10_a2ui +GLAD_API_CALL int GLAD_GL_ARB_texture_rg; #define GL_ARB_texture_rgb10_a2ui 1 -GLAPI int GLAD_GL_ARB_texture_rgb10_a2ui; -#endif -#ifndef GL_ARB_texture_stencil8 +GLAD_API_CALL int GLAD_GL_ARB_texture_rgb10_a2ui; #define GL_ARB_texture_stencil8 1 -GLAPI int GLAD_GL_ARB_texture_stencil8; -#endif -#ifndef GL_ARB_texture_storage +GLAD_API_CALL int GLAD_GL_ARB_texture_stencil8; #define GL_ARB_texture_storage 1 -GLAPI int GLAD_GL_ARB_texture_storage; -#endif -#ifndef GL_ARB_texture_storage_multisample +GLAD_API_CALL int GLAD_GL_ARB_texture_storage; #define GL_ARB_texture_storage_multisample 1 -GLAPI int GLAD_GL_ARB_texture_storage_multisample; -#endif -#ifndef GL_ARB_texture_swizzle +GLAD_API_CALL int GLAD_GL_ARB_texture_storage_multisample; #define GL_ARB_texture_swizzle 1 -GLAPI int GLAD_GL_ARB_texture_swizzle; -#endif -#ifndef GL_ARB_texture_view +GLAD_API_CALL int GLAD_GL_ARB_texture_swizzle; #define GL_ARB_texture_view 1 -GLAPI int GLAD_GL_ARB_texture_view; -#endif -#ifndef GL_ARB_timer_query +GLAD_API_CALL int GLAD_GL_ARB_texture_view; #define GL_ARB_timer_query 1 -GLAPI int GLAD_GL_ARB_timer_query; -#endif -#ifndef GL_ARB_transform_feedback2 +GLAD_API_CALL int GLAD_GL_ARB_timer_query; #define GL_ARB_transform_feedback2 1 -GLAPI int GLAD_GL_ARB_transform_feedback2; -#endif -#ifndef GL_ARB_transform_feedback3 +GLAD_API_CALL int GLAD_GL_ARB_transform_feedback2; #define GL_ARB_transform_feedback3 1 -GLAPI int GLAD_GL_ARB_transform_feedback3; -#endif -#ifndef GL_ARB_transform_feedback_instanced +GLAD_API_CALL int GLAD_GL_ARB_transform_feedback3; #define GL_ARB_transform_feedback_instanced 1 -GLAPI int GLAD_GL_ARB_transform_feedback_instanced; -#endif -#ifndef GL_ARB_transform_feedback_overflow_query +GLAD_API_CALL int GLAD_GL_ARB_transform_feedback_instanced; #define GL_ARB_transform_feedback_overflow_query 1 -GLAPI int GLAD_GL_ARB_transform_feedback_overflow_query; -#endif -#ifndef GL_ARB_transpose_matrix +GLAD_API_CALL int GLAD_GL_ARB_transform_feedback_overflow_query; #define GL_ARB_transpose_matrix 1 -GLAPI int GLAD_GL_ARB_transpose_matrix; -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC)(const GLfloat *m); -GLAPI PFNGLLOADTRANSPOSEMATRIXFARBPROC glad_glLoadTransposeMatrixfARB; -#define glLoadTransposeMatrixfARB glad_glLoadTransposeMatrixfARB -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC)(const GLdouble *m); -GLAPI PFNGLLOADTRANSPOSEMATRIXDARBPROC glad_glLoadTransposeMatrixdARB; -#define glLoadTransposeMatrixdARB glad_glLoadTransposeMatrixdARB -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC)(const GLfloat *m); -GLAPI PFNGLMULTTRANSPOSEMATRIXFARBPROC glad_glMultTransposeMatrixfARB; -#define glMultTransposeMatrixfARB glad_glMultTransposeMatrixfARB -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC)(const GLdouble *m); -GLAPI PFNGLMULTTRANSPOSEMATRIXDARBPROC glad_glMultTransposeMatrixdARB; -#define glMultTransposeMatrixdARB glad_glMultTransposeMatrixdARB -#endif -#ifndef GL_ARB_uniform_buffer_object +GLAD_API_CALL int GLAD_GL_ARB_transpose_matrix; #define GL_ARB_uniform_buffer_object 1 -GLAPI int GLAD_GL_ARB_uniform_buffer_object; -#endif -#ifndef GL_ARB_vertex_array_bgra +GLAD_API_CALL int GLAD_GL_ARB_uniform_buffer_object; #define GL_ARB_vertex_array_bgra 1 -GLAPI int GLAD_GL_ARB_vertex_array_bgra; -#endif -#ifndef GL_ARB_vertex_array_object +GLAD_API_CALL int GLAD_GL_ARB_vertex_array_bgra; #define GL_ARB_vertex_array_object 1 -GLAPI int GLAD_GL_ARB_vertex_array_object; -#endif -#ifndef GL_ARB_vertex_attrib_64bit +GLAD_API_CALL int GLAD_GL_ARB_vertex_array_object; #define GL_ARB_vertex_attrib_64bit 1 -GLAPI int GLAD_GL_ARB_vertex_attrib_64bit; -#endif -#ifndef GL_ARB_vertex_attrib_binding +GLAD_API_CALL int GLAD_GL_ARB_vertex_attrib_64bit; #define GL_ARB_vertex_attrib_binding 1 -GLAPI int GLAD_GL_ARB_vertex_attrib_binding; -#endif -#ifndef GL_ARB_vertex_blend +GLAD_API_CALL int GLAD_GL_ARB_vertex_attrib_binding; #define GL_ARB_vertex_blend 1 -GLAPI int GLAD_GL_ARB_vertex_blend; -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC)(GLint size, const GLbyte *weights); -GLAPI PFNGLWEIGHTBVARBPROC glad_glWeightbvARB; -#define glWeightbvARB glad_glWeightbvARB -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC)(GLint size, const GLshort *weights); -GLAPI PFNGLWEIGHTSVARBPROC glad_glWeightsvARB; -#define glWeightsvARB glad_glWeightsvARB -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC)(GLint size, const GLint *weights); -GLAPI PFNGLWEIGHTIVARBPROC glad_glWeightivARB; -#define glWeightivARB glad_glWeightivARB -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC)(GLint size, const GLfloat *weights); -GLAPI PFNGLWEIGHTFVARBPROC glad_glWeightfvARB; -#define glWeightfvARB glad_glWeightfvARB -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC)(GLint size, const GLdouble *weights); -GLAPI PFNGLWEIGHTDVARBPROC glad_glWeightdvARB; -#define glWeightdvARB glad_glWeightdvARB -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC)(GLint size, const GLubyte *weights); -GLAPI PFNGLWEIGHTUBVARBPROC glad_glWeightubvARB; -#define glWeightubvARB glad_glWeightubvARB -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC)(GLint size, const GLushort *weights); -GLAPI PFNGLWEIGHTUSVARBPROC glad_glWeightusvARB; -#define glWeightusvARB glad_glWeightusvARB -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC)(GLint size, const GLuint *weights); -GLAPI PFNGLWEIGHTUIVARBPROC glad_glWeightuivARB; -#define glWeightuivARB glad_glWeightuivARB -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLWEIGHTPOINTERARBPROC glad_glWeightPointerARB; -#define glWeightPointerARB glad_glWeightPointerARB -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC)(GLint count); -GLAPI PFNGLVERTEXBLENDARBPROC glad_glVertexBlendARB; -#define glVertexBlendARB glad_glVertexBlendARB -#endif -#ifndef GL_ARB_vertex_buffer_object +GLAD_API_CALL int GLAD_GL_ARB_vertex_blend; #define GL_ARB_vertex_buffer_object 1 -GLAPI int GLAD_GL_ARB_vertex_buffer_object; -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); -GLAPI PFNGLBINDBUFFERARBPROC glad_glBindBufferARB; -#define glBindBufferARB glad_glBindBufferARB -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint *buffers); -GLAPI PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB; -#define glDeleteBuffersARB glad_glDeleteBuffersARB -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint *buffers); -GLAPI PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB; -#define glGenBuffersARB glad_glGenBuffersARB -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC)(GLuint buffer); -GLAPI PFNGLISBUFFERARBPROC glad_glIsBufferARB; -#define glIsBufferARB glad_glIsBufferARB -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); -GLAPI PFNGLBUFFERDATAARBPROC glad_glBufferDataARB; -#define glBufferDataARB glad_glBufferDataARB -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); -GLAPI PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB; -#define glBufferSubDataARB glad_glBufferSubDataARB -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); -GLAPI PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB; -#define glGetBufferSubDataARB glad_glGetBufferSubDataARB -typedef void * (APIENTRYP PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); -GLAPI PFNGLMAPBUFFERARBPROC glad_glMapBufferARB; -#define glMapBufferARB glad_glMapBufferARB -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC)(GLenum target); -GLAPI PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB; -#define glUnmapBufferARB glad_glUnmapBufferARB -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB; -#define glGetBufferParameterivARB glad_glGetBufferParameterivARB -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, void **params); -GLAPI PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB; -#define glGetBufferPointervARB glad_glGetBufferPointervARB -#endif -#ifndef GL_ARB_vertex_program +GLAD_API_CALL int GLAD_GL_ARB_vertex_buffer_object; #define GL_ARB_vertex_program 1 -GLAPI int GLAD_GL_ARB_vertex_program; -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB; -#define glVertexAttrib1dARB glad_glVertexAttrib1dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB; -#define glVertexAttrib1dvARB glad_glVertexAttrib1dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); -GLAPI PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB; -#define glVertexAttrib1fARB glad_glVertexAttrib1fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB; -#define glVertexAttrib1fvARB glad_glVertexAttrib1fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); -GLAPI PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB; -#define glVertexAttrib1sARB glad_glVertexAttrib1sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB; -#define glVertexAttrib1svARB glad_glVertexAttrib1svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB; -#define glVertexAttrib2dARB glad_glVertexAttrib2dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB; -#define glVertexAttrib2dvARB glad_glVertexAttrib2dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); -GLAPI PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB; -#define glVertexAttrib2fARB glad_glVertexAttrib2fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB; -#define glVertexAttrib2fvARB glad_glVertexAttrib2fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); -GLAPI PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB; -#define glVertexAttrib2sARB glad_glVertexAttrib2sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB; -#define glVertexAttrib2svARB glad_glVertexAttrib2svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB; -#define glVertexAttrib3dARB glad_glVertexAttrib3dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB; -#define glVertexAttrib3dvARB glad_glVertexAttrib3dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB; -#define glVertexAttrib3fARB glad_glVertexAttrib3fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB; -#define glVertexAttrib3fvARB glad_glVertexAttrib3fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB; -#define glVertexAttrib3sARB glad_glVertexAttrib3sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB; -#define glVertexAttrib3svARB glad_glVertexAttrib3svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB; -#define glVertexAttrib4NbvARB glad_glVertexAttrib4NbvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB; -#define glVertexAttrib4NivARB glad_glVertexAttrib4NivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB; -#define glVertexAttrib4NsvARB glad_glVertexAttrib4NsvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB; -#define glVertexAttrib4NubARB glad_glVertexAttrib4NubARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB; -#define glVertexAttrib4NubvARB glad_glVertexAttrib4NubvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB; -#define glVertexAttrib4NuivARB glad_glVertexAttrib4NuivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB; -#define glVertexAttrib4NusvARB glad_glVertexAttrib4NusvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB; -#define glVertexAttrib4bvARB glad_glVertexAttrib4bvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB; -#define glVertexAttrib4dARB glad_glVertexAttrib4dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB; -#define glVertexAttrib4dvARB glad_glVertexAttrib4dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB; -#define glVertexAttrib4fARB glad_glVertexAttrib4fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB; -#define glVertexAttrib4fvARB glad_glVertexAttrib4fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB; -#define glVertexAttrib4ivARB glad_glVertexAttrib4ivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB; -#define glVertexAttrib4sARB glad_glVertexAttrib4sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB; -#define glVertexAttrib4svARB glad_glVertexAttrib4svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB; -#define glVertexAttrib4ubvARB glad_glVertexAttrib4ubvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB; -#define glVertexAttrib4uivARB glad_glVertexAttrib4uivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB; -#define glVertexAttrib4usvARB glad_glVertexAttrib4usvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB; -#define glVertexAttribPointerARB glad_glVertexAttribPointerARB -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); -GLAPI PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB; -#define glEnableVertexAttribArrayARB glad_glEnableVertexAttribArrayARB -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); -GLAPI PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB; -#define glDisableVertexAttribArrayARB glad_glDisableVertexAttribArrayARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble *params); -GLAPI PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB; -#define glGetVertexAttribdvARB glad_glGetVertexAttribdvARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat *params); -GLAPI PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB; -#define glGetVertexAttribfvARB glad_glGetVertexAttribfvARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB; -#define glGetVertexAttribivARB glad_glGetVertexAttribivARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, void **pointer); -GLAPI PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB; -#define glGetVertexAttribPointervARB glad_glGetVertexAttribPointervARB -#endif -#ifndef GL_ARB_vertex_shader +GLAD_API_CALL int GLAD_GL_ARB_vertex_program; #define GL_ARB_vertex_shader 1 -GLAPI int GLAD_GL_ARB_vertex_shader; -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, const GLcharARB *name); -GLAPI PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB; -#define glBindAttribLocationARB glad_glBindAttribLocationARB -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB; -#define glGetActiveAttribARB glad_glGetActiveAttribARB -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name); -GLAPI PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB; -#define glGetAttribLocationARB glad_glGetAttribLocationARB -#endif -#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +GLAD_API_CALL int GLAD_GL_ARB_vertex_shader; #define GL_ARB_vertex_type_10f_11f_11f_rev 1 -GLAPI int GLAD_GL_ARB_vertex_type_10f_11f_11f_rev; -#endif -#ifndef GL_ARB_vertex_type_2_10_10_10_rev +GLAD_API_CALL int GLAD_GL_ARB_vertex_type_10f_11f_11f_rev; #define GL_ARB_vertex_type_2_10_10_10_rev 1 -GLAPI int GLAD_GL_ARB_vertex_type_2_10_10_10_rev; -#endif -#ifndef GL_ARB_viewport_array +GLAD_API_CALL int GLAD_GL_ARB_vertex_type_2_10_10_10_rev; #define GL_ARB_viewport_array 1 -GLAPI int GLAD_GL_ARB_viewport_array; -#endif -#ifndef GL_ARB_window_pos +GLAD_API_CALL int GLAD_GL_ARB_viewport_array; #define GL_ARB_window_pos 1 -GLAPI int GLAD_GL_ARB_window_pos; -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC)(GLdouble x, GLdouble y); -GLAPI PFNGLWINDOWPOS2DARBPROC glad_glWindowPos2dARB; -#define glWindowPos2dARB glad_glWindowPos2dARB -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC)(const GLdouble *v); -GLAPI PFNGLWINDOWPOS2DVARBPROC glad_glWindowPos2dvARB; -#define glWindowPos2dvARB glad_glWindowPos2dvARB -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC)(GLfloat x, GLfloat y); -GLAPI PFNGLWINDOWPOS2FARBPROC glad_glWindowPos2fARB; -#define glWindowPos2fARB glad_glWindowPos2fARB -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC)(const GLfloat *v); -GLAPI PFNGLWINDOWPOS2FVARBPROC glad_glWindowPos2fvARB; -#define glWindowPos2fvARB glad_glWindowPos2fvARB -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC)(GLint x, GLint y); -GLAPI PFNGLWINDOWPOS2IARBPROC glad_glWindowPos2iARB; -#define glWindowPos2iARB glad_glWindowPos2iARB -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC)(const GLint *v); -GLAPI PFNGLWINDOWPOS2IVARBPROC glad_glWindowPos2ivARB; -#define glWindowPos2ivARB glad_glWindowPos2ivARB -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC)(GLshort x, GLshort y); -GLAPI PFNGLWINDOWPOS2SARBPROC glad_glWindowPos2sARB; -#define glWindowPos2sARB glad_glWindowPos2sARB -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC)(const GLshort *v); -GLAPI PFNGLWINDOWPOS2SVARBPROC glad_glWindowPos2svARB; -#define glWindowPos2svARB glad_glWindowPos2svARB -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC)(GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLWINDOWPOS3DARBPROC glad_glWindowPos3dARB; -#define glWindowPos3dARB glad_glWindowPos3dARB -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC)(const GLdouble *v); -GLAPI PFNGLWINDOWPOS3DVARBPROC glad_glWindowPos3dvARB; -#define glWindowPos3dvARB glad_glWindowPos3dvARB -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLWINDOWPOS3FARBPROC glad_glWindowPos3fARB; -#define glWindowPos3fARB glad_glWindowPos3fARB -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC)(const GLfloat *v); -GLAPI PFNGLWINDOWPOS3FVARBPROC glad_glWindowPos3fvARB; -#define glWindowPos3fvARB glad_glWindowPos3fvARB -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC)(GLint x, GLint y, GLint z); -GLAPI PFNGLWINDOWPOS3IARBPROC glad_glWindowPos3iARB; -#define glWindowPos3iARB glad_glWindowPos3iARB -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC)(const GLint *v); -GLAPI PFNGLWINDOWPOS3IVARBPROC glad_glWindowPos3ivARB; -#define glWindowPos3ivARB glad_glWindowPos3ivARB -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC)(GLshort x, GLshort y, GLshort z); -GLAPI PFNGLWINDOWPOS3SARBPROC glad_glWindowPos3sARB; -#define glWindowPos3sARB glad_glWindowPos3sARB -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC)(const GLshort *v); -GLAPI PFNGLWINDOWPOS3SVARBPROC glad_glWindowPos3svARB; -#define glWindowPos3svARB glad_glWindowPos3svARB -#endif -#ifndef GL_ATI_draw_buffers +GLAD_API_CALL int GLAD_GL_ARB_window_pos; #define GL_ATI_draw_buffers 1 -GLAPI int GLAD_GL_ATI_draw_buffers; -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC)(GLsizei n, const GLenum *bufs); -GLAPI PFNGLDRAWBUFFERSATIPROC glad_glDrawBuffersATI; -#define glDrawBuffersATI glad_glDrawBuffersATI -#endif -#ifndef GL_ATI_element_array +GLAD_API_CALL int GLAD_GL_ATI_draw_buffers; #define GL_ATI_element_array 1 -GLAPI int GLAD_GL_ATI_element_array; -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void *pointer); -GLAPI PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI; -#define glElementPointerATI glad_glElementPointerATI -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); -GLAPI PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI; -#define glDrawElementArrayATI glad_glDrawElementArrayATI -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count); -GLAPI PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI; -#define glDrawRangeElementArrayATI glad_glDrawRangeElementArrayATI -#endif -#ifndef GL_ATI_envmap_bumpmap +GLAD_API_CALL int GLAD_GL_ATI_element_array; #define GL_ATI_envmap_bumpmap 1 -GLAPI int GLAD_GL_ATI_envmap_bumpmap; -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC)(GLenum pname, const GLint *param); -GLAPI PFNGLTEXBUMPPARAMETERIVATIPROC glad_glTexBumpParameterivATI; -#define glTexBumpParameterivATI glad_glTexBumpParameterivATI -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC)(GLenum pname, const GLfloat *param); -GLAPI PFNGLTEXBUMPPARAMETERFVATIPROC glad_glTexBumpParameterfvATI; -#define glTexBumpParameterfvATI glad_glTexBumpParameterfvATI -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC)(GLenum pname, GLint *param); -GLAPI PFNGLGETTEXBUMPPARAMETERIVATIPROC glad_glGetTexBumpParameterivATI; -#define glGetTexBumpParameterivATI glad_glGetTexBumpParameterivATI -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC)(GLenum pname, GLfloat *param); -GLAPI PFNGLGETTEXBUMPPARAMETERFVATIPROC glad_glGetTexBumpParameterfvATI; -#define glGetTexBumpParameterfvATI glad_glGetTexBumpParameterfvATI -#endif -#ifndef GL_ATI_fragment_shader +GLAD_API_CALL int GLAD_GL_ATI_envmap_bumpmap; #define GL_ATI_fragment_shader 1 -GLAPI int GLAD_GL_ATI_fragment_shader; -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); -GLAPI PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI; -#define glGenFragmentShadersATI glad_glGenFragmentShadersATI -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); -GLAPI PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI; -#define glBindFragmentShaderATI glad_glBindFragmentShaderATI -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); -GLAPI PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI; -#define glDeleteFragmentShaderATI glad_glDeleteFragmentShaderATI -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC)(void); -GLAPI PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI; -#define glBeginFragmentShaderATI glad_glBeginFragmentShaderATI -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC)(void); -GLAPI PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI; -#define glEndFragmentShaderATI glad_glEndFragmentShaderATI -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); -GLAPI PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI; -#define glPassTexCoordATI glad_glPassTexCoordATI -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); -GLAPI PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI; -#define glSampleMapATI glad_glSampleMapATI -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI; -#define glColorFragmentOp1ATI glad_glColorFragmentOp1ATI -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI; -#define glColorFragmentOp2ATI glad_glColorFragmentOp2ATI -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI; -#define glColorFragmentOp3ATI glad_glColorFragmentOp3ATI -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI; -#define glAlphaFragmentOp1ATI glad_glAlphaFragmentOp1ATI -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI; -#define glAlphaFragmentOp2ATI glad_glAlphaFragmentOp2ATI -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI; -#define glAlphaFragmentOp3ATI glad_glAlphaFragmentOp3ATI -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat *value); -GLAPI PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI; -#define glSetFragmentShaderConstantATI glad_glSetFragmentShaderConstantATI -#endif -#ifndef GL_ATI_map_object_buffer +GLAD_API_CALL int GLAD_GL_ATI_fragment_shader; #define GL_ATI_map_object_buffer 1 -GLAPI int GLAD_GL_ATI_map_object_buffer; -typedef void * (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC)(GLuint buffer); -GLAPI PFNGLMAPOBJECTBUFFERATIPROC glad_glMapObjectBufferATI; -#define glMapObjectBufferATI glad_glMapObjectBufferATI -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC)(GLuint buffer); -GLAPI PFNGLUNMAPOBJECTBUFFERATIPROC glad_glUnmapObjectBufferATI; -#define glUnmapObjectBufferATI glad_glUnmapObjectBufferATI -#endif -#ifndef GL_ATI_meminfo +GLAD_API_CALL int GLAD_GL_ATI_map_object_buffer; #define GL_ATI_meminfo 1 -GLAPI int GLAD_GL_ATI_meminfo; -#endif -#ifndef GL_ATI_pixel_format_float +GLAD_API_CALL int GLAD_GL_ATI_meminfo; #define GL_ATI_pixel_format_float 1 -GLAPI int GLAD_GL_ATI_pixel_format_float; -#endif -#ifndef GL_ATI_pn_triangles +GLAD_API_CALL int GLAD_GL_ATI_pixel_format_float; #define GL_ATI_pn_triangles 1 -GLAPI int GLAD_GL_ATI_pn_triangles; -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPNTRIANGLESIATIPROC glad_glPNTrianglesiATI; -#define glPNTrianglesiATI glad_glPNTrianglesiATI -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPNTRIANGLESFATIPROC glad_glPNTrianglesfATI; -#define glPNTrianglesfATI glad_glPNTrianglesfATI -#endif -#ifndef GL_ATI_separate_stencil +GLAD_API_CALL int GLAD_GL_ATI_pn_triangles; #define GL_ATI_separate_stencil 1 -GLAPI int GLAD_GL_ATI_separate_stencil; -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI PFNGLSTENCILOPSEPARATEATIPROC glad_glStencilOpSeparateATI; -#define glStencilOpSeparateATI glad_glStencilOpSeparateATI -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCSEPARATEATIPROC glad_glStencilFuncSeparateATI; -#define glStencilFuncSeparateATI glad_glStencilFuncSeparateATI -#endif -#ifndef GL_ATI_text_fragment_shader +GLAD_API_CALL int GLAD_GL_ATI_separate_stencil; #define GL_ATI_text_fragment_shader 1 -GLAPI int GLAD_GL_ATI_text_fragment_shader; -#endif -#ifndef GL_ATI_texture_env_combine3 +GLAD_API_CALL int GLAD_GL_ATI_text_fragment_shader; #define GL_ATI_texture_env_combine3 1 -GLAPI int GLAD_GL_ATI_texture_env_combine3; -#endif -#ifndef GL_ATI_texture_float +GLAD_API_CALL int GLAD_GL_ATI_texture_env_combine3; #define GL_ATI_texture_float 1 -GLAPI int GLAD_GL_ATI_texture_float; -#endif -#ifndef GL_ATI_texture_mirror_once +GLAD_API_CALL int GLAD_GL_ATI_texture_float; #define GL_ATI_texture_mirror_once 1 -GLAPI int GLAD_GL_ATI_texture_mirror_once; -#endif -#ifndef GL_ATI_vertex_array_object +GLAD_API_CALL int GLAD_GL_ATI_texture_mirror_once; #define GL_ATI_vertex_array_object 1 -GLAPI int GLAD_GL_ATI_vertex_array_object; -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void *pointer, GLenum usage); -GLAPI PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI; -#define glNewObjectBufferATI glad_glNewObjectBufferATI -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); -GLAPI PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI; -#define glIsObjectBufferATI glad_glIsObjectBufferATI -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); -GLAPI PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI; -#define glUpdateObjectBufferATI glad_glUpdateObjectBufferATI -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, GLfloat *params); -GLAPI PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI; -#define glGetObjectBufferfvATI glad_glGetObjectBufferfvATI -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, GLint *params); -GLAPI PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI; -#define glGetObjectBufferivATI glad_glGetObjectBufferivATI -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); -GLAPI PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI; -#define glFreeObjectBufferATI glad_glFreeObjectBufferATI -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI; -#define glArrayObjectATI glad_glArrayObjectATI -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, GLfloat *params); -GLAPI PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI; -#define glGetArrayObjectfvATI glad_glGetArrayObjectfvATI -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint *params); -GLAPI PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI; -#define glGetArrayObjectivATI glad_glGetArrayObjectivATI -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI; -#define glVariantArrayObjectATI glad_glVariantArrayObjectATI -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, GLfloat *params); -GLAPI PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI; -#define glGetVariantArrayObjectfvATI glad_glGetVariantArrayObjectfvATI -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI; -#define glGetVariantArrayObjectivATI glad_glGetVariantArrayObjectivATI -#endif -#ifndef GL_ATI_vertex_attrib_array_object +GLAD_API_CALL int GLAD_GL_ATI_vertex_array_object; #define GL_ATI_vertex_attrib_array_object 1 -GLAPI int GLAD_GL_ATI_vertex_attrib_array_object; -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glad_glVertexAttribArrayObjectATI; -#define glVertexAttribArrayObjectATI glad_glVertexAttribArrayObjectATI -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)(GLuint index, GLenum pname, GLfloat *params); -GLAPI PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC glad_glGetVertexAttribArrayObjectfvATI; -#define glGetVertexAttribArrayObjectfvATI glad_glGetVertexAttribArrayObjectfvATI -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC glad_glGetVertexAttribArrayObjectivATI; -#define glGetVertexAttribArrayObjectivATI glad_glGetVertexAttribArrayObjectivATI -#endif -#ifndef GL_ATI_vertex_streams +GLAD_API_CALL int GLAD_GL_ATI_vertex_attrib_array_object; #define GL_ATI_vertex_streams 1 -GLAPI int GLAD_GL_ATI_vertex_streams; -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC)(GLenum stream, GLshort x); -GLAPI PFNGLVERTEXSTREAM1SATIPROC glad_glVertexStream1sATI; -#define glVertexStream1sATI glad_glVertexStream1sATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC)(GLenum stream, const GLshort *coords); -GLAPI PFNGLVERTEXSTREAM1SVATIPROC glad_glVertexStream1svATI; -#define glVertexStream1svATI glad_glVertexStream1svATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC)(GLenum stream, GLint x); -GLAPI PFNGLVERTEXSTREAM1IATIPROC glad_glVertexStream1iATI; -#define glVertexStream1iATI glad_glVertexStream1iATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC)(GLenum stream, const GLint *coords); -GLAPI PFNGLVERTEXSTREAM1IVATIPROC glad_glVertexStream1ivATI; -#define glVertexStream1ivATI glad_glVertexStream1ivATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC)(GLenum stream, GLfloat x); -GLAPI PFNGLVERTEXSTREAM1FATIPROC glad_glVertexStream1fATI; -#define glVertexStream1fATI glad_glVertexStream1fATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC)(GLenum stream, const GLfloat *coords); -GLAPI PFNGLVERTEXSTREAM1FVATIPROC glad_glVertexStream1fvATI; -#define glVertexStream1fvATI glad_glVertexStream1fvATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC)(GLenum stream, GLdouble x); -GLAPI PFNGLVERTEXSTREAM1DATIPROC glad_glVertexStream1dATI; -#define glVertexStream1dATI glad_glVertexStream1dATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC)(GLenum stream, const GLdouble *coords); -GLAPI PFNGLVERTEXSTREAM1DVATIPROC glad_glVertexStream1dvATI; -#define glVertexStream1dvATI glad_glVertexStream1dvATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC)(GLenum stream, GLshort x, GLshort y); -GLAPI PFNGLVERTEXSTREAM2SATIPROC glad_glVertexStream2sATI; -#define glVertexStream2sATI glad_glVertexStream2sATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC)(GLenum stream, const GLshort *coords); -GLAPI PFNGLVERTEXSTREAM2SVATIPROC glad_glVertexStream2svATI; -#define glVertexStream2svATI glad_glVertexStream2svATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC)(GLenum stream, GLint x, GLint y); -GLAPI PFNGLVERTEXSTREAM2IATIPROC glad_glVertexStream2iATI; -#define glVertexStream2iATI glad_glVertexStream2iATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC)(GLenum stream, const GLint *coords); -GLAPI PFNGLVERTEXSTREAM2IVATIPROC glad_glVertexStream2ivATI; -#define glVertexStream2ivATI glad_glVertexStream2ivATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC)(GLenum stream, GLfloat x, GLfloat y); -GLAPI PFNGLVERTEXSTREAM2FATIPROC glad_glVertexStream2fATI; -#define glVertexStream2fATI glad_glVertexStream2fATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC)(GLenum stream, const GLfloat *coords); -GLAPI PFNGLVERTEXSTREAM2FVATIPROC glad_glVertexStream2fvATI; -#define glVertexStream2fvATI glad_glVertexStream2fvATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC)(GLenum stream, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXSTREAM2DATIPROC glad_glVertexStream2dATI; -#define glVertexStream2dATI glad_glVertexStream2dATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC)(GLenum stream, const GLdouble *coords); -GLAPI PFNGLVERTEXSTREAM2DVATIPROC glad_glVertexStream2dvATI; -#define glVertexStream2dvATI glad_glVertexStream2dvATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEXSTREAM3SATIPROC glad_glVertexStream3sATI; -#define glVertexStream3sATI glad_glVertexStream3sATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC)(GLenum stream, const GLshort *coords); -GLAPI PFNGLVERTEXSTREAM3SVATIPROC glad_glVertexStream3svATI; -#define glVertexStream3svATI glad_glVertexStream3svATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC)(GLenum stream, GLint x, GLint y, GLint z); -GLAPI PFNGLVERTEXSTREAM3IATIPROC glad_glVertexStream3iATI; -#define glVertexStream3iATI glad_glVertexStream3iATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC)(GLenum stream, const GLint *coords); -GLAPI PFNGLVERTEXSTREAM3IVATIPROC glad_glVertexStream3ivATI; -#define glVertexStream3ivATI glad_glVertexStream3ivATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEXSTREAM3FATIPROC glad_glVertexStream3fATI; -#define glVertexStream3fATI glad_glVertexStream3fATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC)(GLenum stream, const GLfloat *coords); -GLAPI PFNGLVERTEXSTREAM3FVATIPROC glad_glVertexStream3fvATI; -#define glVertexStream3fvATI glad_glVertexStream3fvATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXSTREAM3DATIPROC glad_glVertexStream3dATI; -#define glVertexStream3dATI glad_glVertexStream3dATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC)(GLenum stream, const GLdouble *coords); -GLAPI PFNGLVERTEXSTREAM3DVATIPROC glad_glVertexStream3dvATI; -#define glVertexStream3dvATI glad_glVertexStream3dvATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEXSTREAM4SATIPROC glad_glVertexStream4sATI; -#define glVertexStream4sATI glad_glVertexStream4sATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC)(GLenum stream, const GLshort *coords); -GLAPI PFNGLVERTEXSTREAM4SVATIPROC glad_glVertexStream4svATI; -#define glVertexStream4svATI glad_glVertexStream4svATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC)(GLenum stream, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLVERTEXSTREAM4IATIPROC glad_glVertexStream4iATI; -#define glVertexStream4iATI glad_glVertexStream4iATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC)(GLenum stream, const GLint *coords); -GLAPI PFNGLVERTEXSTREAM4IVATIPROC glad_glVertexStream4ivATI; -#define glVertexStream4ivATI glad_glVertexStream4ivATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEXSTREAM4FATIPROC glad_glVertexStream4fATI; -#define glVertexStream4fATI glad_glVertexStream4fATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC)(GLenum stream, const GLfloat *coords); -GLAPI PFNGLVERTEXSTREAM4FVATIPROC glad_glVertexStream4fvATI; -#define glVertexStream4fvATI glad_glVertexStream4fvATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXSTREAM4DATIPROC glad_glVertexStream4dATI; -#define glVertexStream4dATI glad_glVertexStream4dATI -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC)(GLenum stream, const GLdouble *coords); -GLAPI PFNGLVERTEXSTREAM4DVATIPROC glad_glVertexStream4dvATI; -#define glVertexStream4dvATI glad_glVertexStream4dvATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC)(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI PFNGLNORMALSTREAM3BATIPROC glad_glNormalStream3bATI; -#define glNormalStream3bATI glad_glNormalStream3bATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC)(GLenum stream, const GLbyte *coords); -GLAPI PFNGLNORMALSTREAM3BVATIPROC glad_glNormalStream3bvATI; -#define glNormalStream3bvATI glad_glNormalStream3bvATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC)(GLenum stream, GLshort nx, GLshort ny, GLshort nz); -GLAPI PFNGLNORMALSTREAM3SATIPROC glad_glNormalStream3sATI; -#define glNormalStream3sATI glad_glNormalStream3sATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC)(GLenum stream, const GLshort *coords); -GLAPI PFNGLNORMALSTREAM3SVATIPROC glad_glNormalStream3svATI; -#define glNormalStream3svATI glad_glNormalStream3svATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC)(GLenum stream, GLint nx, GLint ny, GLint nz); -GLAPI PFNGLNORMALSTREAM3IATIPROC glad_glNormalStream3iATI; -#define glNormalStream3iATI glad_glNormalStream3iATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC)(GLenum stream, const GLint *coords); -GLAPI PFNGLNORMALSTREAM3IVATIPROC glad_glNormalStream3ivATI; -#define glNormalStream3ivATI glad_glNormalStream3ivATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC)(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI PFNGLNORMALSTREAM3FATIPROC glad_glNormalStream3fATI; -#define glNormalStream3fATI glad_glNormalStream3fATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC)(GLenum stream, const GLfloat *coords); -GLAPI PFNGLNORMALSTREAM3FVATIPROC glad_glNormalStream3fvATI; -#define glNormalStream3fvATI glad_glNormalStream3fvATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC)(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI PFNGLNORMALSTREAM3DATIPROC glad_glNormalStream3dATI; -#define glNormalStream3dATI glad_glNormalStream3dATI -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC)(GLenum stream, const GLdouble *coords); -GLAPI PFNGLNORMALSTREAM3DVATIPROC glad_glNormalStream3dvATI; -#define glNormalStream3dvATI glad_glNormalStream3dvATI -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)(GLenum stream); -GLAPI PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC glad_glClientActiveVertexStreamATI; -#define glClientActiveVertexStreamATI glad_glClientActiveVertexStreamATI -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC)(GLenum pname, GLint param); -GLAPI PFNGLVERTEXBLENDENVIATIPROC glad_glVertexBlendEnviATI; -#define glVertexBlendEnviATI glad_glVertexBlendEnviATI -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLVERTEXBLENDENVFATIPROC glad_glVertexBlendEnvfATI; -#define glVertexBlendEnvfATI glad_glVertexBlendEnvfATI -#endif -#ifndef GL_EXT_422_pixels +GLAD_API_CALL int GLAD_GL_ATI_vertex_streams; #define GL_EXT_422_pixels 1 -GLAPI int GLAD_GL_EXT_422_pixels; -#endif -#ifndef GL_EXT_EGL_image_storage +GLAD_API_CALL int GLAD_GL_EXT_422_pixels; #define GL_EXT_EGL_image_storage 1 -GLAPI int GLAD_GL_EXT_EGL_image_storage; -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC)(GLenum target, GLeglImageOES image, const GLint* attrib_list); -GLAPI PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC glad_glEGLImageTargetTexStorageEXT; -#define glEGLImageTargetTexStorageEXT glad_glEGLImageTargetTexStorageEXT -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC)(GLuint texture, GLeglImageOES image, const GLint* attrib_list); -GLAPI PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC glad_glEGLImageTargetTextureStorageEXT; -#define glEGLImageTargetTextureStorageEXT glad_glEGLImageTargetTextureStorageEXT -#endif -#ifndef GL_EXT_abgr +GLAD_API_CALL int GLAD_GL_EXT_EGL_image_storage; +#define GL_EXT_EGL_sync 1 +GLAD_API_CALL int GLAD_GL_EXT_EGL_sync; #define GL_EXT_abgr 1 -GLAPI int GLAD_GL_EXT_abgr; -#endif -#ifndef GL_EXT_bgra +GLAD_API_CALL int GLAD_GL_EXT_abgr; #define GL_EXT_bgra 1 -GLAPI int GLAD_GL_EXT_bgra; -#endif -#ifndef GL_EXT_bindable_uniform +GLAD_API_CALL int GLAD_GL_EXT_bgra; #define GL_EXT_bindable_uniform 1 -GLAPI int GLAD_GL_EXT_bindable_uniform; -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC)(GLuint program, GLint location, GLuint buffer); -GLAPI PFNGLUNIFORMBUFFEREXTPROC glad_glUniformBufferEXT; -#define glUniformBufferEXT glad_glUniformBufferEXT -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC)(GLuint program, GLint location); -GLAPI PFNGLGETUNIFORMBUFFERSIZEEXTPROC glad_glGetUniformBufferSizeEXT; -#define glGetUniformBufferSizeEXT glad_glGetUniformBufferSizeEXT -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC)(GLuint program, GLint location); -GLAPI PFNGLGETUNIFORMOFFSETEXTPROC glad_glGetUniformOffsetEXT; -#define glGetUniformOffsetEXT glad_glGetUniformOffsetEXT -#endif -#ifndef GL_EXT_blend_color +GLAD_API_CALL int GLAD_GL_EXT_bindable_uniform; #define GL_EXT_blend_color 1 -GLAPI int GLAD_GL_EXT_blend_color; -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT; -#define glBlendColorEXT glad_glBlendColorEXT -#endif -#ifndef GL_EXT_blend_equation_separate +GLAD_API_CALL int GLAD_GL_EXT_blend_color; #define GL_EXT_blend_equation_separate 1 -GLAPI int GLAD_GL_EXT_blend_equation_separate; -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT; -#define glBlendEquationSeparateEXT glad_glBlendEquationSeparateEXT -#endif -#ifndef GL_EXT_blend_func_separate +GLAD_API_CALL int GLAD_GL_EXT_blend_equation_separate; #define GL_EXT_blend_func_separate 1 -GLAPI int GLAD_GL_EXT_blend_func_separate; -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT; -#define glBlendFuncSeparateEXT glad_glBlendFuncSeparateEXT -#endif -#ifndef GL_EXT_blend_logic_op +GLAD_API_CALL int GLAD_GL_EXT_blend_func_separate; #define GL_EXT_blend_logic_op 1 -GLAPI int GLAD_GL_EXT_blend_logic_op; -#endif -#ifndef GL_EXT_blend_minmax +GLAD_API_CALL int GLAD_GL_EXT_blend_logic_op; #define GL_EXT_blend_minmax 1 -GLAPI int GLAD_GL_EXT_blend_minmax; -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC)(GLenum mode); -GLAPI PFNGLBLENDEQUATIONEXTPROC glad_glBlendEquationEXT; -#define glBlendEquationEXT glad_glBlendEquationEXT -#endif -#ifndef GL_EXT_blend_subtract +GLAD_API_CALL int GLAD_GL_EXT_blend_minmax; #define GL_EXT_blend_subtract 1 -GLAPI int GLAD_GL_EXT_blend_subtract; -#endif -#ifndef GL_EXT_clip_volume_hint +GLAD_API_CALL int GLAD_GL_EXT_blend_subtract; #define GL_EXT_clip_volume_hint 1 -GLAPI int GLAD_GL_EXT_clip_volume_hint; -#endif -#ifndef GL_EXT_cmyka +GLAD_API_CALL int GLAD_GL_EXT_clip_volume_hint; #define GL_EXT_cmyka 1 -GLAPI int GLAD_GL_EXT_cmyka; -#endif -#ifndef GL_EXT_color_subtable +GLAD_API_CALL int GLAD_GL_EXT_cmyka; #define GL_EXT_color_subtable 1 -GLAPI int GLAD_GL_EXT_color_subtable; -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCOLORSUBTABLEEXTPROC glad_glColorSubTableEXT; -#define glColorSubTableEXT glad_glColorSubTableEXT -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYCOLORSUBTABLEEXTPROC glad_glCopyColorSubTableEXT; -#define glCopyColorSubTableEXT glad_glCopyColorSubTableEXT -#endif -#ifndef GL_EXT_compiled_vertex_array +GLAD_API_CALL int GLAD_GL_EXT_color_subtable; #define GL_EXT_compiled_vertex_array 1 -GLAPI int GLAD_GL_EXT_compiled_vertex_array; -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC)(GLint first, GLsizei count); -GLAPI PFNGLLOCKARRAYSEXTPROC glad_glLockArraysEXT; -#define glLockArraysEXT glad_glLockArraysEXT -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC)(void); -GLAPI PFNGLUNLOCKARRAYSEXTPROC glad_glUnlockArraysEXT; -#define glUnlockArraysEXT glad_glUnlockArraysEXT -#endif -#ifndef GL_EXT_convolution +GLAD_API_CALL int GLAD_GL_EXT_compiled_vertex_array; #define GL_EXT_convolution 1 -GLAPI int GLAD_GL_EXT_convolution; -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI PFNGLCONVOLUTIONFILTER1DEXTPROC glad_glConvolutionFilter1DEXT; -#define glConvolutionFilter1DEXT glad_glConvolutionFilter1DEXT -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI PFNGLCONVOLUTIONFILTER2DEXTPROC glad_glConvolutionFilter2DEXT; -#define glConvolutionFilter2DEXT glad_glConvolutionFilter2DEXT -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat params); -GLAPI PFNGLCONVOLUTIONPARAMETERFEXTPROC glad_glConvolutionParameterfEXT; -#define glConvolutionParameterfEXT glad_glConvolutionParameterfEXT -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLCONVOLUTIONPARAMETERFVEXTPROC glad_glConvolutionParameterfvEXT; -#define glConvolutionParameterfvEXT glad_glConvolutionParameterfvEXT -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint params); -GLAPI PFNGLCONVOLUTIONPARAMETERIEXTPROC glad_glConvolutionParameteriEXT; -#define glConvolutionParameteriEXT glad_glConvolutionParameteriEXT -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLCONVOLUTIONPARAMETERIVEXTPROC glad_glConvolutionParameterivEXT; -#define glConvolutionParameterivEXT glad_glConvolutionParameterivEXT -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC glad_glCopyConvolutionFilter1DEXT; -#define glCopyConvolutionFilter1DEXT glad_glCopyConvolutionFilter1DEXT -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC glad_glCopyConvolutionFilter2DEXT; -#define glCopyConvolutionFilter2DEXT glad_glCopyConvolutionFilter2DEXT -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void *image); -GLAPI PFNGLGETCONVOLUTIONFILTEREXTPROC glad_glGetConvolutionFilterEXT; -#define glGetConvolutionFilterEXT glad_glGetConvolutionFilterEXT -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC glad_glGetConvolutionParameterfvEXT; -#define glGetConvolutionParameterfvEXT glad_glGetConvolutionParameterfvEXT -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC glad_glGetConvolutionParameterivEXT; -#define glGetConvolutionParameterivEXT glad_glGetConvolutionParameterivEXT -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI PFNGLGETSEPARABLEFILTEREXTPROC glad_glGetSeparableFilterEXT; -#define glGetSeparableFilterEXT glad_glGetSeparableFilterEXT -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -GLAPI PFNGLSEPARABLEFILTER2DEXTPROC glad_glSeparableFilter2DEXT; -#define glSeparableFilter2DEXT glad_glSeparableFilter2DEXT -#endif -#ifndef GL_EXT_coordinate_frame +GLAD_API_CALL int GLAD_GL_EXT_convolution; #define GL_EXT_coordinate_frame 1 -GLAPI int GLAD_GL_EXT_coordinate_frame; -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC)(GLbyte tx, GLbyte ty, GLbyte tz); -GLAPI PFNGLTANGENT3BEXTPROC glad_glTangent3bEXT; -#define glTangent3bEXT glad_glTangent3bEXT -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC)(const GLbyte *v); -GLAPI PFNGLTANGENT3BVEXTPROC glad_glTangent3bvEXT; -#define glTangent3bvEXT glad_glTangent3bvEXT -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC)(GLdouble tx, GLdouble ty, GLdouble tz); -GLAPI PFNGLTANGENT3DEXTPROC glad_glTangent3dEXT; -#define glTangent3dEXT glad_glTangent3dEXT -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC)(const GLdouble *v); -GLAPI PFNGLTANGENT3DVEXTPROC glad_glTangent3dvEXT; -#define glTangent3dvEXT glad_glTangent3dvEXT -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC)(GLfloat tx, GLfloat ty, GLfloat tz); -GLAPI PFNGLTANGENT3FEXTPROC glad_glTangent3fEXT; -#define glTangent3fEXT glad_glTangent3fEXT -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC)(const GLfloat *v); -GLAPI PFNGLTANGENT3FVEXTPROC glad_glTangent3fvEXT; -#define glTangent3fvEXT glad_glTangent3fvEXT -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC)(GLint tx, GLint ty, GLint tz); -GLAPI PFNGLTANGENT3IEXTPROC glad_glTangent3iEXT; -#define glTangent3iEXT glad_glTangent3iEXT -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC)(const GLint *v); -GLAPI PFNGLTANGENT3IVEXTPROC glad_glTangent3ivEXT; -#define glTangent3ivEXT glad_glTangent3ivEXT -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC)(GLshort tx, GLshort ty, GLshort tz); -GLAPI PFNGLTANGENT3SEXTPROC glad_glTangent3sEXT; -#define glTangent3sEXT glad_glTangent3sEXT -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC)(const GLshort *v); -GLAPI PFNGLTANGENT3SVEXTPROC glad_glTangent3svEXT; -#define glTangent3svEXT glad_glTangent3svEXT -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC)(GLbyte bx, GLbyte by, GLbyte bz); -GLAPI PFNGLBINORMAL3BEXTPROC glad_glBinormal3bEXT; -#define glBinormal3bEXT glad_glBinormal3bEXT -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC)(const GLbyte *v); -GLAPI PFNGLBINORMAL3BVEXTPROC glad_glBinormal3bvEXT; -#define glBinormal3bvEXT glad_glBinormal3bvEXT -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC)(GLdouble bx, GLdouble by, GLdouble bz); -GLAPI PFNGLBINORMAL3DEXTPROC glad_glBinormal3dEXT; -#define glBinormal3dEXT glad_glBinormal3dEXT -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC)(const GLdouble *v); -GLAPI PFNGLBINORMAL3DVEXTPROC glad_glBinormal3dvEXT; -#define glBinormal3dvEXT glad_glBinormal3dvEXT -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC)(GLfloat bx, GLfloat by, GLfloat bz); -GLAPI PFNGLBINORMAL3FEXTPROC glad_glBinormal3fEXT; -#define glBinormal3fEXT glad_glBinormal3fEXT -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC)(const GLfloat *v); -GLAPI PFNGLBINORMAL3FVEXTPROC glad_glBinormal3fvEXT; -#define glBinormal3fvEXT glad_glBinormal3fvEXT -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC)(GLint bx, GLint by, GLint bz); -GLAPI PFNGLBINORMAL3IEXTPROC glad_glBinormal3iEXT; -#define glBinormal3iEXT glad_glBinormal3iEXT -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC)(const GLint *v); -GLAPI PFNGLBINORMAL3IVEXTPROC glad_glBinormal3ivEXT; -#define glBinormal3ivEXT glad_glBinormal3ivEXT -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC)(GLshort bx, GLshort by, GLshort bz); -GLAPI PFNGLBINORMAL3SEXTPROC glad_glBinormal3sEXT; -#define glBinormal3sEXT glad_glBinormal3sEXT -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC)(const GLshort *v); -GLAPI PFNGLBINORMAL3SVEXTPROC glad_glBinormal3svEXT; -#define glBinormal3svEXT glad_glBinormal3svEXT -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC)(GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLTANGENTPOINTEREXTPROC glad_glTangentPointerEXT; -#define glTangentPointerEXT glad_glTangentPointerEXT -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLBINORMALPOINTEREXTPROC glad_glBinormalPointerEXT; -#define glBinormalPointerEXT glad_glBinormalPointerEXT -#endif -#ifndef GL_EXT_copy_texture +GLAD_API_CALL int GLAD_GL_EXT_coordinate_frame; #define GL_EXT_copy_texture 1 -GLAPI int GLAD_GL_EXT_copy_texture; -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI PFNGLCOPYTEXIMAGE1DEXTPROC glad_glCopyTexImage1DEXT; -#define glCopyTexImage1DEXT glad_glCopyTexImage1DEXT -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI PFNGLCOPYTEXIMAGE2DEXTPROC glad_glCopyTexImage2DEXT; -#define glCopyTexImage2DEXT glad_glCopyTexImage2DEXT -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYTEXSUBIMAGE1DEXTPROC glad_glCopyTexSubImage1DEXT; -#define glCopyTexSubImage1DEXT glad_glCopyTexSubImage1DEXT -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE2DEXTPROC glad_glCopyTexSubImage2DEXT; -#define glCopyTexSubImage2DEXT glad_glCopyTexSubImage2DEXT -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE3DEXTPROC glad_glCopyTexSubImage3DEXT; -#define glCopyTexSubImage3DEXT glad_glCopyTexSubImage3DEXT -#endif -#ifndef GL_EXT_cull_vertex +GLAD_API_CALL int GLAD_GL_EXT_copy_texture; #define GL_EXT_cull_vertex 1 -GLAPI int GLAD_GL_EXT_cull_vertex; -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC)(GLenum pname, GLdouble *params); -GLAPI PFNGLCULLPARAMETERDVEXTPROC glad_glCullParameterdvEXT; -#define glCullParameterdvEXT glad_glCullParameterdvEXT -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC)(GLenum pname, GLfloat *params); -GLAPI PFNGLCULLPARAMETERFVEXTPROC glad_glCullParameterfvEXT; -#define glCullParameterfvEXT glad_glCullParameterfvEXT -#endif -#ifndef GL_EXT_debug_label +GLAD_API_CALL int GLAD_GL_EXT_cull_vertex; #define GL_EXT_debug_label 1 -GLAPI int GLAD_GL_EXT_debug_label; -typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC)(GLenum type, GLuint object, GLsizei length, const GLchar *label); -GLAPI PFNGLLABELOBJECTEXTPROC glad_glLabelObjectEXT; -#define glLabelObjectEXT glad_glLabelObjectEXT -typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC)(GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI PFNGLGETOBJECTLABELEXTPROC glad_glGetObjectLabelEXT; -#define glGetObjectLabelEXT glad_glGetObjectLabelEXT -#endif -#ifndef GL_EXT_debug_marker +GLAD_API_CALL int GLAD_GL_EXT_debug_label; #define GL_EXT_debug_marker 1 -GLAPI int GLAD_GL_EXT_debug_marker; -typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar *marker); -GLAPI PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT; -#define glInsertEventMarkerEXT glad_glInsertEventMarkerEXT -typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar *marker); -GLAPI PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT; -#define glPushGroupMarkerEXT glad_glPushGroupMarkerEXT -typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC)(void); -GLAPI PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT; -#define glPopGroupMarkerEXT glad_glPopGroupMarkerEXT -#endif -#ifndef GL_EXT_depth_bounds_test +GLAD_API_CALL int GLAD_GL_EXT_debug_marker; #define GL_EXT_depth_bounds_test 1 -GLAPI int GLAD_GL_EXT_depth_bounds_test; -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC)(GLclampd zmin, GLclampd zmax); -GLAPI PFNGLDEPTHBOUNDSEXTPROC glad_glDepthBoundsEXT; -#define glDepthBoundsEXT glad_glDepthBoundsEXT -#endif -#ifndef GL_EXT_direct_state_access +GLAD_API_CALL int GLAD_GL_EXT_depth_bounds_test; #define GL_EXT_direct_state_access 1 -GLAPI int GLAD_GL_EXT_direct_state_access; -typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC)(GLenum mode, const GLfloat *m); -GLAPI PFNGLMATRIXLOADFEXTPROC glad_glMatrixLoadfEXT; -#define glMatrixLoadfEXT glad_glMatrixLoadfEXT -typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC)(GLenum mode, const GLdouble *m); -GLAPI PFNGLMATRIXLOADDEXTPROC glad_glMatrixLoaddEXT; -#define glMatrixLoaddEXT glad_glMatrixLoaddEXT -typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC)(GLenum mode, const GLfloat *m); -GLAPI PFNGLMATRIXMULTFEXTPROC glad_glMatrixMultfEXT; -#define glMatrixMultfEXT glad_glMatrixMultfEXT -typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC)(GLenum mode, const GLdouble *m); -GLAPI PFNGLMATRIXMULTDEXTPROC glad_glMatrixMultdEXT; -#define glMatrixMultdEXT glad_glMatrixMultdEXT -typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC)(GLenum mode); -GLAPI PFNGLMATRIXLOADIDENTITYEXTPROC glad_glMatrixLoadIdentityEXT; -#define glMatrixLoadIdentityEXT glad_glMatrixLoadIdentityEXT -typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLMATRIXROTATEFEXTPROC glad_glMatrixRotatefEXT; -#define glMatrixRotatefEXT glad_glMatrixRotatefEXT -typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLMATRIXROTATEDEXTPROC glad_glMatrixRotatedEXT; -#define glMatrixRotatedEXT glad_glMatrixRotatedEXT -typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLMATRIXSCALEFEXTPROC glad_glMatrixScalefEXT; -#define glMatrixScalefEXT glad_glMatrixScalefEXT -typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLMATRIXSCALEDEXTPROC glad_glMatrixScaledEXT; -#define glMatrixScaledEXT glad_glMatrixScaledEXT -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLMATRIXTRANSLATEFEXTPROC glad_glMatrixTranslatefEXT; -#define glMatrixTranslatefEXT glad_glMatrixTranslatefEXT -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLMATRIXTRANSLATEDEXTPROC glad_glMatrixTranslatedEXT; -#define glMatrixTranslatedEXT glad_glMatrixTranslatedEXT -typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI PFNGLMATRIXFRUSTUMEXTPROC glad_glMatrixFrustumEXT; -#define glMatrixFrustumEXT glad_glMatrixFrustumEXT -typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI PFNGLMATRIXORTHOEXTPROC glad_glMatrixOrthoEXT; -#define glMatrixOrthoEXT glad_glMatrixOrthoEXT -typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC)(GLenum mode); -GLAPI PFNGLMATRIXPOPEXTPROC glad_glMatrixPopEXT; -#define glMatrixPopEXT glad_glMatrixPopEXT -typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC)(GLenum mode); -GLAPI PFNGLMATRIXPUSHEXTPROC glad_glMatrixPushEXT; -#define glMatrixPushEXT glad_glMatrixPushEXT -typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); -GLAPI PFNGLCLIENTATTRIBDEFAULTEXTPROC glad_glClientAttribDefaultEXT; -#define glClientAttribDefaultEXT glad_glClientAttribDefaultEXT -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); -GLAPI PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glad_glPushClientAttribDefaultEXT; -#define glPushClientAttribDefaultEXT glad_glPushClientAttribDefaultEXT -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLTEXTUREPARAMETERFEXTPROC glad_glTextureParameterfEXT; -#define glTextureParameterfEXT glad_glTextureParameterfEXT -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLTEXTUREPARAMETERFVEXTPROC glad_glTextureParameterfvEXT; -#define glTextureParameterfvEXT glad_glTextureParameterfvEXT -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint param); -GLAPI PFNGLTEXTUREPARAMETERIEXTPROC glad_glTextureParameteriEXT; -#define glTextureParameteriEXT glad_glTextureParameteriEXT -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXTUREPARAMETERIVEXTPROC glad_glTextureParameterivEXT; -#define glTextureParameterivEXT glad_glTextureParameterivEXT -typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTUREIMAGE1DEXTPROC glad_glTextureImage1DEXT; -#define glTextureImage1DEXT glad_glTextureImage1DEXT -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTUREIMAGE2DEXTPROC glad_glTextureImage2DEXT; -#define glTextureImage2DEXT glad_glTextureImage2DEXT -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTURESUBIMAGE1DEXTPROC glad_glTextureSubImage1DEXT; -#define glTextureSubImage1DEXT glad_glTextureSubImage1DEXT -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTURESUBIMAGE2DEXTPROC glad_glTextureSubImage2DEXT; -#define glTextureSubImage2DEXT glad_glTextureSubImage2DEXT -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI PFNGLCOPYTEXTUREIMAGE1DEXTPROC glad_glCopyTextureImage1DEXT; -#define glCopyTextureImage1DEXT glad_glCopyTextureImage1DEXT -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI PFNGLCOPYTEXTUREIMAGE2DEXTPROC glad_glCopyTextureImage2DEXT; -#define glCopyTextureImage2DEXT glad_glCopyTextureImage2DEXT -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glad_glCopyTextureSubImage1DEXT; -#define glCopyTextureSubImage1DEXT glad_glCopyTextureSubImage1DEXT -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glad_glCopyTextureSubImage2DEXT; -#define glCopyTextureSubImage2DEXT glad_glCopyTextureSubImage2DEXT -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI PFNGLGETTEXTUREIMAGEEXTPROC glad_glGetTextureImageEXT; -#define glGetTextureImageEXT glad_glGetTextureImageEXT -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXTUREPARAMETERFVEXTPROC glad_glGetTextureParameterfvEXT; -#define glGetTextureParameterfvEXT glad_glGetTextureParameterfvEXT -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXTUREPARAMETERIVEXTPROC glad_glGetTextureParameterivEXT; -#define glGetTextureParameterivEXT glad_glGetTextureParameterivEXT -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glad_glGetTextureLevelParameterfvEXT; -#define glGetTextureLevelParameterfvEXT glad_glGetTextureLevelParameterfvEXT -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glad_glGetTextureLevelParameterivEXT; -#define glGetTextureLevelParameterivEXT glad_glGetTextureLevelParameterivEXT -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTUREIMAGE3DEXTPROC glad_glTextureImage3DEXT; -#define glTextureImage3DEXT glad_glTextureImage3DEXT -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXTURESUBIMAGE3DEXTPROC glad_glTextureSubImage3DEXT; -#define glTextureSubImage3DEXT glad_glTextureSubImage3DEXT -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glad_glCopyTextureSubImage3DEXT; -#define glCopyTextureSubImage3DEXT glad_glCopyTextureSubImage3DEXT -typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC)(GLenum texunit, GLenum target, GLuint texture); -GLAPI PFNGLBINDMULTITEXTUREEXTPROC glad_glBindMultiTextureEXT; -#define glBindMultiTextureEXT glad_glBindMultiTextureEXT -typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC)(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLMULTITEXCOORDPOINTEREXTPROC glad_glMultiTexCoordPointerEXT; -#define glMultiTexCoordPointerEXT glad_glMultiTexCoordPointerEXT -typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLMULTITEXENVFEXTPROC glad_glMultiTexEnvfEXT; -#define glMultiTexEnvfEXT glad_glMultiTexEnvfEXT -typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLMULTITEXENVFVEXTPROC glad_glMultiTexEnvfvEXT; -#define glMultiTexEnvfvEXT glad_glMultiTexEnvfvEXT -typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI PFNGLMULTITEXENVIEXTPROC glad_glMultiTexEnviEXT; -#define glMultiTexEnviEXT glad_glMultiTexEnviEXT -typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLMULTITEXENVIVEXTPROC glad_glMultiTexEnvivEXT; -#define glMultiTexEnvivEXT glad_glMultiTexEnvivEXT -typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -GLAPI PFNGLMULTITEXGENDEXTPROC glad_glMultiTexGendEXT; -#define glMultiTexGendEXT glad_glMultiTexGendEXT -typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -GLAPI PFNGLMULTITEXGENDVEXTPROC glad_glMultiTexGendvEXT; -#define glMultiTexGendvEXT glad_glMultiTexGendvEXT -typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -GLAPI PFNGLMULTITEXGENFEXTPROC glad_glMultiTexGenfEXT; -#define glMultiTexGenfEXT glad_glMultiTexGenfEXT -typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -GLAPI PFNGLMULTITEXGENFVEXTPROC glad_glMultiTexGenfvEXT; -#define glMultiTexGenfvEXT glad_glMultiTexGenfvEXT -typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint param); -GLAPI PFNGLMULTITEXGENIEXTPROC glad_glMultiTexGeniEXT; -#define glMultiTexGeniEXT glad_glMultiTexGeniEXT -typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -GLAPI PFNGLMULTITEXGENIVEXTPROC glad_glMultiTexGenivEXT; -#define glMultiTexGenivEXT glad_glMultiTexGenivEXT -typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMULTITEXENVFVEXTPROC glad_glGetMultiTexEnvfvEXT; -#define glGetMultiTexEnvfvEXT glad_glGetMultiTexEnvfvEXT -typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETMULTITEXENVIVEXTPROC glad_glGetMultiTexEnvivEXT; -#define glGetMultiTexEnvivEXT glad_glGetMultiTexEnvivEXT -typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -GLAPI PFNGLGETMULTITEXGENDVEXTPROC glad_glGetMultiTexGendvEXT; -#define glGetMultiTexGendvEXT glad_glGetMultiTexGendvEXT -typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMULTITEXGENFVEXTPROC glad_glGetMultiTexGenfvEXT; -#define glGetMultiTexGenfvEXT glad_glGetMultiTexGenfvEXT -typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint *params); -GLAPI PFNGLGETMULTITEXGENIVEXTPROC glad_glGetMultiTexGenivEXT; -#define glGetMultiTexGenivEXT glad_glGetMultiTexGenivEXT -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI PFNGLMULTITEXPARAMETERIEXTPROC glad_glMultiTexParameteriEXT; -#define glMultiTexParameteriEXT glad_glMultiTexParameteriEXT -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLMULTITEXPARAMETERIVEXTPROC glad_glMultiTexParameterivEXT; -#define glMultiTexParameterivEXT glad_glMultiTexParameterivEXT -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLMULTITEXPARAMETERFEXTPROC glad_glMultiTexParameterfEXT; -#define glMultiTexParameterfEXT glad_glMultiTexParameterfEXT -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLMULTITEXPARAMETERFVEXTPROC glad_glMultiTexParameterfvEXT; -#define glMultiTexParameterfvEXT glad_glMultiTexParameterfvEXT -typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLMULTITEXIMAGE1DEXTPROC glad_glMultiTexImage1DEXT; -#define glMultiTexImage1DEXT glad_glMultiTexImage1DEXT -typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLMULTITEXIMAGE2DEXTPROC glad_glMultiTexImage2DEXT; -#define glMultiTexImage2DEXT glad_glMultiTexImage2DEXT -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLMULTITEXSUBIMAGE1DEXTPROC glad_glMultiTexSubImage1DEXT; -#define glMultiTexSubImage1DEXT glad_glMultiTexSubImage1DEXT -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLMULTITEXSUBIMAGE2DEXTPROC glad_glMultiTexSubImage2DEXT; -#define glMultiTexSubImage2DEXT glad_glMultiTexSubImage2DEXT -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI PFNGLCOPYMULTITEXIMAGE1DEXTPROC glad_glCopyMultiTexImage1DEXT; -#define glCopyMultiTexImage1DEXT glad_glCopyMultiTexImage1DEXT -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI PFNGLCOPYMULTITEXIMAGE2DEXTPROC glad_glCopyMultiTexImage2DEXT; -#define glCopyMultiTexImage2DEXT glad_glCopyMultiTexImage2DEXT -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glad_glCopyMultiTexSubImage1DEXT; -#define glCopyMultiTexSubImage1DEXT glad_glCopyMultiTexSubImage1DEXT -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glad_glCopyMultiTexSubImage2DEXT; -#define glCopyMultiTexSubImage2DEXT glad_glCopyMultiTexSubImage2DEXT -typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI PFNGLGETMULTITEXIMAGEEXTPROC glad_glGetMultiTexImageEXT; -#define glGetMultiTexImageEXT glad_glGetMultiTexImageEXT -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMULTITEXPARAMETERFVEXTPROC glad_glGetMultiTexParameterfvEXT; -#define glGetMultiTexParameterfvEXT glad_glGetMultiTexParameterfvEXT -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETMULTITEXPARAMETERIVEXTPROC glad_glGetMultiTexParameterivEXT; -#define glGetMultiTexParameterivEXT glad_glGetMultiTexParameterivEXT -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glad_glGetMultiTexLevelParameterfvEXT; -#define glGetMultiTexLevelParameterfvEXT glad_glGetMultiTexLevelParameterfvEXT -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glad_glGetMultiTexLevelParameterivEXT; -#define glGetMultiTexLevelParameterivEXT glad_glGetMultiTexLevelParameterivEXT -typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLMULTITEXIMAGE3DEXTPROC glad_glMultiTexImage3DEXT; -#define glMultiTexImage3DEXT glad_glMultiTexImage3DEXT -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLMULTITEXSUBIMAGE3DEXTPROC glad_glMultiTexSubImage3DEXT; -#define glMultiTexSubImage3DEXT glad_glMultiTexSubImage3DEXT -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glad_glCopyMultiTexSubImage3DEXT; -#define glCopyMultiTexSubImage3DEXT glad_glCopyMultiTexSubImage3DEXT -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); -GLAPI PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glad_glEnableClientStateIndexedEXT; -#define glEnableClientStateIndexedEXT glad_glEnableClientStateIndexedEXT -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); -GLAPI PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glad_glDisableClientStateIndexedEXT; -#define glDisableClientStateIndexedEXT glad_glDisableClientStateIndexedEXT -typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC)(GLenum target, GLuint index, GLfloat *data); -GLAPI PFNGLGETFLOATINDEXEDVEXTPROC glad_glGetFloatIndexedvEXT; -#define glGetFloatIndexedvEXT glad_glGetFloatIndexedvEXT -typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC)(GLenum target, GLuint index, GLdouble *data); -GLAPI PFNGLGETDOUBLEINDEXEDVEXTPROC glad_glGetDoubleIndexedvEXT; -#define glGetDoubleIndexedvEXT glad_glGetDoubleIndexedvEXT -typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC)(GLenum target, GLuint index, void **data); -GLAPI PFNGLGETPOINTERINDEXEDVEXTPROC glad_glGetPointerIndexedvEXT; -#define glGetPointerIndexedvEXT glad_glGetPointerIndexedvEXT -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC)(GLenum target, GLuint index); -GLAPI PFNGLENABLEINDEXEDEXTPROC glad_glEnableIndexedEXT; -#define glEnableIndexedEXT glad_glEnableIndexedEXT -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index); -GLAPI PFNGLDISABLEINDEXEDEXTPROC glad_glDisableIndexedEXT; -#define glDisableIndexedEXT glad_glDisableIndexedEXT -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index); -GLAPI PFNGLISENABLEDINDEXEDEXTPROC glad_glIsEnabledIndexedEXT; -#define glIsEnabledIndexedEXT glad_glIsEnabledIndexedEXT -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC)(GLenum target, GLuint index, GLint *data); -GLAPI PFNGLGETINTEGERINDEXEDVEXTPROC glad_glGetIntegerIndexedvEXT; -#define glGetIntegerIndexedvEXT glad_glGetIntegerIndexedvEXT -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC)(GLenum target, GLuint index, GLboolean *data); -GLAPI PFNGLGETBOOLEANINDEXEDVEXTPROC glad_glGetBooleanIndexedvEXT; -#define glGetBooleanIndexedvEXT glad_glGetBooleanIndexedvEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glad_glCompressedTextureImage3DEXT; -#define glCompressedTextureImage3DEXT glad_glCompressedTextureImage3DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glad_glCompressedTextureImage2DEXT; -#define glCompressedTextureImage2DEXT glad_glCompressedTextureImage2DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glad_glCompressedTextureImage1DEXT; -#define glCompressedTextureImage1DEXT glad_glCompressedTextureImage1DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glad_glCompressedTextureSubImage3DEXT; -#define glCompressedTextureSubImage3DEXT glad_glCompressedTextureSubImage3DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glad_glCompressedTextureSubImage2DEXT; -#define glCompressedTextureSubImage2DEXT glad_glCompressedTextureSubImage2DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glad_glCompressedTextureSubImage1DEXT; -#define glCompressedTextureSubImage1DEXT glad_glCompressedTextureSubImage1DEXT -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint lod, void *img); -GLAPI PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glad_glGetCompressedTextureImageEXT; -#define glGetCompressedTextureImageEXT glad_glGetCompressedTextureImageEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glad_glCompressedMultiTexImage3DEXT; -#define glCompressedMultiTexImage3DEXT glad_glCompressedMultiTexImage3DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glad_glCompressedMultiTexImage2DEXT; -#define glCompressedMultiTexImage2DEXT glad_glCompressedMultiTexImage2DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glad_glCompressedMultiTexImage1DEXT; -#define glCompressedMultiTexImage1DEXT glad_glCompressedMultiTexImage1DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glad_glCompressedMultiTexSubImage3DEXT; -#define glCompressedMultiTexSubImage3DEXT glad_glCompressedMultiTexSubImage3DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glad_glCompressedMultiTexSubImage2DEXT; -#define glCompressedMultiTexSubImage2DEXT glad_glCompressedMultiTexSubImage2DEXT -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glad_glCompressedMultiTexSubImage1DEXT; -#define glCompressedMultiTexSubImage1DEXT glad_glCompressedMultiTexSubImage1DEXT -typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint lod, void *img); -GLAPI PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glad_glGetCompressedMultiTexImageEXT; -#define glGetCompressedMultiTexImageEXT glad_glGetCompressedMultiTexImageEXT -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat *m); -GLAPI PFNGLMATRIXLOADTRANSPOSEFEXTPROC glad_glMatrixLoadTransposefEXT; -#define glMatrixLoadTransposefEXT glad_glMatrixLoadTransposefEXT -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble *m); -GLAPI PFNGLMATRIXLOADTRANSPOSEDEXTPROC glad_glMatrixLoadTransposedEXT; -#define glMatrixLoadTransposedEXT glad_glMatrixLoadTransposedEXT -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat *m); -GLAPI PFNGLMATRIXMULTTRANSPOSEFEXTPROC glad_glMatrixMultTransposefEXT; -#define glMatrixMultTransposefEXT glad_glMatrixMultTransposefEXT -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble *m); -GLAPI PFNGLMATRIXMULTTRANSPOSEDEXTPROC glad_glMatrixMultTransposedEXT; -#define glMatrixMultTransposedEXT glad_glMatrixMultTransposedEXT -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -GLAPI PFNGLNAMEDBUFFERDATAEXTPROC glad_glNamedBufferDataEXT; -#define glNamedBufferDataEXT glad_glNamedBufferDataEXT -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI PFNGLNAMEDBUFFERSUBDATAEXTPROC glad_glNamedBufferSubDataEXT; -#define glNamedBufferSubDataEXT glad_glNamedBufferSubDataEXT -typedef void * (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC)(GLuint buffer, GLenum access); -GLAPI PFNGLMAPNAMEDBUFFEREXTPROC glad_glMapNamedBufferEXT; -#define glMapNamedBufferEXT glad_glMapNamedBufferEXT -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC)(GLuint buffer); -GLAPI PFNGLUNMAPNAMEDBUFFEREXTPROC glad_glUnmapNamedBufferEXT; -#define glUnmapNamedBufferEXT glad_glUnmapNamedBufferEXT -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)(GLuint buffer, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glad_glGetNamedBufferParameterivEXT; -#define glGetNamedBufferParameterivEXT glad_glGetNamedBufferParameterivEXT -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)(GLuint buffer, GLenum pname, void **params); -GLAPI PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glad_glGetNamedBufferPointervEXT; -#define glGetNamedBufferPointervEXT glad_glGetNamedBufferPointervEXT -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -GLAPI PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glad_glGetNamedBufferSubDataEXT; -#define glGetNamedBufferSubDataEXT glad_glGetNamedBufferSubDataEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC)(GLuint program, GLint location, GLfloat v0); -GLAPI PFNGLPROGRAMUNIFORM1FEXTPROC glad_glProgramUniform1fEXT; -#define glProgramUniform1fEXT glad_glProgramUniform1fEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI PFNGLPROGRAMUNIFORM2FEXTPROC glad_glProgramUniform2fEXT; -#define glProgramUniform2fEXT glad_glProgramUniform2fEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI PFNGLPROGRAMUNIFORM3FEXTPROC glad_glProgramUniform3fEXT; -#define glProgramUniform3fEXT glad_glProgramUniform3fEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI PFNGLPROGRAMUNIFORM4FEXTPROC glad_glProgramUniform4fEXT; -#define glProgramUniform4fEXT glad_glProgramUniform4fEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC)(GLuint program, GLint location, GLint v0); -GLAPI PFNGLPROGRAMUNIFORM1IEXTPROC glad_glProgramUniform1iEXT; -#define glProgramUniform1iEXT glad_glProgramUniform1iEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1); -GLAPI PFNGLPROGRAMUNIFORM2IEXTPROC glad_glProgramUniform2iEXT; -#define glProgramUniform2iEXT glad_glProgramUniform2iEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI PFNGLPROGRAMUNIFORM3IEXTPROC glad_glProgramUniform3iEXT; -#define glProgramUniform3iEXT glad_glProgramUniform3iEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI PFNGLPROGRAMUNIFORM4IEXTPROC glad_glProgramUniform4iEXT; -#define glProgramUniform4iEXT glad_glProgramUniform4iEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM1FVEXTPROC glad_glProgramUniform1fvEXT; -#define glProgramUniform1fvEXT glad_glProgramUniform1fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM2FVEXTPROC glad_glProgramUniform2fvEXT; -#define glProgramUniform2fvEXT glad_glProgramUniform2fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM3FVEXTPROC glad_glProgramUniform3fvEXT; -#define glProgramUniform3fvEXT glad_glProgramUniform3fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORM4FVEXTPROC glad_glProgramUniform4fvEXT; -#define glProgramUniform4fvEXT glad_glProgramUniform4fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM1IVEXTPROC glad_glProgramUniform1ivEXT; -#define glProgramUniform1ivEXT glad_glProgramUniform1ivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM2IVEXTPROC glad_glProgramUniform2ivEXT; -#define glProgramUniform2ivEXT glad_glProgramUniform2ivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM3IVEXTPROC glad_glProgramUniform3ivEXT; -#define glProgramUniform3ivEXT glad_glProgramUniform3ivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLPROGRAMUNIFORM4IVEXTPROC glad_glProgramUniform4ivEXT; -#define glProgramUniform4ivEXT glad_glProgramUniform4ivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glad_glProgramUniformMatrix2fvEXT; -#define glProgramUniformMatrix2fvEXT glad_glProgramUniformMatrix2fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glad_glProgramUniformMatrix3fvEXT; -#define glProgramUniformMatrix3fvEXT glad_glProgramUniformMatrix3fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glad_glProgramUniformMatrix4fvEXT; -#define glProgramUniformMatrix4fvEXT glad_glProgramUniformMatrix4fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glad_glProgramUniformMatrix2x3fvEXT; -#define glProgramUniformMatrix2x3fvEXT glad_glProgramUniformMatrix2x3fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glad_glProgramUniformMatrix3x2fvEXT; -#define glProgramUniformMatrix3x2fvEXT glad_glProgramUniformMatrix3x2fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glad_glProgramUniformMatrix2x4fvEXT; -#define glProgramUniformMatrix2x4fvEXT glad_glProgramUniformMatrix2x4fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glad_glProgramUniformMatrix4x2fvEXT; -#define glProgramUniformMatrix4x2fvEXT glad_glProgramUniformMatrix4x2fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glad_glProgramUniformMatrix3x4fvEXT; -#define glProgramUniformMatrix3x4fvEXT glad_glProgramUniformMatrix3x4fvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glad_glProgramUniformMatrix4x3fvEXT; -#define glProgramUniformMatrix4x3fvEXT glad_glProgramUniformMatrix4x3fvEXT -typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXTUREBUFFEREXTPROC glad_glTextureBufferEXT; -#define glTextureBufferEXT glad_glTextureBufferEXT -typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC)(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLMULTITEXBUFFEREXTPROC glad_glMultiTexBufferEXT; -#define glMultiTexBufferEXT glad_glMultiTexBufferEXT -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXTUREPARAMETERIIVEXTPROC glad_glTextureParameterIivEXT; -#define glTextureParameterIivEXT glad_glTextureParameterIivEXT -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLuint *params); -GLAPI PFNGLTEXTUREPARAMETERIUIVEXTPROC glad_glTextureParameterIuivEXT; -#define glTextureParameterIuivEXT glad_glTextureParameterIuivEXT -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXTUREPARAMETERIIVEXTPROC glad_glGetTextureParameterIivEXT; -#define glGetTextureParameterIivEXT glad_glGetTextureParameterIivEXT -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLuint *params); -GLAPI PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glad_glGetTextureParameterIuivEXT; -#define glGetTextureParameterIuivEXT glad_glGetTextureParameterIuivEXT -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLMULTITEXPARAMETERIIVEXTPROC glad_glMultiTexParameterIivEXT; -#define glMultiTexParameterIivEXT glad_glMultiTexParameterIivEXT -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -GLAPI PFNGLMULTITEXPARAMETERIUIVEXTPROC glad_glMultiTexParameterIuivEXT; -#define glMultiTexParameterIuivEXT glad_glMultiTexParameterIuivEXT -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETMULTITEXPARAMETERIIVEXTPROC glad_glGetMultiTexParameterIivEXT; -#define glGetMultiTexParameterIivEXT glad_glGetMultiTexParameterIivEXT -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLuint *params); -GLAPI PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glad_glGetMultiTexParameterIuivEXT; -#define glGetMultiTexParameterIuivEXT glad_glGetMultiTexParameterIuivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC)(GLuint program, GLint location, GLuint v0); -GLAPI PFNGLPROGRAMUNIFORM1UIEXTPROC glad_glProgramUniform1uiEXT; -#define glProgramUniform1uiEXT glad_glProgramUniform1uiEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI PFNGLPROGRAMUNIFORM2UIEXTPROC glad_glProgramUniform2uiEXT; -#define glProgramUniform2uiEXT glad_glProgramUniform2uiEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI PFNGLPROGRAMUNIFORM3UIEXTPROC glad_glProgramUniform3uiEXT; -#define glProgramUniform3uiEXT glad_glProgramUniform3uiEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI PFNGLPROGRAMUNIFORM4UIEXTPROC glad_glProgramUniform4uiEXT; -#define glProgramUniform4uiEXT glad_glProgramUniform4uiEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM1UIVEXTPROC glad_glProgramUniform1uivEXT; -#define glProgramUniform1uivEXT glad_glProgramUniform1uivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM2UIVEXTPROC glad_glProgramUniform2uivEXT; -#define glProgramUniform2uivEXT glad_glProgramUniform2uivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM3UIVEXTPROC glad_glProgramUniform3uivEXT; -#define glProgramUniform3uivEXT glad_glProgramUniform3uivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLPROGRAMUNIFORM4UIVEXTPROC glad_glProgramUniform4uivEXT; -#define glProgramUniform4uivEXT glad_glProgramUniform4uivEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glNamedProgramLocalParameters4fvEXT; -#define glNamedProgramLocalParameters4fvEXT glad_glNamedProgramLocalParameters4fvEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glad_glNamedProgramLocalParameterI4iEXT; -#define glNamedProgramLocalParameterI4iEXT glad_glNamedProgramLocalParameterI4iEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLint *params); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glad_glNamedProgramLocalParameterI4ivEXT; -#define glNamedProgramLocalParameterI4ivEXT glad_glNamedProgramLocalParameterI4ivEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glad_glNamedProgramLocalParametersI4ivEXT; -#define glNamedProgramLocalParametersI4ivEXT glad_glNamedProgramLocalParametersI4ivEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glad_glNamedProgramLocalParameterI4uiEXT; -#define glNamedProgramLocalParameterI4uiEXT glad_glNamedProgramLocalParameterI4uiEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLuint *params); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glad_glNamedProgramLocalParameterI4uivEXT; -#define glNamedProgramLocalParameterI4uivEXT glad_glNamedProgramLocalParameterI4uivEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glad_glNamedProgramLocalParametersI4uivEXT; -#define glNamedProgramLocalParametersI4uivEXT glad_glNamedProgramLocalParametersI4uivEXT -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLint *params); -GLAPI PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glad_glGetNamedProgramLocalParameterIivEXT; -#define glGetNamedProgramLocalParameterIivEXT glad_glGetNamedProgramLocalParameterIivEXT -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint *params); -GLAPI PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glad_glGetNamedProgramLocalParameterIuivEXT; -#define glGetNamedProgramLocalParameterIuivEXT glad_glGetNamedProgramLocalParameterIuivEXT -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); -GLAPI PFNGLENABLECLIENTSTATEIEXTPROC glad_glEnableClientStateiEXT; -#define glEnableClientStateiEXT glad_glEnableClientStateiEXT -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); -GLAPI PFNGLDISABLECLIENTSTATEIEXTPROC glad_glDisableClientStateiEXT; -#define glDisableClientStateiEXT glad_glDisableClientStateiEXT -typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC)(GLenum pname, GLuint index, GLfloat *params); -GLAPI PFNGLGETFLOATI_VEXTPROC glad_glGetFloati_vEXT; -#define glGetFloati_vEXT glad_glGetFloati_vEXT -typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC)(GLenum pname, GLuint index, GLdouble *params); -GLAPI PFNGLGETDOUBLEI_VEXTPROC glad_glGetDoublei_vEXT; -#define glGetDoublei_vEXT glad_glGetDoublei_vEXT -typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC)(GLenum pname, GLuint index, void **params); -GLAPI PFNGLGETPOINTERI_VEXTPROC glad_glGetPointeri_vEXT; -#define glGetPointeri_vEXT glad_glGetPointeri_vEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI PFNGLNAMEDPROGRAMSTRINGEXTPROC glad_glNamedProgramStringEXT; -#define glNamedProgramStringEXT glad_glNamedProgramStringEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glad_glNamedProgramLocalParameter4dEXT; -#define glNamedProgramLocalParameter4dEXT glad_glNamedProgramLocalParameter4dEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLdouble *params); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glad_glNamedProgramLocalParameter4dvEXT; -#define glNamedProgramLocalParameter4dvEXT glad_glNamedProgramLocalParameter4dvEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glad_glNamedProgramLocalParameter4fEXT; -#define glNamedProgramLocalParameter4fEXT glad_glNamedProgramLocalParameter4fEXT -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLfloat *params); -GLAPI PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glad_glNamedProgramLocalParameter4fvEXT; -#define glNamedProgramLocalParameter4fvEXT glad_glNamedProgramLocalParameter4fvEXT -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble *params); -GLAPI PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glad_glGetNamedProgramLocalParameterdvEXT; -#define glGetNamedProgramLocalParameterdvEXT glad_glGetNamedProgramLocalParameterdvEXT -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat *params); -GLAPI PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glad_glGetNamedProgramLocalParameterfvEXT; -#define glGetNamedProgramLocalParameterfvEXT glad_glGetNamedProgramLocalParameterfvEXT -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC)(GLuint program, GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDPROGRAMIVEXTPROC glad_glGetNamedProgramivEXT; -#define glGetNamedProgramivEXT glad_glGetNamedProgramivEXT -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum pname, void *string); -GLAPI PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glad_glGetNamedProgramStringEXT; -#define glGetNamedProgramStringEXT glad_glGetNamedProgramStringEXT -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glad_glNamedRenderbufferStorageEXT; -#define glNamedRenderbufferStorageEXT glad_glNamedRenderbufferStorageEXT -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)(GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glad_glGetNamedRenderbufferParameterivEXT; -#define glGetNamedRenderbufferParameterivEXT glad_glGetNamedRenderbufferParameterivEXT -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glNamedRenderbufferStorageMultisampleEXT; -#define glNamedRenderbufferStorageMultisampleEXT glad_glNamedRenderbufferStorageMultisampleEXT -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glad_glNamedRenderbufferStorageMultisampleCoverageEXT; -#define glNamedRenderbufferStorageMultisampleCoverageEXT glad_glNamedRenderbufferStorageMultisampleCoverageEXT -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)(GLuint framebuffer, GLenum target); -GLAPI PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glad_glCheckNamedFramebufferStatusEXT; -#define glCheckNamedFramebufferStatusEXT glad_glCheckNamedFramebufferStatusEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glad_glNamedFramebufferTexture1DEXT; -#define glNamedFramebufferTexture1DEXT glad_glNamedFramebufferTexture1DEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glad_glNamedFramebufferTexture2DEXT; -#define glNamedFramebufferTexture2DEXT glad_glNamedFramebufferTexture2DEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glad_glNamedFramebufferTexture3DEXT; -#define glNamedFramebufferTexture3DEXT glad_glNamedFramebufferTexture3DEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glad_glNamedFramebufferRenderbufferEXT; -#define glNamedFramebufferRenderbufferEXT glad_glNamedFramebufferRenderbufferEXT -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetNamedFramebufferAttachmentParameterivEXT; -#define glGetNamedFramebufferAttachmentParameterivEXT glad_glGetNamedFramebufferAttachmentParameterivEXT -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC)(GLuint texture, GLenum target); -GLAPI PFNGLGENERATETEXTUREMIPMAPEXTPROC glad_glGenerateTextureMipmapEXT; -#define glGenerateTextureMipmapEXT glad_glGenerateTextureMipmapEXT -typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC)(GLenum texunit, GLenum target); -GLAPI PFNGLGENERATEMULTITEXMIPMAPEXTPROC glad_glGenerateMultiTexMipmapEXT; -#define glGenerateMultiTexMipmapEXT glad_glGenerateMultiTexMipmapEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); -GLAPI PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glad_glFramebufferDrawBufferEXT; -#define glFramebufferDrawBufferEXT glad_glFramebufferDrawBufferEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)(GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glad_glFramebufferDrawBuffersEXT; -#define glFramebufferDrawBuffersEXT glad_glFramebufferDrawBuffersEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); -GLAPI PFNGLFRAMEBUFFERREADBUFFEREXTPROC glad_glFramebufferReadBufferEXT; -#define glFramebufferReadBufferEXT glad_glFramebufferReadBufferEXT -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetFramebufferParameterivEXT; -#define glGetFramebufferParameterivEXT glad_glGetFramebufferParameterivEXT -typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glad_glNamedCopyBufferSubDataEXT; -#define glNamedCopyBufferSubDataEXT glad_glNamedCopyBufferSubDataEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glad_glNamedFramebufferTextureEXT; -#define glNamedFramebufferTextureEXT glad_glNamedFramebufferTextureEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glad_glNamedFramebufferTextureLayerEXT; -#define glNamedFramebufferTextureLayerEXT glad_glNamedFramebufferTextureLayerEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glad_glNamedFramebufferTextureFaceEXT; -#define glNamedFramebufferTextureFaceEXT glad_glNamedFramebufferTextureFaceEXT -typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC)(GLuint texture, GLenum target, GLuint renderbuffer); -GLAPI PFNGLTEXTURERENDERBUFFEREXTPROC glad_glTextureRenderbufferEXT; -#define glTextureRenderbufferEXT glad_glTextureRenderbufferEXT -typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC)(GLenum texunit, GLenum target, GLuint renderbuffer); -GLAPI PFNGLMULTITEXRENDERBUFFEREXTPROC glad_glMultiTexRenderbufferEXT; -#define glMultiTexRenderbufferEXT glad_glMultiTexRenderbufferEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glad_glVertexArrayVertexOffsetEXT; -#define glVertexArrayVertexOffsetEXT glad_glVertexArrayVertexOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYCOLOROFFSETEXTPROC glad_glVertexArrayColorOffsetEXT; -#define glVertexArrayColorOffsetEXT glad_glVertexArrayColorOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC glad_glVertexArrayEdgeFlagOffsetEXT; -#define glVertexArrayEdgeFlagOffsetEXT glad_glVertexArrayEdgeFlagOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYINDEXOFFSETEXTPROC glad_glVertexArrayIndexOffsetEXT; -#define glVertexArrayIndexOffsetEXT glad_glVertexArrayIndexOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYNORMALOFFSETEXTPROC glad_glVertexArrayNormalOffsetEXT; -#define glVertexArrayNormalOffsetEXT glad_glVertexArrayNormalOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC glad_glVertexArrayTexCoordOffsetEXT; -#define glVertexArrayTexCoordOffsetEXT glad_glVertexArrayTexCoordOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC glad_glVertexArrayMultiTexCoordOffsetEXT; -#define glVertexArrayMultiTexCoordOffsetEXT glad_glVertexArrayMultiTexCoordOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC glad_glVertexArrayFogCoordOffsetEXT; -#define glVertexArrayFogCoordOffsetEXT glad_glVertexArrayFogCoordOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC glad_glVertexArraySecondaryColorOffsetEXT; -#define glVertexArraySecondaryColorOffsetEXT glad_glVertexArraySecondaryColorOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glad_glVertexArrayVertexAttribOffsetEXT; -#define glVertexArrayVertexAttribOffsetEXT glad_glVertexArrayVertexAttribOffsetEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glad_glVertexArrayVertexAttribIOffsetEXT; -#define glVertexArrayVertexAttribIOffsetEXT glad_glVertexArrayVertexAttribIOffsetEXT -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); -GLAPI PFNGLENABLEVERTEXARRAYEXTPROC glad_glEnableVertexArrayEXT; -#define glEnableVertexArrayEXT glad_glEnableVertexArrayEXT -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); -GLAPI PFNGLDISABLEVERTEXARRAYEXTPROC glad_glDisableVertexArrayEXT; -#define glDisableVertexArrayEXT glad_glDisableVertexArrayEXT -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); -GLAPI PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glad_glEnableVertexArrayAttribEXT; -#define glEnableVertexArrayAttribEXT glad_glEnableVertexArrayAttribEXT -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); -GLAPI PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glad_glDisableVertexArrayAttribEXT; -#define glDisableVertexArrayAttribEXT glad_glDisableVertexArrayAttribEXT -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC)(GLuint vaobj, GLenum pname, GLint *param); -GLAPI PFNGLGETVERTEXARRAYINTEGERVEXTPROC glad_glGetVertexArrayIntegervEXT; -#define glGetVertexArrayIntegervEXT glad_glGetVertexArrayIntegervEXT -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC)(GLuint vaobj, GLenum pname, void **param); -GLAPI PFNGLGETVERTEXARRAYPOINTERVEXTPROC glad_glGetVertexArrayPointervEXT; -#define glGetVertexArrayPointervEXT glad_glGetVertexArrayPointervEXT -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint *param); -GLAPI PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glad_glGetVertexArrayIntegeri_vEXT; -#define glGetVertexArrayIntegeri_vEXT glad_glGetVertexArrayIntegeri_vEXT -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, void **param); -GLAPI PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glad_glGetVertexArrayPointeri_vEXT; -#define glGetVertexArrayPointeri_vEXT glad_glGetVertexArrayPointeri_vEXT -typedef void * (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI PFNGLMAPNAMEDBUFFERRANGEEXTPROC glad_glMapNamedBufferRangeEXT; -#define glMapNamedBufferRangeEXT glad_glMapNamedBufferRangeEXT -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glad_glFlushMappedNamedBufferRangeEXT; -#define glFlushMappedNamedBufferRangeEXT glad_glFlushMappedNamedBufferRangeEXT -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI PFNGLNAMEDBUFFERSTORAGEEXTPROC glad_glNamedBufferStorageEXT; -#define glNamedBufferStorageEXT glad_glNamedBufferStorageEXT -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARNAMEDBUFFERDATAEXTPROC glad_glClearNamedBufferDataEXT; -#define glClearNamedBufferDataEXT glad_glClearNamedBufferDataEXT -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glad_glClearNamedBufferSubDataEXT; -#define glClearNamedBufferSubDataEXT glad_glClearNamedBufferSubDataEXT -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)(GLuint framebuffer, GLenum pname, GLint param); -GLAPI PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glad_glNamedFramebufferParameteriEXT; -#define glNamedFramebufferParameteriEXT glad_glNamedFramebufferParameteriEXT -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint *params); -GLAPI PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetNamedFramebufferParameterivEXT; -#define glGetNamedFramebufferParameterivEXT glad_glGetNamedFramebufferParameterivEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC)(GLuint program, GLint location, GLdouble x); -GLAPI PFNGLPROGRAMUNIFORM1DEXTPROC glad_glProgramUniform1dEXT; -#define glProgramUniform1dEXT glad_glProgramUniform1dEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y); -GLAPI PFNGLPROGRAMUNIFORM2DEXTPROC glad_glProgramUniform2dEXT; -#define glProgramUniform2dEXT glad_glProgramUniform2dEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLPROGRAMUNIFORM3DEXTPROC glad_glProgramUniform3dEXT; -#define glProgramUniform3dEXT glad_glProgramUniform3dEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLPROGRAMUNIFORM4DEXTPROC glad_glProgramUniform4dEXT; -#define glProgramUniform4dEXT glad_glProgramUniform4dEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM1DVEXTPROC glad_glProgramUniform1dvEXT; -#define glProgramUniform1dvEXT glad_glProgramUniform1dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM2DVEXTPROC glad_glProgramUniform2dvEXT; -#define glProgramUniform2dvEXT glad_glProgramUniform2dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM3DVEXTPROC glad_glProgramUniform3dvEXT; -#define glProgramUniform3dvEXT glad_glProgramUniform3dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORM4DVEXTPROC glad_glProgramUniform4dvEXT; -#define glProgramUniform4dvEXT glad_glProgramUniform4dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glad_glProgramUniformMatrix2dvEXT; -#define glProgramUniformMatrix2dvEXT glad_glProgramUniformMatrix2dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glad_glProgramUniformMatrix3dvEXT; -#define glProgramUniformMatrix3dvEXT glad_glProgramUniformMatrix3dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glad_glProgramUniformMatrix4dvEXT; -#define glProgramUniformMatrix4dvEXT glad_glProgramUniformMatrix4dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glad_glProgramUniformMatrix2x3dvEXT; -#define glProgramUniformMatrix2x3dvEXT glad_glProgramUniformMatrix2x3dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glad_glProgramUniformMatrix2x4dvEXT; -#define glProgramUniformMatrix2x4dvEXT glad_glProgramUniformMatrix2x4dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glad_glProgramUniformMatrix3x2dvEXT; -#define glProgramUniformMatrix3x2dvEXT glad_glProgramUniformMatrix3x2dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glad_glProgramUniformMatrix3x4dvEXT; -#define glProgramUniformMatrix3x4dvEXT glad_glProgramUniformMatrix3x4dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glad_glProgramUniformMatrix4x2dvEXT; -#define glProgramUniformMatrix4x2dvEXT glad_glProgramUniformMatrix4x2dvEXT -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glad_glProgramUniformMatrix4x3dvEXT; -#define glProgramUniformMatrix4x3dvEXT glad_glProgramUniformMatrix4x3dvEXT -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLTEXTUREBUFFERRANGEEXTPROC glad_glTextureBufferRangeEXT; -#define glTextureBufferRangeEXT glad_glTextureBufferRangeEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI PFNGLTEXTURESTORAGE1DEXTPROC glad_glTextureStorage1DEXT; -#define glTextureStorage1DEXT glad_glTextureStorage1DEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLTEXTURESTORAGE2DEXTPROC glad_glTextureStorage2DEXT; -#define glTextureStorage2DEXT glad_glTextureStorage2DEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLTEXTURESTORAGE3DEXTPROC glad_glTextureStorage3DEXT; -#define glTextureStorage3DEXT glad_glTextureStorage3DEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glad_glTextureStorage2DMultisampleEXT; -#define glTextureStorage2DMultisampleEXT glad_glTextureStorage2DMultisampleEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glad_glTextureStorage3DMultisampleEXT; -#define glTextureStorage3DMultisampleEXT glad_glTextureStorage3DMultisampleEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glad_glVertexArrayBindVertexBufferEXT; -#define glVertexArrayBindVertexBufferEXT glad_glVertexArrayBindVertexBufferEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glad_glVertexArrayVertexAttribFormatEXT; -#define glVertexArrayVertexAttribFormatEXT glad_glVertexArrayVertexAttribFormatEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glad_glVertexArrayVertexAttribIFormatEXT; -#define glVertexArrayVertexAttribIFormatEXT glad_glVertexArrayVertexAttribIFormatEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glad_glVertexArrayVertexAttribLFormatEXT; -#define glVertexArrayVertexAttribLFormatEXT glad_glVertexArrayVertexAttribLFormatEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glad_glVertexArrayVertexAttribBindingEXT; -#define glVertexArrayVertexAttribBindingEXT glad_glVertexArrayVertexAttribBindingEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); -GLAPI PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glad_glVertexArrayVertexBindingDivisorEXT; -#define glVertexArrayVertexBindingDivisorEXT glad_glVertexArrayVertexBindingDivisorEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glad_glVertexArrayVertexAttribLOffsetEXT; -#define glVertexArrayVertexAttribLOffsetEXT glad_glVertexArrayVertexAttribLOffsetEXT -typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -GLAPI PFNGLTEXTUREPAGECOMMITMENTEXTPROC glad_glTexturePageCommitmentEXT; -#define glTexturePageCommitmentEXT glad_glTexturePageCommitmentEXT -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC)(GLuint vaobj, GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glad_glVertexArrayVertexAttribDivisorEXT; -#define glVertexArrayVertexAttribDivisorEXT glad_glVertexArrayVertexAttribDivisorEXT -#endif -#ifndef GL_EXT_draw_buffers2 +GLAD_API_CALL int GLAD_GL_EXT_direct_state_access; #define GL_EXT_draw_buffers2 1 -GLAPI int GLAD_GL_EXT_draw_buffers2; -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI PFNGLCOLORMASKINDEXEDEXTPROC glad_glColorMaskIndexedEXT; -#define glColorMaskIndexedEXT glad_glColorMaskIndexedEXT -#endif -#ifndef GL_EXT_draw_instanced +GLAD_API_CALL int GLAD_GL_EXT_draw_buffers2; #define GL_EXT_draw_instanced 1 -GLAPI int GLAD_GL_EXT_draw_instanced; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC)(GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GLAPI PFNGLDRAWARRAYSINSTANCEDEXTPROC glad_glDrawArraysInstancedEXT; -#define glDrawArraysInstancedEXT glad_glDrawArraysInstancedEXT -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GLAPI PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT; -#define glDrawElementsInstancedEXT glad_glDrawElementsInstancedEXT -#endif -#ifndef GL_EXT_draw_range_elements +GLAD_API_CALL int GLAD_GL_EXT_draw_instanced; #define GL_EXT_draw_range_elements 1 -GLAPI int GLAD_GL_EXT_draw_range_elements; -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -GLAPI PFNGLDRAWRANGEELEMENTSEXTPROC glad_glDrawRangeElementsEXT; -#define glDrawRangeElementsEXT glad_glDrawRangeElementsEXT -#endif -#ifndef GL_EXT_external_buffer +GLAD_API_CALL int GLAD_GL_EXT_draw_range_elements; #define GL_EXT_external_buffer 1 -GLAPI int GLAD_GL_EXT_external_buffer; -typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -GLAPI PFNGLBUFFERSTORAGEEXTERNALEXTPROC glad_glBufferStorageExternalEXT; -#define glBufferStorageExternalEXT glad_glBufferStorageExternalEXT -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -GLAPI PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC glad_glNamedBufferStorageExternalEXT; -#define glNamedBufferStorageExternalEXT glad_glNamedBufferStorageExternalEXT -#endif -#ifndef GL_EXT_fog_coord +GLAD_API_CALL int GLAD_GL_EXT_external_buffer; #define GL_EXT_fog_coord 1 -GLAPI int GLAD_GL_EXT_fog_coord; -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC)(GLfloat coord); -GLAPI PFNGLFOGCOORDFEXTPROC glad_glFogCoordfEXT; -#define glFogCoordfEXT glad_glFogCoordfEXT -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC)(const GLfloat *coord); -GLAPI PFNGLFOGCOORDFVEXTPROC glad_glFogCoordfvEXT; -#define glFogCoordfvEXT glad_glFogCoordfvEXT -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC)(GLdouble coord); -GLAPI PFNGLFOGCOORDDEXTPROC glad_glFogCoorddEXT; -#define glFogCoorddEXT glad_glFogCoorddEXT -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC)(const GLdouble *coord); -GLAPI PFNGLFOGCOORDDVEXTPROC glad_glFogCoorddvEXT; -#define glFogCoorddvEXT glad_glFogCoorddvEXT -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLFOGCOORDPOINTEREXTPROC glad_glFogCoordPointerEXT; -#define glFogCoordPointerEXT glad_glFogCoordPointerEXT -#endif -#ifndef GL_EXT_framebuffer_blit +GLAD_API_CALL int GLAD_GL_EXT_fog_coord; #define GL_EXT_framebuffer_blit 1 -GLAPI int GLAD_GL_EXT_framebuffer_blit; -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT; -#define glBlitFramebufferEXT glad_glBlitFramebufferEXT -#endif -#ifndef GL_EXT_framebuffer_multisample +GLAD_API_CALL int GLAD_GL_EXT_framebuffer_blit; #define GL_EXT_framebuffer_multisample 1 -GLAPI int GLAD_GL_EXT_framebuffer_multisample; -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; -#define glRenderbufferStorageMultisampleEXT glad_glRenderbufferStorageMultisampleEXT -#endif -#ifndef GL_EXT_framebuffer_multisample_blit_scaled +GLAD_API_CALL int GLAD_GL_EXT_framebuffer_multisample; #define GL_EXT_framebuffer_multisample_blit_scaled 1 -GLAPI int GLAD_GL_EXT_framebuffer_multisample_blit_scaled; -#endif -#ifndef GL_EXT_framebuffer_object +GLAD_API_CALL int GLAD_GL_EXT_framebuffer_multisample_blit_scaled; #define GL_EXT_framebuffer_object 1 -GLAPI int GLAD_GL_EXT_framebuffer_object; -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); -GLAPI PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; -#define glIsRenderbufferEXT glad_glIsRenderbufferEXT -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); -GLAPI PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; -#define glBindRenderbufferEXT glad_glBindRenderbufferEXT -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint *renderbuffers); -GLAPI PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; -#define glDeleteRenderbuffersEXT glad_glDeleteRenderbuffersEXT -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint *renderbuffers); -GLAPI PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; -#define glGenRenderbuffersEXT glad_glGenRenderbuffersEXT -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; -#define glRenderbufferStorageEXT glad_glRenderbufferStorageEXT -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; -#define glGetRenderbufferParameterivEXT glad_glGetRenderbufferParameterivEXT -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); -GLAPI PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; -#define glIsFramebufferEXT glad_glIsFramebufferEXT -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); -GLAPI PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; -#define glBindFramebufferEXT glad_glBindFramebufferEXT -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint *framebuffers); -GLAPI PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; -#define glDeleteFramebuffersEXT glad_glDeleteFramebuffersEXT -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint *framebuffers); -GLAPI PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; -#define glGenFramebuffersEXT glad_glGenFramebuffersEXT -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); -GLAPI PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; -#define glCheckFramebufferStatusEXT glad_glCheckFramebufferStatusEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; -#define glFramebufferTexture1DEXT glad_glFramebufferTexture1DEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; -#define glFramebufferTexture2DEXT glad_glFramebufferTexture2DEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; -#define glFramebufferTexture3DEXT glad_glFramebufferTexture3DEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; -#define glFramebufferRenderbufferEXT glad_glFramebufferRenderbufferEXT -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; -#define glGetFramebufferAttachmentParameterivEXT glad_glGetFramebufferAttachmentParameterivEXT -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); -GLAPI PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; -#define glGenerateMipmapEXT glad_glGenerateMipmapEXT -#endif -#ifndef GL_EXT_framebuffer_sRGB +GLAD_API_CALL int GLAD_GL_EXT_framebuffer_object; #define GL_EXT_framebuffer_sRGB 1 -GLAPI int GLAD_GL_EXT_framebuffer_sRGB; -#endif -#ifndef GL_EXT_geometry_shader4 +GLAD_API_CALL int GLAD_GL_EXT_framebuffer_sRGB; #define GL_EXT_geometry_shader4 1 -GLAPI int GLAD_GL_EXT_geometry_shader4; -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC)(GLuint program, GLenum pname, GLint value); -GLAPI PFNGLPROGRAMPARAMETERIEXTPROC glad_glProgramParameteriEXT; -#define glProgramParameteriEXT glad_glProgramParameteriEXT -#endif -#ifndef GL_EXT_gpu_program_parameters +GLAD_API_CALL int GLAD_GL_EXT_geometry_shader4; #define GL_EXT_gpu_program_parameters 1 -GLAPI int GLAD_GL_EXT_gpu_program_parameters; -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI PFNGLPROGRAMENVPARAMETERS4FVEXTPROC glad_glProgramEnvParameters4fvEXT; -#define glProgramEnvParameters4fvEXT glad_glProgramEnvParameters4fvEXT -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glProgramLocalParameters4fvEXT; -#define glProgramLocalParameters4fvEXT glad_glProgramLocalParameters4fvEXT -#endif -#ifndef GL_EXT_gpu_shader4 +GLAD_API_CALL int GLAD_GL_EXT_gpu_program_parameters; #define GL_EXT_gpu_shader4 1 -GLAPI int GLAD_GL_EXT_gpu_shader4; -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, GLuint *params); -GLAPI PFNGLGETUNIFORMUIVEXTPROC glad_glGetUniformuivEXT; -#define glGetUniformuivEXT glad_glGetUniformuivEXT -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color, const GLchar *name); -GLAPI PFNGLBINDFRAGDATALOCATIONEXTPROC glad_glBindFragDataLocationEXT; -#define glBindFragDataLocationEXT glad_glBindFragDataLocationEXT -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETFRAGDATALOCATIONEXTPROC glad_glGetFragDataLocationEXT; -#define glGetFragDataLocationEXT glad_glGetFragDataLocationEXT -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC)(GLint location, GLuint v0); -GLAPI PFNGLUNIFORM1UIEXTPROC glad_glUniform1uiEXT; -#define glUniform1uiEXT glad_glUniform1uiEXT -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1); -GLAPI PFNGLUNIFORM2UIEXTPROC glad_glUniform2uiEXT; -#define glUniform2uiEXT glad_glUniform2uiEXT -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI PFNGLUNIFORM3UIEXTPROC glad_glUniform3uiEXT; -#define glUniform3uiEXT glad_glUniform3uiEXT -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI PFNGLUNIFORM4UIEXTPROC glad_glUniform4uiEXT; -#define glUniform4uiEXT glad_glUniform4uiEXT -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM1UIVEXTPROC glad_glUniform1uivEXT; -#define glUniform1uivEXT glad_glUniform1uivEXT -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM2UIVEXTPROC glad_glUniform2uivEXT; -#define glUniform2uivEXT glad_glUniform2uivEXT -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM3UIVEXTPROC glad_glUniform3uivEXT; -#define glUniform3uivEXT glad_glUniform3uivEXT -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM4UIVEXTPROC glad_glUniform4uivEXT; -#define glUniform4uivEXT glad_glUniform4uivEXT -#endif -#ifndef GL_EXT_histogram +GLAD_API_CALL int GLAD_GL_EXT_gpu_shader4; #define GL_EXT_histogram 1 -GLAPI int GLAD_GL_EXT_histogram; -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI PFNGLGETHISTOGRAMEXTPROC glad_glGetHistogramEXT; -#define glGetHistogramEXT glad_glGetHistogramEXT -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETHISTOGRAMPARAMETERFVEXTPROC glad_glGetHistogramParameterfvEXT; -#define glGetHistogramParameterfvEXT glad_glGetHistogramParameterfvEXT -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETHISTOGRAMPARAMETERIVEXTPROC glad_glGetHistogramParameterivEXT; -#define glGetHistogramParameterivEXT glad_glGetHistogramParameterivEXT -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI PFNGLGETMINMAXEXTPROC glad_glGetMinmaxEXT; -#define glGetMinmaxEXT glad_glGetMinmaxEXT -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMINMAXPARAMETERFVEXTPROC glad_glGetMinmaxParameterfvEXT; -#define glGetMinmaxParameterfvEXT glad_glGetMinmaxParameterfvEXT -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETMINMAXPARAMETERIVEXTPROC glad_glGetMinmaxParameterivEXT; -#define glGetMinmaxParameterivEXT glad_glGetMinmaxParameterivEXT -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI PFNGLHISTOGRAMEXTPROC glad_glHistogramEXT; -#define glHistogramEXT glad_glHistogramEXT -typedef void (APIENTRYP PFNGLMINMAXEXTPROC)(GLenum target, GLenum internalformat, GLboolean sink); -GLAPI PFNGLMINMAXEXTPROC glad_glMinmaxEXT; -#define glMinmaxEXT glad_glMinmaxEXT -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC)(GLenum target); -GLAPI PFNGLRESETHISTOGRAMEXTPROC glad_glResetHistogramEXT; -#define glResetHistogramEXT glad_glResetHistogramEXT -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC)(GLenum target); -GLAPI PFNGLRESETMINMAXEXTPROC glad_glResetMinmaxEXT; -#define glResetMinmaxEXT glad_glResetMinmaxEXT -#endif -#ifndef GL_EXT_index_array_formats +GLAD_API_CALL int GLAD_GL_EXT_histogram; #define GL_EXT_index_array_formats 1 -GLAPI int GLAD_GL_EXT_index_array_formats; -#endif -#ifndef GL_EXT_index_func +GLAD_API_CALL int GLAD_GL_EXT_index_array_formats; #define GL_EXT_index_func 1 -GLAPI int GLAD_GL_EXT_index_func; -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC)(GLenum func, GLclampf ref); -GLAPI PFNGLINDEXFUNCEXTPROC glad_glIndexFuncEXT; -#define glIndexFuncEXT glad_glIndexFuncEXT -#endif -#ifndef GL_EXT_index_material +GLAD_API_CALL int GLAD_GL_EXT_index_func; #define GL_EXT_index_material 1 -GLAPI int GLAD_GL_EXT_index_material; -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC)(GLenum face, GLenum mode); -GLAPI PFNGLINDEXMATERIALEXTPROC glad_glIndexMaterialEXT; -#define glIndexMaterialEXT glad_glIndexMaterialEXT -#endif -#ifndef GL_EXT_index_texture +GLAD_API_CALL int GLAD_GL_EXT_index_material; #define GL_EXT_index_texture 1 -GLAPI int GLAD_GL_EXT_index_texture; -#endif -#ifndef GL_EXT_light_texture +GLAD_API_CALL int GLAD_GL_EXT_index_texture; #define GL_EXT_light_texture 1 -GLAPI int GLAD_GL_EXT_light_texture; -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC)(GLenum mode); -GLAPI PFNGLAPPLYTEXTUREEXTPROC glad_glApplyTextureEXT; -#define glApplyTextureEXT glad_glApplyTextureEXT -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC)(GLenum pname); -GLAPI PFNGLTEXTURELIGHTEXTPROC glad_glTextureLightEXT; -#define glTextureLightEXT glad_glTextureLightEXT -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC)(GLenum face, GLenum mode); -GLAPI PFNGLTEXTUREMATERIALEXTPROC glad_glTextureMaterialEXT; -#define glTextureMaterialEXT glad_glTextureMaterialEXT -#endif -#ifndef GL_EXT_memory_object +GLAD_API_CALL int GLAD_GL_EXT_light_texture; #define GL_EXT_memory_object 1 -GLAPI int GLAD_GL_EXT_memory_object; -typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC)(GLenum pname, GLubyte *data); -GLAPI PFNGLGETUNSIGNEDBYTEVEXTPROC glad_glGetUnsignedBytevEXT; -#define glGetUnsignedBytevEXT glad_glGetUnsignedBytevEXT -typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC)(GLenum target, GLuint index, GLubyte *data); -GLAPI PFNGLGETUNSIGNEDBYTEI_VEXTPROC glad_glGetUnsignedBytei_vEXT; -#define glGetUnsignedBytei_vEXT glad_glGetUnsignedBytei_vEXT -typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC)(GLsizei n, const GLuint *memoryObjects); -GLAPI PFNGLDELETEMEMORYOBJECTSEXTPROC glad_glDeleteMemoryObjectsEXT; -#define glDeleteMemoryObjectsEXT glad_glDeleteMemoryObjectsEXT -typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC)(GLuint memoryObject); -GLAPI PFNGLISMEMORYOBJECTEXTPROC glad_glIsMemoryObjectEXT; -#define glIsMemoryObjectEXT glad_glIsMemoryObjectEXT -typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC)(GLsizei n, GLuint *memoryObjects); -GLAPI PFNGLCREATEMEMORYOBJECTSEXTPROC glad_glCreateMemoryObjectsEXT; -#define glCreateMemoryObjectsEXT glad_glCreateMemoryObjectsEXT -typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC)(GLuint memoryObject, GLenum pname, const GLint *params); -GLAPI PFNGLMEMORYOBJECTPARAMETERIVEXTPROC glad_glMemoryObjectParameterivEXT; -#define glMemoryObjectParameterivEXT glad_glMemoryObjectParameterivEXT -typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC)(GLuint memoryObject, GLenum pname, GLint *params); -GLAPI PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC glad_glGetMemoryObjectParameterivEXT; -#define glGetMemoryObjectParameterivEXT glad_glGetMemoryObjectParameterivEXT -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXSTORAGEMEM2DEXTPROC glad_glTexStorageMem2DEXT; -#define glTexStorageMem2DEXT glad_glTexStorageMem2DEXT -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTexStorageMem2DMultisampleEXT; -#define glTexStorageMem2DMultisampleEXT glad_glTexStorageMem2DMultisampleEXT -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXSTORAGEMEM3DEXTPROC glad_glTexStorageMem3DEXT; -#define glTexStorageMem3DEXT glad_glTexStorageMem3DEXT -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTexStorageMem3DMultisampleEXT; -#define glTexStorageMem3DMultisampleEXT glad_glTexStorageMem3DMultisampleEXT -typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC)(GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); -GLAPI PFNGLBUFFERSTORAGEMEMEXTPROC glad_glBufferStorageMemEXT; -#define glBufferStorageMemEXT glad_glBufferStorageMemEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXTURESTORAGEMEM2DEXTPROC glad_glTextureStorageMem2DEXT; -#define glTextureStorageMem2DEXT glad_glTextureStorageMem2DEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTextureStorageMem2DMultisampleEXT; -#define glTextureStorageMem2DMultisampleEXT glad_glTextureStorageMem2DMultisampleEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXTURESTORAGEMEM3DEXTPROC glad_glTextureStorageMem3DEXT; -#define glTextureStorageMem3DEXT glad_glTextureStorageMem3DEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTextureStorageMem3DMultisampleEXT; -#define glTextureStorageMem3DMultisampleEXT glad_glTextureStorageMem3DMultisampleEXT -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC)(GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); -GLAPI PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC glad_glNamedBufferStorageMemEXT; -#define glNamedBufferStorageMemEXT glad_glNamedBufferStorageMemEXT -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXSTORAGEMEM1DEXTPROC glad_glTexStorageMem1DEXT; -#define glTexStorageMem1DEXT glad_glTexStorageMem1DEXT -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -GLAPI PFNGLTEXTURESTORAGEMEM1DEXTPROC glad_glTextureStorageMem1DEXT; -#define glTextureStorageMem1DEXT glad_glTextureStorageMem1DEXT -#endif -#ifndef GL_EXT_memory_object_fd +GLAD_API_CALL int GLAD_GL_EXT_memory_object; #define GL_EXT_memory_object_fd 1 -GLAPI int GLAD_GL_EXT_memory_object_fd; -typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, GLint fd); -GLAPI PFNGLIMPORTMEMORYFDEXTPROC glad_glImportMemoryFdEXT; -#define glImportMemoryFdEXT glad_glImportMemoryFdEXT -#endif -#ifndef GL_EXT_memory_object_win32 +GLAD_API_CALL int GLAD_GL_EXT_memory_object_fd; #define GL_EXT_memory_object_win32 1 -GLAPI int GLAD_GL_EXT_memory_object_win32; -typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, void *handle); -GLAPI PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC glad_glImportMemoryWin32HandleEXT; -#define glImportMemoryWin32HandleEXT glad_glImportMemoryWin32HandleEXT -typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, const void *name); -GLAPI PFNGLIMPORTMEMORYWIN32NAMEEXTPROC glad_glImportMemoryWin32NameEXT; -#define glImportMemoryWin32NameEXT glad_glImportMemoryWin32NameEXT -#endif -#ifndef GL_EXT_misc_attribute +GLAD_API_CALL int GLAD_GL_EXT_memory_object_win32; #define GL_EXT_misc_attribute 1 -GLAPI int GLAD_GL_EXT_misc_attribute; -#endif -#ifndef GL_EXT_multi_draw_arrays +GLAD_API_CALL int GLAD_GL_EXT_misc_attribute; #define GL_EXT_multi_draw_arrays 1 -GLAPI int GLAD_GL_EXT_multi_draw_arrays; -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI PFNGLMULTIDRAWARRAYSEXTPROC glad_glMultiDrawArraysEXT; -#define glMultiDrawArraysEXT glad_glMultiDrawArraysEXT -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -GLAPI PFNGLMULTIDRAWELEMENTSEXTPROC glad_glMultiDrawElementsEXT; -#define glMultiDrawElementsEXT glad_glMultiDrawElementsEXT -#endif -#ifndef GL_EXT_multisample +GLAD_API_CALL int GLAD_GL_EXT_multi_draw_arrays; #define GL_EXT_multisample 1 -GLAPI int GLAD_GL_EXT_multisample; -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC)(GLclampf value, GLboolean invert); -GLAPI PFNGLSAMPLEMASKEXTPROC glad_glSampleMaskEXT; -#define glSampleMaskEXT glad_glSampleMaskEXT -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC)(GLenum pattern); -GLAPI PFNGLSAMPLEPATTERNEXTPROC glad_glSamplePatternEXT; -#define glSamplePatternEXT glad_glSamplePatternEXT -#endif -#ifndef GL_EXT_packed_depth_stencil +GLAD_API_CALL int GLAD_GL_EXT_multisample; +#define GL_EXT_multiview_tessellation_geometry_shader 1 +GLAD_API_CALL int GLAD_GL_EXT_multiview_tessellation_geometry_shader; +#define GL_EXT_multiview_texture_multisample 1 +GLAD_API_CALL int GLAD_GL_EXT_multiview_texture_multisample; +#define GL_EXT_multiview_timer_query 1 +GLAD_API_CALL int GLAD_GL_EXT_multiview_timer_query; #define GL_EXT_packed_depth_stencil 1 -GLAPI int GLAD_GL_EXT_packed_depth_stencil; -#endif -#ifndef GL_EXT_packed_float +GLAD_API_CALL int GLAD_GL_EXT_packed_depth_stencil; #define GL_EXT_packed_float 1 -GLAPI int GLAD_GL_EXT_packed_float; -#endif -#ifndef GL_EXT_packed_pixels +GLAD_API_CALL int GLAD_GL_EXT_packed_float; #define GL_EXT_packed_pixels 1 -GLAPI int GLAD_GL_EXT_packed_pixels; -#endif -#ifndef GL_EXT_paletted_texture +GLAD_API_CALL int GLAD_GL_EXT_packed_pixels; #define GL_EXT_paletted_texture 1 -GLAPI int GLAD_GL_EXT_paletted_texture; -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI PFNGLCOLORTABLEEXTPROC glad_glColorTableEXT; -#define glColorTableEXT glad_glColorTableEXT -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC)(GLenum target, GLenum format, GLenum type, void *data); -GLAPI PFNGLGETCOLORTABLEEXTPROC glad_glGetColorTableEXT; -#define glGetColorTableEXT glad_glGetColorTableEXT -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETCOLORTABLEPARAMETERIVEXTPROC glad_glGetColorTableParameterivEXT; -#define glGetColorTableParameterivEXT glad_glGetColorTableParameterivEXT -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCOLORTABLEPARAMETERFVEXTPROC glad_glGetColorTableParameterfvEXT; -#define glGetColorTableParameterfvEXT glad_glGetColorTableParameterfvEXT -#endif -#ifndef GL_EXT_pixel_buffer_object +GLAD_API_CALL int GLAD_GL_EXT_paletted_texture; #define GL_EXT_pixel_buffer_object 1 -GLAPI int GLAD_GL_EXT_pixel_buffer_object; -#endif -#ifndef GL_EXT_pixel_transform +GLAD_API_CALL int GLAD_GL_EXT_pixel_buffer_object; #define GL_EXT_pixel_transform 1 -GLAPI int GLAD_GL_EXT_pixel_transform; -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLPIXELTRANSFORMPARAMETERIEXTPROC glad_glPixelTransformParameteriEXT; -#define glPixelTransformParameteriEXT glad_glPixelTransformParameteriEXT -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLPIXELTRANSFORMPARAMETERFEXTPROC glad_glPixelTransformParameterfEXT; -#define glPixelTransformParameterfEXT glad_glPixelTransformParameterfEXT -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC glad_glPixelTransformParameterivEXT; -#define glPixelTransformParameterivEXT glad_glPixelTransformParameterivEXT -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC glad_glPixelTransformParameterfvEXT; -#define glPixelTransformParameterfvEXT glad_glPixelTransformParameterfvEXT -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC glad_glGetPixelTransformParameterivEXT; -#define glGetPixelTransformParameterivEXT glad_glGetPixelTransformParameterivEXT -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC glad_glGetPixelTransformParameterfvEXT; -#define glGetPixelTransformParameterfvEXT glad_glGetPixelTransformParameterfvEXT -#endif -#ifndef GL_EXT_pixel_transform_color_table +GLAD_API_CALL int GLAD_GL_EXT_pixel_transform; #define GL_EXT_pixel_transform_color_table 1 -GLAPI int GLAD_GL_EXT_pixel_transform_color_table; -#endif -#ifndef GL_EXT_point_parameters +GLAD_API_CALL int GLAD_GL_EXT_pixel_transform_color_table; #define GL_EXT_point_parameters 1 -GLAPI int GLAD_GL_EXT_point_parameters; -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPOINTPARAMETERFEXTPROC glad_glPointParameterfEXT; -#define glPointParameterfEXT glad_glPointParameterfEXT -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLPOINTPARAMETERFVEXTPROC glad_glPointParameterfvEXT; -#define glPointParameterfvEXT glad_glPointParameterfvEXT -#endif -#ifndef GL_EXT_polygon_offset +GLAD_API_CALL int GLAD_GL_EXT_point_parameters; #define GL_EXT_polygon_offset 1 -GLAPI int GLAD_GL_EXT_polygon_offset; -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC)(GLfloat factor, GLfloat bias); -GLAPI PFNGLPOLYGONOFFSETEXTPROC glad_glPolygonOffsetEXT; -#define glPolygonOffsetEXT glad_glPolygonOffsetEXT -#endif -#ifndef GL_EXT_polygon_offset_clamp +GLAD_API_CALL int GLAD_GL_EXT_polygon_offset; #define GL_EXT_polygon_offset_clamp 1 -GLAPI int GLAD_GL_EXT_polygon_offset_clamp; -typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC)(GLfloat factor, GLfloat units, GLfloat clamp); -GLAPI PFNGLPOLYGONOFFSETCLAMPEXTPROC glad_glPolygonOffsetClampEXT; -#define glPolygonOffsetClampEXT glad_glPolygonOffsetClampEXT -#endif -#ifndef GL_EXT_post_depth_coverage +GLAD_API_CALL int GLAD_GL_EXT_polygon_offset_clamp; #define GL_EXT_post_depth_coverage 1 -GLAPI int GLAD_GL_EXT_post_depth_coverage; -#endif -#ifndef GL_EXT_provoking_vertex +GLAD_API_CALL int GLAD_GL_EXT_post_depth_coverage; #define GL_EXT_provoking_vertex 1 -GLAPI int GLAD_GL_EXT_provoking_vertex; -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode); -GLAPI PFNGLPROVOKINGVERTEXEXTPROC glad_glProvokingVertexEXT; -#define glProvokingVertexEXT glad_glProvokingVertexEXT -#endif -#ifndef GL_EXT_raster_multisample +GLAD_API_CALL int GLAD_GL_EXT_provoking_vertex; #define GL_EXT_raster_multisample 1 -GLAPI int GLAD_GL_EXT_raster_multisample; -typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC)(GLuint samples, GLboolean fixedsamplelocations); -GLAPI PFNGLRASTERSAMPLESEXTPROC glad_glRasterSamplesEXT; -#define glRasterSamplesEXT glad_glRasterSamplesEXT -#endif -#ifndef GL_EXT_rescale_normal +GLAD_API_CALL int GLAD_GL_EXT_raster_multisample; #define GL_EXT_rescale_normal 1 -GLAPI int GLAD_GL_EXT_rescale_normal; -#endif -#ifndef GL_EXT_secondary_color +GLAD_API_CALL int GLAD_GL_EXT_rescale_normal; #define GL_EXT_secondary_color 1 -GLAPI int GLAD_GL_EXT_secondary_color; -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC)(GLbyte red, GLbyte green, GLbyte blue); -GLAPI PFNGLSECONDARYCOLOR3BEXTPROC glad_glSecondaryColor3bEXT; -#define glSecondaryColor3bEXT glad_glSecondaryColor3bEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC)(const GLbyte *v); -GLAPI PFNGLSECONDARYCOLOR3BVEXTPROC glad_glSecondaryColor3bvEXT; -#define glSecondaryColor3bvEXT glad_glSecondaryColor3bvEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC)(GLdouble red, GLdouble green, GLdouble blue); -GLAPI PFNGLSECONDARYCOLOR3DEXTPROC glad_glSecondaryColor3dEXT; -#define glSecondaryColor3dEXT glad_glSecondaryColor3dEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC)(const GLdouble *v); -GLAPI PFNGLSECONDARYCOLOR3DVEXTPROC glad_glSecondaryColor3dvEXT; -#define glSecondaryColor3dvEXT glad_glSecondaryColor3dvEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue); -GLAPI PFNGLSECONDARYCOLOR3FEXTPROC glad_glSecondaryColor3fEXT; -#define glSecondaryColor3fEXT glad_glSecondaryColor3fEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat *v); -GLAPI PFNGLSECONDARYCOLOR3FVEXTPROC glad_glSecondaryColor3fvEXT; -#define glSecondaryColor3fvEXT glad_glSecondaryColor3fvEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC)(GLint red, GLint green, GLint blue); -GLAPI PFNGLSECONDARYCOLOR3IEXTPROC glad_glSecondaryColor3iEXT; -#define glSecondaryColor3iEXT glad_glSecondaryColor3iEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC)(const GLint *v); -GLAPI PFNGLSECONDARYCOLOR3IVEXTPROC glad_glSecondaryColor3ivEXT; -#define glSecondaryColor3ivEXT glad_glSecondaryColor3ivEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC)(GLshort red, GLshort green, GLshort blue); -GLAPI PFNGLSECONDARYCOLOR3SEXTPROC glad_glSecondaryColor3sEXT; -#define glSecondaryColor3sEXT glad_glSecondaryColor3sEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC)(const GLshort *v); -GLAPI PFNGLSECONDARYCOLOR3SVEXTPROC glad_glSecondaryColor3svEXT; -#define glSecondaryColor3svEXT glad_glSecondaryColor3svEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue); -GLAPI PFNGLSECONDARYCOLOR3UBEXTPROC glad_glSecondaryColor3ubEXT; -#define glSecondaryColor3ubEXT glad_glSecondaryColor3ubEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte *v); -GLAPI PFNGLSECONDARYCOLOR3UBVEXTPROC glad_glSecondaryColor3ubvEXT; -#define glSecondaryColor3ubvEXT glad_glSecondaryColor3ubvEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC)(GLuint red, GLuint green, GLuint blue); -GLAPI PFNGLSECONDARYCOLOR3UIEXTPROC glad_glSecondaryColor3uiEXT; -#define glSecondaryColor3uiEXT glad_glSecondaryColor3uiEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC)(const GLuint *v); -GLAPI PFNGLSECONDARYCOLOR3UIVEXTPROC glad_glSecondaryColor3uivEXT; -#define glSecondaryColor3uivEXT glad_glSecondaryColor3uivEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC)(GLushort red, GLushort green, GLushort blue); -GLAPI PFNGLSECONDARYCOLOR3USEXTPROC glad_glSecondaryColor3usEXT; -#define glSecondaryColor3usEXT glad_glSecondaryColor3usEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC)(const GLushort *v); -GLAPI PFNGLSECONDARYCOLOR3USVEXTPROC glad_glSecondaryColor3usvEXT; -#define glSecondaryColor3usvEXT glad_glSecondaryColor3usvEXT -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLSECONDARYCOLORPOINTEREXTPROC glad_glSecondaryColorPointerEXT; -#define glSecondaryColorPointerEXT glad_glSecondaryColorPointerEXT -#endif -#ifndef GL_EXT_semaphore +GLAD_API_CALL int GLAD_GL_EXT_secondary_color; #define GL_EXT_semaphore 1 -GLAPI int GLAD_GL_EXT_semaphore; -typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC)(GLsizei n, GLuint *semaphores); -GLAPI PFNGLGENSEMAPHORESEXTPROC glad_glGenSemaphoresEXT; -#define glGenSemaphoresEXT glad_glGenSemaphoresEXT -typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC)(GLsizei n, const GLuint *semaphores); -GLAPI PFNGLDELETESEMAPHORESEXTPROC glad_glDeleteSemaphoresEXT; -#define glDeleteSemaphoresEXT glad_glDeleteSemaphoresEXT -typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC)(GLuint semaphore); -GLAPI PFNGLISSEMAPHOREEXTPROC glad_glIsSemaphoreEXT; -#define glIsSemaphoreEXT glad_glIsSemaphoreEXT -typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC)(GLuint semaphore, GLenum pname, const GLuint64 *params); -GLAPI PFNGLSEMAPHOREPARAMETERUI64VEXTPROC glad_glSemaphoreParameterui64vEXT; -#define glSemaphoreParameterui64vEXT glad_glSemaphoreParameterui64vEXT -typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC)(GLuint semaphore, GLenum pname, GLuint64 *params); -GLAPI PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC glad_glGetSemaphoreParameterui64vEXT; -#define glGetSemaphoreParameterui64vEXT glad_glGetSemaphoreParameterui64vEXT -typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC)(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); -GLAPI PFNGLWAITSEMAPHOREEXTPROC glad_glWaitSemaphoreEXT; -#define glWaitSemaphoreEXT glad_glWaitSemaphoreEXT -typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC)(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); -GLAPI PFNGLSIGNALSEMAPHOREEXTPROC glad_glSignalSemaphoreEXT; -#define glSignalSemaphoreEXT glad_glSignalSemaphoreEXT -#endif -#ifndef GL_EXT_semaphore_fd +GLAD_API_CALL int GLAD_GL_EXT_semaphore; #define GL_EXT_semaphore_fd 1 -GLAPI int GLAD_GL_EXT_semaphore_fd; -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC)(GLuint semaphore, GLenum handleType, GLint fd); -GLAPI PFNGLIMPORTSEMAPHOREFDEXTPROC glad_glImportSemaphoreFdEXT; -#define glImportSemaphoreFdEXT glad_glImportSemaphoreFdEXT -#endif -#ifndef GL_EXT_semaphore_win32 +GLAD_API_CALL int GLAD_GL_EXT_semaphore_fd; #define GL_EXT_semaphore_win32 1 -GLAPI int GLAD_GL_EXT_semaphore_win32; -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC)(GLuint semaphore, GLenum handleType, void *handle); -GLAPI PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC glad_glImportSemaphoreWin32HandleEXT; -#define glImportSemaphoreWin32HandleEXT glad_glImportSemaphoreWin32HandleEXT -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC)(GLuint semaphore, GLenum handleType, const void *name); -GLAPI PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC glad_glImportSemaphoreWin32NameEXT; -#define glImportSemaphoreWin32NameEXT glad_glImportSemaphoreWin32NameEXT -#endif -#ifndef GL_EXT_separate_shader_objects +GLAD_API_CALL int GLAD_GL_EXT_semaphore_win32; #define GL_EXT_separate_shader_objects 1 -GLAPI int GLAD_GL_EXT_separate_shader_objects; -typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC)(GLenum type, GLuint program); -GLAPI PFNGLUSESHADERPROGRAMEXTPROC glad_glUseShaderProgramEXT; -#define glUseShaderProgramEXT glad_glUseShaderProgramEXT -typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC)(GLuint program); -GLAPI PFNGLACTIVEPROGRAMEXTPROC glad_glActiveProgramEXT; -#define glActiveProgramEXT glad_glActiveProgramEXT -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC)(GLenum type, const GLchar *string); -GLAPI PFNGLCREATESHADERPROGRAMEXTPROC glad_glCreateShaderProgramEXT; -#define glCreateShaderProgramEXT glad_glCreateShaderProgramEXT -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC)(GLuint pipeline, GLuint program); -GLAPI PFNGLACTIVESHADERPROGRAMEXTPROC glad_glActiveShaderProgramEXT; -#define glActiveShaderProgramEXT glad_glActiveShaderProgramEXT -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC)(GLuint pipeline); -GLAPI PFNGLBINDPROGRAMPIPELINEEXTPROC glad_glBindProgramPipelineEXT; -#define glBindProgramPipelineEXT glad_glBindProgramPipelineEXT -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC)(GLenum type, GLsizei count, const GLchar **strings); -GLAPI PFNGLCREATESHADERPROGRAMVEXTPROC glad_glCreateShaderProgramvEXT; -#define glCreateShaderProgramvEXT glad_glCreateShaderProgramvEXT -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC)(GLsizei n, const GLuint *pipelines); -GLAPI PFNGLDELETEPROGRAMPIPELINESEXTPROC glad_glDeleteProgramPipelinesEXT; -#define glDeleteProgramPipelinesEXT glad_glDeleteProgramPipelinesEXT -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC)(GLsizei n, GLuint *pipelines); -GLAPI PFNGLGENPROGRAMPIPELINESEXTPROC glad_glGenProgramPipelinesEXT; -#define glGenProgramPipelinesEXT glad_glGenProgramPipelinesEXT -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC)(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC glad_glGetProgramPipelineInfoLogEXT; -#define glGetProgramPipelineInfoLogEXT glad_glGetProgramPipelineInfoLogEXT -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC)(GLuint pipeline, GLenum pname, GLint *params); -GLAPI PFNGLGETPROGRAMPIPELINEIVEXTPROC glad_glGetProgramPipelineivEXT; -#define glGetProgramPipelineivEXT glad_glGetProgramPipelineivEXT -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC)(GLuint pipeline); -GLAPI PFNGLISPROGRAMPIPELINEEXTPROC glad_glIsProgramPipelineEXT; -#define glIsProgramPipelineEXT glad_glIsProgramPipelineEXT -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC)(GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI PFNGLUSEPROGRAMSTAGESEXTPROC glad_glUseProgramStagesEXT; -#define glUseProgramStagesEXT glad_glUseProgramStagesEXT -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC)(GLuint pipeline); -GLAPI PFNGLVALIDATEPROGRAMPIPELINEEXTPROC glad_glValidateProgramPipelineEXT; -#define glValidateProgramPipelineEXT glad_glValidateProgramPipelineEXT -#endif -#ifndef GL_EXT_separate_specular_color +GLAD_API_CALL int GLAD_GL_EXT_separate_shader_objects; #define GL_EXT_separate_specular_color 1 -GLAPI int GLAD_GL_EXT_separate_specular_color; -#endif -#ifndef GL_EXT_shader_framebuffer_fetch +GLAD_API_CALL int GLAD_GL_EXT_separate_specular_color; #define GL_EXT_shader_framebuffer_fetch 1 -GLAPI int GLAD_GL_EXT_shader_framebuffer_fetch; -#endif -#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent +GLAD_API_CALL int GLAD_GL_EXT_shader_framebuffer_fetch; #define GL_EXT_shader_framebuffer_fetch_non_coherent 1 -GLAPI int GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent; -typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC)(void); -GLAPI PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC glad_glFramebufferFetchBarrierEXT; -#define glFramebufferFetchBarrierEXT glad_glFramebufferFetchBarrierEXT -#endif -#ifndef GL_EXT_shader_image_load_formatted +GLAD_API_CALL int GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent; #define GL_EXT_shader_image_load_formatted 1 -GLAPI int GLAD_GL_EXT_shader_image_load_formatted; -#endif -#ifndef GL_EXT_shader_image_load_store +GLAD_API_CALL int GLAD_GL_EXT_shader_image_load_formatted; #define GL_EXT_shader_image_load_store 1 -GLAPI int GLAD_GL_EXT_shader_image_load_store; -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC)(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -GLAPI PFNGLBINDIMAGETEXTUREEXTPROC glad_glBindImageTextureEXT; -#define glBindImageTextureEXT glad_glBindImageTextureEXT -typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC)(GLbitfield barriers); -GLAPI PFNGLMEMORYBARRIEREXTPROC glad_glMemoryBarrierEXT; -#define glMemoryBarrierEXT glad_glMemoryBarrierEXT -#endif -#ifndef GL_EXT_shader_integer_mix +GLAD_API_CALL int GLAD_GL_EXT_shader_image_load_store; #define GL_EXT_shader_integer_mix 1 -GLAPI int GLAD_GL_EXT_shader_integer_mix; -#endif -#ifndef GL_EXT_shadow_funcs +GLAD_API_CALL int GLAD_GL_EXT_shader_integer_mix; +#define GL_EXT_shader_samples_identical 1 +GLAD_API_CALL int GLAD_GL_EXT_shader_samples_identical; #define GL_EXT_shadow_funcs 1 -GLAPI int GLAD_GL_EXT_shadow_funcs; -#endif -#ifndef GL_EXT_shared_texture_palette +GLAD_API_CALL int GLAD_GL_EXT_shadow_funcs; #define GL_EXT_shared_texture_palette 1 -GLAPI int GLAD_GL_EXT_shared_texture_palette; -#endif -#ifndef GL_EXT_sparse_texture2 +GLAD_API_CALL int GLAD_GL_EXT_shared_texture_palette; #define GL_EXT_sparse_texture2 1 -GLAPI int GLAD_GL_EXT_sparse_texture2; -#endif -#ifndef GL_EXT_stencil_clear_tag +GLAD_API_CALL int GLAD_GL_EXT_sparse_texture2; #define GL_EXT_stencil_clear_tag 1 -GLAPI int GLAD_GL_EXT_stencil_clear_tag; -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC)(GLsizei stencilTagBits, GLuint stencilClearTag); -GLAPI PFNGLSTENCILCLEARTAGEXTPROC glad_glStencilClearTagEXT; -#define glStencilClearTagEXT glad_glStencilClearTagEXT -#endif -#ifndef GL_EXT_stencil_two_side +GLAD_API_CALL int GLAD_GL_EXT_stencil_clear_tag; #define GL_EXT_stencil_two_side 1 -GLAPI int GLAD_GL_EXT_stencil_two_side; -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC)(GLenum face); -GLAPI PFNGLACTIVESTENCILFACEEXTPROC glad_glActiveStencilFaceEXT; -#define glActiveStencilFaceEXT glad_glActiveStencilFaceEXT -#endif -#ifndef GL_EXT_stencil_wrap +GLAD_API_CALL int GLAD_GL_EXT_stencil_two_side; #define GL_EXT_stencil_wrap 1 -GLAPI int GLAD_GL_EXT_stencil_wrap; -#endif -#ifndef GL_EXT_subtexture +GLAD_API_CALL int GLAD_GL_EXT_stencil_wrap; #define GL_EXT_subtexture 1 -GLAPI int GLAD_GL_EXT_subtexture; -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE1DEXTPROC glad_glTexSubImage1DEXT; -#define glTexSubImage1DEXT glad_glTexSubImage1DEXT -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE2DEXTPROC glad_glTexSubImage2DEXT; -#define glTexSubImage2DEXT glad_glTexSubImage2DEXT -#endif -#ifndef GL_EXT_texture +GLAD_API_CALL int GLAD_GL_EXT_subtexture; #define GL_EXT_texture 1 -GLAPI int GLAD_GL_EXT_texture; -#endif -#ifndef GL_EXT_texture3D +GLAD_API_CALL int GLAD_GL_EXT_texture; #define GL_EXT_texture3D 1 -GLAPI int GLAD_GL_EXT_texture3D; -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE3DEXTPROC glad_glTexImage3DEXT; -#define glTexImage3DEXT glad_glTexImage3DEXT -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE3DEXTPROC glad_glTexSubImage3DEXT; -#define glTexSubImage3DEXT glad_glTexSubImage3DEXT -#endif -#ifndef GL_EXT_texture_array +GLAD_API_CALL int GLAD_GL_EXT_texture3D; #define GL_EXT_texture_array 1 -GLAPI int GLAD_GL_EXT_texture_array; -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glad_glFramebufferTextureLayerEXT; -#define glFramebufferTextureLayerEXT glad_glFramebufferTextureLayerEXT -#endif -#ifndef GL_EXT_texture_buffer_object +GLAD_API_CALL int GLAD_GL_EXT_texture_array; #define GL_EXT_texture_buffer_object 1 -GLAPI int GLAD_GL_EXT_texture_buffer_object; -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC)(GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXBUFFEREXTPROC glad_glTexBufferEXT; -#define glTexBufferEXT glad_glTexBufferEXT -#endif -#ifndef GL_EXT_texture_compression_latc +GLAD_API_CALL int GLAD_GL_EXT_texture_buffer_object; #define GL_EXT_texture_compression_latc 1 -GLAPI int GLAD_GL_EXT_texture_compression_latc; -#endif -#ifndef GL_EXT_texture_compression_rgtc +GLAD_API_CALL int GLAD_GL_EXT_texture_compression_latc; #define GL_EXT_texture_compression_rgtc 1 -GLAPI int GLAD_GL_EXT_texture_compression_rgtc; -#endif -#ifndef GL_EXT_texture_compression_s3tc +GLAD_API_CALL int GLAD_GL_EXT_texture_compression_rgtc; #define GL_EXT_texture_compression_s3tc 1 -GLAPI int GLAD_GL_EXT_texture_compression_s3tc; -#endif -#ifndef GL_EXT_texture_cube_map +GLAD_API_CALL int GLAD_GL_EXT_texture_compression_s3tc; #define GL_EXT_texture_cube_map 1 -GLAPI int GLAD_GL_EXT_texture_cube_map; -#endif -#ifndef GL_EXT_texture_env_add +GLAD_API_CALL int GLAD_GL_EXT_texture_cube_map; #define GL_EXT_texture_env_add 1 -GLAPI int GLAD_GL_EXT_texture_env_add; -#endif -#ifndef GL_EXT_texture_env_combine +GLAD_API_CALL int GLAD_GL_EXT_texture_env_add; #define GL_EXT_texture_env_combine 1 -GLAPI int GLAD_GL_EXT_texture_env_combine; -#endif -#ifndef GL_EXT_texture_env_dot3 +GLAD_API_CALL int GLAD_GL_EXT_texture_env_combine; #define GL_EXT_texture_env_dot3 1 -GLAPI int GLAD_GL_EXT_texture_env_dot3; -#endif -#ifndef GL_EXT_texture_filter_anisotropic +GLAD_API_CALL int GLAD_GL_EXT_texture_env_dot3; #define GL_EXT_texture_filter_anisotropic 1 -GLAPI int GLAD_GL_EXT_texture_filter_anisotropic; -#endif -#ifndef GL_EXT_texture_filter_minmax +GLAD_API_CALL int GLAD_GL_EXT_texture_filter_anisotropic; #define GL_EXT_texture_filter_minmax 1 -GLAPI int GLAD_GL_EXT_texture_filter_minmax; -#endif -#ifndef GL_EXT_texture_integer +GLAD_API_CALL int GLAD_GL_EXT_texture_filter_minmax; #define GL_EXT_texture_integer 1 -GLAPI int GLAD_GL_EXT_texture_integer; -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXPARAMETERIIVEXTPROC glad_glTexParameterIivEXT; -#define glTexParameterIivEXT glad_glTexParameterIivEXT -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, const GLuint *params); -GLAPI PFNGLTEXPARAMETERIUIVEXTPROC glad_glTexParameterIuivEXT; -#define glTexParameterIuivEXT glad_glTexParameterIuivEXT -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXPARAMETERIIVEXTPROC glad_glGetTexParameterIivEXT; -#define glGetTexParameterIivEXT glad_glGetTexParameterIivEXT -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, GLuint *params); -GLAPI PFNGLGETTEXPARAMETERIUIVEXTPROC glad_glGetTexParameterIuivEXT; -#define glGetTexParameterIuivEXT glad_glGetTexParameterIuivEXT -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC)(GLint red, GLint green, GLint blue, GLint alpha); -GLAPI PFNGLCLEARCOLORIIEXTPROC glad_glClearColorIiEXT; -#define glClearColorIiEXT glad_glClearColorIiEXT -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); -GLAPI PFNGLCLEARCOLORIUIEXTPROC glad_glClearColorIuiEXT; -#define glClearColorIuiEXT glad_glClearColorIuiEXT -#endif -#ifndef GL_EXT_texture_lod_bias +GLAD_API_CALL int GLAD_GL_EXT_texture_integer; #define GL_EXT_texture_lod_bias 1 -GLAPI int GLAD_GL_EXT_texture_lod_bias; -#endif -#ifndef GL_EXT_texture_mirror_clamp +GLAD_API_CALL int GLAD_GL_EXT_texture_lod_bias; #define GL_EXT_texture_mirror_clamp 1 -GLAPI int GLAD_GL_EXT_texture_mirror_clamp; -#endif -#ifndef GL_EXT_texture_object +GLAD_API_CALL int GLAD_GL_EXT_texture_mirror_clamp; #define GL_EXT_texture_object 1 -GLAPI int GLAD_GL_EXT_texture_object; -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC)(GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI PFNGLARETEXTURESRESIDENTEXTPROC glad_glAreTexturesResidentEXT; -#define glAreTexturesResidentEXT glad_glAreTexturesResidentEXT -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC)(GLenum target, GLuint texture); -GLAPI PFNGLBINDTEXTUREEXTPROC glad_glBindTextureEXT; -#define glBindTextureEXT glad_glBindTextureEXT -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC)(GLsizei n, const GLuint *textures); -GLAPI PFNGLDELETETEXTURESEXTPROC glad_glDeleteTexturesEXT; -#define glDeleteTexturesEXT glad_glDeleteTexturesEXT -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC)(GLsizei n, GLuint *textures); -GLAPI PFNGLGENTEXTURESEXTPROC glad_glGenTexturesEXT; -#define glGenTexturesEXT glad_glGenTexturesEXT -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC)(GLuint texture); -GLAPI PFNGLISTEXTUREEXTPROC glad_glIsTextureEXT; -#define glIsTextureEXT glad_glIsTextureEXT -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC)(GLsizei n, const GLuint *textures, const GLclampf *priorities); -GLAPI PFNGLPRIORITIZETEXTURESEXTPROC glad_glPrioritizeTexturesEXT; -#define glPrioritizeTexturesEXT glad_glPrioritizeTexturesEXT -#endif -#ifndef GL_EXT_texture_perturb_normal +GLAD_API_CALL int GLAD_GL_EXT_texture_object; #define GL_EXT_texture_perturb_normal 1 -GLAPI int GLAD_GL_EXT_texture_perturb_normal; -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC)(GLenum mode); -GLAPI PFNGLTEXTURENORMALEXTPROC glad_glTextureNormalEXT; -#define glTextureNormalEXT glad_glTextureNormalEXT -#endif -#ifndef GL_EXT_texture_sRGB +GLAD_API_CALL int GLAD_GL_EXT_texture_perturb_normal; #define GL_EXT_texture_sRGB 1 -GLAPI int GLAD_GL_EXT_texture_sRGB; -#endif -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -GLAPI int GLAD_GL_EXT_texture_sRGB_decode; -#endif -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -GLAPI int GLAD_GL_EXT_texture_shared_exponent; -#endif -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 -GLAPI int GLAD_GL_EXT_texture_snorm; -#endif -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -GLAPI int GLAD_GL_EXT_texture_swizzle; -#endif -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -GLAPI int GLAD_GL_EXT_timer_query; -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC)(GLuint id, GLenum pname, GLint64 *params); -GLAPI PFNGLGETQUERYOBJECTI64VEXTPROC glad_glGetQueryObjecti64vEXT; -#define glGetQueryObjecti64vEXT glad_glGetQueryObjecti64vEXT -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC)(GLuint id, GLenum pname, GLuint64 *params); -GLAPI PFNGLGETQUERYOBJECTUI64VEXTPROC glad_glGetQueryObjectui64vEXT; -#define glGetQueryObjectui64vEXT glad_glGetQueryObjectui64vEXT -#endif -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 -GLAPI int GLAD_GL_EXT_transform_feedback; -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)(GLenum primitiveMode); -GLAPI PFNGLBEGINTRANSFORMFEEDBACKEXTPROC glad_glBeginTransformFeedbackEXT; -#define glBeginTransformFeedbackEXT glad_glBeginTransformFeedbackEXT -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC)(void); -GLAPI PFNGLENDTRANSFORMFEEDBACKEXTPROC glad_glEndTransformFeedbackEXT; -#define glEndTransformFeedbackEXT glad_glEndTransformFeedbackEXT -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLBINDBUFFERRANGEEXTPROC glad_glBindBufferRangeEXT; -#define glBindBufferRangeEXT glad_glBindBufferRangeEXT -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI PFNGLBINDBUFFEROFFSETEXTPROC glad_glBindBufferOffsetEXT; -#define glBindBufferOffsetEXT glad_glBindBufferOffsetEXT -typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC)(GLenum target, GLuint index, GLuint buffer); -GLAPI PFNGLBINDBUFFERBASEEXTPROC glad_glBindBufferBaseEXT; -#define glBindBufferBaseEXT glad_glBindBufferBaseEXT -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC glad_glTransformFeedbackVaryingsEXT; -#define glTransformFeedbackVaryingsEXT glad_glTransformFeedbackVaryingsEXT -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC glad_glGetTransformFeedbackVaryingEXT; -#define glGetTransformFeedbackVaryingEXT glad_glGetTransformFeedbackVaryingEXT -#endif -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -GLAPI int GLAD_GL_EXT_vertex_array; -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC)(GLint i); -GLAPI PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT; -#define glArrayElementEXT glad_glArrayElementEXT -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT; -#define glColorPointerEXT glad_glColorPointerEXT -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); -GLAPI PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT; -#define glDrawArraysEXT glad_glDrawArraysEXT -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, const GLboolean *pointer); -GLAPI PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT; -#define glEdgeFlagPointerEXT glad_glEdgeFlagPointerEXT -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC)(GLenum pname, void **params); -GLAPI PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT; -#define glGetPointervEXT glad_glGetPointervEXT -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT; -#define glIndexPointerEXT glad_glIndexPointerEXT -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT; -#define glNormalPointerEXT glad_glNormalPointerEXT -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT; -#define glTexCoordPointerEXT glad_glTexCoordPointerEXT -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT; -#define glVertexPointerEXT glad_glVertexPointerEXT -#endif -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 -GLAPI int GLAD_GL_EXT_vertex_array_bgra; -#endif -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 -GLAPI int GLAD_GL_EXT_vertex_attrib_64bit; -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIBL1DEXTPROC glad_glVertexAttribL1dEXT; -#define glVertexAttribL1dEXT glad_glVertexAttribL1dEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIBL2DEXTPROC glad_glVertexAttribL2dEXT; -#define glVertexAttribL2dEXT glad_glVertexAttribL2dEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIBL3DEXTPROC glad_glVertexAttribL3dEXT; -#define glVertexAttribL3dEXT glad_glVertexAttribL3dEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIBL4DEXTPROC glad_glVertexAttribL4dEXT; -#define glVertexAttribL4dEXT glad_glVertexAttribL4dEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL1DVEXTPROC glad_glVertexAttribL1dvEXT; -#define glVertexAttribL1dvEXT glad_glVertexAttribL1dvEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL2DVEXTPROC glad_glVertexAttribL2dvEXT; -#define glVertexAttribL2dvEXT glad_glVertexAttribL2dvEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL3DVEXTPROC glad_glVertexAttribL3dvEXT; -#define glVertexAttribL3dvEXT glad_glVertexAttribL3dvEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBL4DVEXTPROC glad_glVertexAttribL4dvEXT; -#define glVertexAttribL4dvEXT glad_glVertexAttribL4dvEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBLPOINTEREXTPROC glad_glVertexAttribLPointerEXT; -#define glVertexAttribLPointerEXT glad_glVertexAttribLPointerEXT -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC)(GLuint index, GLenum pname, GLdouble *params); -GLAPI PFNGLGETVERTEXATTRIBLDVEXTPROC glad_glGetVertexAttribLdvEXT; -#define glGetVertexAttribLdvEXT glad_glGetVertexAttribLdvEXT -#endif -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -GLAPI int GLAD_GL_EXT_vertex_shader; -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC)(void); -GLAPI PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT; -#define glBeginVertexShaderEXT glad_glBeginVertexShaderEXT -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC)(void); -GLAPI PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT; -#define glEndVertexShaderEXT glad_glEndVertexShaderEXT -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); -GLAPI PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT; -#define glBindVertexShaderEXT glad_glBindVertexShaderEXT -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); -GLAPI PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT; -#define glGenVertexShadersEXT glad_glGenVertexShadersEXT -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); -GLAPI PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT; -#define glDeleteVertexShaderEXT glad_glDeleteVertexShaderEXT -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); -GLAPI PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT; -#define glShaderOp1EXT glad_glShaderOp1EXT -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT; -#define glShaderOp2EXT glad_glShaderOp2EXT -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT; -#define glShaderOp3EXT glad_glShaderOp3EXT -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT; -#define glSwizzleEXT glad_glSwizzleEXT -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT; -#define glWriteMaskEXT glad_glWriteMaskEXT -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); -GLAPI PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT; -#define glInsertComponentEXT glad_glInsertComponentEXT -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); -GLAPI PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT; -#define glExtractComponentEXT glad_glExtractComponentEXT -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT; -#define glGenSymbolsEXT glad_glGenSymbolsEXT -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, const void *addr); -GLAPI PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT; -#define glSetInvariantEXT glad_glSetInvariantEXT -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, const void *addr); -GLAPI PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT; -#define glSetLocalConstantEXT glad_glSetLocalConstantEXT -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC)(GLuint id, const GLbyte *addr); -GLAPI PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT; -#define glVariantbvEXT glad_glVariantbvEXT -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC)(GLuint id, const GLshort *addr); -GLAPI PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT; -#define glVariantsvEXT glad_glVariantsvEXT -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC)(GLuint id, const GLint *addr); -GLAPI PFNGLVARIANTIVEXTPROC glad_glVariantivEXT; -#define glVariantivEXT glad_glVariantivEXT -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC)(GLuint id, const GLfloat *addr); -GLAPI PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT; -#define glVariantfvEXT glad_glVariantfvEXT -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC)(GLuint id, const GLdouble *addr); -GLAPI PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT; -#define glVariantdvEXT glad_glVariantdvEXT -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC)(GLuint id, const GLubyte *addr); -GLAPI PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT; -#define glVariantubvEXT glad_glVariantubvEXT -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC)(GLuint id, const GLushort *addr); -GLAPI PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT; -#define glVariantusvEXT glad_glVariantusvEXT -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC)(GLuint id, const GLuint *addr); -GLAPI PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT; -#define glVariantuivEXT glad_glVariantuivEXT -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, const void *addr); -GLAPI PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT; -#define glVariantPointerEXT glad_glVariantPointerEXT -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); -GLAPI PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT; -#define glEnableVariantClientStateEXT glad_glEnableVariantClientStateEXT -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); -GLAPI PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT; -#define glDisableVariantClientStateEXT glad_glDisableVariantClientStateEXT -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); -GLAPI PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT; -#define glBindLightParameterEXT glad_glBindLightParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); -GLAPI PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT; -#define glBindMaterialParameterEXT glad_glBindMaterialParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, GLenum value); -GLAPI PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT; -#define glBindTexGenParameterEXT glad_glBindTexGenParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); -GLAPI PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT; -#define glBindTextureUnitParameterEXT glad_glBindTextureUnitParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC)(GLenum value); -GLAPI PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT; -#define glBindParameterEXT glad_glBindParameterEXT -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); -GLAPI PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT; -#define glIsVariantEnabledEXT glad_glIsVariantEnabledEXT -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean *data); -GLAPI PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT; -#define glGetVariantBooleanvEXT glad_glGetVariantBooleanvEXT -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint *data); -GLAPI PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT; -#define glGetVariantIntegervEXT glad_glGetVariantIntegervEXT -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat *data); -GLAPI PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT; -#define glGetVariantFloatvEXT glad_glGetVariantFloatvEXT -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, void **data); -GLAPI PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT; -#define glGetVariantPointervEXT glad_glGetVariantPointervEXT -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean *data); -GLAPI PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT; -#define glGetInvariantBooleanvEXT glad_glGetInvariantBooleanvEXT -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint *data); -GLAPI PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT; -#define glGetInvariantIntegervEXT glad_glGetInvariantIntegervEXT -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat *data); -GLAPI PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT; -#define glGetInvariantFloatvEXT glad_glGetInvariantFloatvEXT -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean *data); -GLAPI PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT; -#define glGetLocalConstantBooleanvEXT glad_glGetLocalConstantBooleanvEXT -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint *data); -GLAPI PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT; -#define glGetLocalConstantIntegervEXT glad_glGetLocalConstantIntegervEXT -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat *data); -GLAPI PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT; -#define glGetLocalConstantFloatvEXT glad_glGetLocalConstantFloatvEXT -#endif -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -GLAPI int GLAD_GL_EXT_vertex_weighting; -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC)(GLfloat weight); -GLAPI PFNGLVERTEXWEIGHTFEXTPROC glad_glVertexWeightfEXT; -#define glVertexWeightfEXT glad_glVertexWeightfEXT -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC)(const GLfloat *weight); -GLAPI PFNGLVERTEXWEIGHTFVEXTPROC glad_glVertexWeightfvEXT; -#define glVertexWeightfvEXT glad_glVertexWeightfvEXT -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXWEIGHTPOINTEREXTPROC glad_glVertexWeightPointerEXT; -#define glVertexWeightPointerEXT glad_glVertexWeightPointerEXT -#endif -#ifndef GL_EXT_win32_keyed_mutex -#define GL_EXT_win32_keyed_mutex 1 -GLAPI int GLAD_GL_EXT_win32_keyed_mutex; -typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC)(GLuint memory, GLuint64 key, GLuint timeout); -GLAPI PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC glad_glAcquireKeyedMutexWin32EXT; -#define glAcquireKeyedMutexWin32EXT glad_glAcquireKeyedMutexWin32EXT -typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC)(GLuint memory, GLuint64 key); -GLAPI PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC glad_glReleaseKeyedMutexWin32EXT; -#define glReleaseKeyedMutexWin32EXT glad_glReleaseKeyedMutexWin32EXT -#endif -#ifndef GL_EXT_window_rectangles -#define GL_EXT_window_rectangles 1 -GLAPI int GLAD_GL_EXT_window_rectangles; -typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC)(GLenum mode, GLsizei count, const GLint *box); -GLAPI PFNGLWINDOWRECTANGLESEXTPROC glad_glWindowRectanglesEXT; -#define glWindowRectanglesEXT glad_glWindowRectanglesEXT -#endif -#ifndef GL_EXT_x11_sync_object -#define GL_EXT_x11_sync_object 1 -GLAPI int GLAD_GL_EXT_x11_sync_object; -typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC)(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -GLAPI PFNGLIMPORTSYNCEXTPROC glad_glImportSyncEXT; -#define glImportSyncEXT glad_glImportSyncEXT -#endif -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -GLAPI int GLAD_GL_GREMEDY_frame_terminator; -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC)(void); -GLAPI PFNGLFRAMETERMINATORGREMEDYPROC glad_glFrameTerminatorGREMEDY; -#define glFrameTerminatorGREMEDY glad_glFrameTerminatorGREMEDY -#endif -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -GLAPI int GLAD_GL_GREMEDY_string_marker; -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC)(GLsizei len, const void *string); -GLAPI PFNGLSTRINGMARKERGREMEDYPROC glad_glStringMarkerGREMEDY; -#define glStringMarkerGREMEDY glad_glStringMarkerGREMEDY -#endif -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -GLAPI int GLAD_GL_HP_convolution_border_modes; -#endif -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -GLAPI int GLAD_GL_HP_image_transform; -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLIMAGETRANSFORMPARAMETERIHPPROC glad_glImageTransformParameteriHP; -#define glImageTransformParameteriHP glad_glImageTransformParameteriHP -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLIMAGETRANSFORMPARAMETERFHPPROC glad_glImageTransformParameterfHP; -#define glImageTransformParameterfHP glad_glImageTransformParameterfHP -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLIMAGETRANSFORMPARAMETERIVHPPROC glad_glImageTransformParameterivHP; -#define glImageTransformParameterivHP glad_glImageTransformParameterivHP -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLIMAGETRANSFORMPARAMETERFVHPPROC glad_glImageTransformParameterfvHP; -#define glImageTransformParameterfvHP glad_glImageTransformParameterfvHP -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC glad_glGetImageTransformParameterivHP; -#define glGetImageTransformParameterivHP glad_glGetImageTransformParameterivHP -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC glad_glGetImageTransformParameterfvHP; -#define glGetImageTransformParameterfvHP glad_glGetImageTransformParameterfvHP -#endif -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -GLAPI int GLAD_GL_HP_occlusion_test; -#endif -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -GLAPI int GLAD_GL_HP_texture_lighting; -#endif -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -GLAPI int GLAD_GL_IBM_cull_vertex; -#endif -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -GLAPI int GLAD_GL_IBM_multimode_draw_arrays; -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC)(const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -GLAPI PFNGLMULTIMODEDRAWARRAYSIBMPROC glad_glMultiModeDrawArraysIBM; -#define glMultiModeDrawArraysIBM glad_glMultiModeDrawArraysIBM -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC)(const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); -GLAPI PFNGLMULTIMODEDRAWELEMENTSIBMPROC glad_glMultiModeDrawElementsIBM; -#define glMultiModeDrawElementsIBM glad_glMultiModeDrawElementsIBM -#endif -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -GLAPI int GLAD_GL_IBM_rasterpos_clip; -#endif -#ifndef GL_IBM_static_data -#define GL_IBM_static_data 1 -GLAPI int GLAD_GL_IBM_static_data; -typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC)(GLenum target); -GLAPI PFNGLFLUSHSTATICDATAIBMPROC glad_glFlushStaticDataIBM; -#define glFlushStaticDataIBM glad_glFlushStaticDataIBM -#endif -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_IBM_texture_mirrored_repeat 1 -GLAPI int GLAD_GL_IBM_texture_mirrored_repeat; -#endif -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -GLAPI int GLAD_GL_IBM_vertex_array_lists; -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI PFNGLCOLORPOINTERLISTIBMPROC glad_glColorPointerListIBM; -#define glColorPointerListIBM glad_glColorPointerListIBM -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI PFNGLSECONDARYCOLORPOINTERLISTIBMPROC glad_glSecondaryColorPointerListIBM; -#define glSecondaryColorPointerListIBM glad_glSecondaryColorPointerListIBM -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC)(GLint stride, const GLboolean **pointer, GLint ptrstride); -GLAPI PFNGLEDGEFLAGPOINTERLISTIBMPROC glad_glEdgeFlagPointerListIBM; -#define glEdgeFlagPointerListIBM glad_glEdgeFlagPointerListIBM -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI PFNGLFOGCOORDPOINTERLISTIBMPROC glad_glFogCoordPointerListIBM; -#define glFogCoordPointerListIBM glad_glFogCoordPointerListIBM -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI PFNGLINDEXPOINTERLISTIBMPROC glad_glIndexPointerListIBM; -#define glIndexPointerListIBM glad_glIndexPointerListIBM -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI PFNGLNORMALPOINTERLISTIBMPROC glad_glNormalPointerListIBM; -#define glNormalPointerListIBM glad_glNormalPointerListIBM -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI PFNGLTEXCOORDPOINTERLISTIBMPROC glad_glTexCoordPointerListIBM; -#define glTexCoordPointerListIBM glad_glTexCoordPointerListIBM -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI PFNGLVERTEXPOINTERLISTIBMPROC glad_glVertexPointerListIBM; -#define glVertexPointerListIBM glad_glVertexPointerListIBM -#endif -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -GLAPI int GLAD_GL_INGR_blend_func_separate; -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEINGRPROC glad_glBlendFuncSeparateINGR; -#define glBlendFuncSeparateINGR glad_glBlendFuncSeparateINGR -#endif -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -GLAPI int GLAD_GL_INGR_color_clamp; -#endif -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -GLAPI int GLAD_GL_INGR_interlace_read; -#endif -#ifndef GL_INTEL_blackhole_render -#define GL_INTEL_blackhole_render 1 -GLAPI int GLAD_GL_INTEL_blackhole_render; -#endif -#ifndef GL_INTEL_conservative_rasterization -#define GL_INTEL_conservative_rasterization 1 -GLAPI int GLAD_GL_INTEL_conservative_rasterization; -#endif -#ifndef GL_INTEL_fragment_shader_ordering -#define GL_INTEL_fragment_shader_ordering 1 -GLAPI int GLAD_GL_INTEL_fragment_shader_ordering; -#endif -#ifndef GL_INTEL_framebuffer_CMAA -#define GL_INTEL_framebuffer_CMAA 1 -GLAPI int GLAD_GL_INTEL_framebuffer_CMAA; -typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC)(void); -GLAPI PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC glad_glApplyFramebufferAttachmentCMAAINTEL; -#define glApplyFramebufferAttachmentCMAAINTEL glad_glApplyFramebufferAttachmentCMAAINTEL -#endif -#ifndef GL_INTEL_map_texture -#define GL_INTEL_map_texture 1 -GLAPI int GLAD_GL_INTEL_map_texture; -typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC)(GLuint texture); -GLAPI PFNGLSYNCTEXTUREINTELPROC glad_glSyncTextureINTEL; -#define glSyncTextureINTEL glad_glSyncTextureINTEL -typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level); -GLAPI PFNGLUNMAPTEXTURE2DINTELPROC glad_glUnmapTexture2DINTEL; -#define glUnmapTexture2DINTEL glad_glUnmapTexture2DINTEL -typedef void * (APIENTRYP PFNGLMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); -GLAPI PFNGLMAPTEXTURE2DINTELPROC glad_glMapTexture2DINTEL; -#define glMapTexture2DINTEL glad_glMapTexture2DINTEL -#endif -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -GLAPI int GLAD_GL_INTEL_parallel_arrays; -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC)(GLint size, GLenum type, const void **pointer); -GLAPI PFNGLVERTEXPOINTERVINTELPROC glad_glVertexPointervINTEL; -#define glVertexPointervINTEL glad_glVertexPointervINTEL -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC)(GLenum type, const void **pointer); -GLAPI PFNGLNORMALPOINTERVINTELPROC glad_glNormalPointervINTEL; -#define glNormalPointervINTEL glad_glNormalPointervINTEL -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC)(GLint size, GLenum type, const void **pointer); -GLAPI PFNGLCOLORPOINTERVINTELPROC glad_glColorPointervINTEL; -#define glColorPointervINTEL glad_glColorPointervINTEL -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC)(GLint size, GLenum type, const void **pointer); -GLAPI PFNGLTEXCOORDPOINTERVINTELPROC glad_glTexCoordPointervINTEL; -#define glTexCoordPointervINTEL glad_glTexCoordPointervINTEL -#endif -#ifndef GL_INTEL_performance_query -#define GL_INTEL_performance_query 1 -GLAPI int GLAD_GL_INTEL_performance_query; -typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC)(GLuint queryHandle); -GLAPI PFNGLBEGINPERFQUERYINTELPROC glad_glBeginPerfQueryINTEL; -#define glBeginPerfQueryINTEL glad_glBeginPerfQueryINTEL -typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC)(GLuint queryId, GLuint *queryHandle); -GLAPI PFNGLCREATEPERFQUERYINTELPROC glad_glCreatePerfQueryINTEL; -#define glCreatePerfQueryINTEL glad_glCreatePerfQueryINTEL -typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC)(GLuint queryHandle); -GLAPI PFNGLDELETEPERFQUERYINTELPROC glad_glDeletePerfQueryINTEL; -#define glDeletePerfQueryINTEL glad_glDeletePerfQueryINTEL -typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC)(GLuint queryHandle); -GLAPI PFNGLENDPERFQUERYINTELPROC glad_glEndPerfQueryINTEL; -#define glEndPerfQueryINTEL glad_glEndPerfQueryINTEL -typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC)(GLuint *queryId); -GLAPI PFNGLGETFIRSTPERFQUERYIDINTELPROC glad_glGetFirstPerfQueryIdINTEL; -#define glGetFirstPerfQueryIdINTEL glad_glGetFirstPerfQueryIdINTEL -typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC)(GLuint queryId, GLuint *nextQueryId); -GLAPI PFNGLGETNEXTPERFQUERYIDINTELPROC glad_glGetNextPerfQueryIdINTEL; -#define glGetNextPerfQueryIdINTEL glad_glGetNextPerfQueryIdINTEL -typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -GLAPI PFNGLGETPERFCOUNTERINFOINTELPROC glad_glGetPerfCounterInfoINTEL; -#define glGetPerfCounterInfoINTEL glad_glGetPerfCounterInfoINTEL -typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC)(GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); -GLAPI PFNGLGETPERFQUERYDATAINTELPROC glad_glGetPerfQueryDataINTEL; -#define glGetPerfQueryDataINTEL glad_glGetPerfQueryDataINTEL -typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC)(GLchar *queryName, GLuint *queryId); -GLAPI PFNGLGETPERFQUERYIDBYNAMEINTELPROC glad_glGetPerfQueryIdByNameINTEL; -#define glGetPerfQueryIdByNameINTEL glad_glGetPerfQueryIdByNameINTEL -typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC)(GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -GLAPI PFNGLGETPERFQUERYINFOINTELPROC glad_glGetPerfQueryInfoINTEL; -#define glGetPerfQueryInfoINTEL glad_glGetPerfQueryInfoINTEL -#endif -#ifndef GL_KHR_blend_equation_advanced -#define GL_KHR_blend_equation_advanced 1 -GLAPI int GLAD_GL_KHR_blend_equation_advanced; -typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC)(void); -GLAPI PFNGLBLENDBARRIERKHRPROC glad_glBlendBarrierKHR; -#define glBlendBarrierKHR glad_glBlendBarrierKHR -#endif -#ifndef GL_KHR_blend_equation_advanced_coherent -#define GL_KHR_blend_equation_advanced_coherent 1 -GLAPI int GLAD_GL_KHR_blend_equation_advanced_coherent; -#endif -#ifndef GL_KHR_context_flush_control -#define GL_KHR_context_flush_control 1 -GLAPI int GLAD_GL_KHR_context_flush_control; -#endif -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -GLAPI int GLAD_GL_KHR_debug; -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI PFNGLDEBUGMESSAGECONTROLKHRPROC glad_glDebugMessageControlKHR; -#define glDebugMessageControlKHR glad_glDebugMessageControlKHR -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI PFNGLDEBUGMESSAGEINSERTKHRPROC glad_glDebugMessageInsertKHR; -#define glDebugMessageInsertKHR glad_glDebugMessageInsertKHR -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC)(GLDEBUGPROCKHR callback, const void *userParam); -GLAPI PFNGLDEBUGMESSAGECALLBACKKHRPROC glad_glDebugMessageCallbackKHR; -#define glDebugMessageCallbackKHR glad_glDebugMessageCallbackKHR -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI PFNGLGETDEBUGMESSAGELOGKHRPROC glad_glGetDebugMessageLogKHR; -#define glGetDebugMessageLogKHR glad_glGetDebugMessageLogKHR -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC)(GLenum source, GLuint id, GLsizei length, const GLchar *message); -GLAPI PFNGLPUSHDEBUGGROUPKHRPROC glad_glPushDebugGroupKHR; -#define glPushDebugGroupKHR glad_glPushDebugGroupKHR -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC)(void); -GLAPI PFNGLPOPDEBUGGROUPKHRPROC glad_glPopDebugGroupKHR; -#define glPopDebugGroupKHR glad_glPopDebugGroupKHR -typedef void (APIENTRYP PFNGLOBJECTLABELKHRPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GLAPI PFNGLOBJECTLABELKHRPROC glad_glObjectLabelKHR; -#define glObjectLabelKHR glad_glObjectLabelKHR -typedef void (APIENTRYP PFNGLGETOBJECTLABELKHRPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI PFNGLGETOBJECTLABELKHRPROC glad_glGetObjectLabelKHR; -#define glGetObjectLabelKHR glad_glGetObjectLabelKHR -typedef void (APIENTRYP PFNGLOBJECTPTRLABELKHRPROC)(const void *ptr, GLsizei length, const GLchar *label); -GLAPI PFNGLOBJECTPTRLABELKHRPROC glad_glObjectPtrLabelKHR; -#define glObjectPtrLabelKHR glad_glObjectPtrLabelKHR -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC)(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI PFNGLGETOBJECTPTRLABELKHRPROC glad_glGetObjectPtrLabelKHR; -#define glGetObjectPtrLabelKHR glad_glGetObjectPtrLabelKHR -typedef void (APIENTRYP PFNGLGETPOINTERVKHRPROC)(GLenum pname, void **params); -GLAPI PFNGLGETPOINTERVKHRPROC glad_glGetPointervKHR; -#define glGetPointervKHR glad_glGetPointervKHR -#endif -#ifndef GL_KHR_no_error -#define GL_KHR_no_error 1 -GLAPI int GLAD_GL_KHR_no_error; -#endif -#ifndef GL_KHR_parallel_shader_compile -#define GL_KHR_parallel_shader_compile 1 -GLAPI int GLAD_GL_KHR_parallel_shader_compile; -typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC)(GLuint count); -GLAPI PFNGLMAXSHADERCOMPILERTHREADSKHRPROC glad_glMaxShaderCompilerThreadsKHR; -#define glMaxShaderCompilerThreadsKHR glad_glMaxShaderCompilerThreadsKHR -#endif -#ifndef GL_KHR_robust_buffer_access_behavior -#define GL_KHR_robust_buffer_access_behavior 1 -GLAPI int GLAD_GL_KHR_robust_buffer_access_behavior; -#endif -#ifndef GL_KHR_robustness -#define GL_KHR_robustness 1 -GLAPI int GLAD_GL_KHR_robustness; -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC)(void); -GLAPI PFNGLGETGRAPHICSRESETSTATUSKHRPROC glad_glGetGraphicsResetStatusKHR; -#define glGetGraphicsResetStatusKHR glad_glGetGraphicsResetStatusKHR -typedef void (APIENTRYP PFNGLREADNPIXELSKHRPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI PFNGLREADNPIXELSKHRPROC glad_glReadnPixelsKHR; -#define glReadnPixelsKHR glad_glReadnPixelsKHR -typedef void (APIENTRYP PFNGLGETNUNIFORMFVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI PFNGLGETNUNIFORMFVKHRPROC glad_glGetnUniformfvKHR; -#define glGetnUniformfvKHR glad_glGetnUniformfvKHR -typedef void (APIENTRYP PFNGLGETNUNIFORMIVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI PFNGLGETNUNIFORMIVKHRPROC glad_glGetnUniformivKHR; -#define glGetnUniformivKHR glad_glGetnUniformivKHR -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI PFNGLGETNUNIFORMUIVKHRPROC glad_glGetnUniformuivKHR; -#define glGetnUniformuivKHR glad_glGetnUniformuivKHR -#endif -#ifndef GL_KHR_texture_compression_astc_hdr -#define GL_KHR_texture_compression_astc_hdr 1 -GLAPI int GLAD_GL_KHR_texture_compression_astc_hdr; -#endif -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -GLAPI int GLAD_GL_KHR_texture_compression_astc_ldr; -#endif -#ifndef GL_KHR_texture_compression_astc_sliced_3d -#define GL_KHR_texture_compression_astc_sliced_3d 1 -GLAPI int GLAD_GL_KHR_texture_compression_astc_sliced_3d; -#endif -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -GLAPI int GLAD_GL_MESAX_texture_stack; -#endif -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -GLAPI int GLAD_GL_MESA_pack_invert; -#endif -#ifndef GL_MESA_program_binary_formats -#define GL_MESA_program_binary_formats 1 -GLAPI int GLAD_GL_MESA_program_binary_formats; -#endif -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -GLAPI int GLAD_GL_MESA_resize_buffers; -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC)(void); -GLAPI PFNGLRESIZEBUFFERSMESAPROC glad_glResizeBuffersMESA; -#define glResizeBuffersMESA glad_glResizeBuffersMESA -#endif -#ifndef GL_MESA_shader_integer_functions -#define GL_MESA_shader_integer_functions 1 -GLAPI int GLAD_GL_MESA_shader_integer_functions; -#endif -#ifndef GL_MESA_tile_raster_order -#define GL_MESA_tile_raster_order 1 -GLAPI int GLAD_GL_MESA_tile_raster_order; -#endif -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -GLAPI int GLAD_GL_MESA_window_pos; -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC)(GLdouble x, GLdouble y); -GLAPI PFNGLWINDOWPOS2DMESAPROC glad_glWindowPos2dMESA; -#define glWindowPos2dMESA glad_glWindowPos2dMESA -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC)(const GLdouble *v); -GLAPI PFNGLWINDOWPOS2DVMESAPROC glad_glWindowPos2dvMESA; -#define glWindowPos2dvMESA glad_glWindowPos2dvMESA -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC)(GLfloat x, GLfloat y); -GLAPI PFNGLWINDOWPOS2FMESAPROC glad_glWindowPos2fMESA; -#define glWindowPos2fMESA glad_glWindowPos2fMESA -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC)(const GLfloat *v); -GLAPI PFNGLWINDOWPOS2FVMESAPROC glad_glWindowPos2fvMESA; -#define glWindowPos2fvMESA glad_glWindowPos2fvMESA -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC)(GLint x, GLint y); -GLAPI PFNGLWINDOWPOS2IMESAPROC glad_glWindowPos2iMESA; -#define glWindowPos2iMESA glad_glWindowPos2iMESA -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC)(const GLint *v); -GLAPI PFNGLWINDOWPOS2IVMESAPROC glad_glWindowPos2ivMESA; -#define glWindowPos2ivMESA glad_glWindowPos2ivMESA -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC)(GLshort x, GLshort y); -GLAPI PFNGLWINDOWPOS2SMESAPROC glad_glWindowPos2sMESA; -#define glWindowPos2sMESA glad_glWindowPos2sMESA -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC)(const GLshort *v); -GLAPI PFNGLWINDOWPOS2SVMESAPROC glad_glWindowPos2svMESA; -#define glWindowPos2svMESA glad_glWindowPos2svMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC)(GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLWINDOWPOS3DMESAPROC glad_glWindowPos3dMESA; -#define glWindowPos3dMESA glad_glWindowPos3dMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC)(const GLdouble *v); -GLAPI PFNGLWINDOWPOS3DVMESAPROC glad_glWindowPos3dvMESA; -#define glWindowPos3dvMESA glad_glWindowPos3dvMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLWINDOWPOS3FMESAPROC glad_glWindowPos3fMESA; -#define glWindowPos3fMESA glad_glWindowPos3fMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC)(const GLfloat *v); -GLAPI PFNGLWINDOWPOS3FVMESAPROC glad_glWindowPos3fvMESA; -#define glWindowPos3fvMESA glad_glWindowPos3fvMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC)(GLint x, GLint y, GLint z); -GLAPI PFNGLWINDOWPOS3IMESAPROC glad_glWindowPos3iMESA; -#define glWindowPos3iMESA glad_glWindowPos3iMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC)(const GLint *v); -GLAPI PFNGLWINDOWPOS3IVMESAPROC glad_glWindowPos3ivMESA; -#define glWindowPos3ivMESA glad_glWindowPos3ivMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC)(GLshort x, GLshort y, GLshort z); -GLAPI PFNGLWINDOWPOS3SMESAPROC glad_glWindowPos3sMESA; -#define glWindowPos3sMESA glad_glWindowPos3sMESA -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC)(const GLshort *v); -GLAPI PFNGLWINDOWPOS3SVMESAPROC glad_glWindowPos3svMESA; -#define glWindowPos3svMESA glad_glWindowPos3svMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLWINDOWPOS4DMESAPROC glad_glWindowPos4dMESA; -#define glWindowPos4dMESA glad_glWindowPos4dMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC)(const GLdouble *v); -GLAPI PFNGLWINDOWPOS4DVMESAPROC glad_glWindowPos4dvMESA; -#define glWindowPos4dvMESA glad_glWindowPos4dvMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLWINDOWPOS4FMESAPROC glad_glWindowPos4fMESA; -#define glWindowPos4fMESA glad_glWindowPos4fMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC)(const GLfloat *v); -GLAPI PFNGLWINDOWPOS4FVMESAPROC glad_glWindowPos4fvMESA; -#define glWindowPos4fvMESA glad_glWindowPos4fvMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC)(GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLWINDOWPOS4IMESAPROC glad_glWindowPos4iMESA; -#define glWindowPos4iMESA glad_glWindowPos4iMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC)(const GLint *v); -GLAPI PFNGLWINDOWPOS4IVMESAPROC glad_glWindowPos4ivMESA; -#define glWindowPos4ivMESA glad_glWindowPos4ivMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC)(GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLWINDOWPOS4SMESAPROC glad_glWindowPos4sMESA; -#define glWindowPos4sMESA glad_glWindowPos4sMESA -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC)(const GLshort *v); -GLAPI PFNGLWINDOWPOS4SVMESAPROC glad_glWindowPos4svMESA; -#define glWindowPos4svMESA glad_glWindowPos4svMESA -#endif -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -GLAPI int GLAD_GL_MESA_ycbcr_texture; -#endif -#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers -#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 -GLAPI int GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers; -#endif -#ifndef GL_NVX_conditional_render -#define GL_NVX_conditional_render 1 -GLAPI int GLAD_GL_NVX_conditional_render; -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC)(GLuint id); -GLAPI PFNGLBEGINCONDITIONALRENDERNVXPROC glad_glBeginConditionalRenderNVX; -#define glBeginConditionalRenderNVX glad_glBeginConditionalRenderNVX -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC)(void); -GLAPI PFNGLENDCONDITIONALRENDERNVXPROC glad_glEndConditionalRenderNVX; -#define glEndConditionalRenderNVX glad_glEndConditionalRenderNVX -#endif -#ifndef GL_NVX_gpu_memory_info -#define GL_NVX_gpu_memory_info 1 -GLAPI int GLAD_GL_NVX_gpu_memory_info; -#endif -#ifndef GL_NVX_linked_gpu_multicast -#define GL_NVX_linked_gpu_multicast 1 -GLAPI int GLAD_GL_NVX_linked_gpu_multicast; -typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC)(GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC glad_glLGPUNamedBufferSubDataNVX; -#define glLGPUNamedBufferSubDataNVX glad_glLGPUNamedBufferSubDataNVX -typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC)(GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLLGPUCOPYIMAGESUBDATANVXPROC glad_glLGPUCopyImageSubDataNVX; -#define glLGPUCopyImageSubDataNVX glad_glLGPUCopyImageSubDataNVX -typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC)(void); -GLAPI PFNGLLGPUINTERLOCKNVXPROC glad_glLGPUInterlockNVX; -#define glLGPUInterlockNVX glad_glLGPUInterlockNVX -#endif -#ifndef GL_NV_alpha_to_coverage_dither_control -#define GL_NV_alpha_to_coverage_dither_control 1 -GLAPI int GLAD_GL_NV_alpha_to_coverage_dither_control; -typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC)(GLenum mode); -GLAPI PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC glad_glAlphaToCoverageDitherControlNV; -#define glAlphaToCoverageDitherControlNV glad_glAlphaToCoverageDitherControlNV -#endif -#ifndef GL_NV_bindless_multi_draw_indirect -#define GL_NV_bindless_multi_draw_indirect 1 -GLAPI int GLAD_GL_NV_bindless_multi_draw_indirect; -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)(GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC glad_glMultiDrawArraysIndirectBindlessNV; -#define glMultiDrawArraysIndirectBindlessNV glad_glMultiDrawArraysIndirectBindlessNV -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)(GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glad_glMultiDrawElementsIndirectBindlessNV; -#define glMultiDrawElementsIndirectBindlessNV glad_glMultiDrawElementsIndirectBindlessNV -#endif -#ifndef GL_NV_bindless_multi_draw_indirect_count -#define GL_NV_bindless_multi_draw_indirect_count 1 -GLAPI int GLAD_GL_NV_bindless_multi_draw_indirect_count; -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawArraysIndirectBindlessCountNV; -#define glMultiDrawArraysIndirectBindlessCountNV glad_glMultiDrawArraysIndirectBindlessCountNV -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawElementsIndirectBindlessCountNV; -#define glMultiDrawElementsIndirectBindlessCountNV glad_glMultiDrawElementsIndirectBindlessCountNV -#endif -#ifndef GL_NV_bindless_texture -#define GL_NV_bindless_texture 1 -GLAPI int GLAD_GL_NV_bindless_texture; -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC)(GLuint texture); -GLAPI PFNGLGETTEXTUREHANDLENVPROC glad_glGetTextureHandleNV; -#define glGetTextureHandleNV glad_glGetTextureHandleNV -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC)(GLuint texture, GLuint sampler); -GLAPI PFNGLGETTEXTURESAMPLERHANDLENVPROC glad_glGetTextureSamplerHandleNV; -#define glGetTextureSamplerHandleNV glad_glGetTextureSamplerHandleNV -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); -GLAPI PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glad_glMakeTextureHandleResidentNV; -#define glMakeTextureHandleResidentNV glad_glMakeTextureHandleResidentNV -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)(GLuint64 handle); -GLAPI PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glad_glMakeTextureHandleNonResidentNV; -#define glMakeTextureHandleNonResidentNV glad_glMakeTextureHandleNonResidentNV -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI PFNGLGETIMAGEHANDLENVPROC glad_glGetImageHandleNV; -#define glGetImageHandleNV glad_glGetImageHandleNV -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle, GLenum access); -GLAPI PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glad_glMakeImageHandleResidentNV; -#define glMakeImageHandleResidentNV glad_glMakeImageHandleResidentNV -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)(GLuint64 handle); -GLAPI PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glad_glMakeImageHandleNonResidentNV; -#define glMakeImageHandleNonResidentNV glad_glMakeImageHandleNonResidentNV -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC)(GLint location, GLuint64 value); -GLAPI PFNGLUNIFORMHANDLEUI64NVPROC glad_glUniformHandleui64NV; -#define glUniformHandleui64NV glad_glUniformHandleui64NV -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC)(GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLUNIFORMHANDLEUI64VNVPROC glad_glUniformHandleui64vNV; -#define glUniformHandleui64vNV glad_glUniformHandleui64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)(GLuint program, GLint location, GLuint64 value); -GLAPI PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glad_glProgramUniformHandleui64NV; -#define glProgramUniformHandleui64NV glad_glProgramUniformHandleui64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glad_glProgramUniformHandleui64vNV; -#define glProgramUniformHandleui64vNV glad_glProgramUniformHandleui64vNV -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); -GLAPI PFNGLISTEXTUREHANDLERESIDENTNVPROC glad_glIsTextureHandleResidentNV; -#define glIsTextureHandleResidentNV glad_glIsTextureHandleResidentNV -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle); -GLAPI PFNGLISIMAGEHANDLERESIDENTNVPROC glad_glIsImageHandleResidentNV; -#define glIsImageHandleResidentNV glad_glIsImageHandleResidentNV -#endif -#ifndef GL_NV_blend_equation_advanced -#define GL_NV_blend_equation_advanced 1 -GLAPI int GLAD_GL_NV_blend_equation_advanced; -typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC)(GLenum pname, GLint value); -GLAPI PFNGLBLENDPARAMETERINVPROC glad_glBlendParameteriNV; -#define glBlendParameteriNV glad_glBlendParameteriNV -typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC)(void); -GLAPI PFNGLBLENDBARRIERNVPROC glad_glBlendBarrierNV; -#define glBlendBarrierNV glad_glBlendBarrierNV -#endif -#ifndef GL_NV_blend_equation_advanced_coherent -#define GL_NV_blend_equation_advanced_coherent 1 -GLAPI int GLAD_GL_NV_blend_equation_advanced_coherent; -#endif -#ifndef GL_NV_blend_minmax_factor -#define GL_NV_blend_minmax_factor 1 -GLAPI int GLAD_GL_NV_blend_minmax_factor; -#endif -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -GLAPI int GLAD_GL_NV_blend_square; -#endif -#ifndef GL_NV_clip_space_w_scaling -#define GL_NV_clip_space_w_scaling 1 -GLAPI int GLAD_GL_NV_clip_space_w_scaling; -typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC)(GLuint index, GLfloat xcoeff, GLfloat ycoeff); -GLAPI PFNGLVIEWPORTPOSITIONWSCALENVPROC glad_glViewportPositionWScaleNV; -#define glViewportPositionWScaleNV glad_glViewportPositionWScaleNV -#endif -#ifndef GL_NV_command_list -#define GL_NV_command_list 1 -GLAPI int GLAD_GL_NV_command_list; -typedef void (APIENTRYP PFNGLCREATESTATESNVPROC)(GLsizei n, GLuint *states); -GLAPI PFNGLCREATESTATESNVPROC glad_glCreateStatesNV; -#define glCreateStatesNV glad_glCreateStatesNV -typedef void (APIENTRYP PFNGLDELETESTATESNVPROC)(GLsizei n, const GLuint *states); -GLAPI PFNGLDELETESTATESNVPROC glad_glDeleteStatesNV; -#define glDeleteStatesNV glad_glDeleteStatesNV -typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC)(GLuint state); -GLAPI PFNGLISSTATENVPROC glad_glIsStateNV; -#define glIsStateNV glad_glIsStateNV -typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC)(GLuint state, GLenum mode); -GLAPI PFNGLSTATECAPTURENVPROC glad_glStateCaptureNV; -#define glStateCaptureNV glad_glStateCaptureNV -typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC)(GLenum tokenID, GLuint size); -GLAPI PFNGLGETCOMMANDHEADERNVPROC glad_glGetCommandHeaderNV; -#define glGetCommandHeaderNV glad_glGetCommandHeaderNV -typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC)(GLenum shadertype); -GLAPI PFNGLGETSTAGEINDEXNVPROC glad_glGetStageIndexNV; -#define glGetStageIndexNV glad_glGetStageIndexNV -typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC)(GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); -GLAPI PFNGLDRAWCOMMANDSNVPROC glad_glDrawCommandsNV; -#define glDrawCommandsNV glad_glDrawCommandsNV -typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC)(GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); -GLAPI PFNGLDRAWCOMMANDSADDRESSNVPROC glad_glDrawCommandsAddressNV; -#define glDrawCommandsAddressNV glad_glDrawCommandsAddressNV -typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC)(GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI PFNGLDRAWCOMMANDSSTATESNVPROC glad_glDrawCommandsStatesNV; -#define glDrawCommandsStatesNV glad_glDrawCommandsStatesNV -typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)(const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC glad_glDrawCommandsStatesAddressNV; -#define glDrawCommandsStatesAddressNV glad_glDrawCommandsStatesAddressNV -typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC)(GLsizei n, GLuint *lists); -GLAPI PFNGLCREATECOMMANDLISTSNVPROC glad_glCreateCommandListsNV; -#define glCreateCommandListsNV glad_glCreateCommandListsNV -typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC)(GLsizei n, const GLuint *lists); -GLAPI PFNGLDELETECOMMANDLISTSNVPROC glad_glDeleteCommandListsNV; -#define glDeleteCommandListsNV glad_glDeleteCommandListsNV -typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC)(GLuint list); -GLAPI PFNGLISCOMMANDLISTNVPROC glad_glIsCommandListNV; -#define glIsCommandListNV glad_glIsCommandListNV -typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)(GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC glad_glListDrawCommandsStatesClientNV; -#define glListDrawCommandsStatesClientNV glad_glListDrawCommandsStatesClientNV -typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC)(GLuint list, GLuint segments); -GLAPI PFNGLCOMMANDLISTSEGMENTSNVPROC glad_glCommandListSegmentsNV; -#define glCommandListSegmentsNV glad_glCommandListSegmentsNV -typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC)(GLuint list); -GLAPI PFNGLCOMPILECOMMANDLISTNVPROC glad_glCompileCommandListNV; -#define glCompileCommandListNV glad_glCompileCommandListNV -typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC)(GLuint list); -GLAPI PFNGLCALLCOMMANDLISTNVPROC glad_glCallCommandListNV; -#define glCallCommandListNV glad_glCallCommandListNV -#endif -#ifndef GL_NV_compute_program5 -#define GL_NV_compute_program5 1 -GLAPI int GLAD_GL_NV_compute_program5; -#endif -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -GLAPI int GLAD_GL_NV_conditional_render; -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC)(GLuint id, GLenum mode); -GLAPI PFNGLBEGINCONDITIONALRENDERNVPROC glad_glBeginConditionalRenderNV; -#define glBeginConditionalRenderNV glad_glBeginConditionalRenderNV -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC)(void); -GLAPI PFNGLENDCONDITIONALRENDERNVPROC glad_glEndConditionalRenderNV; -#define glEndConditionalRenderNV glad_glEndConditionalRenderNV -#endif -#ifndef GL_NV_conservative_raster -#define GL_NV_conservative_raster 1 -GLAPI int GLAD_GL_NV_conservative_raster; -typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC)(GLuint xbits, GLuint ybits); -GLAPI PFNGLSUBPIXELPRECISIONBIASNVPROC glad_glSubpixelPrecisionBiasNV; -#define glSubpixelPrecisionBiasNV glad_glSubpixelPrecisionBiasNV -#endif -#ifndef GL_NV_conservative_raster_dilate -#define GL_NV_conservative_raster_dilate 1 -GLAPI int GLAD_GL_NV_conservative_raster_dilate; -typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC)(GLenum pname, GLfloat value); -GLAPI PFNGLCONSERVATIVERASTERPARAMETERFNVPROC glad_glConservativeRasterParameterfNV; -#define glConservativeRasterParameterfNV glad_glConservativeRasterParameterfNV -#endif -#ifndef GL_NV_conservative_raster_pre_snap -#define GL_NV_conservative_raster_pre_snap 1 -GLAPI int GLAD_GL_NV_conservative_raster_pre_snap; -#endif -#ifndef GL_NV_conservative_raster_pre_snap_triangles -#define GL_NV_conservative_raster_pre_snap_triangles 1 -GLAPI int GLAD_GL_NV_conservative_raster_pre_snap_triangles; -typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC)(GLenum pname, GLint param); -GLAPI PFNGLCONSERVATIVERASTERPARAMETERINVPROC glad_glConservativeRasterParameteriNV; -#define glConservativeRasterParameteriNV glad_glConservativeRasterParameteriNV -#endif -#ifndef GL_NV_conservative_raster_underestimation -#define GL_NV_conservative_raster_underestimation 1 -GLAPI int GLAD_GL_NV_conservative_raster_underestimation; -#endif -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -GLAPI int GLAD_GL_NV_copy_depth_to_color; -#endif -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 -GLAPI int GLAD_GL_NV_copy_image; -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLCOPYIMAGESUBDATANVPROC glad_glCopyImageSubDataNV; -#define glCopyImageSubDataNV glad_glCopyImageSubDataNV -#endif -#ifndef GL_NV_deep_texture3D -#define GL_NV_deep_texture3D 1 -GLAPI int GLAD_GL_NV_deep_texture3D; -#endif -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -GLAPI int GLAD_GL_NV_depth_buffer_float; -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC)(GLdouble zNear, GLdouble zFar); -GLAPI PFNGLDEPTHRANGEDNVPROC glad_glDepthRangedNV; -#define glDepthRangedNV glad_glDepthRangedNV -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC)(GLdouble depth); -GLAPI PFNGLCLEARDEPTHDNVPROC glad_glClearDepthdNV; -#define glClearDepthdNV glad_glClearDepthdNV -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC)(GLdouble zmin, GLdouble zmax); -GLAPI PFNGLDEPTHBOUNDSDNVPROC glad_glDepthBoundsdNV; -#define glDepthBoundsdNV glad_glDepthBoundsdNV -#endif -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -GLAPI int GLAD_GL_NV_depth_clamp; -#endif -#ifndef GL_NV_draw_texture -#define GL_NV_draw_texture 1 -GLAPI int GLAD_GL_NV_draw_texture; -typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC)(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -GLAPI PFNGLDRAWTEXTURENVPROC glad_glDrawTextureNV; -#define glDrawTextureNV glad_glDrawTextureNV -#endif -#ifndef GL_NV_draw_vulkan_image -#define GL_NV_draw_vulkan_image 1 -GLAPI int GLAD_GL_NV_draw_vulkan_image; -typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC)(GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -GLAPI PFNGLDRAWVKIMAGENVPROC glad_glDrawVkImageNV; -#define glDrawVkImageNV glad_glDrawVkImageNV -typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC)(const GLchar *name); -GLAPI PFNGLGETVKPROCADDRNVPROC glad_glGetVkProcAddrNV; -#define glGetVkProcAddrNV glad_glGetVkProcAddrNV -typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC)(GLuint64 vkSemaphore); -GLAPI PFNGLWAITVKSEMAPHORENVPROC glad_glWaitVkSemaphoreNV; -#define glWaitVkSemaphoreNV glad_glWaitVkSemaphoreNV -typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC)(GLuint64 vkSemaphore); -GLAPI PFNGLSIGNALVKSEMAPHORENVPROC glad_glSignalVkSemaphoreNV; -#define glSignalVkSemaphoreNV glad_glSignalVkSemaphoreNV -typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC)(GLuint64 vkFence); -GLAPI PFNGLSIGNALVKFENCENVPROC glad_glSignalVkFenceNV; -#define glSignalVkFenceNV glad_glSignalVkFenceNV -#endif -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -GLAPI int GLAD_GL_NV_evaluators; -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); -GLAPI PFNGLMAPCONTROLPOINTSNVPROC glad_glMapControlPointsNV; -#define glMapControlPointsNV glad_glMapControlPointsNV -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLMAPPARAMETERIVNVPROC glad_glMapParameterivNV; -#define glMapParameterivNV glad_glMapParameterivNV -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLMAPPARAMETERFVNVPROC glad_glMapParameterfvNV; -#define glMapParameterfvNV glad_glMapParameterfvNV -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); -GLAPI PFNGLGETMAPCONTROLPOINTSNVPROC glad_glGetMapControlPointsNV; -#define glGetMapControlPointsNV glad_glGetMapControlPointsNV -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETMAPPARAMETERIVNVPROC glad_glGetMapParameterivNV; -#define glGetMapParameterivNV glad_glGetMapParameterivNV -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMAPPARAMETERFVNVPROC glad_glGetMapParameterfvNV; -#define glGetMapParameterfvNV glad_glGetMapParameterfvNV -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC)(GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETMAPATTRIBPARAMETERIVNVPROC glad_glGetMapAttribParameterivNV; -#define glGetMapAttribParameterivNV glad_glGetMapAttribParameterivNV -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMAPATTRIBPARAMETERFVNVPROC glad_glGetMapAttribParameterfvNV; -#define glGetMapAttribParameterfvNV glad_glGetMapAttribParameterfvNV -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC)(GLenum target, GLenum mode); -GLAPI PFNGLEVALMAPSNVPROC glad_glEvalMapsNV; -#define glEvalMapsNV glad_glEvalMapsNV -#endif -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 -GLAPI int GLAD_GL_NV_explicit_multisample; -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC)(GLenum pname, GLuint index, GLfloat *val); -GLAPI PFNGLGETMULTISAMPLEFVNVPROC glad_glGetMultisamplefvNV; -#define glGetMultisamplefvNV glad_glGetMultisamplefvNV -typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC)(GLuint index, GLbitfield mask); -GLAPI PFNGLSAMPLEMASKINDEXEDNVPROC glad_glSampleMaskIndexedNV; -#define glSampleMaskIndexedNV glad_glSampleMaskIndexedNV -typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC)(GLenum target, GLuint renderbuffer); -GLAPI PFNGLTEXRENDERBUFFERNVPROC glad_glTexRenderbufferNV; -#define glTexRenderbufferNV glad_glTexRenderbufferNV -#endif -#ifndef GL_NV_fence -#define GL_NV_fence 1 -GLAPI int GLAD_GL_NV_fence; -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC)(GLsizei n, const GLuint *fences); -GLAPI PFNGLDELETEFENCESNVPROC glad_glDeleteFencesNV; -#define glDeleteFencesNV glad_glDeleteFencesNV -typedef void (APIENTRYP PFNGLGENFENCESNVPROC)(GLsizei n, GLuint *fences); -GLAPI PFNGLGENFENCESNVPROC glad_glGenFencesNV; -#define glGenFencesNV glad_glGenFencesNV -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC)(GLuint fence); -GLAPI PFNGLISFENCENVPROC glad_glIsFenceNV; -#define glIsFenceNV glad_glIsFenceNV -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC)(GLuint fence); -GLAPI PFNGLTESTFENCENVPROC glad_glTestFenceNV; -#define glTestFenceNV glad_glTestFenceNV -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC)(GLuint fence, GLenum pname, GLint *params); -GLAPI PFNGLGETFENCEIVNVPROC glad_glGetFenceivNV; -#define glGetFenceivNV glad_glGetFenceivNV -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC)(GLuint fence); -GLAPI PFNGLFINISHFENCENVPROC glad_glFinishFenceNV; -#define glFinishFenceNV glad_glFinishFenceNV -typedef void (APIENTRYP PFNGLSETFENCENVPROC)(GLuint fence, GLenum condition); -GLAPI PFNGLSETFENCENVPROC glad_glSetFenceNV; -#define glSetFenceNV glad_glSetFenceNV -#endif -#ifndef GL_NV_fill_rectangle -#define GL_NV_fill_rectangle 1 -GLAPI int GLAD_GL_NV_fill_rectangle; -#endif -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -GLAPI int GLAD_GL_NV_float_buffer; -#endif -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -GLAPI int GLAD_GL_NV_fog_distance; -#endif -#ifndef GL_NV_fragment_coverage_to_color -#define GL_NV_fragment_coverage_to_color 1 -GLAPI int GLAD_GL_NV_fragment_coverage_to_color; -typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC)(GLuint color); -GLAPI PFNGLFRAGMENTCOVERAGECOLORNVPROC glad_glFragmentCoverageColorNV; -#define glFragmentCoverageColorNV glad_glFragmentCoverageColorNV -#endif -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -GLAPI int GLAD_GL_NV_fragment_program; -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)(GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLPROGRAMNAMEDPARAMETER4FNVPROC glad_glProgramNamedParameter4fNV; -#define glProgramNamedParameter4fNV glad_glProgramNamedParameter4fNV -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)(GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -GLAPI PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC glad_glProgramNamedParameter4fvNV; -#define glProgramNamedParameter4fvNV glad_glProgramNamedParameter4fvNV -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)(GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLPROGRAMNAMEDPARAMETER4DNVPROC glad_glProgramNamedParameter4dNV; -#define glProgramNamedParameter4dNV glad_glProgramNamedParameter4dNV -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)(GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -GLAPI PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC glad_glProgramNamedParameter4dvNV; -#define glProgramNamedParameter4dvNV glad_glProgramNamedParameter4dvNV -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)(GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -GLAPI PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC glad_glGetProgramNamedParameterfvNV; -#define glGetProgramNamedParameterfvNV glad_glGetProgramNamedParameterfvNV -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)(GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -GLAPI PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC glad_glGetProgramNamedParameterdvNV; -#define glGetProgramNamedParameterdvNV glad_glGetProgramNamedParameterdvNV -#endif -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -GLAPI int GLAD_GL_NV_fragment_program2; -#endif -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -GLAPI int GLAD_GL_NV_fragment_program4; -#endif -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -GLAPI int GLAD_GL_NV_fragment_program_option; -#endif -#ifndef GL_NV_fragment_shader_interlock -#define GL_NV_fragment_shader_interlock 1 -GLAPI int GLAD_GL_NV_fragment_shader_interlock; -#endif -#ifndef GL_NV_framebuffer_mixed_samples -#define GL_NV_framebuffer_mixed_samples 1 -GLAPI int GLAD_GL_NV_framebuffer_mixed_samples; -typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC)(GLsizei n, const GLfloat *v); -GLAPI PFNGLCOVERAGEMODULATIONTABLENVPROC glad_glCoverageModulationTableNV; -#define glCoverageModulationTableNV glad_glCoverageModulationTableNV -typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC)(GLsizei bufsize, GLfloat *v); -GLAPI PFNGLGETCOVERAGEMODULATIONTABLENVPROC glad_glGetCoverageModulationTableNV; -#define glGetCoverageModulationTableNV glad_glGetCoverageModulationTableNV -typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC)(GLenum components); -GLAPI PFNGLCOVERAGEMODULATIONNVPROC glad_glCoverageModulationNV; -#define glCoverageModulationNV glad_glCoverageModulationNV -#endif -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -GLAPI int GLAD_GL_NV_framebuffer_multisample_coverage; -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glad_glRenderbufferStorageMultisampleCoverageNV; -#define glRenderbufferStorageMultisampleCoverageNV glad_glRenderbufferStorageMultisampleCoverageNV -#endif -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -GLAPI int GLAD_GL_NV_geometry_program4; -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC)(GLenum target, GLint limit); -GLAPI PFNGLPROGRAMVERTEXLIMITNVPROC glad_glProgramVertexLimitNV; -#define glProgramVertexLimitNV glad_glProgramVertexLimitNV -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTUREEXTPROC glad_glFramebufferTextureEXT; -#define glFramebufferTextureEXT glad_glFramebufferTextureEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC glad_glFramebufferTextureFaceEXT; -#define glFramebufferTextureFaceEXT glad_glFramebufferTextureFaceEXT -#endif -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -GLAPI int GLAD_GL_NV_geometry_shader4; -#endif -#ifndef GL_NV_geometry_shader_passthrough -#define GL_NV_geometry_shader_passthrough 1 -GLAPI int GLAD_GL_NV_geometry_shader_passthrough; -#endif -#ifndef GL_NV_gpu_multicast -#define GL_NV_gpu_multicast 1 -GLAPI int GLAD_GL_NV_gpu_multicast; -typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC)(GLbitfield mask); -GLAPI PFNGLRENDERGPUMASKNVPROC glad_glRenderGpuMaskNV; -#define glRenderGpuMaskNV glad_glRenderGpuMaskNV -typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC)(GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI PFNGLMULTICASTBUFFERSUBDATANVPROC glad_glMulticastBufferSubDataNV; -#define glMulticastBufferSubDataNV glad_glMulticastBufferSubDataNV -typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC)(GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC glad_glMulticastCopyBufferSubDataNV; -#define glMulticastCopyBufferSubDataNV glad_glMulticastCopyBufferSubDataNV -typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC)(GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI PFNGLMULTICASTCOPYIMAGESUBDATANVPROC glad_glMulticastCopyImageSubDataNV; -#define glMulticastCopyImageSubDataNV glad_glMulticastCopyImageSubDataNV -typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC)(GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLMULTICASTBLITFRAMEBUFFERNVPROC glad_glMulticastBlitFramebufferNV; -#define glMulticastBlitFramebufferNV glad_glMulticastBlitFramebufferNV -typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glMulticastFramebufferSampleLocationsfvNV; -#define glMulticastFramebufferSampleLocationsfvNV glad_glMulticastFramebufferSampleLocationsfvNV -typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC)(void); -GLAPI PFNGLMULTICASTBARRIERNVPROC glad_glMulticastBarrierNV; -#define glMulticastBarrierNV glad_glMulticastBarrierNV -typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC)(GLuint signalGpu, GLbitfield waitGpuMask); -GLAPI PFNGLMULTICASTWAITSYNCNVPROC glad_glMulticastWaitSyncNV; -#define glMulticastWaitSyncNV glad_glMulticastWaitSyncNV -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLMULTICASTGETQUERYOBJECTIVNVPROC glad_glMulticastGetQueryObjectivNV; -#define glMulticastGetQueryObjectivNV glad_glMulticastGetQueryObjectivNV -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLuint *params); -GLAPI PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC glad_glMulticastGetQueryObjectuivNV; -#define glMulticastGetQueryObjectuivNV glad_glMulticastGetQueryObjectuivNV -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLint64 *params); -GLAPI PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC glad_glMulticastGetQueryObjecti64vNV; -#define glMulticastGetQueryObjecti64vNV glad_glMulticastGetQueryObjecti64vNV -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); -GLAPI PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC glad_glMulticastGetQueryObjectui64vNV; -#define glMulticastGetQueryObjectui64vNV glad_glMulticastGetQueryObjectui64vNV -#endif -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -GLAPI int GLAD_GL_NV_gpu_program4; -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLPROGRAMLOCALPARAMETERI4INVPROC glad_glProgramLocalParameterI4iNV; -#define glProgramLocalParameterI4iNV glad_glProgramLocalParameterI4iNV -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint *params); -GLAPI PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC glad_glProgramLocalParameterI4ivNV; -#define glProgramLocalParameterI4ivNV glad_glProgramLocalParameterI4ivNV -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC glad_glProgramLocalParametersI4ivNV; -#define glProgramLocalParametersI4ivNV glad_glProgramLocalParametersI4ivNV -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI PFNGLPROGRAMLOCALPARAMETERI4UINVPROC glad_glProgramLocalParameterI4uiNV; -#define glProgramLocalParameterI4uiNV glad_glProgramLocalParameterI4uiNV -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint *params); -GLAPI PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC glad_glProgramLocalParameterI4uivNV; -#define glProgramLocalParameterI4uivNV glad_glProgramLocalParameterI4uivNV -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC glad_glProgramLocalParametersI4uivNV; -#define glProgramLocalParametersI4uivNV glad_glProgramLocalParametersI4uivNV -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLPROGRAMENVPARAMETERI4INVPROC glad_glProgramEnvParameterI4iNV; -#define glProgramEnvParameterI4iNV glad_glProgramEnvParameterI4iNV -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint *params); -GLAPI PFNGLPROGRAMENVPARAMETERI4IVNVPROC glad_glProgramEnvParameterI4ivNV; -#define glProgramEnvParameterI4ivNV glad_glProgramEnvParameterI4ivNV -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI PFNGLPROGRAMENVPARAMETERSI4IVNVPROC glad_glProgramEnvParametersI4ivNV; -#define glProgramEnvParametersI4ivNV glad_glProgramEnvParametersI4ivNV -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI PFNGLPROGRAMENVPARAMETERI4UINVPROC glad_glProgramEnvParameterI4uiNV; -#define glProgramEnvParameterI4uiNV glad_glProgramEnvParameterI4uiNV -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint *params); -GLAPI PFNGLPROGRAMENVPARAMETERI4UIVNVPROC glad_glProgramEnvParameterI4uivNV; -#define glProgramEnvParameterI4uivNV glad_glProgramEnvParameterI4uivNV -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC glad_glProgramEnvParametersI4uivNV; -#define glProgramEnvParametersI4uivNV glad_glProgramEnvParametersI4uivNV -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint *params); -GLAPI PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC glad_glGetProgramLocalParameterIivNV; -#define glGetProgramLocalParameterIivNV glad_glGetProgramLocalParameterIivNV -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint *params); -GLAPI PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC glad_glGetProgramLocalParameterIuivNV; -#define glGetProgramLocalParameterIuivNV glad_glGetProgramLocalParameterIuivNV -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint *params); -GLAPI PFNGLGETPROGRAMENVPARAMETERIIVNVPROC glad_glGetProgramEnvParameterIivNV; -#define glGetProgramEnvParameterIivNV glad_glGetProgramEnvParameterIivNV -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint *params); -GLAPI PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC glad_glGetProgramEnvParameterIuivNV; -#define glGetProgramEnvParameterIuivNV glad_glGetProgramEnvParameterIuivNV -#endif -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 -GLAPI int GLAD_GL_NV_gpu_program5; -typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC)(GLenum target, GLsizei count, const GLuint *params); -GLAPI PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC glad_glProgramSubroutineParametersuivNV; -#define glProgramSubroutineParametersuivNV glad_glProgramSubroutineParametersuivNV -typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC)(GLenum target, GLuint index, GLuint *param); -GLAPI PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC glad_glGetProgramSubroutineParameteruivNV; -#define glGetProgramSubroutineParameteruivNV glad_glGetProgramSubroutineParameteruivNV -#endif -#ifndef GL_NV_gpu_program5_mem_extended -#define GL_NV_gpu_program5_mem_extended 1 -GLAPI int GLAD_GL_NV_gpu_program5_mem_extended; -#endif -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -GLAPI int GLAD_GL_NV_gpu_shader5; -#endif -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -GLAPI int GLAD_GL_NV_half_float; -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y); -GLAPI PFNGLVERTEX2HNVPROC glad_glVertex2hNV; -#define glVertex2hNV glad_glVertex2hNV -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLVERTEX2HVNVPROC glad_glVertex2hvNV; -#define glVertex2hvNV glad_glVertex2hvNV -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI PFNGLVERTEX3HNVPROC glad_glVertex3hNV; -#define glVertex3hNV glad_glVertex3hNV -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLVERTEX3HVNVPROC glad_glVertex3hvNV; -#define glVertex3hvNV glad_glVertex3hvNV -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI PFNGLVERTEX4HNVPROC glad_glVertex4hNV; -#define glVertex4hNV glad_glVertex4hNV -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLVERTEX4HVNVPROC glad_glVertex4hvNV; -#define glVertex4hvNV glad_glVertex4hvNV -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -GLAPI PFNGLNORMAL3HNVPROC glad_glNormal3hNV; -#define glNormal3hNV glad_glNormal3hNV -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLNORMAL3HVNVPROC glad_glNormal3hvNV; -#define glNormal3hvNV glad_glNormal3hvNV -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI PFNGLCOLOR3HNVPROC glad_glColor3hNV; -#define glColor3hNV glad_glColor3hNV -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLCOLOR3HVNVPROC glad_glColor3hvNV; -#define glColor3hvNV glad_glColor3hvNV -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -GLAPI PFNGLCOLOR4HNVPROC glad_glColor4hNV; -#define glColor4hNV glad_glColor4hNV -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLCOLOR4HVNVPROC glad_glColor4hvNV; -#define glColor4hvNV glad_glColor4hvNV -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC)(GLhalfNV s); -GLAPI PFNGLTEXCOORD1HNVPROC glad_glTexCoord1hNV; -#define glTexCoord1hNV glad_glTexCoord1hNV -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLTEXCOORD1HVNVPROC glad_glTexCoord1hvNV; -#define glTexCoord1hvNV glad_glTexCoord1hvNV -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t); -GLAPI PFNGLTEXCOORD2HNVPROC glad_glTexCoord2hNV; -#define glTexCoord2hNV glad_glTexCoord2hNV -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLTEXCOORD2HVNVPROC glad_glTexCoord2hvNV; -#define glTexCoord2hvNV glad_glTexCoord2hvNV -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI PFNGLTEXCOORD3HNVPROC glad_glTexCoord3hNV; -#define glTexCoord3hNV glad_glTexCoord3hNV -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLTEXCOORD3HVNVPROC glad_glTexCoord3hvNV; -#define glTexCoord3hvNV glad_glTexCoord3hvNV -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI PFNGLTEXCOORD4HNVPROC glad_glTexCoord4hNV; -#define glTexCoord4hNV glad_glTexCoord4hNV -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLTEXCOORD4HVNVPROC glad_glTexCoord4hvNV; -#define glTexCoord4hvNV glad_glTexCoord4hvNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s); -GLAPI PFNGLMULTITEXCOORD1HNVPROC glad_glMultiTexCoord1hNV; -#define glMultiTexCoord1hNV glad_glMultiTexCoord1hNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV *v); -GLAPI PFNGLMULTITEXCOORD1HVNVPROC glad_glMultiTexCoord1hvNV; -#define glMultiTexCoord1hvNV glad_glMultiTexCoord1hvNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t); -GLAPI PFNGLMULTITEXCOORD2HNVPROC glad_glMultiTexCoord2hNV; -#define glMultiTexCoord2hNV glad_glMultiTexCoord2hNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV *v); -GLAPI PFNGLMULTITEXCOORD2HVNVPROC glad_glMultiTexCoord2hvNV; -#define glMultiTexCoord2hvNV glad_glMultiTexCoord2hvNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI PFNGLMULTITEXCOORD3HNVPROC glad_glMultiTexCoord3hNV; -#define glMultiTexCoord3hNV glad_glMultiTexCoord3hNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV *v); -GLAPI PFNGLMULTITEXCOORD3HVNVPROC glad_glMultiTexCoord3hvNV; -#define glMultiTexCoord3hvNV glad_glMultiTexCoord3hvNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI PFNGLMULTITEXCOORD4HNVPROC glad_glMultiTexCoord4hNV; -#define glMultiTexCoord4hNV glad_glMultiTexCoord4hNV -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV *v); -GLAPI PFNGLMULTITEXCOORD4HVNVPROC glad_glMultiTexCoord4hvNV; -#define glMultiTexCoord4hvNV glad_glMultiTexCoord4hvNV -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC)(GLhalfNV fog); -GLAPI PFNGLFOGCOORDHNVPROC glad_glFogCoordhNV; -#define glFogCoordhNV glad_glFogCoordhNV -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC)(const GLhalfNV *fog); -GLAPI PFNGLFOGCOORDHVNVPROC glad_glFogCoordhvNV; -#define glFogCoordhvNV glad_glFogCoordhvNV -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI PFNGLSECONDARYCOLOR3HNVPROC glad_glSecondaryColor3hNV; -#define glSecondaryColor3hNV glad_glSecondaryColor3hNV -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC)(const GLhalfNV *v); -GLAPI PFNGLSECONDARYCOLOR3HVNVPROC glad_glSecondaryColor3hvNV; -#define glSecondaryColor3hvNV glad_glSecondaryColor3hvNV -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC)(GLhalfNV weight); -GLAPI PFNGLVERTEXWEIGHTHNVPROC glad_glVertexWeighthNV; -#define glVertexWeighthNV glad_glVertexWeighthNV -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC)(const GLhalfNV *weight); -GLAPI PFNGLVERTEXWEIGHTHVNVPROC glad_glVertexWeighthvNV; -#define glVertexWeighthvNV glad_glVertexWeighthvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x); -GLAPI PFNGLVERTEXATTRIB1HNVPROC glad_glVertexAttrib1hNV; -#define glVertexAttrib1hNV glad_glVertexAttrib1hNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIB1HVNVPROC glad_glVertexAttrib1hvNV; -#define glVertexAttrib1hvNV glad_glVertexAttrib1hvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y); -GLAPI PFNGLVERTEXATTRIB2HNVPROC glad_glVertexAttrib2hNV; -#define glVertexAttrib2hNV glad_glVertexAttrib2hNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIB2HVNVPROC glad_glVertexAttrib2hvNV; -#define glVertexAttrib2hvNV glad_glVertexAttrib2hvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI PFNGLVERTEXATTRIB3HNVPROC glad_glVertexAttrib3hNV; -#define glVertexAttrib3hNV glad_glVertexAttrib3hNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIB3HVNVPROC glad_glVertexAttrib3hvNV; -#define glVertexAttrib3hvNV glad_glVertexAttrib3hvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI PFNGLVERTEXATTRIB4HNVPROC glad_glVertexAttrib4hNV; -#define glVertexAttrib4hNV glad_glVertexAttrib4hNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIB4HVNVPROC glad_glVertexAttrib4hvNV; -#define glVertexAttrib4hvNV glad_glVertexAttrib4hvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIBS1HVNVPROC glad_glVertexAttribs1hvNV; -#define glVertexAttribs1hvNV glad_glVertexAttribs1hvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIBS2HVNVPROC glad_glVertexAttribs2hvNV; -#define glVertexAttribs2hvNV glad_glVertexAttribs2hvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIBS3HVNVPROC glad_glVertexAttribs3hvNV; -#define glVertexAttribs3hvNV glad_glVertexAttribs3hvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI PFNGLVERTEXATTRIBS4HVNVPROC glad_glVertexAttribs4hvNV; -#define glVertexAttribs4hvNV glad_glVertexAttribs4hvNV -#endif -#ifndef GL_NV_internalformat_sample_query -#define GL_NV_internalformat_sample_query 1 -GLAPI int GLAD_GL_NV_internalformat_sample_query; -typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC)(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); -GLAPI PFNGLGETINTERNALFORMATSAMPLEIVNVPROC glad_glGetInternalformatSampleivNV; -#define glGetInternalformatSampleivNV glad_glGetInternalformatSampleivNV -#endif -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -GLAPI int GLAD_GL_NV_light_max_exponent; -#endif -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 -GLAPI int GLAD_GL_NV_multisample_coverage; -#endif -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -GLAPI int GLAD_GL_NV_multisample_filter_hint; -#endif -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -GLAPI int GLAD_GL_NV_occlusion_query; -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLGENOCCLUSIONQUERIESNVPROC glad_glGenOcclusionQueriesNV; -#define glGenOcclusionQueriesNV glad_glGenOcclusionQueriesNV -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC)(GLsizei n, const GLuint *ids); -GLAPI PFNGLDELETEOCCLUSIONQUERIESNVPROC glad_glDeleteOcclusionQueriesNV; -#define glDeleteOcclusionQueriesNV glad_glDeleteOcclusionQueriesNV -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC)(GLuint id); -GLAPI PFNGLISOCCLUSIONQUERYNVPROC glad_glIsOcclusionQueryNV; -#define glIsOcclusionQueryNV glad_glIsOcclusionQueryNV -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC)(GLuint id); -GLAPI PFNGLBEGINOCCLUSIONQUERYNVPROC glad_glBeginOcclusionQueryNV; -#define glBeginOcclusionQueryNV glad_glBeginOcclusionQueryNV -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC)(void); -GLAPI PFNGLENDOCCLUSIONQUERYNVPROC glad_glEndOcclusionQueryNV; -#define glEndOcclusionQueryNV glad_glEndOcclusionQueryNV -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC)(GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLGETOCCLUSIONQUERYIVNVPROC glad_glGetOcclusionQueryivNV; -#define glGetOcclusionQueryivNV glad_glGetOcclusionQueryivNV -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC)(GLuint id, GLenum pname, GLuint *params); -GLAPI PFNGLGETOCCLUSIONQUERYUIVNVPROC glad_glGetOcclusionQueryuivNV; -#define glGetOcclusionQueryuivNV glad_glGetOcclusionQueryuivNV -#endif -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -GLAPI int GLAD_GL_NV_packed_depth_stencil; -#endif -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -GLAPI int GLAD_GL_NV_parameter_buffer_object; -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); -GLAPI PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC glad_glProgramBufferParametersfvNV; -#define glProgramBufferParametersfvNV glad_glProgramBufferParametersfvNV -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); -GLAPI PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC glad_glProgramBufferParametersIivNV; -#define glProgramBufferParametersIivNV glad_glProgramBufferParametersIivNV -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); -GLAPI PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC glad_glProgramBufferParametersIuivNV; -#define glProgramBufferParametersIuivNV glad_glProgramBufferParametersIuivNV -#endif -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 -GLAPI int GLAD_GL_NV_parameter_buffer_object2; -#endif -#ifndef GL_NV_path_rendering -#define GL_NV_path_rendering 1 -GLAPI int GLAD_GL_NV_path_rendering; -typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC)(GLsizei range); -GLAPI PFNGLGENPATHSNVPROC glad_glGenPathsNV; -#define glGenPathsNV glad_glGenPathsNV -typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC)(GLuint path, GLsizei range); -GLAPI PFNGLDELETEPATHSNVPROC glad_glDeletePathsNV; -#define glDeletePathsNV glad_glDeletePathsNV -typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC)(GLuint path); -GLAPI PFNGLISPATHNVPROC glad_glIsPathNV; -#define glIsPathNV glad_glIsPathNV -typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC)(GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI PFNGLPATHCOMMANDSNVPROC glad_glPathCommandsNV; -#define glPathCommandsNV glad_glPathCommandsNV -typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC)(GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI PFNGLPATHCOORDSNVPROC glad_glPathCoordsNV; -#define glPathCoordsNV glad_glPathCoordsNV -typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI PFNGLPATHSUBCOMMANDSNVPROC glad_glPathSubCommandsNV; -#define glPathSubCommandsNV glad_glPathSubCommandsNV -typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI PFNGLPATHSUBCOORDSNVPROC glad_glPathSubCoordsNV; -#define glPathSubCoordsNV glad_glPathSubCoordsNV -typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC)(GLuint path, GLenum format, GLsizei length, const void *pathString); -GLAPI PFNGLPATHSTRINGNVPROC glad_glPathStringNV; -#define glPathStringNV glad_glPathStringNV -typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC)(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI PFNGLPATHGLYPHSNVPROC glad_glPathGlyphsNV; -#define glPathGlyphsNV glad_glPathGlyphsNV -typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC)(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI PFNGLPATHGLYPHRANGENVPROC glad_glPathGlyphRangeNV; -#define glPathGlyphRangeNV glad_glPathGlyphRangeNV -typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC)(GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -GLAPI PFNGLWEIGHTPATHSNVPROC glad_glWeightPathsNV; -#define glWeightPathsNV glad_glWeightPathsNV -typedef void (APIENTRYP PFNGLCOPYPATHNVPROC)(GLuint resultPath, GLuint srcPath); -GLAPI PFNGLCOPYPATHNVPROC glad_glCopyPathNV; -#define glCopyPathNV glad_glCopyPathNV -typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -GLAPI PFNGLINTERPOLATEPATHSNVPROC glad_glInterpolatePathsNV; -#define glInterpolatePathsNV glad_glInterpolatePathsNV -typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -GLAPI PFNGLTRANSFORMPATHNVPROC glad_glTransformPathNV; -#define glTransformPathNV glad_glTransformPathNV -typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, const GLint *value); -GLAPI PFNGLPATHPARAMETERIVNVPROC glad_glPathParameterivNV; -#define glPathParameterivNV glad_glPathParameterivNV -typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC)(GLuint path, GLenum pname, GLint value); -GLAPI PFNGLPATHPARAMETERINVPROC glad_glPathParameteriNV; -#define glPathParameteriNV glad_glPathParameteriNV -typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, const GLfloat *value); -GLAPI PFNGLPATHPARAMETERFVNVPROC glad_glPathParameterfvNV; -#define glPathParameterfvNV glad_glPathParameterfvNV -typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC)(GLuint path, GLenum pname, GLfloat value); -GLAPI PFNGLPATHPARAMETERFNVPROC glad_glPathParameterfNV; -#define glPathParameterfNV glad_glPathParameterfNV -typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC)(GLuint path, GLsizei dashCount, const GLfloat *dashArray); -GLAPI PFNGLPATHDASHARRAYNVPROC glad_glPathDashArrayNV; -#define glPathDashArrayNV glad_glPathDashArrayNV -typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC)(GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLPATHSTENCILFUNCNVPROC glad_glPathStencilFuncNV; -#define glPathStencilFuncNV glad_glPathStencilFuncNV -typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC)(GLfloat factor, GLfloat units); -GLAPI PFNGLPATHSTENCILDEPTHOFFSETNVPROC glad_glPathStencilDepthOffsetNV; -#define glPathStencilDepthOffsetNV glad_glPathStencilDepthOffsetNV -typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask); -GLAPI PFNGLSTENCILFILLPATHNVPROC glad_glStencilFillPathNV; -#define glStencilFillPathNV glad_glStencilFillPathNV -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask); -GLAPI PFNGLSTENCILSTROKEPATHNVPROC glad_glStencilStrokePathNV; -#define glStencilStrokePathNV glad_glStencilStrokePathNV -typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI PFNGLSTENCILFILLPATHINSTANCEDNVPROC glad_glStencilFillPathInstancedNV; -#define glStencilFillPathInstancedNV glad_glStencilFillPathInstancedNV -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glad_glStencilStrokePathInstancedNV; -#define glStencilStrokePathInstancedNV glad_glStencilStrokePathInstancedNV -typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC)(GLenum func); -GLAPI PFNGLPATHCOVERDEPTHFUNCNVPROC glad_glPathCoverDepthFuncNV; -#define glPathCoverDepthFuncNV glad_glPathCoverDepthFuncNV -typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC)(GLuint path, GLenum coverMode); -GLAPI PFNGLCOVERFILLPATHNVPROC glad_glCoverFillPathNV; -#define glCoverFillPathNV glad_glCoverFillPathNV -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC)(GLuint path, GLenum coverMode); -GLAPI PFNGLCOVERSTROKEPATHNVPROC glad_glCoverStrokePathNV; -#define glCoverStrokePathNV glad_glCoverStrokePathNV -typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI PFNGLCOVERFILLPATHINSTANCEDNVPROC glad_glCoverFillPathInstancedNV; -#define glCoverFillPathInstancedNV glad_glCoverFillPathInstancedNV -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glad_glCoverStrokePathInstancedNV; -#define glCoverStrokePathInstancedNV glad_glCoverStrokePathInstancedNV -typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, GLint *value); -GLAPI PFNGLGETPATHPARAMETERIVNVPROC glad_glGetPathParameterivNV; -#define glGetPathParameterivNV glad_glGetPathParameterivNV -typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, GLfloat *value); -GLAPI PFNGLGETPATHPARAMETERFVNVPROC glad_glGetPathParameterfvNV; -#define glGetPathParameterfvNV glad_glGetPathParameterfvNV -typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC)(GLuint path, GLubyte *commands); -GLAPI PFNGLGETPATHCOMMANDSNVPROC glad_glGetPathCommandsNV; -#define glGetPathCommandsNV glad_glGetPathCommandsNV -typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC)(GLuint path, GLfloat *coords); -GLAPI PFNGLGETPATHCOORDSNVPROC glad_glGetPathCoordsNV; -#define glGetPathCoordsNV glad_glGetPathCoordsNV -typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC)(GLuint path, GLfloat *dashArray); -GLAPI PFNGLGETPATHDASHARRAYNVPROC glad_glGetPathDashArrayNV; -#define glGetPathDashArrayNV glad_glGetPathDashArrayNV -typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -GLAPI PFNGLGETPATHMETRICSNVPROC glad_glGetPathMetricsNV; -#define glGetPathMetricsNV glad_glGetPathMetricsNV -typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC)(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -GLAPI PFNGLGETPATHMETRICRANGENVPROC glad_glGetPathMetricRangeNV; -#define glGetPathMetricRangeNV glad_glGetPathMetricRangeNV -typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -GLAPI PFNGLGETPATHSPACINGNVPROC glad_glGetPathSpacingNV; -#define glGetPathSpacingNV glad_glGetPathSpacingNV -typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC)(GLuint path, GLuint mask, GLfloat x, GLfloat y); -GLAPI PFNGLISPOINTINFILLPATHNVPROC glad_glIsPointInFillPathNV; -#define glIsPointInFillPathNV glad_glIsPointInFillPathNV -typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC)(GLuint path, GLfloat x, GLfloat y); -GLAPI PFNGLISPOINTINSTROKEPATHNVPROC glad_glIsPointInStrokePathNV; -#define glIsPointInStrokePathNV glad_glIsPointInStrokePathNV -typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments); -GLAPI PFNGLGETPATHLENGTHNVPROC glad_glGetPathLengthNV; -#define glGetPathLengthNV glad_glGetPathLengthNV -typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -GLAPI PFNGLPOINTALONGPATHNVPROC glad_glPointAlongPathNV; -#define glPointAlongPathNV glad_glPointAlongPathNV -typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC)(GLenum matrixMode, const GLfloat *m); -GLAPI PFNGLMATRIXLOAD3X2FNVPROC glad_glMatrixLoad3x2fNV; -#define glMatrixLoad3x2fNV glad_glMatrixLoad3x2fNV -typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); -GLAPI PFNGLMATRIXLOAD3X3FNVPROC glad_glMatrixLoad3x3fNV; -#define glMatrixLoad3x3fNV glad_glMatrixLoad3x3fNV -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); -GLAPI PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC glad_glMatrixLoadTranspose3x3fNV; -#define glMatrixLoadTranspose3x3fNV glad_glMatrixLoadTranspose3x3fNV -typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC)(GLenum matrixMode, const GLfloat *m); -GLAPI PFNGLMATRIXMULT3X2FNVPROC glad_glMatrixMult3x2fNV; -#define glMatrixMult3x2fNV glad_glMatrixMult3x2fNV -typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); -GLAPI PFNGLMATRIXMULT3X3FNVPROC glad_glMatrixMult3x3fNV; -#define glMatrixMult3x3fNV glad_glMatrixMult3x3fNV -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat *m); -GLAPI PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC glad_glMatrixMultTranspose3x3fNV; -#define glMatrixMultTranspose3x3fNV glad_glMatrixMultTranspose3x3fNV -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); -GLAPI PFNGLSTENCILTHENCOVERFILLPATHNVPROC glad_glStencilThenCoverFillPathNV; -#define glStencilThenCoverFillPathNV glad_glStencilThenCoverFillPathNV -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask, GLenum coverMode); -GLAPI PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC glad_glStencilThenCoverStrokePathNV; -#define glStencilThenCoverStrokePathNV glad_glStencilThenCoverStrokePathNV -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC glad_glStencilThenCoverFillPathInstancedNV; -#define glStencilThenCoverFillPathInstancedNV glad_glStencilThenCoverFillPathInstancedNV -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC glad_glStencilThenCoverStrokePathInstancedNV; -#define glStencilThenCoverStrokePathInstancedNV glad_glStencilThenCoverStrokePathInstancedNV -typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC)(GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); -GLAPI PFNGLPATHGLYPHINDEXRANGENVPROC glad_glPathGlyphIndexRangeNV; -#define glPathGlyphIndexRangeNV glad_glPathGlyphIndexRangeNV -typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI PFNGLPATHGLYPHINDEXARRAYNVPROC glad_glPathGlyphIndexArrayNV; -#define glPathGlyphIndexArrayNV glad_glPathGlyphIndexArrayNV -typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC glad_glPathMemoryGlyphIndexArrayNV; -#define glPathMemoryGlyphIndexArrayNV glad_glPathMemoryGlyphIndexArrayNV -typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC)(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); -GLAPI PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC glad_glProgramPathFragmentInputGenNV; -#define glProgramPathFragmentInputGenNV glad_glProgramPathFragmentInputGenNV -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); -GLAPI PFNGLGETPROGRAMRESOURCEFVNVPROC glad_glGetProgramResourcefvNV; -#define glGetProgramResourcefvNV glad_glGetProgramResourcefvNV -typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC)(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); -GLAPI PFNGLPATHCOLORGENNVPROC glad_glPathColorGenNV; -#define glPathColorGenNV glad_glPathColorGenNV -typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC)(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); -GLAPI PFNGLPATHTEXGENNVPROC glad_glPathTexGenNV; -#define glPathTexGenNV glad_glPathTexGenNV -typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC)(GLenum genMode); -GLAPI PFNGLPATHFOGGENNVPROC glad_glPathFogGenNV; -#define glPathFogGenNV glad_glPathFogGenNV -typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC)(GLenum color, GLenum pname, GLint *value); -GLAPI PFNGLGETPATHCOLORGENIVNVPROC glad_glGetPathColorGenivNV; -#define glGetPathColorGenivNV glad_glGetPathColorGenivNV -typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC)(GLenum color, GLenum pname, GLfloat *value); -GLAPI PFNGLGETPATHCOLORGENFVNVPROC glad_glGetPathColorGenfvNV; -#define glGetPathColorGenfvNV glad_glGetPathColorGenfvNV -typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC)(GLenum texCoordSet, GLenum pname, GLint *value); -GLAPI PFNGLGETPATHTEXGENIVNVPROC glad_glGetPathTexGenivNV; -#define glGetPathTexGenivNV glad_glGetPathTexGenivNV -typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC)(GLenum texCoordSet, GLenum pname, GLfloat *value); -GLAPI PFNGLGETPATHTEXGENFVNVPROC glad_glGetPathTexGenfvNV; -#define glGetPathTexGenfvNV glad_glGetPathTexGenfvNV -#endif -#ifndef GL_NV_path_rendering_shared_edge -#define GL_NV_path_rendering_shared_edge 1 -GLAPI int GLAD_GL_NV_path_rendering_shared_edge; -#endif -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -GLAPI int GLAD_GL_NV_pixel_data_range; -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC)(GLenum target, GLsizei length, const void *pointer); -GLAPI PFNGLPIXELDATARANGENVPROC glad_glPixelDataRangeNV; -#define glPixelDataRangeNV glad_glPixelDataRangeNV -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC)(GLenum target); -GLAPI PFNGLFLUSHPIXELDATARANGENVPROC glad_glFlushPixelDataRangeNV; -#define glFlushPixelDataRangeNV glad_glFlushPixelDataRangeNV -#endif -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -GLAPI int GLAD_GL_NV_point_sprite; -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC)(GLenum pname, GLint param); -GLAPI PFNGLPOINTPARAMETERINVPROC glad_glPointParameteriNV; -#define glPointParameteriNV glad_glPointParameteriNV -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLPOINTPARAMETERIVNVPROC glad_glPointParameterivNV; -#define glPointParameterivNV glad_glPointParameterivNV -#endif -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 -GLAPI int GLAD_GL_NV_present_video; -typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -GLAPI PFNGLPRESENTFRAMEKEYEDNVPROC glad_glPresentFrameKeyedNV; -#define glPresentFrameKeyedNV glad_glPresentFrameKeyedNV -typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -GLAPI PFNGLPRESENTFRAMEDUALFILLNVPROC glad_glPresentFrameDualFillNV; -#define glPresentFrameDualFillNV glad_glPresentFrameDualFillNV -typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC)(GLuint video_slot, GLenum pname, GLint *params); -GLAPI PFNGLGETVIDEOIVNVPROC glad_glGetVideoivNV; -#define glGetVideoivNV glad_glGetVideoivNV -typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC)(GLuint video_slot, GLenum pname, GLuint *params); -GLAPI PFNGLGETVIDEOUIVNVPROC glad_glGetVideouivNV; -#define glGetVideouivNV glad_glGetVideouivNV -typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC)(GLuint video_slot, GLenum pname, GLint64EXT *params); -GLAPI PFNGLGETVIDEOI64VNVPROC glad_glGetVideoi64vNV; -#define glGetVideoi64vNV glad_glGetVideoi64vNV -typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC)(GLuint video_slot, GLenum pname, GLuint64EXT *params); -GLAPI PFNGLGETVIDEOUI64VNVPROC glad_glGetVideoui64vNV; -#define glGetVideoui64vNV glad_glGetVideoui64vNV -#endif -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -GLAPI int GLAD_GL_NV_primitive_restart; -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC)(void); -GLAPI PFNGLPRIMITIVERESTARTNVPROC glad_glPrimitiveRestartNV; -#define glPrimitiveRestartNV glad_glPrimitiveRestartNV -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC)(GLuint index); -GLAPI PFNGLPRIMITIVERESTARTINDEXNVPROC glad_glPrimitiveRestartIndexNV; -#define glPrimitiveRestartIndexNV glad_glPrimitiveRestartIndexNV -#endif -#ifndef GL_NV_query_resource -#define GL_NV_query_resource 1 -GLAPI int GLAD_GL_NV_query_resource; -typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC)(GLenum queryType, GLint tagId, GLuint bufSize, GLint *buffer); -GLAPI PFNGLQUERYRESOURCENVPROC glad_glQueryResourceNV; -#define glQueryResourceNV glad_glQueryResourceNV -#endif -#ifndef GL_NV_query_resource_tag -#define GL_NV_query_resource_tag 1 -GLAPI int GLAD_GL_NV_query_resource_tag; -typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC)(GLsizei n, GLint *tagIds); -GLAPI PFNGLGENQUERYRESOURCETAGNVPROC glad_glGenQueryResourceTagNV; -#define glGenQueryResourceTagNV glad_glGenQueryResourceTagNV -typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC)(GLsizei n, const GLint *tagIds); -GLAPI PFNGLDELETEQUERYRESOURCETAGNVPROC glad_glDeleteQueryResourceTagNV; -#define glDeleteQueryResourceTagNV glad_glDeleteQueryResourceTagNV -typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC)(GLint tagId, const GLchar *tagString); -GLAPI PFNGLQUERYRESOURCETAGNVPROC glad_glQueryResourceTagNV; -#define glQueryResourceTagNV glad_glQueryResourceTagNV -#endif -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -GLAPI int GLAD_GL_NV_register_combiners; -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLCOMBINERPARAMETERFVNVPROC glad_glCombinerParameterfvNV; -#define glCombinerParameterfvNV glad_glCombinerParameterfvNV -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLCOMBINERPARAMETERFNVPROC glad_glCombinerParameterfNV; -#define glCombinerParameterfNV glad_glCombinerParameterfNV -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLCOMBINERPARAMETERIVNVPROC glad_glCombinerParameterivNV; -#define glCombinerParameterivNV glad_glCombinerParameterivNV -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param); -GLAPI PFNGLCOMBINERPARAMETERINVPROC glad_glCombinerParameteriNV; -#define glCombinerParameteriNV glad_glCombinerParameteriNV -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI PFNGLCOMBINERINPUTNVPROC glad_glCombinerInputNV; -#define glCombinerInputNV glad_glCombinerInputNV -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -GLAPI PFNGLCOMBINEROUTPUTNVPROC glad_glCombinerOutputNV; -#define glCombinerOutputNV glad_glCombinerOutputNV -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI PFNGLFINALCOMBINERINPUTNVPROC glad_glFinalCombinerInputNV; -#define glFinalCombinerInputNV glad_glFinalCombinerInputNV -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glad_glGetCombinerInputParameterfvNV; -#define glGetCombinerInputParameterfvNV glad_glGetCombinerInputParameterfvNV -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -GLAPI PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glad_glGetCombinerInputParameterivNV; -#define glGetCombinerInputParameterivNV glad_glGetCombinerInputParameterivNV -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glad_glGetCombinerOutputParameterfvNV; -#define glGetCombinerOutputParameterfvNV glad_glGetCombinerOutputParameterfvNV -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLint *params); -GLAPI PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glad_glGetCombinerOutputParameterivNV; -#define glGetCombinerOutputParameterivNV glad_glGetCombinerOutputParameterivNV -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat *params); -GLAPI PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glad_glGetFinalCombinerInputParameterfvNV; -#define glGetFinalCombinerInputParameterfvNV glad_glGetFinalCombinerInputParameterfvNV -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint *params); -GLAPI PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glad_glGetFinalCombinerInputParameterivNV; -#define glGetFinalCombinerInputParameterivNV glad_glGetFinalCombinerInputParameterivNV -#endif -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -GLAPI int GLAD_GL_NV_register_combiners2; -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat *params); -GLAPI PFNGLCOMBINERSTAGEPARAMETERFVNVPROC glad_glCombinerStageParameterfvNV; -#define glCombinerStageParameterfvNV glad_glCombinerStageParameterfvNV -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC glad_glGetCombinerStageParameterfvNV; -#define glGetCombinerStageParameterfvNV glad_glGetCombinerStageParameterfvNV -#endif -#ifndef GL_NV_robustness_video_memory_purge -#define GL_NV_robustness_video_memory_purge 1 -GLAPI int GLAD_GL_NV_robustness_video_memory_purge; -#endif -#ifndef GL_NV_sample_locations -#define GL_NV_sample_locations 1 -GLAPI int GLAD_GL_NV_sample_locations; -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat *v); -GLAPI PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glFramebufferSampleLocationsfvNV; -#define glFramebufferSampleLocationsfvNV glad_glFramebufferSampleLocationsfvNV -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glNamedFramebufferSampleLocationsfvNV; -#define glNamedFramebufferSampleLocationsfvNV glad_glNamedFramebufferSampleLocationsfvNV -typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC)(void); -GLAPI PFNGLRESOLVEDEPTHVALUESNVPROC glad_glResolveDepthValuesNV; -#define glResolveDepthValuesNV glad_glResolveDepthValuesNV -#endif -#ifndef GL_NV_sample_mask_override_coverage -#define GL_NV_sample_mask_override_coverage 1 -GLAPI int GLAD_GL_NV_sample_mask_override_coverage; -#endif -#ifndef GL_NV_shader_atomic_counters -#define GL_NV_shader_atomic_counters 1 -GLAPI int GLAD_GL_NV_shader_atomic_counters; -#endif -#ifndef GL_NV_shader_atomic_float -#define GL_NV_shader_atomic_float 1 -GLAPI int GLAD_GL_NV_shader_atomic_float; -#endif -#ifndef GL_NV_shader_atomic_float64 -#define GL_NV_shader_atomic_float64 1 -GLAPI int GLAD_GL_NV_shader_atomic_float64; -#endif -#ifndef GL_NV_shader_atomic_fp16_vector -#define GL_NV_shader_atomic_fp16_vector 1 -GLAPI int GLAD_GL_NV_shader_atomic_fp16_vector; -#endif -#ifndef GL_NV_shader_atomic_int64 -#define GL_NV_shader_atomic_int64 1 -GLAPI int GLAD_GL_NV_shader_atomic_int64; -#endif -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 -GLAPI int GLAD_GL_NV_shader_buffer_load; -typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC)(GLenum target, GLenum access); -GLAPI PFNGLMAKEBUFFERRESIDENTNVPROC glad_glMakeBufferResidentNV; -#define glMakeBufferResidentNV glad_glMakeBufferResidentNV -typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC)(GLenum target); -GLAPI PFNGLMAKEBUFFERNONRESIDENTNVPROC glad_glMakeBufferNonResidentNV; -#define glMakeBufferNonResidentNV glad_glMakeBufferNonResidentNV -typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC)(GLenum target); -GLAPI PFNGLISBUFFERRESIDENTNVPROC glad_glIsBufferResidentNV; -#define glIsBufferResidentNV glad_glIsBufferResidentNV -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)(GLuint buffer, GLenum access); -GLAPI PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glad_glMakeNamedBufferResidentNV; -#define glMakeNamedBufferResidentNV glad_glMakeNamedBufferResidentNV -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)(GLuint buffer); -GLAPI PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glad_glMakeNamedBufferNonResidentNV; -#define glMakeNamedBufferNonResidentNV glad_glMakeNamedBufferNonResidentNV -typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC)(GLuint buffer); -GLAPI PFNGLISNAMEDBUFFERRESIDENTNVPROC glad_glIsNamedBufferResidentNV; -#define glIsNamedBufferResidentNV glad_glIsNamedBufferResidentNV -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC)(GLenum target, GLenum pname, GLuint64EXT *params); -GLAPI PFNGLGETBUFFERPARAMETERUI64VNVPROC glad_glGetBufferParameterui64vNV; -#define glGetBufferParameterui64vNV glad_glGetBufferParameterui64vNV -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)(GLuint buffer, GLenum pname, GLuint64EXT *params); -GLAPI PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glad_glGetNamedBufferParameterui64vNV; -#define glGetNamedBufferParameterui64vNV glad_glGetNamedBufferParameterui64vNV -typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC)(GLenum value, GLuint64EXT *result); -GLAPI PFNGLGETINTEGERUI64VNVPROC glad_glGetIntegerui64vNV; -#define glGetIntegerui64vNV glad_glGetIntegerui64vNV -typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC)(GLint location, GLuint64EXT value); -GLAPI PFNGLUNIFORMUI64NVPROC glad_glUniformui64NV; -#define glUniformui64NV glad_glUniformui64NV -typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLUNIFORMUI64VNVPROC glad_glUniformui64vNV; -#define glUniformui64vNV glad_glUniformui64vNV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC)(GLuint program, GLint location, GLuint64EXT value); -GLAPI PFNGLPROGRAMUNIFORMUI64NVPROC glad_glProgramUniformui64NV; -#define glProgramUniformui64NV glad_glProgramUniformui64NV -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI PFNGLPROGRAMUNIFORMUI64VNVPROC glad_glProgramUniformui64vNV; -#define glProgramUniformui64vNV glad_glProgramUniformui64vNV -#endif -#ifndef GL_NV_shader_buffer_store -#define GL_NV_shader_buffer_store 1 -GLAPI int GLAD_GL_NV_shader_buffer_store; -#endif -#ifndef GL_NV_shader_storage_buffer_object -#define GL_NV_shader_storage_buffer_object 1 -GLAPI int GLAD_GL_NV_shader_storage_buffer_object; -#endif -#ifndef GL_NV_shader_thread_group -#define GL_NV_shader_thread_group 1 -GLAPI int GLAD_GL_NV_shader_thread_group; -#endif -#ifndef GL_NV_shader_thread_shuffle -#define GL_NV_shader_thread_shuffle 1 -GLAPI int GLAD_GL_NV_shader_thread_shuffle; -#endif -#ifndef GL_NV_stereo_view_rendering -#define GL_NV_stereo_view_rendering 1 -GLAPI int GLAD_GL_NV_stereo_view_rendering; -#endif -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 -GLAPI int GLAD_GL_NV_tessellation_program5; -#endif -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -GLAPI int GLAD_GL_NV_texgen_emboss; -#endif -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -GLAPI int GLAD_GL_NV_texgen_reflection; -#endif -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 -GLAPI int GLAD_GL_NV_texture_barrier; -typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC)(void); -GLAPI PFNGLTEXTUREBARRIERNVPROC glad_glTextureBarrierNV; -#define glTextureBarrierNV glad_glTextureBarrierNV -#endif -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -GLAPI int GLAD_GL_NV_texture_compression_vtc; -#endif -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -GLAPI int GLAD_GL_NV_texture_env_combine4; -#endif -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -GLAPI int GLAD_GL_NV_texture_expand_normal; -#endif -#ifndef GL_NV_texture_multisample -#define GL_NV_texture_multisample 1 -GLAPI int GLAD_GL_NV_texture_multisample; -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTexImage2DMultisampleCoverageNV; -#define glTexImage2DMultisampleCoverageNV glad_glTexImage2DMultisampleCoverageNV -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTexImage3DMultisampleCoverageNV; -#define glTexImage3DMultisampleCoverageNV glad_glTexImage3DMultisampleCoverageNV -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC glad_glTextureImage2DMultisampleNV; -#define glTextureImage2DMultisampleNV glad_glTextureImage2DMultisampleNV -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC glad_glTextureImage3DMultisampleNV; -#define glTextureImage3DMultisampleNV glad_glTextureImage3DMultisampleNV -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTextureImage2DMultisampleCoverageNV; -#define glTextureImage2DMultisampleCoverageNV glad_glTextureImage2DMultisampleCoverageNV -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTextureImage3DMultisampleCoverageNV; -#define glTextureImage3DMultisampleCoverageNV glad_glTextureImage3DMultisampleCoverageNV -#endif -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -GLAPI int GLAD_GL_NV_texture_rectangle; -#endif -#ifndef GL_NV_texture_rectangle_compressed -#define GL_NV_texture_rectangle_compressed 1 -GLAPI int GLAD_GL_NV_texture_rectangle_compressed; -#endif -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -GLAPI int GLAD_GL_NV_texture_shader; -#endif -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -GLAPI int GLAD_GL_NV_texture_shader2; -#endif -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -GLAPI int GLAD_GL_NV_texture_shader3; -#endif -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -GLAPI int GLAD_GL_NV_transform_feedback; -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC)(GLenum primitiveMode); -GLAPI PFNGLBEGINTRANSFORMFEEDBACKNVPROC glad_glBeginTransformFeedbackNV; -#define glBeginTransformFeedbackNV glad_glBeginTransformFeedbackNV -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC)(void); -GLAPI PFNGLENDTRANSFORMFEEDBACKNVPROC glad_glEndTransformFeedbackNV; -#define glEndTransformFeedbackNV glad_glEndTransformFeedbackNV -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)(GLsizei count, const GLint *attribs, GLenum bufferMode); -GLAPI PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC glad_glTransformFeedbackAttribsNV; -#define glTransformFeedbackAttribsNV glad_glTransformFeedbackAttribsNV -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLBINDBUFFERRANGENVPROC glad_glBindBufferRangeNV; -#define glBindBufferRangeNV glad_glBindBufferRangeNV -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI PFNGLBINDBUFFEROFFSETNVPROC glad_glBindBufferOffsetNV; -#define glBindBufferOffsetNV glad_glBindBufferOffsetNV -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC)(GLenum target, GLuint index, GLuint buffer); -GLAPI PFNGLBINDBUFFERBASENVPROC glad_glBindBufferBaseNV; -#define glBindBufferBaseNV glad_glBindBufferBaseNV -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)(GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC glad_glTransformFeedbackVaryingsNV; -#define glTransformFeedbackVaryingsNV glad_glTransformFeedbackVaryingsNV -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLACTIVEVARYINGNVPROC glad_glActiveVaryingNV; -#define glActiveVaryingNV glad_glActiveVaryingNV -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETVARYINGLOCATIONNVPROC glad_glGetVaryingLocationNV; -#define glGetVaryingLocationNV glad_glGetVaryingLocationNV -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETACTIVEVARYINGNVPROC glad_glGetActiveVaryingNV; -#define glGetActiveVaryingNV glad_glGetActiveVaryingNV -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)(GLuint program, GLuint index, GLint *location); -GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC glad_glGetTransformFeedbackVaryingNV; -#define glGetTransformFeedbackVaryingNV glad_glGetTransformFeedbackVaryingNV -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC)(GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -GLAPI PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC glad_glTransformFeedbackStreamAttribsNV; -#define glTransformFeedbackStreamAttribsNV glad_glTransformFeedbackStreamAttribsNV -#endif -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 -GLAPI int GLAD_GL_NV_transform_feedback2; -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC)(GLenum target, GLuint id); -GLAPI PFNGLBINDTRANSFORMFEEDBACKNVPROC glad_glBindTransformFeedbackNV; -#define glBindTransformFeedbackNV glad_glBindTransformFeedbackNV -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC)(GLsizei n, const GLuint *ids); -GLAPI PFNGLDELETETRANSFORMFEEDBACKSNVPROC glad_glDeleteTransformFeedbacksNV; -#define glDeleteTransformFeedbacksNV glad_glDeleteTransformFeedbacksNV -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLGENTRANSFORMFEEDBACKSNVPROC glad_glGenTransformFeedbacksNV; -#define glGenTransformFeedbacksNV glad_glGenTransformFeedbacksNV -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC)(GLuint id); -GLAPI PFNGLISTRANSFORMFEEDBACKNVPROC glad_glIsTransformFeedbackNV; -#define glIsTransformFeedbackNV glad_glIsTransformFeedbackNV -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC)(void); -GLAPI PFNGLPAUSETRANSFORMFEEDBACKNVPROC glad_glPauseTransformFeedbackNV; -#define glPauseTransformFeedbackNV glad_glPauseTransformFeedbackNV -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC)(void); -GLAPI PFNGLRESUMETRANSFORMFEEDBACKNVPROC glad_glResumeTransformFeedbackNV; -#define glResumeTransformFeedbackNV glad_glResumeTransformFeedbackNV -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC)(GLenum mode, GLuint id); -GLAPI PFNGLDRAWTRANSFORMFEEDBACKNVPROC glad_glDrawTransformFeedbackNV; -#define glDrawTransformFeedbackNV glad_glDrawTransformFeedbackNV -#endif -#ifndef GL_NV_uniform_buffer_unified_memory -#define GL_NV_uniform_buffer_unified_memory 1 -GLAPI int GLAD_GL_NV_uniform_buffer_unified_memory; -#endif -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 -GLAPI int GLAD_GL_NV_vdpau_interop; -typedef void (APIENTRYP PFNGLVDPAUINITNVPROC)(const void *vdpDevice, const void *getProcAddress); -GLAPI PFNGLVDPAUINITNVPROC glad_glVDPAUInitNV; -#define glVDPAUInitNV glad_glVDPAUInitNV -typedef void (APIENTRYP PFNGLVDPAUFININVPROC)(void); -GLAPI PFNGLVDPAUFININVPROC glad_glVDPAUFiniNV; -#define glVDPAUFiniNV glad_glVDPAUFiniNV -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)(const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI PFNGLVDPAUREGISTERVIDEOSURFACENVPROC glad_glVDPAURegisterVideoSurfaceNV; -#define glVDPAURegisterVideoSurfaceNV glad_glVDPAURegisterVideoSurfaceNV -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)(const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC glad_glVDPAURegisterOutputSurfaceNV; -#define glVDPAURegisterOutputSurfaceNV glad_glVDPAURegisterOutputSurfaceNV -typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC)(GLvdpauSurfaceNV surface); -GLAPI PFNGLVDPAUISSURFACENVPROC glad_glVDPAUIsSurfaceNV; -#define glVDPAUIsSurfaceNV glad_glVDPAUIsSurfaceNV -typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC)(GLvdpauSurfaceNV surface); -GLAPI PFNGLVDPAUUNREGISTERSURFACENVPROC glad_glVDPAUUnregisterSurfaceNV; -#define glVDPAUUnregisterSurfaceNV glad_glVDPAUUnregisterSurfaceNV -typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC)(GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI PFNGLVDPAUGETSURFACEIVNVPROC glad_glVDPAUGetSurfaceivNV; -#define glVDPAUGetSurfaceivNV glad_glVDPAUGetSurfaceivNV -typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC)(GLvdpauSurfaceNV surface, GLenum access); -GLAPI PFNGLVDPAUSURFACEACCESSNVPROC glad_glVDPAUSurfaceAccessNV; -#define glVDPAUSurfaceAccessNV glad_glVDPAUSurfaceAccessNV -typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC)(GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -GLAPI PFNGLVDPAUMAPSURFACESNVPROC glad_glVDPAUMapSurfacesNV; -#define glVDPAUMapSurfacesNV glad_glVDPAUMapSurfacesNV -typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC)(GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -GLAPI PFNGLVDPAUUNMAPSURFACESNVPROC glad_glVDPAUUnmapSurfacesNV; -#define glVDPAUUnmapSurfacesNV glad_glVDPAUUnmapSurfacesNV -#endif -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -GLAPI int GLAD_GL_NV_vertex_array_range; -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC)(void); -GLAPI PFNGLFLUSHVERTEXARRAYRANGENVPROC glad_glFlushVertexArrayRangeNV; -#define glFlushVertexArrayRangeNV glad_glFlushVertexArrayRangeNV -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC)(GLsizei length, const void *pointer); -GLAPI PFNGLVERTEXARRAYRANGENVPROC glad_glVertexArrayRangeNV; -#define glVertexArrayRangeNV glad_glVertexArrayRangeNV -#endif -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -GLAPI int GLAD_GL_NV_vertex_array_range2; -#endif -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 -GLAPI int GLAD_GL_NV_vertex_attrib_integer_64bit; -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC)(GLuint index, GLint64EXT x); -GLAPI PFNGLVERTEXATTRIBL1I64NVPROC glad_glVertexAttribL1i64NV; -#define glVertexAttribL1i64NV glad_glVertexAttribL1i64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y); -GLAPI PFNGLVERTEXATTRIBL2I64NVPROC glad_glVertexAttribL2i64NV; -#define glVertexAttribL2i64NV glad_glVertexAttribL2i64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI PFNGLVERTEXATTRIBL3I64NVPROC glad_glVertexAttribL3i64NV; -#define glVertexAttribL3i64NV glad_glVertexAttribL3i64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI PFNGLVERTEXATTRIBL4I64NVPROC glad_glVertexAttribL4i64NV; -#define glVertexAttribL4i64NV glad_glVertexAttribL4i64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC)(GLuint index, const GLint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL1I64VNVPROC glad_glVertexAttribL1i64vNV; -#define glVertexAttribL1i64vNV glad_glVertexAttribL1i64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC)(GLuint index, const GLint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL2I64VNVPROC glad_glVertexAttribL2i64vNV; -#define glVertexAttribL2i64vNV glad_glVertexAttribL2i64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC)(GLuint index, const GLint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL3I64VNVPROC glad_glVertexAttribL3i64vNV; -#define glVertexAttribL3i64vNV glad_glVertexAttribL3i64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC)(GLuint index, const GLint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL4I64VNVPROC glad_glVertexAttribL4i64vNV; -#define glVertexAttribL4i64vNV glad_glVertexAttribL4i64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC)(GLuint index, GLuint64EXT x); -GLAPI PFNGLVERTEXATTRIBL1UI64NVPROC glad_glVertexAttribL1ui64NV; -#define glVertexAttribL1ui64NV glad_glVertexAttribL1ui64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y); -GLAPI PFNGLVERTEXATTRIBL2UI64NVPROC glad_glVertexAttribL2ui64NV; -#define glVertexAttribL2ui64NV glad_glVertexAttribL2ui64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI PFNGLVERTEXATTRIBL3UI64NVPROC glad_glVertexAttribL3ui64NV; -#define glVertexAttribL3ui64NV glad_glVertexAttribL3ui64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI PFNGLVERTEXATTRIBL4UI64NVPROC glad_glVertexAttribL4ui64NV; -#define glVertexAttribL4ui64NV glad_glVertexAttribL4ui64NV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC)(GLuint index, const GLuint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL1UI64VNVPROC glad_glVertexAttribL1ui64vNV; -#define glVertexAttribL1ui64vNV glad_glVertexAttribL1ui64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC)(GLuint index, const GLuint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL2UI64VNVPROC glad_glVertexAttribL2ui64vNV; -#define glVertexAttribL2ui64vNV glad_glVertexAttribL2ui64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC)(GLuint index, const GLuint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL3UI64VNVPROC glad_glVertexAttribL3ui64vNV; -#define glVertexAttribL3ui64vNV glad_glVertexAttribL3ui64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC)(GLuint index, const GLuint64EXT *v); -GLAPI PFNGLVERTEXATTRIBL4UI64VNVPROC glad_glVertexAttribL4ui64vNV; -#define glVertexAttribL4ui64vNV glad_glVertexAttribL4ui64vNV -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC)(GLuint index, GLenum pname, GLint64EXT *params); -GLAPI PFNGLGETVERTEXATTRIBLI64VNVPROC glad_glGetVertexAttribLi64vNV; -#define glGetVertexAttribLi64vNV glad_glGetVertexAttribLi64vNV -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC)(GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI PFNGLGETVERTEXATTRIBLUI64VNVPROC glad_glGetVertexAttribLui64vNV; -#define glGetVertexAttribLui64vNV glad_glGetVertexAttribLui64vNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI PFNGLVERTEXATTRIBLFORMATNVPROC glad_glVertexAttribLFormatNV; -#define glVertexAttribLFormatNV glad_glVertexAttribLFormatNV -#endif -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 -GLAPI int GLAD_GL_NV_vertex_buffer_unified_memory; -typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC)(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -GLAPI PFNGLBUFFERADDRESSRANGENVPROC glad_glBufferAddressRangeNV; -#define glBufferAddressRangeNV glad_glBufferAddressRangeNV -typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); -GLAPI PFNGLVERTEXFORMATNVPROC glad_glVertexFormatNV; -#define glVertexFormatNV glad_glVertexFormatNV -typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC)(GLenum type, GLsizei stride); -GLAPI PFNGLNORMALFORMATNVPROC glad_glNormalFormatNV; -#define glNormalFormatNV glad_glNormalFormatNV -typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); -GLAPI PFNGLCOLORFORMATNVPROC glad_glColorFormatNV; -#define glColorFormatNV glad_glColorFormatNV -typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC)(GLenum type, GLsizei stride); -GLAPI PFNGLINDEXFORMATNVPROC glad_glIndexFormatNV; -#define glIndexFormatNV glad_glIndexFormatNV -typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); -GLAPI PFNGLTEXCOORDFORMATNVPROC glad_glTexCoordFormatNV; -#define glTexCoordFormatNV glad_glTexCoordFormatNV -typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC)(GLsizei stride); -GLAPI PFNGLEDGEFLAGFORMATNVPROC glad_glEdgeFlagFormatNV; -#define glEdgeFlagFormatNV glad_glEdgeFlagFormatNV -typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); -GLAPI PFNGLSECONDARYCOLORFORMATNVPROC glad_glSecondaryColorFormatNV; -#define glSecondaryColorFormatNV glad_glSecondaryColorFormatNV -typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC)(GLenum type, GLsizei stride); -GLAPI PFNGLFOGCOORDFORMATNVPROC glad_glFogCoordFormatNV; -#define glFogCoordFormatNV glad_glFogCoordFormatNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -GLAPI PFNGLVERTEXATTRIBFORMATNVPROC glad_glVertexAttribFormatNV; -#define glVertexAttribFormatNV glad_glVertexAttribFormatNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI PFNGLVERTEXATTRIBIFORMATNVPROC glad_glVertexAttribIFormatNV; -#define glVertexAttribIFormatNV glad_glVertexAttribIFormatNV -typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC)(GLenum value, GLuint index, GLuint64EXT *result); -GLAPI PFNGLGETINTEGERUI64I_VNVPROC glad_glGetIntegerui64i_vNV; -#define glGetIntegerui64i_vNV glad_glGetIntegerui64i_vNV -#endif -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -GLAPI int GLAD_GL_NV_vertex_program; -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC)(GLsizei n, const GLuint *programs, GLboolean *residences); -GLAPI PFNGLAREPROGRAMSRESIDENTNVPROC glad_glAreProgramsResidentNV; -#define glAreProgramsResidentNV glad_glAreProgramsResidentNV -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC)(GLenum target, GLuint id); -GLAPI PFNGLBINDPROGRAMNVPROC glad_glBindProgramNV; -#define glBindProgramNV glad_glBindProgramNV -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC)(GLsizei n, const GLuint *programs); -GLAPI PFNGLDELETEPROGRAMSNVPROC glad_glDeleteProgramsNV; -#define glDeleteProgramsNV glad_glDeleteProgramsNV -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC)(GLenum target, GLuint id, const GLfloat *params); -GLAPI PFNGLEXECUTEPROGRAMNVPROC glad_glExecuteProgramNV; -#define glExecuteProgramNV glad_glExecuteProgramNV -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC)(GLsizei n, GLuint *programs); -GLAPI PFNGLGENPROGRAMSNVPROC glad_glGenProgramsNV; -#define glGenProgramsNV glad_glGenProgramsNV -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC)(GLenum target, GLuint index, GLenum pname, GLdouble *params); -GLAPI PFNGLGETPROGRAMPARAMETERDVNVPROC glad_glGetProgramParameterdvNV; -#define glGetProgramParameterdvNV glad_glGetProgramParameterdvNV -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI PFNGLGETPROGRAMPARAMETERFVNVPROC glad_glGetProgramParameterfvNV; -#define glGetProgramParameterfvNV glad_glGetProgramParameterfvNV -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC)(GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLGETPROGRAMIVNVPROC glad_glGetProgramivNV; -#define glGetProgramivNV glad_glGetProgramivNV -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC)(GLuint id, GLenum pname, GLubyte *program); -GLAPI PFNGLGETPROGRAMSTRINGNVPROC glad_glGetProgramStringNV; -#define glGetProgramStringNV glad_glGetProgramStringNV -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC)(GLenum target, GLuint address, GLenum pname, GLint *params); -GLAPI PFNGLGETTRACKMATRIXIVNVPROC glad_glGetTrackMatrixivNV; -#define glGetTrackMatrixivNV glad_glGetTrackMatrixivNV -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC)(GLuint index, GLenum pname, GLdouble *params); -GLAPI PFNGLGETVERTEXATTRIBDVNVPROC glad_glGetVertexAttribdvNV; -#define glGetVertexAttribdvNV glad_glGetVertexAttribdvNV -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC)(GLuint index, GLenum pname, GLfloat *params); -GLAPI PFNGLGETVERTEXATTRIBFVNVPROC glad_glGetVertexAttribfvNV; -#define glGetVertexAttribfvNV glad_glGetVertexAttribfvNV -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBIVNVPROC glad_glGetVertexAttribivNV; -#define glGetVertexAttribivNV glad_glGetVertexAttribivNV -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC)(GLuint index, GLenum pname, void **pointer); -GLAPI PFNGLGETVERTEXATTRIBPOINTERVNVPROC glad_glGetVertexAttribPointervNV; -#define glGetVertexAttribPointervNV glad_glGetVertexAttribPointervNV -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC)(GLuint id); -GLAPI PFNGLISPROGRAMNVPROC glad_glIsProgramNV; -#define glIsProgramNV glad_glIsProgramNV -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC)(GLenum target, GLuint id, GLsizei len, const GLubyte *program); -GLAPI PFNGLLOADPROGRAMNVPROC glad_glLoadProgramNV; -#define glLoadProgramNV glad_glLoadProgramNV -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLPROGRAMPARAMETER4DNVPROC glad_glProgramParameter4dNV; -#define glProgramParameter4dNV glad_glProgramParameter4dNV -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC)(GLenum target, GLuint index, const GLdouble *v); -GLAPI PFNGLPROGRAMPARAMETER4DVNVPROC glad_glProgramParameter4dvNV; -#define glProgramParameter4dvNV glad_glProgramParameter4dvNV -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLPROGRAMPARAMETER4FNVPROC glad_glProgramParameter4fNV; -#define glProgramParameter4fNV glad_glProgramParameter4fNV -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC)(GLenum target, GLuint index, const GLfloat *v); -GLAPI PFNGLPROGRAMPARAMETER4FVNVPROC glad_glProgramParameter4fvNV; -#define glProgramParameter4fvNV glad_glProgramParameter4fvNV -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLdouble *v); -GLAPI PFNGLPROGRAMPARAMETERS4DVNVPROC glad_glProgramParameters4dvNV; -#define glProgramParameters4dvNV glad_glProgramParameters4dvNV -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat *v); -GLAPI PFNGLPROGRAMPARAMETERS4FVNVPROC glad_glProgramParameters4fvNV; -#define glProgramParameters4fvNV glad_glProgramParameters4fvNV -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC)(GLsizei n, const GLuint *programs); -GLAPI PFNGLREQUESTRESIDENTPROGRAMSNVPROC glad_glRequestResidentProgramsNV; -#define glRequestResidentProgramsNV glad_glRequestResidentProgramsNV -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC)(GLenum target, GLuint address, GLenum matrix, GLenum transform); -GLAPI PFNGLTRACKMATRIXNVPROC glad_glTrackMatrixNV; -#define glTrackMatrixNV glad_glTrackMatrixNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC)(GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBPOINTERNVPROC glad_glVertexAttribPointerNV; -#define glVertexAttribPointerNV glad_glVertexAttribPointerNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIB1DNVPROC glad_glVertexAttrib1dNV; -#define glVertexAttrib1dNV glad_glVertexAttrib1dNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB1DVNVPROC glad_glVertexAttrib1dvNV; -#define glVertexAttrib1dvNV glad_glVertexAttrib1dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC)(GLuint index, GLfloat x); -GLAPI PFNGLVERTEXATTRIB1FNVPROC glad_glVertexAttrib1fNV; -#define glVertexAttrib1fNV glad_glVertexAttrib1fNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB1FVNVPROC glad_glVertexAttrib1fvNV; -#define glVertexAttrib1fvNV glad_glVertexAttrib1fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC)(GLuint index, GLshort x); -GLAPI PFNGLVERTEXATTRIB1SNVPROC glad_glVertexAttrib1sNV; -#define glVertexAttrib1sNV glad_glVertexAttrib1sNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB1SVNVPROC glad_glVertexAttrib1svNV; -#define glVertexAttrib1svNV glad_glVertexAttrib1svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIB2DNVPROC glad_glVertexAttrib2dNV; -#define glVertexAttrib2dNV glad_glVertexAttrib2dNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB2DVNVPROC glad_glVertexAttrib2dvNV; -#define glVertexAttrib2dvNV glad_glVertexAttrib2dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC)(GLuint index, GLfloat x, GLfloat y); -GLAPI PFNGLVERTEXATTRIB2FNVPROC glad_glVertexAttrib2fNV; -#define glVertexAttrib2fNV glad_glVertexAttrib2fNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB2FVNVPROC glad_glVertexAttrib2fvNV; -#define glVertexAttrib2fvNV glad_glVertexAttrib2fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC)(GLuint index, GLshort x, GLshort y); -GLAPI PFNGLVERTEXATTRIB2SNVPROC glad_glVertexAttrib2sNV; -#define glVertexAttrib2sNV glad_glVertexAttrib2sNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB2SVNVPROC glad_glVertexAttrib2svNV; -#define glVertexAttrib2svNV glad_glVertexAttrib2svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIB3DNVPROC glad_glVertexAttrib3dNV; -#define glVertexAttrib3dNV glad_glVertexAttrib3dNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB3DVNVPROC glad_glVertexAttrib3dvNV; -#define glVertexAttrib3dvNV glad_glVertexAttrib3dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEXATTRIB3FNVPROC glad_glVertexAttrib3fNV; -#define glVertexAttrib3fNV glad_glVertexAttrib3fNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB3FVNVPROC glad_glVertexAttrib3fvNV; -#define glVertexAttrib3fvNV glad_glVertexAttrib3fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEXATTRIB3SNVPROC glad_glVertexAttrib3sNV; -#define glVertexAttrib3sNV glad_glVertexAttrib3sNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB3SVNVPROC glad_glVertexAttrib3svNV; -#define glVertexAttrib3svNV glad_glVertexAttrib3svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIB4DNVPROC glad_glVertexAttrib4dNV; -#define glVertexAttrib4dNV glad_glVertexAttrib4dNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB4DVNVPROC glad_glVertexAttrib4dvNV; -#define glVertexAttrib4dvNV glad_glVertexAttrib4dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEXATTRIB4FNVPROC glad_glVertexAttrib4fNV; -#define glVertexAttrib4fNV glad_glVertexAttrib4fNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB4FVNVPROC glad_glVertexAttrib4fvNV; -#define glVertexAttrib4fvNV glad_glVertexAttrib4fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEXATTRIB4SNVPROC glad_glVertexAttrib4sNV; -#define glVertexAttrib4sNV glad_glVertexAttrib4sNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB4SVNVPROC glad_glVertexAttrib4svNV; -#define glVertexAttrib4svNV glad_glVertexAttrib4svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI PFNGLVERTEXATTRIB4UBNVPROC glad_glVertexAttrib4ubNV; -#define glVertexAttrib4ubNV glad_glVertexAttrib4ubNV -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIB4UBVNVPROC glad_glVertexAttrib4ubvNV; -#define glVertexAttrib4ubvNV glad_glVertexAttrib4ubvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC)(GLuint index, GLsizei count, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBS1DVNVPROC glad_glVertexAttribs1dvNV; -#define glVertexAttribs1dvNV glad_glVertexAttribs1dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC)(GLuint index, GLsizei count, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIBS1FVNVPROC glad_glVertexAttribs1fvNV; -#define glVertexAttribs1fvNV glad_glVertexAttribs1fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC)(GLuint index, GLsizei count, const GLshort *v); -GLAPI PFNGLVERTEXATTRIBS1SVNVPROC glad_glVertexAttribs1svNV; -#define glVertexAttribs1svNV glad_glVertexAttribs1svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC)(GLuint index, GLsizei count, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBS2DVNVPROC glad_glVertexAttribs2dvNV; -#define glVertexAttribs2dvNV glad_glVertexAttribs2dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC)(GLuint index, GLsizei count, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIBS2FVNVPROC glad_glVertexAttribs2fvNV; -#define glVertexAttribs2fvNV glad_glVertexAttribs2fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC)(GLuint index, GLsizei count, const GLshort *v); -GLAPI PFNGLVERTEXATTRIBS2SVNVPROC glad_glVertexAttribs2svNV; -#define glVertexAttribs2svNV glad_glVertexAttribs2svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC)(GLuint index, GLsizei count, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBS3DVNVPROC glad_glVertexAttribs3dvNV; -#define glVertexAttribs3dvNV glad_glVertexAttribs3dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC)(GLuint index, GLsizei count, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIBS3FVNVPROC glad_glVertexAttribs3fvNV; -#define glVertexAttribs3fvNV glad_glVertexAttribs3fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC)(GLuint index, GLsizei count, const GLshort *v); -GLAPI PFNGLVERTEXATTRIBS3SVNVPROC glad_glVertexAttribs3svNV; -#define glVertexAttribs3svNV glad_glVertexAttribs3svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC)(GLuint index, GLsizei count, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIBS4DVNVPROC glad_glVertexAttribs4dvNV; -#define glVertexAttribs4dvNV glad_glVertexAttribs4dvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC)(GLuint index, GLsizei count, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIBS4FVNVPROC glad_glVertexAttribs4fvNV; -#define glVertexAttribs4fvNV glad_glVertexAttribs4fvNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC)(GLuint index, GLsizei count, const GLshort *v); -GLAPI PFNGLVERTEXATTRIBS4SVNVPROC glad_glVertexAttribs4svNV; -#define glVertexAttribs4svNV glad_glVertexAttribs4svNV -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC)(GLuint index, GLsizei count, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIBS4UBVNVPROC glad_glVertexAttribs4ubvNV; -#define glVertexAttribs4ubvNV glad_glVertexAttribs4ubvNV -#endif -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -GLAPI int GLAD_GL_NV_vertex_program1_1; -#endif -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -GLAPI int GLAD_GL_NV_vertex_program2; -#endif -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -GLAPI int GLAD_GL_NV_vertex_program2_option; -#endif -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -GLAPI int GLAD_GL_NV_vertex_program3; -#endif -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -GLAPI int GLAD_GL_NV_vertex_program4; -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x); -GLAPI PFNGLVERTEXATTRIBI1IEXTPROC glad_glVertexAttribI1iEXT; -#define glVertexAttribI1iEXT glad_glVertexAttribI1iEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y); -GLAPI PFNGLVERTEXATTRIBI2IEXTPROC glad_glVertexAttribI2iEXT; -#define glVertexAttribI2iEXT glad_glVertexAttribI2iEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z); -GLAPI PFNGLVERTEXATTRIBI3IEXTPROC glad_glVertexAttribI3iEXT; -#define glVertexAttribI3iEXT glad_glVertexAttribI3iEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLVERTEXATTRIBI4IEXTPROC glad_glVertexAttribI4iEXT; -#define glVertexAttribI4iEXT glad_glVertexAttribI4iEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x); -GLAPI PFNGLVERTEXATTRIBI1UIEXTPROC glad_glVertexAttribI1uiEXT; -#define glVertexAttribI1uiEXT glad_glVertexAttribI1uiEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y); -GLAPI PFNGLVERTEXATTRIBI2UIEXTPROC glad_glVertexAttribI2uiEXT; -#define glVertexAttribI2uiEXT glad_glVertexAttribI2uiEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI PFNGLVERTEXATTRIBI3UIEXTPROC glad_glVertexAttribI3uiEXT; -#define glVertexAttribI3uiEXT glad_glVertexAttribI3uiEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI PFNGLVERTEXATTRIBI4UIEXTPROC glad_glVertexAttribI4uiEXT; -#define glVertexAttribI4uiEXT glad_glVertexAttribI4uiEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI1IVEXTPROC glad_glVertexAttribI1ivEXT; -#define glVertexAttribI1ivEXT glad_glVertexAttribI1ivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI2IVEXTPROC glad_glVertexAttribI2ivEXT; -#define glVertexAttribI2ivEXT glad_glVertexAttribI2ivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI3IVEXTPROC glad_glVertexAttribI3ivEXT; -#define glVertexAttribI3ivEXT glad_glVertexAttribI3ivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI4IVEXTPROC glad_glVertexAttribI4ivEXT; -#define glVertexAttribI4ivEXT glad_glVertexAttribI4ivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI1UIVEXTPROC glad_glVertexAttribI1uivEXT; -#define glVertexAttribI1uivEXT glad_glVertexAttribI1uivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI2UIVEXTPROC glad_glVertexAttribI2uivEXT; -#define glVertexAttribI2uivEXT glad_glVertexAttribI2uivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI3UIVEXTPROC glad_glVertexAttribI3uivEXT; -#define glVertexAttribI3uivEXT glad_glVertexAttribI3uivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI4UIVEXTPROC glad_glVertexAttribI4uivEXT; -#define glVertexAttribI4uivEXT glad_glVertexAttribI4uivEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIBI4BVEXTPROC glad_glVertexAttribI4bvEXT; -#define glVertexAttribI4bvEXT glad_glVertexAttribI4bvEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIBI4SVEXTPROC glad_glVertexAttribI4svEXT; -#define glVertexAttribI4svEXT glad_glVertexAttribI4svEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIBI4UBVEXTPROC glad_glVertexAttribI4ubvEXT; -#define glVertexAttribI4ubvEXT glad_glVertexAttribI4ubvEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIBI4USVEXTPROC glad_glVertexAttribI4usvEXT; -#define glVertexAttribI4usvEXT glad_glVertexAttribI4usvEXT -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBIPOINTEREXTPROC glad_glVertexAttribIPointerEXT; -#define glVertexAttribIPointerEXT glad_glVertexAttribIPointerEXT -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBIIVEXTPROC glad_glGetVertexAttribIivEXT; -#define glGetVertexAttribIivEXT glad_glGetVertexAttribIivEXT -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint *params); -GLAPI PFNGLGETVERTEXATTRIBIUIVEXTPROC glad_glGetVertexAttribIuivEXT; -#define glGetVertexAttribIuivEXT glad_glGetVertexAttribIuivEXT -#endif -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 -GLAPI int GLAD_GL_NV_video_capture; -typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC)(GLuint video_capture_slot); -GLAPI PFNGLBEGINVIDEOCAPTURENVPROC glad_glBeginVideoCaptureNV; -#define glBeginVideoCaptureNV glad_glBeginVideoCaptureNV -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -GLAPI PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC glad_glBindVideoCaptureStreamBufferNV; -#define glBindVideoCaptureStreamBufferNV glad_glBindVideoCaptureStreamBufferNV -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -GLAPI PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC glad_glBindVideoCaptureStreamTextureNV; -#define glBindVideoCaptureStreamTextureNV glad_glBindVideoCaptureStreamTextureNV -typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC)(GLuint video_capture_slot); -GLAPI PFNGLENDVIDEOCAPTURENVPROC glad_glEndVideoCaptureNV; -#define glEndVideoCaptureNV glad_glEndVideoCaptureNV -typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC)(GLuint video_capture_slot, GLenum pname, GLint *params); -GLAPI PFNGLGETVIDEOCAPTUREIVNVPROC glad_glGetVideoCaptureivNV; -#define glGetVideoCaptureivNV glad_glGetVideoCaptureivNV -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -GLAPI PFNGLGETVIDEOCAPTURESTREAMIVNVPROC glad_glGetVideoCaptureStreamivNV; -#define glGetVideoCaptureStreamivNV glad_glGetVideoCaptureStreamivNV -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -GLAPI PFNGLGETVIDEOCAPTURESTREAMFVNVPROC glad_glGetVideoCaptureStreamfvNV; -#define glGetVideoCaptureStreamfvNV glad_glGetVideoCaptureStreamfvNV -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -GLAPI PFNGLGETVIDEOCAPTURESTREAMDVNVPROC glad_glGetVideoCaptureStreamdvNV; -#define glGetVideoCaptureStreamdvNV glad_glGetVideoCaptureStreamdvNV -typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC)(GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -GLAPI PFNGLVIDEOCAPTURENVPROC glad_glVideoCaptureNV; -#define glVideoCaptureNV glad_glVideoCaptureNV -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -GLAPI PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC glad_glVideoCaptureStreamParameterivNV; -#define glVideoCaptureStreamParameterivNV glad_glVideoCaptureStreamParameterivNV -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -GLAPI PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC glad_glVideoCaptureStreamParameterfvNV; -#define glVideoCaptureStreamParameterfvNV glad_glVideoCaptureStreamParameterfvNV -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -GLAPI PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC glad_glVideoCaptureStreamParameterdvNV; -#define glVideoCaptureStreamParameterdvNV glad_glVideoCaptureStreamParameterdvNV -#endif -#ifndef GL_NV_viewport_array2 -#define GL_NV_viewport_array2 1 -GLAPI int GLAD_GL_NV_viewport_array2; -#endif -#ifndef GL_NV_viewport_swizzle -#define GL_NV_viewport_swizzle 1 -GLAPI int GLAD_GL_NV_viewport_swizzle; -typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC)(GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); -GLAPI PFNGLVIEWPORTSWIZZLENVPROC glad_glViewportSwizzleNV; -#define glViewportSwizzleNV glad_glViewportSwizzleNV -#endif -#ifndef GL_OES_byte_coordinates -#define GL_OES_byte_coordinates 1 -GLAPI int GLAD_GL_OES_byte_coordinates; -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC)(GLenum texture, GLbyte s); -GLAPI PFNGLMULTITEXCOORD1BOESPROC glad_glMultiTexCoord1bOES; -#define glMultiTexCoord1bOES glad_glMultiTexCoord1bOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC)(GLenum texture, const GLbyte *coords); -GLAPI PFNGLMULTITEXCOORD1BVOESPROC glad_glMultiTexCoord1bvOES; -#define glMultiTexCoord1bvOES glad_glMultiTexCoord1bvOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC)(GLenum texture, GLbyte s, GLbyte t); -GLAPI PFNGLMULTITEXCOORD2BOESPROC glad_glMultiTexCoord2bOES; -#define glMultiTexCoord2bOES glad_glMultiTexCoord2bOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC)(GLenum texture, const GLbyte *coords); -GLAPI PFNGLMULTITEXCOORD2BVOESPROC glad_glMultiTexCoord2bvOES; -#define glMultiTexCoord2bvOES glad_glMultiTexCoord2bvOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r); -GLAPI PFNGLMULTITEXCOORD3BOESPROC glad_glMultiTexCoord3bOES; -#define glMultiTexCoord3bOES glad_glMultiTexCoord3bOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC)(GLenum texture, const GLbyte *coords); -GLAPI PFNGLMULTITEXCOORD3BVOESPROC glad_glMultiTexCoord3bvOES; -#define glMultiTexCoord3bvOES glad_glMultiTexCoord3bvOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI PFNGLMULTITEXCOORD4BOESPROC glad_glMultiTexCoord4bOES; -#define glMultiTexCoord4bOES glad_glMultiTexCoord4bOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC)(GLenum texture, const GLbyte *coords); -GLAPI PFNGLMULTITEXCOORD4BVOESPROC glad_glMultiTexCoord4bvOES; -#define glMultiTexCoord4bvOES glad_glMultiTexCoord4bvOES -typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC)(GLbyte s); -GLAPI PFNGLTEXCOORD1BOESPROC glad_glTexCoord1bOES; -#define glTexCoord1bOES glad_glTexCoord1bOES -typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC)(const GLbyte *coords); -GLAPI PFNGLTEXCOORD1BVOESPROC glad_glTexCoord1bvOES; -#define glTexCoord1bvOES glad_glTexCoord1bvOES -typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC)(GLbyte s, GLbyte t); -GLAPI PFNGLTEXCOORD2BOESPROC glad_glTexCoord2bOES; -#define glTexCoord2bOES glad_glTexCoord2bOES -typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC)(const GLbyte *coords); -GLAPI PFNGLTEXCOORD2BVOESPROC glad_glTexCoord2bvOES; -#define glTexCoord2bvOES glad_glTexCoord2bvOES -typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC)(GLbyte s, GLbyte t, GLbyte r); -GLAPI PFNGLTEXCOORD3BOESPROC glad_glTexCoord3bOES; -#define glTexCoord3bOES glad_glTexCoord3bOES -typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC)(const GLbyte *coords); -GLAPI PFNGLTEXCOORD3BVOESPROC glad_glTexCoord3bvOES; -#define glTexCoord3bvOES glad_glTexCoord3bvOES -typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC)(GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI PFNGLTEXCOORD4BOESPROC glad_glTexCoord4bOES; -#define glTexCoord4bOES glad_glTexCoord4bOES -typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC)(const GLbyte *coords); -GLAPI PFNGLTEXCOORD4BVOESPROC glad_glTexCoord4bvOES; -#define glTexCoord4bvOES glad_glTexCoord4bvOES -typedef void (APIENTRYP PFNGLVERTEX2BOESPROC)(GLbyte x, GLbyte y); -GLAPI PFNGLVERTEX2BOESPROC glad_glVertex2bOES; -#define glVertex2bOES glad_glVertex2bOES -typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC)(const GLbyte *coords); -GLAPI PFNGLVERTEX2BVOESPROC glad_glVertex2bvOES; -#define glVertex2bvOES glad_glVertex2bvOES -typedef void (APIENTRYP PFNGLVERTEX3BOESPROC)(GLbyte x, GLbyte y, GLbyte z); -GLAPI PFNGLVERTEX3BOESPROC glad_glVertex3bOES; -#define glVertex3bOES glad_glVertex3bOES -typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC)(const GLbyte *coords); -GLAPI PFNGLVERTEX3BVOESPROC glad_glVertex3bvOES; -#define glVertex3bvOES glad_glVertex3bvOES -typedef void (APIENTRYP PFNGLVERTEX4BOESPROC)(GLbyte x, GLbyte y, GLbyte z, GLbyte w); -GLAPI PFNGLVERTEX4BOESPROC glad_glVertex4bOES; -#define glVertex4bOES glad_glVertex4bOES -typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC)(const GLbyte *coords); -GLAPI PFNGLVERTEX4BVOESPROC glad_glVertex4bvOES; -#define glVertex4bvOES glad_glVertex4bvOES -#endif -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -GLAPI int GLAD_GL_OES_compressed_paletted_texture; -#endif -#ifndef GL_OES_fixed_point -#define GL_OES_fixed_point 1 -GLAPI int GLAD_GL_OES_fixed_point; -typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC)(GLenum func, GLfixed ref); -GLAPI PFNGLALPHAFUNCXOESPROC glad_glAlphaFuncxOES; -#define glAlphaFuncxOES glad_glAlphaFuncxOES -typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI PFNGLCLEARCOLORXOESPROC glad_glClearColorxOES; -#define glClearColorxOES glad_glClearColorxOES -typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC)(GLfixed depth); -GLAPI PFNGLCLEARDEPTHXOESPROC glad_glClearDepthxOES; -#define glClearDepthxOES glad_glClearDepthxOES -typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC)(GLenum plane, const GLfixed *equation); -GLAPI PFNGLCLIPPLANEXOESPROC glad_glClipPlanexOES; -#define glClipPlanexOES glad_glClipPlanexOES -typedef void (APIENTRYP PFNGLCOLOR4XOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI PFNGLCOLOR4XOESPROC glad_glColor4xOES; -#define glColor4xOES glad_glColor4xOES -typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC)(GLfixed n, GLfixed f); -GLAPI PFNGLDEPTHRANGEXOESPROC glad_glDepthRangexOES; -#define glDepthRangexOES glad_glDepthRangexOES -typedef void (APIENTRYP PFNGLFOGXOESPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLFOGXOESPROC glad_glFogxOES; -#define glFogxOES glad_glFogxOES -typedef void (APIENTRYP PFNGLFOGXVOESPROC)(GLenum pname, const GLfixed *param); -GLAPI PFNGLFOGXVOESPROC glad_glFogxvOES; -#define glFogxvOES glad_glFogxvOES -typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI PFNGLFRUSTUMXOESPROC glad_glFrustumxOES; -#define glFrustumxOES glad_glFrustumxOES -typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC)(GLenum plane, GLfixed *equation); -GLAPI PFNGLGETCLIPPLANEXOESPROC glad_glGetClipPlanexOES; -#define glGetClipPlanexOES glad_glGetClipPlanexOES -typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC)(GLenum pname, GLfixed *params); -GLAPI PFNGLGETFIXEDVOESPROC glad_glGetFixedvOES; -#define glGetFixedvOES glad_glGetFixedvOES -typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC)(GLenum target, GLenum pname, GLfixed *params); -GLAPI PFNGLGETTEXENVXVOESPROC glad_glGetTexEnvxvOES; -#define glGetTexEnvxvOES glad_glGetTexEnvxvOES -typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed *params); -GLAPI PFNGLGETTEXPARAMETERXVOESPROC glad_glGetTexParameterxvOES; -#define glGetTexParameterxvOES glad_glGetTexParameterxvOES -typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLLIGHTMODELXOESPROC glad_glLightModelxOES; -#define glLightModelxOES glad_glLightModelxOES -typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC)(GLenum pname, const GLfixed *param); -GLAPI PFNGLLIGHTMODELXVOESPROC glad_glLightModelxvOES; -#define glLightModelxvOES glad_glLightModelxvOES -typedef void (APIENTRYP PFNGLLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed param); -GLAPI PFNGLLIGHTXOESPROC glad_glLightxOES; -#define glLightxOES glad_glLightxOES -typedef void (APIENTRYP PFNGLLIGHTXVOESPROC)(GLenum light, GLenum pname, const GLfixed *params); -GLAPI PFNGLLIGHTXVOESPROC glad_glLightxvOES; -#define glLightxvOES glad_glLightxvOES -typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC)(GLfixed width); -GLAPI PFNGLLINEWIDTHXOESPROC glad_glLineWidthxOES; -#define glLineWidthxOES glad_glLineWidthxOES -typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC)(const GLfixed *m); -GLAPI PFNGLLOADMATRIXXOESPROC glad_glLoadMatrixxOES; -#define glLoadMatrixxOES glad_glLoadMatrixxOES -typedef void (APIENTRYP PFNGLMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); -GLAPI PFNGLMATERIALXOESPROC glad_glMaterialxOES; -#define glMaterialxOES glad_glMaterialxOES -typedef void (APIENTRYP PFNGLMATERIALXVOESPROC)(GLenum face, GLenum pname, const GLfixed *param); -GLAPI PFNGLMATERIALXVOESPROC glad_glMaterialxvOES; -#define glMaterialxvOES glad_glMaterialxvOES -typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC)(const GLfixed *m); -GLAPI PFNGLMULTMATRIXXOESPROC glad_glMultMatrixxOES; -#define glMultMatrixxOES glad_glMultMatrixxOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI PFNGLMULTITEXCOORD4XOESPROC glad_glMultiTexCoord4xOES; -#define glMultiTexCoord4xOES glad_glMultiTexCoord4xOES -typedef void (APIENTRYP PFNGLNORMAL3XOESPROC)(GLfixed nx, GLfixed ny, GLfixed nz); -GLAPI PFNGLNORMAL3XOESPROC glad_glNormal3xOES; -#define glNormal3xOES glad_glNormal3xOES -typedef void (APIENTRYP PFNGLORTHOXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI PFNGLORTHOXOESPROC glad_glOrthoxOES; -#define glOrthoxOES glad_glOrthoxOES -typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC)(GLenum pname, const GLfixed *params); -GLAPI PFNGLPOINTPARAMETERXVOESPROC glad_glPointParameterxvOES; -#define glPointParameterxvOES glad_glPointParameterxvOES -typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC)(GLfixed size); -GLAPI PFNGLPOINTSIZEXOESPROC glad_glPointSizexOES; -#define glPointSizexOES glad_glPointSizexOES -typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC)(GLfixed factor, GLfixed units); -GLAPI PFNGLPOLYGONOFFSETXOESPROC glad_glPolygonOffsetxOES; -#define glPolygonOffsetxOES glad_glPolygonOffsetxOES -typedef void (APIENTRYP PFNGLROTATEXOESPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLROTATEXOESPROC glad_glRotatexOES; -#define glRotatexOES glad_glRotatexOES -typedef void (APIENTRYP PFNGLSCALEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLSCALEXOESPROC glad_glScalexOES; -#define glScalexOES glad_glScalexOES -typedef void (APIENTRYP PFNGLTEXENVXOESPROC)(GLenum target, GLenum pname, GLfixed param); -GLAPI PFNGLTEXENVXOESPROC glad_glTexEnvxOES; -#define glTexEnvxOES glad_glTexEnvxOES -typedef void (APIENTRYP PFNGLTEXENVXVOESPROC)(GLenum target, GLenum pname, const GLfixed *params); -GLAPI PFNGLTEXENVXVOESPROC glad_glTexEnvxvOES; -#define glTexEnvxvOES glad_glTexEnvxvOES -typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); -GLAPI PFNGLTEXPARAMETERXOESPROC glad_glTexParameterxOES; -#define glTexParameterxOES glad_glTexParameterxOES -typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed *params); -GLAPI PFNGLTEXPARAMETERXVOESPROC glad_glTexParameterxvOES; -#define glTexParameterxvOES glad_glTexParameterxvOES -typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLTRANSLATEXOESPROC glad_glTranslatexOES; -#define glTranslatexOES glad_glTranslatexOES -typedef void (APIENTRYP PFNGLGETLIGHTXVOESPROC)(GLenum light, GLenum pname, GLfixed *params); -GLAPI PFNGLGETLIGHTXVOESPROC glad_glGetLightxvOES; -#define glGetLightxvOES glad_glGetLightxvOES -typedef void (APIENTRYP PFNGLGETMATERIALXVOESPROC)(GLenum face, GLenum pname, GLfixed *params); -GLAPI PFNGLGETMATERIALXVOESPROC glad_glGetMaterialxvOES; -#define glGetMaterialxvOES glad_glGetMaterialxvOES -typedef void (APIENTRYP PFNGLPOINTPARAMETERXOESPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLPOINTPARAMETERXOESPROC glad_glPointParameterxOES; -#define glPointParameterxOES glad_glPointParameterxOES -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEXOESPROC)(GLclampx value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEXOESPROC glad_glSampleCoveragexOES; -#define glSampleCoveragexOES glad_glSampleCoveragexOES -typedef void (APIENTRYP PFNGLACCUMXOESPROC)(GLenum op, GLfixed value); -GLAPI PFNGLACCUMXOESPROC glad_glAccumxOES; -#define glAccumxOES glad_glAccumxOES -typedef void (APIENTRYP PFNGLBITMAPXOESPROC)(GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); -GLAPI PFNGLBITMAPXOESPROC glad_glBitmapxOES; -#define glBitmapxOES glad_glBitmapxOES -typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI PFNGLBLENDCOLORXOESPROC glad_glBlendColorxOES; -#define glBlendColorxOES glad_glBlendColorxOES -typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI PFNGLCLEARACCUMXOESPROC glad_glClearAccumxOES; -#define glClearAccumxOES glad_glClearAccumxOES -typedef void (APIENTRYP PFNGLCOLOR3XOESPROC)(GLfixed red, GLfixed green, GLfixed blue); -GLAPI PFNGLCOLOR3XOESPROC glad_glColor3xOES; -#define glColor3xOES glad_glColor3xOES -typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC)(const GLfixed *components); -GLAPI PFNGLCOLOR3XVOESPROC glad_glColor3xvOES; -#define glColor3xvOES glad_glColor3xvOES -typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC)(const GLfixed *components); -GLAPI PFNGLCOLOR4XVOESPROC glad_glColor4xvOES; -#define glColor4xvOES glad_glColor4xvOES -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); -GLAPI PFNGLCONVOLUTIONPARAMETERXOESPROC glad_glConvolutionParameterxOES; -#define glConvolutionParameterxOES glad_glConvolutionParameterxOES -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed *params); -GLAPI PFNGLCONVOLUTIONPARAMETERXVOESPROC glad_glConvolutionParameterxvOES; -#define glConvolutionParameterxvOES glad_glConvolutionParameterxvOES -typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC)(GLfixed u); -GLAPI PFNGLEVALCOORD1XOESPROC glad_glEvalCoord1xOES; -#define glEvalCoord1xOES glad_glEvalCoord1xOES -typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLEVALCOORD1XVOESPROC glad_glEvalCoord1xvOES; -#define glEvalCoord1xvOES glad_glEvalCoord1xvOES -typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC)(GLfixed u, GLfixed v); -GLAPI PFNGLEVALCOORD2XOESPROC glad_glEvalCoord2xOES; -#define glEvalCoord2xOES glad_glEvalCoord2xOES -typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLEVALCOORD2XVOESPROC glad_glEvalCoord2xvOES; -#define glEvalCoord2xvOES glad_glEvalCoord2xvOES -typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC)(GLsizei n, GLenum type, const GLfixed *buffer); -GLAPI PFNGLFEEDBACKBUFFERXOESPROC glad_glFeedbackBufferxOES; -#define glFeedbackBufferxOES glad_glFeedbackBufferxOES -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed *params); -GLAPI PFNGLGETCONVOLUTIONPARAMETERXVOESPROC glad_glGetConvolutionParameterxvOES; -#define glGetConvolutionParameterxvOES glad_glGetConvolutionParameterxvOES -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed *params); -GLAPI PFNGLGETHISTOGRAMPARAMETERXVOESPROC glad_glGetHistogramParameterxvOES; -#define glGetHistogramParameterxvOES glad_glGetHistogramParameterxvOES -typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed *params); -GLAPI PFNGLGETLIGHTXOESPROC glad_glGetLightxOES; -#define glGetLightxOES glad_glGetLightxOES -typedef void (APIENTRYP PFNGLGETMAPXVOESPROC)(GLenum target, GLenum query, GLfixed *v); -GLAPI PFNGLGETMAPXVOESPROC glad_glGetMapxvOES; -#define glGetMapxvOES glad_glGetMapxvOES -typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); -GLAPI PFNGLGETMATERIALXOESPROC glad_glGetMaterialxOES; -#define glGetMaterialxOES glad_glGetMaterialxOES -typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC)(GLenum map, GLint size, GLfixed *values); -GLAPI PFNGLGETPIXELMAPXVPROC glad_glGetPixelMapxv; -#define glGetPixelMapxv glad_glGetPixelMapxv -typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC)(GLenum coord, GLenum pname, GLfixed *params); -GLAPI PFNGLGETTEXGENXVOESPROC glad_glGetTexGenxvOES; -#define glGetTexGenxvOES glad_glGetTexGenxvOES -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC)(GLenum target, GLint level, GLenum pname, GLfixed *params); -GLAPI PFNGLGETTEXLEVELPARAMETERXVOESPROC glad_glGetTexLevelParameterxvOES; -#define glGetTexLevelParameterxvOES glad_glGetTexLevelParameterxvOES -typedef void (APIENTRYP PFNGLINDEXXOESPROC)(GLfixed component); -GLAPI PFNGLINDEXXOESPROC glad_glIndexxOES; -#define glIndexxOES glad_glIndexxOES -typedef void (APIENTRYP PFNGLINDEXXVOESPROC)(const GLfixed *component); -GLAPI PFNGLINDEXXVOESPROC glad_glIndexxvOES; -#define glIndexxvOES glad_glIndexxvOES -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC)(const GLfixed *m); -GLAPI PFNGLLOADTRANSPOSEMATRIXXOESPROC glad_glLoadTransposeMatrixxOES; -#define glLoadTransposeMatrixxOES glad_glLoadTransposeMatrixxOES -typedef void (APIENTRYP PFNGLMAP1XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); -GLAPI PFNGLMAP1XOESPROC glad_glMap1xOES; -#define glMap1xOES glad_glMap1xOES -typedef void (APIENTRYP PFNGLMAP2XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); -GLAPI PFNGLMAP2XOESPROC glad_glMap2xOES; -#define glMap2xOES glad_glMap2xOES -typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC)(GLint n, GLfixed u1, GLfixed u2); -GLAPI PFNGLMAPGRID1XOESPROC glad_glMapGrid1xOES; -#define glMapGrid1xOES glad_glMapGrid1xOES -typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC)(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); -GLAPI PFNGLMAPGRID2XOESPROC glad_glMapGrid2xOES; -#define glMapGrid2xOES glad_glMapGrid2xOES -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC)(const GLfixed *m); -GLAPI PFNGLMULTTRANSPOSEMATRIXXOESPROC glad_glMultTransposeMatrixxOES; -#define glMultTransposeMatrixxOES glad_glMultTransposeMatrixxOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC)(GLenum texture, GLfixed s); -GLAPI PFNGLMULTITEXCOORD1XOESPROC glad_glMultiTexCoord1xOES; -#define glMultiTexCoord1xOES glad_glMultiTexCoord1xOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC)(GLenum texture, const GLfixed *coords); -GLAPI PFNGLMULTITEXCOORD1XVOESPROC glad_glMultiTexCoord1xvOES; -#define glMultiTexCoord1xvOES glad_glMultiTexCoord1xvOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC)(GLenum texture, GLfixed s, GLfixed t); -GLAPI PFNGLMULTITEXCOORD2XOESPROC glad_glMultiTexCoord2xOES; -#define glMultiTexCoord2xOES glad_glMultiTexCoord2xOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC)(GLenum texture, const GLfixed *coords); -GLAPI PFNGLMULTITEXCOORD2XVOESPROC glad_glMultiTexCoord2xvOES; -#define glMultiTexCoord2xvOES glad_glMultiTexCoord2xvOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r); -GLAPI PFNGLMULTITEXCOORD3XOESPROC glad_glMultiTexCoord3xOES; -#define glMultiTexCoord3xOES glad_glMultiTexCoord3xOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC)(GLenum texture, const GLfixed *coords); -GLAPI PFNGLMULTITEXCOORD3XVOESPROC glad_glMultiTexCoord3xvOES; -#define glMultiTexCoord3xvOES glad_glMultiTexCoord3xvOES -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC)(GLenum texture, const GLfixed *coords); -GLAPI PFNGLMULTITEXCOORD4XVOESPROC glad_glMultiTexCoord4xvOES; -#define glMultiTexCoord4xvOES glad_glMultiTexCoord4xvOES -typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLNORMAL3XVOESPROC glad_glNormal3xvOES; -#define glNormal3xvOES glad_glNormal3xvOES -typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC)(GLfixed token); -GLAPI PFNGLPASSTHROUGHXOESPROC glad_glPassThroughxOES; -#define glPassThroughxOES glad_glPassThroughxOES -typedef void (APIENTRYP PFNGLPIXELMAPXPROC)(GLenum map, GLint size, const GLfixed *values); -GLAPI PFNGLPIXELMAPXPROC glad_glPixelMapx; -#define glPixelMapx glad_glPixelMapx -typedef void (APIENTRYP PFNGLPIXELSTOREXPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLPIXELSTOREXPROC glad_glPixelStorex; -#define glPixelStorex glad_glPixelStorex -typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLPIXELTRANSFERXOESPROC glad_glPixelTransferxOES; -#define glPixelTransferxOES glad_glPixelTransferxOES -typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC)(GLfixed xfactor, GLfixed yfactor); -GLAPI PFNGLPIXELZOOMXOESPROC glad_glPixelZoomxOES; -#define glPixelZoomxOES glad_glPixelZoomxOES -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC)(GLsizei n, const GLuint *textures, const GLfixed *priorities); -GLAPI PFNGLPRIORITIZETEXTURESXOESPROC glad_glPrioritizeTexturesxOES; -#define glPrioritizeTexturesxOES glad_glPrioritizeTexturesxOES -typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC)(GLfixed x, GLfixed y); -GLAPI PFNGLRASTERPOS2XOESPROC glad_glRasterPos2xOES; -#define glRasterPos2xOES glad_glRasterPos2xOES -typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLRASTERPOS2XVOESPROC glad_glRasterPos2xvOES; -#define glRasterPos2xvOES glad_glRasterPos2xvOES -typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC)(GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLRASTERPOS3XOESPROC glad_glRasterPos3xOES; -#define glRasterPos3xOES glad_glRasterPos3xOES -typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLRASTERPOS3XVOESPROC glad_glRasterPos3xvOES; -#define glRasterPos3xvOES glad_glRasterPos3xvOES -typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC)(GLfixed x, GLfixed y, GLfixed z, GLfixed w); -GLAPI PFNGLRASTERPOS4XOESPROC glad_glRasterPos4xOES; -#define glRasterPos4xOES glad_glRasterPos4xOES -typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLRASTERPOS4XVOESPROC glad_glRasterPos4xvOES; -#define glRasterPos4xvOES glad_glRasterPos4xvOES -typedef void (APIENTRYP PFNGLRECTXOESPROC)(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); -GLAPI PFNGLRECTXOESPROC glad_glRectxOES; -#define glRectxOES glad_glRectxOES -typedef void (APIENTRYP PFNGLRECTXVOESPROC)(const GLfixed *v1, const GLfixed *v2); -GLAPI PFNGLRECTXVOESPROC glad_glRectxvOES; -#define glRectxvOES glad_glRectxvOES -typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC)(GLfixed s); -GLAPI PFNGLTEXCOORD1XOESPROC glad_glTexCoord1xOES; -#define glTexCoord1xOES glad_glTexCoord1xOES -typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLTEXCOORD1XVOESPROC glad_glTexCoord1xvOES; -#define glTexCoord1xvOES glad_glTexCoord1xvOES -typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC)(GLfixed s, GLfixed t); -GLAPI PFNGLTEXCOORD2XOESPROC glad_glTexCoord2xOES; -#define glTexCoord2xOES glad_glTexCoord2xOES -typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLTEXCOORD2XVOESPROC glad_glTexCoord2xvOES; -#define glTexCoord2xvOES glad_glTexCoord2xvOES -typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC)(GLfixed s, GLfixed t, GLfixed r); -GLAPI PFNGLTEXCOORD3XOESPROC glad_glTexCoord3xOES; -#define glTexCoord3xOES glad_glTexCoord3xOES -typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLTEXCOORD3XVOESPROC glad_glTexCoord3xvOES; -#define glTexCoord3xvOES glad_glTexCoord3xvOES -typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC)(GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI PFNGLTEXCOORD4XOESPROC glad_glTexCoord4xOES; -#define glTexCoord4xOES glad_glTexCoord4xOES -typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLTEXCOORD4XVOESPROC glad_glTexCoord4xvOES; -#define glTexCoord4xvOES glad_glTexCoord4xvOES -typedef void (APIENTRYP PFNGLTEXGENXOESPROC)(GLenum coord, GLenum pname, GLfixed param); -GLAPI PFNGLTEXGENXOESPROC glad_glTexGenxOES; -#define glTexGenxOES glad_glTexGenxOES -typedef void (APIENTRYP PFNGLTEXGENXVOESPROC)(GLenum coord, GLenum pname, const GLfixed *params); -GLAPI PFNGLTEXGENXVOESPROC glad_glTexGenxvOES; -#define glTexGenxvOES glad_glTexGenxvOES -typedef void (APIENTRYP PFNGLVERTEX2XOESPROC)(GLfixed x); -GLAPI PFNGLVERTEX2XOESPROC glad_glVertex2xOES; -#define glVertex2xOES glad_glVertex2xOES -typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLVERTEX2XVOESPROC glad_glVertex2xvOES; -#define glVertex2xvOES glad_glVertex2xvOES -typedef void (APIENTRYP PFNGLVERTEX3XOESPROC)(GLfixed x, GLfixed y); -GLAPI PFNGLVERTEX3XOESPROC glad_glVertex3xOES; -#define glVertex3xOES glad_glVertex3xOES -typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLVERTEX3XVOESPROC glad_glVertex3xvOES; -#define glVertex3xvOES glad_glVertex3xvOES -typedef void (APIENTRYP PFNGLVERTEX4XOESPROC)(GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLVERTEX4XOESPROC glad_glVertex4xOES; -#define glVertex4xOES glad_glVertex4xOES -typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC)(const GLfixed *coords); -GLAPI PFNGLVERTEX4XVOESPROC glad_glVertex4xvOES; -#define glVertex4xvOES glad_glVertex4xvOES -#endif -#ifndef GL_OES_query_matrix -#define GL_OES_query_matrix 1 -GLAPI int GLAD_GL_OES_query_matrix; -typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC)(GLfixed *mantissa, GLint *exponent); -GLAPI PFNGLQUERYMATRIXXOESPROC glad_glQueryMatrixxOES; -#define glQueryMatrixxOES glad_glQueryMatrixxOES -#endif -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -GLAPI int GLAD_GL_OES_read_format; -#endif -#ifndef GL_OES_single_precision -#define GL_OES_single_precision 1 -GLAPI int GLAD_GL_OES_single_precision; -typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC)(GLclampf depth); -GLAPI PFNGLCLEARDEPTHFOESPROC glad_glClearDepthfOES; -#define glClearDepthfOES glad_glClearDepthfOES -typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC)(GLenum plane, const GLfloat *equation); -GLAPI PFNGLCLIPPLANEFOESPROC glad_glClipPlanefOES; -#define glClipPlanefOES glad_glClipPlanefOES -typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC)(GLclampf n, GLclampf f); -GLAPI PFNGLDEPTHRANGEFOESPROC glad_glDepthRangefOES; -#define glDepthRangefOES glad_glDepthRangefOES -typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -GLAPI PFNGLFRUSTUMFOESPROC glad_glFrustumfOES; -#define glFrustumfOES glad_glFrustumfOES -typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC)(GLenum plane, GLfloat *equation); -GLAPI PFNGLGETCLIPPLANEFOESPROC glad_glGetClipPlanefOES; -#define glGetClipPlanefOES glad_glGetClipPlanefOES -typedef void (APIENTRYP PFNGLORTHOFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -GLAPI PFNGLORTHOFOESPROC glad_glOrthofOES; -#define glOrthofOES glad_glOrthofOES -#endif -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -GLAPI int GLAD_GL_OML_interlace; -#endif -#ifndef GL_OML_resample -#define GL_OML_resample 1 -GLAPI int GLAD_GL_OML_resample; -#endif -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -GLAPI int GLAD_GL_OML_subsample; -#endif -#ifndef GL_OVR_multiview -#define GL_OVR_multiview 1 -GLAPI int GLAD_GL_OVR_multiview; -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); -GLAPI PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glad_glFramebufferTextureMultiviewOVR; -#define glFramebufferTextureMultiviewOVR glad_glFramebufferTextureMultiviewOVR -#endif -#ifndef GL_OVR_multiview2 -#define GL_OVR_multiview2 1 -GLAPI int GLAD_GL_OVR_multiview2; -#endif -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -GLAPI int GLAD_GL_PGI_misc_hints; -typedef void (APIENTRYP PFNGLHINTPGIPROC)(GLenum target, GLint mode); -GLAPI PFNGLHINTPGIPROC glad_glHintPGI; -#define glHintPGI glad_glHintPGI -#endif -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -GLAPI int GLAD_GL_PGI_vertex_hints; -#endif -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -GLAPI int GLAD_GL_REND_screen_coordinates; -#endif -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -GLAPI int GLAD_GL_S3_s3tc; -#endif -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -GLAPI int GLAD_GL_SGIS_detail_texture; -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat *points); -GLAPI PFNGLDETAILTEXFUNCSGISPROC glad_glDetailTexFuncSGIS; -#define glDetailTexFuncSGIS glad_glDetailTexFuncSGIS -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC)(GLenum target, GLfloat *points); -GLAPI PFNGLGETDETAILTEXFUNCSGISPROC glad_glGetDetailTexFuncSGIS; -#define glGetDetailTexFuncSGIS glad_glGetDetailTexFuncSGIS -#endif -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -GLAPI int GLAD_GL_SGIS_fog_function; -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC)(GLsizei n, const GLfloat *points); -GLAPI PFNGLFOGFUNCSGISPROC glad_glFogFuncSGIS; -#define glFogFuncSGIS glad_glFogFuncSGIS -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC)(GLfloat *points); -GLAPI PFNGLGETFOGFUNCSGISPROC glad_glGetFogFuncSGIS; -#define glGetFogFuncSGIS glad_glGetFogFuncSGIS -#endif -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -GLAPI int GLAD_GL_SGIS_generate_mipmap; -#endif -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -GLAPI int GLAD_GL_SGIS_multisample; -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC)(GLclampf value, GLboolean invert); -GLAPI PFNGLSAMPLEMASKSGISPROC glad_glSampleMaskSGIS; -#define glSampleMaskSGIS glad_glSampleMaskSGIS -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC)(GLenum pattern); -GLAPI PFNGLSAMPLEPATTERNSGISPROC glad_glSamplePatternSGIS; -#define glSamplePatternSGIS glad_glSamplePatternSGIS -#endif -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -GLAPI int GLAD_GL_SGIS_pixel_texture; -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC)(GLenum pname, GLint param); -GLAPI PFNGLPIXELTEXGENPARAMETERISGISPROC glad_glPixelTexGenParameteriSGIS; -#define glPixelTexGenParameteriSGIS glad_glPixelTexGenParameteriSGIS -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLPIXELTEXGENPARAMETERIVSGISPROC glad_glPixelTexGenParameterivSGIS; -#define glPixelTexGenParameterivSGIS glad_glPixelTexGenParameterivSGIS -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPIXELTEXGENPARAMETERFSGISPROC glad_glPixelTexGenParameterfSGIS; -#define glPixelTexGenParameterfSGIS glad_glPixelTexGenParameterfSGIS -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLPIXELTEXGENPARAMETERFVSGISPROC glad_glPixelTexGenParameterfvSGIS; -#define glPixelTexGenParameterfvSGIS glad_glPixelTexGenParameterfvSGIS -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, GLint *params); -GLAPI PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC glad_glGetPixelTexGenParameterivSGIS; -#define glGetPixelTexGenParameterivSGIS glad_glGetPixelTexGenParameterivSGIS -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, GLfloat *params); -GLAPI PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC glad_glGetPixelTexGenParameterfvSGIS; -#define glGetPixelTexGenParameterfvSGIS glad_glGetPixelTexGenParameterfvSGIS -#endif -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -GLAPI int GLAD_GL_SGIS_point_line_texgen; -#endif -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -GLAPI int GLAD_GL_SGIS_point_parameters; -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPOINTPARAMETERFSGISPROC glad_glPointParameterfSGIS; -#define glPointParameterfSGIS glad_glPointParameterfSGIS -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLPOINTPARAMETERFVSGISPROC glad_glPointParameterfvSGIS; -#define glPointParameterfvSGIS glad_glPointParameterfvSGIS -#endif -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -GLAPI int GLAD_GL_SGIS_sharpen_texture; -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat *points); -GLAPI PFNGLSHARPENTEXFUNCSGISPROC glad_glSharpenTexFuncSGIS; -#define glSharpenTexFuncSGIS glad_glSharpenTexFuncSGIS -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC)(GLenum target, GLfloat *points); -GLAPI PFNGLGETSHARPENTEXFUNCSGISPROC glad_glGetSharpenTexFuncSGIS; -#define glGetSharpenTexFuncSGIS glad_glGetSharpenTexFuncSGIS -#endif -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -GLAPI int GLAD_GL_SGIS_texture4D; -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE4DSGISPROC glad_glTexImage4DSGIS; -#define glTexImage4DSGIS glad_glTexImage4DSGIS -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE4DSGISPROC glad_glTexSubImage4DSGIS; -#define glTexSubImage4DSGIS glad_glTexSubImage4DSGIS -#endif -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -GLAPI int GLAD_GL_SGIS_texture_border_clamp; -#endif -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -GLAPI int GLAD_GL_SGIS_texture_color_mask; -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI PFNGLTEXTURECOLORMASKSGISPROC glad_glTextureColorMaskSGIS; -#define glTextureColorMaskSGIS glad_glTextureColorMaskSGIS -#endif -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -GLAPI int GLAD_GL_SGIS_texture_edge_clamp; -#endif -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -GLAPI int GLAD_GL_SGIS_texture_filter4; -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLfloat *weights); -GLAPI PFNGLGETTEXFILTERFUNCSGISPROC glad_glGetTexFilterFuncSGIS; -#define glGetTexFilterFuncSGIS glad_glGetTexFilterFuncSGIS -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -GLAPI PFNGLTEXFILTERFUNCSGISPROC glad_glTexFilterFuncSGIS; -#define glTexFilterFuncSGIS glad_glTexFilterFuncSGIS -#endif -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -GLAPI int GLAD_GL_SGIS_texture_lod; -#endif -#ifndef GL_SGIS_texture_select -#define GL_SGIS_texture_select 1 -GLAPI int GLAD_GL_SGIS_texture_select; -#endif -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -GLAPI int GLAD_GL_SGIX_async; -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC)(GLuint marker); -GLAPI PFNGLASYNCMARKERSGIXPROC glad_glAsyncMarkerSGIX; -#define glAsyncMarkerSGIX glad_glAsyncMarkerSGIX -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC)(GLuint *markerp); -GLAPI PFNGLFINISHASYNCSGIXPROC glad_glFinishAsyncSGIX; -#define glFinishAsyncSGIX glad_glFinishAsyncSGIX -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC)(GLuint *markerp); -GLAPI PFNGLPOLLASYNCSGIXPROC glad_glPollAsyncSGIX; -#define glPollAsyncSGIX glad_glPollAsyncSGIX -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC)(GLsizei range); -GLAPI PFNGLGENASYNCMARKERSSGIXPROC glad_glGenAsyncMarkersSGIX; -#define glGenAsyncMarkersSGIX glad_glGenAsyncMarkersSGIX -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC)(GLuint marker, GLsizei range); -GLAPI PFNGLDELETEASYNCMARKERSSGIXPROC glad_glDeleteAsyncMarkersSGIX; -#define glDeleteAsyncMarkersSGIX glad_glDeleteAsyncMarkersSGIX -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC)(GLuint marker); -GLAPI PFNGLISASYNCMARKERSGIXPROC glad_glIsAsyncMarkerSGIX; -#define glIsAsyncMarkerSGIX glad_glIsAsyncMarkerSGIX -#endif -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -GLAPI int GLAD_GL_SGIX_async_histogram; -#endif -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -GLAPI int GLAD_GL_SGIX_async_pixel; -#endif -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -GLAPI int GLAD_GL_SGIX_blend_alpha_minmax; -#endif -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -GLAPI int GLAD_GL_SGIX_calligraphic_fragment; -#endif -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -GLAPI int GLAD_GL_SGIX_clipmap; -#endif -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -GLAPI int GLAD_GL_SGIX_convolution_accuracy; -#endif -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -GLAPI int GLAD_GL_SGIX_depth_pass_instrument; -#endif -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -GLAPI int GLAD_GL_SGIX_depth_texture; -#endif -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -GLAPI int GLAD_GL_SGIX_flush_raster; -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC)(void); -GLAPI PFNGLFLUSHRASTERSGIXPROC glad_glFlushRasterSGIX; -#define glFlushRasterSGIX glad_glFlushRasterSGIX -#endif -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -GLAPI int GLAD_GL_SGIX_fog_offset; -#endif -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -GLAPI int GLAD_GL_SGIX_fragment_lighting; -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC)(GLenum face, GLenum mode); -GLAPI PFNGLFRAGMENTCOLORMATERIALSGIXPROC glad_glFragmentColorMaterialSGIX; -#define glFragmentColorMaterialSGIX glad_glFragmentColorMaterialSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC)(GLenum light, GLenum pname, GLfloat param); -GLAPI PFNGLFRAGMENTLIGHTFSGIXPROC glad_glFragmentLightfSGIX; -#define glFragmentLightfSGIX glad_glFragmentLightfSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, const GLfloat *params); -GLAPI PFNGLFRAGMENTLIGHTFVSGIXPROC glad_glFragmentLightfvSGIX; -#define glFragmentLightfvSGIX glad_glFragmentLightfvSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC)(GLenum light, GLenum pname, GLint param); -GLAPI PFNGLFRAGMENTLIGHTISGIXPROC glad_glFragmentLightiSGIX; -#define glFragmentLightiSGIX glad_glFragmentLightiSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, const GLint *params); -GLAPI PFNGLFRAGMENTLIGHTIVSGIXPROC glad_glFragmentLightivSGIX; -#define glFragmentLightivSGIX glad_glFragmentLightivSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLFRAGMENTLIGHTMODELFSGIXPROC glad_glFragmentLightModelfSGIX; -#define glFragmentLightModelfSGIX glad_glFragmentLightModelfSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLFRAGMENTLIGHTMODELFVSGIXPROC glad_glFragmentLightModelfvSGIX; -#define glFragmentLightModelfvSGIX glad_glFragmentLightModelfvSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC)(GLenum pname, GLint param); -GLAPI PFNGLFRAGMENTLIGHTMODELISGIXPROC glad_glFragmentLightModeliSGIX; -#define glFragmentLightModeliSGIX glad_glFragmentLightModeliSGIX -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLFRAGMENTLIGHTMODELIVSGIXPROC glad_glFragmentLightModelivSGIX; -#define glFragmentLightModelivSGIX glad_glFragmentLightModelivSGIX -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC)(GLenum face, GLenum pname, GLfloat param); -GLAPI PFNGLFRAGMENTMATERIALFSGIXPROC glad_glFragmentMaterialfSGIX; -#define glFragmentMaterialfSGIX glad_glFragmentMaterialfSGIX -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, const GLfloat *params); -GLAPI PFNGLFRAGMENTMATERIALFVSGIXPROC glad_glFragmentMaterialfvSGIX; -#define glFragmentMaterialfvSGIX glad_glFragmentMaterialfvSGIX -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC)(GLenum face, GLenum pname, GLint param); -GLAPI PFNGLFRAGMENTMATERIALISGIXPROC glad_glFragmentMaterialiSGIX; -#define glFragmentMaterialiSGIX glad_glFragmentMaterialiSGIX -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, const GLint *params); -GLAPI PFNGLFRAGMENTMATERIALIVSGIXPROC glad_glFragmentMaterialivSGIX; -#define glFragmentMaterialivSGIX glad_glFragmentMaterialivSGIX -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, GLfloat *params); -GLAPI PFNGLGETFRAGMENTLIGHTFVSGIXPROC glad_glGetFragmentLightfvSGIX; -#define glGetFragmentLightfvSGIX glad_glGetFragmentLightfvSGIX -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAGMENTLIGHTIVSGIXPROC glad_glGetFragmentLightivSGIX; -#define glGetFragmentLightivSGIX glad_glGetFragmentLightivSGIX -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, GLfloat *params); -GLAPI PFNGLGETFRAGMENTMATERIALFVSGIXPROC glad_glGetFragmentMaterialfvSGIX; -#define glGetFragmentMaterialfvSGIX glad_glGetFragmentMaterialfvSGIX -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAGMENTMATERIALIVSGIXPROC glad_glGetFragmentMaterialivSGIX; -#define glGetFragmentMaterialivSGIX glad_glGetFragmentMaterialivSGIX -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC)(GLenum pname, GLint param); -GLAPI PFNGLLIGHTENVISGIXPROC glad_glLightEnviSGIX; -#define glLightEnviSGIX glad_glLightEnviSGIX -#endif -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -GLAPI int GLAD_GL_SGIX_framezoom; -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC)(GLint factor); -GLAPI PFNGLFRAMEZOOMSGIXPROC glad_glFrameZoomSGIX; -#define glFrameZoomSGIX glad_glFrameZoomSGIX -#endif -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -GLAPI int GLAD_GL_SGIX_igloo_interface; -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC)(GLenum pname, const void *params); -GLAPI PFNGLIGLOOINTERFACESGIXPROC glad_glIglooInterfaceSGIX; -#define glIglooInterfaceSGIX glad_glIglooInterfaceSGIX -#endif -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -GLAPI int GLAD_GL_SGIX_instruments; -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC)(void); -GLAPI PFNGLGETINSTRUMENTSSGIXPROC glad_glGetInstrumentsSGIX; -#define glGetInstrumentsSGIX glad_glGetInstrumentsSGIX -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC)(GLsizei size, GLint *buffer); -GLAPI PFNGLINSTRUMENTSBUFFERSGIXPROC glad_glInstrumentsBufferSGIX; -#define glInstrumentsBufferSGIX glad_glInstrumentsBufferSGIX -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC)(GLint *marker_p); -GLAPI PFNGLPOLLINSTRUMENTSSGIXPROC glad_glPollInstrumentsSGIX; -#define glPollInstrumentsSGIX glad_glPollInstrumentsSGIX -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC)(GLint marker); -GLAPI PFNGLREADINSTRUMENTSSGIXPROC glad_glReadInstrumentsSGIX; -#define glReadInstrumentsSGIX glad_glReadInstrumentsSGIX -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC)(void); -GLAPI PFNGLSTARTINSTRUMENTSSGIXPROC glad_glStartInstrumentsSGIX; -#define glStartInstrumentsSGIX glad_glStartInstrumentsSGIX -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC)(GLint marker); -GLAPI PFNGLSTOPINSTRUMENTSSGIXPROC glad_glStopInstrumentsSGIX; -#define glStopInstrumentsSGIX glad_glStopInstrumentsSGIX -#endif -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -GLAPI int GLAD_GL_SGIX_interlace; -#endif -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -GLAPI int GLAD_GL_SGIX_ir_instrument1; -#endif -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -GLAPI int GLAD_GL_SGIX_list_priority; -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, GLfloat *params); -GLAPI PFNGLGETLISTPARAMETERFVSGIXPROC glad_glGetListParameterfvSGIX; -#define glGetListParameterfvSGIX glad_glGetListParameterfvSGIX -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, GLint *params); -GLAPI PFNGLGETLISTPARAMETERIVSGIXPROC glad_glGetListParameterivSGIX; -#define glGetListParameterivSGIX glad_glGetListParameterivSGIX -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC)(GLuint list, GLenum pname, GLfloat param); -GLAPI PFNGLLISTPARAMETERFSGIXPROC glad_glListParameterfSGIX; -#define glListParameterfSGIX glad_glListParameterfSGIX -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, const GLfloat *params); -GLAPI PFNGLLISTPARAMETERFVSGIXPROC glad_glListParameterfvSGIX; -#define glListParameterfvSGIX glad_glListParameterfvSGIX -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC)(GLuint list, GLenum pname, GLint param); -GLAPI PFNGLLISTPARAMETERISGIXPROC glad_glListParameteriSGIX; -#define glListParameteriSGIX glad_glListParameteriSGIX -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, const GLint *params); -GLAPI PFNGLLISTPARAMETERIVSGIXPROC glad_glListParameterivSGIX; -#define glListParameterivSGIX glad_glListParameterivSGIX -#endif -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -GLAPI int GLAD_GL_SGIX_pixel_texture; -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC)(GLenum mode); -GLAPI PFNGLPIXELTEXGENSGIXPROC glad_glPixelTexGenSGIX; -#define glPixelTexGenSGIX glad_glPixelTexGenSGIX -#endif -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -GLAPI int GLAD_GL_SGIX_pixel_tiles; -#endif -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -GLAPI int GLAD_GL_SGIX_polynomial_ffd; -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -GLAPI PFNGLDEFORMATIONMAP3DSGIXPROC glad_glDeformationMap3dSGIX; -#define glDeformationMap3dSGIX glad_glDeformationMap3dSGIX -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -GLAPI PFNGLDEFORMATIONMAP3FSGIXPROC glad_glDeformationMap3fSGIX; -#define glDeformationMap3fSGIX glad_glDeformationMap3fSGIX -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC)(GLbitfield mask); -GLAPI PFNGLDEFORMSGIXPROC glad_glDeformSGIX; -#define glDeformSGIX glad_glDeformSGIX -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC)(GLbitfield mask); -GLAPI PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC glad_glLoadIdentityDeformationMapSGIX; -#define glLoadIdentityDeformationMapSGIX glad_glLoadIdentityDeformationMapSGIX -#endif -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -GLAPI int GLAD_GL_SGIX_reference_plane; -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC)(const GLdouble *equation); -GLAPI PFNGLREFERENCEPLANESGIXPROC glad_glReferencePlaneSGIX; -#define glReferencePlaneSGIX glad_glReferencePlaneSGIX -#endif -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -GLAPI int GLAD_GL_SGIX_resample; -#endif -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -GLAPI int GLAD_GL_SGIX_scalebias_hint; -#endif -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -GLAPI int GLAD_GL_SGIX_shadow; -#endif -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -GLAPI int GLAD_GL_SGIX_shadow_ambient; -#endif -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -GLAPI int GLAD_GL_SGIX_sprite; -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLSPRITEPARAMETERFSGIXPROC glad_glSpriteParameterfSGIX; -#define glSpriteParameterfSGIX glad_glSpriteParameterfSGIX -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLSPRITEPARAMETERFVSGIXPROC glad_glSpriteParameterfvSGIX; -#define glSpriteParameterfvSGIX glad_glSpriteParameterfvSGIX -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC)(GLenum pname, GLint param); -GLAPI PFNGLSPRITEPARAMETERISGIXPROC glad_glSpriteParameteriSGIX; -#define glSpriteParameteriSGIX glad_glSpriteParameteriSGIX -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLSPRITEPARAMETERIVSGIXPROC glad_glSpriteParameterivSGIX; -#define glSpriteParameterivSGIX glad_glSpriteParameterivSGIX -#endif -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -GLAPI int GLAD_GL_SGIX_subsample; -#endif -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -GLAPI int GLAD_GL_SGIX_tag_sample_buffer; -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC)(void); -GLAPI PFNGLTAGSAMPLEBUFFERSGIXPROC glad_glTagSampleBufferSGIX; -#define glTagSampleBufferSGIX glad_glTagSampleBufferSGIX -#endif -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -GLAPI int GLAD_GL_SGIX_texture_add_env; -#endif -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -GLAPI int GLAD_GL_SGIX_texture_coordinate_clamp; -#endif -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -GLAPI int GLAD_GL_SGIX_texture_lod_bias; -#endif -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -GLAPI int GLAD_GL_SGIX_texture_multi_buffer; -#endif -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -GLAPI int GLAD_GL_SGIX_texture_scale_bias; -#endif -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -GLAPI int GLAD_GL_SGIX_vertex_preclip; -#endif -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -GLAPI int GLAD_GL_SGIX_ycrcb; -#endif -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -GLAPI int GLAD_GL_SGIX_ycrcb_subsample; -#endif -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -GLAPI int GLAD_GL_SGIX_ycrcba; -#endif -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -GLAPI int GLAD_GL_SGI_color_matrix; -#endif -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -GLAPI int GLAD_GL_SGI_color_table; -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI PFNGLCOLORTABLESGIPROC glad_glColorTableSGI; -#define glColorTableSGI glad_glColorTableSGI -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLCOLORTABLEPARAMETERFVSGIPROC glad_glColorTableParameterfvSGI; -#define glColorTableParameterfvSGI glad_glColorTableParameterfvSGI -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLCOLORTABLEPARAMETERIVSGIPROC glad_glColorTableParameterivSGI; -#define glColorTableParameterivSGI glad_glColorTableParameterivSGI -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYCOLORTABLESGIPROC glad_glCopyColorTableSGI; -#define glCopyColorTableSGI glad_glCopyColorTableSGI -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC)(GLenum target, GLenum format, GLenum type, void *table); -GLAPI PFNGLGETCOLORTABLESGIPROC glad_glGetColorTableSGI; -#define glGetColorTableSGI glad_glGetColorTableSGI -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETCOLORTABLEPARAMETERFVSGIPROC glad_glGetColorTableParameterfvSGI; -#define glGetColorTableParameterfvSGI glad_glGetColorTableParameterfvSGI -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETCOLORTABLEPARAMETERIVSGIPROC glad_glGetColorTableParameterivSGI; -#define glGetColorTableParameterivSGI glad_glGetColorTableParameterivSGI -#endif -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -GLAPI int GLAD_GL_SGI_texture_color_table; -#endif -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -GLAPI int GLAD_GL_SUNX_constant_data; -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC)(void); -GLAPI PFNGLFINISHTEXTURESUNXPROC glad_glFinishTextureSUNX; -#define glFinishTextureSUNX glad_glFinishTextureSUNX -#endif -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -GLAPI int GLAD_GL_SUN_convolution_border_modes; -#endif -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -GLAPI int GLAD_GL_SUN_global_alpha; -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC)(GLbyte factor); -GLAPI PFNGLGLOBALALPHAFACTORBSUNPROC glad_glGlobalAlphaFactorbSUN; -#define glGlobalAlphaFactorbSUN glad_glGlobalAlphaFactorbSUN -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC)(GLshort factor); -GLAPI PFNGLGLOBALALPHAFACTORSSUNPROC glad_glGlobalAlphaFactorsSUN; -#define glGlobalAlphaFactorsSUN glad_glGlobalAlphaFactorsSUN -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC)(GLint factor); -GLAPI PFNGLGLOBALALPHAFACTORISUNPROC glad_glGlobalAlphaFactoriSUN; -#define glGlobalAlphaFactoriSUN glad_glGlobalAlphaFactoriSUN -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC)(GLfloat factor); -GLAPI PFNGLGLOBALALPHAFACTORFSUNPROC glad_glGlobalAlphaFactorfSUN; -#define glGlobalAlphaFactorfSUN glad_glGlobalAlphaFactorfSUN -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC)(GLdouble factor); -GLAPI PFNGLGLOBALALPHAFACTORDSUNPROC glad_glGlobalAlphaFactordSUN; -#define glGlobalAlphaFactordSUN glad_glGlobalAlphaFactordSUN -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC)(GLubyte factor); -GLAPI PFNGLGLOBALALPHAFACTORUBSUNPROC glad_glGlobalAlphaFactorubSUN; -#define glGlobalAlphaFactorubSUN glad_glGlobalAlphaFactorubSUN -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC)(GLushort factor); -GLAPI PFNGLGLOBALALPHAFACTORUSSUNPROC glad_glGlobalAlphaFactorusSUN; -#define glGlobalAlphaFactorusSUN glad_glGlobalAlphaFactorusSUN -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC)(GLuint factor); -GLAPI PFNGLGLOBALALPHAFACTORUISUNPROC glad_glGlobalAlphaFactoruiSUN; -#define glGlobalAlphaFactoruiSUN glad_glGlobalAlphaFactoruiSUN -#endif -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -GLAPI int GLAD_GL_SUN_mesh_array; -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC)(GLenum mode, GLint first, GLsizei count, GLsizei width); -GLAPI PFNGLDRAWMESHARRAYSSUNPROC glad_glDrawMeshArraysSUN; -#define glDrawMeshArraysSUN glad_glDrawMeshArraysSUN -#endif -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -GLAPI int GLAD_GL_SUN_slice_accum; -#endif -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -GLAPI int GLAD_GL_SUN_triangle_list; -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC)(GLuint code); -GLAPI PFNGLREPLACEMENTCODEUISUNPROC glad_glReplacementCodeuiSUN; -#define glReplacementCodeuiSUN glad_glReplacementCodeuiSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC)(GLushort code); -GLAPI PFNGLREPLACEMENTCODEUSSUNPROC glad_glReplacementCodeusSUN; -#define glReplacementCodeusSUN glad_glReplacementCodeusSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC)(GLubyte code); -GLAPI PFNGLREPLACEMENTCODEUBSUNPROC glad_glReplacementCodeubSUN; -#define glReplacementCodeubSUN glad_glReplacementCodeubSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC)(const GLuint *code); -GLAPI PFNGLREPLACEMENTCODEUIVSUNPROC glad_glReplacementCodeuivSUN; -#define glReplacementCodeuivSUN glad_glReplacementCodeuivSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC)(const GLushort *code); -GLAPI PFNGLREPLACEMENTCODEUSVSUNPROC glad_glReplacementCodeusvSUN; -#define glReplacementCodeusvSUN glad_glReplacementCodeusvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC)(const GLubyte *code); -GLAPI PFNGLREPLACEMENTCODEUBVSUNPROC glad_glReplacementCodeubvSUN; -#define glReplacementCodeubvSUN glad_glReplacementCodeubvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC)(GLenum type, GLsizei stride, const void **pointer); -GLAPI PFNGLREPLACEMENTCODEPOINTERSUNPROC glad_glReplacementCodePointerSUN; -#define glReplacementCodePointerSUN glad_glReplacementCodePointerSUN -#endif -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -GLAPI int GLAD_GL_SUN_vertex; -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -GLAPI PFNGLCOLOR4UBVERTEX2FSUNPROC glad_glColor4ubVertex2fSUN; -#define glColor4ubVertex2fSUN glad_glColor4ubVertex2fSUN -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC)(const GLubyte *c, const GLfloat *v); -GLAPI PFNGLCOLOR4UBVERTEX2FVSUNPROC glad_glColor4ubVertex2fvSUN; -#define glColor4ubVertex2fvSUN glad_glColor4ubVertex2fvSUN -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLCOLOR4UBVERTEX3FSUNPROC glad_glColor4ubVertex3fSUN; -#define glColor4ubVertex3fSUN glad_glColor4ubVertex3fSUN -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC)(const GLubyte *c, const GLfloat *v); -GLAPI PFNGLCOLOR4UBVERTEX3FVSUNPROC glad_glColor4ubVertex3fvSUN; -#define glColor4ubVertex3fvSUN glad_glColor4ubVertex3fvSUN -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLCOLOR3FVERTEX3FSUNPROC glad_glColor3fVertex3fSUN; -#define glColor3fVertex3fSUN glad_glColor3fVertex3fSUN -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC)(const GLfloat *c, const GLfloat *v); -GLAPI PFNGLCOLOR3FVERTEX3FVSUNPROC glad_glColor3fVertex3fvSUN; -#define glColor3fVertex3fvSUN glad_glColor3fVertex3fvSUN -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC)(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLNORMAL3FVERTEX3FSUNPROC glad_glNormal3fVertex3fSUN; -#define glNormal3fVertex3fSUN glad_glNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *n, const GLfloat *v); -GLAPI PFNGLNORMAL3FVERTEX3FVSUNPROC glad_glNormal3fVertex3fvSUN; -#define glNormal3fVertex3fvSUN glad_glNormal3fVertex3fvSUN -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glColor4fNormal3fVertex3fSUN; -#define glColor4fNormal3fVertex3fSUN glad_glColor4fNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glColor4fNormal3fVertex3fvSUN; -#define glColor4fNormal3fVertex3fvSUN glad_glColor4fNormal3fVertex3fvSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLTEXCOORD2FVERTEX3FSUNPROC glad_glTexCoord2fVertex3fSUN; -#define glTexCoord2fVertex3fSUN glad_glTexCoord2fVertex3fSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC)(const GLfloat *tc, const GLfloat *v); -GLAPI PFNGLTEXCOORD2FVERTEX3FVSUNPROC glad_glTexCoord2fVertex3fvSUN; -#define glTexCoord2fVertex3fvSUN glad_glTexCoord2fVertex3fvSUN -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLTEXCOORD4FVERTEX4FSUNPROC glad_glTexCoord4fVertex4fSUN; -#define glTexCoord4fVertex4fSUN glad_glTexCoord4fVertex4fSUN -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC)(const GLfloat *tc, const GLfloat *v); -GLAPI PFNGLTEXCOORD4FVERTEX4FVSUNPROC glad_glTexCoord4fVertex4fvSUN; -#define glTexCoord4fVertex4fvSUN glad_glTexCoord4fVertex4fvSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC glad_glTexCoord2fColor4ubVertex3fSUN; -#define glTexCoord2fColor4ubVertex3fSUN glad_glTexCoord2fColor4ubVertex3fSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)(const GLfloat *tc, const GLubyte *c, const GLfloat *v); -GLAPI PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC glad_glTexCoord2fColor4ubVertex3fvSUN; -#define glTexCoord2fColor4ubVertex3fvSUN glad_glTexCoord2fColor4ubVertex3fvSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC glad_glTexCoord2fColor3fVertex3fSUN; -#define glTexCoord2fColor3fVertex3fSUN glad_glTexCoord2fColor3fVertex3fSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)(const GLfloat *tc, const GLfloat *c, const GLfloat *v); -GLAPI PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC glad_glTexCoord2fColor3fVertex3fvSUN; -#define glTexCoord2fColor3fVertex3fvSUN glad_glTexCoord2fColor3fVertex3fvSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fNormal3fVertex3fSUN; -#define glTexCoord2fNormal3fVertex3fSUN glad_glTexCoord2fNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fNormal3fVertex3fvSUN; -#define glTexCoord2fNormal3fVertex3fvSUN glad_glTexCoord2fNormal3fVertex3fvSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fSUN; -#define glTexCoord2fColor4fNormal3fVertex3fSUN glad_glTexCoord2fColor4fNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fvSUN; -#define glTexCoord2fColor4fNormal3fVertex3fvSUN glad_glTexCoord2fColor4fNormal3fVertex3fvSUN -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fSUN; -#define glTexCoord4fColor4fNormal3fVertex4fSUN glad_glTexCoord4fColor4fNormal3fVertex4fSUN -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)(const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fvSUN; -#define glTexCoord4fColor4fNormal3fVertex4fvSUN glad_glTexCoord4fColor4fNormal3fVertex4fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)(GLuint rc, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC glad_glReplacementCodeuiVertex3fSUN; -#define glReplacementCodeuiVertex3fSUN glad_glReplacementCodeuiVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)(const GLuint *rc, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC glad_glReplacementCodeuiVertex3fvSUN; -#define glReplacementCodeuiVertex3fvSUN glad_glReplacementCodeuiVertex3fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC glad_glReplacementCodeuiColor4ubVertex3fSUN; -#define glReplacementCodeuiColor4ubVertex3fSUN glad_glReplacementCodeuiColor4ubVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)(const GLuint *rc, const GLubyte *c, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4ubVertex3fvSUN; -#define glReplacementCodeuiColor4ubVertex3fvSUN glad_glReplacementCodeuiColor4ubVertex3fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor3fVertex3fSUN; -#define glReplacementCodeuiColor3fVertex3fSUN glad_glReplacementCodeuiColor3fVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)(const GLuint *rc, const GLfloat *c, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor3fVertex3fvSUN; -#define glReplacementCodeuiColor3fVertex3fvSUN glad_glReplacementCodeuiColor3fVertex3fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiNormal3fVertex3fSUN; -#define glReplacementCodeuiNormal3fVertex3fSUN glad_glReplacementCodeuiNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)(const GLuint *rc, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiNormal3fVertex3fvSUN; -#define glReplacementCodeuiNormal3fVertex3fvSUN glad_glReplacementCodeuiNormal3fVertex3fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN; -#define glReplacementCodeuiColor4fNormal3fVertex3fSUN glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; -#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fSUN; -#define glReplacementCodeuiTexCoord2fVertex3fSUN glad_glReplacementCodeuiTexCoord2fVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)(const GLuint *rc, const GLfloat *tc, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fvSUN; -#define glReplacementCodeuiTexCoord2fVertex3fvSUN glad_glReplacementCodeuiTexCoord2fVertex3fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN -#endif -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -GLAPI int GLAD_GL_WIN_phong_shading; -#endif -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -GLAPI int GLAD_GL_WIN_specular_fog; -#endif -#ifndef GL_AMD_compressed_3DC_texture -#define GL_AMD_compressed_3DC_texture 1 -GLAPI int GLAD_GL_AMD_compressed_3DC_texture; -#endif -#ifndef GL_AMD_compressed_ATC_texture -#define GL_AMD_compressed_ATC_texture 1 -GLAPI int GLAD_GL_AMD_compressed_ATC_texture; -#endif -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -GLAPI int GLAD_GL_AMD_performance_monitor; -#endif -#ifndef GL_AMD_program_binary_Z400 -#define GL_AMD_program_binary_Z400 1 -GLAPI int GLAD_GL_AMD_program_binary_Z400; -#endif -#ifndef GL_ANDROID_extension_pack_es31a -#define GL_ANDROID_extension_pack_es31a 1 -GLAPI int GLAD_GL_ANDROID_extension_pack_es31a; -#endif -#ifndef GL_ANGLE_depth_texture -#define GL_ANGLE_depth_texture 1 -GLAPI int GLAD_GL_ANGLE_depth_texture; -#endif -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 -GLAPI int GLAD_GL_ANGLE_framebuffer_blit; -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITFRAMEBUFFERANGLEPROC glad_glBlitFramebufferANGLE; -#define glBlitFramebufferANGLE glad_glBlitFramebufferANGLE -#endif -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 -GLAPI int GLAD_GL_ANGLE_framebuffer_multisample; -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC glad_glRenderbufferStorageMultisampleANGLE; -#define glRenderbufferStorageMultisampleANGLE glad_glRenderbufferStorageMultisampleANGLE -#endif -#ifndef GL_ANGLE_instanced_arrays -#define GL_ANGLE_instanced_arrays 1 -GLAPI int GLAD_GL_ANGLE_instanced_arrays; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI PFNGLDRAWARRAYSINSTANCEDANGLEPROC glad_glDrawArraysInstancedANGLE; -#define glDrawArraysInstancedANGLE glad_glDrawArraysInstancedANGLE -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GLAPI PFNGLDRAWELEMENTSINSTANCEDANGLEPROC glad_glDrawElementsInstancedANGLE; -#define glDrawElementsInstancedANGLE glad_glDrawElementsInstancedANGLE -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC)(GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXATTRIBDIVISORANGLEPROC glad_glVertexAttribDivisorANGLE; -#define glVertexAttribDivisorANGLE glad_glVertexAttribDivisorANGLE -#endif -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 -GLAPI int GLAD_GL_ANGLE_pack_reverse_row_order; -#endif -#ifndef GL_ANGLE_program_binary -#define GL_ANGLE_program_binary 1 -GLAPI int GLAD_GL_ANGLE_program_binary; -#endif -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 -GLAPI int GLAD_GL_ANGLE_texture_compression_dxt3; -#endif -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 -GLAPI int GLAD_GL_ANGLE_texture_compression_dxt5; -#endif -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 -GLAPI int GLAD_GL_ANGLE_texture_usage; -#endif -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 -GLAPI int GLAD_GL_ANGLE_translated_shader_source; -typedef void (APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -GLAPI PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC glad_glGetTranslatedShaderSourceANGLE; -#define glGetTranslatedShaderSourceANGLE glad_glGetTranslatedShaderSourceANGLE -#endif -#ifndef GL_APPLE_clip_distance -#define GL_APPLE_clip_distance 1 -GLAPI int GLAD_GL_APPLE_clip_distance; -#endif -#ifndef GL_APPLE_color_buffer_packed_float -#define GL_APPLE_color_buffer_packed_float 1 -GLAPI int GLAD_GL_APPLE_color_buffer_packed_float; -#endif -#ifndef GL_APPLE_copy_texture_levels -#define GL_APPLE_copy_texture_levels 1 -GLAPI int GLAD_GL_APPLE_copy_texture_levels; -typedef void (APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC)(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -GLAPI PFNGLCOPYTEXTURELEVELSAPPLEPROC glad_glCopyTextureLevelsAPPLE; -#define glCopyTextureLevelsAPPLE glad_glCopyTextureLevelsAPPLE -#endif -#ifndef GL_APPLE_framebuffer_multisample -#define GL_APPLE_framebuffer_multisample 1 -GLAPI int GLAD_GL_APPLE_framebuffer_multisample; -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC glad_glRenderbufferStorageMultisampleAPPLE; -#define glRenderbufferStorageMultisampleAPPLE glad_glRenderbufferStorageMultisampleAPPLE -typedef void (APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC)(void); -GLAPI PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC glad_glResolveMultisampleFramebufferAPPLE; -#define glResolveMultisampleFramebufferAPPLE glad_glResolveMultisampleFramebufferAPPLE -#endif -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -GLAPI int GLAD_GL_APPLE_rgb_422; -#endif -#ifndef GL_APPLE_sync -#define GL_APPLE_sync 1 -GLAPI int GLAD_GL_APPLE_sync; -typedef GLsync (APIENTRYP PFNGLFENCESYNCAPPLEPROC)(GLenum condition, GLbitfield flags); -GLAPI PFNGLFENCESYNCAPPLEPROC glad_glFenceSyncAPPLE; -#define glFenceSyncAPPLE glad_glFenceSyncAPPLE -typedef GLboolean (APIENTRYP PFNGLISSYNCAPPLEPROC)(GLsync sync); -GLAPI PFNGLISSYNCAPPLEPROC glad_glIsSyncAPPLE; -#define glIsSyncAPPLE glad_glIsSyncAPPLE -typedef void (APIENTRYP PFNGLDELETESYNCAPPLEPROC)(GLsync sync); -GLAPI PFNGLDELETESYNCAPPLEPROC glad_glDeleteSyncAPPLE; -#define glDeleteSyncAPPLE glad_glDeleteSyncAPPLE -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLCLIENTWAITSYNCAPPLEPROC glad_glClientWaitSyncAPPLE; -#define glClientWaitSyncAPPLE glad_glClientWaitSyncAPPLE -typedef void (APIENTRYP PFNGLWAITSYNCAPPLEPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLWAITSYNCAPPLEPROC glad_glWaitSyncAPPLE; -#define glWaitSyncAPPLE glad_glWaitSyncAPPLE -typedef void (APIENTRYP PFNGLGETINTEGER64VAPPLEPROC)(GLenum pname, GLint64 *params); -GLAPI PFNGLGETINTEGER64VAPPLEPROC glad_glGetInteger64vAPPLE; -#define glGetInteger64vAPPLE glad_glGetInteger64vAPPLE -typedef void (APIENTRYP PFNGLGETSYNCIVAPPLEPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI PFNGLGETSYNCIVAPPLEPROC glad_glGetSyncivAPPLE; -#define glGetSyncivAPPLE glad_glGetSyncivAPPLE -#endif -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_APPLE_texture_format_BGRA8888 1 -GLAPI int GLAD_GL_APPLE_texture_format_BGRA8888; -#endif -#ifndef GL_APPLE_texture_max_level -#define GL_APPLE_texture_max_level 1 -GLAPI int GLAD_GL_APPLE_texture_max_level; -#endif -#ifndef GL_APPLE_texture_packed_float -#define GL_APPLE_texture_packed_float 1 -GLAPI int GLAD_GL_APPLE_texture_packed_float; -#endif -#ifndef GL_ARM_mali_program_binary -#define GL_ARM_mali_program_binary 1 -GLAPI int GLAD_GL_ARM_mali_program_binary; -#endif -#ifndef GL_ARM_mali_shader_binary -#define GL_ARM_mali_shader_binary 1 -GLAPI int GLAD_GL_ARM_mali_shader_binary; -#endif -#ifndef GL_ARM_rgba8 -#define GL_ARM_rgba8 1 -GLAPI int GLAD_GL_ARM_rgba8; -#endif -#ifndef GL_ARM_shader_framebuffer_fetch -#define GL_ARM_shader_framebuffer_fetch 1 -GLAPI int GLAD_GL_ARM_shader_framebuffer_fetch; -#endif -#ifndef GL_ARM_shader_framebuffer_fetch_depth_stencil -#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 -GLAPI int GLAD_GL_ARM_shader_framebuffer_fetch_depth_stencil; -#endif -#ifndef GL_DMP_program_binary -#define GL_DMP_program_binary 1 -GLAPI int GLAD_GL_DMP_program_binary; -#endif -#ifndef GL_DMP_shader_binary -#define GL_DMP_shader_binary 1 -GLAPI int GLAD_GL_DMP_shader_binary; -#endif -#ifndef GL_EXT_EGL_image_array -#define GL_EXT_EGL_image_array 1 -GLAPI int GLAD_GL_EXT_EGL_image_array; -#endif -#ifndef GL_EXT_EGL_image_storage -#define GL_EXT_EGL_image_storage 1 -GLAPI int GLAD_GL_EXT_EGL_image_storage; -#endif -#ifndef GL_EXT_YUV_target -#define GL_EXT_YUV_target 1 -GLAPI int GLAD_GL_EXT_YUV_target; -#endif -#ifndef GL_EXT_base_instance -#define GL_EXT_base_instance 1 -GLAPI int GLAD_GL_EXT_base_instance; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -GLAPI PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC glad_glDrawArraysInstancedBaseInstanceEXT; -#define glDrawArraysInstancedBaseInstanceEXT glad_glDrawArraysInstancedBaseInstanceEXT -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC glad_glDrawElementsInstancedBaseInstanceEXT; -#define glDrawElementsInstancedBaseInstanceEXT glad_glDrawElementsInstancedBaseInstanceEXT -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC glad_glDrawElementsInstancedBaseVertexBaseInstanceEXT; -#define glDrawElementsInstancedBaseVertexBaseInstanceEXT glad_glDrawElementsInstancedBaseVertexBaseInstanceEXT -#endif -#ifndef GL_EXT_blend_func_extended -#define GL_EXT_blend_func_extended 1 -GLAPI int GLAD_GL_EXT_blend_func_extended; -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC glad_glBindFragDataLocationIndexedEXT; -#define glBindFragDataLocationIndexedEXT glad_glBindFragDataLocationIndexedEXT -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC)(GLuint program, GLenum programInterface, const GLchar *name); -GLAPI PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC glad_glGetProgramResourceLocationIndexEXT; -#define glGetProgramResourceLocationIndexEXT glad_glGetProgramResourceLocationIndexEXT -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXEXTPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETFRAGDATAINDEXEXTPROC glad_glGetFragDataIndexEXT; -#define glGetFragDataIndexEXT glad_glGetFragDataIndexEXT -#endif -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -GLAPI int GLAD_GL_EXT_blend_minmax; -#endif -#ifndef GL_EXT_buffer_storage -#define GL_EXT_buffer_storage 1 -GLAPI int GLAD_GL_EXT_buffer_storage; -typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTPROC)(GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI PFNGLBUFFERSTORAGEEXTPROC glad_glBufferStorageEXT; -#define glBufferStorageEXT glad_glBufferStorageEXT -#endif -#ifndef GL_EXT_clear_texture -#define GL_EXT_clear_texture 1 -GLAPI int GLAD_GL_EXT_clear_texture; -typedef void (APIENTRYP PFNGLCLEARTEXIMAGEEXTPROC)(GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARTEXIMAGEEXTPROC glad_glClearTexImageEXT; -#define glClearTexImageEXT glad_glClearTexImageEXT -typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEEXTPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -GLAPI PFNGLCLEARTEXSUBIMAGEEXTPROC glad_glClearTexSubImageEXT; -#define glClearTexSubImageEXT glad_glClearTexSubImageEXT -#endif -#ifndef GL_EXT_clip_control -#define GL_EXT_clip_control 1 -GLAPI int GLAD_GL_EXT_clip_control; -typedef void (APIENTRYP PFNGLCLIPCONTROLEXTPROC)(GLenum origin, GLenum depth); -GLAPI PFNGLCLIPCONTROLEXTPROC glad_glClipControlEXT; -#define glClipControlEXT glad_glClipControlEXT -#endif -#ifndef GL_EXT_clip_cull_distance -#define GL_EXT_clip_cull_distance 1 -GLAPI int GLAD_GL_EXT_clip_cull_distance; -#endif -#ifndef GL_EXT_color_buffer_float -#define GL_EXT_color_buffer_float 1 -GLAPI int GLAD_GL_EXT_color_buffer_float; -#endif -#ifndef GL_EXT_color_buffer_half_float -#define GL_EXT_color_buffer_half_float 1 -GLAPI int GLAD_GL_EXT_color_buffer_half_float; -#endif -#ifndef GL_EXT_conservative_depth -#define GL_EXT_conservative_depth 1 -GLAPI int GLAD_GL_EXT_conservative_depth; -#endif -#ifndef GL_EXT_copy_image -#define GL_EXT_copy_image 1 -GLAPI int GLAD_GL_EXT_copy_image; -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAEXTPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI PFNGLCOPYIMAGESUBDATAEXTPROC glad_glCopyImageSubDataEXT; -#define glCopyImageSubDataEXT glad_glCopyImageSubDataEXT -#endif -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -GLAPI int GLAD_GL_EXT_debug_label; -#endif -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -GLAPI int GLAD_GL_EXT_debug_marker; -#endif -#ifndef GL_EXT_discard_framebuffer -#define GL_EXT_discard_framebuffer 1 -GLAPI int GLAD_GL_EXT_discard_framebuffer; -typedef void (APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments); -GLAPI PFNGLDISCARDFRAMEBUFFEREXTPROC glad_glDiscardFramebufferEXT; -#define glDiscardFramebufferEXT glad_glDiscardFramebufferEXT -#endif -#ifndef GL_EXT_disjoint_timer_query -#define GL_EXT_disjoint_timer_query 1 -GLAPI int GLAD_GL_EXT_disjoint_timer_query; -typedef void (APIENTRYP PFNGLGENQUERIESEXTPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLGENQUERIESEXTPROC glad_glGenQueriesEXT; -#define glGenQueriesEXT glad_glGenQueriesEXT -typedef void (APIENTRYP PFNGLDELETEQUERIESEXTPROC)(GLsizei n, const GLuint *ids); -GLAPI PFNGLDELETEQUERIESEXTPROC glad_glDeleteQueriesEXT; -#define glDeleteQueriesEXT glad_glDeleteQueriesEXT -typedef GLboolean (APIENTRYP PFNGLISQUERYEXTPROC)(GLuint id); -GLAPI PFNGLISQUERYEXTPROC glad_glIsQueryEXT; -#define glIsQueryEXT glad_glIsQueryEXT -typedef void (APIENTRYP PFNGLBEGINQUERYEXTPROC)(GLenum target, GLuint id); -GLAPI PFNGLBEGINQUERYEXTPROC glad_glBeginQueryEXT; -#define glBeginQueryEXT glad_glBeginQueryEXT -typedef void (APIENTRYP PFNGLENDQUERYEXTPROC)(GLenum target); -GLAPI PFNGLENDQUERYEXTPROC glad_glEndQueryEXT; -#define glEndQueryEXT glad_glEndQueryEXT -typedef void (APIENTRYP PFNGLQUERYCOUNTEREXTPROC)(GLuint id, GLenum target); -GLAPI PFNGLQUERYCOUNTEREXTPROC glad_glQueryCounterEXT; -#define glQueryCounterEXT glad_glQueryCounterEXT -typedef void (APIENTRYP PFNGLGETQUERYIVEXTPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYIVEXTPROC glad_glGetQueryivEXT; -#define glGetQueryivEXT glad_glGetQueryivEXT -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC)(GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYOBJECTIVEXTPROC glad_glGetQueryObjectivEXT; -#define glGetQueryObjectivEXT glad_glGetQueryObjectivEXT -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC)(GLuint id, GLenum pname, GLuint *params); -GLAPI PFNGLGETQUERYOBJECTUIVEXTPROC glad_glGetQueryObjectuivEXT; -#define glGetQueryObjectuivEXT glad_glGetQueryObjectuivEXT -#endif -#ifndef GL_EXT_draw_buffers -#define GL_EXT_draw_buffers 1 -GLAPI int GLAD_GL_EXT_draw_buffers; -typedef void (APIENTRYP PFNGLDRAWBUFFERSEXTPROC)(GLsizei n, const GLenum *bufs); -GLAPI PFNGLDRAWBUFFERSEXTPROC glad_glDrawBuffersEXT; -#define glDrawBuffersEXT glad_glDrawBuffersEXT -#endif -#ifndef GL_EXT_draw_buffers_indexed -#define GL_EXT_draw_buffers_indexed 1 -GLAPI int GLAD_GL_EXT_draw_buffers_indexed; -typedef void (APIENTRYP PFNGLENABLEIEXTPROC)(GLenum target, GLuint index); -GLAPI PFNGLENABLEIEXTPROC glad_glEnableiEXT; -#define glEnableiEXT glad_glEnableiEXT -typedef void (APIENTRYP PFNGLDISABLEIEXTPROC)(GLenum target, GLuint index); -GLAPI PFNGLDISABLEIEXTPROC glad_glDisableiEXT; -#define glDisableiEXT glad_glDisableiEXT -typedef void (APIENTRYP PFNGLBLENDEQUATIONIEXTPROC)(GLuint buf, GLenum mode); -GLAPI PFNGLBLENDEQUATIONIEXTPROC glad_glBlendEquationiEXT; -#define glBlendEquationiEXT glad_glBlendEquationiEXT -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIEXTPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEIEXTPROC glad_glBlendEquationSeparateiEXT; -#define glBlendEquationSeparateiEXT glad_glBlendEquationSeparateiEXT -typedef void (APIENTRYP PFNGLBLENDFUNCIEXTPROC)(GLuint buf, GLenum src, GLenum dst); -GLAPI PFNGLBLENDFUNCIEXTPROC glad_glBlendFunciEXT; -#define glBlendFunciEXT glad_glBlendFunciEXT -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIEXTPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEIEXTPROC glad_glBlendFuncSeparateiEXT; -#define glBlendFuncSeparateiEXT glad_glBlendFuncSeparateiEXT -typedef void (APIENTRYP PFNGLCOLORMASKIEXTPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI PFNGLCOLORMASKIEXTPROC glad_glColorMaskiEXT; -#define glColorMaskiEXT glad_glColorMaskiEXT -typedef GLboolean (APIENTRYP PFNGLISENABLEDIEXTPROC)(GLenum target, GLuint index); -GLAPI PFNGLISENABLEDIEXTPROC glad_glIsEnablediEXT; -#define glIsEnablediEXT glad_glIsEnablediEXT -#endif -#ifndef GL_EXT_draw_elements_base_vertex -#define GL_EXT_draw_elements_base_vertex 1 -GLAPI int GLAD_GL_EXT_draw_elements_base_vertex; -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSBASEVERTEXEXTPROC glad_glDrawElementsBaseVertexEXT; -#define glDrawElementsBaseVertexEXT glad_glDrawElementsBaseVertexEXT -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC glad_glDrawRangeElementsBaseVertexEXT; -#define glDrawRangeElementsBaseVertexEXT glad_glDrawRangeElementsBaseVertexEXT -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC glad_glDrawElementsInstancedBaseVertexEXT; -#define glDrawElementsInstancedBaseVertexEXT glad_glDrawElementsInstancedBaseVertexEXT -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex); -GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC glad_glMultiDrawElementsBaseVertexEXT; -#define glMultiDrawElementsBaseVertexEXT glad_glMultiDrawElementsBaseVertexEXT -#endif -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -GLAPI int GLAD_GL_EXT_draw_instanced; -#endif -#ifndef GL_EXT_draw_transform_feedback -#define GL_EXT_draw_transform_feedback 1 -GLAPI int GLAD_GL_EXT_draw_transform_feedback; -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKEXTPROC)(GLenum mode, GLuint id); -GLAPI PFNGLDRAWTRANSFORMFEEDBACKEXTPROC glad_glDrawTransformFeedbackEXT; -#define glDrawTransformFeedbackEXT glad_glDrawTransformFeedbackEXT -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC)(GLenum mode, GLuint id, GLsizei instancecount); -GLAPI PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC glad_glDrawTransformFeedbackInstancedEXT; -#define glDrawTransformFeedbackInstancedEXT glad_glDrawTransformFeedbackInstancedEXT -#endif -#ifndef GL_EXT_external_buffer -#define GL_EXT_external_buffer 1 -GLAPI int GLAD_GL_EXT_external_buffer; -#endif -#ifndef GL_EXT_float_blend -#define GL_EXT_float_blend 1 -GLAPI int GLAD_GL_EXT_float_blend; -#endif -#ifndef GL_EXT_geometry_point_size -#define GL_EXT_geometry_point_size 1 -GLAPI int GLAD_GL_EXT_geometry_point_size; -#endif -#ifndef GL_EXT_geometry_shader -#define GL_EXT_geometry_shader 1 -GLAPI int GLAD_GL_EXT_geometry_shader; -#endif -#ifndef GL_EXT_gpu_shader5 -#define GL_EXT_gpu_shader5 1 -GLAPI int GLAD_GL_EXT_gpu_shader5; -#endif -#ifndef GL_EXT_instanced_arrays -#define GL_EXT_instanced_arrays 1 -GLAPI int GLAD_GL_EXT_instanced_arrays; -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC)(GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXATTRIBDIVISOREXTPROC glad_glVertexAttribDivisorEXT; -#define glVertexAttribDivisorEXT glad_glVertexAttribDivisorEXT -#endif -#ifndef GL_EXT_map_buffer_range -#define GL_EXT_map_buffer_range 1 -GLAPI int GLAD_GL_EXT_map_buffer_range; -typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI PFNGLMAPBUFFERRANGEEXTPROC glad_glMapBufferRangeEXT; -#define glMapBufferRangeEXT glad_glMapBufferRangeEXT -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr length); -GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC glad_glFlushMappedBufferRangeEXT; -#define glFlushMappedBufferRangeEXT glad_glFlushMappedBufferRangeEXT -#endif -#ifndef GL_EXT_memory_object -#define GL_EXT_memory_object 1 -GLAPI int GLAD_GL_EXT_memory_object; -#endif -#ifndef GL_EXT_memory_object_fd -#define GL_EXT_memory_object_fd 1 -GLAPI int GLAD_GL_EXT_memory_object_fd; -#endif -#ifndef GL_EXT_memory_object_win32 -#define GL_EXT_memory_object_win32 1 -GLAPI int GLAD_GL_EXT_memory_object_win32; -#endif -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -GLAPI int GLAD_GL_EXT_multi_draw_arrays; -#endif -#ifndef GL_EXT_multi_draw_indirect -#define GL_EXT_multi_draw_indirect 1 -GLAPI int GLAD_GL_EXT_multi_draw_indirect; -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC)(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC glad_glMultiDrawArraysIndirectEXT; -#define glMultiDrawArraysIndirectEXT glad_glMultiDrawArraysIndirectEXT -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC)(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC glad_glMultiDrawElementsIndirectEXT; -#define glMultiDrawElementsIndirectEXT glad_glMultiDrawElementsIndirectEXT -#endif -#ifndef GL_EXT_multisampled_compatibility -#define GL_EXT_multisampled_compatibility 1 -GLAPI int GLAD_GL_EXT_multisampled_compatibility; -#endif -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_EXT_multisampled_render_to_texture 1 -GLAPI int GLAD_GL_EXT_multisampled_render_to_texture; -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glad_glFramebufferTexture2DMultisampleEXT; -#define glFramebufferTexture2DMultisampleEXT glad_glFramebufferTexture2DMultisampleEXT -#endif -#ifndef GL_EXT_multiview_draw_buffers -#define GL_EXT_multiview_draw_buffers 1 -GLAPI int GLAD_GL_EXT_multiview_draw_buffers; -typedef void (APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC)(GLenum src, GLint index); -GLAPI PFNGLREADBUFFERINDEXEDEXTPROC glad_glReadBufferIndexedEXT; -#define glReadBufferIndexedEXT glad_glReadBufferIndexedEXT -typedef void (APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC)(GLint n, const GLenum *location, const GLint *indices); -GLAPI PFNGLDRAWBUFFERSINDEXEDEXTPROC glad_glDrawBuffersIndexedEXT; -#define glDrawBuffersIndexedEXT glad_glDrawBuffersIndexedEXT -typedef void (APIENTRYP PFNGLGETINTEGERI_VEXTPROC)(GLenum target, GLuint index, GLint *data); -GLAPI PFNGLGETINTEGERI_VEXTPROC glad_glGetIntegeri_vEXT; -#define glGetIntegeri_vEXT glad_glGetIntegeri_vEXT -#endif -#ifndef GL_EXT_occlusion_query_boolean -#define GL_EXT_occlusion_query_boolean 1 -GLAPI int GLAD_GL_EXT_occlusion_query_boolean; -#endif -#ifndef GL_EXT_polygon_offset_clamp -#define GL_EXT_polygon_offset_clamp 1 -GLAPI int GLAD_GL_EXT_polygon_offset_clamp; -#endif -#ifndef GL_EXT_post_depth_coverage -#define GL_EXT_post_depth_coverage 1 -GLAPI int GLAD_GL_EXT_post_depth_coverage; -#endif -#ifndef GL_EXT_primitive_bounding_box -#define GL_EXT_primitive_bounding_box 1 -GLAPI int GLAD_GL_EXT_primitive_bounding_box; -typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXEXTPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -GLAPI PFNGLPRIMITIVEBOUNDINGBOXEXTPROC glad_glPrimitiveBoundingBoxEXT; -#define glPrimitiveBoundingBoxEXT glad_glPrimitiveBoundingBoxEXT -#endif -#ifndef GL_EXT_protected_textures -#define GL_EXT_protected_textures 1 -GLAPI int GLAD_GL_EXT_protected_textures; -#endif -#ifndef GL_EXT_pvrtc_sRGB -#define GL_EXT_pvrtc_sRGB 1 -GLAPI int GLAD_GL_EXT_pvrtc_sRGB; -#endif -#ifndef GL_EXT_raster_multisample -#define GL_EXT_raster_multisample 1 -GLAPI int GLAD_GL_EXT_raster_multisample; -#endif -#ifndef GL_EXT_read_format_bgra -#define GL_EXT_read_format_bgra 1 -GLAPI int GLAD_GL_EXT_read_format_bgra; -#endif -#ifndef GL_EXT_render_snorm -#define GL_EXT_render_snorm 1 -GLAPI int GLAD_GL_EXT_render_snorm; -#endif -#ifndef GL_EXT_robustness -#define GL_EXT_robustness 1 -GLAPI int GLAD_GL_EXT_robustness; -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC)(void); -GLAPI PFNGLGETGRAPHICSRESETSTATUSEXTPROC glad_glGetGraphicsResetStatusEXT; -#define glGetGraphicsResetStatusEXT glad_glGetGraphicsResetStatusEXT -typedef void (APIENTRYP PFNGLREADNPIXELSEXTPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI PFNGLREADNPIXELSEXTPROC glad_glReadnPixelsEXT; -#define glReadnPixelsEXT glad_glReadnPixelsEXT -typedef void (APIENTRYP PFNGLGETNUNIFORMFVEXTPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI PFNGLGETNUNIFORMFVEXTPROC glad_glGetnUniformfvEXT; -#define glGetnUniformfvEXT glad_glGetnUniformfvEXT -typedef void (APIENTRYP PFNGLGETNUNIFORMIVEXTPROC)(GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI PFNGLGETNUNIFORMIVEXTPROC glad_glGetnUniformivEXT; -#define glGetnUniformivEXT glad_glGetnUniformivEXT -#endif -#ifndef GL_EXT_sRGB -#define GL_EXT_sRGB 1 -GLAPI int GLAD_GL_EXT_sRGB; -#endif -#ifndef GL_EXT_sRGB_write_control -#define GL_EXT_sRGB_write_control 1 -GLAPI int GLAD_GL_EXT_sRGB_write_control; -#endif -#ifndef GL_EXT_semaphore -#define GL_EXT_semaphore 1 -GLAPI int GLAD_GL_EXT_semaphore; -#endif -#ifndef GL_EXT_semaphore_fd -#define GL_EXT_semaphore_fd 1 -GLAPI int GLAD_GL_EXT_semaphore_fd; -#endif -#ifndef GL_EXT_semaphore_win32 -#define GL_EXT_semaphore_win32 1 -GLAPI int GLAD_GL_EXT_semaphore_win32; -#endif -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -GLAPI int GLAD_GL_EXT_separate_shader_objects; -#endif -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -GLAPI int GLAD_GL_EXT_shader_framebuffer_fetch; -#endif -#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent -#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 -GLAPI int GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent; -#endif -#ifndef GL_EXT_shader_group_vote -#define GL_EXT_shader_group_vote 1 -GLAPI int GLAD_GL_EXT_shader_group_vote; -#endif -#ifndef GL_EXT_shader_implicit_conversions -#define GL_EXT_shader_implicit_conversions 1 -GLAPI int GLAD_GL_EXT_shader_implicit_conversions; -#endif -#ifndef GL_EXT_shader_integer_mix -#define GL_EXT_shader_integer_mix 1 -GLAPI int GLAD_GL_EXT_shader_integer_mix; -#endif -#ifndef GL_EXT_shader_io_blocks -#define GL_EXT_shader_io_blocks 1 -GLAPI int GLAD_GL_EXT_shader_io_blocks; -#endif -#ifndef GL_EXT_shader_non_constant_global_initializers -#define GL_EXT_shader_non_constant_global_initializers 1 -GLAPI int GLAD_GL_EXT_shader_non_constant_global_initializers; -#endif -#ifndef GL_EXT_shader_pixel_local_storage -#define GL_EXT_shader_pixel_local_storage 1 -GLAPI int GLAD_GL_EXT_shader_pixel_local_storage; -#endif -#ifndef GL_EXT_shader_pixel_local_storage2 -#define GL_EXT_shader_pixel_local_storage2 1 -GLAPI int GLAD_GL_EXT_shader_pixel_local_storage2; -typedef void (APIENTRYP PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC)(GLuint target, GLsizei size); -GLAPI PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glFramebufferPixelLocalStorageSizeEXT; -#define glFramebufferPixelLocalStorageSizeEXT glad_glFramebufferPixelLocalStorageSizeEXT -typedef GLsizei (APIENTRYP PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC)(GLuint target); -GLAPI PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glGetFramebufferPixelLocalStorageSizeEXT; -#define glGetFramebufferPixelLocalStorageSizeEXT glad_glGetFramebufferPixelLocalStorageSizeEXT -typedef void (APIENTRYP PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC)(GLsizei offset, GLsizei n, const GLuint *values); -GLAPI PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC glad_glClearPixelLocalStorageuiEXT; -#define glClearPixelLocalStorageuiEXT glad_glClearPixelLocalStorageuiEXT -#endif -#ifndef GL_EXT_shader_texture_lod -#define GL_EXT_shader_texture_lod 1 -GLAPI int GLAD_GL_EXT_shader_texture_lod; -#endif -#ifndef GL_EXT_shadow_samplers -#define GL_EXT_shadow_samplers 1 -GLAPI int GLAD_GL_EXT_shadow_samplers; -#endif -#ifndef GL_EXT_sparse_texture -#define GL_EXT_sparse_texture 1 -GLAPI int GLAD_GL_EXT_sparse_texture; -typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -GLAPI PFNGLTEXPAGECOMMITMENTEXTPROC glad_glTexPageCommitmentEXT; -#define glTexPageCommitmentEXT glad_glTexPageCommitmentEXT -#endif -#ifndef GL_EXT_sparse_texture2 -#define GL_EXT_sparse_texture2 1 -GLAPI int GLAD_GL_EXT_sparse_texture2; -#endif -#ifndef GL_EXT_tessellation_point_size -#define GL_EXT_tessellation_point_size 1 -GLAPI int GLAD_GL_EXT_tessellation_point_size; -#endif -#ifndef GL_EXT_tessellation_shader -#define GL_EXT_tessellation_shader 1 -GLAPI int GLAD_GL_EXT_tessellation_shader; -typedef void (APIENTRYP PFNGLPATCHPARAMETERIEXTPROC)(GLenum pname, GLint value); -GLAPI PFNGLPATCHPARAMETERIEXTPROC glad_glPatchParameteriEXT; -#define glPatchParameteriEXT glad_glPatchParameteriEXT -#endif -#ifndef GL_EXT_texture_border_clamp -#define GL_EXT_texture_border_clamp 1 -GLAPI int GLAD_GL_EXT_texture_border_clamp; -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, const GLint *param); -GLAPI PFNGLSAMPLERPARAMETERIIVEXTPROC glad_glSamplerParameterIivEXT; -#define glSamplerParameterIivEXT glad_glSamplerParameterIivEXT -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, const GLuint *param); -GLAPI PFNGLSAMPLERPARAMETERIUIVEXTPROC glad_glSamplerParameterIuivEXT; -#define glSamplerParameterIuivEXT glad_glSamplerParameterIuivEXT -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, GLint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIIVEXTPROC glad_glGetSamplerParameterIivEXT; -#define glGetSamplerParameterIivEXT glad_glGetSamplerParameterIivEXT -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, GLuint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIUIVEXTPROC glad_glGetSamplerParameterIuivEXT; -#define glGetSamplerParameterIuivEXT glad_glGetSamplerParameterIuivEXT -#endif -#ifndef GL_EXT_texture_buffer -#define GL_EXT_texture_buffer 1 -GLAPI int GLAD_GL_EXT_texture_buffer; -typedef void (APIENTRYP PFNGLTEXBUFFERRANGEEXTPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLTEXBUFFERRANGEEXTPROC glad_glTexBufferRangeEXT; -#define glTexBufferRangeEXT glad_glTexBufferRangeEXT -#endif -#ifndef GL_EXT_texture_compression_astc_decode_mode -#define GL_EXT_texture_compression_astc_decode_mode 1 -GLAPI int GLAD_GL_EXT_texture_compression_astc_decode_mode; -#endif -#ifndef GL_EXT_texture_compression_bptc -#define GL_EXT_texture_compression_bptc 1 -GLAPI int GLAD_GL_EXT_texture_compression_bptc; -#endif -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 -GLAPI int GLAD_GL_EXT_texture_compression_dxt1; -#endif -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -GLAPI int GLAD_GL_EXT_texture_compression_rgtc; -#endif -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 -GLAPI int GLAD_GL_EXT_texture_compression_s3tc; -#endif -#ifndef GL_EXT_texture_compression_s3tc_srgb -#define GL_EXT_texture_compression_s3tc_srgb 1 -GLAPI int GLAD_GL_EXT_texture_compression_s3tc_srgb; -#endif -#ifndef GL_EXT_texture_cube_map_array -#define GL_EXT_texture_cube_map_array 1 -GLAPI int GLAD_GL_EXT_texture_cube_map_array; -#endif -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -GLAPI int GLAD_GL_EXT_texture_filter_anisotropic; -#endif -#ifndef GL_EXT_texture_filter_minmax -#define GL_EXT_texture_filter_minmax 1 -GLAPI int GLAD_GL_EXT_texture_filter_minmax; -#endif -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_EXT_texture_format_BGRA8888 1 -GLAPI int GLAD_GL_EXT_texture_format_BGRA8888; -#endif -#ifndef GL_EXT_texture_format_sRGB_override -#define GL_EXT_texture_format_sRGB_override 1 -GLAPI int GLAD_GL_EXT_texture_format_sRGB_override; -#endif -#ifndef GL_EXT_texture_mirror_clamp_to_edge -#define GL_EXT_texture_mirror_clamp_to_edge 1 -GLAPI int GLAD_GL_EXT_texture_mirror_clamp_to_edge; -#endif -#ifndef GL_EXT_texture_norm16 -#define GL_EXT_texture_norm16 1 -GLAPI int GLAD_GL_EXT_texture_norm16; -#endif -#ifndef GL_EXT_texture_rg -#define GL_EXT_texture_rg 1 -GLAPI int GLAD_GL_EXT_texture_rg; -#endif -#ifndef GL_EXT_texture_sRGB_R8 +GLAD_API_CALL int GLAD_GL_EXT_texture_sRGB; #define GL_EXT_texture_sRGB_R8 1 -GLAPI int GLAD_GL_EXT_texture_sRGB_R8; -#endif -#ifndef GL_EXT_texture_sRGB_RG8 +GLAD_API_CALL int GLAD_GL_EXT_texture_sRGB_R8; #define GL_EXT_texture_sRGB_RG8 1 -GLAPI int GLAD_GL_EXT_texture_sRGB_RG8; -#endif -#ifndef GL_EXT_texture_sRGB_decode +GLAD_API_CALL int GLAD_GL_EXT_texture_sRGB_RG8; #define GL_EXT_texture_sRGB_decode 1 -GLAPI int GLAD_GL_EXT_texture_sRGB_decode; -#endif -#ifndef GL_EXT_texture_storage +GLAD_API_CALL int GLAD_GL_EXT_texture_sRGB_decode; +#define GL_EXT_texture_shadow_lod 1 +GLAD_API_CALL int GLAD_GL_EXT_texture_shadow_lod; +#define GL_EXT_texture_shared_exponent 1 +GLAD_API_CALL int GLAD_GL_EXT_texture_shared_exponent; +#define GL_EXT_texture_snorm 1 +GLAD_API_CALL int GLAD_GL_EXT_texture_snorm; #define GL_EXT_texture_storage 1 -GLAPI int GLAD_GL_EXT_texture_storage; -typedef void (APIENTRYP PFNGLTEXSTORAGE1DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI PFNGLTEXSTORAGE1DEXTPROC glad_glTexStorage1DEXT; -#define glTexStorage1DEXT glad_glTexStorage1DEXT -typedef void (APIENTRYP PFNGLTEXSTORAGE2DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLTEXSTORAGE2DEXTPROC glad_glTexStorage2DEXT; -#define glTexStorage2DEXT glad_glTexStorage2DEXT -typedef void (APIENTRYP PFNGLTEXSTORAGE3DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLTEXSTORAGE3DEXTPROC glad_glTexStorage3DEXT; -#define glTexStorage3DEXT glad_glTexStorage3DEXT -#endif -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_EXT_texture_type_2_10_10_10_REV 1 -GLAPI int GLAD_GL_EXT_texture_type_2_10_10_10_REV; -#endif -#ifndef GL_EXT_texture_view -#define GL_EXT_texture_view 1 -GLAPI int GLAD_GL_EXT_texture_view; -typedef void (APIENTRYP PFNGLTEXTUREVIEWEXTPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -GLAPI PFNGLTEXTUREVIEWEXTPROC glad_glTextureViewEXT; -#define glTextureViewEXT glad_glTextureViewEXT -#endif -#ifndef GL_EXT_unpack_subimage -#define GL_EXT_unpack_subimage 1 -GLAPI int GLAD_GL_EXT_unpack_subimage; -#endif -#ifndef GL_EXT_win32_keyed_mutex +GLAD_API_CALL int GLAD_GL_EXT_texture_storage; +#define GL_EXT_texture_swizzle 1 +GLAD_API_CALL int GLAD_GL_EXT_texture_swizzle; +#define GL_EXT_timer_query 1 +GLAD_API_CALL int GLAD_GL_EXT_timer_query; +#define GL_EXT_transform_feedback 1 +GLAD_API_CALL int GLAD_GL_EXT_transform_feedback; +#define GL_EXT_vertex_array 1 +GLAD_API_CALL int GLAD_GL_EXT_vertex_array; +#define GL_EXT_vertex_array_bgra 1 +GLAD_API_CALL int GLAD_GL_EXT_vertex_array_bgra; +#define GL_EXT_vertex_attrib_64bit 1 +GLAD_API_CALL int GLAD_GL_EXT_vertex_attrib_64bit; +#define GL_EXT_vertex_shader 1 +GLAD_API_CALL int GLAD_GL_EXT_vertex_shader; +#define GL_EXT_vertex_weighting 1 +GLAD_API_CALL int GLAD_GL_EXT_vertex_weighting; #define GL_EXT_win32_keyed_mutex 1 -GLAPI int GLAD_GL_EXT_win32_keyed_mutex; -#endif -#ifndef GL_EXT_window_rectangles +GLAD_API_CALL int GLAD_GL_EXT_win32_keyed_mutex; #define GL_EXT_window_rectangles 1 -GLAPI int GLAD_GL_EXT_window_rectangles; -#endif -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_FJ_shader_binary_GCCSO 1 -GLAPI int GLAD_GL_FJ_shader_binary_GCCSO; -#endif -#ifndef GL_IMG_bindless_texture -#define GL_IMG_bindless_texture 1 -GLAPI int GLAD_GL_IMG_bindless_texture; -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEIMGPROC)(GLuint texture); -GLAPI PFNGLGETTEXTUREHANDLEIMGPROC glad_glGetTextureHandleIMG; -#define glGetTextureHandleIMG glad_glGetTextureHandleIMG -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEIMGPROC)(GLuint texture, GLuint sampler); -GLAPI PFNGLGETTEXTURESAMPLERHANDLEIMGPROC glad_glGetTextureSamplerHandleIMG; -#define glGetTextureSamplerHandleIMG glad_glGetTextureSamplerHandleIMG -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64IMGPROC)(GLint location, GLuint64 value); -GLAPI PFNGLUNIFORMHANDLEUI64IMGPROC glad_glUniformHandleui64IMG; -#define glUniformHandleui64IMG glad_glUniformHandleui64IMG -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VIMGPROC)(GLint location, GLsizei count, const GLuint64 *value); -GLAPI PFNGLUNIFORMHANDLEUI64VIMGPROC glad_glUniformHandleui64vIMG; -#define glUniformHandleui64vIMG glad_glUniformHandleui64vIMG -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC)(GLuint program, GLint location, GLuint64 value); -GLAPI PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC glad_glProgramUniformHandleui64IMG; -#define glProgramUniformHandleui64IMG glad_glProgramUniformHandleui64IMG -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC glad_glProgramUniformHandleui64vIMG; -#define glProgramUniformHandleui64vIMG glad_glProgramUniformHandleui64vIMG -#endif -#ifndef GL_IMG_framebuffer_downsample -#define GL_IMG_framebuffer_downsample 1 -GLAPI int GLAD_GL_IMG_framebuffer_downsample; -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC glad_glFramebufferTexture2DDownsampleIMG; -#define glFramebufferTexture2DDownsampleIMG glad_glFramebufferTexture2DDownsampleIMG -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale); -GLAPI PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC glad_glFramebufferTextureLayerDownsampleIMG; -#define glFramebufferTextureLayerDownsampleIMG glad_glFramebufferTextureLayerDownsampleIMG -#endif -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_IMG_multisampled_render_to_texture 1 -GLAPI int GLAD_GL_IMG_multisampled_render_to_texture; -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC glad_glRenderbufferStorageMultisampleIMG; -#define glRenderbufferStorageMultisampleIMG glad_glRenderbufferStorageMultisampleIMG -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC glad_glFramebufferTexture2DMultisampleIMG; -#define glFramebufferTexture2DMultisampleIMG glad_glFramebufferTexture2DMultisampleIMG -#endif -#ifndef GL_IMG_program_binary -#define GL_IMG_program_binary 1 -GLAPI int GLAD_GL_IMG_program_binary; -#endif -#ifndef GL_IMG_read_format -#define GL_IMG_read_format 1 -GLAPI int GLAD_GL_IMG_read_format; -#endif -#ifndef GL_IMG_shader_binary -#define GL_IMG_shader_binary 1 -GLAPI int GLAD_GL_IMG_shader_binary; -#endif -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_IMG_texture_compression_pvrtc 1 -GLAPI int GLAD_GL_IMG_texture_compression_pvrtc; -#endif -#ifndef GL_IMG_texture_compression_pvrtc2 -#define GL_IMG_texture_compression_pvrtc2 1 -GLAPI int GLAD_GL_IMG_texture_compression_pvrtc2; -#endif -#ifndef GL_IMG_texture_filter_cubic -#define GL_IMG_texture_filter_cubic 1 -GLAPI int GLAD_GL_IMG_texture_filter_cubic; -#endif -#ifndef GL_INTEL_blackhole_render +GLAD_API_CALL int GLAD_GL_EXT_window_rectangles; +#define GL_EXT_x11_sync_object 1 +GLAD_API_CALL int GLAD_GL_EXT_x11_sync_object; +#define GL_GREMEDY_frame_terminator 1 +GLAD_API_CALL int GLAD_GL_GREMEDY_frame_terminator; +#define GL_GREMEDY_string_marker 1 +GLAD_API_CALL int GLAD_GL_GREMEDY_string_marker; +#define GL_HP_convolution_border_modes 1 +GLAD_API_CALL int GLAD_GL_HP_convolution_border_modes; +#define GL_HP_image_transform 1 +GLAD_API_CALL int GLAD_GL_HP_image_transform; +#define GL_HP_occlusion_test 1 +GLAD_API_CALL int GLAD_GL_HP_occlusion_test; +#define GL_HP_texture_lighting 1 +GLAD_API_CALL int GLAD_GL_HP_texture_lighting; +#define GL_IBM_cull_vertex 1 +GLAD_API_CALL int GLAD_GL_IBM_cull_vertex; +#define GL_IBM_multimode_draw_arrays 1 +GLAD_API_CALL int GLAD_GL_IBM_multimode_draw_arrays; +#define GL_IBM_rasterpos_clip 1 +GLAD_API_CALL int GLAD_GL_IBM_rasterpos_clip; +#define GL_IBM_static_data 1 +GLAD_API_CALL int GLAD_GL_IBM_static_data; +#define GL_IBM_texture_mirrored_repeat 1 +GLAD_API_CALL int GLAD_GL_IBM_texture_mirrored_repeat; +#define GL_IBM_vertex_array_lists 1 +GLAD_API_CALL int GLAD_GL_IBM_vertex_array_lists; +#define GL_INGR_blend_func_separate 1 +GLAD_API_CALL int GLAD_GL_INGR_blend_func_separate; +#define GL_INGR_color_clamp 1 +GLAD_API_CALL int GLAD_GL_INGR_color_clamp; +#define GL_INGR_interlace_read 1 +GLAD_API_CALL int GLAD_GL_INGR_interlace_read; #define GL_INTEL_blackhole_render 1 -GLAPI int GLAD_GL_INTEL_blackhole_render; -#endif -#ifndef GL_INTEL_conservative_rasterization +GLAD_API_CALL int GLAD_GL_INTEL_blackhole_render; #define GL_INTEL_conservative_rasterization 1 -GLAPI int GLAD_GL_INTEL_conservative_rasterization; -#endif -#ifndef GL_INTEL_framebuffer_CMAA +GLAD_API_CALL int GLAD_GL_INTEL_conservative_rasterization; +#define GL_INTEL_fragment_shader_ordering 1 +GLAD_API_CALL int GLAD_GL_INTEL_fragment_shader_ordering; #define GL_INTEL_framebuffer_CMAA 1 -GLAPI int GLAD_GL_INTEL_framebuffer_CMAA; -#endif -#ifndef GL_INTEL_performance_query +GLAD_API_CALL int GLAD_GL_INTEL_framebuffer_CMAA; +#define GL_INTEL_map_texture 1 +GLAD_API_CALL int GLAD_GL_INTEL_map_texture; +#define GL_INTEL_parallel_arrays 1 +GLAD_API_CALL int GLAD_GL_INTEL_parallel_arrays; #define GL_INTEL_performance_query 1 -GLAPI int GLAD_GL_INTEL_performance_query; -#endif -#ifndef GL_KHR_blend_equation_advanced +GLAD_API_CALL int GLAD_GL_INTEL_performance_query; #define GL_KHR_blend_equation_advanced 1 -GLAPI int GLAD_GL_KHR_blend_equation_advanced; -#endif -#ifndef GL_KHR_blend_equation_advanced_coherent +GLAD_API_CALL int GLAD_GL_KHR_blend_equation_advanced; #define GL_KHR_blend_equation_advanced_coherent 1 -GLAPI int GLAD_GL_KHR_blend_equation_advanced_coherent; -#endif -#ifndef GL_KHR_context_flush_control +GLAD_API_CALL int GLAD_GL_KHR_blend_equation_advanced_coherent; #define GL_KHR_context_flush_control 1 -GLAPI int GLAD_GL_KHR_context_flush_control; -#endif -#ifndef GL_KHR_debug +GLAD_API_CALL int GLAD_GL_KHR_context_flush_control; #define GL_KHR_debug 1 -GLAPI int GLAD_GL_KHR_debug; -#endif -#ifndef GL_KHR_no_error +GLAD_API_CALL int GLAD_GL_KHR_debug; #define GL_KHR_no_error 1 -GLAPI int GLAD_GL_KHR_no_error; -#endif -#ifndef GL_KHR_parallel_shader_compile +GLAD_API_CALL int GLAD_GL_KHR_no_error; #define GL_KHR_parallel_shader_compile 1 -GLAPI int GLAD_GL_KHR_parallel_shader_compile; -#endif -#ifndef GL_KHR_robust_buffer_access_behavior +GLAD_API_CALL int GLAD_GL_KHR_parallel_shader_compile; #define GL_KHR_robust_buffer_access_behavior 1 -GLAPI int GLAD_GL_KHR_robust_buffer_access_behavior; -#endif -#ifndef GL_KHR_robustness +GLAD_API_CALL int GLAD_GL_KHR_robust_buffer_access_behavior; #define GL_KHR_robustness 1 -GLAPI int GLAD_GL_KHR_robustness; -#endif -#ifndef GL_KHR_texture_compression_astc_hdr +GLAD_API_CALL int GLAD_GL_KHR_robustness; +#define GL_KHR_shader_subgroup 1 +GLAD_API_CALL int GLAD_GL_KHR_shader_subgroup; #define GL_KHR_texture_compression_astc_hdr 1 -GLAPI int GLAD_GL_KHR_texture_compression_astc_hdr; -#endif -#ifndef GL_KHR_texture_compression_astc_ldr +GLAD_API_CALL int GLAD_GL_KHR_texture_compression_astc_hdr; #define GL_KHR_texture_compression_astc_ldr 1 -GLAPI int GLAD_GL_KHR_texture_compression_astc_ldr; -#endif -#ifndef GL_KHR_texture_compression_astc_sliced_3d +GLAD_API_CALL int GLAD_GL_KHR_texture_compression_astc_ldr; #define GL_KHR_texture_compression_astc_sliced_3d 1 -GLAPI int GLAD_GL_KHR_texture_compression_astc_sliced_3d; -#endif -#ifndef GL_MESA_program_binary_formats +GLAD_API_CALL int GLAD_GL_KHR_texture_compression_astc_sliced_3d; +#define GL_MESAX_texture_stack 1 +GLAD_API_CALL int GLAD_GL_MESAX_texture_stack; +#define GL_MESA_framebuffer_flip_x 1 +GLAD_API_CALL int GLAD_GL_MESA_framebuffer_flip_x; +#define GL_MESA_framebuffer_flip_y 1 +GLAD_API_CALL int GLAD_GL_MESA_framebuffer_flip_y; +#define GL_MESA_framebuffer_swap_xy 1 +GLAD_API_CALL int GLAD_GL_MESA_framebuffer_swap_xy; +#define GL_MESA_pack_invert 1 +GLAD_API_CALL int GLAD_GL_MESA_pack_invert; #define GL_MESA_program_binary_formats 1 -GLAPI int GLAD_GL_MESA_program_binary_formats; -#endif -#ifndef GL_MESA_shader_integer_functions +GLAD_API_CALL int GLAD_GL_MESA_program_binary_formats; +#define GL_MESA_resize_buffers 1 +GLAD_API_CALL int GLAD_GL_MESA_resize_buffers; #define GL_MESA_shader_integer_functions 1 -GLAPI int GLAD_GL_MESA_shader_integer_functions; -#endif -#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers +GLAD_API_CALL int GLAD_GL_MESA_shader_integer_functions; +#define GL_MESA_tile_raster_order 1 +GLAD_API_CALL int GLAD_GL_MESA_tile_raster_order; +#define GL_MESA_window_pos 1 +GLAD_API_CALL int GLAD_GL_MESA_window_pos; +#define GL_MESA_ycbcr_texture 1 +GLAD_API_CALL int GLAD_GL_MESA_ycbcr_texture; #define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 -GLAPI int GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers; -#endif -#ifndef GL_NV_bindless_texture +GLAD_API_CALL int GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers; +#define GL_NVX_conditional_render 1 +GLAD_API_CALL int GLAD_GL_NVX_conditional_render; +#define GL_NVX_gpu_memory_info 1 +GLAD_API_CALL int GLAD_GL_NVX_gpu_memory_info; +#define GL_NVX_gpu_multicast2 1 +GLAD_API_CALL int GLAD_GL_NVX_gpu_multicast2; +#define GL_NVX_linked_gpu_multicast 1 +GLAD_API_CALL int GLAD_GL_NVX_linked_gpu_multicast; +#define GL_NVX_progress_fence 1 +GLAD_API_CALL int GLAD_GL_NVX_progress_fence; +#define GL_NV_alpha_to_coverage_dither_control 1 +GLAD_API_CALL int GLAD_GL_NV_alpha_to_coverage_dither_control; +#define GL_NV_bindless_multi_draw_indirect 1 +GLAD_API_CALL int GLAD_GL_NV_bindless_multi_draw_indirect; +#define GL_NV_bindless_multi_draw_indirect_count 1 +GLAD_API_CALL int GLAD_GL_NV_bindless_multi_draw_indirect_count; #define GL_NV_bindless_texture 1 -GLAPI int GLAD_GL_NV_bindless_texture; -#endif -#ifndef GL_NV_blend_equation_advanced +GLAD_API_CALL int GLAD_GL_NV_bindless_texture; #define GL_NV_blend_equation_advanced 1 -GLAPI int GLAD_GL_NV_blend_equation_advanced; -#endif -#ifndef GL_NV_blend_equation_advanced_coherent +GLAD_API_CALL int GLAD_GL_NV_blend_equation_advanced; #define GL_NV_blend_equation_advanced_coherent 1 -GLAPI int GLAD_GL_NV_blend_equation_advanced_coherent; -#endif -#ifndef GL_NV_blend_minmax_factor +GLAD_API_CALL int GLAD_GL_NV_blend_equation_advanced_coherent; #define GL_NV_blend_minmax_factor 1 -GLAPI int GLAD_GL_NV_blend_minmax_factor; -#endif -#ifndef GL_NV_clip_space_w_scaling +GLAD_API_CALL int GLAD_GL_NV_blend_minmax_factor; +#define GL_NV_blend_square 1 +GLAD_API_CALL int GLAD_GL_NV_blend_square; #define GL_NV_clip_space_w_scaling 1 -GLAPI int GLAD_GL_NV_clip_space_w_scaling; -#endif -#ifndef GL_NV_conditional_render +GLAD_API_CALL int GLAD_GL_NV_clip_space_w_scaling; +#define GL_NV_command_list 1 +GLAD_API_CALL int GLAD_GL_NV_command_list; +#define GL_NV_compute_program5 1 +GLAD_API_CALL int GLAD_GL_NV_compute_program5; +#define GL_NV_compute_shader_derivatives 1 +GLAD_API_CALL int GLAD_GL_NV_compute_shader_derivatives; #define GL_NV_conditional_render 1 -GLAPI int GLAD_GL_NV_conditional_render; -#endif -#ifndef GL_NV_conservative_raster +GLAD_API_CALL int GLAD_GL_NV_conditional_render; #define GL_NV_conservative_raster 1 -GLAPI int GLAD_GL_NV_conservative_raster; -#endif -#ifndef GL_NV_conservative_raster_pre_snap +GLAD_API_CALL int GLAD_GL_NV_conservative_raster; +#define GL_NV_conservative_raster_dilate 1 +GLAD_API_CALL int GLAD_GL_NV_conservative_raster_dilate; #define GL_NV_conservative_raster_pre_snap 1 -GLAPI int GLAD_GL_NV_conservative_raster_pre_snap; -#endif -#ifndef GL_NV_conservative_raster_pre_snap_triangles +GLAD_API_CALL int GLAD_GL_NV_conservative_raster_pre_snap; #define GL_NV_conservative_raster_pre_snap_triangles 1 -GLAPI int GLAD_GL_NV_conservative_raster_pre_snap_triangles; -#endif -#ifndef GL_NV_copy_buffer -#define GL_NV_copy_buffer 1 -GLAPI int GLAD_GL_NV_copy_buffer; -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATANVPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLCOPYBUFFERSUBDATANVPROC glad_glCopyBufferSubDataNV; -#define glCopyBufferSubDataNV glad_glCopyBufferSubDataNV -#endif -#ifndef GL_NV_coverage_sample -#define GL_NV_coverage_sample 1 -GLAPI int GLAD_GL_NV_coverage_sample; -typedef void (APIENTRYP PFNGLCOVERAGEMASKNVPROC)(GLboolean mask); -GLAPI PFNGLCOVERAGEMASKNVPROC glad_glCoverageMaskNV; -#define glCoverageMaskNV glad_glCoverageMaskNV -typedef void (APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC)(GLenum operation); -GLAPI PFNGLCOVERAGEOPERATIONNVPROC glad_glCoverageOperationNV; -#define glCoverageOperationNV glad_glCoverageOperationNV -#endif -#ifndef GL_NV_depth_nonlinear -#define GL_NV_depth_nonlinear 1 -GLAPI int GLAD_GL_NV_depth_nonlinear; -#endif -#ifndef GL_NV_draw_buffers -#define GL_NV_draw_buffers 1 -GLAPI int GLAD_GL_NV_draw_buffers; -typedef void (APIENTRYP PFNGLDRAWBUFFERSNVPROC)(GLsizei n, const GLenum *bufs); -GLAPI PFNGLDRAWBUFFERSNVPROC glad_glDrawBuffersNV; -#define glDrawBuffersNV glad_glDrawBuffersNV -#endif -#ifndef GL_NV_draw_instanced -#define GL_NV_draw_instanced 1 -GLAPI int GLAD_GL_NV_draw_instanced; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI PFNGLDRAWARRAYSINSTANCEDNVPROC glad_glDrawArraysInstancedNV; -#define glDrawArraysInstancedNV glad_glDrawArraysInstancedNV -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GLAPI PFNGLDRAWELEMENTSINSTANCEDNVPROC glad_glDrawElementsInstancedNV; -#define glDrawElementsInstancedNV glad_glDrawElementsInstancedNV -#endif -#ifndef GL_NV_draw_vulkan_image +GLAD_API_CALL int GLAD_GL_NV_conservative_raster_pre_snap_triangles; +#define GL_NV_conservative_raster_underestimation 1 +GLAD_API_CALL int GLAD_GL_NV_conservative_raster_underestimation; +#define GL_NV_copy_depth_to_color 1 +GLAD_API_CALL int GLAD_GL_NV_copy_depth_to_color; +#define GL_NV_copy_image 1 +GLAD_API_CALL int GLAD_GL_NV_copy_image; +#define GL_NV_deep_texture3D 1 +GLAD_API_CALL int GLAD_GL_NV_deep_texture3D; +#define GL_NV_depth_buffer_float 1 +GLAD_API_CALL int GLAD_GL_NV_depth_buffer_float; +#define GL_NV_depth_clamp 1 +GLAD_API_CALL int GLAD_GL_NV_depth_clamp; +#define GL_NV_draw_texture 1 +GLAD_API_CALL int GLAD_GL_NV_draw_texture; #define GL_NV_draw_vulkan_image 1 -GLAPI int GLAD_GL_NV_draw_vulkan_image; -#endif -#ifndef GL_NV_explicit_attrib_location -#define GL_NV_explicit_attrib_location 1 -GLAPI int GLAD_GL_NV_explicit_attrib_location; -#endif -#ifndef GL_NV_fbo_color_attachments -#define GL_NV_fbo_color_attachments 1 -GLAPI int GLAD_GL_NV_fbo_color_attachments; -#endif -#ifndef GL_NV_fence +GLAD_API_CALL int GLAD_GL_NV_draw_vulkan_image; +#define GL_NV_evaluators 1 +GLAD_API_CALL int GLAD_GL_NV_evaluators; +#define GL_NV_explicit_multisample 1 +GLAD_API_CALL int GLAD_GL_NV_explicit_multisample; #define GL_NV_fence 1 -GLAPI int GLAD_GL_NV_fence; -#endif -#ifndef GL_NV_fill_rectangle +GLAD_API_CALL int GLAD_GL_NV_fence; #define GL_NV_fill_rectangle 1 -GLAPI int GLAD_GL_NV_fill_rectangle; -#endif -#ifndef GL_NV_fragment_coverage_to_color +GLAD_API_CALL int GLAD_GL_NV_fill_rectangle; +#define GL_NV_float_buffer 1 +GLAD_API_CALL int GLAD_GL_NV_float_buffer; +#define GL_NV_fog_distance 1 +GLAD_API_CALL int GLAD_GL_NV_fog_distance; #define GL_NV_fragment_coverage_to_color 1 -GLAPI int GLAD_GL_NV_fragment_coverage_to_color; -#endif -#ifndef GL_NV_fragment_shader_interlock +GLAD_API_CALL int GLAD_GL_NV_fragment_coverage_to_color; +#define GL_NV_fragment_program 1 +GLAD_API_CALL int GLAD_GL_NV_fragment_program; +#define GL_NV_fragment_program2 1 +GLAD_API_CALL int GLAD_GL_NV_fragment_program2; +#define GL_NV_fragment_program4 1 +GLAD_API_CALL int GLAD_GL_NV_fragment_program4; +#define GL_NV_fragment_program_option 1 +GLAD_API_CALL int GLAD_GL_NV_fragment_program_option; +#define GL_NV_fragment_shader_barycentric 1 +GLAD_API_CALL int GLAD_GL_NV_fragment_shader_barycentric; #define GL_NV_fragment_shader_interlock 1 -GLAPI int GLAD_GL_NV_fragment_shader_interlock; -#endif -#ifndef GL_NV_framebuffer_blit -#define GL_NV_framebuffer_blit 1 -GLAPI int GLAD_GL_NV_framebuffer_blit; -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITFRAMEBUFFERNVPROC glad_glBlitFramebufferNV; -#define glBlitFramebufferNV glad_glBlitFramebufferNV -#endif -#ifndef GL_NV_framebuffer_mixed_samples +GLAD_API_CALL int GLAD_GL_NV_fragment_shader_interlock; #define GL_NV_framebuffer_mixed_samples 1 -GLAPI int GLAD_GL_NV_framebuffer_mixed_samples; -#endif -#ifndef GL_NV_framebuffer_multisample -#define GL_NV_framebuffer_multisample 1 -GLAPI int GLAD_GL_NV_framebuffer_multisample; -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC glad_glRenderbufferStorageMultisampleNV; -#define glRenderbufferStorageMultisampleNV glad_glRenderbufferStorageMultisampleNV -#endif -#ifndef GL_NV_generate_mipmap_sRGB -#define GL_NV_generate_mipmap_sRGB 1 -GLAPI int GLAD_GL_NV_generate_mipmap_sRGB; -#endif -#ifndef GL_NV_geometry_shader_passthrough +GLAD_API_CALL int GLAD_GL_NV_framebuffer_mixed_samples; +#define GL_NV_framebuffer_multisample_coverage 1 +GLAD_API_CALL int GLAD_GL_NV_framebuffer_multisample_coverage; +#define GL_NV_geometry_program4 1 +GLAD_API_CALL int GLAD_GL_NV_geometry_program4; +#define GL_NV_geometry_shader4 1 +GLAD_API_CALL int GLAD_GL_NV_geometry_shader4; #define GL_NV_geometry_shader_passthrough 1 -GLAPI int GLAD_GL_NV_geometry_shader_passthrough; -#endif -#ifndef GL_NV_gpu_shader5 +GLAD_API_CALL int GLAD_GL_NV_geometry_shader_passthrough; +#define GL_NV_gpu_multicast 1 +GLAD_API_CALL int GLAD_GL_NV_gpu_multicast; +#define GL_NV_gpu_program4 1 +GLAD_API_CALL int GLAD_GL_NV_gpu_program4; +#define GL_NV_gpu_program5 1 +GLAD_API_CALL int GLAD_GL_NV_gpu_program5; +#define GL_NV_gpu_program5_mem_extended 1 +GLAD_API_CALL int GLAD_GL_NV_gpu_program5_mem_extended; #define GL_NV_gpu_shader5 1 -GLAPI int GLAD_GL_NV_gpu_shader5; -#endif -#ifndef GL_NV_image_formats -#define GL_NV_image_formats 1 -GLAPI int GLAD_GL_NV_image_formats; -#endif -#ifndef GL_NV_instanced_arrays -#define GL_NV_instanced_arrays 1 -GLAPI int GLAD_GL_NV_instanced_arrays; -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC)(GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXATTRIBDIVISORNVPROC glad_glVertexAttribDivisorNV; -#define glVertexAttribDivisorNV glad_glVertexAttribDivisorNV -#endif -#ifndef GL_NV_internalformat_sample_query +GLAD_API_CALL int GLAD_GL_NV_gpu_shader5; +#define GL_NV_half_float 1 +GLAD_API_CALL int GLAD_GL_NV_half_float; #define GL_NV_internalformat_sample_query 1 -GLAPI int GLAD_GL_NV_internalformat_sample_query; -#endif -#ifndef GL_NV_non_square_matrices -#define GL_NV_non_square_matrices 1 -GLAPI int GLAD_GL_NV_non_square_matrices; -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2X3FVNVPROC glad_glUniformMatrix2x3fvNV; -#define glUniformMatrix2x3fvNV glad_glUniformMatrix2x3fvNV -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3X2FVNVPROC glad_glUniformMatrix3x2fvNV; -#define glUniformMatrix3x2fvNV glad_glUniformMatrix3x2fvNV -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2X4FVNVPROC glad_glUniformMatrix2x4fvNV; -#define glUniformMatrix2x4fvNV glad_glUniformMatrix2x4fvNV -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4X2FVNVPROC glad_glUniformMatrix4x2fvNV; -#define glUniformMatrix4x2fvNV glad_glUniformMatrix4x2fvNV -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3X4FVNVPROC glad_glUniformMatrix3x4fvNV; -#define glUniformMatrix3x4fvNV glad_glUniformMatrix3x4fvNV -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4X3FVNVPROC glad_glUniformMatrix4x3fvNV; -#define glUniformMatrix4x3fvNV glad_glUniformMatrix4x3fvNV -#endif -#ifndef GL_NV_path_rendering +GLAD_API_CALL int GLAD_GL_NV_internalformat_sample_query; +#define GL_NV_light_max_exponent 1 +GLAD_API_CALL int GLAD_GL_NV_light_max_exponent; +#define GL_NV_memory_attachment 1 +GLAD_API_CALL int GLAD_GL_NV_memory_attachment; +#define GL_NV_memory_object_sparse 1 +GLAD_API_CALL int GLAD_GL_NV_memory_object_sparse; +#define GL_NV_mesh_shader 1 +GLAD_API_CALL int GLAD_GL_NV_mesh_shader; +#define GL_NV_multisample_coverage 1 +GLAD_API_CALL int GLAD_GL_NV_multisample_coverage; +#define GL_NV_multisample_filter_hint 1 +GLAD_API_CALL int GLAD_GL_NV_multisample_filter_hint; +#define GL_NV_occlusion_query 1 +GLAD_API_CALL int GLAD_GL_NV_occlusion_query; +#define GL_NV_packed_depth_stencil 1 +GLAD_API_CALL int GLAD_GL_NV_packed_depth_stencil; +#define GL_NV_parameter_buffer_object 1 +GLAD_API_CALL int GLAD_GL_NV_parameter_buffer_object; +#define GL_NV_parameter_buffer_object2 1 +GLAD_API_CALL int GLAD_GL_NV_parameter_buffer_object2; #define GL_NV_path_rendering 1 -GLAPI int GLAD_GL_NV_path_rendering; -#endif -#ifndef GL_NV_path_rendering_shared_edge +GLAD_API_CALL int GLAD_GL_NV_path_rendering; #define GL_NV_path_rendering_shared_edge 1 -GLAPI int GLAD_GL_NV_path_rendering_shared_edge; -#endif -#ifndef GL_NV_pixel_buffer_object -#define GL_NV_pixel_buffer_object 1 -GLAPI int GLAD_GL_NV_pixel_buffer_object; -#endif -#ifndef GL_NV_polygon_mode -#define GL_NV_polygon_mode 1 -GLAPI int GLAD_GL_NV_polygon_mode; -typedef void (APIENTRYP PFNGLPOLYGONMODENVPROC)(GLenum face, GLenum mode); -GLAPI PFNGLPOLYGONMODENVPROC glad_glPolygonModeNV; -#define glPolygonModeNV glad_glPolygonModeNV -#endif -#ifndef GL_NV_read_buffer -#define GL_NV_read_buffer 1 -GLAPI int GLAD_GL_NV_read_buffer; -typedef void (APIENTRYP PFNGLREADBUFFERNVPROC)(GLenum mode); -GLAPI PFNGLREADBUFFERNVPROC glad_glReadBufferNV; -#define glReadBufferNV glad_glReadBufferNV -#endif -#ifndef GL_NV_read_buffer_front -#define GL_NV_read_buffer_front 1 -GLAPI int GLAD_GL_NV_read_buffer_front; -#endif -#ifndef GL_NV_read_depth -#define GL_NV_read_depth 1 -GLAPI int GLAD_GL_NV_read_depth; -#endif -#ifndef GL_NV_read_depth_stencil -#define GL_NV_read_depth_stencil 1 -GLAPI int GLAD_GL_NV_read_depth_stencil; -#endif -#ifndef GL_NV_read_stencil -#define GL_NV_read_stencil 1 -GLAPI int GLAD_GL_NV_read_stencil; -#endif -#ifndef GL_NV_sRGB_formats -#define GL_NV_sRGB_formats 1 -GLAPI int GLAD_GL_NV_sRGB_formats; -#endif -#ifndef GL_NV_sample_locations +GLAD_API_CALL int GLAD_GL_NV_path_rendering_shared_edge; +#define GL_NV_pixel_data_range 1 +GLAD_API_CALL int GLAD_GL_NV_pixel_data_range; +#define GL_NV_point_sprite 1 +GLAD_API_CALL int GLAD_GL_NV_point_sprite; +#define GL_NV_present_video 1 +GLAD_API_CALL int GLAD_GL_NV_present_video; +#define GL_NV_primitive_restart 1 +GLAD_API_CALL int GLAD_GL_NV_primitive_restart; +#define GL_NV_primitive_shading_rate 1 +GLAD_API_CALL int GLAD_GL_NV_primitive_shading_rate; +#define GL_NV_query_resource 1 +GLAD_API_CALL int GLAD_GL_NV_query_resource; +#define GL_NV_query_resource_tag 1 +GLAD_API_CALL int GLAD_GL_NV_query_resource_tag; +#define GL_NV_register_combiners 1 +GLAD_API_CALL int GLAD_GL_NV_register_combiners; +#define GL_NV_register_combiners2 1 +GLAD_API_CALL int GLAD_GL_NV_register_combiners2; +#define GL_NV_representative_fragment_test 1 +GLAD_API_CALL int GLAD_GL_NV_representative_fragment_test; +#define GL_NV_robustness_video_memory_purge 1 +GLAD_API_CALL int GLAD_GL_NV_robustness_video_memory_purge; #define GL_NV_sample_locations 1 -GLAPI int GLAD_GL_NV_sample_locations; -#endif -#ifndef GL_NV_sample_mask_override_coverage +GLAD_API_CALL int GLAD_GL_NV_sample_locations; #define GL_NV_sample_mask_override_coverage 1 -GLAPI int GLAD_GL_NV_sample_mask_override_coverage; -#endif -#ifndef GL_NV_shader_atomic_fp16_vector +GLAD_API_CALL int GLAD_GL_NV_sample_mask_override_coverage; +#define GL_NV_scissor_exclusive 1 +GLAD_API_CALL int GLAD_GL_NV_scissor_exclusive; +#define GL_NV_shader_atomic_counters 1 +GLAD_API_CALL int GLAD_GL_NV_shader_atomic_counters; +#define GL_NV_shader_atomic_float 1 +GLAD_API_CALL int GLAD_GL_NV_shader_atomic_float; +#define GL_NV_shader_atomic_float64 1 +GLAD_API_CALL int GLAD_GL_NV_shader_atomic_float64; #define GL_NV_shader_atomic_fp16_vector 1 -GLAPI int GLAD_GL_NV_shader_atomic_fp16_vector; -#endif -#ifndef GL_NV_shader_noperspective_interpolation -#define GL_NV_shader_noperspective_interpolation 1 -GLAPI int GLAD_GL_NV_shader_noperspective_interpolation; -#endif -#ifndef GL_NV_shadow_samplers_array -#define GL_NV_shadow_samplers_array 1 -GLAPI int GLAD_GL_NV_shadow_samplers_array; -#endif -#ifndef GL_NV_shadow_samplers_cube -#define GL_NV_shadow_samplers_cube 1 -GLAPI int GLAD_GL_NV_shadow_samplers_cube; -#endif -#ifndef GL_NV_stereo_view_rendering +GLAD_API_CALL int GLAD_GL_NV_shader_atomic_fp16_vector; +#define GL_NV_shader_atomic_int64 1 +GLAD_API_CALL int GLAD_GL_NV_shader_atomic_int64; +#define GL_NV_shader_buffer_load 1 +GLAD_API_CALL int GLAD_GL_NV_shader_buffer_load; +#define GL_NV_shader_buffer_store 1 +GLAD_API_CALL int GLAD_GL_NV_shader_buffer_store; +#define GL_NV_shader_storage_buffer_object 1 +GLAD_API_CALL int GLAD_GL_NV_shader_storage_buffer_object; +#define GL_NV_shader_subgroup_partitioned 1 +GLAD_API_CALL int GLAD_GL_NV_shader_subgroup_partitioned; +#define GL_NV_shader_texture_footprint 1 +GLAD_API_CALL int GLAD_GL_NV_shader_texture_footprint; +#define GL_NV_shader_thread_group 1 +GLAD_API_CALL int GLAD_GL_NV_shader_thread_group; +#define GL_NV_shader_thread_shuffle 1 +GLAD_API_CALL int GLAD_GL_NV_shader_thread_shuffle; +#define GL_NV_shading_rate_image 1 +GLAD_API_CALL int GLAD_GL_NV_shading_rate_image; #define GL_NV_stereo_view_rendering 1 -GLAPI int GLAD_GL_NV_stereo_view_rendering; -#endif -#ifndef GL_NV_texture_border_clamp -#define GL_NV_texture_border_clamp 1 -GLAPI int GLAD_GL_NV_texture_border_clamp; -#endif -#ifndef GL_NV_texture_compression_s3tc_update -#define GL_NV_texture_compression_s3tc_update 1 -GLAPI int GLAD_GL_NV_texture_compression_s3tc_update; -#endif -#ifndef GL_NV_texture_npot_2D_mipmap -#define GL_NV_texture_npot_2D_mipmap 1 -GLAPI int GLAD_GL_NV_texture_npot_2D_mipmap; -#endif -#ifndef GL_NV_viewport_array -#define GL_NV_viewport_array 1 -GLAPI int GLAD_GL_NV_viewport_array; -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVNVPROC)(GLuint first, GLsizei count, const GLfloat *v); -GLAPI PFNGLVIEWPORTARRAYVNVPROC glad_glViewportArrayvNV; -#define glViewportArrayvNV glad_glViewportArrayvNV -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI PFNGLVIEWPORTINDEXEDFNVPROC glad_glViewportIndexedfNV; -#define glViewportIndexedfNV glad_glViewportIndexedfNV -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVNVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVIEWPORTINDEXEDFVNVPROC glad_glViewportIndexedfvNV; -#define glViewportIndexedfvNV glad_glViewportIndexedfvNV -typedef void (APIENTRYP PFNGLSCISSORARRAYVNVPROC)(GLuint first, GLsizei count, const GLint *v); -GLAPI PFNGLSCISSORARRAYVNVPROC glad_glScissorArrayvNV; -#define glScissorArrayvNV glad_glScissorArrayvNV -typedef void (APIENTRYP PFNGLSCISSORINDEXEDNVPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI PFNGLSCISSORINDEXEDNVPROC glad_glScissorIndexedNV; -#define glScissorIndexedNV glad_glScissorIndexedNV -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVNVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLSCISSORINDEXEDVNVPROC glad_glScissorIndexedvNV; -#define glScissorIndexedvNV glad_glScissorIndexedvNV -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYFVNVPROC)(GLuint first, GLsizei count, const GLfloat *v); -GLAPI PFNGLDEPTHRANGEARRAYFVNVPROC glad_glDepthRangeArrayfvNV; -#define glDepthRangeArrayfvNV glad_glDepthRangeArrayfvNV -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDFNVPROC)(GLuint index, GLfloat n, GLfloat f); -GLAPI PFNGLDEPTHRANGEINDEXEDFNVPROC glad_glDepthRangeIndexedfNV; -#define glDepthRangeIndexedfNV glad_glDepthRangeIndexedfNV -typedef void (APIENTRYP PFNGLGETFLOATI_VNVPROC)(GLenum target, GLuint index, GLfloat *data); -GLAPI PFNGLGETFLOATI_VNVPROC glad_glGetFloati_vNV; -#define glGetFloati_vNV glad_glGetFloati_vNV -typedef void (APIENTRYP PFNGLENABLEINVPROC)(GLenum target, GLuint index); -GLAPI PFNGLENABLEINVPROC glad_glEnableiNV; -#define glEnableiNV glad_glEnableiNV -typedef void (APIENTRYP PFNGLDISABLEINVPROC)(GLenum target, GLuint index); -GLAPI PFNGLDISABLEINVPROC glad_glDisableiNV; -#define glDisableiNV glad_glDisableiNV -typedef GLboolean (APIENTRYP PFNGLISENABLEDINVPROC)(GLenum target, GLuint index); -GLAPI PFNGLISENABLEDINVPROC glad_glIsEnablediNV; -#define glIsEnablediNV glad_glIsEnablediNV -#endif -#ifndef GL_NV_viewport_array2 +GLAD_API_CALL int GLAD_GL_NV_stereo_view_rendering; +#define GL_NV_tessellation_program5 1 +GLAD_API_CALL int GLAD_GL_NV_tessellation_program5; +#define GL_NV_texgen_emboss 1 +GLAD_API_CALL int GLAD_GL_NV_texgen_emboss; +#define GL_NV_texgen_reflection 1 +GLAD_API_CALL int GLAD_GL_NV_texgen_reflection; +#define GL_NV_texture_barrier 1 +GLAD_API_CALL int GLAD_GL_NV_texture_barrier; +#define GL_NV_texture_compression_vtc 1 +GLAD_API_CALL int GLAD_GL_NV_texture_compression_vtc; +#define GL_NV_texture_env_combine4 1 +GLAD_API_CALL int GLAD_GL_NV_texture_env_combine4; +#define GL_NV_texture_expand_normal 1 +GLAD_API_CALL int GLAD_GL_NV_texture_expand_normal; +#define GL_NV_texture_multisample 1 +GLAD_API_CALL int GLAD_GL_NV_texture_multisample; +#define GL_NV_texture_rectangle 1 +GLAD_API_CALL int GLAD_GL_NV_texture_rectangle; +#define GL_NV_texture_rectangle_compressed 1 +GLAD_API_CALL int GLAD_GL_NV_texture_rectangle_compressed; +#define GL_NV_texture_shader 1 +GLAD_API_CALL int GLAD_GL_NV_texture_shader; +#define GL_NV_texture_shader2 1 +GLAD_API_CALL int GLAD_GL_NV_texture_shader2; +#define GL_NV_texture_shader3 1 +GLAD_API_CALL int GLAD_GL_NV_texture_shader3; +#define GL_NV_timeline_semaphore 1 +GLAD_API_CALL int GLAD_GL_NV_timeline_semaphore; +#define GL_NV_transform_feedback 1 +GLAD_API_CALL int GLAD_GL_NV_transform_feedback; +#define GL_NV_transform_feedback2 1 +GLAD_API_CALL int GLAD_GL_NV_transform_feedback2; +#define GL_NV_uniform_buffer_unified_memory 1 +GLAD_API_CALL int GLAD_GL_NV_uniform_buffer_unified_memory; +#define GL_NV_vdpau_interop 1 +GLAD_API_CALL int GLAD_GL_NV_vdpau_interop; +#define GL_NV_vdpau_interop2 1 +GLAD_API_CALL int GLAD_GL_NV_vdpau_interop2; +#define GL_NV_vertex_array_range 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_array_range; +#define GL_NV_vertex_array_range2 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_array_range2; +#define GL_NV_vertex_attrib_integer_64bit 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_attrib_integer_64bit; +#define GL_NV_vertex_buffer_unified_memory 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_buffer_unified_memory; +#define GL_NV_vertex_program 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_program; +#define GL_NV_vertex_program1_1 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_program1_1; +#define GL_NV_vertex_program2 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_program2; +#define GL_NV_vertex_program2_option 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_program2_option; +#define GL_NV_vertex_program3 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_program3; +#define GL_NV_vertex_program4 1 +GLAD_API_CALL int GLAD_GL_NV_vertex_program4; +#define GL_NV_video_capture 1 +GLAD_API_CALL int GLAD_GL_NV_video_capture; #define GL_NV_viewport_array2 1 -GLAPI int GLAD_GL_NV_viewport_array2; -#endif -#ifndef GL_NV_viewport_swizzle +GLAD_API_CALL int GLAD_GL_NV_viewport_array2; #define GL_NV_viewport_swizzle 1 -GLAPI int GLAD_GL_NV_viewport_swizzle; -#endif -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -GLAPI int GLAD_GL_OES_EGL_image; -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)(GLenum target, GLeglImageOES image); -GLAPI PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glad_glEGLImageTargetTexture2DOES; -#define glEGLImageTargetTexture2DOES glad_glEGLImageTargetTexture2DOES -typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC)(GLenum target, GLeglImageOES image); -GLAPI PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC glad_glEGLImageTargetRenderbufferStorageOES; -#define glEGLImageTargetRenderbufferStorageOES glad_glEGLImageTargetRenderbufferStorageOES -#endif -#ifndef GL_OES_EGL_image_external -#define GL_OES_EGL_image_external 1 -GLAPI int GLAD_GL_OES_EGL_image_external; -#endif -#ifndef GL_OES_EGL_image_external_essl3 -#define GL_OES_EGL_image_external_essl3 1 -GLAPI int GLAD_GL_OES_EGL_image_external_essl3; -#endif -#ifndef GL_OES_compressed_ETC1_RGB8_sub_texture -#define GL_OES_compressed_ETC1_RGB8_sub_texture 1 -GLAPI int GLAD_GL_OES_compressed_ETC1_RGB8_sub_texture; -#endif -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_OES_compressed_ETC1_RGB8_texture 1 -GLAPI int GLAD_GL_OES_compressed_ETC1_RGB8_texture; -#endif -#ifndef GL_OES_compressed_paletted_texture +GLAD_API_CALL int GLAD_GL_NV_viewport_swizzle; +#define GL_OES_byte_coordinates 1 +GLAD_API_CALL int GLAD_GL_OES_byte_coordinates; #define GL_OES_compressed_paletted_texture 1 -GLAPI int GLAD_GL_OES_compressed_paletted_texture; -#endif -#ifndef GL_OES_copy_image -#define GL_OES_copy_image 1 -GLAPI int GLAD_GL_OES_copy_image; -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAOESPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI PFNGLCOPYIMAGESUBDATAOESPROC glad_glCopyImageSubDataOES; -#define glCopyImageSubDataOES glad_glCopyImageSubDataOES -#endif -#ifndef GL_OES_depth24 -#define GL_OES_depth24 1 -GLAPI int GLAD_GL_OES_depth24; -#endif -#ifndef GL_OES_depth32 -#define GL_OES_depth32 1 -GLAPI int GLAD_GL_OES_depth32; -#endif -#ifndef GL_OES_depth_texture -#define GL_OES_depth_texture 1 -GLAPI int GLAD_GL_OES_depth_texture; -#endif -#ifndef GL_OES_draw_buffers_indexed -#define GL_OES_draw_buffers_indexed 1 -GLAPI int GLAD_GL_OES_draw_buffers_indexed; -typedef void (APIENTRYP PFNGLENABLEIOESPROC)(GLenum target, GLuint index); -GLAPI PFNGLENABLEIOESPROC glad_glEnableiOES; -#define glEnableiOES glad_glEnableiOES -typedef void (APIENTRYP PFNGLDISABLEIOESPROC)(GLenum target, GLuint index); -GLAPI PFNGLDISABLEIOESPROC glad_glDisableiOES; -#define glDisableiOES glad_glDisableiOES -typedef void (APIENTRYP PFNGLBLENDEQUATIONIOESPROC)(GLuint buf, GLenum mode); -GLAPI PFNGLBLENDEQUATIONIOESPROC glad_glBlendEquationiOES; -#define glBlendEquationiOES glad_glBlendEquationiOES -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIOESPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEIOESPROC glad_glBlendEquationSeparateiOES; -#define glBlendEquationSeparateiOES glad_glBlendEquationSeparateiOES -typedef void (APIENTRYP PFNGLBLENDFUNCIOESPROC)(GLuint buf, GLenum src, GLenum dst); -GLAPI PFNGLBLENDFUNCIOESPROC glad_glBlendFunciOES; -#define glBlendFunciOES glad_glBlendFunciOES -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIOESPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEIOESPROC glad_glBlendFuncSeparateiOES; -#define glBlendFuncSeparateiOES glad_glBlendFuncSeparateiOES -typedef void (APIENTRYP PFNGLCOLORMASKIOESPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI PFNGLCOLORMASKIOESPROC glad_glColorMaskiOES; -#define glColorMaskiOES glad_glColorMaskiOES -typedef GLboolean (APIENTRYP PFNGLISENABLEDIOESPROC)(GLenum target, GLuint index); -GLAPI PFNGLISENABLEDIOESPROC glad_glIsEnablediOES; -#define glIsEnablediOES glad_glIsEnablediOES -#endif -#ifndef GL_OES_draw_elements_base_vertex -#define GL_OES_draw_elements_base_vertex 1 -GLAPI int GLAD_GL_OES_draw_elements_base_vertex; -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXOESPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSBASEVERTEXOESPROC glad_glDrawElementsBaseVertexOES; -#define glDrawElementsBaseVertexOES glad_glDrawElementsBaseVertexOES -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC glad_glDrawRangeElementsBaseVertexOES; -#define glDrawRangeElementsBaseVertexOES glad_glDrawRangeElementsBaseVertexOES -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC glad_glDrawElementsInstancedBaseVertexOES; -#define glDrawElementsInstancedBaseVertexOES glad_glDrawElementsInstancedBaseVertexOES -#endif -#ifndef GL_OES_element_index_uint -#define GL_OES_element_index_uint 1 -GLAPI int GLAD_GL_OES_element_index_uint; -#endif -#ifndef GL_OES_fbo_render_mipmap -#define GL_OES_fbo_render_mipmap 1 -GLAPI int GLAD_GL_OES_fbo_render_mipmap; -#endif -#ifndef GL_OES_fragment_precision_high -#define GL_OES_fragment_precision_high 1 -GLAPI int GLAD_GL_OES_fragment_precision_high; -#endif -#ifndef GL_OES_geometry_point_size -#define GL_OES_geometry_point_size 1 -GLAPI int GLAD_GL_OES_geometry_point_size; -#endif -#ifndef GL_OES_geometry_shader -#define GL_OES_geometry_shader 1 -GLAPI int GLAD_GL_OES_geometry_shader; -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREOESPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTUREOESPROC glad_glFramebufferTextureOES; -#define glFramebufferTextureOES glad_glFramebufferTextureOES -#endif -#ifndef GL_OES_get_program_binary -#define GL_OES_get_program_binary 1 -GLAPI int GLAD_GL_OES_get_program_binary; -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYOESPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -GLAPI PFNGLGETPROGRAMBINARYOESPROC glad_glGetProgramBinaryOES; -#define glGetProgramBinaryOES glad_glGetProgramBinaryOES -typedef void (APIENTRYP PFNGLPROGRAMBINARYOESPROC)(GLuint program, GLenum binaryFormat, const void *binary, GLint length); -GLAPI PFNGLPROGRAMBINARYOESPROC glad_glProgramBinaryOES; -#define glProgramBinaryOES glad_glProgramBinaryOES -#endif -#ifndef GL_OES_gpu_shader5 -#define GL_OES_gpu_shader5 1 -GLAPI int GLAD_GL_OES_gpu_shader5; -#endif -#ifndef GL_OES_mapbuffer -#define GL_OES_mapbuffer 1 -GLAPI int GLAD_GL_OES_mapbuffer; -typedef void * (APIENTRYP PFNGLMAPBUFFEROESPROC)(GLenum target, GLenum access); -GLAPI PFNGLMAPBUFFEROESPROC glad_glMapBufferOES; -#define glMapBufferOES glad_glMapBufferOES -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFEROESPROC)(GLenum target); -GLAPI PFNGLUNMAPBUFFEROESPROC glad_glUnmapBufferOES; -#define glUnmapBufferOES glad_glUnmapBufferOES -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC)(GLenum target, GLenum pname, void **params); -GLAPI PFNGLGETBUFFERPOINTERVOESPROC glad_glGetBufferPointervOES; -#define glGetBufferPointervOES glad_glGetBufferPointervOES -#endif -#ifndef GL_OES_packed_depth_stencil -#define GL_OES_packed_depth_stencil 1 -GLAPI int GLAD_GL_OES_packed_depth_stencil; -#endif -#ifndef GL_OES_primitive_bounding_box -#define GL_OES_primitive_bounding_box 1 -GLAPI int GLAD_GL_OES_primitive_bounding_box; -typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXOESPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -GLAPI PFNGLPRIMITIVEBOUNDINGBOXOESPROC glad_glPrimitiveBoundingBoxOES; -#define glPrimitiveBoundingBoxOES glad_glPrimitiveBoundingBoxOES -#endif -#ifndef GL_OES_required_internalformat -#define GL_OES_required_internalformat 1 -GLAPI int GLAD_GL_OES_required_internalformat; -#endif -#ifndef GL_OES_rgb8_rgba8 -#define GL_OES_rgb8_rgba8 1 -GLAPI int GLAD_GL_OES_rgb8_rgba8; -#endif -#ifndef GL_OES_sample_shading -#define GL_OES_sample_shading 1 -GLAPI int GLAD_GL_OES_sample_shading; -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGOESPROC)(GLfloat value); -GLAPI PFNGLMINSAMPLESHADINGOESPROC glad_glMinSampleShadingOES; -#define glMinSampleShadingOES glad_glMinSampleShadingOES -#endif -#ifndef GL_OES_sample_variables -#define GL_OES_sample_variables 1 -GLAPI int GLAD_GL_OES_sample_variables; -#endif -#ifndef GL_OES_shader_image_atomic -#define GL_OES_shader_image_atomic 1 -GLAPI int GLAD_GL_OES_shader_image_atomic; -#endif -#ifndef GL_OES_shader_io_blocks -#define GL_OES_shader_io_blocks 1 -GLAPI int GLAD_GL_OES_shader_io_blocks; -#endif -#ifndef GL_OES_shader_multisample_interpolation -#define GL_OES_shader_multisample_interpolation 1 -GLAPI int GLAD_GL_OES_shader_multisample_interpolation; -#endif -#ifndef GL_OES_standard_derivatives -#define GL_OES_standard_derivatives 1 -GLAPI int GLAD_GL_OES_standard_derivatives; -#endif -#ifndef GL_OES_stencil1 -#define GL_OES_stencil1 1 -GLAPI int GLAD_GL_OES_stencil1; -#endif -#ifndef GL_OES_stencil4 -#define GL_OES_stencil4 1 -GLAPI int GLAD_GL_OES_stencil4; -#endif -#ifndef GL_OES_surfaceless_context -#define GL_OES_surfaceless_context 1 -GLAPI int GLAD_GL_OES_surfaceless_context; -#endif -#ifndef GL_OES_tessellation_point_size -#define GL_OES_tessellation_point_size 1 -GLAPI int GLAD_GL_OES_tessellation_point_size; -#endif -#ifndef GL_OES_tessellation_shader -#define GL_OES_tessellation_shader 1 -GLAPI int GLAD_GL_OES_tessellation_shader; -typedef void (APIENTRYP PFNGLPATCHPARAMETERIOESPROC)(GLenum pname, GLint value); -GLAPI PFNGLPATCHPARAMETERIOESPROC glad_glPatchParameteriOES; -#define glPatchParameteriOES glad_glPatchParameteriOES -#endif -#ifndef GL_OES_texture_3D -#define GL_OES_texture_3D 1 -GLAPI int GLAD_GL_OES_texture_3D; -typedef void (APIENTRYP PFNGLTEXIMAGE3DOESPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE3DOESPROC glad_glTexImage3DOES; -#define glTexImage3DOES glad_glTexImage3DOES -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE3DOESPROC glad_glTexSubImage3DOES; -#define glTexSubImage3DOES glad_glTexSubImage3DOES -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE3DOESPROC glad_glCopyTexSubImage3DOES; -#define glCopyTexSubImage3DOES glad_glCopyTexSubImage3DOES -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE3DOESPROC glad_glCompressedTexImage3DOES; -#define glCompressedTexImage3DOES glad_glCompressedTexImage3DOES -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC glad_glCompressedTexSubImage3DOES; -#define glCompressedTexSubImage3DOES glad_glCompressedTexSubImage3DOES -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI PFNGLFRAMEBUFFERTEXTURE3DOESPROC glad_glFramebufferTexture3DOES; -#define glFramebufferTexture3DOES glad_glFramebufferTexture3DOES -#endif -#ifndef GL_OES_texture_border_clamp -#define GL_OES_texture_border_clamp 1 -GLAPI int GLAD_GL_OES_texture_border_clamp; -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXPARAMETERIIVOESPROC glad_glTexParameterIivOES; -#define glTexParameterIivOES glad_glTexParameterIivOES -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, const GLuint *params); -GLAPI PFNGLTEXPARAMETERIUIVOESPROC glad_glTexParameterIuivOES; -#define glTexParameterIuivOES glad_glTexParameterIuivOES -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXPARAMETERIIVOESPROC glad_glGetTexParameterIivOES; -#define glGetTexParameterIivOES glad_glGetTexParameterIivOES -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, GLuint *params); -GLAPI PFNGLGETTEXPARAMETERIUIVOESPROC glad_glGetTexParameterIuivOES; -#define glGetTexParameterIuivOES glad_glGetTexParameterIuivOES -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, const GLint *param); -GLAPI PFNGLSAMPLERPARAMETERIIVOESPROC glad_glSamplerParameterIivOES; -#define glSamplerParameterIivOES glad_glSamplerParameterIivOES -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, const GLuint *param); -GLAPI PFNGLSAMPLERPARAMETERIUIVOESPROC glad_glSamplerParameterIuivOES; -#define glSamplerParameterIuivOES glad_glSamplerParameterIuivOES -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, GLint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIIVOESPROC glad_glGetSamplerParameterIivOES; -#define glGetSamplerParameterIivOES glad_glGetSamplerParameterIivOES -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, GLuint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIUIVOESPROC glad_glGetSamplerParameterIuivOES; -#define glGetSamplerParameterIuivOES glad_glGetSamplerParameterIuivOES -#endif -#ifndef GL_OES_texture_buffer -#define GL_OES_texture_buffer 1 -GLAPI int GLAD_GL_OES_texture_buffer; -typedef void (APIENTRYP PFNGLTEXBUFFEROESPROC)(GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXBUFFEROESPROC glad_glTexBufferOES; -#define glTexBufferOES glad_glTexBufferOES -typedef void (APIENTRYP PFNGLTEXBUFFERRANGEOESPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLTEXBUFFERRANGEOESPROC glad_glTexBufferRangeOES; -#define glTexBufferRangeOES glad_glTexBufferRangeOES -#endif -#ifndef GL_OES_texture_compression_astc -#define GL_OES_texture_compression_astc 1 -GLAPI int GLAD_GL_OES_texture_compression_astc; -#endif -#ifndef GL_OES_texture_cube_map_array -#define GL_OES_texture_cube_map_array 1 -GLAPI int GLAD_GL_OES_texture_cube_map_array; -#endif -#ifndef GL_OES_texture_float -#define GL_OES_texture_float 1 -GLAPI int GLAD_GL_OES_texture_float; -#endif -#ifndef GL_OES_texture_float_linear -#define GL_OES_texture_float_linear 1 -GLAPI int GLAD_GL_OES_texture_float_linear; -#endif -#ifndef GL_OES_texture_half_float -#define GL_OES_texture_half_float 1 -GLAPI int GLAD_GL_OES_texture_half_float; -#endif -#ifndef GL_OES_texture_half_float_linear -#define GL_OES_texture_half_float_linear 1 -GLAPI int GLAD_GL_OES_texture_half_float_linear; -#endif -#ifndef GL_OES_texture_npot -#define GL_OES_texture_npot 1 -GLAPI int GLAD_GL_OES_texture_npot; -#endif -#ifndef GL_OES_texture_stencil8 -#define GL_OES_texture_stencil8 1 -GLAPI int GLAD_GL_OES_texture_stencil8; -#endif -#ifndef GL_OES_texture_storage_multisample_2d_array -#define GL_OES_texture_storage_multisample_2d_array 1 -GLAPI int GLAD_GL_OES_texture_storage_multisample_2d_array; -typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC glad_glTexStorage3DMultisampleOES; -#define glTexStorage3DMultisampleOES glad_glTexStorage3DMultisampleOES -#endif -#ifndef GL_OES_texture_view -#define GL_OES_texture_view 1 -GLAPI int GLAD_GL_OES_texture_view; -typedef void (APIENTRYP PFNGLTEXTUREVIEWOESPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -GLAPI PFNGLTEXTUREVIEWOESPROC glad_glTextureViewOES; -#define glTextureViewOES glad_glTextureViewOES -#endif -#ifndef GL_OES_vertex_array_object -#define GL_OES_vertex_array_object 1 -GLAPI int GLAD_GL_OES_vertex_array_object; -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYOESPROC)(GLuint array); -GLAPI PFNGLBINDVERTEXARRAYOESPROC glad_glBindVertexArrayOES; -#define glBindVertexArrayOES glad_glBindVertexArrayOES -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC)(GLsizei n, const GLuint *arrays); -GLAPI PFNGLDELETEVERTEXARRAYSOESPROC glad_glDeleteVertexArraysOES; -#define glDeleteVertexArraysOES glad_glDeleteVertexArraysOES -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSOESPROC)(GLsizei n, GLuint *arrays); -GLAPI PFNGLGENVERTEXARRAYSOESPROC glad_glGenVertexArraysOES; -#define glGenVertexArraysOES glad_glGenVertexArraysOES -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYOESPROC)(GLuint array); -GLAPI PFNGLISVERTEXARRAYOESPROC glad_glIsVertexArrayOES; -#define glIsVertexArrayOES glad_glIsVertexArrayOES -#endif -#ifndef GL_OES_vertex_half_float -#define GL_OES_vertex_half_float 1 -GLAPI int GLAD_GL_OES_vertex_half_float; -#endif -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_OES_vertex_type_10_10_10_2 1 -GLAPI int GLAD_GL_OES_vertex_type_10_10_10_2; -#endif -#ifndef GL_OES_viewport_array -#define GL_OES_viewport_array 1 -GLAPI int GLAD_GL_OES_viewport_array; -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVOESPROC)(GLuint first, GLsizei count, const GLfloat *v); -GLAPI PFNGLVIEWPORTARRAYVOESPROC glad_glViewportArrayvOES; -#define glViewportArrayvOES glad_glViewportArrayvOES -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFOESPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI PFNGLVIEWPORTINDEXEDFOESPROC glad_glViewportIndexedfOES; -#define glViewportIndexedfOES glad_glViewportIndexedfOES -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVOESPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVIEWPORTINDEXEDFVOESPROC glad_glViewportIndexedfvOES; -#define glViewportIndexedfvOES glad_glViewportIndexedfvOES -typedef void (APIENTRYP PFNGLSCISSORARRAYVOESPROC)(GLuint first, GLsizei count, const GLint *v); -GLAPI PFNGLSCISSORARRAYVOESPROC glad_glScissorArrayvOES; -#define glScissorArrayvOES glad_glScissorArrayvOES -typedef void (APIENTRYP PFNGLSCISSORINDEXEDOESPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI PFNGLSCISSORINDEXEDOESPROC glad_glScissorIndexedOES; -#define glScissorIndexedOES glad_glScissorIndexedOES -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVOESPROC)(GLuint index, const GLint *v); -GLAPI PFNGLSCISSORINDEXEDVOESPROC glad_glScissorIndexedvOES; -#define glScissorIndexedvOES glad_glScissorIndexedvOES -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYFVOESPROC)(GLuint first, GLsizei count, const GLfloat *v); -GLAPI PFNGLDEPTHRANGEARRAYFVOESPROC glad_glDepthRangeArrayfvOES; -#define glDepthRangeArrayfvOES glad_glDepthRangeArrayfvOES -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDFOESPROC)(GLuint index, GLfloat n, GLfloat f); -GLAPI PFNGLDEPTHRANGEINDEXEDFOESPROC glad_glDepthRangeIndexedfOES; -#define glDepthRangeIndexedfOES glad_glDepthRangeIndexedfOES -typedef void (APIENTRYP PFNGLGETFLOATI_VOESPROC)(GLenum target, GLuint index, GLfloat *data); -GLAPI PFNGLGETFLOATI_VOESPROC glad_glGetFloati_vOES; -#define glGetFloati_vOES glad_glGetFloati_vOES -#endif -#ifndef GL_OVR_multiview +GLAD_API_CALL int GLAD_GL_OES_compressed_paletted_texture; +#define GL_OES_fixed_point 1 +GLAD_API_CALL int GLAD_GL_OES_fixed_point; +#define GL_OES_query_matrix 1 +GLAD_API_CALL int GLAD_GL_OES_query_matrix; +#define GL_OES_read_format 1 +GLAD_API_CALL int GLAD_GL_OES_read_format; +#define GL_OES_single_precision 1 +GLAD_API_CALL int GLAD_GL_OES_single_precision; +#define GL_OML_interlace 1 +GLAD_API_CALL int GLAD_GL_OML_interlace; +#define GL_OML_resample 1 +GLAD_API_CALL int GLAD_GL_OML_resample; +#define GL_OML_subsample 1 +GLAD_API_CALL int GLAD_GL_OML_subsample; #define GL_OVR_multiview 1 -GLAPI int GLAD_GL_OVR_multiview; -#endif -#ifndef GL_OVR_multiview2 +GLAD_API_CALL int GLAD_GL_OVR_multiview; #define GL_OVR_multiview2 1 -GLAPI int GLAD_GL_OVR_multiview2; -#endif -#ifndef GL_OVR_multiview_multisampled_render_to_texture -#define GL_OVR_multiview_multisampled_render_to_texture 1 -GLAPI int GLAD_GL_OVR_multiview_multisampled_render_to_texture; -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); -GLAPI PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC glad_glFramebufferTextureMultisampleMultiviewOVR; -#define glFramebufferTextureMultisampleMultiviewOVR glad_glFramebufferTextureMultisampleMultiviewOVR -#endif -#ifndef GL_QCOM_alpha_test -#define GL_QCOM_alpha_test 1 -GLAPI int GLAD_GL_QCOM_alpha_test; -typedef void (APIENTRYP PFNGLALPHAFUNCQCOMPROC)(GLenum func, GLclampf ref); -GLAPI PFNGLALPHAFUNCQCOMPROC glad_glAlphaFuncQCOM; -#define glAlphaFuncQCOM glad_glAlphaFuncQCOM -#endif -#ifndef GL_QCOM_binning_control -#define GL_QCOM_binning_control 1 -GLAPI int GLAD_GL_QCOM_binning_control; -#endif -#ifndef GL_QCOM_driver_control -#define GL_QCOM_driver_control 1 -GLAPI int GLAD_GL_QCOM_driver_control; -typedef void (APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC)(GLint *num, GLsizei size, GLuint *driverControls); -GLAPI PFNGLGETDRIVERCONTROLSQCOMPROC glad_glGetDriverControlsQCOM; -#define glGetDriverControlsQCOM glad_glGetDriverControlsQCOM -typedef void (APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC)(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -GLAPI PFNGLGETDRIVERCONTROLSTRINGQCOMPROC glad_glGetDriverControlStringQCOM; -#define glGetDriverControlStringQCOM glad_glGetDriverControlStringQCOM -typedef void (APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC)(GLuint driverControl); -GLAPI PFNGLENABLEDRIVERCONTROLQCOMPROC glad_glEnableDriverControlQCOM; -#define glEnableDriverControlQCOM glad_glEnableDriverControlQCOM -typedef void (APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC)(GLuint driverControl); -GLAPI PFNGLDISABLEDRIVERCONTROLQCOMPROC glad_glDisableDriverControlQCOM; -#define glDisableDriverControlQCOM glad_glDisableDriverControlQCOM -#endif -#ifndef GL_QCOM_extended_get -#define GL_QCOM_extended_get 1 -GLAPI int GLAD_GL_QCOM_extended_get; -typedef void (APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC)(GLuint *textures, GLint maxTextures, GLint *numTextures); -GLAPI PFNGLEXTGETTEXTURESQCOMPROC glad_glExtGetTexturesQCOM; -#define glExtGetTexturesQCOM glad_glExtGetTexturesQCOM -typedef void (APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC)(GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -GLAPI PFNGLEXTGETBUFFERSQCOMPROC glad_glExtGetBuffersQCOM; -#define glExtGetBuffersQCOM glad_glExtGetBuffersQCOM -typedef void (APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC)(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -GLAPI PFNGLEXTGETRENDERBUFFERSQCOMPROC glad_glExtGetRenderbuffersQCOM; -#define glExtGetRenderbuffersQCOM glad_glExtGetRenderbuffersQCOM -typedef void (APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC)(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -GLAPI PFNGLEXTGETFRAMEBUFFERSQCOMPROC glad_glExtGetFramebuffersQCOM; -#define glExtGetFramebuffersQCOM glad_glExtGetFramebuffersQCOM -typedef void (APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -GLAPI PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC glad_glExtGetTexLevelParameterivQCOM; -#define glExtGetTexLevelParameterivQCOM glad_glExtGetTexLevelParameterivQCOM -typedef void (APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC glad_glExtTexObjectStateOverrideiQCOM; -#define glExtTexObjectStateOverrideiQCOM glad_glExtTexObjectStateOverrideiQCOM -typedef void (APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); -GLAPI PFNGLEXTGETTEXSUBIMAGEQCOMPROC glad_glExtGetTexSubImageQCOM; -#define glExtGetTexSubImageQCOM glad_glExtGetTexSubImageQCOM -typedef void (APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC)(GLenum target, void **params); -GLAPI PFNGLEXTGETBUFFERPOINTERVQCOMPROC glad_glExtGetBufferPointervQCOM; -#define glExtGetBufferPointervQCOM glad_glExtGetBufferPointervQCOM -#endif -#ifndef GL_QCOM_extended_get2 -#define GL_QCOM_extended_get2 1 -GLAPI int GLAD_GL_QCOM_extended_get2; -typedef void (APIENTRYP PFNGLEXTGETSHADERSQCOMPROC)(GLuint *shaders, GLint maxShaders, GLint *numShaders); -GLAPI PFNGLEXTGETSHADERSQCOMPROC glad_glExtGetShadersQCOM; -#define glExtGetShadersQCOM glad_glExtGetShadersQCOM -typedef void (APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC)(GLuint *programs, GLint maxPrograms, GLint *numPrograms); -GLAPI PFNGLEXTGETPROGRAMSQCOMPROC glad_glExtGetProgramsQCOM; -#define glExtGetProgramsQCOM glad_glExtGetProgramsQCOM -typedef GLboolean (APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC)(GLuint program); -GLAPI PFNGLEXTISPROGRAMBINARYQCOMPROC glad_glExtIsProgramBinaryQCOM; -#define glExtIsProgramBinaryQCOM glad_glExtIsProgramBinaryQCOM -typedef void (APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC)(GLuint program, GLenum shadertype, GLchar *source, GLint *length); -GLAPI PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC glad_glExtGetProgramBinarySourceQCOM; -#define glExtGetProgramBinarySourceQCOM glad_glExtGetProgramBinarySourceQCOM -#endif -#ifndef GL_QCOM_framebuffer_foveated -#define GL_QCOM_framebuffer_foveated 1 -GLAPI int GLAD_GL_QCOM_framebuffer_foveated; -typedef void (APIENTRYP PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC)(GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures); -GLAPI PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC glad_glFramebufferFoveationConfigQCOM; -#define glFramebufferFoveationConfigQCOM glad_glFramebufferFoveationConfigQCOM -typedef void (APIENTRYP PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC)(GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); -GLAPI PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC glad_glFramebufferFoveationParametersQCOM; -#define glFramebufferFoveationParametersQCOM glad_glFramebufferFoveationParametersQCOM -#endif -#ifndef GL_QCOM_perfmon_global_mode -#define GL_QCOM_perfmon_global_mode 1 -GLAPI int GLAD_GL_QCOM_perfmon_global_mode; -#endif -#ifndef GL_QCOM_shader_framebuffer_fetch_noncoherent -#define GL_QCOM_shader_framebuffer_fetch_noncoherent 1 -GLAPI int GLAD_GL_QCOM_shader_framebuffer_fetch_noncoherent; -typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC)(void); -GLAPI PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC glad_glFramebufferFetchBarrierQCOM; -#define glFramebufferFetchBarrierQCOM glad_glFramebufferFetchBarrierQCOM -#endif -#ifndef GL_QCOM_texture_foveated -#define GL_QCOM_texture_foveated 1 -GLAPI int GLAD_GL_QCOM_texture_foveated; -typedef void (APIENTRYP PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC)(GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); -GLAPI PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC glad_glTextureFoveationParametersQCOM; -#define glTextureFoveationParametersQCOM glad_glTextureFoveationParametersQCOM -#endif -#ifndef GL_QCOM_tiled_rendering -#define GL_QCOM_tiled_rendering 1 -GLAPI int GLAD_GL_QCOM_tiled_rendering; -typedef void (APIENTRYP PFNGLSTARTTILINGQCOMPROC)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -GLAPI PFNGLSTARTTILINGQCOMPROC glad_glStartTilingQCOM; -#define glStartTilingQCOM glad_glStartTilingQCOM -typedef void (APIENTRYP PFNGLENDTILINGQCOMPROC)(GLbitfield preserveMask); -GLAPI PFNGLENDTILINGQCOMPROC glad_glEndTilingQCOM; -#define glEndTilingQCOM glad_glEndTilingQCOM -#endif -#ifndef GL_QCOM_writeonly_rendering -#define GL_QCOM_writeonly_rendering 1 -GLAPI int GLAD_GL_QCOM_writeonly_rendering; -#endif -#ifndef GL_VIV_shader_binary -#define GL_VIV_shader_binary 1 -GLAPI int GLAD_GL_VIV_shader_binary; +GLAD_API_CALL int GLAD_GL_OVR_multiview2; +#define GL_PGI_misc_hints 1 +GLAD_API_CALL int GLAD_GL_PGI_misc_hints; +#define GL_PGI_vertex_hints 1 +GLAD_API_CALL int GLAD_GL_PGI_vertex_hints; +#define GL_REND_screen_coordinates 1 +GLAD_API_CALL int GLAD_GL_REND_screen_coordinates; +#define GL_S3_s3tc 1 +GLAD_API_CALL int GLAD_GL_S3_s3tc; +#define GL_SGIS_detail_texture 1 +GLAD_API_CALL int GLAD_GL_SGIS_detail_texture; +#define GL_SGIS_fog_function 1 +GLAD_API_CALL int GLAD_GL_SGIS_fog_function; +#define GL_SGIS_generate_mipmap 1 +GLAD_API_CALL int GLAD_GL_SGIS_generate_mipmap; +#define GL_SGIS_multisample 1 +GLAD_API_CALL int GLAD_GL_SGIS_multisample; +#define GL_SGIS_pixel_texture 1 +GLAD_API_CALL int GLAD_GL_SGIS_pixel_texture; +#define GL_SGIS_point_line_texgen 1 +GLAD_API_CALL int GLAD_GL_SGIS_point_line_texgen; +#define GL_SGIS_point_parameters 1 +GLAD_API_CALL int GLAD_GL_SGIS_point_parameters; +#define GL_SGIS_sharpen_texture 1 +GLAD_API_CALL int GLAD_GL_SGIS_sharpen_texture; +#define GL_SGIS_texture4D 1 +GLAD_API_CALL int GLAD_GL_SGIS_texture4D; +#define GL_SGIS_texture_border_clamp 1 +GLAD_API_CALL int GLAD_GL_SGIS_texture_border_clamp; +#define GL_SGIS_texture_color_mask 1 +GLAD_API_CALL int GLAD_GL_SGIS_texture_color_mask; +#define GL_SGIS_texture_edge_clamp 1 +GLAD_API_CALL int GLAD_GL_SGIS_texture_edge_clamp; +#define GL_SGIS_texture_filter4 1 +GLAD_API_CALL int GLAD_GL_SGIS_texture_filter4; +#define GL_SGIS_texture_lod 1 +GLAD_API_CALL int GLAD_GL_SGIS_texture_lod; +#define GL_SGIS_texture_select 1 +GLAD_API_CALL int GLAD_GL_SGIS_texture_select; +#define GL_SGIX_async 1 +GLAD_API_CALL int GLAD_GL_SGIX_async; +#define GL_SGIX_async_histogram 1 +GLAD_API_CALL int GLAD_GL_SGIX_async_histogram; +#define GL_SGIX_async_pixel 1 +GLAD_API_CALL int GLAD_GL_SGIX_async_pixel; +#define GL_SGIX_blend_alpha_minmax 1 +GLAD_API_CALL int GLAD_GL_SGIX_blend_alpha_minmax; +#define GL_SGIX_calligraphic_fragment 1 +GLAD_API_CALL int GLAD_GL_SGIX_calligraphic_fragment; +#define GL_SGIX_clipmap 1 +GLAD_API_CALL int GLAD_GL_SGIX_clipmap; +#define GL_SGIX_convolution_accuracy 1 +GLAD_API_CALL int GLAD_GL_SGIX_convolution_accuracy; +#define GL_SGIX_depth_pass_instrument 1 +GLAD_API_CALL int GLAD_GL_SGIX_depth_pass_instrument; +#define GL_SGIX_depth_texture 1 +GLAD_API_CALL int GLAD_GL_SGIX_depth_texture; +#define GL_SGIX_flush_raster 1 +GLAD_API_CALL int GLAD_GL_SGIX_flush_raster; +#define GL_SGIX_fog_offset 1 +GLAD_API_CALL int GLAD_GL_SGIX_fog_offset; +#define GL_SGIX_fragment_lighting 1 +GLAD_API_CALL int GLAD_GL_SGIX_fragment_lighting; +#define GL_SGIX_framezoom 1 +GLAD_API_CALL int GLAD_GL_SGIX_framezoom; +#define GL_SGIX_igloo_interface 1 +GLAD_API_CALL int GLAD_GL_SGIX_igloo_interface; +#define GL_SGIX_instruments 1 +GLAD_API_CALL int GLAD_GL_SGIX_instruments; +#define GL_SGIX_interlace 1 +GLAD_API_CALL int GLAD_GL_SGIX_interlace; +#define GL_SGIX_ir_instrument1 1 +GLAD_API_CALL int GLAD_GL_SGIX_ir_instrument1; +#define GL_SGIX_list_priority 1 +GLAD_API_CALL int GLAD_GL_SGIX_list_priority; +#define GL_SGIX_pixel_texture 1 +GLAD_API_CALL int GLAD_GL_SGIX_pixel_texture; +#define GL_SGIX_pixel_tiles 1 +GLAD_API_CALL int GLAD_GL_SGIX_pixel_tiles; +#define GL_SGIX_polynomial_ffd 1 +GLAD_API_CALL int GLAD_GL_SGIX_polynomial_ffd; +#define GL_SGIX_reference_plane 1 +GLAD_API_CALL int GLAD_GL_SGIX_reference_plane; +#define GL_SGIX_resample 1 +GLAD_API_CALL int GLAD_GL_SGIX_resample; +#define GL_SGIX_scalebias_hint 1 +GLAD_API_CALL int GLAD_GL_SGIX_scalebias_hint; +#define GL_SGIX_shadow 1 +GLAD_API_CALL int GLAD_GL_SGIX_shadow; +#define GL_SGIX_shadow_ambient 1 +GLAD_API_CALL int GLAD_GL_SGIX_shadow_ambient; +#define GL_SGIX_sprite 1 +GLAD_API_CALL int GLAD_GL_SGIX_sprite; +#define GL_SGIX_subsample 1 +GLAD_API_CALL int GLAD_GL_SGIX_subsample; +#define GL_SGIX_tag_sample_buffer 1 +GLAD_API_CALL int GLAD_GL_SGIX_tag_sample_buffer; +#define GL_SGIX_texture_add_env 1 +GLAD_API_CALL int GLAD_GL_SGIX_texture_add_env; +#define GL_SGIX_texture_coordinate_clamp 1 +GLAD_API_CALL int GLAD_GL_SGIX_texture_coordinate_clamp; +#define GL_SGIX_texture_lod_bias 1 +GLAD_API_CALL int GLAD_GL_SGIX_texture_lod_bias; +#define GL_SGIX_texture_multi_buffer 1 +GLAD_API_CALL int GLAD_GL_SGIX_texture_multi_buffer; +#define GL_SGIX_texture_scale_bias 1 +GLAD_API_CALL int GLAD_GL_SGIX_texture_scale_bias; +#define GL_SGIX_vertex_preclip 1 +GLAD_API_CALL int GLAD_GL_SGIX_vertex_preclip; +#define GL_SGIX_ycrcb 1 +GLAD_API_CALL int GLAD_GL_SGIX_ycrcb; +#define GL_SGIX_ycrcb_subsample 1 +GLAD_API_CALL int GLAD_GL_SGIX_ycrcb_subsample; +#define GL_SGIX_ycrcba 1 +GLAD_API_CALL int GLAD_GL_SGIX_ycrcba; +#define GL_SGI_color_matrix 1 +GLAD_API_CALL int GLAD_GL_SGI_color_matrix; +#define GL_SGI_color_table 1 +GLAD_API_CALL int GLAD_GL_SGI_color_table; +#define GL_SGI_texture_color_table 1 +GLAD_API_CALL int GLAD_GL_SGI_texture_color_table; +#define GL_SUNX_constant_data 1 +GLAD_API_CALL int GLAD_GL_SUNX_constant_data; +#define GL_SUN_convolution_border_modes 1 +GLAD_API_CALL int GLAD_GL_SUN_convolution_border_modes; +#define GL_SUN_global_alpha 1 +GLAD_API_CALL int GLAD_GL_SUN_global_alpha; +#define GL_SUN_mesh_array 1 +GLAD_API_CALL int GLAD_GL_SUN_mesh_array; +#define GL_SUN_slice_accum 1 +GLAD_API_CALL int GLAD_GL_SUN_slice_accum; +#define GL_SUN_triangle_list 1 +GLAD_API_CALL int GLAD_GL_SUN_triangle_list; +#define GL_SUN_vertex 1 +GLAD_API_CALL int GLAD_GL_SUN_vertex; +#define GL_WIN_phong_shading 1 +GLAD_API_CALL int GLAD_GL_WIN_phong_shading; +#define GL_WIN_specular_fog 1 +GLAD_API_CALL int GLAD_GL_WIN_specular_fog; + + +typedef void (GLAD_API_PTR *PFNGLACCUMXOESPROC)(GLenum op, GLfixed value); +typedef GLboolean (GLAD_API_PTR *PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC)(GLuint memory, GLuint64 key, GLuint timeout); +typedef void (GLAD_API_PTR *PFNGLACTIVEPROGRAMEXTPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); +typedef void (GLAD_API_PTR *PFNGLACTIVESTENCILFACEEXTPROC)(GLenum face); +typedef void (GLAD_API_PTR *PFNGLACTIVETEXTUREPROC)(GLenum texture); +typedef void (GLAD_API_PTR *PFNGLACTIVETEXTUREARBPROC)(GLenum texture); +typedef void (GLAD_API_PTR *PFNGLACTIVEVARYINGNVPROC)(GLuint program, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAD_API_PTR *PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAD_API_PTR *PFNGLALPHAFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAD_API_PTR *PFNGLALPHAFUNCXOESPROC)(GLenum func, GLfixed ref); +typedef void (GLAD_API_PTR *PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC)(void); +typedef void (GLAD_API_PTR *PFNGLAPPLYTEXTUREEXTPROC)(GLenum mode); +typedef GLboolean (GLAD_API_PTR *PFNGLAREPROGRAMSRESIDENTNVPROC)(GLsizei n, const GLuint * programs, GLboolean * residences); +typedef GLboolean (GLAD_API_PTR *PFNGLARETEXTURESRESIDENTEXTPROC)(GLsizei n, const GLuint * textures, GLboolean * residences); +typedef void (GLAD_API_PTR *PFNGLARRAYELEMENTEXTPROC)(GLint i); +typedef void (GLAD_API_PTR *PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef GLuint (GLAD_API_PTR *PFNGLASYNCCOPYBUFFERSUBDATANVXPROC)(GLsizei waitSemaphoreCount, const GLuint * waitSemaphoreArray, const GLuint64 * fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint * signalSemaphoreArray, const GLuint64 * signalValueArray); +typedef GLuint (GLAD_API_PTR *PFNGLASYNCCOPYIMAGESUBDATANVXPROC)(GLsizei waitSemaphoreCount, const GLuint * waitSemaphoreArray, const GLuint64 * waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint * signalSemaphoreArray, const GLuint64 * signalValueArray); +typedef void (GLAD_API_PTR *PFNGLASYNCMARKERSGIXPROC)(GLuint marker); +typedef void (GLAD_API_PTR *PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj); +typedef void (GLAD_API_PTR *PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERNVPROC)(GLuint id, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERNVXPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLBEGINFRAGMENTSHADERATIPROC)(void); +typedef void (GLAD_API_PTR *PFNGLBEGINOCCLUSIONQUERYNVPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLBEGINPERFMONITORAMDPROC)(GLuint monitor); +typedef void (GLAD_API_PTR *PFNGLBEGINPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAD_API_PTR *PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +typedef void (GLAD_API_PTR *PFNGLBEGINQUERYARBPROC)(GLenum target, GLuint id); +typedef void (GLAD_API_PTR *PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); +typedef void (GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +typedef void (GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)(GLenum primitiveMode); +typedef void (GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKNVPROC)(GLenum primitiveMode); +typedef void (GLAD_API_PTR *PFNGLBEGINVERTEXSHADEREXTPROC)(void); +typedef void (GLAD_API_PTR *PFNGLBEGINVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void (GLAD_API_PTR *PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, const GLcharARB * name); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERBASEEXTPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERBASENVPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFEROFFSETEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFEROFFSETNVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERRANGEEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERRANGENVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERSBASEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERSRANGEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes); +typedef void (GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAD_API_PTR *PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAD_API_PTR *PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (GLAD_API_PTR *PFNGLBINDIMAGETEXTUREEXTPROC)(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (GLAD_API_PTR *PFNGLBINDIMAGETEXTURESPROC)(GLuint first, GLsizei count, const GLuint * textures); +typedef GLuint (GLAD_API_PTR *PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); +typedef GLuint (GLAD_API_PTR *PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); +typedef void (GLAD_API_PTR *PFNGLBINDMULTITEXTUREEXTPROC)(GLenum texunit, GLenum target, GLuint texture); +typedef GLuint (GLAD_API_PTR *PFNGLBINDPARAMETEREXTPROC)(GLenum value); +typedef void (GLAD_API_PTR *PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); +typedef void (GLAD_API_PTR *PFNGLBINDPROGRAMNVPROC)(GLenum target, GLuint id); +typedef void (GLAD_API_PTR *PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void (GLAD_API_PTR *PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); +typedef void (GLAD_API_PTR *PFNGLBINDSAMPLERSPROC)(GLuint first, GLsizei count, const GLuint * samplers); +typedef void (GLAD_API_PTR *PFNGLBINDSHADINGRATEIMAGENVPROC)(GLuint texture); +typedef GLuint (GLAD_API_PTR *PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, GLenum value); +typedef void (GLAD_API_PTR *PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +typedef void (GLAD_API_PTR *PFNGLBINDTEXTUREEXTPROC)(GLenum target, GLuint texture); +typedef void (GLAD_API_PTR *PFNGLBINDTEXTUREUNITPROC)(GLuint unit, GLuint texture); +typedef GLuint (GLAD_API_PTR *PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); +typedef void (GLAD_API_PTR *PFNGLBINDTEXTURESPROC)(GLuint first, GLsizei count, const GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); +typedef void (GLAD_API_PTR *PFNGLBINDTRANSFORMFEEDBACKNVPROC)(GLenum target, GLuint id); +typedef void (GLAD_API_PTR *PFNGLBINDVERTEXARRAYPROC)(GLuint array); +typedef void (GLAD_API_PTR *PFNGLBINDVERTEXARRAYAPPLEPROC)(GLuint array); +typedef void (GLAD_API_PTR *PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLBINDVERTEXBUFFERSPROC)(GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); +typedef void (GLAD_API_PTR *PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (GLAD_API_PTR *PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3BEXTPROC)(GLbyte bx, GLbyte by, GLbyte bz); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3BVEXTPROC)(const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3DEXTPROC)(GLdouble bx, GLdouble by, GLdouble bz); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3DVEXTPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3FEXTPROC)(GLfloat bx, GLfloat by, GLfloat bz); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3FVEXTPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3IEXTPROC)(GLint bx, GLint by, GLint bz); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3IVEXTPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3SEXTPROC)(GLshort bx, GLshort by, GLshort bz); +typedef void (GLAD_API_PTR *PFNGLBINORMAL3SVEXTPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLBINORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLBITMAPXOESPROC)(GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap); +typedef void (GLAD_API_PTR *PFNGLBLENDBARRIERKHRPROC)(void); +typedef void (GLAD_API_PTR *PFNGLBLENDBARRIERNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAD_API_PTR *PFNGLBLENDCOLOREXTPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAD_API_PTR *PFNGLBLENDCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONEXTPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONINDEXEDAMDPROC)(GLuint buf, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCINDEXEDAMDPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEINGRPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAD_API_PTR *PFNGLBLENDPARAMETERINVPROC)(GLenum pname, GLint value); +typedef void (GLAD_API_PTR *PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAD_API_PTR *PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAD_API_PTR *PFNGLBLITNAMEDFRAMEBUFFERPROC)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAD_API_PTR *PFNGLBUFFERADDRESSRANGENVPROC)(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (GLAD_API_PTR *PFNGLBUFFERATTACHMEMORYNVPROC)(GLenum target, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAD_API_PTR *PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, const void * data, GLenum usage); +typedef void (GLAD_API_PTR *PFNGLBUFFERPAGECOMMITMENTARBPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLBUFFERPAGECOMMITMENTMEMNVPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLBUFFERPARAMETERIAPPLEPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLBUFFERSTORAGEEXTERNALEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLBUFFERSTORAGEMEMEXTPROC)(GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAD_API_PTR *PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void * data); +typedef void (GLAD_API_PTR *PFNGLCALLCOMMANDLISTNVPROC)(GLuint list); +typedef GLenum (GLAD_API_PTR *PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +typedef GLenum (GLAD_API_PTR *PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); +typedef GLenum (GLAD_API_PTR *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)(GLuint framebuffer, GLenum target); +typedef GLenum (GLAD_API_PTR *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)(GLuint framebuffer, GLenum target); +typedef void (GLAD_API_PTR *PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +typedef void (GLAD_API_PTR *PFNGLCLAMPCOLORARBPROC)(GLenum target, GLenum clamp); +typedef void (GLAD_API_PTR *PFNGLCLEARPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLCLEARACCUMXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAD_API_PTR *PFNGLCLEARCOLORIIEXTPROC)(GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAD_API_PTR *PFNGLCLEARCOLORIUIEXTPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAD_API_PTR *PFNGLCLEARCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAD_API_PTR *PFNGLCLEARDEPTHPROC)(GLdouble depth); +typedef void (GLAD_API_PTR *PFNGLCLEARDEPTHDNVPROC)(GLdouble depth); +typedef void (GLAD_API_PTR *PFNGLCLEARDEPTHFPROC)(GLfloat d); +typedef void (GLAD_API_PTR *PFNGLCLEARDEPTHFOESPROC)(GLclampf depth); +typedef void (GLAD_API_PTR *PFNGLCLEARDEPTHXOESPROC)(GLfixed depth); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERDATAPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLCLEARSTENCILPROC)(GLint s); +typedef void (GLAD_API_PTR *PFNGLCLEARTEXIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture); +typedef void (GLAD_API_PTR *PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)(GLenum stream); +typedef void (GLAD_API_PTR *PFNGLCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC)(GLsizei fenceObjectCount, const GLuint * semaphoreArray, const GLuint64 * fenceValueArray); +typedef GLenum (GLAD_API_PTR *PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAD_API_PTR *PFNGLCLIPCONTROLPROC)(GLenum origin, GLenum depth); +typedef void (GLAD_API_PTR *PFNGLCLIPPLANEFOESPROC)(GLenum plane, const GLfloat * equation); +typedef void (GLAD_API_PTR *PFNGLCLIPPLANEXOESPROC)(GLenum plane, const GLfixed * equation); +typedef void (GLAD_API_PTR *PFNGLCOLOR3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3XOESPROC)(GLfixed red, GLfixed green, GLfixed blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3XVOESPROC)(const GLfixed * components); +typedef void (GLAD_API_PTR *PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UBVERTEX2FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UBVERTEX2FVSUNPROC)(const GLubyte * c, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UBVERTEX3FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UBVERTEX3FVSUNPROC)(const GLubyte * c, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4XOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4XVOESPROC)(const GLfixed * components); +typedef void (GLAD_API_PTR *PFNGLCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAD_API_PTR *PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAD_API_PTR *PFNGLCOLORFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAD_API_PTR *PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAD_API_PTR *PFNGLCOLORMASKINDEXEDEXTPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAD_API_PTR *PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAD_API_PTR *PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLCOLORPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAD_API_PTR *PFNGLCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAD_API_PTR *PFNGLCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAD_API_PTR *PFNGLCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAD_API_PTR *PFNGLCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (GLAD_API_PTR *PFNGLCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLCOMMANDLISTSEGMENTSNVPROC)(GLuint list, GLuint segments); +typedef void (GLAD_API_PTR *PFNGLCOMPILECOMMANDLISTNVPROC)(GLuint list); +typedef void (GLAD_API_PTR *PFNGLCOMPILESHADERPROC)(GLuint shader); +typedef void (GLAD_API_PTR *PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj); +typedef void (GLAD_API_PTR *PFNGLCOMPILESHADERINCLUDEARBPROC)(GLuint shader, GLsizei count, const GLchar *const* path, const GLint * length); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAD_API_PTR *PFNGLCONSERVATIVERASTERPARAMETERFNVPROC)(GLenum pname, GLfloat value); +typedef void (GLAD_API_PTR *PFNGLCONSERVATIVERASTERPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat params); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint params); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLCOPYCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAD_API_PTR *PFNGLCOPYIMAGESUBDATANVPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAD_API_PTR *PFNGLCOPYMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYNAMEDBUFFERSUBDATAPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLCOPYPATHNVPROC)(GLuint resultPath, GLuint srcPath); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE1DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE2DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAD_API_PTR *PFNGLCOVERFILLPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void (GLAD_API_PTR *PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAD_API_PTR *PFNGLCOVERSTROKEPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void (GLAD_API_PTR *PFNGLCOVERAGEMODULATIONNVPROC)(GLenum components); +typedef void (GLAD_API_PTR *PFNGLCOVERAGEMODULATIONTABLENVPROC)(GLsizei n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLCREATECOMMANDLISTSNVPROC)(GLsizei n, GLuint * lists); +typedef void (GLAD_API_PTR *PFNGLCREATEFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAD_API_PTR *PFNGLCREATEMEMORYOBJECTSEXTPROC)(GLsizei n, GLuint * memoryObjects); +typedef void (GLAD_API_PTR *PFNGLCREATEPERFQUERYINTELPROC)(GLuint queryId, GLuint * queryHandle); +typedef GLuint (GLAD_API_PTR *PFNGLCREATEPROGRAMPROC)(void); +typedef GLhandleARB (GLAD_API_PTR *PFNGLCREATEPROGRAMOBJECTARBPROC)(void); +typedef void (GLAD_API_PTR *PFNGLCREATEPROGRAMPIPELINESPROC)(GLsizei n, GLuint * pipelines); +typedef GLuint (GLAD_API_PTR *PFNGLCREATEPROGRESSFENCENVXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLCREATEQUERIESPROC)(GLenum target, GLsizei n, GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLCREATERENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAD_API_PTR *PFNGLCREATESAMPLERSPROC)(GLsizei n, GLuint * samplers); +typedef void (GLAD_API_PTR *PFNGLCREATESEMAPHORESNVPROC)(GLsizei n, GLuint * semaphores); +typedef GLuint (GLAD_API_PTR *PFNGLCREATESHADERPROC)(GLenum type); +typedef GLhandleARB (GLAD_API_PTR *PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType); +typedef GLuint (GLAD_API_PTR *PFNGLCREATESHADERPROGRAMEXTPROC)(GLenum type, const GLchar * string); +typedef GLuint (GLAD_API_PTR *PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const* strings); +typedef void (GLAD_API_PTR *PFNGLCREATESTATESNVPROC)(GLsizei n, GLuint * states); +typedef GLsync (GLAD_API_PTR *PFNGLCREATESYNCFROMCLEVENTARBPROC)(struct _cl_context * context, struct _cl_event * event, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLCREATETEXTURESPROC)(GLenum target, GLsizei n, GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLCREATETRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLCREATEVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAD_API_PTR *PFNGLCULLFACEPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLCULLPARAMETERDVEXTPROC)(GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLCULLPARAMETERFVEXTPROC)(GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLCURRENTPALETTEMATRIXARBPROC)(GLint index); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void * userParam); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, void * userParam); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, const void * userParam); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf); +typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAD_API_PTR *PFNGLDEFORMSGIXPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLDEFORMATIONMAP3DSGIXPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points); +typedef void (GLAD_API_PTR *PFNGLDEFORMATIONMAP3FSGIXPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLDELETEASYNCMARKERSSGIXPROC)(GLuint marker, GLsizei range); +typedef void (GLAD_API_PTR *PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLDELETECOMMANDLISTSNVPROC)(GLsizei n, const GLuint * lists); +typedef void (GLAD_API_PTR *PFNGLDELETEFENCESAPPLEPROC)(GLsizei n, const GLuint * fences); +typedef void (GLAD_API_PTR *PFNGLDELETEFENCESNVPROC)(GLsizei n, const GLuint * fences); +typedef void (GLAD_API_PTR *PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAD_API_PTR *PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAD_API_PTR *PFNGLDELETEMEMORYOBJECTSEXTPROC)(GLsizei n, const GLuint * memoryObjects); +typedef void (GLAD_API_PTR *PFNGLDELETENAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLDELETENAMESAMDPROC)(GLenum identifier, GLuint num, const GLuint * names); +typedef void (GLAD_API_PTR *PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj); +typedef void (GLAD_API_PTR *PFNGLDELETEOCCLUSIONQUERIESNVPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLDELETEPATHSNVPROC)(GLuint path, GLsizei range); +typedef void (GLAD_API_PTR *PFNGLDELETEPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); +typedef void (GLAD_API_PTR *PFNGLDELETEPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAD_API_PTR *PFNGLDELETEPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint * pipelines); +typedef void (GLAD_API_PTR *PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAD_API_PTR *PFNGLDELETEPROGRAMSNVPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAD_API_PTR *PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLDELETEQUERIESARBPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLDELETEQUERYRESOURCETAGNVPROC)(GLsizei n, const GLint * tagIds); +typedef void (GLAD_API_PTR *PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAD_API_PTR *PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAD_API_PTR *PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint * samplers); +typedef void (GLAD_API_PTR *PFNGLDELETESEMAPHORESEXTPROC)(GLsizei n, const GLuint * semaphores); +typedef void (GLAD_API_PTR *PFNGLDELETESHADERPROC)(GLuint shader); +typedef void (GLAD_API_PTR *PFNGLDELETESTATESNVPROC)(GLsizei n, const GLuint * states); +typedef void (GLAD_API_PTR *PFNGLDELETESYNCPROC)(GLsync sync); +typedef void (GLAD_API_PTR *PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLDELETETEXTURESEXTPROC)(GLsizei n, const GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLDELETETRANSFORMFEEDBACKSNVPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAD_API_PTR *PFNGLDELETEVERTEXARRAYSAPPLEPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAD_API_PTR *PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLDEPTHBOUNDSEXTPROC)(GLclampd zmin, GLclampd zmax); +typedef void (GLAD_API_PTR *PFNGLDEPTHBOUNDSDNVPROC)(GLdouble zmin, GLdouble zmax); +typedef void (GLAD_API_PTR *PFNGLDEPTHFUNCPROC)(GLenum func); +typedef void (GLAD_API_PTR *PFNGLDEPTHMASKPROC)(GLboolean flag); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEARRAYDVNVPROC)(GLuint first, GLsizei count, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEINDEXEDDNVPROC)(GLuint index, GLdouble n, GLdouble f); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEDNVPROC)(GLdouble zNear, GLdouble zFar); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEFOESPROC)(GLclampf n, GLclampf f); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEXOESPROC)(GLfixed n, GLfixed f); +typedef void (GLAD_API_PTR *PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj); +typedef void (GLAD_API_PTR *PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAD_API_PTR *PFNGLDETAILTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLDISABLEPROC)(GLenum cap); +typedef void (GLAD_API_PTR *PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (GLAD_API_PTR *PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +typedef void (GLAD_API_PTR *PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDARBPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDEXTPROC)(GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERPROC)(GLenum buf); +typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERSATIPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAD_API_PTR *PFNGLDRAWCOMMANDSADDRESSNVPROC)(GLenum primitiveMode, const GLuint64 * indirects, const GLsizei * sizes, GLuint count); +typedef void (GLAD_API_PTR *PFNGLDRAWCOMMANDSNVPROC)(GLenum primitiveMode, GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, GLuint count); +typedef void (GLAD_API_PTR *PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)(const GLuint64 * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAD_API_PTR *PFNGLDRAWCOMMANDSSTATESNVPROC)(GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDARBPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLDRAWMESHARRAYSSUNPROC)(GLenum mode, GLint first, GLsizei count, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLDRAWMESHTASKSINDIRECTNVPROC)(GLintptr indirect); +typedef void (GLAD_API_PTR *PFNGLDRAWMESHTASKSNVPROC)(GLuint first, GLuint count); +typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); +typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); +typedef void (GLAD_API_PTR *PFNGLDRAWTEXTURENVPROC)(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef void (GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); +typedef void (GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, GLsizei instancecount); +typedef void (GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKNVPROC)(GLenum mode, GLuint id); +typedef void (GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream); +typedef void (GLAD_API_PTR *PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +typedef void (GLAD_API_PTR *PFNGLDRAWVKIMAGENVPROC)(GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef void (GLAD_API_PTR *PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC)(GLenum target, GLeglImageOES image, const GLint * attrib_list); +typedef void (GLAD_API_PTR *PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC)(GLuint texture, GLeglImageOES image, const GLint * attrib_list); +typedef void (GLAD_API_PTR *PFNGLEDGEFLAGFORMATNVPROC)(GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, const GLboolean * pointer); +typedef void (GLAD_API_PTR *PFNGLEDGEFLAGPOINTERLISTIBMPROC)(GLint stride, const GLboolean ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLELEMENTPOINTERAPPLEPROC)(GLenum type, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLENABLEPROC)(GLenum cap); +typedef void (GLAD_API_PTR *PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENDCONDITIONALRENDERPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDCONDITIONALRENDERNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDCONDITIONALRENDERNVXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDFRAGMENTSHADERATIPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDOCCLUSIONQUERYNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDPERFMONITORAMDPROC)(GLuint monitor); +typedef void (GLAD_API_PTR *PFNGLENDPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAD_API_PTR *PFNGLENDQUERYPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLENDQUERYARBPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKEXTPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDVERTEXSHADEREXTPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD1XOESPROC)(GLfixed u); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD1XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD2XOESPROC)(GLfixed u, GLfixed v); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD2XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLEVALMAPSNVPROC)(GLenum target, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLEVALUATEDEPTHVALUESARBPROC)(void); +typedef void (GLAD_API_PTR *PFNGLEXECUTEPROGRAMNVPROC)(GLenum target, GLuint id, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void (GLAD_API_PTR *PFNGLFEEDBACKBUFFERXOESPROC)(GLsizei n, GLenum type, const GLfixed * buffer); +typedef GLsync (GLAD_API_PTR *PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAD_API_PTR *PFNGLFINISHPROC)(void); +typedef GLint (GLAD_API_PTR *PFNGLFINISHASYNCSGIXPROC)(GLuint * markerp); +typedef void (GLAD_API_PTR *PFNGLFINISHFENCEAPPLEPROC)(GLuint fence); +typedef void (GLAD_API_PTR *PFNGLFINISHFENCENVPROC)(GLuint fence); +typedef void (GLAD_API_PTR *PFNGLFINISHOBJECTAPPLEPROC)(GLenum object, GLint name); +typedef void (GLAD_API_PTR *PFNGLFINISHTEXTURESUNXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFLUSHPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (GLAD_API_PTR *PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)(GLenum target, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAD_API_PTR *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAD_API_PTR *PFNGLFLUSHPIXELDATARANGENVPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLFLUSHRASTERSGIXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFLUSHSTATICDATAIBMPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); +typedef void (GLAD_API_PTR *PFNGLFLUSHVERTEXARRAYRANGENVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDDEXTPROC)(GLdouble coord); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDDVEXTPROC)(const GLdouble * coord); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDFEXTPROC)(GLfloat coord); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDFVEXTPROC)(const GLfloat * coord); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDHNVPROC)(GLhalfNV fog); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDHVNVPROC)(const GLhalfNV * fog); +typedef void (GLAD_API_PTR *PFNGLFOGFUNCSGISPROC)(GLsizei n, const GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLFOGXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLFOGXVOESPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTCOLORMATERIALSGIXPROC)(GLenum face, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTCOVERAGECOLORNVPROC)(GLuint color); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELFSGIXPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTFSGIXPROC)(GLenum light, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTISGIXPROC)(GLenum light, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTMATERIALFSGIXPROC)(GLenum face, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTMATERIALISGIXPROC)(GLenum face, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLFRAMETERMINATORGREMEDYPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFRAMEZOOMSGIXPROC)(GLint factor); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)(GLuint framebuffer, GLsizei n, const GLenum * bufs); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERPARAMETERIMESAPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERREADBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)(GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +typedef void (GLAD_API_PTR *PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLFRONTFACEPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLFRUSTUMFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAD_API_PTR *PFNGLFRUSTUMXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef GLuint (GLAD_API_PTR *PFNGLGENASYNCMARKERSSGIXPROC)(GLsizei range); +typedef void (GLAD_API_PTR *PFNGLGENBUFFERSPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLGENFENCESAPPLEPROC)(GLsizei n, GLuint * fences); +typedef void (GLAD_API_PTR *PFNGLGENFENCESNVPROC)(GLsizei n, GLuint * fences); +typedef GLuint (GLAD_API_PTR *PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); +typedef void (GLAD_API_PTR *PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAD_API_PTR *PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAD_API_PTR *PFNGLGENNAMESAMDPROC)(GLenum identifier, GLuint num, GLuint * names); +typedef void (GLAD_API_PTR *PFNGLGENOCCLUSIONQUERIESNVPROC)(GLsizei n, GLuint * ids); +typedef GLuint (GLAD_API_PTR *PFNGLGENPATHSNVPROC)(GLsizei range); +typedef void (GLAD_API_PTR *PFNGLGENPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); +typedef void (GLAD_API_PTR *PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint * pipelines); +typedef void (GLAD_API_PTR *PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint * programs); +typedef void (GLAD_API_PTR *PFNGLGENPROGRAMSNVPROC)(GLsizei n, GLuint * programs); +typedef void (GLAD_API_PTR *PFNGLGENQUERIESPROC)(GLsizei n, GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLGENQUERIESARBPROC)(GLsizei n, GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLGENQUERYRESOURCETAGNVPROC)(GLsizei n, GLint * tagIds); +typedef void (GLAD_API_PTR *PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAD_API_PTR *PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAD_API_PTR *PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint * samplers); +typedef void (GLAD_API_PTR *PFNGLGENSEMAPHORESEXTPROC)(GLsizei n, GLuint * semaphores); +typedef GLuint (GLAD_API_PTR *PFNGLGENSYMBOLSEXTPROC)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (GLAD_API_PTR *PFNGLGENTEXTURESPROC)(GLsizei n, GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLGENTEXTURESEXTPROC)(GLsizei n, GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLGENTRANSFORMFEEDBACKSNVPROC)(GLsizei n, GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAD_API_PTR *PFNGLGENVERTEXARRAYSAPPLEPROC)(GLsizei n, GLuint * arrays); +typedef GLuint (GLAD_API_PTR *PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); +typedef void (GLAD_API_PTR *PFNGLGENERATEMIPMAPPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLGENERATEMULTITEXMIPMAPEXTPROC)(GLenum texunit, GLenum target); +typedef void (GLAD_API_PTR *PFNGLGENERATETEXTUREMIPMAPPROC)(GLuint texture); +typedef void (GLAD_API_PTR *PFNGLGENERATETEXTUREMIPMAPEXTPROC)(GLuint texture, GLenum target); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); +typedef void (GLAD_API_PTR *PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEVARYINGNVPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); +typedef void (GLAD_API_PTR *PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); +typedef GLint (GLAD_API_PTR *PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); +typedef void (GLAD_API_PTR *PFNGLGETBOOLEANINDEXEDVEXTPROC)(GLenum target, GLuint index, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPARAMETERUI64VNVPROC)(GLenum target, GLenum pname, GLuint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); +typedef void (GLAD_API_PTR *PFNGLGETCLIPPLANEFOESPROC)(GLenum plane, GLfloat * equation); +typedef void (GLAD_API_PTR *PFNGLGETCLIPPLANEXOESPROC)(GLenum plane, GLfixed * equation); +typedef void (GLAD_API_PTR *PFNGLGETCOLORTABLEEXTPROC)(GLenum target, GLenum format, GLenum type, void * data); +typedef void (GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETCOLORTABLESGIPROC)(GLenum target, GLenum format, GLenum type, void * table); +typedef void (GLAD_API_PTR *PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat * params); +typedef GLuint (GLAD_API_PTR *PFNGLGETCOMMANDHEADERNVPROC)(GLenum tokenID, GLuint size); +typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint lod, void * img); +typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void * img); +typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint level, void * img); +typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLsizei bufSize, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint lod, void * img); +typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETCONVOLUTIONFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * image); +typedef void (GLAD_API_PTR *PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLGETCOVERAGEMODULATIONTABLENVPROC)(GLsizei bufSize, GLfloat * v); +typedef GLuint (GLAD_API_PTR *PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef GLuint (GLAD_API_PTR *PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufSize, GLenum * categories, GLenum * severities, GLuint * ids, GLsizei * lengths, GLchar * message); +typedef GLuint (GLAD_API_PTR *PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef void (GLAD_API_PTR *PFNGLGETDETAILTEXFUNCSGISPROC)(GLenum target, GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLGETDOUBLEINDEXEDVEXTPROC)(GLenum target, GLuint index, GLdouble * data); +typedef void (GLAD_API_PTR *PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble * data); +typedef void (GLAD_API_PTR *PFNGLGETDOUBLEI_VEXTPROC)(GLenum pname, GLuint index, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble * data); +typedef GLenum (GLAD_API_PTR *PFNGLGETERRORPROC)(void); +typedef void (GLAD_API_PTR *PFNGLGETFENCEIVNVPROC)(GLuint fence, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFIRSTPERFQUERYIDINTELPROC)(GLuint * queryId); +typedef void (GLAD_API_PTR *PFNGLGETFIXEDVOESPROC)(GLenum pname, GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLGETFLOATINDEXEDVEXTPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAD_API_PTR *PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAD_API_PTR *PFNGLGETFLOATI_VEXTPROC)(GLenum pname, GLuint index, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETFLOATVPROC)(GLenum pname, GLfloat * data); +typedef void (GLAD_API_PTR *PFNGLGETFOGFUNCSGISPROC)(GLfloat * points); +typedef GLint (GLAD_API_PTR *PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC)(GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC)(GLenum target, GLenum pname, GLint * params); +typedef GLenum (GLAD_API_PTR *PFNGLGETGRAPHICSRESETSTATUSPROC)(void); +typedef GLenum (GLAD_API_PTR *PFNGLGETGRAPHICSRESETSTATUSARBPROC)(void); +typedef GLhandleARB (GLAD_API_PTR *PFNGLGETHANDLEARBPROC)(GLenum pname); +typedef void (GLAD_API_PTR *PFNGLGETHISTOGRAMEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAD_API_PTR *PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETHISTOGRAMPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef GLuint64 (GLAD_API_PTR *PFNGLGETIMAGEHANDLEARBPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef GLuint64 (GLAD_API_PTR *PFNGLGETIMAGEHANDLENVPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (GLAD_API_PTR *PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETINFOLOGARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); +typedef GLint (GLAD_API_PTR *PFNGLGETINSTRUMENTSSGIXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 * data); +typedef void (GLAD_API_PTR *PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 * data); +typedef void (GLAD_API_PTR *PFNGLGETINTEGERINDEXEDVEXTPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETINTEGERUI64I_VNVPROC)(GLenum value, GLuint index, GLuint64EXT * result); +typedef void (GLAD_API_PTR *PFNGLGETINTEGERUI64VNVPROC)(GLenum value, GLuint64EXT * result); +typedef void (GLAD_API_PTR *PFNGLGETINTEGERVPROC)(GLenum pname, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETINTERNALFORMATSAMPLEIVNVPROC)(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAD_API_PTR *PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLGETLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAD_API_PTR *PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETMAPATTRIBPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMAPATTRIBPARAMETERIVNVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points); +typedef void (GLAD_API_PTR *PFNGLGETMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMAPXVOESPROC)(GLenum target, GLenum query, GLfixed * v); +typedef void (GLAD_API_PTR *PFNGLGETMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC)(GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC)(GLuint memoryObject, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMINMAXEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAD_API_PTR *PFNGLGETMINMAXPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMINMAXPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat * val); +typedef void (GLAD_API_PTR *PFNGLGETMULTISAMPLEFVNVPROC)(GLenum pname, GLuint index, GLfloat * val); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)(GLuint buffer, GLenum pname, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERIVPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)(GLuint buffer, GLenum pname, GLuint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERPOINTERVPROC)(GLuint buffer, GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)(GLuint buffer, GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC)(GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)(GLuint framebuffer, GLenum pname, GLint * param); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum pname, void * string); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDPROGRAMIVEXTPROC)(GLuint program, GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)(GLuint renderbuffer, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)(GLuint renderbuffer, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string); +typedef void (GLAD_API_PTR *PFNGLGETNAMEDSTRINGIVARBPROC)(GLint namelen, const GLchar * name, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNEXTPERFQUERYIDINTELPROC)(GLuint queryId, GLuint * nextQueryId); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTLABELEXTPROC)(GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTPARAMETERIVAPPLEPROC)(GLenum objectType, GLuint name, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETOBJECTPTRLABELPROC)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAD_API_PTR *PFNGLGETOCCLUSIONQUERYIVNVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETOCCLUSIONQUERYUIVNVPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETPATHCOMMANDSNVPROC)(GLuint path, GLubyte * commands); +typedef void (GLAD_API_PTR *PFNGLGETPATHCOORDSNVPROC)(GLuint path, GLfloat * coords); +typedef void (GLAD_API_PTR *PFNGLGETPATHDASHARRAYNVPROC)(GLuint path, GLfloat * dashArray); +typedef GLfloat (GLAD_API_PTR *PFNGLGETPATHLENGTHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef void (GLAD_API_PTR *PFNGLGETPATHMETRICRANGENVPROC)(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics); +typedef void (GLAD_API_PTR *PFNGLGETPATHMETRICSNVPROC)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics); +typedef void (GLAD_API_PTR *PFNGLGETPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLGETPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, GLint * value); +typedef void (GLAD_API_PTR *PFNGLGETPATHSPACINGNVPROC)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing); +typedef void (GLAD_API_PTR *PFNGLGETPERFCOUNTERINFOINTELPROC)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue); +typedef void (GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); +typedef void (GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)(GLuint group, GLuint counter, GLenum pname, void * data); +typedef void (GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); +typedef void (GLAD_API_PTR *PFNGLGETPERFMONITORCOUNTERSAMDPROC)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters); +typedef void (GLAD_API_PTR *PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); +typedef void (GLAD_API_PTR *PFNGLGETPERFMONITORGROUPSAMDPROC)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); +typedef void (GLAD_API_PTR *PFNGLGETPERFQUERYDATAINTELPROC)(GLuint queryHandle, GLuint flags, GLsizei dataSize, void * data, GLuint * bytesWritten); +typedef void (GLAD_API_PTR *PFNGLGETPERFQUERYIDBYNAMEINTELPROC)(GLchar * queryName, GLuint * queryId); +typedef void (GLAD_API_PTR *PFNGLGETPERFQUERYINFOINTELPROC)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask); +typedef void (GLAD_API_PTR *PFNGLGETPIXELMAPXVPROC)(GLenum map, GLint size, GLfixed * values); +typedef void (GLAD_API_PTR *PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPOINTERINDEXEDVEXTPROC)(GLenum target, GLuint index, void ** data); +typedef void (GLAD_API_PTR *PFNGLGETPOINTERI_VEXTPROC)(GLenum pname, GLuint index, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETPOINTERVPROC)(GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETPOINTERVEXTPROC)(GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMPARAMETERDVNVPROC)(GLenum target, GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint * params); +typedef GLuint (GLAD_API_PTR *PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMRESOURCEFVNVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei count, GLsizei * length, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei count, GLsizei * length, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint * values); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void * string); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMSTRINGNVPROC)(GLuint id, GLenum pname, GLubyte * program); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC)(GLenum target, GLuint index, GLuint * param); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMIVNVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTUI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLGETQUERYBUFFEROBJECTUIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTI64VEXTPROC)(GLuint id, GLenum pname, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTIVARBPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTUI64VEXTPROC)(GLuint id, GLenum pname, GLuint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTUIVARBPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETSEMAPHOREPARAMETERIVNVPROC)(GLuint semaphore, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC)(GLuint semaphore, GLenum pname, GLuint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETSEPARABLEFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); +typedef void (GLAD_API_PTR *PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAD_API_PTR *PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); +typedef void (GLAD_API_PTR *PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); +typedef void (GLAD_API_PTR *PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); +typedef void (GLAD_API_PTR *PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETSHADINGRATEIMAGEPALETTENVPROC)(GLuint viewport, GLuint entry, GLenum * rate); +typedef void (GLAD_API_PTR *PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC)(GLenum rate, GLuint samples, GLuint index, GLint * location); +typedef void (GLAD_API_PTR *PFNGLGETSHARPENTEXFUNCSGISPROC)(GLenum target, GLfloat * points); +typedef GLushort (GLAD_API_PTR *PFNGLGETSTAGEINDEXNVPROC)(GLenum shadertype); +typedef const GLubyte * (GLAD_API_PTR *PFNGLGETSTRINGPROC)(GLenum name); +typedef const GLubyte * (GLAD_API_PTR *PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +typedef GLuint (GLAD_API_PTR *PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei * length, GLint * values); +typedef void (GLAD_API_PTR *PFNGLGETTEXBUMPPARAMETERFVATIPROC)(GLenum pname, GLfloat * param); +typedef void (GLAD_API_PTR *PFNGLGETTEXBUMPPARAMETERIVATIPROC)(GLenum pname, GLint * param); +typedef void (GLAD_API_PTR *PFNGLGETTEXENVXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLfloat * weights); +typedef void (GLAD_API_PTR *PFNGLGETTEXGENXVOESPROC)(GLenum coord, GLenum pname, GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERXVOESPROC)(GLenum target, GLint level, GLenum pname, GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef GLuint64 (GLAD_API_PTR *PFNGLGETTEXTUREHANDLEARBPROC)(GLuint texture); +typedef GLuint64 (GLAD_API_PTR *PFNGLGETTEXTUREHANDLENVPROC)(GLuint texture); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERFVPROC)(GLuint texture, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERIVPROC)(GLuint texture, GLint level, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); +typedef GLuint64 (GLAD_API_PTR *PFNGLGETTEXTURESAMPLERHANDLEARBPROC)(GLuint texture, GLuint sampler); +typedef GLuint64 (GLAD_API_PTR *PFNGLGETTEXTURESAMPLERHANDLENVPROC)(GLuint texture, GLuint sampler); +typedef void (GLAD_API_PTR *PFNGLGETTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETTRACKMATRIXIVNVPROC)(GLenum target, GLuint address, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)(GLuint program, GLuint index, GLint * location); +typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKI64_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint64 * param); +typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKI_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint * param); +typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKIVPROC)(GLuint xfb, GLenum pname, GLint * param); +typedef GLuint (GLAD_API_PTR *PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar * uniformBlockName); +typedef GLint (GLAD_API_PTR *PFNGLGETUNIFORMBUFFERSIZEEXTPROC)(GLuint program, GLint location); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices); +typedef GLint (GLAD_API_PTR *PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); +typedef GLintptr (GLAD_API_PTR *PFNGLGETUNIFORMOFFSETEXTPROC)(GLuint program, GLint location); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMI64VARBPROC)(GLuint program, GLint location, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMI64VNVPROC)(GLuint program, GLint location, GLint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLuint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLuint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETUNSIGNEDBYTEI_VEXTPROC)(GLenum target, GLuint index, GLubyte * data); +typedef void (GLAD_API_PTR *PFNGLGETUNSIGNEDBYTEVEXTPROC)(GLenum pname, GLubyte * data); +typedef void (GLAD_API_PTR *PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAD_API_PTR *PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, void ** data); +typedef GLint (GLAD_API_PTR *PFNGLGETVARYINGLOCATIONNVPROC)(GLuint program, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXARRAYINDEXED64IVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXARRAYINDEXEDIVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXARRAYINTEGERVEXTPROC)(GLuint vaobj, GLenum pname, GLint * param); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, void ** param); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXARRAYPOINTERVEXTPROC)(GLuint vaobj, GLenum pname, void ** param); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXARRAYIVPROC)(GLuint vaobj, GLenum pname, GLint * param); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBLDVEXTPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBLI64VNVPROC)(GLuint index, GLenum pname, GLint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBLUI64VARBPROC)(GLuint index, GLenum pname, GLuint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBLUI64VNVPROC)(GLuint index, GLenum pname, GLuint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVNVPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVNVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVNVPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVNVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOCAPTUREIVNVPROC)(GLuint video_capture_slot, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOI64VNVPROC)(GLuint video_slot, GLenum pname, GLint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOIVNVPROC)(GLuint video_slot, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOUI64VNVPROC)(GLuint video_slot, GLenum pname, GLuint64EXT * params); +typedef void (GLAD_API_PTR *PFNGLGETVIDEOUIVNVPROC)(GLuint video_slot, GLenum pname, GLuint * params); +typedef GLVULKANPROCNV (GLAD_API_PTR *PFNGLGETVKPROCADDRNVPROC)(const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, GLsizei bufSize, void * img); +typedef void (GLAD_API_PTR *PFNGLGETNTEXIMAGEARBPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMDVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMFVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint64 * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMUIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORBSUNPROC)(GLbyte factor); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORDSUNPROC)(GLdouble factor); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORFSUNPROC)(GLfloat factor); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORISUNPROC)(GLint factor); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORSSUNPROC)(GLshort factor); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORUBSUNPROC)(GLubyte factor); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORUISUNPROC)(GLuint factor); +typedef void (GLAD_API_PTR *PFNGLGLOBALALPHAFACTORUSSUNPROC)(GLushort factor); +typedef void (GLAD_API_PTR *PFNGLHINTPROC)(GLenum target, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLHINTPGIPROC)(GLenum target, GLint mode); +typedef void (GLAD_API_PTR *PFNGLHISTOGRAMEXTPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAD_API_PTR *PFNGLIGLOOINTERFACESGIXPROC)(GLenum pname, const void * params); +typedef void (GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERFHPPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERIHPPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLIMPORTMEMORYFDEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, GLint fd); +typedef void (GLAD_API_PTR *PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, void * handle); +typedef void (GLAD_API_PTR *PFNGLIMPORTMEMORYWIN32NAMEEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, const void * name); +typedef void (GLAD_API_PTR *PFNGLIMPORTSEMAPHOREFDEXTPROC)(GLuint semaphore, GLenum handleType, GLint fd); +typedef void (GLAD_API_PTR *PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC)(GLuint semaphore, GLenum handleType, void * handle); +typedef void (GLAD_API_PTR *PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC)(GLuint semaphore, GLenum handleType, const void * name); +typedef GLsync (GLAD_API_PTR *PFNGLIMPORTSYNCEXTPROC)(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLINDEXFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLINDEXFUNCEXTPROC)(GLenum func, GLclampf ref); +typedef void (GLAD_API_PTR *PFNGLINDEXMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLINDEXPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLINDEXXOESPROC)(GLfixed component); +typedef void (GLAD_API_PTR *PFNGLINDEXXVOESPROC)(const GLfixed * component); +typedef void (GLAD_API_PTR *PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void (GLAD_API_PTR *PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar * marker); +typedef void (GLAD_API_PTR *PFNGLINSTRUMENTSBUFFERSGIXPROC)(GLsizei size, GLint * buffer); +typedef void (GLAD_API_PTR *PFNGLINTERPOLATEPATHSNVPROC)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (GLAD_API_PTR *PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAD_API_PTR *PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAD_API_PTR *PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAD_API_PTR *PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef GLboolean (GLAD_API_PTR *PFNGLISASYNCMARKERSGIXPROC)(GLuint marker); +typedef GLboolean (GLAD_API_PTR *PFNGLISBUFFERPROC)(GLuint buffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISBUFFERARBPROC)(GLuint buffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISBUFFERRESIDENTNVPROC)(GLenum target); +typedef GLboolean (GLAD_API_PTR *PFNGLISCOMMANDLISTNVPROC)(GLuint list); +typedef GLboolean (GLAD_API_PTR *PFNGLISENABLEDPROC)(GLenum cap); +typedef GLboolean (GLAD_API_PTR *PFNGLISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAD_API_PTR *PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAD_API_PTR *PFNGLISFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean (GLAD_API_PTR *PFNGLISFENCENVPROC)(GLuint fence); +typedef GLboolean (GLAD_API_PTR *PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean (GLAD_API_PTR *PFNGLISIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean (GLAD_API_PTR *PFNGLISMEMORYOBJECTEXTPROC)(GLuint memoryObject); +typedef GLboolean (GLAD_API_PTR *PFNGLISNAMEAMDPROC)(GLenum identifier, GLuint name); +typedef GLboolean (GLAD_API_PTR *PFNGLISNAMEDBUFFERRESIDENTNVPROC)(GLuint buffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); +typedef GLboolean (GLAD_API_PTR *PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISOCCLUSIONQUERYNVPROC)(GLuint id); +typedef GLboolean (GLAD_API_PTR *PFNGLISPATHNVPROC)(GLuint path); +typedef GLboolean (GLAD_API_PTR *PFNGLISPOINTINFILLPATHNVPROC)(GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (GLAD_API_PTR *PFNGLISPOINTINSTROKEPATHNVPROC)(GLuint path, GLfloat x, GLfloat y); +typedef GLboolean (GLAD_API_PTR *PFNGLISPROGRAMPROC)(GLuint program); +typedef GLboolean (GLAD_API_PTR *PFNGLISPROGRAMARBPROC)(GLuint program); +typedef GLboolean (GLAD_API_PTR *PFNGLISPROGRAMNVPROC)(GLuint id); +typedef GLboolean (GLAD_API_PTR *PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef GLboolean (GLAD_API_PTR *PFNGLISQUERYPROC)(GLuint id); +typedef GLboolean (GLAD_API_PTR *PFNGLISQUERYARBPROC)(GLuint id); +typedef GLboolean (GLAD_API_PTR *PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISSAMPLERPROC)(GLuint sampler); +typedef GLboolean (GLAD_API_PTR *PFNGLISSEMAPHOREEXTPROC)(GLuint semaphore); +typedef GLboolean (GLAD_API_PTR *PFNGLISSHADERPROC)(GLuint shader); +typedef GLboolean (GLAD_API_PTR *PFNGLISSTATENVPROC)(GLuint state); +typedef GLboolean (GLAD_API_PTR *PFNGLISSYNCPROC)(GLsync sync); +typedef GLboolean (GLAD_API_PTR *PFNGLISTEXTUREPROC)(GLuint texture); +typedef GLboolean (GLAD_API_PTR *PFNGLISTEXTUREEXTPROC)(GLuint texture); +typedef GLboolean (GLAD_API_PTR *PFNGLISTEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean (GLAD_API_PTR *PFNGLISTEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean (GLAD_API_PTR *PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); +typedef GLboolean (GLAD_API_PTR *PFNGLISTRANSFORMFEEDBACKNVPROC)(GLuint id); +typedef GLboolean (GLAD_API_PTR *PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); +typedef GLboolean (GLAD_API_PTR *PFNGLISVERTEXARRAYPROC)(GLuint array); +typedef GLboolean (GLAD_API_PTR *PFNGLISVERTEXARRAYAPPLEPROC)(GLuint array); +typedef GLboolean (GLAD_API_PTR *PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAD_API_PTR *PFNGLLGPUCOPYIMAGESUBDATANVXPROC)(GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAD_API_PTR *PFNGLLGPUINTERLOCKNVXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC)(GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAD_API_PTR *PFNGLLABELOBJECTEXTPROC)(GLenum type, GLuint object, GLsizei length, const GLchar * label); +typedef void (GLAD_API_PTR *PFNGLLIGHTENVISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLLIGHTMODELXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLLIGHTMODELXVOESPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAD_API_PTR *PFNGLLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLLIGHTXVOESPROC)(GLenum light, GLenum pname, const GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLLINEWIDTHPROC)(GLfloat width); +typedef void (GLAD_API_PTR *PFNGLLINEWIDTHXOESPROC)(GLfixed width); +typedef void (GLAD_API_PTR *PFNGLLINKPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj); +typedef void (GLAD_API_PTR *PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)(GLuint list, GLuint segment, const void ** indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAD_API_PTR *PFNGLLISTPARAMETERFSGIXPROC)(GLuint list, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLLISTPARAMETERISGIXPROC)(GLuint list, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLLOADMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAD_API_PTR *PFNGLLOADPROGRAMNVPROC)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); +typedef void (GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXDARBPROC)(const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXFARBPROC)(const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAD_API_PTR *PFNGLLOCKARRAYSEXTPROC)(GLint first, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLLOGICOPPROC)(GLenum opcode); +typedef void (GLAD_API_PTR *PFNGLMAKEBUFFERNONRESIDENTNVPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLMAKEBUFFERRESIDENTNVPROC)(GLenum target, GLenum access); +typedef void (GLAD_API_PTR *PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAD_API_PTR *PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAD_API_PTR *PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle, GLenum access); +typedef void (GLAD_API_PTR *PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle, GLenum access); +typedef void (GLAD_API_PTR *PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)(GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)(GLuint buffer, GLenum access); +typedef void (GLAD_API_PTR *PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAD_API_PTR *PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAD_API_PTR *PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAD_API_PTR *PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAD_API_PTR *PFNGLMAP1XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (GLAD_API_PTR *PFNGLMAP2XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void * (GLAD_API_PTR *PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +typedef void * (GLAD_API_PTR *PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); +typedef void * (GLAD_API_PTR *PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GLAD_API_PTR *PFNGLMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points); +typedef void (GLAD_API_PTR *PFNGLMAPGRID1XOESPROC)(GLint n, GLfixed u1, GLfixed u2); +typedef void (GLAD_API_PTR *PFNGLMAPGRID2XOESPROC)(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void * (GLAD_API_PTR *PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access); +typedef void * (GLAD_API_PTR *PFNGLMAPNAMEDBUFFEREXTPROC)(GLuint buffer, GLenum access); +typedef void * (GLAD_API_PTR *PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAD_API_PTR *PFNGLMAPNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAD_API_PTR *PFNGLMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void * (GLAD_API_PTR *PFNGLMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level, GLbitfield access, GLint * stride, GLenum * layout); +typedef void (GLAD_API_PTR *PFNGLMAPVERTEXATTRIB1DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); +typedef void (GLAD_API_PTR *PFNGLMAPVERTEXATTRIB1FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLMAPVERTEXATTRIB2DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); +typedef void (GLAD_API_PTR *PFNGLMAPVERTEXATTRIB2FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLMATERIALXVOESPROC)(GLenum face, GLenum pname, const GLfixed * param); +typedef void (GLAD_API_PTR *PFNGLMATRIXFRUSTUMEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAD_API_PTR *PFNGLMATRIXINDEXPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLMATRIXINDEXUBVARBPROC)(GLint size, const GLubyte * indices); +typedef void (GLAD_API_PTR *PFNGLMATRIXINDEXUIVARBPROC)(GLint size, const GLuint * indices); +typedef void (GLAD_API_PTR *PFNGLMATRIXINDEXUSVARBPROC)(GLint size, const GLushort * indices); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOAD3X2FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOAD3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOADIDENTITYEXTPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOADTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOADTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOADDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXLOADFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXMULT3X2FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXMULT3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXMULTTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXMULTTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXMULTDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXMULTFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMATRIXORTHOEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAD_API_PTR *PFNGLMATRIXPOPEXTPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLMATRIXPUSHEXTPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLMATRIXROTATEDEXTPROC)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLMATRIXROTATEFEXTPROC)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLMATRIXSCALEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLMATRIXSCALEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLMATRIXTRANSLATEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLMATRIXTRANSLATEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLMAXSHADERCOMPILERTHREADSARBPROC)(GLuint count); +typedef void (GLAD_API_PTR *PFNGLMAXSHADERCOMPILERTHREADSKHRPROC)(GLuint count); +typedef void (GLAD_API_PTR *PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); +typedef void (GLAD_API_PTR *PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers); +typedef void (GLAD_API_PTR *PFNGLMEMORYBARRIEREXTPROC)(GLbitfield barriers); +typedef void (GLAD_API_PTR *PFNGLMEMORYOBJECTPARAMETERIVEXTPROC)(GLuint memoryObject, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLMINSAMPLESHADINGPROC)(GLfloat value); +typedef void (GLAD_API_PTR *PFNGLMINSAMPLESHADINGARBPROC)(GLfloat value); +typedef void (GLAD_API_PTR *PFNGLMINMAXEXTPROC)(GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAD_API_PTR *PFNGLMULTMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXDARBPROC)(const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXFARBPROC)(const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSEXTPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)(GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)(GLenum mode, const void * indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSEXTPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)(GLenum mode, GLenum type, const void * indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC)(GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC)(GLintptr indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAD_API_PTR *PFNGLMULTIMODEDRAWARRAYSIBMPROC)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); +typedef void (GLAD_API_PTR *PFNGLMULTIMODEDRAWELEMENTSIBMPROC)(const GLenum * mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, GLint modestride); +typedef void (GLAD_API_PTR *PFNGLMULTITEXBUFFEREXTPROC)(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1BOESPROC)(GLenum texture, GLbyte s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1DARBPROC)(GLenum target, GLdouble s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1IARBPROC)(GLenum target, GLint s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1SARBPROC)(GLenum target, GLshort s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1XOESPROC)(GLenum texture, GLfixed s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2BOESPROC)(GLenum texture, GLbyte s, GLbyte t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2DARBPROC)(GLenum target, GLdouble s, GLdouble t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2IARBPROC)(GLenum target, GLint s, GLint t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2SARBPROC)(GLenum target, GLshort s, GLshort t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2XOESPROC)(GLenum texture, GLfixed s, GLfixed t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3IARBPROC)(GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4IARBPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORDPOINTEREXTPROC)(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLMULTITEXENVFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXENVIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXGENDEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (GLAD_API_PTR *PFNGLMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXGENFEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXGENIEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXPARAMETERFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXPARAMETERIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLMULTITEXRENDERBUFFEREXTPROC)(GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLMULTICASTBARRIERNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLMULTICASTBLITFRAMEBUFFERNVPROC)(GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAD_API_PTR *PFNGLMULTICASTBUFFERSUBDATANVPROC)(GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAD_API_PTR *PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC)(GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLMULTICASTCOPYIMAGESUBDATANVPROC)(GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAD_API_PTR *PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLint64 * params); +typedef void (GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTIVNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLuint64 * params); +typedef void (GLAD_API_PTR *PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC)(GLuint gpu, GLuint id, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLMULTICASTSCISSORARRAYVNVXPROC)(GLuint gpu, GLuint first, GLsizei count, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTICASTVIEWPORTARRAYVNVXPROC)(GLuint gpu, GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC)(GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); +typedef void (GLAD_API_PTR *PFNGLMULTICASTWAITSYNCNVPROC)(GLuint signalGpu, GLbitfield waitGpuMask); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERATTACHMEMORYNVPROC)(GLuint buffer, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERDATAPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEEXTPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC)(GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAD_API_PTR *PFNGLNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAD_API_PTR *PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)(GLuint framebuffer, GLenum buf); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)(GLuint framebuffer, GLsizei n, const GLenum * bufs); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)(GLuint framebuffer, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)(GLuint framebuffer, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)(GLuint framebuffer, GLenum src); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)(GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAD_API_PTR *PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum format, GLsizei len, const void * string); +typedef void (GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC)(GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLNAMEDSTRINGARBPROC)(GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string); +typedef GLuint (GLAD_API_PTR *PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void * pointer, GLenum usage); +typedef void (GLAD_API_PTR *PFNGLNORMAL3FVERTEX3FSUNPROC)(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (GLAD_API_PTR *PFNGLNORMAL3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLNORMAL3XOESPROC)(GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (GLAD_API_PTR *PFNGLNORMAL3XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLNORMALFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLNORMALPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLNORMALPOINTERVINTELPROC)(GLenum type, const void ** pointer); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3BATIPROC)(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3BVATIPROC)(GLenum stream, const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3DATIPROC)(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3FATIPROC)(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3IATIPROC)(GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3SATIPROC)(GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (GLAD_API_PTR *PFNGLNORMALSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAD_API_PTR *PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); +typedef void (GLAD_API_PTR *PFNGLOBJECTPTRLABELPROC)(const void * ptr, GLsizei length, const GLchar * label); +typedef GLenum (GLAD_API_PTR *PFNGLOBJECTPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); +typedef GLenum (GLAD_API_PTR *PFNGLOBJECTUNPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); +typedef void (GLAD_API_PTR *PFNGLORTHOFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAD_API_PTR *PFNGLORTHOXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (GLAD_API_PTR *PFNGLPNTRIANGLESFATIPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPNTRIANGLESIATIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); +typedef void (GLAD_API_PTR *PFNGLPASSTHROUGHXOESPROC)(GLfixed token); +typedef void (GLAD_API_PTR *PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); +typedef void (GLAD_API_PTR *PFNGLPATHCOMMANDSNVPROC)(GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAD_API_PTR *PFNGLPATHCOORDSNVPROC)(GLuint path, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAD_API_PTR *PFNGLPATHCOVERDEPTHFUNCNVPROC)(GLenum func); +typedef void (GLAD_API_PTR *PFNGLPATHDASHARRAYNVPROC)(GLuint path, GLsizei dashCount, const GLfloat * dashArray); +typedef GLenum (GLAD_API_PTR *PFNGLPATHGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (GLAD_API_PTR *PFNGLPATHGLYPHINDEXRANGENVPROC)(GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint * baseAndCount); +typedef void (GLAD_API_PTR *PFNGLPATHGLYPHRANGENVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GLAD_API_PTR *PFNGLPATHGLYPHSNVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (GLAD_API_PTR *PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void * fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GLAD_API_PTR *PFNGLPATHPARAMETERFNVPROC)(GLuint path, GLenum pname, GLfloat value); +typedef void (GLAD_API_PTR *PFNGLPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPATHPARAMETERINVPROC)(GLuint path, GLenum pname, GLint value); +typedef void (GLAD_API_PTR *PFNGLPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPATHSTENCILDEPTHOFFSETNVPROC)(GLfloat factor, GLfloat units); +typedef void (GLAD_API_PTR *PFNGLPATHSTENCILFUNCNVPROC)(GLenum func, GLint ref, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLPATHSTRINGNVPROC)(GLuint path, GLenum format, GLsizei length, const void * pathString); +typedef void (GLAD_API_PTR *PFNGLPATHSUBCOMMANDSNVPROC)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAD_API_PTR *PFNGLPATHSUBCOORDSNVPROC)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAD_API_PTR *PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPAUSETRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPIXELDATARANGENVPROC)(GLenum target, GLsizei length, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLPIXELMAPXPROC)(GLenum map, GLint size, const GLfixed * values); +typedef void (GLAD_API_PTR *PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPIXELSTOREXPROC)(GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERISGISPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPIXELTEXGENSGIXPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLPIXELTRANSFERXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPIXELZOOMXOESPROC)(GLfixed xfactor, GLfixed yfactor); +typedef GLboolean (GLAD_API_PTR *PFNGLPOINTALONGPATHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFVSGISPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERIVNVPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERXVOESPROC)(GLenum pname, const GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLPOINTSIZEPROC)(GLfloat size); +typedef void (GLAD_API_PTR *PFNGLPOINTSIZEXOESPROC)(GLfixed size); +typedef GLint (GLAD_API_PTR *PFNGLPOLLASYNCSGIXPROC)(GLuint * markerp); +typedef GLint (GLAD_API_PTR *PFNGLPOLLINSTRUMENTSSGIXPROC)(GLint * marker_p); +typedef void (GLAD_API_PTR *PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +typedef void (GLAD_API_PTR *PFNGLPOLYGONOFFSETCLAMPPROC)(GLfloat factor, GLfloat units, GLfloat clamp); +typedef void (GLAD_API_PTR *PFNGLPOLYGONOFFSETCLAMPEXTPROC)(GLfloat factor, GLfloat units, GLfloat clamp); +typedef void (GLAD_API_PTR *PFNGLPOLYGONOFFSETEXTPROC)(GLfloat factor, GLfloat bias); +typedef void (GLAD_API_PTR *PFNGLPOLYGONOFFSETXOESPROC)(GLfixed factor, GLfixed units); +typedef void (GLAD_API_PTR *PFNGLPOPDEBUGGROUPPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPOPGROUPMARKEREXTPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPRESENTFRAMEDUALFILLNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (GLAD_API_PTR *PFNGLPRESENTFRAMEKEYEDNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (GLAD_API_PTR *PFNGLPRIMITIVEBOUNDINGBOXARBPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAD_API_PTR *PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLPRIMITIVERESTARTINDEXNVPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLPRIMITIVERESTARTNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPRIORITIZETEXTURESEXTPROC)(GLsizei n, const GLuint * textures, const GLclampf * priorities); +typedef void (GLAD_API_PTR *PFNGLPRIORITIZETEXTURESXOESPROC)(GLsizei n, const GLuint * textures, const GLfixed * priorities); +typedef void (GLAD_API_PTR *PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length); +typedef void (GLAD_API_PTR *PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETER4DNVPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETER4DVNVPROC)(GLenum target, GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETER4FNVPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETER4FVNVPROC)(GLenum target, GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETERIEXTPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETERS4DVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPARAMETERS4FVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC)(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs); +typedef void (GLAD_API_PTR *PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const void * string); +typedef void (GLAD_API_PTR *PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC)(GLenum target, GLsizei count, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DEXTPROC)(GLuint program, GLint location, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FEXTPROC)(GLuint program, GLint location, GLfloat v0); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64ARBPROC)(GLuint program, GLint location, GLint64 x); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64NVPROC)(GLuint program, GLint location, GLint64EXT x); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IEXTPROC)(GLuint program, GLint location, GLint v0); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64ARBPROC)(GLuint program, GLint location, GLuint64 x); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIEXTPROC)(GLuint program, GLint location, GLuint v0); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM1UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM2UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM3UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORM4UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)(GLuint program, GLint location, GLuint64 value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)(GLuint program, GLint location, GLuint64 value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMUI64NVPROC)(GLuint program, GLint location, GLuint64EXT value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLPROGRAMVERTEXLIMITNVPROC)(GLenum target, GLint limit); +typedef void (GLAD_API_PTR *PFNGLPROVOKINGVERTEXPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar * message); +typedef void (GLAD_API_PTR *PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar * marker); +typedef void (GLAD_API_PTR *PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); +typedef GLbitfield (GLAD_API_PTR *PFNGLQUERYMATRIXXOESPROC)(GLfixed * mantissa, GLint * exponent); +typedef void (GLAD_API_PTR *PFNGLQUERYOBJECTPARAMETERUIAMDPROC)(GLenum target, GLuint id, GLenum pname, GLuint param); +typedef GLint (GLAD_API_PTR *PFNGLQUERYRESOURCENVPROC)(GLenum queryType, GLint tagId, GLuint count, GLint * buffer); +typedef void (GLAD_API_PTR *PFNGLQUERYRESOURCETAGNVPROC)(GLint tagId, const GLchar * tagString); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2XOESPROC)(GLfixed x, GLfixed y); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4XOESPROC)(GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLRASTERSAMPLESEXTPROC)(GLuint samples, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLREADBUFFERPROC)(GLenum src); +typedef void (GLAD_API_PTR *PFNGLREADINSTRUMENTSSGIXPROC)(GLint marker); +typedef void (GLAD_API_PTR *PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels); +typedef void (GLAD_API_PTR *PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAD_API_PTR *PFNGLREADNPIXELSARBPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAD_API_PTR *PFNGLRECTXOESPROC)(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (GLAD_API_PTR *PFNGLRECTXVOESPROC)(const GLfixed * v1, const GLfixed * v2); +typedef void (GLAD_API_PTR *PFNGLREFERENCEPLANESGIXPROC)(const GLdouble * equation); +typedef GLboolean (GLAD_API_PTR *PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC)(GLuint memory, GLuint64 key); +typedef void (GLAD_API_PTR *PFNGLRELEASESHADERCOMPILERPROC)(void); +typedef void (GLAD_API_PTR *PFNGLRENDERGPUMASKNVPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC)(GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEPOINTERSUNPROC)(GLenum type, GLsizei stride, const void ** pointer); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUBSUNPROC)(GLubyte code); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUBVSUNPROC)(const GLubyte * code); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)(const GLuint * rc, const GLubyte * c, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUISUNPROC)(GLuint code); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)(GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUIVSUNPROC)(const GLuint * code); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUSSUNPROC)(GLushort code); +typedef void (GLAD_API_PTR *PFNGLREPLACEMENTCODEUSVSUNPROC)(const GLushort * code); +typedef void (GLAD_API_PTR *PFNGLREQUESTRESIDENTPROGRAMSNVPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAD_API_PTR *PFNGLRESETHISTOGRAMEXTPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLRESETMEMORYOBJECTPARAMETERNVPROC)(GLuint memory, GLenum pname); +typedef void (GLAD_API_PTR *PFNGLRESETMINMAXEXTPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLRESIZEBUFFERSMESAPROC)(void); +typedef void (GLAD_API_PTR *PFNGLRESOLVEDEPTHVALUESNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); +typedef void (GLAD_API_PTR *PFNGLRESUMETRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLROTATEXOESPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAD_API_PTR *PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +typedef void (GLAD_API_PTR *PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); +typedef void (GLAD_API_PTR *PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); +typedef void (GLAD_API_PTR *PFNGLSAMPLEMASKEXTPROC)(GLclampf value, GLboolean invert); +typedef void (GLAD_API_PTR *PFNGLSAMPLEMASKINDEXEDNVPROC)(GLuint index, GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLSAMPLEMASKSGISPROC)(GLclampf value, GLboolean invert); +typedef void (GLAD_API_PTR *PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLSAMPLEPATTERNEXTPROC)(GLenum pattern); +typedef void (GLAD_API_PTR *PFNGLSAMPLEPATTERNSGISPROC)(GLenum pattern); +typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint * param); +typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat * param); +typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAD_API_PTR *PFNGLSCALEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAD_API_PTR *PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLSCISSOREXCLUSIVEARRAYVNVPROC)(GLuint first, GLsizei count, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLSCISSOREXCLUSIVENVPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3BEXTPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3BVEXTPROC)(const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3DEXTPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3DVEXTPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3IEXTPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3IVEXTPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3SEXTPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3SVEXTPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UIEXTPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UIVEXTPROC)(const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3USEXTPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3USVEXTPROC)(const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); +typedef void (GLAD_API_PTR *PFNGLSEMAPHOREPARAMETERIVNVPROC)(GLuint semaphore, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLSEMAPHOREPARAMETERUI64VEXTPROC)(GLuint semaphore, GLenum pname, const GLuint64 * params); +typedef void (GLAD_API_PTR *PFNGLSEPARABLEFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); +typedef void (GLAD_API_PTR *PFNGLSETFENCEAPPLEPROC)(GLuint fence); +typedef void (GLAD_API_PTR *PFNGLSETFENCENVPROC)(GLuint fence, GLenum condition); +typedef void (GLAD_API_PTR *PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, const void * addr); +typedef void (GLAD_API_PTR *PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, const void * addr); +typedef void (GLAD_API_PTR *PFNGLSETMULTISAMPLEFVAMDPROC)(GLenum pname, GLuint index, const GLfloat * val); +typedef void (GLAD_API_PTR *PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint * shaders, GLenum binaryFormat, const void * binary, GLsizei length); +typedef void (GLAD_API_PTR *PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); +typedef void (GLAD_API_PTR *PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (GLAD_API_PTR *PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (GLAD_API_PTR *PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); +typedef void (GLAD_API_PTR *PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); +typedef void (GLAD_API_PTR *PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (GLAD_API_PTR *PFNGLSHADINGRATEIMAGEBARRIERNVPROC)(GLboolean synchronize); +typedef void (GLAD_API_PTR *PFNGLSHADINGRATEIMAGEPALETTENVPROC)(GLuint viewport, GLuint first, GLsizei count, const GLenum * rates); +typedef void (GLAD_API_PTR *PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC)(GLenum rate, GLuint samples, const GLint * locations); +typedef void (GLAD_API_PTR *PFNGLSHADINGRATESAMPLEORDERNVPROC)(GLenum order); +typedef void (GLAD_API_PTR *PFNGLSHARPENTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLSIGNALSEMAPHOREEXTPROC)(GLuint semaphore, GLuint numBufferBarriers, const GLuint * buffers, GLuint numTextureBarriers, const GLuint * textures, const GLenum * dstLayouts); +typedef void (GLAD_API_PTR *PFNGLSIGNALSEMAPHOREUI64NVXPROC)(GLuint signalGpu, GLsizei fenceObjectCount, const GLuint * semaphoreArray, const GLuint64 * fenceValueArray); +typedef void (GLAD_API_PTR *PFNGLSIGNALVKFENCENVPROC)(GLuint64 vkFence); +typedef void (GLAD_API_PTR *PFNGLSIGNALVKSEMAPHORENVPROC)(GLuint64 vkSemaphore); +typedef void (GLAD_API_PTR *PFNGLSPECIALIZESHADERARBPROC)(GLuint shader, const GLchar * pEntryPoint, GLuint numSpecializationConstants, const GLuint * pConstantIndex, const GLuint * pConstantValue); +typedef void (GLAD_API_PTR *PFNGLSPRITEPARAMETERFSGIXPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLSPRITEPARAMETERFVSGIXPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLSPRITEPARAMETERISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLSPRITEPARAMETERIVSGIXPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLSTARTINSTRUMENTSSGIXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLSTATECAPTURENVPROC)(GLuint state, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLSTENCILCLEARTAGEXTPROC)(GLsizei stencilTagBits, GLuint stencilClearTag); +typedef void (GLAD_API_PTR *PFNGLSTENCILFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAD_API_PTR *PFNGLSTENCILFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILMASKPROC)(GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +typedef void (GLAD_API_PTR *PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAD_API_PTR *PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAD_API_PTR *PFNGLSTENCILOPVALUEAMDPROC)(GLenum face, GLuint value); +typedef void (GLAD_API_PTR *PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAD_API_PTR *PFNGLSTENCILSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAD_API_PTR *PFNGLSTENCILTHENCOVERFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +typedef void (GLAD_API_PTR *PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAD_API_PTR *PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask, GLenum coverMode); +typedef void (GLAD_API_PTR *PFNGLSTOPINSTRUMENTSSGIXPROC)(GLint marker); +typedef void (GLAD_API_PTR *PFNGLSTRINGMARKERGREMEDYPROC)(GLsizei len, const void * string); +typedef void (GLAD_API_PTR *PFNGLSUBPIXELPRECISIONBIASNVPROC)(GLuint xbits, GLuint ybits); +typedef void (GLAD_API_PTR *PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (GLAD_API_PTR *PFNGLSYNCTEXTUREINTELPROC)(GLuint texture); +typedef void (GLAD_API_PTR *PFNGLTAGSAMPLEBUFFERSGIXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLTANGENT3BEXTPROC)(GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (GLAD_API_PTR *PFNGLTANGENT3BVEXTPROC)(const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLTANGENT3DEXTPROC)(GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (GLAD_API_PTR *PFNGLTANGENT3DVEXTPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLTANGENT3FEXTPROC)(GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (GLAD_API_PTR *PFNGLTANGENT3FVEXTPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTANGENT3IEXTPROC)(GLint tx, GLint ty, GLint tz); +typedef void (GLAD_API_PTR *PFNGLTANGENT3IVEXTPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLTANGENT3SEXTPROC)(GLshort tx, GLshort ty, GLshort tz); +typedef void (GLAD_API_PTR *PFNGLTANGENT3SVEXTPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLTANGENTPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLTBUFFERMASK3DFXPROC)(GLuint mask); +typedef void (GLAD_API_PTR *PFNGLTESSELLATIONFACTORAMDPROC)(GLfloat factor); +typedef void (GLAD_API_PTR *PFNGLTESSELLATIONMODEAMDPROC)(GLenum mode); +typedef GLboolean (GLAD_API_PTR *PFNGLTESTFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean (GLAD_API_PTR *PFNGLTESTFENCENVPROC)(GLuint fence); +typedef GLboolean (GLAD_API_PTR *PFNGLTESTOBJECTAPPLEPROC)(GLenum object, GLuint name); +typedef void (GLAD_API_PTR *PFNGLTEXATTACHMEMORYNVPROC)(GLenum target, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLTEXBUFFERARBPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLTEXBUFFEREXTPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLTEXBUMPPARAMETERFVATIPROC)(GLenum pname, const GLfloat * param); +typedef void (GLAD_API_PTR *PFNGLTEXBUMPPARAMETERIVATIPROC)(GLenum pname, const GLint * param); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1BOESPROC)(GLbyte s); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1BVOESPROC)(const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1HNVPROC)(GLhalfNV s); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1XOESPROC)(GLfixed s); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2BOESPROC)(GLbyte s, GLbyte t); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2BVOESPROC)(const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)(const GLfloat * tc, const GLubyte * c, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2XOESPROC)(GLfixed s, GLfixed t); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3BOESPROC)(GLbyte s, GLbyte t, GLbyte r); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3BVOESPROC)(const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3XOESPROC)(GLfixed s, GLfixed t, GLfixed r); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4BOESPROC)(GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4BVOESPROC)(const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4XOESPROC)(GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLTEXCOORDFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLTEXCOORDPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLTEXCOORDPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAD_API_PTR *PFNGLTEXENVXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLTEXENVXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); +typedef void (GLAD_API_PTR *PFNGLTEXGENXOESPROC)(GLenum coord, GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLTEXGENXVOESPROC)(GLenum coord, GLenum pname, const GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE4DSGISPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXPAGECOMMITMENTARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLTEXPAGECOMMITMENTMEMNVPROC)(GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAD_API_PTR *PFNGLTEXRENDERBUFFERNVPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE1DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE2DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE3DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGEMEM1DEXTPROC)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGEMEM2DEXTPROC)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGEMEM3DEXTPROC)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXSTORAGESPARSEAMDPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE4DSGISPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTUREATTACHMEMORYNVPROC)(GLuint texture, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXTUREBARRIERPROC)(void); +typedef void (GLAD_API_PTR *PFNGLTEXTUREBARRIERNVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLTEXTUREBUFFERPROC)(GLuint texture, GLenum internalformat, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLTEXTUREBUFFEREXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLTEXTUREBUFFERRANGEPROC)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLTEXTUREBUFFERRANGEEXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLTEXTURECOLORMASKSGISPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAD_API_PTR *PFNGLTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAD_API_PTR *PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAD_API_PTR *PFNGLTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAD_API_PTR *PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAD_API_PTR *PFNGLTEXTURELIGHTEXTPROC)(GLenum pname); +typedef void (GLAD_API_PTR *PFNGLTEXTUREMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLTEXTURENORMALEXTPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPAGECOMMITMENTEXTPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC)(GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERFPROC)(GLuint texture, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERFEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, const GLfloat * param); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIPROC)(GLuint texture, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, const GLint * param); +typedef void (GLAD_API_PTR *PFNGLTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXTURERANGEAPPLEPROC)(GLenum target, GLsizei length, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLTEXTURERENDERBUFFEREXTPROC)(GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE1DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE1DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE2DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE2DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE3DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE3DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM1DEXTPROC)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM2DEXTPROC)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM3DEXTPROC)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GLAD_API_PTR *PFNGLTEXTURESTORAGESPARSEAMDPROC)(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (GLAD_API_PTR *PFNGLTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (GLAD_API_PTR *PFNGLTRACKMATRIXNVPROC)(GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)(GLsizei count, const GLint * attribs, GLenum bufferMode); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)(GLuint xfb, GLuint index, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC)(GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMPATHNVPROC)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAD_API_PTR *PFNGLTRANSLATEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1I64ARBPROC)(GLint location, GLint64 x); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1I64NVPROC)(GLint location, GLint64EXT x); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UI64ARBPROC)(GLint location, GLuint64 x); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UI64NVPROC)(GLint location, GLuint64EXT x); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIEXTPROC)(GLint location, GLuint v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2I64ARBPROC)(GLint location, GLint64 x, GLint64 y); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +typedef void (GLAD_API_PTR *PFNGLUNIFORMBUFFEREXTPROC)(GLuint program, GLint location, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64ARBPROC)(GLint location, GLuint64 value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64NVPROC)(GLint location, GLuint64 value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMHANDLEUI64VNVPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint * indices); +typedef void (GLAD_API_PTR *PFNGLUNIFORMUI64NVPROC)(GLint location, GLuint64EXT value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMUI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAD_API_PTR *PFNGLUNLOCKARRAYSEXTPROC)(void); +typedef GLboolean (GLAD_API_PTR *PFNGLUNMAPBUFFERPROC)(GLenum target); +typedef GLboolean (GLAD_API_PTR *PFNGLUNMAPBUFFERARBPROC)(GLenum target); +typedef GLboolean (GLAD_API_PTR *PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer); +typedef GLboolean (GLAD_API_PTR *PFNGLUNMAPNAMEDBUFFEREXTPROC)(GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLUNMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLUNMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve); +typedef void (GLAD_API_PTR *PFNGLUPLOADGPUMASKNVXPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLUSEPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj); +typedef void (GLAD_API_PTR *PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GLAD_API_PTR *PFNGLUSESHADERPROGRAMEXTPROC)(GLenum type, GLuint program); +typedef void (GLAD_API_PTR *PFNGLVDPAUFININVPROC)(void); +typedef void (GLAD_API_PTR *PFNGLVDPAUGETSURFACEIVNVPROC)(GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei * length, GLint * values); +typedef void (GLAD_API_PTR *PFNGLVDPAUINITNVPROC)(const void * vdpDevice, const void * getProcAddress); +typedef GLboolean (GLAD_API_PTR *PFNGLVDPAUISSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void (GLAD_API_PTR *PFNGLVDPAUMAPSURFACESNVPROC)(GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces); +typedef GLvdpauSurfaceNV (GLAD_API_PTR *PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); +typedef GLvdpauSurfaceNV (GLAD_API_PTR *PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); +typedef GLvdpauSurfaceNV (GLAD_API_PTR *PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames, GLboolean isFrameStructure); +typedef void (GLAD_API_PTR *PFNGLVDPAUSURFACEACCESSNVPROC)(GLvdpauSurfaceNV surface, GLenum access); +typedef void (GLAD_API_PTR *PFNGLVDPAUUNMAPSURFACESNVPROC)(GLsizei numSurface, const GLvdpauSurfaceNV * surfaces); +typedef void (GLAD_API_PTR *PFNGLVDPAUUNREGISTERSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void (GLAD_API_PTR *PFNGLVALIDATEPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj); +typedef void (GLAD_API_PTR *PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void (GLAD_API_PTR *PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAD_API_PTR *PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, const void * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTBVEXTPROC)(GLuint id, const GLbyte * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTDVEXTPROC)(GLuint id, const GLdouble * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTFVEXTPROC)(GLuint id, const GLfloat * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTIVEXTPROC)(GLuint id, const GLint * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTSVEXTPROC)(GLuint id, const GLshort * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTUBVEXTPROC)(GLuint id, const GLubyte * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTUIVEXTPROC)(GLuint id, const GLuint * addr); +typedef void (GLAD_API_PTR *PFNGLVARIANTUSVEXTPROC)(GLuint id, const GLushort * addr); +typedef void (GLAD_API_PTR *PFNGLVERTEX2BOESPROC)(GLbyte x, GLbyte y); +typedef void (GLAD_API_PTR *PFNGLVERTEX2BVOESPROC)(const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y); +typedef void (GLAD_API_PTR *PFNGLVERTEX2HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX2XOESPROC)(GLfixed x); +typedef void (GLAD_API_PTR *PFNGLVERTEX2XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEX3BOESPROC)(GLbyte x, GLbyte y, GLbyte z); +typedef void (GLAD_API_PTR *PFNGLVERTEX3BVOESPROC)(const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (GLAD_API_PTR *PFNGLVERTEX3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX3XOESPROC)(GLfixed x, GLfixed y); +typedef void (GLAD_API_PTR *PFNGLVERTEX3XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEX4BOESPROC)(GLbyte x, GLbyte y, GLbyte z, GLbyte w); +typedef void (GLAD_API_PTR *PFNGLVERTEX4BVOESPROC)(const GLbyte * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (GLAD_API_PTR *PFNGLVERTEX4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX4XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAD_API_PTR *PFNGLVERTEX4XVOESPROC)(const GLfixed * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBBINDINGPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBIFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYATTRIBLFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYBINDINGDIVISORPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYELEMENTBUFFERPROC)(GLuint vaobj, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYRANGENVPROC)(GLsizei length, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC)(GLuint vaobj, GLuint index, GLuint divisor); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXBUFFERPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXBUFFERSPROC)(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); +typedef void (GLAD_API_PTR *PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DNVPROC)(GLuint index, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FNVPROC)(GLuint index, GLfloat x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SNVPROC)(GLuint index, GLshort x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DNVPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FNVPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SNVPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UBNVPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVNVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBDIVISORARBPROC)(GLuint index, GLuint divisor); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBIFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1DEXTPROC)(GLuint index, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1I64NVPROC)(GLuint index, GLint64EXT x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64ARBPROC)(GLuint index, GLuint64EXT x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64NVPROC)(GLuint index, GLuint64EXT x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64VARBPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL1UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2DEXTPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL2UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL3UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBL4UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBLFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBLPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBPARAMETERIAMDPROC)(GLuint index, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERNVPROC)(GLuint index, GLint fsize, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS1DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS1FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS1SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS2DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS2FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS2SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS3DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS3FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS3SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS4DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS4FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS4SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBS4UBVNVPROC)(GLuint index, GLsizei count, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); +typedef void (GLAD_API_PTR *PFNGLVERTEXBLENDARBPROC)(GLint count); +typedef void (GLAD_API_PTR *PFNGLVERTEXBLENDENVFATIPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLVERTEXBLENDENVIATIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLVERTEXFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAD_API_PTR *PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAD_API_PTR *PFNGLVERTEXPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1DATIPROC)(GLenum stream, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1FATIPROC)(GLenum stream, GLfloat x); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1IATIPROC)(GLenum stream, GLint x); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1SATIPROC)(GLenum stream, GLshort x); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM1SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2DATIPROC)(GLenum stream, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2FATIPROC)(GLenum stream, GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2IATIPROC)(GLenum stream, GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2SATIPROC)(GLenum stream, GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM2SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3IATIPROC)(GLenum stream, GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4IATIPROC)(GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLVERTEXSTREAM4SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAD_API_PTR *PFNGLVERTEXWEIGHTPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXWEIGHTFEXTPROC)(GLfloat weight); +typedef void (GLAD_API_PTR *PFNGLVERTEXWEIGHTFVEXTPROC)(const GLfloat * weight); +typedef void (GLAD_API_PTR *PFNGLVERTEXWEIGHTHNVPROC)(GLhalfNV weight); +typedef void (GLAD_API_PTR *PFNGLVERTEXWEIGHTHVNVPROC)(const GLhalfNV * weight); +typedef GLenum (GLAD_API_PTR *PFNGLVIDEOCAPTURENVPROC)(GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time); +typedef void (GLAD_API_PTR *PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GLAD_API_PTR *PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVIEWPORTPOSITIONWSCALENVPROC)(GLuint index, GLfloat xcoeff, GLfloat ycoeff); +typedef void (GLAD_API_PTR *PFNGLVIEWPORTSWIZZLENVPROC)(GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); +typedef void (GLAD_API_PTR *PFNGLWAITSEMAPHOREEXTPROC)(GLuint semaphore, GLuint numBufferBarriers, const GLuint * buffers, GLuint numTextureBarriers, const GLuint * textures, const GLenum * srcLayouts); +typedef void (GLAD_API_PTR *PFNGLWAITSEMAPHOREUI64NVXPROC)(GLuint waitGpu, GLsizei fenceObjectCount, const GLuint * semaphoreArray, const GLuint64 * fenceValueArray); +typedef void (GLAD_API_PTR *PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAD_API_PTR *PFNGLWAITVKSEMAPHORENVPROC)(GLuint64 vkSemaphore); +typedef void (GLAD_API_PTR *PFNGLWEIGHTPATHSNVPROC)(GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLWEIGHTBVARBPROC)(GLint size, const GLbyte * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTDVARBPROC)(GLint size, const GLdouble * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTFVARBPROC)(GLint size, const GLfloat * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTIVARBPROC)(GLint size, const GLint * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTSVARBPROC)(GLint size, const GLshort * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTUBVARBPROC)(GLint size, const GLubyte * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTUIVARBPROC)(GLint size, const GLuint * weights); +typedef void (GLAD_API_PTR *PFNGLWEIGHTUSVARBPROC)(GLint size, const GLushort * weights); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2DARBPROC)(GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2DMESAPROC)(GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2DVARBPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2DVMESAPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2FARBPROC)(GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2FMESAPROC)(GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2FVARBPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2FVMESAPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2IARBPROC)(GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2IMESAPROC)(GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2IVARBPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2IVMESAPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2SARBPROC)(GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2SMESAPROC)(GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2SVARBPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2SVMESAPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3DARBPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3DMESAPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3DVARBPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3DVMESAPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3FARBPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3FMESAPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3FVARBPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3FVMESAPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3IARBPROC)(GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3IMESAPROC)(GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3IVARBPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3IVMESAPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3SARBPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3SMESAPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3SVARBPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3SVMESAPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4DMESAPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4DVMESAPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4FMESAPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4FVMESAPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4IMESAPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4IVMESAPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4SMESAPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS4SVMESAPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWRECTANGLESEXTPROC)(GLenum mode, GLsizei count, const GLint * box); +typedef void (GLAD_API_PTR *PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); + +GLAD_API_CALL PFNGLACCUMXOESPROC glad_glAccumxOES; +#define glAccumxOES glad_glAccumxOES +GLAD_API_CALL PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC glad_glAcquireKeyedMutexWin32EXT; +#define glAcquireKeyedMutexWin32EXT glad_glAcquireKeyedMutexWin32EXT +GLAD_API_CALL PFNGLACTIVEPROGRAMEXTPROC glad_glActiveProgramEXT; +#define glActiveProgramEXT glad_glActiveProgramEXT +GLAD_API_CALL PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram; +#define glActiveShaderProgram glad_glActiveShaderProgram +GLAD_API_CALL PFNGLACTIVESTENCILFACEEXTPROC glad_glActiveStencilFaceEXT; +#define glActiveStencilFaceEXT glad_glActiveStencilFaceEXT +GLAD_API_CALL PFNGLACTIVETEXTUREPROC glad_glActiveTexture; +#define glActiveTexture glad_glActiveTexture +GLAD_API_CALL PFNGLACTIVETEXTUREARBPROC glad_glActiveTextureARB; +#define glActiveTextureARB glad_glActiveTextureARB +GLAD_API_CALL PFNGLACTIVEVARYINGNVPROC glad_glActiveVaryingNV; +#define glActiveVaryingNV glad_glActiveVaryingNV +GLAD_API_CALL PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI; +#define glAlphaFragmentOp1ATI glad_glAlphaFragmentOp1ATI +GLAD_API_CALL PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI; +#define glAlphaFragmentOp2ATI glad_glAlphaFragmentOp2ATI +GLAD_API_CALL PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI; +#define glAlphaFragmentOp3ATI glad_glAlphaFragmentOp3ATI +GLAD_API_CALL PFNGLALPHAFUNCXOESPROC glad_glAlphaFuncxOES; +#define glAlphaFuncxOES glad_glAlphaFuncxOES +GLAD_API_CALL PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC glad_glAlphaToCoverageDitherControlNV; +#define glAlphaToCoverageDitherControlNV glad_glAlphaToCoverageDitherControlNV +GLAD_API_CALL PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC glad_glApplyFramebufferAttachmentCMAAINTEL; +#define glApplyFramebufferAttachmentCMAAINTEL glad_glApplyFramebufferAttachmentCMAAINTEL +GLAD_API_CALL PFNGLAPPLYTEXTUREEXTPROC glad_glApplyTextureEXT; +#define glApplyTextureEXT glad_glApplyTextureEXT +GLAD_API_CALL PFNGLAREPROGRAMSRESIDENTNVPROC glad_glAreProgramsResidentNV; +#define glAreProgramsResidentNV glad_glAreProgramsResidentNV +GLAD_API_CALL PFNGLARETEXTURESRESIDENTEXTPROC glad_glAreTexturesResidentEXT; +#define glAreTexturesResidentEXT glad_glAreTexturesResidentEXT +GLAD_API_CALL PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT; +#define glArrayElementEXT glad_glArrayElementEXT +GLAD_API_CALL PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI; +#define glArrayObjectATI glad_glArrayObjectATI +GLAD_API_CALL PFNGLASYNCCOPYBUFFERSUBDATANVXPROC glad_glAsyncCopyBufferSubDataNVX; +#define glAsyncCopyBufferSubDataNVX glad_glAsyncCopyBufferSubDataNVX +GLAD_API_CALL PFNGLASYNCCOPYIMAGESUBDATANVXPROC glad_glAsyncCopyImageSubDataNVX; +#define glAsyncCopyImageSubDataNVX glad_glAsyncCopyImageSubDataNVX +GLAD_API_CALL PFNGLASYNCMARKERSGIXPROC glad_glAsyncMarkerSGIX; +#define glAsyncMarkerSGIX glad_glAsyncMarkerSGIX +GLAD_API_CALL PFNGLATTACHOBJECTARBPROC glad_glAttachObjectARB; +#define glAttachObjectARB glad_glAttachObjectARB +GLAD_API_CALL PFNGLATTACHSHADERPROC glad_glAttachShader; +#define glAttachShader glad_glAttachShader +GLAD_API_CALL PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; +#define glBeginConditionalRender glad_glBeginConditionalRender +GLAD_API_CALL PFNGLBEGINCONDITIONALRENDERNVPROC glad_glBeginConditionalRenderNV; +#define glBeginConditionalRenderNV glad_glBeginConditionalRenderNV +GLAD_API_CALL PFNGLBEGINCONDITIONALRENDERNVXPROC glad_glBeginConditionalRenderNVX; +#define glBeginConditionalRenderNVX glad_glBeginConditionalRenderNVX +GLAD_API_CALL PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI; +#define glBeginFragmentShaderATI glad_glBeginFragmentShaderATI +GLAD_API_CALL PFNGLBEGINOCCLUSIONQUERYNVPROC glad_glBeginOcclusionQueryNV; +#define glBeginOcclusionQueryNV glad_glBeginOcclusionQueryNV +GLAD_API_CALL PFNGLBEGINPERFMONITORAMDPROC glad_glBeginPerfMonitorAMD; +#define glBeginPerfMonitorAMD glad_glBeginPerfMonitorAMD +GLAD_API_CALL PFNGLBEGINPERFQUERYINTELPROC glad_glBeginPerfQueryINTEL; +#define glBeginPerfQueryINTEL glad_glBeginPerfQueryINTEL +GLAD_API_CALL PFNGLBEGINQUERYPROC glad_glBeginQuery; +#define glBeginQuery glad_glBeginQuery +GLAD_API_CALL PFNGLBEGINQUERYARBPROC glad_glBeginQueryARB; +#define glBeginQueryARB glad_glBeginQueryARB +GLAD_API_CALL PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed; +#define glBeginQueryIndexed glad_glBeginQueryIndexed +GLAD_API_CALL PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; +#define glBeginTransformFeedback glad_glBeginTransformFeedback +GLAD_API_CALL PFNGLBEGINTRANSFORMFEEDBACKEXTPROC glad_glBeginTransformFeedbackEXT; +#define glBeginTransformFeedbackEXT glad_glBeginTransformFeedbackEXT +GLAD_API_CALL PFNGLBEGINTRANSFORMFEEDBACKNVPROC glad_glBeginTransformFeedbackNV; +#define glBeginTransformFeedbackNV glad_glBeginTransformFeedbackNV +GLAD_API_CALL PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT; +#define glBeginVertexShaderEXT glad_glBeginVertexShaderEXT +GLAD_API_CALL PFNGLBEGINVIDEOCAPTURENVPROC glad_glBeginVideoCaptureNV; +#define glBeginVideoCaptureNV glad_glBeginVideoCaptureNV +GLAD_API_CALL PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; +#define glBindAttribLocation glad_glBindAttribLocation +GLAD_API_CALL PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB; +#define glBindAttribLocationARB glad_glBindAttribLocationARB +GLAD_API_CALL PFNGLBINDBUFFERPROC glad_glBindBuffer; +#define glBindBuffer glad_glBindBuffer +GLAD_API_CALL PFNGLBINDBUFFERARBPROC glad_glBindBufferARB; +#define glBindBufferARB glad_glBindBufferARB +GLAD_API_CALL PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; +#define glBindBufferBase glad_glBindBufferBase +GLAD_API_CALL PFNGLBINDBUFFERBASEEXTPROC glad_glBindBufferBaseEXT; +#define glBindBufferBaseEXT glad_glBindBufferBaseEXT +GLAD_API_CALL PFNGLBINDBUFFERBASENVPROC glad_glBindBufferBaseNV; +#define glBindBufferBaseNV glad_glBindBufferBaseNV +GLAD_API_CALL PFNGLBINDBUFFEROFFSETEXTPROC glad_glBindBufferOffsetEXT; +#define glBindBufferOffsetEXT glad_glBindBufferOffsetEXT +GLAD_API_CALL PFNGLBINDBUFFEROFFSETNVPROC glad_glBindBufferOffsetNV; +#define glBindBufferOffsetNV glad_glBindBufferOffsetNV +GLAD_API_CALL PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; +#define glBindBufferRange glad_glBindBufferRange +GLAD_API_CALL PFNGLBINDBUFFERRANGEEXTPROC glad_glBindBufferRangeEXT; +#define glBindBufferRangeEXT glad_glBindBufferRangeEXT +GLAD_API_CALL PFNGLBINDBUFFERRANGENVPROC glad_glBindBufferRangeNV; +#define glBindBufferRangeNV glad_glBindBufferRangeNV +GLAD_API_CALL PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase; +#define glBindBuffersBase glad_glBindBuffersBase +GLAD_API_CALL PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange; +#define glBindBuffersRange glad_glBindBuffersRange +GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; +#define glBindFragDataLocation glad_glBindFragDataLocation +GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONEXTPROC glad_glBindFragDataLocationEXT; +#define glBindFragDataLocationEXT glad_glBindFragDataLocationEXT +GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; +#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed +GLAD_API_CALL PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI; +#define glBindFragmentShaderATI glad_glBindFragmentShaderATI +GLAD_API_CALL PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; +#define glBindFramebuffer glad_glBindFramebuffer +GLAD_API_CALL PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; +#define glBindFramebufferEXT glad_glBindFramebufferEXT +GLAD_API_CALL PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture; +#define glBindImageTexture glad_glBindImageTexture +GLAD_API_CALL PFNGLBINDIMAGETEXTUREEXTPROC glad_glBindImageTextureEXT; +#define glBindImageTextureEXT glad_glBindImageTextureEXT +GLAD_API_CALL PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures; +#define glBindImageTextures glad_glBindImageTextures +GLAD_API_CALL PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT; +#define glBindLightParameterEXT glad_glBindLightParameterEXT +GLAD_API_CALL PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT; +#define glBindMaterialParameterEXT glad_glBindMaterialParameterEXT +GLAD_API_CALL PFNGLBINDMULTITEXTUREEXTPROC glad_glBindMultiTextureEXT; +#define glBindMultiTextureEXT glad_glBindMultiTextureEXT +GLAD_API_CALL PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT; +#define glBindParameterEXT glad_glBindParameterEXT +GLAD_API_CALL PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB; +#define glBindProgramARB glad_glBindProgramARB +GLAD_API_CALL PFNGLBINDPROGRAMNVPROC glad_glBindProgramNV; +#define glBindProgramNV glad_glBindProgramNV +GLAD_API_CALL PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline; +#define glBindProgramPipeline glad_glBindProgramPipeline +GLAD_API_CALL PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; +#define glBindRenderbuffer glad_glBindRenderbuffer +GLAD_API_CALL PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; +#define glBindRenderbufferEXT glad_glBindRenderbufferEXT +GLAD_API_CALL PFNGLBINDSAMPLERPROC glad_glBindSampler; +#define glBindSampler glad_glBindSampler +GLAD_API_CALL PFNGLBINDSAMPLERSPROC glad_glBindSamplers; +#define glBindSamplers glad_glBindSamplers +GLAD_API_CALL PFNGLBINDSHADINGRATEIMAGENVPROC glad_glBindShadingRateImageNV; +#define glBindShadingRateImageNV glad_glBindShadingRateImageNV +GLAD_API_CALL PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT; +#define glBindTexGenParameterEXT glad_glBindTexGenParameterEXT +GLAD_API_CALL PFNGLBINDTEXTUREPROC glad_glBindTexture; +#define glBindTexture glad_glBindTexture +GLAD_API_CALL PFNGLBINDTEXTUREEXTPROC glad_glBindTextureEXT; +#define glBindTextureEXT glad_glBindTextureEXT +GLAD_API_CALL PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit; +#define glBindTextureUnit glad_glBindTextureUnit +GLAD_API_CALL PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT; +#define glBindTextureUnitParameterEXT glad_glBindTextureUnitParameterEXT +GLAD_API_CALL PFNGLBINDTEXTURESPROC glad_glBindTextures; +#define glBindTextures glad_glBindTextures +GLAD_API_CALL PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; +#define glBindTransformFeedback glad_glBindTransformFeedback +GLAD_API_CALL PFNGLBINDTRANSFORMFEEDBACKNVPROC glad_glBindTransformFeedbackNV; +#define glBindTransformFeedbackNV glad_glBindTransformFeedbackNV +GLAD_API_CALL PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; +#define glBindVertexArray glad_glBindVertexArray +GLAD_API_CALL PFNGLBINDVERTEXARRAYAPPLEPROC glad_glBindVertexArrayAPPLE; +#define glBindVertexArrayAPPLE glad_glBindVertexArrayAPPLE +GLAD_API_CALL PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; +#define glBindVertexBuffer glad_glBindVertexBuffer +GLAD_API_CALL PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers; +#define glBindVertexBuffers glad_glBindVertexBuffers +GLAD_API_CALL PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT; +#define glBindVertexShaderEXT glad_glBindVertexShaderEXT +GLAD_API_CALL PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC glad_glBindVideoCaptureStreamBufferNV; +#define glBindVideoCaptureStreamBufferNV glad_glBindVideoCaptureStreamBufferNV +GLAD_API_CALL PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC glad_glBindVideoCaptureStreamTextureNV; +#define glBindVideoCaptureStreamTextureNV glad_glBindVideoCaptureStreamTextureNV +GLAD_API_CALL PFNGLBINORMAL3BEXTPROC glad_glBinormal3bEXT; +#define glBinormal3bEXT glad_glBinormal3bEXT +GLAD_API_CALL PFNGLBINORMAL3BVEXTPROC glad_glBinormal3bvEXT; +#define glBinormal3bvEXT glad_glBinormal3bvEXT +GLAD_API_CALL PFNGLBINORMAL3DEXTPROC glad_glBinormal3dEXT; +#define glBinormal3dEXT glad_glBinormal3dEXT +GLAD_API_CALL PFNGLBINORMAL3DVEXTPROC glad_glBinormal3dvEXT; +#define glBinormal3dvEXT glad_glBinormal3dvEXT +GLAD_API_CALL PFNGLBINORMAL3FEXTPROC glad_glBinormal3fEXT; +#define glBinormal3fEXT glad_glBinormal3fEXT +GLAD_API_CALL PFNGLBINORMAL3FVEXTPROC glad_glBinormal3fvEXT; +#define glBinormal3fvEXT glad_glBinormal3fvEXT +GLAD_API_CALL PFNGLBINORMAL3IEXTPROC glad_glBinormal3iEXT; +#define glBinormal3iEXT glad_glBinormal3iEXT +GLAD_API_CALL PFNGLBINORMAL3IVEXTPROC glad_glBinormal3ivEXT; +#define glBinormal3ivEXT glad_glBinormal3ivEXT +GLAD_API_CALL PFNGLBINORMAL3SEXTPROC glad_glBinormal3sEXT; +#define glBinormal3sEXT glad_glBinormal3sEXT +GLAD_API_CALL PFNGLBINORMAL3SVEXTPROC glad_glBinormal3svEXT; +#define glBinormal3svEXT glad_glBinormal3svEXT +GLAD_API_CALL PFNGLBINORMALPOINTEREXTPROC glad_glBinormalPointerEXT; +#define glBinormalPointerEXT glad_glBinormalPointerEXT +GLAD_API_CALL PFNGLBITMAPXOESPROC glad_glBitmapxOES; +#define glBitmapxOES glad_glBitmapxOES +GLAD_API_CALL PFNGLBLENDBARRIERKHRPROC glad_glBlendBarrierKHR; +#define glBlendBarrierKHR glad_glBlendBarrierKHR +GLAD_API_CALL PFNGLBLENDBARRIERNVPROC glad_glBlendBarrierNV; +#define glBlendBarrierNV glad_glBlendBarrierNV +GLAD_API_CALL PFNGLBLENDCOLORPROC glad_glBlendColor; +#define glBlendColor glad_glBlendColor +GLAD_API_CALL PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT; +#define glBlendColorEXT glad_glBlendColorEXT +GLAD_API_CALL PFNGLBLENDCOLORXOESPROC glad_glBlendColorxOES; +#define glBlendColorxOES glad_glBlendColorxOES +GLAD_API_CALL PFNGLBLENDEQUATIONPROC glad_glBlendEquation; +#define glBlendEquation glad_glBlendEquation +GLAD_API_CALL PFNGLBLENDEQUATIONEXTPROC glad_glBlendEquationEXT; +#define glBlendEquationEXT glad_glBlendEquationEXT +GLAD_API_CALL PFNGLBLENDEQUATIONINDEXEDAMDPROC glad_glBlendEquationIndexedAMD; +#define glBlendEquationIndexedAMD glad_glBlendEquationIndexedAMD +GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; +#define glBlendEquationSeparate glad_glBlendEquationSeparate +GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT; +#define glBlendEquationSeparateEXT glad_glBlendEquationSeparateEXT +GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC glad_glBlendEquationSeparateIndexedAMD; +#define glBlendEquationSeparateIndexedAMD glad_glBlendEquationSeparateIndexedAMD +GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; +#define glBlendEquationSeparatei glad_glBlendEquationSeparatei +GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB; +#define glBlendEquationSeparateiARB glad_glBlendEquationSeparateiARB +GLAD_API_CALL PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; +#define glBlendEquationi glad_glBlendEquationi +GLAD_API_CALL PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB; +#define glBlendEquationiARB glad_glBlendEquationiARB +GLAD_API_CALL PFNGLBLENDFUNCPROC glad_glBlendFunc; +#define glBlendFunc glad_glBlendFunc +GLAD_API_CALL PFNGLBLENDFUNCINDEXEDAMDPROC glad_glBlendFuncIndexedAMD; +#define glBlendFuncIndexedAMD glad_glBlendFuncIndexedAMD +GLAD_API_CALL PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; +#define glBlendFuncSeparate glad_glBlendFuncSeparate +GLAD_API_CALL PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT; +#define glBlendFuncSeparateEXT glad_glBlendFuncSeparateEXT +GLAD_API_CALL PFNGLBLENDFUNCSEPARATEINGRPROC glad_glBlendFuncSeparateINGR; +#define glBlendFuncSeparateINGR glad_glBlendFuncSeparateINGR +GLAD_API_CALL PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC glad_glBlendFuncSeparateIndexedAMD; +#define glBlendFuncSeparateIndexedAMD glad_glBlendFuncSeparateIndexedAMD +GLAD_API_CALL PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; +#define glBlendFuncSeparatei glad_glBlendFuncSeparatei +GLAD_API_CALL PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB; +#define glBlendFuncSeparateiARB glad_glBlendFuncSeparateiARB +GLAD_API_CALL PFNGLBLENDFUNCIPROC glad_glBlendFunci; +#define glBlendFunci glad_glBlendFunci +GLAD_API_CALL PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB; +#define glBlendFunciARB glad_glBlendFunciARB +GLAD_API_CALL PFNGLBLENDPARAMETERINVPROC glad_glBlendParameteriNV; +#define glBlendParameteriNV glad_glBlendParameteriNV +GLAD_API_CALL PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; +#define glBlitFramebuffer glad_glBlitFramebuffer +GLAD_API_CALL PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT; +#define glBlitFramebufferEXT glad_glBlitFramebufferEXT +GLAD_API_CALL PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer; +#define glBlitNamedFramebuffer glad_glBlitNamedFramebuffer +GLAD_API_CALL PFNGLBUFFERADDRESSRANGENVPROC glad_glBufferAddressRangeNV; +#define glBufferAddressRangeNV glad_glBufferAddressRangeNV +GLAD_API_CALL PFNGLBUFFERATTACHMEMORYNVPROC glad_glBufferAttachMemoryNV; +#define glBufferAttachMemoryNV glad_glBufferAttachMemoryNV +GLAD_API_CALL PFNGLBUFFERDATAPROC glad_glBufferData; +#define glBufferData glad_glBufferData +GLAD_API_CALL PFNGLBUFFERDATAARBPROC glad_glBufferDataARB; +#define glBufferDataARB glad_glBufferDataARB +GLAD_API_CALL PFNGLBUFFERPAGECOMMITMENTARBPROC glad_glBufferPageCommitmentARB; +#define glBufferPageCommitmentARB glad_glBufferPageCommitmentARB +GLAD_API_CALL PFNGLBUFFERPAGECOMMITMENTMEMNVPROC glad_glBufferPageCommitmentMemNV; +#define glBufferPageCommitmentMemNV glad_glBufferPageCommitmentMemNV +GLAD_API_CALL PFNGLBUFFERPARAMETERIAPPLEPROC glad_glBufferParameteriAPPLE; +#define glBufferParameteriAPPLE glad_glBufferParameteriAPPLE +GLAD_API_CALL PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; +#define glBufferStorage glad_glBufferStorage +GLAD_API_CALL PFNGLBUFFERSTORAGEEXTERNALEXTPROC glad_glBufferStorageExternalEXT; +#define glBufferStorageExternalEXT glad_glBufferStorageExternalEXT +GLAD_API_CALL PFNGLBUFFERSTORAGEMEMEXTPROC glad_glBufferStorageMemEXT; +#define glBufferStorageMemEXT glad_glBufferStorageMemEXT +GLAD_API_CALL PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; +#define glBufferSubData glad_glBufferSubData +GLAD_API_CALL PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB; +#define glBufferSubDataARB glad_glBufferSubDataARB +GLAD_API_CALL PFNGLCALLCOMMANDLISTNVPROC glad_glCallCommandListNV; +#define glCallCommandListNV glad_glCallCommandListNV +GLAD_API_CALL PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; +#define glCheckFramebufferStatus glad_glCheckFramebufferStatus +GLAD_API_CALL PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; +#define glCheckFramebufferStatusEXT glad_glCheckFramebufferStatusEXT +GLAD_API_CALL PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus; +#define glCheckNamedFramebufferStatus glad_glCheckNamedFramebufferStatus +GLAD_API_CALL PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glad_glCheckNamedFramebufferStatusEXT; +#define glCheckNamedFramebufferStatusEXT glad_glCheckNamedFramebufferStatusEXT +GLAD_API_CALL PFNGLCLAMPCOLORPROC glad_glClampColor; +#define glClampColor glad_glClampColor +GLAD_API_CALL PFNGLCLAMPCOLORARBPROC glad_glClampColorARB; +#define glClampColorARB glad_glClampColorARB +GLAD_API_CALL PFNGLCLEARPROC glad_glClear; +#define glClear glad_glClear +GLAD_API_CALL PFNGLCLEARACCUMXOESPROC glad_glClearAccumxOES; +#define glClearAccumxOES glad_glClearAccumxOES +GLAD_API_CALL PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData; +#define glClearBufferData glad_glClearBufferData +GLAD_API_CALL PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData; +#define glClearBufferSubData glad_glClearBufferSubData +GLAD_API_CALL PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; +#define glClearBufferfi glad_glClearBufferfi +GLAD_API_CALL PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; +#define glClearBufferfv glad_glClearBufferfv +GLAD_API_CALL PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; +#define glClearBufferiv glad_glClearBufferiv +GLAD_API_CALL PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; +#define glClearBufferuiv glad_glClearBufferuiv +GLAD_API_CALL PFNGLCLEARCOLORPROC glad_glClearColor; +#define glClearColor glad_glClearColor +GLAD_API_CALL PFNGLCLEARCOLORIIEXTPROC glad_glClearColorIiEXT; +#define glClearColorIiEXT glad_glClearColorIiEXT +GLAD_API_CALL PFNGLCLEARCOLORIUIEXTPROC glad_glClearColorIuiEXT; +#define glClearColorIuiEXT glad_glClearColorIuiEXT +GLAD_API_CALL PFNGLCLEARCOLORXOESPROC glad_glClearColorxOES; +#define glClearColorxOES glad_glClearColorxOES +GLAD_API_CALL PFNGLCLEARDEPTHPROC glad_glClearDepth; +#define glClearDepth glad_glClearDepth +GLAD_API_CALL PFNGLCLEARDEPTHDNVPROC glad_glClearDepthdNV; +#define glClearDepthdNV glad_glClearDepthdNV +GLAD_API_CALL PFNGLCLEARDEPTHFPROC glad_glClearDepthf; +#define glClearDepthf glad_glClearDepthf +GLAD_API_CALL PFNGLCLEARDEPTHFOESPROC glad_glClearDepthfOES; +#define glClearDepthfOES glad_glClearDepthfOES +GLAD_API_CALL PFNGLCLEARDEPTHXOESPROC glad_glClearDepthxOES; +#define glClearDepthxOES glad_glClearDepthxOES +GLAD_API_CALL PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData; +#define glClearNamedBufferData glad_glClearNamedBufferData +GLAD_API_CALL PFNGLCLEARNAMEDBUFFERDATAEXTPROC glad_glClearNamedBufferDataEXT; +#define glClearNamedBufferDataEXT glad_glClearNamedBufferDataEXT +GLAD_API_CALL PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData; +#define glClearNamedBufferSubData glad_glClearNamedBufferSubData +GLAD_API_CALL PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glad_glClearNamedBufferSubDataEXT; +#define glClearNamedBufferSubDataEXT glad_glClearNamedBufferSubDataEXT +GLAD_API_CALL PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi; +#define glClearNamedFramebufferfi glad_glClearNamedFramebufferfi +GLAD_API_CALL PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv; +#define glClearNamedFramebufferfv glad_glClearNamedFramebufferfv +GLAD_API_CALL PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv; +#define glClearNamedFramebufferiv glad_glClearNamedFramebufferiv +GLAD_API_CALL PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv; +#define glClearNamedFramebufferuiv glad_glClearNamedFramebufferuiv +GLAD_API_CALL PFNGLCLEARSTENCILPROC glad_glClearStencil; +#define glClearStencil glad_glClearStencil +GLAD_API_CALL PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage; +#define glClearTexImage glad_glClearTexImage +GLAD_API_CALL PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage; +#define glClearTexSubImage glad_glClearTexSubImage +GLAD_API_CALL PFNGLCLIENTACTIVETEXTUREARBPROC glad_glClientActiveTextureARB; +#define glClientActiveTextureARB glad_glClientActiveTextureARB +GLAD_API_CALL PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC glad_glClientActiveVertexStreamATI; +#define glClientActiveVertexStreamATI glad_glClientActiveVertexStreamATI +GLAD_API_CALL PFNGLCLIENTATTRIBDEFAULTEXTPROC glad_glClientAttribDefaultEXT; +#define glClientAttribDefaultEXT glad_glClientAttribDefaultEXT +GLAD_API_CALL PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC glad_glClientWaitSemaphoreui64NVX; +#define glClientWaitSemaphoreui64NVX glad_glClientWaitSemaphoreui64NVX +GLAD_API_CALL PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; +#define glClientWaitSync glad_glClientWaitSync +GLAD_API_CALL PFNGLCLIPCONTROLPROC glad_glClipControl; +#define glClipControl glad_glClipControl +GLAD_API_CALL PFNGLCLIPPLANEFOESPROC glad_glClipPlanefOES; +#define glClipPlanefOES glad_glClipPlanefOES +GLAD_API_CALL PFNGLCLIPPLANEXOESPROC glad_glClipPlanexOES; +#define glClipPlanexOES glad_glClipPlanexOES +GLAD_API_CALL PFNGLCOLOR3FVERTEX3FSUNPROC glad_glColor3fVertex3fSUN; +#define glColor3fVertex3fSUN glad_glColor3fVertex3fSUN +GLAD_API_CALL PFNGLCOLOR3FVERTEX3FVSUNPROC glad_glColor3fVertex3fvSUN; +#define glColor3fVertex3fvSUN glad_glColor3fVertex3fvSUN +GLAD_API_CALL PFNGLCOLOR3HNVPROC glad_glColor3hNV; +#define glColor3hNV glad_glColor3hNV +GLAD_API_CALL PFNGLCOLOR3HVNVPROC glad_glColor3hvNV; +#define glColor3hvNV glad_glColor3hvNV +GLAD_API_CALL PFNGLCOLOR3XOESPROC glad_glColor3xOES; +#define glColor3xOES glad_glColor3xOES +GLAD_API_CALL PFNGLCOLOR3XVOESPROC glad_glColor3xvOES; +#define glColor3xvOES glad_glColor3xvOES +GLAD_API_CALL PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glColor4fNormal3fVertex3fSUN; +#define glColor4fNormal3fVertex3fSUN glad_glColor4fNormal3fVertex3fSUN +GLAD_API_CALL PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glColor4fNormal3fVertex3fvSUN; +#define glColor4fNormal3fVertex3fvSUN glad_glColor4fNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLCOLOR4HNVPROC glad_glColor4hNV; +#define glColor4hNV glad_glColor4hNV +GLAD_API_CALL PFNGLCOLOR4HVNVPROC glad_glColor4hvNV; +#define glColor4hvNV glad_glColor4hvNV +GLAD_API_CALL PFNGLCOLOR4UBVERTEX2FSUNPROC glad_glColor4ubVertex2fSUN; +#define glColor4ubVertex2fSUN glad_glColor4ubVertex2fSUN +GLAD_API_CALL PFNGLCOLOR4UBVERTEX2FVSUNPROC glad_glColor4ubVertex2fvSUN; +#define glColor4ubVertex2fvSUN glad_glColor4ubVertex2fvSUN +GLAD_API_CALL PFNGLCOLOR4UBVERTEX3FSUNPROC glad_glColor4ubVertex3fSUN; +#define glColor4ubVertex3fSUN glad_glColor4ubVertex3fSUN +GLAD_API_CALL PFNGLCOLOR4UBVERTEX3FVSUNPROC glad_glColor4ubVertex3fvSUN; +#define glColor4ubVertex3fvSUN glad_glColor4ubVertex3fvSUN +GLAD_API_CALL PFNGLCOLOR4XOESPROC glad_glColor4xOES; +#define glColor4xOES glad_glColor4xOES +GLAD_API_CALL PFNGLCOLOR4XVOESPROC glad_glColor4xvOES; +#define glColor4xvOES glad_glColor4xvOES +GLAD_API_CALL PFNGLCOLORFORMATNVPROC glad_glColorFormatNV; +#define glColorFormatNV glad_glColorFormatNV +GLAD_API_CALL PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI; +#define glColorFragmentOp1ATI glad_glColorFragmentOp1ATI +GLAD_API_CALL PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI; +#define glColorFragmentOp2ATI glad_glColorFragmentOp2ATI +GLAD_API_CALL PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI; +#define glColorFragmentOp3ATI glad_glColorFragmentOp3ATI +GLAD_API_CALL PFNGLCOLORMASKPROC glad_glColorMask; +#define glColorMask glad_glColorMask +GLAD_API_CALL PFNGLCOLORMASKINDEXEDEXTPROC glad_glColorMaskIndexedEXT; +#define glColorMaskIndexedEXT glad_glColorMaskIndexedEXT +GLAD_API_CALL PFNGLCOLORMASKIPROC glad_glColorMaski; +#define glColorMaski glad_glColorMaski +GLAD_API_CALL PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT; +#define glColorPointerEXT glad_glColorPointerEXT +GLAD_API_CALL PFNGLCOLORPOINTERLISTIBMPROC glad_glColorPointerListIBM; +#define glColorPointerListIBM glad_glColorPointerListIBM +GLAD_API_CALL PFNGLCOLORPOINTERVINTELPROC glad_glColorPointervINTEL; +#define glColorPointervINTEL glad_glColorPointervINTEL +GLAD_API_CALL PFNGLCOLORSUBTABLEEXTPROC glad_glColorSubTableEXT; +#define glColorSubTableEXT glad_glColorSubTableEXT +GLAD_API_CALL PFNGLCOLORTABLEEXTPROC glad_glColorTableEXT; +#define glColorTableEXT glad_glColorTableEXT +GLAD_API_CALL PFNGLCOLORTABLEPARAMETERFVSGIPROC glad_glColorTableParameterfvSGI; +#define glColorTableParameterfvSGI glad_glColorTableParameterfvSGI +GLAD_API_CALL PFNGLCOLORTABLEPARAMETERIVSGIPROC glad_glColorTableParameterivSGI; +#define glColorTableParameterivSGI glad_glColorTableParameterivSGI +GLAD_API_CALL PFNGLCOLORTABLESGIPROC glad_glColorTableSGI; +#define glColorTableSGI glad_glColorTableSGI +GLAD_API_CALL PFNGLCOMBINERINPUTNVPROC glad_glCombinerInputNV; +#define glCombinerInputNV glad_glCombinerInputNV +GLAD_API_CALL PFNGLCOMBINEROUTPUTNVPROC glad_glCombinerOutputNV; +#define glCombinerOutputNV glad_glCombinerOutputNV +GLAD_API_CALL PFNGLCOMBINERPARAMETERFNVPROC glad_glCombinerParameterfNV; +#define glCombinerParameterfNV glad_glCombinerParameterfNV +GLAD_API_CALL PFNGLCOMBINERPARAMETERFVNVPROC glad_glCombinerParameterfvNV; +#define glCombinerParameterfvNV glad_glCombinerParameterfvNV +GLAD_API_CALL PFNGLCOMBINERPARAMETERINVPROC glad_glCombinerParameteriNV; +#define glCombinerParameteriNV glad_glCombinerParameteriNV +GLAD_API_CALL PFNGLCOMBINERPARAMETERIVNVPROC glad_glCombinerParameterivNV; +#define glCombinerParameterivNV glad_glCombinerParameterivNV +GLAD_API_CALL PFNGLCOMBINERSTAGEPARAMETERFVNVPROC glad_glCombinerStageParameterfvNV; +#define glCombinerStageParameterfvNV glad_glCombinerStageParameterfvNV +GLAD_API_CALL PFNGLCOMMANDLISTSEGMENTSNVPROC glad_glCommandListSegmentsNV; +#define glCommandListSegmentsNV glad_glCommandListSegmentsNV +GLAD_API_CALL PFNGLCOMPILECOMMANDLISTNVPROC glad_glCompileCommandListNV; +#define glCompileCommandListNV glad_glCompileCommandListNV +GLAD_API_CALL PFNGLCOMPILESHADERPROC glad_glCompileShader; +#define glCompileShader glad_glCompileShader +GLAD_API_CALL PFNGLCOMPILESHADERARBPROC glad_glCompileShaderARB; +#define glCompileShaderARB glad_glCompileShaderARB +GLAD_API_CALL PFNGLCOMPILESHADERINCLUDEARBPROC glad_glCompileShaderIncludeARB; +#define glCompileShaderIncludeARB glad_glCompileShaderIncludeARB +GLAD_API_CALL PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glad_glCompressedMultiTexImage1DEXT; +#define glCompressedMultiTexImage1DEXT glad_glCompressedMultiTexImage1DEXT +GLAD_API_CALL PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glad_glCompressedMultiTexImage2DEXT; +#define glCompressedMultiTexImage2DEXT glad_glCompressedMultiTexImage2DEXT +GLAD_API_CALL PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glad_glCompressedMultiTexImage3DEXT; +#define glCompressedMultiTexImage3DEXT glad_glCompressedMultiTexImage3DEXT +GLAD_API_CALL PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glad_glCompressedMultiTexSubImage1DEXT; +#define glCompressedMultiTexSubImage1DEXT glad_glCompressedMultiTexSubImage1DEXT +GLAD_API_CALL PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glad_glCompressedMultiTexSubImage2DEXT; +#define glCompressedMultiTexSubImage2DEXT glad_glCompressedMultiTexSubImage2DEXT +GLAD_API_CALL PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glad_glCompressedMultiTexSubImage3DEXT; +#define glCompressedMultiTexSubImage3DEXT glad_glCompressedMultiTexSubImage3DEXT +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; +#define glCompressedTexImage1D glad_glCompressedTexImage1D +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB; +#define glCompressedTexImage1DARB glad_glCompressedTexImage1DARB +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; +#define glCompressedTexImage2D glad_glCompressedTexImage2D +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB; +#define glCompressedTexImage2DARB glad_glCompressedTexImage2DARB +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; +#define glCompressedTexImage3D glad_glCompressedTexImage3D +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB; +#define glCompressedTexImage3DARB glad_glCompressedTexImage3DARB +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; +#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB; +#define glCompressedTexSubImage1DARB glad_glCompressedTexSubImage1DARB +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; +#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB; +#define glCompressedTexSubImage2DARB glad_glCompressedTexSubImage2DARB +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; +#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB; +#define glCompressedTexSubImage3DARB glad_glCompressedTexSubImage3DARB +GLAD_API_CALL PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glad_glCompressedTextureImage1DEXT; +#define glCompressedTextureImage1DEXT glad_glCompressedTextureImage1DEXT +GLAD_API_CALL PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glad_glCompressedTextureImage2DEXT; +#define glCompressedTextureImage2DEXT glad_glCompressedTextureImage2DEXT +GLAD_API_CALL PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glad_glCompressedTextureImage3DEXT; +#define glCompressedTextureImage3DEXT glad_glCompressedTextureImage3DEXT +GLAD_API_CALL PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D; +#define glCompressedTextureSubImage1D glad_glCompressedTextureSubImage1D +GLAD_API_CALL PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glad_glCompressedTextureSubImage1DEXT; +#define glCompressedTextureSubImage1DEXT glad_glCompressedTextureSubImage1DEXT +GLAD_API_CALL PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D; +#define glCompressedTextureSubImage2D glad_glCompressedTextureSubImage2D +GLAD_API_CALL PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glad_glCompressedTextureSubImage2DEXT; +#define glCompressedTextureSubImage2DEXT glad_glCompressedTextureSubImage2DEXT +GLAD_API_CALL PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D; +#define glCompressedTextureSubImage3D glad_glCompressedTextureSubImage3D +GLAD_API_CALL PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glad_glCompressedTextureSubImage3DEXT; +#define glCompressedTextureSubImage3DEXT glad_glCompressedTextureSubImage3DEXT +GLAD_API_CALL PFNGLCONSERVATIVERASTERPARAMETERFNVPROC glad_glConservativeRasterParameterfNV; +#define glConservativeRasterParameterfNV glad_glConservativeRasterParameterfNV +GLAD_API_CALL PFNGLCONSERVATIVERASTERPARAMETERINVPROC glad_glConservativeRasterParameteriNV; +#define glConservativeRasterParameteriNV glad_glConservativeRasterParameteriNV +GLAD_API_CALL PFNGLCONVOLUTIONFILTER1DEXTPROC glad_glConvolutionFilter1DEXT; +#define glConvolutionFilter1DEXT glad_glConvolutionFilter1DEXT +GLAD_API_CALL PFNGLCONVOLUTIONFILTER2DEXTPROC glad_glConvolutionFilter2DEXT; +#define glConvolutionFilter2DEXT glad_glConvolutionFilter2DEXT +GLAD_API_CALL PFNGLCONVOLUTIONPARAMETERFEXTPROC glad_glConvolutionParameterfEXT; +#define glConvolutionParameterfEXT glad_glConvolutionParameterfEXT +GLAD_API_CALL PFNGLCONVOLUTIONPARAMETERFVEXTPROC glad_glConvolutionParameterfvEXT; +#define glConvolutionParameterfvEXT glad_glConvolutionParameterfvEXT +GLAD_API_CALL PFNGLCONVOLUTIONPARAMETERIEXTPROC glad_glConvolutionParameteriEXT; +#define glConvolutionParameteriEXT glad_glConvolutionParameteriEXT +GLAD_API_CALL PFNGLCONVOLUTIONPARAMETERIVEXTPROC glad_glConvolutionParameterivEXT; +#define glConvolutionParameterivEXT glad_glConvolutionParameterivEXT +GLAD_API_CALL PFNGLCONVOLUTIONPARAMETERXOESPROC glad_glConvolutionParameterxOES; +#define glConvolutionParameterxOES glad_glConvolutionParameterxOES +GLAD_API_CALL PFNGLCONVOLUTIONPARAMETERXVOESPROC glad_glConvolutionParameterxvOES; +#define glConvolutionParameterxvOES glad_glConvolutionParameterxvOES +GLAD_API_CALL PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; +#define glCopyBufferSubData glad_glCopyBufferSubData +GLAD_API_CALL PFNGLCOPYCOLORSUBTABLEEXTPROC glad_glCopyColorSubTableEXT; +#define glCopyColorSubTableEXT glad_glCopyColorSubTableEXT +GLAD_API_CALL PFNGLCOPYCOLORTABLESGIPROC glad_glCopyColorTableSGI; +#define glCopyColorTableSGI glad_glCopyColorTableSGI +GLAD_API_CALL PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC glad_glCopyConvolutionFilter1DEXT; +#define glCopyConvolutionFilter1DEXT glad_glCopyConvolutionFilter1DEXT +GLAD_API_CALL PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC glad_glCopyConvolutionFilter2DEXT; +#define glCopyConvolutionFilter2DEXT glad_glCopyConvolutionFilter2DEXT +GLAD_API_CALL PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; +#define glCopyImageSubData glad_glCopyImageSubData +GLAD_API_CALL PFNGLCOPYIMAGESUBDATANVPROC glad_glCopyImageSubDataNV; +#define glCopyImageSubDataNV glad_glCopyImageSubDataNV +GLAD_API_CALL PFNGLCOPYMULTITEXIMAGE1DEXTPROC glad_glCopyMultiTexImage1DEXT; +#define glCopyMultiTexImage1DEXT glad_glCopyMultiTexImage1DEXT +GLAD_API_CALL PFNGLCOPYMULTITEXIMAGE2DEXTPROC glad_glCopyMultiTexImage2DEXT; +#define glCopyMultiTexImage2DEXT glad_glCopyMultiTexImage2DEXT +GLAD_API_CALL PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glad_glCopyMultiTexSubImage1DEXT; +#define glCopyMultiTexSubImage1DEXT glad_glCopyMultiTexSubImage1DEXT +GLAD_API_CALL PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glad_glCopyMultiTexSubImage2DEXT; +#define glCopyMultiTexSubImage2DEXT glad_glCopyMultiTexSubImage2DEXT +GLAD_API_CALL PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glad_glCopyMultiTexSubImage3DEXT; +#define glCopyMultiTexSubImage3DEXT glad_glCopyMultiTexSubImage3DEXT +GLAD_API_CALL PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData; +#define glCopyNamedBufferSubData glad_glCopyNamedBufferSubData +GLAD_API_CALL PFNGLCOPYPATHNVPROC glad_glCopyPathNV; +#define glCopyPathNV glad_glCopyPathNV +GLAD_API_CALL PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; +#define glCopyTexImage1D glad_glCopyTexImage1D +GLAD_API_CALL PFNGLCOPYTEXIMAGE1DEXTPROC glad_glCopyTexImage1DEXT; +#define glCopyTexImage1DEXT glad_glCopyTexImage1DEXT +GLAD_API_CALL PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; +#define glCopyTexImage2D glad_glCopyTexImage2D +GLAD_API_CALL PFNGLCOPYTEXIMAGE2DEXTPROC glad_glCopyTexImage2DEXT; +#define glCopyTexImage2DEXT glad_glCopyTexImage2DEXT +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; +#define glCopyTexSubImage1D glad_glCopyTexSubImage1D +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE1DEXTPROC glad_glCopyTexSubImage1DEXT; +#define glCopyTexSubImage1DEXT glad_glCopyTexSubImage1DEXT +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; +#define glCopyTexSubImage2D glad_glCopyTexSubImage2D +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE2DEXTPROC glad_glCopyTexSubImage2DEXT; +#define glCopyTexSubImage2DEXT glad_glCopyTexSubImage2DEXT +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; +#define glCopyTexSubImage3D glad_glCopyTexSubImage3D +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE3DEXTPROC glad_glCopyTexSubImage3DEXT; +#define glCopyTexSubImage3DEXT glad_glCopyTexSubImage3DEXT +GLAD_API_CALL PFNGLCOPYTEXTUREIMAGE1DEXTPROC glad_glCopyTextureImage1DEXT; +#define glCopyTextureImage1DEXT glad_glCopyTextureImage1DEXT +GLAD_API_CALL PFNGLCOPYTEXTUREIMAGE2DEXTPROC glad_glCopyTextureImage2DEXT; +#define glCopyTextureImage2DEXT glad_glCopyTextureImage2DEXT +GLAD_API_CALL PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D; +#define glCopyTextureSubImage1D glad_glCopyTextureSubImage1D +GLAD_API_CALL PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glad_glCopyTextureSubImage1DEXT; +#define glCopyTextureSubImage1DEXT glad_glCopyTextureSubImage1DEXT +GLAD_API_CALL PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D; +#define glCopyTextureSubImage2D glad_glCopyTextureSubImage2D +GLAD_API_CALL PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glad_glCopyTextureSubImage2DEXT; +#define glCopyTextureSubImage2DEXT glad_glCopyTextureSubImage2DEXT +GLAD_API_CALL PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D; +#define glCopyTextureSubImage3D glad_glCopyTextureSubImage3D +GLAD_API_CALL PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glad_glCopyTextureSubImage3DEXT; +#define glCopyTextureSubImage3DEXT glad_glCopyTextureSubImage3DEXT +GLAD_API_CALL PFNGLCOVERFILLPATHINSTANCEDNVPROC glad_glCoverFillPathInstancedNV; +#define glCoverFillPathInstancedNV glad_glCoverFillPathInstancedNV +GLAD_API_CALL PFNGLCOVERFILLPATHNVPROC glad_glCoverFillPathNV; +#define glCoverFillPathNV glad_glCoverFillPathNV +GLAD_API_CALL PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glad_glCoverStrokePathInstancedNV; +#define glCoverStrokePathInstancedNV glad_glCoverStrokePathInstancedNV +GLAD_API_CALL PFNGLCOVERSTROKEPATHNVPROC glad_glCoverStrokePathNV; +#define glCoverStrokePathNV glad_glCoverStrokePathNV +GLAD_API_CALL PFNGLCOVERAGEMODULATIONNVPROC glad_glCoverageModulationNV; +#define glCoverageModulationNV glad_glCoverageModulationNV +GLAD_API_CALL PFNGLCOVERAGEMODULATIONTABLENVPROC glad_glCoverageModulationTableNV; +#define glCoverageModulationTableNV glad_glCoverageModulationTableNV +GLAD_API_CALL PFNGLCREATEBUFFERSPROC glad_glCreateBuffers; +#define glCreateBuffers glad_glCreateBuffers +GLAD_API_CALL PFNGLCREATECOMMANDLISTSNVPROC glad_glCreateCommandListsNV; +#define glCreateCommandListsNV glad_glCreateCommandListsNV +GLAD_API_CALL PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers; +#define glCreateFramebuffers glad_glCreateFramebuffers +GLAD_API_CALL PFNGLCREATEMEMORYOBJECTSEXTPROC glad_glCreateMemoryObjectsEXT; +#define glCreateMemoryObjectsEXT glad_glCreateMemoryObjectsEXT +GLAD_API_CALL PFNGLCREATEPERFQUERYINTELPROC glad_glCreatePerfQueryINTEL; +#define glCreatePerfQueryINTEL glad_glCreatePerfQueryINTEL +GLAD_API_CALL PFNGLCREATEPROGRAMPROC glad_glCreateProgram; +#define glCreateProgram glad_glCreateProgram +GLAD_API_CALL PFNGLCREATEPROGRAMOBJECTARBPROC glad_glCreateProgramObjectARB; +#define glCreateProgramObjectARB glad_glCreateProgramObjectARB +GLAD_API_CALL PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines; +#define glCreateProgramPipelines glad_glCreateProgramPipelines +GLAD_API_CALL PFNGLCREATEPROGRESSFENCENVXPROC glad_glCreateProgressFenceNVX; +#define glCreateProgressFenceNVX glad_glCreateProgressFenceNVX +GLAD_API_CALL PFNGLCREATEQUERIESPROC glad_glCreateQueries; +#define glCreateQueries glad_glCreateQueries +GLAD_API_CALL PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers; +#define glCreateRenderbuffers glad_glCreateRenderbuffers +GLAD_API_CALL PFNGLCREATESAMPLERSPROC glad_glCreateSamplers; +#define glCreateSamplers glad_glCreateSamplers +GLAD_API_CALL PFNGLCREATESEMAPHORESNVPROC glad_glCreateSemaphoresNV; +#define glCreateSemaphoresNV glad_glCreateSemaphoresNV +GLAD_API_CALL PFNGLCREATESHADERPROC glad_glCreateShader; +#define glCreateShader glad_glCreateShader +GLAD_API_CALL PFNGLCREATESHADEROBJECTARBPROC glad_glCreateShaderObjectARB; +#define glCreateShaderObjectARB glad_glCreateShaderObjectARB +GLAD_API_CALL PFNGLCREATESHADERPROGRAMEXTPROC glad_glCreateShaderProgramEXT; +#define glCreateShaderProgramEXT glad_glCreateShaderProgramEXT +GLAD_API_CALL PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv; +#define glCreateShaderProgramv glad_glCreateShaderProgramv +GLAD_API_CALL PFNGLCREATESTATESNVPROC glad_glCreateStatesNV; +#define glCreateStatesNV glad_glCreateStatesNV +GLAD_API_CALL PFNGLCREATESYNCFROMCLEVENTARBPROC glad_glCreateSyncFromCLeventARB; +#define glCreateSyncFromCLeventARB glad_glCreateSyncFromCLeventARB +GLAD_API_CALL PFNGLCREATETEXTURESPROC glad_glCreateTextures; +#define glCreateTextures glad_glCreateTextures +GLAD_API_CALL PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks; +#define glCreateTransformFeedbacks glad_glCreateTransformFeedbacks +GLAD_API_CALL PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays; +#define glCreateVertexArrays glad_glCreateVertexArrays +GLAD_API_CALL PFNGLCULLFACEPROC glad_glCullFace; +#define glCullFace glad_glCullFace +GLAD_API_CALL PFNGLCULLPARAMETERDVEXTPROC glad_glCullParameterdvEXT; +#define glCullParameterdvEXT glad_glCullParameterdvEXT +GLAD_API_CALL PFNGLCULLPARAMETERFVEXTPROC glad_glCullParameterfvEXT; +#define glCullParameterfvEXT glad_glCullParameterfvEXT +GLAD_API_CALL PFNGLCURRENTPALETTEMATRIXARBPROC glad_glCurrentPaletteMatrixARB; +#define glCurrentPaletteMatrixARB glad_glCurrentPaletteMatrixARB +GLAD_API_CALL PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; +#define glDebugMessageCallback glad_glDebugMessageCallback +GLAD_API_CALL PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD; +#define glDebugMessageCallbackAMD glad_glDebugMessageCallbackAMD +GLAD_API_CALL PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; +#define glDebugMessageCallbackARB glad_glDebugMessageCallbackARB +GLAD_API_CALL PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; +#define glDebugMessageControl glad_glDebugMessageControl +GLAD_API_CALL PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; +#define glDebugMessageControlARB glad_glDebugMessageControlARB +GLAD_API_CALL PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD; +#define glDebugMessageEnableAMD glad_glDebugMessageEnableAMD +GLAD_API_CALL PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; +#define glDebugMessageInsert glad_glDebugMessageInsert +GLAD_API_CALL PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD; +#define glDebugMessageInsertAMD glad_glDebugMessageInsertAMD +GLAD_API_CALL PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; +#define glDebugMessageInsertARB glad_glDebugMessageInsertARB +GLAD_API_CALL PFNGLDEFORMSGIXPROC glad_glDeformSGIX; +#define glDeformSGIX glad_glDeformSGIX +GLAD_API_CALL PFNGLDEFORMATIONMAP3DSGIXPROC glad_glDeformationMap3dSGIX; +#define glDeformationMap3dSGIX glad_glDeformationMap3dSGIX +GLAD_API_CALL PFNGLDEFORMATIONMAP3FSGIXPROC glad_glDeformationMap3fSGIX; +#define glDeformationMap3fSGIX glad_glDeformationMap3fSGIX +GLAD_API_CALL PFNGLDELETEASYNCMARKERSSGIXPROC glad_glDeleteAsyncMarkersSGIX; +#define glDeleteAsyncMarkersSGIX glad_glDeleteAsyncMarkersSGIX +GLAD_API_CALL PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; +#define glDeleteBuffers glad_glDeleteBuffers +GLAD_API_CALL PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB; +#define glDeleteBuffersARB glad_glDeleteBuffersARB +GLAD_API_CALL PFNGLDELETECOMMANDLISTSNVPROC glad_glDeleteCommandListsNV; +#define glDeleteCommandListsNV glad_glDeleteCommandListsNV +GLAD_API_CALL PFNGLDELETEFENCESAPPLEPROC glad_glDeleteFencesAPPLE; +#define glDeleteFencesAPPLE glad_glDeleteFencesAPPLE +GLAD_API_CALL PFNGLDELETEFENCESNVPROC glad_glDeleteFencesNV; +#define glDeleteFencesNV glad_glDeleteFencesNV +GLAD_API_CALL PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI; +#define glDeleteFragmentShaderATI glad_glDeleteFragmentShaderATI +GLAD_API_CALL PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; +#define glDeleteFramebuffers glad_glDeleteFramebuffers +GLAD_API_CALL PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; +#define glDeleteFramebuffersEXT glad_glDeleteFramebuffersEXT +GLAD_API_CALL PFNGLDELETEMEMORYOBJECTSEXTPROC glad_glDeleteMemoryObjectsEXT; +#define glDeleteMemoryObjectsEXT glad_glDeleteMemoryObjectsEXT +GLAD_API_CALL PFNGLDELETENAMEDSTRINGARBPROC glad_glDeleteNamedStringARB; +#define glDeleteNamedStringARB glad_glDeleteNamedStringARB +GLAD_API_CALL PFNGLDELETENAMESAMDPROC glad_glDeleteNamesAMD; +#define glDeleteNamesAMD glad_glDeleteNamesAMD +GLAD_API_CALL PFNGLDELETEOBJECTARBPROC glad_glDeleteObjectARB; +#define glDeleteObjectARB glad_glDeleteObjectARB +GLAD_API_CALL PFNGLDELETEOCCLUSIONQUERIESNVPROC glad_glDeleteOcclusionQueriesNV; +#define glDeleteOcclusionQueriesNV glad_glDeleteOcclusionQueriesNV +GLAD_API_CALL PFNGLDELETEPATHSNVPROC glad_glDeletePathsNV; +#define glDeletePathsNV glad_glDeletePathsNV +GLAD_API_CALL PFNGLDELETEPERFMONITORSAMDPROC glad_glDeletePerfMonitorsAMD; +#define glDeletePerfMonitorsAMD glad_glDeletePerfMonitorsAMD +GLAD_API_CALL PFNGLDELETEPERFQUERYINTELPROC glad_glDeletePerfQueryINTEL; +#define glDeletePerfQueryINTEL glad_glDeletePerfQueryINTEL +GLAD_API_CALL PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; +#define glDeleteProgram glad_glDeleteProgram +GLAD_API_CALL PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines; +#define glDeleteProgramPipelines glad_glDeleteProgramPipelines +GLAD_API_CALL PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB; +#define glDeleteProgramsARB glad_glDeleteProgramsARB +GLAD_API_CALL PFNGLDELETEPROGRAMSNVPROC glad_glDeleteProgramsNV; +#define glDeleteProgramsNV glad_glDeleteProgramsNV +GLAD_API_CALL PFNGLDELETEQUERIESPROC glad_glDeleteQueries; +#define glDeleteQueries glad_glDeleteQueries +GLAD_API_CALL PFNGLDELETEQUERIESARBPROC glad_glDeleteQueriesARB; +#define glDeleteQueriesARB glad_glDeleteQueriesARB +GLAD_API_CALL PFNGLDELETEQUERYRESOURCETAGNVPROC glad_glDeleteQueryResourceTagNV; +#define glDeleteQueryResourceTagNV glad_glDeleteQueryResourceTagNV +GLAD_API_CALL PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; +#define glDeleteRenderbuffers glad_glDeleteRenderbuffers +GLAD_API_CALL PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; +#define glDeleteRenderbuffersEXT glad_glDeleteRenderbuffersEXT +GLAD_API_CALL PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; +#define glDeleteSamplers glad_glDeleteSamplers +GLAD_API_CALL PFNGLDELETESEMAPHORESEXTPROC glad_glDeleteSemaphoresEXT; +#define glDeleteSemaphoresEXT glad_glDeleteSemaphoresEXT +GLAD_API_CALL PFNGLDELETESHADERPROC glad_glDeleteShader; +#define glDeleteShader glad_glDeleteShader +GLAD_API_CALL PFNGLDELETESTATESNVPROC glad_glDeleteStatesNV; +#define glDeleteStatesNV glad_glDeleteStatesNV +GLAD_API_CALL PFNGLDELETESYNCPROC glad_glDeleteSync; +#define glDeleteSync glad_glDeleteSync +GLAD_API_CALL PFNGLDELETETEXTURESPROC glad_glDeleteTextures; +#define glDeleteTextures glad_glDeleteTextures +GLAD_API_CALL PFNGLDELETETEXTURESEXTPROC glad_glDeleteTexturesEXT; +#define glDeleteTexturesEXT glad_glDeleteTexturesEXT +GLAD_API_CALL PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; +#define glDeleteTransformFeedbacks glad_glDeleteTransformFeedbacks +GLAD_API_CALL PFNGLDELETETRANSFORMFEEDBACKSNVPROC glad_glDeleteTransformFeedbacksNV; +#define glDeleteTransformFeedbacksNV glad_glDeleteTransformFeedbacksNV +GLAD_API_CALL PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; +#define glDeleteVertexArrays glad_glDeleteVertexArrays +GLAD_API_CALL PFNGLDELETEVERTEXARRAYSAPPLEPROC glad_glDeleteVertexArraysAPPLE; +#define glDeleteVertexArraysAPPLE glad_glDeleteVertexArraysAPPLE +GLAD_API_CALL PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT; +#define glDeleteVertexShaderEXT glad_glDeleteVertexShaderEXT +GLAD_API_CALL PFNGLDEPTHBOUNDSEXTPROC glad_glDepthBoundsEXT; +#define glDepthBoundsEXT glad_glDepthBoundsEXT +GLAD_API_CALL PFNGLDEPTHBOUNDSDNVPROC glad_glDepthBoundsdNV; +#define glDepthBoundsdNV glad_glDepthBoundsdNV +GLAD_API_CALL PFNGLDEPTHFUNCPROC glad_glDepthFunc; +#define glDepthFunc glad_glDepthFunc +GLAD_API_CALL PFNGLDEPTHMASKPROC glad_glDepthMask; +#define glDepthMask glad_glDepthMask +GLAD_API_CALL PFNGLDEPTHRANGEPROC glad_glDepthRange; +#define glDepthRange glad_glDepthRange +GLAD_API_CALL PFNGLDEPTHRANGEARRAYDVNVPROC glad_glDepthRangeArraydvNV; +#define glDepthRangeArraydvNV glad_glDepthRangeArraydvNV +GLAD_API_CALL PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; +#define glDepthRangeArrayv glad_glDepthRangeArrayv +GLAD_API_CALL PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; +#define glDepthRangeIndexed glad_glDepthRangeIndexed +GLAD_API_CALL PFNGLDEPTHRANGEINDEXEDDNVPROC glad_glDepthRangeIndexeddNV; +#define glDepthRangeIndexeddNV glad_glDepthRangeIndexeddNV +GLAD_API_CALL PFNGLDEPTHRANGEDNVPROC glad_glDepthRangedNV; +#define glDepthRangedNV glad_glDepthRangedNV +GLAD_API_CALL PFNGLDEPTHRANGEFPROC glad_glDepthRangef; +#define glDepthRangef glad_glDepthRangef +GLAD_API_CALL PFNGLDEPTHRANGEFOESPROC glad_glDepthRangefOES; +#define glDepthRangefOES glad_glDepthRangefOES +GLAD_API_CALL PFNGLDEPTHRANGEXOESPROC glad_glDepthRangexOES; +#define glDepthRangexOES glad_glDepthRangexOES +GLAD_API_CALL PFNGLDETACHOBJECTARBPROC glad_glDetachObjectARB; +#define glDetachObjectARB glad_glDetachObjectARB +GLAD_API_CALL PFNGLDETACHSHADERPROC glad_glDetachShader; +#define glDetachShader glad_glDetachShader +GLAD_API_CALL PFNGLDETAILTEXFUNCSGISPROC glad_glDetailTexFuncSGIS; +#define glDetailTexFuncSGIS glad_glDetailTexFuncSGIS +GLAD_API_CALL PFNGLDISABLEPROC glad_glDisable; +#define glDisable glad_glDisable +GLAD_API_CALL PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glad_glDisableClientStateIndexedEXT; +#define glDisableClientStateIndexedEXT glad_glDisableClientStateIndexedEXT +GLAD_API_CALL PFNGLDISABLECLIENTSTATEIEXTPROC glad_glDisableClientStateiEXT; +#define glDisableClientStateiEXT glad_glDisableClientStateiEXT +GLAD_API_CALL PFNGLDISABLEINDEXEDEXTPROC glad_glDisableIndexedEXT; +#define glDisableIndexedEXT glad_glDisableIndexedEXT +GLAD_API_CALL PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT; +#define glDisableVariantClientStateEXT glad_glDisableVariantClientStateEXT +GLAD_API_CALL PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib; +#define glDisableVertexArrayAttrib glad_glDisableVertexArrayAttrib +GLAD_API_CALL PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glad_glDisableVertexArrayAttribEXT; +#define glDisableVertexArrayAttribEXT glad_glDisableVertexArrayAttribEXT +GLAD_API_CALL PFNGLDISABLEVERTEXARRAYEXTPROC glad_glDisableVertexArrayEXT; +#define glDisableVertexArrayEXT glad_glDisableVertexArrayEXT +GLAD_API_CALL PFNGLDISABLEVERTEXATTRIBAPPLEPROC glad_glDisableVertexAttribAPPLE; +#define glDisableVertexAttribAPPLE glad_glDisableVertexAttribAPPLE +GLAD_API_CALL PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; +#define glDisableVertexAttribArray glad_glDisableVertexAttribArray +GLAD_API_CALL PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB; +#define glDisableVertexAttribArrayARB glad_glDisableVertexAttribArrayARB +GLAD_API_CALL PFNGLDISABLEIPROC glad_glDisablei; +#define glDisablei glad_glDisablei +GLAD_API_CALL PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute; +#define glDispatchCompute glad_glDispatchCompute +GLAD_API_CALL PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glad_glDispatchComputeGroupSizeARB; +#define glDispatchComputeGroupSizeARB glad_glDispatchComputeGroupSizeARB +GLAD_API_CALL PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect; +#define glDispatchComputeIndirect glad_glDispatchComputeIndirect +GLAD_API_CALL PFNGLDRAWARRAYSPROC glad_glDrawArrays; +#define glDrawArrays glad_glDrawArrays +GLAD_API_CALL PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT; +#define glDrawArraysEXT glad_glDrawArraysEXT +GLAD_API_CALL PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; +#define glDrawArraysIndirect glad_glDrawArraysIndirect +GLAD_API_CALL PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; +#define glDrawArraysInstanced glad_glDrawArraysInstanced +GLAD_API_CALL PFNGLDRAWARRAYSINSTANCEDARBPROC glad_glDrawArraysInstancedARB; +#define glDrawArraysInstancedARB glad_glDrawArraysInstancedARB +GLAD_API_CALL PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance; +#define glDrawArraysInstancedBaseInstance glad_glDrawArraysInstancedBaseInstance +GLAD_API_CALL PFNGLDRAWARRAYSINSTANCEDEXTPROC glad_glDrawArraysInstancedEXT; +#define glDrawArraysInstancedEXT glad_glDrawArraysInstancedEXT +GLAD_API_CALL PFNGLDRAWBUFFERPROC glad_glDrawBuffer; +#define glDrawBuffer glad_glDrawBuffer +GLAD_API_CALL PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; +#define glDrawBuffers glad_glDrawBuffers +GLAD_API_CALL PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB; +#define glDrawBuffersARB glad_glDrawBuffersARB +GLAD_API_CALL PFNGLDRAWBUFFERSATIPROC glad_glDrawBuffersATI; +#define glDrawBuffersATI glad_glDrawBuffersATI +GLAD_API_CALL PFNGLDRAWCOMMANDSADDRESSNVPROC glad_glDrawCommandsAddressNV; +#define glDrawCommandsAddressNV glad_glDrawCommandsAddressNV +GLAD_API_CALL PFNGLDRAWCOMMANDSNVPROC glad_glDrawCommandsNV; +#define glDrawCommandsNV glad_glDrawCommandsNV +GLAD_API_CALL PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC glad_glDrawCommandsStatesAddressNV; +#define glDrawCommandsStatesAddressNV glad_glDrawCommandsStatesAddressNV +GLAD_API_CALL PFNGLDRAWCOMMANDSSTATESNVPROC glad_glDrawCommandsStatesNV; +#define glDrawCommandsStatesNV glad_glDrawCommandsStatesNV +GLAD_API_CALL PFNGLDRAWELEMENTARRAYAPPLEPROC glad_glDrawElementArrayAPPLE; +#define glDrawElementArrayAPPLE glad_glDrawElementArrayAPPLE +GLAD_API_CALL PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI; +#define glDrawElementArrayATI glad_glDrawElementArrayATI +GLAD_API_CALL PFNGLDRAWELEMENTSPROC glad_glDrawElements; +#define glDrawElements glad_glDrawElements +GLAD_API_CALL PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; +#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex +GLAD_API_CALL PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; +#define glDrawElementsIndirect glad_glDrawElementsIndirect +GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; +#define glDrawElementsInstanced glad_glDrawElementsInstanced +GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDARBPROC glad_glDrawElementsInstancedARB; +#define glDrawElementsInstancedARB glad_glDrawElementsInstancedARB +GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance; +#define glDrawElementsInstancedBaseInstance glad_glDrawElementsInstancedBaseInstance +GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; +#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex +GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance; +#define glDrawElementsInstancedBaseVertexBaseInstance glad_glDrawElementsInstancedBaseVertexBaseInstance +GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT; +#define glDrawElementsInstancedEXT glad_glDrawElementsInstancedEXT +GLAD_API_CALL PFNGLDRAWMESHARRAYSSUNPROC glad_glDrawMeshArraysSUN; +#define glDrawMeshArraysSUN glad_glDrawMeshArraysSUN +GLAD_API_CALL PFNGLDRAWMESHTASKSINDIRECTNVPROC glad_glDrawMeshTasksIndirectNV; +#define glDrawMeshTasksIndirectNV glad_glDrawMeshTasksIndirectNV +GLAD_API_CALL PFNGLDRAWMESHTASKSNVPROC glad_glDrawMeshTasksNV; +#define glDrawMeshTasksNV glad_glDrawMeshTasksNV +GLAD_API_CALL PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC glad_glDrawRangeElementArrayAPPLE; +#define glDrawRangeElementArrayAPPLE glad_glDrawRangeElementArrayAPPLE +GLAD_API_CALL PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI; +#define glDrawRangeElementArrayATI glad_glDrawRangeElementArrayATI +GLAD_API_CALL PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; +#define glDrawRangeElements glad_glDrawRangeElements +GLAD_API_CALL PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; +#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex +GLAD_API_CALL PFNGLDRAWRANGEELEMENTSEXTPROC glad_glDrawRangeElementsEXT; +#define glDrawRangeElementsEXT glad_glDrawRangeElementsEXT +GLAD_API_CALL PFNGLDRAWTEXTURENVPROC glad_glDrawTextureNV; +#define glDrawTextureNV glad_glDrawTextureNV +GLAD_API_CALL PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback; +#define glDrawTransformFeedback glad_glDrawTransformFeedback +GLAD_API_CALL PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced; +#define glDrawTransformFeedbackInstanced glad_glDrawTransformFeedbackInstanced +GLAD_API_CALL PFNGLDRAWTRANSFORMFEEDBACKNVPROC glad_glDrawTransformFeedbackNV; +#define glDrawTransformFeedbackNV glad_glDrawTransformFeedbackNV +GLAD_API_CALL PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream; +#define glDrawTransformFeedbackStream glad_glDrawTransformFeedbackStream +GLAD_API_CALL PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced; +#define glDrawTransformFeedbackStreamInstanced glad_glDrawTransformFeedbackStreamInstanced +GLAD_API_CALL PFNGLDRAWVKIMAGENVPROC glad_glDrawVkImageNV; +#define glDrawVkImageNV glad_glDrawVkImageNV +GLAD_API_CALL PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC glad_glEGLImageTargetTexStorageEXT; +#define glEGLImageTargetTexStorageEXT glad_glEGLImageTargetTexStorageEXT +GLAD_API_CALL PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC glad_glEGLImageTargetTextureStorageEXT; +#define glEGLImageTargetTextureStorageEXT glad_glEGLImageTargetTextureStorageEXT +GLAD_API_CALL PFNGLEDGEFLAGFORMATNVPROC glad_glEdgeFlagFormatNV; +#define glEdgeFlagFormatNV glad_glEdgeFlagFormatNV +GLAD_API_CALL PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT; +#define glEdgeFlagPointerEXT glad_glEdgeFlagPointerEXT +GLAD_API_CALL PFNGLEDGEFLAGPOINTERLISTIBMPROC glad_glEdgeFlagPointerListIBM; +#define glEdgeFlagPointerListIBM glad_glEdgeFlagPointerListIBM +GLAD_API_CALL PFNGLELEMENTPOINTERAPPLEPROC glad_glElementPointerAPPLE; +#define glElementPointerAPPLE glad_glElementPointerAPPLE +GLAD_API_CALL PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI; +#define glElementPointerATI glad_glElementPointerATI +GLAD_API_CALL PFNGLENABLEPROC glad_glEnable; +#define glEnable glad_glEnable +GLAD_API_CALL PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glad_glEnableClientStateIndexedEXT; +#define glEnableClientStateIndexedEXT glad_glEnableClientStateIndexedEXT +GLAD_API_CALL PFNGLENABLECLIENTSTATEIEXTPROC glad_glEnableClientStateiEXT; +#define glEnableClientStateiEXT glad_glEnableClientStateiEXT +GLAD_API_CALL PFNGLENABLEINDEXEDEXTPROC glad_glEnableIndexedEXT; +#define glEnableIndexedEXT glad_glEnableIndexedEXT +GLAD_API_CALL PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT; +#define glEnableVariantClientStateEXT glad_glEnableVariantClientStateEXT +GLAD_API_CALL PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib; +#define glEnableVertexArrayAttrib glad_glEnableVertexArrayAttrib +GLAD_API_CALL PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glad_glEnableVertexArrayAttribEXT; +#define glEnableVertexArrayAttribEXT glad_glEnableVertexArrayAttribEXT +GLAD_API_CALL PFNGLENABLEVERTEXARRAYEXTPROC glad_glEnableVertexArrayEXT; +#define glEnableVertexArrayEXT glad_glEnableVertexArrayEXT +GLAD_API_CALL PFNGLENABLEVERTEXATTRIBAPPLEPROC glad_glEnableVertexAttribAPPLE; +#define glEnableVertexAttribAPPLE glad_glEnableVertexAttribAPPLE +GLAD_API_CALL PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; +#define glEnableVertexAttribArray glad_glEnableVertexAttribArray +GLAD_API_CALL PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB; +#define glEnableVertexAttribArrayARB glad_glEnableVertexAttribArrayARB +GLAD_API_CALL PFNGLENABLEIPROC glad_glEnablei; +#define glEnablei glad_glEnablei +GLAD_API_CALL PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; +#define glEndConditionalRender glad_glEndConditionalRender +GLAD_API_CALL PFNGLENDCONDITIONALRENDERNVPROC glad_glEndConditionalRenderNV; +#define glEndConditionalRenderNV glad_glEndConditionalRenderNV +GLAD_API_CALL PFNGLENDCONDITIONALRENDERNVXPROC glad_glEndConditionalRenderNVX; +#define glEndConditionalRenderNVX glad_glEndConditionalRenderNVX +GLAD_API_CALL PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI; +#define glEndFragmentShaderATI glad_glEndFragmentShaderATI +GLAD_API_CALL PFNGLENDOCCLUSIONQUERYNVPROC glad_glEndOcclusionQueryNV; +#define glEndOcclusionQueryNV glad_glEndOcclusionQueryNV +GLAD_API_CALL PFNGLENDPERFMONITORAMDPROC glad_glEndPerfMonitorAMD; +#define glEndPerfMonitorAMD glad_glEndPerfMonitorAMD +GLAD_API_CALL PFNGLENDPERFQUERYINTELPROC glad_glEndPerfQueryINTEL; +#define glEndPerfQueryINTEL glad_glEndPerfQueryINTEL +GLAD_API_CALL PFNGLENDQUERYPROC glad_glEndQuery; +#define glEndQuery glad_glEndQuery +GLAD_API_CALL PFNGLENDQUERYARBPROC glad_glEndQueryARB; +#define glEndQueryARB glad_glEndQueryARB +GLAD_API_CALL PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed; +#define glEndQueryIndexed glad_glEndQueryIndexed +GLAD_API_CALL PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; +#define glEndTransformFeedback glad_glEndTransformFeedback +GLAD_API_CALL PFNGLENDTRANSFORMFEEDBACKEXTPROC glad_glEndTransformFeedbackEXT; +#define glEndTransformFeedbackEXT glad_glEndTransformFeedbackEXT +GLAD_API_CALL PFNGLENDTRANSFORMFEEDBACKNVPROC glad_glEndTransformFeedbackNV; +#define glEndTransformFeedbackNV glad_glEndTransformFeedbackNV +GLAD_API_CALL PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT; +#define glEndVertexShaderEXT glad_glEndVertexShaderEXT +GLAD_API_CALL PFNGLENDVIDEOCAPTURENVPROC glad_glEndVideoCaptureNV; +#define glEndVideoCaptureNV glad_glEndVideoCaptureNV +GLAD_API_CALL PFNGLEVALCOORD1XOESPROC glad_glEvalCoord1xOES; +#define glEvalCoord1xOES glad_glEvalCoord1xOES +GLAD_API_CALL PFNGLEVALCOORD1XVOESPROC glad_glEvalCoord1xvOES; +#define glEvalCoord1xvOES glad_glEvalCoord1xvOES +GLAD_API_CALL PFNGLEVALCOORD2XOESPROC glad_glEvalCoord2xOES; +#define glEvalCoord2xOES glad_glEvalCoord2xOES +GLAD_API_CALL PFNGLEVALCOORD2XVOESPROC glad_glEvalCoord2xvOES; +#define glEvalCoord2xvOES glad_glEvalCoord2xvOES +GLAD_API_CALL PFNGLEVALMAPSNVPROC glad_glEvalMapsNV; +#define glEvalMapsNV glad_glEvalMapsNV +GLAD_API_CALL PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB; +#define glEvaluateDepthValuesARB glad_glEvaluateDepthValuesARB +GLAD_API_CALL PFNGLEXECUTEPROGRAMNVPROC glad_glExecuteProgramNV; +#define glExecuteProgramNV glad_glExecuteProgramNV +GLAD_API_CALL PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT; +#define glExtractComponentEXT glad_glExtractComponentEXT +GLAD_API_CALL PFNGLFEEDBACKBUFFERXOESPROC glad_glFeedbackBufferxOES; +#define glFeedbackBufferxOES glad_glFeedbackBufferxOES +GLAD_API_CALL PFNGLFENCESYNCPROC glad_glFenceSync; +#define glFenceSync glad_glFenceSync +GLAD_API_CALL PFNGLFINALCOMBINERINPUTNVPROC glad_glFinalCombinerInputNV; +#define glFinalCombinerInputNV glad_glFinalCombinerInputNV +GLAD_API_CALL PFNGLFINISHPROC glad_glFinish; +#define glFinish glad_glFinish +GLAD_API_CALL PFNGLFINISHASYNCSGIXPROC glad_glFinishAsyncSGIX; +#define glFinishAsyncSGIX glad_glFinishAsyncSGIX +GLAD_API_CALL PFNGLFINISHFENCEAPPLEPROC glad_glFinishFenceAPPLE; +#define glFinishFenceAPPLE glad_glFinishFenceAPPLE +GLAD_API_CALL PFNGLFINISHFENCENVPROC glad_glFinishFenceNV; +#define glFinishFenceNV glad_glFinishFenceNV +GLAD_API_CALL PFNGLFINISHOBJECTAPPLEPROC glad_glFinishObjectAPPLE; +#define glFinishObjectAPPLE glad_glFinishObjectAPPLE +GLAD_API_CALL PFNGLFINISHTEXTURESUNXPROC glad_glFinishTextureSUNX; +#define glFinishTextureSUNX glad_glFinishTextureSUNX +GLAD_API_CALL PFNGLFLUSHPROC glad_glFlush; +#define glFlush glad_glFlush +GLAD_API_CALL PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; +#define glFlushMappedBufferRange glad_glFlushMappedBufferRange +GLAD_API_CALL PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glad_glFlushMappedBufferRangeAPPLE; +#define glFlushMappedBufferRangeAPPLE glad_glFlushMappedBufferRangeAPPLE +GLAD_API_CALL PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange; +#define glFlushMappedNamedBufferRange glad_glFlushMappedNamedBufferRange +GLAD_API_CALL PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glad_glFlushMappedNamedBufferRangeEXT; +#define glFlushMappedNamedBufferRangeEXT glad_glFlushMappedNamedBufferRangeEXT +GLAD_API_CALL PFNGLFLUSHPIXELDATARANGENVPROC glad_glFlushPixelDataRangeNV; +#define glFlushPixelDataRangeNV glad_glFlushPixelDataRangeNV +GLAD_API_CALL PFNGLFLUSHRASTERSGIXPROC glad_glFlushRasterSGIX; +#define glFlushRasterSGIX glad_glFlushRasterSGIX +GLAD_API_CALL PFNGLFLUSHSTATICDATAIBMPROC glad_glFlushStaticDataIBM; +#define glFlushStaticDataIBM glad_glFlushStaticDataIBM +GLAD_API_CALL PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC glad_glFlushVertexArrayRangeAPPLE; +#define glFlushVertexArrayRangeAPPLE glad_glFlushVertexArrayRangeAPPLE +GLAD_API_CALL PFNGLFLUSHVERTEXARRAYRANGENVPROC glad_glFlushVertexArrayRangeNV; +#define glFlushVertexArrayRangeNV glad_glFlushVertexArrayRangeNV +GLAD_API_CALL PFNGLFOGCOORDFORMATNVPROC glad_glFogCoordFormatNV; +#define glFogCoordFormatNV glad_glFogCoordFormatNV +GLAD_API_CALL PFNGLFOGCOORDPOINTEREXTPROC glad_glFogCoordPointerEXT; +#define glFogCoordPointerEXT glad_glFogCoordPointerEXT +GLAD_API_CALL PFNGLFOGCOORDPOINTERLISTIBMPROC glad_glFogCoordPointerListIBM; +#define glFogCoordPointerListIBM glad_glFogCoordPointerListIBM +GLAD_API_CALL PFNGLFOGCOORDDEXTPROC glad_glFogCoorddEXT; +#define glFogCoorddEXT glad_glFogCoorddEXT +GLAD_API_CALL PFNGLFOGCOORDDVEXTPROC glad_glFogCoorddvEXT; +#define glFogCoorddvEXT glad_glFogCoorddvEXT +GLAD_API_CALL PFNGLFOGCOORDFEXTPROC glad_glFogCoordfEXT; +#define glFogCoordfEXT glad_glFogCoordfEXT +GLAD_API_CALL PFNGLFOGCOORDFVEXTPROC glad_glFogCoordfvEXT; +#define glFogCoordfvEXT glad_glFogCoordfvEXT +GLAD_API_CALL PFNGLFOGCOORDHNVPROC glad_glFogCoordhNV; +#define glFogCoordhNV glad_glFogCoordhNV +GLAD_API_CALL PFNGLFOGCOORDHVNVPROC glad_glFogCoordhvNV; +#define glFogCoordhvNV glad_glFogCoordhvNV +GLAD_API_CALL PFNGLFOGFUNCSGISPROC glad_glFogFuncSGIS; +#define glFogFuncSGIS glad_glFogFuncSGIS +GLAD_API_CALL PFNGLFOGXOESPROC glad_glFogxOES; +#define glFogxOES glad_glFogxOES +GLAD_API_CALL PFNGLFOGXVOESPROC glad_glFogxvOES; +#define glFogxvOES glad_glFogxvOES +GLAD_API_CALL PFNGLFRAGMENTCOLORMATERIALSGIXPROC glad_glFragmentColorMaterialSGIX; +#define glFragmentColorMaterialSGIX glad_glFragmentColorMaterialSGIX +GLAD_API_CALL PFNGLFRAGMENTCOVERAGECOLORNVPROC glad_glFragmentCoverageColorNV; +#define glFragmentCoverageColorNV glad_glFragmentCoverageColorNV +GLAD_API_CALL PFNGLFRAGMENTLIGHTMODELFSGIXPROC glad_glFragmentLightModelfSGIX; +#define glFragmentLightModelfSGIX glad_glFragmentLightModelfSGIX +GLAD_API_CALL PFNGLFRAGMENTLIGHTMODELFVSGIXPROC glad_glFragmentLightModelfvSGIX; +#define glFragmentLightModelfvSGIX glad_glFragmentLightModelfvSGIX +GLAD_API_CALL PFNGLFRAGMENTLIGHTMODELISGIXPROC glad_glFragmentLightModeliSGIX; +#define glFragmentLightModeliSGIX glad_glFragmentLightModeliSGIX +GLAD_API_CALL PFNGLFRAGMENTLIGHTMODELIVSGIXPROC glad_glFragmentLightModelivSGIX; +#define glFragmentLightModelivSGIX glad_glFragmentLightModelivSGIX +GLAD_API_CALL PFNGLFRAGMENTLIGHTFSGIXPROC glad_glFragmentLightfSGIX; +#define glFragmentLightfSGIX glad_glFragmentLightfSGIX +GLAD_API_CALL PFNGLFRAGMENTLIGHTFVSGIXPROC glad_glFragmentLightfvSGIX; +#define glFragmentLightfvSGIX glad_glFragmentLightfvSGIX +GLAD_API_CALL PFNGLFRAGMENTLIGHTISGIXPROC glad_glFragmentLightiSGIX; +#define glFragmentLightiSGIX glad_glFragmentLightiSGIX +GLAD_API_CALL PFNGLFRAGMENTLIGHTIVSGIXPROC glad_glFragmentLightivSGIX; +#define glFragmentLightivSGIX glad_glFragmentLightivSGIX +GLAD_API_CALL PFNGLFRAGMENTMATERIALFSGIXPROC glad_glFragmentMaterialfSGIX; +#define glFragmentMaterialfSGIX glad_glFragmentMaterialfSGIX +GLAD_API_CALL PFNGLFRAGMENTMATERIALFVSGIXPROC glad_glFragmentMaterialfvSGIX; +#define glFragmentMaterialfvSGIX glad_glFragmentMaterialfvSGIX +GLAD_API_CALL PFNGLFRAGMENTMATERIALISGIXPROC glad_glFragmentMaterialiSGIX; +#define glFragmentMaterialiSGIX glad_glFragmentMaterialiSGIX +GLAD_API_CALL PFNGLFRAGMENTMATERIALIVSGIXPROC glad_glFragmentMaterialivSGIX; +#define glFragmentMaterialivSGIX glad_glFragmentMaterialivSGIX +GLAD_API_CALL PFNGLFRAMETERMINATORGREMEDYPROC glad_glFrameTerminatorGREMEDY; +#define glFrameTerminatorGREMEDY glad_glFrameTerminatorGREMEDY +GLAD_API_CALL PFNGLFRAMEZOOMSGIXPROC glad_glFrameZoomSGIX; +#define glFrameZoomSGIX glad_glFrameZoomSGIX +GLAD_API_CALL PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glad_glFramebufferDrawBufferEXT; +#define glFramebufferDrawBufferEXT glad_glFramebufferDrawBufferEXT +GLAD_API_CALL PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glad_glFramebufferDrawBuffersEXT; +#define glFramebufferDrawBuffersEXT glad_glFramebufferDrawBuffersEXT +GLAD_API_CALL PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC glad_glFramebufferFetchBarrierEXT; +#define glFramebufferFetchBarrierEXT glad_glFramebufferFetchBarrierEXT +GLAD_API_CALL PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri; +#define glFramebufferParameteri glad_glFramebufferParameteri +GLAD_API_CALL PFNGLFRAMEBUFFERPARAMETERIMESAPROC glad_glFramebufferParameteriMESA; +#define glFramebufferParameteriMESA glad_glFramebufferParameteriMESA +GLAD_API_CALL PFNGLFRAMEBUFFERREADBUFFEREXTPROC glad_glFramebufferReadBufferEXT; +#define glFramebufferReadBufferEXT glad_glFramebufferReadBufferEXT +GLAD_API_CALL PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; +#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer +GLAD_API_CALL PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; +#define glFramebufferRenderbufferEXT glad_glFramebufferRenderbufferEXT +GLAD_API_CALL PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB; +#define glFramebufferSampleLocationsfvARB glad_glFramebufferSampleLocationsfvARB +GLAD_API_CALL PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glFramebufferSampleLocationsfvNV; +#define glFramebufferSampleLocationsfvNV glad_glFramebufferSampleLocationsfvNV +GLAD_API_CALL PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glFramebufferSamplePositionsfvAMD; +#define glFramebufferSamplePositionsfvAMD glad_glFramebufferSamplePositionsfvAMD +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; +#define glFramebufferTexture glad_glFramebufferTexture +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; +#define glFramebufferTexture1D glad_glFramebufferTexture1D +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; +#define glFramebufferTexture1DEXT glad_glFramebufferTexture1DEXT +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; +#define glFramebufferTexture2D glad_glFramebufferTexture2D +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; +#define glFramebufferTexture2DEXT glad_glFramebufferTexture2DEXT +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; +#define glFramebufferTexture3D glad_glFramebufferTexture3D +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; +#define glFramebufferTexture3DEXT glad_glFramebufferTexture3DEXT +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREARBPROC glad_glFramebufferTextureARB; +#define glFramebufferTextureARB glad_glFramebufferTextureARB +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREEXTPROC glad_glFramebufferTextureEXT; +#define glFramebufferTextureEXT glad_glFramebufferTextureEXT +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glad_glFramebufferTextureFaceARB; +#define glFramebufferTextureFaceARB glad_glFramebufferTextureFaceARB +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC glad_glFramebufferTextureFaceEXT; +#define glFramebufferTextureFaceEXT glad_glFramebufferTextureFaceEXT +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; +#define glFramebufferTextureLayer glad_glFramebufferTextureLayer +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glad_glFramebufferTextureLayerARB; +#define glFramebufferTextureLayerARB glad_glFramebufferTextureLayerARB +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glad_glFramebufferTextureLayerEXT; +#define glFramebufferTextureLayerEXT glad_glFramebufferTextureLayerEXT +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glad_glFramebufferTextureMultiviewOVR; +#define glFramebufferTextureMultiviewOVR glad_glFramebufferTextureMultiviewOVR +GLAD_API_CALL PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI; +#define glFreeObjectBufferATI glad_glFreeObjectBufferATI +GLAD_API_CALL PFNGLFRONTFACEPROC glad_glFrontFace; +#define glFrontFace glad_glFrontFace +GLAD_API_CALL PFNGLFRUSTUMFOESPROC glad_glFrustumfOES; +#define glFrustumfOES glad_glFrustumfOES +GLAD_API_CALL PFNGLFRUSTUMXOESPROC glad_glFrustumxOES; +#define glFrustumxOES glad_glFrustumxOES +GLAD_API_CALL PFNGLGENASYNCMARKERSSGIXPROC glad_glGenAsyncMarkersSGIX; +#define glGenAsyncMarkersSGIX glad_glGenAsyncMarkersSGIX +GLAD_API_CALL PFNGLGENBUFFERSPROC glad_glGenBuffers; +#define glGenBuffers glad_glGenBuffers +GLAD_API_CALL PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB; +#define glGenBuffersARB glad_glGenBuffersARB +GLAD_API_CALL PFNGLGENFENCESAPPLEPROC glad_glGenFencesAPPLE; +#define glGenFencesAPPLE glad_glGenFencesAPPLE +GLAD_API_CALL PFNGLGENFENCESNVPROC glad_glGenFencesNV; +#define glGenFencesNV glad_glGenFencesNV +GLAD_API_CALL PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI; +#define glGenFragmentShadersATI glad_glGenFragmentShadersATI +GLAD_API_CALL PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; +#define glGenFramebuffers glad_glGenFramebuffers +GLAD_API_CALL PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; +#define glGenFramebuffersEXT glad_glGenFramebuffersEXT +GLAD_API_CALL PFNGLGENNAMESAMDPROC glad_glGenNamesAMD; +#define glGenNamesAMD glad_glGenNamesAMD +GLAD_API_CALL PFNGLGENOCCLUSIONQUERIESNVPROC glad_glGenOcclusionQueriesNV; +#define glGenOcclusionQueriesNV glad_glGenOcclusionQueriesNV +GLAD_API_CALL PFNGLGENPATHSNVPROC glad_glGenPathsNV; +#define glGenPathsNV glad_glGenPathsNV +GLAD_API_CALL PFNGLGENPERFMONITORSAMDPROC glad_glGenPerfMonitorsAMD; +#define glGenPerfMonitorsAMD glad_glGenPerfMonitorsAMD +GLAD_API_CALL PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines; +#define glGenProgramPipelines glad_glGenProgramPipelines +GLAD_API_CALL PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB; +#define glGenProgramsARB glad_glGenProgramsARB +GLAD_API_CALL PFNGLGENPROGRAMSNVPROC glad_glGenProgramsNV; +#define glGenProgramsNV glad_glGenProgramsNV +GLAD_API_CALL PFNGLGENQUERIESPROC glad_glGenQueries; +#define glGenQueries glad_glGenQueries +GLAD_API_CALL PFNGLGENQUERIESARBPROC glad_glGenQueriesARB; +#define glGenQueriesARB glad_glGenQueriesARB +GLAD_API_CALL PFNGLGENQUERYRESOURCETAGNVPROC glad_glGenQueryResourceTagNV; +#define glGenQueryResourceTagNV glad_glGenQueryResourceTagNV +GLAD_API_CALL PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; +#define glGenRenderbuffers glad_glGenRenderbuffers +GLAD_API_CALL PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; +#define glGenRenderbuffersEXT glad_glGenRenderbuffersEXT +GLAD_API_CALL PFNGLGENSAMPLERSPROC glad_glGenSamplers; +#define glGenSamplers glad_glGenSamplers +GLAD_API_CALL PFNGLGENSEMAPHORESEXTPROC glad_glGenSemaphoresEXT; +#define glGenSemaphoresEXT glad_glGenSemaphoresEXT +GLAD_API_CALL PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT; +#define glGenSymbolsEXT glad_glGenSymbolsEXT +GLAD_API_CALL PFNGLGENTEXTURESPROC glad_glGenTextures; +#define glGenTextures glad_glGenTextures +GLAD_API_CALL PFNGLGENTEXTURESEXTPROC glad_glGenTexturesEXT; +#define glGenTexturesEXT glad_glGenTexturesEXT +GLAD_API_CALL PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; +#define glGenTransformFeedbacks glad_glGenTransformFeedbacks +GLAD_API_CALL PFNGLGENTRANSFORMFEEDBACKSNVPROC glad_glGenTransformFeedbacksNV; +#define glGenTransformFeedbacksNV glad_glGenTransformFeedbacksNV +GLAD_API_CALL PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; +#define glGenVertexArrays glad_glGenVertexArrays +GLAD_API_CALL PFNGLGENVERTEXARRAYSAPPLEPROC glad_glGenVertexArraysAPPLE; +#define glGenVertexArraysAPPLE glad_glGenVertexArraysAPPLE +GLAD_API_CALL PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT; +#define glGenVertexShadersEXT glad_glGenVertexShadersEXT +GLAD_API_CALL PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; +#define glGenerateMipmap glad_glGenerateMipmap +GLAD_API_CALL PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; +#define glGenerateMipmapEXT glad_glGenerateMipmapEXT +GLAD_API_CALL PFNGLGENERATEMULTITEXMIPMAPEXTPROC glad_glGenerateMultiTexMipmapEXT; +#define glGenerateMultiTexMipmapEXT glad_glGenerateMultiTexMipmapEXT +GLAD_API_CALL PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap; +#define glGenerateTextureMipmap glad_glGenerateTextureMipmap +GLAD_API_CALL PFNGLGENERATETEXTUREMIPMAPEXTPROC glad_glGenerateTextureMipmapEXT; +#define glGenerateTextureMipmapEXT glad_glGenerateTextureMipmapEXT +GLAD_API_CALL PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv; +#define glGetActiveAtomicCounterBufferiv glad_glGetActiveAtomicCounterBufferiv +GLAD_API_CALL PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; +#define glGetActiveAttrib glad_glGetActiveAttrib +GLAD_API_CALL PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB; +#define glGetActiveAttribARB glad_glGetActiveAttribARB +GLAD_API_CALL PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName; +#define glGetActiveSubroutineName glad_glGetActiveSubroutineName +GLAD_API_CALL PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName; +#define glGetActiveSubroutineUniformName glad_glGetActiveSubroutineUniformName +GLAD_API_CALL PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv; +#define glGetActiveSubroutineUniformiv glad_glGetActiveSubroutineUniformiv +GLAD_API_CALL PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; +#define glGetActiveUniform glad_glGetActiveUniform +GLAD_API_CALL PFNGLGETACTIVEUNIFORMARBPROC glad_glGetActiveUniformARB; +#define glGetActiveUniformARB glad_glGetActiveUniformARB +GLAD_API_CALL PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; +#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName +GLAD_API_CALL PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; +#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv +GLAD_API_CALL PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; +#define glGetActiveUniformName glad_glGetActiveUniformName +GLAD_API_CALL PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; +#define glGetActiveUniformsiv glad_glGetActiveUniformsiv +GLAD_API_CALL PFNGLGETACTIVEVARYINGNVPROC glad_glGetActiveVaryingNV; +#define glGetActiveVaryingNV glad_glGetActiveVaryingNV +GLAD_API_CALL PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI; +#define glGetArrayObjectfvATI glad_glGetArrayObjectfvATI +GLAD_API_CALL PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI; +#define glGetArrayObjectivATI glad_glGetArrayObjectivATI +GLAD_API_CALL PFNGLGETATTACHEDOBJECTSARBPROC glad_glGetAttachedObjectsARB; +#define glGetAttachedObjectsARB glad_glGetAttachedObjectsARB +GLAD_API_CALL PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; +#define glGetAttachedShaders glad_glGetAttachedShaders +GLAD_API_CALL PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; +#define glGetAttribLocation glad_glGetAttribLocation +GLAD_API_CALL PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB; +#define glGetAttribLocationARB glad_glGetAttribLocationARB +GLAD_API_CALL PFNGLGETBOOLEANINDEXEDVEXTPROC glad_glGetBooleanIndexedvEXT; +#define glGetBooleanIndexedvEXT glad_glGetBooleanIndexedvEXT +GLAD_API_CALL PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; +#define glGetBooleani_v glad_glGetBooleani_v +GLAD_API_CALL PFNGLGETBOOLEANVPROC glad_glGetBooleanv; +#define glGetBooleanv glad_glGetBooleanv +GLAD_API_CALL PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; +#define glGetBufferParameteri64v glad_glGetBufferParameteri64v +GLAD_API_CALL PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; +#define glGetBufferParameteriv glad_glGetBufferParameteriv +GLAD_API_CALL PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB; +#define glGetBufferParameterivARB glad_glGetBufferParameterivARB +GLAD_API_CALL PFNGLGETBUFFERPARAMETERUI64VNVPROC glad_glGetBufferParameterui64vNV; +#define glGetBufferParameterui64vNV glad_glGetBufferParameterui64vNV +GLAD_API_CALL PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; +#define glGetBufferPointerv glad_glGetBufferPointerv +GLAD_API_CALL PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB; +#define glGetBufferPointervARB glad_glGetBufferPointervARB +GLAD_API_CALL PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; +#define glGetBufferSubData glad_glGetBufferSubData +GLAD_API_CALL PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB; +#define glGetBufferSubDataARB glad_glGetBufferSubDataARB +GLAD_API_CALL PFNGLGETCLIPPLANEFOESPROC glad_glGetClipPlanefOES; +#define glGetClipPlanefOES glad_glGetClipPlanefOES +GLAD_API_CALL PFNGLGETCLIPPLANEXOESPROC glad_glGetClipPlanexOES; +#define glGetClipPlanexOES glad_glGetClipPlanexOES +GLAD_API_CALL PFNGLGETCOLORTABLEEXTPROC glad_glGetColorTableEXT; +#define glGetColorTableEXT glad_glGetColorTableEXT +GLAD_API_CALL PFNGLGETCOLORTABLEPARAMETERFVEXTPROC glad_glGetColorTableParameterfvEXT; +#define glGetColorTableParameterfvEXT glad_glGetColorTableParameterfvEXT +GLAD_API_CALL PFNGLGETCOLORTABLEPARAMETERFVSGIPROC glad_glGetColorTableParameterfvSGI; +#define glGetColorTableParameterfvSGI glad_glGetColorTableParameterfvSGI +GLAD_API_CALL PFNGLGETCOLORTABLEPARAMETERIVEXTPROC glad_glGetColorTableParameterivEXT; +#define glGetColorTableParameterivEXT glad_glGetColorTableParameterivEXT +GLAD_API_CALL PFNGLGETCOLORTABLEPARAMETERIVSGIPROC glad_glGetColorTableParameterivSGI; +#define glGetColorTableParameterivSGI glad_glGetColorTableParameterivSGI +GLAD_API_CALL PFNGLGETCOLORTABLESGIPROC glad_glGetColorTableSGI; +#define glGetColorTableSGI glad_glGetColorTableSGI +GLAD_API_CALL PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glad_glGetCombinerInputParameterfvNV; +#define glGetCombinerInputParameterfvNV glad_glGetCombinerInputParameterfvNV +GLAD_API_CALL PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glad_glGetCombinerInputParameterivNV; +#define glGetCombinerInputParameterivNV glad_glGetCombinerInputParameterivNV +GLAD_API_CALL PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glad_glGetCombinerOutputParameterfvNV; +#define glGetCombinerOutputParameterfvNV glad_glGetCombinerOutputParameterfvNV +GLAD_API_CALL PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glad_glGetCombinerOutputParameterivNV; +#define glGetCombinerOutputParameterivNV glad_glGetCombinerOutputParameterivNV +GLAD_API_CALL PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC glad_glGetCombinerStageParameterfvNV; +#define glGetCombinerStageParameterfvNV glad_glGetCombinerStageParameterfvNV +GLAD_API_CALL PFNGLGETCOMMANDHEADERNVPROC glad_glGetCommandHeaderNV; +#define glGetCommandHeaderNV glad_glGetCommandHeaderNV +GLAD_API_CALL PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glad_glGetCompressedMultiTexImageEXT; +#define glGetCompressedMultiTexImageEXT glad_glGetCompressedMultiTexImageEXT +GLAD_API_CALL PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; +#define glGetCompressedTexImage glad_glGetCompressedTexImage +GLAD_API_CALL PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB; +#define glGetCompressedTexImageARB glad_glGetCompressedTexImageARB +GLAD_API_CALL PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage; +#define glGetCompressedTextureImage glad_glGetCompressedTextureImage +GLAD_API_CALL PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glad_glGetCompressedTextureImageEXT; +#define glGetCompressedTextureImageEXT glad_glGetCompressedTextureImageEXT +GLAD_API_CALL PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage; +#define glGetCompressedTextureSubImage glad_glGetCompressedTextureSubImage +GLAD_API_CALL PFNGLGETCONVOLUTIONFILTEREXTPROC glad_glGetConvolutionFilterEXT; +#define glGetConvolutionFilterEXT glad_glGetConvolutionFilterEXT +GLAD_API_CALL PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC glad_glGetConvolutionParameterfvEXT; +#define glGetConvolutionParameterfvEXT glad_glGetConvolutionParameterfvEXT +GLAD_API_CALL PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC glad_glGetConvolutionParameterivEXT; +#define glGetConvolutionParameterivEXT glad_glGetConvolutionParameterivEXT +GLAD_API_CALL PFNGLGETCONVOLUTIONPARAMETERXVOESPROC glad_glGetConvolutionParameterxvOES; +#define glGetConvolutionParameterxvOES glad_glGetConvolutionParameterxvOES +GLAD_API_CALL PFNGLGETCOVERAGEMODULATIONTABLENVPROC glad_glGetCoverageModulationTableNV; +#define glGetCoverageModulationTableNV glad_glGetCoverageModulationTableNV +GLAD_API_CALL PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; +#define glGetDebugMessageLog glad_glGetDebugMessageLog +GLAD_API_CALL PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD; +#define glGetDebugMessageLogAMD glad_glGetDebugMessageLogAMD +GLAD_API_CALL PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; +#define glGetDebugMessageLogARB glad_glGetDebugMessageLogARB +GLAD_API_CALL PFNGLGETDETAILTEXFUNCSGISPROC glad_glGetDetailTexFuncSGIS; +#define glGetDetailTexFuncSGIS glad_glGetDetailTexFuncSGIS +GLAD_API_CALL PFNGLGETDOUBLEINDEXEDVEXTPROC glad_glGetDoubleIndexedvEXT; +#define glGetDoubleIndexedvEXT glad_glGetDoubleIndexedvEXT +GLAD_API_CALL PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v; +#define glGetDoublei_v glad_glGetDoublei_v +GLAD_API_CALL PFNGLGETDOUBLEI_VEXTPROC glad_glGetDoublei_vEXT; +#define glGetDoublei_vEXT glad_glGetDoublei_vEXT +GLAD_API_CALL PFNGLGETDOUBLEVPROC glad_glGetDoublev; +#define glGetDoublev glad_glGetDoublev +GLAD_API_CALL PFNGLGETERRORPROC glad_glGetError; +#define glGetError glad_glGetError +GLAD_API_CALL PFNGLGETFENCEIVNVPROC glad_glGetFenceivNV; +#define glGetFenceivNV glad_glGetFenceivNV +GLAD_API_CALL PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glad_glGetFinalCombinerInputParameterfvNV; +#define glGetFinalCombinerInputParameterfvNV glad_glGetFinalCombinerInputParameterfvNV +GLAD_API_CALL PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glad_glGetFinalCombinerInputParameterivNV; +#define glGetFinalCombinerInputParameterivNV glad_glGetFinalCombinerInputParameterivNV +GLAD_API_CALL PFNGLGETFIRSTPERFQUERYIDINTELPROC glad_glGetFirstPerfQueryIdINTEL; +#define glGetFirstPerfQueryIdINTEL glad_glGetFirstPerfQueryIdINTEL +GLAD_API_CALL PFNGLGETFIXEDVOESPROC glad_glGetFixedvOES; +#define glGetFixedvOES glad_glGetFixedvOES +GLAD_API_CALL PFNGLGETFLOATINDEXEDVEXTPROC glad_glGetFloatIndexedvEXT; +#define glGetFloatIndexedvEXT glad_glGetFloatIndexedvEXT +GLAD_API_CALL PFNGLGETFLOATI_VPROC glad_glGetFloati_v; +#define glGetFloati_v glad_glGetFloati_v +GLAD_API_CALL PFNGLGETFLOATI_VEXTPROC glad_glGetFloati_vEXT; +#define glGetFloati_vEXT glad_glGetFloati_vEXT +GLAD_API_CALL PFNGLGETFLOATVPROC glad_glGetFloatv; +#define glGetFloatv glad_glGetFloatv +GLAD_API_CALL PFNGLGETFOGFUNCSGISPROC glad_glGetFogFuncSGIS; +#define glGetFogFuncSGIS glad_glGetFogFuncSGIS +GLAD_API_CALL PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; +#define glGetFragDataIndex glad_glGetFragDataIndex +GLAD_API_CALL PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; +#define glGetFragDataLocation glad_glGetFragDataLocation +GLAD_API_CALL PFNGLGETFRAGDATALOCATIONEXTPROC glad_glGetFragDataLocationEXT; +#define glGetFragDataLocationEXT glad_glGetFragDataLocationEXT +GLAD_API_CALL PFNGLGETFRAGMENTLIGHTFVSGIXPROC glad_glGetFragmentLightfvSGIX; +#define glGetFragmentLightfvSGIX glad_glGetFragmentLightfvSGIX +GLAD_API_CALL PFNGLGETFRAGMENTLIGHTIVSGIXPROC glad_glGetFragmentLightivSGIX; +#define glGetFragmentLightivSGIX glad_glGetFragmentLightivSGIX +GLAD_API_CALL PFNGLGETFRAGMENTMATERIALFVSGIXPROC glad_glGetFragmentMaterialfvSGIX; +#define glGetFragmentMaterialfvSGIX glad_glGetFragmentMaterialfvSGIX +GLAD_API_CALL PFNGLGETFRAGMENTMATERIALIVSGIXPROC glad_glGetFragmentMaterialivSGIX; +#define glGetFragmentMaterialivSGIX glad_glGetFragmentMaterialivSGIX +GLAD_API_CALL PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; +#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv +GLAD_API_CALL PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; +#define glGetFramebufferAttachmentParameterivEXT glad_glGetFramebufferAttachmentParameterivEXT +GLAD_API_CALL PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetFramebufferParameterfvAMD; +#define glGetFramebufferParameterfvAMD glad_glGetFramebufferParameterfvAMD +GLAD_API_CALL PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv; +#define glGetFramebufferParameteriv glad_glGetFramebufferParameteriv +GLAD_API_CALL PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetFramebufferParameterivEXT; +#define glGetFramebufferParameterivEXT glad_glGetFramebufferParameterivEXT +GLAD_API_CALL PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC glad_glGetFramebufferParameterivMESA; +#define glGetFramebufferParameterivMESA glad_glGetFramebufferParameterivMESA +GLAD_API_CALL PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus; +#define glGetGraphicsResetStatus glad_glGetGraphicsResetStatus +GLAD_API_CALL PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_glGetGraphicsResetStatusARB; +#define glGetGraphicsResetStatusARB glad_glGetGraphicsResetStatusARB +GLAD_API_CALL PFNGLGETHANDLEARBPROC glad_glGetHandleARB; +#define glGetHandleARB glad_glGetHandleARB +GLAD_API_CALL PFNGLGETHISTOGRAMEXTPROC glad_glGetHistogramEXT; +#define glGetHistogramEXT glad_glGetHistogramEXT +GLAD_API_CALL PFNGLGETHISTOGRAMPARAMETERFVEXTPROC glad_glGetHistogramParameterfvEXT; +#define glGetHistogramParameterfvEXT glad_glGetHistogramParameterfvEXT +GLAD_API_CALL PFNGLGETHISTOGRAMPARAMETERIVEXTPROC glad_glGetHistogramParameterivEXT; +#define glGetHistogramParameterivEXT glad_glGetHistogramParameterivEXT +GLAD_API_CALL PFNGLGETHISTOGRAMPARAMETERXVOESPROC glad_glGetHistogramParameterxvOES; +#define glGetHistogramParameterxvOES glad_glGetHistogramParameterxvOES +GLAD_API_CALL PFNGLGETIMAGEHANDLEARBPROC glad_glGetImageHandleARB; +#define glGetImageHandleARB glad_glGetImageHandleARB +GLAD_API_CALL PFNGLGETIMAGEHANDLENVPROC glad_glGetImageHandleNV; +#define glGetImageHandleNV glad_glGetImageHandleNV +GLAD_API_CALL PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC glad_glGetImageTransformParameterfvHP; +#define glGetImageTransformParameterfvHP glad_glGetImageTransformParameterfvHP +GLAD_API_CALL PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC glad_glGetImageTransformParameterivHP; +#define glGetImageTransformParameterivHP glad_glGetImageTransformParameterivHP +GLAD_API_CALL PFNGLGETINFOLOGARBPROC glad_glGetInfoLogARB; +#define glGetInfoLogARB glad_glGetInfoLogARB +GLAD_API_CALL PFNGLGETINSTRUMENTSSGIXPROC glad_glGetInstrumentsSGIX; +#define glGetInstrumentsSGIX glad_glGetInstrumentsSGIX +GLAD_API_CALL PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; +#define glGetInteger64i_v glad_glGetInteger64i_v +GLAD_API_CALL PFNGLGETINTEGER64VPROC glad_glGetInteger64v; +#define glGetInteger64v glad_glGetInteger64v +GLAD_API_CALL PFNGLGETINTEGERINDEXEDVEXTPROC glad_glGetIntegerIndexedvEXT; +#define glGetIntegerIndexedvEXT glad_glGetIntegerIndexedvEXT +GLAD_API_CALL PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; +#define glGetIntegeri_v glad_glGetIntegeri_v +GLAD_API_CALL PFNGLGETINTEGERUI64I_VNVPROC glad_glGetIntegerui64i_vNV; +#define glGetIntegerui64i_vNV glad_glGetIntegerui64i_vNV +GLAD_API_CALL PFNGLGETINTEGERUI64VNVPROC glad_glGetIntegerui64vNV; +#define glGetIntegerui64vNV glad_glGetIntegerui64vNV +GLAD_API_CALL PFNGLGETINTEGERVPROC glad_glGetIntegerv; +#define glGetIntegerv glad_glGetIntegerv +GLAD_API_CALL PFNGLGETINTERNALFORMATSAMPLEIVNVPROC glad_glGetInternalformatSampleivNV; +#define glGetInternalformatSampleivNV glad_glGetInternalformatSampleivNV +GLAD_API_CALL PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v; +#define glGetInternalformati64v glad_glGetInternalformati64v +GLAD_API_CALL PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; +#define glGetInternalformativ glad_glGetInternalformativ +GLAD_API_CALL PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT; +#define glGetInvariantBooleanvEXT glad_glGetInvariantBooleanvEXT +GLAD_API_CALL PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT; +#define glGetInvariantFloatvEXT glad_glGetInvariantFloatvEXT +GLAD_API_CALL PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT; +#define glGetInvariantIntegervEXT glad_glGetInvariantIntegervEXT +GLAD_API_CALL PFNGLGETLIGHTXOESPROC glad_glGetLightxOES; +#define glGetLightxOES glad_glGetLightxOES +GLAD_API_CALL PFNGLGETLISTPARAMETERFVSGIXPROC glad_glGetListParameterfvSGIX; +#define glGetListParameterfvSGIX glad_glGetListParameterfvSGIX +GLAD_API_CALL PFNGLGETLISTPARAMETERIVSGIXPROC glad_glGetListParameterivSGIX; +#define glGetListParameterivSGIX glad_glGetListParameterivSGIX +GLAD_API_CALL PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT; +#define glGetLocalConstantBooleanvEXT glad_glGetLocalConstantBooleanvEXT +GLAD_API_CALL PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT; +#define glGetLocalConstantFloatvEXT glad_glGetLocalConstantFloatvEXT +GLAD_API_CALL PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT; +#define glGetLocalConstantIntegervEXT glad_glGetLocalConstantIntegervEXT +GLAD_API_CALL PFNGLGETMAPATTRIBPARAMETERFVNVPROC glad_glGetMapAttribParameterfvNV; +#define glGetMapAttribParameterfvNV glad_glGetMapAttribParameterfvNV +GLAD_API_CALL PFNGLGETMAPATTRIBPARAMETERIVNVPROC glad_glGetMapAttribParameterivNV; +#define glGetMapAttribParameterivNV glad_glGetMapAttribParameterivNV +GLAD_API_CALL PFNGLGETMAPCONTROLPOINTSNVPROC glad_glGetMapControlPointsNV; +#define glGetMapControlPointsNV glad_glGetMapControlPointsNV +GLAD_API_CALL PFNGLGETMAPPARAMETERFVNVPROC glad_glGetMapParameterfvNV; +#define glGetMapParameterfvNV glad_glGetMapParameterfvNV +GLAD_API_CALL PFNGLGETMAPPARAMETERIVNVPROC glad_glGetMapParameterivNV; +#define glGetMapParameterivNV glad_glGetMapParameterivNV +GLAD_API_CALL PFNGLGETMAPXVOESPROC glad_glGetMapxvOES; +#define glGetMapxvOES glad_glGetMapxvOES +GLAD_API_CALL PFNGLGETMATERIALXOESPROC glad_glGetMaterialxOES; +#define glGetMaterialxOES glad_glGetMaterialxOES +GLAD_API_CALL PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC glad_glGetMemoryObjectDetachedResourcesuivNV; +#define glGetMemoryObjectDetachedResourcesuivNV glad_glGetMemoryObjectDetachedResourcesuivNV +GLAD_API_CALL PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC glad_glGetMemoryObjectParameterivEXT; +#define glGetMemoryObjectParameterivEXT glad_glGetMemoryObjectParameterivEXT +GLAD_API_CALL PFNGLGETMINMAXEXTPROC glad_glGetMinmaxEXT; +#define glGetMinmaxEXT glad_glGetMinmaxEXT +GLAD_API_CALL PFNGLGETMINMAXPARAMETERFVEXTPROC glad_glGetMinmaxParameterfvEXT; +#define glGetMinmaxParameterfvEXT glad_glGetMinmaxParameterfvEXT +GLAD_API_CALL PFNGLGETMINMAXPARAMETERIVEXTPROC glad_glGetMinmaxParameterivEXT; +#define glGetMinmaxParameterivEXT glad_glGetMinmaxParameterivEXT +GLAD_API_CALL PFNGLGETMULTITEXENVFVEXTPROC glad_glGetMultiTexEnvfvEXT; +#define glGetMultiTexEnvfvEXT glad_glGetMultiTexEnvfvEXT +GLAD_API_CALL PFNGLGETMULTITEXENVIVEXTPROC glad_glGetMultiTexEnvivEXT; +#define glGetMultiTexEnvivEXT glad_glGetMultiTexEnvivEXT +GLAD_API_CALL PFNGLGETMULTITEXGENDVEXTPROC glad_glGetMultiTexGendvEXT; +#define glGetMultiTexGendvEXT glad_glGetMultiTexGendvEXT +GLAD_API_CALL PFNGLGETMULTITEXGENFVEXTPROC glad_glGetMultiTexGenfvEXT; +#define glGetMultiTexGenfvEXT glad_glGetMultiTexGenfvEXT +GLAD_API_CALL PFNGLGETMULTITEXGENIVEXTPROC glad_glGetMultiTexGenivEXT; +#define glGetMultiTexGenivEXT glad_glGetMultiTexGenivEXT +GLAD_API_CALL PFNGLGETMULTITEXIMAGEEXTPROC glad_glGetMultiTexImageEXT; +#define glGetMultiTexImageEXT glad_glGetMultiTexImageEXT +GLAD_API_CALL PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glad_glGetMultiTexLevelParameterfvEXT; +#define glGetMultiTexLevelParameterfvEXT glad_glGetMultiTexLevelParameterfvEXT +GLAD_API_CALL PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glad_glGetMultiTexLevelParameterivEXT; +#define glGetMultiTexLevelParameterivEXT glad_glGetMultiTexLevelParameterivEXT +GLAD_API_CALL PFNGLGETMULTITEXPARAMETERIIVEXTPROC glad_glGetMultiTexParameterIivEXT; +#define glGetMultiTexParameterIivEXT glad_glGetMultiTexParameterIivEXT +GLAD_API_CALL PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glad_glGetMultiTexParameterIuivEXT; +#define glGetMultiTexParameterIuivEXT glad_glGetMultiTexParameterIuivEXT +GLAD_API_CALL PFNGLGETMULTITEXPARAMETERFVEXTPROC glad_glGetMultiTexParameterfvEXT; +#define glGetMultiTexParameterfvEXT glad_glGetMultiTexParameterfvEXT +GLAD_API_CALL PFNGLGETMULTITEXPARAMETERIVEXTPROC glad_glGetMultiTexParameterivEXT; +#define glGetMultiTexParameterivEXT glad_glGetMultiTexParameterivEXT +GLAD_API_CALL PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; +#define glGetMultisamplefv glad_glGetMultisamplefv +GLAD_API_CALL PFNGLGETMULTISAMPLEFVNVPROC glad_glGetMultisamplefvNV; +#define glGetMultisamplefvNV glad_glGetMultisamplefvNV +GLAD_API_CALL PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v; +#define glGetNamedBufferParameteri64v glad_glGetNamedBufferParameteri64v +GLAD_API_CALL PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv; +#define glGetNamedBufferParameteriv glad_glGetNamedBufferParameteriv +GLAD_API_CALL PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glad_glGetNamedBufferParameterivEXT; +#define glGetNamedBufferParameterivEXT glad_glGetNamedBufferParameterivEXT +GLAD_API_CALL PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glad_glGetNamedBufferParameterui64vNV; +#define glGetNamedBufferParameterui64vNV glad_glGetNamedBufferParameterui64vNV +GLAD_API_CALL PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv; +#define glGetNamedBufferPointerv glad_glGetNamedBufferPointerv +GLAD_API_CALL PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glad_glGetNamedBufferPointervEXT; +#define glGetNamedBufferPointervEXT glad_glGetNamedBufferPointervEXT +GLAD_API_CALL PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData; +#define glGetNamedBufferSubData glad_glGetNamedBufferSubData +GLAD_API_CALL PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glad_glGetNamedBufferSubDataEXT; +#define glGetNamedBufferSubDataEXT glad_glGetNamedBufferSubDataEXT +GLAD_API_CALL PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv; +#define glGetNamedFramebufferAttachmentParameteriv glad_glGetNamedFramebufferAttachmentParameteriv +GLAD_API_CALL PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetNamedFramebufferAttachmentParameterivEXT; +#define glGetNamedFramebufferAttachmentParameterivEXT glad_glGetNamedFramebufferAttachmentParameterivEXT +GLAD_API_CALL PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetNamedFramebufferParameterfvAMD; +#define glGetNamedFramebufferParameterfvAMD glad_glGetNamedFramebufferParameterfvAMD +GLAD_API_CALL PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv; +#define glGetNamedFramebufferParameteriv glad_glGetNamedFramebufferParameteriv +GLAD_API_CALL PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetNamedFramebufferParameterivEXT; +#define glGetNamedFramebufferParameterivEXT glad_glGetNamedFramebufferParameterivEXT +GLAD_API_CALL PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glad_glGetNamedProgramLocalParameterIivEXT; +#define glGetNamedProgramLocalParameterIivEXT glad_glGetNamedProgramLocalParameterIivEXT +GLAD_API_CALL PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glad_glGetNamedProgramLocalParameterIuivEXT; +#define glGetNamedProgramLocalParameterIuivEXT glad_glGetNamedProgramLocalParameterIuivEXT +GLAD_API_CALL PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glad_glGetNamedProgramLocalParameterdvEXT; +#define glGetNamedProgramLocalParameterdvEXT glad_glGetNamedProgramLocalParameterdvEXT +GLAD_API_CALL PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glad_glGetNamedProgramLocalParameterfvEXT; +#define glGetNamedProgramLocalParameterfvEXT glad_glGetNamedProgramLocalParameterfvEXT +GLAD_API_CALL PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glad_glGetNamedProgramStringEXT; +#define glGetNamedProgramStringEXT glad_glGetNamedProgramStringEXT +GLAD_API_CALL PFNGLGETNAMEDPROGRAMIVEXTPROC glad_glGetNamedProgramivEXT; +#define glGetNamedProgramivEXT glad_glGetNamedProgramivEXT +GLAD_API_CALL PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv; +#define glGetNamedRenderbufferParameteriv glad_glGetNamedRenderbufferParameteriv +GLAD_API_CALL PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glad_glGetNamedRenderbufferParameterivEXT; +#define glGetNamedRenderbufferParameterivEXT glad_glGetNamedRenderbufferParameterivEXT +GLAD_API_CALL PFNGLGETNAMEDSTRINGARBPROC glad_glGetNamedStringARB; +#define glGetNamedStringARB glad_glGetNamedStringARB +GLAD_API_CALL PFNGLGETNAMEDSTRINGIVARBPROC glad_glGetNamedStringivARB; +#define glGetNamedStringivARB glad_glGetNamedStringivARB +GLAD_API_CALL PFNGLGETNEXTPERFQUERYIDINTELPROC glad_glGetNextPerfQueryIdINTEL; +#define glGetNextPerfQueryIdINTEL glad_glGetNextPerfQueryIdINTEL +GLAD_API_CALL PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI; +#define glGetObjectBufferfvATI glad_glGetObjectBufferfvATI +GLAD_API_CALL PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI; +#define glGetObjectBufferivATI glad_glGetObjectBufferivATI +GLAD_API_CALL PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; +#define glGetObjectLabel glad_glGetObjectLabel +GLAD_API_CALL PFNGLGETOBJECTLABELEXTPROC glad_glGetObjectLabelEXT; +#define glGetObjectLabelEXT glad_glGetObjectLabelEXT +GLAD_API_CALL PFNGLGETOBJECTPARAMETERFVARBPROC glad_glGetObjectParameterfvARB; +#define glGetObjectParameterfvARB glad_glGetObjectParameterfvARB +GLAD_API_CALL PFNGLGETOBJECTPARAMETERIVAPPLEPROC glad_glGetObjectParameterivAPPLE; +#define glGetObjectParameterivAPPLE glad_glGetObjectParameterivAPPLE +GLAD_API_CALL PFNGLGETOBJECTPARAMETERIVARBPROC glad_glGetObjectParameterivARB; +#define glGetObjectParameterivARB glad_glGetObjectParameterivARB +GLAD_API_CALL PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; +#define glGetObjectPtrLabel glad_glGetObjectPtrLabel +GLAD_API_CALL PFNGLGETOCCLUSIONQUERYIVNVPROC glad_glGetOcclusionQueryivNV; +#define glGetOcclusionQueryivNV glad_glGetOcclusionQueryivNV +GLAD_API_CALL PFNGLGETOCCLUSIONQUERYUIVNVPROC glad_glGetOcclusionQueryuivNV; +#define glGetOcclusionQueryuivNV glad_glGetOcclusionQueryuivNV +GLAD_API_CALL PFNGLGETPATHCOMMANDSNVPROC glad_glGetPathCommandsNV; +#define glGetPathCommandsNV glad_glGetPathCommandsNV +GLAD_API_CALL PFNGLGETPATHCOORDSNVPROC glad_glGetPathCoordsNV; +#define glGetPathCoordsNV glad_glGetPathCoordsNV +GLAD_API_CALL PFNGLGETPATHDASHARRAYNVPROC glad_glGetPathDashArrayNV; +#define glGetPathDashArrayNV glad_glGetPathDashArrayNV +GLAD_API_CALL PFNGLGETPATHLENGTHNVPROC glad_glGetPathLengthNV; +#define glGetPathLengthNV glad_glGetPathLengthNV +GLAD_API_CALL PFNGLGETPATHMETRICRANGENVPROC glad_glGetPathMetricRangeNV; +#define glGetPathMetricRangeNV glad_glGetPathMetricRangeNV +GLAD_API_CALL PFNGLGETPATHMETRICSNVPROC glad_glGetPathMetricsNV; +#define glGetPathMetricsNV glad_glGetPathMetricsNV +GLAD_API_CALL PFNGLGETPATHPARAMETERFVNVPROC glad_glGetPathParameterfvNV; +#define glGetPathParameterfvNV glad_glGetPathParameterfvNV +GLAD_API_CALL PFNGLGETPATHPARAMETERIVNVPROC glad_glGetPathParameterivNV; +#define glGetPathParameterivNV glad_glGetPathParameterivNV +GLAD_API_CALL PFNGLGETPATHSPACINGNVPROC glad_glGetPathSpacingNV; +#define glGetPathSpacingNV glad_glGetPathSpacingNV +GLAD_API_CALL PFNGLGETPERFCOUNTERINFOINTELPROC glad_glGetPerfCounterInfoINTEL; +#define glGetPerfCounterInfoINTEL glad_glGetPerfCounterInfoINTEL +GLAD_API_CALL PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glad_glGetPerfMonitorCounterDataAMD; +#define glGetPerfMonitorCounterDataAMD glad_glGetPerfMonitorCounterDataAMD +GLAD_API_CALL PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glad_glGetPerfMonitorCounterInfoAMD; +#define glGetPerfMonitorCounterInfoAMD glad_glGetPerfMonitorCounterInfoAMD +GLAD_API_CALL PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glad_glGetPerfMonitorCounterStringAMD; +#define glGetPerfMonitorCounterStringAMD glad_glGetPerfMonitorCounterStringAMD +GLAD_API_CALL PFNGLGETPERFMONITORCOUNTERSAMDPROC glad_glGetPerfMonitorCountersAMD; +#define glGetPerfMonitorCountersAMD glad_glGetPerfMonitorCountersAMD +GLAD_API_CALL PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glad_glGetPerfMonitorGroupStringAMD; +#define glGetPerfMonitorGroupStringAMD glad_glGetPerfMonitorGroupStringAMD +GLAD_API_CALL PFNGLGETPERFMONITORGROUPSAMDPROC glad_glGetPerfMonitorGroupsAMD; +#define glGetPerfMonitorGroupsAMD glad_glGetPerfMonitorGroupsAMD +GLAD_API_CALL PFNGLGETPERFQUERYDATAINTELPROC glad_glGetPerfQueryDataINTEL; +#define glGetPerfQueryDataINTEL glad_glGetPerfQueryDataINTEL +GLAD_API_CALL PFNGLGETPERFQUERYIDBYNAMEINTELPROC glad_glGetPerfQueryIdByNameINTEL; +#define glGetPerfQueryIdByNameINTEL glad_glGetPerfQueryIdByNameINTEL +GLAD_API_CALL PFNGLGETPERFQUERYINFOINTELPROC glad_glGetPerfQueryInfoINTEL; +#define glGetPerfQueryInfoINTEL glad_glGetPerfQueryInfoINTEL +GLAD_API_CALL PFNGLGETPIXELMAPXVPROC glad_glGetPixelMapxv; +#define glGetPixelMapxv glad_glGetPixelMapxv +GLAD_API_CALL PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC glad_glGetPixelTexGenParameterfvSGIS; +#define glGetPixelTexGenParameterfvSGIS glad_glGetPixelTexGenParameterfvSGIS +GLAD_API_CALL PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC glad_glGetPixelTexGenParameterivSGIS; +#define glGetPixelTexGenParameterivSGIS glad_glGetPixelTexGenParameterivSGIS +GLAD_API_CALL PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC glad_glGetPixelTransformParameterfvEXT; +#define glGetPixelTransformParameterfvEXT glad_glGetPixelTransformParameterfvEXT +GLAD_API_CALL PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC glad_glGetPixelTransformParameterivEXT; +#define glGetPixelTransformParameterivEXT glad_glGetPixelTransformParameterivEXT +GLAD_API_CALL PFNGLGETPOINTERINDEXEDVEXTPROC glad_glGetPointerIndexedvEXT; +#define glGetPointerIndexedvEXT glad_glGetPointerIndexedvEXT +GLAD_API_CALL PFNGLGETPOINTERI_VEXTPROC glad_glGetPointeri_vEXT; +#define glGetPointeri_vEXT glad_glGetPointeri_vEXT +GLAD_API_CALL PFNGLGETPOINTERVPROC glad_glGetPointerv; +#define glGetPointerv glad_glGetPointerv +GLAD_API_CALL PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT; +#define glGetPointervEXT glad_glGetPointervEXT +GLAD_API_CALL PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary; +#define glGetProgramBinary glad_glGetProgramBinary +GLAD_API_CALL PFNGLGETPROGRAMENVPARAMETERIIVNVPROC glad_glGetProgramEnvParameterIivNV; +#define glGetProgramEnvParameterIivNV glad_glGetProgramEnvParameterIivNV +GLAD_API_CALL PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC glad_glGetProgramEnvParameterIuivNV; +#define glGetProgramEnvParameterIuivNV glad_glGetProgramEnvParameterIuivNV +GLAD_API_CALL PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB; +#define glGetProgramEnvParameterdvARB glad_glGetProgramEnvParameterdvARB +GLAD_API_CALL PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB; +#define glGetProgramEnvParameterfvARB glad_glGetProgramEnvParameterfvARB +GLAD_API_CALL PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; +#define glGetProgramInfoLog glad_glGetProgramInfoLog +GLAD_API_CALL PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv; +#define glGetProgramInterfaceiv glad_glGetProgramInterfaceiv +GLAD_API_CALL PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC glad_glGetProgramLocalParameterIivNV; +#define glGetProgramLocalParameterIivNV glad_glGetProgramLocalParameterIivNV +GLAD_API_CALL PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC glad_glGetProgramLocalParameterIuivNV; +#define glGetProgramLocalParameterIuivNV glad_glGetProgramLocalParameterIuivNV +GLAD_API_CALL PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB; +#define glGetProgramLocalParameterdvARB glad_glGetProgramLocalParameterdvARB +GLAD_API_CALL PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB; +#define glGetProgramLocalParameterfvARB glad_glGetProgramLocalParameterfvARB +GLAD_API_CALL PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC glad_glGetProgramNamedParameterdvNV; +#define glGetProgramNamedParameterdvNV glad_glGetProgramNamedParameterdvNV +GLAD_API_CALL PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC glad_glGetProgramNamedParameterfvNV; +#define glGetProgramNamedParameterfvNV glad_glGetProgramNamedParameterfvNV +GLAD_API_CALL PFNGLGETPROGRAMPARAMETERDVNVPROC glad_glGetProgramParameterdvNV; +#define glGetProgramParameterdvNV glad_glGetProgramParameterdvNV +GLAD_API_CALL PFNGLGETPROGRAMPARAMETERFVNVPROC glad_glGetProgramParameterfvNV; +#define glGetProgramParameterfvNV glad_glGetProgramParameterfvNV +GLAD_API_CALL PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog; +#define glGetProgramPipelineInfoLog glad_glGetProgramPipelineInfoLog +GLAD_API_CALL PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv; +#define glGetProgramPipelineiv glad_glGetProgramPipelineiv +GLAD_API_CALL PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex; +#define glGetProgramResourceIndex glad_glGetProgramResourceIndex +GLAD_API_CALL PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation; +#define glGetProgramResourceLocation glad_glGetProgramResourceLocation +GLAD_API_CALL PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex; +#define glGetProgramResourceLocationIndex glad_glGetProgramResourceLocationIndex +GLAD_API_CALL PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName; +#define glGetProgramResourceName glad_glGetProgramResourceName +GLAD_API_CALL PFNGLGETPROGRAMRESOURCEFVNVPROC glad_glGetProgramResourcefvNV; +#define glGetProgramResourcefvNV glad_glGetProgramResourcefvNV +GLAD_API_CALL PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv; +#define glGetProgramResourceiv glad_glGetProgramResourceiv +GLAD_API_CALL PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv; +#define glGetProgramStageiv glad_glGetProgramStageiv +GLAD_API_CALL PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB; +#define glGetProgramStringARB glad_glGetProgramStringARB +GLAD_API_CALL PFNGLGETPROGRAMSTRINGNVPROC glad_glGetProgramStringNV; +#define glGetProgramStringNV glad_glGetProgramStringNV +GLAD_API_CALL PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC glad_glGetProgramSubroutineParameteruivNV; +#define glGetProgramSubroutineParameteruivNV glad_glGetProgramSubroutineParameteruivNV +GLAD_API_CALL PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; +#define glGetProgramiv glad_glGetProgramiv +GLAD_API_CALL PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB; +#define glGetProgramivARB glad_glGetProgramivARB +GLAD_API_CALL PFNGLGETPROGRAMIVNVPROC glad_glGetProgramivNV; +#define glGetProgramivNV glad_glGetProgramivNV +GLAD_API_CALL PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v; +#define glGetQueryBufferObjecti64v glad_glGetQueryBufferObjecti64v +GLAD_API_CALL PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv; +#define glGetQueryBufferObjectiv glad_glGetQueryBufferObjectiv +GLAD_API_CALL PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v; +#define glGetQueryBufferObjectui64v glad_glGetQueryBufferObjectui64v +GLAD_API_CALL PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv; +#define glGetQueryBufferObjectuiv glad_glGetQueryBufferObjectuiv +GLAD_API_CALL PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv; +#define glGetQueryIndexediv glad_glGetQueryIndexediv +GLAD_API_CALL PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; +#define glGetQueryObjecti64v glad_glGetQueryObjecti64v +GLAD_API_CALL PFNGLGETQUERYOBJECTI64VEXTPROC glad_glGetQueryObjecti64vEXT; +#define glGetQueryObjecti64vEXT glad_glGetQueryObjecti64vEXT +GLAD_API_CALL PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; +#define glGetQueryObjectiv glad_glGetQueryObjectiv +GLAD_API_CALL PFNGLGETQUERYOBJECTIVARBPROC glad_glGetQueryObjectivARB; +#define glGetQueryObjectivARB glad_glGetQueryObjectivARB +GLAD_API_CALL PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; +#define glGetQueryObjectui64v glad_glGetQueryObjectui64v +GLAD_API_CALL PFNGLGETQUERYOBJECTUI64VEXTPROC glad_glGetQueryObjectui64vEXT; +#define glGetQueryObjectui64vEXT glad_glGetQueryObjectui64vEXT +GLAD_API_CALL PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; +#define glGetQueryObjectuiv glad_glGetQueryObjectuiv +GLAD_API_CALL PFNGLGETQUERYOBJECTUIVARBPROC glad_glGetQueryObjectuivARB; +#define glGetQueryObjectuivARB glad_glGetQueryObjectuivARB +GLAD_API_CALL PFNGLGETQUERYIVPROC glad_glGetQueryiv; +#define glGetQueryiv glad_glGetQueryiv +GLAD_API_CALL PFNGLGETQUERYIVARBPROC glad_glGetQueryivARB; +#define glGetQueryivARB glad_glGetQueryivARB +GLAD_API_CALL PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; +#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv +GLAD_API_CALL PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; +#define glGetRenderbufferParameterivEXT glad_glGetRenderbufferParameterivEXT +GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; +#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv +GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; +#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv +GLAD_API_CALL PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; +#define glGetSamplerParameterfv glad_glGetSamplerParameterfv +GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; +#define glGetSamplerParameteriv glad_glGetSamplerParameteriv +GLAD_API_CALL PFNGLGETSEMAPHOREPARAMETERIVNVPROC glad_glGetSemaphoreParameterivNV; +#define glGetSemaphoreParameterivNV glad_glGetSemaphoreParameterivNV +GLAD_API_CALL PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC glad_glGetSemaphoreParameterui64vEXT; +#define glGetSemaphoreParameterui64vEXT glad_glGetSemaphoreParameterui64vEXT +GLAD_API_CALL PFNGLGETSEPARABLEFILTEREXTPROC glad_glGetSeparableFilterEXT; +#define glGetSeparableFilterEXT glad_glGetSeparableFilterEXT +GLAD_API_CALL PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; +#define glGetShaderInfoLog glad_glGetShaderInfoLog +GLAD_API_CALL PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; +#define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat +GLAD_API_CALL PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; +#define glGetShaderSource glad_glGetShaderSource +GLAD_API_CALL PFNGLGETSHADERSOURCEARBPROC glad_glGetShaderSourceARB; +#define glGetShaderSourceARB glad_glGetShaderSourceARB +GLAD_API_CALL PFNGLGETSHADERIVPROC glad_glGetShaderiv; +#define glGetShaderiv glad_glGetShaderiv +GLAD_API_CALL PFNGLGETSHADINGRATEIMAGEPALETTENVPROC glad_glGetShadingRateImagePaletteNV; +#define glGetShadingRateImagePaletteNV glad_glGetShadingRateImagePaletteNV +GLAD_API_CALL PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC glad_glGetShadingRateSampleLocationivNV; +#define glGetShadingRateSampleLocationivNV glad_glGetShadingRateSampleLocationivNV +GLAD_API_CALL PFNGLGETSHARPENTEXFUNCSGISPROC glad_glGetSharpenTexFuncSGIS; +#define glGetSharpenTexFuncSGIS glad_glGetSharpenTexFuncSGIS +GLAD_API_CALL PFNGLGETSTAGEINDEXNVPROC glad_glGetStageIndexNV; +#define glGetStageIndexNV glad_glGetStageIndexNV +GLAD_API_CALL PFNGLGETSTRINGPROC glad_glGetString; +#define glGetString glad_glGetString +GLAD_API_CALL PFNGLGETSTRINGIPROC glad_glGetStringi; +#define glGetStringi glad_glGetStringi +GLAD_API_CALL PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex; +#define glGetSubroutineIndex glad_glGetSubroutineIndex +GLAD_API_CALL PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation; +#define glGetSubroutineUniformLocation glad_glGetSubroutineUniformLocation +GLAD_API_CALL PFNGLGETSYNCIVPROC glad_glGetSynciv; +#define glGetSynciv glad_glGetSynciv +GLAD_API_CALL PFNGLGETTEXBUMPPARAMETERFVATIPROC glad_glGetTexBumpParameterfvATI; +#define glGetTexBumpParameterfvATI glad_glGetTexBumpParameterfvATI +GLAD_API_CALL PFNGLGETTEXBUMPPARAMETERIVATIPROC glad_glGetTexBumpParameterivATI; +#define glGetTexBumpParameterivATI glad_glGetTexBumpParameterivATI +GLAD_API_CALL PFNGLGETTEXENVXVOESPROC glad_glGetTexEnvxvOES; +#define glGetTexEnvxvOES glad_glGetTexEnvxvOES +GLAD_API_CALL PFNGLGETTEXFILTERFUNCSGISPROC glad_glGetTexFilterFuncSGIS; +#define glGetTexFilterFuncSGIS glad_glGetTexFilterFuncSGIS +GLAD_API_CALL PFNGLGETTEXGENXVOESPROC glad_glGetTexGenxvOES; +#define glGetTexGenxvOES glad_glGetTexGenxvOES +GLAD_API_CALL PFNGLGETTEXIMAGEPROC glad_glGetTexImage; +#define glGetTexImage glad_glGetTexImage +GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; +#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv +GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; +#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv +GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERXVOESPROC glad_glGetTexLevelParameterxvOES; +#define glGetTexLevelParameterxvOES glad_glGetTexLevelParameterxvOES +GLAD_API_CALL PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; +#define glGetTexParameterIiv glad_glGetTexParameterIiv +GLAD_API_CALL PFNGLGETTEXPARAMETERIIVEXTPROC glad_glGetTexParameterIivEXT; +#define glGetTexParameterIivEXT glad_glGetTexParameterIivEXT +GLAD_API_CALL PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; +#define glGetTexParameterIuiv glad_glGetTexParameterIuiv +GLAD_API_CALL PFNGLGETTEXPARAMETERIUIVEXTPROC glad_glGetTexParameterIuivEXT; +#define glGetTexParameterIuivEXT glad_glGetTexParameterIuivEXT +GLAD_API_CALL PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC glad_glGetTexParameterPointervAPPLE; +#define glGetTexParameterPointervAPPLE glad_glGetTexParameterPointervAPPLE +GLAD_API_CALL PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; +#define glGetTexParameterfv glad_glGetTexParameterfv +GLAD_API_CALL PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; +#define glGetTexParameteriv glad_glGetTexParameteriv +GLAD_API_CALL PFNGLGETTEXPARAMETERXVOESPROC glad_glGetTexParameterxvOES; +#define glGetTexParameterxvOES glad_glGetTexParameterxvOES +GLAD_API_CALL PFNGLGETTEXTUREHANDLEARBPROC glad_glGetTextureHandleARB; +#define glGetTextureHandleARB glad_glGetTextureHandleARB +GLAD_API_CALL PFNGLGETTEXTUREHANDLENVPROC glad_glGetTextureHandleNV; +#define glGetTextureHandleNV glad_glGetTextureHandleNV +GLAD_API_CALL PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage; +#define glGetTextureImage glad_glGetTextureImage +GLAD_API_CALL PFNGLGETTEXTUREIMAGEEXTPROC glad_glGetTextureImageEXT; +#define glGetTextureImageEXT glad_glGetTextureImageEXT +GLAD_API_CALL PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv; +#define glGetTextureLevelParameterfv glad_glGetTextureLevelParameterfv +GLAD_API_CALL PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glad_glGetTextureLevelParameterfvEXT; +#define glGetTextureLevelParameterfvEXT glad_glGetTextureLevelParameterfvEXT +GLAD_API_CALL PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv; +#define glGetTextureLevelParameteriv glad_glGetTextureLevelParameteriv +GLAD_API_CALL PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glad_glGetTextureLevelParameterivEXT; +#define glGetTextureLevelParameterivEXT glad_glGetTextureLevelParameterivEXT +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv; +#define glGetTextureParameterIiv glad_glGetTextureParameterIiv +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERIIVEXTPROC glad_glGetTextureParameterIivEXT; +#define glGetTextureParameterIivEXT glad_glGetTextureParameterIivEXT +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv; +#define glGetTextureParameterIuiv glad_glGetTextureParameterIuiv +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glad_glGetTextureParameterIuivEXT; +#define glGetTextureParameterIuivEXT glad_glGetTextureParameterIuivEXT +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv; +#define glGetTextureParameterfv glad_glGetTextureParameterfv +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERFVEXTPROC glad_glGetTextureParameterfvEXT; +#define glGetTextureParameterfvEXT glad_glGetTextureParameterfvEXT +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv; +#define glGetTextureParameteriv glad_glGetTextureParameteriv +GLAD_API_CALL PFNGLGETTEXTUREPARAMETERIVEXTPROC glad_glGetTextureParameterivEXT; +#define glGetTextureParameterivEXT glad_glGetTextureParameterivEXT +GLAD_API_CALL PFNGLGETTEXTURESAMPLERHANDLEARBPROC glad_glGetTextureSamplerHandleARB; +#define glGetTextureSamplerHandleARB glad_glGetTextureSamplerHandleARB +GLAD_API_CALL PFNGLGETTEXTURESAMPLERHANDLENVPROC glad_glGetTextureSamplerHandleNV; +#define glGetTextureSamplerHandleNV glad_glGetTextureSamplerHandleNV +GLAD_API_CALL PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage; +#define glGetTextureSubImage glad_glGetTextureSubImage +GLAD_API_CALL PFNGLGETTRACKMATRIXIVNVPROC glad_glGetTrackMatrixivNV; +#define glGetTrackMatrixivNV glad_glGetTrackMatrixivNV +GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; +#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying +GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC glad_glGetTransformFeedbackVaryingEXT; +#define glGetTransformFeedbackVaryingEXT glad_glGetTransformFeedbackVaryingEXT +GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC glad_glGetTransformFeedbackVaryingNV; +#define glGetTransformFeedbackVaryingNV glad_glGetTransformFeedbackVaryingNV +GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v; +#define glGetTransformFeedbacki64_v glad_glGetTransformFeedbacki64_v +GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v; +#define glGetTransformFeedbacki_v glad_glGetTransformFeedbacki_v +GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv; +#define glGetTransformFeedbackiv glad_glGetTransformFeedbackiv +GLAD_API_CALL PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; +#define glGetUniformBlockIndex glad_glGetUniformBlockIndex +GLAD_API_CALL PFNGLGETUNIFORMBUFFERSIZEEXTPROC glad_glGetUniformBufferSizeEXT; +#define glGetUniformBufferSizeEXT glad_glGetUniformBufferSizeEXT +GLAD_API_CALL PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; +#define glGetUniformIndices glad_glGetUniformIndices +GLAD_API_CALL PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; +#define glGetUniformLocation glad_glGetUniformLocation +GLAD_API_CALL PFNGLGETUNIFORMLOCATIONARBPROC glad_glGetUniformLocationARB; +#define glGetUniformLocationARB glad_glGetUniformLocationARB +GLAD_API_CALL PFNGLGETUNIFORMOFFSETEXTPROC glad_glGetUniformOffsetEXT; +#define glGetUniformOffsetEXT glad_glGetUniformOffsetEXT +GLAD_API_CALL PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv; +#define glGetUniformSubroutineuiv glad_glGetUniformSubroutineuiv +GLAD_API_CALL PFNGLGETUNIFORMDVPROC glad_glGetUniformdv; +#define glGetUniformdv glad_glGetUniformdv +GLAD_API_CALL PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; +#define glGetUniformfv glad_glGetUniformfv +GLAD_API_CALL PFNGLGETUNIFORMFVARBPROC glad_glGetUniformfvARB; +#define glGetUniformfvARB glad_glGetUniformfvARB +GLAD_API_CALL PFNGLGETUNIFORMI64VARBPROC glad_glGetUniformi64vARB; +#define glGetUniformi64vARB glad_glGetUniformi64vARB +GLAD_API_CALL PFNGLGETUNIFORMI64VNVPROC glad_glGetUniformi64vNV; +#define glGetUniformi64vNV glad_glGetUniformi64vNV +GLAD_API_CALL PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; +#define glGetUniformiv glad_glGetUniformiv +GLAD_API_CALL PFNGLGETUNIFORMIVARBPROC glad_glGetUniformivARB; +#define glGetUniformivARB glad_glGetUniformivARB +GLAD_API_CALL PFNGLGETUNIFORMUI64VARBPROC glad_glGetUniformui64vARB; +#define glGetUniformui64vARB glad_glGetUniformui64vARB +GLAD_API_CALL PFNGLGETUNIFORMUI64VNVPROC glad_glGetUniformui64vNV; +#define glGetUniformui64vNV glad_glGetUniformui64vNV +GLAD_API_CALL PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; +#define glGetUniformuiv glad_glGetUniformuiv +GLAD_API_CALL PFNGLGETUNIFORMUIVEXTPROC glad_glGetUniformuivEXT; +#define glGetUniformuivEXT glad_glGetUniformuivEXT +GLAD_API_CALL PFNGLGETUNSIGNEDBYTEI_VEXTPROC glad_glGetUnsignedBytei_vEXT; +#define glGetUnsignedBytei_vEXT glad_glGetUnsignedBytei_vEXT +GLAD_API_CALL PFNGLGETUNSIGNEDBYTEVEXTPROC glad_glGetUnsignedBytevEXT; +#define glGetUnsignedBytevEXT glad_glGetUnsignedBytevEXT +GLAD_API_CALL PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI; +#define glGetVariantArrayObjectfvATI glad_glGetVariantArrayObjectfvATI +GLAD_API_CALL PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI; +#define glGetVariantArrayObjectivATI glad_glGetVariantArrayObjectivATI +GLAD_API_CALL PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT; +#define glGetVariantBooleanvEXT glad_glGetVariantBooleanvEXT +GLAD_API_CALL PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT; +#define glGetVariantFloatvEXT glad_glGetVariantFloatvEXT +GLAD_API_CALL PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT; +#define glGetVariantIntegervEXT glad_glGetVariantIntegervEXT +GLAD_API_CALL PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT; +#define glGetVariantPointervEXT glad_glGetVariantPointervEXT +GLAD_API_CALL PFNGLGETVARYINGLOCATIONNVPROC glad_glGetVaryingLocationNV; +#define glGetVaryingLocationNV glad_glGetVaryingLocationNV +GLAD_API_CALL PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv; +#define glGetVertexArrayIndexed64iv glad_glGetVertexArrayIndexed64iv +GLAD_API_CALL PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv; +#define glGetVertexArrayIndexediv glad_glGetVertexArrayIndexediv +GLAD_API_CALL PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glad_glGetVertexArrayIntegeri_vEXT; +#define glGetVertexArrayIntegeri_vEXT glad_glGetVertexArrayIntegeri_vEXT +GLAD_API_CALL PFNGLGETVERTEXARRAYINTEGERVEXTPROC glad_glGetVertexArrayIntegervEXT; +#define glGetVertexArrayIntegervEXT glad_glGetVertexArrayIntegervEXT +GLAD_API_CALL PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glad_glGetVertexArrayPointeri_vEXT; +#define glGetVertexArrayPointeri_vEXT glad_glGetVertexArrayPointeri_vEXT +GLAD_API_CALL PFNGLGETVERTEXARRAYPOINTERVEXTPROC glad_glGetVertexArrayPointervEXT; +#define glGetVertexArrayPointervEXT glad_glGetVertexArrayPointervEXT +GLAD_API_CALL PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv; +#define glGetVertexArrayiv glad_glGetVertexArrayiv +GLAD_API_CALL PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC glad_glGetVertexAttribArrayObjectfvATI; +#define glGetVertexAttribArrayObjectfvATI glad_glGetVertexAttribArrayObjectfvATI +GLAD_API_CALL PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC glad_glGetVertexAttribArrayObjectivATI; +#define glGetVertexAttribArrayObjectivATI glad_glGetVertexAttribArrayObjectivATI +GLAD_API_CALL PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; +#define glGetVertexAttribIiv glad_glGetVertexAttribIiv +GLAD_API_CALL PFNGLGETVERTEXATTRIBIIVEXTPROC glad_glGetVertexAttribIivEXT; +#define glGetVertexAttribIivEXT glad_glGetVertexAttribIivEXT +GLAD_API_CALL PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; +#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv +GLAD_API_CALL PFNGLGETVERTEXATTRIBIUIVEXTPROC glad_glGetVertexAttribIuivEXT; +#define glGetVertexAttribIuivEXT glad_glGetVertexAttribIuivEXT +GLAD_API_CALL PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv; +#define glGetVertexAttribLdv glad_glGetVertexAttribLdv +GLAD_API_CALL PFNGLGETVERTEXATTRIBLDVEXTPROC glad_glGetVertexAttribLdvEXT; +#define glGetVertexAttribLdvEXT glad_glGetVertexAttribLdvEXT +GLAD_API_CALL PFNGLGETVERTEXATTRIBLI64VNVPROC glad_glGetVertexAttribLi64vNV; +#define glGetVertexAttribLi64vNV glad_glGetVertexAttribLi64vNV +GLAD_API_CALL PFNGLGETVERTEXATTRIBLUI64VARBPROC glad_glGetVertexAttribLui64vARB; +#define glGetVertexAttribLui64vARB glad_glGetVertexAttribLui64vARB +GLAD_API_CALL PFNGLGETVERTEXATTRIBLUI64VNVPROC glad_glGetVertexAttribLui64vNV; +#define glGetVertexAttribLui64vNV glad_glGetVertexAttribLui64vNV +GLAD_API_CALL PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; +#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv +GLAD_API_CALL PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB; +#define glGetVertexAttribPointervARB glad_glGetVertexAttribPointervARB +GLAD_API_CALL PFNGLGETVERTEXATTRIBPOINTERVNVPROC glad_glGetVertexAttribPointervNV; +#define glGetVertexAttribPointervNV glad_glGetVertexAttribPointervNV +GLAD_API_CALL PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; +#define glGetVertexAttribdv glad_glGetVertexAttribdv +GLAD_API_CALL PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB; +#define glGetVertexAttribdvARB glad_glGetVertexAttribdvARB +GLAD_API_CALL PFNGLGETVERTEXATTRIBDVNVPROC glad_glGetVertexAttribdvNV; +#define glGetVertexAttribdvNV glad_glGetVertexAttribdvNV +GLAD_API_CALL PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; +#define glGetVertexAttribfv glad_glGetVertexAttribfv +GLAD_API_CALL PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB; +#define glGetVertexAttribfvARB glad_glGetVertexAttribfvARB +GLAD_API_CALL PFNGLGETVERTEXATTRIBFVNVPROC glad_glGetVertexAttribfvNV; +#define glGetVertexAttribfvNV glad_glGetVertexAttribfvNV +GLAD_API_CALL PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; +#define glGetVertexAttribiv glad_glGetVertexAttribiv +GLAD_API_CALL PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB; +#define glGetVertexAttribivARB glad_glGetVertexAttribivARB +GLAD_API_CALL PFNGLGETVERTEXATTRIBIVNVPROC glad_glGetVertexAttribivNV; +#define glGetVertexAttribivNV glad_glGetVertexAttribivNV +GLAD_API_CALL PFNGLGETVIDEOCAPTURESTREAMDVNVPROC glad_glGetVideoCaptureStreamdvNV; +#define glGetVideoCaptureStreamdvNV glad_glGetVideoCaptureStreamdvNV +GLAD_API_CALL PFNGLGETVIDEOCAPTURESTREAMFVNVPROC glad_glGetVideoCaptureStreamfvNV; +#define glGetVideoCaptureStreamfvNV glad_glGetVideoCaptureStreamfvNV +GLAD_API_CALL PFNGLGETVIDEOCAPTURESTREAMIVNVPROC glad_glGetVideoCaptureStreamivNV; +#define glGetVideoCaptureStreamivNV glad_glGetVideoCaptureStreamivNV +GLAD_API_CALL PFNGLGETVIDEOCAPTUREIVNVPROC glad_glGetVideoCaptureivNV; +#define glGetVideoCaptureivNV glad_glGetVideoCaptureivNV +GLAD_API_CALL PFNGLGETVIDEOI64VNVPROC glad_glGetVideoi64vNV; +#define glGetVideoi64vNV glad_glGetVideoi64vNV +GLAD_API_CALL PFNGLGETVIDEOIVNVPROC glad_glGetVideoivNV; +#define glGetVideoivNV glad_glGetVideoivNV +GLAD_API_CALL PFNGLGETVIDEOUI64VNVPROC glad_glGetVideoui64vNV; +#define glGetVideoui64vNV glad_glGetVideoui64vNV +GLAD_API_CALL PFNGLGETVIDEOUIVNVPROC glad_glGetVideouivNV; +#define glGetVideouivNV glad_glGetVideouivNV +GLAD_API_CALL PFNGLGETVKPROCADDRNVPROC glad_glGetVkProcAddrNV; +#define glGetVkProcAddrNV glad_glGetVkProcAddrNV +GLAD_API_CALL PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_glGetnCompressedTexImageARB; +#define glGetnCompressedTexImageARB glad_glGetnCompressedTexImageARB +GLAD_API_CALL PFNGLGETNTEXIMAGEARBPROC glad_glGetnTexImageARB; +#define glGetnTexImageARB glad_glGetnTexImageARB +GLAD_API_CALL PFNGLGETNUNIFORMDVARBPROC glad_glGetnUniformdvARB; +#define glGetnUniformdvARB glad_glGetnUniformdvARB +GLAD_API_CALL PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv; +#define glGetnUniformfv glad_glGetnUniformfv +GLAD_API_CALL PFNGLGETNUNIFORMFVARBPROC glad_glGetnUniformfvARB; +#define glGetnUniformfvARB glad_glGetnUniformfvARB +GLAD_API_CALL PFNGLGETNUNIFORMI64VARBPROC glad_glGetnUniformi64vARB; +#define glGetnUniformi64vARB glad_glGetnUniformi64vARB +GLAD_API_CALL PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv; +#define glGetnUniformiv glad_glGetnUniformiv +GLAD_API_CALL PFNGLGETNUNIFORMIVARBPROC glad_glGetnUniformivARB; +#define glGetnUniformivARB glad_glGetnUniformivARB +GLAD_API_CALL PFNGLGETNUNIFORMUI64VARBPROC glad_glGetnUniformui64vARB; +#define glGetnUniformui64vARB glad_glGetnUniformui64vARB +GLAD_API_CALL PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv; +#define glGetnUniformuiv glad_glGetnUniformuiv +GLAD_API_CALL PFNGLGETNUNIFORMUIVARBPROC glad_glGetnUniformuivARB; +#define glGetnUniformuivARB glad_glGetnUniformuivARB +GLAD_API_CALL PFNGLGLOBALALPHAFACTORBSUNPROC glad_glGlobalAlphaFactorbSUN; +#define glGlobalAlphaFactorbSUN glad_glGlobalAlphaFactorbSUN +GLAD_API_CALL PFNGLGLOBALALPHAFACTORDSUNPROC glad_glGlobalAlphaFactordSUN; +#define glGlobalAlphaFactordSUN glad_glGlobalAlphaFactordSUN +GLAD_API_CALL PFNGLGLOBALALPHAFACTORFSUNPROC glad_glGlobalAlphaFactorfSUN; +#define glGlobalAlphaFactorfSUN glad_glGlobalAlphaFactorfSUN +GLAD_API_CALL PFNGLGLOBALALPHAFACTORISUNPROC glad_glGlobalAlphaFactoriSUN; +#define glGlobalAlphaFactoriSUN glad_glGlobalAlphaFactoriSUN +GLAD_API_CALL PFNGLGLOBALALPHAFACTORSSUNPROC glad_glGlobalAlphaFactorsSUN; +#define glGlobalAlphaFactorsSUN glad_glGlobalAlphaFactorsSUN +GLAD_API_CALL PFNGLGLOBALALPHAFACTORUBSUNPROC glad_glGlobalAlphaFactorubSUN; +#define glGlobalAlphaFactorubSUN glad_glGlobalAlphaFactorubSUN +GLAD_API_CALL PFNGLGLOBALALPHAFACTORUISUNPROC glad_glGlobalAlphaFactoruiSUN; +#define glGlobalAlphaFactoruiSUN glad_glGlobalAlphaFactoruiSUN +GLAD_API_CALL PFNGLGLOBALALPHAFACTORUSSUNPROC glad_glGlobalAlphaFactorusSUN; +#define glGlobalAlphaFactorusSUN glad_glGlobalAlphaFactorusSUN +GLAD_API_CALL PFNGLHINTPROC glad_glHint; +#define glHint glad_glHint +GLAD_API_CALL PFNGLHINTPGIPROC glad_glHintPGI; +#define glHintPGI glad_glHintPGI +GLAD_API_CALL PFNGLHISTOGRAMEXTPROC glad_glHistogramEXT; +#define glHistogramEXT glad_glHistogramEXT +GLAD_API_CALL PFNGLIGLOOINTERFACESGIXPROC glad_glIglooInterfaceSGIX; +#define glIglooInterfaceSGIX glad_glIglooInterfaceSGIX +GLAD_API_CALL PFNGLIMAGETRANSFORMPARAMETERFHPPROC glad_glImageTransformParameterfHP; +#define glImageTransformParameterfHP glad_glImageTransformParameterfHP +GLAD_API_CALL PFNGLIMAGETRANSFORMPARAMETERFVHPPROC glad_glImageTransformParameterfvHP; +#define glImageTransformParameterfvHP glad_glImageTransformParameterfvHP +GLAD_API_CALL PFNGLIMAGETRANSFORMPARAMETERIHPPROC glad_glImageTransformParameteriHP; +#define glImageTransformParameteriHP glad_glImageTransformParameteriHP +GLAD_API_CALL PFNGLIMAGETRANSFORMPARAMETERIVHPPROC glad_glImageTransformParameterivHP; +#define glImageTransformParameterivHP glad_glImageTransformParameterivHP +GLAD_API_CALL PFNGLIMPORTMEMORYFDEXTPROC glad_glImportMemoryFdEXT; +#define glImportMemoryFdEXT glad_glImportMemoryFdEXT +GLAD_API_CALL PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC glad_glImportMemoryWin32HandleEXT; +#define glImportMemoryWin32HandleEXT glad_glImportMemoryWin32HandleEXT +GLAD_API_CALL PFNGLIMPORTMEMORYWIN32NAMEEXTPROC glad_glImportMemoryWin32NameEXT; +#define glImportMemoryWin32NameEXT glad_glImportMemoryWin32NameEXT +GLAD_API_CALL PFNGLIMPORTSEMAPHOREFDEXTPROC glad_glImportSemaphoreFdEXT; +#define glImportSemaphoreFdEXT glad_glImportSemaphoreFdEXT +GLAD_API_CALL PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC glad_glImportSemaphoreWin32HandleEXT; +#define glImportSemaphoreWin32HandleEXT glad_glImportSemaphoreWin32HandleEXT +GLAD_API_CALL PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC glad_glImportSemaphoreWin32NameEXT; +#define glImportSemaphoreWin32NameEXT glad_glImportSemaphoreWin32NameEXT +GLAD_API_CALL PFNGLIMPORTSYNCEXTPROC glad_glImportSyncEXT; +#define glImportSyncEXT glad_glImportSyncEXT +GLAD_API_CALL PFNGLINDEXFORMATNVPROC glad_glIndexFormatNV; +#define glIndexFormatNV glad_glIndexFormatNV +GLAD_API_CALL PFNGLINDEXFUNCEXTPROC glad_glIndexFuncEXT; +#define glIndexFuncEXT glad_glIndexFuncEXT +GLAD_API_CALL PFNGLINDEXMATERIALEXTPROC glad_glIndexMaterialEXT; +#define glIndexMaterialEXT glad_glIndexMaterialEXT +GLAD_API_CALL PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT; +#define glIndexPointerEXT glad_glIndexPointerEXT +GLAD_API_CALL PFNGLINDEXPOINTERLISTIBMPROC glad_glIndexPointerListIBM; +#define glIndexPointerListIBM glad_glIndexPointerListIBM +GLAD_API_CALL PFNGLINDEXXOESPROC glad_glIndexxOES; +#define glIndexxOES glad_glIndexxOES +GLAD_API_CALL PFNGLINDEXXVOESPROC glad_glIndexxvOES; +#define glIndexxvOES glad_glIndexxvOES +GLAD_API_CALL PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT; +#define glInsertComponentEXT glad_glInsertComponentEXT +GLAD_API_CALL PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT; +#define glInsertEventMarkerEXT glad_glInsertEventMarkerEXT +GLAD_API_CALL PFNGLINSTRUMENTSBUFFERSGIXPROC glad_glInstrumentsBufferSGIX; +#define glInstrumentsBufferSGIX glad_glInstrumentsBufferSGIX +GLAD_API_CALL PFNGLINTERPOLATEPATHSNVPROC glad_glInterpolatePathsNV; +#define glInterpolatePathsNV glad_glInterpolatePathsNV +GLAD_API_CALL PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData; +#define glInvalidateBufferData glad_glInvalidateBufferData +GLAD_API_CALL PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData; +#define glInvalidateBufferSubData glad_glInvalidateBufferSubData +GLAD_API_CALL PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer; +#define glInvalidateFramebuffer glad_glInvalidateFramebuffer +GLAD_API_CALL PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData; +#define glInvalidateNamedFramebufferData glad_glInvalidateNamedFramebufferData +GLAD_API_CALL PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData; +#define glInvalidateNamedFramebufferSubData glad_glInvalidateNamedFramebufferSubData +GLAD_API_CALL PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer; +#define glInvalidateSubFramebuffer glad_glInvalidateSubFramebuffer +GLAD_API_CALL PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage; +#define glInvalidateTexImage glad_glInvalidateTexImage +GLAD_API_CALL PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage; +#define glInvalidateTexSubImage glad_glInvalidateTexSubImage +GLAD_API_CALL PFNGLISASYNCMARKERSGIXPROC glad_glIsAsyncMarkerSGIX; +#define glIsAsyncMarkerSGIX glad_glIsAsyncMarkerSGIX +GLAD_API_CALL PFNGLISBUFFERPROC glad_glIsBuffer; +#define glIsBuffer glad_glIsBuffer +GLAD_API_CALL PFNGLISBUFFERARBPROC glad_glIsBufferARB; +#define glIsBufferARB glad_glIsBufferARB +GLAD_API_CALL PFNGLISBUFFERRESIDENTNVPROC glad_glIsBufferResidentNV; +#define glIsBufferResidentNV glad_glIsBufferResidentNV +GLAD_API_CALL PFNGLISCOMMANDLISTNVPROC glad_glIsCommandListNV; +#define glIsCommandListNV glad_glIsCommandListNV +GLAD_API_CALL PFNGLISENABLEDPROC glad_glIsEnabled; +#define glIsEnabled glad_glIsEnabled +GLAD_API_CALL PFNGLISENABLEDINDEXEDEXTPROC glad_glIsEnabledIndexedEXT; +#define glIsEnabledIndexedEXT glad_glIsEnabledIndexedEXT +GLAD_API_CALL PFNGLISENABLEDIPROC glad_glIsEnabledi; +#define glIsEnabledi glad_glIsEnabledi +GLAD_API_CALL PFNGLISFENCEAPPLEPROC glad_glIsFenceAPPLE; +#define glIsFenceAPPLE glad_glIsFenceAPPLE +GLAD_API_CALL PFNGLISFENCENVPROC glad_glIsFenceNV; +#define glIsFenceNV glad_glIsFenceNV +GLAD_API_CALL PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; +#define glIsFramebuffer glad_glIsFramebuffer +GLAD_API_CALL PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; +#define glIsFramebufferEXT glad_glIsFramebufferEXT +GLAD_API_CALL PFNGLISIMAGEHANDLERESIDENTARBPROC glad_glIsImageHandleResidentARB; +#define glIsImageHandleResidentARB glad_glIsImageHandleResidentARB +GLAD_API_CALL PFNGLISIMAGEHANDLERESIDENTNVPROC glad_glIsImageHandleResidentNV; +#define glIsImageHandleResidentNV glad_glIsImageHandleResidentNV +GLAD_API_CALL PFNGLISMEMORYOBJECTEXTPROC glad_glIsMemoryObjectEXT; +#define glIsMemoryObjectEXT glad_glIsMemoryObjectEXT +GLAD_API_CALL PFNGLISNAMEAMDPROC glad_glIsNameAMD; +#define glIsNameAMD glad_glIsNameAMD +GLAD_API_CALL PFNGLISNAMEDBUFFERRESIDENTNVPROC glad_glIsNamedBufferResidentNV; +#define glIsNamedBufferResidentNV glad_glIsNamedBufferResidentNV +GLAD_API_CALL PFNGLISNAMEDSTRINGARBPROC glad_glIsNamedStringARB; +#define glIsNamedStringARB glad_glIsNamedStringARB +GLAD_API_CALL PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI; +#define glIsObjectBufferATI glad_glIsObjectBufferATI +GLAD_API_CALL PFNGLISOCCLUSIONQUERYNVPROC glad_glIsOcclusionQueryNV; +#define glIsOcclusionQueryNV glad_glIsOcclusionQueryNV +GLAD_API_CALL PFNGLISPATHNVPROC glad_glIsPathNV; +#define glIsPathNV glad_glIsPathNV +GLAD_API_CALL PFNGLISPOINTINFILLPATHNVPROC glad_glIsPointInFillPathNV; +#define glIsPointInFillPathNV glad_glIsPointInFillPathNV +GLAD_API_CALL PFNGLISPOINTINSTROKEPATHNVPROC glad_glIsPointInStrokePathNV; +#define glIsPointInStrokePathNV glad_glIsPointInStrokePathNV +GLAD_API_CALL PFNGLISPROGRAMPROC glad_glIsProgram; +#define glIsProgram glad_glIsProgram +GLAD_API_CALL PFNGLISPROGRAMARBPROC glad_glIsProgramARB; +#define glIsProgramARB glad_glIsProgramARB +GLAD_API_CALL PFNGLISPROGRAMNVPROC glad_glIsProgramNV; +#define glIsProgramNV glad_glIsProgramNV +GLAD_API_CALL PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline; +#define glIsProgramPipeline glad_glIsProgramPipeline +GLAD_API_CALL PFNGLISQUERYPROC glad_glIsQuery; +#define glIsQuery glad_glIsQuery +GLAD_API_CALL PFNGLISQUERYARBPROC glad_glIsQueryARB; +#define glIsQueryARB glad_glIsQueryARB +GLAD_API_CALL PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; +#define glIsRenderbuffer glad_glIsRenderbuffer +GLAD_API_CALL PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; +#define glIsRenderbufferEXT glad_glIsRenderbufferEXT +GLAD_API_CALL PFNGLISSAMPLERPROC glad_glIsSampler; +#define glIsSampler glad_glIsSampler +GLAD_API_CALL PFNGLISSEMAPHOREEXTPROC glad_glIsSemaphoreEXT; +#define glIsSemaphoreEXT glad_glIsSemaphoreEXT +GLAD_API_CALL PFNGLISSHADERPROC glad_glIsShader; +#define glIsShader glad_glIsShader +GLAD_API_CALL PFNGLISSTATENVPROC glad_glIsStateNV; +#define glIsStateNV glad_glIsStateNV +GLAD_API_CALL PFNGLISSYNCPROC glad_glIsSync; +#define glIsSync glad_glIsSync +GLAD_API_CALL PFNGLISTEXTUREPROC glad_glIsTexture; +#define glIsTexture glad_glIsTexture +GLAD_API_CALL PFNGLISTEXTUREEXTPROC glad_glIsTextureEXT; +#define glIsTextureEXT glad_glIsTextureEXT +GLAD_API_CALL PFNGLISTEXTUREHANDLERESIDENTARBPROC glad_glIsTextureHandleResidentARB; +#define glIsTextureHandleResidentARB glad_glIsTextureHandleResidentARB +GLAD_API_CALL PFNGLISTEXTUREHANDLERESIDENTNVPROC glad_glIsTextureHandleResidentNV; +#define glIsTextureHandleResidentNV glad_glIsTextureHandleResidentNV +GLAD_API_CALL PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; +#define glIsTransformFeedback glad_glIsTransformFeedback +GLAD_API_CALL PFNGLISTRANSFORMFEEDBACKNVPROC glad_glIsTransformFeedbackNV; +#define glIsTransformFeedbackNV glad_glIsTransformFeedbackNV +GLAD_API_CALL PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT; +#define glIsVariantEnabledEXT glad_glIsVariantEnabledEXT +GLAD_API_CALL PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; +#define glIsVertexArray glad_glIsVertexArray +GLAD_API_CALL PFNGLISVERTEXARRAYAPPLEPROC glad_glIsVertexArrayAPPLE; +#define glIsVertexArrayAPPLE glad_glIsVertexArrayAPPLE +GLAD_API_CALL PFNGLISVERTEXATTRIBENABLEDAPPLEPROC glad_glIsVertexAttribEnabledAPPLE; +#define glIsVertexAttribEnabledAPPLE glad_glIsVertexAttribEnabledAPPLE +GLAD_API_CALL PFNGLLGPUCOPYIMAGESUBDATANVXPROC glad_glLGPUCopyImageSubDataNVX; +#define glLGPUCopyImageSubDataNVX glad_glLGPUCopyImageSubDataNVX +GLAD_API_CALL PFNGLLGPUINTERLOCKNVXPROC glad_glLGPUInterlockNVX; +#define glLGPUInterlockNVX glad_glLGPUInterlockNVX +GLAD_API_CALL PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC glad_glLGPUNamedBufferSubDataNVX; +#define glLGPUNamedBufferSubDataNVX glad_glLGPUNamedBufferSubDataNVX +GLAD_API_CALL PFNGLLABELOBJECTEXTPROC glad_glLabelObjectEXT; +#define glLabelObjectEXT glad_glLabelObjectEXT +GLAD_API_CALL PFNGLLIGHTENVISGIXPROC glad_glLightEnviSGIX; +#define glLightEnviSGIX glad_glLightEnviSGIX +GLAD_API_CALL PFNGLLIGHTMODELXOESPROC glad_glLightModelxOES; +#define glLightModelxOES glad_glLightModelxOES +GLAD_API_CALL PFNGLLIGHTMODELXVOESPROC glad_glLightModelxvOES; +#define glLightModelxvOES glad_glLightModelxvOES +GLAD_API_CALL PFNGLLIGHTXOESPROC glad_glLightxOES; +#define glLightxOES glad_glLightxOES +GLAD_API_CALL PFNGLLIGHTXVOESPROC glad_glLightxvOES; +#define glLightxvOES glad_glLightxvOES +GLAD_API_CALL PFNGLLINEWIDTHPROC glad_glLineWidth; +#define glLineWidth glad_glLineWidth +GLAD_API_CALL PFNGLLINEWIDTHXOESPROC glad_glLineWidthxOES; +#define glLineWidthxOES glad_glLineWidthxOES +GLAD_API_CALL PFNGLLINKPROGRAMPROC glad_glLinkProgram; +#define glLinkProgram glad_glLinkProgram +GLAD_API_CALL PFNGLLINKPROGRAMARBPROC glad_glLinkProgramARB; +#define glLinkProgramARB glad_glLinkProgramARB +GLAD_API_CALL PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC glad_glListDrawCommandsStatesClientNV; +#define glListDrawCommandsStatesClientNV glad_glListDrawCommandsStatesClientNV +GLAD_API_CALL PFNGLLISTPARAMETERFSGIXPROC glad_glListParameterfSGIX; +#define glListParameterfSGIX glad_glListParameterfSGIX +GLAD_API_CALL PFNGLLISTPARAMETERFVSGIXPROC glad_glListParameterfvSGIX; +#define glListParameterfvSGIX glad_glListParameterfvSGIX +GLAD_API_CALL PFNGLLISTPARAMETERISGIXPROC glad_glListParameteriSGIX; +#define glListParameteriSGIX glad_glListParameteriSGIX +GLAD_API_CALL PFNGLLISTPARAMETERIVSGIXPROC glad_glListParameterivSGIX; +#define glListParameterivSGIX glad_glListParameterivSGIX +GLAD_API_CALL PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC glad_glLoadIdentityDeformationMapSGIX; +#define glLoadIdentityDeformationMapSGIX glad_glLoadIdentityDeformationMapSGIX +GLAD_API_CALL PFNGLLOADMATRIXXOESPROC glad_glLoadMatrixxOES; +#define glLoadMatrixxOES glad_glLoadMatrixxOES +GLAD_API_CALL PFNGLLOADPROGRAMNVPROC glad_glLoadProgramNV; +#define glLoadProgramNV glad_glLoadProgramNV +GLAD_API_CALL PFNGLLOADTRANSPOSEMATRIXDARBPROC glad_glLoadTransposeMatrixdARB; +#define glLoadTransposeMatrixdARB glad_glLoadTransposeMatrixdARB +GLAD_API_CALL PFNGLLOADTRANSPOSEMATRIXFARBPROC glad_glLoadTransposeMatrixfARB; +#define glLoadTransposeMatrixfARB glad_glLoadTransposeMatrixfARB +GLAD_API_CALL PFNGLLOADTRANSPOSEMATRIXXOESPROC glad_glLoadTransposeMatrixxOES; +#define glLoadTransposeMatrixxOES glad_glLoadTransposeMatrixxOES +GLAD_API_CALL PFNGLLOCKARRAYSEXTPROC glad_glLockArraysEXT; +#define glLockArraysEXT glad_glLockArraysEXT +GLAD_API_CALL PFNGLLOGICOPPROC glad_glLogicOp; +#define glLogicOp glad_glLogicOp +GLAD_API_CALL PFNGLMAKEBUFFERNONRESIDENTNVPROC glad_glMakeBufferNonResidentNV; +#define glMakeBufferNonResidentNV glad_glMakeBufferNonResidentNV +GLAD_API_CALL PFNGLMAKEBUFFERRESIDENTNVPROC glad_glMakeBufferResidentNV; +#define glMakeBufferResidentNV glad_glMakeBufferResidentNV +GLAD_API_CALL PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glad_glMakeImageHandleNonResidentARB; +#define glMakeImageHandleNonResidentARB glad_glMakeImageHandleNonResidentARB +GLAD_API_CALL PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glad_glMakeImageHandleNonResidentNV; +#define glMakeImageHandleNonResidentNV glad_glMakeImageHandleNonResidentNV +GLAD_API_CALL PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glad_glMakeImageHandleResidentARB; +#define glMakeImageHandleResidentARB glad_glMakeImageHandleResidentARB +GLAD_API_CALL PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glad_glMakeImageHandleResidentNV; +#define glMakeImageHandleResidentNV glad_glMakeImageHandleResidentNV +GLAD_API_CALL PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glad_glMakeNamedBufferNonResidentNV; +#define glMakeNamedBufferNonResidentNV glad_glMakeNamedBufferNonResidentNV +GLAD_API_CALL PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glad_glMakeNamedBufferResidentNV; +#define glMakeNamedBufferResidentNV glad_glMakeNamedBufferResidentNV +GLAD_API_CALL PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glad_glMakeTextureHandleNonResidentARB; +#define glMakeTextureHandleNonResidentARB glad_glMakeTextureHandleNonResidentARB +GLAD_API_CALL PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glad_glMakeTextureHandleNonResidentNV; +#define glMakeTextureHandleNonResidentNV glad_glMakeTextureHandleNonResidentNV +GLAD_API_CALL PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glad_glMakeTextureHandleResidentARB; +#define glMakeTextureHandleResidentARB glad_glMakeTextureHandleResidentARB +GLAD_API_CALL PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glad_glMakeTextureHandleResidentNV; +#define glMakeTextureHandleResidentNV glad_glMakeTextureHandleResidentNV +GLAD_API_CALL PFNGLMAP1XOESPROC glad_glMap1xOES; +#define glMap1xOES glad_glMap1xOES +GLAD_API_CALL PFNGLMAP2XOESPROC glad_glMap2xOES; +#define glMap2xOES glad_glMap2xOES +GLAD_API_CALL PFNGLMAPBUFFERPROC glad_glMapBuffer; +#define glMapBuffer glad_glMapBuffer +GLAD_API_CALL PFNGLMAPBUFFERARBPROC glad_glMapBufferARB; +#define glMapBufferARB glad_glMapBufferARB +GLAD_API_CALL PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; +#define glMapBufferRange glad_glMapBufferRange +GLAD_API_CALL PFNGLMAPCONTROLPOINTSNVPROC glad_glMapControlPointsNV; +#define glMapControlPointsNV glad_glMapControlPointsNV +GLAD_API_CALL PFNGLMAPGRID1XOESPROC glad_glMapGrid1xOES; +#define glMapGrid1xOES glad_glMapGrid1xOES +GLAD_API_CALL PFNGLMAPGRID2XOESPROC glad_glMapGrid2xOES; +#define glMapGrid2xOES glad_glMapGrid2xOES +GLAD_API_CALL PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer; +#define glMapNamedBuffer glad_glMapNamedBuffer +GLAD_API_CALL PFNGLMAPNAMEDBUFFEREXTPROC glad_glMapNamedBufferEXT; +#define glMapNamedBufferEXT glad_glMapNamedBufferEXT +GLAD_API_CALL PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange; +#define glMapNamedBufferRange glad_glMapNamedBufferRange +GLAD_API_CALL PFNGLMAPNAMEDBUFFERRANGEEXTPROC glad_glMapNamedBufferRangeEXT; +#define glMapNamedBufferRangeEXT glad_glMapNamedBufferRangeEXT +GLAD_API_CALL PFNGLMAPOBJECTBUFFERATIPROC glad_glMapObjectBufferATI; +#define glMapObjectBufferATI glad_glMapObjectBufferATI +GLAD_API_CALL PFNGLMAPPARAMETERFVNVPROC glad_glMapParameterfvNV; +#define glMapParameterfvNV glad_glMapParameterfvNV +GLAD_API_CALL PFNGLMAPPARAMETERIVNVPROC glad_glMapParameterivNV; +#define glMapParameterivNV glad_glMapParameterivNV +GLAD_API_CALL PFNGLMAPTEXTURE2DINTELPROC glad_glMapTexture2DINTEL; +#define glMapTexture2DINTEL glad_glMapTexture2DINTEL +GLAD_API_CALL PFNGLMAPVERTEXATTRIB1DAPPLEPROC glad_glMapVertexAttrib1dAPPLE; +#define glMapVertexAttrib1dAPPLE glad_glMapVertexAttrib1dAPPLE +GLAD_API_CALL PFNGLMAPVERTEXATTRIB1FAPPLEPROC glad_glMapVertexAttrib1fAPPLE; +#define glMapVertexAttrib1fAPPLE glad_glMapVertexAttrib1fAPPLE +GLAD_API_CALL PFNGLMAPVERTEXATTRIB2DAPPLEPROC glad_glMapVertexAttrib2dAPPLE; +#define glMapVertexAttrib2dAPPLE glad_glMapVertexAttrib2dAPPLE +GLAD_API_CALL PFNGLMAPVERTEXATTRIB2FAPPLEPROC glad_glMapVertexAttrib2fAPPLE; +#define glMapVertexAttrib2fAPPLE glad_glMapVertexAttrib2fAPPLE +GLAD_API_CALL PFNGLMATERIALXOESPROC glad_glMaterialxOES; +#define glMaterialxOES glad_glMaterialxOES +GLAD_API_CALL PFNGLMATERIALXVOESPROC glad_glMaterialxvOES; +#define glMaterialxvOES glad_glMaterialxvOES +GLAD_API_CALL PFNGLMATRIXFRUSTUMEXTPROC glad_glMatrixFrustumEXT; +#define glMatrixFrustumEXT glad_glMatrixFrustumEXT +GLAD_API_CALL PFNGLMATRIXINDEXPOINTERARBPROC glad_glMatrixIndexPointerARB; +#define glMatrixIndexPointerARB glad_glMatrixIndexPointerARB +GLAD_API_CALL PFNGLMATRIXINDEXUBVARBPROC glad_glMatrixIndexubvARB; +#define glMatrixIndexubvARB glad_glMatrixIndexubvARB +GLAD_API_CALL PFNGLMATRIXINDEXUIVARBPROC glad_glMatrixIndexuivARB; +#define glMatrixIndexuivARB glad_glMatrixIndexuivARB +GLAD_API_CALL PFNGLMATRIXINDEXUSVARBPROC glad_glMatrixIndexusvARB; +#define glMatrixIndexusvARB glad_glMatrixIndexusvARB +GLAD_API_CALL PFNGLMATRIXLOAD3X2FNVPROC glad_glMatrixLoad3x2fNV; +#define glMatrixLoad3x2fNV glad_glMatrixLoad3x2fNV +GLAD_API_CALL PFNGLMATRIXLOAD3X3FNVPROC glad_glMatrixLoad3x3fNV; +#define glMatrixLoad3x3fNV glad_glMatrixLoad3x3fNV +GLAD_API_CALL PFNGLMATRIXLOADIDENTITYEXTPROC glad_glMatrixLoadIdentityEXT; +#define glMatrixLoadIdentityEXT glad_glMatrixLoadIdentityEXT +GLAD_API_CALL PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC glad_glMatrixLoadTranspose3x3fNV; +#define glMatrixLoadTranspose3x3fNV glad_glMatrixLoadTranspose3x3fNV +GLAD_API_CALL PFNGLMATRIXLOADTRANSPOSEDEXTPROC glad_glMatrixLoadTransposedEXT; +#define glMatrixLoadTransposedEXT glad_glMatrixLoadTransposedEXT +GLAD_API_CALL PFNGLMATRIXLOADTRANSPOSEFEXTPROC glad_glMatrixLoadTransposefEXT; +#define glMatrixLoadTransposefEXT glad_glMatrixLoadTransposefEXT +GLAD_API_CALL PFNGLMATRIXLOADDEXTPROC glad_glMatrixLoaddEXT; +#define glMatrixLoaddEXT glad_glMatrixLoaddEXT +GLAD_API_CALL PFNGLMATRIXLOADFEXTPROC glad_glMatrixLoadfEXT; +#define glMatrixLoadfEXT glad_glMatrixLoadfEXT +GLAD_API_CALL PFNGLMATRIXMULT3X2FNVPROC glad_glMatrixMult3x2fNV; +#define glMatrixMult3x2fNV glad_glMatrixMult3x2fNV +GLAD_API_CALL PFNGLMATRIXMULT3X3FNVPROC glad_glMatrixMult3x3fNV; +#define glMatrixMult3x3fNV glad_glMatrixMult3x3fNV +GLAD_API_CALL PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC glad_glMatrixMultTranspose3x3fNV; +#define glMatrixMultTranspose3x3fNV glad_glMatrixMultTranspose3x3fNV +GLAD_API_CALL PFNGLMATRIXMULTTRANSPOSEDEXTPROC glad_glMatrixMultTransposedEXT; +#define glMatrixMultTransposedEXT glad_glMatrixMultTransposedEXT +GLAD_API_CALL PFNGLMATRIXMULTTRANSPOSEFEXTPROC glad_glMatrixMultTransposefEXT; +#define glMatrixMultTransposefEXT glad_glMatrixMultTransposefEXT +GLAD_API_CALL PFNGLMATRIXMULTDEXTPROC glad_glMatrixMultdEXT; +#define glMatrixMultdEXT glad_glMatrixMultdEXT +GLAD_API_CALL PFNGLMATRIXMULTFEXTPROC glad_glMatrixMultfEXT; +#define glMatrixMultfEXT glad_glMatrixMultfEXT +GLAD_API_CALL PFNGLMATRIXORTHOEXTPROC glad_glMatrixOrthoEXT; +#define glMatrixOrthoEXT glad_glMatrixOrthoEXT +GLAD_API_CALL PFNGLMATRIXPOPEXTPROC glad_glMatrixPopEXT; +#define glMatrixPopEXT glad_glMatrixPopEXT +GLAD_API_CALL PFNGLMATRIXPUSHEXTPROC glad_glMatrixPushEXT; +#define glMatrixPushEXT glad_glMatrixPushEXT +GLAD_API_CALL PFNGLMATRIXROTATEDEXTPROC glad_glMatrixRotatedEXT; +#define glMatrixRotatedEXT glad_glMatrixRotatedEXT +GLAD_API_CALL PFNGLMATRIXROTATEFEXTPROC glad_glMatrixRotatefEXT; +#define glMatrixRotatefEXT glad_glMatrixRotatefEXT +GLAD_API_CALL PFNGLMATRIXSCALEDEXTPROC glad_glMatrixScaledEXT; +#define glMatrixScaledEXT glad_glMatrixScaledEXT +GLAD_API_CALL PFNGLMATRIXSCALEFEXTPROC glad_glMatrixScalefEXT; +#define glMatrixScalefEXT glad_glMatrixScalefEXT +GLAD_API_CALL PFNGLMATRIXTRANSLATEDEXTPROC glad_glMatrixTranslatedEXT; +#define glMatrixTranslatedEXT glad_glMatrixTranslatedEXT +GLAD_API_CALL PFNGLMATRIXTRANSLATEFEXTPROC glad_glMatrixTranslatefEXT; +#define glMatrixTranslatefEXT glad_glMatrixTranslatefEXT +GLAD_API_CALL PFNGLMAXSHADERCOMPILERTHREADSARBPROC glad_glMaxShaderCompilerThreadsARB; +#define glMaxShaderCompilerThreadsARB glad_glMaxShaderCompilerThreadsARB +GLAD_API_CALL PFNGLMAXSHADERCOMPILERTHREADSKHRPROC glad_glMaxShaderCompilerThreadsKHR; +#define glMaxShaderCompilerThreadsKHR glad_glMaxShaderCompilerThreadsKHR +GLAD_API_CALL PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier; +#define glMemoryBarrier glad_glMemoryBarrier +GLAD_API_CALL PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion; +#define glMemoryBarrierByRegion glad_glMemoryBarrierByRegion +GLAD_API_CALL PFNGLMEMORYBARRIEREXTPROC glad_glMemoryBarrierEXT; +#define glMemoryBarrierEXT glad_glMemoryBarrierEXT +GLAD_API_CALL PFNGLMEMORYOBJECTPARAMETERIVEXTPROC glad_glMemoryObjectParameterivEXT; +#define glMemoryObjectParameterivEXT glad_glMemoryObjectParameterivEXT +GLAD_API_CALL PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; +#define glMinSampleShading glad_glMinSampleShading +GLAD_API_CALL PFNGLMINSAMPLESHADINGARBPROC glad_glMinSampleShadingARB; +#define glMinSampleShadingARB glad_glMinSampleShadingARB +GLAD_API_CALL PFNGLMINMAXEXTPROC glad_glMinmaxEXT; +#define glMinmaxEXT glad_glMinmaxEXT +GLAD_API_CALL PFNGLMULTMATRIXXOESPROC glad_glMultMatrixxOES; +#define glMultMatrixxOES glad_glMultMatrixxOES +GLAD_API_CALL PFNGLMULTTRANSPOSEMATRIXDARBPROC glad_glMultTransposeMatrixdARB; +#define glMultTransposeMatrixdARB glad_glMultTransposeMatrixdARB +GLAD_API_CALL PFNGLMULTTRANSPOSEMATRIXFARBPROC glad_glMultTransposeMatrixfARB; +#define glMultTransposeMatrixfARB glad_glMultTransposeMatrixfARB +GLAD_API_CALL PFNGLMULTTRANSPOSEMATRIXXOESPROC glad_glMultTransposeMatrixxOES; +#define glMultTransposeMatrixxOES glad_glMultTransposeMatrixxOES +GLAD_API_CALL PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; +#define glMultiDrawArrays glad_glMultiDrawArrays +GLAD_API_CALL PFNGLMULTIDRAWARRAYSEXTPROC glad_glMultiDrawArraysEXT; +#define glMultiDrawArraysEXT glad_glMultiDrawArraysEXT +GLAD_API_CALL PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect; +#define glMultiDrawArraysIndirect glad_glMultiDrawArraysIndirect +GLAD_API_CALL PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC glad_glMultiDrawArraysIndirectAMD; +#define glMultiDrawArraysIndirectAMD glad_glMultiDrawArraysIndirectAMD +GLAD_API_CALL PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawArraysIndirectBindlessCountNV; +#define glMultiDrawArraysIndirectBindlessCountNV glad_glMultiDrawArraysIndirectBindlessCountNV +GLAD_API_CALL PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC glad_glMultiDrawArraysIndirectBindlessNV; +#define glMultiDrawArraysIndirectBindlessNV glad_glMultiDrawArraysIndirectBindlessNV +GLAD_API_CALL PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glad_glMultiDrawArraysIndirectCountARB; +#define glMultiDrawArraysIndirectCountARB glad_glMultiDrawArraysIndirectCountARB +GLAD_API_CALL PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC glad_glMultiDrawElementArrayAPPLE; +#define glMultiDrawElementArrayAPPLE glad_glMultiDrawElementArrayAPPLE +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; +#define glMultiDrawElements glad_glMultiDrawElements +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; +#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSEXTPROC glad_glMultiDrawElementsEXT; +#define glMultiDrawElementsEXT glad_glMultiDrawElementsEXT +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect; +#define glMultiDrawElementsIndirect glad_glMultiDrawElementsIndirect +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC glad_glMultiDrawElementsIndirectAMD; +#define glMultiDrawElementsIndirectAMD glad_glMultiDrawElementsIndirectAMD +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawElementsIndirectBindlessCountNV; +#define glMultiDrawElementsIndirectBindlessCountNV glad_glMultiDrawElementsIndirectBindlessCountNV +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glad_glMultiDrawElementsIndirectBindlessNV; +#define glMultiDrawElementsIndirectBindlessNV glad_glMultiDrawElementsIndirectBindlessNV +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glad_glMultiDrawElementsIndirectCountARB; +#define glMultiDrawElementsIndirectCountARB glad_glMultiDrawElementsIndirectCountARB +GLAD_API_CALL PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC glad_glMultiDrawMeshTasksIndirectCountNV; +#define glMultiDrawMeshTasksIndirectCountNV glad_glMultiDrawMeshTasksIndirectCountNV +GLAD_API_CALL PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC glad_glMultiDrawMeshTasksIndirectNV; +#define glMultiDrawMeshTasksIndirectNV glad_glMultiDrawMeshTasksIndirectNV +GLAD_API_CALL PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glad_glMultiDrawRangeElementArrayAPPLE; +#define glMultiDrawRangeElementArrayAPPLE glad_glMultiDrawRangeElementArrayAPPLE +GLAD_API_CALL PFNGLMULTIMODEDRAWARRAYSIBMPROC glad_glMultiModeDrawArraysIBM; +#define glMultiModeDrawArraysIBM glad_glMultiModeDrawArraysIBM +GLAD_API_CALL PFNGLMULTIMODEDRAWELEMENTSIBMPROC glad_glMultiModeDrawElementsIBM; +#define glMultiModeDrawElementsIBM glad_glMultiModeDrawElementsIBM +GLAD_API_CALL PFNGLMULTITEXBUFFEREXTPROC glad_glMultiTexBufferEXT; +#define glMultiTexBufferEXT glad_glMultiTexBufferEXT +GLAD_API_CALL PFNGLMULTITEXCOORD1BOESPROC glad_glMultiTexCoord1bOES; +#define glMultiTexCoord1bOES glad_glMultiTexCoord1bOES +GLAD_API_CALL PFNGLMULTITEXCOORD1BVOESPROC glad_glMultiTexCoord1bvOES; +#define glMultiTexCoord1bvOES glad_glMultiTexCoord1bvOES +GLAD_API_CALL PFNGLMULTITEXCOORD1DARBPROC glad_glMultiTexCoord1dARB; +#define glMultiTexCoord1dARB glad_glMultiTexCoord1dARB +GLAD_API_CALL PFNGLMULTITEXCOORD1DVARBPROC glad_glMultiTexCoord1dvARB; +#define glMultiTexCoord1dvARB glad_glMultiTexCoord1dvARB +GLAD_API_CALL PFNGLMULTITEXCOORD1FARBPROC glad_glMultiTexCoord1fARB; +#define glMultiTexCoord1fARB glad_glMultiTexCoord1fARB +GLAD_API_CALL PFNGLMULTITEXCOORD1FVARBPROC glad_glMultiTexCoord1fvARB; +#define glMultiTexCoord1fvARB glad_glMultiTexCoord1fvARB +GLAD_API_CALL PFNGLMULTITEXCOORD1HNVPROC glad_glMultiTexCoord1hNV; +#define glMultiTexCoord1hNV glad_glMultiTexCoord1hNV +GLAD_API_CALL PFNGLMULTITEXCOORD1HVNVPROC glad_glMultiTexCoord1hvNV; +#define glMultiTexCoord1hvNV glad_glMultiTexCoord1hvNV +GLAD_API_CALL PFNGLMULTITEXCOORD1IARBPROC glad_glMultiTexCoord1iARB; +#define glMultiTexCoord1iARB glad_glMultiTexCoord1iARB +GLAD_API_CALL PFNGLMULTITEXCOORD1IVARBPROC glad_glMultiTexCoord1ivARB; +#define glMultiTexCoord1ivARB glad_glMultiTexCoord1ivARB +GLAD_API_CALL PFNGLMULTITEXCOORD1SARBPROC glad_glMultiTexCoord1sARB; +#define glMultiTexCoord1sARB glad_glMultiTexCoord1sARB +GLAD_API_CALL PFNGLMULTITEXCOORD1SVARBPROC glad_glMultiTexCoord1svARB; +#define glMultiTexCoord1svARB glad_glMultiTexCoord1svARB +GLAD_API_CALL PFNGLMULTITEXCOORD1XOESPROC glad_glMultiTexCoord1xOES; +#define glMultiTexCoord1xOES glad_glMultiTexCoord1xOES +GLAD_API_CALL PFNGLMULTITEXCOORD1XVOESPROC glad_glMultiTexCoord1xvOES; +#define glMultiTexCoord1xvOES glad_glMultiTexCoord1xvOES +GLAD_API_CALL PFNGLMULTITEXCOORD2BOESPROC glad_glMultiTexCoord2bOES; +#define glMultiTexCoord2bOES glad_glMultiTexCoord2bOES +GLAD_API_CALL PFNGLMULTITEXCOORD2BVOESPROC glad_glMultiTexCoord2bvOES; +#define glMultiTexCoord2bvOES glad_glMultiTexCoord2bvOES +GLAD_API_CALL PFNGLMULTITEXCOORD2DARBPROC glad_glMultiTexCoord2dARB; +#define glMultiTexCoord2dARB glad_glMultiTexCoord2dARB +GLAD_API_CALL PFNGLMULTITEXCOORD2DVARBPROC glad_glMultiTexCoord2dvARB; +#define glMultiTexCoord2dvARB glad_glMultiTexCoord2dvARB +GLAD_API_CALL PFNGLMULTITEXCOORD2FARBPROC glad_glMultiTexCoord2fARB; +#define glMultiTexCoord2fARB glad_glMultiTexCoord2fARB +GLAD_API_CALL PFNGLMULTITEXCOORD2FVARBPROC glad_glMultiTexCoord2fvARB; +#define glMultiTexCoord2fvARB glad_glMultiTexCoord2fvARB +GLAD_API_CALL PFNGLMULTITEXCOORD2HNVPROC glad_glMultiTexCoord2hNV; +#define glMultiTexCoord2hNV glad_glMultiTexCoord2hNV +GLAD_API_CALL PFNGLMULTITEXCOORD2HVNVPROC glad_glMultiTexCoord2hvNV; +#define glMultiTexCoord2hvNV glad_glMultiTexCoord2hvNV +GLAD_API_CALL PFNGLMULTITEXCOORD2IARBPROC glad_glMultiTexCoord2iARB; +#define glMultiTexCoord2iARB glad_glMultiTexCoord2iARB +GLAD_API_CALL PFNGLMULTITEXCOORD2IVARBPROC glad_glMultiTexCoord2ivARB; +#define glMultiTexCoord2ivARB glad_glMultiTexCoord2ivARB +GLAD_API_CALL PFNGLMULTITEXCOORD2SARBPROC glad_glMultiTexCoord2sARB; +#define glMultiTexCoord2sARB glad_glMultiTexCoord2sARB +GLAD_API_CALL PFNGLMULTITEXCOORD2SVARBPROC glad_glMultiTexCoord2svARB; +#define glMultiTexCoord2svARB glad_glMultiTexCoord2svARB +GLAD_API_CALL PFNGLMULTITEXCOORD2XOESPROC glad_glMultiTexCoord2xOES; +#define glMultiTexCoord2xOES glad_glMultiTexCoord2xOES +GLAD_API_CALL PFNGLMULTITEXCOORD2XVOESPROC glad_glMultiTexCoord2xvOES; +#define glMultiTexCoord2xvOES glad_glMultiTexCoord2xvOES +GLAD_API_CALL PFNGLMULTITEXCOORD3BOESPROC glad_glMultiTexCoord3bOES; +#define glMultiTexCoord3bOES glad_glMultiTexCoord3bOES +GLAD_API_CALL PFNGLMULTITEXCOORD3BVOESPROC glad_glMultiTexCoord3bvOES; +#define glMultiTexCoord3bvOES glad_glMultiTexCoord3bvOES +GLAD_API_CALL PFNGLMULTITEXCOORD3DARBPROC glad_glMultiTexCoord3dARB; +#define glMultiTexCoord3dARB glad_glMultiTexCoord3dARB +GLAD_API_CALL PFNGLMULTITEXCOORD3DVARBPROC glad_glMultiTexCoord3dvARB; +#define glMultiTexCoord3dvARB glad_glMultiTexCoord3dvARB +GLAD_API_CALL PFNGLMULTITEXCOORD3FARBPROC glad_glMultiTexCoord3fARB; +#define glMultiTexCoord3fARB glad_glMultiTexCoord3fARB +GLAD_API_CALL PFNGLMULTITEXCOORD3FVARBPROC glad_glMultiTexCoord3fvARB; +#define glMultiTexCoord3fvARB glad_glMultiTexCoord3fvARB +GLAD_API_CALL PFNGLMULTITEXCOORD3HNVPROC glad_glMultiTexCoord3hNV; +#define glMultiTexCoord3hNV glad_glMultiTexCoord3hNV +GLAD_API_CALL PFNGLMULTITEXCOORD3HVNVPROC glad_glMultiTexCoord3hvNV; +#define glMultiTexCoord3hvNV glad_glMultiTexCoord3hvNV +GLAD_API_CALL PFNGLMULTITEXCOORD3IARBPROC glad_glMultiTexCoord3iARB; +#define glMultiTexCoord3iARB glad_glMultiTexCoord3iARB +GLAD_API_CALL PFNGLMULTITEXCOORD3IVARBPROC glad_glMultiTexCoord3ivARB; +#define glMultiTexCoord3ivARB glad_glMultiTexCoord3ivARB +GLAD_API_CALL PFNGLMULTITEXCOORD3SARBPROC glad_glMultiTexCoord3sARB; +#define glMultiTexCoord3sARB glad_glMultiTexCoord3sARB +GLAD_API_CALL PFNGLMULTITEXCOORD3SVARBPROC glad_glMultiTexCoord3svARB; +#define glMultiTexCoord3svARB glad_glMultiTexCoord3svARB +GLAD_API_CALL PFNGLMULTITEXCOORD3XOESPROC glad_glMultiTexCoord3xOES; +#define glMultiTexCoord3xOES glad_glMultiTexCoord3xOES +GLAD_API_CALL PFNGLMULTITEXCOORD3XVOESPROC glad_glMultiTexCoord3xvOES; +#define glMultiTexCoord3xvOES glad_glMultiTexCoord3xvOES +GLAD_API_CALL PFNGLMULTITEXCOORD4BOESPROC glad_glMultiTexCoord4bOES; +#define glMultiTexCoord4bOES glad_glMultiTexCoord4bOES +GLAD_API_CALL PFNGLMULTITEXCOORD4BVOESPROC glad_glMultiTexCoord4bvOES; +#define glMultiTexCoord4bvOES glad_glMultiTexCoord4bvOES +GLAD_API_CALL PFNGLMULTITEXCOORD4DARBPROC glad_glMultiTexCoord4dARB; +#define glMultiTexCoord4dARB glad_glMultiTexCoord4dARB +GLAD_API_CALL PFNGLMULTITEXCOORD4DVARBPROC glad_glMultiTexCoord4dvARB; +#define glMultiTexCoord4dvARB glad_glMultiTexCoord4dvARB +GLAD_API_CALL PFNGLMULTITEXCOORD4FARBPROC glad_glMultiTexCoord4fARB; +#define glMultiTexCoord4fARB glad_glMultiTexCoord4fARB +GLAD_API_CALL PFNGLMULTITEXCOORD4FVARBPROC glad_glMultiTexCoord4fvARB; +#define glMultiTexCoord4fvARB glad_glMultiTexCoord4fvARB +GLAD_API_CALL PFNGLMULTITEXCOORD4HNVPROC glad_glMultiTexCoord4hNV; +#define glMultiTexCoord4hNV glad_glMultiTexCoord4hNV +GLAD_API_CALL PFNGLMULTITEXCOORD4HVNVPROC glad_glMultiTexCoord4hvNV; +#define glMultiTexCoord4hvNV glad_glMultiTexCoord4hvNV +GLAD_API_CALL PFNGLMULTITEXCOORD4IARBPROC glad_glMultiTexCoord4iARB; +#define glMultiTexCoord4iARB glad_glMultiTexCoord4iARB +GLAD_API_CALL PFNGLMULTITEXCOORD4IVARBPROC glad_glMultiTexCoord4ivARB; +#define glMultiTexCoord4ivARB glad_glMultiTexCoord4ivARB +GLAD_API_CALL PFNGLMULTITEXCOORD4SARBPROC glad_glMultiTexCoord4sARB; +#define glMultiTexCoord4sARB glad_glMultiTexCoord4sARB +GLAD_API_CALL PFNGLMULTITEXCOORD4SVARBPROC glad_glMultiTexCoord4svARB; +#define glMultiTexCoord4svARB glad_glMultiTexCoord4svARB +GLAD_API_CALL PFNGLMULTITEXCOORD4XOESPROC glad_glMultiTexCoord4xOES; +#define glMultiTexCoord4xOES glad_glMultiTexCoord4xOES +GLAD_API_CALL PFNGLMULTITEXCOORD4XVOESPROC glad_glMultiTexCoord4xvOES; +#define glMultiTexCoord4xvOES glad_glMultiTexCoord4xvOES +GLAD_API_CALL PFNGLMULTITEXCOORDPOINTEREXTPROC glad_glMultiTexCoordPointerEXT; +#define glMultiTexCoordPointerEXT glad_glMultiTexCoordPointerEXT +GLAD_API_CALL PFNGLMULTITEXENVFEXTPROC glad_glMultiTexEnvfEXT; +#define glMultiTexEnvfEXT glad_glMultiTexEnvfEXT +GLAD_API_CALL PFNGLMULTITEXENVFVEXTPROC glad_glMultiTexEnvfvEXT; +#define glMultiTexEnvfvEXT glad_glMultiTexEnvfvEXT +GLAD_API_CALL PFNGLMULTITEXENVIEXTPROC glad_glMultiTexEnviEXT; +#define glMultiTexEnviEXT glad_glMultiTexEnviEXT +GLAD_API_CALL PFNGLMULTITEXENVIVEXTPROC glad_glMultiTexEnvivEXT; +#define glMultiTexEnvivEXT glad_glMultiTexEnvivEXT +GLAD_API_CALL PFNGLMULTITEXGENDEXTPROC glad_glMultiTexGendEXT; +#define glMultiTexGendEXT glad_glMultiTexGendEXT +GLAD_API_CALL PFNGLMULTITEXGENDVEXTPROC glad_glMultiTexGendvEXT; +#define glMultiTexGendvEXT glad_glMultiTexGendvEXT +GLAD_API_CALL PFNGLMULTITEXGENFEXTPROC glad_glMultiTexGenfEXT; +#define glMultiTexGenfEXT glad_glMultiTexGenfEXT +GLAD_API_CALL PFNGLMULTITEXGENFVEXTPROC glad_glMultiTexGenfvEXT; +#define glMultiTexGenfvEXT glad_glMultiTexGenfvEXT +GLAD_API_CALL PFNGLMULTITEXGENIEXTPROC glad_glMultiTexGeniEXT; +#define glMultiTexGeniEXT glad_glMultiTexGeniEXT +GLAD_API_CALL PFNGLMULTITEXGENIVEXTPROC glad_glMultiTexGenivEXT; +#define glMultiTexGenivEXT glad_glMultiTexGenivEXT +GLAD_API_CALL PFNGLMULTITEXIMAGE1DEXTPROC glad_glMultiTexImage1DEXT; +#define glMultiTexImage1DEXT glad_glMultiTexImage1DEXT +GLAD_API_CALL PFNGLMULTITEXIMAGE2DEXTPROC glad_glMultiTexImage2DEXT; +#define glMultiTexImage2DEXT glad_glMultiTexImage2DEXT +GLAD_API_CALL PFNGLMULTITEXIMAGE3DEXTPROC glad_glMultiTexImage3DEXT; +#define glMultiTexImage3DEXT glad_glMultiTexImage3DEXT +GLAD_API_CALL PFNGLMULTITEXPARAMETERIIVEXTPROC glad_glMultiTexParameterIivEXT; +#define glMultiTexParameterIivEXT glad_glMultiTexParameterIivEXT +GLAD_API_CALL PFNGLMULTITEXPARAMETERIUIVEXTPROC glad_glMultiTexParameterIuivEXT; +#define glMultiTexParameterIuivEXT glad_glMultiTexParameterIuivEXT +GLAD_API_CALL PFNGLMULTITEXPARAMETERFEXTPROC glad_glMultiTexParameterfEXT; +#define glMultiTexParameterfEXT glad_glMultiTexParameterfEXT +GLAD_API_CALL PFNGLMULTITEXPARAMETERFVEXTPROC glad_glMultiTexParameterfvEXT; +#define glMultiTexParameterfvEXT glad_glMultiTexParameterfvEXT +GLAD_API_CALL PFNGLMULTITEXPARAMETERIEXTPROC glad_glMultiTexParameteriEXT; +#define glMultiTexParameteriEXT glad_glMultiTexParameteriEXT +GLAD_API_CALL PFNGLMULTITEXPARAMETERIVEXTPROC glad_glMultiTexParameterivEXT; +#define glMultiTexParameterivEXT glad_glMultiTexParameterivEXT +GLAD_API_CALL PFNGLMULTITEXRENDERBUFFEREXTPROC glad_glMultiTexRenderbufferEXT; +#define glMultiTexRenderbufferEXT glad_glMultiTexRenderbufferEXT +GLAD_API_CALL PFNGLMULTITEXSUBIMAGE1DEXTPROC glad_glMultiTexSubImage1DEXT; +#define glMultiTexSubImage1DEXT glad_glMultiTexSubImage1DEXT +GLAD_API_CALL PFNGLMULTITEXSUBIMAGE2DEXTPROC glad_glMultiTexSubImage2DEXT; +#define glMultiTexSubImage2DEXT glad_glMultiTexSubImage2DEXT +GLAD_API_CALL PFNGLMULTITEXSUBIMAGE3DEXTPROC glad_glMultiTexSubImage3DEXT; +#define glMultiTexSubImage3DEXT glad_glMultiTexSubImage3DEXT +GLAD_API_CALL PFNGLMULTICASTBARRIERNVPROC glad_glMulticastBarrierNV; +#define glMulticastBarrierNV glad_glMulticastBarrierNV +GLAD_API_CALL PFNGLMULTICASTBLITFRAMEBUFFERNVPROC glad_glMulticastBlitFramebufferNV; +#define glMulticastBlitFramebufferNV glad_glMulticastBlitFramebufferNV +GLAD_API_CALL PFNGLMULTICASTBUFFERSUBDATANVPROC glad_glMulticastBufferSubDataNV; +#define glMulticastBufferSubDataNV glad_glMulticastBufferSubDataNV +GLAD_API_CALL PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC glad_glMulticastCopyBufferSubDataNV; +#define glMulticastCopyBufferSubDataNV glad_glMulticastCopyBufferSubDataNV +GLAD_API_CALL PFNGLMULTICASTCOPYIMAGESUBDATANVPROC glad_glMulticastCopyImageSubDataNV; +#define glMulticastCopyImageSubDataNV glad_glMulticastCopyImageSubDataNV +GLAD_API_CALL PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glMulticastFramebufferSampleLocationsfvNV; +#define glMulticastFramebufferSampleLocationsfvNV glad_glMulticastFramebufferSampleLocationsfvNV +GLAD_API_CALL PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC glad_glMulticastGetQueryObjecti64vNV; +#define glMulticastGetQueryObjecti64vNV glad_glMulticastGetQueryObjecti64vNV +GLAD_API_CALL PFNGLMULTICASTGETQUERYOBJECTIVNVPROC glad_glMulticastGetQueryObjectivNV; +#define glMulticastGetQueryObjectivNV glad_glMulticastGetQueryObjectivNV +GLAD_API_CALL PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC glad_glMulticastGetQueryObjectui64vNV; +#define glMulticastGetQueryObjectui64vNV glad_glMulticastGetQueryObjectui64vNV +GLAD_API_CALL PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC glad_glMulticastGetQueryObjectuivNV; +#define glMulticastGetQueryObjectuivNV glad_glMulticastGetQueryObjectuivNV +GLAD_API_CALL PFNGLMULTICASTSCISSORARRAYVNVXPROC glad_glMulticastScissorArrayvNVX; +#define glMulticastScissorArrayvNVX glad_glMulticastScissorArrayvNVX +GLAD_API_CALL PFNGLMULTICASTVIEWPORTARRAYVNVXPROC glad_glMulticastViewportArrayvNVX; +#define glMulticastViewportArrayvNVX glad_glMulticastViewportArrayvNVX +GLAD_API_CALL PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC glad_glMulticastViewportPositionWScaleNVX; +#define glMulticastViewportPositionWScaleNVX glad_glMulticastViewportPositionWScaleNVX +GLAD_API_CALL PFNGLMULTICASTWAITSYNCNVPROC glad_glMulticastWaitSyncNV; +#define glMulticastWaitSyncNV glad_glMulticastWaitSyncNV +GLAD_API_CALL PFNGLNAMEDBUFFERATTACHMEMORYNVPROC glad_glNamedBufferAttachMemoryNV; +#define glNamedBufferAttachMemoryNV glad_glNamedBufferAttachMemoryNV +GLAD_API_CALL PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData; +#define glNamedBufferData glad_glNamedBufferData +GLAD_API_CALL PFNGLNAMEDBUFFERDATAEXTPROC glad_glNamedBufferDataEXT; +#define glNamedBufferDataEXT glad_glNamedBufferDataEXT +GLAD_API_CALL PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC glad_glNamedBufferPageCommitmentARB; +#define glNamedBufferPageCommitmentARB glad_glNamedBufferPageCommitmentARB +GLAD_API_CALL PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC glad_glNamedBufferPageCommitmentEXT; +#define glNamedBufferPageCommitmentEXT glad_glNamedBufferPageCommitmentEXT +GLAD_API_CALL PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC glad_glNamedBufferPageCommitmentMemNV; +#define glNamedBufferPageCommitmentMemNV glad_glNamedBufferPageCommitmentMemNV +GLAD_API_CALL PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage; +#define glNamedBufferStorage glad_glNamedBufferStorage +GLAD_API_CALL PFNGLNAMEDBUFFERSTORAGEEXTPROC glad_glNamedBufferStorageEXT; +#define glNamedBufferStorageEXT glad_glNamedBufferStorageEXT +GLAD_API_CALL PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC glad_glNamedBufferStorageExternalEXT; +#define glNamedBufferStorageExternalEXT glad_glNamedBufferStorageExternalEXT +GLAD_API_CALL PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC glad_glNamedBufferStorageMemEXT; +#define glNamedBufferStorageMemEXT glad_glNamedBufferStorageMemEXT +GLAD_API_CALL PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData; +#define glNamedBufferSubData glad_glNamedBufferSubData +GLAD_API_CALL PFNGLNAMEDBUFFERSUBDATAEXTPROC glad_glNamedBufferSubDataEXT; +#define glNamedBufferSubDataEXT glad_glNamedBufferSubDataEXT +GLAD_API_CALL PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glad_glNamedCopyBufferSubDataEXT; +#define glNamedCopyBufferSubDataEXT glad_glNamedCopyBufferSubDataEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer; +#define glNamedFramebufferDrawBuffer glad_glNamedFramebufferDrawBuffer +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers; +#define glNamedFramebufferDrawBuffers glad_glNamedFramebufferDrawBuffers +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri; +#define glNamedFramebufferParameteri glad_glNamedFramebufferParameteri +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glad_glNamedFramebufferParameteriEXT; +#define glNamedFramebufferParameteriEXT glad_glNamedFramebufferParameteriEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer; +#define glNamedFramebufferReadBuffer glad_glNamedFramebufferReadBuffer +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer; +#define glNamedFramebufferRenderbuffer glad_glNamedFramebufferRenderbuffer +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glad_glNamedFramebufferRenderbufferEXT; +#define glNamedFramebufferRenderbufferEXT glad_glNamedFramebufferRenderbufferEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB; +#define glNamedFramebufferSampleLocationsfvARB glad_glNamedFramebufferSampleLocationsfvARB +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glNamedFramebufferSampleLocationsfvNV; +#define glNamedFramebufferSampleLocationsfvNV glad_glNamedFramebufferSampleLocationsfvNV +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glNamedFramebufferSamplePositionsfvAMD; +#define glNamedFramebufferSamplePositionsfvAMD glad_glNamedFramebufferSamplePositionsfvAMD +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture; +#define glNamedFramebufferTexture glad_glNamedFramebufferTexture +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glad_glNamedFramebufferTexture1DEXT; +#define glNamedFramebufferTexture1DEXT glad_glNamedFramebufferTexture1DEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glad_glNamedFramebufferTexture2DEXT; +#define glNamedFramebufferTexture2DEXT glad_glNamedFramebufferTexture2DEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glad_glNamedFramebufferTexture3DEXT; +#define glNamedFramebufferTexture3DEXT glad_glNamedFramebufferTexture3DEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glad_glNamedFramebufferTextureEXT; +#define glNamedFramebufferTextureEXT glad_glNamedFramebufferTextureEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glad_glNamedFramebufferTextureFaceEXT; +#define glNamedFramebufferTextureFaceEXT glad_glNamedFramebufferTextureFaceEXT +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer; +#define glNamedFramebufferTextureLayer glad_glNamedFramebufferTextureLayer +GLAD_API_CALL PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glad_glNamedFramebufferTextureLayerEXT; +#define glNamedFramebufferTextureLayerEXT glad_glNamedFramebufferTextureLayerEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glad_glNamedProgramLocalParameter4dEXT; +#define glNamedProgramLocalParameter4dEXT glad_glNamedProgramLocalParameter4dEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glad_glNamedProgramLocalParameter4dvEXT; +#define glNamedProgramLocalParameter4dvEXT glad_glNamedProgramLocalParameter4dvEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glad_glNamedProgramLocalParameter4fEXT; +#define glNamedProgramLocalParameter4fEXT glad_glNamedProgramLocalParameter4fEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glad_glNamedProgramLocalParameter4fvEXT; +#define glNamedProgramLocalParameter4fvEXT glad_glNamedProgramLocalParameter4fvEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glad_glNamedProgramLocalParameterI4iEXT; +#define glNamedProgramLocalParameterI4iEXT glad_glNamedProgramLocalParameterI4iEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glad_glNamedProgramLocalParameterI4ivEXT; +#define glNamedProgramLocalParameterI4ivEXT glad_glNamedProgramLocalParameterI4ivEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glad_glNamedProgramLocalParameterI4uiEXT; +#define glNamedProgramLocalParameterI4uiEXT glad_glNamedProgramLocalParameterI4uiEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glad_glNamedProgramLocalParameterI4uivEXT; +#define glNamedProgramLocalParameterI4uivEXT glad_glNamedProgramLocalParameterI4uivEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glNamedProgramLocalParameters4fvEXT; +#define glNamedProgramLocalParameters4fvEXT glad_glNamedProgramLocalParameters4fvEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glad_glNamedProgramLocalParametersI4ivEXT; +#define glNamedProgramLocalParametersI4ivEXT glad_glNamedProgramLocalParametersI4ivEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glad_glNamedProgramLocalParametersI4uivEXT; +#define glNamedProgramLocalParametersI4uivEXT glad_glNamedProgramLocalParametersI4uivEXT +GLAD_API_CALL PFNGLNAMEDPROGRAMSTRINGEXTPROC glad_glNamedProgramStringEXT; +#define glNamedProgramStringEXT glad_glNamedProgramStringEXT +GLAD_API_CALL PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage; +#define glNamedRenderbufferStorage glad_glNamedRenderbufferStorage +GLAD_API_CALL PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glad_glNamedRenderbufferStorageEXT; +#define glNamedRenderbufferStorageEXT glad_glNamedRenderbufferStorageEXT +GLAD_API_CALL PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample; +#define glNamedRenderbufferStorageMultisample glad_glNamedRenderbufferStorageMultisample +GLAD_API_CALL PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC glad_glNamedRenderbufferStorageMultisampleAdvancedAMD; +#define glNamedRenderbufferStorageMultisampleAdvancedAMD glad_glNamedRenderbufferStorageMultisampleAdvancedAMD +GLAD_API_CALL PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glad_glNamedRenderbufferStorageMultisampleCoverageEXT; +#define glNamedRenderbufferStorageMultisampleCoverageEXT glad_glNamedRenderbufferStorageMultisampleCoverageEXT +GLAD_API_CALL PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glNamedRenderbufferStorageMultisampleEXT; +#define glNamedRenderbufferStorageMultisampleEXT glad_glNamedRenderbufferStorageMultisampleEXT +GLAD_API_CALL PFNGLNAMEDSTRINGARBPROC glad_glNamedStringARB; +#define glNamedStringARB glad_glNamedStringARB +GLAD_API_CALL PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI; +#define glNewObjectBufferATI glad_glNewObjectBufferATI +GLAD_API_CALL PFNGLNORMAL3FVERTEX3FSUNPROC glad_glNormal3fVertex3fSUN; +#define glNormal3fVertex3fSUN glad_glNormal3fVertex3fSUN +GLAD_API_CALL PFNGLNORMAL3FVERTEX3FVSUNPROC glad_glNormal3fVertex3fvSUN; +#define glNormal3fVertex3fvSUN glad_glNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLNORMAL3HNVPROC glad_glNormal3hNV; +#define glNormal3hNV glad_glNormal3hNV +GLAD_API_CALL PFNGLNORMAL3HVNVPROC glad_glNormal3hvNV; +#define glNormal3hvNV glad_glNormal3hvNV +GLAD_API_CALL PFNGLNORMAL3XOESPROC glad_glNormal3xOES; +#define glNormal3xOES glad_glNormal3xOES +GLAD_API_CALL PFNGLNORMAL3XVOESPROC glad_glNormal3xvOES; +#define glNormal3xvOES glad_glNormal3xvOES +GLAD_API_CALL PFNGLNORMALFORMATNVPROC glad_glNormalFormatNV; +#define glNormalFormatNV glad_glNormalFormatNV +GLAD_API_CALL PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT; +#define glNormalPointerEXT glad_glNormalPointerEXT +GLAD_API_CALL PFNGLNORMALPOINTERLISTIBMPROC glad_glNormalPointerListIBM; +#define glNormalPointerListIBM glad_glNormalPointerListIBM +GLAD_API_CALL PFNGLNORMALPOINTERVINTELPROC glad_glNormalPointervINTEL; +#define glNormalPointervINTEL glad_glNormalPointervINTEL +GLAD_API_CALL PFNGLNORMALSTREAM3BATIPROC glad_glNormalStream3bATI; +#define glNormalStream3bATI glad_glNormalStream3bATI +GLAD_API_CALL PFNGLNORMALSTREAM3BVATIPROC glad_glNormalStream3bvATI; +#define glNormalStream3bvATI glad_glNormalStream3bvATI +GLAD_API_CALL PFNGLNORMALSTREAM3DATIPROC glad_glNormalStream3dATI; +#define glNormalStream3dATI glad_glNormalStream3dATI +GLAD_API_CALL PFNGLNORMALSTREAM3DVATIPROC glad_glNormalStream3dvATI; +#define glNormalStream3dvATI glad_glNormalStream3dvATI +GLAD_API_CALL PFNGLNORMALSTREAM3FATIPROC glad_glNormalStream3fATI; +#define glNormalStream3fATI glad_glNormalStream3fATI +GLAD_API_CALL PFNGLNORMALSTREAM3FVATIPROC glad_glNormalStream3fvATI; +#define glNormalStream3fvATI glad_glNormalStream3fvATI +GLAD_API_CALL PFNGLNORMALSTREAM3IATIPROC glad_glNormalStream3iATI; +#define glNormalStream3iATI glad_glNormalStream3iATI +GLAD_API_CALL PFNGLNORMALSTREAM3IVATIPROC glad_glNormalStream3ivATI; +#define glNormalStream3ivATI glad_glNormalStream3ivATI +GLAD_API_CALL PFNGLNORMALSTREAM3SATIPROC glad_glNormalStream3sATI; +#define glNormalStream3sATI glad_glNormalStream3sATI +GLAD_API_CALL PFNGLNORMALSTREAM3SVATIPROC glad_glNormalStream3svATI; +#define glNormalStream3svATI glad_glNormalStream3svATI +GLAD_API_CALL PFNGLOBJECTLABELPROC glad_glObjectLabel; +#define glObjectLabel glad_glObjectLabel +GLAD_API_CALL PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; +#define glObjectPtrLabel glad_glObjectPtrLabel +GLAD_API_CALL PFNGLOBJECTPURGEABLEAPPLEPROC glad_glObjectPurgeableAPPLE; +#define glObjectPurgeableAPPLE glad_glObjectPurgeableAPPLE +GLAD_API_CALL PFNGLOBJECTUNPURGEABLEAPPLEPROC glad_glObjectUnpurgeableAPPLE; +#define glObjectUnpurgeableAPPLE glad_glObjectUnpurgeableAPPLE +GLAD_API_CALL PFNGLORTHOFOESPROC glad_glOrthofOES; +#define glOrthofOES glad_glOrthofOES +GLAD_API_CALL PFNGLORTHOXOESPROC glad_glOrthoxOES; +#define glOrthoxOES glad_glOrthoxOES +GLAD_API_CALL PFNGLPNTRIANGLESFATIPROC glad_glPNTrianglesfATI; +#define glPNTrianglesfATI glad_glPNTrianglesfATI +GLAD_API_CALL PFNGLPNTRIANGLESIATIPROC glad_glPNTrianglesiATI; +#define glPNTrianglesiATI glad_glPNTrianglesiATI +GLAD_API_CALL PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI; +#define glPassTexCoordATI glad_glPassTexCoordATI +GLAD_API_CALL PFNGLPASSTHROUGHXOESPROC glad_glPassThroughxOES; +#define glPassThroughxOES glad_glPassThroughxOES +GLAD_API_CALL PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv; +#define glPatchParameterfv glad_glPatchParameterfv +GLAD_API_CALL PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; +#define glPatchParameteri glad_glPatchParameteri +GLAD_API_CALL PFNGLPATHCOMMANDSNVPROC glad_glPathCommandsNV; +#define glPathCommandsNV glad_glPathCommandsNV +GLAD_API_CALL PFNGLPATHCOORDSNVPROC glad_glPathCoordsNV; +#define glPathCoordsNV glad_glPathCoordsNV +GLAD_API_CALL PFNGLPATHCOVERDEPTHFUNCNVPROC glad_glPathCoverDepthFuncNV; +#define glPathCoverDepthFuncNV glad_glPathCoverDepthFuncNV +GLAD_API_CALL PFNGLPATHDASHARRAYNVPROC glad_glPathDashArrayNV; +#define glPathDashArrayNV glad_glPathDashArrayNV +GLAD_API_CALL PFNGLPATHGLYPHINDEXARRAYNVPROC glad_glPathGlyphIndexArrayNV; +#define glPathGlyphIndexArrayNV glad_glPathGlyphIndexArrayNV +GLAD_API_CALL PFNGLPATHGLYPHINDEXRANGENVPROC glad_glPathGlyphIndexRangeNV; +#define glPathGlyphIndexRangeNV glad_glPathGlyphIndexRangeNV +GLAD_API_CALL PFNGLPATHGLYPHRANGENVPROC glad_glPathGlyphRangeNV; +#define glPathGlyphRangeNV glad_glPathGlyphRangeNV +GLAD_API_CALL PFNGLPATHGLYPHSNVPROC glad_glPathGlyphsNV; +#define glPathGlyphsNV glad_glPathGlyphsNV +GLAD_API_CALL PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC glad_glPathMemoryGlyphIndexArrayNV; +#define glPathMemoryGlyphIndexArrayNV glad_glPathMemoryGlyphIndexArrayNV +GLAD_API_CALL PFNGLPATHPARAMETERFNVPROC glad_glPathParameterfNV; +#define glPathParameterfNV glad_glPathParameterfNV +GLAD_API_CALL PFNGLPATHPARAMETERFVNVPROC glad_glPathParameterfvNV; +#define glPathParameterfvNV glad_glPathParameterfvNV +GLAD_API_CALL PFNGLPATHPARAMETERINVPROC glad_glPathParameteriNV; +#define glPathParameteriNV glad_glPathParameteriNV +GLAD_API_CALL PFNGLPATHPARAMETERIVNVPROC glad_glPathParameterivNV; +#define glPathParameterivNV glad_glPathParameterivNV +GLAD_API_CALL PFNGLPATHSTENCILDEPTHOFFSETNVPROC glad_glPathStencilDepthOffsetNV; +#define glPathStencilDepthOffsetNV glad_glPathStencilDepthOffsetNV +GLAD_API_CALL PFNGLPATHSTENCILFUNCNVPROC glad_glPathStencilFuncNV; +#define glPathStencilFuncNV glad_glPathStencilFuncNV +GLAD_API_CALL PFNGLPATHSTRINGNVPROC glad_glPathStringNV; +#define glPathStringNV glad_glPathStringNV +GLAD_API_CALL PFNGLPATHSUBCOMMANDSNVPROC glad_glPathSubCommandsNV; +#define glPathSubCommandsNV glad_glPathSubCommandsNV +GLAD_API_CALL PFNGLPATHSUBCOORDSNVPROC glad_glPathSubCoordsNV; +#define glPathSubCoordsNV glad_glPathSubCoordsNV +GLAD_API_CALL PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; +#define glPauseTransformFeedback glad_glPauseTransformFeedback +GLAD_API_CALL PFNGLPAUSETRANSFORMFEEDBACKNVPROC glad_glPauseTransformFeedbackNV; +#define glPauseTransformFeedbackNV glad_glPauseTransformFeedbackNV +GLAD_API_CALL PFNGLPIXELDATARANGENVPROC glad_glPixelDataRangeNV; +#define glPixelDataRangeNV glad_glPixelDataRangeNV +GLAD_API_CALL PFNGLPIXELMAPXPROC glad_glPixelMapx; +#define glPixelMapx glad_glPixelMapx +GLAD_API_CALL PFNGLPIXELSTOREFPROC glad_glPixelStoref; +#define glPixelStoref glad_glPixelStoref +GLAD_API_CALL PFNGLPIXELSTOREIPROC glad_glPixelStorei; +#define glPixelStorei glad_glPixelStorei +GLAD_API_CALL PFNGLPIXELSTOREXPROC glad_glPixelStorex; +#define glPixelStorex glad_glPixelStorex +GLAD_API_CALL PFNGLPIXELTEXGENPARAMETERFSGISPROC glad_glPixelTexGenParameterfSGIS; +#define glPixelTexGenParameterfSGIS glad_glPixelTexGenParameterfSGIS +GLAD_API_CALL PFNGLPIXELTEXGENPARAMETERFVSGISPROC glad_glPixelTexGenParameterfvSGIS; +#define glPixelTexGenParameterfvSGIS glad_glPixelTexGenParameterfvSGIS +GLAD_API_CALL PFNGLPIXELTEXGENPARAMETERISGISPROC glad_glPixelTexGenParameteriSGIS; +#define glPixelTexGenParameteriSGIS glad_glPixelTexGenParameteriSGIS +GLAD_API_CALL PFNGLPIXELTEXGENPARAMETERIVSGISPROC glad_glPixelTexGenParameterivSGIS; +#define glPixelTexGenParameterivSGIS glad_glPixelTexGenParameterivSGIS +GLAD_API_CALL PFNGLPIXELTEXGENSGIXPROC glad_glPixelTexGenSGIX; +#define glPixelTexGenSGIX glad_glPixelTexGenSGIX +GLAD_API_CALL PFNGLPIXELTRANSFERXOESPROC glad_glPixelTransferxOES; +#define glPixelTransferxOES glad_glPixelTransferxOES +GLAD_API_CALL PFNGLPIXELTRANSFORMPARAMETERFEXTPROC glad_glPixelTransformParameterfEXT; +#define glPixelTransformParameterfEXT glad_glPixelTransformParameterfEXT +GLAD_API_CALL PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC glad_glPixelTransformParameterfvEXT; +#define glPixelTransformParameterfvEXT glad_glPixelTransformParameterfvEXT +GLAD_API_CALL PFNGLPIXELTRANSFORMPARAMETERIEXTPROC glad_glPixelTransformParameteriEXT; +#define glPixelTransformParameteriEXT glad_glPixelTransformParameteriEXT +GLAD_API_CALL PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC glad_glPixelTransformParameterivEXT; +#define glPixelTransformParameterivEXT glad_glPixelTransformParameterivEXT +GLAD_API_CALL PFNGLPIXELZOOMXOESPROC glad_glPixelZoomxOES; +#define glPixelZoomxOES glad_glPixelZoomxOES +GLAD_API_CALL PFNGLPOINTALONGPATHNVPROC glad_glPointAlongPathNV; +#define glPointAlongPathNV glad_glPointAlongPathNV +GLAD_API_CALL PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; +#define glPointParameterf glad_glPointParameterf +GLAD_API_CALL PFNGLPOINTPARAMETERFARBPROC glad_glPointParameterfARB; +#define glPointParameterfARB glad_glPointParameterfARB +GLAD_API_CALL PFNGLPOINTPARAMETERFEXTPROC glad_glPointParameterfEXT; +#define glPointParameterfEXT glad_glPointParameterfEXT +GLAD_API_CALL PFNGLPOINTPARAMETERFSGISPROC glad_glPointParameterfSGIS; +#define glPointParameterfSGIS glad_glPointParameterfSGIS +GLAD_API_CALL PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; +#define glPointParameterfv glad_glPointParameterfv +GLAD_API_CALL PFNGLPOINTPARAMETERFVARBPROC glad_glPointParameterfvARB; +#define glPointParameterfvARB glad_glPointParameterfvARB +GLAD_API_CALL PFNGLPOINTPARAMETERFVEXTPROC glad_glPointParameterfvEXT; +#define glPointParameterfvEXT glad_glPointParameterfvEXT +GLAD_API_CALL PFNGLPOINTPARAMETERFVSGISPROC glad_glPointParameterfvSGIS; +#define glPointParameterfvSGIS glad_glPointParameterfvSGIS +GLAD_API_CALL PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; +#define glPointParameteri glad_glPointParameteri +GLAD_API_CALL PFNGLPOINTPARAMETERINVPROC glad_glPointParameteriNV; +#define glPointParameteriNV glad_glPointParameteriNV +GLAD_API_CALL PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; +#define glPointParameteriv glad_glPointParameteriv +GLAD_API_CALL PFNGLPOINTPARAMETERIVNVPROC glad_glPointParameterivNV; +#define glPointParameterivNV glad_glPointParameterivNV +GLAD_API_CALL PFNGLPOINTPARAMETERXVOESPROC glad_glPointParameterxvOES; +#define glPointParameterxvOES glad_glPointParameterxvOES +GLAD_API_CALL PFNGLPOINTSIZEPROC glad_glPointSize; +#define glPointSize glad_glPointSize +GLAD_API_CALL PFNGLPOINTSIZEXOESPROC glad_glPointSizexOES; +#define glPointSizexOES glad_glPointSizexOES +GLAD_API_CALL PFNGLPOLLASYNCSGIXPROC glad_glPollAsyncSGIX; +#define glPollAsyncSGIX glad_glPollAsyncSGIX +GLAD_API_CALL PFNGLPOLLINSTRUMENTSSGIXPROC glad_glPollInstrumentsSGIX; +#define glPollInstrumentsSGIX glad_glPollInstrumentsSGIX +GLAD_API_CALL PFNGLPOLYGONMODEPROC glad_glPolygonMode; +#define glPolygonMode glad_glPolygonMode +GLAD_API_CALL PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; +#define glPolygonOffset glad_glPolygonOffset +GLAD_API_CALL PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp; +#define glPolygonOffsetClamp glad_glPolygonOffsetClamp +GLAD_API_CALL PFNGLPOLYGONOFFSETCLAMPEXTPROC glad_glPolygonOffsetClampEXT; +#define glPolygonOffsetClampEXT glad_glPolygonOffsetClampEXT +GLAD_API_CALL PFNGLPOLYGONOFFSETEXTPROC glad_glPolygonOffsetEXT; +#define glPolygonOffsetEXT glad_glPolygonOffsetEXT +GLAD_API_CALL PFNGLPOLYGONOFFSETXOESPROC glad_glPolygonOffsetxOES; +#define glPolygonOffsetxOES glad_glPolygonOffsetxOES +GLAD_API_CALL PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; +#define glPopDebugGroup glad_glPopDebugGroup +GLAD_API_CALL PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT; +#define glPopGroupMarkerEXT glad_glPopGroupMarkerEXT +GLAD_API_CALL PFNGLPRESENTFRAMEDUALFILLNVPROC glad_glPresentFrameDualFillNV; +#define glPresentFrameDualFillNV glad_glPresentFrameDualFillNV +GLAD_API_CALL PFNGLPRESENTFRAMEKEYEDNVPROC glad_glPresentFrameKeyedNV; +#define glPresentFrameKeyedNV glad_glPresentFrameKeyedNV +GLAD_API_CALL PFNGLPRIMITIVEBOUNDINGBOXARBPROC glad_glPrimitiveBoundingBoxARB; +#define glPrimitiveBoundingBoxARB glad_glPrimitiveBoundingBoxARB +GLAD_API_CALL PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; +#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex +GLAD_API_CALL PFNGLPRIMITIVERESTARTINDEXNVPROC glad_glPrimitiveRestartIndexNV; +#define glPrimitiveRestartIndexNV glad_glPrimitiveRestartIndexNV +GLAD_API_CALL PFNGLPRIMITIVERESTARTNVPROC glad_glPrimitiveRestartNV; +#define glPrimitiveRestartNV glad_glPrimitiveRestartNV +GLAD_API_CALL PFNGLPRIORITIZETEXTURESEXTPROC glad_glPrioritizeTexturesEXT; +#define glPrioritizeTexturesEXT glad_glPrioritizeTexturesEXT +GLAD_API_CALL PFNGLPRIORITIZETEXTURESXOESPROC glad_glPrioritizeTexturesxOES; +#define glPrioritizeTexturesxOES glad_glPrioritizeTexturesxOES +GLAD_API_CALL PFNGLPROGRAMBINARYPROC glad_glProgramBinary; +#define glProgramBinary glad_glProgramBinary +GLAD_API_CALL PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC glad_glProgramBufferParametersIivNV; +#define glProgramBufferParametersIivNV glad_glProgramBufferParametersIivNV +GLAD_API_CALL PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC glad_glProgramBufferParametersIuivNV; +#define glProgramBufferParametersIuivNV glad_glProgramBufferParametersIuivNV +GLAD_API_CALL PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC glad_glProgramBufferParametersfvNV; +#define glProgramBufferParametersfvNV glad_glProgramBufferParametersfvNV +GLAD_API_CALL PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB; +#define glProgramEnvParameter4dARB glad_glProgramEnvParameter4dARB +GLAD_API_CALL PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB; +#define glProgramEnvParameter4dvARB glad_glProgramEnvParameter4dvARB +GLAD_API_CALL PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB; +#define glProgramEnvParameter4fARB glad_glProgramEnvParameter4fARB +GLAD_API_CALL PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB; +#define glProgramEnvParameter4fvARB glad_glProgramEnvParameter4fvARB +GLAD_API_CALL PFNGLPROGRAMENVPARAMETERI4INVPROC glad_glProgramEnvParameterI4iNV; +#define glProgramEnvParameterI4iNV glad_glProgramEnvParameterI4iNV +GLAD_API_CALL PFNGLPROGRAMENVPARAMETERI4IVNVPROC glad_glProgramEnvParameterI4ivNV; +#define glProgramEnvParameterI4ivNV glad_glProgramEnvParameterI4ivNV +GLAD_API_CALL PFNGLPROGRAMENVPARAMETERI4UINVPROC glad_glProgramEnvParameterI4uiNV; +#define glProgramEnvParameterI4uiNV glad_glProgramEnvParameterI4uiNV +GLAD_API_CALL PFNGLPROGRAMENVPARAMETERI4UIVNVPROC glad_glProgramEnvParameterI4uivNV; +#define glProgramEnvParameterI4uivNV glad_glProgramEnvParameterI4uivNV +GLAD_API_CALL PFNGLPROGRAMENVPARAMETERS4FVEXTPROC glad_glProgramEnvParameters4fvEXT; +#define glProgramEnvParameters4fvEXT glad_glProgramEnvParameters4fvEXT +GLAD_API_CALL PFNGLPROGRAMENVPARAMETERSI4IVNVPROC glad_glProgramEnvParametersI4ivNV; +#define glProgramEnvParametersI4ivNV glad_glProgramEnvParametersI4ivNV +GLAD_API_CALL PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC glad_glProgramEnvParametersI4uivNV; +#define glProgramEnvParametersI4uivNV glad_glProgramEnvParametersI4uivNV +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB; +#define glProgramLocalParameter4dARB glad_glProgramLocalParameter4dARB +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB; +#define glProgramLocalParameter4dvARB glad_glProgramLocalParameter4dvARB +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB; +#define glProgramLocalParameter4fARB glad_glProgramLocalParameter4fARB +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB; +#define glProgramLocalParameter4fvARB glad_glProgramLocalParameter4fvARB +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETERI4INVPROC glad_glProgramLocalParameterI4iNV; +#define glProgramLocalParameterI4iNV glad_glProgramLocalParameterI4iNV +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC glad_glProgramLocalParameterI4ivNV; +#define glProgramLocalParameterI4ivNV glad_glProgramLocalParameterI4ivNV +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETERI4UINVPROC glad_glProgramLocalParameterI4uiNV; +#define glProgramLocalParameterI4uiNV glad_glProgramLocalParameterI4uiNV +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC glad_glProgramLocalParameterI4uivNV; +#define glProgramLocalParameterI4uivNV glad_glProgramLocalParameterI4uivNV +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glProgramLocalParameters4fvEXT; +#define glProgramLocalParameters4fvEXT glad_glProgramLocalParameters4fvEXT +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC glad_glProgramLocalParametersI4ivNV; +#define glProgramLocalParametersI4ivNV glad_glProgramLocalParametersI4ivNV +GLAD_API_CALL PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC glad_glProgramLocalParametersI4uivNV; +#define glProgramLocalParametersI4uivNV glad_glProgramLocalParametersI4uivNV +GLAD_API_CALL PFNGLPROGRAMNAMEDPARAMETER4DNVPROC glad_glProgramNamedParameter4dNV; +#define glProgramNamedParameter4dNV glad_glProgramNamedParameter4dNV +GLAD_API_CALL PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC glad_glProgramNamedParameter4dvNV; +#define glProgramNamedParameter4dvNV glad_glProgramNamedParameter4dvNV +GLAD_API_CALL PFNGLPROGRAMNAMEDPARAMETER4FNVPROC glad_glProgramNamedParameter4fNV; +#define glProgramNamedParameter4fNV glad_glProgramNamedParameter4fNV +GLAD_API_CALL PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC glad_glProgramNamedParameter4fvNV; +#define glProgramNamedParameter4fvNV glad_glProgramNamedParameter4fvNV +GLAD_API_CALL PFNGLPROGRAMPARAMETER4DNVPROC glad_glProgramParameter4dNV; +#define glProgramParameter4dNV glad_glProgramParameter4dNV +GLAD_API_CALL PFNGLPROGRAMPARAMETER4DVNVPROC glad_glProgramParameter4dvNV; +#define glProgramParameter4dvNV glad_glProgramParameter4dvNV +GLAD_API_CALL PFNGLPROGRAMPARAMETER4FNVPROC glad_glProgramParameter4fNV; +#define glProgramParameter4fNV glad_glProgramParameter4fNV +GLAD_API_CALL PFNGLPROGRAMPARAMETER4FVNVPROC glad_glProgramParameter4fvNV; +#define glProgramParameter4fvNV glad_glProgramParameter4fvNV +GLAD_API_CALL PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri; +#define glProgramParameteri glad_glProgramParameteri +GLAD_API_CALL PFNGLPROGRAMPARAMETERIARBPROC glad_glProgramParameteriARB; +#define glProgramParameteriARB glad_glProgramParameteriARB +GLAD_API_CALL PFNGLPROGRAMPARAMETERIEXTPROC glad_glProgramParameteriEXT; +#define glProgramParameteriEXT glad_glProgramParameteriEXT +GLAD_API_CALL PFNGLPROGRAMPARAMETERS4DVNVPROC glad_glProgramParameters4dvNV; +#define glProgramParameters4dvNV glad_glProgramParameters4dvNV +GLAD_API_CALL PFNGLPROGRAMPARAMETERS4FVNVPROC glad_glProgramParameters4fvNV; +#define glProgramParameters4fvNV glad_glProgramParameters4fvNV +GLAD_API_CALL PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC glad_glProgramPathFragmentInputGenNV; +#define glProgramPathFragmentInputGenNV glad_glProgramPathFragmentInputGenNV +GLAD_API_CALL PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB; +#define glProgramStringARB glad_glProgramStringARB +GLAD_API_CALL PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC glad_glProgramSubroutineParametersuivNV; +#define glProgramSubroutineParametersuivNV glad_glProgramSubroutineParametersuivNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d; +#define glProgramUniform1d glad_glProgramUniform1d +GLAD_API_CALL PFNGLPROGRAMUNIFORM1DEXTPROC glad_glProgramUniform1dEXT; +#define glProgramUniform1dEXT glad_glProgramUniform1dEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv; +#define glProgramUniform1dv glad_glProgramUniform1dv +GLAD_API_CALL PFNGLPROGRAMUNIFORM1DVEXTPROC glad_glProgramUniform1dvEXT; +#define glProgramUniform1dvEXT glad_glProgramUniform1dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f; +#define glProgramUniform1f glad_glProgramUniform1f +GLAD_API_CALL PFNGLPROGRAMUNIFORM1FEXTPROC glad_glProgramUniform1fEXT; +#define glProgramUniform1fEXT glad_glProgramUniform1fEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv; +#define glProgramUniform1fv glad_glProgramUniform1fv +GLAD_API_CALL PFNGLPROGRAMUNIFORM1FVEXTPROC glad_glProgramUniform1fvEXT; +#define glProgramUniform1fvEXT glad_glProgramUniform1fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i; +#define glProgramUniform1i glad_glProgramUniform1i +GLAD_API_CALL PFNGLPROGRAMUNIFORM1I64ARBPROC glad_glProgramUniform1i64ARB; +#define glProgramUniform1i64ARB glad_glProgramUniform1i64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM1I64NVPROC glad_glProgramUniform1i64NV; +#define glProgramUniform1i64NV glad_glProgramUniform1i64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM1I64VARBPROC glad_glProgramUniform1i64vARB; +#define glProgramUniform1i64vARB glad_glProgramUniform1i64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM1I64VNVPROC glad_glProgramUniform1i64vNV; +#define glProgramUniform1i64vNV glad_glProgramUniform1i64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM1IEXTPROC glad_glProgramUniform1iEXT; +#define glProgramUniform1iEXT glad_glProgramUniform1iEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv; +#define glProgramUniform1iv glad_glProgramUniform1iv +GLAD_API_CALL PFNGLPROGRAMUNIFORM1IVEXTPROC glad_glProgramUniform1ivEXT; +#define glProgramUniform1ivEXT glad_glProgramUniform1ivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui; +#define glProgramUniform1ui glad_glProgramUniform1ui +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UI64ARBPROC glad_glProgramUniform1ui64ARB; +#define glProgramUniform1ui64ARB glad_glProgramUniform1ui64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UI64NVPROC glad_glProgramUniform1ui64NV; +#define glProgramUniform1ui64NV glad_glProgramUniform1ui64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UI64VARBPROC glad_glProgramUniform1ui64vARB; +#define glProgramUniform1ui64vARB glad_glProgramUniform1ui64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UI64VNVPROC glad_glProgramUniform1ui64vNV; +#define glProgramUniform1ui64vNV glad_glProgramUniform1ui64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UIEXTPROC glad_glProgramUniform1uiEXT; +#define glProgramUniform1uiEXT glad_glProgramUniform1uiEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv; +#define glProgramUniform1uiv glad_glProgramUniform1uiv +GLAD_API_CALL PFNGLPROGRAMUNIFORM1UIVEXTPROC glad_glProgramUniform1uivEXT; +#define glProgramUniform1uivEXT glad_glProgramUniform1uivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d; +#define glProgramUniform2d glad_glProgramUniform2d +GLAD_API_CALL PFNGLPROGRAMUNIFORM2DEXTPROC glad_glProgramUniform2dEXT; +#define glProgramUniform2dEXT glad_glProgramUniform2dEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv; +#define glProgramUniform2dv glad_glProgramUniform2dv +GLAD_API_CALL PFNGLPROGRAMUNIFORM2DVEXTPROC glad_glProgramUniform2dvEXT; +#define glProgramUniform2dvEXT glad_glProgramUniform2dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f; +#define glProgramUniform2f glad_glProgramUniform2f +GLAD_API_CALL PFNGLPROGRAMUNIFORM2FEXTPROC glad_glProgramUniform2fEXT; +#define glProgramUniform2fEXT glad_glProgramUniform2fEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv; +#define glProgramUniform2fv glad_glProgramUniform2fv +GLAD_API_CALL PFNGLPROGRAMUNIFORM2FVEXTPROC glad_glProgramUniform2fvEXT; +#define glProgramUniform2fvEXT glad_glProgramUniform2fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i; +#define glProgramUniform2i glad_glProgramUniform2i +GLAD_API_CALL PFNGLPROGRAMUNIFORM2I64ARBPROC glad_glProgramUniform2i64ARB; +#define glProgramUniform2i64ARB glad_glProgramUniform2i64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM2I64NVPROC glad_glProgramUniform2i64NV; +#define glProgramUniform2i64NV glad_glProgramUniform2i64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM2I64VARBPROC glad_glProgramUniform2i64vARB; +#define glProgramUniform2i64vARB glad_glProgramUniform2i64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM2I64VNVPROC glad_glProgramUniform2i64vNV; +#define glProgramUniform2i64vNV glad_glProgramUniform2i64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM2IEXTPROC glad_glProgramUniform2iEXT; +#define glProgramUniform2iEXT glad_glProgramUniform2iEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv; +#define glProgramUniform2iv glad_glProgramUniform2iv +GLAD_API_CALL PFNGLPROGRAMUNIFORM2IVEXTPROC glad_glProgramUniform2ivEXT; +#define glProgramUniform2ivEXT glad_glProgramUniform2ivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui; +#define glProgramUniform2ui glad_glProgramUniform2ui +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UI64ARBPROC glad_glProgramUniform2ui64ARB; +#define glProgramUniform2ui64ARB glad_glProgramUniform2ui64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UI64NVPROC glad_glProgramUniform2ui64NV; +#define glProgramUniform2ui64NV glad_glProgramUniform2ui64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UI64VARBPROC glad_glProgramUniform2ui64vARB; +#define glProgramUniform2ui64vARB glad_glProgramUniform2ui64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UI64VNVPROC glad_glProgramUniform2ui64vNV; +#define glProgramUniform2ui64vNV glad_glProgramUniform2ui64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UIEXTPROC glad_glProgramUniform2uiEXT; +#define glProgramUniform2uiEXT glad_glProgramUniform2uiEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv; +#define glProgramUniform2uiv glad_glProgramUniform2uiv +GLAD_API_CALL PFNGLPROGRAMUNIFORM2UIVEXTPROC glad_glProgramUniform2uivEXT; +#define glProgramUniform2uivEXT glad_glProgramUniform2uivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d; +#define glProgramUniform3d glad_glProgramUniform3d +GLAD_API_CALL PFNGLPROGRAMUNIFORM3DEXTPROC glad_glProgramUniform3dEXT; +#define glProgramUniform3dEXT glad_glProgramUniform3dEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv; +#define glProgramUniform3dv glad_glProgramUniform3dv +GLAD_API_CALL PFNGLPROGRAMUNIFORM3DVEXTPROC glad_glProgramUniform3dvEXT; +#define glProgramUniform3dvEXT glad_glProgramUniform3dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f; +#define glProgramUniform3f glad_glProgramUniform3f +GLAD_API_CALL PFNGLPROGRAMUNIFORM3FEXTPROC glad_glProgramUniform3fEXT; +#define glProgramUniform3fEXT glad_glProgramUniform3fEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv; +#define glProgramUniform3fv glad_glProgramUniform3fv +GLAD_API_CALL PFNGLPROGRAMUNIFORM3FVEXTPROC glad_glProgramUniform3fvEXT; +#define glProgramUniform3fvEXT glad_glProgramUniform3fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i; +#define glProgramUniform3i glad_glProgramUniform3i +GLAD_API_CALL PFNGLPROGRAMUNIFORM3I64ARBPROC glad_glProgramUniform3i64ARB; +#define glProgramUniform3i64ARB glad_glProgramUniform3i64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM3I64NVPROC glad_glProgramUniform3i64NV; +#define glProgramUniform3i64NV glad_glProgramUniform3i64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM3I64VARBPROC glad_glProgramUniform3i64vARB; +#define glProgramUniform3i64vARB glad_glProgramUniform3i64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM3I64VNVPROC glad_glProgramUniform3i64vNV; +#define glProgramUniform3i64vNV glad_glProgramUniform3i64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM3IEXTPROC glad_glProgramUniform3iEXT; +#define glProgramUniform3iEXT glad_glProgramUniform3iEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv; +#define glProgramUniform3iv glad_glProgramUniform3iv +GLAD_API_CALL PFNGLPROGRAMUNIFORM3IVEXTPROC glad_glProgramUniform3ivEXT; +#define glProgramUniform3ivEXT glad_glProgramUniform3ivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui; +#define glProgramUniform3ui glad_glProgramUniform3ui +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UI64ARBPROC glad_glProgramUniform3ui64ARB; +#define glProgramUniform3ui64ARB glad_glProgramUniform3ui64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UI64NVPROC glad_glProgramUniform3ui64NV; +#define glProgramUniform3ui64NV glad_glProgramUniform3ui64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UI64VARBPROC glad_glProgramUniform3ui64vARB; +#define glProgramUniform3ui64vARB glad_glProgramUniform3ui64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UI64VNVPROC glad_glProgramUniform3ui64vNV; +#define glProgramUniform3ui64vNV glad_glProgramUniform3ui64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UIEXTPROC glad_glProgramUniform3uiEXT; +#define glProgramUniform3uiEXT glad_glProgramUniform3uiEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv; +#define glProgramUniform3uiv glad_glProgramUniform3uiv +GLAD_API_CALL PFNGLPROGRAMUNIFORM3UIVEXTPROC glad_glProgramUniform3uivEXT; +#define glProgramUniform3uivEXT glad_glProgramUniform3uivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d; +#define glProgramUniform4d glad_glProgramUniform4d +GLAD_API_CALL PFNGLPROGRAMUNIFORM4DEXTPROC glad_glProgramUniform4dEXT; +#define glProgramUniform4dEXT glad_glProgramUniform4dEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv; +#define glProgramUniform4dv glad_glProgramUniform4dv +GLAD_API_CALL PFNGLPROGRAMUNIFORM4DVEXTPROC glad_glProgramUniform4dvEXT; +#define glProgramUniform4dvEXT glad_glProgramUniform4dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f; +#define glProgramUniform4f glad_glProgramUniform4f +GLAD_API_CALL PFNGLPROGRAMUNIFORM4FEXTPROC glad_glProgramUniform4fEXT; +#define glProgramUniform4fEXT glad_glProgramUniform4fEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv; +#define glProgramUniform4fv glad_glProgramUniform4fv +GLAD_API_CALL PFNGLPROGRAMUNIFORM4FVEXTPROC glad_glProgramUniform4fvEXT; +#define glProgramUniform4fvEXT glad_glProgramUniform4fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i; +#define glProgramUniform4i glad_glProgramUniform4i +GLAD_API_CALL PFNGLPROGRAMUNIFORM4I64ARBPROC glad_glProgramUniform4i64ARB; +#define glProgramUniform4i64ARB glad_glProgramUniform4i64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM4I64NVPROC glad_glProgramUniform4i64NV; +#define glProgramUniform4i64NV glad_glProgramUniform4i64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM4I64VARBPROC glad_glProgramUniform4i64vARB; +#define glProgramUniform4i64vARB glad_glProgramUniform4i64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM4I64VNVPROC glad_glProgramUniform4i64vNV; +#define glProgramUniform4i64vNV glad_glProgramUniform4i64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM4IEXTPROC glad_glProgramUniform4iEXT; +#define glProgramUniform4iEXT glad_glProgramUniform4iEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv; +#define glProgramUniform4iv glad_glProgramUniform4iv +GLAD_API_CALL PFNGLPROGRAMUNIFORM4IVEXTPROC glad_glProgramUniform4ivEXT; +#define glProgramUniform4ivEXT glad_glProgramUniform4ivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui; +#define glProgramUniform4ui glad_glProgramUniform4ui +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UI64ARBPROC glad_glProgramUniform4ui64ARB; +#define glProgramUniform4ui64ARB glad_glProgramUniform4ui64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UI64NVPROC glad_glProgramUniform4ui64NV; +#define glProgramUniform4ui64NV glad_glProgramUniform4ui64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UI64VARBPROC glad_glProgramUniform4ui64vARB; +#define glProgramUniform4ui64vARB glad_glProgramUniform4ui64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UI64VNVPROC glad_glProgramUniform4ui64vNV; +#define glProgramUniform4ui64vNV glad_glProgramUniform4ui64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UIEXTPROC glad_glProgramUniform4uiEXT; +#define glProgramUniform4uiEXT glad_glProgramUniform4uiEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv; +#define glProgramUniform4uiv glad_glProgramUniform4uiv +GLAD_API_CALL PFNGLPROGRAMUNIFORM4UIVEXTPROC glad_glProgramUniform4uivEXT; +#define glProgramUniform4uivEXT glad_glProgramUniform4uivEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glad_glProgramUniformHandleui64ARB; +#define glProgramUniformHandleui64ARB glad_glProgramUniformHandleui64ARB +GLAD_API_CALL PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glad_glProgramUniformHandleui64NV; +#define glProgramUniformHandleui64NV glad_glProgramUniformHandleui64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glad_glProgramUniformHandleui64vARB; +#define glProgramUniformHandleui64vARB glad_glProgramUniformHandleui64vARB +GLAD_API_CALL PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glad_glProgramUniformHandleui64vNV; +#define glProgramUniformHandleui64vNV glad_glProgramUniformHandleui64vNV +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv; +#define glProgramUniformMatrix2dv glad_glProgramUniformMatrix2dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glad_glProgramUniformMatrix2dvEXT; +#define glProgramUniformMatrix2dvEXT glad_glProgramUniformMatrix2dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv; +#define glProgramUniformMatrix2fv glad_glProgramUniformMatrix2fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glad_glProgramUniformMatrix2fvEXT; +#define glProgramUniformMatrix2fvEXT glad_glProgramUniformMatrix2fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv; +#define glProgramUniformMatrix2x3dv glad_glProgramUniformMatrix2x3dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glad_glProgramUniformMatrix2x3dvEXT; +#define glProgramUniformMatrix2x3dvEXT glad_glProgramUniformMatrix2x3dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv; +#define glProgramUniformMatrix2x3fv glad_glProgramUniformMatrix2x3fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glad_glProgramUniformMatrix2x3fvEXT; +#define glProgramUniformMatrix2x3fvEXT glad_glProgramUniformMatrix2x3fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv; +#define glProgramUniformMatrix2x4dv glad_glProgramUniformMatrix2x4dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glad_glProgramUniformMatrix2x4dvEXT; +#define glProgramUniformMatrix2x4dvEXT glad_glProgramUniformMatrix2x4dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv; +#define glProgramUniformMatrix2x4fv glad_glProgramUniformMatrix2x4fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glad_glProgramUniformMatrix2x4fvEXT; +#define glProgramUniformMatrix2x4fvEXT glad_glProgramUniformMatrix2x4fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv; +#define glProgramUniformMatrix3dv glad_glProgramUniformMatrix3dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glad_glProgramUniformMatrix3dvEXT; +#define glProgramUniformMatrix3dvEXT glad_glProgramUniformMatrix3dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv; +#define glProgramUniformMatrix3fv glad_glProgramUniformMatrix3fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glad_glProgramUniformMatrix3fvEXT; +#define glProgramUniformMatrix3fvEXT glad_glProgramUniformMatrix3fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv; +#define glProgramUniformMatrix3x2dv glad_glProgramUniformMatrix3x2dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glad_glProgramUniformMatrix3x2dvEXT; +#define glProgramUniformMatrix3x2dvEXT glad_glProgramUniformMatrix3x2dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv; +#define glProgramUniformMatrix3x2fv glad_glProgramUniformMatrix3x2fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glad_glProgramUniformMatrix3x2fvEXT; +#define glProgramUniformMatrix3x2fvEXT glad_glProgramUniformMatrix3x2fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv; +#define glProgramUniformMatrix3x4dv glad_glProgramUniformMatrix3x4dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glad_glProgramUniformMatrix3x4dvEXT; +#define glProgramUniformMatrix3x4dvEXT glad_glProgramUniformMatrix3x4dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv; +#define glProgramUniformMatrix3x4fv glad_glProgramUniformMatrix3x4fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glad_glProgramUniformMatrix3x4fvEXT; +#define glProgramUniformMatrix3x4fvEXT glad_glProgramUniformMatrix3x4fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv; +#define glProgramUniformMatrix4dv glad_glProgramUniformMatrix4dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glad_glProgramUniformMatrix4dvEXT; +#define glProgramUniformMatrix4dvEXT glad_glProgramUniformMatrix4dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv; +#define glProgramUniformMatrix4fv glad_glProgramUniformMatrix4fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glad_glProgramUniformMatrix4fvEXT; +#define glProgramUniformMatrix4fvEXT glad_glProgramUniformMatrix4fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv; +#define glProgramUniformMatrix4x2dv glad_glProgramUniformMatrix4x2dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glad_glProgramUniformMatrix4x2dvEXT; +#define glProgramUniformMatrix4x2dvEXT glad_glProgramUniformMatrix4x2dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv; +#define glProgramUniformMatrix4x2fv glad_glProgramUniformMatrix4x2fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glad_glProgramUniformMatrix4x2fvEXT; +#define glProgramUniformMatrix4x2fvEXT glad_glProgramUniformMatrix4x2fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv; +#define glProgramUniformMatrix4x3dv glad_glProgramUniformMatrix4x3dv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glad_glProgramUniformMatrix4x3dvEXT; +#define glProgramUniformMatrix4x3dvEXT glad_glProgramUniformMatrix4x3dvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv; +#define glProgramUniformMatrix4x3fv glad_glProgramUniformMatrix4x3fv +GLAD_API_CALL PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glad_glProgramUniformMatrix4x3fvEXT; +#define glProgramUniformMatrix4x3fvEXT glad_glProgramUniformMatrix4x3fvEXT +GLAD_API_CALL PFNGLPROGRAMUNIFORMUI64NVPROC glad_glProgramUniformui64NV; +#define glProgramUniformui64NV glad_glProgramUniformui64NV +GLAD_API_CALL PFNGLPROGRAMUNIFORMUI64VNVPROC glad_glProgramUniformui64vNV; +#define glProgramUniformui64vNV glad_glProgramUniformui64vNV +GLAD_API_CALL PFNGLPROGRAMVERTEXLIMITNVPROC glad_glProgramVertexLimitNV; +#define glProgramVertexLimitNV glad_glProgramVertexLimitNV +GLAD_API_CALL PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; +#define glProvokingVertex glad_glProvokingVertex +GLAD_API_CALL PFNGLPROVOKINGVERTEXEXTPROC glad_glProvokingVertexEXT; +#define glProvokingVertexEXT glad_glProvokingVertexEXT +GLAD_API_CALL PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glad_glPushClientAttribDefaultEXT; +#define glPushClientAttribDefaultEXT glad_glPushClientAttribDefaultEXT +GLAD_API_CALL PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; +#define glPushDebugGroup glad_glPushDebugGroup +GLAD_API_CALL PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT; +#define glPushGroupMarkerEXT glad_glPushGroupMarkerEXT +GLAD_API_CALL PFNGLQUERYCOUNTERPROC glad_glQueryCounter; +#define glQueryCounter glad_glQueryCounter +GLAD_API_CALL PFNGLQUERYMATRIXXOESPROC glad_glQueryMatrixxOES; +#define glQueryMatrixxOES glad_glQueryMatrixxOES +GLAD_API_CALL PFNGLQUERYOBJECTPARAMETERUIAMDPROC glad_glQueryObjectParameteruiAMD; +#define glQueryObjectParameteruiAMD glad_glQueryObjectParameteruiAMD +GLAD_API_CALL PFNGLQUERYRESOURCENVPROC glad_glQueryResourceNV; +#define glQueryResourceNV glad_glQueryResourceNV +GLAD_API_CALL PFNGLQUERYRESOURCETAGNVPROC glad_glQueryResourceTagNV; +#define glQueryResourceTagNV glad_glQueryResourceTagNV +GLAD_API_CALL PFNGLRASTERPOS2XOESPROC glad_glRasterPos2xOES; +#define glRasterPos2xOES glad_glRasterPos2xOES +GLAD_API_CALL PFNGLRASTERPOS2XVOESPROC glad_glRasterPos2xvOES; +#define glRasterPos2xvOES glad_glRasterPos2xvOES +GLAD_API_CALL PFNGLRASTERPOS3XOESPROC glad_glRasterPos3xOES; +#define glRasterPos3xOES glad_glRasterPos3xOES +GLAD_API_CALL PFNGLRASTERPOS3XVOESPROC glad_glRasterPos3xvOES; +#define glRasterPos3xvOES glad_glRasterPos3xvOES +GLAD_API_CALL PFNGLRASTERPOS4XOESPROC glad_glRasterPos4xOES; +#define glRasterPos4xOES glad_glRasterPos4xOES +GLAD_API_CALL PFNGLRASTERPOS4XVOESPROC glad_glRasterPos4xvOES; +#define glRasterPos4xvOES glad_glRasterPos4xvOES +GLAD_API_CALL PFNGLRASTERSAMPLESEXTPROC glad_glRasterSamplesEXT; +#define glRasterSamplesEXT glad_glRasterSamplesEXT +GLAD_API_CALL PFNGLREADBUFFERPROC glad_glReadBuffer; +#define glReadBuffer glad_glReadBuffer +GLAD_API_CALL PFNGLREADINSTRUMENTSSGIXPROC glad_glReadInstrumentsSGIX; +#define glReadInstrumentsSGIX glad_glReadInstrumentsSGIX +GLAD_API_CALL PFNGLREADPIXELSPROC glad_glReadPixels; +#define glReadPixels glad_glReadPixels +GLAD_API_CALL PFNGLREADNPIXELSPROC glad_glReadnPixels; +#define glReadnPixels glad_glReadnPixels +GLAD_API_CALL PFNGLREADNPIXELSARBPROC glad_glReadnPixelsARB; +#define glReadnPixelsARB glad_glReadnPixelsARB +GLAD_API_CALL PFNGLRECTXOESPROC glad_glRectxOES; +#define glRectxOES glad_glRectxOES +GLAD_API_CALL PFNGLRECTXVOESPROC glad_glRectxvOES; +#define glRectxvOES glad_glRectxvOES +GLAD_API_CALL PFNGLREFERENCEPLANESGIXPROC glad_glReferencePlaneSGIX; +#define glReferencePlaneSGIX glad_glReferencePlaneSGIX +GLAD_API_CALL PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC glad_glReleaseKeyedMutexWin32EXT; +#define glReleaseKeyedMutexWin32EXT glad_glReleaseKeyedMutexWin32EXT +GLAD_API_CALL PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; +#define glReleaseShaderCompiler glad_glReleaseShaderCompiler +GLAD_API_CALL PFNGLRENDERGPUMASKNVPROC glad_glRenderGpuMaskNV; +#define glRenderGpuMaskNV glad_glRenderGpuMaskNV +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; +#define glRenderbufferStorage glad_glRenderbufferStorage +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; +#define glRenderbufferStorageEXT glad_glRenderbufferStorageEXT +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; +#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC glad_glRenderbufferStorageMultisampleAdvancedAMD; +#define glRenderbufferStorageMultisampleAdvancedAMD glad_glRenderbufferStorageMultisampleAdvancedAMD +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glad_glRenderbufferStorageMultisampleCoverageNV; +#define glRenderbufferStorageMultisampleCoverageNV glad_glRenderbufferStorageMultisampleCoverageNV +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; +#define glRenderbufferStorageMultisampleEXT glad_glRenderbufferStorageMultisampleEXT +GLAD_API_CALL PFNGLREPLACEMENTCODEPOINTERSUNPROC glad_glReplacementCodePointerSUN; +#define glReplacementCodePointerSUN glad_glReplacementCodePointerSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUBSUNPROC glad_glReplacementCodeubSUN; +#define glReplacementCodeubSUN glad_glReplacementCodeubSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUBVSUNPROC glad_glReplacementCodeubvSUN; +#define glReplacementCodeubvSUN glad_glReplacementCodeubvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor3fVertex3fSUN; +#define glReplacementCodeuiColor3fVertex3fSUN glad_glReplacementCodeuiColor3fVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor3fVertex3fvSUN; +#define glReplacementCodeuiColor3fVertex3fvSUN glad_glReplacementCodeuiColor3fVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN; +#define glReplacementCodeuiColor4fNormal3fVertex3fSUN glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; +#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC glad_glReplacementCodeuiColor4ubVertex3fSUN; +#define glReplacementCodeuiColor4ubVertex3fSUN glad_glReplacementCodeuiColor4ubVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4ubVertex3fvSUN; +#define glReplacementCodeuiColor4ubVertex3fvSUN glad_glReplacementCodeuiColor4ubVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiNormal3fVertex3fSUN; +#define glReplacementCodeuiNormal3fVertex3fSUN glad_glReplacementCodeuiNormal3fVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiNormal3fVertex3fvSUN; +#define glReplacementCodeuiNormal3fVertex3fvSUN glad_glReplacementCodeuiNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUISUNPROC glad_glReplacementCodeuiSUN; +#define glReplacementCodeuiSUN glad_glReplacementCodeuiSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fSUN; +#define glReplacementCodeuiTexCoord2fVertex3fSUN glad_glReplacementCodeuiTexCoord2fVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fvSUN; +#define glReplacementCodeuiTexCoord2fVertex3fvSUN glad_glReplacementCodeuiTexCoord2fVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC glad_glReplacementCodeuiVertex3fSUN; +#define glReplacementCodeuiVertex3fSUN glad_glReplacementCodeuiVertex3fSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC glad_glReplacementCodeuiVertex3fvSUN; +#define glReplacementCodeuiVertex3fvSUN glad_glReplacementCodeuiVertex3fvSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUIVSUNPROC glad_glReplacementCodeuivSUN; +#define glReplacementCodeuivSUN glad_glReplacementCodeuivSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUSSUNPROC glad_glReplacementCodeusSUN; +#define glReplacementCodeusSUN glad_glReplacementCodeusSUN +GLAD_API_CALL PFNGLREPLACEMENTCODEUSVSUNPROC glad_glReplacementCodeusvSUN; +#define glReplacementCodeusvSUN glad_glReplacementCodeusvSUN +GLAD_API_CALL PFNGLREQUESTRESIDENTPROGRAMSNVPROC glad_glRequestResidentProgramsNV; +#define glRequestResidentProgramsNV glad_glRequestResidentProgramsNV +GLAD_API_CALL PFNGLRESETHISTOGRAMEXTPROC glad_glResetHistogramEXT; +#define glResetHistogramEXT glad_glResetHistogramEXT +GLAD_API_CALL PFNGLRESETMEMORYOBJECTPARAMETERNVPROC glad_glResetMemoryObjectParameterNV; +#define glResetMemoryObjectParameterNV glad_glResetMemoryObjectParameterNV +GLAD_API_CALL PFNGLRESETMINMAXEXTPROC glad_glResetMinmaxEXT; +#define glResetMinmaxEXT glad_glResetMinmaxEXT +GLAD_API_CALL PFNGLRESIZEBUFFERSMESAPROC glad_glResizeBuffersMESA; +#define glResizeBuffersMESA glad_glResizeBuffersMESA +GLAD_API_CALL PFNGLRESOLVEDEPTHVALUESNVPROC glad_glResolveDepthValuesNV; +#define glResolveDepthValuesNV glad_glResolveDepthValuesNV +GLAD_API_CALL PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; +#define glResumeTransformFeedback glad_glResumeTransformFeedback +GLAD_API_CALL PFNGLRESUMETRANSFORMFEEDBACKNVPROC glad_glResumeTransformFeedbackNV; +#define glResumeTransformFeedbackNV glad_glResumeTransformFeedbackNV +GLAD_API_CALL PFNGLROTATEXOESPROC glad_glRotatexOES; +#define glRotatexOES glad_glRotatexOES +GLAD_API_CALL PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; +#define glSampleCoverage glad_glSampleCoverage +GLAD_API_CALL PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; +#define glSampleCoverageARB glad_glSampleCoverageARB +GLAD_API_CALL PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI; +#define glSampleMapATI glad_glSampleMapATI +GLAD_API_CALL PFNGLSAMPLEMASKEXTPROC glad_glSampleMaskEXT; +#define glSampleMaskEXT glad_glSampleMaskEXT +GLAD_API_CALL PFNGLSAMPLEMASKINDEXEDNVPROC glad_glSampleMaskIndexedNV; +#define glSampleMaskIndexedNV glad_glSampleMaskIndexedNV +GLAD_API_CALL PFNGLSAMPLEMASKSGISPROC glad_glSampleMaskSGIS; +#define glSampleMaskSGIS glad_glSampleMaskSGIS +GLAD_API_CALL PFNGLSAMPLEMASKIPROC glad_glSampleMaski; +#define glSampleMaski glad_glSampleMaski +GLAD_API_CALL PFNGLSAMPLEPATTERNEXTPROC glad_glSamplePatternEXT; +#define glSamplePatternEXT glad_glSamplePatternEXT +GLAD_API_CALL PFNGLSAMPLEPATTERNSGISPROC glad_glSamplePatternSGIS; +#define glSamplePatternSGIS glad_glSamplePatternSGIS +GLAD_API_CALL PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; +#define glSamplerParameterIiv glad_glSamplerParameterIiv +GLAD_API_CALL PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; +#define glSamplerParameterIuiv glad_glSamplerParameterIuiv +GLAD_API_CALL PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; +#define glSamplerParameterf glad_glSamplerParameterf +GLAD_API_CALL PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; +#define glSamplerParameterfv glad_glSamplerParameterfv +GLAD_API_CALL PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; +#define glSamplerParameteri glad_glSamplerParameteri +GLAD_API_CALL PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; +#define glSamplerParameteriv glad_glSamplerParameteriv +GLAD_API_CALL PFNGLSCALEXOESPROC glad_glScalexOES; +#define glScalexOES glad_glScalexOES +GLAD_API_CALL PFNGLSCISSORPROC glad_glScissor; +#define glScissor glad_glScissor +GLAD_API_CALL PFNGLSCISSORARRAYVPROC glad_glScissorArrayv; +#define glScissorArrayv glad_glScissorArrayv +GLAD_API_CALL PFNGLSCISSOREXCLUSIVEARRAYVNVPROC glad_glScissorExclusiveArrayvNV; +#define glScissorExclusiveArrayvNV glad_glScissorExclusiveArrayvNV +GLAD_API_CALL PFNGLSCISSOREXCLUSIVENVPROC glad_glScissorExclusiveNV; +#define glScissorExclusiveNV glad_glScissorExclusiveNV +GLAD_API_CALL PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed; +#define glScissorIndexed glad_glScissorIndexed +GLAD_API_CALL PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv; +#define glScissorIndexedv glad_glScissorIndexedv +GLAD_API_CALL PFNGLSECONDARYCOLOR3BEXTPROC glad_glSecondaryColor3bEXT; +#define glSecondaryColor3bEXT glad_glSecondaryColor3bEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3BVEXTPROC glad_glSecondaryColor3bvEXT; +#define glSecondaryColor3bvEXT glad_glSecondaryColor3bvEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3DEXTPROC glad_glSecondaryColor3dEXT; +#define glSecondaryColor3dEXT glad_glSecondaryColor3dEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3DVEXTPROC glad_glSecondaryColor3dvEXT; +#define glSecondaryColor3dvEXT glad_glSecondaryColor3dvEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3FEXTPROC glad_glSecondaryColor3fEXT; +#define glSecondaryColor3fEXT glad_glSecondaryColor3fEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3FVEXTPROC glad_glSecondaryColor3fvEXT; +#define glSecondaryColor3fvEXT glad_glSecondaryColor3fvEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3HNVPROC glad_glSecondaryColor3hNV; +#define glSecondaryColor3hNV glad_glSecondaryColor3hNV +GLAD_API_CALL PFNGLSECONDARYCOLOR3HVNVPROC glad_glSecondaryColor3hvNV; +#define glSecondaryColor3hvNV glad_glSecondaryColor3hvNV +GLAD_API_CALL PFNGLSECONDARYCOLOR3IEXTPROC glad_glSecondaryColor3iEXT; +#define glSecondaryColor3iEXT glad_glSecondaryColor3iEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3IVEXTPROC glad_glSecondaryColor3ivEXT; +#define glSecondaryColor3ivEXT glad_glSecondaryColor3ivEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3SEXTPROC glad_glSecondaryColor3sEXT; +#define glSecondaryColor3sEXT glad_glSecondaryColor3sEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3SVEXTPROC glad_glSecondaryColor3svEXT; +#define glSecondaryColor3svEXT glad_glSecondaryColor3svEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3UBEXTPROC glad_glSecondaryColor3ubEXT; +#define glSecondaryColor3ubEXT glad_glSecondaryColor3ubEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3UBVEXTPROC glad_glSecondaryColor3ubvEXT; +#define glSecondaryColor3ubvEXT glad_glSecondaryColor3ubvEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3UIEXTPROC glad_glSecondaryColor3uiEXT; +#define glSecondaryColor3uiEXT glad_glSecondaryColor3uiEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3UIVEXTPROC glad_glSecondaryColor3uivEXT; +#define glSecondaryColor3uivEXT glad_glSecondaryColor3uivEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3USEXTPROC glad_glSecondaryColor3usEXT; +#define glSecondaryColor3usEXT glad_glSecondaryColor3usEXT +GLAD_API_CALL PFNGLSECONDARYCOLOR3USVEXTPROC glad_glSecondaryColor3usvEXT; +#define glSecondaryColor3usvEXT glad_glSecondaryColor3usvEXT +GLAD_API_CALL PFNGLSECONDARYCOLORFORMATNVPROC glad_glSecondaryColorFormatNV; +#define glSecondaryColorFormatNV glad_glSecondaryColorFormatNV +GLAD_API_CALL PFNGLSECONDARYCOLORPOINTEREXTPROC glad_glSecondaryColorPointerEXT; +#define glSecondaryColorPointerEXT glad_glSecondaryColorPointerEXT +GLAD_API_CALL PFNGLSECONDARYCOLORPOINTERLISTIBMPROC glad_glSecondaryColorPointerListIBM; +#define glSecondaryColorPointerListIBM glad_glSecondaryColorPointerListIBM +GLAD_API_CALL PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glad_glSelectPerfMonitorCountersAMD; +#define glSelectPerfMonitorCountersAMD glad_glSelectPerfMonitorCountersAMD +GLAD_API_CALL PFNGLSEMAPHOREPARAMETERIVNVPROC glad_glSemaphoreParameterivNV; +#define glSemaphoreParameterivNV glad_glSemaphoreParameterivNV +GLAD_API_CALL PFNGLSEMAPHOREPARAMETERUI64VEXTPROC glad_glSemaphoreParameterui64vEXT; +#define glSemaphoreParameterui64vEXT glad_glSemaphoreParameterui64vEXT +GLAD_API_CALL PFNGLSEPARABLEFILTER2DEXTPROC glad_glSeparableFilter2DEXT; +#define glSeparableFilter2DEXT glad_glSeparableFilter2DEXT +GLAD_API_CALL PFNGLSETFENCEAPPLEPROC glad_glSetFenceAPPLE; +#define glSetFenceAPPLE glad_glSetFenceAPPLE +GLAD_API_CALL PFNGLSETFENCENVPROC glad_glSetFenceNV; +#define glSetFenceNV glad_glSetFenceNV +GLAD_API_CALL PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI; +#define glSetFragmentShaderConstantATI glad_glSetFragmentShaderConstantATI +GLAD_API_CALL PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT; +#define glSetInvariantEXT glad_glSetInvariantEXT +GLAD_API_CALL PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT; +#define glSetLocalConstantEXT glad_glSetLocalConstantEXT +GLAD_API_CALL PFNGLSETMULTISAMPLEFVAMDPROC glad_glSetMultisamplefvAMD; +#define glSetMultisamplefvAMD glad_glSetMultisamplefvAMD +GLAD_API_CALL PFNGLSHADERBINARYPROC glad_glShaderBinary; +#define glShaderBinary glad_glShaderBinary +GLAD_API_CALL PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT; +#define glShaderOp1EXT glad_glShaderOp1EXT +GLAD_API_CALL PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT; +#define glShaderOp2EXT glad_glShaderOp2EXT +GLAD_API_CALL PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT; +#define glShaderOp3EXT glad_glShaderOp3EXT +GLAD_API_CALL PFNGLSHADERSOURCEPROC glad_glShaderSource; +#define glShaderSource glad_glShaderSource +GLAD_API_CALL PFNGLSHADERSOURCEARBPROC glad_glShaderSourceARB; +#define glShaderSourceARB glad_glShaderSourceARB +GLAD_API_CALL PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding; +#define glShaderStorageBlockBinding glad_glShaderStorageBlockBinding +GLAD_API_CALL PFNGLSHADINGRATEIMAGEBARRIERNVPROC glad_glShadingRateImageBarrierNV; +#define glShadingRateImageBarrierNV glad_glShadingRateImageBarrierNV +GLAD_API_CALL PFNGLSHADINGRATEIMAGEPALETTENVPROC glad_glShadingRateImagePaletteNV; +#define glShadingRateImagePaletteNV glad_glShadingRateImagePaletteNV +GLAD_API_CALL PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC glad_glShadingRateSampleOrderCustomNV; +#define glShadingRateSampleOrderCustomNV glad_glShadingRateSampleOrderCustomNV +GLAD_API_CALL PFNGLSHADINGRATESAMPLEORDERNVPROC glad_glShadingRateSampleOrderNV; +#define glShadingRateSampleOrderNV glad_glShadingRateSampleOrderNV +GLAD_API_CALL PFNGLSHARPENTEXFUNCSGISPROC glad_glSharpenTexFuncSGIS; +#define glSharpenTexFuncSGIS glad_glSharpenTexFuncSGIS +GLAD_API_CALL PFNGLSIGNALSEMAPHOREEXTPROC glad_glSignalSemaphoreEXT; +#define glSignalSemaphoreEXT glad_glSignalSemaphoreEXT +GLAD_API_CALL PFNGLSIGNALSEMAPHOREUI64NVXPROC glad_glSignalSemaphoreui64NVX; +#define glSignalSemaphoreui64NVX glad_glSignalSemaphoreui64NVX +GLAD_API_CALL PFNGLSIGNALVKFENCENVPROC glad_glSignalVkFenceNV; +#define glSignalVkFenceNV glad_glSignalVkFenceNV +GLAD_API_CALL PFNGLSIGNALVKSEMAPHORENVPROC glad_glSignalVkSemaphoreNV; +#define glSignalVkSemaphoreNV glad_glSignalVkSemaphoreNV +GLAD_API_CALL PFNGLSPECIALIZESHADERARBPROC glad_glSpecializeShaderARB; +#define glSpecializeShaderARB glad_glSpecializeShaderARB +GLAD_API_CALL PFNGLSPRITEPARAMETERFSGIXPROC glad_glSpriteParameterfSGIX; +#define glSpriteParameterfSGIX glad_glSpriteParameterfSGIX +GLAD_API_CALL PFNGLSPRITEPARAMETERFVSGIXPROC glad_glSpriteParameterfvSGIX; +#define glSpriteParameterfvSGIX glad_glSpriteParameterfvSGIX +GLAD_API_CALL PFNGLSPRITEPARAMETERISGIXPROC glad_glSpriteParameteriSGIX; +#define glSpriteParameteriSGIX glad_glSpriteParameteriSGIX +GLAD_API_CALL PFNGLSPRITEPARAMETERIVSGIXPROC glad_glSpriteParameterivSGIX; +#define glSpriteParameterivSGIX glad_glSpriteParameterivSGIX +GLAD_API_CALL PFNGLSTARTINSTRUMENTSSGIXPROC glad_glStartInstrumentsSGIX; +#define glStartInstrumentsSGIX glad_glStartInstrumentsSGIX +GLAD_API_CALL PFNGLSTATECAPTURENVPROC glad_glStateCaptureNV; +#define glStateCaptureNV glad_glStateCaptureNV +GLAD_API_CALL PFNGLSTENCILCLEARTAGEXTPROC glad_glStencilClearTagEXT; +#define glStencilClearTagEXT glad_glStencilClearTagEXT +GLAD_API_CALL PFNGLSTENCILFILLPATHINSTANCEDNVPROC glad_glStencilFillPathInstancedNV; +#define glStencilFillPathInstancedNV glad_glStencilFillPathInstancedNV +GLAD_API_CALL PFNGLSTENCILFILLPATHNVPROC glad_glStencilFillPathNV; +#define glStencilFillPathNV glad_glStencilFillPathNV +GLAD_API_CALL PFNGLSTENCILFUNCPROC glad_glStencilFunc; +#define glStencilFunc glad_glStencilFunc +GLAD_API_CALL PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; +#define glStencilFuncSeparate glad_glStencilFuncSeparate +GLAD_API_CALL PFNGLSTENCILFUNCSEPARATEATIPROC glad_glStencilFuncSeparateATI; +#define glStencilFuncSeparateATI glad_glStencilFuncSeparateATI +GLAD_API_CALL PFNGLSTENCILMASKPROC glad_glStencilMask; +#define glStencilMask glad_glStencilMask +GLAD_API_CALL PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; +#define glStencilMaskSeparate glad_glStencilMaskSeparate +GLAD_API_CALL PFNGLSTENCILOPPROC glad_glStencilOp; +#define glStencilOp glad_glStencilOp +GLAD_API_CALL PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; +#define glStencilOpSeparate glad_glStencilOpSeparate +GLAD_API_CALL PFNGLSTENCILOPSEPARATEATIPROC glad_glStencilOpSeparateATI; +#define glStencilOpSeparateATI glad_glStencilOpSeparateATI +GLAD_API_CALL PFNGLSTENCILOPVALUEAMDPROC glad_glStencilOpValueAMD; +#define glStencilOpValueAMD glad_glStencilOpValueAMD +GLAD_API_CALL PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glad_glStencilStrokePathInstancedNV; +#define glStencilStrokePathInstancedNV glad_glStencilStrokePathInstancedNV +GLAD_API_CALL PFNGLSTENCILSTROKEPATHNVPROC glad_glStencilStrokePathNV; +#define glStencilStrokePathNV glad_glStencilStrokePathNV +GLAD_API_CALL PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC glad_glStencilThenCoverFillPathInstancedNV; +#define glStencilThenCoverFillPathInstancedNV glad_glStencilThenCoverFillPathInstancedNV +GLAD_API_CALL PFNGLSTENCILTHENCOVERFILLPATHNVPROC glad_glStencilThenCoverFillPathNV; +#define glStencilThenCoverFillPathNV glad_glStencilThenCoverFillPathNV +GLAD_API_CALL PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC glad_glStencilThenCoverStrokePathInstancedNV; +#define glStencilThenCoverStrokePathInstancedNV glad_glStencilThenCoverStrokePathInstancedNV +GLAD_API_CALL PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC glad_glStencilThenCoverStrokePathNV; +#define glStencilThenCoverStrokePathNV glad_glStencilThenCoverStrokePathNV +GLAD_API_CALL PFNGLSTOPINSTRUMENTSSGIXPROC glad_glStopInstrumentsSGIX; +#define glStopInstrumentsSGIX glad_glStopInstrumentsSGIX +GLAD_API_CALL PFNGLSTRINGMARKERGREMEDYPROC glad_glStringMarkerGREMEDY; +#define glStringMarkerGREMEDY glad_glStringMarkerGREMEDY +GLAD_API_CALL PFNGLSUBPIXELPRECISIONBIASNVPROC glad_glSubpixelPrecisionBiasNV; +#define glSubpixelPrecisionBiasNV glad_glSubpixelPrecisionBiasNV +GLAD_API_CALL PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT; +#define glSwizzleEXT glad_glSwizzleEXT +GLAD_API_CALL PFNGLSYNCTEXTUREINTELPROC glad_glSyncTextureINTEL; +#define glSyncTextureINTEL glad_glSyncTextureINTEL +GLAD_API_CALL PFNGLTAGSAMPLEBUFFERSGIXPROC glad_glTagSampleBufferSGIX; +#define glTagSampleBufferSGIX glad_glTagSampleBufferSGIX +GLAD_API_CALL PFNGLTANGENT3BEXTPROC glad_glTangent3bEXT; +#define glTangent3bEXT glad_glTangent3bEXT +GLAD_API_CALL PFNGLTANGENT3BVEXTPROC glad_glTangent3bvEXT; +#define glTangent3bvEXT glad_glTangent3bvEXT +GLAD_API_CALL PFNGLTANGENT3DEXTPROC glad_glTangent3dEXT; +#define glTangent3dEXT glad_glTangent3dEXT +GLAD_API_CALL PFNGLTANGENT3DVEXTPROC glad_glTangent3dvEXT; +#define glTangent3dvEXT glad_glTangent3dvEXT +GLAD_API_CALL PFNGLTANGENT3FEXTPROC glad_glTangent3fEXT; +#define glTangent3fEXT glad_glTangent3fEXT +GLAD_API_CALL PFNGLTANGENT3FVEXTPROC glad_glTangent3fvEXT; +#define glTangent3fvEXT glad_glTangent3fvEXT +GLAD_API_CALL PFNGLTANGENT3IEXTPROC glad_glTangent3iEXT; +#define glTangent3iEXT glad_glTangent3iEXT +GLAD_API_CALL PFNGLTANGENT3IVEXTPROC glad_glTangent3ivEXT; +#define glTangent3ivEXT glad_glTangent3ivEXT +GLAD_API_CALL PFNGLTANGENT3SEXTPROC glad_glTangent3sEXT; +#define glTangent3sEXT glad_glTangent3sEXT +GLAD_API_CALL PFNGLTANGENT3SVEXTPROC glad_glTangent3svEXT; +#define glTangent3svEXT glad_glTangent3svEXT +GLAD_API_CALL PFNGLTANGENTPOINTEREXTPROC glad_glTangentPointerEXT; +#define glTangentPointerEXT glad_glTangentPointerEXT +GLAD_API_CALL PFNGLTBUFFERMASK3DFXPROC glad_glTbufferMask3DFX; +#define glTbufferMask3DFX glad_glTbufferMask3DFX +GLAD_API_CALL PFNGLTESSELLATIONFACTORAMDPROC glad_glTessellationFactorAMD; +#define glTessellationFactorAMD glad_glTessellationFactorAMD +GLAD_API_CALL PFNGLTESSELLATIONMODEAMDPROC glad_glTessellationModeAMD; +#define glTessellationModeAMD glad_glTessellationModeAMD +GLAD_API_CALL PFNGLTESTFENCEAPPLEPROC glad_glTestFenceAPPLE; +#define glTestFenceAPPLE glad_glTestFenceAPPLE +GLAD_API_CALL PFNGLTESTFENCENVPROC glad_glTestFenceNV; +#define glTestFenceNV glad_glTestFenceNV +GLAD_API_CALL PFNGLTESTOBJECTAPPLEPROC glad_glTestObjectAPPLE; +#define glTestObjectAPPLE glad_glTestObjectAPPLE +GLAD_API_CALL PFNGLTEXATTACHMEMORYNVPROC glad_glTexAttachMemoryNV; +#define glTexAttachMemoryNV glad_glTexAttachMemoryNV +GLAD_API_CALL PFNGLTEXBUFFERPROC glad_glTexBuffer; +#define glTexBuffer glad_glTexBuffer +GLAD_API_CALL PFNGLTEXBUFFERARBPROC glad_glTexBufferARB; +#define glTexBufferARB glad_glTexBufferARB +GLAD_API_CALL PFNGLTEXBUFFEREXTPROC glad_glTexBufferEXT; +#define glTexBufferEXT glad_glTexBufferEXT +GLAD_API_CALL PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange; +#define glTexBufferRange glad_glTexBufferRange +GLAD_API_CALL PFNGLTEXBUMPPARAMETERFVATIPROC glad_glTexBumpParameterfvATI; +#define glTexBumpParameterfvATI glad_glTexBumpParameterfvATI +GLAD_API_CALL PFNGLTEXBUMPPARAMETERIVATIPROC glad_glTexBumpParameterivATI; +#define glTexBumpParameterivATI glad_glTexBumpParameterivATI +GLAD_API_CALL PFNGLTEXCOORD1BOESPROC glad_glTexCoord1bOES; +#define glTexCoord1bOES glad_glTexCoord1bOES +GLAD_API_CALL PFNGLTEXCOORD1BVOESPROC glad_glTexCoord1bvOES; +#define glTexCoord1bvOES glad_glTexCoord1bvOES +GLAD_API_CALL PFNGLTEXCOORD1HNVPROC glad_glTexCoord1hNV; +#define glTexCoord1hNV glad_glTexCoord1hNV +GLAD_API_CALL PFNGLTEXCOORD1HVNVPROC glad_glTexCoord1hvNV; +#define glTexCoord1hvNV glad_glTexCoord1hvNV +GLAD_API_CALL PFNGLTEXCOORD1XOESPROC glad_glTexCoord1xOES; +#define glTexCoord1xOES glad_glTexCoord1xOES +GLAD_API_CALL PFNGLTEXCOORD1XVOESPROC glad_glTexCoord1xvOES; +#define glTexCoord1xvOES glad_glTexCoord1xvOES +GLAD_API_CALL PFNGLTEXCOORD2BOESPROC glad_glTexCoord2bOES; +#define glTexCoord2bOES glad_glTexCoord2bOES +GLAD_API_CALL PFNGLTEXCOORD2BVOESPROC glad_glTexCoord2bvOES; +#define glTexCoord2bvOES glad_glTexCoord2bvOES +GLAD_API_CALL PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC glad_glTexCoord2fColor3fVertex3fSUN; +#define glTexCoord2fColor3fVertex3fSUN glad_glTexCoord2fColor3fVertex3fSUN +GLAD_API_CALL PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC glad_glTexCoord2fColor3fVertex3fvSUN; +#define glTexCoord2fColor3fVertex3fvSUN glad_glTexCoord2fColor3fVertex3fvSUN +GLAD_API_CALL PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fSUN; +#define glTexCoord2fColor4fNormal3fVertex3fSUN glad_glTexCoord2fColor4fNormal3fVertex3fSUN +GLAD_API_CALL PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fvSUN; +#define glTexCoord2fColor4fNormal3fVertex3fvSUN glad_glTexCoord2fColor4fNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC glad_glTexCoord2fColor4ubVertex3fSUN; +#define glTexCoord2fColor4ubVertex3fSUN glad_glTexCoord2fColor4ubVertex3fSUN +GLAD_API_CALL PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC glad_glTexCoord2fColor4ubVertex3fvSUN; +#define glTexCoord2fColor4ubVertex3fvSUN glad_glTexCoord2fColor4ubVertex3fvSUN +GLAD_API_CALL PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fNormal3fVertex3fSUN; +#define glTexCoord2fNormal3fVertex3fSUN glad_glTexCoord2fNormal3fVertex3fSUN +GLAD_API_CALL PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fNormal3fVertex3fvSUN; +#define glTexCoord2fNormal3fVertex3fvSUN glad_glTexCoord2fNormal3fVertex3fvSUN +GLAD_API_CALL PFNGLTEXCOORD2FVERTEX3FSUNPROC glad_glTexCoord2fVertex3fSUN; +#define glTexCoord2fVertex3fSUN glad_glTexCoord2fVertex3fSUN +GLAD_API_CALL PFNGLTEXCOORD2FVERTEX3FVSUNPROC glad_glTexCoord2fVertex3fvSUN; +#define glTexCoord2fVertex3fvSUN glad_glTexCoord2fVertex3fvSUN +GLAD_API_CALL PFNGLTEXCOORD2HNVPROC glad_glTexCoord2hNV; +#define glTexCoord2hNV glad_glTexCoord2hNV +GLAD_API_CALL PFNGLTEXCOORD2HVNVPROC glad_glTexCoord2hvNV; +#define glTexCoord2hvNV glad_glTexCoord2hvNV +GLAD_API_CALL PFNGLTEXCOORD2XOESPROC glad_glTexCoord2xOES; +#define glTexCoord2xOES glad_glTexCoord2xOES +GLAD_API_CALL PFNGLTEXCOORD2XVOESPROC glad_glTexCoord2xvOES; +#define glTexCoord2xvOES glad_glTexCoord2xvOES +GLAD_API_CALL PFNGLTEXCOORD3BOESPROC glad_glTexCoord3bOES; +#define glTexCoord3bOES glad_glTexCoord3bOES +GLAD_API_CALL PFNGLTEXCOORD3BVOESPROC glad_glTexCoord3bvOES; +#define glTexCoord3bvOES glad_glTexCoord3bvOES +GLAD_API_CALL PFNGLTEXCOORD3HNVPROC glad_glTexCoord3hNV; +#define glTexCoord3hNV glad_glTexCoord3hNV +GLAD_API_CALL PFNGLTEXCOORD3HVNVPROC glad_glTexCoord3hvNV; +#define glTexCoord3hvNV glad_glTexCoord3hvNV +GLAD_API_CALL PFNGLTEXCOORD3XOESPROC glad_glTexCoord3xOES; +#define glTexCoord3xOES glad_glTexCoord3xOES +GLAD_API_CALL PFNGLTEXCOORD3XVOESPROC glad_glTexCoord3xvOES; +#define glTexCoord3xvOES glad_glTexCoord3xvOES +GLAD_API_CALL PFNGLTEXCOORD4BOESPROC glad_glTexCoord4bOES; +#define glTexCoord4bOES glad_glTexCoord4bOES +GLAD_API_CALL PFNGLTEXCOORD4BVOESPROC glad_glTexCoord4bvOES; +#define glTexCoord4bvOES glad_glTexCoord4bvOES +GLAD_API_CALL PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fSUN; +#define glTexCoord4fColor4fNormal3fVertex4fSUN glad_glTexCoord4fColor4fNormal3fVertex4fSUN +GLAD_API_CALL PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fvSUN; +#define glTexCoord4fColor4fNormal3fVertex4fvSUN glad_glTexCoord4fColor4fNormal3fVertex4fvSUN +GLAD_API_CALL PFNGLTEXCOORD4FVERTEX4FSUNPROC glad_glTexCoord4fVertex4fSUN; +#define glTexCoord4fVertex4fSUN glad_glTexCoord4fVertex4fSUN +GLAD_API_CALL PFNGLTEXCOORD4FVERTEX4FVSUNPROC glad_glTexCoord4fVertex4fvSUN; +#define glTexCoord4fVertex4fvSUN glad_glTexCoord4fVertex4fvSUN +GLAD_API_CALL PFNGLTEXCOORD4HNVPROC glad_glTexCoord4hNV; +#define glTexCoord4hNV glad_glTexCoord4hNV +GLAD_API_CALL PFNGLTEXCOORD4HVNVPROC glad_glTexCoord4hvNV; +#define glTexCoord4hvNV glad_glTexCoord4hvNV +GLAD_API_CALL PFNGLTEXCOORD4XOESPROC glad_glTexCoord4xOES; +#define glTexCoord4xOES glad_glTexCoord4xOES +GLAD_API_CALL PFNGLTEXCOORD4XVOESPROC glad_glTexCoord4xvOES; +#define glTexCoord4xvOES glad_glTexCoord4xvOES +GLAD_API_CALL PFNGLTEXCOORDFORMATNVPROC glad_glTexCoordFormatNV; +#define glTexCoordFormatNV glad_glTexCoordFormatNV +GLAD_API_CALL PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT; +#define glTexCoordPointerEXT glad_glTexCoordPointerEXT +GLAD_API_CALL PFNGLTEXCOORDPOINTERLISTIBMPROC glad_glTexCoordPointerListIBM; +#define glTexCoordPointerListIBM glad_glTexCoordPointerListIBM +GLAD_API_CALL PFNGLTEXCOORDPOINTERVINTELPROC glad_glTexCoordPointervINTEL; +#define glTexCoordPointervINTEL glad_glTexCoordPointervINTEL +GLAD_API_CALL PFNGLTEXENVXOESPROC glad_glTexEnvxOES; +#define glTexEnvxOES glad_glTexEnvxOES +GLAD_API_CALL PFNGLTEXENVXVOESPROC glad_glTexEnvxvOES; +#define glTexEnvxvOES glad_glTexEnvxvOES +GLAD_API_CALL PFNGLTEXFILTERFUNCSGISPROC glad_glTexFilterFuncSGIS; +#define glTexFilterFuncSGIS glad_glTexFilterFuncSGIS +GLAD_API_CALL PFNGLTEXGENXOESPROC glad_glTexGenxOES; +#define glTexGenxOES glad_glTexGenxOES +GLAD_API_CALL PFNGLTEXGENXVOESPROC glad_glTexGenxvOES; +#define glTexGenxvOES glad_glTexGenxvOES +GLAD_API_CALL PFNGLTEXIMAGE1DPROC glad_glTexImage1D; +#define glTexImage1D glad_glTexImage1D +GLAD_API_CALL PFNGLTEXIMAGE2DPROC glad_glTexImage2D; +#define glTexImage2D glad_glTexImage2D +GLAD_API_CALL PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; +#define glTexImage2DMultisample glad_glTexImage2DMultisample +GLAD_API_CALL PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTexImage2DMultisampleCoverageNV; +#define glTexImage2DMultisampleCoverageNV glad_glTexImage2DMultisampleCoverageNV +GLAD_API_CALL PFNGLTEXIMAGE3DPROC glad_glTexImage3D; +#define glTexImage3D glad_glTexImage3D +GLAD_API_CALL PFNGLTEXIMAGE3DEXTPROC glad_glTexImage3DEXT; +#define glTexImage3DEXT glad_glTexImage3DEXT +GLAD_API_CALL PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; +#define glTexImage3DMultisample glad_glTexImage3DMultisample +GLAD_API_CALL PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTexImage3DMultisampleCoverageNV; +#define glTexImage3DMultisampleCoverageNV glad_glTexImage3DMultisampleCoverageNV +GLAD_API_CALL PFNGLTEXIMAGE4DSGISPROC glad_glTexImage4DSGIS; +#define glTexImage4DSGIS glad_glTexImage4DSGIS +GLAD_API_CALL PFNGLTEXPAGECOMMITMENTARBPROC glad_glTexPageCommitmentARB; +#define glTexPageCommitmentARB glad_glTexPageCommitmentARB +GLAD_API_CALL PFNGLTEXPAGECOMMITMENTMEMNVPROC glad_glTexPageCommitmentMemNV; +#define glTexPageCommitmentMemNV glad_glTexPageCommitmentMemNV +GLAD_API_CALL PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; +#define glTexParameterIiv glad_glTexParameterIiv +GLAD_API_CALL PFNGLTEXPARAMETERIIVEXTPROC glad_glTexParameterIivEXT; +#define glTexParameterIivEXT glad_glTexParameterIivEXT +GLAD_API_CALL PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; +#define glTexParameterIuiv glad_glTexParameterIuiv +GLAD_API_CALL PFNGLTEXPARAMETERIUIVEXTPROC glad_glTexParameterIuivEXT; +#define glTexParameterIuivEXT glad_glTexParameterIuivEXT +GLAD_API_CALL PFNGLTEXPARAMETERFPROC glad_glTexParameterf; +#define glTexParameterf glad_glTexParameterf +GLAD_API_CALL PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; +#define glTexParameterfv glad_glTexParameterfv +GLAD_API_CALL PFNGLTEXPARAMETERIPROC glad_glTexParameteri; +#define glTexParameteri glad_glTexParameteri +GLAD_API_CALL PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; +#define glTexParameteriv glad_glTexParameteriv +GLAD_API_CALL PFNGLTEXPARAMETERXOESPROC glad_glTexParameterxOES; +#define glTexParameterxOES glad_glTexParameterxOES +GLAD_API_CALL PFNGLTEXPARAMETERXVOESPROC glad_glTexParameterxvOES; +#define glTexParameterxvOES glad_glTexParameterxvOES +GLAD_API_CALL PFNGLTEXRENDERBUFFERNVPROC glad_glTexRenderbufferNV; +#define glTexRenderbufferNV glad_glTexRenderbufferNV +GLAD_API_CALL PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D; +#define glTexStorage1D glad_glTexStorage1D +GLAD_API_CALL PFNGLTEXSTORAGE1DEXTPROC glad_glTexStorage1DEXT; +#define glTexStorage1DEXT glad_glTexStorage1DEXT +GLAD_API_CALL PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; +#define glTexStorage2D glad_glTexStorage2D +GLAD_API_CALL PFNGLTEXSTORAGE2DEXTPROC glad_glTexStorage2DEXT; +#define glTexStorage2DEXT glad_glTexStorage2DEXT +GLAD_API_CALL PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample; +#define glTexStorage2DMultisample glad_glTexStorage2DMultisample +GLAD_API_CALL PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; +#define glTexStorage3D glad_glTexStorage3D +GLAD_API_CALL PFNGLTEXSTORAGE3DEXTPROC glad_glTexStorage3DEXT; +#define glTexStorage3DEXT glad_glTexStorage3DEXT +GLAD_API_CALL PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample; +#define glTexStorage3DMultisample glad_glTexStorage3DMultisample +GLAD_API_CALL PFNGLTEXSTORAGEMEM1DEXTPROC glad_glTexStorageMem1DEXT; +#define glTexStorageMem1DEXT glad_glTexStorageMem1DEXT +GLAD_API_CALL PFNGLTEXSTORAGEMEM2DEXTPROC glad_glTexStorageMem2DEXT; +#define glTexStorageMem2DEXT glad_glTexStorageMem2DEXT +GLAD_API_CALL PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTexStorageMem2DMultisampleEXT; +#define glTexStorageMem2DMultisampleEXT glad_glTexStorageMem2DMultisampleEXT +GLAD_API_CALL PFNGLTEXSTORAGEMEM3DEXTPROC glad_glTexStorageMem3DEXT; +#define glTexStorageMem3DEXT glad_glTexStorageMem3DEXT +GLAD_API_CALL PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTexStorageMem3DMultisampleEXT; +#define glTexStorageMem3DMultisampleEXT glad_glTexStorageMem3DMultisampleEXT +GLAD_API_CALL PFNGLTEXSTORAGESPARSEAMDPROC glad_glTexStorageSparseAMD; +#define glTexStorageSparseAMD glad_glTexStorageSparseAMD +GLAD_API_CALL PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +#define glTexSubImage1D glad_glTexSubImage1D +GLAD_API_CALL PFNGLTEXSUBIMAGE1DEXTPROC glad_glTexSubImage1DEXT; +#define glTexSubImage1DEXT glad_glTexSubImage1DEXT +GLAD_API_CALL PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; +#define glTexSubImage2D glad_glTexSubImage2D +GLAD_API_CALL PFNGLTEXSUBIMAGE2DEXTPROC glad_glTexSubImage2DEXT; +#define glTexSubImage2DEXT glad_glTexSubImage2DEXT +GLAD_API_CALL PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; +#define glTexSubImage3D glad_glTexSubImage3D +GLAD_API_CALL PFNGLTEXSUBIMAGE3DEXTPROC glad_glTexSubImage3DEXT; +#define glTexSubImage3DEXT glad_glTexSubImage3DEXT +GLAD_API_CALL PFNGLTEXSUBIMAGE4DSGISPROC glad_glTexSubImage4DSGIS; +#define glTexSubImage4DSGIS glad_glTexSubImage4DSGIS +GLAD_API_CALL PFNGLTEXTUREATTACHMEMORYNVPROC glad_glTextureAttachMemoryNV; +#define glTextureAttachMemoryNV glad_glTextureAttachMemoryNV +GLAD_API_CALL PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier; +#define glTextureBarrier glad_glTextureBarrier +GLAD_API_CALL PFNGLTEXTUREBARRIERNVPROC glad_glTextureBarrierNV; +#define glTextureBarrierNV glad_glTextureBarrierNV +GLAD_API_CALL PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer; +#define glTextureBuffer glad_glTextureBuffer +GLAD_API_CALL PFNGLTEXTUREBUFFEREXTPROC glad_glTextureBufferEXT; +#define glTextureBufferEXT glad_glTextureBufferEXT +GLAD_API_CALL PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange; +#define glTextureBufferRange glad_glTextureBufferRange +GLAD_API_CALL PFNGLTEXTUREBUFFERRANGEEXTPROC glad_glTextureBufferRangeEXT; +#define glTextureBufferRangeEXT glad_glTextureBufferRangeEXT +GLAD_API_CALL PFNGLTEXTURECOLORMASKSGISPROC glad_glTextureColorMaskSGIS; +#define glTextureColorMaskSGIS glad_glTextureColorMaskSGIS +GLAD_API_CALL PFNGLTEXTUREIMAGE1DEXTPROC glad_glTextureImage1DEXT; +#define glTextureImage1DEXT glad_glTextureImage1DEXT +GLAD_API_CALL PFNGLTEXTUREIMAGE2DEXTPROC glad_glTextureImage2DEXT; +#define glTextureImage2DEXT glad_glTextureImage2DEXT +GLAD_API_CALL PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTextureImage2DMultisampleCoverageNV; +#define glTextureImage2DMultisampleCoverageNV glad_glTextureImage2DMultisampleCoverageNV +GLAD_API_CALL PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC glad_glTextureImage2DMultisampleNV; +#define glTextureImage2DMultisampleNV glad_glTextureImage2DMultisampleNV +GLAD_API_CALL PFNGLTEXTUREIMAGE3DEXTPROC glad_glTextureImage3DEXT; +#define glTextureImage3DEXT glad_glTextureImage3DEXT +GLAD_API_CALL PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTextureImage3DMultisampleCoverageNV; +#define glTextureImage3DMultisampleCoverageNV glad_glTextureImage3DMultisampleCoverageNV +GLAD_API_CALL PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC glad_glTextureImage3DMultisampleNV; +#define glTextureImage3DMultisampleNV glad_glTextureImage3DMultisampleNV +GLAD_API_CALL PFNGLTEXTURELIGHTEXTPROC glad_glTextureLightEXT; +#define glTextureLightEXT glad_glTextureLightEXT +GLAD_API_CALL PFNGLTEXTUREMATERIALEXTPROC glad_glTextureMaterialEXT; +#define glTextureMaterialEXT glad_glTextureMaterialEXT +GLAD_API_CALL PFNGLTEXTURENORMALEXTPROC glad_glTextureNormalEXT; +#define glTextureNormalEXT glad_glTextureNormalEXT +GLAD_API_CALL PFNGLTEXTUREPAGECOMMITMENTEXTPROC glad_glTexturePageCommitmentEXT; +#define glTexturePageCommitmentEXT glad_glTexturePageCommitmentEXT +GLAD_API_CALL PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC glad_glTexturePageCommitmentMemNV; +#define glTexturePageCommitmentMemNV glad_glTexturePageCommitmentMemNV +GLAD_API_CALL PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv; +#define glTextureParameterIiv glad_glTextureParameterIiv +GLAD_API_CALL PFNGLTEXTUREPARAMETERIIVEXTPROC glad_glTextureParameterIivEXT; +#define glTextureParameterIivEXT glad_glTextureParameterIivEXT +GLAD_API_CALL PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv; +#define glTextureParameterIuiv glad_glTextureParameterIuiv +GLAD_API_CALL PFNGLTEXTUREPARAMETERIUIVEXTPROC glad_glTextureParameterIuivEXT; +#define glTextureParameterIuivEXT glad_glTextureParameterIuivEXT +GLAD_API_CALL PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf; +#define glTextureParameterf glad_glTextureParameterf +GLAD_API_CALL PFNGLTEXTUREPARAMETERFEXTPROC glad_glTextureParameterfEXT; +#define glTextureParameterfEXT glad_glTextureParameterfEXT +GLAD_API_CALL PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv; +#define glTextureParameterfv glad_glTextureParameterfv +GLAD_API_CALL PFNGLTEXTUREPARAMETERFVEXTPROC glad_glTextureParameterfvEXT; +#define glTextureParameterfvEXT glad_glTextureParameterfvEXT +GLAD_API_CALL PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri; +#define glTextureParameteri glad_glTextureParameteri +GLAD_API_CALL PFNGLTEXTUREPARAMETERIEXTPROC glad_glTextureParameteriEXT; +#define glTextureParameteriEXT glad_glTextureParameteriEXT +GLAD_API_CALL PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv; +#define glTextureParameteriv glad_glTextureParameteriv +GLAD_API_CALL PFNGLTEXTUREPARAMETERIVEXTPROC glad_glTextureParameterivEXT; +#define glTextureParameterivEXT glad_glTextureParameterivEXT +GLAD_API_CALL PFNGLTEXTURERANGEAPPLEPROC glad_glTextureRangeAPPLE; +#define glTextureRangeAPPLE glad_glTextureRangeAPPLE +GLAD_API_CALL PFNGLTEXTURERENDERBUFFEREXTPROC glad_glTextureRenderbufferEXT; +#define glTextureRenderbufferEXT glad_glTextureRenderbufferEXT +GLAD_API_CALL PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D; +#define glTextureStorage1D glad_glTextureStorage1D +GLAD_API_CALL PFNGLTEXTURESTORAGE1DEXTPROC glad_glTextureStorage1DEXT; +#define glTextureStorage1DEXT glad_glTextureStorage1DEXT +GLAD_API_CALL PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D; +#define glTextureStorage2D glad_glTextureStorage2D +GLAD_API_CALL PFNGLTEXTURESTORAGE2DEXTPROC glad_glTextureStorage2DEXT; +#define glTextureStorage2DEXT glad_glTextureStorage2DEXT +GLAD_API_CALL PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample; +#define glTextureStorage2DMultisample glad_glTextureStorage2DMultisample +GLAD_API_CALL PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glad_glTextureStorage2DMultisampleEXT; +#define glTextureStorage2DMultisampleEXT glad_glTextureStorage2DMultisampleEXT +GLAD_API_CALL PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D; +#define glTextureStorage3D glad_glTextureStorage3D +GLAD_API_CALL PFNGLTEXTURESTORAGE3DEXTPROC glad_glTextureStorage3DEXT; +#define glTextureStorage3DEXT glad_glTextureStorage3DEXT +GLAD_API_CALL PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample; +#define glTextureStorage3DMultisample glad_glTextureStorage3DMultisample +GLAD_API_CALL PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glad_glTextureStorage3DMultisampleEXT; +#define glTextureStorage3DMultisampleEXT glad_glTextureStorage3DMultisampleEXT +GLAD_API_CALL PFNGLTEXTURESTORAGEMEM1DEXTPROC glad_glTextureStorageMem1DEXT; +#define glTextureStorageMem1DEXT glad_glTextureStorageMem1DEXT +GLAD_API_CALL PFNGLTEXTURESTORAGEMEM2DEXTPROC glad_glTextureStorageMem2DEXT; +#define glTextureStorageMem2DEXT glad_glTextureStorageMem2DEXT +GLAD_API_CALL PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTextureStorageMem2DMultisampleEXT; +#define glTextureStorageMem2DMultisampleEXT glad_glTextureStorageMem2DMultisampleEXT +GLAD_API_CALL PFNGLTEXTURESTORAGEMEM3DEXTPROC glad_glTextureStorageMem3DEXT; +#define glTextureStorageMem3DEXT glad_glTextureStorageMem3DEXT +GLAD_API_CALL PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTextureStorageMem3DMultisampleEXT; +#define glTextureStorageMem3DMultisampleEXT glad_glTextureStorageMem3DMultisampleEXT +GLAD_API_CALL PFNGLTEXTURESTORAGESPARSEAMDPROC glad_glTextureStorageSparseAMD; +#define glTextureStorageSparseAMD glad_glTextureStorageSparseAMD +GLAD_API_CALL PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D; +#define glTextureSubImage1D glad_glTextureSubImage1D +GLAD_API_CALL PFNGLTEXTURESUBIMAGE1DEXTPROC glad_glTextureSubImage1DEXT; +#define glTextureSubImage1DEXT glad_glTextureSubImage1DEXT +GLAD_API_CALL PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D; +#define glTextureSubImage2D glad_glTextureSubImage2D +GLAD_API_CALL PFNGLTEXTURESUBIMAGE2DEXTPROC glad_glTextureSubImage2DEXT; +#define glTextureSubImage2DEXT glad_glTextureSubImage2DEXT +GLAD_API_CALL PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D; +#define glTextureSubImage3D glad_glTextureSubImage3D +GLAD_API_CALL PFNGLTEXTURESUBIMAGE3DEXTPROC glad_glTextureSubImage3DEXT; +#define glTextureSubImage3DEXT glad_glTextureSubImage3DEXT +GLAD_API_CALL PFNGLTEXTUREVIEWPROC glad_glTextureView; +#define glTextureView glad_glTextureView +GLAD_API_CALL PFNGLTRACKMATRIXNVPROC glad_glTrackMatrixNV; +#define glTrackMatrixNV glad_glTrackMatrixNV +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC glad_glTransformFeedbackAttribsNV; +#define glTransformFeedbackAttribsNV glad_glTransformFeedbackAttribsNV +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase; +#define glTransformFeedbackBufferBase glad_glTransformFeedbackBufferBase +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange; +#define glTransformFeedbackBufferRange glad_glTransformFeedbackBufferRange +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC glad_glTransformFeedbackStreamAttribsNV; +#define glTransformFeedbackStreamAttribsNV glad_glTransformFeedbackStreamAttribsNV +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; +#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC glad_glTransformFeedbackVaryingsEXT; +#define glTransformFeedbackVaryingsEXT glad_glTransformFeedbackVaryingsEXT +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC glad_glTransformFeedbackVaryingsNV; +#define glTransformFeedbackVaryingsNV glad_glTransformFeedbackVaryingsNV +GLAD_API_CALL PFNGLTRANSFORMPATHNVPROC glad_glTransformPathNV; +#define glTransformPathNV glad_glTransformPathNV +GLAD_API_CALL PFNGLTRANSLATEXOESPROC glad_glTranslatexOES; +#define glTranslatexOES glad_glTranslatexOES +GLAD_API_CALL PFNGLUNIFORM1DPROC glad_glUniform1d; +#define glUniform1d glad_glUniform1d +GLAD_API_CALL PFNGLUNIFORM1DVPROC glad_glUniform1dv; +#define glUniform1dv glad_glUniform1dv +GLAD_API_CALL PFNGLUNIFORM1FPROC glad_glUniform1f; +#define glUniform1f glad_glUniform1f +GLAD_API_CALL PFNGLUNIFORM1FARBPROC glad_glUniform1fARB; +#define glUniform1fARB glad_glUniform1fARB +GLAD_API_CALL PFNGLUNIFORM1FVPROC glad_glUniform1fv; +#define glUniform1fv glad_glUniform1fv +GLAD_API_CALL PFNGLUNIFORM1FVARBPROC glad_glUniform1fvARB; +#define glUniform1fvARB glad_glUniform1fvARB +GLAD_API_CALL PFNGLUNIFORM1IPROC glad_glUniform1i; +#define glUniform1i glad_glUniform1i +GLAD_API_CALL PFNGLUNIFORM1I64ARBPROC glad_glUniform1i64ARB; +#define glUniform1i64ARB glad_glUniform1i64ARB +GLAD_API_CALL PFNGLUNIFORM1I64NVPROC glad_glUniform1i64NV; +#define glUniform1i64NV glad_glUniform1i64NV +GLAD_API_CALL PFNGLUNIFORM1I64VARBPROC glad_glUniform1i64vARB; +#define glUniform1i64vARB glad_glUniform1i64vARB +GLAD_API_CALL PFNGLUNIFORM1I64VNVPROC glad_glUniform1i64vNV; +#define glUniform1i64vNV glad_glUniform1i64vNV +GLAD_API_CALL PFNGLUNIFORM1IARBPROC glad_glUniform1iARB; +#define glUniform1iARB glad_glUniform1iARB +GLAD_API_CALL PFNGLUNIFORM1IVPROC glad_glUniform1iv; +#define glUniform1iv glad_glUniform1iv +GLAD_API_CALL PFNGLUNIFORM1IVARBPROC glad_glUniform1ivARB; +#define glUniform1ivARB glad_glUniform1ivARB +GLAD_API_CALL PFNGLUNIFORM1UIPROC glad_glUniform1ui; +#define glUniform1ui glad_glUniform1ui +GLAD_API_CALL PFNGLUNIFORM1UI64ARBPROC glad_glUniform1ui64ARB; +#define glUniform1ui64ARB glad_glUniform1ui64ARB +GLAD_API_CALL PFNGLUNIFORM1UI64NVPROC glad_glUniform1ui64NV; +#define glUniform1ui64NV glad_glUniform1ui64NV +GLAD_API_CALL PFNGLUNIFORM1UI64VARBPROC glad_glUniform1ui64vARB; +#define glUniform1ui64vARB glad_glUniform1ui64vARB +GLAD_API_CALL PFNGLUNIFORM1UI64VNVPROC glad_glUniform1ui64vNV; +#define glUniform1ui64vNV glad_glUniform1ui64vNV +GLAD_API_CALL PFNGLUNIFORM1UIEXTPROC glad_glUniform1uiEXT; +#define glUniform1uiEXT glad_glUniform1uiEXT +GLAD_API_CALL PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; +#define glUniform1uiv glad_glUniform1uiv +GLAD_API_CALL PFNGLUNIFORM1UIVEXTPROC glad_glUniform1uivEXT; +#define glUniform1uivEXT glad_glUniform1uivEXT +GLAD_API_CALL PFNGLUNIFORM2DPROC glad_glUniform2d; +#define glUniform2d glad_glUniform2d +GLAD_API_CALL PFNGLUNIFORM2DVPROC glad_glUniform2dv; +#define glUniform2dv glad_glUniform2dv +GLAD_API_CALL PFNGLUNIFORM2FPROC glad_glUniform2f; +#define glUniform2f glad_glUniform2f +GLAD_API_CALL PFNGLUNIFORM2FARBPROC glad_glUniform2fARB; +#define glUniform2fARB glad_glUniform2fARB +GLAD_API_CALL PFNGLUNIFORM2FVPROC glad_glUniform2fv; +#define glUniform2fv glad_glUniform2fv +GLAD_API_CALL PFNGLUNIFORM2FVARBPROC glad_glUniform2fvARB; +#define glUniform2fvARB glad_glUniform2fvARB +GLAD_API_CALL PFNGLUNIFORM2IPROC glad_glUniform2i; +#define glUniform2i glad_glUniform2i +GLAD_API_CALL PFNGLUNIFORM2I64ARBPROC glad_glUniform2i64ARB; +#define glUniform2i64ARB glad_glUniform2i64ARB +GLAD_API_CALL PFNGLUNIFORM2I64NVPROC glad_glUniform2i64NV; +#define glUniform2i64NV glad_glUniform2i64NV +GLAD_API_CALL PFNGLUNIFORM2I64VARBPROC glad_glUniform2i64vARB; +#define glUniform2i64vARB glad_glUniform2i64vARB +GLAD_API_CALL PFNGLUNIFORM2I64VNVPROC glad_glUniform2i64vNV; +#define glUniform2i64vNV glad_glUniform2i64vNV +GLAD_API_CALL PFNGLUNIFORM2IARBPROC glad_glUniform2iARB; +#define glUniform2iARB glad_glUniform2iARB +GLAD_API_CALL PFNGLUNIFORM2IVPROC glad_glUniform2iv; +#define glUniform2iv glad_glUniform2iv +GLAD_API_CALL PFNGLUNIFORM2IVARBPROC glad_glUniform2ivARB; +#define glUniform2ivARB glad_glUniform2ivARB +GLAD_API_CALL PFNGLUNIFORM2UIPROC glad_glUniform2ui; +#define glUniform2ui glad_glUniform2ui +GLAD_API_CALL PFNGLUNIFORM2UI64ARBPROC glad_glUniform2ui64ARB; +#define glUniform2ui64ARB glad_glUniform2ui64ARB +GLAD_API_CALL PFNGLUNIFORM2UI64NVPROC glad_glUniform2ui64NV; +#define glUniform2ui64NV glad_glUniform2ui64NV +GLAD_API_CALL PFNGLUNIFORM2UI64VARBPROC glad_glUniform2ui64vARB; +#define glUniform2ui64vARB glad_glUniform2ui64vARB +GLAD_API_CALL PFNGLUNIFORM2UI64VNVPROC glad_glUniform2ui64vNV; +#define glUniform2ui64vNV glad_glUniform2ui64vNV +GLAD_API_CALL PFNGLUNIFORM2UIEXTPROC glad_glUniform2uiEXT; +#define glUniform2uiEXT glad_glUniform2uiEXT +GLAD_API_CALL PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; +#define glUniform2uiv glad_glUniform2uiv +GLAD_API_CALL PFNGLUNIFORM2UIVEXTPROC glad_glUniform2uivEXT; +#define glUniform2uivEXT glad_glUniform2uivEXT +GLAD_API_CALL PFNGLUNIFORM3DPROC glad_glUniform3d; +#define glUniform3d glad_glUniform3d +GLAD_API_CALL PFNGLUNIFORM3DVPROC glad_glUniform3dv; +#define glUniform3dv glad_glUniform3dv +GLAD_API_CALL PFNGLUNIFORM3FPROC glad_glUniform3f; +#define glUniform3f glad_glUniform3f +GLAD_API_CALL PFNGLUNIFORM3FARBPROC glad_glUniform3fARB; +#define glUniform3fARB glad_glUniform3fARB +GLAD_API_CALL PFNGLUNIFORM3FVPROC glad_glUniform3fv; +#define glUniform3fv glad_glUniform3fv +GLAD_API_CALL PFNGLUNIFORM3FVARBPROC glad_glUniform3fvARB; +#define glUniform3fvARB glad_glUniform3fvARB +GLAD_API_CALL PFNGLUNIFORM3IPROC glad_glUniform3i; +#define glUniform3i glad_glUniform3i +GLAD_API_CALL PFNGLUNIFORM3I64ARBPROC glad_glUniform3i64ARB; +#define glUniform3i64ARB glad_glUniform3i64ARB +GLAD_API_CALL PFNGLUNIFORM3I64NVPROC glad_glUniform3i64NV; +#define glUniform3i64NV glad_glUniform3i64NV +GLAD_API_CALL PFNGLUNIFORM3I64VARBPROC glad_glUniform3i64vARB; +#define glUniform3i64vARB glad_glUniform3i64vARB +GLAD_API_CALL PFNGLUNIFORM3I64VNVPROC glad_glUniform3i64vNV; +#define glUniform3i64vNV glad_glUniform3i64vNV +GLAD_API_CALL PFNGLUNIFORM3IARBPROC glad_glUniform3iARB; +#define glUniform3iARB glad_glUniform3iARB +GLAD_API_CALL PFNGLUNIFORM3IVPROC glad_glUniform3iv; +#define glUniform3iv glad_glUniform3iv +GLAD_API_CALL PFNGLUNIFORM3IVARBPROC glad_glUniform3ivARB; +#define glUniform3ivARB glad_glUniform3ivARB +GLAD_API_CALL PFNGLUNIFORM3UIPROC glad_glUniform3ui; +#define glUniform3ui glad_glUniform3ui +GLAD_API_CALL PFNGLUNIFORM3UI64ARBPROC glad_glUniform3ui64ARB; +#define glUniform3ui64ARB glad_glUniform3ui64ARB +GLAD_API_CALL PFNGLUNIFORM3UI64NVPROC glad_glUniform3ui64NV; +#define glUniform3ui64NV glad_glUniform3ui64NV +GLAD_API_CALL PFNGLUNIFORM3UI64VARBPROC glad_glUniform3ui64vARB; +#define glUniform3ui64vARB glad_glUniform3ui64vARB +GLAD_API_CALL PFNGLUNIFORM3UI64VNVPROC glad_glUniform3ui64vNV; +#define glUniform3ui64vNV glad_glUniform3ui64vNV +GLAD_API_CALL PFNGLUNIFORM3UIEXTPROC glad_glUniform3uiEXT; +#define glUniform3uiEXT glad_glUniform3uiEXT +GLAD_API_CALL PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +#define glUniform3uiv glad_glUniform3uiv +GLAD_API_CALL PFNGLUNIFORM3UIVEXTPROC glad_glUniform3uivEXT; +#define glUniform3uivEXT glad_glUniform3uivEXT +GLAD_API_CALL PFNGLUNIFORM4DPROC glad_glUniform4d; +#define glUniform4d glad_glUniform4d +GLAD_API_CALL PFNGLUNIFORM4DVPROC glad_glUniform4dv; +#define glUniform4dv glad_glUniform4dv +GLAD_API_CALL PFNGLUNIFORM4FPROC glad_glUniform4f; +#define glUniform4f glad_glUniform4f +GLAD_API_CALL PFNGLUNIFORM4FARBPROC glad_glUniform4fARB; +#define glUniform4fARB glad_glUniform4fARB +GLAD_API_CALL PFNGLUNIFORM4FVPROC glad_glUniform4fv; +#define glUniform4fv glad_glUniform4fv +GLAD_API_CALL PFNGLUNIFORM4FVARBPROC glad_glUniform4fvARB; +#define glUniform4fvARB glad_glUniform4fvARB +GLAD_API_CALL PFNGLUNIFORM4IPROC glad_glUniform4i; +#define glUniform4i glad_glUniform4i +GLAD_API_CALL PFNGLUNIFORM4I64ARBPROC glad_glUniform4i64ARB; +#define glUniform4i64ARB glad_glUniform4i64ARB +GLAD_API_CALL PFNGLUNIFORM4I64NVPROC glad_glUniform4i64NV; +#define glUniform4i64NV glad_glUniform4i64NV +GLAD_API_CALL PFNGLUNIFORM4I64VARBPROC glad_glUniform4i64vARB; +#define glUniform4i64vARB glad_glUniform4i64vARB +GLAD_API_CALL PFNGLUNIFORM4I64VNVPROC glad_glUniform4i64vNV; +#define glUniform4i64vNV glad_glUniform4i64vNV +GLAD_API_CALL PFNGLUNIFORM4IARBPROC glad_glUniform4iARB; +#define glUniform4iARB glad_glUniform4iARB +GLAD_API_CALL PFNGLUNIFORM4IVPROC glad_glUniform4iv; +#define glUniform4iv glad_glUniform4iv +GLAD_API_CALL PFNGLUNIFORM4IVARBPROC glad_glUniform4ivARB; +#define glUniform4ivARB glad_glUniform4ivARB +GLAD_API_CALL PFNGLUNIFORM4UIPROC glad_glUniform4ui; +#define glUniform4ui glad_glUniform4ui +GLAD_API_CALL PFNGLUNIFORM4UI64ARBPROC glad_glUniform4ui64ARB; +#define glUniform4ui64ARB glad_glUniform4ui64ARB +GLAD_API_CALL PFNGLUNIFORM4UI64NVPROC glad_glUniform4ui64NV; +#define glUniform4ui64NV glad_glUniform4ui64NV +GLAD_API_CALL PFNGLUNIFORM4UI64VARBPROC glad_glUniform4ui64vARB; +#define glUniform4ui64vARB glad_glUniform4ui64vARB +GLAD_API_CALL PFNGLUNIFORM4UI64VNVPROC glad_glUniform4ui64vNV; +#define glUniform4ui64vNV glad_glUniform4ui64vNV +GLAD_API_CALL PFNGLUNIFORM4UIEXTPROC glad_glUniform4uiEXT; +#define glUniform4uiEXT glad_glUniform4uiEXT +GLAD_API_CALL PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; +#define glUniform4uiv glad_glUniform4uiv +GLAD_API_CALL PFNGLUNIFORM4UIVEXTPROC glad_glUniform4uivEXT; +#define glUniform4uivEXT glad_glUniform4uivEXT +GLAD_API_CALL PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; +#define glUniformBlockBinding glad_glUniformBlockBinding +GLAD_API_CALL PFNGLUNIFORMBUFFEREXTPROC glad_glUniformBufferEXT; +#define glUniformBufferEXT glad_glUniformBufferEXT +GLAD_API_CALL PFNGLUNIFORMHANDLEUI64ARBPROC glad_glUniformHandleui64ARB; +#define glUniformHandleui64ARB glad_glUniformHandleui64ARB +GLAD_API_CALL PFNGLUNIFORMHANDLEUI64NVPROC glad_glUniformHandleui64NV; +#define glUniformHandleui64NV glad_glUniformHandleui64NV +GLAD_API_CALL PFNGLUNIFORMHANDLEUI64VARBPROC glad_glUniformHandleui64vARB; +#define glUniformHandleui64vARB glad_glUniformHandleui64vARB +GLAD_API_CALL PFNGLUNIFORMHANDLEUI64VNVPROC glad_glUniformHandleui64vNV; +#define glUniformHandleui64vNV glad_glUniformHandleui64vNV +GLAD_API_CALL PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv; +#define glUniformMatrix2dv glad_glUniformMatrix2dv +GLAD_API_CALL PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; +#define glUniformMatrix2fv glad_glUniformMatrix2fv +GLAD_API_CALL PFNGLUNIFORMMATRIX2FVARBPROC glad_glUniformMatrix2fvARB; +#define glUniformMatrix2fvARB glad_glUniformMatrix2fvARB +GLAD_API_CALL PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv; +#define glUniformMatrix2x3dv glad_glUniformMatrix2x3dv +GLAD_API_CALL PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; +#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv +GLAD_API_CALL PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv; +#define glUniformMatrix2x4dv glad_glUniformMatrix2x4dv +GLAD_API_CALL PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; +#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv +GLAD_API_CALL PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv; +#define glUniformMatrix3dv glad_glUniformMatrix3dv +GLAD_API_CALL PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; +#define glUniformMatrix3fv glad_glUniformMatrix3fv +GLAD_API_CALL PFNGLUNIFORMMATRIX3FVARBPROC glad_glUniformMatrix3fvARB; +#define glUniformMatrix3fvARB glad_glUniformMatrix3fvARB +GLAD_API_CALL PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv; +#define glUniformMatrix3x2dv glad_glUniformMatrix3x2dv +GLAD_API_CALL PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; +#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv +GLAD_API_CALL PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv; +#define glUniformMatrix3x4dv glad_glUniformMatrix3x4dv +GLAD_API_CALL PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; +#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv +GLAD_API_CALL PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv; +#define glUniformMatrix4dv glad_glUniformMatrix4dv +GLAD_API_CALL PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; +#define glUniformMatrix4fv glad_glUniformMatrix4fv +GLAD_API_CALL PFNGLUNIFORMMATRIX4FVARBPROC glad_glUniformMatrix4fvARB; +#define glUniformMatrix4fvARB glad_glUniformMatrix4fvARB +GLAD_API_CALL PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv; +#define glUniformMatrix4x2dv glad_glUniformMatrix4x2dv +GLAD_API_CALL PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; +#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv +GLAD_API_CALL PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv; +#define glUniformMatrix4x3dv glad_glUniformMatrix4x3dv +GLAD_API_CALL PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; +#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv +GLAD_API_CALL PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv; +#define glUniformSubroutinesuiv glad_glUniformSubroutinesuiv +GLAD_API_CALL PFNGLUNIFORMUI64NVPROC glad_glUniformui64NV; +#define glUniformui64NV glad_glUniformui64NV +GLAD_API_CALL PFNGLUNIFORMUI64VNVPROC glad_glUniformui64vNV; +#define glUniformui64vNV glad_glUniformui64vNV +GLAD_API_CALL PFNGLUNLOCKARRAYSEXTPROC glad_glUnlockArraysEXT; +#define glUnlockArraysEXT glad_glUnlockArraysEXT +GLAD_API_CALL PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; +#define glUnmapBuffer glad_glUnmapBuffer +GLAD_API_CALL PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB; +#define glUnmapBufferARB glad_glUnmapBufferARB +GLAD_API_CALL PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer; +#define glUnmapNamedBuffer glad_glUnmapNamedBuffer +GLAD_API_CALL PFNGLUNMAPNAMEDBUFFEREXTPROC glad_glUnmapNamedBufferEXT; +#define glUnmapNamedBufferEXT glad_glUnmapNamedBufferEXT +GLAD_API_CALL PFNGLUNMAPOBJECTBUFFERATIPROC glad_glUnmapObjectBufferATI; +#define glUnmapObjectBufferATI glad_glUnmapObjectBufferATI +GLAD_API_CALL PFNGLUNMAPTEXTURE2DINTELPROC glad_glUnmapTexture2DINTEL; +#define glUnmapTexture2DINTEL glad_glUnmapTexture2DINTEL +GLAD_API_CALL PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI; +#define glUpdateObjectBufferATI glad_glUpdateObjectBufferATI +GLAD_API_CALL PFNGLUPLOADGPUMASKNVXPROC glad_glUploadGpuMaskNVX; +#define glUploadGpuMaskNVX glad_glUploadGpuMaskNVX +GLAD_API_CALL PFNGLUSEPROGRAMPROC glad_glUseProgram; +#define glUseProgram glad_glUseProgram +GLAD_API_CALL PFNGLUSEPROGRAMOBJECTARBPROC glad_glUseProgramObjectARB; +#define glUseProgramObjectARB glad_glUseProgramObjectARB +GLAD_API_CALL PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages; +#define glUseProgramStages glad_glUseProgramStages +GLAD_API_CALL PFNGLUSESHADERPROGRAMEXTPROC glad_glUseShaderProgramEXT; +#define glUseShaderProgramEXT glad_glUseShaderProgramEXT +GLAD_API_CALL PFNGLVDPAUFININVPROC glad_glVDPAUFiniNV; +#define glVDPAUFiniNV glad_glVDPAUFiniNV +GLAD_API_CALL PFNGLVDPAUGETSURFACEIVNVPROC glad_glVDPAUGetSurfaceivNV; +#define glVDPAUGetSurfaceivNV glad_glVDPAUGetSurfaceivNV +GLAD_API_CALL PFNGLVDPAUINITNVPROC glad_glVDPAUInitNV; +#define glVDPAUInitNV glad_glVDPAUInitNV +GLAD_API_CALL PFNGLVDPAUISSURFACENVPROC glad_glVDPAUIsSurfaceNV; +#define glVDPAUIsSurfaceNV glad_glVDPAUIsSurfaceNV +GLAD_API_CALL PFNGLVDPAUMAPSURFACESNVPROC glad_glVDPAUMapSurfacesNV; +#define glVDPAUMapSurfacesNV glad_glVDPAUMapSurfacesNV +GLAD_API_CALL PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC glad_glVDPAURegisterOutputSurfaceNV; +#define glVDPAURegisterOutputSurfaceNV glad_glVDPAURegisterOutputSurfaceNV +GLAD_API_CALL PFNGLVDPAUREGISTERVIDEOSURFACENVPROC glad_glVDPAURegisterVideoSurfaceNV; +#define glVDPAURegisterVideoSurfaceNV glad_glVDPAURegisterVideoSurfaceNV +GLAD_API_CALL PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC glad_glVDPAURegisterVideoSurfaceWithPictureStructureNV; +#define glVDPAURegisterVideoSurfaceWithPictureStructureNV glad_glVDPAURegisterVideoSurfaceWithPictureStructureNV +GLAD_API_CALL PFNGLVDPAUSURFACEACCESSNVPROC glad_glVDPAUSurfaceAccessNV; +#define glVDPAUSurfaceAccessNV glad_glVDPAUSurfaceAccessNV +GLAD_API_CALL PFNGLVDPAUUNMAPSURFACESNVPROC glad_glVDPAUUnmapSurfacesNV; +#define glVDPAUUnmapSurfacesNV glad_glVDPAUUnmapSurfacesNV +GLAD_API_CALL PFNGLVDPAUUNREGISTERSURFACENVPROC glad_glVDPAUUnregisterSurfaceNV; +#define glVDPAUUnregisterSurfaceNV glad_glVDPAUUnregisterSurfaceNV +GLAD_API_CALL PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; +#define glValidateProgram glad_glValidateProgram +GLAD_API_CALL PFNGLVALIDATEPROGRAMARBPROC glad_glValidateProgramARB; +#define glValidateProgramARB glad_glValidateProgramARB +GLAD_API_CALL PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline; +#define glValidateProgramPipeline glad_glValidateProgramPipeline +GLAD_API_CALL PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI; +#define glVariantArrayObjectATI glad_glVariantArrayObjectATI +GLAD_API_CALL PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT; +#define glVariantPointerEXT glad_glVariantPointerEXT +GLAD_API_CALL PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT; +#define glVariantbvEXT glad_glVariantbvEXT +GLAD_API_CALL PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT; +#define glVariantdvEXT glad_glVariantdvEXT +GLAD_API_CALL PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT; +#define glVariantfvEXT glad_glVariantfvEXT +GLAD_API_CALL PFNGLVARIANTIVEXTPROC glad_glVariantivEXT; +#define glVariantivEXT glad_glVariantivEXT +GLAD_API_CALL PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT; +#define glVariantsvEXT glad_glVariantsvEXT +GLAD_API_CALL PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT; +#define glVariantubvEXT glad_glVariantubvEXT +GLAD_API_CALL PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT; +#define glVariantuivEXT glad_glVariantuivEXT +GLAD_API_CALL PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT; +#define glVariantusvEXT glad_glVariantusvEXT +GLAD_API_CALL PFNGLVERTEX2BOESPROC glad_glVertex2bOES; +#define glVertex2bOES glad_glVertex2bOES +GLAD_API_CALL PFNGLVERTEX2BVOESPROC glad_glVertex2bvOES; +#define glVertex2bvOES glad_glVertex2bvOES +GLAD_API_CALL PFNGLVERTEX2HNVPROC glad_glVertex2hNV; +#define glVertex2hNV glad_glVertex2hNV +GLAD_API_CALL PFNGLVERTEX2HVNVPROC glad_glVertex2hvNV; +#define glVertex2hvNV glad_glVertex2hvNV +GLAD_API_CALL PFNGLVERTEX2XOESPROC glad_glVertex2xOES; +#define glVertex2xOES glad_glVertex2xOES +GLAD_API_CALL PFNGLVERTEX2XVOESPROC glad_glVertex2xvOES; +#define glVertex2xvOES glad_glVertex2xvOES +GLAD_API_CALL PFNGLVERTEX3BOESPROC glad_glVertex3bOES; +#define glVertex3bOES glad_glVertex3bOES +GLAD_API_CALL PFNGLVERTEX3BVOESPROC glad_glVertex3bvOES; +#define glVertex3bvOES glad_glVertex3bvOES +GLAD_API_CALL PFNGLVERTEX3HNVPROC glad_glVertex3hNV; +#define glVertex3hNV glad_glVertex3hNV +GLAD_API_CALL PFNGLVERTEX3HVNVPROC glad_glVertex3hvNV; +#define glVertex3hvNV glad_glVertex3hvNV +GLAD_API_CALL PFNGLVERTEX3XOESPROC glad_glVertex3xOES; +#define glVertex3xOES glad_glVertex3xOES +GLAD_API_CALL PFNGLVERTEX3XVOESPROC glad_glVertex3xvOES; +#define glVertex3xvOES glad_glVertex3xvOES +GLAD_API_CALL PFNGLVERTEX4BOESPROC glad_glVertex4bOES; +#define glVertex4bOES glad_glVertex4bOES +GLAD_API_CALL PFNGLVERTEX4BVOESPROC glad_glVertex4bvOES; +#define glVertex4bvOES glad_glVertex4bvOES +GLAD_API_CALL PFNGLVERTEX4HNVPROC glad_glVertex4hNV; +#define glVertex4hNV glad_glVertex4hNV +GLAD_API_CALL PFNGLVERTEX4HVNVPROC glad_glVertex4hvNV; +#define glVertex4hvNV glad_glVertex4hvNV +GLAD_API_CALL PFNGLVERTEX4XOESPROC glad_glVertex4xOES; +#define glVertex4xOES glad_glVertex4xOES +GLAD_API_CALL PFNGLVERTEX4XVOESPROC glad_glVertex4xvOES; +#define glVertex4xvOES glad_glVertex4xvOES +GLAD_API_CALL PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding; +#define glVertexArrayAttribBinding glad_glVertexArrayAttribBinding +GLAD_API_CALL PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat; +#define glVertexArrayAttribFormat glad_glVertexArrayAttribFormat +GLAD_API_CALL PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat; +#define glVertexArrayAttribIFormat glad_glVertexArrayAttribIFormat +GLAD_API_CALL PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat; +#define glVertexArrayAttribLFormat glad_glVertexArrayAttribLFormat +GLAD_API_CALL PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glad_glVertexArrayBindVertexBufferEXT; +#define glVertexArrayBindVertexBufferEXT glad_glVertexArrayBindVertexBufferEXT +GLAD_API_CALL PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor; +#define glVertexArrayBindingDivisor glad_glVertexArrayBindingDivisor +GLAD_API_CALL PFNGLVERTEXARRAYCOLOROFFSETEXTPROC glad_glVertexArrayColorOffsetEXT; +#define glVertexArrayColorOffsetEXT glad_glVertexArrayColorOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC glad_glVertexArrayEdgeFlagOffsetEXT; +#define glVertexArrayEdgeFlagOffsetEXT glad_glVertexArrayEdgeFlagOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer; +#define glVertexArrayElementBuffer glad_glVertexArrayElementBuffer +GLAD_API_CALL PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC glad_glVertexArrayFogCoordOffsetEXT; +#define glVertexArrayFogCoordOffsetEXT glad_glVertexArrayFogCoordOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYINDEXOFFSETEXTPROC glad_glVertexArrayIndexOffsetEXT; +#define glVertexArrayIndexOffsetEXT glad_glVertexArrayIndexOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC glad_glVertexArrayMultiTexCoordOffsetEXT; +#define glVertexArrayMultiTexCoordOffsetEXT glad_glVertexArrayMultiTexCoordOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYNORMALOFFSETEXTPROC glad_glVertexArrayNormalOffsetEXT; +#define glVertexArrayNormalOffsetEXT glad_glVertexArrayNormalOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYPARAMETERIAPPLEPROC glad_glVertexArrayParameteriAPPLE; +#define glVertexArrayParameteriAPPLE glad_glVertexArrayParameteriAPPLE +GLAD_API_CALL PFNGLVERTEXARRAYRANGEAPPLEPROC glad_glVertexArrayRangeAPPLE; +#define glVertexArrayRangeAPPLE glad_glVertexArrayRangeAPPLE +GLAD_API_CALL PFNGLVERTEXARRAYRANGENVPROC glad_glVertexArrayRangeNV; +#define glVertexArrayRangeNV glad_glVertexArrayRangeNV +GLAD_API_CALL PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC glad_glVertexArraySecondaryColorOffsetEXT; +#define glVertexArraySecondaryColorOffsetEXT glad_glVertexArraySecondaryColorOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC glad_glVertexArrayTexCoordOffsetEXT; +#define glVertexArrayTexCoordOffsetEXT glad_glVertexArrayTexCoordOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glad_glVertexArrayVertexAttribBindingEXT; +#define glVertexArrayVertexAttribBindingEXT glad_glVertexArrayVertexAttribBindingEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glad_glVertexArrayVertexAttribDivisorEXT; +#define glVertexArrayVertexAttribDivisorEXT glad_glVertexArrayVertexAttribDivisorEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glad_glVertexArrayVertexAttribFormatEXT; +#define glVertexArrayVertexAttribFormatEXT glad_glVertexArrayVertexAttribFormatEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glad_glVertexArrayVertexAttribIFormatEXT; +#define glVertexArrayVertexAttribIFormatEXT glad_glVertexArrayVertexAttribIFormatEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glad_glVertexArrayVertexAttribIOffsetEXT; +#define glVertexArrayVertexAttribIOffsetEXT glad_glVertexArrayVertexAttribIOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glad_glVertexArrayVertexAttribLFormatEXT; +#define glVertexArrayVertexAttribLFormatEXT glad_glVertexArrayVertexAttribLFormatEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glad_glVertexArrayVertexAttribLOffsetEXT; +#define glVertexArrayVertexAttribLOffsetEXT glad_glVertexArrayVertexAttribLOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glad_glVertexArrayVertexAttribOffsetEXT; +#define glVertexArrayVertexAttribOffsetEXT glad_glVertexArrayVertexAttribOffsetEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glad_glVertexArrayVertexBindingDivisorEXT; +#define glVertexArrayVertexBindingDivisorEXT glad_glVertexArrayVertexBindingDivisorEXT +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer; +#define glVertexArrayVertexBuffer glad_glVertexArrayVertexBuffer +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers; +#define glVertexArrayVertexBuffers glad_glVertexArrayVertexBuffers +GLAD_API_CALL PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glad_glVertexArrayVertexOffsetEXT; +#define glVertexArrayVertexOffsetEXT glad_glVertexArrayVertexOffsetEXT +GLAD_API_CALL PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; +#define glVertexAttrib1d glad_glVertexAttrib1d +GLAD_API_CALL PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB; +#define glVertexAttrib1dARB glad_glVertexAttrib1dARB +GLAD_API_CALL PFNGLVERTEXATTRIB1DNVPROC glad_glVertexAttrib1dNV; +#define glVertexAttrib1dNV glad_glVertexAttrib1dNV +GLAD_API_CALL PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; +#define glVertexAttrib1dv glad_glVertexAttrib1dv +GLAD_API_CALL PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB; +#define glVertexAttrib1dvARB glad_glVertexAttrib1dvARB +GLAD_API_CALL PFNGLVERTEXATTRIB1DVNVPROC glad_glVertexAttrib1dvNV; +#define glVertexAttrib1dvNV glad_glVertexAttrib1dvNV +GLAD_API_CALL PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; +#define glVertexAttrib1f glad_glVertexAttrib1f +GLAD_API_CALL PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB; +#define glVertexAttrib1fARB glad_glVertexAttrib1fARB +GLAD_API_CALL PFNGLVERTEXATTRIB1FNVPROC glad_glVertexAttrib1fNV; +#define glVertexAttrib1fNV glad_glVertexAttrib1fNV +GLAD_API_CALL PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; +#define glVertexAttrib1fv glad_glVertexAttrib1fv +GLAD_API_CALL PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB; +#define glVertexAttrib1fvARB glad_glVertexAttrib1fvARB +GLAD_API_CALL PFNGLVERTEXATTRIB1FVNVPROC glad_glVertexAttrib1fvNV; +#define glVertexAttrib1fvNV glad_glVertexAttrib1fvNV +GLAD_API_CALL PFNGLVERTEXATTRIB1HNVPROC glad_glVertexAttrib1hNV; +#define glVertexAttrib1hNV glad_glVertexAttrib1hNV +GLAD_API_CALL PFNGLVERTEXATTRIB1HVNVPROC glad_glVertexAttrib1hvNV; +#define glVertexAttrib1hvNV glad_glVertexAttrib1hvNV +GLAD_API_CALL PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; +#define glVertexAttrib1s glad_glVertexAttrib1s +GLAD_API_CALL PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB; +#define glVertexAttrib1sARB glad_glVertexAttrib1sARB +GLAD_API_CALL PFNGLVERTEXATTRIB1SNVPROC glad_glVertexAttrib1sNV; +#define glVertexAttrib1sNV glad_glVertexAttrib1sNV +GLAD_API_CALL PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; +#define glVertexAttrib1sv glad_glVertexAttrib1sv +GLAD_API_CALL PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB; +#define glVertexAttrib1svARB glad_glVertexAttrib1svARB +GLAD_API_CALL PFNGLVERTEXATTRIB1SVNVPROC glad_glVertexAttrib1svNV; +#define glVertexAttrib1svNV glad_glVertexAttrib1svNV +GLAD_API_CALL PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; +#define glVertexAttrib2d glad_glVertexAttrib2d +GLAD_API_CALL PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB; +#define glVertexAttrib2dARB glad_glVertexAttrib2dARB +GLAD_API_CALL PFNGLVERTEXATTRIB2DNVPROC glad_glVertexAttrib2dNV; +#define glVertexAttrib2dNV glad_glVertexAttrib2dNV +GLAD_API_CALL PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; +#define glVertexAttrib2dv glad_glVertexAttrib2dv +GLAD_API_CALL PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB; +#define glVertexAttrib2dvARB glad_glVertexAttrib2dvARB +GLAD_API_CALL PFNGLVERTEXATTRIB2DVNVPROC glad_glVertexAttrib2dvNV; +#define glVertexAttrib2dvNV glad_glVertexAttrib2dvNV +GLAD_API_CALL PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; +#define glVertexAttrib2f glad_glVertexAttrib2f +GLAD_API_CALL PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB; +#define glVertexAttrib2fARB glad_glVertexAttrib2fARB +GLAD_API_CALL PFNGLVERTEXATTRIB2FNVPROC glad_glVertexAttrib2fNV; +#define glVertexAttrib2fNV glad_glVertexAttrib2fNV +GLAD_API_CALL PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; +#define glVertexAttrib2fv glad_glVertexAttrib2fv +GLAD_API_CALL PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB; +#define glVertexAttrib2fvARB glad_glVertexAttrib2fvARB +GLAD_API_CALL PFNGLVERTEXATTRIB2FVNVPROC glad_glVertexAttrib2fvNV; +#define glVertexAttrib2fvNV glad_glVertexAttrib2fvNV +GLAD_API_CALL PFNGLVERTEXATTRIB2HNVPROC glad_glVertexAttrib2hNV; +#define glVertexAttrib2hNV glad_glVertexAttrib2hNV +GLAD_API_CALL PFNGLVERTEXATTRIB2HVNVPROC glad_glVertexAttrib2hvNV; +#define glVertexAttrib2hvNV glad_glVertexAttrib2hvNV +GLAD_API_CALL PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; +#define glVertexAttrib2s glad_glVertexAttrib2s +GLAD_API_CALL PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB; +#define glVertexAttrib2sARB glad_glVertexAttrib2sARB +GLAD_API_CALL PFNGLVERTEXATTRIB2SNVPROC glad_glVertexAttrib2sNV; +#define glVertexAttrib2sNV glad_glVertexAttrib2sNV +GLAD_API_CALL PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; +#define glVertexAttrib2sv glad_glVertexAttrib2sv +GLAD_API_CALL PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB; +#define glVertexAttrib2svARB glad_glVertexAttrib2svARB +GLAD_API_CALL PFNGLVERTEXATTRIB2SVNVPROC glad_glVertexAttrib2svNV; +#define glVertexAttrib2svNV glad_glVertexAttrib2svNV +GLAD_API_CALL PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; +#define glVertexAttrib3d glad_glVertexAttrib3d +GLAD_API_CALL PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB; +#define glVertexAttrib3dARB glad_glVertexAttrib3dARB +GLAD_API_CALL PFNGLVERTEXATTRIB3DNVPROC glad_glVertexAttrib3dNV; +#define glVertexAttrib3dNV glad_glVertexAttrib3dNV +GLAD_API_CALL PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; +#define glVertexAttrib3dv glad_glVertexAttrib3dv +GLAD_API_CALL PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB; +#define glVertexAttrib3dvARB glad_glVertexAttrib3dvARB +GLAD_API_CALL PFNGLVERTEXATTRIB3DVNVPROC glad_glVertexAttrib3dvNV; +#define glVertexAttrib3dvNV glad_glVertexAttrib3dvNV +GLAD_API_CALL PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; +#define glVertexAttrib3f glad_glVertexAttrib3f +GLAD_API_CALL PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB; +#define glVertexAttrib3fARB glad_glVertexAttrib3fARB +GLAD_API_CALL PFNGLVERTEXATTRIB3FNVPROC glad_glVertexAttrib3fNV; +#define glVertexAttrib3fNV glad_glVertexAttrib3fNV +GLAD_API_CALL PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; +#define glVertexAttrib3fv glad_glVertexAttrib3fv +GLAD_API_CALL PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB; +#define glVertexAttrib3fvARB glad_glVertexAttrib3fvARB +GLAD_API_CALL PFNGLVERTEXATTRIB3FVNVPROC glad_glVertexAttrib3fvNV; +#define glVertexAttrib3fvNV glad_glVertexAttrib3fvNV +GLAD_API_CALL PFNGLVERTEXATTRIB3HNVPROC glad_glVertexAttrib3hNV; +#define glVertexAttrib3hNV glad_glVertexAttrib3hNV +GLAD_API_CALL PFNGLVERTEXATTRIB3HVNVPROC glad_glVertexAttrib3hvNV; +#define glVertexAttrib3hvNV glad_glVertexAttrib3hvNV +GLAD_API_CALL PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; +#define glVertexAttrib3s glad_glVertexAttrib3s +GLAD_API_CALL PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB; +#define glVertexAttrib3sARB glad_glVertexAttrib3sARB +GLAD_API_CALL PFNGLVERTEXATTRIB3SNVPROC glad_glVertexAttrib3sNV; +#define glVertexAttrib3sNV glad_glVertexAttrib3sNV +GLAD_API_CALL PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; +#define glVertexAttrib3sv glad_glVertexAttrib3sv +GLAD_API_CALL PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB; +#define glVertexAttrib3svARB glad_glVertexAttrib3svARB +GLAD_API_CALL PFNGLVERTEXATTRIB3SVNVPROC glad_glVertexAttrib3svNV; +#define glVertexAttrib3svNV glad_glVertexAttrib3svNV +GLAD_API_CALL PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; +#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv +GLAD_API_CALL PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB; +#define glVertexAttrib4NbvARB glad_glVertexAttrib4NbvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; +#define glVertexAttrib4Niv glad_glVertexAttrib4Niv +GLAD_API_CALL PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB; +#define glVertexAttrib4NivARB glad_glVertexAttrib4NivARB +GLAD_API_CALL PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; +#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv +GLAD_API_CALL PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB; +#define glVertexAttrib4NsvARB glad_glVertexAttrib4NsvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; +#define glVertexAttrib4Nub glad_glVertexAttrib4Nub +GLAD_API_CALL PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB; +#define glVertexAttrib4NubARB glad_glVertexAttrib4NubARB +GLAD_API_CALL PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; +#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv +GLAD_API_CALL PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB; +#define glVertexAttrib4NubvARB glad_glVertexAttrib4NubvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; +#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv +GLAD_API_CALL PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB; +#define glVertexAttrib4NuivARB glad_glVertexAttrib4NuivARB +GLAD_API_CALL PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; +#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv +GLAD_API_CALL PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB; +#define glVertexAttrib4NusvARB glad_glVertexAttrib4NusvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; +#define glVertexAttrib4bv glad_glVertexAttrib4bv +GLAD_API_CALL PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB; +#define glVertexAttrib4bvARB glad_glVertexAttrib4bvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; +#define glVertexAttrib4d glad_glVertexAttrib4d +GLAD_API_CALL PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB; +#define glVertexAttrib4dARB glad_glVertexAttrib4dARB +GLAD_API_CALL PFNGLVERTEXATTRIB4DNVPROC glad_glVertexAttrib4dNV; +#define glVertexAttrib4dNV glad_glVertexAttrib4dNV +GLAD_API_CALL PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; +#define glVertexAttrib4dv glad_glVertexAttrib4dv +GLAD_API_CALL PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB; +#define glVertexAttrib4dvARB glad_glVertexAttrib4dvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4DVNVPROC glad_glVertexAttrib4dvNV; +#define glVertexAttrib4dvNV glad_glVertexAttrib4dvNV +GLAD_API_CALL PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; +#define glVertexAttrib4f glad_glVertexAttrib4f +GLAD_API_CALL PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB; +#define glVertexAttrib4fARB glad_glVertexAttrib4fARB +GLAD_API_CALL PFNGLVERTEXATTRIB4FNVPROC glad_glVertexAttrib4fNV; +#define glVertexAttrib4fNV glad_glVertexAttrib4fNV +GLAD_API_CALL PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; +#define glVertexAttrib4fv glad_glVertexAttrib4fv +GLAD_API_CALL PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB; +#define glVertexAttrib4fvARB glad_glVertexAttrib4fvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4FVNVPROC glad_glVertexAttrib4fvNV; +#define glVertexAttrib4fvNV glad_glVertexAttrib4fvNV +GLAD_API_CALL PFNGLVERTEXATTRIB4HNVPROC glad_glVertexAttrib4hNV; +#define glVertexAttrib4hNV glad_glVertexAttrib4hNV +GLAD_API_CALL PFNGLVERTEXATTRIB4HVNVPROC glad_glVertexAttrib4hvNV; +#define glVertexAttrib4hvNV glad_glVertexAttrib4hvNV +GLAD_API_CALL PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; +#define glVertexAttrib4iv glad_glVertexAttrib4iv +GLAD_API_CALL PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB; +#define glVertexAttrib4ivARB glad_glVertexAttrib4ivARB +GLAD_API_CALL PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; +#define glVertexAttrib4s glad_glVertexAttrib4s +GLAD_API_CALL PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB; +#define glVertexAttrib4sARB glad_glVertexAttrib4sARB +GLAD_API_CALL PFNGLVERTEXATTRIB4SNVPROC glad_glVertexAttrib4sNV; +#define glVertexAttrib4sNV glad_glVertexAttrib4sNV +GLAD_API_CALL PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; +#define glVertexAttrib4sv glad_glVertexAttrib4sv +GLAD_API_CALL PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB; +#define glVertexAttrib4svARB glad_glVertexAttrib4svARB +GLAD_API_CALL PFNGLVERTEXATTRIB4SVNVPROC glad_glVertexAttrib4svNV; +#define glVertexAttrib4svNV glad_glVertexAttrib4svNV +GLAD_API_CALL PFNGLVERTEXATTRIB4UBNVPROC glad_glVertexAttrib4ubNV; +#define glVertexAttrib4ubNV glad_glVertexAttrib4ubNV +GLAD_API_CALL PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; +#define glVertexAttrib4ubv glad_glVertexAttrib4ubv +GLAD_API_CALL PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB; +#define glVertexAttrib4ubvARB glad_glVertexAttrib4ubvARB +GLAD_API_CALL PFNGLVERTEXATTRIB4UBVNVPROC glad_glVertexAttrib4ubvNV; +#define glVertexAttrib4ubvNV glad_glVertexAttrib4ubvNV +GLAD_API_CALL PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; +#define glVertexAttrib4uiv glad_glVertexAttrib4uiv +GLAD_API_CALL PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB; +#define glVertexAttrib4uivARB glad_glVertexAttrib4uivARB +GLAD_API_CALL PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; +#define glVertexAttrib4usv glad_glVertexAttrib4usv +GLAD_API_CALL PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB; +#define glVertexAttrib4usvARB glad_glVertexAttrib4usvARB +GLAD_API_CALL PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glad_glVertexAttribArrayObjectATI; +#define glVertexAttribArrayObjectATI glad_glVertexAttribArrayObjectATI +GLAD_API_CALL PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; +#define glVertexAttribBinding glad_glVertexAttribBinding +GLAD_API_CALL PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; +#define glVertexAttribDivisor glad_glVertexAttribDivisor +GLAD_API_CALL PFNGLVERTEXATTRIBDIVISORARBPROC glad_glVertexAttribDivisorARB; +#define glVertexAttribDivisorARB glad_glVertexAttribDivisorARB +GLAD_API_CALL PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; +#define glVertexAttribFormat glad_glVertexAttribFormat +GLAD_API_CALL PFNGLVERTEXATTRIBFORMATNVPROC glad_glVertexAttribFormatNV; +#define glVertexAttribFormatNV glad_glVertexAttribFormatNV +GLAD_API_CALL PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; +#define glVertexAttribI1i glad_glVertexAttribI1i +GLAD_API_CALL PFNGLVERTEXATTRIBI1IEXTPROC glad_glVertexAttribI1iEXT; +#define glVertexAttribI1iEXT glad_glVertexAttribI1iEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; +#define glVertexAttribI1iv glad_glVertexAttribI1iv +GLAD_API_CALL PFNGLVERTEXATTRIBI1IVEXTPROC glad_glVertexAttribI1ivEXT; +#define glVertexAttribI1ivEXT glad_glVertexAttribI1ivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; +#define glVertexAttribI1ui glad_glVertexAttribI1ui +GLAD_API_CALL PFNGLVERTEXATTRIBI1UIEXTPROC glad_glVertexAttribI1uiEXT; +#define glVertexAttribI1uiEXT glad_glVertexAttribI1uiEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; +#define glVertexAttribI1uiv glad_glVertexAttribI1uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI1UIVEXTPROC glad_glVertexAttribI1uivEXT; +#define glVertexAttribI1uivEXT glad_glVertexAttribI1uivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; +#define glVertexAttribI2i glad_glVertexAttribI2i +GLAD_API_CALL PFNGLVERTEXATTRIBI2IEXTPROC glad_glVertexAttribI2iEXT; +#define glVertexAttribI2iEXT glad_glVertexAttribI2iEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; +#define glVertexAttribI2iv glad_glVertexAttribI2iv +GLAD_API_CALL PFNGLVERTEXATTRIBI2IVEXTPROC glad_glVertexAttribI2ivEXT; +#define glVertexAttribI2ivEXT glad_glVertexAttribI2ivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; +#define glVertexAttribI2ui glad_glVertexAttribI2ui +GLAD_API_CALL PFNGLVERTEXATTRIBI2UIEXTPROC glad_glVertexAttribI2uiEXT; +#define glVertexAttribI2uiEXT glad_glVertexAttribI2uiEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; +#define glVertexAttribI2uiv glad_glVertexAttribI2uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI2UIVEXTPROC glad_glVertexAttribI2uivEXT; +#define glVertexAttribI2uivEXT glad_glVertexAttribI2uivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; +#define glVertexAttribI3i glad_glVertexAttribI3i +GLAD_API_CALL PFNGLVERTEXATTRIBI3IEXTPROC glad_glVertexAttribI3iEXT; +#define glVertexAttribI3iEXT glad_glVertexAttribI3iEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; +#define glVertexAttribI3iv glad_glVertexAttribI3iv +GLAD_API_CALL PFNGLVERTEXATTRIBI3IVEXTPROC glad_glVertexAttribI3ivEXT; +#define glVertexAttribI3ivEXT glad_glVertexAttribI3ivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; +#define glVertexAttribI3ui glad_glVertexAttribI3ui +GLAD_API_CALL PFNGLVERTEXATTRIBI3UIEXTPROC glad_glVertexAttribI3uiEXT; +#define glVertexAttribI3uiEXT glad_glVertexAttribI3uiEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; +#define glVertexAttribI3uiv glad_glVertexAttribI3uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI3UIVEXTPROC glad_glVertexAttribI3uivEXT; +#define glVertexAttribI3uivEXT glad_glVertexAttribI3uivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; +#define glVertexAttribI4bv glad_glVertexAttribI4bv +GLAD_API_CALL PFNGLVERTEXATTRIBI4BVEXTPROC glad_glVertexAttribI4bvEXT; +#define glVertexAttribI4bvEXT glad_glVertexAttribI4bvEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; +#define glVertexAttribI4i glad_glVertexAttribI4i +GLAD_API_CALL PFNGLVERTEXATTRIBI4IEXTPROC glad_glVertexAttribI4iEXT; +#define glVertexAttribI4iEXT glad_glVertexAttribI4iEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; +#define glVertexAttribI4iv glad_glVertexAttribI4iv +GLAD_API_CALL PFNGLVERTEXATTRIBI4IVEXTPROC glad_glVertexAttribI4ivEXT; +#define glVertexAttribI4ivEXT glad_glVertexAttribI4ivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; +#define glVertexAttribI4sv glad_glVertexAttribI4sv +GLAD_API_CALL PFNGLVERTEXATTRIBI4SVEXTPROC glad_glVertexAttribI4svEXT; +#define glVertexAttribI4svEXT glad_glVertexAttribI4svEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; +#define glVertexAttribI4ubv glad_glVertexAttribI4ubv +GLAD_API_CALL PFNGLVERTEXATTRIBI4UBVEXTPROC glad_glVertexAttribI4ubvEXT; +#define glVertexAttribI4ubvEXT glad_glVertexAttribI4ubvEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; +#define glVertexAttribI4ui glad_glVertexAttribI4ui +GLAD_API_CALL PFNGLVERTEXATTRIBI4UIEXTPROC glad_glVertexAttribI4uiEXT; +#define glVertexAttribI4uiEXT glad_glVertexAttribI4uiEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; +#define glVertexAttribI4uiv glad_glVertexAttribI4uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI4UIVEXTPROC glad_glVertexAttribI4uivEXT; +#define glVertexAttribI4uivEXT glad_glVertexAttribI4uivEXT +GLAD_API_CALL PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +#define glVertexAttribI4usv glad_glVertexAttribI4usv +GLAD_API_CALL PFNGLVERTEXATTRIBI4USVEXTPROC glad_glVertexAttribI4usvEXT; +#define glVertexAttribI4usvEXT glad_glVertexAttribI4usvEXT +GLAD_API_CALL PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; +#define glVertexAttribIFormat glad_glVertexAttribIFormat +GLAD_API_CALL PFNGLVERTEXATTRIBIFORMATNVPROC glad_glVertexAttribIFormatNV; +#define glVertexAttribIFormatNV glad_glVertexAttribIFormatNV +GLAD_API_CALL PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; +#define glVertexAttribIPointer glad_glVertexAttribIPointer +GLAD_API_CALL PFNGLVERTEXATTRIBIPOINTEREXTPROC glad_glVertexAttribIPointerEXT; +#define glVertexAttribIPointerEXT glad_glVertexAttribIPointerEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d; +#define glVertexAttribL1d glad_glVertexAttribL1d +GLAD_API_CALL PFNGLVERTEXATTRIBL1DEXTPROC glad_glVertexAttribL1dEXT; +#define glVertexAttribL1dEXT glad_glVertexAttribL1dEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv; +#define glVertexAttribL1dv glad_glVertexAttribL1dv +GLAD_API_CALL PFNGLVERTEXATTRIBL1DVEXTPROC glad_glVertexAttribL1dvEXT; +#define glVertexAttribL1dvEXT glad_glVertexAttribL1dvEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL1I64NVPROC glad_glVertexAttribL1i64NV; +#define glVertexAttribL1i64NV glad_glVertexAttribL1i64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL1I64VNVPROC glad_glVertexAttribL1i64vNV; +#define glVertexAttribL1i64vNV glad_glVertexAttribL1i64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBL1UI64ARBPROC glad_glVertexAttribL1ui64ARB; +#define glVertexAttribL1ui64ARB glad_glVertexAttribL1ui64ARB +GLAD_API_CALL PFNGLVERTEXATTRIBL1UI64NVPROC glad_glVertexAttribL1ui64NV; +#define glVertexAttribL1ui64NV glad_glVertexAttribL1ui64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL1UI64VARBPROC glad_glVertexAttribL1ui64vARB; +#define glVertexAttribL1ui64vARB glad_glVertexAttribL1ui64vARB +GLAD_API_CALL PFNGLVERTEXATTRIBL1UI64VNVPROC glad_glVertexAttribL1ui64vNV; +#define glVertexAttribL1ui64vNV glad_glVertexAttribL1ui64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d; +#define glVertexAttribL2d glad_glVertexAttribL2d +GLAD_API_CALL PFNGLVERTEXATTRIBL2DEXTPROC glad_glVertexAttribL2dEXT; +#define glVertexAttribL2dEXT glad_glVertexAttribL2dEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv; +#define glVertexAttribL2dv glad_glVertexAttribL2dv +GLAD_API_CALL PFNGLVERTEXATTRIBL2DVEXTPROC glad_glVertexAttribL2dvEXT; +#define glVertexAttribL2dvEXT glad_glVertexAttribL2dvEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL2I64NVPROC glad_glVertexAttribL2i64NV; +#define glVertexAttribL2i64NV glad_glVertexAttribL2i64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL2I64VNVPROC glad_glVertexAttribL2i64vNV; +#define glVertexAttribL2i64vNV glad_glVertexAttribL2i64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBL2UI64NVPROC glad_glVertexAttribL2ui64NV; +#define glVertexAttribL2ui64NV glad_glVertexAttribL2ui64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL2UI64VNVPROC glad_glVertexAttribL2ui64vNV; +#define glVertexAttribL2ui64vNV glad_glVertexAttribL2ui64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d; +#define glVertexAttribL3d glad_glVertexAttribL3d +GLAD_API_CALL PFNGLVERTEXATTRIBL3DEXTPROC glad_glVertexAttribL3dEXT; +#define glVertexAttribL3dEXT glad_glVertexAttribL3dEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv; +#define glVertexAttribL3dv glad_glVertexAttribL3dv +GLAD_API_CALL PFNGLVERTEXATTRIBL3DVEXTPROC glad_glVertexAttribL3dvEXT; +#define glVertexAttribL3dvEXT glad_glVertexAttribL3dvEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL3I64NVPROC glad_glVertexAttribL3i64NV; +#define glVertexAttribL3i64NV glad_glVertexAttribL3i64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL3I64VNVPROC glad_glVertexAttribL3i64vNV; +#define glVertexAttribL3i64vNV glad_glVertexAttribL3i64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBL3UI64NVPROC glad_glVertexAttribL3ui64NV; +#define glVertexAttribL3ui64NV glad_glVertexAttribL3ui64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL3UI64VNVPROC glad_glVertexAttribL3ui64vNV; +#define glVertexAttribL3ui64vNV glad_glVertexAttribL3ui64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d; +#define glVertexAttribL4d glad_glVertexAttribL4d +GLAD_API_CALL PFNGLVERTEXATTRIBL4DEXTPROC glad_glVertexAttribL4dEXT; +#define glVertexAttribL4dEXT glad_glVertexAttribL4dEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv; +#define glVertexAttribL4dv glad_glVertexAttribL4dv +GLAD_API_CALL PFNGLVERTEXATTRIBL4DVEXTPROC glad_glVertexAttribL4dvEXT; +#define glVertexAttribL4dvEXT glad_glVertexAttribL4dvEXT +GLAD_API_CALL PFNGLVERTEXATTRIBL4I64NVPROC glad_glVertexAttribL4i64NV; +#define glVertexAttribL4i64NV glad_glVertexAttribL4i64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL4I64VNVPROC glad_glVertexAttribL4i64vNV; +#define glVertexAttribL4i64vNV glad_glVertexAttribL4i64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBL4UI64NVPROC glad_glVertexAttribL4ui64NV; +#define glVertexAttribL4ui64NV glad_glVertexAttribL4ui64NV +GLAD_API_CALL PFNGLVERTEXATTRIBL4UI64VNVPROC glad_glVertexAttribL4ui64vNV; +#define glVertexAttribL4ui64vNV glad_glVertexAttribL4ui64vNV +GLAD_API_CALL PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; +#define glVertexAttribLFormat glad_glVertexAttribLFormat +GLAD_API_CALL PFNGLVERTEXATTRIBLFORMATNVPROC glad_glVertexAttribLFormatNV; +#define glVertexAttribLFormatNV glad_glVertexAttribLFormatNV +GLAD_API_CALL PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer; +#define glVertexAttribLPointer glad_glVertexAttribLPointer +GLAD_API_CALL PFNGLVERTEXATTRIBLPOINTEREXTPROC glad_glVertexAttribLPointerEXT; +#define glVertexAttribLPointerEXT glad_glVertexAttribLPointerEXT +GLAD_API_CALL PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; +#define glVertexAttribP1ui glad_glVertexAttribP1ui +GLAD_API_CALL PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; +#define glVertexAttribP1uiv glad_glVertexAttribP1uiv +GLAD_API_CALL PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; +#define glVertexAttribP2ui glad_glVertexAttribP2ui +GLAD_API_CALL PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; +#define glVertexAttribP2uiv glad_glVertexAttribP2uiv +GLAD_API_CALL PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; +#define glVertexAttribP3ui glad_glVertexAttribP3ui +GLAD_API_CALL PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; +#define glVertexAttribP3uiv glad_glVertexAttribP3uiv +GLAD_API_CALL PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; +#define glVertexAttribP4ui glad_glVertexAttribP4ui +GLAD_API_CALL PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; +#define glVertexAttribP4uiv glad_glVertexAttribP4uiv +GLAD_API_CALL PFNGLVERTEXATTRIBPARAMETERIAMDPROC glad_glVertexAttribParameteriAMD; +#define glVertexAttribParameteriAMD glad_glVertexAttribParameteriAMD +GLAD_API_CALL PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; +#define glVertexAttribPointer glad_glVertexAttribPointer +GLAD_API_CALL PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB; +#define glVertexAttribPointerARB glad_glVertexAttribPointerARB +GLAD_API_CALL PFNGLVERTEXATTRIBPOINTERNVPROC glad_glVertexAttribPointerNV; +#define glVertexAttribPointerNV glad_glVertexAttribPointerNV +GLAD_API_CALL PFNGLVERTEXATTRIBS1DVNVPROC glad_glVertexAttribs1dvNV; +#define glVertexAttribs1dvNV glad_glVertexAttribs1dvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS1FVNVPROC glad_glVertexAttribs1fvNV; +#define glVertexAttribs1fvNV glad_glVertexAttribs1fvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS1HVNVPROC glad_glVertexAttribs1hvNV; +#define glVertexAttribs1hvNV glad_glVertexAttribs1hvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS1SVNVPROC glad_glVertexAttribs1svNV; +#define glVertexAttribs1svNV glad_glVertexAttribs1svNV +GLAD_API_CALL PFNGLVERTEXATTRIBS2DVNVPROC glad_glVertexAttribs2dvNV; +#define glVertexAttribs2dvNV glad_glVertexAttribs2dvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS2FVNVPROC glad_glVertexAttribs2fvNV; +#define glVertexAttribs2fvNV glad_glVertexAttribs2fvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS2HVNVPROC glad_glVertexAttribs2hvNV; +#define glVertexAttribs2hvNV glad_glVertexAttribs2hvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS2SVNVPROC glad_glVertexAttribs2svNV; +#define glVertexAttribs2svNV glad_glVertexAttribs2svNV +GLAD_API_CALL PFNGLVERTEXATTRIBS3DVNVPROC glad_glVertexAttribs3dvNV; +#define glVertexAttribs3dvNV glad_glVertexAttribs3dvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS3FVNVPROC glad_glVertexAttribs3fvNV; +#define glVertexAttribs3fvNV glad_glVertexAttribs3fvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS3HVNVPROC glad_glVertexAttribs3hvNV; +#define glVertexAttribs3hvNV glad_glVertexAttribs3hvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS3SVNVPROC glad_glVertexAttribs3svNV; +#define glVertexAttribs3svNV glad_glVertexAttribs3svNV +GLAD_API_CALL PFNGLVERTEXATTRIBS4DVNVPROC glad_glVertexAttribs4dvNV; +#define glVertexAttribs4dvNV glad_glVertexAttribs4dvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS4FVNVPROC glad_glVertexAttribs4fvNV; +#define glVertexAttribs4fvNV glad_glVertexAttribs4fvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS4HVNVPROC glad_glVertexAttribs4hvNV; +#define glVertexAttribs4hvNV glad_glVertexAttribs4hvNV +GLAD_API_CALL PFNGLVERTEXATTRIBS4SVNVPROC glad_glVertexAttribs4svNV; +#define glVertexAttribs4svNV glad_glVertexAttribs4svNV +GLAD_API_CALL PFNGLVERTEXATTRIBS4UBVNVPROC glad_glVertexAttribs4ubvNV; +#define glVertexAttribs4ubvNV glad_glVertexAttribs4ubvNV +GLAD_API_CALL PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; +#define glVertexBindingDivisor glad_glVertexBindingDivisor +GLAD_API_CALL PFNGLVERTEXBLENDARBPROC glad_glVertexBlendARB; +#define glVertexBlendARB glad_glVertexBlendARB +GLAD_API_CALL PFNGLVERTEXBLENDENVFATIPROC glad_glVertexBlendEnvfATI; +#define glVertexBlendEnvfATI glad_glVertexBlendEnvfATI +GLAD_API_CALL PFNGLVERTEXBLENDENVIATIPROC glad_glVertexBlendEnviATI; +#define glVertexBlendEnviATI glad_glVertexBlendEnviATI +GLAD_API_CALL PFNGLVERTEXFORMATNVPROC glad_glVertexFormatNV; +#define glVertexFormatNV glad_glVertexFormatNV +GLAD_API_CALL PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT; +#define glVertexPointerEXT glad_glVertexPointerEXT +GLAD_API_CALL PFNGLVERTEXPOINTERLISTIBMPROC glad_glVertexPointerListIBM; +#define glVertexPointerListIBM glad_glVertexPointerListIBM +GLAD_API_CALL PFNGLVERTEXPOINTERVINTELPROC glad_glVertexPointervINTEL; +#define glVertexPointervINTEL glad_glVertexPointervINTEL +GLAD_API_CALL PFNGLVERTEXSTREAM1DATIPROC glad_glVertexStream1dATI; +#define glVertexStream1dATI glad_glVertexStream1dATI +GLAD_API_CALL PFNGLVERTEXSTREAM1DVATIPROC glad_glVertexStream1dvATI; +#define glVertexStream1dvATI glad_glVertexStream1dvATI +GLAD_API_CALL PFNGLVERTEXSTREAM1FATIPROC glad_glVertexStream1fATI; +#define glVertexStream1fATI glad_glVertexStream1fATI +GLAD_API_CALL PFNGLVERTEXSTREAM1FVATIPROC glad_glVertexStream1fvATI; +#define glVertexStream1fvATI glad_glVertexStream1fvATI +GLAD_API_CALL PFNGLVERTEXSTREAM1IATIPROC glad_glVertexStream1iATI; +#define glVertexStream1iATI glad_glVertexStream1iATI +GLAD_API_CALL PFNGLVERTEXSTREAM1IVATIPROC glad_glVertexStream1ivATI; +#define glVertexStream1ivATI glad_glVertexStream1ivATI +GLAD_API_CALL PFNGLVERTEXSTREAM1SATIPROC glad_glVertexStream1sATI; +#define glVertexStream1sATI glad_glVertexStream1sATI +GLAD_API_CALL PFNGLVERTEXSTREAM1SVATIPROC glad_glVertexStream1svATI; +#define glVertexStream1svATI glad_glVertexStream1svATI +GLAD_API_CALL PFNGLVERTEXSTREAM2DATIPROC glad_glVertexStream2dATI; +#define glVertexStream2dATI glad_glVertexStream2dATI +GLAD_API_CALL PFNGLVERTEXSTREAM2DVATIPROC glad_glVertexStream2dvATI; +#define glVertexStream2dvATI glad_glVertexStream2dvATI +GLAD_API_CALL PFNGLVERTEXSTREAM2FATIPROC glad_glVertexStream2fATI; +#define glVertexStream2fATI glad_glVertexStream2fATI +GLAD_API_CALL PFNGLVERTEXSTREAM2FVATIPROC glad_glVertexStream2fvATI; +#define glVertexStream2fvATI glad_glVertexStream2fvATI +GLAD_API_CALL PFNGLVERTEXSTREAM2IATIPROC glad_glVertexStream2iATI; +#define glVertexStream2iATI glad_glVertexStream2iATI +GLAD_API_CALL PFNGLVERTEXSTREAM2IVATIPROC glad_glVertexStream2ivATI; +#define glVertexStream2ivATI glad_glVertexStream2ivATI +GLAD_API_CALL PFNGLVERTEXSTREAM2SATIPROC glad_glVertexStream2sATI; +#define glVertexStream2sATI glad_glVertexStream2sATI +GLAD_API_CALL PFNGLVERTEXSTREAM2SVATIPROC glad_glVertexStream2svATI; +#define glVertexStream2svATI glad_glVertexStream2svATI +GLAD_API_CALL PFNGLVERTEXSTREAM3DATIPROC glad_glVertexStream3dATI; +#define glVertexStream3dATI glad_glVertexStream3dATI +GLAD_API_CALL PFNGLVERTEXSTREAM3DVATIPROC glad_glVertexStream3dvATI; +#define glVertexStream3dvATI glad_glVertexStream3dvATI +GLAD_API_CALL PFNGLVERTEXSTREAM3FATIPROC glad_glVertexStream3fATI; +#define glVertexStream3fATI glad_glVertexStream3fATI +GLAD_API_CALL PFNGLVERTEXSTREAM3FVATIPROC glad_glVertexStream3fvATI; +#define glVertexStream3fvATI glad_glVertexStream3fvATI +GLAD_API_CALL PFNGLVERTEXSTREAM3IATIPROC glad_glVertexStream3iATI; +#define glVertexStream3iATI glad_glVertexStream3iATI +GLAD_API_CALL PFNGLVERTEXSTREAM3IVATIPROC glad_glVertexStream3ivATI; +#define glVertexStream3ivATI glad_glVertexStream3ivATI +GLAD_API_CALL PFNGLVERTEXSTREAM3SATIPROC glad_glVertexStream3sATI; +#define glVertexStream3sATI glad_glVertexStream3sATI +GLAD_API_CALL PFNGLVERTEXSTREAM3SVATIPROC glad_glVertexStream3svATI; +#define glVertexStream3svATI glad_glVertexStream3svATI +GLAD_API_CALL PFNGLVERTEXSTREAM4DATIPROC glad_glVertexStream4dATI; +#define glVertexStream4dATI glad_glVertexStream4dATI +GLAD_API_CALL PFNGLVERTEXSTREAM4DVATIPROC glad_glVertexStream4dvATI; +#define glVertexStream4dvATI glad_glVertexStream4dvATI +GLAD_API_CALL PFNGLVERTEXSTREAM4FATIPROC glad_glVertexStream4fATI; +#define glVertexStream4fATI glad_glVertexStream4fATI +GLAD_API_CALL PFNGLVERTEXSTREAM4FVATIPROC glad_glVertexStream4fvATI; +#define glVertexStream4fvATI glad_glVertexStream4fvATI +GLAD_API_CALL PFNGLVERTEXSTREAM4IATIPROC glad_glVertexStream4iATI; +#define glVertexStream4iATI glad_glVertexStream4iATI +GLAD_API_CALL PFNGLVERTEXSTREAM4IVATIPROC glad_glVertexStream4ivATI; +#define glVertexStream4ivATI glad_glVertexStream4ivATI +GLAD_API_CALL PFNGLVERTEXSTREAM4SATIPROC glad_glVertexStream4sATI; +#define glVertexStream4sATI glad_glVertexStream4sATI +GLAD_API_CALL PFNGLVERTEXSTREAM4SVATIPROC glad_glVertexStream4svATI; +#define glVertexStream4svATI glad_glVertexStream4svATI +GLAD_API_CALL PFNGLVERTEXWEIGHTPOINTEREXTPROC glad_glVertexWeightPointerEXT; +#define glVertexWeightPointerEXT glad_glVertexWeightPointerEXT +GLAD_API_CALL PFNGLVERTEXWEIGHTFEXTPROC glad_glVertexWeightfEXT; +#define glVertexWeightfEXT glad_glVertexWeightfEXT +GLAD_API_CALL PFNGLVERTEXWEIGHTFVEXTPROC glad_glVertexWeightfvEXT; +#define glVertexWeightfvEXT glad_glVertexWeightfvEXT +GLAD_API_CALL PFNGLVERTEXWEIGHTHNVPROC glad_glVertexWeighthNV; +#define glVertexWeighthNV glad_glVertexWeighthNV +GLAD_API_CALL PFNGLVERTEXWEIGHTHVNVPROC glad_glVertexWeighthvNV; +#define glVertexWeighthvNV glad_glVertexWeighthvNV +GLAD_API_CALL PFNGLVIDEOCAPTURENVPROC glad_glVideoCaptureNV; +#define glVideoCaptureNV glad_glVideoCaptureNV +GLAD_API_CALL PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC glad_glVideoCaptureStreamParameterdvNV; +#define glVideoCaptureStreamParameterdvNV glad_glVideoCaptureStreamParameterdvNV +GLAD_API_CALL PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC glad_glVideoCaptureStreamParameterfvNV; +#define glVideoCaptureStreamParameterfvNV glad_glVideoCaptureStreamParameterfvNV +GLAD_API_CALL PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC glad_glVideoCaptureStreamParameterivNV; +#define glVideoCaptureStreamParameterivNV glad_glVideoCaptureStreamParameterivNV +GLAD_API_CALL PFNGLVIEWPORTPROC glad_glViewport; +#define glViewport glad_glViewport +GLAD_API_CALL PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv; +#define glViewportArrayv glad_glViewportArrayv +GLAD_API_CALL PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf; +#define glViewportIndexedf glad_glViewportIndexedf +GLAD_API_CALL PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv; +#define glViewportIndexedfv glad_glViewportIndexedfv +GLAD_API_CALL PFNGLVIEWPORTPOSITIONWSCALENVPROC glad_glViewportPositionWScaleNV; +#define glViewportPositionWScaleNV glad_glViewportPositionWScaleNV +GLAD_API_CALL PFNGLVIEWPORTSWIZZLENVPROC glad_glViewportSwizzleNV; +#define glViewportSwizzleNV glad_glViewportSwizzleNV +GLAD_API_CALL PFNGLWAITSEMAPHOREEXTPROC glad_glWaitSemaphoreEXT; +#define glWaitSemaphoreEXT glad_glWaitSemaphoreEXT +GLAD_API_CALL PFNGLWAITSEMAPHOREUI64NVXPROC glad_glWaitSemaphoreui64NVX; +#define glWaitSemaphoreui64NVX glad_glWaitSemaphoreui64NVX +GLAD_API_CALL PFNGLWAITSYNCPROC glad_glWaitSync; +#define glWaitSync glad_glWaitSync +GLAD_API_CALL PFNGLWAITVKSEMAPHORENVPROC glad_glWaitVkSemaphoreNV; +#define glWaitVkSemaphoreNV glad_glWaitVkSemaphoreNV +GLAD_API_CALL PFNGLWEIGHTPATHSNVPROC glad_glWeightPathsNV; +#define glWeightPathsNV glad_glWeightPathsNV +GLAD_API_CALL PFNGLWEIGHTPOINTERARBPROC glad_glWeightPointerARB; +#define glWeightPointerARB glad_glWeightPointerARB +GLAD_API_CALL PFNGLWEIGHTBVARBPROC glad_glWeightbvARB; +#define glWeightbvARB glad_glWeightbvARB +GLAD_API_CALL PFNGLWEIGHTDVARBPROC glad_glWeightdvARB; +#define glWeightdvARB glad_glWeightdvARB +GLAD_API_CALL PFNGLWEIGHTFVARBPROC glad_glWeightfvARB; +#define glWeightfvARB glad_glWeightfvARB +GLAD_API_CALL PFNGLWEIGHTIVARBPROC glad_glWeightivARB; +#define glWeightivARB glad_glWeightivARB +GLAD_API_CALL PFNGLWEIGHTSVARBPROC glad_glWeightsvARB; +#define glWeightsvARB glad_glWeightsvARB +GLAD_API_CALL PFNGLWEIGHTUBVARBPROC glad_glWeightubvARB; +#define glWeightubvARB glad_glWeightubvARB +GLAD_API_CALL PFNGLWEIGHTUIVARBPROC glad_glWeightuivARB; +#define glWeightuivARB glad_glWeightuivARB +GLAD_API_CALL PFNGLWEIGHTUSVARBPROC glad_glWeightusvARB; +#define glWeightusvARB glad_glWeightusvARB +GLAD_API_CALL PFNGLWINDOWPOS2DARBPROC glad_glWindowPos2dARB; +#define glWindowPos2dARB glad_glWindowPos2dARB +GLAD_API_CALL PFNGLWINDOWPOS2DMESAPROC glad_glWindowPos2dMESA; +#define glWindowPos2dMESA glad_glWindowPos2dMESA +GLAD_API_CALL PFNGLWINDOWPOS2DVARBPROC glad_glWindowPos2dvARB; +#define glWindowPos2dvARB glad_glWindowPos2dvARB +GLAD_API_CALL PFNGLWINDOWPOS2DVMESAPROC glad_glWindowPos2dvMESA; +#define glWindowPos2dvMESA glad_glWindowPos2dvMESA +GLAD_API_CALL PFNGLWINDOWPOS2FARBPROC glad_glWindowPos2fARB; +#define glWindowPos2fARB glad_glWindowPos2fARB +GLAD_API_CALL PFNGLWINDOWPOS2FMESAPROC glad_glWindowPos2fMESA; +#define glWindowPos2fMESA glad_glWindowPos2fMESA +GLAD_API_CALL PFNGLWINDOWPOS2FVARBPROC glad_glWindowPos2fvARB; +#define glWindowPos2fvARB glad_glWindowPos2fvARB +GLAD_API_CALL PFNGLWINDOWPOS2FVMESAPROC glad_glWindowPos2fvMESA; +#define glWindowPos2fvMESA glad_glWindowPos2fvMESA +GLAD_API_CALL PFNGLWINDOWPOS2IARBPROC glad_glWindowPos2iARB; +#define glWindowPos2iARB glad_glWindowPos2iARB +GLAD_API_CALL PFNGLWINDOWPOS2IMESAPROC glad_glWindowPos2iMESA; +#define glWindowPos2iMESA glad_glWindowPos2iMESA +GLAD_API_CALL PFNGLWINDOWPOS2IVARBPROC glad_glWindowPos2ivARB; +#define glWindowPos2ivARB glad_glWindowPos2ivARB +GLAD_API_CALL PFNGLWINDOWPOS2IVMESAPROC glad_glWindowPos2ivMESA; +#define glWindowPos2ivMESA glad_glWindowPos2ivMESA +GLAD_API_CALL PFNGLWINDOWPOS2SARBPROC glad_glWindowPos2sARB; +#define glWindowPos2sARB glad_glWindowPos2sARB +GLAD_API_CALL PFNGLWINDOWPOS2SMESAPROC glad_glWindowPos2sMESA; +#define glWindowPos2sMESA glad_glWindowPos2sMESA +GLAD_API_CALL PFNGLWINDOWPOS2SVARBPROC glad_glWindowPos2svARB; +#define glWindowPos2svARB glad_glWindowPos2svARB +GLAD_API_CALL PFNGLWINDOWPOS2SVMESAPROC glad_glWindowPos2svMESA; +#define glWindowPos2svMESA glad_glWindowPos2svMESA +GLAD_API_CALL PFNGLWINDOWPOS3DARBPROC glad_glWindowPos3dARB; +#define glWindowPos3dARB glad_glWindowPos3dARB +GLAD_API_CALL PFNGLWINDOWPOS3DMESAPROC glad_glWindowPos3dMESA; +#define glWindowPos3dMESA glad_glWindowPos3dMESA +GLAD_API_CALL PFNGLWINDOWPOS3DVARBPROC glad_glWindowPos3dvARB; +#define glWindowPos3dvARB glad_glWindowPos3dvARB +GLAD_API_CALL PFNGLWINDOWPOS3DVMESAPROC glad_glWindowPos3dvMESA; +#define glWindowPos3dvMESA glad_glWindowPos3dvMESA +GLAD_API_CALL PFNGLWINDOWPOS3FARBPROC glad_glWindowPos3fARB; +#define glWindowPos3fARB glad_glWindowPos3fARB +GLAD_API_CALL PFNGLWINDOWPOS3FMESAPROC glad_glWindowPos3fMESA; +#define glWindowPos3fMESA glad_glWindowPos3fMESA +GLAD_API_CALL PFNGLWINDOWPOS3FVARBPROC glad_glWindowPos3fvARB; +#define glWindowPos3fvARB glad_glWindowPos3fvARB +GLAD_API_CALL PFNGLWINDOWPOS3FVMESAPROC glad_glWindowPos3fvMESA; +#define glWindowPos3fvMESA glad_glWindowPos3fvMESA +GLAD_API_CALL PFNGLWINDOWPOS3IARBPROC glad_glWindowPos3iARB; +#define glWindowPos3iARB glad_glWindowPos3iARB +GLAD_API_CALL PFNGLWINDOWPOS3IMESAPROC glad_glWindowPos3iMESA; +#define glWindowPos3iMESA glad_glWindowPos3iMESA +GLAD_API_CALL PFNGLWINDOWPOS3IVARBPROC glad_glWindowPos3ivARB; +#define glWindowPos3ivARB glad_glWindowPos3ivARB +GLAD_API_CALL PFNGLWINDOWPOS3IVMESAPROC glad_glWindowPos3ivMESA; +#define glWindowPos3ivMESA glad_glWindowPos3ivMESA +GLAD_API_CALL PFNGLWINDOWPOS3SARBPROC glad_glWindowPos3sARB; +#define glWindowPos3sARB glad_glWindowPos3sARB +GLAD_API_CALL PFNGLWINDOWPOS3SMESAPROC glad_glWindowPos3sMESA; +#define glWindowPos3sMESA glad_glWindowPos3sMESA +GLAD_API_CALL PFNGLWINDOWPOS3SVARBPROC glad_glWindowPos3svARB; +#define glWindowPos3svARB glad_glWindowPos3svARB +GLAD_API_CALL PFNGLWINDOWPOS3SVMESAPROC glad_glWindowPos3svMESA; +#define glWindowPos3svMESA glad_glWindowPos3svMESA +GLAD_API_CALL PFNGLWINDOWPOS4DMESAPROC glad_glWindowPos4dMESA; +#define glWindowPos4dMESA glad_glWindowPos4dMESA +GLAD_API_CALL PFNGLWINDOWPOS4DVMESAPROC glad_glWindowPos4dvMESA; +#define glWindowPos4dvMESA glad_glWindowPos4dvMESA +GLAD_API_CALL PFNGLWINDOWPOS4FMESAPROC glad_glWindowPos4fMESA; +#define glWindowPos4fMESA glad_glWindowPos4fMESA +GLAD_API_CALL PFNGLWINDOWPOS4FVMESAPROC glad_glWindowPos4fvMESA; +#define glWindowPos4fvMESA glad_glWindowPos4fvMESA +GLAD_API_CALL PFNGLWINDOWPOS4IMESAPROC glad_glWindowPos4iMESA; +#define glWindowPos4iMESA glad_glWindowPos4iMESA +GLAD_API_CALL PFNGLWINDOWPOS4IVMESAPROC glad_glWindowPos4ivMESA; +#define glWindowPos4ivMESA glad_glWindowPos4ivMESA +GLAD_API_CALL PFNGLWINDOWPOS4SMESAPROC glad_glWindowPos4sMESA; +#define glWindowPos4sMESA glad_glWindowPos4sMESA +GLAD_API_CALL PFNGLWINDOWPOS4SVMESAPROC glad_glWindowPos4svMESA; +#define glWindowPos4svMESA glad_glWindowPos4svMESA +GLAD_API_CALL PFNGLWINDOWRECTANGLESEXTPROC glad_glWindowRectanglesEXT; +#define glWindowRectanglesEXT glad_glWindowRectanglesEXT +GLAD_API_CALL PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT; +#define glWriteMaskEXT glad_glWriteMaskEXT + + + + + +GLAD_API_CALL int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr); +GLAD_API_CALL int gladLoadGL( GLADloadfunc load); + + +#ifdef GLAD_GL + +GLAD_API_CALL int gladLoaderLoadGL(void); +GLAD_API_CALL void gladLoaderUnloadGL(void); + #endif #ifdef __cplusplus } #endif - -#endif \ No newline at end of file +#endif diff --git a/third_party/glad/include/glad/glad_egl.h b/third_party/glad/include/glad/glad_egl.h deleted file mode 100644 index 4f2c56f2..00000000 --- a/third_party/glad/include/glad/glad_egl.h +++ /dev/null @@ -1,1629 +0,0 @@ -/* - - EGL loader generated by glad 0.1.33 on Sun May 3 16:34:53 2020. - - Language/Generator: C/C++ - Specification: egl - APIs: egl=1.5 - Profile: - - Extensions: - EGL_ANDROID_GLES_layers, - EGL_ANDROID_blob_cache, - EGL_ANDROID_create_native_client_buffer, - EGL_ANDROID_framebuffer_target, - EGL_ANDROID_front_buffer_auto_refresh, - EGL_ANDROID_get_frame_timestamps, - EGL_ANDROID_get_native_client_buffer, - EGL_ANDROID_image_native_buffer, - EGL_ANDROID_native_fence_sync, - EGL_ANDROID_presentation_time, - EGL_ANDROID_recordable, - EGL_ANGLE_d3d_share_handle_client_buffer, - EGL_ANGLE_device_d3d, - EGL_ANGLE_query_surface_pointer, - EGL_ANGLE_surface_d3d_texture_2d_share_handle, - EGL_ANGLE_window_fixed_size, - EGL_ARM_image_format, - EGL_ARM_implicit_external_sync, - EGL_ARM_pixmap_multisample_discard, - EGL_EXT_bind_to_front, - EGL_EXT_buffer_age, - EGL_EXT_client_extensions, - EGL_EXT_client_sync, - EGL_EXT_compositor, - EGL_EXT_create_context_robustness, - EGL_EXT_device_base, - EGL_EXT_device_drm, - EGL_EXT_device_enumeration, - EGL_EXT_device_openwf, - EGL_EXT_device_query, - EGL_EXT_gl_colorspace_bt2020_linear, - EGL_EXT_gl_colorspace_bt2020_pq, - EGL_EXT_gl_colorspace_display_p3, - EGL_EXT_gl_colorspace_display_p3_linear, - EGL_EXT_gl_colorspace_display_p3_passthrough, - EGL_EXT_gl_colorspace_scrgb, - EGL_EXT_gl_colorspace_scrgb_linear, - EGL_EXT_image_dma_buf_import, - EGL_EXT_image_dma_buf_import_modifiers, - EGL_EXT_image_gl_colorspace, - EGL_EXT_image_implicit_sync_control, - EGL_EXT_multiview_window, - EGL_EXT_output_base, - EGL_EXT_output_drm, - EGL_EXT_output_openwf, - EGL_EXT_pixel_format_float, - EGL_EXT_platform_base, - EGL_EXT_platform_device, - EGL_EXT_platform_wayland, - EGL_EXT_platform_x11, - EGL_EXT_protected_content, - EGL_EXT_protected_surface, - EGL_EXT_stream_consumer_egloutput, - EGL_EXT_surface_CTA861_3_metadata, - EGL_EXT_surface_SMPTE2086_metadata, - EGL_EXT_swap_buffers_with_damage, - EGL_EXT_sync_reuse, - EGL_EXT_yuv_surface, - EGL_HI_clientpixmap, - EGL_HI_colorformats, - EGL_IMG_context_priority, - EGL_IMG_image_plane_attribs, - EGL_KHR_cl_event, - EGL_KHR_cl_event2, - EGL_KHR_client_get_all_proc_addresses, - EGL_KHR_config_attribs, - EGL_KHR_context_flush_control, - EGL_KHR_create_context, - EGL_KHR_create_context_no_error, - EGL_KHR_debug, - EGL_KHR_display_reference, - EGL_KHR_fence_sync, - EGL_KHR_get_all_proc_addresses, - EGL_KHR_gl_colorspace, - EGL_KHR_gl_renderbuffer_image, - EGL_KHR_gl_texture_2D_image, - EGL_KHR_gl_texture_3D_image, - EGL_KHR_gl_texture_cubemap_image, - EGL_KHR_image, - EGL_KHR_image_base, - EGL_KHR_image_pixmap, - EGL_KHR_lock_surface, - EGL_KHR_lock_surface2, - EGL_KHR_lock_surface3, - EGL_KHR_mutable_render_buffer, - EGL_KHR_no_config_context, - EGL_KHR_partial_update, - EGL_KHR_platform_android, - EGL_KHR_platform_gbm, - EGL_KHR_platform_wayland, - EGL_KHR_platform_x11, - EGL_KHR_reusable_sync, - EGL_KHR_stream, - EGL_KHR_stream_attrib, - EGL_KHR_stream_consumer_gltexture, - EGL_KHR_stream_cross_process_fd, - EGL_KHR_stream_fifo, - EGL_KHR_stream_producer_aldatalocator, - EGL_KHR_stream_producer_eglsurface, - EGL_KHR_surfaceless_context, - EGL_KHR_swap_buffers_with_damage, - EGL_KHR_vg_parent_image, - EGL_KHR_wait_sync, - EGL_MESA_drm_image, - EGL_MESA_image_dma_buf_export, - EGL_MESA_platform_gbm, - EGL_MESA_platform_surfaceless, - EGL_MESA_query_driver, - EGL_NOK_swap_region, - EGL_NOK_swap_region2, - EGL_NOK_texture_from_pixmap, - EGL_NV_3dvision_surface, - EGL_NV_context_priority_realtime, - EGL_NV_coverage_sample, - EGL_NV_coverage_sample_resolve, - EGL_NV_cuda_event, - EGL_NV_depth_nonlinear, - EGL_NV_device_cuda, - EGL_NV_native_query, - EGL_NV_post_convert_rounding, - EGL_NV_post_sub_buffer, - EGL_NV_quadruple_buffer, - EGL_NV_robustness_video_memory_purge, - EGL_NV_stream_consumer_gltexture_yuv, - EGL_NV_stream_cross_display, - EGL_NV_stream_cross_object, - EGL_NV_stream_cross_partition, - EGL_NV_stream_cross_process, - EGL_NV_stream_cross_system, - EGL_NV_stream_dma, - EGL_NV_stream_fifo_next, - EGL_NV_stream_fifo_synchronous, - EGL_NV_stream_flush, - EGL_NV_stream_frame_limits, - EGL_NV_stream_metadata, - EGL_NV_stream_origin, - EGL_NV_stream_remote, - EGL_NV_stream_reset, - EGL_NV_stream_socket, - EGL_NV_stream_socket_inet, - EGL_NV_stream_socket_unix, - EGL_NV_stream_sync, - EGL_NV_sync, - EGL_NV_system_time, - EGL_NV_triple_buffer, - EGL_TIZEN_image_native_buffer, - EGL_TIZEN_image_native_surface, - EGL_WL_bind_wayland_display, - EGL_WL_create_wayland_buffer_from_image - Loader: True - Local files: False - Omit khrplatform: False - Reproducible: False - - Commandline: - --api="egl=1.5" --generator="c" --spec="egl" --extensions="EGL_ANDROID_GLES_layers,EGL_ANDROID_blob_cache,EGL_ANDROID_create_native_client_buffer,EGL_ANDROID_framebuffer_target,EGL_ANDROID_front_buffer_auto_refresh,EGL_ANDROID_get_frame_timestamps,EGL_ANDROID_get_native_client_buffer,EGL_ANDROID_image_native_buffer,EGL_ANDROID_native_fence_sync,EGL_ANDROID_presentation_time,EGL_ANDROID_recordable,EGL_ANGLE_d3d_share_handle_client_buffer,EGL_ANGLE_device_d3d,EGL_ANGLE_query_surface_pointer,EGL_ANGLE_surface_d3d_texture_2d_share_handle,EGL_ANGLE_window_fixed_size,EGL_ARM_image_format,EGL_ARM_implicit_external_sync,EGL_ARM_pixmap_multisample_discard,EGL_EXT_bind_to_front,EGL_EXT_buffer_age,EGL_EXT_client_extensions,EGL_EXT_client_sync,EGL_EXT_compositor,EGL_EXT_create_context_robustness,EGL_EXT_device_base,EGL_EXT_device_drm,EGL_EXT_device_enumeration,EGL_EXT_device_openwf,EGL_EXT_device_query,EGL_EXT_gl_colorspace_bt2020_linear,EGL_EXT_gl_colorspace_bt2020_pq,EGL_EXT_gl_colorspace_display_p3,EGL_EXT_gl_colorspace_display_p3_linear,EGL_EXT_gl_colorspace_display_p3_passthrough,EGL_EXT_gl_colorspace_scrgb,EGL_EXT_gl_colorspace_scrgb_linear,EGL_EXT_image_dma_buf_import,EGL_EXT_image_dma_buf_import_modifiers,EGL_EXT_image_gl_colorspace,EGL_EXT_image_implicit_sync_control,EGL_EXT_multiview_window,EGL_EXT_output_base,EGL_EXT_output_drm,EGL_EXT_output_openwf,EGL_EXT_pixel_format_float,EGL_EXT_platform_base,EGL_EXT_platform_device,EGL_EXT_platform_wayland,EGL_EXT_platform_x11,EGL_EXT_protected_content,EGL_EXT_protected_surface,EGL_EXT_stream_consumer_egloutput,EGL_EXT_surface_CTA861_3_metadata,EGL_EXT_surface_SMPTE2086_metadata,EGL_EXT_swap_buffers_with_damage,EGL_EXT_sync_reuse,EGL_EXT_yuv_surface,EGL_HI_clientpixmap,EGL_HI_colorformats,EGL_IMG_context_priority,EGL_IMG_image_plane_attribs,EGL_KHR_cl_event,EGL_KHR_cl_event2,EGL_KHR_client_get_all_proc_addresses,EGL_KHR_config_attribs,EGL_KHR_context_flush_control,EGL_KHR_create_context,EGL_KHR_create_context_no_error,EGL_KHR_debug,EGL_KHR_display_reference,EGL_KHR_fence_sync,EGL_KHR_get_all_proc_addresses,EGL_KHR_gl_colorspace,EGL_KHR_gl_renderbuffer_image,EGL_KHR_gl_texture_2D_image,EGL_KHR_gl_texture_3D_image,EGL_KHR_gl_texture_cubemap_image,EGL_KHR_image,EGL_KHR_image_base,EGL_KHR_image_pixmap,EGL_KHR_lock_surface,EGL_KHR_lock_surface2,EGL_KHR_lock_surface3,EGL_KHR_mutable_render_buffer,EGL_KHR_no_config_context,EGL_KHR_partial_update,EGL_KHR_platform_android,EGL_KHR_platform_gbm,EGL_KHR_platform_wayland,EGL_KHR_platform_x11,EGL_KHR_reusable_sync,EGL_KHR_stream,EGL_KHR_stream_attrib,EGL_KHR_stream_consumer_gltexture,EGL_KHR_stream_cross_process_fd,EGL_KHR_stream_fifo,EGL_KHR_stream_producer_aldatalocator,EGL_KHR_stream_producer_eglsurface,EGL_KHR_surfaceless_context,EGL_KHR_swap_buffers_with_damage,EGL_KHR_vg_parent_image,EGL_KHR_wait_sync,EGL_MESA_drm_image,EGL_MESA_image_dma_buf_export,EGL_MESA_platform_gbm,EGL_MESA_platform_surfaceless,EGL_MESA_query_driver,EGL_NOK_swap_region,EGL_NOK_swap_region2,EGL_NOK_texture_from_pixmap,EGL_NV_3dvision_surface,EGL_NV_context_priority_realtime,EGL_NV_coverage_sample,EGL_NV_coverage_sample_resolve,EGL_NV_cuda_event,EGL_NV_depth_nonlinear,EGL_NV_device_cuda,EGL_NV_native_query,EGL_NV_post_convert_rounding,EGL_NV_post_sub_buffer,EGL_NV_quadruple_buffer,EGL_NV_robustness_video_memory_purge,EGL_NV_stream_consumer_gltexture_yuv,EGL_NV_stream_cross_display,EGL_NV_stream_cross_object,EGL_NV_stream_cross_partition,EGL_NV_stream_cross_process,EGL_NV_stream_cross_system,EGL_NV_stream_dma,EGL_NV_stream_fifo_next,EGL_NV_stream_fifo_synchronous,EGL_NV_stream_flush,EGL_NV_stream_frame_limits,EGL_NV_stream_metadata,EGL_NV_stream_origin,EGL_NV_stream_remote,EGL_NV_stream_reset,EGL_NV_stream_socket,EGL_NV_stream_socket_inet,EGL_NV_stream_socket_unix,EGL_NV_stream_sync,EGL_NV_sync,EGL_NV_system_time,EGL_NV_triple_buffer,EGL_TIZEN_image_native_buffer,EGL_TIZEN_image_native_surface,EGL_WL_bind_wayland_display,EGL_WL_create_wayland_buffer_from_image" - Online: - Too many extensions -*/ - - -#ifndef __glad_egl_h_ - -#ifdef __egl_h_ -#error EGL header already included, remove this include, glad already provides it -#endif - -#define __glad_egl_h_ -#define __egl_h_ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define APIENTRY __stdcall -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -// ARM drivers are missing EGL_CAST... -#ifndef EGL_CAST -#ifdef __cplusplus -#define EGL_CAST(type, value) static_cast(value) -#else -#define EGL_CAST(type, value) ((type) (value)) -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* (* GLADloadproc)(const char *name); - -GLAPI int gladLoadEGL(void); -GLAPI int gladLoadEGLLoader(GLADloadproc); - -#include -#include - -struct AHardwareBuffer; -struct wl_buffer; -struct wl_display; -struct wl_resource; -typedef unsigned int EGLBoolean; -typedef unsigned int EGLenum; -typedef intptr_t EGLAttribKHR; -typedef intptr_t EGLAttrib; -typedef void *EGLClientBuffer; -typedef void *EGLConfig; -typedef void *EGLContext; -typedef void *EGLDeviceEXT; -typedef void *EGLDisplay; -typedef void *EGLImage; -typedef void *EGLImageKHR; -typedef void *EGLLabelKHR; -typedef void *EGLObjectKHR; -typedef void *EGLOutputLayerEXT; -typedef void *EGLOutputPortEXT; -typedef void *EGLStreamKHR; -typedef void *EGLSurface; -typedef void *EGLSync; -typedef void *EGLSyncKHR; -typedef void *EGLSyncNV; -typedef void (*__eglMustCastToProperFunctionPointerType)(void); -typedef khronos_utime_nanoseconds_t EGLTimeKHR; -typedef khronos_utime_nanoseconds_t EGLTime; -typedef khronos_utime_nanoseconds_t EGLTimeNV; -typedef khronos_utime_nanoseconds_t EGLuint64NV; -typedef khronos_uint64_t EGLuint64KHR; -typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; -typedef int EGLNativeFileDescriptorKHR; -typedef khronos_ssize_t EGLsizeiANDROID; -typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); -typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); -struct EGLClientPixmapHI { - void *pData; - EGLint iWidth; - EGLint iHeight; - EGLint iStride; -}; -typedef void (APIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message); -#define PFNEGLBINDWAYLANDDISPLAYWL PFNEGLBINDWAYLANDDISPLAYWLPROC -#define PFNEGLUNBINDWAYLANDDISPLAYWL PFNEGLUNBINDWAYLANDDISPLAYWLPROC -#define PFNEGLQUERYWAYLANDBUFFERWL PFNEGLQUERYWAYLANDBUFFERWLPROC -#define PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC -#define EGL_ALPHA_SIZE 0x3021 -#define EGL_BAD_ACCESS 0x3002 -#define EGL_BAD_ALLOC 0x3003 -#define EGL_BAD_ATTRIBUTE 0x3004 -#define EGL_BAD_CONFIG 0x3005 -#define EGL_BAD_CONTEXT 0x3006 -#define EGL_BAD_CURRENT_SURFACE 0x3007 -#define EGL_BAD_DISPLAY 0x3008 -#define EGL_BAD_MATCH 0x3009 -#define EGL_BAD_NATIVE_PIXMAP 0x300A -#define EGL_BAD_NATIVE_WINDOW 0x300B -#define EGL_BAD_PARAMETER 0x300C -#define EGL_BAD_SURFACE 0x300D -#define EGL_BLUE_SIZE 0x3022 -#define EGL_BUFFER_SIZE 0x3020 -#define EGL_CONFIG_CAVEAT 0x3027 -#define EGL_CONFIG_ID 0x3028 -#define EGL_CORE_NATIVE_ENGINE 0x305B -#define EGL_DEPTH_SIZE 0x3025 -#define EGL_DONT_CARE EGL_CAST(EGLint,-1) -#define EGL_DRAW 0x3059 -#define EGL_EXTENSIONS 0x3055 -#define EGL_FALSE 0 -#define EGL_GREEN_SIZE 0x3023 -#define EGL_HEIGHT 0x3056 -#define EGL_LARGEST_PBUFFER 0x3058 -#define EGL_LEVEL 0x3029 -#define EGL_MAX_PBUFFER_HEIGHT 0x302A -#define EGL_MAX_PBUFFER_PIXELS 0x302B -#define EGL_MAX_PBUFFER_WIDTH 0x302C -#define EGL_NATIVE_RENDERABLE 0x302D -#define EGL_NATIVE_VISUAL_ID 0x302E -#define EGL_NATIVE_VISUAL_TYPE 0x302F -#define EGL_NONE 0x3038 -#define EGL_NON_CONFORMANT_CONFIG 0x3051 -#define EGL_NOT_INITIALIZED 0x3001 -#define EGL_NO_CONTEXT EGL_CAST(EGLContext,0) -#define EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0) -#define EGL_NO_SURFACE EGL_CAST(EGLSurface,0) -#define EGL_PBUFFER_BIT 0x0001 -#define EGL_PIXMAP_BIT 0x0002 -#define EGL_READ 0x305A -#define EGL_RED_SIZE 0x3024 -#define EGL_SAMPLES 0x3031 -#define EGL_SAMPLE_BUFFERS 0x3032 -#define EGL_SLOW_CONFIG 0x3050 -#define EGL_STENCIL_SIZE 0x3026 -#define EGL_SUCCESS 0x3000 -#define EGL_SURFACE_TYPE 0x3033 -#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 -#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 -#define EGL_TRANSPARENT_RED_VALUE 0x3037 -#define EGL_TRANSPARENT_RGB 0x3052 -#define EGL_TRANSPARENT_TYPE 0x3034 -#define EGL_TRUE 1 -#define EGL_VENDOR 0x3053 -#define EGL_VERSION 0x3054 -#define EGL_WIDTH 0x3057 -#define EGL_WINDOW_BIT 0x0004 -#define EGL_BACK_BUFFER 0x3084 -#define EGL_BIND_TO_TEXTURE_RGB 0x3039 -#define EGL_BIND_TO_TEXTURE_RGBA 0x303A -#define EGL_CONTEXT_LOST 0x300E -#define EGL_MIN_SWAP_INTERVAL 0x303B -#define EGL_MAX_SWAP_INTERVAL 0x303C -#define EGL_MIPMAP_TEXTURE 0x3082 -#define EGL_MIPMAP_LEVEL 0x3083 -#define EGL_NO_TEXTURE 0x305C -#define EGL_TEXTURE_2D 0x305F -#define EGL_TEXTURE_FORMAT 0x3080 -#define EGL_TEXTURE_RGB 0x305D -#define EGL_TEXTURE_RGBA 0x305E -#define EGL_TEXTURE_TARGET 0x3081 -#define EGL_ALPHA_FORMAT 0x3088 -#define EGL_ALPHA_FORMAT_NONPRE 0x308B -#define EGL_ALPHA_FORMAT_PRE 0x308C -#define EGL_ALPHA_MASK_SIZE 0x303E -#define EGL_BUFFER_PRESERVED 0x3094 -#define EGL_BUFFER_DESTROYED 0x3095 -#define EGL_CLIENT_APIS 0x308D -#define EGL_COLORSPACE 0x3087 -#define EGL_COLORSPACE_sRGB 0x3089 -#define EGL_COLORSPACE_LINEAR 0x308A -#define EGL_COLOR_BUFFER_TYPE 0x303F -#define EGL_CONTEXT_CLIENT_TYPE 0x3097 -#define EGL_DISPLAY_SCALING 10000 -#define EGL_HORIZONTAL_RESOLUTION 0x3090 -#define EGL_LUMINANCE_BUFFER 0x308F -#define EGL_LUMINANCE_SIZE 0x303D -#define EGL_OPENGL_ES_BIT 0x0001 -#define EGL_OPENVG_BIT 0x0002 -#define EGL_OPENGL_ES_API 0x30A0 -#define EGL_OPENVG_API 0x30A1 -#define EGL_OPENVG_IMAGE 0x3096 -#define EGL_PIXEL_ASPECT_RATIO 0x3092 -#define EGL_RENDERABLE_TYPE 0x3040 -#define EGL_RENDER_BUFFER 0x3086 -#define EGL_RGB_BUFFER 0x308E -#define EGL_SINGLE_BUFFER 0x3085 -#define EGL_SWAP_BEHAVIOR 0x3093 -#define EGL_UNKNOWN EGL_CAST(EGLint,-1) -#define EGL_VERTICAL_RESOLUTION 0x3091 -#define EGL_CONFORMANT 0x3042 -#define EGL_CONTEXT_CLIENT_VERSION 0x3098 -#define EGL_MATCH_NATIVE_PIXMAP 0x3041 -#define EGL_OPENGL_ES2_BIT 0x0004 -#define EGL_VG_ALPHA_FORMAT 0x3088 -#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B -#define EGL_VG_ALPHA_FORMAT_PRE 0x308C -#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 -#define EGL_VG_COLORSPACE 0x3087 -#define EGL_VG_COLORSPACE_sRGB 0x3089 -#define EGL_VG_COLORSPACE_LINEAR 0x308A -#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 -#define EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0) -#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 -#define EGL_MULTISAMPLE_RESOLVE 0x3099 -#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A -#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B -#define EGL_OPENGL_API 0x30A2 -#define EGL_OPENGL_BIT 0x0008 -#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 -#define EGL_CONTEXT_MAJOR_VERSION 0x3098 -#define EGL_CONTEXT_MINOR_VERSION 0x30FB -#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD -#define EGL_NO_RESET_NOTIFICATION 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 -#define EGL_OPENGL_ES3_BIT 0x00000040 -#define EGL_CL_EVENT_HANDLE 0x309C -#define EGL_SYNC_CL_EVENT 0x30FE -#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 -#define EGL_SYNC_TYPE 0x30F7 -#define EGL_SYNC_STATUS 0x30F1 -#define EGL_SYNC_CONDITION 0x30F8 -#define EGL_SIGNALED 0x30F2 -#define EGL_UNSIGNALED 0x30F3 -#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 -#define EGL_FOREVER 0xFFFFFFFFFFFFFFFF -#define EGL_TIMEOUT_EXPIRED 0x30F5 -#define EGL_CONDITION_SATISFIED 0x30F6 -#define EGL_NO_SYNC EGL_CAST(EGLSync,0) -#define EGL_SYNC_FENCE 0x30F9 -#define EGL_GL_COLORSPACE 0x309D -#define EGL_GL_COLORSPACE_SRGB 0x3089 -#define EGL_GL_COLORSPACE_LINEAR 0x308A -#define EGL_GL_RENDERBUFFER 0x30B9 -#define EGL_GL_TEXTURE_2D 0x30B1 -#define EGL_GL_TEXTURE_LEVEL 0x30BC -#define EGL_GL_TEXTURE_3D 0x30B2 -#define EGL_GL_TEXTURE_ZOFFSET 0x30BD -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 -#define EGL_IMAGE_PRESERVED 0x30D2 -#define EGL_NO_IMAGE EGL_CAST(EGLImage,0) -EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); -EGLBoolean eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); -EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); -EGLSurface eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); -EGLSurface eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); -EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); -EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx); -EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface); -EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); -EGLBoolean eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); -EGLDisplay eglGetCurrentDisplay(void); -EGLSurface eglGetCurrentSurface(EGLint readdraw); -EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id); -EGLint eglGetError(void); -__eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname); -EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor); -EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); -EGLBoolean eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); -const char *eglQueryString(EGLDisplay dpy, EGLint name); -EGLBoolean eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); -EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface surface); -EGLBoolean eglTerminate(EGLDisplay dpy); -EGLBoolean eglWaitGL(void); -EGLBoolean eglWaitNative(EGLint engine); -EGLBoolean eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); -EGLBoolean eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); -EGLBoolean eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); -EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval); -EGLBoolean eglBindAPI(EGLenum api); -EGLenum eglQueryAPI(void); -EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); -EGLBoolean eglReleaseThread(void); -EGLBoolean eglWaitClient(void); -EGLContext eglGetCurrentContext(void); -EGLSync eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); -EGLBoolean eglDestroySync(EGLDisplay dpy, EGLSync sync); -EGLint eglClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); -EGLBoolean eglGetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); -EGLImage eglCreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); -EGLBoolean eglDestroyImage(EGLDisplay dpy, EGLImage image); -EGLDisplay eglGetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list); -EGLSurface eglCreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); -EGLSurface eglCreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); -EGLBoolean eglWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags); -#define EGL_NATIVE_BUFFER_USAGE_ANDROID 0x3143 -#define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID 0x00000001 -#define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID 0x00000002 -#define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID 0x00000004 -#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 -#define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID 0x314C -#define EGL_TIMESTAMP_PENDING_ANDROID EGL_CAST(EGLnsecsANDROID,-2) -#define EGL_TIMESTAMP_INVALID_ANDROID EGL_CAST(EGLnsecsANDROID,-1) -#define EGL_TIMESTAMPS_ANDROID 0x3430 -#define EGL_COMPOSITE_DEADLINE_ANDROID 0x3431 -#define EGL_COMPOSITE_INTERVAL_ANDROID 0x3432 -#define EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID 0x3433 -#define EGL_REQUESTED_PRESENT_TIME_ANDROID 0x3434 -#define EGL_RENDERING_COMPLETE_TIME_ANDROID 0x3435 -#define EGL_COMPOSITION_LATCH_TIME_ANDROID 0x3436 -#define EGL_FIRST_COMPOSITION_START_TIME_ANDROID 0x3437 -#define EGL_LAST_COMPOSITION_START_TIME_ANDROID 0x3438 -#define EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID 0x3439 -#define EGL_DISPLAY_PRESENT_TIME_ANDROID 0x343A -#define EGL_DEQUEUE_READY_TIME_ANDROID 0x343B -#define EGL_READS_DONE_TIME_ANDROID 0x343C -#define EGL_NATIVE_BUFFER_ANDROID 0x3140 -#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 -#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 -#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 -#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 -#define EGL_RECORDABLE_ANDROID 0x3142 -#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 -#define EGL_D3D9_DEVICE_ANGLE 0x33A0 -#define EGL_D3D11_DEVICE_ANGLE 0x33A1 -#define EGL_FIXED_SIZE_ANGLE 0x3201 -#define EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM 0x3287 -#define EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM 0x3288 -#define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A -#define EGL_DISCARD_SAMPLES_ARM 0x3286 -#define EGL_FRONT_BUFFER_EXT 0x3464 -#define EGL_BUFFER_AGE_EXT 0x313D -#define EGL_SYNC_CLIENT_EXT 0x3364 -#define EGL_SYNC_CLIENT_SIGNAL_EXT 0x3365 -#define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460 -#define EGL_EXTERNAL_REF_ID_EXT 0x3461 -#define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462 -#define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 -#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF -#define EGL_NO_DEVICE_EXT EGL_CAST(EGLDeviceEXT,0) -#define EGL_BAD_DEVICE_EXT 0x322B -#define EGL_DEVICE_EXT 0x322C -#define EGL_DRM_DEVICE_FILE_EXT 0x3233 -#define EGL_DRM_MASTER_FD_EXT 0x333C -#define EGL_OPENWF_DEVICE_ID_EXT 0x3237 -#define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F -#define EGL_GL_COLORSPACE_BT2020_PQ_EXT 0x3340 -#define EGL_GL_COLORSPACE_DISPLAY_P3_EXT 0x3363 -#define EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT 0x3362 -#define EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT 0x3490 -#define EGL_GL_COLORSPACE_SCRGB_EXT 0x3351 -#define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT 0x3350 -#define EGL_LINUX_DMA_BUF_EXT 0x3270 -#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 -#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 -#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 -#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 -#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 -#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 -#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 -#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 -#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 -#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A -#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B -#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C -#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D -#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E -#define EGL_ITU_REC601_EXT 0x327F -#define EGL_ITU_REC709_EXT 0x3280 -#define EGL_ITU_REC2020_EXT 0x3281 -#define EGL_YUV_FULL_RANGE_EXT 0x3282 -#define EGL_YUV_NARROW_RANGE_EXT 0x3283 -#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 -#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 -#define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440 -#define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441 -#define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442 -#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443 -#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444 -#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445 -#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446 -#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447 -#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448 -#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449 -#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A -#define EGL_GL_COLORSPACE_DEFAULT_EXT 0x314D -#define EGL_IMPORT_SYNC_TYPE_EXT 0x3470 -#define EGL_IMPORT_IMPLICIT_SYNC_EXT 0x3471 -#define EGL_IMPORT_EXPLICIT_SYNC_EXT 0x3472 -#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 -#define EGL_NO_OUTPUT_LAYER_EXT EGL_CAST(EGLOutputLayerEXT,0) -#define EGL_NO_OUTPUT_PORT_EXT EGL_CAST(EGLOutputPortEXT,0) -#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D -#define EGL_BAD_OUTPUT_PORT_EXT 0x322E -#define EGL_SWAP_INTERVAL_EXT 0x322F -#define EGL_DRM_CRTC_EXT 0x3234 -#define EGL_DRM_PLANE_EXT 0x3235 -#define EGL_DRM_CONNECTOR_EXT 0x3236 -#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 -#define EGL_OPENWF_PORT_ID_EXT 0x3239 -#define EGL_COLOR_COMPONENT_TYPE_EXT 0x3339 -#define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT 0x333A -#define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT 0x333B -#define EGL_PLATFORM_DEVICE_EXT 0x313F -#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 -#define EGL_PLATFORM_X11_EXT 0x31D5 -#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 -#define EGL_PROTECTED_CONTENT_EXT 0x32C0 -#define EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT 0x3360 -#define EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT 0x3361 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT 0x3341 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT 0x3342 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT 0x3343 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT 0x3344 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT 0x3345 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT 0x3346 -#define EGL_SMPTE2086_WHITE_POINT_X_EXT 0x3347 -#define EGL_SMPTE2086_WHITE_POINT_Y_EXT 0x3348 -#define EGL_SMPTE2086_MAX_LUMINANCE_EXT 0x3349 -#define EGL_SMPTE2086_MIN_LUMINANCE_EXT 0x334A -#define EGL_METADATA_SCALING_EXT 50000 -#define EGL_YUV_ORDER_EXT 0x3301 -#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 -#define EGL_YUV_SUBSAMPLE_EXT 0x3312 -#define EGL_YUV_DEPTH_RANGE_EXT 0x3317 -#define EGL_YUV_CSC_STANDARD_EXT 0x330A -#define EGL_YUV_PLANE_BPP_EXT 0x331A -#define EGL_YUV_BUFFER_EXT 0x3300 -#define EGL_YUV_ORDER_YUV_EXT 0x3302 -#define EGL_YUV_ORDER_YVU_EXT 0x3303 -#define EGL_YUV_ORDER_YUYV_EXT 0x3304 -#define EGL_YUV_ORDER_UYVY_EXT 0x3305 -#define EGL_YUV_ORDER_YVYU_EXT 0x3306 -#define EGL_YUV_ORDER_VYUY_EXT 0x3307 -#define EGL_YUV_ORDER_AYUV_EXT 0x3308 -#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 -#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 -#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 -#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 -#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 -#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B -#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C -#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D -#define EGL_YUV_PLANE_BPP_0_EXT 0x331B -#define EGL_YUV_PLANE_BPP_8_EXT 0x331C -#define EGL_YUV_PLANE_BPP_10_EXT 0x331D -#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 -#define EGL_COLOR_FORMAT_HI 0x8F70 -#define EGL_COLOR_RGB_HI 0x8F71 -#define EGL_COLOR_RGBA_HI 0x8F72 -#define EGL_COLOR_ARGB_HI 0x8F73 -#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 -#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 -#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 -#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 -#define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG 0x3105 -#define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG 0x3106 -#define EGL_CL_EVENT_HANDLE_KHR 0x309C -#define EGL_SYNC_CL_EVENT_KHR 0x30FE -#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF -#define EGL_CONFORMANT_KHR 0x3042 -#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 -#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 -#define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 -#define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 -#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 -#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 -#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB -#define EGL_CONTEXT_FLAGS_KHR 0x30FC -#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD -#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF -#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 -#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 -#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 -#define EGL_OBJECT_THREAD_KHR 0x33B0 -#define EGL_OBJECT_DISPLAY_KHR 0x33B1 -#define EGL_OBJECT_CONTEXT_KHR 0x33B2 -#define EGL_OBJECT_SURFACE_KHR 0x33B3 -#define EGL_OBJECT_IMAGE_KHR 0x33B4 -#define EGL_OBJECT_SYNC_KHR 0x33B5 -#define EGL_OBJECT_STREAM_KHR 0x33B6 -#define EGL_DEBUG_MSG_CRITICAL_KHR 0x33B9 -#define EGL_DEBUG_MSG_ERROR_KHR 0x33BA -#define EGL_DEBUG_MSG_WARN_KHR 0x33BB -#define EGL_DEBUG_MSG_INFO_KHR 0x33BC -#define EGL_DEBUG_CALLBACK_KHR 0x33B8 -#define EGL_TRACK_REFERENCES_KHR 0x3352 -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 -#define EGL_SYNC_CONDITION_KHR 0x30F8 -#define EGL_SYNC_FENCE_KHR 0x30F9 -#define EGL_GL_COLORSPACE_KHR 0x309D -#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 -#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A -#define EGL_GL_RENDERBUFFER_KHR 0x30B9 -#define EGL_GL_TEXTURE_2D_KHR 0x30B1 -#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC -#define EGL_GL_TEXTURE_3D_KHR 0x30B2 -#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 -#define EGL_NATIVE_PIXMAP_KHR 0x30B0 -#define EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0) -#define EGL_IMAGE_PRESERVED_KHR 0x30D2 -#define EGL_READ_SURFACE_BIT_KHR 0x0001 -#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 -#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 -#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 -#define EGL_MATCH_FORMAT_KHR 0x3043 -#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 -#define EGL_FORMAT_RGB_565_KHR 0x30C1 -#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 -#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 -#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 -#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 -#define EGL_BITMAP_POINTER_KHR 0x30C6 -#define EGL_BITMAP_PITCH_KHR 0x30C7 -#define EGL_BITMAP_ORIGIN_KHR 0x30C8 -#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 -#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA -#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB -#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC -#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD -#define EGL_LOWER_LEFT_KHR 0x30CE -#define EGL_UPPER_LEFT_KHR 0x30CF -#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 -#define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 0x1000 -#define EGL_NO_CONFIG_KHR EGL_CAST(EGLConfig,0) -#define EGL_BUFFER_AGE_KHR 0x313D -#define EGL_PLATFORM_ANDROID_KHR 0x3141 -#define EGL_PLATFORM_GBM_KHR 0x31D7 -#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 -#define EGL_PLATFORM_X11_KHR 0x31D5 -#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 -#define EGL_SYNC_STATUS_KHR 0x30F1 -#define EGL_SIGNALED_KHR 0x30F2 -#define EGL_UNSIGNALED_KHR 0x30F3 -#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 -#define EGL_CONDITION_SATISFIED_KHR 0x30F6 -#define EGL_SYNC_TYPE_KHR 0x30F7 -#define EGL_SYNC_REUSABLE_KHR 0x30FA -#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 -#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFF -#define EGL_NO_SYNC_KHR EGL_CAST(EGLSyncKHR,0) -#define EGL_NO_STREAM_KHR EGL_CAST(EGLStreamKHR,0) -#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 -#define EGL_PRODUCER_FRAME_KHR 0x3212 -#define EGL_CONSUMER_FRAME_KHR 0x3213 -#define EGL_STREAM_STATE_KHR 0x3214 -#define EGL_STREAM_STATE_CREATED_KHR 0x3215 -#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 -#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 -#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 -#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 -#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A -#define EGL_BAD_STREAM_KHR 0x321B -#define EGL_BAD_STATE_KHR 0x321C -#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E -#define EGL_NO_FILE_DESCRIPTOR_KHR EGL_CAST(EGLNativeFileDescriptorKHR,-1) -#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC -#define EGL_STREAM_TIME_NOW_KHR 0x31FD -#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE -#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF -#define EGL_STREAM_BIT_KHR 0x0800 -#define EGL_VG_PARENT_IMAGE_KHR 0x30BA -#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 -#define EGL_DRM_BUFFER_USE_MESA 0x31D1 -#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 -#define EGL_DRM_BUFFER_MESA 0x31D3 -#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 -#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 -#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 -#define EGL_DRM_BUFFER_USE_CURSOR_MESA 0x00000004 -#define EGL_PLATFORM_GBM_MESA 0x31D7 -#define EGL_PLATFORM_SURFACELESS_MESA 0x31DD -#define EGL_Y_INVERTED_NOK 0x307F -#define EGL_AUTO_STEREO_NV 0x3136 -#define EGL_CONTEXT_PRIORITY_REALTIME_NV 0x3357 -#define EGL_COVERAGE_BUFFERS_NV 0x30E0 -#define EGL_COVERAGE_SAMPLES_NV 0x30E1 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 -#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 -#define EGL_CUDA_EVENT_HANDLE_NV 0x323B -#define EGL_SYNC_CUDA_EVENT_NV 0x323C -#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D -#define EGL_DEPTH_ENCODING_NV 0x30E2 -#define EGL_DEPTH_ENCODING_NONE_NV 0 -#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 -#define EGL_CUDA_DEVICE_NV 0x323A -#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE -#define EGL_QUADRUPLE_BUFFER_NV 0x3231 -#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C -#define EGL_YUV_PLANE0_TEXTURE_UNIT_NV 0x332C -#define EGL_YUV_PLANE1_TEXTURE_UNIT_NV 0x332D -#define EGL_YUV_PLANE2_TEXTURE_UNIT_NV 0x332E -#define EGL_STREAM_CROSS_DISPLAY_NV 0x334E -#define EGL_STREAM_CROSS_OBJECT_NV 0x334D -#define EGL_STREAM_CROSS_PARTITION_NV 0x323F -#define EGL_STREAM_CROSS_PROCESS_NV 0x3245 -#define EGL_STREAM_CROSS_SYSTEM_NV 0x334F -#define EGL_STREAM_DMA_NV 0x3371 -#define EGL_STREAM_DMA_SERVER_NV 0x3372 -#define EGL_PENDING_FRAME_NV 0x3329 -#define EGL_STREAM_TIME_PENDING_NV 0x332A -#define EGL_STREAM_FIFO_SYNCHRONOUS_NV 0x3336 -#define EGL_PRODUCER_MAX_FRAME_HINT_NV 0x3337 -#define EGL_CONSUMER_MAX_FRAME_HINT_NV 0x3338 -#define EGL_MAX_STREAM_METADATA_BLOCKS_NV 0x3250 -#define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV 0x3251 -#define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV 0x3252 -#define EGL_PRODUCER_METADATA_NV 0x3253 -#define EGL_CONSUMER_METADATA_NV 0x3254 -#define EGL_PENDING_METADATA_NV 0x3328 -#define EGL_METADATA0_SIZE_NV 0x3255 -#define EGL_METADATA1_SIZE_NV 0x3256 -#define EGL_METADATA2_SIZE_NV 0x3257 -#define EGL_METADATA3_SIZE_NV 0x3258 -#define EGL_METADATA0_TYPE_NV 0x3259 -#define EGL_METADATA1_TYPE_NV 0x325A -#define EGL_METADATA2_TYPE_NV 0x325B -#define EGL_METADATA3_TYPE_NV 0x325C -#define EGL_STREAM_FRAME_ORIGIN_X_NV 0x3366 -#define EGL_STREAM_FRAME_ORIGIN_Y_NV 0x3367 -#define EGL_STREAM_FRAME_MAJOR_AXIS_NV 0x3368 -#define EGL_CONSUMER_AUTO_ORIENTATION_NV 0x3369 -#define EGL_PRODUCER_AUTO_ORIENTATION_NV 0x336A -#define EGL_LEFT_NV 0x336B -#define EGL_RIGHT_NV 0x336C -#define EGL_TOP_NV 0x336D -#define EGL_BOTTOM_NV 0x336E -#define EGL_X_AXIS_NV 0x336F -#define EGL_Y_AXIS_NV 0x3370 -#define EGL_STREAM_STATE_INITIALIZING_NV 0x3240 -#define EGL_STREAM_TYPE_NV 0x3241 -#define EGL_STREAM_PROTOCOL_NV 0x3242 -#define EGL_STREAM_ENDPOINT_NV 0x3243 -#define EGL_STREAM_LOCAL_NV 0x3244 -#define EGL_STREAM_PRODUCER_NV 0x3247 -#define EGL_STREAM_CONSUMER_NV 0x3248 -#define EGL_STREAM_PROTOCOL_FD_NV 0x3246 -#define EGL_SUPPORT_RESET_NV 0x3334 -#define EGL_SUPPORT_REUSE_NV 0x3335 -#define EGL_STREAM_PROTOCOL_SOCKET_NV 0x324B -#define EGL_SOCKET_HANDLE_NV 0x324C -#define EGL_SOCKET_TYPE_NV 0x324D -#define EGL_SOCKET_TYPE_INET_NV 0x324F -#define EGL_SOCKET_TYPE_UNIX_NV 0x324E -#define EGL_SYNC_NEW_FRAME_NV 0x321F -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 -#define EGL_SYNC_STATUS_NV 0x30E7 -#define EGL_SIGNALED_NV 0x30E8 -#define EGL_UNSIGNALED_NV 0x30E9 -#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 -#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFF -#define EGL_ALREADY_SIGNALED_NV 0x30EA -#define EGL_TIMEOUT_EXPIRED_NV 0x30EB -#define EGL_CONDITION_SATISFIED_NV 0x30EC -#define EGL_SYNC_TYPE_NV 0x30ED -#define EGL_SYNC_CONDITION_NV 0x30EE -#define EGL_SYNC_FENCE_NV 0x30EF -#define EGL_NO_SYNC_NV EGL_CAST(EGLSyncNV,0) -#define EGL_TRIPLE_BUFFER_NV 0x3230 -#define EGL_NATIVE_BUFFER_TIZEN 0x32A0 -#define EGL_NATIVE_SURFACE_TIZEN 0x32A1 -#define EGL_WAYLAND_BUFFER_WL 0x31D5 -#define EGL_WAYLAND_PLANE_WL 0x31D6 -#define EGL_TEXTURE_Y_U_V_WL 0x31D7 -#define EGL_TEXTURE_Y_UV_WL 0x31D8 -#define EGL_TEXTURE_Y_XUXV_WL 0x31D9 -#define EGL_TEXTURE_EXTERNAL_WL 0x31DA -#define EGL_WAYLAND_Y_INVERTED_WL 0x31DB -#ifndef EGL_ANDROID_GLES_layers -#define EGL_ANDROID_GLES_layers 1 -#endif -#ifndef EGL_ANDROID_blob_cache -#define EGL_ANDROID_blob_cache 1 -typedef void (APIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC)(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -GLAPI PFNEGLSETBLOBCACHEFUNCSANDROIDPROC glad_eglSetBlobCacheFuncsANDROID; -#define eglSetBlobCacheFuncsANDROID glad_eglSetBlobCacheFuncsANDROID -#endif -#ifndef EGL_ANDROID_create_native_client_buffer -#define EGL_ANDROID_create_native_client_buffer 1 -typedef EGLClientBuffer (APIENTRYP PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC)(const EGLint *attrib_list); -GLAPI PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC glad_eglCreateNativeClientBufferANDROID; -#define eglCreateNativeClientBufferANDROID glad_eglCreateNativeClientBufferANDROID -#endif -#ifndef EGL_ANDROID_framebuffer_target -#define EGL_ANDROID_framebuffer_target 1 -#endif -#ifndef EGL_ANDROID_front_buffer_auto_refresh -#define EGL_ANDROID_front_buffer_auto_refresh 1 -#endif -#ifndef EGL_ANDROID_get_frame_timestamps -#define EGL_ANDROID_get_frame_timestamps 1 -typedef EGLBoolean (APIENTRYP PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC)(EGLDisplay dpy, EGLSurface surface, EGLint name); -GLAPI PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC glad_eglGetCompositorTimingSupportedANDROID; -#define eglGetCompositorTimingSupportedANDROID glad_eglGetCompositorTimingSupportedANDROID -typedef EGLBoolean (APIENTRYP PFNEGLGETCOMPOSITORTIMINGANDROIDPROC)(EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values); -GLAPI PFNEGLGETCOMPOSITORTIMINGANDROIDPROC glad_eglGetCompositorTimingANDROID; -#define eglGetCompositorTimingANDROID glad_eglGetCompositorTimingANDROID -typedef EGLBoolean (APIENTRYP PFNEGLGETNEXTFRAMEIDANDROIDPROC)(EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId); -GLAPI PFNEGLGETNEXTFRAMEIDANDROIDPROC glad_eglGetNextFrameIdANDROID; -#define eglGetNextFrameIdANDROID glad_eglGetNextFrameIdANDROID -typedef EGLBoolean (APIENTRYP PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC)(EGLDisplay dpy, EGLSurface surface, EGLint timestamp); -GLAPI PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC glad_eglGetFrameTimestampSupportedANDROID; -#define eglGetFrameTimestampSupportedANDROID glad_eglGetFrameTimestampSupportedANDROID -typedef EGLBoolean (APIENTRYP PFNEGLGETFRAMETIMESTAMPSANDROIDPROC)(EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values); -GLAPI PFNEGLGETFRAMETIMESTAMPSANDROIDPROC glad_eglGetFrameTimestampsANDROID; -#define eglGetFrameTimestampsANDROID glad_eglGetFrameTimestampsANDROID -#endif -#ifndef EGL_ANDROID_get_native_client_buffer -#define EGL_ANDROID_get_native_client_buffer 1 -typedef EGLClientBuffer (APIENTRYP PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC)(const struct AHardwareBuffer *buffer); -GLAPI PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC glad_eglGetNativeClientBufferANDROID; -#define eglGetNativeClientBufferANDROID glad_eglGetNativeClientBufferANDROID -#endif -#ifndef EGL_ANDROID_image_native_buffer -#define EGL_ANDROID_image_native_buffer 1 -#endif -#ifndef EGL_ANDROID_native_fence_sync -#define EGL_ANDROID_native_fence_sync 1 -typedef EGLint (APIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC)(EGLDisplay dpy, EGLSyncKHR sync); -GLAPI PFNEGLDUPNATIVEFENCEFDANDROIDPROC glad_eglDupNativeFenceFDANDROID; -#define eglDupNativeFenceFDANDROID glad_eglDupNativeFenceFDANDROID -#endif -#ifndef EGL_ANDROID_presentation_time -#define EGL_ANDROID_presentation_time 1 -typedef EGLBoolean (APIENTRYP PFNEGLPRESENTATIONTIMEANDROIDPROC)(EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time); -GLAPI PFNEGLPRESENTATIONTIMEANDROIDPROC glad_eglPresentationTimeANDROID; -#define eglPresentationTimeANDROID glad_eglPresentationTimeANDROID -#endif -#ifndef EGL_ANDROID_recordable -#define EGL_ANDROID_recordable 1 -#endif -#ifndef EGL_ANGLE_d3d_share_handle_client_buffer -#define EGL_ANGLE_d3d_share_handle_client_buffer 1 -#endif -#ifndef EGL_ANGLE_device_d3d -#define EGL_ANGLE_device_d3d 1 -#endif -#ifndef EGL_ANGLE_query_surface_pointer -#define EGL_ANGLE_query_surface_pointer 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -GLAPI PFNEGLQUERYSURFACEPOINTERANGLEPROC glad_eglQuerySurfacePointerANGLE; -#define eglQuerySurfacePointerANGLE glad_eglQuerySurfacePointerANGLE -#endif -#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle -#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 -#endif -#ifndef EGL_ANGLE_window_fixed_size -#define EGL_ANGLE_window_fixed_size 1 -#endif -#ifndef EGL_ARM_image_format -#define EGL_ARM_image_format 1 -#endif -#ifndef EGL_ARM_implicit_external_sync -#define EGL_ARM_implicit_external_sync 1 -#endif -#ifndef EGL_ARM_pixmap_multisample_discard -#define EGL_ARM_pixmap_multisample_discard 1 -#endif -#ifndef EGL_EXT_bind_to_front -#define EGL_EXT_bind_to_front 1 -#endif -#ifndef EGL_EXT_buffer_age -#define EGL_EXT_buffer_age 1 -#endif -#ifndef EGL_EXT_client_extensions -#define EGL_EXT_client_extensions 1 -#endif -#ifndef EGL_EXT_client_sync -#define EGL_EXT_client_sync 1 -typedef EGLBoolean (APIENTRYP PFNEGLCLIENTSIGNALSYNCEXTPROC)(EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); -GLAPI PFNEGLCLIENTSIGNALSYNCEXTPROC glad_eglClientSignalSyncEXT; -#define eglClientSignalSyncEXT glad_eglClientSignalSyncEXT -#endif -#ifndef EGL_EXT_compositor -#define EGL_EXT_compositor 1 -typedef EGLBoolean (APIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC)(const EGLint *external_ref_ids, EGLint num_entries); -GLAPI PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC glad_eglCompositorSetContextListEXT; -#define eglCompositorSetContextListEXT glad_eglCompositorSetContextListEXT -typedef EGLBoolean (APIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC)(EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries); -GLAPI PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC glad_eglCompositorSetContextAttributesEXT; -#define eglCompositorSetContextAttributesEXT glad_eglCompositorSetContextAttributesEXT -typedef EGLBoolean (APIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC)(EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries); -GLAPI PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC glad_eglCompositorSetWindowListEXT; -#define eglCompositorSetWindowListEXT glad_eglCompositorSetWindowListEXT -typedef EGLBoolean (APIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC)(EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries); -GLAPI PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC glad_eglCompositorSetWindowAttributesEXT; -#define eglCompositorSetWindowAttributesEXT glad_eglCompositorSetWindowAttributesEXT -typedef EGLBoolean (APIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC)(EGLint external_win_id); -GLAPI PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC glad_eglCompositorBindTexWindowEXT; -#define eglCompositorBindTexWindowEXT glad_eglCompositorBindTexWindowEXT -typedef EGLBoolean (APIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC)(EGLint external_win_id, EGLint width, EGLint height); -GLAPI PFNEGLCOMPOSITORSETSIZEEXTPROC glad_eglCompositorSetSizeEXT; -#define eglCompositorSetSizeEXT glad_eglCompositorSetSizeEXT -typedef EGLBoolean (APIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC)(EGLint external_win_id, EGLint policy); -GLAPI PFNEGLCOMPOSITORSWAPPOLICYEXTPROC glad_eglCompositorSwapPolicyEXT; -#define eglCompositorSwapPolicyEXT glad_eglCompositorSwapPolicyEXT -#endif -#ifndef EGL_EXT_create_context_robustness -#define EGL_EXT_create_context_robustness 1 -#endif -#ifndef EGL_EXT_device_base -#define EGL_EXT_device_base 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC)(EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); -GLAPI PFNEGLQUERYDEVICEATTRIBEXTPROC glad_eglQueryDeviceAttribEXT; -#define eglQueryDeviceAttribEXT glad_eglQueryDeviceAttribEXT -typedef const char * (APIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC)(EGLDeviceEXT device, EGLint name); -GLAPI PFNEGLQUERYDEVICESTRINGEXTPROC glad_eglQueryDeviceStringEXT; -#define eglQueryDeviceStringEXT glad_eglQueryDeviceStringEXT -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDEVICESEXTPROC)(EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); -GLAPI PFNEGLQUERYDEVICESEXTPROC glad_eglQueryDevicesEXT; -#define eglQueryDevicesEXT glad_eglQueryDevicesEXT -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC)(EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -GLAPI PFNEGLQUERYDISPLAYATTRIBEXTPROC glad_eglQueryDisplayAttribEXT; -#define eglQueryDisplayAttribEXT glad_eglQueryDisplayAttribEXT -#endif -#ifndef EGL_EXT_device_drm -#define EGL_EXT_device_drm 1 -#endif -#ifndef EGL_EXT_device_enumeration -#define EGL_EXT_device_enumeration 1 -#endif -#ifndef EGL_EXT_device_openwf -#define EGL_EXT_device_openwf 1 -#endif -#ifndef EGL_EXT_device_query -#define EGL_EXT_device_query 1 -#endif -#ifndef EGL_EXT_gl_colorspace_bt2020_linear -#define EGL_EXT_gl_colorspace_bt2020_linear 1 -#endif -#ifndef EGL_EXT_gl_colorspace_bt2020_pq -#define EGL_EXT_gl_colorspace_bt2020_pq 1 -#endif -#ifndef EGL_EXT_gl_colorspace_display_p3 -#define EGL_EXT_gl_colorspace_display_p3 1 -#endif -#ifndef EGL_EXT_gl_colorspace_display_p3_linear -#define EGL_EXT_gl_colorspace_display_p3_linear 1 -#endif -#ifndef EGL_EXT_gl_colorspace_display_p3_passthrough -#define EGL_EXT_gl_colorspace_display_p3_passthrough 1 -#endif -#ifndef EGL_EXT_gl_colorspace_scrgb -#define EGL_EXT_gl_colorspace_scrgb 1 -#endif -#ifndef EGL_EXT_gl_colorspace_scrgb_linear -#define EGL_EXT_gl_colorspace_scrgb_linear 1 -#endif -#ifndef EGL_EXT_image_dma_buf_import -#define EGL_EXT_image_dma_buf_import 1 -#endif -#ifndef EGL_EXT_image_dma_buf_import_modifiers -#define EGL_EXT_image_dma_buf_import_modifiers 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC)(EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); -GLAPI PFNEGLQUERYDMABUFFORMATSEXTPROC glad_eglQueryDmaBufFormatsEXT; -#define eglQueryDmaBufFormatsEXT glad_eglQueryDmaBufFormatsEXT -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC)(EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); -GLAPI PFNEGLQUERYDMABUFMODIFIERSEXTPROC glad_eglQueryDmaBufModifiersEXT; -#define eglQueryDmaBufModifiersEXT glad_eglQueryDmaBufModifiersEXT -#endif -#ifndef EGL_EXT_image_gl_colorspace -#define EGL_EXT_image_gl_colorspace 1 -#endif -#ifndef EGL_EXT_image_implicit_sync_control -#define EGL_EXT_image_implicit_sync_control 1 -#endif -#ifndef EGL_EXT_multiview_window -#define EGL_EXT_multiview_window 1 -#endif -#ifndef EGL_EXT_output_base -#define EGL_EXT_output_base 1 -typedef EGLBoolean (APIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC)(EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); -GLAPI PFNEGLGETOUTPUTLAYERSEXTPROC glad_eglGetOutputLayersEXT; -#define eglGetOutputLayersEXT glad_eglGetOutputLayersEXT -typedef EGLBoolean (APIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC)(EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); -GLAPI PFNEGLGETOUTPUTPORTSEXTPROC glad_eglGetOutputPortsEXT; -#define eglGetOutputPortsEXT glad_eglGetOutputPortsEXT -typedef EGLBoolean (APIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); -GLAPI PFNEGLOUTPUTLAYERATTRIBEXTPROC glad_eglOutputLayerAttribEXT; -#define eglOutputLayerAttribEXT glad_eglOutputLayerAttribEXT -typedef EGLBoolean (APIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); -GLAPI PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC glad_eglQueryOutputLayerAttribEXT; -#define eglQueryOutputLayerAttribEXT glad_eglQueryOutputLayerAttribEXT -typedef const char * (APIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); -GLAPI PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC glad_eglQueryOutputLayerStringEXT; -#define eglQueryOutputLayerStringEXT glad_eglQueryOutputLayerStringEXT -typedef EGLBoolean (APIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); -GLAPI PFNEGLOUTPUTPORTATTRIBEXTPROC glad_eglOutputPortAttribEXT; -#define eglOutputPortAttribEXT glad_eglOutputPortAttribEXT -typedef EGLBoolean (APIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); -GLAPI PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC glad_eglQueryOutputPortAttribEXT; -#define eglQueryOutputPortAttribEXT glad_eglQueryOutputPortAttribEXT -typedef const char * (APIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); -GLAPI PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC glad_eglQueryOutputPortStringEXT; -#define eglQueryOutputPortStringEXT glad_eglQueryOutputPortStringEXT -#endif -#ifndef EGL_EXT_output_drm -#define EGL_EXT_output_drm 1 -#endif -#ifndef EGL_EXT_output_openwf -#define EGL_EXT_output_openwf 1 -#endif -#ifndef EGL_EXT_pixel_format_float -#define EGL_EXT_pixel_format_float 1 -#endif -#ifndef EGL_EXT_platform_base -#define EGL_EXT_platform_base 1 -typedef EGLDisplay (APIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform, void *native_display, const EGLint *attrib_list); -GLAPI PFNEGLGETPLATFORMDISPLAYEXTPROC glad_eglGetPlatformDisplayEXT; -#define eglGetPlatformDisplayEXT glad_eglGetPlatformDisplayEXT -typedef EGLSurface (APIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); -GLAPI PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC glad_eglCreatePlatformWindowSurfaceEXT; -#define eglCreatePlatformWindowSurfaceEXT glad_eglCreatePlatformWindowSurfaceEXT -typedef EGLSurface (APIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC)(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); -GLAPI PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC glad_eglCreatePlatformPixmapSurfaceEXT; -#define eglCreatePlatformPixmapSurfaceEXT glad_eglCreatePlatformPixmapSurfaceEXT -#endif -#ifndef EGL_EXT_platform_device -#define EGL_EXT_platform_device 1 -#endif -#ifndef EGL_EXT_platform_wayland -#define EGL_EXT_platform_wayland 1 -#endif -#ifndef EGL_EXT_platform_x11 -#define EGL_EXT_platform_x11 1 -#endif -#ifndef EGL_EXT_protected_content -#define EGL_EXT_protected_content 1 -#endif -#ifndef EGL_EXT_protected_surface -#define EGL_EXT_protected_surface 1 -#endif -#ifndef EGL_EXT_stream_consumer_egloutput -#define EGL_EXT_stream_consumer_egloutput 1 -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); -GLAPI PFNEGLSTREAMCONSUMEROUTPUTEXTPROC glad_eglStreamConsumerOutputEXT; -#define eglStreamConsumerOutputEXT glad_eglStreamConsumerOutputEXT -#endif -#ifndef EGL_EXT_surface_CTA861_3_metadata -#define EGL_EXT_surface_CTA861_3_metadata 1 -#endif -#ifndef EGL_EXT_surface_SMPTE2086_metadata -#define EGL_EXT_surface_SMPTE2086_metadata 1 -#endif -#ifndef EGL_EXT_swap_buffers_with_damage -#define EGL_EXT_swap_buffers_with_damage 1 -typedef EGLBoolean (APIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)(EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); -GLAPI PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC glad_eglSwapBuffersWithDamageEXT; -#define eglSwapBuffersWithDamageEXT glad_eglSwapBuffersWithDamageEXT -#endif -#ifndef EGL_EXT_sync_reuse -#define EGL_EXT_sync_reuse 1 -typedef EGLBoolean (APIENTRYP PFNEGLUNSIGNALSYNCEXTPROC)(EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); -GLAPI PFNEGLUNSIGNALSYNCEXTPROC glad_eglUnsignalSyncEXT; -#define eglUnsignalSyncEXT glad_eglUnsignalSyncEXT -#endif -#ifndef EGL_EXT_yuv_surface -#define EGL_EXT_yuv_surface 1 -#endif -#ifndef EGL_HI_clientpixmap -#define EGL_HI_clientpixmap 1 -typedef EGLSurface (APIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC)(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); -GLAPI PFNEGLCREATEPIXMAPSURFACEHIPROC glad_eglCreatePixmapSurfaceHI; -#define eglCreatePixmapSurfaceHI glad_eglCreatePixmapSurfaceHI -#endif -#ifndef EGL_HI_colorformats -#define EGL_HI_colorformats 1 -#endif -#ifndef EGL_IMG_context_priority -#define EGL_IMG_context_priority 1 -#endif -#ifndef EGL_IMG_image_plane_attribs -#define EGL_IMG_image_plane_attribs 1 -#endif -#ifndef EGL_KHR_cl_event -#define EGL_KHR_cl_event 1 -#endif -#ifndef EGL_KHR_cl_event2 -#define EGL_KHR_cl_event2 1 -typedef EGLSyncKHR (APIENTRYP PFNEGLCREATESYNC64KHRPROC)(EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); -GLAPI PFNEGLCREATESYNC64KHRPROC glad_eglCreateSync64KHR; -#define eglCreateSync64KHR glad_eglCreateSync64KHR -#endif -#ifndef EGL_KHR_client_get_all_proc_addresses -#define EGL_KHR_client_get_all_proc_addresses 1 -#endif -#ifndef EGL_KHR_config_attribs -#define EGL_KHR_config_attribs 1 -#endif -#ifndef EGL_KHR_context_flush_control -#define EGL_KHR_context_flush_control 1 -#endif -#ifndef EGL_KHR_create_context -#define EGL_KHR_create_context 1 -#endif -#ifndef EGL_KHR_create_context_no_error -#define EGL_KHR_create_context_no_error 1 -#endif -#ifndef EGL_KHR_debug -#define EGL_KHR_debug 1 -typedef EGLint (APIENTRYP PFNEGLDEBUGMESSAGECONTROLKHRPROC)(EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list); -GLAPI PFNEGLDEBUGMESSAGECONTROLKHRPROC glad_eglDebugMessageControlKHR; -#define eglDebugMessageControlKHR glad_eglDebugMessageControlKHR -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDEBUGKHRPROC)(EGLint attribute, EGLAttrib *value); -GLAPI PFNEGLQUERYDEBUGKHRPROC glad_eglQueryDebugKHR; -#define eglQueryDebugKHR glad_eglQueryDebugKHR -typedef EGLint (APIENTRYP PFNEGLLABELOBJECTKHRPROC)(EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label); -GLAPI PFNEGLLABELOBJECTKHRPROC glad_eglLabelObjectKHR; -#define eglLabelObjectKHR glad_eglLabelObjectKHR -#endif -#ifndef EGL_KHR_display_reference -#define EGL_KHR_display_reference 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDISPLAYATTRIBKHRPROC)(EGLDisplay dpy, EGLint name, EGLAttrib *value); -GLAPI PFNEGLQUERYDISPLAYATTRIBKHRPROC glad_eglQueryDisplayAttribKHR; -#define eglQueryDisplayAttribKHR glad_eglQueryDisplayAttribKHR -#endif -#ifndef EGL_KHR_fence_sync -#define EGL_KHR_fence_sync 1 -typedef EGLSyncKHR (APIENTRYP PFNEGLCREATESYNCKHRPROC)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); -GLAPI PFNEGLCREATESYNCKHRPROC glad_eglCreateSyncKHR; -#define eglCreateSyncKHR glad_eglCreateSyncKHR -typedef EGLBoolean (APIENTRYP PFNEGLDESTROYSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync); -GLAPI PFNEGLDESTROYSYNCKHRPROC glad_eglDestroySyncKHR; -#define eglDestroySyncKHR glad_eglDestroySyncKHR -typedef EGLint (APIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); -GLAPI PFNEGLCLIENTWAITSYNCKHRPROC glad_eglClientWaitSyncKHR; -#define eglClientWaitSyncKHR glad_eglClientWaitSyncKHR -typedef EGLBoolean (APIENTRYP PFNEGLGETSYNCATTRIBKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -GLAPI PFNEGLGETSYNCATTRIBKHRPROC glad_eglGetSyncAttribKHR; -#define eglGetSyncAttribKHR glad_eglGetSyncAttribKHR -#endif -#ifndef EGL_KHR_get_all_proc_addresses -#define EGL_KHR_get_all_proc_addresses 1 -#endif -#ifndef EGL_KHR_gl_colorspace -#define EGL_KHR_gl_colorspace 1 -#endif -#ifndef EGL_KHR_gl_renderbuffer_image -#define EGL_KHR_gl_renderbuffer_image 1 -#endif -#ifndef EGL_KHR_gl_texture_2D_image -#define EGL_KHR_gl_texture_2D_image 1 -#endif -#ifndef EGL_KHR_gl_texture_3D_image -#define EGL_KHR_gl_texture_3D_image 1 -#endif -#ifndef EGL_KHR_gl_texture_cubemap_image -#define EGL_KHR_gl_texture_cubemap_image 1 -#endif -#ifndef EGL_KHR_image -#define EGL_KHR_image 1 -typedef EGLImageKHR (APIENTRYP PFNEGLCREATEIMAGEKHRPROC)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); -GLAPI PFNEGLCREATEIMAGEKHRPROC glad_eglCreateImageKHR; -#define eglCreateImageKHR glad_eglCreateImageKHR -typedef EGLBoolean (APIENTRYP PFNEGLDESTROYIMAGEKHRPROC)(EGLDisplay dpy, EGLImageKHR image); -GLAPI PFNEGLDESTROYIMAGEKHRPROC glad_eglDestroyImageKHR; -#define eglDestroyImageKHR glad_eglDestroyImageKHR -#endif -#ifndef EGL_KHR_image_base -#define EGL_KHR_image_base 1 -#endif -#ifndef EGL_KHR_image_pixmap -#define EGL_KHR_image_pixmap 1 -#endif -#ifndef EGL_KHR_lock_surface -#define EGL_KHR_lock_surface 1 -typedef EGLBoolean (APIENTRYP PFNEGLLOCKSURFACEKHRPROC)(EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); -GLAPI PFNEGLLOCKSURFACEKHRPROC glad_eglLockSurfaceKHR; -#define eglLockSurfaceKHR glad_eglLockSurfaceKHR -typedef EGLBoolean (APIENTRYP PFNEGLUNLOCKSURFACEKHRPROC)(EGLDisplay dpy, EGLSurface surface); -GLAPI PFNEGLUNLOCKSURFACEKHRPROC glad_eglUnlockSurfaceKHR; -#define eglUnlockSurfaceKHR glad_eglUnlockSurfaceKHR -#endif -#ifndef EGL_KHR_lock_surface2 -#define EGL_KHR_lock_surface2 1 -#endif -#ifndef EGL_KHR_lock_surface3 -#define EGL_KHR_lock_surface3 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYSURFACE64KHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); -GLAPI PFNEGLQUERYSURFACE64KHRPROC glad_eglQuerySurface64KHR; -#define eglQuerySurface64KHR glad_eglQuerySurface64KHR -#endif -#ifndef EGL_KHR_mutable_render_buffer -#define EGL_KHR_mutable_render_buffer 1 -#endif -#ifndef EGL_KHR_no_config_context -#define EGL_KHR_no_config_context 1 -#endif -#ifndef EGL_KHR_partial_update -#define EGL_KHR_partial_update 1 -typedef EGLBoolean (APIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); -GLAPI PFNEGLSETDAMAGEREGIONKHRPROC glad_eglSetDamageRegionKHR; -#define eglSetDamageRegionKHR glad_eglSetDamageRegionKHR -#endif -#ifndef EGL_KHR_platform_android -#define EGL_KHR_platform_android 1 -#endif -#ifndef EGL_KHR_platform_gbm -#define EGL_KHR_platform_gbm 1 -#endif -#ifndef EGL_KHR_platform_wayland -#define EGL_KHR_platform_wayland 1 -#endif -#ifndef EGL_KHR_platform_x11 -#define EGL_KHR_platform_x11 1 -#endif -#ifndef EGL_KHR_reusable_sync -#define EGL_KHR_reusable_sync 1 -typedef EGLBoolean (APIENTRYP PFNEGLSIGNALSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); -GLAPI PFNEGLSIGNALSYNCKHRPROC glad_eglSignalSyncKHR; -#define eglSignalSyncKHR glad_eglSignalSyncKHR -#endif -#ifndef EGL_KHR_stream -#define EGL_KHR_stream 1 -typedef EGLStreamKHR (APIENTRYP PFNEGLCREATESTREAMKHRPROC)(EGLDisplay dpy, const EGLint *attrib_list); -GLAPI PFNEGLCREATESTREAMKHRPROC glad_eglCreateStreamKHR; -#define eglCreateStreamKHR glad_eglCreateStreamKHR -typedef EGLBoolean (APIENTRYP PFNEGLDESTROYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); -GLAPI PFNEGLDESTROYSTREAMKHRPROC glad_eglDestroyStreamKHR; -#define eglDestroyStreamKHR glad_eglDestroyStreamKHR -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); -GLAPI PFNEGLSTREAMATTRIBKHRPROC glad_eglStreamAttribKHR; -#define eglStreamAttribKHR glad_eglStreamAttribKHR -typedef EGLBoolean (APIENTRYP PFNEGLQUERYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); -GLAPI PFNEGLQUERYSTREAMKHRPROC glad_eglQueryStreamKHR; -#define eglQueryStreamKHR glad_eglQueryStreamKHR -typedef EGLBoolean (APIENTRYP PFNEGLQUERYSTREAMU64KHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -GLAPI PFNEGLQUERYSTREAMU64KHRPROC glad_eglQueryStreamu64KHR; -#define eglQueryStreamu64KHR glad_eglQueryStreamu64KHR -#endif -#ifndef EGL_KHR_stream_attrib -#define EGL_KHR_stream_attrib 1 -typedef EGLStreamKHR (APIENTRYP PFNEGLCREATESTREAMATTRIBKHRPROC)(EGLDisplay dpy, const EGLAttrib *attrib_list); -GLAPI PFNEGLCREATESTREAMATTRIBKHRPROC glad_eglCreateStreamAttribKHR; -#define eglCreateStreamAttribKHR glad_eglCreateStreamAttribKHR -typedef EGLBoolean (APIENTRYP PFNEGLSETSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); -GLAPI PFNEGLSETSTREAMATTRIBKHRPROC glad_eglSetStreamAttribKHR; -#define eglSetStreamAttribKHR glad_eglSetStreamAttribKHR -typedef EGLBoolean (APIENTRYP PFNEGLQUERYSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value); -GLAPI PFNEGLQUERYSTREAMATTRIBKHRPROC glad_eglQueryStreamAttribKHR; -#define eglQueryStreamAttribKHR glad_eglQueryStreamAttribKHR -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -GLAPI PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC glad_eglStreamConsumerAcquireAttribKHR; -#define eglStreamConsumerAcquireAttribKHR glad_eglStreamConsumerAcquireAttribKHR -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -GLAPI PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC glad_eglStreamConsumerReleaseAttribKHR; -#define eglStreamConsumerReleaseAttribKHR glad_eglStreamConsumerReleaseAttribKHR -#endif -#ifndef EGL_KHR_stream_consumer_gltexture -#define EGL_KHR_stream_consumer_gltexture 1 -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); -GLAPI PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC glad_eglStreamConsumerGLTextureExternalKHR; -#define eglStreamConsumerGLTextureExternalKHR glad_eglStreamConsumerGLTextureExternalKHR -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); -GLAPI PFNEGLSTREAMCONSUMERACQUIREKHRPROC glad_eglStreamConsumerAcquireKHR; -#define eglStreamConsumerAcquireKHR glad_eglStreamConsumerAcquireKHR -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); -GLAPI PFNEGLSTREAMCONSUMERRELEASEKHRPROC glad_eglStreamConsumerReleaseKHR; -#define eglStreamConsumerReleaseKHR glad_eglStreamConsumerReleaseKHR -#endif -#ifndef EGL_KHR_stream_cross_process_fd -#define EGL_KHR_stream_cross_process_fd 1 -typedef EGLNativeFileDescriptorKHR (APIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); -GLAPI PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC glad_eglGetStreamFileDescriptorKHR; -#define eglGetStreamFileDescriptorKHR glad_eglGetStreamFileDescriptorKHR -typedef EGLStreamKHR (APIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -GLAPI PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC glad_eglCreateStreamFromFileDescriptorKHR; -#define eglCreateStreamFromFileDescriptorKHR glad_eglCreateStreamFromFileDescriptorKHR -#endif -#ifndef EGL_KHR_stream_fifo -#define EGL_KHR_stream_fifo 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -GLAPI PFNEGLQUERYSTREAMTIMEKHRPROC glad_eglQueryStreamTimeKHR; -#define eglQueryStreamTimeKHR glad_eglQueryStreamTimeKHR -#endif -#ifndef EGL_KHR_stream_producer_aldatalocator -#define EGL_KHR_stream_producer_aldatalocator 1 -#endif -#ifndef EGL_KHR_stream_producer_eglsurface -#define EGL_KHR_stream_producer_eglsurface 1 -typedef EGLSurface (APIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -GLAPI PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC glad_eglCreateStreamProducerSurfaceKHR; -#define eglCreateStreamProducerSurfaceKHR glad_eglCreateStreamProducerSurfaceKHR -#endif -#ifndef EGL_KHR_surfaceless_context -#define EGL_KHR_surfaceless_context 1 -#endif -#ifndef EGL_KHR_swap_buffers_with_damage -#define EGL_KHR_swap_buffers_with_damage 1 -typedef EGLBoolean (APIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC)(EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); -GLAPI PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC glad_eglSwapBuffersWithDamageKHR; -#define eglSwapBuffersWithDamageKHR glad_eglSwapBuffersWithDamageKHR -#endif -#ifndef EGL_KHR_vg_parent_image -#define EGL_KHR_vg_parent_image 1 -#endif -#ifndef EGL_KHR_wait_sync -#define EGL_KHR_wait_sync 1 -typedef EGLint (APIENTRYP PFNEGLWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -GLAPI PFNEGLWAITSYNCKHRPROC glad_eglWaitSyncKHR; -#define eglWaitSyncKHR glad_eglWaitSyncKHR -#endif -#ifndef EGL_MESA_drm_image -#define EGL_MESA_drm_image 1 -typedef EGLImageKHR (APIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC)(EGLDisplay dpy, const EGLint *attrib_list); -GLAPI PFNEGLCREATEDRMIMAGEMESAPROC glad_eglCreateDRMImageMESA; -#define eglCreateDRMImageMESA glad_eglCreateDRMImageMESA -typedef EGLBoolean (APIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC)(EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -GLAPI PFNEGLEXPORTDRMIMAGEMESAPROC glad_eglExportDRMImageMESA; -#define eglExportDRMImageMESA glad_eglExportDRMImageMESA -#endif -#ifndef EGL_MESA_image_dma_buf_export -#define EGL_MESA_image_dma_buf_export 1 -typedef EGLBoolean (APIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); -GLAPI PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC glad_eglExportDMABUFImageQueryMESA; -#define eglExportDMABUFImageQueryMESA glad_eglExportDMABUFImageQueryMESA -typedef EGLBoolean (APIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); -GLAPI PFNEGLEXPORTDMABUFIMAGEMESAPROC glad_eglExportDMABUFImageMESA; -#define eglExportDMABUFImageMESA glad_eglExportDMABUFImageMESA -#endif -#ifndef EGL_MESA_platform_gbm -#define EGL_MESA_platform_gbm 1 -#endif -#ifndef EGL_MESA_platform_surfaceless -#define EGL_MESA_platform_surfaceless 1 -#endif -#ifndef EGL_MESA_query_driver -#define EGL_MESA_query_driver 1 -typedef char * (APIENTRYP PFNEGLGETDISPLAYDRIVERCONFIGPROC)(EGLDisplay dpy); -GLAPI PFNEGLGETDISPLAYDRIVERCONFIGPROC glad_eglGetDisplayDriverConfig; -#define eglGetDisplayDriverConfig glad_eglGetDisplayDriverConfig -typedef const char * (APIENTRYP PFNEGLGETDISPLAYDRIVERNAMEPROC)(EGLDisplay dpy); -GLAPI PFNEGLGETDISPLAYDRIVERNAMEPROC glad_eglGetDisplayDriverName; -#define eglGetDisplayDriverName glad_eglGetDisplayDriverName -#endif -#ifndef EGL_NOK_swap_region -#define EGL_NOK_swap_region 1 -typedef EGLBoolean (APIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -GLAPI PFNEGLSWAPBUFFERSREGIONNOKPROC glad_eglSwapBuffersRegionNOK; -#define eglSwapBuffersRegionNOK glad_eglSwapBuffersRegionNOK -#endif -#ifndef EGL_NOK_swap_region2 -#define EGL_NOK_swap_region2 1 -typedef EGLBoolean (APIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -GLAPI PFNEGLSWAPBUFFERSREGION2NOKPROC glad_eglSwapBuffersRegion2NOK; -#define eglSwapBuffersRegion2NOK glad_eglSwapBuffersRegion2NOK -#endif -#ifndef EGL_NOK_texture_from_pixmap -#define EGL_NOK_texture_from_pixmap 1 -#endif -#ifndef EGL_NV_3dvision_surface -#define EGL_NV_3dvision_surface 1 -#endif -#ifndef EGL_NV_context_priority_realtime -#define EGL_NV_context_priority_realtime 1 -#endif -#ifndef EGL_NV_coverage_sample -#define EGL_NV_coverage_sample 1 -#endif -#ifndef EGL_NV_coverage_sample_resolve -#define EGL_NV_coverage_sample_resolve 1 -#endif -#ifndef EGL_NV_cuda_event -#define EGL_NV_cuda_event 1 -#endif -#ifndef EGL_NV_depth_nonlinear -#define EGL_NV_depth_nonlinear 1 -#endif -#ifndef EGL_NV_device_cuda -#define EGL_NV_device_cuda 1 -#endif -#ifndef EGL_NV_native_query -#define EGL_NV_native_query 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC)(EGLDisplay dpy, EGLNativeDisplayType *display_id); -GLAPI PFNEGLQUERYNATIVEDISPLAYNVPROC glad_eglQueryNativeDisplayNV; -#define eglQueryNativeDisplayNV glad_eglQueryNativeDisplayNV -typedef EGLBoolean (APIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); -GLAPI PFNEGLQUERYNATIVEWINDOWNVPROC glad_eglQueryNativeWindowNV; -#define eglQueryNativeWindowNV glad_eglQueryNativeWindowNV -typedef EGLBoolean (APIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); -GLAPI PFNEGLQUERYNATIVEPIXMAPNVPROC glad_eglQueryNativePixmapNV; -#define eglQueryNativePixmapNV glad_eglQueryNativePixmapNV -#endif -#ifndef EGL_NV_post_convert_rounding -#define EGL_NV_post_convert_rounding 1 -#endif -#ifndef EGL_NV_post_sub_buffer -#define EGL_NV_post_sub_buffer 1 -typedef EGLBoolean (APIENTRYP PFNEGLPOSTSUBBUFFERNVPROC)(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -GLAPI PFNEGLPOSTSUBBUFFERNVPROC glad_eglPostSubBufferNV; -#define eglPostSubBufferNV glad_eglPostSubBufferNV -#endif -#ifndef EGL_NV_quadruple_buffer -#define EGL_NV_quadruple_buffer 1 -#endif -#ifndef EGL_NV_robustness_video_memory_purge -#define EGL_NV_robustness_video_memory_purge 1 -#endif -#ifndef EGL_NV_stream_consumer_gltexture_yuv -#define EGL_NV_stream_consumer_gltexture_yuv 1 -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC)(EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -GLAPI PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC glad_eglStreamConsumerGLTextureExternalAttribsNV; -#define eglStreamConsumerGLTextureExternalAttribsNV glad_eglStreamConsumerGLTextureExternalAttribsNV -#endif -#ifndef EGL_NV_stream_cross_display -#define EGL_NV_stream_cross_display 1 -#endif -#ifndef EGL_NV_stream_cross_object -#define EGL_NV_stream_cross_object 1 -#endif -#ifndef EGL_NV_stream_cross_partition -#define EGL_NV_stream_cross_partition 1 -#endif -#ifndef EGL_NV_stream_cross_process -#define EGL_NV_stream_cross_process 1 -#endif -#ifndef EGL_NV_stream_cross_system -#define EGL_NV_stream_cross_system 1 -#endif -#ifndef EGL_NV_stream_dma -#define EGL_NV_stream_dma 1 -#endif -#ifndef EGL_NV_stream_fifo_next -#define EGL_NV_stream_fifo_next 1 -#endif -#ifndef EGL_NV_stream_fifo_synchronous -#define EGL_NV_stream_fifo_synchronous 1 -#endif -#ifndef EGL_NV_stream_flush -#define EGL_NV_stream_flush 1 -typedef EGLBoolean (APIENTRYP PFNEGLSTREAMFLUSHNVPROC)(EGLDisplay dpy, EGLStreamKHR stream); -GLAPI PFNEGLSTREAMFLUSHNVPROC glad_eglStreamFlushNV; -#define eglStreamFlushNV glad_eglStreamFlushNV -#endif -#ifndef EGL_NV_stream_frame_limits -#define EGL_NV_stream_frame_limits 1 -#endif -#ifndef EGL_NV_stream_metadata -#define EGL_NV_stream_metadata 1 -typedef EGLBoolean (APIENTRYP PFNEGLQUERYDISPLAYATTRIBNVPROC)(EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -GLAPI PFNEGLQUERYDISPLAYATTRIBNVPROC glad_eglQueryDisplayAttribNV; -#define eglQueryDisplayAttribNV glad_eglQueryDisplayAttribNV -typedef EGLBoolean (APIENTRYP PFNEGLSETSTREAMMETADATANVPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data); -GLAPI PFNEGLSETSTREAMMETADATANVPROC glad_eglSetStreamMetadataNV; -#define eglSetStreamMetadataNV glad_eglSetStreamMetadataNV -typedef EGLBoolean (APIENTRYP PFNEGLQUERYSTREAMMETADATANVPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data); -GLAPI PFNEGLQUERYSTREAMMETADATANVPROC glad_eglQueryStreamMetadataNV; -#define eglQueryStreamMetadataNV glad_eglQueryStreamMetadataNV -#endif -#ifndef EGL_NV_stream_origin -#define EGL_NV_stream_origin 1 -#endif -#ifndef EGL_NV_stream_remote -#define EGL_NV_stream_remote 1 -#endif -#ifndef EGL_NV_stream_reset -#define EGL_NV_stream_reset 1 -typedef EGLBoolean (APIENTRYP PFNEGLRESETSTREAMNVPROC)(EGLDisplay dpy, EGLStreamKHR stream); -GLAPI PFNEGLRESETSTREAMNVPROC glad_eglResetStreamNV; -#define eglResetStreamNV glad_eglResetStreamNV -#endif -#ifndef EGL_NV_stream_socket -#define EGL_NV_stream_socket 1 -#endif -#ifndef EGL_NV_stream_socket_inet -#define EGL_NV_stream_socket_inet 1 -#endif -#ifndef EGL_NV_stream_socket_unix -#define EGL_NV_stream_socket_unix 1 -#endif -#ifndef EGL_NV_stream_sync -#define EGL_NV_stream_sync 1 -typedef EGLSyncKHR (APIENTRYP PFNEGLCREATESTREAMSYNCNVPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); -GLAPI PFNEGLCREATESTREAMSYNCNVPROC glad_eglCreateStreamSyncNV; -#define eglCreateStreamSyncNV glad_eglCreateStreamSyncNV -#endif -#ifndef EGL_NV_sync -#define EGL_NV_sync 1 -typedef EGLSyncNV (APIENTRYP PFNEGLCREATEFENCESYNCNVPROC)(EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); -GLAPI PFNEGLCREATEFENCESYNCNVPROC glad_eglCreateFenceSyncNV; -#define eglCreateFenceSyncNV glad_eglCreateFenceSyncNV -typedef EGLBoolean (APIENTRYP PFNEGLDESTROYSYNCNVPROC)(EGLSyncNV sync); -GLAPI PFNEGLDESTROYSYNCNVPROC glad_eglDestroySyncNV; -#define eglDestroySyncNV glad_eglDestroySyncNV -typedef EGLBoolean (APIENTRYP PFNEGLFENCENVPROC)(EGLSyncNV sync); -GLAPI PFNEGLFENCENVPROC glad_eglFenceNV; -#define eglFenceNV glad_eglFenceNV -typedef EGLint (APIENTRYP PFNEGLCLIENTWAITSYNCNVPROC)(EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); -GLAPI PFNEGLCLIENTWAITSYNCNVPROC glad_eglClientWaitSyncNV; -#define eglClientWaitSyncNV glad_eglClientWaitSyncNV -typedef EGLBoolean (APIENTRYP PFNEGLSIGNALSYNCNVPROC)(EGLSyncNV sync, EGLenum mode); -GLAPI PFNEGLSIGNALSYNCNVPROC glad_eglSignalSyncNV; -#define eglSignalSyncNV glad_eglSignalSyncNV -typedef EGLBoolean (APIENTRYP PFNEGLGETSYNCATTRIBNVPROC)(EGLSyncNV sync, EGLint attribute, EGLint *value); -GLAPI PFNEGLGETSYNCATTRIBNVPROC glad_eglGetSyncAttribNV; -#define eglGetSyncAttribNV glad_eglGetSyncAttribNV -#endif -#ifndef EGL_NV_system_time -#define EGL_NV_system_time 1 -typedef EGLuint64NV (APIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC)(void); -GLAPI PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC glad_eglGetSystemTimeFrequencyNV; -#define eglGetSystemTimeFrequencyNV glad_eglGetSystemTimeFrequencyNV -typedef EGLuint64NV (APIENTRYP PFNEGLGETSYSTEMTIMENVPROC)(void); -GLAPI PFNEGLGETSYSTEMTIMENVPROC glad_eglGetSystemTimeNV; -#define eglGetSystemTimeNV glad_eglGetSystemTimeNV -#endif -#ifndef EGL_NV_triple_buffer -#define EGL_NV_triple_buffer 1 -#endif -#ifndef EGL_TIZEN_image_native_buffer -#define EGL_TIZEN_image_native_buffer 1 -#endif -#ifndef EGL_TIZEN_image_native_surface -#define EGL_TIZEN_image_native_surface 1 -#endif -#ifndef EGL_WL_bind_wayland_display -#define EGL_WL_bind_wayland_display 1 -typedef EGLBoolean (APIENTRYP PFNEGLBINDWAYLANDDISPLAYWLPROC)(EGLDisplay dpy, struct wl_display *display); -GLAPI PFNEGLBINDWAYLANDDISPLAYWLPROC glad_eglBindWaylandDisplayWL; -#define eglBindWaylandDisplayWL glad_eglBindWaylandDisplayWL -typedef EGLBoolean (APIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWLPROC)(EGLDisplay dpy, struct wl_display *display); -GLAPI PFNEGLUNBINDWAYLANDDISPLAYWLPROC glad_eglUnbindWaylandDisplayWL; -#define eglUnbindWaylandDisplayWL glad_eglUnbindWaylandDisplayWL -typedef EGLBoolean (APIENTRYP PFNEGLQUERYWAYLANDBUFFERWLPROC)(EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); -GLAPI PFNEGLQUERYWAYLANDBUFFERWLPROC glad_eglQueryWaylandBufferWL; -#define eglQueryWaylandBufferWL glad_eglQueryWaylandBufferWL -#endif -#ifndef EGL_WL_create_wayland_buffer_from_image -#define EGL_WL_create_wayland_buffer_from_image 1 -typedef struct wl_buffer * (APIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC)(EGLDisplay dpy, EGLImageKHR image); -GLAPI PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC glad_eglCreateWaylandBufferFromImageWL; -#define eglCreateWaylandBufferFromImageWL glad_eglCreateWaylandBufferFromImageWL -#endif - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/third_party/glad/include/glad/glad_glx.h b/third_party/glad/include/glad/glad_glx.h deleted file mode 100644 index 307e08e5..00000000 --- a/third_party/glad/include/glad/glad_glx.h +++ /dev/null @@ -1,1262 +0,0 @@ -/* - - GLX loader generated by glad 0.1.33 on Sun May 3 16:48:35 2020. - - Language/Generator: C/C++ - Specification: glx - APIs: glx=1.4 - Profile: - - Extensions: - GLX_3DFX_multisample, - GLX_AMD_gpu_association, - GLX_ARB_context_flush_control, - GLX_ARB_create_context, - GLX_ARB_create_context_no_error, - GLX_ARB_create_context_profile, - GLX_ARB_create_context_robustness, - GLX_ARB_fbconfig_float, - GLX_ARB_framebuffer_sRGB, - GLX_ARB_get_proc_address, - GLX_ARB_multisample, - GLX_ARB_robustness_application_isolation, - GLX_ARB_robustness_share_group_isolation, - GLX_ARB_vertex_buffer_object, - GLX_EXT_buffer_age, - GLX_EXT_context_priority, - GLX_EXT_create_context_es2_profile, - GLX_EXT_create_context_es_profile, - GLX_EXT_fbconfig_packed_float, - GLX_EXT_framebuffer_sRGB, - GLX_EXT_import_context, - GLX_EXT_libglvnd, - GLX_EXT_no_config_context, - GLX_EXT_stereo_tree, - GLX_EXT_swap_control, - GLX_EXT_swap_control_tear, - GLX_EXT_texture_from_pixmap, - GLX_EXT_visual_info, - GLX_EXT_visual_rating, - GLX_INTEL_swap_event, - GLX_MESA_agp_offset, - GLX_MESA_copy_sub_buffer, - GLX_MESA_pixmap_colormap, - GLX_MESA_query_renderer, - GLX_MESA_release_buffers, - GLX_MESA_set_3dfx_mode, - GLX_MESA_swap_control, - GLX_NV_copy_buffer, - GLX_NV_copy_image, - GLX_NV_delay_before_swap, - GLX_NV_float_buffer, - GLX_NV_multigpu_context, - GLX_NV_multisample_coverage, - GLX_NV_present_video, - GLX_NV_robustness_video_memory_purge, - GLX_NV_swap_group, - GLX_NV_video_capture, - GLX_NV_video_out, - GLX_OML_swap_method, - GLX_OML_sync_control, - GLX_SGIS_blended_overlay, - GLX_SGIS_multisample, - GLX_SGIS_shared_multisample, - GLX_SGIX_dmbuffer, - GLX_SGIX_fbconfig, - GLX_SGIX_hyperpipe, - GLX_SGIX_pbuffer, - GLX_SGIX_swap_barrier, - GLX_SGIX_swap_group, - GLX_SGIX_video_resize, - GLX_SGIX_video_source, - GLX_SGIX_visual_select_group, - GLX_SGI_cushion, - GLX_SGI_make_current_read, - GLX_SGI_swap_control, - GLX_SGI_video_sync, - GLX_SUN_get_transparent_index - Loader: True - Local files: False - Omit khrplatform: False - Reproducible: False - - Commandline: - --api="glx=1.4" --generator="c" --spec="glx" --extensions="GLX_3DFX_multisample,GLX_AMD_gpu_association,GLX_ARB_context_flush_control,GLX_ARB_create_context,GLX_ARB_create_context_no_error,GLX_ARB_create_context_profile,GLX_ARB_create_context_robustness,GLX_ARB_fbconfig_float,GLX_ARB_framebuffer_sRGB,GLX_ARB_get_proc_address,GLX_ARB_multisample,GLX_ARB_robustness_application_isolation,GLX_ARB_robustness_share_group_isolation,GLX_ARB_vertex_buffer_object,GLX_EXT_buffer_age,GLX_EXT_context_priority,GLX_EXT_create_context_es2_profile,GLX_EXT_create_context_es_profile,GLX_EXT_fbconfig_packed_float,GLX_EXT_framebuffer_sRGB,GLX_EXT_import_context,GLX_EXT_libglvnd,GLX_EXT_no_config_context,GLX_EXT_stereo_tree,GLX_EXT_swap_control,GLX_EXT_swap_control_tear,GLX_EXT_texture_from_pixmap,GLX_EXT_visual_info,GLX_EXT_visual_rating,GLX_INTEL_swap_event,GLX_MESA_agp_offset,GLX_MESA_copy_sub_buffer,GLX_MESA_pixmap_colormap,GLX_MESA_query_renderer,GLX_MESA_release_buffers,GLX_MESA_set_3dfx_mode,GLX_MESA_swap_control,GLX_NV_copy_buffer,GLX_NV_copy_image,GLX_NV_delay_before_swap,GLX_NV_float_buffer,GLX_NV_multigpu_context,GLX_NV_multisample_coverage,GLX_NV_present_video,GLX_NV_robustness_video_memory_purge,GLX_NV_swap_group,GLX_NV_video_capture,GLX_NV_video_out,GLX_OML_swap_method,GLX_OML_sync_control,GLX_SGIS_blended_overlay,GLX_SGIS_multisample,GLX_SGIS_shared_multisample,GLX_SGIX_dmbuffer,GLX_SGIX_fbconfig,GLX_SGIX_hyperpipe,GLX_SGIX_pbuffer,GLX_SGIX_swap_barrier,GLX_SGIX_swap_group,GLX_SGIX_video_resize,GLX_SGIX_video_source,GLX_SGIX_visual_select_group,GLX_SGI_cushion,GLX_SGI_make_current_read,GLX_SGI_swap_control,GLX_SGI_video_sync,GLX_SUN_get_transparent_index" - Online: - Too many extensions -*/ - - -#include -#include -#include -#include - -#ifndef __glad_glxext_h_ - -#ifdef __glxext_h_ -#error GLX header already included, remove this include, glad already provides it -#endif - -#define __glad_glxext_h_ -#define __glxext_h_ - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* (* GLADloadproc)(const char *name); - -#ifndef GLAPI -# if defined(GLAD_GLAPI_EXPORT) -# if defined(_WIN32) || defined(__CYGWIN__) -# if defined(GLAD_GLAPI_EXPORT_BUILD) -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllexport)) extern -# else -# define GLAPI __declspec(dllexport) extern -# endif -# else -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllimport)) extern -# else -# define GLAPI __declspec(dllimport) extern -# endif -# endif -# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) -# define GLAPI __attribute__ ((visibility ("default"))) extern -# else -# define GLAPI extern -# endif -# else -# define GLAPI extern -# endif -#endif - -GLAPI int gladLoadGLX(Display *dpy, int screen); - -GLAPI int gladLoadGLXLoader(GLADloadproc, Display *dpy, int screen); - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GLX_OML_sync_control extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif -typedef XID GLXFBConfigID; -typedef struct __GLXFBConfigRec *GLXFBConfig; -typedef XID GLXContextID; -typedef struct __GLXcontextRec *GLXContext; -typedef XID GLXPixmap; -typedef XID GLXDrawable; -typedef XID GLXWindow; -typedef XID GLXPbuffer; -typedef void (APIENTRY *__GLXextFuncPtr)(void); -typedef XID GLXVideoCaptureDeviceNV; -typedef unsigned int GLXVideoDeviceNV; -typedef XID GLXVideoSourceSGIX; -typedef XID GLXFBConfigIDSGIX; -typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; -typedef XID GLXPbufferSGIX; -typedef struct { - int event_type; /* GLX_DAMAGED or GLX_SAVED */ - int draw_type; /* GLX_WINDOW or GLX_PBUFFER */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came for SendEvent request */ - Display *display; /* display the event was read from */ - GLXDrawable drawable; /* XID of Drawable */ - unsigned int buffer_mask; /* mask indicating which buffers are affected */ - unsigned int aux_buffer; /* which aux buffer was affected */ - int x, y; - int width, height; - int count; /* if nonzero, at least this many more */ -} GLXPbufferClobberEvent; -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - GLXDrawable drawable; /* drawable on which event was requested in event mask */ - int event_type; - int64_t ust; - int64_t msc; - int64_t sbc; -} GLXBufferSwapComplete; -typedef union __GLXEvent { - GLXPbufferClobberEvent glxpbufferclobber; - GLXBufferSwapComplete glxbufferswapcomplete; - long pad[24]; -} GLXEvent; -typedef struct { - int type; - unsigned long serial; - Bool send_event; - Display *display; - int extension; - int evtype; - GLXDrawable window; - Bool stereo_tree; -} GLXStereoNotifyEventEXT; -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came for SendEvent request */ - Display *display; /* display the event was read from */ - GLXDrawable drawable; /* i.d. of Drawable */ - int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */ - int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */ - unsigned int mask; /* mask indicating which buffers are affected*/ - int x, y; - int width, height; - int count; /* if nonzero, at least this many more */ -} GLXBufferClobberEventSGIX; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int networkId; -} GLXHyperpipeNetworkSGIX; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int channel; - unsigned int participationType; - int timeSlice; -} GLXHyperpipeConfigSGIX; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int srcXOrigin, srcYOrigin, srcWidth, srcHeight; - int destXOrigin, destYOrigin, destWidth, destHeight; -} GLXPipeRect; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int XOrigin, YOrigin, maxHeight, maxWidth; -} GLXPipeRectLimits; -#define GLX_EXTENSION_NAME "GLX" -#define GLX_PbufferClobber 0 -#define GLX_BufferSwapComplete 1 -#define __GLX_NUMBER_EVENTS 17 -#define GLX_BAD_SCREEN 1 -#define GLX_BAD_ATTRIBUTE 2 -#define GLX_NO_EXTENSION 3 -#define GLX_BAD_VISUAL 4 -#define GLX_BAD_CONTEXT 5 -#define GLX_BAD_VALUE 6 -#define GLX_BAD_ENUM 7 -#define GLX_USE_GL 1 -#define GLX_BUFFER_SIZE 2 -#define GLX_LEVEL 3 -#define GLX_RGBA 4 -#define GLX_DOUBLEBUFFER 5 -#define GLX_STEREO 6 -#define GLX_AUX_BUFFERS 7 -#define GLX_RED_SIZE 8 -#define GLX_GREEN_SIZE 9 -#define GLX_BLUE_SIZE 10 -#define GLX_ALPHA_SIZE 11 -#define GLX_DEPTH_SIZE 12 -#define GLX_STENCIL_SIZE 13 -#define GLX_ACCUM_RED_SIZE 14 -#define GLX_ACCUM_GREEN_SIZE 15 -#define GLX_ACCUM_BLUE_SIZE 16 -#define GLX_ACCUM_ALPHA_SIZE 17 -#define GLX_VENDOR 0x1 -#define GLX_VERSION 0x2 -#define GLX_EXTENSIONS 0x3 -#define GLX_WINDOW_BIT 0x00000001 -#define GLX_PIXMAP_BIT 0x00000002 -#define GLX_PBUFFER_BIT 0x00000004 -#define GLX_RGBA_BIT 0x00000001 -#define GLX_COLOR_INDEX_BIT 0x00000002 -#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 -#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 -#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 -#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 -#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 -#define GLX_AUX_BUFFERS_BIT 0x00000010 -#define GLX_DEPTH_BUFFER_BIT 0x00000020 -#define GLX_STENCIL_BUFFER_BIT 0x00000040 -#define GLX_ACCUM_BUFFER_BIT 0x00000080 -#define GLX_CONFIG_CAVEAT 0x20 -#define GLX_X_VISUAL_TYPE 0x22 -#define GLX_TRANSPARENT_TYPE 0x23 -#define GLX_TRANSPARENT_INDEX_VALUE 0x24 -#define GLX_TRANSPARENT_RED_VALUE 0x25 -#define GLX_TRANSPARENT_GREEN_VALUE 0x26 -#define GLX_TRANSPARENT_BLUE_VALUE 0x27 -#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 -#define GLX_DONT_CARE 0xFFFFFFFF -#define GLX_NONE 0x8000 -#define GLX_SLOW_CONFIG 0x8001 -#define GLX_TRUE_COLOR 0x8002 -#define GLX_DIRECT_COLOR 0x8003 -#define GLX_PSEUDO_COLOR 0x8004 -#define GLX_STATIC_COLOR 0x8005 -#define GLX_GRAY_SCALE 0x8006 -#define GLX_STATIC_GRAY 0x8007 -#define GLX_TRANSPARENT_RGB 0x8008 -#define GLX_TRANSPARENT_INDEX 0x8009 -#define GLX_VISUAL_ID 0x800B -#define GLX_SCREEN 0x800C -#define GLX_NON_CONFORMANT_CONFIG 0x800D -#define GLX_DRAWABLE_TYPE 0x8010 -#define GLX_RENDER_TYPE 0x8011 -#define GLX_X_RENDERABLE 0x8012 -#define GLX_FBCONFIG_ID 0x8013 -#define GLX_RGBA_TYPE 0x8014 -#define GLX_COLOR_INDEX_TYPE 0x8015 -#define GLX_MAX_PBUFFER_WIDTH 0x8016 -#define GLX_MAX_PBUFFER_HEIGHT 0x8017 -#define GLX_MAX_PBUFFER_PIXELS 0x8018 -#define GLX_PRESERVED_CONTENTS 0x801B -#define GLX_LARGEST_PBUFFER 0x801C -#define GLX_WIDTH 0x801D -#define GLX_HEIGHT 0x801E -#define GLX_EVENT_MASK 0x801F -#define GLX_DAMAGED 0x8020 -#define GLX_SAVED 0x8021 -#define GLX_WINDOW 0x8022 -#define GLX_PBUFFER 0x8023 -#define GLX_PBUFFER_HEIGHT 0x8040 -#define GLX_PBUFFER_WIDTH 0x8041 -#define GLX_SAMPLE_BUFFERS 100000 -#define GLX_SAMPLES 100001 -#ifndef GLX_VERSION_1_0 -#define GLX_VERSION_1_0 1 -GLAPI int GLAD_GLX_VERSION_1_0; -typedef XVisualInfo * (APIENTRYP PFNGLXCHOOSEVISUALPROC)(Display *dpy, int screen, int *attribList); -GLAPI PFNGLXCHOOSEVISUALPROC glad_glXChooseVisual; -#define glXChooseVisual glad_glXChooseVisual -typedef GLXContext (APIENTRYP PFNGLXCREATECONTEXTPROC)(Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); -GLAPI PFNGLXCREATECONTEXTPROC glad_glXCreateContext; -#define glXCreateContext glad_glXCreateContext -typedef void (APIENTRYP PFNGLXDESTROYCONTEXTPROC)(Display *dpy, GLXContext ctx); -GLAPI PFNGLXDESTROYCONTEXTPROC glad_glXDestroyContext; -#define glXDestroyContext glad_glXDestroyContext -typedef Bool (APIENTRYP PFNGLXMAKECURRENTPROC)(Display *dpy, GLXDrawable drawable, GLXContext ctx); -GLAPI PFNGLXMAKECURRENTPROC glad_glXMakeCurrent; -#define glXMakeCurrent glad_glXMakeCurrent -typedef void (APIENTRYP PFNGLXCOPYCONTEXTPROC)(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask); -GLAPI PFNGLXCOPYCONTEXTPROC glad_glXCopyContext; -#define glXCopyContext glad_glXCopyContext -typedef void (APIENTRYP PFNGLXSWAPBUFFERSPROC)(Display *dpy, GLXDrawable drawable); -GLAPI PFNGLXSWAPBUFFERSPROC glad_glXSwapBuffers; -#define glXSwapBuffers glad_glXSwapBuffers -typedef GLXPixmap (APIENTRYP PFNGLXCREATEGLXPIXMAPPROC)(Display *dpy, XVisualInfo *visual, Pixmap pixmap); -GLAPI PFNGLXCREATEGLXPIXMAPPROC glad_glXCreateGLXPixmap; -#define glXCreateGLXPixmap glad_glXCreateGLXPixmap -typedef void (APIENTRYP PFNGLXDESTROYGLXPIXMAPPROC)(Display *dpy, GLXPixmap pixmap); -GLAPI PFNGLXDESTROYGLXPIXMAPPROC glad_glXDestroyGLXPixmap; -#define glXDestroyGLXPixmap glad_glXDestroyGLXPixmap -typedef Bool (APIENTRYP PFNGLXQUERYEXTENSIONPROC)(Display *dpy, int *errorb, int *event); -GLAPI PFNGLXQUERYEXTENSIONPROC glad_glXQueryExtension; -#define glXQueryExtension glad_glXQueryExtension -typedef Bool (APIENTRYP PFNGLXQUERYVERSIONPROC)(Display *dpy, int *maj, int *min); -GLAPI PFNGLXQUERYVERSIONPROC glad_glXQueryVersion; -#define glXQueryVersion glad_glXQueryVersion -typedef Bool (APIENTRYP PFNGLXISDIRECTPROC)(Display *dpy, GLXContext ctx); -GLAPI PFNGLXISDIRECTPROC glad_glXIsDirect; -#define glXIsDirect glad_glXIsDirect -typedef int (APIENTRYP PFNGLXGETCONFIGPROC)(Display *dpy, XVisualInfo *visual, int attrib, int *value); -GLAPI PFNGLXGETCONFIGPROC glad_glXGetConfig; -#define glXGetConfig glad_glXGetConfig -typedef GLXContext (APIENTRYP PFNGLXGETCURRENTCONTEXTPROC)(void); -GLAPI PFNGLXGETCURRENTCONTEXTPROC glad_glXGetCurrentContext; -#define glXGetCurrentContext glad_glXGetCurrentContext -typedef GLXDrawable (APIENTRYP PFNGLXGETCURRENTDRAWABLEPROC)(void); -GLAPI PFNGLXGETCURRENTDRAWABLEPROC glad_glXGetCurrentDrawable; -#define glXGetCurrentDrawable glad_glXGetCurrentDrawable -typedef void (APIENTRYP PFNGLXWAITGLPROC)(void); -GLAPI PFNGLXWAITGLPROC glad_glXWaitGL; -#define glXWaitGL glad_glXWaitGL -typedef void (APIENTRYP PFNGLXWAITXPROC)(void); -GLAPI PFNGLXWAITXPROC glad_glXWaitX; -#define glXWaitX glad_glXWaitX -typedef void (APIENTRYP PFNGLXUSEXFONTPROC)(Font font, int first, int count, int list); -GLAPI PFNGLXUSEXFONTPROC glad_glXUseXFont; -#define glXUseXFont glad_glXUseXFont -#endif -#ifndef GLX_VERSION_1_1 -#define GLX_VERSION_1_1 1 -GLAPI int GLAD_GLX_VERSION_1_1; -typedef const char * (APIENTRYP PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display *dpy, int screen); -GLAPI PFNGLXQUERYEXTENSIONSSTRINGPROC glad_glXQueryExtensionsString; -#define glXQueryExtensionsString glad_glXQueryExtensionsString -typedef const char * (APIENTRYP PFNGLXQUERYSERVERSTRINGPROC)(Display *dpy, int screen, int name); -GLAPI PFNGLXQUERYSERVERSTRINGPROC glad_glXQueryServerString; -#define glXQueryServerString glad_glXQueryServerString -typedef const char * (APIENTRYP PFNGLXGETCLIENTSTRINGPROC)(Display *dpy, int name); -GLAPI PFNGLXGETCLIENTSTRINGPROC glad_glXGetClientString; -#define glXGetClientString glad_glXGetClientString -#endif -#ifndef GLX_VERSION_1_2 -#define GLX_VERSION_1_2 1 -GLAPI int GLAD_GLX_VERSION_1_2; -typedef Display * (APIENTRYP PFNGLXGETCURRENTDISPLAYPROC)(void); -GLAPI PFNGLXGETCURRENTDISPLAYPROC glad_glXGetCurrentDisplay; -#define glXGetCurrentDisplay glad_glXGetCurrentDisplay -#endif -#ifndef GLX_VERSION_1_3 -#define GLX_VERSION_1_3 1 -GLAPI int GLAD_GLX_VERSION_1_3; -typedef GLXFBConfig * (APIENTRYP PFNGLXGETFBCONFIGSPROC)(Display *dpy, int screen, int *nelements); -GLAPI PFNGLXGETFBCONFIGSPROC glad_glXGetFBConfigs; -#define glXGetFBConfigs glad_glXGetFBConfigs -typedef GLXFBConfig * (APIENTRYP PFNGLXCHOOSEFBCONFIGPROC)(Display *dpy, int screen, const int *attrib_list, int *nelements); -GLAPI PFNGLXCHOOSEFBCONFIGPROC glad_glXChooseFBConfig; -#define glXChooseFBConfig glad_glXChooseFBConfig -typedef int (APIENTRYP PFNGLXGETFBCONFIGATTRIBPROC)(Display *dpy, GLXFBConfig config, int attribute, int *value); -GLAPI PFNGLXGETFBCONFIGATTRIBPROC glad_glXGetFBConfigAttrib; -#define glXGetFBConfigAttrib glad_glXGetFBConfigAttrib -typedef XVisualInfo * (APIENTRYP PFNGLXGETVISUALFROMFBCONFIGPROC)(Display *dpy, GLXFBConfig config); -GLAPI PFNGLXGETVISUALFROMFBCONFIGPROC glad_glXGetVisualFromFBConfig; -#define glXGetVisualFromFBConfig glad_glXGetVisualFromFBConfig -typedef GLXWindow (APIENTRYP PFNGLXCREATEWINDOWPROC)(Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); -GLAPI PFNGLXCREATEWINDOWPROC glad_glXCreateWindow; -#define glXCreateWindow glad_glXCreateWindow -typedef void (APIENTRYP PFNGLXDESTROYWINDOWPROC)(Display *dpy, GLXWindow win); -GLAPI PFNGLXDESTROYWINDOWPROC glad_glXDestroyWindow; -#define glXDestroyWindow glad_glXDestroyWindow -typedef GLXPixmap (APIENTRYP PFNGLXCREATEPIXMAPPROC)(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); -GLAPI PFNGLXCREATEPIXMAPPROC glad_glXCreatePixmap; -#define glXCreatePixmap glad_glXCreatePixmap -typedef void (APIENTRYP PFNGLXDESTROYPIXMAPPROC)(Display *dpy, GLXPixmap pixmap); -GLAPI PFNGLXDESTROYPIXMAPPROC glad_glXDestroyPixmap; -#define glXDestroyPixmap glad_glXDestroyPixmap -typedef GLXPbuffer (APIENTRYP PFNGLXCREATEPBUFFERPROC)(Display *dpy, GLXFBConfig config, const int *attrib_list); -GLAPI PFNGLXCREATEPBUFFERPROC glad_glXCreatePbuffer; -#define glXCreatePbuffer glad_glXCreatePbuffer -typedef void (APIENTRYP PFNGLXDESTROYPBUFFERPROC)(Display *dpy, GLXPbuffer pbuf); -GLAPI PFNGLXDESTROYPBUFFERPROC glad_glXDestroyPbuffer; -#define glXDestroyPbuffer glad_glXDestroyPbuffer -typedef void (APIENTRYP PFNGLXQUERYDRAWABLEPROC)(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); -GLAPI PFNGLXQUERYDRAWABLEPROC glad_glXQueryDrawable; -#define glXQueryDrawable glad_glXQueryDrawable -typedef GLXContext (APIENTRYP PFNGLXCREATENEWCONTEXTPROC)(Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); -GLAPI PFNGLXCREATENEWCONTEXTPROC glad_glXCreateNewContext; -#define glXCreateNewContext glad_glXCreateNewContext -typedef Bool (APIENTRYP PFNGLXMAKECONTEXTCURRENTPROC)(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); -GLAPI PFNGLXMAKECONTEXTCURRENTPROC glad_glXMakeContextCurrent; -#define glXMakeContextCurrent glad_glXMakeContextCurrent -typedef GLXDrawable (APIENTRYP PFNGLXGETCURRENTREADDRAWABLEPROC)(void); -GLAPI PFNGLXGETCURRENTREADDRAWABLEPROC glad_glXGetCurrentReadDrawable; -#define glXGetCurrentReadDrawable glad_glXGetCurrentReadDrawable -typedef int (APIENTRYP PFNGLXQUERYCONTEXTPROC)(Display *dpy, GLXContext ctx, int attribute, int *value); -GLAPI PFNGLXQUERYCONTEXTPROC glad_glXQueryContext; -#define glXQueryContext glad_glXQueryContext -typedef void (APIENTRYP PFNGLXSELECTEVENTPROC)(Display *dpy, GLXDrawable draw, unsigned long event_mask); -GLAPI PFNGLXSELECTEVENTPROC glad_glXSelectEvent; -#define glXSelectEvent glad_glXSelectEvent -typedef void (APIENTRYP PFNGLXGETSELECTEDEVENTPROC)(Display *dpy, GLXDrawable draw, unsigned long *event_mask); -GLAPI PFNGLXGETSELECTEDEVENTPROC glad_glXGetSelectedEvent; -#define glXGetSelectedEvent glad_glXGetSelectedEvent -#endif -#ifndef GLX_VERSION_1_4 -#define GLX_VERSION_1_4 1 -GLAPI int GLAD_GLX_VERSION_1_4; -typedef __GLXextFuncPtr (APIENTRYP PFNGLXGETPROCADDRESSPROC)(const GLubyte *procName); -GLAPI PFNGLXGETPROCADDRESSPROC glad_glXGetProcAddress; -#define glXGetProcAddress glad_glXGetProcAddress -#endif -#define GLX_SAMPLE_BUFFERS_3DFX 0x8050 -#define GLX_SAMPLES_3DFX 0x8051 -#define GLX_GPU_VENDOR_AMD 0x1F00 -#define GLX_GPU_RENDERER_STRING_AMD 0x1F01 -#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 -#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 -#define GLX_GPU_RAM_AMD 0x21A3 -#define GLX_GPU_CLOCK_AMD 0x21A4 -#define GLX_GPU_NUM_PIPES_AMD 0x21A5 -#define GLX_GPU_NUM_SIMD_AMD 0x21A6 -#define GLX_GPU_NUM_RB_AMD 0x21A7 -#define GLX_GPU_NUM_SPI_AMD 0x21A8 -#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 -#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 -#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 -#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 -#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define GLX_CONTEXT_FLAGS_ARB 0x2094 -#define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3 -#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 -#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 -#define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9 -#define GLX_RGBA_FLOAT_BIT_ARB 0x00000004 -#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 -#define GLX_SAMPLE_BUFFERS_ARB 100000 -#define GLX_SAMPLES_ARB 100001 -#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 -#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 -#define GLX_BACK_BUFFER_AGE_EXT 0x20F4 -#define GLX_CONTEXT_PRIORITY_LEVEL_EXT 0x3100 -#define GLX_CONTEXT_PRIORITY_HIGH_EXT 0x3101 -#define GLX_CONTEXT_PRIORITY_MEDIUM_EXT 0x3102 -#define GLX_CONTEXT_PRIORITY_LOW_EXT 0x3103 -#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 -#define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 -#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 -#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 -#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 -#define GLX_SHARE_CONTEXT_EXT 0x800A -#define GLX_VISUAL_ID_EXT 0x800B -#define GLX_SCREEN_EXT 0x800C -#define GLX_VENDOR_NAMES_EXT 0x20F6 -#define GLX_STEREO_TREE_EXT 0x20F5 -#define GLX_STEREO_NOTIFY_MASK_EXT 0x00000001 -#define GLX_STEREO_NOTIFY_EXT 0x00000000 -#define GLX_SWAP_INTERVAL_EXT 0x20F1 -#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 -#define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 -#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 -#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 -#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 -#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 -#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 -#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 -#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 -#define GLX_Y_INVERTED_EXT 0x20D4 -#define GLX_TEXTURE_FORMAT_EXT 0x20D5 -#define GLX_TEXTURE_TARGET_EXT 0x20D6 -#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 -#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 -#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 -#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA -#define GLX_TEXTURE_1D_EXT 0x20DB -#define GLX_TEXTURE_2D_EXT 0x20DC -#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD -#define GLX_FRONT_LEFT_EXT 0x20DE -#define GLX_FRONT_RIGHT_EXT 0x20DF -#define GLX_BACK_LEFT_EXT 0x20E0 -#define GLX_BACK_RIGHT_EXT 0x20E1 -#define GLX_FRONT_EXT 0x20DE -#define GLX_BACK_EXT 0x20E0 -#define GLX_AUX0_EXT 0x20E2 -#define GLX_AUX1_EXT 0x20E3 -#define GLX_AUX2_EXT 0x20E4 -#define GLX_AUX3_EXT 0x20E5 -#define GLX_AUX4_EXT 0x20E6 -#define GLX_AUX5_EXT 0x20E7 -#define GLX_AUX6_EXT 0x20E8 -#define GLX_AUX7_EXT 0x20E9 -#define GLX_AUX8_EXT 0x20EA -#define GLX_AUX9_EXT 0x20EB -#define GLX_X_VISUAL_TYPE_EXT 0x22 -#define GLX_TRANSPARENT_TYPE_EXT 0x23 -#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 -#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 -#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 -#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 -#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 -#define GLX_NONE_EXT 0x8000 -#define GLX_TRUE_COLOR_EXT 0x8002 -#define GLX_DIRECT_COLOR_EXT 0x8003 -#define GLX_PSEUDO_COLOR_EXT 0x8004 -#define GLX_STATIC_COLOR_EXT 0x8005 -#define GLX_GRAY_SCALE_EXT 0x8006 -#define GLX_STATIC_GRAY_EXT 0x8007 -#define GLX_TRANSPARENT_RGB_EXT 0x8008 -#define GLX_TRANSPARENT_INDEX_EXT 0x8009 -#define GLX_VISUAL_CAVEAT_EXT 0x20 -#define GLX_SLOW_VISUAL_EXT 0x8001 -#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D -#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 -#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 -#define GLX_COPY_COMPLETE_INTEL 0x8181 -#define GLX_FLIP_COMPLETE_INTEL 0x8182 -#define GLX_RENDERER_VENDOR_ID_MESA 0x8183 -#define GLX_RENDERER_DEVICE_ID_MESA 0x8184 -#define GLX_RENDERER_VERSION_MESA 0x8185 -#define GLX_RENDERER_ACCELERATED_MESA 0x8186 -#define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187 -#define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188 -#define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189 -#define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A -#define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B -#define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C -#define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D -#define GLX_3DFX_WINDOW_MODE_MESA 0x1 -#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 -#define GLX_FLOAT_COMPONENTS_NV 0x20B0 -#define GLX_CONTEXT_MULTIGPU_ATTRIB_NV 0x20AA -#define GLX_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV 0x20AB -#define GLX_CONTEXT_MULTIGPU_ATTRIB_AFR_NV 0x20AC -#define GLX_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV 0x20AD -#define GLX_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE -#define GLX_COVERAGE_SAMPLES_NV 100001 -#define GLX_COLOR_SAMPLES_NV 0x20B3 -#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 -#define GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x20F7 -#define GLX_DEVICE_ID_NV 0x20CD -#define GLX_UNIQUE_ID_NV 0x20CE -#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF -#define GLX_VIDEO_OUT_COLOR_NV 0x20C3 -#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 -#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 -#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 -#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 -#define GLX_VIDEO_OUT_FRAME_NV 0x20C8 -#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 -#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA -#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB -#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC -#define GLX_SWAP_METHOD_OML 0x8060 -#define GLX_SWAP_EXCHANGE_OML 0x8061 -#define GLX_SWAP_COPY_OML 0x8062 -#define GLX_SWAP_UNDEFINED_OML 0x8063 -#define GLX_BLENDED_RGBA_SGIS 0x8025 -#define GLX_SAMPLE_BUFFERS_SGIS 100000 -#define GLX_SAMPLES_SGIS 100001 -#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 -#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 -#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024 -#define GLX_WINDOW_BIT_SGIX 0x00000001 -#define GLX_PIXMAP_BIT_SGIX 0x00000002 -#define GLX_RGBA_BIT_SGIX 0x00000001 -#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 -#define GLX_DRAWABLE_TYPE_SGIX 0x8010 -#define GLX_RENDER_TYPE_SGIX 0x8011 -#define GLX_X_RENDERABLE_SGIX 0x8012 -#define GLX_FBCONFIG_ID_SGIX 0x8013 -#define GLX_RGBA_TYPE_SGIX 0x8014 -#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 -#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 -#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 -#define GLX_BAD_HYPERPIPE_SGIX 92 -#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 -#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 -#define GLX_PIPE_RECT_SGIX 0x00000001 -#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 -#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 -#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 -#define GLX_HYPERPIPE_ID_SGIX 0x8030 -#define GLX_PBUFFER_BIT_SGIX 0x00000004 -#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 -#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 -#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 -#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 -#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 -#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 -#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 -#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 -#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 -#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 -#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 -#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 -#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 -#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 -#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A -#define GLX_PRESERVED_CONTENTS_SGIX 0x801B -#define GLX_LARGEST_PBUFFER_SGIX 0x801C -#define GLX_WIDTH_SGIX 0x801D -#define GLX_HEIGHT_SGIX 0x801E -#define GLX_EVENT_MASK_SGIX 0x801F -#define GLX_DAMAGED_SGIX 0x8020 -#define GLX_SAVED_SGIX 0x8021 -#define GLX_WINDOW_SGIX 0x8022 -#define GLX_PBUFFER_SGIX 0x8023 -#define GLX_SYNC_FRAME_SGIX 0x00000000 -#define GLX_SYNC_SWAP_SGIX 0x00000001 -#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 -#ifndef GLX_3DFX_multisample -#define GLX_3DFX_multisample 1 -GLAPI int GLAD_GLX_3DFX_multisample; -#endif -#ifndef GLX_AMD_gpu_association -#define GLX_AMD_gpu_association 1 -GLAPI int GLAD_GLX_AMD_gpu_association; -typedef unsigned int (APIENTRYP PFNGLXGETGPUIDSAMDPROC)(unsigned int maxCount, unsigned int *ids); -GLAPI PFNGLXGETGPUIDSAMDPROC glad_glXGetGPUIDsAMD; -#define glXGetGPUIDsAMD glad_glXGetGPUIDsAMD -typedef int (APIENTRYP PFNGLXGETGPUINFOAMDPROC)(unsigned int id, int property, GLenum dataType, unsigned int size, void *data); -GLAPI PFNGLXGETGPUINFOAMDPROC glad_glXGetGPUInfoAMD; -#define glXGetGPUInfoAMD glad_glXGetGPUInfoAMD -typedef unsigned int (APIENTRYP PFNGLXGETCONTEXTGPUIDAMDPROC)(GLXContext ctx); -GLAPI PFNGLXGETCONTEXTGPUIDAMDPROC glad_glXGetContextGPUIDAMD; -#define glXGetContextGPUIDAMD glad_glXGetContextGPUIDAMD -typedef GLXContext (APIENTRYP PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)(unsigned int id, GLXContext share_list); -GLAPI PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC glad_glXCreateAssociatedContextAMD; -#define glXCreateAssociatedContextAMD glad_glXCreateAssociatedContextAMD -typedef GLXContext (APIENTRYP PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(unsigned int id, GLXContext share_context, const int *attribList); -GLAPI PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC glad_glXCreateAssociatedContextAttribsAMD; -#define glXCreateAssociatedContextAttribsAMD glad_glXCreateAssociatedContextAttribsAMD -typedef Bool (APIENTRYP PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)(GLXContext ctx); -GLAPI PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC glad_glXDeleteAssociatedContextAMD; -#define glXDeleteAssociatedContextAMD glad_glXDeleteAssociatedContextAMD -typedef Bool (APIENTRYP PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(GLXContext ctx); -GLAPI PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC glad_glXMakeAssociatedContextCurrentAMD; -#define glXMakeAssociatedContextCurrentAMD glad_glXMakeAssociatedContextCurrentAMD -typedef GLXContext (APIENTRYP PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); -GLAPI PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC glad_glXGetCurrentAssociatedContextAMD; -#define glXGetCurrentAssociatedContextAMD glad_glXGetCurrentAssociatedContextAMD -typedef void (APIENTRYP PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)(GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC glad_glXBlitContextFramebufferAMD; -#define glXBlitContextFramebufferAMD glad_glXBlitContextFramebufferAMD -#endif -#ifndef GLX_ARB_context_flush_control -#define GLX_ARB_context_flush_control 1 -GLAPI int GLAD_GLX_ARB_context_flush_control; -#endif -#ifndef GLX_ARB_create_context -#define GLX_ARB_create_context 1 -GLAPI int GLAD_GLX_ARB_create_context; -typedef GLXContext (APIENTRYP PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); -GLAPI PFNGLXCREATECONTEXTATTRIBSARBPROC glad_glXCreateContextAttribsARB; -#define glXCreateContextAttribsARB glad_glXCreateContextAttribsARB -#endif -#ifndef GLX_ARB_create_context_no_error -#define GLX_ARB_create_context_no_error 1 -GLAPI int GLAD_GLX_ARB_create_context_no_error; -#endif -#ifndef GLX_ARB_create_context_profile -#define GLX_ARB_create_context_profile 1 -GLAPI int GLAD_GLX_ARB_create_context_profile; -#endif -#ifndef GLX_ARB_create_context_robustness -#define GLX_ARB_create_context_robustness 1 -GLAPI int GLAD_GLX_ARB_create_context_robustness; -#endif -#ifndef GLX_ARB_fbconfig_float -#define GLX_ARB_fbconfig_float 1 -GLAPI int GLAD_GLX_ARB_fbconfig_float; -#endif -#ifndef GLX_ARB_framebuffer_sRGB -#define GLX_ARB_framebuffer_sRGB 1 -GLAPI int GLAD_GLX_ARB_framebuffer_sRGB; -#endif -#ifndef GLX_ARB_get_proc_address -#define GLX_ARB_get_proc_address 1 -GLAPI int GLAD_GLX_ARB_get_proc_address; -typedef __GLXextFuncPtr (APIENTRYP PFNGLXGETPROCADDRESSARBPROC)(const GLubyte *procName); -GLAPI PFNGLXGETPROCADDRESSARBPROC glad_glXGetProcAddressARB; -#define glXGetProcAddressARB glad_glXGetProcAddressARB -#endif -#ifndef GLX_ARB_multisample -#define GLX_ARB_multisample 1 -GLAPI int GLAD_GLX_ARB_multisample; -#endif -#ifndef GLX_ARB_robustness_application_isolation -#define GLX_ARB_robustness_application_isolation 1 -GLAPI int GLAD_GLX_ARB_robustness_application_isolation; -#endif -#ifndef GLX_ARB_robustness_share_group_isolation -#define GLX_ARB_robustness_share_group_isolation 1 -GLAPI int GLAD_GLX_ARB_robustness_share_group_isolation; -#endif -#ifndef GLX_ARB_vertex_buffer_object -#define GLX_ARB_vertex_buffer_object 1 -GLAPI int GLAD_GLX_ARB_vertex_buffer_object; -#endif -#ifndef GLX_EXT_buffer_age -#define GLX_EXT_buffer_age 1 -GLAPI int GLAD_GLX_EXT_buffer_age; -#endif -#ifndef GLX_EXT_context_priority -#define GLX_EXT_context_priority 1 -GLAPI int GLAD_GLX_EXT_context_priority; -#endif -#ifndef GLX_EXT_create_context_es2_profile -#define GLX_EXT_create_context_es2_profile 1 -GLAPI int GLAD_GLX_EXT_create_context_es2_profile; -#endif -#ifndef GLX_EXT_create_context_es_profile -#define GLX_EXT_create_context_es_profile 1 -GLAPI int GLAD_GLX_EXT_create_context_es_profile; -#endif -#ifndef GLX_EXT_fbconfig_packed_float -#define GLX_EXT_fbconfig_packed_float 1 -GLAPI int GLAD_GLX_EXT_fbconfig_packed_float; -#endif -#ifndef GLX_EXT_framebuffer_sRGB -#define GLX_EXT_framebuffer_sRGB 1 -GLAPI int GLAD_GLX_EXT_framebuffer_sRGB; -#endif -#ifndef GLX_EXT_import_context -#define GLX_EXT_import_context 1 -GLAPI int GLAD_GLX_EXT_import_context; -typedef Display * (APIENTRYP PFNGLXGETCURRENTDISPLAYEXTPROC)(void); -GLAPI PFNGLXGETCURRENTDISPLAYEXTPROC glad_glXGetCurrentDisplayEXT; -#define glXGetCurrentDisplayEXT glad_glXGetCurrentDisplayEXT -typedef int (APIENTRYP PFNGLXQUERYCONTEXTINFOEXTPROC)(Display *dpy, GLXContext context, int attribute, int *value); -GLAPI PFNGLXQUERYCONTEXTINFOEXTPROC glad_glXQueryContextInfoEXT; -#define glXQueryContextInfoEXT glad_glXQueryContextInfoEXT -typedef GLXContextID (APIENTRYP PFNGLXGETCONTEXTIDEXTPROC)(const GLXContext context); -GLAPI PFNGLXGETCONTEXTIDEXTPROC glad_glXGetContextIDEXT; -#define glXGetContextIDEXT glad_glXGetContextIDEXT -typedef GLXContext (APIENTRYP PFNGLXIMPORTCONTEXTEXTPROC)(Display *dpy, GLXContextID contextID); -GLAPI PFNGLXIMPORTCONTEXTEXTPROC glad_glXImportContextEXT; -#define glXImportContextEXT glad_glXImportContextEXT -typedef void (APIENTRYP PFNGLXFREECONTEXTEXTPROC)(Display *dpy, GLXContext context); -GLAPI PFNGLXFREECONTEXTEXTPROC glad_glXFreeContextEXT; -#define glXFreeContextEXT glad_glXFreeContextEXT -#endif -#ifndef GLX_EXT_libglvnd -#define GLX_EXT_libglvnd 1 -GLAPI int GLAD_GLX_EXT_libglvnd; -#endif -#ifndef GLX_EXT_no_config_context -#define GLX_EXT_no_config_context 1 -GLAPI int GLAD_GLX_EXT_no_config_context; -#endif -#ifndef GLX_EXT_stereo_tree -#define GLX_EXT_stereo_tree 1 -GLAPI int GLAD_GLX_EXT_stereo_tree; -#endif -#ifndef GLX_EXT_swap_control -#define GLX_EXT_swap_control 1 -GLAPI int GLAD_GLX_EXT_swap_control; -typedef void (APIENTRYP PFNGLXSWAPINTERVALEXTPROC)(Display *dpy, GLXDrawable drawable, int interval); -GLAPI PFNGLXSWAPINTERVALEXTPROC glad_glXSwapIntervalEXT; -#define glXSwapIntervalEXT glad_glXSwapIntervalEXT -#endif -#ifndef GLX_EXT_swap_control_tear -#define GLX_EXT_swap_control_tear 1 -GLAPI int GLAD_GLX_EXT_swap_control_tear; -#endif -#ifndef GLX_EXT_texture_from_pixmap -#define GLX_EXT_texture_from_pixmap 1 -GLAPI int GLAD_GLX_EXT_texture_from_pixmap; -typedef void (APIENTRYP PFNGLXBINDTEXIMAGEEXTPROC)(Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list); -GLAPI PFNGLXBINDTEXIMAGEEXTPROC glad_glXBindTexImageEXT; -#define glXBindTexImageEXT glad_glXBindTexImageEXT -typedef void (APIENTRYP PFNGLXRELEASETEXIMAGEEXTPROC)(Display *dpy, GLXDrawable drawable, int buffer); -GLAPI PFNGLXRELEASETEXIMAGEEXTPROC glad_glXReleaseTexImageEXT; -#define glXReleaseTexImageEXT glad_glXReleaseTexImageEXT -#endif -#ifndef GLX_EXT_visual_info -#define GLX_EXT_visual_info 1 -GLAPI int GLAD_GLX_EXT_visual_info; -#endif -#ifndef GLX_EXT_visual_rating -#define GLX_EXT_visual_rating 1 -GLAPI int GLAD_GLX_EXT_visual_rating; -#endif -#ifndef GLX_INTEL_swap_event -#define GLX_INTEL_swap_event 1 -GLAPI int GLAD_GLX_INTEL_swap_event; -#endif -#ifndef GLX_MESA_agp_offset -#define GLX_MESA_agp_offset 1 -GLAPI int GLAD_GLX_MESA_agp_offset; -typedef unsigned int (APIENTRYP PFNGLXGETAGPOFFSETMESAPROC)(const void *pointer); -GLAPI PFNGLXGETAGPOFFSETMESAPROC glad_glXGetAGPOffsetMESA; -#define glXGetAGPOffsetMESA glad_glXGetAGPOffsetMESA -#endif -#ifndef GLX_MESA_copy_sub_buffer -#define GLX_MESA_copy_sub_buffer 1 -GLAPI int GLAD_GLX_MESA_copy_sub_buffer; -typedef void (APIENTRYP PFNGLXCOPYSUBBUFFERMESAPROC)(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); -GLAPI PFNGLXCOPYSUBBUFFERMESAPROC glad_glXCopySubBufferMESA; -#define glXCopySubBufferMESA glad_glXCopySubBufferMESA -#endif -#ifndef GLX_MESA_pixmap_colormap -#define GLX_MESA_pixmap_colormap 1 -GLAPI int GLAD_GLX_MESA_pixmap_colormap; -typedef GLXPixmap (APIENTRYP PFNGLXCREATEGLXPIXMAPMESAPROC)(Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); -GLAPI PFNGLXCREATEGLXPIXMAPMESAPROC glad_glXCreateGLXPixmapMESA; -#define glXCreateGLXPixmapMESA glad_glXCreateGLXPixmapMESA -#endif -#ifndef GLX_MESA_query_renderer -#define GLX_MESA_query_renderer 1 -GLAPI int GLAD_GLX_MESA_query_renderer; -typedef Bool (APIENTRYP PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC)(int attribute, unsigned int *value); -GLAPI PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC glad_glXQueryCurrentRendererIntegerMESA; -#define glXQueryCurrentRendererIntegerMESA glad_glXQueryCurrentRendererIntegerMESA -typedef const char * (APIENTRYP PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC)(int attribute); -GLAPI PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC glad_glXQueryCurrentRendererStringMESA; -#define glXQueryCurrentRendererStringMESA glad_glXQueryCurrentRendererStringMESA -typedef Bool (APIENTRYP PFNGLXQUERYRENDERERINTEGERMESAPROC)(Display *dpy, int screen, int renderer, int attribute, unsigned int *value); -GLAPI PFNGLXQUERYRENDERERINTEGERMESAPROC glad_glXQueryRendererIntegerMESA; -#define glXQueryRendererIntegerMESA glad_glXQueryRendererIntegerMESA -typedef const char * (APIENTRYP PFNGLXQUERYRENDERERSTRINGMESAPROC)(Display *dpy, int screen, int renderer, int attribute); -GLAPI PFNGLXQUERYRENDERERSTRINGMESAPROC glad_glXQueryRendererStringMESA; -#define glXQueryRendererStringMESA glad_glXQueryRendererStringMESA -#endif -#ifndef GLX_MESA_release_buffers -#define GLX_MESA_release_buffers 1 -GLAPI int GLAD_GLX_MESA_release_buffers; -typedef Bool (APIENTRYP PFNGLXRELEASEBUFFERSMESAPROC)(Display *dpy, GLXDrawable drawable); -GLAPI PFNGLXRELEASEBUFFERSMESAPROC glad_glXReleaseBuffersMESA; -#define glXReleaseBuffersMESA glad_glXReleaseBuffersMESA -#endif -#ifndef GLX_MESA_set_3dfx_mode -#define GLX_MESA_set_3dfx_mode 1 -GLAPI int GLAD_GLX_MESA_set_3dfx_mode; -typedef GLboolean (APIENTRYP PFNGLXSET3DFXMODEMESAPROC)(GLint mode); -GLAPI PFNGLXSET3DFXMODEMESAPROC glad_glXSet3DfxModeMESA; -#define glXSet3DfxModeMESA glad_glXSet3DfxModeMESA -#endif -#ifndef GLX_MESA_swap_control -#define GLX_MESA_swap_control 1 -GLAPI int GLAD_GLX_MESA_swap_control; -typedef int (APIENTRYP PFNGLXGETSWAPINTERVALMESAPROC)(void); -GLAPI PFNGLXGETSWAPINTERVALMESAPROC glad_glXGetSwapIntervalMESA; -#define glXGetSwapIntervalMESA glad_glXGetSwapIntervalMESA -typedef int (APIENTRYP PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval); -GLAPI PFNGLXSWAPINTERVALMESAPROC glad_glXSwapIntervalMESA; -#define glXSwapIntervalMESA glad_glXSwapIntervalMESA -#endif -#ifndef GLX_NV_copy_buffer -#define GLX_NV_copy_buffer 1 -GLAPI int GLAD_GLX_NV_copy_buffer; -typedef void (APIENTRYP PFNGLXCOPYBUFFERSUBDATANVPROC)(Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLXCOPYBUFFERSUBDATANVPROC glad_glXCopyBufferSubDataNV; -#define glXCopyBufferSubDataNV glad_glXCopyBufferSubDataNV -typedef void (APIENTRYP PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC)(Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC glad_glXNamedCopyBufferSubDataNV; -#define glXNamedCopyBufferSubDataNV glad_glXNamedCopyBufferSubDataNV -#endif -#ifndef GLX_NV_copy_image -#define GLX_NV_copy_image 1 -GLAPI int GLAD_GLX_NV_copy_image; -typedef void (APIENTRYP PFNGLXCOPYIMAGESUBDATANVPROC)(Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNGLXCOPYIMAGESUBDATANVPROC glad_glXCopyImageSubDataNV; -#define glXCopyImageSubDataNV glad_glXCopyImageSubDataNV -#endif -#ifndef GLX_NV_delay_before_swap -#define GLX_NV_delay_before_swap 1 -GLAPI int GLAD_GLX_NV_delay_before_swap; -typedef Bool (APIENTRYP PFNGLXDELAYBEFORESWAPNVPROC)(Display *dpy, GLXDrawable drawable, GLfloat seconds); -GLAPI PFNGLXDELAYBEFORESWAPNVPROC glad_glXDelayBeforeSwapNV; -#define glXDelayBeforeSwapNV glad_glXDelayBeforeSwapNV -#endif -#ifndef GLX_NV_float_buffer -#define GLX_NV_float_buffer 1 -GLAPI int GLAD_GLX_NV_float_buffer; -#endif -#ifndef GLX_NV_multigpu_context -#define GLX_NV_multigpu_context 1 -GLAPI int GLAD_GLX_NV_multigpu_context; -#endif -#ifndef GLX_NV_multisample_coverage -#define GLX_NV_multisample_coverage 1 -GLAPI int GLAD_GLX_NV_multisample_coverage; -#endif -#ifndef GLX_NV_present_video -#define GLX_NV_present_video 1 -GLAPI int GLAD_GLX_NV_present_video; -typedef unsigned int * (APIENTRYP PFNGLXENUMERATEVIDEODEVICESNVPROC)(Display *dpy, int screen, int *nelements); -GLAPI PFNGLXENUMERATEVIDEODEVICESNVPROC glad_glXEnumerateVideoDevicesNV; -#define glXEnumerateVideoDevicesNV glad_glXEnumerateVideoDevicesNV -typedef int (APIENTRYP PFNGLXBINDVIDEODEVICENVPROC)(Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); -GLAPI PFNGLXBINDVIDEODEVICENVPROC glad_glXBindVideoDeviceNV; -#define glXBindVideoDeviceNV glad_glXBindVideoDeviceNV -#endif -#ifndef GLX_NV_robustness_video_memory_purge -#define GLX_NV_robustness_video_memory_purge 1 -GLAPI int GLAD_GLX_NV_robustness_video_memory_purge; -#endif -#ifndef GLX_NV_swap_group -#define GLX_NV_swap_group 1 -GLAPI int GLAD_GLX_NV_swap_group; -typedef Bool (APIENTRYP PFNGLXJOINSWAPGROUPNVPROC)(Display *dpy, GLXDrawable drawable, GLuint group); -GLAPI PFNGLXJOINSWAPGROUPNVPROC glad_glXJoinSwapGroupNV; -#define glXJoinSwapGroupNV glad_glXJoinSwapGroupNV -typedef Bool (APIENTRYP PFNGLXBINDSWAPBARRIERNVPROC)(Display *dpy, GLuint group, GLuint barrier); -GLAPI PFNGLXBINDSWAPBARRIERNVPROC glad_glXBindSwapBarrierNV; -#define glXBindSwapBarrierNV glad_glXBindSwapBarrierNV -typedef Bool (APIENTRYP PFNGLXQUERYSWAPGROUPNVPROC)(Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); -GLAPI PFNGLXQUERYSWAPGROUPNVPROC glad_glXQuerySwapGroupNV; -#define glXQuerySwapGroupNV glad_glXQuerySwapGroupNV -typedef Bool (APIENTRYP PFNGLXQUERYMAXSWAPGROUPSNVPROC)(Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); -GLAPI PFNGLXQUERYMAXSWAPGROUPSNVPROC glad_glXQueryMaxSwapGroupsNV; -#define glXQueryMaxSwapGroupsNV glad_glXQueryMaxSwapGroupsNV -typedef Bool (APIENTRYP PFNGLXQUERYFRAMECOUNTNVPROC)(Display *dpy, int screen, GLuint *count); -GLAPI PFNGLXQUERYFRAMECOUNTNVPROC glad_glXQueryFrameCountNV; -#define glXQueryFrameCountNV glad_glXQueryFrameCountNV -typedef Bool (APIENTRYP PFNGLXRESETFRAMECOUNTNVPROC)(Display *dpy, int screen); -GLAPI PFNGLXRESETFRAMECOUNTNVPROC glad_glXResetFrameCountNV; -#define glXResetFrameCountNV glad_glXResetFrameCountNV -#endif -#ifndef GLX_NV_video_capture -#define GLX_NV_video_capture 1 -GLAPI int GLAD_GLX_NV_video_capture; -typedef int (APIENTRYP PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)(Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); -GLAPI PFNGLXBINDVIDEOCAPTUREDEVICENVPROC glad_glXBindVideoCaptureDeviceNV; -#define glXBindVideoCaptureDeviceNV glad_glXBindVideoCaptureDeviceNV -typedef GLXVideoCaptureDeviceNV * (APIENTRYP PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)(Display *dpy, int screen, int *nelements); -GLAPI PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC glad_glXEnumerateVideoCaptureDevicesNV; -#define glXEnumerateVideoCaptureDevicesNV glad_glXEnumerateVideoCaptureDevicesNV -typedef void (APIENTRYP PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)(Display *dpy, GLXVideoCaptureDeviceNV device); -GLAPI PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC glad_glXLockVideoCaptureDeviceNV; -#define glXLockVideoCaptureDeviceNV glad_glXLockVideoCaptureDeviceNV -typedef int (APIENTRYP PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)(Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value); -GLAPI PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC glad_glXQueryVideoCaptureDeviceNV; -#define glXQueryVideoCaptureDeviceNV glad_glXQueryVideoCaptureDeviceNV -typedef void (APIENTRYP PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)(Display *dpy, GLXVideoCaptureDeviceNV device); -GLAPI PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC glad_glXReleaseVideoCaptureDeviceNV; -#define glXReleaseVideoCaptureDeviceNV glad_glXReleaseVideoCaptureDeviceNV -#endif -#ifndef GLX_NV_video_out -#define GLX_NV_video_out 1 -GLAPI int GLAD_GLX_NV_video_out; -typedef int (APIENTRYP PFNGLXGETVIDEODEVICENVPROC)(Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); -GLAPI PFNGLXGETVIDEODEVICENVPROC glad_glXGetVideoDeviceNV; -#define glXGetVideoDeviceNV glad_glXGetVideoDeviceNV -typedef int (APIENTRYP PFNGLXRELEASEVIDEODEVICENVPROC)(Display *dpy, int screen, GLXVideoDeviceNV VideoDevice); -GLAPI PFNGLXRELEASEVIDEODEVICENVPROC glad_glXReleaseVideoDeviceNV; -#define glXReleaseVideoDeviceNV glad_glXReleaseVideoDeviceNV -typedef int (APIENTRYP PFNGLXBINDVIDEOIMAGENVPROC)(Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); -GLAPI PFNGLXBINDVIDEOIMAGENVPROC glad_glXBindVideoImageNV; -#define glXBindVideoImageNV glad_glXBindVideoImageNV -typedef int (APIENTRYP PFNGLXRELEASEVIDEOIMAGENVPROC)(Display *dpy, GLXPbuffer pbuf); -GLAPI PFNGLXRELEASEVIDEOIMAGENVPROC glad_glXReleaseVideoImageNV; -#define glXReleaseVideoImageNV glad_glXReleaseVideoImageNV -typedef int (APIENTRYP PFNGLXSENDPBUFFERTOVIDEONVPROC)(Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); -GLAPI PFNGLXSENDPBUFFERTOVIDEONVPROC glad_glXSendPbufferToVideoNV; -#define glXSendPbufferToVideoNV glad_glXSendPbufferToVideoNV -typedef int (APIENTRYP PFNGLXGETVIDEOINFONVPROC)(Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); -GLAPI PFNGLXGETVIDEOINFONVPROC glad_glXGetVideoInfoNV; -#define glXGetVideoInfoNV glad_glXGetVideoInfoNV -#endif -#ifndef GLX_OML_swap_method -#define GLX_OML_swap_method 1 -GLAPI int GLAD_GLX_OML_swap_method; -#endif -#ifndef GLX_OML_sync_control -#define GLX_OML_sync_control 1 -GLAPI int GLAD_GLX_OML_sync_control; -typedef Bool (APIENTRYP PFNGLXGETSYNCVALUESOMLPROC)(Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc); -GLAPI PFNGLXGETSYNCVALUESOMLPROC glad_glXGetSyncValuesOML; -#define glXGetSyncValuesOML glad_glXGetSyncValuesOML -typedef Bool (APIENTRYP PFNGLXGETMSCRATEOMLPROC)(Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator); -GLAPI PFNGLXGETMSCRATEOMLPROC glad_glXGetMscRateOML; -#define glXGetMscRateOML glad_glXGetMscRateOML -typedef int64_t (APIENTRYP PFNGLXSWAPBUFFERSMSCOMLPROC)(Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); -GLAPI PFNGLXSWAPBUFFERSMSCOMLPROC glad_glXSwapBuffersMscOML; -#define glXSwapBuffersMscOML glad_glXSwapBuffersMscOML -typedef Bool (APIENTRYP PFNGLXWAITFORMSCOMLPROC)(Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc); -GLAPI PFNGLXWAITFORMSCOMLPROC glad_glXWaitForMscOML; -#define glXWaitForMscOML glad_glXWaitForMscOML -typedef Bool (APIENTRYP PFNGLXWAITFORSBCOMLPROC)(Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc); -GLAPI PFNGLXWAITFORSBCOMLPROC glad_glXWaitForSbcOML; -#define glXWaitForSbcOML glad_glXWaitForSbcOML -#endif -#ifndef GLX_SGIS_blended_overlay -#define GLX_SGIS_blended_overlay 1 -GLAPI int GLAD_GLX_SGIS_blended_overlay; -#endif -#ifndef GLX_SGIS_multisample -#define GLX_SGIS_multisample 1 -GLAPI int GLAD_GLX_SGIS_multisample; -#endif -#ifndef GLX_SGIS_shared_multisample -#define GLX_SGIS_shared_multisample 1 -GLAPI int GLAD_GLX_SGIS_shared_multisample; -#endif -#ifndef GLX_SGIX_dmbuffer -#define GLX_SGIX_dmbuffer 1 -GLAPI int GLAD_GLX_SGIX_dmbuffer; -#ifdef _DM_BUFFER_H_ -typedef Bool (APIENTRYP PFNGLXASSOCIATEDMPBUFFERSGIXPROC)(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer); -GLAPI PFNGLXASSOCIATEDMPBUFFERSGIXPROC glad_glXAssociateDMPbufferSGIX; -#define glXAssociateDMPbufferSGIX glad_glXAssociateDMPbufferSGIX -#endif -#endif -#ifndef GLX_SGIX_fbconfig -#define GLX_SGIX_fbconfig 1 -GLAPI int GLAD_GLX_SGIX_fbconfig; -typedef int (APIENTRYP PFNGLXGETFBCONFIGATTRIBSGIXPROC)(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value); -GLAPI PFNGLXGETFBCONFIGATTRIBSGIXPROC glad_glXGetFBConfigAttribSGIX; -#define glXGetFBConfigAttribSGIX glad_glXGetFBConfigAttribSGIX -typedef GLXFBConfigSGIX * (APIENTRYP PFNGLXCHOOSEFBCONFIGSGIXPROC)(Display *dpy, int screen, int *attrib_list, int *nelements); -GLAPI PFNGLXCHOOSEFBCONFIGSGIXPROC glad_glXChooseFBConfigSGIX; -#define glXChooseFBConfigSGIX glad_glXChooseFBConfigSGIX -typedef GLXPixmap (APIENTRYP PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap); -GLAPI PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC glad_glXCreateGLXPixmapWithConfigSGIX; -#define glXCreateGLXPixmapWithConfigSGIX glad_glXCreateGLXPixmapWithConfigSGIX -typedef GLXContext (APIENTRYP PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); -GLAPI PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC glad_glXCreateContextWithConfigSGIX; -#define glXCreateContextWithConfigSGIX glad_glXCreateContextWithConfigSGIX -typedef XVisualInfo * (APIENTRYP PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)(Display *dpy, GLXFBConfigSGIX config); -GLAPI PFNGLXGETVISUALFROMFBCONFIGSGIXPROC glad_glXGetVisualFromFBConfigSGIX; -#define glXGetVisualFromFBConfigSGIX glad_glXGetVisualFromFBConfigSGIX -typedef GLXFBConfigSGIX (APIENTRYP PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)(Display *dpy, XVisualInfo *vis); -GLAPI PFNGLXGETFBCONFIGFROMVISUALSGIXPROC glad_glXGetFBConfigFromVisualSGIX; -#define glXGetFBConfigFromVisualSGIX glad_glXGetFBConfigFromVisualSGIX -#endif -#ifndef GLX_SGIX_hyperpipe -#define GLX_SGIX_hyperpipe 1 -GLAPI int GLAD_GLX_SGIX_hyperpipe; -typedef GLXHyperpipeNetworkSGIX * (APIENTRYP PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)(Display *dpy, int *npipes); -GLAPI PFNGLXQUERYHYPERPIPENETWORKSGIXPROC glad_glXQueryHyperpipeNetworkSGIX; -#define glXQueryHyperpipeNetworkSGIX glad_glXQueryHyperpipeNetworkSGIX -typedef int (APIENTRYP PFNGLXHYPERPIPECONFIGSGIXPROC)(Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); -GLAPI PFNGLXHYPERPIPECONFIGSGIXPROC glad_glXHyperpipeConfigSGIX; -#define glXHyperpipeConfigSGIX glad_glXHyperpipeConfigSGIX -typedef GLXHyperpipeConfigSGIX * (APIENTRYP PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)(Display *dpy, int hpId, int *npipes); -GLAPI PFNGLXQUERYHYPERPIPECONFIGSGIXPROC glad_glXQueryHyperpipeConfigSGIX; -#define glXQueryHyperpipeConfigSGIX glad_glXQueryHyperpipeConfigSGIX -typedef int (APIENTRYP PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)(Display *dpy, int hpId); -GLAPI PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC glad_glXDestroyHyperpipeConfigSGIX; -#define glXDestroyHyperpipeConfigSGIX glad_glXDestroyHyperpipeConfigSGIX -typedef int (APIENTRYP PFNGLXBINDHYPERPIPESGIXPROC)(Display *dpy, int hpId); -GLAPI PFNGLXBINDHYPERPIPESGIXPROC glad_glXBindHyperpipeSGIX; -#define glXBindHyperpipeSGIX glad_glXBindHyperpipeSGIX -typedef int (APIENTRYP PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)(Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); -GLAPI PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC glad_glXQueryHyperpipeBestAttribSGIX; -#define glXQueryHyperpipeBestAttribSGIX glad_glXQueryHyperpipeBestAttribSGIX -typedef int (APIENTRYP PFNGLXHYPERPIPEATTRIBSGIXPROC)(Display *dpy, int timeSlice, int attrib, int size, void *attribList); -GLAPI PFNGLXHYPERPIPEATTRIBSGIXPROC glad_glXHyperpipeAttribSGIX; -#define glXHyperpipeAttribSGIX glad_glXHyperpipeAttribSGIX -typedef int (APIENTRYP PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)(Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); -GLAPI PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC glad_glXQueryHyperpipeAttribSGIX; -#define glXQueryHyperpipeAttribSGIX glad_glXQueryHyperpipeAttribSGIX -#endif -#ifndef GLX_SGIX_pbuffer -#define GLX_SGIX_pbuffer 1 -GLAPI int GLAD_GLX_SGIX_pbuffer; -typedef GLXPbufferSGIX (APIENTRYP PFNGLXCREATEGLXPBUFFERSGIXPROC)(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list); -GLAPI PFNGLXCREATEGLXPBUFFERSGIXPROC glad_glXCreateGLXPbufferSGIX; -#define glXCreateGLXPbufferSGIX glad_glXCreateGLXPbufferSGIX -typedef void (APIENTRYP PFNGLXDESTROYGLXPBUFFERSGIXPROC)(Display *dpy, GLXPbufferSGIX pbuf); -GLAPI PFNGLXDESTROYGLXPBUFFERSGIXPROC glad_glXDestroyGLXPbufferSGIX; -#define glXDestroyGLXPbufferSGIX glad_glXDestroyGLXPbufferSGIX -typedef void (APIENTRYP PFNGLXQUERYGLXPBUFFERSGIXPROC)(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value); -GLAPI PFNGLXQUERYGLXPBUFFERSGIXPROC glad_glXQueryGLXPbufferSGIX; -#define glXQueryGLXPbufferSGIX glad_glXQueryGLXPbufferSGIX -typedef void (APIENTRYP PFNGLXSELECTEVENTSGIXPROC)(Display *dpy, GLXDrawable drawable, unsigned long mask); -GLAPI PFNGLXSELECTEVENTSGIXPROC glad_glXSelectEventSGIX; -#define glXSelectEventSGIX glad_glXSelectEventSGIX -typedef void (APIENTRYP PFNGLXGETSELECTEDEVENTSGIXPROC)(Display *dpy, GLXDrawable drawable, unsigned long *mask); -GLAPI PFNGLXGETSELECTEDEVENTSGIXPROC glad_glXGetSelectedEventSGIX; -#define glXGetSelectedEventSGIX glad_glXGetSelectedEventSGIX -#endif -#ifndef GLX_SGIX_swap_barrier -#define GLX_SGIX_swap_barrier 1 -GLAPI int GLAD_GLX_SGIX_swap_barrier; -typedef void (APIENTRYP PFNGLXBINDSWAPBARRIERSGIXPROC)(Display *dpy, GLXDrawable drawable, int barrier); -GLAPI PFNGLXBINDSWAPBARRIERSGIXPROC glad_glXBindSwapBarrierSGIX; -#define glXBindSwapBarrierSGIX glad_glXBindSwapBarrierSGIX -typedef Bool (APIENTRYP PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)(Display *dpy, int screen, int *max); -GLAPI PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC glad_glXQueryMaxSwapBarriersSGIX; -#define glXQueryMaxSwapBarriersSGIX glad_glXQueryMaxSwapBarriersSGIX -#endif -#ifndef GLX_SGIX_swap_group -#define GLX_SGIX_swap_group 1 -GLAPI int GLAD_GLX_SGIX_swap_group; -typedef void (APIENTRYP PFNGLXJOINSWAPGROUPSGIXPROC)(Display *dpy, GLXDrawable drawable, GLXDrawable member); -GLAPI PFNGLXJOINSWAPGROUPSGIXPROC glad_glXJoinSwapGroupSGIX; -#define glXJoinSwapGroupSGIX glad_glXJoinSwapGroupSGIX -#endif -#ifndef GLX_SGIX_video_resize -#define GLX_SGIX_video_resize 1 -GLAPI int GLAD_GLX_SGIX_video_resize; -typedef int (APIENTRYP PFNGLXBINDCHANNELTOWINDOWSGIXPROC)(Display *display, int screen, int channel, Window window); -GLAPI PFNGLXBINDCHANNELTOWINDOWSGIXPROC glad_glXBindChannelToWindowSGIX; -#define glXBindChannelToWindowSGIX glad_glXBindChannelToWindowSGIX -typedef int (APIENTRYP PFNGLXCHANNELRECTSGIXPROC)(Display *display, int screen, int channel, int x, int y, int w, int h); -GLAPI PFNGLXCHANNELRECTSGIXPROC glad_glXChannelRectSGIX; -#define glXChannelRectSGIX glad_glXChannelRectSGIX -typedef int (APIENTRYP PFNGLXQUERYCHANNELRECTSGIXPROC)(Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); -GLAPI PFNGLXQUERYCHANNELRECTSGIXPROC glad_glXQueryChannelRectSGIX; -#define glXQueryChannelRectSGIX glad_glXQueryChannelRectSGIX -typedef int (APIENTRYP PFNGLXQUERYCHANNELDELTASSGIXPROC)(Display *display, int screen, int channel, int *x, int *y, int *w, int *h); -GLAPI PFNGLXQUERYCHANNELDELTASSGIXPROC glad_glXQueryChannelDeltasSGIX; -#define glXQueryChannelDeltasSGIX glad_glXQueryChannelDeltasSGIX -typedef int (APIENTRYP PFNGLXCHANNELRECTSYNCSGIXPROC)(Display *display, int screen, int channel, GLenum synctype); -GLAPI PFNGLXCHANNELRECTSYNCSGIXPROC glad_glXChannelRectSyncSGIX; -#define glXChannelRectSyncSGIX glad_glXChannelRectSyncSGIX -#endif -#ifndef GLX_SGIX_video_source -#define GLX_SGIX_video_source 1 -GLAPI int GLAD_GLX_SGIX_video_source; -#ifdef _VL_H_ -typedef GLXVideoSourceSGIX (APIENTRYP PFNGLXCREATEGLXVIDEOSOURCESGIXPROC)(Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode); -GLAPI PFNGLXCREATEGLXVIDEOSOURCESGIXPROC glad_glXCreateGLXVideoSourceSGIX; -#define glXCreateGLXVideoSourceSGIX glad_glXCreateGLXVideoSourceSGIX -typedef void (APIENTRYP PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC)(Display *dpy, GLXVideoSourceSGIX glxvideosource); -GLAPI PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC glad_glXDestroyGLXVideoSourceSGIX; -#define glXDestroyGLXVideoSourceSGIX glad_glXDestroyGLXVideoSourceSGIX -#endif -#endif -#ifndef GLX_SGIX_visual_select_group -#define GLX_SGIX_visual_select_group 1 -GLAPI int GLAD_GLX_SGIX_visual_select_group; -#endif -#ifndef GLX_SGI_cushion -#define GLX_SGI_cushion 1 -GLAPI int GLAD_GLX_SGI_cushion; -typedef void (APIENTRYP PFNGLXCUSHIONSGIPROC)(Display *dpy, Window window, float cushion); -GLAPI PFNGLXCUSHIONSGIPROC glad_glXCushionSGI; -#define glXCushionSGI glad_glXCushionSGI -#endif -#ifndef GLX_SGI_make_current_read -#define GLX_SGI_make_current_read 1 -GLAPI int GLAD_GLX_SGI_make_current_read; -typedef Bool (APIENTRYP PFNGLXMAKECURRENTREADSGIPROC)(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); -GLAPI PFNGLXMAKECURRENTREADSGIPROC glad_glXMakeCurrentReadSGI; -#define glXMakeCurrentReadSGI glad_glXMakeCurrentReadSGI -typedef GLXDrawable (APIENTRYP PFNGLXGETCURRENTREADDRAWABLESGIPROC)(void); -GLAPI PFNGLXGETCURRENTREADDRAWABLESGIPROC glad_glXGetCurrentReadDrawableSGI; -#define glXGetCurrentReadDrawableSGI glad_glXGetCurrentReadDrawableSGI -#endif -#ifndef GLX_SGI_swap_control -#define GLX_SGI_swap_control 1 -GLAPI int GLAD_GLX_SGI_swap_control; -typedef int (APIENTRYP PFNGLXSWAPINTERVALSGIPROC)(int interval); -GLAPI PFNGLXSWAPINTERVALSGIPROC glad_glXSwapIntervalSGI; -#define glXSwapIntervalSGI glad_glXSwapIntervalSGI -#endif -#ifndef GLX_SGI_video_sync -#define GLX_SGI_video_sync 1 -GLAPI int GLAD_GLX_SGI_video_sync; -typedef int (APIENTRYP PFNGLXGETVIDEOSYNCSGIPROC)(unsigned int *count); -GLAPI PFNGLXGETVIDEOSYNCSGIPROC glad_glXGetVideoSyncSGI; -#define glXGetVideoSyncSGI glad_glXGetVideoSyncSGI -typedef int (APIENTRYP PFNGLXWAITVIDEOSYNCSGIPROC)(int divisor, int remainder, unsigned int *count); -GLAPI PFNGLXWAITVIDEOSYNCSGIPROC glad_glXWaitVideoSyncSGI; -#define glXWaitVideoSyncSGI glad_glXWaitVideoSyncSGI -#endif -#ifndef GLX_SUN_get_transparent_index -#define GLX_SUN_get_transparent_index 1 -GLAPI int GLAD_GLX_SUN_get_transparent_index; -typedef Status (APIENTRYP PFNGLXGETTRANSPARENTINDEXSUNPROC)(Display *dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex); -GLAPI PFNGLXGETTRANSPARENTINDEXSUNPROC glad_glXGetTransparentIndexSUN; -#define glXGetTransparentIndexSUN glad_glXGetTransparentIndexSUN -#endif - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/third_party/glad/include/glad/glad_wgl.h b/third_party/glad/include/glad/glad_wgl.h deleted file mode 100644 index b41eae75..00000000 --- a/third_party/glad/include/glad/glad_wgl.h +++ /dev/null @@ -1,1014 +0,0 @@ -/* - - WGL loader generated by glad 0.1.33 on Sun May 3 16:49:27 2020. - - Language/Generator: C/C++ - Specification: wgl - APIs: wgl=1.0 - Profile: - - Extensions: - WGL_3DFX_multisample, - WGL_3DL_stereo_control, - WGL_AMD_gpu_association, - WGL_ARB_buffer_region, - WGL_ARB_context_flush_control, - WGL_ARB_create_context, - WGL_ARB_create_context_no_error, - WGL_ARB_create_context_profile, - WGL_ARB_create_context_robustness, - WGL_ARB_extensions_string, - WGL_ARB_framebuffer_sRGB, - WGL_ARB_make_current_read, - WGL_ARB_multisample, - WGL_ARB_pbuffer, - WGL_ARB_pixel_format, - WGL_ARB_pixel_format_float, - WGL_ARB_render_texture, - WGL_ARB_robustness_application_isolation, - WGL_ARB_robustness_share_group_isolation, - WGL_ATI_pixel_format_float, - WGL_ATI_render_texture_rectangle, - WGL_EXT_colorspace, - WGL_EXT_create_context_es2_profile, - WGL_EXT_create_context_es_profile, - WGL_EXT_depth_float, - WGL_EXT_display_color_table, - WGL_EXT_extensions_string, - WGL_EXT_framebuffer_sRGB, - WGL_EXT_make_current_read, - WGL_EXT_multisample, - WGL_EXT_pbuffer, - WGL_EXT_pixel_format, - WGL_EXT_pixel_format_packed_float, - WGL_EXT_swap_control, - WGL_EXT_swap_control_tear, - WGL_I3D_digital_video_control, - WGL_I3D_gamma, - WGL_I3D_genlock, - WGL_I3D_image_buffer, - WGL_I3D_swap_frame_lock, - WGL_I3D_swap_frame_usage, - WGL_NV_DX_interop, - WGL_NV_DX_interop2, - WGL_NV_copy_image, - WGL_NV_delay_before_swap, - WGL_NV_float_buffer, - WGL_NV_gpu_affinity, - WGL_NV_multigpu_context, - WGL_NV_multisample_coverage, - WGL_NV_present_video, - WGL_NV_render_depth_texture, - WGL_NV_render_texture_rectangle, - WGL_NV_swap_group, - WGL_NV_vertex_array_range, - WGL_NV_video_capture, - WGL_NV_video_output, - WGL_OML_sync_control - Loader: True - Local files: False - Omit khrplatform: False - Reproducible: False - - Commandline: - --api="wgl=1.0" --generator="c" --spec="wgl" --extensions="WGL_3DFX_multisample,WGL_3DL_stereo_control,WGL_AMD_gpu_association,WGL_ARB_buffer_region,WGL_ARB_context_flush_control,WGL_ARB_create_context,WGL_ARB_create_context_no_error,WGL_ARB_create_context_profile,WGL_ARB_create_context_robustness,WGL_ARB_extensions_string,WGL_ARB_framebuffer_sRGB,WGL_ARB_make_current_read,WGL_ARB_multisample,WGL_ARB_pbuffer,WGL_ARB_pixel_format,WGL_ARB_pixel_format_float,WGL_ARB_render_texture,WGL_ARB_robustness_application_isolation,WGL_ARB_robustness_share_group_isolation,WGL_ATI_pixel_format_float,WGL_ATI_render_texture_rectangle,WGL_EXT_colorspace,WGL_EXT_create_context_es2_profile,WGL_EXT_create_context_es_profile,WGL_EXT_depth_float,WGL_EXT_display_color_table,WGL_EXT_extensions_string,WGL_EXT_framebuffer_sRGB,WGL_EXT_make_current_read,WGL_EXT_multisample,WGL_EXT_pbuffer,WGL_EXT_pixel_format,WGL_EXT_pixel_format_packed_float,WGL_EXT_swap_control,WGL_EXT_swap_control_tear,WGL_I3D_digital_video_control,WGL_I3D_gamma,WGL_I3D_genlock,WGL_I3D_image_buffer,WGL_I3D_swap_frame_lock,WGL_I3D_swap_frame_usage,WGL_NV_DX_interop,WGL_NV_DX_interop2,WGL_NV_copy_image,WGL_NV_delay_before_swap,WGL_NV_float_buffer,WGL_NV_gpu_affinity,WGL_NV_multigpu_context,WGL_NV_multisample_coverage,WGL_NV_present_video,WGL_NV_render_depth_texture,WGL_NV_render_texture_rectangle,WGL_NV_swap_group,WGL_NV_vertex_array_range,WGL_NV_video_capture,WGL_NV_video_output,WGL_OML_sync_control" - Online: - Too many extensions -*/ - - -#ifndef WINAPI -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#ifndef NOMINMAX -#define NOMINMAX 1 -#endif -#include -#endif - -#include - -#ifndef __glad_wglext_h_ - -#ifdef __wglext_h_ -#error WGL header already included, remove this include, glad already provides it -#endif - -#define __glad_wglext_h_ -#define __wglext_h_ - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* (* GLADloadproc)(const char *name); - -#ifndef GLAPI -# if defined(GLAD_GLAPI_EXPORT) -# if defined(_WIN32) || defined(__CYGWIN__) -# if defined(GLAD_GLAPI_EXPORT_BUILD) -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllexport)) extern -# else -# define GLAPI __declspec(dllexport) extern -# endif -# else -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllimport)) extern -# else -# define GLAPI __declspec(dllimport) extern -# endif -# endif -# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) -# define GLAPI __attribute__ ((visibility ("default"))) extern -# else -# define GLAPI extern -# endif -# else -# define GLAPI extern -# endif -#endif - -GLAPI int gladLoadWGL(HDC hdc); - -GLAPI int gladLoadWGLLoader(GLADloadproc, HDC hdc); - -struct _GPU_DEVICE { - DWORD cb; - CHAR DeviceName[32]; - CHAR DeviceString[128]; - DWORD Flags; - RECT rcVirtualScreen; -}; -DECLARE_HANDLE(HPBUFFERARB); -DECLARE_HANDLE(HPBUFFEREXT); -DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); -DECLARE_HANDLE(HPVIDEODEV); -DECLARE_HANDLE(HPGPUNV); -DECLARE_HANDLE(HGPUNV); -DECLARE_HANDLE(HVIDEOINPUTDEVICENV); -typedef struct _GPU_DEVICE GPU_DEVICE; -typedef struct _GPU_DEVICE *PGPU_DEVICE; -#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 -#define WGL_SAMPLES_3DFX 0x2061 -#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 -#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 -#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 -#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 -#define WGL_GPU_VENDOR_AMD 0x1F00 -#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 -#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 -#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 -#define WGL_GPU_RAM_AMD 0x21A3 -#define WGL_GPU_CLOCK_AMD 0x21A4 -#define WGL_GPU_NUM_PIPES_AMD 0x21A5 -#define WGL_GPU_NUM_SIMD_AMD 0x21A6 -#define WGL_GPU_NUM_RB_AMD 0x21A7 -#define WGL_GPU_NUM_SPI_AMD 0x21A8 -#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 -#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 -#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 -#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 -#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 -#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 -#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 -#define ERROR_INVALID_VERSION_ARB 0x2095 -#define WGL_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3 -#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 -#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define ERROR_INVALID_PROFILE_ARB 0x2096 -#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 -#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 -#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 -#define WGL_DRAW_TO_PBUFFER_ARB 0x202D -#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E -#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 -#define WGL_PBUFFER_LARGEST_ARB 0x2033 -#define WGL_PBUFFER_WIDTH_ARB 0x2034 -#define WGL_PBUFFER_HEIGHT_ARB 0x2035 -#define WGL_PBUFFER_LOST_ARB 0x2036 -#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_DRAW_TO_BITMAP_ARB 0x2002 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_NEED_PALETTE_ARB 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 -#define WGL_SWAP_METHOD_ARB 0x2007 -#define WGL_NUMBER_OVERLAYS_ARB 0x2008 -#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 -#define WGL_TRANSPARENT_ARB 0x200A -#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 -#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 -#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 -#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A -#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B -#define WGL_SHARE_DEPTH_ARB 0x200C -#define WGL_SHARE_STENCIL_ARB 0x200D -#define WGL_SHARE_ACCUM_ARB 0x200E -#define WGL_SUPPORT_GDI_ARB 0x200F -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_STEREO_ARB 0x2012 -#define WGL_PIXEL_TYPE_ARB 0x2013 -#define WGL_COLOR_BITS_ARB 0x2014 -#define WGL_RED_BITS_ARB 0x2015 -#define WGL_RED_SHIFT_ARB 0x2016 -#define WGL_GREEN_BITS_ARB 0x2017 -#define WGL_GREEN_SHIFT_ARB 0x2018 -#define WGL_BLUE_BITS_ARB 0x2019 -#define WGL_BLUE_SHIFT_ARB 0x201A -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_ALPHA_SHIFT_ARB 0x201C -#define WGL_ACCUM_BITS_ARB 0x201D -#define WGL_ACCUM_RED_BITS_ARB 0x201E -#define WGL_ACCUM_GREEN_BITS_ARB 0x201F -#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 -#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 -#define WGL_DEPTH_BITS_ARB 0x2022 -#define WGL_STENCIL_BITS_ARB 0x2023 -#define WGL_AUX_BUFFERS_ARB 0x2024 -#define WGL_NO_ACCELERATION_ARB 0x2025 -#define WGL_GENERIC_ACCELERATION_ARB 0x2026 -#define WGL_FULL_ACCELERATION_ARB 0x2027 -#define WGL_SWAP_EXCHANGE_ARB 0x2028 -#define WGL_SWAP_COPY_ARB 0x2029 -#define WGL_SWAP_UNDEFINED_ARB 0x202A -#define WGL_TYPE_RGBA_ARB 0x202B -#define WGL_TYPE_COLORINDEX_ARB 0x202C -#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 -#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 -#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 -#define WGL_TEXTURE_FORMAT_ARB 0x2072 -#define WGL_TEXTURE_TARGET_ARB 0x2073 -#define WGL_MIPMAP_TEXTURE_ARB 0x2074 -#define WGL_TEXTURE_RGB_ARB 0x2075 -#define WGL_TEXTURE_RGBA_ARB 0x2076 -#define WGL_NO_TEXTURE_ARB 0x2077 -#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 -#define WGL_TEXTURE_1D_ARB 0x2079 -#define WGL_TEXTURE_2D_ARB 0x207A -#define WGL_MIPMAP_LEVEL_ARB 0x207B -#define WGL_CUBE_MAP_FACE_ARB 0x207C -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 -#define WGL_FRONT_LEFT_ARB 0x2083 -#define WGL_FRONT_RIGHT_ARB 0x2084 -#define WGL_BACK_LEFT_ARB 0x2085 -#define WGL_BACK_RIGHT_ARB 0x2086 -#define WGL_AUX0_ARB 0x2087 -#define WGL_AUX1_ARB 0x2088 -#define WGL_AUX2_ARB 0x2089 -#define WGL_AUX3_ARB 0x208A -#define WGL_AUX4_ARB 0x208B -#define WGL_AUX5_ARB 0x208C -#define WGL_AUX6_ARB 0x208D -#define WGL_AUX7_ARB 0x208E -#define WGL_AUX8_ARB 0x208F -#define WGL_AUX9_ARB 0x2090 -#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 -#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 -#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 -#define WGL_COLORSPACE_EXT 0x309D -#define WGL_COLORSPACE_SRGB_EXT 0x3089 -#define WGL_COLORSPACE_LINEAR_EXT 0x308A -#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 -#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 -#define WGL_DEPTH_FLOAT_EXT 0x2040 -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 -#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 -#define WGL_SAMPLE_BUFFERS_EXT 0x2041 -#define WGL_SAMPLES_EXT 0x2042 -#define WGL_DRAW_TO_PBUFFER_EXT 0x202D -#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E -#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 -#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 -#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 -#define WGL_PBUFFER_LARGEST_EXT 0x2033 -#define WGL_PBUFFER_WIDTH_EXT 0x2034 -#define WGL_PBUFFER_HEIGHT_EXT 0x2035 -#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 -#define WGL_DRAW_TO_WINDOW_EXT 0x2001 -#define WGL_DRAW_TO_BITMAP_EXT 0x2002 -#define WGL_ACCELERATION_EXT 0x2003 -#define WGL_NEED_PALETTE_EXT 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 -#define WGL_SWAP_METHOD_EXT 0x2007 -#define WGL_NUMBER_OVERLAYS_EXT 0x2008 -#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 -#define WGL_TRANSPARENT_EXT 0x200A -#define WGL_TRANSPARENT_VALUE_EXT 0x200B -#define WGL_SHARE_DEPTH_EXT 0x200C -#define WGL_SHARE_STENCIL_EXT 0x200D -#define WGL_SHARE_ACCUM_EXT 0x200E -#define WGL_SUPPORT_GDI_EXT 0x200F -#define WGL_SUPPORT_OPENGL_EXT 0x2010 -#define WGL_DOUBLE_BUFFER_EXT 0x2011 -#define WGL_STEREO_EXT 0x2012 -#define WGL_PIXEL_TYPE_EXT 0x2013 -#define WGL_COLOR_BITS_EXT 0x2014 -#define WGL_RED_BITS_EXT 0x2015 -#define WGL_RED_SHIFT_EXT 0x2016 -#define WGL_GREEN_BITS_EXT 0x2017 -#define WGL_GREEN_SHIFT_EXT 0x2018 -#define WGL_BLUE_BITS_EXT 0x2019 -#define WGL_BLUE_SHIFT_EXT 0x201A -#define WGL_ALPHA_BITS_EXT 0x201B -#define WGL_ALPHA_SHIFT_EXT 0x201C -#define WGL_ACCUM_BITS_EXT 0x201D -#define WGL_ACCUM_RED_BITS_EXT 0x201E -#define WGL_ACCUM_GREEN_BITS_EXT 0x201F -#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 -#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 -#define WGL_DEPTH_BITS_EXT 0x2022 -#define WGL_STENCIL_BITS_EXT 0x2023 -#define WGL_AUX_BUFFERS_EXT 0x2024 -#define WGL_NO_ACCELERATION_EXT 0x2025 -#define WGL_GENERIC_ACCELERATION_EXT 0x2026 -#define WGL_FULL_ACCELERATION_EXT 0x2027 -#define WGL_SWAP_EXCHANGE_EXT 0x2028 -#define WGL_SWAP_COPY_EXT 0x2029 -#define WGL_SWAP_UNDEFINED_EXT 0x202A -#define WGL_TYPE_RGBA_EXT 0x202B -#define WGL_TYPE_COLORINDEX_EXT 0x202C -#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 -#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 -#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 -#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E -#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F -#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 -#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 -#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 -#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 -#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 -#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 -#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A -#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B -#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C -#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 -#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 -#define WGL_ACCESS_READ_ONLY_NV 0x00000000 -#define WGL_ACCESS_READ_WRITE_NV 0x00000001 -#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 -#define WGL_FLOAT_COMPONENTS_NV 0x20B0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 -#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 -#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 -#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 -#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 -#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 -#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 -#define WGL_CONTEXT_MULTIGPU_ATTRIB_NV 0x20AA -#define WGL_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV 0x20AB -#define WGL_CONTEXT_MULTIGPU_ATTRIB_AFR_NV 0x20AC -#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV 0x20AD -#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE -#define WGL_COVERAGE_SAMPLES_NV 0x2042 -#define WGL_COLOR_SAMPLES_NV 0x20B9 -#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 -#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 -#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 -#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 -#define WGL_DEPTH_COMPONENT_NV 0x20A7 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 -#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 -#define WGL_UNIQUE_ID_NV 0x20CE -#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF -#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 -#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 -#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 -#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 -#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 -#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 -#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 -#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 -#define WGL_VIDEO_OUT_FRAME 0x20C8 -#define WGL_VIDEO_OUT_FIELD_1 0x20C9 -#define WGL_VIDEO_OUT_FIELD_2 0x20CA -#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB -#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC -#ifndef WGL_3DFX_multisample -#define WGL_3DFX_multisample 1 -GLAPI int GLAD_WGL_3DFX_multisample; -#endif -#ifndef WGL_3DL_stereo_control -#define WGL_3DL_stereo_control 1 -GLAPI int GLAD_WGL_3DL_stereo_control; -typedef BOOL (APIENTRYP PFNWGLSETSTEREOEMITTERSTATE3DLPROC)(HDC hDC, UINT uState); -GLAPI PFNWGLSETSTEREOEMITTERSTATE3DLPROC glad_wglSetStereoEmitterState3DL; -#define wglSetStereoEmitterState3DL glad_wglSetStereoEmitterState3DL -#endif -#ifndef WGL_AMD_gpu_association -#define WGL_AMD_gpu_association 1 -GLAPI int GLAD_WGL_AMD_gpu_association; -typedef UINT (APIENTRYP PFNWGLGETGPUIDSAMDPROC)(UINT maxCount, UINT *ids); -GLAPI PFNWGLGETGPUIDSAMDPROC glad_wglGetGPUIDsAMD; -#define wglGetGPUIDsAMD glad_wglGetGPUIDsAMD -typedef INT (APIENTRYP PFNWGLGETGPUINFOAMDPROC)(UINT id, INT property, GLenum dataType, UINT size, void *data); -GLAPI PFNWGLGETGPUINFOAMDPROC glad_wglGetGPUInfoAMD; -#define wglGetGPUInfoAMD glad_wglGetGPUInfoAMD -typedef UINT (APIENTRYP PFNWGLGETCONTEXTGPUIDAMDPROC)(HGLRC hglrc); -GLAPI PFNWGLGETCONTEXTGPUIDAMDPROC glad_wglGetContextGPUIDAMD; -#define wglGetContextGPUIDAMD glad_wglGetContextGPUIDAMD -typedef HGLRC (APIENTRYP PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)(UINT id); -GLAPI PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC glad_wglCreateAssociatedContextAMD; -#define wglCreateAssociatedContextAMD glad_wglCreateAssociatedContextAMD -typedef HGLRC (APIENTRYP PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(UINT id, HGLRC hShareContext, const int *attribList); -GLAPI PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC glad_wglCreateAssociatedContextAttribsAMD; -#define wglCreateAssociatedContextAttribsAMD glad_wglCreateAssociatedContextAttribsAMD -typedef BOOL (APIENTRYP PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)(HGLRC hglrc); -GLAPI PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC glad_wglDeleteAssociatedContextAMD; -#define wglDeleteAssociatedContextAMD glad_wglDeleteAssociatedContextAMD -typedef BOOL (APIENTRYP PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(HGLRC hglrc); -GLAPI PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC glad_wglMakeAssociatedContextCurrentAMD; -#define wglMakeAssociatedContextCurrentAMD glad_wglMakeAssociatedContextCurrentAMD -typedef HGLRC (APIENTRYP PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); -GLAPI PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC glad_wglGetCurrentAssociatedContextAMD; -#define wglGetCurrentAssociatedContextAMD glad_wglGetCurrentAssociatedContextAMD -typedef VOID (APIENTRYP PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)(HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC glad_wglBlitContextFramebufferAMD; -#define wglBlitContextFramebufferAMD glad_wglBlitContextFramebufferAMD -#endif -#ifndef WGL_ARB_buffer_region -#define WGL_ARB_buffer_region 1 -GLAPI int GLAD_WGL_ARB_buffer_region; -typedef HANDLE (APIENTRYP PFNWGLCREATEBUFFERREGIONARBPROC)(HDC hDC, int iLayerPlane, UINT uType); -GLAPI PFNWGLCREATEBUFFERREGIONARBPROC glad_wglCreateBufferRegionARB; -#define wglCreateBufferRegionARB glad_wglCreateBufferRegionARB -typedef VOID (APIENTRYP PFNWGLDELETEBUFFERREGIONARBPROC)(HANDLE hRegion); -GLAPI PFNWGLDELETEBUFFERREGIONARBPROC glad_wglDeleteBufferRegionARB; -#define wglDeleteBufferRegionARB glad_wglDeleteBufferRegionARB -typedef BOOL (APIENTRYP PFNWGLSAVEBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height); -GLAPI PFNWGLSAVEBUFFERREGIONARBPROC glad_wglSaveBufferRegionARB; -#define wglSaveBufferRegionARB glad_wglSaveBufferRegionARB -typedef BOOL (APIENTRYP PFNWGLRESTOREBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); -GLAPI PFNWGLRESTOREBUFFERREGIONARBPROC glad_wglRestoreBufferRegionARB; -#define wglRestoreBufferRegionARB glad_wglRestoreBufferRegionARB -#endif -#ifndef WGL_ARB_context_flush_control -#define WGL_ARB_context_flush_control 1 -GLAPI int GLAD_WGL_ARB_context_flush_control; -#endif -#ifndef WGL_ARB_create_context -#define WGL_ARB_create_context 1 -GLAPI int GLAD_WGL_ARB_create_context; -typedef HGLRC (APIENTRYP PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC hDC, HGLRC hShareContext, const int *attribList); -GLAPI PFNWGLCREATECONTEXTATTRIBSARBPROC glad_wglCreateContextAttribsARB; -#define wglCreateContextAttribsARB glad_wglCreateContextAttribsARB -#endif -#ifndef WGL_ARB_create_context_no_error -#define WGL_ARB_create_context_no_error 1 -GLAPI int GLAD_WGL_ARB_create_context_no_error; -#endif -#ifndef WGL_ARB_create_context_profile -#define WGL_ARB_create_context_profile 1 -GLAPI int GLAD_WGL_ARB_create_context_profile; -#endif -#ifndef WGL_ARB_create_context_robustness -#define WGL_ARB_create_context_robustness 1 -GLAPI int GLAD_WGL_ARB_create_context_robustness; -#endif -#ifndef WGL_ARB_extensions_string -#define WGL_ARB_extensions_string 1 -GLAPI int GLAD_WGL_ARB_extensions_string; -typedef const char * (APIENTRYP PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc); -GLAPI PFNWGLGETEXTENSIONSSTRINGARBPROC glad_wglGetExtensionsStringARB; -#define wglGetExtensionsStringARB glad_wglGetExtensionsStringARB -#endif -#ifndef WGL_ARB_framebuffer_sRGB -#define WGL_ARB_framebuffer_sRGB 1 -GLAPI int GLAD_WGL_ARB_framebuffer_sRGB; -#endif -#ifndef WGL_ARB_make_current_read -#define WGL_ARB_make_current_read 1 -GLAPI int GLAD_WGL_ARB_make_current_read; -typedef BOOL (APIENTRYP PFNWGLMAKECONTEXTCURRENTARBPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); -GLAPI PFNWGLMAKECONTEXTCURRENTARBPROC glad_wglMakeContextCurrentARB; -#define wglMakeContextCurrentARB glad_wglMakeContextCurrentARB -typedef HDC (APIENTRYP PFNWGLGETCURRENTREADDCARBPROC)(void); -GLAPI PFNWGLGETCURRENTREADDCARBPROC glad_wglGetCurrentReadDCARB; -#define wglGetCurrentReadDCARB glad_wglGetCurrentReadDCARB -#endif -#ifndef WGL_ARB_multisample -#define WGL_ARB_multisample 1 -GLAPI int GLAD_WGL_ARB_multisample; -#endif -#ifndef WGL_ARB_pbuffer -#define WGL_ARB_pbuffer 1 -GLAPI int GLAD_WGL_ARB_pbuffer; -typedef HPBUFFERARB (APIENTRYP PFNWGLCREATEPBUFFERARBPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); -GLAPI PFNWGLCREATEPBUFFERARBPROC glad_wglCreatePbufferARB; -#define wglCreatePbufferARB glad_wglCreatePbufferARB -typedef HDC (APIENTRYP PFNWGLGETPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer); -GLAPI PFNWGLGETPBUFFERDCARBPROC glad_wglGetPbufferDCARB; -#define wglGetPbufferDCARB glad_wglGetPbufferDCARB -typedef int (APIENTRYP PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer, HDC hDC); -GLAPI PFNWGLRELEASEPBUFFERDCARBPROC glad_wglReleasePbufferDCARB; -#define wglReleasePbufferDCARB glad_wglReleasePbufferDCARB -typedef BOOL (APIENTRYP PFNWGLDESTROYPBUFFERARBPROC)(HPBUFFERARB hPbuffer); -GLAPI PFNWGLDESTROYPBUFFERARBPROC glad_wglDestroyPbufferARB; -#define wglDestroyPbufferARB glad_wglDestroyPbufferARB -typedef BOOL (APIENTRYP PFNWGLQUERYPBUFFERARBPROC)(HPBUFFERARB hPbuffer, int iAttribute, int *piValue); -GLAPI PFNWGLQUERYPBUFFERARBPROC glad_wglQueryPbufferARB; -#define wglQueryPbufferARB glad_wglQueryPbufferARB -#endif -#ifndef WGL_ARB_pixel_format -#define WGL_ARB_pixel_format 1 -GLAPI int GLAD_WGL_ARB_pixel_format; -typedef BOOL (APIENTRYP PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); -GLAPI PFNWGLGETPIXELFORMATATTRIBIVARBPROC glad_wglGetPixelFormatAttribivARB; -#define wglGetPixelFormatAttribivARB glad_wglGetPixelFormatAttribivARB -typedef BOOL (APIENTRYP PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); -GLAPI PFNWGLGETPIXELFORMATATTRIBFVARBPROC glad_wglGetPixelFormatAttribfvARB; -#define wglGetPixelFormatAttribfvARB glad_wglGetPixelFormatAttribfvARB -typedef BOOL (APIENTRYP PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -GLAPI PFNWGLCHOOSEPIXELFORMATARBPROC glad_wglChoosePixelFormatARB; -#define wglChoosePixelFormatARB glad_wglChoosePixelFormatARB -#endif -#ifndef WGL_ARB_pixel_format_float -#define WGL_ARB_pixel_format_float 1 -GLAPI int GLAD_WGL_ARB_pixel_format_float; -#endif -#ifndef WGL_ARB_render_texture -#define WGL_ARB_render_texture 1 -GLAPI int GLAD_WGL_ARB_render_texture; -typedef BOOL (APIENTRYP PFNWGLBINDTEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); -GLAPI PFNWGLBINDTEXIMAGEARBPROC glad_wglBindTexImageARB; -#define wglBindTexImageARB glad_wglBindTexImageARB -typedef BOOL (APIENTRYP PFNWGLRELEASETEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); -GLAPI PFNWGLRELEASETEXIMAGEARBPROC glad_wglReleaseTexImageARB; -#define wglReleaseTexImageARB glad_wglReleaseTexImageARB -typedef BOOL (APIENTRYP PFNWGLSETPBUFFERATTRIBARBPROC)(HPBUFFERARB hPbuffer, const int *piAttribList); -GLAPI PFNWGLSETPBUFFERATTRIBARBPROC glad_wglSetPbufferAttribARB; -#define wglSetPbufferAttribARB glad_wglSetPbufferAttribARB -#endif -#ifndef WGL_ARB_robustness_application_isolation -#define WGL_ARB_robustness_application_isolation 1 -GLAPI int GLAD_WGL_ARB_robustness_application_isolation; -#endif -#ifndef WGL_ARB_robustness_share_group_isolation -#define WGL_ARB_robustness_share_group_isolation 1 -GLAPI int GLAD_WGL_ARB_robustness_share_group_isolation; -#endif -#ifndef WGL_ATI_pixel_format_float -#define WGL_ATI_pixel_format_float 1 -GLAPI int GLAD_WGL_ATI_pixel_format_float; -#endif -#ifndef WGL_ATI_render_texture_rectangle -#define WGL_ATI_render_texture_rectangle 1 -GLAPI int GLAD_WGL_ATI_render_texture_rectangle; -#endif -#ifndef WGL_EXT_colorspace -#define WGL_EXT_colorspace 1 -GLAPI int GLAD_WGL_EXT_colorspace; -#endif -#ifndef WGL_EXT_create_context_es2_profile -#define WGL_EXT_create_context_es2_profile 1 -GLAPI int GLAD_WGL_EXT_create_context_es2_profile; -#endif -#ifndef WGL_EXT_create_context_es_profile -#define WGL_EXT_create_context_es_profile 1 -GLAPI int GLAD_WGL_EXT_create_context_es_profile; -#endif -#ifndef WGL_EXT_depth_float -#define WGL_EXT_depth_float 1 -GLAPI int GLAD_WGL_EXT_depth_float; -#endif -#ifndef WGL_EXT_display_color_table -#define WGL_EXT_display_color_table 1 -GLAPI int GLAD_WGL_EXT_display_color_table; -typedef GLboolean (APIENTRYP PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)(GLushort id); -GLAPI PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC glad_wglCreateDisplayColorTableEXT; -#define wglCreateDisplayColorTableEXT glad_wglCreateDisplayColorTableEXT -typedef GLboolean (APIENTRYP PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)(const GLushort *table, GLuint length); -GLAPI PFNWGLLOADDISPLAYCOLORTABLEEXTPROC glad_wglLoadDisplayColorTableEXT; -#define wglLoadDisplayColorTableEXT glad_wglLoadDisplayColorTableEXT -typedef GLboolean (APIENTRYP PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)(GLushort id); -GLAPI PFNWGLBINDDISPLAYCOLORTABLEEXTPROC glad_wglBindDisplayColorTableEXT; -#define wglBindDisplayColorTableEXT glad_wglBindDisplayColorTableEXT -typedef VOID (APIENTRYP PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)(GLushort id); -GLAPI PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC glad_wglDestroyDisplayColorTableEXT; -#define wglDestroyDisplayColorTableEXT glad_wglDestroyDisplayColorTableEXT -#endif -#ifndef WGL_EXT_extensions_string -#define WGL_EXT_extensions_string 1 -GLAPI int GLAD_WGL_EXT_extensions_string; -typedef const char * (APIENTRYP PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void); -GLAPI PFNWGLGETEXTENSIONSSTRINGEXTPROC glad_wglGetExtensionsStringEXT; -#define wglGetExtensionsStringEXT glad_wglGetExtensionsStringEXT -#endif -#ifndef WGL_EXT_framebuffer_sRGB -#define WGL_EXT_framebuffer_sRGB 1 -GLAPI int GLAD_WGL_EXT_framebuffer_sRGB; -#endif -#ifndef WGL_EXT_make_current_read -#define WGL_EXT_make_current_read 1 -GLAPI int GLAD_WGL_EXT_make_current_read; -typedef BOOL (APIENTRYP PFNWGLMAKECONTEXTCURRENTEXTPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); -GLAPI PFNWGLMAKECONTEXTCURRENTEXTPROC glad_wglMakeContextCurrentEXT; -#define wglMakeContextCurrentEXT glad_wglMakeContextCurrentEXT -typedef HDC (APIENTRYP PFNWGLGETCURRENTREADDCEXTPROC)(void); -GLAPI PFNWGLGETCURRENTREADDCEXTPROC glad_wglGetCurrentReadDCEXT; -#define wglGetCurrentReadDCEXT glad_wglGetCurrentReadDCEXT -#endif -#ifndef WGL_EXT_multisample -#define WGL_EXT_multisample 1 -GLAPI int GLAD_WGL_EXT_multisample; -#endif -#ifndef WGL_EXT_pbuffer -#define WGL_EXT_pbuffer 1 -GLAPI int GLAD_WGL_EXT_pbuffer; -typedef HPBUFFEREXT (APIENTRYP PFNWGLCREATEPBUFFEREXTPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); -GLAPI PFNWGLCREATEPBUFFEREXTPROC glad_wglCreatePbufferEXT; -#define wglCreatePbufferEXT glad_wglCreatePbufferEXT -typedef HDC (APIENTRYP PFNWGLGETPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer); -GLAPI PFNWGLGETPBUFFERDCEXTPROC glad_wglGetPbufferDCEXT; -#define wglGetPbufferDCEXT glad_wglGetPbufferDCEXT -typedef int (APIENTRYP PFNWGLRELEASEPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer, HDC hDC); -GLAPI PFNWGLRELEASEPBUFFERDCEXTPROC glad_wglReleasePbufferDCEXT; -#define wglReleasePbufferDCEXT glad_wglReleasePbufferDCEXT -typedef BOOL (APIENTRYP PFNWGLDESTROYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer); -GLAPI PFNWGLDESTROYPBUFFEREXTPROC glad_wglDestroyPbufferEXT; -#define wglDestroyPbufferEXT glad_wglDestroyPbufferEXT -typedef BOOL (APIENTRYP PFNWGLQUERYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); -GLAPI PFNWGLQUERYPBUFFEREXTPROC glad_wglQueryPbufferEXT; -#define wglQueryPbufferEXT glad_wglQueryPbufferEXT -#endif -#ifndef WGL_EXT_pixel_format -#define WGL_EXT_pixel_format 1 -GLAPI int GLAD_WGL_EXT_pixel_format; -typedef BOOL (APIENTRYP PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); -GLAPI PFNWGLGETPIXELFORMATATTRIBIVEXTPROC glad_wglGetPixelFormatAttribivEXT; -#define wglGetPixelFormatAttribivEXT glad_wglGetPixelFormatAttribivEXT -typedef BOOL (APIENTRYP PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); -GLAPI PFNWGLGETPIXELFORMATATTRIBFVEXTPROC glad_wglGetPixelFormatAttribfvEXT; -#define wglGetPixelFormatAttribfvEXT glad_wglGetPixelFormatAttribfvEXT -typedef BOOL (APIENTRYP PFNWGLCHOOSEPIXELFORMATEXTPROC)(HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -GLAPI PFNWGLCHOOSEPIXELFORMATEXTPROC glad_wglChoosePixelFormatEXT; -#define wglChoosePixelFormatEXT glad_wglChoosePixelFormatEXT -#endif -#ifndef WGL_EXT_pixel_format_packed_float -#define WGL_EXT_pixel_format_packed_float 1 -GLAPI int GLAD_WGL_EXT_pixel_format_packed_float; -#endif -#ifndef WGL_EXT_swap_control -#define WGL_EXT_swap_control 1 -GLAPI int GLAD_WGL_EXT_swap_control; -typedef BOOL (APIENTRYP PFNWGLSWAPINTERVALEXTPROC)(int interval); -GLAPI PFNWGLSWAPINTERVALEXTPROC glad_wglSwapIntervalEXT; -#define wglSwapIntervalEXT glad_wglSwapIntervalEXT -typedef int (APIENTRYP PFNWGLGETSWAPINTERVALEXTPROC)(void); -GLAPI PFNWGLGETSWAPINTERVALEXTPROC glad_wglGetSwapIntervalEXT; -#define wglGetSwapIntervalEXT glad_wglGetSwapIntervalEXT -#endif -#ifndef WGL_EXT_swap_control_tear -#define WGL_EXT_swap_control_tear 1 -GLAPI int GLAD_WGL_EXT_swap_control_tear; -#endif -#ifndef WGL_I3D_digital_video_control -#define WGL_I3D_digital_video_control 1 -GLAPI int GLAD_WGL_I3D_digital_video_control; -typedef BOOL (APIENTRYP PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int *piValue); -GLAPI PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC glad_wglGetDigitalVideoParametersI3D; -#define wglGetDigitalVideoParametersI3D glad_wglGetDigitalVideoParametersI3D -typedef BOOL (APIENTRYP PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int *piValue); -GLAPI PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC glad_wglSetDigitalVideoParametersI3D; -#define wglSetDigitalVideoParametersI3D glad_wglSetDigitalVideoParametersI3D -#endif -#ifndef WGL_I3D_gamma -#define WGL_I3D_gamma 1 -GLAPI int GLAD_WGL_I3D_gamma; -typedef BOOL (APIENTRYP PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int *piValue); -GLAPI PFNWGLGETGAMMATABLEPARAMETERSI3DPROC glad_wglGetGammaTableParametersI3D; -#define wglGetGammaTableParametersI3D glad_wglGetGammaTableParametersI3D -typedef BOOL (APIENTRYP PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int *piValue); -GLAPI PFNWGLSETGAMMATABLEPARAMETERSI3DPROC glad_wglSetGammaTableParametersI3D; -#define wglSetGammaTableParametersI3D glad_wglSetGammaTableParametersI3D -typedef BOOL (APIENTRYP PFNWGLGETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); -GLAPI PFNWGLGETGAMMATABLEI3DPROC glad_wglGetGammaTableI3D; -#define wglGetGammaTableI3D glad_wglGetGammaTableI3D -typedef BOOL (APIENTRYP PFNWGLSETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); -GLAPI PFNWGLSETGAMMATABLEI3DPROC glad_wglSetGammaTableI3D; -#define wglSetGammaTableI3D glad_wglSetGammaTableI3D -#endif -#ifndef WGL_I3D_genlock -#define WGL_I3D_genlock 1 -GLAPI int GLAD_WGL_I3D_genlock; -typedef BOOL (APIENTRYP PFNWGLENABLEGENLOCKI3DPROC)(HDC hDC); -GLAPI PFNWGLENABLEGENLOCKI3DPROC glad_wglEnableGenlockI3D; -#define wglEnableGenlockI3D glad_wglEnableGenlockI3D -typedef BOOL (APIENTRYP PFNWGLDISABLEGENLOCKI3DPROC)(HDC hDC); -GLAPI PFNWGLDISABLEGENLOCKI3DPROC glad_wglDisableGenlockI3D; -#define wglDisableGenlockI3D glad_wglDisableGenlockI3D -typedef BOOL (APIENTRYP PFNWGLISENABLEDGENLOCKI3DPROC)(HDC hDC, BOOL *pFlag); -GLAPI PFNWGLISENABLEDGENLOCKI3DPROC glad_wglIsEnabledGenlockI3D; -#define wglIsEnabledGenlockI3D glad_wglIsEnabledGenlockI3D -typedef BOOL (APIENTRYP PFNWGLGENLOCKSOURCEI3DPROC)(HDC hDC, UINT uSource); -GLAPI PFNWGLGENLOCKSOURCEI3DPROC glad_wglGenlockSourceI3D; -#define wglGenlockSourceI3D glad_wglGenlockSourceI3D -typedef BOOL (APIENTRYP PFNWGLGETGENLOCKSOURCEI3DPROC)(HDC hDC, UINT *uSource); -GLAPI PFNWGLGETGENLOCKSOURCEI3DPROC glad_wglGetGenlockSourceI3D; -#define wglGetGenlockSourceI3D glad_wglGetGenlockSourceI3D -typedef BOOL (APIENTRYP PFNWGLGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT uEdge); -GLAPI PFNWGLGENLOCKSOURCEEDGEI3DPROC glad_wglGenlockSourceEdgeI3D; -#define wglGenlockSourceEdgeI3D glad_wglGenlockSourceEdgeI3D -typedef BOOL (APIENTRYP PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT *uEdge); -GLAPI PFNWGLGETGENLOCKSOURCEEDGEI3DPROC glad_wglGetGenlockSourceEdgeI3D; -#define wglGetGenlockSourceEdgeI3D glad_wglGetGenlockSourceEdgeI3D -typedef BOOL (APIENTRYP PFNWGLGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT uRate); -GLAPI PFNWGLGENLOCKSAMPLERATEI3DPROC glad_wglGenlockSampleRateI3D; -#define wglGenlockSampleRateI3D glad_wglGenlockSampleRateI3D -typedef BOOL (APIENTRYP PFNWGLGETGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT *uRate); -GLAPI PFNWGLGETGENLOCKSAMPLERATEI3DPROC glad_wglGetGenlockSampleRateI3D; -#define wglGetGenlockSampleRateI3D glad_wglGetGenlockSampleRateI3D -typedef BOOL (APIENTRYP PFNWGLGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT uDelay); -GLAPI PFNWGLGENLOCKSOURCEDELAYI3DPROC glad_wglGenlockSourceDelayI3D; -#define wglGenlockSourceDelayI3D glad_wglGenlockSourceDelayI3D -typedef BOOL (APIENTRYP PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT *uDelay); -GLAPI PFNWGLGETGENLOCKSOURCEDELAYI3DPROC glad_wglGetGenlockSourceDelayI3D; -#define wglGetGenlockSourceDelayI3D glad_wglGetGenlockSourceDelayI3D -typedef BOOL (APIENTRYP PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)(HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); -GLAPI PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC glad_wglQueryGenlockMaxSourceDelayI3D; -#define wglQueryGenlockMaxSourceDelayI3D glad_wglQueryGenlockMaxSourceDelayI3D -#endif -#ifndef WGL_I3D_image_buffer -#define WGL_I3D_image_buffer 1 -GLAPI int GLAD_WGL_I3D_image_buffer; -typedef LPVOID (APIENTRYP PFNWGLCREATEIMAGEBUFFERI3DPROC)(HDC hDC, DWORD dwSize, UINT uFlags); -GLAPI PFNWGLCREATEIMAGEBUFFERI3DPROC glad_wglCreateImageBufferI3D; -#define wglCreateImageBufferI3D glad_wglCreateImageBufferI3D -typedef BOOL (APIENTRYP PFNWGLDESTROYIMAGEBUFFERI3DPROC)(HDC hDC, LPVOID pAddress); -GLAPI PFNWGLDESTROYIMAGEBUFFERI3DPROC glad_wglDestroyImageBufferI3D; -#define wglDestroyImageBufferI3D glad_wglDestroyImageBufferI3D -typedef BOOL (APIENTRYP PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); -GLAPI PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC glad_wglAssociateImageBufferEventsI3D; -#define wglAssociateImageBufferEventsI3D glad_wglAssociateImageBufferEventsI3D -typedef BOOL (APIENTRYP PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const LPVOID *pAddress, UINT count); -GLAPI PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC glad_wglReleaseImageBufferEventsI3D; -#define wglReleaseImageBufferEventsI3D glad_wglReleaseImageBufferEventsI3D -#endif -#ifndef WGL_I3D_swap_frame_lock -#define WGL_I3D_swap_frame_lock 1 -GLAPI int GLAD_WGL_I3D_swap_frame_lock; -typedef BOOL (APIENTRYP PFNWGLENABLEFRAMELOCKI3DPROC)(void); -GLAPI PFNWGLENABLEFRAMELOCKI3DPROC glad_wglEnableFrameLockI3D; -#define wglEnableFrameLockI3D glad_wglEnableFrameLockI3D -typedef BOOL (APIENTRYP PFNWGLDISABLEFRAMELOCKI3DPROC)(void); -GLAPI PFNWGLDISABLEFRAMELOCKI3DPROC glad_wglDisableFrameLockI3D; -#define wglDisableFrameLockI3D glad_wglDisableFrameLockI3D -typedef BOOL (APIENTRYP PFNWGLISENABLEDFRAMELOCKI3DPROC)(BOOL *pFlag); -GLAPI PFNWGLISENABLEDFRAMELOCKI3DPROC glad_wglIsEnabledFrameLockI3D; -#define wglIsEnabledFrameLockI3D glad_wglIsEnabledFrameLockI3D -typedef BOOL (APIENTRYP PFNWGLQUERYFRAMELOCKMASTERI3DPROC)(BOOL *pFlag); -GLAPI PFNWGLQUERYFRAMELOCKMASTERI3DPROC glad_wglQueryFrameLockMasterI3D; -#define wglQueryFrameLockMasterI3D glad_wglQueryFrameLockMasterI3D -#endif -#ifndef WGL_I3D_swap_frame_usage -#define WGL_I3D_swap_frame_usage 1 -GLAPI int GLAD_WGL_I3D_swap_frame_usage; -typedef BOOL (APIENTRYP PFNWGLGETFRAMEUSAGEI3DPROC)(float *pUsage); -GLAPI PFNWGLGETFRAMEUSAGEI3DPROC glad_wglGetFrameUsageI3D; -#define wglGetFrameUsageI3D glad_wglGetFrameUsageI3D -typedef BOOL (APIENTRYP PFNWGLBEGINFRAMETRACKINGI3DPROC)(void); -GLAPI PFNWGLBEGINFRAMETRACKINGI3DPROC glad_wglBeginFrameTrackingI3D; -#define wglBeginFrameTrackingI3D glad_wglBeginFrameTrackingI3D -typedef BOOL (APIENTRYP PFNWGLENDFRAMETRACKINGI3DPROC)(void); -GLAPI PFNWGLENDFRAMETRACKINGI3DPROC glad_wglEndFrameTrackingI3D; -#define wglEndFrameTrackingI3D glad_wglEndFrameTrackingI3D -typedef BOOL (APIENTRYP PFNWGLQUERYFRAMETRACKINGI3DPROC)(DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); -GLAPI PFNWGLQUERYFRAMETRACKINGI3DPROC glad_wglQueryFrameTrackingI3D; -#define wglQueryFrameTrackingI3D glad_wglQueryFrameTrackingI3D -#endif -#ifndef WGL_NV_DX_interop -#define WGL_NV_DX_interop 1 -GLAPI int GLAD_WGL_NV_DX_interop; -typedef BOOL (APIENTRYP PFNWGLDXSETRESOURCESHAREHANDLENVPROC)(void *dxObject, HANDLE shareHandle); -GLAPI PFNWGLDXSETRESOURCESHAREHANDLENVPROC glad_wglDXSetResourceShareHandleNV; -#define wglDXSetResourceShareHandleNV glad_wglDXSetResourceShareHandleNV -typedef HANDLE (APIENTRYP PFNWGLDXOPENDEVICENVPROC)(void *dxDevice); -GLAPI PFNWGLDXOPENDEVICENVPROC glad_wglDXOpenDeviceNV; -#define wglDXOpenDeviceNV glad_wglDXOpenDeviceNV -typedef BOOL (APIENTRYP PFNWGLDXCLOSEDEVICENVPROC)(HANDLE hDevice); -GLAPI PFNWGLDXCLOSEDEVICENVPROC glad_wglDXCloseDeviceNV; -#define wglDXCloseDeviceNV glad_wglDXCloseDeviceNV -typedef HANDLE (APIENTRYP PFNWGLDXREGISTEROBJECTNVPROC)(HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); -GLAPI PFNWGLDXREGISTEROBJECTNVPROC glad_wglDXRegisterObjectNV; -#define wglDXRegisterObjectNV glad_wglDXRegisterObjectNV -typedef BOOL (APIENTRYP PFNWGLDXUNREGISTEROBJECTNVPROC)(HANDLE hDevice, HANDLE hObject); -GLAPI PFNWGLDXUNREGISTEROBJECTNVPROC glad_wglDXUnregisterObjectNV; -#define wglDXUnregisterObjectNV glad_wglDXUnregisterObjectNV -typedef BOOL (APIENTRYP PFNWGLDXOBJECTACCESSNVPROC)(HANDLE hObject, GLenum access); -GLAPI PFNWGLDXOBJECTACCESSNVPROC glad_wglDXObjectAccessNV; -#define wglDXObjectAccessNV glad_wglDXObjectAccessNV -typedef BOOL (APIENTRYP PFNWGLDXLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE *hObjects); -GLAPI PFNWGLDXLOCKOBJECTSNVPROC glad_wglDXLockObjectsNV; -#define wglDXLockObjectsNV glad_wglDXLockObjectsNV -typedef BOOL (APIENTRYP PFNWGLDXUNLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE *hObjects); -GLAPI PFNWGLDXUNLOCKOBJECTSNVPROC glad_wglDXUnlockObjectsNV; -#define wglDXUnlockObjectsNV glad_wglDXUnlockObjectsNV -#endif -#ifndef WGL_NV_DX_interop2 -#define WGL_NV_DX_interop2 1 -GLAPI int GLAD_WGL_NV_DX_interop2; -#endif -#ifndef WGL_NV_copy_image -#define WGL_NV_copy_image 1 -GLAPI int GLAD_WGL_NV_copy_image; -typedef BOOL (APIENTRYP PFNWGLCOPYIMAGESUBDATANVPROC)(HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -GLAPI PFNWGLCOPYIMAGESUBDATANVPROC glad_wglCopyImageSubDataNV; -#define wglCopyImageSubDataNV glad_wglCopyImageSubDataNV -#endif -#ifndef WGL_NV_delay_before_swap -#define WGL_NV_delay_before_swap 1 -GLAPI int GLAD_WGL_NV_delay_before_swap; -typedef BOOL (APIENTRYP PFNWGLDELAYBEFORESWAPNVPROC)(HDC hDC, GLfloat seconds); -GLAPI PFNWGLDELAYBEFORESWAPNVPROC glad_wglDelayBeforeSwapNV; -#define wglDelayBeforeSwapNV glad_wglDelayBeforeSwapNV -#endif -#ifndef WGL_NV_float_buffer -#define WGL_NV_float_buffer 1 -GLAPI int GLAD_WGL_NV_float_buffer; -#endif -#ifndef WGL_NV_gpu_affinity -#define WGL_NV_gpu_affinity 1 -GLAPI int GLAD_WGL_NV_gpu_affinity; -typedef BOOL (APIENTRYP PFNWGLENUMGPUSNVPROC)(UINT iGpuIndex, HGPUNV *phGpu); -GLAPI PFNWGLENUMGPUSNVPROC glad_wglEnumGpusNV; -#define wglEnumGpusNV glad_wglEnumGpusNV -typedef BOOL (APIENTRYP PFNWGLENUMGPUDEVICESNVPROC)(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); -GLAPI PFNWGLENUMGPUDEVICESNVPROC glad_wglEnumGpuDevicesNV; -#define wglEnumGpuDevicesNV glad_wglEnumGpuDevicesNV -typedef HDC (APIENTRYP PFNWGLCREATEAFFINITYDCNVPROC)(const HGPUNV *phGpuList); -GLAPI PFNWGLCREATEAFFINITYDCNVPROC glad_wglCreateAffinityDCNV; -#define wglCreateAffinityDCNV glad_wglCreateAffinityDCNV -typedef BOOL (APIENTRYP PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)(HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); -GLAPI PFNWGLENUMGPUSFROMAFFINITYDCNVPROC glad_wglEnumGpusFromAffinityDCNV; -#define wglEnumGpusFromAffinityDCNV glad_wglEnumGpusFromAffinityDCNV -typedef BOOL (APIENTRYP PFNWGLDELETEDCNVPROC)(HDC hdc); -GLAPI PFNWGLDELETEDCNVPROC glad_wglDeleteDCNV; -#define wglDeleteDCNV glad_wglDeleteDCNV -#endif -#ifndef WGL_NV_multigpu_context -#define WGL_NV_multigpu_context 1 -GLAPI int GLAD_WGL_NV_multigpu_context; -#endif -#ifndef WGL_NV_multisample_coverage -#define WGL_NV_multisample_coverage 1 -GLAPI int GLAD_WGL_NV_multisample_coverage; -#endif -#ifndef WGL_NV_present_video -#define WGL_NV_present_video 1 -GLAPI int GLAD_WGL_NV_present_video; -typedef int (APIENTRYP PFNWGLENUMERATEVIDEODEVICESNVPROC)(HDC hDc, HVIDEOOUTPUTDEVICENV *phDeviceList); -GLAPI PFNWGLENUMERATEVIDEODEVICESNVPROC glad_wglEnumerateVideoDevicesNV; -#define wglEnumerateVideoDevicesNV glad_wglEnumerateVideoDevicesNV -typedef BOOL (APIENTRYP PFNWGLBINDVIDEODEVICENVPROC)(HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); -GLAPI PFNWGLBINDVIDEODEVICENVPROC glad_wglBindVideoDeviceNV; -#define wglBindVideoDeviceNV glad_wglBindVideoDeviceNV -typedef BOOL (APIENTRYP PFNWGLQUERYCURRENTCONTEXTNVPROC)(int iAttribute, int *piValue); -GLAPI PFNWGLQUERYCURRENTCONTEXTNVPROC glad_wglQueryCurrentContextNV; -#define wglQueryCurrentContextNV glad_wglQueryCurrentContextNV -#endif -#ifndef WGL_NV_render_depth_texture -#define WGL_NV_render_depth_texture 1 -GLAPI int GLAD_WGL_NV_render_depth_texture; -#endif -#ifndef WGL_NV_render_texture_rectangle -#define WGL_NV_render_texture_rectangle 1 -GLAPI int GLAD_WGL_NV_render_texture_rectangle; -#endif -#ifndef WGL_NV_swap_group -#define WGL_NV_swap_group 1 -GLAPI int GLAD_WGL_NV_swap_group; -typedef BOOL (APIENTRYP PFNWGLJOINSWAPGROUPNVPROC)(HDC hDC, GLuint group); -GLAPI PFNWGLJOINSWAPGROUPNVPROC glad_wglJoinSwapGroupNV; -#define wglJoinSwapGroupNV glad_wglJoinSwapGroupNV -typedef BOOL (APIENTRYP PFNWGLBINDSWAPBARRIERNVPROC)(GLuint group, GLuint barrier); -GLAPI PFNWGLBINDSWAPBARRIERNVPROC glad_wglBindSwapBarrierNV; -#define wglBindSwapBarrierNV glad_wglBindSwapBarrierNV -typedef BOOL (APIENTRYP PFNWGLQUERYSWAPGROUPNVPROC)(HDC hDC, GLuint *group, GLuint *barrier); -GLAPI PFNWGLQUERYSWAPGROUPNVPROC glad_wglQuerySwapGroupNV; -#define wglQuerySwapGroupNV glad_wglQuerySwapGroupNV -typedef BOOL (APIENTRYP PFNWGLQUERYMAXSWAPGROUPSNVPROC)(HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); -GLAPI PFNWGLQUERYMAXSWAPGROUPSNVPROC glad_wglQueryMaxSwapGroupsNV; -#define wglQueryMaxSwapGroupsNV glad_wglQueryMaxSwapGroupsNV -typedef BOOL (APIENTRYP PFNWGLQUERYFRAMECOUNTNVPROC)(HDC hDC, GLuint *count); -GLAPI PFNWGLQUERYFRAMECOUNTNVPROC glad_wglQueryFrameCountNV; -#define wglQueryFrameCountNV glad_wglQueryFrameCountNV -typedef BOOL (APIENTRYP PFNWGLRESETFRAMECOUNTNVPROC)(HDC hDC); -GLAPI PFNWGLRESETFRAMECOUNTNVPROC glad_wglResetFrameCountNV; -#define wglResetFrameCountNV glad_wglResetFrameCountNV -#endif -#ifndef WGL_NV_vertex_array_range -#define WGL_NV_vertex_array_range 1 -GLAPI int GLAD_WGL_NV_vertex_array_range; -typedef void * (APIENTRYP PFNWGLALLOCATEMEMORYNVPROC)(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); -GLAPI PFNWGLALLOCATEMEMORYNVPROC glad_wglAllocateMemoryNV; -#define wglAllocateMemoryNV glad_wglAllocateMemoryNV -typedef void (APIENTRYP PFNWGLFREEMEMORYNVPROC)(void *pointer); -GLAPI PFNWGLFREEMEMORYNVPROC glad_wglFreeMemoryNV; -#define wglFreeMemoryNV glad_wglFreeMemoryNV -#endif -#ifndef WGL_NV_video_capture -#define WGL_NV_video_capture 1 -GLAPI int GLAD_WGL_NV_video_capture; -typedef BOOL (APIENTRYP PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)(UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); -GLAPI PFNWGLBINDVIDEOCAPTUREDEVICENVPROC glad_wglBindVideoCaptureDeviceNV; -#define wglBindVideoCaptureDeviceNV glad_wglBindVideoCaptureDeviceNV -typedef UINT (APIENTRYP PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)(HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); -GLAPI PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC glad_wglEnumerateVideoCaptureDevicesNV; -#define wglEnumerateVideoCaptureDevicesNV glad_wglEnumerateVideoCaptureDevicesNV -typedef BOOL (APIENTRYP PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); -GLAPI PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC glad_wglLockVideoCaptureDeviceNV; -#define wglLockVideoCaptureDeviceNV glad_wglLockVideoCaptureDeviceNV -typedef BOOL (APIENTRYP PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); -GLAPI PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC glad_wglQueryVideoCaptureDeviceNV; -#define wglQueryVideoCaptureDeviceNV glad_wglQueryVideoCaptureDeviceNV -typedef BOOL (APIENTRYP PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); -GLAPI PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC glad_wglReleaseVideoCaptureDeviceNV; -#define wglReleaseVideoCaptureDeviceNV glad_wglReleaseVideoCaptureDeviceNV -#endif -#ifndef WGL_NV_video_output -#define WGL_NV_video_output 1 -GLAPI int GLAD_WGL_NV_video_output; -typedef BOOL (APIENTRYP PFNWGLGETVIDEODEVICENVPROC)(HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); -GLAPI PFNWGLGETVIDEODEVICENVPROC glad_wglGetVideoDeviceNV; -#define wglGetVideoDeviceNV glad_wglGetVideoDeviceNV -typedef BOOL (APIENTRYP PFNWGLRELEASEVIDEODEVICENVPROC)(HPVIDEODEV hVideoDevice); -GLAPI PFNWGLRELEASEVIDEODEVICENVPROC glad_wglReleaseVideoDeviceNV; -#define wglReleaseVideoDeviceNV glad_wglReleaseVideoDeviceNV -typedef BOOL (APIENTRYP PFNWGLBINDVIDEOIMAGENVPROC)(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); -GLAPI PFNWGLBINDVIDEOIMAGENVPROC glad_wglBindVideoImageNV; -#define wglBindVideoImageNV glad_wglBindVideoImageNV -typedef BOOL (APIENTRYP PFNWGLRELEASEVIDEOIMAGENVPROC)(HPBUFFERARB hPbuffer, int iVideoBuffer); -GLAPI PFNWGLRELEASEVIDEOIMAGENVPROC glad_wglReleaseVideoImageNV; -#define wglReleaseVideoImageNV glad_wglReleaseVideoImageNV -typedef BOOL (APIENTRYP PFNWGLSENDPBUFFERTOVIDEONVPROC)(HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); -GLAPI PFNWGLSENDPBUFFERTOVIDEONVPROC glad_wglSendPbufferToVideoNV; -#define wglSendPbufferToVideoNV glad_wglSendPbufferToVideoNV -typedef BOOL (APIENTRYP PFNWGLGETVIDEOINFONVPROC)(HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); -GLAPI PFNWGLGETVIDEOINFONVPROC glad_wglGetVideoInfoNV; -#define wglGetVideoInfoNV glad_wglGetVideoInfoNV -#endif -#ifndef WGL_OML_sync_control -#define WGL_OML_sync_control 1 -GLAPI int GLAD_WGL_OML_sync_control; -typedef BOOL (APIENTRYP PFNWGLGETSYNCVALUESOMLPROC)(HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); -GLAPI PFNWGLGETSYNCVALUESOMLPROC glad_wglGetSyncValuesOML; -#define wglGetSyncValuesOML glad_wglGetSyncValuesOML -typedef BOOL (APIENTRYP PFNWGLGETMSCRATEOMLPROC)(HDC hdc, INT32 *numerator, INT32 *denominator); -GLAPI PFNWGLGETMSCRATEOMLPROC glad_wglGetMscRateOML; -#define wglGetMscRateOML glad_wglGetMscRateOML -typedef INT64 (APIENTRYP PFNWGLSWAPBUFFERSMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); -GLAPI PFNWGLSWAPBUFFERSMSCOMLPROC glad_wglSwapBuffersMscOML; -#define wglSwapBuffersMscOML glad_wglSwapBuffersMscOML -typedef INT64 (APIENTRYP PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)(HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); -GLAPI PFNWGLSWAPLAYERBUFFERSMSCOMLPROC glad_wglSwapLayerBuffersMscOML; -#define wglSwapLayerBuffersMscOML glad_wglSwapLayerBuffersMscOML -typedef BOOL (APIENTRYP PFNWGLWAITFORMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); -GLAPI PFNWGLWAITFORMSCOMLPROC glad_wglWaitForMscOML; -#define wglWaitForMscOML glad_wglWaitForMscOML -typedef BOOL (APIENTRYP PFNWGLWAITFORSBCOMLPROC)(HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); -GLAPI PFNWGLWAITFORSBCOMLPROC glad_wglWaitForSbcOML; -#define wglWaitForSbcOML glad_wglWaitForSbcOML -#endif - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/third_party/glad/src/gl.c b/third_party/glad/src/gl.c index 464ab9cb..ce08e444 100644 --- a/third_party/glad/src/gl.c +++ b/third_party/glad/src/gl.c @@ -1,1003 +1,7171 @@ -/* - - OpenGL, OpenGL ES loader generated by glad 0.1.25 on Fri Jul 20 15:42:19 2018. - - Language/Generator: C/C++ - Specification: gl - APIs: gl=4.6, gles2=3.2 - Profile: core - Extensions: - GL_3DFX_multisample, - GL_3DFX_tbuffer, - GL_3DFX_texture_compression_FXT1, - GL_AMD_blend_minmax_factor, - GL_AMD_compressed_3DC_texture, - GL_AMD_compressed_ATC_texture, - GL_AMD_conservative_depth, - GL_AMD_debug_output, - GL_AMD_depth_clamp_separate, - GL_AMD_draw_buffers_blend, - GL_AMD_framebuffer_sample_positions, - GL_AMD_gcn_shader, - GL_AMD_gpu_shader_half_float, - GL_AMD_gpu_shader_int16, - GL_AMD_gpu_shader_int64, - GL_AMD_interleaved_elements, - GL_AMD_multi_draw_indirect, - GL_AMD_name_gen_delete, - GL_AMD_occlusion_query_event, - GL_AMD_performance_monitor, - GL_AMD_pinned_memory, - GL_AMD_program_binary_Z400, - GL_AMD_query_buffer_object, - GL_AMD_sample_positions, - GL_AMD_seamless_cubemap_per_texture, - GL_AMD_shader_atomic_counter_ops, - GL_AMD_shader_ballot, - GL_AMD_shader_explicit_vertex_parameter, - GL_AMD_shader_gpu_shader_half_float_fetch, - GL_AMD_shader_image_load_store_lod, - GL_AMD_shader_stencil_export, - GL_AMD_shader_trinary_minmax, - GL_AMD_sparse_texture, - GL_AMD_stencil_operation_extended, - GL_AMD_texture_gather_bias_lod, - GL_AMD_texture_texture4, - GL_AMD_transform_feedback3_lines_triangles, - GL_AMD_transform_feedback4, - GL_AMD_vertex_shader_layer, - GL_AMD_vertex_shader_tessellator, - GL_AMD_vertex_shader_viewport_index, - GL_ANDROID_extension_pack_es31a, - GL_ANGLE_depth_texture, - GL_ANGLE_framebuffer_blit, - GL_ANGLE_framebuffer_multisample, - GL_ANGLE_instanced_arrays, - GL_ANGLE_pack_reverse_row_order, - GL_ANGLE_program_binary, - GL_ANGLE_texture_compression_dxt3, - GL_ANGLE_texture_compression_dxt5, - GL_ANGLE_texture_usage, - GL_ANGLE_translated_shader_source, - GL_APPLE_aux_depth_stencil, - GL_APPLE_client_storage, - GL_APPLE_clip_distance, - GL_APPLE_color_buffer_packed_float, - GL_APPLE_copy_texture_levels, - GL_APPLE_element_array, - GL_APPLE_fence, - GL_APPLE_float_pixels, - GL_APPLE_flush_buffer_range, - GL_APPLE_framebuffer_multisample, - GL_APPLE_object_purgeable, - GL_APPLE_rgb_422, - GL_APPLE_row_bytes, - GL_APPLE_specular_vector, - GL_APPLE_sync, - GL_APPLE_texture_format_BGRA8888, - GL_APPLE_texture_max_level, - GL_APPLE_texture_packed_float, - GL_APPLE_texture_range, - GL_APPLE_transform_hint, - GL_APPLE_vertex_array_object, - GL_APPLE_vertex_array_range, - GL_APPLE_vertex_program_evaluators, - GL_APPLE_ycbcr_422, - GL_ARB_ES2_compatibility, - GL_ARB_ES3_1_compatibility, - GL_ARB_ES3_2_compatibility, - GL_ARB_ES3_compatibility, - GL_ARB_arrays_of_arrays, - GL_ARB_base_instance, - GL_ARB_bindless_texture, - GL_ARB_blend_func_extended, - GL_ARB_buffer_storage, - GL_ARB_cl_event, - GL_ARB_clear_buffer_object, - GL_ARB_clear_texture, - GL_ARB_clip_control, - GL_ARB_color_buffer_float, - GL_ARB_compatibility, - GL_ARB_compressed_texture_pixel_storage, - GL_ARB_compute_shader, - GL_ARB_compute_variable_group_size, - GL_ARB_conditional_render_inverted, - GL_ARB_conservative_depth, - GL_ARB_copy_buffer, - GL_ARB_copy_image, - GL_ARB_cull_distance, - GL_ARB_debug_output, - GL_ARB_depth_buffer_float, - GL_ARB_depth_clamp, - GL_ARB_depth_texture, - GL_ARB_derivative_control, - GL_ARB_direct_state_access, - GL_ARB_draw_buffers, - GL_ARB_draw_buffers_blend, - GL_ARB_draw_elements_base_vertex, - GL_ARB_draw_indirect, - GL_ARB_draw_instanced, - GL_ARB_enhanced_layouts, - GL_ARB_explicit_attrib_location, - GL_ARB_explicit_uniform_location, - GL_ARB_fragment_coord_conventions, - GL_ARB_fragment_layer_viewport, - GL_ARB_fragment_program, - GL_ARB_fragment_program_shadow, - GL_ARB_fragment_shader, - GL_ARB_fragment_shader_interlock, - GL_ARB_framebuffer_no_attachments, - GL_ARB_framebuffer_object, - GL_ARB_framebuffer_sRGB, - GL_ARB_geometry_shader4, - GL_ARB_get_program_binary, - GL_ARB_get_texture_sub_image, - GL_ARB_gl_spirv, - GL_ARB_gpu_shader5, - GL_ARB_gpu_shader_fp64, - GL_ARB_gpu_shader_int64, - GL_ARB_half_float_pixel, - GL_ARB_half_float_vertex, - GL_ARB_imaging, - GL_ARB_indirect_parameters, - GL_ARB_instanced_arrays, - GL_ARB_internalformat_query, - GL_ARB_internalformat_query2, - GL_ARB_invalidate_subdata, - GL_ARB_map_buffer_alignment, - GL_ARB_map_buffer_range, - GL_ARB_matrix_palette, - GL_ARB_multi_bind, - GL_ARB_multi_draw_indirect, - GL_ARB_multisample, - GL_ARB_multitexture, - GL_ARB_occlusion_query, - GL_ARB_occlusion_query2, - GL_ARB_parallel_shader_compile, - GL_ARB_pipeline_statistics_query, - GL_ARB_pixel_buffer_object, - GL_ARB_point_parameters, - GL_ARB_point_sprite, - GL_ARB_polygon_offset_clamp, - GL_ARB_post_depth_coverage, - GL_ARB_program_interface_query, - GL_ARB_provoking_vertex, - GL_ARB_query_buffer_object, - GL_ARB_robust_buffer_access_behavior, - GL_ARB_robustness, - GL_ARB_robustness_isolation, - GL_ARB_sample_locations, - GL_ARB_sample_shading, - GL_ARB_sampler_objects, - GL_ARB_seamless_cube_map, - GL_ARB_seamless_cubemap_per_texture, - GL_ARB_separate_shader_objects, - GL_ARB_shader_atomic_counter_ops, - GL_ARB_shader_atomic_counters, - GL_ARB_shader_ballot, - GL_ARB_shader_bit_encoding, - GL_ARB_shader_clock, - GL_ARB_shader_draw_parameters, - GL_ARB_shader_group_vote, - GL_ARB_shader_image_load_store, - GL_ARB_shader_image_size, - GL_ARB_shader_objects, - GL_ARB_shader_precision, - GL_ARB_shader_stencil_export, - GL_ARB_shader_storage_buffer_object, - GL_ARB_shader_subroutine, - GL_ARB_shader_texture_image_samples, - GL_ARB_shader_texture_lod, - GL_ARB_shader_viewport_layer_array, - GL_ARB_shading_language_100, - GL_ARB_shading_language_420pack, - GL_ARB_shading_language_include, - GL_ARB_shading_language_packing, - GL_ARB_shadow, - GL_ARB_shadow_ambient, - GL_ARB_sparse_buffer, - GL_ARB_sparse_texture, - GL_ARB_sparse_texture2, - GL_ARB_sparse_texture_clamp, - GL_ARB_spirv_extensions, - GL_ARB_stencil_texturing, - GL_ARB_sync, - GL_ARB_tessellation_shader, - GL_ARB_texture_barrier, - GL_ARB_texture_border_clamp, - GL_ARB_texture_buffer_object, - GL_ARB_texture_buffer_object_rgb32, - GL_ARB_texture_buffer_range, - GL_ARB_texture_compression, - GL_ARB_texture_compression_bptc, - GL_ARB_texture_compression_rgtc, - GL_ARB_texture_cube_map, - GL_ARB_texture_cube_map_array, - GL_ARB_texture_env_add, - GL_ARB_texture_env_combine, - GL_ARB_texture_env_crossbar, - GL_ARB_texture_env_dot3, - GL_ARB_texture_filter_anisotropic, - GL_ARB_texture_filter_minmax, - GL_ARB_texture_float, - GL_ARB_texture_gather, - GL_ARB_texture_mirror_clamp_to_edge, - GL_ARB_texture_mirrored_repeat, - GL_ARB_texture_multisample, - GL_ARB_texture_non_power_of_two, - GL_ARB_texture_query_levels, - GL_ARB_texture_query_lod, - GL_ARB_texture_rectangle, - GL_ARB_texture_rg, - GL_ARB_texture_rgb10_a2ui, - GL_ARB_texture_stencil8, - GL_ARB_texture_storage, - GL_ARB_texture_storage_multisample, - GL_ARB_texture_swizzle, - GL_ARB_texture_view, - GL_ARB_timer_query, - GL_ARB_transform_feedback2, - GL_ARB_transform_feedback3, - GL_ARB_transform_feedback_instanced, - GL_ARB_transform_feedback_overflow_query, - GL_ARB_transpose_matrix, - GL_ARB_uniform_buffer_object, - GL_ARB_vertex_array_bgra, - GL_ARB_vertex_array_object, - GL_ARB_vertex_attrib_64bit, - GL_ARB_vertex_attrib_binding, - GL_ARB_vertex_blend, - GL_ARB_vertex_buffer_object, - GL_ARB_vertex_program, - GL_ARB_vertex_shader, - GL_ARB_vertex_type_10f_11f_11f_rev, - GL_ARB_vertex_type_2_10_10_10_rev, - GL_ARB_viewport_array, - GL_ARB_window_pos, - GL_ARM_mali_program_binary, - GL_ARM_mali_shader_binary, - GL_ARM_rgba8, - GL_ARM_shader_framebuffer_fetch, - GL_ARM_shader_framebuffer_fetch_depth_stencil, - GL_ATI_draw_buffers, - GL_ATI_element_array, - GL_ATI_envmap_bumpmap, - GL_ATI_fragment_shader, - GL_ATI_map_object_buffer, - GL_ATI_meminfo, - GL_ATI_pixel_format_float, - GL_ATI_pn_triangles, - GL_ATI_separate_stencil, - GL_ATI_text_fragment_shader, - GL_ATI_texture_env_combine3, - GL_ATI_texture_float, - GL_ATI_texture_mirror_once, - GL_ATI_vertex_array_object, - GL_ATI_vertex_attrib_array_object, - GL_ATI_vertex_streams, - GL_DMP_program_binary, - GL_DMP_shader_binary, - GL_EXT_422_pixels, - GL_EXT_EGL_image_array, - GL_EXT_EGL_image_storage, - GL_EXT_YUV_target, - GL_EXT_abgr, - GL_EXT_base_instance, - GL_EXT_bgra, - GL_EXT_bindable_uniform, - GL_EXT_blend_color, - GL_EXT_blend_equation_separate, - GL_EXT_blend_func_extended, - GL_EXT_blend_func_separate, - GL_EXT_blend_logic_op, - GL_EXT_blend_minmax, - GL_EXT_blend_subtract, - GL_EXT_buffer_storage, - GL_EXT_clear_texture, - GL_EXT_clip_control, - GL_EXT_clip_cull_distance, - GL_EXT_clip_volume_hint, - GL_EXT_cmyka, - GL_EXT_color_buffer_float, - GL_EXT_color_buffer_half_float, - GL_EXT_color_subtable, - GL_EXT_compiled_vertex_array, - GL_EXT_conservative_depth, - GL_EXT_convolution, - GL_EXT_coordinate_frame, - GL_EXT_copy_image, - GL_EXT_copy_texture, - GL_EXT_cull_vertex, - GL_EXT_debug_label, - GL_EXT_debug_marker, - GL_EXT_depth_bounds_test, - GL_EXT_direct_state_access, - GL_EXT_discard_framebuffer, - GL_EXT_disjoint_timer_query, - GL_EXT_draw_buffers, - GL_EXT_draw_buffers2, - GL_EXT_draw_buffers_indexed, - GL_EXT_draw_elements_base_vertex, - GL_EXT_draw_instanced, - GL_EXT_draw_range_elements, - GL_EXT_draw_transform_feedback, - GL_EXT_external_buffer, - GL_EXT_float_blend, - GL_EXT_fog_coord, - GL_EXT_framebuffer_blit, - GL_EXT_framebuffer_multisample, - GL_EXT_framebuffer_multisample_blit_scaled, - GL_EXT_framebuffer_object, - GL_EXT_framebuffer_sRGB, - GL_EXT_geometry_point_size, - GL_EXT_geometry_shader, - GL_EXT_geometry_shader4, - GL_EXT_gpu_program_parameters, - GL_EXT_gpu_shader4, - GL_EXT_gpu_shader5, - GL_EXT_histogram, - GL_EXT_index_array_formats, - GL_EXT_index_func, - GL_EXT_index_material, - GL_EXT_index_texture, - GL_EXT_instanced_arrays, - GL_EXT_light_texture, - GL_EXT_map_buffer_range, - GL_EXT_memory_object, - GL_EXT_memory_object_fd, - GL_EXT_memory_object_win32, - GL_EXT_misc_attribute, - GL_EXT_multi_draw_arrays, - GL_EXT_multi_draw_indirect, - GL_EXT_multisample, - GL_EXT_multisampled_compatibility, - GL_EXT_multisampled_render_to_texture, - GL_EXT_multiview_draw_buffers, - GL_EXT_occlusion_query_boolean, - GL_EXT_packed_depth_stencil, - GL_EXT_packed_float, - GL_EXT_packed_pixels, - GL_EXT_paletted_texture, - GL_EXT_pixel_buffer_object, - GL_EXT_pixel_transform, - GL_EXT_pixel_transform_color_table, - GL_EXT_point_parameters, - GL_EXT_polygon_offset, - GL_EXT_polygon_offset_clamp, - GL_EXT_post_depth_coverage, - GL_EXT_primitive_bounding_box, - GL_EXT_protected_textures, - GL_EXT_provoking_vertex, - GL_EXT_pvrtc_sRGB, - GL_EXT_raster_multisample, - GL_EXT_read_format_bgra, - GL_EXT_render_snorm, - GL_EXT_rescale_normal, - GL_EXT_robustness, - GL_EXT_sRGB, - GL_EXT_sRGB_write_control, - GL_EXT_secondary_color, - GL_EXT_semaphore, - GL_EXT_semaphore_fd, - GL_EXT_semaphore_win32, - GL_EXT_separate_shader_objects, - GL_EXT_separate_specular_color, - GL_EXT_shader_framebuffer_fetch, - GL_EXT_shader_framebuffer_fetch_non_coherent, - GL_EXT_shader_group_vote, - GL_EXT_shader_image_load_formatted, - GL_EXT_shader_image_load_store, - GL_EXT_shader_implicit_conversions, - GL_EXT_shader_integer_mix, - GL_EXT_shader_io_blocks, - GL_EXT_shader_non_constant_global_initializers, - GL_EXT_shader_pixel_local_storage, - GL_EXT_shader_pixel_local_storage2, - GL_EXT_shader_texture_lod, - GL_EXT_shadow_funcs, - GL_EXT_shadow_samplers, - GL_EXT_shared_texture_palette, - GL_EXT_sparse_texture, - GL_EXT_sparse_texture2, - GL_EXT_stencil_clear_tag, - GL_EXT_stencil_two_side, - GL_EXT_stencil_wrap, - GL_EXT_subtexture, - GL_EXT_tessellation_point_size, - GL_EXT_tessellation_shader, - GL_EXT_texture, - GL_EXT_texture3D, - GL_EXT_texture_array, - GL_EXT_texture_border_clamp, - GL_EXT_texture_buffer, - GL_EXT_texture_buffer_object, - GL_EXT_texture_compression_astc_decode_mode, - GL_EXT_texture_compression_bptc, - GL_EXT_texture_compression_dxt1, - GL_EXT_texture_compression_latc, - GL_EXT_texture_compression_rgtc, - GL_EXT_texture_compression_s3tc, - GL_EXT_texture_compression_s3tc_srgb, - GL_EXT_texture_cube_map, - GL_EXT_texture_cube_map_array, - GL_EXT_texture_env_add, - GL_EXT_texture_env_combine, - GL_EXT_texture_env_dot3, - GL_EXT_texture_filter_anisotropic, - GL_EXT_texture_filter_minmax, - GL_EXT_texture_format_BGRA8888, - GL_EXT_texture_format_sRGB_override, - GL_EXT_texture_integer, - GL_EXT_texture_lod_bias, - GL_EXT_texture_mirror_clamp, - GL_EXT_texture_mirror_clamp_to_edge, - GL_EXT_texture_norm16, - GL_EXT_texture_object, - GL_EXT_texture_perturb_normal, - GL_EXT_texture_rg, - GL_EXT_texture_sRGB, - GL_EXT_texture_sRGB_R8, - GL_EXT_texture_sRGB_RG8, - GL_EXT_texture_sRGB_decode, - GL_EXT_texture_shared_exponent, - GL_EXT_texture_snorm, - GL_EXT_texture_storage, - GL_EXT_texture_swizzle, - GL_EXT_texture_type_2_10_10_10_REV, - GL_EXT_texture_view, - GL_EXT_timer_query, - GL_EXT_transform_feedback, - GL_EXT_unpack_subimage, - GL_EXT_vertex_array, - GL_EXT_vertex_array_bgra, - GL_EXT_vertex_attrib_64bit, - GL_EXT_vertex_shader, - GL_EXT_vertex_weighting, - GL_EXT_win32_keyed_mutex, - GL_EXT_window_rectangles, - GL_EXT_x11_sync_object, - GL_FJ_shader_binary_GCCSO, - GL_GREMEDY_frame_terminator, - GL_GREMEDY_string_marker, - GL_HP_convolution_border_modes, - GL_HP_image_transform, - GL_HP_occlusion_test, - GL_HP_texture_lighting, - GL_IBM_cull_vertex, - GL_IBM_multimode_draw_arrays, - GL_IBM_rasterpos_clip, - GL_IBM_static_data, - GL_IBM_texture_mirrored_repeat, - GL_IBM_vertex_array_lists, - GL_IMG_bindless_texture, - GL_IMG_framebuffer_downsample, - GL_IMG_multisampled_render_to_texture, - GL_IMG_program_binary, - GL_IMG_read_format, - GL_IMG_shader_binary, - GL_IMG_texture_compression_pvrtc, - GL_IMG_texture_compression_pvrtc2, - GL_IMG_texture_filter_cubic, - GL_INGR_blend_func_separate, - GL_INGR_color_clamp, - GL_INGR_interlace_read, - GL_INTEL_blackhole_render, - GL_INTEL_conservative_rasterization, - GL_INTEL_fragment_shader_ordering, - GL_INTEL_framebuffer_CMAA, - GL_INTEL_map_texture, - GL_INTEL_parallel_arrays, - GL_INTEL_performance_query, - GL_KHR_blend_equation_advanced, - GL_KHR_blend_equation_advanced_coherent, - GL_KHR_context_flush_control, - GL_KHR_debug, - GL_KHR_no_error, - GL_KHR_parallel_shader_compile, - GL_KHR_robust_buffer_access_behavior, - GL_KHR_robustness, - GL_KHR_texture_compression_astc_hdr, - GL_KHR_texture_compression_astc_ldr, - GL_KHR_texture_compression_astc_sliced_3d, - GL_MESAX_texture_stack, - GL_MESA_pack_invert, - GL_MESA_program_binary_formats, - GL_MESA_resize_buffers, - GL_MESA_shader_integer_functions, - GL_MESA_tile_raster_order, - GL_MESA_window_pos, - GL_MESA_ycbcr_texture, - GL_NVX_blend_equation_advanced_multi_draw_buffers, - GL_NVX_conditional_render, - GL_NVX_gpu_memory_info, - GL_NVX_linked_gpu_multicast, - GL_NV_alpha_to_coverage_dither_control, - GL_NV_bindless_multi_draw_indirect, - GL_NV_bindless_multi_draw_indirect_count, - GL_NV_bindless_texture, - GL_NV_blend_equation_advanced, - GL_NV_blend_equation_advanced_coherent, - GL_NV_blend_minmax_factor, - GL_NV_blend_square, - GL_NV_clip_space_w_scaling, - GL_NV_command_list, - GL_NV_compute_program5, - GL_NV_conditional_render, - GL_NV_conservative_raster, - GL_NV_conservative_raster_dilate, - GL_NV_conservative_raster_pre_snap, - GL_NV_conservative_raster_pre_snap_triangles, - GL_NV_conservative_raster_underestimation, - GL_NV_copy_buffer, - GL_NV_copy_depth_to_color, - GL_NV_copy_image, - GL_NV_coverage_sample, - GL_NV_deep_texture3D, - GL_NV_depth_buffer_float, - GL_NV_depth_clamp, - GL_NV_depth_nonlinear, - GL_NV_draw_buffers, - GL_NV_draw_instanced, - GL_NV_draw_texture, - GL_NV_draw_vulkan_image, - GL_NV_evaluators, - GL_NV_explicit_attrib_location, - GL_NV_explicit_multisample, - GL_NV_fbo_color_attachments, - GL_NV_fence, - GL_NV_fill_rectangle, - GL_NV_float_buffer, - GL_NV_fog_distance, - GL_NV_fragment_coverage_to_color, - GL_NV_fragment_program, - GL_NV_fragment_program2, - GL_NV_fragment_program4, - GL_NV_fragment_program_option, - GL_NV_fragment_shader_interlock, - GL_NV_framebuffer_blit, - GL_NV_framebuffer_mixed_samples, - GL_NV_framebuffer_multisample, - GL_NV_framebuffer_multisample_coverage, - GL_NV_generate_mipmap_sRGB, - GL_NV_geometry_program4, - GL_NV_geometry_shader4, - GL_NV_geometry_shader_passthrough, - GL_NV_gpu_multicast, - GL_NV_gpu_program4, - GL_NV_gpu_program5, - GL_NV_gpu_program5_mem_extended, - GL_NV_gpu_shader5, - GL_NV_half_float, - GL_NV_image_formats, - GL_NV_instanced_arrays, - GL_NV_internalformat_sample_query, - GL_NV_light_max_exponent, - GL_NV_multisample_coverage, - GL_NV_multisample_filter_hint, - GL_NV_non_square_matrices, - GL_NV_occlusion_query, - GL_NV_packed_depth_stencil, - GL_NV_parameter_buffer_object, - GL_NV_parameter_buffer_object2, - GL_NV_path_rendering, - GL_NV_path_rendering_shared_edge, - GL_NV_pixel_buffer_object, - GL_NV_pixel_data_range, - GL_NV_point_sprite, - GL_NV_polygon_mode, - GL_NV_present_video, - GL_NV_primitive_restart, - GL_NV_query_resource, - GL_NV_query_resource_tag, - GL_NV_read_buffer, - GL_NV_read_buffer_front, - GL_NV_read_depth, - GL_NV_read_depth_stencil, - GL_NV_read_stencil, - GL_NV_register_combiners, - GL_NV_register_combiners2, - GL_NV_robustness_video_memory_purge, - GL_NV_sRGB_formats, - GL_NV_sample_locations, - GL_NV_sample_mask_override_coverage, - GL_NV_shader_atomic_counters, - GL_NV_shader_atomic_float, - GL_NV_shader_atomic_float64, - GL_NV_shader_atomic_fp16_vector, - GL_NV_shader_atomic_int64, - GL_NV_shader_buffer_load, - GL_NV_shader_buffer_store, - GL_NV_shader_noperspective_interpolation, - GL_NV_shader_storage_buffer_object, - GL_NV_shader_thread_group, - GL_NV_shader_thread_shuffle, - GL_NV_shadow_samplers_array, - GL_NV_shadow_samplers_cube, - GL_NV_stereo_view_rendering, - GL_NV_tessellation_program5, - GL_NV_texgen_emboss, - GL_NV_texgen_reflection, - GL_NV_texture_barrier, - GL_NV_texture_border_clamp, - GL_NV_texture_compression_s3tc_update, - GL_NV_texture_compression_vtc, - GL_NV_texture_env_combine4, - GL_NV_texture_expand_normal, - GL_NV_texture_multisample, - GL_NV_texture_npot_2D_mipmap, - GL_NV_texture_rectangle, - GL_NV_texture_rectangle_compressed, - GL_NV_texture_shader, - GL_NV_texture_shader2, - GL_NV_texture_shader3, - GL_NV_transform_feedback, - GL_NV_transform_feedback2, - GL_NV_uniform_buffer_unified_memory, - GL_NV_vdpau_interop, - GL_NV_vertex_array_range, - GL_NV_vertex_array_range2, - GL_NV_vertex_attrib_integer_64bit, - GL_NV_vertex_buffer_unified_memory, - GL_NV_vertex_program, - GL_NV_vertex_program1_1, - GL_NV_vertex_program2, - GL_NV_vertex_program2_option, - GL_NV_vertex_program3, - GL_NV_vertex_program4, - GL_NV_video_capture, - GL_NV_viewport_array, - GL_NV_viewport_array2, - GL_NV_viewport_swizzle, - GL_OES_EGL_image, - GL_OES_EGL_image_external, - GL_OES_EGL_image_external_essl3, - GL_OES_byte_coordinates, - GL_OES_compressed_ETC1_RGB8_sub_texture, - GL_OES_compressed_ETC1_RGB8_texture, - GL_OES_compressed_paletted_texture, - GL_OES_copy_image, - GL_OES_depth24, - GL_OES_depth32, - GL_OES_depth_texture, - GL_OES_draw_buffers_indexed, - GL_OES_draw_elements_base_vertex, - GL_OES_element_index_uint, - GL_OES_fbo_render_mipmap, - GL_OES_fixed_point, - GL_OES_fragment_precision_high, - GL_OES_geometry_point_size, - GL_OES_geometry_shader, - GL_OES_get_program_binary, - GL_OES_gpu_shader5, - GL_OES_mapbuffer, - GL_OES_packed_depth_stencil, - GL_OES_primitive_bounding_box, - GL_OES_query_matrix, - GL_OES_read_format, - GL_OES_required_internalformat, - GL_OES_rgb8_rgba8, - GL_OES_sample_shading, - GL_OES_sample_variables, - GL_OES_shader_image_atomic, - GL_OES_shader_io_blocks, - GL_OES_shader_multisample_interpolation, - GL_OES_single_precision, - GL_OES_standard_derivatives, - GL_OES_stencil1, - GL_OES_stencil4, - GL_OES_surfaceless_context, - GL_OES_tessellation_point_size, - GL_OES_tessellation_shader, - GL_OES_texture_3D, - GL_OES_texture_border_clamp, - GL_OES_texture_buffer, - GL_OES_texture_compression_astc, - GL_OES_texture_cube_map_array, - GL_OES_texture_float, - GL_OES_texture_float_linear, - GL_OES_texture_half_float, - GL_OES_texture_half_float_linear, - GL_OES_texture_npot, - GL_OES_texture_stencil8, - GL_OES_texture_storage_multisample_2d_array, - GL_OES_texture_view, - GL_OES_vertex_array_object, - GL_OES_vertex_half_float, - GL_OES_vertex_type_10_10_10_2, - GL_OES_viewport_array, - GL_OML_interlace, - GL_OML_resample, - GL_OML_subsample, - GL_OVR_multiview, - GL_OVR_multiview2, - GL_OVR_multiview_multisampled_render_to_texture, - GL_PGI_misc_hints, - GL_PGI_vertex_hints, - GL_QCOM_alpha_test, - GL_QCOM_binning_control, - GL_QCOM_driver_control, - GL_QCOM_extended_get, - GL_QCOM_extended_get2, - GL_QCOM_framebuffer_foveated, - GL_QCOM_perfmon_global_mode, - GL_QCOM_shader_framebuffer_fetch_noncoherent, - GL_QCOM_texture_foveated, - GL_QCOM_tiled_rendering, - GL_QCOM_writeonly_rendering, - GL_REND_screen_coordinates, - GL_S3_s3tc, - GL_SGIS_detail_texture, - GL_SGIS_fog_function, - GL_SGIS_generate_mipmap, - GL_SGIS_multisample, - GL_SGIS_pixel_texture, - GL_SGIS_point_line_texgen, - GL_SGIS_point_parameters, - GL_SGIS_sharpen_texture, - GL_SGIS_texture4D, - GL_SGIS_texture_border_clamp, - GL_SGIS_texture_color_mask, - GL_SGIS_texture_edge_clamp, - GL_SGIS_texture_filter4, - GL_SGIS_texture_lod, - GL_SGIS_texture_select, - GL_SGIX_async, - GL_SGIX_async_histogram, - GL_SGIX_async_pixel, - GL_SGIX_blend_alpha_minmax, - GL_SGIX_calligraphic_fragment, - GL_SGIX_clipmap, - GL_SGIX_convolution_accuracy, - GL_SGIX_depth_pass_instrument, - GL_SGIX_depth_texture, - GL_SGIX_flush_raster, - GL_SGIX_fog_offset, - GL_SGIX_fragment_lighting, - GL_SGIX_framezoom, - GL_SGIX_igloo_interface, - GL_SGIX_instruments, - GL_SGIX_interlace, - GL_SGIX_ir_instrument1, - GL_SGIX_list_priority, - GL_SGIX_pixel_texture, - GL_SGIX_pixel_tiles, - GL_SGIX_polynomial_ffd, - GL_SGIX_reference_plane, - GL_SGIX_resample, - GL_SGIX_scalebias_hint, - GL_SGIX_shadow, - GL_SGIX_shadow_ambient, - GL_SGIX_sprite, - GL_SGIX_subsample, - GL_SGIX_tag_sample_buffer, - GL_SGIX_texture_add_env, - GL_SGIX_texture_coordinate_clamp, - GL_SGIX_texture_lod_bias, - GL_SGIX_texture_multi_buffer, - GL_SGIX_texture_scale_bias, - GL_SGIX_vertex_preclip, - GL_SGIX_ycrcb, - GL_SGIX_ycrcb_subsample, - GL_SGIX_ycrcba, - GL_SGI_color_matrix, - GL_SGI_color_table, - GL_SGI_texture_color_table, - GL_SUNX_constant_data, - GL_SUN_convolution_border_modes, - GL_SUN_global_alpha, - GL_SUN_mesh_array, - GL_SUN_slice_accum, - GL_SUN_triangle_list, - GL_SUN_vertex, - GL_VIV_shader_binary, - GL_WIN_phong_shading, - GL_WIN_specular_fog - Loader: True - Local files: True - Omit khrplatform: False - - Commandline: - --profile="core" --api="gl=4.6,gles2=3.2" --generator="c" --spec="gl" --local-files --extensions="GL_3DFX_multisample,GL_3DFX_tbuffer,GL_3DFX_texture_compression_FXT1,GL_AMD_blend_minmax_factor,GL_AMD_compressed_3DC_texture,GL_AMD_compressed_ATC_texture,GL_AMD_conservative_depth,GL_AMD_debug_output,GL_AMD_depth_clamp_separate,GL_AMD_draw_buffers_blend,GL_AMD_framebuffer_sample_positions,GL_AMD_gcn_shader,GL_AMD_gpu_shader_half_float,GL_AMD_gpu_shader_int16,GL_AMD_gpu_shader_int64,GL_AMD_interleaved_elements,GL_AMD_multi_draw_indirect,GL_AMD_name_gen_delete,GL_AMD_occlusion_query_event,GL_AMD_performance_monitor,GL_AMD_pinned_memory,GL_AMD_program_binary_Z400,GL_AMD_query_buffer_object,GL_AMD_sample_positions,GL_AMD_seamless_cubemap_per_texture,GL_AMD_shader_atomic_counter_ops,GL_AMD_shader_ballot,GL_AMD_shader_explicit_vertex_parameter,GL_AMD_shader_gpu_shader_half_float_fetch,GL_AMD_shader_image_load_store_lod,GL_AMD_shader_stencil_export,GL_AMD_shader_trinary_minmax,GL_AMD_sparse_texture,GL_AMD_stencil_operation_extended,GL_AMD_texture_gather_bias_lod,GL_AMD_texture_texture4,GL_AMD_transform_feedback3_lines_triangles,GL_AMD_transform_feedback4,GL_AMD_vertex_shader_layer,GL_AMD_vertex_shader_tessellator,GL_AMD_vertex_shader_viewport_index,GL_ANDROID_extension_pack_es31a,GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_APPLE_aux_depth_stencil,GL_APPLE_client_storage,GL_APPLE_clip_distance,GL_APPLE_color_buffer_packed_float,GL_APPLE_copy_texture_levels,GL_APPLE_element_array,GL_APPLE_fence,GL_APPLE_float_pixels,GL_APPLE_flush_buffer_range,GL_APPLE_framebuffer_multisample,GL_APPLE_object_purgeable,GL_APPLE_rgb_422,GL_APPLE_row_bytes,GL_APPLE_specular_vector,GL_APPLE_sync,GL_APPLE_texture_format_BGRA8888,GL_APPLE_texture_max_level,GL_APPLE_texture_packed_float,GL_APPLE_texture_range,GL_APPLE_transform_hint,GL_APPLE_vertex_array_object,GL_APPLE_vertex_array_range,GL_APPLE_vertex_program_evaluators,GL_APPLE_ycbcr_422,GL_ARB_ES2_compatibility,GL_ARB_ES3_1_compatibility,GL_ARB_ES3_2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_arrays_of_arrays,GL_ARB_base_instance,GL_ARB_bindless_texture,GL_ARB_blend_func_extended,GL_ARB_buffer_storage,GL_ARB_cl_event,GL_ARB_clear_buffer_object,GL_ARB_clear_texture,GL_ARB_clip_control,GL_ARB_color_buffer_float,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_compute_shader,GL_ARB_compute_variable_group_size,GL_ARB_conditional_render_inverted,GL_ARB_conservative_depth,GL_ARB_copy_buffer,GL_ARB_copy_image,GL_ARB_cull_distance,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_derivative_control,GL_ARB_direct_state_access,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_draw_elements_base_vertex,GL_ARB_draw_indirect,GL_ARB_draw_instanced,GL_ARB_enhanced_layouts,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_coord_conventions,GL_ARB_fragment_layer_viewport,GL_ARB_fragment_program,GL_ARB_fragment_program_shadow,GL_ARB_fragment_shader,GL_ARB_fragment_shader_interlock,GL_ARB_framebuffer_no_attachments,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_geometry_shader4,GL_ARB_get_program_binary,GL_ARB_get_texture_sub_image,GL_ARB_gl_spirv,GL_ARB_gpu_shader5,GL_ARB_gpu_shader_fp64,GL_ARB_gpu_shader_int64,GL_ARB_half_float_pixel,GL_ARB_half_float_vertex,GL_ARB_imaging,GL_ARB_indirect_parameters,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_map_buffer_alignment,GL_ARB_map_buffer_range,GL_ARB_matrix_palette,GL_ARB_multi_bind,GL_ARB_multi_draw_indirect,GL_ARB_multisample,GL_ARB_multitexture,GL_ARB_occlusion_query,GL_ARB_occlusion_query2,GL_ARB_parallel_shader_compile,GL_ARB_pipeline_statistics_query,GL_ARB_pixel_buffer_object,GL_ARB_point_parameters,GL_ARB_point_sprite,GL_ARB_polygon_offset_clamp,GL_ARB_post_depth_coverage,GL_ARB_program_interface_query,GL_ARB_provoking_vertex,GL_ARB_query_buffer_object,GL_ARB_robust_buffer_access_behavior,GL_ARB_robustness,GL_ARB_robustness_isolation,GL_ARB_sample_locations,GL_ARB_sample_shading,GL_ARB_sampler_objects,GL_ARB_seamless_cube_map,GL_ARB_seamless_cubemap_per_texture,GL_ARB_separate_shader_objects,GL_ARB_shader_atomic_counter_ops,GL_ARB_shader_atomic_counters,GL_ARB_shader_ballot,GL_ARB_shader_bit_encoding,GL_ARB_shader_clock,GL_ARB_shader_draw_parameters,GL_ARB_shader_group_vote,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_precision,GL_ARB_shader_stencil_export,GL_ARB_shader_storage_buffer_object,GL_ARB_shader_subroutine,GL_ARB_shader_texture_image_samples,GL_ARB_shader_texture_lod,GL_ARB_shader_viewport_layer_array,GL_ARB_shading_language_100,GL_ARB_shading_language_420pack,GL_ARB_shading_language_include,GL_ARB_shading_language_packing,GL_ARB_shadow,GL_ARB_shadow_ambient,GL_ARB_sparse_buffer,GL_ARB_sparse_texture,GL_ARB_sparse_texture2,GL_ARB_sparse_texture_clamp,GL_ARB_spirv_extensions,GL_ARB_stencil_texturing,GL_ARB_sync,GL_ARB_tessellation_shader,GL_ARB_texture_barrier,GL_ARB_texture_border_clamp,GL_ARB_texture_buffer_object,GL_ARB_texture_buffer_object_rgb32,GL_ARB_texture_buffer_range,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_cube_map_array,GL_ARB_texture_env_add,GL_ARB_texture_env_combine,GL_ARB_texture_env_crossbar,GL_ARB_texture_env_dot3,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_filter_minmax,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_mirror_clamp_to_edge,GL_ARB_texture_mirrored_repeat,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_query_levels,GL_ARB_texture_query_lod,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_texture_stencil8,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_ARB_texture_swizzle,GL_ARB_texture_view,GL_ARB_timer_query,GL_ARB_transform_feedback2,GL_ARB_transform_feedback3,GL_ARB_transform_feedback_instanced,GL_ARB_transform_feedback_overflow_query,GL_ARB_transpose_matrix,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_bgra,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_64bit,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_blend,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_10f_11f_11f_rev,GL_ARB_vertex_type_2_10_10_10_rev,GL_ARB_viewport_array,GL_ARB_window_pos,GL_ARM_mali_program_binary,GL_ARM_mali_shader_binary,GL_ARM_rgba8,GL_ARM_shader_framebuffer_fetch,GL_ARM_shader_framebuffer_fetch_depth_stencil,GL_ATI_draw_buffers,GL_ATI_element_array,GL_ATI_envmap_bumpmap,GL_ATI_fragment_shader,GL_ATI_map_object_buffer,GL_ATI_meminfo,GL_ATI_pixel_format_float,GL_ATI_pn_triangles,GL_ATI_separate_stencil,GL_ATI_text_fragment_shader,GL_ATI_texture_env_combine3,GL_ATI_texture_float,GL_ATI_texture_mirror_once,GL_ATI_vertex_array_object,GL_ATI_vertex_attrib_array_object,GL_ATI_vertex_streams,GL_DMP_program_binary,GL_DMP_shader_binary,GL_EXT_422_pixels,GL_EXT_EGL_image_array,GL_EXT_EGL_image_storage,GL_EXT_YUV_target,GL_EXT_abgr,GL_EXT_base_instance,GL_EXT_bgra,GL_EXT_bindable_uniform,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_extended,GL_EXT_blend_func_separate,GL_EXT_blend_logic_op,GL_EXT_blend_minmax,GL_EXT_blend_subtract,GL_EXT_buffer_storage,GL_EXT_clear_texture,GL_EXT_clip_control,GL_EXT_clip_cull_distance,GL_EXT_clip_volume_hint,GL_EXT_cmyka,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_color_subtable,GL_EXT_compiled_vertex_array,GL_EXT_conservative_depth,GL_EXT_convolution,GL_EXT_coordinate_frame,GL_EXT_copy_image,GL_EXT_copy_texture,GL_EXT_cull_vertex,GL_EXT_debug_label,GL_EXT_debug_marker,GL_EXT_depth_bounds_test,GL_EXT_direct_state_access,GL_EXT_discard_framebuffer,GL_EXT_disjoint_timer_query,GL_EXT_draw_buffers,GL_EXT_draw_buffers2,GL_EXT_draw_buffers_indexed,GL_EXT_draw_elements_base_vertex,GL_EXT_draw_instanced,GL_EXT_draw_range_elements,GL_EXT_draw_transform_feedback,GL_EXT_external_buffer,GL_EXT_float_blend,GL_EXT_fog_coord,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_point_size,GL_EXT_geometry_shader,GL_EXT_geometry_shader4,GL_EXT_gpu_program_parameters,GL_EXT_gpu_shader4,GL_EXT_gpu_shader5,GL_EXT_histogram,GL_EXT_index_array_formats,GL_EXT_index_func,GL_EXT_index_material,GL_EXT_index_texture,GL_EXT_instanced_arrays,GL_EXT_light_texture,GL_EXT_map_buffer_range,GL_EXT_memory_object,GL_EXT_memory_object_fd,GL_EXT_memory_object_win32,GL_EXT_misc_attribute,GL_EXT_multi_draw_arrays,GL_EXT_multi_draw_indirect,GL_EXT_multisample,GL_EXT_multisampled_compatibility,GL_EXT_multisampled_render_to_texture,GL_EXT_multiview_draw_buffers,GL_EXT_occlusion_query_boolean,GL_EXT_packed_depth_stencil,GL_EXT_packed_float,GL_EXT_packed_pixels,GL_EXT_paletted_texture,GL_EXT_pixel_buffer_object,GL_EXT_pixel_transform,GL_EXT_pixel_transform_color_table,GL_EXT_point_parameters,GL_EXT_polygon_offset,GL_EXT_polygon_offset_clamp,GL_EXT_post_depth_coverage,GL_EXT_primitive_bounding_box,GL_EXT_protected_textures,GL_EXT_provoking_vertex,GL_EXT_pvrtc_sRGB,GL_EXT_raster_multisample,GL_EXT_read_format_bgra,GL_EXT_render_snorm,GL_EXT_rescale_normal,GL_EXT_robustness,GL_EXT_sRGB,GL_EXT_sRGB_write_control,GL_EXT_secondary_color,GL_EXT_semaphore,GL_EXT_semaphore_fd,GL_EXT_semaphore_win32,GL_EXT_separate_shader_objects,GL_EXT_separate_specular_color,GL_EXT_shader_framebuffer_fetch,GL_EXT_shader_framebuffer_fetch_non_coherent,GL_EXT_shader_group_vote,GL_EXT_shader_image_load_formatted,GL_EXT_shader_image_load_store,GL_EXT_shader_implicit_conversions,GL_EXT_shader_integer_mix,GL_EXT_shader_io_blocks,GL_EXT_shader_non_constant_global_initializers,GL_EXT_shader_pixel_local_storage,GL_EXT_shader_pixel_local_storage2,GL_EXT_shader_texture_lod,GL_EXT_shadow_funcs,GL_EXT_shadow_samplers,GL_EXT_shared_texture_palette,GL_EXT_sparse_texture,GL_EXT_sparse_texture2,GL_EXT_stencil_clear_tag,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_subtexture,GL_EXT_tessellation_point_size,GL_EXT_tessellation_shader,GL_EXT_texture,GL_EXT_texture3D,GL_EXT_texture_array,GL_EXT_texture_border_clamp,GL_EXT_texture_buffer,GL_EXT_texture_buffer_object,GL_EXT_texture_compression_astc_decode_mode,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_latc,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_cube_map,GL_EXT_texture_cube_map_array,GL_EXT_texture_env_add,GL_EXT_texture_env_combine,GL_EXT_texture_env_dot3,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_filter_minmax,GL_EXT_texture_format_BGRA8888,GL_EXT_texture_format_sRGB_override,GL_EXT_texture_integer,GL_EXT_texture_lod_bias,GL_EXT_texture_mirror_clamp,GL_EXT_texture_mirror_clamp_to_edge,GL_EXT_texture_norm16,GL_EXT_texture_object,GL_EXT_texture_perturb_normal,GL_EXT_texture_rg,GL_EXT_texture_sRGB,GL_EXT_texture_sRGB_R8,GL_EXT_texture_sRGB_RG8,GL_EXT_texture_sRGB_decode,GL_EXT_texture_shared_exponent,GL_EXT_texture_snorm,GL_EXT_texture_storage,GL_EXT_texture_swizzle,GL_EXT_texture_type_2_10_10_10_REV,GL_EXT_texture_view,GL_EXT_timer_query,GL_EXT_transform_feedback,GL_EXT_unpack_subimage,GL_EXT_vertex_array,GL_EXT_vertex_array_bgra,GL_EXT_vertex_attrib_64bit,GL_EXT_vertex_shader,GL_EXT_vertex_weighting,GL_EXT_win32_keyed_mutex,GL_EXT_window_rectangles,GL_EXT_x11_sync_object,GL_FJ_shader_binary_GCCSO,GL_GREMEDY_frame_terminator,GL_GREMEDY_string_marker,GL_HP_convolution_border_modes,GL_HP_image_transform,GL_HP_occlusion_test,GL_HP_texture_lighting,GL_IBM_cull_vertex,GL_IBM_multimode_draw_arrays,GL_IBM_rasterpos_clip,GL_IBM_static_data,GL_IBM_texture_mirrored_repeat,GL_IBM_vertex_array_lists,GL_IMG_bindless_texture,GL_IMG_framebuffer_downsample,GL_IMG_multisampled_render_to_texture,GL_IMG_program_binary,GL_IMG_read_format,GL_IMG_shader_binary,GL_IMG_texture_compression_pvrtc,GL_IMG_texture_compression_pvrtc2,GL_IMG_texture_filter_cubic,GL_INGR_blend_func_separate,GL_INGR_color_clamp,GL_INGR_interlace_read,GL_INTEL_blackhole_render,GL_INTEL_conservative_rasterization,GL_INTEL_fragment_shader_ordering,GL_INTEL_framebuffer_CMAA,GL_INTEL_map_texture,GL_INTEL_parallel_arrays,GL_INTEL_performance_query,GL_KHR_blend_equation_advanced,GL_KHR_blend_equation_advanced_coherent,GL_KHR_context_flush_control,GL_KHR_debug,GL_KHR_no_error,GL_KHR_parallel_shader_compile,GL_KHR_robust_buffer_access_behavior,GL_KHR_robustness,GL_KHR_texture_compression_astc_hdr,GL_KHR_texture_compression_astc_ldr,GL_KHR_texture_compression_astc_sliced_3d,GL_MESAX_texture_stack,GL_MESA_pack_invert,GL_MESA_program_binary_formats,GL_MESA_resize_buffers,GL_MESA_shader_integer_functions,GL_MESA_tile_raster_order,GL_MESA_window_pos,GL_MESA_ycbcr_texture,GL_NVX_blend_equation_advanced_multi_draw_buffers,GL_NVX_conditional_render,GL_NVX_gpu_memory_info,GL_NVX_linked_gpu_multicast,GL_NV_alpha_to_coverage_dither_control,GL_NV_bindless_multi_draw_indirect,GL_NV_bindless_multi_draw_indirect_count,GL_NV_bindless_texture,GL_NV_blend_equation_advanced,GL_NV_blend_equation_advanced_coherent,GL_NV_blend_minmax_factor,GL_NV_blend_square,GL_NV_clip_space_w_scaling,GL_NV_command_list,GL_NV_compute_program5,GL_NV_conditional_render,GL_NV_conservative_raster,GL_NV_conservative_raster_dilate,GL_NV_conservative_raster_pre_snap,GL_NV_conservative_raster_pre_snap_triangles,GL_NV_conservative_raster_underestimation,GL_NV_copy_buffer,GL_NV_copy_depth_to_color,GL_NV_copy_image,GL_NV_coverage_sample,GL_NV_deep_texture3D,GL_NV_depth_buffer_float,GL_NV_depth_clamp,GL_NV_depth_nonlinear,GL_NV_draw_buffers,GL_NV_draw_instanced,GL_NV_draw_texture,GL_NV_draw_vulkan_image,GL_NV_evaluators,GL_NV_explicit_attrib_location,GL_NV_explicit_multisample,GL_NV_fbo_color_attachments,GL_NV_fence,GL_NV_fill_rectangle,GL_NV_float_buffer,GL_NV_fog_distance,GL_NV_fragment_coverage_to_color,GL_NV_fragment_program,GL_NV_fragment_program2,GL_NV_fragment_program4,GL_NV_fragment_program_option,GL_NV_fragment_shader_interlock,GL_NV_framebuffer_blit,GL_NV_framebuffer_mixed_samples,GL_NV_framebuffer_multisample,GL_NV_framebuffer_multisample_coverage,GL_NV_generate_mipmap_sRGB,GL_NV_geometry_program4,GL_NV_geometry_shader4,GL_NV_geometry_shader_passthrough,GL_NV_gpu_multicast,GL_NV_gpu_program4,GL_NV_gpu_program5,GL_NV_gpu_program5_mem_extended,GL_NV_gpu_shader5,GL_NV_half_float,GL_NV_image_formats,GL_NV_instanced_arrays,GL_NV_internalformat_sample_query,GL_NV_light_max_exponent,GL_NV_multisample_coverage,GL_NV_multisample_filter_hint,GL_NV_non_square_matrices,GL_NV_occlusion_query,GL_NV_packed_depth_stencil,GL_NV_parameter_buffer_object,GL_NV_parameter_buffer_object2,GL_NV_path_rendering,GL_NV_path_rendering_shared_edge,GL_NV_pixel_buffer_object,GL_NV_pixel_data_range,GL_NV_point_sprite,GL_NV_polygon_mode,GL_NV_present_video,GL_NV_primitive_restart,GL_NV_query_resource,GL_NV_query_resource_tag,GL_NV_read_buffer,GL_NV_read_buffer_front,GL_NV_read_depth,GL_NV_read_depth_stencil,GL_NV_read_stencil,GL_NV_register_combiners,GL_NV_register_combiners2,GL_NV_robustness_video_memory_purge,GL_NV_sRGB_formats,GL_NV_sample_locations,GL_NV_sample_mask_override_coverage,GL_NV_shader_atomic_counters,GL_NV_shader_atomic_float,GL_NV_shader_atomic_float64,GL_NV_shader_atomic_fp16_vector,GL_NV_shader_atomic_int64,GL_NV_shader_buffer_load,GL_NV_shader_buffer_store,GL_NV_shader_noperspective_interpolation,GL_NV_shader_storage_buffer_object,GL_NV_shader_thread_group,GL_NV_shader_thread_shuffle,GL_NV_shadow_samplers_array,GL_NV_shadow_samplers_cube,GL_NV_stereo_view_rendering,GL_NV_tessellation_program5,GL_NV_texgen_emboss,GL_NV_texgen_reflection,GL_NV_texture_barrier,GL_NV_texture_border_clamp,GL_NV_texture_compression_s3tc_update,GL_NV_texture_compression_vtc,GL_NV_texture_env_combine4,GL_NV_texture_expand_normal,GL_NV_texture_multisample,GL_NV_texture_npot_2D_mipmap,GL_NV_texture_rectangle,GL_NV_texture_rectangle_compressed,GL_NV_texture_shader,GL_NV_texture_shader2,GL_NV_texture_shader3,GL_NV_transform_feedback,GL_NV_transform_feedback2,GL_NV_uniform_buffer_unified_memory,GL_NV_vdpau_interop,GL_NV_vertex_array_range,GL_NV_vertex_array_range2,GL_NV_vertex_attrib_integer_64bit,GL_NV_vertex_buffer_unified_memory,GL_NV_vertex_program,GL_NV_vertex_program1_1,GL_NV_vertex_program2,GL_NV_vertex_program2_option,GL_NV_vertex_program3,GL_NV_vertex_program4,GL_NV_video_capture,GL_NV_viewport_array,GL_NV_viewport_array2,GL_NV_viewport_swizzle,GL_OES_EGL_image,GL_OES_EGL_image_external,GL_OES_EGL_image_external_essl3,GL_OES_byte_coordinates,GL_OES_compressed_ETC1_RGB8_sub_texture,GL_OES_compressed_ETC1_RGB8_texture,GL_OES_compressed_paletted_texture,GL_OES_copy_image,GL_OES_depth24,GL_OES_depth32,GL_OES_depth_texture,GL_OES_draw_buffers_indexed,GL_OES_draw_elements_base_vertex,GL_OES_element_index_uint,GL_OES_fbo_render_mipmap,GL_OES_fixed_point,GL_OES_fragment_precision_high,GL_OES_geometry_point_size,GL_OES_geometry_shader,GL_OES_get_program_binary,GL_OES_gpu_shader5,GL_OES_mapbuffer,GL_OES_packed_depth_stencil,GL_OES_primitive_bounding_box,GL_OES_query_matrix,GL_OES_read_format,GL_OES_required_internalformat,GL_OES_rgb8_rgba8,GL_OES_sample_shading,GL_OES_sample_variables,GL_OES_shader_image_atomic,GL_OES_shader_io_blocks,GL_OES_shader_multisample_interpolation,GL_OES_single_precision,GL_OES_standard_derivatives,GL_OES_stencil1,GL_OES_stencil4,GL_OES_surfaceless_context,GL_OES_tessellation_point_size,GL_OES_tessellation_shader,GL_OES_texture_3D,GL_OES_texture_border_clamp,GL_OES_texture_buffer,GL_OES_texture_compression_astc,GL_OES_texture_cube_map_array,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_texture_npot,GL_OES_texture_stencil8,GL_OES_texture_storage_multisample_2d_array,GL_OES_texture_view,GL_OES_vertex_array_object,GL_OES_vertex_half_float,GL_OES_vertex_type_10_10_10_2,GL_OES_viewport_array,GL_OML_interlace,GL_OML_resample,GL_OML_subsample,GL_OVR_multiview,GL_OVR_multiview2,GL_OVR_multiview_multisampled_render_to_texture,GL_PGI_misc_hints,GL_PGI_vertex_hints,GL_QCOM_alpha_test,GL_QCOM_binning_control,GL_QCOM_driver_control,GL_QCOM_extended_get,GL_QCOM_extended_get2,GL_QCOM_framebuffer_foveated,GL_QCOM_perfmon_global_mode,GL_QCOM_shader_framebuffer_fetch_noncoherent,GL_QCOM_texture_foveated,GL_QCOM_tiled_rendering,GL_QCOM_writeonly_rendering,GL_REND_screen_coordinates,GL_S3_s3tc,GL_SGIS_detail_texture,GL_SGIS_fog_function,GL_SGIS_generate_mipmap,GL_SGIS_multisample,GL_SGIS_pixel_texture,GL_SGIS_point_line_texgen,GL_SGIS_point_parameters,GL_SGIS_sharpen_texture,GL_SGIS_texture4D,GL_SGIS_texture_border_clamp,GL_SGIS_texture_color_mask,GL_SGIS_texture_edge_clamp,GL_SGIS_texture_filter4,GL_SGIS_texture_lod,GL_SGIS_texture_select,GL_SGIX_async,GL_SGIX_async_histogram,GL_SGIX_async_pixel,GL_SGIX_blend_alpha_minmax,GL_SGIX_calligraphic_fragment,GL_SGIX_clipmap,GL_SGIX_convolution_accuracy,GL_SGIX_depth_pass_instrument,GL_SGIX_depth_texture,GL_SGIX_flush_raster,GL_SGIX_fog_offset,GL_SGIX_fragment_lighting,GL_SGIX_framezoom,GL_SGIX_igloo_interface,GL_SGIX_instruments,GL_SGIX_interlace,GL_SGIX_ir_instrument1,GL_SGIX_list_priority,GL_SGIX_pixel_texture,GL_SGIX_pixel_tiles,GL_SGIX_polynomial_ffd,GL_SGIX_reference_plane,GL_SGIX_resample,GL_SGIX_scalebias_hint,GL_SGIX_shadow,GL_SGIX_shadow_ambient,GL_SGIX_sprite,GL_SGIX_subsample,GL_SGIX_tag_sample_buffer,GL_SGIX_texture_add_env,GL_SGIX_texture_coordinate_clamp,GL_SGIX_texture_lod_bias,GL_SGIX_texture_multi_buffer,GL_SGIX_texture_scale_bias,GL_SGIX_vertex_preclip,GL_SGIX_ycrcb,GL_SGIX_ycrcb_subsample,GL_SGIX_ycrcba,GL_SGI_color_matrix,GL_SGI_color_table,GL_SGI_texture_color_table,GL_SUNX_constant_data,GL_SUN_convolution_border_modes,GL_SUN_global_alpha,GL_SUN_mesh_array,GL_SUN_slice_accum,GL_SUN_triangle_list,GL_SUN_vertex,GL_VIV_shader_binary,GL_WIN_phong_shading,GL_WIN_specular_fog" - Online: - Too many extensions -*/ - +/** + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + */ #include #include #include #include -static void* get_proc(const char *namez); - -#if defined(_WIN32) || defined(__CYGWIN__) -#include -static HMODULE libGL; - -typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; +#ifndef GLAD_IMPL_UTIL_C_ +#define GLAD_IMPL_UTIL_C_ #ifdef _MSC_VER -#ifdef __has_include - #if __has_include() - #define HAVE_WINAPIFAMILY 1 - #endif -#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ - #define HAVE_WINAPIFAMILY 1 -#endif -#endif - -#ifdef HAVE_WINAPIFAMILY - #include - #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) - #define IS_UWP 1 - #endif -#endif - -static -int open_gl(void) { -#ifndef IS_UWP - libGL = LoadLibraryW(L"opengl32.dll"); - if(libGL != NULL) { - void (* tmp)(void); - tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); - gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; - return gladGetProcAddressPtr != NULL; - } -#endif - - return 0; -} - -static -void close_gl(void) { - if(libGL != NULL) { - FreeLibrary((HMODULE) libGL); - libGL = NULL; - } -} +#define GLAD_IMPL_UTIL_SSCANF sscanf_s #else -#include -static void* libGL; - -#ifndef __APPLE__ -typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; +#define GLAD_IMPL_UTIL_SSCANF sscanf #endif -static -int open_gl(void) { -#ifdef __APPLE__ - static const char *NAMES[] = { - "../Frameworks/OpenGL.framework/OpenGL", - "/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" - }; -#else - static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; +#endif /* GLAD_IMPL_UTIL_C_ */ + +#ifdef __cplusplus +extern "C" { #endif - unsigned int index = 0; - for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { - libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); - if(libGL != NULL) { -#ifdef __APPLE__ - return 1; -#else - gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, - "glXGetProcAddressARB"); - return gladGetProcAddressPtr != NULL; -#endif - } - } - return 0; +int GLAD_GL_VERSION_1_0 = 0; +int GLAD_GL_VERSION_1_1 = 0; +int GLAD_GL_VERSION_1_2 = 0; +int GLAD_GL_VERSION_1_3 = 0; +int GLAD_GL_VERSION_1_4 = 0; +int GLAD_GL_VERSION_1_5 = 0; +int GLAD_GL_VERSION_2_0 = 0; +int GLAD_GL_VERSION_2_1 = 0; +int GLAD_GL_VERSION_3_0 = 0; +int GLAD_GL_VERSION_3_1 = 0; +int GLAD_GL_VERSION_3_2 = 0; +int GLAD_GL_VERSION_3_3 = 0; +int GLAD_GL_VERSION_4_0 = 0; +int GLAD_GL_VERSION_4_1 = 0; +int GLAD_GL_VERSION_4_2 = 0; +int GLAD_GL_VERSION_4_3 = 0; +int GLAD_GL_3DFX_multisample = 0; +int GLAD_GL_3DFX_tbuffer = 0; +int GLAD_GL_3DFX_texture_compression_FXT1 = 0; +int GLAD_GL_AMD_blend_minmax_factor = 0; +int GLAD_GL_AMD_conservative_depth = 0; +int GLAD_GL_AMD_debug_output = 0; +int GLAD_GL_AMD_depth_clamp_separate = 0; +int GLAD_GL_AMD_draw_buffers_blend = 0; +int GLAD_GL_AMD_framebuffer_multisample_advanced = 0; +int GLAD_GL_AMD_framebuffer_sample_positions = 0; +int GLAD_GL_AMD_gcn_shader = 0; +int GLAD_GL_AMD_gpu_shader_half_float = 0; +int GLAD_GL_AMD_gpu_shader_int16 = 0; +int GLAD_GL_AMD_gpu_shader_int64 = 0; +int GLAD_GL_AMD_interleaved_elements = 0; +int GLAD_GL_AMD_multi_draw_indirect = 0; +int GLAD_GL_AMD_name_gen_delete = 0; +int GLAD_GL_AMD_occlusion_query_event = 0; +int GLAD_GL_AMD_performance_monitor = 0; +int GLAD_GL_AMD_pinned_memory = 0; +int GLAD_GL_AMD_query_buffer_object = 0; +int GLAD_GL_AMD_sample_positions = 0; +int GLAD_GL_AMD_seamless_cubemap_per_texture = 0; +int GLAD_GL_AMD_shader_atomic_counter_ops = 0; +int GLAD_GL_AMD_shader_ballot = 0; +int GLAD_GL_AMD_shader_explicit_vertex_parameter = 0; +int GLAD_GL_AMD_shader_gpu_shader_half_float_fetch = 0; +int GLAD_GL_AMD_shader_image_load_store_lod = 0; +int GLAD_GL_AMD_shader_stencil_export = 0; +int GLAD_GL_AMD_shader_trinary_minmax = 0; +int GLAD_GL_AMD_sparse_texture = 0; +int GLAD_GL_AMD_stencil_operation_extended = 0; +int GLAD_GL_AMD_texture_gather_bias_lod = 0; +int GLAD_GL_AMD_texture_texture4 = 0; +int GLAD_GL_AMD_transform_feedback3_lines_triangles = 0; +int GLAD_GL_AMD_transform_feedback4 = 0; +int GLAD_GL_AMD_vertex_shader_layer = 0; +int GLAD_GL_AMD_vertex_shader_tessellator = 0; +int GLAD_GL_AMD_vertex_shader_viewport_index = 0; +int GLAD_GL_APPLE_aux_depth_stencil = 0; +int GLAD_GL_APPLE_client_storage = 0; +int GLAD_GL_APPLE_element_array = 0; +int GLAD_GL_APPLE_fence = 0; +int GLAD_GL_APPLE_float_pixels = 0; +int GLAD_GL_APPLE_flush_buffer_range = 0; +int GLAD_GL_APPLE_object_purgeable = 0; +int GLAD_GL_APPLE_rgb_422 = 0; +int GLAD_GL_APPLE_row_bytes = 0; +int GLAD_GL_APPLE_specular_vector = 0; +int GLAD_GL_APPLE_texture_range = 0; +int GLAD_GL_APPLE_transform_hint = 0; +int GLAD_GL_APPLE_vertex_array_object = 0; +int GLAD_GL_APPLE_vertex_array_range = 0; +int GLAD_GL_APPLE_vertex_program_evaluators = 0; +int GLAD_GL_APPLE_ycbcr_422 = 0; +int GLAD_GL_ARB_ES2_compatibility = 0; +int GLAD_GL_ARB_ES3_1_compatibility = 0; +int GLAD_GL_ARB_ES3_2_compatibility = 0; +int GLAD_GL_ARB_ES3_compatibility = 0; +int GLAD_GL_ARB_arrays_of_arrays = 0; +int GLAD_GL_ARB_base_instance = 0; +int GLAD_GL_ARB_bindless_texture = 0; +int GLAD_GL_ARB_blend_func_extended = 0; +int GLAD_GL_ARB_buffer_storage = 0; +int GLAD_GL_ARB_cl_event = 0; +int GLAD_GL_ARB_clear_buffer_object = 0; +int GLAD_GL_ARB_clear_texture = 0; +int GLAD_GL_ARB_clip_control = 0; +int GLAD_GL_ARB_color_buffer_float = 0; +int GLAD_GL_ARB_compatibility = 0; +int GLAD_GL_ARB_compressed_texture_pixel_storage = 0; +int GLAD_GL_ARB_compute_shader = 0; +int GLAD_GL_ARB_compute_variable_group_size = 0; +int GLAD_GL_ARB_conditional_render_inverted = 0; +int GLAD_GL_ARB_conservative_depth = 0; +int GLAD_GL_ARB_copy_buffer = 0; +int GLAD_GL_ARB_copy_image = 0; +int GLAD_GL_ARB_cull_distance = 0; +int GLAD_GL_ARB_debug_output = 0; +int GLAD_GL_ARB_depth_buffer_float = 0; +int GLAD_GL_ARB_depth_clamp = 0; +int GLAD_GL_ARB_depth_texture = 0; +int GLAD_GL_ARB_derivative_control = 0; +int GLAD_GL_ARB_direct_state_access = 0; +int GLAD_GL_ARB_draw_buffers = 0; +int GLAD_GL_ARB_draw_buffers_blend = 0; +int GLAD_GL_ARB_draw_elements_base_vertex = 0; +int GLAD_GL_ARB_draw_indirect = 0; +int GLAD_GL_ARB_draw_instanced = 0; +int GLAD_GL_ARB_enhanced_layouts = 0; +int GLAD_GL_ARB_explicit_attrib_location = 0; +int GLAD_GL_ARB_explicit_uniform_location = 0; +int GLAD_GL_ARB_fragment_coord_conventions = 0; +int GLAD_GL_ARB_fragment_layer_viewport = 0; +int GLAD_GL_ARB_fragment_program = 0; +int GLAD_GL_ARB_fragment_program_shadow = 0; +int GLAD_GL_ARB_fragment_shader = 0; +int GLAD_GL_ARB_fragment_shader_interlock = 0; +int GLAD_GL_ARB_framebuffer_no_attachments = 0; +int GLAD_GL_ARB_framebuffer_object = 0; +int GLAD_GL_ARB_framebuffer_sRGB = 0; +int GLAD_GL_ARB_geometry_shader4 = 0; +int GLAD_GL_ARB_get_program_binary = 0; +int GLAD_GL_ARB_get_texture_sub_image = 0; +int GLAD_GL_ARB_gl_spirv = 0; +int GLAD_GL_ARB_gpu_shader5 = 0; +int GLAD_GL_ARB_gpu_shader_fp64 = 0; +int GLAD_GL_ARB_gpu_shader_int64 = 0; +int GLAD_GL_ARB_half_float_pixel = 0; +int GLAD_GL_ARB_half_float_vertex = 0; +int GLAD_GL_ARB_imaging = 0; +int GLAD_GL_ARB_indirect_parameters = 0; +int GLAD_GL_ARB_instanced_arrays = 0; +int GLAD_GL_ARB_internalformat_query = 0; +int GLAD_GL_ARB_internalformat_query2 = 0; +int GLAD_GL_ARB_invalidate_subdata = 0; +int GLAD_GL_ARB_map_buffer_alignment = 0; +int GLAD_GL_ARB_map_buffer_range = 0; +int GLAD_GL_ARB_matrix_palette = 0; +int GLAD_GL_ARB_multi_bind = 0; +int GLAD_GL_ARB_multi_draw_indirect = 0; +int GLAD_GL_ARB_multisample = 0; +int GLAD_GL_ARB_multitexture = 0; +int GLAD_GL_ARB_occlusion_query = 0; +int GLAD_GL_ARB_occlusion_query2 = 0; +int GLAD_GL_ARB_parallel_shader_compile = 0; +int GLAD_GL_ARB_pipeline_statistics_query = 0; +int GLAD_GL_ARB_pixel_buffer_object = 0; +int GLAD_GL_ARB_point_parameters = 0; +int GLAD_GL_ARB_point_sprite = 0; +int GLAD_GL_ARB_polygon_offset_clamp = 0; +int GLAD_GL_ARB_post_depth_coverage = 0; +int GLAD_GL_ARB_program_interface_query = 0; +int GLAD_GL_ARB_provoking_vertex = 0; +int GLAD_GL_ARB_query_buffer_object = 0; +int GLAD_GL_ARB_robust_buffer_access_behavior = 0; +int GLAD_GL_ARB_robustness = 0; +int GLAD_GL_ARB_robustness_isolation = 0; +int GLAD_GL_ARB_sample_locations = 0; +int GLAD_GL_ARB_sample_shading = 0; +int GLAD_GL_ARB_sampler_objects = 0; +int GLAD_GL_ARB_seamless_cube_map = 0; +int GLAD_GL_ARB_seamless_cubemap_per_texture = 0; +int GLAD_GL_ARB_separate_shader_objects = 0; +int GLAD_GL_ARB_shader_atomic_counter_ops = 0; +int GLAD_GL_ARB_shader_atomic_counters = 0; +int GLAD_GL_ARB_shader_ballot = 0; +int GLAD_GL_ARB_shader_bit_encoding = 0; +int GLAD_GL_ARB_shader_clock = 0; +int GLAD_GL_ARB_shader_draw_parameters = 0; +int GLAD_GL_ARB_shader_group_vote = 0; +int GLAD_GL_ARB_shader_image_load_store = 0; +int GLAD_GL_ARB_shader_image_size = 0; +int GLAD_GL_ARB_shader_objects = 0; +int GLAD_GL_ARB_shader_precision = 0; +int GLAD_GL_ARB_shader_stencil_export = 0; +int GLAD_GL_ARB_shader_storage_buffer_object = 0; +int GLAD_GL_ARB_shader_subroutine = 0; +int GLAD_GL_ARB_shader_texture_image_samples = 0; +int GLAD_GL_ARB_shader_texture_lod = 0; +int GLAD_GL_ARB_shader_viewport_layer_array = 0; +int GLAD_GL_ARB_shading_language_100 = 0; +int GLAD_GL_ARB_shading_language_420pack = 0; +int GLAD_GL_ARB_shading_language_include = 0; +int GLAD_GL_ARB_shading_language_packing = 0; +int GLAD_GL_ARB_shadow = 0; +int GLAD_GL_ARB_shadow_ambient = 0; +int GLAD_GL_ARB_sparse_buffer = 0; +int GLAD_GL_ARB_sparse_texture = 0; +int GLAD_GL_ARB_sparse_texture2 = 0; +int GLAD_GL_ARB_sparse_texture_clamp = 0; +int GLAD_GL_ARB_spirv_extensions = 0; +int GLAD_GL_ARB_stencil_texturing = 0; +int GLAD_GL_ARB_sync = 0; +int GLAD_GL_ARB_tessellation_shader = 0; +int GLAD_GL_ARB_texture_barrier = 0; +int GLAD_GL_ARB_texture_border_clamp = 0; +int GLAD_GL_ARB_texture_buffer_object = 0; +int GLAD_GL_ARB_texture_buffer_object_rgb32 = 0; +int GLAD_GL_ARB_texture_buffer_range = 0; +int GLAD_GL_ARB_texture_compression = 0; +int GLAD_GL_ARB_texture_compression_bptc = 0; +int GLAD_GL_ARB_texture_compression_rgtc = 0; +int GLAD_GL_ARB_texture_cube_map = 0; +int GLAD_GL_ARB_texture_cube_map_array = 0; +int GLAD_GL_ARB_texture_env_add = 0; +int GLAD_GL_ARB_texture_env_combine = 0; +int GLAD_GL_ARB_texture_env_crossbar = 0; +int GLAD_GL_ARB_texture_env_dot3 = 0; +int GLAD_GL_ARB_texture_filter_anisotropic = 0; +int GLAD_GL_ARB_texture_filter_minmax = 0; +int GLAD_GL_ARB_texture_float = 0; +int GLAD_GL_ARB_texture_gather = 0; +int GLAD_GL_ARB_texture_mirror_clamp_to_edge = 0; +int GLAD_GL_ARB_texture_mirrored_repeat = 0; +int GLAD_GL_ARB_texture_multisample = 0; +int GLAD_GL_ARB_texture_non_power_of_two = 0; +int GLAD_GL_ARB_texture_query_levels = 0; +int GLAD_GL_ARB_texture_query_lod = 0; +int GLAD_GL_ARB_texture_rectangle = 0; +int GLAD_GL_ARB_texture_rg = 0; +int GLAD_GL_ARB_texture_rgb10_a2ui = 0; +int GLAD_GL_ARB_texture_stencil8 = 0; +int GLAD_GL_ARB_texture_storage = 0; +int GLAD_GL_ARB_texture_storage_multisample = 0; +int GLAD_GL_ARB_texture_swizzle = 0; +int GLAD_GL_ARB_texture_view = 0; +int GLAD_GL_ARB_timer_query = 0; +int GLAD_GL_ARB_transform_feedback2 = 0; +int GLAD_GL_ARB_transform_feedback3 = 0; +int GLAD_GL_ARB_transform_feedback_instanced = 0; +int GLAD_GL_ARB_transform_feedback_overflow_query = 0; +int GLAD_GL_ARB_transpose_matrix = 0; +int GLAD_GL_ARB_uniform_buffer_object = 0; +int GLAD_GL_ARB_vertex_array_bgra = 0; +int GLAD_GL_ARB_vertex_array_object = 0; +int GLAD_GL_ARB_vertex_attrib_64bit = 0; +int GLAD_GL_ARB_vertex_attrib_binding = 0; +int GLAD_GL_ARB_vertex_blend = 0; +int GLAD_GL_ARB_vertex_buffer_object = 0; +int GLAD_GL_ARB_vertex_program = 0; +int GLAD_GL_ARB_vertex_shader = 0; +int GLAD_GL_ARB_vertex_type_10f_11f_11f_rev = 0; +int GLAD_GL_ARB_vertex_type_2_10_10_10_rev = 0; +int GLAD_GL_ARB_viewport_array = 0; +int GLAD_GL_ARB_window_pos = 0; +int GLAD_GL_ATI_draw_buffers = 0; +int GLAD_GL_ATI_element_array = 0; +int GLAD_GL_ATI_envmap_bumpmap = 0; +int GLAD_GL_ATI_fragment_shader = 0; +int GLAD_GL_ATI_map_object_buffer = 0; +int GLAD_GL_ATI_meminfo = 0; +int GLAD_GL_ATI_pixel_format_float = 0; +int GLAD_GL_ATI_pn_triangles = 0; +int GLAD_GL_ATI_separate_stencil = 0; +int GLAD_GL_ATI_text_fragment_shader = 0; +int GLAD_GL_ATI_texture_env_combine3 = 0; +int GLAD_GL_ATI_texture_float = 0; +int GLAD_GL_ATI_texture_mirror_once = 0; +int GLAD_GL_ATI_vertex_array_object = 0; +int GLAD_GL_ATI_vertex_attrib_array_object = 0; +int GLAD_GL_ATI_vertex_streams = 0; +int GLAD_GL_EXT_422_pixels = 0; +int GLAD_GL_EXT_EGL_image_storage = 0; +int GLAD_GL_EXT_EGL_sync = 0; +int GLAD_GL_EXT_abgr = 0; +int GLAD_GL_EXT_bgra = 0; +int GLAD_GL_EXT_bindable_uniform = 0; +int GLAD_GL_EXT_blend_color = 0; +int GLAD_GL_EXT_blend_equation_separate = 0; +int GLAD_GL_EXT_blend_func_separate = 0; +int GLAD_GL_EXT_blend_logic_op = 0; +int GLAD_GL_EXT_blend_minmax = 0; +int GLAD_GL_EXT_blend_subtract = 0; +int GLAD_GL_EXT_clip_volume_hint = 0; +int GLAD_GL_EXT_cmyka = 0; +int GLAD_GL_EXT_color_subtable = 0; +int GLAD_GL_EXT_compiled_vertex_array = 0; +int GLAD_GL_EXT_convolution = 0; +int GLAD_GL_EXT_coordinate_frame = 0; +int GLAD_GL_EXT_copy_texture = 0; +int GLAD_GL_EXT_cull_vertex = 0; +int GLAD_GL_EXT_debug_label = 0; +int GLAD_GL_EXT_debug_marker = 0; +int GLAD_GL_EXT_depth_bounds_test = 0; +int GLAD_GL_EXT_direct_state_access = 0; +int GLAD_GL_EXT_draw_buffers2 = 0; +int GLAD_GL_EXT_draw_instanced = 0; +int GLAD_GL_EXT_draw_range_elements = 0; +int GLAD_GL_EXT_external_buffer = 0; +int GLAD_GL_EXT_fog_coord = 0; +int GLAD_GL_EXT_framebuffer_blit = 0; +int GLAD_GL_EXT_framebuffer_multisample = 0; +int GLAD_GL_EXT_framebuffer_multisample_blit_scaled = 0; +int GLAD_GL_EXT_framebuffer_object = 0; +int GLAD_GL_EXT_framebuffer_sRGB = 0; +int GLAD_GL_EXT_geometry_shader4 = 0; +int GLAD_GL_EXT_gpu_program_parameters = 0; +int GLAD_GL_EXT_gpu_shader4 = 0; +int GLAD_GL_EXT_histogram = 0; +int GLAD_GL_EXT_index_array_formats = 0; +int GLAD_GL_EXT_index_func = 0; +int GLAD_GL_EXT_index_material = 0; +int GLAD_GL_EXT_index_texture = 0; +int GLAD_GL_EXT_light_texture = 0; +int GLAD_GL_EXT_memory_object = 0; +int GLAD_GL_EXT_memory_object_fd = 0; +int GLAD_GL_EXT_memory_object_win32 = 0; +int GLAD_GL_EXT_misc_attribute = 0; +int GLAD_GL_EXT_multi_draw_arrays = 0; +int GLAD_GL_EXT_multisample = 0; +int GLAD_GL_EXT_multiview_tessellation_geometry_shader = 0; +int GLAD_GL_EXT_multiview_texture_multisample = 0; +int GLAD_GL_EXT_multiview_timer_query = 0; +int GLAD_GL_EXT_packed_depth_stencil = 0; +int GLAD_GL_EXT_packed_float = 0; +int GLAD_GL_EXT_packed_pixels = 0; +int GLAD_GL_EXT_paletted_texture = 0; +int GLAD_GL_EXT_pixel_buffer_object = 0; +int GLAD_GL_EXT_pixel_transform = 0; +int GLAD_GL_EXT_pixel_transform_color_table = 0; +int GLAD_GL_EXT_point_parameters = 0; +int GLAD_GL_EXT_polygon_offset = 0; +int GLAD_GL_EXT_polygon_offset_clamp = 0; +int GLAD_GL_EXT_post_depth_coverage = 0; +int GLAD_GL_EXT_provoking_vertex = 0; +int GLAD_GL_EXT_raster_multisample = 0; +int GLAD_GL_EXT_rescale_normal = 0; +int GLAD_GL_EXT_secondary_color = 0; +int GLAD_GL_EXT_semaphore = 0; +int GLAD_GL_EXT_semaphore_fd = 0; +int GLAD_GL_EXT_semaphore_win32 = 0; +int GLAD_GL_EXT_separate_shader_objects = 0; +int GLAD_GL_EXT_separate_specular_color = 0; +int GLAD_GL_EXT_shader_framebuffer_fetch = 0; +int GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent = 0; +int GLAD_GL_EXT_shader_image_load_formatted = 0; +int GLAD_GL_EXT_shader_image_load_store = 0; +int GLAD_GL_EXT_shader_integer_mix = 0; +int GLAD_GL_EXT_shader_samples_identical = 0; +int GLAD_GL_EXT_shadow_funcs = 0; +int GLAD_GL_EXT_shared_texture_palette = 0; +int GLAD_GL_EXT_sparse_texture2 = 0; +int GLAD_GL_EXT_stencil_clear_tag = 0; +int GLAD_GL_EXT_stencil_two_side = 0; +int GLAD_GL_EXT_stencil_wrap = 0; +int GLAD_GL_EXT_subtexture = 0; +int GLAD_GL_EXT_texture = 0; +int GLAD_GL_EXT_texture3D = 0; +int GLAD_GL_EXT_texture_array = 0; +int GLAD_GL_EXT_texture_buffer_object = 0; +int GLAD_GL_EXT_texture_compression_latc = 0; +int GLAD_GL_EXT_texture_compression_rgtc = 0; +int GLAD_GL_EXT_texture_compression_s3tc = 0; +int GLAD_GL_EXT_texture_cube_map = 0; +int GLAD_GL_EXT_texture_env_add = 0; +int GLAD_GL_EXT_texture_env_combine = 0; +int GLAD_GL_EXT_texture_env_dot3 = 0; +int GLAD_GL_EXT_texture_filter_anisotropic = 0; +int GLAD_GL_EXT_texture_filter_minmax = 0; +int GLAD_GL_EXT_texture_integer = 0; +int GLAD_GL_EXT_texture_lod_bias = 0; +int GLAD_GL_EXT_texture_mirror_clamp = 0; +int GLAD_GL_EXT_texture_object = 0; +int GLAD_GL_EXT_texture_perturb_normal = 0; +int GLAD_GL_EXT_texture_sRGB = 0; +int GLAD_GL_EXT_texture_sRGB_R8 = 0; +int GLAD_GL_EXT_texture_sRGB_RG8 = 0; +int GLAD_GL_EXT_texture_sRGB_decode = 0; +int GLAD_GL_EXT_texture_shadow_lod = 0; +int GLAD_GL_EXT_texture_shared_exponent = 0; +int GLAD_GL_EXT_texture_snorm = 0; +int GLAD_GL_EXT_texture_storage = 0; +int GLAD_GL_EXT_texture_swizzle = 0; +int GLAD_GL_EXT_timer_query = 0; +int GLAD_GL_EXT_transform_feedback = 0; +int GLAD_GL_EXT_vertex_array = 0; +int GLAD_GL_EXT_vertex_array_bgra = 0; +int GLAD_GL_EXT_vertex_attrib_64bit = 0; +int GLAD_GL_EXT_vertex_shader = 0; +int GLAD_GL_EXT_vertex_weighting = 0; +int GLAD_GL_EXT_win32_keyed_mutex = 0; +int GLAD_GL_EXT_window_rectangles = 0; +int GLAD_GL_EXT_x11_sync_object = 0; +int GLAD_GL_GREMEDY_frame_terminator = 0; +int GLAD_GL_GREMEDY_string_marker = 0; +int GLAD_GL_HP_convolution_border_modes = 0; +int GLAD_GL_HP_image_transform = 0; +int GLAD_GL_HP_occlusion_test = 0; +int GLAD_GL_HP_texture_lighting = 0; +int GLAD_GL_IBM_cull_vertex = 0; +int GLAD_GL_IBM_multimode_draw_arrays = 0; +int GLAD_GL_IBM_rasterpos_clip = 0; +int GLAD_GL_IBM_static_data = 0; +int GLAD_GL_IBM_texture_mirrored_repeat = 0; +int GLAD_GL_IBM_vertex_array_lists = 0; +int GLAD_GL_INGR_blend_func_separate = 0; +int GLAD_GL_INGR_color_clamp = 0; +int GLAD_GL_INGR_interlace_read = 0; +int GLAD_GL_INTEL_blackhole_render = 0; +int GLAD_GL_INTEL_conservative_rasterization = 0; +int GLAD_GL_INTEL_fragment_shader_ordering = 0; +int GLAD_GL_INTEL_framebuffer_CMAA = 0; +int GLAD_GL_INTEL_map_texture = 0; +int GLAD_GL_INTEL_parallel_arrays = 0; +int GLAD_GL_INTEL_performance_query = 0; +int GLAD_GL_KHR_blend_equation_advanced = 0; +int GLAD_GL_KHR_blend_equation_advanced_coherent = 0; +int GLAD_GL_KHR_context_flush_control = 0; +int GLAD_GL_KHR_debug = 0; +int GLAD_GL_KHR_no_error = 0; +int GLAD_GL_KHR_parallel_shader_compile = 0; +int GLAD_GL_KHR_robust_buffer_access_behavior = 0; +int GLAD_GL_KHR_robustness = 0; +int GLAD_GL_KHR_shader_subgroup = 0; +int GLAD_GL_KHR_texture_compression_astc_hdr = 0; +int GLAD_GL_KHR_texture_compression_astc_ldr = 0; +int GLAD_GL_KHR_texture_compression_astc_sliced_3d = 0; +int GLAD_GL_MESAX_texture_stack = 0; +int GLAD_GL_MESA_framebuffer_flip_x = 0; +int GLAD_GL_MESA_framebuffer_flip_y = 0; +int GLAD_GL_MESA_framebuffer_swap_xy = 0; +int GLAD_GL_MESA_pack_invert = 0; +int GLAD_GL_MESA_program_binary_formats = 0; +int GLAD_GL_MESA_resize_buffers = 0; +int GLAD_GL_MESA_shader_integer_functions = 0; +int GLAD_GL_MESA_tile_raster_order = 0; +int GLAD_GL_MESA_window_pos = 0; +int GLAD_GL_MESA_ycbcr_texture = 0; +int GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers = 0; +int GLAD_GL_NVX_conditional_render = 0; +int GLAD_GL_NVX_gpu_memory_info = 0; +int GLAD_GL_NVX_gpu_multicast2 = 0; +int GLAD_GL_NVX_linked_gpu_multicast = 0; +int GLAD_GL_NVX_progress_fence = 0; +int GLAD_GL_NV_alpha_to_coverage_dither_control = 0; +int GLAD_GL_NV_bindless_multi_draw_indirect = 0; +int GLAD_GL_NV_bindless_multi_draw_indirect_count = 0; +int GLAD_GL_NV_bindless_texture = 0; +int GLAD_GL_NV_blend_equation_advanced = 0; +int GLAD_GL_NV_blend_equation_advanced_coherent = 0; +int GLAD_GL_NV_blend_minmax_factor = 0; +int GLAD_GL_NV_blend_square = 0; +int GLAD_GL_NV_clip_space_w_scaling = 0; +int GLAD_GL_NV_command_list = 0; +int GLAD_GL_NV_compute_program5 = 0; +int GLAD_GL_NV_compute_shader_derivatives = 0; +int GLAD_GL_NV_conditional_render = 0; +int GLAD_GL_NV_conservative_raster = 0; +int GLAD_GL_NV_conservative_raster_dilate = 0; +int GLAD_GL_NV_conservative_raster_pre_snap = 0; +int GLAD_GL_NV_conservative_raster_pre_snap_triangles = 0; +int GLAD_GL_NV_conservative_raster_underestimation = 0; +int GLAD_GL_NV_copy_depth_to_color = 0; +int GLAD_GL_NV_copy_image = 0; +int GLAD_GL_NV_deep_texture3D = 0; +int GLAD_GL_NV_depth_buffer_float = 0; +int GLAD_GL_NV_depth_clamp = 0; +int GLAD_GL_NV_draw_texture = 0; +int GLAD_GL_NV_draw_vulkan_image = 0; +int GLAD_GL_NV_evaluators = 0; +int GLAD_GL_NV_explicit_multisample = 0; +int GLAD_GL_NV_fence = 0; +int GLAD_GL_NV_fill_rectangle = 0; +int GLAD_GL_NV_float_buffer = 0; +int GLAD_GL_NV_fog_distance = 0; +int GLAD_GL_NV_fragment_coverage_to_color = 0; +int GLAD_GL_NV_fragment_program = 0; +int GLAD_GL_NV_fragment_program2 = 0; +int GLAD_GL_NV_fragment_program4 = 0; +int GLAD_GL_NV_fragment_program_option = 0; +int GLAD_GL_NV_fragment_shader_barycentric = 0; +int GLAD_GL_NV_fragment_shader_interlock = 0; +int GLAD_GL_NV_framebuffer_mixed_samples = 0; +int GLAD_GL_NV_framebuffer_multisample_coverage = 0; +int GLAD_GL_NV_geometry_program4 = 0; +int GLAD_GL_NV_geometry_shader4 = 0; +int GLAD_GL_NV_geometry_shader_passthrough = 0; +int GLAD_GL_NV_gpu_multicast = 0; +int GLAD_GL_NV_gpu_program4 = 0; +int GLAD_GL_NV_gpu_program5 = 0; +int GLAD_GL_NV_gpu_program5_mem_extended = 0; +int GLAD_GL_NV_gpu_shader5 = 0; +int GLAD_GL_NV_half_float = 0; +int GLAD_GL_NV_internalformat_sample_query = 0; +int GLAD_GL_NV_light_max_exponent = 0; +int GLAD_GL_NV_memory_attachment = 0; +int GLAD_GL_NV_memory_object_sparse = 0; +int GLAD_GL_NV_mesh_shader = 0; +int GLAD_GL_NV_multisample_coverage = 0; +int GLAD_GL_NV_multisample_filter_hint = 0; +int GLAD_GL_NV_occlusion_query = 0; +int GLAD_GL_NV_packed_depth_stencil = 0; +int GLAD_GL_NV_parameter_buffer_object = 0; +int GLAD_GL_NV_parameter_buffer_object2 = 0; +int GLAD_GL_NV_path_rendering = 0; +int GLAD_GL_NV_path_rendering_shared_edge = 0; +int GLAD_GL_NV_pixel_data_range = 0; +int GLAD_GL_NV_point_sprite = 0; +int GLAD_GL_NV_present_video = 0; +int GLAD_GL_NV_primitive_restart = 0; +int GLAD_GL_NV_primitive_shading_rate = 0; +int GLAD_GL_NV_query_resource = 0; +int GLAD_GL_NV_query_resource_tag = 0; +int GLAD_GL_NV_register_combiners = 0; +int GLAD_GL_NV_register_combiners2 = 0; +int GLAD_GL_NV_representative_fragment_test = 0; +int GLAD_GL_NV_robustness_video_memory_purge = 0; +int GLAD_GL_NV_sample_locations = 0; +int GLAD_GL_NV_sample_mask_override_coverage = 0; +int GLAD_GL_NV_scissor_exclusive = 0; +int GLAD_GL_NV_shader_atomic_counters = 0; +int GLAD_GL_NV_shader_atomic_float = 0; +int GLAD_GL_NV_shader_atomic_float64 = 0; +int GLAD_GL_NV_shader_atomic_fp16_vector = 0; +int GLAD_GL_NV_shader_atomic_int64 = 0; +int GLAD_GL_NV_shader_buffer_load = 0; +int GLAD_GL_NV_shader_buffer_store = 0; +int GLAD_GL_NV_shader_storage_buffer_object = 0; +int GLAD_GL_NV_shader_subgroup_partitioned = 0; +int GLAD_GL_NV_shader_texture_footprint = 0; +int GLAD_GL_NV_shader_thread_group = 0; +int GLAD_GL_NV_shader_thread_shuffle = 0; +int GLAD_GL_NV_shading_rate_image = 0; +int GLAD_GL_NV_stereo_view_rendering = 0; +int GLAD_GL_NV_tessellation_program5 = 0; +int GLAD_GL_NV_texgen_emboss = 0; +int GLAD_GL_NV_texgen_reflection = 0; +int GLAD_GL_NV_texture_barrier = 0; +int GLAD_GL_NV_texture_compression_vtc = 0; +int GLAD_GL_NV_texture_env_combine4 = 0; +int GLAD_GL_NV_texture_expand_normal = 0; +int GLAD_GL_NV_texture_multisample = 0; +int GLAD_GL_NV_texture_rectangle = 0; +int GLAD_GL_NV_texture_rectangle_compressed = 0; +int GLAD_GL_NV_texture_shader = 0; +int GLAD_GL_NV_texture_shader2 = 0; +int GLAD_GL_NV_texture_shader3 = 0; +int GLAD_GL_NV_timeline_semaphore = 0; +int GLAD_GL_NV_transform_feedback = 0; +int GLAD_GL_NV_transform_feedback2 = 0; +int GLAD_GL_NV_uniform_buffer_unified_memory = 0; +int GLAD_GL_NV_vdpau_interop = 0; +int GLAD_GL_NV_vdpau_interop2 = 0; +int GLAD_GL_NV_vertex_array_range = 0; +int GLAD_GL_NV_vertex_array_range2 = 0; +int GLAD_GL_NV_vertex_attrib_integer_64bit = 0; +int GLAD_GL_NV_vertex_buffer_unified_memory = 0; +int GLAD_GL_NV_vertex_program = 0; +int GLAD_GL_NV_vertex_program1_1 = 0; +int GLAD_GL_NV_vertex_program2 = 0; +int GLAD_GL_NV_vertex_program2_option = 0; +int GLAD_GL_NV_vertex_program3 = 0; +int GLAD_GL_NV_vertex_program4 = 0; +int GLAD_GL_NV_video_capture = 0; +int GLAD_GL_NV_viewport_array2 = 0; +int GLAD_GL_NV_viewport_swizzle = 0; +int GLAD_GL_OES_byte_coordinates = 0; +int GLAD_GL_OES_compressed_paletted_texture = 0; +int GLAD_GL_OES_fixed_point = 0; +int GLAD_GL_OES_query_matrix = 0; +int GLAD_GL_OES_read_format = 0; +int GLAD_GL_OES_single_precision = 0; +int GLAD_GL_OML_interlace = 0; +int GLAD_GL_OML_resample = 0; +int GLAD_GL_OML_subsample = 0; +int GLAD_GL_OVR_multiview = 0; +int GLAD_GL_OVR_multiview2 = 0; +int GLAD_GL_PGI_misc_hints = 0; +int GLAD_GL_PGI_vertex_hints = 0; +int GLAD_GL_REND_screen_coordinates = 0; +int GLAD_GL_S3_s3tc = 0; +int GLAD_GL_SGIS_detail_texture = 0; +int GLAD_GL_SGIS_fog_function = 0; +int GLAD_GL_SGIS_generate_mipmap = 0; +int GLAD_GL_SGIS_multisample = 0; +int GLAD_GL_SGIS_pixel_texture = 0; +int GLAD_GL_SGIS_point_line_texgen = 0; +int GLAD_GL_SGIS_point_parameters = 0; +int GLAD_GL_SGIS_sharpen_texture = 0; +int GLAD_GL_SGIS_texture4D = 0; +int GLAD_GL_SGIS_texture_border_clamp = 0; +int GLAD_GL_SGIS_texture_color_mask = 0; +int GLAD_GL_SGIS_texture_edge_clamp = 0; +int GLAD_GL_SGIS_texture_filter4 = 0; +int GLAD_GL_SGIS_texture_lod = 0; +int GLAD_GL_SGIS_texture_select = 0; +int GLAD_GL_SGIX_async = 0; +int GLAD_GL_SGIX_async_histogram = 0; +int GLAD_GL_SGIX_async_pixel = 0; +int GLAD_GL_SGIX_blend_alpha_minmax = 0; +int GLAD_GL_SGIX_calligraphic_fragment = 0; +int GLAD_GL_SGIX_clipmap = 0; +int GLAD_GL_SGIX_convolution_accuracy = 0; +int GLAD_GL_SGIX_depth_pass_instrument = 0; +int GLAD_GL_SGIX_depth_texture = 0; +int GLAD_GL_SGIX_flush_raster = 0; +int GLAD_GL_SGIX_fog_offset = 0; +int GLAD_GL_SGIX_fragment_lighting = 0; +int GLAD_GL_SGIX_framezoom = 0; +int GLAD_GL_SGIX_igloo_interface = 0; +int GLAD_GL_SGIX_instruments = 0; +int GLAD_GL_SGIX_interlace = 0; +int GLAD_GL_SGIX_ir_instrument1 = 0; +int GLAD_GL_SGIX_list_priority = 0; +int GLAD_GL_SGIX_pixel_texture = 0; +int GLAD_GL_SGIX_pixel_tiles = 0; +int GLAD_GL_SGIX_polynomial_ffd = 0; +int GLAD_GL_SGIX_reference_plane = 0; +int GLAD_GL_SGIX_resample = 0; +int GLAD_GL_SGIX_scalebias_hint = 0; +int GLAD_GL_SGIX_shadow = 0; +int GLAD_GL_SGIX_shadow_ambient = 0; +int GLAD_GL_SGIX_sprite = 0; +int GLAD_GL_SGIX_subsample = 0; +int GLAD_GL_SGIX_tag_sample_buffer = 0; +int GLAD_GL_SGIX_texture_add_env = 0; +int GLAD_GL_SGIX_texture_coordinate_clamp = 0; +int GLAD_GL_SGIX_texture_lod_bias = 0; +int GLAD_GL_SGIX_texture_multi_buffer = 0; +int GLAD_GL_SGIX_texture_scale_bias = 0; +int GLAD_GL_SGIX_vertex_preclip = 0; +int GLAD_GL_SGIX_ycrcb = 0; +int GLAD_GL_SGIX_ycrcb_subsample = 0; +int GLAD_GL_SGIX_ycrcba = 0; +int GLAD_GL_SGI_color_matrix = 0; +int GLAD_GL_SGI_color_table = 0; +int GLAD_GL_SGI_texture_color_table = 0; +int GLAD_GL_SUNX_constant_data = 0; +int GLAD_GL_SUN_convolution_border_modes = 0; +int GLAD_GL_SUN_global_alpha = 0; +int GLAD_GL_SUN_mesh_array = 0; +int GLAD_GL_SUN_slice_accum = 0; +int GLAD_GL_SUN_triangle_list = 0; +int GLAD_GL_SUN_vertex = 0; +int GLAD_GL_WIN_phong_shading = 0; +int GLAD_GL_WIN_specular_fog = 0; + + + +PFNGLACCUMXOESPROC glad_glAccumxOES = NULL; +PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC glad_glAcquireKeyedMutexWin32EXT = NULL; +PFNGLACTIVEPROGRAMEXTPROC glad_glActiveProgramEXT = NULL; +PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram = NULL; +PFNGLACTIVESTENCILFACEEXTPROC glad_glActiveStencilFaceEXT = NULL; +PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; +PFNGLACTIVETEXTUREARBPROC glad_glActiveTextureARB = NULL; +PFNGLACTIVEVARYINGNVPROC glad_glActiveVaryingNV = NULL; +PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI = NULL; +PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI = NULL; +PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI = NULL; +PFNGLALPHAFUNCXOESPROC glad_glAlphaFuncxOES = NULL; +PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC glad_glAlphaToCoverageDitherControlNV = NULL; +PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC glad_glApplyFramebufferAttachmentCMAAINTEL = NULL; +PFNGLAPPLYTEXTUREEXTPROC glad_glApplyTextureEXT = NULL; +PFNGLAREPROGRAMSRESIDENTNVPROC glad_glAreProgramsResidentNV = NULL; +PFNGLARETEXTURESRESIDENTEXTPROC glad_glAreTexturesResidentEXT = NULL; +PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT = NULL; +PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI = NULL; +PFNGLASYNCCOPYBUFFERSUBDATANVXPROC glad_glAsyncCopyBufferSubDataNVX = NULL; +PFNGLASYNCCOPYIMAGESUBDATANVXPROC glad_glAsyncCopyImageSubDataNVX = NULL; +PFNGLASYNCMARKERSGIXPROC glad_glAsyncMarkerSGIX = NULL; +PFNGLATTACHOBJECTARBPROC glad_glAttachObjectARB = NULL; +PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; +PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; +PFNGLBEGINCONDITIONALRENDERNVPROC glad_glBeginConditionalRenderNV = NULL; +PFNGLBEGINCONDITIONALRENDERNVXPROC glad_glBeginConditionalRenderNVX = NULL; +PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI = NULL; +PFNGLBEGINOCCLUSIONQUERYNVPROC glad_glBeginOcclusionQueryNV = NULL; +PFNGLBEGINPERFMONITORAMDPROC glad_glBeginPerfMonitorAMD = NULL; +PFNGLBEGINPERFQUERYINTELPROC glad_glBeginPerfQueryINTEL = NULL; +PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; +PFNGLBEGINQUERYARBPROC glad_glBeginQueryARB = NULL; +PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed = NULL; +PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; +PFNGLBEGINTRANSFORMFEEDBACKEXTPROC glad_glBeginTransformFeedbackEXT = NULL; +PFNGLBEGINTRANSFORMFEEDBACKNVPROC glad_glBeginTransformFeedbackNV = NULL; +PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT = NULL; +PFNGLBEGINVIDEOCAPTURENVPROC glad_glBeginVideoCaptureNV = NULL; +PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; +PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB = NULL; +PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; +PFNGLBINDBUFFERARBPROC glad_glBindBufferARB = NULL; +PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; +PFNGLBINDBUFFERBASEEXTPROC glad_glBindBufferBaseEXT = NULL; +PFNGLBINDBUFFERBASENVPROC glad_glBindBufferBaseNV = NULL; +PFNGLBINDBUFFEROFFSETEXTPROC glad_glBindBufferOffsetEXT = NULL; +PFNGLBINDBUFFEROFFSETNVPROC glad_glBindBufferOffsetNV = NULL; +PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; +PFNGLBINDBUFFERRANGEEXTPROC glad_glBindBufferRangeEXT = NULL; +PFNGLBINDBUFFERRANGENVPROC glad_glBindBufferRangeNV = NULL; +PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase = NULL; +PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange = NULL; +PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; +PFNGLBINDFRAGDATALOCATIONEXTPROC glad_glBindFragDataLocationEXT = NULL; +PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; +PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI = NULL; +PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; +PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT = NULL; +PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture = NULL; +PFNGLBINDIMAGETEXTUREEXTPROC glad_glBindImageTextureEXT = NULL; +PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures = NULL; +PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT = NULL; +PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT = NULL; +PFNGLBINDMULTITEXTUREEXTPROC glad_glBindMultiTextureEXT = NULL; +PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT = NULL; +PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB = NULL; +PFNGLBINDPROGRAMNVPROC glad_glBindProgramNV = NULL; +PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline = NULL; +PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; +PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT = NULL; +PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; +PFNGLBINDSAMPLERSPROC glad_glBindSamplers = NULL; +PFNGLBINDSHADINGRATEIMAGENVPROC glad_glBindShadingRateImageNV = NULL; +PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT = NULL; +PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; +PFNGLBINDTEXTUREEXTPROC glad_glBindTextureEXT = NULL; +PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit = NULL; +PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT = NULL; +PFNGLBINDTEXTURESPROC glad_glBindTextures = NULL; +PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback = NULL; +PFNGLBINDTRANSFORMFEEDBACKNVPROC glad_glBindTransformFeedbackNV = NULL; +PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; +PFNGLBINDVERTEXARRAYAPPLEPROC glad_glBindVertexArrayAPPLE = NULL; +PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer = NULL; +PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers = NULL; +PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT = NULL; +PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC glad_glBindVideoCaptureStreamBufferNV = NULL; +PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC glad_glBindVideoCaptureStreamTextureNV = NULL; +PFNGLBINORMAL3BEXTPROC glad_glBinormal3bEXT = NULL; +PFNGLBINORMAL3BVEXTPROC glad_glBinormal3bvEXT = NULL; +PFNGLBINORMAL3DEXTPROC glad_glBinormal3dEXT = NULL; +PFNGLBINORMAL3DVEXTPROC glad_glBinormal3dvEXT = NULL; +PFNGLBINORMAL3FEXTPROC glad_glBinormal3fEXT = NULL; +PFNGLBINORMAL3FVEXTPROC glad_glBinormal3fvEXT = NULL; +PFNGLBINORMAL3IEXTPROC glad_glBinormal3iEXT = NULL; +PFNGLBINORMAL3IVEXTPROC glad_glBinormal3ivEXT = NULL; +PFNGLBINORMAL3SEXTPROC glad_glBinormal3sEXT = NULL; +PFNGLBINORMAL3SVEXTPROC glad_glBinormal3svEXT = NULL; +PFNGLBINORMALPOINTEREXTPROC glad_glBinormalPointerEXT = NULL; +PFNGLBITMAPXOESPROC glad_glBitmapxOES = NULL; +PFNGLBLENDBARRIERKHRPROC glad_glBlendBarrierKHR = NULL; +PFNGLBLENDBARRIERNVPROC glad_glBlendBarrierNV = NULL; +PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; +PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT = NULL; +PFNGLBLENDCOLORXOESPROC glad_glBlendColorxOES = NULL; +PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; +PFNGLBLENDEQUATIONEXTPROC glad_glBlendEquationEXT = NULL; +PFNGLBLENDEQUATIONINDEXEDAMDPROC glad_glBlendEquationIndexedAMD = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; +PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT = NULL; +PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC glad_glBlendEquationSeparateIndexedAMD = NULL; +PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei = NULL; +PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB = NULL; +PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi = NULL; +PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB = NULL; +PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; +PFNGLBLENDFUNCINDEXEDAMDPROC glad_glBlendFuncIndexedAMD = NULL; +PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; +PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT = NULL; +PFNGLBLENDFUNCSEPARATEINGRPROC glad_glBlendFuncSeparateINGR = NULL; +PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC glad_glBlendFuncSeparateIndexedAMD = NULL; +PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei = NULL; +PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB = NULL; +PFNGLBLENDFUNCIPROC glad_glBlendFunci = NULL; +PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB = NULL; +PFNGLBLENDPARAMETERINVPROC glad_glBlendParameteriNV = NULL; +PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; +PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT = NULL; +PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer = NULL; +PFNGLBUFFERADDRESSRANGENVPROC glad_glBufferAddressRangeNV = NULL; +PFNGLBUFFERATTACHMEMORYNVPROC glad_glBufferAttachMemoryNV = NULL; +PFNGLBUFFERDATAPROC glad_glBufferData = NULL; +PFNGLBUFFERDATAARBPROC glad_glBufferDataARB = NULL; +PFNGLBUFFERPAGECOMMITMENTARBPROC glad_glBufferPageCommitmentARB = NULL; +PFNGLBUFFERPAGECOMMITMENTMEMNVPROC glad_glBufferPageCommitmentMemNV = NULL; +PFNGLBUFFERPARAMETERIAPPLEPROC glad_glBufferParameteriAPPLE = NULL; +PFNGLBUFFERSTORAGEPROC glad_glBufferStorage = NULL; +PFNGLBUFFERSTORAGEEXTERNALEXTPROC glad_glBufferStorageExternalEXT = NULL; +PFNGLBUFFERSTORAGEMEMEXTPROC glad_glBufferStorageMemEXT = NULL; +PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; +PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB = NULL; +PFNGLCALLCOMMANDLISTNVPROC glad_glCallCommandListNV = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT = NULL; +PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus = NULL; +PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glad_glCheckNamedFramebufferStatusEXT = NULL; +PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; +PFNGLCLAMPCOLORARBPROC glad_glClampColorARB = NULL; +PFNGLCLEARPROC glad_glClear = NULL; +PFNGLCLEARACCUMXOESPROC glad_glClearAccumxOES = NULL; +PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData = NULL; +PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData = NULL; +PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; +PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; +PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; +PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; +PFNGLCLEARCOLORPROC glad_glClearColor = NULL; +PFNGLCLEARCOLORIIEXTPROC glad_glClearColorIiEXT = NULL; +PFNGLCLEARCOLORIUIEXTPROC glad_glClearColorIuiEXT = NULL; +PFNGLCLEARCOLORXOESPROC glad_glClearColorxOES = NULL; +PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; +PFNGLCLEARDEPTHDNVPROC glad_glClearDepthdNV = NULL; +PFNGLCLEARDEPTHFPROC glad_glClearDepthf = NULL; +PFNGLCLEARDEPTHFOESPROC glad_glClearDepthfOES = NULL; +PFNGLCLEARDEPTHXOESPROC glad_glClearDepthxOES = NULL; +PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData = NULL; +PFNGLCLEARNAMEDBUFFERDATAEXTPROC glad_glClearNamedBufferDataEXT = NULL; +PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData = NULL; +PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glad_glClearNamedBufferSubDataEXT = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv = NULL; +PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; +PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage = NULL; +PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage = NULL; +PFNGLCLIENTACTIVETEXTUREARBPROC glad_glClientActiveTextureARB = NULL; +PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC glad_glClientActiveVertexStreamATI = NULL; +PFNGLCLIENTATTRIBDEFAULTEXTPROC glad_glClientAttribDefaultEXT = NULL; +PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC glad_glClientWaitSemaphoreui64NVX = NULL; +PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; +PFNGLCLIPCONTROLPROC glad_glClipControl = NULL; +PFNGLCLIPPLANEFOESPROC glad_glClipPlanefOES = NULL; +PFNGLCLIPPLANEXOESPROC glad_glClipPlanexOES = NULL; +PFNGLCOLOR3FVERTEX3FSUNPROC glad_glColor3fVertex3fSUN = NULL; +PFNGLCOLOR3FVERTEX3FVSUNPROC glad_glColor3fVertex3fvSUN = NULL; +PFNGLCOLOR3HNVPROC glad_glColor3hNV = NULL; +PFNGLCOLOR3HVNVPROC glad_glColor3hvNV = NULL; +PFNGLCOLOR3XOESPROC glad_glColor3xOES = NULL; +PFNGLCOLOR3XVOESPROC glad_glColor3xvOES = NULL; +PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glColor4fNormal3fVertex3fSUN = NULL; +PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glColor4fNormal3fVertex3fvSUN = NULL; +PFNGLCOLOR4HNVPROC glad_glColor4hNV = NULL; +PFNGLCOLOR4HVNVPROC glad_glColor4hvNV = NULL; +PFNGLCOLOR4UBVERTEX2FSUNPROC glad_glColor4ubVertex2fSUN = NULL; +PFNGLCOLOR4UBVERTEX2FVSUNPROC glad_glColor4ubVertex2fvSUN = NULL; +PFNGLCOLOR4UBVERTEX3FSUNPROC glad_glColor4ubVertex3fSUN = NULL; +PFNGLCOLOR4UBVERTEX3FVSUNPROC glad_glColor4ubVertex3fvSUN = NULL; +PFNGLCOLOR4XOESPROC glad_glColor4xOES = NULL; +PFNGLCOLOR4XVOESPROC glad_glColor4xvOES = NULL; +PFNGLCOLORFORMATNVPROC glad_glColorFormatNV = NULL; +PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI = NULL; +PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI = NULL; +PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI = NULL; +PFNGLCOLORMASKPROC glad_glColorMask = NULL; +PFNGLCOLORMASKINDEXEDEXTPROC glad_glColorMaskIndexedEXT = NULL; +PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; +PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT = NULL; +PFNGLCOLORPOINTERLISTIBMPROC glad_glColorPointerListIBM = NULL; +PFNGLCOLORPOINTERVINTELPROC glad_glColorPointervINTEL = NULL; +PFNGLCOLORSUBTABLEEXTPROC glad_glColorSubTableEXT = NULL; +PFNGLCOLORTABLEEXTPROC glad_glColorTableEXT = NULL; +PFNGLCOLORTABLEPARAMETERFVSGIPROC glad_glColorTableParameterfvSGI = NULL; +PFNGLCOLORTABLEPARAMETERIVSGIPROC glad_glColorTableParameterivSGI = NULL; +PFNGLCOLORTABLESGIPROC glad_glColorTableSGI = NULL; +PFNGLCOMBINERINPUTNVPROC glad_glCombinerInputNV = NULL; +PFNGLCOMBINEROUTPUTNVPROC glad_glCombinerOutputNV = NULL; +PFNGLCOMBINERPARAMETERFNVPROC glad_glCombinerParameterfNV = NULL; +PFNGLCOMBINERPARAMETERFVNVPROC glad_glCombinerParameterfvNV = NULL; +PFNGLCOMBINERPARAMETERINVPROC glad_glCombinerParameteriNV = NULL; +PFNGLCOMBINERPARAMETERIVNVPROC glad_glCombinerParameterivNV = NULL; +PFNGLCOMBINERSTAGEPARAMETERFVNVPROC glad_glCombinerStageParameterfvNV = NULL; +PFNGLCOMMANDLISTSEGMENTSNVPROC glad_glCommandListSegmentsNV = NULL; +PFNGLCOMPILECOMMANDLISTNVPROC glad_glCompileCommandListNV = NULL; +PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; +PFNGLCOMPILESHADERARBPROC glad_glCompileShaderARB = NULL; +PFNGLCOMPILESHADERINCLUDEARBPROC glad_glCompileShaderIncludeARB = NULL; +PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glad_glCompressedMultiTexImage1DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glad_glCompressedMultiTexImage2DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glad_glCompressedMultiTexImage3DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glad_glCompressedMultiTexSubImage1DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glad_glCompressedMultiTexSubImage2DEXT = NULL; +PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glad_glCompressedMultiTexSubImage3DEXT = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB = NULL; +PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glad_glCompressedTextureImage1DEXT = NULL; +PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glad_glCompressedTextureImage2DEXT = NULL; +PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glad_glCompressedTextureImage3DEXT = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glad_glCompressedTextureSubImage1DEXT = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glad_glCompressedTextureSubImage2DEXT = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glad_glCompressedTextureSubImage3DEXT = NULL; +PFNGLCONSERVATIVERASTERPARAMETERFNVPROC glad_glConservativeRasterParameterfNV = NULL; +PFNGLCONSERVATIVERASTERPARAMETERINVPROC glad_glConservativeRasterParameteriNV = NULL; +PFNGLCONVOLUTIONFILTER1DEXTPROC glad_glConvolutionFilter1DEXT = NULL; +PFNGLCONVOLUTIONFILTER2DEXTPROC glad_glConvolutionFilter2DEXT = NULL; +PFNGLCONVOLUTIONPARAMETERFEXTPROC glad_glConvolutionParameterfEXT = NULL; +PFNGLCONVOLUTIONPARAMETERFVEXTPROC glad_glConvolutionParameterfvEXT = NULL; +PFNGLCONVOLUTIONPARAMETERIEXTPROC glad_glConvolutionParameteriEXT = NULL; +PFNGLCONVOLUTIONPARAMETERIVEXTPROC glad_glConvolutionParameterivEXT = NULL; +PFNGLCONVOLUTIONPARAMETERXOESPROC glad_glConvolutionParameterxOES = NULL; +PFNGLCONVOLUTIONPARAMETERXVOESPROC glad_glConvolutionParameterxvOES = NULL; +PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; +PFNGLCOPYCOLORSUBTABLEEXTPROC glad_glCopyColorSubTableEXT = NULL; +PFNGLCOPYCOLORTABLESGIPROC glad_glCopyColorTableSGI = NULL; +PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC glad_glCopyConvolutionFilter1DEXT = NULL; +PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC glad_glCopyConvolutionFilter2DEXT = NULL; +PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData = NULL; +PFNGLCOPYIMAGESUBDATANVPROC glad_glCopyImageSubDataNV = NULL; +PFNGLCOPYMULTITEXIMAGE1DEXTPROC glad_glCopyMultiTexImage1DEXT = NULL; +PFNGLCOPYMULTITEXIMAGE2DEXTPROC glad_glCopyMultiTexImage2DEXT = NULL; +PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glad_glCopyMultiTexSubImage1DEXT = NULL; +PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glad_glCopyMultiTexSubImage2DEXT = NULL; +PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glad_glCopyMultiTexSubImage3DEXT = NULL; +PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData = NULL; +PFNGLCOPYPATHNVPROC glad_glCopyPathNV = NULL; +PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; +PFNGLCOPYTEXIMAGE1DEXTPROC glad_glCopyTexImage1DEXT = NULL; +PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; +PFNGLCOPYTEXIMAGE2DEXTPROC glad_glCopyTexImage2DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; +PFNGLCOPYTEXSUBIMAGE1DEXTPROC glad_glCopyTexSubImage1DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE2DEXTPROC glad_glCopyTexSubImage2DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; +PFNGLCOPYTEXSUBIMAGE3DEXTPROC glad_glCopyTexSubImage3DEXT = NULL; +PFNGLCOPYTEXTUREIMAGE1DEXTPROC glad_glCopyTextureImage1DEXT = NULL; +PFNGLCOPYTEXTUREIMAGE2DEXTPROC glad_glCopyTextureImage2DEXT = NULL; +PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D = NULL; +PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glad_glCopyTextureSubImage1DEXT = NULL; +PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D = NULL; +PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glad_glCopyTextureSubImage2DEXT = NULL; +PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D = NULL; +PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glad_glCopyTextureSubImage3DEXT = NULL; +PFNGLCOVERFILLPATHINSTANCEDNVPROC glad_glCoverFillPathInstancedNV = NULL; +PFNGLCOVERFILLPATHNVPROC glad_glCoverFillPathNV = NULL; +PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glad_glCoverStrokePathInstancedNV = NULL; +PFNGLCOVERSTROKEPATHNVPROC glad_glCoverStrokePathNV = NULL; +PFNGLCOVERAGEMODULATIONNVPROC glad_glCoverageModulationNV = NULL; +PFNGLCOVERAGEMODULATIONTABLENVPROC glad_glCoverageModulationTableNV = NULL; +PFNGLCREATEBUFFERSPROC glad_glCreateBuffers = NULL; +PFNGLCREATECOMMANDLISTSNVPROC glad_glCreateCommandListsNV = NULL; +PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers = NULL; +PFNGLCREATEMEMORYOBJECTSEXTPROC glad_glCreateMemoryObjectsEXT = NULL; +PFNGLCREATEPERFQUERYINTELPROC glad_glCreatePerfQueryINTEL = NULL; +PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; +PFNGLCREATEPROGRAMOBJECTARBPROC glad_glCreateProgramObjectARB = NULL; +PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines = NULL; +PFNGLCREATEPROGRESSFENCENVXPROC glad_glCreateProgressFenceNVX = NULL; +PFNGLCREATEQUERIESPROC glad_glCreateQueries = NULL; +PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers = NULL; +PFNGLCREATESAMPLERSPROC glad_glCreateSamplers = NULL; +PFNGLCREATESEMAPHORESNVPROC glad_glCreateSemaphoresNV = NULL; +PFNGLCREATESHADERPROC glad_glCreateShader = NULL; +PFNGLCREATESHADEROBJECTARBPROC glad_glCreateShaderObjectARB = NULL; +PFNGLCREATESHADERPROGRAMEXTPROC glad_glCreateShaderProgramEXT = NULL; +PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv = NULL; +PFNGLCREATESTATESNVPROC glad_glCreateStatesNV = NULL; +PFNGLCREATESYNCFROMCLEVENTARBPROC glad_glCreateSyncFromCLeventARB = NULL; +PFNGLCREATETEXTURESPROC glad_glCreateTextures = NULL; +PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks = NULL; +PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays = NULL; +PFNGLCULLFACEPROC glad_glCullFace = NULL; +PFNGLCULLPARAMETERDVEXTPROC glad_glCullParameterdvEXT = NULL; +PFNGLCULLPARAMETERFVEXTPROC glad_glCullParameterfvEXT = NULL; +PFNGLCURRENTPALETTEMATRIXARBPROC glad_glCurrentPaletteMatrixARB = NULL; +PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback = NULL; +PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD = NULL; +PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB = NULL; +PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl = NULL; +PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB = NULL; +PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD = NULL; +PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert = NULL; +PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD = NULL; +PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB = NULL; +PFNGLDEFORMSGIXPROC glad_glDeformSGIX = NULL; +PFNGLDEFORMATIONMAP3DSGIXPROC glad_glDeformationMap3dSGIX = NULL; +PFNGLDEFORMATIONMAP3FSGIXPROC glad_glDeformationMap3fSGIX = NULL; +PFNGLDELETEASYNCMARKERSSGIXPROC glad_glDeleteAsyncMarkersSGIX = NULL; +PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; +PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB = NULL; +PFNGLDELETECOMMANDLISTSNVPROC glad_glDeleteCommandListsNV = NULL; +PFNGLDELETEFENCESAPPLEPROC glad_glDeleteFencesAPPLE = NULL; +PFNGLDELETEFENCESNVPROC glad_glDeleteFencesNV = NULL; +PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI = NULL; +PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; +PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT = NULL; +PFNGLDELETEMEMORYOBJECTSEXTPROC glad_glDeleteMemoryObjectsEXT = NULL; +PFNGLDELETENAMEDSTRINGARBPROC glad_glDeleteNamedStringARB = NULL; +PFNGLDELETENAMESAMDPROC glad_glDeleteNamesAMD = NULL; +PFNGLDELETEOBJECTARBPROC glad_glDeleteObjectARB = NULL; +PFNGLDELETEOCCLUSIONQUERIESNVPROC glad_glDeleteOcclusionQueriesNV = NULL; +PFNGLDELETEPATHSNVPROC glad_glDeletePathsNV = NULL; +PFNGLDELETEPERFMONITORSAMDPROC glad_glDeletePerfMonitorsAMD = NULL; +PFNGLDELETEPERFQUERYINTELPROC glad_glDeletePerfQueryINTEL = NULL; +PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; +PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines = NULL; +PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB = NULL; +PFNGLDELETEPROGRAMSNVPROC glad_glDeleteProgramsNV = NULL; +PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; +PFNGLDELETEQUERIESARBPROC glad_glDeleteQueriesARB = NULL; +PFNGLDELETEQUERYRESOURCETAGNVPROC glad_glDeleteQueryResourceTagNV = NULL; +PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; +PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT = NULL; +PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; +PFNGLDELETESEMAPHORESEXTPROC glad_glDeleteSemaphoresEXT = NULL; +PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; +PFNGLDELETESTATESNVPROC glad_glDeleteStatesNV = NULL; +PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; +PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; +PFNGLDELETETEXTURESEXTPROC glad_glDeleteTexturesEXT = NULL; +PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks = NULL; +PFNGLDELETETRANSFORMFEEDBACKSNVPROC glad_glDeleteTransformFeedbacksNV = NULL; +PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; +PFNGLDELETEVERTEXARRAYSAPPLEPROC glad_glDeleteVertexArraysAPPLE = NULL; +PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT = NULL; +PFNGLDEPTHBOUNDSEXTPROC glad_glDepthBoundsEXT = NULL; +PFNGLDEPTHBOUNDSDNVPROC glad_glDepthBoundsdNV = NULL; +PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; +PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; +PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; +PFNGLDEPTHRANGEARRAYDVNVPROC glad_glDepthRangeArraydvNV = NULL; +PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv = NULL; +PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed = NULL; +PFNGLDEPTHRANGEINDEXEDDNVPROC glad_glDepthRangeIndexeddNV = NULL; +PFNGLDEPTHRANGEDNVPROC glad_glDepthRangedNV = NULL; +PFNGLDEPTHRANGEFPROC glad_glDepthRangef = NULL; +PFNGLDEPTHRANGEFOESPROC glad_glDepthRangefOES = NULL; +PFNGLDEPTHRANGEXOESPROC glad_glDepthRangexOES = NULL; +PFNGLDETACHOBJECTARBPROC glad_glDetachObjectARB = NULL; +PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; +PFNGLDETAILTEXFUNCSGISPROC glad_glDetailTexFuncSGIS = NULL; +PFNGLDISABLEPROC glad_glDisable = NULL; +PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glad_glDisableClientStateIndexedEXT = NULL; +PFNGLDISABLECLIENTSTATEIEXTPROC glad_glDisableClientStateiEXT = NULL; +PFNGLDISABLEINDEXEDEXTPROC glad_glDisableIndexedEXT = NULL; +PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT = NULL; +PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib = NULL; +PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glad_glDisableVertexArrayAttribEXT = NULL; +PFNGLDISABLEVERTEXARRAYEXTPROC glad_glDisableVertexArrayEXT = NULL; +PFNGLDISABLEVERTEXATTRIBAPPLEPROC glad_glDisableVertexAttribAPPLE = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB = NULL; +PFNGLDISABLEIPROC glad_glDisablei = NULL; +PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute = NULL; +PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glad_glDispatchComputeGroupSizeARB = NULL; +PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect = NULL; +PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; +PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT = NULL; +PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect = NULL; +PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; +PFNGLDRAWARRAYSINSTANCEDARBPROC glad_glDrawArraysInstancedARB = NULL; +PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance = NULL; +PFNGLDRAWARRAYSINSTANCEDEXTPROC glad_glDrawArraysInstancedEXT = NULL; +PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; +PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; +PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB = NULL; +PFNGLDRAWBUFFERSATIPROC glad_glDrawBuffersATI = NULL; +PFNGLDRAWCOMMANDSADDRESSNVPROC glad_glDrawCommandsAddressNV = NULL; +PFNGLDRAWCOMMANDSNVPROC glad_glDrawCommandsNV = NULL; +PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC glad_glDrawCommandsStatesAddressNV = NULL; +PFNGLDRAWCOMMANDSSTATESNVPROC glad_glDrawCommandsStatesNV = NULL; +PFNGLDRAWELEMENTARRAYAPPLEPROC glad_glDrawElementArrayAPPLE = NULL; +PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI = NULL; +PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; +PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; +PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect = NULL; +PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; +PFNGLDRAWELEMENTSINSTANCEDARBPROC glad_glDrawElementsInstancedARB = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance = NULL; +PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT = NULL; +PFNGLDRAWMESHARRAYSSUNPROC glad_glDrawMeshArraysSUN = NULL; +PFNGLDRAWMESHTASKSINDIRECTNVPROC glad_glDrawMeshTasksIndirectNV = NULL; +PFNGLDRAWMESHTASKSNVPROC glad_glDrawMeshTasksNV = NULL; +PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC glad_glDrawRangeElementArrayAPPLE = NULL; +PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI = NULL; +PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; +PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; +PFNGLDRAWRANGEELEMENTSEXTPROC glad_glDrawRangeElementsEXT = NULL; +PFNGLDRAWTEXTURENVPROC glad_glDrawTextureNV = NULL; +PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback = NULL; +PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced = NULL; +PFNGLDRAWTRANSFORMFEEDBACKNVPROC glad_glDrawTransformFeedbackNV = NULL; +PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream = NULL; +PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced = NULL; +PFNGLDRAWVKIMAGENVPROC glad_glDrawVkImageNV = NULL; +PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC glad_glEGLImageTargetTexStorageEXT = NULL; +PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC glad_glEGLImageTargetTextureStorageEXT = NULL; +PFNGLEDGEFLAGFORMATNVPROC glad_glEdgeFlagFormatNV = NULL; +PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT = NULL; +PFNGLEDGEFLAGPOINTERLISTIBMPROC glad_glEdgeFlagPointerListIBM = NULL; +PFNGLELEMENTPOINTERAPPLEPROC glad_glElementPointerAPPLE = NULL; +PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI = NULL; +PFNGLENABLEPROC glad_glEnable = NULL; +PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glad_glEnableClientStateIndexedEXT = NULL; +PFNGLENABLECLIENTSTATEIEXTPROC glad_glEnableClientStateiEXT = NULL; +PFNGLENABLEINDEXEDEXTPROC glad_glEnableIndexedEXT = NULL; +PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT = NULL; +PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib = NULL; +PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glad_glEnableVertexArrayAttribEXT = NULL; +PFNGLENABLEVERTEXARRAYEXTPROC glad_glEnableVertexArrayEXT = NULL; +PFNGLENABLEVERTEXATTRIBAPPLEPROC glad_glEnableVertexAttribAPPLE = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; +PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB = NULL; +PFNGLENABLEIPROC glad_glEnablei = NULL; +PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; +PFNGLENDCONDITIONALRENDERNVPROC glad_glEndConditionalRenderNV = NULL; +PFNGLENDCONDITIONALRENDERNVXPROC glad_glEndConditionalRenderNVX = NULL; +PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI = NULL; +PFNGLENDOCCLUSIONQUERYNVPROC glad_glEndOcclusionQueryNV = NULL; +PFNGLENDPERFMONITORAMDPROC glad_glEndPerfMonitorAMD = NULL; +PFNGLENDPERFQUERYINTELPROC glad_glEndPerfQueryINTEL = NULL; +PFNGLENDQUERYPROC glad_glEndQuery = NULL; +PFNGLENDQUERYARBPROC glad_glEndQueryARB = NULL; +PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed = NULL; +PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; +PFNGLENDTRANSFORMFEEDBACKEXTPROC glad_glEndTransformFeedbackEXT = NULL; +PFNGLENDTRANSFORMFEEDBACKNVPROC glad_glEndTransformFeedbackNV = NULL; +PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT = NULL; +PFNGLENDVIDEOCAPTURENVPROC glad_glEndVideoCaptureNV = NULL; +PFNGLEVALCOORD1XOESPROC glad_glEvalCoord1xOES = NULL; +PFNGLEVALCOORD1XVOESPROC glad_glEvalCoord1xvOES = NULL; +PFNGLEVALCOORD2XOESPROC glad_glEvalCoord2xOES = NULL; +PFNGLEVALCOORD2XVOESPROC glad_glEvalCoord2xvOES = NULL; +PFNGLEVALMAPSNVPROC glad_glEvalMapsNV = NULL; +PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB = NULL; +PFNGLEXECUTEPROGRAMNVPROC glad_glExecuteProgramNV = NULL; +PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT = NULL; +PFNGLFEEDBACKBUFFERXOESPROC glad_glFeedbackBufferxOES = NULL; +PFNGLFENCESYNCPROC glad_glFenceSync = NULL; +PFNGLFINALCOMBINERINPUTNVPROC glad_glFinalCombinerInputNV = NULL; +PFNGLFINISHPROC glad_glFinish = NULL; +PFNGLFINISHASYNCSGIXPROC glad_glFinishAsyncSGIX = NULL; +PFNGLFINISHFENCEAPPLEPROC glad_glFinishFenceAPPLE = NULL; +PFNGLFINISHFENCENVPROC glad_glFinishFenceNV = NULL; +PFNGLFINISHOBJECTAPPLEPROC glad_glFinishObjectAPPLE = NULL; +PFNGLFINISHTEXTURESUNXPROC glad_glFinishTextureSUNX = NULL; +PFNGLFLUSHPROC glad_glFlush = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glad_glFlushMappedBufferRangeAPPLE = NULL; +PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange = NULL; +PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glad_glFlushMappedNamedBufferRangeEXT = NULL; +PFNGLFLUSHPIXELDATARANGENVPROC glad_glFlushPixelDataRangeNV = NULL; +PFNGLFLUSHRASTERSGIXPROC glad_glFlushRasterSGIX = NULL; +PFNGLFLUSHSTATICDATAIBMPROC glad_glFlushStaticDataIBM = NULL; +PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC glad_glFlushVertexArrayRangeAPPLE = NULL; +PFNGLFLUSHVERTEXARRAYRANGENVPROC glad_glFlushVertexArrayRangeNV = NULL; +PFNGLFOGCOORDFORMATNVPROC glad_glFogCoordFormatNV = NULL; +PFNGLFOGCOORDPOINTEREXTPROC glad_glFogCoordPointerEXT = NULL; +PFNGLFOGCOORDPOINTERLISTIBMPROC glad_glFogCoordPointerListIBM = NULL; +PFNGLFOGCOORDDEXTPROC glad_glFogCoorddEXT = NULL; +PFNGLFOGCOORDDVEXTPROC glad_glFogCoorddvEXT = NULL; +PFNGLFOGCOORDFEXTPROC glad_glFogCoordfEXT = NULL; +PFNGLFOGCOORDFVEXTPROC glad_glFogCoordfvEXT = NULL; +PFNGLFOGCOORDHNVPROC glad_glFogCoordhNV = NULL; +PFNGLFOGCOORDHVNVPROC glad_glFogCoordhvNV = NULL; +PFNGLFOGFUNCSGISPROC glad_glFogFuncSGIS = NULL; +PFNGLFOGXOESPROC glad_glFogxOES = NULL; +PFNGLFOGXVOESPROC glad_glFogxvOES = NULL; +PFNGLFRAGMENTCOLORMATERIALSGIXPROC glad_glFragmentColorMaterialSGIX = NULL; +PFNGLFRAGMENTCOVERAGECOLORNVPROC glad_glFragmentCoverageColorNV = NULL; +PFNGLFRAGMENTLIGHTMODELFSGIXPROC glad_glFragmentLightModelfSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELFVSGIXPROC glad_glFragmentLightModelfvSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELISGIXPROC glad_glFragmentLightModeliSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELIVSGIXPROC glad_glFragmentLightModelivSGIX = NULL; +PFNGLFRAGMENTLIGHTFSGIXPROC glad_glFragmentLightfSGIX = NULL; +PFNGLFRAGMENTLIGHTFVSGIXPROC glad_glFragmentLightfvSGIX = NULL; +PFNGLFRAGMENTLIGHTISGIXPROC glad_glFragmentLightiSGIX = NULL; +PFNGLFRAGMENTLIGHTIVSGIXPROC glad_glFragmentLightivSGIX = NULL; +PFNGLFRAGMENTMATERIALFSGIXPROC glad_glFragmentMaterialfSGIX = NULL; +PFNGLFRAGMENTMATERIALFVSGIXPROC glad_glFragmentMaterialfvSGIX = NULL; +PFNGLFRAGMENTMATERIALISGIXPROC glad_glFragmentMaterialiSGIX = NULL; +PFNGLFRAGMENTMATERIALIVSGIXPROC glad_glFragmentMaterialivSGIX = NULL; +PFNGLFRAMETERMINATORGREMEDYPROC glad_glFrameTerminatorGREMEDY = NULL; +PFNGLFRAMEZOOMSGIXPROC glad_glFrameZoomSGIX = NULL; +PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glad_glFramebufferDrawBufferEXT = NULL; +PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glad_glFramebufferDrawBuffersEXT = NULL; +PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC glad_glFramebufferFetchBarrierEXT = NULL; +PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri = NULL; +PFNGLFRAMEBUFFERPARAMETERIMESAPROC glad_glFramebufferParameteriMESA = NULL; +PFNGLFRAMEBUFFERREADBUFFEREXTPROC glad_glFramebufferReadBufferEXT = NULL; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT = NULL; +PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB = NULL; +PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glFramebufferSampleLocationsfvNV = NULL; +PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glFramebufferSamplePositionsfvAMD = NULL; +PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; +PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT = NULL; +PFNGLFRAMEBUFFERTEXTUREARBPROC glad_glFramebufferTextureARB = NULL; +PFNGLFRAMEBUFFERTEXTUREEXTPROC glad_glFramebufferTextureEXT = NULL; +PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glad_glFramebufferTextureFaceARB = NULL; +PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC glad_glFramebufferTextureFaceEXT = NULL; +PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; +PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glad_glFramebufferTextureLayerARB = NULL; +PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glad_glFramebufferTextureLayerEXT = NULL; +PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glad_glFramebufferTextureMultiviewOVR = NULL; +PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI = NULL; +PFNGLFRONTFACEPROC glad_glFrontFace = NULL; +PFNGLFRUSTUMFOESPROC glad_glFrustumfOES = NULL; +PFNGLFRUSTUMXOESPROC glad_glFrustumxOES = NULL; +PFNGLGENASYNCMARKERSSGIXPROC glad_glGenAsyncMarkersSGIX = NULL; +PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; +PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB = NULL; +PFNGLGENFENCESAPPLEPROC glad_glGenFencesAPPLE = NULL; +PFNGLGENFENCESNVPROC glad_glGenFencesNV = NULL; +PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI = NULL; +PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; +PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT = NULL; +PFNGLGENNAMESAMDPROC glad_glGenNamesAMD = NULL; +PFNGLGENOCCLUSIONQUERIESNVPROC glad_glGenOcclusionQueriesNV = NULL; +PFNGLGENPATHSNVPROC glad_glGenPathsNV = NULL; +PFNGLGENPERFMONITORSAMDPROC glad_glGenPerfMonitorsAMD = NULL; +PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines = NULL; +PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB = NULL; +PFNGLGENPROGRAMSNVPROC glad_glGenProgramsNV = NULL; +PFNGLGENQUERIESPROC glad_glGenQueries = NULL; +PFNGLGENQUERIESARBPROC glad_glGenQueriesARB = NULL; +PFNGLGENQUERYRESOURCETAGNVPROC glad_glGenQueryResourceTagNV = NULL; +PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; +PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT = NULL; +PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; +PFNGLGENSEMAPHORESEXTPROC glad_glGenSemaphoresEXT = NULL; +PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT = NULL; +PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; +PFNGLGENTEXTURESEXTPROC glad_glGenTexturesEXT = NULL; +PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks = NULL; +PFNGLGENTRANSFORMFEEDBACKSNVPROC glad_glGenTransformFeedbacksNV = NULL; +PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; +PFNGLGENVERTEXARRAYSAPPLEPROC glad_glGenVertexArraysAPPLE = NULL; +PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT = NULL; +PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; +PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT = NULL; +PFNGLGENERATEMULTITEXMIPMAPEXTPROC glad_glGenerateMultiTexMipmapEXT = NULL; +PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap = NULL; +PFNGLGENERATETEXTUREMIPMAPEXTPROC glad_glGenerateTextureMipmapEXT = NULL; +PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv = NULL; +PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; +PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB = NULL; +PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName = NULL; +PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName = NULL; +PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv = NULL; +PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; +PFNGLGETACTIVEUNIFORMARBPROC glad_glGetActiveUniformARB = NULL; +PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; +PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; +PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; +PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; +PFNGLGETACTIVEVARYINGNVPROC glad_glGetActiveVaryingNV = NULL; +PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI = NULL; +PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI = NULL; +PFNGLGETATTACHEDOBJECTSARBPROC glad_glGetAttachedObjectsARB = NULL; +PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; +PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; +PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB = NULL; +PFNGLGETBOOLEANINDEXEDVEXTPROC glad_glGetBooleanIndexedvEXT = NULL; +PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; +PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; +PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; +PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; +PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB = NULL; +PFNGLGETBUFFERPARAMETERUI64VNVPROC glad_glGetBufferParameterui64vNV = NULL; +PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; +PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB = NULL; +PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; +PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB = NULL; +PFNGLGETCLIPPLANEFOESPROC glad_glGetClipPlanefOES = NULL; +PFNGLGETCLIPPLANEXOESPROC glad_glGetClipPlanexOES = NULL; +PFNGLGETCOLORTABLEEXTPROC glad_glGetColorTableEXT = NULL; +PFNGLGETCOLORTABLEPARAMETERFVEXTPROC glad_glGetColorTableParameterfvEXT = NULL; +PFNGLGETCOLORTABLEPARAMETERFVSGIPROC glad_glGetColorTableParameterfvSGI = NULL; +PFNGLGETCOLORTABLEPARAMETERIVEXTPROC glad_glGetColorTableParameterivEXT = NULL; +PFNGLGETCOLORTABLEPARAMETERIVSGIPROC glad_glGetColorTableParameterivSGI = NULL; +PFNGLGETCOLORTABLESGIPROC glad_glGetColorTableSGI = NULL; +PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glad_glGetCombinerInputParameterfvNV = NULL; +PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glad_glGetCombinerInputParameterivNV = NULL; +PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glad_glGetCombinerOutputParameterfvNV = NULL; +PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glad_glGetCombinerOutputParameterivNV = NULL; +PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC glad_glGetCombinerStageParameterfvNV = NULL; +PFNGLGETCOMMANDHEADERNVPROC glad_glGetCommandHeaderNV = NULL; +PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glad_glGetCompressedMultiTexImageEXT = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB = NULL; +PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage = NULL; +PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glad_glGetCompressedTextureImageEXT = NULL; +PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage = NULL; +PFNGLGETCONVOLUTIONFILTEREXTPROC glad_glGetConvolutionFilterEXT = NULL; +PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC glad_glGetConvolutionParameterfvEXT = NULL; +PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC glad_glGetConvolutionParameterivEXT = NULL; +PFNGLGETCONVOLUTIONPARAMETERXVOESPROC glad_glGetConvolutionParameterxvOES = NULL; +PFNGLGETCOVERAGEMODULATIONTABLENVPROC glad_glGetCoverageModulationTableNV = NULL; +PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog = NULL; +PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD = NULL; +PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB = NULL; +PFNGLGETDETAILTEXFUNCSGISPROC glad_glGetDetailTexFuncSGIS = NULL; +PFNGLGETDOUBLEINDEXEDVEXTPROC glad_glGetDoubleIndexedvEXT = NULL; +PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v = NULL; +PFNGLGETDOUBLEI_VEXTPROC glad_glGetDoublei_vEXT = NULL; +PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; +PFNGLGETERRORPROC glad_glGetError = NULL; +PFNGLGETFENCEIVNVPROC glad_glGetFenceivNV = NULL; +PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glad_glGetFinalCombinerInputParameterfvNV = NULL; +PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glad_glGetFinalCombinerInputParameterivNV = NULL; +PFNGLGETFIRSTPERFQUERYIDINTELPROC glad_glGetFirstPerfQueryIdINTEL = NULL; +PFNGLGETFIXEDVOESPROC glad_glGetFixedvOES = NULL; +PFNGLGETFLOATINDEXEDVEXTPROC glad_glGetFloatIndexedvEXT = NULL; +PFNGLGETFLOATI_VPROC glad_glGetFloati_v = NULL; +PFNGLGETFLOATI_VEXTPROC glad_glGetFloati_vEXT = NULL; +PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; +PFNGLGETFOGFUNCSGISPROC glad_glGetFogFuncSGIS = NULL; +PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; +PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; +PFNGLGETFRAGDATALOCATIONEXTPROC glad_glGetFragDataLocationEXT = NULL; +PFNGLGETFRAGMENTLIGHTFVSGIXPROC glad_glGetFragmentLightfvSGIX = NULL; +PFNGLGETFRAGMENTLIGHTIVSGIXPROC glad_glGetFragmentLightivSGIX = NULL; +PFNGLGETFRAGMENTMATERIALFVSGIXPROC glad_glGetFragmentMaterialfvSGIX = NULL; +PFNGLGETFRAGMENTMATERIALIVSGIXPROC glad_glGetFragmentMaterialivSGIX = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT = NULL; +PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetFramebufferParameterfvAMD = NULL; +PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv = NULL; +PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetFramebufferParameterivEXT = NULL; +PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC glad_glGetFramebufferParameterivMESA = NULL; +PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus = NULL; +PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_glGetGraphicsResetStatusARB = NULL; +PFNGLGETHANDLEARBPROC glad_glGetHandleARB = NULL; +PFNGLGETHISTOGRAMEXTPROC glad_glGetHistogramEXT = NULL; +PFNGLGETHISTOGRAMPARAMETERFVEXTPROC glad_glGetHistogramParameterfvEXT = NULL; +PFNGLGETHISTOGRAMPARAMETERIVEXTPROC glad_glGetHistogramParameterivEXT = NULL; +PFNGLGETHISTOGRAMPARAMETERXVOESPROC glad_glGetHistogramParameterxvOES = NULL; +PFNGLGETIMAGEHANDLEARBPROC glad_glGetImageHandleARB = NULL; +PFNGLGETIMAGEHANDLENVPROC glad_glGetImageHandleNV = NULL; +PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC glad_glGetImageTransformParameterfvHP = NULL; +PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC glad_glGetImageTransformParameterivHP = NULL; +PFNGLGETINFOLOGARBPROC glad_glGetInfoLogARB = NULL; +PFNGLGETINSTRUMENTSSGIXPROC glad_glGetInstrumentsSGIX = NULL; +PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; +PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; +PFNGLGETINTEGERINDEXEDVEXTPROC glad_glGetIntegerIndexedvEXT = NULL; +PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; +PFNGLGETINTEGERUI64I_VNVPROC glad_glGetIntegerui64i_vNV = NULL; +PFNGLGETINTEGERUI64VNVPROC glad_glGetIntegerui64vNV = NULL; +PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; +PFNGLGETINTERNALFORMATSAMPLEIVNVPROC glad_glGetInternalformatSampleivNV = NULL; +PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v = NULL; +PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ = NULL; +PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT = NULL; +PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT = NULL; +PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT = NULL; +PFNGLGETLIGHTXOESPROC glad_glGetLightxOES = NULL; +PFNGLGETLISTPARAMETERFVSGIXPROC glad_glGetListParameterfvSGIX = NULL; +PFNGLGETLISTPARAMETERIVSGIXPROC glad_glGetListParameterivSGIX = NULL; +PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT = NULL; +PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT = NULL; +PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT = NULL; +PFNGLGETMAPATTRIBPARAMETERFVNVPROC glad_glGetMapAttribParameterfvNV = NULL; +PFNGLGETMAPATTRIBPARAMETERIVNVPROC glad_glGetMapAttribParameterivNV = NULL; +PFNGLGETMAPCONTROLPOINTSNVPROC glad_glGetMapControlPointsNV = NULL; +PFNGLGETMAPPARAMETERFVNVPROC glad_glGetMapParameterfvNV = NULL; +PFNGLGETMAPPARAMETERIVNVPROC glad_glGetMapParameterivNV = NULL; +PFNGLGETMAPXVOESPROC glad_glGetMapxvOES = NULL; +PFNGLGETMATERIALXOESPROC glad_glGetMaterialxOES = NULL; +PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC glad_glGetMemoryObjectDetachedResourcesuivNV = NULL; +PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC glad_glGetMemoryObjectParameterivEXT = NULL; +PFNGLGETMINMAXEXTPROC glad_glGetMinmaxEXT = NULL; +PFNGLGETMINMAXPARAMETERFVEXTPROC glad_glGetMinmaxParameterfvEXT = NULL; +PFNGLGETMINMAXPARAMETERIVEXTPROC glad_glGetMinmaxParameterivEXT = NULL; +PFNGLGETMULTITEXENVFVEXTPROC glad_glGetMultiTexEnvfvEXT = NULL; +PFNGLGETMULTITEXENVIVEXTPROC glad_glGetMultiTexEnvivEXT = NULL; +PFNGLGETMULTITEXGENDVEXTPROC glad_glGetMultiTexGendvEXT = NULL; +PFNGLGETMULTITEXGENFVEXTPROC glad_glGetMultiTexGenfvEXT = NULL; +PFNGLGETMULTITEXGENIVEXTPROC glad_glGetMultiTexGenivEXT = NULL; +PFNGLGETMULTITEXIMAGEEXTPROC glad_glGetMultiTexImageEXT = NULL; +PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glad_glGetMultiTexLevelParameterfvEXT = NULL; +PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glad_glGetMultiTexLevelParameterivEXT = NULL; +PFNGLGETMULTITEXPARAMETERIIVEXTPROC glad_glGetMultiTexParameterIivEXT = NULL; +PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glad_glGetMultiTexParameterIuivEXT = NULL; +PFNGLGETMULTITEXPARAMETERFVEXTPROC glad_glGetMultiTexParameterfvEXT = NULL; +PFNGLGETMULTITEXPARAMETERIVEXTPROC glad_glGetMultiTexParameterivEXT = NULL; +PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; +PFNGLGETMULTISAMPLEFVNVPROC glad_glGetMultisamplefvNV = NULL; +PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v = NULL; +PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv = NULL; +PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glad_glGetNamedBufferParameterivEXT = NULL; +PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glad_glGetNamedBufferParameterui64vNV = NULL; +PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv = NULL; +PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glad_glGetNamedBufferPointervEXT = NULL; +PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData = NULL; +PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glad_glGetNamedBufferSubDataEXT = NULL; +PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv = NULL; +PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetNamedFramebufferAttachmentParameterivEXT = NULL; +PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetNamedFramebufferParameterfvAMD = NULL; +PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv = NULL; +PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetNamedFramebufferParameterivEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glad_glGetNamedProgramLocalParameterIivEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glad_glGetNamedProgramLocalParameterIuivEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glad_glGetNamedProgramLocalParameterdvEXT = NULL; +PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glad_glGetNamedProgramLocalParameterfvEXT = NULL; +PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glad_glGetNamedProgramStringEXT = NULL; +PFNGLGETNAMEDPROGRAMIVEXTPROC glad_glGetNamedProgramivEXT = NULL; +PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv = NULL; +PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glad_glGetNamedRenderbufferParameterivEXT = NULL; +PFNGLGETNAMEDSTRINGARBPROC glad_glGetNamedStringARB = NULL; +PFNGLGETNAMEDSTRINGIVARBPROC glad_glGetNamedStringivARB = NULL; +PFNGLGETNEXTPERFQUERYIDINTELPROC glad_glGetNextPerfQueryIdINTEL = NULL; +PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI = NULL; +PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI = NULL; +PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel = NULL; +PFNGLGETOBJECTLABELEXTPROC glad_glGetObjectLabelEXT = NULL; +PFNGLGETOBJECTPARAMETERFVARBPROC glad_glGetObjectParameterfvARB = NULL; +PFNGLGETOBJECTPARAMETERIVAPPLEPROC glad_glGetObjectParameterivAPPLE = NULL; +PFNGLGETOBJECTPARAMETERIVARBPROC glad_glGetObjectParameterivARB = NULL; +PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel = NULL; +PFNGLGETOCCLUSIONQUERYIVNVPROC glad_glGetOcclusionQueryivNV = NULL; +PFNGLGETOCCLUSIONQUERYUIVNVPROC glad_glGetOcclusionQueryuivNV = NULL; +PFNGLGETPATHCOMMANDSNVPROC glad_glGetPathCommandsNV = NULL; +PFNGLGETPATHCOORDSNVPROC glad_glGetPathCoordsNV = NULL; +PFNGLGETPATHDASHARRAYNVPROC glad_glGetPathDashArrayNV = NULL; +PFNGLGETPATHLENGTHNVPROC glad_glGetPathLengthNV = NULL; +PFNGLGETPATHMETRICRANGENVPROC glad_glGetPathMetricRangeNV = NULL; +PFNGLGETPATHMETRICSNVPROC glad_glGetPathMetricsNV = NULL; +PFNGLGETPATHPARAMETERFVNVPROC glad_glGetPathParameterfvNV = NULL; +PFNGLGETPATHPARAMETERIVNVPROC glad_glGetPathParameterivNV = NULL; +PFNGLGETPATHSPACINGNVPROC glad_glGetPathSpacingNV = NULL; +PFNGLGETPERFCOUNTERINFOINTELPROC glad_glGetPerfCounterInfoINTEL = NULL; +PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glad_glGetPerfMonitorCounterDataAMD = NULL; +PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glad_glGetPerfMonitorCounterInfoAMD = NULL; +PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glad_glGetPerfMonitorCounterStringAMD = NULL; +PFNGLGETPERFMONITORCOUNTERSAMDPROC glad_glGetPerfMonitorCountersAMD = NULL; +PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glad_glGetPerfMonitorGroupStringAMD = NULL; +PFNGLGETPERFMONITORGROUPSAMDPROC glad_glGetPerfMonitorGroupsAMD = NULL; +PFNGLGETPERFQUERYDATAINTELPROC glad_glGetPerfQueryDataINTEL = NULL; +PFNGLGETPERFQUERYIDBYNAMEINTELPROC glad_glGetPerfQueryIdByNameINTEL = NULL; +PFNGLGETPERFQUERYINFOINTELPROC glad_glGetPerfQueryInfoINTEL = NULL; +PFNGLGETPIXELMAPXVPROC glad_glGetPixelMapxv = NULL; +PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC glad_glGetPixelTexGenParameterfvSGIS = NULL; +PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC glad_glGetPixelTexGenParameterivSGIS = NULL; +PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC glad_glGetPixelTransformParameterfvEXT = NULL; +PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC glad_glGetPixelTransformParameterivEXT = NULL; +PFNGLGETPOINTERINDEXEDVEXTPROC glad_glGetPointerIndexedvEXT = NULL; +PFNGLGETPOINTERI_VEXTPROC glad_glGetPointeri_vEXT = NULL; +PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; +PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT = NULL; +PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary = NULL; +PFNGLGETPROGRAMENVPARAMETERIIVNVPROC glad_glGetProgramEnvParameterIivNV = NULL; +PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC glad_glGetProgramEnvParameterIuivNV = NULL; +PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB = NULL; +PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB = NULL; +PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; +PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv = NULL; +PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC glad_glGetProgramLocalParameterIivNV = NULL; +PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC glad_glGetProgramLocalParameterIuivNV = NULL; +PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB = NULL; +PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB = NULL; +PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC glad_glGetProgramNamedParameterdvNV = NULL; +PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC glad_glGetProgramNamedParameterfvNV = NULL; +PFNGLGETPROGRAMPARAMETERDVNVPROC glad_glGetProgramParameterdvNV = NULL; +PFNGLGETPROGRAMPARAMETERFVNVPROC glad_glGetProgramParameterfvNV = NULL; +PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog = NULL; +PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv = NULL; +PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex = NULL; +PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation = NULL; +PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex = NULL; +PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName = NULL; +PFNGLGETPROGRAMRESOURCEFVNVPROC glad_glGetProgramResourcefvNV = NULL; +PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv = NULL; +PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv = NULL; +PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB = NULL; +PFNGLGETPROGRAMSTRINGNVPROC glad_glGetProgramStringNV = NULL; +PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC glad_glGetProgramSubroutineParameteruivNV = NULL; +PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; +PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB = NULL; +PFNGLGETPROGRAMIVNVPROC glad_glGetProgramivNV = NULL; +PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v = NULL; +PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv = NULL; +PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v = NULL; +PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv = NULL; +PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv = NULL; +PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; +PFNGLGETQUERYOBJECTI64VEXTPROC glad_glGetQueryObjecti64vEXT = NULL; +PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; +PFNGLGETQUERYOBJECTIVARBPROC glad_glGetQueryObjectivARB = NULL; +PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; +PFNGLGETQUERYOBJECTUI64VEXTPROC glad_glGetQueryObjectui64vEXT = NULL; +PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; +PFNGLGETQUERYOBJECTUIVARBPROC glad_glGetQueryObjectuivARB = NULL; +PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; +PFNGLGETQUERYIVARBPROC glad_glGetQueryivARB = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT = NULL; +PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; +PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; +PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; +PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; +PFNGLGETSEMAPHOREPARAMETERIVNVPROC glad_glGetSemaphoreParameterivNV = NULL; +PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC glad_glGetSemaphoreParameterui64vEXT = NULL; +PFNGLGETSEPARABLEFILTEREXTPROC glad_glGetSeparableFilterEXT = NULL; +PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; +PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat = NULL; +PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; +PFNGLGETSHADERSOURCEARBPROC glad_glGetShaderSourceARB = NULL; +PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; +PFNGLGETSHADINGRATEIMAGEPALETTENVPROC glad_glGetShadingRateImagePaletteNV = NULL; +PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC glad_glGetShadingRateSampleLocationivNV = NULL; +PFNGLGETSHARPENTEXFUNCSGISPROC glad_glGetSharpenTexFuncSGIS = NULL; +PFNGLGETSTAGEINDEXNVPROC glad_glGetStageIndexNV = NULL; +PFNGLGETSTRINGPROC glad_glGetString = NULL; +PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; +PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex = NULL; +PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation = NULL; +PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; +PFNGLGETTEXBUMPPARAMETERFVATIPROC glad_glGetTexBumpParameterfvATI = NULL; +PFNGLGETTEXBUMPPARAMETERIVATIPROC glad_glGetTexBumpParameterivATI = NULL; +PFNGLGETTEXENVXVOESPROC glad_glGetTexEnvxvOES = NULL; +PFNGLGETTEXFILTERFUNCSGISPROC glad_glGetTexFilterFuncSGIS = NULL; +PFNGLGETTEXGENXVOESPROC glad_glGetTexGenxvOES = NULL; +PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; +PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; +PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; +PFNGLGETTEXLEVELPARAMETERXVOESPROC glad_glGetTexLevelParameterxvOES = NULL; +PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; +PFNGLGETTEXPARAMETERIIVEXTPROC glad_glGetTexParameterIivEXT = NULL; +PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; +PFNGLGETTEXPARAMETERIUIVEXTPROC glad_glGetTexParameterIuivEXT = NULL; +PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC glad_glGetTexParameterPointervAPPLE = NULL; +PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; +PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; +PFNGLGETTEXPARAMETERXVOESPROC glad_glGetTexParameterxvOES = NULL; +PFNGLGETTEXTUREHANDLEARBPROC glad_glGetTextureHandleARB = NULL; +PFNGLGETTEXTUREHANDLENVPROC glad_glGetTextureHandleNV = NULL; +PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage = NULL; +PFNGLGETTEXTUREIMAGEEXTPROC glad_glGetTextureImageEXT = NULL; +PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv = NULL; +PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glad_glGetTextureLevelParameterfvEXT = NULL; +PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv = NULL; +PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glad_glGetTextureLevelParameterivEXT = NULL; +PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv = NULL; +PFNGLGETTEXTUREPARAMETERIIVEXTPROC glad_glGetTextureParameterIivEXT = NULL; +PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv = NULL; +PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glad_glGetTextureParameterIuivEXT = NULL; +PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv = NULL; +PFNGLGETTEXTUREPARAMETERFVEXTPROC glad_glGetTextureParameterfvEXT = NULL; +PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv = NULL; +PFNGLGETTEXTUREPARAMETERIVEXTPROC glad_glGetTextureParameterivEXT = NULL; +PFNGLGETTEXTURESAMPLERHANDLEARBPROC glad_glGetTextureSamplerHandleARB = NULL; +PFNGLGETTEXTURESAMPLERHANDLENVPROC glad_glGetTextureSamplerHandleNV = NULL; +PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage = NULL; +PFNGLGETTRACKMATRIXIVNVPROC glad_glGetTrackMatrixivNV = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC glad_glGetTransformFeedbackVaryingEXT = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC glad_glGetTransformFeedbackVaryingNV = NULL; +PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v = NULL; +PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v = NULL; +PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv = NULL; +PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; +PFNGLGETUNIFORMBUFFERSIZEEXTPROC glad_glGetUniformBufferSizeEXT = NULL; +PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; +PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; +PFNGLGETUNIFORMLOCATIONARBPROC glad_glGetUniformLocationARB = NULL; +PFNGLGETUNIFORMOFFSETEXTPROC glad_glGetUniformOffsetEXT = NULL; +PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv = NULL; +PFNGLGETUNIFORMDVPROC glad_glGetUniformdv = NULL; +PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; +PFNGLGETUNIFORMFVARBPROC glad_glGetUniformfvARB = NULL; +PFNGLGETUNIFORMI64VARBPROC glad_glGetUniformi64vARB = NULL; +PFNGLGETUNIFORMI64VNVPROC glad_glGetUniformi64vNV = NULL; +PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; +PFNGLGETUNIFORMIVARBPROC glad_glGetUniformivARB = NULL; +PFNGLGETUNIFORMUI64VARBPROC glad_glGetUniformui64vARB = NULL; +PFNGLGETUNIFORMUI64VNVPROC glad_glGetUniformui64vNV = NULL; +PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; +PFNGLGETUNIFORMUIVEXTPROC glad_glGetUniformuivEXT = NULL; +PFNGLGETUNSIGNEDBYTEI_VEXTPROC glad_glGetUnsignedBytei_vEXT = NULL; +PFNGLGETUNSIGNEDBYTEVEXTPROC glad_glGetUnsignedBytevEXT = NULL; +PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI = NULL; +PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI = NULL; +PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT = NULL; +PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT = NULL; +PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT = NULL; +PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT = NULL; +PFNGLGETVARYINGLOCATIONNVPROC glad_glGetVaryingLocationNV = NULL; +PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv = NULL; +PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv = NULL; +PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glad_glGetVertexArrayIntegeri_vEXT = NULL; +PFNGLGETVERTEXARRAYINTEGERVEXTPROC glad_glGetVertexArrayIntegervEXT = NULL; +PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glad_glGetVertexArrayPointeri_vEXT = NULL; +PFNGLGETVERTEXARRAYPOINTERVEXTPROC glad_glGetVertexArrayPointervEXT = NULL; +PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv = NULL; +PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC glad_glGetVertexAttribArrayObjectfvATI = NULL; +PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC glad_glGetVertexAttribArrayObjectivATI = NULL; +PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; +PFNGLGETVERTEXATTRIBIIVEXTPROC glad_glGetVertexAttribIivEXT = NULL; +PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; +PFNGLGETVERTEXATTRIBIUIVEXTPROC glad_glGetVertexAttribIuivEXT = NULL; +PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv = NULL; +PFNGLGETVERTEXATTRIBLDVEXTPROC glad_glGetVertexAttribLdvEXT = NULL; +PFNGLGETVERTEXATTRIBLI64VNVPROC glad_glGetVertexAttribLi64vNV = NULL; +PFNGLGETVERTEXATTRIBLUI64VARBPROC glad_glGetVertexAttribLui64vARB = NULL; +PFNGLGETVERTEXATTRIBLUI64VNVPROC glad_glGetVertexAttribLui64vNV = NULL; +PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; +PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB = NULL; +PFNGLGETVERTEXATTRIBPOINTERVNVPROC glad_glGetVertexAttribPointervNV = NULL; +PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; +PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB = NULL; +PFNGLGETVERTEXATTRIBDVNVPROC glad_glGetVertexAttribdvNV = NULL; +PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; +PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB = NULL; +PFNGLGETVERTEXATTRIBFVNVPROC glad_glGetVertexAttribfvNV = NULL; +PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; +PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB = NULL; +PFNGLGETVERTEXATTRIBIVNVPROC glad_glGetVertexAttribivNV = NULL; +PFNGLGETVIDEOCAPTURESTREAMDVNVPROC glad_glGetVideoCaptureStreamdvNV = NULL; +PFNGLGETVIDEOCAPTURESTREAMFVNVPROC glad_glGetVideoCaptureStreamfvNV = NULL; +PFNGLGETVIDEOCAPTURESTREAMIVNVPROC glad_glGetVideoCaptureStreamivNV = NULL; +PFNGLGETVIDEOCAPTUREIVNVPROC glad_glGetVideoCaptureivNV = NULL; +PFNGLGETVIDEOI64VNVPROC glad_glGetVideoi64vNV = NULL; +PFNGLGETVIDEOIVNVPROC glad_glGetVideoivNV = NULL; +PFNGLGETVIDEOUI64VNVPROC glad_glGetVideoui64vNV = NULL; +PFNGLGETVIDEOUIVNVPROC glad_glGetVideouivNV = NULL; +PFNGLGETVKPROCADDRNVPROC glad_glGetVkProcAddrNV = NULL; +PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_glGetnCompressedTexImageARB = NULL; +PFNGLGETNTEXIMAGEARBPROC glad_glGetnTexImageARB = NULL; +PFNGLGETNUNIFORMDVARBPROC glad_glGetnUniformdvARB = NULL; +PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv = NULL; +PFNGLGETNUNIFORMFVARBPROC glad_glGetnUniformfvARB = NULL; +PFNGLGETNUNIFORMI64VARBPROC glad_glGetnUniformi64vARB = NULL; +PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv = NULL; +PFNGLGETNUNIFORMIVARBPROC glad_glGetnUniformivARB = NULL; +PFNGLGETNUNIFORMUI64VARBPROC glad_glGetnUniformui64vARB = NULL; +PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv = NULL; +PFNGLGETNUNIFORMUIVARBPROC glad_glGetnUniformuivARB = NULL; +PFNGLGLOBALALPHAFACTORBSUNPROC glad_glGlobalAlphaFactorbSUN = NULL; +PFNGLGLOBALALPHAFACTORDSUNPROC glad_glGlobalAlphaFactordSUN = NULL; +PFNGLGLOBALALPHAFACTORFSUNPROC glad_glGlobalAlphaFactorfSUN = NULL; +PFNGLGLOBALALPHAFACTORISUNPROC glad_glGlobalAlphaFactoriSUN = NULL; +PFNGLGLOBALALPHAFACTORSSUNPROC glad_glGlobalAlphaFactorsSUN = NULL; +PFNGLGLOBALALPHAFACTORUBSUNPROC glad_glGlobalAlphaFactorubSUN = NULL; +PFNGLGLOBALALPHAFACTORUISUNPROC glad_glGlobalAlphaFactoruiSUN = NULL; +PFNGLGLOBALALPHAFACTORUSSUNPROC glad_glGlobalAlphaFactorusSUN = NULL; +PFNGLHINTPROC glad_glHint = NULL; +PFNGLHINTPGIPROC glad_glHintPGI = NULL; +PFNGLHISTOGRAMEXTPROC glad_glHistogramEXT = NULL; +PFNGLIGLOOINTERFACESGIXPROC glad_glIglooInterfaceSGIX = NULL; +PFNGLIMAGETRANSFORMPARAMETERFHPPROC glad_glImageTransformParameterfHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERFVHPPROC glad_glImageTransformParameterfvHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERIHPPROC glad_glImageTransformParameteriHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERIVHPPROC glad_glImageTransformParameterivHP = NULL; +PFNGLIMPORTMEMORYFDEXTPROC glad_glImportMemoryFdEXT = NULL; +PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC glad_glImportMemoryWin32HandleEXT = NULL; +PFNGLIMPORTMEMORYWIN32NAMEEXTPROC glad_glImportMemoryWin32NameEXT = NULL; +PFNGLIMPORTSEMAPHOREFDEXTPROC glad_glImportSemaphoreFdEXT = NULL; +PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC glad_glImportSemaphoreWin32HandleEXT = NULL; +PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC glad_glImportSemaphoreWin32NameEXT = NULL; +PFNGLIMPORTSYNCEXTPROC glad_glImportSyncEXT = NULL; +PFNGLINDEXFORMATNVPROC glad_glIndexFormatNV = NULL; +PFNGLINDEXFUNCEXTPROC glad_glIndexFuncEXT = NULL; +PFNGLINDEXMATERIALEXTPROC glad_glIndexMaterialEXT = NULL; +PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT = NULL; +PFNGLINDEXPOINTERLISTIBMPROC glad_glIndexPointerListIBM = NULL; +PFNGLINDEXXOESPROC glad_glIndexxOES = NULL; +PFNGLINDEXXVOESPROC glad_glIndexxvOES = NULL; +PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT = NULL; +PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT = NULL; +PFNGLINSTRUMENTSBUFFERSGIXPROC glad_glInstrumentsBufferSGIX = NULL; +PFNGLINTERPOLATEPATHSNVPROC glad_glInterpolatePathsNV = NULL; +PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData = NULL; +PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData = NULL; +PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer = NULL; +PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData = NULL; +PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData = NULL; +PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer = NULL; +PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage = NULL; +PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage = NULL; +PFNGLISASYNCMARKERSGIXPROC glad_glIsAsyncMarkerSGIX = NULL; +PFNGLISBUFFERPROC glad_glIsBuffer = NULL; +PFNGLISBUFFERARBPROC glad_glIsBufferARB = NULL; +PFNGLISBUFFERRESIDENTNVPROC glad_glIsBufferResidentNV = NULL; +PFNGLISCOMMANDLISTNVPROC glad_glIsCommandListNV = NULL; +PFNGLISENABLEDPROC glad_glIsEnabled = NULL; +PFNGLISENABLEDINDEXEDEXTPROC glad_glIsEnabledIndexedEXT = NULL; +PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; +PFNGLISFENCEAPPLEPROC glad_glIsFenceAPPLE = NULL; +PFNGLISFENCENVPROC glad_glIsFenceNV = NULL; +PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; +PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT = NULL; +PFNGLISIMAGEHANDLERESIDENTARBPROC glad_glIsImageHandleResidentARB = NULL; +PFNGLISIMAGEHANDLERESIDENTNVPROC glad_glIsImageHandleResidentNV = NULL; +PFNGLISMEMORYOBJECTEXTPROC glad_glIsMemoryObjectEXT = NULL; +PFNGLISNAMEAMDPROC glad_glIsNameAMD = NULL; +PFNGLISNAMEDBUFFERRESIDENTNVPROC glad_glIsNamedBufferResidentNV = NULL; +PFNGLISNAMEDSTRINGARBPROC glad_glIsNamedStringARB = NULL; +PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI = NULL; +PFNGLISOCCLUSIONQUERYNVPROC glad_glIsOcclusionQueryNV = NULL; +PFNGLISPATHNVPROC glad_glIsPathNV = NULL; +PFNGLISPOINTINFILLPATHNVPROC glad_glIsPointInFillPathNV = NULL; +PFNGLISPOINTINSTROKEPATHNVPROC glad_glIsPointInStrokePathNV = NULL; +PFNGLISPROGRAMPROC glad_glIsProgram = NULL; +PFNGLISPROGRAMARBPROC glad_glIsProgramARB = NULL; +PFNGLISPROGRAMNVPROC glad_glIsProgramNV = NULL; +PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline = NULL; +PFNGLISQUERYPROC glad_glIsQuery = NULL; +PFNGLISQUERYARBPROC glad_glIsQueryARB = NULL; +PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; +PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT = NULL; +PFNGLISSAMPLERPROC glad_glIsSampler = NULL; +PFNGLISSEMAPHOREEXTPROC glad_glIsSemaphoreEXT = NULL; +PFNGLISSHADERPROC glad_glIsShader = NULL; +PFNGLISSTATENVPROC glad_glIsStateNV = NULL; +PFNGLISSYNCPROC glad_glIsSync = NULL; +PFNGLISTEXTUREPROC glad_glIsTexture = NULL; +PFNGLISTEXTUREEXTPROC glad_glIsTextureEXT = NULL; +PFNGLISTEXTUREHANDLERESIDENTARBPROC glad_glIsTextureHandleResidentARB = NULL; +PFNGLISTEXTUREHANDLERESIDENTNVPROC glad_glIsTextureHandleResidentNV = NULL; +PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback = NULL; +PFNGLISTRANSFORMFEEDBACKNVPROC glad_glIsTransformFeedbackNV = NULL; +PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT = NULL; +PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; +PFNGLISVERTEXARRAYAPPLEPROC glad_glIsVertexArrayAPPLE = NULL; +PFNGLISVERTEXATTRIBENABLEDAPPLEPROC glad_glIsVertexAttribEnabledAPPLE = NULL; +PFNGLLGPUCOPYIMAGESUBDATANVXPROC glad_glLGPUCopyImageSubDataNVX = NULL; +PFNGLLGPUINTERLOCKNVXPROC glad_glLGPUInterlockNVX = NULL; +PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC glad_glLGPUNamedBufferSubDataNVX = NULL; +PFNGLLABELOBJECTEXTPROC glad_glLabelObjectEXT = NULL; +PFNGLLIGHTENVISGIXPROC glad_glLightEnviSGIX = NULL; +PFNGLLIGHTMODELXOESPROC glad_glLightModelxOES = NULL; +PFNGLLIGHTMODELXVOESPROC glad_glLightModelxvOES = NULL; +PFNGLLIGHTXOESPROC glad_glLightxOES = NULL; +PFNGLLIGHTXVOESPROC glad_glLightxvOES = NULL; +PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; +PFNGLLINEWIDTHXOESPROC glad_glLineWidthxOES = NULL; +PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; +PFNGLLINKPROGRAMARBPROC glad_glLinkProgramARB = NULL; +PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC glad_glListDrawCommandsStatesClientNV = NULL; +PFNGLLISTPARAMETERFSGIXPROC glad_glListParameterfSGIX = NULL; +PFNGLLISTPARAMETERFVSGIXPROC glad_glListParameterfvSGIX = NULL; +PFNGLLISTPARAMETERISGIXPROC glad_glListParameteriSGIX = NULL; +PFNGLLISTPARAMETERIVSGIXPROC glad_glListParameterivSGIX = NULL; +PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC glad_glLoadIdentityDeformationMapSGIX = NULL; +PFNGLLOADMATRIXXOESPROC glad_glLoadMatrixxOES = NULL; +PFNGLLOADPROGRAMNVPROC glad_glLoadProgramNV = NULL; +PFNGLLOADTRANSPOSEMATRIXDARBPROC glad_glLoadTransposeMatrixdARB = NULL; +PFNGLLOADTRANSPOSEMATRIXFARBPROC glad_glLoadTransposeMatrixfARB = NULL; +PFNGLLOADTRANSPOSEMATRIXXOESPROC glad_glLoadTransposeMatrixxOES = NULL; +PFNGLLOCKARRAYSEXTPROC glad_glLockArraysEXT = NULL; +PFNGLLOGICOPPROC glad_glLogicOp = NULL; +PFNGLMAKEBUFFERNONRESIDENTNVPROC glad_glMakeBufferNonResidentNV = NULL; +PFNGLMAKEBUFFERRESIDENTNVPROC glad_glMakeBufferResidentNV = NULL; +PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glad_glMakeImageHandleNonResidentARB = NULL; +PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glad_glMakeImageHandleNonResidentNV = NULL; +PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glad_glMakeImageHandleResidentARB = NULL; +PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glad_glMakeImageHandleResidentNV = NULL; +PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glad_glMakeNamedBufferNonResidentNV = NULL; +PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glad_glMakeNamedBufferResidentNV = NULL; +PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glad_glMakeTextureHandleNonResidentARB = NULL; +PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glad_glMakeTextureHandleNonResidentNV = NULL; +PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glad_glMakeTextureHandleResidentARB = NULL; +PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glad_glMakeTextureHandleResidentNV = NULL; +PFNGLMAP1XOESPROC glad_glMap1xOES = NULL; +PFNGLMAP2XOESPROC glad_glMap2xOES = NULL; +PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; +PFNGLMAPBUFFERARBPROC glad_glMapBufferARB = NULL; +PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; +PFNGLMAPCONTROLPOINTSNVPROC glad_glMapControlPointsNV = NULL; +PFNGLMAPGRID1XOESPROC glad_glMapGrid1xOES = NULL; +PFNGLMAPGRID2XOESPROC glad_glMapGrid2xOES = NULL; +PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer = NULL; +PFNGLMAPNAMEDBUFFEREXTPROC glad_glMapNamedBufferEXT = NULL; +PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange = NULL; +PFNGLMAPNAMEDBUFFERRANGEEXTPROC glad_glMapNamedBufferRangeEXT = NULL; +PFNGLMAPOBJECTBUFFERATIPROC glad_glMapObjectBufferATI = NULL; +PFNGLMAPPARAMETERFVNVPROC glad_glMapParameterfvNV = NULL; +PFNGLMAPPARAMETERIVNVPROC glad_glMapParameterivNV = NULL; +PFNGLMAPTEXTURE2DINTELPROC glad_glMapTexture2DINTEL = NULL; +PFNGLMAPVERTEXATTRIB1DAPPLEPROC glad_glMapVertexAttrib1dAPPLE = NULL; +PFNGLMAPVERTEXATTRIB1FAPPLEPROC glad_glMapVertexAttrib1fAPPLE = NULL; +PFNGLMAPVERTEXATTRIB2DAPPLEPROC glad_glMapVertexAttrib2dAPPLE = NULL; +PFNGLMAPVERTEXATTRIB2FAPPLEPROC glad_glMapVertexAttrib2fAPPLE = NULL; +PFNGLMATERIALXOESPROC glad_glMaterialxOES = NULL; +PFNGLMATERIALXVOESPROC glad_glMaterialxvOES = NULL; +PFNGLMATRIXFRUSTUMEXTPROC glad_glMatrixFrustumEXT = NULL; +PFNGLMATRIXINDEXPOINTERARBPROC glad_glMatrixIndexPointerARB = NULL; +PFNGLMATRIXINDEXUBVARBPROC glad_glMatrixIndexubvARB = NULL; +PFNGLMATRIXINDEXUIVARBPROC glad_glMatrixIndexuivARB = NULL; +PFNGLMATRIXINDEXUSVARBPROC glad_glMatrixIndexusvARB = NULL; +PFNGLMATRIXLOAD3X2FNVPROC glad_glMatrixLoad3x2fNV = NULL; +PFNGLMATRIXLOAD3X3FNVPROC glad_glMatrixLoad3x3fNV = NULL; +PFNGLMATRIXLOADIDENTITYEXTPROC glad_glMatrixLoadIdentityEXT = NULL; +PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC glad_glMatrixLoadTranspose3x3fNV = NULL; +PFNGLMATRIXLOADTRANSPOSEDEXTPROC glad_glMatrixLoadTransposedEXT = NULL; +PFNGLMATRIXLOADTRANSPOSEFEXTPROC glad_glMatrixLoadTransposefEXT = NULL; +PFNGLMATRIXLOADDEXTPROC glad_glMatrixLoaddEXT = NULL; +PFNGLMATRIXLOADFEXTPROC glad_glMatrixLoadfEXT = NULL; +PFNGLMATRIXMULT3X2FNVPROC glad_glMatrixMult3x2fNV = NULL; +PFNGLMATRIXMULT3X3FNVPROC glad_glMatrixMult3x3fNV = NULL; +PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC glad_glMatrixMultTranspose3x3fNV = NULL; +PFNGLMATRIXMULTTRANSPOSEDEXTPROC glad_glMatrixMultTransposedEXT = NULL; +PFNGLMATRIXMULTTRANSPOSEFEXTPROC glad_glMatrixMultTransposefEXT = NULL; +PFNGLMATRIXMULTDEXTPROC glad_glMatrixMultdEXT = NULL; +PFNGLMATRIXMULTFEXTPROC glad_glMatrixMultfEXT = NULL; +PFNGLMATRIXORTHOEXTPROC glad_glMatrixOrthoEXT = NULL; +PFNGLMATRIXPOPEXTPROC glad_glMatrixPopEXT = NULL; +PFNGLMATRIXPUSHEXTPROC glad_glMatrixPushEXT = NULL; +PFNGLMATRIXROTATEDEXTPROC glad_glMatrixRotatedEXT = NULL; +PFNGLMATRIXROTATEFEXTPROC glad_glMatrixRotatefEXT = NULL; +PFNGLMATRIXSCALEDEXTPROC glad_glMatrixScaledEXT = NULL; +PFNGLMATRIXSCALEFEXTPROC glad_glMatrixScalefEXT = NULL; +PFNGLMATRIXTRANSLATEDEXTPROC glad_glMatrixTranslatedEXT = NULL; +PFNGLMATRIXTRANSLATEFEXTPROC glad_glMatrixTranslatefEXT = NULL; +PFNGLMAXSHADERCOMPILERTHREADSARBPROC glad_glMaxShaderCompilerThreadsARB = NULL; +PFNGLMAXSHADERCOMPILERTHREADSKHRPROC glad_glMaxShaderCompilerThreadsKHR = NULL; +PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier = NULL; +PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion = NULL; +PFNGLMEMORYBARRIEREXTPROC glad_glMemoryBarrierEXT = NULL; +PFNGLMEMORYOBJECTPARAMETERIVEXTPROC glad_glMemoryObjectParameterivEXT = NULL; +PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading = NULL; +PFNGLMINSAMPLESHADINGARBPROC glad_glMinSampleShadingARB = NULL; +PFNGLMINMAXEXTPROC glad_glMinmaxEXT = NULL; +PFNGLMULTMATRIXXOESPROC glad_glMultMatrixxOES = NULL; +PFNGLMULTTRANSPOSEMATRIXDARBPROC glad_glMultTransposeMatrixdARB = NULL; +PFNGLMULTTRANSPOSEMATRIXFARBPROC glad_glMultTransposeMatrixfARB = NULL; +PFNGLMULTTRANSPOSEMATRIXXOESPROC glad_glMultTransposeMatrixxOES = NULL; +PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; +PFNGLMULTIDRAWARRAYSEXTPROC glad_glMultiDrawArraysEXT = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC glad_glMultiDrawArraysIndirectAMD = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawArraysIndirectBindlessCountNV = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC glad_glMultiDrawArraysIndirectBindlessNV = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glad_glMultiDrawArraysIndirectCountARB = NULL; +PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC glad_glMultiDrawElementArrayAPPLE = NULL; +PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; +PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; +PFNGLMULTIDRAWELEMENTSEXTPROC glad_glMultiDrawElementsEXT = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC glad_glMultiDrawElementsIndirectAMD = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawElementsIndirectBindlessCountNV = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glad_glMultiDrawElementsIndirectBindlessNV = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glad_glMultiDrawElementsIndirectCountARB = NULL; +PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC glad_glMultiDrawMeshTasksIndirectCountNV = NULL; +PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC glad_glMultiDrawMeshTasksIndirectNV = NULL; +PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glad_glMultiDrawRangeElementArrayAPPLE = NULL; +PFNGLMULTIMODEDRAWARRAYSIBMPROC glad_glMultiModeDrawArraysIBM = NULL; +PFNGLMULTIMODEDRAWELEMENTSIBMPROC glad_glMultiModeDrawElementsIBM = NULL; +PFNGLMULTITEXBUFFEREXTPROC glad_glMultiTexBufferEXT = NULL; +PFNGLMULTITEXCOORD1BOESPROC glad_glMultiTexCoord1bOES = NULL; +PFNGLMULTITEXCOORD1BVOESPROC glad_glMultiTexCoord1bvOES = NULL; +PFNGLMULTITEXCOORD1DARBPROC glad_glMultiTexCoord1dARB = NULL; +PFNGLMULTITEXCOORD1DVARBPROC glad_glMultiTexCoord1dvARB = NULL; +PFNGLMULTITEXCOORD1FARBPROC glad_glMultiTexCoord1fARB = NULL; +PFNGLMULTITEXCOORD1FVARBPROC glad_glMultiTexCoord1fvARB = NULL; +PFNGLMULTITEXCOORD1HNVPROC glad_glMultiTexCoord1hNV = NULL; +PFNGLMULTITEXCOORD1HVNVPROC glad_glMultiTexCoord1hvNV = NULL; +PFNGLMULTITEXCOORD1IARBPROC glad_glMultiTexCoord1iARB = NULL; +PFNGLMULTITEXCOORD1IVARBPROC glad_glMultiTexCoord1ivARB = NULL; +PFNGLMULTITEXCOORD1SARBPROC glad_glMultiTexCoord1sARB = NULL; +PFNGLMULTITEXCOORD1SVARBPROC glad_glMultiTexCoord1svARB = NULL; +PFNGLMULTITEXCOORD1XOESPROC glad_glMultiTexCoord1xOES = NULL; +PFNGLMULTITEXCOORD1XVOESPROC glad_glMultiTexCoord1xvOES = NULL; +PFNGLMULTITEXCOORD2BOESPROC glad_glMultiTexCoord2bOES = NULL; +PFNGLMULTITEXCOORD2BVOESPROC glad_glMultiTexCoord2bvOES = NULL; +PFNGLMULTITEXCOORD2DARBPROC glad_glMultiTexCoord2dARB = NULL; +PFNGLMULTITEXCOORD2DVARBPROC glad_glMultiTexCoord2dvARB = NULL; +PFNGLMULTITEXCOORD2FARBPROC glad_glMultiTexCoord2fARB = NULL; +PFNGLMULTITEXCOORD2FVARBPROC glad_glMultiTexCoord2fvARB = NULL; +PFNGLMULTITEXCOORD2HNVPROC glad_glMultiTexCoord2hNV = NULL; +PFNGLMULTITEXCOORD2HVNVPROC glad_glMultiTexCoord2hvNV = NULL; +PFNGLMULTITEXCOORD2IARBPROC glad_glMultiTexCoord2iARB = NULL; +PFNGLMULTITEXCOORD2IVARBPROC glad_glMultiTexCoord2ivARB = NULL; +PFNGLMULTITEXCOORD2SARBPROC glad_glMultiTexCoord2sARB = NULL; +PFNGLMULTITEXCOORD2SVARBPROC glad_glMultiTexCoord2svARB = NULL; +PFNGLMULTITEXCOORD2XOESPROC glad_glMultiTexCoord2xOES = NULL; +PFNGLMULTITEXCOORD2XVOESPROC glad_glMultiTexCoord2xvOES = NULL; +PFNGLMULTITEXCOORD3BOESPROC glad_glMultiTexCoord3bOES = NULL; +PFNGLMULTITEXCOORD3BVOESPROC glad_glMultiTexCoord3bvOES = NULL; +PFNGLMULTITEXCOORD3DARBPROC glad_glMultiTexCoord3dARB = NULL; +PFNGLMULTITEXCOORD3DVARBPROC glad_glMultiTexCoord3dvARB = NULL; +PFNGLMULTITEXCOORD3FARBPROC glad_glMultiTexCoord3fARB = NULL; +PFNGLMULTITEXCOORD3FVARBPROC glad_glMultiTexCoord3fvARB = NULL; +PFNGLMULTITEXCOORD3HNVPROC glad_glMultiTexCoord3hNV = NULL; +PFNGLMULTITEXCOORD3HVNVPROC glad_glMultiTexCoord3hvNV = NULL; +PFNGLMULTITEXCOORD3IARBPROC glad_glMultiTexCoord3iARB = NULL; +PFNGLMULTITEXCOORD3IVARBPROC glad_glMultiTexCoord3ivARB = NULL; +PFNGLMULTITEXCOORD3SARBPROC glad_glMultiTexCoord3sARB = NULL; +PFNGLMULTITEXCOORD3SVARBPROC glad_glMultiTexCoord3svARB = NULL; +PFNGLMULTITEXCOORD3XOESPROC glad_glMultiTexCoord3xOES = NULL; +PFNGLMULTITEXCOORD3XVOESPROC glad_glMultiTexCoord3xvOES = NULL; +PFNGLMULTITEXCOORD4BOESPROC glad_glMultiTexCoord4bOES = NULL; +PFNGLMULTITEXCOORD4BVOESPROC glad_glMultiTexCoord4bvOES = NULL; +PFNGLMULTITEXCOORD4DARBPROC glad_glMultiTexCoord4dARB = NULL; +PFNGLMULTITEXCOORD4DVARBPROC glad_glMultiTexCoord4dvARB = NULL; +PFNGLMULTITEXCOORD4FARBPROC glad_glMultiTexCoord4fARB = NULL; +PFNGLMULTITEXCOORD4FVARBPROC glad_glMultiTexCoord4fvARB = NULL; +PFNGLMULTITEXCOORD4HNVPROC glad_glMultiTexCoord4hNV = NULL; +PFNGLMULTITEXCOORD4HVNVPROC glad_glMultiTexCoord4hvNV = NULL; +PFNGLMULTITEXCOORD4IARBPROC glad_glMultiTexCoord4iARB = NULL; +PFNGLMULTITEXCOORD4IVARBPROC glad_glMultiTexCoord4ivARB = NULL; +PFNGLMULTITEXCOORD4SARBPROC glad_glMultiTexCoord4sARB = NULL; +PFNGLMULTITEXCOORD4SVARBPROC glad_glMultiTexCoord4svARB = NULL; +PFNGLMULTITEXCOORD4XOESPROC glad_glMultiTexCoord4xOES = NULL; +PFNGLMULTITEXCOORD4XVOESPROC glad_glMultiTexCoord4xvOES = NULL; +PFNGLMULTITEXCOORDPOINTEREXTPROC glad_glMultiTexCoordPointerEXT = NULL; +PFNGLMULTITEXENVFEXTPROC glad_glMultiTexEnvfEXT = NULL; +PFNGLMULTITEXENVFVEXTPROC glad_glMultiTexEnvfvEXT = NULL; +PFNGLMULTITEXENVIEXTPROC glad_glMultiTexEnviEXT = NULL; +PFNGLMULTITEXENVIVEXTPROC glad_glMultiTexEnvivEXT = NULL; +PFNGLMULTITEXGENDEXTPROC glad_glMultiTexGendEXT = NULL; +PFNGLMULTITEXGENDVEXTPROC glad_glMultiTexGendvEXT = NULL; +PFNGLMULTITEXGENFEXTPROC glad_glMultiTexGenfEXT = NULL; +PFNGLMULTITEXGENFVEXTPROC glad_glMultiTexGenfvEXT = NULL; +PFNGLMULTITEXGENIEXTPROC glad_glMultiTexGeniEXT = NULL; +PFNGLMULTITEXGENIVEXTPROC glad_glMultiTexGenivEXT = NULL; +PFNGLMULTITEXIMAGE1DEXTPROC glad_glMultiTexImage1DEXT = NULL; +PFNGLMULTITEXIMAGE2DEXTPROC glad_glMultiTexImage2DEXT = NULL; +PFNGLMULTITEXIMAGE3DEXTPROC glad_glMultiTexImage3DEXT = NULL; +PFNGLMULTITEXPARAMETERIIVEXTPROC glad_glMultiTexParameterIivEXT = NULL; +PFNGLMULTITEXPARAMETERIUIVEXTPROC glad_glMultiTexParameterIuivEXT = NULL; +PFNGLMULTITEXPARAMETERFEXTPROC glad_glMultiTexParameterfEXT = NULL; +PFNGLMULTITEXPARAMETERFVEXTPROC glad_glMultiTexParameterfvEXT = NULL; +PFNGLMULTITEXPARAMETERIEXTPROC glad_glMultiTexParameteriEXT = NULL; +PFNGLMULTITEXPARAMETERIVEXTPROC glad_glMultiTexParameterivEXT = NULL; +PFNGLMULTITEXRENDERBUFFEREXTPROC glad_glMultiTexRenderbufferEXT = NULL; +PFNGLMULTITEXSUBIMAGE1DEXTPROC glad_glMultiTexSubImage1DEXT = NULL; +PFNGLMULTITEXSUBIMAGE2DEXTPROC glad_glMultiTexSubImage2DEXT = NULL; +PFNGLMULTITEXSUBIMAGE3DEXTPROC glad_glMultiTexSubImage3DEXT = NULL; +PFNGLMULTICASTBARRIERNVPROC glad_glMulticastBarrierNV = NULL; +PFNGLMULTICASTBLITFRAMEBUFFERNVPROC glad_glMulticastBlitFramebufferNV = NULL; +PFNGLMULTICASTBUFFERSUBDATANVPROC glad_glMulticastBufferSubDataNV = NULL; +PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC glad_glMulticastCopyBufferSubDataNV = NULL; +PFNGLMULTICASTCOPYIMAGESUBDATANVPROC glad_glMulticastCopyImageSubDataNV = NULL; +PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glMulticastFramebufferSampleLocationsfvNV = NULL; +PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC glad_glMulticastGetQueryObjecti64vNV = NULL; +PFNGLMULTICASTGETQUERYOBJECTIVNVPROC glad_glMulticastGetQueryObjectivNV = NULL; +PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC glad_glMulticastGetQueryObjectui64vNV = NULL; +PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC glad_glMulticastGetQueryObjectuivNV = NULL; +PFNGLMULTICASTSCISSORARRAYVNVXPROC glad_glMulticastScissorArrayvNVX = NULL; +PFNGLMULTICASTVIEWPORTARRAYVNVXPROC glad_glMulticastViewportArrayvNVX = NULL; +PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC glad_glMulticastViewportPositionWScaleNVX = NULL; +PFNGLMULTICASTWAITSYNCNVPROC glad_glMulticastWaitSyncNV = NULL; +PFNGLNAMEDBUFFERATTACHMEMORYNVPROC glad_glNamedBufferAttachMemoryNV = NULL; +PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData = NULL; +PFNGLNAMEDBUFFERDATAEXTPROC glad_glNamedBufferDataEXT = NULL; +PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC glad_glNamedBufferPageCommitmentARB = NULL; +PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC glad_glNamedBufferPageCommitmentEXT = NULL; +PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC glad_glNamedBufferPageCommitmentMemNV = NULL; +PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage = NULL; +PFNGLNAMEDBUFFERSTORAGEEXTPROC glad_glNamedBufferStorageEXT = NULL; +PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC glad_glNamedBufferStorageExternalEXT = NULL; +PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC glad_glNamedBufferStorageMemEXT = NULL; +PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData = NULL; +PFNGLNAMEDBUFFERSUBDATAEXTPROC glad_glNamedBufferSubDataEXT = NULL; +PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glad_glNamedCopyBufferSubDataEXT = NULL; +PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer = NULL; +PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers = NULL; +PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri = NULL; +PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glad_glNamedFramebufferParameteriEXT = NULL; +PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer = NULL; +PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer = NULL; +PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glad_glNamedFramebufferRenderbufferEXT = NULL; +PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB = NULL; +PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glNamedFramebufferSampleLocationsfvNV = NULL; +PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glNamedFramebufferSamplePositionsfvAMD = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glad_glNamedFramebufferTexture1DEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glad_glNamedFramebufferTexture2DEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glad_glNamedFramebufferTexture3DEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glad_glNamedFramebufferTextureEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glad_glNamedFramebufferTextureFaceEXT = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glad_glNamedFramebufferTextureLayerEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glad_glNamedProgramLocalParameter4dEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glad_glNamedProgramLocalParameter4dvEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glad_glNamedProgramLocalParameter4fEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glad_glNamedProgramLocalParameter4fvEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glad_glNamedProgramLocalParameterI4iEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glad_glNamedProgramLocalParameterI4ivEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glad_glNamedProgramLocalParameterI4uiEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glad_glNamedProgramLocalParameterI4uivEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glNamedProgramLocalParameters4fvEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glad_glNamedProgramLocalParametersI4ivEXT = NULL; +PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glad_glNamedProgramLocalParametersI4uivEXT = NULL; +PFNGLNAMEDPROGRAMSTRINGEXTPROC glad_glNamedProgramStringEXT = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glad_glNamedRenderbufferStorageEXT = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC glad_glNamedRenderbufferStorageMultisampleAdvancedAMD = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glad_glNamedRenderbufferStorageMultisampleCoverageEXT = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glNamedRenderbufferStorageMultisampleEXT = NULL; +PFNGLNAMEDSTRINGARBPROC glad_glNamedStringARB = NULL; +PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI = NULL; +PFNGLNORMAL3FVERTEX3FSUNPROC glad_glNormal3fVertex3fSUN = NULL; +PFNGLNORMAL3FVERTEX3FVSUNPROC glad_glNormal3fVertex3fvSUN = NULL; +PFNGLNORMAL3HNVPROC glad_glNormal3hNV = NULL; +PFNGLNORMAL3HVNVPROC glad_glNormal3hvNV = NULL; +PFNGLNORMAL3XOESPROC glad_glNormal3xOES = NULL; +PFNGLNORMAL3XVOESPROC glad_glNormal3xvOES = NULL; +PFNGLNORMALFORMATNVPROC glad_glNormalFormatNV = NULL; +PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT = NULL; +PFNGLNORMALPOINTERLISTIBMPROC glad_glNormalPointerListIBM = NULL; +PFNGLNORMALPOINTERVINTELPROC glad_glNormalPointervINTEL = NULL; +PFNGLNORMALSTREAM3BATIPROC glad_glNormalStream3bATI = NULL; +PFNGLNORMALSTREAM3BVATIPROC glad_glNormalStream3bvATI = NULL; +PFNGLNORMALSTREAM3DATIPROC glad_glNormalStream3dATI = NULL; +PFNGLNORMALSTREAM3DVATIPROC glad_glNormalStream3dvATI = NULL; +PFNGLNORMALSTREAM3FATIPROC glad_glNormalStream3fATI = NULL; +PFNGLNORMALSTREAM3FVATIPROC glad_glNormalStream3fvATI = NULL; +PFNGLNORMALSTREAM3IATIPROC glad_glNormalStream3iATI = NULL; +PFNGLNORMALSTREAM3IVATIPROC glad_glNormalStream3ivATI = NULL; +PFNGLNORMALSTREAM3SATIPROC glad_glNormalStream3sATI = NULL; +PFNGLNORMALSTREAM3SVATIPROC glad_glNormalStream3svATI = NULL; +PFNGLOBJECTLABELPROC glad_glObjectLabel = NULL; +PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel = NULL; +PFNGLOBJECTPURGEABLEAPPLEPROC glad_glObjectPurgeableAPPLE = NULL; +PFNGLOBJECTUNPURGEABLEAPPLEPROC glad_glObjectUnpurgeableAPPLE = NULL; +PFNGLORTHOFOESPROC glad_glOrthofOES = NULL; +PFNGLORTHOXOESPROC glad_glOrthoxOES = NULL; +PFNGLPNTRIANGLESFATIPROC glad_glPNTrianglesfATI = NULL; +PFNGLPNTRIANGLESIATIPROC glad_glPNTrianglesiATI = NULL; +PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI = NULL; +PFNGLPASSTHROUGHXOESPROC glad_glPassThroughxOES = NULL; +PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv = NULL; +PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri = NULL; +PFNGLPATHCOMMANDSNVPROC glad_glPathCommandsNV = NULL; +PFNGLPATHCOORDSNVPROC glad_glPathCoordsNV = NULL; +PFNGLPATHCOVERDEPTHFUNCNVPROC glad_glPathCoverDepthFuncNV = NULL; +PFNGLPATHDASHARRAYNVPROC glad_glPathDashArrayNV = NULL; +PFNGLPATHGLYPHINDEXARRAYNVPROC glad_glPathGlyphIndexArrayNV = NULL; +PFNGLPATHGLYPHINDEXRANGENVPROC glad_glPathGlyphIndexRangeNV = NULL; +PFNGLPATHGLYPHRANGENVPROC glad_glPathGlyphRangeNV = NULL; +PFNGLPATHGLYPHSNVPROC glad_glPathGlyphsNV = NULL; +PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC glad_glPathMemoryGlyphIndexArrayNV = NULL; +PFNGLPATHPARAMETERFNVPROC glad_glPathParameterfNV = NULL; +PFNGLPATHPARAMETERFVNVPROC glad_glPathParameterfvNV = NULL; +PFNGLPATHPARAMETERINVPROC glad_glPathParameteriNV = NULL; +PFNGLPATHPARAMETERIVNVPROC glad_glPathParameterivNV = NULL; +PFNGLPATHSTENCILDEPTHOFFSETNVPROC glad_glPathStencilDepthOffsetNV = NULL; +PFNGLPATHSTENCILFUNCNVPROC glad_glPathStencilFuncNV = NULL; +PFNGLPATHSTRINGNVPROC glad_glPathStringNV = NULL; +PFNGLPATHSUBCOMMANDSNVPROC glad_glPathSubCommandsNV = NULL; +PFNGLPATHSUBCOORDSNVPROC glad_glPathSubCoordsNV = NULL; +PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback = NULL; +PFNGLPAUSETRANSFORMFEEDBACKNVPROC glad_glPauseTransformFeedbackNV = NULL; +PFNGLPIXELDATARANGENVPROC glad_glPixelDataRangeNV = NULL; +PFNGLPIXELMAPXPROC glad_glPixelMapx = NULL; +PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; +PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; +PFNGLPIXELSTOREXPROC glad_glPixelStorex = NULL; +PFNGLPIXELTEXGENPARAMETERFSGISPROC glad_glPixelTexGenParameterfSGIS = NULL; +PFNGLPIXELTEXGENPARAMETERFVSGISPROC glad_glPixelTexGenParameterfvSGIS = NULL; +PFNGLPIXELTEXGENPARAMETERISGISPROC glad_glPixelTexGenParameteriSGIS = NULL; +PFNGLPIXELTEXGENPARAMETERIVSGISPROC glad_glPixelTexGenParameterivSGIS = NULL; +PFNGLPIXELTEXGENSGIXPROC glad_glPixelTexGenSGIX = NULL; +PFNGLPIXELTRANSFERXOESPROC glad_glPixelTransferxOES = NULL; +PFNGLPIXELTRANSFORMPARAMETERFEXTPROC glad_glPixelTransformParameterfEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC glad_glPixelTransformParameterfvEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERIEXTPROC glad_glPixelTransformParameteriEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC glad_glPixelTransformParameterivEXT = NULL; +PFNGLPIXELZOOMXOESPROC glad_glPixelZoomxOES = NULL; +PFNGLPOINTALONGPATHNVPROC glad_glPointAlongPathNV = NULL; +PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; +PFNGLPOINTPARAMETERFARBPROC glad_glPointParameterfARB = NULL; +PFNGLPOINTPARAMETERFEXTPROC glad_glPointParameterfEXT = NULL; +PFNGLPOINTPARAMETERFSGISPROC glad_glPointParameterfSGIS = NULL; +PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; +PFNGLPOINTPARAMETERFVARBPROC glad_glPointParameterfvARB = NULL; +PFNGLPOINTPARAMETERFVEXTPROC glad_glPointParameterfvEXT = NULL; +PFNGLPOINTPARAMETERFVSGISPROC glad_glPointParameterfvSGIS = NULL; +PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; +PFNGLPOINTPARAMETERINVPROC glad_glPointParameteriNV = NULL; +PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; +PFNGLPOINTPARAMETERIVNVPROC glad_glPointParameterivNV = NULL; +PFNGLPOINTPARAMETERXVOESPROC glad_glPointParameterxvOES = NULL; +PFNGLPOINTSIZEPROC glad_glPointSize = NULL; +PFNGLPOINTSIZEXOESPROC glad_glPointSizexOES = NULL; +PFNGLPOLLASYNCSGIXPROC glad_glPollAsyncSGIX = NULL; +PFNGLPOLLINSTRUMENTSSGIXPROC glad_glPollInstrumentsSGIX = NULL; +PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; +PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; +PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp = NULL; +PFNGLPOLYGONOFFSETCLAMPEXTPROC glad_glPolygonOffsetClampEXT = NULL; +PFNGLPOLYGONOFFSETEXTPROC glad_glPolygonOffsetEXT = NULL; +PFNGLPOLYGONOFFSETXOESPROC glad_glPolygonOffsetxOES = NULL; +PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup = NULL; +PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT = NULL; +PFNGLPRESENTFRAMEDUALFILLNVPROC glad_glPresentFrameDualFillNV = NULL; +PFNGLPRESENTFRAMEKEYEDNVPROC glad_glPresentFrameKeyedNV = NULL; +PFNGLPRIMITIVEBOUNDINGBOXARBPROC glad_glPrimitiveBoundingBoxARB = NULL; +PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; +PFNGLPRIMITIVERESTARTINDEXNVPROC glad_glPrimitiveRestartIndexNV = NULL; +PFNGLPRIMITIVERESTARTNVPROC glad_glPrimitiveRestartNV = NULL; +PFNGLPRIORITIZETEXTURESEXTPROC glad_glPrioritizeTexturesEXT = NULL; +PFNGLPRIORITIZETEXTURESXOESPROC glad_glPrioritizeTexturesxOES = NULL; +PFNGLPROGRAMBINARYPROC glad_glProgramBinary = NULL; +PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC glad_glProgramBufferParametersIivNV = NULL; +PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC glad_glProgramBufferParametersIuivNV = NULL; +PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC glad_glProgramBufferParametersfvNV = NULL; +PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB = NULL; +PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB = NULL; +PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB = NULL; +PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB = NULL; +PFNGLPROGRAMENVPARAMETERI4INVPROC glad_glProgramEnvParameterI4iNV = NULL; +PFNGLPROGRAMENVPARAMETERI4IVNVPROC glad_glProgramEnvParameterI4ivNV = NULL; +PFNGLPROGRAMENVPARAMETERI4UINVPROC glad_glProgramEnvParameterI4uiNV = NULL; +PFNGLPROGRAMENVPARAMETERI4UIVNVPROC glad_glProgramEnvParameterI4uivNV = NULL; +PFNGLPROGRAMENVPARAMETERS4FVEXTPROC glad_glProgramEnvParameters4fvEXT = NULL; +PFNGLPROGRAMENVPARAMETERSI4IVNVPROC glad_glProgramEnvParametersI4ivNV = NULL; +PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC glad_glProgramEnvParametersI4uivNV = NULL; +PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB = NULL; +PFNGLPROGRAMLOCALPARAMETERI4INVPROC glad_glProgramLocalParameterI4iNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC glad_glProgramLocalParameterI4ivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4UINVPROC glad_glProgramLocalParameterI4uiNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC glad_glProgramLocalParameterI4uivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glProgramLocalParameters4fvEXT = NULL; +PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC glad_glProgramLocalParametersI4ivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC glad_glProgramLocalParametersI4uivNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4DNVPROC glad_glProgramNamedParameter4dNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC glad_glProgramNamedParameter4dvNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4FNVPROC glad_glProgramNamedParameter4fNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC glad_glProgramNamedParameter4fvNV = NULL; +PFNGLPROGRAMPARAMETER4DNVPROC glad_glProgramParameter4dNV = NULL; +PFNGLPROGRAMPARAMETER4DVNVPROC glad_glProgramParameter4dvNV = NULL; +PFNGLPROGRAMPARAMETER4FNVPROC glad_glProgramParameter4fNV = NULL; +PFNGLPROGRAMPARAMETER4FVNVPROC glad_glProgramParameter4fvNV = NULL; +PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri = NULL; +PFNGLPROGRAMPARAMETERIARBPROC glad_glProgramParameteriARB = NULL; +PFNGLPROGRAMPARAMETERIEXTPROC glad_glProgramParameteriEXT = NULL; +PFNGLPROGRAMPARAMETERS4DVNVPROC glad_glProgramParameters4dvNV = NULL; +PFNGLPROGRAMPARAMETERS4FVNVPROC glad_glProgramParameters4fvNV = NULL; +PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC glad_glProgramPathFragmentInputGenNV = NULL; +PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB = NULL; +PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC glad_glProgramSubroutineParametersuivNV = NULL; +PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d = NULL; +PFNGLPROGRAMUNIFORM1DEXTPROC glad_glProgramUniform1dEXT = NULL; +PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv = NULL; +PFNGLPROGRAMUNIFORM1DVEXTPROC glad_glProgramUniform1dvEXT = NULL; +PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f = NULL; +PFNGLPROGRAMUNIFORM1FEXTPROC glad_glProgramUniform1fEXT = NULL; +PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv = NULL; +PFNGLPROGRAMUNIFORM1FVEXTPROC glad_glProgramUniform1fvEXT = NULL; +PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i = NULL; +PFNGLPROGRAMUNIFORM1I64ARBPROC glad_glProgramUniform1i64ARB = NULL; +PFNGLPROGRAMUNIFORM1I64NVPROC glad_glProgramUniform1i64NV = NULL; +PFNGLPROGRAMUNIFORM1I64VARBPROC glad_glProgramUniform1i64vARB = NULL; +PFNGLPROGRAMUNIFORM1I64VNVPROC glad_glProgramUniform1i64vNV = NULL; +PFNGLPROGRAMUNIFORM1IEXTPROC glad_glProgramUniform1iEXT = NULL; +PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv = NULL; +PFNGLPROGRAMUNIFORM1IVEXTPROC glad_glProgramUniform1ivEXT = NULL; +PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui = NULL; +PFNGLPROGRAMUNIFORM1UI64ARBPROC glad_glProgramUniform1ui64ARB = NULL; +PFNGLPROGRAMUNIFORM1UI64NVPROC glad_glProgramUniform1ui64NV = NULL; +PFNGLPROGRAMUNIFORM1UI64VARBPROC glad_glProgramUniform1ui64vARB = NULL; +PFNGLPROGRAMUNIFORM1UI64VNVPROC glad_glProgramUniform1ui64vNV = NULL; +PFNGLPROGRAMUNIFORM1UIEXTPROC glad_glProgramUniform1uiEXT = NULL; +PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv = NULL; +PFNGLPROGRAMUNIFORM1UIVEXTPROC glad_glProgramUniform1uivEXT = NULL; +PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d = NULL; +PFNGLPROGRAMUNIFORM2DEXTPROC glad_glProgramUniform2dEXT = NULL; +PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv = NULL; +PFNGLPROGRAMUNIFORM2DVEXTPROC glad_glProgramUniform2dvEXT = NULL; +PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f = NULL; +PFNGLPROGRAMUNIFORM2FEXTPROC glad_glProgramUniform2fEXT = NULL; +PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv = NULL; +PFNGLPROGRAMUNIFORM2FVEXTPROC glad_glProgramUniform2fvEXT = NULL; +PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i = NULL; +PFNGLPROGRAMUNIFORM2I64ARBPROC glad_glProgramUniform2i64ARB = NULL; +PFNGLPROGRAMUNIFORM2I64NVPROC glad_glProgramUniform2i64NV = NULL; +PFNGLPROGRAMUNIFORM2I64VARBPROC glad_glProgramUniform2i64vARB = NULL; +PFNGLPROGRAMUNIFORM2I64VNVPROC glad_glProgramUniform2i64vNV = NULL; +PFNGLPROGRAMUNIFORM2IEXTPROC glad_glProgramUniform2iEXT = NULL; +PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv = NULL; +PFNGLPROGRAMUNIFORM2IVEXTPROC glad_glProgramUniform2ivEXT = NULL; +PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui = NULL; +PFNGLPROGRAMUNIFORM2UI64ARBPROC glad_glProgramUniform2ui64ARB = NULL; +PFNGLPROGRAMUNIFORM2UI64NVPROC glad_glProgramUniform2ui64NV = NULL; +PFNGLPROGRAMUNIFORM2UI64VARBPROC glad_glProgramUniform2ui64vARB = NULL; +PFNGLPROGRAMUNIFORM2UI64VNVPROC glad_glProgramUniform2ui64vNV = NULL; +PFNGLPROGRAMUNIFORM2UIEXTPROC glad_glProgramUniform2uiEXT = NULL; +PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv = NULL; +PFNGLPROGRAMUNIFORM2UIVEXTPROC glad_glProgramUniform2uivEXT = NULL; +PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d = NULL; +PFNGLPROGRAMUNIFORM3DEXTPROC glad_glProgramUniform3dEXT = NULL; +PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv = NULL; +PFNGLPROGRAMUNIFORM3DVEXTPROC glad_glProgramUniform3dvEXT = NULL; +PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f = NULL; +PFNGLPROGRAMUNIFORM3FEXTPROC glad_glProgramUniform3fEXT = NULL; +PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv = NULL; +PFNGLPROGRAMUNIFORM3FVEXTPROC glad_glProgramUniform3fvEXT = NULL; +PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i = NULL; +PFNGLPROGRAMUNIFORM3I64ARBPROC glad_glProgramUniform3i64ARB = NULL; +PFNGLPROGRAMUNIFORM3I64NVPROC glad_glProgramUniform3i64NV = NULL; +PFNGLPROGRAMUNIFORM3I64VARBPROC glad_glProgramUniform3i64vARB = NULL; +PFNGLPROGRAMUNIFORM3I64VNVPROC glad_glProgramUniform3i64vNV = NULL; +PFNGLPROGRAMUNIFORM3IEXTPROC glad_glProgramUniform3iEXT = NULL; +PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv = NULL; +PFNGLPROGRAMUNIFORM3IVEXTPROC glad_glProgramUniform3ivEXT = NULL; +PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui = NULL; +PFNGLPROGRAMUNIFORM3UI64ARBPROC glad_glProgramUniform3ui64ARB = NULL; +PFNGLPROGRAMUNIFORM3UI64NVPROC glad_glProgramUniform3ui64NV = NULL; +PFNGLPROGRAMUNIFORM3UI64VARBPROC glad_glProgramUniform3ui64vARB = NULL; +PFNGLPROGRAMUNIFORM3UI64VNVPROC glad_glProgramUniform3ui64vNV = NULL; +PFNGLPROGRAMUNIFORM3UIEXTPROC glad_glProgramUniform3uiEXT = NULL; +PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv = NULL; +PFNGLPROGRAMUNIFORM3UIVEXTPROC glad_glProgramUniform3uivEXT = NULL; +PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d = NULL; +PFNGLPROGRAMUNIFORM4DEXTPROC glad_glProgramUniform4dEXT = NULL; +PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv = NULL; +PFNGLPROGRAMUNIFORM4DVEXTPROC glad_glProgramUniform4dvEXT = NULL; +PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f = NULL; +PFNGLPROGRAMUNIFORM4FEXTPROC glad_glProgramUniform4fEXT = NULL; +PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv = NULL; +PFNGLPROGRAMUNIFORM4FVEXTPROC glad_glProgramUniform4fvEXT = NULL; +PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i = NULL; +PFNGLPROGRAMUNIFORM4I64ARBPROC glad_glProgramUniform4i64ARB = NULL; +PFNGLPROGRAMUNIFORM4I64NVPROC glad_glProgramUniform4i64NV = NULL; +PFNGLPROGRAMUNIFORM4I64VARBPROC glad_glProgramUniform4i64vARB = NULL; +PFNGLPROGRAMUNIFORM4I64VNVPROC glad_glProgramUniform4i64vNV = NULL; +PFNGLPROGRAMUNIFORM4IEXTPROC glad_glProgramUniform4iEXT = NULL; +PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv = NULL; +PFNGLPROGRAMUNIFORM4IVEXTPROC glad_glProgramUniform4ivEXT = NULL; +PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui = NULL; +PFNGLPROGRAMUNIFORM4UI64ARBPROC glad_glProgramUniform4ui64ARB = NULL; +PFNGLPROGRAMUNIFORM4UI64NVPROC glad_glProgramUniform4ui64NV = NULL; +PFNGLPROGRAMUNIFORM4UI64VARBPROC glad_glProgramUniform4ui64vARB = NULL; +PFNGLPROGRAMUNIFORM4UI64VNVPROC glad_glProgramUniform4ui64vNV = NULL; +PFNGLPROGRAMUNIFORM4UIEXTPROC glad_glProgramUniform4uiEXT = NULL; +PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv = NULL; +PFNGLPROGRAMUNIFORM4UIVEXTPROC glad_glProgramUniform4uivEXT = NULL; +PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glad_glProgramUniformHandleui64ARB = NULL; +PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glad_glProgramUniformHandleui64NV = NULL; +PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glad_glProgramUniformHandleui64vARB = NULL; +PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glad_glProgramUniformHandleui64vNV = NULL; +PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glad_glProgramUniformMatrix2dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glad_glProgramUniformMatrix2fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glad_glProgramUniformMatrix2x3dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glad_glProgramUniformMatrix2x3fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glad_glProgramUniformMatrix2x4dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glad_glProgramUniformMatrix2x4fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glad_glProgramUniformMatrix3dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glad_glProgramUniformMatrix3fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glad_glProgramUniformMatrix3x2dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glad_glProgramUniformMatrix3x2fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glad_glProgramUniformMatrix3x4dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glad_glProgramUniformMatrix3x4fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glad_glProgramUniformMatrix4dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glad_glProgramUniformMatrix4fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glad_glProgramUniformMatrix4x2dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glad_glProgramUniformMatrix4x2fvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glad_glProgramUniformMatrix4x3dvEXT = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glad_glProgramUniformMatrix4x3fvEXT = NULL; +PFNGLPROGRAMUNIFORMUI64NVPROC glad_glProgramUniformui64NV = NULL; +PFNGLPROGRAMUNIFORMUI64VNVPROC glad_glProgramUniformui64vNV = NULL; +PFNGLPROGRAMVERTEXLIMITNVPROC glad_glProgramVertexLimitNV = NULL; +PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; +PFNGLPROVOKINGVERTEXEXTPROC glad_glProvokingVertexEXT = NULL; +PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glad_glPushClientAttribDefaultEXT = NULL; +PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup = NULL; +PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT = NULL; +PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; +PFNGLQUERYMATRIXXOESPROC glad_glQueryMatrixxOES = NULL; +PFNGLQUERYOBJECTPARAMETERUIAMDPROC glad_glQueryObjectParameteruiAMD = NULL; +PFNGLQUERYRESOURCENVPROC glad_glQueryResourceNV = NULL; +PFNGLQUERYRESOURCETAGNVPROC glad_glQueryResourceTagNV = NULL; +PFNGLRASTERPOS2XOESPROC glad_glRasterPos2xOES = NULL; +PFNGLRASTERPOS2XVOESPROC glad_glRasterPos2xvOES = NULL; +PFNGLRASTERPOS3XOESPROC glad_glRasterPos3xOES = NULL; +PFNGLRASTERPOS3XVOESPROC glad_glRasterPos3xvOES = NULL; +PFNGLRASTERPOS4XOESPROC glad_glRasterPos4xOES = NULL; +PFNGLRASTERPOS4XVOESPROC glad_glRasterPos4xvOES = NULL; +PFNGLRASTERSAMPLESEXTPROC glad_glRasterSamplesEXT = NULL; +PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; +PFNGLREADINSTRUMENTSSGIXPROC glad_glReadInstrumentsSGIX = NULL; +PFNGLREADPIXELSPROC glad_glReadPixels = NULL; +PFNGLREADNPIXELSPROC glad_glReadnPixels = NULL; +PFNGLREADNPIXELSARBPROC glad_glReadnPixelsARB = NULL; +PFNGLRECTXOESPROC glad_glRectxOES = NULL; +PFNGLRECTXVOESPROC glad_glRectxvOES = NULL; +PFNGLREFERENCEPLANESGIXPROC glad_glReferencePlaneSGIX = NULL; +PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC glad_glReleaseKeyedMutexWin32EXT = NULL; +PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler = NULL; +PFNGLRENDERGPUMASKNVPROC glad_glRenderGpuMaskNV = NULL; +PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; +PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC glad_glRenderbufferStorageMultisampleAdvancedAMD = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glad_glRenderbufferStorageMultisampleCoverageNV = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT = NULL; +PFNGLREPLACEMENTCODEPOINTERSUNPROC glad_glReplacementCodePointerSUN = NULL; +PFNGLREPLACEMENTCODEUBSUNPROC glad_glReplacementCodeubSUN = NULL; +PFNGLREPLACEMENTCODEUBVSUNPROC glad_glReplacementCodeubvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC glad_glReplacementCodeuiColor4ubVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4ubVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUISUNPROC glad_glReplacementCodeuiSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC glad_glReplacementCodeuiVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC glad_glReplacementCodeuiVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUIVSUNPROC glad_glReplacementCodeuivSUN = NULL; +PFNGLREPLACEMENTCODEUSSUNPROC glad_glReplacementCodeusSUN = NULL; +PFNGLREPLACEMENTCODEUSVSUNPROC glad_glReplacementCodeusvSUN = NULL; +PFNGLREQUESTRESIDENTPROGRAMSNVPROC glad_glRequestResidentProgramsNV = NULL; +PFNGLRESETHISTOGRAMEXTPROC glad_glResetHistogramEXT = NULL; +PFNGLRESETMEMORYOBJECTPARAMETERNVPROC glad_glResetMemoryObjectParameterNV = NULL; +PFNGLRESETMINMAXEXTPROC glad_glResetMinmaxEXT = NULL; +PFNGLRESIZEBUFFERSMESAPROC glad_glResizeBuffersMESA = NULL; +PFNGLRESOLVEDEPTHVALUESNVPROC glad_glResolveDepthValuesNV = NULL; +PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback = NULL; +PFNGLRESUMETRANSFORMFEEDBACKNVPROC glad_glResumeTransformFeedbackNV = NULL; +PFNGLROTATEXOESPROC glad_glRotatexOES = NULL; +PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; +PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB = NULL; +PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI = NULL; +PFNGLSAMPLEMASKEXTPROC glad_glSampleMaskEXT = NULL; +PFNGLSAMPLEMASKINDEXEDNVPROC glad_glSampleMaskIndexedNV = NULL; +PFNGLSAMPLEMASKSGISPROC glad_glSampleMaskSGIS = NULL; +PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; +PFNGLSAMPLEPATTERNEXTPROC glad_glSamplePatternEXT = NULL; +PFNGLSAMPLEPATTERNSGISPROC glad_glSamplePatternSGIS = NULL; +PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; +PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; +PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; +PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; +PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; +PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; +PFNGLSCALEXOESPROC glad_glScalexOES = NULL; +PFNGLSCISSORPROC glad_glScissor = NULL; +PFNGLSCISSORARRAYVPROC glad_glScissorArrayv = NULL; +PFNGLSCISSOREXCLUSIVEARRAYVNVPROC glad_glScissorExclusiveArrayvNV = NULL; +PFNGLSCISSOREXCLUSIVENVPROC glad_glScissorExclusiveNV = NULL; +PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed = NULL; +PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv = NULL; +PFNGLSECONDARYCOLOR3BEXTPROC glad_glSecondaryColor3bEXT = NULL; +PFNGLSECONDARYCOLOR3BVEXTPROC glad_glSecondaryColor3bvEXT = NULL; +PFNGLSECONDARYCOLOR3DEXTPROC glad_glSecondaryColor3dEXT = NULL; +PFNGLSECONDARYCOLOR3DVEXTPROC glad_glSecondaryColor3dvEXT = NULL; +PFNGLSECONDARYCOLOR3FEXTPROC glad_glSecondaryColor3fEXT = NULL; +PFNGLSECONDARYCOLOR3FVEXTPROC glad_glSecondaryColor3fvEXT = NULL; +PFNGLSECONDARYCOLOR3HNVPROC glad_glSecondaryColor3hNV = NULL; +PFNGLSECONDARYCOLOR3HVNVPROC glad_glSecondaryColor3hvNV = NULL; +PFNGLSECONDARYCOLOR3IEXTPROC glad_glSecondaryColor3iEXT = NULL; +PFNGLSECONDARYCOLOR3IVEXTPROC glad_glSecondaryColor3ivEXT = NULL; +PFNGLSECONDARYCOLOR3SEXTPROC glad_glSecondaryColor3sEXT = NULL; +PFNGLSECONDARYCOLOR3SVEXTPROC glad_glSecondaryColor3svEXT = NULL; +PFNGLSECONDARYCOLOR3UBEXTPROC glad_glSecondaryColor3ubEXT = NULL; +PFNGLSECONDARYCOLOR3UBVEXTPROC glad_glSecondaryColor3ubvEXT = NULL; +PFNGLSECONDARYCOLOR3UIEXTPROC glad_glSecondaryColor3uiEXT = NULL; +PFNGLSECONDARYCOLOR3UIVEXTPROC glad_glSecondaryColor3uivEXT = NULL; +PFNGLSECONDARYCOLOR3USEXTPROC glad_glSecondaryColor3usEXT = NULL; +PFNGLSECONDARYCOLOR3USVEXTPROC glad_glSecondaryColor3usvEXT = NULL; +PFNGLSECONDARYCOLORFORMATNVPROC glad_glSecondaryColorFormatNV = NULL; +PFNGLSECONDARYCOLORPOINTEREXTPROC glad_glSecondaryColorPointerEXT = NULL; +PFNGLSECONDARYCOLORPOINTERLISTIBMPROC glad_glSecondaryColorPointerListIBM = NULL; +PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glad_glSelectPerfMonitorCountersAMD = NULL; +PFNGLSEMAPHOREPARAMETERIVNVPROC glad_glSemaphoreParameterivNV = NULL; +PFNGLSEMAPHOREPARAMETERUI64VEXTPROC glad_glSemaphoreParameterui64vEXT = NULL; +PFNGLSEPARABLEFILTER2DEXTPROC glad_glSeparableFilter2DEXT = NULL; +PFNGLSETFENCEAPPLEPROC glad_glSetFenceAPPLE = NULL; +PFNGLSETFENCENVPROC glad_glSetFenceNV = NULL; +PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI = NULL; +PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT = NULL; +PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT = NULL; +PFNGLSETMULTISAMPLEFVAMDPROC glad_glSetMultisamplefvAMD = NULL; +PFNGLSHADERBINARYPROC glad_glShaderBinary = NULL; +PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT = NULL; +PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT = NULL; +PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT = NULL; +PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; +PFNGLSHADERSOURCEARBPROC glad_glShaderSourceARB = NULL; +PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding = NULL; +PFNGLSHADINGRATEIMAGEBARRIERNVPROC glad_glShadingRateImageBarrierNV = NULL; +PFNGLSHADINGRATEIMAGEPALETTENVPROC glad_glShadingRateImagePaletteNV = NULL; +PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC glad_glShadingRateSampleOrderCustomNV = NULL; +PFNGLSHADINGRATESAMPLEORDERNVPROC glad_glShadingRateSampleOrderNV = NULL; +PFNGLSHARPENTEXFUNCSGISPROC glad_glSharpenTexFuncSGIS = NULL; +PFNGLSIGNALSEMAPHOREEXTPROC glad_glSignalSemaphoreEXT = NULL; +PFNGLSIGNALSEMAPHOREUI64NVXPROC glad_glSignalSemaphoreui64NVX = NULL; +PFNGLSIGNALVKFENCENVPROC glad_glSignalVkFenceNV = NULL; +PFNGLSIGNALVKSEMAPHORENVPROC glad_glSignalVkSemaphoreNV = NULL; +PFNGLSPECIALIZESHADERARBPROC glad_glSpecializeShaderARB = NULL; +PFNGLSPRITEPARAMETERFSGIXPROC glad_glSpriteParameterfSGIX = NULL; +PFNGLSPRITEPARAMETERFVSGIXPROC glad_glSpriteParameterfvSGIX = NULL; +PFNGLSPRITEPARAMETERISGIXPROC glad_glSpriteParameteriSGIX = NULL; +PFNGLSPRITEPARAMETERIVSGIXPROC glad_glSpriteParameterivSGIX = NULL; +PFNGLSTARTINSTRUMENTSSGIXPROC glad_glStartInstrumentsSGIX = NULL; +PFNGLSTATECAPTURENVPROC glad_glStateCaptureNV = NULL; +PFNGLSTENCILCLEARTAGEXTPROC glad_glStencilClearTagEXT = NULL; +PFNGLSTENCILFILLPATHINSTANCEDNVPROC glad_glStencilFillPathInstancedNV = NULL; +PFNGLSTENCILFILLPATHNVPROC glad_glStencilFillPathNV = NULL; +PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; +PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; +PFNGLSTENCILFUNCSEPARATEATIPROC glad_glStencilFuncSeparateATI = NULL; +PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; +PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; +PFNGLSTENCILOPPROC glad_glStencilOp = NULL; +PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; +PFNGLSTENCILOPSEPARATEATIPROC glad_glStencilOpSeparateATI = NULL; +PFNGLSTENCILOPVALUEAMDPROC glad_glStencilOpValueAMD = NULL; +PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glad_glStencilStrokePathInstancedNV = NULL; +PFNGLSTENCILSTROKEPATHNVPROC glad_glStencilStrokePathNV = NULL; +PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC glad_glStencilThenCoverFillPathInstancedNV = NULL; +PFNGLSTENCILTHENCOVERFILLPATHNVPROC glad_glStencilThenCoverFillPathNV = NULL; +PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC glad_glStencilThenCoverStrokePathInstancedNV = NULL; +PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC glad_glStencilThenCoverStrokePathNV = NULL; +PFNGLSTOPINSTRUMENTSSGIXPROC glad_glStopInstrumentsSGIX = NULL; +PFNGLSTRINGMARKERGREMEDYPROC glad_glStringMarkerGREMEDY = NULL; +PFNGLSUBPIXELPRECISIONBIASNVPROC glad_glSubpixelPrecisionBiasNV = NULL; +PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT = NULL; +PFNGLSYNCTEXTUREINTELPROC glad_glSyncTextureINTEL = NULL; +PFNGLTAGSAMPLEBUFFERSGIXPROC glad_glTagSampleBufferSGIX = NULL; +PFNGLTANGENT3BEXTPROC glad_glTangent3bEXT = NULL; +PFNGLTANGENT3BVEXTPROC glad_glTangent3bvEXT = NULL; +PFNGLTANGENT3DEXTPROC glad_glTangent3dEXT = NULL; +PFNGLTANGENT3DVEXTPROC glad_glTangent3dvEXT = NULL; +PFNGLTANGENT3FEXTPROC glad_glTangent3fEXT = NULL; +PFNGLTANGENT3FVEXTPROC glad_glTangent3fvEXT = NULL; +PFNGLTANGENT3IEXTPROC glad_glTangent3iEXT = NULL; +PFNGLTANGENT3IVEXTPROC glad_glTangent3ivEXT = NULL; +PFNGLTANGENT3SEXTPROC glad_glTangent3sEXT = NULL; +PFNGLTANGENT3SVEXTPROC glad_glTangent3svEXT = NULL; +PFNGLTANGENTPOINTEREXTPROC glad_glTangentPointerEXT = NULL; +PFNGLTBUFFERMASK3DFXPROC glad_glTbufferMask3DFX = NULL; +PFNGLTESSELLATIONFACTORAMDPROC glad_glTessellationFactorAMD = NULL; +PFNGLTESSELLATIONMODEAMDPROC glad_glTessellationModeAMD = NULL; +PFNGLTESTFENCEAPPLEPROC glad_glTestFenceAPPLE = NULL; +PFNGLTESTFENCENVPROC glad_glTestFenceNV = NULL; +PFNGLTESTOBJECTAPPLEPROC glad_glTestObjectAPPLE = NULL; +PFNGLTEXATTACHMEMORYNVPROC glad_glTexAttachMemoryNV = NULL; +PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; +PFNGLTEXBUFFERARBPROC glad_glTexBufferARB = NULL; +PFNGLTEXBUFFEREXTPROC glad_glTexBufferEXT = NULL; +PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange = NULL; +PFNGLTEXBUMPPARAMETERFVATIPROC glad_glTexBumpParameterfvATI = NULL; +PFNGLTEXBUMPPARAMETERIVATIPROC glad_glTexBumpParameterivATI = NULL; +PFNGLTEXCOORD1BOESPROC glad_glTexCoord1bOES = NULL; +PFNGLTEXCOORD1BVOESPROC glad_glTexCoord1bvOES = NULL; +PFNGLTEXCOORD1HNVPROC glad_glTexCoord1hNV = NULL; +PFNGLTEXCOORD1HVNVPROC glad_glTexCoord1hvNV = NULL; +PFNGLTEXCOORD1XOESPROC glad_glTexCoord1xOES = NULL; +PFNGLTEXCOORD1XVOESPROC glad_glTexCoord1xvOES = NULL; +PFNGLTEXCOORD2BOESPROC glad_glTexCoord2bOES = NULL; +PFNGLTEXCOORD2BVOESPROC glad_glTexCoord2bvOES = NULL; +PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC glad_glTexCoord2fColor3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC glad_glTexCoord2fColor3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC glad_glTexCoord2fColor4ubVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC glad_glTexCoord2fColor4ubVertex3fvSUN = NULL; +PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fNormal3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fNormal3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FVERTEX3FSUNPROC glad_glTexCoord2fVertex3fSUN = NULL; +PFNGLTEXCOORD2FVERTEX3FVSUNPROC glad_glTexCoord2fVertex3fvSUN = NULL; +PFNGLTEXCOORD2HNVPROC glad_glTexCoord2hNV = NULL; +PFNGLTEXCOORD2HVNVPROC glad_glTexCoord2hvNV = NULL; +PFNGLTEXCOORD2XOESPROC glad_glTexCoord2xOES = NULL; +PFNGLTEXCOORD2XVOESPROC glad_glTexCoord2xvOES = NULL; +PFNGLTEXCOORD3BOESPROC glad_glTexCoord3bOES = NULL; +PFNGLTEXCOORD3BVOESPROC glad_glTexCoord3bvOES = NULL; +PFNGLTEXCOORD3HNVPROC glad_glTexCoord3hNV = NULL; +PFNGLTEXCOORD3HVNVPROC glad_glTexCoord3hvNV = NULL; +PFNGLTEXCOORD3XOESPROC glad_glTexCoord3xOES = NULL; +PFNGLTEXCOORD3XVOESPROC glad_glTexCoord3xvOES = NULL; +PFNGLTEXCOORD4BOESPROC glad_glTexCoord4bOES = NULL; +PFNGLTEXCOORD4BVOESPROC glad_glTexCoord4bvOES = NULL; +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fSUN = NULL; +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fvSUN = NULL; +PFNGLTEXCOORD4FVERTEX4FSUNPROC glad_glTexCoord4fVertex4fSUN = NULL; +PFNGLTEXCOORD4FVERTEX4FVSUNPROC glad_glTexCoord4fVertex4fvSUN = NULL; +PFNGLTEXCOORD4HNVPROC glad_glTexCoord4hNV = NULL; +PFNGLTEXCOORD4HVNVPROC glad_glTexCoord4hvNV = NULL; +PFNGLTEXCOORD4XOESPROC glad_glTexCoord4xOES = NULL; +PFNGLTEXCOORD4XVOESPROC glad_glTexCoord4xvOES = NULL; +PFNGLTEXCOORDFORMATNVPROC glad_glTexCoordFormatNV = NULL; +PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT = NULL; +PFNGLTEXCOORDPOINTERLISTIBMPROC glad_glTexCoordPointerListIBM = NULL; +PFNGLTEXCOORDPOINTERVINTELPROC glad_glTexCoordPointervINTEL = NULL; +PFNGLTEXENVXOESPROC glad_glTexEnvxOES = NULL; +PFNGLTEXENVXVOESPROC glad_glTexEnvxvOES = NULL; +PFNGLTEXFILTERFUNCSGISPROC glad_glTexFilterFuncSGIS = NULL; +PFNGLTEXGENXOESPROC glad_glTexGenxOES = NULL; +PFNGLTEXGENXVOESPROC glad_glTexGenxvOES = NULL; +PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; +PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; +PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; +PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTexImage2DMultisampleCoverageNV = NULL; +PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; +PFNGLTEXIMAGE3DEXTPROC glad_glTexImage3DEXT = NULL; +PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; +PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTexImage3DMultisampleCoverageNV = NULL; +PFNGLTEXIMAGE4DSGISPROC glad_glTexImage4DSGIS = NULL; +PFNGLTEXPAGECOMMITMENTARBPROC glad_glTexPageCommitmentARB = NULL; +PFNGLTEXPAGECOMMITMENTMEMNVPROC glad_glTexPageCommitmentMemNV = NULL; +PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; +PFNGLTEXPARAMETERIIVEXTPROC glad_glTexParameterIivEXT = NULL; +PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; +PFNGLTEXPARAMETERIUIVEXTPROC glad_glTexParameterIuivEXT = NULL; +PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; +PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; +PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; +PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; +PFNGLTEXPARAMETERXOESPROC glad_glTexParameterxOES = NULL; +PFNGLTEXPARAMETERXVOESPROC glad_glTexParameterxvOES = NULL; +PFNGLTEXRENDERBUFFERNVPROC glad_glTexRenderbufferNV = NULL; +PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D = NULL; +PFNGLTEXSTORAGE1DEXTPROC glad_glTexStorage1DEXT = NULL; +PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D = NULL; +PFNGLTEXSTORAGE2DEXTPROC glad_glTexStorage2DEXT = NULL; +PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample = NULL; +PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D = NULL; +PFNGLTEXSTORAGE3DEXTPROC glad_glTexStorage3DEXT = NULL; +PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample = NULL; +PFNGLTEXSTORAGEMEM1DEXTPROC glad_glTexStorageMem1DEXT = NULL; +PFNGLTEXSTORAGEMEM2DEXTPROC glad_glTexStorageMem2DEXT = NULL; +PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTexStorageMem2DMultisampleEXT = NULL; +PFNGLTEXSTORAGEMEM3DEXTPROC glad_glTexStorageMem3DEXT = NULL; +PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTexStorageMem3DMultisampleEXT = NULL; +PFNGLTEXSTORAGESPARSEAMDPROC glad_glTexStorageSparseAMD = NULL; +PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; +PFNGLTEXSUBIMAGE1DEXTPROC glad_glTexSubImage1DEXT = NULL; +PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; +PFNGLTEXSUBIMAGE2DEXTPROC glad_glTexSubImage2DEXT = NULL; +PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; +PFNGLTEXSUBIMAGE3DEXTPROC glad_glTexSubImage3DEXT = NULL; +PFNGLTEXSUBIMAGE4DSGISPROC glad_glTexSubImage4DSGIS = NULL; +PFNGLTEXTUREATTACHMEMORYNVPROC glad_glTextureAttachMemoryNV = NULL; +PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier = NULL; +PFNGLTEXTUREBARRIERNVPROC glad_glTextureBarrierNV = NULL; +PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer = NULL; +PFNGLTEXTUREBUFFEREXTPROC glad_glTextureBufferEXT = NULL; +PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange = NULL; +PFNGLTEXTUREBUFFERRANGEEXTPROC glad_glTextureBufferRangeEXT = NULL; +PFNGLTEXTURECOLORMASKSGISPROC glad_glTextureColorMaskSGIS = NULL; +PFNGLTEXTUREIMAGE1DEXTPROC glad_glTextureImage1DEXT = NULL; +PFNGLTEXTUREIMAGE2DEXTPROC glad_glTextureImage2DEXT = NULL; +PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTextureImage2DMultisampleCoverageNV = NULL; +PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC glad_glTextureImage2DMultisampleNV = NULL; +PFNGLTEXTUREIMAGE3DEXTPROC glad_glTextureImage3DEXT = NULL; +PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTextureImage3DMultisampleCoverageNV = NULL; +PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC glad_glTextureImage3DMultisampleNV = NULL; +PFNGLTEXTURELIGHTEXTPROC glad_glTextureLightEXT = NULL; +PFNGLTEXTUREMATERIALEXTPROC glad_glTextureMaterialEXT = NULL; +PFNGLTEXTURENORMALEXTPROC glad_glTextureNormalEXT = NULL; +PFNGLTEXTUREPAGECOMMITMENTEXTPROC glad_glTexturePageCommitmentEXT = NULL; +PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC glad_glTexturePageCommitmentMemNV = NULL; +PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv = NULL; +PFNGLTEXTUREPARAMETERIIVEXTPROC glad_glTextureParameterIivEXT = NULL; +PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv = NULL; +PFNGLTEXTUREPARAMETERIUIVEXTPROC glad_glTextureParameterIuivEXT = NULL; +PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf = NULL; +PFNGLTEXTUREPARAMETERFEXTPROC glad_glTextureParameterfEXT = NULL; +PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv = NULL; +PFNGLTEXTUREPARAMETERFVEXTPROC glad_glTextureParameterfvEXT = NULL; +PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri = NULL; +PFNGLTEXTUREPARAMETERIEXTPROC glad_glTextureParameteriEXT = NULL; +PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv = NULL; +PFNGLTEXTUREPARAMETERIVEXTPROC glad_glTextureParameterivEXT = NULL; +PFNGLTEXTURERANGEAPPLEPROC glad_glTextureRangeAPPLE = NULL; +PFNGLTEXTURERENDERBUFFEREXTPROC glad_glTextureRenderbufferEXT = NULL; +PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D = NULL; +PFNGLTEXTURESTORAGE1DEXTPROC glad_glTextureStorage1DEXT = NULL; +PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D = NULL; +PFNGLTEXTURESTORAGE2DEXTPROC glad_glTextureStorage2DEXT = NULL; +PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample = NULL; +PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glad_glTextureStorage2DMultisampleEXT = NULL; +PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D = NULL; +PFNGLTEXTURESTORAGE3DEXTPROC glad_glTextureStorage3DEXT = NULL; +PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample = NULL; +PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glad_glTextureStorage3DMultisampleEXT = NULL; +PFNGLTEXTURESTORAGEMEM1DEXTPROC glad_glTextureStorageMem1DEXT = NULL; +PFNGLTEXTURESTORAGEMEM2DEXTPROC glad_glTextureStorageMem2DEXT = NULL; +PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTextureStorageMem2DMultisampleEXT = NULL; +PFNGLTEXTURESTORAGEMEM3DEXTPROC glad_glTextureStorageMem3DEXT = NULL; +PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTextureStorageMem3DMultisampleEXT = NULL; +PFNGLTEXTURESTORAGESPARSEAMDPROC glad_glTextureStorageSparseAMD = NULL; +PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D = NULL; +PFNGLTEXTURESUBIMAGE1DEXTPROC glad_glTextureSubImage1DEXT = NULL; +PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D = NULL; +PFNGLTEXTURESUBIMAGE2DEXTPROC glad_glTextureSubImage2DEXT = NULL; +PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D = NULL; +PFNGLTEXTURESUBIMAGE3DEXTPROC glad_glTextureSubImage3DEXT = NULL; +PFNGLTEXTUREVIEWPROC glad_glTextureView = NULL; +PFNGLTRACKMATRIXNVPROC glad_glTrackMatrixNV = NULL; +PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC glad_glTransformFeedbackAttribsNV = NULL; +PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase = NULL; +PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange = NULL; +PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC glad_glTransformFeedbackStreamAttribsNV = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC glad_glTransformFeedbackVaryingsEXT = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC glad_glTransformFeedbackVaryingsNV = NULL; +PFNGLTRANSFORMPATHNVPROC glad_glTransformPathNV = NULL; +PFNGLTRANSLATEXOESPROC glad_glTranslatexOES = NULL; +PFNGLUNIFORM1DPROC glad_glUniform1d = NULL; +PFNGLUNIFORM1DVPROC glad_glUniform1dv = NULL; +PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; +PFNGLUNIFORM1FARBPROC glad_glUniform1fARB = NULL; +PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; +PFNGLUNIFORM1FVARBPROC glad_glUniform1fvARB = NULL; +PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; +PFNGLUNIFORM1I64ARBPROC glad_glUniform1i64ARB = NULL; +PFNGLUNIFORM1I64NVPROC glad_glUniform1i64NV = NULL; +PFNGLUNIFORM1I64VARBPROC glad_glUniform1i64vARB = NULL; +PFNGLUNIFORM1I64VNVPROC glad_glUniform1i64vNV = NULL; +PFNGLUNIFORM1IARBPROC glad_glUniform1iARB = NULL; +PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; +PFNGLUNIFORM1IVARBPROC glad_glUniform1ivARB = NULL; +PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; +PFNGLUNIFORM1UI64ARBPROC glad_glUniform1ui64ARB = NULL; +PFNGLUNIFORM1UI64NVPROC glad_glUniform1ui64NV = NULL; +PFNGLUNIFORM1UI64VARBPROC glad_glUniform1ui64vARB = NULL; +PFNGLUNIFORM1UI64VNVPROC glad_glUniform1ui64vNV = NULL; +PFNGLUNIFORM1UIEXTPROC glad_glUniform1uiEXT = NULL; +PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; +PFNGLUNIFORM1UIVEXTPROC glad_glUniform1uivEXT = NULL; +PFNGLUNIFORM2DPROC glad_glUniform2d = NULL; +PFNGLUNIFORM2DVPROC glad_glUniform2dv = NULL; +PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; +PFNGLUNIFORM2FARBPROC glad_glUniform2fARB = NULL; +PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; +PFNGLUNIFORM2FVARBPROC glad_glUniform2fvARB = NULL; +PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; +PFNGLUNIFORM2I64ARBPROC glad_glUniform2i64ARB = NULL; +PFNGLUNIFORM2I64NVPROC glad_glUniform2i64NV = NULL; +PFNGLUNIFORM2I64VARBPROC glad_glUniform2i64vARB = NULL; +PFNGLUNIFORM2I64VNVPROC glad_glUniform2i64vNV = NULL; +PFNGLUNIFORM2IARBPROC glad_glUniform2iARB = NULL; +PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; +PFNGLUNIFORM2IVARBPROC glad_glUniform2ivARB = NULL; +PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; +PFNGLUNIFORM2UI64ARBPROC glad_glUniform2ui64ARB = NULL; +PFNGLUNIFORM2UI64NVPROC glad_glUniform2ui64NV = NULL; +PFNGLUNIFORM2UI64VARBPROC glad_glUniform2ui64vARB = NULL; +PFNGLUNIFORM2UI64VNVPROC glad_glUniform2ui64vNV = NULL; +PFNGLUNIFORM2UIEXTPROC glad_glUniform2uiEXT = NULL; +PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; +PFNGLUNIFORM2UIVEXTPROC glad_glUniform2uivEXT = NULL; +PFNGLUNIFORM3DPROC glad_glUniform3d = NULL; +PFNGLUNIFORM3DVPROC glad_glUniform3dv = NULL; +PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; +PFNGLUNIFORM3FARBPROC glad_glUniform3fARB = NULL; +PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; +PFNGLUNIFORM3FVARBPROC glad_glUniform3fvARB = NULL; +PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; +PFNGLUNIFORM3I64ARBPROC glad_glUniform3i64ARB = NULL; +PFNGLUNIFORM3I64NVPROC glad_glUniform3i64NV = NULL; +PFNGLUNIFORM3I64VARBPROC glad_glUniform3i64vARB = NULL; +PFNGLUNIFORM3I64VNVPROC glad_glUniform3i64vNV = NULL; +PFNGLUNIFORM3IARBPROC glad_glUniform3iARB = NULL; +PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; +PFNGLUNIFORM3IVARBPROC glad_glUniform3ivARB = NULL; +PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; +PFNGLUNIFORM3UI64ARBPROC glad_glUniform3ui64ARB = NULL; +PFNGLUNIFORM3UI64NVPROC glad_glUniform3ui64NV = NULL; +PFNGLUNIFORM3UI64VARBPROC glad_glUniform3ui64vARB = NULL; +PFNGLUNIFORM3UI64VNVPROC glad_glUniform3ui64vNV = NULL; +PFNGLUNIFORM3UIEXTPROC glad_glUniform3uiEXT = NULL; +PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; +PFNGLUNIFORM3UIVEXTPROC glad_glUniform3uivEXT = NULL; +PFNGLUNIFORM4DPROC glad_glUniform4d = NULL; +PFNGLUNIFORM4DVPROC glad_glUniform4dv = NULL; +PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; +PFNGLUNIFORM4FARBPROC glad_glUniform4fARB = NULL; +PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; +PFNGLUNIFORM4FVARBPROC glad_glUniform4fvARB = NULL; +PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; +PFNGLUNIFORM4I64ARBPROC glad_glUniform4i64ARB = NULL; +PFNGLUNIFORM4I64NVPROC glad_glUniform4i64NV = NULL; +PFNGLUNIFORM4I64VARBPROC glad_glUniform4i64vARB = NULL; +PFNGLUNIFORM4I64VNVPROC glad_glUniform4i64vNV = NULL; +PFNGLUNIFORM4IARBPROC glad_glUniform4iARB = NULL; +PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; +PFNGLUNIFORM4IVARBPROC glad_glUniform4ivARB = NULL; +PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; +PFNGLUNIFORM4UI64ARBPROC glad_glUniform4ui64ARB = NULL; +PFNGLUNIFORM4UI64NVPROC glad_glUniform4ui64NV = NULL; +PFNGLUNIFORM4UI64VARBPROC glad_glUniform4ui64vARB = NULL; +PFNGLUNIFORM4UI64VNVPROC glad_glUniform4ui64vNV = NULL; +PFNGLUNIFORM4UIEXTPROC glad_glUniform4uiEXT = NULL; +PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; +PFNGLUNIFORM4UIVEXTPROC glad_glUniform4uivEXT = NULL; +PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; +PFNGLUNIFORMBUFFEREXTPROC glad_glUniformBufferEXT = NULL; +PFNGLUNIFORMHANDLEUI64ARBPROC glad_glUniformHandleui64ARB = NULL; +PFNGLUNIFORMHANDLEUI64NVPROC glad_glUniformHandleui64NV = NULL; +PFNGLUNIFORMHANDLEUI64VARBPROC glad_glUniformHandleui64vARB = NULL; +PFNGLUNIFORMHANDLEUI64VNVPROC glad_glUniformHandleui64vNV = NULL; +PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv = NULL; +PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; +PFNGLUNIFORMMATRIX2FVARBPROC glad_glUniformMatrix2fvARB = NULL; +PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv = NULL; +PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; +PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv = NULL; +PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; +PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv = NULL; +PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; +PFNGLUNIFORMMATRIX3FVARBPROC glad_glUniformMatrix3fvARB = NULL; +PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv = NULL; +PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; +PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv = NULL; +PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; +PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv = NULL; +PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; +PFNGLUNIFORMMATRIX4FVARBPROC glad_glUniformMatrix4fvARB = NULL; +PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv = NULL; +PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; +PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv = NULL; +PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; +PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv = NULL; +PFNGLUNIFORMUI64NVPROC glad_glUniformui64NV = NULL; +PFNGLUNIFORMUI64VNVPROC glad_glUniformui64vNV = NULL; +PFNGLUNLOCKARRAYSEXTPROC glad_glUnlockArraysEXT = NULL; +PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; +PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB = NULL; +PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer = NULL; +PFNGLUNMAPNAMEDBUFFEREXTPROC glad_glUnmapNamedBufferEXT = NULL; +PFNGLUNMAPOBJECTBUFFERATIPROC glad_glUnmapObjectBufferATI = NULL; +PFNGLUNMAPTEXTURE2DINTELPROC glad_glUnmapTexture2DINTEL = NULL; +PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI = NULL; +PFNGLUPLOADGPUMASKNVXPROC glad_glUploadGpuMaskNVX = NULL; +PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; +PFNGLUSEPROGRAMOBJECTARBPROC glad_glUseProgramObjectARB = NULL; +PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages = NULL; +PFNGLUSESHADERPROGRAMEXTPROC glad_glUseShaderProgramEXT = NULL; +PFNGLVDPAUFININVPROC glad_glVDPAUFiniNV = NULL; +PFNGLVDPAUGETSURFACEIVNVPROC glad_glVDPAUGetSurfaceivNV = NULL; +PFNGLVDPAUINITNVPROC glad_glVDPAUInitNV = NULL; +PFNGLVDPAUISSURFACENVPROC glad_glVDPAUIsSurfaceNV = NULL; +PFNGLVDPAUMAPSURFACESNVPROC glad_glVDPAUMapSurfacesNV = NULL; +PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC glad_glVDPAURegisterOutputSurfaceNV = NULL; +PFNGLVDPAUREGISTERVIDEOSURFACENVPROC glad_glVDPAURegisterVideoSurfaceNV = NULL; +PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC glad_glVDPAURegisterVideoSurfaceWithPictureStructureNV = NULL; +PFNGLVDPAUSURFACEACCESSNVPROC glad_glVDPAUSurfaceAccessNV = NULL; +PFNGLVDPAUUNMAPSURFACESNVPROC glad_glVDPAUUnmapSurfacesNV = NULL; +PFNGLVDPAUUNREGISTERSURFACENVPROC glad_glVDPAUUnregisterSurfaceNV = NULL; +PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; +PFNGLVALIDATEPROGRAMARBPROC glad_glValidateProgramARB = NULL; +PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline = NULL; +PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI = NULL; +PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT = NULL; +PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT = NULL; +PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT = NULL; +PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT = NULL; +PFNGLVARIANTIVEXTPROC glad_glVariantivEXT = NULL; +PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT = NULL; +PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT = NULL; +PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT = NULL; +PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT = NULL; +PFNGLVERTEX2BOESPROC glad_glVertex2bOES = NULL; +PFNGLVERTEX2BVOESPROC glad_glVertex2bvOES = NULL; +PFNGLVERTEX2HNVPROC glad_glVertex2hNV = NULL; +PFNGLVERTEX2HVNVPROC glad_glVertex2hvNV = NULL; +PFNGLVERTEX2XOESPROC glad_glVertex2xOES = NULL; +PFNGLVERTEX2XVOESPROC glad_glVertex2xvOES = NULL; +PFNGLVERTEX3BOESPROC glad_glVertex3bOES = NULL; +PFNGLVERTEX3BVOESPROC glad_glVertex3bvOES = NULL; +PFNGLVERTEX3HNVPROC glad_glVertex3hNV = NULL; +PFNGLVERTEX3HVNVPROC glad_glVertex3hvNV = NULL; +PFNGLVERTEX3XOESPROC glad_glVertex3xOES = NULL; +PFNGLVERTEX3XVOESPROC glad_glVertex3xvOES = NULL; +PFNGLVERTEX4BOESPROC glad_glVertex4bOES = NULL; +PFNGLVERTEX4BVOESPROC glad_glVertex4bvOES = NULL; +PFNGLVERTEX4HNVPROC glad_glVertex4hNV = NULL; +PFNGLVERTEX4HVNVPROC glad_glVertex4hvNV = NULL; +PFNGLVERTEX4XOESPROC glad_glVertex4xOES = NULL; +PFNGLVERTEX4XVOESPROC glad_glVertex4xvOES = NULL; +PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding = NULL; +PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat = NULL; +PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat = NULL; +PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat = NULL; +PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glad_glVertexArrayBindVertexBufferEXT = NULL; +PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor = NULL; +PFNGLVERTEXARRAYCOLOROFFSETEXTPROC glad_glVertexArrayColorOffsetEXT = NULL; +PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC glad_glVertexArrayEdgeFlagOffsetEXT = NULL; +PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer = NULL; +PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC glad_glVertexArrayFogCoordOffsetEXT = NULL; +PFNGLVERTEXARRAYINDEXOFFSETEXTPROC glad_glVertexArrayIndexOffsetEXT = NULL; +PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC glad_glVertexArrayMultiTexCoordOffsetEXT = NULL; +PFNGLVERTEXARRAYNORMALOFFSETEXTPROC glad_glVertexArrayNormalOffsetEXT = NULL; +PFNGLVERTEXARRAYPARAMETERIAPPLEPROC glad_glVertexArrayParameteriAPPLE = NULL; +PFNGLVERTEXARRAYRANGEAPPLEPROC glad_glVertexArrayRangeAPPLE = NULL; +PFNGLVERTEXARRAYRANGENVPROC glad_glVertexArrayRangeNV = NULL; +PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC glad_glVertexArraySecondaryColorOffsetEXT = NULL; +PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC glad_glVertexArrayTexCoordOffsetEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glad_glVertexArrayVertexAttribBindingEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glad_glVertexArrayVertexAttribDivisorEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glad_glVertexArrayVertexAttribFormatEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glad_glVertexArrayVertexAttribIFormatEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glad_glVertexArrayVertexAttribIOffsetEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glad_glVertexArrayVertexAttribLFormatEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glad_glVertexArrayVertexAttribLOffsetEXT = NULL; +PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glad_glVertexArrayVertexAttribOffsetEXT = NULL; +PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glad_glVertexArrayVertexBindingDivisorEXT = NULL; +PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer = NULL; +PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers = NULL; +PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glad_glVertexArrayVertexOffsetEXT = NULL; +PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; +PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB = NULL; +PFNGLVERTEXATTRIB1DNVPROC glad_glVertexAttrib1dNV = NULL; +PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; +PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB = NULL; +PFNGLVERTEXATTRIB1DVNVPROC glad_glVertexAttrib1dvNV = NULL; +PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; +PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB = NULL; +PFNGLVERTEXATTRIB1FNVPROC glad_glVertexAttrib1fNV = NULL; +PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; +PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB = NULL; +PFNGLVERTEXATTRIB1FVNVPROC glad_glVertexAttrib1fvNV = NULL; +PFNGLVERTEXATTRIB1HNVPROC glad_glVertexAttrib1hNV = NULL; +PFNGLVERTEXATTRIB1HVNVPROC glad_glVertexAttrib1hvNV = NULL; +PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; +PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB = NULL; +PFNGLVERTEXATTRIB1SNVPROC glad_glVertexAttrib1sNV = NULL; +PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; +PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB = NULL; +PFNGLVERTEXATTRIB1SVNVPROC glad_glVertexAttrib1svNV = NULL; +PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; +PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB = NULL; +PFNGLVERTEXATTRIB2DNVPROC glad_glVertexAttrib2dNV = NULL; +PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; +PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB = NULL; +PFNGLVERTEXATTRIB2DVNVPROC glad_glVertexAttrib2dvNV = NULL; +PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; +PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB = NULL; +PFNGLVERTEXATTRIB2FNVPROC glad_glVertexAttrib2fNV = NULL; +PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; +PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB = NULL; +PFNGLVERTEXATTRIB2FVNVPROC glad_glVertexAttrib2fvNV = NULL; +PFNGLVERTEXATTRIB2HNVPROC glad_glVertexAttrib2hNV = NULL; +PFNGLVERTEXATTRIB2HVNVPROC glad_glVertexAttrib2hvNV = NULL; +PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; +PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB = NULL; +PFNGLVERTEXATTRIB2SNVPROC glad_glVertexAttrib2sNV = NULL; +PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; +PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB = NULL; +PFNGLVERTEXATTRIB2SVNVPROC glad_glVertexAttrib2svNV = NULL; +PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; +PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB = NULL; +PFNGLVERTEXATTRIB3DNVPROC glad_glVertexAttrib3dNV = NULL; +PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; +PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB = NULL; +PFNGLVERTEXATTRIB3DVNVPROC glad_glVertexAttrib3dvNV = NULL; +PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; +PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB = NULL; +PFNGLVERTEXATTRIB3FNVPROC glad_glVertexAttrib3fNV = NULL; +PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; +PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB = NULL; +PFNGLVERTEXATTRIB3FVNVPROC glad_glVertexAttrib3fvNV = NULL; +PFNGLVERTEXATTRIB3HNVPROC glad_glVertexAttrib3hNV = NULL; +PFNGLVERTEXATTRIB3HVNVPROC glad_glVertexAttrib3hvNV = NULL; +PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; +PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB = NULL; +PFNGLVERTEXATTRIB3SNVPROC glad_glVertexAttrib3sNV = NULL; +PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; +PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB = NULL; +PFNGLVERTEXATTRIB3SVNVPROC glad_glVertexAttrib3svNV = NULL; +PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; +PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB = NULL; +PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; +PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB = NULL; +PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; +PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB = NULL; +PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; +PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB = NULL; +PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; +PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB = NULL; +PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; +PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB = NULL; +PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; +PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB = NULL; +PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; +PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB = NULL; +PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; +PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB = NULL; +PFNGLVERTEXATTRIB4DNVPROC glad_glVertexAttrib4dNV = NULL; +PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; +PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB = NULL; +PFNGLVERTEXATTRIB4DVNVPROC glad_glVertexAttrib4dvNV = NULL; +PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; +PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB = NULL; +PFNGLVERTEXATTRIB4FNVPROC glad_glVertexAttrib4fNV = NULL; +PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; +PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB = NULL; +PFNGLVERTEXATTRIB4FVNVPROC glad_glVertexAttrib4fvNV = NULL; +PFNGLVERTEXATTRIB4HNVPROC glad_glVertexAttrib4hNV = NULL; +PFNGLVERTEXATTRIB4HVNVPROC glad_glVertexAttrib4hvNV = NULL; +PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; +PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB = NULL; +PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; +PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB = NULL; +PFNGLVERTEXATTRIB4SNVPROC glad_glVertexAttrib4sNV = NULL; +PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; +PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB = NULL; +PFNGLVERTEXATTRIB4SVNVPROC glad_glVertexAttrib4svNV = NULL; +PFNGLVERTEXATTRIB4UBNVPROC glad_glVertexAttrib4ubNV = NULL; +PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; +PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB = NULL; +PFNGLVERTEXATTRIB4UBVNVPROC glad_glVertexAttrib4ubvNV = NULL; +PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; +PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB = NULL; +PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB = NULL; +PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glad_glVertexAttribArrayObjectATI = NULL; +PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding = NULL; +PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; +PFNGLVERTEXATTRIBDIVISORARBPROC glad_glVertexAttribDivisorARB = NULL; +PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat = NULL; +PFNGLVERTEXATTRIBFORMATNVPROC glad_glVertexAttribFormatNV = NULL; +PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; +PFNGLVERTEXATTRIBI1IEXTPROC glad_glVertexAttribI1iEXT = NULL; +PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; +PFNGLVERTEXATTRIBI1IVEXTPROC glad_glVertexAttribI1ivEXT = NULL; +PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; +PFNGLVERTEXATTRIBI1UIEXTPROC glad_glVertexAttribI1uiEXT = NULL; +PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; +PFNGLVERTEXATTRIBI1UIVEXTPROC glad_glVertexAttribI1uivEXT = NULL; +PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; +PFNGLVERTEXATTRIBI2IEXTPROC glad_glVertexAttribI2iEXT = NULL; +PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; +PFNGLVERTEXATTRIBI2IVEXTPROC glad_glVertexAttribI2ivEXT = NULL; +PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; +PFNGLVERTEXATTRIBI2UIEXTPROC glad_glVertexAttribI2uiEXT = NULL; +PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; +PFNGLVERTEXATTRIBI2UIVEXTPROC glad_glVertexAttribI2uivEXT = NULL; +PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; +PFNGLVERTEXATTRIBI3IEXTPROC glad_glVertexAttribI3iEXT = NULL; +PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; +PFNGLVERTEXATTRIBI3IVEXTPROC glad_glVertexAttribI3ivEXT = NULL; +PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; +PFNGLVERTEXATTRIBI3UIEXTPROC glad_glVertexAttribI3uiEXT = NULL; +PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; +PFNGLVERTEXATTRIBI3UIVEXTPROC glad_glVertexAttribI3uivEXT = NULL; +PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; +PFNGLVERTEXATTRIBI4BVEXTPROC glad_glVertexAttribI4bvEXT = NULL; +PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; +PFNGLVERTEXATTRIBI4IEXTPROC glad_glVertexAttribI4iEXT = NULL; +PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; +PFNGLVERTEXATTRIBI4IVEXTPROC glad_glVertexAttribI4ivEXT = NULL; +PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; +PFNGLVERTEXATTRIBI4SVEXTPROC glad_glVertexAttribI4svEXT = NULL; +PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; +PFNGLVERTEXATTRIBI4UBVEXTPROC glad_glVertexAttribI4ubvEXT = NULL; +PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; +PFNGLVERTEXATTRIBI4UIEXTPROC glad_glVertexAttribI4uiEXT = NULL; +PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; +PFNGLVERTEXATTRIBI4UIVEXTPROC glad_glVertexAttribI4uivEXT = NULL; +PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; +PFNGLVERTEXATTRIBI4USVEXTPROC glad_glVertexAttribI4usvEXT = NULL; +PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat = NULL; +PFNGLVERTEXATTRIBIFORMATNVPROC glad_glVertexAttribIFormatNV = NULL; +PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; +PFNGLVERTEXATTRIBIPOINTEREXTPROC glad_glVertexAttribIPointerEXT = NULL; +PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d = NULL; +PFNGLVERTEXATTRIBL1DEXTPROC glad_glVertexAttribL1dEXT = NULL; +PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv = NULL; +PFNGLVERTEXATTRIBL1DVEXTPROC glad_glVertexAttribL1dvEXT = NULL; +PFNGLVERTEXATTRIBL1I64NVPROC glad_glVertexAttribL1i64NV = NULL; +PFNGLVERTEXATTRIBL1I64VNVPROC glad_glVertexAttribL1i64vNV = NULL; +PFNGLVERTEXATTRIBL1UI64ARBPROC glad_glVertexAttribL1ui64ARB = NULL; +PFNGLVERTEXATTRIBL1UI64NVPROC glad_glVertexAttribL1ui64NV = NULL; +PFNGLVERTEXATTRIBL1UI64VARBPROC glad_glVertexAttribL1ui64vARB = NULL; +PFNGLVERTEXATTRIBL1UI64VNVPROC glad_glVertexAttribL1ui64vNV = NULL; +PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d = NULL; +PFNGLVERTEXATTRIBL2DEXTPROC glad_glVertexAttribL2dEXT = NULL; +PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv = NULL; +PFNGLVERTEXATTRIBL2DVEXTPROC glad_glVertexAttribL2dvEXT = NULL; +PFNGLVERTEXATTRIBL2I64NVPROC glad_glVertexAttribL2i64NV = NULL; +PFNGLVERTEXATTRIBL2I64VNVPROC glad_glVertexAttribL2i64vNV = NULL; +PFNGLVERTEXATTRIBL2UI64NVPROC glad_glVertexAttribL2ui64NV = NULL; +PFNGLVERTEXATTRIBL2UI64VNVPROC glad_glVertexAttribL2ui64vNV = NULL; +PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d = NULL; +PFNGLVERTEXATTRIBL3DEXTPROC glad_glVertexAttribL3dEXT = NULL; +PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv = NULL; +PFNGLVERTEXATTRIBL3DVEXTPROC glad_glVertexAttribL3dvEXT = NULL; +PFNGLVERTEXATTRIBL3I64NVPROC glad_glVertexAttribL3i64NV = NULL; +PFNGLVERTEXATTRIBL3I64VNVPROC glad_glVertexAttribL3i64vNV = NULL; +PFNGLVERTEXATTRIBL3UI64NVPROC glad_glVertexAttribL3ui64NV = NULL; +PFNGLVERTEXATTRIBL3UI64VNVPROC glad_glVertexAttribL3ui64vNV = NULL; +PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d = NULL; +PFNGLVERTEXATTRIBL4DEXTPROC glad_glVertexAttribL4dEXT = NULL; +PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv = NULL; +PFNGLVERTEXATTRIBL4DVEXTPROC glad_glVertexAttribL4dvEXT = NULL; +PFNGLVERTEXATTRIBL4I64NVPROC glad_glVertexAttribL4i64NV = NULL; +PFNGLVERTEXATTRIBL4I64VNVPROC glad_glVertexAttribL4i64vNV = NULL; +PFNGLVERTEXATTRIBL4UI64NVPROC glad_glVertexAttribL4ui64NV = NULL; +PFNGLVERTEXATTRIBL4UI64VNVPROC glad_glVertexAttribL4ui64vNV = NULL; +PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat = NULL; +PFNGLVERTEXATTRIBLFORMATNVPROC glad_glVertexAttribLFormatNV = NULL; +PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer = NULL; +PFNGLVERTEXATTRIBLPOINTEREXTPROC glad_glVertexAttribLPointerEXT = NULL; +PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; +PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; +PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; +PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; +PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; +PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; +PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; +PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; +PFNGLVERTEXATTRIBPARAMETERIAMDPROC glad_glVertexAttribParameteriAMD = NULL; +PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; +PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB = NULL; +PFNGLVERTEXATTRIBPOINTERNVPROC glad_glVertexAttribPointerNV = NULL; +PFNGLVERTEXATTRIBS1DVNVPROC glad_glVertexAttribs1dvNV = NULL; +PFNGLVERTEXATTRIBS1FVNVPROC glad_glVertexAttribs1fvNV = NULL; +PFNGLVERTEXATTRIBS1HVNVPROC glad_glVertexAttribs1hvNV = NULL; +PFNGLVERTEXATTRIBS1SVNVPROC glad_glVertexAttribs1svNV = NULL; +PFNGLVERTEXATTRIBS2DVNVPROC glad_glVertexAttribs2dvNV = NULL; +PFNGLVERTEXATTRIBS2FVNVPROC glad_glVertexAttribs2fvNV = NULL; +PFNGLVERTEXATTRIBS2HVNVPROC glad_glVertexAttribs2hvNV = NULL; +PFNGLVERTEXATTRIBS2SVNVPROC glad_glVertexAttribs2svNV = NULL; +PFNGLVERTEXATTRIBS3DVNVPROC glad_glVertexAttribs3dvNV = NULL; +PFNGLVERTEXATTRIBS3FVNVPROC glad_glVertexAttribs3fvNV = NULL; +PFNGLVERTEXATTRIBS3HVNVPROC glad_glVertexAttribs3hvNV = NULL; +PFNGLVERTEXATTRIBS3SVNVPROC glad_glVertexAttribs3svNV = NULL; +PFNGLVERTEXATTRIBS4DVNVPROC glad_glVertexAttribs4dvNV = NULL; +PFNGLVERTEXATTRIBS4FVNVPROC glad_glVertexAttribs4fvNV = NULL; +PFNGLVERTEXATTRIBS4HVNVPROC glad_glVertexAttribs4hvNV = NULL; +PFNGLVERTEXATTRIBS4SVNVPROC glad_glVertexAttribs4svNV = NULL; +PFNGLVERTEXATTRIBS4UBVNVPROC glad_glVertexAttribs4ubvNV = NULL; +PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor = NULL; +PFNGLVERTEXBLENDARBPROC glad_glVertexBlendARB = NULL; +PFNGLVERTEXBLENDENVFATIPROC glad_glVertexBlendEnvfATI = NULL; +PFNGLVERTEXBLENDENVIATIPROC glad_glVertexBlendEnviATI = NULL; +PFNGLVERTEXFORMATNVPROC glad_glVertexFormatNV = NULL; +PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT = NULL; +PFNGLVERTEXPOINTERLISTIBMPROC glad_glVertexPointerListIBM = NULL; +PFNGLVERTEXPOINTERVINTELPROC glad_glVertexPointervINTEL = NULL; +PFNGLVERTEXSTREAM1DATIPROC glad_glVertexStream1dATI = NULL; +PFNGLVERTEXSTREAM1DVATIPROC glad_glVertexStream1dvATI = NULL; +PFNGLVERTEXSTREAM1FATIPROC glad_glVertexStream1fATI = NULL; +PFNGLVERTEXSTREAM1FVATIPROC glad_glVertexStream1fvATI = NULL; +PFNGLVERTEXSTREAM1IATIPROC glad_glVertexStream1iATI = NULL; +PFNGLVERTEXSTREAM1IVATIPROC glad_glVertexStream1ivATI = NULL; +PFNGLVERTEXSTREAM1SATIPROC glad_glVertexStream1sATI = NULL; +PFNGLVERTEXSTREAM1SVATIPROC glad_glVertexStream1svATI = NULL; +PFNGLVERTEXSTREAM2DATIPROC glad_glVertexStream2dATI = NULL; +PFNGLVERTEXSTREAM2DVATIPROC glad_glVertexStream2dvATI = NULL; +PFNGLVERTEXSTREAM2FATIPROC glad_glVertexStream2fATI = NULL; +PFNGLVERTEXSTREAM2FVATIPROC glad_glVertexStream2fvATI = NULL; +PFNGLVERTEXSTREAM2IATIPROC glad_glVertexStream2iATI = NULL; +PFNGLVERTEXSTREAM2IVATIPROC glad_glVertexStream2ivATI = NULL; +PFNGLVERTEXSTREAM2SATIPROC glad_glVertexStream2sATI = NULL; +PFNGLVERTEXSTREAM2SVATIPROC glad_glVertexStream2svATI = NULL; +PFNGLVERTEXSTREAM3DATIPROC glad_glVertexStream3dATI = NULL; +PFNGLVERTEXSTREAM3DVATIPROC glad_glVertexStream3dvATI = NULL; +PFNGLVERTEXSTREAM3FATIPROC glad_glVertexStream3fATI = NULL; +PFNGLVERTEXSTREAM3FVATIPROC glad_glVertexStream3fvATI = NULL; +PFNGLVERTEXSTREAM3IATIPROC glad_glVertexStream3iATI = NULL; +PFNGLVERTEXSTREAM3IVATIPROC glad_glVertexStream3ivATI = NULL; +PFNGLVERTEXSTREAM3SATIPROC glad_glVertexStream3sATI = NULL; +PFNGLVERTEXSTREAM3SVATIPROC glad_glVertexStream3svATI = NULL; +PFNGLVERTEXSTREAM4DATIPROC glad_glVertexStream4dATI = NULL; +PFNGLVERTEXSTREAM4DVATIPROC glad_glVertexStream4dvATI = NULL; +PFNGLVERTEXSTREAM4FATIPROC glad_glVertexStream4fATI = NULL; +PFNGLVERTEXSTREAM4FVATIPROC glad_glVertexStream4fvATI = NULL; +PFNGLVERTEXSTREAM4IATIPROC glad_glVertexStream4iATI = NULL; +PFNGLVERTEXSTREAM4IVATIPROC glad_glVertexStream4ivATI = NULL; +PFNGLVERTEXSTREAM4SATIPROC glad_glVertexStream4sATI = NULL; +PFNGLVERTEXSTREAM4SVATIPROC glad_glVertexStream4svATI = NULL; +PFNGLVERTEXWEIGHTPOINTEREXTPROC glad_glVertexWeightPointerEXT = NULL; +PFNGLVERTEXWEIGHTFEXTPROC glad_glVertexWeightfEXT = NULL; +PFNGLVERTEXWEIGHTFVEXTPROC glad_glVertexWeightfvEXT = NULL; +PFNGLVERTEXWEIGHTHNVPROC glad_glVertexWeighthNV = NULL; +PFNGLVERTEXWEIGHTHVNVPROC glad_glVertexWeighthvNV = NULL; +PFNGLVIDEOCAPTURENVPROC glad_glVideoCaptureNV = NULL; +PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC glad_glVideoCaptureStreamParameterdvNV = NULL; +PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC glad_glVideoCaptureStreamParameterfvNV = NULL; +PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC glad_glVideoCaptureStreamParameterivNV = NULL; +PFNGLVIEWPORTPROC glad_glViewport = NULL; +PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv = NULL; +PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf = NULL; +PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv = NULL; +PFNGLVIEWPORTPOSITIONWSCALENVPROC glad_glViewportPositionWScaleNV = NULL; +PFNGLVIEWPORTSWIZZLENVPROC glad_glViewportSwizzleNV = NULL; +PFNGLWAITSEMAPHOREEXTPROC glad_glWaitSemaphoreEXT = NULL; +PFNGLWAITSEMAPHOREUI64NVXPROC glad_glWaitSemaphoreui64NVX = NULL; +PFNGLWAITSYNCPROC glad_glWaitSync = NULL; +PFNGLWAITVKSEMAPHORENVPROC glad_glWaitVkSemaphoreNV = NULL; +PFNGLWEIGHTPATHSNVPROC glad_glWeightPathsNV = NULL; +PFNGLWEIGHTPOINTERARBPROC glad_glWeightPointerARB = NULL; +PFNGLWEIGHTBVARBPROC glad_glWeightbvARB = NULL; +PFNGLWEIGHTDVARBPROC glad_glWeightdvARB = NULL; +PFNGLWEIGHTFVARBPROC glad_glWeightfvARB = NULL; +PFNGLWEIGHTIVARBPROC glad_glWeightivARB = NULL; +PFNGLWEIGHTSVARBPROC glad_glWeightsvARB = NULL; +PFNGLWEIGHTUBVARBPROC glad_glWeightubvARB = NULL; +PFNGLWEIGHTUIVARBPROC glad_glWeightuivARB = NULL; +PFNGLWEIGHTUSVARBPROC glad_glWeightusvARB = NULL; +PFNGLWINDOWPOS2DARBPROC glad_glWindowPos2dARB = NULL; +PFNGLWINDOWPOS2DMESAPROC glad_glWindowPos2dMESA = NULL; +PFNGLWINDOWPOS2DVARBPROC glad_glWindowPos2dvARB = NULL; +PFNGLWINDOWPOS2DVMESAPROC glad_glWindowPos2dvMESA = NULL; +PFNGLWINDOWPOS2FARBPROC glad_glWindowPos2fARB = NULL; +PFNGLWINDOWPOS2FMESAPROC glad_glWindowPos2fMESA = NULL; +PFNGLWINDOWPOS2FVARBPROC glad_glWindowPos2fvARB = NULL; +PFNGLWINDOWPOS2FVMESAPROC glad_glWindowPos2fvMESA = NULL; +PFNGLWINDOWPOS2IARBPROC glad_glWindowPos2iARB = NULL; +PFNGLWINDOWPOS2IMESAPROC glad_glWindowPos2iMESA = NULL; +PFNGLWINDOWPOS2IVARBPROC glad_glWindowPos2ivARB = NULL; +PFNGLWINDOWPOS2IVMESAPROC glad_glWindowPos2ivMESA = NULL; +PFNGLWINDOWPOS2SARBPROC glad_glWindowPos2sARB = NULL; +PFNGLWINDOWPOS2SMESAPROC glad_glWindowPos2sMESA = NULL; +PFNGLWINDOWPOS2SVARBPROC glad_glWindowPos2svARB = NULL; +PFNGLWINDOWPOS2SVMESAPROC glad_glWindowPos2svMESA = NULL; +PFNGLWINDOWPOS3DARBPROC glad_glWindowPos3dARB = NULL; +PFNGLWINDOWPOS3DMESAPROC glad_glWindowPos3dMESA = NULL; +PFNGLWINDOWPOS3DVARBPROC glad_glWindowPos3dvARB = NULL; +PFNGLWINDOWPOS3DVMESAPROC glad_glWindowPos3dvMESA = NULL; +PFNGLWINDOWPOS3FARBPROC glad_glWindowPos3fARB = NULL; +PFNGLWINDOWPOS3FMESAPROC glad_glWindowPos3fMESA = NULL; +PFNGLWINDOWPOS3FVARBPROC glad_glWindowPos3fvARB = NULL; +PFNGLWINDOWPOS3FVMESAPROC glad_glWindowPos3fvMESA = NULL; +PFNGLWINDOWPOS3IARBPROC glad_glWindowPos3iARB = NULL; +PFNGLWINDOWPOS3IMESAPROC glad_glWindowPos3iMESA = NULL; +PFNGLWINDOWPOS3IVARBPROC glad_glWindowPos3ivARB = NULL; +PFNGLWINDOWPOS3IVMESAPROC glad_glWindowPos3ivMESA = NULL; +PFNGLWINDOWPOS3SARBPROC glad_glWindowPos3sARB = NULL; +PFNGLWINDOWPOS3SMESAPROC glad_glWindowPos3sMESA = NULL; +PFNGLWINDOWPOS3SVARBPROC glad_glWindowPos3svARB = NULL; +PFNGLWINDOWPOS3SVMESAPROC glad_glWindowPos3svMESA = NULL; +PFNGLWINDOWPOS4DMESAPROC glad_glWindowPos4dMESA = NULL; +PFNGLWINDOWPOS4DVMESAPROC glad_glWindowPos4dvMESA = NULL; +PFNGLWINDOWPOS4FMESAPROC glad_glWindowPos4fMESA = NULL; +PFNGLWINDOWPOS4FVMESAPROC glad_glWindowPos4fvMESA = NULL; +PFNGLWINDOWPOS4IMESAPROC glad_glWindowPos4iMESA = NULL; +PFNGLWINDOWPOS4IVMESAPROC glad_glWindowPos4ivMESA = NULL; +PFNGLWINDOWPOS4SMESAPROC glad_glWindowPos4sMESA = NULL; +PFNGLWINDOWPOS4SVMESAPROC glad_glWindowPos4svMESA = NULL; +PFNGLWINDOWRECTANGLESEXTPROC glad_glWindowRectanglesEXT = NULL; +PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT = NULL; + + +static void glad_gl_load_GL_VERSION_1_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_0) return; + glad_glBlendFunc = (PFNGLBLENDFUNCPROC) load(userptr, "glBlendFunc"); + glad_glClear = (PFNGLCLEARPROC) load(userptr, "glClear"); + glad_glClearColor = (PFNGLCLEARCOLORPROC) load(userptr, "glClearColor"); + glad_glClearDepth = (PFNGLCLEARDEPTHPROC) load(userptr, "glClearDepth"); + glad_glClearStencil = (PFNGLCLEARSTENCILPROC) load(userptr, "glClearStencil"); + glad_glColorMask = (PFNGLCOLORMASKPROC) load(userptr, "glColorMask"); + glad_glCullFace = (PFNGLCULLFACEPROC) load(userptr, "glCullFace"); + glad_glDepthFunc = (PFNGLDEPTHFUNCPROC) load(userptr, "glDepthFunc"); + glad_glDepthMask = (PFNGLDEPTHMASKPROC) load(userptr, "glDepthMask"); + glad_glDepthRange = (PFNGLDEPTHRANGEPROC) load(userptr, "glDepthRange"); + glad_glDisable = (PFNGLDISABLEPROC) load(userptr, "glDisable"); + glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC) load(userptr, "glDrawBuffer"); + glad_glEnable = (PFNGLENABLEPROC) load(userptr, "glEnable"); + glad_glFinish = (PFNGLFINISHPROC) load(userptr, "glFinish"); + glad_glFlush = (PFNGLFLUSHPROC) load(userptr, "glFlush"); + glad_glFrontFace = (PFNGLFRONTFACEPROC) load(userptr, "glFrontFace"); + glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC) load(userptr, "glGetBooleanv"); + glad_glGetDoublev = (PFNGLGETDOUBLEVPROC) load(userptr, "glGetDoublev"); + glad_glGetError = (PFNGLGETERRORPROC) load(userptr, "glGetError"); + glad_glGetFloatv = (PFNGLGETFLOATVPROC) load(userptr, "glGetFloatv"); + glad_glGetIntegerv = (PFNGLGETINTEGERVPROC) load(userptr, "glGetIntegerv"); + glad_glGetString = (PFNGLGETSTRINGPROC) load(userptr, "glGetString"); + glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC) load(userptr, "glGetTexImage"); + glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC) load(userptr, "glGetTexLevelParameterfv"); + glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC) load(userptr, "glGetTexLevelParameteriv"); + glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC) load(userptr, "glGetTexParameterfv"); + glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC) load(userptr, "glGetTexParameteriv"); + glad_glHint = (PFNGLHINTPROC) load(userptr, "glHint"); + glad_glIsEnabled = (PFNGLISENABLEDPROC) load(userptr, "glIsEnabled"); + glad_glLineWidth = (PFNGLLINEWIDTHPROC) load(userptr, "glLineWidth"); + glad_glLogicOp = (PFNGLLOGICOPPROC) load(userptr, "glLogicOp"); + glad_glPixelStoref = (PFNGLPIXELSTOREFPROC) load(userptr, "glPixelStoref"); + glad_glPixelStorei = (PFNGLPIXELSTOREIPROC) load(userptr, "glPixelStorei"); + glad_glPointSize = (PFNGLPOINTSIZEPROC) load(userptr, "glPointSize"); + glad_glPolygonMode = (PFNGLPOLYGONMODEPROC) load(userptr, "glPolygonMode"); + glad_glReadBuffer = (PFNGLREADBUFFERPROC) load(userptr, "glReadBuffer"); + glad_glReadPixels = (PFNGLREADPIXELSPROC) load(userptr, "glReadPixels"); + glad_glScissor = (PFNGLSCISSORPROC) load(userptr, "glScissor"); + glad_glStencilFunc = (PFNGLSTENCILFUNCPROC) load(userptr, "glStencilFunc"); + glad_glStencilMask = (PFNGLSTENCILMASKPROC) load(userptr, "glStencilMask"); + glad_glStencilOp = (PFNGLSTENCILOPPROC) load(userptr, "glStencilOp"); + glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC) load(userptr, "glTexImage1D"); + glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC) load(userptr, "glTexImage2D"); + glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC) load(userptr, "glTexParameterf"); + glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC) load(userptr, "glTexParameterfv"); + glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC) load(userptr, "glTexParameteri"); + glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC) load(userptr, "glTexParameteriv"); + glad_glViewport = (PFNGLVIEWPORTPROC) load(userptr, "glViewport"); +} +static void glad_gl_load_GL_VERSION_1_1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_1) return; + glad_glBindTexture = (PFNGLBINDTEXTUREPROC) load(userptr, "glBindTexture"); + glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC) load(userptr, "glCopyTexImage1D"); + glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC) load(userptr, "glCopyTexImage2D"); + glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC) load(userptr, "glCopyTexSubImage1D"); + glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC) load(userptr, "glCopyTexSubImage2D"); + glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC) load(userptr, "glDeleteTextures"); + glad_glDrawArrays = (PFNGLDRAWARRAYSPROC) load(userptr, "glDrawArrays"); + glad_glDrawElements = (PFNGLDRAWELEMENTSPROC) load(userptr, "glDrawElements"); + glad_glGenTextures = (PFNGLGENTEXTURESPROC) load(userptr, "glGenTextures"); + glad_glGetPointerv = (PFNGLGETPOINTERVPROC) load(userptr, "glGetPointerv"); + glad_glIsTexture = (PFNGLISTEXTUREPROC) load(userptr, "glIsTexture"); + glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC) load(userptr, "glPolygonOffset"); + glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC) load(userptr, "glTexSubImage1D"); + glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC) load(userptr, "glTexSubImage2D"); +} +static void glad_gl_load_GL_VERSION_1_2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_2) return; + glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC) load(userptr, "glCopyTexSubImage3D"); + glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) load(userptr, "glDrawRangeElements"); + glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC) load(userptr, "glTexImage3D"); + glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC) load(userptr, "glTexSubImage3D"); +} +static void glad_gl_load_GL_VERSION_1_3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_3) return; + glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC) load(userptr, "glActiveTexture"); + glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC) load(userptr, "glCompressedTexImage1D"); + glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) load(userptr, "glCompressedTexImage2D"); + glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC) load(userptr, "glCompressedTexImage3D"); + glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) load(userptr, "glCompressedTexSubImage1D"); + glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) load(userptr, "glCompressedTexSubImage2D"); + glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) load(userptr, "glCompressedTexSubImage3D"); + glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC) load(userptr, "glGetCompressedTexImage"); + glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC) load(userptr, "glSampleCoverage"); +} +static void glad_gl_load_GL_VERSION_1_4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_4) return; + glad_glBlendColor = (PFNGLBLENDCOLORPROC) load(userptr, "glBlendColor"); + glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC) load(userptr, "glBlendEquation"); + glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC) load(userptr, "glBlendFuncSeparate"); + glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC) load(userptr, "glMultiDrawArrays"); + glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC) load(userptr, "glMultiDrawElements"); + glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC) load(userptr, "glPointParameterf"); + glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC) load(userptr, "glPointParameterfv"); + glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC) load(userptr, "glPointParameteri"); + glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC) load(userptr, "glPointParameteriv"); +} +static void glad_gl_load_GL_VERSION_1_5( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_5) return; + glad_glBeginQuery = (PFNGLBEGINQUERYPROC) load(userptr, "glBeginQuery"); + glad_glBindBuffer = (PFNGLBINDBUFFERPROC) load(userptr, "glBindBuffer"); + glad_glBufferData = (PFNGLBUFFERDATAPROC) load(userptr, "glBufferData"); + glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC) load(userptr, "glBufferSubData"); + glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC) load(userptr, "glDeleteBuffers"); + glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC) load(userptr, "glDeleteQueries"); + glad_glEndQuery = (PFNGLENDQUERYPROC) load(userptr, "glEndQuery"); + glad_glGenBuffers = (PFNGLGENBUFFERSPROC) load(userptr, "glGenBuffers"); + glad_glGenQueries = (PFNGLGENQUERIESPROC) load(userptr, "glGenQueries"); + glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC) load(userptr, "glGetBufferParameteriv"); + glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC) load(userptr, "glGetBufferPointerv"); + glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC) load(userptr, "glGetBufferSubData"); + glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC) load(userptr, "glGetQueryObjectiv"); + glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC) load(userptr, "glGetQueryObjectuiv"); + glad_glGetQueryiv = (PFNGLGETQUERYIVPROC) load(userptr, "glGetQueryiv"); + glad_glIsBuffer = (PFNGLISBUFFERPROC) load(userptr, "glIsBuffer"); + glad_glIsQuery = (PFNGLISQUERYPROC) load(userptr, "glIsQuery"); + glad_glMapBuffer = (PFNGLMAPBUFFERPROC) load(userptr, "glMapBuffer"); + glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC) load(userptr, "glUnmapBuffer"); +} +static void glad_gl_load_GL_VERSION_2_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_2_0) return; + glad_glAttachShader = (PFNGLATTACHSHADERPROC) load(userptr, "glAttachShader"); + glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) load(userptr, "glBindAttribLocation"); + glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC) load(userptr, "glBlendEquationSeparate"); + glad_glCompileShader = (PFNGLCOMPILESHADERPROC) load(userptr, "glCompileShader"); + glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC) load(userptr, "glCreateProgram"); + glad_glCreateShader = (PFNGLCREATESHADERPROC) load(userptr, "glCreateShader"); + glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC) load(userptr, "glDeleteProgram"); + glad_glDeleteShader = (PFNGLDELETESHADERPROC) load(userptr, "glDeleteShader"); + glad_glDetachShader = (PFNGLDETACHSHADERPROC) load(userptr, "glDetachShader"); + glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) load(userptr, "glDisableVertexAttribArray"); + glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC) load(userptr, "glDrawBuffers"); + glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) load(userptr, "glEnableVertexAttribArray"); + glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC) load(userptr, "glGetActiveAttrib"); + glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) load(userptr, "glGetActiveUniform"); + glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC) load(userptr, "glGetAttachedShaders"); + glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) load(userptr, "glGetAttribLocation"); + glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) load(userptr, "glGetProgramInfoLog"); + glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC) load(userptr, "glGetProgramiv"); + glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) load(userptr, "glGetShaderInfoLog"); + glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC) load(userptr, "glGetShaderSource"); + glad_glGetShaderiv = (PFNGLGETSHADERIVPROC) load(userptr, "glGetShaderiv"); + glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) load(userptr, "glGetUniformLocation"); + glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC) load(userptr, "glGetUniformfv"); + glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC) load(userptr, "glGetUniformiv"); + glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC) load(userptr, "glGetVertexAttribPointerv"); + glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC) load(userptr, "glGetVertexAttribdv"); + glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC) load(userptr, "glGetVertexAttribfv"); + glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC) load(userptr, "glGetVertexAttribiv"); + glad_glIsProgram = (PFNGLISPROGRAMPROC) load(userptr, "glIsProgram"); + glad_glIsShader = (PFNGLISSHADERPROC) load(userptr, "glIsShader"); + glad_glLinkProgram = (PFNGLLINKPROGRAMPROC) load(userptr, "glLinkProgram"); + glad_glShaderSource = (PFNGLSHADERSOURCEPROC) load(userptr, "glShaderSource"); + glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC) load(userptr, "glStencilFuncSeparate"); + glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC) load(userptr, "glStencilMaskSeparate"); + glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC) load(userptr, "glStencilOpSeparate"); + glad_glUniform1f = (PFNGLUNIFORM1FPROC) load(userptr, "glUniform1f"); + glad_glUniform1fv = (PFNGLUNIFORM1FVPROC) load(userptr, "glUniform1fv"); + glad_glUniform1i = (PFNGLUNIFORM1IPROC) load(userptr, "glUniform1i"); + glad_glUniform1iv = (PFNGLUNIFORM1IVPROC) load(userptr, "glUniform1iv"); + glad_glUniform2f = (PFNGLUNIFORM2FPROC) load(userptr, "glUniform2f"); + glad_glUniform2fv = (PFNGLUNIFORM2FVPROC) load(userptr, "glUniform2fv"); + glad_glUniform2i = (PFNGLUNIFORM2IPROC) load(userptr, "glUniform2i"); + glad_glUniform2iv = (PFNGLUNIFORM2IVPROC) load(userptr, "glUniform2iv"); + glad_glUniform3f = (PFNGLUNIFORM3FPROC) load(userptr, "glUniform3f"); + glad_glUniform3fv = (PFNGLUNIFORM3FVPROC) load(userptr, "glUniform3fv"); + glad_glUniform3i = (PFNGLUNIFORM3IPROC) load(userptr, "glUniform3i"); + glad_glUniform3iv = (PFNGLUNIFORM3IVPROC) load(userptr, "glUniform3iv"); + glad_glUniform4f = (PFNGLUNIFORM4FPROC) load(userptr, "glUniform4f"); + glad_glUniform4fv = (PFNGLUNIFORM4FVPROC) load(userptr, "glUniform4fv"); + glad_glUniform4i = (PFNGLUNIFORM4IPROC) load(userptr, "glUniform4i"); + glad_glUniform4iv = (PFNGLUNIFORM4IVPROC) load(userptr, "glUniform4iv"); + glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC) load(userptr, "glUniformMatrix2fv"); + glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC) load(userptr, "glUniformMatrix3fv"); + glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) load(userptr, "glUniformMatrix4fv"); + glad_glUseProgram = (PFNGLUSEPROGRAMPROC) load(userptr, "glUseProgram"); + glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC) load(userptr, "glValidateProgram"); + glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC) load(userptr, "glVertexAttrib1d"); + glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC) load(userptr, "glVertexAttrib1dv"); + glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC) load(userptr, "glVertexAttrib1f"); + glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC) load(userptr, "glVertexAttrib1fv"); + glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC) load(userptr, "glVertexAttrib1s"); + glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC) load(userptr, "glVertexAttrib1sv"); + glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC) load(userptr, "glVertexAttrib2d"); + glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC) load(userptr, "glVertexAttrib2dv"); + glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC) load(userptr, "glVertexAttrib2f"); + glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC) load(userptr, "glVertexAttrib2fv"); + glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC) load(userptr, "glVertexAttrib2s"); + glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC) load(userptr, "glVertexAttrib2sv"); + glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC) load(userptr, "glVertexAttrib3d"); + glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC) load(userptr, "glVertexAttrib3dv"); + glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC) load(userptr, "glVertexAttrib3f"); + glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC) load(userptr, "glVertexAttrib3fv"); + glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC) load(userptr, "glVertexAttrib3s"); + glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC) load(userptr, "glVertexAttrib3sv"); + glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC) load(userptr, "glVertexAttrib4Nbv"); + glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC) load(userptr, "glVertexAttrib4Niv"); + glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC) load(userptr, "glVertexAttrib4Nsv"); + glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC) load(userptr, "glVertexAttrib4Nub"); + glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC) load(userptr, "glVertexAttrib4Nubv"); + glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC) load(userptr, "glVertexAttrib4Nuiv"); + glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC) load(userptr, "glVertexAttrib4Nusv"); + glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC) load(userptr, "glVertexAttrib4bv"); + glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC) load(userptr, "glVertexAttrib4d"); + glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC) load(userptr, "glVertexAttrib4dv"); + glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC) load(userptr, "glVertexAttrib4f"); + glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC) load(userptr, "glVertexAttrib4fv"); + glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC) load(userptr, "glVertexAttrib4iv"); + glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC) load(userptr, "glVertexAttrib4s"); + glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC) load(userptr, "glVertexAttrib4sv"); + glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC) load(userptr, "glVertexAttrib4ubv"); + glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC) load(userptr, "glVertexAttrib4uiv"); + glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC) load(userptr, "glVertexAttrib4usv"); + glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) load(userptr, "glVertexAttribPointer"); +} +static void glad_gl_load_GL_VERSION_2_1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_2_1) return; + glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC) load(userptr, "glUniformMatrix2x3fv"); + glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC) load(userptr, "glUniformMatrix2x4fv"); + glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC) load(userptr, "glUniformMatrix3x2fv"); + glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC) load(userptr, "glUniformMatrix3x4fv"); + glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC) load(userptr, "glUniformMatrix4x2fv"); + glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC) load(userptr, "glUniformMatrix4x3fv"); +} +static void glad_gl_load_GL_VERSION_3_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_3_0) return; + glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC) load(userptr, "glBeginConditionalRender"); + glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC) load(userptr, "glBeginTransformFeedback"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC) load(userptr, "glBindBufferBase"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC) load(userptr, "glBindBufferRange"); + glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC) load(userptr, "glBindFragDataLocation"); + glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) load(userptr, "glBindFramebuffer"); + glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) load(userptr, "glBindRenderbuffer"); + glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC) load(userptr, "glBindVertexArray"); + glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC) load(userptr, "glBlitFramebuffer"); + glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) load(userptr, "glCheckFramebufferStatus"); + glad_glClampColor = (PFNGLCLAMPCOLORPROC) load(userptr, "glClampColor"); + glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC) load(userptr, "glClearBufferfi"); + glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC) load(userptr, "glClearBufferfv"); + glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC) load(userptr, "glClearBufferiv"); + glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC) load(userptr, "glClearBufferuiv"); + glad_glColorMaski = (PFNGLCOLORMASKIPROC) load(userptr, "glColorMaski"); + glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) load(userptr, "glDeleteFramebuffers"); + glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) load(userptr, "glDeleteRenderbuffers"); + glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC) load(userptr, "glDeleteVertexArrays"); + glad_glDisablei = (PFNGLDISABLEIPROC) load(userptr, "glDisablei"); + glad_glEnablei = (PFNGLENABLEIPROC) load(userptr, "glEnablei"); + glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC) load(userptr, "glEndConditionalRender"); + glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC) load(userptr, "glEndTransformFeedback"); + glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC) load(userptr, "glFlushMappedBufferRange"); + glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) load(userptr, "glFramebufferRenderbuffer"); + glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC) load(userptr, "glFramebufferTexture1D"); + glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) load(userptr, "glFramebufferTexture2D"); + glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC) load(userptr, "glFramebufferTexture3D"); + glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC) load(userptr, "glFramebufferTextureLayer"); + glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) load(userptr, "glGenFramebuffers"); + glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) load(userptr, "glGenRenderbuffers"); + glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC) load(userptr, "glGenVertexArrays"); + glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) load(userptr, "glGenerateMipmap"); + glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC) load(userptr, "glGetBooleani_v"); + glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC) load(userptr, "glGetFragDataLocation"); + glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) load(userptr, "glGetFramebufferAttachmentParameteriv"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC) load(userptr, "glGetIntegeri_v"); + glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC) load(userptr, "glGetRenderbufferParameteriv"); + glad_glGetStringi = (PFNGLGETSTRINGIPROC) load(userptr, "glGetStringi"); + glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC) load(userptr, "glGetTexParameterIiv"); + glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC) load(userptr, "glGetTexParameterIuiv"); + glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) load(userptr, "glGetTransformFeedbackVarying"); + glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC) load(userptr, "glGetUniformuiv"); + glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC) load(userptr, "glGetVertexAttribIiv"); + glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC) load(userptr, "glGetVertexAttribIuiv"); + glad_glIsEnabledi = (PFNGLISENABLEDIPROC) load(userptr, "glIsEnabledi"); + glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC) load(userptr, "glIsFramebuffer"); + glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC) load(userptr, "glIsRenderbuffer"); + glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC) load(userptr, "glIsVertexArray"); + glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) load(userptr, "glMapBufferRange"); + glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) load(userptr, "glRenderbufferStorage"); + glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) load(userptr, "glRenderbufferStorageMultisample"); + glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC) load(userptr, "glTexParameterIiv"); + glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC) load(userptr, "glTexParameterIuiv"); + glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC) load(userptr, "glTransformFeedbackVaryings"); + glad_glUniform1ui = (PFNGLUNIFORM1UIPROC) load(userptr, "glUniform1ui"); + glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC) load(userptr, "glUniform1uiv"); + glad_glUniform2ui = (PFNGLUNIFORM2UIPROC) load(userptr, "glUniform2ui"); + glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC) load(userptr, "glUniform2uiv"); + glad_glUniform3ui = (PFNGLUNIFORM3UIPROC) load(userptr, "glUniform3ui"); + glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC) load(userptr, "glUniform3uiv"); + glad_glUniform4ui = (PFNGLUNIFORM4UIPROC) load(userptr, "glUniform4ui"); + glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC) load(userptr, "glUniform4uiv"); + glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC) load(userptr, "glVertexAttribI1i"); + glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC) load(userptr, "glVertexAttribI1iv"); + glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC) load(userptr, "glVertexAttribI1ui"); + glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC) load(userptr, "glVertexAttribI1uiv"); + glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC) load(userptr, "glVertexAttribI2i"); + glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC) load(userptr, "glVertexAttribI2iv"); + glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC) load(userptr, "glVertexAttribI2ui"); + glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC) load(userptr, "glVertexAttribI2uiv"); + glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC) load(userptr, "glVertexAttribI3i"); + glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC) load(userptr, "glVertexAttribI3iv"); + glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC) load(userptr, "glVertexAttribI3ui"); + glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC) load(userptr, "glVertexAttribI3uiv"); + glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC) load(userptr, "glVertexAttribI4bv"); + glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC) load(userptr, "glVertexAttribI4i"); + glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC) load(userptr, "glVertexAttribI4iv"); + glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC) load(userptr, "glVertexAttribI4sv"); + glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC) load(userptr, "glVertexAttribI4ubv"); + glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC) load(userptr, "glVertexAttribI4ui"); + glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC) load(userptr, "glVertexAttribI4uiv"); + glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC) load(userptr, "glVertexAttribI4usv"); + glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC) load(userptr, "glVertexAttribIPointer"); +} +static void glad_gl_load_GL_VERSION_3_1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_3_1) return; + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC) load(userptr, "glBindBufferBase"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC) load(userptr, "glBindBufferRange"); + glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC) load(userptr, "glCopyBufferSubData"); + glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC) load(userptr, "glDrawArraysInstanced"); + glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC) load(userptr, "glDrawElementsInstanced"); + glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) load(userptr, "glGetActiveUniformBlockName"); + glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC) load(userptr, "glGetActiveUniformBlockiv"); + glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC) load(userptr, "glGetActiveUniformName"); + glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC) load(userptr, "glGetActiveUniformsiv"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC) load(userptr, "glGetIntegeri_v"); + glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC) load(userptr, "glGetUniformBlockIndex"); + glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC) load(userptr, "glGetUniformIndices"); + glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC) load(userptr, "glPrimitiveRestartIndex"); + glad_glTexBuffer = (PFNGLTEXBUFFERPROC) load(userptr, "glTexBuffer"); + glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC) load(userptr, "glUniformBlockBinding"); +} +static void glad_gl_load_GL_VERSION_3_2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_3_2) return; + glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) load(userptr, "glClientWaitSync"); + glad_glDeleteSync = (PFNGLDELETESYNCPROC) load(userptr, "glDeleteSync"); + glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC) load(userptr, "glDrawElementsBaseVertex"); + glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) load(userptr, "glDrawElementsInstancedBaseVertex"); + glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) load(userptr, "glDrawRangeElementsBaseVertex"); + glad_glFenceSync = (PFNGLFENCESYNCPROC) load(userptr, "glFenceSync"); + glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC) load(userptr, "glFramebufferTexture"); + glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC) load(userptr, "glGetBufferParameteri64v"); + glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC) load(userptr, "glGetInteger64i_v"); + glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC) load(userptr, "glGetInteger64v"); + glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC) load(userptr, "glGetMultisamplefv"); + glad_glGetSynciv = (PFNGLGETSYNCIVPROC) load(userptr, "glGetSynciv"); + glad_glIsSync = (PFNGLISSYNCPROC) load(userptr, "glIsSync"); + glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) load(userptr, "glMultiDrawElementsBaseVertex"); + glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC) load(userptr, "glProvokingVertex"); + glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC) load(userptr, "glSampleMaski"); + glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC) load(userptr, "glTexImage2DMultisample"); + glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC) load(userptr, "glTexImage3DMultisample"); + glad_glWaitSync = (PFNGLWAITSYNCPROC) load(userptr, "glWaitSync"); +} +static void glad_gl_load_GL_VERSION_3_3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_3_3) return; + glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) load(userptr, "glBindFragDataLocationIndexed"); + glad_glBindSampler = (PFNGLBINDSAMPLERPROC) load(userptr, "glBindSampler"); + glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC) load(userptr, "glDeleteSamplers"); + glad_glGenSamplers = (PFNGLGENSAMPLERSPROC) load(userptr, "glGenSamplers"); + glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC) load(userptr, "glGetFragDataIndex"); + glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC) load(userptr, "glGetQueryObjecti64v"); + glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC) load(userptr, "glGetQueryObjectui64v"); + glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC) load(userptr, "glGetSamplerParameterIiv"); + glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC) load(userptr, "glGetSamplerParameterIuiv"); + glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC) load(userptr, "glGetSamplerParameterfv"); + glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC) load(userptr, "glGetSamplerParameteriv"); + glad_glIsSampler = (PFNGLISSAMPLERPROC) load(userptr, "glIsSampler"); + glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC) load(userptr, "glQueryCounter"); + glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC) load(userptr, "glSamplerParameterIiv"); + glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC) load(userptr, "glSamplerParameterIuiv"); + glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC) load(userptr, "glSamplerParameterf"); + glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC) load(userptr, "glSamplerParameterfv"); + glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC) load(userptr, "glSamplerParameteri"); + glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC) load(userptr, "glSamplerParameteriv"); + glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC) load(userptr, "glVertexAttribDivisor"); + glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC) load(userptr, "glVertexAttribP1ui"); + glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC) load(userptr, "glVertexAttribP1uiv"); + glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC) load(userptr, "glVertexAttribP2ui"); + glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC) load(userptr, "glVertexAttribP2uiv"); + glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC) load(userptr, "glVertexAttribP3ui"); + glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC) load(userptr, "glVertexAttribP3uiv"); + glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC) load(userptr, "glVertexAttribP4ui"); + glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC) load(userptr, "glVertexAttribP4uiv"); +} +static void glad_gl_load_GL_VERSION_4_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_4_0) return; + glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC) load(userptr, "glBeginQueryIndexed"); + glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC) load(userptr, "glBindTransformFeedback"); + glad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC) load(userptr, "glBlendEquationSeparatei"); + glad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC) load(userptr, "glBlendEquationi"); + glad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC) load(userptr, "glBlendFuncSeparatei"); + glad_glBlendFunci = (PFNGLBLENDFUNCIPROC) load(userptr, "glBlendFunci"); + glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC) load(userptr, "glDeleteTransformFeedbacks"); + glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC) load(userptr, "glDrawArraysIndirect"); + glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC) load(userptr, "glDrawElementsIndirect"); + glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC) load(userptr, "glDrawTransformFeedback"); + glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) load(userptr, "glDrawTransformFeedbackStream"); + glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC) load(userptr, "glEndQueryIndexed"); + glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC) load(userptr, "glGenTransformFeedbacks"); + glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC) load(userptr, "glGetActiveSubroutineName"); + glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) load(userptr, "glGetActiveSubroutineUniformName"); + glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) load(userptr, "glGetActiveSubroutineUniformiv"); + glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC) load(userptr, "glGetProgramStageiv"); + glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC) load(userptr, "glGetQueryIndexediv"); + glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC) load(userptr, "glGetSubroutineIndex"); + glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) load(userptr, "glGetSubroutineUniformLocation"); + glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC) load(userptr, "glGetUniformSubroutineuiv"); + glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC) load(userptr, "glGetUniformdv"); + glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC) load(userptr, "glIsTransformFeedback"); + glad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC) load(userptr, "glMinSampleShading"); + glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC) load(userptr, "glPatchParameterfv"); + glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC) load(userptr, "glPatchParameteri"); + glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC) load(userptr, "glPauseTransformFeedback"); + glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC) load(userptr, "glResumeTransformFeedback"); + glad_glUniform1d = (PFNGLUNIFORM1DPROC) load(userptr, "glUniform1d"); + glad_glUniform1dv = (PFNGLUNIFORM1DVPROC) load(userptr, "glUniform1dv"); + glad_glUniform2d = (PFNGLUNIFORM2DPROC) load(userptr, "glUniform2d"); + glad_glUniform2dv = (PFNGLUNIFORM2DVPROC) load(userptr, "glUniform2dv"); + glad_glUniform3d = (PFNGLUNIFORM3DPROC) load(userptr, "glUniform3d"); + glad_glUniform3dv = (PFNGLUNIFORM3DVPROC) load(userptr, "glUniform3dv"); + glad_glUniform4d = (PFNGLUNIFORM4DPROC) load(userptr, "glUniform4d"); + glad_glUniform4dv = (PFNGLUNIFORM4DVPROC) load(userptr, "glUniform4dv"); + glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC) load(userptr, "glUniformMatrix2dv"); + glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC) load(userptr, "glUniformMatrix2x3dv"); + glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC) load(userptr, "glUniformMatrix2x4dv"); + glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC) load(userptr, "glUniformMatrix3dv"); + glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC) load(userptr, "glUniformMatrix3x2dv"); + glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC) load(userptr, "glUniformMatrix3x4dv"); + glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC) load(userptr, "glUniformMatrix4dv"); + glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC) load(userptr, "glUniformMatrix4x2dv"); + glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC) load(userptr, "glUniformMatrix4x3dv"); + glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC) load(userptr, "glUniformSubroutinesuiv"); +} +static void glad_gl_load_GL_VERSION_4_1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_4_1) return; + glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC) load(userptr, "glActiveShaderProgram"); + glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC) load(userptr, "glBindProgramPipeline"); + glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC) load(userptr, "glClearDepthf"); + glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC) load(userptr, "glCreateShaderProgramv"); + glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC) load(userptr, "glDeleteProgramPipelines"); + glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC) load(userptr, "glDepthRangeArrayv"); + glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC) load(userptr, "glDepthRangeIndexed"); + glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC) load(userptr, "glDepthRangef"); + glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC) load(userptr, "glGenProgramPipelines"); + glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC) load(userptr, "glGetDoublei_v"); + glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC) load(userptr, "glGetFloati_v"); + glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC) load(userptr, "glGetProgramBinary"); + glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC) load(userptr, "glGetProgramPipelineInfoLog"); + glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC) load(userptr, "glGetProgramPipelineiv"); + glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC) load(userptr, "glGetShaderPrecisionFormat"); + glad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC) load(userptr, "glGetVertexAttribLdv"); + glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC) load(userptr, "glIsProgramPipeline"); + glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC) load(userptr, "glProgramBinary"); + glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC) load(userptr, "glProgramParameteri"); + glad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC) load(userptr, "glProgramUniform1d"); + glad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC) load(userptr, "glProgramUniform1dv"); + glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC) load(userptr, "glProgramUniform1f"); + glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC) load(userptr, "glProgramUniform1fv"); + glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC) load(userptr, "glProgramUniform1i"); + glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC) load(userptr, "glProgramUniform1iv"); + glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC) load(userptr, "glProgramUniform1ui"); + glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC) load(userptr, "glProgramUniform1uiv"); + glad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC) load(userptr, "glProgramUniform2d"); + glad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC) load(userptr, "glProgramUniform2dv"); + glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC) load(userptr, "glProgramUniform2f"); + glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC) load(userptr, "glProgramUniform2fv"); + glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC) load(userptr, "glProgramUniform2i"); + glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC) load(userptr, "glProgramUniform2iv"); + glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC) load(userptr, "glProgramUniform2ui"); + glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC) load(userptr, "glProgramUniform2uiv"); + glad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC) load(userptr, "glProgramUniform3d"); + glad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC) load(userptr, "glProgramUniform3dv"); + glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC) load(userptr, "glProgramUniform3f"); + glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC) load(userptr, "glProgramUniform3fv"); + glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC) load(userptr, "glProgramUniform3i"); + glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC) load(userptr, "glProgramUniform3iv"); + glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC) load(userptr, "glProgramUniform3ui"); + glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC) load(userptr, "glProgramUniform3uiv"); + glad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC) load(userptr, "glProgramUniform4d"); + glad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC) load(userptr, "glProgramUniform4dv"); + glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC) load(userptr, "glProgramUniform4f"); + glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC) load(userptr, "glProgramUniform4fv"); + glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC) load(userptr, "glProgramUniform4i"); + glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC) load(userptr, "glProgramUniform4iv"); + glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC) load(userptr, "glProgramUniform4ui"); + glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC) load(userptr, "glProgramUniform4uiv"); + glad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC) load(userptr, "glProgramUniformMatrix2dv"); + glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC) load(userptr, "glProgramUniformMatrix2fv"); + glad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) load(userptr, "glProgramUniformMatrix2x3dv"); + glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) load(userptr, "glProgramUniformMatrix2x3fv"); + glad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) load(userptr, "glProgramUniformMatrix2x4dv"); + glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) load(userptr, "glProgramUniformMatrix2x4fv"); + glad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC) load(userptr, "glProgramUniformMatrix3dv"); + glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC) load(userptr, "glProgramUniformMatrix3fv"); + glad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) load(userptr, "glProgramUniformMatrix3x2dv"); + glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) load(userptr, "glProgramUniformMatrix3x2fv"); + glad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) load(userptr, "glProgramUniformMatrix3x4dv"); + glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) load(userptr, "glProgramUniformMatrix3x4fv"); + glad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC) load(userptr, "glProgramUniformMatrix4dv"); + glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC) load(userptr, "glProgramUniformMatrix4fv"); + glad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) load(userptr, "glProgramUniformMatrix4x2dv"); + glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) load(userptr, "glProgramUniformMatrix4x2fv"); + glad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) load(userptr, "glProgramUniformMatrix4x3dv"); + glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) load(userptr, "glProgramUniformMatrix4x3fv"); + glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC) load(userptr, "glReleaseShaderCompiler"); + glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC) load(userptr, "glScissorArrayv"); + glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC) load(userptr, "glScissorIndexed"); + glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC) load(userptr, "glScissorIndexedv"); + glad_glShaderBinary = (PFNGLSHADERBINARYPROC) load(userptr, "glShaderBinary"); + glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC) load(userptr, "glUseProgramStages"); + glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC) load(userptr, "glValidateProgramPipeline"); + glad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC) load(userptr, "glVertexAttribL1d"); + glad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC) load(userptr, "glVertexAttribL1dv"); + glad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC) load(userptr, "glVertexAttribL2d"); + glad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC) load(userptr, "glVertexAttribL2dv"); + glad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC) load(userptr, "glVertexAttribL3d"); + glad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC) load(userptr, "glVertexAttribL3dv"); + glad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC) load(userptr, "glVertexAttribL4d"); + glad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC) load(userptr, "glVertexAttribL4dv"); + glad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC) load(userptr, "glVertexAttribLPointer"); + glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC) load(userptr, "glViewportArrayv"); + glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC) load(userptr, "glViewportIndexedf"); + glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC) load(userptr, "glViewportIndexedfv"); +} +static void glad_gl_load_GL_VERSION_4_2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_4_2) return; + glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC) load(userptr, "glBindImageTexture"); + glad_glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) load(userptr, "glDrawArraysInstancedBaseInstance"); + glad_glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) load(userptr, "glDrawElementsInstancedBaseInstance"); + glad_glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) load(userptr, "glDrawElementsInstancedBaseVertexBaseInstance"); + glad_glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) load(userptr, "glDrawTransformFeedbackInstanced"); + glad_glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) load(userptr, "glDrawTransformFeedbackStreamInstanced"); + glad_glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) load(userptr, "glGetActiveAtomicCounterBufferiv"); + glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC) load(userptr, "glGetInternalformativ"); + glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC) load(userptr, "glMemoryBarrier"); + glad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC) load(userptr, "glTexStorage1D"); + glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC) load(userptr, "glTexStorage2D"); + glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC) load(userptr, "glTexStorage3D"); +} +static void glad_gl_load_GL_VERSION_4_3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_4_3) return; + glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC) load(userptr, "glBindVertexBuffer"); + glad_glClearBufferData = (PFNGLCLEARBUFFERDATAPROC) load(userptr, "glClearBufferData"); + glad_glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC) load(userptr, "glClearBufferSubData"); + glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC) load(userptr, "glCopyImageSubData"); + glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC) load(userptr, "glDebugMessageCallback"); + glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC) load(userptr, "glDebugMessageControl"); + glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC) load(userptr, "glDebugMessageInsert"); + glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC) load(userptr, "glDispatchCompute"); + glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC) load(userptr, "glDispatchComputeIndirect"); + glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC) load(userptr, "glFramebufferParameteri"); + glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC) load(userptr, "glGetDebugMessageLog"); + glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC) load(userptr, "glGetFramebufferParameteriv"); + glad_glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC) load(userptr, "glGetInternalformati64v"); + glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC) load(userptr, "glGetObjectLabel"); + glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC) load(userptr, "glGetObjectPtrLabel"); + glad_glGetPointerv = (PFNGLGETPOINTERVPROC) load(userptr, "glGetPointerv"); + glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC) load(userptr, "glGetProgramInterfaceiv"); + glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC) load(userptr, "glGetProgramResourceIndex"); + glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC) load(userptr, "glGetProgramResourceLocation"); + glad_glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) load(userptr, "glGetProgramResourceLocationIndex"); + glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC) load(userptr, "glGetProgramResourceName"); + glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC) load(userptr, "glGetProgramResourceiv"); + glad_glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC) load(userptr, "glInvalidateBufferData"); + glad_glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC) load(userptr, "glInvalidateBufferSubData"); + glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC) load(userptr, "glInvalidateFramebuffer"); + glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC) load(userptr, "glInvalidateSubFramebuffer"); + glad_glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC) load(userptr, "glInvalidateTexImage"); + glad_glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC) load(userptr, "glInvalidateTexSubImage"); + glad_glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC) load(userptr, "glMultiDrawArraysIndirect"); + glad_glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC) load(userptr, "glMultiDrawElementsIndirect"); + glad_glObjectLabel = (PFNGLOBJECTLABELPROC) load(userptr, "glObjectLabel"); + glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC) load(userptr, "glObjectPtrLabel"); + glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC) load(userptr, "glPopDebugGroup"); + glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC) load(userptr, "glPushDebugGroup"); + glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC) load(userptr, "glShaderStorageBlockBinding"); + glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC) load(userptr, "glTexBufferRange"); + glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC) load(userptr, "glTexStorage2DMultisample"); + glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC) load(userptr, "glTexStorage3DMultisample"); + glad_glTextureView = (PFNGLTEXTUREVIEWPROC) load(userptr, "glTextureView"); + glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC) load(userptr, "glVertexAttribBinding"); + glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC) load(userptr, "glVertexAttribFormat"); + glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC) load(userptr, "glVertexAttribIFormat"); + glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC) load(userptr, "glVertexAttribLFormat"); + glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC) load(userptr, "glVertexBindingDivisor"); +} +static void glad_gl_load_GL_3DFX_tbuffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_3DFX_tbuffer) return; + glad_glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC) load(userptr, "glTbufferMask3DFX"); +} +static void glad_gl_load_GL_AMD_debug_output( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_debug_output) return; + glad_glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC) load(userptr, "glDebugMessageCallbackAMD"); + glad_glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC) load(userptr, "glDebugMessageEnableAMD"); + glad_glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC) load(userptr, "glDebugMessageInsertAMD"); + glad_glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC) load(userptr, "glGetDebugMessageLogAMD"); +} +static void glad_gl_load_GL_AMD_draw_buffers_blend( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_draw_buffers_blend) return; + glad_glBlendEquationIndexedAMD = (PFNGLBLENDEQUATIONINDEXEDAMDPROC) load(userptr, "glBlendEquationIndexedAMD"); + glad_glBlendEquationSeparateIndexedAMD = (PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) load(userptr, "glBlendEquationSeparateIndexedAMD"); + glad_glBlendFuncIndexedAMD = (PFNGLBLENDFUNCINDEXEDAMDPROC) load(userptr, "glBlendFuncIndexedAMD"); + glad_glBlendFuncSeparateIndexedAMD = (PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) load(userptr, "glBlendFuncSeparateIndexedAMD"); +} +static void glad_gl_load_GL_AMD_framebuffer_multisample_advanced( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_framebuffer_multisample_advanced) return; + glad_glNamedRenderbufferStorageMultisampleAdvancedAMD = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) load(userptr, "glNamedRenderbufferStorageMultisampleAdvancedAMD"); + glad_glRenderbufferStorageMultisampleAdvancedAMD = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) load(userptr, "glRenderbufferStorageMultisampleAdvancedAMD"); +} +static void glad_gl_load_GL_AMD_framebuffer_sample_positions( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_framebuffer_sample_positions) return; + glad_glFramebufferSamplePositionsfvAMD = (PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) load(userptr, "glFramebufferSamplePositionsfvAMD"); + glad_glGetFramebufferParameterfvAMD = (PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) load(userptr, "glGetFramebufferParameterfvAMD"); + glad_glGetNamedFramebufferParameterfvAMD = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) load(userptr, "glGetNamedFramebufferParameterfvAMD"); + glad_glNamedFramebufferSamplePositionsfvAMD = (PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) load(userptr, "glNamedFramebufferSamplePositionsfvAMD"); +} +static void glad_gl_load_GL_AMD_gpu_shader_int64( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_gpu_shader_int64) return; + glad_glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC) load(userptr, "glGetUniformi64vNV"); + glad_glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC) load(userptr, "glGetUniformui64vNV"); + glad_glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC) load(userptr, "glProgramUniform1i64NV"); + glad_glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC) load(userptr, "glProgramUniform1i64vNV"); + glad_glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC) load(userptr, "glProgramUniform1ui64NV"); + glad_glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC) load(userptr, "glProgramUniform1ui64vNV"); + glad_glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC) load(userptr, "glProgramUniform2i64NV"); + glad_glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC) load(userptr, "glProgramUniform2i64vNV"); + glad_glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC) load(userptr, "glProgramUniform2ui64NV"); + glad_glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC) load(userptr, "glProgramUniform2ui64vNV"); + glad_glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC) load(userptr, "glProgramUniform3i64NV"); + glad_glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC) load(userptr, "glProgramUniform3i64vNV"); + glad_glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC) load(userptr, "glProgramUniform3ui64NV"); + glad_glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC) load(userptr, "glProgramUniform3ui64vNV"); + glad_glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC) load(userptr, "glProgramUniform4i64NV"); + glad_glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC) load(userptr, "glProgramUniform4i64vNV"); + glad_glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC) load(userptr, "glProgramUniform4ui64NV"); + glad_glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC) load(userptr, "glProgramUniform4ui64vNV"); + glad_glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC) load(userptr, "glUniform1i64NV"); + glad_glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC) load(userptr, "glUniform1i64vNV"); + glad_glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC) load(userptr, "glUniform1ui64NV"); + glad_glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC) load(userptr, "glUniform1ui64vNV"); + glad_glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC) load(userptr, "glUniform2i64NV"); + glad_glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC) load(userptr, "glUniform2i64vNV"); + glad_glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC) load(userptr, "glUniform2ui64NV"); + glad_glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC) load(userptr, "glUniform2ui64vNV"); + glad_glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC) load(userptr, "glUniform3i64NV"); + glad_glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC) load(userptr, "glUniform3i64vNV"); + glad_glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC) load(userptr, "glUniform3ui64NV"); + glad_glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC) load(userptr, "glUniform3ui64vNV"); + glad_glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC) load(userptr, "glUniform4i64NV"); + glad_glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC) load(userptr, "glUniform4i64vNV"); + glad_glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC) load(userptr, "glUniform4ui64NV"); + glad_glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC) load(userptr, "glUniform4ui64vNV"); +} +static void glad_gl_load_GL_AMD_interleaved_elements( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_interleaved_elements) return; + glad_glVertexAttribParameteriAMD = (PFNGLVERTEXATTRIBPARAMETERIAMDPROC) load(userptr, "glVertexAttribParameteriAMD"); +} +static void glad_gl_load_GL_AMD_multi_draw_indirect( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_multi_draw_indirect) return; + glad_glMultiDrawArraysIndirectAMD = (PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) load(userptr, "glMultiDrawArraysIndirectAMD"); + glad_glMultiDrawElementsIndirectAMD = (PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) load(userptr, "glMultiDrawElementsIndirectAMD"); +} +static void glad_gl_load_GL_AMD_name_gen_delete( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_name_gen_delete) return; + glad_glDeleteNamesAMD = (PFNGLDELETENAMESAMDPROC) load(userptr, "glDeleteNamesAMD"); + glad_glGenNamesAMD = (PFNGLGENNAMESAMDPROC) load(userptr, "glGenNamesAMD"); + glad_glIsNameAMD = (PFNGLISNAMEAMDPROC) load(userptr, "glIsNameAMD"); +} +static void glad_gl_load_GL_AMD_occlusion_query_event( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_occlusion_query_event) return; + glad_glQueryObjectParameteruiAMD = (PFNGLQUERYOBJECTPARAMETERUIAMDPROC) load(userptr, "glQueryObjectParameteruiAMD"); +} +static void glad_gl_load_GL_AMD_performance_monitor( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_performance_monitor) return; + glad_glBeginPerfMonitorAMD = (PFNGLBEGINPERFMONITORAMDPROC) load(userptr, "glBeginPerfMonitorAMD"); + glad_glDeletePerfMonitorsAMD = (PFNGLDELETEPERFMONITORSAMDPROC) load(userptr, "glDeletePerfMonitorsAMD"); + glad_glEndPerfMonitorAMD = (PFNGLENDPERFMONITORAMDPROC) load(userptr, "glEndPerfMonitorAMD"); + glad_glGenPerfMonitorsAMD = (PFNGLGENPERFMONITORSAMDPROC) load(userptr, "glGenPerfMonitorsAMD"); + glad_glGetPerfMonitorCounterDataAMD = (PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) load(userptr, "glGetPerfMonitorCounterDataAMD"); + glad_glGetPerfMonitorCounterInfoAMD = (PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) load(userptr, "glGetPerfMonitorCounterInfoAMD"); + glad_glGetPerfMonitorCounterStringAMD = (PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) load(userptr, "glGetPerfMonitorCounterStringAMD"); + glad_glGetPerfMonitorCountersAMD = (PFNGLGETPERFMONITORCOUNTERSAMDPROC) load(userptr, "glGetPerfMonitorCountersAMD"); + glad_glGetPerfMonitorGroupStringAMD = (PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) load(userptr, "glGetPerfMonitorGroupStringAMD"); + glad_glGetPerfMonitorGroupsAMD = (PFNGLGETPERFMONITORGROUPSAMDPROC) load(userptr, "glGetPerfMonitorGroupsAMD"); + glad_glSelectPerfMonitorCountersAMD = (PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) load(userptr, "glSelectPerfMonitorCountersAMD"); +} +static void glad_gl_load_GL_AMD_sample_positions( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_sample_positions) return; + glad_glSetMultisamplefvAMD = (PFNGLSETMULTISAMPLEFVAMDPROC) load(userptr, "glSetMultisamplefvAMD"); +} +static void glad_gl_load_GL_AMD_sparse_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_sparse_texture) return; + glad_glTexStorageSparseAMD = (PFNGLTEXSTORAGESPARSEAMDPROC) load(userptr, "glTexStorageSparseAMD"); + glad_glTextureStorageSparseAMD = (PFNGLTEXTURESTORAGESPARSEAMDPROC) load(userptr, "glTextureStorageSparseAMD"); +} +static void glad_gl_load_GL_AMD_stencil_operation_extended( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_stencil_operation_extended) return; + glad_glStencilOpValueAMD = (PFNGLSTENCILOPVALUEAMDPROC) load(userptr, "glStencilOpValueAMD"); +} +static void glad_gl_load_GL_AMD_vertex_shader_tessellator( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_AMD_vertex_shader_tessellator) return; + glad_glTessellationFactorAMD = (PFNGLTESSELLATIONFACTORAMDPROC) load(userptr, "glTessellationFactorAMD"); + glad_glTessellationModeAMD = (PFNGLTESSELLATIONMODEAMDPROC) load(userptr, "glTessellationModeAMD"); +} +static void glad_gl_load_GL_APPLE_element_array( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_element_array) return; + glad_glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC) load(userptr, "glDrawElementArrayAPPLE"); + glad_glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) load(userptr, "glDrawRangeElementArrayAPPLE"); + glad_glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC) load(userptr, "glElementPointerAPPLE"); + glad_glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) load(userptr, "glMultiDrawElementArrayAPPLE"); + glad_glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) load(userptr, "glMultiDrawRangeElementArrayAPPLE"); +} +static void glad_gl_load_GL_APPLE_fence( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_fence) return; + glad_glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC) load(userptr, "glDeleteFencesAPPLE"); + glad_glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC) load(userptr, "glFinishFenceAPPLE"); + glad_glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC) load(userptr, "glFinishObjectAPPLE"); + glad_glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC) load(userptr, "glGenFencesAPPLE"); + glad_glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC) load(userptr, "glIsFenceAPPLE"); + glad_glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC) load(userptr, "glSetFenceAPPLE"); + glad_glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC) load(userptr, "glTestFenceAPPLE"); + glad_glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC) load(userptr, "glTestObjectAPPLE"); +} +static void glad_gl_load_GL_APPLE_flush_buffer_range( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_flush_buffer_range) return; + glad_glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC) load(userptr, "glBufferParameteriAPPLE"); + glad_glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) load(userptr, "glFlushMappedBufferRangeAPPLE"); +} +static void glad_gl_load_GL_APPLE_object_purgeable( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_object_purgeable) return; + glad_glGetObjectParameterivAPPLE = (PFNGLGETOBJECTPARAMETERIVAPPLEPROC) load(userptr, "glGetObjectParameterivAPPLE"); + glad_glObjectPurgeableAPPLE = (PFNGLOBJECTPURGEABLEAPPLEPROC) load(userptr, "glObjectPurgeableAPPLE"); + glad_glObjectUnpurgeableAPPLE = (PFNGLOBJECTUNPURGEABLEAPPLEPROC) load(userptr, "glObjectUnpurgeableAPPLE"); +} +static void glad_gl_load_GL_APPLE_texture_range( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_texture_range) return; + glad_glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) load(userptr, "glGetTexParameterPointervAPPLE"); + glad_glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC) load(userptr, "glTextureRangeAPPLE"); +} +static void glad_gl_load_GL_APPLE_vertex_array_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_vertex_array_object) return; + glad_glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC) load(userptr, "glBindVertexArrayAPPLE"); + glad_glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC) load(userptr, "glDeleteVertexArraysAPPLE"); + glad_glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC) load(userptr, "glGenVertexArraysAPPLE"); + glad_glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC) load(userptr, "glIsVertexArrayAPPLE"); +} +static void glad_gl_load_GL_APPLE_vertex_array_range( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_vertex_array_range) return; + glad_glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) load(userptr, "glFlushVertexArrayRangeAPPLE"); + glad_glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) load(userptr, "glVertexArrayParameteriAPPLE"); + glad_glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC) load(userptr, "glVertexArrayRangeAPPLE"); +} +static void glad_gl_load_GL_APPLE_vertex_program_evaluators( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_APPLE_vertex_program_evaluators) return; + glad_glDisableVertexAttribAPPLE = (PFNGLDISABLEVERTEXATTRIBAPPLEPROC) load(userptr, "glDisableVertexAttribAPPLE"); + glad_glEnableVertexAttribAPPLE = (PFNGLENABLEVERTEXATTRIBAPPLEPROC) load(userptr, "glEnableVertexAttribAPPLE"); + glad_glIsVertexAttribEnabledAPPLE = (PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) load(userptr, "glIsVertexAttribEnabledAPPLE"); + glad_glMapVertexAttrib1dAPPLE = (PFNGLMAPVERTEXATTRIB1DAPPLEPROC) load(userptr, "glMapVertexAttrib1dAPPLE"); + glad_glMapVertexAttrib1fAPPLE = (PFNGLMAPVERTEXATTRIB1FAPPLEPROC) load(userptr, "glMapVertexAttrib1fAPPLE"); + glad_glMapVertexAttrib2dAPPLE = (PFNGLMAPVERTEXATTRIB2DAPPLEPROC) load(userptr, "glMapVertexAttrib2dAPPLE"); + glad_glMapVertexAttrib2fAPPLE = (PFNGLMAPVERTEXATTRIB2FAPPLEPROC) load(userptr, "glMapVertexAttrib2fAPPLE"); +} +static void glad_gl_load_GL_ARB_ES2_compatibility( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_ES2_compatibility) return; + glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC) load(userptr, "glClearDepthf"); + glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC) load(userptr, "glDepthRangef"); + glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC) load(userptr, "glGetShaderPrecisionFormat"); + glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC) load(userptr, "glReleaseShaderCompiler"); + glad_glShaderBinary = (PFNGLSHADERBINARYPROC) load(userptr, "glShaderBinary"); +} +static void glad_gl_load_GL_ARB_ES3_1_compatibility( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_ES3_1_compatibility) return; + glad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC) load(userptr, "glMemoryBarrierByRegion"); +} +static void glad_gl_load_GL_ARB_ES3_2_compatibility( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_ES3_2_compatibility) return; + glad_glPrimitiveBoundingBoxARB = (PFNGLPRIMITIVEBOUNDINGBOXARBPROC) load(userptr, "glPrimitiveBoundingBoxARB"); +} +static void glad_gl_load_GL_ARB_base_instance( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_base_instance) return; + glad_glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) load(userptr, "glDrawArraysInstancedBaseInstance"); + glad_glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) load(userptr, "glDrawElementsInstancedBaseInstance"); + glad_glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) load(userptr, "glDrawElementsInstancedBaseVertexBaseInstance"); +} +static void glad_gl_load_GL_ARB_bindless_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_bindless_texture) return; + glad_glGetImageHandleARB = (PFNGLGETIMAGEHANDLEARBPROC) load(userptr, "glGetImageHandleARB"); + glad_glGetTextureHandleARB = (PFNGLGETTEXTUREHANDLEARBPROC) load(userptr, "glGetTextureHandleARB"); + glad_glGetTextureSamplerHandleARB = (PFNGLGETTEXTURESAMPLERHANDLEARBPROC) load(userptr, "glGetTextureSamplerHandleARB"); + glad_glGetVertexAttribLui64vARB = (PFNGLGETVERTEXATTRIBLUI64VARBPROC) load(userptr, "glGetVertexAttribLui64vARB"); + glad_glIsImageHandleResidentARB = (PFNGLISIMAGEHANDLERESIDENTARBPROC) load(userptr, "glIsImageHandleResidentARB"); + glad_glIsTextureHandleResidentARB = (PFNGLISTEXTUREHANDLERESIDENTARBPROC) load(userptr, "glIsTextureHandleResidentARB"); + glad_glMakeImageHandleNonResidentARB = (PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) load(userptr, "glMakeImageHandleNonResidentARB"); + glad_glMakeImageHandleResidentARB = (PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) load(userptr, "glMakeImageHandleResidentARB"); + glad_glMakeTextureHandleNonResidentARB = (PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) load(userptr, "glMakeTextureHandleNonResidentARB"); + glad_glMakeTextureHandleResidentARB = (PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) load(userptr, "glMakeTextureHandleResidentARB"); + glad_glProgramUniformHandleui64ARB = (PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) load(userptr, "glProgramUniformHandleui64ARB"); + glad_glProgramUniformHandleui64vARB = (PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) load(userptr, "glProgramUniformHandleui64vARB"); + glad_glUniformHandleui64ARB = (PFNGLUNIFORMHANDLEUI64ARBPROC) load(userptr, "glUniformHandleui64ARB"); + glad_glUniformHandleui64vARB = (PFNGLUNIFORMHANDLEUI64VARBPROC) load(userptr, "glUniformHandleui64vARB"); + glad_glVertexAttribL1ui64ARB = (PFNGLVERTEXATTRIBL1UI64ARBPROC) load(userptr, "glVertexAttribL1ui64ARB"); + glad_glVertexAttribL1ui64vARB = (PFNGLVERTEXATTRIBL1UI64VARBPROC) load(userptr, "glVertexAttribL1ui64vARB"); +} +static void glad_gl_load_GL_ARB_blend_func_extended( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_blend_func_extended) return; + glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) load(userptr, "glBindFragDataLocationIndexed"); + glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC) load(userptr, "glGetFragDataIndex"); +} +static void glad_gl_load_GL_ARB_buffer_storage( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_buffer_storage) return; + glad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC) load(userptr, "glBufferStorage"); +} +static void glad_gl_load_GL_ARB_cl_event( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_cl_event) return; + glad_glCreateSyncFromCLeventARB = (PFNGLCREATESYNCFROMCLEVENTARBPROC) load(userptr, "glCreateSyncFromCLeventARB"); +} +static void glad_gl_load_GL_ARB_clear_buffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_clear_buffer_object) return; + glad_glClearBufferData = (PFNGLCLEARBUFFERDATAPROC) load(userptr, "glClearBufferData"); + glad_glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC) load(userptr, "glClearBufferSubData"); +} +static void glad_gl_load_GL_ARB_clear_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_clear_texture) return; + glad_glClearTexImage = (PFNGLCLEARTEXIMAGEPROC) load(userptr, "glClearTexImage"); + glad_glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC) load(userptr, "glClearTexSubImage"); +} +static void glad_gl_load_GL_ARB_clip_control( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_clip_control) return; + glad_glClipControl = (PFNGLCLIPCONTROLPROC) load(userptr, "glClipControl"); +} +static void glad_gl_load_GL_ARB_color_buffer_float( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_color_buffer_float) return; + glad_glClampColorARB = (PFNGLCLAMPCOLORARBPROC) load(userptr, "glClampColorARB"); +} +static void glad_gl_load_GL_ARB_compute_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_compute_shader) return; + glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC) load(userptr, "glDispatchCompute"); + glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC) load(userptr, "glDispatchComputeIndirect"); +} +static void glad_gl_load_GL_ARB_compute_variable_group_size( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_compute_variable_group_size) return; + glad_glDispatchComputeGroupSizeARB = (PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) load(userptr, "glDispatchComputeGroupSizeARB"); +} +static void glad_gl_load_GL_ARB_copy_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_copy_buffer) return; + glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC) load(userptr, "glCopyBufferSubData"); +} +static void glad_gl_load_GL_ARB_copy_image( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_copy_image) return; + glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC) load(userptr, "glCopyImageSubData"); +} +static void glad_gl_load_GL_ARB_debug_output( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_debug_output) return; + glad_glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC) load(userptr, "glDebugMessageCallbackARB"); + glad_glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC) load(userptr, "glDebugMessageControlARB"); + glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC) load(userptr, "glDebugMessageInsertARB"); + glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC) load(userptr, "glGetDebugMessageLogARB"); +} +static void glad_gl_load_GL_ARB_direct_state_access( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_direct_state_access) return; + glad_glBindTextureUnit = (PFNGLBINDTEXTUREUNITPROC) load(userptr, "glBindTextureUnit"); + glad_glBlitNamedFramebuffer = (PFNGLBLITNAMEDFRAMEBUFFERPROC) load(userptr, "glBlitNamedFramebuffer"); + glad_glCheckNamedFramebufferStatus = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) load(userptr, "glCheckNamedFramebufferStatus"); + glad_glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC) load(userptr, "glClearNamedBufferData"); + glad_glClearNamedBufferSubData = (PFNGLCLEARNAMEDBUFFERSUBDATAPROC) load(userptr, "glClearNamedBufferSubData"); + glad_glClearNamedFramebufferfi = (PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) load(userptr, "glClearNamedFramebufferfi"); + glad_glClearNamedFramebufferfv = (PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) load(userptr, "glClearNamedFramebufferfv"); + glad_glClearNamedFramebufferiv = (PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) load(userptr, "glClearNamedFramebufferiv"); + glad_glClearNamedFramebufferuiv = (PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) load(userptr, "glClearNamedFramebufferuiv"); + glad_glCompressedTextureSubImage1D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) load(userptr, "glCompressedTextureSubImage1D"); + glad_glCompressedTextureSubImage2D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) load(userptr, "glCompressedTextureSubImage2D"); + glad_glCompressedTextureSubImage3D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) load(userptr, "glCompressedTextureSubImage3D"); + glad_glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC) load(userptr, "glCopyNamedBufferSubData"); + glad_glCopyTextureSubImage1D = (PFNGLCOPYTEXTURESUBIMAGE1DPROC) load(userptr, "glCopyTextureSubImage1D"); + glad_glCopyTextureSubImage2D = (PFNGLCOPYTEXTURESUBIMAGE2DPROC) load(userptr, "glCopyTextureSubImage2D"); + glad_glCopyTextureSubImage3D = (PFNGLCOPYTEXTURESUBIMAGE3DPROC) load(userptr, "glCopyTextureSubImage3D"); + glad_glCreateBuffers = (PFNGLCREATEBUFFERSPROC) load(userptr, "glCreateBuffers"); + glad_glCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC) load(userptr, "glCreateFramebuffers"); + glad_glCreateProgramPipelines = (PFNGLCREATEPROGRAMPIPELINESPROC) load(userptr, "glCreateProgramPipelines"); + glad_glCreateQueries = (PFNGLCREATEQUERIESPROC) load(userptr, "glCreateQueries"); + glad_glCreateRenderbuffers = (PFNGLCREATERENDERBUFFERSPROC) load(userptr, "glCreateRenderbuffers"); + glad_glCreateSamplers = (PFNGLCREATESAMPLERSPROC) load(userptr, "glCreateSamplers"); + glad_glCreateTextures = (PFNGLCREATETEXTURESPROC) load(userptr, "glCreateTextures"); + glad_glCreateTransformFeedbacks = (PFNGLCREATETRANSFORMFEEDBACKSPROC) load(userptr, "glCreateTransformFeedbacks"); + glad_glCreateVertexArrays = (PFNGLCREATEVERTEXARRAYSPROC) load(userptr, "glCreateVertexArrays"); + glad_glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC) load(userptr, "glDisableVertexArrayAttrib"); + glad_glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC) load(userptr, "glEnableVertexArrayAttrib"); + glad_glFlushMappedNamedBufferRange = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) load(userptr, "glFlushMappedNamedBufferRange"); + glad_glGenerateTextureMipmap = (PFNGLGENERATETEXTUREMIPMAPPROC) load(userptr, "glGenerateTextureMipmap"); + glad_glGetCompressedTextureImage = (PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) load(userptr, "glGetCompressedTextureImage"); + glad_glGetNamedBufferParameteri64v = (PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) load(userptr, "glGetNamedBufferParameteri64v"); + glad_glGetNamedBufferParameteriv = (PFNGLGETNAMEDBUFFERPARAMETERIVPROC) load(userptr, "glGetNamedBufferParameteriv"); + glad_glGetNamedBufferPointerv = (PFNGLGETNAMEDBUFFERPOINTERVPROC) load(userptr, "glGetNamedBufferPointerv"); + glad_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC) load(userptr, "glGetNamedBufferSubData"); + glad_glGetNamedFramebufferAttachmentParameteriv = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) load(userptr, "glGetNamedFramebufferAttachmentParameteriv"); + glad_glGetNamedFramebufferParameteriv = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) load(userptr, "glGetNamedFramebufferParameteriv"); + glad_glGetNamedRenderbufferParameteriv = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) load(userptr, "glGetNamedRenderbufferParameteriv"); + glad_glGetQueryBufferObjecti64v = (PFNGLGETQUERYBUFFEROBJECTI64VPROC) load(userptr, "glGetQueryBufferObjecti64v"); + glad_glGetQueryBufferObjectiv = (PFNGLGETQUERYBUFFEROBJECTIVPROC) load(userptr, "glGetQueryBufferObjectiv"); + glad_glGetQueryBufferObjectui64v = (PFNGLGETQUERYBUFFEROBJECTUI64VPROC) load(userptr, "glGetQueryBufferObjectui64v"); + glad_glGetQueryBufferObjectuiv = (PFNGLGETQUERYBUFFEROBJECTUIVPROC) load(userptr, "glGetQueryBufferObjectuiv"); + glad_glGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC) load(userptr, "glGetTextureImage"); + glad_glGetTextureLevelParameterfv = (PFNGLGETTEXTURELEVELPARAMETERFVPROC) load(userptr, "glGetTextureLevelParameterfv"); + glad_glGetTextureLevelParameteriv = (PFNGLGETTEXTURELEVELPARAMETERIVPROC) load(userptr, "glGetTextureLevelParameteriv"); + glad_glGetTextureParameterIiv = (PFNGLGETTEXTUREPARAMETERIIVPROC) load(userptr, "glGetTextureParameterIiv"); + glad_glGetTextureParameterIuiv = (PFNGLGETTEXTUREPARAMETERIUIVPROC) load(userptr, "glGetTextureParameterIuiv"); + glad_glGetTextureParameterfv = (PFNGLGETTEXTUREPARAMETERFVPROC) load(userptr, "glGetTextureParameterfv"); + glad_glGetTextureParameteriv = (PFNGLGETTEXTUREPARAMETERIVPROC) load(userptr, "glGetTextureParameteriv"); + glad_glGetTransformFeedbacki64_v = (PFNGLGETTRANSFORMFEEDBACKI64_VPROC) load(userptr, "glGetTransformFeedbacki64_v"); + glad_glGetTransformFeedbacki_v = (PFNGLGETTRANSFORMFEEDBACKI_VPROC) load(userptr, "glGetTransformFeedbacki_v"); + glad_glGetTransformFeedbackiv = (PFNGLGETTRANSFORMFEEDBACKIVPROC) load(userptr, "glGetTransformFeedbackiv"); + glad_glGetVertexArrayIndexed64iv = (PFNGLGETVERTEXARRAYINDEXED64IVPROC) load(userptr, "glGetVertexArrayIndexed64iv"); + glad_glGetVertexArrayIndexediv = (PFNGLGETVERTEXARRAYINDEXEDIVPROC) load(userptr, "glGetVertexArrayIndexediv"); + glad_glGetVertexArrayiv = (PFNGLGETVERTEXARRAYIVPROC) load(userptr, "glGetVertexArrayiv"); + glad_glInvalidateNamedFramebufferData = (PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) load(userptr, "glInvalidateNamedFramebufferData"); + glad_glInvalidateNamedFramebufferSubData = (PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) load(userptr, "glInvalidateNamedFramebufferSubData"); + glad_glMapNamedBuffer = (PFNGLMAPNAMEDBUFFERPROC) load(userptr, "glMapNamedBuffer"); + glad_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC) load(userptr, "glMapNamedBufferRange"); + glad_glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC) load(userptr, "glNamedBufferData"); + glad_glNamedBufferStorage = (PFNGLNAMEDBUFFERSTORAGEPROC) load(userptr, "glNamedBufferStorage"); + glad_glNamedBufferSubData = (PFNGLNAMEDBUFFERSUBDATAPROC) load(userptr, "glNamedBufferSubData"); + glad_glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) load(userptr, "glNamedFramebufferDrawBuffer"); + glad_glNamedFramebufferDrawBuffers = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) load(userptr, "glNamedFramebufferDrawBuffers"); + glad_glNamedFramebufferParameteri = (PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) load(userptr, "glNamedFramebufferParameteri"); + glad_glNamedFramebufferReadBuffer = (PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) load(userptr, "glNamedFramebufferReadBuffer"); + glad_glNamedFramebufferRenderbuffer = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) load(userptr, "glNamedFramebufferRenderbuffer"); + glad_glNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) load(userptr, "glNamedFramebufferTexture"); + glad_glNamedFramebufferTextureLayer = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) load(userptr, "glNamedFramebufferTextureLayer"); + glad_glNamedRenderbufferStorage = (PFNGLNAMEDRENDERBUFFERSTORAGEPROC) load(userptr, "glNamedRenderbufferStorage"); + glad_glNamedRenderbufferStorageMultisample = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) load(userptr, "glNamedRenderbufferStorageMultisample"); + glad_glTextureBuffer = (PFNGLTEXTUREBUFFERPROC) load(userptr, "glTextureBuffer"); + glad_glTextureBufferRange = (PFNGLTEXTUREBUFFERRANGEPROC) load(userptr, "glTextureBufferRange"); + glad_glTextureParameterIiv = (PFNGLTEXTUREPARAMETERIIVPROC) load(userptr, "glTextureParameterIiv"); + glad_glTextureParameterIuiv = (PFNGLTEXTUREPARAMETERIUIVPROC) load(userptr, "glTextureParameterIuiv"); + glad_glTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC) load(userptr, "glTextureParameterf"); + glad_glTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC) load(userptr, "glTextureParameterfv"); + glad_glTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC) load(userptr, "glTextureParameteri"); + glad_glTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC) load(userptr, "glTextureParameteriv"); + glad_glTextureStorage1D = (PFNGLTEXTURESTORAGE1DPROC) load(userptr, "glTextureStorage1D"); + glad_glTextureStorage2D = (PFNGLTEXTURESTORAGE2DPROC) load(userptr, "glTextureStorage2D"); + glad_glTextureStorage2DMultisample = (PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) load(userptr, "glTextureStorage2DMultisample"); + glad_glTextureStorage3D = (PFNGLTEXTURESTORAGE3DPROC) load(userptr, "glTextureStorage3D"); + glad_glTextureStorage3DMultisample = (PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) load(userptr, "glTextureStorage3DMultisample"); + glad_glTextureSubImage1D = (PFNGLTEXTURESUBIMAGE1DPROC) load(userptr, "glTextureSubImage1D"); + glad_glTextureSubImage2D = (PFNGLTEXTURESUBIMAGE2DPROC) load(userptr, "glTextureSubImage2D"); + glad_glTextureSubImage3D = (PFNGLTEXTURESUBIMAGE3DPROC) load(userptr, "glTextureSubImage3D"); + glad_glTransformFeedbackBufferBase = (PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) load(userptr, "glTransformFeedbackBufferBase"); + glad_glTransformFeedbackBufferRange = (PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) load(userptr, "glTransformFeedbackBufferRange"); + glad_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC) load(userptr, "glUnmapNamedBuffer"); + glad_glVertexArrayAttribBinding = (PFNGLVERTEXARRAYATTRIBBINDINGPROC) load(userptr, "glVertexArrayAttribBinding"); + glad_glVertexArrayAttribFormat = (PFNGLVERTEXARRAYATTRIBFORMATPROC) load(userptr, "glVertexArrayAttribFormat"); + glad_glVertexArrayAttribIFormat = (PFNGLVERTEXARRAYATTRIBIFORMATPROC) load(userptr, "glVertexArrayAttribIFormat"); + glad_glVertexArrayAttribLFormat = (PFNGLVERTEXARRAYATTRIBLFORMATPROC) load(userptr, "glVertexArrayAttribLFormat"); + glad_glVertexArrayBindingDivisor = (PFNGLVERTEXARRAYBINDINGDIVISORPROC) load(userptr, "glVertexArrayBindingDivisor"); + glad_glVertexArrayElementBuffer = (PFNGLVERTEXARRAYELEMENTBUFFERPROC) load(userptr, "glVertexArrayElementBuffer"); + glad_glVertexArrayVertexBuffer = (PFNGLVERTEXARRAYVERTEXBUFFERPROC) load(userptr, "glVertexArrayVertexBuffer"); + glad_glVertexArrayVertexBuffers = (PFNGLVERTEXARRAYVERTEXBUFFERSPROC) load(userptr, "glVertexArrayVertexBuffers"); +} +static void glad_gl_load_GL_ARB_draw_buffers( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_draw_buffers) return; + glad_glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC) load(userptr, "glDrawBuffersARB"); +} +static void glad_gl_load_GL_ARB_draw_buffers_blend( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_draw_buffers_blend) return; + glad_glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC) load(userptr, "glBlendEquationSeparateiARB"); + glad_glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC) load(userptr, "glBlendEquationiARB"); + glad_glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC) load(userptr, "glBlendFuncSeparateiARB"); + glad_glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC) load(userptr, "glBlendFunciARB"); +} +static void glad_gl_load_GL_ARB_draw_elements_base_vertex( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_draw_elements_base_vertex) return; + glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC) load(userptr, "glDrawElementsBaseVertex"); + glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) load(userptr, "glDrawElementsInstancedBaseVertex"); + glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) load(userptr, "glDrawRangeElementsBaseVertex"); + glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) load(userptr, "glMultiDrawElementsBaseVertex"); +} +static void glad_gl_load_GL_ARB_draw_indirect( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_draw_indirect) return; + glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC) load(userptr, "glDrawArraysIndirect"); + glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC) load(userptr, "glDrawElementsIndirect"); +} +static void glad_gl_load_GL_ARB_draw_instanced( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_draw_instanced) return; + glad_glDrawArraysInstancedARB = (PFNGLDRAWARRAYSINSTANCEDARBPROC) load(userptr, "glDrawArraysInstancedARB"); + glad_glDrawElementsInstancedARB = (PFNGLDRAWELEMENTSINSTANCEDARBPROC) load(userptr, "glDrawElementsInstancedARB"); +} +static void glad_gl_load_GL_ARB_fragment_program( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_fragment_program) return; + glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) load(userptr, "glBindProgramARB"); + glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC) load(userptr, "glDeleteProgramsARB"); + glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) load(userptr, "glGenProgramsARB"); + glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC) load(userptr, "glGetProgramEnvParameterdvARB"); + glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC) load(userptr, "glGetProgramEnvParameterfvARB"); + glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) load(userptr, "glGetProgramLocalParameterdvARB"); + glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) load(userptr, "glGetProgramLocalParameterfvARB"); + glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC) load(userptr, "glGetProgramStringARB"); + glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC) load(userptr, "glGetProgramivARB"); + glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC) load(userptr, "glIsProgramARB"); + glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC) load(userptr, "glProgramEnvParameter4dARB"); + glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC) load(userptr, "glProgramEnvParameter4dvARB"); + glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC) load(userptr, "glProgramEnvParameter4fARB"); + glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC) load(userptr, "glProgramEnvParameter4fvARB"); + glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) load(userptr, "glProgramLocalParameter4dARB"); + glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) load(userptr, "glProgramLocalParameter4dvARB"); + glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC) load(userptr, "glProgramLocalParameter4fARB"); + glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) load(userptr, "glProgramLocalParameter4fvARB"); + glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) load(userptr, "glProgramStringARB"); +} +static void glad_gl_load_GL_ARB_framebuffer_no_attachments( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_framebuffer_no_attachments) return; + glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC) load(userptr, "glFramebufferParameteri"); + glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC) load(userptr, "glGetFramebufferParameteriv"); +} +static void glad_gl_load_GL_ARB_framebuffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_framebuffer_object) return; + glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) load(userptr, "glBindFramebuffer"); + glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) load(userptr, "glBindRenderbuffer"); + glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC) load(userptr, "glBlitFramebuffer"); + glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) load(userptr, "glCheckFramebufferStatus"); + glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) load(userptr, "glDeleteFramebuffers"); + glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) load(userptr, "glDeleteRenderbuffers"); + glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) load(userptr, "glFramebufferRenderbuffer"); + glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC) load(userptr, "glFramebufferTexture1D"); + glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) load(userptr, "glFramebufferTexture2D"); + glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC) load(userptr, "glFramebufferTexture3D"); + glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC) load(userptr, "glFramebufferTextureLayer"); + glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) load(userptr, "glGenFramebuffers"); + glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) load(userptr, "glGenRenderbuffers"); + glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) load(userptr, "glGenerateMipmap"); + glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) load(userptr, "glGetFramebufferAttachmentParameteriv"); + glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC) load(userptr, "glGetRenderbufferParameteriv"); + glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC) load(userptr, "glIsFramebuffer"); + glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC) load(userptr, "glIsRenderbuffer"); + glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) load(userptr, "glRenderbufferStorage"); + glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) load(userptr, "glRenderbufferStorageMultisample"); +} +static void glad_gl_load_GL_ARB_geometry_shader4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_geometry_shader4) return; + glad_glFramebufferTextureARB = (PFNGLFRAMEBUFFERTEXTUREARBPROC) load(userptr, "glFramebufferTextureARB"); + glad_glFramebufferTextureFaceARB = (PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) load(userptr, "glFramebufferTextureFaceARB"); + glad_glFramebufferTextureLayerARB = (PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) load(userptr, "glFramebufferTextureLayerARB"); + glad_glProgramParameteriARB = (PFNGLPROGRAMPARAMETERIARBPROC) load(userptr, "glProgramParameteriARB"); +} +static void glad_gl_load_GL_ARB_get_program_binary( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_get_program_binary) return; + glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC) load(userptr, "glGetProgramBinary"); + glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC) load(userptr, "glProgramBinary"); + glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC) load(userptr, "glProgramParameteri"); +} +static void glad_gl_load_GL_ARB_get_texture_sub_image( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_get_texture_sub_image) return; + glad_glGetCompressedTextureSubImage = (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) load(userptr, "glGetCompressedTextureSubImage"); + glad_glGetTextureSubImage = (PFNGLGETTEXTURESUBIMAGEPROC) load(userptr, "glGetTextureSubImage"); +} +static void glad_gl_load_GL_ARB_gl_spirv( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_gl_spirv) return; + glad_glSpecializeShaderARB = (PFNGLSPECIALIZESHADERARBPROC) load(userptr, "glSpecializeShaderARB"); +} +static void glad_gl_load_GL_ARB_gpu_shader_fp64( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_gpu_shader_fp64) return; + glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC) load(userptr, "glGetUniformdv"); + glad_glUniform1d = (PFNGLUNIFORM1DPROC) load(userptr, "glUniform1d"); + glad_glUniform1dv = (PFNGLUNIFORM1DVPROC) load(userptr, "glUniform1dv"); + glad_glUniform2d = (PFNGLUNIFORM2DPROC) load(userptr, "glUniform2d"); + glad_glUniform2dv = (PFNGLUNIFORM2DVPROC) load(userptr, "glUniform2dv"); + glad_glUniform3d = (PFNGLUNIFORM3DPROC) load(userptr, "glUniform3d"); + glad_glUniform3dv = (PFNGLUNIFORM3DVPROC) load(userptr, "glUniform3dv"); + glad_glUniform4d = (PFNGLUNIFORM4DPROC) load(userptr, "glUniform4d"); + glad_glUniform4dv = (PFNGLUNIFORM4DVPROC) load(userptr, "glUniform4dv"); + glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC) load(userptr, "glUniformMatrix2dv"); + glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC) load(userptr, "glUniformMatrix2x3dv"); + glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC) load(userptr, "glUniformMatrix2x4dv"); + glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC) load(userptr, "glUniformMatrix3dv"); + glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC) load(userptr, "glUniformMatrix3x2dv"); + glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC) load(userptr, "glUniformMatrix3x4dv"); + glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC) load(userptr, "glUniformMatrix4dv"); + glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC) load(userptr, "glUniformMatrix4x2dv"); + glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC) load(userptr, "glUniformMatrix4x3dv"); +} +static void glad_gl_load_GL_ARB_gpu_shader_int64( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_gpu_shader_int64) return; + glad_glGetUniformi64vARB = (PFNGLGETUNIFORMI64VARBPROC) load(userptr, "glGetUniformi64vARB"); + glad_glGetUniformui64vARB = (PFNGLGETUNIFORMUI64VARBPROC) load(userptr, "glGetUniformui64vARB"); + glad_glGetnUniformi64vARB = (PFNGLGETNUNIFORMI64VARBPROC) load(userptr, "glGetnUniformi64vARB"); + glad_glGetnUniformui64vARB = (PFNGLGETNUNIFORMUI64VARBPROC) load(userptr, "glGetnUniformui64vARB"); + glad_glProgramUniform1i64ARB = (PFNGLPROGRAMUNIFORM1I64ARBPROC) load(userptr, "glProgramUniform1i64ARB"); + glad_glProgramUniform1i64vARB = (PFNGLPROGRAMUNIFORM1I64VARBPROC) load(userptr, "glProgramUniform1i64vARB"); + glad_glProgramUniform1ui64ARB = (PFNGLPROGRAMUNIFORM1UI64ARBPROC) load(userptr, "glProgramUniform1ui64ARB"); + glad_glProgramUniform1ui64vARB = (PFNGLPROGRAMUNIFORM1UI64VARBPROC) load(userptr, "glProgramUniform1ui64vARB"); + glad_glProgramUniform2i64ARB = (PFNGLPROGRAMUNIFORM2I64ARBPROC) load(userptr, "glProgramUniform2i64ARB"); + glad_glProgramUniform2i64vARB = (PFNGLPROGRAMUNIFORM2I64VARBPROC) load(userptr, "glProgramUniform2i64vARB"); + glad_glProgramUniform2ui64ARB = (PFNGLPROGRAMUNIFORM2UI64ARBPROC) load(userptr, "glProgramUniform2ui64ARB"); + glad_glProgramUniform2ui64vARB = (PFNGLPROGRAMUNIFORM2UI64VARBPROC) load(userptr, "glProgramUniform2ui64vARB"); + glad_glProgramUniform3i64ARB = (PFNGLPROGRAMUNIFORM3I64ARBPROC) load(userptr, "glProgramUniform3i64ARB"); + glad_glProgramUniform3i64vARB = (PFNGLPROGRAMUNIFORM3I64VARBPROC) load(userptr, "glProgramUniform3i64vARB"); + glad_glProgramUniform3ui64ARB = (PFNGLPROGRAMUNIFORM3UI64ARBPROC) load(userptr, "glProgramUniform3ui64ARB"); + glad_glProgramUniform3ui64vARB = (PFNGLPROGRAMUNIFORM3UI64VARBPROC) load(userptr, "glProgramUniform3ui64vARB"); + glad_glProgramUniform4i64ARB = (PFNGLPROGRAMUNIFORM4I64ARBPROC) load(userptr, "glProgramUniform4i64ARB"); + glad_glProgramUniform4i64vARB = (PFNGLPROGRAMUNIFORM4I64VARBPROC) load(userptr, "glProgramUniform4i64vARB"); + glad_glProgramUniform4ui64ARB = (PFNGLPROGRAMUNIFORM4UI64ARBPROC) load(userptr, "glProgramUniform4ui64ARB"); + glad_glProgramUniform4ui64vARB = (PFNGLPROGRAMUNIFORM4UI64VARBPROC) load(userptr, "glProgramUniform4ui64vARB"); + glad_glUniform1i64ARB = (PFNGLUNIFORM1I64ARBPROC) load(userptr, "glUniform1i64ARB"); + glad_glUniform1i64vARB = (PFNGLUNIFORM1I64VARBPROC) load(userptr, "glUniform1i64vARB"); + glad_glUniform1ui64ARB = (PFNGLUNIFORM1UI64ARBPROC) load(userptr, "glUniform1ui64ARB"); + glad_glUniform1ui64vARB = (PFNGLUNIFORM1UI64VARBPROC) load(userptr, "glUniform1ui64vARB"); + glad_glUniform2i64ARB = (PFNGLUNIFORM2I64ARBPROC) load(userptr, "glUniform2i64ARB"); + glad_glUniform2i64vARB = (PFNGLUNIFORM2I64VARBPROC) load(userptr, "glUniform2i64vARB"); + glad_glUniform2ui64ARB = (PFNGLUNIFORM2UI64ARBPROC) load(userptr, "glUniform2ui64ARB"); + glad_glUniform2ui64vARB = (PFNGLUNIFORM2UI64VARBPROC) load(userptr, "glUniform2ui64vARB"); + glad_glUniform3i64ARB = (PFNGLUNIFORM3I64ARBPROC) load(userptr, "glUniform3i64ARB"); + glad_glUniform3i64vARB = (PFNGLUNIFORM3I64VARBPROC) load(userptr, "glUniform3i64vARB"); + glad_glUniform3ui64ARB = (PFNGLUNIFORM3UI64ARBPROC) load(userptr, "glUniform3ui64ARB"); + glad_glUniform3ui64vARB = (PFNGLUNIFORM3UI64VARBPROC) load(userptr, "glUniform3ui64vARB"); + glad_glUniform4i64ARB = (PFNGLUNIFORM4I64ARBPROC) load(userptr, "glUniform4i64ARB"); + glad_glUniform4i64vARB = (PFNGLUNIFORM4I64VARBPROC) load(userptr, "glUniform4i64vARB"); + glad_glUniform4ui64ARB = (PFNGLUNIFORM4UI64ARBPROC) load(userptr, "glUniform4ui64ARB"); + glad_glUniform4ui64vARB = (PFNGLUNIFORM4UI64VARBPROC) load(userptr, "glUniform4ui64vARB"); +} +static void glad_gl_load_GL_ARB_imaging( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_imaging) return; + glad_glBlendColor = (PFNGLBLENDCOLORPROC) load(userptr, "glBlendColor"); + glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC) load(userptr, "glBlendEquation"); +} +static void glad_gl_load_GL_ARB_indirect_parameters( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_indirect_parameters) return; + glad_glMultiDrawArraysIndirectCountARB = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) load(userptr, "glMultiDrawArraysIndirectCountARB"); + glad_glMultiDrawElementsIndirectCountARB = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) load(userptr, "glMultiDrawElementsIndirectCountARB"); +} +static void glad_gl_load_GL_ARB_instanced_arrays( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_instanced_arrays) return; + glad_glVertexAttribDivisorARB = (PFNGLVERTEXATTRIBDIVISORARBPROC) load(userptr, "glVertexAttribDivisorARB"); +} +static void glad_gl_load_GL_ARB_internalformat_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_internalformat_query) return; + glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC) load(userptr, "glGetInternalformativ"); +} +static void glad_gl_load_GL_ARB_internalformat_query2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_internalformat_query2) return; + glad_glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC) load(userptr, "glGetInternalformati64v"); +} +static void glad_gl_load_GL_ARB_invalidate_subdata( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_invalidate_subdata) return; + glad_glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC) load(userptr, "glInvalidateBufferData"); + glad_glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC) load(userptr, "glInvalidateBufferSubData"); + glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC) load(userptr, "glInvalidateFramebuffer"); + glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC) load(userptr, "glInvalidateSubFramebuffer"); + glad_glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC) load(userptr, "glInvalidateTexImage"); + glad_glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC) load(userptr, "glInvalidateTexSubImage"); +} +static void glad_gl_load_GL_ARB_map_buffer_range( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_map_buffer_range) return; + glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC) load(userptr, "glFlushMappedBufferRange"); + glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) load(userptr, "glMapBufferRange"); +} +static void glad_gl_load_GL_ARB_matrix_palette( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_matrix_palette) return; + glad_glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC) load(userptr, "glCurrentPaletteMatrixARB"); + glad_glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC) load(userptr, "glMatrixIndexPointerARB"); + glad_glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC) load(userptr, "glMatrixIndexubvARB"); + glad_glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC) load(userptr, "glMatrixIndexuivARB"); + glad_glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC) load(userptr, "glMatrixIndexusvARB"); +} +static void glad_gl_load_GL_ARB_multi_bind( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_multi_bind) return; + glad_glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC) load(userptr, "glBindBuffersBase"); + glad_glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC) load(userptr, "glBindBuffersRange"); + glad_glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC) load(userptr, "glBindImageTextures"); + glad_glBindSamplers = (PFNGLBINDSAMPLERSPROC) load(userptr, "glBindSamplers"); + glad_glBindTextures = (PFNGLBINDTEXTURESPROC) load(userptr, "glBindTextures"); + glad_glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC) load(userptr, "glBindVertexBuffers"); +} +static void glad_gl_load_GL_ARB_multi_draw_indirect( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_multi_draw_indirect) return; + glad_glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC) load(userptr, "glMultiDrawArraysIndirect"); + glad_glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC) load(userptr, "glMultiDrawElementsIndirect"); +} +static void glad_gl_load_GL_ARB_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_multisample) return; + glad_glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC) load(userptr, "glSampleCoverageARB"); +} +static void glad_gl_load_GL_ARB_multitexture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_multitexture) return; + glad_glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) load(userptr, "glActiveTextureARB"); + glad_glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) load(userptr, "glClientActiveTextureARB"); + glad_glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC) load(userptr, "glMultiTexCoord1dARB"); + glad_glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC) load(userptr, "glMultiTexCoord1dvARB"); + glad_glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC) load(userptr, "glMultiTexCoord1fARB"); + glad_glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC) load(userptr, "glMultiTexCoord1fvARB"); + glad_glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC) load(userptr, "glMultiTexCoord1iARB"); + glad_glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC) load(userptr, "glMultiTexCoord1ivARB"); + glad_glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC) load(userptr, "glMultiTexCoord1sARB"); + glad_glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC) load(userptr, "glMultiTexCoord1svARB"); + glad_glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC) load(userptr, "glMultiTexCoord2dARB"); + glad_glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC) load(userptr, "glMultiTexCoord2dvARB"); + glad_glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) load(userptr, "glMultiTexCoord2fARB"); + glad_glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC) load(userptr, "glMultiTexCoord2fvARB"); + glad_glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC) load(userptr, "glMultiTexCoord2iARB"); + glad_glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC) load(userptr, "glMultiTexCoord2ivARB"); + glad_glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC) load(userptr, "glMultiTexCoord2sARB"); + glad_glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC) load(userptr, "glMultiTexCoord2svARB"); + glad_glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC) load(userptr, "glMultiTexCoord3dARB"); + glad_glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC) load(userptr, "glMultiTexCoord3dvARB"); + glad_glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC) load(userptr, "glMultiTexCoord3fARB"); + glad_glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC) load(userptr, "glMultiTexCoord3fvARB"); + glad_glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC) load(userptr, "glMultiTexCoord3iARB"); + glad_glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC) load(userptr, "glMultiTexCoord3ivARB"); + glad_glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC) load(userptr, "glMultiTexCoord3sARB"); + glad_glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC) load(userptr, "glMultiTexCoord3svARB"); + glad_glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC) load(userptr, "glMultiTexCoord4dARB"); + glad_glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC) load(userptr, "glMultiTexCoord4dvARB"); + glad_glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC) load(userptr, "glMultiTexCoord4fARB"); + glad_glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC) load(userptr, "glMultiTexCoord4fvARB"); + glad_glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC) load(userptr, "glMultiTexCoord4iARB"); + glad_glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC) load(userptr, "glMultiTexCoord4ivARB"); + glad_glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC) load(userptr, "glMultiTexCoord4sARB"); + glad_glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC) load(userptr, "glMultiTexCoord4svARB"); +} +static void glad_gl_load_GL_ARB_occlusion_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_occlusion_query) return; + glad_glBeginQueryARB = (PFNGLBEGINQUERYARBPROC) load(userptr, "glBeginQueryARB"); + glad_glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC) load(userptr, "glDeleteQueriesARB"); + glad_glEndQueryARB = (PFNGLENDQUERYARBPROC) load(userptr, "glEndQueryARB"); + glad_glGenQueriesARB = (PFNGLGENQUERIESARBPROC) load(userptr, "glGenQueriesARB"); + glad_glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC) load(userptr, "glGetQueryObjectivARB"); + glad_glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC) load(userptr, "glGetQueryObjectuivARB"); + glad_glGetQueryivARB = (PFNGLGETQUERYIVARBPROC) load(userptr, "glGetQueryivARB"); + glad_glIsQueryARB = (PFNGLISQUERYARBPROC) load(userptr, "glIsQueryARB"); +} +static void glad_gl_load_GL_ARB_parallel_shader_compile( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_parallel_shader_compile) return; + glad_glMaxShaderCompilerThreadsARB = (PFNGLMAXSHADERCOMPILERTHREADSARBPROC) load(userptr, "glMaxShaderCompilerThreadsARB"); +} +static void glad_gl_load_GL_ARB_point_parameters( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_point_parameters) return; + glad_glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC) load(userptr, "glPointParameterfARB"); + glad_glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC) load(userptr, "glPointParameterfvARB"); +} +static void glad_gl_load_GL_ARB_polygon_offset_clamp( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_polygon_offset_clamp) return; + glad_glPolygonOffsetClamp = (PFNGLPOLYGONOFFSETCLAMPPROC) load(userptr, "glPolygonOffsetClamp"); +} +static void glad_gl_load_GL_ARB_program_interface_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_program_interface_query) return; + glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC) load(userptr, "glGetProgramInterfaceiv"); + glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC) load(userptr, "glGetProgramResourceIndex"); + glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC) load(userptr, "glGetProgramResourceLocation"); + glad_glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) load(userptr, "glGetProgramResourceLocationIndex"); + glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC) load(userptr, "glGetProgramResourceName"); + glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC) load(userptr, "glGetProgramResourceiv"); +} +static void glad_gl_load_GL_ARB_provoking_vertex( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_provoking_vertex) return; + glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC) load(userptr, "glProvokingVertex"); +} +static void glad_gl_load_GL_ARB_robustness( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_robustness) return; + glad_glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC) load(userptr, "glGetGraphicsResetStatusARB"); + glad_glGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) load(userptr, "glGetnCompressedTexImageARB"); + glad_glGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC) load(userptr, "glGetnTexImageARB"); + glad_glGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC) load(userptr, "glGetnUniformdvARB"); + glad_glGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC) load(userptr, "glGetnUniformfvARB"); + glad_glGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC) load(userptr, "glGetnUniformivARB"); + glad_glGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC) load(userptr, "glGetnUniformuivARB"); + glad_glReadnPixelsARB = (PFNGLREADNPIXELSARBPROC) load(userptr, "glReadnPixelsARB"); +} +static void glad_gl_load_GL_ARB_sample_locations( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_sample_locations) return; + glad_glEvaluateDepthValuesARB = (PFNGLEVALUATEDEPTHVALUESARBPROC) load(userptr, "glEvaluateDepthValuesARB"); + glad_glFramebufferSampleLocationsfvARB = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) load(userptr, "glFramebufferSampleLocationsfvARB"); + glad_glNamedFramebufferSampleLocationsfvARB = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) load(userptr, "glNamedFramebufferSampleLocationsfvARB"); +} +static void glad_gl_load_GL_ARB_sample_shading( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_sample_shading) return; + glad_glMinSampleShadingARB = (PFNGLMINSAMPLESHADINGARBPROC) load(userptr, "glMinSampleShadingARB"); +} +static void glad_gl_load_GL_ARB_sampler_objects( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_sampler_objects) return; + glad_glBindSampler = (PFNGLBINDSAMPLERPROC) load(userptr, "glBindSampler"); + glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC) load(userptr, "glDeleteSamplers"); + glad_glGenSamplers = (PFNGLGENSAMPLERSPROC) load(userptr, "glGenSamplers"); + glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC) load(userptr, "glGetSamplerParameterIiv"); + glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC) load(userptr, "glGetSamplerParameterIuiv"); + glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC) load(userptr, "glGetSamplerParameterfv"); + glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC) load(userptr, "glGetSamplerParameteriv"); + glad_glIsSampler = (PFNGLISSAMPLERPROC) load(userptr, "glIsSampler"); + glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC) load(userptr, "glSamplerParameterIiv"); + glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC) load(userptr, "glSamplerParameterIuiv"); + glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC) load(userptr, "glSamplerParameterf"); + glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC) load(userptr, "glSamplerParameterfv"); + glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC) load(userptr, "glSamplerParameteri"); + glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC) load(userptr, "glSamplerParameteriv"); +} +static void glad_gl_load_GL_ARB_separate_shader_objects( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_separate_shader_objects) return; + glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC) load(userptr, "glActiveShaderProgram"); + glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC) load(userptr, "glBindProgramPipeline"); + glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC) load(userptr, "glCreateShaderProgramv"); + glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC) load(userptr, "glDeleteProgramPipelines"); + glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC) load(userptr, "glGenProgramPipelines"); + glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC) load(userptr, "glGetProgramPipelineInfoLog"); + glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC) load(userptr, "glGetProgramPipelineiv"); + glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC) load(userptr, "glIsProgramPipeline"); + glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC) load(userptr, "glProgramParameteri"); + glad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC) load(userptr, "glProgramUniform1d"); + glad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC) load(userptr, "glProgramUniform1dv"); + glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC) load(userptr, "glProgramUniform1f"); + glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC) load(userptr, "glProgramUniform1fv"); + glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC) load(userptr, "glProgramUniform1i"); + glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC) load(userptr, "glProgramUniform1iv"); + glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC) load(userptr, "glProgramUniform1ui"); + glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC) load(userptr, "glProgramUniform1uiv"); + glad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC) load(userptr, "glProgramUniform2d"); + glad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC) load(userptr, "glProgramUniform2dv"); + glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC) load(userptr, "glProgramUniform2f"); + glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC) load(userptr, "glProgramUniform2fv"); + glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC) load(userptr, "glProgramUniform2i"); + glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC) load(userptr, "glProgramUniform2iv"); + glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC) load(userptr, "glProgramUniform2ui"); + glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC) load(userptr, "glProgramUniform2uiv"); + glad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC) load(userptr, "glProgramUniform3d"); + glad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC) load(userptr, "glProgramUniform3dv"); + glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC) load(userptr, "glProgramUniform3f"); + glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC) load(userptr, "glProgramUniform3fv"); + glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC) load(userptr, "glProgramUniform3i"); + glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC) load(userptr, "glProgramUniform3iv"); + glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC) load(userptr, "glProgramUniform3ui"); + glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC) load(userptr, "glProgramUniform3uiv"); + glad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC) load(userptr, "glProgramUniform4d"); + glad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC) load(userptr, "glProgramUniform4dv"); + glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC) load(userptr, "glProgramUniform4f"); + glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC) load(userptr, "glProgramUniform4fv"); + glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC) load(userptr, "glProgramUniform4i"); + glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC) load(userptr, "glProgramUniform4iv"); + glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC) load(userptr, "glProgramUniform4ui"); + glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC) load(userptr, "glProgramUniform4uiv"); + glad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC) load(userptr, "glProgramUniformMatrix2dv"); + glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC) load(userptr, "glProgramUniformMatrix2fv"); + glad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) load(userptr, "glProgramUniformMatrix2x3dv"); + glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) load(userptr, "glProgramUniformMatrix2x3fv"); + glad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) load(userptr, "glProgramUniformMatrix2x4dv"); + glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) load(userptr, "glProgramUniformMatrix2x4fv"); + glad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC) load(userptr, "glProgramUniformMatrix3dv"); + glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC) load(userptr, "glProgramUniformMatrix3fv"); + glad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) load(userptr, "glProgramUniformMatrix3x2dv"); + glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) load(userptr, "glProgramUniformMatrix3x2fv"); + glad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) load(userptr, "glProgramUniformMatrix3x4dv"); + glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) load(userptr, "glProgramUniformMatrix3x4fv"); + glad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC) load(userptr, "glProgramUniformMatrix4dv"); + glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC) load(userptr, "glProgramUniformMatrix4fv"); + glad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) load(userptr, "glProgramUniformMatrix4x2dv"); + glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) load(userptr, "glProgramUniformMatrix4x2fv"); + glad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) load(userptr, "glProgramUniformMatrix4x3dv"); + glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) load(userptr, "glProgramUniformMatrix4x3fv"); + glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC) load(userptr, "glUseProgramStages"); + glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC) load(userptr, "glValidateProgramPipeline"); +} +static void glad_gl_load_GL_ARB_shader_atomic_counters( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_shader_atomic_counters) return; + glad_glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) load(userptr, "glGetActiveAtomicCounterBufferiv"); +} +static void glad_gl_load_GL_ARB_shader_image_load_store( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_shader_image_load_store) return; + glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC) load(userptr, "glBindImageTexture"); + glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC) load(userptr, "glMemoryBarrier"); +} +static void glad_gl_load_GL_ARB_shader_objects( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_shader_objects) return; + glad_glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) load(userptr, "glAttachObjectARB"); + glad_glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) load(userptr, "glCompileShaderARB"); + glad_glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) load(userptr, "glCreateProgramObjectARB"); + glad_glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) load(userptr, "glCreateShaderObjectARB"); + glad_glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) load(userptr, "glDeleteObjectARB"); + glad_glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC) load(userptr, "glDetachObjectARB"); + glad_glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) load(userptr, "glGetActiveUniformARB"); + glad_glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC) load(userptr, "glGetAttachedObjectsARB"); + glad_glGetHandleARB = (PFNGLGETHANDLEARBPROC) load(userptr, "glGetHandleARB"); + glad_glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) load(userptr, "glGetInfoLogARB"); + glad_glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC) load(userptr, "glGetObjectParameterfvARB"); + glad_glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) load(userptr, "glGetObjectParameterivARB"); + glad_glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC) load(userptr, "glGetShaderSourceARB"); + glad_glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) load(userptr, "glGetUniformLocationARB"); + glad_glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC) load(userptr, "glGetUniformfvARB"); + glad_glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC) load(userptr, "glGetUniformivARB"); + glad_glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) load(userptr, "glLinkProgramARB"); + glad_glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) load(userptr, "glShaderSourceARB"); + glad_glUniform1fARB = (PFNGLUNIFORM1FARBPROC) load(userptr, "glUniform1fARB"); + glad_glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) load(userptr, "glUniform1fvARB"); + glad_glUniform1iARB = (PFNGLUNIFORM1IARBPROC) load(userptr, "glUniform1iARB"); + glad_glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC) load(userptr, "glUniform1ivARB"); + glad_glUniform2fARB = (PFNGLUNIFORM2FARBPROC) load(userptr, "glUniform2fARB"); + glad_glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) load(userptr, "glUniform2fvARB"); + glad_glUniform2iARB = (PFNGLUNIFORM2IARBPROC) load(userptr, "glUniform2iARB"); + glad_glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) load(userptr, "glUniform2ivARB"); + glad_glUniform3fARB = (PFNGLUNIFORM3FARBPROC) load(userptr, "glUniform3fARB"); + glad_glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) load(userptr, "glUniform3fvARB"); + glad_glUniform3iARB = (PFNGLUNIFORM3IARBPROC) load(userptr, "glUniform3iARB"); + glad_glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) load(userptr, "glUniform3ivARB"); + glad_glUniform4fARB = (PFNGLUNIFORM4FARBPROC) load(userptr, "glUniform4fARB"); + glad_glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) load(userptr, "glUniform4fvARB"); + glad_glUniform4iARB = (PFNGLUNIFORM4IARBPROC) load(userptr, "glUniform4iARB"); + glad_glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) load(userptr, "glUniform4ivARB"); + glad_glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) load(userptr, "glUniformMatrix2fvARB"); + glad_glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) load(userptr, "glUniformMatrix3fvARB"); + glad_glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) load(userptr, "glUniformMatrix4fvARB"); + glad_glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) load(userptr, "glUseProgramObjectARB"); + glad_glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC) load(userptr, "glValidateProgramARB"); +} +static void glad_gl_load_GL_ARB_shader_storage_buffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_shader_storage_buffer_object) return; + glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC) load(userptr, "glShaderStorageBlockBinding"); +} +static void glad_gl_load_GL_ARB_shader_subroutine( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_shader_subroutine) return; + glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC) load(userptr, "glGetActiveSubroutineName"); + glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) load(userptr, "glGetActiveSubroutineUniformName"); + glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) load(userptr, "glGetActiveSubroutineUniformiv"); + glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC) load(userptr, "glGetProgramStageiv"); + glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC) load(userptr, "glGetSubroutineIndex"); + glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) load(userptr, "glGetSubroutineUniformLocation"); + glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC) load(userptr, "glGetUniformSubroutineuiv"); + glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC) load(userptr, "glUniformSubroutinesuiv"); +} +static void glad_gl_load_GL_ARB_shading_language_include( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_shading_language_include) return; + glad_glCompileShaderIncludeARB = (PFNGLCOMPILESHADERINCLUDEARBPROC) load(userptr, "glCompileShaderIncludeARB"); + glad_glDeleteNamedStringARB = (PFNGLDELETENAMEDSTRINGARBPROC) load(userptr, "glDeleteNamedStringARB"); + glad_glGetNamedStringARB = (PFNGLGETNAMEDSTRINGARBPROC) load(userptr, "glGetNamedStringARB"); + glad_glGetNamedStringivARB = (PFNGLGETNAMEDSTRINGIVARBPROC) load(userptr, "glGetNamedStringivARB"); + glad_glIsNamedStringARB = (PFNGLISNAMEDSTRINGARBPROC) load(userptr, "glIsNamedStringARB"); + glad_glNamedStringARB = (PFNGLNAMEDSTRINGARBPROC) load(userptr, "glNamedStringARB"); +} +static void glad_gl_load_GL_ARB_sparse_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_sparse_buffer) return; + glad_glBufferPageCommitmentARB = (PFNGLBUFFERPAGECOMMITMENTARBPROC) load(userptr, "glBufferPageCommitmentARB"); + glad_glNamedBufferPageCommitmentARB = (PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) load(userptr, "glNamedBufferPageCommitmentARB"); + glad_glNamedBufferPageCommitmentEXT = (PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) load(userptr, "glNamedBufferPageCommitmentEXT"); +} +static void glad_gl_load_GL_ARB_sparse_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_sparse_texture) return; + glad_glTexPageCommitmentARB = (PFNGLTEXPAGECOMMITMENTARBPROC) load(userptr, "glTexPageCommitmentARB"); +} +static void glad_gl_load_GL_ARB_sync( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_sync) return; + glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) load(userptr, "glClientWaitSync"); + glad_glDeleteSync = (PFNGLDELETESYNCPROC) load(userptr, "glDeleteSync"); + glad_glFenceSync = (PFNGLFENCESYNCPROC) load(userptr, "glFenceSync"); + glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC) load(userptr, "glGetInteger64v"); + glad_glGetSynciv = (PFNGLGETSYNCIVPROC) load(userptr, "glGetSynciv"); + glad_glIsSync = (PFNGLISSYNCPROC) load(userptr, "glIsSync"); + glad_glWaitSync = (PFNGLWAITSYNCPROC) load(userptr, "glWaitSync"); +} +static void glad_gl_load_GL_ARB_tessellation_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_tessellation_shader) return; + glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC) load(userptr, "glPatchParameterfv"); + glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC) load(userptr, "glPatchParameteri"); +} +static void glad_gl_load_GL_ARB_texture_barrier( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_barrier) return; + glad_glTextureBarrier = (PFNGLTEXTUREBARRIERPROC) load(userptr, "glTextureBarrier"); +} +static void glad_gl_load_GL_ARB_texture_buffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_buffer_object) return; + glad_glTexBufferARB = (PFNGLTEXBUFFERARBPROC) load(userptr, "glTexBufferARB"); +} +static void glad_gl_load_GL_ARB_texture_buffer_range( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_buffer_range) return; + glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC) load(userptr, "glTexBufferRange"); +} +static void glad_gl_load_GL_ARB_texture_compression( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_compression) return; + glad_glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) load(userptr, "glCompressedTexImage1DARB"); + glad_glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) load(userptr, "glCompressedTexImage2DARB"); + glad_glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) load(userptr, "glCompressedTexImage3DARB"); + glad_glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) load(userptr, "glCompressedTexSubImage1DARB"); + glad_glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) load(userptr, "glCompressedTexSubImage2DARB"); + glad_glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) load(userptr, "glCompressedTexSubImage3DARB"); + glad_glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) load(userptr, "glGetCompressedTexImageARB"); +} +static void glad_gl_load_GL_ARB_texture_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_multisample) return; + glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC) load(userptr, "glGetMultisamplefv"); + glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC) load(userptr, "glSampleMaski"); + glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC) load(userptr, "glTexImage2DMultisample"); + glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC) load(userptr, "glTexImage3DMultisample"); +} +static void glad_gl_load_GL_ARB_texture_storage( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_storage) return; + glad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC) load(userptr, "glTexStorage1D"); + glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC) load(userptr, "glTexStorage2D"); + glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC) load(userptr, "glTexStorage3D"); +} +static void glad_gl_load_GL_ARB_texture_storage_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_storage_multisample) return; + glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC) load(userptr, "glTexStorage2DMultisample"); + glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC) load(userptr, "glTexStorage3DMultisample"); +} +static void glad_gl_load_GL_ARB_texture_view( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_texture_view) return; + glad_glTextureView = (PFNGLTEXTUREVIEWPROC) load(userptr, "glTextureView"); +} +static void glad_gl_load_GL_ARB_timer_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_timer_query) return; + glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC) load(userptr, "glGetQueryObjecti64v"); + glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC) load(userptr, "glGetQueryObjectui64v"); + glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC) load(userptr, "glQueryCounter"); +} +static void glad_gl_load_GL_ARB_transform_feedback2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_transform_feedback2) return; + glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC) load(userptr, "glBindTransformFeedback"); + glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC) load(userptr, "glDeleteTransformFeedbacks"); + glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC) load(userptr, "glDrawTransformFeedback"); + glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC) load(userptr, "glGenTransformFeedbacks"); + glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC) load(userptr, "glIsTransformFeedback"); + glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC) load(userptr, "glPauseTransformFeedback"); + glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC) load(userptr, "glResumeTransformFeedback"); +} +static void glad_gl_load_GL_ARB_transform_feedback3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_transform_feedback3) return; + glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC) load(userptr, "glBeginQueryIndexed"); + glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) load(userptr, "glDrawTransformFeedbackStream"); + glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC) load(userptr, "glEndQueryIndexed"); + glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC) load(userptr, "glGetQueryIndexediv"); +} +static void glad_gl_load_GL_ARB_transform_feedback_instanced( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_transform_feedback_instanced) return; + glad_glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) load(userptr, "glDrawTransformFeedbackInstanced"); + glad_glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) load(userptr, "glDrawTransformFeedbackStreamInstanced"); +} +static void glad_gl_load_GL_ARB_transpose_matrix( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_transpose_matrix) return; + glad_glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC) load(userptr, "glLoadTransposeMatrixdARB"); + glad_glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC) load(userptr, "glLoadTransposeMatrixfARB"); + glad_glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC) load(userptr, "glMultTransposeMatrixdARB"); + glad_glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC) load(userptr, "glMultTransposeMatrixfARB"); +} +static void glad_gl_load_GL_ARB_uniform_buffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_uniform_buffer_object) return; + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC) load(userptr, "glBindBufferBase"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC) load(userptr, "glBindBufferRange"); + glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) load(userptr, "glGetActiveUniformBlockName"); + glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC) load(userptr, "glGetActiveUniformBlockiv"); + glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC) load(userptr, "glGetActiveUniformName"); + glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC) load(userptr, "glGetActiveUniformsiv"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC) load(userptr, "glGetIntegeri_v"); + glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC) load(userptr, "glGetUniformBlockIndex"); + glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC) load(userptr, "glGetUniformIndices"); + glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC) load(userptr, "glUniformBlockBinding"); +} +static void glad_gl_load_GL_ARB_vertex_array_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_array_object) return; + glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC) load(userptr, "glBindVertexArray"); + glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC) load(userptr, "glDeleteVertexArrays"); + glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC) load(userptr, "glGenVertexArrays"); + glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC) load(userptr, "glIsVertexArray"); +} +static void glad_gl_load_GL_ARB_vertex_attrib_64bit( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_attrib_64bit) return; + glad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC) load(userptr, "glGetVertexAttribLdv"); + glad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC) load(userptr, "glVertexAttribL1d"); + glad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC) load(userptr, "glVertexAttribL1dv"); + glad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC) load(userptr, "glVertexAttribL2d"); + glad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC) load(userptr, "glVertexAttribL2dv"); + glad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC) load(userptr, "glVertexAttribL3d"); + glad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC) load(userptr, "glVertexAttribL3dv"); + glad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC) load(userptr, "glVertexAttribL4d"); + glad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC) load(userptr, "glVertexAttribL4dv"); + glad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC) load(userptr, "glVertexAttribLPointer"); +} +static void glad_gl_load_GL_ARB_vertex_attrib_binding( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_attrib_binding) return; + glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC) load(userptr, "glBindVertexBuffer"); + glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC) load(userptr, "glVertexAttribBinding"); + glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC) load(userptr, "glVertexAttribFormat"); + glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC) load(userptr, "glVertexAttribIFormat"); + glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC) load(userptr, "glVertexAttribLFormat"); + glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC) load(userptr, "glVertexBindingDivisor"); +} +static void glad_gl_load_GL_ARB_vertex_blend( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_blend) return; + glad_glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC) load(userptr, "glVertexBlendARB"); + glad_glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC) load(userptr, "glWeightPointerARB"); + glad_glWeightbvARB = (PFNGLWEIGHTBVARBPROC) load(userptr, "glWeightbvARB"); + glad_glWeightdvARB = (PFNGLWEIGHTDVARBPROC) load(userptr, "glWeightdvARB"); + glad_glWeightfvARB = (PFNGLWEIGHTFVARBPROC) load(userptr, "glWeightfvARB"); + glad_glWeightivARB = (PFNGLWEIGHTIVARBPROC) load(userptr, "glWeightivARB"); + glad_glWeightsvARB = (PFNGLWEIGHTSVARBPROC) load(userptr, "glWeightsvARB"); + glad_glWeightubvARB = (PFNGLWEIGHTUBVARBPROC) load(userptr, "glWeightubvARB"); + glad_glWeightuivARB = (PFNGLWEIGHTUIVARBPROC) load(userptr, "glWeightuivARB"); + glad_glWeightusvARB = (PFNGLWEIGHTUSVARBPROC) load(userptr, "glWeightusvARB"); +} +static void glad_gl_load_GL_ARB_vertex_buffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_buffer_object) return; + glad_glBindBufferARB = (PFNGLBINDBUFFERARBPROC) load(userptr, "glBindBufferARB"); + glad_glBufferDataARB = (PFNGLBUFFERDATAARBPROC) load(userptr, "glBufferDataARB"); + glad_glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC) load(userptr, "glBufferSubDataARB"); + glad_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) load(userptr, "glDeleteBuffersARB"); + glad_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) load(userptr, "glGenBuffersARB"); + glad_glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC) load(userptr, "glGetBufferParameterivARB"); + glad_glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC) load(userptr, "glGetBufferPointervARB"); + glad_glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC) load(userptr, "glGetBufferSubDataARB"); + glad_glIsBufferARB = (PFNGLISBUFFERARBPROC) load(userptr, "glIsBufferARB"); + glad_glMapBufferARB = (PFNGLMAPBUFFERARBPROC) load(userptr, "glMapBufferARB"); + glad_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC) load(userptr, "glUnmapBufferARB"); +} +static void glad_gl_load_GL_ARB_vertex_program( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_program) return; + glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) load(userptr, "glBindProgramARB"); + glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC) load(userptr, "glDeleteProgramsARB"); + glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) load(userptr, "glDisableVertexAttribArrayARB"); + glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC) load(userptr, "glEnableVertexAttribArrayARB"); + glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) load(userptr, "glGenProgramsARB"); + glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC) load(userptr, "glGetProgramEnvParameterdvARB"); + glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC) load(userptr, "glGetProgramEnvParameterfvARB"); + glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) load(userptr, "glGetProgramLocalParameterdvARB"); + glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) load(userptr, "glGetProgramLocalParameterfvARB"); + glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC) load(userptr, "glGetProgramStringARB"); + glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC) load(userptr, "glGetProgramivARB"); + glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC) load(userptr, "glGetVertexAttribPointervARB"); + glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC) load(userptr, "glGetVertexAttribdvARB"); + glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC) load(userptr, "glGetVertexAttribfvARB"); + glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC) load(userptr, "glGetVertexAttribivARB"); + glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC) load(userptr, "glIsProgramARB"); + glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC) load(userptr, "glProgramEnvParameter4dARB"); + glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC) load(userptr, "glProgramEnvParameter4dvARB"); + glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC) load(userptr, "glProgramEnvParameter4fARB"); + glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC) load(userptr, "glProgramEnvParameter4fvARB"); + glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) load(userptr, "glProgramLocalParameter4dARB"); + glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) load(userptr, "glProgramLocalParameter4dvARB"); + glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC) load(userptr, "glProgramLocalParameter4fARB"); + glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) load(userptr, "glProgramLocalParameter4fvARB"); + glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) load(userptr, "glProgramStringARB"); + glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC) load(userptr, "glVertexAttrib1dARB"); + glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC) load(userptr, "glVertexAttrib1dvARB"); + glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC) load(userptr, "glVertexAttrib1fARB"); + glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC) load(userptr, "glVertexAttrib1fvARB"); + glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC) load(userptr, "glVertexAttrib1sARB"); + glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC) load(userptr, "glVertexAttrib1svARB"); + glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC) load(userptr, "glVertexAttrib2dARB"); + glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC) load(userptr, "glVertexAttrib2dvARB"); + glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC) load(userptr, "glVertexAttrib2fARB"); + glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC) load(userptr, "glVertexAttrib2fvARB"); + glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC) load(userptr, "glVertexAttrib2sARB"); + glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC) load(userptr, "glVertexAttrib2svARB"); + glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC) load(userptr, "glVertexAttrib3dARB"); + glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC) load(userptr, "glVertexAttrib3dvARB"); + glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC) load(userptr, "glVertexAttrib3fARB"); + glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC) load(userptr, "glVertexAttrib3fvARB"); + glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC) load(userptr, "glVertexAttrib3sARB"); + glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC) load(userptr, "glVertexAttrib3svARB"); + glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC) load(userptr, "glVertexAttrib4NbvARB"); + glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC) load(userptr, "glVertexAttrib4NivARB"); + glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC) load(userptr, "glVertexAttrib4NsvARB"); + glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC) load(userptr, "glVertexAttrib4NubARB"); + glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC) load(userptr, "glVertexAttrib4NubvARB"); + glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC) load(userptr, "glVertexAttrib4NuivARB"); + glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC) load(userptr, "glVertexAttrib4NusvARB"); + glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC) load(userptr, "glVertexAttrib4bvARB"); + glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC) load(userptr, "glVertexAttrib4dARB"); + glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC) load(userptr, "glVertexAttrib4dvARB"); + glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC) load(userptr, "glVertexAttrib4fARB"); + glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC) load(userptr, "glVertexAttrib4fvARB"); + glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC) load(userptr, "glVertexAttrib4ivARB"); + glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC) load(userptr, "glVertexAttrib4sARB"); + glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC) load(userptr, "glVertexAttrib4svARB"); + glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC) load(userptr, "glVertexAttrib4ubvARB"); + glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC) load(userptr, "glVertexAttrib4uivARB"); + glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC) load(userptr, "glVertexAttrib4usvARB"); + glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC) load(userptr, "glVertexAttribPointerARB"); +} +static void glad_gl_load_GL_ARB_vertex_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_shader) return; + glad_glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC) load(userptr, "glBindAttribLocationARB"); + glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) load(userptr, "glDisableVertexAttribArrayARB"); + glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC) load(userptr, "glEnableVertexAttribArrayARB"); + glad_glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC) load(userptr, "glGetActiveAttribARB"); + glad_glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC) load(userptr, "glGetAttribLocationARB"); + glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC) load(userptr, "glGetVertexAttribPointervARB"); + glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC) load(userptr, "glGetVertexAttribdvARB"); + glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC) load(userptr, "glGetVertexAttribfvARB"); + glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC) load(userptr, "glGetVertexAttribivARB"); + glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC) load(userptr, "glVertexAttrib1dARB"); + glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC) load(userptr, "glVertexAttrib1dvARB"); + glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC) load(userptr, "glVertexAttrib1fARB"); + glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC) load(userptr, "glVertexAttrib1fvARB"); + glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC) load(userptr, "glVertexAttrib1sARB"); + glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC) load(userptr, "glVertexAttrib1svARB"); + glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC) load(userptr, "glVertexAttrib2dARB"); + glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC) load(userptr, "glVertexAttrib2dvARB"); + glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC) load(userptr, "glVertexAttrib2fARB"); + glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC) load(userptr, "glVertexAttrib2fvARB"); + glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC) load(userptr, "glVertexAttrib2sARB"); + glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC) load(userptr, "glVertexAttrib2svARB"); + glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC) load(userptr, "glVertexAttrib3dARB"); + glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC) load(userptr, "glVertexAttrib3dvARB"); + glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC) load(userptr, "glVertexAttrib3fARB"); + glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC) load(userptr, "glVertexAttrib3fvARB"); + glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC) load(userptr, "glVertexAttrib3sARB"); + glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC) load(userptr, "glVertexAttrib3svARB"); + glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC) load(userptr, "glVertexAttrib4NbvARB"); + glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC) load(userptr, "glVertexAttrib4NivARB"); + glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC) load(userptr, "glVertexAttrib4NsvARB"); + glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC) load(userptr, "glVertexAttrib4NubARB"); + glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC) load(userptr, "glVertexAttrib4NubvARB"); + glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC) load(userptr, "glVertexAttrib4NuivARB"); + glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC) load(userptr, "glVertexAttrib4NusvARB"); + glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC) load(userptr, "glVertexAttrib4bvARB"); + glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC) load(userptr, "glVertexAttrib4dARB"); + glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC) load(userptr, "glVertexAttrib4dvARB"); + glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC) load(userptr, "glVertexAttrib4fARB"); + glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC) load(userptr, "glVertexAttrib4fvARB"); + glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC) load(userptr, "glVertexAttrib4ivARB"); + glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC) load(userptr, "glVertexAttrib4sARB"); + glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC) load(userptr, "glVertexAttrib4svARB"); + glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC) load(userptr, "glVertexAttrib4ubvARB"); + glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC) load(userptr, "glVertexAttrib4uivARB"); + glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC) load(userptr, "glVertexAttrib4usvARB"); + glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC) load(userptr, "glVertexAttribPointerARB"); +} +static void glad_gl_load_GL_ARB_vertex_type_2_10_10_10_rev( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_vertex_type_2_10_10_10_rev) return; + glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC) load(userptr, "glVertexAttribP1ui"); + glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC) load(userptr, "glVertexAttribP1uiv"); + glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC) load(userptr, "glVertexAttribP2ui"); + glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC) load(userptr, "glVertexAttribP2uiv"); + glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC) load(userptr, "glVertexAttribP3ui"); + glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC) load(userptr, "glVertexAttribP3uiv"); + glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC) load(userptr, "glVertexAttribP4ui"); + glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC) load(userptr, "glVertexAttribP4uiv"); +} +static void glad_gl_load_GL_ARB_viewport_array( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_viewport_array) return; + glad_glDepthRangeArraydvNV = (PFNGLDEPTHRANGEARRAYDVNVPROC) load(userptr, "glDepthRangeArraydvNV"); + glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC) load(userptr, "glDepthRangeArrayv"); + glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC) load(userptr, "glDepthRangeIndexed"); + glad_glDepthRangeIndexeddNV = (PFNGLDEPTHRANGEINDEXEDDNVPROC) load(userptr, "glDepthRangeIndexeddNV"); + glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC) load(userptr, "glGetDoublei_v"); + glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC) load(userptr, "glGetFloati_v"); + glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC) load(userptr, "glScissorArrayv"); + glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC) load(userptr, "glScissorIndexed"); + glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC) load(userptr, "glScissorIndexedv"); + glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC) load(userptr, "glViewportArrayv"); + glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC) load(userptr, "glViewportIndexedf"); + glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC) load(userptr, "glViewportIndexedfv"); +} +static void glad_gl_load_GL_ARB_window_pos( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ARB_window_pos) return; + glad_glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC) load(userptr, "glWindowPos2dARB"); + glad_glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC) load(userptr, "glWindowPos2dvARB"); + glad_glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC) load(userptr, "glWindowPos2fARB"); + glad_glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC) load(userptr, "glWindowPos2fvARB"); + glad_glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC) load(userptr, "glWindowPos2iARB"); + glad_glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC) load(userptr, "glWindowPos2ivARB"); + glad_glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC) load(userptr, "glWindowPos2sARB"); + glad_glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC) load(userptr, "glWindowPos2svARB"); + glad_glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC) load(userptr, "glWindowPos3dARB"); + glad_glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC) load(userptr, "glWindowPos3dvARB"); + glad_glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC) load(userptr, "glWindowPos3fARB"); + glad_glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC) load(userptr, "glWindowPos3fvARB"); + glad_glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC) load(userptr, "glWindowPos3iARB"); + glad_glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC) load(userptr, "glWindowPos3ivARB"); + glad_glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC) load(userptr, "glWindowPos3sARB"); + glad_glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC) load(userptr, "glWindowPos3svARB"); +} +static void glad_gl_load_GL_ATI_draw_buffers( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_draw_buffers) return; + glad_glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC) load(userptr, "glDrawBuffersATI"); +} +static void glad_gl_load_GL_ATI_element_array( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_element_array) return; + glad_glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC) load(userptr, "glDrawElementArrayATI"); + glad_glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC) load(userptr, "glDrawRangeElementArrayATI"); + glad_glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC) load(userptr, "glElementPointerATI"); +} +static void glad_gl_load_GL_ATI_envmap_bumpmap( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_envmap_bumpmap) return; + glad_glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC) load(userptr, "glGetTexBumpParameterfvATI"); + glad_glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC) load(userptr, "glGetTexBumpParameterivATI"); + glad_glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC) load(userptr, "glTexBumpParameterfvATI"); + glad_glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC) load(userptr, "glTexBumpParameterivATI"); +} +static void glad_gl_load_GL_ATI_fragment_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_fragment_shader) return; + glad_glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC) load(userptr, "glAlphaFragmentOp1ATI"); + glad_glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC) load(userptr, "glAlphaFragmentOp2ATI"); + glad_glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC) load(userptr, "glAlphaFragmentOp3ATI"); + glad_glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC) load(userptr, "glBeginFragmentShaderATI"); + glad_glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC) load(userptr, "glBindFragmentShaderATI"); + glad_glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC) load(userptr, "glColorFragmentOp1ATI"); + glad_glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC) load(userptr, "glColorFragmentOp2ATI"); + glad_glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC) load(userptr, "glColorFragmentOp3ATI"); + glad_glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC) load(userptr, "glDeleteFragmentShaderATI"); + glad_glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC) load(userptr, "glEndFragmentShaderATI"); + glad_glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC) load(userptr, "glGenFragmentShadersATI"); + glad_glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC) load(userptr, "glPassTexCoordATI"); + glad_glSampleMapATI = (PFNGLSAMPLEMAPATIPROC) load(userptr, "glSampleMapATI"); + glad_glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) load(userptr, "glSetFragmentShaderConstantATI"); +} +static void glad_gl_load_GL_ATI_map_object_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_map_object_buffer) return; + glad_glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC) load(userptr, "glMapObjectBufferATI"); + glad_glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC) load(userptr, "glUnmapObjectBufferATI"); +} +static void glad_gl_load_GL_ATI_pn_triangles( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_pn_triangles) return; + glad_glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC) load(userptr, "glPNTrianglesfATI"); + glad_glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC) load(userptr, "glPNTrianglesiATI"); +} +static void glad_gl_load_GL_ATI_separate_stencil( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_separate_stencil) return; + glad_glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC) load(userptr, "glStencilFuncSeparateATI"); + glad_glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC) load(userptr, "glStencilOpSeparateATI"); +} +static void glad_gl_load_GL_ATI_vertex_array_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_vertex_array_object) return; + glad_glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC) load(userptr, "glArrayObjectATI"); + glad_glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC) load(userptr, "glFreeObjectBufferATI"); + glad_glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC) load(userptr, "glGetArrayObjectfvATI"); + glad_glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC) load(userptr, "glGetArrayObjectivATI"); + glad_glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC) load(userptr, "glGetObjectBufferfvATI"); + glad_glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC) load(userptr, "glGetObjectBufferivATI"); + glad_glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC) load(userptr, "glGetVariantArrayObjectfvATI"); + glad_glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC) load(userptr, "glGetVariantArrayObjectivATI"); + glad_glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC) load(userptr, "glIsObjectBufferATI"); + glad_glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC) load(userptr, "glNewObjectBufferATI"); + glad_glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC) load(userptr, "glUpdateObjectBufferATI"); + glad_glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC) load(userptr, "glVariantArrayObjectATI"); +} +static void glad_gl_load_GL_ATI_vertex_attrib_array_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_vertex_attrib_array_object) return; + glad_glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) load(userptr, "glGetVertexAttribArrayObjectfvATI"); + glad_glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) load(userptr, "glGetVertexAttribArrayObjectivATI"); + glad_glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) load(userptr, "glVertexAttribArrayObjectATI"); +} +static void glad_gl_load_GL_ATI_vertex_streams( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_ATI_vertex_streams) return; + glad_glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) load(userptr, "glClientActiveVertexStreamATI"); + glad_glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC) load(userptr, "glNormalStream3bATI"); + glad_glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC) load(userptr, "glNormalStream3bvATI"); + glad_glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC) load(userptr, "glNormalStream3dATI"); + glad_glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC) load(userptr, "glNormalStream3dvATI"); + glad_glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC) load(userptr, "glNormalStream3fATI"); + glad_glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC) load(userptr, "glNormalStream3fvATI"); + glad_glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC) load(userptr, "glNormalStream3iATI"); + glad_glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC) load(userptr, "glNormalStream3ivATI"); + glad_glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC) load(userptr, "glNormalStream3sATI"); + glad_glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC) load(userptr, "glNormalStream3svATI"); + glad_glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC) load(userptr, "glVertexBlendEnvfATI"); + glad_glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC) load(userptr, "glVertexBlendEnviATI"); + glad_glVertexStream1dATI = (PFNGLVERTEXSTREAM1DATIPROC) load(userptr, "glVertexStream1dATI"); + glad_glVertexStream1dvATI = (PFNGLVERTEXSTREAM1DVATIPROC) load(userptr, "glVertexStream1dvATI"); + glad_glVertexStream1fATI = (PFNGLVERTEXSTREAM1FATIPROC) load(userptr, "glVertexStream1fATI"); + glad_glVertexStream1fvATI = (PFNGLVERTEXSTREAM1FVATIPROC) load(userptr, "glVertexStream1fvATI"); + glad_glVertexStream1iATI = (PFNGLVERTEXSTREAM1IATIPROC) load(userptr, "glVertexStream1iATI"); + glad_glVertexStream1ivATI = (PFNGLVERTEXSTREAM1IVATIPROC) load(userptr, "glVertexStream1ivATI"); + glad_glVertexStream1sATI = (PFNGLVERTEXSTREAM1SATIPROC) load(userptr, "glVertexStream1sATI"); + glad_glVertexStream1svATI = (PFNGLVERTEXSTREAM1SVATIPROC) load(userptr, "glVertexStream1svATI"); + glad_glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC) load(userptr, "glVertexStream2dATI"); + glad_glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC) load(userptr, "glVertexStream2dvATI"); + glad_glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC) load(userptr, "glVertexStream2fATI"); + glad_glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC) load(userptr, "glVertexStream2fvATI"); + glad_glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC) load(userptr, "glVertexStream2iATI"); + glad_glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC) load(userptr, "glVertexStream2ivATI"); + glad_glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC) load(userptr, "glVertexStream2sATI"); + glad_glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC) load(userptr, "glVertexStream2svATI"); + glad_glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC) load(userptr, "glVertexStream3dATI"); + glad_glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC) load(userptr, "glVertexStream3dvATI"); + glad_glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC) load(userptr, "glVertexStream3fATI"); + glad_glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC) load(userptr, "glVertexStream3fvATI"); + glad_glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC) load(userptr, "glVertexStream3iATI"); + glad_glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC) load(userptr, "glVertexStream3ivATI"); + glad_glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC) load(userptr, "glVertexStream3sATI"); + glad_glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC) load(userptr, "glVertexStream3svATI"); + glad_glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC) load(userptr, "glVertexStream4dATI"); + glad_glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC) load(userptr, "glVertexStream4dvATI"); + glad_glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC) load(userptr, "glVertexStream4fATI"); + glad_glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC) load(userptr, "glVertexStream4fvATI"); + glad_glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC) load(userptr, "glVertexStream4iATI"); + glad_glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC) load(userptr, "glVertexStream4ivATI"); + glad_glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC) load(userptr, "glVertexStream4sATI"); + glad_glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC) load(userptr, "glVertexStream4svATI"); +} +static void glad_gl_load_GL_EXT_EGL_image_storage( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_EGL_image_storage) return; + glad_glEGLImageTargetTexStorageEXT = (PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) load(userptr, "glEGLImageTargetTexStorageEXT"); + glad_glEGLImageTargetTextureStorageEXT = (PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) load(userptr, "glEGLImageTargetTextureStorageEXT"); +} +static void glad_gl_load_GL_EXT_bindable_uniform( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_bindable_uniform) return; + glad_glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC) load(userptr, "glGetUniformBufferSizeEXT"); + glad_glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC) load(userptr, "glGetUniformOffsetEXT"); + glad_glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC) load(userptr, "glUniformBufferEXT"); +} +static void glad_gl_load_GL_EXT_blend_color( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_blend_color) return; + glad_glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC) load(userptr, "glBlendColorEXT"); +} +static void glad_gl_load_GL_EXT_blend_equation_separate( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_blend_equation_separate) return; + glad_glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC) load(userptr, "glBlendEquationSeparateEXT"); +} +static void glad_gl_load_GL_EXT_blend_func_separate( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_blend_func_separate) return; + glad_glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC) load(userptr, "glBlendFuncSeparateEXT"); +} +static void glad_gl_load_GL_EXT_blend_minmax( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_blend_minmax) return; + glad_glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC) load(userptr, "glBlendEquationEXT"); +} +static void glad_gl_load_GL_EXT_color_subtable( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_color_subtable) return; + glad_glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC) load(userptr, "glColorSubTableEXT"); + glad_glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC) load(userptr, "glCopyColorSubTableEXT"); +} +static void glad_gl_load_GL_EXT_compiled_vertex_array( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_compiled_vertex_array) return; + glad_glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC) load(userptr, "glLockArraysEXT"); + glad_glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC) load(userptr, "glUnlockArraysEXT"); +} +static void glad_gl_load_GL_EXT_convolution( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_convolution) return; + glad_glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC) load(userptr, "glConvolutionFilter1DEXT"); + glad_glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC) load(userptr, "glConvolutionFilter2DEXT"); + glad_glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC) load(userptr, "glConvolutionParameterfEXT"); + glad_glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC) load(userptr, "glConvolutionParameterfvEXT"); + glad_glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC) load(userptr, "glConvolutionParameteriEXT"); + glad_glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC) load(userptr, "glConvolutionParameterivEXT"); + glad_glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) load(userptr, "glCopyConvolutionFilter1DEXT"); + glad_glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) load(userptr, "glCopyConvolutionFilter2DEXT"); + glad_glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC) load(userptr, "glGetConvolutionFilterEXT"); + glad_glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) load(userptr, "glGetConvolutionParameterfvEXT"); + glad_glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) load(userptr, "glGetConvolutionParameterivEXT"); + glad_glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC) load(userptr, "glGetSeparableFilterEXT"); + glad_glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC) load(userptr, "glSeparableFilter2DEXT"); +} +static void glad_gl_load_GL_EXT_coordinate_frame( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_coordinate_frame) return; + glad_glBinormal3bEXT = (PFNGLBINORMAL3BEXTPROC) load(userptr, "glBinormal3bEXT"); + glad_glBinormal3bvEXT = (PFNGLBINORMAL3BVEXTPROC) load(userptr, "glBinormal3bvEXT"); + glad_glBinormal3dEXT = (PFNGLBINORMAL3DEXTPROC) load(userptr, "glBinormal3dEXT"); + glad_glBinormal3dvEXT = (PFNGLBINORMAL3DVEXTPROC) load(userptr, "glBinormal3dvEXT"); + glad_glBinormal3fEXT = (PFNGLBINORMAL3FEXTPROC) load(userptr, "glBinormal3fEXT"); + glad_glBinormal3fvEXT = (PFNGLBINORMAL3FVEXTPROC) load(userptr, "glBinormal3fvEXT"); + glad_glBinormal3iEXT = (PFNGLBINORMAL3IEXTPROC) load(userptr, "glBinormal3iEXT"); + glad_glBinormal3ivEXT = (PFNGLBINORMAL3IVEXTPROC) load(userptr, "glBinormal3ivEXT"); + glad_glBinormal3sEXT = (PFNGLBINORMAL3SEXTPROC) load(userptr, "glBinormal3sEXT"); + glad_glBinormal3svEXT = (PFNGLBINORMAL3SVEXTPROC) load(userptr, "glBinormal3svEXT"); + glad_glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC) load(userptr, "glBinormalPointerEXT"); + glad_glTangent3bEXT = (PFNGLTANGENT3BEXTPROC) load(userptr, "glTangent3bEXT"); + glad_glTangent3bvEXT = (PFNGLTANGENT3BVEXTPROC) load(userptr, "glTangent3bvEXT"); + glad_glTangent3dEXT = (PFNGLTANGENT3DEXTPROC) load(userptr, "glTangent3dEXT"); + glad_glTangent3dvEXT = (PFNGLTANGENT3DVEXTPROC) load(userptr, "glTangent3dvEXT"); + glad_glTangent3fEXT = (PFNGLTANGENT3FEXTPROC) load(userptr, "glTangent3fEXT"); + glad_glTangent3fvEXT = (PFNGLTANGENT3FVEXTPROC) load(userptr, "glTangent3fvEXT"); + glad_glTangent3iEXT = (PFNGLTANGENT3IEXTPROC) load(userptr, "glTangent3iEXT"); + glad_glTangent3ivEXT = (PFNGLTANGENT3IVEXTPROC) load(userptr, "glTangent3ivEXT"); + glad_glTangent3sEXT = (PFNGLTANGENT3SEXTPROC) load(userptr, "glTangent3sEXT"); + glad_glTangent3svEXT = (PFNGLTANGENT3SVEXTPROC) load(userptr, "glTangent3svEXT"); + glad_glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC) load(userptr, "glTangentPointerEXT"); +} +static void glad_gl_load_GL_EXT_copy_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_copy_texture) return; + glad_glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC) load(userptr, "glCopyTexImage1DEXT"); + glad_glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC) load(userptr, "glCopyTexImage2DEXT"); + glad_glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC) load(userptr, "glCopyTexSubImage1DEXT"); + glad_glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC) load(userptr, "glCopyTexSubImage2DEXT"); + glad_glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC) load(userptr, "glCopyTexSubImage3DEXT"); +} +static void glad_gl_load_GL_EXT_cull_vertex( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_cull_vertex) return; + glad_glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC) load(userptr, "glCullParameterdvEXT"); + glad_glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC) load(userptr, "glCullParameterfvEXT"); +} +static void glad_gl_load_GL_EXT_debug_label( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_debug_label) return; + glad_glGetObjectLabelEXT = (PFNGLGETOBJECTLABELEXTPROC) load(userptr, "glGetObjectLabelEXT"); + glad_glLabelObjectEXT = (PFNGLLABELOBJECTEXTPROC) load(userptr, "glLabelObjectEXT"); +} +static void glad_gl_load_GL_EXT_debug_marker( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_debug_marker) return; + glad_glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC) load(userptr, "glInsertEventMarkerEXT"); + glad_glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC) load(userptr, "glPopGroupMarkerEXT"); + glad_glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC) load(userptr, "glPushGroupMarkerEXT"); +} +static void glad_gl_load_GL_EXT_depth_bounds_test( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_depth_bounds_test) return; + glad_glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC) load(userptr, "glDepthBoundsEXT"); +} +static void glad_gl_load_GL_EXT_direct_state_access( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_direct_state_access) return; + glad_glBindMultiTextureEXT = (PFNGLBINDMULTITEXTUREEXTPROC) load(userptr, "glBindMultiTextureEXT"); + glad_glCheckNamedFramebufferStatusEXT = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) load(userptr, "glCheckNamedFramebufferStatusEXT"); + glad_glClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC) load(userptr, "glClearNamedBufferDataEXT"); + glad_glClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) load(userptr, "glClearNamedBufferSubDataEXT"); + glad_glClientAttribDefaultEXT = (PFNGLCLIENTATTRIBDEFAULTEXTPROC) load(userptr, "glClientAttribDefaultEXT"); + glad_glCompressedMultiTexImage1DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) load(userptr, "glCompressedMultiTexImage1DEXT"); + glad_glCompressedMultiTexImage2DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) load(userptr, "glCompressedMultiTexImage2DEXT"); + glad_glCompressedMultiTexImage3DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) load(userptr, "glCompressedMultiTexImage3DEXT"); + glad_glCompressedMultiTexSubImage1DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) load(userptr, "glCompressedMultiTexSubImage1DEXT"); + glad_glCompressedMultiTexSubImage2DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) load(userptr, "glCompressedMultiTexSubImage2DEXT"); + glad_glCompressedMultiTexSubImage3DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) load(userptr, "glCompressedMultiTexSubImage3DEXT"); + glad_glCompressedTextureImage1DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) load(userptr, "glCompressedTextureImage1DEXT"); + glad_glCompressedTextureImage2DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) load(userptr, "glCompressedTextureImage2DEXT"); + glad_glCompressedTextureImage3DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) load(userptr, "glCompressedTextureImage3DEXT"); + glad_glCompressedTextureSubImage1DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) load(userptr, "glCompressedTextureSubImage1DEXT"); + glad_glCompressedTextureSubImage2DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) load(userptr, "glCompressedTextureSubImage2DEXT"); + glad_glCompressedTextureSubImage3DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) load(userptr, "glCompressedTextureSubImage3DEXT"); + glad_glCopyMultiTexImage1DEXT = (PFNGLCOPYMULTITEXIMAGE1DEXTPROC) load(userptr, "glCopyMultiTexImage1DEXT"); + glad_glCopyMultiTexImage2DEXT = (PFNGLCOPYMULTITEXIMAGE2DEXTPROC) load(userptr, "glCopyMultiTexImage2DEXT"); + glad_glCopyMultiTexSubImage1DEXT = (PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) load(userptr, "glCopyMultiTexSubImage1DEXT"); + glad_glCopyMultiTexSubImage2DEXT = (PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) load(userptr, "glCopyMultiTexSubImage2DEXT"); + glad_glCopyMultiTexSubImage3DEXT = (PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) load(userptr, "glCopyMultiTexSubImage3DEXT"); + glad_glCopyTextureImage1DEXT = (PFNGLCOPYTEXTUREIMAGE1DEXTPROC) load(userptr, "glCopyTextureImage1DEXT"); + glad_glCopyTextureImage2DEXT = (PFNGLCOPYTEXTUREIMAGE2DEXTPROC) load(userptr, "glCopyTextureImage2DEXT"); + glad_glCopyTextureSubImage1DEXT = (PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) load(userptr, "glCopyTextureSubImage1DEXT"); + glad_glCopyTextureSubImage2DEXT = (PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) load(userptr, "glCopyTextureSubImage2DEXT"); + glad_glCopyTextureSubImage3DEXT = (PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) load(userptr, "glCopyTextureSubImage3DEXT"); + glad_glDisableClientStateIndexedEXT = (PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) load(userptr, "glDisableClientStateIndexedEXT"); + glad_glDisableClientStateiEXT = (PFNGLDISABLECLIENTSTATEIEXTPROC) load(userptr, "glDisableClientStateiEXT"); + glad_glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC) load(userptr, "glDisableIndexedEXT"); + glad_glDisableVertexArrayAttribEXT = (PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) load(userptr, "glDisableVertexArrayAttribEXT"); + glad_glDisableVertexArrayEXT = (PFNGLDISABLEVERTEXARRAYEXTPROC) load(userptr, "glDisableVertexArrayEXT"); + glad_glEnableClientStateIndexedEXT = (PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) load(userptr, "glEnableClientStateIndexedEXT"); + glad_glEnableClientStateiEXT = (PFNGLENABLECLIENTSTATEIEXTPROC) load(userptr, "glEnableClientStateiEXT"); + glad_glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC) load(userptr, "glEnableIndexedEXT"); + glad_glEnableVertexArrayAttribEXT = (PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) load(userptr, "glEnableVertexArrayAttribEXT"); + glad_glEnableVertexArrayEXT = (PFNGLENABLEVERTEXARRAYEXTPROC) load(userptr, "glEnableVertexArrayEXT"); + glad_glFlushMappedNamedBufferRangeEXT = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) load(userptr, "glFlushMappedNamedBufferRangeEXT"); + glad_glFramebufferDrawBufferEXT = (PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) load(userptr, "glFramebufferDrawBufferEXT"); + glad_glFramebufferDrawBuffersEXT = (PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) load(userptr, "glFramebufferDrawBuffersEXT"); + glad_glFramebufferReadBufferEXT = (PFNGLFRAMEBUFFERREADBUFFEREXTPROC) load(userptr, "glFramebufferReadBufferEXT"); + glad_glGenerateMultiTexMipmapEXT = (PFNGLGENERATEMULTITEXMIPMAPEXTPROC) load(userptr, "glGenerateMultiTexMipmapEXT"); + glad_glGenerateTextureMipmapEXT = (PFNGLGENERATETEXTUREMIPMAPEXTPROC) load(userptr, "glGenerateTextureMipmapEXT"); + glad_glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC) load(userptr, "glGetBooleanIndexedvEXT"); + glad_glGetCompressedMultiTexImageEXT = (PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) load(userptr, "glGetCompressedMultiTexImageEXT"); + glad_glGetCompressedTextureImageEXT = (PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) load(userptr, "glGetCompressedTextureImageEXT"); + glad_glGetDoubleIndexedvEXT = (PFNGLGETDOUBLEINDEXEDVEXTPROC) load(userptr, "glGetDoubleIndexedvEXT"); + glad_glGetDoublei_vEXT = (PFNGLGETDOUBLEI_VEXTPROC) load(userptr, "glGetDoublei_vEXT"); + glad_glGetFloatIndexedvEXT = (PFNGLGETFLOATINDEXEDVEXTPROC) load(userptr, "glGetFloatIndexedvEXT"); + glad_glGetFloati_vEXT = (PFNGLGETFLOATI_VEXTPROC) load(userptr, "glGetFloati_vEXT"); + glad_glGetFramebufferParameterivEXT = (PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) load(userptr, "glGetFramebufferParameterivEXT"); + glad_glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC) load(userptr, "glGetIntegerIndexedvEXT"); + glad_glGetMultiTexEnvfvEXT = (PFNGLGETMULTITEXENVFVEXTPROC) load(userptr, "glGetMultiTexEnvfvEXT"); + glad_glGetMultiTexEnvivEXT = (PFNGLGETMULTITEXENVIVEXTPROC) load(userptr, "glGetMultiTexEnvivEXT"); + glad_glGetMultiTexGendvEXT = (PFNGLGETMULTITEXGENDVEXTPROC) load(userptr, "glGetMultiTexGendvEXT"); + glad_glGetMultiTexGenfvEXT = (PFNGLGETMULTITEXGENFVEXTPROC) load(userptr, "glGetMultiTexGenfvEXT"); + glad_glGetMultiTexGenivEXT = (PFNGLGETMULTITEXGENIVEXTPROC) load(userptr, "glGetMultiTexGenivEXT"); + glad_glGetMultiTexImageEXT = (PFNGLGETMULTITEXIMAGEEXTPROC) load(userptr, "glGetMultiTexImageEXT"); + glad_glGetMultiTexLevelParameterfvEXT = (PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) load(userptr, "glGetMultiTexLevelParameterfvEXT"); + glad_glGetMultiTexLevelParameterivEXT = (PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) load(userptr, "glGetMultiTexLevelParameterivEXT"); + glad_glGetMultiTexParameterIivEXT = (PFNGLGETMULTITEXPARAMETERIIVEXTPROC) load(userptr, "glGetMultiTexParameterIivEXT"); + glad_glGetMultiTexParameterIuivEXT = (PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) load(userptr, "glGetMultiTexParameterIuivEXT"); + glad_glGetMultiTexParameterfvEXT = (PFNGLGETMULTITEXPARAMETERFVEXTPROC) load(userptr, "glGetMultiTexParameterfvEXT"); + glad_glGetMultiTexParameterivEXT = (PFNGLGETMULTITEXPARAMETERIVEXTPROC) load(userptr, "glGetMultiTexParameterivEXT"); + glad_glGetNamedBufferParameterivEXT = (PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) load(userptr, "glGetNamedBufferParameterivEXT"); + glad_glGetNamedBufferPointervEXT = (PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) load(userptr, "glGetNamedBufferPointervEXT"); + glad_glGetNamedBufferSubDataEXT = (PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) load(userptr, "glGetNamedBufferSubDataEXT"); + glad_glGetNamedFramebufferAttachmentParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) load(userptr, "glGetNamedFramebufferAttachmentParameterivEXT"); + glad_glGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) load(userptr, "glGetNamedFramebufferParameterivEXT"); + glad_glGetNamedProgramLocalParameterIivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) load(userptr, "glGetNamedProgramLocalParameterIivEXT"); + glad_glGetNamedProgramLocalParameterIuivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) load(userptr, "glGetNamedProgramLocalParameterIuivEXT"); + glad_glGetNamedProgramLocalParameterdvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) load(userptr, "glGetNamedProgramLocalParameterdvEXT"); + glad_glGetNamedProgramLocalParameterfvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) load(userptr, "glGetNamedProgramLocalParameterfvEXT"); + glad_glGetNamedProgramStringEXT = (PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) load(userptr, "glGetNamedProgramStringEXT"); + glad_glGetNamedProgramivEXT = (PFNGLGETNAMEDPROGRAMIVEXTPROC) load(userptr, "glGetNamedProgramivEXT"); + glad_glGetNamedRenderbufferParameterivEXT = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) load(userptr, "glGetNamedRenderbufferParameterivEXT"); + glad_glGetPointerIndexedvEXT = (PFNGLGETPOINTERINDEXEDVEXTPROC) load(userptr, "glGetPointerIndexedvEXT"); + glad_glGetPointeri_vEXT = (PFNGLGETPOINTERI_VEXTPROC) load(userptr, "glGetPointeri_vEXT"); + glad_glGetTextureImageEXT = (PFNGLGETTEXTUREIMAGEEXTPROC) load(userptr, "glGetTextureImageEXT"); + glad_glGetTextureLevelParameterfvEXT = (PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) load(userptr, "glGetTextureLevelParameterfvEXT"); + glad_glGetTextureLevelParameterivEXT = (PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) load(userptr, "glGetTextureLevelParameterivEXT"); + glad_glGetTextureParameterIivEXT = (PFNGLGETTEXTUREPARAMETERIIVEXTPROC) load(userptr, "glGetTextureParameterIivEXT"); + glad_glGetTextureParameterIuivEXT = (PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) load(userptr, "glGetTextureParameterIuivEXT"); + glad_glGetTextureParameterfvEXT = (PFNGLGETTEXTUREPARAMETERFVEXTPROC) load(userptr, "glGetTextureParameterfvEXT"); + glad_glGetTextureParameterivEXT = (PFNGLGETTEXTUREPARAMETERIVEXTPROC) load(userptr, "glGetTextureParameterivEXT"); + glad_glGetVertexArrayIntegeri_vEXT = (PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) load(userptr, "glGetVertexArrayIntegeri_vEXT"); + glad_glGetVertexArrayIntegervEXT = (PFNGLGETVERTEXARRAYINTEGERVEXTPROC) load(userptr, "glGetVertexArrayIntegervEXT"); + glad_glGetVertexArrayPointeri_vEXT = (PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) load(userptr, "glGetVertexArrayPointeri_vEXT"); + glad_glGetVertexArrayPointervEXT = (PFNGLGETVERTEXARRAYPOINTERVEXTPROC) load(userptr, "glGetVertexArrayPointervEXT"); + glad_glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC) load(userptr, "glIsEnabledIndexedEXT"); + glad_glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC) load(userptr, "glMapNamedBufferEXT"); + glad_glMapNamedBufferRangeEXT = (PFNGLMAPNAMEDBUFFERRANGEEXTPROC) load(userptr, "glMapNamedBufferRangeEXT"); + glad_glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC) load(userptr, "glMatrixFrustumEXT"); + glad_glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC) load(userptr, "glMatrixLoadIdentityEXT"); + glad_glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC) load(userptr, "glMatrixLoadTransposedEXT"); + glad_glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC) load(userptr, "glMatrixLoadTransposefEXT"); + glad_glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC) load(userptr, "glMatrixLoaddEXT"); + glad_glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC) load(userptr, "glMatrixLoadfEXT"); + glad_glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC) load(userptr, "glMatrixMultTransposedEXT"); + glad_glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC) load(userptr, "glMatrixMultTransposefEXT"); + glad_glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC) load(userptr, "glMatrixMultdEXT"); + glad_glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC) load(userptr, "glMatrixMultfEXT"); + glad_glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC) load(userptr, "glMatrixOrthoEXT"); + glad_glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC) load(userptr, "glMatrixPopEXT"); + glad_glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC) load(userptr, "glMatrixPushEXT"); + glad_glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC) load(userptr, "glMatrixRotatedEXT"); + glad_glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC) load(userptr, "glMatrixRotatefEXT"); + glad_glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC) load(userptr, "glMatrixScaledEXT"); + glad_glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC) load(userptr, "glMatrixScalefEXT"); + glad_glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC) load(userptr, "glMatrixTranslatedEXT"); + glad_glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC) load(userptr, "glMatrixTranslatefEXT"); + glad_glMultiTexBufferEXT = (PFNGLMULTITEXBUFFEREXTPROC) load(userptr, "glMultiTexBufferEXT"); + glad_glMultiTexCoordPointerEXT = (PFNGLMULTITEXCOORDPOINTEREXTPROC) load(userptr, "glMultiTexCoordPointerEXT"); + glad_glMultiTexEnvfEXT = (PFNGLMULTITEXENVFEXTPROC) load(userptr, "glMultiTexEnvfEXT"); + glad_glMultiTexEnvfvEXT = (PFNGLMULTITEXENVFVEXTPROC) load(userptr, "glMultiTexEnvfvEXT"); + glad_glMultiTexEnviEXT = (PFNGLMULTITEXENVIEXTPROC) load(userptr, "glMultiTexEnviEXT"); + glad_glMultiTexEnvivEXT = (PFNGLMULTITEXENVIVEXTPROC) load(userptr, "glMultiTexEnvivEXT"); + glad_glMultiTexGendEXT = (PFNGLMULTITEXGENDEXTPROC) load(userptr, "glMultiTexGendEXT"); + glad_glMultiTexGendvEXT = (PFNGLMULTITEXGENDVEXTPROC) load(userptr, "glMultiTexGendvEXT"); + glad_glMultiTexGenfEXT = (PFNGLMULTITEXGENFEXTPROC) load(userptr, "glMultiTexGenfEXT"); + glad_glMultiTexGenfvEXT = (PFNGLMULTITEXGENFVEXTPROC) load(userptr, "glMultiTexGenfvEXT"); + glad_glMultiTexGeniEXT = (PFNGLMULTITEXGENIEXTPROC) load(userptr, "glMultiTexGeniEXT"); + glad_glMultiTexGenivEXT = (PFNGLMULTITEXGENIVEXTPROC) load(userptr, "glMultiTexGenivEXT"); + glad_glMultiTexImage1DEXT = (PFNGLMULTITEXIMAGE1DEXTPROC) load(userptr, "glMultiTexImage1DEXT"); + glad_glMultiTexImage2DEXT = (PFNGLMULTITEXIMAGE2DEXTPROC) load(userptr, "glMultiTexImage2DEXT"); + glad_glMultiTexImage3DEXT = (PFNGLMULTITEXIMAGE3DEXTPROC) load(userptr, "glMultiTexImage3DEXT"); + glad_glMultiTexParameterIivEXT = (PFNGLMULTITEXPARAMETERIIVEXTPROC) load(userptr, "glMultiTexParameterIivEXT"); + glad_glMultiTexParameterIuivEXT = (PFNGLMULTITEXPARAMETERIUIVEXTPROC) load(userptr, "glMultiTexParameterIuivEXT"); + glad_glMultiTexParameterfEXT = (PFNGLMULTITEXPARAMETERFEXTPROC) load(userptr, "glMultiTexParameterfEXT"); + glad_glMultiTexParameterfvEXT = (PFNGLMULTITEXPARAMETERFVEXTPROC) load(userptr, "glMultiTexParameterfvEXT"); + glad_glMultiTexParameteriEXT = (PFNGLMULTITEXPARAMETERIEXTPROC) load(userptr, "glMultiTexParameteriEXT"); + glad_glMultiTexParameterivEXT = (PFNGLMULTITEXPARAMETERIVEXTPROC) load(userptr, "glMultiTexParameterivEXT"); + glad_glMultiTexRenderbufferEXT = (PFNGLMULTITEXRENDERBUFFEREXTPROC) load(userptr, "glMultiTexRenderbufferEXT"); + glad_glMultiTexSubImage1DEXT = (PFNGLMULTITEXSUBIMAGE1DEXTPROC) load(userptr, "glMultiTexSubImage1DEXT"); + glad_glMultiTexSubImage2DEXT = (PFNGLMULTITEXSUBIMAGE2DEXTPROC) load(userptr, "glMultiTexSubImage2DEXT"); + glad_glMultiTexSubImage3DEXT = (PFNGLMULTITEXSUBIMAGE3DEXTPROC) load(userptr, "glMultiTexSubImage3DEXT"); + glad_glNamedBufferDataEXT = (PFNGLNAMEDBUFFERDATAEXTPROC) load(userptr, "glNamedBufferDataEXT"); + glad_glNamedBufferStorageEXT = (PFNGLNAMEDBUFFERSTORAGEEXTPROC) load(userptr, "glNamedBufferStorageEXT"); + glad_glNamedBufferSubDataEXT = (PFNGLNAMEDBUFFERSUBDATAEXTPROC) load(userptr, "glNamedBufferSubDataEXT"); + glad_glNamedCopyBufferSubDataEXT = (PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) load(userptr, "glNamedCopyBufferSubDataEXT"); + glad_glNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) load(userptr, "glNamedFramebufferParameteriEXT"); + glad_glNamedFramebufferRenderbufferEXT = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) load(userptr, "glNamedFramebufferRenderbufferEXT"); + glad_glNamedFramebufferTexture1DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) load(userptr, "glNamedFramebufferTexture1DEXT"); + glad_glNamedFramebufferTexture2DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) load(userptr, "glNamedFramebufferTexture2DEXT"); + glad_glNamedFramebufferTexture3DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) load(userptr, "glNamedFramebufferTexture3DEXT"); + glad_glNamedFramebufferTextureEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) load(userptr, "glNamedFramebufferTextureEXT"); + glad_glNamedFramebufferTextureFaceEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) load(userptr, "glNamedFramebufferTextureFaceEXT"); + glad_glNamedFramebufferTextureLayerEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) load(userptr, "glNamedFramebufferTextureLayerEXT"); + glad_glNamedProgramLocalParameter4dEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) load(userptr, "glNamedProgramLocalParameter4dEXT"); + glad_glNamedProgramLocalParameter4dvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) load(userptr, "glNamedProgramLocalParameter4dvEXT"); + glad_glNamedProgramLocalParameter4fEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) load(userptr, "glNamedProgramLocalParameter4fEXT"); + glad_glNamedProgramLocalParameter4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) load(userptr, "glNamedProgramLocalParameter4fvEXT"); + glad_glNamedProgramLocalParameterI4iEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) load(userptr, "glNamedProgramLocalParameterI4iEXT"); + glad_glNamedProgramLocalParameterI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) load(userptr, "glNamedProgramLocalParameterI4ivEXT"); + glad_glNamedProgramLocalParameterI4uiEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) load(userptr, "glNamedProgramLocalParameterI4uiEXT"); + glad_glNamedProgramLocalParameterI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) load(userptr, "glNamedProgramLocalParameterI4uivEXT"); + glad_glNamedProgramLocalParameters4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) load(userptr, "glNamedProgramLocalParameters4fvEXT"); + glad_glNamedProgramLocalParametersI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) load(userptr, "glNamedProgramLocalParametersI4ivEXT"); + glad_glNamedProgramLocalParametersI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) load(userptr, "glNamedProgramLocalParametersI4uivEXT"); + glad_glNamedProgramStringEXT = (PFNGLNAMEDPROGRAMSTRINGEXTPROC) load(userptr, "glNamedProgramStringEXT"); + glad_glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) load(userptr, "glNamedRenderbufferStorageEXT"); + glad_glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) load(userptr, "glNamedRenderbufferStorageMultisampleCoverageEXT"); + glad_glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) load(userptr, "glNamedRenderbufferStorageMultisampleEXT"); + glad_glProgramUniform1dEXT = (PFNGLPROGRAMUNIFORM1DEXTPROC) load(userptr, "glProgramUniform1dEXT"); + glad_glProgramUniform1dvEXT = (PFNGLPROGRAMUNIFORM1DVEXTPROC) load(userptr, "glProgramUniform1dvEXT"); + glad_glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC) load(userptr, "glProgramUniform1fEXT"); + glad_glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC) load(userptr, "glProgramUniform1fvEXT"); + glad_glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC) load(userptr, "glProgramUniform1iEXT"); + glad_glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC) load(userptr, "glProgramUniform1ivEXT"); + glad_glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC) load(userptr, "glProgramUniform1uiEXT"); + glad_glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC) load(userptr, "glProgramUniform1uivEXT"); + glad_glProgramUniform2dEXT = (PFNGLPROGRAMUNIFORM2DEXTPROC) load(userptr, "glProgramUniform2dEXT"); + glad_glProgramUniform2dvEXT = (PFNGLPROGRAMUNIFORM2DVEXTPROC) load(userptr, "glProgramUniform2dvEXT"); + glad_glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC) load(userptr, "glProgramUniform2fEXT"); + glad_glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC) load(userptr, "glProgramUniform2fvEXT"); + glad_glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC) load(userptr, "glProgramUniform2iEXT"); + glad_glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC) load(userptr, "glProgramUniform2ivEXT"); + glad_glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC) load(userptr, "glProgramUniform2uiEXT"); + glad_glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC) load(userptr, "glProgramUniform2uivEXT"); + glad_glProgramUniform3dEXT = (PFNGLPROGRAMUNIFORM3DEXTPROC) load(userptr, "glProgramUniform3dEXT"); + glad_glProgramUniform3dvEXT = (PFNGLPROGRAMUNIFORM3DVEXTPROC) load(userptr, "glProgramUniform3dvEXT"); + glad_glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC) load(userptr, "glProgramUniform3fEXT"); + glad_glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC) load(userptr, "glProgramUniform3fvEXT"); + glad_glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC) load(userptr, "glProgramUniform3iEXT"); + glad_glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC) load(userptr, "glProgramUniform3ivEXT"); + glad_glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC) load(userptr, "glProgramUniform3uiEXT"); + glad_glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC) load(userptr, "glProgramUniform3uivEXT"); + glad_glProgramUniform4dEXT = (PFNGLPROGRAMUNIFORM4DEXTPROC) load(userptr, "glProgramUniform4dEXT"); + glad_glProgramUniform4dvEXT = (PFNGLPROGRAMUNIFORM4DVEXTPROC) load(userptr, "glProgramUniform4dvEXT"); + glad_glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC) load(userptr, "glProgramUniform4fEXT"); + glad_glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC) load(userptr, "glProgramUniform4fvEXT"); + glad_glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC) load(userptr, "glProgramUniform4iEXT"); + glad_glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC) load(userptr, "glProgramUniform4ivEXT"); + glad_glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC) load(userptr, "glProgramUniform4uiEXT"); + glad_glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC) load(userptr, "glProgramUniform4uivEXT"); + glad_glProgramUniformMatrix2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) load(userptr, "glProgramUniformMatrix2dvEXT"); + glad_glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) load(userptr, "glProgramUniformMatrix2fvEXT"); + glad_glProgramUniformMatrix2x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) load(userptr, "glProgramUniformMatrix2x3dvEXT"); + glad_glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) load(userptr, "glProgramUniformMatrix2x3fvEXT"); + glad_glProgramUniformMatrix2x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) load(userptr, "glProgramUniformMatrix2x4dvEXT"); + glad_glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) load(userptr, "glProgramUniformMatrix2x4fvEXT"); + glad_glProgramUniformMatrix3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) load(userptr, "glProgramUniformMatrix3dvEXT"); + glad_glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) load(userptr, "glProgramUniformMatrix3fvEXT"); + glad_glProgramUniformMatrix3x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) load(userptr, "glProgramUniformMatrix3x2dvEXT"); + glad_glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) load(userptr, "glProgramUniformMatrix3x2fvEXT"); + glad_glProgramUniformMatrix3x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) load(userptr, "glProgramUniformMatrix3x4dvEXT"); + glad_glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) load(userptr, "glProgramUniformMatrix3x4fvEXT"); + glad_glProgramUniformMatrix4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) load(userptr, "glProgramUniformMatrix4dvEXT"); + glad_glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) load(userptr, "glProgramUniformMatrix4fvEXT"); + glad_glProgramUniformMatrix4x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) load(userptr, "glProgramUniformMatrix4x2dvEXT"); + glad_glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) load(userptr, "glProgramUniformMatrix4x2fvEXT"); + glad_glProgramUniformMatrix4x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) load(userptr, "glProgramUniformMatrix4x3dvEXT"); + glad_glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) load(userptr, "glProgramUniformMatrix4x3fvEXT"); + glad_glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) load(userptr, "glPushClientAttribDefaultEXT"); + glad_glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC) load(userptr, "glTextureBufferEXT"); + glad_glTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC) load(userptr, "glTextureBufferRangeEXT"); + glad_glTextureImage1DEXT = (PFNGLTEXTUREIMAGE1DEXTPROC) load(userptr, "glTextureImage1DEXT"); + glad_glTextureImage2DEXT = (PFNGLTEXTUREIMAGE2DEXTPROC) load(userptr, "glTextureImage2DEXT"); + glad_glTextureImage3DEXT = (PFNGLTEXTUREIMAGE3DEXTPROC) load(userptr, "glTextureImage3DEXT"); + glad_glTexturePageCommitmentEXT = (PFNGLTEXTUREPAGECOMMITMENTEXTPROC) load(userptr, "glTexturePageCommitmentEXT"); + glad_glTextureParameterIivEXT = (PFNGLTEXTUREPARAMETERIIVEXTPROC) load(userptr, "glTextureParameterIivEXT"); + glad_glTextureParameterIuivEXT = (PFNGLTEXTUREPARAMETERIUIVEXTPROC) load(userptr, "glTextureParameterIuivEXT"); + glad_glTextureParameterfEXT = (PFNGLTEXTUREPARAMETERFEXTPROC) load(userptr, "glTextureParameterfEXT"); + glad_glTextureParameterfvEXT = (PFNGLTEXTUREPARAMETERFVEXTPROC) load(userptr, "glTextureParameterfvEXT"); + glad_glTextureParameteriEXT = (PFNGLTEXTUREPARAMETERIEXTPROC) load(userptr, "glTextureParameteriEXT"); + glad_glTextureParameterivEXT = (PFNGLTEXTUREPARAMETERIVEXTPROC) load(userptr, "glTextureParameterivEXT"); + glad_glTextureRenderbufferEXT = (PFNGLTEXTURERENDERBUFFEREXTPROC) load(userptr, "glTextureRenderbufferEXT"); + glad_glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC) load(userptr, "glTextureStorage1DEXT"); + glad_glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC) load(userptr, "glTextureStorage2DEXT"); + glad_glTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) load(userptr, "glTextureStorage2DMultisampleEXT"); + glad_glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC) load(userptr, "glTextureStorage3DEXT"); + glad_glTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) load(userptr, "glTextureStorage3DMultisampleEXT"); + glad_glTextureSubImage1DEXT = (PFNGLTEXTURESUBIMAGE1DEXTPROC) load(userptr, "glTextureSubImage1DEXT"); + glad_glTextureSubImage2DEXT = (PFNGLTEXTURESUBIMAGE2DEXTPROC) load(userptr, "glTextureSubImage2DEXT"); + glad_glTextureSubImage3DEXT = (PFNGLTEXTURESUBIMAGE3DEXTPROC) load(userptr, "glTextureSubImage3DEXT"); + glad_glUnmapNamedBufferEXT = (PFNGLUNMAPNAMEDBUFFEREXTPROC) load(userptr, "glUnmapNamedBufferEXT"); + glad_glVertexArrayBindVertexBufferEXT = (PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) load(userptr, "glVertexArrayBindVertexBufferEXT"); + glad_glVertexArrayColorOffsetEXT = (PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) load(userptr, "glVertexArrayColorOffsetEXT"); + glad_glVertexArrayEdgeFlagOffsetEXT = (PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) load(userptr, "glVertexArrayEdgeFlagOffsetEXT"); + glad_glVertexArrayFogCoordOffsetEXT = (PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) load(userptr, "glVertexArrayFogCoordOffsetEXT"); + glad_glVertexArrayIndexOffsetEXT = (PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) load(userptr, "glVertexArrayIndexOffsetEXT"); + glad_glVertexArrayMultiTexCoordOffsetEXT = (PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) load(userptr, "glVertexArrayMultiTexCoordOffsetEXT"); + glad_glVertexArrayNormalOffsetEXT = (PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) load(userptr, "glVertexArrayNormalOffsetEXT"); + glad_glVertexArraySecondaryColorOffsetEXT = (PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) load(userptr, "glVertexArraySecondaryColorOffsetEXT"); + glad_glVertexArrayTexCoordOffsetEXT = (PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) load(userptr, "glVertexArrayTexCoordOffsetEXT"); + glad_glVertexArrayVertexAttribBindingEXT = (PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) load(userptr, "glVertexArrayVertexAttribBindingEXT"); + glad_glVertexArrayVertexAttribDivisorEXT = (PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) load(userptr, "glVertexArrayVertexAttribDivisorEXT"); + glad_glVertexArrayVertexAttribFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) load(userptr, "glVertexArrayVertexAttribFormatEXT"); + glad_glVertexArrayVertexAttribIFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) load(userptr, "glVertexArrayVertexAttribIFormatEXT"); + glad_glVertexArrayVertexAttribIOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) load(userptr, "glVertexArrayVertexAttribIOffsetEXT"); + glad_glVertexArrayVertexAttribLFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) load(userptr, "glVertexArrayVertexAttribLFormatEXT"); + glad_glVertexArrayVertexAttribLOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) load(userptr, "glVertexArrayVertexAttribLOffsetEXT"); + glad_glVertexArrayVertexAttribOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) load(userptr, "glVertexArrayVertexAttribOffsetEXT"); + glad_glVertexArrayVertexBindingDivisorEXT = (PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) load(userptr, "glVertexArrayVertexBindingDivisorEXT"); + glad_glVertexArrayVertexOffsetEXT = (PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) load(userptr, "glVertexArrayVertexOffsetEXT"); +} +static void glad_gl_load_GL_EXT_draw_buffers2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_draw_buffers2) return; + glad_glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC) load(userptr, "glColorMaskIndexedEXT"); + glad_glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC) load(userptr, "glDisableIndexedEXT"); + glad_glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC) load(userptr, "glEnableIndexedEXT"); + glad_glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC) load(userptr, "glGetBooleanIndexedvEXT"); + glad_glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC) load(userptr, "glGetIntegerIndexedvEXT"); + glad_glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC) load(userptr, "glIsEnabledIndexedEXT"); +} +static void glad_gl_load_GL_EXT_draw_instanced( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_draw_instanced) return; + glad_glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC) load(userptr, "glDrawArraysInstancedEXT"); + glad_glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC) load(userptr, "glDrawElementsInstancedEXT"); +} +static void glad_gl_load_GL_EXT_draw_range_elements( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_draw_range_elements) return; + glad_glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC) load(userptr, "glDrawRangeElementsEXT"); +} +static void glad_gl_load_GL_EXT_external_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_external_buffer) return; + glad_glBufferStorageExternalEXT = (PFNGLBUFFERSTORAGEEXTERNALEXTPROC) load(userptr, "glBufferStorageExternalEXT"); + glad_glNamedBufferStorageExternalEXT = (PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) load(userptr, "glNamedBufferStorageExternalEXT"); +} +static void glad_gl_load_GL_EXT_fog_coord( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_fog_coord) return; + glad_glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC) load(userptr, "glFogCoordPointerEXT"); + glad_glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC) load(userptr, "glFogCoorddEXT"); + glad_glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC) load(userptr, "glFogCoorddvEXT"); + glad_glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC) load(userptr, "glFogCoordfEXT"); + glad_glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC) load(userptr, "glFogCoordfvEXT"); +} +static void glad_gl_load_GL_EXT_framebuffer_blit( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_framebuffer_blit) return; + glad_glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC) load(userptr, "glBlitFramebufferEXT"); +} +static void glad_gl_load_GL_EXT_framebuffer_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_framebuffer_multisample) return; + glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) load(userptr, "glRenderbufferStorageMultisampleEXT"); +} +static void glad_gl_load_GL_EXT_framebuffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_framebuffer_object) return; + glad_glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) load(userptr, "glBindFramebufferEXT"); + glad_glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) load(userptr, "glBindRenderbufferEXT"); + glad_glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) load(userptr, "glCheckFramebufferStatusEXT"); + glad_glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) load(userptr, "glDeleteFramebuffersEXT"); + glad_glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) load(userptr, "glDeleteRenderbuffersEXT"); + glad_glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) load(userptr, "glFramebufferRenderbufferEXT"); + glad_glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) load(userptr, "glFramebufferTexture1DEXT"); + glad_glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) load(userptr, "glFramebufferTexture2DEXT"); + glad_glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) load(userptr, "glFramebufferTexture3DEXT"); + glad_glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) load(userptr, "glGenFramebuffersEXT"); + glad_glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) load(userptr, "glGenRenderbuffersEXT"); + glad_glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) load(userptr, "glGenerateMipmapEXT"); + glad_glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) load(userptr, "glGetFramebufferAttachmentParameterivEXT"); + glad_glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) load(userptr, "glGetRenderbufferParameterivEXT"); + glad_glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC) load(userptr, "glIsFramebufferEXT"); + glad_glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC) load(userptr, "glIsRenderbufferEXT"); + glad_glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) load(userptr, "glRenderbufferStorageEXT"); +} +static void glad_gl_load_GL_EXT_geometry_shader4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_geometry_shader4) return; + glad_glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC) load(userptr, "glProgramParameteriEXT"); +} +static void glad_gl_load_GL_EXT_gpu_program_parameters( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_gpu_program_parameters) return; + glad_glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) load(userptr, "glProgramEnvParameters4fvEXT"); + glad_glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) load(userptr, "glProgramLocalParameters4fvEXT"); +} +static void glad_gl_load_GL_EXT_gpu_shader4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_gpu_shader4) return; + glad_glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC) load(userptr, "glBindFragDataLocationEXT"); + glad_glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC) load(userptr, "glGetFragDataLocationEXT"); + glad_glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC) load(userptr, "glGetUniformuivEXT"); + glad_glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC) load(userptr, "glGetVertexAttribIivEXT"); + glad_glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC) load(userptr, "glGetVertexAttribIuivEXT"); + glad_glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC) load(userptr, "glUniform1uiEXT"); + glad_glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC) load(userptr, "glUniform1uivEXT"); + glad_glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC) load(userptr, "glUniform2uiEXT"); + glad_glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC) load(userptr, "glUniform2uivEXT"); + glad_glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC) load(userptr, "glUniform3uiEXT"); + glad_glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC) load(userptr, "glUniform3uivEXT"); + glad_glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC) load(userptr, "glUniform4uiEXT"); + glad_glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC) load(userptr, "glUniform4uivEXT"); + glad_glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC) load(userptr, "glVertexAttribI1iEXT"); + glad_glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC) load(userptr, "glVertexAttribI1ivEXT"); + glad_glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC) load(userptr, "glVertexAttribI1uiEXT"); + glad_glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC) load(userptr, "glVertexAttribI1uivEXT"); + glad_glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC) load(userptr, "glVertexAttribI2iEXT"); + glad_glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC) load(userptr, "glVertexAttribI2ivEXT"); + glad_glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC) load(userptr, "glVertexAttribI2uiEXT"); + glad_glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC) load(userptr, "glVertexAttribI2uivEXT"); + glad_glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC) load(userptr, "glVertexAttribI3iEXT"); + glad_glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC) load(userptr, "glVertexAttribI3ivEXT"); + glad_glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC) load(userptr, "glVertexAttribI3uiEXT"); + glad_glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC) load(userptr, "glVertexAttribI3uivEXT"); + glad_glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC) load(userptr, "glVertexAttribI4bvEXT"); + glad_glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC) load(userptr, "glVertexAttribI4iEXT"); + glad_glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC) load(userptr, "glVertexAttribI4ivEXT"); + glad_glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC) load(userptr, "glVertexAttribI4svEXT"); + glad_glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC) load(userptr, "glVertexAttribI4ubvEXT"); + glad_glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC) load(userptr, "glVertexAttribI4uiEXT"); + glad_glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC) load(userptr, "glVertexAttribI4uivEXT"); + glad_glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC) load(userptr, "glVertexAttribI4usvEXT"); + glad_glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC) load(userptr, "glVertexAttribIPointerEXT"); +} +static void glad_gl_load_GL_EXT_histogram( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_histogram) return; + glad_glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC) load(userptr, "glGetHistogramEXT"); + glad_glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) load(userptr, "glGetHistogramParameterfvEXT"); + glad_glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) load(userptr, "glGetHistogramParameterivEXT"); + glad_glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC) load(userptr, "glGetMinmaxEXT"); + glad_glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC) load(userptr, "glGetMinmaxParameterfvEXT"); + glad_glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC) load(userptr, "glGetMinmaxParameterivEXT"); + glad_glHistogramEXT = (PFNGLHISTOGRAMEXTPROC) load(userptr, "glHistogramEXT"); + glad_glMinmaxEXT = (PFNGLMINMAXEXTPROC) load(userptr, "glMinmaxEXT"); + glad_glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC) load(userptr, "glResetHistogramEXT"); + glad_glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC) load(userptr, "glResetMinmaxEXT"); +} +static void glad_gl_load_GL_EXT_index_func( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_index_func) return; + glad_glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC) load(userptr, "glIndexFuncEXT"); +} +static void glad_gl_load_GL_EXT_index_material( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_index_material) return; + glad_glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC) load(userptr, "glIndexMaterialEXT"); +} +static void glad_gl_load_GL_EXT_light_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_light_texture) return; + glad_glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC) load(userptr, "glApplyTextureEXT"); + glad_glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC) load(userptr, "glTextureLightEXT"); + glad_glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC) load(userptr, "glTextureMaterialEXT"); +} +static void glad_gl_load_GL_EXT_memory_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_memory_object) return; + glad_glBufferStorageMemEXT = (PFNGLBUFFERSTORAGEMEMEXTPROC) load(userptr, "glBufferStorageMemEXT"); + glad_glCreateMemoryObjectsEXT = (PFNGLCREATEMEMORYOBJECTSEXTPROC) load(userptr, "glCreateMemoryObjectsEXT"); + glad_glDeleteMemoryObjectsEXT = (PFNGLDELETEMEMORYOBJECTSEXTPROC) load(userptr, "glDeleteMemoryObjectsEXT"); + glad_glGetMemoryObjectParameterivEXT = (PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) load(userptr, "glGetMemoryObjectParameterivEXT"); + glad_glGetUnsignedBytei_vEXT = (PFNGLGETUNSIGNEDBYTEI_VEXTPROC) load(userptr, "glGetUnsignedBytei_vEXT"); + glad_glGetUnsignedBytevEXT = (PFNGLGETUNSIGNEDBYTEVEXTPROC) load(userptr, "glGetUnsignedBytevEXT"); + glad_glIsMemoryObjectEXT = (PFNGLISMEMORYOBJECTEXTPROC) load(userptr, "glIsMemoryObjectEXT"); + glad_glMemoryObjectParameterivEXT = (PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) load(userptr, "glMemoryObjectParameterivEXT"); + glad_glNamedBufferStorageMemEXT = (PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) load(userptr, "glNamedBufferStorageMemEXT"); + glad_glTexStorageMem1DEXT = (PFNGLTEXSTORAGEMEM1DEXTPROC) load(userptr, "glTexStorageMem1DEXT"); + glad_glTexStorageMem2DEXT = (PFNGLTEXSTORAGEMEM2DEXTPROC) load(userptr, "glTexStorageMem2DEXT"); + glad_glTexStorageMem2DMultisampleEXT = (PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) load(userptr, "glTexStorageMem2DMultisampleEXT"); + glad_glTexStorageMem3DEXT = (PFNGLTEXSTORAGEMEM3DEXTPROC) load(userptr, "glTexStorageMem3DEXT"); + glad_glTexStorageMem3DMultisampleEXT = (PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) load(userptr, "glTexStorageMem3DMultisampleEXT"); + glad_glTextureStorageMem1DEXT = (PFNGLTEXTURESTORAGEMEM1DEXTPROC) load(userptr, "glTextureStorageMem1DEXT"); + glad_glTextureStorageMem2DEXT = (PFNGLTEXTURESTORAGEMEM2DEXTPROC) load(userptr, "glTextureStorageMem2DEXT"); + glad_glTextureStorageMem2DMultisampleEXT = (PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) load(userptr, "glTextureStorageMem2DMultisampleEXT"); + glad_glTextureStorageMem3DEXT = (PFNGLTEXTURESTORAGEMEM3DEXTPROC) load(userptr, "glTextureStorageMem3DEXT"); + glad_glTextureStorageMem3DMultisampleEXT = (PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) load(userptr, "glTextureStorageMem3DMultisampleEXT"); +} +static void glad_gl_load_GL_EXT_memory_object_fd( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_memory_object_fd) return; + glad_glImportMemoryFdEXT = (PFNGLIMPORTMEMORYFDEXTPROC) load(userptr, "glImportMemoryFdEXT"); +} +static void glad_gl_load_GL_EXT_memory_object_win32( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_memory_object_win32) return; + glad_glImportMemoryWin32HandleEXT = (PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) load(userptr, "glImportMemoryWin32HandleEXT"); + glad_glImportMemoryWin32NameEXT = (PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) load(userptr, "glImportMemoryWin32NameEXT"); +} +static void glad_gl_load_GL_EXT_multi_draw_arrays( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_multi_draw_arrays) return; + glad_glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC) load(userptr, "glMultiDrawArraysEXT"); + glad_glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC) load(userptr, "glMultiDrawElementsEXT"); +} +static void glad_gl_load_GL_EXT_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_multisample) return; + glad_glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC) load(userptr, "glSampleMaskEXT"); + glad_glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC) load(userptr, "glSamplePatternEXT"); +} +static void glad_gl_load_GL_EXT_paletted_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_paletted_texture) return; + glad_glColorTableEXT = (PFNGLCOLORTABLEEXTPROC) load(userptr, "glColorTableEXT"); + glad_glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC) load(userptr, "glGetColorTableEXT"); + glad_glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) load(userptr, "glGetColorTableParameterfvEXT"); + glad_glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) load(userptr, "glGetColorTableParameterivEXT"); +} +static void glad_gl_load_GL_EXT_pixel_transform( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_pixel_transform) return; + glad_glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) load(userptr, "glGetPixelTransformParameterfvEXT"); + glad_glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) load(userptr, "glGetPixelTransformParameterivEXT"); + glad_glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) load(userptr, "glPixelTransformParameterfEXT"); + glad_glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) load(userptr, "glPixelTransformParameterfvEXT"); + glad_glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) load(userptr, "glPixelTransformParameteriEXT"); + glad_glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) load(userptr, "glPixelTransformParameterivEXT"); +} +static void glad_gl_load_GL_EXT_point_parameters( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_point_parameters) return; + glad_glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC) load(userptr, "glPointParameterfEXT"); + glad_glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC) load(userptr, "glPointParameterfvEXT"); +} +static void glad_gl_load_GL_EXT_polygon_offset( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_polygon_offset) return; + glad_glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC) load(userptr, "glPolygonOffsetEXT"); +} +static void glad_gl_load_GL_EXT_polygon_offset_clamp( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_polygon_offset_clamp) return; + glad_glPolygonOffsetClampEXT = (PFNGLPOLYGONOFFSETCLAMPEXTPROC) load(userptr, "glPolygonOffsetClampEXT"); +} +static void glad_gl_load_GL_EXT_provoking_vertex( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_provoking_vertex) return; + glad_glProvokingVertexEXT = (PFNGLPROVOKINGVERTEXEXTPROC) load(userptr, "glProvokingVertexEXT"); +} +static void glad_gl_load_GL_EXT_raster_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_raster_multisample) return; + glad_glRasterSamplesEXT = (PFNGLRASTERSAMPLESEXTPROC) load(userptr, "glRasterSamplesEXT"); +} +static void glad_gl_load_GL_EXT_secondary_color( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_secondary_color) return; + glad_glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC) load(userptr, "glSecondaryColor3bEXT"); + glad_glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC) load(userptr, "glSecondaryColor3bvEXT"); + glad_glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC) load(userptr, "glSecondaryColor3dEXT"); + glad_glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC) load(userptr, "glSecondaryColor3dvEXT"); + glad_glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC) load(userptr, "glSecondaryColor3fEXT"); + glad_glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC) load(userptr, "glSecondaryColor3fvEXT"); + glad_glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC) load(userptr, "glSecondaryColor3iEXT"); + glad_glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC) load(userptr, "glSecondaryColor3ivEXT"); + glad_glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC) load(userptr, "glSecondaryColor3sEXT"); + glad_glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC) load(userptr, "glSecondaryColor3svEXT"); + glad_glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC) load(userptr, "glSecondaryColor3ubEXT"); + glad_glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC) load(userptr, "glSecondaryColor3ubvEXT"); + glad_glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC) load(userptr, "glSecondaryColor3uiEXT"); + glad_glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC) load(userptr, "glSecondaryColor3uivEXT"); + glad_glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC) load(userptr, "glSecondaryColor3usEXT"); + glad_glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC) load(userptr, "glSecondaryColor3usvEXT"); + glad_glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC) load(userptr, "glSecondaryColorPointerEXT"); +} +static void glad_gl_load_GL_EXT_semaphore( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_semaphore) return; + glad_glDeleteSemaphoresEXT = (PFNGLDELETESEMAPHORESEXTPROC) load(userptr, "glDeleteSemaphoresEXT"); + glad_glGenSemaphoresEXT = (PFNGLGENSEMAPHORESEXTPROC) load(userptr, "glGenSemaphoresEXT"); + glad_glGetSemaphoreParameterui64vEXT = (PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) load(userptr, "glGetSemaphoreParameterui64vEXT"); + glad_glGetUnsignedBytei_vEXT = (PFNGLGETUNSIGNEDBYTEI_VEXTPROC) load(userptr, "glGetUnsignedBytei_vEXT"); + glad_glGetUnsignedBytevEXT = (PFNGLGETUNSIGNEDBYTEVEXTPROC) load(userptr, "glGetUnsignedBytevEXT"); + glad_glIsSemaphoreEXT = (PFNGLISSEMAPHOREEXTPROC) load(userptr, "glIsSemaphoreEXT"); + glad_glSemaphoreParameterui64vEXT = (PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) load(userptr, "glSemaphoreParameterui64vEXT"); + glad_glSignalSemaphoreEXT = (PFNGLSIGNALSEMAPHOREEXTPROC) load(userptr, "glSignalSemaphoreEXT"); + glad_glWaitSemaphoreEXT = (PFNGLWAITSEMAPHOREEXTPROC) load(userptr, "glWaitSemaphoreEXT"); +} +static void glad_gl_load_GL_EXT_semaphore_fd( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_semaphore_fd) return; + glad_glImportSemaphoreFdEXT = (PFNGLIMPORTSEMAPHOREFDEXTPROC) load(userptr, "glImportSemaphoreFdEXT"); +} +static void glad_gl_load_GL_EXT_semaphore_win32( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_semaphore_win32) return; + glad_glImportSemaphoreWin32HandleEXT = (PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) load(userptr, "glImportSemaphoreWin32HandleEXT"); + glad_glImportSemaphoreWin32NameEXT = (PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) load(userptr, "glImportSemaphoreWin32NameEXT"); +} +static void glad_gl_load_GL_EXT_separate_shader_objects( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_separate_shader_objects) return; + glad_glActiveProgramEXT = (PFNGLACTIVEPROGRAMEXTPROC) load(userptr, "glActiveProgramEXT"); + glad_glCreateShaderProgramEXT = (PFNGLCREATESHADERPROGRAMEXTPROC) load(userptr, "glCreateShaderProgramEXT"); + glad_glUseShaderProgramEXT = (PFNGLUSESHADERPROGRAMEXTPROC) load(userptr, "glUseShaderProgramEXT"); +} +static void glad_gl_load_GL_EXT_shader_framebuffer_fetch_non_coherent( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent) return; + glad_glFramebufferFetchBarrierEXT = (PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) load(userptr, "glFramebufferFetchBarrierEXT"); +} +static void glad_gl_load_GL_EXT_shader_image_load_store( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_shader_image_load_store) return; + glad_glBindImageTextureEXT = (PFNGLBINDIMAGETEXTUREEXTPROC) load(userptr, "glBindImageTextureEXT"); + glad_glMemoryBarrierEXT = (PFNGLMEMORYBARRIEREXTPROC) load(userptr, "glMemoryBarrierEXT"); +} +static void glad_gl_load_GL_EXT_stencil_clear_tag( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_stencil_clear_tag) return; + glad_glStencilClearTagEXT = (PFNGLSTENCILCLEARTAGEXTPROC) load(userptr, "glStencilClearTagEXT"); +} +static void glad_gl_load_GL_EXT_stencil_two_side( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_stencil_two_side) return; + glad_glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC) load(userptr, "glActiveStencilFaceEXT"); +} +static void glad_gl_load_GL_EXT_subtexture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_subtexture) return; + glad_glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC) load(userptr, "glTexSubImage1DEXT"); + glad_glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC) load(userptr, "glTexSubImage2DEXT"); +} +static void glad_gl_load_GL_EXT_texture3D( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_texture3D) return; + glad_glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC) load(userptr, "glTexImage3DEXT"); + glad_glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC) load(userptr, "glTexSubImage3DEXT"); +} +static void glad_gl_load_GL_EXT_texture_array( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_texture_array) return; + glad_glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) load(userptr, "glFramebufferTextureLayerEXT"); +} +static void glad_gl_load_GL_EXT_texture_buffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_texture_buffer_object) return; + glad_glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC) load(userptr, "glTexBufferEXT"); +} +static void glad_gl_load_GL_EXT_texture_integer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_texture_integer) return; + glad_glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC) load(userptr, "glClearColorIiEXT"); + glad_glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC) load(userptr, "glClearColorIuiEXT"); + glad_glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC) load(userptr, "glGetTexParameterIivEXT"); + glad_glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC) load(userptr, "glGetTexParameterIuivEXT"); + glad_glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC) load(userptr, "glTexParameterIivEXT"); + glad_glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC) load(userptr, "glTexParameterIuivEXT"); +} +static void glad_gl_load_GL_EXT_texture_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_texture_object) return; + glad_glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC) load(userptr, "glAreTexturesResidentEXT"); + glad_glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC) load(userptr, "glBindTextureEXT"); + glad_glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC) load(userptr, "glDeleteTexturesEXT"); + glad_glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC) load(userptr, "glGenTexturesEXT"); + glad_glIsTextureEXT = (PFNGLISTEXTUREEXTPROC) load(userptr, "glIsTextureEXT"); + glad_glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC) load(userptr, "glPrioritizeTexturesEXT"); +} +static void glad_gl_load_GL_EXT_texture_perturb_normal( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_texture_perturb_normal) return; + glad_glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC) load(userptr, "glTextureNormalEXT"); +} +static void glad_gl_load_GL_EXT_texture_storage( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_texture_storage) return; + glad_glTexStorage1DEXT = (PFNGLTEXSTORAGE1DEXTPROC) load(userptr, "glTexStorage1DEXT"); + glad_glTexStorage2DEXT = (PFNGLTEXSTORAGE2DEXTPROC) load(userptr, "glTexStorage2DEXT"); + glad_glTexStorage3DEXT = (PFNGLTEXSTORAGE3DEXTPROC) load(userptr, "glTexStorage3DEXT"); + glad_glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC) load(userptr, "glTextureStorage1DEXT"); + glad_glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC) load(userptr, "glTextureStorage2DEXT"); + glad_glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC) load(userptr, "glTextureStorage3DEXT"); +} +static void glad_gl_load_GL_EXT_timer_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_timer_query) return; + glad_glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC) load(userptr, "glGetQueryObjecti64vEXT"); + glad_glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC) load(userptr, "glGetQueryObjectui64vEXT"); +} +static void glad_gl_load_GL_EXT_transform_feedback( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_transform_feedback) return; + glad_glBeginTransformFeedbackEXT = (PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) load(userptr, "glBeginTransformFeedbackEXT"); + glad_glBindBufferBaseEXT = (PFNGLBINDBUFFERBASEEXTPROC) load(userptr, "glBindBufferBaseEXT"); + glad_glBindBufferOffsetEXT = (PFNGLBINDBUFFEROFFSETEXTPROC) load(userptr, "glBindBufferOffsetEXT"); + glad_glBindBufferRangeEXT = (PFNGLBINDBUFFERRANGEEXTPROC) load(userptr, "glBindBufferRangeEXT"); + glad_glEndTransformFeedbackEXT = (PFNGLENDTRANSFORMFEEDBACKEXTPROC) load(userptr, "glEndTransformFeedbackEXT"); + glad_glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) load(userptr, "glGetTransformFeedbackVaryingEXT"); + glad_glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) load(userptr, "glTransformFeedbackVaryingsEXT"); +} +static void glad_gl_load_GL_EXT_vertex_array( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_vertex_array) return; + glad_glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC) load(userptr, "glArrayElementEXT"); + glad_glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC) load(userptr, "glColorPointerEXT"); + glad_glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC) load(userptr, "glDrawArraysEXT"); + glad_glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC) load(userptr, "glEdgeFlagPointerEXT"); + glad_glGetPointervEXT = (PFNGLGETPOINTERVEXTPROC) load(userptr, "glGetPointervEXT"); + glad_glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC) load(userptr, "glIndexPointerEXT"); + glad_glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC) load(userptr, "glNormalPointerEXT"); + glad_glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC) load(userptr, "glTexCoordPointerEXT"); + glad_glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC) load(userptr, "glVertexPointerEXT"); +} +static void glad_gl_load_GL_EXT_vertex_attrib_64bit( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_vertex_attrib_64bit) return; + glad_glGetVertexAttribLdvEXT = (PFNGLGETVERTEXATTRIBLDVEXTPROC) load(userptr, "glGetVertexAttribLdvEXT"); + glad_glVertexAttribL1dEXT = (PFNGLVERTEXATTRIBL1DEXTPROC) load(userptr, "glVertexAttribL1dEXT"); + glad_glVertexAttribL1dvEXT = (PFNGLVERTEXATTRIBL1DVEXTPROC) load(userptr, "glVertexAttribL1dvEXT"); + glad_glVertexAttribL2dEXT = (PFNGLVERTEXATTRIBL2DEXTPROC) load(userptr, "glVertexAttribL2dEXT"); + glad_glVertexAttribL2dvEXT = (PFNGLVERTEXATTRIBL2DVEXTPROC) load(userptr, "glVertexAttribL2dvEXT"); + glad_glVertexAttribL3dEXT = (PFNGLVERTEXATTRIBL3DEXTPROC) load(userptr, "glVertexAttribL3dEXT"); + glad_glVertexAttribL3dvEXT = (PFNGLVERTEXATTRIBL3DVEXTPROC) load(userptr, "glVertexAttribL3dvEXT"); + glad_glVertexAttribL4dEXT = (PFNGLVERTEXATTRIBL4DEXTPROC) load(userptr, "glVertexAttribL4dEXT"); + glad_glVertexAttribL4dvEXT = (PFNGLVERTEXATTRIBL4DVEXTPROC) load(userptr, "glVertexAttribL4dvEXT"); + glad_glVertexAttribLPointerEXT = (PFNGLVERTEXATTRIBLPOINTEREXTPROC) load(userptr, "glVertexAttribLPointerEXT"); +} +static void glad_gl_load_GL_EXT_vertex_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_vertex_shader) return; + glad_glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC) load(userptr, "glBeginVertexShaderEXT"); + glad_glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC) load(userptr, "glBindLightParameterEXT"); + glad_glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC) load(userptr, "glBindMaterialParameterEXT"); + glad_glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC) load(userptr, "glBindParameterEXT"); + glad_glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC) load(userptr, "glBindTexGenParameterEXT"); + glad_glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) load(userptr, "glBindTextureUnitParameterEXT"); + glad_glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC) load(userptr, "glBindVertexShaderEXT"); + glad_glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC) load(userptr, "glDeleteVertexShaderEXT"); + glad_glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) load(userptr, "glDisableVariantClientStateEXT"); + glad_glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) load(userptr, "glEnableVariantClientStateEXT"); + glad_glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC) load(userptr, "glEndVertexShaderEXT"); + glad_glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC) load(userptr, "glExtractComponentEXT"); + glad_glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC) load(userptr, "glGenSymbolsEXT"); + glad_glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC) load(userptr, "glGenVertexShadersEXT"); + glad_glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC) load(userptr, "glGetInvariantBooleanvEXT"); + glad_glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC) load(userptr, "glGetInvariantFloatvEXT"); + glad_glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC) load(userptr, "glGetInvariantIntegervEXT"); + glad_glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) load(userptr, "glGetLocalConstantBooleanvEXT"); + glad_glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC) load(userptr, "glGetLocalConstantFloatvEXT"); + glad_glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) load(userptr, "glGetLocalConstantIntegervEXT"); + glad_glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC) load(userptr, "glGetVariantBooleanvEXT"); + glad_glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC) load(userptr, "glGetVariantFloatvEXT"); + glad_glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC) load(userptr, "glGetVariantIntegervEXT"); + glad_glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC) load(userptr, "glGetVariantPointervEXT"); + glad_glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC) load(userptr, "glInsertComponentEXT"); + glad_glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC) load(userptr, "glIsVariantEnabledEXT"); + glad_glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC) load(userptr, "glSetInvariantEXT"); + glad_glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC) load(userptr, "glSetLocalConstantEXT"); + glad_glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC) load(userptr, "glShaderOp1EXT"); + glad_glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC) load(userptr, "glShaderOp2EXT"); + glad_glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC) load(userptr, "glShaderOp3EXT"); + glad_glSwizzleEXT = (PFNGLSWIZZLEEXTPROC) load(userptr, "glSwizzleEXT"); + glad_glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC) load(userptr, "glVariantPointerEXT"); + glad_glVariantbvEXT = (PFNGLVARIANTBVEXTPROC) load(userptr, "glVariantbvEXT"); + glad_glVariantdvEXT = (PFNGLVARIANTDVEXTPROC) load(userptr, "glVariantdvEXT"); + glad_glVariantfvEXT = (PFNGLVARIANTFVEXTPROC) load(userptr, "glVariantfvEXT"); + glad_glVariantivEXT = (PFNGLVARIANTIVEXTPROC) load(userptr, "glVariantivEXT"); + glad_glVariantsvEXT = (PFNGLVARIANTSVEXTPROC) load(userptr, "glVariantsvEXT"); + glad_glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC) load(userptr, "glVariantubvEXT"); + glad_glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC) load(userptr, "glVariantuivEXT"); + glad_glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC) load(userptr, "glVariantusvEXT"); + glad_glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC) load(userptr, "glWriteMaskEXT"); +} +static void glad_gl_load_GL_EXT_vertex_weighting( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_vertex_weighting) return; + glad_glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC) load(userptr, "glVertexWeightPointerEXT"); + glad_glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC) load(userptr, "glVertexWeightfEXT"); + glad_glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC) load(userptr, "glVertexWeightfvEXT"); +} +static void glad_gl_load_GL_EXT_win32_keyed_mutex( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_win32_keyed_mutex) return; + glad_glAcquireKeyedMutexWin32EXT = (PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) load(userptr, "glAcquireKeyedMutexWin32EXT"); + glad_glReleaseKeyedMutexWin32EXT = (PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) load(userptr, "glReleaseKeyedMutexWin32EXT"); +} +static void glad_gl_load_GL_EXT_window_rectangles( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_window_rectangles) return; + glad_glWindowRectanglesEXT = (PFNGLWINDOWRECTANGLESEXTPROC) load(userptr, "glWindowRectanglesEXT"); +} +static void glad_gl_load_GL_EXT_x11_sync_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_EXT_x11_sync_object) return; + glad_glImportSyncEXT = (PFNGLIMPORTSYNCEXTPROC) load(userptr, "glImportSyncEXT"); +} +static void glad_gl_load_GL_GREMEDY_frame_terminator( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_GREMEDY_frame_terminator) return; + glad_glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC) load(userptr, "glFrameTerminatorGREMEDY"); +} +static void glad_gl_load_GL_GREMEDY_string_marker( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_GREMEDY_string_marker) return; + glad_glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC) load(userptr, "glStringMarkerGREMEDY"); +} +static void glad_gl_load_GL_HP_image_transform( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_HP_image_transform) return; + glad_glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) load(userptr, "glGetImageTransformParameterfvHP"); + glad_glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) load(userptr, "glGetImageTransformParameterivHP"); + glad_glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC) load(userptr, "glImageTransformParameterfHP"); + glad_glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) load(userptr, "glImageTransformParameterfvHP"); + glad_glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC) load(userptr, "glImageTransformParameteriHP"); + glad_glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) load(userptr, "glImageTransformParameterivHP"); +} +static void glad_gl_load_GL_IBM_multimode_draw_arrays( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_IBM_multimode_draw_arrays) return; + glad_glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC) load(userptr, "glMultiModeDrawArraysIBM"); + glad_glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC) load(userptr, "glMultiModeDrawElementsIBM"); +} +static void glad_gl_load_GL_IBM_static_data( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_IBM_static_data) return; + glad_glFlushStaticDataIBM = (PFNGLFLUSHSTATICDATAIBMPROC) load(userptr, "glFlushStaticDataIBM"); +} +static void glad_gl_load_GL_IBM_vertex_array_lists( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_IBM_vertex_array_lists) return; + glad_glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC) load(userptr, "glColorPointerListIBM"); + glad_glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC) load(userptr, "glEdgeFlagPointerListIBM"); + glad_glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC) load(userptr, "glFogCoordPointerListIBM"); + glad_glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC) load(userptr, "glIndexPointerListIBM"); + glad_glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC) load(userptr, "glNormalPointerListIBM"); + glad_glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) load(userptr, "glSecondaryColorPointerListIBM"); + glad_glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC) load(userptr, "glTexCoordPointerListIBM"); + glad_glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC) load(userptr, "glVertexPointerListIBM"); +} +static void glad_gl_load_GL_INGR_blend_func_separate( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_INGR_blend_func_separate) return; + glad_glBlendFuncSeparateINGR = (PFNGLBLENDFUNCSEPARATEINGRPROC) load(userptr, "glBlendFuncSeparateINGR"); +} +static void glad_gl_load_GL_INTEL_framebuffer_CMAA( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_INTEL_framebuffer_CMAA) return; + glad_glApplyFramebufferAttachmentCMAAINTEL = (PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) load(userptr, "glApplyFramebufferAttachmentCMAAINTEL"); +} +static void glad_gl_load_GL_INTEL_map_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_INTEL_map_texture) return; + glad_glMapTexture2DINTEL = (PFNGLMAPTEXTURE2DINTELPROC) load(userptr, "glMapTexture2DINTEL"); + glad_glSyncTextureINTEL = (PFNGLSYNCTEXTUREINTELPROC) load(userptr, "glSyncTextureINTEL"); + glad_glUnmapTexture2DINTEL = (PFNGLUNMAPTEXTURE2DINTELPROC) load(userptr, "glUnmapTexture2DINTEL"); +} +static void glad_gl_load_GL_INTEL_parallel_arrays( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_INTEL_parallel_arrays) return; + glad_glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC) load(userptr, "glColorPointervINTEL"); + glad_glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC) load(userptr, "glNormalPointervINTEL"); + glad_glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC) load(userptr, "glTexCoordPointervINTEL"); + glad_glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC) load(userptr, "glVertexPointervINTEL"); +} +static void glad_gl_load_GL_INTEL_performance_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_INTEL_performance_query) return; + glad_glBeginPerfQueryINTEL = (PFNGLBEGINPERFQUERYINTELPROC) load(userptr, "glBeginPerfQueryINTEL"); + glad_glCreatePerfQueryINTEL = (PFNGLCREATEPERFQUERYINTELPROC) load(userptr, "glCreatePerfQueryINTEL"); + glad_glDeletePerfQueryINTEL = (PFNGLDELETEPERFQUERYINTELPROC) load(userptr, "glDeletePerfQueryINTEL"); + glad_glEndPerfQueryINTEL = (PFNGLENDPERFQUERYINTELPROC) load(userptr, "glEndPerfQueryINTEL"); + glad_glGetFirstPerfQueryIdINTEL = (PFNGLGETFIRSTPERFQUERYIDINTELPROC) load(userptr, "glGetFirstPerfQueryIdINTEL"); + glad_glGetNextPerfQueryIdINTEL = (PFNGLGETNEXTPERFQUERYIDINTELPROC) load(userptr, "glGetNextPerfQueryIdINTEL"); + glad_glGetPerfCounterInfoINTEL = (PFNGLGETPERFCOUNTERINFOINTELPROC) load(userptr, "glGetPerfCounterInfoINTEL"); + glad_glGetPerfQueryDataINTEL = (PFNGLGETPERFQUERYDATAINTELPROC) load(userptr, "glGetPerfQueryDataINTEL"); + glad_glGetPerfQueryIdByNameINTEL = (PFNGLGETPERFQUERYIDBYNAMEINTELPROC) load(userptr, "glGetPerfQueryIdByNameINTEL"); + glad_glGetPerfQueryInfoINTEL = (PFNGLGETPERFQUERYINFOINTELPROC) load(userptr, "glGetPerfQueryInfoINTEL"); +} +static void glad_gl_load_GL_KHR_blend_equation_advanced( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_KHR_blend_equation_advanced) return; + glad_glBlendBarrierKHR = (PFNGLBLENDBARRIERKHRPROC) load(userptr, "glBlendBarrierKHR"); +} +static void glad_gl_load_GL_KHR_debug( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_KHR_debug) return; + glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC) load(userptr, "glDebugMessageCallback"); + glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC) load(userptr, "glDebugMessageControl"); + glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC) load(userptr, "glDebugMessageInsert"); + glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC) load(userptr, "glGetDebugMessageLog"); + glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC) load(userptr, "glGetObjectLabel"); + glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC) load(userptr, "glGetObjectPtrLabel"); + glad_glGetPointerv = (PFNGLGETPOINTERVPROC) load(userptr, "glGetPointerv"); + glad_glObjectLabel = (PFNGLOBJECTLABELPROC) load(userptr, "glObjectLabel"); + glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC) load(userptr, "glObjectPtrLabel"); + glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC) load(userptr, "glPopDebugGroup"); + glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC) load(userptr, "glPushDebugGroup"); +} +static void glad_gl_load_GL_KHR_parallel_shader_compile( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_KHR_parallel_shader_compile) return; + glad_glMaxShaderCompilerThreadsKHR = (PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) load(userptr, "glMaxShaderCompilerThreadsKHR"); +} +static void glad_gl_load_GL_KHR_robustness( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_KHR_robustness) return; + glad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC) load(userptr, "glGetGraphicsResetStatus"); + glad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC) load(userptr, "glGetnUniformfv"); + glad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC) load(userptr, "glGetnUniformiv"); + glad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC) load(userptr, "glGetnUniformuiv"); + glad_glReadnPixels = (PFNGLREADNPIXELSPROC) load(userptr, "glReadnPixels"); +} +static void glad_gl_load_GL_MESA_framebuffer_flip_y( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_MESA_framebuffer_flip_y) return; + glad_glFramebufferParameteriMESA = (PFNGLFRAMEBUFFERPARAMETERIMESAPROC) load(userptr, "glFramebufferParameteriMESA"); + glad_glGetFramebufferParameterivMESA = (PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) load(userptr, "glGetFramebufferParameterivMESA"); +} +static void glad_gl_load_GL_MESA_resize_buffers( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_MESA_resize_buffers) return; + glad_glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC) load(userptr, "glResizeBuffersMESA"); +} +static void glad_gl_load_GL_MESA_window_pos( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_MESA_window_pos) return; + glad_glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC) load(userptr, "glWindowPos2dMESA"); + glad_glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC) load(userptr, "glWindowPos2dvMESA"); + glad_glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC) load(userptr, "glWindowPos2fMESA"); + glad_glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC) load(userptr, "glWindowPos2fvMESA"); + glad_glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC) load(userptr, "glWindowPos2iMESA"); + glad_glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC) load(userptr, "glWindowPos2ivMESA"); + glad_glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC) load(userptr, "glWindowPos2sMESA"); + glad_glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC) load(userptr, "glWindowPos2svMESA"); + glad_glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC) load(userptr, "glWindowPos3dMESA"); + glad_glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC) load(userptr, "glWindowPos3dvMESA"); + glad_glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC) load(userptr, "glWindowPos3fMESA"); + glad_glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC) load(userptr, "glWindowPos3fvMESA"); + glad_glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC) load(userptr, "glWindowPos3iMESA"); + glad_glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC) load(userptr, "glWindowPos3ivMESA"); + glad_glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC) load(userptr, "glWindowPos3sMESA"); + glad_glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC) load(userptr, "glWindowPos3svMESA"); + glad_glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC) load(userptr, "glWindowPos4dMESA"); + glad_glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC) load(userptr, "glWindowPos4dvMESA"); + glad_glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC) load(userptr, "glWindowPos4fMESA"); + glad_glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC) load(userptr, "glWindowPos4fvMESA"); + glad_glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC) load(userptr, "glWindowPos4iMESA"); + glad_glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC) load(userptr, "glWindowPos4ivMESA"); + glad_glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC) load(userptr, "glWindowPos4sMESA"); + glad_glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC) load(userptr, "glWindowPos4svMESA"); +} +static void glad_gl_load_GL_NVX_conditional_render( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NVX_conditional_render) return; + glad_glBeginConditionalRenderNVX = (PFNGLBEGINCONDITIONALRENDERNVXPROC) load(userptr, "glBeginConditionalRenderNVX"); + glad_glEndConditionalRenderNVX = (PFNGLENDCONDITIONALRENDERNVXPROC) load(userptr, "glEndConditionalRenderNVX"); +} +static void glad_gl_load_GL_NVX_gpu_multicast2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NVX_gpu_multicast2) return; + glad_glAsyncCopyBufferSubDataNVX = (PFNGLASYNCCOPYBUFFERSUBDATANVXPROC) load(userptr, "glAsyncCopyBufferSubDataNVX"); + glad_glAsyncCopyImageSubDataNVX = (PFNGLASYNCCOPYIMAGESUBDATANVXPROC) load(userptr, "glAsyncCopyImageSubDataNVX"); + glad_glMulticastScissorArrayvNVX = (PFNGLMULTICASTSCISSORARRAYVNVXPROC) load(userptr, "glMulticastScissorArrayvNVX"); + glad_glMulticastViewportArrayvNVX = (PFNGLMULTICASTVIEWPORTARRAYVNVXPROC) load(userptr, "glMulticastViewportArrayvNVX"); + glad_glMulticastViewportPositionWScaleNVX = (PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC) load(userptr, "glMulticastViewportPositionWScaleNVX"); + glad_glUploadGpuMaskNVX = (PFNGLUPLOADGPUMASKNVXPROC) load(userptr, "glUploadGpuMaskNVX"); +} +static void glad_gl_load_GL_NVX_linked_gpu_multicast( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NVX_linked_gpu_multicast) return; + glad_glLGPUCopyImageSubDataNVX = (PFNGLLGPUCOPYIMAGESUBDATANVXPROC) load(userptr, "glLGPUCopyImageSubDataNVX"); + glad_glLGPUInterlockNVX = (PFNGLLGPUINTERLOCKNVXPROC) load(userptr, "glLGPUInterlockNVX"); + glad_glLGPUNamedBufferSubDataNVX = (PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) load(userptr, "glLGPUNamedBufferSubDataNVX"); +} +static void glad_gl_load_GL_NVX_progress_fence( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NVX_progress_fence) return; + glad_glClientWaitSemaphoreui64NVX = (PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC) load(userptr, "glClientWaitSemaphoreui64NVX"); + glad_glCreateProgressFenceNVX = (PFNGLCREATEPROGRESSFENCENVXPROC) load(userptr, "glCreateProgressFenceNVX"); + glad_glSignalSemaphoreui64NVX = (PFNGLSIGNALSEMAPHOREUI64NVXPROC) load(userptr, "glSignalSemaphoreui64NVX"); + glad_glWaitSemaphoreui64NVX = (PFNGLWAITSEMAPHOREUI64NVXPROC) load(userptr, "glWaitSemaphoreui64NVX"); +} +static void glad_gl_load_GL_NV_alpha_to_coverage_dither_control( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_alpha_to_coverage_dither_control) return; + glad_glAlphaToCoverageDitherControlNV = (PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) load(userptr, "glAlphaToCoverageDitherControlNV"); +} +static void glad_gl_load_GL_NV_bindless_multi_draw_indirect( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_bindless_multi_draw_indirect) return; + glad_glMultiDrawArraysIndirectBindlessNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) load(userptr, "glMultiDrawArraysIndirectBindlessNV"); + glad_glMultiDrawElementsIndirectBindlessNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) load(userptr, "glMultiDrawElementsIndirectBindlessNV"); +} +static void glad_gl_load_GL_NV_bindless_multi_draw_indirect_count( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_bindless_multi_draw_indirect_count) return; + glad_glMultiDrawArraysIndirectBindlessCountNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) load(userptr, "glMultiDrawArraysIndirectBindlessCountNV"); + glad_glMultiDrawElementsIndirectBindlessCountNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) load(userptr, "glMultiDrawElementsIndirectBindlessCountNV"); +} +static void glad_gl_load_GL_NV_bindless_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_bindless_texture) return; + glad_glGetImageHandleNV = (PFNGLGETIMAGEHANDLENVPROC) load(userptr, "glGetImageHandleNV"); + glad_glGetTextureHandleNV = (PFNGLGETTEXTUREHANDLENVPROC) load(userptr, "glGetTextureHandleNV"); + glad_glGetTextureSamplerHandleNV = (PFNGLGETTEXTURESAMPLERHANDLENVPROC) load(userptr, "glGetTextureSamplerHandleNV"); + glad_glIsImageHandleResidentNV = (PFNGLISIMAGEHANDLERESIDENTNVPROC) load(userptr, "glIsImageHandleResidentNV"); + glad_glIsTextureHandleResidentNV = (PFNGLISTEXTUREHANDLERESIDENTNVPROC) load(userptr, "glIsTextureHandleResidentNV"); + glad_glMakeImageHandleNonResidentNV = (PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) load(userptr, "glMakeImageHandleNonResidentNV"); + glad_glMakeImageHandleResidentNV = (PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) load(userptr, "glMakeImageHandleResidentNV"); + glad_glMakeTextureHandleNonResidentNV = (PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) load(userptr, "glMakeTextureHandleNonResidentNV"); + glad_glMakeTextureHandleResidentNV = (PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) load(userptr, "glMakeTextureHandleResidentNV"); + glad_glProgramUniformHandleui64NV = (PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) load(userptr, "glProgramUniformHandleui64NV"); + glad_glProgramUniformHandleui64vNV = (PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) load(userptr, "glProgramUniformHandleui64vNV"); + glad_glUniformHandleui64NV = (PFNGLUNIFORMHANDLEUI64NVPROC) load(userptr, "glUniformHandleui64NV"); + glad_glUniformHandleui64vNV = (PFNGLUNIFORMHANDLEUI64VNVPROC) load(userptr, "glUniformHandleui64vNV"); +} +static void glad_gl_load_GL_NV_blend_equation_advanced( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_blend_equation_advanced) return; + glad_glBlendBarrierNV = (PFNGLBLENDBARRIERNVPROC) load(userptr, "glBlendBarrierNV"); + glad_glBlendParameteriNV = (PFNGLBLENDPARAMETERINVPROC) load(userptr, "glBlendParameteriNV"); +} +static void glad_gl_load_GL_NV_clip_space_w_scaling( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_clip_space_w_scaling) return; + glad_glViewportPositionWScaleNV = (PFNGLVIEWPORTPOSITIONWSCALENVPROC) load(userptr, "glViewportPositionWScaleNV"); +} +static void glad_gl_load_GL_NV_command_list( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_command_list) return; + glad_glCallCommandListNV = (PFNGLCALLCOMMANDLISTNVPROC) load(userptr, "glCallCommandListNV"); + glad_glCommandListSegmentsNV = (PFNGLCOMMANDLISTSEGMENTSNVPROC) load(userptr, "glCommandListSegmentsNV"); + glad_glCompileCommandListNV = (PFNGLCOMPILECOMMANDLISTNVPROC) load(userptr, "glCompileCommandListNV"); + glad_glCreateCommandListsNV = (PFNGLCREATECOMMANDLISTSNVPROC) load(userptr, "glCreateCommandListsNV"); + glad_glCreateStatesNV = (PFNGLCREATESTATESNVPROC) load(userptr, "glCreateStatesNV"); + glad_glDeleteCommandListsNV = (PFNGLDELETECOMMANDLISTSNVPROC) load(userptr, "glDeleteCommandListsNV"); + glad_glDeleteStatesNV = (PFNGLDELETESTATESNVPROC) load(userptr, "glDeleteStatesNV"); + glad_glDrawCommandsAddressNV = (PFNGLDRAWCOMMANDSADDRESSNVPROC) load(userptr, "glDrawCommandsAddressNV"); + glad_glDrawCommandsNV = (PFNGLDRAWCOMMANDSNVPROC) load(userptr, "glDrawCommandsNV"); + glad_glDrawCommandsStatesAddressNV = (PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) load(userptr, "glDrawCommandsStatesAddressNV"); + glad_glDrawCommandsStatesNV = (PFNGLDRAWCOMMANDSSTATESNVPROC) load(userptr, "glDrawCommandsStatesNV"); + glad_glGetCommandHeaderNV = (PFNGLGETCOMMANDHEADERNVPROC) load(userptr, "glGetCommandHeaderNV"); + glad_glGetStageIndexNV = (PFNGLGETSTAGEINDEXNVPROC) load(userptr, "glGetStageIndexNV"); + glad_glIsCommandListNV = (PFNGLISCOMMANDLISTNVPROC) load(userptr, "glIsCommandListNV"); + glad_glIsStateNV = (PFNGLISSTATENVPROC) load(userptr, "glIsStateNV"); + glad_glListDrawCommandsStatesClientNV = (PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) load(userptr, "glListDrawCommandsStatesClientNV"); + glad_glStateCaptureNV = (PFNGLSTATECAPTURENVPROC) load(userptr, "glStateCaptureNV"); +} +static void glad_gl_load_GL_NV_conditional_render( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_conditional_render) return; + glad_glBeginConditionalRenderNV = (PFNGLBEGINCONDITIONALRENDERNVPROC) load(userptr, "glBeginConditionalRenderNV"); + glad_glEndConditionalRenderNV = (PFNGLENDCONDITIONALRENDERNVPROC) load(userptr, "glEndConditionalRenderNV"); +} +static void glad_gl_load_GL_NV_conservative_raster( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_conservative_raster) return; + glad_glSubpixelPrecisionBiasNV = (PFNGLSUBPIXELPRECISIONBIASNVPROC) load(userptr, "glSubpixelPrecisionBiasNV"); +} +static void glad_gl_load_GL_NV_conservative_raster_dilate( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_conservative_raster_dilate) return; + glad_glConservativeRasterParameterfNV = (PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) load(userptr, "glConservativeRasterParameterfNV"); +} +static void glad_gl_load_GL_NV_conservative_raster_pre_snap_triangles( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_conservative_raster_pre_snap_triangles) return; + glad_glConservativeRasterParameteriNV = (PFNGLCONSERVATIVERASTERPARAMETERINVPROC) load(userptr, "glConservativeRasterParameteriNV"); +} +static void glad_gl_load_GL_NV_copy_image( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_copy_image) return; + glad_glCopyImageSubDataNV = (PFNGLCOPYIMAGESUBDATANVPROC) load(userptr, "glCopyImageSubDataNV"); +} +static void glad_gl_load_GL_NV_depth_buffer_float( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_depth_buffer_float) return; + glad_glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC) load(userptr, "glClearDepthdNV"); + glad_glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC) load(userptr, "glDepthBoundsdNV"); + glad_glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC) load(userptr, "glDepthRangedNV"); +} +static void glad_gl_load_GL_NV_draw_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_draw_texture) return; + glad_glDrawTextureNV = (PFNGLDRAWTEXTURENVPROC) load(userptr, "glDrawTextureNV"); +} +static void glad_gl_load_GL_NV_draw_vulkan_image( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_draw_vulkan_image) return; + glad_glDrawVkImageNV = (PFNGLDRAWVKIMAGENVPROC) load(userptr, "glDrawVkImageNV"); + glad_glGetVkProcAddrNV = (PFNGLGETVKPROCADDRNVPROC) load(userptr, "glGetVkProcAddrNV"); + glad_glSignalVkFenceNV = (PFNGLSIGNALVKFENCENVPROC) load(userptr, "glSignalVkFenceNV"); + glad_glSignalVkSemaphoreNV = (PFNGLSIGNALVKSEMAPHORENVPROC) load(userptr, "glSignalVkSemaphoreNV"); + glad_glWaitVkSemaphoreNV = (PFNGLWAITVKSEMAPHORENVPROC) load(userptr, "glWaitVkSemaphoreNV"); +} +static void glad_gl_load_GL_NV_evaluators( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_evaluators) return; + glad_glEvalMapsNV = (PFNGLEVALMAPSNVPROC) load(userptr, "glEvalMapsNV"); + glad_glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC) load(userptr, "glGetMapAttribParameterfvNV"); + glad_glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC) load(userptr, "glGetMapAttribParameterivNV"); + glad_glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC) load(userptr, "glGetMapControlPointsNV"); + glad_glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC) load(userptr, "glGetMapParameterfvNV"); + glad_glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC) load(userptr, "glGetMapParameterivNV"); + glad_glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC) load(userptr, "glMapControlPointsNV"); + glad_glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC) load(userptr, "glMapParameterfvNV"); + glad_glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC) load(userptr, "glMapParameterivNV"); +} +static void glad_gl_load_GL_NV_explicit_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_explicit_multisample) return; + glad_glGetMultisamplefvNV = (PFNGLGETMULTISAMPLEFVNVPROC) load(userptr, "glGetMultisamplefvNV"); + glad_glSampleMaskIndexedNV = (PFNGLSAMPLEMASKINDEXEDNVPROC) load(userptr, "glSampleMaskIndexedNV"); + glad_glTexRenderbufferNV = (PFNGLTEXRENDERBUFFERNVPROC) load(userptr, "glTexRenderbufferNV"); +} +static void glad_gl_load_GL_NV_fence( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_fence) return; + glad_glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC) load(userptr, "glDeleteFencesNV"); + glad_glFinishFenceNV = (PFNGLFINISHFENCENVPROC) load(userptr, "glFinishFenceNV"); + glad_glGenFencesNV = (PFNGLGENFENCESNVPROC) load(userptr, "glGenFencesNV"); + glad_glGetFenceivNV = (PFNGLGETFENCEIVNVPROC) load(userptr, "glGetFenceivNV"); + glad_glIsFenceNV = (PFNGLISFENCENVPROC) load(userptr, "glIsFenceNV"); + glad_glSetFenceNV = (PFNGLSETFENCENVPROC) load(userptr, "glSetFenceNV"); + glad_glTestFenceNV = (PFNGLTESTFENCENVPROC) load(userptr, "glTestFenceNV"); +} +static void glad_gl_load_GL_NV_fragment_coverage_to_color( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_fragment_coverage_to_color) return; + glad_glFragmentCoverageColorNV = (PFNGLFRAGMENTCOVERAGECOLORNVPROC) load(userptr, "glFragmentCoverageColorNV"); +} +static void glad_gl_load_GL_NV_fragment_program( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_fragment_program) return; + glad_glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) load(userptr, "glGetProgramNamedParameterdvNV"); + glad_glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) load(userptr, "glGetProgramNamedParameterfvNV"); + glad_glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) load(userptr, "glProgramNamedParameter4dNV"); + glad_glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) load(userptr, "glProgramNamedParameter4dvNV"); + glad_glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) load(userptr, "glProgramNamedParameter4fNV"); + glad_glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) load(userptr, "glProgramNamedParameter4fvNV"); +} +static void glad_gl_load_GL_NV_framebuffer_mixed_samples( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_framebuffer_mixed_samples) return; + glad_glCoverageModulationNV = (PFNGLCOVERAGEMODULATIONNVPROC) load(userptr, "glCoverageModulationNV"); + glad_glCoverageModulationTableNV = (PFNGLCOVERAGEMODULATIONTABLENVPROC) load(userptr, "glCoverageModulationTableNV"); + glad_glGetCoverageModulationTableNV = (PFNGLGETCOVERAGEMODULATIONTABLENVPROC) load(userptr, "glGetCoverageModulationTableNV"); + glad_glRasterSamplesEXT = (PFNGLRASTERSAMPLESEXTPROC) load(userptr, "glRasterSamplesEXT"); +} +static void glad_gl_load_GL_NV_framebuffer_multisample_coverage( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_framebuffer_multisample_coverage) return; + glad_glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) load(userptr, "glRenderbufferStorageMultisampleCoverageNV"); +} +static void glad_gl_load_GL_NV_geometry_program4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_geometry_program4) return; + glad_glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC) load(userptr, "glFramebufferTextureEXT"); + glad_glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) load(userptr, "glFramebufferTextureFaceEXT"); + glad_glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) load(userptr, "glFramebufferTextureLayerEXT"); + glad_glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC) load(userptr, "glProgramVertexLimitNV"); +} +static void glad_gl_load_GL_NV_gpu_multicast( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_gpu_multicast) return; + glad_glMulticastBarrierNV = (PFNGLMULTICASTBARRIERNVPROC) load(userptr, "glMulticastBarrierNV"); + glad_glMulticastBlitFramebufferNV = (PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) load(userptr, "glMulticastBlitFramebufferNV"); + glad_glMulticastBufferSubDataNV = (PFNGLMULTICASTBUFFERSUBDATANVPROC) load(userptr, "glMulticastBufferSubDataNV"); + glad_glMulticastCopyBufferSubDataNV = (PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) load(userptr, "glMulticastCopyBufferSubDataNV"); + glad_glMulticastCopyImageSubDataNV = (PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) load(userptr, "glMulticastCopyImageSubDataNV"); + glad_glMulticastFramebufferSampleLocationsfvNV = (PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) load(userptr, "glMulticastFramebufferSampleLocationsfvNV"); + glad_glMulticastGetQueryObjecti64vNV = (PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) load(userptr, "glMulticastGetQueryObjecti64vNV"); + glad_glMulticastGetQueryObjectivNV = (PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) load(userptr, "glMulticastGetQueryObjectivNV"); + glad_glMulticastGetQueryObjectui64vNV = (PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) load(userptr, "glMulticastGetQueryObjectui64vNV"); + glad_glMulticastGetQueryObjectuivNV = (PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) load(userptr, "glMulticastGetQueryObjectuivNV"); + glad_glMulticastWaitSyncNV = (PFNGLMULTICASTWAITSYNCNVPROC) load(userptr, "glMulticastWaitSyncNV"); + glad_glRenderGpuMaskNV = (PFNGLRENDERGPUMASKNVPROC) load(userptr, "glRenderGpuMaskNV"); +} +static void glad_gl_load_GL_NV_gpu_program4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_gpu_program4) return; + glad_glGetProgramEnvParameterIivNV = (PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) load(userptr, "glGetProgramEnvParameterIivNV"); + glad_glGetProgramEnvParameterIuivNV = (PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) load(userptr, "glGetProgramEnvParameterIuivNV"); + glad_glGetProgramLocalParameterIivNV = (PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) load(userptr, "glGetProgramLocalParameterIivNV"); + glad_glGetProgramLocalParameterIuivNV = (PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) load(userptr, "glGetProgramLocalParameterIuivNV"); + glad_glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC) load(userptr, "glProgramEnvParameterI4iNV"); + glad_glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC) load(userptr, "glProgramEnvParameterI4ivNV"); + glad_glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC) load(userptr, "glProgramEnvParameterI4uiNV"); + glad_glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) load(userptr, "glProgramEnvParameterI4uivNV"); + glad_glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) load(userptr, "glProgramEnvParametersI4ivNV"); + glad_glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) load(userptr, "glProgramEnvParametersI4uivNV"); + glad_glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC) load(userptr, "glProgramLocalParameterI4iNV"); + glad_glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) load(userptr, "glProgramLocalParameterI4ivNV"); + glad_glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) load(userptr, "glProgramLocalParameterI4uiNV"); + glad_glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) load(userptr, "glProgramLocalParameterI4uivNV"); + glad_glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) load(userptr, "glProgramLocalParametersI4ivNV"); + glad_glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) load(userptr, "glProgramLocalParametersI4uivNV"); +} +static void glad_gl_load_GL_NV_gpu_program5( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_gpu_program5) return; + glad_glGetProgramSubroutineParameteruivNV = (PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) load(userptr, "glGetProgramSubroutineParameteruivNV"); + glad_glProgramSubroutineParametersuivNV = (PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) load(userptr, "glProgramSubroutineParametersuivNV"); +} +static void glad_gl_load_GL_NV_gpu_shader5( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_gpu_shader5) return; + glad_glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC) load(userptr, "glGetUniformi64vNV"); + glad_glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC) load(userptr, "glProgramUniform1i64NV"); + glad_glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC) load(userptr, "glProgramUniform1i64vNV"); + glad_glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC) load(userptr, "glProgramUniform1ui64NV"); + glad_glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC) load(userptr, "glProgramUniform1ui64vNV"); + glad_glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC) load(userptr, "glProgramUniform2i64NV"); + glad_glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC) load(userptr, "glProgramUniform2i64vNV"); + glad_glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC) load(userptr, "glProgramUniform2ui64NV"); + glad_glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC) load(userptr, "glProgramUniform2ui64vNV"); + glad_glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC) load(userptr, "glProgramUniform3i64NV"); + glad_glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC) load(userptr, "glProgramUniform3i64vNV"); + glad_glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC) load(userptr, "glProgramUniform3ui64NV"); + glad_glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC) load(userptr, "glProgramUniform3ui64vNV"); + glad_glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC) load(userptr, "glProgramUniform4i64NV"); + glad_glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC) load(userptr, "glProgramUniform4i64vNV"); + glad_glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC) load(userptr, "glProgramUniform4ui64NV"); + glad_glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC) load(userptr, "glProgramUniform4ui64vNV"); + glad_glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC) load(userptr, "glUniform1i64NV"); + glad_glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC) load(userptr, "glUniform1i64vNV"); + glad_glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC) load(userptr, "glUniform1ui64NV"); + glad_glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC) load(userptr, "glUniform1ui64vNV"); + glad_glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC) load(userptr, "glUniform2i64NV"); + glad_glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC) load(userptr, "glUniform2i64vNV"); + glad_glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC) load(userptr, "glUniform2ui64NV"); + glad_glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC) load(userptr, "glUniform2ui64vNV"); + glad_glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC) load(userptr, "glUniform3i64NV"); + glad_glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC) load(userptr, "glUniform3i64vNV"); + glad_glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC) load(userptr, "glUniform3ui64NV"); + glad_glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC) load(userptr, "glUniform3ui64vNV"); + glad_glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC) load(userptr, "glUniform4i64NV"); + glad_glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC) load(userptr, "glUniform4i64vNV"); + glad_glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC) load(userptr, "glUniform4ui64NV"); + glad_glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC) load(userptr, "glUniform4ui64vNV"); +} +static void glad_gl_load_GL_NV_half_float( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_half_float) return; + glad_glColor3hNV = (PFNGLCOLOR3HNVPROC) load(userptr, "glColor3hNV"); + glad_glColor3hvNV = (PFNGLCOLOR3HVNVPROC) load(userptr, "glColor3hvNV"); + glad_glColor4hNV = (PFNGLCOLOR4HNVPROC) load(userptr, "glColor4hNV"); + glad_glColor4hvNV = (PFNGLCOLOR4HVNVPROC) load(userptr, "glColor4hvNV"); + glad_glFogCoordhNV = (PFNGLFOGCOORDHNVPROC) load(userptr, "glFogCoordhNV"); + glad_glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC) load(userptr, "glFogCoordhvNV"); + glad_glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC) load(userptr, "glMultiTexCoord1hNV"); + glad_glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC) load(userptr, "glMultiTexCoord1hvNV"); + glad_glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC) load(userptr, "glMultiTexCoord2hNV"); + glad_glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC) load(userptr, "glMultiTexCoord2hvNV"); + glad_glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC) load(userptr, "glMultiTexCoord3hNV"); + glad_glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC) load(userptr, "glMultiTexCoord3hvNV"); + glad_glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC) load(userptr, "glMultiTexCoord4hNV"); + glad_glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC) load(userptr, "glMultiTexCoord4hvNV"); + glad_glNormal3hNV = (PFNGLNORMAL3HNVPROC) load(userptr, "glNormal3hNV"); + glad_glNormal3hvNV = (PFNGLNORMAL3HVNVPROC) load(userptr, "glNormal3hvNV"); + glad_glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC) load(userptr, "glSecondaryColor3hNV"); + glad_glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC) load(userptr, "glSecondaryColor3hvNV"); + glad_glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC) load(userptr, "glTexCoord1hNV"); + glad_glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC) load(userptr, "glTexCoord1hvNV"); + glad_glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC) load(userptr, "glTexCoord2hNV"); + glad_glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC) load(userptr, "glTexCoord2hvNV"); + glad_glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC) load(userptr, "glTexCoord3hNV"); + glad_glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC) load(userptr, "glTexCoord3hvNV"); + glad_glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC) load(userptr, "glTexCoord4hNV"); + glad_glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC) load(userptr, "glTexCoord4hvNV"); + glad_glVertex2hNV = (PFNGLVERTEX2HNVPROC) load(userptr, "glVertex2hNV"); + glad_glVertex2hvNV = (PFNGLVERTEX2HVNVPROC) load(userptr, "glVertex2hvNV"); + glad_glVertex3hNV = (PFNGLVERTEX3HNVPROC) load(userptr, "glVertex3hNV"); + glad_glVertex3hvNV = (PFNGLVERTEX3HVNVPROC) load(userptr, "glVertex3hvNV"); + glad_glVertex4hNV = (PFNGLVERTEX4HNVPROC) load(userptr, "glVertex4hNV"); + glad_glVertex4hvNV = (PFNGLVERTEX4HVNVPROC) load(userptr, "glVertex4hvNV"); + glad_glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC) load(userptr, "glVertexAttrib1hNV"); + glad_glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC) load(userptr, "glVertexAttrib1hvNV"); + glad_glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC) load(userptr, "glVertexAttrib2hNV"); + glad_glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC) load(userptr, "glVertexAttrib2hvNV"); + glad_glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC) load(userptr, "glVertexAttrib3hNV"); + glad_glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC) load(userptr, "glVertexAttrib3hvNV"); + glad_glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC) load(userptr, "glVertexAttrib4hNV"); + glad_glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC) load(userptr, "glVertexAttrib4hvNV"); + glad_glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC) load(userptr, "glVertexAttribs1hvNV"); + glad_glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC) load(userptr, "glVertexAttribs2hvNV"); + glad_glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC) load(userptr, "glVertexAttribs3hvNV"); + glad_glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC) load(userptr, "glVertexAttribs4hvNV"); + glad_glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC) load(userptr, "glVertexWeighthNV"); + glad_glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC) load(userptr, "glVertexWeighthvNV"); +} +static void glad_gl_load_GL_NV_internalformat_sample_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_internalformat_sample_query) return; + glad_glGetInternalformatSampleivNV = (PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) load(userptr, "glGetInternalformatSampleivNV"); +} +static void glad_gl_load_GL_NV_memory_attachment( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_memory_attachment) return; + glad_glBufferAttachMemoryNV = (PFNGLBUFFERATTACHMEMORYNVPROC) load(userptr, "glBufferAttachMemoryNV"); + glad_glGetMemoryObjectDetachedResourcesuivNV = (PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) load(userptr, "glGetMemoryObjectDetachedResourcesuivNV"); + glad_glNamedBufferAttachMemoryNV = (PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) load(userptr, "glNamedBufferAttachMemoryNV"); + glad_glResetMemoryObjectParameterNV = (PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) load(userptr, "glResetMemoryObjectParameterNV"); + glad_glTexAttachMemoryNV = (PFNGLTEXATTACHMEMORYNVPROC) load(userptr, "glTexAttachMemoryNV"); + glad_glTextureAttachMemoryNV = (PFNGLTEXTUREATTACHMEMORYNVPROC) load(userptr, "glTextureAttachMemoryNV"); +} +static void glad_gl_load_GL_NV_memory_object_sparse( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_memory_object_sparse) return; + glad_glBufferPageCommitmentMemNV = (PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) load(userptr, "glBufferPageCommitmentMemNV"); + glad_glNamedBufferPageCommitmentMemNV = (PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) load(userptr, "glNamedBufferPageCommitmentMemNV"); + glad_glTexPageCommitmentMemNV = (PFNGLTEXPAGECOMMITMENTMEMNVPROC) load(userptr, "glTexPageCommitmentMemNV"); + glad_glTexturePageCommitmentMemNV = (PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) load(userptr, "glTexturePageCommitmentMemNV"); +} +static void glad_gl_load_GL_NV_mesh_shader( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_mesh_shader) return; + glad_glDrawMeshTasksIndirectNV = (PFNGLDRAWMESHTASKSINDIRECTNVPROC) load(userptr, "glDrawMeshTasksIndirectNV"); + glad_glDrawMeshTasksNV = (PFNGLDRAWMESHTASKSNVPROC) load(userptr, "glDrawMeshTasksNV"); + glad_glMultiDrawMeshTasksIndirectCountNV = (PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) load(userptr, "glMultiDrawMeshTasksIndirectCountNV"); + glad_glMultiDrawMeshTasksIndirectNV = (PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) load(userptr, "glMultiDrawMeshTasksIndirectNV"); +} +static void glad_gl_load_GL_NV_occlusion_query( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_occlusion_query) return; + glad_glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC) load(userptr, "glBeginOcclusionQueryNV"); + glad_glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC) load(userptr, "glDeleteOcclusionQueriesNV"); + glad_glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC) load(userptr, "glEndOcclusionQueryNV"); + glad_glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC) load(userptr, "glGenOcclusionQueriesNV"); + glad_glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC) load(userptr, "glGetOcclusionQueryivNV"); + glad_glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC) load(userptr, "glGetOcclusionQueryuivNV"); + glad_glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC) load(userptr, "glIsOcclusionQueryNV"); +} +static void glad_gl_load_GL_NV_parameter_buffer_object( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_parameter_buffer_object) return; + glad_glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) load(userptr, "glProgramBufferParametersIivNV"); + glad_glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) load(userptr, "glProgramBufferParametersIuivNV"); + glad_glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) load(userptr, "glProgramBufferParametersfvNV"); +} +static void glad_gl_load_GL_NV_path_rendering( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_path_rendering) return; + glad_glCopyPathNV = (PFNGLCOPYPATHNVPROC) load(userptr, "glCopyPathNV"); + glad_glCoverFillPathInstancedNV = (PFNGLCOVERFILLPATHINSTANCEDNVPROC) load(userptr, "glCoverFillPathInstancedNV"); + glad_glCoverFillPathNV = (PFNGLCOVERFILLPATHNVPROC) load(userptr, "glCoverFillPathNV"); + glad_glCoverStrokePathInstancedNV = (PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) load(userptr, "glCoverStrokePathInstancedNV"); + glad_glCoverStrokePathNV = (PFNGLCOVERSTROKEPATHNVPROC) load(userptr, "glCoverStrokePathNV"); + glad_glDeletePathsNV = (PFNGLDELETEPATHSNVPROC) load(userptr, "glDeletePathsNV"); + glad_glGenPathsNV = (PFNGLGENPATHSNVPROC) load(userptr, "glGenPathsNV"); + glad_glGetPathCommandsNV = (PFNGLGETPATHCOMMANDSNVPROC) load(userptr, "glGetPathCommandsNV"); + glad_glGetPathCoordsNV = (PFNGLGETPATHCOORDSNVPROC) load(userptr, "glGetPathCoordsNV"); + glad_glGetPathDashArrayNV = (PFNGLGETPATHDASHARRAYNVPROC) load(userptr, "glGetPathDashArrayNV"); + glad_glGetPathLengthNV = (PFNGLGETPATHLENGTHNVPROC) load(userptr, "glGetPathLengthNV"); + glad_glGetPathMetricRangeNV = (PFNGLGETPATHMETRICRANGENVPROC) load(userptr, "glGetPathMetricRangeNV"); + glad_glGetPathMetricsNV = (PFNGLGETPATHMETRICSNVPROC) load(userptr, "glGetPathMetricsNV"); + glad_glGetPathParameterfvNV = (PFNGLGETPATHPARAMETERFVNVPROC) load(userptr, "glGetPathParameterfvNV"); + glad_glGetPathParameterivNV = (PFNGLGETPATHPARAMETERIVNVPROC) load(userptr, "glGetPathParameterivNV"); + glad_glGetPathSpacingNV = (PFNGLGETPATHSPACINGNVPROC) load(userptr, "glGetPathSpacingNV"); + glad_glGetProgramResourcefvNV = (PFNGLGETPROGRAMRESOURCEFVNVPROC) load(userptr, "glGetProgramResourcefvNV"); + glad_glInterpolatePathsNV = (PFNGLINTERPOLATEPATHSNVPROC) load(userptr, "glInterpolatePathsNV"); + glad_glIsPathNV = (PFNGLISPATHNVPROC) load(userptr, "glIsPathNV"); + glad_glIsPointInFillPathNV = (PFNGLISPOINTINFILLPATHNVPROC) load(userptr, "glIsPointInFillPathNV"); + glad_glIsPointInStrokePathNV = (PFNGLISPOINTINSTROKEPATHNVPROC) load(userptr, "glIsPointInStrokePathNV"); + glad_glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC) load(userptr, "glMatrixFrustumEXT"); + glad_glMatrixLoad3x2fNV = (PFNGLMATRIXLOAD3X2FNVPROC) load(userptr, "glMatrixLoad3x2fNV"); + glad_glMatrixLoad3x3fNV = (PFNGLMATRIXLOAD3X3FNVPROC) load(userptr, "glMatrixLoad3x3fNV"); + glad_glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC) load(userptr, "glMatrixLoadIdentityEXT"); + glad_glMatrixLoadTranspose3x3fNV = (PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) load(userptr, "glMatrixLoadTranspose3x3fNV"); + glad_glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC) load(userptr, "glMatrixLoadTransposedEXT"); + glad_glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC) load(userptr, "glMatrixLoadTransposefEXT"); + glad_glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC) load(userptr, "glMatrixLoaddEXT"); + glad_glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC) load(userptr, "glMatrixLoadfEXT"); + glad_glMatrixMult3x2fNV = (PFNGLMATRIXMULT3X2FNVPROC) load(userptr, "glMatrixMult3x2fNV"); + glad_glMatrixMult3x3fNV = (PFNGLMATRIXMULT3X3FNVPROC) load(userptr, "glMatrixMult3x3fNV"); + glad_glMatrixMultTranspose3x3fNV = (PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) load(userptr, "glMatrixMultTranspose3x3fNV"); + glad_glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC) load(userptr, "glMatrixMultTransposedEXT"); + glad_glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC) load(userptr, "glMatrixMultTransposefEXT"); + glad_glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC) load(userptr, "glMatrixMultdEXT"); + glad_glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC) load(userptr, "glMatrixMultfEXT"); + glad_glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC) load(userptr, "glMatrixOrthoEXT"); + glad_glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC) load(userptr, "glMatrixPopEXT"); + glad_glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC) load(userptr, "glMatrixPushEXT"); + glad_glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC) load(userptr, "glMatrixRotatedEXT"); + glad_glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC) load(userptr, "glMatrixRotatefEXT"); + glad_glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC) load(userptr, "glMatrixScaledEXT"); + glad_glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC) load(userptr, "glMatrixScalefEXT"); + glad_glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC) load(userptr, "glMatrixTranslatedEXT"); + glad_glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC) load(userptr, "glMatrixTranslatefEXT"); + glad_glPathCommandsNV = (PFNGLPATHCOMMANDSNVPROC) load(userptr, "glPathCommandsNV"); + glad_glPathCoordsNV = (PFNGLPATHCOORDSNVPROC) load(userptr, "glPathCoordsNV"); + glad_glPathCoverDepthFuncNV = (PFNGLPATHCOVERDEPTHFUNCNVPROC) load(userptr, "glPathCoverDepthFuncNV"); + glad_glPathDashArrayNV = (PFNGLPATHDASHARRAYNVPROC) load(userptr, "glPathDashArrayNV"); + glad_glPathGlyphIndexArrayNV = (PFNGLPATHGLYPHINDEXARRAYNVPROC) load(userptr, "glPathGlyphIndexArrayNV"); + glad_glPathGlyphIndexRangeNV = (PFNGLPATHGLYPHINDEXRANGENVPROC) load(userptr, "glPathGlyphIndexRangeNV"); + glad_glPathGlyphRangeNV = (PFNGLPATHGLYPHRANGENVPROC) load(userptr, "glPathGlyphRangeNV"); + glad_glPathGlyphsNV = (PFNGLPATHGLYPHSNVPROC) load(userptr, "glPathGlyphsNV"); + glad_glPathMemoryGlyphIndexArrayNV = (PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) load(userptr, "glPathMemoryGlyphIndexArrayNV"); + glad_glPathParameterfNV = (PFNGLPATHPARAMETERFNVPROC) load(userptr, "glPathParameterfNV"); + glad_glPathParameterfvNV = (PFNGLPATHPARAMETERFVNVPROC) load(userptr, "glPathParameterfvNV"); + glad_glPathParameteriNV = (PFNGLPATHPARAMETERINVPROC) load(userptr, "glPathParameteriNV"); + glad_glPathParameterivNV = (PFNGLPATHPARAMETERIVNVPROC) load(userptr, "glPathParameterivNV"); + glad_glPathStencilDepthOffsetNV = (PFNGLPATHSTENCILDEPTHOFFSETNVPROC) load(userptr, "glPathStencilDepthOffsetNV"); + glad_glPathStencilFuncNV = (PFNGLPATHSTENCILFUNCNVPROC) load(userptr, "glPathStencilFuncNV"); + glad_glPathStringNV = (PFNGLPATHSTRINGNVPROC) load(userptr, "glPathStringNV"); + glad_glPathSubCommandsNV = (PFNGLPATHSUBCOMMANDSNVPROC) load(userptr, "glPathSubCommandsNV"); + glad_glPathSubCoordsNV = (PFNGLPATHSUBCOORDSNVPROC) load(userptr, "glPathSubCoordsNV"); + glad_glPointAlongPathNV = (PFNGLPOINTALONGPATHNVPROC) load(userptr, "glPointAlongPathNV"); + glad_glProgramPathFragmentInputGenNV = (PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) load(userptr, "glProgramPathFragmentInputGenNV"); + glad_glStencilFillPathInstancedNV = (PFNGLSTENCILFILLPATHINSTANCEDNVPROC) load(userptr, "glStencilFillPathInstancedNV"); + glad_glStencilFillPathNV = (PFNGLSTENCILFILLPATHNVPROC) load(userptr, "glStencilFillPathNV"); + glad_glStencilStrokePathInstancedNV = (PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) load(userptr, "glStencilStrokePathInstancedNV"); + glad_glStencilStrokePathNV = (PFNGLSTENCILSTROKEPATHNVPROC) load(userptr, "glStencilStrokePathNV"); + glad_glStencilThenCoverFillPathInstancedNV = (PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) load(userptr, "glStencilThenCoverFillPathInstancedNV"); + glad_glStencilThenCoverFillPathNV = (PFNGLSTENCILTHENCOVERFILLPATHNVPROC) load(userptr, "glStencilThenCoverFillPathNV"); + glad_glStencilThenCoverStrokePathInstancedNV = (PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) load(userptr, "glStencilThenCoverStrokePathInstancedNV"); + glad_glStencilThenCoverStrokePathNV = (PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) load(userptr, "glStencilThenCoverStrokePathNV"); + glad_glTransformPathNV = (PFNGLTRANSFORMPATHNVPROC) load(userptr, "glTransformPathNV"); + glad_glWeightPathsNV = (PFNGLWEIGHTPATHSNVPROC) load(userptr, "glWeightPathsNV"); +} +static void glad_gl_load_GL_NV_pixel_data_range( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_pixel_data_range) return; + glad_glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC) load(userptr, "glFlushPixelDataRangeNV"); + glad_glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC) load(userptr, "glPixelDataRangeNV"); +} +static void glad_gl_load_GL_NV_point_sprite( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_point_sprite) return; + glad_glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC) load(userptr, "glPointParameteriNV"); + glad_glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC) load(userptr, "glPointParameterivNV"); +} +static void glad_gl_load_GL_NV_present_video( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_present_video) return; + glad_glGetVideoi64vNV = (PFNGLGETVIDEOI64VNVPROC) load(userptr, "glGetVideoi64vNV"); + glad_glGetVideoivNV = (PFNGLGETVIDEOIVNVPROC) load(userptr, "glGetVideoivNV"); + glad_glGetVideoui64vNV = (PFNGLGETVIDEOUI64VNVPROC) load(userptr, "glGetVideoui64vNV"); + glad_glGetVideouivNV = (PFNGLGETVIDEOUIVNVPROC) load(userptr, "glGetVideouivNV"); + glad_glPresentFrameDualFillNV = (PFNGLPRESENTFRAMEDUALFILLNVPROC) load(userptr, "glPresentFrameDualFillNV"); + glad_glPresentFrameKeyedNV = (PFNGLPRESENTFRAMEKEYEDNVPROC) load(userptr, "glPresentFrameKeyedNV"); +} +static void glad_gl_load_GL_NV_primitive_restart( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_primitive_restart) return; + glad_glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC) load(userptr, "glPrimitiveRestartIndexNV"); + glad_glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC) load(userptr, "glPrimitiveRestartNV"); +} +static void glad_gl_load_GL_NV_query_resource( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_query_resource) return; + glad_glQueryResourceNV = (PFNGLQUERYRESOURCENVPROC) load(userptr, "glQueryResourceNV"); +} +static void glad_gl_load_GL_NV_query_resource_tag( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_query_resource_tag) return; + glad_glDeleteQueryResourceTagNV = (PFNGLDELETEQUERYRESOURCETAGNVPROC) load(userptr, "glDeleteQueryResourceTagNV"); + glad_glGenQueryResourceTagNV = (PFNGLGENQUERYRESOURCETAGNVPROC) load(userptr, "glGenQueryResourceTagNV"); + glad_glQueryResourceTagNV = (PFNGLQUERYRESOURCETAGNVPROC) load(userptr, "glQueryResourceTagNV"); +} +static void glad_gl_load_GL_NV_register_combiners( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_register_combiners) return; + glad_glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC) load(userptr, "glCombinerInputNV"); + glad_glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC) load(userptr, "glCombinerOutputNV"); + glad_glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC) load(userptr, "glCombinerParameterfNV"); + glad_glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC) load(userptr, "glCombinerParameterfvNV"); + glad_glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC) load(userptr, "glCombinerParameteriNV"); + glad_glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC) load(userptr, "glCombinerParameterivNV"); + glad_glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC) load(userptr, "glFinalCombinerInputNV"); + glad_glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) load(userptr, "glGetCombinerInputParameterfvNV"); + glad_glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) load(userptr, "glGetCombinerInputParameterivNV"); + glad_glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) load(userptr, "glGetCombinerOutputParameterfvNV"); + glad_glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) load(userptr, "glGetCombinerOutputParameterivNV"); + glad_glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) load(userptr, "glGetFinalCombinerInputParameterfvNV"); + glad_glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) load(userptr, "glGetFinalCombinerInputParameterivNV"); +} +static void glad_gl_load_GL_NV_register_combiners2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_register_combiners2) return; + glad_glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) load(userptr, "glCombinerStageParameterfvNV"); + glad_glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) load(userptr, "glGetCombinerStageParameterfvNV"); +} +static void glad_gl_load_GL_NV_sample_locations( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_sample_locations) return; + glad_glFramebufferSampleLocationsfvNV = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) load(userptr, "glFramebufferSampleLocationsfvNV"); + glad_glNamedFramebufferSampleLocationsfvNV = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) load(userptr, "glNamedFramebufferSampleLocationsfvNV"); + glad_glResolveDepthValuesNV = (PFNGLRESOLVEDEPTHVALUESNVPROC) load(userptr, "glResolveDepthValuesNV"); +} +static void glad_gl_load_GL_NV_scissor_exclusive( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_scissor_exclusive) return; + glad_glScissorExclusiveArrayvNV = (PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) load(userptr, "glScissorExclusiveArrayvNV"); + glad_glScissorExclusiveNV = (PFNGLSCISSOREXCLUSIVENVPROC) load(userptr, "glScissorExclusiveNV"); +} +static void glad_gl_load_GL_NV_shader_buffer_load( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_shader_buffer_load) return; + glad_glGetBufferParameterui64vNV = (PFNGLGETBUFFERPARAMETERUI64VNVPROC) load(userptr, "glGetBufferParameterui64vNV"); + glad_glGetIntegerui64vNV = (PFNGLGETINTEGERUI64VNVPROC) load(userptr, "glGetIntegerui64vNV"); + glad_glGetNamedBufferParameterui64vNV = (PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) load(userptr, "glGetNamedBufferParameterui64vNV"); + glad_glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC) load(userptr, "glGetUniformui64vNV"); + glad_glIsBufferResidentNV = (PFNGLISBUFFERRESIDENTNVPROC) load(userptr, "glIsBufferResidentNV"); + glad_glIsNamedBufferResidentNV = (PFNGLISNAMEDBUFFERRESIDENTNVPROC) load(userptr, "glIsNamedBufferResidentNV"); + glad_glMakeBufferNonResidentNV = (PFNGLMAKEBUFFERNONRESIDENTNVPROC) load(userptr, "glMakeBufferNonResidentNV"); + glad_glMakeBufferResidentNV = (PFNGLMAKEBUFFERRESIDENTNVPROC) load(userptr, "glMakeBufferResidentNV"); + glad_glMakeNamedBufferNonResidentNV = (PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) load(userptr, "glMakeNamedBufferNonResidentNV"); + glad_glMakeNamedBufferResidentNV = (PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) load(userptr, "glMakeNamedBufferResidentNV"); + glad_glProgramUniformui64NV = (PFNGLPROGRAMUNIFORMUI64NVPROC) load(userptr, "glProgramUniformui64NV"); + glad_glProgramUniformui64vNV = (PFNGLPROGRAMUNIFORMUI64VNVPROC) load(userptr, "glProgramUniformui64vNV"); + glad_glUniformui64NV = (PFNGLUNIFORMUI64NVPROC) load(userptr, "glUniformui64NV"); + glad_glUniformui64vNV = (PFNGLUNIFORMUI64VNVPROC) load(userptr, "glUniformui64vNV"); +} +static void glad_gl_load_GL_NV_shading_rate_image( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_shading_rate_image) return; + glad_glBindShadingRateImageNV = (PFNGLBINDSHADINGRATEIMAGENVPROC) load(userptr, "glBindShadingRateImageNV"); + glad_glGetShadingRateImagePaletteNV = (PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) load(userptr, "glGetShadingRateImagePaletteNV"); + glad_glGetShadingRateSampleLocationivNV = (PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) load(userptr, "glGetShadingRateSampleLocationivNV"); + glad_glShadingRateImageBarrierNV = (PFNGLSHADINGRATEIMAGEBARRIERNVPROC) load(userptr, "glShadingRateImageBarrierNV"); + glad_glShadingRateImagePaletteNV = (PFNGLSHADINGRATEIMAGEPALETTENVPROC) load(userptr, "glShadingRateImagePaletteNV"); + glad_glShadingRateSampleOrderCustomNV = (PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) load(userptr, "glShadingRateSampleOrderCustomNV"); + glad_glShadingRateSampleOrderNV = (PFNGLSHADINGRATESAMPLEORDERNVPROC) load(userptr, "glShadingRateSampleOrderNV"); +} +static void glad_gl_load_GL_NV_texture_barrier( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_texture_barrier) return; + glad_glTextureBarrierNV = (PFNGLTEXTUREBARRIERNVPROC) load(userptr, "glTextureBarrierNV"); +} +static void glad_gl_load_GL_NV_texture_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_texture_multisample) return; + glad_glTexImage2DMultisampleCoverageNV = (PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) load(userptr, "glTexImage2DMultisampleCoverageNV"); + glad_glTexImage3DMultisampleCoverageNV = (PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) load(userptr, "glTexImage3DMultisampleCoverageNV"); + glad_glTextureImage2DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) load(userptr, "glTextureImage2DMultisampleCoverageNV"); + glad_glTextureImage2DMultisampleNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) load(userptr, "glTextureImage2DMultisampleNV"); + glad_glTextureImage3DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) load(userptr, "glTextureImage3DMultisampleCoverageNV"); + glad_glTextureImage3DMultisampleNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) load(userptr, "glTextureImage3DMultisampleNV"); +} +static void glad_gl_load_GL_NV_timeline_semaphore( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_timeline_semaphore) return; + glad_glCreateSemaphoresNV = (PFNGLCREATESEMAPHORESNVPROC) load(userptr, "glCreateSemaphoresNV"); + glad_glGetSemaphoreParameterivNV = (PFNGLGETSEMAPHOREPARAMETERIVNVPROC) load(userptr, "glGetSemaphoreParameterivNV"); + glad_glSemaphoreParameterivNV = (PFNGLSEMAPHOREPARAMETERIVNVPROC) load(userptr, "glSemaphoreParameterivNV"); +} +static void glad_gl_load_GL_NV_transform_feedback( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_transform_feedback) return; + glad_glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC) load(userptr, "glActiveVaryingNV"); + glad_glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC) load(userptr, "glBeginTransformFeedbackNV"); + glad_glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC) load(userptr, "glBindBufferBaseNV"); + glad_glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC) load(userptr, "glBindBufferOffsetNV"); + glad_glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC) load(userptr, "glBindBufferRangeNV"); + glad_glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC) load(userptr, "glEndTransformFeedbackNV"); + glad_glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC) load(userptr, "glGetActiveVaryingNV"); + glad_glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) load(userptr, "glGetTransformFeedbackVaryingNV"); + glad_glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC) load(userptr, "glGetVaryingLocationNV"); + glad_glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) load(userptr, "glTransformFeedbackAttribsNV"); + glad_glTransformFeedbackStreamAttribsNV = (PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) load(userptr, "glTransformFeedbackStreamAttribsNV"); + glad_glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) load(userptr, "glTransformFeedbackVaryingsNV"); +} +static void glad_gl_load_GL_NV_transform_feedback2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_transform_feedback2) return; + glad_glBindTransformFeedbackNV = (PFNGLBINDTRANSFORMFEEDBACKNVPROC) load(userptr, "glBindTransformFeedbackNV"); + glad_glDeleteTransformFeedbacksNV = (PFNGLDELETETRANSFORMFEEDBACKSNVPROC) load(userptr, "glDeleteTransformFeedbacksNV"); + glad_glDrawTransformFeedbackNV = (PFNGLDRAWTRANSFORMFEEDBACKNVPROC) load(userptr, "glDrawTransformFeedbackNV"); + glad_glGenTransformFeedbacksNV = (PFNGLGENTRANSFORMFEEDBACKSNVPROC) load(userptr, "glGenTransformFeedbacksNV"); + glad_glIsTransformFeedbackNV = (PFNGLISTRANSFORMFEEDBACKNVPROC) load(userptr, "glIsTransformFeedbackNV"); + glad_glPauseTransformFeedbackNV = (PFNGLPAUSETRANSFORMFEEDBACKNVPROC) load(userptr, "glPauseTransformFeedbackNV"); + glad_glResumeTransformFeedbackNV = (PFNGLRESUMETRANSFORMFEEDBACKNVPROC) load(userptr, "glResumeTransformFeedbackNV"); +} +static void glad_gl_load_GL_NV_vdpau_interop( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_vdpau_interop) return; + glad_glVDPAUFiniNV = (PFNGLVDPAUFININVPROC) load(userptr, "glVDPAUFiniNV"); + glad_glVDPAUGetSurfaceivNV = (PFNGLVDPAUGETSURFACEIVNVPROC) load(userptr, "glVDPAUGetSurfaceivNV"); + glad_glVDPAUInitNV = (PFNGLVDPAUINITNVPROC) load(userptr, "glVDPAUInitNV"); + glad_glVDPAUIsSurfaceNV = (PFNGLVDPAUISSURFACENVPROC) load(userptr, "glVDPAUIsSurfaceNV"); + glad_glVDPAUMapSurfacesNV = (PFNGLVDPAUMAPSURFACESNVPROC) load(userptr, "glVDPAUMapSurfacesNV"); + glad_glVDPAURegisterOutputSurfaceNV = (PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) load(userptr, "glVDPAURegisterOutputSurfaceNV"); + glad_glVDPAURegisterVideoSurfaceNV = (PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) load(userptr, "glVDPAURegisterVideoSurfaceNV"); + glad_glVDPAUSurfaceAccessNV = (PFNGLVDPAUSURFACEACCESSNVPROC) load(userptr, "glVDPAUSurfaceAccessNV"); + glad_glVDPAUUnmapSurfacesNV = (PFNGLVDPAUUNMAPSURFACESNVPROC) load(userptr, "glVDPAUUnmapSurfacesNV"); + glad_glVDPAUUnregisterSurfaceNV = (PFNGLVDPAUUNREGISTERSURFACENVPROC) load(userptr, "glVDPAUUnregisterSurfaceNV"); +} +static void glad_gl_load_GL_NV_vdpau_interop2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_vdpau_interop2) return; + glad_glVDPAURegisterVideoSurfaceWithPictureStructureNV = (PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) load(userptr, "glVDPAURegisterVideoSurfaceWithPictureStructureNV"); +} +static void glad_gl_load_GL_NV_vertex_array_range( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_vertex_array_range) return; + glad_glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC) load(userptr, "glFlushVertexArrayRangeNV"); + glad_glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC) load(userptr, "glVertexArrayRangeNV"); +} +static void glad_gl_load_GL_NV_vertex_attrib_integer_64bit( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_vertex_attrib_integer_64bit) return; + glad_glGetVertexAttribLi64vNV = (PFNGLGETVERTEXATTRIBLI64VNVPROC) load(userptr, "glGetVertexAttribLi64vNV"); + glad_glGetVertexAttribLui64vNV = (PFNGLGETVERTEXATTRIBLUI64VNVPROC) load(userptr, "glGetVertexAttribLui64vNV"); + glad_glVertexAttribL1i64NV = (PFNGLVERTEXATTRIBL1I64NVPROC) load(userptr, "glVertexAttribL1i64NV"); + glad_glVertexAttribL1i64vNV = (PFNGLVERTEXATTRIBL1I64VNVPROC) load(userptr, "glVertexAttribL1i64vNV"); + glad_glVertexAttribL1ui64NV = (PFNGLVERTEXATTRIBL1UI64NVPROC) load(userptr, "glVertexAttribL1ui64NV"); + glad_glVertexAttribL1ui64vNV = (PFNGLVERTEXATTRIBL1UI64VNVPROC) load(userptr, "glVertexAttribL1ui64vNV"); + glad_glVertexAttribL2i64NV = (PFNGLVERTEXATTRIBL2I64NVPROC) load(userptr, "glVertexAttribL2i64NV"); + glad_glVertexAttribL2i64vNV = (PFNGLVERTEXATTRIBL2I64VNVPROC) load(userptr, "glVertexAttribL2i64vNV"); + glad_glVertexAttribL2ui64NV = (PFNGLVERTEXATTRIBL2UI64NVPROC) load(userptr, "glVertexAttribL2ui64NV"); + glad_glVertexAttribL2ui64vNV = (PFNGLVERTEXATTRIBL2UI64VNVPROC) load(userptr, "glVertexAttribL2ui64vNV"); + glad_glVertexAttribL3i64NV = (PFNGLVERTEXATTRIBL3I64NVPROC) load(userptr, "glVertexAttribL3i64NV"); + glad_glVertexAttribL3i64vNV = (PFNGLVERTEXATTRIBL3I64VNVPROC) load(userptr, "glVertexAttribL3i64vNV"); + glad_glVertexAttribL3ui64NV = (PFNGLVERTEXATTRIBL3UI64NVPROC) load(userptr, "glVertexAttribL3ui64NV"); + glad_glVertexAttribL3ui64vNV = (PFNGLVERTEXATTRIBL3UI64VNVPROC) load(userptr, "glVertexAttribL3ui64vNV"); + glad_glVertexAttribL4i64NV = (PFNGLVERTEXATTRIBL4I64NVPROC) load(userptr, "glVertexAttribL4i64NV"); + glad_glVertexAttribL4i64vNV = (PFNGLVERTEXATTRIBL4I64VNVPROC) load(userptr, "glVertexAttribL4i64vNV"); + glad_glVertexAttribL4ui64NV = (PFNGLVERTEXATTRIBL4UI64NVPROC) load(userptr, "glVertexAttribL4ui64NV"); + glad_glVertexAttribL4ui64vNV = (PFNGLVERTEXATTRIBL4UI64VNVPROC) load(userptr, "glVertexAttribL4ui64vNV"); + glad_glVertexAttribLFormatNV = (PFNGLVERTEXATTRIBLFORMATNVPROC) load(userptr, "glVertexAttribLFormatNV"); +} +static void glad_gl_load_GL_NV_vertex_buffer_unified_memory( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_vertex_buffer_unified_memory) return; + glad_glBufferAddressRangeNV = (PFNGLBUFFERADDRESSRANGENVPROC) load(userptr, "glBufferAddressRangeNV"); + glad_glColorFormatNV = (PFNGLCOLORFORMATNVPROC) load(userptr, "glColorFormatNV"); + glad_glEdgeFlagFormatNV = (PFNGLEDGEFLAGFORMATNVPROC) load(userptr, "glEdgeFlagFormatNV"); + glad_glFogCoordFormatNV = (PFNGLFOGCOORDFORMATNVPROC) load(userptr, "glFogCoordFormatNV"); + glad_glGetIntegerui64i_vNV = (PFNGLGETINTEGERUI64I_VNVPROC) load(userptr, "glGetIntegerui64i_vNV"); + glad_glIndexFormatNV = (PFNGLINDEXFORMATNVPROC) load(userptr, "glIndexFormatNV"); + glad_glNormalFormatNV = (PFNGLNORMALFORMATNVPROC) load(userptr, "glNormalFormatNV"); + glad_glSecondaryColorFormatNV = (PFNGLSECONDARYCOLORFORMATNVPROC) load(userptr, "glSecondaryColorFormatNV"); + glad_glTexCoordFormatNV = (PFNGLTEXCOORDFORMATNVPROC) load(userptr, "glTexCoordFormatNV"); + glad_glVertexAttribFormatNV = (PFNGLVERTEXATTRIBFORMATNVPROC) load(userptr, "glVertexAttribFormatNV"); + glad_glVertexAttribIFormatNV = (PFNGLVERTEXATTRIBIFORMATNVPROC) load(userptr, "glVertexAttribIFormatNV"); + glad_glVertexFormatNV = (PFNGLVERTEXFORMATNVPROC) load(userptr, "glVertexFormatNV"); +} +static void glad_gl_load_GL_NV_vertex_program( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_vertex_program) return; + glad_glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC) load(userptr, "glAreProgramsResidentNV"); + glad_glBindProgramNV = (PFNGLBINDPROGRAMNVPROC) load(userptr, "glBindProgramNV"); + glad_glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC) load(userptr, "glDeleteProgramsNV"); + glad_glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC) load(userptr, "glExecuteProgramNV"); + glad_glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC) load(userptr, "glGenProgramsNV"); + glad_glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC) load(userptr, "glGetProgramParameterdvNV"); + glad_glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC) load(userptr, "glGetProgramParameterfvNV"); + glad_glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC) load(userptr, "glGetProgramStringNV"); + glad_glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC) load(userptr, "glGetProgramivNV"); + glad_glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC) load(userptr, "glGetTrackMatrixivNV"); + glad_glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC) load(userptr, "glGetVertexAttribPointervNV"); + glad_glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC) load(userptr, "glGetVertexAttribdvNV"); + glad_glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC) load(userptr, "glGetVertexAttribfvNV"); + glad_glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC) load(userptr, "glGetVertexAttribivNV"); + glad_glIsProgramNV = (PFNGLISPROGRAMNVPROC) load(userptr, "glIsProgramNV"); + glad_glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC) load(userptr, "glLoadProgramNV"); + glad_glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC) load(userptr, "glProgramParameter4dNV"); + glad_glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC) load(userptr, "glProgramParameter4dvNV"); + glad_glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC) load(userptr, "glProgramParameter4fNV"); + glad_glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC) load(userptr, "glProgramParameter4fvNV"); + glad_glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC) load(userptr, "glProgramParameters4dvNV"); + glad_glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC) load(userptr, "glProgramParameters4fvNV"); + glad_glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC) load(userptr, "glRequestResidentProgramsNV"); + glad_glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC) load(userptr, "glTrackMatrixNV"); + glad_glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC) load(userptr, "glVertexAttrib1dNV"); + glad_glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC) load(userptr, "glVertexAttrib1dvNV"); + glad_glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC) load(userptr, "glVertexAttrib1fNV"); + glad_glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC) load(userptr, "glVertexAttrib1fvNV"); + glad_glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC) load(userptr, "glVertexAttrib1sNV"); + glad_glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC) load(userptr, "glVertexAttrib1svNV"); + glad_glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC) load(userptr, "glVertexAttrib2dNV"); + glad_glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC) load(userptr, "glVertexAttrib2dvNV"); + glad_glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC) load(userptr, "glVertexAttrib2fNV"); + glad_glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC) load(userptr, "glVertexAttrib2fvNV"); + glad_glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC) load(userptr, "glVertexAttrib2sNV"); + glad_glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC) load(userptr, "glVertexAttrib2svNV"); + glad_glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC) load(userptr, "glVertexAttrib3dNV"); + glad_glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC) load(userptr, "glVertexAttrib3dvNV"); + glad_glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC) load(userptr, "glVertexAttrib3fNV"); + glad_glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC) load(userptr, "glVertexAttrib3fvNV"); + glad_glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC) load(userptr, "glVertexAttrib3sNV"); + glad_glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC) load(userptr, "glVertexAttrib3svNV"); + glad_glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC) load(userptr, "glVertexAttrib4dNV"); + glad_glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC) load(userptr, "glVertexAttrib4dvNV"); + glad_glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC) load(userptr, "glVertexAttrib4fNV"); + glad_glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC) load(userptr, "glVertexAttrib4fvNV"); + glad_glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC) load(userptr, "glVertexAttrib4sNV"); + glad_glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC) load(userptr, "glVertexAttrib4svNV"); + glad_glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC) load(userptr, "glVertexAttrib4ubNV"); + glad_glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC) load(userptr, "glVertexAttrib4ubvNV"); + glad_glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC) load(userptr, "glVertexAttribPointerNV"); + glad_glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC) load(userptr, "glVertexAttribs1dvNV"); + glad_glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC) load(userptr, "glVertexAttribs1fvNV"); + glad_glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC) load(userptr, "glVertexAttribs1svNV"); + glad_glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC) load(userptr, "glVertexAttribs2dvNV"); + glad_glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC) load(userptr, "glVertexAttribs2fvNV"); + glad_glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC) load(userptr, "glVertexAttribs2svNV"); + glad_glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC) load(userptr, "glVertexAttribs3dvNV"); + glad_glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC) load(userptr, "glVertexAttribs3fvNV"); + glad_glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC) load(userptr, "glVertexAttribs3svNV"); + glad_glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC) load(userptr, "glVertexAttribs4dvNV"); + glad_glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC) load(userptr, "glVertexAttribs4fvNV"); + glad_glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC) load(userptr, "glVertexAttribs4svNV"); + glad_glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC) load(userptr, "glVertexAttribs4ubvNV"); +} +static void glad_gl_load_GL_NV_vertex_program4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_vertex_program4) return; + glad_glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC) load(userptr, "glGetVertexAttribIivEXT"); + glad_glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC) load(userptr, "glGetVertexAttribIuivEXT"); + glad_glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC) load(userptr, "glVertexAttribI1iEXT"); + glad_glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC) load(userptr, "glVertexAttribI1ivEXT"); + glad_glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC) load(userptr, "glVertexAttribI1uiEXT"); + glad_glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC) load(userptr, "glVertexAttribI1uivEXT"); + glad_glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC) load(userptr, "glVertexAttribI2iEXT"); + glad_glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC) load(userptr, "glVertexAttribI2ivEXT"); + glad_glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC) load(userptr, "glVertexAttribI2uiEXT"); + glad_glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC) load(userptr, "glVertexAttribI2uivEXT"); + glad_glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC) load(userptr, "glVertexAttribI3iEXT"); + glad_glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC) load(userptr, "glVertexAttribI3ivEXT"); + glad_glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC) load(userptr, "glVertexAttribI3uiEXT"); + glad_glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC) load(userptr, "glVertexAttribI3uivEXT"); + glad_glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC) load(userptr, "glVertexAttribI4bvEXT"); + glad_glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC) load(userptr, "glVertexAttribI4iEXT"); + glad_glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC) load(userptr, "glVertexAttribI4ivEXT"); + glad_glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC) load(userptr, "glVertexAttribI4svEXT"); + glad_glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC) load(userptr, "glVertexAttribI4ubvEXT"); + glad_glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC) load(userptr, "glVertexAttribI4uiEXT"); + glad_glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC) load(userptr, "glVertexAttribI4uivEXT"); + glad_glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC) load(userptr, "glVertexAttribI4usvEXT"); + glad_glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC) load(userptr, "glVertexAttribIPointerEXT"); +} +static void glad_gl_load_GL_NV_video_capture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_video_capture) return; + glad_glBeginVideoCaptureNV = (PFNGLBEGINVIDEOCAPTURENVPROC) load(userptr, "glBeginVideoCaptureNV"); + glad_glBindVideoCaptureStreamBufferNV = (PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) load(userptr, "glBindVideoCaptureStreamBufferNV"); + glad_glBindVideoCaptureStreamTextureNV = (PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) load(userptr, "glBindVideoCaptureStreamTextureNV"); + glad_glEndVideoCaptureNV = (PFNGLENDVIDEOCAPTURENVPROC) load(userptr, "glEndVideoCaptureNV"); + glad_glGetVideoCaptureStreamdvNV = (PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) load(userptr, "glGetVideoCaptureStreamdvNV"); + glad_glGetVideoCaptureStreamfvNV = (PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) load(userptr, "glGetVideoCaptureStreamfvNV"); + glad_glGetVideoCaptureStreamivNV = (PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) load(userptr, "glGetVideoCaptureStreamivNV"); + glad_glGetVideoCaptureivNV = (PFNGLGETVIDEOCAPTUREIVNVPROC) load(userptr, "glGetVideoCaptureivNV"); + glad_glVideoCaptureNV = (PFNGLVIDEOCAPTURENVPROC) load(userptr, "glVideoCaptureNV"); + glad_glVideoCaptureStreamParameterdvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) load(userptr, "glVideoCaptureStreamParameterdvNV"); + glad_glVideoCaptureStreamParameterfvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) load(userptr, "glVideoCaptureStreamParameterfvNV"); + glad_glVideoCaptureStreamParameterivNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) load(userptr, "glVideoCaptureStreamParameterivNV"); +} +static void glad_gl_load_GL_NV_viewport_swizzle( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_NV_viewport_swizzle) return; + glad_glViewportSwizzleNV = (PFNGLVIEWPORTSWIZZLENVPROC) load(userptr, "glViewportSwizzleNV"); +} +static void glad_gl_load_GL_OES_byte_coordinates( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_OES_byte_coordinates) return; + glad_glMultiTexCoord1bOES = (PFNGLMULTITEXCOORD1BOESPROC) load(userptr, "glMultiTexCoord1bOES"); + glad_glMultiTexCoord1bvOES = (PFNGLMULTITEXCOORD1BVOESPROC) load(userptr, "glMultiTexCoord1bvOES"); + glad_glMultiTexCoord2bOES = (PFNGLMULTITEXCOORD2BOESPROC) load(userptr, "glMultiTexCoord2bOES"); + glad_glMultiTexCoord2bvOES = (PFNGLMULTITEXCOORD2BVOESPROC) load(userptr, "glMultiTexCoord2bvOES"); + glad_glMultiTexCoord3bOES = (PFNGLMULTITEXCOORD3BOESPROC) load(userptr, "glMultiTexCoord3bOES"); + glad_glMultiTexCoord3bvOES = (PFNGLMULTITEXCOORD3BVOESPROC) load(userptr, "glMultiTexCoord3bvOES"); + glad_glMultiTexCoord4bOES = (PFNGLMULTITEXCOORD4BOESPROC) load(userptr, "glMultiTexCoord4bOES"); + glad_glMultiTexCoord4bvOES = (PFNGLMULTITEXCOORD4BVOESPROC) load(userptr, "glMultiTexCoord4bvOES"); + glad_glTexCoord1bOES = (PFNGLTEXCOORD1BOESPROC) load(userptr, "glTexCoord1bOES"); + glad_glTexCoord1bvOES = (PFNGLTEXCOORD1BVOESPROC) load(userptr, "glTexCoord1bvOES"); + glad_glTexCoord2bOES = (PFNGLTEXCOORD2BOESPROC) load(userptr, "glTexCoord2bOES"); + glad_glTexCoord2bvOES = (PFNGLTEXCOORD2BVOESPROC) load(userptr, "glTexCoord2bvOES"); + glad_glTexCoord3bOES = (PFNGLTEXCOORD3BOESPROC) load(userptr, "glTexCoord3bOES"); + glad_glTexCoord3bvOES = (PFNGLTEXCOORD3BVOESPROC) load(userptr, "glTexCoord3bvOES"); + glad_glTexCoord4bOES = (PFNGLTEXCOORD4BOESPROC) load(userptr, "glTexCoord4bOES"); + glad_glTexCoord4bvOES = (PFNGLTEXCOORD4BVOESPROC) load(userptr, "glTexCoord4bvOES"); + glad_glVertex2bOES = (PFNGLVERTEX2BOESPROC) load(userptr, "glVertex2bOES"); + glad_glVertex2bvOES = (PFNGLVERTEX2BVOESPROC) load(userptr, "glVertex2bvOES"); + glad_glVertex3bOES = (PFNGLVERTEX3BOESPROC) load(userptr, "glVertex3bOES"); + glad_glVertex3bvOES = (PFNGLVERTEX3BVOESPROC) load(userptr, "glVertex3bvOES"); + glad_glVertex4bOES = (PFNGLVERTEX4BOESPROC) load(userptr, "glVertex4bOES"); + glad_glVertex4bvOES = (PFNGLVERTEX4BVOESPROC) load(userptr, "glVertex4bvOES"); +} +static void glad_gl_load_GL_OES_fixed_point( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_OES_fixed_point) return; + glad_glAccumxOES = (PFNGLACCUMXOESPROC) load(userptr, "glAccumxOES"); + glad_glAlphaFuncxOES = (PFNGLALPHAFUNCXOESPROC) load(userptr, "glAlphaFuncxOES"); + glad_glBitmapxOES = (PFNGLBITMAPXOESPROC) load(userptr, "glBitmapxOES"); + glad_glBlendColorxOES = (PFNGLBLENDCOLORXOESPROC) load(userptr, "glBlendColorxOES"); + glad_glClearAccumxOES = (PFNGLCLEARACCUMXOESPROC) load(userptr, "glClearAccumxOES"); + glad_glClearColorxOES = (PFNGLCLEARCOLORXOESPROC) load(userptr, "glClearColorxOES"); + glad_glClearDepthxOES = (PFNGLCLEARDEPTHXOESPROC) load(userptr, "glClearDepthxOES"); + glad_glClipPlanexOES = (PFNGLCLIPPLANEXOESPROC) load(userptr, "glClipPlanexOES"); + glad_glColor3xOES = (PFNGLCOLOR3XOESPROC) load(userptr, "glColor3xOES"); + glad_glColor3xvOES = (PFNGLCOLOR3XVOESPROC) load(userptr, "glColor3xvOES"); + glad_glColor4xOES = (PFNGLCOLOR4XOESPROC) load(userptr, "glColor4xOES"); + glad_glColor4xvOES = (PFNGLCOLOR4XVOESPROC) load(userptr, "glColor4xvOES"); + glad_glConvolutionParameterxOES = (PFNGLCONVOLUTIONPARAMETERXOESPROC) load(userptr, "glConvolutionParameterxOES"); + glad_glConvolutionParameterxvOES = (PFNGLCONVOLUTIONPARAMETERXVOESPROC) load(userptr, "glConvolutionParameterxvOES"); + glad_glDepthRangexOES = (PFNGLDEPTHRANGEXOESPROC) load(userptr, "glDepthRangexOES"); + glad_glEvalCoord1xOES = (PFNGLEVALCOORD1XOESPROC) load(userptr, "glEvalCoord1xOES"); + glad_glEvalCoord1xvOES = (PFNGLEVALCOORD1XVOESPROC) load(userptr, "glEvalCoord1xvOES"); + glad_glEvalCoord2xOES = (PFNGLEVALCOORD2XOESPROC) load(userptr, "glEvalCoord2xOES"); + glad_glEvalCoord2xvOES = (PFNGLEVALCOORD2XVOESPROC) load(userptr, "glEvalCoord2xvOES"); + glad_glFeedbackBufferxOES = (PFNGLFEEDBACKBUFFERXOESPROC) load(userptr, "glFeedbackBufferxOES"); + glad_glFogxOES = (PFNGLFOGXOESPROC) load(userptr, "glFogxOES"); + glad_glFogxvOES = (PFNGLFOGXVOESPROC) load(userptr, "glFogxvOES"); + glad_glFrustumxOES = (PFNGLFRUSTUMXOESPROC) load(userptr, "glFrustumxOES"); + glad_glGetClipPlanexOES = (PFNGLGETCLIPPLANEXOESPROC) load(userptr, "glGetClipPlanexOES"); + glad_glGetConvolutionParameterxvOES = (PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) load(userptr, "glGetConvolutionParameterxvOES"); + glad_glGetFixedvOES = (PFNGLGETFIXEDVOESPROC) load(userptr, "glGetFixedvOES"); + glad_glGetHistogramParameterxvOES = (PFNGLGETHISTOGRAMPARAMETERXVOESPROC) load(userptr, "glGetHistogramParameterxvOES"); + glad_glGetLightxOES = (PFNGLGETLIGHTXOESPROC) load(userptr, "glGetLightxOES"); + glad_glGetMapxvOES = (PFNGLGETMAPXVOESPROC) load(userptr, "glGetMapxvOES"); + glad_glGetMaterialxOES = (PFNGLGETMATERIALXOESPROC) load(userptr, "glGetMaterialxOES"); + glad_glGetPixelMapxv = (PFNGLGETPIXELMAPXVPROC) load(userptr, "glGetPixelMapxv"); + glad_glGetTexEnvxvOES = (PFNGLGETTEXENVXVOESPROC) load(userptr, "glGetTexEnvxvOES"); + glad_glGetTexGenxvOES = (PFNGLGETTEXGENXVOESPROC) load(userptr, "glGetTexGenxvOES"); + glad_glGetTexLevelParameterxvOES = (PFNGLGETTEXLEVELPARAMETERXVOESPROC) load(userptr, "glGetTexLevelParameterxvOES"); + glad_glGetTexParameterxvOES = (PFNGLGETTEXPARAMETERXVOESPROC) load(userptr, "glGetTexParameterxvOES"); + glad_glIndexxOES = (PFNGLINDEXXOESPROC) load(userptr, "glIndexxOES"); + glad_glIndexxvOES = (PFNGLINDEXXVOESPROC) load(userptr, "glIndexxvOES"); + glad_glLightModelxOES = (PFNGLLIGHTMODELXOESPROC) load(userptr, "glLightModelxOES"); + glad_glLightModelxvOES = (PFNGLLIGHTMODELXVOESPROC) load(userptr, "glLightModelxvOES"); + glad_glLightxOES = (PFNGLLIGHTXOESPROC) load(userptr, "glLightxOES"); + glad_glLightxvOES = (PFNGLLIGHTXVOESPROC) load(userptr, "glLightxvOES"); + glad_glLineWidthxOES = (PFNGLLINEWIDTHXOESPROC) load(userptr, "glLineWidthxOES"); + glad_glLoadMatrixxOES = (PFNGLLOADMATRIXXOESPROC) load(userptr, "glLoadMatrixxOES"); + glad_glLoadTransposeMatrixxOES = (PFNGLLOADTRANSPOSEMATRIXXOESPROC) load(userptr, "glLoadTransposeMatrixxOES"); + glad_glMap1xOES = (PFNGLMAP1XOESPROC) load(userptr, "glMap1xOES"); + glad_glMap2xOES = (PFNGLMAP2XOESPROC) load(userptr, "glMap2xOES"); + glad_glMapGrid1xOES = (PFNGLMAPGRID1XOESPROC) load(userptr, "glMapGrid1xOES"); + glad_glMapGrid2xOES = (PFNGLMAPGRID2XOESPROC) load(userptr, "glMapGrid2xOES"); + glad_glMaterialxOES = (PFNGLMATERIALXOESPROC) load(userptr, "glMaterialxOES"); + glad_glMaterialxvOES = (PFNGLMATERIALXVOESPROC) load(userptr, "glMaterialxvOES"); + glad_glMultMatrixxOES = (PFNGLMULTMATRIXXOESPROC) load(userptr, "glMultMatrixxOES"); + glad_glMultTransposeMatrixxOES = (PFNGLMULTTRANSPOSEMATRIXXOESPROC) load(userptr, "glMultTransposeMatrixxOES"); + glad_glMultiTexCoord1xOES = (PFNGLMULTITEXCOORD1XOESPROC) load(userptr, "glMultiTexCoord1xOES"); + glad_glMultiTexCoord1xvOES = (PFNGLMULTITEXCOORD1XVOESPROC) load(userptr, "glMultiTexCoord1xvOES"); + glad_glMultiTexCoord2xOES = (PFNGLMULTITEXCOORD2XOESPROC) load(userptr, "glMultiTexCoord2xOES"); + glad_glMultiTexCoord2xvOES = (PFNGLMULTITEXCOORD2XVOESPROC) load(userptr, "glMultiTexCoord2xvOES"); + glad_glMultiTexCoord3xOES = (PFNGLMULTITEXCOORD3XOESPROC) load(userptr, "glMultiTexCoord3xOES"); + glad_glMultiTexCoord3xvOES = (PFNGLMULTITEXCOORD3XVOESPROC) load(userptr, "glMultiTexCoord3xvOES"); + glad_glMultiTexCoord4xOES = (PFNGLMULTITEXCOORD4XOESPROC) load(userptr, "glMultiTexCoord4xOES"); + glad_glMultiTexCoord4xvOES = (PFNGLMULTITEXCOORD4XVOESPROC) load(userptr, "glMultiTexCoord4xvOES"); + glad_glNormal3xOES = (PFNGLNORMAL3XOESPROC) load(userptr, "glNormal3xOES"); + glad_glNormal3xvOES = (PFNGLNORMAL3XVOESPROC) load(userptr, "glNormal3xvOES"); + glad_glOrthoxOES = (PFNGLORTHOXOESPROC) load(userptr, "glOrthoxOES"); + glad_glPassThroughxOES = (PFNGLPASSTHROUGHXOESPROC) load(userptr, "glPassThroughxOES"); + glad_glPixelMapx = (PFNGLPIXELMAPXPROC) load(userptr, "glPixelMapx"); + glad_glPixelStorex = (PFNGLPIXELSTOREXPROC) load(userptr, "glPixelStorex"); + glad_glPixelTransferxOES = (PFNGLPIXELTRANSFERXOESPROC) load(userptr, "glPixelTransferxOES"); + glad_glPixelZoomxOES = (PFNGLPIXELZOOMXOESPROC) load(userptr, "glPixelZoomxOES"); + glad_glPointParameterxvOES = (PFNGLPOINTPARAMETERXVOESPROC) load(userptr, "glPointParameterxvOES"); + glad_glPointSizexOES = (PFNGLPOINTSIZEXOESPROC) load(userptr, "glPointSizexOES"); + glad_glPolygonOffsetxOES = (PFNGLPOLYGONOFFSETXOESPROC) load(userptr, "glPolygonOffsetxOES"); + glad_glPrioritizeTexturesxOES = (PFNGLPRIORITIZETEXTURESXOESPROC) load(userptr, "glPrioritizeTexturesxOES"); + glad_glRasterPos2xOES = (PFNGLRASTERPOS2XOESPROC) load(userptr, "glRasterPos2xOES"); + glad_glRasterPos2xvOES = (PFNGLRASTERPOS2XVOESPROC) load(userptr, "glRasterPos2xvOES"); + glad_glRasterPos3xOES = (PFNGLRASTERPOS3XOESPROC) load(userptr, "glRasterPos3xOES"); + glad_glRasterPos3xvOES = (PFNGLRASTERPOS3XVOESPROC) load(userptr, "glRasterPos3xvOES"); + glad_glRasterPos4xOES = (PFNGLRASTERPOS4XOESPROC) load(userptr, "glRasterPos4xOES"); + glad_glRasterPos4xvOES = (PFNGLRASTERPOS4XVOESPROC) load(userptr, "glRasterPos4xvOES"); + glad_glRectxOES = (PFNGLRECTXOESPROC) load(userptr, "glRectxOES"); + glad_glRectxvOES = (PFNGLRECTXVOESPROC) load(userptr, "glRectxvOES"); + glad_glRotatexOES = (PFNGLROTATEXOESPROC) load(userptr, "glRotatexOES"); + glad_glScalexOES = (PFNGLSCALEXOESPROC) load(userptr, "glScalexOES"); + glad_glTexCoord1xOES = (PFNGLTEXCOORD1XOESPROC) load(userptr, "glTexCoord1xOES"); + glad_glTexCoord1xvOES = (PFNGLTEXCOORD1XVOESPROC) load(userptr, "glTexCoord1xvOES"); + glad_glTexCoord2xOES = (PFNGLTEXCOORD2XOESPROC) load(userptr, "glTexCoord2xOES"); + glad_glTexCoord2xvOES = (PFNGLTEXCOORD2XVOESPROC) load(userptr, "glTexCoord2xvOES"); + glad_glTexCoord3xOES = (PFNGLTEXCOORD3XOESPROC) load(userptr, "glTexCoord3xOES"); + glad_glTexCoord3xvOES = (PFNGLTEXCOORD3XVOESPROC) load(userptr, "glTexCoord3xvOES"); + glad_glTexCoord4xOES = (PFNGLTEXCOORD4XOESPROC) load(userptr, "glTexCoord4xOES"); + glad_glTexCoord4xvOES = (PFNGLTEXCOORD4XVOESPROC) load(userptr, "glTexCoord4xvOES"); + glad_glTexEnvxOES = (PFNGLTEXENVXOESPROC) load(userptr, "glTexEnvxOES"); + glad_glTexEnvxvOES = (PFNGLTEXENVXVOESPROC) load(userptr, "glTexEnvxvOES"); + glad_glTexGenxOES = (PFNGLTEXGENXOESPROC) load(userptr, "glTexGenxOES"); + glad_glTexGenxvOES = (PFNGLTEXGENXVOESPROC) load(userptr, "glTexGenxvOES"); + glad_glTexParameterxOES = (PFNGLTEXPARAMETERXOESPROC) load(userptr, "glTexParameterxOES"); + glad_glTexParameterxvOES = (PFNGLTEXPARAMETERXVOESPROC) load(userptr, "glTexParameterxvOES"); + glad_glTranslatexOES = (PFNGLTRANSLATEXOESPROC) load(userptr, "glTranslatexOES"); + glad_glVertex2xOES = (PFNGLVERTEX2XOESPROC) load(userptr, "glVertex2xOES"); + glad_glVertex2xvOES = (PFNGLVERTEX2XVOESPROC) load(userptr, "glVertex2xvOES"); + glad_glVertex3xOES = (PFNGLVERTEX3XOESPROC) load(userptr, "glVertex3xOES"); + glad_glVertex3xvOES = (PFNGLVERTEX3XVOESPROC) load(userptr, "glVertex3xvOES"); + glad_glVertex4xOES = (PFNGLVERTEX4XOESPROC) load(userptr, "glVertex4xOES"); + glad_glVertex4xvOES = (PFNGLVERTEX4XVOESPROC) load(userptr, "glVertex4xvOES"); +} +static void glad_gl_load_GL_OES_query_matrix( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_OES_query_matrix) return; + glad_glQueryMatrixxOES = (PFNGLQUERYMATRIXXOESPROC) load(userptr, "glQueryMatrixxOES"); +} +static void glad_gl_load_GL_OES_single_precision( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_OES_single_precision) return; + glad_glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC) load(userptr, "glClearDepthfOES"); + glad_glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC) load(userptr, "glClipPlanefOES"); + glad_glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC) load(userptr, "glDepthRangefOES"); + glad_glFrustumfOES = (PFNGLFRUSTUMFOESPROC) load(userptr, "glFrustumfOES"); + glad_glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC) load(userptr, "glGetClipPlanefOES"); + glad_glOrthofOES = (PFNGLORTHOFOESPROC) load(userptr, "glOrthofOES"); +} +static void glad_gl_load_GL_OVR_multiview( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_OVR_multiview) return; + glad_glFramebufferTextureMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) load(userptr, "glFramebufferTextureMultiviewOVR"); +} +static void glad_gl_load_GL_PGI_misc_hints( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_PGI_misc_hints) return; + glad_glHintPGI = (PFNGLHINTPGIPROC) load(userptr, "glHintPGI"); +} +static void glad_gl_load_GL_SGIS_detail_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_detail_texture) return; + glad_glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC) load(userptr, "glDetailTexFuncSGIS"); + glad_glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC) load(userptr, "glGetDetailTexFuncSGIS"); +} +static void glad_gl_load_GL_SGIS_fog_function( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_fog_function) return; + glad_glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC) load(userptr, "glFogFuncSGIS"); + glad_glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC) load(userptr, "glGetFogFuncSGIS"); +} +static void glad_gl_load_GL_SGIS_multisample( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_multisample) return; + glad_glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC) load(userptr, "glSampleMaskSGIS"); + glad_glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC) load(userptr, "glSamplePatternSGIS"); +} +static void glad_gl_load_GL_SGIS_pixel_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_pixel_texture) return; + glad_glGetPixelTexGenParameterfvSGIS = (PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) load(userptr, "glGetPixelTexGenParameterfvSGIS"); + glad_glGetPixelTexGenParameterivSGIS = (PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) load(userptr, "glGetPixelTexGenParameterivSGIS"); + glad_glPixelTexGenParameterfSGIS = (PFNGLPIXELTEXGENPARAMETERFSGISPROC) load(userptr, "glPixelTexGenParameterfSGIS"); + glad_glPixelTexGenParameterfvSGIS = (PFNGLPIXELTEXGENPARAMETERFVSGISPROC) load(userptr, "glPixelTexGenParameterfvSGIS"); + glad_glPixelTexGenParameteriSGIS = (PFNGLPIXELTEXGENPARAMETERISGISPROC) load(userptr, "glPixelTexGenParameteriSGIS"); + glad_glPixelTexGenParameterivSGIS = (PFNGLPIXELTEXGENPARAMETERIVSGISPROC) load(userptr, "glPixelTexGenParameterivSGIS"); +} +static void glad_gl_load_GL_SGIS_point_parameters( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_point_parameters) return; + glad_glPointParameterfSGIS = (PFNGLPOINTPARAMETERFSGISPROC) load(userptr, "glPointParameterfSGIS"); + glad_glPointParameterfvSGIS = (PFNGLPOINTPARAMETERFVSGISPROC) load(userptr, "glPointParameterfvSGIS"); +} +static void glad_gl_load_GL_SGIS_sharpen_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_sharpen_texture) return; + glad_glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC) load(userptr, "glGetSharpenTexFuncSGIS"); + glad_glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC) load(userptr, "glSharpenTexFuncSGIS"); +} +static void glad_gl_load_GL_SGIS_texture4D( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_texture4D) return; + glad_glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC) load(userptr, "glTexImage4DSGIS"); + glad_glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC) load(userptr, "glTexSubImage4DSGIS"); +} +static void glad_gl_load_GL_SGIS_texture_color_mask( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_texture_color_mask) return; + glad_glTextureColorMaskSGIS = (PFNGLTEXTURECOLORMASKSGISPROC) load(userptr, "glTextureColorMaskSGIS"); +} +static void glad_gl_load_GL_SGIS_texture_filter4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIS_texture_filter4) return; + glad_glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC) load(userptr, "glGetTexFilterFuncSGIS"); + glad_glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC) load(userptr, "glTexFilterFuncSGIS"); +} +static void glad_gl_load_GL_SGIX_async( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_async) return; + glad_glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC) load(userptr, "glAsyncMarkerSGIX"); + glad_glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC) load(userptr, "glDeleteAsyncMarkersSGIX"); + glad_glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC) load(userptr, "glFinishAsyncSGIX"); + glad_glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC) load(userptr, "glGenAsyncMarkersSGIX"); + glad_glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC) load(userptr, "glIsAsyncMarkerSGIX"); + glad_glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC) load(userptr, "glPollAsyncSGIX"); +} +static void glad_gl_load_GL_SGIX_flush_raster( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_flush_raster) return; + glad_glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC) load(userptr, "glFlushRasterSGIX"); +} +static void glad_gl_load_GL_SGIX_fragment_lighting( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_fragment_lighting) return; + glad_glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC) load(userptr, "glFragmentColorMaterialSGIX"); + glad_glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC) load(userptr, "glFragmentLightModelfSGIX"); + glad_glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) load(userptr, "glFragmentLightModelfvSGIX"); + glad_glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC) load(userptr, "glFragmentLightModeliSGIX"); + glad_glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) load(userptr, "glFragmentLightModelivSGIX"); + glad_glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC) load(userptr, "glFragmentLightfSGIX"); + glad_glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC) load(userptr, "glFragmentLightfvSGIX"); + glad_glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC) load(userptr, "glFragmentLightiSGIX"); + glad_glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC) load(userptr, "glFragmentLightivSGIX"); + glad_glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC) load(userptr, "glFragmentMaterialfSGIX"); + glad_glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC) load(userptr, "glFragmentMaterialfvSGIX"); + glad_glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC) load(userptr, "glFragmentMaterialiSGIX"); + glad_glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC) load(userptr, "glFragmentMaterialivSGIX"); + glad_glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC) load(userptr, "glGetFragmentLightfvSGIX"); + glad_glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC) load(userptr, "glGetFragmentLightivSGIX"); + glad_glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC) load(userptr, "glGetFragmentMaterialfvSGIX"); + glad_glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC) load(userptr, "glGetFragmentMaterialivSGIX"); + glad_glLightEnviSGIX = (PFNGLLIGHTENVISGIXPROC) load(userptr, "glLightEnviSGIX"); +} +static void glad_gl_load_GL_SGIX_framezoom( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_framezoom) return; + glad_glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC) load(userptr, "glFrameZoomSGIX"); +} +static void glad_gl_load_GL_SGIX_igloo_interface( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_igloo_interface) return; + glad_glIglooInterfaceSGIX = (PFNGLIGLOOINTERFACESGIXPROC) load(userptr, "glIglooInterfaceSGIX"); +} +static void glad_gl_load_GL_SGIX_instruments( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_instruments) return; + glad_glGetInstrumentsSGIX = (PFNGLGETINSTRUMENTSSGIXPROC) load(userptr, "glGetInstrumentsSGIX"); + glad_glInstrumentsBufferSGIX = (PFNGLINSTRUMENTSBUFFERSGIXPROC) load(userptr, "glInstrumentsBufferSGIX"); + glad_glPollInstrumentsSGIX = (PFNGLPOLLINSTRUMENTSSGIXPROC) load(userptr, "glPollInstrumentsSGIX"); + glad_glReadInstrumentsSGIX = (PFNGLREADINSTRUMENTSSGIXPROC) load(userptr, "glReadInstrumentsSGIX"); + glad_glStartInstrumentsSGIX = (PFNGLSTARTINSTRUMENTSSGIXPROC) load(userptr, "glStartInstrumentsSGIX"); + glad_glStopInstrumentsSGIX = (PFNGLSTOPINSTRUMENTSSGIXPROC) load(userptr, "glStopInstrumentsSGIX"); +} +static void glad_gl_load_GL_SGIX_list_priority( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_list_priority) return; + glad_glGetListParameterfvSGIX = (PFNGLGETLISTPARAMETERFVSGIXPROC) load(userptr, "glGetListParameterfvSGIX"); + glad_glGetListParameterivSGIX = (PFNGLGETLISTPARAMETERIVSGIXPROC) load(userptr, "glGetListParameterivSGIX"); + glad_glListParameterfSGIX = (PFNGLLISTPARAMETERFSGIXPROC) load(userptr, "glListParameterfSGIX"); + glad_glListParameterfvSGIX = (PFNGLLISTPARAMETERFVSGIXPROC) load(userptr, "glListParameterfvSGIX"); + glad_glListParameteriSGIX = (PFNGLLISTPARAMETERISGIXPROC) load(userptr, "glListParameteriSGIX"); + glad_glListParameterivSGIX = (PFNGLLISTPARAMETERIVSGIXPROC) load(userptr, "glListParameterivSGIX"); +} +static void glad_gl_load_GL_SGIX_pixel_texture( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_pixel_texture) return; + glad_glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC) load(userptr, "glPixelTexGenSGIX"); +} +static void glad_gl_load_GL_SGIX_polynomial_ffd( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_polynomial_ffd) return; + glad_glDeformSGIX = (PFNGLDEFORMSGIXPROC) load(userptr, "glDeformSGIX"); + glad_glDeformationMap3dSGIX = (PFNGLDEFORMATIONMAP3DSGIXPROC) load(userptr, "glDeformationMap3dSGIX"); + glad_glDeformationMap3fSGIX = (PFNGLDEFORMATIONMAP3FSGIXPROC) load(userptr, "glDeformationMap3fSGIX"); + glad_glLoadIdentityDeformationMapSGIX = (PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) load(userptr, "glLoadIdentityDeformationMapSGIX"); +} +static void glad_gl_load_GL_SGIX_reference_plane( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_reference_plane) return; + glad_glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC) load(userptr, "glReferencePlaneSGIX"); +} +static void glad_gl_load_GL_SGIX_sprite( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_sprite) return; + glad_glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC) load(userptr, "glSpriteParameterfSGIX"); + glad_glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC) load(userptr, "glSpriteParameterfvSGIX"); + glad_glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC) load(userptr, "glSpriteParameteriSGIX"); + glad_glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC) load(userptr, "glSpriteParameterivSGIX"); +} +static void glad_gl_load_GL_SGIX_tag_sample_buffer( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGIX_tag_sample_buffer) return; + glad_glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC) load(userptr, "glTagSampleBufferSGIX"); +} +static void glad_gl_load_GL_SGI_color_table( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SGI_color_table) return; + glad_glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC) load(userptr, "glColorTableParameterfvSGI"); + glad_glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC) load(userptr, "glColorTableParameterivSGI"); + glad_glColorTableSGI = (PFNGLCOLORTABLESGIPROC) load(userptr, "glColorTableSGI"); + glad_glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC) load(userptr, "glCopyColorTableSGI"); + glad_glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) load(userptr, "glGetColorTableParameterfvSGI"); + glad_glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) load(userptr, "glGetColorTableParameterivSGI"); + glad_glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC) load(userptr, "glGetColorTableSGI"); +} +static void glad_gl_load_GL_SUNX_constant_data( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SUNX_constant_data) return; + glad_glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC) load(userptr, "glFinishTextureSUNX"); +} +static void glad_gl_load_GL_SUN_global_alpha( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SUN_global_alpha) return; + glad_glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC) load(userptr, "glGlobalAlphaFactorbSUN"); + glad_glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC) load(userptr, "glGlobalAlphaFactordSUN"); + glad_glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC) load(userptr, "glGlobalAlphaFactorfSUN"); + glad_glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC) load(userptr, "glGlobalAlphaFactoriSUN"); + glad_glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC) load(userptr, "glGlobalAlphaFactorsSUN"); + glad_glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC) load(userptr, "glGlobalAlphaFactorubSUN"); + glad_glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC) load(userptr, "glGlobalAlphaFactoruiSUN"); + glad_glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC) load(userptr, "glGlobalAlphaFactorusSUN"); +} +static void glad_gl_load_GL_SUN_mesh_array( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SUN_mesh_array) return; + glad_glDrawMeshArraysSUN = (PFNGLDRAWMESHARRAYSSUNPROC) load(userptr, "glDrawMeshArraysSUN"); +} +static void glad_gl_load_GL_SUN_triangle_list( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SUN_triangle_list) return; + glad_glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC) load(userptr, "glReplacementCodePointerSUN"); + glad_glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC) load(userptr, "glReplacementCodeubSUN"); + glad_glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC) load(userptr, "glReplacementCodeubvSUN"); + glad_glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC) load(userptr, "glReplacementCodeuiSUN"); + glad_glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC) load(userptr, "glReplacementCodeuivSUN"); + glad_glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC) load(userptr, "glReplacementCodeusSUN"); + glad_glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC) load(userptr, "glReplacementCodeusvSUN"); +} +static void glad_gl_load_GL_SUN_vertex( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_SUN_vertex) return; + glad_glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC) load(userptr, "glColor3fVertex3fSUN"); + glad_glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC) load(userptr, "glColor3fVertex3fvSUN"); + glad_glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) load(userptr, "glColor4fNormal3fVertex3fSUN"); + glad_glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) load(userptr, "glColor4fNormal3fVertex3fvSUN"); + glad_glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC) load(userptr, "glColor4ubVertex2fSUN"); + glad_glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC) load(userptr, "glColor4ubVertex2fvSUN"); + glad_glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC) load(userptr, "glColor4ubVertex3fSUN"); + glad_glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC) load(userptr, "glColor4ubVertex3fvSUN"); + glad_glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC) load(userptr, "glNormal3fVertex3fSUN"); + glad_glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC) load(userptr, "glNormal3fVertex3fvSUN"); + glad_glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiColor3fVertex3fSUN"); + glad_glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiColor3fVertex3fvSUN"); + glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiColor4fNormal3fVertex3fSUN"); + glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiColor4fNormal3fVertex3fvSUN"); + glad_glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiColor4ubVertex3fSUN"); + glad_glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiColor4ubVertex3fvSUN"); + glad_glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiNormal3fVertex3fSUN"); + glad_glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiNormal3fVertex3fvSUN"); + glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN"); + glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN"); + glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN"); + glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN"); + glad_glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiTexCoord2fVertex3fSUN"); + glad_glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiTexCoord2fVertex3fvSUN"); + glad_glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) load(userptr, "glReplacementCodeuiVertex3fSUN"); + glad_glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) load(userptr, "glReplacementCodeuiVertex3fvSUN"); + glad_glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) load(userptr, "glTexCoord2fColor3fVertex3fSUN"); + glad_glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) load(userptr, "glTexCoord2fColor3fVertex3fvSUN"); + glad_glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) load(userptr, "glTexCoord2fColor4fNormal3fVertex3fSUN"); + glad_glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) load(userptr, "glTexCoord2fColor4fNormal3fVertex3fvSUN"); + glad_glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) load(userptr, "glTexCoord2fColor4ubVertex3fSUN"); + glad_glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) load(userptr, "glTexCoord2fColor4ubVertex3fvSUN"); + glad_glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) load(userptr, "glTexCoord2fNormal3fVertex3fSUN"); + glad_glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) load(userptr, "glTexCoord2fNormal3fVertex3fvSUN"); + glad_glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC) load(userptr, "glTexCoord2fVertex3fSUN"); + glad_glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC) load(userptr, "glTexCoord2fVertex3fvSUN"); + glad_glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) load(userptr, "glTexCoord4fColor4fNormal3fVertex4fSUN"); + glad_glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) load(userptr, "glTexCoord4fColor4fNormal3fVertex4fvSUN"); + glad_glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC) load(userptr, "glTexCoord4fVertex4fSUN"); + glad_glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC) load(userptr, "glTexCoord4fVertex4fvSUN"); } -static -void close_gl(void) { - if(libGL != NULL) { - dlclose(libGL); - libGL = NULL; - } -} -#endif -static -void* get_proc(const char *namez) { - void* result = NULL; - if(libGL == NULL) return NULL; - -#ifndef __APPLE__ - if(gladGetProcAddressPtr != NULL) { - result = gladGetProcAddressPtr(namez); - } -#endif - if(result == NULL) { -#if defined(_WIN32) || defined(__CYGWIN__) - result = (void*)GetProcAddress((HMODULE) libGL, namez); -#else - result = dlsym(libGL, namez); -#endif - } - - return result; -} - -int gladLoadGL(void) { - int status = 0; - - if(open_gl()) { - status = gladLoadGLLoader(&get_proc); - close_gl(); - } - - return status; -} - -struct gladGLversionStruct GLVersion; #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) -#define _GLAD_IS_SOME_NEW_VERSION 1 +#define GLAD_GL_IS_SOME_NEW_VERSION 1 +#else +#define GLAD_GL_IS_SOME_NEW_VERSION 0 #endif -static int max_loaded_major; -static int max_loaded_minor; - -static const char *exts = NULL; -static int num_exts_i = 0; -static char **exts_i = NULL; - -static int get_exts(void) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { +static int glad_gl_get_extensions( int version, const char **out_exts, unsigned int *out_num_exts_i, char ***out_exts_i) { +#if GLAD_GL_IS_SOME_NEW_VERSION + if(GLAD_VERSION_MAJOR(version) < 3) { +#else + GLAD_UNUSED(version); + GLAD_UNUSED(out_num_exts_i); + GLAD_UNUSED(out_exts_i); #endif - exts = (const char *)glGetString(GL_EXTENSIONS); -#ifdef _GLAD_IS_SOME_NEW_VERSION - } else { - unsigned int index; - - num_exts_i = 0; - glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); - if (num_exts_i > 0) { - exts_i = (char **)realloc((void *)exts_i, (size_t)num_exts_i * (sizeof *exts_i)); + if (glad_glGetString == NULL) { + return 0; + } + *out_exts = (const char *)glad_glGetString(GL_EXTENSIONS); +#if GLAD_GL_IS_SOME_NEW_VERSION + } else { + unsigned int index = 0; + unsigned int num_exts_i = 0; + char **exts_i = NULL; + if (glad_glGetStringi == NULL || glad_glGetIntegerv == NULL) { + return 0; + } + glad_glGetIntegerv(GL_NUM_EXTENSIONS, (int*) &num_exts_i); + if (num_exts_i > 0) { + exts_i = (char **) malloc(num_exts_i * (sizeof *exts_i)); } - if (exts_i == NULL) { return 0; } + for(index = 0; index < num_exts_i; index++) { + const char *gl_str_tmp = (const char*) glad_glGetStringi(GL_EXTENSIONS, index); + size_t len = strlen(gl_str_tmp) + 1; - for(index = 0; index < (unsigned)num_exts_i; index++) { - const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); - size_t len = strlen(gl_str_tmp); - - char *local_str = (char*)malloc((len+1) * sizeof(char)); + char *local_str = (char*) malloc(len * sizeof(char)); if(local_str != NULL) { - memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); + memcpy(local_str, gl_str_tmp, len * sizeof(char)); } + exts_i[index] = local_str; } + + *out_num_exts_i = num_exts_i; + *out_exts_i = exts_i; } #endif return 1; } - -static void free_exts(void) { +static void glad_gl_free_extensions(char **exts_i, unsigned int num_exts_i) { if (exts_i != NULL) { - int index; + unsigned int index; for(index = 0; index < num_exts_i; index++) { - free((char *)exts_i[index]); + free((void *) (exts_i[index])); } free((void *)exts_i); exts_i = NULL; } } - -static int has_ext(const char *ext) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { -#endif +static int glad_gl_has_extension(int version, const char *exts, unsigned int num_exts_i, char **exts_i, const char *ext) { + if(GLAD_VERSION_MAJOR(version) < 3 || !GLAD_GL_IS_SOME_NEW_VERSION) { const char *extensions; const char *loc; const char *terminator; @@ -1005,13 +7173,11 @@ static int has_ext(const char *ext) { if(extensions == NULL || ext == NULL) { return 0; } - while(1) { loc = strstr(extensions, ext); if(loc == NULL) { return 0; } - terminator = loc + strlen(ext); if((loc == extensions || *(loc - 1) == ' ') && (*terminator == ' ' || *terminator == '\0')) { @@ -1019,8376 +7185,665 @@ static int has_ext(const char *ext) { } extensions = terminator; } -#ifdef _GLAD_IS_SOME_NEW_VERSION } else { - int index; - if(exts_i == NULL) return 0; + unsigned int index; for(index = 0; index < num_exts_i; index++) { const char *e = exts_i[index]; - - if(exts_i[index] != NULL && strcmp(e, ext) == 0) { + if(strcmp(e, ext) == 0) { return 1; } } } -#endif - return 0; } -int GLAD_GL_VERSION_1_0; -int GLAD_GL_VERSION_1_1; -int GLAD_GL_VERSION_1_2; -int GLAD_GL_VERSION_1_3; -int GLAD_GL_VERSION_1_4; -int GLAD_GL_VERSION_1_5; -int GLAD_GL_VERSION_2_0; -int GLAD_GL_VERSION_2_1; -int GLAD_GL_VERSION_3_0; -int GLAD_GL_VERSION_3_1; -int GLAD_GL_VERSION_3_2; -int GLAD_GL_VERSION_3_3; -int GLAD_GL_VERSION_4_0; -int GLAD_GL_VERSION_4_1; -int GLAD_GL_VERSION_4_2; -int GLAD_GL_VERSION_4_3; -int GLAD_GL_VERSION_4_4; -int GLAD_GL_VERSION_4_5; -int GLAD_GL_VERSION_4_6; -int GLAD_GL_ES_VERSION_2_0; -int GLAD_GL_ES_VERSION_3_0; -int GLAD_GL_ES_VERSION_3_1; -int GLAD_GL_ES_VERSION_3_2; -PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; -PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; -PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer; -PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; -PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample; -PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv; -PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; -PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; -PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; -PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; -PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v; -PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; -PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers; -PFNGLBINDSAMPLERPROC glad_glBindSampler; -PFNGLLINEWIDTHPROC glad_glLineWidth; -PFNGLCOLORP3UIVPROC glad_glColorP3uiv; -PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; -PFNGLCOMPILESHADERPROC glad_glCompileShader; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; -PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D; -PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage; -PFNGLGETNMAPFVPROC glad_glGetnMapfv; -PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange; -PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage; -PFNGLDEPTHRANGEFPROC glad_glDepthRangef; -PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount; -PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; -PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; -PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv; -PFNGLVERTEXP4UIPROC glad_glVertexP4ui; -PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance; -PFNGLENABLEIPROC glad_glEnablei; -PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; -PFNGLCREATESHADERPROC glad_glCreateShader; -PFNGLISBUFFERPROC glad_glIsBuffer; -PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; -PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv; -PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; -PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; -PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; -PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv; -PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi; -PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv; -PFNGLHINTPROC glad_glHint; -PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; -PFNGLSAMPLEMASKIPROC glad_glSampleMaski; -PFNGLVERTEXP2UIPROC glad_glVertexP2ui; -PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; -PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; -PFNGLPOINTSIZEPROC glad_glPointSize; -PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit; -PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; -PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; -PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; -PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; -PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; -PFNGLWAITSYNCPROC glad_glWaitSync; -PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; -PFNGLUNIFORM3IPROC glad_glUniform3i; -PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; -PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui; -PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; -PFNGLGETNMAPIVPROC glad_glGetnMapiv; -PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier; -PFNGLUNIFORM3DPROC glad_glUniform3d; -PFNGLUNIFORM3FPROC glad_glUniform3f; -PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; -PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; -PFNGLCOLORMASKIPROC glad_glColorMaski; -PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; -PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; -PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; -PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; -PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; -PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv; -PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData; -PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv; -PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; -PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; -PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d; -PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture; -PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv; -PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v; -PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; -PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram; -PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; -PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv; -PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv; -PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture; -PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv; -PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData; -PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; -PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; -PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv; -PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv; -PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; -PFNGLDRAWARRAYSPROC glad_glDrawArrays; -PFNGLUNIFORM1UIPROC glad_glUniform1ui; -PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv; -PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; -PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; -PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; -PFNGLCLEARPROC glad_glClear; -PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri; -PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; -PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier; -PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus; -PFNGLISENABLEDPROC glad_glIsEnabled; -PFNGLSTENCILOPPROC glad_glStencilOp; -PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; -PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; -PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange; -PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; -PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv; -PFNGLTEXIMAGE1DPROC glad_glTexImage1D; -PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat; -PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer; -PFNGLGETTEXIMAGEPROC glad_glGetTexImage; -PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; -PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; -PFNGLCREATETEXTURESPROC glad_glCreateTextures; -PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase; -PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage; -PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; -PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; -PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; -PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers; -PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv; -PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; -PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; -PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv; -PFNGLGETQUERYIVPROC glad_glGetQueryiv; -PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv; -PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer; -PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat; -PFNGLCREATEQUERIESPROC glad_glCreateQueries; -PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; -PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding; -PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv; -PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; -PFNGLISSHADERPROC glad_glIsShader; -PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; -PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed; -PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; -PFNGLENABLEPROC glad_glEnable; -PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; -PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding; -PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D; -PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion; -PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; -PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; -PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; -PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv; -PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv; -PFNGLUNIFORM2DVPROC glad_glUniform2dv; -PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer; -PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; -PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; -PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv; -PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange; -PFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv; -PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui; -PFNGLGETPOINTERVPROC glad_glGetPointerv; -PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; -PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; -PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; -PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv; -PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; -PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor; -PFNGLDRAWBUFFERPROC glad_glDrawBuffer; -PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed; -PFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv; -PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; -PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; -PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i; -PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; -PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d; -PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f; -PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv; -PFNGLFLUSHPROC glad_glFlush; -PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; -PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv; -PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; -PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage; -PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv; -PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; -PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp; -PFNGLFENCESYNCPROC glad_glFenceSync; -PFNGLCOLORP3UIPROC glad_glColorP3ui; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance; -PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; -PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; -PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline; -PFNGLGETNMINMAXPROC glad_glGetnMinmax; -PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; -PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; -PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample; -PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; -PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib; -PFNGLGENSAMPLERSPROC glad_glGenSamplers; -PFNGLCLAMPCOLORPROC glad_glClampColor; -PFNGLUNIFORM4IVPROC glad_glUniform4iv; -PFNGLCLEARSTENCILPROC glad_glClearStencil; -PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; -PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv; -PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced; -PFNGLSPECIALIZESHADERPROC glad_glSpecializeShader; -PFNGLGENTEXTURESPROC glad_glGenTextures; -PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample; -PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback; -PFNGLUNIFORM1DVPROC glad_glUniform1dv; -PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; -PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v; -PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; -PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv; -PFNGLISSYNCPROC glad_glIsSync; -PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; -PFNGLUNIFORM2IPROC glad_glUniform2i; -PFNGLUNIFORM2FPROC glad_glUniform2f; -PFNGLUNIFORM2DPROC glad_glUniform2d; -PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; -PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; -PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; -PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; -PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv; -PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; -PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri; -PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; -PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv; -PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv; -PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv; -PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d; -PFNGLPRIMITIVEBOUNDINGBOXPROC glad_glPrimitiveBoundingBox; -PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv; -PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute; -PFNGLGENQUERIESPROC glad_glGenQueries; -PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; -PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; -PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; -PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; -PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage; -PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; -PFNGLISENABLEDIPROC glad_glIsEnabledi; -PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange; -PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; -PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; -PFNGLUNIFORM2IVPROC glad_glUniform2iv; -PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; -PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; -PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv; -PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D; -PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; -PFNGLGETSHADERIVPROC glad_glGetShaderiv; -PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv; -PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; -PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer; -PFNGLBINDTEXTURESPROC glad_glBindTextures; -PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; -PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage; -PFNGLSCISSORARRAYVPROC glad_glScissorArrayv; -PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -PFNGLGETDOUBLEVPROC glad_glGetDoublev; -PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; -PFNGLUNIFORM4DVPROC glad_glUniform4dv; -PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv; -PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; -PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData; -PFNGLGETNCOLORTABLEPROC glad_glGetnColorTable; -PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D; -PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; -PFNGLUNIFORM3FVPROC glad_glUniform3fv; -PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect; -PFNGLDEPTHRANGEPROC glad_glDepthRange; -PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer; -PFNGLMAPBUFFERPROC glad_glMapBuffer; -PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage; -PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; -PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; -PFNGLDELETESYNCPROC glad_glDeleteSync; -PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; -PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v; -PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv; -PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; -PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv; -PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; -PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; -PFNGLUNIFORM3IVPROC glad_glUniform3iv; -PFNGLPOLYGONMODEPROC glad_glPolygonMode; -PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; -PFNGLGETNHISTOGRAMPROC glad_glGetnHistogram; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; -PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer; -PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv; -PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary; -PFNGLUSEPROGRAMPROC glad_glUseProgram; -PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; -PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; -PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; -PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap; -PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; -PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData; -PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D; -PFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter; -PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; -PFNGLFINISHPROC glad_glFinish; -PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; -PFNGLDELETESHADERPROC glad_glDeleteShader; -PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v; -PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D; -PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; -PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; -PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex; -PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv; -PFNGLVIEWPORTPROC glad_glViewport; -PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; -PFNGLUNIFORM2UIPROC glad_glUniform2ui; -PFNGLGETNMAPDVPROC glad_glGetnMapdv; -PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; -PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; -PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage; -PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; -PFNGLCLEARDEPTHPROC glad_glClearDepth; -PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; -PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; -PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv; -PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; -PFNGLGETNTEXIMAGEPROC glad_glGetnTexImage; -PFNGLTEXBUFFERPROC glad_glTexBuffer; -PFNGLPIXELSTOREIPROC glad_glPixelStorei; -PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; -PFNGLPIXELSTOREFPROC glad_glPixelStoref; -PFNGLCREATEBUFFERSPROC glad_glCreateBuffers; -PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; -PFNGLCLIPCONTROLPROC glad_glClipControl; -PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; -PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines; -PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; -PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D; -PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; -PFNGLLINKPROGRAMPROC glad_glLinkProgram; -PFNGLBINDTEXTUREPROC glad_glBindTexture; -PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect; -PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; -PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog; -PFNGLGETSTRINGPROC glad_glGetString; -PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; -PFNGLDETACHSHADERPROC glad_glDetachShader; -PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i; -PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv; -PFNGLENDQUERYPROC glad_glEndQuery; -PFNGLNORMALP3UIPROC glad_glNormalP3ui; -PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri; -PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName; -PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv; -PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; -PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; -PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation; -PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv; -PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; -PFNGLDELETEQUERIESPROC glad_glDeleteQueries; -PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; -PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; -PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; -PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv; -PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase; -PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv; -PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays; -PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv; -PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; -PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; -PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; -PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData; -PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; -PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D; -PFNGLUNIFORM1FPROC glad_glUniform1f; -PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; -PFNGLUNIFORM1DPROC glad_glUniform1d; -PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; -PFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage; -PFNGLUNIFORM1IPROC glad_glUniform1i; -PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; -PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -PFNGLDISABLEPROC glad_glDisable; -PFNGLLOGICOPPROC glad_glLogicOp; -PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv; -PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount; -PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv; -PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv; -PFNGLUNIFORM4UIPROC glad_glUniform4ui; -PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D; -PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; -PFNGLCULLFACEPROC glad_glCullFace; -PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i; -PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f; -PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf; -PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d; -PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv; -PFNGLGETSTRINGIPROC glad_glGetStringi; -PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D; -PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream; -PFNGLATTACHSHADERPROC glad_glAttachShader; -PFNGLQUERYCOUNTERPROC glad_glQueryCounter; -PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; -PFNGLSHADERBINARYPROC glad_glShaderBinary; -PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer; -PFNGLDRAWELEMENTSPROC glad_glDrawElements; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample; -PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; -PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData; -PFNGLUNIFORM1IVPROC glad_glUniform1iv; -PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv; -PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; -PFNGLREADBUFFERPROC glad_glReadBuffer; -PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; -PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; -PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; -PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D; -PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv; -PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; -PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; -PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; -PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; -PFNGLBLENDCOLORPROC glad_glBlendColor; -PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; -PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus; -PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; -PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv; -PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv; -PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; -PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; -PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; -PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv; -PFNGLISPROGRAMPROC glad_glIsProgram; -PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; -PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D; -PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv; -PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; -PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv; -PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; -PFNGLUNIFORM4IPROC glad_glUniform4i; -PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; -PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline; -PFNGLREADPIXELSPROC glad_glReadPixels; -PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; -PFNGLUNIFORM4FPROC glad_glUniform4f; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; -PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines; -PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; -PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer; -PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; -PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv; -PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced; -PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName; -PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d; -PFNGLSTENCILFUNCPROC glad_glStencilFunc; -PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData; -PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; -PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; -PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv; -PFNGLCOLORP4UIPROC glad_glColorP4ui; -PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages; -PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f; -PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d; -PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; -PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv; -PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; -PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer; -PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv; -PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; -PFNGLOBJECTLABELPROC glad_glObjectLabel; -PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; -PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; -PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv; -PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv; -PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv; -PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; -PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; -PFNGLGENBUFFERSPROC glad_glGenBuffers; -PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex; -PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; -PFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple; -PFNGLBLENDFUNCPROC glad_glBlendFunc; -PFNGLCREATEPROGRAMPROC glad_glCreateProgram; -PFNGLTEXIMAGE3DPROC glad_glTexImage3D; -PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; -PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv; -PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData; -PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; -PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange; -PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage; -PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures; -PFNGLGETINTEGER64VPROC glad_glGetInteger64v; -PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline; -PFNGLSCISSORPROC glad_glScissor; -PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; -PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer; -PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; -PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; -PFNGLCLEARCOLORPROC glad_glClearColor; -PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; -PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; -PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; -PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv; -PFNGLCOLORP4UIVPROC glad_glColorP4uiv; -PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv; -PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv; -PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; -PFNGLUNIFORM3UIPROC glad_glUniform3ui; -PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv; -PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; -PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -PFNGLUNIFORM2FVPROC glad_glUniform2fv; -PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName; -PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex; -PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; -PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv; -PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv; -PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect; -PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData; -PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; -PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; -PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D; -PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv; -PFNGLGETUNIFORMDVPROC glad_glGetUniformdv; -PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v; -PFNGLCLEARDEPTHFPROC glad_glClearDepthf; -PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers; -PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; -PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; -PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; -PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; -PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv; -PFNGLDEPTHFUNCPROC glad_glDepthFunc; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -PFNGLPROGRAMBINARYPROC glad_glProgramBinary; -PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; -PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; -PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; -PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; -PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; -PFNGLGETFLOATI_VPROC glad_glGetFloati_v; -PFNGLCOLORMASKPROC glad_glColorMask; -PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer; -PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; -PFNGLBLENDEQUATIONPROC glad_glBlendEquation; -PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; -PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv; -PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat; -PFNGLREADNPIXELSPROC glad_glReadnPixels; -PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers; -PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; -PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; -PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv; -PFNGLUNIFORM4FVPROC glad_glUniform4fv; -PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; -PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; -PFNGLCREATESAMPLERSPROC glad_glCreateSamplers; -PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv; -PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData; -PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; -PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; -PFNGLISSAMPLERPROC glad_glIsSampler; -PFNGLVERTEXP3UIPROC glad_glVertexP3ui; -PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; -PFNGLBINDSAMPLERSPROC glad_glBindSamplers; -PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; -PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; -PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; -PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; -PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; -PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; -PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; -PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; -PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv; -PFNGLBLENDFUNCIPROC glad_glBlendFunci; -PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; -PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; -PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; -PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; -PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; -PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; -PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; -PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; -PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv; -PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d; -PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; -PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; -PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; -PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; -PFNGLTEXTUREVIEWPROC glad_glTextureView; -PFNGLDISABLEIPROC glad_glDisablei; -PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv; -PFNGLSHADERSOURCEPROC glad_glShaderSource; -PFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter; -PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; -PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; -PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; -PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; -PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers; -PFNGLGETSYNCIVPROC glad_glGetSynciv; -PFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv; -PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; -PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv; -PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i; -PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v; -PFNGLBEGINQUERYPROC glad_glBeginQuery; -PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; -PFNGLBINDBUFFERPROC glad_glBindBuffer; -PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample; -PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d; -PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f; -PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; -PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; -PFNGLBUFFERDATAPROC glad_glBufferData; -PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; -PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; -PFNGLGETERRORPROC glad_glGetError; -PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks; -PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; -PFNGLGETFLOATVPROC glad_glGetFloatv; -PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; -PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; -PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; -PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; -PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; -PFNGLUNIFORM4DPROC glad_glUniform4d; -PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; -PFNGLGETINTEGERVPROC glad_glGetIntegerv; -PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv; -PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; -PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv; -PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; -PFNGLISQUERYPROC glad_glIsQuery; -PFNGLBLENDBARRIERPROC glad_glBlendBarrier; -PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui; -PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui; -PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; -PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -PFNGLSTENCILMASKPROC glad_glStencilMask; -PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; -PFNGLISTEXTUREPROC glad_glIsTexture; -PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData; -PFNGLUNIFORM1FVPROC glad_glUniform1fv; -PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; -PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData; -PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv; -PFNGLUNIFORM3DVPROC glad_glUniform3dv; -PFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv; -PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv; -PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation; -PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv; -PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; -PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage; -PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; -PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; -PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; -PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; -PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; -PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; -PFNGLDEPTHMASKPROC glad_glDepthMask; -PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; -PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; -PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv; -PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; -PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; -PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; -PFNGLFRONTFACEPROC glad_glFrontFace; -PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange; -PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer; -PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri; -PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance; -PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines; -int GLAD_GL_SGIX_pixel_tiles; -int GLAD_GL_EXT_post_depth_coverage; -int GLAD_GL_NV_non_square_matrices; -int GLAD_GL_APPLE_element_array; -int GLAD_GL_EXT_EGL_image_array; -int GLAD_GL_AMD_multi_draw_indirect; -int GLAD_GL_QCOM_tiled_rendering; -int GLAD_GL_EXT_blend_subtract; -int GLAD_GL_SGIX_tag_sample_buffer; -int GLAD_GL_OES_standard_derivatives; -int GLAD_GL_NV_point_sprite; -int GLAD_GL_IBM_texture_mirrored_repeat; -int GLAD_GL_NV_sRGB_formats; -int GLAD_GL_APPLE_transform_hint; -int GLAD_GL_ATI_separate_stencil; -int GLAD_GL_NV_shader_atomic_int64; -int GLAD_GL_EXT_semaphore_win32; -int GLAD_GL_OES_get_program_binary; -int GLAD_GL_NV_vertex_program2_option; -int GLAD_GL_EXT_sRGB; -int GLAD_GL_EXT_texture_buffer_object; -int GLAD_GL_OES_packed_depth_stencil; -int GLAD_GL_OES_geometry_shader; -int GLAD_GL_NV_read_depth_stencil; -int GLAD_GL_ARB_vertex_blend; -int GLAD_GL_OVR_multiview; -int GLAD_GL_QCOM_framebuffer_foveated; -int GLAD_GL_EXT_multisampled_render_to_texture; -int GLAD_GL_AMD_shader_gpu_shader_half_float_fetch; -int GLAD_GL_NV_vertex_program2; -int GLAD_GL_ARB_program_interface_query; -int GLAD_GL_EXT_misc_attribute; -int GLAD_GL_NV_multisample_coverage; -int GLAD_GL_EXT_robustness; -int GLAD_GL_ARB_shading_language_packing; -int GLAD_GL_EXT_texture_cube_map; -int GLAD_GL_OES_texture_half_float_linear; -int GLAD_GL_NV_viewport_array2; -int GLAD_GL_ARB_texture_stencil8; -int GLAD_GL_EXT_index_func; -int GLAD_GL_ANGLE_texture_usage; -int GLAD_GL_EXT_memory_object_fd; -int GLAD_GL_OES_compressed_paletted_texture; -int GLAD_GL_OES_vertex_array_object; -int GLAD_GL_MESA_shader_integer_functions; -int GLAD_GL_NV_shader_buffer_load; -int GLAD_GL_EXT_primitive_bounding_box; -int GLAD_GL_NV_texture_border_clamp; -int GLAD_GL_EXT_color_subtable; -int GLAD_GL_OES_vertex_half_float; -int GLAD_GL_SUNX_constant_data; -int GLAD_GL_EXT_texture_compression_s3tc; -int GLAD_GL_OES_fragment_precision_high; -int GLAD_GL_EXT_multi_draw_arrays; -int GLAD_GL_ARB_shader_atomic_counters; -int GLAD_GL_ARB_arrays_of_arrays; -int GLAD_GL_NV_conditional_render; -int GLAD_GL_OES_texture_storage_multisample_2d_array; -int GLAD_GL_EXT_texture_env_combine; -int GLAD_GL_NV_fog_distance; -int GLAD_GL_ANGLE_depth_texture; -int GLAD_GL_SGIX_async_histogram; -int GLAD_GL_NV_explicit_attrib_location; -int GLAD_GL_MESA_resize_buffers; -int GLAD_GL_EXT_shader_io_blocks; -int GLAD_GL_NV_light_max_exponent; -int GLAD_GL_NV_texture_env_combine4; -int GLAD_GL_ARB_spirv_extensions; -int GLAD_GL_ARB_texture_view; -int GLAD_GL_ARB_texture_env_combine; -int GLAD_GL_OES_geometry_point_size; -int GLAD_GL_ARB_map_buffer_range; -int GLAD_GL_EXT_convolution; -int GLAD_GL_OES_tessellation_shader; -int GLAD_GL_NV_compute_program5; -int GLAD_GL_NV_vertex_attrib_integer_64bit; -int GLAD_GL_EXT_paletted_texture; -int GLAD_GL_ARB_texture_buffer_object; -int GLAD_GL_ATI_pn_triangles; -int GLAD_GL_AMD_compressed_ATC_texture; -int GLAD_GL_SGIX_resample; -int GLAD_GL_SGIX_flush_raster; -int GLAD_GL_EXT_shader_implicit_conversions; -int GLAD_GL_EXT_light_texture; -int GLAD_GL_ARB_point_sprite; -int GLAD_GL_EXT_multi_draw_indirect; -int GLAD_GL_SUN_convolution_border_modes; -int GLAD_GL_EXT_semaphore_fd; -int GLAD_GL_NV_parameter_buffer_object2; -int GLAD_GL_ARB_half_float_pixel; -int GLAD_GL_EXT_color_buffer_float; -int GLAD_GL_NV_tessellation_program5; -int GLAD_GL_REND_screen_coordinates; -int GLAD_GL_IMG_program_binary; -int GLAD_GL_EXT_shared_texture_palette; -int GLAD_GL_ARM_mali_program_binary; -int GLAD_GL_EXT_packed_float; -int GLAD_GL_OML_subsample; -int GLAD_GL_SGIX_vertex_preclip; -int GLAD_GL_SGIX_texture_scale_bias; -int GLAD_GL_AMD_draw_buffers_blend; -int GLAD_GL_APPLE_texture_range; -int GLAD_GL_OES_compressed_ETC1_RGB8_texture; -int GLAD_GL_EXT_texture_array; -int GLAD_GL_NV_texture_barrier; -int GLAD_GL_OES_copy_image; -int GLAD_GL_QCOM_extended_get2; -int GLAD_GL_ARB_texture_query_levels; -int GLAD_GL_NV_texgen_emboss; -int GLAD_GL_EXT_texture_swizzle; -int GLAD_GL_ARB_texture_rg; -int GLAD_GL_ARB_vertex_type_2_10_10_10_rev; -int GLAD_GL_EXT_shadow_samplers; -int GLAD_GL_ARB_fragment_shader; -int GLAD_GL_3DFX_tbuffer; -int GLAD_GL_GREMEDY_frame_terminator; -int GLAD_GL_IBM_cull_vertex; -int GLAD_GL_EXT_separate_shader_objects; -int GLAD_GL_APPLE_texture_packed_float; -int GLAD_GL_NV_texture_multisample; -int GLAD_GL_ARB_shader_objects; -int GLAD_GL_ARB_framebuffer_object; -int GLAD_GL_OES_tessellation_point_size; -int GLAD_GL_EXT_sRGB_write_control; -int GLAD_GL_OES_draw_buffers_indexed; -int GLAD_GL_EXT_external_buffer; -int GLAD_GL_ATI_envmap_bumpmap; -int GLAD_GL_AMD_shader_explicit_vertex_parameter; -int GLAD_GL_ARB_robust_buffer_access_behavior; -int GLAD_GL_ARB_shader_stencil_export; -int GLAD_GL_OES_sample_variables; -int GLAD_GL_NV_texture_rectangle; -int GLAD_GL_ARB_enhanced_layouts; -int GLAD_GL_ARB_texture_rectangle; -int GLAD_GL_SGI_texture_color_table; -int GLAD_GL_NV_viewport_swizzle; -int GLAD_GL_ATI_map_object_buffer; -int GLAD_GL_QCOM_texture_foveated; -int GLAD_GL_ARB_robustness; -int GLAD_GL_NV_pixel_data_range; -int GLAD_GL_ANGLE_framebuffer_multisample; -int GLAD_GL_EXT_framebuffer_blit; -int GLAD_GL_QCOM_binning_control; -int GLAD_GL_ARB_gpu_shader_fp64; -int GLAD_GL_EXT_occlusion_query_boolean; -int GLAD_GL_NV_command_list; -int GLAD_GL_EXT_copy_image; -int GLAD_GL_SGIX_depth_texture; -int GLAD_GL_AMD_compressed_3DC_texture; -int GLAD_GL_AMD_framebuffer_sample_positions; -int GLAD_GL_GREMEDY_string_marker; -int GLAD_GL_ARB_texture_compression_bptc; -int GLAD_GL_EXT_subtexture; -int GLAD_GL_IMG_texture_compression_pvrtc2; -int GLAD_GL_EXT_pixel_transform_color_table; -int GLAD_GL_EXT_texture_compression_rgtc; -int GLAD_GL_ARB_shader_atomic_counter_ops; -int GLAD_GL_SGIX_depth_pass_instrument; -int GLAD_GL_EXT_gpu_program_parameters; -int GLAD_GL_NV_image_formats; -int GLAD_GL_NV_evaluators; -int GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent; -int GLAD_GL_SGIS_texture_filter4; -int GLAD_GL_AMD_performance_monitor; -int GLAD_GL_NV_geometry_shader4; -int GLAD_GL_EXT_stencil_clear_tag; -int GLAD_GL_NV_vertex_program1_1; -int GLAD_GL_NV_present_video; -int GLAD_GL_ARB_texture_compression_rgtc; -int GLAD_GL_EXT_YUV_target; -int GLAD_GL_HP_convolution_border_modes; -int GLAD_GL_EXT_multiview_draw_buffers; -int GLAD_GL_QCOM_extended_get; -int GLAD_GL_EXT_shader_integer_mix; -int GLAD_GL_SGIX_framezoom; -int GLAD_GL_ARB_stencil_texturing; -int GLAD_GL_EXT_texture_norm16; -int GLAD_GL_EXT_shader_non_constant_global_initializers; -int GLAD_GL_ARB_shader_clock; -int GLAD_GL_NV_shader_atomic_fp16_vector; -int GLAD_GL_OES_viewport_array; -int GLAD_GL_SGIX_fog_offset; -int GLAD_GL_ARB_draw_elements_base_vertex; -int GLAD_GL_EXT_tessellation_shader; -int GLAD_GL_INGR_interlace_read; -int GLAD_GL_NV_transform_feedback; -int GLAD_GL_NV_generate_mipmap_sRGB; -int GLAD_GL_EXT_geometry_point_size; -int GLAD_GL_OES_EGL_image_external_essl3; -int GLAD_GL_NV_fragment_program; -int GLAD_GL_AMD_stencil_operation_extended; -int GLAD_GL_EXT_texture_type_2_10_10_10_REV; -int GLAD_GL_EXT_discard_framebuffer; -int GLAD_GL_NV_read_depth; -int GLAD_GL_ARB_seamless_cubemap_per_texture; -int GLAD_GL_EXT_texture_buffer; -int GLAD_GL_ARB_instanced_arrays; -int GLAD_GL_ARB_get_texture_sub_image; -int GLAD_GL_NV_vertex_array_range2; -int GLAD_GL_KHR_robustness; -int GLAD_GL_AMD_sparse_texture; -int GLAD_GL_ARB_clip_control; -int GLAD_GL_NV_fragment_coverage_to_color; -int GLAD_GL_NV_fence; -int GLAD_GL_ARB_texture_buffer_range; -int GLAD_GL_SUN_mesh_array; -int GLAD_GL_ARB_vertex_attrib_binding; -int GLAD_GL_ARB_framebuffer_no_attachments; -int GLAD_GL_ARB_cl_event; -int GLAD_GL_QCOM_writeonly_rendering; -int GLAD_GL_EXT_vertex_weighting; -int GLAD_GL_OES_draw_elements_base_vertex; -int GLAD_GL_ARB_derivative_control; -int GLAD_GL_NV_packed_depth_stencil; -int GLAD_GL_ANGLE_program_binary; -int GLAD_GL_OES_single_precision; -int GLAD_GL_OES_primitive_bounding_box; -int GLAD_GL_NV_primitive_restart; -int GLAD_GL_SUN_global_alpha; -int GLAD_GL_ARB_fragment_shader_interlock; -int GLAD_GL_ANGLE_texture_compression_dxt3; -int GLAD_GL_EXT_texture_object; -int GLAD_GL_AMD_name_gen_delete; -int GLAD_GL_NV_texture_compression_vtc; -int GLAD_GL_NV_sample_mask_override_coverage; -int GLAD_GL_NV_texture_shader3; -int GLAD_GL_MESA_tile_raster_order; -int GLAD_GL_ARB_texture_filter_anisotropic; -int GLAD_GL_EXT_texture; -int GLAD_GL_ARB_buffer_storage; -int GLAD_GL_AMD_shader_atomic_counter_ops; -int GLAD_GL_APPLE_vertex_program_evaluators; -int GLAD_GL_AMD_texture_gather_bias_lod; -int GLAD_GL_NV_texgen_reflection; -int GLAD_GL_ARB_explicit_uniform_location; -int GLAD_GL_FJ_shader_binary_GCCSO; -int GLAD_GL_EXT_disjoint_timer_query; -int GLAD_GL_ARB_depth_buffer_float; -int GLAD_GL_NV_path_rendering_shared_edge; -int GLAD_GL_SGIX_shadow_ambient; -int GLAD_GL_NV_read_buffer; -int GLAD_GL_IMG_bindless_texture; -int GLAD_GL_ARB_texture_cube_map; -int GLAD_GL_AMD_vertex_shader_viewport_index; -int GLAD_GL_SGIX_list_priority; -int GLAD_GL_NV_vertex_buffer_unified_memory; -int GLAD_GL_NV_uniform_buffer_unified_memory; -int GLAD_GL_ARB_clear_texture; -int GLAD_GL_NV_texture_compression_s3tc_update; -int GLAD_GL_ATI_texture_env_combine3; -int GLAD_GL_NV_depth_clamp; -int GLAD_GL_ARB_map_buffer_alignment; -int GLAD_GL_EXT_memory_object; -int GLAD_GL_NV_blend_equation_advanced; -int GLAD_GL_SGIS_sharpen_texture; -int GLAD_GL_KHR_robust_buffer_access_behavior; -int GLAD_GL_ARB_pipeline_statistics_query; -int GLAD_GL_ARB_vertex_program; -int GLAD_GL_NV_pixel_buffer_object; -int GLAD_GL_EXT_clip_cull_distance; -int GLAD_GL_ARB_texture_rgb10_a2ui; -int GLAD_GL_EXT_draw_transform_feedback; -int GLAD_GL_OML_interlace; -int GLAD_GL_OES_texture_buffer; -int GLAD_GL_ATI_pixel_format_float; -int GLAD_GL_NV_clip_space_w_scaling; -int GLAD_GL_NV_polygon_mode; -int GLAD_GL_ARB_vertex_buffer_object; -int GLAD_GL_OES_sample_shading; -int GLAD_GL_EXT_shadow_funcs; -int GLAD_GL_ATI_text_fragment_shader; -int GLAD_GL_NV_vertex_array_range; -int GLAD_GL_SGIX_fragment_lighting; -int GLAD_GL_AMD_shader_ballot; -int GLAD_GL_NV_texture_expand_normal; -int GLAD_GL_NV_framebuffer_multisample_coverage; -int GLAD_GL_EXT_timer_query; -int GLAD_GL_ANGLE_framebuffer_blit; -int GLAD_GL_EXT_vertex_array_bgra; -int GLAD_GL_QCOM_alpha_test; -int GLAD_GL_NV_bindless_texture; -int GLAD_GL_KHR_debug; -int GLAD_GL_SGIS_texture_border_clamp; -int GLAD_GL_ATI_vertex_attrib_array_object; -int GLAD_GL_SGIX_clipmap; -int GLAD_GL_EXT_geometry_shader4; -int GLAD_GL_ARB_shader_texture_image_samples; -int GLAD_GL_MESA_ycbcr_texture; -int GLAD_GL_MESAX_texture_stack; -int GLAD_GL_EXT_blend_func_extended; -int GLAD_GL_AMD_seamless_cubemap_per_texture; -int GLAD_GL_EXT_bindable_uniform; -int GLAD_GL_KHR_texture_compression_astc_hdr; -int GLAD_GL_ARB_shader_ballot; -int GLAD_GL_KHR_blend_equation_advanced; -int GLAD_GL_ARB_fragment_program_shadow; -int GLAD_GL_OES_shader_image_atomic; -int GLAD_GL_ATI_element_array; -int GLAD_GL_ANGLE_instanced_arrays; -int GLAD_GL_AMD_texture_texture4; -int GLAD_GL_SGIX_reference_plane; -int GLAD_GL_EXT_stencil_two_side; -int GLAD_GL_EXT_texture_format_sRGB_override; -int GLAD_GL_ARB_transform_feedback_overflow_query; -int GLAD_GL_SGIX_texture_lod_bias; -int GLAD_GL_KHR_no_error; -int GLAD_GL_NV_explicit_multisample; -int GLAD_GL_NV_stereo_view_rendering; -int GLAD_GL_IBM_static_data; -int GLAD_GL_EXT_clip_volume_hint; -int GLAD_GL_EXT_texture_perturb_normal; -int GLAD_GL_NV_fragment_program2; -int GLAD_GL_NV_fragment_program4; -int GLAD_GL_EXT_point_parameters; -int GLAD_GL_PGI_misc_hints; -int GLAD_GL_EXT_EGL_image_storage; -int GLAD_GL_SGIX_subsample; -int GLAD_GL_AMD_shader_stencil_export; -int GLAD_GL_ARB_shader_texture_lod; -int GLAD_GL_ARB_vertex_shader; -int GLAD_GL_ARB_depth_clamp; -int GLAD_GL_OES_mapbuffer; -int GLAD_GL_SGIS_texture_select; -int GLAD_GL_NV_texture_shader; -int GLAD_GL_ARB_tessellation_shader; -int GLAD_GL_EXT_draw_buffers2; -int GLAD_GL_ARB_vertex_attrib_64bit; -int GLAD_GL_EXT_texture_filter_minmax; -int GLAD_GL_NV_query_resource; -int GLAD_GL_NV_read_stencil; -int GLAD_GL_AMD_interleaved_elements; -int GLAD_GL_ARB_fragment_program; -int GLAD_GL_NV_framebuffer_multisample; -int GLAD_GL_OML_resample; -int GLAD_GL_APPLE_ycbcr_422; -int GLAD_GL_SGIX_texture_add_env; -int GLAD_GL_ARB_shadow_ambient; -int GLAD_GL_ARB_texture_storage; -int GLAD_GL_EXT_pixel_buffer_object; -int GLAD_GL_ARB_copy_image; -int GLAD_GL_SGIS_pixel_texture; -int GLAD_GL_SGIS_generate_mipmap; -int GLAD_GL_SGIX_instruments; -int GLAD_GL_ARB_fragment_layer_viewport; -int GLAD_GL_ARB_shader_storage_buffer_object; -int GLAD_GL_EXT_sparse_texture2; -int GLAD_GL_EXT_blend_minmax; -int GLAD_GL_MESA_pack_invert; -int GLAD_GL_OES_required_internalformat; -int GLAD_GL_ARB_base_instance; -int GLAD_GL_EXT_texture_mirror_clamp_to_edge; -int GLAD_GL_SGIX_convolution_accuracy; -int GLAD_GL_PGI_vertex_hints; -int GLAD_GL_AMD_transform_feedback4; -int GLAD_GL_ARB_ES3_1_compatibility; -int GLAD_GL_EXT_memory_object_win32; -int GLAD_GL_EXT_texture_integer; -int GLAD_GL_ARB_texture_multisample; -int GLAD_GL_ATI_vertex_streams; -int GLAD_GL_AMD_gpu_shader_int64; -int GLAD_GL_S3_s3tc; -int GLAD_GL_ARB_query_buffer_object; -int GLAD_GL_IMG_multisampled_render_to_texture; -int GLAD_GL_AMD_vertex_shader_tessellator; -int GLAD_GL_ARB_invalidate_subdata; -int GLAD_GL_EXT_texture_format_BGRA8888; -int GLAD_GL_APPLE_copy_texture_levels; -int GLAD_GL_OVR_multiview_multisampled_render_to_texture; -int GLAD_GL_OES_texture_stencil8; -int GLAD_GL_NV_draw_vulkan_image; -int GLAD_GL_EXT_index_material; -int GLAD_GL_OES_stencil4; -int GLAD_GL_NVX_linked_gpu_multicast; -int GLAD_GL_OES_stencil1; -int GLAD_GL_NV_blend_equation_advanced_coherent; -int GLAD_GL_OES_texture_3D; -int GLAD_GL_KHR_texture_compression_astc_sliced_3d; -int GLAD_GL_INTEL_parallel_arrays; -int GLAD_GL_ATI_draw_buffers; -int GLAD_GL_WIN_specular_fog; -int GLAD_GL_EXT_cmyka; -int GLAD_GL_SGIX_pixel_texture; -int GLAD_GL_APPLE_specular_vector; -int GLAD_GL_DMP_shader_binary; -int GLAD_GL_ARB_compatibility; -int GLAD_GL_EXT_texture_storage; -int GLAD_GL_ARB_timer_query; -int GLAD_GL_SGIX_interlace; -int GLAD_GL_NV_parameter_buffer_object; -int GLAD_GL_AMD_shader_trinary_minmax; -int GLAD_GL_ARB_direct_state_access; -int GLAD_GL_EXT_rescale_normal; -int GLAD_GL_ARB_pixel_buffer_object; -int GLAD_GL_ARB_uniform_buffer_object; -int GLAD_GL_ARB_vertex_type_10f_11f_11f_rev; -int GLAD_GL_ARB_texture_swizzle; -int GLAD_GL_NV_transform_feedback2; -int GLAD_GL_SGIX_async_pixel; -int GLAD_GL_NV_fragment_program_option; -int GLAD_GL_ARB_explicit_attrib_location; -int GLAD_GL_EXT_sparse_texture; -int GLAD_GL_EXT_blend_color; -int GLAD_GL_NV_shader_thread_group; -int GLAD_GL_EXT_stencil_wrap; -int GLAD_GL_EXT_index_array_formats; -int GLAD_GL_OES_texture_float_linear; -int GLAD_GL_IMG_texture_compression_pvrtc; -int GLAD_GL_OVR_multiview2; -int GLAD_GL_EXT_histogram; -int GLAD_GL_EXT_polygon_offset; -int GLAD_GL_SGIS_point_parameters; -int GLAD_GL_DMP_program_binary; -int GLAD_GL_SGIX_ycrcb; -int GLAD_GL_EXT_draw_buffers_indexed; -int GLAD_GL_EXT_direct_state_access; -int GLAD_GL_ARB_cull_distance; -int GLAD_GL_AMD_sample_positions; -int GLAD_GL_NV_vertex_program; -int GLAD_GL_NV_shader_thread_shuffle; -int GLAD_GL_ARB_shader_precision; -int GLAD_GL_EXT_vertex_shader; -int GLAD_GL_EXT_blend_func_separate; -int GLAD_GL_APPLE_fence; -int GLAD_GL_NV_query_resource_tag; -int GLAD_GL_OES_byte_coordinates; -int GLAD_GL_NV_draw_instanced; -int GLAD_GL_ARB_transpose_matrix; -int GLAD_GL_ARB_provoking_vertex; -int GLAD_GL_OES_fbo_render_mipmap; -int GLAD_GL_EXT_fog_coord; -int GLAD_GL_OES_element_index_uint; -int GLAD_GL_EXT_buffer_storage; -int GLAD_GL_EXT_vertex_array; -int GLAD_GL_ARB_half_float_vertex; -int GLAD_GL_EXT_blend_equation_separate; -int GLAD_GL_NV_framebuffer_mixed_samples; -int GLAD_GL_NVX_conditional_render; -int GLAD_GL_ARB_multi_draw_indirect; -int GLAD_GL_EXT_raster_multisample; -int GLAD_GL_NV_copy_image; -int GLAD_GL_HP_texture_lighting; -int GLAD_GL_INTEL_framebuffer_CMAA; -int GLAD_GL_EXT_texture_border_clamp; -int GLAD_GL_EXT_texture_compression_astc_decode_mode; -int GLAD_GL_EXT_draw_buffers; -int GLAD_GL_ARB_transform_feedback2; -int GLAD_GL_ARB_transform_feedback3; -int GLAD_GL_SGIX_ycrcba; -int GLAD_GL_NV_framebuffer_blit; -int GLAD_GL_EXT_debug_marker; -int GLAD_GL_EXT_bgra; -int GLAD_GL_OES_texture_view; -int GLAD_GL_ARB_sparse_texture_clamp; -int GLAD_GL_EXT_pixel_transform; -int GLAD_GL_ARB_conservative_depth; -int GLAD_GL_ATI_fragment_shader; -int GLAD_GL_ARB_vertex_array_object; -int GLAD_GL_EXT_tessellation_point_size; -int GLAD_GL_EXT_color_buffer_half_float; -int GLAD_GL_SUN_triangle_list; -int GLAD_GL_OES_texture_half_float; -int GLAD_GL_EXT_texture_view; -int GLAD_GL_EXT_texture_env_add; -int GLAD_GL_EXT_packed_depth_stencil; -int GLAD_GL_EXT_texture_mirror_clamp; -int GLAD_GL_NV_multisample_filter_hint; -int GLAD_GL_ANGLE_pack_reverse_row_order; -int GLAD_GL_APPLE_float_pixels; -int GLAD_GL_EXT_texture_compression_bptc; -int GLAD_GL_ARB_transform_feedback_instanced; -int GLAD_GL_SGIX_async; -int GLAD_GL_EXT_texture_compression_latc; -int GLAD_GL_NV_robustness_video_memory_purge; -int GLAD_GL_ARB_shading_language_100; -int GLAD_GL_INTEL_performance_query; -int GLAD_GL_ARB_texture_mirror_clamp_to_edge; -int GLAD_GL_NV_gpu_shader5; -int GLAD_GL_NV_bindless_multi_draw_indirect_count; -int GLAD_GL_IMG_framebuffer_downsample; -int GLAD_GL_ARB_ES2_compatibility; -int GLAD_GL_ARB_indirect_parameters; -int GLAD_GL_APPLE_sync; -int GLAD_GL_EXT_window_rectangles; -int GLAD_GL_NV_half_float; -int GLAD_GL_QCOM_driver_control; -int GLAD_GL_ARB_ES3_2_compatibility; -int GLAD_GL_ATI_texture_mirror_once; -int GLAD_GL_IBM_rasterpos_clip; -int GLAD_GL_EXT_semaphore; -int GLAD_GL_SGIX_shadow; -int GLAD_GL_EXT_polygon_offset_clamp; -int GLAD_GL_NV_deep_texture3D; -int GLAD_GL_ARB_shader_draw_parameters; -int GLAD_GL_SGIX_calligraphic_fragment; -int GLAD_GL_ARB_shader_bit_encoding; -int GLAD_GL_EXT_compiled_vertex_array; -int GLAD_GL_EXT_pvrtc_sRGB; -int GLAD_GL_NV_depth_buffer_float; -int GLAD_GL_EXT_shader_pixel_local_storage; -int GLAD_GL_NV_occlusion_query; -int GLAD_GL_APPLE_flush_buffer_range; -int GLAD_GL_EXT_draw_elements_base_vertex; -int GLAD_GL_OES_depth32; -int GLAD_GL_ARB_imaging; -int GLAD_GL_NV_shader_atomic_float; -int GLAD_GL_ARM_shader_framebuffer_fetch; -int GLAD_GL_QCOM_shader_framebuffer_fetch_noncoherent; -int GLAD_GL_ARB_draw_buffers_blend; -int GLAD_GL_AMD_gcn_shader; -int GLAD_GL_AMD_blend_minmax_factor; -int GLAD_GL_OES_vertex_type_10_10_10_2; -int GLAD_GL_EXT_texture_sRGB_decode; -int GLAD_GL_ARB_shading_language_420pack; -int GLAD_GL_ARB_shader_viewport_layer_array; -int GLAD_GL_ATI_meminfo; -int GLAD_GL_EXT_abgr; -int GLAD_GL_ARM_rgba8; -int GLAD_GL_AMD_pinned_memory; -int GLAD_GL_EXT_texture_snorm; -int GLAD_GL_SGIX_texture_coordinate_clamp; -int GLAD_GL_ARB_clear_buffer_object; -int GLAD_GL_ARB_multisample; -int GLAD_GL_EXT_debug_label; -int GLAD_GL_EXT_map_buffer_range; -int GLAD_GL_ARB_sample_shading; -int GLAD_GL_NV_internalformat_sample_query; -int GLAD_GL_INTEL_map_texture; -int GLAD_GL_ARB_texture_env_crossbar; -int GLAD_GL_OES_gpu_shader5; -int GLAD_GL_EXT_422_pixels; -int GLAD_GL_NV_blend_minmax_factor; -int GLAD_GL_NV_conservative_raster_pre_snap_triangles; -int GLAD_GL_ARB_compute_shader; -int GLAD_GL_EXT_blend_logic_op; -int GLAD_GL_ARB_blend_func_extended; -int GLAD_GL_IBM_vertex_array_lists; -int GLAD_GL_ARB_color_buffer_float; -int GLAD_GL_ARB_bindless_texture; -int GLAD_GL_ARB_window_pos; -int GLAD_GL_EXT_texture_cube_map_array; -int GLAD_GL_ARB_internalformat_query; -int GLAD_GL_ARB_shadow; -int GLAD_GL_ARB_texture_mirrored_repeat; -int GLAD_GL_EXT_shader_image_load_store; -int GLAD_GL_OES_shader_multisample_interpolation; -int GLAD_GL_EXT_copy_texture; -int GLAD_GL_NV_register_combiners2; -int GLAD_GL_SGIX_ycrcb_subsample; -int GLAD_GL_EXT_clip_control; -int GLAD_GL_NV_depth_nonlinear; -int GLAD_GL_AMD_program_binary_Z400; -int GLAD_GL_NV_alpha_to_coverage_dither_control; -int GLAD_GL_OES_texture_cube_map_array; -int GLAD_GL_SGIX_ir_instrument1; -int GLAD_GL_EXT_geometry_shader; -int GLAD_GL_NV_draw_texture; -int GLAD_GL_EXT_texture_shared_exponent; -int GLAD_GL_NV_texture_shader2; -int GLAD_GL_OES_texture_border_clamp; -int GLAD_GL_EXT_draw_instanced; -int GLAD_GL_NV_copy_depth_to_color; -int GLAD_GL_ARB_viewport_array; -int GLAD_GL_ARB_separate_shader_objects; -int GLAD_GL_NV_conservative_raster_pre_snap; -int GLAD_GL_EXT_depth_bounds_test; -int GLAD_GL_HP_image_transform; -int GLAD_GL_EXT_texture_sRGB_R8; -int GLAD_GL_ARB_texture_env_add; -int GLAD_GL_NV_instanced_arrays; -int GLAD_GL_NV_video_capture; -int GLAD_GL_ARB_sampler_objects; -int GLAD_GL_ARB_matrix_palette; -int GLAD_GL_SGIS_texture_color_mask; -int GLAD_GL_EXT_packed_pixels; -int GLAD_GL_EXT_coordinate_frame; -int GLAD_GL_ARB_texture_compression; -int GLAD_GL_ARB_multi_bind; -int GLAD_GL_APPLE_aux_depth_stencil; -int GLAD_GL_QCOM_perfmon_global_mode; -int GLAD_GL_ARB_shader_subroutine; -int GLAD_GL_EXT_framebuffer_sRGB; -int GLAD_GL_ARB_texture_storage_multisample; -int GLAD_GL_KHR_blend_equation_advanced_coherent; -int GLAD_GL_NV_viewport_array; -int GLAD_GL_EXT_vertex_attrib_64bit; -int GLAD_GL_OES_compressed_ETC1_RGB8_sub_texture; -int GLAD_GL_OES_texture_compression_astc; -int GLAD_GL_EXT_base_instance; -int GLAD_GL_EXT_instanced_arrays; -int GLAD_GL_NV_shader_atomic_float64; -int GLAD_GL_ARB_depth_texture; -int GLAD_GL_NV_shader_buffer_store; -int GLAD_GL_OES_query_matrix; -int GLAD_GL_MESA_window_pos; -int GLAD_GL_ANGLE_translated_shader_source; -int GLAD_GL_NV_fill_rectangle; -int GLAD_GL_NV_coverage_sample; -int GLAD_GL_EXT_shader_group_vote; -int GLAD_GL_EXT_multisampled_compatibility; -int GLAD_GL_NV_shader_storage_buffer_object; -int GLAD_GL_EXT_gpu_shader5; -int GLAD_GL_ARB_texture_query_lod; -int GLAD_GL_ARB_copy_buffer; -int GLAD_GL_ARB_shader_image_size; -int GLAD_GL_NV_shader_atomic_counters; -int GLAD_GL_APPLE_object_purgeable; -int GLAD_GL_ARB_occlusion_query; -int GLAD_GL_INGR_color_clamp; -int GLAD_GL_SGI_color_table; -int GLAD_GL_NV_gpu_program5_mem_extended; -int GLAD_GL_ARB_texture_cube_map_array; -int GLAD_GL_SGIX_scalebias_hint; -int GLAD_GL_EXT_gpu_shader4; -int GLAD_GL_NV_geometry_program4; -int GLAD_GL_OES_shader_io_blocks; -int GLAD_GL_EXT_framebuffer_multisample_blit_scaled; -int GLAD_GL_AMD_debug_output; -int GLAD_GL_EXT_shader_texture_lod; -int GLAD_GL_ARB_texture_border_clamp; -int GLAD_GL_NV_read_buffer_front; -int GLAD_GL_EXT_win32_keyed_mutex; -int GLAD_GL_ARB_fragment_coord_conventions; -int GLAD_GL_APPLE_framebuffer_multisample; -int GLAD_GL_IMG_read_format; -int GLAD_GL_ARB_multitexture; -int GLAD_GL_SGIX_polynomial_ffd; -int GLAD_GL_EXT_texture_env_dot3; -int GLAD_GL_EXT_provoking_vertex; -int GLAD_GL_ARB_point_parameters; -int GLAD_GL_ARB_shader_image_load_store; -int GLAD_GL_ARB_conditional_render_inverted; -int GLAD_GL_HP_occlusion_test; -int GLAD_GL_ARB_ES3_compatibility; -int GLAD_GL_ARB_texture_barrier; -int GLAD_GL_ARB_texture_buffer_object_rgb32; -int GLAD_GL_NV_bindless_multi_draw_indirect; -int GLAD_GL_SGIX_texture_multi_buffer; -int GLAD_GL_INTEL_blackhole_render; -int GLAD_GL_AMD_shader_image_load_store_lod; -int GLAD_GL_NV_fbo_color_attachments; -int GLAD_GL_EXT_render_snorm; -int GLAD_GL_EXT_texture_rg; -int GLAD_GL_KHR_texture_compression_astc_ldr; -int GLAD_GL_3DFX_multisample; -int GLAD_GL_INTEL_fragment_shader_ordering; -int GLAD_GL_ARB_texture_env_dot3; -int GLAD_GL_NV_gpu_program4; -int GLAD_GL_NV_gpu_program5; -int GLAD_GL_NV_float_buffer; -int GLAD_GL_SGIS_texture_edge_clamp; -int GLAD_GL_ARB_framebuffer_sRGB; -int GLAD_GL_EXT_texture_compression_s3tc_srgb; -int GLAD_GL_SUN_slice_accum; -int GLAD_GL_EXT_index_texture; -int GLAD_GL_EXT_shader_image_load_formatted; -int GLAD_GL_NV_copy_buffer; -int GLAD_GL_ARB_geometry_shader4; -int GLAD_GL_OES_texture_float; -int GLAD_GL_IMG_texture_filter_cubic; -int GLAD_GL_EXT_separate_specular_color; -int GLAD_GL_AMD_depth_clamp_separate; -int GLAD_GL_ANDROID_extension_pack_es31a; -int GLAD_GL_NV_shadow_samplers_cube; -int GLAD_GL_NV_conservative_raster; -int GLAD_GL_ARB_sparse_texture2; -int GLAD_GL_SGIX_sprite; -int GLAD_GL_ARB_get_program_binary; -int GLAD_GL_AMD_occlusion_query_event; -int GLAD_GL_SGIS_multisample; -int GLAD_GL_EXT_framebuffer_object; -int GLAD_GL_OES_texture_npot; -int GLAD_GL_OES_depth_texture; -int GLAD_GL_ARB_robustness_isolation; -int GLAD_GL_ARB_vertex_array_bgra; -int GLAD_GL_APPLE_vertex_array_range; -int GLAD_GL_AMD_query_buffer_object; -int GLAD_GL_NV_register_combiners; -int GLAD_GL_ARB_draw_buffers; -int GLAD_GL_OES_surfaceless_context; -int GLAD_GL_IMG_shader_binary; -int GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers; -int GLAD_GL_AMD_gpu_shader_int16; -int GLAD_GL_ARB_debug_output; -int GLAD_GL_EXT_shader_framebuffer_fetch; -int GLAD_GL_SGI_color_matrix; -int GLAD_GL_EXT_cull_vertex; -int GLAD_GL_EXT_texture_sRGB; -int GLAD_GL_EXT_unpack_subimage; -int GLAD_GL_APPLE_row_bytes; -int GLAD_GL_ANGLE_texture_compression_dxt5; -int GLAD_GL_NV_shader_noperspective_interpolation; -int GLAD_GL_NV_conservative_raster_underestimation; -int GLAD_GL_IBM_multimode_draw_arrays; -int GLAD_GL_EXT_read_format_bgra; -int GLAD_GL_KHR_parallel_shader_compile; -int GLAD_GL_APPLE_color_buffer_packed_float; -int GLAD_GL_APPLE_vertex_array_object; -int GLAD_GL_3DFX_texture_compression_FXT1; -int GLAD_GL_NV_fragment_shader_interlock; -int GLAD_GL_APPLE_texture_max_level; -int GLAD_GL_AMD_conservative_depth; -int GLAD_GL_ARB_texture_float; -int GLAD_GL_ARB_compressed_texture_pixel_storage; -int GLAD_GL_SGIS_detail_texture; -int GLAD_GL_EXT_texture_compression_dxt1; -int GLAD_GL_NV_geometry_shader_passthrough; -int GLAD_GL_ARB_draw_instanced; -int GLAD_GL_OES_read_format; -int GLAD_GL_ATI_texture_float; -int GLAD_GL_ARB_texture_gather; -int GLAD_GL_AMD_vertex_shader_layer; -int GLAD_GL_NV_draw_buffers; -int GLAD_GL_ARB_shading_language_include; -int GLAD_GL_APPLE_client_storage; -int GLAD_GL_OES_EGL_image; -int GLAD_GL_WIN_phong_shading; -int GLAD_GL_INGR_blend_func_separate; -int GLAD_GL_NV_path_rendering; -int GLAD_GL_NV_conservative_raster_dilate; -int GLAD_GL_AMD_gpu_shader_half_float; -int GLAD_GL_VIV_shader_binary; -int GLAD_GL_ARB_post_depth_coverage; -int GLAD_GL_ARB_texture_non_power_of_two; -int GLAD_GL_EXT_texture_sRGB_RG8; -int GLAD_GL_APPLE_rgb_422; -int GLAD_GL_EXT_texture_lod_bias; -int GLAD_GL_ARB_gpu_shader_int64; -int GLAD_GL_ARB_seamless_cube_map; -int GLAD_GL_APPLE_clip_distance; -int GLAD_GL_ARB_shader_group_vote; -int GLAD_GL_NV_vdpau_interop; -int GLAD_GL_ARB_occlusion_query2; -int GLAD_GL_ARB_internalformat_query2; -int GLAD_GL_EXT_texture_filter_anisotropic; -int GLAD_GL_SUN_vertex; -int GLAD_GL_EXT_transform_feedback; -int GLAD_GL_OES_depth24; -int GLAD_GL_SGIX_igloo_interface; -int GLAD_GL_SGIS_texture_lod; -int GLAD_GL_NV_vertex_program3; -int GLAD_GL_ARB_draw_indirect; -int GLAD_GL_NV_vertex_program4; -int GLAD_GL_AMD_transform_feedback3_lines_triangles; -int GLAD_GL_SGIS_fog_function; -int GLAD_GL_EXT_x11_sync_object; -int GLAD_GL_ARB_sync; -int GLAD_GL_NV_texture_rectangle_compressed; -int GLAD_GL_EXT_protected_textures; -int GLAD_GL_OES_rgb8_rgba8; -int GLAD_GL_NV_sample_locations; -int GLAD_GL_NV_gpu_multicast; -int GLAD_GL_EXT_float_blend; -int GLAD_GL_ARB_gl_spirv; -int GLAD_GL_ARM_shader_framebuffer_fetch_depth_stencil; -int GLAD_GL_EXT_clear_texture; -int GLAD_GL_ARB_compute_variable_group_size; -int GLAD_GL_OES_EGL_image_external; -int GLAD_GL_APPLE_texture_format_BGRA8888; -int GLAD_GL_OES_fixed_point; -int GLAD_GL_NV_shadow_samplers_array; -int GLAD_GL_MESA_program_binary_formats; -int GLAD_GL_NV_blend_square; -int GLAD_GL_ARM_mali_shader_binary; -int GLAD_GL_EXT_framebuffer_multisample; -int GLAD_GL_ARB_gpu_shader5; -int GLAD_GL_SGIS_texture4D; -int GLAD_GL_EXT_texture3D; -int GLAD_GL_EXT_multisample; -int GLAD_GL_EXT_conservative_depth; -int GLAD_GL_EXT_secondary_color; -int GLAD_GL_INTEL_conservative_rasterization; -int GLAD_GL_ARB_texture_filter_minmax; -int GLAD_GL_EXT_shader_pixel_local_storage2; -int GLAD_GL_ATI_vertex_array_object; -int GLAD_GL_ARB_parallel_shader_compile; -int GLAD_GL_NVX_gpu_memory_info; -int GLAD_GL_ARB_sparse_texture; -int GLAD_GL_SGIS_point_line_texgen; -int GLAD_GL_ARB_sample_locations; -int GLAD_GL_ARB_sparse_buffer; -int GLAD_GL_ARB_polygon_offset_clamp; -int GLAD_GL_NV_texture_npot_2D_mipmap; -int GLAD_GL_EXT_draw_range_elements; -int GLAD_GL_SGIX_blend_alpha_minmax; -int GLAD_GL_KHR_context_flush_control; -PFNGLTBUFFERMASK3DFXPROC glad_glTbufferMask3DFX; -PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD; -PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD; -PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD; -PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD; -PFNGLBLENDFUNCINDEXEDAMDPROC glad_glBlendFuncIndexedAMD; -PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC glad_glBlendFuncSeparateIndexedAMD; -PFNGLBLENDEQUATIONINDEXEDAMDPROC glad_glBlendEquationIndexedAMD; -PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC glad_glBlendEquationSeparateIndexedAMD; -PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glFramebufferSamplePositionsfvAMD; -PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC glad_glNamedFramebufferSamplePositionsfvAMD; -PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetFramebufferParameterfvAMD; -PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC glad_glGetNamedFramebufferParameterfvAMD; -PFNGLUNIFORM1I64NVPROC glad_glUniform1i64NV; -PFNGLUNIFORM2I64NVPROC glad_glUniform2i64NV; -PFNGLUNIFORM3I64NVPROC glad_glUniform3i64NV; -PFNGLUNIFORM4I64NVPROC glad_glUniform4i64NV; -PFNGLUNIFORM1I64VNVPROC glad_glUniform1i64vNV; -PFNGLUNIFORM2I64VNVPROC glad_glUniform2i64vNV; -PFNGLUNIFORM3I64VNVPROC glad_glUniform3i64vNV; -PFNGLUNIFORM4I64VNVPROC glad_glUniform4i64vNV; -PFNGLUNIFORM1UI64NVPROC glad_glUniform1ui64NV; -PFNGLUNIFORM2UI64NVPROC glad_glUniform2ui64NV; -PFNGLUNIFORM3UI64NVPROC glad_glUniform3ui64NV; -PFNGLUNIFORM4UI64NVPROC glad_glUniform4ui64NV; -PFNGLUNIFORM1UI64VNVPROC glad_glUniform1ui64vNV; -PFNGLUNIFORM2UI64VNVPROC glad_glUniform2ui64vNV; -PFNGLUNIFORM3UI64VNVPROC glad_glUniform3ui64vNV; -PFNGLUNIFORM4UI64VNVPROC glad_glUniform4ui64vNV; -PFNGLGETUNIFORMI64VNVPROC glad_glGetUniformi64vNV; -PFNGLGETUNIFORMUI64VNVPROC glad_glGetUniformui64vNV; -PFNGLPROGRAMUNIFORM1I64NVPROC glad_glProgramUniform1i64NV; -PFNGLPROGRAMUNIFORM2I64NVPROC glad_glProgramUniform2i64NV; -PFNGLPROGRAMUNIFORM3I64NVPROC glad_glProgramUniform3i64NV; -PFNGLPROGRAMUNIFORM4I64NVPROC glad_glProgramUniform4i64NV; -PFNGLPROGRAMUNIFORM1I64VNVPROC glad_glProgramUniform1i64vNV; -PFNGLPROGRAMUNIFORM2I64VNVPROC glad_glProgramUniform2i64vNV; -PFNGLPROGRAMUNIFORM3I64VNVPROC glad_glProgramUniform3i64vNV; -PFNGLPROGRAMUNIFORM4I64VNVPROC glad_glProgramUniform4i64vNV; -PFNGLPROGRAMUNIFORM1UI64NVPROC glad_glProgramUniform1ui64NV; -PFNGLPROGRAMUNIFORM2UI64NVPROC glad_glProgramUniform2ui64NV; -PFNGLPROGRAMUNIFORM3UI64NVPROC glad_glProgramUniform3ui64NV; -PFNGLPROGRAMUNIFORM4UI64NVPROC glad_glProgramUniform4ui64NV; -PFNGLPROGRAMUNIFORM1UI64VNVPROC glad_glProgramUniform1ui64vNV; -PFNGLPROGRAMUNIFORM2UI64VNVPROC glad_glProgramUniform2ui64vNV; -PFNGLPROGRAMUNIFORM3UI64VNVPROC glad_glProgramUniform3ui64vNV; -PFNGLPROGRAMUNIFORM4UI64VNVPROC glad_glProgramUniform4ui64vNV; -PFNGLVERTEXATTRIBPARAMETERIAMDPROC glad_glVertexAttribParameteriAMD; -PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC glad_glMultiDrawArraysIndirectAMD; -PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC glad_glMultiDrawElementsIndirectAMD; -PFNGLGENNAMESAMDPROC glad_glGenNamesAMD; -PFNGLDELETENAMESAMDPROC glad_glDeleteNamesAMD; -PFNGLISNAMEAMDPROC glad_glIsNameAMD; -PFNGLQUERYOBJECTPARAMETERUIAMDPROC glad_glQueryObjectParameteruiAMD; -PFNGLGETPERFMONITORGROUPSAMDPROC glad_glGetPerfMonitorGroupsAMD; -PFNGLGETPERFMONITORCOUNTERSAMDPROC glad_glGetPerfMonitorCountersAMD; -PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glad_glGetPerfMonitorGroupStringAMD; -PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glad_glGetPerfMonitorCounterStringAMD; -PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glad_glGetPerfMonitorCounterInfoAMD; -PFNGLGENPERFMONITORSAMDPROC glad_glGenPerfMonitorsAMD; -PFNGLDELETEPERFMONITORSAMDPROC glad_glDeletePerfMonitorsAMD; -PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glad_glSelectPerfMonitorCountersAMD; -PFNGLBEGINPERFMONITORAMDPROC glad_glBeginPerfMonitorAMD; -PFNGLENDPERFMONITORAMDPROC glad_glEndPerfMonitorAMD; -PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glad_glGetPerfMonitorCounterDataAMD; -PFNGLSETMULTISAMPLEFVAMDPROC glad_glSetMultisamplefvAMD; -PFNGLTEXSTORAGESPARSEAMDPROC glad_glTexStorageSparseAMD; -PFNGLTEXTURESTORAGESPARSEAMDPROC glad_glTextureStorageSparseAMD; -PFNGLSTENCILOPVALUEAMDPROC glad_glStencilOpValueAMD; -PFNGLTESSELLATIONFACTORAMDPROC glad_glTessellationFactorAMD; -PFNGLTESSELLATIONMODEAMDPROC glad_glTessellationModeAMD; -PFNGLELEMENTPOINTERAPPLEPROC glad_glElementPointerAPPLE; -PFNGLDRAWELEMENTARRAYAPPLEPROC glad_glDrawElementArrayAPPLE; -PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC glad_glDrawRangeElementArrayAPPLE; -PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC glad_glMultiDrawElementArrayAPPLE; -PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glad_glMultiDrawRangeElementArrayAPPLE; -PFNGLGENFENCESAPPLEPROC glad_glGenFencesAPPLE; -PFNGLDELETEFENCESAPPLEPROC glad_glDeleteFencesAPPLE; -PFNGLSETFENCEAPPLEPROC glad_glSetFenceAPPLE; -PFNGLISFENCEAPPLEPROC glad_glIsFenceAPPLE; -PFNGLTESTFENCEAPPLEPROC glad_glTestFenceAPPLE; -PFNGLFINISHFENCEAPPLEPROC glad_glFinishFenceAPPLE; -PFNGLTESTOBJECTAPPLEPROC glad_glTestObjectAPPLE; -PFNGLFINISHOBJECTAPPLEPROC glad_glFinishObjectAPPLE; -PFNGLBUFFERPARAMETERIAPPLEPROC glad_glBufferParameteriAPPLE; -PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glad_glFlushMappedBufferRangeAPPLE; -PFNGLOBJECTPURGEABLEAPPLEPROC glad_glObjectPurgeableAPPLE; -PFNGLOBJECTUNPURGEABLEAPPLEPROC glad_glObjectUnpurgeableAPPLE; -PFNGLGETOBJECTPARAMETERIVAPPLEPROC glad_glGetObjectParameterivAPPLE; -PFNGLTEXTURERANGEAPPLEPROC glad_glTextureRangeAPPLE; -PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC glad_glGetTexParameterPointervAPPLE; -PFNGLBINDVERTEXARRAYAPPLEPROC glad_glBindVertexArrayAPPLE; -PFNGLDELETEVERTEXARRAYSAPPLEPROC glad_glDeleteVertexArraysAPPLE; -PFNGLGENVERTEXARRAYSAPPLEPROC glad_glGenVertexArraysAPPLE; -PFNGLISVERTEXARRAYAPPLEPROC glad_glIsVertexArrayAPPLE; -PFNGLVERTEXARRAYRANGEAPPLEPROC glad_glVertexArrayRangeAPPLE; -PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC glad_glFlushVertexArrayRangeAPPLE; -PFNGLVERTEXARRAYPARAMETERIAPPLEPROC glad_glVertexArrayParameteriAPPLE; -PFNGLENABLEVERTEXATTRIBAPPLEPROC glad_glEnableVertexAttribAPPLE; -PFNGLDISABLEVERTEXATTRIBAPPLEPROC glad_glDisableVertexAttribAPPLE; -PFNGLISVERTEXATTRIBENABLEDAPPLEPROC glad_glIsVertexAttribEnabledAPPLE; -PFNGLMAPVERTEXATTRIB1DAPPLEPROC glad_glMapVertexAttrib1dAPPLE; -PFNGLMAPVERTEXATTRIB1FAPPLEPROC glad_glMapVertexAttrib1fAPPLE; -PFNGLMAPVERTEXATTRIB2DAPPLEPROC glad_glMapVertexAttrib2dAPPLE; -PFNGLMAPVERTEXATTRIB2FAPPLEPROC glad_glMapVertexAttrib2fAPPLE; -PFNGLPRIMITIVEBOUNDINGBOXARBPROC glad_glPrimitiveBoundingBoxARB; -PFNGLGETTEXTUREHANDLEARBPROC glad_glGetTextureHandleARB; -PFNGLGETTEXTURESAMPLERHANDLEARBPROC glad_glGetTextureSamplerHandleARB; -PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glad_glMakeTextureHandleResidentARB; -PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glad_glMakeTextureHandleNonResidentARB; -PFNGLGETIMAGEHANDLEARBPROC glad_glGetImageHandleARB; -PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glad_glMakeImageHandleResidentARB; -PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glad_glMakeImageHandleNonResidentARB; -PFNGLUNIFORMHANDLEUI64ARBPROC glad_glUniformHandleui64ARB; -PFNGLUNIFORMHANDLEUI64VARBPROC glad_glUniformHandleui64vARB; -PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glad_glProgramUniformHandleui64ARB; -PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glad_glProgramUniformHandleui64vARB; -PFNGLISTEXTUREHANDLERESIDENTARBPROC glad_glIsTextureHandleResidentARB; -PFNGLISIMAGEHANDLERESIDENTARBPROC glad_glIsImageHandleResidentARB; -PFNGLVERTEXATTRIBL1UI64ARBPROC glad_glVertexAttribL1ui64ARB; -PFNGLVERTEXATTRIBL1UI64VARBPROC glad_glVertexAttribL1ui64vARB; -PFNGLGETVERTEXATTRIBLUI64VARBPROC glad_glGetVertexAttribLui64vARB; -PFNGLCREATESYNCFROMCLEVENTARBPROC glad_glCreateSyncFromCLeventARB; -PFNGLCLAMPCOLORARBPROC glad_glClampColorARB; -PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glad_glDispatchComputeGroupSizeARB; -PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; -PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; -PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; -PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; -PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB; -PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB; -PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB; -PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB; -PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB; -PFNGLDRAWARRAYSINSTANCEDARBPROC glad_glDrawArraysInstancedARB; -PFNGLDRAWELEMENTSINSTANCEDARBPROC glad_glDrawElementsInstancedARB; -PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB; -PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB; -PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB; -PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB; -PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB; -PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB; -PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB; -PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB; -PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB; -PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB; -PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB; -PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB; -PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB; -PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB; -PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB; -PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB; -PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB; -PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB; -PFNGLISPROGRAMARBPROC glad_glIsProgramARB; -PFNGLPROGRAMPARAMETERIARBPROC glad_glProgramParameteriARB; -PFNGLFRAMEBUFFERTEXTUREARBPROC glad_glFramebufferTextureARB; -PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glad_glFramebufferTextureLayerARB; -PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glad_glFramebufferTextureFaceARB; -PFNGLSPECIALIZESHADERARBPROC glad_glSpecializeShaderARB; -PFNGLUNIFORM1I64ARBPROC glad_glUniform1i64ARB; -PFNGLUNIFORM2I64ARBPROC glad_glUniform2i64ARB; -PFNGLUNIFORM3I64ARBPROC glad_glUniform3i64ARB; -PFNGLUNIFORM4I64ARBPROC glad_glUniform4i64ARB; -PFNGLUNIFORM1I64VARBPROC glad_glUniform1i64vARB; -PFNGLUNIFORM2I64VARBPROC glad_glUniform2i64vARB; -PFNGLUNIFORM3I64VARBPROC glad_glUniform3i64vARB; -PFNGLUNIFORM4I64VARBPROC glad_glUniform4i64vARB; -PFNGLUNIFORM1UI64ARBPROC glad_glUniform1ui64ARB; -PFNGLUNIFORM2UI64ARBPROC glad_glUniform2ui64ARB; -PFNGLUNIFORM3UI64ARBPROC glad_glUniform3ui64ARB; -PFNGLUNIFORM4UI64ARBPROC glad_glUniform4ui64ARB; -PFNGLUNIFORM1UI64VARBPROC glad_glUniform1ui64vARB; -PFNGLUNIFORM2UI64VARBPROC glad_glUniform2ui64vARB; -PFNGLUNIFORM3UI64VARBPROC glad_glUniform3ui64vARB; -PFNGLUNIFORM4UI64VARBPROC glad_glUniform4ui64vARB; -PFNGLGETUNIFORMI64VARBPROC glad_glGetUniformi64vARB; -PFNGLGETUNIFORMUI64VARBPROC glad_glGetUniformui64vARB; -PFNGLGETNUNIFORMI64VARBPROC glad_glGetnUniformi64vARB; -PFNGLGETNUNIFORMUI64VARBPROC glad_glGetnUniformui64vARB; -PFNGLPROGRAMUNIFORM1I64ARBPROC glad_glProgramUniform1i64ARB; -PFNGLPROGRAMUNIFORM2I64ARBPROC glad_glProgramUniform2i64ARB; -PFNGLPROGRAMUNIFORM3I64ARBPROC glad_glProgramUniform3i64ARB; -PFNGLPROGRAMUNIFORM4I64ARBPROC glad_glProgramUniform4i64ARB; -PFNGLPROGRAMUNIFORM1I64VARBPROC glad_glProgramUniform1i64vARB; -PFNGLPROGRAMUNIFORM2I64VARBPROC glad_glProgramUniform2i64vARB; -PFNGLPROGRAMUNIFORM3I64VARBPROC glad_glProgramUniform3i64vARB; -PFNGLPROGRAMUNIFORM4I64VARBPROC glad_glProgramUniform4i64vARB; -PFNGLPROGRAMUNIFORM1UI64ARBPROC glad_glProgramUniform1ui64ARB; -PFNGLPROGRAMUNIFORM2UI64ARBPROC glad_glProgramUniform2ui64ARB; -PFNGLPROGRAMUNIFORM3UI64ARBPROC glad_glProgramUniform3ui64ARB; -PFNGLPROGRAMUNIFORM4UI64ARBPROC glad_glProgramUniform4ui64ARB; -PFNGLPROGRAMUNIFORM1UI64VARBPROC glad_glProgramUniform1ui64vARB; -PFNGLPROGRAMUNIFORM2UI64VARBPROC glad_glProgramUniform2ui64vARB; -PFNGLPROGRAMUNIFORM3UI64VARBPROC glad_glProgramUniform3ui64vARB; -PFNGLPROGRAMUNIFORM4UI64VARBPROC glad_glProgramUniform4ui64vARB; -PFNGLCOLORTABLEPROC glad_glColorTable; -PFNGLCOLORTABLEPARAMETERFVPROC glad_glColorTableParameterfv; -PFNGLCOLORTABLEPARAMETERIVPROC glad_glColorTableParameteriv; -PFNGLCOPYCOLORTABLEPROC glad_glCopyColorTable; -PFNGLGETCOLORTABLEPROC glad_glGetColorTable; -PFNGLGETCOLORTABLEPARAMETERFVPROC glad_glGetColorTableParameterfv; -PFNGLGETCOLORTABLEPARAMETERIVPROC glad_glGetColorTableParameteriv; -PFNGLCOLORSUBTABLEPROC glad_glColorSubTable; -PFNGLCOPYCOLORSUBTABLEPROC glad_glCopyColorSubTable; -PFNGLCONVOLUTIONFILTER1DPROC glad_glConvolutionFilter1D; -PFNGLCONVOLUTIONFILTER2DPROC glad_glConvolutionFilter2D; -PFNGLCONVOLUTIONPARAMETERFPROC glad_glConvolutionParameterf; -PFNGLCONVOLUTIONPARAMETERFVPROC glad_glConvolutionParameterfv; -PFNGLCONVOLUTIONPARAMETERIPROC glad_glConvolutionParameteri; -PFNGLCONVOLUTIONPARAMETERIVPROC glad_glConvolutionParameteriv; -PFNGLCOPYCONVOLUTIONFILTER1DPROC glad_glCopyConvolutionFilter1D; -PFNGLCOPYCONVOLUTIONFILTER2DPROC glad_glCopyConvolutionFilter2D; -PFNGLGETCONVOLUTIONFILTERPROC glad_glGetConvolutionFilter; -PFNGLGETCONVOLUTIONPARAMETERFVPROC glad_glGetConvolutionParameterfv; -PFNGLGETCONVOLUTIONPARAMETERIVPROC glad_glGetConvolutionParameteriv; -PFNGLGETSEPARABLEFILTERPROC glad_glGetSeparableFilter; -PFNGLSEPARABLEFILTER2DPROC glad_glSeparableFilter2D; -PFNGLGETHISTOGRAMPROC glad_glGetHistogram; -PFNGLGETHISTOGRAMPARAMETERFVPROC glad_glGetHistogramParameterfv; -PFNGLGETHISTOGRAMPARAMETERIVPROC glad_glGetHistogramParameteriv; -PFNGLGETMINMAXPROC glad_glGetMinmax; -PFNGLGETMINMAXPARAMETERFVPROC glad_glGetMinmaxParameterfv; -PFNGLGETMINMAXPARAMETERIVPROC glad_glGetMinmaxParameteriv; -PFNGLHISTOGRAMPROC glad_glHistogram; -PFNGLMINMAXPROC glad_glMinmax; -PFNGLRESETHISTOGRAMPROC glad_glResetHistogram; -PFNGLRESETMINMAXPROC glad_glResetMinmax; -PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glad_glMultiDrawArraysIndirectCountARB; -PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glad_glMultiDrawElementsIndirectCountARB; -PFNGLVERTEXATTRIBDIVISORARBPROC glad_glVertexAttribDivisorARB; -PFNGLCURRENTPALETTEMATRIXARBPROC glad_glCurrentPaletteMatrixARB; -PFNGLMATRIXINDEXUBVARBPROC glad_glMatrixIndexubvARB; -PFNGLMATRIXINDEXUSVARBPROC glad_glMatrixIndexusvARB; -PFNGLMATRIXINDEXUIVARBPROC glad_glMatrixIndexuivARB; -PFNGLMATRIXINDEXPOINTERARBPROC glad_glMatrixIndexPointerARB; -PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; -PFNGLACTIVETEXTUREARBPROC glad_glActiveTextureARB; -PFNGLCLIENTACTIVETEXTUREARBPROC glad_glClientActiveTextureARB; -PFNGLMULTITEXCOORD1DARBPROC glad_glMultiTexCoord1dARB; -PFNGLMULTITEXCOORD1DVARBPROC glad_glMultiTexCoord1dvARB; -PFNGLMULTITEXCOORD1FARBPROC glad_glMultiTexCoord1fARB; -PFNGLMULTITEXCOORD1FVARBPROC glad_glMultiTexCoord1fvARB; -PFNGLMULTITEXCOORD1IARBPROC glad_glMultiTexCoord1iARB; -PFNGLMULTITEXCOORD1IVARBPROC glad_glMultiTexCoord1ivARB; -PFNGLMULTITEXCOORD1SARBPROC glad_glMultiTexCoord1sARB; -PFNGLMULTITEXCOORD1SVARBPROC glad_glMultiTexCoord1svARB; -PFNGLMULTITEXCOORD2DARBPROC glad_glMultiTexCoord2dARB; -PFNGLMULTITEXCOORD2DVARBPROC glad_glMultiTexCoord2dvARB; -PFNGLMULTITEXCOORD2FARBPROC glad_glMultiTexCoord2fARB; -PFNGLMULTITEXCOORD2FVARBPROC glad_glMultiTexCoord2fvARB; -PFNGLMULTITEXCOORD2IARBPROC glad_glMultiTexCoord2iARB; -PFNGLMULTITEXCOORD2IVARBPROC glad_glMultiTexCoord2ivARB; -PFNGLMULTITEXCOORD2SARBPROC glad_glMultiTexCoord2sARB; -PFNGLMULTITEXCOORD2SVARBPROC glad_glMultiTexCoord2svARB; -PFNGLMULTITEXCOORD3DARBPROC glad_glMultiTexCoord3dARB; -PFNGLMULTITEXCOORD3DVARBPROC glad_glMultiTexCoord3dvARB; -PFNGLMULTITEXCOORD3FARBPROC glad_glMultiTexCoord3fARB; -PFNGLMULTITEXCOORD3FVARBPROC glad_glMultiTexCoord3fvARB; -PFNGLMULTITEXCOORD3IARBPROC glad_glMultiTexCoord3iARB; -PFNGLMULTITEXCOORD3IVARBPROC glad_glMultiTexCoord3ivARB; -PFNGLMULTITEXCOORD3SARBPROC glad_glMultiTexCoord3sARB; -PFNGLMULTITEXCOORD3SVARBPROC glad_glMultiTexCoord3svARB; -PFNGLMULTITEXCOORD4DARBPROC glad_glMultiTexCoord4dARB; -PFNGLMULTITEXCOORD4DVARBPROC glad_glMultiTexCoord4dvARB; -PFNGLMULTITEXCOORD4FARBPROC glad_glMultiTexCoord4fARB; -PFNGLMULTITEXCOORD4FVARBPROC glad_glMultiTexCoord4fvARB; -PFNGLMULTITEXCOORD4IARBPROC glad_glMultiTexCoord4iARB; -PFNGLMULTITEXCOORD4IVARBPROC glad_glMultiTexCoord4ivARB; -PFNGLMULTITEXCOORD4SARBPROC glad_glMultiTexCoord4sARB; -PFNGLMULTITEXCOORD4SVARBPROC glad_glMultiTexCoord4svARB; -PFNGLGENQUERIESARBPROC glad_glGenQueriesARB; -PFNGLDELETEQUERIESARBPROC glad_glDeleteQueriesARB; -PFNGLISQUERYARBPROC glad_glIsQueryARB; -PFNGLBEGINQUERYARBPROC glad_glBeginQueryARB; -PFNGLENDQUERYARBPROC glad_glEndQueryARB; -PFNGLGETQUERYIVARBPROC glad_glGetQueryivARB; -PFNGLGETQUERYOBJECTIVARBPROC glad_glGetQueryObjectivARB; -PFNGLGETQUERYOBJECTUIVARBPROC glad_glGetQueryObjectuivARB; -PFNGLMAXSHADERCOMPILERTHREADSARBPROC glad_glMaxShaderCompilerThreadsARB; -PFNGLPOINTPARAMETERFARBPROC glad_glPointParameterfARB; -PFNGLPOINTPARAMETERFVARBPROC glad_glPointParameterfvARB; -PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_glGetGraphicsResetStatusARB; -PFNGLGETNTEXIMAGEARBPROC glad_glGetnTexImageARB; -PFNGLREADNPIXELSARBPROC glad_glReadnPixelsARB; -PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_glGetnCompressedTexImageARB; -PFNGLGETNUNIFORMFVARBPROC glad_glGetnUniformfvARB; -PFNGLGETNUNIFORMIVARBPROC glad_glGetnUniformivARB; -PFNGLGETNUNIFORMUIVARBPROC glad_glGetnUniformuivARB; -PFNGLGETNUNIFORMDVARBPROC glad_glGetnUniformdvARB; -PFNGLGETNMAPDVARBPROC glad_glGetnMapdvARB; -PFNGLGETNMAPFVARBPROC glad_glGetnMapfvARB; -PFNGLGETNMAPIVARBPROC glad_glGetnMapivARB; -PFNGLGETNPIXELMAPFVARBPROC glad_glGetnPixelMapfvARB; -PFNGLGETNPIXELMAPUIVARBPROC glad_glGetnPixelMapuivARB; -PFNGLGETNPIXELMAPUSVARBPROC glad_glGetnPixelMapusvARB; -PFNGLGETNPOLYGONSTIPPLEARBPROC glad_glGetnPolygonStippleARB; -PFNGLGETNCOLORTABLEARBPROC glad_glGetnColorTableARB; -PFNGLGETNCONVOLUTIONFILTERARBPROC glad_glGetnConvolutionFilterARB; -PFNGLGETNSEPARABLEFILTERARBPROC glad_glGetnSeparableFilterARB; -PFNGLGETNHISTOGRAMARBPROC glad_glGetnHistogramARB; -PFNGLGETNMINMAXARBPROC glad_glGetnMinmaxARB; -PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB; -PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB; -PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB; -PFNGLMINSAMPLESHADINGARBPROC glad_glMinSampleShadingARB; -PFNGLDELETEOBJECTARBPROC glad_glDeleteObjectARB; -PFNGLGETHANDLEARBPROC glad_glGetHandleARB; -PFNGLDETACHOBJECTARBPROC glad_glDetachObjectARB; -PFNGLCREATESHADEROBJECTARBPROC glad_glCreateShaderObjectARB; -PFNGLSHADERSOURCEARBPROC glad_glShaderSourceARB; -PFNGLCOMPILESHADERARBPROC glad_glCompileShaderARB; -PFNGLCREATEPROGRAMOBJECTARBPROC glad_glCreateProgramObjectARB; -PFNGLATTACHOBJECTARBPROC glad_glAttachObjectARB; -PFNGLLINKPROGRAMARBPROC glad_glLinkProgramARB; -PFNGLUSEPROGRAMOBJECTARBPROC glad_glUseProgramObjectARB; -PFNGLVALIDATEPROGRAMARBPROC glad_glValidateProgramARB; -PFNGLUNIFORM1FARBPROC glad_glUniform1fARB; -PFNGLUNIFORM2FARBPROC glad_glUniform2fARB; -PFNGLUNIFORM3FARBPROC glad_glUniform3fARB; -PFNGLUNIFORM4FARBPROC glad_glUniform4fARB; -PFNGLUNIFORM1IARBPROC glad_glUniform1iARB; -PFNGLUNIFORM2IARBPROC glad_glUniform2iARB; -PFNGLUNIFORM3IARBPROC glad_glUniform3iARB; -PFNGLUNIFORM4IARBPROC glad_glUniform4iARB; -PFNGLUNIFORM1FVARBPROC glad_glUniform1fvARB; -PFNGLUNIFORM2FVARBPROC glad_glUniform2fvARB; -PFNGLUNIFORM3FVARBPROC glad_glUniform3fvARB; -PFNGLUNIFORM4FVARBPROC glad_glUniform4fvARB; -PFNGLUNIFORM1IVARBPROC glad_glUniform1ivARB; -PFNGLUNIFORM2IVARBPROC glad_glUniform2ivARB; -PFNGLUNIFORM3IVARBPROC glad_glUniform3ivARB; -PFNGLUNIFORM4IVARBPROC glad_glUniform4ivARB; -PFNGLUNIFORMMATRIX2FVARBPROC glad_glUniformMatrix2fvARB; -PFNGLUNIFORMMATRIX3FVARBPROC glad_glUniformMatrix3fvARB; -PFNGLUNIFORMMATRIX4FVARBPROC glad_glUniformMatrix4fvARB; -PFNGLGETOBJECTPARAMETERFVARBPROC glad_glGetObjectParameterfvARB; -PFNGLGETOBJECTPARAMETERIVARBPROC glad_glGetObjectParameterivARB; -PFNGLGETINFOLOGARBPROC glad_glGetInfoLogARB; -PFNGLGETATTACHEDOBJECTSARBPROC glad_glGetAttachedObjectsARB; -PFNGLGETUNIFORMLOCATIONARBPROC glad_glGetUniformLocationARB; -PFNGLGETACTIVEUNIFORMARBPROC glad_glGetActiveUniformARB; -PFNGLGETUNIFORMFVARBPROC glad_glGetUniformfvARB; -PFNGLGETUNIFORMIVARBPROC glad_glGetUniformivARB; -PFNGLGETSHADERSOURCEARBPROC glad_glGetShaderSourceARB; -PFNGLNAMEDSTRINGARBPROC glad_glNamedStringARB; -PFNGLDELETENAMEDSTRINGARBPROC glad_glDeleteNamedStringARB; -PFNGLCOMPILESHADERINCLUDEARBPROC glad_glCompileShaderIncludeARB; -PFNGLISNAMEDSTRINGARBPROC glad_glIsNamedStringARB; -PFNGLGETNAMEDSTRINGARBPROC glad_glGetNamedStringARB; -PFNGLGETNAMEDSTRINGIVARBPROC glad_glGetNamedStringivARB; -PFNGLBUFFERPAGECOMMITMENTARBPROC glad_glBufferPageCommitmentARB; -PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC glad_glNamedBufferPageCommitmentEXT; -PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC glad_glNamedBufferPageCommitmentARB; -PFNGLTEXPAGECOMMITMENTARBPROC glad_glTexPageCommitmentARB; -PFNGLTEXBUFFERARBPROC glad_glTexBufferARB; -PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB; -PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB; -PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB; -PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB; -PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB; -PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB; -PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB; -PFNGLLOADTRANSPOSEMATRIXFARBPROC glad_glLoadTransposeMatrixfARB; -PFNGLLOADTRANSPOSEMATRIXDARBPROC glad_glLoadTransposeMatrixdARB; -PFNGLMULTTRANSPOSEMATRIXFARBPROC glad_glMultTransposeMatrixfARB; -PFNGLMULTTRANSPOSEMATRIXDARBPROC glad_glMultTransposeMatrixdARB; -PFNGLWEIGHTBVARBPROC glad_glWeightbvARB; -PFNGLWEIGHTSVARBPROC glad_glWeightsvARB; -PFNGLWEIGHTIVARBPROC glad_glWeightivARB; -PFNGLWEIGHTFVARBPROC glad_glWeightfvARB; -PFNGLWEIGHTDVARBPROC glad_glWeightdvARB; -PFNGLWEIGHTUBVARBPROC glad_glWeightubvARB; -PFNGLWEIGHTUSVARBPROC glad_glWeightusvARB; -PFNGLWEIGHTUIVARBPROC glad_glWeightuivARB; -PFNGLWEIGHTPOINTERARBPROC glad_glWeightPointerARB; -PFNGLVERTEXBLENDARBPROC glad_glVertexBlendARB; -PFNGLBINDBUFFERARBPROC glad_glBindBufferARB; -PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB; -PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB; -PFNGLISBUFFERARBPROC glad_glIsBufferARB; -PFNGLBUFFERDATAARBPROC glad_glBufferDataARB; -PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB; -PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB; -PFNGLMAPBUFFERARBPROC glad_glMapBufferARB; -PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB; -PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB; -PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB; -PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB; -PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB; -PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB; -PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB; -PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB; -PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB; -PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB; -PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB; -PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB; -PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB; -PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB; -PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB; -PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB; -PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB; -PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB; -PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB; -PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB; -PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB; -PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB; -PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB; -PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB; -PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB; -PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB; -PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB; -PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB; -PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB; -PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB; -PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB; -PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB; -PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB; -PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB; -PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB; -PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB; -PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB; -PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB; -PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB; -PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB; -PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB; -PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB; -PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB; -PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB; -PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB; -PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB; -PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB; -PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB; -PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB; -PFNGLWINDOWPOS2DARBPROC glad_glWindowPos2dARB; -PFNGLWINDOWPOS2DVARBPROC glad_glWindowPos2dvARB; -PFNGLWINDOWPOS2FARBPROC glad_glWindowPos2fARB; -PFNGLWINDOWPOS2FVARBPROC glad_glWindowPos2fvARB; -PFNGLWINDOWPOS2IARBPROC glad_glWindowPos2iARB; -PFNGLWINDOWPOS2IVARBPROC glad_glWindowPos2ivARB; -PFNGLWINDOWPOS2SARBPROC glad_glWindowPos2sARB; -PFNGLWINDOWPOS2SVARBPROC glad_glWindowPos2svARB; -PFNGLWINDOWPOS3DARBPROC glad_glWindowPos3dARB; -PFNGLWINDOWPOS3DVARBPROC glad_glWindowPos3dvARB; -PFNGLWINDOWPOS3FARBPROC glad_glWindowPos3fARB; -PFNGLWINDOWPOS3FVARBPROC glad_glWindowPos3fvARB; -PFNGLWINDOWPOS3IARBPROC glad_glWindowPos3iARB; -PFNGLWINDOWPOS3IVARBPROC glad_glWindowPos3ivARB; -PFNGLWINDOWPOS3SARBPROC glad_glWindowPos3sARB; -PFNGLWINDOWPOS3SVARBPROC glad_glWindowPos3svARB; -PFNGLDRAWBUFFERSATIPROC glad_glDrawBuffersATI; -PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI; -PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI; -PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI; -PFNGLTEXBUMPPARAMETERIVATIPROC glad_glTexBumpParameterivATI; -PFNGLTEXBUMPPARAMETERFVATIPROC glad_glTexBumpParameterfvATI; -PFNGLGETTEXBUMPPARAMETERIVATIPROC glad_glGetTexBumpParameterivATI; -PFNGLGETTEXBUMPPARAMETERFVATIPROC glad_glGetTexBumpParameterfvATI; -PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI; -PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI; -PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI; -PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI; -PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI; -PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI; -PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI; -PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI; -PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI; -PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI; -PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI; -PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI; -PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI; -PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI; -PFNGLMAPOBJECTBUFFERATIPROC glad_glMapObjectBufferATI; -PFNGLUNMAPOBJECTBUFFERATIPROC glad_glUnmapObjectBufferATI; -PFNGLPNTRIANGLESIATIPROC glad_glPNTrianglesiATI; -PFNGLPNTRIANGLESFATIPROC glad_glPNTrianglesfATI; -PFNGLSTENCILOPSEPARATEATIPROC glad_glStencilOpSeparateATI; -PFNGLSTENCILFUNCSEPARATEATIPROC glad_glStencilFuncSeparateATI; -PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI; -PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI; -PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI; -PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI; -PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI; -PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI; -PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI; -PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI; -PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI; -PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI; -PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI; -PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI; -PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glad_glVertexAttribArrayObjectATI; -PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC glad_glGetVertexAttribArrayObjectfvATI; -PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC glad_glGetVertexAttribArrayObjectivATI; -PFNGLVERTEXSTREAM1SATIPROC glad_glVertexStream1sATI; -PFNGLVERTEXSTREAM1SVATIPROC glad_glVertexStream1svATI; -PFNGLVERTEXSTREAM1IATIPROC glad_glVertexStream1iATI; -PFNGLVERTEXSTREAM1IVATIPROC glad_glVertexStream1ivATI; -PFNGLVERTEXSTREAM1FATIPROC glad_glVertexStream1fATI; -PFNGLVERTEXSTREAM1FVATIPROC glad_glVertexStream1fvATI; -PFNGLVERTEXSTREAM1DATIPROC glad_glVertexStream1dATI; -PFNGLVERTEXSTREAM1DVATIPROC glad_glVertexStream1dvATI; -PFNGLVERTEXSTREAM2SATIPROC glad_glVertexStream2sATI; -PFNGLVERTEXSTREAM2SVATIPROC glad_glVertexStream2svATI; -PFNGLVERTEXSTREAM2IATIPROC glad_glVertexStream2iATI; -PFNGLVERTEXSTREAM2IVATIPROC glad_glVertexStream2ivATI; -PFNGLVERTEXSTREAM2FATIPROC glad_glVertexStream2fATI; -PFNGLVERTEXSTREAM2FVATIPROC glad_glVertexStream2fvATI; -PFNGLVERTEXSTREAM2DATIPROC glad_glVertexStream2dATI; -PFNGLVERTEXSTREAM2DVATIPROC glad_glVertexStream2dvATI; -PFNGLVERTEXSTREAM3SATIPROC glad_glVertexStream3sATI; -PFNGLVERTEXSTREAM3SVATIPROC glad_glVertexStream3svATI; -PFNGLVERTEXSTREAM3IATIPROC glad_glVertexStream3iATI; -PFNGLVERTEXSTREAM3IVATIPROC glad_glVertexStream3ivATI; -PFNGLVERTEXSTREAM3FATIPROC glad_glVertexStream3fATI; -PFNGLVERTEXSTREAM3FVATIPROC glad_glVertexStream3fvATI; -PFNGLVERTEXSTREAM3DATIPROC glad_glVertexStream3dATI; -PFNGLVERTEXSTREAM3DVATIPROC glad_glVertexStream3dvATI; -PFNGLVERTEXSTREAM4SATIPROC glad_glVertexStream4sATI; -PFNGLVERTEXSTREAM4SVATIPROC glad_glVertexStream4svATI; -PFNGLVERTEXSTREAM4IATIPROC glad_glVertexStream4iATI; -PFNGLVERTEXSTREAM4IVATIPROC glad_glVertexStream4ivATI; -PFNGLVERTEXSTREAM4FATIPROC glad_glVertexStream4fATI; -PFNGLVERTEXSTREAM4FVATIPROC glad_glVertexStream4fvATI; -PFNGLVERTEXSTREAM4DATIPROC glad_glVertexStream4dATI; -PFNGLVERTEXSTREAM4DVATIPROC glad_glVertexStream4dvATI; -PFNGLNORMALSTREAM3BATIPROC glad_glNormalStream3bATI; -PFNGLNORMALSTREAM3BVATIPROC glad_glNormalStream3bvATI; -PFNGLNORMALSTREAM3SATIPROC glad_glNormalStream3sATI; -PFNGLNORMALSTREAM3SVATIPROC glad_glNormalStream3svATI; -PFNGLNORMALSTREAM3IATIPROC glad_glNormalStream3iATI; -PFNGLNORMALSTREAM3IVATIPROC glad_glNormalStream3ivATI; -PFNGLNORMALSTREAM3FATIPROC glad_glNormalStream3fATI; -PFNGLNORMALSTREAM3FVATIPROC glad_glNormalStream3fvATI; -PFNGLNORMALSTREAM3DATIPROC glad_glNormalStream3dATI; -PFNGLNORMALSTREAM3DVATIPROC glad_glNormalStream3dvATI; -PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC glad_glClientActiveVertexStreamATI; -PFNGLVERTEXBLENDENVIATIPROC glad_glVertexBlendEnviATI; -PFNGLVERTEXBLENDENVFATIPROC glad_glVertexBlendEnvfATI; -PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC glad_glEGLImageTargetTexStorageEXT; -PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC glad_glEGLImageTargetTextureStorageEXT; -PFNGLUNIFORMBUFFEREXTPROC glad_glUniformBufferEXT; -PFNGLGETUNIFORMBUFFERSIZEEXTPROC glad_glGetUniformBufferSizeEXT; -PFNGLGETUNIFORMOFFSETEXTPROC glad_glGetUniformOffsetEXT; -PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT; -PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT; -PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT; -PFNGLBLENDEQUATIONEXTPROC glad_glBlendEquationEXT; -PFNGLCOLORSUBTABLEEXTPROC glad_glColorSubTableEXT; -PFNGLCOPYCOLORSUBTABLEEXTPROC glad_glCopyColorSubTableEXT; -PFNGLLOCKARRAYSEXTPROC glad_glLockArraysEXT; -PFNGLUNLOCKARRAYSEXTPROC glad_glUnlockArraysEXT; -PFNGLCONVOLUTIONFILTER1DEXTPROC glad_glConvolutionFilter1DEXT; -PFNGLCONVOLUTIONFILTER2DEXTPROC glad_glConvolutionFilter2DEXT; -PFNGLCONVOLUTIONPARAMETERFEXTPROC glad_glConvolutionParameterfEXT; -PFNGLCONVOLUTIONPARAMETERFVEXTPROC glad_glConvolutionParameterfvEXT; -PFNGLCONVOLUTIONPARAMETERIEXTPROC glad_glConvolutionParameteriEXT; -PFNGLCONVOLUTIONPARAMETERIVEXTPROC glad_glConvolutionParameterivEXT; -PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC glad_glCopyConvolutionFilter1DEXT; -PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC glad_glCopyConvolutionFilter2DEXT; -PFNGLGETCONVOLUTIONFILTEREXTPROC glad_glGetConvolutionFilterEXT; -PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC glad_glGetConvolutionParameterfvEXT; -PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC glad_glGetConvolutionParameterivEXT; -PFNGLGETSEPARABLEFILTEREXTPROC glad_glGetSeparableFilterEXT; -PFNGLSEPARABLEFILTER2DEXTPROC glad_glSeparableFilter2DEXT; -PFNGLTANGENT3BEXTPROC glad_glTangent3bEXT; -PFNGLTANGENT3BVEXTPROC glad_glTangent3bvEXT; -PFNGLTANGENT3DEXTPROC glad_glTangent3dEXT; -PFNGLTANGENT3DVEXTPROC glad_glTangent3dvEXT; -PFNGLTANGENT3FEXTPROC glad_glTangent3fEXT; -PFNGLTANGENT3FVEXTPROC glad_glTangent3fvEXT; -PFNGLTANGENT3IEXTPROC glad_glTangent3iEXT; -PFNGLTANGENT3IVEXTPROC glad_glTangent3ivEXT; -PFNGLTANGENT3SEXTPROC glad_glTangent3sEXT; -PFNGLTANGENT3SVEXTPROC glad_glTangent3svEXT; -PFNGLBINORMAL3BEXTPROC glad_glBinormal3bEXT; -PFNGLBINORMAL3BVEXTPROC glad_glBinormal3bvEXT; -PFNGLBINORMAL3DEXTPROC glad_glBinormal3dEXT; -PFNGLBINORMAL3DVEXTPROC glad_glBinormal3dvEXT; -PFNGLBINORMAL3FEXTPROC glad_glBinormal3fEXT; -PFNGLBINORMAL3FVEXTPROC glad_glBinormal3fvEXT; -PFNGLBINORMAL3IEXTPROC glad_glBinormal3iEXT; -PFNGLBINORMAL3IVEXTPROC glad_glBinormal3ivEXT; -PFNGLBINORMAL3SEXTPROC glad_glBinormal3sEXT; -PFNGLBINORMAL3SVEXTPROC glad_glBinormal3svEXT; -PFNGLTANGENTPOINTEREXTPROC glad_glTangentPointerEXT; -PFNGLBINORMALPOINTEREXTPROC glad_glBinormalPointerEXT; -PFNGLCOPYTEXIMAGE1DEXTPROC glad_glCopyTexImage1DEXT; -PFNGLCOPYTEXIMAGE2DEXTPROC glad_glCopyTexImage2DEXT; -PFNGLCOPYTEXSUBIMAGE1DEXTPROC glad_glCopyTexSubImage1DEXT; -PFNGLCOPYTEXSUBIMAGE2DEXTPROC glad_glCopyTexSubImage2DEXT; -PFNGLCOPYTEXSUBIMAGE3DEXTPROC glad_glCopyTexSubImage3DEXT; -PFNGLCULLPARAMETERDVEXTPROC glad_glCullParameterdvEXT; -PFNGLCULLPARAMETERFVEXTPROC glad_glCullParameterfvEXT; -PFNGLLABELOBJECTEXTPROC glad_glLabelObjectEXT; -PFNGLGETOBJECTLABELEXTPROC glad_glGetObjectLabelEXT; -PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT; -PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT; -PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT; -PFNGLDEPTHBOUNDSEXTPROC glad_glDepthBoundsEXT; -PFNGLMATRIXLOADFEXTPROC glad_glMatrixLoadfEXT; -PFNGLMATRIXLOADDEXTPROC glad_glMatrixLoaddEXT; -PFNGLMATRIXMULTFEXTPROC glad_glMatrixMultfEXT; -PFNGLMATRIXMULTDEXTPROC glad_glMatrixMultdEXT; -PFNGLMATRIXLOADIDENTITYEXTPROC glad_glMatrixLoadIdentityEXT; -PFNGLMATRIXROTATEFEXTPROC glad_glMatrixRotatefEXT; -PFNGLMATRIXROTATEDEXTPROC glad_glMatrixRotatedEXT; -PFNGLMATRIXSCALEFEXTPROC glad_glMatrixScalefEXT; -PFNGLMATRIXSCALEDEXTPROC glad_glMatrixScaledEXT; -PFNGLMATRIXTRANSLATEFEXTPROC glad_glMatrixTranslatefEXT; -PFNGLMATRIXTRANSLATEDEXTPROC glad_glMatrixTranslatedEXT; -PFNGLMATRIXFRUSTUMEXTPROC glad_glMatrixFrustumEXT; -PFNGLMATRIXORTHOEXTPROC glad_glMatrixOrthoEXT; -PFNGLMATRIXPOPEXTPROC glad_glMatrixPopEXT; -PFNGLMATRIXPUSHEXTPROC glad_glMatrixPushEXT; -PFNGLCLIENTATTRIBDEFAULTEXTPROC glad_glClientAttribDefaultEXT; -PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glad_glPushClientAttribDefaultEXT; -PFNGLTEXTUREPARAMETERFEXTPROC glad_glTextureParameterfEXT; -PFNGLTEXTUREPARAMETERFVEXTPROC glad_glTextureParameterfvEXT; -PFNGLTEXTUREPARAMETERIEXTPROC glad_glTextureParameteriEXT; -PFNGLTEXTUREPARAMETERIVEXTPROC glad_glTextureParameterivEXT; -PFNGLTEXTUREIMAGE1DEXTPROC glad_glTextureImage1DEXT; -PFNGLTEXTUREIMAGE2DEXTPROC glad_glTextureImage2DEXT; -PFNGLTEXTURESUBIMAGE1DEXTPROC glad_glTextureSubImage1DEXT; -PFNGLTEXTURESUBIMAGE2DEXTPROC glad_glTextureSubImage2DEXT; -PFNGLCOPYTEXTUREIMAGE1DEXTPROC glad_glCopyTextureImage1DEXT; -PFNGLCOPYTEXTUREIMAGE2DEXTPROC glad_glCopyTextureImage2DEXT; -PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glad_glCopyTextureSubImage1DEXT; -PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glad_glCopyTextureSubImage2DEXT; -PFNGLGETTEXTUREIMAGEEXTPROC glad_glGetTextureImageEXT; -PFNGLGETTEXTUREPARAMETERFVEXTPROC glad_glGetTextureParameterfvEXT; -PFNGLGETTEXTUREPARAMETERIVEXTPROC glad_glGetTextureParameterivEXT; -PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glad_glGetTextureLevelParameterfvEXT; -PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glad_glGetTextureLevelParameterivEXT; -PFNGLTEXTUREIMAGE3DEXTPROC glad_glTextureImage3DEXT; -PFNGLTEXTURESUBIMAGE3DEXTPROC glad_glTextureSubImage3DEXT; -PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glad_glCopyTextureSubImage3DEXT; -PFNGLBINDMULTITEXTUREEXTPROC glad_glBindMultiTextureEXT; -PFNGLMULTITEXCOORDPOINTEREXTPROC glad_glMultiTexCoordPointerEXT; -PFNGLMULTITEXENVFEXTPROC glad_glMultiTexEnvfEXT; -PFNGLMULTITEXENVFVEXTPROC glad_glMultiTexEnvfvEXT; -PFNGLMULTITEXENVIEXTPROC glad_glMultiTexEnviEXT; -PFNGLMULTITEXENVIVEXTPROC glad_glMultiTexEnvivEXT; -PFNGLMULTITEXGENDEXTPROC glad_glMultiTexGendEXT; -PFNGLMULTITEXGENDVEXTPROC glad_glMultiTexGendvEXT; -PFNGLMULTITEXGENFEXTPROC glad_glMultiTexGenfEXT; -PFNGLMULTITEXGENFVEXTPROC glad_glMultiTexGenfvEXT; -PFNGLMULTITEXGENIEXTPROC glad_glMultiTexGeniEXT; -PFNGLMULTITEXGENIVEXTPROC glad_glMultiTexGenivEXT; -PFNGLGETMULTITEXENVFVEXTPROC glad_glGetMultiTexEnvfvEXT; -PFNGLGETMULTITEXENVIVEXTPROC glad_glGetMultiTexEnvivEXT; -PFNGLGETMULTITEXGENDVEXTPROC glad_glGetMultiTexGendvEXT; -PFNGLGETMULTITEXGENFVEXTPROC glad_glGetMultiTexGenfvEXT; -PFNGLGETMULTITEXGENIVEXTPROC glad_glGetMultiTexGenivEXT; -PFNGLMULTITEXPARAMETERIEXTPROC glad_glMultiTexParameteriEXT; -PFNGLMULTITEXPARAMETERIVEXTPROC glad_glMultiTexParameterivEXT; -PFNGLMULTITEXPARAMETERFEXTPROC glad_glMultiTexParameterfEXT; -PFNGLMULTITEXPARAMETERFVEXTPROC glad_glMultiTexParameterfvEXT; -PFNGLMULTITEXIMAGE1DEXTPROC glad_glMultiTexImage1DEXT; -PFNGLMULTITEXIMAGE2DEXTPROC glad_glMultiTexImage2DEXT; -PFNGLMULTITEXSUBIMAGE1DEXTPROC glad_glMultiTexSubImage1DEXT; -PFNGLMULTITEXSUBIMAGE2DEXTPROC glad_glMultiTexSubImage2DEXT; -PFNGLCOPYMULTITEXIMAGE1DEXTPROC glad_glCopyMultiTexImage1DEXT; -PFNGLCOPYMULTITEXIMAGE2DEXTPROC glad_glCopyMultiTexImage2DEXT; -PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glad_glCopyMultiTexSubImage1DEXT; -PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glad_glCopyMultiTexSubImage2DEXT; -PFNGLGETMULTITEXIMAGEEXTPROC glad_glGetMultiTexImageEXT; -PFNGLGETMULTITEXPARAMETERFVEXTPROC glad_glGetMultiTexParameterfvEXT; -PFNGLGETMULTITEXPARAMETERIVEXTPROC glad_glGetMultiTexParameterivEXT; -PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glad_glGetMultiTexLevelParameterfvEXT; -PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glad_glGetMultiTexLevelParameterivEXT; -PFNGLMULTITEXIMAGE3DEXTPROC glad_glMultiTexImage3DEXT; -PFNGLMULTITEXSUBIMAGE3DEXTPROC glad_glMultiTexSubImage3DEXT; -PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glad_glCopyMultiTexSubImage3DEXT; -PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glad_glEnableClientStateIndexedEXT; -PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glad_glDisableClientStateIndexedEXT; -PFNGLGETFLOATINDEXEDVEXTPROC glad_glGetFloatIndexedvEXT; -PFNGLGETDOUBLEINDEXEDVEXTPROC glad_glGetDoubleIndexedvEXT; -PFNGLGETPOINTERINDEXEDVEXTPROC glad_glGetPointerIndexedvEXT; -PFNGLENABLEINDEXEDEXTPROC glad_glEnableIndexedEXT; -PFNGLDISABLEINDEXEDEXTPROC glad_glDisableIndexedEXT; -PFNGLISENABLEDINDEXEDEXTPROC glad_glIsEnabledIndexedEXT; -PFNGLGETINTEGERINDEXEDVEXTPROC glad_glGetIntegerIndexedvEXT; -PFNGLGETBOOLEANINDEXEDVEXTPROC glad_glGetBooleanIndexedvEXT; -PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glad_glCompressedTextureImage3DEXT; -PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glad_glCompressedTextureImage2DEXT; -PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glad_glCompressedTextureImage1DEXT; -PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glad_glCompressedTextureSubImage3DEXT; -PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glad_glCompressedTextureSubImage2DEXT; -PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glad_glCompressedTextureSubImage1DEXT; -PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glad_glGetCompressedTextureImageEXT; -PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glad_glCompressedMultiTexImage3DEXT; -PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glad_glCompressedMultiTexImage2DEXT; -PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glad_glCompressedMultiTexImage1DEXT; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glad_glCompressedMultiTexSubImage3DEXT; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glad_glCompressedMultiTexSubImage2DEXT; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glad_glCompressedMultiTexSubImage1DEXT; -PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glad_glGetCompressedMultiTexImageEXT; -PFNGLMATRIXLOADTRANSPOSEFEXTPROC glad_glMatrixLoadTransposefEXT; -PFNGLMATRIXLOADTRANSPOSEDEXTPROC glad_glMatrixLoadTransposedEXT; -PFNGLMATRIXMULTTRANSPOSEFEXTPROC glad_glMatrixMultTransposefEXT; -PFNGLMATRIXMULTTRANSPOSEDEXTPROC glad_glMatrixMultTransposedEXT; -PFNGLNAMEDBUFFERDATAEXTPROC glad_glNamedBufferDataEXT; -PFNGLNAMEDBUFFERSUBDATAEXTPROC glad_glNamedBufferSubDataEXT; -PFNGLMAPNAMEDBUFFEREXTPROC glad_glMapNamedBufferEXT; -PFNGLUNMAPNAMEDBUFFEREXTPROC glad_glUnmapNamedBufferEXT; -PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glad_glGetNamedBufferParameterivEXT; -PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glad_glGetNamedBufferPointervEXT; -PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glad_glGetNamedBufferSubDataEXT; -PFNGLPROGRAMUNIFORM1FEXTPROC glad_glProgramUniform1fEXT; -PFNGLPROGRAMUNIFORM2FEXTPROC glad_glProgramUniform2fEXT; -PFNGLPROGRAMUNIFORM3FEXTPROC glad_glProgramUniform3fEXT; -PFNGLPROGRAMUNIFORM4FEXTPROC glad_glProgramUniform4fEXT; -PFNGLPROGRAMUNIFORM1IEXTPROC glad_glProgramUniform1iEXT; -PFNGLPROGRAMUNIFORM2IEXTPROC glad_glProgramUniform2iEXT; -PFNGLPROGRAMUNIFORM3IEXTPROC glad_glProgramUniform3iEXT; -PFNGLPROGRAMUNIFORM4IEXTPROC glad_glProgramUniform4iEXT; -PFNGLPROGRAMUNIFORM1FVEXTPROC glad_glProgramUniform1fvEXT; -PFNGLPROGRAMUNIFORM2FVEXTPROC glad_glProgramUniform2fvEXT; -PFNGLPROGRAMUNIFORM3FVEXTPROC glad_glProgramUniform3fvEXT; -PFNGLPROGRAMUNIFORM4FVEXTPROC glad_glProgramUniform4fvEXT; -PFNGLPROGRAMUNIFORM1IVEXTPROC glad_glProgramUniform1ivEXT; -PFNGLPROGRAMUNIFORM2IVEXTPROC glad_glProgramUniform2ivEXT; -PFNGLPROGRAMUNIFORM3IVEXTPROC glad_glProgramUniform3ivEXT; -PFNGLPROGRAMUNIFORM4IVEXTPROC glad_glProgramUniform4ivEXT; -PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glad_glProgramUniformMatrix2fvEXT; -PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glad_glProgramUniformMatrix3fvEXT; -PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glad_glProgramUniformMatrix4fvEXT; -PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glad_glProgramUniformMatrix2x3fvEXT; -PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glad_glProgramUniformMatrix3x2fvEXT; -PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glad_glProgramUniformMatrix2x4fvEXT; -PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glad_glProgramUniformMatrix4x2fvEXT; -PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glad_glProgramUniformMatrix3x4fvEXT; -PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glad_glProgramUniformMatrix4x3fvEXT; -PFNGLTEXTUREBUFFEREXTPROC glad_glTextureBufferEXT; -PFNGLMULTITEXBUFFEREXTPROC glad_glMultiTexBufferEXT; -PFNGLTEXTUREPARAMETERIIVEXTPROC glad_glTextureParameterIivEXT; -PFNGLTEXTUREPARAMETERIUIVEXTPROC glad_glTextureParameterIuivEXT; -PFNGLGETTEXTUREPARAMETERIIVEXTPROC glad_glGetTextureParameterIivEXT; -PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glad_glGetTextureParameterIuivEXT; -PFNGLMULTITEXPARAMETERIIVEXTPROC glad_glMultiTexParameterIivEXT; -PFNGLMULTITEXPARAMETERIUIVEXTPROC glad_glMultiTexParameterIuivEXT; -PFNGLGETMULTITEXPARAMETERIIVEXTPROC glad_glGetMultiTexParameterIivEXT; -PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glad_glGetMultiTexParameterIuivEXT; -PFNGLPROGRAMUNIFORM1UIEXTPROC glad_glProgramUniform1uiEXT; -PFNGLPROGRAMUNIFORM2UIEXTPROC glad_glProgramUniform2uiEXT; -PFNGLPROGRAMUNIFORM3UIEXTPROC glad_glProgramUniform3uiEXT; -PFNGLPROGRAMUNIFORM4UIEXTPROC glad_glProgramUniform4uiEXT; -PFNGLPROGRAMUNIFORM1UIVEXTPROC glad_glProgramUniform1uivEXT; -PFNGLPROGRAMUNIFORM2UIVEXTPROC glad_glProgramUniform2uivEXT; -PFNGLPROGRAMUNIFORM3UIVEXTPROC glad_glProgramUniform3uivEXT; -PFNGLPROGRAMUNIFORM4UIVEXTPROC glad_glProgramUniform4uivEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glNamedProgramLocalParameters4fvEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glad_glNamedProgramLocalParameterI4iEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glad_glNamedProgramLocalParameterI4ivEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glad_glNamedProgramLocalParametersI4ivEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glad_glNamedProgramLocalParameterI4uiEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glad_glNamedProgramLocalParameterI4uivEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glad_glNamedProgramLocalParametersI4uivEXT; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glad_glGetNamedProgramLocalParameterIivEXT; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glad_glGetNamedProgramLocalParameterIuivEXT; -PFNGLENABLECLIENTSTATEIEXTPROC glad_glEnableClientStateiEXT; -PFNGLDISABLECLIENTSTATEIEXTPROC glad_glDisableClientStateiEXT; -PFNGLGETFLOATI_VEXTPROC glad_glGetFloati_vEXT; -PFNGLGETDOUBLEI_VEXTPROC glad_glGetDoublei_vEXT; -PFNGLGETPOINTERI_VEXTPROC glad_glGetPointeri_vEXT; -PFNGLNAMEDPROGRAMSTRINGEXTPROC glad_glNamedProgramStringEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glad_glNamedProgramLocalParameter4dEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glad_glNamedProgramLocalParameter4dvEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glad_glNamedProgramLocalParameter4fEXT; -PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glad_glNamedProgramLocalParameter4fvEXT; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glad_glGetNamedProgramLocalParameterdvEXT; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glad_glGetNamedProgramLocalParameterfvEXT; -PFNGLGETNAMEDPROGRAMIVEXTPROC glad_glGetNamedProgramivEXT; -PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glad_glGetNamedProgramStringEXT; -PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glad_glNamedRenderbufferStorageEXT; -PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glad_glGetNamedRenderbufferParameterivEXT; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glNamedRenderbufferStorageMultisampleEXT; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glad_glNamedRenderbufferStorageMultisampleCoverageEXT; -PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glad_glCheckNamedFramebufferStatusEXT; -PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glad_glNamedFramebufferTexture1DEXT; -PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glad_glNamedFramebufferTexture2DEXT; -PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glad_glNamedFramebufferTexture3DEXT; -PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glad_glNamedFramebufferRenderbufferEXT; -PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetNamedFramebufferAttachmentParameterivEXT; -PFNGLGENERATETEXTUREMIPMAPEXTPROC glad_glGenerateTextureMipmapEXT; -PFNGLGENERATEMULTITEXMIPMAPEXTPROC glad_glGenerateMultiTexMipmapEXT; -PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glad_glFramebufferDrawBufferEXT; -PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glad_glFramebufferDrawBuffersEXT; -PFNGLFRAMEBUFFERREADBUFFEREXTPROC glad_glFramebufferReadBufferEXT; -PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetFramebufferParameterivEXT; -PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glad_glNamedCopyBufferSubDataEXT; -PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glad_glNamedFramebufferTextureEXT; -PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glad_glNamedFramebufferTextureLayerEXT; -PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glad_glNamedFramebufferTextureFaceEXT; -PFNGLTEXTURERENDERBUFFEREXTPROC glad_glTextureRenderbufferEXT; -PFNGLMULTITEXRENDERBUFFEREXTPROC glad_glMultiTexRenderbufferEXT; -PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glad_glVertexArrayVertexOffsetEXT; -PFNGLVERTEXARRAYCOLOROFFSETEXTPROC glad_glVertexArrayColorOffsetEXT; -PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC glad_glVertexArrayEdgeFlagOffsetEXT; -PFNGLVERTEXARRAYINDEXOFFSETEXTPROC glad_glVertexArrayIndexOffsetEXT; -PFNGLVERTEXARRAYNORMALOFFSETEXTPROC glad_glVertexArrayNormalOffsetEXT; -PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC glad_glVertexArrayTexCoordOffsetEXT; -PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC glad_glVertexArrayMultiTexCoordOffsetEXT; -PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC glad_glVertexArrayFogCoordOffsetEXT; -PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC glad_glVertexArraySecondaryColorOffsetEXT; -PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glad_glVertexArrayVertexAttribOffsetEXT; -PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glad_glVertexArrayVertexAttribIOffsetEXT; -PFNGLENABLEVERTEXARRAYEXTPROC glad_glEnableVertexArrayEXT; -PFNGLDISABLEVERTEXARRAYEXTPROC glad_glDisableVertexArrayEXT; -PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glad_glEnableVertexArrayAttribEXT; -PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glad_glDisableVertexArrayAttribEXT; -PFNGLGETVERTEXARRAYINTEGERVEXTPROC glad_glGetVertexArrayIntegervEXT; -PFNGLGETVERTEXARRAYPOINTERVEXTPROC glad_glGetVertexArrayPointervEXT; -PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glad_glGetVertexArrayIntegeri_vEXT; -PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glad_glGetVertexArrayPointeri_vEXT; -PFNGLMAPNAMEDBUFFERRANGEEXTPROC glad_glMapNamedBufferRangeEXT; -PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glad_glFlushMappedNamedBufferRangeEXT; -PFNGLNAMEDBUFFERSTORAGEEXTPROC glad_glNamedBufferStorageEXT; -PFNGLCLEARNAMEDBUFFERDATAEXTPROC glad_glClearNamedBufferDataEXT; -PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glad_glClearNamedBufferSubDataEXT; -PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glad_glNamedFramebufferParameteriEXT; -PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetNamedFramebufferParameterivEXT; -PFNGLPROGRAMUNIFORM1DEXTPROC glad_glProgramUniform1dEXT; -PFNGLPROGRAMUNIFORM2DEXTPROC glad_glProgramUniform2dEXT; -PFNGLPROGRAMUNIFORM3DEXTPROC glad_glProgramUniform3dEXT; -PFNGLPROGRAMUNIFORM4DEXTPROC glad_glProgramUniform4dEXT; -PFNGLPROGRAMUNIFORM1DVEXTPROC glad_glProgramUniform1dvEXT; -PFNGLPROGRAMUNIFORM2DVEXTPROC glad_glProgramUniform2dvEXT; -PFNGLPROGRAMUNIFORM3DVEXTPROC glad_glProgramUniform3dvEXT; -PFNGLPROGRAMUNIFORM4DVEXTPROC glad_glProgramUniform4dvEXT; -PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glad_glProgramUniformMatrix2dvEXT; -PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glad_glProgramUniformMatrix3dvEXT; -PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glad_glProgramUniformMatrix4dvEXT; -PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glad_glProgramUniformMatrix2x3dvEXT; -PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glad_glProgramUniformMatrix2x4dvEXT; -PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glad_glProgramUniformMatrix3x2dvEXT; -PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glad_glProgramUniformMatrix3x4dvEXT; -PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glad_glProgramUniformMatrix4x2dvEXT; -PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glad_glProgramUniformMatrix4x3dvEXT; -PFNGLTEXTUREBUFFERRANGEEXTPROC glad_glTextureBufferRangeEXT; -PFNGLTEXTURESTORAGE1DEXTPROC glad_glTextureStorage1DEXT; -PFNGLTEXTURESTORAGE2DEXTPROC glad_glTextureStorage2DEXT; -PFNGLTEXTURESTORAGE3DEXTPROC glad_glTextureStorage3DEXT; -PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glad_glTextureStorage2DMultisampleEXT; -PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glad_glTextureStorage3DMultisampleEXT; -PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glad_glVertexArrayBindVertexBufferEXT; -PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glad_glVertexArrayVertexAttribFormatEXT; -PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glad_glVertexArrayVertexAttribIFormatEXT; -PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glad_glVertexArrayVertexAttribLFormatEXT; -PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glad_glVertexArrayVertexAttribBindingEXT; -PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glad_glVertexArrayVertexBindingDivisorEXT; -PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glad_glVertexArrayVertexAttribLOffsetEXT; -PFNGLTEXTUREPAGECOMMITMENTEXTPROC glad_glTexturePageCommitmentEXT; -PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glad_glVertexArrayVertexAttribDivisorEXT; -PFNGLCOLORMASKINDEXEDEXTPROC glad_glColorMaskIndexedEXT; -PFNGLDRAWARRAYSINSTANCEDEXTPROC glad_glDrawArraysInstancedEXT; -PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT; -PFNGLDRAWRANGEELEMENTSEXTPROC glad_glDrawRangeElementsEXT; -PFNGLBUFFERSTORAGEEXTERNALEXTPROC glad_glBufferStorageExternalEXT; -PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC glad_glNamedBufferStorageExternalEXT; -PFNGLFOGCOORDFEXTPROC glad_glFogCoordfEXT; -PFNGLFOGCOORDFVEXTPROC glad_glFogCoordfvEXT; -PFNGLFOGCOORDDEXTPROC glad_glFogCoorddEXT; -PFNGLFOGCOORDDVEXTPROC glad_glFogCoorddvEXT; -PFNGLFOGCOORDPOINTEREXTPROC glad_glFogCoordPointerEXT; -PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; -PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; -PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; -PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; -PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; -PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; -PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; -PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; -PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; -PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; -PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; -PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; -PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; -PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; -PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; -PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; -PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; -PFNGLPROGRAMPARAMETERIEXTPROC glad_glProgramParameteriEXT; -PFNGLPROGRAMENVPARAMETERS4FVEXTPROC glad_glProgramEnvParameters4fvEXT; -PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glProgramLocalParameters4fvEXT; -PFNGLGETUNIFORMUIVEXTPROC glad_glGetUniformuivEXT; -PFNGLBINDFRAGDATALOCATIONEXTPROC glad_glBindFragDataLocationEXT; -PFNGLGETFRAGDATALOCATIONEXTPROC glad_glGetFragDataLocationEXT; -PFNGLUNIFORM1UIEXTPROC glad_glUniform1uiEXT; -PFNGLUNIFORM2UIEXTPROC glad_glUniform2uiEXT; -PFNGLUNIFORM3UIEXTPROC glad_glUniform3uiEXT; -PFNGLUNIFORM4UIEXTPROC glad_glUniform4uiEXT; -PFNGLUNIFORM1UIVEXTPROC glad_glUniform1uivEXT; -PFNGLUNIFORM2UIVEXTPROC glad_glUniform2uivEXT; -PFNGLUNIFORM3UIVEXTPROC glad_glUniform3uivEXT; -PFNGLUNIFORM4UIVEXTPROC glad_glUniform4uivEXT; -PFNGLGETHISTOGRAMEXTPROC glad_glGetHistogramEXT; -PFNGLGETHISTOGRAMPARAMETERFVEXTPROC glad_glGetHistogramParameterfvEXT; -PFNGLGETHISTOGRAMPARAMETERIVEXTPROC glad_glGetHistogramParameterivEXT; -PFNGLGETMINMAXEXTPROC glad_glGetMinmaxEXT; -PFNGLGETMINMAXPARAMETERFVEXTPROC glad_glGetMinmaxParameterfvEXT; -PFNGLGETMINMAXPARAMETERIVEXTPROC glad_glGetMinmaxParameterivEXT; -PFNGLHISTOGRAMEXTPROC glad_glHistogramEXT; -PFNGLMINMAXEXTPROC glad_glMinmaxEXT; -PFNGLRESETHISTOGRAMEXTPROC glad_glResetHistogramEXT; -PFNGLRESETMINMAXEXTPROC glad_glResetMinmaxEXT; -PFNGLINDEXFUNCEXTPROC glad_glIndexFuncEXT; -PFNGLINDEXMATERIALEXTPROC glad_glIndexMaterialEXT; -PFNGLAPPLYTEXTUREEXTPROC glad_glApplyTextureEXT; -PFNGLTEXTURELIGHTEXTPROC glad_glTextureLightEXT; -PFNGLTEXTUREMATERIALEXTPROC glad_glTextureMaterialEXT; -PFNGLGETUNSIGNEDBYTEVEXTPROC glad_glGetUnsignedBytevEXT; -PFNGLGETUNSIGNEDBYTEI_VEXTPROC glad_glGetUnsignedBytei_vEXT; -PFNGLDELETEMEMORYOBJECTSEXTPROC glad_glDeleteMemoryObjectsEXT; -PFNGLISMEMORYOBJECTEXTPROC glad_glIsMemoryObjectEXT; -PFNGLCREATEMEMORYOBJECTSEXTPROC glad_glCreateMemoryObjectsEXT; -PFNGLMEMORYOBJECTPARAMETERIVEXTPROC glad_glMemoryObjectParameterivEXT; -PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC glad_glGetMemoryObjectParameterivEXT; -PFNGLTEXSTORAGEMEM2DEXTPROC glad_glTexStorageMem2DEXT; -PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTexStorageMem2DMultisampleEXT; -PFNGLTEXSTORAGEMEM3DEXTPROC glad_glTexStorageMem3DEXT; -PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTexStorageMem3DMultisampleEXT; -PFNGLBUFFERSTORAGEMEMEXTPROC glad_glBufferStorageMemEXT; -PFNGLTEXTURESTORAGEMEM2DEXTPROC glad_glTextureStorageMem2DEXT; -PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC glad_glTextureStorageMem2DMultisampleEXT; -PFNGLTEXTURESTORAGEMEM3DEXTPROC glad_glTextureStorageMem3DEXT; -PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC glad_glTextureStorageMem3DMultisampleEXT; -PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC glad_glNamedBufferStorageMemEXT; -PFNGLTEXSTORAGEMEM1DEXTPROC glad_glTexStorageMem1DEXT; -PFNGLTEXTURESTORAGEMEM1DEXTPROC glad_glTextureStorageMem1DEXT; -PFNGLIMPORTMEMORYFDEXTPROC glad_glImportMemoryFdEXT; -PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC glad_glImportMemoryWin32HandleEXT; -PFNGLIMPORTMEMORYWIN32NAMEEXTPROC glad_glImportMemoryWin32NameEXT; -PFNGLMULTIDRAWARRAYSEXTPROC glad_glMultiDrawArraysEXT; -PFNGLMULTIDRAWELEMENTSEXTPROC glad_glMultiDrawElementsEXT; -PFNGLSAMPLEMASKEXTPROC glad_glSampleMaskEXT; -PFNGLSAMPLEPATTERNEXTPROC glad_glSamplePatternEXT; -PFNGLCOLORTABLEEXTPROC glad_glColorTableEXT; -PFNGLGETCOLORTABLEEXTPROC glad_glGetColorTableEXT; -PFNGLGETCOLORTABLEPARAMETERIVEXTPROC glad_glGetColorTableParameterivEXT; -PFNGLGETCOLORTABLEPARAMETERFVEXTPROC glad_glGetColorTableParameterfvEXT; -PFNGLPIXELTRANSFORMPARAMETERIEXTPROC glad_glPixelTransformParameteriEXT; -PFNGLPIXELTRANSFORMPARAMETERFEXTPROC glad_glPixelTransformParameterfEXT; -PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC glad_glPixelTransformParameterivEXT; -PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC glad_glPixelTransformParameterfvEXT; -PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC glad_glGetPixelTransformParameterivEXT; -PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC glad_glGetPixelTransformParameterfvEXT; -PFNGLPOINTPARAMETERFEXTPROC glad_glPointParameterfEXT; -PFNGLPOINTPARAMETERFVEXTPROC glad_glPointParameterfvEXT; -PFNGLPOLYGONOFFSETEXTPROC glad_glPolygonOffsetEXT; -PFNGLPOLYGONOFFSETCLAMPEXTPROC glad_glPolygonOffsetClampEXT; -PFNGLPROVOKINGVERTEXEXTPROC glad_glProvokingVertexEXT; -PFNGLRASTERSAMPLESEXTPROC glad_glRasterSamplesEXT; -PFNGLSECONDARYCOLOR3BEXTPROC glad_glSecondaryColor3bEXT; -PFNGLSECONDARYCOLOR3BVEXTPROC glad_glSecondaryColor3bvEXT; -PFNGLSECONDARYCOLOR3DEXTPROC glad_glSecondaryColor3dEXT; -PFNGLSECONDARYCOLOR3DVEXTPROC glad_glSecondaryColor3dvEXT; -PFNGLSECONDARYCOLOR3FEXTPROC glad_glSecondaryColor3fEXT; -PFNGLSECONDARYCOLOR3FVEXTPROC glad_glSecondaryColor3fvEXT; -PFNGLSECONDARYCOLOR3IEXTPROC glad_glSecondaryColor3iEXT; -PFNGLSECONDARYCOLOR3IVEXTPROC glad_glSecondaryColor3ivEXT; -PFNGLSECONDARYCOLOR3SEXTPROC glad_glSecondaryColor3sEXT; -PFNGLSECONDARYCOLOR3SVEXTPROC glad_glSecondaryColor3svEXT; -PFNGLSECONDARYCOLOR3UBEXTPROC glad_glSecondaryColor3ubEXT; -PFNGLSECONDARYCOLOR3UBVEXTPROC glad_glSecondaryColor3ubvEXT; -PFNGLSECONDARYCOLOR3UIEXTPROC glad_glSecondaryColor3uiEXT; -PFNGLSECONDARYCOLOR3UIVEXTPROC glad_glSecondaryColor3uivEXT; -PFNGLSECONDARYCOLOR3USEXTPROC glad_glSecondaryColor3usEXT; -PFNGLSECONDARYCOLOR3USVEXTPROC glad_glSecondaryColor3usvEXT; -PFNGLSECONDARYCOLORPOINTEREXTPROC glad_glSecondaryColorPointerEXT; -PFNGLGENSEMAPHORESEXTPROC glad_glGenSemaphoresEXT; -PFNGLDELETESEMAPHORESEXTPROC glad_glDeleteSemaphoresEXT; -PFNGLISSEMAPHOREEXTPROC glad_glIsSemaphoreEXT; -PFNGLSEMAPHOREPARAMETERUI64VEXTPROC glad_glSemaphoreParameterui64vEXT; -PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC glad_glGetSemaphoreParameterui64vEXT; -PFNGLWAITSEMAPHOREEXTPROC glad_glWaitSemaphoreEXT; -PFNGLSIGNALSEMAPHOREEXTPROC glad_glSignalSemaphoreEXT; -PFNGLIMPORTSEMAPHOREFDEXTPROC glad_glImportSemaphoreFdEXT; -PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC glad_glImportSemaphoreWin32HandleEXT; -PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC glad_glImportSemaphoreWin32NameEXT; -PFNGLUSESHADERPROGRAMEXTPROC glad_glUseShaderProgramEXT; -PFNGLACTIVEPROGRAMEXTPROC glad_glActiveProgramEXT; -PFNGLCREATESHADERPROGRAMEXTPROC glad_glCreateShaderProgramEXT; -PFNGLACTIVESHADERPROGRAMEXTPROC glad_glActiveShaderProgramEXT; -PFNGLBINDPROGRAMPIPELINEEXTPROC glad_glBindProgramPipelineEXT; -PFNGLCREATESHADERPROGRAMVEXTPROC glad_glCreateShaderProgramvEXT; -PFNGLDELETEPROGRAMPIPELINESEXTPROC glad_glDeleteProgramPipelinesEXT; -PFNGLGENPROGRAMPIPELINESEXTPROC glad_glGenProgramPipelinesEXT; -PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC glad_glGetProgramPipelineInfoLogEXT; -PFNGLGETPROGRAMPIPELINEIVEXTPROC glad_glGetProgramPipelineivEXT; -PFNGLISPROGRAMPIPELINEEXTPROC glad_glIsProgramPipelineEXT; -PFNGLUSEPROGRAMSTAGESEXTPROC glad_glUseProgramStagesEXT; -PFNGLVALIDATEPROGRAMPIPELINEEXTPROC glad_glValidateProgramPipelineEXT; -PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC glad_glFramebufferFetchBarrierEXT; -PFNGLBINDIMAGETEXTUREEXTPROC glad_glBindImageTextureEXT; -PFNGLMEMORYBARRIEREXTPROC glad_glMemoryBarrierEXT; -PFNGLSTENCILCLEARTAGEXTPROC glad_glStencilClearTagEXT; -PFNGLACTIVESTENCILFACEEXTPROC glad_glActiveStencilFaceEXT; -PFNGLTEXSUBIMAGE1DEXTPROC glad_glTexSubImage1DEXT; -PFNGLTEXSUBIMAGE2DEXTPROC glad_glTexSubImage2DEXT; -PFNGLTEXIMAGE3DEXTPROC glad_glTexImage3DEXT; -PFNGLTEXSUBIMAGE3DEXTPROC glad_glTexSubImage3DEXT; -PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glad_glFramebufferTextureLayerEXT; -PFNGLTEXBUFFEREXTPROC glad_glTexBufferEXT; -PFNGLTEXPARAMETERIIVEXTPROC glad_glTexParameterIivEXT; -PFNGLTEXPARAMETERIUIVEXTPROC glad_glTexParameterIuivEXT; -PFNGLGETTEXPARAMETERIIVEXTPROC glad_glGetTexParameterIivEXT; -PFNGLGETTEXPARAMETERIUIVEXTPROC glad_glGetTexParameterIuivEXT; -PFNGLCLEARCOLORIIEXTPROC glad_glClearColorIiEXT; -PFNGLCLEARCOLORIUIEXTPROC glad_glClearColorIuiEXT; -PFNGLARETEXTURESRESIDENTEXTPROC glad_glAreTexturesResidentEXT; -PFNGLBINDTEXTUREEXTPROC glad_glBindTextureEXT; -PFNGLDELETETEXTURESEXTPROC glad_glDeleteTexturesEXT; -PFNGLGENTEXTURESEXTPROC glad_glGenTexturesEXT; -PFNGLISTEXTUREEXTPROC glad_glIsTextureEXT; -PFNGLPRIORITIZETEXTURESEXTPROC glad_glPrioritizeTexturesEXT; -PFNGLTEXTURENORMALEXTPROC glad_glTextureNormalEXT; -PFNGLGETQUERYOBJECTI64VEXTPROC glad_glGetQueryObjecti64vEXT; -PFNGLGETQUERYOBJECTUI64VEXTPROC glad_glGetQueryObjectui64vEXT; -PFNGLBEGINTRANSFORMFEEDBACKEXTPROC glad_glBeginTransformFeedbackEXT; -PFNGLENDTRANSFORMFEEDBACKEXTPROC glad_glEndTransformFeedbackEXT; -PFNGLBINDBUFFERRANGEEXTPROC glad_glBindBufferRangeEXT; -PFNGLBINDBUFFEROFFSETEXTPROC glad_glBindBufferOffsetEXT; -PFNGLBINDBUFFERBASEEXTPROC glad_glBindBufferBaseEXT; -PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC glad_glTransformFeedbackVaryingsEXT; -PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC glad_glGetTransformFeedbackVaryingEXT; -PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT; -PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT; -PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT; -PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT; -PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT; -PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT; -PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT; -PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT; -PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT; -PFNGLVERTEXATTRIBL1DEXTPROC glad_glVertexAttribL1dEXT; -PFNGLVERTEXATTRIBL2DEXTPROC glad_glVertexAttribL2dEXT; -PFNGLVERTEXATTRIBL3DEXTPROC glad_glVertexAttribL3dEXT; -PFNGLVERTEXATTRIBL4DEXTPROC glad_glVertexAttribL4dEXT; -PFNGLVERTEXATTRIBL1DVEXTPROC glad_glVertexAttribL1dvEXT; -PFNGLVERTEXATTRIBL2DVEXTPROC glad_glVertexAttribL2dvEXT; -PFNGLVERTEXATTRIBL3DVEXTPROC glad_glVertexAttribL3dvEXT; -PFNGLVERTEXATTRIBL4DVEXTPROC glad_glVertexAttribL4dvEXT; -PFNGLVERTEXATTRIBLPOINTEREXTPROC glad_glVertexAttribLPointerEXT; -PFNGLGETVERTEXATTRIBLDVEXTPROC glad_glGetVertexAttribLdvEXT; -PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT; -PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT; -PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT; -PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT; -PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT; -PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT; -PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT; -PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT; -PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT; -PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT; -PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT; -PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT; -PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT; -PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT; -PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT; -PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT; -PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT; -PFNGLVARIANTIVEXTPROC glad_glVariantivEXT; -PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT; -PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT; -PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT; -PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT; -PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT; -PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT; -PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT; -PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT; -PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT; -PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT; -PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT; -PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT; -PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT; -PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT; -PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT; -PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT; -PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT; -PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT; -PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT; -PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT; -PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT; -PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT; -PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT; -PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT; -PFNGLVERTEXWEIGHTFEXTPROC glad_glVertexWeightfEXT; -PFNGLVERTEXWEIGHTFVEXTPROC glad_glVertexWeightfvEXT; -PFNGLVERTEXWEIGHTPOINTEREXTPROC glad_glVertexWeightPointerEXT; -PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC glad_glAcquireKeyedMutexWin32EXT; -PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC glad_glReleaseKeyedMutexWin32EXT; -PFNGLWINDOWRECTANGLESEXTPROC glad_glWindowRectanglesEXT; -PFNGLIMPORTSYNCEXTPROC glad_glImportSyncEXT; -PFNGLFRAMETERMINATORGREMEDYPROC glad_glFrameTerminatorGREMEDY; -PFNGLSTRINGMARKERGREMEDYPROC glad_glStringMarkerGREMEDY; -PFNGLIMAGETRANSFORMPARAMETERIHPPROC glad_glImageTransformParameteriHP; -PFNGLIMAGETRANSFORMPARAMETERFHPPROC glad_glImageTransformParameterfHP; -PFNGLIMAGETRANSFORMPARAMETERIVHPPROC glad_glImageTransformParameterivHP; -PFNGLIMAGETRANSFORMPARAMETERFVHPPROC glad_glImageTransformParameterfvHP; -PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC glad_glGetImageTransformParameterivHP; -PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC glad_glGetImageTransformParameterfvHP; -PFNGLMULTIMODEDRAWARRAYSIBMPROC glad_glMultiModeDrawArraysIBM; -PFNGLMULTIMODEDRAWELEMENTSIBMPROC glad_glMultiModeDrawElementsIBM; -PFNGLFLUSHSTATICDATAIBMPROC glad_glFlushStaticDataIBM; -PFNGLCOLORPOINTERLISTIBMPROC glad_glColorPointerListIBM; -PFNGLSECONDARYCOLORPOINTERLISTIBMPROC glad_glSecondaryColorPointerListIBM; -PFNGLEDGEFLAGPOINTERLISTIBMPROC glad_glEdgeFlagPointerListIBM; -PFNGLFOGCOORDPOINTERLISTIBMPROC glad_glFogCoordPointerListIBM; -PFNGLINDEXPOINTERLISTIBMPROC glad_glIndexPointerListIBM; -PFNGLNORMALPOINTERLISTIBMPROC glad_glNormalPointerListIBM; -PFNGLTEXCOORDPOINTERLISTIBMPROC glad_glTexCoordPointerListIBM; -PFNGLVERTEXPOINTERLISTIBMPROC glad_glVertexPointerListIBM; -PFNGLBLENDFUNCSEPARATEINGRPROC glad_glBlendFuncSeparateINGR; -PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC glad_glApplyFramebufferAttachmentCMAAINTEL; -PFNGLSYNCTEXTUREINTELPROC glad_glSyncTextureINTEL; -PFNGLUNMAPTEXTURE2DINTELPROC glad_glUnmapTexture2DINTEL; -PFNGLMAPTEXTURE2DINTELPROC glad_glMapTexture2DINTEL; -PFNGLVERTEXPOINTERVINTELPROC glad_glVertexPointervINTEL; -PFNGLNORMALPOINTERVINTELPROC glad_glNormalPointervINTEL; -PFNGLCOLORPOINTERVINTELPROC glad_glColorPointervINTEL; -PFNGLTEXCOORDPOINTERVINTELPROC glad_glTexCoordPointervINTEL; -PFNGLBEGINPERFQUERYINTELPROC glad_glBeginPerfQueryINTEL; -PFNGLCREATEPERFQUERYINTELPROC glad_glCreatePerfQueryINTEL; -PFNGLDELETEPERFQUERYINTELPROC glad_glDeletePerfQueryINTEL; -PFNGLENDPERFQUERYINTELPROC glad_glEndPerfQueryINTEL; -PFNGLGETFIRSTPERFQUERYIDINTELPROC glad_glGetFirstPerfQueryIdINTEL; -PFNGLGETNEXTPERFQUERYIDINTELPROC glad_glGetNextPerfQueryIdINTEL; -PFNGLGETPERFCOUNTERINFOINTELPROC glad_glGetPerfCounterInfoINTEL; -PFNGLGETPERFQUERYDATAINTELPROC glad_glGetPerfQueryDataINTEL; -PFNGLGETPERFQUERYIDBYNAMEINTELPROC glad_glGetPerfQueryIdByNameINTEL; -PFNGLGETPERFQUERYINFOINTELPROC glad_glGetPerfQueryInfoINTEL; -PFNGLBLENDBARRIERKHRPROC glad_glBlendBarrierKHR; -PFNGLDEBUGMESSAGECONTROLKHRPROC glad_glDebugMessageControlKHR; -PFNGLDEBUGMESSAGEINSERTKHRPROC glad_glDebugMessageInsertKHR; -PFNGLDEBUGMESSAGECALLBACKKHRPROC glad_glDebugMessageCallbackKHR; -PFNGLGETDEBUGMESSAGELOGKHRPROC glad_glGetDebugMessageLogKHR; -PFNGLPUSHDEBUGGROUPKHRPROC glad_glPushDebugGroupKHR; -PFNGLPOPDEBUGGROUPKHRPROC glad_glPopDebugGroupKHR; -PFNGLOBJECTLABELKHRPROC glad_glObjectLabelKHR; -PFNGLGETOBJECTLABELKHRPROC glad_glGetObjectLabelKHR; -PFNGLOBJECTPTRLABELKHRPROC glad_glObjectPtrLabelKHR; -PFNGLGETOBJECTPTRLABELKHRPROC glad_glGetObjectPtrLabelKHR; -PFNGLGETPOINTERVKHRPROC glad_glGetPointervKHR; -PFNGLMAXSHADERCOMPILERTHREADSKHRPROC glad_glMaxShaderCompilerThreadsKHR; -PFNGLGETGRAPHICSRESETSTATUSKHRPROC glad_glGetGraphicsResetStatusKHR; -PFNGLREADNPIXELSKHRPROC glad_glReadnPixelsKHR; -PFNGLGETNUNIFORMFVKHRPROC glad_glGetnUniformfvKHR; -PFNGLGETNUNIFORMIVKHRPROC glad_glGetnUniformivKHR; -PFNGLGETNUNIFORMUIVKHRPROC glad_glGetnUniformuivKHR; -PFNGLRESIZEBUFFERSMESAPROC glad_glResizeBuffersMESA; -PFNGLWINDOWPOS2DMESAPROC glad_glWindowPos2dMESA; -PFNGLWINDOWPOS2DVMESAPROC glad_glWindowPos2dvMESA; -PFNGLWINDOWPOS2FMESAPROC glad_glWindowPos2fMESA; -PFNGLWINDOWPOS2FVMESAPROC glad_glWindowPos2fvMESA; -PFNGLWINDOWPOS2IMESAPROC glad_glWindowPos2iMESA; -PFNGLWINDOWPOS2IVMESAPROC glad_glWindowPos2ivMESA; -PFNGLWINDOWPOS2SMESAPROC glad_glWindowPos2sMESA; -PFNGLWINDOWPOS2SVMESAPROC glad_glWindowPos2svMESA; -PFNGLWINDOWPOS3DMESAPROC glad_glWindowPos3dMESA; -PFNGLWINDOWPOS3DVMESAPROC glad_glWindowPos3dvMESA; -PFNGLWINDOWPOS3FMESAPROC glad_glWindowPos3fMESA; -PFNGLWINDOWPOS3FVMESAPROC glad_glWindowPos3fvMESA; -PFNGLWINDOWPOS3IMESAPROC glad_glWindowPos3iMESA; -PFNGLWINDOWPOS3IVMESAPROC glad_glWindowPos3ivMESA; -PFNGLWINDOWPOS3SMESAPROC glad_glWindowPos3sMESA; -PFNGLWINDOWPOS3SVMESAPROC glad_glWindowPos3svMESA; -PFNGLWINDOWPOS4DMESAPROC glad_glWindowPos4dMESA; -PFNGLWINDOWPOS4DVMESAPROC glad_glWindowPos4dvMESA; -PFNGLWINDOWPOS4FMESAPROC glad_glWindowPos4fMESA; -PFNGLWINDOWPOS4FVMESAPROC glad_glWindowPos4fvMESA; -PFNGLWINDOWPOS4IMESAPROC glad_glWindowPos4iMESA; -PFNGLWINDOWPOS4IVMESAPROC glad_glWindowPos4ivMESA; -PFNGLWINDOWPOS4SMESAPROC glad_glWindowPos4sMESA; -PFNGLWINDOWPOS4SVMESAPROC glad_glWindowPos4svMESA; -PFNGLBEGINCONDITIONALRENDERNVXPROC glad_glBeginConditionalRenderNVX; -PFNGLENDCONDITIONALRENDERNVXPROC glad_glEndConditionalRenderNVX; -PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC glad_glLGPUNamedBufferSubDataNVX; -PFNGLLGPUCOPYIMAGESUBDATANVXPROC glad_glLGPUCopyImageSubDataNVX; -PFNGLLGPUINTERLOCKNVXPROC glad_glLGPUInterlockNVX; -PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC glad_glAlphaToCoverageDitherControlNV; -PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC glad_glMultiDrawArraysIndirectBindlessNV; -PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glad_glMultiDrawElementsIndirectBindlessNV; -PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawArraysIndirectBindlessCountNV; -PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawElementsIndirectBindlessCountNV; -PFNGLGETTEXTUREHANDLENVPROC glad_glGetTextureHandleNV; -PFNGLGETTEXTURESAMPLERHANDLENVPROC glad_glGetTextureSamplerHandleNV; -PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glad_glMakeTextureHandleResidentNV; -PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glad_glMakeTextureHandleNonResidentNV; -PFNGLGETIMAGEHANDLENVPROC glad_glGetImageHandleNV; -PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glad_glMakeImageHandleResidentNV; -PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glad_glMakeImageHandleNonResidentNV; -PFNGLUNIFORMHANDLEUI64NVPROC glad_glUniformHandleui64NV; -PFNGLUNIFORMHANDLEUI64VNVPROC glad_glUniformHandleui64vNV; -PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glad_glProgramUniformHandleui64NV; -PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glad_glProgramUniformHandleui64vNV; -PFNGLISTEXTUREHANDLERESIDENTNVPROC glad_glIsTextureHandleResidentNV; -PFNGLISIMAGEHANDLERESIDENTNVPROC glad_glIsImageHandleResidentNV; -PFNGLBLENDPARAMETERINVPROC glad_glBlendParameteriNV; -PFNGLBLENDBARRIERNVPROC glad_glBlendBarrierNV; -PFNGLVIEWPORTPOSITIONWSCALENVPROC glad_glViewportPositionWScaleNV; -PFNGLCREATESTATESNVPROC glad_glCreateStatesNV; -PFNGLDELETESTATESNVPROC glad_glDeleteStatesNV; -PFNGLISSTATENVPROC glad_glIsStateNV; -PFNGLSTATECAPTURENVPROC glad_glStateCaptureNV; -PFNGLGETCOMMANDHEADERNVPROC glad_glGetCommandHeaderNV; -PFNGLGETSTAGEINDEXNVPROC glad_glGetStageIndexNV; -PFNGLDRAWCOMMANDSNVPROC glad_glDrawCommandsNV; -PFNGLDRAWCOMMANDSADDRESSNVPROC glad_glDrawCommandsAddressNV; -PFNGLDRAWCOMMANDSSTATESNVPROC glad_glDrawCommandsStatesNV; -PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC glad_glDrawCommandsStatesAddressNV; -PFNGLCREATECOMMANDLISTSNVPROC glad_glCreateCommandListsNV; -PFNGLDELETECOMMANDLISTSNVPROC glad_glDeleteCommandListsNV; -PFNGLISCOMMANDLISTNVPROC glad_glIsCommandListNV; -PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC glad_glListDrawCommandsStatesClientNV; -PFNGLCOMMANDLISTSEGMENTSNVPROC glad_glCommandListSegmentsNV; -PFNGLCOMPILECOMMANDLISTNVPROC glad_glCompileCommandListNV; -PFNGLCALLCOMMANDLISTNVPROC glad_glCallCommandListNV; -PFNGLBEGINCONDITIONALRENDERNVPROC glad_glBeginConditionalRenderNV; -PFNGLENDCONDITIONALRENDERNVPROC glad_glEndConditionalRenderNV; -PFNGLSUBPIXELPRECISIONBIASNVPROC glad_glSubpixelPrecisionBiasNV; -PFNGLCONSERVATIVERASTERPARAMETERFNVPROC glad_glConservativeRasterParameterfNV; -PFNGLCONSERVATIVERASTERPARAMETERINVPROC glad_glConservativeRasterParameteriNV; -PFNGLCOPYIMAGESUBDATANVPROC glad_glCopyImageSubDataNV; -PFNGLDEPTHRANGEDNVPROC glad_glDepthRangedNV; -PFNGLCLEARDEPTHDNVPROC glad_glClearDepthdNV; -PFNGLDEPTHBOUNDSDNVPROC glad_glDepthBoundsdNV; -PFNGLDRAWTEXTURENVPROC glad_glDrawTextureNV; -PFNGLDRAWVKIMAGENVPROC glad_glDrawVkImageNV; -PFNGLGETVKPROCADDRNVPROC glad_glGetVkProcAddrNV; -PFNGLWAITVKSEMAPHORENVPROC glad_glWaitVkSemaphoreNV; -PFNGLSIGNALVKSEMAPHORENVPROC glad_glSignalVkSemaphoreNV; -PFNGLSIGNALVKFENCENVPROC glad_glSignalVkFenceNV; -PFNGLMAPCONTROLPOINTSNVPROC glad_glMapControlPointsNV; -PFNGLMAPPARAMETERIVNVPROC glad_glMapParameterivNV; -PFNGLMAPPARAMETERFVNVPROC glad_glMapParameterfvNV; -PFNGLGETMAPCONTROLPOINTSNVPROC glad_glGetMapControlPointsNV; -PFNGLGETMAPPARAMETERIVNVPROC glad_glGetMapParameterivNV; -PFNGLGETMAPPARAMETERFVNVPROC glad_glGetMapParameterfvNV; -PFNGLGETMAPATTRIBPARAMETERIVNVPROC glad_glGetMapAttribParameterivNV; -PFNGLGETMAPATTRIBPARAMETERFVNVPROC glad_glGetMapAttribParameterfvNV; -PFNGLEVALMAPSNVPROC glad_glEvalMapsNV; -PFNGLGETMULTISAMPLEFVNVPROC glad_glGetMultisamplefvNV; -PFNGLSAMPLEMASKINDEXEDNVPROC glad_glSampleMaskIndexedNV; -PFNGLTEXRENDERBUFFERNVPROC glad_glTexRenderbufferNV; -PFNGLDELETEFENCESNVPROC glad_glDeleteFencesNV; -PFNGLGENFENCESNVPROC glad_glGenFencesNV; -PFNGLISFENCENVPROC glad_glIsFenceNV; -PFNGLTESTFENCENVPROC glad_glTestFenceNV; -PFNGLGETFENCEIVNVPROC glad_glGetFenceivNV; -PFNGLFINISHFENCENVPROC glad_glFinishFenceNV; -PFNGLSETFENCENVPROC glad_glSetFenceNV; -PFNGLFRAGMENTCOVERAGECOLORNVPROC glad_glFragmentCoverageColorNV; -PFNGLPROGRAMNAMEDPARAMETER4FNVPROC glad_glProgramNamedParameter4fNV; -PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC glad_glProgramNamedParameter4fvNV; -PFNGLPROGRAMNAMEDPARAMETER4DNVPROC glad_glProgramNamedParameter4dNV; -PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC glad_glProgramNamedParameter4dvNV; -PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC glad_glGetProgramNamedParameterfvNV; -PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC glad_glGetProgramNamedParameterdvNV; -PFNGLCOVERAGEMODULATIONTABLENVPROC glad_glCoverageModulationTableNV; -PFNGLGETCOVERAGEMODULATIONTABLENVPROC glad_glGetCoverageModulationTableNV; -PFNGLCOVERAGEMODULATIONNVPROC glad_glCoverageModulationNV; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glad_glRenderbufferStorageMultisampleCoverageNV; -PFNGLPROGRAMVERTEXLIMITNVPROC glad_glProgramVertexLimitNV; -PFNGLFRAMEBUFFERTEXTUREEXTPROC glad_glFramebufferTextureEXT; -PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC glad_glFramebufferTextureFaceEXT; -PFNGLRENDERGPUMASKNVPROC glad_glRenderGpuMaskNV; -PFNGLMULTICASTBUFFERSUBDATANVPROC glad_glMulticastBufferSubDataNV; -PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC glad_glMulticastCopyBufferSubDataNV; -PFNGLMULTICASTCOPYIMAGESUBDATANVPROC glad_glMulticastCopyImageSubDataNV; -PFNGLMULTICASTBLITFRAMEBUFFERNVPROC glad_glMulticastBlitFramebufferNV; -PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glMulticastFramebufferSampleLocationsfvNV; -PFNGLMULTICASTBARRIERNVPROC glad_glMulticastBarrierNV; -PFNGLMULTICASTWAITSYNCNVPROC glad_glMulticastWaitSyncNV; -PFNGLMULTICASTGETQUERYOBJECTIVNVPROC glad_glMulticastGetQueryObjectivNV; -PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC glad_glMulticastGetQueryObjectuivNV; -PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC glad_glMulticastGetQueryObjecti64vNV; -PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC glad_glMulticastGetQueryObjectui64vNV; -PFNGLPROGRAMLOCALPARAMETERI4INVPROC glad_glProgramLocalParameterI4iNV; -PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC glad_glProgramLocalParameterI4ivNV; -PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC glad_glProgramLocalParametersI4ivNV; -PFNGLPROGRAMLOCALPARAMETERI4UINVPROC glad_glProgramLocalParameterI4uiNV; -PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC glad_glProgramLocalParameterI4uivNV; -PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC glad_glProgramLocalParametersI4uivNV; -PFNGLPROGRAMENVPARAMETERI4INVPROC glad_glProgramEnvParameterI4iNV; -PFNGLPROGRAMENVPARAMETERI4IVNVPROC glad_glProgramEnvParameterI4ivNV; -PFNGLPROGRAMENVPARAMETERSI4IVNVPROC glad_glProgramEnvParametersI4ivNV; -PFNGLPROGRAMENVPARAMETERI4UINVPROC glad_glProgramEnvParameterI4uiNV; -PFNGLPROGRAMENVPARAMETERI4UIVNVPROC glad_glProgramEnvParameterI4uivNV; -PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC glad_glProgramEnvParametersI4uivNV; -PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC glad_glGetProgramLocalParameterIivNV; -PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC glad_glGetProgramLocalParameterIuivNV; -PFNGLGETPROGRAMENVPARAMETERIIVNVPROC glad_glGetProgramEnvParameterIivNV; -PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC glad_glGetProgramEnvParameterIuivNV; -PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC glad_glProgramSubroutineParametersuivNV; -PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC glad_glGetProgramSubroutineParameteruivNV; -PFNGLVERTEX2HNVPROC glad_glVertex2hNV; -PFNGLVERTEX2HVNVPROC glad_glVertex2hvNV; -PFNGLVERTEX3HNVPROC glad_glVertex3hNV; -PFNGLVERTEX3HVNVPROC glad_glVertex3hvNV; -PFNGLVERTEX4HNVPROC glad_glVertex4hNV; -PFNGLVERTEX4HVNVPROC glad_glVertex4hvNV; -PFNGLNORMAL3HNVPROC glad_glNormal3hNV; -PFNGLNORMAL3HVNVPROC glad_glNormal3hvNV; -PFNGLCOLOR3HNVPROC glad_glColor3hNV; -PFNGLCOLOR3HVNVPROC glad_glColor3hvNV; -PFNGLCOLOR4HNVPROC glad_glColor4hNV; -PFNGLCOLOR4HVNVPROC glad_glColor4hvNV; -PFNGLTEXCOORD1HNVPROC glad_glTexCoord1hNV; -PFNGLTEXCOORD1HVNVPROC glad_glTexCoord1hvNV; -PFNGLTEXCOORD2HNVPROC glad_glTexCoord2hNV; -PFNGLTEXCOORD2HVNVPROC glad_glTexCoord2hvNV; -PFNGLTEXCOORD3HNVPROC glad_glTexCoord3hNV; -PFNGLTEXCOORD3HVNVPROC glad_glTexCoord3hvNV; -PFNGLTEXCOORD4HNVPROC glad_glTexCoord4hNV; -PFNGLTEXCOORD4HVNVPROC glad_glTexCoord4hvNV; -PFNGLMULTITEXCOORD1HNVPROC glad_glMultiTexCoord1hNV; -PFNGLMULTITEXCOORD1HVNVPROC glad_glMultiTexCoord1hvNV; -PFNGLMULTITEXCOORD2HNVPROC glad_glMultiTexCoord2hNV; -PFNGLMULTITEXCOORD2HVNVPROC glad_glMultiTexCoord2hvNV; -PFNGLMULTITEXCOORD3HNVPROC glad_glMultiTexCoord3hNV; -PFNGLMULTITEXCOORD3HVNVPROC glad_glMultiTexCoord3hvNV; -PFNGLMULTITEXCOORD4HNVPROC glad_glMultiTexCoord4hNV; -PFNGLMULTITEXCOORD4HVNVPROC glad_glMultiTexCoord4hvNV; -PFNGLFOGCOORDHNVPROC glad_glFogCoordhNV; -PFNGLFOGCOORDHVNVPROC glad_glFogCoordhvNV; -PFNGLSECONDARYCOLOR3HNVPROC glad_glSecondaryColor3hNV; -PFNGLSECONDARYCOLOR3HVNVPROC glad_glSecondaryColor3hvNV; -PFNGLVERTEXWEIGHTHNVPROC glad_glVertexWeighthNV; -PFNGLVERTEXWEIGHTHVNVPROC glad_glVertexWeighthvNV; -PFNGLVERTEXATTRIB1HNVPROC glad_glVertexAttrib1hNV; -PFNGLVERTEXATTRIB1HVNVPROC glad_glVertexAttrib1hvNV; -PFNGLVERTEXATTRIB2HNVPROC glad_glVertexAttrib2hNV; -PFNGLVERTEXATTRIB2HVNVPROC glad_glVertexAttrib2hvNV; -PFNGLVERTEXATTRIB3HNVPROC glad_glVertexAttrib3hNV; -PFNGLVERTEXATTRIB3HVNVPROC glad_glVertexAttrib3hvNV; -PFNGLVERTEXATTRIB4HNVPROC glad_glVertexAttrib4hNV; -PFNGLVERTEXATTRIB4HVNVPROC glad_glVertexAttrib4hvNV; -PFNGLVERTEXATTRIBS1HVNVPROC glad_glVertexAttribs1hvNV; -PFNGLVERTEXATTRIBS2HVNVPROC glad_glVertexAttribs2hvNV; -PFNGLVERTEXATTRIBS3HVNVPROC glad_glVertexAttribs3hvNV; -PFNGLVERTEXATTRIBS4HVNVPROC glad_glVertexAttribs4hvNV; -PFNGLGETINTERNALFORMATSAMPLEIVNVPROC glad_glGetInternalformatSampleivNV; -PFNGLGENOCCLUSIONQUERIESNVPROC glad_glGenOcclusionQueriesNV; -PFNGLDELETEOCCLUSIONQUERIESNVPROC glad_glDeleteOcclusionQueriesNV; -PFNGLISOCCLUSIONQUERYNVPROC glad_glIsOcclusionQueryNV; -PFNGLBEGINOCCLUSIONQUERYNVPROC glad_glBeginOcclusionQueryNV; -PFNGLENDOCCLUSIONQUERYNVPROC glad_glEndOcclusionQueryNV; -PFNGLGETOCCLUSIONQUERYIVNVPROC glad_glGetOcclusionQueryivNV; -PFNGLGETOCCLUSIONQUERYUIVNVPROC glad_glGetOcclusionQueryuivNV; -PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC glad_glProgramBufferParametersfvNV; -PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC glad_glProgramBufferParametersIivNV; -PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC glad_glProgramBufferParametersIuivNV; -PFNGLGENPATHSNVPROC glad_glGenPathsNV; -PFNGLDELETEPATHSNVPROC glad_glDeletePathsNV; -PFNGLISPATHNVPROC glad_glIsPathNV; -PFNGLPATHCOMMANDSNVPROC glad_glPathCommandsNV; -PFNGLPATHCOORDSNVPROC glad_glPathCoordsNV; -PFNGLPATHSUBCOMMANDSNVPROC glad_glPathSubCommandsNV; -PFNGLPATHSUBCOORDSNVPROC glad_glPathSubCoordsNV; -PFNGLPATHSTRINGNVPROC glad_glPathStringNV; -PFNGLPATHGLYPHSNVPROC glad_glPathGlyphsNV; -PFNGLPATHGLYPHRANGENVPROC glad_glPathGlyphRangeNV; -PFNGLWEIGHTPATHSNVPROC glad_glWeightPathsNV; -PFNGLCOPYPATHNVPROC glad_glCopyPathNV; -PFNGLINTERPOLATEPATHSNVPROC glad_glInterpolatePathsNV; -PFNGLTRANSFORMPATHNVPROC glad_glTransformPathNV; -PFNGLPATHPARAMETERIVNVPROC glad_glPathParameterivNV; -PFNGLPATHPARAMETERINVPROC glad_glPathParameteriNV; -PFNGLPATHPARAMETERFVNVPROC glad_glPathParameterfvNV; -PFNGLPATHPARAMETERFNVPROC glad_glPathParameterfNV; -PFNGLPATHDASHARRAYNVPROC glad_glPathDashArrayNV; -PFNGLPATHSTENCILFUNCNVPROC glad_glPathStencilFuncNV; -PFNGLPATHSTENCILDEPTHOFFSETNVPROC glad_glPathStencilDepthOffsetNV; -PFNGLSTENCILFILLPATHNVPROC glad_glStencilFillPathNV; -PFNGLSTENCILSTROKEPATHNVPROC glad_glStencilStrokePathNV; -PFNGLSTENCILFILLPATHINSTANCEDNVPROC glad_glStencilFillPathInstancedNV; -PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glad_glStencilStrokePathInstancedNV; -PFNGLPATHCOVERDEPTHFUNCNVPROC glad_glPathCoverDepthFuncNV; -PFNGLCOVERFILLPATHNVPROC glad_glCoverFillPathNV; -PFNGLCOVERSTROKEPATHNVPROC glad_glCoverStrokePathNV; -PFNGLCOVERFILLPATHINSTANCEDNVPROC glad_glCoverFillPathInstancedNV; -PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glad_glCoverStrokePathInstancedNV; -PFNGLGETPATHPARAMETERIVNVPROC glad_glGetPathParameterivNV; -PFNGLGETPATHPARAMETERFVNVPROC glad_glGetPathParameterfvNV; -PFNGLGETPATHCOMMANDSNVPROC glad_glGetPathCommandsNV; -PFNGLGETPATHCOORDSNVPROC glad_glGetPathCoordsNV; -PFNGLGETPATHDASHARRAYNVPROC glad_glGetPathDashArrayNV; -PFNGLGETPATHMETRICSNVPROC glad_glGetPathMetricsNV; -PFNGLGETPATHMETRICRANGENVPROC glad_glGetPathMetricRangeNV; -PFNGLGETPATHSPACINGNVPROC glad_glGetPathSpacingNV; -PFNGLISPOINTINFILLPATHNVPROC glad_glIsPointInFillPathNV; -PFNGLISPOINTINSTROKEPATHNVPROC glad_glIsPointInStrokePathNV; -PFNGLGETPATHLENGTHNVPROC glad_glGetPathLengthNV; -PFNGLPOINTALONGPATHNVPROC glad_glPointAlongPathNV; -PFNGLMATRIXLOAD3X2FNVPROC glad_glMatrixLoad3x2fNV; -PFNGLMATRIXLOAD3X3FNVPROC glad_glMatrixLoad3x3fNV; -PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC glad_glMatrixLoadTranspose3x3fNV; -PFNGLMATRIXMULT3X2FNVPROC glad_glMatrixMult3x2fNV; -PFNGLMATRIXMULT3X3FNVPROC glad_glMatrixMult3x3fNV; -PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC glad_glMatrixMultTranspose3x3fNV; -PFNGLSTENCILTHENCOVERFILLPATHNVPROC glad_glStencilThenCoverFillPathNV; -PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC glad_glStencilThenCoverStrokePathNV; -PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC glad_glStencilThenCoverFillPathInstancedNV; -PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC glad_glStencilThenCoverStrokePathInstancedNV; -PFNGLPATHGLYPHINDEXRANGENVPROC glad_glPathGlyphIndexRangeNV; -PFNGLPATHGLYPHINDEXARRAYNVPROC glad_glPathGlyphIndexArrayNV; -PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC glad_glPathMemoryGlyphIndexArrayNV; -PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC glad_glProgramPathFragmentInputGenNV; -PFNGLGETPROGRAMRESOURCEFVNVPROC glad_glGetProgramResourcefvNV; -PFNGLPATHCOLORGENNVPROC glad_glPathColorGenNV; -PFNGLPATHTEXGENNVPROC glad_glPathTexGenNV; -PFNGLPATHFOGGENNVPROC glad_glPathFogGenNV; -PFNGLGETPATHCOLORGENIVNVPROC glad_glGetPathColorGenivNV; -PFNGLGETPATHCOLORGENFVNVPROC glad_glGetPathColorGenfvNV; -PFNGLGETPATHTEXGENIVNVPROC glad_glGetPathTexGenivNV; -PFNGLGETPATHTEXGENFVNVPROC glad_glGetPathTexGenfvNV; -PFNGLPIXELDATARANGENVPROC glad_glPixelDataRangeNV; -PFNGLFLUSHPIXELDATARANGENVPROC glad_glFlushPixelDataRangeNV; -PFNGLPOINTPARAMETERINVPROC glad_glPointParameteriNV; -PFNGLPOINTPARAMETERIVNVPROC glad_glPointParameterivNV; -PFNGLPRESENTFRAMEKEYEDNVPROC glad_glPresentFrameKeyedNV; -PFNGLPRESENTFRAMEDUALFILLNVPROC glad_glPresentFrameDualFillNV; -PFNGLGETVIDEOIVNVPROC glad_glGetVideoivNV; -PFNGLGETVIDEOUIVNVPROC glad_glGetVideouivNV; -PFNGLGETVIDEOI64VNVPROC glad_glGetVideoi64vNV; -PFNGLGETVIDEOUI64VNVPROC glad_glGetVideoui64vNV; -PFNGLPRIMITIVERESTARTNVPROC glad_glPrimitiveRestartNV; -PFNGLPRIMITIVERESTARTINDEXNVPROC glad_glPrimitiveRestartIndexNV; -PFNGLQUERYRESOURCENVPROC glad_glQueryResourceNV; -PFNGLGENQUERYRESOURCETAGNVPROC glad_glGenQueryResourceTagNV; -PFNGLDELETEQUERYRESOURCETAGNVPROC glad_glDeleteQueryResourceTagNV; -PFNGLQUERYRESOURCETAGNVPROC glad_glQueryResourceTagNV; -PFNGLCOMBINERPARAMETERFVNVPROC glad_glCombinerParameterfvNV; -PFNGLCOMBINERPARAMETERFNVPROC glad_glCombinerParameterfNV; -PFNGLCOMBINERPARAMETERIVNVPROC glad_glCombinerParameterivNV; -PFNGLCOMBINERPARAMETERINVPROC glad_glCombinerParameteriNV; -PFNGLCOMBINERINPUTNVPROC glad_glCombinerInputNV; -PFNGLCOMBINEROUTPUTNVPROC glad_glCombinerOutputNV; -PFNGLFINALCOMBINERINPUTNVPROC glad_glFinalCombinerInputNV; -PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glad_glGetCombinerInputParameterfvNV; -PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glad_glGetCombinerInputParameterivNV; -PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glad_glGetCombinerOutputParameterfvNV; -PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glad_glGetCombinerOutputParameterivNV; -PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glad_glGetFinalCombinerInputParameterfvNV; -PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glad_glGetFinalCombinerInputParameterivNV; -PFNGLCOMBINERSTAGEPARAMETERFVNVPROC glad_glCombinerStageParameterfvNV; -PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC glad_glGetCombinerStageParameterfvNV; -PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glFramebufferSampleLocationsfvNV; -PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glNamedFramebufferSampleLocationsfvNV; -PFNGLRESOLVEDEPTHVALUESNVPROC glad_glResolveDepthValuesNV; -PFNGLMAKEBUFFERRESIDENTNVPROC glad_glMakeBufferResidentNV; -PFNGLMAKEBUFFERNONRESIDENTNVPROC glad_glMakeBufferNonResidentNV; -PFNGLISBUFFERRESIDENTNVPROC glad_glIsBufferResidentNV; -PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glad_glMakeNamedBufferResidentNV; -PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glad_glMakeNamedBufferNonResidentNV; -PFNGLISNAMEDBUFFERRESIDENTNVPROC glad_glIsNamedBufferResidentNV; -PFNGLGETBUFFERPARAMETERUI64VNVPROC glad_glGetBufferParameterui64vNV; -PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glad_glGetNamedBufferParameterui64vNV; -PFNGLGETINTEGERUI64VNVPROC glad_glGetIntegerui64vNV; -PFNGLUNIFORMUI64NVPROC glad_glUniformui64NV; -PFNGLUNIFORMUI64VNVPROC glad_glUniformui64vNV; -PFNGLPROGRAMUNIFORMUI64NVPROC glad_glProgramUniformui64NV; -PFNGLPROGRAMUNIFORMUI64VNVPROC glad_glProgramUniformui64vNV; -PFNGLTEXTUREBARRIERNVPROC glad_glTextureBarrierNV; -PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTexImage2DMultisampleCoverageNV; -PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTexImage3DMultisampleCoverageNV; -PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC glad_glTextureImage2DMultisampleNV; -PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC glad_glTextureImage3DMultisampleNV; -PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTextureImage2DMultisampleCoverageNV; -PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTextureImage3DMultisampleCoverageNV; -PFNGLBEGINTRANSFORMFEEDBACKNVPROC glad_glBeginTransformFeedbackNV; -PFNGLENDTRANSFORMFEEDBACKNVPROC glad_glEndTransformFeedbackNV; -PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC glad_glTransformFeedbackAttribsNV; -PFNGLBINDBUFFERRANGENVPROC glad_glBindBufferRangeNV; -PFNGLBINDBUFFEROFFSETNVPROC glad_glBindBufferOffsetNV; -PFNGLBINDBUFFERBASENVPROC glad_glBindBufferBaseNV; -PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC glad_glTransformFeedbackVaryingsNV; -PFNGLACTIVEVARYINGNVPROC glad_glActiveVaryingNV; -PFNGLGETVARYINGLOCATIONNVPROC glad_glGetVaryingLocationNV; -PFNGLGETACTIVEVARYINGNVPROC glad_glGetActiveVaryingNV; -PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC glad_glGetTransformFeedbackVaryingNV; -PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC glad_glTransformFeedbackStreamAttribsNV; -PFNGLBINDTRANSFORMFEEDBACKNVPROC glad_glBindTransformFeedbackNV; -PFNGLDELETETRANSFORMFEEDBACKSNVPROC glad_glDeleteTransformFeedbacksNV; -PFNGLGENTRANSFORMFEEDBACKSNVPROC glad_glGenTransformFeedbacksNV; -PFNGLISTRANSFORMFEEDBACKNVPROC glad_glIsTransformFeedbackNV; -PFNGLPAUSETRANSFORMFEEDBACKNVPROC glad_glPauseTransformFeedbackNV; -PFNGLRESUMETRANSFORMFEEDBACKNVPROC glad_glResumeTransformFeedbackNV; -PFNGLDRAWTRANSFORMFEEDBACKNVPROC glad_glDrawTransformFeedbackNV; -PFNGLVDPAUINITNVPROC glad_glVDPAUInitNV; -PFNGLVDPAUFININVPROC glad_glVDPAUFiniNV; -PFNGLVDPAUREGISTERVIDEOSURFACENVPROC glad_glVDPAURegisterVideoSurfaceNV; -PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC glad_glVDPAURegisterOutputSurfaceNV; -PFNGLVDPAUISSURFACENVPROC glad_glVDPAUIsSurfaceNV; -PFNGLVDPAUUNREGISTERSURFACENVPROC glad_glVDPAUUnregisterSurfaceNV; -PFNGLVDPAUGETSURFACEIVNVPROC glad_glVDPAUGetSurfaceivNV; -PFNGLVDPAUSURFACEACCESSNVPROC glad_glVDPAUSurfaceAccessNV; -PFNGLVDPAUMAPSURFACESNVPROC glad_glVDPAUMapSurfacesNV; -PFNGLVDPAUUNMAPSURFACESNVPROC glad_glVDPAUUnmapSurfacesNV; -PFNGLFLUSHVERTEXARRAYRANGENVPROC glad_glFlushVertexArrayRangeNV; -PFNGLVERTEXARRAYRANGENVPROC glad_glVertexArrayRangeNV; -PFNGLVERTEXATTRIBL1I64NVPROC glad_glVertexAttribL1i64NV; -PFNGLVERTEXATTRIBL2I64NVPROC glad_glVertexAttribL2i64NV; -PFNGLVERTEXATTRIBL3I64NVPROC glad_glVertexAttribL3i64NV; -PFNGLVERTEXATTRIBL4I64NVPROC glad_glVertexAttribL4i64NV; -PFNGLVERTEXATTRIBL1I64VNVPROC glad_glVertexAttribL1i64vNV; -PFNGLVERTEXATTRIBL2I64VNVPROC glad_glVertexAttribL2i64vNV; -PFNGLVERTEXATTRIBL3I64VNVPROC glad_glVertexAttribL3i64vNV; -PFNGLVERTEXATTRIBL4I64VNVPROC glad_glVertexAttribL4i64vNV; -PFNGLVERTEXATTRIBL1UI64NVPROC glad_glVertexAttribL1ui64NV; -PFNGLVERTEXATTRIBL2UI64NVPROC glad_glVertexAttribL2ui64NV; -PFNGLVERTEXATTRIBL3UI64NVPROC glad_glVertexAttribL3ui64NV; -PFNGLVERTEXATTRIBL4UI64NVPROC glad_glVertexAttribL4ui64NV; -PFNGLVERTEXATTRIBL1UI64VNVPROC glad_glVertexAttribL1ui64vNV; -PFNGLVERTEXATTRIBL2UI64VNVPROC glad_glVertexAttribL2ui64vNV; -PFNGLVERTEXATTRIBL3UI64VNVPROC glad_glVertexAttribL3ui64vNV; -PFNGLVERTEXATTRIBL4UI64VNVPROC glad_glVertexAttribL4ui64vNV; -PFNGLGETVERTEXATTRIBLI64VNVPROC glad_glGetVertexAttribLi64vNV; -PFNGLGETVERTEXATTRIBLUI64VNVPROC glad_glGetVertexAttribLui64vNV; -PFNGLVERTEXATTRIBLFORMATNVPROC glad_glVertexAttribLFormatNV; -PFNGLBUFFERADDRESSRANGENVPROC glad_glBufferAddressRangeNV; -PFNGLVERTEXFORMATNVPROC glad_glVertexFormatNV; -PFNGLNORMALFORMATNVPROC glad_glNormalFormatNV; -PFNGLCOLORFORMATNVPROC glad_glColorFormatNV; -PFNGLINDEXFORMATNVPROC glad_glIndexFormatNV; -PFNGLTEXCOORDFORMATNVPROC glad_glTexCoordFormatNV; -PFNGLEDGEFLAGFORMATNVPROC glad_glEdgeFlagFormatNV; -PFNGLSECONDARYCOLORFORMATNVPROC glad_glSecondaryColorFormatNV; -PFNGLFOGCOORDFORMATNVPROC glad_glFogCoordFormatNV; -PFNGLVERTEXATTRIBFORMATNVPROC glad_glVertexAttribFormatNV; -PFNGLVERTEXATTRIBIFORMATNVPROC glad_glVertexAttribIFormatNV; -PFNGLGETINTEGERUI64I_VNVPROC glad_glGetIntegerui64i_vNV; -PFNGLAREPROGRAMSRESIDENTNVPROC glad_glAreProgramsResidentNV; -PFNGLBINDPROGRAMNVPROC glad_glBindProgramNV; -PFNGLDELETEPROGRAMSNVPROC glad_glDeleteProgramsNV; -PFNGLEXECUTEPROGRAMNVPROC glad_glExecuteProgramNV; -PFNGLGENPROGRAMSNVPROC glad_glGenProgramsNV; -PFNGLGETPROGRAMPARAMETERDVNVPROC glad_glGetProgramParameterdvNV; -PFNGLGETPROGRAMPARAMETERFVNVPROC glad_glGetProgramParameterfvNV; -PFNGLGETPROGRAMIVNVPROC glad_glGetProgramivNV; -PFNGLGETPROGRAMSTRINGNVPROC glad_glGetProgramStringNV; -PFNGLGETTRACKMATRIXIVNVPROC glad_glGetTrackMatrixivNV; -PFNGLGETVERTEXATTRIBDVNVPROC glad_glGetVertexAttribdvNV; -PFNGLGETVERTEXATTRIBFVNVPROC glad_glGetVertexAttribfvNV; -PFNGLGETVERTEXATTRIBIVNVPROC glad_glGetVertexAttribivNV; -PFNGLGETVERTEXATTRIBPOINTERVNVPROC glad_glGetVertexAttribPointervNV; -PFNGLISPROGRAMNVPROC glad_glIsProgramNV; -PFNGLLOADPROGRAMNVPROC glad_glLoadProgramNV; -PFNGLPROGRAMPARAMETER4DNVPROC glad_glProgramParameter4dNV; -PFNGLPROGRAMPARAMETER4DVNVPROC glad_glProgramParameter4dvNV; -PFNGLPROGRAMPARAMETER4FNVPROC glad_glProgramParameter4fNV; -PFNGLPROGRAMPARAMETER4FVNVPROC glad_glProgramParameter4fvNV; -PFNGLPROGRAMPARAMETERS4DVNVPROC glad_glProgramParameters4dvNV; -PFNGLPROGRAMPARAMETERS4FVNVPROC glad_glProgramParameters4fvNV; -PFNGLREQUESTRESIDENTPROGRAMSNVPROC glad_glRequestResidentProgramsNV; -PFNGLTRACKMATRIXNVPROC glad_glTrackMatrixNV; -PFNGLVERTEXATTRIBPOINTERNVPROC glad_glVertexAttribPointerNV; -PFNGLVERTEXATTRIB1DNVPROC glad_glVertexAttrib1dNV; -PFNGLVERTEXATTRIB1DVNVPROC glad_glVertexAttrib1dvNV; -PFNGLVERTEXATTRIB1FNVPROC glad_glVertexAttrib1fNV; -PFNGLVERTEXATTRIB1FVNVPROC glad_glVertexAttrib1fvNV; -PFNGLVERTEXATTRIB1SNVPROC glad_glVertexAttrib1sNV; -PFNGLVERTEXATTRIB1SVNVPROC glad_glVertexAttrib1svNV; -PFNGLVERTEXATTRIB2DNVPROC glad_glVertexAttrib2dNV; -PFNGLVERTEXATTRIB2DVNVPROC glad_glVertexAttrib2dvNV; -PFNGLVERTEXATTRIB2FNVPROC glad_glVertexAttrib2fNV; -PFNGLVERTEXATTRIB2FVNVPROC glad_glVertexAttrib2fvNV; -PFNGLVERTEXATTRIB2SNVPROC glad_glVertexAttrib2sNV; -PFNGLVERTEXATTRIB2SVNVPROC glad_glVertexAttrib2svNV; -PFNGLVERTEXATTRIB3DNVPROC glad_glVertexAttrib3dNV; -PFNGLVERTEXATTRIB3DVNVPROC glad_glVertexAttrib3dvNV; -PFNGLVERTEXATTRIB3FNVPROC glad_glVertexAttrib3fNV; -PFNGLVERTEXATTRIB3FVNVPROC glad_glVertexAttrib3fvNV; -PFNGLVERTEXATTRIB3SNVPROC glad_glVertexAttrib3sNV; -PFNGLVERTEXATTRIB3SVNVPROC glad_glVertexAttrib3svNV; -PFNGLVERTEXATTRIB4DNVPROC glad_glVertexAttrib4dNV; -PFNGLVERTEXATTRIB4DVNVPROC glad_glVertexAttrib4dvNV; -PFNGLVERTEXATTRIB4FNVPROC glad_glVertexAttrib4fNV; -PFNGLVERTEXATTRIB4FVNVPROC glad_glVertexAttrib4fvNV; -PFNGLVERTEXATTRIB4SNVPROC glad_glVertexAttrib4sNV; -PFNGLVERTEXATTRIB4SVNVPROC glad_glVertexAttrib4svNV; -PFNGLVERTEXATTRIB4UBNVPROC glad_glVertexAttrib4ubNV; -PFNGLVERTEXATTRIB4UBVNVPROC glad_glVertexAttrib4ubvNV; -PFNGLVERTEXATTRIBS1DVNVPROC glad_glVertexAttribs1dvNV; -PFNGLVERTEXATTRIBS1FVNVPROC glad_glVertexAttribs1fvNV; -PFNGLVERTEXATTRIBS1SVNVPROC glad_glVertexAttribs1svNV; -PFNGLVERTEXATTRIBS2DVNVPROC glad_glVertexAttribs2dvNV; -PFNGLVERTEXATTRIBS2FVNVPROC glad_glVertexAttribs2fvNV; -PFNGLVERTEXATTRIBS2SVNVPROC glad_glVertexAttribs2svNV; -PFNGLVERTEXATTRIBS3DVNVPROC glad_glVertexAttribs3dvNV; -PFNGLVERTEXATTRIBS3FVNVPROC glad_glVertexAttribs3fvNV; -PFNGLVERTEXATTRIBS3SVNVPROC glad_glVertexAttribs3svNV; -PFNGLVERTEXATTRIBS4DVNVPROC glad_glVertexAttribs4dvNV; -PFNGLVERTEXATTRIBS4FVNVPROC glad_glVertexAttribs4fvNV; -PFNGLVERTEXATTRIBS4SVNVPROC glad_glVertexAttribs4svNV; -PFNGLVERTEXATTRIBS4UBVNVPROC glad_glVertexAttribs4ubvNV; -PFNGLVERTEXATTRIBI1IEXTPROC glad_glVertexAttribI1iEXT; -PFNGLVERTEXATTRIBI2IEXTPROC glad_glVertexAttribI2iEXT; -PFNGLVERTEXATTRIBI3IEXTPROC glad_glVertexAttribI3iEXT; -PFNGLVERTEXATTRIBI4IEXTPROC glad_glVertexAttribI4iEXT; -PFNGLVERTEXATTRIBI1UIEXTPROC glad_glVertexAttribI1uiEXT; -PFNGLVERTEXATTRIBI2UIEXTPROC glad_glVertexAttribI2uiEXT; -PFNGLVERTEXATTRIBI3UIEXTPROC glad_glVertexAttribI3uiEXT; -PFNGLVERTEXATTRIBI4UIEXTPROC glad_glVertexAttribI4uiEXT; -PFNGLVERTEXATTRIBI1IVEXTPROC glad_glVertexAttribI1ivEXT; -PFNGLVERTEXATTRIBI2IVEXTPROC glad_glVertexAttribI2ivEXT; -PFNGLVERTEXATTRIBI3IVEXTPROC glad_glVertexAttribI3ivEXT; -PFNGLVERTEXATTRIBI4IVEXTPROC glad_glVertexAttribI4ivEXT; -PFNGLVERTEXATTRIBI1UIVEXTPROC glad_glVertexAttribI1uivEXT; -PFNGLVERTEXATTRIBI2UIVEXTPROC glad_glVertexAttribI2uivEXT; -PFNGLVERTEXATTRIBI3UIVEXTPROC glad_glVertexAttribI3uivEXT; -PFNGLVERTEXATTRIBI4UIVEXTPROC glad_glVertexAttribI4uivEXT; -PFNGLVERTEXATTRIBI4BVEXTPROC glad_glVertexAttribI4bvEXT; -PFNGLVERTEXATTRIBI4SVEXTPROC glad_glVertexAttribI4svEXT; -PFNGLVERTEXATTRIBI4UBVEXTPROC glad_glVertexAttribI4ubvEXT; -PFNGLVERTEXATTRIBI4USVEXTPROC glad_glVertexAttribI4usvEXT; -PFNGLVERTEXATTRIBIPOINTEREXTPROC glad_glVertexAttribIPointerEXT; -PFNGLGETVERTEXATTRIBIIVEXTPROC glad_glGetVertexAttribIivEXT; -PFNGLGETVERTEXATTRIBIUIVEXTPROC glad_glGetVertexAttribIuivEXT; -PFNGLBEGINVIDEOCAPTURENVPROC glad_glBeginVideoCaptureNV; -PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC glad_glBindVideoCaptureStreamBufferNV; -PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC glad_glBindVideoCaptureStreamTextureNV; -PFNGLENDVIDEOCAPTURENVPROC glad_glEndVideoCaptureNV; -PFNGLGETVIDEOCAPTUREIVNVPROC glad_glGetVideoCaptureivNV; -PFNGLGETVIDEOCAPTURESTREAMIVNVPROC glad_glGetVideoCaptureStreamivNV; -PFNGLGETVIDEOCAPTURESTREAMFVNVPROC glad_glGetVideoCaptureStreamfvNV; -PFNGLGETVIDEOCAPTURESTREAMDVNVPROC glad_glGetVideoCaptureStreamdvNV; -PFNGLVIDEOCAPTURENVPROC glad_glVideoCaptureNV; -PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC glad_glVideoCaptureStreamParameterivNV; -PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC glad_glVideoCaptureStreamParameterfvNV; -PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC glad_glVideoCaptureStreamParameterdvNV; -PFNGLVIEWPORTSWIZZLENVPROC glad_glViewportSwizzleNV; -PFNGLMULTITEXCOORD1BOESPROC glad_glMultiTexCoord1bOES; -PFNGLMULTITEXCOORD1BVOESPROC glad_glMultiTexCoord1bvOES; -PFNGLMULTITEXCOORD2BOESPROC glad_glMultiTexCoord2bOES; -PFNGLMULTITEXCOORD2BVOESPROC glad_glMultiTexCoord2bvOES; -PFNGLMULTITEXCOORD3BOESPROC glad_glMultiTexCoord3bOES; -PFNGLMULTITEXCOORD3BVOESPROC glad_glMultiTexCoord3bvOES; -PFNGLMULTITEXCOORD4BOESPROC glad_glMultiTexCoord4bOES; -PFNGLMULTITEXCOORD4BVOESPROC glad_glMultiTexCoord4bvOES; -PFNGLTEXCOORD1BOESPROC glad_glTexCoord1bOES; -PFNGLTEXCOORD1BVOESPROC glad_glTexCoord1bvOES; -PFNGLTEXCOORD2BOESPROC glad_glTexCoord2bOES; -PFNGLTEXCOORD2BVOESPROC glad_glTexCoord2bvOES; -PFNGLTEXCOORD3BOESPROC glad_glTexCoord3bOES; -PFNGLTEXCOORD3BVOESPROC glad_glTexCoord3bvOES; -PFNGLTEXCOORD4BOESPROC glad_glTexCoord4bOES; -PFNGLTEXCOORD4BVOESPROC glad_glTexCoord4bvOES; -PFNGLVERTEX2BOESPROC glad_glVertex2bOES; -PFNGLVERTEX2BVOESPROC glad_glVertex2bvOES; -PFNGLVERTEX3BOESPROC glad_glVertex3bOES; -PFNGLVERTEX3BVOESPROC glad_glVertex3bvOES; -PFNGLVERTEX4BOESPROC glad_glVertex4bOES; -PFNGLVERTEX4BVOESPROC glad_glVertex4bvOES; -PFNGLALPHAFUNCXOESPROC glad_glAlphaFuncxOES; -PFNGLCLEARCOLORXOESPROC glad_glClearColorxOES; -PFNGLCLEARDEPTHXOESPROC glad_glClearDepthxOES; -PFNGLCLIPPLANEXOESPROC glad_glClipPlanexOES; -PFNGLCOLOR4XOESPROC glad_glColor4xOES; -PFNGLDEPTHRANGEXOESPROC glad_glDepthRangexOES; -PFNGLFOGXOESPROC glad_glFogxOES; -PFNGLFOGXVOESPROC glad_glFogxvOES; -PFNGLFRUSTUMXOESPROC glad_glFrustumxOES; -PFNGLGETCLIPPLANEXOESPROC glad_glGetClipPlanexOES; -PFNGLGETFIXEDVOESPROC glad_glGetFixedvOES; -PFNGLGETTEXENVXVOESPROC glad_glGetTexEnvxvOES; -PFNGLGETTEXPARAMETERXVOESPROC glad_glGetTexParameterxvOES; -PFNGLLIGHTMODELXOESPROC glad_glLightModelxOES; -PFNGLLIGHTMODELXVOESPROC glad_glLightModelxvOES; -PFNGLLIGHTXOESPROC glad_glLightxOES; -PFNGLLIGHTXVOESPROC glad_glLightxvOES; -PFNGLLINEWIDTHXOESPROC glad_glLineWidthxOES; -PFNGLLOADMATRIXXOESPROC glad_glLoadMatrixxOES; -PFNGLMATERIALXOESPROC glad_glMaterialxOES; -PFNGLMATERIALXVOESPROC glad_glMaterialxvOES; -PFNGLMULTMATRIXXOESPROC glad_glMultMatrixxOES; -PFNGLMULTITEXCOORD4XOESPROC glad_glMultiTexCoord4xOES; -PFNGLNORMAL3XOESPROC glad_glNormal3xOES; -PFNGLORTHOXOESPROC glad_glOrthoxOES; -PFNGLPOINTPARAMETERXVOESPROC glad_glPointParameterxvOES; -PFNGLPOINTSIZEXOESPROC glad_glPointSizexOES; -PFNGLPOLYGONOFFSETXOESPROC glad_glPolygonOffsetxOES; -PFNGLROTATEXOESPROC glad_glRotatexOES; -PFNGLSCALEXOESPROC glad_glScalexOES; -PFNGLTEXENVXOESPROC glad_glTexEnvxOES; -PFNGLTEXENVXVOESPROC glad_glTexEnvxvOES; -PFNGLTEXPARAMETERXOESPROC glad_glTexParameterxOES; -PFNGLTEXPARAMETERXVOESPROC glad_glTexParameterxvOES; -PFNGLTRANSLATEXOESPROC glad_glTranslatexOES; -PFNGLGETLIGHTXVOESPROC glad_glGetLightxvOES; -PFNGLGETMATERIALXVOESPROC glad_glGetMaterialxvOES; -PFNGLPOINTPARAMETERXOESPROC glad_glPointParameterxOES; -PFNGLSAMPLECOVERAGEXOESPROC glad_glSampleCoveragexOES; -PFNGLACCUMXOESPROC glad_glAccumxOES; -PFNGLBITMAPXOESPROC glad_glBitmapxOES; -PFNGLBLENDCOLORXOESPROC glad_glBlendColorxOES; -PFNGLCLEARACCUMXOESPROC glad_glClearAccumxOES; -PFNGLCOLOR3XOESPROC glad_glColor3xOES; -PFNGLCOLOR3XVOESPROC glad_glColor3xvOES; -PFNGLCOLOR4XVOESPROC glad_glColor4xvOES; -PFNGLCONVOLUTIONPARAMETERXOESPROC glad_glConvolutionParameterxOES; -PFNGLCONVOLUTIONPARAMETERXVOESPROC glad_glConvolutionParameterxvOES; -PFNGLEVALCOORD1XOESPROC glad_glEvalCoord1xOES; -PFNGLEVALCOORD1XVOESPROC glad_glEvalCoord1xvOES; -PFNGLEVALCOORD2XOESPROC glad_glEvalCoord2xOES; -PFNGLEVALCOORD2XVOESPROC glad_glEvalCoord2xvOES; -PFNGLFEEDBACKBUFFERXOESPROC glad_glFeedbackBufferxOES; -PFNGLGETCONVOLUTIONPARAMETERXVOESPROC glad_glGetConvolutionParameterxvOES; -PFNGLGETHISTOGRAMPARAMETERXVOESPROC glad_glGetHistogramParameterxvOES; -PFNGLGETLIGHTXOESPROC glad_glGetLightxOES; -PFNGLGETMAPXVOESPROC glad_glGetMapxvOES; -PFNGLGETMATERIALXOESPROC glad_glGetMaterialxOES; -PFNGLGETPIXELMAPXVPROC glad_glGetPixelMapxv; -PFNGLGETTEXGENXVOESPROC glad_glGetTexGenxvOES; -PFNGLGETTEXLEVELPARAMETERXVOESPROC glad_glGetTexLevelParameterxvOES; -PFNGLINDEXXOESPROC glad_glIndexxOES; -PFNGLINDEXXVOESPROC glad_glIndexxvOES; -PFNGLLOADTRANSPOSEMATRIXXOESPROC glad_glLoadTransposeMatrixxOES; -PFNGLMAP1XOESPROC glad_glMap1xOES; -PFNGLMAP2XOESPROC glad_glMap2xOES; -PFNGLMAPGRID1XOESPROC glad_glMapGrid1xOES; -PFNGLMAPGRID2XOESPROC glad_glMapGrid2xOES; -PFNGLMULTTRANSPOSEMATRIXXOESPROC glad_glMultTransposeMatrixxOES; -PFNGLMULTITEXCOORD1XOESPROC glad_glMultiTexCoord1xOES; -PFNGLMULTITEXCOORD1XVOESPROC glad_glMultiTexCoord1xvOES; -PFNGLMULTITEXCOORD2XOESPROC glad_glMultiTexCoord2xOES; -PFNGLMULTITEXCOORD2XVOESPROC glad_glMultiTexCoord2xvOES; -PFNGLMULTITEXCOORD3XOESPROC glad_glMultiTexCoord3xOES; -PFNGLMULTITEXCOORD3XVOESPROC glad_glMultiTexCoord3xvOES; -PFNGLMULTITEXCOORD4XVOESPROC glad_glMultiTexCoord4xvOES; -PFNGLNORMAL3XVOESPROC glad_glNormal3xvOES; -PFNGLPASSTHROUGHXOESPROC glad_glPassThroughxOES; -PFNGLPIXELMAPXPROC glad_glPixelMapx; -PFNGLPIXELSTOREXPROC glad_glPixelStorex; -PFNGLPIXELTRANSFERXOESPROC glad_glPixelTransferxOES; -PFNGLPIXELZOOMXOESPROC glad_glPixelZoomxOES; -PFNGLPRIORITIZETEXTURESXOESPROC glad_glPrioritizeTexturesxOES; -PFNGLRASTERPOS2XOESPROC glad_glRasterPos2xOES; -PFNGLRASTERPOS2XVOESPROC glad_glRasterPos2xvOES; -PFNGLRASTERPOS3XOESPROC glad_glRasterPos3xOES; -PFNGLRASTERPOS3XVOESPROC glad_glRasterPos3xvOES; -PFNGLRASTERPOS4XOESPROC glad_glRasterPos4xOES; -PFNGLRASTERPOS4XVOESPROC glad_glRasterPos4xvOES; -PFNGLRECTXOESPROC glad_glRectxOES; -PFNGLRECTXVOESPROC glad_glRectxvOES; -PFNGLTEXCOORD1XOESPROC glad_glTexCoord1xOES; -PFNGLTEXCOORD1XVOESPROC glad_glTexCoord1xvOES; -PFNGLTEXCOORD2XOESPROC glad_glTexCoord2xOES; -PFNGLTEXCOORD2XVOESPROC glad_glTexCoord2xvOES; -PFNGLTEXCOORD3XOESPROC glad_glTexCoord3xOES; -PFNGLTEXCOORD3XVOESPROC glad_glTexCoord3xvOES; -PFNGLTEXCOORD4XOESPROC glad_glTexCoord4xOES; -PFNGLTEXCOORD4XVOESPROC glad_glTexCoord4xvOES; -PFNGLTEXGENXOESPROC glad_glTexGenxOES; -PFNGLTEXGENXVOESPROC glad_glTexGenxvOES; -PFNGLVERTEX2XOESPROC glad_glVertex2xOES; -PFNGLVERTEX2XVOESPROC glad_glVertex2xvOES; -PFNGLVERTEX3XOESPROC glad_glVertex3xOES; -PFNGLVERTEX3XVOESPROC glad_glVertex3xvOES; -PFNGLVERTEX4XOESPROC glad_glVertex4xOES; -PFNGLVERTEX4XVOESPROC glad_glVertex4xvOES; -PFNGLQUERYMATRIXXOESPROC glad_glQueryMatrixxOES; -PFNGLCLEARDEPTHFOESPROC glad_glClearDepthfOES; -PFNGLCLIPPLANEFOESPROC glad_glClipPlanefOES; -PFNGLDEPTHRANGEFOESPROC glad_glDepthRangefOES; -PFNGLFRUSTUMFOESPROC glad_glFrustumfOES; -PFNGLGETCLIPPLANEFOESPROC glad_glGetClipPlanefOES; -PFNGLORTHOFOESPROC glad_glOrthofOES; -PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glad_glFramebufferTextureMultiviewOVR; -PFNGLHINTPGIPROC glad_glHintPGI; -PFNGLDETAILTEXFUNCSGISPROC glad_glDetailTexFuncSGIS; -PFNGLGETDETAILTEXFUNCSGISPROC glad_glGetDetailTexFuncSGIS; -PFNGLFOGFUNCSGISPROC glad_glFogFuncSGIS; -PFNGLGETFOGFUNCSGISPROC glad_glGetFogFuncSGIS; -PFNGLSAMPLEMASKSGISPROC glad_glSampleMaskSGIS; -PFNGLSAMPLEPATTERNSGISPROC glad_glSamplePatternSGIS; -PFNGLPIXELTEXGENPARAMETERISGISPROC glad_glPixelTexGenParameteriSGIS; -PFNGLPIXELTEXGENPARAMETERIVSGISPROC glad_glPixelTexGenParameterivSGIS; -PFNGLPIXELTEXGENPARAMETERFSGISPROC glad_glPixelTexGenParameterfSGIS; -PFNGLPIXELTEXGENPARAMETERFVSGISPROC glad_glPixelTexGenParameterfvSGIS; -PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC glad_glGetPixelTexGenParameterivSGIS; -PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC glad_glGetPixelTexGenParameterfvSGIS; -PFNGLPOINTPARAMETERFSGISPROC glad_glPointParameterfSGIS; -PFNGLPOINTPARAMETERFVSGISPROC glad_glPointParameterfvSGIS; -PFNGLSHARPENTEXFUNCSGISPROC glad_glSharpenTexFuncSGIS; -PFNGLGETSHARPENTEXFUNCSGISPROC glad_glGetSharpenTexFuncSGIS; -PFNGLTEXIMAGE4DSGISPROC glad_glTexImage4DSGIS; -PFNGLTEXSUBIMAGE4DSGISPROC glad_glTexSubImage4DSGIS; -PFNGLTEXTURECOLORMASKSGISPROC glad_glTextureColorMaskSGIS; -PFNGLGETTEXFILTERFUNCSGISPROC glad_glGetTexFilterFuncSGIS; -PFNGLTEXFILTERFUNCSGISPROC glad_glTexFilterFuncSGIS; -PFNGLASYNCMARKERSGIXPROC glad_glAsyncMarkerSGIX; -PFNGLFINISHASYNCSGIXPROC glad_glFinishAsyncSGIX; -PFNGLPOLLASYNCSGIXPROC glad_glPollAsyncSGIX; -PFNGLGENASYNCMARKERSSGIXPROC glad_glGenAsyncMarkersSGIX; -PFNGLDELETEASYNCMARKERSSGIXPROC glad_glDeleteAsyncMarkersSGIX; -PFNGLISASYNCMARKERSGIXPROC glad_glIsAsyncMarkerSGIX; -PFNGLFLUSHRASTERSGIXPROC glad_glFlushRasterSGIX; -PFNGLFRAGMENTCOLORMATERIALSGIXPROC glad_glFragmentColorMaterialSGIX; -PFNGLFRAGMENTLIGHTFSGIXPROC glad_glFragmentLightfSGIX; -PFNGLFRAGMENTLIGHTFVSGIXPROC glad_glFragmentLightfvSGIX; -PFNGLFRAGMENTLIGHTISGIXPROC glad_glFragmentLightiSGIX; -PFNGLFRAGMENTLIGHTIVSGIXPROC glad_glFragmentLightivSGIX; -PFNGLFRAGMENTLIGHTMODELFSGIXPROC glad_glFragmentLightModelfSGIX; -PFNGLFRAGMENTLIGHTMODELFVSGIXPROC glad_glFragmentLightModelfvSGIX; -PFNGLFRAGMENTLIGHTMODELISGIXPROC glad_glFragmentLightModeliSGIX; -PFNGLFRAGMENTLIGHTMODELIVSGIXPROC glad_glFragmentLightModelivSGIX; -PFNGLFRAGMENTMATERIALFSGIXPROC glad_glFragmentMaterialfSGIX; -PFNGLFRAGMENTMATERIALFVSGIXPROC glad_glFragmentMaterialfvSGIX; -PFNGLFRAGMENTMATERIALISGIXPROC glad_glFragmentMaterialiSGIX; -PFNGLFRAGMENTMATERIALIVSGIXPROC glad_glFragmentMaterialivSGIX; -PFNGLGETFRAGMENTLIGHTFVSGIXPROC glad_glGetFragmentLightfvSGIX; -PFNGLGETFRAGMENTLIGHTIVSGIXPROC glad_glGetFragmentLightivSGIX; -PFNGLGETFRAGMENTMATERIALFVSGIXPROC glad_glGetFragmentMaterialfvSGIX; -PFNGLGETFRAGMENTMATERIALIVSGIXPROC glad_glGetFragmentMaterialivSGIX; -PFNGLLIGHTENVISGIXPROC glad_glLightEnviSGIX; -PFNGLFRAMEZOOMSGIXPROC glad_glFrameZoomSGIX; -PFNGLIGLOOINTERFACESGIXPROC glad_glIglooInterfaceSGIX; -PFNGLGETINSTRUMENTSSGIXPROC glad_glGetInstrumentsSGIX; -PFNGLINSTRUMENTSBUFFERSGIXPROC glad_glInstrumentsBufferSGIX; -PFNGLPOLLINSTRUMENTSSGIXPROC glad_glPollInstrumentsSGIX; -PFNGLREADINSTRUMENTSSGIXPROC glad_glReadInstrumentsSGIX; -PFNGLSTARTINSTRUMENTSSGIXPROC glad_glStartInstrumentsSGIX; -PFNGLSTOPINSTRUMENTSSGIXPROC glad_glStopInstrumentsSGIX; -PFNGLGETLISTPARAMETERFVSGIXPROC glad_glGetListParameterfvSGIX; -PFNGLGETLISTPARAMETERIVSGIXPROC glad_glGetListParameterivSGIX; -PFNGLLISTPARAMETERFSGIXPROC glad_glListParameterfSGIX; -PFNGLLISTPARAMETERFVSGIXPROC glad_glListParameterfvSGIX; -PFNGLLISTPARAMETERISGIXPROC glad_glListParameteriSGIX; -PFNGLLISTPARAMETERIVSGIXPROC glad_glListParameterivSGIX; -PFNGLPIXELTEXGENSGIXPROC glad_glPixelTexGenSGIX; -PFNGLDEFORMATIONMAP3DSGIXPROC glad_glDeformationMap3dSGIX; -PFNGLDEFORMATIONMAP3FSGIXPROC glad_glDeformationMap3fSGIX; -PFNGLDEFORMSGIXPROC glad_glDeformSGIX; -PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC glad_glLoadIdentityDeformationMapSGIX; -PFNGLREFERENCEPLANESGIXPROC glad_glReferencePlaneSGIX; -PFNGLSPRITEPARAMETERFSGIXPROC glad_glSpriteParameterfSGIX; -PFNGLSPRITEPARAMETERFVSGIXPROC glad_glSpriteParameterfvSGIX; -PFNGLSPRITEPARAMETERISGIXPROC glad_glSpriteParameteriSGIX; -PFNGLSPRITEPARAMETERIVSGIXPROC glad_glSpriteParameterivSGIX; -PFNGLTAGSAMPLEBUFFERSGIXPROC glad_glTagSampleBufferSGIX; -PFNGLCOLORTABLESGIPROC glad_glColorTableSGI; -PFNGLCOLORTABLEPARAMETERFVSGIPROC glad_glColorTableParameterfvSGI; -PFNGLCOLORTABLEPARAMETERIVSGIPROC glad_glColorTableParameterivSGI; -PFNGLCOPYCOLORTABLESGIPROC glad_glCopyColorTableSGI; -PFNGLGETCOLORTABLESGIPROC glad_glGetColorTableSGI; -PFNGLGETCOLORTABLEPARAMETERFVSGIPROC glad_glGetColorTableParameterfvSGI; -PFNGLGETCOLORTABLEPARAMETERIVSGIPROC glad_glGetColorTableParameterivSGI; -PFNGLFINISHTEXTURESUNXPROC glad_glFinishTextureSUNX; -PFNGLGLOBALALPHAFACTORBSUNPROC glad_glGlobalAlphaFactorbSUN; -PFNGLGLOBALALPHAFACTORSSUNPROC glad_glGlobalAlphaFactorsSUN; -PFNGLGLOBALALPHAFACTORISUNPROC glad_glGlobalAlphaFactoriSUN; -PFNGLGLOBALALPHAFACTORFSUNPROC glad_glGlobalAlphaFactorfSUN; -PFNGLGLOBALALPHAFACTORDSUNPROC glad_glGlobalAlphaFactordSUN; -PFNGLGLOBALALPHAFACTORUBSUNPROC glad_glGlobalAlphaFactorubSUN; -PFNGLGLOBALALPHAFACTORUSSUNPROC glad_glGlobalAlphaFactorusSUN; -PFNGLGLOBALALPHAFACTORUISUNPROC glad_glGlobalAlphaFactoruiSUN; -PFNGLDRAWMESHARRAYSSUNPROC glad_glDrawMeshArraysSUN; -PFNGLREPLACEMENTCODEUISUNPROC glad_glReplacementCodeuiSUN; -PFNGLREPLACEMENTCODEUSSUNPROC glad_glReplacementCodeusSUN; -PFNGLREPLACEMENTCODEUBSUNPROC glad_glReplacementCodeubSUN; -PFNGLREPLACEMENTCODEUIVSUNPROC glad_glReplacementCodeuivSUN; -PFNGLREPLACEMENTCODEUSVSUNPROC glad_glReplacementCodeusvSUN; -PFNGLREPLACEMENTCODEUBVSUNPROC glad_glReplacementCodeubvSUN; -PFNGLREPLACEMENTCODEPOINTERSUNPROC glad_glReplacementCodePointerSUN; -PFNGLCOLOR4UBVERTEX2FSUNPROC glad_glColor4ubVertex2fSUN; -PFNGLCOLOR4UBVERTEX2FVSUNPROC glad_glColor4ubVertex2fvSUN; -PFNGLCOLOR4UBVERTEX3FSUNPROC glad_glColor4ubVertex3fSUN; -PFNGLCOLOR4UBVERTEX3FVSUNPROC glad_glColor4ubVertex3fvSUN; -PFNGLCOLOR3FVERTEX3FSUNPROC glad_glColor3fVertex3fSUN; -PFNGLCOLOR3FVERTEX3FVSUNPROC glad_glColor3fVertex3fvSUN; -PFNGLNORMAL3FVERTEX3FSUNPROC glad_glNormal3fVertex3fSUN; -PFNGLNORMAL3FVERTEX3FVSUNPROC glad_glNormal3fVertex3fvSUN; -PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glColor4fNormal3fVertex3fSUN; -PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glColor4fNormal3fVertex3fvSUN; -PFNGLTEXCOORD2FVERTEX3FSUNPROC glad_glTexCoord2fVertex3fSUN; -PFNGLTEXCOORD2FVERTEX3FVSUNPROC glad_glTexCoord2fVertex3fvSUN; -PFNGLTEXCOORD4FVERTEX4FSUNPROC glad_glTexCoord4fVertex4fSUN; -PFNGLTEXCOORD4FVERTEX4FVSUNPROC glad_glTexCoord4fVertex4fvSUN; -PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC glad_glTexCoord2fColor4ubVertex3fSUN; -PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC glad_glTexCoord2fColor4ubVertex3fvSUN; -PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC glad_glTexCoord2fColor3fVertex3fSUN; -PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC glad_glTexCoord2fColor3fVertex3fvSUN; -PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fNormal3fVertex3fSUN; -PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fNormal3fVertex3fvSUN; -PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fSUN; -PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fvSUN; -PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fSUN; -PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fvSUN; -PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC glad_glReplacementCodeuiVertex3fSUN; -PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC glad_glReplacementCodeuiVertex3fvSUN; -PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC glad_glReplacementCodeuiColor4ubVertex3fSUN; -PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4ubVertex3fvSUN; -PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor3fVertex3fSUN; -PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor3fVertex3fvSUN; -PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiNormal3fVertex3fSUN; -PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiNormal3fVertex3fvSUN; -PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN; -PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; -PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fSUN; -PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fvSUN; -PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; -PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; -PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; -PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; -PFNGLBLITFRAMEBUFFERANGLEPROC glad_glBlitFramebufferANGLE; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC glad_glRenderbufferStorageMultisampleANGLE; -PFNGLDRAWARRAYSINSTANCEDANGLEPROC glad_glDrawArraysInstancedANGLE; -PFNGLDRAWELEMENTSINSTANCEDANGLEPROC glad_glDrawElementsInstancedANGLE; -PFNGLVERTEXATTRIBDIVISORANGLEPROC glad_glVertexAttribDivisorANGLE; -PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC glad_glGetTranslatedShaderSourceANGLE; -PFNGLCOPYTEXTURELEVELSAPPLEPROC glad_glCopyTextureLevelsAPPLE; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC glad_glRenderbufferStorageMultisampleAPPLE; -PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC glad_glResolveMultisampleFramebufferAPPLE; -PFNGLFENCESYNCAPPLEPROC glad_glFenceSyncAPPLE; -PFNGLISSYNCAPPLEPROC glad_glIsSyncAPPLE; -PFNGLDELETESYNCAPPLEPROC glad_glDeleteSyncAPPLE; -PFNGLCLIENTWAITSYNCAPPLEPROC glad_glClientWaitSyncAPPLE; -PFNGLWAITSYNCAPPLEPROC glad_glWaitSyncAPPLE; -PFNGLGETINTEGER64VAPPLEPROC glad_glGetInteger64vAPPLE; -PFNGLGETSYNCIVAPPLEPROC glad_glGetSyncivAPPLE; -PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC glad_glDrawArraysInstancedBaseInstanceEXT; -PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC glad_glDrawElementsInstancedBaseInstanceEXT; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC glad_glDrawElementsInstancedBaseVertexBaseInstanceEXT; -PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC glad_glBindFragDataLocationIndexedEXT; -PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC glad_glGetProgramResourceLocationIndexEXT; -PFNGLGETFRAGDATAINDEXEXTPROC glad_glGetFragDataIndexEXT; -PFNGLBUFFERSTORAGEEXTPROC glad_glBufferStorageEXT; -PFNGLCLEARTEXIMAGEEXTPROC glad_glClearTexImageEXT; -PFNGLCLEARTEXSUBIMAGEEXTPROC glad_glClearTexSubImageEXT; -PFNGLCLIPCONTROLEXTPROC glad_glClipControlEXT; -PFNGLCOPYIMAGESUBDATAEXTPROC glad_glCopyImageSubDataEXT; -PFNGLDISCARDFRAMEBUFFEREXTPROC glad_glDiscardFramebufferEXT; -PFNGLGENQUERIESEXTPROC glad_glGenQueriesEXT; -PFNGLDELETEQUERIESEXTPROC glad_glDeleteQueriesEXT; -PFNGLISQUERYEXTPROC glad_glIsQueryEXT; -PFNGLBEGINQUERYEXTPROC glad_glBeginQueryEXT; -PFNGLENDQUERYEXTPROC glad_glEndQueryEXT; -PFNGLQUERYCOUNTEREXTPROC glad_glQueryCounterEXT; -PFNGLGETQUERYIVEXTPROC glad_glGetQueryivEXT; -PFNGLGETQUERYOBJECTIVEXTPROC glad_glGetQueryObjectivEXT; -PFNGLGETQUERYOBJECTUIVEXTPROC glad_glGetQueryObjectuivEXT; -PFNGLDRAWBUFFERSEXTPROC glad_glDrawBuffersEXT; -PFNGLENABLEIEXTPROC glad_glEnableiEXT; -PFNGLDISABLEIEXTPROC glad_glDisableiEXT; -PFNGLBLENDEQUATIONIEXTPROC glad_glBlendEquationiEXT; -PFNGLBLENDEQUATIONSEPARATEIEXTPROC glad_glBlendEquationSeparateiEXT; -PFNGLBLENDFUNCIEXTPROC glad_glBlendFunciEXT; -PFNGLBLENDFUNCSEPARATEIEXTPROC glad_glBlendFuncSeparateiEXT; -PFNGLCOLORMASKIEXTPROC glad_glColorMaskiEXT; -PFNGLISENABLEDIEXTPROC glad_glIsEnablediEXT; -PFNGLDRAWELEMENTSBASEVERTEXEXTPROC glad_glDrawElementsBaseVertexEXT; -PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC glad_glDrawRangeElementsBaseVertexEXT; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC glad_glDrawElementsInstancedBaseVertexEXT; -PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC glad_glMultiDrawElementsBaseVertexEXT; -PFNGLDRAWTRANSFORMFEEDBACKEXTPROC glad_glDrawTransformFeedbackEXT; -PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC glad_glDrawTransformFeedbackInstancedEXT; -PFNGLVERTEXATTRIBDIVISOREXTPROC glad_glVertexAttribDivisorEXT; -PFNGLMAPBUFFERRANGEEXTPROC glad_glMapBufferRangeEXT; -PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC glad_glFlushMappedBufferRangeEXT; -PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC glad_glMultiDrawArraysIndirectEXT; -PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC glad_glMultiDrawElementsIndirectEXT; -PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glad_glFramebufferTexture2DMultisampleEXT; -PFNGLREADBUFFERINDEXEDEXTPROC glad_glReadBufferIndexedEXT; -PFNGLDRAWBUFFERSINDEXEDEXTPROC glad_glDrawBuffersIndexedEXT; -PFNGLGETINTEGERI_VEXTPROC glad_glGetIntegeri_vEXT; -PFNGLPRIMITIVEBOUNDINGBOXEXTPROC glad_glPrimitiveBoundingBoxEXT; -PFNGLGETGRAPHICSRESETSTATUSEXTPROC glad_glGetGraphicsResetStatusEXT; -PFNGLREADNPIXELSEXTPROC glad_glReadnPixelsEXT; -PFNGLGETNUNIFORMFVEXTPROC glad_glGetnUniformfvEXT; -PFNGLGETNUNIFORMIVEXTPROC glad_glGetnUniformivEXT; -PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glFramebufferPixelLocalStorageSizeEXT; -PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC glad_glGetFramebufferPixelLocalStorageSizeEXT; -PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC glad_glClearPixelLocalStorageuiEXT; -PFNGLTEXPAGECOMMITMENTEXTPROC glad_glTexPageCommitmentEXT; -PFNGLPATCHPARAMETERIEXTPROC glad_glPatchParameteriEXT; -PFNGLSAMPLERPARAMETERIIVEXTPROC glad_glSamplerParameterIivEXT; -PFNGLSAMPLERPARAMETERIUIVEXTPROC glad_glSamplerParameterIuivEXT; -PFNGLGETSAMPLERPARAMETERIIVEXTPROC glad_glGetSamplerParameterIivEXT; -PFNGLGETSAMPLERPARAMETERIUIVEXTPROC glad_glGetSamplerParameterIuivEXT; -PFNGLTEXBUFFERRANGEEXTPROC glad_glTexBufferRangeEXT; -PFNGLTEXSTORAGE1DEXTPROC glad_glTexStorage1DEXT; -PFNGLTEXSTORAGE2DEXTPROC glad_glTexStorage2DEXT; -PFNGLTEXSTORAGE3DEXTPROC glad_glTexStorage3DEXT; -PFNGLTEXTUREVIEWEXTPROC glad_glTextureViewEXT; -PFNGLGETTEXTUREHANDLEIMGPROC glad_glGetTextureHandleIMG; -PFNGLGETTEXTURESAMPLERHANDLEIMGPROC glad_glGetTextureSamplerHandleIMG; -PFNGLUNIFORMHANDLEUI64IMGPROC glad_glUniformHandleui64IMG; -PFNGLUNIFORMHANDLEUI64VIMGPROC glad_glUniformHandleui64vIMG; -PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC glad_glProgramUniformHandleui64IMG; -PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC glad_glProgramUniformHandleui64vIMG; -PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC glad_glFramebufferTexture2DDownsampleIMG; -PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC glad_glFramebufferTextureLayerDownsampleIMG; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC glad_glRenderbufferStorageMultisampleIMG; -PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC glad_glFramebufferTexture2DMultisampleIMG; -PFNGLCOPYBUFFERSUBDATANVPROC glad_glCopyBufferSubDataNV; -PFNGLCOVERAGEMASKNVPROC glad_glCoverageMaskNV; -PFNGLCOVERAGEOPERATIONNVPROC glad_glCoverageOperationNV; -PFNGLDRAWBUFFERSNVPROC glad_glDrawBuffersNV; -PFNGLDRAWARRAYSINSTANCEDNVPROC glad_glDrawArraysInstancedNV; -PFNGLDRAWELEMENTSINSTANCEDNVPROC glad_glDrawElementsInstancedNV; -PFNGLBLITFRAMEBUFFERNVPROC glad_glBlitFramebufferNV; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC glad_glRenderbufferStorageMultisampleNV; -PFNGLVERTEXATTRIBDIVISORNVPROC glad_glVertexAttribDivisorNV; -PFNGLUNIFORMMATRIX2X3FVNVPROC glad_glUniformMatrix2x3fvNV; -PFNGLUNIFORMMATRIX3X2FVNVPROC glad_glUniformMatrix3x2fvNV; -PFNGLUNIFORMMATRIX2X4FVNVPROC glad_glUniformMatrix2x4fvNV; -PFNGLUNIFORMMATRIX4X2FVNVPROC glad_glUniformMatrix4x2fvNV; -PFNGLUNIFORMMATRIX3X4FVNVPROC glad_glUniformMatrix3x4fvNV; -PFNGLUNIFORMMATRIX4X3FVNVPROC glad_glUniformMatrix4x3fvNV; -PFNGLPOLYGONMODENVPROC glad_glPolygonModeNV; -PFNGLREADBUFFERNVPROC glad_glReadBufferNV; -PFNGLVIEWPORTARRAYVNVPROC glad_glViewportArrayvNV; -PFNGLVIEWPORTINDEXEDFNVPROC glad_glViewportIndexedfNV; -PFNGLVIEWPORTINDEXEDFVNVPROC glad_glViewportIndexedfvNV; -PFNGLSCISSORARRAYVNVPROC glad_glScissorArrayvNV; -PFNGLSCISSORINDEXEDNVPROC glad_glScissorIndexedNV; -PFNGLSCISSORINDEXEDVNVPROC glad_glScissorIndexedvNV; -PFNGLDEPTHRANGEARRAYFVNVPROC glad_glDepthRangeArrayfvNV; -PFNGLDEPTHRANGEINDEXEDFNVPROC glad_glDepthRangeIndexedfNV; -PFNGLGETFLOATI_VNVPROC glad_glGetFloati_vNV; -PFNGLENABLEINVPROC glad_glEnableiNV; -PFNGLDISABLEINVPROC glad_glDisableiNV; -PFNGLISENABLEDINVPROC glad_glIsEnablediNV; -PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glad_glEGLImageTargetTexture2DOES; -PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC glad_glEGLImageTargetRenderbufferStorageOES; -PFNGLCOPYIMAGESUBDATAOESPROC glad_glCopyImageSubDataOES; -PFNGLENABLEIOESPROC glad_glEnableiOES; -PFNGLDISABLEIOESPROC glad_glDisableiOES; -PFNGLBLENDEQUATIONIOESPROC glad_glBlendEquationiOES; -PFNGLBLENDEQUATIONSEPARATEIOESPROC glad_glBlendEquationSeparateiOES; -PFNGLBLENDFUNCIOESPROC glad_glBlendFunciOES; -PFNGLBLENDFUNCSEPARATEIOESPROC glad_glBlendFuncSeparateiOES; -PFNGLCOLORMASKIOESPROC glad_glColorMaskiOES; -PFNGLISENABLEDIOESPROC glad_glIsEnablediOES; -PFNGLDRAWELEMENTSBASEVERTEXOESPROC glad_glDrawElementsBaseVertexOES; -PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC glad_glDrawRangeElementsBaseVertexOES; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC glad_glDrawElementsInstancedBaseVertexOES; -PFNGLFRAMEBUFFERTEXTUREOESPROC glad_glFramebufferTextureOES; -PFNGLGETPROGRAMBINARYOESPROC glad_glGetProgramBinaryOES; -PFNGLPROGRAMBINARYOESPROC glad_glProgramBinaryOES; -PFNGLMAPBUFFEROESPROC glad_glMapBufferOES; -PFNGLUNMAPBUFFEROESPROC glad_glUnmapBufferOES; -PFNGLGETBUFFERPOINTERVOESPROC glad_glGetBufferPointervOES; -PFNGLPRIMITIVEBOUNDINGBOXOESPROC glad_glPrimitiveBoundingBoxOES; -PFNGLMINSAMPLESHADINGOESPROC glad_glMinSampleShadingOES; -PFNGLPATCHPARAMETERIOESPROC glad_glPatchParameteriOES; -PFNGLTEXIMAGE3DOESPROC glad_glTexImage3DOES; -PFNGLTEXSUBIMAGE3DOESPROC glad_glTexSubImage3DOES; -PFNGLCOPYTEXSUBIMAGE3DOESPROC glad_glCopyTexSubImage3DOES; -PFNGLCOMPRESSEDTEXIMAGE3DOESPROC glad_glCompressedTexImage3DOES; -PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC glad_glCompressedTexSubImage3DOES; -PFNGLFRAMEBUFFERTEXTURE3DOESPROC glad_glFramebufferTexture3DOES; -PFNGLTEXPARAMETERIIVOESPROC glad_glTexParameterIivOES; -PFNGLTEXPARAMETERIUIVOESPROC glad_glTexParameterIuivOES; -PFNGLGETTEXPARAMETERIIVOESPROC glad_glGetTexParameterIivOES; -PFNGLGETTEXPARAMETERIUIVOESPROC glad_glGetTexParameterIuivOES; -PFNGLSAMPLERPARAMETERIIVOESPROC glad_glSamplerParameterIivOES; -PFNGLSAMPLERPARAMETERIUIVOESPROC glad_glSamplerParameterIuivOES; -PFNGLGETSAMPLERPARAMETERIIVOESPROC glad_glGetSamplerParameterIivOES; -PFNGLGETSAMPLERPARAMETERIUIVOESPROC glad_glGetSamplerParameterIuivOES; -PFNGLTEXBUFFEROESPROC glad_glTexBufferOES; -PFNGLTEXBUFFERRANGEOESPROC glad_glTexBufferRangeOES; -PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC glad_glTexStorage3DMultisampleOES; -PFNGLTEXTUREVIEWOESPROC glad_glTextureViewOES; -PFNGLBINDVERTEXARRAYOESPROC glad_glBindVertexArrayOES; -PFNGLDELETEVERTEXARRAYSOESPROC glad_glDeleteVertexArraysOES; -PFNGLGENVERTEXARRAYSOESPROC glad_glGenVertexArraysOES; -PFNGLISVERTEXARRAYOESPROC glad_glIsVertexArrayOES; -PFNGLVIEWPORTARRAYVOESPROC glad_glViewportArrayvOES; -PFNGLVIEWPORTINDEXEDFOESPROC glad_glViewportIndexedfOES; -PFNGLVIEWPORTINDEXEDFVOESPROC glad_glViewportIndexedfvOES; -PFNGLSCISSORARRAYVOESPROC glad_glScissorArrayvOES; -PFNGLSCISSORINDEXEDOESPROC glad_glScissorIndexedOES; -PFNGLSCISSORINDEXEDVOESPROC glad_glScissorIndexedvOES; -PFNGLDEPTHRANGEARRAYFVOESPROC glad_glDepthRangeArrayfvOES; -PFNGLDEPTHRANGEINDEXEDFOESPROC glad_glDepthRangeIndexedfOES; -PFNGLGETFLOATI_VOESPROC glad_glGetFloati_vOES; -PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC glad_glFramebufferTextureMultisampleMultiviewOVR; -PFNGLALPHAFUNCQCOMPROC glad_glAlphaFuncQCOM; -PFNGLGETDRIVERCONTROLSQCOMPROC glad_glGetDriverControlsQCOM; -PFNGLGETDRIVERCONTROLSTRINGQCOMPROC glad_glGetDriverControlStringQCOM; -PFNGLENABLEDRIVERCONTROLQCOMPROC glad_glEnableDriverControlQCOM; -PFNGLDISABLEDRIVERCONTROLQCOMPROC glad_glDisableDriverControlQCOM; -PFNGLEXTGETTEXTURESQCOMPROC glad_glExtGetTexturesQCOM; -PFNGLEXTGETBUFFERSQCOMPROC glad_glExtGetBuffersQCOM; -PFNGLEXTGETRENDERBUFFERSQCOMPROC glad_glExtGetRenderbuffersQCOM; -PFNGLEXTGETFRAMEBUFFERSQCOMPROC glad_glExtGetFramebuffersQCOM; -PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC glad_glExtGetTexLevelParameterivQCOM; -PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC glad_glExtTexObjectStateOverrideiQCOM; -PFNGLEXTGETTEXSUBIMAGEQCOMPROC glad_glExtGetTexSubImageQCOM; -PFNGLEXTGETBUFFERPOINTERVQCOMPROC glad_glExtGetBufferPointervQCOM; -PFNGLEXTGETSHADERSQCOMPROC glad_glExtGetShadersQCOM; -PFNGLEXTGETPROGRAMSQCOMPROC glad_glExtGetProgramsQCOM; -PFNGLEXTISPROGRAMBINARYQCOMPROC glad_glExtIsProgramBinaryQCOM; -PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC glad_glExtGetProgramBinarySourceQCOM; -PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC glad_glFramebufferFoveationConfigQCOM; -PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC glad_glFramebufferFoveationParametersQCOM; -PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC glad_glFramebufferFetchBarrierQCOM; -PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC glad_glTextureFoveationParametersQCOM; -PFNGLSTARTTILINGQCOMPROC glad_glStartTilingQCOM; -PFNGLENDTILINGQCOMPROC glad_glEndTilingQCOM; -static void load_GL_VERSION_1_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_0) return; - glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); - glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); - glad_glHint = (PFNGLHINTPROC)load("glHint"); - glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); - glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); - glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); - glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); - glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); - glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); - glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); - glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); - glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); - glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); - glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); - glad_glClear = (PFNGLCLEARPROC)load("glClear"); - glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); - glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); - glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); - glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); - glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); - glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); - glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); - glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); - glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); - glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); - glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); - glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); - glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); - glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); - glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); - glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); - glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); - glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); - glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); - glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); - glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); - glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); - glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); - glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); - glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); - glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); - glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); - glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); - glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); - glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); - glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); - glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); -} -static void load_GL_VERSION_1_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_1) return; - glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); - glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); - glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); - glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); - glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); - glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); - glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); - glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); - glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); - glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); - glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); - glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); - glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); -} -static void load_GL_VERSION_1_2(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_2) return; - glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); - glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); - glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); - glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); -} -static void load_GL_VERSION_1_3(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_3) return; - glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); - glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); - glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); - glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); - glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); - glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); - glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); - glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); - glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); -} -static void load_GL_VERSION_1_4(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_4) return; - glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); - glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); - glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); - glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); - glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); - glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); - glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); - glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); - glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); -} -static void load_GL_VERSION_1_5(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_5) return; - glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); - glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); - glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); - glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); - glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); - glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); - glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); - glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); - glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); - glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); - glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); - glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); - glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); - glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); - glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); - glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); - glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); - glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); - glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); -} -static void load_GL_VERSION_2_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_2_0) return; - glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); - glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); - glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); - glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); - glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); - glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); - glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); - glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); - glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); - glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); - glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); - glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); - glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); - glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); - glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); - glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); - glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); - glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); - glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); - glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); - glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); - glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); - glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); - glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); - glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); - glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); - glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); - glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); - glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); - glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); - glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); - glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); - glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); - glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); - glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); - glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); - glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); - glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); - glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); - glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); - glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); - glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); - glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); - glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); - glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); - glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); - glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); - glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); - glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); - glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); - glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); - glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); - glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); - glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); - glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); - glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); - glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); - glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); - glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); - glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); - glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); - glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); - glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); - glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); - glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); - glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); - glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); - glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); - glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); - glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); - glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); - glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); - glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); - glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); - glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); - glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); - glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); - glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); - glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); - glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); - glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); - glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); - glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); - glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); - glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); - glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); - glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); - glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); - glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); - glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); - glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); - glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); - glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); -} -static void load_GL_VERSION_2_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_2_1) return; - glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); - glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); - glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); - glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); - glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); - glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); -} -static void load_GL_VERSION_3_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_0) return; - glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); - glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); - glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); - glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); - glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); - glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); - glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); - glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); - glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); - glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); - glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); - glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); - glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); - glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); - glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); - glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); - glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); - glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); - glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); - glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); - glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); - glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); - glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); - glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); - glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); - glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); - glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); - glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); - glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); - glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); - glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); - glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); - glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); - glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); - glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); - glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); - glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); - glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); - glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); - glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); - glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); - glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); - glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); - glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); - glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); - glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); - glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); - glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); - glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); - glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); - glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); - glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); - glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); - glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); - glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); - glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); - glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); - glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); - glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); - glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); - glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); - glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); - glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); - glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); - glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); - glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); - glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); - glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); - glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); - glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); - glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); - glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); - glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); - glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); - glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); - glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); - glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); - glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); - glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); - glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); -} -static void load_GL_VERSION_3_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_1) return; - glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); - glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); - glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); - glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); - glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); - glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); - glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); - glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); - glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); - glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); - glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); - glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); -} -static void load_GL_VERSION_3_2(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_2) return; - glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); - glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); - glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); - glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); - glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); - glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); - glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); - glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); - glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); - glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); - glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); - glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); - glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); - glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); - glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); - glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); - glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); - glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); - glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); -} -static void load_GL_VERSION_3_3(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_3) return; - glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); - glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); - glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); - glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); - glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); - glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); - glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); - glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); - glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); - glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); - glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); - glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); - glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); - glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); - glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); - glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); - glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); - glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); - glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); - glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); - glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); - glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); - glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); - glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); - glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); - glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); - glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); - glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); - glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); - glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); - glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); - glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); - glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); - glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); - glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); - glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); - glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); - glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); - glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); - glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); - glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); - glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); - glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); - glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); - glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); - glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); - glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); - glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); - glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); - glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); - glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); - glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); - glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); - glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); - glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); - glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); - glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); - glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); -} -static void load_GL_VERSION_4_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_4_0) return; - glad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)load("glMinSampleShading"); - glad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)load("glBlendEquationi"); - glad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)load("glBlendEquationSeparatei"); - glad_glBlendFunci = (PFNGLBLENDFUNCIPROC)load("glBlendFunci"); - glad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)load("glBlendFuncSeparatei"); - glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect"); - glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect"); - glad_glUniform1d = (PFNGLUNIFORM1DPROC)load("glUniform1d"); - glad_glUniform2d = (PFNGLUNIFORM2DPROC)load("glUniform2d"); - glad_glUniform3d = (PFNGLUNIFORM3DPROC)load("glUniform3d"); - glad_glUniform4d = (PFNGLUNIFORM4DPROC)load("glUniform4d"); - glad_glUniform1dv = (PFNGLUNIFORM1DVPROC)load("glUniform1dv"); - glad_glUniform2dv = (PFNGLUNIFORM2DVPROC)load("glUniform2dv"); - glad_glUniform3dv = (PFNGLUNIFORM3DVPROC)load("glUniform3dv"); - glad_glUniform4dv = (PFNGLUNIFORM4DVPROC)load("glUniform4dv"); - glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)load("glUniformMatrix2dv"); - glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)load("glUniformMatrix3dv"); - glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)load("glUniformMatrix4dv"); - glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)load("glUniformMatrix2x3dv"); - glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)load("glUniformMatrix2x4dv"); - glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)load("glUniformMatrix3x2dv"); - glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)load("glUniformMatrix3x4dv"); - glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)load("glUniformMatrix4x2dv"); - glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)load("glUniformMatrix4x3dv"); - glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC)load("glGetUniformdv"); - glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load("glGetSubroutineUniformLocation"); - glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)load("glGetSubroutineIndex"); - glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load("glGetActiveSubroutineUniformiv"); - glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load("glGetActiveSubroutineUniformName"); - glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)load("glGetActiveSubroutineName"); - glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)load("glUniformSubroutinesuiv"); - glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load("glGetUniformSubroutineuiv"); - glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)load("glGetProgramStageiv"); - glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri"); - glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)load("glPatchParameterfv"); - glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback"); - glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks"); - glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks"); - glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback"); - glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback"); - glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback"); - glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)load("glDrawTransformFeedback"); - glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)load("glDrawTransformFeedbackStream"); - glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)load("glBeginQueryIndexed"); - glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)load("glEndQueryIndexed"); - glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)load("glGetQueryIndexediv"); -} -static void load_GL_VERSION_4_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_4_1) return; - glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler"); - glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary"); - glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat"); - glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); - glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); - glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load("glGetProgramBinary"); - glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load("glProgramBinary"); - glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); - glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load("glUseProgramStages"); - glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load("glActiveShaderProgram"); - glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load("glCreateShaderProgramv"); - glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load("glBindProgramPipeline"); - glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load("glDeleteProgramPipelines"); - glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load("glGenProgramPipelines"); - glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load("glIsProgramPipeline"); - glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load("glGetProgramPipelineiv"); - glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); - glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load("glProgramUniform1i"); - glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load("glProgramUniform1iv"); - glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load("glProgramUniform1f"); - glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load("glProgramUniform1fv"); - glad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)load("glProgramUniform1d"); - glad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)load("glProgramUniform1dv"); - glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load("glProgramUniform1ui"); - glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load("glProgramUniform1uiv"); - glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load("glProgramUniform2i"); - glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load("glProgramUniform2iv"); - glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load("glProgramUniform2f"); - glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load("glProgramUniform2fv"); - glad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)load("glProgramUniform2d"); - glad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)load("glProgramUniform2dv"); - glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load("glProgramUniform2ui"); - glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load("glProgramUniform2uiv"); - glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load("glProgramUniform3i"); - glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load("glProgramUniform3iv"); - glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load("glProgramUniform3f"); - glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load("glProgramUniform3fv"); - glad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)load("glProgramUniform3d"); - glad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)load("glProgramUniform3dv"); - glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load("glProgramUniform3ui"); - glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load("glProgramUniform3uiv"); - glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load("glProgramUniform4i"); - glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load("glProgramUniform4iv"); - glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load("glProgramUniform4f"); - glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load("glProgramUniform4fv"); - glad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)load("glProgramUniform4d"); - glad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)load("glProgramUniform4dv"); - glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load("glProgramUniform4ui"); - glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load("glProgramUniform4uiv"); - glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load("glProgramUniformMatrix2fv"); - glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load("glProgramUniformMatrix3fv"); - glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load("glProgramUniformMatrix4fv"); - glad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)load("glProgramUniformMatrix2dv"); - glad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)load("glProgramUniformMatrix3dv"); - glad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)load("glProgramUniformMatrix4dv"); - glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load("glProgramUniformMatrix2x3fv"); - glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load("glProgramUniformMatrix3x2fv"); - glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load("glProgramUniformMatrix2x4fv"); - glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load("glProgramUniformMatrix4x2fv"); - glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load("glProgramUniformMatrix3x4fv"); - glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load("glProgramUniformMatrix4x3fv"); - glad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)load("glProgramUniformMatrix2x3dv"); - glad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)load("glProgramUniformMatrix3x2dv"); - glad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)load("glProgramUniformMatrix2x4dv"); - glad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)load("glProgramUniformMatrix4x2dv"); - glad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)load("glProgramUniformMatrix3x4dv"); - glad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)load("glProgramUniformMatrix4x3dv"); - glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load("glValidateProgramPipeline"); - glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load("glGetProgramPipelineInfoLog"); - glad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)load("glVertexAttribL1d"); - glad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)load("glVertexAttribL2d"); - glad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)load("glVertexAttribL3d"); - glad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)load("glVertexAttribL4d"); - glad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)load("glVertexAttribL1dv"); - glad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)load("glVertexAttribL2dv"); - glad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)load("glVertexAttribL3dv"); - glad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)load("glVertexAttribL4dv"); - glad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)load("glVertexAttribLPointer"); - glad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)load("glGetVertexAttribLdv"); - glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)load("glViewportArrayv"); - glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)load("glViewportIndexedf"); - glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)load("glViewportIndexedfv"); - glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC)load("glScissorArrayv"); - glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)load("glScissorIndexed"); - glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)load("glScissorIndexedv"); - glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)load("glDepthRangeArrayv"); - glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)load("glDepthRangeIndexed"); - glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC)load("glGetFloati_v"); - glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)load("glGetDoublei_v"); -} -static void load_GL_VERSION_4_2(GLADloadproc load) { - if(!GLAD_GL_VERSION_4_2) return; - glad_glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)load("glDrawArraysInstancedBaseInstance"); - glad_glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)load("glDrawElementsInstancedBaseInstance"); - glad_glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)load("glDrawElementsInstancedBaseVertexBaseInstance"); - glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load("glGetInternalformativ"); - glad_glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)load("glGetActiveAtomicCounterBufferiv"); - glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)load("glBindImageTexture"); - glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)load("glMemoryBarrier"); - glad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)load("glTexStorage1D"); - glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)load("glTexStorage2D"); - glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load("glTexStorage3D"); - glad_glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)load("glDrawTransformFeedbackInstanced"); - glad_glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)load("glDrawTransformFeedbackStreamInstanced"); -} -static void load_GL_VERSION_4_3(GLADloadproc load) { - if(!GLAD_GL_VERSION_4_3) return; - glad_glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)load("glClearBufferData"); - glad_glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)load("glClearBufferSubData"); - glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)load("glDispatchCompute"); - glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)load("glDispatchComputeIndirect"); - glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)load("glCopyImageSubData"); - glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)load("glFramebufferParameteri"); - glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)load("glGetFramebufferParameteriv"); - glad_glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)load("glGetInternalformati64v"); - glad_glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)load("glInvalidateTexSubImage"); - glad_glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)load("glInvalidateTexImage"); - glad_glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)load("glInvalidateBufferSubData"); - glad_glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)load("glInvalidateBufferData"); - glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)load("glInvalidateFramebuffer"); - glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)load("glInvalidateSubFramebuffer"); - glad_glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)load("glMultiDrawArraysIndirect"); - glad_glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)load("glMultiDrawElementsIndirect"); - glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)load("glGetProgramInterfaceiv"); - glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)load("glGetProgramResourceIndex"); - glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)load("glGetProgramResourceName"); - glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)load("glGetProgramResourceiv"); - glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)load("glGetProgramResourceLocation"); - glad_glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)load("glGetProgramResourceLocationIndex"); - glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)load("glShaderStorageBlockBinding"); - glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)load("glTexBufferRange"); - glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)load("glTexStorage2DMultisample"); - glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)load("glTexStorage3DMultisample"); - glad_glTextureView = (PFNGLTEXTUREVIEWPROC)load("glTextureView"); - glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer"); - glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat"); - glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat"); - glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)load("glVertexAttribLFormat"); - glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding"); - glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor"); - glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)load("glDebugMessageControl"); - glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)load("glDebugMessageInsert"); - glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)load("glDebugMessageCallback"); - glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)load("glGetDebugMessageLog"); - glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load("glPushDebugGroup"); - glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)load("glPopDebugGroup"); - glad_glObjectLabel = (PFNGLOBJECTLABELPROC)load("glObjectLabel"); - glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load("glGetObjectLabel"); - glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load("glObjectPtrLabel"); - glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)load("glGetObjectPtrLabel"); - glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); -} -static void load_GL_VERSION_4_4(GLADloadproc load) { - if(!GLAD_GL_VERSION_4_4) return; - glad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC)load("glBufferStorage"); - glad_glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)load("glClearTexImage"); - glad_glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)load("glClearTexSubImage"); - glad_glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)load("glBindBuffersBase"); - glad_glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)load("glBindBuffersRange"); - glad_glBindTextures = (PFNGLBINDTEXTURESPROC)load("glBindTextures"); - glad_glBindSamplers = (PFNGLBINDSAMPLERSPROC)load("glBindSamplers"); - glad_glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)load("glBindImageTextures"); - glad_glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)load("glBindVertexBuffers"); -} -static void load_GL_VERSION_4_5(GLADloadproc load) { - if(!GLAD_GL_VERSION_4_5) return; - glad_glClipControl = (PFNGLCLIPCONTROLPROC)load("glClipControl"); - glad_glCreateTransformFeedbacks = (PFNGLCREATETRANSFORMFEEDBACKSPROC)load("glCreateTransformFeedbacks"); - glad_glTransformFeedbackBufferBase = (PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)load("glTransformFeedbackBufferBase"); - glad_glTransformFeedbackBufferRange = (PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)load("glTransformFeedbackBufferRange"); - glad_glGetTransformFeedbackiv = (PFNGLGETTRANSFORMFEEDBACKIVPROC)load("glGetTransformFeedbackiv"); - glad_glGetTransformFeedbacki_v = (PFNGLGETTRANSFORMFEEDBACKI_VPROC)load("glGetTransformFeedbacki_v"); - glad_glGetTransformFeedbacki64_v = (PFNGLGETTRANSFORMFEEDBACKI64_VPROC)load("glGetTransformFeedbacki64_v"); - glad_glCreateBuffers = (PFNGLCREATEBUFFERSPROC)load("glCreateBuffers"); - glad_glNamedBufferStorage = (PFNGLNAMEDBUFFERSTORAGEPROC)load("glNamedBufferStorage"); - glad_glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC)load("glNamedBufferData"); - glad_glNamedBufferSubData = (PFNGLNAMEDBUFFERSUBDATAPROC)load("glNamedBufferSubData"); - glad_glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC)load("glCopyNamedBufferSubData"); - glad_glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC)load("glClearNamedBufferData"); - glad_glClearNamedBufferSubData = (PFNGLCLEARNAMEDBUFFERSUBDATAPROC)load("glClearNamedBufferSubData"); - glad_glMapNamedBuffer = (PFNGLMAPNAMEDBUFFERPROC)load("glMapNamedBuffer"); - glad_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC)load("glMapNamedBufferRange"); - glad_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC)load("glUnmapNamedBuffer"); - glad_glFlushMappedNamedBufferRange = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)load("glFlushMappedNamedBufferRange"); - glad_glGetNamedBufferParameteriv = (PFNGLGETNAMEDBUFFERPARAMETERIVPROC)load("glGetNamedBufferParameteriv"); - glad_glGetNamedBufferParameteri64v = (PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)load("glGetNamedBufferParameteri64v"); - glad_glGetNamedBufferPointerv = (PFNGLGETNAMEDBUFFERPOINTERVPROC)load("glGetNamedBufferPointerv"); - glad_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC)load("glGetNamedBufferSubData"); - glad_glCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC)load("glCreateFramebuffers"); - glad_glNamedFramebufferRenderbuffer = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)load("glNamedFramebufferRenderbuffer"); - glad_glNamedFramebufferParameteri = (PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)load("glNamedFramebufferParameteri"); - glad_glNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)load("glNamedFramebufferTexture"); - glad_glNamedFramebufferTextureLayer = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)load("glNamedFramebufferTextureLayer"); - glad_glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)load("glNamedFramebufferDrawBuffer"); - glad_glNamedFramebufferDrawBuffers = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)load("glNamedFramebufferDrawBuffers"); - glad_glNamedFramebufferReadBuffer = (PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)load("glNamedFramebufferReadBuffer"); - glad_glInvalidateNamedFramebufferData = (PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)load("glInvalidateNamedFramebufferData"); - glad_glInvalidateNamedFramebufferSubData = (PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)load("glInvalidateNamedFramebufferSubData"); - glad_glClearNamedFramebufferiv = (PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)load("glClearNamedFramebufferiv"); - glad_glClearNamedFramebufferuiv = (PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)load("glClearNamedFramebufferuiv"); - glad_glClearNamedFramebufferfv = (PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)load("glClearNamedFramebufferfv"); - glad_glClearNamedFramebufferfi = (PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)load("glClearNamedFramebufferfi"); - glad_glBlitNamedFramebuffer = (PFNGLBLITNAMEDFRAMEBUFFERPROC)load("glBlitNamedFramebuffer"); - glad_glCheckNamedFramebufferStatus = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)load("glCheckNamedFramebufferStatus"); - glad_glGetNamedFramebufferParameteriv = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)load("glGetNamedFramebufferParameteriv"); - glad_glGetNamedFramebufferAttachmentParameteriv = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetNamedFramebufferAttachmentParameteriv"); - glad_glCreateRenderbuffers = (PFNGLCREATERENDERBUFFERSPROC)load("glCreateRenderbuffers"); - glad_glNamedRenderbufferStorage = (PFNGLNAMEDRENDERBUFFERSTORAGEPROC)load("glNamedRenderbufferStorage"); - glad_glNamedRenderbufferStorageMultisample = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glNamedRenderbufferStorageMultisample"); - glad_glGetNamedRenderbufferParameteriv = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)load("glGetNamedRenderbufferParameteriv"); - glad_glCreateTextures = (PFNGLCREATETEXTURESPROC)load("glCreateTextures"); - glad_glTextureBuffer = (PFNGLTEXTUREBUFFERPROC)load("glTextureBuffer"); - glad_glTextureBufferRange = (PFNGLTEXTUREBUFFERRANGEPROC)load("glTextureBufferRange"); - glad_glTextureStorage1D = (PFNGLTEXTURESTORAGE1DPROC)load("glTextureStorage1D"); - glad_glTextureStorage2D = (PFNGLTEXTURESTORAGE2DPROC)load("glTextureStorage2D"); - glad_glTextureStorage3D = (PFNGLTEXTURESTORAGE3DPROC)load("glTextureStorage3D"); - glad_glTextureStorage2DMultisample = (PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)load("glTextureStorage2DMultisample"); - glad_glTextureStorage3DMultisample = (PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)load("glTextureStorage3DMultisample"); - glad_glTextureSubImage1D = (PFNGLTEXTURESUBIMAGE1DPROC)load("glTextureSubImage1D"); - glad_glTextureSubImage2D = (PFNGLTEXTURESUBIMAGE2DPROC)load("glTextureSubImage2D"); - glad_glTextureSubImage3D = (PFNGLTEXTURESUBIMAGE3DPROC)load("glTextureSubImage3D"); - glad_glCompressedTextureSubImage1D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)load("glCompressedTextureSubImage1D"); - glad_glCompressedTextureSubImage2D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)load("glCompressedTextureSubImage2D"); - glad_glCompressedTextureSubImage3D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)load("glCompressedTextureSubImage3D"); - glad_glCopyTextureSubImage1D = (PFNGLCOPYTEXTURESUBIMAGE1DPROC)load("glCopyTextureSubImage1D"); - glad_glCopyTextureSubImage2D = (PFNGLCOPYTEXTURESUBIMAGE2DPROC)load("glCopyTextureSubImage2D"); - glad_glCopyTextureSubImage3D = (PFNGLCOPYTEXTURESUBIMAGE3DPROC)load("glCopyTextureSubImage3D"); - glad_glTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC)load("glTextureParameterf"); - glad_glTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC)load("glTextureParameterfv"); - glad_glTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC)load("glTextureParameteri"); - glad_glTextureParameterIiv = (PFNGLTEXTUREPARAMETERIIVPROC)load("glTextureParameterIiv"); - glad_glTextureParameterIuiv = (PFNGLTEXTUREPARAMETERIUIVPROC)load("glTextureParameterIuiv"); - glad_glTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC)load("glTextureParameteriv"); - glad_glGenerateTextureMipmap = (PFNGLGENERATETEXTUREMIPMAPPROC)load("glGenerateTextureMipmap"); - glad_glBindTextureUnit = (PFNGLBINDTEXTUREUNITPROC)load("glBindTextureUnit"); - glad_glGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC)load("glGetTextureImage"); - glad_glGetCompressedTextureImage = (PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)load("glGetCompressedTextureImage"); - glad_glGetTextureLevelParameterfv = (PFNGLGETTEXTURELEVELPARAMETERFVPROC)load("glGetTextureLevelParameterfv"); - glad_glGetTextureLevelParameteriv = (PFNGLGETTEXTURELEVELPARAMETERIVPROC)load("glGetTextureLevelParameteriv"); - glad_glGetTextureParameterfv = (PFNGLGETTEXTUREPARAMETERFVPROC)load("glGetTextureParameterfv"); - glad_glGetTextureParameterIiv = (PFNGLGETTEXTUREPARAMETERIIVPROC)load("glGetTextureParameterIiv"); - glad_glGetTextureParameterIuiv = (PFNGLGETTEXTUREPARAMETERIUIVPROC)load("glGetTextureParameterIuiv"); - glad_glGetTextureParameteriv = (PFNGLGETTEXTUREPARAMETERIVPROC)load("glGetTextureParameteriv"); - glad_glCreateVertexArrays = (PFNGLCREATEVERTEXARRAYSPROC)load("glCreateVertexArrays"); - glad_glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC)load("glDisableVertexArrayAttrib"); - glad_glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC)load("glEnableVertexArrayAttrib"); - glad_glVertexArrayElementBuffer = (PFNGLVERTEXARRAYELEMENTBUFFERPROC)load("glVertexArrayElementBuffer"); - glad_glVertexArrayVertexBuffer = (PFNGLVERTEXARRAYVERTEXBUFFERPROC)load("glVertexArrayVertexBuffer"); - glad_glVertexArrayVertexBuffers = (PFNGLVERTEXARRAYVERTEXBUFFERSPROC)load("glVertexArrayVertexBuffers"); - glad_glVertexArrayAttribBinding = (PFNGLVERTEXARRAYATTRIBBINDINGPROC)load("glVertexArrayAttribBinding"); - glad_glVertexArrayAttribFormat = (PFNGLVERTEXARRAYATTRIBFORMATPROC)load("glVertexArrayAttribFormat"); - glad_glVertexArrayAttribIFormat = (PFNGLVERTEXARRAYATTRIBIFORMATPROC)load("glVertexArrayAttribIFormat"); - glad_glVertexArrayAttribLFormat = (PFNGLVERTEXARRAYATTRIBLFORMATPROC)load("glVertexArrayAttribLFormat"); - glad_glVertexArrayBindingDivisor = (PFNGLVERTEXARRAYBINDINGDIVISORPROC)load("glVertexArrayBindingDivisor"); - glad_glGetVertexArrayiv = (PFNGLGETVERTEXARRAYIVPROC)load("glGetVertexArrayiv"); - glad_glGetVertexArrayIndexediv = (PFNGLGETVERTEXARRAYINDEXEDIVPROC)load("glGetVertexArrayIndexediv"); - glad_glGetVertexArrayIndexed64iv = (PFNGLGETVERTEXARRAYINDEXED64IVPROC)load("glGetVertexArrayIndexed64iv"); - glad_glCreateSamplers = (PFNGLCREATESAMPLERSPROC)load("glCreateSamplers"); - glad_glCreateProgramPipelines = (PFNGLCREATEPROGRAMPIPELINESPROC)load("glCreateProgramPipelines"); - glad_glCreateQueries = (PFNGLCREATEQUERIESPROC)load("glCreateQueries"); - glad_glGetQueryBufferObjecti64v = (PFNGLGETQUERYBUFFEROBJECTI64VPROC)load("glGetQueryBufferObjecti64v"); - glad_glGetQueryBufferObjectiv = (PFNGLGETQUERYBUFFEROBJECTIVPROC)load("glGetQueryBufferObjectiv"); - glad_glGetQueryBufferObjectui64v = (PFNGLGETQUERYBUFFEROBJECTUI64VPROC)load("glGetQueryBufferObjectui64v"); - glad_glGetQueryBufferObjectuiv = (PFNGLGETQUERYBUFFEROBJECTUIVPROC)load("glGetQueryBufferObjectuiv"); - glad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC)load("glMemoryBarrierByRegion"); - glad_glGetTextureSubImage = (PFNGLGETTEXTURESUBIMAGEPROC)load("glGetTextureSubImage"); - glad_glGetCompressedTextureSubImage = (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)load("glGetCompressedTextureSubImage"); - glad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC)load("glGetGraphicsResetStatus"); - glad_glGetnCompressedTexImage = (PFNGLGETNCOMPRESSEDTEXIMAGEPROC)load("glGetnCompressedTexImage"); - glad_glGetnTexImage = (PFNGLGETNTEXIMAGEPROC)load("glGetnTexImage"); - glad_glGetnUniformdv = (PFNGLGETNUNIFORMDVPROC)load("glGetnUniformdv"); - glad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC)load("glGetnUniformfv"); - glad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC)load("glGetnUniformiv"); - glad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC)load("glGetnUniformuiv"); - glad_glReadnPixels = (PFNGLREADNPIXELSPROC)load("glReadnPixels"); - glad_glGetnMapdv = (PFNGLGETNMAPDVPROC)load("glGetnMapdv"); - glad_glGetnMapfv = (PFNGLGETNMAPFVPROC)load("glGetnMapfv"); - glad_glGetnMapiv = (PFNGLGETNMAPIVPROC)load("glGetnMapiv"); - glad_glGetnPixelMapfv = (PFNGLGETNPIXELMAPFVPROC)load("glGetnPixelMapfv"); - glad_glGetnPixelMapuiv = (PFNGLGETNPIXELMAPUIVPROC)load("glGetnPixelMapuiv"); - glad_glGetnPixelMapusv = (PFNGLGETNPIXELMAPUSVPROC)load("glGetnPixelMapusv"); - glad_glGetnPolygonStipple = (PFNGLGETNPOLYGONSTIPPLEPROC)load("glGetnPolygonStipple"); - glad_glGetnColorTable = (PFNGLGETNCOLORTABLEPROC)load("glGetnColorTable"); - glad_glGetnConvolutionFilter = (PFNGLGETNCONVOLUTIONFILTERPROC)load("glGetnConvolutionFilter"); - glad_glGetnSeparableFilter = (PFNGLGETNSEPARABLEFILTERPROC)load("glGetnSeparableFilter"); - glad_glGetnHistogram = (PFNGLGETNHISTOGRAMPROC)load("glGetnHistogram"); - glad_glGetnMinmax = (PFNGLGETNMINMAXPROC)load("glGetnMinmax"); - glad_glTextureBarrier = (PFNGLTEXTUREBARRIERPROC)load("glTextureBarrier"); -} -static void load_GL_VERSION_4_6(GLADloadproc load) { - if(!GLAD_GL_VERSION_4_6) return; - glad_glSpecializeShader = (PFNGLSPECIALIZESHADERPROC)load("glSpecializeShader"); - glad_glMultiDrawArraysIndirectCount = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC)load("glMultiDrawArraysIndirectCount"); - glad_glMultiDrawElementsIndirectCount = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC)load("glMultiDrawElementsIndirectCount"); - glad_glPolygonOffsetClamp = (PFNGLPOLYGONOFFSETCLAMPPROC)load("glPolygonOffsetClamp"); -} -static void load_GL_3DFX_tbuffer(GLADloadproc load) { - if(!GLAD_GL_3DFX_tbuffer) return; - glad_glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC)load("glTbufferMask3DFX"); -} -static void load_GL_AMD_debug_output(GLADloadproc load) { - if(!GLAD_GL_AMD_debug_output) return; - glad_glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC)load("glDebugMessageEnableAMD"); - glad_glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC)load("glDebugMessageInsertAMD"); - glad_glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC)load("glDebugMessageCallbackAMD"); - glad_glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC)load("glGetDebugMessageLogAMD"); -} -static void load_GL_AMD_draw_buffers_blend(GLADloadproc load) { - if(!GLAD_GL_AMD_draw_buffers_blend) return; - glad_glBlendFuncIndexedAMD = (PFNGLBLENDFUNCINDEXEDAMDPROC)load("glBlendFuncIndexedAMD"); - glad_glBlendFuncSeparateIndexedAMD = (PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)load("glBlendFuncSeparateIndexedAMD"); - glad_glBlendEquationIndexedAMD = (PFNGLBLENDEQUATIONINDEXEDAMDPROC)load("glBlendEquationIndexedAMD"); - glad_glBlendEquationSeparateIndexedAMD = (PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)load("glBlendEquationSeparateIndexedAMD"); -} -static void load_GL_AMD_framebuffer_sample_positions(GLADloadproc load) { - if(!GLAD_GL_AMD_framebuffer_sample_positions) return; - glad_glFramebufferSamplePositionsfvAMD = (PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)load("glFramebufferSamplePositionsfvAMD"); - glad_glNamedFramebufferSamplePositionsfvAMD = (PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC)load("glNamedFramebufferSamplePositionsfvAMD"); - glad_glGetFramebufferParameterfvAMD = (PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC)load("glGetFramebufferParameterfvAMD"); - glad_glGetNamedFramebufferParameterfvAMD = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC)load("glGetNamedFramebufferParameterfvAMD"); -} -static void load_GL_AMD_gpu_shader_int64(GLADloadproc load) { - if(!GLAD_GL_AMD_gpu_shader_int64) return; - glad_glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC)load("glUniform1i64NV"); - glad_glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC)load("glUniform2i64NV"); - glad_glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC)load("glUniform3i64NV"); - glad_glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC)load("glUniform4i64NV"); - glad_glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC)load("glUniform1i64vNV"); - glad_glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC)load("glUniform2i64vNV"); - glad_glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC)load("glUniform3i64vNV"); - glad_glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC)load("glUniform4i64vNV"); - glad_glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC)load("glUniform1ui64NV"); - glad_glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC)load("glUniform2ui64NV"); - glad_glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC)load("glUniform3ui64NV"); - glad_glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC)load("glUniform4ui64NV"); - glad_glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC)load("glUniform1ui64vNV"); - glad_glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC)load("glUniform2ui64vNV"); - glad_glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC)load("glUniform3ui64vNV"); - glad_glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC)load("glUniform4ui64vNV"); - glad_glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC)load("glGetUniformi64vNV"); - glad_glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC)load("glGetUniformui64vNV"); - glad_glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC)load("glProgramUniform1i64NV"); - glad_glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC)load("glProgramUniform2i64NV"); - glad_glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC)load("glProgramUniform3i64NV"); - glad_glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC)load("glProgramUniform4i64NV"); - glad_glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC)load("glProgramUniform1i64vNV"); - glad_glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC)load("glProgramUniform2i64vNV"); - glad_glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC)load("glProgramUniform3i64vNV"); - glad_glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC)load("glProgramUniform4i64vNV"); - glad_glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC)load("glProgramUniform1ui64NV"); - glad_glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC)load("glProgramUniform2ui64NV"); - glad_glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC)load("glProgramUniform3ui64NV"); - glad_glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC)load("glProgramUniform4ui64NV"); - glad_glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC)load("glProgramUniform1ui64vNV"); - glad_glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC)load("glProgramUniform2ui64vNV"); - glad_glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC)load("glProgramUniform3ui64vNV"); - glad_glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC)load("glProgramUniform4ui64vNV"); -} -static void load_GL_AMD_interleaved_elements(GLADloadproc load) { - if(!GLAD_GL_AMD_interleaved_elements) return; - glad_glVertexAttribParameteriAMD = (PFNGLVERTEXATTRIBPARAMETERIAMDPROC)load("glVertexAttribParameteriAMD"); -} -static void load_GL_AMD_multi_draw_indirect(GLADloadproc load) { - if(!GLAD_GL_AMD_multi_draw_indirect) return; - glad_glMultiDrawArraysIndirectAMD = (PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)load("glMultiDrawArraysIndirectAMD"); - glad_glMultiDrawElementsIndirectAMD = (PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)load("glMultiDrawElementsIndirectAMD"); -} -static void load_GL_AMD_name_gen_delete(GLADloadproc load) { - if(!GLAD_GL_AMD_name_gen_delete) return; - glad_glGenNamesAMD = (PFNGLGENNAMESAMDPROC)load("glGenNamesAMD"); - glad_glDeleteNamesAMD = (PFNGLDELETENAMESAMDPROC)load("glDeleteNamesAMD"); - glad_glIsNameAMD = (PFNGLISNAMEAMDPROC)load("glIsNameAMD"); -} -static void load_GL_AMD_occlusion_query_event(GLADloadproc load) { - if(!GLAD_GL_AMD_occlusion_query_event) return; - glad_glQueryObjectParameteruiAMD = (PFNGLQUERYOBJECTPARAMETERUIAMDPROC)load("glQueryObjectParameteruiAMD"); -} -static void load_GL_AMD_performance_monitor(GLADloadproc load) { - if(!GLAD_GL_AMD_performance_monitor) return; - glad_glGetPerfMonitorGroupsAMD = (PFNGLGETPERFMONITORGROUPSAMDPROC)load("glGetPerfMonitorGroupsAMD"); - glad_glGetPerfMonitorCountersAMD = (PFNGLGETPERFMONITORCOUNTERSAMDPROC)load("glGetPerfMonitorCountersAMD"); - glad_glGetPerfMonitorGroupStringAMD = (PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)load("glGetPerfMonitorGroupStringAMD"); - glad_glGetPerfMonitorCounterStringAMD = (PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)load("glGetPerfMonitorCounterStringAMD"); - glad_glGetPerfMonitorCounterInfoAMD = (PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)load("glGetPerfMonitorCounterInfoAMD"); - glad_glGenPerfMonitorsAMD = (PFNGLGENPERFMONITORSAMDPROC)load("glGenPerfMonitorsAMD"); - glad_glDeletePerfMonitorsAMD = (PFNGLDELETEPERFMONITORSAMDPROC)load("glDeletePerfMonitorsAMD"); - glad_glSelectPerfMonitorCountersAMD = (PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)load("glSelectPerfMonitorCountersAMD"); - glad_glBeginPerfMonitorAMD = (PFNGLBEGINPERFMONITORAMDPROC)load("glBeginPerfMonitorAMD"); - glad_glEndPerfMonitorAMD = (PFNGLENDPERFMONITORAMDPROC)load("glEndPerfMonitorAMD"); - glad_glGetPerfMonitorCounterDataAMD = (PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)load("glGetPerfMonitorCounterDataAMD"); -} -static void load_GL_AMD_sample_positions(GLADloadproc load) { - if(!GLAD_GL_AMD_sample_positions) return; - glad_glSetMultisamplefvAMD = (PFNGLSETMULTISAMPLEFVAMDPROC)load("glSetMultisamplefvAMD"); -} -static void load_GL_AMD_sparse_texture(GLADloadproc load) { - if(!GLAD_GL_AMD_sparse_texture) return; - glad_glTexStorageSparseAMD = (PFNGLTEXSTORAGESPARSEAMDPROC)load("glTexStorageSparseAMD"); - glad_glTextureStorageSparseAMD = (PFNGLTEXTURESTORAGESPARSEAMDPROC)load("glTextureStorageSparseAMD"); -} -static void load_GL_AMD_stencil_operation_extended(GLADloadproc load) { - if(!GLAD_GL_AMD_stencil_operation_extended) return; - glad_glStencilOpValueAMD = (PFNGLSTENCILOPVALUEAMDPROC)load("glStencilOpValueAMD"); -} -static void load_GL_AMD_vertex_shader_tessellator(GLADloadproc load) { - if(!GLAD_GL_AMD_vertex_shader_tessellator) return; - glad_glTessellationFactorAMD = (PFNGLTESSELLATIONFACTORAMDPROC)load("glTessellationFactorAMD"); - glad_glTessellationModeAMD = (PFNGLTESSELLATIONMODEAMDPROC)load("glTessellationModeAMD"); -} -static void load_GL_APPLE_element_array(GLADloadproc load) { - if(!GLAD_GL_APPLE_element_array) return; - glad_glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC)load("glElementPointerAPPLE"); - glad_glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC)load("glDrawElementArrayAPPLE"); - glad_glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)load("glDrawRangeElementArrayAPPLE"); - glad_glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)load("glMultiDrawElementArrayAPPLE"); - glad_glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)load("glMultiDrawRangeElementArrayAPPLE"); -} -static void load_GL_APPLE_fence(GLADloadproc load) { - if(!GLAD_GL_APPLE_fence) return; - glad_glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC)load("glGenFencesAPPLE"); - glad_glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC)load("glDeleteFencesAPPLE"); - glad_glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC)load("glSetFenceAPPLE"); - glad_glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC)load("glIsFenceAPPLE"); - glad_glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC)load("glTestFenceAPPLE"); - glad_glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC)load("glFinishFenceAPPLE"); - glad_glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC)load("glTestObjectAPPLE"); - glad_glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC)load("glFinishObjectAPPLE"); -} -static void load_GL_APPLE_flush_buffer_range(GLADloadproc load) { - if(!GLAD_GL_APPLE_flush_buffer_range) return; - glad_glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC)load("glBufferParameteriAPPLE"); - glad_glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)load("glFlushMappedBufferRangeAPPLE"); -} -static void load_GL_APPLE_object_purgeable(GLADloadproc load) { - if(!GLAD_GL_APPLE_object_purgeable) return; - glad_glObjectPurgeableAPPLE = (PFNGLOBJECTPURGEABLEAPPLEPROC)load("glObjectPurgeableAPPLE"); - glad_glObjectUnpurgeableAPPLE = (PFNGLOBJECTUNPURGEABLEAPPLEPROC)load("glObjectUnpurgeableAPPLE"); - glad_glGetObjectParameterivAPPLE = (PFNGLGETOBJECTPARAMETERIVAPPLEPROC)load("glGetObjectParameterivAPPLE"); -} -static void load_GL_APPLE_texture_range(GLADloadproc load) { - if(!GLAD_GL_APPLE_texture_range) return; - glad_glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC)load("glTextureRangeAPPLE"); - glad_glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)load("glGetTexParameterPointervAPPLE"); -} -static void load_GL_APPLE_vertex_array_object(GLADloadproc load) { - if(!GLAD_GL_APPLE_vertex_array_object) return; - glad_glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC)load("glBindVertexArrayAPPLE"); - glad_glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC)load("glDeleteVertexArraysAPPLE"); - glad_glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC)load("glGenVertexArraysAPPLE"); - glad_glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC)load("glIsVertexArrayAPPLE"); -} -static void load_GL_APPLE_vertex_array_range(GLADloadproc load) { - if(!GLAD_GL_APPLE_vertex_array_range) return; - glad_glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC)load("glVertexArrayRangeAPPLE"); - glad_glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)load("glFlushVertexArrayRangeAPPLE"); - glad_glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)load("glVertexArrayParameteriAPPLE"); -} -static void load_GL_APPLE_vertex_program_evaluators(GLADloadproc load) { - if(!GLAD_GL_APPLE_vertex_program_evaluators) return; - glad_glEnableVertexAttribAPPLE = (PFNGLENABLEVERTEXATTRIBAPPLEPROC)load("glEnableVertexAttribAPPLE"); - glad_glDisableVertexAttribAPPLE = (PFNGLDISABLEVERTEXATTRIBAPPLEPROC)load("glDisableVertexAttribAPPLE"); - glad_glIsVertexAttribEnabledAPPLE = (PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)load("glIsVertexAttribEnabledAPPLE"); - glad_glMapVertexAttrib1dAPPLE = (PFNGLMAPVERTEXATTRIB1DAPPLEPROC)load("glMapVertexAttrib1dAPPLE"); - glad_glMapVertexAttrib1fAPPLE = (PFNGLMAPVERTEXATTRIB1FAPPLEPROC)load("glMapVertexAttrib1fAPPLE"); - glad_glMapVertexAttrib2dAPPLE = (PFNGLMAPVERTEXATTRIB2DAPPLEPROC)load("glMapVertexAttrib2dAPPLE"); - glad_glMapVertexAttrib2fAPPLE = (PFNGLMAPVERTEXATTRIB2FAPPLEPROC)load("glMapVertexAttrib2fAPPLE"); -} -static void load_GL_ARB_ES2_compatibility(GLADloadproc load) { - if(!GLAD_GL_ARB_ES2_compatibility) return; - glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler"); - glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary"); - glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat"); - glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); - glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); -} -static void load_GL_ARB_ES3_1_compatibility(GLADloadproc load) { - if(!GLAD_GL_ARB_ES3_1_compatibility) return; - glad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC)load("glMemoryBarrierByRegion"); -} -static void load_GL_ARB_ES3_2_compatibility(GLADloadproc load) { - if(!GLAD_GL_ARB_ES3_2_compatibility) return; - glad_glPrimitiveBoundingBoxARB = (PFNGLPRIMITIVEBOUNDINGBOXARBPROC)load("glPrimitiveBoundingBoxARB"); -} -static void load_GL_ARB_base_instance(GLADloadproc load) { - if(!GLAD_GL_ARB_base_instance) return; - glad_glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)load("glDrawArraysInstancedBaseInstance"); - glad_glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)load("glDrawElementsInstancedBaseInstance"); - glad_glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)load("glDrawElementsInstancedBaseVertexBaseInstance"); -} -static void load_GL_ARB_bindless_texture(GLADloadproc load) { - if(!GLAD_GL_ARB_bindless_texture) return; - glad_glGetTextureHandleARB = (PFNGLGETTEXTUREHANDLEARBPROC)load("glGetTextureHandleARB"); - glad_glGetTextureSamplerHandleARB = (PFNGLGETTEXTURESAMPLERHANDLEARBPROC)load("glGetTextureSamplerHandleARB"); - glad_glMakeTextureHandleResidentARB = (PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)load("glMakeTextureHandleResidentARB"); - glad_glMakeTextureHandleNonResidentARB = (PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)load("glMakeTextureHandleNonResidentARB"); - glad_glGetImageHandleARB = (PFNGLGETIMAGEHANDLEARBPROC)load("glGetImageHandleARB"); - glad_glMakeImageHandleResidentARB = (PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)load("glMakeImageHandleResidentARB"); - glad_glMakeImageHandleNonResidentARB = (PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)load("glMakeImageHandleNonResidentARB"); - glad_glUniformHandleui64ARB = (PFNGLUNIFORMHANDLEUI64ARBPROC)load("glUniformHandleui64ARB"); - glad_glUniformHandleui64vARB = (PFNGLUNIFORMHANDLEUI64VARBPROC)load("glUniformHandleui64vARB"); - glad_glProgramUniformHandleui64ARB = (PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)load("glProgramUniformHandleui64ARB"); - glad_glProgramUniformHandleui64vARB = (PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)load("glProgramUniformHandleui64vARB"); - glad_glIsTextureHandleResidentARB = (PFNGLISTEXTUREHANDLERESIDENTARBPROC)load("glIsTextureHandleResidentARB"); - glad_glIsImageHandleResidentARB = (PFNGLISIMAGEHANDLERESIDENTARBPROC)load("glIsImageHandleResidentARB"); - glad_glVertexAttribL1ui64ARB = (PFNGLVERTEXATTRIBL1UI64ARBPROC)load("glVertexAttribL1ui64ARB"); - glad_glVertexAttribL1ui64vARB = (PFNGLVERTEXATTRIBL1UI64VARBPROC)load("glVertexAttribL1ui64vARB"); - glad_glGetVertexAttribLui64vARB = (PFNGLGETVERTEXATTRIBLUI64VARBPROC)load("glGetVertexAttribLui64vARB"); -} -static void load_GL_ARB_blend_func_extended(GLADloadproc load) { - if(!GLAD_GL_ARB_blend_func_extended) return; - glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); - glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); -} -static void load_GL_ARB_buffer_storage(GLADloadproc load) { - if(!GLAD_GL_ARB_buffer_storage) return; - glad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC)load("glBufferStorage"); -} -static void load_GL_ARB_cl_event(GLADloadproc load) { - if(!GLAD_GL_ARB_cl_event) return; - glad_glCreateSyncFromCLeventARB = (PFNGLCREATESYNCFROMCLEVENTARBPROC)load("glCreateSyncFromCLeventARB"); -} -static void load_GL_ARB_clear_buffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_clear_buffer_object) return; - glad_glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)load("glClearBufferData"); - glad_glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)load("glClearBufferSubData"); -} -static void load_GL_ARB_clear_texture(GLADloadproc load) { - if(!GLAD_GL_ARB_clear_texture) return; - glad_glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)load("glClearTexImage"); - glad_glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)load("glClearTexSubImage"); -} -static void load_GL_ARB_clip_control(GLADloadproc load) { - if(!GLAD_GL_ARB_clip_control) return; - glad_glClipControl = (PFNGLCLIPCONTROLPROC)load("glClipControl"); -} -static void load_GL_ARB_color_buffer_float(GLADloadproc load) { - if(!GLAD_GL_ARB_color_buffer_float) return; - glad_glClampColorARB = (PFNGLCLAMPCOLORARBPROC)load("glClampColorARB"); -} -static void load_GL_ARB_compute_shader(GLADloadproc load) { - if(!GLAD_GL_ARB_compute_shader) return; - glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)load("glDispatchCompute"); - glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)load("glDispatchComputeIndirect"); -} -static void load_GL_ARB_compute_variable_group_size(GLADloadproc load) { - if(!GLAD_GL_ARB_compute_variable_group_size) return; - glad_glDispatchComputeGroupSizeARB = (PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)load("glDispatchComputeGroupSizeARB"); -} -static void load_GL_ARB_copy_buffer(GLADloadproc load) { - if(!GLAD_GL_ARB_copy_buffer) return; - glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); -} -static void load_GL_ARB_copy_image(GLADloadproc load) { - if(!GLAD_GL_ARB_copy_image) return; - glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)load("glCopyImageSubData"); -} -static void load_GL_ARB_debug_output(GLADloadproc load) { - if(!GLAD_GL_ARB_debug_output) return; - glad_glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)load("glDebugMessageControlARB"); - glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)load("glDebugMessageInsertARB"); - glad_glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)load("glDebugMessageCallbackARB"); - glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)load("glGetDebugMessageLogARB"); -} -static void load_GL_ARB_direct_state_access(GLADloadproc load) { - if(!GLAD_GL_ARB_direct_state_access) return; - glad_glCreateTransformFeedbacks = (PFNGLCREATETRANSFORMFEEDBACKSPROC)load("glCreateTransformFeedbacks"); - glad_glTransformFeedbackBufferBase = (PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)load("glTransformFeedbackBufferBase"); - glad_glTransformFeedbackBufferRange = (PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)load("glTransformFeedbackBufferRange"); - glad_glGetTransformFeedbackiv = (PFNGLGETTRANSFORMFEEDBACKIVPROC)load("glGetTransformFeedbackiv"); - glad_glGetTransformFeedbacki_v = (PFNGLGETTRANSFORMFEEDBACKI_VPROC)load("glGetTransformFeedbacki_v"); - glad_glGetTransformFeedbacki64_v = (PFNGLGETTRANSFORMFEEDBACKI64_VPROC)load("glGetTransformFeedbacki64_v"); - glad_glCreateBuffers = (PFNGLCREATEBUFFERSPROC)load("glCreateBuffers"); - glad_glNamedBufferStorage = (PFNGLNAMEDBUFFERSTORAGEPROC)load("glNamedBufferStorage"); - glad_glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC)load("glNamedBufferData"); - glad_glNamedBufferSubData = (PFNGLNAMEDBUFFERSUBDATAPROC)load("glNamedBufferSubData"); - glad_glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC)load("glCopyNamedBufferSubData"); - glad_glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC)load("glClearNamedBufferData"); - glad_glClearNamedBufferSubData = (PFNGLCLEARNAMEDBUFFERSUBDATAPROC)load("glClearNamedBufferSubData"); - glad_glMapNamedBuffer = (PFNGLMAPNAMEDBUFFERPROC)load("glMapNamedBuffer"); - glad_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC)load("glMapNamedBufferRange"); - glad_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC)load("glUnmapNamedBuffer"); - glad_glFlushMappedNamedBufferRange = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)load("glFlushMappedNamedBufferRange"); - glad_glGetNamedBufferParameteriv = (PFNGLGETNAMEDBUFFERPARAMETERIVPROC)load("glGetNamedBufferParameteriv"); - glad_glGetNamedBufferParameteri64v = (PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)load("glGetNamedBufferParameteri64v"); - glad_glGetNamedBufferPointerv = (PFNGLGETNAMEDBUFFERPOINTERVPROC)load("glGetNamedBufferPointerv"); - glad_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC)load("glGetNamedBufferSubData"); - glad_glCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC)load("glCreateFramebuffers"); - glad_glNamedFramebufferRenderbuffer = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)load("glNamedFramebufferRenderbuffer"); - glad_glNamedFramebufferParameteri = (PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)load("glNamedFramebufferParameteri"); - glad_glNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)load("glNamedFramebufferTexture"); - glad_glNamedFramebufferTextureLayer = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)load("glNamedFramebufferTextureLayer"); - glad_glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)load("glNamedFramebufferDrawBuffer"); - glad_glNamedFramebufferDrawBuffers = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)load("glNamedFramebufferDrawBuffers"); - glad_glNamedFramebufferReadBuffer = (PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)load("glNamedFramebufferReadBuffer"); - glad_glInvalidateNamedFramebufferData = (PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)load("glInvalidateNamedFramebufferData"); - glad_glInvalidateNamedFramebufferSubData = (PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)load("glInvalidateNamedFramebufferSubData"); - glad_glClearNamedFramebufferiv = (PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)load("glClearNamedFramebufferiv"); - glad_glClearNamedFramebufferuiv = (PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)load("glClearNamedFramebufferuiv"); - glad_glClearNamedFramebufferfv = (PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)load("glClearNamedFramebufferfv"); - glad_glClearNamedFramebufferfi = (PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)load("glClearNamedFramebufferfi"); - glad_glBlitNamedFramebuffer = (PFNGLBLITNAMEDFRAMEBUFFERPROC)load("glBlitNamedFramebuffer"); - glad_glCheckNamedFramebufferStatus = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)load("glCheckNamedFramebufferStatus"); - glad_glGetNamedFramebufferParameteriv = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)load("glGetNamedFramebufferParameteriv"); - glad_glGetNamedFramebufferAttachmentParameteriv = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetNamedFramebufferAttachmentParameteriv"); - glad_glCreateRenderbuffers = (PFNGLCREATERENDERBUFFERSPROC)load("glCreateRenderbuffers"); - glad_glNamedRenderbufferStorage = (PFNGLNAMEDRENDERBUFFERSTORAGEPROC)load("glNamedRenderbufferStorage"); - glad_glNamedRenderbufferStorageMultisample = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glNamedRenderbufferStorageMultisample"); - glad_glGetNamedRenderbufferParameteriv = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)load("glGetNamedRenderbufferParameteriv"); - glad_glCreateTextures = (PFNGLCREATETEXTURESPROC)load("glCreateTextures"); - glad_glTextureBuffer = (PFNGLTEXTUREBUFFERPROC)load("glTextureBuffer"); - glad_glTextureBufferRange = (PFNGLTEXTUREBUFFERRANGEPROC)load("glTextureBufferRange"); - glad_glTextureStorage1D = (PFNGLTEXTURESTORAGE1DPROC)load("glTextureStorage1D"); - glad_glTextureStorage2D = (PFNGLTEXTURESTORAGE2DPROC)load("glTextureStorage2D"); - glad_glTextureStorage3D = (PFNGLTEXTURESTORAGE3DPROC)load("glTextureStorage3D"); - glad_glTextureStorage2DMultisample = (PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)load("glTextureStorage2DMultisample"); - glad_glTextureStorage3DMultisample = (PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)load("glTextureStorage3DMultisample"); - glad_glTextureSubImage1D = (PFNGLTEXTURESUBIMAGE1DPROC)load("glTextureSubImage1D"); - glad_glTextureSubImage2D = (PFNGLTEXTURESUBIMAGE2DPROC)load("glTextureSubImage2D"); - glad_glTextureSubImage3D = (PFNGLTEXTURESUBIMAGE3DPROC)load("glTextureSubImage3D"); - glad_glCompressedTextureSubImage1D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)load("glCompressedTextureSubImage1D"); - glad_glCompressedTextureSubImage2D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)load("glCompressedTextureSubImage2D"); - glad_glCompressedTextureSubImage3D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)load("glCompressedTextureSubImage3D"); - glad_glCopyTextureSubImage1D = (PFNGLCOPYTEXTURESUBIMAGE1DPROC)load("glCopyTextureSubImage1D"); - glad_glCopyTextureSubImage2D = (PFNGLCOPYTEXTURESUBIMAGE2DPROC)load("glCopyTextureSubImage2D"); - glad_glCopyTextureSubImage3D = (PFNGLCOPYTEXTURESUBIMAGE3DPROC)load("glCopyTextureSubImage3D"); - glad_glTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC)load("glTextureParameterf"); - glad_glTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC)load("glTextureParameterfv"); - glad_glTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC)load("glTextureParameteri"); - glad_glTextureParameterIiv = (PFNGLTEXTUREPARAMETERIIVPROC)load("glTextureParameterIiv"); - glad_glTextureParameterIuiv = (PFNGLTEXTUREPARAMETERIUIVPROC)load("glTextureParameterIuiv"); - glad_glTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC)load("glTextureParameteriv"); - glad_glGenerateTextureMipmap = (PFNGLGENERATETEXTUREMIPMAPPROC)load("glGenerateTextureMipmap"); - glad_glBindTextureUnit = (PFNGLBINDTEXTUREUNITPROC)load("glBindTextureUnit"); - glad_glGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC)load("glGetTextureImage"); - glad_glGetCompressedTextureImage = (PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)load("glGetCompressedTextureImage"); - glad_glGetTextureLevelParameterfv = (PFNGLGETTEXTURELEVELPARAMETERFVPROC)load("glGetTextureLevelParameterfv"); - glad_glGetTextureLevelParameteriv = (PFNGLGETTEXTURELEVELPARAMETERIVPROC)load("glGetTextureLevelParameteriv"); - glad_glGetTextureParameterfv = (PFNGLGETTEXTUREPARAMETERFVPROC)load("glGetTextureParameterfv"); - glad_glGetTextureParameterIiv = (PFNGLGETTEXTUREPARAMETERIIVPROC)load("glGetTextureParameterIiv"); - glad_glGetTextureParameterIuiv = (PFNGLGETTEXTUREPARAMETERIUIVPROC)load("glGetTextureParameterIuiv"); - glad_glGetTextureParameteriv = (PFNGLGETTEXTUREPARAMETERIVPROC)load("glGetTextureParameteriv"); - glad_glCreateVertexArrays = (PFNGLCREATEVERTEXARRAYSPROC)load("glCreateVertexArrays"); - glad_glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC)load("glDisableVertexArrayAttrib"); - glad_glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC)load("glEnableVertexArrayAttrib"); - glad_glVertexArrayElementBuffer = (PFNGLVERTEXARRAYELEMENTBUFFERPROC)load("glVertexArrayElementBuffer"); - glad_glVertexArrayVertexBuffer = (PFNGLVERTEXARRAYVERTEXBUFFERPROC)load("glVertexArrayVertexBuffer"); - glad_glVertexArrayVertexBuffers = (PFNGLVERTEXARRAYVERTEXBUFFERSPROC)load("glVertexArrayVertexBuffers"); - glad_glVertexArrayAttribBinding = (PFNGLVERTEXARRAYATTRIBBINDINGPROC)load("glVertexArrayAttribBinding"); - glad_glVertexArrayAttribFormat = (PFNGLVERTEXARRAYATTRIBFORMATPROC)load("glVertexArrayAttribFormat"); - glad_glVertexArrayAttribIFormat = (PFNGLVERTEXARRAYATTRIBIFORMATPROC)load("glVertexArrayAttribIFormat"); - glad_glVertexArrayAttribLFormat = (PFNGLVERTEXARRAYATTRIBLFORMATPROC)load("glVertexArrayAttribLFormat"); - glad_glVertexArrayBindingDivisor = (PFNGLVERTEXARRAYBINDINGDIVISORPROC)load("glVertexArrayBindingDivisor"); - glad_glGetVertexArrayiv = (PFNGLGETVERTEXARRAYIVPROC)load("glGetVertexArrayiv"); - glad_glGetVertexArrayIndexediv = (PFNGLGETVERTEXARRAYINDEXEDIVPROC)load("glGetVertexArrayIndexediv"); - glad_glGetVertexArrayIndexed64iv = (PFNGLGETVERTEXARRAYINDEXED64IVPROC)load("glGetVertexArrayIndexed64iv"); - glad_glCreateSamplers = (PFNGLCREATESAMPLERSPROC)load("glCreateSamplers"); - glad_glCreateProgramPipelines = (PFNGLCREATEPROGRAMPIPELINESPROC)load("glCreateProgramPipelines"); - glad_glCreateQueries = (PFNGLCREATEQUERIESPROC)load("glCreateQueries"); - glad_glGetQueryBufferObjecti64v = (PFNGLGETQUERYBUFFEROBJECTI64VPROC)load("glGetQueryBufferObjecti64v"); - glad_glGetQueryBufferObjectiv = (PFNGLGETQUERYBUFFEROBJECTIVPROC)load("glGetQueryBufferObjectiv"); - glad_glGetQueryBufferObjectui64v = (PFNGLGETQUERYBUFFEROBJECTUI64VPROC)load("glGetQueryBufferObjectui64v"); - glad_glGetQueryBufferObjectuiv = (PFNGLGETQUERYBUFFEROBJECTUIVPROC)load("glGetQueryBufferObjectuiv"); -} -static void load_GL_ARB_draw_buffers(GLADloadproc load) { - if(!GLAD_GL_ARB_draw_buffers) return; - glad_glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)load("glDrawBuffersARB"); -} -static void load_GL_ARB_draw_buffers_blend(GLADloadproc load) { - if(!GLAD_GL_ARB_draw_buffers_blend) return; - glad_glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC)load("glBlendEquationiARB"); - glad_glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC)load("glBlendEquationSeparateiARB"); - glad_glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC)load("glBlendFunciARB"); - glad_glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC)load("glBlendFuncSeparateiARB"); -} -static void load_GL_ARB_draw_elements_base_vertex(GLADloadproc load) { - if(!GLAD_GL_ARB_draw_elements_base_vertex) return; - glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); - glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); - glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); - glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); -} -static void load_GL_ARB_draw_indirect(GLADloadproc load) { - if(!GLAD_GL_ARB_draw_indirect) return; - glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect"); - glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect"); -} -static void load_GL_ARB_draw_instanced(GLADloadproc load) { - if(!GLAD_GL_ARB_draw_instanced) return; - glad_glDrawArraysInstancedARB = (PFNGLDRAWARRAYSINSTANCEDARBPROC)load("glDrawArraysInstancedARB"); - glad_glDrawElementsInstancedARB = (PFNGLDRAWELEMENTSINSTANCEDARBPROC)load("glDrawElementsInstancedARB"); -} -static void load_GL_ARB_fragment_program(GLADloadproc load) { - if(!GLAD_GL_ARB_fragment_program) return; - glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB"); - glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB"); - glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB"); - glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB"); - glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB"); - glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB"); - glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB"); - glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB"); - glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB"); - glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB"); - glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB"); - glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB"); - glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB"); - glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB"); - glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB"); - glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB"); - glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB"); - glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB"); - glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB"); -} -static void load_GL_ARB_framebuffer_no_attachments(GLADloadproc load) { - if(!GLAD_GL_ARB_framebuffer_no_attachments) return; - glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)load("glFramebufferParameteri"); - glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)load("glGetFramebufferParameteriv"); -} -static void load_GL_ARB_framebuffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_framebuffer_object) return; - glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); - glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); - glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); - glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); - glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); - glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); - glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); - glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); - glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); - glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); - glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); - glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); - glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); - glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); - glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); - glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); - glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); - glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); - glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); - glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); -} -static void load_GL_ARB_geometry_shader4(GLADloadproc load) { - if(!GLAD_GL_ARB_geometry_shader4) return; - glad_glProgramParameteriARB = (PFNGLPROGRAMPARAMETERIARBPROC)load("glProgramParameteriARB"); - glad_glFramebufferTextureARB = (PFNGLFRAMEBUFFERTEXTUREARBPROC)load("glFramebufferTextureARB"); - glad_glFramebufferTextureLayerARB = (PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)load("glFramebufferTextureLayerARB"); - glad_glFramebufferTextureFaceARB = (PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)load("glFramebufferTextureFaceARB"); -} -static void load_GL_ARB_get_program_binary(GLADloadproc load) { - if(!GLAD_GL_ARB_get_program_binary) return; - glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load("glGetProgramBinary"); - glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load("glProgramBinary"); - glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); -} -static void load_GL_ARB_get_texture_sub_image(GLADloadproc load) { - if(!GLAD_GL_ARB_get_texture_sub_image) return; - glad_glGetTextureSubImage = (PFNGLGETTEXTURESUBIMAGEPROC)load("glGetTextureSubImage"); - glad_glGetCompressedTextureSubImage = (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)load("glGetCompressedTextureSubImage"); -} -static void load_GL_ARB_gl_spirv(GLADloadproc load) { - if(!GLAD_GL_ARB_gl_spirv) return; - glad_glSpecializeShaderARB = (PFNGLSPECIALIZESHADERARBPROC)load("glSpecializeShaderARB"); -} -static void load_GL_ARB_gpu_shader_fp64(GLADloadproc load) { - if(!GLAD_GL_ARB_gpu_shader_fp64) return; - glad_glUniform1d = (PFNGLUNIFORM1DPROC)load("glUniform1d"); - glad_glUniform2d = (PFNGLUNIFORM2DPROC)load("glUniform2d"); - glad_glUniform3d = (PFNGLUNIFORM3DPROC)load("glUniform3d"); - glad_glUniform4d = (PFNGLUNIFORM4DPROC)load("glUniform4d"); - glad_glUniform1dv = (PFNGLUNIFORM1DVPROC)load("glUniform1dv"); - glad_glUniform2dv = (PFNGLUNIFORM2DVPROC)load("glUniform2dv"); - glad_glUniform3dv = (PFNGLUNIFORM3DVPROC)load("glUniform3dv"); - glad_glUniform4dv = (PFNGLUNIFORM4DVPROC)load("glUniform4dv"); - glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)load("glUniformMatrix2dv"); - glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)load("glUniformMatrix3dv"); - glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)load("glUniformMatrix4dv"); - glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)load("glUniformMatrix2x3dv"); - glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)load("glUniformMatrix2x4dv"); - glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)load("glUniformMatrix3x2dv"); - glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)load("glUniformMatrix3x4dv"); - glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)load("glUniformMatrix4x2dv"); - glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)load("glUniformMatrix4x3dv"); - glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC)load("glGetUniformdv"); -} -static void load_GL_ARB_gpu_shader_int64(GLADloadproc load) { - if(!GLAD_GL_ARB_gpu_shader_int64) return; - glad_glUniform1i64ARB = (PFNGLUNIFORM1I64ARBPROC)load("glUniform1i64ARB"); - glad_glUniform2i64ARB = (PFNGLUNIFORM2I64ARBPROC)load("glUniform2i64ARB"); - glad_glUniform3i64ARB = (PFNGLUNIFORM3I64ARBPROC)load("glUniform3i64ARB"); - glad_glUniform4i64ARB = (PFNGLUNIFORM4I64ARBPROC)load("glUniform4i64ARB"); - glad_glUniform1i64vARB = (PFNGLUNIFORM1I64VARBPROC)load("glUniform1i64vARB"); - glad_glUniform2i64vARB = (PFNGLUNIFORM2I64VARBPROC)load("glUniform2i64vARB"); - glad_glUniform3i64vARB = (PFNGLUNIFORM3I64VARBPROC)load("glUniform3i64vARB"); - glad_glUniform4i64vARB = (PFNGLUNIFORM4I64VARBPROC)load("glUniform4i64vARB"); - glad_glUniform1ui64ARB = (PFNGLUNIFORM1UI64ARBPROC)load("glUniform1ui64ARB"); - glad_glUniform2ui64ARB = (PFNGLUNIFORM2UI64ARBPROC)load("glUniform2ui64ARB"); - glad_glUniform3ui64ARB = (PFNGLUNIFORM3UI64ARBPROC)load("glUniform3ui64ARB"); - glad_glUniform4ui64ARB = (PFNGLUNIFORM4UI64ARBPROC)load("glUniform4ui64ARB"); - glad_glUniform1ui64vARB = (PFNGLUNIFORM1UI64VARBPROC)load("glUniform1ui64vARB"); - glad_glUniform2ui64vARB = (PFNGLUNIFORM2UI64VARBPROC)load("glUniform2ui64vARB"); - glad_glUniform3ui64vARB = (PFNGLUNIFORM3UI64VARBPROC)load("glUniform3ui64vARB"); - glad_glUniform4ui64vARB = (PFNGLUNIFORM4UI64VARBPROC)load("glUniform4ui64vARB"); - glad_glGetUniformi64vARB = (PFNGLGETUNIFORMI64VARBPROC)load("glGetUniformi64vARB"); - glad_glGetUniformui64vARB = (PFNGLGETUNIFORMUI64VARBPROC)load("glGetUniformui64vARB"); - glad_glGetnUniformi64vARB = (PFNGLGETNUNIFORMI64VARBPROC)load("glGetnUniformi64vARB"); - glad_glGetnUniformui64vARB = (PFNGLGETNUNIFORMUI64VARBPROC)load("glGetnUniformui64vARB"); - glad_glProgramUniform1i64ARB = (PFNGLPROGRAMUNIFORM1I64ARBPROC)load("glProgramUniform1i64ARB"); - glad_glProgramUniform2i64ARB = (PFNGLPROGRAMUNIFORM2I64ARBPROC)load("glProgramUniform2i64ARB"); - glad_glProgramUniform3i64ARB = (PFNGLPROGRAMUNIFORM3I64ARBPROC)load("glProgramUniform3i64ARB"); - glad_glProgramUniform4i64ARB = (PFNGLPROGRAMUNIFORM4I64ARBPROC)load("glProgramUniform4i64ARB"); - glad_glProgramUniform1i64vARB = (PFNGLPROGRAMUNIFORM1I64VARBPROC)load("glProgramUniform1i64vARB"); - glad_glProgramUniform2i64vARB = (PFNGLPROGRAMUNIFORM2I64VARBPROC)load("glProgramUniform2i64vARB"); - glad_glProgramUniform3i64vARB = (PFNGLPROGRAMUNIFORM3I64VARBPROC)load("glProgramUniform3i64vARB"); - glad_glProgramUniform4i64vARB = (PFNGLPROGRAMUNIFORM4I64VARBPROC)load("glProgramUniform4i64vARB"); - glad_glProgramUniform1ui64ARB = (PFNGLPROGRAMUNIFORM1UI64ARBPROC)load("glProgramUniform1ui64ARB"); - glad_glProgramUniform2ui64ARB = (PFNGLPROGRAMUNIFORM2UI64ARBPROC)load("glProgramUniform2ui64ARB"); - glad_glProgramUniform3ui64ARB = (PFNGLPROGRAMUNIFORM3UI64ARBPROC)load("glProgramUniform3ui64ARB"); - glad_glProgramUniform4ui64ARB = (PFNGLPROGRAMUNIFORM4UI64ARBPROC)load("glProgramUniform4ui64ARB"); - glad_glProgramUniform1ui64vARB = (PFNGLPROGRAMUNIFORM1UI64VARBPROC)load("glProgramUniform1ui64vARB"); - glad_glProgramUniform2ui64vARB = (PFNGLPROGRAMUNIFORM2UI64VARBPROC)load("glProgramUniform2ui64vARB"); - glad_glProgramUniform3ui64vARB = (PFNGLPROGRAMUNIFORM3UI64VARBPROC)load("glProgramUniform3ui64vARB"); - glad_glProgramUniform4ui64vARB = (PFNGLPROGRAMUNIFORM4UI64VARBPROC)load("glProgramUniform4ui64vARB"); -} -static void load_GL_ARB_imaging(GLADloadproc load) { - if(!GLAD_GL_ARB_imaging) return; - glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); - glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); - glad_glColorTable = (PFNGLCOLORTABLEPROC)load("glColorTable"); - glad_glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)load("glColorTableParameterfv"); - glad_glColorTableParameteriv = (PFNGLCOLORTABLEPARAMETERIVPROC)load("glColorTableParameteriv"); - glad_glCopyColorTable = (PFNGLCOPYCOLORTABLEPROC)load("glCopyColorTable"); - glad_glGetColorTable = (PFNGLGETCOLORTABLEPROC)load("glGetColorTable"); - glad_glGetColorTableParameterfv = (PFNGLGETCOLORTABLEPARAMETERFVPROC)load("glGetColorTableParameterfv"); - glad_glGetColorTableParameteriv = (PFNGLGETCOLORTABLEPARAMETERIVPROC)load("glGetColorTableParameteriv"); - glad_glColorSubTable = (PFNGLCOLORSUBTABLEPROC)load("glColorSubTable"); - glad_glCopyColorSubTable = (PFNGLCOPYCOLORSUBTABLEPROC)load("glCopyColorSubTable"); - glad_glConvolutionFilter1D = (PFNGLCONVOLUTIONFILTER1DPROC)load("glConvolutionFilter1D"); - glad_glConvolutionFilter2D = (PFNGLCONVOLUTIONFILTER2DPROC)load("glConvolutionFilter2D"); - glad_glConvolutionParameterf = (PFNGLCONVOLUTIONPARAMETERFPROC)load("glConvolutionParameterf"); - glad_glConvolutionParameterfv = (PFNGLCONVOLUTIONPARAMETERFVPROC)load("glConvolutionParameterfv"); - glad_glConvolutionParameteri = (PFNGLCONVOLUTIONPARAMETERIPROC)load("glConvolutionParameteri"); - glad_glConvolutionParameteriv = (PFNGLCONVOLUTIONPARAMETERIVPROC)load("glConvolutionParameteriv"); - glad_glCopyConvolutionFilter1D = (PFNGLCOPYCONVOLUTIONFILTER1DPROC)load("glCopyConvolutionFilter1D"); - glad_glCopyConvolutionFilter2D = (PFNGLCOPYCONVOLUTIONFILTER2DPROC)load("glCopyConvolutionFilter2D"); - glad_glGetConvolutionFilter = (PFNGLGETCONVOLUTIONFILTERPROC)load("glGetConvolutionFilter"); - glad_glGetConvolutionParameterfv = (PFNGLGETCONVOLUTIONPARAMETERFVPROC)load("glGetConvolutionParameterfv"); - glad_glGetConvolutionParameteriv = (PFNGLGETCONVOLUTIONPARAMETERIVPROC)load("glGetConvolutionParameteriv"); - glad_glGetSeparableFilter = (PFNGLGETSEPARABLEFILTERPROC)load("glGetSeparableFilter"); - glad_glSeparableFilter2D = (PFNGLSEPARABLEFILTER2DPROC)load("glSeparableFilter2D"); - glad_glGetHistogram = (PFNGLGETHISTOGRAMPROC)load("glGetHistogram"); - glad_glGetHistogramParameterfv = (PFNGLGETHISTOGRAMPARAMETERFVPROC)load("glGetHistogramParameterfv"); - glad_glGetHistogramParameteriv = (PFNGLGETHISTOGRAMPARAMETERIVPROC)load("glGetHistogramParameteriv"); - glad_glGetMinmax = (PFNGLGETMINMAXPROC)load("glGetMinmax"); - glad_glGetMinmaxParameterfv = (PFNGLGETMINMAXPARAMETERFVPROC)load("glGetMinmaxParameterfv"); - glad_glGetMinmaxParameteriv = (PFNGLGETMINMAXPARAMETERIVPROC)load("glGetMinmaxParameteriv"); - glad_glHistogram = (PFNGLHISTOGRAMPROC)load("glHistogram"); - glad_glMinmax = (PFNGLMINMAXPROC)load("glMinmax"); - glad_glResetHistogram = (PFNGLRESETHISTOGRAMPROC)load("glResetHistogram"); - glad_glResetMinmax = (PFNGLRESETMINMAXPROC)load("glResetMinmax"); -} -static void load_GL_ARB_indirect_parameters(GLADloadproc load) { - if(!GLAD_GL_ARB_indirect_parameters) return; - glad_glMultiDrawArraysIndirectCountARB = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)load("glMultiDrawArraysIndirectCountARB"); - glad_glMultiDrawElementsIndirectCountARB = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)load("glMultiDrawElementsIndirectCountARB"); -} -static void load_GL_ARB_instanced_arrays(GLADloadproc load) { - if(!GLAD_GL_ARB_instanced_arrays) return; - glad_glVertexAttribDivisorARB = (PFNGLVERTEXATTRIBDIVISORARBPROC)load("glVertexAttribDivisorARB"); -} -static void load_GL_ARB_internalformat_query(GLADloadproc load) { - if(!GLAD_GL_ARB_internalformat_query) return; - glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load("glGetInternalformativ"); -} -static void load_GL_ARB_internalformat_query2(GLADloadproc load) { - if(!GLAD_GL_ARB_internalformat_query2) return; - glad_glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)load("glGetInternalformati64v"); -} -static void load_GL_ARB_invalidate_subdata(GLADloadproc load) { - if(!GLAD_GL_ARB_invalidate_subdata) return; - glad_glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)load("glInvalidateTexSubImage"); - glad_glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)load("glInvalidateTexImage"); - glad_glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)load("glInvalidateBufferSubData"); - glad_glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)load("glInvalidateBufferData"); - glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)load("glInvalidateFramebuffer"); - glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)load("glInvalidateSubFramebuffer"); -} -static void load_GL_ARB_map_buffer_range(GLADloadproc load) { - if(!GLAD_GL_ARB_map_buffer_range) return; - glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); - glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); -} -static void load_GL_ARB_matrix_palette(GLADloadproc load) { - if(!GLAD_GL_ARB_matrix_palette) return; - glad_glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC)load("glCurrentPaletteMatrixARB"); - glad_glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC)load("glMatrixIndexubvARB"); - glad_glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC)load("glMatrixIndexusvARB"); - glad_glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC)load("glMatrixIndexuivARB"); - glad_glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC)load("glMatrixIndexPointerARB"); -} -static void load_GL_ARB_multi_bind(GLADloadproc load) { - if(!GLAD_GL_ARB_multi_bind) return; - glad_glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)load("glBindBuffersBase"); - glad_glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)load("glBindBuffersRange"); - glad_glBindTextures = (PFNGLBINDTEXTURESPROC)load("glBindTextures"); - glad_glBindSamplers = (PFNGLBINDSAMPLERSPROC)load("glBindSamplers"); - glad_glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)load("glBindImageTextures"); - glad_glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)load("glBindVertexBuffers"); -} -static void load_GL_ARB_multi_draw_indirect(GLADloadproc load) { - if(!GLAD_GL_ARB_multi_draw_indirect) return; - glad_glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)load("glMultiDrawArraysIndirect"); - glad_glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)load("glMultiDrawElementsIndirect"); -} -static void load_GL_ARB_multisample(GLADloadproc load) { - if(!GLAD_GL_ARB_multisample) return; - glad_glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)load("glSampleCoverageARB"); -} -static void load_GL_ARB_multitexture(GLADloadproc load) { - if(!GLAD_GL_ARB_multitexture) return; - glad_glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)load("glActiveTextureARB"); - glad_glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)load("glClientActiveTextureARB"); - glad_glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC)load("glMultiTexCoord1dARB"); - glad_glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC)load("glMultiTexCoord1dvARB"); - glad_glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)load("glMultiTexCoord1fARB"); - glad_glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC)load("glMultiTexCoord1fvARB"); - glad_glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC)load("glMultiTexCoord1iARB"); - glad_glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC)load("glMultiTexCoord1ivARB"); - glad_glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC)load("glMultiTexCoord1sARB"); - glad_glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC)load("glMultiTexCoord1svARB"); - glad_glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC)load("glMultiTexCoord2dARB"); - glad_glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC)load("glMultiTexCoord2dvARB"); - glad_glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)load("glMultiTexCoord2fARB"); - glad_glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC)load("glMultiTexCoord2fvARB"); - glad_glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC)load("glMultiTexCoord2iARB"); - glad_glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC)load("glMultiTexCoord2ivARB"); - glad_glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC)load("glMultiTexCoord2sARB"); - glad_glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC)load("glMultiTexCoord2svARB"); - glad_glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC)load("glMultiTexCoord3dARB"); - glad_glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC)load("glMultiTexCoord3dvARB"); - glad_glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)load("glMultiTexCoord3fARB"); - glad_glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC)load("glMultiTexCoord3fvARB"); - glad_glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC)load("glMultiTexCoord3iARB"); - glad_glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC)load("glMultiTexCoord3ivARB"); - glad_glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC)load("glMultiTexCoord3sARB"); - glad_glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC)load("glMultiTexCoord3svARB"); - glad_glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC)load("glMultiTexCoord4dARB"); - glad_glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC)load("glMultiTexCoord4dvARB"); - glad_glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)load("glMultiTexCoord4fARB"); - glad_glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC)load("glMultiTexCoord4fvARB"); - glad_glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC)load("glMultiTexCoord4iARB"); - glad_glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC)load("glMultiTexCoord4ivARB"); - glad_glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC)load("glMultiTexCoord4sARB"); - glad_glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC)load("glMultiTexCoord4svARB"); -} -static void load_GL_ARB_occlusion_query(GLADloadproc load) { - if(!GLAD_GL_ARB_occlusion_query) return; - glad_glGenQueriesARB = (PFNGLGENQUERIESARBPROC)load("glGenQueriesARB"); - glad_glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)load("glDeleteQueriesARB"); - glad_glIsQueryARB = (PFNGLISQUERYARBPROC)load("glIsQueryARB"); - glad_glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)load("glBeginQueryARB"); - glad_glEndQueryARB = (PFNGLENDQUERYARBPROC)load("glEndQueryARB"); - glad_glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)load("glGetQueryivARB"); - glad_glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)load("glGetQueryObjectivARB"); - glad_glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)load("glGetQueryObjectuivARB"); -} -static void load_GL_ARB_parallel_shader_compile(GLADloadproc load) { - if(!GLAD_GL_ARB_parallel_shader_compile) return; - glad_glMaxShaderCompilerThreadsARB = (PFNGLMAXSHADERCOMPILERTHREADSARBPROC)load("glMaxShaderCompilerThreadsARB"); -} -static void load_GL_ARB_point_parameters(GLADloadproc load) { - if(!GLAD_GL_ARB_point_parameters) return; - glad_glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)load("glPointParameterfARB"); - glad_glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)load("glPointParameterfvARB"); -} -static void load_GL_ARB_polygon_offset_clamp(GLADloadproc load) { - if(!GLAD_GL_ARB_polygon_offset_clamp) return; - glad_glPolygonOffsetClamp = (PFNGLPOLYGONOFFSETCLAMPPROC)load("glPolygonOffsetClamp"); -} -static void load_GL_ARB_program_interface_query(GLADloadproc load) { - if(!GLAD_GL_ARB_program_interface_query) return; - glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)load("glGetProgramInterfaceiv"); - glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)load("glGetProgramResourceIndex"); - glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)load("glGetProgramResourceName"); - glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)load("glGetProgramResourceiv"); - glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)load("glGetProgramResourceLocation"); - glad_glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)load("glGetProgramResourceLocationIndex"); -} -static void load_GL_ARB_provoking_vertex(GLADloadproc load) { - if(!GLAD_GL_ARB_provoking_vertex) return; - glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); -} -static void load_GL_ARB_robustness(GLADloadproc load) { - if(!GLAD_GL_ARB_robustness) return; - glad_glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC)load("glGetGraphicsResetStatusARB"); - glad_glGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC)load("glGetnTexImageARB"); - glad_glReadnPixelsARB = (PFNGLREADNPIXELSARBPROC)load("glReadnPixelsARB"); - glad_glGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)load("glGetnCompressedTexImageARB"); - glad_glGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC)load("glGetnUniformfvARB"); - glad_glGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC)load("glGetnUniformivARB"); - glad_glGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC)load("glGetnUniformuivARB"); - glad_glGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC)load("glGetnUniformdvARB"); - glad_glGetnMapdvARB = (PFNGLGETNMAPDVARBPROC)load("glGetnMapdvARB"); - glad_glGetnMapfvARB = (PFNGLGETNMAPFVARBPROC)load("glGetnMapfvARB"); - glad_glGetnMapivARB = (PFNGLGETNMAPIVARBPROC)load("glGetnMapivARB"); - glad_glGetnPixelMapfvARB = (PFNGLGETNPIXELMAPFVARBPROC)load("glGetnPixelMapfvARB"); - glad_glGetnPixelMapuivARB = (PFNGLGETNPIXELMAPUIVARBPROC)load("glGetnPixelMapuivARB"); - glad_glGetnPixelMapusvARB = (PFNGLGETNPIXELMAPUSVARBPROC)load("glGetnPixelMapusvARB"); - glad_glGetnPolygonStippleARB = (PFNGLGETNPOLYGONSTIPPLEARBPROC)load("glGetnPolygonStippleARB"); - glad_glGetnColorTableARB = (PFNGLGETNCOLORTABLEARBPROC)load("glGetnColorTableARB"); - glad_glGetnConvolutionFilterARB = (PFNGLGETNCONVOLUTIONFILTERARBPROC)load("glGetnConvolutionFilterARB"); - glad_glGetnSeparableFilterARB = (PFNGLGETNSEPARABLEFILTERARBPROC)load("glGetnSeparableFilterARB"); - glad_glGetnHistogramARB = (PFNGLGETNHISTOGRAMARBPROC)load("glGetnHistogramARB"); - glad_glGetnMinmaxARB = (PFNGLGETNMINMAXARBPROC)load("glGetnMinmaxARB"); -} -static void load_GL_ARB_sample_locations(GLADloadproc load) { - if(!GLAD_GL_ARB_sample_locations) return; - glad_glFramebufferSampleLocationsfvARB = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glFramebufferSampleLocationsfvARB"); - glad_glNamedFramebufferSampleLocationsfvARB = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glNamedFramebufferSampleLocationsfvARB"); - glad_glEvaluateDepthValuesARB = (PFNGLEVALUATEDEPTHVALUESARBPROC)load("glEvaluateDepthValuesARB"); -} -static void load_GL_ARB_sample_shading(GLADloadproc load) { - if(!GLAD_GL_ARB_sample_shading) return; - glad_glMinSampleShadingARB = (PFNGLMINSAMPLESHADINGARBPROC)load("glMinSampleShadingARB"); -} -static void load_GL_ARB_sampler_objects(GLADloadproc load) { - if(!GLAD_GL_ARB_sampler_objects) return; - glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); - glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); - glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); - glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); - glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); - glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); - glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); - glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); - glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); - glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); - glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); - glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); - glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); - glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); -} -static void load_GL_ARB_separate_shader_objects(GLADloadproc load) { - if(!GLAD_GL_ARB_separate_shader_objects) return; - glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load("glUseProgramStages"); - glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load("glActiveShaderProgram"); - glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load("glCreateShaderProgramv"); - glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load("glBindProgramPipeline"); - glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load("glDeleteProgramPipelines"); - glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load("glGenProgramPipelines"); - glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load("glIsProgramPipeline"); - glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load("glGetProgramPipelineiv"); - glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); - glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load("glProgramUniform1i"); - glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load("glProgramUniform1iv"); - glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load("glProgramUniform1f"); - glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load("glProgramUniform1fv"); - glad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)load("glProgramUniform1d"); - glad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)load("glProgramUniform1dv"); - glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load("glProgramUniform1ui"); - glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load("glProgramUniform1uiv"); - glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load("glProgramUniform2i"); - glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load("glProgramUniform2iv"); - glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load("glProgramUniform2f"); - glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load("glProgramUniform2fv"); - glad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)load("glProgramUniform2d"); - glad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)load("glProgramUniform2dv"); - glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load("glProgramUniform2ui"); - glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load("glProgramUniform2uiv"); - glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load("glProgramUniform3i"); - glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load("glProgramUniform3iv"); - glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load("glProgramUniform3f"); - glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load("glProgramUniform3fv"); - glad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)load("glProgramUniform3d"); - glad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)load("glProgramUniform3dv"); - glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load("glProgramUniform3ui"); - glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load("glProgramUniform3uiv"); - glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load("glProgramUniform4i"); - glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load("glProgramUniform4iv"); - glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load("glProgramUniform4f"); - glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load("glProgramUniform4fv"); - glad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)load("glProgramUniform4d"); - glad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)load("glProgramUniform4dv"); - glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load("glProgramUniform4ui"); - glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load("glProgramUniform4uiv"); - glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load("glProgramUniformMatrix2fv"); - glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load("glProgramUniformMatrix3fv"); - glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load("glProgramUniformMatrix4fv"); - glad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)load("glProgramUniformMatrix2dv"); - glad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)load("glProgramUniformMatrix3dv"); - glad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)load("glProgramUniformMatrix4dv"); - glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load("glProgramUniformMatrix2x3fv"); - glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load("glProgramUniformMatrix3x2fv"); - glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load("glProgramUniformMatrix2x4fv"); - glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load("glProgramUniformMatrix4x2fv"); - glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load("glProgramUniformMatrix3x4fv"); - glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load("glProgramUniformMatrix4x3fv"); - glad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)load("glProgramUniformMatrix2x3dv"); - glad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)load("glProgramUniformMatrix3x2dv"); - glad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)load("glProgramUniformMatrix2x4dv"); - glad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)load("glProgramUniformMatrix4x2dv"); - glad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)load("glProgramUniformMatrix3x4dv"); - glad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)load("glProgramUniformMatrix4x3dv"); - glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load("glValidateProgramPipeline"); - glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load("glGetProgramPipelineInfoLog"); -} -static void load_GL_ARB_shader_atomic_counters(GLADloadproc load) { - if(!GLAD_GL_ARB_shader_atomic_counters) return; - glad_glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)load("glGetActiveAtomicCounterBufferiv"); -} -static void load_GL_ARB_shader_image_load_store(GLADloadproc load) { - if(!GLAD_GL_ARB_shader_image_load_store) return; - glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)load("glBindImageTexture"); - glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)load("glMemoryBarrier"); -} -static void load_GL_ARB_shader_objects(GLADloadproc load) { - if(!GLAD_GL_ARB_shader_objects) return; - glad_glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)load("glDeleteObjectARB"); - glad_glGetHandleARB = (PFNGLGETHANDLEARBPROC)load("glGetHandleARB"); - glad_glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC)load("glDetachObjectARB"); - glad_glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)load("glCreateShaderObjectARB"); - glad_glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)load("glShaderSourceARB"); - glad_glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)load("glCompileShaderARB"); - glad_glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)load("glCreateProgramObjectARB"); - glad_glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)load("glAttachObjectARB"); - glad_glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)load("glLinkProgramARB"); - glad_glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)load("glUseProgramObjectARB"); - glad_glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC)load("glValidateProgramARB"); - glad_glUniform1fARB = (PFNGLUNIFORM1FARBPROC)load("glUniform1fARB"); - glad_glUniform2fARB = (PFNGLUNIFORM2FARBPROC)load("glUniform2fARB"); - glad_glUniform3fARB = (PFNGLUNIFORM3FARBPROC)load("glUniform3fARB"); - glad_glUniform4fARB = (PFNGLUNIFORM4FARBPROC)load("glUniform4fARB"); - glad_glUniform1iARB = (PFNGLUNIFORM1IARBPROC)load("glUniform1iARB"); - glad_glUniform2iARB = (PFNGLUNIFORM2IARBPROC)load("glUniform2iARB"); - glad_glUniform3iARB = (PFNGLUNIFORM3IARBPROC)load("glUniform3iARB"); - glad_glUniform4iARB = (PFNGLUNIFORM4IARBPROC)load("glUniform4iARB"); - glad_glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)load("glUniform1fvARB"); - glad_glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)load("glUniform2fvARB"); - glad_glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)load("glUniform3fvARB"); - glad_glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)load("glUniform4fvARB"); - glad_glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)load("glUniform1ivARB"); - glad_glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)load("glUniform2ivARB"); - glad_glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)load("glUniform3ivARB"); - glad_glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)load("glUniform4ivARB"); - glad_glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)load("glUniformMatrix2fvARB"); - glad_glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)load("glUniformMatrix3fvARB"); - glad_glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)load("glUniformMatrix4fvARB"); - glad_glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC)load("glGetObjectParameterfvARB"); - glad_glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)load("glGetObjectParameterivARB"); - glad_glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)load("glGetInfoLogARB"); - glad_glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC)load("glGetAttachedObjectsARB"); - glad_glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)load("glGetUniformLocationARB"); - glad_glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)load("glGetActiveUniformARB"); - glad_glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC)load("glGetUniformfvARB"); - glad_glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC)load("glGetUniformivARB"); - glad_glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC)load("glGetShaderSourceARB"); -} -static void load_GL_ARB_shader_storage_buffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_shader_storage_buffer_object) return; - glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)load("glShaderStorageBlockBinding"); -} -static void load_GL_ARB_shader_subroutine(GLADloadproc load) { - if(!GLAD_GL_ARB_shader_subroutine) return; - glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load("glGetSubroutineUniformLocation"); - glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)load("glGetSubroutineIndex"); - glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load("glGetActiveSubroutineUniformiv"); - glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load("glGetActiveSubroutineUniformName"); - glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)load("glGetActiveSubroutineName"); - glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)load("glUniformSubroutinesuiv"); - glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load("glGetUniformSubroutineuiv"); - glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)load("glGetProgramStageiv"); -} -static void load_GL_ARB_shading_language_include(GLADloadproc load) { - if(!GLAD_GL_ARB_shading_language_include) return; - glad_glNamedStringARB = (PFNGLNAMEDSTRINGARBPROC)load("glNamedStringARB"); - glad_glDeleteNamedStringARB = (PFNGLDELETENAMEDSTRINGARBPROC)load("glDeleteNamedStringARB"); - glad_glCompileShaderIncludeARB = (PFNGLCOMPILESHADERINCLUDEARBPROC)load("glCompileShaderIncludeARB"); - glad_glIsNamedStringARB = (PFNGLISNAMEDSTRINGARBPROC)load("glIsNamedStringARB"); - glad_glGetNamedStringARB = (PFNGLGETNAMEDSTRINGARBPROC)load("glGetNamedStringARB"); - glad_glGetNamedStringivARB = (PFNGLGETNAMEDSTRINGIVARBPROC)load("glGetNamedStringivARB"); -} -static void load_GL_ARB_sparse_buffer(GLADloadproc load) { - if(!GLAD_GL_ARB_sparse_buffer) return; - glad_glBufferPageCommitmentARB = (PFNGLBUFFERPAGECOMMITMENTARBPROC)load("glBufferPageCommitmentARB"); - glad_glNamedBufferPageCommitmentEXT = (PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC)load("glNamedBufferPageCommitmentEXT"); - glad_glNamedBufferPageCommitmentARB = (PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC)load("glNamedBufferPageCommitmentARB"); -} -static void load_GL_ARB_sparse_texture(GLADloadproc load) { - if(!GLAD_GL_ARB_sparse_texture) return; - glad_glTexPageCommitmentARB = (PFNGLTEXPAGECOMMITMENTARBPROC)load("glTexPageCommitmentARB"); -} -static void load_GL_ARB_sync(GLADloadproc load) { - if(!GLAD_GL_ARB_sync) return; - glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); - glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); - glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); - glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); - glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); - glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); - glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); -} -static void load_GL_ARB_tessellation_shader(GLADloadproc load) { - if(!GLAD_GL_ARB_tessellation_shader) return; - glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri"); - glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)load("glPatchParameterfv"); -} -static void load_GL_ARB_texture_barrier(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_barrier) return; - glad_glTextureBarrier = (PFNGLTEXTUREBARRIERPROC)load("glTextureBarrier"); -} -static void load_GL_ARB_texture_buffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_buffer_object) return; - glad_glTexBufferARB = (PFNGLTEXBUFFERARBPROC)load("glTexBufferARB"); -} -static void load_GL_ARB_texture_buffer_range(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_buffer_range) return; - glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)load("glTexBufferRange"); -} -static void load_GL_ARB_texture_compression(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_compression) return; - glad_glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)load("glCompressedTexImage3DARB"); - glad_glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)load("glCompressedTexImage2DARB"); - glad_glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)load("glCompressedTexImage1DARB"); - glad_glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)load("glCompressedTexSubImage3DARB"); - glad_glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)load("glCompressedTexSubImage2DARB"); - glad_glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)load("glCompressedTexSubImage1DARB"); - glad_glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)load("glGetCompressedTexImageARB"); -} -static void load_GL_ARB_texture_multisample(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_multisample) return; - glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); - glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); - glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); - glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); -} -static void load_GL_ARB_texture_storage(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_storage) return; - glad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)load("glTexStorage1D"); - glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)load("glTexStorage2D"); - glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load("glTexStorage3D"); -} -static void load_GL_ARB_texture_storage_multisample(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_storage_multisample) return; - glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)load("glTexStorage2DMultisample"); - glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)load("glTexStorage3DMultisample"); -} -static void load_GL_ARB_texture_view(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_view) return; - glad_glTextureView = (PFNGLTEXTUREVIEWPROC)load("glTextureView"); -} -static void load_GL_ARB_timer_query(GLADloadproc load) { - if(!GLAD_GL_ARB_timer_query) return; - glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); - glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); - glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); -} -static void load_GL_ARB_transform_feedback2(GLADloadproc load) { - if(!GLAD_GL_ARB_transform_feedback2) return; - glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback"); - glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks"); - glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks"); - glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback"); - glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback"); - glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback"); - glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)load("glDrawTransformFeedback"); -} -static void load_GL_ARB_transform_feedback3(GLADloadproc load) { - if(!GLAD_GL_ARB_transform_feedback3) return; - glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)load("glDrawTransformFeedbackStream"); - glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)load("glBeginQueryIndexed"); - glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)load("glEndQueryIndexed"); - glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)load("glGetQueryIndexediv"); -} -static void load_GL_ARB_transform_feedback_instanced(GLADloadproc load) { - if(!GLAD_GL_ARB_transform_feedback_instanced) return; - glad_glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)load("glDrawTransformFeedbackInstanced"); - glad_glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)load("glDrawTransformFeedbackStreamInstanced"); -} -static void load_GL_ARB_transpose_matrix(GLADloadproc load) { - if(!GLAD_GL_ARB_transpose_matrix) return; - glad_glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)load("glLoadTransposeMatrixfARB"); - glad_glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)load("glLoadTransposeMatrixdARB"); - glad_glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)load("glMultTransposeMatrixfARB"); - glad_glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)load("glMultTransposeMatrixdARB"); -} -static void load_GL_ARB_uniform_buffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_uniform_buffer_object) return; - glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); - glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); - glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); - glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); - glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); - glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); - glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); -} -static void load_GL_ARB_vertex_array_object(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_array_object) return; - glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); - glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); - glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); - glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); -} -static void load_GL_ARB_vertex_attrib_64bit(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_attrib_64bit) return; - glad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)load("glVertexAttribL1d"); - glad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)load("glVertexAttribL2d"); - glad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)load("glVertexAttribL3d"); - glad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)load("glVertexAttribL4d"); - glad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)load("glVertexAttribL1dv"); - glad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)load("glVertexAttribL2dv"); - glad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)load("glVertexAttribL3dv"); - glad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)load("glVertexAttribL4dv"); - glad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)load("glVertexAttribLPointer"); - glad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)load("glGetVertexAttribLdv"); -} -static void load_GL_ARB_vertex_attrib_binding(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_attrib_binding) return; - glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer"); - glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat"); - glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat"); - glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)load("glVertexAttribLFormat"); - glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding"); - glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor"); -} -static void load_GL_ARB_vertex_blend(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_blend) return; - glad_glWeightbvARB = (PFNGLWEIGHTBVARBPROC)load("glWeightbvARB"); - glad_glWeightsvARB = (PFNGLWEIGHTSVARBPROC)load("glWeightsvARB"); - glad_glWeightivARB = (PFNGLWEIGHTIVARBPROC)load("glWeightivARB"); - glad_glWeightfvARB = (PFNGLWEIGHTFVARBPROC)load("glWeightfvARB"); - glad_glWeightdvARB = (PFNGLWEIGHTDVARBPROC)load("glWeightdvARB"); - glad_glWeightubvARB = (PFNGLWEIGHTUBVARBPROC)load("glWeightubvARB"); - glad_glWeightusvARB = (PFNGLWEIGHTUSVARBPROC)load("glWeightusvARB"); - glad_glWeightuivARB = (PFNGLWEIGHTUIVARBPROC)load("glWeightuivARB"); - glad_glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC)load("glWeightPointerARB"); - glad_glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC)load("glVertexBlendARB"); -} -static void load_GL_ARB_vertex_buffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_buffer_object) return; - glad_glBindBufferARB = (PFNGLBINDBUFFERARBPROC)load("glBindBufferARB"); - glad_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)load("glDeleteBuffersARB"); - glad_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)load("glGenBuffersARB"); - glad_glIsBufferARB = (PFNGLISBUFFERARBPROC)load("glIsBufferARB"); - glad_glBufferDataARB = (PFNGLBUFFERDATAARBPROC)load("glBufferDataARB"); - glad_glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)load("glBufferSubDataARB"); - glad_glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)load("glGetBufferSubDataARB"); - glad_glMapBufferARB = (PFNGLMAPBUFFERARBPROC)load("glMapBufferARB"); - glad_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)load("glUnmapBufferARB"); - glad_glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)load("glGetBufferParameterivARB"); - glad_glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)load("glGetBufferPointervARB"); -} -static void load_GL_ARB_vertex_program(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_program) return; - glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB"); - glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB"); - glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB"); - glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB"); - glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB"); - glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB"); - glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB"); - glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB"); - glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB"); - glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB"); - glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB"); - glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB"); - glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB"); - glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB"); - glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB"); - glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB"); - glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB"); - glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB"); - glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB"); - glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB"); - glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB"); - glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB"); - glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB"); - glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB"); - glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB"); - glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB"); - glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB"); - glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB"); - glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB"); - glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB"); - glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB"); - glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB"); - glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB"); - glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB"); - glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB"); - glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB"); - glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB"); - glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB"); - glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB"); - glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB"); - glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB"); - glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB"); - glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB"); - glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB"); - glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB"); - glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB"); - glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB"); - glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB"); - glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB"); - glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB"); - glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB"); - glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB"); - glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB"); - glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB"); - glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB"); - glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB"); - glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB"); - glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB"); - glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB"); - glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB"); - glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB"); - glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB"); -} -static void load_GL_ARB_vertex_shader(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_shader) return; - glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB"); - glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB"); - glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB"); - glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB"); - glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB"); - glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB"); - glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB"); - glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB"); - glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB"); - glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB"); - glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB"); - glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB"); - glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB"); - glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB"); - glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB"); - glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB"); - glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB"); - glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB"); - glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB"); - glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB"); - glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB"); - glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB"); - glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB"); - glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB"); - glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB"); - glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB"); - glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB"); - glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB"); - glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB"); - glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB"); - glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB"); - glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB"); - glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB"); - glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB"); - glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB"); - glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB"); - glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB"); - glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB"); - glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB"); - glad_glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)load("glBindAttribLocationARB"); - glad_glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)load("glGetActiveAttribARB"); - glad_glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)load("glGetAttribLocationARB"); - glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB"); - glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB"); - glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB"); - glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB"); -} -static void load_GL_ARB_vertex_type_2_10_10_10_rev(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_type_2_10_10_10_rev) return; - glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); - glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); - glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); - glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); - glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); - glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); - glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); - glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); - glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); - glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); - glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); - glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); - glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); - glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); - glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); - glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); - glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); - glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); - glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); - glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); - glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); - glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); - glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); - glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); - glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); - glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); - glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); - glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); - glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); - glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); - glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); - glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); - glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); - glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); - glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); - glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); - glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); - glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); -} -static void load_GL_ARB_viewport_array(GLADloadproc load) { - if(!GLAD_GL_ARB_viewport_array) return; - glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)load("glViewportArrayv"); - glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)load("glViewportIndexedf"); - glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)load("glViewportIndexedfv"); - glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC)load("glScissorArrayv"); - glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)load("glScissorIndexed"); - glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)load("glScissorIndexedv"); - glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)load("glDepthRangeArrayv"); - glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)load("glDepthRangeIndexed"); - glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC)load("glGetFloati_v"); - glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)load("glGetDoublei_v"); -} -static void load_GL_ARB_window_pos(GLADloadproc load) { - if(!GLAD_GL_ARB_window_pos) return; - glad_glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC)load("glWindowPos2dARB"); - glad_glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC)load("glWindowPos2dvARB"); - glad_glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC)load("glWindowPos2fARB"); - glad_glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC)load("glWindowPos2fvARB"); - glad_glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC)load("glWindowPos2iARB"); - glad_glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC)load("glWindowPos2ivARB"); - glad_glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC)load("glWindowPos2sARB"); - glad_glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC)load("glWindowPos2svARB"); - glad_glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC)load("glWindowPos3dARB"); - glad_glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC)load("glWindowPos3dvARB"); - glad_glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC)load("glWindowPos3fARB"); - glad_glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC)load("glWindowPos3fvARB"); - glad_glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC)load("glWindowPos3iARB"); - glad_glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC)load("glWindowPos3ivARB"); - glad_glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC)load("glWindowPos3sARB"); - glad_glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC)load("glWindowPos3svARB"); -} -static void load_GL_ATI_draw_buffers(GLADloadproc load) { - if(!GLAD_GL_ATI_draw_buffers) return; - glad_glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)load("glDrawBuffersATI"); -} -static void load_GL_ATI_element_array(GLADloadproc load) { - if(!GLAD_GL_ATI_element_array) return; - glad_glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)load("glElementPointerATI"); - glad_glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)load("glDrawElementArrayATI"); - glad_glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)load("glDrawRangeElementArrayATI"); -} -static void load_GL_ATI_envmap_bumpmap(GLADloadproc load) { - if(!GLAD_GL_ATI_envmap_bumpmap) return; - glad_glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC)load("glTexBumpParameterivATI"); - glad_glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC)load("glTexBumpParameterfvATI"); - glad_glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC)load("glGetTexBumpParameterivATI"); - glad_glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC)load("glGetTexBumpParameterfvATI"); -} -static void load_GL_ATI_fragment_shader(GLADloadproc load) { - if(!GLAD_GL_ATI_fragment_shader) return; - glad_glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)load("glGenFragmentShadersATI"); - glad_glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)load("glBindFragmentShaderATI"); - glad_glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)load("glDeleteFragmentShaderATI"); - glad_glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)load("glBeginFragmentShaderATI"); - glad_glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)load("glEndFragmentShaderATI"); - glad_glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)load("glPassTexCoordATI"); - glad_glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)load("glSampleMapATI"); - glad_glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)load("glColorFragmentOp1ATI"); - glad_glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)load("glColorFragmentOp2ATI"); - glad_glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)load("glColorFragmentOp3ATI"); - glad_glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)load("glAlphaFragmentOp1ATI"); - glad_glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)load("glAlphaFragmentOp2ATI"); - glad_glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)load("glAlphaFragmentOp3ATI"); - glad_glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)load("glSetFragmentShaderConstantATI"); -} -static void load_GL_ATI_map_object_buffer(GLADloadproc load) { - if(!GLAD_GL_ATI_map_object_buffer) return; - glad_glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC)load("glMapObjectBufferATI"); - glad_glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC)load("glUnmapObjectBufferATI"); -} -static void load_GL_ATI_pn_triangles(GLADloadproc load) { - if(!GLAD_GL_ATI_pn_triangles) return; - glad_glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC)load("glPNTrianglesiATI"); - glad_glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC)load("glPNTrianglesfATI"); -} -static void load_GL_ATI_separate_stencil(GLADloadproc load) { - if(!GLAD_GL_ATI_separate_stencil) return; - glad_glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)load("glStencilOpSeparateATI"); - glad_glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)load("glStencilFuncSeparateATI"); -} -static void load_GL_ATI_vertex_array_object(GLADloadproc load) { - if(!GLAD_GL_ATI_vertex_array_object) return; - glad_glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)load("glNewObjectBufferATI"); - glad_glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)load("glIsObjectBufferATI"); - glad_glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)load("glUpdateObjectBufferATI"); - glad_glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)load("glGetObjectBufferfvATI"); - glad_glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)load("glGetObjectBufferivATI"); - glad_glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)load("glFreeObjectBufferATI"); - glad_glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)load("glArrayObjectATI"); - glad_glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)load("glGetArrayObjectfvATI"); - glad_glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)load("glGetArrayObjectivATI"); - glad_glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)load("glVariantArrayObjectATI"); - glad_glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)load("glGetVariantArrayObjectfvATI"); - glad_glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)load("glGetVariantArrayObjectivATI"); -} -static void load_GL_ATI_vertex_attrib_array_object(GLADloadproc load) { - if(!GLAD_GL_ATI_vertex_attrib_array_object) return; - glad_glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)load("glVertexAttribArrayObjectATI"); - glad_glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)load("glGetVertexAttribArrayObjectfvATI"); - glad_glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)load("glGetVertexAttribArrayObjectivATI"); -} -static void load_GL_ATI_vertex_streams(GLADloadproc load) { - if(!GLAD_GL_ATI_vertex_streams) return; - glad_glVertexStream1sATI = (PFNGLVERTEXSTREAM1SATIPROC)load("glVertexStream1sATI"); - glad_glVertexStream1svATI = (PFNGLVERTEXSTREAM1SVATIPROC)load("glVertexStream1svATI"); - glad_glVertexStream1iATI = (PFNGLVERTEXSTREAM1IATIPROC)load("glVertexStream1iATI"); - glad_glVertexStream1ivATI = (PFNGLVERTEXSTREAM1IVATIPROC)load("glVertexStream1ivATI"); - glad_glVertexStream1fATI = (PFNGLVERTEXSTREAM1FATIPROC)load("glVertexStream1fATI"); - glad_glVertexStream1fvATI = (PFNGLVERTEXSTREAM1FVATIPROC)load("glVertexStream1fvATI"); - glad_glVertexStream1dATI = (PFNGLVERTEXSTREAM1DATIPROC)load("glVertexStream1dATI"); - glad_glVertexStream1dvATI = (PFNGLVERTEXSTREAM1DVATIPROC)load("glVertexStream1dvATI"); - glad_glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC)load("glVertexStream2sATI"); - glad_glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC)load("glVertexStream2svATI"); - glad_glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC)load("glVertexStream2iATI"); - glad_glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC)load("glVertexStream2ivATI"); - glad_glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC)load("glVertexStream2fATI"); - glad_glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC)load("glVertexStream2fvATI"); - glad_glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC)load("glVertexStream2dATI"); - glad_glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC)load("glVertexStream2dvATI"); - glad_glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC)load("glVertexStream3sATI"); - glad_glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC)load("glVertexStream3svATI"); - glad_glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC)load("glVertexStream3iATI"); - glad_glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC)load("glVertexStream3ivATI"); - glad_glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC)load("glVertexStream3fATI"); - glad_glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC)load("glVertexStream3fvATI"); - glad_glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC)load("glVertexStream3dATI"); - glad_glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC)load("glVertexStream3dvATI"); - glad_glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC)load("glVertexStream4sATI"); - glad_glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC)load("glVertexStream4svATI"); - glad_glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC)load("glVertexStream4iATI"); - glad_glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC)load("glVertexStream4ivATI"); - glad_glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC)load("glVertexStream4fATI"); - glad_glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC)load("glVertexStream4fvATI"); - glad_glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC)load("glVertexStream4dATI"); - glad_glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC)load("glVertexStream4dvATI"); - glad_glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC)load("glNormalStream3bATI"); - glad_glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC)load("glNormalStream3bvATI"); - glad_glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC)load("glNormalStream3sATI"); - glad_glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC)load("glNormalStream3svATI"); - glad_glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC)load("glNormalStream3iATI"); - glad_glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC)load("glNormalStream3ivATI"); - glad_glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC)load("glNormalStream3fATI"); - glad_glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC)load("glNormalStream3fvATI"); - glad_glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC)load("glNormalStream3dATI"); - glad_glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC)load("glNormalStream3dvATI"); - glad_glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)load("glClientActiveVertexStreamATI"); - glad_glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC)load("glVertexBlendEnviATI"); - glad_glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC)load("glVertexBlendEnvfATI"); -} -static void load_GL_EXT_EGL_image_storage(GLADloadproc load) { - if(!GLAD_GL_EXT_EGL_image_storage) return; - glad_glEGLImageTargetTexStorageEXT = (PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC)load("glEGLImageTargetTexStorageEXT"); - glad_glEGLImageTargetTextureStorageEXT = (PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC)load("glEGLImageTargetTextureStorageEXT"); -} -static void load_GL_EXT_bindable_uniform(GLADloadproc load) { - if(!GLAD_GL_EXT_bindable_uniform) return; - glad_glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC)load("glUniformBufferEXT"); - glad_glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC)load("glGetUniformBufferSizeEXT"); - glad_glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC)load("glGetUniformOffsetEXT"); -} -static void load_GL_EXT_blend_color(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_color) return; - glad_glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)load("glBlendColorEXT"); -} -static void load_GL_EXT_blend_equation_separate(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_equation_separate) return; - glad_glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)load("glBlendEquationSeparateEXT"); -} -static void load_GL_EXT_blend_func_separate(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_func_separate) return; - glad_glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)load("glBlendFuncSeparateEXT"); -} -static void load_GL_EXT_blend_minmax(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_minmax) return; - glad_glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)load("glBlendEquationEXT"); -} -static void load_GL_EXT_color_subtable(GLADloadproc load) { - if(!GLAD_GL_EXT_color_subtable) return; - glad_glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)load("glColorSubTableEXT"); - glad_glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC)load("glCopyColorSubTableEXT"); -} -static void load_GL_EXT_compiled_vertex_array(GLADloadproc load) { - if(!GLAD_GL_EXT_compiled_vertex_array) return; - glad_glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC)load("glLockArraysEXT"); - glad_glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC)load("glUnlockArraysEXT"); -} -static void load_GL_EXT_convolution(GLADloadproc load) { - if(!GLAD_GL_EXT_convolution) return; - glad_glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC)load("glConvolutionFilter1DEXT"); - glad_glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC)load("glConvolutionFilter2DEXT"); - glad_glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC)load("glConvolutionParameterfEXT"); - glad_glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC)load("glConvolutionParameterfvEXT"); - glad_glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC)load("glConvolutionParameteriEXT"); - glad_glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC)load("glConvolutionParameterivEXT"); - glad_glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)load("glCopyConvolutionFilter1DEXT"); - glad_glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)load("glCopyConvolutionFilter2DEXT"); - glad_glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC)load("glGetConvolutionFilterEXT"); - glad_glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)load("glGetConvolutionParameterfvEXT"); - glad_glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)load("glGetConvolutionParameterivEXT"); - glad_glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC)load("glGetSeparableFilterEXT"); - glad_glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC)load("glSeparableFilter2DEXT"); -} -static void load_GL_EXT_coordinate_frame(GLADloadproc load) { - if(!GLAD_GL_EXT_coordinate_frame) return; - glad_glTangent3bEXT = (PFNGLTANGENT3BEXTPROC)load("glTangent3bEXT"); - glad_glTangent3bvEXT = (PFNGLTANGENT3BVEXTPROC)load("glTangent3bvEXT"); - glad_glTangent3dEXT = (PFNGLTANGENT3DEXTPROC)load("glTangent3dEXT"); - glad_glTangent3dvEXT = (PFNGLTANGENT3DVEXTPROC)load("glTangent3dvEXT"); - glad_glTangent3fEXT = (PFNGLTANGENT3FEXTPROC)load("glTangent3fEXT"); - glad_glTangent3fvEXT = (PFNGLTANGENT3FVEXTPROC)load("glTangent3fvEXT"); - glad_glTangent3iEXT = (PFNGLTANGENT3IEXTPROC)load("glTangent3iEXT"); - glad_glTangent3ivEXT = (PFNGLTANGENT3IVEXTPROC)load("glTangent3ivEXT"); - glad_glTangent3sEXT = (PFNGLTANGENT3SEXTPROC)load("glTangent3sEXT"); - glad_glTangent3svEXT = (PFNGLTANGENT3SVEXTPROC)load("glTangent3svEXT"); - glad_glBinormal3bEXT = (PFNGLBINORMAL3BEXTPROC)load("glBinormal3bEXT"); - glad_glBinormal3bvEXT = (PFNGLBINORMAL3BVEXTPROC)load("glBinormal3bvEXT"); - glad_glBinormal3dEXT = (PFNGLBINORMAL3DEXTPROC)load("glBinormal3dEXT"); - glad_glBinormal3dvEXT = (PFNGLBINORMAL3DVEXTPROC)load("glBinormal3dvEXT"); - glad_glBinormal3fEXT = (PFNGLBINORMAL3FEXTPROC)load("glBinormal3fEXT"); - glad_glBinormal3fvEXT = (PFNGLBINORMAL3FVEXTPROC)load("glBinormal3fvEXT"); - glad_glBinormal3iEXT = (PFNGLBINORMAL3IEXTPROC)load("glBinormal3iEXT"); - glad_glBinormal3ivEXT = (PFNGLBINORMAL3IVEXTPROC)load("glBinormal3ivEXT"); - glad_glBinormal3sEXT = (PFNGLBINORMAL3SEXTPROC)load("glBinormal3sEXT"); - glad_glBinormal3svEXT = (PFNGLBINORMAL3SVEXTPROC)load("glBinormal3svEXT"); - glad_glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC)load("glTangentPointerEXT"); - glad_glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC)load("glBinormalPointerEXT"); -} -static void load_GL_EXT_copy_texture(GLADloadproc load) { - if(!GLAD_GL_EXT_copy_texture) return; - glad_glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC)load("glCopyTexImage1DEXT"); - glad_glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC)load("glCopyTexImage2DEXT"); - glad_glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC)load("glCopyTexSubImage1DEXT"); - glad_glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC)load("glCopyTexSubImage2DEXT"); - glad_glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC)load("glCopyTexSubImage3DEXT"); -} -static void load_GL_EXT_cull_vertex(GLADloadproc load) { - if(!GLAD_GL_EXT_cull_vertex) return; - glad_glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC)load("glCullParameterdvEXT"); - glad_glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC)load("glCullParameterfvEXT"); -} -static void load_GL_EXT_debug_label(GLADloadproc load) { - if(!GLAD_GL_EXT_debug_label) return; - glad_glLabelObjectEXT = (PFNGLLABELOBJECTEXTPROC)load("glLabelObjectEXT"); - glad_glGetObjectLabelEXT = (PFNGLGETOBJECTLABELEXTPROC)load("glGetObjectLabelEXT"); -} -static void load_GL_EXT_debug_marker(GLADloadproc load) { - if(!GLAD_GL_EXT_debug_marker) return; - glad_glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC)load("glInsertEventMarkerEXT"); - glad_glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC)load("glPushGroupMarkerEXT"); - glad_glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC)load("glPopGroupMarkerEXT"); -} -static void load_GL_EXT_depth_bounds_test(GLADloadproc load) { - if(!GLAD_GL_EXT_depth_bounds_test) return; - glad_glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC)load("glDepthBoundsEXT"); -} -static void load_GL_EXT_direct_state_access(GLADloadproc load) { - if(!GLAD_GL_EXT_direct_state_access) return; - glad_glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC)load("glMatrixLoadfEXT"); - glad_glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC)load("glMatrixLoaddEXT"); - glad_glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC)load("glMatrixMultfEXT"); - glad_glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC)load("glMatrixMultdEXT"); - glad_glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC)load("glMatrixLoadIdentityEXT"); - glad_glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC)load("glMatrixRotatefEXT"); - glad_glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC)load("glMatrixRotatedEXT"); - glad_glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC)load("glMatrixScalefEXT"); - glad_glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC)load("glMatrixScaledEXT"); - glad_glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC)load("glMatrixTranslatefEXT"); - glad_glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC)load("glMatrixTranslatedEXT"); - glad_glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC)load("glMatrixFrustumEXT"); - glad_glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC)load("glMatrixOrthoEXT"); - glad_glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC)load("glMatrixPopEXT"); - glad_glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC)load("glMatrixPushEXT"); - glad_glClientAttribDefaultEXT = (PFNGLCLIENTATTRIBDEFAULTEXTPROC)load("glClientAttribDefaultEXT"); - glad_glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)load("glPushClientAttribDefaultEXT"); - glad_glTextureParameterfEXT = (PFNGLTEXTUREPARAMETERFEXTPROC)load("glTextureParameterfEXT"); - glad_glTextureParameterfvEXT = (PFNGLTEXTUREPARAMETERFVEXTPROC)load("glTextureParameterfvEXT"); - glad_glTextureParameteriEXT = (PFNGLTEXTUREPARAMETERIEXTPROC)load("glTextureParameteriEXT"); - glad_glTextureParameterivEXT = (PFNGLTEXTUREPARAMETERIVEXTPROC)load("glTextureParameterivEXT"); - glad_glTextureImage1DEXT = (PFNGLTEXTUREIMAGE1DEXTPROC)load("glTextureImage1DEXT"); - glad_glTextureImage2DEXT = (PFNGLTEXTUREIMAGE2DEXTPROC)load("glTextureImage2DEXT"); - glad_glTextureSubImage1DEXT = (PFNGLTEXTURESUBIMAGE1DEXTPROC)load("glTextureSubImage1DEXT"); - glad_glTextureSubImage2DEXT = (PFNGLTEXTURESUBIMAGE2DEXTPROC)load("glTextureSubImage2DEXT"); - glad_glCopyTextureImage1DEXT = (PFNGLCOPYTEXTUREIMAGE1DEXTPROC)load("glCopyTextureImage1DEXT"); - glad_glCopyTextureImage2DEXT = (PFNGLCOPYTEXTUREIMAGE2DEXTPROC)load("glCopyTextureImage2DEXT"); - glad_glCopyTextureSubImage1DEXT = (PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)load("glCopyTextureSubImage1DEXT"); - glad_glCopyTextureSubImage2DEXT = (PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)load("glCopyTextureSubImage2DEXT"); - glad_glGetTextureImageEXT = (PFNGLGETTEXTUREIMAGEEXTPROC)load("glGetTextureImageEXT"); - glad_glGetTextureParameterfvEXT = (PFNGLGETTEXTUREPARAMETERFVEXTPROC)load("glGetTextureParameterfvEXT"); - glad_glGetTextureParameterivEXT = (PFNGLGETTEXTUREPARAMETERIVEXTPROC)load("glGetTextureParameterivEXT"); - glad_glGetTextureLevelParameterfvEXT = (PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)load("glGetTextureLevelParameterfvEXT"); - glad_glGetTextureLevelParameterivEXT = (PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)load("glGetTextureLevelParameterivEXT"); - glad_glTextureImage3DEXT = (PFNGLTEXTUREIMAGE3DEXTPROC)load("glTextureImage3DEXT"); - glad_glTextureSubImage3DEXT = (PFNGLTEXTURESUBIMAGE3DEXTPROC)load("glTextureSubImage3DEXT"); - glad_glCopyTextureSubImage3DEXT = (PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)load("glCopyTextureSubImage3DEXT"); - glad_glBindMultiTextureEXT = (PFNGLBINDMULTITEXTUREEXTPROC)load("glBindMultiTextureEXT"); - glad_glMultiTexCoordPointerEXT = (PFNGLMULTITEXCOORDPOINTEREXTPROC)load("glMultiTexCoordPointerEXT"); - glad_glMultiTexEnvfEXT = (PFNGLMULTITEXENVFEXTPROC)load("glMultiTexEnvfEXT"); - glad_glMultiTexEnvfvEXT = (PFNGLMULTITEXENVFVEXTPROC)load("glMultiTexEnvfvEXT"); - glad_glMultiTexEnviEXT = (PFNGLMULTITEXENVIEXTPROC)load("glMultiTexEnviEXT"); - glad_glMultiTexEnvivEXT = (PFNGLMULTITEXENVIVEXTPROC)load("glMultiTexEnvivEXT"); - glad_glMultiTexGendEXT = (PFNGLMULTITEXGENDEXTPROC)load("glMultiTexGendEXT"); - glad_glMultiTexGendvEXT = (PFNGLMULTITEXGENDVEXTPROC)load("glMultiTexGendvEXT"); - glad_glMultiTexGenfEXT = (PFNGLMULTITEXGENFEXTPROC)load("glMultiTexGenfEXT"); - glad_glMultiTexGenfvEXT = (PFNGLMULTITEXGENFVEXTPROC)load("glMultiTexGenfvEXT"); - glad_glMultiTexGeniEXT = (PFNGLMULTITEXGENIEXTPROC)load("glMultiTexGeniEXT"); - glad_glMultiTexGenivEXT = (PFNGLMULTITEXGENIVEXTPROC)load("glMultiTexGenivEXT"); - glad_glGetMultiTexEnvfvEXT = (PFNGLGETMULTITEXENVFVEXTPROC)load("glGetMultiTexEnvfvEXT"); - glad_glGetMultiTexEnvivEXT = (PFNGLGETMULTITEXENVIVEXTPROC)load("glGetMultiTexEnvivEXT"); - glad_glGetMultiTexGendvEXT = (PFNGLGETMULTITEXGENDVEXTPROC)load("glGetMultiTexGendvEXT"); - glad_glGetMultiTexGenfvEXT = (PFNGLGETMULTITEXGENFVEXTPROC)load("glGetMultiTexGenfvEXT"); - glad_glGetMultiTexGenivEXT = (PFNGLGETMULTITEXGENIVEXTPROC)load("glGetMultiTexGenivEXT"); - glad_glMultiTexParameteriEXT = (PFNGLMULTITEXPARAMETERIEXTPROC)load("glMultiTexParameteriEXT"); - glad_glMultiTexParameterivEXT = (PFNGLMULTITEXPARAMETERIVEXTPROC)load("glMultiTexParameterivEXT"); - glad_glMultiTexParameterfEXT = (PFNGLMULTITEXPARAMETERFEXTPROC)load("glMultiTexParameterfEXT"); - glad_glMultiTexParameterfvEXT = (PFNGLMULTITEXPARAMETERFVEXTPROC)load("glMultiTexParameterfvEXT"); - glad_glMultiTexImage1DEXT = (PFNGLMULTITEXIMAGE1DEXTPROC)load("glMultiTexImage1DEXT"); - glad_glMultiTexImage2DEXT = (PFNGLMULTITEXIMAGE2DEXTPROC)load("glMultiTexImage2DEXT"); - glad_glMultiTexSubImage1DEXT = (PFNGLMULTITEXSUBIMAGE1DEXTPROC)load("glMultiTexSubImage1DEXT"); - glad_glMultiTexSubImage2DEXT = (PFNGLMULTITEXSUBIMAGE2DEXTPROC)load("glMultiTexSubImage2DEXT"); - glad_glCopyMultiTexImage1DEXT = (PFNGLCOPYMULTITEXIMAGE1DEXTPROC)load("glCopyMultiTexImage1DEXT"); - glad_glCopyMultiTexImage2DEXT = (PFNGLCOPYMULTITEXIMAGE2DEXTPROC)load("glCopyMultiTexImage2DEXT"); - glad_glCopyMultiTexSubImage1DEXT = (PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)load("glCopyMultiTexSubImage1DEXT"); - glad_glCopyMultiTexSubImage2DEXT = (PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)load("glCopyMultiTexSubImage2DEXT"); - glad_glGetMultiTexImageEXT = (PFNGLGETMULTITEXIMAGEEXTPROC)load("glGetMultiTexImageEXT"); - glad_glGetMultiTexParameterfvEXT = (PFNGLGETMULTITEXPARAMETERFVEXTPROC)load("glGetMultiTexParameterfvEXT"); - glad_glGetMultiTexParameterivEXT = (PFNGLGETMULTITEXPARAMETERIVEXTPROC)load("glGetMultiTexParameterivEXT"); - glad_glGetMultiTexLevelParameterfvEXT = (PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)load("glGetMultiTexLevelParameterfvEXT"); - glad_glGetMultiTexLevelParameterivEXT = (PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)load("glGetMultiTexLevelParameterivEXT"); - glad_glMultiTexImage3DEXT = (PFNGLMULTITEXIMAGE3DEXTPROC)load("glMultiTexImage3DEXT"); - glad_glMultiTexSubImage3DEXT = (PFNGLMULTITEXSUBIMAGE3DEXTPROC)load("glMultiTexSubImage3DEXT"); - glad_glCopyMultiTexSubImage3DEXT = (PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)load("glCopyMultiTexSubImage3DEXT"); - glad_glEnableClientStateIndexedEXT = (PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)load("glEnableClientStateIndexedEXT"); - glad_glDisableClientStateIndexedEXT = (PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)load("glDisableClientStateIndexedEXT"); - glad_glGetFloatIndexedvEXT = (PFNGLGETFLOATINDEXEDVEXTPROC)load("glGetFloatIndexedvEXT"); - glad_glGetDoubleIndexedvEXT = (PFNGLGETDOUBLEINDEXEDVEXTPROC)load("glGetDoubleIndexedvEXT"); - glad_glGetPointerIndexedvEXT = (PFNGLGETPOINTERINDEXEDVEXTPROC)load("glGetPointerIndexedvEXT"); - glad_glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)load("glEnableIndexedEXT"); - glad_glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)load("glDisableIndexedEXT"); - glad_glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)load("glIsEnabledIndexedEXT"); - glad_glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)load("glGetIntegerIndexedvEXT"); - glad_glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)load("glGetBooleanIndexedvEXT"); - glad_glCompressedTextureImage3DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)load("glCompressedTextureImage3DEXT"); - glad_glCompressedTextureImage2DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)load("glCompressedTextureImage2DEXT"); - glad_glCompressedTextureImage1DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)load("glCompressedTextureImage1DEXT"); - glad_glCompressedTextureSubImage3DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)load("glCompressedTextureSubImage3DEXT"); - glad_glCompressedTextureSubImage2DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)load("glCompressedTextureSubImage2DEXT"); - glad_glCompressedTextureSubImage1DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)load("glCompressedTextureSubImage1DEXT"); - glad_glGetCompressedTextureImageEXT = (PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)load("glGetCompressedTextureImageEXT"); - glad_glCompressedMultiTexImage3DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)load("glCompressedMultiTexImage3DEXT"); - glad_glCompressedMultiTexImage2DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)load("glCompressedMultiTexImage2DEXT"); - glad_glCompressedMultiTexImage1DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)load("glCompressedMultiTexImage1DEXT"); - glad_glCompressedMultiTexSubImage3DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)load("glCompressedMultiTexSubImage3DEXT"); - glad_glCompressedMultiTexSubImage2DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)load("glCompressedMultiTexSubImage2DEXT"); - glad_glCompressedMultiTexSubImage1DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)load("glCompressedMultiTexSubImage1DEXT"); - glad_glGetCompressedMultiTexImageEXT = (PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)load("glGetCompressedMultiTexImageEXT"); - glad_glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC)load("glMatrixLoadTransposefEXT"); - glad_glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC)load("glMatrixLoadTransposedEXT"); - glad_glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC)load("glMatrixMultTransposefEXT"); - glad_glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC)load("glMatrixMultTransposedEXT"); - glad_glNamedBufferDataEXT = (PFNGLNAMEDBUFFERDATAEXTPROC)load("glNamedBufferDataEXT"); - glad_glNamedBufferSubDataEXT = (PFNGLNAMEDBUFFERSUBDATAEXTPROC)load("glNamedBufferSubDataEXT"); - glad_glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC)load("glMapNamedBufferEXT"); - glad_glUnmapNamedBufferEXT = (PFNGLUNMAPNAMEDBUFFEREXTPROC)load("glUnmapNamedBufferEXT"); - glad_glGetNamedBufferParameterivEXT = (PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)load("glGetNamedBufferParameterivEXT"); - glad_glGetNamedBufferPointervEXT = (PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)load("glGetNamedBufferPointervEXT"); - glad_glGetNamedBufferSubDataEXT = (PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)load("glGetNamedBufferSubDataEXT"); - glad_glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)load("glProgramUniform1fEXT"); - glad_glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)load("glProgramUniform2fEXT"); - glad_glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)load("glProgramUniform3fEXT"); - glad_glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)load("glProgramUniform4fEXT"); - glad_glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)load("glProgramUniform1iEXT"); - glad_glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)load("glProgramUniform2iEXT"); - glad_glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)load("glProgramUniform3iEXT"); - glad_glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)load("glProgramUniform4iEXT"); - glad_glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)load("glProgramUniform1fvEXT"); - glad_glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)load("glProgramUniform2fvEXT"); - glad_glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)load("glProgramUniform3fvEXT"); - glad_glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)load("glProgramUniform4fvEXT"); - glad_glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)load("glProgramUniform1ivEXT"); - glad_glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)load("glProgramUniform2ivEXT"); - glad_glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)load("glProgramUniform3ivEXT"); - glad_glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)load("glProgramUniform4ivEXT"); - glad_glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)load("glProgramUniformMatrix2fvEXT"); - glad_glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)load("glProgramUniformMatrix3fvEXT"); - glad_glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)load("glProgramUniformMatrix4fvEXT"); - glad_glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)load("glProgramUniformMatrix2x3fvEXT"); - glad_glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)load("glProgramUniformMatrix3x2fvEXT"); - glad_glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)load("glProgramUniformMatrix2x4fvEXT"); - glad_glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)load("glProgramUniformMatrix4x2fvEXT"); - glad_glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)load("glProgramUniformMatrix3x4fvEXT"); - glad_glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)load("glProgramUniformMatrix4x3fvEXT"); - glad_glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC)load("glTextureBufferEXT"); - glad_glMultiTexBufferEXT = (PFNGLMULTITEXBUFFEREXTPROC)load("glMultiTexBufferEXT"); - glad_glTextureParameterIivEXT = (PFNGLTEXTUREPARAMETERIIVEXTPROC)load("glTextureParameterIivEXT"); - glad_glTextureParameterIuivEXT = (PFNGLTEXTUREPARAMETERIUIVEXTPROC)load("glTextureParameterIuivEXT"); - glad_glGetTextureParameterIivEXT = (PFNGLGETTEXTUREPARAMETERIIVEXTPROC)load("glGetTextureParameterIivEXT"); - glad_glGetTextureParameterIuivEXT = (PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)load("glGetTextureParameterIuivEXT"); - glad_glMultiTexParameterIivEXT = (PFNGLMULTITEXPARAMETERIIVEXTPROC)load("glMultiTexParameterIivEXT"); - glad_glMultiTexParameterIuivEXT = (PFNGLMULTITEXPARAMETERIUIVEXTPROC)load("glMultiTexParameterIuivEXT"); - glad_glGetMultiTexParameterIivEXT = (PFNGLGETMULTITEXPARAMETERIIVEXTPROC)load("glGetMultiTexParameterIivEXT"); - glad_glGetMultiTexParameterIuivEXT = (PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)load("glGetMultiTexParameterIuivEXT"); - glad_glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)load("glProgramUniform1uiEXT"); - glad_glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)load("glProgramUniform2uiEXT"); - glad_glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)load("glProgramUniform3uiEXT"); - glad_glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)load("glProgramUniform4uiEXT"); - glad_glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)load("glProgramUniform1uivEXT"); - glad_glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)load("glProgramUniform2uivEXT"); - glad_glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)load("glProgramUniform3uivEXT"); - glad_glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)load("glProgramUniform4uivEXT"); - glad_glNamedProgramLocalParameters4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)load("glNamedProgramLocalParameters4fvEXT"); - glad_glNamedProgramLocalParameterI4iEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)load("glNamedProgramLocalParameterI4iEXT"); - glad_glNamedProgramLocalParameterI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)load("glNamedProgramLocalParameterI4ivEXT"); - glad_glNamedProgramLocalParametersI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)load("glNamedProgramLocalParametersI4ivEXT"); - glad_glNamedProgramLocalParameterI4uiEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)load("glNamedProgramLocalParameterI4uiEXT"); - glad_glNamedProgramLocalParameterI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)load("glNamedProgramLocalParameterI4uivEXT"); - glad_glNamedProgramLocalParametersI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)load("glNamedProgramLocalParametersI4uivEXT"); - glad_glGetNamedProgramLocalParameterIivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)load("glGetNamedProgramLocalParameterIivEXT"); - glad_glGetNamedProgramLocalParameterIuivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)load("glGetNamedProgramLocalParameterIuivEXT"); - glad_glEnableClientStateiEXT = (PFNGLENABLECLIENTSTATEIEXTPROC)load("glEnableClientStateiEXT"); - glad_glDisableClientStateiEXT = (PFNGLDISABLECLIENTSTATEIEXTPROC)load("glDisableClientStateiEXT"); - glad_glGetFloati_vEXT = (PFNGLGETFLOATI_VEXTPROC)load("glGetFloati_vEXT"); - glad_glGetDoublei_vEXT = (PFNGLGETDOUBLEI_VEXTPROC)load("glGetDoublei_vEXT"); - glad_glGetPointeri_vEXT = (PFNGLGETPOINTERI_VEXTPROC)load("glGetPointeri_vEXT"); - glad_glNamedProgramStringEXT = (PFNGLNAMEDPROGRAMSTRINGEXTPROC)load("glNamedProgramStringEXT"); - glad_glNamedProgramLocalParameter4dEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)load("glNamedProgramLocalParameter4dEXT"); - glad_glNamedProgramLocalParameter4dvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)load("glNamedProgramLocalParameter4dvEXT"); - glad_glNamedProgramLocalParameter4fEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)load("glNamedProgramLocalParameter4fEXT"); - glad_glNamedProgramLocalParameter4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)load("glNamedProgramLocalParameter4fvEXT"); - glad_glGetNamedProgramLocalParameterdvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)load("glGetNamedProgramLocalParameterdvEXT"); - glad_glGetNamedProgramLocalParameterfvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)load("glGetNamedProgramLocalParameterfvEXT"); - glad_glGetNamedProgramivEXT = (PFNGLGETNAMEDPROGRAMIVEXTPROC)load("glGetNamedProgramivEXT"); - glad_glGetNamedProgramStringEXT = (PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)load("glGetNamedProgramStringEXT"); - glad_glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)load("glNamedRenderbufferStorageEXT"); - glad_glGetNamedRenderbufferParameterivEXT = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)load("glGetNamedRenderbufferParameterivEXT"); - glad_glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glNamedRenderbufferStorageMultisampleEXT"); - glad_glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)load("glNamedRenderbufferStorageMultisampleCoverageEXT"); - glad_glCheckNamedFramebufferStatusEXT = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)load("glCheckNamedFramebufferStatusEXT"); - glad_glNamedFramebufferTexture1DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)load("glNamedFramebufferTexture1DEXT"); - glad_glNamedFramebufferTexture2DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)load("glNamedFramebufferTexture2DEXT"); - glad_glNamedFramebufferTexture3DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)load("glNamedFramebufferTexture3DEXT"); - glad_glNamedFramebufferRenderbufferEXT = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)load("glNamedFramebufferRenderbufferEXT"); - glad_glGetNamedFramebufferAttachmentParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)load("glGetNamedFramebufferAttachmentParameterivEXT"); - glad_glGenerateTextureMipmapEXT = (PFNGLGENERATETEXTUREMIPMAPEXTPROC)load("glGenerateTextureMipmapEXT"); - glad_glGenerateMultiTexMipmapEXT = (PFNGLGENERATEMULTITEXMIPMAPEXTPROC)load("glGenerateMultiTexMipmapEXT"); - glad_glFramebufferDrawBufferEXT = (PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)load("glFramebufferDrawBufferEXT"); - glad_glFramebufferDrawBuffersEXT = (PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)load("glFramebufferDrawBuffersEXT"); - glad_glFramebufferReadBufferEXT = (PFNGLFRAMEBUFFERREADBUFFEREXTPROC)load("glFramebufferReadBufferEXT"); - glad_glGetFramebufferParameterivEXT = (PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)load("glGetFramebufferParameterivEXT"); - glad_glNamedCopyBufferSubDataEXT = (PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)load("glNamedCopyBufferSubDataEXT"); - glad_glNamedFramebufferTextureEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)load("glNamedFramebufferTextureEXT"); - glad_glNamedFramebufferTextureLayerEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)load("glNamedFramebufferTextureLayerEXT"); - glad_glNamedFramebufferTextureFaceEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)load("glNamedFramebufferTextureFaceEXT"); - glad_glTextureRenderbufferEXT = (PFNGLTEXTURERENDERBUFFEREXTPROC)load("glTextureRenderbufferEXT"); - glad_glMultiTexRenderbufferEXT = (PFNGLMULTITEXRENDERBUFFEREXTPROC)load("glMultiTexRenderbufferEXT"); - glad_glVertexArrayVertexOffsetEXT = (PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)load("glVertexArrayVertexOffsetEXT"); - glad_glVertexArrayColorOffsetEXT = (PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)load("glVertexArrayColorOffsetEXT"); - glad_glVertexArrayEdgeFlagOffsetEXT = (PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)load("glVertexArrayEdgeFlagOffsetEXT"); - glad_glVertexArrayIndexOffsetEXT = (PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)load("glVertexArrayIndexOffsetEXT"); - glad_glVertexArrayNormalOffsetEXT = (PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)load("glVertexArrayNormalOffsetEXT"); - glad_glVertexArrayTexCoordOffsetEXT = (PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)load("glVertexArrayTexCoordOffsetEXT"); - glad_glVertexArrayMultiTexCoordOffsetEXT = (PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)load("glVertexArrayMultiTexCoordOffsetEXT"); - glad_glVertexArrayFogCoordOffsetEXT = (PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)load("glVertexArrayFogCoordOffsetEXT"); - glad_glVertexArraySecondaryColorOffsetEXT = (PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)load("glVertexArraySecondaryColorOffsetEXT"); - glad_glVertexArrayVertexAttribOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)load("glVertexArrayVertexAttribOffsetEXT"); - glad_glVertexArrayVertexAttribIOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)load("glVertexArrayVertexAttribIOffsetEXT"); - glad_glEnableVertexArrayEXT = (PFNGLENABLEVERTEXARRAYEXTPROC)load("glEnableVertexArrayEXT"); - glad_glDisableVertexArrayEXT = (PFNGLDISABLEVERTEXARRAYEXTPROC)load("glDisableVertexArrayEXT"); - glad_glEnableVertexArrayAttribEXT = (PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)load("glEnableVertexArrayAttribEXT"); - glad_glDisableVertexArrayAttribEXT = (PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)load("glDisableVertexArrayAttribEXT"); - glad_glGetVertexArrayIntegervEXT = (PFNGLGETVERTEXARRAYINTEGERVEXTPROC)load("glGetVertexArrayIntegervEXT"); - glad_glGetVertexArrayPointervEXT = (PFNGLGETVERTEXARRAYPOINTERVEXTPROC)load("glGetVertexArrayPointervEXT"); - glad_glGetVertexArrayIntegeri_vEXT = (PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)load("glGetVertexArrayIntegeri_vEXT"); - glad_glGetVertexArrayPointeri_vEXT = (PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)load("glGetVertexArrayPointeri_vEXT"); - glad_glMapNamedBufferRangeEXT = (PFNGLMAPNAMEDBUFFERRANGEEXTPROC)load("glMapNamedBufferRangeEXT"); - glad_glFlushMappedNamedBufferRangeEXT = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)load("glFlushMappedNamedBufferRangeEXT"); - glad_glNamedBufferStorageEXT = (PFNGLNAMEDBUFFERSTORAGEEXTPROC)load("glNamedBufferStorageEXT"); - glad_glClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC)load("glClearNamedBufferDataEXT"); - glad_glClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)load("glClearNamedBufferSubDataEXT"); - glad_glNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)load("glNamedFramebufferParameteriEXT"); - glad_glGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)load("glGetNamedFramebufferParameterivEXT"); - glad_glProgramUniform1dEXT = (PFNGLPROGRAMUNIFORM1DEXTPROC)load("glProgramUniform1dEXT"); - glad_glProgramUniform2dEXT = (PFNGLPROGRAMUNIFORM2DEXTPROC)load("glProgramUniform2dEXT"); - glad_glProgramUniform3dEXT = (PFNGLPROGRAMUNIFORM3DEXTPROC)load("glProgramUniform3dEXT"); - glad_glProgramUniform4dEXT = (PFNGLPROGRAMUNIFORM4DEXTPROC)load("glProgramUniform4dEXT"); - glad_glProgramUniform1dvEXT = (PFNGLPROGRAMUNIFORM1DVEXTPROC)load("glProgramUniform1dvEXT"); - glad_glProgramUniform2dvEXT = (PFNGLPROGRAMUNIFORM2DVEXTPROC)load("glProgramUniform2dvEXT"); - glad_glProgramUniform3dvEXT = (PFNGLPROGRAMUNIFORM3DVEXTPROC)load("glProgramUniform3dvEXT"); - glad_glProgramUniform4dvEXT = (PFNGLPROGRAMUNIFORM4DVEXTPROC)load("glProgramUniform4dvEXT"); - glad_glProgramUniformMatrix2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)load("glProgramUniformMatrix2dvEXT"); - glad_glProgramUniformMatrix3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)load("glProgramUniformMatrix3dvEXT"); - glad_glProgramUniformMatrix4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)load("glProgramUniformMatrix4dvEXT"); - glad_glProgramUniformMatrix2x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)load("glProgramUniformMatrix2x3dvEXT"); - glad_glProgramUniformMatrix2x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)load("glProgramUniformMatrix2x4dvEXT"); - glad_glProgramUniformMatrix3x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)load("glProgramUniformMatrix3x2dvEXT"); - glad_glProgramUniformMatrix3x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)load("glProgramUniformMatrix3x4dvEXT"); - glad_glProgramUniformMatrix4x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)load("glProgramUniformMatrix4x2dvEXT"); - glad_glProgramUniformMatrix4x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)load("glProgramUniformMatrix4x3dvEXT"); - glad_glTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC)load("glTextureBufferRangeEXT"); - glad_glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC)load("glTextureStorage1DEXT"); - glad_glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC)load("glTextureStorage2DEXT"); - glad_glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC)load("glTextureStorage3DEXT"); - glad_glTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)load("glTextureStorage2DMultisampleEXT"); - glad_glTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)load("glTextureStorage3DMultisampleEXT"); - glad_glVertexArrayBindVertexBufferEXT = (PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC)load("glVertexArrayBindVertexBufferEXT"); - glad_glVertexArrayVertexAttribFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC)load("glVertexArrayVertexAttribFormatEXT"); - glad_glVertexArrayVertexAttribIFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC)load("glVertexArrayVertexAttribIFormatEXT"); - glad_glVertexArrayVertexAttribLFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC)load("glVertexArrayVertexAttribLFormatEXT"); - glad_glVertexArrayVertexAttribBindingEXT = (PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC)load("glVertexArrayVertexAttribBindingEXT"); - glad_glVertexArrayVertexBindingDivisorEXT = (PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC)load("glVertexArrayVertexBindingDivisorEXT"); - glad_glVertexArrayVertexAttribLOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)load("glVertexArrayVertexAttribLOffsetEXT"); - glad_glTexturePageCommitmentEXT = (PFNGLTEXTUREPAGECOMMITMENTEXTPROC)load("glTexturePageCommitmentEXT"); - glad_glVertexArrayVertexAttribDivisorEXT = (PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC)load("glVertexArrayVertexAttribDivisorEXT"); -} -static void load_GL_EXT_draw_buffers2(GLADloadproc load) { - if(!GLAD_GL_EXT_draw_buffers2) return; - glad_glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC)load("glColorMaskIndexedEXT"); - glad_glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)load("glGetBooleanIndexedvEXT"); - glad_glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)load("glGetIntegerIndexedvEXT"); - glad_glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)load("glEnableIndexedEXT"); - glad_glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)load("glDisableIndexedEXT"); - glad_glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)load("glIsEnabledIndexedEXT"); -} -static void load_GL_EXT_draw_instanced(GLADloadproc load) { - if(!GLAD_GL_EXT_draw_instanced) return; - glad_glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)load("glDrawArraysInstancedEXT"); - glad_glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)load("glDrawElementsInstancedEXT"); -} -static void load_GL_EXT_draw_range_elements(GLADloadproc load) { - if(!GLAD_GL_EXT_draw_range_elements) return; - glad_glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC)load("glDrawRangeElementsEXT"); -} -static void load_GL_EXT_external_buffer(GLADloadproc load) { - if(!GLAD_GL_EXT_external_buffer) return; - glad_glBufferStorageExternalEXT = (PFNGLBUFFERSTORAGEEXTERNALEXTPROC)load("glBufferStorageExternalEXT"); - glad_glNamedBufferStorageExternalEXT = (PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC)load("glNamedBufferStorageExternalEXT"); -} -static void load_GL_EXT_fog_coord(GLADloadproc load) { - if(!GLAD_GL_EXT_fog_coord) return; - glad_glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)load("glFogCoordfEXT"); - glad_glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC)load("glFogCoordfvEXT"); - glad_glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC)load("glFogCoorddEXT"); - glad_glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC)load("glFogCoorddvEXT"); - glad_glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)load("glFogCoordPointerEXT"); -} -static void load_GL_EXT_framebuffer_blit(GLADloadproc load) { - if(!GLAD_GL_EXT_framebuffer_blit) return; - glad_glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)load("glBlitFramebufferEXT"); -} -static void load_GL_EXT_framebuffer_multisample(GLADloadproc load) { - if(!GLAD_GL_EXT_framebuffer_multisample) return; - glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glRenderbufferStorageMultisampleEXT"); -} -static void load_GL_EXT_framebuffer_object(GLADloadproc load) { - if(!GLAD_GL_EXT_framebuffer_object) return; - glad_glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)load("glIsRenderbufferEXT"); - glad_glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)load("glBindRenderbufferEXT"); - glad_glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)load("glDeleteRenderbuffersEXT"); - glad_glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)load("glGenRenderbuffersEXT"); - glad_glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)load("glRenderbufferStorageEXT"); - glad_glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)load("glGetRenderbufferParameterivEXT"); - glad_glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)load("glIsFramebufferEXT"); - glad_glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)load("glBindFramebufferEXT"); - glad_glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)load("glDeleteFramebuffersEXT"); - glad_glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)load("glGenFramebuffersEXT"); - glad_glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)load("glCheckFramebufferStatusEXT"); - glad_glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)load("glFramebufferTexture1DEXT"); - glad_glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)load("glFramebufferTexture2DEXT"); - glad_glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)load("glFramebufferTexture3DEXT"); - glad_glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)load("glFramebufferRenderbufferEXT"); - glad_glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)load("glGetFramebufferAttachmentParameterivEXT"); - glad_glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)load("glGenerateMipmapEXT"); -} -static void load_GL_EXT_geometry_shader4(GLADloadproc load) { - if(!GLAD_GL_EXT_geometry_shader4) return; - glad_glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)load("glProgramParameteriEXT"); -} -static void load_GL_EXT_gpu_program_parameters(GLADloadproc load) { - if(!GLAD_GL_EXT_gpu_program_parameters) return; - glad_glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)load("glProgramEnvParameters4fvEXT"); - glad_glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)load("glProgramLocalParameters4fvEXT"); -} -static void load_GL_EXT_gpu_shader4(GLADloadproc load) { - if(!GLAD_GL_EXT_gpu_shader4) return; - glad_glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC)load("glGetUniformuivEXT"); - glad_glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)load("glBindFragDataLocationEXT"); - glad_glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC)load("glGetFragDataLocationEXT"); - glad_glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC)load("glUniform1uiEXT"); - glad_glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC)load("glUniform2uiEXT"); - glad_glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC)load("glUniform3uiEXT"); - glad_glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC)load("glUniform4uiEXT"); - glad_glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC)load("glUniform1uivEXT"); - glad_glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC)load("glUniform2uivEXT"); - glad_glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC)load("glUniform3uivEXT"); - glad_glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC)load("glUniform4uivEXT"); -} -static void load_GL_EXT_histogram(GLADloadproc load) { - if(!GLAD_GL_EXT_histogram) return; - glad_glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC)load("glGetHistogramEXT"); - glad_glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)load("glGetHistogramParameterfvEXT"); - glad_glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)load("glGetHistogramParameterivEXT"); - glad_glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC)load("glGetMinmaxEXT"); - glad_glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC)load("glGetMinmaxParameterfvEXT"); - glad_glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC)load("glGetMinmaxParameterivEXT"); - glad_glHistogramEXT = (PFNGLHISTOGRAMEXTPROC)load("glHistogramEXT"); - glad_glMinmaxEXT = (PFNGLMINMAXEXTPROC)load("glMinmaxEXT"); - glad_glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC)load("glResetHistogramEXT"); - glad_glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC)load("glResetMinmaxEXT"); -} -static void load_GL_EXT_index_func(GLADloadproc load) { - if(!GLAD_GL_EXT_index_func) return; - glad_glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC)load("glIndexFuncEXT"); -} -static void load_GL_EXT_index_material(GLADloadproc load) { - if(!GLAD_GL_EXT_index_material) return; - glad_glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC)load("glIndexMaterialEXT"); -} -static void load_GL_EXT_light_texture(GLADloadproc load) { - if(!GLAD_GL_EXT_light_texture) return; - glad_glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC)load("glApplyTextureEXT"); - glad_glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC)load("glTextureLightEXT"); - glad_glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC)load("glTextureMaterialEXT"); -} -static void load_GL_EXT_memory_object(GLADloadproc load) { - if(!GLAD_GL_EXT_memory_object) return; - glad_glGetUnsignedBytevEXT = (PFNGLGETUNSIGNEDBYTEVEXTPROC)load("glGetUnsignedBytevEXT"); - glad_glGetUnsignedBytei_vEXT = (PFNGLGETUNSIGNEDBYTEI_VEXTPROC)load("glGetUnsignedBytei_vEXT"); - glad_glDeleteMemoryObjectsEXT = (PFNGLDELETEMEMORYOBJECTSEXTPROC)load("glDeleteMemoryObjectsEXT"); - glad_glIsMemoryObjectEXT = (PFNGLISMEMORYOBJECTEXTPROC)load("glIsMemoryObjectEXT"); - glad_glCreateMemoryObjectsEXT = (PFNGLCREATEMEMORYOBJECTSEXTPROC)load("glCreateMemoryObjectsEXT"); - glad_glMemoryObjectParameterivEXT = (PFNGLMEMORYOBJECTPARAMETERIVEXTPROC)load("glMemoryObjectParameterivEXT"); - glad_glGetMemoryObjectParameterivEXT = (PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC)load("glGetMemoryObjectParameterivEXT"); - glad_glTexStorageMem2DEXT = (PFNGLTEXSTORAGEMEM2DEXTPROC)load("glTexStorageMem2DEXT"); - glad_glTexStorageMem2DMultisampleEXT = (PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC)load("glTexStorageMem2DMultisampleEXT"); - glad_glTexStorageMem3DEXT = (PFNGLTEXSTORAGEMEM3DEXTPROC)load("glTexStorageMem3DEXT"); - glad_glTexStorageMem3DMultisampleEXT = (PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC)load("glTexStorageMem3DMultisampleEXT"); - glad_glBufferStorageMemEXT = (PFNGLBUFFERSTORAGEMEMEXTPROC)load("glBufferStorageMemEXT"); - glad_glTextureStorageMem2DEXT = (PFNGLTEXTURESTORAGEMEM2DEXTPROC)load("glTextureStorageMem2DEXT"); - glad_glTextureStorageMem2DMultisampleEXT = (PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC)load("glTextureStorageMem2DMultisampleEXT"); - glad_glTextureStorageMem3DEXT = (PFNGLTEXTURESTORAGEMEM3DEXTPROC)load("glTextureStorageMem3DEXT"); - glad_glTextureStorageMem3DMultisampleEXT = (PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC)load("glTextureStorageMem3DMultisampleEXT"); - glad_glNamedBufferStorageMemEXT = (PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC)load("glNamedBufferStorageMemEXT"); - glad_glTexStorageMem1DEXT = (PFNGLTEXSTORAGEMEM1DEXTPROC)load("glTexStorageMem1DEXT"); - glad_glTextureStorageMem1DEXT = (PFNGLTEXTURESTORAGEMEM1DEXTPROC)load("glTextureStorageMem1DEXT"); -} -static void load_GL_EXT_memory_object_fd(GLADloadproc load) { - if(!GLAD_GL_EXT_memory_object_fd) return; - glad_glImportMemoryFdEXT = (PFNGLIMPORTMEMORYFDEXTPROC)load("glImportMemoryFdEXT"); -} -static void load_GL_EXT_memory_object_win32(GLADloadproc load) { - if(!GLAD_GL_EXT_memory_object_win32) return; - glad_glImportMemoryWin32HandleEXT = (PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC)load("glImportMemoryWin32HandleEXT"); - glad_glImportMemoryWin32NameEXT = (PFNGLIMPORTMEMORYWIN32NAMEEXTPROC)load("glImportMemoryWin32NameEXT"); -} -static void load_GL_EXT_multi_draw_arrays(GLADloadproc load) { - if(!GLAD_GL_EXT_multi_draw_arrays) return; - glad_glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC)load("glMultiDrawArraysEXT"); - glad_glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC)load("glMultiDrawElementsEXT"); -} -static void load_GL_EXT_multisample(GLADloadproc load) { - if(!GLAD_GL_EXT_multisample) return; - glad_glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC)load("glSampleMaskEXT"); - glad_glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC)load("glSamplePatternEXT"); -} -static void load_GL_EXT_paletted_texture(GLADloadproc load) { - if(!GLAD_GL_EXT_paletted_texture) return; - glad_glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)load("glColorTableEXT"); - glad_glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)load("glGetColorTableEXT"); - glad_glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)load("glGetColorTableParameterivEXT"); - glad_glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)load("glGetColorTableParameterfvEXT"); -} -static void load_GL_EXT_pixel_transform(GLADloadproc load) { - if(!GLAD_GL_EXT_pixel_transform) return; - glad_glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)load("glPixelTransformParameteriEXT"); - glad_glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)load("glPixelTransformParameterfEXT"); - glad_glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)load("glPixelTransformParameterivEXT"); - glad_glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)load("glPixelTransformParameterfvEXT"); - glad_glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)load("glGetPixelTransformParameterivEXT"); - glad_glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)load("glGetPixelTransformParameterfvEXT"); -} -static void load_GL_EXT_point_parameters(GLADloadproc load) { - if(!GLAD_GL_EXT_point_parameters) return; - glad_glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)load("glPointParameterfEXT"); - glad_glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)load("glPointParameterfvEXT"); -} -static void load_GL_EXT_polygon_offset(GLADloadproc load) { - if(!GLAD_GL_EXT_polygon_offset) return; - glad_glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC)load("glPolygonOffsetEXT"); -} -static void load_GL_EXT_polygon_offset_clamp(GLADloadproc load) { - if(!GLAD_GL_EXT_polygon_offset_clamp) return; - glad_glPolygonOffsetClampEXT = (PFNGLPOLYGONOFFSETCLAMPEXTPROC)load("glPolygonOffsetClampEXT"); -} -static void load_GL_EXT_provoking_vertex(GLADloadproc load) { - if(!GLAD_GL_EXT_provoking_vertex) return; - glad_glProvokingVertexEXT = (PFNGLPROVOKINGVERTEXEXTPROC)load("glProvokingVertexEXT"); -} -static void load_GL_EXT_raster_multisample(GLADloadproc load) { - if(!GLAD_GL_EXT_raster_multisample) return; - glad_glRasterSamplesEXT = (PFNGLRASTERSAMPLESEXTPROC)load("glRasterSamplesEXT"); -} -static void load_GL_EXT_secondary_color(GLADloadproc load) { - if(!GLAD_GL_EXT_secondary_color) return; - glad_glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC)load("glSecondaryColor3bEXT"); - glad_glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC)load("glSecondaryColor3bvEXT"); - glad_glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC)load("glSecondaryColor3dEXT"); - glad_glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC)load("glSecondaryColor3dvEXT"); - glad_glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)load("glSecondaryColor3fEXT"); - glad_glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC)load("glSecondaryColor3fvEXT"); - glad_glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC)load("glSecondaryColor3iEXT"); - glad_glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC)load("glSecondaryColor3ivEXT"); - glad_glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC)load("glSecondaryColor3sEXT"); - glad_glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC)load("glSecondaryColor3svEXT"); - glad_glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC)load("glSecondaryColor3ubEXT"); - glad_glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC)load("glSecondaryColor3ubvEXT"); - glad_glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC)load("glSecondaryColor3uiEXT"); - glad_glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC)load("glSecondaryColor3uivEXT"); - glad_glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC)load("glSecondaryColor3usEXT"); - glad_glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC)load("glSecondaryColor3usvEXT"); - glad_glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC)load("glSecondaryColorPointerEXT"); -} -static void load_GL_EXT_semaphore(GLADloadproc load) { - if(!GLAD_GL_EXT_semaphore) return; - glad_glGetUnsignedBytevEXT = (PFNGLGETUNSIGNEDBYTEVEXTPROC)load("glGetUnsignedBytevEXT"); - glad_glGetUnsignedBytei_vEXT = (PFNGLGETUNSIGNEDBYTEI_VEXTPROC)load("glGetUnsignedBytei_vEXT"); - glad_glGenSemaphoresEXT = (PFNGLGENSEMAPHORESEXTPROC)load("glGenSemaphoresEXT"); - glad_glDeleteSemaphoresEXT = (PFNGLDELETESEMAPHORESEXTPROC)load("glDeleteSemaphoresEXT"); - glad_glIsSemaphoreEXT = (PFNGLISSEMAPHOREEXTPROC)load("glIsSemaphoreEXT"); - glad_glSemaphoreParameterui64vEXT = (PFNGLSEMAPHOREPARAMETERUI64VEXTPROC)load("glSemaphoreParameterui64vEXT"); - glad_glGetSemaphoreParameterui64vEXT = (PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC)load("glGetSemaphoreParameterui64vEXT"); - glad_glWaitSemaphoreEXT = (PFNGLWAITSEMAPHOREEXTPROC)load("glWaitSemaphoreEXT"); - glad_glSignalSemaphoreEXT = (PFNGLSIGNALSEMAPHOREEXTPROC)load("glSignalSemaphoreEXT"); -} -static void load_GL_EXT_semaphore_fd(GLADloadproc load) { - if(!GLAD_GL_EXT_semaphore_fd) return; - glad_glImportSemaphoreFdEXT = (PFNGLIMPORTSEMAPHOREFDEXTPROC)load("glImportSemaphoreFdEXT"); -} -static void load_GL_EXT_semaphore_win32(GLADloadproc load) { - if(!GLAD_GL_EXT_semaphore_win32) return; - glad_glImportSemaphoreWin32HandleEXT = (PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC)load("glImportSemaphoreWin32HandleEXT"); - glad_glImportSemaphoreWin32NameEXT = (PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC)load("glImportSemaphoreWin32NameEXT"); -} -static void load_GL_EXT_separate_shader_objects(GLADloadproc load) { - if(!GLAD_GL_EXT_separate_shader_objects) return; - glad_glUseShaderProgramEXT = (PFNGLUSESHADERPROGRAMEXTPROC)load("glUseShaderProgramEXT"); - glad_glActiveProgramEXT = (PFNGLACTIVEPROGRAMEXTPROC)load("glActiveProgramEXT"); - glad_glCreateShaderProgramEXT = (PFNGLCREATESHADERPROGRAMEXTPROC)load("glCreateShaderProgramEXT"); - glad_glActiveShaderProgramEXT = (PFNGLACTIVESHADERPROGRAMEXTPROC)load("glActiveShaderProgramEXT"); - glad_glBindProgramPipelineEXT = (PFNGLBINDPROGRAMPIPELINEEXTPROC)load("glBindProgramPipelineEXT"); - glad_glCreateShaderProgramvEXT = (PFNGLCREATESHADERPROGRAMVEXTPROC)load("glCreateShaderProgramvEXT"); - glad_glDeleteProgramPipelinesEXT = (PFNGLDELETEPROGRAMPIPELINESEXTPROC)load("glDeleteProgramPipelinesEXT"); - glad_glGenProgramPipelinesEXT = (PFNGLGENPROGRAMPIPELINESEXTPROC)load("glGenProgramPipelinesEXT"); - glad_glGetProgramPipelineInfoLogEXT = (PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC)load("glGetProgramPipelineInfoLogEXT"); - glad_glGetProgramPipelineivEXT = (PFNGLGETPROGRAMPIPELINEIVEXTPROC)load("glGetProgramPipelineivEXT"); - glad_glIsProgramPipelineEXT = (PFNGLISPROGRAMPIPELINEEXTPROC)load("glIsProgramPipelineEXT"); - glad_glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)load("glProgramParameteriEXT"); - glad_glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)load("glProgramUniform1fEXT"); - glad_glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)load("glProgramUniform1fvEXT"); - glad_glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)load("glProgramUniform1iEXT"); - glad_glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)load("glProgramUniform1ivEXT"); - glad_glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)load("glProgramUniform2fEXT"); - glad_glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)load("glProgramUniform2fvEXT"); - glad_glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)load("glProgramUniform2iEXT"); - glad_glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)load("glProgramUniform2ivEXT"); - glad_glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)load("glProgramUniform3fEXT"); - glad_glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)load("glProgramUniform3fvEXT"); - glad_glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)load("glProgramUniform3iEXT"); - glad_glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)load("glProgramUniform3ivEXT"); - glad_glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)load("glProgramUniform4fEXT"); - glad_glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)load("glProgramUniform4fvEXT"); - glad_glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)load("glProgramUniform4iEXT"); - glad_glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)load("glProgramUniform4ivEXT"); - glad_glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)load("glProgramUniformMatrix2fvEXT"); - glad_glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)load("glProgramUniformMatrix3fvEXT"); - glad_glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)load("glProgramUniformMatrix4fvEXT"); - glad_glUseProgramStagesEXT = (PFNGLUSEPROGRAMSTAGESEXTPROC)load("glUseProgramStagesEXT"); - glad_glValidateProgramPipelineEXT = (PFNGLVALIDATEPROGRAMPIPELINEEXTPROC)load("glValidateProgramPipelineEXT"); - glad_glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)load("glProgramUniform1uiEXT"); - glad_glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)load("glProgramUniform2uiEXT"); - glad_glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)load("glProgramUniform3uiEXT"); - glad_glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)load("glProgramUniform4uiEXT"); - glad_glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)load("glProgramUniform1uivEXT"); - glad_glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)load("glProgramUniform2uivEXT"); - glad_glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)load("glProgramUniform3uivEXT"); - glad_glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)load("glProgramUniform4uivEXT"); - glad_glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)load("glProgramUniformMatrix4fvEXT"); - glad_glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)load("glProgramUniformMatrix2x3fvEXT"); - glad_glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)load("glProgramUniformMatrix3x2fvEXT"); - glad_glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)load("glProgramUniformMatrix2x4fvEXT"); - glad_glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)load("glProgramUniformMatrix4x2fvEXT"); - glad_glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)load("glProgramUniformMatrix3x4fvEXT"); - glad_glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)load("glProgramUniformMatrix4x3fvEXT"); -} -static void load_GL_EXT_shader_framebuffer_fetch_non_coherent(GLADloadproc load) { - if(!GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent) return; - glad_glFramebufferFetchBarrierEXT = (PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC)load("glFramebufferFetchBarrierEXT"); -} -static void load_GL_EXT_shader_image_load_store(GLADloadproc load) { - if(!GLAD_GL_EXT_shader_image_load_store) return; - glad_glBindImageTextureEXT = (PFNGLBINDIMAGETEXTUREEXTPROC)load("glBindImageTextureEXT"); - glad_glMemoryBarrierEXT = (PFNGLMEMORYBARRIEREXTPROC)load("glMemoryBarrierEXT"); -} -static void load_GL_EXT_stencil_clear_tag(GLADloadproc load) { - if(!GLAD_GL_EXT_stencil_clear_tag) return; - glad_glStencilClearTagEXT = (PFNGLSTENCILCLEARTAGEXTPROC)load("glStencilClearTagEXT"); -} -static void load_GL_EXT_stencil_two_side(GLADloadproc load) { - if(!GLAD_GL_EXT_stencil_two_side) return; - glad_glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC)load("glActiveStencilFaceEXT"); -} -static void load_GL_EXT_subtexture(GLADloadproc load) { - if(!GLAD_GL_EXT_subtexture) return; - glad_glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC)load("glTexSubImage1DEXT"); - glad_glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC)load("glTexSubImage2DEXT"); -} -static void load_GL_EXT_texture3D(GLADloadproc load) { - if(!GLAD_GL_EXT_texture3D) return; - glad_glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)load("glTexImage3DEXT"); - glad_glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC)load("glTexSubImage3DEXT"); -} -static void load_GL_EXT_texture_array(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_array) return; - glad_glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)load("glFramebufferTextureLayerEXT"); -} -static void load_GL_EXT_texture_buffer_object(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_buffer_object) return; - glad_glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)load("glTexBufferEXT"); -} -static void load_GL_EXT_texture_integer(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_integer) return; - glad_glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)load("glTexParameterIivEXT"); - glad_glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)load("glTexParameterIuivEXT"); - glad_glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)load("glGetTexParameterIivEXT"); - glad_glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)load("glGetTexParameterIuivEXT"); - glad_glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC)load("glClearColorIiEXT"); - glad_glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC)load("glClearColorIuiEXT"); -} -static void load_GL_EXT_texture_object(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_object) return; - glad_glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC)load("glAreTexturesResidentEXT"); - glad_glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)load("glBindTextureEXT"); - glad_glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)load("glDeleteTexturesEXT"); - glad_glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)load("glGenTexturesEXT"); - glad_glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)load("glIsTextureEXT"); - glad_glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC)load("glPrioritizeTexturesEXT"); -} -static void load_GL_EXT_texture_perturb_normal(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_perturb_normal) return; - glad_glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC)load("glTextureNormalEXT"); -} -static void load_GL_EXT_timer_query(GLADloadproc load) { - if(!GLAD_GL_EXT_timer_query) return; - glad_glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)load("glGetQueryObjecti64vEXT"); - glad_glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)load("glGetQueryObjectui64vEXT"); -} -static void load_GL_EXT_transform_feedback(GLADloadproc load) { - if(!GLAD_GL_EXT_transform_feedback) return; - glad_glBeginTransformFeedbackEXT = (PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)load("glBeginTransformFeedbackEXT"); - glad_glEndTransformFeedbackEXT = (PFNGLENDTRANSFORMFEEDBACKEXTPROC)load("glEndTransformFeedbackEXT"); - glad_glBindBufferRangeEXT = (PFNGLBINDBUFFERRANGEEXTPROC)load("glBindBufferRangeEXT"); - glad_glBindBufferOffsetEXT = (PFNGLBINDBUFFEROFFSETEXTPROC)load("glBindBufferOffsetEXT"); - glad_glBindBufferBaseEXT = (PFNGLBINDBUFFERBASEEXTPROC)load("glBindBufferBaseEXT"); - glad_glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)load("glTransformFeedbackVaryingsEXT"); - glad_glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)load("glGetTransformFeedbackVaryingEXT"); -} -static void load_GL_EXT_vertex_array(GLADloadproc load) { - if(!GLAD_GL_EXT_vertex_array) return; - glad_glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)load("glArrayElementEXT"); - glad_glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)load("glColorPointerEXT"); - glad_glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)load("glDrawArraysEXT"); - glad_glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)load("glEdgeFlagPointerEXT"); - glad_glGetPointervEXT = (PFNGLGETPOINTERVEXTPROC)load("glGetPointervEXT"); - glad_glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)load("glIndexPointerEXT"); - glad_glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)load("glNormalPointerEXT"); - glad_glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)load("glTexCoordPointerEXT"); - glad_glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)load("glVertexPointerEXT"); -} -static void load_GL_EXT_vertex_attrib_64bit(GLADloadproc load) { - if(!GLAD_GL_EXT_vertex_attrib_64bit) return; - glad_glVertexAttribL1dEXT = (PFNGLVERTEXATTRIBL1DEXTPROC)load("glVertexAttribL1dEXT"); - glad_glVertexAttribL2dEXT = (PFNGLVERTEXATTRIBL2DEXTPROC)load("glVertexAttribL2dEXT"); - glad_glVertexAttribL3dEXT = (PFNGLVERTEXATTRIBL3DEXTPROC)load("glVertexAttribL3dEXT"); - glad_glVertexAttribL4dEXT = (PFNGLVERTEXATTRIBL4DEXTPROC)load("glVertexAttribL4dEXT"); - glad_glVertexAttribL1dvEXT = (PFNGLVERTEXATTRIBL1DVEXTPROC)load("glVertexAttribL1dvEXT"); - glad_glVertexAttribL2dvEXT = (PFNGLVERTEXATTRIBL2DVEXTPROC)load("glVertexAttribL2dvEXT"); - glad_glVertexAttribL3dvEXT = (PFNGLVERTEXATTRIBL3DVEXTPROC)load("glVertexAttribL3dvEXT"); - glad_glVertexAttribL4dvEXT = (PFNGLVERTEXATTRIBL4DVEXTPROC)load("glVertexAttribL4dvEXT"); - glad_glVertexAttribLPointerEXT = (PFNGLVERTEXATTRIBLPOINTEREXTPROC)load("glVertexAttribLPointerEXT"); - glad_glGetVertexAttribLdvEXT = (PFNGLGETVERTEXATTRIBLDVEXTPROC)load("glGetVertexAttribLdvEXT"); -} -static void load_GL_EXT_vertex_shader(GLADloadproc load) { - if(!GLAD_GL_EXT_vertex_shader) return; - glad_glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)load("glBeginVertexShaderEXT"); - glad_glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)load("glEndVertexShaderEXT"); - glad_glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)load("glBindVertexShaderEXT"); - glad_glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)load("glGenVertexShadersEXT"); - glad_glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)load("glDeleteVertexShaderEXT"); - glad_glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)load("glShaderOp1EXT"); - glad_glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)load("glShaderOp2EXT"); - glad_glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)load("glShaderOp3EXT"); - glad_glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)load("glSwizzleEXT"); - glad_glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)load("glWriteMaskEXT"); - glad_glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)load("glInsertComponentEXT"); - glad_glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)load("glExtractComponentEXT"); - glad_glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)load("glGenSymbolsEXT"); - glad_glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)load("glSetInvariantEXT"); - glad_glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)load("glSetLocalConstantEXT"); - glad_glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)load("glVariantbvEXT"); - glad_glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)load("glVariantsvEXT"); - glad_glVariantivEXT = (PFNGLVARIANTIVEXTPROC)load("glVariantivEXT"); - glad_glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)load("glVariantfvEXT"); - glad_glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)load("glVariantdvEXT"); - glad_glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)load("glVariantubvEXT"); - glad_glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)load("glVariantusvEXT"); - glad_glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)load("glVariantuivEXT"); - glad_glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)load("glVariantPointerEXT"); - glad_glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)load("glEnableVariantClientStateEXT"); - glad_glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)load("glDisableVariantClientStateEXT"); - glad_glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)load("glBindLightParameterEXT"); - glad_glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)load("glBindMaterialParameterEXT"); - glad_glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)load("glBindTexGenParameterEXT"); - glad_glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)load("glBindTextureUnitParameterEXT"); - glad_glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)load("glBindParameterEXT"); - glad_glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)load("glIsVariantEnabledEXT"); - glad_glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)load("glGetVariantBooleanvEXT"); - glad_glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)load("glGetVariantIntegervEXT"); - glad_glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)load("glGetVariantFloatvEXT"); - glad_glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)load("glGetVariantPointervEXT"); - glad_glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)load("glGetInvariantBooleanvEXT"); - glad_glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)load("glGetInvariantIntegervEXT"); - glad_glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)load("glGetInvariantFloatvEXT"); - glad_glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)load("glGetLocalConstantBooleanvEXT"); - glad_glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)load("glGetLocalConstantIntegervEXT"); - glad_glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)load("glGetLocalConstantFloatvEXT"); -} -static void load_GL_EXT_vertex_weighting(GLADloadproc load) { - if(!GLAD_GL_EXT_vertex_weighting) return; - glad_glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC)load("glVertexWeightfEXT"); - glad_glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC)load("glVertexWeightfvEXT"); - glad_glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)load("glVertexWeightPointerEXT"); -} -static void load_GL_EXT_win32_keyed_mutex(GLADloadproc load) { - if(!GLAD_GL_EXT_win32_keyed_mutex) return; - glad_glAcquireKeyedMutexWin32EXT = (PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC)load("glAcquireKeyedMutexWin32EXT"); - glad_glReleaseKeyedMutexWin32EXT = (PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC)load("glReleaseKeyedMutexWin32EXT"); -} -static void load_GL_EXT_window_rectangles(GLADloadproc load) { - if(!GLAD_GL_EXT_window_rectangles) return; - glad_glWindowRectanglesEXT = (PFNGLWINDOWRECTANGLESEXTPROC)load("glWindowRectanglesEXT"); -} -static void load_GL_EXT_x11_sync_object(GLADloadproc load) { - if(!GLAD_GL_EXT_x11_sync_object) return; - glad_glImportSyncEXT = (PFNGLIMPORTSYNCEXTPROC)load("glImportSyncEXT"); -} -static void load_GL_GREMEDY_frame_terminator(GLADloadproc load) { - if(!GLAD_GL_GREMEDY_frame_terminator) return; - glad_glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC)load("glFrameTerminatorGREMEDY"); -} -static void load_GL_GREMEDY_string_marker(GLADloadproc load) { - if(!GLAD_GL_GREMEDY_string_marker) return; - glad_glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC)load("glStringMarkerGREMEDY"); -} -static void load_GL_HP_image_transform(GLADloadproc load) { - if(!GLAD_GL_HP_image_transform) return; - glad_glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC)load("glImageTransformParameteriHP"); - glad_glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC)load("glImageTransformParameterfHP"); - glad_glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)load("glImageTransformParameterivHP"); - glad_glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)load("glImageTransformParameterfvHP"); - glad_glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)load("glGetImageTransformParameterivHP"); - glad_glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)load("glGetImageTransformParameterfvHP"); -} -static void load_GL_IBM_multimode_draw_arrays(GLADloadproc load) { - if(!GLAD_GL_IBM_multimode_draw_arrays) return; - glad_glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC)load("glMultiModeDrawArraysIBM"); - glad_glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC)load("glMultiModeDrawElementsIBM"); -} -static void load_GL_IBM_static_data(GLADloadproc load) { - if(!GLAD_GL_IBM_static_data) return; - glad_glFlushStaticDataIBM = (PFNGLFLUSHSTATICDATAIBMPROC)load("glFlushStaticDataIBM"); -} -static void load_GL_IBM_vertex_array_lists(GLADloadproc load) { - if(!GLAD_GL_IBM_vertex_array_lists) return; - glad_glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC)load("glColorPointerListIBM"); - glad_glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)load("glSecondaryColorPointerListIBM"); - glad_glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC)load("glEdgeFlagPointerListIBM"); - glad_glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC)load("glFogCoordPointerListIBM"); - glad_glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC)load("glIndexPointerListIBM"); - glad_glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC)load("glNormalPointerListIBM"); - glad_glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC)load("glTexCoordPointerListIBM"); - glad_glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC)load("glVertexPointerListIBM"); -} -static void load_GL_INGR_blend_func_separate(GLADloadproc load) { - if(!GLAD_GL_INGR_blend_func_separate) return; - glad_glBlendFuncSeparateINGR = (PFNGLBLENDFUNCSEPARATEINGRPROC)load("glBlendFuncSeparateINGR"); -} -static void load_GL_INTEL_framebuffer_CMAA(GLADloadproc load) { - if(!GLAD_GL_INTEL_framebuffer_CMAA) return; - glad_glApplyFramebufferAttachmentCMAAINTEL = (PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC)load("glApplyFramebufferAttachmentCMAAINTEL"); -} -static void load_GL_INTEL_map_texture(GLADloadproc load) { - if(!GLAD_GL_INTEL_map_texture) return; - glad_glSyncTextureINTEL = (PFNGLSYNCTEXTUREINTELPROC)load("glSyncTextureINTEL"); - glad_glUnmapTexture2DINTEL = (PFNGLUNMAPTEXTURE2DINTELPROC)load("glUnmapTexture2DINTEL"); - glad_glMapTexture2DINTEL = (PFNGLMAPTEXTURE2DINTELPROC)load("glMapTexture2DINTEL"); -} -static void load_GL_INTEL_parallel_arrays(GLADloadproc load) { - if(!GLAD_GL_INTEL_parallel_arrays) return; - glad_glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC)load("glVertexPointervINTEL"); - glad_glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC)load("glNormalPointervINTEL"); - glad_glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC)load("glColorPointervINTEL"); - glad_glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC)load("glTexCoordPointervINTEL"); -} -static void load_GL_INTEL_performance_query(GLADloadproc load) { - if(!GLAD_GL_INTEL_performance_query) return; - glad_glBeginPerfQueryINTEL = (PFNGLBEGINPERFQUERYINTELPROC)load("glBeginPerfQueryINTEL"); - glad_glCreatePerfQueryINTEL = (PFNGLCREATEPERFQUERYINTELPROC)load("glCreatePerfQueryINTEL"); - glad_glDeletePerfQueryINTEL = (PFNGLDELETEPERFQUERYINTELPROC)load("glDeletePerfQueryINTEL"); - glad_glEndPerfQueryINTEL = (PFNGLENDPERFQUERYINTELPROC)load("glEndPerfQueryINTEL"); - glad_glGetFirstPerfQueryIdINTEL = (PFNGLGETFIRSTPERFQUERYIDINTELPROC)load("glGetFirstPerfQueryIdINTEL"); - glad_glGetNextPerfQueryIdINTEL = (PFNGLGETNEXTPERFQUERYIDINTELPROC)load("glGetNextPerfQueryIdINTEL"); - glad_glGetPerfCounterInfoINTEL = (PFNGLGETPERFCOUNTERINFOINTELPROC)load("glGetPerfCounterInfoINTEL"); - glad_glGetPerfQueryDataINTEL = (PFNGLGETPERFQUERYDATAINTELPROC)load("glGetPerfQueryDataINTEL"); - glad_glGetPerfQueryIdByNameINTEL = (PFNGLGETPERFQUERYIDBYNAMEINTELPROC)load("glGetPerfQueryIdByNameINTEL"); - glad_glGetPerfQueryInfoINTEL = (PFNGLGETPERFQUERYINFOINTELPROC)load("glGetPerfQueryInfoINTEL"); -} -static void load_GL_KHR_blend_equation_advanced(GLADloadproc load) { - if(!GLAD_GL_KHR_blend_equation_advanced) return; - glad_glBlendBarrierKHR = (PFNGLBLENDBARRIERKHRPROC)load("glBlendBarrierKHR"); -} -static void load_GL_KHR_debug(GLADloadproc load) { - if(!GLAD_GL_KHR_debug) return; - glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)load("glDebugMessageControl"); - glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)load("glDebugMessageInsert"); - glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)load("glDebugMessageCallback"); - glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)load("glGetDebugMessageLog"); - glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load("glPushDebugGroup"); - glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)load("glPopDebugGroup"); - glad_glObjectLabel = (PFNGLOBJECTLABELPROC)load("glObjectLabel"); - glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load("glGetObjectLabel"); - glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load("glObjectPtrLabel"); - glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)load("glGetObjectPtrLabel"); - glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); - glad_glDebugMessageControlKHR = (PFNGLDEBUGMESSAGECONTROLKHRPROC)load("glDebugMessageControlKHR"); - glad_glDebugMessageInsertKHR = (PFNGLDEBUGMESSAGEINSERTKHRPROC)load("glDebugMessageInsertKHR"); - glad_glDebugMessageCallbackKHR = (PFNGLDEBUGMESSAGECALLBACKKHRPROC)load("glDebugMessageCallbackKHR"); - glad_glGetDebugMessageLogKHR = (PFNGLGETDEBUGMESSAGELOGKHRPROC)load("glGetDebugMessageLogKHR"); - glad_glPushDebugGroupKHR = (PFNGLPUSHDEBUGGROUPKHRPROC)load("glPushDebugGroupKHR"); - glad_glPopDebugGroupKHR = (PFNGLPOPDEBUGGROUPKHRPROC)load("glPopDebugGroupKHR"); - glad_glObjectLabelKHR = (PFNGLOBJECTLABELKHRPROC)load("glObjectLabelKHR"); - glad_glGetObjectLabelKHR = (PFNGLGETOBJECTLABELKHRPROC)load("glGetObjectLabelKHR"); - glad_glObjectPtrLabelKHR = (PFNGLOBJECTPTRLABELKHRPROC)load("glObjectPtrLabelKHR"); - glad_glGetObjectPtrLabelKHR = (PFNGLGETOBJECTPTRLABELKHRPROC)load("glGetObjectPtrLabelKHR"); - glad_glGetPointervKHR = (PFNGLGETPOINTERVKHRPROC)load("glGetPointervKHR"); -} -static void load_GL_KHR_parallel_shader_compile(GLADloadproc load) { - if(!GLAD_GL_KHR_parallel_shader_compile) return; - glad_glMaxShaderCompilerThreadsKHR = (PFNGLMAXSHADERCOMPILERTHREADSKHRPROC)load("glMaxShaderCompilerThreadsKHR"); -} -static void load_GL_KHR_robustness(GLADloadproc load) { - if(!GLAD_GL_KHR_robustness) return; - glad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC)load("glGetGraphicsResetStatus"); - glad_glReadnPixels = (PFNGLREADNPIXELSPROC)load("glReadnPixels"); - glad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC)load("glGetnUniformfv"); - glad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC)load("glGetnUniformiv"); - glad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC)load("glGetnUniformuiv"); - glad_glGetGraphicsResetStatusKHR = (PFNGLGETGRAPHICSRESETSTATUSKHRPROC)load("glGetGraphicsResetStatusKHR"); - glad_glReadnPixelsKHR = (PFNGLREADNPIXELSKHRPROC)load("glReadnPixelsKHR"); - glad_glGetnUniformfvKHR = (PFNGLGETNUNIFORMFVKHRPROC)load("glGetnUniformfvKHR"); - glad_glGetnUniformivKHR = (PFNGLGETNUNIFORMIVKHRPROC)load("glGetnUniformivKHR"); - glad_glGetnUniformuivKHR = (PFNGLGETNUNIFORMUIVKHRPROC)load("glGetnUniformuivKHR"); -} -static void load_GL_MESA_resize_buffers(GLADloadproc load) { - if(!GLAD_GL_MESA_resize_buffers) return; - glad_glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC)load("glResizeBuffersMESA"); -} -static void load_GL_MESA_window_pos(GLADloadproc load) { - if(!GLAD_GL_MESA_window_pos) return; - glad_glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC)load("glWindowPos2dMESA"); - glad_glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC)load("glWindowPos2dvMESA"); - glad_glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC)load("glWindowPos2fMESA"); - glad_glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC)load("glWindowPos2fvMESA"); - glad_glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC)load("glWindowPos2iMESA"); - glad_glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC)load("glWindowPos2ivMESA"); - glad_glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC)load("glWindowPos2sMESA"); - glad_glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC)load("glWindowPos2svMESA"); - glad_glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC)load("glWindowPos3dMESA"); - glad_glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC)load("glWindowPos3dvMESA"); - glad_glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC)load("glWindowPos3fMESA"); - glad_glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC)load("glWindowPos3fvMESA"); - glad_glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC)load("glWindowPos3iMESA"); - glad_glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC)load("glWindowPos3ivMESA"); - glad_glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC)load("glWindowPos3sMESA"); - glad_glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC)load("glWindowPos3svMESA"); - glad_glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC)load("glWindowPos4dMESA"); - glad_glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC)load("glWindowPos4dvMESA"); - glad_glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC)load("glWindowPos4fMESA"); - glad_glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC)load("glWindowPos4fvMESA"); - glad_glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC)load("glWindowPos4iMESA"); - glad_glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC)load("glWindowPos4ivMESA"); - glad_glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC)load("glWindowPos4sMESA"); - glad_glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC)load("glWindowPos4svMESA"); -} -static void load_GL_NVX_conditional_render(GLADloadproc load) { - if(!GLAD_GL_NVX_conditional_render) return; - glad_glBeginConditionalRenderNVX = (PFNGLBEGINCONDITIONALRENDERNVXPROC)load("glBeginConditionalRenderNVX"); - glad_glEndConditionalRenderNVX = (PFNGLENDCONDITIONALRENDERNVXPROC)load("glEndConditionalRenderNVX"); -} -static void load_GL_NVX_linked_gpu_multicast(GLADloadproc load) { - if(!GLAD_GL_NVX_linked_gpu_multicast) return; - glad_glLGPUNamedBufferSubDataNVX = (PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC)load("glLGPUNamedBufferSubDataNVX"); - glad_glLGPUCopyImageSubDataNVX = (PFNGLLGPUCOPYIMAGESUBDATANVXPROC)load("glLGPUCopyImageSubDataNVX"); - glad_glLGPUInterlockNVX = (PFNGLLGPUINTERLOCKNVXPROC)load("glLGPUInterlockNVX"); -} -static void load_GL_NV_alpha_to_coverage_dither_control(GLADloadproc load) { - if(!GLAD_GL_NV_alpha_to_coverage_dither_control) return; - glad_glAlphaToCoverageDitherControlNV = (PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC)load("glAlphaToCoverageDitherControlNV"); -} -static void load_GL_NV_bindless_multi_draw_indirect(GLADloadproc load) { - if(!GLAD_GL_NV_bindless_multi_draw_indirect) return; - glad_glMultiDrawArraysIndirectBindlessNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)load("glMultiDrawArraysIndirectBindlessNV"); - glad_glMultiDrawElementsIndirectBindlessNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)load("glMultiDrawElementsIndirectBindlessNV"); -} -static void load_GL_NV_bindless_multi_draw_indirect_count(GLADloadproc load) { - if(!GLAD_GL_NV_bindless_multi_draw_indirect_count) return; - glad_glMultiDrawArraysIndirectBindlessCountNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC)load("glMultiDrawArraysIndirectBindlessCountNV"); - glad_glMultiDrawElementsIndirectBindlessCountNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)load("glMultiDrawElementsIndirectBindlessCountNV"); -} -static void load_GL_NV_bindless_texture(GLADloadproc load) { - if(!GLAD_GL_NV_bindless_texture) return; - glad_glGetTextureHandleNV = (PFNGLGETTEXTUREHANDLENVPROC)load("glGetTextureHandleNV"); - glad_glGetTextureSamplerHandleNV = (PFNGLGETTEXTURESAMPLERHANDLENVPROC)load("glGetTextureSamplerHandleNV"); - glad_glMakeTextureHandleResidentNV = (PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)load("glMakeTextureHandleResidentNV"); - glad_glMakeTextureHandleNonResidentNV = (PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)load("glMakeTextureHandleNonResidentNV"); - glad_glGetImageHandleNV = (PFNGLGETIMAGEHANDLENVPROC)load("glGetImageHandleNV"); - glad_glMakeImageHandleResidentNV = (PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)load("glMakeImageHandleResidentNV"); - glad_glMakeImageHandleNonResidentNV = (PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)load("glMakeImageHandleNonResidentNV"); - glad_glUniformHandleui64NV = (PFNGLUNIFORMHANDLEUI64NVPROC)load("glUniformHandleui64NV"); - glad_glUniformHandleui64vNV = (PFNGLUNIFORMHANDLEUI64VNVPROC)load("glUniformHandleui64vNV"); - glad_glProgramUniformHandleui64NV = (PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)load("glProgramUniformHandleui64NV"); - glad_glProgramUniformHandleui64vNV = (PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)load("glProgramUniformHandleui64vNV"); - glad_glIsTextureHandleResidentNV = (PFNGLISTEXTUREHANDLERESIDENTNVPROC)load("glIsTextureHandleResidentNV"); - glad_glIsImageHandleResidentNV = (PFNGLISIMAGEHANDLERESIDENTNVPROC)load("glIsImageHandleResidentNV"); -} -static void load_GL_NV_blend_equation_advanced(GLADloadproc load) { - if(!GLAD_GL_NV_blend_equation_advanced) return; - glad_glBlendParameteriNV = (PFNGLBLENDPARAMETERINVPROC)load("glBlendParameteriNV"); - glad_glBlendBarrierNV = (PFNGLBLENDBARRIERNVPROC)load("glBlendBarrierNV"); -} -static void load_GL_NV_clip_space_w_scaling(GLADloadproc load) { - if(!GLAD_GL_NV_clip_space_w_scaling) return; - glad_glViewportPositionWScaleNV = (PFNGLVIEWPORTPOSITIONWSCALENVPROC)load("glViewportPositionWScaleNV"); -} -static void load_GL_NV_command_list(GLADloadproc load) { - if(!GLAD_GL_NV_command_list) return; - glad_glCreateStatesNV = (PFNGLCREATESTATESNVPROC)load("glCreateStatesNV"); - glad_glDeleteStatesNV = (PFNGLDELETESTATESNVPROC)load("glDeleteStatesNV"); - glad_glIsStateNV = (PFNGLISSTATENVPROC)load("glIsStateNV"); - glad_glStateCaptureNV = (PFNGLSTATECAPTURENVPROC)load("glStateCaptureNV"); - glad_glGetCommandHeaderNV = (PFNGLGETCOMMANDHEADERNVPROC)load("glGetCommandHeaderNV"); - glad_glGetStageIndexNV = (PFNGLGETSTAGEINDEXNVPROC)load("glGetStageIndexNV"); - glad_glDrawCommandsNV = (PFNGLDRAWCOMMANDSNVPROC)load("glDrawCommandsNV"); - glad_glDrawCommandsAddressNV = (PFNGLDRAWCOMMANDSADDRESSNVPROC)load("glDrawCommandsAddressNV"); - glad_glDrawCommandsStatesNV = (PFNGLDRAWCOMMANDSSTATESNVPROC)load("glDrawCommandsStatesNV"); - glad_glDrawCommandsStatesAddressNV = (PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)load("glDrawCommandsStatesAddressNV"); - glad_glCreateCommandListsNV = (PFNGLCREATECOMMANDLISTSNVPROC)load("glCreateCommandListsNV"); - glad_glDeleteCommandListsNV = (PFNGLDELETECOMMANDLISTSNVPROC)load("glDeleteCommandListsNV"); - glad_glIsCommandListNV = (PFNGLISCOMMANDLISTNVPROC)load("glIsCommandListNV"); - glad_glListDrawCommandsStatesClientNV = (PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)load("glListDrawCommandsStatesClientNV"); - glad_glCommandListSegmentsNV = (PFNGLCOMMANDLISTSEGMENTSNVPROC)load("glCommandListSegmentsNV"); - glad_glCompileCommandListNV = (PFNGLCOMPILECOMMANDLISTNVPROC)load("glCompileCommandListNV"); - glad_glCallCommandListNV = (PFNGLCALLCOMMANDLISTNVPROC)load("glCallCommandListNV"); -} -static void load_GL_NV_conditional_render(GLADloadproc load) { - if(!GLAD_GL_NV_conditional_render) return; - glad_glBeginConditionalRenderNV = (PFNGLBEGINCONDITIONALRENDERNVPROC)load("glBeginConditionalRenderNV"); - glad_glEndConditionalRenderNV = (PFNGLENDCONDITIONALRENDERNVPROC)load("glEndConditionalRenderNV"); -} -static void load_GL_NV_conservative_raster(GLADloadproc load) { - if(!GLAD_GL_NV_conservative_raster) return; - glad_glSubpixelPrecisionBiasNV = (PFNGLSUBPIXELPRECISIONBIASNVPROC)load("glSubpixelPrecisionBiasNV"); -} -static void load_GL_NV_conservative_raster_dilate(GLADloadproc load) { - if(!GLAD_GL_NV_conservative_raster_dilate) return; - glad_glConservativeRasterParameterfNV = (PFNGLCONSERVATIVERASTERPARAMETERFNVPROC)load("glConservativeRasterParameterfNV"); -} -static void load_GL_NV_conservative_raster_pre_snap_triangles(GLADloadproc load) { - if(!GLAD_GL_NV_conservative_raster_pre_snap_triangles) return; - glad_glConservativeRasterParameteriNV = (PFNGLCONSERVATIVERASTERPARAMETERINVPROC)load("glConservativeRasterParameteriNV"); -} -static void load_GL_NV_copy_image(GLADloadproc load) { - if(!GLAD_GL_NV_copy_image) return; - glad_glCopyImageSubDataNV = (PFNGLCOPYIMAGESUBDATANVPROC)load("glCopyImageSubDataNV"); -} -static void load_GL_NV_depth_buffer_float(GLADloadproc load) { - if(!GLAD_GL_NV_depth_buffer_float) return; - glad_glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)load("glDepthRangedNV"); - glad_glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)load("glClearDepthdNV"); - glad_glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)load("glDepthBoundsdNV"); -} -static void load_GL_NV_draw_texture(GLADloadproc load) { - if(!GLAD_GL_NV_draw_texture) return; - glad_glDrawTextureNV = (PFNGLDRAWTEXTURENVPROC)load("glDrawTextureNV"); -} -static void load_GL_NV_draw_vulkan_image(GLADloadproc load) { - if(!GLAD_GL_NV_draw_vulkan_image) return; - glad_glDrawVkImageNV = (PFNGLDRAWVKIMAGENVPROC)load("glDrawVkImageNV"); - glad_glGetVkProcAddrNV = (PFNGLGETVKPROCADDRNVPROC)load("glGetVkProcAddrNV"); - glad_glWaitVkSemaphoreNV = (PFNGLWAITVKSEMAPHORENVPROC)load("glWaitVkSemaphoreNV"); - glad_glSignalVkSemaphoreNV = (PFNGLSIGNALVKSEMAPHORENVPROC)load("glSignalVkSemaphoreNV"); - glad_glSignalVkFenceNV = (PFNGLSIGNALVKFENCENVPROC)load("glSignalVkFenceNV"); -} -static void load_GL_NV_evaluators(GLADloadproc load) { - if(!GLAD_GL_NV_evaluators) return; - glad_glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC)load("glMapControlPointsNV"); - glad_glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC)load("glMapParameterivNV"); - glad_glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC)load("glMapParameterfvNV"); - glad_glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC)load("glGetMapControlPointsNV"); - glad_glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC)load("glGetMapParameterivNV"); - glad_glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC)load("glGetMapParameterfvNV"); - glad_glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)load("glGetMapAttribParameterivNV"); - glad_glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)load("glGetMapAttribParameterfvNV"); - glad_glEvalMapsNV = (PFNGLEVALMAPSNVPROC)load("glEvalMapsNV"); -} -static void load_GL_NV_explicit_multisample(GLADloadproc load) { - if(!GLAD_GL_NV_explicit_multisample) return; - glad_glGetMultisamplefvNV = (PFNGLGETMULTISAMPLEFVNVPROC)load("glGetMultisamplefvNV"); - glad_glSampleMaskIndexedNV = (PFNGLSAMPLEMASKINDEXEDNVPROC)load("glSampleMaskIndexedNV"); - glad_glTexRenderbufferNV = (PFNGLTEXRENDERBUFFERNVPROC)load("glTexRenderbufferNV"); -} -static void load_GL_NV_fence(GLADloadproc load) { - if(!GLAD_GL_NV_fence) return; - glad_glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC)load("glDeleteFencesNV"); - glad_glGenFencesNV = (PFNGLGENFENCESNVPROC)load("glGenFencesNV"); - glad_glIsFenceNV = (PFNGLISFENCENVPROC)load("glIsFenceNV"); - glad_glTestFenceNV = (PFNGLTESTFENCENVPROC)load("glTestFenceNV"); - glad_glGetFenceivNV = (PFNGLGETFENCEIVNVPROC)load("glGetFenceivNV"); - glad_glFinishFenceNV = (PFNGLFINISHFENCENVPROC)load("glFinishFenceNV"); - glad_glSetFenceNV = (PFNGLSETFENCENVPROC)load("glSetFenceNV"); -} -static void load_GL_NV_fragment_coverage_to_color(GLADloadproc load) { - if(!GLAD_GL_NV_fragment_coverage_to_color) return; - glad_glFragmentCoverageColorNV = (PFNGLFRAGMENTCOVERAGECOLORNVPROC)load("glFragmentCoverageColorNV"); -} -static void load_GL_NV_fragment_program(GLADloadproc load) { - if(!GLAD_GL_NV_fragment_program) return; - glad_glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)load("glProgramNamedParameter4fNV"); - glad_glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)load("glProgramNamedParameter4fvNV"); - glad_glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)load("glProgramNamedParameter4dNV"); - glad_glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)load("glProgramNamedParameter4dvNV"); - glad_glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)load("glGetProgramNamedParameterfvNV"); - glad_glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)load("glGetProgramNamedParameterdvNV"); -} -static void load_GL_NV_framebuffer_mixed_samples(GLADloadproc load) { - if(!GLAD_GL_NV_framebuffer_mixed_samples) return; - glad_glRasterSamplesEXT = (PFNGLRASTERSAMPLESEXTPROC)load("glRasterSamplesEXT"); - glad_glCoverageModulationTableNV = (PFNGLCOVERAGEMODULATIONTABLENVPROC)load("glCoverageModulationTableNV"); - glad_glGetCoverageModulationTableNV = (PFNGLGETCOVERAGEMODULATIONTABLENVPROC)load("glGetCoverageModulationTableNV"); - glad_glCoverageModulationNV = (PFNGLCOVERAGEMODULATIONNVPROC)load("glCoverageModulationNV"); -} -static void load_GL_NV_framebuffer_multisample_coverage(GLADloadproc load) { - if(!GLAD_GL_NV_framebuffer_multisample_coverage) return; - glad_glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)load("glRenderbufferStorageMultisampleCoverageNV"); -} -static void load_GL_NV_geometry_program4(GLADloadproc load) { - if(!GLAD_GL_NV_geometry_program4) return; - glad_glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC)load("glProgramVertexLimitNV"); - glad_glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)load("glFramebufferTextureEXT"); - glad_glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)load("glFramebufferTextureLayerEXT"); - glad_glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)load("glFramebufferTextureFaceEXT"); -} -static void load_GL_NV_gpu_multicast(GLADloadproc load) { - if(!GLAD_GL_NV_gpu_multicast) return; - glad_glRenderGpuMaskNV = (PFNGLRENDERGPUMASKNVPROC)load("glRenderGpuMaskNV"); - glad_glMulticastBufferSubDataNV = (PFNGLMULTICASTBUFFERSUBDATANVPROC)load("glMulticastBufferSubDataNV"); - glad_glMulticastCopyBufferSubDataNV = (PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC)load("glMulticastCopyBufferSubDataNV"); - glad_glMulticastCopyImageSubDataNV = (PFNGLMULTICASTCOPYIMAGESUBDATANVPROC)load("glMulticastCopyImageSubDataNV"); - glad_glMulticastBlitFramebufferNV = (PFNGLMULTICASTBLITFRAMEBUFFERNVPROC)load("glMulticastBlitFramebufferNV"); - glad_glMulticastFramebufferSampleLocationsfvNV = (PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)load("glMulticastFramebufferSampleLocationsfvNV"); - glad_glMulticastBarrierNV = (PFNGLMULTICASTBARRIERNVPROC)load("glMulticastBarrierNV"); - glad_glMulticastWaitSyncNV = (PFNGLMULTICASTWAITSYNCNVPROC)load("glMulticastWaitSyncNV"); - glad_glMulticastGetQueryObjectivNV = (PFNGLMULTICASTGETQUERYOBJECTIVNVPROC)load("glMulticastGetQueryObjectivNV"); - glad_glMulticastGetQueryObjectuivNV = (PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC)load("glMulticastGetQueryObjectuivNV"); - glad_glMulticastGetQueryObjecti64vNV = (PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC)load("glMulticastGetQueryObjecti64vNV"); - glad_glMulticastGetQueryObjectui64vNV = (PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC)load("glMulticastGetQueryObjectui64vNV"); -} -static void load_GL_NV_gpu_program4(GLADloadproc load) { - if(!GLAD_GL_NV_gpu_program4) return; - glad_glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC)load("glProgramLocalParameterI4iNV"); - glad_glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)load("glProgramLocalParameterI4ivNV"); - glad_glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)load("glProgramLocalParametersI4ivNV"); - glad_glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)load("glProgramLocalParameterI4uiNV"); - glad_glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)load("glProgramLocalParameterI4uivNV"); - glad_glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)load("glProgramLocalParametersI4uivNV"); - glad_glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC)load("glProgramEnvParameterI4iNV"); - glad_glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC)load("glProgramEnvParameterI4ivNV"); - glad_glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)load("glProgramEnvParametersI4ivNV"); - glad_glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC)load("glProgramEnvParameterI4uiNV"); - glad_glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)load("glProgramEnvParameterI4uivNV"); - glad_glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)load("glProgramEnvParametersI4uivNV"); - glad_glGetProgramLocalParameterIivNV = (PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC)load("glGetProgramLocalParameterIivNV"); - glad_glGetProgramLocalParameterIuivNV = (PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC)load("glGetProgramLocalParameterIuivNV"); - glad_glGetProgramEnvParameterIivNV = (PFNGLGETPROGRAMENVPARAMETERIIVNVPROC)load("glGetProgramEnvParameterIivNV"); - glad_glGetProgramEnvParameterIuivNV = (PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC)load("glGetProgramEnvParameterIuivNV"); -} -static void load_GL_NV_gpu_program5(GLADloadproc load) { - if(!GLAD_GL_NV_gpu_program5) return; - glad_glProgramSubroutineParametersuivNV = (PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC)load("glProgramSubroutineParametersuivNV"); - glad_glGetProgramSubroutineParameteruivNV = (PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC)load("glGetProgramSubroutineParameteruivNV"); -} -static void load_GL_NV_gpu_shader5(GLADloadproc load) { - if(!GLAD_GL_NV_gpu_shader5) return; - glad_glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC)load("glUniform1i64NV"); - glad_glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC)load("glUniform2i64NV"); - glad_glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC)load("glUniform3i64NV"); - glad_glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC)load("glUniform4i64NV"); - glad_glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC)load("glUniform1i64vNV"); - glad_glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC)load("glUniform2i64vNV"); - glad_glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC)load("glUniform3i64vNV"); - glad_glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC)load("glUniform4i64vNV"); - glad_glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC)load("glUniform1ui64NV"); - glad_glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC)load("glUniform2ui64NV"); - glad_glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC)load("glUniform3ui64NV"); - glad_glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC)load("glUniform4ui64NV"); - glad_glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC)load("glUniform1ui64vNV"); - glad_glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC)load("glUniform2ui64vNV"); - glad_glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC)load("glUniform3ui64vNV"); - glad_glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC)load("glUniform4ui64vNV"); - glad_glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC)load("glGetUniformi64vNV"); - glad_glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC)load("glProgramUniform1i64NV"); - glad_glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC)load("glProgramUniform2i64NV"); - glad_glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC)load("glProgramUniform3i64NV"); - glad_glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC)load("glProgramUniform4i64NV"); - glad_glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC)load("glProgramUniform1i64vNV"); - glad_glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC)load("glProgramUniform2i64vNV"); - glad_glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC)load("glProgramUniform3i64vNV"); - glad_glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC)load("glProgramUniform4i64vNV"); - glad_glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC)load("glProgramUniform1ui64NV"); - glad_glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC)load("glProgramUniform2ui64NV"); - glad_glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC)load("glProgramUniform3ui64NV"); - glad_glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC)load("glProgramUniform4ui64NV"); - glad_glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC)load("glProgramUniform1ui64vNV"); - glad_glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC)load("glProgramUniform2ui64vNV"); - glad_glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC)load("glProgramUniform3ui64vNV"); - glad_glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC)load("glProgramUniform4ui64vNV"); -} -static void load_GL_NV_half_float(GLADloadproc load) { - if(!GLAD_GL_NV_half_float) return; - glad_glVertex2hNV = (PFNGLVERTEX2HNVPROC)load("glVertex2hNV"); - glad_glVertex2hvNV = (PFNGLVERTEX2HVNVPROC)load("glVertex2hvNV"); - glad_glVertex3hNV = (PFNGLVERTEX3HNVPROC)load("glVertex3hNV"); - glad_glVertex3hvNV = (PFNGLVERTEX3HVNVPROC)load("glVertex3hvNV"); - glad_glVertex4hNV = (PFNGLVERTEX4HNVPROC)load("glVertex4hNV"); - glad_glVertex4hvNV = (PFNGLVERTEX4HVNVPROC)load("glVertex4hvNV"); - glad_glNormal3hNV = (PFNGLNORMAL3HNVPROC)load("glNormal3hNV"); - glad_glNormal3hvNV = (PFNGLNORMAL3HVNVPROC)load("glNormal3hvNV"); - glad_glColor3hNV = (PFNGLCOLOR3HNVPROC)load("glColor3hNV"); - glad_glColor3hvNV = (PFNGLCOLOR3HVNVPROC)load("glColor3hvNV"); - glad_glColor4hNV = (PFNGLCOLOR4HNVPROC)load("glColor4hNV"); - glad_glColor4hvNV = (PFNGLCOLOR4HVNVPROC)load("glColor4hvNV"); - glad_glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC)load("glTexCoord1hNV"); - glad_glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC)load("glTexCoord1hvNV"); - glad_glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC)load("glTexCoord2hNV"); - glad_glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC)load("glTexCoord2hvNV"); - glad_glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC)load("glTexCoord3hNV"); - glad_glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC)load("glTexCoord3hvNV"); - glad_glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC)load("glTexCoord4hNV"); - glad_glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC)load("glTexCoord4hvNV"); - glad_glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC)load("glMultiTexCoord1hNV"); - glad_glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC)load("glMultiTexCoord1hvNV"); - glad_glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC)load("glMultiTexCoord2hNV"); - glad_glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC)load("glMultiTexCoord2hvNV"); - glad_glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC)load("glMultiTexCoord3hNV"); - glad_glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC)load("glMultiTexCoord3hvNV"); - glad_glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC)load("glMultiTexCoord4hNV"); - glad_glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC)load("glMultiTexCoord4hvNV"); - glad_glFogCoordhNV = (PFNGLFOGCOORDHNVPROC)load("glFogCoordhNV"); - glad_glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC)load("glFogCoordhvNV"); - glad_glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC)load("glSecondaryColor3hNV"); - glad_glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC)load("glSecondaryColor3hvNV"); - glad_glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC)load("glVertexWeighthNV"); - glad_glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC)load("glVertexWeighthvNV"); - glad_glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC)load("glVertexAttrib1hNV"); - glad_glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC)load("glVertexAttrib1hvNV"); - glad_glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC)load("glVertexAttrib2hNV"); - glad_glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC)load("glVertexAttrib2hvNV"); - glad_glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC)load("glVertexAttrib3hNV"); - glad_glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC)load("glVertexAttrib3hvNV"); - glad_glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC)load("glVertexAttrib4hNV"); - glad_glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC)load("glVertexAttrib4hvNV"); - glad_glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC)load("glVertexAttribs1hvNV"); - glad_glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC)load("glVertexAttribs2hvNV"); - glad_glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC)load("glVertexAttribs3hvNV"); - glad_glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC)load("glVertexAttribs4hvNV"); -} -static void load_GL_NV_internalformat_sample_query(GLADloadproc load) { - if(!GLAD_GL_NV_internalformat_sample_query) return; - glad_glGetInternalformatSampleivNV = (PFNGLGETINTERNALFORMATSAMPLEIVNVPROC)load("glGetInternalformatSampleivNV"); -} -static void load_GL_NV_occlusion_query(GLADloadproc load) { - if(!GLAD_GL_NV_occlusion_query) return; - glad_glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC)load("glGenOcclusionQueriesNV"); - glad_glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC)load("glDeleteOcclusionQueriesNV"); - glad_glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC)load("glIsOcclusionQueryNV"); - glad_glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC)load("glBeginOcclusionQueryNV"); - glad_glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC)load("glEndOcclusionQueryNV"); - glad_glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC)load("glGetOcclusionQueryivNV"); - glad_glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC)load("glGetOcclusionQueryuivNV"); -} -static void load_GL_NV_parameter_buffer_object(GLADloadproc load) { - if(!GLAD_GL_NV_parameter_buffer_object) return; - glad_glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)load("glProgramBufferParametersfvNV"); - glad_glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)load("glProgramBufferParametersIivNV"); - glad_glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)load("glProgramBufferParametersIuivNV"); -} -static void load_GL_NV_path_rendering(GLADloadproc load) { - if(!GLAD_GL_NV_path_rendering) return; - glad_glGenPathsNV = (PFNGLGENPATHSNVPROC)load("glGenPathsNV"); - glad_glDeletePathsNV = (PFNGLDELETEPATHSNVPROC)load("glDeletePathsNV"); - glad_glIsPathNV = (PFNGLISPATHNVPROC)load("glIsPathNV"); - glad_glPathCommandsNV = (PFNGLPATHCOMMANDSNVPROC)load("glPathCommandsNV"); - glad_glPathCoordsNV = (PFNGLPATHCOORDSNVPROC)load("glPathCoordsNV"); - glad_glPathSubCommandsNV = (PFNGLPATHSUBCOMMANDSNVPROC)load("glPathSubCommandsNV"); - glad_glPathSubCoordsNV = (PFNGLPATHSUBCOORDSNVPROC)load("glPathSubCoordsNV"); - glad_glPathStringNV = (PFNGLPATHSTRINGNVPROC)load("glPathStringNV"); - glad_glPathGlyphsNV = (PFNGLPATHGLYPHSNVPROC)load("glPathGlyphsNV"); - glad_glPathGlyphRangeNV = (PFNGLPATHGLYPHRANGENVPROC)load("glPathGlyphRangeNV"); - glad_glWeightPathsNV = (PFNGLWEIGHTPATHSNVPROC)load("glWeightPathsNV"); - glad_glCopyPathNV = (PFNGLCOPYPATHNVPROC)load("glCopyPathNV"); - glad_glInterpolatePathsNV = (PFNGLINTERPOLATEPATHSNVPROC)load("glInterpolatePathsNV"); - glad_glTransformPathNV = (PFNGLTRANSFORMPATHNVPROC)load("glTransformPathNV"); - glad_glPathParameterivNV = (PFNGLPATHPARAMETERIVNVPROC)load("glPathParameterivNV"); - glad_glPathParameteriNV = (PFNGLPATHPARAMETERINVPROC)load("glPathParameteriNV"); - glad_glPathParameterfvNV = (PFNGLPATHPARAMETERFVNVPROC)load("glPathParameterfvNV"); - glad_glPathParameterfNV = (PFNGLPATHPARAMETERFNVPROC)load("glPathParameterfNV"); - glad_glPathDashArrayNV = (PFNGLPATHDASHARRAYNVPROC)load("glPathDashArrayNV"); - glad_glPathStencilFuncNV = (PFNGLPATHSTENCILFUNCNVPROC)load("glPathStencilFuncNV"); - glad_glPathStencilDepthOffsetNV = (PFNGLPATHSTENCILDEPTHOFFSETNVPROC)load("glPathStencilDepthOffsetNV"); - glad_glStencilFillPathNV = (PFNGLSTENCILFILLPATHNVPROC)load("glStencilFillPathNV"); - glad_glStencilStrokePathNV = (PFNGLSTENCILSTROKEPATHNVPROC)load("glStencilStrokePathNV"); - glad_glStencilFillPathInstancedNV = (PFNGLSTENCILFILLPATHINSTANCEDNVPROC)load("glStencilFillPathInstancedNV"); - glad_glStencilStrokePathInstancedNV = (PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)load("glStencilStrokePathInstancedNV"); - glad_glPathCoverDepthFuncNV = (PFNGLPATHCOVERDEPTHFUNCNVPROC)load("glPathCoverDepthFuncNV"); - glad_glCoverFillPathNV = (PFNGLCOVERFILLPATHNVPROC)load("glCoverFillPathNV"); - glad_glCoverStrokePathNV = (PFNGLCOVERSTROKEPATHNVPROC)load("glCoverStrokePathNV"); - glad_glCoverFillPathInstancedNV = (PFNGLCOVERFILLPATHINSTANCEDNVPROC)load("glCoverFillPathInstancedNV"); - glad_glCoverStrokePathInstancedNV = (PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)load("glCoverStrokePathInstancedNV"); - glad_glGetPathParameterivNV = (PFNGLGETPATHPARAMETERIVNVPROC)load("glGetPathParameterivNV"); - glad_glGetPathParameterfvNV = (PFNGLGETPATHPARAMETERFVNVPROC)load("glGetPathParameterfvNV"); - glad_glGetPathCommandsNV = (PFNGLGETPATHCOMMANDSNVPROC)load("glGetPathCommandsNV"); - glad_glGetPathCoordsNV = (PFNGLGETPATHCOORDSNVPROC)load("glGetPathCoordsNV"); - glad_glGetPathDashArrayNV = (PFNGLGETPATHDASHARRAYNVPROC)load("glGetPathDashArrayNV"); - glad_glGetPathMetricsNV = (PFNGLGETPATHMETRICSNVPROC)load("glGetPathMetricsNV"); - glad_glGetPathMetricRangeNV = (PFNGLGETPATHMETRICRANGENVPROC)load("glGetPathMetricRangeNV"); - glad_glGetPathSpacingNV = (PFNGLGETPATHSPACINGNVPROC)load("glGetPathSpacingNV"); - glad_glIsPointInFillPathNV = (PFNGLISPOINTINFILLPATHNVPROC)load("glIsPointInFillPathNV"); - glad_glIsPointInStrokePathNV = (PFNGLISPOINTINSTROKEPATHNVPROC)load("glIsPointInStrokePathNV"); - glad_glGetPathLengthNV = (PFNGLGETPATHLENGTHNVPROC)load("glGetPathLengthNV"); - glad_glPointAlongPathNV = (PFNGLPOINTALONGPATHNVPROC)load("glPointAlongPathNV"); - glad_glMatrixLoad3x2fNV = (PFNGLMATRIXLOAD3X2FNVPROC)load("glMatrixLoad3x2fNV"); - glad_glMatrixLoad3x3fNV = (PFNGLMATRIXLOAD3X3FNVPROC)load("glMatrixLoad3x3fNV"); - glad_glMatrixLoadTranspose3x3fNV = (PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC)load("glMatrixLoadTranspose3x3fNV"); - glad_glMatrixMult3x2fNV = (PFNGLMATRIXMULT3X2FNVPROC)load("glMatrixMult3x2fNV"); - glad_glMatrixMult3x3fNV = (PFNGLMATRIXMULT3X3FNVPROC)load("glMatrixMult3x3fNV"); - glad_glMatrixMultTranspose3x3fNV = (PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC)load("glMatrixMultTranspose3x3fNV"); - glad_glStencilThenCoverFillPathNV = (PFNGLSTENCILTHENCOVERFILLPATHNVPROC)load("glStencilThenCoverFillPathNV"); - glad_glStencilThenCoverStrokePathNV = (PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC)load("glStencilThenCoverStrokePathNV"); - glad_glStencilThenCoverFillPathInstancedNV = (PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC)load("glStencilThenCoverFillPathInstancedNV"); - glad_glStencilThenCoverStrokePathInstancedNV = (PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC)load("glStencilThenCoverStrokePathInstancedNV"); - glad_glPathGlyphIndexRangeNV = (PFNGLPATHGLYPHINDEXRANGENVPROC)load("glPathGlyphIndexRangeNV"); - glad_glPathGlyphIndexArrayNV = (PFNGLPATHGLYPHINDEXARRAYNVPROC)load("glPathGlyphIndexArrayNV"); - glad_glPathMemoryGlyphIndexArrayNV = (PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC)load("glPathMemoryGlyphIndexArrayNV"); - glad_glProgramPathFragmentInputGenNV = (PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC)load("glProgramPathFragmentInputGenNV"); - glad_glGetProgramResourcefvNV = (PFNGLGETPROGRAMRESOURCEFVNVPROC)load("glGetProgramResourcefvNV"); - glad_glPathColorGenNV = (PFNGLPATHCOLORGENNVPROC)load("glPathColorGenNV"); - glad_glPathTexGenNV = (PFNGLPATHTEXGENNVPROC)load("glPathTexGenNV"); - glad_glPathFogGenNV = (PFNGLPATHFOGGENNVPROC)load("glPathFogGenNV"); - glad_glGetPathColorGenivNV = (PFNGLGETPATHCOLORGENIVNVPROC)load("glGetPathColorGenivNV"); - glad_glGetPathColorGenfvNV = (PFNGLGETPATHCOLORGENFVNVPROC)load("glGetPathColorGenfvNV"); - glad_glGetPathTexGenivNV = (PFNGLGETPATHTEXGENIVNVPROC)load("glGetPathTexGenivNV"); - glad_glGetPathTexGenfvNV = (PFNGLGETPATHTEXGENFVNVPROC)load("glGetPathTexGenfvNV"); - glad_glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC)load("glMatrixFrustumEXT"); - glad_glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC)load("glMatrixLoadIdentityEXT"); - glad_glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC)load("glMatrixLoadTransposefEXT"); - glad_glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC)load("glMatrixLoadTransposedEXT"); - glad_glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC)load("glMatrixLoadfEXT"); - glad_glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC)load("glMatrixLoaddEXT"); - glad_glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC)load("glMatrixMultTransposefEXT"); - glad_glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC)load("glMatrixMultTransposedEXT"); - glad_glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC)load("glMatrixMultfEXT"); - glad_glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC)load("glMatrixMultdEXT"); - glad_glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC)load("glMatrixOrthoEXT"); - glad_glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC)load("glMatrixPopEXT"); - glad_glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC)load("glMatrixPushEXT"); - glad_glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC)load("glMatrixRotatefEXT"); - glad_glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC)load("glMatrixRotatedEXT"); - glad_glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC)load("glMatrixScalefEXT"); - glad_glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC)load("glMatrixScaledEXT"); - glad_glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC)load("glMatrixTranslatefEXT"); - glad_glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC)load("glMatrixTranslatedEXT"); -} -static void load_GL_NV_pixel_data_range(GLADloadproc load) { - if(!GLAD_GL_NV_pixel_data_range) return; - glad_glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC)load("glPixelDataRangeNV"); - glad_glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC)load("glFlushPixelDataRangeNV"); -} -static void load_GL_NV_point_sprite(GLADloadproc load) { - if(!GLAD_GL_NV_point_sprite) return; - glad_glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC)load("glPointParameteriNV"); - glad_glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC)load("glPointParameterivNV"); -} -static void load_GL_NV_present_video(GLADloadproc load) { - if(!GLAD_GL_NV_present_video) return; - glad_glPresentFrameKeyedNV = (PFNGLPRESENTFRAMEKEYEDNVPROC)load("glPresentFrameKeyedNV"); - glad_glPresentFrameDualFillNV = (PFNGLPRESENTFRAMEDUALFILLNVPROC)load("glPresentFrameDualFillNV"); - glad_glGetVideoivNV = (PFNGLGETVIDEOIVNVPROC)load("glGetVideoivNV"); - glad_glGetVideouivNV = (PFNGLGETVIDEOUIVNVPROC)load("glGetVideouivNV"); - glad_glGetVideoi64vNV = (PFNGLGETVIDEOI64VNVPROC)load("glGetVideoi64vNV"); - glad_glGetVideoui64vNV = (PFNGLGETVIDEOUI64VNVPROC)load("glGetVideoui64vNV"); -} -static void load_GL_NV_primitive_restart(GLADloadproc load) { - if(!GLAD_GL_NV_primitive_restart) return; - glad_glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC)load("glPrimitiveRestartNV"); - glad_glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC)load("glPrimitiveRestartIndexNV"); -} -static void load_GL_NV_query_resource(GLADloadproc load) { - if(!GLAD_GL_NV_query_resource) return; - glad_glQueryResourceNV = (PFNGLQUERYRESOURCENVPROC)load("glQueryResourceNV"); -} -static void load_GL_NV_query_resource_tag(GLADloadproc load) { - if(!GLAD_GL_NV_query_resource_tag) return; - glad_glGenQueryResourceTagNV = (PFNGLGENQUERYRESOURCETAGNVPROC)load("glGenQueryResourceTagNV"); - glad_glDeleteQueryResourceTagNV = (PFNGLDELETEQUERYRESOURCETAGNVPROC)load("glDeleteQueryResourceTagNV"); - glad_glQueryResourceTagNV = (PFNGLQUERYRESOURCETAGNVPROC)load("glQueryResourceTagNV"); -} -static void load_GL_NV_register_combiners(GLADloadproc load) { - if(!GLAD_GL_NV_register_combiners) return; - glad_glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC)load("glCombinerParameterfvNV"); - glad_glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC)load("glCombinerParameterfNV"); - glad_glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC)load("glCombinerParameterivNV"); - glad_glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC)load("glCombinerParameteriNV"); - glad_glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC)load("glCombinerInputNV"); - glad_glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC)load("glCombinerOutputNV"); - glad_glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC)load("glFinalCombinerInputNV"); - glad_glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)load("glGetCombinerInputParameterfvNV"); - glad_glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)load("glGetCombinerInputParameterivNV"); - glad_glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)load("glGetCombinerOutputParameterfvNV"); - glad_glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)load("glGetCombinerOutputParameterivNV"); - glad_glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)load("glGetFinalCombinerInputParameterfvNV"); - glad_glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)load("glGetFinalCombinerInputParameterivNV"); -} -static void load_GL_NV_register_combiners2(GLADloadproc load) { - if(!GLAD_GL_NV_register_combiners2) return; - glad_glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)load("glCombinerStageParameterfvNV"); - glad_glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)load("glGetCombinerStageParameterfvNV"); -} -static void load_GL_NV_sample_locations(GLADloadproc load) { - if(!GLAD_GL_NV_sample_locations) return; - glad_glFramebufferSampleLocationsfvNV = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)load("glFramebufferSampleLocationsfvNV"); - glad_glNamedFramebufferSampleLocationsfvNV = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)load("glNamedFramebufferSampleLocationsfvNV"); - glad_glResolveDepthValuesNV = (PFNGLRESOLVEDEPTHVALUESNVPROC)load("glResolveDepthValuesNV"); -} -static void load_GL_NV_shader_buffer_load(GLADloadproc load) { - if(!GLAD_GL_NV_shader_buffer_load) return; - glad_glMakeBufferResidentNV = (PFNGLMAKEBUFFERRESIDENTNVPROC)load("glMakeBufferResidentNV"); - glad_glMakeBufferNonResidentNV = (PFNGLMAKEBUFFERNONRESIDENTNVPROC)load("glMakeBufferNonResidentNV"); - glad_glIsBufferResidentNV = (PFNGLISBUFFERRESIDENTNVPROC)load("glIsBufferResidentNV"); - glad_glMakeNamedBufferResidentNV = (PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)load("glMakeNamedBufferResidentNV"); - glad_glMakeNamedBufferNonResidentNV = (PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)load("glMakeNamedBufferNonResidentNV"); - glad_glIsNamedBufferResidentNV = (PFNGLISNAMEDBUFFERRESIDENTNVPROC)load("glIsNamedBufferResidentNV"); - glad_glGetBufferParameterui64vNV = (PFNGLGETBUFFERPARAMETERUI64VNVPROC)load("glGetBufferParameterui64vNV"); - glad_glGetNamedBufferParameterui64vNV = (PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)load("glGetNamedBufferParameterui64vNV"); - glad_glGetIntegerui64vNV = (PFNGLGETINTEGERUI64VNVPROC)load("glGetIntegerui64vNV"); - glad_glUniformui64NV = (PFNGLUNIFORMUI64NVPROC)load("glUniformui64NV"); - glad_glUniformui64vNV = (PFNGLUNIFORMUI64VNVPROC)load("glUniformui64vNV"); - glad_glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC)load("glGetUniformui64vNV"); - glad_glProgramUniformui64NV = (PFNGLPROGRAMUNIFORMUI64NVPROC)load("glProgramUniformui64NV"); - glad_glProgramUniformui64vNV = (PFNGLPROGRAMUNIFORMUI64VNVPROC)load("glProgramUniformui64vNV"); -} -static void load_GL_NV_texture_barrier(GLADloadproc load) { - if(!GLAD_GL_NV_texture_barrier) return; - glad_glTextureBarrierNV = (PFNGLTEXTUREBARRIERNVPROC)load("glTextureBarrierNV"); -} -static void load_GL_NV_texture_multisample(GLADloadproc load) { - if(!GLAD_GL_NV_texture_multisample) return; - glad_glTexImage2DMultisampleCoverageNV = (PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)load("glTexImage2DMultisampleCoverageNV"); - glad_glTexImage3DMultisampleCoverageNV = (PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)load("glTexImage3DMultisampleCoverageNV"); - glad_glTextureImage2DMultisampleNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)load("glTextureImage2DMultisampleNV"); - glad_glTextureImage3DMultisampleNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)load("glTextureImage3DMultisampleNV"); - glad_glTextureImage2DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)load("glTextureImage2DMultisampleCoverageNV"); - glad_glTextureImage3DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)load("glTextureImage3DMultisampleCoverageNV"); -} -static void load_GL_NV_transform_feedback(GLADloadproc load) { - if(!GLAD_GL_NV_transform_feedback) return; - glad_glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC)load("glBeginTransformFeedbackNV"); - glad_glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC)load("glEndTransformFeedbackNV"); - glad_glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)load("glTransformFeedbackAttribsNV"); - glad_glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC)load("glBindBufferRangeNV"); - glad_glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC)load("glBindBufferOffsetNV"); - glad_glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC)load("glBindBufferBaseNV"); - glad_glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)load("glTransformFeedbackVaryingsNV"); - glad_glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC)load("glActiveVaryingNV"); - glad_glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC)load("glGetVaryingLocationNV"); - glad_glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC)load("glGetActiveVaryingNV"); - glad_glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)load("glGetTransformFeedbackVaryingNV"); - glad_glTransformFeedbackStreamAttribsNV = (PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC)load("glTransformFeedbackStreamAttribsNV"); -} -static void load_GL_NV_transform_feedback2(GLADloadproc load) { - if(!GLAD_GL_NV_transform_feedback2) return; - glad_glBindTransformFeedbackNV = (PFNGLBINDTRANSFORMFEEDBACKNVPROC)load("glBindTransformFeedbackNV"); - glad_glDeleteTransformFeedbacksNV = (PFNGLDELETETRANSFORMFEEDBACKSNVPROC)load("glDeleteTransformFeedbacksNV"); - glad_glGenTransformFeedbacksNV = (PFNGLGENTRANSFORMFEEDBACKSNVPROC)load("glGenTransformFeedbacksNV"); - glad_glIsTransformFeedbackNV = (PFNGLISTRANSFORMFEEDBACKNVPROC)load("glIsTransformFeedbackNV"); - glad_glPauseTransformFeedbackNV = (PFNGLPAUSETRANSFORMFEEDBACKNVPROC)load("glPauseTransformFeedbackNV"); - glad_glResumeTransformFeedbackNV = (PFNGLRESUMETRANSFORMFEEDBACKNVPROC)load("glResumeTransformFeedbackNV"); - glad_glDrawTransformFeedbackNV = (PFNGLDRAWTRANSFORMFEEDBACKNVPROC)load("glDrawTransformFeedbackNV"); -} -static void load_GL_NV_vdpau_interop(GLADloadproc load) { - if(!GLAD_GL_NV_vdpau_interop) return; - glad_glVDPAUInitNV = (PFNGLVDPAUINITNVPROC)load("glVDPAUInitNV"); - glad_glVDPAUFiniNV = (PFNGLVDPAUFININVPROC)load("glVDPAUFiniNV"); - glad_glVDPAURegisterVideoSurfaceNV = (PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)load("glVDPAURegisterVideoSurfaceNV"); - glad_glVDPAURegisterOutputSurfaceNV = (PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)load("glVDPAURegisterOutputSurfaceNV"); - glad_glVDPAUIsSurfaceNV = (PFNGLVDPAUISSURFACENVPROC)load("glVDPAUIsSurfaceNV"); - glad_glVDPAUUnregisterSurfaceNV = (PFNGLVDPAUUNREGISTERSURFACENVPROC)load("glVDPAUUnregisterSurfaceNV"); - glad_glVDPAUGetSurfaceivNV = (PFNGLVDPAUGETSURFACEIVNVPROC)load("glVDPAUGetSurfaceivNV"); - glad_glVDPAUSurfaceAccessNV = (PFNGLVDPAUSURFACEACCESSNVPROC)load("glVDPAUSurfaceAccessNV"); - glad_glVDPAUMapSurfacesNV = (PFNGLVDPAUMAPSURFACESNVPROC)load("glVDPAUMapSurfacesNV"); - glad_glVDPAUUnmapSurfacesNV = (PFNGLVDPAUUNMAPSURFACESNVPROC)load("glVDPAUUnmapSurfacesNV"); -} -static void load_GL_NV_vertex_array_range(GLADloadproc load) { - if(!GLAD_GL_NV_vertex_array_range) return; - glad_glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)load("glFlushVertexArrayRangeNV"); - glad_glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC)load("glVertexArrayRangeNV"); -} -static void load_GL_NV_vertex_attrib_integer_64bit(GLADloadproc load) { - if(!GLAD_GL_NV_vertex_attrib_integer_64bit) return; - glad_glVertexAttribL1i64NV = (PFNGLVERTEXATTRIBL1I64NVPROC)load("glVertexAttribL1i64NV"); - glad_glVertexAttribL2i64NV = (PFNGLVERTEXATTRIBL2I64NVPROC)load("glVertexAttribL2i64NV"); - glad_glVertexAttribL3i64NV = (PFNGLVERTEXATTRIBL3I64NVPROC)load("glVertexAttribL3i64NV"); - glad_glVertexAttribL4i64NV = (PFNGLVERTEXATTRIBL4I64NVPROC)load("glVertexAttribL4i64NV"); - glad_glVertexAttribL1i64vNV = (PFNGLVERTEXATTRIBL1I64VNVPROC)load("glVertexAttribL1i64vNV"); - glad_glVertexAttribL2i64vNV = (PFNGLVERTEXATTRIBL2I64VNVPROC)load("glVertexAttribL2i64vNV"); - glad_glVertexAttribL3i64vNV = (PFNGLVERTEXATTRIBL3I64VNVPROC)load("glVertexAttribL3i64vNV"); - glad_glVertexAttribL4i64vNV = (PFNGLVERTEXATTRIBL4I64VNVPROC)load("glVertexAttribL4i64vNV"); - glad_glVertexAttribL1ui64NV = (PFNGLVERTEXATTRIBL1UI64NVPROC)load("glVertexAttribL1ui64NV"); - glad_glVertexAttribL2ui64NV = (PFNGLVERTEXATTRIBL2UI64NVPROC)load("glVertexAttribL2ui64NV"); - glad_glVertexAttribL3ui64NV = (PFNGLVERTEXATTRIBL3UI64NVPROC)load("glVertexAttribL3ui64NV"); - glad_glVertexAttribL4ui64NV = (PFNGLVERTEXATTRIBL4UI64NVPROC)load("glVertexAttribL4ui64NV"); - glad_glVertexAttribL1ui64vNV = (PFNGLVERTEXATTRIBL1UI64VNVPROC)load("glVertexAttribL1ui64vNV"); - glad_glVertexAttribL2ui64vNV = (PFNGLVERTEXATTRIBL2UI64VNVPROC)load("glVertexAttribL2ui64vNV"); - glad_glVertexAttribL3ui64vNV = (PFNGLVERTEXATTRIBL3UI64VNVPROC)load("glVertexAttribL3ui64vNV"); - glad_glVertexAttribL4ui64vNV = (PFNGLVERTEXATTRIBL4UI64VNVPROC)load("glVertexAttribL4ui64vNV"); - glad_glGetVertexAttribLi64vNV = (PFNGLGETVERTEXATTRIBLI64VNVPROC)load("glGetVertexAttribLi64vNV"); - glad_glGetVertexAttribLui64vNV = (PFNGLGETVERTEXATTRIBLUI64VNVPROC)load("glGetVertexAttribLui64vNV"); - glad_glVertexAttribLFormatNV = (PFNGLVERTEXATTRIBLFORMATNVPROC)load("glVertexAttribLFormatNV"); -} -static void load_GL_NV_vertex_buffer_unified_memory(GLADloadproc load) { - if(!GLAD_GL_NV_vertex_buffer_unified_memory) return; - glad_glBufferAddressRangeNV = (PFNGLBUFFERADDRESSRANGENVPROC)load("glBufferAddressRangeNV"); - glad_glVertexFormatNV = (PFNGLVERTEXFORMATNVPROC)load("glVertexFormatNV"); - glad_glNormalFormatNV = (PFNGLNORMALFORMATNVPROC)load("glNormalFormatNV"); - glad_glColorFormatNV = (PFNGLCOLORFORMATNVPROC)load("glColorFormatNV"); - glad_glIndexFormatNV = (PFNGLINDEXFORMATNVPROC)load("glIndexFormatNV"); - glad_glTexCoordFormatNV = (PFNGLTEXCOORDFORMATNVPROC)load("glTexCoordFormatNV"); - glad_glEdgeFlagFormatNV = (PFNGLEDGEFLAGFORMATNVPROC)load("glEdgeFlagFormatNV"); - glad_glSecondaryColorFormatNV = (PFNGLSECONDARYCOLORFORMATNVPROC)load("glSecondaryColorFormatNV"); - glad_glFogCoordFormatNV = (PFNGLFOGCOORDFORMATNVPROC)load("glFogCoordFormatNV"); - glad_glVertexAttribFormatNV = (PFNGLVERTEXATTRIBFORMATNVPROC)load("glVertexAttribFormatNV"); - glad_glVertexAttribIFormatNV = (PFNGLVERTEXATTRIBIFORMATNVPROC)load("glVertexAttribIFormatNV"); - glad_glGetIntegerui64i_vNV = (PFNGLGETINTEGERUI64I_VNVPROC)load("glGetIntegerui64i_vNV"); -} -static void load_GL_NV_vertex_program(GLADloadproc load) { - if(!GLAD_GL_NV_vertex_program) return; - glad_glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC)load("glAreProgramsResidentNV"); - glad_glBindProgramNV = (PFNGLBINDPROGRAMNVPROC)load("glBindProgramNV"); - glad_glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC)load("glDeleteProgramsNV"); - glad_glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC)load("glExecuteProgramNV"); - glad_glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC)load("glGenProgramsNV"); - glad_glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC)load("glGetProgramParameterdvNV"); - glad_glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC)load("glGetProgramParameterfvNV"); - glad_glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC)load("glGetProgramivNV"); - glad_glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC)load("glGetProgramStringNV"); - glad_glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC)load("glGetTrackMatrixivNV"); - glad_glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC)load("glGetVertexAttribdvNV"); - glad_glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC)load("glGetVertexAttribfvNV"); - glad_glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC)load("glGetVertexAttribivNV"); - glad_glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)load("glGetVertexAttribPointervNV"); - glad_glIsProgramNV = (PFNGLISPROGRAMNVPROC)load("glIsProgramNV"); - glad_glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC)load("glLoadProgramNV"); - glad_glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC)load("glProgramParameter4dNV"); - glad_glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC)load("glProgramParameter4dvNV"); - glad_glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC)load("glProgramParameter4fNV"); - glad_glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC)load("glProgramParameter4fvNV"); - glad_glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC)load("glProgramParameters4dvNV"); - glad_glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC)load("glProgramParameters4fvNV"); - glad_glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)load("glRequestResidentProgramsNV"); - glad_glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC)load("glTrackMatrixNV"); - glad_glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC)load("glVertexAttribPointerNV"); - glad_glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC)load("glVertexAttrib1dNV"); - glad_glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC)load("glVertexAttrib1dvNV"); - glad_glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC)load("glVertexAttrib1fNV"); - glad_glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC)load("glVertexAttrib1fvNV"); - glad_glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC)load("glVertexAttrib1sNV"); - glad_glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC)load("glVertexAttrib1svNV"); - glad_glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC)load("glVertexAttrib2dNV"); - glad_glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC)load("glVertexAttrib2dvNV"); - glad_glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC)load("glVertexAttrib2fNV"); - glad_glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC)load("glVertexAttrib2fvNV"); - glad_glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC)load("glVertexAttrib2sNV"); - glad_glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC)load("glVertexAttrib2svNV"); - glad_glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC)load("glVertexAttrib3dNV"); - glad_glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC)load("glVertexAttrib3dvNV"); - glad_glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC)load("glVertexAttrib3fNV"); - glad_glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC)load("glVertexAttrib3fvNV"); - glad_glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC)load("glVertexAttrib3sNV"); - glad_glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC)load("glVertexAttrib3svNV"); - glad_glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC)load("glVertexAttrib4dNV"); - glad_glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC)load("glVertexAttrib4dvNV"); - glad_glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC)load("glVertexAttrib4fNV"); - glad_glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC)load("glVertexAttrib4fvNV"); - glad_glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC)load("glVertexAttrib4sNV"); - glad_glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC)load("glVertexAttrib4svNV"); - glad_glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC)load("glVertexAttrib4ubNV"); - glad_glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC)load("glVertexAttrib4ubvNV"); - glad_glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC)load("glVertexAttribs1dvNV"); - glad_glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC)load("glVertexAttribs1fvNV"); - glad_glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC)load("glVertexAttribs1svNV"); - glad_glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC)load("glVertexAttribs2dvNV"); - glad_glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC)load("glVertexAttribs2fvNV"); - glad_glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC)load("glVertexAttribs2svNV"); - glad_glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC)load("glVertexAttribs3dvNV"); - glad_glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC)load("glVertexAttribs3fvNV"); - glad_glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC)load("glVertexAttribs3svNV"); - glad_glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC)load("glVertexAttribs4dvNV"); - glad_glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC)load("glVertexAttribs4fvNV"); - glad_glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC)load("glVertexAttribs4svNV"); - glad_glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC)load("glVertexAttribs4ubvNV"); -} -static void load_GL_NV_vertex_program4(GLADloadproc load) { - if(!GLAD_GL_NV_vertex_program4) return; - glad_glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC)load("glVertexAttribI1iEXT"); - glad_glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC)load("glVertexAttribI2iEXT"); - glad_glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC)load("glVertexAttribI3iEXT"); - glad_glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC)load("glVertexAttribI4iEXT"); - glad_glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC)load("glVertexAttribI1uiEXT"); - glad_glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC)load("glVertexAttribI2uiEXT"); - glad_glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC)load("glVertexAttribI3uiEXT"); - glad_glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC)load("glVertexAttribI4uiEXT"); - glad_glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC)load("glVertexAttribI1ivEXT"); - glad_glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC)load("glVertexAttribI2ivEXT"); - glad_glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC)load("glVertexAttribI3ivEXT"); - glad_glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC)load("glVertexAttribI4ivEXT"); - glad_glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC)load("glVertexAttribI1uivEXT"); - glad_glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC)load("glVertexAttribI2uivEXT"); - glad_glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC)load("glVertexAttribI3uivEXT"); - glad_glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC)load("glVertexAttribI4uivEXT"); - glad_glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC)load("glVertexAttribI4bvEXT"); - glad_glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC)load("glVertexAttribI4svEXT"); - glad_glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC)load("glVertexAttribI4ubvEXT"); - glad_glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC)load("glVertexAttribI4usvEXT"); - glad_glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC)load("glVertexAttribIPointerEXT"); - glad_glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC)load("glGetVertexAttribIivEXT"); - glad_glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC)load("glGetVertexAttribIuivEXT"); -} -static void load_GL_NV_video_capture(GLADloadproc load) { - if(!GLAD_GL_NV_video_capture) return; - glad_glBeginVideoCaptureNV = (PFNGLBEGINVIDEOCAPTURENVPROC)load("glBeginVideoCaptureNV"); - glad_glBindVideoCaptureStreamBufferNV = (PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)load("glBindVideoCaptureStreamBufferNV"); - glad_glBindVideoCaptureStreamTextureNV = (PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)load("glBindVideoCaptureStreamTextureNV"); - glad_glEndVideoCaptureNV = (PFNGLENDVIDEOCAPTURENVPROC)load("glEndVideoCaptureNV"); - glad_glGetVideoCaptureivNV = (PFNGLGETVIDEOCAPTUREIVNVPROC)load("glGetVideoCaptureivNV"); - glad_glGetVideoCaptureStreamivNV = (PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)load("glGetVideoCaptureStreamivNV"); - glad_glGetVideoCaptureStreamfvNV = (PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)load("glGetVideoCaptureStreamfvNV"); - glad_glGetVideoCaptureStreamdvNV = (PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)load("glGetVideoCaptureStreamdvNV"); - glad_glVideoCaptureNV = (PFNGLVIDEOCAPTURENVPROC)load("glVideoCaptureNV"); - glad_glVideoCaptureStreamParameterivNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)load("glVideoCaptureStreamParameterivNV"); - glad_glVideoCaptureStreamParameterfvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)load("glVideoCaptureStreamParameterfvNV"); - glad_glVideoCaptureStreamParameterdvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)load("glVideoCaptureStreamParameterdvNV"); -} -static void load_GL_NV_viewport_swizzle(GLADloadproc load) { - if(!GLAD_GL_NV_viewport_swizzle) return; - glad_glViewportSwizzleNV = (PFNGLVIEWPORTSWIZZLENVPROC)load("glViewportSwizzleNV"); -} -static void load_GL_OES_byte_coordinates(GLADloadproc load) { - if(!GLAD_GL_OES_byte_coordinates) return; - glad_glMultiTexCoord1bOES = (PFNGLMULTITEXCOORD1BOESPROC)load("glMultiTexCoord1bOES"); - glad_glMultiTexCoord1bvOES = (PFNGLMULTITEXCOORD1BVOESPROC)load("glMultiTexCoord1bvOES"); - glad_glMultiTexCoord2bOES = (PFNGLMULTITEXCOORD2BOESPROC)load("glMultiTexCoord2bOES"); - glad_glMultiTexCoord2bvOES = (PFNGLMULTITEXCOORD2BVOESPROC)load("glMultiTexCoord2bvOES"); - glad_glMultiTexCoord3bOES = (PFNGLMULTITEXCOORD3BOESPROC)load("glMultiTexCoord3bOES"); - glad_glMultiTexCoord3bvOES = (PFNGLMULTITEXCOORD3BVOESPROC)load("glMultiTexCoord3bvOES"); - glad_glMultiTexCoord4bOES = (PFNGLMULTITEXCOORD4BOESPROC)load("glMultiTexCoord4bOES"); - glad_glMultiTexCoord4bvOES = (PFNGLMULTITEXCOORD4BVOESPROC)load("glMultiTexCoord4bvOES"); - glad_glTexCoord1bOES = (PFNGLTEXCOORD1BOESPROC)load("glTexCoord1bOES"); - glad_glTexCoord1bvOES = (PFNGLTEXCOORD1BVOESPROC)load("glTexCoord1bvOES"); - glad_glTexCoord2bOES = (PFNGLTEXCOORD2BOESPROC)load("glTexCoord2bOES"); - glad_glTexCoord2bvOES = (PFNGLTEXCOORD2BVOESPROC)load("glTexCoord2bvOES"); - glad_glTexCoord3bOES = (PFNGLTEXCOORD3BOESPROC)load("glTexCoord3bOES"); - glad_glTexCoord3bvOES = (PFNGLTEXCOORD3BVOESPROC)load("glTexCoord3bvOES"); - glad_glTexCoord4bOES = (PFNGLTEXCOORD4BOESPROC)load("glTexCoord4bOES"); - glad_glTexCoord4bvOES = (PFNGLTEXCOORD4BVOESPROC)load("glTexCoord4bvOES"); - glad_glVertex2bOES = (PFNGLVERTEX2BOESPROC)load("glVertex2bOES"); - glad_glVertex2bvOES = (PFNGLVERTEX2BVOESPROC)load("glVertex2bvOES"); - glad_glVertex3bOES = (PFNGLVERTEX3BOESPROC)load("glVertex3bOES"); - glad_glVertex3bvOES = (PFNGLVERTEX3BVOESPROC)load("glVertex3bvOES"); - glad_glVertex4bOES = (PFNGLVERTEX4BOESPROC)load("glVertex4bOES"); - glad_glVertex4bvOES = (PFNGLVERTEX4BVOESPROC)load("glVertex4bvOES"); -} -static void load_GL_OES_fixed_point(GLADloadproc load) { - if(!GLAD_GL_OES_fixed_point) return; - glad_glAlphaFuncxOES = (PFNGLALPHAFUNCXOESPROC)load("glAlphaFuncxOES"); - glad_glClearColorxOES = (PFNGLCLEARCOLORXOESPROC)load("glClearColorxOES"); - glad_glClearDepthxOES = (PFNGLCLEARDEPTHXOESPROC)load("glClearDepthxOES"); - glad_glClipPlanexOES = (PFNGLCLIPPLANEXOESPROC)load("glClipPlanexOES"); - glad_glColor4xOES = (PFNGLCOLOR4XOESPROC)load("glColor4xOES"); - glad_glDepthRangexOES = (PFNGLDEPTHRANGEXOESPROC)load("glDepthRangexOES"); - glad_glFogxOES = (PFNGLFOGXOESPROC)load("glFogxOES"); - glad_glFogxvOES = (PFNGLFOGXVOESPROC)load("glFogxvOES"); - glad_glFrustumxOES = (PFNGLFRUSTUMXOESPROC)load("glFrustumxOES"); - glad_glGetClipPlanexOES = (PFNGLGETCLIPPLANEXOESPROC)load("glGetClipPlanexOES"); - glad_glGetFixedvOES = (PFNGLGETFIXEDVOESPROC)load("glGetFixedvOES"); - glad_glGetTexEnvxvOES = (PFNGLGETTEXENVXVOESPROC)load("glGetTexEnvxvOES"); - glad_glGetTexParameterxvOES = (PFNGLGETTEXPARAMETERXVOESPROC)load("glGetTexParameterxvOES"); - glad_glLightModelxOES = (PFNGLLIGHTMODELXOESPROC)load("glLightModelxOES"); - glad_glLightModelxvOES = (PFNGLLIGHTMODELXVOESPROC)load("glLightModelxvOES"); - glad_glLightxOES = (PFNGLLIGHTXOESPROC)load("glLightxOES"); - glad_glLightxvOES = (PFNGLLIGHTXVOESPROC)load("glLightxvOES"); - glad_glLineWidthxOES = (PFNGLLINEWIDTHXOESPROC)load("glLineWidthxOES"); - glad_glLoadMatrixxOES = (PFNGLLOADMATRIXXOESPROC)load("glLoadMatrixxOES"); - glad_glMaterialxOES = (PFNGLMATERIALXOESPROC)load("glMaterialxOES"); - glad_glMaterialxvOES = (PFNGLMATERIALXVOESPROC)load("glMaterialxvOES"); - glad_glMultMatrixxOES = (PFNGLMULTMATRIXXOESPROC)load("glMultMatrixxOES"); - glad_glMultiTexCoord4xOES = (PFNGLMULTITEXCOORD4XOESPROC)load("glMultiTexCoord4xOES"); - glad_glNormal3xOES = (PFNGLNORMAL3XOESPROC)load("glNormal3xOES"); - glad_glOrthoxOES = (PFNGLORTHOXOESPROC)load("glOrthoxOES"); - glad_glPointParameterxvOES = (PFNGLPOINTPARAMETERXVOESPROC)load("glPointParameterxvOES"); - glad_glPointSizexOES = (PFNGLPOINTSIZEXOESPROC)load("glPointSizexOES"); - glad_glPolygonOffsetxOES = (PFNGLPOLYGONOFFSETXOESPROC)load("glPolygonOffsetxOES"); - glad_glRotatexOES = (PFNGLROTATEXOESPROC)load("glRotatexOES"); - glad_glScalexOES = (PFNGLSCALEXOESPROC)load("glScalexOES"); - glad_glTexEnvxOES = (PFNGLTEXENVXOESPROC)load("glTexEnvxOES"); - glad_glTexEnvxvOES = (PFNGLTEXENVXVOESPROC)load("glTexEnvxvOES"); - glad_glTexParameterxOES = (PFNGLTEXPARAMETERXOESPROC)load("glTexParameterxOES"); - glad_glTexParameterxvOES = (PFNGLTEXPARAMETERXVOESPROC)load("glTexParameterxvOES"); - glad_glTranslatexOES = (PFNGLTRANSLATEXOESPROC)load("glTranslatexOES"); - glad_glGetLightxvOES = (PFNGLGETLIGHTXVOESPROC)load("glGetLightxvOES"); - glad_glGetMaterialxvOES = (PFNGLGETMATERIALXVOESPROC)load("glGetMaterialxvOES"); - glad_glPointParameterxOES = (PFNGLPOINTPARAMETERXOESPROC)load("glPointParameterxOES"); - glad_glSampleCoveragexOES = (PFNGLSAMPLECOVERAGEXOESPROC)load("glSampleCoveragexOES"); - glad_glAccumxOES = (PFNGLACCUMXOESPROC)load("glAccumxOES"); - glad_glBitmapxOES = (PFNGLBITMAPXOESPROC)load("glBitmapxOES"); - glad_glBlendColorxOES = (PFNGLBLENDCOLORXOESPROC)load("glBlendColorxOES"); - glad_glClearAccumxOES = (PFNGLCLEARACCUMXOESPROC)load("glClearAccumxOES"); - glad_glColor3xOES = (PFNGLCOLOR3XOESPROC)load("glColor3xOES"); - glad_glColor3xvOES = (PFNGLCOLOR3XVOESPROC)load("glColor3xvOES"); - glad_glColor4xvOES = (PFNGLCOLOR4XVOESPROC)load("glColor4xvOES"); - glad_glConvolutionParameterxOES = (PFNGLCONVOLUTIONPARAMETERXOESPROC)load("glConvolutionParameterxOES"); - glad_glConvolutionParameterxvOES = (PFNGLCONVOLUTIONPARAMETERXVOESPROC)load("glConvolutionParameterxvOES"); - glad_glEvalCoord1xOES = (PFNGLEVALCOORD1XOESPROC)load("glEvalCoord1xOES"); - glad_glEvalCoord1xvOES = (PFNGLEVALCOORD1XVOESPROC)load("glEvalCoord1xvOES"); - glad_glEvalCoord2xOES = (PFNGLEVALCOORD2XOESPROC)load("glEvalCoord2xOES"); - glad_glEvalCoord2xvOES = (PFNGLEVALCOORD2XVOESPROC)load("glEvalCoord2xvOES"); - glad_glFeedbackBufferxOES = (PFNGLFEEDBACKBUFFERXOESPROC)load("glFeedbackBufferxOES"); - glad_glGetConvolutionParameterxvOES = (PFNGLGETCONVOLUTIONPARAMETERXVOESPROC)load("glGetConvolutionParameterxvOES"); - glad_glGetHistogramParameterxvOES = (PFNGLGETHISTOGRAMPARAMETERXVOESPROC)load("glGetHistogramParameterxvOES"); - glad_glGetLightxOES = (PFNGLGETLIGHTXOESPROC)load("glGetLightxOES"); - glad_glGetMapxvOES = (PFNGLGETMAPXVOESPROC)load("glGetMapxvOES"); - glad_glGetMaterialxOES = (PFNGLGETMATERIALXOESPROC)load("glGetMaterialxOES"); - glad_glGetPixelMapxv = (PFNGLGETPIXELMAPXVPROC)load("glGetPixelMapxv"); - glad_glGetTexGenxvOES = (PFNGLGETTEXGENXVOESPROC)load("glGetTexGenxvOES"); - glad_glGetTexLevelParameterxvOES = (PFNGLGETTEXLEVELPARAMETERXVOESPROC)load("glGetTexLevelParameterxvOES"); - glad_glIndexxOES = (PFNGLINDEXXOESPROC)load("glIndexxOES"); - glad_glIndexxvOES = (PFNGLINDEXXVOESPROC)load("glIndexxvOES"); - glad_glLoadTransposeMatrixxOES = (PFNGLLOADTRANSPOSEMATRIXXOESPROC)load("glLoadTransposeMatrixxOES"); - glad_glMap1xOES = (PFNGLMAP1XOESPROC)load("glMap1xOES"); - glad_glMap2xOES = (PFNGLMAP2XOESPROC)load("glMap2xOES"); - glad_glMapGrid1xOES = (PFNGLMAPGRID1XOESPROC)load("glMapGrid1xOES"); - glad_glMapGrid2xOES = (PFNGLMAPGRID2XOESPROC)load("glMapGrid2xOES"); - glad_glMultTransposeMatrixxOES = (PFNGLMULTTRANSPOSEMATRIXXOESPROC)load("glMultTransposeMatrixxOES"); - glad_glMultiTexCoord1xOES = (PFNGLMULTITEXCOORD1XOESPROC)load("glMultiTexCoord1xOES"); - glad_glMultiTexCoord1xvOES = (PFNGLMULTITEXCOORD1XVOESPROC)load("glMultiTexCoord1xvOES"); - glad_glMultiTexCoord2xOES = (PFNGLMULTITEXCOORD2XOESPROC)load("glMultiTexCoord2xOES"); - glad_glMultiTexCoord2xvOES = (PFNGLMULTITEXCOORD2XVOESPROC)load("glMultiTexCoord2xvOES"); - glad_glMultiTexCoord3xOES = (PFNGLMULTITEXCOORD3XOESPROC)load("glMultiTexCoord3xOES"); - glad_glMultiTexCoord3xvOES = (PFNGLMULTITEXCOORD3XVOESPROC)load("glMultiTexCoord3xvOES"); - glad_glMultiTexCoord4xvOES = (PFNGLMULTITEXCOORD4XVOESPROC)load("glMultiTexCoord4xvOES"); - glad_glNormal3xvOES = (PFNGLNORMAL3XVOESPROC)load("glNormal3xvOES"); - glad_glPassThroughxOES = (PFNGLPASSTHROUGHXOESPROC)load("glPassThroughxOES"); - glad_glPixelMapx = (PFNGLPIXELMAPXPROC)load("glPixelMapx"); - glad_glPixelStorex = (PFNGLPIXELSTOREXPROC)load("glPixelStorex"); - glad_glPixelTransferxOES = (PFNGLPIXELTRANSFERXOESPROC)load("glPixelTransferxOES"); - glad_glPixelZoomxOES = (PFNGLPIXELZOOMXOESPROC)load("glPixelZoomxOES"); - glad_glPrioritizeTexturesxOES = (PFNGLPRIORITIZETEXTURESXOESPROC)load("glPrioritizeTexturesxOES"); - glad_glRasterPos2xOES = (PFNGLRASTERPOS2XOESPROC)load("glRasterPos2xOES"); - glad_glRasterPos2xvOES = (PFNGLRASTERPOS2XVOESPROC)load("glRasterPos2xvOES"); - glad_glRasterPos3xOES = (PFNGLRASTERPOS3XOESPROC)load("glRasterPos3xOES"); - glad_glRasterPos3xvOES = (PFNGLRASTERPOS3XVOESPROC)load("glRasterPos3xvOES"); - glad_glRasterPos4xOES = (PFNGLRASTERPOS4XOESPROC)load("glRasterPos4xOES"); - glad_glRasterPos4xvOES = (PFNGLRASTERPOS4XVOESPROC)load("glRasterPos4xvOES"); - glad_glRectxOES = (PFNGLRECTXOESPROC)load("glRectxOES"); - glad_glRectxvOES = (PFNGLRECTXVOESPROC)load("glRectxvOES"); - glad_glTexCoord1xOES = (PFNGLTEXCOORD1XOESPROC)load("glTexCoord1xOES"); - glad_glTexCoord1xvOES = (PFNGLTEXCOORD1XVOESPROC)load("glTexCoord1xvOES"); - glad_glTexCoord2xOES = (PFNGLTEXCOORD2XOESPROC)load("glTexCoord2xOES"); - glad_glTexCoord2xvOES = (PFNGLTEXCOORD2XVOESPROC)load("glTexCoord2xvOES"); - glad_glTexCoord3xOES = (PFNGLTEXCOORD3XOESPROC)load("glTexCoord3xOES"); - glad_glTexCoord3xvOES = (PFNGLTEXCOORD3XVOESPROC)load("glTexCoord3xvOES"); - glad_glTexCoord4xOES = (PFNGLTEXCOORD4XOESPROC)load("glTexCoord4xOES"); - glad_glTexCoord4xvOES = (PFNGLTEXCOORD4XVOESPROC)load("glTexCoord4xvOES"); - glad_glTexGenxOES = (PFNGLTEXGENXOESPROC)load("glTexGenxOES"); - glad_glTexGenxvOES = (PFNGLTEXGENXVOESPROC)load("glTexGenxvOES"); - glad_glVertex2xOES = (PFNGLVERTEX2XOESPROC)load("glVertex2xOES"); - glad_glVertex2xvOES = (PFNGLVERTEX2XVOESPROC)load("glVertex2xvOES"); - glad_glVertex3xOES = (PFNGLVERTEX3XOESPROC)load("glVertex3xOES"); - glad_glVertex3xvOES = (PFNGLVERTEX3XVOESPROC)load("glVertex3xvOES"); - glad_glVertex4xOES = (PFNGLVERTEX4XOESPROC)load("glVertex4xOES"); - glad_glVertex4xvOES = (PFNGLVERTEX4XVOESPROC)load("glVertex4xvOES"); -} -static void load_GL_OES_query_matrix(GLADloadproc load) { - if(!GLAD_GL_OES_query_matrix) return; - glad_glQueryMatrixxOES = (PFNGLQUERYMATRIXXOESPROC)load("glQueryMatrixxOES"); -} -static void load_GL_OES_single_precision(GLADloadproc load) { - if(!GLAD_GL_OES_single_precision) return; - glad_glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC)load("glClearDepthfOES"); - glad_glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC)load("glClipPlanefOES"); - glad_glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC)load("glDepthRangefOES"); - glad_glFrustumfOES = (PFNGLFRUSTUMFOESPROC)load("glFrustumfOES"); - glad_glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC)load("glGetClipPlanefOES"); - glad_glOrthofOES = (PFNGLORTHOFOESPROC)load("glOrthofOES"); -} -static void load_GL_OVR_multiview(GLADloadproc load) { - if(!GLAD_GL_OVR_multiview) return; - glad_glFramebufferTextureMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)load("glFramebufferTextureMultiviewOVR"); -} -static void load_GL_PGI_misc_hints(GLADloadproc load) { - if(!GLAD_GL_PGI_misc_hints) return; - glad_glHintPGI = (PFNGLHINTPGIPROC)load("glHintPGI"); -} -static void load_GL_SGIS_detail_texture(GLADloadproc load) { - if(!GLAD_GL_SGIS_detail_texture) return; - glad_glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC)load("glDetailTexFuncSGIS"); - glad_glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC)load("glGetDetailTexFuncSGIS"); -} -static void load_GL_SGIS_fog_function(GLADloadproc load) { - if(!GLAD_GL_SGIS_fog_function) return; - glad_glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC)load("glFogFuncSGIS"); - glad_glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC)load("glGetFogFuncSGIS"); -} -static void load_GL_SGIS_multisample(GLADloadproc load) { - if(!GLAD_GL_SGIS_multisample) return; - glad_glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC)load("glSampleMaskSGIS"); - glad_glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC)load("glSamplePatternSGIS"); -} -static void load_GL_SGIS_pixel_texture(GLADloadproc load) { - if(!GLAD_GL_SGIS_pixel_texture) return; - glad_glPixelTexGenParameteriSGIS = (PFNGLPIXELTEXGENPARAMETERISGISPROC)load("glPixelTexGenParameteriSGIS"); - glad_glPixelTexGenParameterivSGIS = (PFNGLPIXELTEXGENPARAMETERIVSGISPROC)load("glPixelTexGenParameterivSGIS"); - glad_glPixelTexGenParameterfSGIS = (PFNGLPIXELTEXGENPARAMETERFSGISPROC)load("glPixelTexGenParameterfSGIS"); - glad_glPixelTexGenParameterfvSGIS = (PFNGLPIXELTEXGENPARAMETERFVSGISPROC)load("glPixelTexGenParameterfvSGIS"); - glad_glGetPixelTexGenParameterivSGIS = (PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC)load("glGetPixelTexGenParameterivSGIS"); - glad_glGetPixelTexGenParameterfvSGIS = (PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC)load("glGetPixelTexGenParameterfvSGIS"); -} -static void load_GL_SGIS_point_parameters(GLADloadproc load) { - if(!GLAD_GL_SGIS_point_parameters) return; - glad_glPointParameterfSGIS = (PFNGLPOINTPARAMETERFSGISPROC)load("glPointParameterfSGIS"); - glad_glPointParameterfvSGIS = (PFNGLPOINTPARAMETERFVSGISPROC)load("glPointParameterfvSGIS"); -} -static void load_GL_SGIS_sharpen_texture(GLADloadproc load) { - if(!GLAD_GL_SGIS_sharpen_texture) return; - glad_glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC)load("glSharpenTexFuncSGIS"); - glad_glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC)load("glGetSharpenTexFuncSGIS"); -} -static void load_GL_SGIS_texture4D(GLADloadproc load) { - if(!GLAD_GL_SGIS_texture4D) return; - glad_glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC)load("glTexImage4DSGIS"); - glad_glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC)load("glTexSubImage4DSGIS"); -} -static void load_GL_SGIS_texture_color_mask(GLADloadproc load) { - if(!GLAD_GL_SGIS_texture_color_mask) return; - glad_glTextureColorMaskSGIS = (PFNGLTEXTURECOLORMASKSGISPROC)load("glTextureColorMaskSGIS"); -} -static void load_GL_SGIS_texture_filter4(GLADloadproc load) { - if(!GLAD_GL_SGIS_texture_filter4) return; - glad_glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC)load("glGetTexFilterFuncSGIS"); - glad_glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC)load("glTexFilterFuncSGIS"); -} -static void load_GL_SGIX_async(GLADloadproc load) { - if(!GLAD_GL_SGIX_async) return; - glad_glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC)load("glAsyncMarkerSGIX"); - glad_glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC)load("glFinishAsyncSGIX"); - glad_glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC)load("glPollAsyncSGIX"); - glad_glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC)load("glGenAsyncMarkersSGIX"); - glad_glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC)load("glDeleteAsyncMarkersSGIX"); - glad_glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC)load("glIsAsyncMarkerSGIX"); -} -static void load_GL_SGIX_flush_raster(GLADloadproc load) { - if(!GLAD_GL_SGIX_flush_raster) return; - glad_glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC)load("glFlushRasterSGIX"); -} -static void load_GL_SGIX_fragment_lighting(GLADloadproc load) { - if(!GLAD_GL_SGIX_fragment_lighting) return; - glad_glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC)load("glFragmentColorMaterialSGIX"); - glad_glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC)load("glFragmentLightfSGIX"); - glad_glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC)load("glFragmentLightfvSGIX"); - glad_glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC)load("glFragmentLightiSGIX"); - glad_glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC)load("glFragmentLightivSGIX"); - glad_glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC)load("glFragmentLightModelfSGIX"); - glad_glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)load("glFragmentLightModelfvSGIX"); - glad_glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC)load("glFragmentLightModeliSGIX"); - glad_glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)load("glFragmentLightModelivSGIX"); - glad_glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC)load("glFragmentMaterialfSGIX"); - glad_glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC)load("glFragmentMaterialfvSGIX"); - glad_glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC)load("glFragmentMaterialiSGIX"); - glad_glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC)load("glFragmentMaterialivSGIX"); - glad_glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC)load("glGetFragmentLightfvSGIX"); - glad_glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC)load("glGetFragmentLightivSGIX"); - glad_glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC)load("glGetFragmentMaterialfvSGIX"); - glad_glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC)load("glGetFragmentMaterialivSGIX"); - glad_glLightEnviSGIX = (PFNGLLIGHTENVISGIXPROC)load("glLightEnviSGIX"); -} -static void load_GL_SGIX_framezoom(GLADloadproc load) { - if(!GLAD_GL_SGIX_framezoom) return; - glad_glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC)load("glFrameZoomSGIX"); -} -static void load_GL_SGIX_igloo_interface(GLADloadproc load) { - if(!GLAD_GL_SGIX_igloo_interface) return; - glad_glIglooInterfaceSGIX = (PFNGLIGLOOINTERFACESGIXPROC)load("glIglooInterfaceSGIX"); -} -static void load_GL_SGIX_instruments(GLADloadproc load) { - if(!GLAD_GL_SGIX_instruments) return; - glad_glGetInstrumentsSGIX = (PFNGLGETINSTRUMENTSSGIXPROC)load("glGetInstrumentsSGIX"); - glad_glInstrumentsBufferSGIX = (PFNGLINSTRUMENTSBUFFERSGIXPROC)load("glInstrumentsBufferSGIX"); - glad_glPollInstrumentsSGIX = (PFNGLPOLLINSTRUMENTSSGIXPROC)load("glPollInstrumentsSGIX"); - glad_glReadInstrumentsSGIX = (PFNGLREADINSTRUMENTSSGIXPROC)load("glReadInstrumentsSGIX"); - glad_glStartInstrumentsSGIX = (PFNGLSTARTINSTRUMENTSSGIXPROC)load("glStartInstrumentsSGIX"); - glad_glStopInstrumentsSGIX = (PFNGLSTOPINSTRUMENTSSGIXPROC)load("glStopInstrumentsSGIX"); -} -static void load_GL_SGIX_list_priority(GLADloadproc load) { - if(!GLAD_GL_SGIX_list_priority) return; - glad_glGetListParameterfvSGIX = (PFNGLGETLISTPARAMETERFVSGIXPROC)load("glGetListParameterfvSGIX"); - glad_glGetListParameterivSGIX = (PFNGLGETLISTPARAMETERIVSGIXPROC)load("glGetListParameterivSGIX"); - glad_glListParameterfSGIX = (PFNGLLISTPARAMETERFSGIXPROC)load("glListParameterfSGIX"); - glad_glListParameterfvSGIX = (PFNGLLISTPARAMETERFVSGIXPROC)load("glListParameterfvSGIX"); - glad_glListParameteriSGIX = (PFNGLLISTPARAMETERISGIXPROC)load("glListParameteriSGIX"); - glad_glListParameterivSGIX = (PFNGLLISTPARAMETERIVSGIXPROC)load("glListParameterivSGIX"); -} -static void load_GL_SGIX_pixel_texture(GLADloadproc load) { - if(!GLAD_GL_SGIX_pixel_texture) return; - glad_glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC)load("glPixelTexGenSGIX"); -} -static void load_GL_SGIX_polynomial_ffd(GLADloadproc load) { - if(!GLAD_GL_SGIX_polynomial_ffd) return; - glad_glDeformationMap3dSGIX = (PFNGLDEFORMATIONMAP3DSGIXPROC)load("glDeformationMap3dSGIX"); - glad_glDeformationMap3fSGIX = (PFNGLDEFORMATIONMAP3FSGIXPROC)load("glDeformationMap3fSGIX"); - glad_glDeformSGIX = (PFNGLDEFORMSGIXPROC)load("glDeformSGIX"); - glad_glLoadIdentityDeformationMapSGIX = (PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC)load("glLoadIdentityDeformationMapSGIX"); -} -static void load_GL_SGIX_reference_plane(GLADloadproc load) { - if(!GLAD_GL_SGIX_reference_plane) return; - glad_glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC)load("glReferencePlaneSGIX"); -} -static void load_GL_SGIX_sprite(GLADloadproc load) { - if(!GLAD_GL_SGIX_sprite) return; - glad_glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC)load("glSpriteParameterfSGIX"); - glad_glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC)load("glSpriteParameterfvSGIX"); - glad_glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC)load("glSpriteParameteriSGIX"); - glad_glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC)load("glSpriteParameterivSGIX"); -} -static void load_GL_SGIX_tag_sample_buffer(GLADloadproc load) { - if(!GLAD_GL_SGIX_tag_sample_buffer) return; - glad_glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC)load("glTagSampleBufferSGIX"); -} -static void load_GL_SGI_color_table(GLADloadproc load) { - if(!GLAD_GL_SGI_color_table) return; - glad_glColorTableSGI = (PFNGLCOLORTABLESGIPROC)load("glColorTableSGI"); - glad_glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC)load("glColorTableParameterfvSGI"); - glad_glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC)load("glColorTableParameterivSGI"); - glad_glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC)load("glCopyColorTableSGI"); - glad_glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC)load("glGetColorTableSGI"); - glad_glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)load("glGetColorTableParameterfvSGI"); - glad_glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)load("glGetColorTableParameterivSGI"); -} -static void load_GL_SUNX_constant_data(GLADloadproc load) { - if(!GLAD_GL_SUNX_constant_data) return; - glad_glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC)load("glFinishTextureSUNX"); -} -static void load_GL_SUN_global_alpha(GLADloadproc load) { - if(!GLAD_GL_SUN_global_alpha) return; - glad_glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC)load("glGlobalAlphaFactorbSUN"); - glad_glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC)load("glGlobalAlphaFactorsSUN"); - glad_glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC)load("glGlobalAlphaFactoriSUN"); - glad_glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC)load("glGlobalAlphaFactorfSUN"); - glad_glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC)load("glGlobalAlphaFactordSUN"); - glad_glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC)load("glGlobalAlphaFactorubSUN"); - glad_glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC)load("glGlobalAlphaFactorusSUN"); - glad_glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC)load("glGlobalAlphaFactoruiSUN"); -} -static void load_GL_SUN_mesh_array(GLADloadproc load) { - if(!GLAD_GL_SUN_mesh_array) return; - glad_glDrawMeshArraysSUN = (PFNGLDRAWMESHARRAYSSUNPROC)load("glDrawMeshArraysSUN"); -} -static void load_GL_SUN_triangle_list(GLADloadproc load) { - if(!GLAD_GL_SUN_triangle_list) return; - glad_glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC)load("glReplacementCodeuiSUN"); - glad_glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC)load("glReplacementCodeusSUN"); - glad_glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC)load("glReplacementCodeubSUN"); - glad_glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC)load("glReplacementCodeuivSUN"); - glad_glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC)load("glReplacementCodeusvSUN"); - glad_glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC)load("glReplacementCodeubvSUN"); - glad_glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC)load("glReplacementCodePointerSUN"); -} -static void load_GL_SUN_vertex(GLADloadproc load) { - if(!GLAD_GL_SUN_vertex) return; - glad_glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC)load("glColor4ubVertex2fSUN"); - glad_glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC)load("glColor4ubVertex2fvSUN"); - glad_glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC)load("glColor4ubVertex3fSUN"); - glad_glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC)load("glColor4ubVertex3fvSUN"); - glad_glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC)load("glColor3fVertex3fSUN"); - glad_glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC)load("glColor3fVertex3fvSUN"); - glad_glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC)load("glNormal3fVertex3fSUN"); - glad_glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC)load("glNormal3fVertex3fvSUN"); - glad_glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glColor4fNormal3fVertex3fSUN"); - glad_glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glColor4fNormal3fVertex3fvSUN"); - glad_glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC)load("glTexCoord2fVertex3fSUN"); - glad_glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC)load("glTexCoord2fVertex3fvSUN"); - glad_glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC)load("glTexCoord4fVertex4fSUN"); - glad_glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC)load("glTexCoord4fVertex4fvSUN"); - glad_glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)load("glTexCoord2fColor4ubVertex3fSUN"); - glad_glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)load("glTexCoord2fColor4ubVertex3fvSUN"); - glad_glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)load("glTexCoord2fColor3fVertex3fSUN"); - glad_glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)load("glTexCoord2fColor3fVertex3fvSUN"); - glad_glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)load("glTexCoord2fNormal3fVertex3fSUN"); - glad_glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)load("glTexCoord2fNormal3fVertex3fvSUN"); - glad_glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glTexCoord2fColor4fNormal3fVertex3fSUN"); - glad_glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glTexCoord2fColor4fNormal3fVertex3fvSUN"); - glad_glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)load("glTexCoord4fColor4fNormal3fVertex4fSUN"); - glad_glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)load("glTexCoord4fColor4fNormal3fVertex4fvSUN"); - glad_glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)load("glReplacementCodeuiVertex3fSUN"); - glad_glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)load("glReplacementCodeuiVertex3fvSUN"); - glad_glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)load("glReplacementCodeuiColor4ubVertex3fSUN"); - glad_glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)load("glReplacementCodeuiColor4ubVertex3fvSUN"); - glad_glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)load("glReplacementCodeuiColor3fVertex3fSUN"); - glad_glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)load("glReplacementCodeuiColor3fVertex3fvSUN"); - glad_glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiNormal3fVertex3fSUN"); - glad_glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiNormal3fVertex3fvSUN"); - glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiColor4fNormal3fVertex3fSUN"); - glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiColor4fNormal3fVertex3fvSUN"); - glad_glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)load("glReplacementCodeuiTexCoord2fVertex3fSUN"); - glad_glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)load("glReplacementCodeuiTexCoord2fVertex3fvSUN"); - glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN"); - glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN"); - glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN"); - glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN"); -} -static int find_extensionsGL(void) { - if (!get_exts()) return 0; - GLAD_GL_3DFX_multisample = has_ext("GL_3DFX_multisample"); - GLAD_GL_3DFX_tbuffer = has_ext("GL_3DFX_tbuffer"); - GLAD_GL_3DFX_texture_compression_FXT1 = has_ext("GL_3DFX_texture_compression_FXT1"); - GLAD_GL_AMD_blend_minmax_factor = has_ext("GL_AMD_blend_minmax_factor"); - GLAD_GL_AMD_conservative_depth = has_ext("GL_AMD_conservative_depth"); - GLAD_GL_AMD_debug_output = has_ext("GL_AMD_debug_output"); - GLAD_GL_AMD_depth_clamp_separate = has_ext("GL_AMD_depth_clamp_separate"); - GLAD_GL_AMD_draw_buffers_blend = has_ext("GL_AMD_draw_buffers_blend"); - GLAD_GL_AMD_framebuffer_sample_positions = has_ext("GL_AMD_framebuffer_sample_positions"); - GLAD_GL_AMD_gcn_shader = has_ext("GL_AMD_gcn_shader"); - GLAD_GL_AMD_gpu_shader_half_float = has_ext("GL_AMD_gpu_shader_half_float"); - GLAD_GL_AMD_gpu_shader_int16 = has_ext("GL_AMD_gpu_shader_int16"); - GLAD_GL_AMD_gpu_shader_int64 = has_ext("GL_AMD_gpu_shader_int64"); - GLAD_GL_AMD_interleaved_elements = has_ext("GL_AMD_interleaved_elements"); - GLAD_GL_AMD_multi_draw_indirect = has_ext("GL_AMD_multi_draw_indirect"); - GLAD_GL_AMD_name_gen_delete = has_ext("GL_AMD_name_gen_delete"); - GLAD_GL_AMD_occlusion_query_event = has_ext("GL_AMD_occlusion_query_event"); - GLAD_GL_AMD_performance_monitor = has_ext("GL_AMD_performance_monitor"); - GLAD_GL_AMD_pinned_memory = has_ext("GL_AMD_pinned_memory"); - GLAD_GL_AMD_query_buffer_object = has_ext("GL_AMD_query_buffer_object"); - GLAD_GL_AMD_sample_positions = has_ext("GL_AMD_sample_positions"); - GLAD_GL_AMD_seamless_cubemap_per_texture = has_ext("GL_AMD_seamless_cubemap_per_texture"); - GLAD_GL_AMD_shader_atomic_counter_ops = has_ext("GL_AMD_shader_atomic_counter_ops"); - GLAD_GL_AMD_shader_ballot = has_ext("GL_AMD_shader_ballot"); - GLAD_GL_AMD_shader_explicit_vertex_parameter = has_ext("GL_AMD_shader_explicit_vertex_parameter"); - GLAD_GL_AMD_shader_gpu_shader_half_float_fetch = has_ext("GL_AMD_shader_gpu_shader_half_float_fetch"); - GLAD_GL_AMD_shader_image_load_store_lod = has_ext("GL_AMD_shader_image_load_store_lod"); - GLAD_GL_AMD_shader_stencil_export = has_ext("GL_AMD_shader_stencil_export"); - GLAD_GL_AMD_shader_trinary_minmax = has_ext("GL_AMD_shader_trinary_minmax"); - GLAD_GL_AMD_sparse_texture = has_ext("GL_AMD_sparse_texture"); - GLAD_GL_AMD_stencil_operation_extended = has_ext("GL_AMD_stencil_operation_extended"); - GLAD_GL_AMD_texture_gather_bias_lod = has_ext("GL_AMD_texture_gather_bias_lod"); - GLAD_GL_AMD_texture_texture4 = has_ext("GL_AMD_texture_texture4"); - GLAD_GL_AMD_transform_feedback3_lines_triangles = has_ext("GL_AMD_transform_feedback3_lines_triangles"); - GLAD_GL_AMD_transform_feedback4 = has_ext("GL_AMD_transform_feedback4"); - GLAD_GL_AMD_vertex_shader_layer = has_ext("GL_AMD_vertex_shader_layer"); - GLAD_GL_AMD_vertex_shader_tessellator = has_ext("GL_AMD_vertex_shader_tessellator"); - GLAD_GL_AMD_vertex_shader_viewport_index = has_ext("GL_AMD_vertex_shader_viewport_index"); - GLAD_GL_APPLE_aux_depth_stencil = has_ext("GL_APPLE_aux_depth_stencil"); - GLAD_GL_APPLE_client_storage = has_ext("GL_APPLE_client_storage"); - GLAD_GL_APPLE_element_array = has_ext("GL_APPLE_element_array"); - GLAD_GL_APPLE_fence = has_ext("GL_APPLE_fence"); - GLAD_GL_APPLE_float_pixels = has_ext("GL_APPLE_float_pixels"); - GLAD_GL_APPLE_flush_buffer_range = has_ext("GL_APPLE_flush_buffer_range"); - GLAD_GL_APPLE_object_purgeable = has_ext("GL_APPLE_object_purgeable"); - GLAD_GL_APPLE_rgb_422 = has_ext("GL_APPLE_rgb_422"); - GLAD_GL_APPLE_row_bytes = has_ext("GL_APPLE_row_bytes"); - GLAD_GL_APPLE_specular_vector = has_ext("GL_APPLE_specular_vector"); - GLAD_GL_APPLE_texture_range = has_ext("GL_APPLE_texture_range"); - GLAD_GL_APPLE_transform_hint = has_ext("GL_APPLE_transform_hint"); - GLAD_GL_APPLE_vertex_array_object = has_ext("GL_APPLE_vertex_array_object"); - GLAD_GL_APPLE_vertex_array_range = has_ext("GL_APPLE_vertex_array_range"); - GLAD_GL_APPLE_vertex_program_evaluators = has_ext("GL_APPLE_vertex_program_evaluators"); - GLAD_GL_APPLE_ycbcr_422 = has_ext("GL_APPLE_ycbcr_422"); - GLAD_GL_ARB_ES2_compatibility = has_ext("GL_ARB_ES2_compatibility"); - GLAD_GL_ARB_ES3_1_compatibility = has_ext("GL_ARB_ES3_1_compatibility"); - GLAD_GL_ARB_ES3_2_compatibility = has_ext("GL_ARB_ES3_2_compatibility"); - GLAD_GL_ARB_ES3_compatibility = has_ext("GL_ARB_ES3_compatibility"); - GLAD_GL_ARB_arrays_of_arrays = has_ext("GL_ARB_arrays_of_arrays"); - GLAD_GL_ARB_base_instance = has_ext("GL_ARB_base_instance"); - GLAD_GL_ARB_bindless_texture = has_ext("GL_ARB_bindless_texture"); - GLAD_GL_ARB_blend_func_extended = has_ext("GL_ARB_blend_func_extended"); - GLAD_GL_ARB_buffer_storage = has_ext("GL_ARB_buffer_storage"); - GLAD_GL_ARB_cl_event = has_ext("GL_ARB_cl_event"); - GLAD_GL_ARB_clear_buffer_object = has_ext("GL_ARB_clear_buffer_object"); - GLAD_GL_ARB_clear_texture = has_ext("GL_ARB_clear_texture"); - GLAD_GL_ARB_clip_control = has_ext("GL_ARB_clip_control"); - GLAD_GL_ARB_color_buffer_float = has_ext("GL_ARB_color_buffer_float"); - GLAD_GL_ARB_compatibility = has_ext("GL_ARB_compatibility"); - GLAD_GL_ARB_compressed_texture_pixel_storage = has_ext("GL_ARB_compressed_texture_pixel_storage"); - GLAD_GL_ARB_compute_shader = has_ext("GL_ARB_compute_shader"); - GLAD_GL_ARB_compute_variable_group_size = has_ext("GL_ARB_compute_variable_group_size"); - GLAD_GL_ARB_conditional_render_inverted = has_ext("GL_ARB_conditional_render_inverted"); - GLAD_GL_ARB_conservative_depth = has_ext("GL_ARB_conservative_depth"); - GLAD_GL_ARB_copy_buffer = has_ext("GL_ARB_copy_buffer"); - GLAD_GL_ARB_copy_image = has_ext("GL_ARB_copy_image"); - GLAD_GL_ARB_cull_distance = has_ext("GL_ARB_cull_distance"); - GLAD_GL_ARB_debug_output = has_ext("GL_ARB_debug_output"); - GLAD_GL_ARB_depth_buffer_float = has_ext("GL_ARB_depth_buffer_float"); - GLAD_GL_ARB_depth_clamp = has_ext("GL_ARB_depth_clamp"); - GLAD_GL_ARB_depth_texture = has_ext("GL_ARB_depth_texture"); - GLAD_GL_ARB_derivative_control = has_ext("GL_ARB_derivative_control"); - GLAD_GL_ARB_direct_state_access = has_ext("GL_ARB_direct_state_access"); - GLAD_GL_ARB_draw_buffers = has_ext("GL_ARB_draw_buffers"); - GLAD_GL_ARB_draw_buffers_blend = has_ext("GL_ARB_draw_buffers_blend"); - GLAD_GL_ARB_draw_elements_base_vertex = has_ext("GL_ARB_draw_elements_base_vertex"); - GLAD_GL_ARB_draw_indirect = has_ext("GL_ARB_draw_indirect"); - GLAD_GL_ARB_draw_instanced = has_ext("GL_ARB_draw_instanced"); - GLAD_GL_ARB_enhanced_layouts = has_ext("GL_ARB_enhanced_layouts"); - GLAD_GL_ARB_explicit_attrib_location = has_ext("GL_ARB_explicit_attrib_location"); - GLAD_GL_ARB_explicit_uniform_location = has_ext("GL_ARB_explicit_uniform_location"); - GLAD_GL_ARB_fragment_coord_conventions = has_ext("GL_ARB_fragment_coord_conventions"); - GLAD_GL_ARB_fragment_layer_viewport = has_ext("GL_ARB_fragment_layer_viewport"); - GLAD_GL_ARB_fragment_program = has_ext("GL_ARB_fragment_program"); - GLAD_GL_ARB_fragment_program_shadow = has_ext("GL_ARB_fragment_program_shadow"); - GLAD_GL_ARB_fragment_shader = has_ext("GL_ARB_fragment_shader"); - GLAD_GL_ARB_fragment_shader_interlock = has_ext("GL_ARB_fragment_shader_interlock"); - GLAD_GL_ARB_framebuffer_no_attachments = has_ext("GL_ARB_framebuffer_no_attachments"); - GLAD_GL_ARB_framebuffer_object = has_ext("GL_ARB_framebuffer_object"); - GLAD_GL_ARB_framebuffer_sRGB = has_ext("GL_ARB_framebuffer_sRGB"); - GLAD_GL_ARB_geometry_shader4 = has_ext("GL_ARB_geometry_shader4"); - GLAD_GL_ARB_get_program_binary = has_ext("GL_ARB_get_program_binary"); - GLAD_GL_ARB_get_texture_sub_image = has_ext("GL_ARB_get_texture_sub_image"); - GLAD_GL_ARB_gl_spirv = has_ext("GL_ARB_gl_spirv"); - GLAD_GL_ARB_gpu_shader5 = has_ext("GL_ARB_gpu_shader5"); - GLAD_GL_ARB_gpu_shader_fp64 = has_ext("GL_ARB_gpu_shader_fp64"); - GLAD_GL_ARB_gpu_shader_int64 = has_ext("GL_ARB_gpu_shader_int64"); - GLAD_GL_ARB_half_float_pixel = has_ext("GL_ARB_half_float_pixel"); - GLAD_GL_ARB_half_float_vertex = has_ext("GL_ARB_half_float_vertex"); - GLAD_GL_ARB_imaging = has_ext("GL_ARB_imaging"); - GLAD_GL_ARB_indirect_parameters = has_ext("GL_ARB_indirect_parameters"); - GLAD_GL_ARB_instanced_arrays = has_ext("GL_ARB_instanced_arrays"); - GLAD_GL_ARB_internalformat_query = has_ext("GL_ARB_internalformat_query"); - GLAD_GL_ARB_internalformat_query2 = has_ext("GL_ARB_internalformat_query2"); - GLAD_GL_ARB_invalidate_subdata = has_ext("GL_ARB_invalidate_subdata"); - GLAD_GL_ARB_map_buffer_alignment = has_ext("GL_ARB_map_buffer_alignment"); - GLAD_GL_ARB_map_buffer_range = has_ext("GL_ARB_map_buffer_range"); - GLAD_GL_ARB_matrix_palette = has_ext("GL_ARB_matrix_palette"); - GLAD_GL_ARB_multi_bind = has_ext("GL_ARB_multi_bind"); - GLAD_GL_ARB_multi_draw_indirect = has_ext("GL_ARB_multi_draw_indirect"); - GLAD_GL_ARB_multisample = has_ext("GL_ARB_multisample"); - GLAD_GL_ARB_multitexture = has_ext("GL_ARB_multitexture"); - GLAD_GL_ARB_occlusion_query = has_ext("GL_ARB_occlusion_query"); - GLAD_GL_ARB_occlusion_query2 = has_ext("GL_ARB_occlusion_query2"); - GLAD_GL_ARB_parallel_shader_compile = has_ext("GL_ARB_parallel_shader_compile"); - GLAD_GL_ARB_pipeline_statistics_query = has_ext("GL_ARB_pipeline_statistics_query"); - GLAD_GL_ARB_pixel_buffer_object = has_ext("GL_ARB_pixel_buffer_object"); - GLAD_GL_ARB_point_parameters = has_ext("GL_ARB_point_parameters"); - GLAD_GL_ARB_point_sprite = has_ext("GL_ARB_point_sprite"); - GLAD_GL_ARB_polygon_offset_clamp = has_ext("GL_ARB_polygon_offset_clamp"); - GLAD_GL_ARB_post_depth_coverage = has_ext("GL_ARB_post_depth_coverage"); - GLAD_GL_ARB_program_interface_query = has_ext("GL_ARB_program_interface_query"); - GLAD_GL_ARB_provoking_vertex = has_ext("GL_ARB_provoking_vertex"); - GLAD_GL_ARB_query_buffer_object = has_ext("GL_ARB_query_buffer_object"); - GLAD_GL_ARB_robust_buffer_access_behavior = has_ext("GL_ARB_robust_buffer_access_behavior"); - GLAD_GL_ARB_robustness = has_ext("GL_ARB_robustness"); - GLAD_GL_ARB_robustness_isolation = has_ext("GL_ARB_robustness_isolation"); - GLAD_GL_ARB_sample_locations = has_ext("GL_ARB_sample_locations"); - GLAD_GL_ARB_sample_shading = has_ext("GL_ARB_sample_shading"); - GLAD_GL_ARB_sampler_objects = has_ext("GL_ARB_sampler_objects"); - GLAD_GL_ARB_seamless_cube_map = has_ext("GL_ARB_seamless_cube_map"); - GLAD_GL_ARB_seamless_cubemap_per_texture = has_ext("GL_ARB_seamless_cubemap_per_texture"); - GLAD_GL_ARB_separate_shader_objects = has_ext("GL_ARB_separate_shader_objects"); - GLAD_GL_ARB_shader_atomic_counter_ops = has_ext("GL_ARB_shader_atomic_counter_ops"); - GLAD_GL_ARB_shader_atomic_counters = has_ext("GL_ARB_shader_atomic_counters"); - GLAD_GL_ARB_shader_ballot = has_ext("GL_ARB_shader_ballot"); - GLAD_GL_ARB_shader_bit_encoding = has_ext("GL_ARB_shader_bit_encoding"); - GLAD_GL_ARB_shader_clock = has_ext("GL_ARB_shader_clock"); - GLAD_GL_ARB_shader_draw_parameters = has_ext("GL_ARB_shader_draw_parameters"); - GLAD_GL_ARB_shader_group_vote = has_ext("GL_ARB_shader_group_vote"); - GLAD_GL_ARB_shader_image_load_store = has_ext("GL_ARB_shader_image_load_store"); - GLAD_GL_ARB_shader_image_size = has_ext("GL_ARB_shader_image_size"); - GLAD_GL_ARB_shader_objects = has_ext("GL_ARB_shader_objects"); - GLAD_GL_ARB_shader_precision = has_ext("GL_ARB_shader_precision"); - GLAD_GL_ARB_shader_stencil_export = has_ext("GL_ARB_shader_stencil_export"); - GLAD_GL_ARB_shader_storage_buffer_object = has_ext("GL_ARB_shader_storage_buffer_object"); - GLAD_GL_ARB_shader_subroutine = has_ext("GL_ARB_shader_subroutine"); - GLAD_GL_ARB_shader_texture_image_samples = has_ext("GL_ARB_shader_texture_image_samples"); - GLAD_GL_ARB_shader_texture_lod = has_ext("GL_ARB_shader_texture_lod"); - GLAD_GL_ARB_shader_viewport_layer_array = has_ext("GL_ARB_shader_viewport_layer_array"); - GLAD_GL_ARB_shading_language_100 = has_ext("GL_ARB_shading_language_100"); - GLAD_GL_ARB_shading_language_420pack = has_ext("GL_ARB_shading_language_420pack"); - GLAD_GL_ARB_shading_language_include = has_ext("GL_ARB_shading_language_include"); - GLAD_GL_ARB_shading_language_packing = has_ext("GL_ARB_shading_language_packing"); - GLAD_GL_ARB_shadow = has_ext("GL_ARB_shadow"); - GLAD_GL_ARB_shadow_ambient = has_ext("GL_ARB_shadow_ambient"); - GLAD_GL_ARB_sparse_buffer = has_ext("GL_ARB_sparse_buffer"); - GLAD_GL_ARB_sparse_texture = has_ext("GL_ARB_sparse_texture"); - GLAD_GL_ARB_sparse_texture2 = has_ext("GL_ARB_sparse_texture2"); - GLAD_GL_ARB_sparse_texture_clamp = has_ext("GL_ARB_sparse_texture_clamp"); - GLAD_GL_ARB_spirv_extensions = has_ext("GL_ARB_spirv_extensions"); - GLAD_GL_ARB_stencil_texturing = has_ext("GL_ARB_stencil_texturing"); - GLAD_GL_ARB_sync = has_ext("GL_ARB_sync"); - GLAD_GL_ARB_tessellation_shader = has_ext("GL_ARB_tessellation_shader"); - GLAD_GL_ARB_texture_barrier = has_ext("GL_ARB_texture_barrier"); - GLAD_GL_ARB_texture_border_clamp = has_ext("GL_ARB_texture_border_clamp"); - GLAD_GL_ARB_texture_buffer_object = has_ext("GL_ARB_texture_buffer_object"); - GLAD_GL_ARB_texture_buffer_object_rgb32 = has_ext("GL_ARB_texture_buffer_object_rgb32"); - GLAD_GL_ARB_texture_buffer_range = has_ext("GL_ARB_texture_buffer_range"); - GLAD_GL_ARB_texture_compression = has_ext("GL_ARB_texture_compression"); - GLAD_GL_ARB_texture_compression_bptc = has_ext("GL_ARB_texture_compression_bptc"); - GLAD_GL_ARB_texture_compression_rgtc = has_ext("GL_ARB_texture_compression_rgtc"); - GLAD_GL_ARB_texture_cube_map = has_ext("GL_ARB_texture_cube_map"); - GLAD_GL_ARB_texture_cube_map_array = has_ext("GL_ARB_texture_cube_map_array"); - GLAD_GL_ARB_texture_env_add = has_ext("GL_ARB_texture_env_add"); - GLAD_GL_ARB_texture_env_combine = has_ext("GL_ARB_texture_env_combine"); - GLAD_GL_ARB_texture_env_crossbar = has_ext("GL_ARB_texture_env_crossbar"); - GLAD_GL_ARB_texture_env_dot3 = has_ext("GL_ARB_texture_env_dot3"); - GLAD_GL_ARB_texture_filter_anisotropic = has_ext("GL_ARB_texture_filter_anisotropic"); - GLAD_GL_ARB_texture_filter_minmax = has_ext("GL_ARB_texture_filter_minmax"); - GLAD_GL_ARB_texture_float = has_ext("GL_ARB_texture_float"); - GLAD_GL_ARB_texture_gather = has_ext("GL_ARB_texture_gather"); - GLAD_GL_ARB_texture_mirror_clamp_to_edge = has_ext("GL_ARB_texture_mirror_clamp_to_edge"); - GLAD_GL_ARB_texture_mirrored_repeat = has_ext("GL_ARB_texture_mirrored_repeat"); - GLAD_GL_ARB_texture_multisample = has_ext("GL_ARB_texture_multisample"); - GLAD_GL_ARB_texture_non_power_of_two = has_ext("GL_ARB_texture_non_power_of_two"); - GLAD_GL_ARB_texture_query_levels = has_ext("GL_ARB_texture_query_levels"); - GLAD_GL_ARB_texture_query_lod = has_ext("GL_ARB_texture_query_lod"); - GLAD_GL_ARB_texture_rectangle = has_ext("GL_ARB_texture_rectangle"); - GLAD_GL_ARB_texture_rg = has_ext("GL_ARB_texture_rg"); - GLAD_GL_ARB_texture_rgb10_a2ui = has_ext("GL_ARB_texture_rgb10_a2ui"); - GLAD_GL_ARB_texture_stencil8 = has_ext("GL_ARB_texture_stencil8"); - GLAD_GL_ARB_texture_storage = has_ext("GL_ARB_texture_storage"); - GLAD_GL_ARB_texture_storage_multisample = has_ext("GL_ARB_texture_storage_multisample"); - GLAD_GL_ARB_texture_swizzle = has_ext("GL_ARB_texture_swizzle"); - GLAD_GL_ARB_texture_view = has_ext("GL_ARB_texture_view"); - GLAD_GL_ARB_timer_query = has_ext("GL_ARB_timer_query"); - GLAD_GL_ARB_transform_feedback2 = has_ext("GL_ARB_transform_feedback2"); - GLAD_GL_ARB_transform_feedback3 = has_ext("GL_ARB_transform_feedback3"); - GLAD_GL_ARB_transform_feedback_instanced = has_ext("GL_ARB_transform_feedback_instanced"); - GLAD_GL_ARB_transform_feedback_overflow_query = has_ext("GL_ARB_transform_feedback_overflow_query"); - GLAD_GL_ARB_transpose_matrix = has_ext("GL_ARB_transpose_matrix"); - GLAD_GL_ARB_uniform_buffer_object = has_ext("GL_ARB_uniform_buffer_object"); - GLAD_GL_ARB_vertex_array_bgra = has_ext("GL_ARB_vertex_array_bgra"); - GLAD_GL_ARB_vertex_array_object = has_ext("GL_ARB_vertex_array_object"); - GLAD_GL_ARB_vertex_attrib_64bit = has_ext("GL_ARB_vertex_attrib_64bit"); - GLAD_GL_ARB_vertex_attrib_binding = has_ext("GL_ARB_vertex_attrib_binding"); - GLAD_GL_ARB_vertex_blend = has_ext("GL_ARB_vertex_blend"); - GLAD_GL_ARB_vertex_buffer_object = has_ext("GL_ARB_vertex_buffer_object"); - GLAD_GL_ARB_vertex_program = has_ext("GL_ARB_vertex_program"); - GLAD_GL_ARB_vertex_shader = has_ext("GL_ARB_vertex_shader"); - GLAD_GL_ARB_vertex_type_10f_11f_11f_rev = has_ext("GL_ARB_vertex_type_10f_11f_11f_rev"); - GLAD_GL_ARB_vertex_type_2_10_10_10_rev = has_ext("GL_ARB_vertex_type_2_10_10_10_rev"); - GLAD_GL_ARB_viewport_array = has_ext("GL_ARB_viewport_array"); - GLAD_GL_ARB_window_pos = has_ext("GL_ARB_window_pos"); - GLAD_GL_ATI_draw_buffers = has_ext("GL_ATI_draw_buffers"); - GLAD_GL_ATI_element_array = has_ext("GL_ATI_element_array"); - GLAD_GL_ATI_envmap_bumpmap = has_ext("GL_ATI_envmap_bumpmap"); - GLAD_GL_ATI_fragment_shader = has_ext("GL_ATI_fragment_shader"); - GLAD_GL_ATI_map_object_buffer = has_ext("GL_ATI_map_object_buffer"); - GLAD_GL_ATI_meminfo = has_ext("GL_ATI_meminfo"); - GLAD_GL_ATI_pixel_format_float = has_ext("GL_ATI_pixel_format_float"); - GLAD_GL_ATI_pn_triangles = has_ext("GL_ATI_pn_triangles"); - GLAD_GL_ATI_separate_stencil = has_ext("GL_ATI_separate_stencil"); - GLAD_GL_ATI_text_fragment_shader = has_ext("GL_ATI_text_fragment_shader"); - GLAD_GL_ATI_texture_env_combine3 = has_ext("GL_ATI_texture_env_combine3"); - GLAD_GL_ATI_texture_float = has_ext("GL_ATI_texture_float"); - GLAD_GL_ATI_texture_mirror_once = has_ext("GL_ATI_texture_mirror_once"); - GLAD_GL_ATI_vertex_array_object = has_ext("GL_ATI_vertex_array_object"); - GLAD_GL_ATI_vertex_attrib_array_object = has_ext("GL_ATI_vertex_attrib_array_object"); - GLAD_GL_ATI_vertex_streams = has_ext("GL_ATI_vertex_streams"); - GLAD_GL_EXT_422_pixels = has_ext("GL_EXT_422_pixels"); - GLAD_GL_EXT_EGL_image_storage = has_ext("GL_EXT_EGL_image_storage"); - GLAD_GL_EXT_abgr = has_ext("GL_EXT_abgr"); - GLAD_GL_EXT_bgra = has_ext("GL_EXT_bgra"); - GLAD_GL_EXT_bindable_uniform = has_ext("GL_EXT_bindable_uniform"); - GLAD_GL_EXT_blend_color = has_ext("GL_EXT_blend_color"); - GLAD_GL_EXT_blend_equation_separate = has_ext("GL_EXT_blend_equation_separate"); - GLAD_GL_EXT_blend_func_separate = has_ext("GL_EXT_blend_func_separate"); - GLAD_GL_EXT_blend_logic_op = has_ext("GL_EXT_blend_logic_op"); - GLAD_GL_EXT_blend_minmax = has_ext("GL_EXT_blend_minmax"); - GLAD_GL_EXT_blend_subtract = has_ext("GL_EXT_blend_subtract"); - GLAD_GL_EXT_clip_volume_hint = has_ext("GL_EXT_clip_volume_hint"); - GLAD_GL_EXT_cmyka = has_ext("GL_EXT_cmyka"); - GLAD_GL_EXT_color_subtable = has_ext("GL_EXT_color_subtable"); - GLAD_GL_EXT_compiled_vertex_array = has_ext("GL_EXT_compiled_vertex_array"); - GLAD_GL_EXT_convolution = has_ext("GL_EXT_convolution"); - GLAD_GL_EXT_coordinate_frame = has_ext("GL_EXT_coordinate_frame"); - GLAD_GL_EXT_copy_texture = has_ext("GL_EXT_copy_texture"); - GLAD_GL_EXT_cull_vertex = has_ext("GL_EXT_cull_vertex"); - GLAD_GL_EXT_debug_label = has_ext("GL_EXT_debug_label"); - GLAD_GL_EXT_debug_marker = has_ext("GL_EXT_debug_marker"); - GLAD_GL_EXT_depth_bounds_test = has_ext("GL_EXT_depth_bounds_test"); - GLAD_GL_EXT_direct_state_access = has_ext("GL_EXT_direct_state_access"); - GLAD_GL_EXT_draw_buffers2 = has_ext("GL_EXT_draw_buffers2"); - GLAD_GL_EXT_draw_instanced = has_ext("GL_EXT_draw_instanced"); - GLAD_GL_EXT_draw_range_elements = has_ext("GL_EXT_draw_range_elements"); - GLAD_GL_EXT_external_buffer = has_ext("GL_EXT_external_buffer"); - GLAD_GL_EXT_fog_coord = has_ext("GL_EXT_fog_coord"); - GLAD_GL_EXT_framebuffer_blit = has_ext("GL_EXT_framebuffer_blit"); - GLAD_GL_EXT_framebuffer_multisample = has_ext("GL_EXT_framebuffer_multisample"); - GLAD_GL_EXT_framebuffer_multisample_blit_scaled = has_ext("GL_EXT_framebuffer_multisample_blit_scaled"); - GLAD_GL_EXT_framebuffer_object = has_ext("GL_EXT_framebuffer_object"); - GLAD_GL_EXT_framebuffer_sRGB = has_ext("GL_EXT_framebuffer_sRGB"); - GLAD_GL_EXT_geometry_shader4 = has_ext("GL_EXT_geometry_shader4"); - GLAD_GL_EXT_gpu_program_parameters = has_ext("GL_EXT_gpu_program_parameters"); - GLAD_GL_EXT_gpu_shader4 = has_ext("GL_EXT_gpu_shader4"); - GLAD_GL_EXT_histogram = has_ext("GL_EXT_histogram"); - GLAD_GL_EXT_index_array_formats = has_ext("GL_EXT_index_array_formats"); - GLAD_GL_EXT_index_func = has_ext("GL_EXT_index_func"); - GLAD_GL_EXT_index_material = has_ext("GL_EXT_index_material"); - GLAD_GL_EXT_index_texture = has_ext("GL_EXT_index_texture"); - GLAD_GL_EXT_light_texture = has_ext("GL_EXT_light_texture"); - GLAD_GL_EXT_memory_object = has_ext("GL_EXT_memory_object"); - GLAD_GL_EXT_memory_object_fd = has_ext("GL_EXT_memory_object_fd"); - GLAD_GL_EXT_memory_object_win32 = has_ext("GL_EXT_memory_object_win32"); - GLAD_GL_EXT_misc_attribute = has_ext("GL_EXT_misc_attribute"); - GLAD_GL_EXT_multi_draw_arrays = has_ext("GL_EXT_multi_draw_arrays"); - GLAD_GL_EXT_multisample = has_ext("GL_EXT_multisample"); - GLAD_GL_EXT_packed_depth_stencil = has_ext("GL_EXT_packed_depth_stencil"); - GLAD_GL_EXT_packed_float = has_ext("GL_EXT_packed_float"); - GLAD_GL_EXT_packed_pixels = has_ext("GL_EXT_packed_pixels"); - GLAD_GL_EXT_paletted_texture = has_ext("GL_EXT_paletted_texture"); - GLAD_GL_EXT_pixel_buffer_object = has_ext("GL_EXT_pixel_buffer_object"); - GLAD_GL_EXT_pixel_transform = has_ext("GL_EXT_pixel_transform"); - GLAD_GL_EXT_pixel_transform_color_table = has_ext("GL_EXT_pixel_transform_color_table"); - GLAD_GL_EXT_point_parameters = has_ext("GL_EXT_point_parameters"); - GLAD_GL_EXT_polygon_offset = has_ext("GL_EXT_polygon_offset"); - GLAD_GL_EXT_polygon_offset_clamp = has_ext("GL_EXT_polygon_offset_clamp"); - GLAD_GL_EXT_post_depth_coverage = has_ext("GL_EXT_post_depth_coverage"); - GLAD_GL_EXT_provoking_vertex = has_ext("GL_EXT_provoking_vertex"); - GLAD_GL_EXT_raster_multisample = has_ext("GL_EXT_raster_multisample"); - GLAD_GL_EXT_rescale_normal = has_ext("GL_EXT_rescale_normal"); - GLAD_GL_EXT_secondary_color = has_ext("GL_EXT_secondary_color"); - GLAD_GL_EXT_semaphore = has_ext("GL_EXT_semaphore"); - GLAD_GL_EXT_semaphore_fd = has_ext("GL_EXT_semaphore_fd"); - GLAD_GL_EXT_semaphore_win32 = has_ext("GL_EXT_semaphore_win32"); - GLAD_GL_EXT_separate_shader_objects = has_ext("GL_EXT_separate_shader_objects"); - GLAD_GL_EXT_separate_specular_color = has_ext("GL_EXT_separate_specular_color"); - GLAD_GL_EXT_shader_framebuffer_fetch = has_ext("GL_EXT_shader_framebuffer_fetch"); - GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent = has_ext("GL_EXT_shader_framebuffer_fetch_non_coherent"); - GLAD_GL_EXT_shader_image_load_formatted = has_ext("GL_EXT_shader_image_load_formatted"); - GLAD_GL_EXT_shader_image_load_store = has_ext("GL_EXT_shader_image_load_store"); - GLAD_GL_EXT_shader_integer_mix = has_ext("GL_EXT_shader_integer_mix"); - GLAD_GL_EXT_shadow_funcs = has_ext("GL_EXT_shadow_funcs"); - GLAD_GL_EXT_shared_texture_palette = has_ext("GL_EXT_shared_texture_palette"); - GLAD_GL_EXT_sparse_texture2 = has_ext("GL_EXT_sparse_texture2"); - GLAD_GL_EXT_stencil_clear_tag = has_ext("GL_EXT_stencil_clear_tag"); - GLAD_GL_EXT_stencil_two_side = has_ext("GL_EXT_stencil_two_side"); - GLAD_GL_EXT_stencil_wrap = has_ext("GL_EXT_stencil_wrap"); - GLAD_GL_EXT_subtexture = has_ext("GL_EXT_subtexture"); - GLAD_GL_EXT_texture = has_ext("GL_EXT_texture"); - GLAD_GL_EXT_texture3D = has_ext("GL_EXT_texture3D"); - GLAD_GL_EXT_texture_array = has_ext("GL_EXT_texture_array"); - GLAD_GL_EXT_texture_buffer_object = has_ext("GL_EXT_texture_buffer_object"); - GLAD_GL_EXT_texture_compression_latc = has_ext("GL_EXT_texture_compression_latc"); - GLAD_GL_EXT_texture_compression_rgtc = has_ext("GL_EXT_texture_compression_rgtc"); - GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc"); - GLAD_GL_EXT_texture_cube_map = has_ext("GL_EXT_texture_cube_map"); - GLAD_GL_EXT_texture_env_add = has_ext("GL_EXT_texture_env_add"); - GLAD_GL_EXT_texture_env_combine = has_ext("GL_EXT_texture_env_combine"); - GLAD_GL_EXT_texture_env_dot3 = has_ext("GL_EXT_texture_env_dot3"); - GLAD_GL_EXT_texture_filter_anisotropic = has_ext("GL_EXT_texture_filter_anisotropic"); - GLAD_GL_EXT_texture_filter_minmax = has_ext("GL_EXT_texture_filter_minmax"); - GLAD_GL_EXT_texture_integer = has_ext("GL_EXT_texture_integer"); - GLAD_GL_EXT_texture_lod_bias = has_ext("GL_EXT_texture_lod_bias"); - GLAD_GL_EXT_texture_mirror_clamp = has_ext("GL_EXT_texture_mirror_clamp"); - GLAD_GL_EXT_texture_object = has_ext("GL_EXT_texture_object"); - GLAD_GL_EXT_texture_perturb_normal = has_ext("GL_EXT_texture_perturb_normal"); - GLAD_GL_EXT_texture_sRGB = has_ext("GL_EXT_texture_sRGB"); - GLAD_GL_EXT_texture_sRGB_decode = has_ext("GL_EXT_texture_sRGB_decode"); - GLAD_GL_EXT_texture_shared_exponent = has_ext("GL_EXT_texture_shared_exponent"); - GLAD_GL_EXT_texture_snorm = has_ext("GL_EXT_texture_snorm"); - GLAD_GL_EXT_texture_swizzle = has_ext("GL_EXT_texture_swizzle"); - GLAD_GL_EXT_timer_query = has_ext("GL_EXT_timer_query"); - GLAD_GL_EXT_transform_feedback = has_ext("GL_EXT_transform_feedback"); - GLAD_GL_EXT_vertex_array = has_ext("GL_EXT_vertex_array"); - GLAD_GL_EXT_vertex_array_bgra = has_ext("GL_EXT_vertex_array_bgra"); - GLAD_GL_EXT_vertex_attrib_64bit = has_ext("GL_EXT_vertex_attrib_64bit"); - GLAD_GL_EXT_vertex_shader = has_ext("GL_EXT_vertex_shader"); - GLAD_GL_EXT_vertex_weighting = has_ext("GL_EXT_vertex_weighting"); - GLAD_GL_EXT_win32_keyed_mutex = has_ext("GL_EXT_win32_keyed_mutex"); - GLAD_GL_EXT_window_rectangles = has_ext("GL_EXT_window_rectangles"); - GLAD_GL_EXT_x11_sync_object = has_ext("GL_EXT_x11_sync_object"); - GLAD_GL_GREMEDY_frame_terminator = has_ext("GL_GREMEDY_frame_terminator"); - GLAD_GL_GREMEDY_string_marker = has_ext("GL_GREMEDY_string_marker"); - GLAD_GL_HP_convolution_border_modes = has_ext("GL_HP_convolution_border_modes"); - GLAD_GL_HP_image_transform = has_ext("GL_HP_image_transform"); - GLAD_GL_HP_occlusion_test = has_ext("GL_HP_occlusion_test"); - GLAD_GL_HP_texture_lighting = has_ext("GL_HP_texture_lighting"); - GLAD_GL_IBM_cull_vertex = has_ext("GL_IBM_cull_vertex"); - GLAD_GL_IBM_multimode_draw_arrays = has_ext("GL_IBM_multimode_draw_arrays"); - GLAD_GL_IBM_rasterpos_clip = has_ext("GL_IBM_rasterpos_clip"); - GLAD_GL_IBM_static_data = has_ext("GL_IBM_static_data"); - GLAD_GL_IBM_texture_mirrored_repeat = has_ext("GL_IBM_texture_mirrored_repeat"); - GLAD_GL_IBM_vertex_array_lists = has_ext("GL_IBM_vertex_array_lists"); - GLAD_GL_INGR_blend_func_separate = has_ext("GL_INGR_blend_func_separate"); - GLAD_GL_INGR_color_clamp = has_ext("GL_INGR_color_clamp"); - GLAD_GL_INGR_interlace_read = has_ext("GL_INGR_interlace_read"); - GLAD_GL_INTEL_blackhole_render = has_ext("GL_INTEL_blackhole_render"); - GLAD_GL_INTEL_conservative_rasterization = has_ext("GL_INTEL_conservative_rasterization"); - GLAD_GL_INTEL_fragment_shader_ordering = has_ext("GL_INTEL_fragment_shader_ordering"); - GLAD_GL_INTEL_framebuffer_CMAA = has_ext("GL_INTEL_framebuffer_CMAA"); - GLAD_GL_INTEL_map_texture = has_ext("GL_INTEL_map_texture"); - GLAD_GL_INTEL_parallel_arrays = has_ext("GL_INTEL_parallel_arrays"); - GLAD_GL_INTEL_performance_query = has_ext("GL_INTEL_performance_query"); - GLAD_GL_KHR_blend_equation_advanced = has_ext("GL_KHR_blend_equation_advanced"); - GLAD_GL_KHR_blend_equation_advanced_coherent = has_ext("GL_KHR_blend_equation_advanced_coherent"); - GLAD_GL_KHR_context_flush_control = has_ext("GL_KHR_context_flush_control"); - GLAD_GL_KHR_debug = has_ext("GL_KHR_debug"); - GLAD_GL_KHR_no_error = has_ext("GL_KHR_no_error"); - GLAD_GL_KHR_parallel_shader_compile = has_ext("GL_KHR_parallel_shader_compile"); - GLAD_GL_KHR_robust_buffer_access_behavior = has_ext("GL_KHR_robust_buffer_access_behavior"); - GLAD_GL_KHR_robustness = has_ext("GL_KHR_robustness"); - GLAD_GL_KHR_texture_compression_astc_hdr = has_ext("GL_KHR_texture_compression_astc_hdr"); - GLAD_GL_KHR_texture_compression_astc_ldr = has_ext("GL_KHR_texture_compression_astc_ldr"); - GLAD_GL_KHR_texture_compression_astc_sliced_3d = has_ext("GL_KHR_texture_compression_astc_sliced_3d"); - GLAD_GL_MESAX_texture_stack = has_ext("GL_MESAX_texture_stack"); - GLAD_GL_MESA_pack_invert = has_ext("GL_MESA_pack_invert"); - GLAD_GL_MESA_program_binary_formats = has_ext("GL_MESA_program_binary_formats"); - GLAD_GL_MESA_resize_buffers = has_ext("GL_MESA_resize_buffers"); - GLAD_GL_MESA_shader_integer_functions = has_ext("GL_MESA_shader_integer_functions"); - GLAD_GL_MESA_tile_raster_order = has_ext("GL_MESA_tile_raster_order"); - GLAD_GL_MESA_window_pos = has_ext("GL_MESA_window_pos"); - GLAD_GL_MESA_ycbcr_texture = has_ext("GL_MESA_ycbcr_texture"); - GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers = has_ext("GL_NVX_blend_equation_advanced_multi_draw_buffers"); - GLAD_GL_NVX_conditional_render = has_ext("GL_NVX_conditional_render"); - GLAD_GL_NVX_gpu_memory_info = has_ext("GL_NVX_gpu_memory_info"); - GLAD_GL_NVX_linked_gpu_multicast = has_ext("GL_NVX_linked_gpu_multicast"); - GLAD_GL_NV_alpha_to_coverage_dither_control = has_ext("GL_NV_alpha_to_coverage_dither_control"); - GLAD_GL_NV_bindless_multi_draw_indirect = has_ext("GL_NV_bindless_multi_draw_indirect"); - GLAD_GL_NV_bindless_multi_draw_indirect_count = has_ext("GL_NV_bindless_multi_draw_indirect_count"); - GLAD_GL_NV_bindless_texture = has_ext("GL_NV_bindless_texture"); - GLAD_GL_NV_blend_equation_advanced = has_ext("GL_NV_blend_equation_advanced"); - GLAD_GL_NV_blend_equation_advanced_coherent = has_ext("GL_NV_blend_equation_advanced_coherent"); - GLAD_GL_NV_blend_minmax_factor = has_ext("GL_NV_blend_minmax_factor"); - GLAD_GL_NV_blend_square = has_ext("GL_NV_blend_square"); - GLAD_GL_NV_clip_space_w_scaling = has_ext("GL_NV_clip_space_w_scaling"); - GLAD_GL_NV_command_list = has_ext("GL_NV_command_list"); - GLAD_GL_NV_compute_program5 = has_ext("GL_NV_compute_program5"); - GLAD_GL_NV_conditional_render = has_ext("GL_NV_conditional_render"); - GLAD_GL_NV_conservative_raster = has_ext("GL_NV_conservative_raster"); - GLAD_GL_NV_conservative_raster_dilate = has_ext("GL_NV_conservative_raster_dilate"); - GLAD_GL_NV_conservative_raster_pre_snap = has_ext("GL_NV_conservative_raster_pre_snap"); - GLAD_GL_NV_conservative_raster_pre_snap_triangles = has_ext("GL_NV_conservative_raster_pre_snap_triangles"); - GLAD_GL_NV_conservative_raster_underestimation = has_ext("GL_NV_conservative_raster_underestimation"); - GLAD_GL_NV_copy_depth_to_color = has_ext("GL_NV_copy_depth_to_color"); - GLAD_GL_NV_copy_image = has_ext("GL_NV_copy_image"); - GLAD_GL_NV_deep_texture3D = has_ext("GL_NV_deep_texture3D"); - GLAD_GL_NV_depth_buffer_float = has_ext("GL_NV_depth_buffer_float"); - GLAD_GL_NV_depth_clamp = has_ext("GL_NV_depth_clamp"); - GLAD_GL_NV_draw_texture = has_ext("GL_NV_draw_texture"); - GLAD_GL_NV_draw_vulkan_image = has_ext("GL_NV_draw_vulkan_image"); - GLAD_GL_NV_evaluators = has_ext("GL_NV_evaluators"); - GLAD_GL_NV_explicit_multisample = has_ext("GL_NV_explicit_multisample"); - GLAD_GL_NV_fence = has_ext("GL_NV_fence"); - GLAD_GL_NV_fill_rectangle = has_ext("GL_NV_fill_rectangle"); - GLAD_GL_NV_float_buffer = has_ext("GL_NV_float_buffer"); - GLAD_GL_NV_fog_distance = has_ext("GL_NV_fog_distance"); - GLAD_GL_NV_fragment_coverage_to_color = has_ext("GL_NV_fragment_coverage_to_color"); - GLAD_GL_NV_fragment_program = has_ext("GL_NV_fragment_program"); - GLAD_GL_NV_fragment_program2 = has_ext("GL_NV_fragment_program2"); - GLAD_GL_NV_fragment_program4 = has_ext("GL_NV_fragment_program4"); - GLAD_GL_NV_fragment_program_option = has_ext("GL_NV_fragment_program_option"); - GLAD_GL_NV_fragment_shader_interlock = has_ext("GL_NV_fragment_shader_interlock"); - GLAD_GL_NV_framebuffer_mixed_samples = has_ext("GL_NV_framebuffer_mixed_samples"); - GLAD_GL_NV_framebuffer_multisample_coverage = has_ext("GL_NV_framebuffer_multisample_coverage"); - GLAD_GL_NV_geometry_program4 = has_ext("GL_NV_geometry_program4"); - GLAD_GL_NV_geometry_shader4 = has_ext("GL_NV_geometry_shader4"); - GLAD_GL_NV_geometry_shader_passthrough = has_ext("GL_NV_geometry_shader_passthrough"); - GLAD_GL_NV_gpu_multicast = has_ext("GL_NV_gpu_multicast"); - GLAD_GL_NV_gpu_program4 = has_ext("GL_NV_gpu_program4"); - GLAD_GL_NV_gpu_program5 = has_ext("GL_NV_gpu_program5"); - GLAD_GL_NV_gpu_program5_mem_extended = has_ext("GL_NV_gpu_program5_mem_extended"); - GLAD_GL_NV_gpu_shader5 = has_ext("GL_NV_gpu_shader5"); - GLAD_GL_NV_half_float = has_ext("GL_NV_half_float"); - GLAD_GL_NV_internalformat_sample_query = has_ext("GL_NV_internalformat_sample_query"); - GLAD_GL_NV_light_max_exponent = has_ext("GL_NV_light_max_exponent"); - GLAD_GL_NV_multisample_coverage = has_ext("GL_NV_multisample_coverage"); - GLAD_GL_NV_multisample_filter_hint = has_ext("GL_NV_multisample_filter_hint"); - GLAD_GL_NV_occlusion_query = has_ext("GL_NV_occlusion_query"); - GLAD_GL_NV_packed_depth_stencil = has_ext("GL_NV_packed_depth_stencil"); - GLAD_GL_NV_parameter_buffer_object = has_ext("GL_NV_parameter_buffer_object"); - GLAD_GL_NV_parameter_buffer_object2 = has_ext("GL_NV_parameter_buffer_object2"); - GLAD_GL_NV_path_rendering = has_ext("GL_NV_path_rendering"); - GLAD_GL_NV_path_rendering_shared_edge = has_ext("GL_NV_path_rendering_shared_edge"); - GLAD_GL_NV_pixel_data_range = has_ext("GL_NV_pixel_data_range"); - GLAD_GL_NV_point_sprite = has_ext("GL_NV_point_sprite"); - GLAD_GL_NV_present_video = has_ext("GL_NV_present_video"); - GLAD_GL_NV_primitive_restart = has_ext("GL_NV_primitive_restart"); - GLAD_GL_NV_query_resource = has_ext("GL_NV_query_resource"); - GLAD_GL_NV_query_resource_tag = has_ext("GL_NV_query_resource_tag"); - GLAD_GL_NV_register_combiners = has_ext("GL_NV_register_combiners"); - GLAD_GL_NV_register_combiners2 = has_ext("GL_NV_register_combiners2"); - GLAD_GL_NV_robustness_video_memory_purge = has_ext("GL_NV_robustness_video_memory_purge"); - GLAD_GL_NV_sample_locations = has_ext("GL_NV_sample_locations"); - GLAD_GL_NV_sample_mask_override_coverage = has_ext("GL_NV_sample_mask_override_coverage"); - GLAD_GL_NV_shader_atomic_counters = has_ext("GL_NV_shader_atomic_counters"); - GLAD_GL_NV_shader_atomic_float = has_ext("GL_NV_shader_atomic_float"); - GLAD_GL_NV_shader_atomic_float64 = has_ext("GL_NV_shader_atomic_float64"); - GLAD_GL_NV_shader_atomic_fp16_vector = has_ext("GL_NV_shader_atomic_fp16_vector"); - GLAD_GL_NV_shader_atomic_int64 = has_ext("GL_NV_shader_atomic_int64"); - GLAD_GL_NV_shader_buffer_load = has_ext("GL_NV_shader_buffer_load"); - GLAD_GL_NV_shader_buffer_store = has_ext("GL_NV_shader_buffer_store"); - GLAD_GL_NV_shader_storage_buffer_object = has_ext("GL_NV_shader_storage_buffer_object"); - GLAD_GL_NV_shader_thread_group = has_ext("GL_NV_shader_thread_group"); - GLAD_GL_NV_shader_thread_shuffle = has_ext("GL_NV_shader_thread_shuffle"); - GLAD_GL_NV_stereo_view_rendering = has_ext("GL_NV_stereo_view_rendering"); - GLAD_GL_NV_tessellation_program5 = has_ext("GL_NV_tessellation_program5"); - GLAD_GL_NV_texgen_emboss = has_ext("GL_NV_texgen_emboss"); - GLAD_GL_NV_texgen_reflection = has_ext("GL_NV_texgen_reflection"); - GLAD_GL_NV_texture_barrier = has_ext("GL_NV_texture_barrier"); - GLAD_GL_NV_texture_compression_vtc = has_ext("GL_NV_texture_compression_vtc"); - GLAD_GL_NV_texture_env_combine4 = has_ext("GL_NV_texture_env_combine4"); - GLAD_GL_NV_texture_expand_normal = has_ext("GL_NV_texture_expand_normal"); - GLAD_GL_NV_texture_multisample = has_ext("GL_NV_texture_multisample"); - GLAD_GL_NV_texture_rectangle = has_ext("GL_NV_texture_rectangle"); - GLAD_GL_NV_texture_rectangle_compressed = has_ext("GL_NV_texture_rectangle_compressed"); - GLAD_GL_NV_texture_shader = has_ext("GL_NV_texture_shader"); - GLAD_GL_NV_texture_shader2 = has_ext("GL_NV_texture_shader2"); - GLAD_GL_NV_texture_shader3 = has_ext("GL_NV_texture_shader3"); - GLAD_GL_NV_transform_feedback = has_ext("GL_NV_transform_feedback"); - GLAD_GL_NV_transform_feedback2 = has_ext("GL_NV_transform_feedback2"); - GLAD_GL_NV_uniform_buffer_unified_memory = has_ext("GL_NV_uniform_buffer_unified_memory"); - GLAD_GL_NV_vdpau_interop = has_ext("GL_NV_vdpau_interop"); - GLAD_GL_NV_vertex_array_range = has_ext("GL_NV_vertex_array_range"); - GLAD_GL_NV_vertex_array_range2 = has_ext("GL_NV_vertex_array_range2"); - GLAD_GL_NV_vertex_attrib_integer_64bit = has_ext("GL_NV_vertex_attrib_integer_64bit"); - GLAD_GL_NV_vertex_buffer_unified_memory = has_ext("GL_NV_vertex_buffer_unified_memory"); - GLAD_GL_NV_vertex_program = has_ext("GL_NV_vertex_program"); - GLAD_GL_NV_vertex_program1_1 = has_ext("GL_NV_vertex_program1_1"); - GLAD_GL_NV_vertex_program2 = has_ext("GL_NV_vertex_program2"); - GLAD_GL_NV_vertex_program2_option = has_ext("GL_NV_vertex_program2_option"); - GLAD_GL_NV_vertex_program3 = has_ext("GL_NV_vertex_program3"); - GLAD_GL_NV_vertex_program4 = has_ext("GL_NV_vertex_program4"); - GLAD_GL_NV_video_capture = has_ext("GL_NV_video_capture"); - GLAD_GL_NV_viewport_array2 = has_ext("GL_NV_viewport_array2"); - GLAD_GL_NV_viewport_swizzle = has_ext("GL_NV_viewport_swizzle"); - GLAD_GL_OES_byte_coordinates = has_ext("GL_OES_byte_coordinates"); - GLAD_GL_OES_compressed_paletted_texture = has_ext("GL_OES_compressed_paletted_texture"); - GLAD_GL_OES_fixed_point = has_ext("GL_OES_fixed_point"); - GLAD_GL_OES_query_matrix = has_ext("GL_OES_query_matrix"); - GLAD_GL_OES_read_format = has_ext("GL_OES_read_format"); - GLAD_GL_OES_single_precision = has_ext("GL_OES_single_precision"); - GLAD_GL_OML_interlace = has_ext("GL_OML_interlace"); - GLAD_GL_OML_resample = has_ext("GL_OML_resample"); - GLAD_GL_OML_subsample = has_ext("GL_OML_subsample"); - GLAD_GL_OVR_multiview = has_ext("GL_OVR_multiview"); - GLAD_GL_OVR_multiview2 = has_ext("GL_OVR_multiview2"); - GLAD_GL_PGI_misc_hints = has_ext("GL_PGI_misc_hints"); - GLAD_GL_PGI_vertex_hints = has_ext("GL_PGI_vertex_hints"); - GLAD_GL_REND_screen_coordinates = has_ext("GL_REND_screen_coordinates"); - GLAD_GL_S3_s3tc = has_ext("GL_S3_s3tc"); - GLAD_GL_SGIS_detail_texture = has_ext("GL_SGIS_detail_texture"); - GLAD_GL_SGIS_fog_function = has_ext("GL_SGIS_fog_function"); - GLAD_GL_SGIS_generate_mipmap = has_ext("GL_SGIS_generate_mipmap"); - GLAD_GL_SGIS_multisample = has_ext("GL_SGIS_multisample"); - GLAD_GL_SGIS_pixel_texture = has_ext("GL_SGIS_pixel_texture"); - GLAD_GL_SGIS_point_line_texgen = has_ext("GL_SGIS_point_line_texgen"); - GLAD_GL_SGIS_point_parameters = has_ext("GL_SGIS_point_parameters"); - GLAD_GL_SGIS_sharpen_texture = has_ext("GL_SGIS_sharpen_texture"); - GLAD_GL_SGIS_texture4D = has_ext("GL_SGIS_texture4D"); - GLAD_GL_SGIS_texture_border_clamp = has_ext("GL_SGIS_texture_border_clamp"); - GLAD_GL_SGIS_texture_color_mask = has_ext("GL_SGIS_texture_color_mask"); - GLAD_GL_SGIS_texture_edge_clamp = has_ext("GL_SGIS_texture_edge_clamp"); - GLAD_GL_SGIS_texture_filter4 = has_ext("GL_SGIS_texture_filter4"); - GLAD_GL_SGIS_texture_lod = has_ext("GL_SGIS_texture_lod"); - GLAD_GL_SGIS_texture_select = has_ext("GL_SGIS_texture_select"); - GLAD_GL_SGIX_async = has_ext("GL_SGIX_async"); - GLAD_GL_SGIX_async_histogram = has_ext("GL_SGIX_async_histogram"); - GLAD_GL_SGIX_async_pixel = has_ext("GL_SGIX_async_pixel"); - GLAD_GL_SGIX_blend_alpha_minmax = has_ext("GL_SGIX_blend_alpha_minmax"); - GLAD_GL_SGIX_calligraphic_fragment = has_ext("GL_SGIX_calligraphic_fragment"); - GLAD_GL_SGIX_clipmap = has_ext("GL_SGIX_clipmap"); - GLAD_GL_SGIX_convolution_accuracy = has_ext("GL_SGIX_convolution_accuracy"); - GLAD_GL_SGIX_depth_pass_instrument = has_ext("GL_SGIX_depth_pass_instrument"); - GLAD_GL_SGIX_depth_texture = has_ext("GL_SGIX_depth_texture"); - GLAD_GL_SGIX_flush_raster = has_ext("GL_SGIX_flush_raster"); - GLAD_GL_SGIX_fog_offset = has_ext("GL_SGIX_fog_offset"); - GLAD_GL_SGIX_fragment_lighting = has_ext("GL_SGIX_fragment_lighting"); - GLAD_GL_SGIX_framezoom = has_ext("GL_SGIX_framezoom"); - GLAD_GL_SGIX_igloo_interface = has_ext("GL_SGIX_igloo_interface"); - GLAD_GL_SGIX_instruments = has_ext("GL_SGIX_instruments"); - GLAD_GL_SGIX_interlace = has_ext("GL_SGIX_interlace"); - GLAD_GL_SGIX_ir_instrument1 = has_ext("GL_SGIX_ir_instrument1"); - GLAD_GL_SGIX_list_priority = has_ext("GL_SGIX_list_priority"); - GLAD_GL_SGIX_pixel_texture = has_ext("GL_SGIX_pixel_texture"); - GLAD_GL_SGIX_pixel_tiles = has_ext("GL_SGIX_pixel_tiles"); - GLAD_GL_SGIX_polynomial_ffd = has_ext("GL_SGIX_polynomial_ffd"); - GLAD_GL_SGIX_reference_plane = has_ext("GL_SGIX_reference_plane"); - GLAD_GL_SGIX_resample = has_ext("GL_SGIX_resample"); - GLAD_GL_SGIX_scalebias_hint = has_ext("GL_SGIX_scalebias_hint"); - GLAD_GL_SGIX_shadow = has_ext("GL_SGIX_shadow"); - GLAD_GL_SGIX_shadow_ambient = has_ext("GL_SGIX_shadow_ambient"); - GLAD_GL_SGIX_sprite = has_ext("GL_SGIX_sprite"); - GLAD_GL_SGIX_subsample = has_ext("GL_SGIX_subsample"); - GLAD_GL_SGIX_tag_sample_buffer = has_ext("GL_SGIX_tag_sample_buffer"); - GLAD_GL_SGIX_texture_add_env = has_ext("GL_SGIX_texture_add_env"); - GLAD_GL_SGIX_texture_coordinate_clamp = has_ext("GL_SGIX_texture_coordinate_clamp"); - GLAD_GL_SGIX_texture_lod_bias = has_ext("GL_SGIX_texture_lod_bias"); - GLAD_GL_SGIX_texture_multi_buffer = has_ext("GL_SGIX_texture_multi_buffer"); - GLAD_GL_SGIX_texture_scale_bias = has_ext("GL_SGIX_texture_scale_bias"); - GLAD_GL_SGIX_vertex_preclip = has_ext("GL_SGIX_vertex_preclip"); - GLAD_GL_SGIX_ycrcb = has_ext("GL_SGIX_ycrcb"); - GLAD_GL_SGIX_ycrcb_subsample = has_ext("GL_SGIX_ycrcb_subsample"); - GLAD_GL_SGIX_ycrcba = has_ext("GL_SGIX_ycrcba"); - GLAD_GL_SGI_color_matrix = has_ext("GL_SGI_color_matrix"); - GLAD_GL_SGI_color_table = has_ext("GL_SGI_color_table"); - GLAD_GL_SGI_texture_color_table = has_ext("GL_SGI_texture_color_table"); - GLAD_GL_SUNX_constant_data = has_ext("GL_SUNX_constant_data"); - GLAD_GL_SUN_convolution_border_modes = has_ext("GL_SUN_convolution_border_modes"); - GLAD_GL_SUN_global_alpha = has_ext("GL_SUN_global_alpha"); - GLAD_GL_SUN_mesh_array = has_ext("GL_SUN_mesh_array"); - GLAD_GL_SUN_slice_accum = has_ext("GL_SUN_slice_accum"); - GLAD_GL_SUN_triangle_list = has_ext("GL_SUN_triangle_list"); - GLAD_GL_SUN_vertex = has_ext("GL_SUN_vertex"); - GLAD_GL_WIN_phong_shading = has_ext("GL_WIN_phong_shading"); - GLAD_GL_WIN_specular_fog = has_ext("GL_WIN_specular_fog"); - free_exts(); - return 1; + +static GLADapiproc glad_gl_get_proc_from_userptr(void *userptr, const char* name) { + return (GLAD_GNUC_EXTENSION (GLADapiproc (*)(const char *name)) userptr)(name); } -static void find_coreGL(void) { +static int glad_gl_find_extensions_gl( int version) { + const char *exts = NULL; + unsigned int num_exts_i = 0; + char **exts_i = NULL; + if (!glad_gl_get_extensions(version, &exts, &num_exts_i, &exts_i)) return 0; - /* Thank you @elmindreda - * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 - * https://github.com/glfw/glfw/blob/master/src/context.c#L36 - */ - int i, major, minor; + GLAD_GL_3DFX_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_3DFX_multisample"); + GLAD_GL_3DFX_tbuffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_3DFX_tbuffer"); + GLAD_GL_3DFX_texture_compression_FXT1 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_3DFX_texture_compression_FXT1"); + GLAD_GL_AMD_blend_minmax_factor = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_blend_minmax_factor"); + GLAD_GL_AMD_conservative_depth = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_conservative_depth"); + GLAD_GL_AMD_debug_output = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_debug_output"); + GLAD_GL_AMD_depth_clamp_separate = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_depth_clamp_separate"); + GLAD_GL_AMD_draw_buffers_blend = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_draw_buffers_blend"); + GLAD_GL_AMD_framebuffer_multisample_advanced = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_framebuffer_multisample_advanced"); + GLAD_GL_AMD_framebuffer_sample_positions = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_framebuffer_sample_positions"); + GLAD_GL_AMD_gcn_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_gcn_shader"); + GLAD_GL_AMD_gpu_shader_half_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_gpu_shader_half_float"); + GLAD_GL_AMD_gpu_shader_int16 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_gpu_shader_int16"); + GLAD_GL_AMD_gpu_shader_int64 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_gpu_shader_int64"); + GLAD_GL_AMD_interleaved_elements = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_interleaved_elements"); + GLAD_GL_AMD_multi_draw_indirect = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_multi_draw_indirect"); + GLAD_GL_AMD_name_gen_delete = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_name_gen_delete"); + GLAD_GL_AMD_occlusion_query_event = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_occlusion_query_event"); + GLAD_GL_AMD_performance_monitor = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_performance_monitor"); + GLAD_GL_AMD_pinned_memory = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_pinned_memory"); + GLAD_GL_AMD_query_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_query_buffer_object"); + GLAD_GL_AMD_sample_positions = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_sample_positions"); + GLAD_GL_AMD_seamless_cubemap_per_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_seamless_cubemap_per_texture"); + GLAD_GL_AMD_shader_atomic_counter_ops = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_shader_atomic_counter_ops"); + GLAD_GL_AMD_shader_ballot = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_shader_ballot"); + GLAD_GL_AMD_shader_explicit_vertex_parameter = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_shader_explicit_vertex_parameter"); + GLAD_GL_AMD_shader_gpu_shader_half_float_fetch = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_shader_gpu_shader_half_float_fetch"); + GLAD_GL_AMD_shader_image_load_store_lod = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_shader_image_load_store_lod"); + GLAD_GL_AMD_shader_stencil_export = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_shader_stencil_export"); + GLAD_GL_AMD_shader_trinary_minmax = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_shader_trinary_minmax"); + GLAD_GL_AMD_sparse_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_sparse_texture"); + GLAD_GL_AMD_stencil_operation_extended = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_stencil_operation_extended"); + GLAD_GL_AMD_texture_gather_bias_lod = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_texture_gather_bias_lod"); + GLAD_GL_AMD_texture_texture4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_texture_texture4"); + GLAD_GL_AMD_transform_feedback3_lines_triangles = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_transform_feedback3_lines_triangles"); + GLAD_GL_AMD_transform_feedback4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_transform_feedback4"); + GLAD_GL_AMD_vertex_shader_layer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_vertex_shader_layer"); + GLAD_GL_AMD_vertex_shader_tessellator = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_vertex_shader_tessellator"); + GLAD_GL_AMD_vertex_shader_viewport_index = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_AMD_vertex_shader_viewport_index"); + GLAD_GL_APPLE_aux_depth_stencil = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_aux_depth_stencil"); + GLAD_GL_APPLE_client_storage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_client_storage"); + GLAD_GL_APPLE_element_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_element_array"); + GLAD_GL_APPLE_fence = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_fence"); + GLAD_GL_APPLE_float_pixels = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_float_pixels"); + GLAD_GL_APPLE_flush_buffer_range = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_flush_buffer_range"); + GLAD_GL_APPLE_object_purgeable = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_object_purgeable"); + GLAD_GL_APPLE_rgb_422 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_rgb_422"); + GLAD_GL_APPLE_row_bytes = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_row_bytes"); + GLAD_GL_APPLE_specular_vector = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_specular_vector"); + GLAD_GL_APPLE_texture_range = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_texture_range"); + GLAD_GL_APPLE_transform_hint = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_transform_hint"); + GLAD_GL_APPLE_vertex_array_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_vertex_array_object"); + GLAD_GL_APPLE_vertex_array_range = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_vertex_array_range"); + GLAD_GL_APPLE_vertex_program_evaluators = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_vertex_program_evaluators"); + GLAD_GL_APPLE_ycbcr_422 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_APPLE_ycbcr_422"); + GLAD_GL_ARB_ES2_compatibility = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_ES2_compatibility"); + GLAD_GL_ARB_ES3_1_compatibility = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_ES3_1_compatibility"); + GLAD_GL_ARB_ES3_2_compatibility = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_ES3_2_compatibility"); + GLAD_GL_ARB_ES3_compatibility = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_ES3_compatibility"); + GLAD_GL_ARB_arrays_of_arrays = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_arrays_of_arrays"); + GLAD_GL_ARB_base_instance = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_base_instance"); + GLAD_GL_ARB_bindless_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_bindless_texture"); + GLAD_GL_ARB_blend_func_extended = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_blend_func_extended"); + GLAD_GL_ARB_buffer_storage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_buffer_storage"); + GLAD_GL_ARB_cl_event = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_cl_event"); + GLAD_GL_ARB_clear_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_clear_buffer_object"); + GLAD_GL_ARB_clear_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_clear_texture"); + GLAD_GL_ARB_clip_control = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_clip_control"); + GLAD_GL_ARB_color_buffer_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_color_buffer_float"); + GLAD_GL_ARB_compatibility = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_compatibility"); + GLAD_GL_ARB_compressed_texture_pixel_storage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_compressed_texture_pixel_storage"); + GLAD_GL_ARB_compute_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_compute_shader"); + GLAD_GL_ARB_compute_variable_group_size = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_compute_variable_group_size"); + GLAD_GL_ARB_conditional_render_inverted = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_conditional_render_inverted"); + GLAD_GL_ARB_conservative_depth = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_conservative_depth"); + GLAD_GL_ARB_copy_buffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_copy_buffer"); + GLAD_GL_ARB_copy_image = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_copy_image"); + GLAD_GL_ARB_cull_distance = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_cull_distance"); + GLAD_GL_ARB_debug_output = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_debug_output"); + GLAD_GL_ARB_depth_buffer_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_depth_buffer_float"); + GLAD_GL_ARB_depth_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_depth_clamp"); + GLAD_GL_ARB_depth_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_depth_texture"); + GLAD_GL_ARB_derivative_control = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_derivative_control"); + GLAD_GL_ARB_direct_state_access = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_direct_state_access"); + GLAD_GL_ARB_draw_buffers = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_draw_buffers"); + GLAD_GL_ARB_draw_buffers_blend = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_draw_buffers_blend"); + GLAD_GL_ARB_draw_elements_base_vertex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_draw_elements_base_vertex"); + GLAD_GL_ARB_draw_indirect = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_draw_indirect"); + GLAD_GL_ARB_draw_instanced = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_draw_instanced"); + GLAD_GL_ARB_enhanced_layouts = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_enhanced_layouts"); + GLAD_GL_ARB_explicit_attrib_location = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_explicit_attrib_location"); + GLAD_GL_ARB_explicit_uniform_location = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_explicit_uniform_location"); + GLAD_GL_ARB_fragment_coord_conventions = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_fragment_coord_conventions"); + GLAD_GL_ARB_fragment_layer_viewport = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_fragment_layer_viewport"); + GLAD_GL_ARB_fragment_program = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_fragment_program"); + GLAD_GL_ARB_fragment_program_shadow = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_fragment_program_shadow"); + GLAD_GL_ARB_fragment_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_fragment_shader"); + GLAD_GL_ARB_fragment_shader_interlock = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_fragment_shader_interlock"); + GLAD_GL_ARB_framebuffer_no_attachments = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_framebuffer_no_attachments"); + GLAD_GL_ARB_framebuffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_framebuffer_object"); + GLAD_GL_ARB_framebuffer_sRGB = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_framebuffer_sRGB"); + GLAD_GL_ARB_geometry_shader4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_geometry_shader4"); + GLAD_GL_ARB_get_program_binary = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_get_program_binary"); + GLAD_GL_ARB_get_texture_sub_image = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_get_texture_sub_image"); + GLAD_GL_ARB_gl_spirv = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_gl_spirv"); + GLAD_GL_ARB_gpu_shader5 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_gpu_shader5"); + GLAD_GL_ARB_gpu_shader_fp64 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_gpu_shader_fp64"); + GLAD_GL_ARB_gpu_shader_int64 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_gpu_shader_int64"); + GLAD_GL_ARB_half_float_pixel = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_half_float_pixel"); + GLAD_GL_ARB_half_float_vertex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_half_float_vertex"); + GLAD_GL_ARB_imaging = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_imaging"); + GLAD_GL_ARB_indirect_parameters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_indirect_parameters"); + GLAD_GL_ARB_instanced_arrays = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_instanced_arrays"); + GLAD_GL_ARB_internalformat_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_internalformat_query"); + GLAD_GL_ARB_internalformat_query2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_internalformat_query2"); + GLAD_GL_ARB_invalidate_subdata = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_invalidate_subdata"); + GLAD_GL_ARB_map_buffer_alignment = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_map_buffer_alignment"); + GLAD_GL_ARB_map_buffer_range = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_map_buffer_range"); + GLAD_GL_ARB_matrix_palette = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_matrix_palette"); + GLAD_GL_ARB_multi_bind = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_multi_bind"); + GLAD_GL_ARB_multi_draw_indirect = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_multi_draw_indirect"); + GLAD_GL_ARB_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_multisample"); + GLAD_GL_ARB_multitexture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_multitexture"); + GLAD_GL_ARB_occlusion_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_occlusion_query"); + GLAD_GL_ARB_occlusion_query2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_occlusion_query2"); + GLAD_GL_ARB_parallel_shader_compile = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_parallel_shader_compile"); + GLAD_GL_ARB_pipeline_statistics_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_pipeline_statistics_query"); + GLAD_GL_ARB_pixel_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_pixel_buffer_object"); + GLAD_GL_ARB_point_parameters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_point_parameters"); + GLAD_GL_ARB_point_sprite = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_point_sprite"); + GLAD_GL_ARB_polygon_offset_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_polygon_offset_clamp"); + GLAD_GL_ARB_post_depth_coverage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_post_depth_coverage"); + GLAD_GL_ARB_program_interface_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_program_interface_query"); + GLAD_GL_ARB_provoking_vertex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_provoking_vertex"); + GLAD_GL_ARB_query_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_query_buffer_object"); + GLAD_GL_ARB_robust_buffer_access_behavior = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_robust_buffer_access_behavior"); + GLAD_GL_ARB_robustness = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_robustness"); + GLAD_GL_ARB_robustness_isolation = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_robustness_isolation"); + GLAD_GL_ARB_sample_locations = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sample_locations"); + GLAD_GL_ARB_sample_shading = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sample_shading"); + GLAD_GL_ARB_sampler_objects = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sampler_objects"); + GLAD_GL_ARB_seamless_cube_map = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_seamless_cube_map"); + GLAD_GL_ARB_seamless_cubemap_per_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_seamless_cubemap_per_texture"); + GLAD_GL_ARB_separate_shader_objects = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_separate_shader_objects"); + GLAD_GL_ARB_shader_atomic_counter_ops = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_atomic_counter_ops"); + GLAD_GL_ARB_shader_atomic_counters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_atomic_counters"); + GLAD_GL_ARB_shader_ballot = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_ballot"); + GLAD_GL_ARB_shader_bit_encoding = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_bit_encoding"); + GLAD_GL_ARB_shader_clock = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_clock"); + GLAD_GL_ARB_shader_draw_parameters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_draw_parameters"); + GLAD_GL_ARB_shader_group_vote = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_group_vote"); + GLAD_GL_ARB_shader_image_load_store = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_image_load_store"); + GLAD_GL_ARB_shader_image_size = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_image_size"); + GLAD_GL_ARB_shader_objects = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_objects"); + GLAD_GL_ARB_shader_precision = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_precision"); + GLAD_GL_ARB_shader_stencil_export = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_stencil_export"); + GLAD_GL_ARB_shader_storage_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_storage_buffer_object"); + GLAD_GL_ARB_shader_subroutine = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_subroutine"); + GLAD_GL_ARB_shader_texture_image_samples = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_texture_image_samples"); + GLAD_GL_ARB_shader_texture_lod = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_texture_lod"); + GLAD_GL_ARB_shader_viewport_layer_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shader_viewport_layer_array"); + GLAD_GL_ARB_shading_language_100 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shading_language_100"); + GLAD_GL_ARB_shading_language_420pack = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shading_language_420pack"); + GLAD_GL_ARB_shading_language_include = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shading_language_include"); + GLAD_GL_ARB_shading_language_packing = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shading_language_packing"); + GLAD_GL_ARB_shadow = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shadow"); + GLAD_GL_ARB_shadow_ambient = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_shadow_ambient"); + GLAD_GL_ARB_sparse_buffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sparse_buffer"); + GLAD_GL_ARB_sparse_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sparse_texture"); + GLAD_GL_ARB_sparse_texture2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sparse_texture2"); + GLAD_GL_ARB_sparse_texture_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sparse_texture_clamp"); + GLAD_GL_ARB_spirv_extensions = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_spirv_extensions"); + GLAD_GL_ARB_stencil_texturing = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_stencil_texturing"); + GLAD_GL_ARB_sync = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_sync"); + GLAD_GL_ARB_tessellation_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_tessellation_shader"); + GLAD_GL_ARB_texture_barrier = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_barrier"); + GLAD_GL_ARB_texture_border_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_border_clamp"); + GLAD_GL_ARB_texture_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_buffer_object"); + GLAD_GL_ARB_texture_buffer_object_rgb32 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_buffer_object_rgb32"); + GLAD_GL_ARB_texture_buffer_range = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_buffer_range"); + GLAD_GL_ARB_texture_compression = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_compression"); + GLAD_GL_ARB_texture_compression_bptc = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_compression_bptc"); + GLAD_GL_ARB_texture_compression_rgtc = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_compression_rgtc"); + GLAD_GL_ARB_texture_cube_map = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_cube_map"); + GLAD_GL_ARB_texture_cube_map_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_cube_map_array"); + GLAD_GL_ARB_texture_env_add = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_env_add"); + GLAD_GL_ARB_texture_env_combine = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_env_combine"); + GLAD_GL_ARB_texture_env_crossbar = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_env_crossbar"); + GLAD_GL_ARB_texture_env_dot3 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_env_dot3"); + GLAD_GL_ARB_texture_filter_anisotropic = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_filter_anisotropic"); + GLAD_GL_ARB_texture_filter_minmax = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_filter_minmax"); + GLAD_GL_ARB_texture_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_float"); + GLAD_GL_ARB_texture_gather = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_gather"); + GLAD_GL_ARB_texture_mirror_clamp_to_edge = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_mirror_clamp_to_edge"); + GLAD_GL_ARB_texture_mirrored_repeat = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_mirrored_repeat"); + GLAD_GL_ARB_texture_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_multisample"); + GLAD_GL_ARB_texture_non_power_of_two = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_non_power_of_two"); + GLAD_GL_ARB_texture_query_levels = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_query_levels"); + GLAD_GL_ARB_texture_query_lod = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_query_lod"); + GLAD_GL_ARB_texture_rectangle = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_rectangle"); + GLAD_GL_ARB_texture_rg = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_rg"); + GLAD_GL_ARB_texture_rgb10_a2ui = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_rgb10_a2ui"); + GLAD_GL_ARB_texture_stencil8 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_stencil8"); + GLAD_GL_ARB_texture_storage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_storage"); + GLAD_GL_ARB_texture_storage_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_storage_multisample"); + GLAD_GL_ARB_texture_swizzle = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_swizzle"); + GLAD_GL_ARB_texture_view = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_view"); + GLAD_GL_ARB_timer_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_timer_query"); + GLAD_GL_ARB_transform_feedback2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_transform_feedback2"); + GLAD_GL_ARB_transform_feedback3 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_transform_feedback3"); + GLAD_GL_ARB_transform_feedback_instanced = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_transform_feedback_instanced"); + GLAD_GL_ARB_transform_feedback_overflow_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_transform_feedback_overflow_query"); + GLAD_GL_ARB_transpose_matrix = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_transpose_matrix"); + GLAD_GL_ARB_uniform_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_uniform_buffer_object"); + GLAD_GL_ARB_vertex_array_bgra = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_array_bgra"); + GLAD_GL_ARB_vertex_array_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_array_object"); + GLAD_GL_ARB_vertex_attrib_64bit = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_attrib_64bit"); + GLAD_GL_ARB_vertex_attrib_binding = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_attrib_binding"); + GLAD_GL_ARB_vertex_blend = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_blend"); + GLAD_GL_ARB_vertex_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_buffer_object"); + GLAD_GL_ARB_vertex_program = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_program"); + GLAD_GL_ARB_vertex_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_shader"); + GLAD_GL_ARB_vertex_type_10f_11f_11f_rev = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_type_10f_11f_11f_rev"); + GLAD_GL_ARB_vertex_type_2_10_10_10_rev = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_vertex_type_2_10_10_10_rev"); + GLAD_GL_ARB_viewport_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_viewport_array"); + GLAD_GL_ARB_window_pos = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_window_pos"); + GLAD_GL_ATI_draw_buffers = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_draw_buffers"); + GLAD_GL_ATI_element_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_element_array"); + GLAD_GL_ATI_envmap_bumpmap = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_envmap_bumpmap"); + GLAD_GL_ATI_fragment_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_fragment_shader"); + GLAD_GL_ATI_map_object_buffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_map_object_buffer"); + GLAD_GL_ATI_meminfo = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_meminfo"); + GLAD_GL_ATI_pixel_format_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_pixel_format_float"); + GLAD_GL_ATI_pn_triangles = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_pn_triangles"); + GLAD_GL_ATI_separate_stencil = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_separate_stencil"); + GLAD_GL_ATI_text_fragment_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_text_fragment_shader"); + GLAD_GL_ATI_texture_env_combine3 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_texture_env_combine3"); + GLAD_GL_ATI_texture_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_texture_float"); + GLAD_GL_ATI_texture_mirror_once = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_texture_mirror_once"); + GLAD_GL_ATI_vertex_array_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_vertex_array_object"); + GLAD_GL_ATI_vertex_attrib_array_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_vertex_attrib_array_object"); + GLAD_GL_ATI_vertex_streams = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ATI_vertex_streams"); + GLAD_GL_EXT_422_pixels = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_422_pixels"); + GLAD_GL_EXT_EGL_image_storage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_EGL_image_storage"); + GLAD_GL_EXT_EGL_sync = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_EGL_sync"); + GLAD_GL_EXT_abgr = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_abgr"); + GLAD_GL_EXT_bgra = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_bgra"); + GLAD_GL_EXT_bindable_uniform = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_bindable_uniform"); + GLAD_GL_EXT_blend_color = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_blend_color"); + GLAD_GL_EXT_blend_equation_separate = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_blend_equation_separate"); + GLAD_GL_EXT_blend_func_separate = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_blend_func_separate"); + GLAD_GL_EXT_blend_logic_op = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_blend_logic_op"); + GLAD_GL_EXT_blend_minmax = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_blend_minmax"); + GLAD_GL_EXT_blend_subtract = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_blend_subtract"); + GLAD_GL_EXT_clip_volume_hint = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_clip_volume_hint"); + GLAD_GL_EXT_cmyka = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_cmyka"); + GLAD_GL_EXT_color_subtable = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_color_subtable"); + GLAD_GL_EXT_compiled_vertex_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_compiled_vertex_array"); + GLAD_GL_EXT_convolution = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_convolution"); + GLAD_GL_EXT_coordinate_frame = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_coordinate_frame"); + GLAD_GL_EXT_copy_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_copy_texture"); + GLAD_GL_EXT_cull_vertex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_cull_vertex"); + GLAD_GL_EXT_debug_label = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_debug_label"); + GLAD_GL_EXT_debug_marker = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_debug_marker"); + GLAD_GL_EXT_depth_bounds_test = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_depth_bounds_test"); + GLAD_GL_EXT_direct_state_access = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_direct_state_access"); + GLAD_GL_EXT_draw_buffers2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_draw_buffers2"); + GLAD_GL_EXT_draw_instanced = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_draw_instanced"); + GLAD_GL_EXT_draw_range_elements = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_draw_range_elements"); + GLAD_GL_EXT_external_buffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_external_buffer"); + GLAD_GL_EXT_fog_coord = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_fog_coord"); + GLAD_GL_EXT_framebuffer_blit = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_framebuffer_blit"); + GLAD_GL_EXT_framebuffer_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_framebuffer_multisample"); + GLAD_GL_EXT_framebuffer_multisample_blit_scaled = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_framebuffer_multisample_blit_scaled"); + GLAD_GL_EXT_framebuffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_framebuffer_object"); + GLAD_GL_EXT_framebuffer_sRGB = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_framebuffer_sRGB"); + GLAD_GL_EXT_geometry_shader4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_geometry_shader4"); + GLAD_GL_EXT_gpu_program_parameters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_gpu_program_parameters"); + GLAD_GL_EXT_gpu_shader4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_gpu_shader4"); + GLAD_GL_EXT_histogram = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_histogram"); + GLAD_GL_EXT_index_array_formats = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_index_array_formats"); + GLAD_GL_EXT_index_func = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_index_func"); + GLAD_GL_EXT_index_material = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_index_material"); + GLAD_GL_EXT_index_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_index_texture"); + GLAD_GL_EXT_light_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_light_texture"); + GLAD_GL_EXT_memory_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_memory_object"); + GLAD_GL_EXT_memory_object_fd = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_memory_object_fd"); + GLAD_GL_EXT_memory_object_win32 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_memory_object_win32"); + GLAD_GL_EXT_misc_attribute = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_misc_attribute"); + GLAD_GL_EXT_multi_draw_arrays = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_multi_draw_arrays"); + GLAD_GL_EXT_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_multisample"); + GLAD_GL_EXT_multiview_tessellation_geometry_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_multiview_tessellation_geometry_shader"); + GLAD_GL_EXT_multiview_texture_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_multiview_texture_multisample"); + GLAD_GL_EXT_multiview_timer_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_multiview_timer_query"); + GLAD_GL_EXT_packed_depth_stencil = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_packed_depth_stencil"); + GLAD_GL_EXT_packed_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_packed_float"); + GLAD_GL_EXT_packed_pixels = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_packed_pixels"); + GLAD_GL_EXT_paletted_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_paletted_texture"); + GLAD_GL_EXT_pixel_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_pixel_buffer_object"); + GLAD_GL_EXT_pixel_transform = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_pixel_transform"); + GLAD_GL_EXT_pixel_transform_color_table = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_pixel_transform_color_table"); + GLAD_GL_EXT_point_parameters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_point_parameters"); + GLAD_GL_EXT_polygon_offset = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_polygon_offset"); + GLAD_GL_EXT_polygon_offset_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_polygon_offset_clamp"); + GLAD_GL_EXT_post_depth_coverage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_post_depth_coverage"); + GLAD_GL_EXT_provoking_vertex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_provoking_vertex"); + GLAD_GL_EXT_raster_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_raster_multisample"); + GLAD_GL_EXT_rescale_normal = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_rescale_normal"); + GLAD_GL_EXT_secondary_color = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_secondary_color"); + GLAD_GL_EXT_semaphore = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_semaphore"); + GLAD_GL_EXT_semaphore_fd = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_semaphore_fd"); + GLAD_GL_EXT_semaphore_win32 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_semaphore_win32"); + GLAD_GL_EXT_separate_shader_objects = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_separate_shader_objects"); + GLAD_GL_EXT_separate_specular_color = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_separate_specular_color"); + GLAD_GL_EXT_shader_framebuffer_fetch = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shader_framebuffer_fetch"); + GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shader_framebuffer_fetch_non_coherent"); + GLAD_GL_EXT_shader_image_load_formatted = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shader_image_load_formatted"); + GLAD_GL_EXT_shader_image_load_store = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shader_image_load_store"); + GLAD_GL_EXT_shader_integer_mix = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shader_integer_mix"); + GLAD_GL_EXT_shader_samples_identical = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shader_samples_identical"); + GLAD_GL_EXT_shadow_funcs = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shadow_funcs"); + GLAD_GL_EXT_shared_texture_palette = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_shared_texture_palette"); + GLAD_GL_EXT_sparse_texture2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_sparse_texture2"); + GLAD_GL_EXT_stencil_clear_tag = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_stencil_clear_tag"); + GLAD_GL_EXT_stencil_two_side = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_stencil_two_side"); + GLAD_GL_EXT_stencil_wrap = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_stencil_wrap"); + GLAD_GL_EXT_subtexture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_subtexture"); + GLAD_GL_EXT_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture"); + GLAD_GL_EXT_texture3D = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture3D"); + GLAD_GL_EXT_texture_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_array"); + GLAD_GL_EXT_texture_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_buffer_object"); + GLAD_GL_EXT_texture_compression_latc = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_compression_latc"); + GLAD_GL_EXT_texture_compression_rgtc = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_compression_rgtc"); + GLAD_GL_EXT_texture_compression_s3tc = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_compression_s3tc"); + GLAD_GL_EXT_texture_cube_map = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_cube_map"); + GLAD_GL_EXT_texture_env_add = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_env_add"); + GLAD_GL_EXT_texture_env_combine = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_env_combine"); + GLAD_GL_EXT_texture_env_dot3 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_env_dot3"); + GLAD_GL_EXT_texture_filter_anisotropic = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_filter_anisotropic"); + GLAD_GL_EXT_texture_filter_minmax = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_filter_minmax"); + GLAD_GL_EXT_texture_integer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_integer"); + GLAD_GL_EXT_texture_lod_bias = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_lod_bias"); + GLAD_GL_EXT_texture_mirror_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_mirror_clamp"); + GLAD_GL_EXT_texture_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_object"); + GLAD_GL_EXT_texture_perturb_normal = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_perturb_normal"); + GLAD_GL_EXT_texture_sRGB = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_sRGB"); + GLAD_GL_EXT_texture_sRGB_R8 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_sRGB_R8"); + GLAD_GL_EXT_texture_sRGB_RG8 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_sRGB_RG8"); + GLAD_GL_EXT_texture_sRGB_decode = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_sRGB_decode"); + GLAD_GL_EXT_texture_shadow_lod = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_shadow_lod"); + GLAD_GL_EXT_texture_shared_exponent = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_shared_exponent"); + GLAD_GL_EXT_texture_snorm = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_snorm"); + GLAD_GL_EXT_texture_storage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_storage"); + GLAD_GL_EXT_texture_swizzle = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_texture_swizzle"); + GLAD_GL_EXT_timer_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_timer_query"); + GLAD_GL_EXT_transform_feedback = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_transform_feedback"); + GLAD_GL_EXT_vertex_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_vertex_array"); + GLAD_GL_EXT_vertex_array_bgra = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_vertex_array_bgra"); + GLAD_GL_EXT_vertex_attrib_64bit = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_vertex_attrib_64bit"); + GLAD_GL_EXT_vertex_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_vertex_shader"); + GLAD_GL_EXT_vertex_weighting = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_vertex_weighting"); + GLAD_GL_EXT_win32_keyed_mutex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_win32_keyed_mutex"); + GLAD_GL_EXT_window_rectangles = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_window_rectangles"); + GLAD_GL_EXT_x11_sync_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_EXT_x11_sync_object"); + GLAD_GL_GREMEDY_frame_terminator = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_GREMEDY_frame_terminator"); + GLAD_GL_GREMEDY_string_marker = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_GREMEDY_string_marker"); + GLAD_GL_HP_convolution_border_modes = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_HP_convolution_border_modes"); + GLAD_GL_HP_image_transform = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_HP_image_transform"); + GLAD_GL_HP_occlusion_test = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_HP_occlusion_test"); + GLAD_GL_HP_texture_lighting = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_HP_texture_lighting"); + GLAD_GL_IBM_cull_vertex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_IBM_cull_vertex"); + GLAD_GL_IBM_multimode_draw_arrays = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_IBM_multimode_draw_arrays"); + GLAD_GL_IBM_rasterpos_clip = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_IBM_rasterpos_clip"); + GLAD_GL_IBM_static_data = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_IBM_static_data"); + GLAD_GL_IBM_texture_mirrored_repeat = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_IBM_texture_mirrored_repeat"); + GLAD_GL_IBM_vertex_array_lists = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_IBM_vertex_array_lists"); + GLAD_GL_INGR_blend_func_separate = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INGR_blend_func_separate"); + GLAD_GL_INGR_color_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INGR_color_clamp"); + GLAD_GL_INGR_interlace_read = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INGR_interlace_read"); + GLAD_GL_INTEL_blackhole_render = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INTEL_blackhole_render"); + GLAD_GL_INTEL_conservative_rasterization = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INTEL_conservative_rasterization"); + GLAD_GL_INTEL_fragment_shader_ordering = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INTEL_fragment_shader_ordering"); + GLAD_GL_INTEL_framebuffer_CMAA = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INTEL_framebuffer_CMAA"); + GLAD_GL_INTEL_map_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INTEL_map_texture"); + GLAD_GL_INTEL_parallel_arrays = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INTEL_parallel_arrays"); + GLAD_GL_INTEL_performance_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_INTEL_performance_query"); + GLAD_GL_KHR_blend_equation_advanced = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_blend_equation_advanced"); + GLAD_GL_KHR_blend_equation_advanced_coherent = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_blend_equation_advanced_coherent"); + GLAD_GL_KHR_context_flush_control = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_context_flush_control"); + GLAD_GL_KHR_debug = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_debug"); + GLAD_GL_KHR_no_error = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_no_error"); + GLAD_GL_KHR_parallel_shader_compile = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_parallel_shader_compile"); + GLAD_GL_KHR_robust_buffer_access_behavior = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_robust_buffer_access_behavior"); + GLAD_GL_KHR_robustness = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_robustness"); + GLAD_GL_KHR_shader_subgroup = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_shader_subgroup"); + GLAD_GL_KHR_texture_compression_astc_hdr = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_texture_compression_astc_hdr"); + GLAD_GL_KHR_texture_compression_astc_ldr = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_texture_compression_astc_ldr"); + GLAD_GL_KHR_texture_compression_astc_sliced_3d = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_texture_compression_astc_sliced_3d"); + GLAD_GL_MESAX_texture_stack = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESAX_texture_stack"); + GLAD_GL_MESA_framebuffer_flip_x = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_framebuffer_flip_x"); + GLAD_GL_MESA_framebuffer_flip_y = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_framebuffer_flip_y"); + GLAD_GL_MESA_framebuffer_swap_xy = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_framebuffer_swap_xy"); + GLAD_GL_MESA_pack_invert = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_pack_invert"); + GLAD_GL_MESA_program_binary_formats = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_program_binary_formats"); + GLAD_GL_MESA_resize_buffers = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_resize_buffers"); + GLAD_GL_MESA_shader_integer_functions = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_shader_integer_functions"); + GLAD_GL_MESA_tile_raster_order = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_tile_raster_order"); + GLAD_GL_MESA_window_pos = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_window_pos"); + GLAD_GL_MESA_ycbcr_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_MESA_ycbcr_texture"); + GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NVX_blend_equation_advanced_multi_draw_buffers"); + GLAD_GL_NVX_conditional_render = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NVX_conditional_render"); + GLAD_GL_NVX_gpu_memory_info = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NVX_gpu_memory_info"); + GLAD_GL_NVX_gpu_multicast2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NVX_gpu_multicast2"); + GLAD_GL_NVX_linked_gpu_multicast = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NVX_linked_gpu_multicast"); + GLAD_GL_NVX_progress_fence = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NVX_progress_fence"); + GLAD_GL_NV_alpha_to_coverage_dither_control = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_alpha_to_coverage_dither_control"); + GLAD_GL_NV_bindless_multi_draw_indirect = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_bindless_multi_draw_indirect"); + GLAD_GL_NV_bindless_multi_draw_indirect_count = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_bindless_multi_draw_indirect_count"); + GLAD_GL_NV_bindless_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_bindless_texture"); + GLAD_GL_NV_blend_equation_advanced = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_blend_equation_advanced"); + GLAD_GL_NV_blend_equation_advanced_coherent = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_blend_equation_advanced_coherent"); + GLAD_GL_NV_blend_minmax_factor = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_blend_minmax_factor"); + GLAD_GL_NV_blend_square = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_blend_square"); + GLAD_GL_NV_clip_space_w_scaling = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_clip_space_w_scaling"); + GLAD_GL_NV_command_list = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_command_list"); + GLAD_GL_NV_compute_program5 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_compute_program5"); + GLAD_GL_NV_compute_shader_derivatives = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_compute_shader_derivatives"); + GLAD_GL_NV_conditional_render = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_conditional_render"); + GLAD_GL_NV_conservative_raster = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_conservative_raster"); + GLAD_GL_NV_conservative_raster_dilate = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_conservative_raster_dilate"); + GLAD_GL_NV_conservative_raster_pre_snap = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_conservative_raster_pre_snap"); + GLAD_GL_NV_conservative_raster_pre_snap_triangles = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_conservative_raster_pre_snap_triangles"); + GLAD_GL_NV_conservative_raster_underestimation = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_conservative_raster_underestimation"); + GLAD_GL_NV_copy_depth_to_color = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_copy_depth_to_color"); + GLAD_GL_NV_copy_image = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_copy_image"); + GLAD_GL_NV_deep_texture3D = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_deep_texture3D"); + GLAD_GL_NV_depth_buffer_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_depth_buffer_float"); + GLAD_GL_NV_depth_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_depth_clamp"); + GLAD_GL_NV_draw_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_draw_texture"); + GLAD_GL_NV_draw_vulkan_image = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_draw_vulkan_image"); + GLAD_GL_NV_evaluators = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_evaluators"); + GLAD_GL_NV_explicit_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_explicit_multisample"); + GLAD_GL_NV_fence = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fence"); + GLAD_GL_NV_fill_rectangle = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fill_rectangle"); + GLAD_GL_NV_float_buffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_float_buffer"); + GLAD_GL_NV_fog_distance = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fog_distance"); + GLAD_GL_NV_fragment_coverage_to_color = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fragment_coverage_to_color"); + GLAD_GL_NV_fragment_program = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fragment_program"); + GLAD_GL_NV_fragment_program2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fragment_program2"); + GLAD_GL_NV_fragment_program4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fragment_program4"); + GLAD_GL_NV_fragment_program_option = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fragment_program_option"); + GLAD_GL_NV_fragment_shader_barycentric = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fragment_shader_barycentric"); + GLAD_GL_NV_fragment_shader_interlock = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_fragment_shader_interlock"); + GLAD_GL_NV_framebuffer_mixed_samples = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_framebuffer_mixed_samples"); + GLAD_GL_NV_framebuffer_multisample_coverage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_framebuffer_multisample_coverage"); + GLAD_GL_NV_geometry_program4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_geometry_program4"); + GLAD_GL_NV_geometry_shader4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_geometry_shader4"); + GLAD_GL_NV_geometry_shader_passthrough = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_geometry_shader_passthrough"); + GLAD_GL_NV_gpu_multicast = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_gpu_multicast"); + GLAD_GL_NV_gpu_program4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_gpu_program4"); + GLAD_GL_NV_gpu_program5 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_gpu_program5"); + GLAD_GL_NV_gpu_program5_mem_extended = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_gpu_program5_mem_extended"); + GLAD_GL_NV_gpu_shader5 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_gpu_shader5"); + GLAD_GL_NV_half_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_half_float"); + GLAD_GL_NV_internalformat_sample_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_internalformat_sample_query"); + GLAD_GL_NV_light_max_exponent = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_light_max_exponent"); + GLAD_GL_NV_memory_attachment = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_memory_attachment"); + GLAD_GL_NV_memory_object_sparse = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_memory_object_sparse"); + GLAD_GL_NV_mesh_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_mesh_shader"); + GLAD_GL_NV_multisample_coverage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_multisample_coverage"); + GLAD_GL_NV_multisample_filter_hint = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_multisample_filter_hint"); + GLAD_GL_NV_occlusion_query = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_occlusion_query"); + GLAD_GL_NV_packed_depth_stencil = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_packed_depth_stencil"); + GLAD_GL_NV_parameter_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_parameter_buffer_object"); + GLAD_GL_NV_parameter_buffer_object2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_parameter_buffer_object2"); + GLAD_GL_NV_path_rendering = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_path_rendering"); + GLAD_GL_NV_path_rendering_shared_edge = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_path_rendering_shared_edge"); + GLAD_GL_NV_pixel_data_range = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_pixel_data_range"); + GLAD_GL_NV_point_sprite = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_point_sprite"); + GLAD_GL_NV_present_video = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_present_video"); + GLAD_GL_NV_primitive_restart = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_primitive_restart"); + GLAD_GL_NV_primitive_shading_rate = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_primitive_shading_rate"); + GLAD_GL_NV_query_resource = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_query_resource"); + GLAD_GL_NV_query_resource_tag = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_query_resource_tag"); + GLAD_GL_NV_register_combiners = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_register_combiners"); + GLAD_GL_NV_register_combiners2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_register_combiners2"); + GLAD_GL_NV_representative_fragment_test = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_representative_fragment_test"); + GLAD_GL_NV_robustness_video_memory_purge = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_robustness_video_memory_purge"); + GLAD_GL_NV_sample_locations = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_sample_locations"); + GLAD_GL_NV_sample_mask_override_coverage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_sample_mask_override_coverage"); + GLAD_GL_NV_scissor_exclusive = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_scissor_exclusive"); + GLAD_GL_NV_shader_atomic_counters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_atomic_counters"); + GLAD_GL_NV_shader_atomic_float = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_atomic_float"); + GLAD_GL_NV_shader_atomic_float64 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_atomic_float64"); + GLAD_GL_NV_shader_atomic_fp16_vector = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_atomic_fp16_vector"); + GLAD_GL_NV_shader_atomic_int64 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_atomic_int64"); + GLAD_GL_NV_shader_buffer_load = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_buffer_load"); + GLAD_GL_NV_shader_buffer_store = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_buffer_store"); + GLAD_GL_NV_shader_storage_buffer_object = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_storage_buffer_object"); + GLAD_GL_NV_shader_subgroup_partitioned = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_subgroup_partitioned"); + GLAD_GL_NV_shader_texture_footprint = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_texture_footprint"); + GLAD_GL_NV_shader_thread_group = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_thread_group"); + GLAD_GL_NV_shader_thread_shuffle = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shader_thread_shuffle"); + GLAD_GL_NV_shading_rate_image = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_shading_rate_image"); + GLAD_GL_NV_stereo_view_rendering = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_stereo_view_rendering"); + GLAD_GL_NV_tessellation_program5 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_tessellation_program5"); + GLAD_GL_NV_texgen_emboss = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texgen_emboss"); + GLAD_GL_NV_texgen_reflection = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texgen_reflection"); + GLAD_GL_NV_texture_barrier = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_barrier"); + GLAD_GL_NV_texture_compression_vtc = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_compression_vtc"); + GLAD_GL_NV_texture_env_combine4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_env_combine4"); + GLAD_GL_NV_texture_expand_normal = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_expand_normal"); + GLAD_GL_NV_texture_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_multisample"); + GLAD_GL_NV_texture_rectangle = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_rectangle"); + GLAD_GL_NV_texture_rectangle_compressed = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_rectangle_compressed"); + GLAD_GL_NV_texture_shader = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_shader"); + GLAD_GL_NV_texture_shader2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_shader2"); + GLAD_GL_NV_texture_shader3 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_texture_shader3"); + GLAD_GL_NV_timeline_semaphore = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_timeline_semaphore"); + GLAD_GL_NV_transform_feedback = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_transform_feedback"); + GLAD_GL_NV_transform_feedback2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_transform_feedback2"); + GLAD_GL_NV_uniform_buffer_unified_memory = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_uniform_buffer_unified_memory"); + GLAD_GL_NV_vdpau_interop = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vdpau_interop"); + GLAD_GL_NV_vdpau_interop2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vdpau_interop2"); + GLAD_GL_NV_vertex_array_range = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_array_range"); + GLAD_GL_NV_vertex_array_range2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_array_range2"); + GLAD_GL_NV_vertex_attrib_integer_64bit = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_attrib_integer_64bit"); + GLAD_GL_NV_vertex_buffer_unified_memory = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_buffer_unified_memory"); + GLAD_GL_NV_vertex_program = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_program"); + GLAD_GL_NV_vertex_program1_1 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_program1_1"); + GLAD_GL_NV_vertex_program2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_program2"); + GLAD_GL_NV_vertex_program2_option = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_program2_option"); + GLAD_GL_NV_vertex_program3 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_program3"); + GLAD_GL_NV_vertex_program4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_vertex_program4"); + GLAD_GL_NV_video_capture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_video_capture"); + GLAD_GL_NV_viewport_array2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_viewport_array2"); + GLAD_GL_NV_viewport_swizzle = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_NV_viewport_swizzle"); + GLAD_GL_OES_byte_coordinates = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OES_byte_coordinates"); + GLAD_GL_OES_compressed_paletted_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OES_compressed_paletted_texture"); + GLAD_GL_OES_fixed_point = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OES_fixed_point"); + GLAD_GL_OES_query_matrix = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OES_query_matrix"); + GLAD_GL_OES_read_format = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OES_read_format"); + GLAD_GL_OES_single_precision = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OES_single_precision"); + GLAD_GL_OML_interlace = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OML_interlace"); + GLAD_GL_OML_resample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OML_resample"); + GLAD_GL_OML_subsample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OML_subsample"); + GLAD_GL_OVR_multiview = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OVR_multiview"); + GLAD_GL_OVR_multiview2 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_OVR_multiview2"); + GLAD_GL_PGI_misc_hints = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_PGI_misc_hints"); + GLAD_GL_PGI_vertex_hints = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_PGI_vertex_hints"); + GLAD_GL_REND_screen_coordinates = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_REND_screen_coordinates"); + GLAD_GL_S3_s3tc = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_S3_s3tc"); + GLAD_GL_SGIS_detail_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_detail_texture"); + GLAD_GL_SGIS_fog_function = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_fog_function"); + GLAD_GL_SGIS_generate_mipmap = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_generate_mipmap"); + GLAD_GL_SGIS_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_multisample"); + GLAD_GL_SGIS_pixel_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_pixel_texture"); + GLAD_GL_SGIS_point_line_texgen = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_point_line_texgen"); + GLAD_GL_SGIS_point_parameters = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_point_parameters"); + GLAD_GL_SGIS_sharpen_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_sharpen_texture"); + GLAD_GL_SGIS_texture4D = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_texture4D"); + GLAD_GL_SGIS_texture_border_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_texture_border_clamp"); + GLAD_GL_SGIS_texture_color_mask = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_texture_color_mask"); + GLAD_GL_SGIS_texture_edge_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_texture_edge_clamp"); + GLAD_GL_SGIS_texture_filter4 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_texture_filter4"); + GLAD_GL_SGIS_texture_lod = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_texture_lod"); + GLAD_GL_SGIS_texture_select = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIS_texture_select"); + GLAD_GL_SGIX_async = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_async"); + GLAD_GL_SGIX_async_histogram = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_async_histogram"); + GLAD_GL_SGIX_async_pixel = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_async_pixel"); + GLAD_GL_SGIX_blend_alpha_minmax = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_blend_alpha_minmax"); + GLAD_GL_SGIX_calligraphic_fragment = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_calligraphic_fragment"); + GLAD_GL_SGIX_clipmap = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_clipmap"); + GLAD_GL_SGIX_convolution_accuracy = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_convolution_accuracy"); + GLAD_GL_SGIX_depth_pass_instrument = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_depth_pass_instrument"); + GLAD_GL_SGIX_depth_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_depth_texture"); + GLAD_GL_SGIX_flush_raster = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_flush_raster"); + GLAD_GL_SGIX_fog_offset = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_fog_offset"); + GLAD_GL_SGIX_fragment_lighting = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_fragment_lighting"); + GLAD_GL_SGIX_framezoom = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_framezoom"); + GLAD_GL_SGIX_igloo_interface = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_igloo_interface"); + GLAD_GL_SGIX_instruments = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_instruments"); + GLAD_GL_SGIX_interlace = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_interlace"); + GLAD_GL_SGIX_ir_instrument1 = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_ir_instrument1"); + GLAD_GL_SGIX_list_priority = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_list_priority"); + GLAD_GL_SGIX_pixel_texture = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_pixel_texture"); + GLAD_GL_SGIX_pixel_tiles = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_pixel_tiles"); + GLAD_GL_SGIX_polynomial_ffd = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_polynomial_ffd"); + GLAD_GL_SGIX_reference_plane = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_reference_plane"); + GLAD_GL_SGIX_resample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_resample"); + GLAD_GL_SGIX_scalebias_hint = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_scalebias_hint"); + GLAD_GL_SGIX_shadow = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_shadow"); + GLAD_GL_SGIX_shadow_ambient = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_shadow_ambient"); + GLAD_GL_SGIX_sprite = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_sprite"); + GLAD_GL_SGIX_subsample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_subsample"); + GLAD_GL_SGIX_tag_sample_buffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_tag_sample_buffer"); + GLAD_GL_SGIX_texture_add_env = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_texture_add_env"); + GLAD_GL_SGIX_texture_coordinate_clamp = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_texture_coordinate_clamp"); + GLAD_GL_SGIX_texture_lod_bias = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_texture_lod_bias"); + GLAD_GL_SGIX_texture_multi_buffer = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_texture_multi_buffer"); + GLAD_GL_SGIX_texture_scale_bias = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_texture_scale_bias"); + GLAD_GL_SGIX_vertex_preclip = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_vertex_preclip"); + GLAD_GL_SGIX_ycrcb = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_ycrcb"); + GLAD_GL_SGIX_ycrcb_subsample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_ycrcb_subsample"); + GLAD_GL_SGIX_ycrcba = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGIX_ycrcba"); + GLAD_GL_SGI_color_matrix = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGI_color_matrix"); + GLAD_GL_SGI_color_table = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGI_color_table"); + GLAD_GL_SGI_texture_color_table = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SGI_texture_color_table"); + GLAD_GL_SUNX_constant_data = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SUNX_constant_data"); + GLAD_GL_SUN_convolution_border_modes = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SUN_convolution_border_modes"); + GLAD_GL_SUN_global_alpha = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SUN_global_alpha"); + GLAD_GL_SUN_mesh_array = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SUN_mesh_array"); + GLAD_GL_SUN_slice_accum = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SUN_slice_accum"); + GLAD_GL_SUN_triangle_list = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SUN_triangle_list"); + GLAD_GL_SUN_vertex = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_SUN_vertex"); + GLAD_GL_WIN_phong_shading = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_WIN_phong_shading"); + GLAD_GL_WIN_specular_fog = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_WIN_specular_fog"); + glad_gl_free_extensions(exts_i, num_exts_i); + + return 1; +} + +static int glad_gl_find_core_gl(void) { + int i; const char* version; const char* prefixes[] = { "OpenGL ES-CM ", "OpenGL ES-CL ", "OpenGL ES ", + "OpenGL SC ", NULL }; - - version = (const char*) glGetString(GL_VERSION); - if (!version) return; - + int major = 0; + int minor = 0; + version = (const char*) glad_glGetString(GL_VERSION); + if (!version) return 0; for (i = 0; prefixes[i]; i++) { const size_t length = strlen(prefixes[i]); if (strncmp(version, prefixes[i], length) == 0) { @@ -9397,1637 +7852,543 @@ static void find_coreGL(void) { } } -/* PR #18 */ -#ifdef _MSC_VER - sscanf_s(version, "%d.%d", &major, &minor); + GLAD_IMPL_UTIL_SSCANF(version, "%d.%d", &major, &minor); + + GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; + GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; + GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; + GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; + GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; + GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; + GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; + GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; + GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; + GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; + GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; + GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; + GLAD_GL_VERSION_4_0 = (major == 4 && minor >= 0) || major > 4; + GLAD_GL_VERSION_4_1 = (major == 4 && minor >= 1) || major > 4; + GLAD_GL_VERSION_4_2 = (major == 4 && minor >= 2) || major > 4; + GLAD_GL_VERSION_4_3 = (major == 4 && minor >= 3) || major > 4; + + return GLAD_MAKE_VERSION(major, minor); +} + +int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) { + int version; + + glad_glGetString = (PFNGLGETSTRINGPROC) load(userptr, "glGetString"); + if(glad_glGetString == NULL) return 0; + if(glad_glGetString(GL_VERSION) == NULL) return 0; + version = glad_gl_find_core_gl(); + + glad_gl_load_GL_VERSION_1_0(load, userptr); + glad_gl_load_GL_VERSION_1_1(load, userptr); + glad_gl_load_GL_VERSION_1_2(load, userptr); + glad_gl_load_GL_VERSION_1_3(load, userptr); + glad_gl_load_GL_VERSION_1_4(load, userptr); + glad_gl_load_GL_VERSION_1_5(load, userptr); + glad_gl_load_GL_VERSION_2_0(load, userptr); + glad_gl_load_GL_VERSION_2_1(load, userptr); + glad_gl_load_GL_VERSION_3_0(load, userptr); + glad_gl_load_GL_VERSION_3_1(load, userptr); + glad_gl_load_GL_VERSION_3_2(load, userptr); + glad_gl_load_GL_VERSION_3_3(load, userptr); + glad_gl_load_GL_VERSION_4_0(load, userptr); + glad_gl_load_GL_VERSION_4_1(load, userptr); + glad_gl_load_GL_VERSION_4_2(load, userptr); + glad_gl_load_GL_VERSION_4_3(load, userptr); + + if (!glad_gl_find_extensions_gl(version)) return 0; + glad_gl_load_GL_3DFX_tbuffer(load, userptr); + glad_gl_load_GL_AMD_debug_output(load, userptr); + glad_gl_load_GL_AMD_draw_buffers_blend(load, userptr); + glad_gl_load_GL_AMD_framebuffer_multisample_advanced(load, userptr); + glad_gl_load_GL_AMD_framebuffer_sample_positions(load, userptr); + glad_gl_load_GL_AMD_gpu_shader_int64(load, userptr); + glad_gl_load_GL_AMD_interleaved_elements(load, userptr); + glad_gl_load_GL_AMD_multi_draw_indirect(load, userptr); + glad_gl_load_GL_AMD_name_gen_delete(load, userptr); + glad_gl_load_GL_AMD_occlusion_query_event(load, userptr); + glad_gl_load_GL_AMD_performance_monitor(load, userptr); + glad_gl_load_GL_AMD_sample_positions(load, userptr); + glad_gl_load_GL_AMD_sparse_texture(load, userptr); + glad_gl_load_GL_AMD_stencil_operation_extended(load, userptr); + glad_gl_load_GL_AMD_vertex_shader_tessellator(load, userptr); + glad_gl_load_GL_APPLE_element_array(load, userptr); + glad_gl_load_GL_APPLE_fence(load, userptr); + glad_gl_load_GL_APPLE_flush_buffer_range(load, userptr); + glad_gl_load_GL_APPLE_object_purgeable(load, userptr); + glad_gl_load_GL_APPLE_texture_range(load, userptr); + glad_gl_load_GL_APPLE_vertex_array_object(load, userptr); + glad_gl_load_GL_APPLE_vertex_array_range(load, userptr); + glad_gl_load_GL_APPLE_vertex_program_evaluators(load, userptr); + glad_gl_load_GL_ARB_ES2_compatibility(load, userptr); + glad_gl_load_GL_ARB_ES3_1_compatibility(load, userptr); + glad_gl_load_GL_ARB_ES3_2_compatibility(load, userptr); + glad_gl_load_GL_ARB_base_instance(load, userptr); + glad_gl_load_GL_ARB_bindless_texture(load, userptr); + glad_gl_load_GL_ARB_blend_func_extended(load, userptr); + glad_gl_load_GL_ARB_buffer_storage(load, userptr); + glad_gl_load_GL_ARB_cl_event(load, userptr); + glad_gl_load_GL_ARB_clear_buffer_object(load, userptr); + glad_gl_load_GL_ARB_clear_texture(load, userptr); + glad_gl_load_GL_ARB_clip_control(load, userptr); + glad_gl_load_GL_ARB_color_buffer_float(load, userptr); + glad_gl_load_GL_ARB_compute_shader(load, userptr); + glad_gl_load_GL_ARB_compute_variable_group_size(load, userptr); + glad_gl_load_GL_ARB_copy_buffer(load, userptr); + glad_gl_load_GL_ARB_copy_image(load, userptr); + glad_gl_load_GL_ARB_debug_output(load, userptr); + glad_gl_load_GL_ARB_direct_state_access(load, userptr); + glad_gl_load_GL_ARB_draw_buffers(load, userptr); + glad_gl_load_GL_ARB_draw_buffers_blend(load, userptr); + glad_gl_load_GL_ARB_draw_elements_base_vertex(load, userptr); + glad_gl_load_GL_ARB_draw_indirect(load, userptr); + glad_gl_load_GL_ARB_draw_instanced(load, userptr); + glad_gl_load_GL_ARB_fragment_program(load, userptr); + glad_gl_load_GL_ARB_framebuffer_no_attachments(load, userptr); + glad_gl_load_GL_ARB_framebuffer_object(load, userptr); + glad_gl_load_GL_ARB_geometry_shader4(load, userptr); + glad_gl_load_GL_ARB_get_program_binary(load, userptr); + glad_gl_load_GL_ARB_get_texture_sub_image(load, userptr); + glad_gl_load_GL_ARB_gl_spirv(load, userptr); + glad_gl_load_GL_ARB_gpu_shader_fp64(load, userptr); + glad_gl_load_GL_ARB_gpu_shader_int64(load, userptr); + glad_gl_load_GL_ARB_imaging(load, userptr); + glad_gl_load_GL_ARB_indirect_parameters(load, userptr); + glad_gl_load_GL_ARB_instanced_arrays(load, userptr); + glad_gl_load_GL_ARB_internalformat_query(load, userptr); + glad_gl_load_GL_ARB_internalformat_query2(load, userptr); + glad_gl_load_GL_ARB_invalidate_subdata(load, userptr); + glad_gl_load_GL_ARB_map_buffer_range(load, userptr); + glad_gl_load_GL_ARB_matrix_palette(load, userptr); + glad_gl_load_GL_ARB_multi_bind(load, userptr); + glad_gl_load_GL_ARB_multi_draw_indirect(load, userptr); + glad_gl_load_GL_ARB_multisample(load, userptr); + glad_gl_load_GL_ARB_multitexture(load, userptr); + glad_gl_load_GL_ARB_occlusion_query(load, userptr); + glad_gl_load_GL_ARB_parallel_shader_compile(load, userptr); + glad_gl_load_GL_ARB_point_parameters(load, userptr); + glad_gl_load_GL_ARB_polygon_offset_clamp(load, userptr); + glad_gl_load_GL_ARB_program_interface_query(load, userptr); + glad_gl_load_GL_ARB_provoking_vertex(load, userptr); + glad_gl_load_GL_ARB_robustness(load, userptr); + glad_gl_load_GL_ARB_sample_locations(load, userptr); + glad_gl_load_GL_ARB_sample_shading(load, userptr); + glad_gl_load_GL_ARB_sampler_objects(load, userptr); + glad_gl_load_GL_ARB_separate_shader_objects(load, userptr); + glad_gl_load_GL_ARB_shader_atomic_counters(load, userptr); + glad_gl_load_GL_ARB_shader_image_load_store(load, userptr); + glad_gl_load_GL_ARB_shader_objects(load, userptr); + glad_gl_load_GL_ARB_shader_storage_buffer_object(load, userptr); + glad_gl_load_GL_ARB_shader_subroutine(load, userptr); + glad_gl_load_GL_ARB_shading_language_include(load, userptr); + glad_gl_load_GL_ARB_sparse_buffer(load, userptr); + glad_gl_load_GL_ARB_sparse_texture(load, userptr); + glad_gl_load_GL_ARB_sync(load, userptr); + glad_gl_load_GL_ARB_tessellation_shader(load, userptr); + glad_gl_load_GL_ARB_texture_barrier(load, userptr); + glad_gl_load_GL_ARB_texture_buffer_object(load, userptr); + glad_gl_load_GL_ARB_texture_buffer_range(load, userptr); + glad_gl_load_GL_ARB_texture_compression(load, userptr); + glad_gl_load_GL_ARB_texture_multisample(load, userptr); + glad_gl_load_GL_ARB_texture_storage(load, userptr); + glad_gl_load_GL_ARB_texture_storage_multisample(load, userptr); + glad_gl_load_GL_ARB_texture_view(load, userptr); + glad_gl_load_GL_ARB_timer_query(load, userptr); + glad_gl_load_GL_ARB_transform_feedback2(load, userptr); + glad_gl_load_GL_ARB_transform_feedback3(load, userptr); + glad_gl_load_GL_ARB_transform_feedback_instanced(load, userptr); + glad_gl_load_GL_ARB_transpose_matrix(load, userptr); + glad_gl_load_GL_ARB_uniform_buffer_object(load, userptr); + glad_gl_load_GL_ARB_vertex_array_object(load, userptr); + glad_gl_load_GL_ARB_vertex_attrib_64bit(load, userptr); + glad_gl_load_GL_ARB_vertex_attrib_binding(load, userptr); + glad_gl_load_GL_ARB_vertex_blend(load, userptr); + glad_gl_load_GL_ARB_vertex_buffer_object(load, userptr); + glad_gl_load_GL_ARB_vertex_program(load, userptr); + glad_gl_load_GL_ARB_vertex_shader(load, userptr); + glad_gl_load_GL_ARB_vertex_type_2_10_10_10_rev(load, userptr); + glad_gl_load_GL_ARB_viewport_array(load, userptr); + glad_gl_load_GL_ARB_window_pos(load, userptr); + glad_gl_load_GL_ATI_draw_buffers(load, userptr); + glad_gl_load_GL_ATI_element_array(load, userptr); + glad_gl_load_GL_ATI_envmap_bumpmap(load, userptr); + glad_gl_load_GL_ATI_fragment_shader(load, userptr); + glad_gl_load_GL_ATI_map_object_buffer(load, userptr); + glad_gl_load_GL_ATI_pn_triangles(load, userptr); + glad_gl_load_GL_ATI_separate_stencil(load, userptr); + glad_gl_load_GL_ATI_vertex_array_object(load, userptr); + glad_gl_load_GL_ATI_vertex_attrib_array_object(load, userptr); + glad_gl_load_GL_ATI_vertex_streams(load, userptr); + glad_gl_load_GL_EXT_EGL_image_storage(load, userptr); + glad_gl_load_GL_EXT_bindable_uniform(load, userptr); + glad_gl_load_GL_EXT_blend_color(load, userptr); + glad_gl_load_GL_EXT_blend_equation_separate(load, userptr); + glad_gl_load_GL_EXT_blend_func_separate(load, userptr); + glad_gl_load_GL_EXT_blend_minmax(load, userptr); + glad_gl_load_GL_EXT_color_subtable(load, userptr); + glad_gl_load_GL_EXT_compiled_vertex_array(load, userptr); + glad_gl_load_GL_EXT_convolution(load, userptr); + glad_gl_load_GL_EXT_coordinate_frame(load, userptr); + glad_gl_load_GL_EXT_copy_texture(load, userptr); + glad_gl_load_GL_EXT_cull_vertex(load, userptr); + glad_gl_load_GL_EXT_debug_label(load, userptr); + glad_gl_load_GL_EXT_debug_marker(load, userptr); + glad_gl_load_GL_EXT_depth_bounds_test(load, userptr); + glad_gl_load_GL_EXT_direct_state_access(load, userptr); + glad_gl_load_GL_EXT_draw_buffers2(load, userptr); + glad_gl_load_GL_EXT_draw_instanced(load, userptr); + glad_gl_load_GL_EXT_draw_range_elements(load, userptr); + glad_gl_load_GL_EXT_external_buffer(load, userptr); + glad_gl_load_GL_EXT_fog_coord(load, userptr); + glad_gl_load_GL_EXT_framebuffer_blit(load, userptr); + glad_gl_load_GL_EXT_framebuffer_multisample(load, userptr); + glad_gl_load_GL_EXT_framebuffer_object(load, userptr); + glad_gl_load_GL_EXT_geometry_shader4(load, userptr); + glad_gl_load_GL_EXT_gpu_program_parameters(load, userptr); + glad_gl_load_GL_EXT_gpu_shader4(load, userptr); + glad_gl_load_GL_EXT_histogram(load, userptr); + glad_gl_load_GL_EXT_index_func(load, userptr); + glad_gl_load_GL_EXT_index_material(load, userptr); + glad_gl_load_GL_EXT_light_texture(load, userptr); + glad_gl_load_GL_EXT_memory_object(load, userptr); + glad_gl_load_GL_EXT_memory_object_fd(load, userptr); + glad_gl_load_GL_EXT_memory_object_win32(load, userptr); + glad_gl_load_GL_EXT_multi_draw_arrays(load, userptr); + glad_gl_load_GL_EXT_multisample(load, userptr); + glad_gl_load_GL_EXT_paletted_texture(load, userptr); + glad_gl_load_GL_EXT_pixel_transform(load, userptr); + glad_gl_load_GL_EXT_point_parameters(load, userptr); + glad_gl_load_GL_EXT_polygon_offset(load, userptr); + glad_gl_load_GL_EXT_polygon_offset_clamp(load, userptr); + glad_gl_load_GL_EXT_provoking_vertex(load, userptr); + glad_gl_load_GL_EXT_raster_multisample(load, userptr); + glad_gl_load_GL_EXT_secondary_color(load, userptr); + glad_gl_load_GL_EXT_semaphore(load, userptr); + glad_gl_load_GL_EXT_semaphore_fd(load, userptr); + glad_gl_load_GL_EXT_semaphore_win32(load, userptr); + glad_gl_load_GL_EXT_separate_shader_objects(load, userptr); + glad_gl_load_GL_EXT_shader_framebuffer_fetch_non_coherent(load, userptr); + glad_gl_load_GL_EXT_shader_image_load_store(load, userptr); + glad_gl_load_GL_EXT_stencil_clear_tag(load, userptr); + glad_gl_load_GL_EXT_stencil_two_side(load, userptr); + glad_gl_load_GL_EXT_subtexture(load, userptr); + glad_gl_load_GL_EXT_texture3D(load, userptr); + glad_gl_load_GL_EXT_texture_array(load, userptr); + glad_gl_load_GL_EXT_texture_buffer_object(load, userptr); + glad_gl_load_GL_EXT_texture_integer(load, userptr); + glad_gl_load_GL_EXT_texture_object(load, userptr); + glad_gl_load_GL_EXT_texture_perturb_normal(load, userptr); + glad_gl_load_GL_EXT_texture_storage(load, userptr); + glad_gl_load_GL_EXT_timer_query(load, userptr); + glad_gl_load_GL_EXT_transform_feedback(load, userptr); + glad_gl_load_GL_EXT_vertex_array(load, userptr); + glad_gl_load_GL_EXT_vertex_attrib_64bit(load, userptr); + glad_gl_load_GL_EXT_vertex_shader(load, userptr); + glad_gl_load_GL_EXT_vertex_weighting(load, userptr); + glad_gl_load_GL_EXT_win32_keyed_mutex(load, userptr); + glad_gl_load_GL_EXT_window_rectangles(load, userptr); + glad_gl_load_GL_EXT_x11_sync_object(load, userptr); + glad_gl_load_GL_GREMEDY_frame_terminator(load, userptr); + glad_gl_load_GL_GREMEDY_string_marker(load, userptr); + glad_gl_load_GL_HP_image_transform(load, userptr); + glad_gl_load_GL_IBM_multimode_draw_arrays(load, userptr); + glad_gl_load_GL_IBM_static_data(load, userptr); + glad_gl_load_GL_IBM_vertex_array_lists(load, userptr); + glad_gl_load_GL_INGR_blend_func_separate(load, userptr); + glad_gl_load_GL_INTEL_framebuffer_CMAA(load, userptr); + glad_gl_load_GL_INTEL_map_texture(load, userptr); + glad_gl_load_GL_INTEL_parallel_arrays(load, userptr); + glad_gl_load_GL_INTEL_performance_query(load, userptr); + glad_gl_load_GL_KHR_blend_equation_advanced(load, userptr); + glad_gl_load_GL_KHR_debug(load, userptr); + glad_gl_load_GL_KHR_parallel_shader_compile(load, userptr); + glad_gl_load_GL_KHR_robustness(load, userptr); + glad_gl_load_GL_MESA_framebuffer_flip_y(load, userptr); + glad_gl_load_GL_MESA_resize_buffers(load, userptr); + glad_gl_load_GL_MESA_window_pos(load, userptr); + glad_gl_load_GL_NVX_conditional_render(load, userptr); + glad_gl_load_GL_NVX_gpu_multicast2(load, userptr); + glad_gl_load_GL_NVX_linked_gpu_multicast(load, userptr); + glad_gl_load_GL_NVX_progress_fence(load, userptr); + glad_gl_load_GL_NV_alpha_to_coverage_dither_control(load, userptr); + glad_gl_load_GL_NV_bindless_multi_draw_indirect(load, userptr); + glad_gl_load_GL_NV_bindless_multi_draw_indirect_count(load, userptr); + glad_gl_load_GL_NV_bindless_texture(load, userptr); + glad_gl_load_GL_NV_blend_equation_advanced(load, userptr); + glad_gl_load_GL_NV_clip_space_w_scaling(load, userptr); + glad_gl_load_GL_NV_command_list(load, userptr); + glad_gl_load_GL_NV_conditional_render(load, userptr); + glad_gl_load_GL_NV_conservative_raster(load, userptr); + glad_gl_load_GL_NV_conservative_raster_dilate(load, userptr); + glad_gl_load_GL_NV_conservative_raster_pre_snap_triangles(load, userptr); + glad_gl_load_GL_NV_copy_image(load, userptr); + glad_gl_load_GL_NV_depth_buffer_float(load, userptr); + glad_gl_load_GL_NV_draw_texture(load, userptr); + glad_gl_load_GL_NV_draw_vulkan_image(load, userptr); + glad_gl_load_GL_NV_evaluators(load, userptr); + glad_gl_load_GL_NV_explicit_multisample(load, userptr); + glad_gl_load_GL_NV_fence(load, userptr); + glad_gl_load_GL_NV_fragment_coverage_to_color(load, userptr); + glad_gl_load_GL_NV_fragment_program(load, userptr); + glad_gl_load_GL_NV_framebuffer_mixed_samples(load, userptr); + glad_gl_load_GL_NV_framebuffer_multisample_coverage(load, userptr); + glad_gl_load_GL_NV_geometry_program4(load, userptr); + glad_gl_load_GL_NV_gpu_multicast(load, userptr); + glad_gl_load_GL_NV_gpu_program4(load, userptr); + glad_gl_load_GL_NV_gpu_program5(load, userptr); + glad_gl_load_GL_NV_gpu_shader5(load, userptr); + glad_gl_load_GL_NV_half_float(load, userptr); + glad_gl_load_GL_NV_internalformat_sample_query(load, userptr); + glad_gl_load_GL_NV_memory_attachment(load, userptr); + glad_gl_load_GL_NV_memory_object_sparse(load, userptr); + glad_gl_load_GL_NV_mesh_shader(load, userptr); + glad_gl_load_GL_NV_occlusion_query(load, userptr); + glad_gl_load_GL_NV_parameter_buffer_object(load, userptr); + glad_gl_load_GL_NV_path_rendering(load, userptr); + glad_gl_load_GL_NV_pixel_data_range(load, userptr); + glad_gl_load_GL_NV_point_sprite(load, userptr); + glad_gl_load_GL_NV_present_video(load, userptr); + glad_gl_load_GL_NV_primitive_restart(load, userptr); + glad_gl_load_GL_NV_query_resource(load, userptr); + glad_gl_load_GL_NV_query_resource_tag(load, userptr); + glad_gl_load_GL_NV_register_combiners(load, userptr); + glad_gl_load_GL_NV_register_combiners2(load, userptr); + glad_gl_load_GL_NV_sample_locations(load, userptr); + glad_gl_load_GL_NV_scissor_exclusive(load, userptr); + glad_gl_load_GL_NV_shader_buffer_load(load, userptr); + glad_gl_load_GL_NV_shading_rate_image(load, userptr); + glad_gl_load_GL_NV_texture_barrier(load, userptr); + glad_gl_load_GL_NV_texture_multisample(load, userptr); + glad_gl_load_GL_NV_timeline_semaphore(load, userptr); + glad_gl_load_GL_NV_transform_feedback(load, userptr); + glad_gl_load_GL_NV_transform_feedback2(load, userptr); + glad_gl_load_GL_NV_vdpau_interop(load, userptr); + glad_gl_load_GL_NV_vdpau_interop2(load, userptr); + glad_gl_load_GL_NV_vertex_array_range(load, userptr); + glad_gl_load_GL_NV_vertex_attrib_integer_64bit(load, userptr); + glad_gl_load_GL_NV_vertex_buffer_unified_memory(load, userptr); + glad_gl_load_GL_NV_vertex_program(load, userptr); + glad_gl_load_GL_NV_vertex_program4(load, userptr); + glad_gl_load_GL_NV_video_capture(load, userptr); + glad_gl_load_GL_NV_viewport_swizzle(load, userptr); + glad_gl_load_GL_OES_byte_coordinates(load, userptr); + glad_gl_load_GL_OES_fixed_point(load, userptr); + glad_gl_load_GL_OES_query_matrix(load, userptr); + glad_gl_load_GL_OES_single_precision(load, userptr); + glad_gl_load_GL_OVR_multiview(load, userptr); + glad_gl_load_GL_PGI_misc_hints(load, userptr); + glad_gl_load_GL_SGIS_detail_texture(load, userptr); + glad_gl_load_GL_SGIS_fog_function(load, userptr); + glad_gl_load_GL_SGIS_multisample(load, userptr); + glad_gl_load_GL_SGIS_pixel_texture(load, userptr); + glad_gl_load_GL_SGIS_point_parameters(load, userptr); + glad_gl_load_GL_SGIS_sharpen_texture(load, userptr); + glad_gl_load_GL_SGIS_texture4D(load, userptr); + glad_gl_load_GL_SGIS_texture_color_mask(load, userptr); + glad_gl_load_GL_SGIS_texture_filter4(load, userptr); + glad_gl_load_GL_SGIX_async(load, userptr); + glad_gl_load_GL_SGIX_flush_raster(load, userptr); + glad_gl_load_GL_SGIX_fragment_lighting(load, userptr); + glad_gl_load_GL_SGIX_framezoom(load, userptr); + glad_gl_load_GL_SGIX_igloo_interface(load, userptr); + glad_gl_load_GL_SGIX_instruments(load, userptr); + glad_gl_load_GL_SGIX_list_priority(load, userptr); + glad_gl_load_GL_SGIX_pixel_texture(load, userptr); + glad_gl_load_GL_SGIX_polynomial_ffd(load, userptr); + glad_gl_load_GL_SGIX_reference_plane(load, userptr); + glad_gl_load_GL_SGIX_sprite(load, userptr); + glad_gl_load_GL_SGIX_tag_sample_buffer(load, userptr); + glad_gl_load_GL_SGI_color_table(load, userptr); + glad_gl_load_GL_SUNX_constant_data(load, userptr); + glad_gl_load_GL_SUN_global_alpha(load, userptr); + glad_gl_load_GL_SUN_mesh_array(load, userptr); + glad_gl_load_GL_SUN_triangle_list(load, userptr); + glad_gl_load_GL_SUN_vertex(load, userptr); + + + + return version; +} + + +int gladLoadGL( GLADloadfunc load) { + return gladLoadGLUserPtr( glad_gl_get_proc_from_userptr, GLAD_GNUC_EXTENSION (void*) load); +} + + + + + +#ifdef GLAD_GL + +#ifndef GLAD_LOADER_LIBRARY_C_ +#define GLAD_LOADER_LIBRARY_C_ + +#include +#include + +#if GLAD_PLATFORM_WIN32 +#include #else - sscanf(version, "%d.%d", &major, &minor); +#include #endif - GLVersion.major = major; GLVersion.minor = minor; - max_loaded_major = major; max_loaded_minor = minor; - GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; - GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; - GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; - GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; - GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; - GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; - GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; - GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; - GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; - GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; - GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; - GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; - GLAD_GL_VERSION_4_0 = (major == 4 && minor >= 0) || major > 4; - GLAD_GL_VERSION_4_1 = (major == 4 && minor >= 1) || major > 4; - GLAD_GL_VERSION_4_2 = (major == 4 && minor >= 2) || major > 4; - GLAD_GL_VERSION_4_3 = (major == 4 && minor >= 3) || major > 4; - GLAD_GL_VERSION_4_4 = (major == 4 && minor >= 4) || major > 4; - GLAD_GL_VERSION_4_5 = (major == 4 && minor >= 5) || major > 4; - GLAD_GL_VERSION_4_6 = (major == 4 && minor >= 6) || major > 4; - if (GLVersion.major > 4 || (GLVersion.major >= 4 && GLVersion.minor >= 6)) { - max_loaded_major = 4; - max_loaded_minor = 6; - } -} -int gladLoadGLLoader(GLADloadproc load) { - GLVersion.major = 0; GLVersion.minor = 0; - glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - if(glGetString == NULL) return 0; - if(glGetString(GL_VERSION) == NULL) return 0; - find_coreGL(); - load_GL_VERSION_1_0(load); - load_GL_VERSION_1_1(load); - load_GL_VERSION_1_2(load); - load_GL_VERSION_1_3(load); - load_GL_VERSION_1_4(load); - load_GL_VERSION_1_5(load); - load_GL_VERSION_2_0(load); - load_GL_VERSION_2_1(load); - load_GL_VERSION_3_0(load); - load_GL_VERSION_3_1(load); - load_GL_VERSION_3_2(load); - load_GL_VERSION_3_3(load); - load_GL_VERSION_4_0(load); - load_GL_VERSION_4_1(load); - load_GL_VERSION_4_2(load); - load_GL_VERSION_4_3(load); - load_GL_VERSION_4_4(load); - load_GL_VERSION_4_5(load); - load_GL_VERSION_4_6(load); +static void* glad_get_dlopen_handle(const char *lib_names[], int length) { + void *handle = NULL; + int i; - if (!find_extensionsGL()) return 0; - load_GL_3DFX_tbuffer(load); - load_GL_AMD_debug_output(load); - load_GL_AMD_draw_buffers_blend(load); - load_GL_AMD_framebuffer_sample_positions(load); - load_GL_AMD_gpu_shader_int64(load); - load_GL_AMD_interleaved_elements(load); - load_GL_AMD_multi_draw_indirect(load); - load_GL_AMD_name_gen_delete(load); - load_GL_AMD_occlusion_query_event(load); - load_GL_AMD_performance_monitor(load); - load_GL_AMD_sample_positions(load); - load_GL_AMD_sparse_texture(load); - load_GL_AMD_stencil_operation_extended(load); - load_GL_AMD_vertex_shader_tessellator(load); - load_GL_APPLE_element_array(load); - load_GL_APPLE_fence(load); - load_GL_APPLE_flush_buffer_range(load); - load_GL_APPLE_object_purgeable(load); - load_GL_APPLE_texture_range(load); - load_GL_APPLE_vertex_array_object(load); - load_GL_APPLE_vertex_array_range(load); - load_GL_APPLE_vertex_program_evaluators(load); - load_GL_ARB_ES2_compatibility(load); - load_GL_ARB_ES3_1_compatibility(load); - load_GL_ARB_ES3_2_compatibility(load); - load_GL_ARB_base_instance(load); - load_GL_ARB_bindless_texture(load); - load_GL_ARB_blend_func_extended(load); - load_GL_ARB_buffer_storage(load); - load_GL_ARB_cl_event(load); - load_GL_ARB_clear_buffer_object(load); - load_GL_ARB_clear_texture(load); - load_GL_ARB_clip_control(load); - load_GL_ARB_color_buffer_float(load); - load_GL_ARB_compute_shader(load); - load_GL_ARB_compute_variable_group_size(load); - load_GL_ARB_copy_buffer(load); - load_GL_ARB_copy_image(load); - load_GL_ARB_debug_output(load); - load_GL_ARB_direct_state_access(load); - load_GL_ARB_draw_buffers(load); - load_GL_ARB_draw_buffers_blend(load); - load_GL_ARB_draw_elements_base_vertex(load); - load_GL_ARB_draw_indirect(load); - load_GL_ARB_draw_instanced(load); - load_GL_ARB_fragment_program(load); - load_GL_ARB_framebuffer_no_attachments(load); - load_GL_ARB_framebuffer_object(load); - load_GL_ARB_geometry_shader4(load); - load_GL_ARB_get_program_binary(load); - load_GL_ARB_get_texture_sub_image(load); - load_GL_ARB_gl_spirv(load); - load_GL_ARB_gpu_shader_fp64(load); - load_GL_ARB_gpu_shader_int64(load); - load_GL_ARB_imaging(load); - load_GL_ARB_indirect_parameters(load); - load_GL_ARB_instanced_arrays(load); - load_GL_ARB_internalformat_query(load); - load_GL_ARB_internalformat_query2(load); - load_GL_ARB_invalidate_subdata(load); - load_GL_ARB_map_buffer_range(load); - load_GL_ARB_matrix_palette(load); - load_GL_ARB_multi_bind(load); - load_GL_ARB_multi_draw_indirect(load); - load_GL_ARB_multisample(load); - load_GL_ARB_multitexture(load); - load_GL_ARB_occlusion_query(load); - load_GL_ARB_parallel_shader_compile(load); - load_GL_ARB_point_parameters(load); - load_GL_ARB_polygon_offset_clamp(load); - load_GL_ARB_program_interface_query(load); - load_GL_ARB_provoking_vertex(load); - load_GL_ARB_robustness(load); - load_GL_ARB_sample_locations(load); - load_GL_ARB_sample_shading(load); - load_GL_ARB_sampler_objects(load); - load_GL_ARB_separate_shader_objects(load); - load_GL_ARB_shader_atomic_counters(load); - load_GL_ARB_shader_image_load_store(load); - load_GL_ARB_shader_objects(load); - load_GL_ARB_shader_storage_buffer_object(load); - load_GL_ARB_shader_subroutine(load); - load_GL_ARB_shading_language_include(load); - load_GL_ARB_sparse_buffer(load); - load_GL_ARB_sparse_texture(load); - load_GL_ARB_sync(load); - load_GL_ARB_tessellation_shader(load); - load_GL_ARB_texture_barrier(load); - load_GL_ARB_texture_buffer_object(load); - load_GL_ARB_texture_buffer_range(load); - load_GL_ARB_texture_compression(load); - load_GL_ARB_texture_multisample(load); - load_GL_ARB_texture_storage(load); - load_GL_ARB_texture_storage_multisample(load); - load_GL_ARB_texture_view(load); - load_GL_ARB_timer_query(load); - load_GL_ARB_transform_feedback2(load); - load_GL_ARB_transform_feedback3(load); - load_GL_ARB_transform_feedback_instanced(load); - load_GL_ARB_transpose_matrix(load); - load_GL_ARB_uniform_buffer_object(load); - load_GL_ARB_vertex_array_object(load); - load_GL_ARB_vertex_attrib_64bit(load); - load_GL_ARB_vertex_attrib_binding(load); - load_GL_ARB_vertex_blend(load); - load_GL_ARB_vertex_buffer_object(load); - load_GL_ARB_vertex_program(load); - load_GL_ARB_vertex_shader(load); - load_GL_ARB_vertex_type_2_10_10_10_rev(load); - load_GL_ARB_viewport_array(load); - load_GL_ARB_window_pos(load); - load_GL_ATI_draw_buffers(load); - load_GL_ATI_element_array(load); - load_GL_ATI_envmap_bumpmap(load); - load_GL_ATI_fragment_shader(load); - load_GL_ATI_map_object_buffer(load); - load_GL_ATI_pn_triangles(load); - load_GL_ATI_separate_stencil(load); - load_GL_ATI_vertex_array_object(load); - load_GL_ATI_vertex_attrib_array_object(load); - load_GL_ATI_vertex_streams(load); - load_GL_EXT_EGL_image_storage(load); - load_GL_EXT_bindable_uniform(load); - load_GL_EXT_blend_color(load); - load_GL_EXT_blend_equation_separate(load); - load_GL_EXT_blend_func_separate(load); - load_GL_EXT_blend_minmax(load); - load_GL_EXT_color_subtable(load); - load_GL_EXT_compiled_vertex_array(load); - load_GL_EXT_convolution(load); - load_GL_EXT_coordinate_frame(load); - load_GL_EXT_copy_texture(load); - load_GL_EXT_cull_vertex(load); - load_GL_EXT_debug_label(load); - load_GL_EXT_debug_marker(load); - load_GL_EXT_depth_bounds_test(load); - load_GL_EXT_direct_state_access(load); - load_GL_EXT_draw_buffers2(load); - load_GL_EXT_draw_instanced(load); - load_GL_EXT_draw_range_elements(load); - load_GL_EXT_external_buffer(load); - load_GL_EXT_fog_coord(load); - load_GL_EXT_framebuffer_blit(load); - load_GL_EXT_framebuffer_multisample(load); - load_GL_EXT_framebuffer_object(load); - load_GL_EXT_geometry_shader4(load); - load_GL_EXT_gpu_program_parameters(load); - load_GL_EXT_gpu_shader4(load); - load_GL_EXT_histogram(load); - load_GL_EXT_index_func(load); - load_GL_EXT_index_material(load); - load_GL_EXT_light_texture(load); - load_GL_EXT_memory_object(load); - load_GL_EXT_memory_object_fd(load); - load_GL_EXT_memory_object_win32(load); - load_GL_EXT_multi_draw_arrays(load); - load_GL_EXT_multisample(load); - load_GL_EXT_paletted_texture(load); - load_GL_EXT_pixel_transform(load); - load_GL_EXT_point_parameters(load); - load_GL_EXT_polygon_offset(load); - load_GL_EXT_polygon_offset_clamp(load); - load_GL_EXT_provoking_vertex(load); - load_GL_EXT_raster_multisample(load); - load_GL_EXT_secondary_color(load); - load_GL_EXT_semaphore(load); - load_GL_EXT_semaphore_fd(load); - load_GL_EXT_semaphore_win32(load); - load_GL_EXT_separate_shader_objects(load); - load_GL_EXT_shader_framebuffer_fetch_non_coherent(load); - load_GL_EXT_shader_image_load_store(load); - load_GL_EXT_stencil_clear_tag(load); - load_GL_EXT_stencil_two_side(load); - load_GL_EXT_subtexture(load); - load_GL_EXT_texture3D(load); - load_GL_EXT_texture_array(load); - load_GL_EXT_texture_buffer_object(load); - load_GL_EXT_texture_integer(load); - load_GL_EXT_texture_object(load); - load_GL_EXT_texture_perturb_normal(load); - load_GL_EXT_timer_query(load); - load_GL_EXT_transform_feedback(load); - load_GL_EXT_vertex_array(load); - load_GL_EXT_vertex_attrib_64bit(load); - load_GL_EXT_vertex_shader(load); - load_GL_EXT_vertex_weighting(load); - load_GL_EXT_win32_keyed_mutex(load); - load_GL_EXT_window_rectangles(load); - load_GL_EXT_x11_sync_object(load); - load_GL_GREMEDY_frame_terminator(load); - load_GL_GREMEDY_string_marker(load); - load_GL_HP_image_transform(load); - load_GL_IBM_multimode_draw_arrays(load); - load_GL_IBM_static_data(load); - load_GL_IBM_vertex_array_lists(load); - load_GL_INGR_blend_func_separate(load); - load_GL_INTEL_framebuffer_CMAA(load); - load_GL_INTEL_map_texture(load); - load_GL_INTEL_parallel_arrays(load); - load_GL_INTEL_performance_query(load); - load_GL_KHR_blend_equation_advanced(load); - load_GL_KHR_debug(load); - load_GL_KHR_parallel_shader_compile(load); - load_GL_KHR_robustness(load); - load_GL_MESA_resize_buffers(load); - load_GL_MESA_window_pos(load); - load_GL_NVX_conditional_render(load); - load_GL_NVX_linked_gpu_multicast(load); - load_GL_NV_alpha_to_coverage_dither_control(load); - load_GL_NV_bindless_multi_draw_indirect(load); - load_GL_NV_bindless_multi_draw_indirect_count(load); - load_GL_NV_bindless_texture(load); - load_GL_NV_blend_equation_advanced(load); - load_GL_NV_clip_space_w_scaling(load); - load_GL_NV_command_list(load); - load_GL_NV_conditional_render(load); - load_GL_NV_conservative_raster(load); - load_GL_NV_conservative_raster_dilate(load); - load_GL_NV_conservative_raster_pre_snap_triangles(load); - load_GL_NV_copy_image(load); - load_GL_NV_depth_buffer_float(load); - load_GL_NV_draw_texture(load); - load_GL_NV_draw_vulkan_image(load); - load_GL_NV_evaluators(load); - load_GL_NV_explicit_multisample(load); - load_GL_NV_fence(load); - load_GL_NV_fragment_coverage_to_color(load); - load_GL_NV_fragment_program(load); - load_GL_NV_framebuffer_mixed_samples(load); - load_GL_NV_framebuffer_multisample_coverage(load); - load_GL_NV_geometry_program4(load); - load_GL_NV_gpu_multicast(load); - load_GL_NV_gpu_program4(load); - load_GL_NV_gpu_program5(load); - load_GL_NV_gpu_shader5(load); - load_GL_NV_half_float(load); - load_GL_NV_internalformat_sample_query(load); - load_GL_NV_occlusion_query(load); - load_GL_NV_parameter_buffer_object(load); - load_GL_NV_path_rendering(load); - load_GL_NV_pixel_data_range(load); - load_GL_NV_point_sprite(load); - load_GL_NV_present_video(load); - load_GL_NV_primitive_restart(load); - load_GL_NV_query_resource(load); - load_GL_NV_query_resource_tag(load); - load_GL_NV_register_combiners(load); - load_GL_NV_register_combiners2(load); - load_GL_NV_sample_locations(load); - load_GL_NV_shader_buffer_load(load); - load_GL_NV_texture_barrier(load); - load_GL_NV_texture_multisample(load); - load_GL_NV_transform_feedback(load); - load_GL_NV_transform_feedback2(load); - load_GL_NV_vdpau_interop(load); - load_GL_NV_vertex_array_range(load); - load_GL_NV_vertex_attrib_integer_64bit(load); - load_GL_NV_vertex_buffer_unified_memory(load); - load_GL_NV_vertex_program(load); - load_GL_NV_vertex_program4(load); - load_GL_NV_video_capture(load); - load_GL_NV_viewport_swizzle(load); - load_GL_OES_byte_coordinates(load); - load_GL_OES_fixed_point(load); - load_GL_OES_query_matrix(load); - load_GL_OES_single_precision(load); - load_GL_OVR_multiview(load); - load_GL_PGI_misc_hints(load); - load_GL_SGIS_detail_texture(load); - load_GL_SGIS_fog_function(load); - load_GL_SGIS_multisample(load); - load_GL_SGIS_pixel_texture(load); - load_GL_SGIS_point_parameters(load); - load_GL_SGIS_sharpen_texture(load); - load_GL_SGIS_texture4D(load); - load_GL_SGIS_texture_color_mask(load); - load_GL_SGIS_texture_filter4(load); - load_GL_SGIX_async(load); - load_GL_SGIX_flush_raster(load); - load_GL_SGIX_fragment_lighting(load); - load_GL_SGIX_framezoom(load); - load_GL_SGIX_igloo_interface(load); - load_GL_SGIX_instruments(load); - load_GL_SGIX_list_priority(load); - load_GL_SGIX_pixel_texture(load); - load_GL_SGIX_polynomial_ffd(load); - load_GL_SGIX_reference_plane(load); - load_GL_SGIX_sprite(load); - load_GL_SGIX_tag_sample_buffer(load); - load_GL_SGI_color_table(load); - load_GL_SUNX_constant_data(load); - load_GL_SUN_global_alpha(load); - load_GL_SUN_mesh_array(load); - load_GL_SUN_triangle_list(load); - load_GL_SUN_vertex(load); - return GLVersion.major != 0 || GLVersion.minor != 0; -} - -static void load_GL_ES_VERSION_2_0(GLADloadproc load) { - if(!GLAD_GL_ES_VERSION_2_0) return; - glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); - glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); - glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); - glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); - glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); - glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); - glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); - glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); - glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); - glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); - glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); - glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); - glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); - glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); - glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); - glad_glClear = (PFNGLCLEARPROC)load("glClear"); - glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); - glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); - glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); - glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); - glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); - glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); - glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); - glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); - glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); - glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); - glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); - glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); - glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); - glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); - glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); - glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); - glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); - glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); - glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); - glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); - glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); - glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); - glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); - glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); - glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); - glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); - glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); - glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); - glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); - glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); - glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); - glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); - glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); - glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); - glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); - glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); - glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); - glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); - glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); - glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); - glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); - glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); - glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); - glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); - glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); - glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); - glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); - glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); - glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); - glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); - glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); - glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); - glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); - glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat"); - glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); - glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); - glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); - glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); - glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); - glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); - glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); - glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); - glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); - glad_glHint = (PFNGLHINTPROC)load("glHint"); - glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); - glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); - glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); - glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); - glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); - glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); - glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); - glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); - glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); - glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); - glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); - glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); - glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler"); - glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); - glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); - glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); - glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary"); - glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); - glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); - glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); - glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); - glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); - glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); - glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); - glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); - glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); - glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); - glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); - glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); - glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); - glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); - glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); - glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); - glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); - glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); - glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); - glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); - glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); - glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); - glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); - glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); - glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); - glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); - glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); - glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); - glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); - glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); - glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); - glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); - glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); - glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); - glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); - glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); - glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); - glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); - glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); - glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); - glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); - glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); - glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); - glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); -} -static void load_GL_ES_VERSION_3_0(GLADloadproc load) { - if(!GLAD_GL_ES_VERSION_3_0) return; - glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); - glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); - glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); - glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); - glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); - glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); - glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); - glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); - glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); - glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); - glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); - glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); - glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); - glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); - glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); - glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); - glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); - glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); - glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); - glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); - glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); - glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); - glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); - glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); - glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); - glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); - glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); - glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); - glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); - glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); - glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); - glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); - glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); - glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); - glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); - glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); - glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); - glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); - glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); - glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); - glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); - glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); - glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); - glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); - glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); - glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); - glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); - glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); - glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); - glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); - glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); - glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); - glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); - glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); - glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); - glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); - glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); - glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); - glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); - glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); - glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); - glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); - glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); - glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); - glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); - glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); - glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); - glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); - glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); - glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); - glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); - glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); - glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); - glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); - glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); - glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); - glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); - glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); - glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); - glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); - glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); - glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); - glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); - glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); - glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); - glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); - glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback"); - glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks"); - glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks"); - glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback"); - glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback"); - glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback"); - glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load("glGetProgramBinary"); - glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load("glProgramBinary"); - glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); - glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)load("glInvalidateFramebuffer"); - glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)load("glInvalidateSubFramebuffer"); - glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)load("glTexStorage2D"); - glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load("glTexStorage3D"); - glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load("glGetInternalformativ"); -} -static void load_GL_ES_VERSION_3_1(GLADloadproc load) { - if(!GLAD_GL_ES_VERSION_3_1) return; - glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)load("glDispatchCompute"); - glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)load("glDispatchComputeIndirect"); - glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect"); - glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect"); - glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)load("glFramebufferParameteri"); - glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)load("glGetFramebufferParameteriv"); - glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)load("glGetProgramInterfaceiv"); - glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)load("glGetProgramResourceIndex"); - glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)load("glGetProgramResourceName"); - glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)load("glGetProgramResourceiv"); - glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)load("glGetProgramResourceLocation"); - glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load("glUseProgramStages"); - glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load("glActiveShaderProgram"); - glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load("glCreateShaderProgramv"); - glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load("glBindProgramPipeline"); - glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load("glDeleteProgramPipelines"); - glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load("glGenProgramPipelines"); - glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load("glIsProgramPipeline"); - glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load("glGetProgramPipelineiv"); - glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load("glProgramUniform1i"); - glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load("glProgramUniform2i"); - glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load("glProgramUniform3i"); - glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load("glProgramUniform4i"); - glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load("glProgramUniform1ui"); - glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load("glProgramUniform2ui"); - glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load("glProgramUniform3ui"); - glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load("glProgramUniform4ui"); - glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load("glProgramUniform1f"); - glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load("glProgramUniform2f"); - glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load("glProgramUniform3f"); - glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load("glProgramUniform4f"); - glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load("glProgramUniform1iv"); - glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load("glProgramUniform2iv"); - glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load("glProgramUniform3iv"); - glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load("glProgramUniform4iv"); - glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load("glProgramUniform1uiv"); - glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load("glProgramUniform2uiv"); - glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load("glProgramUniform3uiv"); - glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load("glProgramUniform4uiv"); - glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load("glProgramUniform1fv"); - glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load("glProgramUniform2fv"); - glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load("glProgramUniform3fv"); - glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load("glProgramUniform4fv"); - glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load("glProgramUniformMatrix2fv"); - glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load("glProgramUniformMatrix3fv"); - glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load("glProgramUniformMatrix4fv"); - glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load("glProgramUniformMatrix2x3fv"); - glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load("glProgramUniformMatrix3x2fv"); - glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load("glProgramUniformMatrix2x4fv"); - glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load("glProgramUniformMatrix4x2fv"); - glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load("glProgramUniformMatrix3x4fv"); - glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load("glProgramUniformMatrix4x3fv"); - glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load("glValidateProgramPipeline"); - glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load("glGetProgramPipelineInfoLog"); - glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)load("glBindImageTexture"); - glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); - glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)load("glMemoryBarrier"); - glad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC)load("glMemoryBarrierByRegion"); - glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)load("glTexStorage2DMultisample"); - glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); - glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); - glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); - glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); - glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer"); - glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat"); - glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat"); - glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding"); - glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor"); -} -static void load_GL_ES_VERSION_3_2(GLADloadproc load) { - if(!GLAD_GL_ES_VERSION_3_2) return; - glad_glBlendBarrier = (PFNGLBLENDBARRIERPROC)load("glBlendBarrier"); - glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)load("glCopyImageSubData"); - glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)load("glDebugMessageControl"); - glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)load("glDebugMessageInsert"); - glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)load("glDebugMessageCallback"); - glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)load("glGetDebugMessageLog"); - glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load("glPushDebugGroup"); - glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)load("glPopDebugGroup"); - glad_glObjectLabel = (PFNGLOBJECTLABELPROC)load("glObjectLabel"); - glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load("glGetObjectLabel"); - glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load("glObjectPtrLabel"); - glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)load("glGetObjectPtrLabel"); - glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); - glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); - glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); - glad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)load("glBlendEquationi"); - glad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)load("glBlendEquationSeparatei"); - glad_glBlendFunci = (PFNGLBLENDFUNCIPROC)load("glBlendFunci"); - glad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)load("glBlendFuncSeparatei"); - glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); - glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); - glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); - glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); - glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); - glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); - glad_glPrimitiveBoundingBox = (PFNGLPRIMITIVEBOUNDINGBOXPROC)load("glPrimitiveBoundingBox"); - glad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC)load("glGetGraphicsResetStatus"); - glad_glReadnPixels = (PFNGLREADNPIXELSPROC)load("glReadnPixels"); - glad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC)load("glGetnUniformfv"); - glad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC)load("glGetnUniformiv"); - glad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC)load("glGetnUniformuiv"); - glad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)load("glMinSampleShading"); - glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri"); - glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); - glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); - glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); - glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); - glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); - glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); - glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); - glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); - glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); - glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)load("glTexBufferRange"); - glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)load("glTexStorage3DMultisample"); -} -static void load_GL_ANGLE_framebuffer_blit(GLADloadproc load) { - if(!GLAD_GL_ANGLE_framebuffer_blit) return; - glad_glBlitFramebufferANGLE = (PFNGLBLITFRAMEBUFFERANGLEPROC)load("glBlitFramebufferANGLE"); -} -static void load_GL_ANGLE_framebuffer_multisample(GLADloadproc load) { - if(!GLAD_GL_ANGLE_framebuffer_multisample) return; - glad_glRenderbufferStorageMultisampleANGLE = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)load("glRenderbufferStorageMultisampleANGLE"); -} -static void load_GL_ANGLE_instanced_arrays(GLADloadproc load) { - if(!GLAD_GL_ANGLE_instanced_arrays) return; - glad_glDrawArraysInstancedANGLE = (PFNGLDRAWARRAYSINSTANCEDANGLEPROC)load("glDrawArraysInstancedANGLE"); - glad_glDrawElementsInstancedANGLE = (PFNGLDRAWELEMENTSINSTANCEDANGLEPROC)load("glDrawElementsInstancedANGLE"); - glad_glVertexAttribDivisorANGLE = (PFNGLVERTEXATTRIBDIVISORANGLEPROC)load("glVertexAttribDivisorANGLE"); -} -static void load_GL_ANGLE_translated_shader_source(GLADloadproc load) { - if(!GLAD_GL_ANGLE_translated_shader_source) return; - glad_glGetTranslatedShaderSourceANGLE = (PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)load("glGetTranslatedShaderSourceANGLE"); -} -static void load_GL_APPLE_copy_texture_levels(GLADloadproc load) { - if(!GLAD_GL_APPLE_copy_texture_levels) return; - glad_glCopyTextureLevelsAPPLE = (PFNGLCOPYTEXTURELEVELSAPPLEPROC)load("glCopyTextureLevelsAPPLE"); -} -static void load_GL_APPLE_framebuffer_multisample(GLADloadproc load) { - if(!GLAD_GL_APPLE_framebuffer_multisample) return; - glad_glRenderbufferStorageMultisampleAPPLE = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC)load("glRenderbufferStorageMultisampleAPPLE"); - glad_glResolveMultisampleFramebufferAPPLE = (PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC)load("glResolveMultisampleFramebufferAPPLE"); -} -static void load_GL_APPLE_sync(GLADloadproc load) { - if(!GLAD_GL_APPLE_sync) return; - glad_glFenceSyncAPPLE = (PFNGLFENCESYNCAPPLEPROC)load("glFenceSyncAPPLE"); - glad_glIsSyncAPPLE = (PFNGLISSYNCAPPLEPROC)load("glIsSyncAPPLE"); - glad_glDeleteSyncAPPLE = (PFNGLDELETESYNCAPPLEPROC)load("glDeleteSyncAPPLE"); - glad_glClientWaitSyncAPPLE = (PFNGLCLIENTWAITSYNCAPPLEPROC)load("glClientWaitSyncAPPLE"); - glad_glWaitSyncAPPLE = (PFNGLWAITSYNCAPPLEPROC)load("glWaitSyncAPPLE"); - glad_glGetInteger64vAPPLE = (PFNGLGETINTEGER64VAPPLEPROC)load("glGetInteger64vAPPLE"); - glad_glGetSyncivAPPLE = (PFNGLGETSYNCIVAPPLEPROC)load("glGetSyncivAPPLE"); -} -static void load_GL_EXT_base_instance(GLADloadproc load) { - if(!GLAD_GL_EXT_base_instance) return; - glad_glDrawArraysInstancedBaseInstanceEXT = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC)load("glDrawArraysInstancedBaseInstanceEXT"); - glad_glDrawElementsInstancedBaseInstanceEXT = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC)load("glDrawElementsInstancedBaseInstanceEXT"); - glad_glDrawElementsInstancedBaseVertexBaseInstanceEXT = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC)load("glDrawElementsInstancedBaseVertexBaseInstanceEXT"); -} -static void load_GL_EXT_blend_func_extended(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_func_extended) return; - glad_glBindFragDataLocationIndexedEXT = (PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC)load("glBindFragDataLocationIndexedEXT"); - glad_glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)load("glBindFragDataLocationEXT"); - glad_glGetProgramResourceLocationIndexEXT = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC)load("glGetProgramResourceLocationIndexEXT"); - glad_glGetFragDataIndexEXT = (PFNGLGETFRAGDATAINDEXEXTPROC)load("glGetFragDataIndexEXT"); -} -static void load_GL_EXT_buffer_storage(GLADloadproc load) { - if(!GLAD_GL_EXT_buffer_storage) return; - glad_glBufferStorageEXT = (PFNGLBUFFERSTORAGEEXTPROC)load("glBufferStorageEXT"); -} -static void load_GL_EXT_clear_texture(GLADloadproc load) { - if(!GLAD_GL_EXT_clear_texture) return; - glad_glClearTexImageEXT = (PFNGLCLEARTEXIMAGEEXTPROC)load("glClearTexImageEXT"); - glad_glClearTexSubImageEXT = (PFNGLCLEARTEXSUBIMAGEEXTPROC)load("glClearTexSubImageEXT"); -} -static void load_GL_EXT_clip_control(GLADloadproc load) { - if(!GLAD_GL_EXT_clip_control) return; - glad_glClipControlEXT = (PFNGLCLIPCONTROLEXTPROC)load("glClipControlEXT"); -} -static void load_GL_EXT_copy_image(GLADloadproc load) { - if(!GLAD_GL_EXT_copy_image) return; - glad_glCopyImageSubDataEXT = (PFNGLCOPYIMAGESUBDATAEXTPROC)load("glCopyImageSubDataEXT"); -} -static void load_GL_EXT_discard_framebuffer(GLADloadproc load) { - if(!GLAD_GL_EXT_discard_framebuffer) return; - glad_glDiscardFramebufferEXT = (PFNGLDISCARDFRAMEBUFFEREXTPROC)load("glDiscardFramebufferEXT"); -} -static void load_GL_EXT_disjoint_timer_query(GLADloadproc load) { - if(!GLAD_GL_EXT_disjoint_timer_query) return; - glad_glGenQueriesEXT = (PFNGLGENQUERIESEXTPROC)load("glGenQueriesEXT"); - glad_glDeleteQueriesEXT = (PFNGLDELETEQUERIESEXTPROC)load("glDeleteQueriesEXT"); - glad_glIsQueryEXT = (PFNGLISQUERYEXTPROC)load("glIsQueryEXT"); - glad_glBeginQueryEXT = (PFNGLBEGINQUERYEXTPROC)load("glBeginQueryEXT"); - glad_glEndQueryEXT = (PFNGLENDQUERYEXTPROC)load("glEndQueryEXT"); - glad_glQueryCounterEXT = (PFNGLQUERYCOUNTEREXTPROC)load("glQueryCounterEXT"); - glad_glGetQueryivEXT = (PFNGLGETQUERYIVEXTPROC)load("glGetQueryivEXT"); - glad_glGetQueryObjectivEXT = (PFNGLGETQUERYOBJECTIVEXTPROC)load("glGetQueryObjectivEXT"); - glad_glGetQueryObjectuivEXT = (PFNGLGETQUERYOBJECTUIVEXTPROC)load("glGetQueryObjectuivEXT"); - glad_glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)load("glGetQueryObjecti64vEXT"); - glad_glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)load("glGetQueryObjectui64vEXT"); -} -static void load_GL_EXT_draw_buffers(GLADloadproc load) { - if(!GLAD_GL_EXT_draw_buffers) return; - glad_glDrawBuffersEXT = (PFNGLDRAWBUFFERSEXTPROC)load("glDrawBuffersEXT"); -} -static void load_GL_EXT_draw_buffers_indexed(GLADloadproc load) { - if(!GLAD_GL_EXT_draw_buffers_indexed) return; - glad_glEnableiEXT = (PFNGLENABLEIEXTPROC)load("glEnableiEXT"); - glad_glDisableiEXT = (PFNGLDISABLEIEXTPROC)load("glDisableiEXT"); - glad_glBlendEquationiEXT = (PFNGLBLENDEQUATIONIEXTPROC)load("glBlendEquationiEXT"); - glad_glBlendEquationSeparateiEXT = (PFNGLBLENDEQUATIONSEPARATEIEXTPROC)load("glBlendEquationSeparateiEXT"); - glad_glBlendFunciEXT = (PFNGLBLENDFUNCIEXTPROC)load("glBlendFunciEXT"); - glad_glBlendFuncSeparateiEXT = (PFNGLBLENDFUNCSEPARATEIEXTPROC)load("glBlendFuncSeparateiEXT"); - glad_glColorMaskiEXT = (PFNGLCOLORMASKIEXTPROC)load("glColorMaskiEXT"); - glad_glIsEnablediEXT = (PFNGLISENABLEDIEXTPROC)load("glIsEnablediEXT"); -} -static void load_GL_EXT_draw_elements_base_vertex(GLADloadproc load) { - if(!GLAD_GL_EXT_draw_elements_base_vertex) return; - glad_glDrawElementsBaseVertexEXT = (PFNGLDRAWELEMENTSBASEVERTEXEXTPROC)load("glDrawElementsBaseVertexEXT"); - glad_glDrawRangeElementsBaseVertexEXT = (PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC)load("glDrawRangeElementsBaseVertexEXT"); - glad_glDrawElementsInstancedBaseVertexEXT = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC)load("glDrawElementsInstancedBaseVertexEXT"); - glad_glMultiDrawElementsBaseVertexEXT = (PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC)load("glMultiDrawElementsBaseVertexEXT"); -} -static void load_GL_EXT_draw_transform_feedback(GLADloadproc load) { - if(!GLAD_GL_EXT_draw_transform_feedback) return; - glad_glDrawTransformFeedbackEXT = (PFNGLDRAWTRANSFORMFEEDBACKEXTPROC)load("glDrawTransformFeedbackEXT"); - glad_glDrawTransformFeedbackInstancedEXT = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC)load("glDrawTransformFeedbackInstancedEXT"); -} -static void load_GL_EXT_geometry_shader(GLADloadproc load) { - if(!GLAD_GL_EXT_geometry_shader) return; - glad_glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)load("glFramebufferTextureEXT"); -} -static void load_GL_EXT_instanced_arrays(GLADloadproc load) { - if(!GLAD_GL_EXT_instanced_arrays) return; - glad_glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)load("glDrawArraysInstancedEXT"); - glad_glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)load("glDrawElementsInstancedEXT"); - glad_glVertexAttribDivisorEXT = (PFNGLVERTEXATTRIBDIVISOREXTPROC)load("glVertexAttribDivisorEXT"); -} -static void load_GL_EXT_map_buffer_range(GLADloadproc load) { - if(!GLAD_GL_EXT_map_buffer_range) return; - glad_glMapBufferRangeEXT = (PFNGLMAPBUFFERRANGEEXTPROC)load("glMapBufferRangeEXT"); - glad_glFlushMappedBufferRangeEXT = (PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC)load("glFlushMappedBufferRangeEXT"); -} -static void load_GL_EXT_multi_draw_indirect(GLADloadproc load) { - if(!GLAD_GL_EXT_multi_draw_indirect) return; - glad_glMultiDrawArraysIndirectEXT = (PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC)load("glMultiDrawArraysIndirectEXT"); - glad_glMultiDrawElementsIndirectEXT = (PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC)load("glMultiDrawElementsIndirectEXT"); -} -static void load_GL_EXT_multisampled_render_to_texture(GLADloadproc load) { - if(!GLAD_GL_EXT_multisampled_render_to_texture) return; - glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glRenderbufferStorageMultisampleEXT"); - glad_glFramebufferTexture2DMultisampleEXT = (PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)load("glFramebufferTexture2DMultisampleEXT"); -} -static void load_GL_EXT_multiview_draw_buffers(GLADloadproc load) { - if(!GLAD_GL_EXT_multiview_draw_buffers) return; - glad_glReadBufferIndexedEXT = (PFNGLREADBUFFERINDEXEDEXTPROC)load("glReadBufferIndexedEXT"); - glad_glDrawBuffersIndexedEXT = (PFNGLDRAWBUFFERSINDEXEDEXTPROC)load("glDrawBuffersIndexedEXT"); - glad_glGetIntegeri_vEXT = (PFNGLGETINTEGERI_VEXTPROC)load("glGetIntegeri_vEXT"); -} -static void load_GL_EXT_occlusion_query_boolean(GLADloadproc load) { - if(!GLAD_GL_EXT_occlusion_query_boolean) return; - glad_glGenQueriesEXT = (PFNGLGENQUERIESEXTPROC)load("glGenQueriesEXT"); - glad_glDeleteQueriesEXT = (PFNGLDELETEQUERIESEXTPROC)load("glDeleteQueriesEXT"); - glad_glIsQueryEXT = (PFNGLISQUERYEXTPROC)load("glIsQueryEXT"); - glad_glBeginQueryEXT = (PFNGLBEGINQUERYEXTPROC)load("glBeginQueryEXT"); - glad_glEndQueryEXT = (PFNGLENDQUERYEXTPROC)load("glEndQueryEXT"); - glad_glGetQueryivEXT = (PFNGLGETQUERYIVEXTPROC)load("glGetQueryivEXT"); - glad_glGetQueryObjectuivEXT = (PFNGLGETQUERYOBJECTUIVEXTPROC)load("glGetQueryObjectuivEXT"); -} -static void load_GL_EXT_primitive_bounding_box(GLADloadproc load) { - if(!GLAD_GL_EXT_primitive_bounding_box) return; - glad_glPrimitiveBoundingBoxEXT = (PFNGLPRIMITIVEBOUNDINGBOXEXTPROC)load("glPrimitiveBoundingBoxEXT"); -} -static void load_GL_EXT_robustness(GLADloadproc load) { - if(!GLAD_GL_EXT_robustness) return; - glad_glGetGraphicsResetStatusEXT = (PFNGLGETGRAPHICSRESETSTATUSEXTPROC)load("glGetGraphicsResetStatusEXT"); - glad_glReadnPixelsEXT = (PFNGLREADNPIXELSEXTPROC)load("glReadnPixelsEXT"); - glad_glGetnUniformfvEXT = (PFNGLGETNUNIFORMFVEXTPROC)load("glGetnUniformfvEXT"); - glad_glGetnUniformivEXT = (PFNGLGETNUNIFORMIVEXTPROC)load("glGetnUniformivEXT"); -} -static void load_GL_EXT_shader_pixel_local_storage2(GLADloadproc load) { - if(!GLAD_GL_EXT_shader_pixel_local_storage2) return; - glad_glFramebufferPixelLocalStorageSizeEXT = (PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC)load("glFramebufferPixelLocalStorageSizeEXT"); - glad_glGetFramebufferPixelLocalStorageSizeEXT = (PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC)load("glGetFramebufferPixelLocalStorageSizeEXT"); - glad_glClearPixelLocalStorageuiEXT = (PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC)load("glClearPixelLocalStorageuiEXT"); -} -static void load_GL_EXT_sparse_texture(GLADloadproc load) { - if(!GLAD_GL_EXT_sparse_texture) return; - glad_glTexPageCommitmentEXT = (PFNGLTEXPAGECOMMITMENTEXTPROC)load("glTexPageCommitmentEXT"); -} -static void load_GL_EXT_tessellation_shader(GLADloadproc load) { - if(!GLAD_GL_EXT_tessellation_shader) return; - glad_glPatchParameteriEXT = (PFNGLPATCHPARAMETERIEXTPROC)load("glPatchParameteriEXT"); -} -static void load_GL_EXT_texture_border_clamp(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_border_clamp) return; - glad_glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)load("glTexParameterIivEXT"); - glad_glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)load("glTexParameterIuivEXT"); - glad_glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)load("glGetTexParameterIivEXT"); - glad_glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)load("glGetTexParameterIuivEXT"); - glad_glSamplerParameterIivEXT = (PFNGLSAMPLERPARAMETERIIVEXTPROC)load("glSamplerParameterIivEXT"); - glad_glSamplerParameterIuivEXT = (PFNGLSAMPLERPARAMETERIUIVEXTPROC)load("glSamplerParameterIuivEXT"); - glad_glGetSamplerParameterIivEXT = (PFNGLGETSAMPLERPARAMETERIIVEXTPROC)load("glGetSamplerParameterIivEXT"); - glad_glGetSamplerParameterIuivEXT = (PFNGLGETSAMPLERPARAMETERIUIVEXTPROC)load("glGetSamplerParameterIuivEXT"); -} -static void load_GL_EXT_texture_buffer(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_buffer) return; - glad_glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)load("glTexBufferEXT"); - glad_glTexBufferRangeEXT = (PFNGLTEXBUFFERRANGEEXTPROC)load("glTexBufferRangeEXT"); -} -static void load_GL_EXT_texture_storage(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_storage) return; - glad_glTexStorage1DEXT = (PFNGLTEXSTORAGE1DEXTPROC)load("glTexStorage1DEXT"); - glad_glTexStorage2DEXT = (PFNGLTEXSTORAGE2DEXTPROC)load("glTexStorage2DEXT"); - glad_glTexStorage3DEXT = (PFNGLTEXSTORAGE3DEXTPROC)load("glTexStorage3DEXT"); - glad_glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC)load("glTextureStorage1DEXT"); - glad_glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC)load("glTextureStorage2DEXT"); - glad_glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC)load("glTextureStorage3DEXT"); -} -static void load_GL_EXT_texture_view(GLADloadproc load) { - if(!GLAD_GL_EXT_texture_view) return; - glad_glTextureViewEXT = (PFNGLTEXTUREVIEWEXTPROC)load("glTextureViewEXT"); -} -static void load_GL_IMG_bindless_texture(GLADloadproc load) { - if(!GLAD_GL_IMG_bindless_texture) return; - glad_glGetTextureHandleIMG = (PFNGLGETTEXTUREHANDLEIMGPROC)load("glGetTextureHandleIMG"); - glad_glGetTextureSamplerHandleIMG = (PFNGLGETTEXTURESAMPLERHANDLEIMGPROC)load("glGetTextureSamplerHandleIMG"); - glad_glUniformHandleui64IMG = (PFNGLUNIFORMHANDLEUI64IMGPROC)load("glUniformHandleui64IMG"); - glad_glUniformHandleui64vIMG = (PFNGLUNIFORMHANDLEUI64VIMGPROC)load("glUniformHandleui64vIMG"); - glad_glProgramUniformHandleui64IMG = (PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC)load("glProgramUniformHandleui64IMG"); - glad_glProgramUniformHandleui64vIMG = (PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC)load("glProgramUniformHandleui64vIMG"); -} -static void load_GL_IMG_framebuffer_downsample(GLADloadproc load) { - if(!GLAD_GL_IMG_framebuffer_downsample) return; - glad_glFramebufferTexture2DDownsampleIMG = (PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC)load("glFramebufferTexture2DDownsampleIMG"); - glad_glFramebufferTextureLayerDownsampleIMG = (PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC)load("glFramebufferTextureLayerDownsampleIMG"); -} -static void load_GL_IMG_multisampled_render_to_texture(GLADloadproc load) { - if(!GLAD_GL_IMG_multisampled_render_to_texture) return; - glad_glRenderbufferStorageMultisampleIMG = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC)load("glRenderbufferStorageMultisampleIMG"); - glad_glFramebufferTexture2DMultisampleIMG = (PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC)load("glFramebufferTexture2DMultisampleIMG"); -} -static void load_GL_NV_copy_buffer(GLADloadproc load) { - if(!GLAD_GL_NV_copy_buffer) return; - glad_glCopyBufferSubDataNV = (PFNGLCOPYBUFFERSUBDATANVPROC)load("glCopyBufferSubDataNV"); -} -static void load_GL_NV_coverage_sample(GLADloadproc load) { - if(!GLAD_GL_NV_coverage_sample) return; - glad_glCoverageMaskNV = (PFNGLCOVERAGEMASKNVPROC)load("glCoverageMaskNV"); - glad_glCoverageOperationNV = (PFNGLCOVERAGEOPERATIONNVPROC)load("glCoverageOperationNV"); -} -static void load_GL_NV_draw_buffers(GLADloadproc load) { - if(!GLAD_GL_NV_draw_buffers) return; - glad_glDrawBuffersNV = (PFNGLDRAWBUFFERSNVPROC)load("glDrawBuffersNV"); -} -static void load_GL_NV_draw_instanced(GLADloadproc load) { - if(!GLAD_GL_NV_draw_instanced) return; - glad_glDrawArraysInstancedNV = (PFNGLDRAWARRAYSINSTANCEDNVPROC)load("glDrawArraysInstancedNV"); - glad_glDrawElementsInstancedNV = (PFNGLDRAWELEMENTSINSTANCEDNVPROC)load("glDrawElementsInstancedNV"); -} -static void load_GL_NV_framebuffer_blit(GLADloadproc load) { - if(!GLAD_GL_NV_framebuffer_blit) return; - glad_glBlitFramebufferNV = (PFNGLBLITFRAMEBUFFERNVPROC)load("glBlitFramebufferNV"); -} -static void load_GL_NV_framebuffer_multisample(GLADloadproc load) { - if(!GLAD_GL_NV_framebuffer_multisample) return; - glad_glRenderbufferStorageMultisampleNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC)load("glRenderbufferStorageMultisampleNV"); -} -static void load_GL_NV_instanced_arrays(GLADloadproc load) { - if(!GLAD_GL_NV_instanced_arrays) return; - glad_glVertexAttribDivisorNV = (PFNGLVERTEXATTRIBDIVISORNVPROC)load("glVertexAttribDivisorNV"); -} -static void load_GL_NV_non_square_matrices(GLADloadproc load) { - if(!GLAD_GL_NV_non_square_matrices) return; - glad_glUniformMatrix2x3fvNV = (PFNGLUNIFORMMATRIX2X3FVNVPROC)load("glUniformMatrix2x3fvNV"); - glad_glUniformMatrix3x2fvNV = (PFNGLUNIFORMMATRIX3X2FVNVPROC)load("glUniformMatrix3x2fvNV"); - glad_glUniformMatrix2x4fvNV = (PFNGLUNIFORMMATRIX2X4FVNVPROC)load("glUniformMatrix2x4fvNV"); - glad_glUniformMatrix4x2fvNV = (PFNGLUNIFORMMATRIX4X2FVNVPROC)load("glUniformMatrix4x2fvNV"); - glad_glUniformMatrix3x4fvNV = (PFNGLUNIFORMMATRIX3X4FVNVPROC)load("glUniformMatrix3x4fvNV"); - glad_glUniformMatrix4x3fvNV = (PFNGLUNIFORMMATRIX4X3FVNVPROC)load("glUniformMatrix4x3fvNV"); -} -static void load_GL_NV_polygon_mode(GLADloadproc load) { - if(!GLAD_GL_NV_polygon_mode) return; - glad_glPolygonModeNV = (PFNGLPOLYGONMODENVPROC)load("glPolygonModeNV"); -} -static void load_GL_NV_read_buffer(GLADloadproc load) { - if(!GLAD_GL_NV_read_buffer) return; - glad_glReadBufferNV = (PFNGLREADBUFFERNVPROC)load("glReadBufferNV"); -} -static void load_GL_NV_viewport_array(GLADloadproc load) { - if(!GLAD_GL_NV_viewport_array) return; - glad_glViewportArrayvNV = (PFNGLVIEWPORTARRAYVNVPROC)load("glViewportArrayvNV"); - glad_glViewportIndexedfNV = (PFNGLVIEWPORTINDEXEDFNVPROC)load("glViewportIndexedfNV"); - glad_glViewportIndexedfvNV = (PFNGLVIEWPORTINDEXEDFVNVPROC)load("glViewportIndexedfvNV"); - glad_glScissorArrayvNV = (PFNGLSCISSORARRAYVNVPROC)load("glScissorArrayvNV"); - glad_glScissorIndexedNV = (PFNGLSCISSORINDEXEDNVPROC)load("glScissorIndexedNV"); - glad_glScissorIndexedvNV = (PFNGLSCISSORINDEXEDVNVPROC)load("glScissorIndexedvNV"); - glad_glDepthRangeArrayfvNV = (PFNGLDEPTHRANGEARRAYFVNVPROC)load("glDepthRangeArrayfvNV"); - glad_glDepthRangeIndexedfNV = (PFNGLDEPTHRANGEINDEXEDFNVPROC)load("glDepthRangeIndexedfNV"); - glad_glGetFloati_vNV = (PFNGLGETFLOATI_VNVPROC)load("glGetFloati_vNV"); - glad_glEnableiNV = (PFNGLENABLEINVPROC)load("glEnableiNV"); - glad_glDisableiNV = (PFNGLDISABLEINVPROC)load("glDisableiNV"); - glad_glIsEnablediNV = (PFNGLISENABLEDINVPROC)load("glIsEnablediNV"); -} -static void load_GL_OES_EGL_image(GLADloadproc load) { - if(!GLAD_GL_OES_EGL_image) return; - glad_glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)load("glEGLImageTargetTexture2DOES"); - glad_glEGLImageTargetRenderbufferStorageOES = (PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC)load("glEGLImageTargetRenderbufferStorageOES"); -} -static void load_GL_OES_copy_image(GLADloadproc load) { - if(!GLAD_GL_OES_copy_image) return; - glad_glCopyImageSubDataOES = (PFNGLCOPYIMAGESUBDATAOESPROC)load("glCopyImageSubDataOES"); -} -static void load_GL_OES_draw_buffers_indexed(GLADloadproc load) { - if(!GLAD_GL_OES_draw_buffers_indexed) return; - glad_glEnableiOES = (PFNGLENABLEIOESPROC)load("glEnableiOES"); - glad_glDisableiOES = (PFNGLDISABLEIOESPROC)load("glDisableiOES"); - glad_glBlendEquationiOES = (PFNGLBLENDEQUATIONIOESPROC)load("glBlendEquationiOES"); - glad_glBlendEquationSeparateiOES = (PFNGLBLENDEQUATIONSEPARATEIOESPROC)load("glBlendEquationSeparateiOES"); - glad_glBlendFunciOES = (PFNGLBLENDFUNCIOESPROC)load("glBlendFunciOES"); - glad_glBlendFuncSeparateiOES = (PFNGLBLENDFUNCSEPARATEIOESPROC)load("glBlendFuncSeparateiOES"); - glad_glColorMaskiOES = (PFNGLCOLORMASKIOESPROC)load("glColorMaskiOES"); - glad_glIsEnablediOES = (PFNGLISENABLEDIOESPROC)load("glIsEnablediOES"); -} -static void load_GL_OES_draw_elements_base_vertex(GLADloadproc load) { - if(!GLAD_GL_OES_draw_elements_base_vertex) return; - glad_glDrawElementsBaseVertexOES = (PFNGLDRAWELEMENTSBASEVERTEXOESPROC)load("glDrawElementsBaseVertexOES"); - glad_glDrawRangeElementsBaseVertexOES = (PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC)load("glDrawRangeElementsBaseVertexOES"); - glad_glDrawElementsInstancedBaseVertexOES = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC)load("glDrawElementsInstancedBaseVertexOES"); - glad_glMultiDrawElementsBaseVertexEXT = (PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC)load("glMultiDrawElementsBaseVertexEXT"); -} -static void load_GL_OES_geometry_shader(GLADloadproc load) { - if(!GLAD_GL_OES_geometry_shader) return; - glad_glFramebufferTextureOES = (PFNGLFRAMEBUFFERTEXTUREOESPROC)load("glFramebufferTextureOES"); -} -static void load_GL_OES_get_program_binary(GLADloadproc load) { - if(!GLAD_GL_OES_get_program_binary) return; - glad_glGetProgramBinaryOES = (PFNGLGETPROGRAMBINARYOESPROC)load("glGetProgramBinaryOES"); - glad_glProgramBinaryOES = (PFNGLPROGRAMBINARYOESPROC)load("glProgramBinaryOES"); -} -static void load_GL_OES_mapbuffer(GLADloadproc load) { - if(!GLAD_GL_OES_mapbuffer) return; - glad_glMapBufferOES = (PFNGLMAPBUFFEROESPROC)load("glMapBufferOES"); - glad_glUnmapBufferOES = (PFNGLUNMAPBUFFEROESPROC)load("glUnmapBufferOES"); - glad_glGetBufferPointervOES = (PFNGLGETBUFFERPOINTERVOESPROC)load("glGetBufferPointervOES"); -} -static void load_GL_OES_primitive_bounding_box(GLADloadproc load) { - if(!GLAD_GL_OES_primitive_bounding_box) return; - glad_glPrimitiveBoundingBoxOES = (PFNGLPRIMITIVEBOUNDINGBOXOESPROC)load("glPrimitiveBoundingBoxOES"); -} -static void load_GL_OES_sample_shading(GLADloadproc load) { - if(!GLAD_GL_OES_sample_shading) return; - glad_glMinSampleShadingOES = (PFNGLMINSAMPLESHADINGOESPROC)load("glMinSampleShadingOES"); -} -static void load_GL_OES_tessellation_shader(GLADloadproc load) { - if(!GLAD_GL_OES_tessellation_shader) return; - glad_glPatchParameteriOES = (PFNGLPATCHPARAMETERIOESPROC)load("glPatchParameteriOES"); -} -static void load_GL_OES_texture_3D(GLADloadproc load) { - if(!GLAD_GL_OES_texture_3D) return; - glad_glTexImage3DOES = (PFNGLTEXIMAGE3DOESPROC)load("glTexImage3DOES"); - glad_glTexSubImage3DOES = (PFNGLTEXSUBIMAGE3DOESPROC)load("glTexSubImage3DOES"); - glad_glCopyTexSubImage3DOES = (PFNGLCOPYTEXSUBIMAGE3DOESPROC)load("glCopyTexSubImage3DOES"); - glad_glCompressedTexImage3DOES = (PFNGLCOMPRESSEDTEXIMAGE3DOESPROC)load("glCompressedTexImage3DOES"); - glad_glCompressedTexSubImage3DOES = (PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC)load("glCompressedTexSubImage3DOES"); - glad_glFramebufferTexture3DOES = (PFNGLFRAMEBUFFERTEXTURE3DOESPROC)load("glFramebufferTexture3DOES"); -} -static void load_GL_OES_texture_border_clamp(GLADloadproc load) { - if(!GLAD_GL_OES_texture_border_clamp) return; - glad_glTexParameterIivOES = (PFNGLTEXPARAMETERIIVOESPROC)load("glTexParameterIivOES"); - glad_glTexParameterIuivOES = (PFNGLTEXPARAMETERIUIVOESPROC)load("glTexParameterIuivOES"); - glad_glGetTexParameterIivOES = (PFNGLGETTEXPARAMETERIIVOESPROC)load("glGetTexParameterIivOES"); - glad_glGetTexParameterIuivOES = (PFNGLGETTEXPARAMETERIUIVOESPROC)load("glGetTexParameterIuivOES"); - glad_glSamplerParameterIivOES = (PFNGLSAMPLERPARAMETERIIVOESPROC)load("glSamplerParameterIivOES"); - glad_glSamplerParameterIuivOES = (PFNGLSAMPLERPARAMETERIUIVOESPROC)load("glSamplerParameterIuivOES"); - glad_glGetSamplerParameterIivOES = (PFNGLGETSAMPLERPARAMETERIIVOESPROC)load("glGetSamplerParameterIivOES"); - glad_glGetSamplerParameterIuivOES = (PFNGLGETSAMPLERPARAMETERIUIVOESPROC)load("glGetSamplerParameterIuivOES"); -} -static void load_GL_OES_texture_buffer(GLADloadproc load) { - if(!GLAD_GL_OES_texture_buffer) return; - glad_glTexBufferOES = (PFNGLTEXBUFFEROESPROC)load("glTexBufferOES"); - glad_glTexBufferRangeOES = (PFNGLTEXBUFFERRANGEOESPROC)load("glTexBufferRangeOES"); -} -static void load_GL_OES_texture_storage_multisample_2d_array(GLADloadproc load) { - if(!GLAD_GL_OES_texture_storage_multisample_2d_array) return; - glad_glTexStorage3DMultisampleOES = (PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC)load("glTexStorage3DMultisampleOES"); -} -static void load_GL_OES_texture_view(GLADloadproc load) { - if(!GLAD_GL_OES_texture_view) return; - glad_glTextureViewOES = (PFNGLTEXTUREVIEWOESPROC)load("glTextureViewOES"); -} -static void load_GL_OES_vertex_array_object(GLADloadproc load) { - if(!GLAD_GL_OES_vertex_array_object) return; - glad_glBindVertexArrayOES = (PFNGLBINDVERTEXARRAYOESPROC)load("glBindVertexArrayOES"); - glad_glDeleteVertexArraysOES = (PFNGLDELETEVERTEXARRAYSOESPROC)load("glDeleteVertexArraysOES"); - glad_glGenVertexArraysOES = (PFNGLGENVERTEXARRAYSOESPROC)load("glGenVertexArraysOES"); - glad_glIsVertexArrayOES = (PFNGLISVERTEXARRAYOESPROC)load("glIsVertexArrayOES"); -} -static void load_GL_OES_viewport_array(GLADloadproc load) { - if(!GLAD_GL_OES_viewport_array) return; - glad_glViewportArrayvOES = (PFNGLVIEWPORTARRAYVOESPROC)load("glViewportArrayvOES"); - glad_glViewportIndexedfOES = (PFNGLVIEWPORTINDEXEDFOESPROC)load("glViewportIndexedfOES"); - glad_glViewportIndexedfvOES = (PFNGLVIEWPORTINDEXEDFVOESPROC)load("glViewportIndexedfvOES"); - glad_glScissorArrayvOES = (PFNGLSCISSORARRAYVOESPROC)load("glScissorArrayvOES"); - glad_glScissorIndexedOES = (PFNGLSCISSORINDEXEDOESPROC)load("glScissorIndexedOES"); - glad_glScissorIndexedvOES = (PFNGLSCISSORINDEXEDVOESPROC)load("glScissorIndexedvOES"); - glad_glDepthRangeArrayfvOES = (PFNGLDEPTHRANGEARRAYFVOESPROC)load("glDepthRangeArrayfvOES"); - glad_glDepthRangeIndexedfOES = (PFNGLDEPTHRANGEINDEXEDFOESPROC)load("glDepthRangeIndexedfOES"); - glad_glGetFloati_vOES = (PFNGLGETFLOATI_VOESPROC)load("glGetFloati_vOES"); - glad_glEnableiOES = (PFNGLENABLEIOESPROC)load("glEnableiOES"); - glad_glDisableiOES = (PFNGLDISABLEIOESPROC)load("glDisableiOES"); - glad_glIsEnablediOES = (PFNGLISENABLEDIOESPROC)load("glIsEnablediOES"); -} -static void load_GL_OVR_multiview_multisampled_render_to_texture(GLADloadproc load) { - if(!GLAD_GL_OVR_multiview_multisampled_render_to_texture) return; - glad_glFramebufferTextureMultisampleMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC)load("glFramebufferTextureMultisampleMultiviewOVR"); -} -static void load_GL_QCOM_alpha_test(GLADloadproc load) { - if(!GLAD_GL_QCOM_alpha_test) return; - glad_glAlphaFuncQCOM = (PFNGLALPHAFUNCQCOMPROC)load("glAlphaFuncQCOM"); -} -static void load_GL_QCOM_driver_control(GLADloadproc load) { - if(!GLAD_GL_QCOM_driver_control) return; - glad_glGetDriverControlsQCOM = (PFNGLGETDRIVERCONTROLSQCOMPROC)load("glGetDriverControlsQCOM"); - glad_glGetDriverControlStringQCOM = (PFNGLGETDRIVERCONTROLSTRINGQCOMPROC)load("glGetDriverControlStringQCOM"); - glad_glEnableDriverControlQCOM = (PFNGLENABLEDRIVERCONTROLQCOMPROC)load("glEnableDriverControlQCOM"); - glad_glDisableDriverControlQCOM = (PFNGLDISABLEDRIVERCONTROLQCOMPROC)load("glDisableDriverControlQCOM"); -} -static void load_GL_QCOM_extended_get(GLADloadproc load) { - if(!GLAD_GL_QCOM_extended_get) return; - glad_glExtGetTexturesQCOM = (PFNGLEXTGETTEXTURESQCOMPROC)load("glExtGetTexturesQCOM"); - glad_glExtGetBuffersQCOM = (PFNGLEXTGETBUFFERSQCOMPROC)load("glExtGetBuffersQCOM"); - glad_glExtGetRenderbuffersQCOM = (PFNGLEXTGETRENDERBUFFERSQCOMPROC)load("glExtGetRenderbuffersQCOM"); - glad_glExtGetFramebuffersQCOM = (PFNGLEXTGETFRAMEBUFFERSQCOMPROC)load("glExtGetFramebuffersQCOM"); - glad_glExtGetTexLevelParameterivQCOM = (PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC)load("glExtGetTexLevelParameterivQCOM"); - glad_glExtTexObjectStateOverrideiQCOM = (PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC)load("glExtTexObjectStateOverrideiQCOM"); - glad_glExtGetTexSubImageQCOM = (PFNGLEXTGETTEXSUBIMAGEQCOMPROC)load("glExtGetTexSubImageQCOM"); - glad_glExtGetBufferPointervQCOM = (PFNGLEXTGETBUFFERPOINTERVQCOMPROC)load("glExtGetBufferPointervQCOM"); -} -static void load_GL_QCOM_extended_get2(GLADloadproc load) { - if(!GLAD_GL_QCOM_extended_get2) return; - glad_glExtGetShadersQCOM = (PFNGLEXTGETSHADERSQCOMPROC)load("glExtGetShadersQCOM"); - glad_glExtGetProgramsQCOM = (PFNGLEXTGETPROGRAMSQCOMPROC)load("glExtGetProgramsQCOM"); - glad_glExtIsProgramBinaryQCOM = (PFNGLEXTISPROGRAMBINARYQCOMPROC)load("glExtIsProgramBinaryQCOM"); - glad_glExtGetProgramBinarySourceQCOM = (PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC)load("glExtGetProgramBinarySourceQCOM"); -} -static void load_GL_QCOM_framebuffer_foveated(GLADloadproc load) { - if(!GLAD_GL_QCOM_framebuffer_foveated) return; - glad_glFramebufferFoveationConfigQCOM = (PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC)load("glFramebufferFoveationConfigQCOM"); - glad_glFramebufferFoveationParametersQCOM = (PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC)load("glFramebufferFoveationParametersQCOM"); -} -static void load_GL_QCOM_shader_framebuffer_fetch_noncoherent(GLADloadproc load) { - if(!GLAD_GL_QCOM_shader_framebuffer_fetch_noncoherent) return; - glad_glFramebufferFetchBarrierQCOM = (PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC)load("glFramebufferFetchBarrierQCOM"); -} -static void load_GL_QCOM_texture_foveated(GLADloadproc load) { - if(!GLAD_GL_QCOM_texture_foveated) return; - glad_glTextureFoveationParametersQCOM = (PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC)load("glTextureFoveationParametersQCOM"); -} -static void load_GL_QCOM_tiled_rendering(GLADloadproc load) { - if(!GLAD_GL_QCOM_tiled_rendering) return; - glad_glStartTilingQCOM = (PFNGLSTARTTILINGQCOMPROC)load("glStartTilingQCOM"); - glad_glEndTilingQCOM = (PFNGLENDTILINGQCOMPROC)load("glEndTilingQCOM"); -} -static int find_extensionsGLES2(void) { - if (!get_exts()) return 0; - GLAD_GL_AMD_compressed_3DC_texture = has_ext("GL_AMD_compressed_3DC_texture"); - GLAD_GL_AMD_compressed_ATC_texture = has_ext("GL_AMD_compressed_ATC_texture"); - GLAD_GL_AMD_performance_monitor = has_ext("GL_AMD_performance_monitor"); - GLAD_GL_AMD_program_binary_Z400 = has_ext("GL_AMD_program_binary_Z400"); - GLAD_GL_ANDROID_extension_pack_es31a = has_ext("GL_ANDROID_extension_pack_es31a"); - GLAD_GL_ANGLE_depth_texture = has_ext("GL_ANGLE_depth_texture"); - GLAD_GL_ANGLE_framebuffer_blit = has_ext("GL_ANGLE_framebuffer_blit"); - GLAD_GL_ANGLE_framebuffer_multisample = has_ext("GL_ANGLE_framebuffer_multisample"); - GLAD_GL_ANGLE_instanced_arrays = has_ext("GL_ANGLE_instanced_arrays"); - GLAD_GL_ANGLE_pack_reverse_row_order = has_ext("GL_ANGLE_pack_reverse_row_order"); - GLAD_GL_ANGLE_program_binary = has_ext("GL_ANGLE_program_binary"); - GLAD_GL_ANGLE_texture_compression_dxt3 = has_ext("GL_ANGLE_texture_compression_dxt3"); - GLAD_GL_ANGLE_texture_compression_dxt5 = has_ext("GL_ANGLE_texture_compression_dxt5"); - GLAD_GL_ANGLE_texture_usage = has_ext("GL_ANGLE_texture_usage"); - GLAD_GL_ANGLE_translated_shader_source = has_ext("GL_ANGLE_translated_shader_source"); - GLAD_GL_APPLE_clip_distance = has_ext("GL_APPLE_clip_distance"); - GLAD_GL_APPLE_color_buffer_packed_float = has_ext("GL_APPLE_color_buffer_packed_float"); - GLAD_GL_APPLE_copy_texture_levels = has_ext("GL_APPLE_copy_texture_levels"); - GLAD_GL_APPLE_framebuffer_multisample = has_ext("GL_APPLE_framebuffer_multisample"); - GLAD_GL_APPLE_rgb_422 = has_ext("GL_APPLE_rgb_422"); - GLAD_GL_APPLE_sync = has_ext("GL_APPLE_sync"); - GLAD_GL_APPLE_texture_format_BGRA8888 = has_ext("GL_APPLE_texture_format_BGRA8888"); - GLAD_GL_APPLE_texture_max_level = has_ext("GL_APPLE_texture_max_level"); - GLAD_GL_APPLE_texture_packed_float = has_ext("GL_APPLE_texture_packed_float"); - GLAD_GL_ARM_mali_program_binary = has_ext("GL_ARM_mali_program_binary"); - GLAD_GL_ARM_mali_shader_binary = has_ext("GL_ARM_mali_shader_binary"); - GLAD_GL_ARM_rgba8 = has_ext("GL_ARM_rgba8"); - GLAD_GL_ARM_shader_framebuffer_fetch = has_ext("GL_ARM_shader_framebuffer_fetch"); - GLAD_GL_ARM_shader_framebuffer_fetch_depth_stencil = has_ext("GL_ARM_shader_framebuffer_fetch_depth_stencil"); - GLAD_GL_DMP_program_binary = has_ext("GL_DMP_program_binary"); - GLAD_GL_DMP_shader_binary = has_ext("GL_DMP_shader_binary"); - GLAD_GL_EXT_EGL_image_array = has_ext("GL_EXT_EGL_image_array"); - GLAD_GL_EXT_EGL_image_storage = has_ext("GL_EXT_EGL_image_storage"); - GLAD_GL_EXT_YUV_target = has_ext("GL_EXT_YUV_target"); - GLAD_GL_EXT_base_instance = has_ext("GL_EXT_base_instance"); - GLAD_GL_EXT_blend_func_extended = has_ext("GL_EXT_blend_func_extended"); - GLAD_GL_EXT_blend_minmax = has_ext("GL_EXT_blend_minmax"); - GLAD_GL_EXT_buffer_storage = has_ext("GL_EXT_buffer_storage"); - GLAD_GL_EXT_clear_texture = has_ext("GL_EXT_clear_texture"); - GLAD_GL_EXT_clip_control = has_ext("GL_EXT_clip_control"); - GLAD_GL_EXT_clip_cull_distance = has_ext("GL_EXT_clip_cull_distance"); - GLAD_GL_EXT_color_buffer_float = has_ext("GL_EXT_color_buffer_float"); - GLAD_GL_EXT_color_buffer_half_float = has_ext("GL_EXT_color_buffer_half_float"); - GLAD_GL_EXT_conservative_depth = has_ext("GL_EXT_conservative_depth"); - GLAD_GL_EXT_copy_image = has_ext("GL_EXT_copy_image"); - GLAD_GL_EXT_debug_label = has_ext("GL_EXT_debug_label"); - GLAD_GL_EXT_debug_marker = has_ext("GL_EXT_debug_marker"); - GLAD_GL_EXT_discard_framebuffer = has_ext("GL_EXT_discard_framebuffer"); - GLAD_GL_EXT_disjoint_timer_query = has_ext("GL_EXT_disjoint_timer_query"); - GLAD_GL_EXT_draw_buffers = has_ext("GL_EXT_draw_buffers"); - GLAD_GL_EXT_draw_buffers_indexed = has_ext("GL_EXT_draw_buffers_indexed"); - GLAD_GL_EXT_draw_elements_base_vertex = has_ext("GL_EXT_draw_elements_base_vertex"); - GLAD_GL_EXT_draw_instanced = has_ext("GL_EXT_draw_instanced"); - GLAD_GL_EXT_draw_transform_feedback = has_ext("GL_EXT_draw_transform_feedback"); - GLAD_GL_EXT_external_buffer = has_ext("GL_EXT_external_buffer"); - GLAD_GL_EXT_float_blend = has_ext("GL_EXT_float_blend"); - GLAD_GL_EXT_geometry_point_size = has_ext("GL_EXT_geometry_point_size"); - GLAD_GL_EXT_geometry_shader = has_ext("GL_EXT_geometry_shader"); - GLAD_GL_EXT_gpu_shader5 = has_ext("GL_EXT_gpu_shader5"); - GLAD_GL_EXT_instanced_arrays = has_ext("GL_EXT_instanced_arrays"); - GLAD_GL_EXT_map_buffer_range = has_ext("GL_EXT_map_buffer_range"); - GLAD_GL_EXT_memory_object = has_ext("GL_EXT_memory_object"); - GLAD_GL_EXT_memory_object_fd = has_ext("GL_EXT_memory_object_fd"); - GLAD_GL_EXT_memory_object_win32 = has_ext("GL_EXT_memory_object_win32"); - GLAD_GL_EXT_multi_draw_arrays = has_ext("GL_EXT_multi_draw_arrays"); - GLAD_GL_EXT_multi_draw_indirect = has_ext("GL_EXT_multi_draw_indirect"); - GLAD_GL_EXT_multisampled_compatibility = has_ext("GL_EXT_multisampled_compatibility"); - GLAD_GL_EXT_multisampled_render_to_texture = has_ext("GL_EXT_multisampled_render_to_texture"); - GLAD_GL_EXT_multiview_draw_buffers = has_ext("GL_EXT_multiview_draw_buffers"); - GLAD_GL_EXT_occlusion_query_boolean = has_ext("GL_EXT_occlusion_query_boolean"); - GLAD_GL_EXT_polygon_offset_clamp = has_ext("GL_EXT_polygon_offset_clamp"); - GLAD_GL_EXT_post_depth_coverage = has_ext("GL_EXT_post_depth_coverage"); - GLAD_GL_EXT_primitive_bounding_box = has_ext("GL_EXT_primitive_bounding_box"); - GLAD_GL_EXT_protected_textures = has_ext("GL_EXT_protected_textures"); - GLAD_GL_EXT_pvrtc_sRGB = has_ext("GL_EXT_pvrtc_sRGB"); - GLAD_GL_EXT_raster_multisample = has_ext("GL_EXT_raster_multisample"); - GLAD_GL_EXT_read_format_bgra = has_ext("GL_EXT_read_format_bgra"); - GLAD_GL_EXT_render_snorm = has_ext("GL_EXT_render_snorm"); - GLAD_GL_EXT_robustness = has_ext("GL_EXT_robustness"); - GLAD_GL_EXT_sRGB = has_ext("GL_EXT_sRGB"); - GLAD_GL_EXT_sRGB_write_control = has_ext("GL_EXT_sRGB_write_control"); - GLAD_GL_EXT_semaphore = has_ext("GL_EXT_semaphore"); - GLAD_GL_EXT_semaphore_fd = has_ext("GL_EXT_semaphore_fd"); - GLAD_GL_EXT_semaphore_win32 = has_ext("GL_EXT_semaphore_win32"); - GLAD_GL_EXT_separate_shader_objects = has_ext("GL_EXT_separate_shader_objects"); - GLAD_GL_EXT_shader_framebuffer_fetch = has_ext("GL_EXT_shader_framebuffer_fetch"); - GLAD_GL_EXT_shader_framebuffer_fetch_non_coherent = has_ext("GL_EXT_shader_framebuffer_fetch_non_coherent"); - GLAD_GL_EXT_shader_group_vote = has_ext("GL_EXT_shader_group_vote"); - GLAD_GL_EXT_shader_implicit_conversions = has_ext("GL_EXT_shader_implicit_conversions"); - GLAD_GL_EXT_shader_integer_mix = has_ext("GL_EXT_shader_integer_mix"); - GLAD_GL_EXT_shader_io_blocks = has_ext("GL_EXT_shader_io_blocks"); - GLAD_GL_EXT_shader_non_constant_global_initializers = has_ext("GL_EXT_shader_non_constant_global_initializers"); - GLAD_GL_EXT_shader_pixel_local_storage = has_ext("GL_EXT_shader_pixel_local_storage"); - GLAD_GL_EXT_shader_pixel_local_storage2 = has_ext("GL_EXT_shader_pixel_local_storage2"); - GLAD_GL_EXT_shader_texture_lod = has_ext("GL_EXT_shader_texture_lod"); - GLAD_GL_EXT_shadow_samplers = has_ext("GL_EXT_shadow_samplers"); - GLAD_GL_EXT_sparse_texture = has_ext("GL_EXT_sparse_texture"); - GLAD_GL_EXT_sparse_texture2 = has_ext("GL_EXT_sparse_texture2"); - GLAD_GL_EXT_tessellation_point_size = has_ext("GL_EXT_tessellation_point_size"); - GLAD_GL_EXT_tessellation_shader = has_ext("GL_EXT_tessellation_shader"); - GLAD_GL_EXT_texture_border_clamp = has_ext("GL_EXT_texture_border_clamp"); - GLAD_GL_EXT_texture_buffer = has_ext("GL_EXT_texture_buffer"); - GLAD_GL_EXT_texture_compression_astc_decode_mode = has_ext("GL_EXT_texture_compression_astc_decode_mode"); - GLAD_GL_EXT_texture_compression_bptc = has_ext("GL_EXT_texture_compression_bptc"); - GLAD_GL_EXT_texture_compression_dxt1 = has_ext("GL_EXT_texture_compression_dxt1"); - GLAD_GL_EXT_texture_compression_rgtc = has_ext("GL_EXT_texture_compression_rgtc"); - GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc"); - GLAD_GL_EXT_texture_compression_s3tc_srgb = has_ext("GL_EXT_texture_compression_s3tc_srgb"); - GLAD_GL_EXT_texture_cube_map_array = has_ext("GL_EXT_texture_cube_map_array"); - GLAD_GL_EXT_texture_filter_anisotropic = has_ext("GL_EXT_texture_filter_anisotropic"); - GLAD_GL_EXT_texture_filter_minmax = has_ext("GL_EXT_texture_filter_minmax"); - GLAD_GL_EXT_texture_format_BGRA8888 = has_ext("GL_EXT_texture_format_BGRA8888"); - GLAD_GL_EXT_texture_format_sRGB_override = has_ext("GL_EXT_texture_format_sRGB_override"); - GLAD_GL_EXT_texture_mirror_clamp_to_edge = has_ext("GL_EXT_texture_mirror_clamp_to_edge"); - GLAD_GL_EXT_texture_norm16 = has_ext("GL_EXT_texture_norm16"); - GLAD_GL_EXT_texture_rg = has_ext("GL_EXT_texture_rg"); - GLAD_GL_EXT_texture_sRGB_R8 = has_ext("GL_EXT_texture_sRGB_R8"); - GLAD_GL_EXT_texture_sRGB_RG8 = has_ext("GL_EXT_texture_sRGB_RG8"); - GLAD_GL_EXT_texture_sRGB_decode = has_ext("GL_EXT_texture_sRGB_decode"); - GLAD_GL_EXT_texture_storage = has_ext("GL_EXT_texture_storage"); - GLAD_GL_EXT_texture_type_2_10_10_10_REV = has_ext("GL_EXT_texture_type_2_10_10_10_REV"); - GLAD_GL_EXT_texture_view = has_ext("GL_EXT_texture_view"); - GLAD_GL_EXT_unpack_subimage = has_ext("GL_EXT_unpack_subimage"); - GLAD_GL_EXT_win32_keyed_mutex = has_ext("GL_EXT_win32_keyed_mutex"); - GLAD_GL_EXT_window_rectangles = has_ext("GL_EXT_window_rectangles"); - GLAD_GL_FJ_shader_binary_GCCSO = has_ext("GL_FJ_shader_binary_GCCSO"); - GLAD_GL_IMG_bindless_texture = has_ext("GL_IMG_bindless_texture"); - GLAD_GL_IMG_framebuffer_downsample = has_ext("GL_IMG_framebuffer_downsample"); - GLAD_GL_IMG_multisampled_render_to_texture = has_ext("GL_IMG_multisampled_render_to_texture"); - GLAD_GL_IMG_program_binary = has_ext("GL_IMG_program_binary"); - GLAD_GL_IMG_read_format = has_ext("GL_IMG_read_format"); - GLAD_GL_IMG_shader_binary = has_ext("GL_IMG_shader_binary"); - GLAD_GL_IMG_texture_compression_pvrtc = has_ext("GL_IMG_texture_compression_pvrtc"); - GLAD_GL_IMG_texture_compression_pvrtc2 = has_ext("GL_IMG_texture_compression_pvrtc2"); - GLAD_GL_IMG_texture_filter_cubic = has_ext("GL_IMG_texture_filter_cubic"); - GLAD_GL_INTEL_blackhole_render = has_ext("GL_INTEL_blackhole_render"); - GLAD_GL_INTEL_conservative_rasterization = has_ext("GL_INTEL_conservative_rasterization"); - GLAD_GL_INTEL_framebuffer_CMAA = has_ext("GL_INTEL_framebuffer_CMAA"); - GLAD_GL_INTEL_performance_query = has_ext("GL_INTEL_performance_query"); - GLAD_GL_KHR_blend_equation_advanced = has_ext("GL_KHR_blend_equation_advanced"); - GLAD_GL_KHR_blend_equation_advanced_coherent = has_ext("GL_KHR_blend_equation_advanced_coherent"); - GLAD_GL_KHR_context_flush_control = has_ext("GL_KHR_context_flush_control"); - GLAD_GL_KHR_debug = has_ext("GL_KHR_debug"); - GLAD_GL_KHR_no_error = has_ext("GL_KHR_no_error"); - GLAD_GL_KHR_parallel_shader_compile = has_ext("GL_KHR_parallel_shader_compile"); - GLAD_GL_KHR_robust_buffer_access_behavior = has_ext("GL_KHR_robust_buffer_access_behavior"); - GLAD_GL_KHR_robustness = has_ext("GL_KHR_robustness"); - GLAD_GL_KHR_texture_compression_astc_hdr = has_ext("GL_KHR_texture_compression_astc_hdr"); - GLAD_GL_KHR_texture_compression_astc_ldr = has_ext("GL_KHR_texture_compression_astc_ldr"); - GLAD_GL_KHR_texture_compression_astc_sliced_3d = has_ext("GL_KHR_texture_compression_astc_sliced_3d"); - GLAD_GL_MESA_program_binary_formats = has_ext("GL_MESA_program_binary_formats"); - GLAD_GL_MESA_shader_integer_functions = has_ext("GL_MESA_shader_integer_functions"); - GLAD_GL_NVX_blend_equation_advanced_multi_draw_buffers = has_ext("GL_NVX_blend_equation_advanced_multi_draw_buffers"); - GLAD_GL_NV_bindless_texture = has_ext("GL_NV_bindless_texture"); - GLAD_GL_NV_blend_equation_advanced = has_ext("GL_NV_blend_equation_advanced"); - GLAD_GL_NV_blend_equation_advanced_coherent = has_ext("GL_NV_blend_equation_advanced_coherent"); - GLAD_GL_NV_blend_minmax_factor = has_ext("GL_NV_blend_minmax_factor"); - GLAD_GL_NV_clip_space_w_scaling = has_ext("GL_NV_clip_space_w_scaling"); - GLAD_GL_NV_conditional_render = has_ext("GL_NV_conditional_render"); - GLAD_GL_NV_conservative_raster = has_ext("GL_NV_conservative_raster"); - GLAD_GL_NV_conservative_raster_pre_snap = has_ext("GL_NV_conservative_raster_pre_snap"); - GLAD_GL_NV_conservative_raster_pre_snap_triangles = has_ext("GL_NV_conservative_raster_pre_snap_triangles"); - GLAD_GL_NV_copy_buffer = has_ext("GL_NV_copy_buffer"); - GLAD_GL_NV_coverage_sample = has_ext("GL_NV_coverage_sample"); - GLAD_GL_NV_depth_nonlinear = has_ext("GL_NV_depth_nonlinear"); - GLAD_GL_NV_draw_buffers = has_ext("GL_NV_draw_buffers"); - GLAD_GL_NV_draw_instanced = has_ext("GL_NV_draw_instanced"); - GLAD_GL_NV_draw_vulkan_image = has_ext("GL_NV_draw_vulkan_image"); - GLAD_GL_NV_explicit_attrib_location = has_ext("GL_NV_explicit_attrib_location"); - GLAD_GL_NV_fbo_color_attachments = has_ext("GL_NV_fbo_color_attachments"); - GLAD_GL_NV_fence = has_ext("GL_NV_fence"); - GLAD_GL_NV_fill_rectangle = has_ext("GL_NV_fill_rectangle"); - GLAD_GL_NV_fragment_coverage_to_color = has_ext("GL_NV_fragment_coverage_to_color"); - GLAD_GL_NV_fragment_shader_interlock = has_ext("GL_NV_fragment_shader_interlock"); - GLAD_GL_NV_framebuffer_blit = has_ext("GL_NV_framebuffer_blit"); - GLAD_GL_NV_framebuffer_mixed_samples = has_ext("GL_NV_framebuffer_mixed_samples"); - GLAD_GL_NV_framebuffer_multisample = has_ext("GL_NV_framebuffer_multisample"); - GLAD_GL_NV_generate_mipmap_sRGB = has_ext("GL_NV_generate_mipmap_sRGB"); - GLAD_GL_NV_geometry_shader_passthrough = has_ext("GL_NV_geometry_shader_passthrough"); - GLAD_GL_NV_gpu_shader5 = has_ext("GL_NV_gpu_shader5"); - GLAD_GL_NV_image_formats = has_ext("GL_NV_image_formats"); - GLAD_GL_NV_instanced_arrays = has_ext("GL_NV_instanced_arrays"); - GLAD_GL_NV_internalformat_sample_query = has_ext("GL_NV_internalformat_sample_query"); - GLAD_GL_NV_non_square_matrices = has_ext("GL_NV_non_square_matrices"); - GLAD_GL_NV_path_rendering = has_ext("GL_NV_path_rendering"); - GLAD_GL_NV_path_rendering_shared_edge = has_ext("GL_NV_path_rendering_shared_edge"); - GLAD_GL_NV_pixel_buffer_object = has_ext("GL_NV_pixel_buffer_object"); - GLAD_GL_NV_polygon_mode = has_ext("GL_NV_polygon_mode"); - GLAD_GL_NV_read_buffer = has_ext("GL_NV_read_buffer"); - GLAD_GL_NV_read_buffer_front = has_ext("GL_NV_read_buffer_front"); - GLAD_GL_NV_read_depth = has_ext("GL_NV_read_depth"); - GLAD_GL_NV_read_depth_stencil = has_ext("GL_NV_read_depth_stencil"); - GLAD_GL_NV_read_stencil = has_ext("GL_NV_read_stencil"); - GLAD_GL_NV_sRGB_formats = has_ext("GL_NV_sRGB_formats"); - GLAD_GL_NV_sample_locations = has_ext("GL_NV_sample_locations"); - GLAD_GL_NV_sample_mask_override_coverage = has_ext("GL_NV_sample_mask_override_coverage"); - GLAD_GL_NV_shader_atomic_fp16_vector = has_ext("GL_NV_shader_atomic_fp16_vector"); - GLAD_GL_NV_shader_noperspective_interpolation = has_ext("GL_NV_shader_noperspective_interpolation"); - GLAD_GL_NV_shadow_samplers_array = has_ext("GL_NV_shadow_samplers_array"); - GLAD_GL_NV_shadow_samplers_cube = has_ext("GL_NV_shadow_samplers_cube"); - GLAD_GL_NV_stereo_view_rendering = has_ext("GL_NV_stereo_view_rendering"); - GLAD_GL_NV_texture_border_clamp = has_ext("GL_NV_texture_border_clamp"); - GLAD_GL_NV_texture_compression_s3tc_update = has_ext("GL_NV_texture_compression_s3tc_update"); - GLAD_GL_NV_texture_npot_2D_mipmap = has_ext("GL_NV_texture_npot_2D_mipmap"); - GLAD_GL_NV_viewport_array = has_ext("GL_NV_viewport_array"); - GLAD_GL_NV_viewport_array2 = has_ext("GL_NV_viewport_array2"); - GLAD_GL_NV_viewport_swizzle = has_ext("GL_NV_viewport_swizzle"); - GLAD_GL_OES_EGL_image = has_ext("GL_OES_EGL_image"); - GLAD_GL_OES_EGL_image_external = has_ext("GL_OES_EGL_image_external"); - GLAD_GL_OES_EGL_image_external_essl3 = has_ext("GL_OES_EGL_image_external_essl3"); - GLAD_GL_OES_compressed_ETC1_RGB8_sub_texture = has_ext("GL_OES_compressed_ETC1_RGB8_sub_texture"); - GLAD_GL_OES_compressed_ETC1_RGB8_texture = has_ext("GL_OES_compressed_ETC1_RGB8_texture"); - GLAD_GL_OES_compressed_paletted_texture = has_ext("GL_OES_compressed_paletted_texture"); - GLAD_GL_OES_copy_image = has_ext("GL_OES_copy_image"); - GLAD_GL_OES_depth24 = has_ext("GL_OES_depth24"); - GLAD_GL_OES_depth32 = has_ext("GL_OES_depth32"); - GLAD_GL_OES_depth_texture = has_ext("GL_OES_depth_texture"); - GLAD_GL_OES_draw_buffers_indexed = has_ext("GL_OES_draw_buffers_indexed"); - GLAD_GL_OES_draw_elements_base_vertex = has_ext("GL_OES_draw_elements_base_vertex"); - GLAD_GL_OES_element_index_uint = has_ext("GL_OES_element_index_uint"); - GLAD_GL_OES_fbo_render_mipmap = has_ext("GL_OES_fbo_render_mipmap"); - GLAD_GL_OES_fragment_precision_high = has_ext("GL_OES_fragment_precision_high"); - GLAD_GL_OES_geometry_point_size = has_ext("GL_OES_geometry_point_size"); - GLAD_GL_OES_geometry_shader = has_ext("GL_OES_geometry_shader"); - GLAD_GL_OES_get_program_binary = has_ext("GL_OES_get_program_binary"); - GLAD_GL_OES_gpu_shader5 = has_ext("GL_OES_gpu_shader5"); - GLAD_GL_OES_mapbuffer = has_ext("GL_OES_mapbuffer"); - GLAD_GL_OES_packed_depth_stencil = has_ext("GL_OES_packed_depth_stencil"); - GLAD_GL_OES_primitive_bounding_box = has_ext("GL_OES_primitive_bounding_box"); - GLAD_GL_OES_required_internalformat = has_ext("GL_OES_required_internalformat"); - GLAD_GL_OES_rgb8_rgba8 = has_ext("GL_OES_rgb8_rgba8"); - GLAD_GL_OES_sample_shading = has_ext("GL_OES_sample_shading"); - GLAD_GL_OES_sample_variables = has_ext("GL_OES_sample_variables"); - GLAD_GL_OES_shader_image_atomic = has_ext("GL_OES_shader_image_atomic"); - GLAD_GL_OES_shader_io_blocks = has_ext("GL_OES_shader_io_blocks"); - GLAD_GL_OES_shader_multisample_interpolation = has_ext("GL_OES_shader_multisample_interpolation"); - GLAD_GL_OES_standard_derivatives = has_ext("GL_OES_standard_derivatives"); - GLAD_GL_OES_stencil1 = has_ext("GL_OES_stencil1"); - GLAD_GL_OES_stencil4 = has_ext("GL_OES_stencil4"); - GLAD_GL_OES_surfaceless_context = has_ext("GL_OES_surfaceless_context"); - GLAD_GL_OES_tessellation_point_size = has_ext("GL_OES_tessellation_point_size"); - GLAD_GL_OES_tessellation_shader = has_ext("GL_OES_tessellation_shader"); - GLAD_GL_OES_texture_3D = has_ext("GL_OES_texture_3D"); - GLAD_GL_OES_texture_border_clamp = has_ext("GL_OES_texture_border_clamp"); - GLAD_GL_OES_texture_buffer = has_ext("GL_OES_texture_buffer"); - GLAD_GL_OES_texture_compression_astc = has_ext("GL_OES_texture_compression_astc"); - GLAD_GL_OES_texture_cube_map_array = has_ext("GL_OES_texture_cube_map_array"); - GLAD_GL_OES_texture_float = has_ext("GL_OES_texture_float"); - GLAD_GL_OES_texture_float_linear = has_ext("GL_OES_texture_float_linear"); - GLAD_GL_OES_texture_half_float = has_ext("GL_OES_texture_half_float"); - GLAD_GL_OES_texture_half_float_linear = has_ext("GL_OES_texture_half_float_linear"); - GLAD_GL_OES_texture_npot = has_ext("GL_OES_texture_npot"); - GLAD_GL_OES_texture_stencil8 = has_ext("GL_OES_texture_stencil8"); - GLAD_GL_OES_texture_storage_multisample_2d_array = has_ext("GL_OES_texture_storage_multisample_2d_array"); - GLAD_GL_OES_texture_view = has_ext("GL_OES_texture_view"); - GLAD_GL_OES_vertex_array_object = has_ext("GL_OES_vertex_array_object"); - GLAD_GL_OES_vertex_half_float = has_ext("GL_OES_vertex_half_float"); - GLAD_GL_OES_vertex_type_10_10_10_2 = has_ext("GL_OES_vertex_type_10_10_10_2"); - GLAD_GL_OES_viewport_array = has_ext("GL_OES_viewport_array"); - GLAD_GL_OVR_multiview = has_ext("GL_OVR_multiview"); - GLAD_GL_OVR_multiview2 = has_ext("GL_OVR_multiview2"); - GLAD_GL_OVR_multiview_multisampled_render_to_texture = has_ext("GL_OVR_multiview_multisampled_render_to_texture"); - GLAD_GL_QCOM_alpha_test = has_ext("GL_QCOM_alpha_test"); - GLAD_GL_QCOM_binning_control = has_ext("GL_QCOM_binning_control"); - GLAD_GL_QCOM_driver_control = has_ext("GL_QCOM_driver_control"); - GLAD_GL_QCOM_extended_get = has_ext("GL_QCOM_extended_get"); - GLAD_GL_QCOM_extended_get2 = has_ext("GL_QCOM_extended_get2"); - GLAD_GL_QCOM_framebuffer_foveated = has_ext("GL_QCOM_framebuffer_foveated"); - GLAD_GL_QCOM_perfmon_global_mode = has_ext("GL_QCOM_perfmon_global_mode"); - GLAD_GL_QCOM_shader_framebuffer_fetch_noncoherent = has_ext("GL_QCOM_shader_framebuffer_fetch_noncoherent"); - GLAD_GL_QCOM_texture_foveated = has_ext("GL_QCOM_texture_foveated"); - GLAD_GL_QCOM_tiled_rendering = has_ext("GL_QCOM_tiled_rendering"); - GLAD_GL_QCOM_writeonly_rendering = has_ext("GL_QCOM_writeonly_rendering"); - GLAD_GL_VIV_shader_binary = has_ext("GL_VIV_shader_binary"); - free_exts(); - return 1; -} - -static void find_coreGLES2(void) { - - /* Thank you @elmindreda - * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 - * https://github.com/glfw/glfw/blob/master/src/context.c#L36 - */ - int i, major, minor; - - const char* version; - const char* prefixes[] = { - "OpenGL ES-CM ", - "OpenGL ES-CL ", - "OpenGL ES ", - NULL - }; - - version = (const char*) glGetString(GL_VERSION); - if (!version) return; - - for (i = 0; prefixes[i]; i++) { - const size_t length = strlen(prefixes[i]); - if (strncmp(version, prefixes[i], length) == 0) { - version += length; - break; + for (i = 0; i < length; ++i) { +#if GLAD_PLATFORM_WIN32 + #if GLAD_PLATFORM_UWP + size_t buffer_size = (strlen(lib_names[i]) + 1) * sizeof(WCHAR); + LPWSTR buffer = (LPWSTR) malloc(buffer_size); + if (buffer != NULL) { + int ret = MultiByteToWideChar(CP_ACP, 0, lib_names[i], -1, buffer, buffer_size); + if (ret != 0) { + handle = (void*) LoadPackagedLibrary(buffer, 0); + } + free((void*) buffer); + } + #else + handle = (void*) LoadLibraryA(lib_names[i]); + #endif +#else + handle = dlopen(lib_names[i], RTLD_LAZY | RTLD_LOCAL); +#endif + if (handle != NULL) { + return handle; } } -/* PR #18 */ -#ifdef _MSC_VER - sscanf_s(version, "%d.%d", &major, &minor); -#else - sscanf(version, "%d.%d", &major, &minor); -#endif - - GLVersion.major = major; GLVersion.minor = minor; - max_loaded_major = major; max_loaded_minor = minor; - GLAD_GL_ES_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; - GLAD_GL_ES_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; - GLAD_GL_ES_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; - GLAD_GL_ES_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; - if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 2)) { - max_loaded_major = 3; - max_loaded_minor = 2; - } + return NULL; } -int gladLoadGLES2Loader(GLADloadproc load) { - GLVersion.major = 0; GLVersion.minor = 0; - glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - if(glGetString == NULL) return 0; - if(glGetString(GL_VERSION) == NULL) return 0; - find_coreGLES2(); - load_GL_ES_VERSION_2_0(load); - load_GL_ES_VERSION_3_0(load); - load_GL_ES_VERSION_3_1(load); - load_GL_ES_VERSION_3_2(load); +static void glad_close_dlopen_handle(void* handle) { + if (handle != NULL) { +#if GLAD_PLATFORM_WIN32 + FreeLibrary((HMODULE) handle); +#else + dlclose(handle); +#endif + } +} - if (!find_extensionsGLES2()) return 0; - load_GL_AMD_performance_monitor(load); - load_GL_ANGLE_framebuffer_blit(load); - load_GL_ANGLE_framebuffer_multisample(load); - load_GL_ANGLE_instanced_arrays(load); - load_GL_ANGLE_translated_shader_source(load); - load_GL_APPLE_copy_texture_levels(load); - load_GL_APPLE_framebuffer_multisample(load); - load_GL_APPLE_sync(load); - load_GL_EXT_EGL_image_storage(load); - load_GL_EXT_base_instance(load); - load_GL_EXT_blend_func_extended(load); - load_GL_EXT_blend_minmax(load); - load_GL_EXT_buffer_storage(load); - load_GL_EXT_clear_texture(load); - load_GL_EXT_clip_control(load); - load_GL_EXT_copy_image(load); - load_GL_EXT_debug_label(load); - load_GL_EXT_debug_marker(load); - load_GL_EXT_discard_framebuffer(load); - load_GL_EXT_disjoint_timer_query(load); - load_GL_EXT_draw_buffers(load); - load_GL_EXT_draw_buffers_indexed(load); - load_GL_EXT_draw_elements_base_vertex(load); - load_GL_EXT_draw_instanced(load); - load_GL_EXT_draw_transform_feedback(load); - load_GL_EXT_external_buffer(load); - load_GL_EXT_geometry_shader(load); - load_GL_EXT_instanced_arrays(load); - load_GL_EXT_map_buffer_range(load); - load_GL_EXT_memory_object(load); - load_GL_EXT_memory_object_fd(load); - load_GL_EXT_memory_object_win32(load); - load_GL_EXT_multi_draw_arrays(load); - load_GL_EXT_multi_draw_indirect(load); - load_GL_EXT_multisampled_render_to_texture(load); - load_GL_EXT_multiview_draw_buffers(load); - load_GL_EXT_occlusion_query_boolean(load); - load_GL_EXT_polygon_offset_clamp(load); - load_GL_EXT_primitive_bounding_box(load); - load_GL_EXT_raster_multisample(load); - load_GL_EXT_robustness(load); - load_GL_EXT_semaphore(load); - load_GL_EXT_semaphore_fd(load); - load_GL_EXT_semaphore_win32(load); - load_GL_EXT_separate_shader_objects(load); - load_GL_EXT_shader_framebuffer_fetch_non_coherent(load); - load_GL_EXT_shader_pixel_local_storage2(load); - load_GL_EXT_sparse_texture(load); - load_GL_EXT_tessellation_shader(load); - load_GL_EXT_texture_border_clamp(load); - load_GL_EXT_texture_buffer(load); - load_GL_EXT_texture_storage(load); - load_GL_EXT_texture_view(load); - load_GL_EXT_win32_keyed_mutex(load); - load_GL_EXT_window_rectangles(load); - load_GL_IMG_bindless_texture(load); - load_GL_IMG_framebuffer_downsample(load); - load_GL_IMG_multisampled_render_to_texture(load); - load_GL_INTEL_framebuffer_CMAA(load); - load_GL_INTEL_performance_query(load); - load_GL_KHR_blend_equation_advanced(load); - load_GL_KHR_debug(load); - load_GL_KHR_parallel_shader_compile(load); - load_GL_KHR_robustness(load); - load_GL_NV_bindless_texture(load); - load_GL_NV_blend_equation_advanced(load); - load_GL_NV_clip_space_w_scaling(load); - load_GL_NV_conditional_render(load); - load_GL_NV_conservative_raster(load); - load_GL_NV_conservative_raster_pre_snap_triangles(load); - load_GL_NV_copy_buffer(load); - load_GL_NV_coverage_sample(load); - load_GL_NV_draw_buffers(load); - load_GL_NV_draw_instanced(load); - load_GL_NV_draw_vulkan_image(load); - load_GL_NV_fence(load); - load_GL_NV_fragment_coverage_to_color(load); - load_GL_NV_framebuffer_blit(load); - load_GL_NV_framebuffer_mixed_samples(load); - load_GL_NV_framebuffer_multisample(load); - load_GL_NV_gpu_shader5(load); - load_GL_NV_instanced_arrays(load); - load_GL_NV_internalformat_sample_query(load); - load_GL_NV_non_square_matrices(load); - load_GL_NV_path_rendering(load); - load_GL_NV_polygon_mode(load); - load_GL_NV_read_buffer(load); - load_GL_NV_sample_locations(load); - load_GL_NV_viewport_array(load); - load_GL_NV_viewport_swizzle(load); - load_GL_OES_EGL_image(load); - load_GL_OES_copy_image(load); - load_GL_OES_draw_buffers_indexed(load); - load_GL_OES_draw_elements_base_vertex(load); - load_GL_OES_geometry_shader(load); - load_GL_OES_get_program_binary(load); - load_GL_OES_mapbuffer(load); - load_GL_OES_primitive_bounding_box(load); - load_GL_OES_sample_shading(load); - load_GL_OES_tessellation_shader(load); - load_GL_OES_texture_3D(load); - load_GL_OES_texture_border_clamp(load); - load_GL_OES_texture_buffer(load); - load_GL_OES_texture_storage_multisample_2d_array(load); - load_GL_OES_texture_view(load); - load_GL_OES_vertex_array_object(load); - load_GL_OES_viewport_array(load); - load_GL_OVR_multiview(load); - load_GL_OVR_multiview_multisampled_render_to_texture(load); - load_GL_QCOM_alpha_test(load); - load_GL_QCOM_driver_control(load); - load_GL_QCOM_extended_get(load); - load_GL_QCOM_extended_get2(load); - load_GL_QCOM_framebuffer_foveated(load); - load_GL_QCOM_shader_framebuffer_fetch_noncoherent(load); - load_GL_QCOM_texture_foveated(load); - load_GL_QCOM_tiled_rendering(load); - return GLVersion.major != 0 || GLVersion.minor != 0; -} \ No newline at end of file +static GLADapiproc glad_dlsym_handle(void* handle, const char *name) { + if (handle == NULL) { + return NULL; + } + +#if GLAD_PLATFORM_WIN32 + return (GLADapiproc) GetProcAddress((HMODULE) handle, name); +#else + return GLAD_GNUC_EXTENSION (GLADapiproc) dlsym(handle, name); +#endif +} + +#endif /* GLAD_LOADER_LIBRARY_C_ */ + +typedef void* (GLAD_API_PTR *GLADglprocaddrfunc)(const char*); +struct _glad_gl_userptr { + void *handle; + GLADglprocaddrfunc gl_get_proc_address_ptr; +}; + +static GLADapiproc glad_gl_get_proc(void *vuserptr, const char *name) { + struct _glad_gl_userptr userptr = *(struct _glad_gl_userptr*) vuserptr; + GLADapiproc result = NULL; + + if(userptr.gl_get_proc_address_ptr != NULL) { + result = GLAD_GNUC_EXTENSION (GLADapiproc) userptr.gl_get_proc_address_ptr(name); + } + if(result == NULL) { + result = glad_dlsym_handle(userptr.handle, name); + } + + return result; +} + +static void* _glad_GL_loader_handle = NULL; + +static void* glad_gl_dlopen_handle(void) { +#if GLAD_PLATFORM_APPLE + static const char *NAMES[] = { + "../Frameworks/OpenGL.framework/OpenGL", + "/Library/Frameworks/OpenGL.framework/OpenGL", + "/System/Library/Frameworks/OpenGL.framework/OpenGL", + "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" + }; +#elif GLAD_PLATFORM_WIN32 + static const char *NAMES[] = {"opengl32.dll"}; +#else + static const char *NAMES[] = { + #if defined(__CYGWIN__) + "libGL-1.so", + #endif + "libGL.so.1", + "libGL.so" + }; +#endif + + if (_glad_GL_loader_handle == NULL) { + _glad_GL_loader_handle = glad_get_dlopen_handle(NAMES, sizeof(NAMES) / sizeof(NAMES[0])); + } + + return _glad_GL_loader_handle; +} + +static struct _glad_gl_userptr glad_gl_build_userptr(void *handle) { + struct _glad_gl_userptr userptr; + + userptr.handle = handle; +#if GLAD_PLATFORM_APPLE || defined(__HAIKU__) + userptr.gl_get_proc_address_ptr = NULL; +#elif GLAD_PLATFORM_WIN32 + userptr.gl_get_proc_address_ptr = + (GLADglprocaddrfunc) glad_dlsym_handle(handle, "wglGetProcAddress"); +#else + userptr.gl_get_proc_address_ptr = + (GLADglprocaddrfunc) glad_dlsym_handle(handle, "glXGetProcAddressARB"); +#endif + + return userptr; +} + +int gladLoaderLoadGL(void) { + int version = 0; + void *handle; + int did_load = 0; + struct _glad_gl_userptr userptr; + + did_load = _glad_GL_loader_handle == NULL; + handle = glad_gl_dlopen_handle(); + if (handle) { + userptr = glad_gl_build_userptr(handle); + + version = gladLoadGLUserPtr(glad_gl_get_proc, &userptr); + + if (did_load) { + gladLoaderUnloadGL(); + } + } + + return version; +} + + + +void gladLoaderUnloadGL(void) { + if (_glad_GL_loader_handle != NULL) { + glad_close_dlopen_handle(_glad_GL_loader_handle); + _glad_GL_loader_handle = NULL; + } +} + +#endif /* GLAD_GL */ + +#ifdef __cplusplus +} +#endif diff --git a/third_party/glad/src/glad_egl.c b/third_party/glad/src/glad_egl.c deleted file mode 100644 index a15a9a74..00000000 --- a/third_party/glad/src/glad_egl.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - - EGL loader generated by glad 0.1.36 on Thu Sep 15 11:06:51 2022. - - Language/Generator: C/C++ - Specification: egl - APIs: egl=1.5 - Profile: - - Extensions: - - Loader: True - Local files: True - Omit khrplatform: False - Reproducible: False - - Commandline: - --api="egl=1.5" --generator="c" --spec="egl" --local-files --extensions="" - Online: - https://glad.dav1d.de/#language=c&specification=egl&loader=on&api=egl%3D1.5 -*/ - -#include -#include -#include -#include - -int gladLoadEGL(void) { - return gladLoadEGLLoader((GLADloadproc)eglGetProcAddress); -} - -static int find_extensionsEGL(void) { - return 1; -} - -static void find_coreEGL(void) { -} - -int gladLoadEGLLoader(GLADloadproc load) { - (void) load; - find_coreEGL(); - - if (!find_extensionsEGL()) return 0; - return 1; -} - diff --git a/third_party/glad/src/glad_glx.c b/third_party/glad/src/glad_glx.c deleted file mode 100644 index a39d129b..00000000 --- a/third_party/glad/src/glad_glx.c +++ /dev/null @@ -1,880 +0,0 @@ -/* - - GLX loader generated by glad 0.1.36 on Sat Oct 8 13:52:35 2022. - - Language/Generator: C/C++ - Specification: glx - APIs: glx=1.4 - Profile: - - Extensions: - GLX_3DFX_multisample, - GLX_AMD_gpu_association, - GLX_ARB_context_flush_control, - GLX_ARB_create_context, - GLX_ARB_create_context_no_error, - GLX_ARB_create_context_profile, - GLX_ARB_create_context_robustness, - GLX_ARB_fbconfig_float, - GLX_ARB_framebuffer_sRGB, - GLX_ARB_get_proc_address, - GLX_ARB_multisample, - GLX_ARB_robustness_application_isolation, - GLX_ARB_robustness_share_group_isolation, - GLX_ARB_vertex_buffer_object, - GLX_EXT_buffer_age, - GLX_EXT_context_priority, - GLX_EXT_create_context_es2_profile, - GLX_EXT_create_context_es_profile, - GLX_EXT_fbconfig_packed_float, - GLX_EXT_framebuffer_sRGB, - GLX_EXT_get_drawable_type, - GLX_EXT_import_context, - GLX_EXT_libglvnd, - GLX_EXT_no_config_context, - GLX_EXT_stereo_tree, - GLX_EXT_swap_control, - GLX_EXT_swap_control_tear, - GLX_EXT_texture_from_pixmap, - GLX_EXT_visual_info, - GLX_EXT_visual_rating, - GLX_INTEL_swap_event, - GLX_MESA_agp_offset, - GLX_MESA_copy_sub_buffer, - GLX_MESA_pixmap_colormap, - GLX_MESA_query_renderer, - GLX_MESA_release_buffers, - GLX_MESA_set_3dfx_mode, - GLX_MESA_swap_control, - GLX_NV_copy_buffer, - GLX_NV_copy_image, - GLX_NV_delay_before_swap, - GLX_NV_float_buffer, - GLX_NV_multigpu_context, - GLX_NV_multisample_coverage, - GLX_NV_present_video, - GLX_NV_robustness_video_memory_purge, - GLX_NV_swap_group, - GLX_NV_video_capture, - GLX_NV_video_out, - GLX_OML_swap_method, - GLX_OML_sync_control, - GLX_SGIS_blended_overlay, - GLX_SGIS_multisample, - GLX_SGIS_shared_multisample, - GLX_SGIX_dmbuffer, - GLX_SGIX_fbconfig, - GLX_SGIX_hyperpipe, - GLX_SGIX_pbuffer, - GLX_SGIX_swap_barrier, - GLX_SGIX_swap_group, - GLX_SGIX_video_resize, - GLX_SGIX_video_source, - GLX_SGIX_visual_select_group, - GLX_SGI_cushion, - GLX_SGI_make_current_read, - GLX_SGI_swap_control, - GLX_SGI_video_sync, - GLX_SUN_get_transparent_index - Loader: True - Local files: True - Omit khrplatform: False - Reproducible: False - - Commandline: - --api="glx=1.4" --generator="c" --spec="glx" --local-files --extensions="GLX_3DFX_multisample,GLX_AMD_gpu_association,GLX_ARB_context_flush_control,GLX_ARB_create_context,GLX_ARB_create_context_no_error,GLX_ARB_create_context_profile,GLX_ARB_create_context_robustness,GLX_ARB_fbconfig_float,GLX_ARB_framebuffer_sRGB,GLX_ARB_get_proc_address,GLX_ARB_multisample,GLX_ARB_robustness_application_isolation,GLX_ARB_robustness_share_group_isolation,GLX_ARB_vertex_buffer_object,GLX_EXT_buffer_age,GLX_EXT_context_priority,GLX_EXT_create_context_es2_profile,GLX_EXT_create_context_es_profile,GLX_EXT_fbconfig_packed_float,GLX_EXT_framebuffer_sRGB,GLX_EXT_get_drawable_type,GLX_EXT_import_context,GLX_EXT_libglvnd,GLX_EXT_no_config_context,GLX_EXT_stereo_tree,GLX_EXT_swap_control,GLX_EXT_swap_control_tear,GLX_EXT_texture_from_pixmap,GLX_EXT_visual_info,GLX_EXT_visual_rating,GLX_INTEL_swap_event,GLX_MESA_agp_offset,GLX_MESA_copy_sub_buffer,GLX_MESA_pixmap_colormap,GLX_MESA_query_renderer,GLX_MESA_release_buffers,GLX_MESA_set_3dfx_mode,GLX_MESA_swap_control,GLX_NV_copy_buffer,GLX_NV_copy_image,GLX_NV_delay_before_swap,GLX_NV_float_buffer,GLX_NV_multigpu_context,GLX_NV_multisample_coverage,GLX_NV_present_video,GLX_NV_robustness_video_memory_purge,GLX_NV_swap_group,GLX_NV_video_capture,GLX_NV_video_out,GLX_OML_swap_method,GLX_OML_sync_control,GLX_SGIS_blended_overlay,GLX_SGIS_multisample,GLX_SGIS_shared_multisample,GLX_SGIX_dmbuffer,GLX_SGIX_fbconfig,GLX_SGIX_hyperpipe,GLX_SGIX_pbuffer,GLX_SGIX_swap_barrier,GLX_SGIX_swap_group,GLX_SGIX_video_resize,GLX_SGIX_video_source,GLX_SGIX_visual_select_group,GLX_SGI_cushion,GLX_SGI_make_current_read,GLX_SGI_swap_control,GLX_SGI_video_sync,GLX_SUN_get_transparent_index" - Online: - Too many extensions -*/ - -#include -#include -#include -#include - -static void* get_proc(const char *namez); - -#if defined(_WIN32) || defined(__CYGWIN__) -#ifndef _WINDOWS_ -#undef APIENTRY -#endif -#include -static HMODULE libGL; - -typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; - -#ifdef _MSC_VER -#ifdef __has_include - #if __has_include() - #define HAVE_WINAPIFAMILY 1 - #endif -#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ - #define HAVE_WINAPIFAMILY 1 -#endif -#endif - -#ifdef HAVE_WINAPIFAMILY - #include - #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) - #define IS_UWP 1 - #endif -#endif - -static -int open_glx(void) { -#ifndef IS_UWP - libGL = LoadLibraryW(L"opengl32.dll"); - if(libGL != NULL) { - void (* tmp)(void); - tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); - gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; - return gladGetProcAddressPtr != NULL; - } -#endif - - return 0; -} - -static -void close_glx(void) { - if(libGL != NULL) { - FreeLibrary((HMODULE) libGL); - libGL = NULL; - } -} -#else -#include -static void* libGL; - -#if !defined(__APPLE__) && !defined(__HAIKU__) -typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; -#endif - -static -int open_glx(void) { -#ifdef __APPLE__ - static const char *NAMES[] = { - "../Frameworks/OpenGL.framework/OpenGL", - "/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" - }; -#else - static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; -#endif - - unsigned int index = 0; - for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { - libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); - - if(libGL != NULL) { -#if defined(__APPLE__) || defined(__HAIKU__) - return 1; -#else - gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, - "glXGetProcAddressARB"); - return gladGetProcAddressPtr != NULL; -#endif - } - } - - return 0; -} - -static -void close_glx(void) { - if(libGL != NULL) { - dlclose(libGL); - libGL = NULL; - } -} -#endif - -static -void* get_proc(const char *namez) { - void* result = NULL; - if(libGL == NULL) return NULL; - -#if !defined(__APPLE__) && !defined(__HAIKU__) - if(gladGetProcAddressPtr != NULL) { - result = gladGetProcAddressPtr(namez); - } -#endif - if(result == NULL) { -#if defined(_WIN32) || defined(__CYGWIN__) - result = (void*)GetProcAddress((HMODULE) libGL, namez); -#else - result = dlsym(libGL, namez); -#endif - } - - return result; -} - -int gladLoadGLX(Display *dpy, int screen) { - int status = 0; - - if(open_glx()) { - status = gladLoadGLXLoader((GLADloadproc)get_proc, dpy, screen); - } - - return status; -} - -void gladUnloadGLX(void) { - close_glx(); -} - -static Display *GLADGLXDisplay = 0; -static int GLADGLXscreen = 0; - -static int get_exts(void) { - return 1; -} - -static void free_exts(void) { - return; -} - -static int has_ext(const char *ext) { - const char *terminator; - const char *loc; - const char *extensions; - - if(!GLAD_GLX_VERSION_1_1) - return 0; - - extensions = glXQueryExtensionsString(GLADGLXDisplay, GLADGLXscreen); - - if(extensions == NULL || ext == NULL) - return 0; - - while(1) { - loc = strstr(extensions, ext); - if(loc == NULL) - break; - - terminator = loc + strlen(ext); - if((loc == extensions || *(loc - 1) == ' ') && - (*terminator == ' ' || *terminator == '\0')) - { - return 1; - } - extensions = terminator; - } - - return 0; -} - -int GLAD_GLX_VERSION_1_0 = 0; -int GLAD_GLX_VERSION_1_1 = 0; -int GLAD_GLX_VERSION_1_2 = 0; -int GLAD_GLX_VERSION_1_3 = 0; -int GLAD_GLX_VERSION_1_4 = 0; -PFNGLXCHOOSEFBCONFIGPROC glad_glXChooseFBConfig = NULL; -PFNGLXCHOOSEVISUALPROC glad_glXChooseVisual = NULL; -PFNGLXCOPYCONTEXTPROC glad_glXCopyContext = NULL; -PFNGLXCREATECONTEXTPROC glad_glXCreateContext = NULL; -PFNGLXCREATEGLXPIXMAPPROC glad_glXCreateGLXPixmap = NULL; -PFNGLXCREATENEWCONTEXTPROC glad_glXCreateNewContext = NULL; -PFNGLXCREATEPBUFFERPROC glad_glXCreatePbuffer = NULL; -PFNGLXCREATEPIXMAPPROC glad_glXCreatePixmap = NULL; -PFNGLXCREATEWINDOWPROC glad_glXCreateWindow = NULL; -PFNGLXDESTROYCONTEXTPROC glad_glXDestroyContext = NULL; -PFNGLXDESTROYGLXPIXMAPPROC glad_glXDestroyGLXPixmap = NULL; -PFNGLXDESTROYPBUFFERPROC glad_glXDestroyPbuffer = NULL; -PFNGLXDESTROYPIXMAPPROC glad_glXDestroyPixmap = NULL; -PFNGLXDESTROYWINDOWPROC glad_glXDestroyWindow = NULL; -PFNGLXGETCLIENTSTRINGPROC glad_glXGetClientString = NULL; -PFNGLXGETCONFIGPROC glad_glXGetConfig = NULL; -PFNGLXGETCURRENTCONTEXTPROC glad_glXGetCurrentContext = NULL; -PFNGLXGETCURRENTDISPLAYPROC glad_glXGetCurrentDisplay = NULL; -PFNGLXGETCURRENTDRAWABLEPROC glad_glXGetCurrentDrawable = NULL; -PFNGLXGETCURRENTREADDRAWABLEPROC glad_glXGetCurrentReadDrawable = NULL; -PFNGLXGETFBCONFIGATTRIBPROC glad_glXGetFBConfigAttrib = NULL; -PFNGLXGETFBCONFIGSPROC glad_glXGetFBConfigs = NULL; -PFNGLXGETPROCADDRESSPROC glad_glXGetProcAddress = NULL; -PFNGLXGETSELECTEDEVENTPROC glad_glXGetSelectedEvent = NULL; -PFNGLXGETVISUALFROMFBCONFIGPROC glad_glXGetVisualFromFBConfig = NULL; -PFNGLXISDIRECTPROC glad_glXIsDirect = NULL; -PFNGLXMAKECONTEXTCURRENTPROC glad_glXMakeContextCurrent = NULL; -PFNGLXMAKECURRENTPROC glad_glXMakeCurrent = NULL; -PFNGLXQUERYCONTEXTPROC glad_glXQueryContext = NULL; -PFNGLXQUERYDRAWABLEPROC glad_glXQueryDrawable = NULL; -PFNGLXQUERYEXTENSIONPROC glad_glXQueryExtension = NULL; -PFNGLXQUERYEXTENSIONSSTRINGPROC glad_glXQueryExtensionsString = NULL; -PFNGLXQUERYSERVERSTRINGPROC glad_glXQueryServerString = NULL; -PFNGLXQUERYVERSIONPROC glad_glXQueryVersion = NULL; -PFNGLXSELECTEVENTPROC glad_glXSelectEvent = NULL; -PFNGLXSWAPBUFFERSPROC glad_glXSwapBuffers = NULL; -PFNGLXUSEXFONTPROC glad_glXUseXFont = NULL; -PFNGLXWAITGLPROC glad_glXWaitGL = NULL; -PFNGLXWAITXPROC glad_glXWaitX = NULL; -int GLAD_GLX_3DFX_multisample = 0; -int GLAD_GLX_AMD_gpu_association = 0; -int GLAD_GLX_ARB_context_flush_control = 0; -int GLAD_GLX_ARB_create_context = 0; -int GLAD_GLX_ARB_create_context_no_error = 0; -int GLAD_GLX_ARB_create_context_profile = 0; -int GLAD_GLX_ARB_create_context_robustness = 0; -int GLAD_GLX_ARB_fbconfig_float = 0; -int GLAD_GLX_ARB_framebuffer_sRGB = 0; -int GLAD_GLX_ARB_get_proc_address = 0; -int GLAD_GLX_ARB_multisample = 0; -int GLAD_GLX_ARB_robustness_application_isolation = 0; -int GLAD_GLX_ARB_robustness_share_group_isolation = 0; -int GLAD_GLX_ARB_vertex_buffer_object = 0; -int GLAD_GLX_EXT_buffer_age = 0; -int GLAD_GLX_EXT_context_priority = 0; -int GLAD_GLX_EXT_create_context_es2_profile = 0; -int GLAD_GLX_EXT_create_context_es_profile = 0; -int GLAD_GLX_EXT_fbconfig_packed_float = 0; -int GLAD_GLX_EXT_framebuffer_sRGB = 0; -int GLAD_GLX_EXT_get_drawable_type = 0; -int GLAD_GLX_EXT_import_context = 0; -int GLAD_GLX_EXT_libglvnd = 0; -int GLAD_GLX_EXT_no_config_context = 0; -int GLAD_GLX_EXT_stereo_tree = 0; -int GLAD_GLX_EXT_swap_control = 0; -int GLAD_GLX_EXT_swap_control_tear = 0; -int GLAD_GLX_EXT_texture_from_pixmap = 0; -int GLAD_GLX_EXT_visual_info = 0; -int GLAD_GLX_EXT_visual_rating = 0; -int GLAD_GLX_INTEL_swap_event = 0; -int GLAD_GLX_MESA_agp_offset = 0; -int GLAD_GLX_MESA_copy_sub_buffer = 0; -int GLAD_GLX_MESA_pixmap_colormap = 0; -int GLAD_GLX_MESA_query_renderer = 0; -int GLAD_GLX_MESA_release_buffers = 0; -int GLAD_GLX_MESA_set_3dfx_mode = 0; -int GLAD_GLX_MESA_swap_control = 0; -int GLAD_GLX_NV_copy_buffer = 0; -int GLAD_GLX_NV_copy_image = 0; -int GLAD_GLX_NV_delay_before_swap = 0; -int GLAD_GLX_NV_float_buffer = 0; -int GLAD_GLX_NV_multigpu_context = 0; -int GLAD_GLX_NV_multisample_coverage = 0; -int GLAD_GLX_NV_present_video = 0; -int GLAD_GLX_NV_robustness_video_memory_purge = 0; -int GLAD_GLX_NV_swap_group = 0; -int GLAD_GLX_NV_video_capture = 0; -int GLAD_GLX_NV_video_out = 0; -int GLAD_GLX_OML_swap_method = 0; -int GLAD_GLX_OML_sync_control = 0; -int GLAD_GLX_SGIS_blended_overlay = 0; -int GLAD_GLX_SGIS_multisample = 0; -int GLAD_GLX_SGIS_shared_multisample = 0; -int GLAD_GLX_SGIX_dmbuffer = 0; -int GLAD_GLX_SGIX_fbconfig = 0; -int GLAD_GLX_SGIX_hyperpipe = 0; -int GLAD_GLX_SGIX_pbuffer = 0; -int GLAD_GLX_SGIX_swap_barrier = 0; -int GLAD_GLX_SGIX_swap_group = 0; -int GLAD_GLX_SGIX_video_resize = 0; -int GLAD_GLX_SGIX_video_source = 0; -int GLAD_GLX_SGIX_visual_select_group = 0; -int GLAD_GLX_SGI_cushion = 0; -int GLAD_GLX_SGI_make_current_read = 0; -int GLAD_GLX_SGI_swap_control = 0; -int GLAD_GLX_SGI_video_sync = 0; -int GLAD_GLX_SUN_get_transparent_index = 0; -PFNGLXGETGPUIDSAMDPROC glad_glXGetGPUIDsAMD = NULL; -PFNGLXGETGPUINFOAMDPROC glad_glXGetGPUInfoAMD = NULL; -PFNGLXGETCONTEXTGPUIDAMDPROC glad_glXGetContextGPUIDAMD = NULL; -PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC glad_glXCreateAssociatedContextAMD = NULL; -PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC glad_glXCreateAssociatedContextAttribsAMD = NULL; -PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC glad_glXDeleteAssociatedContextAMD = NULL; -PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC glad_glXMakeAssociatedContextCurrentAMD = NULL; -PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC glad_glXGetCurrentAssociatedContextAMD = NULL; -PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC glad_glXBlitContextFramebufferAMD = NULL; -PFNGLXCREATECONTEXTATTRIBSARBPROC glad_glXCreateContextAttribsARB = NULL; -PFNGLXGETPROCADDRESSARBPROC glad_glXGetProcAddressARB = NULL; -PFNGLXGETCURRENTDISPLAYEXTPROC glad_glXGetCurrentDisplayEXT = NULL; -PFNGLXQUERYCONTEXTINFOEXTPROC glad_glXQueryContextInfoEXT = NULL; -PFNGLXGETCONTEXTIDEXTPROC glad_glXGetContextIDEXT = NULL; -PFNGLXIMPORTCONTEXTEXTPROC glad_glXImportContextEXT = NULL; -PFNGLXFREECONTEXTEXTPROC glad_glXFreeContextEXT = NULL; -PFNGLXSWAPINTERVALEXTPROC glad_glXSwapIntervalEXT = NULL; -PFNGLXBINDTEXIMAGEEXTPROC glad_glXBindTexImageEXT = NULL; -PFNGLXRELEASETEXIMAGEEXTPROC glad_glXReleaseTexImageEXT = NULL; -PFNGLXGETAGPOFFSETMESAPROC glad_glXGetAGPOffsetMESA = NULL; -PFNGLXCOPYSUBBUFFERMESAPROC glad_glXCopySubBufferMESA = NULL; -PFNGLXCREATEGLXPIXMAPMESAPROC glad_glXCreateGLXPixmapMESA = NULL; -PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC glad_glXQueryCurrentRendererIntegerMESA = NULL; -PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC glad_glXQueryCurrentRendererStringMESA = NULL; -PFNGLXQUERYRENDERERINTEGERMESAPROC glad_glXQueryRendererIntegerMESA = NULL; -PFNGLXQUERYRENDERERSTRINGMESAPROC glad_glXQueryRendererStringMESA = NULL; -PFNGLXRELEASEBUFFERSMESAPROC glad_glXReleaseBuffersMESA = NULL; -PFNGLXSET3DFXMODEMESAPROC glad_glXSet3DfxModeMESA = NULL; -PFNGLXGETSWAPINTERVALMESAPROC glad_glXGetSwapIntervalMESA = NULL; -PFNGLXSWAPINTERVALMESAPROC glad_glXSwapIntervalMESA = NULL; -PFNGLXCOPYBUFFERSUBDATANVPROC glad_glXCopyBufferSubDataNV = NULL; -PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC glad_glXNamedCopyBufferSubDataNV = NULL; -PFNGLXCOPYIMAGESUBDATANVPROC glad_glXCopyImageSubDataNV = NULL; -PFNGLXDELAYBEFORESWAPNVPROC glad_glXDelayBeforeSwapNV = NULL; -PFNGLXENUMERATEVIDEODEVICESNVPROC glad_glXEnumerateVideoDevicesNV = NULL; -PFNGLXBINDVIDEODEVICENVPROC glad_glXBindVideoDeviceNV = NULL; -PFNGLXJOINSWAPGROUPNVPROC glad_glXJoinSwapGroupNV = NULL; -PFNGLXBINDSWAPBARRIERNVPROC glad_glXBindSwapBarrierNV = NULL; -PFNGLXQUERYSWAPGROUPNVPROC glad_glXQuerySwapGroupNV = NULL; -PFNGLXQUERYMAXSWAPGROUPSNVPROC glad_glXQueryMaxSwapGroupsNV = NULL; -PFNGLXQUERYFRAMECOUNTNVPROC glad_glXQueryFrameCountNV = NULL; -PFNGLXRESETFRAMECOUNTNVPROC glad_glXResetFrameCountNV = NULL; -PFNGLXBINDVIDEOCAPTUREDEVICENVPROC glad_glXBindVideoCaptureDeviceNV = NULL; -PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC glad_glXEnumerateVideoCaptureDevicesNV = NULL; -PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC glad_glXLockVideoCaptureDeviceNV = NULL; -PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC glad_glXQueryVideoCaptureDeviceNV = NULL; -PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC glad_glXReleaseVideoCaptureDeviceNV = NULL; -PFNGLXGETVIDEODEVICENVPROC glad_glXGetVideoDeviceNV = NULL; -PFNGLXRELEASEVIDEODEVICENVPROC glad_glXReleaseVideoDeviceNV = NULL; -PFNGLXBINDVIDEOIMAGENVPROC glad_glXBindVideoImageNV = NULL; -PFNGLXRELEASEVIDEOIMAGENVPROC glad_glXReleaseVideoImageNV = NULL; -PFNGLXSENDPBUFFERTOVIDEONVPROC glad_glXSendPbufferToVideoNV = NULL; -PFNGLXGETVIDEOINFONVPROC glad_glXGetVideoInfoNV = NULL; -PFNGLXGETSYNCVALUESOMLPROC glad_glXGetSyncValuesOML = NULL; -PFNGLXGETMSCRATEOMLPROC glad_glXGetMscRateOML = NULL; -PFNGLXSWAPBUFFERSMSCOMLPROC glad_glXSwapBuffersMscOML = NULL; -PFNGLXWAITFORMSCOMLPROC glad_glXWaitForMscOML = NULL; -PFNGLXWAITFORSBCOMLPROC glad_glXWaitForSbcOML = NULL; -#ifdef _DM_BUFFER_H_ -PFNGLXASSOCIATEDMPBUFFERSGIXPROC glad_glXAssociateDMPbufferSGIX = NULL; -#endif -PFNGLXGETFBCONFIGATTRIBSGIXPROC glad_glXGetFBConfigAttribSGIX = NULL; -PFNGLXCHOOSEFBCONFIGSGIXPROC glad_glXChooseFBConfigSGIX = NULL; -PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC glad_glXCreateGLXPixmapWithConfigSGIX = NULL; -PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC glad_glXCreateContextWithConfigSGIX = NULL; -PFNGLXGETVISUALFROMFBCONFIGSGIXPROC glad_glXGetVisualFromFBConfigSGIX = NULL; -PFNGLXGETFBCONFIGFROMVISUALSGIXPROC glad_glXGetFBConfigFromVisualSGIX = NULL; -PFNGLXQUERYHYPERPIPENETWORKSGIXPROC glad_glXQueryHyperpipeNetworkSGIX = NULL; -PFNGLXHYPERPIPECONFIGSGIXPROC glad_glXHyperpipeConfigSGIX = NULL; -PFNGLXQUERYHYPERPIPECONFIGSGIXPROC glad_glXQueryHyperpipeConfigSGIX = NULL; -PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC glad_glXDestroyHyperpipeConfigSGIX = NULL; -PFNGLXBINDHYPERPIPESGIXPROC glad_glXBindHyperpipeSGIX = NULL; -PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC glad_glXQueryHyperpipeBestAttribSGIX = NULL; -PFNGLXHYPERPIPEATTRIBSGIXPROC glad_glXHyperpipeAttribSGIX = NULL; -PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC glad_glXQueryHyperpipeAttribSGIX = NULL; -PFNGLXCREATEGLXPBUFFERSGIXPROC glad_glXCreateGLXPbufferSGIX = NULL; -PFNGLXDESTROYGLXPBUFFERSGIXPROC glad_glXDestroyGLXPbufferSGIX = NULL; -PFNGLXQUERYGLXPBUFFERSGIXPROC glad_glXQueryGLXPbufferSGIX = NULL; -PFNGLXSELECTEVENTSGIXPROC glad_glXSelectEventSGIX = NULL; -PFNGLXGETSELECTEDEVENTSGIXPROC glad_glXGetSelectedEventSGIX = NULL; -PFNGLXBINDSWAPBARRIERSGIXPROC glad_glXBindSwapBarrierSGIX = NULL; -PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC glad_glXQueryMaxSwapBarriersSGIX = NULL; -PFNGLXJOINSWAPGROUPSGIXPROC glad_glXJoinSwapGroupSGIX = NULL; -PFNGLXBINDCHANNELTOWINDOWSGIXPROC glad_glXBindChannelToWindowSGIX = NULL; -PFNGLXCHANNELRECTSGIXPROC glad_glXChannelRectSGIX = NULL; -PFNGLXQUERYCHANNELRECTSGIXPROC glad_glXQueryChannelRectSGIX = NULL; -PFNGLXQUERYCHANNELDELTASSGIXPROC glad_glXQueryChannelDeltasSGIX = NULL; -PFNGLXCHANNELRECTSYNCSGIXPROC glad_glXChannelRectSyncSGIX = NULL; -#ifdef _VL_H_ -PFNGLXCREATEGLXVIDEOSOURCESGIXPROC glad_glXCreateGLXVideoSourceSGIX = NULL; -PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC glad_glXDestroyGLXVideoSourceSGIX = NULL; -#endif -PFNGLXCUSHIONSGIPROC glad_glXCushionSGI = NULL; -PFNGLXMAKECURRENTREADSGIPROC glad_glXMakeCurrentReadSGI = NULL; -PFNGLXGETCURRENTREADDRAWABLESGIPROC glad_glXGetCurrentReadDrawableSGI = NULL; -PFNGLXSWAPINTERVALSGIPROC glad_glXSwapIntervalSGI = NULL; -PFNGLXGETVIDEOSYNCSGIPROC glad_glXGetVideoSyncSGI = NULL; -PFNGLXWAITVIDEOSYNCSGIPROC glad_glXWaitVideoSyncSGI = NULL; -PFNGLXGETTRANSPARENTINDEXSUNPROC glad_glXGetTransparentIndexSUN = NULL; -static void load_GLX_VERSION_1_0(GLADloadproc load) { - if(!GLAD_GLX_VERSION_1_0) return; - glad_glXChooseVisual = (PFNGLXCHOOSEVISUALPROC)load("glXChooseVisual"); - glad_glXCreateContext = (PFNGLXCREATECONTEXTPROC)load("glXCreateContext"); - glad_glXDestroyContext = (PFNGLXDESTROYCONTEXTPROC)load("glXDestroyContext"); - glad_glXMakeCurrent = (PFNGLXMAKECURRENTPROC)load("glXMakeCurrent"); - glad_glXCopyContext = (PFNGLXCOPYCONTEXTPROC)load("glXCopyContext"); - glad_glXSwapBuffers = (PFNGLXSWAPBUFFERSPROC)load("glXSwapBuffers"); - glad_glXCreateGLXPixmap = (PFNGLXCREATEGLXPIXMAPPROC)load("glXCreateGLXPixmap"); - glad_glXDestroyGLXPixmap = (PFNGLXDESTROYGLXPIXMAPPROC)load("glXDestroyGLXPixmap"); - glad_glXQueryExtension = (PFNGLXQUERYEXTENSIONPROC)load("glXQueryExtension"); - glad_glXQueryVersion = (PFNGLXQUERYVERSIONPROC)load("glXQueryVersion"); - glad_glXIsDirect = (PFNGLXISDIRECTPROC)load("glXIsDirect"); - glad_glXGetConfig = (PFNGLXGETCONFIGPROC)load("glXGetConfig"); - glad_glXGetCurrentContext = (PFNGLXGETCURRENTCONTEXTPROC)load("glXGetCurrentContext"); - glad_glXGetCurrentDrawable = (PFNGLXGETCURRENTDRAWABLEPROC)load("glXGetCurrentDrawable"); - glad_glXWaitGL = (PFNGLXWAITGLPROC)load("glXWaitGL"); - glad_glXWaitX = (PFNGLXWAITXPROC)load("glXWaitX"); - glad_glXUseXFont = (PFNGLXUSEXFONTPROC)load("glXUseXFont"); -} -static void load_GLX_VERSION_1_1(GLADloadproc load) { - if(!GLAD_GLX_VERSION_1_1) return; - glad_glXQueryExtensionsString = (PFNGLXQUERYEXTENSIONSSTRINGPROC)load("glXQueryExtensionsString"); - glad_glXQueryServerString = (PFNGLXQUERYSERVERSTRINGPROC)load("glXQueryServerString"); - glad_glXGetClientString = (PFNGLXGETCLIENTSTRINGPROC)load("glXGetClientString"); -} -static void load_GLX_VERSION_1_2(GLADloadproc load) { - if(!GLAD_GLX_VERSION_1_2) return; - glad_glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC)load("glXGetCurrentDisplay"); -} -static void load_GLX_VERSION_1_3(GLADloadproc load) { - if(!GLAD_GLX_VERSION_1_3) return; - glad_glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC)load("glXGetFBConfigs"); - glad_glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)load("glXChooseFBConfig"); - glad_glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)load("glXGetFBConfigAttrib"); - glad_glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)load("glXGetVisualFromFBConfig"); - glad_glXCreateWindow = (PFNGLXCREATEWINDOWPROC)load("glXCreateWindow"); - glad_glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)load("glXDestroyWindow"); - glad_glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)load("glXCreatePixmap"); - glad_glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)load("glXDestroyPixmap"); - glad_glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)load("glXCreatePbuffer"); - glad_glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)load("glXDestroyPbuffer"); - glad_glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)load("glXQueryDrawable"); - glad_glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)load("glXCreateNewContext"); - glad_glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)load("glXMakeContextCurrent"); - glad_glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)load("glXGetCurrentReadDrawable"); - glad_glXQueryContext = (PFNGLXQUERYCONTEXTPROC)load("glXQueryContext"); - glad_glXSelectEvent = (PFNGLXSELECTEVENTPROC)load("glXSelectEvent"); - glad_glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)load("glXGetSelectedEvent"); -} -static void load_GLX_VERSION_1_4(GLADloadproc load) { - if(!GLAD_GLX_VERSION_1_4) return; - glad_glXGetProcAddress = (PFNGLXGETPROCADDRESSPROC)load("glXGetProcAddress"); -} -static void load_GLX_AMD_gpu_association(GLADloadproc load) { - if(!GLAD_GLX_AMD_gpu_association) return; - glad_glXGetGPUIDsAMD = (PFNGLXGETGPUIDSAMDPROC)load("glXGetGPUIDsAMD"); - glad_glXGetGPUInfoAMD = (PFNGLXGETGPUINFOAMDPROC)load("glXGetGPUInfoAMD"); - glad_glXGetContextGPUIDAMD = (PFNGLXGETCONTEXTGPUIDAMDPROC)load("glXGetContextGPUIDAMD"); - glad_glXCreateAssociatedContextAMD = (PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)load("glXCreateAssociatedContextAMD"); - glad_glXCreateAssociatedContextAttribsAMD = (PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)load("glXCreateAssociatedContextAttribsAMD"); - glad_glXDeleteAssociatedContextAMD = (PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)load("glXDeleteAssociatedContextAMD"); - glad_glXMakeAssociatedContextCurrentAMD = (PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)load("glXMakeAssociatedContextCurrentAMD"); - glad_glXGetCurrentAssociatedContextAMD = (PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)load("glXGetCurrentAssociatedContextAMD"); - glad_glXBlitContextFramebufferAMD = (PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)load("glXBlitContextFramebufferAMD"); -} -static void load_GLX_ARB_create_context(GLADloadproc load) { - if(!GLAD_GLX_ARB_create_context) return; - glad_glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)load("glXCreateContextAttribsARB"); -} -static void load_GLX_ARB_get_proc_address(GLADloadproc load) { - if(!GLAD_GLX_ARB_get_proc_address) return; - glad_glXGetProcAddressARB = (PFNGLXGETPROCADDRESSARBPROC)load("glXGetProcAddressARB"); -} -static void load_GLX_EXT_import_context(GLADloadproc load) { - if(!GLAD_GLX_EXT_import_context) return; - glad_glXGetCurrentDisplayEXT = (PFNGLXGETCURRENTDISPLAYEXTPROC)load("glXGetCurrentDisplayEXT"); - glad_glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)load("glXQueryContextInfoEXT"); - glad_glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)load("glXGetContextIDEXT"); - glad_glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)load("glXImportContextEXT"); - glad_glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)load("glXFreeContextEXT"); -} -static void load_GLX_EXT_swap_control(GLADloadproc load) { - if(!GLAD_GLX_EXT_swap_control) return; - glad_glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)load("glXSwapIntervalEXT"); -} -static void load_GLX_EXT_texture_from_pixmap(GLADloadproc load) { - if(!GLAD_GLX_EXT_texture_from_pixmap) return; - glad_glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)load("glXBindTexImageEXT"); - glad_glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)load("glXReleaseTexImageEXT"); -} -static void load_GLX_MESA_agp_offset(GLADloadproc load) { - if(!GLAD_GLX_MESA_agp_offset) return; - glad_glXGetAGPOffsetMESA = (PFNGLXGETAGPOFFSETMESAPROC)load("glXGetAGPOffsetMESA"); -} -static void load_GLX_MESA_copy_sub_buffer(GLADloadproc load) { - if(!GLAD_GLX_MESA_copy_sub_buffer) return; - glad_glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)load("glXCopySubBufferMESA"); -} -static void load_GLX_MESA_pixmap_colormap(GLADloadproc load) { - if(!GLAD_GLX_MESA_pixmap_colormap) return; - glad_glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)load("glXCreateGLXPixmapMESA"); -} -static void load_GLX_MESA_query_renderer(GLADloadproc load) { - if(!GLAD_GLX_MESA_query_renderer) return; - glad_glXQueryCurrentRendererIntegerMESA = (PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC)load("glXQueryCurrentRendererIntegerMESA"); - glad_glXQueryCurrentRendererStringMESA = (PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC)load("glXQueryCurrentRendererStringMESA"); - glad_glXQueryRendererIntegerMESA = (PFNGLXQUERYRENDERERINTEGERMESAPROC)load("glXQueryRendererIntegerMESA"); - glad_glXQueryRendererStringMESA = (PFNGLXQUERYRENDERERSTRINGMESAPROC)load("glXQueryRendererStringMESA"); -} -static void load_GLX_MESA_release_buffers(GLADloadproc load) { - if(!GLAD_GLX_MESA_release_buffers) return; - glad_glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)load("glXReleaseBuffersMESA"); -} -static void load_GLX_MESA_set_3dfx_mode(GLADloadproc load) { - if(!GLAD_GLX_MESA_set_3dfx_mode) return; - glad_glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)load("glXSet3DfxModeMESA"); -} -static void load_GLX_MESA_swap_control(GLADloadproc load) { - if(!GLAD_GLX_MESA_swap_control) return; - glad_glXGetSwapIntervalMESA = (PFNGLXGETSWAPINTERVALMESAPROC)load("glXGetSwapIntervalMESA"); - glad_glXSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC)load("glXSwapIntervalMESA"); -} -static void load_GLX_NV_copy_buffer(GLADloadproc load) { - if(!GLAD_GLX_NV_copy_buffer) return; - glad_glXCopyBufferSubDataNV = (PFNGLXCOPYBUFFERSUBDATANVPROC)load("glXCopyBufferSubDataNV"); - glad_glXNamedCopyBufferSubDataNV = (PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC)load("glXNamedCopyBufferSubDataNV"); -} -static void load_GLX_NV_copy_image(GLADloadproc load) { - if(!GLAD_GLX_NV_copy_image) return; - glad_glXCopyImageSubDataNV = (PFNGLXCOPYIMAGESUBDATANVPROC)load("glXCopyImageSubDataNV"); -} -static void load_GLX_NV_delay_before_swap(GLADloadproc load) { - if(!GLAD_GLX_NV_delay_before_swap) return; - glad_glXDelayBeforeSwapNV = (PFNGLXDELAYBEFORESWAPNVPROC)load("glXDelayBeforeSwapNV"); -} -static void load_GLX_NV_present_video(GLADloadproc load) { - if(!GLAD_GLX_NV_present_video) return; - glad_glXEnumerateVideoDevicesNV = (PFNGLXENUMERATEVIDEODEVICESNVPROC)load("glXEnumerateVideoDevicesNV"); - glad_glXBindVideoDeviceNV = (PFNGLXBINDVIDEODEVICENVPROC)load("glXBindVideoDeviceNV"); -} -static void load_GLX_NV_swap_group(GLADloadproc load) { - if(!GLAD_GLX_NV_swap_group) return; - glad_glXJoinSwapGroupNV = (PFNGLXJOINSWAPGROUPNVPROC)load("glXJoinSwapGroupNV"); - glad_glXBindSwapBarrierNV = (PFNGLXBINDSWAPBARRIERNVPROC)load("glXBindSwapBarrierNV"); - glad_glXQuerySwapGroupNV = (PFNGLXQUERYSWAPGROUPNVPROC)load("glXQuerySwapGroupNV"); - glad_glXQueryMaxSwapGroupsNV = (PFNGLXQUERYMAXSWAPGROUPSNVPROC)load("glXQueryMaxSwapGroupsNV"); - glad_glXQueryFrameCountNV = (PFNGLXQUERYFRAMECOUNTNVPROC)load("glXQueryFrameCountNV"); - glad_glXResetFrameCountNV = (PFNGLXRESETFRAMECOUNTNVPROC)load("glXResetFrameCountNV"); -} -static void load_GLX_NV_video_capture(GLADloadproc load) { - if(!GLAD_GLX_NV_video_capture) return; - glad_glXBindVideoCaptureDeviceNV = (PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)load("glXBindVideoCaptureDeviceNV"); - glad_glXEnumerateVideoCaptureDevicesNV = (PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)load("glXEnumerateVideoCaptureDevicesNV"); - glad_glXLockVideoCaptureDeviceNV = (PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)load("glXLockVideoCaptureDeviceNV"); - glad_glXQueryVideoCaptureDeviceNV = (PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)load("glXQueryVideoCaptureDeviceNV"); - glad_glXReleaseVideoCaptureDeviceNV = (PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)load("glXReleaseVideoCaptureDeviceNV"); -} -static void load_GLX_NV_video_out(GLADloadproc load) { - if(!GLAD_GLX_NV_video_out) return; - glad_glXGetVideoDeviceNV = (PFNGLXGETVIDEODEVICENVPROC)load("glXGetVideoDeviceNV"); - glad_glXReleaseVideoDeviceNV = (PFNGLXRELEASEVIDEODEVICENVPROC)load("glXReleaseVideoDeviceNV"); - glad_glXBindVideoImageNV = (PFNGLXBINDVIDEOIMAGENVPROC)load("glXBindVideoImageNV"); - glad_glXReleaseVideoImageNV = (PFNGLXRELEASEVIDEOIMAGENVPROC)load("glXReleaseVideoImageNV"); - glad_glXSendPbufferToVideoNV = (PFNGLXSENDPBUFFERTOVIDEONVPROC)load("glXSendPbufferToVideoNV"); - glad_glXGetVideoInfoNV = (PFNGLXGETVIDEOINFONVPROC)load("glXGetVideoInfoNV"); -} -static void load_GLX_OML_sync_control(GLADloadproc load) { - if(!GLAD_GLX_OML_sync_control) return; - glad_glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)load("glXGetSyncValuesOML"); - glad_glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)load("glXGetMscRateOML"); - glad_glXSwapBuffersMscOML = (PFNGLXSWAPBUFFERSMSCOMLPROC)load("glXSwapBuffersMscOML"); - glad_glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)load("glXWaitForMscOML"); - glad_glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)load("glXWaitForSbcOML"); -} -static void load_GLX_SGIX_dmbuffer(GLADloadproc load) { - if(!GLAD_GLX_SGIX_dmbuffer) return; -#ifdef _DM_BUFFER_H_ - glad_glXAssociateDMPbufferSGIX = (PFNGLXASSOCIATEDMPBUFFERSGIXPROC)load("glXAssociateDMPbufferSGIX"); -#else - (void)load; -#endif -} -static void load_GLX_SGIX_fbconfig(GLADloadproc load) { - if(!GLAD_GLX_SGIX_fbconfig) return; - glad_glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)load("glXGetFBConfigAttribSGIX"); - glad_glXChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC)load("glXChooseFBConfigSGIX"); - glad_glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)load("glXCreateGLXPixmapWithConfigSGIX"); - glad_glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)load("glXCreateContextWithConfigSGIX"); - glad_glXGetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)load("glXGetVisualFromFBConfigSGIX"); - glad_glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)load("glXGetFBConfigFromVisualSGIX"); -} -static void load_GLX_SGIX_hyperpipe(GLADloadproc load) { - if(!GLAD_GLX_SGIX_hyperpipe) return; - glad_glXQueryHyperpipeNetworkSGIX = (PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)load("glXQueryHyperpipeNetworkSGIX"); - glad_glXHyperpipeConfigSGIX = (PFNGLXHYPERPIPECONFIGSGIXPROC)load("glXHyperpipeConfigSGIX"); - glad_glXQueryHyperpipeConfigSGIX = (PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)load("glXQueryHyperpipeConfigSGIX"); - glad_glXDestroyHyperpipeConfigSGIX = (PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)load("glXDestroyHyperpipeConfigSGIX"); - glad_glXBindHyperpipeSGIX = (PFNGLXBINDHYPERPIPESGIXPROC)load("glXBindHyperpipeSGIX"); - glad_glXQueryHyperpipeBestAttribSGIX = (PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)load("glXQueryHyperpipeBestAttribSGIX"); - glad_glXHyperpipeAttribSGIX = (PFNGLXHYPERPIPEATTRIBSGIXPROC)load("glXHyperpipeAttribSGIX"); - glad_glXQueryHyperpipeAttribSGIX = (PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)load("glXQueryHyperpipeAttribSGIX"); -} -static void load_GLX_SGIX_pbuffer(GLADloadproc load) { - if(!GLAD_GLX_SGIX_pbuffer) return; - glad_glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)load("glXCreateGLXPbufferSGIX"); - glad_glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)load("glXDestroyGLXPbufferSGIX"); - glad_glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)load("glXQueryGLXPbufferSGIX"); - glad_glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)load("glXSelectEventSGIX"); - glad_glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)load("glXGetSelectedEventSGIX"); -} -static void load_GLX_SGIX_swap_barrier(GLADloadproc load) { - if(!GLAD_GLX_SGIX_swap_barrier) return; - glad_glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)load("glXBindSwapBarrierSGIX"); - glad_glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)load("glXQueryMaxSwapBarriersSGIX"); -} -static void load_GLX_SGIX_swap_group(GLADloadproc load) { - if(!GLAD_GLX_SGIX_swap_group) return; - glad_glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)load("glXJoinSwapGroupSGIX"); -} -static void load_GLX_SGIX_video_resize(GLADloadproc load) { - if(!GLAD_GLX_SGIX_video_resize) return; - glad_glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)load("glXBindChannelToWindowSGIX"); - glad_glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)load("glXChannelRectSGIX"); - glad_glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)load("glXQueryChannelRectSGIX"); - glad_glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)load("glXQueryChannelDeltasSGIX"); - glad_glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)load("glXChannelRectSyncSGIX"); -} -static void load_GLX_SGIX_video_source(GLADloadproc load) { - if(!GLAD_GLX_SGIX_video_source) return; -#ifdef _VL_H_ - glad_glXCreateGLXVideoSourceSGIX = (PFNGLXCREATEGLXVIDEOSOURCESGIXPROC)load("glXCreateGLXVideoSourceSGIX"); - glad_glXDestroyGLXVideoSourceSGIX = (PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC)load("glXDestroyGLXVideoSourceSGIX"); -#else - (void)load; -#endif -} -static void load_GLX_SGI_cushion(GLADloadproc load) { - if(!GLAD_GLX_SGI_cushion) return; - glad_glXCushionSGI = (PFNGLXCUSHIONSGIPROC)load("glXCushionSGI"); -} -static void load_GLX_SGI_make_current_read(GLADloadproc load) { - if(!GLAD_GLX_SGI_make_current_read) return; - glad_glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)load("glXMakeCurrentReadSGI"); - glad_glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)load("glXGetCurrentReadDrawableSGI"); -} -static void load_GLX_SGI_swap_control(GLADloadproc load) { - if(!GLAD_GLX_SGI_swap_control) return; - glad_glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)load("glXSwapIntervalSGI"); -} -static void load_GLX_SGI_video_sync(GLADloadproc load) { - if(!GLAD_GLX_SGI_video_sync) return; - glad_glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)load("glXGetVideoSyncSGI"); - glad_glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)load("glXWaitVideoSyncSGI"); -} -static void load_GLX_SUN_get_transparent_index(GLADloadproc load) { - if(!GLAD_GLX_SUN_get_transparent_index) return; - glad_glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)load("glXGetTransparentIndexSUN"); -} -static int find_extensionsGLX(void) { - if (!get_exts()) return 0; - GLAD_GLX_3DFX_multisample = has_ext("GLX_3DFX_multisample"); - GLAD_GLX_AMD_gpu_association = has_ext("GLX_AMD_gpu_association"); - GLAD_GLX_ARB_context_flush_control = has_ext("GLX_ARB_context_flush_control"); - GLAD_GLX_ARB_create_context = has_ext("GLX_ARB_create_context"); - GLAD_GLX_ARB_create_context_no_error = has_ext("GLX_ARB_create_context_no_error"); - GLAD_GLX_ARB_create_context_profile = has_ext("GLX_ARB_create_context_profile"); - GLAD_GLX_ARB_create_context_robustness = has_ext("GLX_ARB_create_context_robustness"); - GLAD_GLX_ARB_fbconfig_float = has_ext("GLX_ARB_fbconfig_float"); - GLAD_GLX_ARB_framebuffer_sRGB = has_ext("GLX_ARB_framebuffer_sRGB"); - GLAD_GLX_ARB_get_proc_address = has_ext("GLX_ARB_get_proc_address"); - GLAD_GLX_ARB_multisample = has_ext("GLX_ARB_multisample"); - GLAD_GLX_ARB_robustness_application_isolation = has_ext("GLX_ARB_robustness_application_isolation"); - GLAD_GLX_ARB_robustness_share_group_isolation = has_ext("GLX_ARB_robustness_share_group_isolation"); - GLAD_GLX_ARB_vertex_buffer_object = has_ext("GLX_ARB_vertex_buffer_object"); - GLAD_GLX_EXT_buffer_age = has_ext("GLX_EXT_buffer_age"); - GLAD_GLX_EXT_context_priority = has_ext("GLX_EXT_context_priority"); - GLAD_GLX_EXT_create_context_es2_profile = has_ext("GLX_EXT_create_context_es2_profile"); - GLAD_GLX_EXT_create_context_es_profile = has_ext("GLX_EXT_create_context_es_profile"); - GLAD_GLX_EXT_fbconfig_packed_float = has_ext("GLX_EXT_fbconfig_packed_float"); - GLAD_GLX_EXT_framebuffer_sRGB = has_ext("GLX_EXT_framebuffer_sRGB"); - GLAD_GLX_EXT_get_drawable_type = has_ext("GLX_EXT_get_drawable_type"); - GLAD_GLX_EXT_import_context = has_ext("GLX_EXT_import_context"); - GLAD_GLX_EXT_libglvnd = has_ext("GLX_EXT_libglvnd"); - GLAD_GLX_EXT_no_config_context = has_ext("GLX_EXT_no_config_context"); - GLAD_GLX_EXT_stereo_tree = has_ext("GLX_EXT_stereo_tree"); - GLAD_GLX_EXT_swap_control = has_ext("GLX_EXT_swap_control"); - GLAD_GLX_EXT_swap_control_tear = has_ext("GLX_EXT_swap_control_tear"); - GLAD_GLX_EXT_texture_from_pixmap = has_ext("GLX_EXT_texture_from_pixmap"); - GLAD_GLX_EXT_visual_info = has_ext("GLX_EXT_visual_info"); - GLAD_GLX_EXT_visual_rating = has_ext("GLX_EXT_visual_rating"); - GLAD_GLX_INTEL_swap_event = has_ext("GLX_INTEL_swap_event"); - GLAD_GLX_MESA_agp_offset = has_ext("GLX_MESA_agp_offset"); - GLAD_GLX_MESA_copy_sub_buffer = has_ext("GLX_MESA_copy_sub_buffer"); - GLAD_GLX_MESA_pixmap_colormap = has_ext("GLX_MESA_pixmap_colormap"); - GLAD_GLX_MESA_query_renderer = has_ext("GLX_MESA_query_renderer"); - GLAD_GLX_MESA_release_buffers = has_ext("GLX_MESA_release_buffers"); - GLAD_GLX_MESA_set_3dfx_mode = has_ext("GLX_MESA_set_3dfx_mode"); - GLAD_GLX_MESA_swap_control = has_ext("GLX_MESA_swap_control"); - GLAD_GLX_NV_copy_buffer = has_ext("GLX_NV_copy_buffer"); - GLAD_GLX_NV_copy_image = has_ext("GLX_NV_copy_image"); - GLAD_GLX_NV_delay_before_swap = has_ext("GLX_NV_delay_before_swap"); - GLAD_GLX_NV_float_buffer = has_ext("GLX_NV_float_buffer"); - GLAD_GLX_NV_multigpu_context = has_ext("GLX_NV_multigpu_context"); - GLAD_GLX_NV_multisample_coverage = has_ext("GLX_NV_multisample_coverage"); - GLAD_GLX_NV_present_video = has_ext("GLX_NV_present_video"); - GLAD_GLX_NV_robustness_video_memory_purge = has_ext("GLX_NV_robustness_video_memory_purge"); - GLAD_GLX_NV_swap_group = has_ext("GLX_NV_swap_group"); - GLAD_GLX_NV_video_capture = has_ext("GLX_NV_video_capture"); - GLAD_GLX_NV_video_out = has_ext("GLX_NV_video_out"); - GLAD_GLX_OML_swap_method = has_ext("GLX_OML_swap_method"); - GLAD_GLX_OML_sync_control = has_ext("GLX_OML_sync_control"); - GLAD_GLX_SGIS_blended_overlay = has_ext("GLX_SGIS_blended_overlay"); - GLAD_GLX_SGIS_multisample = has_ext("GLX_SGIS_multisample"); - GLAD_GLX_SGIS_shared_multisample = has_ext("GLX_SGIS_shared_multisample"); - GLAD_GLX_SGIX_dmbuffer = has_ext("GLX_SGIX_dmbuffer"); - GLAD_GLX_SGIX_fbconfig = has_ext("GLX_SGIX_fbconfig"); - GLAD_GLX_SGIX_hyperpipe = has_ext("GLX_SGIX_hyperpipe"); - GLAD_GLX_SGIX_pbuffer = has_ext("GLX_SGIX_pbuffer"); - GLAD_GLX_SGIX_swap_barrier = has_ext("GLX_SGIX_swap_barrier"); - GLAD_GLX_SGIX_swap_group = has_ext("GLX_SGIX_swap_group"); - GLAD_GLX_SGIX_video_resize = has_ext("GLX_SGIX_video_resize"); - GLAD_GLX_SGIX_video_source = has_ext("GLX_SGIX_video_source"); - GLAD_GLX_SGIX_visual_select_group = has_ext("GLX_SGIX_visual_select_group"); - GLAD_GLX_SGI_cushion = has_ext("GLX_SGI_cushion"); - GLAD_GLX_SGI_make_current_read = has_ext("GLX_SGI_make_current_read"); - GLAD_GLX_SGI_swap_control = has_ext("GLX_SGI_swap_control"); - GLAD_GLX_SGI_video_sync = has_ext("GLX_SGI_video_sync"); - GLAD_GLX_SUN_get_transparent_index = has_ext("GLX_SUN_get_transparent_index"); - free_exts(); - return 1; -} - -static void find_coreGLX(Display *dpy, int screen) { - int major = 0, minor = 0; - if(dpy == 0 && GLADGLXDisplay == 0) { - dpy = XOpenDisplay(0); - screen = XScreenNumberOfScreen(XDefaultScreenOfDisplay(dpy)); - } else if(dpy == 0) { - dpy = GLADGLXDisplay; - screen = GLADGLXscreen; - } - glXQueryVersion(dpy, &major, &minor); - GLADGLXDisplay = dpy; - GLADGLXscreen = screen; - GLAD_GLX_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; - GLAD_GLX_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; - GLAD_GLX_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; - GLAD_GLX_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; - GLAD_GLX_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; -} - -int gladLoadGLXLoader(GLADloadproc load, Display *dpy, int screen) { - glXQueryVersion = (PFNGLXQUERYVERSIONPROC)load("glXQueryVersion"); - if(glXQueryVersion == NULL) return 0; - find_coreGLX(dpy, screen); - load_GLX_VERSION_1_0(load); - load_GLX_VERSION_1_1(load); - load_GLX_VERSION_1_2(load); - load_GLX_VERSION_1_3(load); - load_GLX_VERSION_1_4(load); - - if (!find_extensionsGLX()) return 0; - load_GLX_AMD_gpu_association(load); - load_GLX_ARB_create_context(load); - load_GLX_ARB_get_proc_address(load); - load_GLX_EXT_import_context(load); - load_GLX_EXT_swap_control(load); - load_GLX_EXT_texture_from_pixmap(load); - load_GLX_MESA_agp_offset(load); - load_GLX_MESA_copy_sub_buffer(load); - load_GLX_MESA_pixmap_colormap(load); - load_GLX_MESA_query_renderer(load); - load_GLX_MESA_release_buffers(load); - load_GLX_MESA_set_3dfx_mode(load); - load_GLX_MESA_swap_control(load); - load_GLX_NV_copy_buffer(load); - load_GLX_NV_copy_image(load); - load_GLX_NV_delay_before_swap(load); - load_GLX_NV_present_video(load); - load_GLX_NV_swap_group(load); - load_GLX_NV_video_capture(load); - load_GLX_NV_video_out(load); - load_GLX_OML_sync_control(load); - load_GLX_SGIX_dmbuffer(load); - load_GLX_SGIX_fbconfig(load); - load_GLX_SGIX_hyperpipe(load); - load_GLX_SGIX_pbuffer(load); - load_GLX_SGIX_swap_barrier(load); - load_GLX_SGIX_swap_group(load); - load_GLX_SGIX_video_resize(load); - load_GLX_SGIX_video_source(load); - load_GLX_SGI_cushion(load); - load_GLX_SGI_make_current_read(load); - load_GLX_SGI_swap_control(load); - load_GLX_SGI_video_sync(load); - load_GLX_SUN_get_transparent_index(load); - return 1; -} - diff --git a/third_party/glad/src/glad_wgl.c b/third_party/glad/src/glad_wgl.c deleted file mode 100644 index d9ad035c..00000000 --- a/third_party/glad/src/glad_wgl.c +++ /dev/null @@ -1,756 +0,0 @@ -/* - - WGL loader generated by glad 0.1.36 on Thu Sep 15 11:18:46 2022. - - Language/Generator: C/C++ - Specification: wgl - APIs: wgl=1.0 - Profile: - - Extensions: - WGL_3DFX_multisample, - WGL_3DL_stereo_control, - WGL_AMD_gpu_association, - WGL_ARB_buffer_region, - WGL_ARB_context_flush_control, - WGL_ARB_create_context, - WGL_ARB_create_context_no_error, - WGL_ARB_create_context_profile, - WGL_ARB_create_context_robustness, - WGL_ARB_extensions_string, - WGL_ARB_framebuffer_sRGB, - WGL_ARB_make_current_read, - WGL_ARB_multisample, - WGL_ARB_pbuffer, - WGL_ARB_pixel_format, - WGL_ARB_pixel_format_float, - WGL_ARB_render_texture, - WGL_ARB_robustness_application_isolation, - WGL_ARB_robustness_share_group_isolation, - WGL_ATI_pixel_format_float, - WGL_ATI_render_texture_rectangle, - WGL_EXT_colorspace, - WGL_EXT_create_context_es2_profile, - WGL_EXT_create_context_es_profile, - WGL_EXT_depth_float, - WGL_EXT_display_color_table, - WGL_EXT_extensions_string, - WGL_EXT_framebuffer_sRGB, - WGL_EXT_make_current_read, - WGL_EXT_multisample, - WGL_EXT_pbuffer, - WGL_EXT_pixel_format, - WGL_EXT_pixel_format_packed_float, - WGL_EXT_swap_control, - WGL_EXT_swap_control_tear, - WGL_I3D_digital_video_control, - WGL_I3D_gamma, - WGL_I3D_genlock, - WGL_I3D_image_buffer, - WGL_I3D_swap_frame_lock, - WGL_I3D_swap_frame_usage, - WGL_NV_DX_interop, - WGL_NV_DX_interop2, - WGL_NV_copy_image, - WGL_NV_delay_before_swap, - WGL_NV_float_buffer, - WGL_NV_gpu_affinity, - WGL_NV_multigpu_context, - WGL_NV_multisample_coverage, - WGL_NV_present_video, - WGL_NV_render_depth_texture, - WGL_NV_render_texture_rectangle, - WGL_NV_swap_group, - WGL_NV_vertex_array_range, - WGL_NV_video_capture, - WGL_NV_video_output, - WGL_OML_sync_control - Loader: True - Local files: True - Omit khrplatform: False - Reproducible: False - - Commandline: - --api="wgl=1.0" --generator="c" --spec="wgl" --local-files --extensions="WGL_3DFX_multisample,WGL_3DL_stereo_control,WGL_AMD_gpu_association,WGL_ARB_buffer_region,WGL_ARB_context_flush_control,WGL_ARB_create_context,WGL_ARB_create_context_no_error,WGL_ARB_create_context_profile,WGL_ARB_create_context_robustness,WGL_ARB_extensions_string,WGL_ARB_framebuffer_sRGB,WGL_ARB_make_current_read,WGL_ARB_multisample,WGL_ARB_pbuffer,WGL_ARB_pixel_format,WGL_ARB_pixel_format_float,WGL_ARB_render_texture,WGL_ARB_robustness_application_isolation,WGL_ARB_robustness_share_group_isolation,WGL_ATI_pixel_format_float,WGL_ATI_render_texture_rectangle,WGL_EXT_colorspace,WGL_EXT_create_context_es2_profile,WGL_EXT_create_context_es_profile,WGL_EXT_depth_float,WGL_EXT_display_color_table,WGL_EXT_extensions_string,WGL_EXT_framebuffer_sRGB,WGL_EXT_make_current_read,WGL_EXT_multisample,WGL_EXT_pbuffer,WGL_EXT_pixel_format,WGL_EXT_pixel_format_packed_float,WGL_EXT_swap_control,WGL_EXT_swap_control_tear,WGL_I3D_digital_video_control,WGL_I3D_gamma,WGL_I3D_genlock,WGL_I3D_image_buffer,WGL_I3D_swap_frame_lock,WGL_I3D_swap_frame_usage,WGL_NV_DX_interop,WGL_NV_DX_interop2,WGL_NV_copy_image,WGL_NV_delay_before_swap,WGL_NV_float_buffer,WGL_NV_gpu_affinity,WGL_NV_multigpu_context,WGL_NV_multisample_coverage,WGL_NV_present_video,WGL_NV_render_depth_texture,WGL_NV_render_texture_rectangle,WGL_NV_swap_group,WGL_NV_vertex_array_range,WGL_NV_video_capture,WGL_NV_video_output,WGL_OML_sync_control" - Online: - Too many extensions -*/ - -#include -#include -#include -#include - -static void* get_proc(const char *namez); - -#if defined(_WIN32) || defined(__CYGWIN__) -#ifndef _WINDOWS_ -#undef APIENTRY -#endif -#include -static HMODULE libGL; - -typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; - -#ifdef _MSC_VER -#ifdef __has_include - #if __has_include() - #define HAVE_WINAPIFAMILY 1 - #endif -#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ - #define HAVE_WINAPIFAMILY 1 -#endif -#endif - -#ifdef HAVE_WINAPIFAMILY - #include - #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) - #define IS_UWP 1 - #endif -#endif - -static -int open_wgl(void) { -#ifndef IS_UWP - libGL = LoadLibraryW(L"opengl32.dll"); - if(libGL != NULL) { - void (* tmp)(void); - tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); - gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; - return gladGetProcAddressPtr != NULL; - } -#endif - - return 0; -} - -static -void close_wgl(void) { - if(libGL != NULL) { - FreeLibrary((HMODULE) libGL); - libGL = NULL; - } -} -#else -#include -static void* libGL; - -#if !defined(__APPLE__) && !defined(__HAIKU__) -typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; -#endif - -static -int open_wgl(void) { -#ifdef __APPLE__ - static const char *NAMES[] = { - "../Frameworks/OpenGL.framework/OpenGL", - "/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" - }; -#else - static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; -#endif - - unsigned int index = 0; - for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { - libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); - - if(libGL != NULL) { -#if defined(__APPLE__) || defined(__HAIKU__) - return 1; -#else - gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, - "glXGetProcAddressARB"); - return gladGetProcAddressPtr != NULL; -#endif - } - } - - return 0; -} - -static -void close_wgl(void) { - if(libGL != NULL) { - dlclose(libGL); - libGL = NULL; - } -} -#endif - -static -void* get_proc(const char *namez) { - void* result = NULL; - if(libGL == NULL) return NULL; - -#if !defined(__APPLE__) && !defined(__HAIKU__) - if(gladGetProcAddressPtr != NULL) { - result = gladGetProcAddressPtr(namez); - } -#endif - if(result == NULL) { -#if defined(_WIN32) || defined(__CYGWIN__) - result = (void*)GetProcAddress((HMODULE) libGL, namez); -#else - result = dlsym(libGL, namez); -#endif - } - - return result; -} - -int gladLoadWGL(HDC hdc) { - int status = 0; - - if(open_wgl()) { - status = gladLoadWGLLoader((GLADloadproc)get_proc, hdc); - } - - return status; -} - -void gladUnloadGLX(void) { - close_wgl(); -} - -static HDC GLADWGLhdc = (HDC)INVALID_HANDLE_VALUE; - -static int get_exts(void) { - return 1; -} - -static void free_exts(void) { - return; -} - -static int has_ext(const char *ext) { - const char *terminator; - const char *loc; - const char *extensions; - - if(wglGetExtensionsStringEXT == NULL && wglGetExtensionsStringARB == NULL) - return 0; - - if(wglGetExtensionsStringARB == NULL || GLADWGLhdc == INVALID_HANDLE_VALUE) - extensions = wglGetExtensionsStringEXT(); - else - extensions = wglGetExtensionsStringARB(GLADWGLhdc); - - if(extensions == NULL || ext == NULL) - return 0; - - while(1) { - loc = strstr(extensions, ext); - if(loc == NULL) - break; - - terminator = loc + strlen(ext); - if((loc == extensions || *(loc - 1) == ' ') && - (*terminator == ' ' || *terminator == '\0')) - { - return 1; - } - extensions = terminator; - } - - return 0; -} -int GLAD_WGL_VERSION_1_0 = 0; -int GLAD_WGL_3DFX_multisample = 0; -int GLAD_WGL_3DL_stereo_control = 0; -int GLAD_WGL_AMD_gpu_association = 0; -int GLAD_WGL_ARB_buffer_region = 0; -int GLAD_WGL_ARB_context_flush_control = 0; -int GLAD_WGL_ARB_create_context = 0; -int GLAD_WGL_ARB_create_context_no_error = 0; -int GLAD_WGL_ARB_create_context_profile = 0; -int GLAD_WGL_ARB_create_context_robustness = 0; -int GLAD_WGL_ARB_extensions_string = 0; -int GLAD_WGL_ARB_framebuffer_sRGB = 0; -int GLAD_WGL_ARB_make_current_read = 0; -int GLAD_WGL_ARB_multisample = 0; -int GLAD_WGL_ARB_pbuffer = 0; -int GLAD_WGL_ARB_pixel_format = 0; -int GLAD_WGL_ARB_pixel_format_float = 0; -int GLAD_WGL_ARB_render_texture = 0; -int GLAD_WGL_ARB_robustness_application_isolation = 0; -int GLAD_WGL_ARB_robustness_share_group_isolation = 0; -int GLAD_WGL_ATI_pixel_format_float = 0; -int GLAD_WGL_ATI_render_texture_rectangle = 0; -int GLAD_WGL_EXT_colorspace = 0; -int GLAD_WGL_EXT_create_context_es2_profile = 0; -int GLAD_WGL_EXT_create_context_es_profile = 0; -int GLAD_WGL_EXT_depth_float = 0; -int GLAD_WGL_EXT_display_color_table = 0; -int GLAD_WGL_EXT_extensions_string = 0; -int GLAD_WGL_EXT_framebuffer_sRGB = 0; -int GLAD_WGL_EXT_make_current_read = 0; -int GLAD_WGL_EXT_multisample = 0; -int GLAD_WGL_EXT_pbuffer = 0; -int GLAD_WGL_EXT_pixel_format = 0; -int GLAD_WGL_EXT_pixel_format_packed_float = 0; -int GLAD_WGL_EXT_swap_control = 0; -int GLAD_WGL_EXT_swap_control_tear = 0; -int GLAD_WGL_I3D_digital_video_control = 0; -int GLAD_WGL_I3D_gamma = 0; -int GLAD_WGL_I3D_genlock = 0; -int GLAD_WGL_I3D_image_buffer = 0; -int GLAD_WGL_I3D_swap_frame_lock = 0; -int GLAD_WGL_I3D_swap_frame_usage = 0; -int GLAD_WGL_NV_DX_interop = 0; -int GLAD_WGL_NV_DX_interop2 = 0; -int GLAD_WGL_NV_copy_image = 0; -int GLAD_WGL_NV_delay_before_swap = 0; -int GLAD_WGL_NV_float_buffer = 0; -int GLAD_WGL_NV_gpu_affinity = 0; -int GLAD_WGL_NV_multigpu_context = 0; -int GLAD_WGL_NV_multisample_coverage = 0; -int GLAD_WGL_NV_present_video = 0; -int GLAD_WGL_NV_render_depth_texture = 0; -int GLAD_WGL_NV_render_texture_rectangle = 0; -int GLAD_WGL_NV_swap_group = 0; -int GLAD_WGL_NV_vertex_array_range = 0; -int GLAD_WGL_NV_video_capture = 0; -int GLAD_WGL_NV_video_output = 0; -int GLAD_WGL_OML_sync_control = 0; -PFNWGLSETSTEREOEMITTERSTATE3DLPROC glad_wglSetStereoEmitterState3DL = NULL; -PFNWGLGETGPUIDSAMDPROC glad_wglGetGPUIDsAMD = NULL; -PFNWGLGETGPUINFOAMDPROC glad_wglGetGPUInfoAMD = NULL; -PFNWGLGETCONTEXTGPUIDAMDPROC glad_wglGetContextGPUIDAMD = NULL; -PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC glad_wglCreateAssociatedContextAMD = NULL; -PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC glad_wglCreateAssociatedContextAttribsAMD = NULL; -PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC glad_wglDeleteAssociatedContextAMD = NULL; -PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC glad_wglMakeAssociatedContextCurrentAMD = NULL; -PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC glad_wglGetCurrentAssociatedContextAMD = NULL; -PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC glad_wglBlitContextFramebufferAMD = NULL; -PFNWGLCREATEBUFFERREGIONARBPROC glad_wglCreateBufferRegionARB = NULL; -PFNWGLDELETEBUFFERREGIONARBPROC glad_wglDeleteBufferRegionARB = NULL; -PFNWGLSAVEBUFFERREGIONARBPROC glad_wglSaveBufferRegionARB = NULL; -PFNWGLRESTOREBUFFERREGIONARBPROC glad_wglRestoreBufferRegionARB = NULL; -PFNWGLCREATECONTEXTATTRIBSARBPROC glad_wglCreateContextAttribsARB = NULL; -PFNWGLGETEXTENSIONSSTRINGARBPROC glad_wglGetExtensionsStringARB = NULL; -PFNWGLMAKECONTEXTCURRENTARBPROC glad_wglMakeContextCurrentARB = NULL; -PFNWGLGETCURRENTREADDCARBPROC glad_wglGetCurrentReadDCARB = NULL; -PFNWGLCREATEPBUFFERARBPROC glad_wglCreatePbufferARB = NULL; -PFNWGLGETPBUFFERDCARBPROC glad_wglGetPbufferDCARB = NULL; -PFNWGLRELEASEPBUFFERDCARBPROC glad_wglReleasePbufferDCARB = NULL; -PFNWGLDESTROYPBUFFERARBPROC glad_wglDestroyPbufferARB = NULL; -PFNWGLQUERYPBUFFERARBPROC glad_wglQueryPbufferARB = NULL; -PFNWGLGETPIXELFORMATATTRIBIVARBPROC glad_wglGetPixelFormatAttribivARB = NULL; -PFNWGLGETPIXELFORMATATTRIBFVARBPROC glad_wglGetPixelFormatAttribfvARB = NULL; -PFNWGLCHOOSEPIXELFORMATARBPROC glad_wglChoosePixelFormatARB = NULL; -PFNWGLBINDTEXIMAGEARBPROC glad_wglBindTexImageARB = NULL; -PFNWGLRELEASETEXIMAGEARBPROC glad_wglReleaseTexImageARB = NULL; -PFNWGLSETPBUFFERATTRIBARBPROC glad_wglSetPbufferAttribARB = NULL; -PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC glad_wglCreateDisplayColorTableEXT = NULL; -PFNWGLLOADDISPLAYCOLORTABLEEXTPROC glad_wglLoadDisplayColorTableEXT = NULL; -PFNWGLBINDDISPLAYCOLORTABLEEXTPROC glad_wglBindDisplayColorTableEXT = NULL; -PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC glad_wglDestroyDisplayColorTableEXT = NULL; -PFNWGLGETEXTENSIONSSTRINGEXTPROC glad_wglGetExtensionsStringEXT = NULL; -PFNWGLMAKECONTEXTCURRENTEXTPROC glad_wglMakeContextCurrentEXT = NULL; -PFNWGLGETCURRENTREADDCEXTPROC glad_wglGetCurrentReadDCEXT = NULL; -PFNWGLCREATEPBUFFEREXTPROC glad_wglCreatePbufferEXT = NULL; -PFNWGLGETPBUFFERDCEXTPROC glad_wglGetPbufferDCEXT = NULL; -PFNWGLRELEASEPBUFFERDCEXTPROC glad_wglReleasePbufferDCEXT = NULL; -PFNWGLDESTROYPBUFFEREXTPROC glad_wglDestroyPbufferEXT = NULL; -PFNWGLQUERYPBUFFEREXTPROC glad_wglQueryPbufferEXT = NULL; -PFNWGLGETPIXELFORMATATTRIBIVEXTPROC glad_wglGetPixelFormatAttribivEXT = NULL; -PFNWGLGETPIXELFORMATATTRIBFVEXTPROC glad_wglGetPixelFormatAttribfvEXT = NULL; -PFNWGLCHOOSEPIXELFORMATEXTPROC glad_wglChoosePixelFormatEXT = NULL; -PFNWGLSWAPINTERVALEXTPROC glad_wglSwapIntervalEXT = NULL; -PFNWGLGETSWAPINTERVALEXTPROC glad_wglGetSwapIntervalEXT = NULL; -PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC glad_wglGetDigitalVideoParametersI3D = NULL; -PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC glad_wglSetDigitalVideoParametersI3D = NULL; -PFNWGLGETGAMMATABLEPARAMETERSI3DPROC glad_wglGetGammaTableParametersI3D = NULL; -PFNWGLSETGAMMATABLEPARAMETERSI3DPROC glad_wglSetGammaTableParametersI3D = NULL; -PFNWGLGETGAMMATABLEI3DPROC glad_wglGetGammaTableI3D = NULL; -PFNWGLSETGAMMATABLEI3DPROC glad_wglSetGammaTableI3D = NULL; -PFNWGLENABLEGENLOCKI3DPROC glad_wglEnableGenlockI3D = NULL; -PFNWGLDISABLEGENLOCKI3DPROC glad_wglDisableGenlockI3D = NULL; -PFNWGLISENABLEDGENLOCKI3DPROC glad_wglIsEnabledGenlockI3D = NULL; -PFNWGLGENLOCKSOURCEI3DPROC glad_wglGenlockSourceI3D = NULL; -PFNWGLGETGENLOCKSOURCEI3DPROC glad_wglGetGenlockSourceI3D = NULL; -PFNWGLGENLOCKSOURCEEDGEI3DPROC glad_wglGenlockSourceEdgeI3D = NULL; -PFNWGLGETGENLOCKSOURCEEDGEI3DPROC glad_wglGetGenlockSourceEdgeI3D = NULL; -PFNWGLGENLOCKSAMPLERATEI3DPROC glad_wglGenlockSampleRateI3D = NULL; -PFNWGLGETGENLOCKSAMPLERATEI3DPROC glad_wglGetGenlockSampleRateI3D = NULL; -PFNWGLGENLOCKSOURCEDELAYI3DPROC glad_wglGenlockSourceDelayI3D = NULL; -PFNWGLGETGENLOCKSOURCEDELAYI3DPROC glad_wglGetGenlockSourceDelayI3D = NULL; -PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC glad_wglQueryGenlockMaxSourceDelayI3D = NULL; -PFNWGLCREATEIMAGEBUFFERI3DPROC glad_wglCreateImageBufferI3D = NULL; -PFNWGLDESTROYIMAGEBUFFERI3DPROC glad_wglDestroyImageBufferI3D = NULL; -PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC glad_wglAssociateImageBufferEventsI3D = NULL; -PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC glad_wglReleaseImageBufferEventsI3D = NULL; -PFNWGLENABLEFRAMELOCKI3DPROC glad_wglEnableFrameLockI3D = NULL; -PFNWGLDISABLEFRAMELOCKI3DPROC glad_wglDisableFrameLockI3D = NULL; -PFNWGLISENABLEDFRAMELOCKI3DPROC glad_wglIsEnabledFrameLockI3D = NULL; -PFNWGLQUERYFRAMELOCKMASTERI3DPROC glad_wglQueryFrameLockMasterI3D = NULL; -PFNWGLGETFRAMEUSAGEI3DPROC glad_wglGetFrameUsageI3D = NULL; -PFNWGLBEGINFRAMETRACKINGI3DPROC glad_wglBeginFrameTrackingI3D = NULL; -PFNWGLENDFRAMETRACKINGI3DPROC glad_wglEndFrameTrackingI3D = NULL; -PFNWGLQUERYFRAMETRACKINGI3DPROC glad_wglQueryFrameTrackingI3D = NULL; -PFNWGLDXSETRESOURCESHAREHANDLENVPROC glad_wglDXSetResourceShareHandleNV = NULL; -PFNWGLDXOPENDEVICENVPROC glad_wglDXOpenDeviceNV = NULL; -PFNWGLDXCLOSEDEVICENVPROC glad_wglDXCloseDeviceNV = NULL; -PFNWGLDXREGISTEROBJECTNVPROC glad_wglDXRegisterObjectNV = NULL; -PFNWGLDXUNREGISTEROBJECTNVPROC glad_wglDXUnregisterObjectNV = NULL; -PFNWGLDXOBJECTACCESSNVPROC glad_wglDXObjectAccessNV = NULL; -PFNWGLDXLOCKOBJECTSNVPROC glad_wglDXLockObjectsNV = NULL; -PFNWGLDXUNLOCKOBJECTSNVPROC glad_wglDXUnlockObjectsNV = NULL; -PFNWGLCOPYIMAGESUBDATANVPROC glad_wglCopyImageSubDataNV = NULL; -PFNWGLDELAYBEFORESWAPNVPROC glad_wglDelayBeforeSwapNV = NULL; -PFNWGLENUMGPUSNVPROC glad_wglEnumGpusNV = NULL; -PFNWGLENUMGPUDEVICESNVPROC glad_wglEnumGpuDevicesNV = NULL; -PFNWGLCREATEAFFINITYDCNVPROC glad_wglCreateAffinityDCNV = NULL; -PFNWGLENUMGPUSFROMAFFINITYDCNVPROC glad_wglEnumGpusFromAffinityDCNV = NULL; -PFNWGLDELETEDCNVPROC glad_wglDeleteDCNV = NULL; -PFNWGLENUMERATEVIDEODEVICESNVPROC glad_wglEnumerateVideoDevicesNV = NULL; -PFNWGLBINDVIDEODEVICENVPROC glad_wglBindVideoDeviceNV = NULL; -PFNWGLQUERYCURRENTCONTEXTNVPROC glad_wglQueryCurrentContextNV = NULL; -PFNWGLJOINSWAPGROUPNVPROC glad_wglJoinSwapGroupNV = NULL; -PFNWGLBINDSWAPBARRIERNVPROC glad_wglBindSwapBarrierNV = NULL; -PFNWGLQUERYSWAPGROUPNVPROC glad_wglQuerySwapGroupNV = NULL; -PFNWGLQUERYMAXSWAPGROUPSNVPROC glad_wglQueryMaxSwapGroupsNV = NULL; -PFNWGLQUERYFRAMECOUNTNVPROC glad_wglQueryFrameCountNV = NULL; -PFNWGLRESETFRAMECOUNTNVPROC glad_wglResetFrameCountNV = NULL; -PFNWGLALLOCATEMEMORYNVPROC glad_wglAllocateMemoryNV = NULL; -PFNWGLFREEMEMORYNVPROC glad_wglFreeMemoryNV = NULL; -PFNWGLBINDVIDEOCAPTUREDEVICENVPROC glad_wglBindVideoCaptureDeviceNV = NULL; -PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC glad_wglEnumerateVideoCaptureDevicesNV = NULL; -PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC glad_wglLockVideoCaptureDeviceNV = NULL; -PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC glad_wglQueryVideoCaptureDeviceNV = NULL; -PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC glad_wglReleaseVideoCaptureDeviceNV = NULL; -PFNWGLGETVIDEODEVICENVPROC glad_wglGetVideoDeviceNV = NULL; -PFNWGLRELEASEVIDEODEVICENVPROC glad_wglReleaseVideoDeviceNV = NULL; -PFNWGLBINDVIDEOIMAGENVPROC glad_wglBindVideoImageNV = NULL; -PFNWGLRELEASEVIDEOIMAGENVPROC glad_wglReleaseVideoImageNV = NULL; -PFNWGLSENDPBUFFERTOVIDEONVPROC glad_wglSendPbufferToVideoNV = NULL; -PFNWGLGETVIDEOINFONVPROC glad_wglGetVideoInfoNV = NULL; -PFNWGLGETSYNCVALUESOMLPROC glad_wglGetSyncValuesOML = NULL; -PFNWGLGETMSCRATEOMLPROC glad_wglGetMscRateOML = NULL; -PFNWGLSWAPBUFFERSMSCOMLPROC glad_wglSwapBuffersMscOML = NULL; -PFNWGLSWAPLAYERBUFFERSMSCOMLPROC glad_wglSwapLayerBuffersMscOML = NULL; -PFNWGLWAITFORMSCOMLPROC glad_wglWaitForMscOML = NULL; -PFNWGLWAITFORSBCOMLPROC glad_wglWaitForSbcOML = NULL; -static void load_WGL_3DL_stereo_control(GLADloadproc load) { - if(!GLAD_WGL_3DL_stereo_control) return; - glad_wglSetStereoEmitterState3DL = (PFNWGLSETSTEREOEMITTERSTATE3DLPROC)load("wglSetStereoEmitterState3DL"); -} -static void load_WGL_AMD_gpu_association(GLADloadproc load) { - if(!GLAD_WGL_AMD_gpu_association) return; - glad_wglGetGPUIDsAMD = (PFNWGLGETGPUIDSAMDPROC)load("wglGetGPUIDsAMD"); - glad_wglGetGPUInfoAMD = (PFNWGLGETGPUINFOAMDPROC)load("wglGetGPUInfoAMD"); - glad_wglGetContextGPUIDAMD = (PFNWGLGETCONTEXTGPUIDAMDPROC)load("wglGetContextGPUIDAMD"); - glad_wglCreateAssociatedContextAMD = (PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)load("wglCreateAssociatedContextAMD"); - glad_wglCreateAssociatedContextAttribsAMD = (PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)load("wglCreateAssociatedContextAttribsAMD"); - glad_wglDeleteAssociatedContextAMD = (PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)load("wglDeleteAssociatedContextAMD"); - glad_wglMakeAssociatedContextCurrentAMD = (PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)load("wglMakeAssociatedContextCurrentAMD"); - glad_wglGetCurrentAssociatedContextAMD = (PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)load("wglGetCurrentAssociatedContextAMD"); - glad_wglBlitContextFramebufferAMD = (PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)load("wglBlitContextFramebufferAMD"); -} -static void load_WGL_ARB_buffer_region(GLADloadproc load) { - if(!GLAD_WGL_ARB_buffer_region) return; - glad_wglCreateBufferRegionARB = (PFNWGLCREATEBUFFERREGIONARBPROC)load("wglCreateBufferRegionARB"); - glad_wglDeleteBufferRegionARB = (PFNWGLDELETEBUFFERREGIONARBPROC)load("wglDeleteBufferRegionARB"); - glad_wglSaveBufferRegionARB = (PFNWGLSAVEBUFFERREGIONARBPROC)load("wglSaveBufferRegionARB"); - glad_wglRestoreBufferRegionARB = (PFNWGLRESTOREBUFFERREGIONARBPROC)load("wglRestoreBufferRegionARB"); -} -static void load_WGL_ARB_create_context(GLADloadproc load) { - if(!GLAD_WGL_ARB_create_context) return; - glad_wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)load("wglCreateContextAttribsARB"); -} -static void load_WGL_ARB_extensions_string(GLADloadproc load) { - if(!GLAD_WGL_ARB_extensions_string) return; - glad_wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)load("wglGetExtensionsStringARB"); -} -static void load_WGL_ARB_make_current_read(GLADloadproc load) { - if(!GLAD_WGL_ARB_make_current_read) return; - glad_wglMakeContextCurrentARB = (PFNWGLMAKECONTEXTCURRENTARBPROC)load("wglMakeContextCurrentARB"); - glad_wglGetCurrentReadDCARB = (PFNWGLGETCURRENTREADDCARBPROC)load("wglGetCurrentReadDCARB"); -} -static void load_WGL_ARB_pbuffer(GLADloadproc load) { - if(!GLAD_WGL_ARB_pbuffer) return; - glad_wglCreatePbufferARB = (PFNWGLCREATEPBUFFERARBPROC)load("wglCreatePbufferARB"); - glad_wglGetPbufferDCARB = (PFNWGLGETPBUFFERDCARBPROC)load("wglGetPbufferDCARB"); - glad_wglReleasePbufferDCARB = (PFNWGLRELEASEPBUFFERDCARBPROC)load("wglReleasePbufferDCARB"); - glad_wglDestroyPbufferARB = (PFNWGLDESTROYPBUFFERARBPROC)load("wglDestroyPbufferARB"); - glad_wglQueryPbufferARB = (PFNWGLQUERYPBUFFERARBPROC)load("wglQueryPbufferARB"); -} -static void load_WGL_ARB_pixel_format(GLADloadproc load) { - if(!GLAD_WGL_ARB_pixel_format) return; - glad_wglGetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)load("wglGetPixelFormatAttribivARB"); - glad_wglGetPixelFormatAttribfvARB = (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)load("wglGetPixelFormatAttribfvARB"); - glad_wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)load("wglChoosePixelFormatARB"); -} -static void load_WGL_ARB_render_texture(GLADloadproc load) { - if(!GLAD_WGL_ARB_render_texture) return; - glad_wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)load("wglBindTexImageARB"); - glad_wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)load("wglReleaseTexImageARB"); - glad_wglSetPbufferAttribARB = (PFNWGLSETPBUFFERATTRIBARBPROC)load("wglSetPbufferAttribARB"); -} -static void load_WGL_EXT_display_color_table(GLADloadproc load) { - if(!GLAD_WGL_EXT_display_color_table) return; - glad_wglCreateDisplayColorTableEXT = (PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)load("wglCreateDisplayColorTableEXT"); - glad_wglLoadDisplayColorTableEXT = (PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)load("wglLoadDisplayColorTableEXT"); - glad_wglBindDisplayColorTableEXT = (PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)load("wglBindDisplayColorTableEXT"); - glad_wglDestroyDisplayColorTableEXT = (PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)load("wglDestroyDisplayColorTableEXT"); -} -static void load_WGL_EXT_extensions_string(GLADloadproc load) { - if(!GLAD_WGL_EXT_extensions_string) return; - glad_wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)load("wglGetExtensionsStringEXT"); -} -static void load_WGL_EXT_make_current_read(GLADloadproc load) { - if(!GLAD_WGL_EXT_make_current_read) return; - glad_wglMakeContextCurrentEXT = (PFNWGLMAKECONTEXTCURRENTEXTPROC)load("wglMakeContextCurrentEXT"); - glad_wglGetCurrentReadDCEXT = (PFNWGLGETCURRENTREADDCEXTPROC)load("wglGetCurrentReadDCEXT"); -} -static void load_WGL_EXT_pbuffer(GLADloadproc load) { - if(!GLAD_WGL_EXT_pbuffer) return; - glad_wglCreatePbufferEXT = (PFNWGLCREATEPBUFFEREXTPROC)load("wglCreatePbufferEXT"); - glad_wglGetPbufferDCEXT = (PFNWGLGETPBUFFERDCEXTPROC)load("wglGetPbufferDCEXT"); - glad_wglReleasePbufferDCEXT = (PFNWGLRELEASEPBUFFERDCEXTPROC)load("wglReleasePbufferDCEXT"); - glad_wglDestroyPbufferEXT = (PFNWGLDESTROYPBUFFEREXTPROC)load("wglDestroyPbufferEXT"); - glad_wglQueryPbufferEXT = (PFNWGLQUERYPBUFFEREXTPROC)load("wglQueryPbufferEXT"); -} -static void load_WGL_EXT_pixel_format(GLADloadproc load) { - if(!GLAD_WGL_EXT_pixel_format) return; - glad_wglGetPixelFormatAttribivEXT = (PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)load("wglGetPixelFormatAttribivEXT"); - glad_wglGetPixelFormatAttribfvEXT = (PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)load("wglGetPixelFormatAttribfvEXT"); - glad_wglChoosePixelFormatEXT = (PFNWGLCHOOSEPIXELFORMATEXTPROC)load("wglChoosePixelFormatEXT"); -} -static void load_WGL_EXT_swap_control(GLADloadproc load) { - if(!GLAD_WGL_EXT_swap_control) return; - glad_wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)load("wglSwapIntervalEXT"); - glad_wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)load("wglGetSwapIntervalEXT"); -} -static void load_WGL_I3D_digital_video_control(GLADloadproc load) { - if(!GLAD_WGL_I3D_digital_video_control) return; - glad_wglGetDigitalVideoParametersI3D = (PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)load("wglGetDigitalVideoParametersI3D"); - glad_wglSetDigitalVideoParametersI3D = (PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)load("wglSetDigitalVideoParametersI3D"); -} -static void load_WGL_I3D_gamma(GLADloadproc load) { - if(!GLAD_WGL_I3D_gamma) return; - glad_wglGetGammaTableParametersI3D = (PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)load("wglGetGammaTableParametersI3D"); - glad_wglSetGammaTableParametersI3D = (PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)load("wglSetGammaTableParametersI3D"); - glad_wglGetGammaTableI3D = (PFNWGLGETGAMMATABLEI3DPROC)load("wglGetGammaTableI3D"); - glad_wglSetGammaTableI3D = (PFNWGLSETGAMMATABLEI3DPROC)load("wglSetGammaTableI3D"); -} -static void load_WGL_I3D_genlock(GLADloadproc load) { - if(!GLAD_WGL_I3D_genlock) return; - glad_wglEnableGenlockI3D = (PFNWGLENABLEGENLOCKI3DPROC)load("wglEnableGenlockI3D"); - glad_wglDisableGenlockI3D = (PFNWGLDISABLEGENLOCKI3DPROC)load("wglDisableGenlockI3D"); - glad_wglIsEnabledGenlockI3D = (PFNWGLISENABLEDGENLOCKI3DPROC)load("wglIsEnabledGenlockI3D"); - glad_wglGenlockSourceI3D = (PFNWGLGENLOCKSOURCEI3DPROC)load("wglGenlockSourceI3D"); - glad_wglGetGenlockSourceI3D = (PFNWGLGETGENLOCKSOURCEI3DPROC)load("wglGetGenlockSourceI3D"); - glad_wglGenlockSourceEdgeI3D = (PFNWGLGENLOCKSOURCEEDGEI3DPROC)load("wglGenlockSourceEdgeI3D"); - glad_wglGetGenlockSourceEdgeI3D = (PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)load("wglGetGenlockSourceEdgeI3D"); - glad_wglGenlockSampleRateI3D = (PFNWGLGENLOCKSAMPLERATEI3DPROC)load("wglGenlockSampleRateI3D"); - glad_wglGetGenlockSampleRateI3D = (PFNWGLGETGENLOCKSAMPLERATEI3DPROC)load("wglGetGenlockSampleRateI3D"); - glad_wglGenlockSourceDelayI3D = (PFNWGLGENLOCKSOURCEDELAYI3DPROC)load("wglGenlockSourceDelayI3D"); - glad_wglGetGenlockSourceDelayI3D = (PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)load("wglGetGenlockSourceDelayI3D"); - glad_wglQueryGenlockMaxSourceDelayI3D = (PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)load("wglQueryGenlockMaxSourceDelayI3D"); -} -static void load_WGL_I3D_image_buffer(GLADloadproc load) { - if(!GLAD_WGL_I3D_image_buffer) return; - glad_wglCreateImageBufferI3D = (PFNWGLCREATEIMAGEBUFFERI3DPROC)load("wglCreateImageBufferI3D"); - glad_wglDestroyImageBufferI3D = (PFNWGLDESTROYIMAGEBUFFERI3DPROC)load("wglDestroyImageBufferI3D"); - glad_wglAssociateImageBufferEventsI3D = (PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)load("wglAssociateImageBufferEventsI3D"); - glad_wglReleaseImageBufferEventsI3D = (PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)load("wglReleaseImageBufferEventsI3D"); -} -static void load_WGL_I3D_swap_frame_lock(GLADloadproc load) { - if(!GLAD_WGL_I3D_swap_frame_lock) return; - glad_wglEnableFrameLockI3D = (PFNWGLENABLEFRAMELOCKI3DPROC)load("wglEnableFrameLockI3D"); - glad_wglDisableFrameLockI3D = (PFNWGLDISABLEFRAMELOCKI3DPROC)load("wglDisableFrameLockI3D"); - glad_wglIsEnabledFrameLockI3D = (PFNWGLISENABLEDFRAMELOCKI3DPROC)load("wglIsEnabledFrameLockI3D"); - glad_wglQueryFrameLockMasterI3D = (PFNWGLQUERYFRAMELOCKMASTERI3DPROC)load("wglQueryFrameLockMasterI3D"); -} -static void load_WGL_I3D_swap_frame_usage(GLADloadproc load) { - if(!GLAD_WGL_I3D_swap_frame_usage) return; - glad_wglGetFrameUsageI3D = (PFNWGLGETFRAMEUSAGEI3DPROC)load("wglGetFrameUsageI3D"); - glad_wglBeginFrameTrackingI3D = (PFNWGLBEGINFRAMETRACKINGI3DPROC)load("wglBeginFrameTrackingI3D"); - glad_wglEndFrameTrackingI3D = (PFNWGLENDFRAMETRACKINGI3DPROC)load("wglEndFrameTrackingI3D"); - glad_wglQueryFrameTrackingI3D = (PFNWGLQUERYFRAMETRACKINGI3DPROC)load("wglQueryFrameTrackingI3D"); -} -static void load_WGL_NV_DX_interop(GLADloadproc load) { - if(!GLAD_WGL_NV_DX_interop) return; - glad_wglDXSetResourceShareHandleNV = (PFNWGLDXSETRESOURCESHAREHANDLENVPROC)load("wglDXSetResourceShareHandleNV"); - glad_wglDXOpenDeviceNV = (PFNWGLDXOPENDEVICENVPROC)load("wglDXOpenDeviceNV"); - glad_wglDXCloseDeviceNV = (PFNWGLDXCLOSEDEVICENVPROC)load("wglDXCloseDeviceNV"); - glad_wglDXRegisterObjectNV = (PFNWGLDXREGISTEROBJECTNVPROC)load("wglDXRegisterObjectNV"); - glad_wglDXUnregisterObjectNV = (PFNWGLDXUNREGISTEROBJECTNVPROC)load("wglDXUnregisterObjectNV"); - glad_wglDXObjectAccessNV = (PFNWGLDXOBJECTACCESSNVPROC)load("wglDXObjectAccessNV"); - glad_wglDXLockObjectsNV = (PFNWGLDXLOCKOBJECTSNVPROC)load("wglDXLockObjectsNV"); - glad_wglDXUnlockObjectsNV = (PFNWGLDXUNLOCKOBJECTSNVPROC)load("wglDXUnlockObjectsNV"); -} -static void load_WGL_NV_copy_image(GLADloadproc load) { - if(!GLAD_WGL_NV_copy_image) return; - glad_wglCopyImageSubDataNV = (PFNWGLCOPYIMAGESUBDATANVPROC)load("wglCopyImageSubDataNV"); -} -static void load_WGL_NV_delay_before_swap(GLADloadproc load) { - if(!GLAD_WGL_NV_delay_before_swap) return; - glad_wglDelayBeforeSwapNV = (PFNWGLDELAYBEFORESWAPNVPROC)load("wglDelayBeforeSwapNV"); -} -static void load_WGL_NV_gpu_affinity(GLADloadproc load) { - if(!GLAD_WGL_NV_gpu_affinity) return; - glad_wglEnumGpusNV = (PFNWGLENUMGPUSNVPROC)load("wglEnumGpusNV"); - glad_wglEnumGpuDevicesNV = (PFNWGLENUMGPUDEVICESNVPROC)load("wglEnumGpuDevicesNV"); - glad_wglCreateAffinityDCNV = (PFNWGLCREATEAFFINITYDCNVPROC)load("wglCreateAffinityDCNV"); - glad_wglEnumGpusFromAffinityDCNV = (PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)load("wglEnumGpusFromAffinityDCNV"); - glad_wglDeleteDCNV = (PFNWGLDELETEDCNVPROC)load("wglDeleteDCNV"); -} -static void load_WGL_NV_present_video(GLADloadproc load) { - if(!GLAD_WGL_NV_present_video) return; - glad_wglEnumerateVideoDevicesNV = (PFNWGLENUMERATEVIDEODEVICESNVPROC)load("wglEnumerateVideoDevicesNV"); - glad_wglBindVideoDeviceNV = (PFNWGLBINDVIDEODEVICENVPROC)load("wglBindVideoDeviceNV"); - glad_wglQueryCurrentContextNV = (PFNWGLQUERYCURRENTCONTEXTNVPROC)load("wglQueryCurrentContextNV"); -} -static void load_WGL_NV_swap_group(GLADloadproc load) { - if(!GLAD_WGL_NV_swap_group) return; - glad_wglJoinSwapGroupNV = (PFNWGLJOINSWAPGROUPNVPROC)load("wglJoinSwapGroupNV"); - glad_wglBindSwapBarrierNV = (PFNWGLBINDSWAPBARRIERNVPROC)load("wglBindSwapBarrierNV"); - glad_wglQuerySwapGroupNV = (PFNWGLQUERYSWAPGROUPNVPROC)load("wglQuerySwapGroupNV"); - glad_wglQueryMaxSwapGroupsNV = (PFNWGLQUERYMAXSWAPGROUPSNVPROC)load("wglQueryMaxSwapGroupsNV"); - glad_wglQueryFrameCountNV = (PFNWGLQUERYFRAMECOUNTNVPROC)load("wglQueryFrameCountNV"); - glad_wglResetFrameCountNV = (PFNWGLRESETFRAMECOUNTNVPROC)load("wglResetFrameCountNV"); -} -static void load_WGL_NV_vertex_array_range(GLADloadproc load) { - if(!GLAD_WGL_NV_vertex_array_range) return; - glad_wglAllocateMemoryNV = (PFNWGLALLOCATEMEMORYNVPROC)load("wglAllocateMemoryNV"); - glad_wglFreeMemoryNV = (PFNWGLFREEMEMORYNVPROC)load("wglFreeMemoryNV"); -} -static void load_WGL_NV_video_capture(GLADloadproc load) { - if(!GLAD_WGL_NV_video_capture) return; - glad_wglBindVideoCaptureDeviceNV = (PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)load("wglBindVideoCaptureDeviceNV"); - glad_wglEnumerateVideoCaptureDevicesNV = (PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)load("wglEnumerateVideoCaptureDevicesNV"); - glad_wglLockVideoCaptureDeviceNV = (PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)load("wglLockVideoCaptureDeviceNV"); - glad_wglQueryVideoCaptureDeviceNV = (PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)load("wglQueryVideoCaptureDeviceNV"); - glad_wglReleaseVideoCaptureDeviceNV = (PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)load("wglReleaseVideoCaptureDeviceNV"); -} -static void load_WGL_NV_video_output(GLADloadproc load) { - if(!GLAD_WGL_NV_video_output) return; - glad_wglGetVideoDeviceNV = (PFNWGLGETVIDEODEVICENVPROC)load("wglGetVideoDeviceNV"); - glad_wglReleaseVideoDeviceNV = (PFNWGLRELEASEVIDEODEVICENVPROC)load("wglReleaseVideoDeviceNV"); - glad_wglBindVideoImageNV = (PFNWGLBINDVIDEOIMAGENVPROC)load("wglBindVideoImageNV"); - glad_wglReleaseVideoImageNV = (PFNWGLRELEASEVIDEOIMAGENVPROC)load("wglReleaseVideoImageNV"); - glad_wglSendPbufferToVideoNV = (PFNWGLSENDPBUFFERTOVIDEONVPROC)load("wglSendPbufferToVideoNV"); - glad_wglGetVideoInfoNV = (PFNWGLGETVIDEOINFONVPROC)load("wglGetVideoInfoNV"); -} -static void load_WGL_OML_sync_control(GLADloadproc load) { - if(!GLAD_WGL_OML_sync_control) return; - glad_wglGetSyncValuesOML = (PFNWGLGETSYNCVALUESOMLPROC)load("wglGetSyncValuesOML"); - glad_wglGetMscRateOML = (PFNWGLGETMSCRATEOMLPROC)load("wglGetMscRateOML"); - glad_wglSwapBuffersMscOML = (PFNWGLSWAPBUFFERSMSCOMLPROC)load("wglSwapBuffersMscOML"); - glad_wglSwapLayerBuffersMscOML = (PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)load("wglSwapLayerBuffersMscOML"); - glad_wglWaitForMscOML = (PFNWGLWAITFORMSCOMLPROC)load("wglWaitForMscOML"); - glad_wglWaitForSbcOML = (PFNWGLWAITFORSBCOMLPROC)load("wglWaitForSbcOML"); -} -static int find_extensionsWGL(void) { - if (!get_exts()) return 0; - GLAD_WGL_3DFX_multisample = has_ext("WGL_3DFX_multisample"); - GLAD_WGL_3DL_stereo_control = has_ext("WGL_3DL_stereo_control"); - GLAD_WGL_AMD_gpu_association = has_ext("WGL_AMD_gpu_association"); - GLAD_WGL_ARB_buffer_region = has_ext("WGL_ARB_buffer_region"); - GLAD_WGL_ARB_context_flush_control = has_ext("WGL_ARB_context_flush_control"); - GLAD_WGL_ARB_create_context = has_ext("WGL_ARB_create_context"); - GLAD_WGL_ARB_create_context_no_error = has_ext("WGL_ARB_create_context_no_error"); - GLAD_WGL_ARB_create_context_profile = has_ext("WGL_ARB_create_context_profile"); - GLAD_WGL_ARB_create_context_robustness = has_ext("WGL_ARB_create_context_robustness"); - GLAD_WGL_ARB_extensions_string = has_ext("WGL_ARB_extensions_string"); - GLAD_WGL_ARB_framebuffer_sRGB = has_ext("WGL_ARB_framebuffer_sRGB"); - GLAD_WGL_ARB_make_current_read = has_ext("WGL_ARB_make_current_read"); - GLAD_WGL_ARB_multisample = has_ext("WGL_ARB_multisample"); - GLAD_WGL_ARB_pbuffer = has_ext("WGL_ARB_pbuffer"); - GLAD_WGL_ARB_pixel_format = has_ext("WGL_ARB_pixel_format"); - GLAD_WGL_ARB_pixel_format_float = has_ext("WGL_ARB_pixel_format_float"); - GLAD_WGL_ARB_render_texture = has_ext("WGL_ARB_render_texture"); - GLAD_WGL_ARB_robustness_application_isolation = has_ext("WGL_ARB_robustness_application_isolation"); - GLAD_WGL_ARB_robustness_share_group_isolation = has_ext("WGL_ARB_robustness_share_group_isolation"); - GLAD_WGL_ATI_pixel_format_float = has_ext("WGL_ATI_pixel_format_float"); - GLAD_WGL_ATI_render_texture_rectangle = has_ext("WGL_ATI_render_texture_rectangle"); - GLAD_WGL_EXT_colorspace = has_ext("WGL_EXT_colorspace"); - GLAD_WGL_EXT_create_context_es2_profile = has_ext("WGL_EXT_create_context_es2_profile"); - GLAD_WGL_EXT_create_context_es_profile = has_ext("WGL_EXT_create_context_es_profile"); - GLAD_WGL_EXT_depth_float = has_ext("WGL_EXT_depth_float"); - GLAD_WGL_EXT_display_color_table = has_ext("WGL_EXT_display_color_table"); - GLAD_WGL_EXT_extensions_string = has_ext("WGL_EXT_extensions_string"); - GLAD_WGL_EXT_framebuffer_sRGB = has_ext("WGL_EXT_framebuffer_sRGB"); - GLAD_WGL_EXT_make_current_read = has_ext("WGL_EXT_make_current_read"); - GLAD_WGL_EXT_multisample = has_ext("WGL_EXT_multisample"); - GLAD_WGL_EXT_pbuffer = has_ext("WGL_EXT_pbuffer"); - GLAD_WGL_EXT_pixel_format = has_ext("WGL_EXT_pixel_format"); - GLAD_WGL_EXT_pixel_format_packed_float = has_ext("WGL_EXT_pixel_format_packed_float"); - GLAD_WGL_EXT_swap_control = has_ext("WGL_EXT_swap_control"); - GLAD_WGL_EXT_swap_control_tear = has_ext("WGL_EXT_swap_control_tear"); - GLAD_WGL_I3D_digital_video_control = has_ext("WGL_I3D_digital_video_control"); - GLAD_WGL_I3D_gamma = has_ext("WGL_I3D_gamma"); - GLAD_WGL_I3D_genlock = has_ext("WGL_I3D_genlock"); - GLAD_WGL_I3D_image_buffer = has_ext("WGL_I3D_image_buffer"); - GLAD_WGL_I3D_swap_frame_lock = has_ext("WGL_I3D_swap_frame_lock"); - GLAD_WGL_I3D_swap_frame_usage = has_ext("WGL_I3D_swap_frame_usage"); - GLAD_WGL_NV_DX_interop = has_ext("WGL_NV_DX_interop"); - GLAD_WGL_NV_DX_interop2 = has_ext("WGL_NV_DX_interop2"); - GLAD_WGL_NV_copy_image = has_ext("WGL_NV_copy_image"); - GLAD_WGL_NV_delay_before_swap = has_ext("WGL_NV_delay_before_swap"); - GLAD_WGL_NV_float_buffer = has_ext("WGL_NV_float_buffer"); - GLAD_WGL_NV_gpu_affinity = has_ext("WGL_NV_gpu_affinity"); - GLAD_WGL_NV_multigpu_context = has_ext("WGL_NV_multigpu_context"); - GLAD_WGL_NV_multisample_coverage = has_ext("WGL_NV_multisample_coverage"); - GLAD_WGL_NV_present_video = has_ext("WGL_NV_present_video"); - GLAD_WGL_NV_render_depth_texture = has_ext("WGL_NV_render_depth_texture"); - GLAD_WGL_NV_render_texture_rectangle = has_ext("WGL_NV_render_texture_rectangle"); - GLAD_WGL_NV_swap_group = has_ext("WGL_NV_swap_group"); - GLAD_WGL_NV_vertex_array_range = has_ext("WGL_NV_vertex_array_range"); - GLAD_WGL_NV_video_capture = has_ext("WGL_NV_video_capture"); - GLAD_WGL_NV_video_output = has_ext("WGL_NV_video_output"); - GLAD_WGL_OML_sync_control = has_ext("WGL_OML_sync_control"); - free_exts(); - return 1; -} - -static void find_coreWGL(HDC hdc) { - GLADWGLhdc = hdc; -} - -int gladLoadWGLLoader(GLADloadproc load, HDC hdc) { - wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)load("wglGetExtensionsStringARB"); - wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)load("wglGetExtensionsStringEXT"); - if(wglGetExtensionsStringARB == NULL && wglGetExtensionsStringEXT == NULL) return 0; - find_coreWGL(hdc); - - if (!find_extensionsWGL()) return 0; - load_WGL_3DL_stereo_control(load); - load_WGL_AMD_gpu_association(load); - load_WGL_ARB_buffer_region(load); - load_WGL_ARB_create_context(load); - load_WGL_ARB_extensions_string(load); - load_WGL_ARB_make_current_read(load); - load_WGL_ARB_pbuffer(load); - load_WGL_ARB_pixel_format(load); - load_WGL_ARB_render_texture(load); - load_WGL_EXT_display_color_table(load); - load_WGL_EXT_extensions_string(load); - load_WGL_EXT_make_current_read(load); - load_WGL_EXT_pbuffer(load); - load_WGL_EXT_pixel_format(load); - load_WGL_EXT_swap_control(load); - load_WGL_I3D_digital_video_control(load); - load_WGL_I3D_gamma(load); - load_WGL_I3D_genlock(load); - load_WGL_I3D_image_buffer(load); - load_WGL_I3D_swap_frame_lock(load); - load_WGL_I3D_swap_frame_usage(load); - load_WGL_NV_DX_interop(load); - load_WGL_NV_copy_image(load); - load_WGL_NV_delay_before_swap(load); - load_WGL_NV_gpu_affinity(load); - load_WGL_NV_present_video(load); - load_WGL_NV_swap_group(load); - load_WGL_NV_vertex_array_range(load); - load_WGL_NV_video_capture(load); - load_WGL_NV_video_output(load); - load_WGL_OML_sync_control(load); - return 1; -} - diff --git a/third_party/hips b/third_party/hips deleted file mode 160000 index bbe8faf1..00000000 --- a/third_party/hips +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bbe8faf149c4e10aaa45e2454fdb386e4cabf0cb diff --git a/third_party/hydra_core b/third_party/hydra_core deleted file mode 160000 index 1cdb1eda..00000000 --- a/third_party/hydra_core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1cdb1eda5f368481e216416a119c85664e8c72ab diff --git a/third_party/ios_toolchain/ios.toolchain.cmake b/third_party/ios_toolchain/ios.toolchain.cmake deleted file mode 100644 index d8290439..00000000 --- a/third_party/ios_toolchain/ios.toolchain.cmake +++ /dev/null @@ -1,945 +0,0 @@ -# This file is part of the ios-cmake project. It was retrieved from -# https://github.com/leetal/ios-cmake.git, which is a fork of -# https://github.com/gerstrong/ios-cmake.git, which is a fork of -# https://github.com/cristeab/ios-cmake.git, which is a fork of -# https://code.google.com/p/ios-cmake/. Which in turn is based off of -# the Platform/Darwin.cmake and Platform/UnixPaths.cmake files which -# are included with CMake 2.8.4 -# -# The ios-cmake project is licensed under the new BSD license. -# -# Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software, -# Kitware, Inc., Insight Software Consortium. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -# This file is based off of the Platform/Darwin.cmake and -# Platform/UnixPaths.cmake files which are included with CMake 2.8.4 -# It has been altered for iOS development. -# -# Updated by Alex Stewart (alexs.mac@gmail.com) -# -# ***************************************************************************** -# Now maintained by Alexander Widerberg (widerbergaren [at] gmail.com) -# under the BSD-3-Clause license -# https://github.com/leetal/ios-cmake -# ***************************************************************************** -# -# INFORMATION / HELP -# -# The following options control the behaviour of this toolchain: -# -# PLATFORM: (default "OS64") -# OS = Build for iPhoneOS. -# OS64 = Build for arm64 iphoneOS. -# OS64COMBINED = Build for arm64 x86_64 iphoneOS. Combined into FAT STATIC lib (supported on 3.14+ of CMakewith "-G Xcode" argument ONLY) -# SIMULATOR = Build for x86 i386 iphoneOS Simulator. -# SIMULATOR64 = Build for x86_64 iphoneOS Simulator. -# SIMULATORARM64 = Build for arm64 iphoneOS Simulator. -# TVOS = Build for arm64 tvOS. -# TVOSCOMBINED = Build for arm64 x86_64 tvOS. Combined into FAT STATIC lib (supported on 3.14+ of CMake with "-G Xcode" argument ONLY) -# SIMULATOR_TVOS = Build for x86_64 tvOS Simulator. -# WATCHOS = Build for armv7k arm64_32 for watchOS. -# WATCHOSCOMBINED = Build for armv7k arm64_32 x86_64 watchOS. Combined into FAT STATIC lib (supported on 3.14+ of CMake with "-G Xcode" argument ONLY) -# SIMULATOR_WATCHOS = Build for x86_64 for watchOS Simulator. -# MAC = Build for x86_64 macOS. -# MAC_ARM64 = Build for Apple Silicon macOS. -# MAC_CATALYST = Build for x86_64 macOS with Catalyst support (iOS toolchain on macOS). -# Note: The build argument "MACOSX_DEPLOYMENT_TARGET" can be used to control min-version of macOS -# MAC_CATALYST_ARM64 = Build for Apple Silicon macOS with Catalyst support (iOS toolchain on macOS). -# Note: The build argument "MACOSX_DEPLOYMENT_TARGET" can be used to control min-version of macOS -# -# CMAKE_OSX_SYSROOT: Path to the SDK to use. By default this is -# automatically determined from PLATFORM and xcodebuild, but -# can also be manually specified (although this should not be required). -# -# CMAKE_DEVELOPER_ROOT: Path to the Developer directory for the platform -# being compiled for. By default this is automatically determined from -# CMAKE_OSX_SYSROOT, but can also be manually specified (although this should -# not be required). -# -# DEPLOYMENT_TARGET: Minimum SDK version to target. Default 2.0 on watchOS and 9.0 on tvOS+iOS -# -# ENABLE_BITCODE: (1|0) Enables or disables bitcode support. Default 1 (true) -# -# ENABLE_ARC: (1|0) Enables or disables ARC support. Default 1 (true, ARC enabled by default) -# -# ENABLE_VISIBILITY: (1|0) Enables or disables symbol visibility support. Default 0 (false, visibility hidden by default) -# -# ENABLE_STRICT_TRY_COMPILE: (1|0) Enables or disables strict try_compile() on all Check* directives (will run linker -# to actually check if linking is possible). Default 0 (false, will set CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY) -# -# ARCHS: (armv7 armv7s armv7k arm64 arm64_32 i386 x86_64) If specified, will override the default architectures for the given PLATFORM -# OS = armv7 armv7s arm64 (if applicable) -# OS64 = arm64 (if applicable) -# SIMULATOR = i386 -# SIMULATOR64 = x86_64 -# SIMULATORARM64 = arm64 -# TVOS = arm64 -# SIMULATOR_TVOS = x86_64 (i386 has since long been deprecated) -# WATCHOS = armv7k arm64_32 (if applicable) -# SIMULATOR_WATCHOS = x86_64 (i386 has since long been deprecated) -# MAC = x86_64 -# MAC_ARM64 = arm64 -# MAC_CATALYST = x86_64 -# MAC_CATALYST_ARM64 = arm64 -# -# This toolchain defines the following properties (available via get_property()) for use externally: -# -# PLATFORM: The currently targeted platform. -# XCODE_VERSION: Version number (not including Build version) of Xcode detected. -# SDK_VERSION: Version of SDK being used. -# OSX_ARCHITECTURES: Architectures being compiled for (generated from PLATFORM). -# APPLE_TARGET_TRIPLE: Used by autoconf build systems. NOTE: If "ARCHS" are overridden, this will *NOT* be set! -# -# This toolchain defines the following macros for use externally: -# -# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT) -# A convenience macro for setting xcode specific properties on targets. -# Available variants are: All, Release, RelWithDebInfo, Debug, MinSizeRel -# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1" "all"). -# -# find_host_package (PROGRAM ARGS) -# A macro used to find executable programs on the host system, not within the -# environment. Thanks to the android-cmake project for providing the -# command. -# - -cmake_minimum_required(VERSION 3.8.0) - -# CMake invokes the toolchain file twice during the first build, but only once during subsequent rebuilds. -if(DEFINED ENV{_IOS_TOOLCHAIN_HAS_RUN}) - return() -endif() -set(ENV{_IOS_TOOLCHAIN_HAS_RUN} true) - -############################################################################### -# OPTIONS # -############################################################################### - -option(DROP_32_BIT "Drops the 32-bit targets universally." YES) - -############################################################################### -# END OPTIONS # -############################################################################### - -# List of supported platform values -list(APPEND _supported_platforms - "OS" "OS64" "OS64COMBINED" "SIMULATOR" "SIMULATOR64" "SIMULATORARM64" - "TVOS" "TVOSCOMBINED" "SIMULATOR_TVOS" - "WATCHOS" "WATCHOSCOMBINED" "SIMULATOR_WATCHOS" - "MAC" "MAC_ARM64" - "MAC_CATALYST" "MAC_CATALYST_ARM64") - -# Cache what generator is used -set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}") - -# Check if using a CMake version capable of building combined FAT builds (simulator and target slices combined in one static lib) -if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14") - set(MODERN_CMAKE YES) -endif() - -# Get the Xcode version being used. -# Problem: CMake runs toolchain files multiple times, but can't read cache variables on some runs. -# Workaround: On first run (in which cache variables are always accessible), set an intermediary environment variable. -# -# NOTE: This pattern is used i many places in this toolchain to speed up checks of all sorts -if(DEFINED XCODE_VERSION_INT) - # Environment variables are always preserved. - set(ENV{_XCODE_VERSION_INT} "${XCODE_VERSION_INT}") -elseif(DEFINED ENV{_XCODE_VERSION_INT}) - set(XCODE_VERSION_INT "$ENV{_XCODE_VERSION_INT}") -elseif(NOT DEFINED XCODE_VERSION_INT) - find_program(XCODEBUILD_EXECUTABLE xcodebuild) - if(NOT XCODEBUILD_EXECUTABLE) - message(FATAL_ERROR "xcodebuild not found. Please install either the standalone commandline tools or Xcode.") - endif() - execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version - OUTPUT_VARIABLE XCODE_VERSION_INT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION_INT "${XCODE_VERSION_INT}") - string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION_INT "${XCODE_VERSION_INT}") - set(XCODE_VERSION_INT "${XCODE_VERSION_INT}" CACHE INTERNAL "") -endif() - -# Assuming that xcode 12.0 is installed you most probably have ios sdk 14.0 or later installed (tested on Big Sur) -# if you don't set a deployment target it will be set the way you only get 64-bit builds -if(NOT DEFINED DEPLOYMENT_TARGET AND XCODE_VERSION_INT VERSION_GREATER 12.0) - # Temporarily fix the arm64 issues in CMake install-combined by excluding arm64 for simulator builds (needed for Apple Silicon...) - set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64") -endif() - -# Check if the platform variable is set -if(DEFINED PLATFORM) - # Environment variables are always preserved. - set(ENV{_PLATFORM} "${PLATFORM}") -elseif(DEFINED ENV{_PLATFORM}) - set(PLATFORM "$ENV{_PLATFORM}") -elseif(NOT DEFINED PLATFORM) - message(FATAL_ERROR "PLATFORM argument not set. Bailing configure since I don't know what target you want to build for!") -endif () - -if(PLATFORM MATCHES ".*COMBINED" AND NOT CMAKE_GENERATOR MATCHES "Xcode") - message(FATAL_ERROR "The combined builds support requires Xcode to be used as generator via '-G Xcode' command-line argument in CMake") -endif() - -# Safeguard that the platform value is set and is one of the supported values -list(FIND _supported_platforms ${PLATFORM} contains_PLATFORM) -if("${contains_PLATFORM}" EQUAL "-1") - string(REPLACE ";" "\n * " _supported_platforms_formatted "${_supported_platforms}") - message(FATAL_ERROR " Invalid PLATFORM specified! Current value: ${PLATFORM}.\n" - " Supported PLATFORM values: \n * ${_supported_platforms_formatted}") -endif() - -# Check if Apple Silicon is supported -if(PLATFORM MATCHES "^(MAC_ARM64)$|^(MAC_CATALYST_ARM64)$" AND ${CMAKE_VERSION} VERSION_LESS "3.19.5") - message(FATAL_ERROR "Apple Silicon builds requires a minimum of CMake 3.19.5") -endif() - -# Touch toolchain variable to suppress "unused variable" warning. -# This happens if CMake is invoked with the same command line the second time. -if(CMAKE_TOOLCHAIN_FILE) -endif() - -# Fix for PThread library not in path -set(CMAKE_THREAD_LIBS_INIT "-lpthread") -set(CMAKE_HAVE_THREADS_LIBRARY 1) -set(CMAKE_USE_WIN32_THREADS_INIT 0) -set(CMAKE_USE_PTHREADS_INIT 1) - -# Specify minimum version of deployment target. -if(NOT DEFINED DEPLOYMENT_TARGET) - if (PLATFORM MATCHES "WATCHOS") - # Unless specified, SDK version 4.0 is used by default as minimum target version (watchOS). - set(DEPLOYMENT_TARGET "4.0") - elseif(PLATFORM STREQUAL "MAC") - # Unless specified, SDK version 10.13 (High sierra) is used by default as minimum target version (macos). - set(DEPLOYMENT_TARGET "10.13") - elseif(PLATFORM STREQUAL "MAC_ARM64") - # Unless specified, SDK version 11.0 (Big Sur) is used by default as minimum target version (macos on arm). - set(DEPLOYMENT_TARGET "11.0") - elseif(PLATFORM STREQUAL "MAC_CATALYST" OR PLATFORM STREQUAL "MAC_CATALYST_ARM64") - # Unless specified, SDK version 13.0 is used by default as minimum target version (mac catalyst minimum requirement). - set(DEPLOYMENT_TARGET "13.0") - else() - # Unless specified, SDK version 11.0 is used by default as minimum target version (iOS, tvOS). - set(DEPLOYMENT_TARGET "11.0") - endif() - message(STATUS "[DEFAULTS] Using the default min-version since DEPLOYMENT_TARGET not provided!") -elseif(DEFINED DEPLOYMENT_TARGET AND PLATFORM MATCHES "^MAC_CATALYST" AND ${DEPLOYMENT_TARGET} VERSION_LESS "13.0") - message(FATAL_ERROR "Mac Catalyst builds requires a minimum deployment target of 13.0!") -endif() - -# Store the DEPLOYMENT_TARGET in the cache -set(DEPLOYMENT_TARGET "${DEPLOYMENT_TARGET}" CACHE INTERNAL "") - -# Handle the case where we are targeting iOS and a version above 10.3.4 (32-bit support dropped officially) -if(PLATFORM STREQUAL "OS" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4) - set(PLATFORM "OS64") - message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.") -elseif(PLATFORM STREQUAL "SIMULATOR" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4) - set(PLATFORM "SIMULATOR64") - message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.") -endif() - -set(PLATFORM_INT "${PLATFORM}") - -if(DEFINED ARCHS) - string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}") -endif() - -# Determine the platform name and architectures for use in xcodebuild commands -# from the specified PLATFORM_INT name. -if(PLATFORM_INT STREQUAL "OS") - set(SDK_NAME iphoneos) - if(NOT ARCHS) - set(ARCHS armv7 armv7s arm64) - set(APPLE_TARGET_TRIPLE_INT arm-apple-ios$${DEPLOYMENT_TARGET}) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}) - endif() -elseif(PLATFORM_INT STREQUAL "OS64") - set(SDK_NAME iphoneos) - if(NOT ARCHS) - if (XCODE_VERSION_INT VERSION_GREATER 10.0) - set(ARCHS arm64) # Add arm64e when Apple have fixed the integration issues with it, libarclite_iphoneos.a is currently missung bitcode markers for example - else() - set(ARCHS arm64) - endif() - set(APPLE_TARGET_TRIPLE_INT aarch64-apple-ios${DEPLOYMENT_TARGET}) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}) - endif() -elseif(PLATFORM_INT STREQUAL "OS64COMBINED") - set(SDK_NAME iphoneos) - if(MODERN_CMAKE) - if(NOT ARCHS) - if (XCODE_VERSION_INT VERSION_GREATER 10.0) - set(ARCHS arm64 x86_64) # Add arm64e when Apple have fixed the integration issues with it, libarclite_iphoneos.a is currently missung bitcode markers for example - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64") - else() - set(ARCHS arm64 x86_64) - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64") - endif() - set(APPLE_TARGET_TRIPLE_INT aarch64-x86_64-apple-ios${DEPLOYMENT_TARGET}) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}) - endif() - else() - message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the OS64COMBINED setting work") - endif() -elseif(PLATFORM_INT STREQUAL "SIMULATOR") - set(SDK_NAME iphonesimulator) - if(NOT ARCHS) - set(ARCHS i386) - set(APPLE_TARGET_TRIPLE_INT i386-apple-ios${DEPLOYMENT_TARGET}-simulator) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator) - endif() - message(DEPRECATION "SIMULATOR IS DEPRECATED. Consider using SIMULATOR64 instead.") -elseif(PLATFORM_INT STREQUAL "SIMULATOR64") - set(SDK_NAME iphonesimulator) - if(NOT ARCHS) - set(ARCHS x86_64) - set(APPLE_TARGET_TRIPLE_INT x86_64-apple-ios${DEPLOYMENT_TARGET}-simulator) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator) - endif() -elseif(PLATFORM_INT STREQUAL "SIMULATORARM64") - set(SDK_NAME iphonesimulator) - if(NOT ARCHS) - set(ARCHS arm64) - set(APPLE_TARGET_TRIPLE_INT aarch64-apple-ios${DEPLOYMENT_TARGET}-simulator) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator) - endif() -elseif(PLATFORM_INT STREQUAL "TVOS") - set(SDK_NAME appletvos) - if(NOT ARCHS) - set(ARCHS arm64) - set(APPLE_TARGET_TRIPLE_INT aarch64-apple-tvos${DEPLOYMENT_TARGET}) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET}) - endif() -elseif (PLATFORM_INT STREQUAL "TVOSCOMBINED") - set(SDK_NAME appletvos) - if(MODERN_CMAKE) - if(NOT ARCHS) - set(ARCHS arm64 x86_64) - set(APPLE_TARGET_TRIPLE_INT aarch64-x86_64-apple-tvos${DEPLOYMENT_TARGET}) - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=appletvos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=appletvsimulator*] "x86_64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=appletvos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=appletvsimulator*] "x86_64") - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET}) - endif() - else() - message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the TVOSCOMBINED setting work") - endif() -elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS") - set(SDK_NAME appletvsimulator) - if(NOT ARCHS) - set(ARCHS x86_64) - set(APPLE_TARGET_TRIPLE_INT x86_64-apple-tvos${DEPLOYMENT_TARGET}-simulator) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET}-simulator) - endif() -elseif(PLATFORM_INT STREQUAL "WATCHOS") - set(SDK_NAME watchos) - if(NOT ARCHS) - if (XCODE_VERSION_INT VERSION_GREATER 10.0) - set(ARCHS armv7k arm64_32) - set(APPLE_TARGET_TRIPLE_INT aarch64_32-apple-watchos${DEPLOYMENT_TARGET}) - else() - set(ARCHS armv7k) - set(APPLE_TARGET_TRIPLE_INT arm-apple-watchos${DEPLOYMENT_TARGET}) - endif() - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}) - endif() -elseif(PLATFORM_INT STREQUAL "WATCHOSCOMBINED") - set(SDK_NAME watchos) - if(MODERN_CMAKE) - if(NOT ARCHS) - if (XCODE_VERSION_INT VERSION_GREATER 10.0) - set(ARCHS armv7k arm64_32 i386) - set(APPLE_TARGET_TRIPLE_INT aarch64_32-i386-apple-watchos${DEPLOYMENT_TARGET}) - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "armv7k arm64_32") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "armv7k arm64_32") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386") - else() - set(ARCHS armv7k i386) - set(APPLE_TARGET_TRIPLE_INT arm-i386-apple-watchos${DEPLOYMENT_TARGET}) - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "armv7k") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "armv7k") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386") - endif() - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}) - endif() - else() - message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the WATCHOSCOMBINED setting work") - endif() -elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS") - set(SDK_NAME watchsimulator) - if(NOT ARCHS) - set(ARCHS i386) - set(APPLE_TARGET_TRIPLE_INT i386-apple-watchos${DEPLOYMENT_TARGET}-simulator) - else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator) - endif() -elseif(PLATFORM_INT STREQUAL "MAC" OR PLATFORM_INT STREQUAL "MAC_CATALYST") - set(SDK_NAME macosx) - if(NOT ARCHS) - set(ARCHS x86_64) - endif() - string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}") - if(PLATFORM_INT STREQUAL "MAC") - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET}) - elseif(PLATFORM_INT STREQUAL "MAC_CATALYST") - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-macabi) - endif() -elseif(PLATFORM_INT MATCHES "^(MAC_ARM64)$|^(MAC_CATALYST_ARM64)$") - set(SDK_NAME macosx) - if(NOT ARCHS) - set(ARCHS arm64) - endif() - string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}") - if(PLATFORM_INT STREQUAL "MAC_ARM64") - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET}) - elseif(PLATFORM_INT STREQUAL "MAC_CATALYST_ARM64") - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-macabi) - endif() -else() - message(FATAL_ERROR "Invalid PLATFORM: ${PLATFORM_INT}") -endif() - -if(MODERN_CMAKE AND PLATFORM_INT MATCHES ".*COMBINED" AND NOT CMAKE_GENERATOR MATCHES "Xcode") - message(FATAL_ERROR "The COMBINED options only work with Xcode generator, -G Xcode") -endif() - -if(CMAKE_GENERATOR MATCHES "Xcode" AND PLATFORM_INT MATCHES "^MAC_CATALYST") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") - set(CMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS "macosx") - set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-maccatalyst") - if(NOT DEFINED MACOSX_DEPLOYMENT_TARGET) - set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "10.15") - else() - set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "${MACOSX_DEPLOYMENT_TARGET}") - endif() -elseif(CMAKE_GENERATOR MATCHES "Xcode") - set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${DEPLOYMENT_TARGET}") - if(NOT PLATFORM_INT MATCHES ".*COMBINED") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=${SDK_NAME}*] "${ARCHS}") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=${SDK_NAME}*] "${ARCHS}") - endif() -endif() - -# If user did not specify the SDK root to use, then query xcodebuild for it. -if(DEFINED CMAKE_OSX_SYSROOT_INT) - # Environment variables are always preserved. - set(ENV{_CMAKE_OSX_SYSROOT_INT} "${CMAKE_OSX_SYSROOT_INT}") -elseif(DEFINED ENV{_CMAKE_OSX_SYSROOT_INT}) - set(CMAKE_OSX_SYSROOT_INT "$ENV{_CMAKE_OSX_SYSROOT_INT}") -elseif(NOT DEFINED CMAKE_OSX_SYSROOT_INT) - execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk ${SDK_NAME} Path - OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_INT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() - -if (NOT DEFINED CMAKE_OSX_SYSROOT_INT AND NOT DEFINED CMAKE_OSX_SYSROOT) - message(SEND_ERROR "Please make sure that Xcode is installed and that the toolchain" - "is pointing to the correct path. Please run:" - "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer" - "and see if that fixes the problem for you.") - message(FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} " - "does not exist.") -elseif(DEFINED CMAKE_OSX_SYSROOT_INT) - set(CMAKE_OSX_SYSROOT_INT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "") - # Specify the location or name of the platform SDK to be used in CMAKE_OSX_SYSROOT. - set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "") -endif() - -# Use bitcode or not -if(NOT DEFINED ENABLE_BITCODE AND NOT ARCHS MATCHES "((^|;|, )(i386|x86_64))+") - # Unless specified, enable bitcode support by default - message(STATUS "[DEFAULTS] Enabling bitcode support by default. ENABLE_BITCODE not provided!") - set(ENABLE_BITCODE TRUE) -elseif(NOT DEFINED ENABLE_BITCODE) - message(STATUS "[DEFAULTS] Disabling bitcode support by default on simulators. ENABLE_BITCODE not provided for override!") - set(ENABLE_BITCODE FALSE) -endif() -set(ENABLE_BITCODE_INT ${ENABLE_BITCODE} CACHE BOOL - "Whether or not to enable bitcode" FORCE) -# Use ARC or not -if(NOT DEFINED ENABLE_ARC) - # Unless specified, enable ARC support by default - set(ENABLE_ARC TRUE) - message(STATUS "[DEFAULTS] Enabling ARC support by default. ENABLE_ARC not provided!") -endif() -set(ENABLE_ARC_INT ${ENABLE_ARC} CACHE BOOL "Whether or not to enable ARC" FORCE) -# Use hidden visibility or not -if(NOT DEFINED ENABLE_VISIBILITY) - # Unless specified, disable symbols visibility by default - set(ENABLE_VISIBILITY FALSE) - message(STATUS "[DEFAULTS] Hiding symbols visibility by default. ENABLE_VISIBILITY not provided!") -endif() -set(ENABLE_VISIBILITY_INT ${ENABLE_VISIBILITY} CACHE BOOL "Whether or not to hide symbols from the dynamic linker (-fvisibility=hidden)" FORCE) -# Set strict compiler checks or not -if(NOT DEFINED ENABLE_STRICT_TRY_COMPILE) - # Unless specified, disable strict try_compile() - set(ENABLE_STRICT_TRY_COMPILE FALSE) - message(STATUS "[DEFAULTS] Using NON-strict compiler checks by default. ENABLE_STRICT_TRY_COMPILE not provided!") -endif() -set(ENABLE_STRICT_TRY_COMPILE_INT ${ENABLE_STRICT_TRY_COMPILE} CACHE BOOL - "Whether or not to use strict compiler checks" FORCE) - -# Get the SDK version information. -if(DEFINED SDK_VERSION) - # Environment variables are always preserved. - set(ENV{_SDK_VERSION} "${SDK_VERSION}") -elseif(DEFINED ENV{_SDK_VERSION}) - set(SDK_VERSION "$ENV{_SDK_VERSION}") -elseif(NOT DEFINED SDK_VERSION) - execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -sdk ${CMAKE_OSX_SYSROOT_INT} -version SDKVersion - OUTPUT_VARIABLE SDK_VERSION - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() - -# Find the Developer root for the specific iOS platform being compiled for -# from CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in -# CMAKE_OSX_SYSROOT. There does not appear to be a direct way to obtain -# this information from xcrun or xcodebuild. -if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT CMAKE_GENERATOR MATCHES "Xcode") - get_filename_component(PLATFORM_SDK_DIR ${CMAKE_OSX_SYSROOT_INT} PATH) - get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH) - if (NOT EXISTS "${CMAKE_DEVELOPER_ROOT}") - message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: ${CMAKE_DEVELOPER_ROOT} does not exist.") - endif() -endif() - -# Find the C & C++ compilers for the specified SDK. -if(DEFINED CMAKE_C_COMPILER) - # Environment variables are always preserved. - set(ENV{_CMAKE_C_COMPILER} "${CMAKE_C_COMPILER}") -elseif(DEFINED ENV{_CMAKE_C_COMPILER}) - set(CMAKE_C_COMPILER "$ENV{_CMAKE_C_COMPILER}") - set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) -elseif(NOT DEFINED CMAKE_C_COMPILER) - execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find clang - OUTPUT_VARIABLE CMAKE_C_COMPILER - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) -endif() -if(DEFINED CMAKE_CXX_COMPILER) - # Environment variables are always preserved. - set(ENV{_CMAKE_CXX_COMPILER} "${CMAKE_CXX_COMPILER}") -elseif(DEFINED ENV{_CMAKE_CXX_COMPILER}) - set(CMAKE_CXX_COMPILER "$ENV{_CMAKE_CXX_COMPILER}") -elseif(NOT DEFINED CMAKE_CXX_COMPILER) - execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find clang++ - OUTPUT_VARIABLE CMAKE_CXX_COMPILER - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() -# Find (Apple's) libtool. -if(DEFINED BUILD_LIBTOOL) - # Environment variables are always preserved. - set(ENV{_BUILD_LIBTOOL} "${BUILD_LIBTOOL}") -elseif(DEFINED ENV{_BUILD_LIBTOOL}) - set(BUILD_LIBTOOL "$ENV{_BUILD_LIBTOOL}") -elseif(NOT DEFINED BUILD_LIBTOOL) - execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find libtool - OUTPUT_VARIABLE BUILD_LIBTOOL - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() -# Find the toolchain's provided install_name_tool if none is found on the host -if(DEFINED CMAKE_INSTALL_NAME_TOOL) - # Environment variables are always preserved. - set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}") -elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL}) - set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}") -elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) - execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find install_name_tool - OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "") -endif() - -# Configure libtool to be used instead of ar + ranlib to build static libraries. -# This is required on Xcode 7+, but should also work on previous versions of -# Xcode. -get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) -foreach(lang ${languages}) - set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o " CACHE INTERNAL "") -endforeach() - -# CMake 3.14+ support building for iOS, watchOS and tvOS out of the box. -if(MODERN_CMAKE) - if(SDK_NAME MATCHES "iphone") - set(CMAKE_SYSTEM_NAME iOS) - elseif(SDK_NAME MATCHES "macosx") - set(CMAKE_SYSTEM_NAME Darwin) - elseif(SDK_NAME MATCHES "appletv") - set(CMAKE_SYSTEM_NAME tvOS) - elseif(SDK_NAME MATCHES "watch") - set(CMAKE_SYSTEM_NAME watchOS) - endif() - # Provide flags for a combined FAT library build on newer CMake versions - if(PLATFORM_INT MATCHES ".*COMBINED") - set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") - set(CMAKE_IOS_INSTALL_COMBINED YES) - message(STATUS "Will combine built (static) artifacts into FAT lib...") - endif() -elseif(NOT DEFINED CMAKE_SYSTEM_NAME AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.10") - # Legacy code path prior to CMake 3.14 or fallback if no CMAKE_SYSTEM_NAME specified - set(CMAKE_SYSTEM_NAME iOS) -elseif(NOT DEFINED CMAKE_SYSTEM_NAME) - # Legacy code path prior to CMake 3.14 or fallback if no CMAKE_SYSTEM_NAME specified - set(CMAKE_SYSTEM_NAME Darwin) -endif() -# Standard settings. -set(CMAKE_SYSTEM_VERSION ${SDK_VERSION} CACHE INTERNAL "") -set(UNIX TRUE CACHE BOOL "") -set(APPLE TRUE CACHE BOOL "") -if(PLATFORM STREQUAL "MAC" OR PLATFORM STREQUAL "MAC_ARM64") - set(IOS FALSE CACHE BOOL "") - set(MACOS TRUE CACHE BOOL "") -elseif(PLATFORM STREQUAL "MAC_CATALYST" OR PLATFORM STREQUAL "MAC_CATALYST_ARM64") - set(IOS TRUE CACHE BOOL "") - set(MACOS TRUE CACHE BOOL "") -else() - set(IOS TRUE CACHE BOOL "") -endif() -set(CMAKE_AR ar CACHE FILEPATH "" FORCE) -set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE) -set(CMAKE_STRIP strip CACHE FILEPATH "" FORCE) -# Set the architectures for which to build. -set(CMAKE_OSX_ARCHITECTURES ${ARCHS} CACHE INTERNAL "") -# Change the type of target generated for try_compile() so it'll work when cross-compiling, weak compiler checks -if(NOT ENABLE_STRICT_TRY_COMPILE_INT) - set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -endif() -# All iOS/Darwin specific settings - some may be redundant. -set(CMAKE_MACOSX_BUNDLE YES) -set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") -set(CMAKE_SHARED_LIBRARY_PREFIX "lib") -set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") -set(CMAKE_SHARED_MODULE_PREFIX "lib") -set(CMAKE_SHARED_MODULE_SUFFIX ".so") -set(CMAKE_C_COMPILER_ABI ELF) -set(CMAKE_CXX_COMPILER_ABI ELF) -set(CMAKE_C_HAS_ISYSROOT 1) -set(CMAKE_CXX_HAS_ISYSROOT 1) -set(CMAKE_MODULE_EXISTS 1) -set(CMAKE_DL_LIBS "") -set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") -set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") -set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") -set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") - -if(ARCHS MATCHES "((^|;|, )(arm64|arm64e|x86_64))+") - set(CMAKE_C_SIZEOF_DATA_PTR 8) - set(CMAKE_CXX_SIZEOF_DATA_PTR 8) - if(ARCHS MATCHES "((^|;|, )(arm64|arm64e))+") - set(CMAKE_SYSTEM_PROCESSOR "aarch64") - else() - set(CMAKE_SYSTEM_PROCESSOR "x86_64") - endif() -else() - set(CMAKE_C_SIZEOF_DATA_PTR 4) - set(CMAKE_CXX_SIZEOF_DATA_PTR 4) - set(CMAKE_SYSTEM_PROCESSOR "arm") -endif() - -# Note that only Xcode 7+ supports the newer more specific: -# -m${SDK_NAME}-version-min flags, older versions of Xcode use: -# -m(ios/ios-simulator)-version-min instead. -if(${CMAKE_VERSION} VERSION_LESS "3.11") - if(PLATFORM_INT STREQUAL "OS" OR PLATFORM_INT STREQUAL "OS64") - if(XCODE_VERSION_INT VERSION_LESS 7.0) - set(SDK_NAME_VERSION_FLAGS - "-mios-version-min=${DEPLOYMENT_TARGET}") - else() - # Xcode 7.0+ uses flags we can build directly from SDK_NAME. - set(SDK_NAME_VERSION_FLAGS - "-m${SDK_NAME}-version-min=${DEPLOYMENT_TARGET}") - endif() - elseif(PLATFORM_INT STREQUAL "TVOS") - set(SDK_NAME_VERSION_FLAGS - "-mtvos-version-min=${DEPLOYMENT_TARGET}") - elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS") - set(SDK_NAME_VERSION_FLAGS - "-mtvos-simulator-version-min=${DEPLOYMENT_TARGET}") - elseif(PLATFORM_INT STREQUAL "WATCHOS") - set(SDK_NAME_VERSION_FLAGS - "-mwatchos-version-min=${DEPLOYMENT_TARGET}") - elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS") - set(SDK_NAME_VERSION_FLAGS - "-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET}") - elseif(PLATFORM_INT STREQUAL "MAC") - set(SDK_NAME_VERSION_FLAGS - "-mmacosx-version-min=${DEPLOYMENT_TARGET}") - else() - # SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min. - set(SDK_NAME_VERSION_FLAGS - "-mios-simulator-version-min=${DEPLOYMENT_TARGET}") - endif() -elseif(NOT PLATFORM_INT MATCHES "^MAC_CATALYST") - # Newer versions of CMake sets the version min flags correctly, skip this for Mac Catalyst targets - set(CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET}) -endif() - -if(DEFINED APPLE_TARGET_TRIPLE_INT) - set(APPLE_TARGET_TRIPLE ${APPLE_TARGET_TRIPLE_INT} CACHE INTERNAL "") - set(CMAKE_C_COMPILER_TARGET ${APPLE_TARGET_TRIPLE}) - set(CMAKE_CXX_COMPILER_TARGET ${APPLE_TARGET_TRIPLE}) - set(CMAKE_ASM_COMPILER_TARGET ${APPLE_TARGET_TRIPLE}) -endif() - -if(PLATFORM_INT MATCHES "^MAC_CATALYST") - set(C_TARGET_FLAGS "-isystem ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/usr/include -iframework ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/System/Library/Frameworks") -endif() - -if(ENABLE_BITCODE_INT) - set(BITCODE "-fembed-bitcode") - set(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode") - set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES") -else() - set(BITCODE "") - set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO") -endif() - -if(ENABLE_ARC_INT) - set(FOBJC_ARC "-fobjc-arc") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES") -else() - set(FOBJC_ARC "-fno-objc-arc") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "NO") -endif() - -if(NOT ENABLE_VISIBILITY_INT) - foreach(lang ${languages}) - set(CMAKE_${lang}_VISIBILITY_PRESET "hidden" CACHE INTERNAL "") - endforeach() - set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "YES") - set(VISIBILITY "-fvisibility=hidden -fvisibility-inlines-hidden") -else() - foreach(lang ${languages}) - set(CMAKE_${lang}_VISIBILITY_PRESET "default" CACHE INTERNAL "") - endforeach() - set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "NO") - set(VISIBILITY "-fvisibility=default") -endif() - -if(DEFINED APPLE_TARGET_TRIPLE) - set(APPLE_TARGET_TRIPLE_FLAG "-target ${APPLE_TARGET_TRIPLE}") -endif() - -#Check if Xcode generator is used, since that will handle these flags automagically -if(CMAKE_GENERATOR MATCHES "Xcode") - message(STATUS "Not setting any manual command-line buildflags, since Xcode is selected as generator.") -else() - # Hidden visibility is required for C++ on iOS. - set(CMAKE_C_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_CXX_FLAGS}") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -g ${CMAKE_CXX_FLAGS_DEBUG}") - set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} -DNDEBUG -Os ${CMAKE_CXX_FLAGS_MINSIZEREL}") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -DNDEBUG -O2 -g ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 ${CMAKE_CXX_FLAGS_RELEASE}") - set(CMAKE_C_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") - set(CMAKE_CXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") - set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -arch ${CMAKE_OSX_ARCHITECTURES} ${APPLE_TARGET_TRIPLE_FLAG}") -endif() - -## Print status messages to inform of the current state -message(STATUS "Configuring ${SDK_NAME} build for platform: ${PLATFORM_INT}, architecture(s): ${ARCHS}") -message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT_INT}") -message(STATUS "Using C compiler: ${CMAKE_C_COMPILER}") -message(STATUS "Using CXX compiler: ${CMAKE_CXX_COMPILER}") -message(STATUS "Using libtool: ${BUILD_LIBTOOL}") -message(STATUS "Using install name tool: ${CMAKE_INSTALL_NAME_TOOL}") -if(DEFINED APPLE_TARGET_TRIPLE) - message(STATUS "Autoconf target triple: ${APPLE_TARGET_TRIPLE}") -endif() -message(STATUS "Using minimum deployment version: ${DEPLOYMENT_TARGET}" - " (SDK version: ${SDK_VERSION})") -if(MODERN_CMAKE) - message(STATUS "Merging integrated CMake 3.14+ iOS,tvOS,watchOS,macOS toolchain(s) with this toolchain!") -endif() -if(CMAKE_GENERATOR MATCHES "Xcode") - message(STATUS "Using Xcode version: ${XCODE_VERSION_INT}") -endif() -message(STATUS "CMake version: ${CMAKE_VERSION}") -if(DEFINED SDK_NAME_VERSION_FLAGS) - message(STATUS "Using version flags: ${SDK_NAME_VERSION_FLAGS}") -endif() -message(STATUS "Using a data_ptr size of: ${CMAKE_CXX_SIZEOF_DATA_PTR}") -if(ENABLE_BITCODE_INT) - message(STATUS "Bitcode: Enabled") -else() - message(STATUS "Bitcode: Disabled") -endif() - -if(ENABLE_ARC_INT) - message(STATUS "ARC: Enabled") -else() - message(STATUS "ARC: Disabled") -endif() - -if(ENABLE_VISIBILITY_INT) - message(STATUS "Hiding symbols: Disabled") -else() - message(STATUS "Hiding symbols: Enabled") -endif() - -# Set global properties -set_property(GLOBAL PROPERTY PLATFORM "${PLATFORM}") -set_property(GLOBAL PROPERTY APPLE_TARGET_TRIPLE "${APPLE_TARGET_TRIPLE_INT}") -set_property(GLOBAL PROPERTY SDK_VERSION "${SDK_VERSION}") -set_property(GLOBAL PROPERTY XCODE_VERSION "${XCODE_VERSION_INT}") -set_property(GLOBAL PROPERTY OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}") - -# Export configurable variables for the try_compile() command. -set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES - PLATFORM - XCODE_VERSION_INT - SDK_VERSION - DEPLOYMENT_TARGET - CMAKE_DEVELOPER_ROOT - CMAKE_OSX_SYSROOT_INT - ENABLE_BITCODE - ENABLE_ARC - CMAKE_ASM_COMPILER - CMAKE_C_COMPILER - CMAKE_C_COMPILER_TARGET - CMAKE_CXX_COMPILER - CMAKE_CXX_COMPILER_TARGET - BUILD_LIBTOOL - CMAKE_INSTALL_NAME_TOOL - CMAKE_C_FLAGS - CMAKE_CXX_FLAGS - CMAKE_CXX_FLAGS_DEBUG - CMAKE_CXX_FLAGS_MINSIZEREL - CMAKE_CXX_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS_RELEASE - CMAKE_C_LINK_FLAGS - CMAKE_CXX_LINK_FLAGS - CMAKE_ASM_FLAGS - ) - -set(CMAKE_PLATFORM_HAS_INSTALLNAME 1) -set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") -set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") -set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") -set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") -set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") -set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") -set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") - -# Set the find root to the SDK developer roots. -# Note: CMAKE_FIND_ROOT_PATH is only useful when cross-compiling. Thus, do not set on macOS builds. -if(NOT PLATFORM_INT STREQUAL "MAC" AND NOT PLATFORM_INT STREQUAL "MAC_ARM64") - list(APPEND CMAKE_FIND_ROOT_PATH "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "") - set(CMAKE_IGNORE_PATH "/System/Library/Frameworks;/usr/local/lib" CACHE INTERNAL "") -endif() - -# Default to searching for frameworks first. -set(CMAKE_FIND_FRAMEWORK FIRST) - -# Set up the default search directories for frameworks. -if(PLATFORM_INT MATCHES "^MAC_CATALYST") - set(CMAKE_FRAMEWORK_PATH - ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks - ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks - ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/System/Library/Frameworks - ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "") -else() - set(CMAKE_FRAMEWORK_PATH - ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks - ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks - ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "") -endif() - -# By default, search both the specified iOS SDK and the remainder of the host filesystem. -if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "") -endif() -if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH CACHE INTERNAL "") -endif() -if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH CACHE INTERNAL "") -endif() -if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) - set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH CACHE INTERNAL "") -endif() - -# -# Some helper-macros below to simplify and beautify the CMakeFile -# - -# This little macro lets you set any Xcode specific property. -macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE XCODE_RELVERSION) - set(XCODE_RELVERSION_I "${XCODE_RELVERSION}") - if(XCODE_RELVERSION_I STREQUAL "All") - set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} "${XCODE_VALUE}") - else() - set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] "${XCODE_VALUE}") - endif() -endmacro(set_xcode_property) - -# This macro lets you find executable programs on the host system. -macro(find_host_package) - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) - set(_TOOLCHAIN_IOS ${IOS}) - set(IOS FALSE) - find_package(${ARGN}) - set(IOS ${_TOOLCHAIN_IOS}) - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) - set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) -endmacro(find_host_package) \ No newline at end of file diff --git a/third_party/libretro/include/libretro.h b/third_party/libretro/include/libretro.h deleted file mode 100644 index 96d07df4..00000000 --- a/third_party/libretro/include/libretro.h +++ /dev/null @@ -1,4405 +0,0 @@ -/* Copyright (C) 2010-2020 The RetroArch team - * - * --------------------------------------------------------------------------------------- - * The following license statement only applies to this libretro API header (libretro.h). - * --------------------------------------------------------------------------------------- - * - * Permission is hereby granted, free of charge, - * to any person obtaining a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef LIBRETRO_H__ -#define LIBRETRO_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef __cplusplus -#if defined(_MSC_VER) && _MSC_VER < 1800 && !defined(SN_TARGET_PS3) -/* Hack applied for MSVC when compiling in C89 mode - * as it isn't C99-compliant. */ -#define bool unsigned char -#define true 1 -#define false 0 -#else -#include -#endif -#endif - -#ifndef RETRO_CALLCONV -# if defined(__GNUC__) && defined(__i386__) && !defined(__x86_64__) -# define RETRO_CALLCONV __attribute__((cdecl)) -# elif defined(_MSC_VER) && defined(_M_X86) && !defined(_M_X64) -# define RETRO_CALLCONV __cdecl -# else -# define RETRO_CALLCONV /* all other platforms only have one calling convention each */ -# endif -#endif - -#ifndef RETRO_API -# if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) -# ifdef RETRO_IMPORT_SYMBOLS -# ifdef __GNUC__ -# define RETRO_API RETRO_CALLCONV __attribute__((__dllimport__)) -# else -# define RETRO_API RETRO_CALLCONV __declspec(dllimport) -# endif -# else -# ifdef __GNUC__ -# define RETRO_API RETRO_CALLCONV __attribute__((__dllexport__)) -# else -# define RETRO_API RETRO_CALLCONV __declspec(dllexport) -# endif -# endif -# else -# if defined(__GNUC__) && __GNUC__ >= 4 -# define RETRO_API RETRO_CALLCONV __attribute__((__visibility__("default"))) -# else -# define RETRO_API RETRO_CALLCONV -# endif -# endif -#endif - -/* Used for checking API/ABI mismatches that can break libretro - * implementations. - * It is not incremented for compatible changes to the API. - */ -#define RETRO_API_VERSION 1 - -/* - * Libretro's fundamental device abstractions. - * - * Libretro's input system consists of some standardized device types, - * such as a joypad (with/without analog), mouse, keyboard, lightgun - * and a pointer. - * - * The functionality of these devices are fixed, and individual cores - * map their own concept of a controller to libretro's abstractions. - * This makes it possible for frontends to map the abstract types to a - * real input device, and not having to worry about binding input - * correctly to arbitrary controller layouts. - */ - -#define RETRO_DEVICE_TYPE_SHIFT 8 -#define RETRO_DEVICE_MASK ((1 << RETRO_DEVICE_TYPE_SHIFT) - 1) -#define RETRO_DEVICE_SUBCLASS(base, id) (((id + 1) << RETRO_DEVICE_TYPE_SHIFT) | base) - -/* Input disabled. */ -#define RETRO_DEVICE_NONE 0 - -/* The JOYPAD is called RetroPad. It is essentially a Super Nintendo - * controller, but with additional L2/R2/L3/R3 buttons, similar to a - * PS1 DualShock. */ -#define RETRO_DEVICE_JOYPAD 1 - -/* The mouse is a simple mouse, similar to Super Nintendo's mouse. - * X and Y coordinates are reported relatively to last poll (poll callback). - * It is up to the libretro implementation to keep track of where the mouse - * pointer is supposed to be on the screen. - * The frontend must make sure not to interfere with its own hardware - * mouse pointer. - */ -#define RETRO_DEVICE_MOUSE 2 - -/* KEYBOARD device lets one poll for raw key pressed. - * It is poll based, so input callback will return with the current - * pressed state. - * For event/text based keyboard input, see - * RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK. - */ -#define RETRO_DEVICE_KEYBOARD 3 - -/* LIGHTGUN device is similar to Guncon-2 for PlayStation 2. - * It reports X/Y coordinates in screen space (similar to the pointer) - * in the range [-0x8000, 0x7fff] in both axes, with zero being center and - * -0x8000 being out of bounds. - * As well as reporting on/off screen state. It features a trigger, - * start/select buttons, auxiliary action buttons and a - * directional pad. A forced off-screen shot can be requested for - * auto-reloading function in some games. - */ -#define RETRO_DEVICE_LIGHTGUN 4 - -/* The ANALOG device is an extension to JOYPAD (RetroPad). - * Similar to DualShock2 it adds two analog sticks and all buttons can - * be analog. This is treated as a separate device type as it returns - * axis values in the full analog range of [-0x7fff, 0x7fff], - * although some devices may return -0x8000. - * Positive X axis is right. Positive Y axis is down. - * Buttons are returned in the range [0, 0x7fff]. - * Only use ANALOG type when polling for analog values. - */ -#define RETRO_DEVICE_ANALOG 5 - -/* Abstracts the concept of a pointing mechanism, e.g. touch. - * This allows libretro to query in absolute coordinates where on the - * screen a mouse (or something similar) is being placed. - * For a touch centric device, coordinates reported are the coordinates - * of the press. - * - * Coordinates in X and Y are reported as: - * [-0x7fff, 0x7fff]: -0x7fff corresponds to the far left/top of the screen, - * and 0x7fff corresponds to the far right/bottom of the screen. - * The "screen" is here defined as area that is passed to the frontend and - * later displayed on the monitor. - * - * The frontend is free to scale/resize this screen as it sees fit, however, - * (X, Y) = (-0x7fff, -0x7fff) will correspond to the top-left pixel of the - * game image, etc. - * - * To check if the pointer coordinates are valid (e.g. a touch display - * actually being touched), PRESSED returns 1 or 0. - * - * If using a mouse on a desktop, PRESSED will usually correspond to the - * left mouse button, but this is a frontend decision. - * PRESSED will only return 1 if the pointer is inside the game screen. - * - * For multi-touch, the index variable can be used to successively query - * more presses. - * If index = 0 returns true for _PRESSED, coordinates can be extracted - * with _X, _Y for index = 0. One can then query _PRESSED, _X, _Y with - * index = 1, and so on. - * Eventually _PRESSED will return false for an index. No further presses - * are registered at this point. */ -#define RETRO_DEVICE_POINTER 6 - -/* Buttons for the RetroPad (JOYPAD). - * The placement of these is equivalent to placements on the - * Super Nintendo controller. - * L2/R2/L3/R3 buttons correspond to the PS1 DualShock. - * Also used as id values for RETRO_DEVICE_INDEX_ANALOG_BUTTON */ -#define RETRO_DEVICE_ID_JOYPAD_B 0 -#define RETRO_DEVICE_ID_JOYPAD_Y 1 -#define RETRO_DEVICE_ID_JOYPAD_SELECT 2 -#define RETRO_DEVICE_ID_JOYPAD_START 3 -#define RETRO_DEVICE_ID_JOYPAD_UP 4 -#define RETRO_DEVICE_ID_JOYPAD_DOWN 5 -#define RETRO_DEVICE_ID_JOYPAD_LEFT 6 -#define RETRO_DEVICE_ID_JOYPAD_RIGHT 7 -#define RETRO_DEVICE_ID_JOYPAD_A 8 -#define RETRO_DEVICE_ID_JOYPAD_X 9 -#define RETRO_DEVICE_ID_JOYPAD_L 10 -#define RETRO_DEVICE_ID_JOYPAD_R 11 -#define RETRO_DEVICE_ID_JOYPAD_L2 12 -#define RETRO_DEVICE_ID_JOYPAD_R2 13 -#define RETRO_DEVICE_ID_JOYPAD_L3 14 -#define RETRO_DEVICE_ID_JOYPAD_R3 15 - -#define RETRO_DEVICE_ID_JOYPAD_MASK 256 - -/* Index / Id values for ANALOG device. */ -#define RETRO_DEVICE_INDEX_ANALOG_LEFT 0 -#define RETRO_DEVICE_INDEX_ANALOG_RIGHT 1 -#define RETRO_DEVICE_INDEX_ANALOG_BUTTON 2 -#define RETRO_DEVICE_ID_ANALOG_X 0 -#define RETRO_DEVICE_ID_ANALOG_Y 1 - -/* Id values for MOUSE. */ -#define RETRO_DEVICE_ID_MOUSE_X 0 -#define RETRO_DEVICE_ID_MOUSE_Y 1 -#define RETRO_DEVICE_ID_MOUSE_LEFT 2 -#define RETRO_DEVICE_ID_MOUSE_RIGHT 3 -#define RETRO_DEVICE_ID_MOUSE_WHEELUP 4 -#define RETRO_DEVICE_ID_MOUSE_WHEELDOWN 5 -#define RETRO_DEVICE_ID_MOUSE_MIDDLE 6 -#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP 7 -#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN 8 -#define RETRO_DEVICE_ID_MOUSE_BUTTON_4 9 -#define RETRO_DEVICE_ID_MOUSE_BUTTON_5 10 - -/* Id values for LIGHTGUN. */ -#define RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X 13 /*Absolute Position*/ -#define RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y 14 /*Absolute*/ -#define RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN 15 /*Status Check*/ -#define RETRO_DEVICE_ID_LIGHTGUN_TRIGGER 2 -#define RETRO_DEVICE_ID_LIGHTGUN_RELOAD 16 /*Forced off-screen shot*/ -#define RETRO_DEVICE_ID_LIGHTGUN_AUX_A 3 -#define RETRO_DEVICE_ID_LIGHTGUN_AUX_B 4 -#define RETRO_DEVICE_ID_LIGHTGUN_START 6 -#define RETRO_DEVICE_ID_LIGHTGUN_SELECT 7 -#define RETRO_DEVICE_ID_LIGHTGUN_AUX_C 8 -#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_UP 9 -#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_DOWN 10 -#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_LEFT 11 -#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_RIGHT 12 -/* deprecated */ -#define RETRO_DEVICE_ID_LIGHTGUN_X 0 /*Relative Position*/ -#define RETRO_DEVICE_ID_LIGHTGUN_Y 1 /*Relative*/ -#define RETRO_DEVICE_ID_LIGHTGUN_CURSOR 3 /*Use Aux:A*/ -#define RETRO_DEVICE_ID_LIGHTGUN_TURBO 4 /*Use Aux:B*/ -#define RETRO_DEVICE_ID_LIGHTGUN_PAUSE 5 /*Use Start*/ - -/* Id values for POINTER. */ -#define RETRO_DEVICE_ID_POINTER_X 0 -#define RETRO_DEVICE_ID_POINTER_Y 1 -#define RETRO_DEVICE_ID_POINTER_PRESSED 2 -#define RETRO_DEVICE_ID_POINTER_COUNT 3 - -/* Returned from retro_get_region(). */ -#define RETRO_REGION_NTSC 0 -#define RETRO_REGION_PAL 1 - -/* Id values for LANGUAGE */ -enum retro_language -{ - RETRO_LANGUAGE_ENGLISH = 0, - RETRO_LANGUAGE_JAPANESE = 1, - RETRO_LANGUAGE_FRENCH = 2, - RETRO_LANGUAGE_SPANISH = 3, - RETRO_LANGUAGE_GERMAN = 4, - RETRO_LANGUAGE_ITALIAN = 5, - RETRO_LANGUAGE_DUTCH = 6, - RETRO_LANGUAGE_PORTUGUESE_BRAZIL = 7, - RETRO_LANGUAGE_PORTUGUESE_PORTUGAL = 8, - RETRO_LANGUAGE_RUSSIAN = 9, - RETRO_LANGUAGE_KOREAN = 10, - RETRO_LANGUAGE_CHINESE_TRADITIONAL = 11, - RETRO_LANGUAGE_CHINESE_SIMPLIFIED = 12, - RETRO_LANGUAGE_ESPERANTO = 13, - RETRO_LANGUAGE_POLISH = 14, - RETRO_LANGUAGE_VIETNAMESE = 15, - RETRO_LANGUAGE_ARABIC = 16, - RETRO_LANGUAGE_GREEK = 17, - RETRO_LANGUAGE_TURKISH = 18, - RETRO_LANGUAGE_SLOVAK = 19, - RETRO_LANGUAGE_PERSIAN = 20, - RETRO_LANGUAGE_HEBREW = 21, - RETRO_LANGUAGE_ASTURIAN = 22, - RETRO_LANGUAGE_FINNISH = 23, - RETRO_LANGUAGE_INDONESIAN = 24, - RETRO_LANGUAGE_SWEDISH = 25, - RETRO_LANGUAGE_UKRAINIAN = 26, - RETRO_LANGUAGE_CZECH = 27, - RETRO_LANGUAGE_CATALAN_VALENCIA = 28, - RETRO_LANGUAGE_CATALAN = 29, - RETRO_LANGUAGE_BRITISH_ENGLISH = 30, - RETRO_LANGUAGE_HUNGARIAN = 31, - RETRO_LANGUAGE_BELARUSIAN = 32, - RETRO_LANGUAGE_LAST, - - /* Ensure sizeof(enum) == sizeof(int) */ - RETRO_LANGUAGE_DUMMY = INT_MAX -}; - -/* Passed to retro_get_memory_data/size(). - * If the memory type doesn't apply to the - * implementation NULL/0 can be returned. - */ -#define RETRO_MEMORY_MASK 0xff - -/* Regular save RAM. This RAM is usually found on a game cartridge, - * backed up by a battery. - * If save game data is too complex for a single memory buffer, - * the SAVE_DIRECTORY (preferably) or SYSTEM_DIRECTORY environment - * callback can be used. */ -#define RETRO_MEMORY_SAVE_RAM 0 - -/* Some games have a built-in clock to keep track of time. - * This memory is usually just a couple of bytes to keep track of time. - */ -#define RETRO_MEMORY_RTC 1 - -/* System ram lets a frontend peek into a game systems main RAM. */ -#define RETRO_MEMORY_SYSTEM_RAM 2 - -/* Video ram lets a frontend peek into a game systems video RAM (VRAM). */ -#define RETRO_MEMORY_VIDEO_RAM 3 - -/* Keysyms used for ID in input state callback when polling RETRO_KEYBOARD. */ -enum retro_key -{ - RETROK_UNKNOWN = 0, - RETROK_FIRST = 0, - RETROK_BACKSPACE = 8, - RETROK_TAB = 9, - RETROK_CLEAR = 12, - RETROK_RETURN = 13, - RETROK_PAUSE = 19, - RETROK_ESCAPE = 27, - RETROK_SPACE = 32, - RETROK_EXCLAIM = 33, - RETROK_QUOTEDBL = 34, - RETROK_HASH = 35, - RETROK_DOLLAR = 36, - RETROK_AMPERSAND = 38, - RETROK_QUOTE = 39, - RETROK_LEFTPAREN = 40, - RETROK_RIGHTPAREN = 41, - RETROK_ASTERISK = 42, - RETROK_PLUS = 43, - RETROK_COMMA = 44, - RETROK_MINUS = 45, - RETROK_PERIOD = 46, - RETROK_SLASH = 47, - RETROK_0 = 48, - RETROK_1 = 49, - RETROK_2 = 50, - RETROK_3 = 51, - RETROK_4 = 52, - RETROK_5 = 53, - RETROK_6 = 54, - RETROK_7 = 55, - RETROK_8 = 56, - RETROK_9 = 57, - RETROK_COLON = 58, - RETROK_SEMICOLON = 59, - RETROK_LESS = 60, - RETROK_EQUALS = 61, - RETROK_GREATER = 62, - RETROK_QUESTION = 63, - RETROK_AT = 64, - RETROK_LEFTBRACKET = 91, - RETROK_BACKSLASH = 92, - RETROK_RIGHTBRACKET = 93, - RETROK_CARET = 94, - RETROK_UNDERSCORE = 95, - RETROK_BACKQUOTE = 96, - RETROK_a = 97, - RETROK_b = 98, - RETROK_c = 99, - RETROK_d = 100, - RETROK_e = 101, - RETROK_f = 102, - RETROK_g = 103, - RETROK_h = 104, - RETROK_i = 105, - RETROK_j = 106, - RETROK_k = 107, - RETROK_l = 108, - RETROK_m = 109, - RETROK_n = 110, - RETROK_o = 111, - RETROK_p = 112, - RETROK_q = 113, - RETROK_r = 114, - RETROK_s = 115, - RETROK_t = 116, - RETROK_u = 117, - RETROK_v = 118, - RETROK_w = 119, - RETROK_x = 120, - RETROK_y = 121, - RETROK_z = 122, - RETROK_LEFTBRACE = 123, - RETROK_BAR = 124, - RETROK_RIGHTBRACE = 125, - RETROK_TILDE = 126, - RETROK_DELETE = 127, - - RETROK_KP0 = 256, - RETROK_KP1 = 257, - RETROK_KP2 = 258, - RETROK_KP3 = 259, - RETROK_KP4 = 260, - RETROK_KP5 = 261, - RETROK_KP6 = 262, - RETROK_KP7 = 263, - RETROK_KP8 = 264, - RETROK_KP9 = 265, - RETROK_KP_PERIOD = 266, - RETROK_KP_DIVIDE = 267, - RETROK_KP_MULTIPLY = 268, - RETROK_KP_MINUS = 269, - RETROK_KP_PLUS = 270, - RETROK_KP_ENTER = 271, - RETROK_KP_EQUALS = 272, - - RETROK_UP = 273, - RETROK_DOWN = 274, - RETROK_RIGHT = 275, - RETROK_LEFT = 276, - RETROK_INSERT = 277, - RETROK_HOME = 278, - RETROK_END = 279, - RETROK_PAGEUP = 280, - RETROK_PAGEDOWN = 281, - - RETROK_F1 = 282, - RETROK_F2 = 283, - RETROK_F3 = 284, - RETROK_F4 = 285, - RETROK_F5 = 286, - RETROK_F6 = 287, - RETROK_F7 = 288, - RETROK_F8 = 289, - RETROK_F9 = 290, - RETROK_F10 = 291, - RETROK_F11 = 292, - RETROK_F12 = 293, - RETROK_F13 = 294, - RETROK_F14 = 295, - RETROK_F15 = 296, - - RETROK_NUMLOCK = 300, - RETROK_CAPSLOCK = 301, - RETROK_SCROLLOCK = 302, - RETROK_RSHIFT = 303, - RETROK_LSHIFT = 304, - RETROK_RCTRL = 305, - RETROK_LCTRL = 306, - RETROK_RALT = 307, - RETROK_LALT = 308, - RETROK_RMETA = 309, - RETROK_LMETA = 310, - RETROK_LSUPER = 311, - RETROK_RSUPER = 312, - RETROK_MODE = 313, - RETROK_COMPOSE = 314, - - RETROK_HELP = 315, - RETROK_PRINT = 316, - RETROK_SYSREQ = 317, - RETROK_BREAK = 318, - RETROK_MENU = 319, - RETROK_POWER = 320, - RETROK_EURO = 321, - RETROK_UNDO = 322, - RETROK_OEM_102 = 323, - - RETROK_LAST, - - RETROK_DUMMY = INT_MAX /* Ensure sizeof(enum) == sizeof(int) */ -}; - -enum retro_mod -{ - RETROKMOD_NONE = 0x0000, - - RETROKMOD_SHIFT = 0x01, - RETROKMOD_CTRL = 0x02, - RETROKMOD_ALT = 0x04, - RETROKMOD_META = 0x08, - - RETROKMOD_NUMLOCK = 0x10, - RETROKMOD_CAPSLOCK = 0x20, - RETROKMOD_SCROLLOCK = 0x40, - - RETROKMOD_DUMMY = INT_MAX /* Ensure sizeof(enum) == sizeof(int) */ -}; - -/* If set, this call is not part of the public libretro API yet. It can - * change or be removed at any time. */ -#define RETRO_ENVIRONMENT_EXPERIMENTAL 0x10000 -/* Environment callback to be used internally in frontend. */ -#define RETRO_ENVIRONMENT_PRIVATE 0x20000 - -/* Environment commands. */ -#define RETRO_ENVIRONMENT_SET_ROTATION 1 /* const unsigned * -- - * Sets screen rotation of graphics. - * Valid values are 0, 1, 2, 3, which rotates screen by 0, 90, 180, - * 270 degrees counter-clockwise respectively. - */ -#define RETRO_ENVIRONMENT_GET_OVERSCAN 2 /* bool * -- - * NOTE: As of 2019 this callback is considered deprecated in favor of - * using core options to manage overscan in a more nuanced, core-specific way. - * - * Boolean value whether or not the implementation should use overscan, - * or crop away overscan. - */ -#define RETRO_ENVIRONMENT_GET_CAN_DUPE 3 /* bool * -- - * Boolean value whether or not frontend supports frame duping, - * passing NULL to video frame callback. - */ - - /* Environ 4, 5 are no longer supported (GET_VARIABLE / SET_VARIABLES), - * and reserved to avoid possible ABI clash. - */ - -#define RETRO_ENVIRONMENT_SET_MESSAGE 6 /* const struct retro_message * -- - * Sets a message to be displayed in implementation-specific manner - * for a certain amount of 'frames'. - * Should not be used for trivial messages, which should simply be - * logged via RETRO_ENVIRONMENT_GET_LOG_INTERFACE (or as a - * fallback, stderr). - */ -#define RETRO_ENVIRONMENT_SHUTDOWN 7 /* N/A (NULL) -- - * Requests the frontend to shutdown. - * Should only be used if game has a specific - * way to shutdown the game from a menu item or similar. - */ -#define RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL 8 - /* const unsigned * -- - * Gives a hint to the frontend how demanding this implementation - * is on a system. E.g. reporting a level of 2 means - * this implementation should run decently on all frontends - * of level 2 and up. - * - * It can be used by the frontend to potentially warn - * about too demanding implementations. - * - * The levels are "floating". - * - * This function can be called on a per-game basis, - * as certain games an implementation can play might be - * particularly demanding. - * If called, it should be called in retro_load_game(). - */ -#define RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY 9 - /* const char ** -- - * Returns the "system" directory of the frontend. - * This directory can be used to store system specific - * content such as BIOSes, configuration data, etc. - * The returned value can be NULL. - * If so, no such directory is defined, - * and it's up to the implementation to find a suitable directory. - * - * NOTE: Some cores used this folder also for "save" data such as - * memory cards, etc, for lack of a better place to put it. - * This is now discouraged, and if possible, cores should try to - * use the new GET_SAVE_DIRECTORY. - */ -#define RETRO_ENVIRONMENT_SET_PIXEL_FORMAT 10 - /* const enum retro_pixel_format * -- - * Sets the internal pixel format used by the implementation. - * The default pixel format is RETRO_PIXEL_FORMAT_0RGB1555. - * This pixel format however, is deprecated (see enum retro_pixel_format). - * If the call returns false, the frontend does not support this pixel - * format. - * - * This function should be called inside retro_load_game() or - * retro_get_system_av_info(). - */ -#define RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS 11 - /* const struct retro_input_descriptor * -- - * Sets an array of retro_input_descriptors. - * It is up to the frontend to present this in a usable way. - * The array is terminated by retro_input_descriptor::description - * being set to NULL. - * This function can be called at any time, but it is recommended - * to call it as early as possible. - */ -#define RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK 12 - /* const struct retro_keyboard_callback * -- - * Sets a callback function used to notify core about keyboard events. - */ -#define RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE 13 - /* const struct retro_disk_control_callback * -- - * Sets an interface which frontend can use to eject and insert - * disk images. - * This is used for games which consist of multiple images and - * must be manually swapped out by the user (e.g. PSX). - */ -#define RETRO_ENVIRONMENT_SET_HW_RENDER 14 - /* struct retro_hw_render_callback * -- - * Sets an interface to let a libretro core render with - * hardware acceleration. - * Should be called in retro_load_game(). - * If successful, libretro cores will be able to render to a - * frontend-provided framebuffer. - * The size of this framebuffer will be at least as large as - * max_width/max_height provided in get_av_info(). - * If HW rendering is used, pass only RETRO_HW_FRAME_BUFFER_VALID or - * NULL to retro_video_refresh_t. - */ -#define RETRO_ENVIRONMENT_GET_VARIABLE 15 - /* struct retro_variable * -- - * Interface to acquire user-defined information from environment - * that cannot feasibly be supported in a multi-system way. - * 'key' should be set to a key which has already been set by - * SET_VARIABLES. - * 'data' will be set to a value or NULL. - */ -#define RETRO_ENVIRONMENT_SET_VARIABLES 16 - /* const struct retro_variable * -- - * Allows an implementation to signal the environment - * which variables it might want to check for later using - * GET_VARIABLE. - * This allows the frontend to present these variables to - * a user dynamically. - * This should be called the first time as early as - * possible (ideally in retro_set_environment). - * Afterward it may be called again for the core to communicate - * updated options to the frontend, but the number of core - * options must not change from the number in the initial call. - * - * 'data' points to an array of retro_variable structs - * terminated by a { NULL, NULL } element. - * retro_variable::key should be namespaced to not collide - * with other implementations' keys. E.g. A core called - * 'foo' should use keys named as 'foo_option'. - * retro_variable::value should contain a human readable - * description of the key as well as a '|' delimited list - * of expected values. - * - * The number of possible options should be very limited, - * i.e. it should be feasible to cycle through options - * without a keyboard. - * - * First entry should be treated as a default. - * - * Example entry: - * { "foo_option", "Speed hack coprocessor X; false|true" } - * - * Text before first ';' is description. This ';' must be - * followed by a space, and followed by a list of possible - * values split up with '|'. - * - * Only strings are operated on. The possible values will - * generally be displayed and stored as-is by the frontend. - */ -#define RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE 17 - /* bool * -- - * Result is set to true if some variables are updated by - * frontend since last call to RETRO_ENVIRONMENT_GET_VARIABLE. - * Variables should be queried with GET_VARIABLE. - */ -#define RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME 18 - /* const bool * -- - * If true, the libretro implementation supports calls to - * retro_load_game() with NULL as argument. - * Used by cores which can run without particular game data. - * This should be called within retro_set_environment() only. - */ -#define RETRO_ENVIRONMENT_GET_LIBRETRO_PATH 19 - /* const char ** -- - * Retrieves the absolute path from where this libretro - * implementation was loaded. - * NULL is returned if the libretro was loaded statically - * (i.e. linked statically to frontend), or if the path cannot be - * determined. - * Mostly useful in cooperation with SET_SUPPORT_NO_GAME as assets can - * be loaded without ugly hacks. - */ - - /* Environment 20 was an obsolete version of SET_AUDIO_CALLBACK. - * It was not used by any known core at the time, - * and was removed from the API. */ -#define RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK 21 - /* const struct retro_frame_time_callback * -- - * Lets the core know how much time has passed since last - * invocation of retro_run(). - * The frontend can tamper with the timing to fake fast-forward, - * slow-motion, frame stepping, etc. - * In this case the delta time will use the reference value - * in frame_time_callback.. - */ -#define RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK 22 - /* const struct retro_audio_callback * -- - * Sets an interface which is used to notify a libretro core about audio - * being available for writing. - * The callback can be called from any thread, so a core using this must - * have a thread safe audio implementation. - * It is intended for games where audio and video are completely - * asynchronous and audio can be generated on the fly. - * This interface is not recommended for use with emulators which have - * highly synchronous audio. - * - * The callback only notifies about writability; the libretro core still - * has to call the normal audio callbacks - * to write audio. The audio callbacks must be called from within the - * notification callback. - * The amount of audio data to write is up to the implementation. - * Generally, the audio callback will be called continously in a loop. - * - * Due to thread safety guarantees and lack of sync between audio and - * video, a frontend can selectively disallow this interface based on - * internal configuration. A core using this interface must also - * implement the "normal" audio interface. - * - * A libretro core using SET_AUDIO_CALLBACK should also make use of - * SET_FRAME_TIME_CALLBACK. - */ -#define RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE 23 - /* struct retro_rumble_interface * -- - * Gets an interface which is used by a libretro core to set - * state of rumble motors in controllers. - * A strong and weak motor is supported, and they can be - * controlled indepedently. - * Should be called from either retro_init() or retro_load_game(). - * Should not be called from retro_set_environment(). - * Returns false if rumble functionality is unavailable. - */ -#define RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES 24 - /* uint64_t * -- - * Gets a bitmask telling which device type are expected to be - * handled properly in a call to retro_input_state_t. - * Devices which are not handled or recognized always return - * 0 in retro_input_state_t. - * Example bitmask: caps = (1 << RETRO_DEVICE_JOYPAD) | (1 << RETRO_DEVICE_ANALOG). - * Should only be called in retro_run(). - */ -#define RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE (25 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_sensor_interface * -- - * Gets access to the sensor interface. - * The purpose of this interface is to allow - * setting state related to sensors such as polling rate, - * enabling/disable it entirely, etc. - * Reading sensor state is done via the normal - * input_state_callback API. - */ -#define RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE (26 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_camera_callback * -- - * Gets an interface to a video camera driver. - * A libretro core can use this interface to get access to a - * video camera. - * New video frames are delivered in a callback in same - * thread as retro_run(). - * - * GET_CAMERA_INTERFACE should be called in retro_load_game(). - * - * Depending on the camera implementation used, camera frames - * will be delivered as a raw framebuffer, - * or as an OpenGL texture directly. - * - * The core has to tell the frontend here which types of - * buffers can be handled properly. - * An OpenGL texture can only be handled when using a - * libretro GL core (SET_HW_RENDER). - * It is recommended to use a libretro GL core when - * using camera interface. - * - * The camera is not started automatically. The retrieved start/stop - * functions must be used to explicitly - * start and stop the camera driver. - */ -#define RETRO_ENVIRONMENT_GET_LOG_INTERFACE 27 - /* struct retro_log_callback * -- - * Gets an interface for logging. This is useful for - * logging in a cross-platform way - * as certain platforms cannot use stderr for logging. - * It also allows the frontend to - * show logging information in a more suitable way. - * If this interface is not used, libretro cores should - * log to stderr as desired. - */ -#define RETRO_ENVIRONMENT_GET_PERF_INTERFACE 28 - /* struct retro_perf_callback * -- - * Gets an interface for performance counters. This is useful - * for performance logging in a cross-platform way and for detecting - * architecture-specific features, such as SIMD support. - */ -#define RETRO_ENVIRONMENT_GET_LOCATION_INTERFACE 29 - /* struct retro_location_callback * -- - * Gets access to the location interface. - * The purpose of this interface is to be able to retrieve - * location-based information from the host device, - * such as current latitude / longitude. - */ -#define RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY 30 /* Old name, kept for compatibility. */ -#define RETRO_ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY 30 - /* const char ** -- - * Returns the "core assets" directory of the frontend. - * This directory can be used to store specific assets that the - * core relies upon, such as art assets, - * input data, etc etc. - * The returned value can be NULL. - * If so, no such directory is defined, - * and it's up to the implementation to find a suitable directory. - */ -#define RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY 31 - /* const char ** -- - * Returns the "save" directory of the frontend, unless there is no - * save directory available. The save directory should be used to - * store SRAM, memory cards, high scores, etc, if the libretro core - * cannot use the regular memory interface (retro_get_memory_data()). - * - * If the frontend cannot designate a save directory, it will return - * NULL to indicate that the core should attempt to operate without a - * save directory set. - * - * NOTE: early libretro cores used the system directory for save - * files. Cores that need to be backwards-compatible can still check - * GET_SYSTEM_DIRECTORY. - */ -#define RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO 32 - /* const struct retro_system_av_info * -- - * Sets a new av_info structure. This can only be called from - * within retro_run(). - * This should *only* be used if the core is completely altering the - * internal resolutions, aspect ratios, timings, sampling rate, etc. - * Calling this can require a full reinitialization of video/audio - * drivers in the frontend, - * - * so it is important to call it very sparingly, and usually only with - * the users explicit consent. - * An eventual driver reinitialize will happen so that video and - * audio callbacks - * happening after this call within the same retro_run() call will - * target the newly initialized driver. - * - * This callback makes it possible to support configurable resolutions - * in games, which can be useful to - * avoid setting the "worst case" in max_width/max_height. - * - * ***HIGHLY RECOMMENDED*** Do not call this callback every time - * resolution changes in an emulator core if it's - * expected to be a temporary change, for the reasons of possible - * driver reinitialization. - * This call is not a free pass for not trying to provide - * correct values in retro_get_system_av_info(). If you need to change - * things like aspect ratio or nominal width/height, - * use RETRO_ENVIRONMENT_SET_GEOMETRY, which is a softer variant - * of SET_SYSTEM_AV_INFO. - * - * If this returns false, the frontend does not acknowledge a - * changed av_info struct. - */ -#define RETRO_ENVIRONMENT_SET_PROC_ADDRESS_CALLBACK 33 - /* const struct retro_get_proc_address_interface * -- - * Allows a libretro core to announce support for the - * get_proc_address() interface. - * This interface allows for a standard way to extend libretro where - * use of environment calls are too indirect, - * e.g. for cases where the frontend wants to call directly into the core. - * - * If a core wants to expose this interface, SET_PROC_ADDRESS_CALLBACK - * **MUST** be called from within retro_set_environment(). - */ -#define RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO 34 - /* const struct retro_subsystem_info * -- - * This environment call introduces the concept of libretro "subsystems". - * A subsystem is a variant of a libretro core which supports - * different kinds of games. - * The purpose of this is to support e.g. emulators which might - * have special needs, e.g. Super Nintendo's Super GameBoy, Sufami Turbo. - * It can also be used to pick among subsystems in an explicit way - * if the libretro implementation is a multi-system emulator itself. - * - * Loading a game via a subsystem is done with retro_load_game_special(), - * and this environment call allows a libretro core to expose which - * subsystems are supported for use with retro_load_game_special(). - * A core passes an array of retro_game_special_info which is terminated - * with a zeroed out retro_game_special_info struct. - * - * If a core wants to use this functionality, SET_SUBSYSTEM_INFO - * **MUST** be called from within retro_set_environment(). - */ -#define RETRO_ENVIRONMENT_SET_CONTROLLER_INFO 35 - /* const struct retro_controller_info * -- - * This environment call lets a libretro core tell the frontend - * which controller subclasses are recognized in calls to - * retro_set_controller_port_device(). - * - * Some emulators such as Super Nintendo support multiple lightgun - * types which must be specifically selected from. It is therefore - * sometimes necessary for a frontend to be able to tell the core - * about a special kind of input device which is not specifcally - * provided by the Libretro API. - * - * In order for a frontend to understand the workings of those devices, - * they must be defined as a specialized subclass of the generic device - * types already defined in the libretro API. - * - * The core must pass an array of const struct retro_controller_info which - * is terminated with a blanked out struct. Each element of the - * retro_controller_info struct corresponds to the ascending port index - * that is passed to retro_set_controller_port_device() when that function - * is called to indicate to the core that the frontend has changed the - * active device subclass. SEE ALSO: retro_set_controller_port_device() - * - * The ascending input port indexes provided by the core in the struct - * are generally presented by frontends as ascending User # or Player #, - * such as Player 1, Player 2, Player 3, etc. Which device subclasses are - * supported can vary per input port. - * - * The first inner element of each entry in the retro_controller_info array - * is a retro_controller_description struct that specifies the names and - * codes of all device subclasses that are available for the corresponding - * User or Player, beginning with the generic Libretro device that the - * subclasses are derived from. The second inner element of each entry is the - * total number of subclasses that are listed in the retro_controller_description. - * - * NOTE: Even if special device types are set in the libretro core, - * libretro should only poll input based on the base input device types. - */ -#define RETRO_ENVIRONMENT_SET_MEMORY_MAPS (36 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* const struct retro_memory_map * -- - * This environment call lets a libretro core tell the frontend - * about the memory maps this core emulates. - * This can be used to implement, for example, cheats in a core-agnostic way. - * - * Should only be used by emulators; it doesn't make much sense for - * anything else. - * It is recommended to expose all relevant pointers through - * retro_get_memory_* as well. - */ -#define RETRO_ENVIRONMENT_SET_GEOMETRY 37 - /* const struct retro_game_geometry * -- - * This environment call is similar to SET_SYSTEM_AV_INFO for changing - * video parameters, but provides a guarantee that drivers will not be - * reinitialized. - * This can only be called from within retro_run(). - * - * The purpose of this call is to allow a core to alter nominal - * width/heights as well as aspect ratios on-the-fly, which can be - * useful for some emulators to change in run-time. - * - * max_width/max_height arguments are ignored and cannot be changed - * with this call as this could potentially require a reinitialization or a - * non-constant time operation. - * If max_width/max_height are to be changed, SET_SYSTEM_AV_INFO is required. - * - * A frontend must guarantee that this environment call completes in - * constant time. - */ -#define RETRO_ENVIRONMENT_GET_USERNAME 38 - /* const char ** - * Returns the specified username of the frontend, if specified by the user. - * This username can be used as a nickname for a core that has online facilities - * or any other mode where personalization of the user is desirable. - * The returned value can be NULL. - * If this environ callback is used by a core that requires a valid username, - * a default username should be specified by the core. - */ -#define RETRO_ENVIRONMENT_GET_LANGUAGE 39 - /* unsigned * -- - * Returns the specified language of the frontend, if specified by the user. - * It can be used by the core for localization purposes. - */ -#define RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER (40 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_framebuffer * -- - * Returns a preallocated framebuffer which the core can use for rendering - * the frame into when not using SET_HW_RENDER. - * The framebuffer returned from this call must not be used - * after the current call to retro_run() returns. - * - * The goal of this call is to allow zero-copy behavior where a core - * can render directly into video memory, avoiding extra bandwidth cost by copying - * memory from core to video memory. - * - * If this call succeeds and the core renders into it, - * the framebuffer pointer and pitch can be passed to retro_video_refresh_t. - * If the buffer from GET_CURRENT_SOFTWARE_FRAMEBUFFER is to be used, - * the core must pass the exact - * same pointer as returned by GET_CURRENT_SOFTWARE_FRAMEBUFFER; - * i.e. passing a pointer which is offset from the - * buffer is undefined. The width, height and pitch parameters - * must also match exactly to the values obtained from GET_CURRENT_SOFTWARE_FRAMEBUFFER. - * - * It is possible for a frontend to return a different pixel format - * than the one used in SET_PIXEL_FORMAT. This can happen if the frontend - * needs to perform conversion. - * - * It is still valid for a core to render to a different buffer - * even if GET_CURRENT_SOFTWARE_FRAMEBUFFER succeeds. - * - * A frontend must make sure that the pointer obtained from this function is - * writeable (and readable). - */ -#define RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE (41 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* const struct retro_hw_render_interface ** -- - * Returns an API specific rendering interface for accessing API specific data. - * Not all HW rendering APIs support or need this. - * The contents of the returned pointer is specific to the rendering API - * being used. See the various headers like libretro_vulkan.h, etc. - * - * GET_HW_RENDER_INTERFACE cannot be called before context_reset has been called. - * Similarly, after context_destroyed callback returns, - * the contents of the HW_RENDER_INTERFACE are invalidated. - */ -#define RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS (42 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* const bool * -- - * If true, the libretro implementation supports achievements - * either via memory descriptors set with RETRO_ENVIRONMENT_SET_MEMORY_MAPS - * or via retro_get_memory_data/retro_get_memory_size. - * - * This must be called before the first call to retro_run. - */ -#define RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE (43 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* const struct retro_hw_render_context_negotiation_interface * -- - * Sets an interface which lets the libretro core negotiate with frontend how a context is created. - * The semantics of this interface depends on which API is used in SET_HW_RENDER earlier. - * This interface will be used when the frontend is trying to create a HW rendering context, - * so it will be used after SET_HW_RENDER, but before the context_reset callback. - */ -#define RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS 44 - /* uint64_t * -- - * Sets quirk flags associated with serialization. The frontend will zero any flags it doesn't - * recognize or support. Should be set in either retro_init or retro_load_game, but not both. - */ -#define RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT (44 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* N/A (null) * -- - * The frontend will try to use a 'shared' hardware context (mostly applicable - * to OpenGL) when a hardware context is being set up. - * - * Returns true if the frontend supports shared hardware contexts and false - * if the frontend does not support shared hardware contexts. - * - * This will do nothing on its own until SET_HW_RENDER env callbacks are - * being used. - */ -#define RETRO_ENVIRONMENT_GET_VFS_INTERFACE (45 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_vfs_interface_info * -- - * Gets access to the VFS interface. - * VFS presence needs to be queried prior to load_game or any - * get_system/save/other_directory being called to let front end know - * core supports VFS before it starts handing out paths. - * It is recomended to do so in retro_set_environment - */ -#define RETRO_ENVIRONMENT_GET_LED_INTERFACE (46 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_led_interface * -- - * Gets an interface which is used by a libretro core to set - * state of LEDs. - */ -#define RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE (47 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* int * -- - * Tells the core if the frontend wants audio or video. - * If disabled, the frontend will discard the audio or video, - * so the core may decide to skip generating a frame or generating audio. - * This is mainly used for increasing performance. - * Bit 0 (value 1): Enable Video - * Bit 1 (value 2): Enable Audio - * Bit 2 (value 4): Use Fast Savestates. - * Bit 3 (value 8): Hard Disable Audio - * Other bits are reserved for future use and will default to zero. - * If video is disabled: - * * The frontend wants the core to not generate any video, - * including presenting frames via hardware acceleration. - * * The frontend's video frame callback will do nothing. - * * After running the frame, the video output of the next frame should be - * no different than if video was enabled, and saving and loading state - * should have no issues. - * If audio is disabled: - * * The frontend wants the core to not generate any audio. - * * The frontend's audio callbacks will do nothing. - * * After running the frame, the audio output of the next frame should be - * no different than if audio was enabled, and saving and loading state - * should have no issues. - * Fast Savestates: - * * Guaranteed to be created by the same binary that will load them. - * * Will not be written to or read from the disk. - * * Suggest that the core assumes loading state will succeed. - * * Suggest that the core updates its memory buffers in-place if possible. - * * Suggest that the core skips clearing memory. - * * Suggest that the core skips resetting the system. - * * Suggest that the core may skip validation steps. - * Hard Disable Audio: - * * Used for a secondary core when running ahead. - * * Indicates that the frontend will never need audio from the core. - * * Suggests that the core may stop synthesizing audio, but this should not - * compromise emulation accuracy. - * * Audio output for the next frame does not matter, and the frontend will - * never need an accurate audio state in the future. - * * State will never be saved when using Hard Disable Audio. - */ -#define RETRO_ENVIRONMENT_GET_MIDI_INTERFACE (48 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_midi_interface ** -- - * Returns a MIDI interface that can be used for raw data I/O. - */ - -#define RETRO_ENVIRONMENT_GET_FASTFORWARDING (49 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* bool * -- - * Boolean value that indicates whether or not the frontend is in - * fastforwarding mode. - */ - -#define RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE (50 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* float * -- - * Float value that lets us know what target refresh rate - * is curently in use by the frontend. - * - * The core can use the returned value to set an ideal - * refresh rate/framerate. - */ - -#define RETRO_ENVIRONMENT_GET_INPUT_BITMASKS (51 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* bool * -- - * Boolean value that indicates whether or not the frontend supports - * input bitmasks being returned by retro_input_state_t. The advantage - * of this is that retro_input_state_t has to be only called once to - * grab all button states instead of multiple times. - * - * If it returns true, you can pass RETRO_DEVICE_ID_JOYPAD_MASK as 'id' - * to retro_input_state_t (make sure 'device' is set to RETRO_DEVICE_JOYPAD). - * It will return a bitmask of all the digital buttons. - */ - -#define RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION 52 - /* unsigned * -- - * Unsigned value is the API version number of the core options - * interface supported by the frontend. If callback return false, - * API version is assumed to be 0. - * - * In legacy code, core options are set by passing an array of - * retro_variable structs to RETRO_ENVIRONMENT_SET_VARIABLES. - * This may be still be done regardless of the core options - * interface version. - * - * If version is >= 1 however, core options may instead be set by - * passing an array of retro_core_option_definition structs to - * RETRO_ENVIRONMENT_SET_CORE_OPTIONS, or a 2D array of - * retro_core_option_definition structs to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. - * This allows the core to additionally set option sublabel information - * and/or provide localisation support. - * - * If version is >= 2, core options may instead be set by passing - * a retro_core_options_v2 struct to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, - * or an array of retro_core_options_v2 structs to - * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL. This allows the core - * to additionally set optional core option category information - * for frontends with core option category support. - */ - -#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS 53 - /* const struct retro_core_option_definition ** -- - * Allows an implementation to signal the environment - * which variables it might want to check for later using - * GET_VARIABLE. - * This allows the frontend to present these variables to - * a user dynamically. - * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION - * returns an API version of >= 1. - * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. - * This should be called the first time as early as - * possible (ideally in retro_set_environment). - * Afterwards it may be called again for the core to communicate - * updated options to the frontend, but the number of core - * options must not change from the number in the initial call. - * - * 'data' points to an array of retro_core_option_definition structs - * terminated by a { NULL, NULL, NULL, {{0}}, NULL } element. - * retro_core_option_definition::key should be namespaced to not collide - * with other implementations' keys. e.g. A core called - * 'foo' should use keys named as 'foo_option'. - * retro_core_option_definition::desc should contain a human readable - * description of the key. - * retro_core_option_definition::info should contain any additional human - * readable information text that a typical user may need to - * understand the functionality of the option. - * retro_core_option_definition::values is an array of retro_core_option_value - * structs terminated by a { NULL, NULL } element. - * > retro_core_option_definition::values[index].value is an expected option - * value. - * > retro_core_option_definition::values[index].label is a human readable - * label used when displaying the value on screen. If NULL, - * the value itself is used. - * retro_core_option_definition::default_value is the default core option - * setting. It must match one of the expected option values in the - * retro_core_option_definition::values array. If it does not, or the - * default value is NULL, the first entry in the - * retro_core_option_definition::values array is treated as the default. - * - * The number of possible option values should be very limited, - * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. - * i.e. it should be feasible to cycle through options - * without a keyboard. - * - * Example entry: - * { - * "foo_option", - * "Speed hack coprocessor X", - * "Provides increased performance at the expense of reduced accuracy", - * { - * { "false", NULL }, - * { "true", NULL }, - * { "unstable", "Turbo (Unstable)" }, - * { NULL, NULL }, - * }, - * "false" - * } - * - * Only strings are operated on. The possible values will - * generally be displayed and stored as-is by the frontend. - */ - -#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL 54 - /* const struct retro_core_options_intl * -- - * Allows an implementation to signal the environment - * which variables it might want to check for later using - * GET_VARIABLE. - * This allows the frontend to present these variables to - * a user dynamically. - * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION - * returns an API version of >= 1. - * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. - * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. - * This should be called the first time as early as - * possible (ideally in retro_set_environment). - * Afterwards it may be called again for the core to communicate - * updated options to the frontend, but the number of core - * options must not change from the number in the initial call. - * - * This is fundamentally the same as RETRO_ENVIRONMENT_SET_CORE_OPTIONS, - * with the addition of localisation support. The description of the - * RETRO_ENVIRONMENT_SET_CORE_OPTIONS callback should be consulted - * for further details. - * - * 'data' points to a retro_core_options_intl struct. - * - * retro_core_options_intl::us is a pointer to an array of - * retro_core_option_definition structs defining the US English - * core options implementation. It must point to a valid array. - * - * retro_core_options_intl::local is a pointer to an array of - * retro_core_option_definition structs defining core options for - * the current frontend language. It may be NULL (in which case - * retro_core_options_intl::us is used by the frontend). Any items - * missing from this array will be read from retro_core_options_intl::us - * instead. - * - * NOTE: Default core option values are always taken from the - * retro_core_options_intl::us array. Any default values in - * retro_core_options_intl::local array will be ignored. - */ - -#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY 55 - /* struct retro_core_option_display * -- - * - * Allows an implementation to signal the environment to show - * or hide a variable when displaying core options. This is - * considered a *suggestion*. The frontend is free to ignore - * this callback, and its implementation not considered mandatory. - * - * 'data' points to a retro_core_option_display struct - * - * retro_core_option_display::key is a variable identifier - * which has already been set by SET_VARIABLES/SET_CORE_OPTIONS. - * - * retro_core_option_display::visible is a boolean, specifying - * whether variable should be displayed - * - * Note that all core option variables will be set visible by - * default when calling SET_VARIABLES/SET_CORE_OPTIONS. - */ - -#define RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER 56 - /* unsigned * -- - * - * Allows an implementation to ask frontend preferred hardware - * context to use. Core should use this information to deal - * with what specific context to request with SET_HW_RENDER. - * - * 'data' points to an unsigned variable - */ - -#define RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION 57 - /* unsigned * -- - * Unsigned value is the API version number of the disk control - * interface supported by the frontend. If callback return false, - * API version is assumed to be 0. - * - * In legacy code, the disk control interface is defined by passing - * a struct of type retro_disk_control_callback to - * RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE. - * This may be still be done regardless of the disk control - * interface version. - * - * If version is >= 1 however, the disk control interface may - * instead be defined by passing a struct of type - * retro_disk_control_ext_callback to - * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. - * This allows the core to provide additional information about - * disk images to the frontend and/or enables extra - * disk control functionality by the frontend. - */ - -#define RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE 58 - /* const struct retro_disk_control_ext_callback * -- - * Sets an interface which frontend can use to eject and insert - * disk images, and also obtain information about individual - * disk image files registered by the core. - * This is used for games which consist of multiple images and - * must be manually swapped out by the user (e.g. PSX, floppy disk - * based systems). - */ - -#define RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION 59 - /* unsigned * -- - * Unsigned value is the API version number of the message - * interface supported by the frontend. If callback returns - * false, API version is assumed to be 0. - * - * In legacy code, messages may be displayed in an - * implementation-specific manner by passing a struct - * of type retro_message to RETRO_ENVIRONMENT_SET_MESSAGE. - * This may be still be done regardless of the message - * interface version. - * - * If version is >= 1 however, messages may instead be - * displayed by passing a struct of type retro_message_ext - * to RETRO_ENVIRONMENT_SET_MESSAGE_EXT. This allows the - * core to specify message logging level, priority and - * destination (OSD, logging interface or both). - */ - -#define RETRO_ENVIRONMENT_SET_MESSAGE_EXT 60 - /* const struct retro_message_ext * -- - * Sets a message to be displayed in an implementation-specific - * manner for a certain amount of 'frames'. Additionally allows - * the core to specify message logging level, priority and - * destination (OSD, logging interface or both). - * Should not be used for trivial messages, which should simply be - * logged via RETRO_ENVIRONMENT_GET_LOG_INTERFACE (or as a - * fallback, stderr). - */ - -#define RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS 61 - /* unsigned * -- - * Unsigned value is the number of active input devices - * provided by the frontend. This may change between - * frames, but will remain constant for the duration - * of each frame. - * If callback returns true, a core need not poll any - * input device with an index greater than or equal to - * the number of active devices. - * If callback returns false, the number of active input - * devices is unknown. In this case, all input devices - * should be considered active. - */ - -#define RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK 62 - /* const struct retro_audio_buffer_status_callback * -- - * Lets the core know the occupancy level of the frontend - * audio buffer. Can be used by a core to attempt frame - * skipping in order to avoid buffer under-runs. - * A core may pass NULL to disable buffer status reporting - * in the frontend. - */ - -#define RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY 63 - /* const unsigned * -- - * Sets minimum frontend audio latency in milliseconds. - * Resultant audio latency may be larger than set value, - * or smaller if a hardware limit is encountered. A frontend - * is expected to honour requests up to 512 ms. - * - * - If value is less than current frontend - * audio latency, callback has no effect - * - If value is zero, default frontend audio - * latency is set - * - * May be used by a core to increase audio latency and - * therefore decrease the probability of buffer under-runs - * (crackling) when performing 'intensive' operations. - * A core utilising RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK - * to implement audio-buffer-based frame skipping may achieve - * optimal results by setting the audio latency to a 'high' - * (typically 6x or 8x) integer multiple of the expected - * frame time. - * - * WARNING: This can only be called from within retro_run(). - * Calling this can require a full reinitialization of audio - * drivers in the frontend, so it is important to call it very - * sparingly, and usually only with the users explicit consent. - * An eventual driver reinitialize will happen so that audio - * callbacks happening after this call within the same retro_run() - * call will target the newly initialized driver. - */ - -#define RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE 64 - /* const struct retro_fastforwarding_override * -- - * Used by a libretro core to override the current - * fastforwarding mode of the frontend. - * If NULL is passed to this function, the frontend - * will return true if fastforwarding override - * functionality is supported (no change in - * fastforwarding state will occur in this case). - */ - -#define RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE 65 - /* const struct retro_system_content_info_override * -- - * Allows an implementation to override 'global' content - * info parameters reported by retro_get_system_info(). - * Overrides also affect subsystem content info parameters - * set via RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO. - * This function must be called inside retro_set_environment(). - * If callback returns false, content info overrides - * are unsupported by the frontend, and will be ignored. - * If callback returns true, extended game info may be - * retrieved by calling RETRO_ENVIRONMENT_GET_GAME_INFO_EXT - * in retro_load_game() or retro_load_game_special(). - * - * 'data' points to an array of retro_system_content_info_override - * structs terminated by a { NULL, false, false } element. - * If 'data' is NULL, no changes will be made to the frontend; - * a core may therefore pass NULL in order to test whether - * the RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE and - * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT callbacks are supported - * by the frontend. - * - * For struct member descriptions, see the definition of - * struct retro_system_content_info_override. - * - * Example: - * - * - struct retro_system_info: - * { - * "My Core", // library_name - * "v1.0", // library_version - * "m3u|md|cue|iso|chd|sms|gg|sg", // valid_extensions - * true, // need_fullpath - * false // block_extract - * } - * - * - Array of struct retro_system_content_info_override: - * { - * { - * "md|sms|gg", // extensions - * false, // need_fullpath - * true // persistent_data - * }, - * { - * "sg", // extensions - * false, // need_fullpath - * false // persistent_data - * }, - * { NULL, false, false } - * } - * - * Result: - * - Files of type m3u, cue, iso, chd will not be - * loaded by the frontend. Frontend will pass a - * valid path to the core, and core will handle - * loading internally - * - Files of type md, sms, gg will be loaded by - * the frontend. A valid memory buffer will be - * passed to the core. This memory buffer will - * remain valid until retro_deinit() returns - * - Files of type sg will be loaded by the frontend. - * A valid memory buffer will be passed to the core. - * This memory buffer will remain valid until - * retro_load_game() (or retro_load_game_special()) - * returns - * - * NOTE: If an extension is listed multiple times in - * an array of retro_system_content_info_override - * structs, only the first instance will be registered - */ - -#define RETRO_ENVIRONMENT_GET_GAME_INFO_EXT 66 - /* const struct retro_game_info_ext ** -- - * Allows an implementation to fetch extended game - * information, providing additional content path - * and memory buffer status details. - * This function may only be called inside - * retro_load_game() or retro_load_game_special(). - * If callback returns false, extended game information - * is unsupported by the frontend. In this case, only - * regular retro_game_info will be available. - * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT is guaranteed - * to return true if RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE - * returns true. - * - * 'data' points to an array of retro_game_info_ext structs. - * - * For struct member descriptions, see the definition of - * struct retro_game_info_ext. - * - * - If function is called inside retro_load_game(), - * the retro_game_info_ext array is guaranteed to - * have a size of 1 - i.e. the returned pointer may - * be used to access directly the members of the - * first retro_game_info_ext struct, for example: - * - * struct retro_game_info_ext *game_info_ext; - * if (environ_cb(RETRO_ENVIRONMENT_GET_GAME_INFO_EXT, &game_info_ext)) - * printf("Content Directory: %s\n", game_info_ext->dir); - * - * - If the function is called inside retro_load_game_special(), - * the retro_game_info_ext array is guaranteed to have a - * size equal to the num_info argument passed to - * retro_load_game_special() - */ - -#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 67 - /* const struct retro_core_options_v2 * -- - * Allows an implementation to signal the environment - * which variables it might want to check for later using - * GET_VARIABLE. - * This allows the frontend to present these variables to - * a user dynamically. - * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION - * returns an API version of >= 2. - * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. - * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. - * This should be called the first time as early as - * possible (ideally in retro_set_environment). - * Afterwards it may be called again for the core to communicate - * updated options to the frontend, but the number of core - * options must not change from the number in the initial call. - * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API - * version of >= 2, this callback is guaranteed to succeed - * (i.e. callback return value does not indicate success) - * If callback returns true, frontend has core option category - * support. - * If callback returns false, frontend does not have core option - * category support. - * - * 'data' points to a retro_core_options_v2 struct, containing - * of two pointers: - * - retro_core_options_v2::categories is an array of - * retro_core_option_v2_category structs terminated by a - * { NULL, NULL, NULL } element. If retro_core_options_v2::categories - * is NULL, all core options will have no category and will be shown - * at the top level of the frontend core option interface. If frontend - * does not have core option category support, categories array will - * be ignored. - * - retro_core_options_v2::definitions is an array of - * retro_core_option_v2_definition structs terminated by a - * { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL } - * element. - * - * >> retro_core_option_v2_category notes: - * - * - retro_core_option_v2_category::key should contain string - * that uniquely identifies the core option category. Valid - * key characters are [a-z, A-Z, 0-9, _, -] - * Namespace collisions with other implementations' category - * keys are permitted. - * - retro_core_option_v2_category::desc should contain a human - * readable description of the category key. - * - retro_core_option_v2_category::info should contain any - * additional human readable information text that a typical - * user may need to understand the nature of the core option - * category. - * - * Example entry: - * { - * "advanced_settings", - * "Advanced", - * "Options affecting low-level emulation performance and accuracy." - * } - * - * >> retro_core_option_v2_definition notes: - * - * - retro_core_option_v2_definition::key should be namespaced to not - * collide with other implementations' keys. e.g. A core called - * 'foo' should use keys named as 'foo_option'. Valid key characters - * are [a-z, A-Z, 0-9, _, -]. - * - retro_core_option_v2_definition::desc should contain a human readable - * description of the key. Will be used when the frontend does not - * have core option category support. Examples: "Aspect Ratio" or - * "Video > Aspect Ratio". - * - retro_core_option_v2_definition::desc_categorized should contain a - * human readable description of the key, which will be used when - * frontend has core option category support. Example: "Aspect Ratio", - * where associated retro_core_option_v2_category::desc is "Video". - * If empty or NULL, the string specified by - * retro_core_option_v2_definition::desc will be used instead. - * retro_core_option_v2_definition::desc_categorized will be ignored - * if retro_core_option_v2_definition::category_key is empty or NULL. - * - retro_core_option_v2_definition::info should contain any additional - * human readable information text that a typical user may need to - * understand the functionality of the option. - * - retro_core_option_v2_definition::info_categorized should contain - * any additional human readable information text that a typical user - * may need to understand the functionality of the option, and will be - * used when frontend has core option category support. This is provided - * to accommodate the case where info text references an option by - * name/desc, and the desc/desc_categorized text for that option differ. - * If empty or NULL, the string specified by - * retro_core_option_v2_definition::info will be used instead. - * retro_core_option_v2_definition::info_categorized will be ignored - * if retro_core_option_v2_definition::category_key is empty or NULL. - * - retro_core_option_v2_definition::category_key should contain a - * category identifier (e.g. "video" or "audio") that will be - * assigned to the core option if frontend has core option category - * support. A categorized option will be shown in a subsection/ - * submenu of the frontend core option interface. If key is empty - * or NULL, or if key does not match one of the - * retro_core_option_v2_category::key values in the associated - * retro_core_option_v2_category array, option will have no category - * and will be shown at the top level of the frontend core option - * interface. - * - retro_core_option_v2_definition::values is an array of - * retro_core_option_value structs terminated by a { NULL, NULL } - * element. - * --> retro_core_option_v2_definition::values[index].value is an - * expected option value. - * --> retro_core_option_v2_definition::values[index].label is a - * human readable label used when displaying the value on screen. - * If NULL, the value itself is used. - * - retro_core_option_v2_definition::default_value is the default - * core option setting. It must match one of the expected option - * values in the retro_core_option_v2_definition::values array. If - * it does not, or the default value is NULL, the first entry in the - * retro_core_option_v2_definition::values array is treated as the - * default. - * - * The number of possible option values should be very limited, - * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. - * i.e. it should be feasible to cycle through options - * without a keyboard. - * - * Example entries: - * - * - Uncategorized: - * - * { - * "foo_option", - * "Speed hack coprocessor X", - * NULL, - * "Provides increased performance at the expense of reduced accuracy.", - * NULL, - * NULL, - * { - * { "false", NULL }, - * { "true", NULL }, - * { "unstable", "Turbo (Unstable)" }, - * { NULL, NULL }, - * }, - * "false" - * } - * - * - Categorized: - * - * { - * "foo_option", - * "Advanced > Speed hack coprocessor X", - * "Speed hack coprocessor X", - * "Setting 'Advanced > Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", - * "Setting 'Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", - * "advanced_settings", - * { - * { "false", NULL }, - * { "true", NULL }, - * { "unstable", "Turbo (Unstable)" }, - * { NULL, NULL }, - * }, - * "false" - * } - * - * Only strings are operated on. The possible values will - * generally be displayed and stored as-is by the frontend. - */ - -#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL 68 - /* const struct retro_core_options_v2_intl * -- - * Allows an implementation to signal the environment - * which variables it might want to check for later using - * GET_VARIABLE. - * This allows the frontend to present these variables to - * a user dynamically. - * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION - * returns an API version of >= 2. - * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. - * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. - * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. - * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2. - * This should be called the first time as early as - * possible (ideally in retro_set_environment). - * Afterwards it may be called again for the core to communicate - * updated options to the frontend, but the number of core - * options must not change from the number in the initial call. - * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API - * version of >= 2, this callback is guaranteed to succeed - * (i.e. callback return value does not indicate success) - * If callback returns true, frontend has core option category - * support. - * If callback returns false, frontend does not have core option - * category support. - * - * This is fundamentally the same as RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, - * with the addition of localisation support. The description of the - * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 callback should be consulted - * for further details. - * - * 'data' points to a retro_core_options_v2_intl struct. - * - * - retro_core_options_v2_intl::us is a pointer to a - * retro_core_options_v2 struct defining the US English - * core options implementation. It must point to a valid struct. - * - * - retro_core_options_v2_intl::local is a pointer to a - * retro_core_options_v2 struct defining core options for - * the current frontend language. It may be NULL (in which case - * retro_core_options_v2_intl::us is used by the frontend). Any items - * missing from this struct will be read from - * retro_core_options_v2_intl::us instead. - * - * NOTE: Default core option values are always taken from the - * retro_core_options_v2_intl::us struct. Any default values in - * the retro_core_options_v2_intl::local struct will be ignored. - */ - -#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK 69 - /* const struct retro_core_options_update_display_callback * -- - * Allows a frontend to signal that a core must update - * the visibility of any dynamically hidden core options, - * and enables the frontend to detect visibility changes. - * Used by the frontend to update the menu display status - * of core options without requiring a call of retro_run(). - * Must be called in retro_set_environment(). - */ - -#define RETRO_ENVIRONMENT_SET_VARIABLE 70 - /* const struct retro_variable * -- - * Allows an implementation to notify the frontend - * that a core option value has changed. - * - * retro_variable::key and retro_variable::value - * must match strings that have been set previously - * via one of the following: - * - * - RETRO_ENVIRONMENT_SET_VARIABLES - * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS - * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL - * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 - * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL - * - * After changing a core option value via this - * callback, RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE - * will return true. - * - * If data is NULL, no changes will be registered - * and the callback will return true; an - * implementation may therefore pass NULL in order - * to test whether the callback is supported. - */ - -#define RETRO_ENVIRONMENT_GET_THROTTLE_STATE (71 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_throttle_state * -- - * Allows an implementation to get details on the actual rate - * the frontend is attempting to call retro_run(). - */ - -#define RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT (72 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* int * -- - * Tells the core about the context the frontend is asking for savestate. - * (see enum retro_savestate_context) - */ - -#define RETRO_ENVIRONMENT_GET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT (73 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_hw_render_context_negotiation_interface * -- - * Before calling SET_HW_RNEDER_CONTEXT_NEGOTIATION_INTERFACE, a core can query - * which version of the interface is supported. - * - * Frontend looks at interface_type and returns the maximum supported - * context negotiation interface version. - * If the interface_type is not supported or recognized by the frontend, a version of 0 - * must be returned in interface_version and true is returned by frontend. - * - * If this environment call returns true with interface_version greater than 0, - * a core can always use a negotiation interface version larger than what the frontend returns, but only - * earlier versions of the interface will be used by the frontend. - * A frontend must not reject a negotiation interface version that is larger than - * what the frontend supports. Instead, the frontend will use the older entry points that it recognizes. - * If this is incompatible with a particular core's requirements, it can error out early. - * - * Backwards compatibility note: - * This environment call was introduced after Vulkan v1 context negotiation. - * If this environment call is not supported by frontend - i.e. the environment call returns false - - * only Vulkan v1 context negotiation is supported (if Vulkan HW rendering is supported at all). - * If a core uses Vulkan negotiation interface with version > 1, negotiation may fail unexpectedly. - * All future updates to the context negotiation interface implies that frontend must support - * this environment call to query support. - */ - -#define RETRO_ENVIRONMENT_GET_JIT_CAPABLE 74 - /* bool * -- - * Result is set to true if the frontend has already verified JIT can be - * used, mainly for use iOS/tvOS. On other platforms the result is true. - */ - -#define RETRO_ENVIRONMENT_GET_MICROPHONE_INTERFACE (75 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_microphone_interface * -- - * Returns an interface that can be used to receive input from the microphone driver. - * - * Returns true if microphone support is available, - * even if no microphones are plugged in. - * Returns false if mic support is disabled or unavailable. - * - * This callback can be invoked at any time, - * even before the microphone driver is ready. - */ - -#define RETRO_ENVIRONMENT_SET_NETPACKET_INTERFACE 76 - /* const struct retro_netpacket_callback * -- - * When set, a core gains control over network packets sent and - * received during a multiplayer session. This can be used to - * emulate multiplayer games that were originally played on two - * or more separate consoles or computers connected together. - * - * The frontend will take care of connecting players together, - * and the core only needs to send the actual data as needed for - * the emulation, while handshake and connection management happen - * in the background. - * - * When two or more players are connected and this interface has - * been set, time manipulation features (such as pausing, slow motion, - * fast forward, rewinding, save state loading, etc.) are disabled to - * avoid interrupting communication. - * - * Should be set in either retro_init or retro_load_game, but not both. - * - * When not set, a frontend may use state serialization-based - * multiplayer, where a deterministic core supporting multiple - * input devices does not need to take any action on its own. - */ - -#define RETRO_ENVIRONMENT_GET_DEVICE_POWER (77 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* struct retro_device_power * -- - * Returns the device's current power state as reported by the frontend. - * This is useful for emulating the battery level in handheld consoles, - * or for reducing power consumption when on battery power. - * - * The return value indicates whether the frontend can provide this information, - * even if the parameter is NULL. - * - * If the frontend does not support this functionality, - * then the provided argument will remain unchanged. - * - * Note that this environment call describes the power state for the entire device, - * not for individual peripherals like controllers. - */ - -/* VFS functionality */ - -/* File paths: - * File paths passed as parameters when using this API shall be well formed UNIX-style, - * using "/" (unquoted forward slash) as directory separator regardless of the platform's native separator. - * Paths shall also include at least one forward slash ("game.bin" is an invalid path, use "./game.bin" instead). - * Other than the directory separator, cores shall not make assumptions about path format: - * "C:/path/game.bin", "http://example.com/game.bin", "#game/game.bin", "./game.bin" (without quotes) are all valid paths. - * Cores may replace the basename or remove path components from the end, and/or add new components; - * however, cores shall not append "./", "../" or multiple consecutive forward slashes ("//") to paths they request to front end. - * The frontend is encouraged to make such paths work as well as it can, but is allowed to give up if the core alters paths too much. - * Frontends are encouraged, but not required, to support native file system paths (modulo replacing the directory separator, if applicable). - * Cores are allowed to try using them, but must remain functional if the front rejects such requests. - * Cores are encouraged to use the libretro-common filestream functions for file I/O, - * as they seamlessly integrate with VFS, deal with directory separator replacement as appropriate - * and provide platform-specific fallbacks in cases where front ends do not support VFS. */ - -/* Opaque file handle - * Introduced in VFS API v1 */ -struct retro_vfs_file_handle; - -/* Opaque directory handle - * Introduced in VFS API v3 */ -struct retro_vfs_dir_handle; - -/* File open flags - * Introduced in VFS API v1 */ -#define RETRO_VFS_FILE_ACCESS_READ (1 << 0) /* Read only mode */ -#define RETRO_VFS_FILE_ACCESS_WRITE (1 << 1) /* Write only mode, discard contents and overwrites existing file unless RETRO_VFS_FILE_ACCESS_UPDATE is also specified */ -#define RETRO_VFS_FILE_ACCESS_READ_WRITE (RETRO_VFS_FILE_ACCESS_READ | RETRO_VFS_FILE_ACCESS_WRITE) /* Read-write mode, discard contents and overwrites existing file unless RETRO_VFS_FILE_ACCESS_UPDATE is also specified*/ -#define RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING (1 << 2) /* Prevents discarding content of existing files opened for writing */ - -/* These are only hints. The frontend may choose to ignore them. Other than RAM/CPU/etc use, - and how they react to unlikely external interference (for example someone else writing to that file, - or the file's server going down), behavior will not change. */ -#define RETRO_VFS_FILE_ACCESS_HINT_NONE (0) -/* Indicate that the file will be accessed many times. The frontend should aggressively cache everything. */ -#define RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS (1 << 0) - -/* Seek positions */ -#define RETRO_VFS_SEEK_POSITION_START 0 -#define RETRO_VFS_SEEK_POSITION_CURRENT 1 -#define RETRO_VFS_SEEK_POSITION_END 2 - -/* stat() result flags - * Introduced in VFS API v3 */ -#define RETRO_VFS_STAT_IS_VALID (1 << 0) -#define RETRO_VFS_STAT_IS_DIRECTORY (1 << 1) -#define RETRO_VFS_STAT_IS_CHARACTER_SPECIAL (1 << 2) - -/* Get path from opaque handle. Returns the exact same path passed to file_open when getting the handle - * Introduced in VFS API v1 */ -typedef const char *(RETRO_CALLCONV *retro_vfs_get_path_t)(struct retro_vfs_file_handle *stream); - -/* Open a file for reading or writing. If path points to a directory, this will - * fail. Returns the opaque file handle, or NULL for error. - * Introduced in VFS API v1 */ -typedef struct retro_vfs_file_handle *(RETRO_CALLCONV *retro_vfs_open_t)(const char *path, unsigned mode, unsigned hints); - -/* Close the file and release its resources. Must be called if open_file returns non-NULL. Returns 0 on success, -1 on failure. - * Whether the call succeeds ot not, the handle passed as parameter becomes invalid and should no longer be used. - * Introduced in VFS API v1 */ -typedef int (RETRO_CALLCONV *retro_vfs_close_t)(struct retro_vfs_file_handle *stream); - -/* Return the size of the file in bytes, or -1 for error. - * Introduced in VFS API v1 */ -typedef int64_t (RETRO_CALLCONV *retro_vfs_size_t)(struct retro_vfs_file_handle *stream); - -/* Truncate file to specified size. Returns 0 on success or -1 on error - * Introduced in VFS API v2 */ -typedef int64_t (RETRO_CALLCONV *retro_vfs_truncate_t)(struct retro_vfs_file_handle *stream, int64_t length); - -/* Get the current read / write position for the file. Returns -1 for error. - * Introduced in VFS API v1 */ -typedef int64_t (RETRO_CALLCONV *retro_vfs_tell_t)(struct retro_vfs_file_handle *stream); - -/* Set the current read/write position for the file. Returns the new position, -1 for error. - * Introduced in VFS API v1 */ -typedef int64_t (RETRO_CALLCONV *retro_vfs_seek_t)(struct retro_vfs_file_handle *stream, int64_t offset, int seek_position); - -/* Read data from a file. Returns the number of bytes read, or -1 for error. - * Introduced in VFS API v1 */ -typedef int64_t (RETRO_CALLCONV *retro_vfs_read_t)(struct retro_vfs_file_handle *stream, void *s, uint64_t len); - -/* Write data to a file. Returns the number of bytes written, or -1 for error. - * Introduced in VFS API v1 */ -typedef int64_t (RETRO_CALLCONV *retro_vfs_write_t)(struct retro_vfs_file_handle *stream, const void *s, uint64_t len); - -/* Flush pending writes to file, if using buffered IO. Returns 0 on sucess, or -1 on failure. - * Introduced in VFS API v1 */ -typedef int (RETRO_CALLCONV *retro_vfs_flush_t)(struct retro_vfs_file_handle *stream); - -/* Delete the specified file. Returns 0 on success, -1 on failure - * Introduced in VFS API v1 */ -typedef int (RETRO_CALLCONV *retro_vfs_remove_t)(const char *path); - -/* Rename the specified file. Returns 0 on success, -1 on failure - * Introduced in VFS API v1 */ -typedef int (RETRO_CALLCONV *retro_vfs_rename_t)(const char *old_path, const char *new_path); - -/* Stat the specified file. Retruns a bitmask of RETRO_VFS_STAT_* flags, none are set if path was not valid. - * Additionally stores file size in given variable, unless NULL is given. - * Introduced in VFS API v3 */ -typedef int (RETRO_CALLCONV *retro_vfs_stat_t)(const char *path, int32_t *size); - -/* Create the specified directory. Returns 0 on success, -1 on unknown failure, -2 if already exists. - * Introduced in VFS API v3 */ -typedef int (RETRO_CALLCONV *retro_vfs_mkdir_t)(const char *dir); - -/* Open the specified directory for listing. Returns the opaque dir handle, or NULL for error. - * Support for the include_hidden argument may vary depending on the platform. - * Introduced in VFS API v3 */ -typedef struct retro_vfs_dir_handle *(RETRO_CALLCONV *retro_vfs_opendir_t)(const char *dir, bool include_hidden); - -/* Read the directory entry at the current position, and move the read pointer to the next position. - * Returns true on success, false if already on the last entry. - * Introduced in VFS API v3 */ -typedef bool (RETRO_CALLCONV *retro_vfs_readdir_t)(struct retro_vfs_dir_handle *dirstream); - -/* Get the name of the last entry read. Returns a string on success, or NULL for error. - * The returned string pointer is valid until the next call to readdir or closedir. - * Introduced in VFS API v3 */ -typedef const char *(RETRO_CALLCONV *retro_vfs_dirent_get_name_t)(struct retro_vfs_dir_handle *dirstream); - -/* Check if the last entry read was a directory. Returns true if it was, false otherwise (or on error). - * Introduced in VFS API v3 */ -typedef bool (RETRO_CALLCONV *retro_vfs_dirent_is_dir_t)(struct retro_vfs_dir_handle *dirstream); - -/* Close the directory and release its resources. Must be called if opendir returns non-NULL. Returns 0 on success, -1 on failure. - * Whether the call succeeds ot not, the handle passed as parameter becomes invalid and should no longer be used. - * Introduced in VFS API v3 */ -typedef int (RETRO_CALLCONV *retro_vfs_closedir_t)(struct retro_vfs_dir_handle *dirstream); - -struct retro_vfs_interface -{ - /* VFS API v1 */ - retro_vfs_get_path_t get_path; - retro_vfs_open_t open; - retro_vfs_close_t close; - retro_vfs_size_t size; - retro_vfs_tell_t tell; - retro_vfs_seek_t seek; - retro_vfs_read_t read; - retro_vfs_write_t write; - retro_vfs_flush_t flush; - retro_vfs_remove_t remove; - retro_vfs_rename_t rename; - /* VFS API v2 */ - retro_vfs_truncate_t truncate; - /* VFS API v3 */ - retro_vfs_stat_t stat; - retro_vfs_mkdir_t mkdir; - retro_vfs_opendir_t opendir; - retro_vfs_readdir_t readdir; - retro_vfs_dirent_get_name_t dirent_get_name; - retro_vfs_dirent_is_dir_t dirent_is_dir; - retro_vfs_closedir_t closedir; -}; - -struct retro_vfs_interface_info -{ - /* Set by core: should this be higher than the version the front end supports, - * front end will return false in the RETRO_ENVIRONMENT_GET_VFS_INTERFACE call - * Introduced in VFS API v1 */ - uint32_t required_interface_version; - - /* Frontend writes interface pointer here. The frontend also sets the actual - * version, must be at least required_interface_version. - * Introduced in VFS API v1 */ - struct retro_vfs_interface *iface; -}; - -enum retro_hw_render_interface_type -{ - RETRO_HW_RENDER_INTERFACE_VULKAN = 0, - RETRO_HW_RENDER_INTERFACE_D3D9 = 1, - RETRO_HW_RENDER_INTERFACE_D3D10 = 2, - RETRO_HW_RENDER_INTERFACE_D3D11 = 3, - RETRO_HW_RENDER_INTERFACE_D3D12 = 4, - RETRO_HW_RENDER_INTERFACE_GSKIT_PS2 = 5, - RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX -}; - -/* Base struct. All retro_hw_render_interface_* types - * contain at least these fields. */ -struct retro_hw_render_interface -{ - enum retro_hw_render_interface_type interface_type; - unsigned interface_version; -}; - -typedef void (RETRO_CALLCONV *retro_set_led_state_t)(int led, int state); -struct retro_led_interface -{ - retro_set_led_state_t set_led_state; -}; - -/* Retrieves the current state of the MIDI input. - * Returns true if it's enabled, false otherwise. */ -typedef bool (RETRO_CALLCONV *retro_midi_input_enabled_t)(void); - -/* Retrieves the current state of the MIDI output. - * Returns true if it's enabled, false otherwise */ -typedef bool (RETRO_CALLCONV *retro_midi_output_enabled_t)(void); - -/* Reads next byte from the input stream. - * Returns true if byte is read, false otherwise. */ -typedef bool (RETRO_CALLCONV *retro_midi_read_t)(uint8_t *byte); - -/* Writes byte to the output stream. - * 'delta_time' is in microseconds and represent time elapsed since previous write. - * Returns true if byte is written, false otherwise. */ -typedef bool (RETRO_CALLCONV *retro_midi_write_t)(uint8_t byte, uint32_t delta_time); - -/* Flushes previously written data. - * Returns true if successful, false otherwise. */ -typedef bool (RETRO_CALLCONV *retro_midi_flush_t)(void); - -struct retro_midi_interface -{ - retro_midi_input_enabled_t input_enabled; - retro_midi_output_enabled_t output_enabled; - retro_midi_read_t read; - retro_midi_write_t write; - retro_midi_flush_t flush; -}; - -enum retro_hw_render_context_negotiation_interface_type -{ - RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_VULKAN = 0, - RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_DUMMY = INT_MAX -}; - -/* Base struct. All retro_hw_render_context_negotiation_interface_* types - * contain at least these fields. */ -struct retro_hw_render_context_negotiation_interface -{ - enum retro_hw_render_context_negotiation_interface_type interface_type; - unsigned interface_version; -}; - -/* Serialized state is incomplete in some way. Set if serialization is - * usable in typical end-user cases but should not be relied upon to - * implement frame-sensitive frontend features such as netplay or - * rerecording. */ -#define RETRO_SERIALIZATION_QUIRK_INCOMPLETE (1 << 0) -/* The core must spend some time initializing before serialization is - * supported. retro_serialize() will initially fail; retro_unserialize() - * and retro_serialize_size() may or may not work correctly either. */ -#define RETRO_SERIALIZATION_QUIRK_MUST_INITIALIZE (1 << 1) -/* Serialization size may change within a session. */ -#define RETRO_SERIALIZATION_QUIRK_CORE_VARIABLE_SIZE (1 << 2) -/* Set by the frontend to acknowledge that it supports variable-sized - * states. */ -#define RETRO_SERIALIZATION_QUIRK_FRONT_VARIABLE_SIZE (1 << 3) -/* Serialized state can only be loaded during the same session. */ -#define RETRO_SERIALIZATION_QUIRK_SINGLE_SESSION (1 << 4) -/* Serialized state cannot be loaded on an architecture with a different - * endianness from the one it was saved on. */ -#define RETRO_SERIALIZATION_QUIRK_ENDIAN_DEPENDENT (1 << 5) -/* Serialized state cannot be loaded on a different platform from the one it - * was saved on for reasons other than endianness, such as word size - * dependence */ -#define RETRO_SERIALIZATION_QUIRK_PLATFORM_DEPENDENT (1 << 6) - -#define RETRO_MEMDESC_CONST (1 << 0) /* The frontend will never change this memory area once retro_load_game has returned. */ -#define RETRO_MEMDESC_BIGENDIAN (1 << 1) /* The memory area contains big endian data. Default is little endian. */ -#define RETRO_MEMDESC_SYSTEM_RAM (1 << 2) /* The memory area is system RAM. This is main RAM of the gaming system. */ -#define RETRO_MEMDESC_SAVE_RAM (1 << 3) /* The memory area is save RAM. This RAM is usually found on a game cartridge, backed up by a battery. */ -#define RETRO_MEMDESC_VIDEO_RAM (1 << 4) /* The memory area is video RAM (VRAM) */ -#define RETRO_MEMDESC_ALIGN_2 (1 << 16) /* All memory access in this area is aligned to their own size, or 2, whichever is smaller. */ -#define RETRO_MEMDESC_ALIGN_4 (2 << 16) -#define RETRO_MEMDESC_ALIGN_8 (3 << 16) -#define RETRO_MEMDESC_MINSIZE_2 (1 << 24) /* All memory in this region is accessed at least 2 bytes at the time. */ -#define RETRO_MEMDESC_MINSIZE_4 (2 << 24) -#define RETRO_MEMDESC_MINSIZE_8 (3 << 24) -struct retro_memory_descriptor -{ - uint64_t flags; - - /* Pointer to the start of the relevant ROM or RAM chip. - * It's strongly recommended to use 'offset' if possible, rather than - * doing math on the pointer. - * - * If the same byte is mapped my multiple descriptors, their descriptors - * must have the same pointer. - * If 'start' does not point to the first byte in the pointer, put the - * difference in 'offset' instead. - * - * May be NULL if there's nothing usable here (e.g. hardware registers and - * open bus). No flags should be set if the pointer is NULL. - * It's recommended to minimize the number of descriptors if possible, - * but not mandatory. */ - void *ptr; - size_t offset; - - /* This is the location in the emulated address space - * where the mapping starts. */ - size_t start; - - /* Which bits must be same as in 'start' for this mapping to apply. - * The first memory descriptor to claim a certain byte is the one - * that applies. - * A bit which is set in 'start' must also be set in this. - * Can be zero, in which case each byte is assumed mapped exactly once. - * In this case, 'len' must be a power of two. */ - size_t select; - - /* If this is nonzero, the set bits are assumed not connected to the - * memory chip's address pins. */ - size_t disconnect; - - /* This one tells the size of the current memory area. - * If, after start+disconnect are applied, the address is higher than - * this, the highest bit of the address is cleared. - * - * If the address is still too high, the next highest bit is cleared. - * Can be zero, in which case it's assumed to be infinite (as limited - * by 'select' and 'disconnect'). */ - size_t len; - - /* To go from emulated address to physical address, the following - * order applies: - * Subtract 'start', pick off 'disconnect', apply 'len', add 'offset'. */ - - /* The address space name must consist of only a-zA-Z0-9_-, - * should be as short as feasible (maximum length is 8 plus the NUL), - * and may not be any other address space plus one or more 0-9A-F - * at the end. - * However, multiple memory descriptors for the same address space is - * allowed, and the address space name can be empty. NULL is treated - * as empty. - * - * Address space names are case sensitive, but avoid lowercase if possible. - * The same pointer may exist in multiple address spaces. - * - * Examples: - * blank+blank - valid (multiple things may be mapped in the same namespace) - * 'Sp'+'Sp' - valid (multiple things may be mapped in the same namespace) - * 'A'+'B' - valid (neither is a prefix of each other) - * 'S'+blank - valid ('S' is not in 0-9A-F) - * 'a'+blank - valid ('a' is not in 0-9A-F) - * 'a'+'A' - valid (neither is a prefix of each other) - * 'AR'+blank - valid ('R' is not in 0-9A-F) - * 'ARB'+blank - valid (the B can't be part of the address either, because - * there is no namespace 'AR') - * blank+'B' - not valid, because it's ambigous which address space B1234 - * would refer to. - * The length can't be used for that purpose; the frontend may want - * to append arbitrary data to an address, without a separator. */ - const char *addrspace; - - /* TODO: When finalizing this one, add a description field, which should be - * "WRAM" or something roughly equally long. */ - - /* TODO: When finalizing this one, replace 'select' with 'limit', which tells - * which bits can vary and still refer to the same address (limit = ~select). - * TODO: limit? range? vary? something else? */ - - /* TODO: When finalizing this one, if 'len' is above what 'select' (or - * 'limit') allows, it's bankswitched. Bankswitched data must have both 'len' - * and 'select' != 0, and the mappings don't tell how the system switches the - * banks. */ - - /* TODO: When finalizing this one, fix the 'len' bit removal order. - * For len=0x1800, pointer 0x1C00 should go to 0x1400, not 0x0C00. - * Algorithm: Take bits highest to lowest, but if it goes above len, clear - * the most recent addition and continue on the next bit. - * TODO: Can the above be optimized? Is "remove the lowest bit set in both - * pointer and 'len'" equivalent? */ - - /* TODO: Some emulators (MAME?) emulate big endian systems by only accessing - * the emulated memory in 32-bit chunks, native endian. But that's nothing - * compared to Darek Mihocka - * (section Emulation 103 - Nearly Free Byte Reversal) - he flips the ENTIRE - * RAM backwards! I'll want to represent both of those, via some flags. - * - * I suspect MAME either didn't think of that idea, or don't want the #ifdef. - * Not sure which, nor do I really care. */ - - /* TODO: Some of those flags are unused and/or don't really make sense. Clean - * them up. */ -}; - -/* The frontend may use the largest value of 'start'+'select' in a - * certain namespace to infer the size of the address space. - * - * If the address space is larger than that, a mapping with .ptr=NULL - * should be at the end of the array, with .select set to all ones for - * as long as the address space is big. - * - * Sample descriptors (minus .ptr, and RETRO_MEMFLAG_ on the flags): - * SNES WRAM: - * .start=0x7E0000, .len=0x20000 - * (Note that this must be mapped before the ROM in most cases; some of the - * ROM mappers - * try to claim $7E0000, or at least $7E8000.) - * SNES SPC700 RAM: - * .addrspace="S", .len=0x10000 - * SNES WRAM mirrors: - * .flags=MIRROR, .start=0x000000, .select=0xC0E000, .len=0x2000 - * .flags=MIRROR, .start=0x800000, .select=0xC0E000, .len=0x2000 - * SNES WRAM mirrors, alternate equivalent descriptor: - * .flags=MIRROR, .select=0x40E000, .disconnect=~0x1FFF - * (Various similar constructions can be created by combining parts of - * the above two.) - * SNES LoROM (512KB, mirrored a couple of times): - * .flags=CONST, .start=0x008000, .select=0x408000, .disconnect=0x8000, .len=512*1024 - * .flags=CONST, .start=0x400000, .select=0x400000, .disconnect=0x8000, .len=512*1024 - * SNES HiROM (4MB): - * .flags=CONST, .start=0x400000, .select=0x400000, .len=4*1024*1024 - * .flags=CONST, .offset=0x8000, .start=0x008000, .select=0x408000, .len=4*1024*1024 - * SNES ExHiROM (8MB): - * .flags=CONST, .offset=0, .start=0xC00000, .select=0xC00000, .len=4*1024*1024 - * .flags=CONST, .offset=4*1024*1024, .start=0x400000, .select=0xC00000, .len=4*1024*1024 - * .flags=CONST, .offset=0x8000, .start=0x808000, .select=0xC08000, .len=4*1024*1024 - * .flags=CONST, .offset=4*1024*1024+0x8000, .start=0x008000, .select=0xC08000, .len=4*1024*1024 - * Clarify the size of the address space: - * .ptr=NULL, .select=0xFFFFFF - * .len can be implied by .select in many of them, but was included for clarity. - */ - -struct retro_memory_map -{ - const struct retro_memory_descriptor *descriptors; - unsigned num_descriptors; -}; - -struct retro_controller_description -{ - /* Human-readable description of the controller. Even if using a generic - * input device type, this can be set to the particular device type the - * core uses. */ - const char *desc; - - /* Device type passed to retro_set_controller_port_device(). If the device - * type is a sub-class of a generic input device type, use the - * RETRO_DEVICE_SUBCLASS macro to create an ID. - * - * E.g. RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1). */ - unsigned id; -}; - -struct retro_controller_info -{ - const struct retro_controller_description *types; - unsigned num_types; -}; - -struct retro_subsystem_memory_info -{ - /* The extension associated with a memory type, e.g. "psram". */ - const char *extension; - - /* The memory type for retro_get_memory(). This should be at - * least 0x100 to avoid conflict with standardized - * libretro memory types. */ - unsigned type; -}; - -struct retro_subsystem_rom_info -{ - /* Describes what the content is (SGB BIOS, GB ROM, etc). */ - const char *desc; - - /* Same definition as retro_get_system_info(). */ - const char *valid_extensions; - - /* Same definition as retro_get_system_info(). */ - bool need_fullpath; - - /* Same definition as retro_get_system_info(). */ - bool block_extract; - - /* This is set if the content is required to load a game. - * If this is set to false, a zeroed-out retro_game_info can be passed. */ - bool required; - - /* Content can have multiple associated persistent - * memory types (retro_get_memory()). */ - const struct retro_subsystem_memory_info *memory; - unsigned num_memory; -}; - -struct retro_subsystem_info -{ - /* Human-readable string of the subsystem type, e.g. "Super GameBoy" */ - const char *desc; - - /* A computer friendly short string identifier for the subsystem type. - * This name must be [a-z]. - * E.g. if desc is "Super GameBoy", this can be "sgb". - * This identifier can be used for command-line interfaces, etc. - */ - const char *ident; - - /* Infos for each content file. The first entry is assumed to be the - * "most significant" content for frontend purposes. - * E.g. with Super GameBoy, the first content should be the GameBoy ROM, - * as it is the most "significant" content to a user. - * If a frontend creates new file paths based on the content used - * (e.g. savestates), it should use the path for the first ROM to do so. */ - const struct retro_subsystem_rom_info *roms; - - /* Number of content files associated with a subsystem. */ - unsigned num_roms; - - /* The type passed to retro_load_game_special(). */ - unsigned id; -}; - -typedef void (RETRO_CALLCONV *retro_proc_address_t)(void); - -/* libretro API extension functions: - * (None here so far). - * - * Get a symbol from a libretro core. - * Cores should only return symbols which are actual - * extensions to the libretro API. - * - * Frontends should not use this to obtain symbols to standard - * libretro entry points (static linking or dlsym). - * - * The symbol name must be equal to the function name, - * e.g. if void retro_foo(void); exists, the symbol must be called "retro_foo". - * The returned function pointer must be cast to the corresponding type. - */ -typedef retro_proc_address_t (RETRO_CALLCONV *retro_get_proc_address_t)(const char *sym); - -struct retro_get_proc_address_interface -{ - retro_get_proc_address_t get_proc_address; -}; - -enum retro_log_level -{ - RETRO_LOG_DEBUG = 0, - RETRO_LOG_INFO, - RETRO_LOG_WARN, - RETRO_LOG_ERROR, - - RETRO_LOG_DUMMY = INT_MAX -}; - -/* Logging function. Takes log level argument as well. */ -typedef void (RETRO_CALLCONV *retro_log_printf_t)(enum retro_log_level level, - const char *fmt, ...); - -struct retro_log_callback -{ - retro_log_printf_t log; -}; - -/* Performance related functions */ - -/* ID values for SIMD CPU features */ -#define RETRO_SIMD_SSE (1 << 0) -#define RETRO_SIMD_SSE2 (1 << 1) -#define RETRO_SIMD_VMX (1 << 2) -#define RETRO_SIMD_VMX128 (1 << 3) -#define RETRO_SIMD_AVX (1 << 4) -#define RETRO_SIMD_NEON (1 << 5) -#define RETRO_SIMD_SSE3 (1 << 6) -#define RETRO_SIMD_SSSE3 (1 << 7) -#define RETRO_SIMD_MMX (1 << 8) -#define RETRO_SIMD_MMXEXT (1 << 9) -#define RETRO_SIMD_SSE4 (1 << 10) -#define RETRO_SIMD_SSE42 (1 << 11) -#define RETRO_SIMD_AVX2 (1 << 12) -#define RETRO_SIMD_VFPU (1 << 13) -#define RETRO_SIMD_PS (1 << 14) -#define RETRO_SIMD_AES (1 << 15) -#define RETRO_SIMD_VFPV3 (1 << 16) -#define RETRO_SIMD_VFPV4 (1 << 17) -#define RETRO_SIMD_POPCNT (1 << 18) -#define RETRO_SIMD_MOVBE (1 << 19) -#define RETRO_SIMD_CMOV (1 << 20) -#define RETRO_SIMD_ASIMD (1 << 21) - -typedef uint64_t retro_perf_tick_t; -typedef int64_t retro_time_t; - -struct retro_perf_counter -{ - const char *ident; - retro_perf_tick_t start; - retro_perf_tick_t total; - retro_perf_tick_t call_cnt; - - bool registered; -}; - -/* Returns current time in microseconds. - * Tries to use the most accurate timer available. - */ -typedef retro_time_t (RETRO_CALLCONV *retro_perf_get_time_usec_t)(void); - -/* A simple counter. Usually nanoseconds, but can also be CPU cycles. - * Can be used directly if desired (when creating a more sophisticated - * performance counter system). - * */ -typedef retro_perf_tick_t (RETRO_CALLCONV *retro_perf_get_counter_t)(void); - -/* Returns a bit-mask of detected CPU features (RETRO_SIMD_*). */ -typedef uint64_t (RETRO_CALLCONV *retro_get_cpu_features_t)(void); - -/* Asks frontend to log and/or display the state of performance counters. - * Performance counters can always be poked into manually as well. - */ -typedef void (RETRO_CALLCONV *retro_perf_log_t)(void); - -/* Register a performance counter. - * ident field must be set with a discrete value and other values in - * retro_perf_counter must be 0. - * Registering can be called multiple times. To avoid calling to - * frontend redundantly, you can check registered field first. */ -typedef void (RETRO_CALLCONV *retro_perf_register_t)(struct retro_perf_counter *counter); - -/* Starts a registered counter. */ -typedef void (RETRO_CALLCONV *retro_perf_start_t)(struct retro_perf_counter *counter); - -/* Stops a registered counter. */ -typedef void (RETRO_CALLCONV *retro_perf_stop_t)(struct retro_perf_counter *counter); - -/* For convenience it can be useful to wrap register, start and stop in macros. - * E.g.: - * #ifdef LOG_PERFORMANCE - * #define RETRO_PERFORMANCE_INIT(perf_cb, name) static struct retro_perf_counter name = {#name}; if (!name.registered) perf_cb.perf_register(&(name)) - * #define RETRO_PERFORMANCE_START(perf_cb, name) perf_cb.perf_start(&(name)) - * #define RETRO_PERFORMANCE_STOP(perf_cb, name) perf_cb.perf_stop(&(name)) - * #else - * ... Blank macros ... - * #endif - * - * These can then be used mid-functions around code snippets. - * - * extern struct retro_perf_callback perf_cb; * Somewhere in the core. - * - * void do_some_heavy_work(void) - * { - * RETRO_PERFORMANCE_INIT(cb, work_1; - * RETRO_PERFORMANCE_START(cb, work_1); - * heavy_work_1(); - * RETRO_PERFORMANCE_STOP(cb, work_1); - * - * RETRO_PERFORMANCE_INIT(cb, work_2); - * RETRO_PERFORMANCE_START(cb, work_2); - * heavy_work_2(); - * RETRO_PERFORMANCE_STOP(cb, work_2); - * } - * - * void retro_deinit(void) - * { - * perf_cb.perf_log(); * Log all perf counters here for example. - * } - */ - -struct retro_perf_callback -{ - retro_perf_get_time_usec_t get_time_usec; - retro_get_cpu_features_t get_cpu_features; - - retro_perf_get_counter_t get_perf_counter; - retro_perf_register_t perf_register; - retro_perf_start_t perf_start; - retro_perf_stop_t perf_stop; - retro_perf_log_t perf_log; -}; - -/* FIXME: Document the sensor API and work out behavior. - * It will be marked as experimental until then. - */ -enum retro_sensor_action -{ - RETRO_SENSOR_ACCELEROMETER_ENABLE = 0, - RETRO_SENSOR_ACCELEROMETER_DISABLE, - RETRO_SENSOR_GYROSCOPE_ENABLE, - RETRO_SENSOR_GYROSCOPE_DISABLE, - RETRO_SENSOR_ILLUMINANCE_ENABLE, - RETRO_SENSOR_ILLUMINANCE_DISABLE, - - RETRO_SENSOR_DUMMY = INT_MAX -}; - -/* Id values for SENSOR types. */ -#define RETRO_SENSOR_ACCELEROMETER_X 0 -#define RETRO_SENSOR_ACCELEROMETER_Y 1 -#define RETRO_SENSOR_ACCELEROMETER_Z 2 -#define RETRO_SENSOR_GYROSCOPE_X 3 -#define RETRO_SENSOR_GYROSCOPE_Y 4 -#define RETRO_SENSOR_GYROSCOPE_Z 5 -#define RETRO_SENSOR_ILLUMINANCE 6 - -typedef bool (RETRO_CALLCONV *retro_set_sensor_state_t)(unsigned port, - enum retro_sensor_action action, unsigned rate); - -typedef float (RETRO_CALLCONV *retro_sensor_get_input_t)(unsigned port, unsigned id); - -struct retro_sensor_interface -{ - retro_set_sensor_state_t set_sensor_state; - retro_sensor_get_input_t get_sensor_input; -}; - -enum retro_camera_buffer -{ - RETRO_CAMERA_BUFFER_OPENGL_TEXTURE = 0, - RETRO_CAMERA_BUFFER_RAW_FRAMEBUFFER, - - RETRO_CAMERA_BUFFER_DUMMY = INT_MAX -}; - -/* Starts the camera driver. Can only be called in retro_run(). */ -typedef bool (RETRO_CALLCONV *retro_camera_start_t)(void); - -/* Stops the camera driver. Can only be called in retro_run(). */ -typedef void (RETRO_CALLCONV *retro_camera_stop_t)(void); - -/* Callback which signals when the camera driver is initialized - * and/or deinitialized. - * retro_camera_start_t can be called in initialized callback. - */ -typedef void (RETRO_CALLCONV *retro_camera_lifetime_status_t)(void); - -/* A callback for raw framebuffer data. buffer points to an XRGB8888 buffer. - * Width, height and pitch are similar to retro_video_refresh_t. - * First pixel is top-left origin. - */ -typedef void (RETRO_CALLCONV *retro_camera_frame_raw_framebuffer_t)(const uint32_t *buffer, - unsigned width, unsigned height, size_t pitch); - -/* A callback for when OpenGL textures are used. - * - * texture_id is a texture owned by camera driver. - * Its state or content should be considered immutable, except for things like - * texture filtering and clamping. - * - * texture_target is the texture target for the GL texture. - * These can include e.g. GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE, and possibly - * more depending on extensions. - * - * affine points to a packed 3x3 column-major matrix used to apply an affine - * transform to texture coordinates. (affine_matrix * vec3(coord_x, coord_y, 1.0)) - * After transform, normalized texture coord (0, 0) should be bottom-left - * and (1, 1) should be top-right (or (width, height) for RECTANGLE). - * - * GL-specific typedefs are avoided here to avoid relying on gl.h in - * the API definition. - */ -typedef void (RETRO_CALLCONV *retro_camera_frame_opengl_texture_t)(unsigned texture_id, - unsigned texture_target, const float *affine); - -struct retro_camera_callback -{ - /* Set by libretro core. - * Example bitmask: caps = (1 << RETRO_CAMERA_BUFFER_OPENGL_TEXTURE) | (1 << RETRO_CAMERA_BUFFER_RAW_FRAMEBUFFER). - */ - uint64_t caps; - - /* Desired resolution for camera. Is only used as a hint. */ - unsigned width; - unsigned height; - - /* Set by frontend. */ - retro_camera_start_t start; - retro_camera_stop_t stop; - - /* Set by libretro core if raw framebuffer callbacks will be used. */ - retro_camera_frame_raw_framebuffer_t frame_raw_framebuffer; - - /* Set by libretro core if OpenGL texture callbacks will be used. */ - retro_camera_frame_opengl_texture_t frame_opengl_texture; - - /* Set by libretro core. Called after camera driver is initialized and - * ready to be started. - * Can be NULL, in which this callback is not called. - */ - retro_camera_lifetime_status_t initialized; - - /* Set by libretro core. Called right before camera driver is - * deinitialized. - * Can be NULL, in which this callback is not called. - */ - retro_camera_lifetime_status_t deinitialized; -}; - -/* Sets the interval of time and/or distance at which to update/poll - * location-based data. - * - * To ensure compatibility with all location-based implementations, - * values for both interval_ms and interval_distance should be provided. - * - * interval_ms is the interval expressed in milliseconds. - * interval_distance is the distance interval expressed in meters. - */ -typedef void (RETRO_CALLCONV *retro_location_set_interval_t)(unsigned interval_ms, - unsigned interval_distance); - -/* Start location services. The device will start listening for changes to the - * current location at regular intervals (which are defined with - * retro_location_set_interval_t). */ -typedef bool (RETRO_CALLCONV *retro_location_start_t)(void); - -/* Stop location services. The device will stop listening for changes - * to the current location. */ -typedef void (RETRO_CALLCONV *retro_location_stop_t)(void); - -/* Get the position of the current location. Will set parameters to - * 0 if no new location update has happened since the last time. */ -typedef bool (RETRO_CALLCONV *retro_location_get_position_t)(double *lat, double *lon, - double *horiz_accuracy, double *vert_accuracy); - -/* Callback which signals when the location driver is initialized - * and/or deinitialized. - * retro_location_start_t can be called in initialized callback. - */ -typedef void (RETRO_CALLCONV *retro_location_lifetime_status_t)(void); - -struct retro_location_callback -{ - retro_location_start_t start; - retro_location_stop_t stop; - retro_location_get_position_t get_position; - retro_location_set_interval_t set_interval; - - retro_location_lifetime_status_t initialized; - retro_location_lifetime_status_t deinitialized; -}; - -enum retro_rumble_effect -{ - RETRO_RUMBLE_STRONG = 0, - RETRO_RUMBLE_WEAK = 1, - - RETRO_RUMBLE_DUMMY = INT_MAX -}; - -/* Sets rumble state for joypad plugged in port 'port'. - * Rumble effects are controlled independently, - * and setting e.g. strong rumble does not override weak rumble. - * Strength has a range of [0, 0xffff]. - * - * Returns true if rumble state request was honored. - * Calling this before first retro_run() is likely to return false. */ -typedef bool (RETRO_CALLCONV *retro_set_rumble_state_t)(unsigned port, - enum retro_rumble_effect effect, uint16_t strength); - -struct retro_rumble_interface -{ - retro_set_rumble_state_t set_rumble_state; -}; - -/* Notifies libretro that audio data should be written. */ -typedef void (RETRO_CALLCONV *retro_audio_callback_t)(void); - -/* True: Audio driver in frontend is active, and callback is - * expected to be called regularily. - * False: Audio driver in frontend is paused or inactive. - * Audio callback will not be called until set_state has been - * called with true. - * Initial state is false (inactive). - */ -typedef void (RETRO_CALLCONV *retro_audio_set_state_callback_t)(bool enabled); - -struct retro_audio_callback -{ - retro_audio_callback_t callback; - retro_audio_set_state_callback_t set_state; -}; - -/* Notifies a libretro core of time spent since last invocation - * of retro_run() in microseconds. - * - * It will be called right before retro_run() every frame. - * The frontend can tamper with timing to support cases like - * fast-forward, slow-motion and framestepping. - * - * In those scenarios the reference frame time value will be used. */ -typedef int64_t retro_usec_t; -typedef void (RETRO_CALLCONV *retro_frame_time_callback_t)(retro_usec_t usec); -struct retro_frame_time_callback -{ - retro_frame_time_callback_t callback; - /* Represents the time of one frame. It is computed as - * 1000000 / fps, but the implementation will resolve the - * rounding to ensure that framestepping, etc is exact. */ - retro_usec_t reference; -}; - -/* Notifies a libretro core of the current occupancy - * level of the frontend audio buffer. - * - * - active: 'true' if audio buffer is currently - * in use. Will be 'false' if audio is - * disabled in the frontend - * - * - occupancy: Given as a value in the range [0,100], - * corresponding to the occupancy percentage - * of the audio buffer - * - * - underrun_likely: 'true' if the frontend expects an - * audio buffer underrun during the - * next frame (indicates that a core - * should attempt frame skipping) - * - * It will be called right before retro_run() every frame. */ -typedef void (RETRO_CALLCONV *retro_audio_buffer_status_callback_t)( - bool active, unsigned occupancy, bool underrun_likely); -struct retro_audio_buffer_status_callback -{ - retro_audio_buffer_status_callback_t callback; -}; - -/* Pass this to retro_video_refresh_t if rendering to hardware. - * Passing NULL to retro_video_refresh_t is still a frame dupe as normal. - * */ -#define RETRO_HW_FRAME_BUFFER_VALID ((void*)-1) - -/* Invalidates the current HW context. - * Any GL state is lost, and must not be deinitialized explicitly. - * If explicit deinitialization is desired by the libretro core, - * it should implement context_destroy callback. - * If called, all GPU resources must be reinitialized. - * Usually called when frontend reinits video driver. - * Also called first time video driver is initialized, - * allowing libretro core to initialize resources. - */ -typedef void (RETRO_CALLCONV *retro_hw_context_reset_t)(void); - -/* Gets current framebuffer which is to be rendered to. - * Could change every frame potentially. - */ -typedef uintptr_t (RETRO_CALLCONV *retro_hw_get_current_framebuffer_t)(void); - -/* Get a symbol from HW context. */ -typedef retro_proc_address_t (RETRO_CALLCONV *retro_hw_get_proc_address_t)(const char *sym); - -enum retro_hw_context_type -{ - RETRO_HW_CONTEXT_NONE = 0, - /* OpenGL 2.x. Driver can choose to use latest compatibility context. */ - RETRO_HW_CONTEXT_OPENGL = 1, - /* OpenGL ES 2.0. */ - RETRO_HW_CONTEXT_OPENGLES2 = 2, - /* Modern desktop core GL context. Use version_major/ - * version_minor fields to set GL version. */ - RETRO_HW_CONTEXT_OPENGL_CORE = 3, - /* OpenGL ES 3.0 */ - RETRO_HW_CONTEXT_OPENGLES3 = 4, - /* OpenGL ES 3.1+. Set version_major/version_minor. For GLES2 and GLES3, - * use the corresponding enums directly. */ - RETRO_HW_CONTEXT_OPENGLES_VERSION = 5, - - /* Vulkan, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE. */ - RETRO_HW_CONTEXT_VULKAN = 6, - - /* Direct3D11, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */ - RETRO_HW_CONTEXT_D3D11 = 7, - - /* Direct3D10, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */ - RETRO_HW_CONTEXT_D3D10 = 8, - - /* Direct3D12, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */ - RETRO_HW_CONTEXT_D3D12 = 9, - - /* Direct3D9, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */ - RETRO_HW_CONTEXT_D3D9 = 10, - - RETRO_HW_CONTEXT_DUMMY = INT_MAX -}; - -struct retro_hw_render_callback -{ - /* Which API to use. Set by libretro core. */ - enum retro_hw_context_type context_type; - - /* Called when a context has been created or when it has been reset. - * An OpenGL context is only valid after context_reset() has been called. - * - * When context_reset is called, OpenGL resources in the libretro - * implementation are guaranteed to be invalid. - * - * It is possible that context_reset is called multiple times during an - * application lifecycle. - * If context_reset is called without any notification (context_destroy), - * the OpenGL context was lost and resources should just be recreated - * without any attempt to "free" old resources. - */ - retro_hw_context_reset_t context_reset; - - /* Set by frontend. - * TODO: This is rather obsolete. The frontend should not - * be providing preallocated framebuffers. */ - retro_hw_get_current_framebuffer_t get_current_framebuffer; - - /* Set by frontend. - * Can return all relevant functions, including glClear on Windows. */ - retro_hw_get_proc_address_t get_proc_address; - - /* Set if render buffers should have depth component attached. - * TODO: Obsolete. */ - bool depth; - - /* Set if stencil buffers should be attached. - * TODO: Obsolete. */ - bool stencil; - - /* If depth and stencil are true, a packed 24/8 buffer will be added. - * Only attaching stencil is invalid and will be ignored. */ - - /* Use conventional bottom-left origin convention. If false, - * standard libretro top-left origin semantics are used. - * TODO: Move to GL specific interface. */ - bool bottom_left_origin; - - /* Major version number for core GL context or GLES 3.1+. */ - unsigned version_major; - - /* Minor version number for core GL context or GLES 3.1+. */ - unsigned version_minor; - - /* If this is true, the frontend will go very far to avoid - * resetting context in scenarios like toggling fullscreen, etc. - * TODO: Obsolete? Maybe frontend should just always assume this ... - */ - bool cache_context; - - /* The reset callback might still be called in extreme situations - * such as if the context is lost beyond recovery. - * - * For optimal stability, set this to false, and allow context to be - * reset at any time. - */ - - /* A callback to be called before the context is destroyed in a - * controlled way by the frontend. */ - retro_hw_context_reset_t context_destroy; - - /* OpenGL resources can be deinitialized cleanly at this step. - * context_destroy can be set to NULL, in which resources will - * just be destroyed without any notification. - * - * Even when context_destroy is non-NULL, it is possible that - * context_reset is called without any destroy notification. - * This happens if context is lost by external factors (such as - * notified by GL_ARB_robustness). - * - * In this case, the context is assumed to be already dead, - * and the libretro implementation must not try to free any OpenGL - * resources in the subsequent context_reset. - */ - - /* Creates a debug context. */ - bool debug_context; -}; - -/* Callback type passed in RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK. - * Called by the frontend in response to keyboard events. - * down is set if the key is being pressed, or false if it is being released. - * keycode is the RETROK value of the char. - * character is the text character of the pressed key. (UTF-32). - * key_modifiers is a set of RETROKMOD values or'ed together. - * - * The pressed/keycode state can be indepedent of the character. - * It is also possible that multiple characters are generated from a - * single keypress. - * Keycode events should be treated separately from character events. - * However, when possible, the frontend should try to synchronize these. - * If only a character is posted, keycode should be RETROK_UNKNOWN. - * - * Similarily if only a keycode event is generated with no corresponding - * character, character should be 0. - */ -typedef void (RETRO_CALLCONV *retro_keyboard_event_t)(bool down, unsigned keycode, - uint32_t character, uint16_t key_modifiers); - -struct retro_keyboard_callback -{ - retro_keyboard_event_t callback; -}; - -/* Callbacks for RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE & - * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. - * Should be set for implementations which can swap out multiple disk - * images in runtime. - * - * If the implementation can do this automatically, it should strive to do so. - * However, there are cases where the user must manually do so. - * - * Overview: To swap a disk image, eject the disk image with - * set_eject_state(true). - * Set the disk index with set_image_index(index). Insert the disk again - * with set_eject_state(false). - */ - -/* If ejected is true, "ejects" the virtual disk tray. - * When ejected, the disk image index can be set. - */ -typedef bool (RETRO_CALLCONV *retro_set_eject_state_t)(bool ejected); - -/* Gets current eject state. The initial state is 'not ejected'. */ -typedef bool (RETRO_CALLCONV *retro_get_eject_state_t)(void); - -/* Gets current disk index. First disk is index 0. - * If return value is >= get_num_images(), no disk is currently inserted. - */ -typedef unsigned (RETRO_CALLCONV *retro_get_image_index_t)(void); - -/* Sets image index. Can only be called when disk is ejected. - * The implementation supports setting "no disk" by using an - * index >= get_num_images(). - */ -typedef bool (RETRO_CALLCONV *retro_set_image_index_t)(unsigned index); - -/* Gets total number of images which are available to use. */ -typedef unsigned (RETRO_CALLCONV *retro_get_num_images_t)(void); - -struct retro_game_info; - -/* Replaces the disk image associated with index. - * Arguments to pass in info have same requirements as retro_load_game(). - * Virtual disk tray must be ejected when calling this. - * - * Replacing a disk image with info = NULL will remove the disk image - * from the internal list. - * As a result, calls to get_image_index() can change. - * - * E.g. replace_image_index(1, NULL), and previous get_image_index() - * returned 4 before. - * Index 1 will be removed, and the new index is 3. - */ -typedef bool (RETRO_CALLCONV *retro_replace_image_index_t)(unsigned index, - const struct retro_game_info *info); - -/* Adds a new valid index (get_num_images()) to the internal disk list. - * This will increment subsequent return values from get_num_images() by 1. - * This image index cannot be used until a disk image has been set - * with replace_image_index. */ -typedef bool (RETRO_CALLCONV *retro_add_image_index_t)(void); - -/* Sets initial image to insert in drive when calling - * core_load_game(). - * Since we cannot pass the initial index when loading - * content (this would require a major API change), this - * is set by the frontend *before* calling the core's - * retro_load_game()/retro_load_game_special() implementation. - * A core should therefore cache the index/path values and handle - * them inside retro_load_game()/retro_load_game_special(). - * - If 'index' is invalid (index >= get_num_images()), the - * core should ignore the set value and instead use 0 - * - 'path' is used purely for error checking - i.e. when - * content is loaded, the core should verify that the - * disk specified by 'index' has the specified file path. - * This is to guard against auto selecting the wrong image - * if (for example) the user should modify an existing M3U - * playlist. We have to let the core handle this because - * set_initial_image() must be called before loading content, - * i.e. the frontend cannot access image paths in advance - * and thus cannot perform the error check itself. - * If set path and content path do not match, the core should - * ignore the set 'index' value and instead use 0 - * Returns 'false' if index or 'path' are invalid, or core - * does not support this functionality - */ -typedef bool (RETRO_CALLCONV *retro_set_initial_image_t)(unsigned index, const char *path); - -/* Fetches the path of the specified disk image file. - * Returns 'false' if index is invalid (index >= get_num_images()) - * or path is otherwise unavailable. - */ -typedef bool (RETRO_CALLCONV *retro_get_image_path_t)(unsigned index, char *path, size_t len); - -/* Fetches a core-provided 'label' for the specified disk - * image file. In the simplest case this may be a file name - * (without extension), but for cores with more complex - * content requirements information may be provided to - * facilitate user disk swapping - for example, a core - * running floppy-disk-based content may uniquely label - * save disks, data disks, level disks, etc. with names - * corresponding to in-game disk change prompts (so the - * frontend can provide better user guidance than a 'dumb' - * disk index value). - * Returns 'false' if index is invalid (index >= get_num_images()) - * or label is otherwise unavailable. - */ -typedef bool (RETRO_CALLCONV *retro_get_image_label_t)(unsigned index, char *label, size_t len); - -struct retro_disk_control_callback -{ - retro_set_eject_state_t set_eject_state; - retro_get_eject_state_t get_eject_state; - - retro_get_image_index_t get_image_index; - retro_set_image_index_t set_image_index; - retro_get_num_images_t get_num_images; - - retro_replace_image_index_t replace_image_index; - retro_add_image_index_t add_image_index; -}; - -struct retro_disk_control_ext_callback -{ - retro_set_eject_state_t set_eject_state; - retro_get_eject_state_t get_eject_state; - - retro_get_image_index_t get_image_index; - retro_set_image_index_t set_image_index; - retro_get_num_images_t get_num_images; - - retro_replace_image_index_t replace_image_index; - retro_add_image_index_t add_image_index; - - /* NOTE: Frontend will only attempt to record/restore - * last used disk index if both set_initial_image() - * and get_image_path() are implemented */ - retro_set_initial_image_t set_initial_image; /* Optional - may be NULL */ - - retro_get_image_path_t get_image_path; /* Optional - may be NULL */ - retro_get_image_label_t get_image_label; /* Optional - may be NULL */ -}; - -/* Definitions for RETRO_ENVIRONMENT_SET_NETPACKET_INTERFACE. - * A core can set it if sending and receiving custom network packets - * during a multiplayer session is desired. - */ - -/* Netpacket flags for retro_netpacket_send_t */ -#define RETRO_NETPACKET_UNRELIABLE 0 /* Packet to be sent unreliable, depending on network quality it might not arrive. */ -#define RETRO_NETPACKET_RELIABLE (1 << 0) /* Reliable packets are guaranteed to arrive at the target in the order they were send. */ -#define RETRO_NETPACKET_UNSEQUENCED (1 << 1) /* Packet will not be sequenced with other packets and may arrive out of order. Cannot be set on reliable packets. */ - -/* Used by the core to send a packet to one or more connected players. - * A single packet sent via this interface can contain up to 64 KB of data. - * - * The broadcast flag can be set to true to send to multiple connected clients. - * In a broadcast, the client_id argument indicates 1 client NOT to send the - * packet to (pass 0xFFFF to send to everyone). Otherwise, the client_id - * argument indicates a single client to send the packet to. - * - * A frontend must support sending reliable packets (RETRO_NETPACKET_RELIABLE). - * Unreliable packets might not be supported by the frontend, but the flags can - * still be specified. Reliable transmission will be used instead. - * - * If this function is called passing NULL for buf, it will instead flush all - * previously buffered outgoing packets and instantly read any incoming packets. - * During such a call, retro_netpacket_receive_t and retro_netpacket_stop_t can - * be called. The core can perform this in a loop to do a blocking read, i.e., - * wait for incoming data, but needs to handle stop getting called and also - * give up after a short while to avoid freezing on a connection problem. - * - * This function is not guaranteed to be thread-safe and must be called during - * retro_run or any of the netpacket callbacks passed with this interface. - */ -typedef void (RETRO_CALLCONV *retro_netpacket_send_t)(int flags, const void* buf, size_t len, uint16_t client_id, bool broadcast); - -/* Called by the frontend to signify that a multiplayer session has started. - * If client_id is 0 the local player is the host of the session and at this - * point no other player has connected yet. - * - * If client_id is > 0 the local player is a client connected to a host and - * at this point is already fully connected to the host. - * - * The core must store the retro_netpacket_send_t function pointer provided - * here and use it whenever it wants to send a packet. This function pointer - * remains valid until the frontend calls retro_netpacket_stop_t. - */ -typedef void (RETRO_CALLCONV *retro_netpacket_start_t)(uint16_t client_id, retro_netpacket_send_t send_fn); - -/* Called by the frontend when a new packet arrives which has been sent from - * another player with retro_netpacket_send_t. The client_id argument indicates - * who has sent the packet. - */ -typedef void (RETRO_CALLCONV *retro_netpacket_receive_t)(const void* buf, size_t len, uint16_t client_id); - -/* Called by the frontend when the multiplayer session has ended. - * Once this gets called the retro_netpacket_send_t function pointer passed - * to retro_netpacket_start_t will not be valid anymore. - */ -typedef void (RETRO_CALLCONV *retro_netpacket_stop_t)(void); - -/* Called by the frontend every frame (between calls to retro_run while - * updating the state of the multiplayer session. - * This is a good place for the core to call retro_netpacket_send_t from. - */ -typedef void (RETRO_CALLCONV *retro_netpacket_poll_t)(void); - -/* Called by the frontend when a new player connects to the hosted session. - * This is only called on the host side, not for clients connected to the host. - * If this function returns false, the newly connected player gets dropped. - * This can be used for example to limit the number of players. - */ -typedef bool (RETRO_CALLCONV *retro_netpacket_connected_t)(uint16_t client_id); - -/* Called by the frontend when a player leaves or disconnects from the hosted session. - * This is only called on the host side, not for clients connected to the host. - */ -typedef void (RETRO_CALLCONV *retro_netpacket_disconnected_t)(uint16_t client_id); - -/** - * A callback interface for giving a core the ability to send and receive custom - * network packets during a multiplayer session between two or more instances - * of a libretro frontend. - * - * @see RETRO_ENVIRONMENT_SET_NETPACKET_INTERFACE - */ -struct retro_netpacket_callback -{ - retro_netpacket_start_t start; - retro_netpacket_receive_t receive; - retro_netpacket_stop_t stop; /* Optional - may be NULL */ - retro_netpacket_poll_t poll; /* Optional - may be NULL */ - retro_netpacket_connected_t connected; /* Optional - may be NULL */ - retro_netpacket_disconnected_t disconnected; /* Optional - may be NULL */ -}; - -enum retro_pixel_format -{ - /* 0RGB1555, native endian. - * 0 bit must be set to 0. - * This pixel format is default for compatibility concerns only. - * If a 15/16-bit pixel format is desired, consider using RGB565. */ - RETRO_PIXEL_FORMAT_0RGB1555 = 0, - - /* XRGB8888, native endian. - * X bits are ignored. */ - RETRO_PIXEL_FORMAT_XRGB8888 = 1, - - /* RGB565, native endian. - * This pixel format is the recommended format to use if a 15/16-bit - * format is desired as it is the pixel format that is typically - * available on a wide range of low-power devices. - * - * It is also natively supported in APIs like OpenGL ES. */ - RETRO_PIXEL_FORMAT_RGB565 = 2, - - /* Ensure sizeof() == sizeof(int). */ - RETRO_PIXEL_FORMAT_UNKNOWN = INT_MAX -}; - -enum retro_savestate_context -{ - /* Standard savestate written to disk. */ - RETRO_SAVESTATE_CONTEXT_NORMAL = 0, - - /* Savestate where you are guaranteed that the same instance will load the save state. - * You can store internal pointers to code or data. - * It's still a full serialization and deserialization, and could be loaded or saved at any time. - * It won't be written to disk or sent over the network. - */ - RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_INSTANCE = 1, - - /* Savestate where you are guaranteed that the same emulator binary will load that savestate. - * You can skip anything that would slow down saving or loading state but you can not store internal pointers. - * It won't be written to disk or sent over the network. - * Example: "Second Instance" runahead - */ - RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_BINARY = 2, - - /* Savestate used within a rollback netplay feature. - * You should skip anything that would unnecessarily increase bandwidth usage. - * It won't be written to disk but it will be sent over the network. - */ - RETRO_SAVESTATE_CONTEXT_ROLLBACK_NETPLAY = 3, - - /* Ensure sizeof() == sizeof(int). */ - RETRO_SAVESTATE_CONTEXT_UNKNOWN = INT_MAX -}; - -struct retro_message -{ - const char *msg; /* Message to be displayed. */ - unsigned frames; /* Duration in frames of message. */ -}; - -enum retro_message_target -{ - RETRO_MESSAGE_TARGET_ALL = 0, - RETRO_MESSAGE_TARGET_OSD, - RETRO_MESSAGE_TARGET_LOG -}; - -enum retro_message_type -{ - RETRO_MESSAGE_TYPE_NOTIFICATION = 0, - RETRO_MESSAGE_TYPE_NOTIFICATION_ALT, - RETRO_MESSAGE_TYPE_STATUS, - RETRO_MESSAGE_TYPE_PROGRESS -}; - -struct retro_message_ext -{ - /* Message string to be displayed/logged */ - const char *msg; - /* Duration (in ms) of message when targeting the OSD */ - unsigned duration; - /* Message priority when targeting the OSD - * > When multiple concurrent messages are sent to - * the frontend and the frontend does not have the - * capacity to display them all, messages with the - * *highest* priority value should be shown - * > There is no upper limit to a message priority - * value (within the bounds of the unsigned data type) - * > In the reference frontend (RetroArch), the same - * priority values are used for frontend-generated - * notifications, which are typically assigned values - * between 0 and 3 depending upon importance */ - unsigned priority; - /* Message logging level (info, warn, error, etc.) */ - enum retro_log_level level; - /* Message destination: OSD, logging interface or both */ - enum retro_message_target target; - /* Message 'type' when targeting the OSD - * > RETRO_MESSAGE_TYPE_NOTIFICATION: Specifies that a - * message should be handled in identical fashion to - * a standard frontend-generated notification - * > RETRO_MESSAGE_TYPE_NOTIFICATION_ALT: Specifies that - * message is a notification that requires user attention - * or action, but that it should be displayed in a manner - * that differs from standard frontend-generated notifications. - * This would typically correspond to messages that should be - * displayed immediately (independently from any internal - * frontend message queue), and/or which should be visually - * distinguishable from frontend-generated notifications. - * For example, a core may wish to inform the user of - * information related to a disk-change event. It is - * expected that the frontend itself may provide a - * notification in this case; if the core sends a - * message of type RETRO_MESSAGE_TYPE_NOTIFICATION, an - * uncomfortable 'double-notification' may occur. A message - * of RETRO_MESSAGE_TYPE_NOTIFICATION_ALT should therefore - * be presented such that visual conflict with regular - * notifications does not occur - * > RETRO_MESSAGE_TYPE_STATUS: Indicates that message - * is not a standard notification. This typically - * corresponds to 'status' indicators, such as a core's - * internal FPS, which are intended to be displayed - * either permanently while a core is running, or in - * a manner that does not suggest user attention or action - * is required. 'Status' type messages should therefore be - * displayed in a different on-screen location and in a manner - * easily distinguishable from both standard frontend-generated - * notifications and messages of type RETRO_MESSAGE_TYPE_NOTIFICATION_ALT - * > RETRO_MESSAGE_TYPE_PROGRESS: Indicates that message reports - * the progress of an internal core task. For example, in cases - * where a core itself handles the loading of content from a file, - * this may correspond to the percentage of the file that has been - * read. Alternatively, an audio/video playback core may use a - * message of type RETRO_MESSAGE_TYPE_PROGRESS to display the current - * playback position as a percentage of the runtime. 'Progress' type - * messages should therefore be displayed as a literal progress bar, - * where: - * - 'retro_message_ext.msg' is the progress bar title/label - * - 'retro_message_ext.progress' determines the length of - * the progress bar - * NOTE: Message type is a *hint*, and may be ignored - * by the frontend. If a frontend lacks support for - * displaying messages via alternate means than standard - * frontend-generated notifications, it will treat *all* - * messages as having the type RETRO_MESSAGE_TYPE_NOTIFICATION */ - enum retro_message_type type; - /* Task progress when targeting the OSD and message is - * of type RETRO_MESSAGE_TYPE_PROGRESS - * > -1: Unmetered/indeterminate - * > 0-100: Current progress percentage - * NOTE: Since message type is a hint, a frontend may ignore - * progress values. Where relevant, a core should therefore - * include progress percentage within the message string, - * such that the message intent remains clear when displayed - * as a standard frontend-generated notification */ - int8_t progress; -}; - -/* Describes how the libretro implementation maps a libretro input bind - * to its internal input system through a human readable string. - * This string can be used to better let a user configure input. */ -struct retro_input_descriptor -{ - /* Associates given parameters with a description. */ - unsigned port; - unsigned device; - unsigned index; - unsigned id; - - /* Human readable description for parameters. - * The pointer must remain valid until - * retro_unload_game() is called. */ - const char *description; -}; - -struct retro_system_info -{ - /* All pointers are owned by libretro implementation, and pointers must - * remain valid until it is unloaded. */ - - const char *library_name; /* Descriptive name of library. Should not - * contain any version numbers, etc. */ - const char *library_version; /* Descriptive version of core. */ - - const char *valid_extensions; /* A string listing probably content - * extensions the core will be able to - * load, separated with pipe. - * I.e. "bin|rom|iso". - * Typically used for a GUI to filter - * out extensions. */ - - /* Libretro cores that need to have direct access to their content - * files, including cores which use the path of the content files to - * determine the paths of other files, should set need_fullpath to true. - * - * Cores should strive for setting need_fullpath to false, - * as it allows the frontend to perform patching, etc. - * - * If need_fullpath is true and retro_load_game() is called: - * - retro_game_info::path is guaranteed to have a valid path - * - retro_game_info::data and retro_game_info::size are invalid - * - * If need_fullpath is false and retro_load_game() is called: - * - retro_game_info::path may be NULL - * - retro_game_info::data and retro_game_info::size are guaranteed - * to be valid - * - * See also: - * - RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY - * - RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY - */ - bool need_fullpath; - - /* If true, the frontend is not allowed to extract any archives before - * loading the real content. - * Necessary for certain libretro implementations that load games - * from zipped archives. */ - bool block_extract; -}; - -/* Defines overrides which modify frontend handling of - * specific content file types. - * An array of retro_system_content_info_override is - * passed to RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE - * NOTE: In the following descriptions, references to - * retro_load_game() may be replaced with - * retro_load_game_special() */ -struct retro_system_content_info_override -{ - /* A list of file extensions for which the override - * should apply, delimited by a 'pipe' character - * (e.g. "md|sms|gg") - * Permitted file extensions are limited to those - * included in retro_system_info::valid_extensions - * and/or retro_subsystem_rom_info::valid_extensions */ - const char *extensions; - - /* Overrides the need_fullpath value set in - * retro_system_info and/or retro_subsystem_rom_info. - * To reiterate: - * - * If need_fullpath is true and retro_load_game() is called: - * - retro_game_info::path is guaranteed to contain a valid - * path to an existent file - * - retro_game_info::data and retro_game_info::size are invalid - * - * If need_fullpath is false and retro_load_game() is called: - * - retro_game_info::path may be NULL - * - retro_game_info::data and retro_game_info::size are guaranteed - * to be valid - * - * In addition: - * - * If need_fullpath is true and retro_load_game() is called: - * - retro_game_info_ext::full_path is guaranteed to contain a valid - * path to an existent file - * - retro_game_info_ext::archive_path may be NULL - * - retro_game_info_ext::archive_file may be NULL - * - retro_game_info_ext::dir is guaranteed to contain a valid path - * to the directory in which the content file exists - * - retro_game_info_ext::name is guaranteed to contain the - * basename of the content file, without extension - * - retro_game_info_ext::ext is guaranteed to contain the - * extension of the content file in lower case format - * - retro_game_info_ext::data and retro_game_info_ext::size - * are invalid - * - * If need_fullpath is false and retro_load_game() is called: - * - If retro_game_info_ext::file_in_archive is false: - * - retro_game_info_ext::full_path is guaranteed to contain - * a valid path to an existent file - * - retro_game_info_ext::archive_path may be NULL - * - retro_game_info_ext::archive_file may be NULL - * - retro_game_info_ext::dir is guaranteed to contain a - * valid path to the directory in which the content file exists - * - retro_game_info_ext::name is guaranteed to contain the - * basename of the content file, without extension - * - retro_game_info_ext::ext is guaranteed to contain the - * extension of the content file in lower case format - * - If retro_game_info_ext::file_in_archive is true: - * - retro_game_info_ext::full_path may be NULL - * - retro_game_info_ext::archive_path is guaranteed to - * contain a valid path to an existent compressed file - * inside which the content file is located - * - retro_game_info_ext::archive_file is guaranteed to - * contain a valid path to an existent content file - * inside the compressed file referred to by - * retro_game_info_ext::archive_path - * e.g. for a compressed file '/path/to/foo.zip' - * containing 'bar.sfc' - * > retro_game_info_ext::archive_path will be '/path/to/foo.zip' - * > retro_game_info_ext::archive_file will be 'bar.sfc' - * - retro_game_info_ext::dir is guaranteed to contain a - * valid path to the directory in which the compressed file - * (containing the content file) exists - * - retro_game_info_ext::name is guaranteed to contain - * EITHER - * 1) the basename of the compressed file (containing - * the content file), without extension - * OR - * 2) the basename of the content file inside the - * compressed file, without extension - * In either case, a core should consider 'name' to - * be the canonical name/ID of the the content file - * - retro_game_info_ext::ext is guaranteed to contain the - * extension of the content file inside the compressed file, - * in lower case format - * - retro_game_info_ext::data and retro_game_info_ext::size are - * guaranteed to be valid */ - bool need_fullpath; - - /* If need_fullpath is false, specifies whether the content - * data buffer available in retro_load_game() is 'persistent' - * - * If persistent_data is false and retro_load_game() is called: - * - retro_game_info::data and retro_game_info::size - * are valid only until retro_load_game() returns - * - retro_game_info_ext::data and retro_game_info_ext::size - * are valid only until retro_load_game() returns - * - * If persistent_data is true and retro_load_game() is called: - * - retro_game_info::data and retro_game_info::size - * are valid until retro_deinit() returns - * - retro_game_info_ext::data and retro_game_info_ext::size - * are valid until retro_deinit() returns */ - bool persistent_data; -}; - -/* Similar to retro_game_info, but provides extended - * information about the source content file and - * game memory buffer status. - * And array of retro_game_info_ext is returned by - * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT - * NOTE: In the following descriptions, references to - * retro_load_game() may be replaced with - * retro_load_game_special() */ -struct retro_game_info_ext -{ - /* - If file_in_archive is false, contains a valid - * path to an existent content file (UTF-8 encoded) - * - If file_in_archive is true, may be NULL */ - const char *full_path; - - /* - If file_in_archive is false, may be NULL - * - If file_in_archive is true, contains a valid path - * to an existent compressed file inside which the - * content file is located (UTF-8 encoded) */ - const char *archive_path; - - /* - If file_in_archive is false, may be NULL - * - If file_in_archive is true, contain a valid path - * to an existent content file inside the compressed - * file referred to by archive_path (UTF-8 encoded) - * e.g. for a compressed file '/path/to/foo.zip' - * containing 'bar.sfc' - * > archive_path will be '/path/to/foo.zip' - * > archive_file will be 'bar.sfc' */ - const char *archive_file; - - /* - If file_in_archive is false, contains a valid path - * to the directory in which the content file exists - * (UTF-8 encoded) - * - If file_in_archive is true, contains a valid path - * to the directory in which the compressed file - * (containing the content file) exists (UTF-8 encoded) */ - const char *dir; - - /* Contains the canonical name/ID of the content file - * (UTF-8 encoded). Intended for use when identifying - * 'complementary' content named after the loaded file - - * i.e. companion data of a different format (a CD image - * required by a ROM), texture packs, internally handled - * save files, etc. - * - If file_in_archive is false, contains the basename - * of the content file, without extension - * - If file_in_archive is true, then string is - * implementation specific. A frontend may choose to - * set a name value of: - * EITHER - * 1) the basename of the compressed file (containing - * the content file), without extension - * OR - * 2) the basename of the content file inside the - * compressed file, without extension - * RetroArch sets the 'name' value according to (1). - * A frontend that supports routine loading of - * content from archives containing multiple unrelated - * content files may set the 'name' value according - * to (2). */ - const char *name; - - /* - If file_in_archive is false, contains the extension - * of the content file in lower case format - * - If file_in_archive is true, contains the extension - * of the content file inside the compressed file, - * in lower case format */ - const char *ext; - - /* String of implementation specific meta-data. */ - const char *meta; - - /* Memory buffer of loaded game content. Will be NULL: - * IF - * - retro_system_info::need_fullpath is true and - * retro_system_content_info_override::need_fullpath - * is unset - * OR - * - retro_system_content_info_override::need_fullpath - * is true */ - const void *data; - - /* Size of game content memory buffer, in bytes */ - size_t size; - - /* True if loaded content file is inside a compressed - * archive */ - bool file_in_archive; - - /* - If data is NULL, value is unset/ignored - * - If data is non-NULL: - * - If persistent_data is false, data and size are - * valid only until retro_load_game() returns - * - If persistent_data is true, data and size are - * are valid until retro_deinit() returns */ - bool persistent_data; -}; - -struct retro_game_geometry -{ - unsigned base_width; /* Nominal video width of game. */ - unsigned base_height; /* Nominal video height of game. */ - unsigned max_width; /* Maximum possible width of game. */ - unsigned max_height; /* Maximum possible height of game. */ - - float aspect_ratio; /* Nominal aspect ratio of game. If - * aspect_ratio is <= 0.0, an aspect ratio - * of base_width / base_height is assumed. - * A frontend could override this setting, - * if desired. */ -}; - -struct retro_system_timing -{ - double fps; /* FPS of video content. */ - double sample_rate; /* Sampling rate of audio. */ -}; - -struct retro_system_av_info -{ - struct retro_game_geometry geometry; - struct retro_system_timing timing; -}; - -struct retro_variable -{ - /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. - * If NULL, obtains the complete environment string if more - * complex parsing is necessary. - * The environment string is formatted as key-value pairs - * delimited by semicolons as so: - * "key1=value1;key2=value2;..." - */ - const char *key; - - /* Value to be obtained. If key does not exist, it is set to NULL. */ - const char *value; -}; - -struct retro_core_option_display -{ - /* Variable to configure in RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY */ - const char *key; - - /* Specifies whether variable should be displayed - * when presenting core options to the user */ - bool visible; -}; - -/* Maximum number of values permitted for a core option - * > Note: We have to set a maximum value due the limitations - * of the C language - i.e. it is not possible to create an - * array of structs each containing a variable sized array, - * so the retro_core_option_definition values array must - * have a fixed size. The size limit of 128 is a balancing - * act - it needs to be large enough to support all 'sane' - * core options, but setting it too large may impact low memory - * platforms. In practise, if a core option has more than - * 128 values then the implementation is likely flawed. - * To quote the above API reference: - * "The number of possible options should be very limited - * i.e. it should be feasible to cycle through options - * without a keyboard." - */ -#define RETRO_NUM_CORE_OPTION_VALUES_MAX 128 - -struct retro_core_option_value -{ - /* Expected option value */ - const char *value; - - /* Human-readable value label. If NULL, value itself - * will be displayed by the frontend */ - const char *label; -}; - -struct retro_core_option_definition -{ - /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. */ - const char *key; - - /* Human-readable core option description (used as menu label) */ - const char *desc; - - /* Human-readable core option information (used as menu sublabel) */ - const char *info; - - /* Array of retro_core_option_value structs, terminated by NULL */ - struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX]; - - /* Default core option value. Must match one of the values - * in the retro_core_option_value array, otherwise will be - * ignored */ - const char *default_value; -}; - -#ifdef __PS3__ -#undef local -#endif - -struct retro_core_options_intl -{ - /* Pointer to an array of retro_core_option_definition structs - * - US English implementation - * - Must point to a valid array */ - struct retro_core_option_definition *us; - - /* Pointer to an array of retro_core_option_definition structs - * - Implementation for current frontend language - * - May be NULL */ - struct retro_core_option_definition *local; -}; - -struct retro_core_option_v2_category -{ - /* Variable uniquely identifying the - * option category. Valid key characters - * are [a-z, A-Z, 0-9, _, -] */ - const char *key; - - /* Human-readable category description - * > Used as category menu label when - * frontend has core option category - * support */ - const char *desc; - - /* Human-readable category information - * > Used as category menu sublabel when - * frontend has core option category - * support - * > Optional (may be NULL or an empty - * string) */ - const char *info; -}; - -struct retro_core_option_v2_definition -{ - /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. - * Valid key characters are [a-z, A-Z, 0-9, _, -] */ - const char *key; - - /* Human-readable core option description - * > Used as menu label when frontend does - * not have core option category support - * e.g. "Video > Aspect Ratio" */ - const char *desc; - - /* Human-readable core option description - * > Used as menu label when frontend has - * core option category support - * e.g. "Aspect Ratio", where associated - * retro_core_option_v2_category::desc - * is "Video" - * > If empty or NULL, the string specified by - * desc will be used as the menu label - * > Will be ignored (and may be set to NULL) - * if category_key is empty or NULL */ - const char *desc_categorized; - - /* Human-readable core option information - * > Used as menu sublabel */ - const char *info; - - /* Human-readable core option information - * > Used as menu sublabel when frontend - * has core option category support - * (e.g. may be required when info text - * references an option by name/desc, - * and the desc/desc_categorized text - * for that option differ) - * > If empty or NULL, the string specified by - * info will be used as the menu sublabel - * > Will be ignored (and may be set to NULL) - * if category_key is empty or NULL */ - const char *info_categorized; - - /* Variable specifying category (e.g. "video", - * "audio") that will be assigned to the option - * if frontend has core option category support. - * > Categorized options will be displayed in a - * subsection/submenu of the frontend core - * option interface - * > Specified string must match one of the - * retro_core_option_v2_category::key values - * in the associated retro_core_option_v2_category - * array; If no match is not found, specified - * string will be considered as NULL - * > If specified string is empty or NULL, option will - * have no category and will be shown at the top - * level of the frontend core option interface */ - const char *category_key; - - /* Array of retro_core_option_value structs, terminated by NULL */ - struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX]; - - /* Default core option value. Must match one of the values - * in the retro_core_option_value array, otherwise will be - * ignored */ - const char *default_value; -}; - -struct retro_core_options_v2 -{ - /* Array of retro_core_option_v2_category structs, - * terminated by NULL - * > If NULL, all entries in definitions array - * will have no category and will be shown at - * the top level of the frontend core option - * interface - * > Will be ignored if frontend does not have - * core option category support */ - struct retro_core_option_v2_category *categories; - - /* Array of retro_core_option_v2_definition structs, - * terminated by NULL */ - struct retro_core_option_v2_definition *definitions; -}; - -struct retro_core_options_v2_intl -{ - /* Pointer to a retro_core_options_v2 struct - * > US English implementation - * > Must point to a valid struct */ - struct retro_core_options_v2 *us; - - /* Pointer to a retro_core_options_v2 struct - * - Implementation for current frontend language - * - May be NULL */ - struct retro_core_options_v2 *local; -}; - -/* Used by the frontend to monitor changes in core option - * visibility. May be called each time any core option - * value is set via the frontend. - * - On each invocation, the core must update the visibility - * of any dynamically hidden options using the - * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY environment - * callback. - * - On the first invocation, returns 'true' if the visibility - * of any core option has changed since the last call of - * retro_load_game() or retro_load_game_special(). - * - On each subsequent invocation, returns 'true' if the - * visibility of any core option has changed since the last - * time the function was called. */ -typedef bool (RETRO_CALLCONV *retro_core_options_update_display_callback_t)(void); -struct retro_core_options_update_display_callback -{ - retro_core_options_update_display_callback_t callback; -}; - -struct retro_game_info -{ - const char *path; /* Path to game, UTF-8 encoded. - * Sometimes used as a reference for building other paths. - * May be NULL if game was loaded from stdin or similar, - * but in this case some cores will be unable to load `data`. - * So, it is preferable to fabricate something here instead - * of passing NULL, which will help more cores to succeed. - * retro_system_info::need_fullpath requires - * that this path is valid. */ - const void *data; /* Memory buffer of loaded game. Will be NULL - * if need_fullpath was set. */ - size_t size; /* Size of memory buffer. */ - const char *meta; /* String of implementation specific meta-data. */ -}; - -#define RETRO_MEMORY_ACCESS_WRITE (1 << 0) - /* The core will write to the buffer provided by retro_framebuffer::data. */ -#define RETRO_MEMORY_ACCESS_READ (1 << 1) - /* The core will read from retro_framebuffer::data. */ -#define RETRO_MEMORY_TYPE_CACHED (1 << 0) - /* The memory in data is cached. - * If not cached, random writes and/or reading from the buffer is expected to be very slow. */ -struct retro_framebuffer -{ - void *data; /* The framebuffer which the core can render into. - Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. - The initial contents of data are unspecified. */ - unsigned width; /* The framebuffer width used by the core. Set by core. */ - unsigned height; /* The framebuffer height used by the core. Set by core. */ - size_t pitch; /* The number of bytes between the beginning of a scanline, - and beginning of the next scanline. - Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ - enum retro_pixel_format format; /* The pixel format the core must use to render into data. - This format could differ from the format used in - SET_PIXEL_FORMAT. - Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ - - unsigned access_flags; /* How the core will access the memory in the framebuffer. - RETRO_MEMORY_ACCESS_* flags. - Set by core. */ - unsigned memory_flags; /* Flags telling core how the memory has been mapped. - RETRO_MEMORY_TYPE_* flags. - Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ -}; - -/* Used by a libretro core to override the current - * fastforwarding mode of the frontend */ -struct retro_fastforwarding_override -{ - /* Specifies the runtime speed multiplier that - * will be applied when 'fastforward' is true. - * For example, a value of 5.0 when running 60 FPS - * content will cap the fast-forward rate at 300 FPS. - * Note that the target multiplier may not be achieved - * if the host hardware has insufficient processing - * power. - * Setting a value of 0.0 (or greater than 0.0 but - * less than 1.0) will result in an uncapped - * fast-forward rate (limited only by hardware - * capacity). - * If the value is negative, it will be ignored - * (i.e. the frontend will use a runtime speed - * multiplier of its own choosing) */ - float ratio; - - /* If true, fastforwarding mode will be enabled. - * If false, fastforwarding mode will be disabled. */ - bool fastforward; - - /* If true, and if supported by the frontend, an - * on-screen notification will be displayed while - * 'fastforward' is true. - * If false, and if supported by the frontend, any - * on-screen fast-forward notifications will be - * suppressed */ - bool notification; - - /* If true, the core will have sole control over - * when fastforwarding mode is enabled/disabled; - * the frontend will not be able to change the - * state set by 'fastforward' until either - * 'inhibit_toggle' is set to false, or the core - * is unloaded */ - bool inhibit_toggle; -}; - -/* During normal operation. Rate will be equal to the core's internal FPS. */ -#define RETRO_THROTTLE_NONE 0 - -/* While paused or stepping single frames. Rate will be 0. */ -#define RETRO_THROTTLE_FRAME_STEPPING 1 - -/* During fast forwarding. - * Rate will be 0 if not specifically limited to a maximum speed. */ -#define RETRO_THROTTLE_FAST_FORWARD 2 - -/* During slow motion. Rate will be less than the core's internal FPS. */ -#define RETRO_THROTTLE_SLOW_MOTION 3 - -/* While rewinding recorded save states. Rate can vary depending on the rewind - * speed or be 0 if the frontend is not aiming for a specific rate. */ -#define RETRO_THROTTLE_REWINDING 4 - -/* While vsync is active in the video driver and the target refresh rate is - * lower than the core's internal FPS. Rate is the target refresh rate. */ -#define RETRO_THROTTLE_VSYNC 5 - -/* When the frontend does not throttle in any way. Rate will be 0. - * An example could be if no vsync or audio output is active. */ -#define RETRO_THROTTLE_UNBLOCKED 6 - -struct retro_throttle_state -{ - /* The current throttling mode. Should be one of the values above. */ - unsigned mode; - - /* How many times per second the frontend aims to call retro_run. - * Depending on the mode, it can be 0 if there is no known fixed rate. - * This won't be accurate if the total processing time of the core and - * the frontend is longer than what is available for one frame. */ - float rate; -}; - -/** - * Opaque handle to a microphone that's been opened for use. - * The underlying object is accessed or created with \c retro_microphone_interface_t. - */ -typedef struct retro_microphone retro_microphone_t; - -/** - * Parameters for configuring a microphone. - * Some of these might not be honored, - * depending on the available hardware and driver configuration. - */ -typedef struct retro_microphone_params -{ - /** - * The desired sample rate of the microphone's input, in Hz. - * The microphone's input will be resampled, - * so cores can ask for whichever frequency they need. - * - * If zero, some reasonable default will be provided by the frontend - * (usually from its config file). - * - * @see retro_get_mic_rate_t - */ - unsigned rate; -} retro_microphone_params_t; - -/** - * @copydoc retro_microphone_interface::open_mic - */ -typedef retro_microphone_t *(RETRO_CALLCONV *retro_open_mic_t)(const retro_microphone_params_t *params); - -/** - * @copydoc retro_microphone_interface::close_mic - */ -typedef void (RETRO_CALLCONV *retro_close_mic_t)(retro_microphone_t *microphone); - -/** - * @copydoc retro_microphone_interface::get_params - */ -typedef bool (RETRO_CALLCONV *retro_get_mic_params_t)(const retro_microphone_t *microphone, retro_microphone_params_t *params); - -/** - * @copydoc retro_microphone_interface::set_mic_state - */ -typedef bool (RETRO_CALLCONV *retro_set_mic_state_t)(retro_microphone_t *microphone, bool state); - -/** - * @copydoc retro_microphone_interface::get_mic_state - */ -typedef bool (RETRO_CALLCONV *retro_get_mic_state_t)(const retro_microphone_t *microphone); - -/** - * @copydoc retro_microphone_interface::read_mic - */ -typedef int (RETRO_CALLCONV *retro_read_mic_t)(retro_microphone_t *microphone, int16_t* samples, size_t num_samples); - -/** - * The current version of the microphone interface. - * Will be incremented whenever \c retro_microphone_interface or \c retro_microphone_params_t - * receive new fields. - * - * Frontends using cores built against older mic interface versions - * should not access fields introduced in newer versions. - */ -#define RETRO_MICROPHONE_INTERFACE_VERSION 1 - -/** - * An interface for querying the microphone and accessing data read from it. - * - * @see RETRO_ENVIRONMENT_GET_MICROPHONE_INTERFACE - */ -struct retro_microphone_interface -{ - /** - * The version of this microphone interface. - * Set by the core to request a particular version, - * and set by the frontend to indicate the returned version. - * 0 indicates that the interface is invalid or uninitialized. - */ - unsigned interface_version; - - /** - * Initializes a new microphone. - * Assuming that microphone support is enabled and provided by the frontend, - * cores may call this function whenever necessary. - * A microphone could be opened throughout a core's lifetime, - * or it could wait until a microphone is plugged in to the emulated device. - * - * The returned handle will be valid until it's freed, - * even if the audio driver is reinitialized. - * - * This function is not guaranteed to be thread-safe. - * - * @param args[in] Parameters used to create the microphone. - * May be \c NULL, in which case the default value of each parameter will be used. - * - * @returns Pointer to the newly-opened microphone, - * or \c NULL if one couldn't be opened. - * This likely means that no microphone is plugged in and recognized, - * or the maximum number of supported microphones has been reached. - * - * @note Microphones are \em inactive by default; - * to begin capturing audio, call \c set_mic_state. - * @see retro_microphone_params_t - */ - retro_open_mic_t open_mic; - - /** - * Closes a microphone that was initialized with \c open_mic. - * Calling this function will stop all microphone activity - * and free up the resources that it allocated. - * Afterwards, the handle is invalid and must not be used. - * - * A frontend may close opened microphones when unloading content, - * but this behavior is not guaranteed. - * Cores should close their microphones when exiting, just to be safe. - * - * @param microphone Pointer to the microphone that was allocated by \c open_mic. - * If \c NULL, this function does nothing. - * - * @note The handle might be reused if another microphone is opened later. - */ - retro_close_mic_t close_mic; - - /** - * Returns the configured parameters of this microphone. - * These may differ from what was requested depending on - * the driver and device configuration. - * - * Cores should check these values before they start fetching samples. - * - * Will not change after the mic was opened. - * - * @param microphone[in] Opaque handle to the microphone - * whose parameters will be retrieved. - * @param params[out] The parameters object that the - * microphone's parameters will be copied to. - * - * @return \c true if the parameters were retrieved, - * \c false if there was an error. - */ - retro_get_mic_params_t get_params; - - /** - * Enables or disables the given microphone. - * Microphones are disabled by default - * and must be explicitly enabled before they can be used. - * Disabled microphones will not process incoming audio samples, - * and will therefore have minimal impact on overall performance. - * Cores may enable microphones throughout their lifetime, - * or only for periods where they're needed. - * - * Cores that accept microphone input should be able to operate without it; - * we suggest substituting silence in this case. - * - * @param microphone Opaque handle to the microphone - * whose state will be adjusted. - * This will have been provided by \c open_mic. - * @param state \c true if the microphone should receive audio input, - * \c false if it should be idle. - * @returns \c true if the microphone's state was successfully set, - * \c false if \c microphone is invalid - * or if there was an error. - */ - retro_set_mic_state_t set_mic_state; - - /** - * Queries the active state of a microphone at the given index. - * Will return whether the microphone is enabled, - * even if the driver is paused. - * - * @param microphone Opaque handle to the microphone - * whose state will be queried. - * @return \c true if the provided \c microphone is valid and active, - * \c false if not or if there was an error. - */ - retro_get_mic_state_t get_mic_state; - - /** - * Retrieves the input processed by the microphone since the last call. - * \em Must be called every frame unless \c microphone is disabled, - * similar to how \c retro_audio_sample_batch_t works. - * - * @param[in] microphone Opaque handle to the microphone - * whose recent input will be retrieved. - * @param[out] samples The buffer that will be used to store the microphone's data. - * Microphone input is in mono (i.e. one number per sample). - * Should be large enough to accommodate the expected number of samples per frame; - * for example, a 44.1kHz sample rate at 60 FPS would require space for 735 samples. - * @param[in] num_samples The size of the data buffer in samples (\em not bytes). - * Microphone input is in mono, so a "frame" and a "sample" are equivalent in length here. - * - * @return The number of samples that were copied into \c samples. - * If \c microphone is pending driver initialization, - * this function will copy silence of the requested length into \c samples. - * - * Will return -1 if the microphone is disabled, - * the audio driver is paused, - * or there was an error. - */ - retro_read_mic_t read_mic; -}; - -/** - * Describes how a device is being powered. - * @see RETRO_ENVIRONMENT_GET_DEVICE_POWER - */ -enum retro_power_state -{ - /** - * Indicates that the frontend cannot report its power state at this time, - * most likely due to a lack of support. - * - * \c RETRO_ENVIRONMENT_GET_DEVICE_POWER will not return this value; - * instead, the environment callback will return \c false. - */ - RETRO_POWERSTATE_UNKNOWN = 0, - - /** - * Indicates that the device is running on its battery. - * Usually applies to portable devices such as handhelds, laptops, and smartphones. - */ - RETRO_POWERSTATE_DISCHARGING, - - /** - * Indicates that the device's battery is currently charging. - */ - RETRO_POWERSTATE_CHARGING, - - /** - * Indicates that the device is connected to a power source - * and that its battery has finished charging. - */ - RETRO_POWERSTATE_CHARGED, - - /** - * Indicates that the device is connected to a power source - * and that it does not have a battery. - * This usually suggests a desktop computer or a non-portable game console. - */ - RETRO_POWERSTATE_PLUGGED_IN -}; - -/** - * Indicates that an estimate is not available for the battery level or time remaining, - * even if the actual power state is known. - */ -#define RETRO_POWERSTATE_NO_ESTIMATE (-1) - -/** - * Describes the power state of the device running the frontend. - * @see RETRO_ENVIRONMENT_GET_DEVICE_POWER - */ -struct retro_device_power -{ - /** - * The current state of the frontend's power usage. - */ - enum retro_power_state state; - - /** - * A rough estimate of the amount of time remaining (in seconds) - * before the device powers off. - * This value depends on a variety of factors, - * so it is not guaranteed to be accurate. - * - * Will be set to \c RETRO_POWERSTATE_NO_ESTIMATE if \c state does not equal \c RETRO_POWERSTATE_DISCHARGING. - * May still be set to \c RETRO_POWERSTATE_NO_ESTIMATE if the frontend is unable to provide an estimate. - */ - int seconds; - - /** - * The approximate percentage of battery charge, - * ranging from 0 to 100 (inclusive). - * The device may power off before this reaches 0. - * - * The user might have configured their device - * to stop charging before the battery is full, - * so do not assume that this will be 100 in the \c RETRO_POWERSTATE_CHARGED state. - */ - int8_t percent; -}; - -/* Callbacks */ - -/* Environment callback. Gives implementations a way of performing - * uncommon tasks. Extensible. */ -typedef bool (RETRO_CALLCONV *retro_environment_t)(unsigned cmd, void *data); - -/* Render a frame. Pixel format is 15-bit 0RGB1555 native endian - * unless changed (see RETRO_ENVIRONMENT_SET_PIXEL_FORMAT). - * - * Width and height specify dimensions of buffer. - * Pitch specifices length in bytes between two lines in buffer. - * - * For performance reasons, it is highly recommended to have a frame - * that is packed in memory, i.e. pitch == width * byte_per_pixel. - * Certain graphic APIs, such as OpenGL ES, do not like textures - * that are not packed in memory. - */ -typedef void (RETRO_CALLCONV *retro_video_refresh_t)(const void *data, unsigned width, - unsigned height, size_t pitch); - -/* Renders a single audio frame. Should only be used if implementation - * generates a single sample at a time. - * Format is signed 16-bit native endian. - */ -typedef void (RETRO_CALLCONV *retro_audio_sample_t)(int16_t left, int16_t right); - -/* Renders multiple audio frames in one go. - * - * One frame is defined as a sample of left and right channels, interleaved. - * I.e. int16_t buf[4] = { l, r, l, r }; would be 2 frames. - * Only one of the audio callbacks must ever be used. - */ -typedef size_t (RETRO_CALLCONV *retro_audio_sample_batch_t)(const int16_t *data, - size_t frames); - -/* Polls input. */ -typedef void (RETRO_CALLCONV *retro_input_poll_t)(void); - -/* Queries for input for player 'port'. device will be masked with - * RETRO_DEVICE_MASK. - * - * Specialization of devices such as RETRO_DEVICE_JOYPAD_MULTITAP that - * have been set with retro_set_controller_port_device() - * will still use the higher level RETRO_DEVICE_JOYPAD to request input. - */ -typedef int16_t (RETRO_CALLCONV *retro_input_state_t)(unsigned port, unsigned device, - unsigned index, unsigned id); - -/* Sets callbacks. retro_set_environment() is guaranteed to be called - * before retro_init(). - * - * The rest of the set_* functions are guaranteed to have been called - * before the first call to retro_run() is made. */ -RETRO_API void retro_set_environment(retro_environment_t); -RETRO_API void retro_set_video_refresh(retro_video_refresh_t); -RETRO_API void retro_set_audio_sample(retro_audio_sample_t); -RETRO_API void retro_set_audio_sample_batch(retro_audio_sample_batch_t); -RETRO_API void retro_set_input_poll(retro_input_poll_t); -RETRO_API void retro_set_input_state(retro_input_state_t); - -/* Library global initialization/deinitialization. */ -RETRO_API void retro_init(void); -RETRO_API void retro_deinit(void); - -/* Must return RETRO_API_VERSION. Used to validate ABI compatibility - * when the API is revised. */ -RETRO_API unsigned retro_api_version(void); - -/* Gets statically known system info. Pointers provided in *info - * must be statically allocated. - * Can be called at any time, even before retro_init(). */ -RETRO_API void retro_get_system_info(struct retro_system_info *info); - -/* Gets information about system audio/video timings and geometry. - * Can be called only after retro_load_game() has successfully completed. - * NOTE: The implementation of this function might not initialize every - * variable if needed. - * E.g. geom.aspect_ratio might not be initialized if core doesn't - * desire a particular aspect ratio. */ -RETRO_API void retro_get_system_av_info(struct retro_system_av_info *info); - -/* Sets device to be used for player 'port'. - * By default, RETRO_DEVICE_JOYPAD is assumed to be plugged into all - * available ports. - * Setting a particular device type is not a guarantee that libretro cores - * will only poll input based on that particular device type. It is only a - * hint to the libretro core when a core cannot automatically detect the - * appropriate input device type on its own. It is also relevant when a - * core can change its behavior depending on device type. - * - * As part of the core's implementation of retro_set_controller_port_device, - * the core should call RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS to notify the - * frontend if the descriptions for any controls have changed as a - * result of changing the device type. - */ -RETRO_API void retro_set_controller_port_device(unsigned port, unsigned device); - -/* Resets the current game. */ -RETRO_API void retro_reset(void); - -/* Runs the game for one video frame. - * During retro_run(), input_poll callback must be called at least once. - * - * If a frame is not rendered for reasons where a game "dropped" a frame, - * this still counts as a frame, and retro_run() should explicitly dupe - * a frame if GET_CAN_DUPE returns true. - * In this case, the video callback can take a NULL argument for data. - */ -RETRO_API void retro_run(void); - -/* Returns the amount of data the implementation requires to serialize - * internal state (save states). - * Between calls to retro_load_game() and retro_unload_game(), the - * returned size is never allowed to be larger than a previous returned - * value, to ensure that the frontend can allocate a save state buffer once. - */ -RETRO_API size_t retro_serialize_size(void); - -/* Serializes internal state. If failed, or size is lower than - * retro_serialize_size(), it should return false, true otherwise. */ -RETRO_API bool retro_serialize(void *data, size_t size); -RETRO_API bool retro_unserialize(const void *data, size_t size); - -RETRO_API void retro_cheat_reset(void); -RETRO_API void retro_cheat_set(unsigned index, bool enabled, const char *code); - -/* Loads a game. - * Return true to indicate successful loading and false to indicate load failure. - */ -RETRO_API bool retro_load_game(const struct retro_game_info *game); - -/* Loads a "special" kind of game. Should not be used, - * except in extreme cases. */ -RETRO_API bool retro_load_game_special( - unsigned game_type, - const struct retro_game_info *info, size_t num_info -); - -/* Unloads the currently loaded game. Called before retro_deinit(void). */ -RETRO_API void retro_unload_game(void); - -/* Gets region of game. */ -RETRO_API unsigned retro_get_region(void); - -/* Gets region of memory. */ -RETRO_API void *retro_get_memory_data(unsigned id); -RETRO_API size_t retro_get_memory_size(unsigned id); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/third_party/libuv b/third_party/libuv deleted file mode 160000 index b8368a14..00000000 --- a/third_party/libuv +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b8368a1441fd4ebdaaae70b67136c80b1a98be32 diff --git a/third_party/luv b/third_party/luv deleted file mode 160000 index 3e55ac43..00000000 --- a/third_party/luv +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3e55ac4331d06aa5f43016a142aa2aaa23264105 diff --git a/third_party/metal-cpp b/third_party/metal-cpp deleted file mode 160000 index a63bd172..00000000 --- a/third_party/metal-cpp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a63bd172ddcba73a3d87ca32032b66ad41ddb9a6 diff --git a/third_party/miniaudio b/third_party/miniaudio deleted file mode 160000 index 4a5b74be..00000000 --- a/third_party/miniaudio +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4a5b74bef029b3592c54b6048650ee5f972c1a48 diff --git a/third_party/mio b/third_party/mio deleted file mode 160000 index 8b6b7d87..00000000 --- a/third_party/mio +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8b6b7d878c89e81614d05edca7936de41ccdd2da diff --git a/third_party/nihstro b/third_party/nihstro deleted file mode 160000 index e924e21b..00000000 --- a/third_party/nihstro +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e924e21b1da60170f0f0a4e5a073cb7d579969c0 diff --git a/third_party/oaknut b/third_party/oaknut deleted file mode 160000 index 790374d7..00000000 --- a/third_party/oaknut +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 790374d7e66257b1f8ed89d798e5dcfb5363af05 diff --git a/third_party/opengl/opengl.hpp b/third_party/opengl/opengl.hpp index 607815fa..f368f573 100644 --- a/third_party/opengl/opengl.hpp +++ b/third_party/opengl/opengl.hpp @@ -355,152 +355,111 @@ namespace OpenGL { } }; - enum ShaderType { - Fragment = GL_FRAGMENT_SHADER, - Vertex = GL_VERTEX_SHADER, - Geometry = GL_GEOMETRY_SHADER, - Compute = GL_COMPUTE_SHADER, - TessControl = GL_TESS_CONTROL_SHADER, - TessEvaluation = GL_TESS_EVALUATION_SHADER - }; + enum ShaderType { + Fragment = GL_FRAGMENT_SHADER, + Vertex = GL_VERTEX_SHADER, + Geometry = GL_GEOMETRY_SHADER, + Compute = GL_COMPUTE_SHADER, + TessControl = GL_TESS_CONTROL_SHADER, + TessEvaluation = GL_TESS_EVALUATION_SHADER + }; - struct Shader { - GLuint m_handle = 0; + struct Shader { + GLuint m_handle = 0; - Shader() {} - Shader(const std::string_view source, ShaderType type) { create(source, static_cast(type)); } + Shader() {} + Shader(const std::string_view source, ShaderType type) { create(source, static_cast(type)); } - // Returns whether compilation failed or not - bool create(const std::string_view source, GLenum type) { - m_handle = glCreateShader(type); - const GLchar* const sources[1] = {source.data()}; + // Returns whether compilation failed or not + bool create(const std::string_view source, GLenum type) { + m_handle = glCreateShader(type); + const GLchar* const sources[1] = { source.data() }; - glShaderSource(m_handle, 1, sources, nullptr); - glCompileShader(m_handle); + glShaderSource(m_handle, 1, sources, nullptr); + glCompileShader(m_handle); - GLint success; - glGetShaderiv(m_handle, GL_COMPILE_STATUS, &success); - if (success == GL_FALSE) { - char buf[4096]; - glGetShaderInfoLog(m_handle, 4096, nullptr, buf); - fprintf(stderr, "Failed to compile shader\nError: %s\n", buf); - glDeleteShader(m_handle); + GLint success; + glGetShaderiv(m_handle, GL_COMPILE_STATUS, &success); + if (success == GL_FALSE) { + char buf[4096]; + glGetShaderInfoLog(m_handle, 4096, nullptr, buf); + fprintf(stderr, "Failed to compile shader\nError: %s\n", buf); + glDeleteShader(m_handle); - m_handle = 0; - } + m_handle = 0; + } - return m_handle != 0; - } + return m_handle != 0; + } - GLuint handle() const { return m_handle; } - bool exists() const { return m_handle != 0; } - - void free() { - if (exists()) { - glDeleteShader(m_handle); - m_handle = 0; - } - } - -#ifdef OPENGL_DESTRUCTORS - ~Shader() { free(); } -#endif - }; + GLuint handle() const { return m_handle; } + bool exists() const { return m_handle != 0; } + }; struct Program { - GLuint m_handle = 0; + GLuint m_handle = 0; - bool create(std::initializer_list> shaders) { - m_handle = glCreateProgram(); - for (const auto& shader : shaders) { - glAttachShader(m_handle, shader.get().handle()); - } + bool create(std::initializer_list> shaders) { + m_handle = glCreateProgram(); + for (const auto& shader : shaders) { + glAttachShader(m_handle, shader.get().handle()); + } - glLinkProgram(m_handle); - GLint success; - glGetProgramiv(m_handle, GL_LINK_STATUS, &success); + glLinkProgram(m_handle); + GLint success; + glGetProgramiv(m_handle, GL_LINK_STATUS, &success); - if (!success) { - char buf[4096]; - glGetProgramInfoLog(m_handle, 4096, nullptr, buf); - fprintf(stderr, "Failed to link program\nError: %s\n", buf); - glDeleteProgram(m_handle); + if (!success) { + char buf[4096]; + glGetProgramInfoLog(m_handle, 4096, nullptr, buf); + fprintf(stderr, "Failed to link program\nError: %s\n", buf); + glDeleteProgram(m_handle); - m_handle = 0; - } + m_handle = 0; + } - return m_handle != 0; - } + return m_handle != 0; + } - bool createFromBinary(const uint8_t* binary, size_t size, GLenum format) { - m_handle = glCreateProgram(); - glProgramBinary(m_handle, format, binary, size); - - GLint success; - glGetProgramiv(m_handle, GL_LINK_STATUS, &success); - - if (!success) { - char buf[4096]; - glGetProgramInfoLog(m_handle, 4096, nullptr, buf); - fprintf(stderr, "Failed to link program\nError: %s\n", buf); - glDeleteProgram(m_handle); - - m_handle = 0; - } - - return m_handle != 0; - } - - GLuint handle() const { return m_handle; } - bool exists() const { return m_handle != 0; } - void use() const { glUseProgram(m_handle); } - - void free() { - if (exists()) { - glDeleteProgram(m_handle); - m_handle = 0; - } - } - -#ifdef OPENGL_DESTRUCTORS - ~Program() { free(); } -#endif - }; + GLuint handle() const { return m_handle; } + bool exists() const { return m_handle != 0; } + void use() const { glUseProgram(m_handle); } + }; static void dispatchCompute(GLuint groupsX = 1, GLuint groupsY = 1, GLuint groupsZ = 1) { glDispatchCompute(groupsX, groupsY, groupsZ); } - struct VertexBuffer { - GLuint m_handle = 0; + struct VertexBuffer { + GLuint m_handle = 0; - void create() { - if (m_handle == 0) { - glGenBuffers(1, &m_handle); - } - } + void create() { + if (m_handle == 0) { + glGenBuffers(1, &m_handle); + } + } - void createFixedSize(GLsizei size, GLenum usage = GL_DYNAMIC_DRAW) { - create(); - bind(); - glBufferData(GL_ARRAY_BUFFER, size, nullptr, usage); - } + void createFixedSize(GLsizei size, GLenum usage = GL_DYNAMIC_DRAW) { + create(); + bind(); + glBufferData(GL_ARRAY_BUFFER, size, nullptr, usage); + } - VertexBuffer(bool shouldCreate = false) { - if (shouldCreate) { - create(); - } - } + VertexBuffer(bool shouldCreate = false) { + if (shouldCreate) { + create(); + } + } #ifdef OPENGL_DESTRUCTORS - ~VertexBuffer() { free(); } -#endif - GLuint handle() const { return m_handle; } - bool exists() const { return m_handle != 0; } - void bind() const { glBindBuffer(GL_ARRAY_BUFFER, m_handle); } - void free() { glDeleteBuffers(1, &m_handle); } + ~VertexBuffer() { free(); } +#endif + GLuint handle() const { return m_handle; } + bool exists() const { return m_handle != 0; } + void bind() const { glBindBuffer(GL_ARRAY_BUFFER, m_handle); } + void free() { glDeleteBuffers(1, &m_handle); } - // Reallocates the buffer on every call. Prefer the sub version if possible. + // Reallocates the buffer on every call. Prefer the sub version if possible. template void bufferVerts(VertType* vertices, int vertCount, GLenum usage = GL_DYNAMIC_DRAW) { glBufferData(GL_ARRAY_BUFFER, sizeof(VertType) * vertCount, vertices, usage); @@ -512,7 +471,7 @@ namespace OpenGL { glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(VertType) * vertCount, vertices); } - // If C++20 is available, add overloads that take std::span instead of raw pointers + // If C++20 is available, add overloads that take std::span instead of raw pointers #ifdef OPENGL_HAVE_CPP20 template void bufferVerts(std::span vertices, GLenum usage = GL_DYNAMIC_DRAW) { @@ -526,48 +485,6 @@ namespace OpenGL { #endif }; - struct UniformBuffer { - GLuint m_handle = 0; - - void create() { - if (m_handle == 0) { - glGenBuffers(1, &m_handle); - } - } - - void createFixedSize(GLsizei size, GLenum usage = GL_DYNAMIC_DRAW) { - create(); - bind(); - glBufferData(GL_UNIFORM_BUFFER, size, nullptr, usage); - } - - UniformBuffer(bool shouldCreate = false) { - if (shouldCreate) { - create(); - } - } - -#ifdef OPENGL_DESTRUCTORS - ~UniformBuffer() { free(); } -#endif - GLuint handle() const { return m_handle; } - bool exists() const { return m_handle != 0; } - void bind() const { glBindBuffer(GL_UNIFORM_BUFFER, m_handle); } - void free() { glDeleteBuffers(1, &m_handle); } - - // Reallocates the buffer on every call. Prefer the sub version if possible. - template - void buffer(const UniformType& uniformData, GLenum usage = GL_DYNAMIC_DRAW) { - glBufferData(GL_UNIFORM_BUFFER, sizeof(uniformData), &uniformData, usage); - } - - // Only use if you used createFixedSize - template - void bufferSub(const UniformType& uniformData, int vertCount, GLintptr offset = 0) { - glBufferSubData(GL_UNIFORM_BUFFER, offset, sizeof(uniformData), &uniformData); - } - }; - enum DepthFunc { Never = GL_NEVER, // Depth test never passes Always = GL_ALWAYS, // Depth test always passes @@ -776,4 +693,4 @@ namespace OpenGL { using Rect = Rectangle; -} // end namespace OpenGL +} // end namespace OpenGL \ No newline at end of file diff --git a/third_party/renderdoc/renderdoc_app.h b/third_party/renderdoc/renderdoc_app.h deleted file mode 100644 index e73f1c90..00000000 --- a/third_party/renderdoc/renderdoc_app.h +++ /dev/null @@ -1,721 +0,0 @@ -/****************************************************************************** - * The MIT License (MIT) - * - * Copyright (c) 2019-2024 Baldur Karlsson - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - ******************************************************************************/ - -#pragma once - -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Documentation for the API is available at https://renderdoc.org/docs/in_application_api.html -// - -#if !defined(RENDERDOC_NO_STDINT) -#include -#endif - -#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) -#define RENDERDOC_CC __cdecl -#elif defined(__linux__) || defined(__FreeBSD__) -#define RENDERDOC_CC -#elif defined(__APPLE__) -#define RENDERDOC_CC -#else -#error "Unknown platform" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -////////////////////////////////////////////////////////////////////////////////////////////////// -// Constants not used directly in below API - -// This is a GUID/magic value used for when applications pass a path where shader debug -// information can be found to match up with a stripped shader. -// the define can be used like so: const GUID RENDERDOC_ShaderDebugMagicValue = -// RENDERDOC_ShaderDebugMagicValue_value -#define RENDERDOC_ShaderDebugMagicValue_struct \ - { 0xeab25520, 0x6670, 0x4865, 0x84, 0x29, 0x6c, 0x8, 0x51, 0x54, 0x00, 0xff } - -// as an alternative when you want a byte array (assuming x86 endianness): -#define RENDERDOC_ShaderDebugMagicValue_bytearray \ - { 0x20, 0x55, 0xb2, 0xea, 0x70, 0x66, 0x65, 0x48, 0x84, 0x29, 0x6c, 0x8, 0x51, 0x54, 0x00, 0xff } - -// truncated version when only a uint64_t is available (e.g. Vulkan tags): -#define RENDERDOC_ShaderDebugMagicValue_truncated 0x48656670eab25520ULL - -////////////////////////////////////////////////////////////////////////////////////////////////// -// RenderDoc capture options -// - -typedef enum RENDERDOC_CaptureOption { - // Allow the application to enable vsync - // - // Default - enabled - // - // 1 - The application can enable or disable vsync at will - // 0 - vsync is force disabled - eRENDERDOC_Option_AllowVSync = 0, - - // Allow the application to enable fullscreen - // - // Default - enabled - // - // 1 - The application can enable or disable fullscreen at will - // 0 - fullscreen is force disabled - eRENDERDOC_Option_AllowFullscreen = 1, - - // Record API debugging events and messages - // - // Default - disabled - // - // 1 - Enable built-in API debugging features and records the results into - // the capture, which is matched up with events on replay - // 0 - no API debugging is forcibly enabled - eRENDERDOC_Option_APIValidation = 2, - eRENDERDOC_Option_DebugDeviceMode = 2, // deprecated name of this enum - - // Capture CPU callstacks for API events - // - // Default - disabled - // - // 1 - Enables capturing of callstacks - // 0 - no callstacks are captured - eRENDERDOC_Option_CaptureCallstacks = 3, - - // When capturing CPU callstacks, only capture them from actions. - // This option does nothing without the above option being enabled - // - // Default - disabled - // - // 1 - Only captures callstacks for actions. - // Ignored if CaptureCallstacks is disabled - // 0 - Callstacks, if enabled, are captured for every event. - eRENDERDOC_Option_CaptureCallstacksOnlyDraws = 4, - eRENDERDOC_Option_CaptureCallstacksOnlyActions = 4, - - // Specify a delay in seconds to wait for a debugger to attach, after - // creating or injecting into a process, before continuing to allow it to run. - // - // 0 indicates no delay, and the process will run immediately after injection - // - // Default - 0 seconds - // - eRENDERDOC_Option_DelayForDebugger = 5, - - // Verify buffer access. This includes checking the memory returned by a Map() call to - // detect any out-of-bounds modification, as well as initialising buffers with undefined contents - // to a marker value to catch use of uninitialised memory. - // - // NOTE: This option is only valid for OpenGL and D3D11. Explicit APIs such as D3D12 and Vulkan do - // not do the same kind of interception & checking and undefined contents are really undefined. - // - // Default - disabled - // - // 1 - Verify buffer access - // 0 - No verification is performed, and overwriting bounds may cause crashes or corruption in - // RenderDoc. - eRENDERDOC_Option_VerifyBufferAccess = 6, - - // The old name for eRENDERDOC_Option_VerifyBufferAccess was eRENDERDOC_Option_VerifyMapWrites. - // This option now controls the filling of uninitialised buffers with 0xdddddddd which was - // previously always enabled - eRENDERDOC_Option_VerifyMapWrites = eRENDERDOC_Option_VerifyBufferAccess, - - // Hooks any system API calls that create child processes, and injects - // RenderDoc into them recursively with the same options. - // - // Default - disabled - // - // 1 - Hooks into spawned child processes - // 0 - Child processes are not hooked by RenderDoc - eRENDERDOC_Option_HookIntoChildren = 7, - - // By default RenderDoc only includes resources in the final capture necessary - // for that frame, this allows you to override that behaviour. - // - // Default - disabled - // - // 1 - all live resources at the time of capture are included in the capture - // and available for inspection - // 0 - only the resources referenced by the captured frame are included - eRENDERDOC_Option_RefAllResources = 8, - - // **NOTE**: As of RenderDoc v1.1 this option has been deprecated. Setting or - // getting it will be ignored, to allow compatibility with older versions. - // In v1.1 the option acts as if it's always enabled. - // - // By default RenderDoc skips saving initial states for resources where the - // previous contents don't appear to be used, assuming that writes before - // reads indicate previous contents aren't used. - // - // Default - disabled - // - // 1 - initial contents at the start of each captured frame are saved, even if - // they are later overwritten or cleared before being used. - // 0 - unless a read is detected, initial contents will not be saved and will - // appear as black or empty data. - eRENDERDOC_Option_SaveAllInitials = 9, - - // In APIs that allow for the recording of command lists to be replayed later, - // RenderDoc may choose to not capture command lists before a frame capture is - // triggered, to reduce overheads. This means any command lists recorded once - // and replayed many times will not be available and may cause a failure to - // capture. - // - // NOTE: This is only true for APIs where multithreading is difficult or - // discouraged. Newer APIs like Vulkan and D3D12 will ignore this option - // and always capture all command lists since the API is heavily oriented - // around it and the overheads have been reduced by API design. - // - // 1 - All command lists are captured from the start of the application - // 0 - Command lists are only captured if their recording begins during - // the period when a frame capture is in progress. - eRENDERDOC_Option_CaptureAllCmdLists = 10, - - // Mute API debugging output when the API validation mode option is enabled - // - // Default - enabled - // - // 1 - Mute any API debug messages from being displayed or passed through - // 0 - API debugging is displayed as normal - eRENDERDOC_Option_DebugOutputMute = 11, - - // Option to allow vendor extensions to be used even when they may be - // incompatible with RenderDoc and cause corrupted replays or crashes. - // - // Default - inactive - // - // No values are documented, this option should only be used when absolutely - // necessary as directed by a RenderDoc developer. - eRENDERDOC_Option_AllowUnsupportedVendorExtensions = 12, - - // Define a soft memory limit which some APIs may aim to keep overhead under where - // possible. Anything above this limit will where possible be saved directly to disk during - // capture. - // This will cause increased disk space use (which may cause a capture to fail if disk space is - // exhausted) as well as slower capture times. - // - // Not all memory allocations may be deferred like this so it is not a guarantee of a memory - // limit. - // - // Units are in MBs, suggested values would range from 200MB to 1000MB. - // - // Default - 0 Megabytes - eRENDERDOC_Option_SoftMemoryLimit = 13, -} RENDERDOC_CaptureOption; - -// Sets an option that controls how RenderDoc behaves on capture. -// -// Returns 1 if the option and value are valid -// Returns 0 if either is invalid and the option is unchanged -typedef int(RENDERDOC_CC *pRENDERDOC_SetCaptureOptionU32)(RENDERDOC_CaptureOption opt, uint32_t val); -typedef int(RENDERDOC_CC *pRENDERDOC_SetCaptureOptionF32)(RENDERDOC_CaptureOption opt, float val); - -// Gets the current value of an option as a uint32_t -// -// If the option is invalid, 0xffffffff is returned -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetCaptureOptionU32)(RENDERDOC_CaptureOption opt); - -// Gets the current value of an option as a float -// -// If the option is invalid, -FLT_MAX is returned -typedef float(RENDERDOC_CC *pRENDERDOC_GetCaptureOptionF32)(RENDERDOC_CaptureOption opt); - -typedef enum RENDERDOC_InputButton { - // '0' - '9' matches ASCII values - eRENDERDOC_Key_0 = 0x30, - eRENDERDOC_Key_1 = 0x31, - eRENDERDOC_Key_2 = 0x32, - eRENDERDOC_Key_3 = 0x33, - eRENDERDOC_Key_4 = 0x34, - eRENDERDOC_Key_5 = 0x35, - eRENDERDOC_Key_6 = 0x36, - eRENDERDOC_Key_7 = 0x37, - eRENDERDOC_Key_8 = 0x38, - eRENDERDOC_Key_9 = 0x39, - - // 'A' - 'Z' matches ASCII values - eRENDERDOC_Key_A = 0x41, - eRENDERDOC_Key_B = 0x42, - eRENDERDOC_Key_C = 0x43, - eRENDERDOC_Key_D = 0x44, - eRENDERDOC_Key_E = 0x45, - eRENDERDOC_Key_F = 0x46, - eRENDERDOC_Key_G = 0x47, - eRENDERDOC_Key_H = 0x48, - eRENDERDOC_Key_I = 0x49, - eRENDERDOC_Key_J = 0x4A, - eRENDERDOC_Key_K = 0x4B, - eRENDERDOC_Key_L = 0x4C, - eRENDERDOC_Key_M = 0x4D, - eRENDERDOC_Key_N = 0x4E, - eRENDERDOC_Key_O = 0x4F, - eRENDERDOC_Key_P = 0x50, - eRENDERDOC_Key_Q = 0x51, - eRENDERDOC_Key_R = 0x52, - eRENDERDOC_Key_S = 0x53, - eRENDERDOC_Key_T = 0x54, - eRENDERDOC_Key_U = 0x55, - eRENDERDOC_Key_V = 0x56, - eRENDERDOC_Key_W = 0x57, - eRENDERDOC_Key_X = 0x58, - eRENDERDOC_Key_Y = 0x59, - eRENDERDOC_Key_Z = 0x5A, - - // leave the rest of the ASCII range free - // in case we want to use it later - eRENDERDOC_Key_NonPrintable = 0x100, - - eRENDERDOC_Key_Divide, - eRENDERDOC_Key_Multiply, - eRENDERDOC_Key_Subtract, - eRENDERDOC_Key_Plus, - - eRENDERDOC_Key_F1, - eRENDERDOC_Key_F2, - eRENDERDOC_Key_F3, - eRENDERDOC_Key_F4, - eRENDERDOC_Key_F5, - eRENDERDOC_Key_F6, - eRENDERDOC_Key_F7, - eRENDERDOC_Key_F8, - eRENDERDOC_Key_F9, - eRENDERDOC_Key_F10, - eRENDERDOC_Key_F11, - eRENDERDOC_Key_F12, - - eRENDERDOC_Key_Home, - eRENDERDOC_Key_End, - eRENDERDOC_Key_Insert, - eRENDERDOC_Key_Delete, - eRENDERDOC_Key_PageUp, - eRENDERDOC_Key_PageDn, - - eRENDERDOC_Key_Backspace, - eRENDERDOC_Key_Tab, - eRENDERDOC_Key_PrtScrn, - eRENDERDOC_Key_Pause, - - eRENDERDOC_Key_Max, -} RENDERDOC_InputButton; - -// Sets which key or keys can be used to toggle focus between multiple windows -// -// If keys is NULL or num is 0, toggle keys will be disabled -typedef void(RENDERDOC_CC *pRENDERDOC_SetFocusToggleKeys)(RENDERDOC_InputButton *keys, int num); - -// Sets which key or keys can be used to capture the next frame -// -// If keys is NULL or num is 0, captures keys will be disabled -typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureKeys)(RENDERDOC_InputButton *keys, int num); - -typedef enum RENDERDOC_OverlayBits { - // This single bit controls whether the overlay is enabled or disabled globally - eRENDERDOC_Overlay_Enabled = 0x1, - - // Show the average framerate over several seconds as well as min/max - eRENDERDOC_Overlay_FrameRate = 0x2, - - // Show the current frame number - eRENDERDOC_Overlay_FrameNumber = 0x4, - - // Show a list of recent captures, and how many captures have been made - eRENDERDOC_Overlay_CaptureList = 0x8, - - // Default values for the overlay mask - eRENDERDOC_Overlay_Default = - (eRENDERDOC_Overlay_Enabled | eRENDERDOC_Overlay_FrameRate | eRENDERDOC_Overlay_FrameNumber | eRENDERDOC_Overlay_CaptureList), - - // Enable all bits - eRENDERDOC_Overlay_All = ~0U, - - // Disable all bits - eRENDERDOC_Overlay_None = 0, -} RENDERDOC_OverlayBits; - -// returns the overlay bits that have been set -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetOverlayBits)(); -// sets the overlay bits with an and & or mask -typedef void(RENDERDOC_CC *pRENDERDOC_MaskOverlayBits)(uint32_t And, uint32_t Or); - -// this function will attempt to remove RenderDoc's hooks in the application. -// -// Note: that this can only work correctly if done immediately after -// the module is loaded, before any API work happens. RenderDoc will remove its -// injected hooks and shut down. Behaviour is undefined if this is called -// after any API functions have been called, and there is still no guarantee of -// success. -typedef void(RENDERDOC_CC *pRENDERDOC_RemoveHooks)(); - -// DEPRECATED: compatibility for code compiled against pre-1.4.1 headers. -typedef pRENDERDOC_RemoveHooks pRENDERDOC_Shutdown; - -// This function will unload RenderDoc's crash handler. -// -// If you use your own crash handler and don't want RenderDoc's handler to -// intercede, you can call this function to unload it and any unhandled -// exceptions will pass to the next handler. -typedef void(RENDERDOC_CC *pRENDERDOC_UnloadCrashHandler)(); - -// Sets the capture file path template -// -// pathtemplate is a UTF-8 string that gives a template for how captures will be named -// and where they will be saved. -// -// Any extension is stripped off the path, and captures are saved in the directory -// specified, and named with the filename and the frame number appended. If the -// directory does not exist it will be created, including any parent directories. -// -// If pathtemplate is NULL, the template will remain unchanged -// -// Example: -// -// SetCaptureFilePathTemplate("my_captures/example"); -// -// Capture #1 -> my_captures/example_frame123.rdc -// Capture #2 -> my_captures/example_frame456.rdc -typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureFilePathTemplate)(const char *pathtemplate); - -// returns the current capture path template, see SetCaptureFileTemplate above, as a UTF-8 string -typedef const char *(RENDERDOC_CC *pRENDERDOC_GetCaptureFilePathTemplate)(); - -// DEPRECATED: compatibility for code compiled against pre-1.1.2 headers. -typedef pRENDERDOC_SetCaptureFilePathTemplate pRENDERDOC_SetLogFilePathTemplate; -typedef pRENDERDOC_GetCaptureFilePathTemplate pRENDERDOC_GetLogFilePathTemplate; - -// returns the number of captures that have been made -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetNumCaptures)(); - -// This function returns the details of a capture, by index. New captures are added -// to the end of the list. -// -// filename will be filled with the absolute path to the capture file, as a UTF-8 string -// pathlength will be written with the length in bytes of the filename string -// timestamp will be written with the time of the capture, in seconds since the Unix epoch -// -// Any of the parameters can be NULL and they'll be skipped. -// -// The function will return 1 if the capture index is valid, or 0 if the index is invalid -// If the index is invalid, the values will be unchanged -// -// Note: when captures are deleted in the UI they will remain in this list, so the -// capture path may not exist anymore. -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetCapture)(uint32_t idx, char *filename, uint32_t *pathlength, uint64_t *timestamp); - -// Sets the comments associated with a capture file. These comments are displayed in the -// UI program when opening. -// -// filePath should be a path to the capture file to add comments to. If set to NULL or "" -// the most recent capture file created made will be used instead. -// comments should be a NULL-terminated UTF-8 string to add as comments. -// -// Any existing comments will be overwritten. -typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureFileComments)(const char *filePath, const char *comments); - -// returns 1 if the RenderDoc UI is connected to this application, 0 otherwise -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsTargetControlConnected)(); - -// DEPRECATED: compatibility for code compiled against pre-1.1.1 headers. -// This was renamed to IsTargetControlConnected in API 1.1.1, the old typedef is kept here for -// backwards compatibility with old code, it is castable either way since it's ABI compatible -// as the same function pointer type. -typedef pRENDERDOC_IsTargetControlConnected pRENDERDOC_IsRemoteAccessConnected; - -// This function will launch the Replay UI associated with the RenderDoc library injected -// into the running application. -// -// if connectTargetControl is 1, the Replay UI will be launched with a command line parameter -// to connect to this application -// cmdline is the rest of the command line, as a UTF-8 string. E.g. a captures to open -// if cmdline is NULL, the command line will be empty. -// -// returns the PID of the replay UI if successful, 0 if not successful. -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_LaunchReplayUI)(uint32_t connectTargetControl, const char *cmdline); - -// RenderDoc can return a higher version than requested if it's backwards compatible, -// this function returns the actual version returned. If a parameter is NULL, it will be -// ignored and the others will be filled out. -typedef void(RENDERDOC_CC *pRENDERDOC_GetAPIVersion)(int *major, int *minor, int *patch); - -// Requests that the replay UI show itself (if hidden or not the current top window). This can be -// used in conjunction with IsTargetControlConnected and LaunchReplayUI to intelligently handle -// showing the UI after making a capture. -// -// This will return 1 if the request was successfully passed on, though it's not guaranteed that -// the UI will be on top in all cases depending on OS rules. It will return 0 if there is no current -// target control connection to make such a request, or if there was another error -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_ShowReplayUI)(); - -////////////////////////////////////////////////////////////////////////// -// Capturing functions -// - -// A device pointer is a pointer to the API's root handle. -// -// This would be an ID3D11Device, HGLRC/GLXContext, ID3D12Device, etc -typedef void *RENDERDOC_DevicePointer; - -// A window handle is the OS's native window handle -// -// This would be an HWND, GLXDrawable, etc -typedef void *RENDERDOC_WindowHandle; - -// A helper macro for Vulkan, where the device handle cannot be used directly. -// -// Passing the VkInstance to this macro will return the RENDERDOC_DevicePointer to use. -// -// Specifically, the value needed is the dispatch table pointer, which sits as the first -// pointer-sized object in the memory pointed to by the VkInstance. Thus we cast to a void** and -// indirect once. -#define RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE(inst) (*((void **)(inst))) - -// This sets the RenderDoc in-app overlay in the API/window pair as 'active' and it will -// respond to keypresses. Neither parameter can be NULL -typedef void(RENDERDOC_CC *pRENDERDOC_SetActiveWindow)(RENDERDOC_DevicePointer device, RENDERDOC_WindowHandle wndHandle); - -// capture the next frame on whichever window and API is currently considered active -typedef void(RENDERDOC_CC *pRENDERDOC_TriggerCapture)(); - -// capture the next N frames on whichever window and API is currently considered active -typedef void(RENDERDOC_CC *pRENDERDOC_TriggerMultiFrameCapture)(uint32_t numFrames); - -// When choosing either a device pointer or a window handle to capture, you can pass NULL. -// Passing NULL specifies a 'wildcard' match against anything. This allows you to specify -// any API rendering to a specific window, or a specific API instance rendering to any window, -// or in the simplest case of one window and one API, you can just pass NULL for both. -// -// In either case, if there are two or more possible matching (device,window) pairs it -// is undefined which one will be captured. -// -// Note: for headless rendering you can pass NULL for the window handle and either specify -// a device pointer or leave it NULL as above. - -// Immediately starts capturing API calls on the specified device pointer and window handle. -// -// If there is no matching thing to capture (e.g. no supported API has been initialised), -// this will do nothing. -// -// The results are undefined (including crashes) if two captures are started overlapping, -// even on separate devices and/oror windows. -typedef void(RENDERDOC_CC *pRENDERDOC_StartFrameCapture)(RENDERDOC_DevicePointer device, RENDERDOC_WindowHandle wndHandle); - -// Returns whether or not a frame capture is currently ongoing anywhere. -// -// This will return 1 if a capture is ongoing, and 0 if there is no capture running -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsFrameCapturing)(); - -// Ends capturing immediately. -// -// This will return 1 if the capture succeeded, and 0 if there was an error capturing. -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_EndFrameCapture)(RENDERDOC_DevicePointer device, RENDERDOC_WindowHandle wndHandle); - -// Ends capturing immediately and discard any data stored without saving to disk. -// -// This will return 1 if the capture was discarded, and 0 if there was an error or no capture -// was in progress -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_DiscardFrameCapture)(RENDERDOC_DevicePointer device, RENDERDOC_WindowHandle wndHandle); - -// Only valid to be called between a call to StartFrameCapture and EndFrameCapture. Gives a custom -// title to the capture produced which will be displayed in the UI. -// -// If multiple captures are ongoing, this title will be applied to the first capture to end after -// this call. The second capture to end will have no title, unless this function is called again. -// -// Calling this function has no effect if no capture is currently running, and if it is called -// multiple times only the last title will be used. -typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureTitle)(const char *title); - -////////////////////////////////////////////////////////////////////////////////////////////////// -// RenderDoc API versions -// - -// RenderDoc uses semantic versioning (http://semver.org/). -// -// MAJOR version is incremented when incompatible API changes happen. -// MINOR version is incremented when functionality is added in a backwards-compatible manner. -// PATCH version is incremented when backwards-compatible bug fixes happen. -// -// Note that this means the API returned can be higher than the one you might have requested. -// e.g. if you are running against a newer RenderDoc that supports 1.0.1, it will be returned -// instead of 1.0.0. You can check this with the GetAPIVersion entry point -typedef enum RENDERDOC_Version { - eRENDERDOC_API_Version_1_0_0 = 10000, // RENDERDOC_API_1_0_0 = 1 00 00 - eRENDERDOC_API_Version_1_0_1 = 10001, // RENDERDOC_API_1_0_1 = 1 00 01 - eRENDERDOC_API_Version_1_0_2 = 10002, // RENDERDOC_API_1_0_2 = 1 00 02 - eRENDERDOC_API_Version_1_1_0 = 10100, // RENDERDOC_API_1_1_0 = 1 01 00 - eRENDERDOC_API_Version_1_1_1 = 10101, // RENDERDOC_API_1_1_1 = 1 01 01 - eRENDERDOC_API_Version_1_1_2 = 10102, // RENDERDOC_API_1_1_2 = 1 01 02 - eRENDERDOC_API_Version_1_2_0 = 10200, // RENDERDOC_API_1_2_0 = 1 02 00 - eRENDERDOC_API_Version_1_3_0 = 10300, // RENDERDOC_API_1_3_0 = 1 03 00 - eRENDERDOC_API_Version_1_4_0 = 10400, // RENDERDOC_API_1_4_0 = 1 04 00 - eRENDERDOC_API_Version_1_4_1 = 10401, // RENDERDOC_API_1_4_1 = 1 04 01 - eRENDERDOC_API_Version_1_4_2 = 10402, // RENDERDOC_API_1_4_2 = 1 04 02 - eRENDERDOC_API_Version_1_5_0 = 10500, // RENDERDOC_API_1_5_0 = 1 05 00 - eRENDERDOC_API_Version_1_6_0 = 10600, // RENDERDOC_API_1_6_0 = 1 06 00 -} RENDERDOC_Version; - -// API version changelog: -// -// 1.0.0 - initial release -// 1.0.1 - Bugfix: IsFrameCapturing() was returning false for captures that were triggered -// by keypress or TriggerCapture, instead of Start/EndFrameCapture. -// 1.0.2 - Refactor: Renamed eRENDERDOC_Option_DebugDeviceMode to eRENDERDOC_Option_APIValidation -// 1.1.0 - Add feature: TriggerMultiFrameCapture(). Backwards compatible with 1.0.x since the new -// function pointer is added to the end of the struct, the original layout is identical -// 1.1.1 - Refactor: Renamed remote access to target control (to better disambiguate from remote -// replay/remote server concept in replay UI) -// 1.1.2 - Refactor: Renamed "log file" in function names to just capture, to clarify that these -// are captures and not debug logging files. This is the first API version in the v1.0 -// branch. -// 1.2.0 - Added feature: SetCaptureFileComments() to add comments to a capture file that will be -// displayed in the UI program on load. -// 1.3.0 - Added feature: New capture option eRENDERDOC_Option_AllowUnsupportedVendorExtensions -// which allows users to opt-in to allowing unsupported vendor extensions to function. -// Should be used at the user's own risk. -// Refactor: Renamed eRENDERDOC_Option_VerifyMapWrites to -// eRENDERDOC_Option_VerifyBufferAccess, which now also controls initialisation to -// 0xdddddddd of uninitialised buffer contents. -// 1.4.0 - Added feature: DiscardFrameCapture() to discard a frame capture in progress and stop -// capturing without saving anything to disk. -// 1.4.1 - Refactor: Renamed Shutdown to RemoveHooks to better clarify what is happening -// 1.4.2 - Refactor: Renamed 'draws' to 'actions' in callstack capture option. -// 1.5.0 - Added feature: ShowReplayUI() to request that the replay UI show itself if connected -// 1.6.0 - Added feature: SetCaptureTitle() which can be used to set a title for a -// capture made with StartFrameCapture() or EndFrameCapture() - -typedef struct RENDERDOC_API_1_6_0 { - pRENDERDOC_GetAPIVersion GetAPIVersion; - - pRENDERDOC_SetCaptureOptionU32 SetCaptureOptionU32; - pRENDERDOC_SetCaptureOptionF32 SetCaptureOptionF32; - - pRENDERDOC_GetCaptureOptionU32 GetCaptureOptionU32; - pRENDERDOC_GetCaptureOptionF32 GetCaptureOptionF32; - - pRENDERDOC_SetFocusToggleKeys SetFocusToggleKeys; - pRENDERDOC_SetCaptureKeys SetCaptureKeys; - - pRENDERDOC_GetOverlayBits GetOverlayBits; - pRENDERDOC_MaskOverlayBits MaskOverlayBits; - - // Shutdown was renamed to RemoveHooks in 1.4.1. - // These unions allow old code to continue compiling without changes - union { - pRENDERDOC_Shutdown Shutdown; - pRENDERDOC_RemoveHooks RemoveHooks; - }; - pRENDERDOC_UnloadCrashHandler UnloadCrashHandler; - - // Get/SetLogFilePathTemplate was renamed to Get/SetCaptureFilePathTemplate in 1.1.2. - // These unions allow old code to continue compiling without changes - union { - // deprecated name - pRENDERDOC_SetLogFilePathTemplate SetLogFilePathTemplate; - // current name - pRENDERDOC_SetCaptureFilePathTemplate SetCaptureFilePathTemplate; - }; - union { - // deprecated name - pRENDERDOC_GetLogFilePathTemplate GetLogFilePathTemplate; - // current name - pRENDERDOC_GetCaptureFilePathTemplate GetCaptureFilePathTemplate; - }; - - pRENDERDOC_GetNumCaptures GetNumCaptures; - pRENDERDOC_GetCapture GetCapture; - - pRENDERDOC_TriggerCapture TriggerCapture; - - // IsRemoteAccessConnected was renamed to IsTargetControlConnected in 1.1.1. - // This union allows old code to continue compiling without changes - union { - // deprecated name - pRENDERDOC_IsRemoteAccessConnected IsRemoteAccessConnected; - // current name - pRENDERDOC_IsTargetControlConnected IsTargetControlConnected; - }; - pRENDERDOC_LaunchReplayUI LaunchReplayUI; - - pRENDERDOC_SetActiveWindow SetActiveWindow; - - pRENDERDOC_StartFrameCapture StartFrameCapture; - pRENDERDOC_IsFrameCapturing IsFrameCapturing; - pRENDERDOC_EndFrameCapture EndFrameCapture; - - // new function in 1.1.0 - pRENDERDOC_TriggerMultiFrameCapture TriggerMultiFrameCapture; - - // new function in 1.2.0 - pRENDERDOC_SetCaptureFileComments SetCaptureFileComments; - - // new function in 1.4.0 - pRENDERDOC_DiscardFrameCapture DiscardFrameCapture; - - // new function in 1.5.0 - pRENDERDOC_ShowReplayUI ShowReplayUI; - - // new function in 1.6.0 - pRENDERDOC_SetCaptureTitle SetCaptureTitle; -} RENDERDOC_API_1_6_0; - -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_0; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_1; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_2; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_0; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_1; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_2; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_2_0; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_3_0; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_0; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_1; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_2; -typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_5_0; - -////////////////////////////////////////////////////////////////////////////////////////////////// -// RenderDoc API entry point -// -// This entry point can be obtained via GetProcAddress/dlsym if RenderDoc is available. -// -// The name is the same as the typedef - "RENDERDOC_GetAPI" -// -// This function is not thread safe, and should not be called on multiple threads at once. -// Ideally, call this once as early as possible in your application's startup, before doing -// any API work, since some configuration functionality etc has to be done also before -// initialising any APIs. -// -// Parameters: -// version is a single value from the RENDERDOC_Version above. -// -// outAPIPointers will be filled out with a pointer to the corresponding struct of function -// pointers. -// -// Returns: -// 1 - if the outAPIPointers has been filled with a pointer to the API struct requested -// 0 - if the requested version is not supported or the arguments are invalid. -// -typedef int(RENDERDOC_CC *pRENDERDOC_GetAPI)(RENDERDOC_Version version, void **outAPIPointers); - -#ifdef __cplusplus -} // extern "C" -#endif \ No newline at end of file diff --git a/third_party/teakra b/third_party/teakra deleted file mode 160000 index e34a8679..00000000 --- a/third_party/teakra +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e34a86799efd65e3c44b915a4d65b3514d34df4f diff --git a/third_party/zep b/third_party/zep deleted file mode 160000 index 75406e1c..00000000 --- a/third_party/zep +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 75406e1c854b9fa6ede697d6165664e0e11b09ff